ai-helper-agent 2.3.1 → 2.4.0

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.
Files changed (74) hide show
  1. package/README.md +13 -3
  2. package/dist/assets/__vite-browser-external-CM3Eme-n.js +1 -0
  3. package/dist/assets/agent-store-Ce3f4Ya3.js +1 -0
  4. package/dist/assets/background.js +104 -80
  5. package/dist/assets/chat-export-BNCkL6fS.js +37 -0
  6. package/dist/assets/chunk-CMxvf4Kt.js +1 -0
  7. package/dist/assets/content.js +159 -156
  8. package/dist/assets/{dist-BQOFgIxk.js → dist-DhUTa_WT.js} +5 -6
  9. package/dist/assets/dist-LQPh1k0y.js +24 -0
  10. package/dist/assets/i18n-ouMgDZ2t.js +49 -0
  11. package/dist/assets/jszip.min-Bm_16osY.js +2 -0
  12. package/dist/assets/lib-33nIefF6.js +220 -0
  13. package/dist/assets/{marked.min.js-08SGy6CO.js → marked.min.js-D2rXgLAQ.js} +7 -8
  14. package/dist/assets/{marked.min.js-loader-4kRZ9iCP.js → marked.min.js-loader-tKH5SQVQ.js} +1 -1
  15. package/dist/assets/model-profiles-6dzdrSS4.js +24 -0
  16. package/dist/assets/network-scope-CNRYXk74.js +1 -0
  17. package/dist/assets/options-Cp1UMkjK.css +1 -0
  18. package/dist/assets/options.js +108 -102
  19. package/dist/assets/{page-snapshot-renderer-CVL6r6Kf.js → page-snapshot-renderer-j72q92KH.js} +2 -3
  20. package/dist/assets/pdf-DnVqBaAN.js +6 -0
  21. package/dist/assets/session-store-CmGs_rhh.js +76 -0
  22. package/dist/assets/side_panel.css +1 -1
  23. package/dist/assets/side_panel.js +958 -1124
  24. package/dist/assets/theme-BRAX5X2F.css +1 -0
  25. package/dist/assets/{modulepreload-polyfill-P2Xu9kJm.js → theme-CLwYsx9o.js} +1 -1
  26. package/dist/assets/utils-9i9g8vW8.js +112 -0
  27. package/dist/assets/version-t8HzLv3V.js +1 -0
  28. package/dist/assets/xlsx-DGkz7cnk.js +105 -0
  29. package/dist/manifest.json +2 -5
  30. package/dist/offscreen/offscreen.js +7 -7
  31. package/dist/options.html +151 -75
  32. package/dist/side_panel.html +167 -137
  33. package/package.json +1 -1
  34. package/src/config.js +3 -2
  35. package/src/executor.js +99 -18
  36. package/src/locales/en.json +16 -2
  37. package/src/locales/zh.json +16 -2
  38. package/src/memory/injection.js +12 -2
  39. package/src/memory/routes.js +6 -0
  40. package/src/memory/service.js +57 -2
  41. package/src/rag/manager.js +1 -1
  42. package/src/rag/url-guard.js +27 -12
  43. package/src/security.js +433 -31
  44. package/src/server.js +28 -8
  45. package/dist/assets/agent-store-DcAs6YyA.js +0 -2
  46. package/dist/assets/agent-store-DcAs6YyA.js.map +0 -1
  47. package/dist/assets/background.js.map +0 -1
  48. package/dist/assets/dist-BQOFgIxk.js.map +0 -1
  49. package/dist/assets/i18n-C4jSRoCH.js +0 -50
  50. package/dist/assets/i18n-C4jSRoCH.js.map +0 -1
  51. package/dist/assets/jszip.min-BXqW2-9v.js +0 -3
  52. package/dist/assets/jszip.min-BXqW2-9v.js.map +0 -1
  53. package/dist/assets/lib-Bi7BFuND.js +0 -221
  54. package/dist/assets/lib-Bi7BFuND.js.map +0 -1
  55. package/dist/assets/marked.min.js-08SGy6CO.js.map +0 -1
  56. package/dist/assets/model-profiles-Dl_MsXWa.js +0 -25
  57. package/dist/assets/model-profiles-Dl_MsXWa.js.map +0 -1
  58. package/dist/assets/options-8-nu3P5K.css +0 -1
  59. package/dist/assets/options.js.map +0 -1
  60. package/dist/assets/page-snapshot-renderer-CVL6r6Kf.js.map +0 -1
  61. package/dist/assets/pdf-HiJ0icvU.js +0 -7
  62. package/dist/assets/pdf-HiJ0icvU.js.map +0 -1
  63. package/dist/assets/rolldown-runtime-C0FnF6B9.js +0 -1
  64. package/dist/assets/session-store-CzVQCgQ_.js +0 -77
  65. package/dist/assets/session-store-CzVQCgQ_.js.map +0 -1
  66. package/dist/assets/side_panel.js.map +0 -1
  67. package/dist/assets/version-CNG2KGnJ.js +0 -2
  68. package/dist/assets/version-CNG2KGnJ.js.map +0 -1
  69. package/dist/assets/xlsx-BHKh7vjA.js +0 -106
  70. package/dist/assets/xlsx-BHKh7vjA.js.map +0 -1
  71. package/dist/icons/badges/license-MIT.svg +0 -21
  72. package/dist/icons/badges/platform.svg +0 -21
  73. package/dist/icons/badges/prs-welcome.svg +0 -21
  74. package/dist/icons/badges/version.svg +0 -21
@@ -1 +0,0 @@
1
- {"version":3,"file":"dist-BQOFgIxk.js","names":["JSZip"],"sources":["../../node_modules/@jvmr/pptx-to-html/dist/index.js"],"sourcesContent":["import JSZip from \"jszip\";\n//#region src/core/XmlHelper.ts\nfunction libWarn(msg) {\n\tif (typeof console !== \"undefined\" && console.warn) console.warn(`[pptx-to-html] ${msg}`);\n}\nvar XmlHelper = class XmlHelper {\n\tstatic domParserFactory = null;\n\t/**\n\t* Parses a string containing XML into a DOM Document\n\t* @param xmlString XML string to parse\n\t* @returns DOM Document\n\t*/\n\tstatic parseXml(xmlString) {\n\t\tif (XmlHelper.domParserFactory) return XmlHelper.domParserFactory().parseFromString(xmlString, \"application/xml\");\n\t\tconst DP = globalThis?.DOMParser;\n\t\tif (typeof DP === \"function\") return new DP().parseFromString(xmlString, \"application/xml\");\n\t\tlibWarn(\"No DOMParser available. Provide one through XmlHelper.setDomParser() or pptxToHtml({ domParserFactory }).\");\n\t\tthrow new Error(\"DOMParser not available in this environment\");\n\t}\n\t/**\n\t* Gets a direct child element by local tag name\n\t*/\n\tstatic getDirectChildrenByTagName(parent, tag) {\n\t\treturn Array.from(parent.children).filter((child) => child.localName === tag);\n\t}\n\t/**\n\t* Gets attribute value as number, defaulting to 0\n\t*/\n\tstatic getAttrAsNumber(el, name) {\n\t\tconst raw = el.getAttribute(name);\n\t\tif (raw == null || raw === \"\") return 0;\n\t\tconst n = Number(raw);\n\t\treturn Number.isFinite(n) ? n : 0;\n\t}\n\t/** Returns the paint order of an element's top-level ancestor in a shape tree. */\n\tstatic getZIndex(element, spTree) {\n\t\tlet top = element;\n\t\twhile (top?.parentElement && top.parentElement !== spTree) top = top.parentElement;\n\t\tif (!top || top.parentElement !== spTree) return 0;\n\t\treturn Array.from(spTree.children).indexOf(top);\n\t}\n\tstatic getColorFromElement(el, themeColors) {\n\t\tif (!el) return void 0;\n\t\tconst srgb = el.getElementsByTagNameNS(\"*\", \"srgbClr\")[0];\n\t\tif (srgb) {\n\t\t\tconst val = srgb.getAttribute(\"val\");\n\t\t\treturn val ? `#${val}` : void 0;\n\t\t}\n\t\tconst scheme = el.getElementsByTagNameNS(\"*\", \"schemeClr\")[0];\n\t\tif (scheme) {\n\t\t\tconst val = scheme.getAttribute(\"val\");\n\t\t\tif (val && themeColors) return themeColors[{\n\t\t\t\tbg1: \"lt1\",\n\t\t\t\tbg2: \"lt2\",\n\t\t\t\ttx1: \"dk1\",\n\t\t\t\ttx2: \"dk2\"\n\t\t\t}[val] || val];\n\t\t\treturn;\n\t\t}\n\t\tconst sys = el.getElementsByTagNameNS(\"*\", \"sysClr\")[0];\n\t\tif (sys) {\n\t\t\tconst lastClr = sys.getAttribute(\"lastClr\");\n\t\t\treturn lastClr ? `#${lastClr}` : void 0;\n\t\t}\n\t}\n\tstatic extractThemeColors(themeDoc) {\n\t\tif (!themeDoc) return {};\n\t\tconst NS = \"http://schemas.openxmlformats.org/drawingml/2006/main\";\n\t\tconst themeColors = {};\n\t\tconst clrScheme = themeDoc.getElementsByTagNameNS(NS, \"clrScheme\")[0];\n\t\tif (!clrScheme) return {};\n\t\tfor (const node of Array.from(clrScheme.children)) {\n\t\t\tconst name = node.localName;\n\t\t\tconst srgbClr = node.getElementsByTagNameNS(NS, \"srgbClr\")[0];\n\t\t\tconst sysClr = node.getElementsByTagNameNS(NS, \"sysClr\")[0];\n\t\t\tconst hex = srgbClr?.getAttribute(\"val\") ?? sysClr?.getAttribute(\"lastClr\");\n\t\t\tif (hex) themeColors[name] = `#${hex}`;\n\t\t}\n\t\treturn themeColors;\n\t}\n\t/**\n\t* Extracts table styles (fills and text colors per region) from theme XML.\n\t* Returns a map keyed by styleId (GUID or name), with region color maps.\n\t*/\n\tstatic extractThemeTableStyles(themeDoc) {\n\t\tconst styles = {};\n\t\tif (!themeDoc) return styles;\n\t\tconst themeColors = XmlHelper.extractThemeColors(themeDoc);\n\t\tconst tblStyleLst = themeDoc.getElementsByTagNameNS(\"*\", \"tblStyleLst\")[0] || null;\n\t\tif (!tblStyleLst) return styles;\n\t\tconst tblStyles = Array.from(tblStyleLst.getElementsByTagNameNS(\"*\", \"tblStyle\"));\n\t\tfor (const ts of tblStyles) {\n\t\t\tconst id = ts.getAttribute(\"styleId\") || ts.getAttribute(\"name\") || \"\";\n\t\t\tif (!id) continue;\n\t\t\tconst fills = {};\n\t\t\tconst fontColors = {};\n\t\t\tconst prNodes = Array.from(ts.getElementsByTagNameNS(\"*\", \"tblStylePr\"));\n\t\t\tfor (const pr of prNodes) {\n\t\t\t\tconst type = pr.getAttribute(\"type\") || pr.getAttribute(\"val\") || \"\";\n\t\t\t\tif (!type) continue;\n\t\t\t\tconst tcStyle = pr.getElementsByTagNameNS(\"*\", \"tcStyle\")[0] || null;\n\t\t\t\tconst solidCandidates = [\n\t\t\t\t\t(tcStyle?.getElementsByTagNameNS(\"*\", \"tcPr\")[0] || null)?.getElementsByTagNameNS(\"*\", \"solidFill\")[0] || null,\n\t\t\t\t\ttcStyle?.getElementsByTagNameNS(\"*\", \"solidFill\")[0] || null,\n\t\t\t\t\tpr.getElementsByTagNameNS(\"*\", \"solidFill\")[0] || null\n\t\t\t\t];\n\t\t\t\tlet fillColor;\n\t\t\t\tfor (const cand of solidCandidates) if (cand && !fillColor) fillColor = XmlHelper.getColorFromElement(cand, themeColors);\n\t\t\t\tif (!fillColor) {\n\t\t\t\t\tconst fillRef = tcStyle?.getElementsByTagNameNS(\"*\", \"fillRef\")[0] || pr.getElementsByTagNameNS(\"*\", \"fillRef\")[0] || null;\n\t\t\t\t\tfillColor = XmlHelper.getColorFromElement(fillRef, themeColors);\n\t\t\t\t}\n\t\t\t\tif (fillColor) fills[type] = fillColor;\n\t\t\t\tconst txStyle = pr.getElementsByTagNameNS(\"*\", \"tcTxStyle\")[0] || null;\n\t\t\t\tconst txFillSolid = txStyle?.getElementsByTagNameNS(\"*\", \"solidFill\")[0] || null;\n\t\t\t\tlet textColor = XmlHelper.getColorFromElement(txFillSolid, themeColors);\n\t\t\t\tif (!textColor) {\n\t\t\t\t\tconst fontRef = txStyle?.getElementsByTagNameNS(\"*\", \"fontRef\")[0] || null;\n\t\t\t\t\ttextColor = XmlHelper.getColorFromElement(fontRef, themeColors);\n\t\t\t\t}\n\t\t\t\tif (!textColor) {\n\t\t\t\t\tconst anyScheme = txStyle?.getElementsByTagNameNS(\"*\", \"schemeClr\")[0] || null;\n\t\t\t\t\ttextColor = XmlHelper.getColorFromElement(anyScheme, themeColors);\n\t\t\t\t}\n\t\t\t\tif (textColor) fontColors[type] = textColor;\n\t\t\t}\n\t\t\tstyles[id] = {\n\t\t\t\tfills,\n\t\t\t\tfontColors\n\t\t\t};\n\t\t}\n\t\treturn styles;\n\t}\n\t/** Allow a host application to provide a DOM parser instance factory. */\n\tstatic setDomParser(factory) {\n\t\tXmlHelper.domParserFactory = factory;\n\t}\n\t/** Relationship lookup: by Type suffix (avoids querySelector CSS) */\n\tstatic findRelationshipByTypeSuffix(doc, suffix) {\n\t\tconst rels = doc.getElementsByTagName(\"Relationship\");\n\t\tfor (const el of Array.from(rels)) if ((el.getAttribute(\"Type\") || \"\").endsWith(suffix)) return el;\n\t\treturn null;\n\t}\n\t/** Relationship lookup: by Id */\n\tstatic findRelationshipById(doc, id) {\n\t\tconst rels = doc.getElementsByTagName(\"Relationship\");\n\t\tfor (const el of Array.from(rels)) if (el.getAttribute(\"Id\") === id) return el;\n\t\treturn null;\n\t}\n};\n//#endregion\n//#region src/elements/TextExtractor.ts\n/**\n* Responsible for extracting text elements from a slide XML node.\n*/\nvar TextExtractor = class {\n\t/**\n\t* Extracts all text elements from the slide's <spTree> node.\n\t* @param spTree The <spTree> element of the slide.\n\t* @param themeColors Theme color mapping (e.g. tx1, bg2).\n\t* @returns List of TextElement extracted.\n\t*/\n\tstatic extract(spTree, themeColors, opts = {}) {\n\t\tif (!spTree) return [];\n\t\tconst elements = [];\n\t\tconst shapes = spTree.getElementsByTagNameNS(\"*\", \"sp\");\n\t\tfor (const shape of Array.from(shapes)) {\n\t\t\tconst ph = (shape.getElementsByTagNameNS(\"*\", \"nvPr\")[0] ?? null)?.getElementsByTagNameNS(\"*\", \"ph\")[0] ?? null;\n\t\t\tconst isPlaceholder = !!ph;\n\t\t\tif (opts.context && opts.context !== \"slide\" && isPlaceholder) continue;\n\t\t\tconst txBody = shape.getElementsByTagNameNS(\"*\", \"txBody\")[0];\n\t\t\tif (!txBody) continue;\n\t\t\tconst paragraphs = txBody.getElementsByTagNameNS(\"*\", \"p\");\n\t\t\tconst bodyPr = txBody.getElementsByTagNameNS(\"*\", \"bodyPr\")[0] ?? null;\n\t\t\tconst anchor = bodyPr?.getAttribute(\"anchor\") || void 0;\n\t\t\tconst phIdx = ph?.getAttribute(\"idx\") || void 0;\n\t\t\tconst phType = ph?.getAttribute(\"type\") || (phIdx ? opts.placeholderTypes?.[phIdx] : void 0) || void 0;\n\t\t\tconst isTitlePh = phType === \"title\" || phType === \"ctrTitle\";\n\t\t\tconst verticalAlign = anchor === \"ctr\" ? \"middle\" : anchor === \"b\" ? \"bottom\" : isTitlePh ? \"bottom\" : \"top\";\n\t\t\tconst lIns = bodyPr?.getAttribute(\"lIns\");\n\t\t\tconst tIns = bodyPr?.getAttribute(\"tIns\");\n\t\t\tconst rIns = bodyPr?.getAttribute(\"rIns\");\n\t\t\tconst bIns = bodyPr?.getAttribute(\"bIns\");\n\t\t\tconst padding = {\n\t\t\t\tleft: lIns ? Number(lIns) / 9525 : 0,\n\t\t\t\ttop: tIns ? Number(tIns) / 9525 : 0,\n\t\t\t\tright: rIns ? Number(rIns) / 9525 : 0,\n\t\t\t\tbottom: bIns ? Number(bIns) / 9525 : 0\n\t\t\t};\n\t\t\tconst textRuns = [];\n\t\t\tlet fontName = \"Arial\";\n\t\t\tlet fontSize = isTitlePh ? 44 : phType === \"subTitle\" ? 24 : 18;\n\t\t\tlet fontWeight = isTitlePh ? \"bold\" : \"normal\";\n\t\t\tconst isCenteredPh = isTitlePh || phType === \"subTitle\";\n\t\t\tlet color = void 0;\n\t\t\tlet horizontalAlign = void 0;\n\t\t\tconst paraItems = [];\n\t\t\tconst lvlDefaults = {};\n\t\t\tconst lstStyle = txBody.querySelector(\"*|lstStyle\");\n\t\t\tif (lstStyle) for (const node of Array.from(lstStyle.children)) {\n\t\t\t\tconst m = node.localName.match(/^lvl(\\d+)pPr$/);\n\t\t\t\tif (!m) continue;\n\t\t\t\tconst idx = parseInt(m[1], 10) - 1;\n\t\t\t\tlet kind = \"p\";\n\t\t\t\tlet listStyle = void 0;\n\t\t\t\tif (node.querySelector(\"*|buNone\")) kind = \"p\";\n\t\t\t\telse if (node.querySelector(\"*|buAutoNum\")) {\n\t\t\t\t\tkind = \"ol\";\n\t\t\t\t\tlistStyle = mapAutoNumToCss(node.querySelector(\"*|buAutoNum\")?.getAttribute(\"type\") || \"arabicPeriod\");\n\t\t\t\t} else if (node.querySelector(\"*|buChar\")) {\n\t\t\t\t\tkind = \"ul\";\n\t\t\t\t\tlistStyle = \"disc\";\n\t\t\t\t}\n\t\t\t\tlvlDefaults[idx] = {\n\t\t\t\t\tkind,\n\t\t\t\t\tlistStyle\n\t\t\t\t};\n\t\t\t}\n\t\t\tfor (const p of Array.from(paragraphs)) {\n\t\t\t\tconst pPr = p.getElementsByTagNameNS(\"*\", \"pPr\")[0] ?? null;\n\t\t\t\tconst algn = pPr?.getAttribute(\"algn\") || void 0;\n\t\t\t\tif (algn && !horizontalAlign) horizontalAlign = algn === \"ctr\" ? \"center\" : algn === \"r\" ? \"right\" : algn.startsWith(\"just\") ? \"justify\" : \"left\";\n\t\t\t\tconst runs = p.getElementsByTagNameNS(\"*\", \"r\");\n\t\t\t\tlet paraText = getParagraphText(p);\n\t\t\t\tif (paraText) paraText.split(/\\n+/).forEach((t) => {\n\t\t\t\t\tif (t) textRuns.push(t);\n\t\t\t\t});\n\t\t\t\tfor (const r of Array.from(runs)) {\n\t\t\t\t\tconst rPr = r.getElementsByTagNameNS(\"*\", \"rPr\")[0];\n\t\t\t\t\tif (rPr) {\n\t\t\t\t\t\tfontName = rPr.getElementsByTagNameNS(\"*\", \"latin\")[0]?.getAttribute(\"typeface\") ?? fontName;\n\t\t\t\t\t\tconst sz = rPr.getAttribute(\"sz\");\n\t\t\t\t\t\tif (sz) {\n\t\t\t\t\t\t\tconst n = parseInt(sz, 10);\n\t\t\t\t\t\t\tif (Number.isFinite(n)) fontSize = n / 100;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst bAttr = rPr.getAttribute(\"b\");\n\t\t\t\t\t\tif (bAttr === \"1\") fontWeight = \"bold\";\n\t\t\t\t\t\telse if (bAttr === \"0\") fontWeight = \"normal\";\n\t\t\t\t\t\tconst solidFill = rPr.querySelector(\"*|solidFill\");\n\t\t\t\t\t\tconst candidate = XmlHelper.getColorFromElement(solidFill || null, themeColors);\n\t\t\t\t\t\tif (candidate) color = candidate;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!color && pPr) {\n\t\t\t\t\tconst endFill = (pPr.getElementsByTagNameNS(\"*\", \"endParaRPr\")[0] ?? null)?.querySelector(\"*|solidFill\") || null;\n\t\t\t\t\tconst c1 = XmlHelper.getColorFromElement(endFill, themeColors);\n\t\t\t\t\tif (c1) color = c1;\n\t\t\t\t\tif (!color) {\n\t\t\t\t\t\tconst defFillP = (pPr.getElementsByTagNameNS(\"*\", \"defRPr\")[0] ?? null)?.querySelector(\"*|solidFill\") || null;\n\t\t\t\t\t\tconst c2 = XmlHelper.getColorFromElement(defFillP, themeColors);\n\t\t\t\t\t\tif (c2) color = c2;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst lvlAttr = pPr?.getAttribute(\"lvl\");\n\t\t\t\tconst lvl = lvlAttr ? parseInt(lvlAttr, 10) : 0;\n\t\t\t\tlet kind = \"p\";\n\t\t\t\tlet listStyle = void 0;\n\t\t\t\tif (pPr) {\n\t\t\t\t\tif (pPr.querySelector(\"*|buNone\")) kind = \"p\";\n\t\t\t\t\telse if (pPr.querySelector(\"*|buAutoNum\")) {\n\t\t\t\t\t\tkind = \"ol\";\n\t\t\t\t\t\tlistStyle = mapAutoNumToCss(pPr.querySelector(\"*|buAutoNum\")?.getAttribute(\"type\") || \"arabicPeriod\");\n\t\t\t\t\t} else if (pPr.querySelector(\"*|buChar\")) {\n\t\t\t\t\t\tkind = \"ul\";\n\t\t\t\t\t\tlistStyle = \"disc\";\n\t\t\t\t\t} else if (lvlDefaults[lvl]) {\n\t\t\t\t\t\tkind = lvlDefaults[lvl].kind;\n\t\t\t\t\t\tlistStyle = lvlDefaults[lvl].listStyle;\n\t\t\t\t\t} else if (lvl > 0) {\n\t\t\t\t\t\tkind = \"ul\";\n\t\t\t\t\t\tlistStyle = \"disc\";\n\t\t\t\t\t}\n\t\t\t\t} else if (lvlDefaults[lvl]) {\n\t\t\t\t\tkind = lvlDefaults[lvl].kind;\n\t\t\t\t\tlistStyle = lvlDefaults[lvl].listStyle;\n\t\t\t\t} else if (lvl > 0) {\n\t\t\t\t\tkind = \"ul\";\n\t\t\t\t\tlistStyle = \"disc\";\n\t\t\t\t}\n\t\t\t\tparaItems.push({\n\t\t\t\t\tkind,\n\t\t\t\t\ttext: paraText,\n\t\t\t\t\tlvl: isNaN(lvl) ? 0 : lvl,\n\t\t\t\t\tlistStyle\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (!color) {\n\t\t\t\tconst lstFill = txBody.querySelector(\"*|lstStyle *|defRPr\")?.querySelector(\"*|solidFill\");\n\t\t\t\tconst c0 = XmlHelper.getColorFromElement(lstFill || null, themeColors);\n\t\t\t\tif (c0) color = c0;\n\t\t\t\tconst defFill = txBody.querySelector(\"*|defRPr\")?.querySelector(\"*|solidFill\");\n\t\t\t\tconst fallback1 = XmlHelper.getColorFromElement(defFill || null, themeColors);\n\t\t\t\tif (fallback1) color = fallback1;\n\t\t\t\tif (!color) {\n\t\t\t\t\tconst shapeFill = shape.querySelector(\"p\\\\:spPr, spPr\")?.querySelector(\"*|solidFill\");\n\t\t\t\t\tconst fallback2 = XmlHelper.getColorFromElement(shapeFill || null, themeColors);\n\t\t\t\t\tif (fallback2) color = fallback2;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst content = textRuns.join(\" \").trim();\n\t\t\tif (opts.context && opts.context !== \"slide\") {\n\t\t\t\tconst c = content.toLowerCase();\n\t\t\t\tif (c.includes(\"click to add\") || c.includes(\"click to edit\") || c.includes(\"haga clic para agregar\") || c.includes(\"haga clic para editar\") || c.includes(\"hacer clic para agregar\") || c.includes(\"hacer clic para editar\")) continue;\n\t\t\t}\n\t\t\tif (content === \"\") continue;\n\t\t\tconst xfrm = shape.getElementsByTagNameNS(\"*\", \"xfrm\")[0];\n\t\t\tlet off = xfrm?.getElementsByTagNameNS(\"*\", \"off\")[0] ?? null;\n\t\t\tlet ext = xfrm?.getElementsByTagNameNS(\"*\", \"ext\")[0] ?? null;\n\t\t\tlet x, y, cx, cy;\n\t\t\tif (off && ext) {\n\t\t\t\tx = XmlHelper.getAttrAsNumber(off, \"x\");\n\t\t\t\ty = XmlHelper.getAttrAsNumber(off, \"y\");\n\t\t\t\tcx = XmlHelper.getAttrAsNumber(ext, \"cx\");\n\t\t\t\tcy = XmlHelper.getAttrAsNumber(ext, \"cy\");\n\t\t\t} else if (opts.placeholderGeom) {\n\t\t\t\tconst g = (phIdx ? opts.placeholderGeom[phIdx] : void 0) ?? (phType ? opts.placeholderGeom[\"type:\" + phType] : void 0);\n\t\t\t\tx = g?.x ?? 0;\n\t\t\t\ty = g?.y ?? 0;\n\t\t\t\tcx = g?.cx ?? 1e6;\n\t\t\t\tcy = g?.cy ?? 5e5;\n\t\t\t} else {\n\t\t\t\tx = 0;\n\t\t\t\ty = 0;\n\t\t\t\tcx = 1e6;\n\t\t\t\tcy = 5e5;\n\t\t\t}\n\t\t\tif (phType === \"body\" && paraItems.length > 1) {\n\t\t\t\tfor (const it of paraItems) if (it.kind === \"p\") {\n\t\t\t\t\tit.kind = \"ul\";\n\t\t\t\t\tit.listStyle = \"disc\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet richHtml = void 0;\n\t\t\tif (paraItems.length > 1 || paraItems.some((it) => it.kind !== \"p\")) {\n\t\t\t\tconst parts = [];\n\t\t\t\tlet open = null;\n\t\t\t\tfor (const it of paraItems) {\n\t\t\t\t\tif (it.kind === \"p\") {\n\t\t\t\t\t\tif (open) {\n\t\t\t\t\t\t\tparts.push(open.kind === \"ul\" ? \"</ul>\" : \"</ol>\");\n\t\t\t\t\t\t\topen = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (it.text.trim()) parts.push(`<div style=\"margin-left:${it.lvl * 24}px\">${escapeHtml(it.text).replace(/\\n/g, \"<br>\")}</div>`);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (!open || open.kind !== it.kind) {\n\t\t\t\t\t\tif (open) parts.push(open.kind === \"ul\" ? \"</ul>\" : \"</ol>\");\n\t\t\t\t\t\tconst commonListCss = `list-style-position: inside; padding-left: 0; margin: 0;`;\n\t\t\t\t\t\tconst style = it.kind === \"ol\" ? ` style=\"${commonListCss} list-style-type: ${it.listStyle || \"decimal\"};\"` : ` style=\"${commonListCss}\"`;\n\t\t\t\t\t\tparts.push(it.kind === \"ul\" ? `<ul${style}>` : `<ol${style}>`);\n\t\t\t\t\t\topen = {\n\t\t\t\t\t\t\tkind: it.kind,\n\t\t\t\t\t\t\tlistStyle: it.listStyle\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tparts.push(`<li style=\"margin-left:${it.lvl * 24}px\">${escapeHtml(it.text).replace(/\\n/g, \"<br>\")}</li>`);\n\t\t\t\t}\n\t\t\t\tif (open) parts.push(open.kind === \"ul\" ? \"</ul>\" : \"</ol>\");\n\t\t\t\trichHtml = parts.join(\"\");\n\t\t\t}\n\t\t\tconst element = {\n\t\t\t\ttype: \"text\",\n\t\t\t\tzIndex: XmlHelper.getZIndex(shape, spTree),\n\t\t\t\tcontent,\n\t\t\t\tposition: {\n\t\t\t\t\tx,\n\t\t\t\t\ty\n\t\t\t\t},\n\t\t\t\tsize: {\n\t\t\t\t\twidth: cx,\n\t\t\t\t\theight: cy\n\t\t\t\t},\n\t\t\t\tfont: {\n\t\t\t\t\tname: fontName,\n\t\t\t\t\tsize: fontSize,\n\t\t\t\t\tcolor: color ?? \"#000000\",\n\t\t\t\t\tweight: fontWeight\n\t\t\t\t},\n\t\t\t\talign: {\n\t\t\t\t\thorizontal: horizontalAlign ?? (isCenteredPh ? \"center\" : \"left\"),\n\t\t\t\t\tvertical: verticalAlign\n\t\t\t\t},\n\t\t\t\tpadding,\n\t\t\t\thtml: richHtml\n\t\t\t};\n\t\t\telements.push(element);\n\t\t}\n\t\treturn elements;\n\t}\n};\nfunction getParagraphText(p) {\n\tlet out = \"\";\n\tfor (const child of Array.from(p.childNodes)) {\n\t\tif (child.nodeType !== 1) continue;\n\t\tconst ln = child.localName;\n\t\tif (ln === \"r\") {\n\t\t\tconst t = child.getElementsByTagNameNS(\"*\", \"t\")[0]?.textContent ?? \"\";\n\t\t\tout += t;\n\t\t} else if (ln === \"br\") out += \"\\n\";\n\t\telse if (ln === \"fld\") {\n\t\t\tconst runs = child.getElementsByTagNameNS(\"*\", \"r\");\n\t\t\tfor (const r of Array.from(runs)) {\n\t\t\t\tconst t = r.getElementsByTagNameNS(\"*\", \"t\")[0]?.textContent ?? \"\";\n\t\t\t\tout += t;\n\t\t\t}\n\t\t} else if (ln === \"tab\") out += \"\t\";\n\t}\n\treturn out;\n}\nfunction mapAutoNumToCss(typ) {\n\tconst t = typ.toLowerCase();\n\tif (t.includes(\"alphauc\")) return \"upper-alpha\";\n\tif (t.includes(\"alphalc\")) return \"lower-alpha\";\n\tif (t.includes(\"romanu\")) return \"upper-roman\";\n\tif (t.includes(\"romanl\")) return \"lower-roman\";\n\treturn \"decimal\";\n}\nfunction escapeHtml(str) {\n\treturn str.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\").replace(/'/g, \"&#39;\");\n}\n//#endregion\n//#region src/renderer/htmlSafety.ts\n/** Escapes content placed in an HTML attribute. */\nfunction escapeAttribute(value) {\n\treturn String(value ?? \"\").replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\").replace(/'/g, \"&#39;\");\n}\n/** PPTX colors are expected to be hex values. Reject arbitrary CSS from input XML. */\nfunction safeColor(value, fallback = \"transparent\") {\n\tconst color = String(value ?? \"\").trim();\n\treturn /^#[0-9a-f]{3,8}$/i.test(color) || /^(transparent|currentcolor)$/i.test(color) ? color : fallback;\n}\n/** Keeps font names usable while preventing an XML value from breaking a style attribute. */\nfunction safeFontFamily(value) {\n\tconst font = String(value ?? \"\").trim();\n\treturn /^[\\p{L}\\p{N} ,._-]{1,100}$/u.test(font) ? font : \"Arial\";\n}\nfunction imageMimeType(path) {\n\tswitch (path.split(\".\").pop()?.toLowerCase()) {\n\t\tcase \"jpg\":\n\t\tcase \"jpeg\": return \"image/jpeg\";\n\t\tcase \"gif\": return \"image/gif\";\n\t\tcase \"svg\": return \"image/svg+xml\";\n\t\tcase \"webp\": return \"image/webp\";\n\t\tcase \"bmp\": return \"image/bmp\";\n\t\tcase \"tif\":\n\t\tcase \"tiff\": return \"image/tiff\";\n\t\tdefault: return \"image/png\";\n\t}\n}\n//#endregion\n//#region src/elements/ImageExtractor.ts\n/**\n* Responsible for extracting image elements from a slide XML node.\n*/\nvar ImageExtractor = class {\n\t/**\n\t* Extracts image elements from the <spTree> element using rels from slide relationships.\n\t* @param spTree The <spTree> element of the slide.\n\t* @param rels XML Document for slide relationships (ppt/slides/_rels/slideX.xml.rels).\n\t* @param zip The JSZip archive of the entire .pptx file.\n\t* @returns List of ImageElement extracted.\n\t*/\n\tstatic async extract(spTree, rels, zip, basePath = \"ppt/slides\") {\n\t\tif (!spTree) return [];\n\t\tconst elements = [];\n\t\tconst pics = spTree.getElementsByTagNameNS(\"*\", \"pic\");\n\t\tfor (const pic of Array.from(pics)) {\n\t\t\tconst embedId = pic.getElementsByTagNameNS(\"*\", \"blip\")[0]?.getAttribute(\"r:embed\") ?? \"\";\n\t\t\tif (!embedId) continue;\n\t\t\tconst relTarget = (rels && rels.getElementsByTagName ? (function() {\n\t\t\t\tconst els = rels.getElementsByTagName(\"Relationship\");\n\t\t\t\tfor (const e of Array.from(els)) if (e.getAttribute(\"Id\") === embedId) return e;\n\t\t\t\treturn null;\n\t\t\t})() : null)?.getAttribute(\"Target\");\n\t\t\tif (!relTarget) continue;\n\t\t\tconst normalizedPath = this.normalizePath(relTarget, basePath);\n\t\t\tconst imageFile = zip.file(normalizedPath);\n\t\t\tif (!imageFile) continue;\n\t\t\tconst binary = await imageFile.async(\"base64\");\n\t\t\tconst dataUri = `data:${imageMimeType(normalizedPath)};base64,${binary}`;\n\t\t\tconst xfrm = pic.getElementsByTagNameNS(\"*\", \"xfrm\")[0];\n\t\t\tconst off = xfrm?.getElementsByTagNameNS(\"*\", \"off\")[0];\n\t\t\tconst ext = xfrm?.getElementsByTagNameNS(\"*\", \"ext\")[0];\n\t\t\tconst x = off ? XmlHelper.getAttrAsNumber(off, \"x\") : 0;\n\t\t\tconst y = off ? XmlHelper.getAttrAsNumber(off, \"y\") : 0;\n\t\t\tconst cx = ext ? XmlHelper.getAttrAsNumber(ext, \"cx\") : 1e6;\n\t\t\tconst cy = ext ? XmlHelper.getAttrAsNumber(ext, \"cy\") : 5e5;\n\t\t\tconst element = {\n\t\t\t\ttype: \"image\",\n\t\t\t\tzIndex: XmlHelper.getZIndex(pic, spTree),\n\t\t\t\trelId: embedId,\n\t\t\t\tsrc: dataUri,\n\t\t\t\tposition: {\n\t\t\t\t\tx,\n\t\t\t\t\ty\n\t\t\t\t},\n\t\t\t\tsize: {\n\t\t\t\t\twidth: cx,\n\t\t\t\t\theight: cy\n\t\t\t\t}\n\t\t\t};\n\t\t\telements.push(element);\n\t\t}\n\t\treturn elements;\n\t}\n\t/**\n\t* Normalizes a relative path from a slide rels file.\n\t* @param target Path from the relationship XML (e.g. \"../media/image1.png\")\n\t* @param basePath Base folder (e.g. \"ppt/slides\")\n\t* @returns Normalized path inside the zip (e.g. \"ppt/media/image1.png\")\n\t*/\n\tstatic normalizePath(target, basePath) {\n\t\tconst parts = (basePath + \"/\" + target).split(\"/\");\n\t\tconst resolved = [];\n\t\tfor (const part of parts) if (part === \"..\") resolved.pop();\n\t\telse if (part !== \".\") resolved.push(part);\n\t\treturn resolved.join(\"/\");\n\t}\n};\n//#endregion\n//#region src/elements/ShapeExtractor.ts\n/**\n* Responsible for extracting shape elements (including connectors) from a slide XML node.\n*/\nvar ShapeExtractor = class {\n\t/**\n\t* Extracts shape and connector elements from the <spTree> element of the slide.\n\t* @param spTree The <spTree> element.\n\t* @param themeColors Theme color mapping.\n\t* @returns List of ShapeElement extracted.\n\t*/\n\tstatic extract(spTree, themeColors) {\n\t\tif (!spTree) return [];\n\t\tconst elements = [];\n\t\tconst allShapes = [...Array.from(spTree.getElementsByTagNameNS(\"*\", \"sp\")), ...Array.from(spTree.getElementsByTagNameNS(\"*\", \"cxnSp\"))];\n\t\tfor (const shape of allShapes) {\n\t\t\tconst xfrm = shape.getElementsByTagNameNS(\"*\", \"xfrm\")[0];\n\t\t\tconst off = xfrm?.getElementsByTagNameNS(\"*\", \"off\")[0];\n\t\t\tconst ext = xfrm?.getElementsByTagNameNS(\"*\", \"ext\")[0];\n\t\t\tconst x = off ? XmlHelper.getAttrAsNumber(off, \"x\") : 0;\n\t\t\tconst y = off ? XmlHelper.getAttrAsNumber(off, \"y\") : 0;\n\t\t\tconst cx = ext ? XmlHelper.getAttrAsNumber(ext, \"cx\") : 1e6;\n\t\t\tconst cy = ext ? XmlHelper.getAttrAsNumber(ext, \"cy\") : 5e5;\n\t\t\tconst rotAttr = xfrm?.getAttribute(\"rot\");\n\t\t\tconst rotationDeg = rotAttr ? Number(rotAttr) / 6e4 : void 0;\n\t\t\tconst shapeType = shape.getElementsByTagNameNS(\"*\", \"prstGeom\")[0]?.getAttribute(\"prst\") ?? \"rect\";\n\t\t\tconst spPr = shape.getElementsByTagNameNS(\"*\", \"spPr\")[0];\n\t\t\tlet fillColor = \"transparent\";\n\t\t\tlet borderColor = \"transparent\";\n\t\t\tlet strokeWidth = void 0;\n\t\t\tlet headEnd = void 0;\n\t\t\tlet tailEnd = void 0;\n\t\t\tif (spPr) {\n\t\t\t\tconst solidFill = spPr.getElementsByTagNameNS(\"*\", \"solidFill\")[0] ?? null;\n\t\t\t\tfillColor = XmlHelper.getColorFromElement(solidFill, themeColors) ?? \"transparent\";\n\t\t\t\tconst ln = spPr.getElementsByTagNameNS(\"*\", \"ln\")[0];\n\t\t\t\tconst borderFill = ln?.getElementsByTagNameNS(\"*\", \"solidFill\")[0] ?? null;\n\t\t\t\tborderColor = XmlHelper.getColorFromElement(borderFill, themeColors) ?? \"transparent\";\n\t\t\t\tconst wAttr = ln?.getAttribute(\"w\");\n\t\t\t\tif (wAttr) {\n\t\t\t\t\tconst w = Number(wAttr);\n\t\t\t\t\tif (!isNaN(w)) strokeWidth = w / 9525;\n\t\t\t\t}\n\t\t\t\tconst headEndEl = ln?.getElementsByTagNameNS(\"*\", \"headEnd\")[0] ?? null;\n\t\t\t\tconst tailEndEl = ln?.getElementsByTagNameNS(\"*\", \"tailEnd\")[0] ?? null;\n\t\t\t\theadEnd = headEndEl ? {\n\t\t\t\t\ttype: headEndEl.getAttribute(\"type\") || void 0,\n\t\t\t\t\tw: headEndEl.getAttribute(\"w\") || void 0,\n\t\t\t\t\tlen: headEndEl.getAttribute(\"len\") || void 0\n\t\t\t\t} : void 0;\n\t\t\t\ttailEnd = tailEndEl ? {\n\t\t\t\t\ttype: tailEndEl.getAttribute(\"type\") || void 0,\n\t\t\t\t\tw: tailEndEl.getAttribute(\"w\") || void 0,\n\t\t\t\t\tlen: tailEndEl.getAttribute(\"len\") || void 0\n\t\t\t\t} : void 0;\n\t\t\t}\n\t\t\tif (fillColor === \"transparent\") {\n\t\t\t\tconst val = ((shape.getElementsByTagNameNS(\"*\", \"style\")[0]?.getElementsByTagNameNS(\"*\", \"fillRef\")[0])?.getElementsByTagNameNS(\"*\", \"schemeClr\")[0])?.getAttribute(\"val\");\n\t\t\t\tif (val && themeColors[val]) fillColor = themeColors[val];\n\t\t\t}\n\t\t\tconst element = {\n\t\t\t\ttype: \"shape\",\n\t\t\t\tzIndex: XmlHelper.getZIndex(shape, spTree),\n\t\t\t\tshapeType,\n\t\t\t\tposition: {\n\t\t\t\t\tx,\n\t\t\t\t\ty\n\t\t\t\t},\n\t\t\t\tsize: {\n\t\t\t\t\twidth: cx,\n\t\t\t\t\theight: cy\n\t\t\t\t},\n\t\t\t\tfillColor,\n\t\t\t\tborderColor,\n\t\t\t\tstrokeWidth,\n\t\t\t\trotationDeg,\n\t\t\t\theadEnd,\n\t\t\t\ttailEnd\n\t\t\t};\n\t\t\telements.push(element);\n\t\t}\n\t\treturn elements;\n\t}\n};\n//#endregion\n//#region src/elements/TableExtractor.ts\n/**\n* Extract tables from <spTree> by scanning p:graphicFrame with a:tbl content.\n*/\nvar TableExtractor = class {\n\tstatic extract(spTree, themeColors, themeTableStyles) {\n\t\tif (!spTree) return [];\n\t\tconst tables = [];\n\t\tconst gFrames = spTree.getElementsByTagNameNS(\"*\", \"graphicFrame\");\n\t\tfor (const gf of Array.from(gFrames)) {\n\t\t\tconst tbl = this.findTbl(gf);\n\t\t\tif (!tbl) continue;\n\t\t\tconst xfrm = gf.getElementsByTagNameNS(\"*\", \"xfrm\")[0] ?? null;\n\t\t\tconst off = xfrm?.getElementsByTagNameNS(\"*\", \"off\")[0] ?? null;\n\t\t\tconst ext = xfrm?.getElementsByTagNameNS(\"*\", \"ext\")[0] ?? null;\n\t\t\tconst x = off ? XmlHelper.getAttrAsNumber(off, \"x\") : 0;\n\t\t\tconst y = off ? XmlHelper.getAttrAsNumber(off, \"y\") : 0;\n\t\t\tconst cx = ext ? XmlHelper.getAttrAsNumber(ext, \"cx\") : 1e6;\n\t\t\tconst cy = ext ? XmlHelper.getAttrAsNumber(ext, \"cy\") : 5e5;\n\t\t\tconst columns = [];\n\t\t\tconst grid = tbl.getElementsByTagNameNS(\"*\", \"tblGrid\")[0] ?? null;\n\t\t\tif (grid) for (const col of Array.from(grid.getElementsByTagNameNS(\"*\", \"gridCol\"))) {\n\t\t\t\tconst w = Number(col.getAttribute(\"w\") || 0);\n\t\t\t\tcolumns.push(w);\n\t\t\t}\n\t\t\tconst tblPr = tbl.getElementsByTagNameNS(\"*\", \"tblPr\")[0] ?? null;\n\t\t\tconst tableStyle = this.extractTableStyleFlags(tblPr);\n\t\t\tconst tableBorders = this.extractTableBorders(tblPr, themeColors);\n\t\t\tconst tableStyleId = this.extractTableStyleId(tblPr);\n\t\t\tconst tableFillColor = this.extractTableFill(tblPr, themeColors);\n\t\t\tconst resolvedStyle = tableStyleId && themeTableStyles ? themeTableStyles[tableStyleId] : void 0;\n\t\t\tconst fallbackStyle = this.buildFallbackTableStyle(themeColors, tableStyle);\n\t\t\tconst mergedStyle = fallbackStyle || resolvedStyle ? {\n\t\t\t\tfills: {\n\t\t\t\t\t...fallbackStyle?.fills || {},\n\t\t\t\t\t...resolvedStyle?.fills || {}\n\t\t\t\t},\n\t\t\t\tfontColors: {\n\t\t\t\t\t...fallbackStyle?.fontColors || {},\n\t\t\t\t\t...resolvedStyle?.fontColors || {}\n\t\t\t\t}\n\t\t\t} : void 0;\n\t\t\tconst rows = [];\n\t\t\tfor (const tr of Array.from(tbl.getElementsByTagNameNS(\"*\", \"tr\"))) {\n\t\t\t\tconst cells = [];\n\t\t\t\tfor (const tc of Array.from(tr.getElementsByTagNameNS(\"*\", \"tc\"))) {\n\t\t\t\t\tconst txBody = tc.getElementsByTagNameNS(\"*\", \"txBody\")[0] ?? null;\n\t\t\t\t\tconst { text, font, align, padding } = this.extractCellText(txBody, themeColors, tc);\n\t\t\t\t\tconst tcPr = tc.getElementsByTagNameNS(\"*\", \"tcPr\")[0] ?? null;\n\t\t\t\t\tconst cell = {\n\t\t\t\t\t\ttext,\n\t\t\t\t\t\tfont,\n\t\t\t\t\t\talign,\n\t\t\t\t\t\tpadding,\n\t\t\t\t\t\tfillColor: this.extractFillColor(tcPr, themeColors),\n\t\t\t\t\t\tborders: this.extractCellBorders(tcPr, themeColors)\n\t\t\t\t\t};\n\t\t\t\t\tconst gridSpan = tcPr?.getElementsByTagNameNS(\"*\", \"gridSpan\")[0] ?? null;\n\t\t\t\t\tconst rowSpan = tcPr?.getElementsByTagNameNS(\"*\", \"rowSpan\")[0] ?? null;\n\t\t\t\t\tif (gridSpan) cell.colSpan = Number(gridSpan.getAttribute(\"val\") || 1);\n\t\t\t\t\tif (rowSpan) cell.rowSpan = Number(rowSpan.getAttribute(\"val\") || 1);\n\t\t\t\t\tcells.push(cell);\n\t\t\t\t}\n\t\t\t\trows.push({ cells });\n\t\t\t}\n\t\t\ttables.push({\n\t\t\t\ttype: \"table\",\n\t\t\t\tzIndex: XmlHelper.getZIndex(gf, spTree),\n\t\t\t\tposition: {\n\t\t\t\t\tx,\n\t\t\t\t\ty\n\t\t\t\t},\n\t\t\t\tsize: {\n\t\t\t\t\twidth: cx,\n\t\t\t\t\theight: cy\n\t\t\t\t},\n\t\t\t\tcolumns,\n\t\t\t\trows,\n\t\t\t\ttableStyle,\n\t\t\t\ttableBorders,\n\t\t\t\ttableStyleId,\n\t\t\t\ttableFillColor,\n\t\t\t\tstyle: mergedStyle ? {\n\t\t\t\t\tfills: mergedStyle.fills,\n\t\t\t\t\tfontColors: mergedStyle.fontColors\n\t\t\t\t} : void 0\n\t\t\t});\n\t\t}\n\t\treturn tables;\n\t}\n\tstatic buildFallbackTableStyle(themeColors, tableStyleFlags) {\n\t\tconst accent = themeColors[\"accent1\"] || themeColors[\"accent2\"] || themeColors[\"dk1\"];\n\t\tif (!accent) return void 0;\n\t\tconst white = themeColors[\"lt1\"] || \"#FFFFFF\";\n\t\tconst fills = {};\n\t\tconst fontColors = {};\n\t\tif (tableStyleFlags?.firstRow) {\n\t\t\tfills[\"firstRow\"] = accent;\n\t\t\tfontColors[\"firstRow\"] = white;\n\t\t}\n\t\tif (tableStyleFlags?.firstCol) {\n\t\t\tfills[\"firstCol\"] = this.lightenHex(accent, .85);\n\t\t\tfontColors[\"firstCol\"] = void 0;\n\t\t}\n\t\tconst bandShade = this.lightenHex(accent, .92);\n\t\tif (tableStyleFlags?.bandRow) fills[\"band2H\"] = bandShade;\n\t\tif (tableStyleFlags?.bandCol) fills[\"band2V\"] = bandShade;\n\t\treturn {\n\t\t\tfills,\n\t\t\tfontColors\n\t\t};\n\t}\n\tstatic lightenHex(hex, ratio) {\n\t\tconst m = (hex || \"\").replace(\"#\", \"\");\n\t\tif (m.length !== 6 || /[^0-9a-fA-F]/.test(m)) return hex || \"#FFFFFF\";\n\t\tconst r = parseInt(m.substring(0, 2), 16);\n\t\tconst g = parseInt(m.substring(2, 4), 16);\n\t\tconst b = parseInt(m.substring(4, 6), 16);\n\t\tconst lr = Math.round(r + (255 - r) * ratio);\n\t\tconst lg = Math.round(g + (255 - g) * ratio);\n\t\tconst lb = Math.round(b + (255 - b) * ratio);\n\t\tconst to2 = (n) => n.toString(16).padStart(2, \"0\");\n\t\treturn `#${to2(lr)}${to2(lg)}${to2(lb)}`;\n\t}\n\tstatic findTbl(gf) {\n\t\tconst graphicData = gf.getElementsByTagNameNS(\"*\", \"graphicData\")[0] ?? null;\n\t\tif (!graphicData) return null;\n\t\treturn graphicData.getElementsByTagNameNS(\"*\", \"tbl\")[0] ?? null;\n\t}\n\tstatic extractCellText(txBody, themeColors, tc) {\n\t\tif (!txBody) return {\n\t\t\ttext: \"\",\n\t\t\tfont: {},\n\t\t\talign: {},\n\t\t\tpadding: {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0,\n\t\t\t\tright: 0,\n\t\t\t\tbottom: 0\n\t\t\t}\n\t\t};\n\t\tconst bodyPr = txBody.getElementsByTagNameNS(\"*\", \"bodyPr\")[0] ?? null;\n\t\tlet vertical = \"top\";\n\t\tconst tcPr = tc?.getElementsByTagNameNS(\"*\", \"tcPr\")[0] ?? null;\n\t\tconst tcAnchor = tcPr?.getAttribute(\"anchor\") || tcPr?.getAttribute(\"vAlign\") || void 0;\n\t\tconst bpAnchor = bodyPr?.getAttribute(\"anchor\") || void 0;\n\t\tconst vSrc = tcAnchor || bpAnchor;\n\t\tif (vSrc === \"ctr\") vertical = \"middle\";\n\t\telse if (vSrc === \"b\") vertical = \"bottom\";\n\t\telse vertical = \"top\";\n\t\tconst lIns = bodyPr?.getAttribute(\"lIns\");\n\t\tconst tIns = bodyPr?.getAttribute(\"tIns\");\n\t\tconst rIns = bodyPr?.getAttribute(\"rIns\");\n\t\tconst bIns = bodyPr?.getAttribute(\"bIns\");\n\t\tconst padding = {\n\t\t\tleft: lIns ? Number(lIns) / 9525 : 6,\n\t\t\ttop: tIns ? Number(tIns) / 9525 : 2,\n\t\t\tright: rIns ? Number(rIns) / 9525 : 6,\n\t\t\tbottom: bIns ? Number(bIns) / 9525 : 2\n\t\t};\n\t\tlet horiz = \"left\";\n\t\tlet fontName = \"Arial\";\n\t\tlet fontSize = 14;\n\t\tlet color;\n\t\tlet parts = [];\n\t\tconst paragraphs = txBody.getElementsByTagNameNS(\"*\", \"p\");\n\t\tfor (const p of Array.from(paragraphs)) {\n\t\t\tconst algn = (p.getElementsByTagNameNS(\"*\", \"pPr\")[0] ?? null)?.getAttribute(\"algn\") || void 0;\n\t\t\tif (algn) horiz = algn === \"ctr\" ? \"center\" : algn === \"r\" ? \"right\" : algn.startsWith(\"just\") ? \"justify\" : \"left\";\n\t\t\tfor (const child of Array.from(p.childNodes)) if (child.nodeType === 1) {\n\t\t\t\tconst ln = child.localName;\n\t\t\t\tif (ln === \"r\") {\n\t\t\t\t\tconst rPr = child.getElementsByTagNameNS(\"*\", \"rPr\")[0] ?? null;\n\t\t\t\t\tif (rPr) {\n\t\t\t\t\t\tfontName = (rPr.getElementsByTagNameNS(\"*\", \"latin\")[0] ?? null)?.getAttribute(\"typeface\") ?? fontName;\n\t\t\t\t\t\tconst sz = rPr.getAttribute(\"sz\");\n\t\t\t\t\t\tif (sz) fontSize = parseInt(sz, 10) / 100;\n\t\t\t\t\t\tconst solidFill = rPr.querySelector(\"*|solidFill\");\n\t\t\t\t\t\tconst c = XmlHelper.getColorFromElement(solidFill || null, themeColors);\n\t\t\t\t\t\tif (c) color = c;\n\t\t\t\t\t}\n\t\t\t\t\tconst t = child.getElementsByTagNameNS(\"*\", \"t\")[0]?.textContent ?? \"\";\n\t\t\t\t\tparts.push(t);\n\t\t\t\t} else if (ln === \"br\") parts.push(\"\\n\");\n\t\t\t\telse if (ln === \"fld\") {\n\t\t\t\t\tconst runs = child.getElementsByTagNameNS(\"*\", \"r\");\n\t\t\t\t\tfor (const r of Array.from(runs)) {\n\t\t\t\t\t\tconst t = r.getElementsByTagNameNS(\"*\", \"t\")[0]?.textContent ?? \"\";\n\t\t\t\t\t\tparts.push(t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\ttext: parts.join(\"\").trim(),\n\t\t\tfont: {\n\t\t\t\tname: fontName,\n\t\t\t\tsize: fontSize,\n\t\t\t\tcolor\n\t\t\t},\n\t\t\talign: {\n\t\t\t\thorizontal: horiz,\n\t\t\t\tvertical\n\t\t\t},\n\t\t\tpadding\n\t\t};\n\t}\n\tstatic extractFillColor(tcPr, themeColors) {\n\t\tif (!tcPr) return void 0;\n\t\tif (tcPr.getElementsByTagNameNS(\"*\", \"noFill\")[0]) return void 0;\n\t\tconst direct = Array.from(tcPr.children).find((c) => c.localName === \"solidFill\");\n\t\tif (direct) return XmlHelper.getColorFromElement(direct, themeColors);\n\t\tconst all = Array.from(tcPr.getElementsByTagNameNS(\"*\", \"solidFill\"));\n\t\tfor (const cand of all) {\n\t\t\tlet p = cand.parentElement;\n\t\t\tlet insideLine = false;\n\t\t\twhile (p && p !== tcPr) {\n\t\t\t\tconst ln = p.localName;\n\t\t\t\tif (ln === \"ln\" || ln === \"lnL\" || ln === \"lnR\" || ln === \"lnT\" || ln === \"lnB\" || ln === \"tcBorders\") {\n\t\t\t\t\tinsideLine = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tp = p.parentElement;\n\t\t\t}\n\t\t\tif (!insideLine) {\n\t\t\t\tconst col = XmlHelper.getColorFromElement(cand, themeColors);\n\t\t\t\tif (col) return col;\n\t\t\t}\n\t\t}\n\t}\n\tstatic extractCellBorders(tcPr, themeColors) {\n\t\tconst borders = {};\n\t\tif (!tcPr) return borders;\n\t\tconst map = {\n\t\t\tlnL: \"left\",\n\t\t\tlnR: \"right\",\n\t\t\tlnT: \"top\",\n\t\t\tlnB: \"bottom\"\n\t\t};\n\t\tfor (const key of Object.keys(map)) {\n\t\t\tconst ln = tcPr.getElementsByTagNameNS(\"*\", key)[0] ?? null;\n\t\t\tif (!ln) continue;\n\t\t\tconst wAttr = ln.getAttribute(\"w\");\n\t\t\tconst w = wAttr ? Number(wAttr) / 9525 : void 0;\n\t\t\tconst solidFill = ln.getElementsByTagNameNS(\"*\", \"solidFill\")[0] ?? null;\n\t\t\tconst color = XmlHelper.getColorFromElement(solidFill, themeColors);\n\t\t\tconst dashVal = (ln.getElementsByTagNameNS(\"*\", \"prstDash\")[0] ?? null)?.getAttribute(\"val\") || \"\";\n\t\t\tconst style = this.mapPrstDashToCss(dashVal);\n\t\t\tborders[map[key]] = {\n\t\t\t\tcolor,\n\t\t\t\twidth: w,\n\t\t\t\tstyle\n\t\t\t};\n\t\t}\n\t\treturn borders;\n\t}\n\tstatic extractTableStyleFlags(tblPr) {\n\t\tif (!tblPr) return {};\n\t\tconst flags = {};\n\t\tfor (const k of [\n\t\t\t\"firstRow\",\n\t\t\t\"firstCol\",\n\t\t\t\"lastRow\",\n\t\t\t\"lastCol\",\n\t\t\t\"bandRow\",\n\t\t\t\"bandCol\"\n\t\t]) if (tblPr.getAttribute(k) === \"1\" || tblPr.getAttribute(k) === \"true\") flags[k] = true;\n\t\treturn flags;\n\t}\n\tstatic extractTableStyleId(tblPr) {\n\t\tif (!tblPr) return void 0;\n\t\tconst idEl = tblPr.getElementsByTagNameNS(\"*\", \"tblStyleId\")[0] || tblPr.getElementsByTagNameNS(\"*\", \"tblStyle\")[0] || null;\n\t\tconst idAttr = idEl?.getAttribute(\"val\") || void 0;\n\t\tconst text = idEl?.textContent?.trim() || void 0;\n\t\tconst direct = tblPr.getAttribute(\"tblStyle\") || void 0;\n\t\treturn idAttr || text || direct || void 0;\n\t}\n\tstatic extractTableBorders(tblPr, themeColors) {\n\t\tif (!tblPr) return void 0;\n\t\tconst borders = {};\n\t\tconst tblBorders = tblPr.getElementsByTagNameNS(\"*\", \"tblBorders\")[0] ?? null;\n\t\tif (!tblBorders) return void 0;\n\t\tconst map = {\n\t\t\ttop: \"top\",\n\t\t\tright: \"right\",\n\t\t\tbottom: \"bottom\",\n\t\t\tleft: \"left\",\n\t\t\tinsideH: \"insideH\",\n\t\t\tinsideV: \"insideV\"\n\t\t};\n\t\tfor (const tag of Object.keys(map)) {\n\t\t\tconst node = tblBorders.getElementsByTagNameNS(\"*\", tag)[0] ?? null;\n\t\t\tif (!node) continue;\n\t\t\tconst ln = node.getElementsByTagNameNS(\"*\", \"ln\")[0] ?? node;\n\t\t\tconst wAttr = ln.getAttribute(\"w\");\n\t\t\tconst w = wAttr ? Number(wAttr) / 9525 : void 0;\n\t\t\tconst solidFill = ln.getElementsByTagNameNS(\"*\", \"solidFill\")[0] ?? null;\n\t\t\tconst color = XmlHelper.getColorFromElement(solidFill, themeColors);\n\t\t\tconst dashVal = (ln.getElementsByTagNameNS(\"*\", \"prstDash\")[0] ?? null)?.getAttribute(\"val\") || \"\";\n\t\t\tconst style = this.mapPrstDashToCss(dashVal);\n\t\t\tborders[map[tag]] = {\n\t\t\t\tcolor,\n\t\t\t\twidth: w,\n\t\t\t\tstyle\n\t\t\t};\n\t\t}\n\t\treturn borders;\n\t}\n\tstatic extractTableFill(tblPr, themeColors) {\n\t\tif (!tblPr) return void 0;\n\t\tconst directSolid = Array.from(tblPr.children).find((c) => c.localName === \"solidFill\");\n\t\tif (directSolid) return XmlHelper.getColorFromElement(directSolid, themeColors);\n\t\tconst allSolid = Array.from(tblPr.getElementsByTagNameNS(\"*\", \"solidFill\"));\n\t\tfor (const cand of allSolid) {\n\t\t\tlet p = cand.parentElement;\n\t\t\tlet insideBorders = false;\n\t\t\twhile (p && p !== tblPr) {\n\t\t\t\tif (p.localName === \"tblBorders\") {\n\t\t\t\t\tinsideBorders = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tp = p.parentElement;\n\t\t\t}\n\t\t\tif (!insideBorders) {\n\t\t\t\tconst col = XmlHelper.getColorFromElement(cand, themeColors);\n\t\t\t\tif (col) return col;\n\t\t\t}\n\t\t}\n\t}\n\tstatic mapPrstDashToCss(val) {\n\t\tconst v = (val || \"\").toLowerCase();\n\t\tif (!v) return void 0;\n\t\tif (v === \"solid\") return \"solid\";\n\t\tif (v.includes(\"dot\")) return \"dotted\";\n\t\tif (v.includes(\"dash\")) return \"dashed\";\n\t}\n};\n//#endregion\n//#region src/elements/ChartExtractor.ts\nvar ChartExtractor = class {\n\tstatic async extract(spTree, relsXml, zip, themeColors) {\n\t\tif (!spTree) return [];\n\t\tconst charts = [];\n\t\tconst gFrames = spTree.getElementsByTagNameNS(\"*\", \"graphicFrame\");\n\t\tfor (const gf of Array.from(gFrames)) {\n\t\t\tconst graphicData = gf.getElementsByTagNameNS(\"*\", \"graphicData\")[0] ?? null;\n\t\t\tif (!graphicData) continue;\n\t\t\tconst chartEl = graphicData.getElementsByTagNameNS(\"*\", \"chart\")[0] ?? null;\n\t\t\tif (!chartEl) continue;\n\t\t\tconst rId = chartEl.getAttribute(\"r:id\") || chartEl.getAttribute(\"r:embed\") || void 0;\n\t\t\tif (!rId) continue;\n\t\t\tconst target = XmlHelper.findRelationshipById(relsXml, rId)?.getAttribute(\"Target\") || void 0;\n\t\t\tif (!target) continue;\n\t\t\tconst fullPath = this.resolvePath(target, \"ppt/slides\");\n\t\t\tconst file = zip.file(fullPath);\n\t\t\tif (!file) continue;\n\t\t\tconst xmlStr = await file.async(\"string\");\n\t\t\tconst doc = XmlHelper.parseXml(xmlStr);\n\t\t\tconst parsed = this.parseChart(doc, themeColors);\n\t\t\tif (!parsed) continue;\n\t\t\tconst xfrm = gf.getElementsByTagNameNS(\"*\", \"xfrm\")[0] ?? null;\n\t\t\tconst off = xfrm?.getElementsByTagNameNS(\"*\", \"off\")[0] ?? null;\n\t\t\tconst ext = xfrm?.getElementsByTagNameNS(\"*\", \"ext\")[0] ?? null;\n\t\t\tconst x = off ? XmlHelper.getAttrAsNumber(off, \"x\") : 0;\n\t\t\tconst y = off ? XmlHelper.getAttrAsNumber(off, \"y\") : 0;\n\t\t\tconst cx = ext ? XmlHelper.getAttrAsNumber(ext, \"cx\") : 1e6;\n\t\t\tconst cy = ext ? XmlHelper.getAttrAsNumber(ext, \"cy\") : 6e5;\n\t\t\tcharts.push({\n\t\t\t\ttype: \"chart\",\n\t\t\t\tzIndex: XmlHelper.getZIndex(gf, spTree),\n\t\t\t\tchartType: parsed.type,\n\t\t\t\tposition: {\n\t\t\t\t\tx,\n\t\t\t\t\ty\n\t\t\t\t},\n\t\t\t\tsize: {\n\t\t\t\t\twidth: cx,\n\t\t\t\t\theight: cy\n\t\t\t\t},\n\t\t\t\tcategories: parsed.categories,\n\t\t\t\tseries: parsed.series,\n\t\t\t\tpalette: parsed.palette,\n\t\t\t\ttitle: parsed.title,\n\t\t\t\tshowLegend: parsed.showLegend,\n\t\t\t\tshowDataLabels: parsed.showDataLabels,\n\t\t\t\tstackedMode: parsed.stackedMode,\n\t\t\t\tvalueFormat: parsed.valueFormat\n\t\t\t});\n\t\t}\n\t\treturn charts;\n\t}\n\tstatic resolvePath(target, baseDir) {\n\t\tconst parts = (baseDir + \"/\" + target).split(\"/\");\n\t\tconst resolved = [];\n\t\tfor (const part of parts) if (part === \"..\") resolved.pop();\n\t\telse if (part !== \".\") resolved.push(part);\n\t\treturn resolved.join(\"/\");\n\t}\n\tstatic parseChart(doc, themeColors) {\n\t\tconst plotArea = doc.getElementsByTagNameNS(\"*\", \"plotArea\")[0] || null;\n\t\tif (!plotArea) return null;\n\t\tconst titleText = this.extractTitle(doc);\n\t\tconst showLegend = !!doc.getElementsByTagNameNS(\"*\", \"legend\")[0];\n\t\tconst showDataLabels = !!plotArea.getElementsByTagNameNS(\"*\", \"dLbls\")[0];\n\t\tconst bar = plotArea.getElementsByTagNameNS(\"*\", \"barChart\")[0] || null;\n\t\tconst line = plotArea.getElementsByTagNameNS(\"*\", \"lineChart\")[0] || null;\n\t\tconst area = plotArea.getElementsByTagNameNS(\"*\", \"areaChart\")[0] || null;\n\t\tconst pie = plotArea.getElementsByTagNameNS(\"*\", \"pieChart\")[0] || null;\n\t\tconst scatter = plotArea.getElementsByTagNameNS(\"*\", \"scatterChart\")[0] || null;\n\t\tconst chartNumFmt = plotArea.getElementsByTagNameNS(\"*\", \"dLbls\")[0]?.getElementsByTagNameNS(\"*\", \"numFmt\")[0]?.getAttribute(\"formatCode\") || void 0;\n\t\tconst palette = [\n\t\t\tthemeColors[\"accent1\"],\n\t\t\tthemeColors[\"accent2\"],\n\t\t\tthemeColors[\"accent3\"],\n\t\t\tthemeColors[\"accent4\"],\n\t\t\tthemeColors[\"accent5\"],\n\t\t\tthemeColors[\"accent6\"]\n\t\t].filter(Boolean);\n\t\tif (bar) {\n\t\t\tconst cat = this.extractCategories(bar) || [];\n\t\t\tconst ser = this.extractSeries(bar, themeColors) || [];\n\t\t\tconst type = (bar.getElementsByTagNameNS(\"*\", \"barDir\")[0]?.getAttribute(\"val\") || \"col\") === \"bar\" ? \"bar\" : \"column\";\n\t\t\tconst grouping = bar.getElementsByTagNameNS(\"*\", \"grouping\")[0]?.getAttribute(\"val\") || \"clustered\";\n\t\t\treturn {\n\t\t\t\ttype,\n\t\t\t\tcategories: cat,\n\t\t\t\tseries: ser,\n\t\t\t\tpalette,\n\t\t\t\ttitle: titleText,\n\t\t\t\tshowLegend,\n\t\t\t\tshowDataLabels,\n\t\t\t\tstackedMode: grouping === \"stacked\" ? \"stacked\" : grouping === \"percentStacked\" ? \"percent\" : \"none\",\n\t\t\t\tvalueFormat: chartNumFmt\n\t\t\t};\n\t\t}\n\t\tif (line) {\n\t\t\tconst cat = this.extractCategories(line) || [];\n\t\t\tconst ser = this.extractSeries(line, themeColors) || [];\n\t\t\tconst grouping = line.getElementsByTagNameNS(\"*\", \"grouping\")[0]?.getAttribute(\"val\") || \"standard\";\n\t\t\treturn {\n\t\t\t\ttype: \"line\",\n\t\t\t\tcategories: cat,\n\t\t\t\tseries: ser,\n\t\t\t\tpalette,\n\t\t\t\ttitle: titleText,\n\t\t\t\tshowLegend,\n\t\t\t\tshowDataLabels,\n\t\t\t\tstackedMode: grouping === \"stacked\" ? \"stacked\" : grouping === \"percentStacked\" ? \"percent\" : \"none\",\n\t\t\t\tvalueFormat: chartNumFmt\n\t\t\t};\n\t\t}\n\t\tif (area) {\n\t\t\tconst cat = this.extractCategories(area) || [];\n\t\t\tconst ser = this.extractSeries(area, themeColors) || [];\n\t\t\tconst grouping = area.getElementsByTagNameNS(\"*\", \"grouping\")[0]?.getAttribute(\"val\") || \"standard\";\n\t\t\treturn {\n\t\t\t\ttype: \"area\",\n\t\t\t\tcategories: cat,\n\t\t\t\tseries: ser,\n\t\t\t\tpalette,\n\t\t\t\ttitle: titleText,\n\t\t\t\tshowLegend,\n\t\t\t\tshowDataLabels,\n\t\t\t\tstackedMode: grouping === \"stacked\" ? \"stacked\" : grouping === \"percentStacked\" ? \"percent\" : \"none\",\n\t\t\t\tvalueFormat: chartNumFmt\n\t\t\t};\n\t\t}\n\t\tif (pie) return {\n\t\t\ttype: \"pie\",\n\t\t\tcategories: this.extractCategories(pie) || [],\n\t\t\tseries: this.extractSeries(pie, themeColors) || [],\n\t\t\tpalette,\n\t\t\ttitle: titleText,\n\t\t\tshowLegend,\n\t\t\tshowDataLabels,\n\t\t\tstackedMode: \"none\",\n\t\t\tvalueFormat: chartNumFmt\n\t\t};\n\t\tif (scatter) return {\n\t\t\ttype: \"scatter\",\n\t\t\tcategories: [],\n\t\t\tseries: this.extractScatterSeries(scatter, themeColors) || [],\n\t\t\tpalette,\n\t\t\ttitle: titleText,\n\t\t\tshowLegend,\n\t\t\tshowDataLabels,\n\t\t\tstackedMode: \"none\",\n\t\t\tvalueFormat: chartNumFmt\n\t\t};\n\t\treturn null;\n\t}\n\tstatic extractTitle(doc) {\n\t\tconst title = doc.getElementsByTagNameNS(\"*\", \"title\")[0] || null;\n\t\tif (!title) return void 0;\n\t\tconst tx = title.getElementsByTagNameNS(\"*\", \"tx\")[0] || null;\n\t\tconst rich = tx?.getElementsByTagNameNS(\"*\", \"rich\")[0] || null;\n\t\tif (rich) return rich.getElementsByTagNameNS(\"*\", \"t\")[0]?.textContent || void 0;\n\t\treturn tx?.getElementsByTagNameNS(\"*\", \"v\")[0]?.textContent || void 0;\n\t}\n\tstatic extractCategories(parent) {\n\t\tconst cat = parent.getElementsByTagNameNS(\"*\", \"cat\")[0] || null;\n\t\tif (!cat) return null;\n\t\tconst strCache = cat.getElementsByTagNameNS(\"*\", \"strCache\")[0] || null;\n\t\tif (strCache) return Array.from(strCache.getElementsByTagNameNS(\"*\", \"pt\")).map((p) => p.getElementsByTagNameNS(\"*\", \"v\")[0]?.textContent || \"\");\n\t\tconst numCache = cat.getElementsByTagNameNS(\"*\", \"numCache\")[0] || null;\n\t\tif (numCache) return Array.from(numCache.getElementsByTagNameNS(\"*\", \"pt\")).map((p) => Number(p.getElementsByTagNameNS(\"*\", \"v\")[0]?.textContent || 0));\n\t\treturn null;\n\t}\n\tstatic extractSeries(parent, themeColors) {\n\t\tconst series = [];\n\t\tconst sers = Array.from(parent.getElementsByTagNameNS(\"*\", \"ser\"));\n\t\tlet idx = 0;\n\t\tfor (const s of sers) {\n\t\t\tconst name = s.getElementsByTagNameNS(\"*\", \"tx\")[0]?.getElementsByTagNameNS(\"*\", \"v\")[0]?.textContent || void 0;\n\t\t\tconst numCache = s.getElementsByTagNameNS(\"*\", \"numCache\")[0] || null;\n\t\t\tlet values = [];\n\t\t\tif (numCache) values = Array.from(numCache.getElementsByTagNameNS(\"*\", \"pt\")).map((p) => Number(p.getElementsByTagNameNS(\"*\", \"v\")[0]?.textContent || 0));\n\t\t\tconst valueFormat = s.getElementsByTagNameNS(\"*\", \"dLbls\")[0]?.getElementsByTagNameNS(\"*\", \"numFmt\")[0]?.getAttribute(\"formatCode\") || void 0;\n\t\t\tconst solidFill = (s.getElementsByTagNameNS(\"*\", \"spPr\")[0] || null)?.getElementsByTagNameNS(\"*\", \"solidFill\")[0] || null;\n\t\t\tconst color = XmlHelper.getColorFromElement(solidFill, themeColors);\n\t\t\tseries.push({\n\t\t\t\tname,\n\t\t\t\tvalues,\n\t\t\t\tcolor,\n\t\t\t\tvalueFormat\n\t\t\t});\n\t\t\tidx += 1;\n\t\t}\n\t\treturn series;\n\t}\n\tstatic extractScatterSeries(parent, themeColors) {\n\t\tconst out = [];\n\t\tconst sers = Array.from(parent.getElementsByTagNameNS(\"*\", \"ser\"));\n\t\tfor (const s of sers) {\n\t\t\tconst name = s.getElementsByTagNameNS(\"*\", \"tx\")[0]?.getElementsByTagNameNS(\"*\", \"v\")[0]?.textContent || void 0;\n\t\t\tconst xCache = s.getElementsByTagNameNS(\"*\", \"xVal\")[0]?.getElementsByTagNameNS(\"*\", \"numCache\")[0] || null;\n\t\t\tconst yCache = s.getElementsByTagNameNS(\"*\", \"yVal\")[0]?.getElementsByTagNameNS(\"*\", \"numCache\")[0] || null;\n\t\t\tconst xPts = xCache ? Array.from(xCache.getElementsByTagNameNS(\"*\", \"pt\")) : [];\n\t\t\tconst yPts = yCache ? Array.from(yCache.getElementsByTagNameNS(\"*\", \"pt\")) : [];\n\t\t\tconst len = Math.min(xPts.length, yPts.length);\n\t\t\tconst points = [];\n\t\t\tfor (let i = 0; i < len; i++) {\n\t\t\t\tconst xv = Number(xPts[i].getElementsByTagNameNS(\"*\", \"v\")[0]?.textContent || 0);\n\t\t\t\tconst yv = Number(yPts[i].getElementsByTagNameNS(\"*\", \"v\")[0]?.textContent || 0);\n\t\t\t\tpoints.push({\n\t\t\t\t\tx: xv,\n\t\t\t\t\ty: yv\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst solidFill = (s.getElementsByTagNameNS(\"*\", \"spPr\")[0] || null)?.getElementsByTagNameNS(\"*\", \"solidFill\")[0] || null;\n\t\t\tconst color = XmlHelper.getColorFromElement(solidFill, themeColors);\n\t\t\tconst valueFormat = s.getElementsByTagNameNS(\"*\", \"dLbls\")[0]?.getElementsByTagNameNS(\"*\", \"numFmt\")[0]?.getAttribute(\"formatCode\") || void 0;\n\t\t\tout.push({\n\t\t\t\tname,\n\t\t\t\tpoints,\n\t\t\t\tcolor,\n\t\t\t\tvalueFormat\n\t\t\t});\n\t\t}\n\t\treturn out;\n\t}\n};\n//#endregion\n//#region src/core/SlideExtractor.ts\n/**\n* Responsible for extracting all slides from the .pptx file as lists of SlideElement.\n*/\nvar SlideExtractor = class {\n\tzip;\n\tconstructor(zip) {\n\t\tthis.zip = zip;\n\t}\n\t/**\n\t* Extracts all slides in order and parses their visual elements.\n\t* @returns An array of SlideElement lists (one per slide).\n\t*/\n\tasync extractSlides() {\n\t\tconst themeXmlStr = await this.zip.file(\"ppt/theme/theme1.xml\")?.async(\"string\");\n\t\tconst themeXml = themeXmlStr ? XmlHelper.parseXml(themeXmlStr) : null;\n\t\tconst themeColors = XmlHelper.extractThemeColors(themeXml);\n\t\tconst themeTableStyles = XmlHelper.extractThemeTableStyles(themeXml);\n\t\tconst fallbackSlidePaths = Object.keys(this.zip.files).filter((f) => /^ppt\\/slides\\/slide\\d+\\.xml$/.test(f)).sort((a, b) => {\n\t\t\treturn parseInt(a.match(/slide(\\d+)\\.xml$/)?.[1] || \"0\", 10) - parseInt(b.match(/slide(\\d+)\\.xml$/)?.[1] || \"0\", 10);\n\t\t});\n\t\tconst slidePaths = await this.getSlidePathsInPresentationOrder(fallbackSlidePaths);\n\t\tconst slides = [];\n\t\tfor (const slidePath of slidePaths) {\n\t\t\tconst slideXmlStr = await this.zip.file(slidePath).async(\"string\");\n\t\t\tconst slideXml = XmlHelper.parseXml(slideXmlStr);\n\t\t\tconst spTree = slideXml.querySelector(\"p\\\\:spTree\") || slideXml.getElementsByTagNameNS(\"*\", \"spTree\")[0];\n\t\t\tif (!spTree) {\n\t\t\t\tconsole.warn(`Warning: no <spTree> found in ${slidePath}`);\n\t\t\t\tslides.push([]);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst relsPath = slidePath.replace(\"slides/\", \"slides/_rels/\") + \".rels\";\n\t\t\tconst relsXml = this.zip.file(relsPath) ? XmlHelper.parseXml(await this.zip.file(relsPath).async(\"string\")) : XmlHelper.parseXml(`<Relationships/>`);\n\t\t\tconst layoutTarget = XmlHelper.findRelationshipByTypeSuffix(relsXml, \"/slideLayout\")?.getAttribute(\"Target\") || void 0;\n\t\t\tlet layoutSpTree = null;\n\t\t\tlet layoutRelsXml = null;\n\t\t\tif (layoutTarget) {\n\t\t\t\tconst layoutPath = this.resolvePath(layoutTarget, \"ppt/slides\");\n\t\t\t\tconst layoutXmlStr = await this.zip.file(layoutPath)?.async(\"string\");\n\t\t\t\tif (layoutXmlStr) {\n\t\t\t\t\tconst layoutXml = XmlHelper.parseXml(layoutXmlStr);\n\t\t\t\t\tlayoutSpTree = layoutXml.querySelector(\"p\\\\:spTree\") || layoutXml.getElementsByTagNameNS(\"*\", \"spTree\")[0] || null;\n\t\t\t\t\tconst layoutRelsPath = layoutPath.replace(\"slideLayouts/\", \"slideLayouts/_rels/\") + \".rels\";\n\t\t\t\t\tlayoutRelsXml = this.zip.file(layoutRelsPath) ? XmlHelper.parseXml(await this.zip.file(layoutRelsPath).async(\"string\")) : XmlHelper.parseXml(`<Relationships/>`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet masterSpTree = null;\n\t\t\tlet masterRelsXml = null;\n\t\t\tif (layoutRelsXml) {\n\t\t\t\tconst masterTarget = XmlHelper.findRelationshipByTypeSuffix(layoutRelsXml, \"/slideMaster\")?.getAttribute(\"Target\") || void 0;\n\t\t\t\tif (masterTarget) {\n\t\t\t\t\tconst masterPath = this.resolvePath(masterTarget, \"ppt/slideLayouts\");\n\t\t\t\t\tconst masterXmlStr = await this.zip.file(masterPath)?.async(\"string\");\n\t\t\t\t\tif (masterXmlStr) {\n\t\t\t\t\t\tconst masterXml = XmlHelper.parseXml(masterXmlStr);\n\t\t\t\t\t\tmasterSpTree = masterXml.querySelector(\"p\\\\:spTree\") || masterXml.getElementsByTagNameNS(\"*\", \"spTree\")[0] || null;\n\t\t\t\t\t\tconst masterRelsPath = masterPath.replace(\"slideMasters/\", \"slideMasters/_rels/\") + \".rels\";\n\t\t\t\t\t\tmasterRelsXml = this.zip.file(masterRelsPath) ? XmlHelper.parseXml(await this.zip.file(masterRelsPath).async(\"string\")) : XmlHelper.parseXml(`<Relationships/>`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst slideBg = await this.extractBackground(slideXml, relsXml, \"ppt/slides\", this.zip, themeColors);\n\t\t\tconst layoutBg = layoutRelsXml ? await this.extractBackground(layoutSpTree?.ownerDocument || null, layoutRelsXml, \"ppt/slideLayouts\", this.zip, themeColors) : null;\n\t\t\tconst masterBg = masterRelsXml ? await this.extractBackground(masterSpTree?.ownerDocument || null, masterRelsXml, \"ppt/slideMasters\", this.zip, themeColors) : null;\n\t\t\tconst bgElement = slideBg || layoutBg || masterBg;\n\t\t\tif (bgElement) bgElement.zIndex = -1;\n\t\t\tconst masterText = masterSpTree ? TextExtractor.extract(masterSpTree, themeColors, { context: \"master\" }) : [];\n\t\t\tconst masterImages = masterSpTree && masterRelsXml ? await ImageExtractor.extract(masterSpTree, masterRelsXml, this.zip, \"ppt/slideMasters\") : [];\n\t\t\tconst masterShapes = masterSpTree ? ShapeExtractor.extract(masterSpTree, themeColors) : [];\n\t\t\tconst layoutText = layoutSpTree ? TextExtractor.extract(layoutSpTree, themeColors, { context: \"layout\" }) : [];\n\t\t\tconst layoutImages = layoutSpTree && layoutRelsXml ? await ImageExtractor.extract(layoutSpTree, layoutRelsXml, this.zip, \"ppt/slideLayouts\") : [];\n\t\t\tconst layoutShapes = layoutSpTree ? ShapeExtractor.extract(layoutSpTree, themeColors) : [];\n\t\t\tconst masterGeom = this.extractPlaceholderGeom(masterSpTree);\n\t\t\tconst layoutGeom = this.extractPlaceholderGeom(layoutSpTree);\n\t\t\tconst mergedGeom = {\n\t\t\t\t...masterGeom,\n\t\t\t\t...layoutGeom\n\t\t\t};\n\t\t\tconst masterTypes = this.extractPlaceholderTypes(masterSpTree);\n\t\t\tconst layoutTypes = this.extractPlaceholderTypes(layoutSpTree);\n\t\t\tconst mergedTypes = {\n\t\t\t\t...masterTypes,\n\t\t\t\t...layoutTypes\n\t\t\t};\n\t\t\tconst slideText = TextExtractor.extract(spTree, themeColors, {\n\t\t\t\tcontext: \"slide\",\n\t\t\t\tplaceholderGeom: mergedGeom,\n\t\t\t\tplaceholderTypes: mergedTypes\n\t\t\t});\n\t\t\tconst slideImages = await ImageExtractor.extract(spTree, relsXml, this.zip, \"ppt/slides\");\n\t\t\tconst slideTables = TableExtractor.extract(spTree, themeColors, themeTableStyles);\n\t\t\tconst slideCharts = await ChartExtractor.extract(spTree, relsXml, this.zip, themeColors);\n\t\t\tconst slideShapes = ShapeExtractor.extract(spTree, themeColors);\n\t\t\tconst withLayer = (items, layer) => items.map((item) => ({\n\t\t\t\t...item,\n\t\t\t\tzIndex: layer + (item.zIndex ?? 0)\n\t\t\t}));\n\t\t\tslides.push([\n\t\t\t\t...bgElement ? [bgElement] : [],\n\t\t\t\t...withLayer(masterShapes, 0),\n\t\t\t\t...withLayer(masterImages, 0),\n\t\t\t\t...withLayer(masterText, 0),\n\t\t\t\t...withLayer(layoutShapes, 1e4),\n\t\t\t\t...withLayer(layoutImages, 1e4),\n\t\t\t\t...withLayer(layoutText, 1e4),\n\t\t\t\t...withLayer(slideShapes, 2e4),\n\t\t\t\t...withLayer(slideTables, 2e4),\n\t\t\t\t...withLayer(slideCharts, 2e4),\n\t\t\t\t...withLayer(slideImages, 2e4),\n\t\t\t\t...withLayer(slideText, 2e4)\n\t\t\t]);\n\t\t}\n\t\treturn slides;\n\t}\n\t/** Normalize a relative path against a base directory inside ppt folder */\n\tresolvePath(target, baseDir) {\n\t\tconst parts = (baseDir + \"/\" + target).split(\"/\");\n\t\tconst resolved = [];\n\t\tfor (const part of parts) if (part === \"..\") {\n\t\t\tif (resolved.length) resolved.pop();\n\t\t} else if (part !== \".\" && part !== \"\") resolved.push(part);\n\t\treturn resolved.join(\"/\");\n\t}\n\t/** Build an `idx → type` map from layout/master placeholders so slide-level\n\t* shapes that only carry `idx` can resolve their inherited placeholder\n\t* type (e.g. \"body\", \"title\"). */\n\textractPlaceholderTypes(spTree) {\n\t\tconst map = {};\n\t\tif (!spTree) return map;\n\t\tconst shapes = spTree.getElementsByTagNameNS(\"*\", \"sp\");\n\t\tfor (const shape of Array.from(shapes)) {\n\t\t\tconst ph = (shape.getElementsByTagNameNS(\"*\", \"nvPr\")[0] ?? null)?.getElementsByTagNameNS(\"*\", \"ph\")[0] ?? null;\n\t\t\tif (!ph) continue;\n\t\t\tconst idx = ph.getAttribute(\"idx\") || void 0;\n\t\t\tconst type = ph.getAttribute(\"type\") || void 0;\n\t\t\tif (idx && type) map[idx] = type;\n\t\t}\n\t\treturn map;\n\t}\n\textractPlaceholderGeom(spTree) {\n\t\tconst map = {};\n\t\tif (!spTree) return map;\n\t\tconst shapes = spTree.getElementsByTagNameNS(\"*\", \"sp\");\n\t\tfor (const shape of Array.from(shapes)) {\n\t\t\tconst ph = (shape.getElementsByTagNameNS(\"*\", \"nvPr\")[0] ?? null)?.getElementsByTagNameNS(\"*\", \"ph\")[0] ?? null;\n\t\t\tconst idx = ph?.getAttribute(\"idx\") || void 0;\n\t\t\tconst type = ph?.getAttribute(\"type\") || void 0;\n\t\t\tconst key = idx || (type ? \"type:\" + type : void 0);\n\t\t\tif (!key) continue;\n\t\t\tconst xfrm = shape.getElementsByTagNameNS(\"*\", \"xfrm\")[0] ?? null;\n\t\t\tconst off = xfrm?.getElementsByTagNameNS(\"*\", \"off\")[0] ?? null;\n\t\t\tconst ext = xfrm?.getElementsByTagNameNS(\"*\", \"ext\")[0] ?? null;\n\t\t\tif (!off || !ext) continue;\n\t\t\tconst geom = {\n\t\t\t\tx: XmlHelper.getAttrAsNumber(off, \"x\"),\n\t\t\t\ty: XmlHelper.getAttrAsNumber(off, \"y\"),\n\t\t\t\tcx: XmlHelper.getAttrAsNumber(ext, \"cx\"),\n\t\t\t\tcy: XmlHelper.getAttrAsNumber(ext, \"cy\")\n\t\t\t};\n\t\t\tmap[key] = geom;\n\t\t\tif (type === \"title\") map[\"type:ctrTitle\"] = geom;\n\t\t\telse if (type === \"ctrTitle\") map[\"type:title\"] = geom;\n\t\t}\n\t\treturn map;\n\t}\n\tasync extractBackground(doc, rels, baseDir, zip, themeColors) {\n\t\tif (!doc) return null;\n\t\tconst bg = doc.getElementsByTagNameNS(\"*\", \"bg\")[0];\n\t\tif (!bg) return null;\n\t\tconst bgPr = bg.getElementsByTagNameNS(\"*\", \"bgPr\")[0] || null;\n\t\tconst solidFill = bgPr?.getElementsByTagNameNS(\"*\", \"solidFill\")[0] || null;\n\t\tconst color = XmlHelper.getColorFromElement(solidFill, themeColors);\n\t\tif (color) return {\n\t\t\ttype: \"background\",\n\t\t\tfillColor: color\n\t\t};\n\t\tconst schemeVal = ((bg.getElementsByTagNameNS(\"*\", \"bgRef\")[0] || null)?.getElementsByTagNameNS(\"*\", \"schemeClr\")[0] || null)?.getAttribute(\"val\") || void 0;\n\t\tif (schemeVal && themeColors[schemeVal]) return {\n\t\t\ttype: \"background\",\n\t\t\tfillColor: themeColors[schemeVal]\n\t\t};\n\t\tconst embedId = ((bgPr?.getElementsByTagNameNS(\"*\", \"blipFill\")[0] || null)?.getElementsByTagNameNS(\"*\", \"blip\")[0] || null)?.getAttribute(\"r:embed\") || void 0;\n\t\tif (embedId && rels) {\n\t\t\tconst target = XmlHelper.findRelationshipById(rels, embedId)?.getAttribute(\"Target\") || void 0;\n\t\t\tif (target) {\n\t\t\t\tconst fullPath = this.resolvePath(target, baseDir);\n\t\t\t\tconst file = zip.file(fullPath);\n\t\t\t\tif (file) {\n\t\t\t\t\tconst binary = await file.async(\"base64\");\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: \"background\",\n\t\t\t\t\t\timageSrc: `data:${imageMimeType(fullPath)};base64,${binary}`\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\t/**\n\t* Slides are displayed according to `presentation.xml`'s relationship list,\n\t* not according to the numeric suffix in their file names. The latter is\n\t* commonly sequential but changes after slides are moved or duplicated.\n\t*/\n\tasync getSlidePathsInPresentationOrder(fallback) {\n\t\tconst presentation = this.zip.file(\"ppt/presentation.xml\");\n\t\tconst relationships = this.zip.file(\"ppt/_rels/presentation.xml.rels\");\n\t\tif (!presentation || !relationships) return fallback;\n\t\ttry {\n\t\t\tconst [presentationXml, relationshipsXml] = await Promise.all([presentation.async(\"string\"), relationships.async(\"string\")]);\n\t\t\tconst doc = XmlHelper.parseXml(presentationXml);\n\t\t\tconst rels = XmlHelper.parseXml(relationshipsXml);\n\t\t\tconst ordered = [];\n\t\t\tconst slideIds = Array.from(doc.getElementsByTagNameNS(\"*\", \"sldId\"));\n\t\t\tif (slideIds.length === 0) return fallback;\n\t\t\tfor (const slideId of slideIds) {\n\t\t\t\tconst relationshipId = slideId.getAttribute(\"r:id\");\n\t\t\t\tif (!relationshipId) continue;\n\t\t\t\tconst target = XmlHelper.findRelationshipById(rels, relationshipId)?.getAttribute(\"Target\");\n\t\t\t\tif (!target) continue;\n\t\t\t\tconst path = this.resolvePath(target, \"ppt\");\n\t\t\t\tif (this.zip.file(path) && !ordered.includes(path)) ordered.push(path);\n\t\t\t}\n\t\t\treturn ordered;\n\t\t} catch {\n\t\t\treturn fallback;\n\t\t}\n\t}\n};\n//#endregion\n//#region src/core/PptxReader.ts\n/**\n* Handles loading a .pptx file and extracting slide elements from it.\n*/\nvar PptxReader = class {\n\tzip;\n\tbaseWidthPx;\n\tbaseHeightPx;\n\t/**\n\t* Loads and parses a .pptx binary buffer.\n\t* @param buffer The binary content of a .pptx file.\n\t* @returns A list of slides, each represented as an array of SlideElement.\n\t*/\n\tasync load(buffer) {\n\t\tthis.zip = await JSZip.loadAsync(buffer);\n\t\tawait this.computeSlideBaseSize();\n\t\treturn new SlideExtractor(this.zip).extractSlides();\n\t}\n\t/**\n\t* Returns slide base size in pixels derived from ppt/presentation.xml sldSz (if available).\n\t* Defaults to 960x540 when not found.\n\t*/\n\tasync getBaseSizePx() {\n\t\tif (this.baseWidthPx && this.baseHeightPx) return {\n\t\t\twidth: this.baseWidthPx,\n\t\t\theight: this.baseHeightPx\n\t\t};\n\t\tawait this.computeSlideBaseSize();\n\t\treturn {\n\t\t\twidth: Number.isFinite(this.baseWidthPx) && this.baseWidthPx > 0 ? this.baseWidthPx : 960,\n\t\t\theight: Number.isFinite(this.baseHeightPx) && this.baseHeightPx > 0 ? this.baseHeightPx : 540\n\t\t};\n\t}\n\tasync computeSlideBaseSize() {\n\t\ttry {\n\t\t\tif (!this.zip) return;\n\t\t\tconst presFile = this.zip.file(\"ppt/presentation.xml\");\n\t\t\tif (!presFile) return;\n\t\t\tconst xmlStr = await presFile.async(\"string\");\n\t\t\tconst sldSz = XmlHelper.parseXml(xmlStr).getElementsByTagNameNS(\"*\", \"sldSz\")[0];\n\t\t\tconst cx = sldSz ? Number(sldSz.getAttribute(\"cx\") || 0) : 0;\n\t\t\tconst cy = sldSz ? Number(sldSz.getAttribute(\"cy\") || 0) : 0;\n\t\t\tif (Number.isFinite(cx) && Number.isFinite(cy) && cx > 0 && cy > 0) {\n\t\t\t\tthis.baseWidthPx = cx / 9525;\n\t\t\t\tthis.baseHeightPx = cy / 9525;\n\t\t\t}\n\t\t} catch {}\n\t}\n};\n//#endregion\n//#region src/renderer/renderTextElement.ts\n/**\n* Renders a text element as an absolutely positioned HTML <div>.\n* @param el Text element to render.\n* @returns HTML string representing the text element.\n*/\nfunction renderTextElement(el) {\n\tconst nf = (n, fb = 0) => Number.isFinite(n) ? n : fb;\n\tconst x = nf(el.position?.x, 0) / 9525;\n\tconst y = nf(el.position?.y, 0) / 9525;\n\tconst w = nf(el.size?.width, 0) / 9525;\n\tconst h = nf(el.size?.height, 0) / 9525;\n\tconst pad = el.padding || {\n\t\tleft: 0,\n\t\ttop: 0,\n\t\tright: 0,\n\t\tbottom: 0\n\t};\n\tconst textAlign = el.align?.horizontal || \"left\";\n\tconst justify = el.align?.vertical === \"middle\" ? \"center\" : el.align?.vertical === \"bottom\" ? \"flex-end\" : \"flex-start\";\n\tconst inner = el.html ? el.html : escape$2(el.content);\n\treturn `<div style=\"\n position: absolute;\n left: ${x}px;\n top: ${y}px;\n width: ${w}px;\n height: ${h}px;\n box-sizing: border-box;\n z-index: ${Number.isFinite(el.zIndex) ? el.zIndex : 0};\n display: flex;\n flex-direction: column;\n justify-content: ${justify};\n text-align: ${textAlign};\n padding: ${pad.top}px ${pad.right}px ${pad.bottom}px ${pad.left}px;\n font-family: ${safeFontFamily(el.font?.name)};\n font-size: ${nf(Number(el.font?.size), 12)}pt;\n font-weight: ${el.font?.weight || \"normal\"};\n color: ${safeColor(el.font?.color, \"#000\")};\n overflow: hidden;\n white-space: pre-wrap;\n \">${inner}</div>`;\n}\nfunction escape$2(str) {\n\treturn str.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n}\n//#endregion\n//#region src/renderer/renderImageElement.ts\n/**\n* Renders an image element as an absolutely positioned <img> tag.\n* @param el Image element to render.\n* @returns HTML string representing the image element.\n*/\nfunction renderImageElement(el) {\n\tconst nf = (n, fb = 0) => Number.isFinite(n) ? n : fb;\n\treturn `<img src=\"${escapeAttribute(el.src)}\" style=\"\n position: absolute;\n z-index: ${Number.isFinite(el.zIndex) ? el.zIndex : 0};\n left: ${nf(el.position?.x, 0) / 9525}px;\n top: ${nf(el.position?.y, 0) / 9525}px;\n width: ${nf(el.size?.width, 0) / 9525}px;\n height: ${nf(el.size?.height, 0) / 9525}px;\n object-fit: cover;\n \" />`;\n}\n//#endregion\n//#region src/renderer/shapePathMap.ts\n/**\n* Maps known PowerPoint shape types to SVG path definitions.\n* Supports arrows, connectors, and geometric shapes.\n* @param type The shape type from the pptx.\n* @returns SVG path string to use in <path> or <polyline>, etc.\n*/\nfunction getSvgPathForShape(type) {\n\tswitch (type) {\n\t\tcase \"rightArrow\":\n\t\tcase \"arrow\": return \"POLYGON 0,25 70,25 70,0 100,50 70,100 70,75 0,75\";\n\t\tcase \"leftArrow\": return \"POLYGON 100,25 30,25 30,0 0,50 30,100 30,75 100,75\";\n\t\tcase \"leftRightArrow\": return \"POLYGON 0,50 30,0 30,25 70,25 70,0 100,50 70,100 70,75 30,75 30,100\";\n\t\tcase \"triangle\": return \"POLYGON 50,0 100,100 0,100\";\n\t\tcase \"star5\": return \"POLYGON 50,0 61,35 98,35 68,57 79,91 50,70 21,91 32,57 2,35 39,35\";\n\t\tcase \"cloud\": return \"PATH M20,60 C10,60 10,40 25,40 C30,20 50,20 55,35 C70,30 80,40 80,50 C90,50 90,70 75,70 H25 Z\";\n\t\tcase \"straightConnector1\": return \"LINE_ARROW 0,50 100,50\";\n\t\tcase \"bentConnector2\": return \"POLYLINE 0,50 50,50 50,100\";\n\t\tcase \"bentConnector3\": return \"POLYLINE_ARROW 0,50 40,50 40,70 100,70\";\n\t\tcase \"bentConnector4\": return \"POLYLINE 0,30 30,30 30,70 70,70 70,100\";\n\t\tcase \"bentConnector5\": return \"POLYLINE 0,20 30,20 30,50 60,50 60,80 100,80\";\n\t\tcase \"curvedConnector2\": return \"PATH M0,50 Q50,0 100,50\";\n\t\tcase \"curvedConnector3\": return \"PATH M0,50 Q25,0 50,50 Q75,100 100,50\";\n\t\tcase \"curvedConnector4\": return \"PATH M0,40 Q20,0 40,40 Q60,80 80,40 Q90,20 100,40\";\n\t\tcase \"curvedConnector5\": return \"PATH M0,50 Q20,20 40,50 Q60,80 80,50 Q90,40 100,50\";\n\t\tcase \"bentArrow\": return \"POLYGON 0,0 70,0 70,30 100,30 50,100 50,30 0,30\";\n\t\tcase \"notchedRightArrow\": return \"POLYGON 0,20 60,20 60,0 100,50 60,100 60,80 0,80\";\n\t\tcase \"curvedRightArrow\": return \"PATH M0,50 Q50,0 100,50 Q50,100 0,50 Z\";\n\t\tdefault: return \"POLYGON 0,0 100,0 100,100 0,100\";\n\t}\n}\n//#endregion\n//#region src/renderer/renderShapeElement.ts\n/**\n* Renders a shape element as an absolutely positioned HTML or SVG element.\n* Supports all recognized PPTX shape types using SVG when necessary.\n* @param el Shape element to render.\n* @returns HTML string representing the shape.\n*/\nfunction renderShapeElement(el, options = {}) {\n\tconst nf = (n, fb = 0) => Number.isFinite(n) ? n : fb;\n\tconst x = nf(el.position?.x, 0) / 9525;\n\tconst y = nf(el.position?.y, 0) / 9525;\n\tconst width = nf(el.size?.width, 0) / 9525;\n\tconst height = nf(el.size?.height, 0) / 9525;\n\tconst rotation = el.rotationDeg && !isNaN(el.rotationDeg) ? el.rotationDeg : 0;\n\tconst rotationStyle = rotation ? `transform: rotate(${rotation}deg); transform-origin: center;` : \"\";\n\tconst fillColor = safeColor(el.fillColor);\n\tconst borderColor = safeColor(el.borderColor);\n\tconst borderWidth = el.strokeWidth && Number.isFinite(el.strokeWidth) ? el.strokeWidth : 1;\n\tconst style = `\n position: absolute;\n left: ${x}px;\n top: ${y}px;\n width: ${width}px;\n height: ${height}px;\n z-index: ${Number.isFinite(el.zIndex) ? el.zIndex : 0};\n ${rotationStyle}\n `;\n\tif (el.shapeType === \"rect\") return `<div style=\"${style}\n background-color: ${fillColor};\n border: ${borderWidth}px solid ${borderColor};\n box-sizing: border-box;\"></div>`;\n\tif (el.shapeType === \"ellipse\") return `<div style=\"${style}\n background-color: ${fillColor};\n border: ${borderWidth}px solid ${borderColor};\n border-radius: 50%;\n box-sizing: border-box;\"></div>`;\n\tif (el.shapeType === \"roundRect\") return `<div style=\"${style}\n background-color: ${fillColor};\n border: ${borderWidth}px solid ${borderColor};\n border-radius: 16px;\n box-sizing: border-box;\"></div>`;\n\treturn shapeSvg(x, y, width, height, fillColor, borderColor, getSvgPathForShape(el.shapeType), el.strokeWidth && Number.isFinite(el.strokeWidth) ? el.strokeWidth : void 0, rotation, el.headEnd, el.tailEnd, options.scaleStrokes === true, Number.isFinite(el.zIndex) ? el.zIndex : 0);\n}\nfunction shapeSvg(x, y, width, height, fill, stroke, raw, strokeWidthPx, rotationDeg, headEnd, tailEnd, scaleStrokes, zIndex = 0) {\n\tconst strokeColorOpt = resolveStrokeColor(stroke, fill);\n\tconst [typeRaw, ...rest] = raw.trim().split(/\\s+/);\n\tconst type = typeRaw.toUpperCase().replace(\"_ARROW\", \"\");\n\tconst isArrow = typeRaw.endsWith(\"_ARROW\");\n\tconst data = rest.join(\" \");\n\tconst svgHeight = height;\n\tconst svgWidth = width;\n\tconst sw = strokeWidthPx && strokeWidthPx > 0 ? strokeWidthPx : 2;\n\tconst rotationStyle = rotationDeg ? `transform: rotate(${rotationDeg}deg); transform-origin: center;` : \"\";\n\tconst commonStyle = `\n position: absolute;\n left: ${x}px;\n top: ${y}px;\n width: ${svgWidth}px;\n height: ${svgHeight}px;\n z-index: ${zIndex};\n ${rotationStyle}\n `;\n\tswitch (type) {\n\t\tcase \"PATH\": {\n\t\t\tconst defs = buildMarkerDefs(headEnd, tailEnd, strokeColorOpt || \"#000\");\n\t\t\tconst markerStartAttr = defs.startId ? `marker-start=\\\"url(#${defs.startId})\\\"` : \"\";\n\t\t\tconst markerEndAttr = defs.endId ? `marker-end=\\\"url(#${defs.endId})\\\"` : \"\";\n\t\t\treturn `<svg viewBox=\"0 0 100 100\" style=\"${commonStyle}\" overflow=\"visible\">\n ${defs.defs}\n <path d=\"${data}\" fill=\"none\" stroke=\"${strokeColorOpt || \"#000\"}\" stroke-width=\"${sw}\" ${scaleStrokes ? \"\" : \"vector-effect=\\\"non-scaling-stroke\\\"\"} ${markerStartAttr} ${markerEndAttr} />\n </svg>`;\n\t\t}\n\t\tcase \"POLYLINE\":\n\t\tcase \"LINE\": {\n\t\t\tconst coords = data.split(/[\\s,]+/).map((v) => parseFloat(v)).filter((v) => !isNaN(v));\n\t\t\tif (coords.length < 4 || coords.length % 2 !== 0) {\n\t\t\t\tif (typeof console !== \"undefined\" && console.warn) console.warn(`[pptx-to-html] Invalid POLYLINE/LINE shape data: \"${data}\"`);\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t\tconst pointPairs = [];\n\t\t\tfor (let i = 0; i < coords.length; i += 2) pointPairs.push(`${coords[i]},${coords[i + 1]}`);\n\t\t\tconst effectiveWidth = width > 0 ? width : Math.max(sw * 2, 2);\n\t\t\tconst effectiveHeight = height > 0 ? height : Math.max(sw * 2, 2);\n\t\t\tconst defs = buildMarkerDefs(headEnd, tailEnd ?? (isArrow ? {\n\t\t\t\ttype: \"triangle\",\n\t\t\t\tw: \"med\",\n\t\t\t\tlen: \"med\"\n\t\t\t} : void 0), strokeColorOpt || \"#000\");\n\t\t\tconst markerStartAttr = defs.startId ? `marker-start=\\\"url(#${defs.startId})\\\"` : \"\";\n\t\t\tconst markerEndAttr = defs.endId ? `marker-end=\\\"url(#${defs.endId})\\\"` : \"\";\n\t\t\tconst scaledPairs = [];\n\t\t\tfor (let i = 0; i < coords.length; i += 2) {\n\t\t\t\tconst px = coords[i] / 100 * effectiveWidth;\n\t\t\t\tconst py = coords[i + 1] / 100 * effectiveHeight;\n\t\t\t\tscaledPairs.push(`${px},${py}`);\n\t\t\t}\n\t\t\tconst scaledPoints = scaledPairs.join(\" \");\n\t\t\treturn `\n <svg viewBox=\"0 0 ${effectiveWidth} ${effectiveHeight}\"\n style=\"\n position: absolute;\n left: ${x}px;\n top: ${y}px;\n width: ${effectiveWidth}px;\n height: ${effectiveHeight}px;\n z-index: ${zIndex};\n ${rotationStyle}\n \"\n overflow=\"visible\">\n ${defs.defs}\n <polyline points=\"${scaledPoints}\"\n fill=\"none\"\n stroke=\"${strokeColorOpt || \"#000\"}\"\n stroke-width=\"${sw}\"\n ${scaleStrokes ? \"\" : \"vector-effect=\\\"non-scaling-stroke\\\"\"}\n ${markerStartAttr} ${markerEndAttr} />\n </svg>`;\n\t\t}\n\t\tdefault: return `<svg viewBox=\"0 0 100 100\" style=\"${commonStyle}\">\n <polygon points=\"${data}\" fill=\"${fill}\" stroke=\"${strokeColorOpt ?? \"none\"}\" stroke-width=\"${sw}\" ${scaleStrokes ? \"\" : \"vector-effect=\\\"non-scaling-stroke\\\"\"} />\n </svg>`;\n\t}\n}\nfunction buildMarkerDefs(headEnd, tailEnd, color) {\n\tconst parts = [];\n\tlet startId;\n\tlet endId;\n\tif (headEnd && headEnd.type && headEnd.type !== \"none\") {\n\t\tstartId = `mstart-${Math.random().toString(36).slice(2, 8)}`;\n\t\tparts.push(markerDef(startId, headEnd, color));\n\t}\n\tif (tailEnd && tailEnd.type && tailEnd.type !== \"none\") {\n\t\tendId = `mend-${Math.random().toString(36).slice(2, 8)}`;\n\t\tparts.push(markerDef(endId, tailEnd, color));\n\t}\n\treturn {\n\t\tdefs: parts.length ? `<defs>${parts.join(\"\\n\")}</defs>` : \"\",\n\t\tstartId,\n\t\tendId\n\t};\n}\nfunction markerDef(id, spec, color) {\n\tconst base = 4 * mapLen(spec.len);\n\tconst refX = base;\n\tconst refY = base / 2;\n\tswitch ((spec.type || \"triangle\").toLowerCase()) {\n\t\tcase \"diamond\": return `<marker id=\"${id}\" markerUnits=\"strokeWidth\" markerWidth=\"${base}\" markerHeight=\"${base}\"\n refX=\"${refX}\" refY=\"${refY}\" orient=\"auto-start-reverse\">\n <polygon points=\"${base / 2},0 ${base},${base / 2} ${base / 2},${base} 0,${base / 2}\" fill=\"${color}\" />\n </marker>`;\n\t\tcase \"oval\": return `<marker id=\"${id}\" markerUnits=\"strokeWidth\" markerWidth=\"${base}\" markerHeight=\"${base}\"\n refX=\"${refX}\" refY=\"${refY}\" orient=\"auto-start-reverse\">\n <circle cx=\"${base / 2}\" cy=\"${base / 2}\" r=\"${base / 2}\" fill=\"${color}\" />\n </marker>`;\n\t\tcase \"stealth\": return `<marker id=\"${id}\" markerUnits=\"strokeWidth\" markerWidth=\"${base}\" markerHeight=\"${base}\"\n refX=\"${refX}\" refY=\"${refY}\" orient=\"auto-start-reverse\">\n <polygon points=\"${base},${base / 2} 0,0 0,${base}\" fill=\"${color}\" />\n </marker>`;\n\t\tdefault: return `<marker id=\"${id}\" markerUnits=\"strokeWidth\" markerWidth=\"${base}\" markerHeight=\"${base}\"\n refX=\"${refX}\" refY=\"${refY}\" orient=\"auto-start-reverse\">\n <polygon points=\"0,0 ${base},${base / 2} 0,${base}\" fill=\"${color}\" />\n </marker>`;\n\t}\n}\nfunction mapLen(len) {\n\tswitch ((len || \"med\").toLowerCase()) {\n\t\tcase \"sm\":\n\t\tcase \"small\": return 1.5;\n\t\tcase \"lg\":\n\t\tcase \"large\": return 2.5;\n\t\tdefault: return 2;\n\t}\n}\nfunction resolveStrokeColor(stroke, fill) {\n\tif (stroke && stroke !== \"transparent\") return stroke;\n\tif (fill && fill !== \"transparent\") return fill;\n}\n//#endregion\n//#region src/renderer/renderTableElement.ts\nfunction renderTableElement(el) {\n\tconst nf = (n, fb = 0) => Number.isFinite(n) ? n : fb;\n\tconst x = nf(el.position?.x, 0) / 9525;\n\tconst y = nf(el.position?.y, 0) / 9525;\n\tconst width = nf(el.size?.width, 0) / 9525;\n\tconst height = nf(el.size?.height, 0) / 9525;\n\tconst colWidthsPx = el.columns.map((w) => nf(w, 0) / 9525);\n\tconst colTotal = colWidthsPx.reduce((a, b) => a + b, 0) || 1;\n\tconst cols = colWidthsPx.map((w) => `<col style=\"width:${w / colTotal * 100}%\">`).join(\"\");\n\tconst tableBg = el.tableFillColor || el.style?.fills?.wholeTbl;\n\tlet rowIndex = 0;\n\tconst rowsHtml = el.rows.map((row) => {\n\t\tlet colIndex = 0;\n\t\tconst tds = row.cells.map((cell) => {\n\t\t\tconst pad = cell.padding || {\n\t\t\t\tleft: 6,\n\t\t\t\ttop: 2,\n\t\t\t\tright: 6,\n\t\t\t\tbottom: 2\n\t\t\t};\n\t\t\tconst ta = cell.align?.horizontal || \"left\";\n\t\t\tconst va = cell.align?.vertical || \"top\";\n\t\t\tconst borderCss = computeCellBordersCSS(el, cell, rowIndex, colIndex);\n\t\t\tconst { bg, fontColor, emphasize } = computeCellStyleFromTableStyle(el, rowIndex, colIndex);\n\t\t\tconst isHeaderCol = emphasize;\n\t\t\tconst style = `\n padding:${pad.top}px ${pad.right}px ${pad.bottom}px ${pad.left}px;\n text-align:${ta};\n vertical-align:${va === \"middle\" ? \"middle\" : va};\n ${cell.fillColor ? `background-color:${safeColor(cell.fillColor)};` : \"\"}\n ${!cell.fillColor && bg ? `background-color:${safeColor(bg)};` : \"\"}\n ${cell.font?.color ? `color:${safeColor(cell.font.color, \"#000\")};` : fontColor ? `color:${safeColor(fontColor, \"#000\")};` : \"\"}\n ${cell.font?.name ? `font-family:${safeFontFamily(cell.font.name)};` : \"\"}\n ${cell.font?.size ? `font-size:${cell.font.size}pt;` : \"\"}\n ${borderCss}\n ${isHeaderCol ? \"font-weight:600;\" : \"\"}\n overflow:hidden; word-break: break-word; white-space: pre-wrap;`;\n\t\t\tconst html = `<td${`${cell.colSpan ? ` colspan=\\\"${cell.colSpan}\\\"` : \"\"}${cell.rowSpan ? ` rowspan=\\\"${cell.rowSpan}\\\"` : \"\"}`} style=\"${style}\">${escape$1(cell.text).replace(/\\n/g, \"<br>\")}</td>`;\n\t\t\tcolIndex += cell.colSpan || 1;\n\t\t\treturn html;\n\t\t}).join(\"\");\n\t\tconst trHtml = `<tr${el.tableStyle?.firstRow && rowIndex === 0 ? \" style=\\\"font-weight:600;\\\"\" : \"\"}>${tds}</tr>`;\n\t\trowIndex += 1;\n\t\treturn trHtml;\n\t}).join(\"\");\n\treturn `<div style=\"position:absolute; z-index:${Number.isFinite(el.zIndex) ? el.zIndex : 0}; left:${x}px; top:${y}px; width:${width}px; height:${height}px;\">\n <table style=\"border-collapse:collapse; width:100%; height:100%; table-layout:fixed;${tableBg ? ` background-color:${safeColor(tableBg)};` : \"\"}\">\n <colgroup>${cols}</colgroup>\n <tbody>${rowsHtml}</tbody>\n </table>\n </div>`;\n}\nfunction computeCellBordersCSS(el, cell, rowIndex, colIndex) {\n\tconst css = [];\n\tconst sides = [\n\t\t\"top\",\n\t\t\"right\",\n\t\t\"bottom\",\n\t\t\"left\"\n\t];\n\tconst apply = (side, b) => {\n\t\tif (!b) return;\n\t\tconst w = b.width ?? 1;\n\t\tconst c = safeColor(b.color, \"#000\");\n\t\tconst st = b.style === \"dashed\" || b.style === \"dotted\" ? b.style : \"solid\";\n\t\tcss.push(`border-${side}: ${Math.max(1, Math.round(w))}px ${st} ${c};`);\n\t};\n\tfor (const s of sides) {\n\t\tconst b = cell.borders?.[s];\n\t\tif (b) apply(s, b);\n\t}\n\tconst tb = el.tableBorders || {};\n\tconst lastRow = rowIndex === el.rows.length - 1;\n\tconst lastCol = colIndex === el.columns.length - 1;\n\tif (!cell.borders?.top && rowIndex === 0) apply(\"top\", tb.top);\n\tif (!cell.borders?.bottom && lastRow) apply(\"bottom\", tb.bottom);\n\tif (!cell.borders?.left && colIndex === 0) apply(\"left\", tb.left);\n\tif (!cell.borders?.right && lastCol) apply(\"right\", tb.right);\n\tif (!cell.borders?.top && rowIndex > 0) apply(\"top\", tb.insideH);\n\tif (!cell.borders?.left && colIndex > 0) apply(\"left\", tb.insideV);\n\treturn css.join(\" \");\n}\nfunction escape$1(str) {\n\treturn str.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n}\nfunction computeCellStyleFromTableStyle(el, rowIndex, colIndex) {\n\tconst lastRow = rowIndex === el.rows.length - 1;\n\tconst lastCol = colIndex === el.columns.length - 1;\n\tconst s = el.style || {};\n\tconst fills = s.fills || {};\n\tconst fontColors = s.fontColors || {};\n\tlet emphasize = false;\n\tif (el.tableStyle?.firstRow && rowIndex === 0) {\n\t\temphasize = true;\n\t\treturn {\n\t\t\tbg: fills.firstRow || fills.wholeTbl || \"#f0f0f0\",\n\t\t\tfontColor: fontColors.firstRow || fontColors.wholeTbl,\n\t\t\temphasize\n\t\t};\n\t}\n\tif (el.tableStyle?.lastRow && lastRow) return {\n\t\tbg: fills.lastRow || fills.wholeTbl || \"#f0f0f0\",\n\t\tfontColor: fontColors.lastRow || fontColors.wholeTbl,\n\t\temphasize\n\t};\n\tif (el.tableStyle?.firstCol && colIndex === 0) {\n\t\temphasize = true;\n\t\treturn {\n\t\t\tbg: fills.firstCol || fills.wholeTbl || \"#f0f0f0\",\n\t\t\tfontColor: fontColors.firstCol || fontColors.wholeTbl,\n\t\t\temphasize\n\t\t};\n\t}\n\tif (el.tableStyle?.lastCol && lastCol) return {\n\t\tbg: fills.lastCol || fills.wholeTbl || \"#f0f0f0\",\n\t\tfontColor: fontColors.lastCol || fontColors.wholeTbl,\n\t\temphasize\n\t};\n\tif (el.tableStyle?.bandRow) {\n\t\tconst band = (el.tableStyle?.firstRow ? rowIndex - 1 : rowIndex) % 2 === 0 ? \"band1H\" : \"band2H\";\n\t\treturn {\n\t\t\tbg: fills[band] || fills.wholeTbl || (rowIndex % 2 === 1 ? \"#fafafa\" : void 0),\n\t\t\tfontColor: fontColors[band] || fontColors.wholeTbl,\n\t\t\temphasize\n\t\t};\n\t}\n\tif (el.tableStyle?.bandCol) {\n\t\tconst band = colIndex % 2 === 0 ? \"band1V\" : \"band2V\";\n\t\treturn {\n\t\t\tbg: fills[band] || fills.wholeTbl || (colIndex % 2 === 1 ? \"#fafafa\" : void 0),\n\t\t\tfontColor: fontColors[band] || fontColors.wholeTbl,\n\t\t\temphasize\n\t\t};\n\t}\n\treturn {\n\t\tbg: fills.wholeTbl,\n\t\tfontColor: fontColors.wholeTbl,\n\t\temphasize\n\t};\n}\n//#endregion\n//#region src/renderer/renderChartElement.ts\nfunction renderChartElement(el) {\n\tconst nf = (n, fb = 0) => Number.isFinite(n) ? n : fb;\n\tconst x = nf(el.position?.x, 0) / 9525;\n\tconst y = nf(el.position?.y, 0) / 9525;\n\tconst width = Math.max(1, nf(el.size?.width, 0) / 9525);\n\tconst height = Math.max(1, nf(el.size?.height, 0) / 9525);\n\tconst padding = 24;\n\tconst palette = el.palette && el.palette.length > 0 ? el.palette : [\n\t\t\"#4e79a7\",\n\t\t\"#f28e2b\",\n\t\t\"#e15759\",\n\t\t\"#76b7b2\",\n\t\t\"#59a14f\",\n\t\t\"#edc949\"\n\t];\n\tlet svg = \"\";\n\tif (el.chartType === \"column\" || el.chartType === \"bar\") svg = renderBarLike(el, width, height, padding, palette);\n\telse if (el.chartType === \"line\") svg = renderLine(el, width, height, padding, palette);\n\telse if (el.chartType === \"area\") svg = renderArea(el, width, height, padding, palette);\n\telse if (el.chartType === \"pie\") svg = renderPie(el, width, height, palette);\n\telse if (el.chartType === \"scatter\") svg = renderScatter(el, width, height, padding, palette);\n\tconst zIndex = Number.isFinite(el.zIndex) ? el.zIndex : 0;\n\treturn `${el.title ? `<div style=\"position:absolute;z-index:${zIndex};left:${x}px;top:${y - 20}px;width:${width}px;text-align:center;font-weight:600;\">${escape(el.title)}</div>` : \"\"}<div style=\"position:absolute; z-index:${zIndex}; left:${x}px; top:${y}px; width:${width}px; height:${height}px;\">\n <svg width=\"${width}\" height=\"${height}\" viewBox=\"0 0 ${width} ${height}\">\n ${svg}\n </svg>\n </div>`;\n}\nfunction renderBarLike(el, width, height, pad, palette) {\n\tconst catCount = el.categories.length || 1;\n\tconst chartW = width - pad * 2;\n\tconst chartH = height - pad * 2;\n\tconst isHorizontal = el.chartType === \"bar\";\n\tconst stacked = el.stackedMode && el.stackedMode !== \"none\";\n\tconst percent = el.stackedMode === \"percent\";\n\tlet maxVal = 1;\n\tif (stacked) {\n\t\tconst sums = new Array(catCount).fill(0).map((_, i) => el.series.reduce((acc, s) => acc + ((s.values || [])[i] || 0), 0));\n\t\tmaxVal = percent ? 1 : Math.max(1, ...sums);\n\t} else {\n\t\tlet mv = 1;\n\t\tfor (const s of el.series) {\n\t\t\tconst vals = s.values || [];\n\t\t\tfor (const v of vals) mv = Math.max(mv, v);\n\t\t}\n\t\tmaxVal = mv;\n\t}\n\tconst parts = [];\n\tif (isHorizontal) {\n\t\tparts.push(`<line x1=\"${pad}\" y1=\"${height - pad}\" x2=\"${width - pad}\" y2=\"${height - pad}\" stroke=\"#999\" stroke-width=\"1\" />`);\n\t\tparts.push(`<line x1=\"${pad}\" y1=\"${pad}\" x2=\"${pad}\" y2=\"${height - pad}\" stroke=\"#999\" stroke-width=\"1\" />`);\n\t\tcomputeTicks(0, maxVal, 4).forEach((t) => {\n\t\t\tconst tx = pad + t / maxVal * chartW;\n\t\t\tconst ty = height - pad;\n\t\t\tparts.push(`<line x1=\"${tx}\" y1=\"${ty}\" x2=\"${tx}\" y2=\"${ty + 4}\" stroke=\"#999\" stroke-width=\"1\" />`);\n\t\t\tparts.push(`<text x=\"${tx}\" y=\"${ty + 16}\" text-anchor=\"middle\" font-size=\"10\" fill=\"#666\">${formatNumber(t, percent ? \"0%\" : el.valueFormat)}</text>`);\n\t\t});\n\t} else {\n\t\tparts.push(`<line x1=\"${pad}\" y1=\"${height - pad}\" x2=\"${width - pad}\" y2=\"${height - pad}\" stroke=\"#999\" stroke-width=\"1\" />`);\n\t\tparts.push(`<line x1=\"${pad}\" y1=\"${pad}\" x2=\"${pad}\" y2=\"${height - pad}\" stroke=\"#999\" stroke-width=\"1\" />`);\n\t\tcomputeTicks(0, maxVal, 4).forEach((t) => {\n\t\t\tconst ty = height - pad - t / maxVal * chartH;\n\t\t\tparts.push(`<line x1=\"${pad - 4}\" y1=\"${ty}\" x2=\"${pad}\" y2=\"${ty}\" stroke=\"#999\" stroke-width=\"1\" />`);\n\t\t\tparts.push(`<text x=\"${pad - 6}\" y=\"${ty + 3}\" text-anchor=\"end\" font-size=\"10\" fill=\"#666\">${formatNumber(t, percent ? \"0%\" : el.valueFormat)}</text>`);\n\t\t\tparts.push(`<line x1=\"${pad}\" y1=\"${ty}\" x2=\"${width - pad}\" y2=\"${ty}\" stroke=\"#eee\" stroke-width=\"1\" />`);\n\t\t});\n\t}\n\tif (isHorizontal) {\n\t\tconst catBand = chartH / catCount;\n\t\tconst barH = Math.max(2, catBand * .8 / (stacked ? 1 : el.series.length));\n\t\tel.series.forEach((s, si) => {\n\t\t\tconst color = s.color || palette[si % palette.length];\n\t\t\t(s.values || []).forEach((v, ci) => {\n\t\t\t\tconst baseY = pad + ci * catBand + (catBand - (stacked ? barH : el.series.length * barH)) / 2;\n\t\t\t\tif (stacked) {\n\t\t\t\t\tconst prev = el.series.slice(0, si).reduce((acc, ss) => acc + ((ss.values || [])[ci] || 0), 0);\n\t\t\t\t\tconst sum = el.series.reduce((acc, ss) => acc + ((ss.values || [])[ci] || 0), 0) || 1;\n\t\t\t\t\tconst start = (percent ? prev / sum : prev) / maxVal * chartW;\n\t\t\t\t\tconst w = (percent ? (v || 0) / sum : v) / maxVal * chartW;\n\t\t\t\t\tconst x = pad + start;\n\t\t\t\t\tconst y = baseY;\n\t\t\t\t\tparts.push(`<rect x=\"${x}\" y=\"${y}\" width=\"${w}\" height=\"${barH}\" fill=\"${color}\" />`);\n\t\t\t\t\tif (el.showDataLabels) {\n\t\t\t\t\t\tconst fmt = s.valueFormat || el.valueFormat;\n\t\t\t\t\t\tparts.push(`<text x=\"${x + w - 2}\" y=\"${y + barH / 2 + 3}\" text-anchor=\"end\" font-size=\"10\" fill=\"#000\">${formatNumber(percent ? v / sum : v, percent ? \"0%\" : fmt)}</text>`);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst w = v / maxVal * chartW;\n\t\t\t\t\tconst y = baseY + si * barH;\n\t\t\t\t\tparts.push(`<rect x=\"${pad}\" y=\"${y}\" width=\"${w}\" height=\"${barH}\" fill=\"${color}\" />`);\n\t\t\t\t\tif (el.showDataLabels) {\n\t\t\t\t\t\tconst fmt = s.valueFormat || el.valueFormat;\n\t\t\t\t\t\tparts.push(`<text x=\"${pad + w + 2}\" y=\"${y + barH / 2 + 3}\" font-size=\"10\" fill=\"#000\">${formatNumber(v, fmt)}</text>`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tconst labelSize = Math.max(10, Math.min(12, chartH / (catCount * 2)));\n\t\tel.categories.forEach((c, i) => {\n\t\t\tconst cy = pad + i * catBand + catBand / 2 + 4;\n\t\t\tparts.push(`<text x=\"${pad - 8}\" y=\"${cy}\" text-anchor=\"end\" font-size=\"${labelSize}\" fill=\"#333\">${escape(String(c))}</text>`);\n\t\t});\n\t} else {\n\t\tconst catBand = chartW / catCount;\n\t\tconst barW = Math.max(2, catBand * .8 / (stacked ? 1 : el.series.length));\n\t\tel.series.forEach((s, si) => {\n\t\t\tconst color = s.color || palette[si % palette.length];\n\t\t\t(s.values || []).forEach((v, ci) => {\n\t\t\t\tconst baseX = pad + ci * catBand + (catBand - (stacked ? barW : el.series.length * barW)) / 2;\n\t\t\t\tif (stacked) {\n\t\t\t\t\tconst prev = el.series.slice(0, si).reduce((acc, ss) => acc + ((ss.values || [])[ci] || 0), 0);\n\t\t\t\t\tconst sum = el.series.reduce((acc, ss) => acc + ((ss.values || [])[ci] || 0), 0) || 1;\n\t\t\t\t\tconst start = (percent ? prev / sum : prev) / maxVal * chartH;\n\t\t\t\t\tconst h = (percent ? (v || 0) / sum : v) / maxVal * chartH;\n\t\t\t\t\tconst x = baseX;\n\t\t\t\t\tconst y = height - pad - start - h;\n\t\t\t\t\tparts.push(`<rect x=\"${x}\" y=\"${y}\" width=\"${barW}\" height=\"${h}\" fill=\"${color}\" />`);\n\t\t\t\t\tif (el.showDataLabels) {\n\t\t\t\t\t\tconst fmt = s.valueFormat || el.valueFormat;\n\t\t\t\t\t\tparts.push(`<text x=\"${x + barW / 2}\" y=\"${y - 2}\" text-anchor=\"middle\" font-size=\"10\" fill=\"#000\">${formatNumber(percent ? v / sum : v, percent ? \"0%\" : fmt)}</text>`);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst h = v / maxVal * chartH;\n\t\t\t\t\tconst x = baseX + si * barW;\n\t\t\t\t\tconst y = height - pad - h;\n\t\t\t\t\tparts.push(`<rect x=\"${x}\" y=\"${y}\" width=\"${barW}\" height=\"${h}\" fill=\"${color}\" />`);\n\t\t\t\t\tif (el.showDataLabels) {\n\t\t\t\t\t\tconst fmt = s.valueFormat || el.valueFormat;\n\t\t\t\t\t\tparts.push(`<text x=\"${x + barW / 2}\" y=\"${y - 2}\" text-anchor=\"middle\" font-size=\"10\" fill=\"#000\">${formatNumber(v, fmt)}</text>`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tconst labelSize = Math.max(10, Math.min(12, chartW / (catCount * 4)));\n\t\tel.categories.forEach((c, i) => {\n\t\t\tconst cx = pad + i * catBand + catBand / 2;\n\t\t\tconst cy = height - pad + 14;\n\t\t\tparts.push(`<text x=\"${cx}\" y=\"${cy}\" text-anchor=\"middle\" font-size=\"${labelSize}\" fill=\"#333\">${escape(String(c))}</text>`);\n\t\t});\n\t}\n\tif (el.showLegend) parts.push(renderLegend(el, width, pad, palette));\n\treturn parts.join(\"\\n\");\n}\nfunction renderLine(el, width, height, pad, palette) {\n\tconst catCount = el.categories.length || 1;\n\tconst chartW = width - pad * 2;\n\tconst chartH = height - pad * 2;\n\tlet maxVal = 1;\n\tfor (const s of el.series) {\n\t\tconst vals = s.values || [];\n\t\tfor (const v of vals) maxVal = Math.max(maxVal, v);\n\t}\n\tconst xStep = chartW / Math.max(1, catCount - 1);\n\tconst parts = [];\n\tparts.push(`<line x1=\"${pad}\" y1=\"${height - pad}\" x2=\"${width - pad}\" y2=\"${height - pad}\" stroke=\"#999\" stroke-width=\"1\" />`);\n\tparts.push(`<line x1=\"${pad}\" y1=\"${pad}\" x2=\"${pad}\" y2=\"${height - pad}\" stroke=\"#999\" stroke-width=\"1\" />`);\n\tcomputeTicks(0, maxVal, 4).forEach((t) => {\n\t\tconst ty = height - pad - t / maxVal * chartH;\n\t\tparts.push(`<line x1=\"${pad - 4}\" y1=\"${ty}\" x2=\"${pad}\" y2=\"${ty}\" stroke=\"#999\" stroke-width=\"1\" />`);\n\t\tparts.push(`<text x=\"${pad - 6}\" y=\"${ty + 3}\" text-anchor=\"end\" font-size=\"10\" fill=\"#666\">${formatNumber(t, el.valueFormat)}</text>`);\n\t\tparts.push(`<line x1=\"${pad}\" y1=\"${ty}\" x2=\"${width - pad}\" y2=\"${ty}\" stroke=\"#eee\" stroke-width=\"1\" />`);\n\t});\n\tconst stacked = el.stackedMode && el.stackedMode !== \"none\";\n\tconst percent = el.stackedMode === \"percent\";\n\tconst totals = percent ? new Array(catCount).fill(0).map((_, i) => el.series.reduce((acc, sr) => acc + ((sr.values || [])[i] || 0), 0)) : void 0;\n\tel.series.forEach((s, si) => {\n\t\tconst color = s.color || palette[si % palette.length];\n\t\tlet d = \"\";\n\t\t(s.values || []).forEach((v, i) => {\n\t\t\tconst x = pad + i * xStep;\n\t\t\tlet val = v;\n\t\t\tif (stacked) {\n\t\t\t\tval = el.series.slice(0, si).reduce((acc, ss) => acc + ((ss.values || [])[i] || 0), 0) + v;\n\t\t\t\tif (percent && totals) val = totals[i] ? val / totals[i] : 0;\n\t\t\t}\n\t\t\tconst y = height - pad - val / (percent ? 1 : maxVal) * chartH;\n\t\t\td += i === 0 ? `M ${x} ${y}` : ` L ${x} ${y}`;\n\t\t});\n\t\tparts.push(`<path d=\"${d}\" fill=\"none\" stroke=\"${color}\" stroke-width=\"2\" />`);\n\t\tif (el.showDataLabels) (s.values || []).forEach((v, i) => {\n\t\t\tconst x = pad + i * xStep;\n\t\t\tconst basePrev = stacked ? el.series.slice(0, si).reduce((acc, ss) => acc + ((ss.values || [])[i] || 0), 0) : 0;\n\t\t\tconst dispVal = percent && totals ? v / (totals[i] || 1) : v;\n\t\t\tconst y = height - pad - (stacked ? basePrev + v : v) / (percent ? 1 : maxVal) * chartH;\n\t\t\tparts.push(`<circle cx=\"${x}\" cy=\"${y}\" r=\"2.5\" fill=\"${color}\" />`);\n\t\t\tconst fmt = s.valueFormat || el.valueFormat;\n\t\t\tparts.push(`<text x=\"${x}\" y=\"${y - 6}\" text-anchor=\"middle\" font-size=\"10\" fill=\"#000\">${formatNumber(dispVal, percent ? \"0%\" : fmt)}</text>`);\n\t\t});\n\t});\n\treturn parts.join(\"\\n\");\n}\nfunction renderArea(el, width, height, pad, palette) {\n\tconst catCount = el.categories.length || 1;\n\tconst chartW = width - pad * 2;\n\tconst chartH = height - pad * 2;\n\tlet maxVal = 1;\n\tfor (const s of el.series) {\n\t\tconst vals = s.values || [];\n\t\tfor (const v of vals) maxVal = Math.max(maxVal, v);\n\t}\n\tconst xStep = chartW / Math.max(1, catCount - 1);\n\tconst parts = [];\n\tparts.push(`<line x1=\"${pad}\" y1=\"${height - pad}\" x2=\"${width - pad}\" y2=\"${height - pad}\" stroke=\"#999\" stroke-width=\"1\" />`);\n\tparts.push(`<line x1=\"${pad}\" y1=\"${pad}\" x2=\"${pad}\" y2=\"${height - pad}\" stroke=\"#999\" stroke-width=\"1\" />`);\n\tconst stacked = el.stackedMode && el.stackedMode !== \"none\";\n\tconst percent = el.stackedMode === \"percent\";\n\tconst totals = percent ? new Array(catCount).fill(0).map((_, i) => el.series.reduce((acc, sr) => acc + ((sr.values || [])[i] || 0), 0)) : void 0;\n\tconst baseline = new Array(catCount).fill(0);\n\tel.series.forEach((s, si) => {\n\t\tconst color = s.color || palette[si % palette.length];\n\t\tconst topY = [];\n\t\tconst botY = [];\n\t\t(s.values || []).forEach((v, i) => {\n\t\t\tconst prev = stacked ? baseline[i] : 0;\n\t\t\tconst val = stacked ? prev + (percent && totals ? totals[i] ? v / totals[i] : 0 : v) : v;\n\t\t\tconst top = height - pad - val / (percent ? 1 : maxVal) * chartH;\n\t\t\tconst bottom = height - pad - prev / (percent ? 1 : maxVal) * chartH;\n\t\t\ttopY.push(top);\n\t\t\tbotY.push(bottom);\n\t\t\tif (stacked) baseline[i] = percent && totals ? val : prev + v;\n\t\t});\n\t\tlet d = \"\";\n\t\tfor (let i = 0; i < topY.length; i++) {\n\t\t\tconst x = pad + i * xStep;\n\t\t\td += i === 0 ? `M ${x} ${topY[i]}` : ` L ${x} ${topY[i]}`;\n\t\t}\n\t\tfor (let i = botY.length - 1; i >= 0; i--) {\n\t\t\tconst x = pad + i * xStep;\n\t\t\td += ` L ${x} ${botY[i]}`;\n\t\t}\n\t\td += \" Z\";\n\t\tparts.push(`<path d=\"${d}\" fill=\"${color}\" fill-opacity=\"0.6\" stroke=\"none\" />`);\n\t});\n\treturn parts.join(\"\\n\");\n}\nfunction renderPie(el, width, height, palette) {\n\tconst s0 = el.series[0];\n\tconst values = s0 && s0.values ? s0.values : [];\n\tconst total = values.reduce((a, b) => a + Math.max(0, b), 0) || 1;\n\tconst cx = width / 2;\n\tconst cy = height / 2;\n\tconst r = Math.min(width, height) * .35;\n\tlet start = 0;\n\tconst parts = [];\n\tvalues.forEach((v, i) => {\n\t\tconst frac = Math.max(0, v) / total;\n\t\tconst end = start + frac * 2 * Math.PI;\n\t\tconst x1 = cx + r * Math.cos(start);\n\t\tconst y1 = cy + r * Math.sin(start);\n\t\tconst x2 = cx + r * Math.cos(end);\n\t\tconst y2 = cy + r * Math.sin(end);\n\t\tconst large = end - start > Math.PI ? 1 : 0;\n\t\tconst color = s0 && s0.color || palette[i % palette.length];\n\t\tconst d = `M ${cx} ${cy} L ${x1} ${y1} A ${r} ${r} 0 ${large} 1 ${x2} ${y2} Z`;\n\t\tparts.push(`<path d=\"${d}\" fill=\"${color}\" />`);\n\t\tif (el.showDataLabels && frac > 0) {\n\t\t\tconst mid = (start + end) / 2;\n\t\t\tconst lx = cx + (r + 12) * Math.cos(mid);\n\t\t\tconst ly = cy + (r + 12) * Math.sin(mid);\n\t\t\tparts.push(`<text x=\"${lx}\" y=\"${ly}\" text-anchor=\"middle\" font-size=\"10\" fill=\"#000\">${(frac * 100).toFixed(0)}%</text>`);\n\t\t}\n\t\tstart = end;\n\t});\n\treturn parts.join(\"\\n\");\n}\nfunction renderScatter(el, width, height, pad, palette) {\n\tconst chartW = width - pad * 2;\n\tconst chartH = height - pad * 2;\n\tconst allPoints = [];\n\tfor (const s of el.series) {\n\t\tconst pts = s.points || [];\n\t\tfor (const p of pts) allPoints.push(p);\n\t}\n\tconst minX = Math.min(...allPoints.map((p) => p.x), 0);\n\tconst maxX = Math.max(...allPoints.map((p) => p.x), 1);\n\tconst minY = Math.min(...allPoints.map((p) => p.y), 0);\n\tconst maxY = Math.max(...allPoints.map((p) => p.y), 1);\n\tconst parts = [];\n\tparts.push(`<line x1=\"${pad}\" y1=\"${height - pad}\" x2=\"${width - pad}\" y2=\"${height - pad}\" stroke=\"#999\" stroke-width=\"1\" />`);\n\tparts.push(`<line x1=\"${pad}\" y1=\"${pad}\" x2=\"${pad}\" y2=\"${height - pad}\" stroke=\"#999\" stroke-width=\"1\" />`);\n\tcomputeTicks(minX, maxX, 4).forEach((t) => {\n\t\tconst tx = pad + (t - minX) / Math.max(1e-9, maxX - minX) * chartW;\n\t\tconst ty = height - pad;\n\t\tparts.push(`<line x1=\"${tx}\" y1=\"${ty}\" x2=\"${tx}\" y2=\"${ty + 4}\" stroke=\"#999\" stroke-width=\"1\" />`);\n\t\tparts.push(`<text x=\"${tx}\" y=\"${ty + 16}\" text-anchor=\"middle\" font-size=\"10\" fill=\"#666\">${formatNumber(t, el.valueFormat)}</text>`);\n\t});\n\tcomputeTicks(minY, maxY, 4).forEach((t) => {\n\t\tconst ty = height - pad - (t - minY) / Math.max(1e-9, maxY - minY) * chartH;\n\t\tparts.push(`<line x1=\"${pad - 4}\" y1=\"${ty}\" x2=\"${pad}\" y2=\"${ty}\" stroke=\"#999\" stroke-width=\"1\" />`);\n\t\tparts.push(`<text x=\"${pad - 6}\" y=\"${ty + 3}\" text-anchor=\"end\" font-size=\"10\" fill=\"#666\">${formatNumber(t, el.valueFormat)}</text>`);\n\t\tparts.push(`<line x1=\"${pad}\" y1=\"${ty}\" x2=\"${width - pad}\" y2=\"${ty}\" stroke=\"#eee\" stroke-width=\"1\" />`);\n\t});\n\tel.series.forEach((s, si) => {\n\t\tconst color = s.color || palette[si % palette.length];\n\t\t(s.points || []).forEach((p) => {\n\t\t\tconst x = pad + (p.x - minX) / Math.max(1e-9, maxX - minX) * chartW;\n\t\t\tconst y = height - pad - (p.y - minY) / Math.max(1e-9, maxY - minY) * chartH;\n\t\t\tparts.push(`<circle cx=\"${x}\" cy=\"${y}\" r=\"3\" fill=\"${color}\" />`);\n\t\t\tif (el.showDataLabels) {\n\t\t\t\tconst fmt = s.valueFormat || el.valueFormat;\n\t\t\t\tparts.push(`<text x=\"${x + 5}\" y=\"${y - 5}\" font-size=\"10\" fill=\"#000\">${formatNumber(p.y, fmt)}</text>`);\n\t\t\t}\n\t\t});\n\t});\n\treturn parts.join(\"\\n\");\n}\nfunction escape(str) {\n\treturn str.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n}\nfunction computeTicks(min, max, count) {\n\tconst span = max - min;\n\tif (span <= 0) return [min, max];\n\tconst step = niceNum(span / count, true);\n\tconst ticks = [];\n\tlet v = Math.ceil(min / step) * step;\n\twhile (v <= max + 1e-9) {\n\t\tticks.push(Number(v.toFixed(10)));\n\t\tv += step;\n\t}\n\treturn ticks;\n}\nfunction niceNum(range, round) {\n\tconst exponent = Math.floor(Math.log10(range));\n\tconst fraction = range / Math.pow(10, exponent);\n\tlet niceFraction;\n\tif (round) if (fraction < 1.5) niceFraction = 1;\n\telse if (fraction < 3) niceFraction = 2;\n\telse if (fraction < 7) niceFraction = 5;\n\telse niceFraction = 10;\n\telse if (fraction <= 1) niceFraction = 1;\n\telse if (fraction <= 2) niceFraction = 2;\n\telse if (fraction <= 5) niceFraction = 5;\n\telse niceFraction = 10;\n\treturn niceFraction * Math.pow(10, exponent);\n}\nfunction formatNumber(v, formatCode) {\n\tif (!formatCode) {\n\t\tif (Math.abs(v) >= 1e3) return `${Math.round(v)}`;\n\t\tif (Math.abs(v) >= 10) return v.toFixed(0);\n\t\tif (Math.abs(v) >= 1) return v.toFixed(1);\n\t\treturn v.toFixed(2);\n\t}\n\tlet isPercent = /%/.test(formatCode);\n\tlet decimals = 0;\n\tconst decMatch = formatCode.match(/\\.([0#]+)/);\n\tif (decMatch) decimals = decMatch[1].length;\n\tconst currencyMatch = formatCode.match(/([$€£¥])/);\n\tconst currency = currencyMatch ? currencyMatch[1] : \"\";\n\tconst useThousands = /#,##0/.test(formatCode);\n\tlet n = v;\n\tif (isPercent) n = n * 100;\n\tlet str = n.toFixed(decimals);\n\tif (useThousands) {\n\t\tconst [int, frac] = str.split(\".\");\n\t\tconst withSep = int.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n\t\tstr = frac !== void 0 ? `${withSep}.${frac}` : withSep;\n\t}\n\tif (currency) str = currency + str;\n\tif (isPercent) str = str + \"%\";\n\treturn str;\n}\nfunction renderLegend(el, width, pad, palette) {\n\tlet x = pad;\n\tconst y = pad - 12;\n\tconst parts = [];\n\tel.series.forEach((s, i) => {\n\t\tconst color = s.color || palette[i % palette.length];\n\t\tconst label = s.name || `Series ${i + 1}`;\n\t\tparts.push(`<rect x=\"${x}\" y=\"${y}\" width=\"10\" height=\"10\" fill=\"${color}\" />`);\n\t\tparts.push(`<text x=\"${x + 14}\" y=\"${y + 9}\" font-size=\"10\" fill=\"#333\">${escape(label)}</text>`);\n\t\tx += 14 + label.length * 6 + 10;\n\t});\n\treturn parts.join(\"\\n\");\n}\n//#endregion\n//#region src/renderer/HtmlRenderer.ts\n/**\n* Converts a list of SlideElements into an HTML string with absolute positioning.\n*/\nvar HtmlRenderer = class {\n\t/**\n\t* Renders a slide to an HTML <div> with all elements positioned accordingly.\n\t* @param elements List of SlideElement (text, image, shape)\n\t* @param options Optional width and height (in px) for the slide container.\n\t* - If scaleToFit=true, width/height define the outer container size and contents are scaled from the base 960x540.\n\t* @returns HTML string representing the slide\n\t*/\n\tstatic render(elements, options = {}) {\n\t\tconst dimension = (value, fallback) => typeof value === \"number\" && Number.isFinite(value) && value > 0 ? value : fallback;\n\t\tconst baseW = dimension(options.baseWidth, 960);\n\t\tconst baseH = dimension(options.baseHeight, 540);\n\t\tconst targetW = dimension(options.width, baseW);\n\t\tconst targetH = dimension(options.height, baseH);\n\t\tconst scaleToFit = options.scaleToFit === true;\n\t\tconst letterbox = scaleToFit ? options.letterbox !== false : options.letterbox === true;\n\t\tconst htmlParts = elements.map((el) => {\n\t\t\tswitch (el.type) {\n\t\t\t\tcase \"background\": {\n\t\t\t\t\tconst styleBg = Boolean(el.imageSrc) ? `background-image: url('${escapeAttribute(el.imageSrc)}'); background-size: cover; background-position: center; background-repeat: no-repeat;` : `background-color: ${safeColor(el.fillColor)};`;\n\t\t\t\t\treturn `<div style=\"position:absolute; z-index:${Number.isFinite(el.zIndex) ? el.zIndex : -1}; left:0; top:0; width:${baseW}px; height:${baseH}px; ${styleBg}\"></div>`;\n\t\t\t\t}\n\t\t\t\tcase \"text\": return renderTextElement(el);\n\t\t\t\tcase \"image\": return renderImageElement(el);\n\t\t\t\tcase \"shape\": return renderShapeElement(el, { scaleStrokes: scaleToFit });\n\t\t\t\tcase \"table\": return renderTableElement(el);\n\t\t\t\tcase \"chart\": return renderChartElement(el);\n\t\t\t\tdefault:\n\t\t\t\t\tif (typeof console !== \"undefined\" && console.warn) console.warn(`[pptx-to-html] Unsupported element type: ${el?.type}`);\n\t\t\t\t\treturn \"\";\n\t\t\t}\n\t\t});\n\t\tif (scaleToFit) if (letterbox) {\n\t\t\tconst s = Math.min(targetW / baseW, targetH / baseH);\n\t\t\treturn `<div class=\"slide-container\" style=\"position: relative; width: ${targetW}px; height: ${targetH}px; overflow: hidden; background-color: #000;\">\n <div class=\"slide\" style=\"position: absolute; left: ${(targetW - baseW * s) / 2}px; top: ${(targetH - baseH * s) / 2}px; width: ${baseW}px; height: ${baseH}px; transform: scale(${s}); transform-origin: top left; background-color: #fff;\">\n ${htmlParts.join(\"\\n\")}\n </div>\n </div>`;\n\t\t} else return `<div class=\"slide-container\" style=\"position: relative; width: ${targetW}px; height: ${targetH}px; overflow: hidden;\">\n <div class=\"slide\" style=\"position: absolute; left: 0; top: 0; width: ${baseW}px; height: ${baseH}px; transform: scale(${targetW / baseW}, ${targetH / baseH}); transform-origin: top left; background-color: #fff;\">\n ${htmlParts.join(\"\\n\")}\n </div>\n </div>`;\n\t\treturn `<div class=\"slide\" style=\"position: relative; width: ${targetW}px; height: ${targetH}px; overflow: hidden; background-color: #fff;\">\n ${htmlParts.join(\"\\n\")}\n </div>`;\n\t}\n};\n//#endregion\n//#region src/index.ts\n/**\n* Converts a PPTX file buffer into an array of HTML slides.\n* @param buffer ArrayBuffer representing the .pptx file.\n* @param config Optional rendering configuration object.\n* @param config.width Target container width in pixels (defaults to 960 when not provided).\n* @param config.height Target container height in pixels (defaults to 540 when not provided).\n* @param config.scaleToFit When true, scales the slide content to fit the container size.\n* @param config.letterbox When scaling, use black bars to preserve aspect ratio (defaults to true when scaleToFit is true).\n* @returns Array of HTML strings, each representing one slide.\n*/\nasync function pptxToHtml(buffer, config) {\n\tif (config?.domParserFactory) XmlHelper.setDomParser(config.domParserFactory);\n\tconst reader = new PptxReader();\n\tconst slides = await reader.load(buffer);\n\tconst base = await reader.getBaseSizePx();\n\tconst opts = {\n\t\t...config || {},\n\t\tbaseWidth: base.width,\n\t\tbaseHeight: base.height\n\t};\n\treturn slides.map((slideElements) => HtmlRenderer.render(slideElements, opts));\n}\n//#endregion\nexport { pptxToHtml };\n\n//# sourceMappingURL=index.js.map"],"x_google_ignoreList":[0],"mappings":"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"}