@coco-vexel/coco-office 0.0.0-stage → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +120 -2
  3. package/THIRD_PARTY_NOTICES.md +1188 -0
  4. package/dist/excel-worker-browser.cjs +6544 -0
  5. package/dist/excel-worker-browser.cjs.map +1 -0
  6. package/dist/excel-worker-browser.d.cts +2 -0
  7. package/dist/excel-worker-browser.d.ts +2 -0
  8. package/dist/excel-worker-browser.js +6523 -0
  9. package/dist/excel-worker-browser.js.map +1 -0
  10. package/dist/excel-worker.cjs +6547 -0
  11. package/dist/excel-worker.cjs.map +1 -0
  12. package/dist/excel-worker.d.cts +2 -0
  13. package/dist/excel-worker.d.ts +2 -0
  14. package/dist/excel-worker.js +6526 -0
  15. package/dist/excel-worker.js.map +1 -0
  16. package/dist/excel.cjs +12523 -0
  17. package/dist/excel.cjs.map +1 -0
  18. package/dist/excel.d.cts +2252 -0
  19. package/dist/excel.d.ts +2252 -0
  20. package/dist/excel.js +12368 -0
  21. package/dist/excel.js.map +1 -0
  22. package/dist/index.cjs +19 -0
  23. package/dist/index.cjs.map +1 -0
  24. package/dist/index.d.cts +2 -0
  25. package/dist/index.d.ts +2 -0
  26. package/dist/index.js +1 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/kernel-worker-browser.cjs +12304 -0
  29. package/dist/kernel-worker-browser.cjs.map +1 -0
  30. package/dist/kernel-worker-browser.d.cts +2 -0
  31. package/dist/kernel-worker-browser.d.ts +2 -0
  32. package/dist/kernel-worker-browser.js +12283 -0
  33. package/dist/kernel-worker-browser.js.map +1 -0
  34. package/dist/kernel-worker.cjs +12309 -0
  35. package/dist/kernel-worker.cjs.map +1 -0
  36. package/dist/kernel-worker.d.cts +2 -0
  37. package/dist/kernel-worker.d.ts +2 -0
  38. package/dist/kernel-worker.js +12288 -0
  39. package/dist/kernel-worker.js.map +1 -0
  40. package/dist/pack.cjs +459 -0
  41. package/dist/pack.cjs.map +1 -0
  42. package/dist/pack.d.cts +119 -0
  43. package/dist/pack.d.ts +119 -0
  44. package/dist/pack.js +408 -0
  45. package/dist/pack.js.map +1 -0
  46. package/dist/ppt.cjs +7427 -0
  47. package/dist/ppt.cjs.map +1 -0
  48. package/dist/ppt.d.cts +1432 -0
  49. package/dist/ppt.d.ts +1432 -0
  50. package/dist/ppt.js +7355 -0
  51. package/dist/ppt.js.map +1 -0
  52. package/dist/shared.cjs +105 -0
  53. package/dist/shared.cjs.map +1 -0
  54. package/dist/shared.d.cts +31 -0
  55. package/dist/shared.d.ts +31 -0
  56. package/dist/shared.js +81 -0
  57. package/dist/shared.js.map +1 -0
  58. package/dist/types-BVkkdcfh.d.cts +54 -0
  59. package/dist/types-BVkkdcfh.d.ts +54 -0
  60. package/dist/types-C2vQfM-b.d.cts +102 -0
  61. package/dist/types-C2vQfM-b.d.ts +102 -0
  62. package/dist/view-DAkeR0RW.d.ts +1199 -0
  63. package/dist/view-DX2YAG5A.d.cts +1199 -0
  64. package/dist/word-view.cjs +1824 -0
  65. package/dist/word-view.cjs.map +1 -0
  66. package/dist/word-view.d.cts +2 -0
  67. package/dist/word-view.d.ts +2 -0
  68. package/dist/word-view.js +1791 -0
  69. package/dist/word-view.js.map +1 -0
  70. package/dist/word.cjs +14111 -0
  71. package/dist/word.cjs.map +1 -0
  72. package/dist/word.d.cts +3042 -0
  73. package/dist/word.d.ts +3042 -0
  74. package/dist/word.js +14016 -0
  75. package/dist/word.js.map +1 -0
  76. package/package.json +103 -3
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pack/part.ts","../src/pack/package.ts","../src/pack/zip.ts","../src/pack/content-types.ts","../src/ppt/mutations.ts","../src/ppt/xml.ts","../src/ppt/pptx-reader.ts","../src/ppt/pptx-writer.ts","../src/ppt/presentation-core.ts","../src/ppt/runtime.ts","../src/ppt/writeback-planner.ts","../src/ppt/host-capabilities.ts"],"sourcesContent":["/**\n * Part 构造 / 变更 / 查询 的辅助函数。\n *\n * 所有 Part 的\"创建\"都走这里(而非直接字面量),以便:\n * - 守住 path 格式(无前导斜杠)\n * - 守住 XML / 二进制 互斥\n * - 统一 `_dirty` / `_originalBytes` 初始化语义\n */\nimport type { Part } from './types.js';\n\nexport interface CreateXmlPartSpec {\n /** Part 路径,无前导斜杠,如 'word/document.xml' */\n path: string;\n /** MIME content type */\n contentType: string;\n /** 已解析好的 XML DOM(slimdom Document) */\n xmlDom: Document;\n /**\n * 装载时的原始字节。\n * - 传入(来自装载路径):`_dirty` 初始为 `false`,可在 `toZip` 时零 serialize 复用\n * - 省略(新建 part 的场景,后续 #9/#10 的插入新 XML part):`_dirty` 初始为 `true`\n */\n originalBytes?: Uint8Array;\n}\n\nexport interface CreateBinaryPartSpec {\n /** Part 路径,无前导斜杠,如 'word/media/image1.png' */\n path: string;\n /** MIME content type,如 'image/png' */\n contentType: string;\n /** 二进制载荷 */\n bytes: Uint8Array;\n /**\n * 装载时的原始字节;二进制通常装载即最终态,省略时默认 = `bytes`。\n * 二进制 part 初始 `_dirty` 恒为 `false`。\n */\n originalBytes?: Uint8Array;\n}\n\nfunction assertPath(path: string): void {\n if (typeof path !== 'string' || path.length === 0) {\n throw new Error(`invalid part path: must be non-empty string, got: ${JSON.stringify(path)}`);\n }\n if (path.startsWith('/')) {\n throw new Error(`invalid part path: must not start with '/', got: ${path}`);\n }\n}\n\nfunction assertContentType(contentType: string): void {\n if (typeof contentType !== 'string' || contentType.length === 0) {\n throw new Error(`invalid contentType: must be non-empty string`);\n }\n}\n\n/** 从已解析的 XML DOM 创建 XML part。`originalBytes` 传入 → dirty=false;否则 dirty=true(新建场景) */\nexport function createXmlPart(spec: CreateXmlPartSpec): Part {\n assertPath(spec.path);\n assertContentType(spec.contentType);\n if (!spec.xmlDom) {\n throw new Error(`createXmlPart: xmlDom required for ${spec.path}`);\n }\n return {\n path: spec.path,\n contentType: spec.contentType,\n xmlDom: spec.xmlDom,\n _originalBytes: spec.originalBytes,\n _dirty: spec.originalBytes === undefined,\n };\n}\n\n/** 从二进制字节创建 binary part。`originalBytes` 省略时默认 = `bytes`。dirty 恒为 false */\nexport function createBinaryPart(spec: CreateBinaryPartSpec): Part {\n assertPath(spec.path);\n assertContentType(spec.contentType);\n if (!spec.bytes) {\n throw new Error(`createBinaryPart: bytes required for ${spec.path}`);\n }\n return {\n path: spec.path,\n contentType: spec.contentType,\n bytes: spec.bytes,\n _originalBytes: spec.originalBytes ?? spec.bytes,\n _dirty: false,\n };\n}\n\n/** 标记 part 被改动过。toZip / toFlatOpc 会重 serialize 此 part */\nexport function markDirty(part: Part): void {\n part._dirty = true;\n}\n\n/** 查询 part 是否被改动(read-only;读操作不改 part) */\nexport function isDirty(part: Part): boolean {\n return part._dirty;\n}\n\n/** XML part 判定(拥有 xmlDom) */\nexport function isXmlPart(part: Part): boolean {\n return part.xmlDom !== undefined;\n}\n\n/** 二进制 part 判定(拥有 bytes 但无 xmlDom) */\nexport function isBinaryPart(part: Part): boolean {\n return part.bytes !== undefined && part.xmlDom === undefined;\n}\n","/**\n * Package 集合层:create / set / get / has / delete / list\n *\n * Package 只是 path→Part 的 Map 容器;零业务语义,存储格式由 adapter 层(#9 zip / #10 Flat OPC)决定。\n */\nimport type { Package, Part } from './types.js';\n\n/** 空包。后续由 adapter 层填充 parts */\nexport function createPackage(): Package {\n return { parts: new Map() };\n}\n\n/** 以 part.path 为 key 放入 pkg。已存在同 path 时覆盖 */\nexport function setPart(pkg: Package, part: Part): void {\n pkg.parts.set(part.path, part);\n}\n\n/** 按 path 取回 part;不存在返 undefined */\nexport function getPart(pkg: Package, path: string): Part | undefined {\n return pkg.parts.get(path);\n}\n\n/** 按 path 判断存在 */\nexport function hasPart(pkg: Package, path: string): boolean {\n return pkg.parts.has(path);\n}\n\n/** 删除 part,返回是否删除成功(存在即删、不存在返 false) */\nexport function deletePart(pkg: Package, path: string): boolean {\n return pkg.parts.delete(path);\n}\n\n/** 所有 parts 快照数组(稳定遍历顺序 = Map 插入顺序) */\nexport function listParts(pkg: Package): Part[] {\n return Array.from(pkg.parts.values());\n}\n","/**\n * zip ↔ Package 互转(docs/01 §3.2)。\n *\n * - `fromZip(buf)` 解压 .docx,按 `[Content_Types].xml` 恢复每个 part 的 contentType\n * - `toZip(pkg)` 反向:dirty=false 的 part 复用 `_originalBytes`,dirty=true 的按 XML / 二进制重序列化\n *\n * 本实现目标:小文档正确性。极大档性能调优(lazy parse 等)归后续 issue。\n */\nimport JSZip from 'jszip';\nimport { parseXmlDocument, serializeToWellFormedString } from 'slimdom';\nimport type { Package, Part } from './types.js';\nimport { createBinaryPart, createXmlPart, isXmlPart } from './part.js';\nimport { createPackage, setPart } from './package.js';\nimport { ensureContentTypes } from './content-types.js';\n\n/** Content Types 子集 */\nconst CONTENT_TYPES_PATH = '[Content_Types].xml';\nconst CONTENT_TYPES_NS = 'http://schemas.openxmlformats.org/package/2006/content-types';\nconst CONTENT_TYPES_CTYPE = 'application/vnd.openxmlformats-package.content-types+xml';\n\n/**\n * 判断 contentType 是否为 XML 类(决定走 parseXmlDocument 还是保留字节):\n * - 以 `+xml` 结尾(OOXML 所有子 part 的惯例)\n * - 或完全等于 `application/xml` / `text/xml`\n */\nfunction isXmlContentType(ct: string): boolean {\n const normalized = ct.toLowerCase();\n if (\n normalized.startsWith('image/') ||\n normalized.startsWith('audio/') ||\n normalized.startsWith('video/') ||\n normalized === 'application/octet-stream' ||\n normalized === 'application/vnd.openxmlformats-officedocument.oleobject' ||\n normalized.startsWith('application/vnd.ms-office.')\n ) {\n return false;\n }\n return normalized.endsWith('+xml') || normalized === 'application/xml' || normalized === 'text/xml';\n}\n\n/** 解析 [Content_Types].xml 构建 partName → contentType 的查找器 */\ninterface ContentTypeResolver {\n /** partName 无前导 `/`,如 'word/document.xml' */\n resolve(partName: string): string | undefined;\n}\n\nfunction parseContentTypes(xml: string): ContentTypeResolver {\n const doc = parseXmlDocument(xml) as unknown as Document;\n const defaults = new Map<string, string>(); // extension(小写) → contentType\n const overrides = new Map<string, string>(); // partName(无 /)→ contentType\n\n const defaultEls = doc.getElementsByTagNameNS(CONTENT_TYPES_NS, 'Default');\n for (let i = 0; i < defaultEls.length; i++) {\n const el = defaultEls[i];\n if (!el) continue;\n const ext = el.getAttribute('Extension');\n const ct = el.getAttribute('ContentType');\n if (ext && ct) defaults.set(ext.toLowerCase(), ct);\n }\n\n const overrideEls = doc.getElementsByTagNameNS(CONTENT_TYPES_NS, 'Override');\n for (let i = 0; i < overrideEls.length; i++) {\n const el = overrideEls[i];\n if (!el) continue;\n const partName = el.getAttribute('PartName');\n const ct = el.getAttribute('ContentType');\n if (partName && ct) {\n // PartName 以 `/` 开头,剥掉前导斜杠与 Package 内部 path 对齐\n overrides.set(partName.replace(/^\\//, ''), ct);\n }\n }\n\n return {\n resolve(partName: string): string | undefined {\n const override = overrides.get(partName);\n if (override) return override;\n const dot = partName.lastIndexOf('.');\n if (dot === -1) return undefined;\n return defaults.get(partName.slice(dot + 1).toLowerCase());\n },\n };\n}\n\n/**\n * 从 zip 字节重建 Package。\n *\n * 行为:\n * - 先读 `[Content_Types].xml`,构建 contentType 查找器\n * - 遍历 zip entries,跳过目录\n * - 每个 entry 按 contentType 决定 XML / 二进制,创建对应 Part\n * - `[Content_Types].xml` 也作为 XML part 存入 Package\n */\nexport async function fromZip(buf: Uint8Array | ArrayBuffer): Promise<Package> {\n const bytes = buf instanceof Uint8Array ? buf : new Uint8Array(buf);\n const zip = await JSZip.loadAsync(bytes);\n const pkg = createPackage();\n\n const ctFile = zip.file(CONTENT_TYPES_PATH);\n if (!ctFile) {\n throw new Error(`fromZip: missing ${CONTENT_TYPES_PATH}; not a valid OOXML package`);\n }\n const ctXml = await ctFile.async('string');\n const resolver = parseContentTypes(ctXml);\n const ctBytes = await ctFile.async('uint8array');\n setPart(\n pkg,\n createXmlPart({\n path: CONTENT_TYPES_PATH,\n contentType: CONTENT_TYPES_CTYPE,\n xmlDom: parseXmlDocument(ctXml) as unknown as Document,\n originalBytes: ctBytes,\n }),\n );\n\n // 遍历非 [Content_Types].xml 的 entry\n const entryPaths: string[] = [];\n zip.forEach((relativePath, entry) => {\n if (entry.dir) return;\n if (relativePath === CONTENT_TYPES_PATH) return;\n entryPaths.push(relativePath);\n });\n\n for (const path of entryPaths) {\n const entry = zip.file(path);\n if (!entry) continue;\n const contentType = resolver.resolve(path);\n if (!contentType) {\n throw new Error(\n `fromZip: no ContentType for part '${path}' (not in Default by extension, not in Override by partName)`,\n );\n }\n const entryBytes = await entry.async('uint8array');\n\n if (isXmlContentType(contentType)) {\n const xmlText = await entry.async('string');\n const xmlDom = parseXmlDocument(xmlText) as unknown as Document;\n setPart(pkg, createXmlPart({ path, contentType, xmlDom, originalBytes: entryBytes }));\n } else {\n setPart(pkg, createBinaryPart({ path, contentType, bytes: entryBytes }));\n }\n }\n\n return pkg;\n}\n\n/**\n * 将 Package 序列化回 zip 字节。\n *\n * 行为:\n * - `_dirty === false` 且持有 `_originalBytes` → 直接复用字节(零 serialize)\n * - `_dirty === true` 的 XML part → slimdom serialize\n * - `_dirty === true` 的二进制 part → 使用 `bytes`\n */\nexport async function toZip(pkg: Package): Promise<Uint8Array> {\n // Flat OPC → Package 的路径不会产生 [Content_Types].xml;此处补齐以保证产出的 zip 合法。\n // 对 fromZip 出来的 Package 无副作用(CT 已在)。\n ensureContentTypes(pkg);\n\n const zip = new JSZip();\n\n for (const part of pkg.parts.values()) {\n const bytes = partToBytes(part);\n // createFolders=false 显式禁止 JSZip 为含 '/' 的 path 自动创建中间目录 entry——\n // OOXML 规范不允许 zip 包内有空目录 entry,Word 见到会判\"文档已损坏\"拒打开\n // (WPS 宽松能开但产物不合规)。JSZip 3.x 默认 true,必须显式关。\n zip.file(part.path, bytes, { createFolders: false });\n }\n\n // OOXML 主体是高度可压缩的 XML;默认 STORE 会让产物比 Word 原生输出大 10-18×。\n return await zip.generateAsync({\n type: 'uint8array',\n compression: 'DEFLATE',\n compressionOptions: { level: 6 },\n });\n}\n\nfunction partToBytes(part: Part): Uint8Array {\n // dirty=false 且有原始字节:零 serialize\n if (!part._dirty && part._originalBytes) {\n return part._originalBytes;\n }\n\n if (isXmlPart(part)) {\n if (!part.xmlDom) {\n throw new Error(`toZip: XML part '${part.path}' missing xmlDom`);\n }\n // xmlDom 在我们的类型里是 lib.dom 的 Document(消费方友好),slimdom 的 Node 结构兼容但 TS\n // 类型不同;通过 `as never` 绕开 dts 检查,运行时正常。\n const text = serializeToWellFormedString(part.xmlDom as never);\n return new TextEncoder().encode(text);\n }\n\n // 二进制\n if (part.bytes) return part.bytes;\n if (part._originalBytes) return part._originalBytes;\n throw new Error(`toZip: binary part '${part.path}' has no bytes`);\n}\n","/**\n * [Content_Types].xml 的合成与维护。\n *\n * 为什么单列一个模块:\n * - zip 形态要求 [Content_Types].xml 存在(否则 Word/WPS 打不开)\n * - Flat OPC 形态里 contentType 已内联在 <pkg:part> 上,不含 CT 文件\n * - 因此 `fromFlatOpc` 出来的 Package 缺 CT;直接 `toZip` 会产出坏 docx\n *\n * 本模块提供 `ensureContentTypes(pkg)`:若 CT part 缺失,按当前 parts 的\n * (path → contentType)合成一份最小 CT XML 并加入 Package。\n *\n * `toZip` 会在打包前自动调一次,确保产出的 zip 始终可打开。\n */\nimport { parseXmlDocument } from 'slimdom';\nimport { createXmlPart } from './part.js';\nimport { getPart, setPart } from './package.js';\nimport type { Package } from './types.js';\n\nconst CONTENT_TYPES_PATH = '[Content_Types].xml';\nconst CONTENT_TYPES_NS = 'http://schemas.openxmlformats.org/package/2006/content-types';\nconst CONTENT_TYPES_CTYPE = 'application/vnd.openxmlformats-package.content-types+xml';\n\n/** XML 属性值转义(Content Type 里可能含 `+`,但没有 `<` `&` 等需要转义的字符;仍做一遍以防) */\nfunction xmlAttr(v: string): string {\n return v\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n}\n\n/**\n * 如果 Package 里已有 `[Content_Types].xml` part,返回 false,不做改动。\n * 否则,按当前 parts 的 contentType 合成一份最小 CT XML 并加入 Package,返回 true。\n *\n * 合成策略:每个非 CT part 产生一个 `<Override PartName=\"/path\" ContentType=\"...\"/>`。\n * 不尝试推导 Default 扩展名(正确性优先,简洁性次之)。\n */\nexport function ensureContentTypes(pkg: Package): boolean {\n if (getPart(pkg, CONTENT_TYPES_PATH)) return false;\n\n const overrides: string[] = [];\n for (const part of pkg.parts.values()) {\n if (part.path === CONTENT_TYPES_PATH) continue;\n overrides.push(\n ` <Override PartName=\"/${xmlAttr(part.path)}\" ContentType=\"${xmlAttr(part.contentType)}\"/>`,\n );\n }\n\n const xml =\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n` +\n `<Types xmlns=\"${CONTENT_TYPES_NS}\">\\n` +\n overrides.join('\\n') +\n (overrides.length > 0 ? '\\n' : '') +\n `</Types>`;\n\n setPart(\n pkg,\n createXmlPart({\n path: CONTENT_TYPES_PATH,\n contentType: CONTENT_TYPES_CTYPE,\n xmlDom: parseXmlDocument(xml) as unknown as Document,\n originalBytes: new TextEncoder().encode(xml),\n }),\n );\n\n return true;\n}\n","import type {\n PptShapeGeometry,\n PptShapeKind,\n PptShapeStyle,\n PptHyperlinkWriteOptions,\n PptCommentAddOptions,\n PptChartData,\n PptImageStyle,\n PptTableCellStyle,\n PptTextBodyProperties,\n PptTextParagraphWrite,\n PptTextStyle,\n} from './model.js';\n\nexport type PptMutation =\n | {\n type: 'shape.add';\n slideId: string;\n shapeId: string;\n kind: PptShapeKind;\n imageRef?: string;\n }\n | {\n type: 'shape.delete';\n slideId: string;\n shapeId: string;\n }\n | {\n type: 'shape.name.set';\n slideId: string;\n shapeId: string;\n name: string;\n }\n | {\n type: 'shape.zOrder.set';\n slideId: string;\n shapeId: string;\n position: 'front' | 'back';\n }\n | {\n type: 'shape.geometry.set';\n slideId: string;\n shapeId: string;\n geometry: Partial<PptShapeGeometry>;\n }\n | {\n type: 'shape.style.set';\n slideId: string;\n shapeId: string;\n style: Partial<PptShapeStyle>;\n }\n | {\n type: 'shape.hyperlink.set';\n slideId: string;\n shapeId: string;\n hyperlink: PptHyperlinkWriteOptions;\n }\n | {\n type: 'shape.hyperlink.clear';\n slideId: string;\n shapeId: string;\n }\n | {\n type: 'shape.text.set';\n slideId: string;\n shapeId: string;\n text: string;\n }\n | {\n type: 'shape.text.style.set';\n slideId: string;\n shapeId: string;\n style: Partial<PptTextStyle>;\n }\n | {\n type: 'shape.text.body.set';\n slideId: string;\n shapeId: string;\n body: Partial<PptTextBodyProperties>;\n }\n | {\n type: 'shape.text.paragraphs.set';\n slideId: string;\n shapeId: string;\n paragraphs: PptTextParagraphWrite[];\n }\n | {\n type: 'shape.text.run.style.set';\n slideId: string;\n shapeId: string;\n runIndex: number;\n style: Partial<PptTextStyle>;\n }\n | {\n type: 'shape.text.run.hyperlink.set';\n slideId: string;\n shapeId: string;\n runIndex: number;\n hyperlink: PptHyperlinkWriteOptions;\n }\n | {\n type: 'shape.text.run.hyperlink.clear';\n slideId: string;\n shapeId: string;\n runIndex: number;\n }\n | {\n type: 'shape.text.replace';\n slideId: string;\n shapeId: string;\n search: string;\n replacement: string;\n count: number;\n }\n | {\n type: 'slide.notes.set';\n slideId: string;\n text: string;\n }\n | {\n type: 'slide.notes.clear';\n slideId: string;\n }\n | {\n type: 'slide.comment.add';\n slideId: string;\n comment: PptCommentAddOptions;\n }\n | {\n type: 'slide.comment.delete';\n slideId: string;\n commentId: string;\n }\n | {\n type: 'slide.comments.clear';\n slideId: string;\n }\n | {\n type: 'shape.chart.data.set';\n slideId: string;\n shapeId: string;\n data: PptChartData;\n }\n | {\n type: 'shape.image.replace';\n slideId: string;\n shapeId: string;\n imageRef: string;\n }\n | {\n type: 'shape.image.style.set';\n slideId: string;\n shapeId: string;\n style: Partial<PptImageStyle>;\n }\n | {\n type: 'table.cell.text.set';\n slideId: string;\n shapeId: string;\n row: number;\n column: number;\n text: string;\n }\n | {\n type: 'table.cell.style.set';\n slideId: string;\n shapeId: string;\n row: number;\n column: number;\n style: Partial<PptTableCellStyle>;\n }\n | {\n type: 'table.cell.text.paragraphs.set';\n slideId: string;\n shapeId: string;\n row: number;\n column: number;\n paragraphs: PptTextParagraphWrite[];\n }\n | {\n type: 'table.cell.text.run.style.set';\n slideId: string;\n shapeId: string;\n row: number;\n column: number;\n runIndex: number;\n style: Partial<PptTextStyle>;\n }\n | {\n type: 'table.values.set';\n slideId: string;\n shapeId: string;\n values: string[][];\n }\n | {\n type: 'table.row.add';\n slideId: string;\n shapeId: string;\n index: number;\n values: string[];\n }\n | {\n type: 'table.row.delete';\n slideId: string;\n shapeId: string;\n index: number;\n }\n | {\n type: 'table.column.add';\n slideId: string;\n shapeId: string;\n index: number;\n values: string[];\n }\n | {\n type: 'table.column.delete';\n slideId: string;\n shapeId: string;\n index: number;\n };\n\nexport class PptMutationLog {\n private readonly items: PptMutation[] = [];\n\n record(mutation: PptMutation): void {\n this.items.push(cloneMutation(mutation));\n }\n\n list(): PptMutation[] {\n return this.items.map(cloneMutation);\n }\n\n clear(): void {\n this.items.length = 0;\n }\n}\n\nfunction cloneMutation(mutation: PptMutation): PptMutation {\n return JSON.parse(JSON.stringify(mutation)) as PptMutation;\n}\n","import type { Part } from '../pack/index.js';\n\nexport const PKG_REL_NS = 'http://schemas.openxmlformats.org/package/2006/relationships';\nexport const OFFICE_REL_NS = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\nexport const P_NS = 'http://schemas.openxmlformats.org/presentationml/2006/main';\nexport const A_NS = 'http://schemas.openxmlformats.org/drawingml/2006/main';\nexport const R_NS = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\n\nexport interface PptRelationship {\n id: string;\n type: string;\n target: string;\n targetMode?: string;\n}\n\nexport function childElementsNs(parent: Element, ns: string, localName: string): Element[] {\n const result: Element[] = [];\n for (let i = 0; i < parent.childNodes.length; i++) {\n const child = parent.childNodes[i];\n if (child?.nodeType !== 1) continue;\n const el = child as Element;\n if (el.namespaceURI === ns && el.localName === localName) result.push(el);\n }\n return result;\n}\n\nexport function firstChildNs(parent: Element, ns: string, localName: string): Element | null {\n return childElementsNs(parent, ns, localName)[0] ?? null;\n}\n\nexport function firstChildLocal(parent: Element, localName: string): Element | null {\n for (let i = 0; i < parent.childNodes.length; i++) {\n const child = parent.childNodes[i];\n if (child?.nodeType === 1 && (child as Element).localName === localName) {\n return child as Element;\n }\n }\n return null;\n}\n\nexport function allDescendantsNs(\n parent: Element | Document,\n ns: string,\n localName: string,\n): Element[] {\n return Array.from(parent.getElementsByTagNameNS(ns, localName)) as Element[];\n}\n\nexport function allDescendantsLocal(parent: Element | Document, localName: string): Element[] {\n return Array.from(parent.getElementsByTagName('*')).filter((el) => el.localName === localName);\n}\n\nexport function textOf(el: Element | null | undefined): string {\n return el?.textContent ?? '';\n}\n\nexport function parseRelationships(part?: Part): Map<string, PptRelationship> {\n const result = new Map<string, PptRelationship>();\n if (!part?.xmlDom) return result;\n const rels = part.xmlDom.getElementsByTagNameNS(PKG_REL_NS, 'Relationship');\n for (let i = 0; i < rels.length; i++) {\n const rel = rels[i];\n if (!rel) continue;\n const id = rel.getAttribute('Id');\n const type = rel.getAttribute('Type');\n const target = rel.getAttribute('Target');\n if (!id || !type || !target) continue;\n result.set(id, {\n id,\n type,\n target,\n targetMode: rel.getAttribute('TargetMode') ?? undefined,\n });\n }\n return result;\n}\n\nexport function dirname(path: string): string {\n const idx = path.lastIndexOf('/');\n return idx === -1 ? '' : path.slice(0, idx);\n}\n\nexport function basename(path: string): string {\n const idx = path.lastIndexOf('/');\n return idx === -1 ? path : path.slice(idx + 1);\n}\n\nexport function normalizePath(path: string): string {\n const parts: string[] = [];\n for (const part of path.split('/')) {\n if (!part || part === '.') continue;\n if (part === '..') parts.pop();\n else parts.push(part);\n }\n return parts.join('/');\n}\n\nexport function resolveRelationshipTarget(sourcePartPath: string, target: string): string {\n if (target.startsWith('/')) return normalizePath(target.slice(1));\n const base = dirname(sourcePartPath);\n return normalizePath(base ? `${base}/${target}` : target);\n}\n\nexport function relsPathForPart(partPath: string): string {\n const dir = dirname(partPath);\n const name = basename(partPath);\n return dir ? `${dir}/_rels/${name}.rels` : `_rels/${name}.rels`;\n}\n\nexport function parseNumber(raw: string | null): number | undefined {\n if (raw === null || raw === '') return undefined;\n const value = Number(raw);\n return Number.isFinite(value) ? value : undefined;\n}\n\nexport function setAttrIfDefined(el: Element, name: string, value: number | undefined): void {\n if (value !== undefined && Number.isFinite(value)) el.setAttribute(name, String(Math.round(value)));\n}\n","import { getPart, isBinaryPart, type Package, type Part } from '../pack/index.js';\nimport type {\n PptChartModel,\n PptChartData,\n PptChartSeriesData,\n PptCommentModel,\n PptCustomGeometryCommand,\n PptCustomGeometryModel,\n PptGroupTransformModel,\n PptHyperlinkModel,\n PptFontModel,\n PptGradientFillModel,\n PptImageModel,\n PptMediaModel,\n PptPresentationModel,\n PptShapeGeometry,\n PptShapeKind,\n PptShapeMediaModel,\n PptShapeModel,\n PptShapeStyle,\n PptShadowModel,\n PptSlideBackgroundModel,\n PptSlideLayoutModel,\n PptSlideMasterModel,\n PptSlideModel,\n PptSlideTimingModel,\n PptSlideTransitionModel,\n PptOleObjectModel,\n PptSmartArtModel,\n PptTableCellStyle,\n PptTableCellMerge,\n PptTableModel,\n PptTextBodyProperties,\n PptThemeModel,\n PptTextParagraph,\n PptTextRun,\n PptTextStyle,\n} from './model.js';\nimport {\n A_NS,\n OFFICE_REL_NS,\n P_NS,\n R_NS,\n allDescendantsLocal,\n allDescendantsNs,\n childElementsNs,\n firstChildLocal,\n firstChildNs,\n parseNumber,\n parseRelationships,\n relsPathForPart,\n resolveRelationshipTarget,\n textOf,\n type PptRelationship,\n} from './xml.js';\n\nconst PRESENTATION_REL_TYPE = `${OFFICE_REL_NS}/officeDocument`;\nconst SLIDE_REL_TYPE = `${OFFICE_REL_NS}/slide`;\nconst SLIDE_LAYOUT_REL_TYPE = `${OFFICE_REL_NS}/slideLayout`;\nconst SLIDE_MASTER_REL_TYPE = `${OFFICE_REL_NS}/slideMaster`;\nconst THEME_REL_TYPE = `${OFFICE_REL_NS}/theme`;\nconst IMAGE_REL_TYPE = `${OFFICE_REL_NS}/image`;\nconst CHART_REL_TYPE = `${OFFICE_REL_NS}/chart`;\nconst FONT_REL_TYPE = `${OFFICE_REL_NS}/font`;\nconst MEDIA_REL_TYPE = `${OFFICE_REL_NS}/media`;\nconst VIDEO_REL_TYPE = `${OFFICE_REL_NS}/video`;\nconst AUDIO_REL_TYPE = `${OFFICE_REL_NS}/audio`;\nconst OLE_OBJECT_REL_TYPE = `${OFFICE_REL_NS}/oleObject`;\nconst NOTES_SLIDE_REL_TYPE = `${OFFICE_REL_NS}/notesSlide`;\nconst COMMENTS_REL_TYPE = `${OFFICE_REL_NS}/comments`;\nconst COMMENT_AUTHORS_REL_TYPE = `${OFFICE_REL_NS}/commentAuthors`;\nconst TABLE_URI = 'http://schemas.openxmlformats.org/drawingml/2006/table';\nconst DIAGRAM_URI = 'http://schemas.openxmlformats.org/drawingml/2006/diagram';\n\nexport interface PptShapeInternal {\n slide: PptSlideInternal;\n model: PptShapeModel;\n element: Element;\n textElements: Element[];\n tableCells: Element[][];\n children: PptShapeInternal[];\n}\n\nexport interface PptSlideInternal {\n model: PptSlideModel;\n part: Part;\n relationships: Map<string, PptRelationship>;\n shapes: PptShapeInternal[];\n}\n\nexport interface PptReadResult {\n model: PptPresentationModel;\n presentationPart: Part;\n slides: PptSlideInternal[];\n}\n\ninterface PptParseContext {\n colorScheme?: Record<string, string>;\n fontScheme?: PptThemeModel['fontScheme'];\n relationships?: Map<string, PptRelationship>;\n sourcePath?: string;\n}\n\nexport function readPresentationPackage(pkg: Package, presentationId?: string): PptReadResult {\n const presentationPath = findPresentationPath(pkg);\n const presentationPart = requireXmlPart(pkg, presentationPath);\n const presentationDoc = presentationPart.xmlDom!;\n const presentationRels = parseRelationships(getPart(pkg, relsPathForPart(presentationPath)));\n const commentAuthors = parseCommentAuthors(pkg, presentationPath, presentationRels);\n const slideSize = parseSlideSize(presentationDoc.documentElement);\n const slideIds = allDescendantsNs(presentationDoc, P_NS, 'sldId');\n const slides: PptSlideInternal[] = [];\n\n for (let index = 0; index < slideIds.length; index++) {\n const slideIdEl = slideIds[index]!;\n const relId = slideIdEl.getAttributeNS(R_NS, 'id') ?? slideIdEl.getAttribute('r:id');\n if (!relId) continue;\n const rel = presentationRels.get(relId);\n if (!rel || rel.type !== SLIDE_REL_TYPE) continue;\n const slidePath = resolveRelationshipTarget(presentationPath, rel.target);\n const slidePart = requireXmlPart(pkg, slidePath);\n const slideRels = parseRelationships(getPart(pkg, relsPathForPart(slidePath)));\n const slideModel: PptSlideModel = {\n id: slideIdEl.getAttribute('id') ?? relId,\n index,\n relationshipId: relId,\n path: slidePath,\n shapes: [],\n };\n const slide: PptSlideInternal = {\n model: slideModel,\n part: slidePart,\n relationships: slideRels,\n shapes: [],\n };\n slide.model.layout = parseSlideLayout(pkg, slidePath, slideRels);\n const slideContext = contextFromTheme(slide.model.layout?.master?.theme);\n slide.shapes = parseSlideShapes(pkg, slide, slideContext);\n slide.model.shapes = slide.shapes.map((shape) => shape.model);\n slide.model.title = deriveSlideTitle(slide.model.shapes);\n slide.model.background = parseSlideBackground(\n slidePart.xmlDom!,\n contextWithRelationships(slideContext, slidePath, slideRels),\n );\n slide.model.layoutId = slide.model.layout?.relationshipId;\n slide.model.notes = parseSlideNotes(pkg, slidePath, slideRels);\n slide.model.comments = parseSlideComments(pkg, slidePath, slideRels, commentAuthors);\n slide.model.transition = parseSlideTransition(slidePart.xmlDom!);\n slide.model.timing = parseSlideTiming(slidePart.xmlDom!);\n slides.push(slide);\n }\n\n const model: PptPresentationModel = {\n id: presentationId,\n slideSize,\n slides: slides.map((slide) => slide.model),\n media: listMedia(pkg),\n fonts: listEmbeddedFonts(pkg, presentationPath, presentationDoc, presentationRels),\n themes: collectThemes(pkg, presentationPath, presentationRels, slides),\n };\n return { model, presentationPart, slides };\n}\n\nfunction findPresentationPath(pkg: Package): string {\n const rootRels = parseRelationships(getPart(pkg, '_rels/.rels'));\n for (const rel of rootRels.values()) {\n if (rel.type === PRESENTATION_REL_TYPE) {\n return rel.target.startsWith('/') ? rel.target.slice(1) : rel.target;\n }\n }\n if (getPart(pkg, 'ppt/presentation.xml')) return 'ppt/presentation.xml';\n throw new Error('Presentation: missing ppt/presentation.xml');\n}\n\nfunction requireXmlPart(pkg: Package, path: string): Part {\n const part = getPart(pkg, path);\n if (!part?.xmlDom) throw new Error(`Presentation: missing XML part ${path}`);\n return part;\n}\n\nfunction contextFromTheme(theme: PptThemeModel | undefined): PptParseContext {\n return {\n colorScheme: theme?.colorScheme,\n fontScheme: theme?.fontScheme,\n };\n}\n\nfunction contextWithRelationships(\n context: PptParseContext,\n sourcePath: string,\n relationships: Map<string, PptRelationship>,\n): PptParseContext {\n return {\n ...context,\n sourcePath,\n relationships,\n };\n}\n\nfunction parseSlideSize(presentationEl: Element): { width: number; height: number } | undefined {\n const sldSz = firstChildNs(presentationEl, P_NS, 'sldSz');\n const width = parseNumber(sldSz?.getAttribute('cx') ?? null);\n const height = parseNumber(sldSz?.getAttribute('cy') ?? null);\n return width !== undefined && height !== undefined ? { width, height } : undefined;\n}\n\nfunction parseSlideLayout(\n pkg: Package,\n slidePath: string,\n slideRels: Map<string, PptRelationship>,\n): PptSlideLayoutModel | undefined {\n const rel = Array.from(slideRels.values()).find((item) => item.type === SLIDE_LAYOUT_REL_TYPE);\n if (!rel) return undefined;\n const path = resolveRelationshipTarget(slidePath, rel.target);\n const part = getPart(pkg, path);\n const model: PptSlideLayoutModel = {\n relationshipId: rel.id,\n path,\n };\n if (part?.xmlDom) {\n const cSld = allDescendantsNs(part.xmlDom, P_NS, 'cSld')[0];\n const name = cSld?.getAttribute('name') ?? undefined;\n if (name) model.name = name;\n const layoutRels = parseRelationships(getPart(pkg, relsPathForPart(path)));\n model.master = parseSlideMaster(pkg, path, layoutRels);\n const context = contextFromTheme(model.master?.theme);\n model.background = parseSlideBackground(\n part.xmlDom,\n contextWithRelationships(context, path, layoutRels),\n );\n const layoutShapes = parsePartShapes(\n pkg,\n {\n model: { id: model.relationshipId ?? path, index: 0, path, shapes: [] },\n part,\n relationships: layoutRels,\n shapes: [],\n },\n context,\n );\n if (layoutShapes.length > 0) model.shapes = layoutShapes.map((shape) => shape.model);\n }\n return model;\n}\n\nfunction parseSlideMaster(\n pkg: Package,\n layoutPath: string,\n layoutRels: Map<string, PptRelationship>,\n): PptSlideMasterModel | undefined {\n const rel = Array.from(layoutRels.values()).find((item) => item.type === SLIDE_MASTER_REL_TYPE);\n if (!rel) return undefined;\n const path = resolveRelationshipTarget(layoutPath, rel.target);\n const part = getPart(pkg, path);\n const model: PptSlideMasterModel = {\n relationshipId: rel.id,\n path,\n };\n if (part?.xmlDom) {\n const cSld = allDescendantsNs(part.xmlDom, P_NS, 'cSld')[0];\n const name = cSld?.getAttribute('name') ?? undefined;\n if (name) model.name = name;\n const masterRels = parseRelationships(getPart(pkg, relsPathForPart(path)));\n const themeRel = Array.from(masterRels.values()).find((item) => item.type === THEME_REL_TYPE);\n if (themeRel) model.theme = parseTheme(pkg, path, themeRel);\n const context = contextFromTheme(model.theme);\n model.background = parseSlideBackground(\n part.xmlDom,\n contextWithRelationships(context, path, masterRels),\n );\n const masterShapes = parsePartShapes(\n pkg,\n {\n model: { id: model.relationshipId ?? path, index: 0, path, shapes: [] },\n part,\n relationships: masterRels,\n shapes: [],\n },\n context,\n );\n if (masterShapes.length > 0) model.shapes = masterShapes.map((shape) => shape.model);\n }\n return model;\n}\n\nfunction collectThemes(\n pkg: Package,\n presentationPath: string,\n presentationRels: Map<string, PptRelationship>,\n slides: PptSlideInternal[],\n): PptThemeModel[] | undefined {\n const byPath = new Map<string, PptThemeModel>();\n for (const rel of presentationRels.values()) {\n if (rel.type !== THEME_REL_TYPE) continue;\n const theme = parseTheme(pkg, presentationPath, rel);\n if (theme.path) byPath.set(theme.path, theme);\n }\n for (const slide of slides) {\n const theme = slide.model.layout?.master?.theme;\n if (theme?.path) byPath.set(theme.path, theme);\n }\n return byPath.size > 0 ? Array.from(byPath.values()) : undefined;\n}\n\nfunction parseTheme(pkg: Package, sourcePath: string, rel: PptRelationship): PptThemeModel {\n const path = resolveRelationshipTarget(sourcePath, rel.target);\n const part = getPart(pkg, path);\n const model: PptThemeModel = {\n relationshipId: rel.id,\n path,\n };\n if (!part?.xmlDom) return model;\n const theme = allDescendantsNs(part.xmlDom, A_NS, 'theme')[0];\n const name = theme?.getAttribute('name') ?? undefined;\n if (name) model.name = name;\n const colorScheme = parseThemeColorScheme(part.xmlDom);\n if (Object.keys(colorScheme).length > 0) model.colorScheme = colorScheme;\n const fontScheme = parseThemeFontScheme(part.xmlDom);\n if (Object.keys(fontScheme).length > 0) model.fontScheme = fontScheme;\n return model;\n}\n\nfunction parseThemeColorScheme(doc: Document): Record<string, string> {\n const scheme = allDescendantsNs(doc, A_NS, 'clrScheme')[0];\n if (!scheme) return {};\n const result: Record<string, string> = {};\n for (let i = 0; i < scheme.childNodes.length; i++) {\n const child = scheme.childNodes[i];\n if (child?.nodeType !== 1) continue;\n const item = child as Element;\n const color =\n allDescendantsNs(item, A_NS, 'srgbClr')[0]?.getAttribute('val') ??\n allDescendantsNs(item, A_NS, 'sysClr')[0]?.getAttribute('lastClr');\n if (color) result[item.localName] = `#${color.toUpperCase()}`;\n }\n return result;\n}\n\nfunction parseThemeFontScheme(doc: Document): NonNullable<PptThemeModel['fontScheme']> {\n const scheme = allDescendantsNs(doc, A_NS, 'fontScheme')[0];\n if (!scheme) return {};\n const majorFont = firstChildNs(scheme, A_NS, 'majorFont');\n const minorFont = firstChildNs(scheme, A_NS, 'minorFont');\n return {\n ...(scheme.getAttribute('name') ? { name: scheme.getAttribute('name')! } : {}),\n ...(majorFont\n ? {\n majorLatin: firstChildNs(majorFont, A_NS, 'latin')?.getAttribute('typeface') ?? undefined,\n majorEa: firstChildNs(majorFont, A_NS, 'ea')?.getAttribute('typeface') ?? undefined,\n majorCs: firstChildNs(majorFont, A_NS, 'cs')?.getAttribute('typeface') ?? undefined,\n }\n : {}),\n ...(minorFont\n ? {\n minorLatin: firstChildNs(minorFont, A_NS, 'latin')?.getAttribute('typeface') ?? undefined,\n minorEa: firstChildNs(minorFont, A_NS, 'ea')?.getAttribute('typeface') ?? undefined,\n minorCs: firstChildNs(minorFont, A_NS, 'cs')?.getAttribute('typeface') ?? undefined,\n }\n : {}),\n };\n}\n\nfunction parseSlideNotes(\n pkg: Package,\n slidePath: string,\n slideRels: Map<string, PptRelationship>,\n): PptSlideModel['notes'] | undefined {\n const rel = Array.from(slideRels.values()).find((item) => item.type === NOTES_SLIDE_REL_TYPE);\n if (!rel) return undefined;\n const part = getPart(pkg, resolveRelationshipTarget(slidePath, rel.target));\n if (!part?.xmlDom) return undefined;\n const text = allDescendantsNs(part.xmlDom, A_NS, 't').map(textOf).join('');\n return { text };\n}\n\ninterface PptCommentAuthorInfo {\n name?: string;\n initials?: string;\n}\n\nfunction parseCommentAuthors(\n pkg: Package,\n presentationPath: string,\n presentationRels: Map<string, PptRelationship>,\n): Map<string, PptCommentAuthorInfo> {\n const result = new Map<string, PptCommentAuthorInfo>();\n const rel = Array.from(presentationRels.values()).find(\n (item) => item.type === COMMENT_AUTHORS_REL_TYPE,\n );\n const authorPath = rel\n ? resolveRelationshipTarget(presentationPath, rel.target)\n : 'ppt/commentAuthors.xml';\n const part = getPart(pkg, authorPath);\n if (!part?.xmlDom) return result;\n for (const author of allDescendantsNs(part.xmlDom, P_NS, 'cmAuthor')) {\n const id = author.getAttribute('id');\n if (!id) continue;\n result.set(id, {\n name: author.getAttribute('name') ?? undefined,\n initials: author.getAttribute('initials') ?? undefined,\n });\n }\n return result;\n}\n\nfunction parseSlideComments(\n pkg: Package,\n slidePath: string,\n slideRels: Map<string, PptRelationship>,\n authors: Map<string, PptCommentAuthorInfo>,\n): PptCommentModel[] | undefined {\n const rel = Array.from(slideRels.values()).find((item) => item.type === COMMENTS_REL_TYPE);\n if (!rel) return undefined;\n const part = getPart(pkg, resolveRelationshipTarget(slidePath, rel.target));\n if (!part?.xmlDom) return undefined;\n const comments = allDescendantsNs(part.xmlDom, P_NS, 'cm').map((comment): PptCommentModel => {\n const authorId = comment.getAttribute('authorId') ?? undefined;\n const author = authorId ? authors.get(authorId) : undefined;\n const pos = firstChildNs(comment, P_NS, 'pos');\n const x = parseNumber(pos?.getAttribute('x') ?? null);\n const y = parseNumber(pos?.getAttribute('y') ?? null);\n return {\n ...(comment.getAttribute('idx') ? { id: comment.getAttribute('idx')! } : {}),\n ...(authorId ? { authorId } : {}),\n ...(author?.name ? { author: author.name } : {}),\n ...(author?.initials ? { initials: author.initials } : {}),\n ...(comment.getAttribute('dt') ? { date: comment.getAttribute('dt')! } : {}),\n text: textOf(firstChildNs(comment, P_NS, 'text')),\n ...(x !== undefined ? { x } : {}),\n ...(y !== undefined ? { y } : {}),\n };\n });\n return comments.length > 0 ? comments : undefined;\n}\n\nfunction parseSlideTransition(doc: Document): PptSlideTransitionModel | undefined {\n const transition =\n firstChildNs(doc.documentElement, P_NS, 'transition') ??\n firstChildLocal(doc.documentElement, 'transition') ??\n allDescendantsLocal(doc, 'transition')[0];\n if (!transition) return undefined;\n const model: PptSlideTransitionModel = {};\n const attributes = attributesOf(transition);\n if (Object.keys(attributes).length > 0) model.attributes = attributes;\n const speed = transition.getAttribute('spd') ?? undefined;\n const duration =\n parseNumber(transition.getAttribute('dur')) ??\n parseNumber(transition.getAttribute('p14:dur')) ??\n parseNumber(\n transition.getAttributeNS('http://schemas.microsoft.com/office/powerpoint/2010/main', 'dur'),\n );\n const advanceOnClick = parseBooleanAttr(transition.getAttribute('advClick'));\n const advanceAfterTime = parseNumber(transition.getAttribute('advTm'));\n const transitionType = firstTransitionChildName(transition);\n if (speed) model.speed = speed;\n if (duration !== undefined) model.duration = duration;\n if (advanceOnClick !== undefined) model.advanceOnClick = advanceOnClick;\n if (advanceAfterTime !== undefined) model.advanceAfterTime = advanceAfterTime;\n if (transitionType) model.type = transitionType;\n return model;\n}\n\nfunction parseSlideTiming(doc: Document): PptSlideTimingModel | undefined {\n const timing =\n firstChildNs(doc.documentElement, P_NS, 'timing') ??\n firstChildLocal(doc.documentElement, 'timing') ??\n allDescendantsLocal(doc, 'timing')[0];\n if (!timing) return undefined;\n const timeNodes = allDescendantsLocal(timing, 'cTn');\n const sequences = allDescendantsLocal(timing, 'seq');\n const root = timeNodes.find((node) => node.getAttribute('nodeType') === 'tmRoot') ?? timeNodes[0];\n const model: PptSlideTimingModel = {\n hasTiming: true,\n timeNodeCount: timeNodes.length,\n mainSequenceCount: sequences.filter((seq) => seq.getAttribute('nodeType') === 'mainSeq').length,\n interactiveSequenceCount: sequences.filter(\n (seq) => seq.getAttribute('nodeType') === 'interactiveSeq',\n ).length,\n };\n const rootDuration = root?.getAttribute('dur') ?? undefined;\n const rootNodeType = root?.getAttribute('nodeType') ?? undefined;\n if (rootDuration) model.rootDuration = rootDuration;\n if (rootNodeType) model.rootNodeType = rootNodeType;\n return model;\n}\n\nfunction firstTransitionChildName(transition: Element): string | undefined {\n for (let i = 0; i < transition.childNodes.length; i++) {\n const child = transition.childNodes[i];\n if (child?.nodeType !== 1) continue;\n const element = child as Element;\n if (element.localName === 'sndAc' || element.localName === 'extLst') continue;\n return element.localName;\n }\n return undefined;\n}\n\nfunction attributesOf(element: Element): Record<string, string> {\n const result: Record<string, string> = {};\n for (let i = 0; i < element.attributes.length; i++) {\n const attr = element.attributes[i];\n if (!attr) continue;\n result[attr.name] = attr.value;\n }\n return result;\n}\n\nfunction parseSlideShapes(\n pkg: Package,\n slide: PptSlideInternal,\n context: PptParseContext = {},\n): PptShapeInternal[] {\n return parsePartShapes(pkg, slide, context);\n}\n\nfunction parsePartShapes(\n pkg: Package,\n slide: PptSlideInternal,\n context: PptParseContext = {},\n): PptShapeInternal[] {\n const spTree = allDescendantsNs(slide.part.xmlDom!, P_NS, 'spTree')[0];\n if (!spTree) return [];\n return parseShapeChildren(pkg, slide, spTree, context);\n}\n\nfunction parseShapeChildren(\n pkg: Package,\n slide: PptSlideInternal,\n parent: Element,\n context: PptParseContext = {},\n): PptShapeInternal[] {\n const result: PptShapeInternal[] = [];\n for (let i = 0; i < parent.childNodes.length; i++) {\n const child = parent.childNodes[i];\n if (child?.nodeType !== 1) continue;\n const element = child as Element;\n if (element.namespaceURI !== P_NS) continue;\n if (element.localName === 'sp')\n result.push(parseShapeElement(pkg, slide, element, 'sp', context));\n else if (element.localName === 'pic')\n result.push(parseShapeElement(pkg, slide, element, 'pic', context));\n else if (element.localName === 'graphicFrame')\n result.push(parseShapeElement(pkg, slide, element, 'graphicFrame', context));\n else if (element.localName === 'grpSp')\n result.push(parseShapeElement(pkg, slide, element, 'grpSp', context));\n else if (element.localName === 'cxnSp' && isRenderableConnectorElement(element))\n result.push(parseShapeElement(pkg, slide, element, 'sp', context));\n }\n return result;\n}\n\nfunction isRenderableConnectorElement(element: Element): boolean {\n const spPr = firstChildNs(element, P_NS, 'spPr');\n const xfrm = spPr ? firstChildNs(spPr, A_NS, 'xfrm') : null;\n const ext = xfrm ? firstChildNs(xfrm, A_NS, 'ext') : null;\n const width = parseNumber(ext?.getAttribute('cx') ?? null) ?? 0;\n const height = parseNumber(ext?.getAttribute('cy') ?? null) ?? 0;\n const preset = parsePresetGeometry(element);\n const line = spPr ? firstChildNs(spPr, A_NS, 'ln') : null;\n const hasNoFill = !!(line && firstChildNs(line, A_NS, 'noFill'));\n const hasLineFill = !!(\n line &&\n (firstChildNs(line, A_NS, 'solidFill') || firstChildNs(line, A_NS, 'gradFill'))\n );\n const min = Math.min(width, height);\n const max = Math.max(width, height);\n const isAxisAligned = min === 0 || (max > 0 && min / max < 0.02);\n return (\n (preset === 'straightConnector1' || preset === 'line') &&\n isAxisAligned &&\n hasLineFill &&\n !hasNoFill\n );\n}\n\nfunction parseShapeElement(\n pkg: Package,\n slide: PptSlideInternal,\n element: Element,\n hostType: 'sp' | 'pic' | 'graphicFrame' | 'grpSp',\n context: PptParseContext = {},\n): PptShapeInternal {\n const cNvPr = allDescendantsNs(element, P_NS, 'cNvPr')[0];\n const id = cNvPr?.getAttribute('id') ?? `${slide.model.id}:${slide.shapes.length}`;\n const name = cNvPr?.getAttribute('name') ?? undefined;\n const children = hostType === 'grpSp' ? parseShapeChildren(pkg, slide, element, context) : [];\n const textElements = hostType === 'grpSp' ? [] : allDescendantsNs(element, A_NS, 't');\n const tableCells = hostType === 'grpSp' ? [] : parseTableCells(element);\n const table =\n tableCells.length > 0 ? tableModelFromCells(element, tableCells, context) : undefined;\n const image = imageModelFromElement(slide, element);\n const chart = parseChartModel(pkg, slide, element, context);\n const media = parseMediaModel(pkg, slide, element);\n const oleObject = parseOleObjectModel(slide, element);\n const smartArt = parseSmartArtModel(slide, element);\n const kind = classifyShape(slide, element, hostType, textElements, {\n table,\n image,\n chart,\n media,\n oleObject,\n smartArt,\n });\n const textStyle = parseTextStyle(element, context);\n const textParagraphs =\n textElements.length > 0 ? parseTextParagraphs(slide, element, context) : undefined;\n const text =\n textElements.length > 0\n ? {\n text: textParagraphsToPlainText(textParagraphs ?? []),\n paragraphs: textParagraphs ?? [],\n ...(Object.keys(textStyle).length > 0 ? { style: textStyle } : {}),\n ...(parseTextBodyProperties(element) ? { body: parseTextBodyProperties(element) } : {}),\n }\n : undefined;\n const style = parseShapeStyle(element, context, {\n useStyleFillRef: !image && hostType !== 'pic',\n });\n const hyperlink = parseShapeHyperlink(slide, cNvPr);\n const placeholder = parsePlaceholder(element);\n const shapeProperties = firstChildNs(element, P_NS, 'spPr') ?? firstChildNs(element, P_NS, 'grpSpPr');\n const model: PptShapeModel = {\n id,\n kind,\n geometry: parseGeometry(element),\n raw: {\n slidePath: slide.model.path,\n relationshipId: image?.relationshipId,\n hostType,\n presetGeometry: parsePresetGeometry(element),\n presetAdjustments: parsePresetGeometryAdjustments(element),\n customGeometry: parseCustomGeometry(element),\n threeD: shapeProperties ? parseShape3d(shapeProperties) : undefined,\n groupTransform: hostType === 'grpSp' ? parseGroupTransform(element) : undefined,\n useBackgroundFill: parseBooleanAttr(element.getAttribute('useBgFill')) === true,\n },\n };\n if (name) model.name = name;\n if (Object.keys(style).length > 0) model.style = style;\n if (text) model.text = text;\n if (image) model.image = image;\n if (chart) model.chart = chart;\n if (media) model.media = media;\n if (oleObject) model.oleObject = oleObject;\n if (smartArt) model.smartArt = smartArt;\n if (table) model.table = table;\n if (placeholder) model.placeholder = placeholder;\n if (hyperlink) model.hyperlink = hyperlink;\n if (children.length > 0)\n model.children = children.map((child) => inheritGroupFill(child.model, child.element, style));\n return { slide, model, element, textElements, tableCells, children };\n}\n\nfunction parseShapeStyle(\n element: Element,\n context: PptParseContext = {},\n options: { useStyleFillRef?: boolean } = {},\n): PptShapeStyle {\n const spPr = firstChildNs(element, P_NS, 'spPr') ?? firstChildNs(element, P_NS, 'grpSpPr');\n if (!spPr) return {};\n const solidFill = parseSolidFill(firstChildNs(spPr, A_NS, 'solidFill'), context);\n const fillGradient = parseGradientFill(firstChildNs(spPr, A_NS, 'gradFill'), context);\n const styleFillColor =\n !options.useStyleFillRef ||\n solidFill.color ||\n fillGradient ||\n firstChildNs(spPr, A_NS, 'noFill')\n ? undefined\n : colorFromStyleFillRef(element, context);\n const ln = firstChildNs(spPr, A_NS, 'ln');\n const lineFill = ln ? parseSolidFill(firstChildNs(ln, A_NS, 'solidFill'), context) : {};\n const lineGradient = ln\n ? parseGradientFill(firstChildNs(ln, A_NS, 'gradFill'), context)\n : undefined;\n const lineColor = lineFill.color;\n const lineWidth = parseNumber(ln?.getAttribute('w') ?? null);\n const lineCap = ln?.getAttribute('cap') ?? undefined;\n const lineDash = ln ? parseLineDash(ln) : undefined;\n const lineHeadEnd = ln\n ? (firstChildNs(ln, A_NS, 'headEnd')?.getAttribute('type') ?? undefined)\n : undefined;\n const lineTailEnd = ln\n ? (firstChildNs(ln, A_NS, 'tailEnd')?.getAttribute('type') ?? undefined)\n : undefined;\n const shadow = parseShapeShadow(spPr, context);\n return {\n ...((solidFill.color ?? styleFillColor)\n ? { fillColor: solidFill.color ?? styleFillColor }\n : {}),\n ...(fillGradient ? { fillGradient } : {}),\n ...(solidFill.opacity !== undefined ? { opacity: solidFill.opacity } : {}),\n ...(lineColor ? { lineColor } : {}),\n ...(lineGradient ? { lineGradient } : {}),\n ...(lineFill.opacity !== undefined ? { lineOpacity: lineFill.opacity } : {}),\n ...(lineWidth !== undefined ? { lineWidth } : {}),\n ...(lineCap ? { lineCap } : {}),\n ...(lineDash && lineDash !== 'solid' ? { lineDash } : {}),\n ...(lineHeadEnd ? { lineHeadEnd } : {}),\n ...(lineTailEnd ? { lineTailEnd } : {}),\n ...(shadow ? { shadow } : {}),\n };\n}\n\nfunction inheritGroupFill(\n model: PptShapeModel,\n element: Element,\n groupStyle: PptShapeStyle,\n): PptShapeModel {\n if (!groupStyle.fillColor && !groupStyle.fillGradient && groupStyle.opacity === undefined)\n return model;\n const spPr = firstChildNs(element, P_NS, 'spPr');\n if (!spPr || !firstChildNs(spPr, A_NS, 'grpFill')) return model;\n const style = {\n ...model.style,\n ...(model.style?.fillColor || !groupStyle.fillColor ? {} : { fillColor: groupStyle.fillColor }),\n ...(model.style?.fillGradient || !groupStyle.fillGradient\n ? {}\n : { fillGradient: groupStyle.fillGradient }),\n ...(model.style?.opacity !== undefined || groupStyle.opacity === undefined\n ? {}\n : { opacity: groupStyle.opacity }),\n };\n return {\n ...model,\n style,\n };\n}\n\nfunction colorFromStyleFillRef(\n element: Element,\n context: PptParseContext = {},\n): string | undefined {\n const style = firstChildNs(element, P_NS, 'style');\n const fillRef = style ? firstChildNs(style, A_NS, 'fillRef') : null;\n if (!fillRef) return undefined;\n return (\n colorFromColorElement(firstChildNs(fillRef, A_NS, 'srgbClr'), context) ??\n colorFromColorElement(firstChildNs(fillRef, A_NS, 'schemeClr'), context) ??\n colorFromColorElement(firstChildNs(fillRef, A_NS, 'sysClr'), context) ??\n colorFromColorElement(firstChildNs(fillRef, A_NS, 'prstClr'), context)\n );\n}\n\nfunction parseLineDash(line: Element): string | undefined {\n const preset = firstChildNs(line, A_NS, 'prstDash')?.getAttribute('val') ?? undefined;\n if (preset) return preset;\n const customDash = firstChildNs(line, A_NS, 'custDash');\n const firstDash = customDash ? firstChildNs(customDash, A_NS, 'ds') : undefined;\n const dash = parseNumber(firstDash?.getAttribute('d') ?? null);\n const space = parseNumber(firstDash?.getAttribute('sp') ?? null);\n if (dash === undefined || space === undefined || dash <= 0 || space < 0) return undefined;\n return `cust:${Math.round(dash)}:${Math.round(space)}`;\n}\n\nfunction colorFromStyleFontRef(\n element: Element,\n context: PptParseContext = {},\n): string | undefined {\n const style = firstChildNs(element, P_NS, 'style');\n const fontRef = style ? firstChildNs(style, A_NS, 'fontRef') : null;\n if (!fontRef) return undefined;\n return (\n colorFromColorElement(firstChildNs(fontRef, A_NS, 'srgbClr'), context) ??\n colorFromColorElement(firstChildNs(fontRef, A_NS, 'schemeClr'), context) ??\n colorFromColorElement(firstChildNs(fontRef, A_NS, 'sysClr'), context) ??\n colorFromColorElement(firstChildNs(fontRef, A_NS, 'prstClr'), context)\n );\n}\n\nfunction parseShapeShadow(\n spPr: Element,\n context: PptParseContext = {},\n): PptShapeStyle['shadow'] | undefined {\n return parseOuterShadow(firstChildNs(spPr, A_NS, 'effectLst'), context);\n}\n\nfunction parseShape3d(spPr: Element): NonNullable<PptShapeModel['raw']>['threeD'] | undefined {\n const sp3d = firstChildNs(spPr, A_NS, 'sp3d');\n if (!sp3d) return undefined;\n const material = sp3d.getAttribute('prstMaterial') ?? undefined;\n const extrusionHeight = parseNumber(sp3d.getAttribute('extrusionH'));\n return {\n ...(material ? { material } : {}),\n ...(extrusionHeight !== undefined ? { extrusionHeight } : {}),\n };\n}\n\nfunction firstTextShadow(\n elements: Element[],\n context: PptParseContext = {},\n): PptShadowModel | undefined {\n for (const element of elements) {\n const shadow = parseOuterShadow(firstChildNs(element, A_NS, 'effectLst'), context);\n if (shadow) return shadow;\n }\n return undefined;\n}\n\nfunction parseOuterShadow(\n effectList: Element | null | undefined,\n context: PptParseContext = {},\n): PptShadowModel | undefined {\n const shadow = effectList ? firstChildNs(effectList, A_NS, 'outerShdw') : undefined;\n if (!shadow) return undefined;\n const colorElement =\n firstChildNs(shadow, A_NS, 'srgbClr') ??\n firstChildNs(shadow, A_NS, 'schemeClr') ??\n firstChildNs(shadow, A_NS, 'sysClr') ??\n firstChildNs(shadow, A_NS, 'prstClr');\n const color = colorFromColorElement(colorElement, context);\n const opacity = colorElement\n ? parseNumber(firstChildNs(colorElement, A_NS, 'alpha')?.getAttribute('val') ?? null)\n : undefined;\n const blur = parseNumber(shadow.getAttribute('blurRad'));\n const distance = parseNumber(shadow.getAttribute('dist'));\n const direction = parseNumber(shadow.getAttribute('dir'));\n return {\n ...(color ? { color } : {}),\n ...(opacity !== undefined ? { opacity: opacity / 100000 } : {}),\n ...(blur !== undefined ? { blur } : {}),\n ...(distance !== undefined ? { distance } : {}),\n ...(direction !== undefined ? { direction: direction / 60000 } : {}),\n };\n}\n\nfunction parseSlideBackground(\n doc: Document,\n context: PptParseContext = {},\n): PptSlideBackgroundModel | undefined {\n const cSld = allDescendantsNs(doc, P_NS, 'cSld')[0];\n const bg = cSld ? firstChildNs(cSld, P_NS, 'bg') : undefined;\n const bgPr = bg ? firstChildNs(bg, P_NS, 'bgPr') : undefined;\n if (!bgPr) return undefined;\n const solidFill = parseSolidFill(firstChildNs(bgPr, A_NS, 'solidFill'), context);\n const fillGradient = parseGradientFill(firstChildNs(bgPr, A_NS, 'gradFill'), context);\n const imagePath = parseBackgroundImagePath(bgPr, context);\n const background = {\n ...(solidFill.color ? { fillColor: solidFill.color } : {}),\n ...(fillGradient ? { fillGradient } : {}),\n ...(imagePath ? { imagePath } : {}),\n };\n return Object.keys(background).length > 0 ? background : undefined;\n}\n\nfunction parseBackgroundImagePath(\n bgPr: Element,\n context: PptParseContext = {},\n): string | undefined {\n const blip = allDescendantsNs(bgPr, A_NS, 'blip')[0];\n const relId = blip?.getAttributeNS(R_NS, 'embed') ?? blip?.getAttribute('r:embed');\n if (!relId || !context.relationships || !context.sourcePath) return undefined;\n const rel = context.relationships.get(relId);\n if (!rel || rel.type !== IMAGE_REL_TYPE) return undefined;\n return resolveRelationshipTarget(context.sourcePath, rel.target);\n}\n\nfunction parsePresetGeometry(element: Element): string | undefined {\n const spPr = allDescendantsNs(element, P_NS, 'spPr')[0];\n if (!spPr) return undefined;\n return firstChildNs(spPr, A_NS, 'prstGeom')?.getAttribute('prst') ?? undefined;\n}\n\nfunction parsePresetGeometryAdjustments(element: Element): Record<string, number> | undefined {\n const spPr = allDescendantsNs(element, P_NS, 'spPr')[0];\n const presetGeometry = spPr ? firstChildNs(spPr, A_NS, 'prstGeom') : undefined;\n const adjustmentList = presetGeometry ? firstChildNs(presetGeometry, A_NS, 'avLst') : undefined;\n if (!adjustmentList) return undefined;\n const adjustments: Record<string, number> = {};\n for (const guide of childElementsNs(adjustmentList, A_NS, 'gd')) {\n const name = guide.getAttribute('name');\n const match = /^val\\s+(-?\\d+(?:\\.\\d+)?)$/i.exec(guide.getAttribute('fmla') ?? '');\n if (!name || !match) continue;\n adjustments[name] = Number(match[1]);\n }\n return Object.keys(adjustments).length > 0 ? adjustments : undefined;\n}\n\nfunction parseCustomGeometry(element: Element): PptCustomGeometryModel | undefined {\n const spPr = allDescendantsNs(element, P_NS, 'spPr')[0];\n const customGeometry = spPr ? firstChildNs(spPr, A_NS, 'custGeom') : undefined;\n const pathList = customGeometry ? firstChildNs(customGeometry, A_NS, 'pathLst') : undefined;\n if (!customGeometry || !pathList) return undefined;\n const paths = childElementsNs(pathList, A_NS, 'path')\n .map((path) => parseCustomGeometryPath(path, customGeometry))\n .filter((path) => path.commands.length > 0);\n return paths.length > 0 ? { paths } : undefined;\n}\n\nfunction parseCustomGeometryPath(\n path: Element,\n customGeometry: Element,\n): PptCustomGeometryModel['paths'][number] {\n const width = parseNumber(path.getAttribute('w') ?? null);\n const height = parseNumber(path.getAttribute('h') ?? null);\n const guides = parseCustomGeometryGuides(customGeometry, width, height);\n const commands: PptCustomGeometryCommand[] = [];\n for (let i = 0; i < path.childNodes.length; i++) {\n const child = path.childNodes[i];\n if (child?.nodeType !== 1) continue;\n const command = child as Element;\n if (command.namespaceURI !== A_NS) continue;\n if (command.localName === 'moveTo' || command.localName === 'lnTo') {\n const point = parseCustomGeometryPoint(firstChildNs(command, A_NS, 'pt'), guides);\n if (!point) continue;\n commands.push({ kind: command.localName === 'moveTo' ? 'moveTo' : 'lineTo', ...point });\n } else if (command.localName === 'cubicBezTo') {\n const points = childElementsNs(command, A_NS, 'pt')\n .map((point) => parseCustomGeometryPoint(point, guides))\n .filter((point): point is { x: number; y: number } => Boolean(point));\n if (points.length !== 3) continue;\n commands.push({\n kind: 'cubicBezierTo',\n x1: points[0]!.x,\n y1: points[0]!.y,\n x2: points[1]!.x,\n y2: points[1]!.y,\n x: points[2]!.x,\n y: points[2]!.y,\n });\n } else if (command.localName === 'arcTo') {\n const arc = parseCustomGeometryArc(command, guides);\n if (arc) commands.push(arc);\n } else if (command.localName === 'close') {\n commands.push({ kind: 'close' });\n }\n }\n return {\n ...(width !== undefined ? { width } : {}),\n ...(height !== undefined ? { height } : {}),\n commands,\n };\n}\n\nfunction parseCustomGeometryArc(\n command: Element,\n guides: Record<string, number>,\n): Extract<PptCustomGeometryCommand, { kind: 'arcTo' }> | undefined {\n const wR = customGeometryNumber(command.getAttribute('wR'), undefined, undefined, guides);\n const hR = customGeometryNumber(command.getAttribute('hR'), undefined, undefined, guides);\n const stAng = customGeometryNumber(command.getAttribute('stAng'), undefined, undefined, guides);\n const swAng = customGeometryNumber(command.getAttribute('swAng'), undefined, undefined, guides);\n if (wR === undefined || hR === undefined || stAng === undefined || swAng === undefined)\n return undefined;\n return {\n kind: 'arcTo',\n wR,\n hR,\n stAng,\n swAng,\n };\n}\n\nfunction parseCustomGeometryGuides(\n customGeometry: Element,\n width: number | undefined,\n height: number | undefined,\n): Record<string, number> {\n const guides: Record<string, number> = {};\n const guideList = firstChildNs(customGeometry, A_NS, 'gdLst');\n if (!guideList) return guides;\n for (const guide of childElementsNs(guideList, A_NS, 'gd')) {\n const name = guide.getAttribute('name');\n const value = evaluateCustomGeometryFormula(guide.getAttribute('fmla'), width, height, guides);\n if (name && value !== undefined) guides[name] = value;\n }\n return guides;\n}\n\nfunction evaluateCustomGeometryFormula(\n formula: string | null,\n width: number | undefined,\n height: number | undefined,\n guides: Record<string, number>,\n): number | undefined {\n if (!formula) return undefined;\n const parts = formula.trim().split(/\\s+/);\n if (parts[0] === 'val') return customGeometryNumber(parts[1], width, height, guides);\n if (parts[0] === '*/') {\n const a = customGeometryNumber(parts[1], width, height, guides);\n const b = customGeometryNumber(parts[2], width, height, guides);\n const c = customGeometryNumber(parts[3], width, height, guides);\n if (a === undefined || b === undefined || !c) return undefined;\n return (a * b) / c;\n }\n return undefined;\n}\n\nfunction parseCustomGeometryPoint(\n point: Element | null,\n guides: Record<string, number>,\n): { x: number; y: number } | undefined {\n if (!point) return undefined;\n const x = customGeometryNumber(point.getAttribute('x'), undefined, undefined, guides);\n const y = customGeometryNumber(point.getAttribute('y'), undefined, undefined, guides);\n return x === undefined || y === undefined ? undefined : { x, y };\n}\n\nfunction customGeometryNumber(\n value: string | undefined | null,\n width: number | undefined,\n height: number | undefined,\n guides: Record<string, number>,\n): number | undefined {\n if (!value) return undefined;\n if (value === 'w') return width;\n if (value === 'h') return height;\n if (guides[value] !== undefined) return guides[value];\n return parseNumber(value);\n}\n\nfunction parsePlaceholder(element: Element): PptShapeModel['placeholder'] | undefined {\n const ph = allDescendantsNs(element, P_NS, 'ph')[0];\n if (!ph) return undefined;\n const type = ph.getAttribute('type') ?? undefined;\n const index = ph.getAttribute('idx') ?? undefined;\n const size = ph.getAttribute('sz') ?? undefined;\n const orientation = ph.getAttribute('orient') ?? undefined;\n return {\n ...(type ? { type } : {}),\n ...(index ? { index } : {}),\n ...(size ? { size } : {}),\n ...(orientation ? { orientation } : {}),\n };\n}\n\nfunction parseTextStyle(element: Element, context: PptParseContext = {}): PptTextStyle {\n const textProperties = [\n ...allDescendantsNs(element, A_NS, 'rPr'),\n ...allDescendantsNs(element, A_NS, 'defRPr'),\n ];\n const size = firstParsedNumber(textProperties, 'sz');\n const color =\n firstSolidFillColor(textProperties, context) ??\n firstGradientFillColor(textProperties, context) ??\n colorFromStyleFontRef(element, context);\n const textGradient = firstGradientFill(textProperties, context);\n const textFill = textProperties.some((properties) => firstChildNs(properties, A_NS, 'noFill'))\n ? 'none'\n : undefined;\n const textOutlineColor = firstTextOutlineColor(textProperties, context);\n const textShadow = firstTextShadow(textProperties, context);\n const fontFamily = firstTypeface(textProperties, context);\n const bold =\n consistentParsedBoolean(textProperties, 'b') ?? singleTextRunParsedBoolean(element, 'b');\n const italic =\n consistentParsedBoolean(textProperties, 'i') ?? singleTextRunParsedBoolean(element, 'i');\n const underline =\n consistentParsedUnderline(textProperties) ?? singleTextRunParsedUnderline(element);\n const strike = consistentParsedStrike(textProperties) ?? singleTextRunParsedStrike(element);\n const baseline = firstParsedBaseline(textProperties);\n const highlight = firstHighlightColor(textProperties, context);\n const alignment = firstParagraphAlignment(element);\n const lineHeight = firstParagraphLineHeight(element);\n const characterSpacing = firstParsedCharacterSpacing(textProperties);\n return {\n ...(size !== undefined ? { fontSize: size / 100 } : {}),\n ...(fontFamily ? { fontFamily } : {}),\n ...(color ? { color } : {}),\n ...(textGradient ? { textGradient } : {}),\n ...(textFill ? { textFill } : {}),\n ...(textOutlineColor ? { textOutlineColor } : {}),\n ...(textShadow ? { textShadow } : {}),\n ...(bold !== undefined ? { bold } : {}),\n ...(italic !== undefined ? { italic } : {}),\n ...(underline !== undefined ? { underline } : {}),\n ...(strike !== undefined ? { strike } : {}),\n ...(baseline !== undefined ? { baseline } : {}),\n ...(highlight ? { highlight } : {}),\n ...(alignment ? { alignment } : {}),\n ...(lineHeight !== undefined ? { lineHeight } : {}),\n ...(characterSpacing !== undefined ? { characterSpacing } : {}),\n };\n}\n\nfunction parseTextBodyProperties(element: Element): PptTextBodyProperties | undefined {\n const bodyPr = allDescendantsNs(element, A_NS, 'bodyPr')[0];\n if (!bodyPr) return undefined;\n const anchor = parseTextBodyAnchor(bodyPr.getAttribute('anchor'));\n const autoFit = parseTextAutoFit(bodyPr);\n const wrap = parseTextBodyWrap(bodyPr.getAttribute('wrap'));\n const vertical = parseTextBodyVertical(bodyPr.getAttribute('vert'));\n const insetLeft = parseNumber(bodyPr.getAttribute('lIns'));\n const insetTop = parseNumber(bodyPr.getAttribute('tIns'));\n const insetRight = parseNumber(bodyPr.getAttribute('rIns'));\n const insetBottom = parseNumber(bodyPr.getAttribute('bIns'));\n const properties: PptTextBodyProperties = {\n ...(anchor ? { anchor } : {}),\n ...(autoFit ? { autoFit } : {}),\n ...(wrap ? { wrap } : {}),\n ...(vertical ? { vertical } : {}),\n ...(insetLeft !== undefined ? { insetLeft } : {}),\n ...(insetTop !== undefined ? { insetTop } : {}),\n ...(insetRight !== undefined ? { insetRight } : {}),\n ...(insetBottom !== undefined ? { insetBottom } : {}),\n };\n return properties;\n}\n\nfunction parseTextAutoFit(bodyPr: Element): PptTextBodyProperties['autoFit'] | undefined {\n if (firstChildNs(bodyPr, A_NS, 'spAutoFit')) return 'shape';\n if (firstChildNs(bodyPr, A_NS, 'normAutofit')) return 'normal';\n if (firstChildNs(bodyPr, A_NS, 'noAutofit')) return 'none';\n return undefined;\n}\n\nfunction parseTextBodyWrap(value: string | null): PptTextBodyProperties['wrap'] | undefined {\n if (value === 'none') return 'none';\n if (value === 'square') return 'square';\n return undefined;\n}\n\nfunction parseTextBodyVertical(\n value: string | null,\n): PptTextBodyProperties['vertical'] | undefined {\n if (value === 'eaVert') return 'eastAsian';\n if (value === 'vert') return 'vertical';\n return undefined;\n}\n\nfunction parseTextBodyAnchor(value: string | null): PptTextBodyProperties['anchor'] | undefined {\n if (value === 'ctr') return 'middle';\n if (value === 'b') return 'bottom';\n if (value === 't') return 'top';\n return undefined;\n}\n\nfunction firstParsedNumber(elements: Element[], attribute: string): number | undefined {\n for (const element of elements) {\n const value = parseNumber(element.getAttribute(attribute));\n if (value !== undefined) return value;\n }\n return undefined;\n}\n\nfunction firstParsedBoolean(elements: Element[], attribute: string): boolean | undefined {\n for (const element of elements) {\n const value = parseBooleanAttr(element.getAttribute(attribute));\n if (value !== undefined) return value;\n }\n return undefined;\n}\n\nfunction consistentParsedBoolean(elements: Element[], attribute: string): boolean | undefined {\n let value: boolean | undefined;\n let hasMissingValue = false;\n for (const element of elements) {\n const parsed = parseBooleanAttr(element.getAttribute(attribute));\n if (parsed === undefined) {\n hasMissingValue = true;\n continue;\n }\n if (value !== undefined && value !== parsed) return undefined;\n value = parsed;\n }\n return hasMissingValue ? undefined : value;\n}\n\nfunction consistentParsedUnderline(elements: Element[]): boolean | undefined {\n let value: boolean | undefined;\n let hasMissingValue = false;\n for (const element of elements) {\n const parsed = parseUnderlineAttr(element.getAttribute('u'));\n if (parsed === undefined) {\n hasMissingValue = true;\n continue;\n }\n if (value !== undefined && value !== parsed) return undefined;\n value = parsed;\n }\n return hasMissingValue ? undefined : value;\n}\n\nfunction consistentParsedStrike(elements: Element[]): boolean | undefined {\n let value: boolean | undefined;\n let hasMissingValue = false;\n for (const element of elements) {\n const parsed = parseStrikeAttr(element.getAttribute('strike'));\n if (parsed === undefined) {\n hasMissingValue = true;\n continue;\n }\n if (value !== undefined && value !== parsed) return undefined;\n value = parsed;\n }\n return hasMissingValue ? undefined : value;\n}\n\nfunction singleTextRunParsedBoolean(element: Element, attribute: string): boolean | undefined {\n const textRuns = allDescendantsNs(element, A_NS, 'r').filter((run) =>\n childElementsNs(run, A_NS, 't').some((text) => (text.textContent ?? '').length > 0),\n );\n if (textRuns.length !== 1) return undefined;\n const runProperties = firstChildNs(textRuns[0]!, A_NS, 'rPr');\n return parseBooleanAttr(runProperties?.getAttribute(attribute) ?? null);\n}\n\nfunction singleTextRunParsedUnderline(element: Element): boolean | undefined {\n const textRuns = allDescendantsNs(element, A_NS, 'r').filter((run) =>\n childElementsNs(run, A_NS, 't').some((text) => (text.textContent ?? '').length > 0),\n );\n if (textRuns.length !== 1) return undefined;\n const runProperties = firstChildNs(textRuns[0]!, A_NS, 'rPr');\n return parseUnderlineAttr(runProperties?.getAttribute('u') ?? null);\n}\n\nfunction singleTextRunParsedStrike(element: Element): boolean | undefined {\n const textRuns = allDescendantsNs(element, A_NS, 'r').filter((run) =>\n childElementsNs(run, A_NS, 't').some((text) => (text.textContent ?? '').length > 0),\n );\n if (textRuns.length !== 1) return undefined;\n const runProperties = firstChildNs(textRuns[0]!, A_NS, 'rPr');\n return parseStrikeAttr(runProperties?.getAttribute('strike') ?? null);\n}\n\nfunction firstParsedCharacterSpacing(elements: Element[]): number | undefined {\n const value = firstParsedNumber(elements, 'spc');\n return value !== undefined ? value / 100 : undefined;\n}\n\nfunction firstParsedBaseline(elements: Element[]): number | undefined {\n const value = firstParsedNumber(elements, 'baseline');\n return value !== undefined ? value / 100000 : undefined;\n}\n\nfunction parseBaseline(value: string | null): number | undefined {\n const parsed = parseNumber(value);\n return parsed !== undefined ? parsed / 100000 : undefined;\n}\n\nfunction firstHighlightColor(\n elements: Element[],\n context: PptParseContext = {},\n): string | undefined {\n for (const element of elements) {\n const highlight = firstChildNs(element, A_NS, 'highlight');\n const colorElement = highlight\n ? (firstChildNs(highlight, A_NS, 'srgbClr') ??\n firstChildNs(highlight, A_NS, 'schemeClr') ??\n firstChildNs(highlight, A_NS, 'sysClr') ??\n firstChildNs(highlight, A_NS, 'prstClr'))\n : null;\n const color = colorFromColorElement(colorElement, context);\n if (color) return color;\n }\n return undefined;\n}\n\nfunction firstTypeface(elements: Element[], context: PptParseContext = {}): string | undefined {\n for (const element of elements) {\n const typeface =\n firstChildNs(element, A_NS, 'ea')?.getAttribute('typeface') ??\n firstChildNs(element, A_NS, 'latin')?.getAttribute('typeface') ??\n firstChildNs(element, A_NS, 'cs')?.getAttribute('typeface') ??\n undefined;\n const family = normalizeTypeface(typeface, context);\n if (family) return family;\n }\n return undefined;\n}\n\nfunction normalizeTypeface(\n typeface: string | null | undefined,\n context: PptParseContext = {},\n): string | undefined {\n if (!typeface) return undefined;\n if (typeface === '+mj-lt') return context.fontScheme?.majorLatin;\n if (typeface === '+mj-ea') return context.fontScheme?.majorEa ?? context.fontScheme?.majorLatin;\n if (typeface === '+mj-cs') return context.fontScheme?.majorCs ?? context.fontScheme?.majorLatin;\n if (typeface === '+mn-lt') return context.fontScheme?.minorLatin;\n if (typeface === '+mn-ea') return context.fontScheme?.minorEa ?? context.fontScheme?.minorLatin;\n if (typeface === '+mn-cs') return context.fontScheme?.minorCs ?? context.fontScheme?.minorLatin;\n if (typeface.startsWith('+')) return undefined;\n return typeface;\n}\n\nfunction firstSolidFillColor(\n elements: Element[],\n context: PptParseContext = {},\n): string | undefined {\n for (const element of elements) {\n const color = colorFromSolidFill(firstChildNs(element, A_NS, 'solidFill'), context);\n if (color) return color;\n }\n return undefined;\n}\n\nfunction firstGradientFillColor(\n elements: Element[],\n context: PptParseContext = {},\n): string | undefined {\n return firstGradientFill(elements, context)?.colors[0];\n}\n\nfunction firstGradientFill(\n elements: Element[],\n context: PptParseContext = {},\n): PptShapeStyle['fillGradient'] | undefined {\n for (const element of elements) {\n const gradient = parseGradientFill(firstChildNs(element, A_NS, 'gradFill'), context);\n if (gradient) return gradient;\n }\n return undefined;\n}\n\nfunction firstTextOutlineColor(\n elements: Element[],\n context: PptParseContext = {},\n): string | undefined {\n for (const element of elements) {\n const line = firstChildNs(element, A_NS, 'ln');\n const color = line\n ? colorFromSolidFill(firstChildNs(line, A_NS, 'solidFill'), context)\n : undefined;\n if (color) return color;\n }\n return undefined;\n}\n\nfunction firstParagraphAlignment(element: Element): PptTextStyle['alignment'] | undefined {\n for (const candidate of allDescendantsNs(element, A_NS, 'pPr')) {\n const alignment = parseAlignment(candidate.getAttribute('algn'));\n if (alignment) return alignment;\n }\n for (const listStyle of allDescendantsNs(element, A_NS, 'lstStyle')) {\n for (let i = 0; i < listStyle.childNodes.length; i++) {\n const child = listStyle.childNodes[i];\n if (child?.nodeType !== 1) continue;\n const candidate = child as Element;\n if (candidate.namespaceURI !== A_NS || !candidate.localName.endsWith('pPr')) continue;\n const alignment = parseAlignment(candidate.getAttribute('algn'));\n if (alignment) return alignment;\n }\n }\n return undefined;\n}\n\nfunction firstParagraphLineHeight(element: Element): number | undefined {\n for (const pPr of allDescendantsNs(element, A_NS, 'pPr')) {\n const lnSpc = firstChildNs(pPr, A_NS, 'lnSpc');\n const pct = lnSpc\n ? parseNumber(firstChildNs(lnSpc, A_NS, 'spcPct')?.getAttribute('val') ?? null)\n : undefined;\n if (pct !== undefined) return pct / 100000;\n }\n return undefined;\n}\n\nfunction parseTextParagraphs(\n slide: PptSlideInternal,\n element: Element,\n context: PptParseContext = {},\n): PptTextParagraph[] {\n return allDescendantsNs(element, A_NS, 'p').map((paragraph) => {\n const pPr = firstChildNs(paragraph, A_NS, 'pPr');\n const alignment = parseAlignment(pPr?.getAttribute('algn') ?? null);\n const bullet = parseParagraphBullet(pPr, context);\n const paragraphStyle = parseParagraphStyle(pPr, alignment, bullet);\n const runs = parseTextParagraphRuns(slide, paragraph, alignment, context);\n const paragraphText = runs.map((run) => run.text).join('');\n return {\n text: paragraphText,\n ...(Object.keys(paragraphStyle).length > 0 ? { style: paragraphStyle } : {}),\n runs,\n };\n });\n}\n\nfunction parseTextParagraphRuns(\n slide: PptSlideInternal,\n paragraph: Element,\n alignment: PptTextStyle['alignment'],\n context: PptParseContext,\n): PptTextRun[] {\n const runs: PptTextRun[] = [];\n for (let i = 0; i < paragraph.childNodes.length; i++) {\n const child = paragraph.childNodes[i];\n if (child?.nodeType !== 1) continue;\n const element = child as Element;\n if (element.namespaceURI !== A_NS) continue;\n if (element.localName === 'r') {\n const text = allDescendantsNs(element, A_NS, 't').map(textOf).join('');\n const style = parseRunTextStyle(element, alignment, context);\n const hyperlink = parseRunHyperlink(slide, element);\n runs.push({\n text,\n ...(Object.keys(style).length > 0 ? { style } : {}),\n ...(hyperlink ? { hyperlink } : {}),\n });\n } else if (element.localName === 'br') {\n runs.push({ text: '\\n' });\n }\n }\n return runs;\n}\n\nfunction textParagraphsToPlainText(paragraphs: PptTextParagraph[]): string {\n return paragraphs.map((paragraph) => paragraph.text).join('\\n');\n}\n\nfunction parseParagraphStyle(\n pPr: Element | null,\n alignment: PptTextStyle['alignment'],\n bullet: { char: string; color?: string; fontFamily?: string; size?: number } | undefined,\n): NonNullable<PptTextParagraph['style']> {\n const lineHeight = parseParagraphLineHeight(pPr);\n const marginLeft = parseNumber(pPr?.getAttribute('marL') ?? null);\n const textIndent = parseNumber(pPr?.getAttribute('indent') ?? null);\n const spaceBefore = parseParagraphSpacing(pPr ? firstChildNs(pPr, A_NS, 'spcBef') : null);\n const spaceAfter = parseParagraphSpacing(pPr ? firstChildNs(pPr, A_NS, 'spcAft') : null);\n return {\n ...(alignment ? { alignment } : {}),\n ...(bullet ? { bullet: bullet.char } : {}),\n ...(bullet?.color ? { bulletColor: bullet.color } : {}),\n ...(bullet?.fontFamily ? { bulletFontFamily: bullet.fontFamily } : {}),\n ...(bullet?.size !== undefined ? { bulletSize: bullet.size } : {}),\n ...(lineHeight !== undefined ? { lineHeight } : {}),\n ...(marginLeft !== undefined ? { marginLeft } : {}),\n ...(textIndent !== undefined ? { textIndent } : {}),\n ...(spaceBefore !== undefined ? { spaceBefore } : {}),\n ...(spaceAfter !== undefined ? { spaceAfter } : {}),\n };\n}\n\nfunction parseParagraphLineHeight(pPr: Element | null): number | undefined {\n const lnSpc = pPr ? firstChildNs(pPr, A_NS, 'lnSpc') : null;\n const pct = lnSpc\n ? parseNumber(firstChildNs(lnSpc, A_NS, 'spcPct')?.getAttribute('val') ?? null)\n : undefined;\n if (pct !== undefined) return pct / 100000;\n return undefined;\n}\n\nfunction parseParagraphSpacing(element: Element | null): number | undefined {\n if (!element) return undefined;\n const points = parseNumber(firstChildNs(element, A_NS, 'spcPts')?.getAttribute('val') ?? null);\n if (points !== undefined) return points * 127;\n const pct = parseNumber(firstChildNs(element, A_NS, 'spcPct')?.getAttribute('val') ?? null);\n return pct !== undefined ? pct / 100000 : undefined;\n}\n\nfunction parseParagraphBullet(\n pPr: Element | null,\n context: PptParseContext = {},\n): { char: string; color?: string; fontFamily?: string; size?: number } | undefined {\n if (!pPr || firstChildNs(pPr, A_NS, 'buNone')) return undefined;\n const typeface = firstChildNs(pPr, A_NS, 'buFont')?.getAttribute('typeface') ?? undefined;\n const color = parseBulletColor(pPr, context);\n const size = parseBulletSize(pPr);\n const buChar = firstChildNs(pPr, A_NS, 'buChar')?.getAttribute('char');\n if (buChar) {\n return {\n char: normalizeBulletCharacter(buChar, typeface),\n ...(color ? { color } : {}),\n ...(typeface ? { fontFamily: typeface } : {}),\n ...(size !== undefined ? { size } : {}),\n };\n }\n if (firstChildNs(pPr, A_NS, 'buAutoNum')) {\n return {\n char: '1.',\n ...(color ? { color } : {}),\n ...(typeface ? { fontFamily: typeface } : {}),\n ...(size !== undefined ? { size } : {}),\n };\n }\n return undefined;\n}\n\nfunction parseBulletSize(pPr: Element): number | undefined {\n const pct = parseNumber(firstChildNs(pPr, A_NS, 'buSzPct')?.getAttribute('val') ?? null);\n if (pct !== undefined) return pct / 100000;\n const pts = parseNumber(firstChildNs(pPr, A_NS, 'buSzPts')?.getAttribute('val') ?? null);\n return pts !== undefined ? pts / 100 : undefined;\n}\n\nfunction normalizeBulletCharacter(char: string, typeface: string | null | undefined): string {\n const family = typeface?.toLowerCase() ?? '';\n if (!family.includes('wingdings') && !family.includes('webdings')) return char;\n if (char === 'ü' || char === '\\u00fc') return '✓';\n if (char === 'û' || char === '\\u00fb') return '✗';\n if (char === 'p') return '□';\n if (char === 'n') return '■';\n if (char === 'l') return '●';\n if (char === 'u') return '◆';\n return '•';\n}\n\nfunction parseBulletColor(pPr: Element, context: PptParseContext = {}): string | undefined {\n const buClr = firstChildNs(pPr, A_NS, 'buClr');\n if (!buClr) return undefined;\n const colorElement =\n firstChildNs(buClr, A_NS, 'srgbClr') ??\n firstChildNs(buClr, A_NS, 'schemeClr') ??\n firstChildNs(buClr, A_NS, 'sysClr') ??\n firstChildNs(buClr, A_NS, 'prstClr');\n return colorFromColorElement(colorElement, context);\n}\n\nfunction parseRunHyperlink(slide: PptSlideInternal, run: Element): PptHyperlinkModel | undefined {\n const rPr = firstChildNs(run, A_NS, 'rPr');\n const hlink = rPr ? firstChildNs(rPr, A_NS, 'hlinkClick') : null;\n return parseHyperlink(slide, hlink);\n}\n\nfunction parseShapeHyperlink(\n slide: PptSlideInternal,\n cNvPr: Element | undefined,\n): PptHyperlinkModel | undefined {\n if (!cNvPr) return undefined;\n return parseHyperlink(slide, firstChildNs(cNvPr, A_NS, 'hlinkClick'));\n}\n\nfunction parseHyperlink(\n slide: PptSlideInternal,\n hlink: Element | null,\n): PptHyperlinkModel | undefined {\n if (!hlink) return undefined;\n const relationshipId =\n hlink.getAttributeNS(R_NS, 'id') ?? hlink.getAttribute('r:id') ?? undefined;\n const rel = relationshipId ? slide.relationships.get(relationshipId) : undefined;\n const action = hlink.getAttribute('action') ?? undefined;\n const tooltip = hlink.getAttribute('tooltip') ?? undefined;\n return {\n ...(relationshipId ? { relationshipId } : {}),\n ...(rel?.target ? { target: rel.target } : {}),\n ...(rel?.targetMode ? { targetMode: rel.targetMode } : {}),\n ...(action ? { action } : {}),\n ...(tooltip ? { tooltip } : {}),\n };\n}\n\nfunction parseRunTextStyle(\n run: Element,\n alignment: PptTextStyle['alignment'],\n context: PptParseContext = {},\n): PptTextStyle {\n const rPr = firstChildNs(run, A_NS, 'rPr');\n const size = parseNumber(rPr?.getAttribute('sz') ?? null);\n const color = rPr\n ? (colorFromSolidFill(firstChildNs(rPr, A_NS, 'solidFill'), context) ??\n firstGradientFillColor([rPr], context))\n : undefined;\n const textGradient = rPr ? firstGradientFill([rPr], context) : undefined;\n const textFill = rPr && firstChildNs(rPr, A_NS, 'noFill') ? 'none' : undefined;\n const textOutlineColor = rPr ? firstTextOutlineColor([rPr], context) : undefined;\n const textShadow = rPr ? firstTextShadow([rPr], context) : undefined;\n const fontFamily = rPr ? firstTypeface([rPr], context) : undefined;\n const bold = parseBooleanAttr(rPr?.getAttribute('b') ?? null);\n const italic = parseBooleanAttr(rPr?.getAttribute('i') ?? null);\n const underline = parseUnderlineAttr(rPr?.getAttribute('u') ?? null);\n const strike = parseStrikeAttr(rPr?.getAttribute('strike') ?? null);\n const baseline = parseBaseline(rPr?.getAttribute('baseline') ?? null);\n const highlight = rPr ? firstHighlightColor([rPr], context) : undefined;\n const characterSpacing = rPr ? firstParsedCharacterSpacing([rPr]) : undefined;\n return {\n ...(size !== undefined ? { fontSize: size / 100 } : {}),\n ...(fontFamily ? { fontFamily } : {}),\n ...(color ? { color } : {}),\n ...(textGradient ? { textGradient } : {}),\n ...(textFill ? { textFill } : {}),\n ...(textOutlineColor ? { textOutlineColor } : {}),\n ...(textShadow ? { textShadow } : {}),\n ...(bold !== undefined ? { bold } : {}),\n ...(italic !== undefined ? { italic } : {}),\n ...(underline !== undefined ? { underline } : {}),\n ...(strike !== undefined ? { strike } : {}),\n ...(baseline !== undefined ? { baseline } : {}),\n ...(highlight ? { highlight } : {}),\n ...(alignment ? { alignment } : {}),\n ...(characterSpacing !== undefined ? { characterSpacing } : {}),\n };\n}\n\nfunction parseBooleanAttr(value: string | null): boolean | undefined {\n if (value === null) return undefined;\n return value === '1' || value === 'true';\n}\n\nfunction parseUnderlineAttr(value: string | null): boolean | undefined {\n if (value === null) return undefined;\n return value !== 'none';\n}\n\nfunction parseStrikeAttr(value: string | null): boolean | undefined {\n if (value === null) return undefined;\n return value !== 'noStrike';\n}\n\nfunction parseAlignment(value: string | null): PptTextStyle['alignment'] | undefined {\n if (value === 'ctr') return 'center';\n if (value === 'r') return 'right';\n if (value === 'just') return 'justify';\n if (value === 'dist' || value === 'thaiDist') return 'distributed';\n if (value === 'l') return 'left';\n return undefined;\n}\n\nfunction colorFromSolidFill(\n solidFill: Element | null,\n context: PptParseContext = {},\n): string | undefined {\n return parseSolidFill(solidFill, context).color;\n}\n\nfunction parseSolidFill(\n solidFill: Element | null,\n context: PptParseContext = {},\n): { color?: string; opacity?: number } {\n if (!solidFill) return {};\n const colorElement =\n firstChildNs(solidFill, A_NS, 'srgbClr') ??\n firstChildNs(solidFill, A_NS, 'schemeClr') ??\n firstChildNs(solidFill, A_NS, 'sysClr') ??\n firstChildNs(solidFill, A_NS, 'prstClr');\n const color = colorFromColorElement(colorElement, context);\n const alpha = colorElement\n ? parseNumber(firstChildNs(colorElement, A_NS, 'alpha')?.getAttribute('val') ?? null)\n : undefined;\n return {\n ...(color ? { color } : {}),\n ...(alpha !== undefined ? { opacity: alpha / 100000 } : {}),\n };\n}\n\nfunction parseGradientFill(\n gradFill: Element | null,\n context: PptParseContext = {},\n): PptShapeStyle['fillGradient'] | undefined {\n if (!gradFill) return undefined;\n const stops = allDescendantsNs(gradFill, A_NS, 'gs')\n .map((stop) => {\n const colorElement =\n firstChildNs(stop, A_NS, 'srgbClr') ??\n firstChildNs(stop, A_NS, 'schemeClr') ??\n firstChildNs(stop, A_NS, 'sysClr') ??\n firstChildNs(stop, A_NS, 'prstClr');\n const color = colorElement && colorFromColorElement(colorElement, context);\n const position = parseNumber(stop.getAttribute('pos') ?? null);\n const alpha = colorElement\n ? parseNumber(firstChildNs(colorElement, A_NS, 'alpha')?.getAttribute('val') ?? null)\n : undefined;\n return { color, position, opacity: alpha === undefined ? undefined : alpha / 100000 };\n })\n .filter(\n (\n stop,\n ): stop is { color: string; position: number | undefined; opacity: number | undefined } =>\n !!stop.color,\n );\n const colors = stops.map((stop) => stop.color);\n if (colors.length === 0) return undefined;\n const positions = stops.map((stop) =>\n stop.position === undefined ? undefined : stop.position / 1000,\n );\n const opacities = stops.map((stop) => stop.opacity);\n const linear = firstChildNs(gradFill, A_NS, 'lin');\n const tileRect = firstChildNs(gradFill, A_NS, 'tileRect');\n const angle = parseNumber(linear?.getAttribute('ang') ?? null);\n const scaled = parseBooleanAttribute(linear?.getAttribute('scaled') ?? null);\n const rotWithShape = parseBooleanAttribute(gradFill.getAttribute('rotWithShape'));\n const flip = parseGradientFlip(gradFill.getAttribute('flip'));\n const tileRectModel = parseGradientTileRect(tileRect);\n return {\n colors,\n ...(angle !== undefined ? { angle: angle / 60000 } : {}),\n ...(flip ? { flip } : {}),\n ...(rotWithShape !== undefined ? { rotWithShape } : {}),\n ...(scaled !== undefined ? { scaled } : {}),\n ...(tileRectModel ? { tileRect: tileRectModel } : {}),\n ...(positions.some((position) => position !== undefined)\n ? { positions: positions.map((position) => position ?? 0) }\n : {}),\n ...(opacities.some((opacity) => opacity !== undefined)\n ? { opacities: opacities.map((opacity) => opacity ?? 1) }\n : {}),\n };\n}\n\nfunction parseBooleanAttribute(raw: string | null): boolean | undefined {\n if (raw === null || raw === '') return undefined;\n return raw === '1' || raw === 'true';\n}\n\nfunction parseGradientFlip(raw: string | null): PptGradientFillModel['flip'] | undefined {\n if (raw === 'none' || raw === 'x' || raw === 'y' || raw === 'xy') return raw;\n return undefined;\n}\n\nfunction parseGradientTileRect(\n tileRect: Element | null,\n): NonNullable<PptGradientFillModel['tileRect']> | undefined {\n if (!tileRect) return undefined;\n const model: NonNullable<PptGradientFillModel['tileRect']> = {};\n const left = parsePercentageAttribute(tileRect.getAttribute('l'));\n const top = parsePercentageAttribute(tileRect.getAttribute('t'));\n const right = parsePercentageAttribute(tileRect.getAttribute('r'));\n const bottom = parsePercentageAttribute(tileRect.getAttribute('b'));\n if (left !== undefined) model.left = left;\n if (top !== undefined) model.top = top;\n if (right !== undefined) model.right = right;\n if (bottom !== undefined) model.bottom = bottom;\n return Object.keys(model).length > 0 ? model : {};\n}\n\nfunction parsePercentageAttribute(raw: string | null): number | undefined {\n const value = parseNumber(raw);\n return value === undefined ? undefined : value / 1000;\n}\n\nfunction colorFromColorElement(\n element: Element | null,\n context: PptParseContext = {},\n): string | undefined {\n if (!element) return undefined;\n const schemeValue = element.getAttribute('val') ?? '';\n const raw =\n element.localName === 'srgbClr'\n ? element.getAttribute('val')\n : element.localName === 'sysClr'\n ? (element.getAttribute('lastClr') ?? element.getAttribute('val'))\n : element.localName === 'prstClr'\n ? presetColorToHex(element.getAttribute('val') ?? '')\n : (context.colorScheme?.[schemeValue] ??\n context.colorScheme?.[defaultColorSchemeAlias(schemeValue)]);\n if (!raw) return undefined;\n return applyColorTransforms(`#${raw.replace(/^#/, '').toUpperCase()}`, element);\n}\n\nfunction presetColorToHex(value: string): string | undefined {\n const colors: Record<string, string> = {\n black: '000000',\n white: 'FFFFFF',\n red: 'FF0000',\n green: '008000',\n blue: '0000FF',\n yellow: 'FFFF00',\n };\n return colors[value];\n}\n\nfunction cssColorFromColorElement(\n element: Element | null,\n context: PptParseContext = {},\n): string | undefined {\n if (!element) return undefined;\n const color = colorFromColorElement(element, context);\n if (!color) return undefined;\n const alpha = parseNumber(firstChildNs(element, A_NS, 'alpha')?.getAttribute('val') ?? null);\n if (alpha === undefined || alpha >= 100000) return color;\n const [r, g, b] = [1, 3, 5].map((index) => Number.parseInt(color.slice(index, index + 2), 16));\n return `rgba(${r}, ${g}, ${b}, ${Math.max(0, Math.min(1, alpha / 100000))})`;\n}\n\nfunction defaultColorSchemeAlias(value: string): string {\n if (value === 'bg1') return 'lt1';\n if (value === 'tx1') return 'dk1';\n if (value === 'bg2') return 'lt2';\n if (value === 'tx2') return 'dk2';\n return value;\n}\n\nfunction applyColorTransforms(color: string, element: Element): string {\n const lumMod = parseNumber(firstChildNs(element, A_NS, 'lumMod')?.getAttribute('val') ?? null);\n const lumOff = parseNumber(firstChildNs(element, A_NS, 'lumOff')?.getAttribute('val') ?? null);\n const shade = parseNumber(firstChildNs(element, A_NS, 'shade')?.getAttribute('val') ?? null);\n const tint = parseNumber(firstChildNs(element, A_NS, 'tint')?.getAttribute('val') ?? null);\n if (lumMod === undefined && lumOff === undefined && shade === undefined && tint === undefined)\n return color;\n if ((lumMod !== undefined || lumOff !== undefined) && shade === undefined && tint === undefined) {\n return applyLuminanceTransforms(color, lumMod, lumOff);\n }\n const channels = [1, 3, 5].map((index) => Number.parseInt(color.slice(index, index + 2), 16));\n const transformed = channels.map((channel) => {\n const shaded = shade === undefined ? channel : channel * (shade / 100000);\n const tinted = tint === undefined ? shaded : shaded + (255 - shaded) * (tint / 100000);\n const modded = lumMod === undefined ? tinted : tinted * (lumMod / 100000);\n const offset = lumOff === undefined ? 0 : 255 * (lumOff / 100000);\n return Math.max(0, Math.min(255, Math.round(modded + offset)));\n });\n return `#${transformed\n .map((channel) => channel.toString(16).padStart(2, '0'))\n .join('')\n .toUpperCase()}`;\n}\n\nfunction applyLuminanceTransforms(\n color: string,\n lumMod: number | undefined,\n lumOff: number | undefined,\n): string {\n const rgb = [1, 3, 5].map((index) => Number.parseInt(color.slice(index, index + 2), 16)) as [\n number,\n number,\n number,\n ];\n const [hue, saturation, luminance] = rgbToHsl(rgb);\n const nextLuminance = clamp01(\n luminance * ((lumMod ?? 100000) / 100000) + ((lumOff ?? 0) / 100000),\n );\n return rgbToHex(hslToRgb([hue, saturation, nextLuminance]));\n}\n\nfunction rgbToHsl([red, green, blue]: [number, number, number]): [number, number, number] {\n const r = red / 255;\n const g = green / 255;\n const b = blue / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const luminance = (max + min) / 2;\n if (max === min) return [0, 0, luminance];\n const delta = max - min;\n const saturation =\n luminance > 0.5 ? delta / (2 - max - min) : delta / (max + min);\n let hue = 0;\n if (max === r) hue = (g - b) / delta + (g < b ? 6 : 0);\n else if (max === g) hue = (b - r) / delta + 2;\n else hue = (r - g) / delta + 4;\n return [hue / 6, saturation, luminance];\n}\n\nfunction hslToRgb([hue, saturation, luminance]: [number, number, number]): [\n number,\n number,\n number,\n] {\n if (saturation === 0) {\n const channel = luminance * 255;\n return [channel, channel, channel];\n }\n const q =\n luminance < 0.5\n ? luminance * (1 + saturation)\n : luminance + saturation - luminance * saturation;\n const p = 2 * luminance - q;\n return [\n hueToRgb(p, q, hue + 1 / 3) * 255,\n hueToRgb(p, q, hue) * 255,\n hueToRgb(p, q, hue - 1 / 3) * 255,\n ];\n}\n\nfunction hueToRgb(p: number, q: number, hue: number): number {\n let t = hue;\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\nfunction rgbToHex(channels: [number, number, number]): string {\n return `#${channels\n .map((channel) =>\n Math.max(0, Math.min(255, Math.round(channel))).toString(16).padStart(2, '0'),\n )\n .join('')\n .toUpperCase()}`;\n}\n\nfunction clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nfunction classifyShape(\n slide: PptSlideInternal,\n element: Element,\n hostType: 'sp' | 'pic' | 'graphicFrame' | 'grpSp',\n textElements: Element[],\n domains: {\n table?: PptTableModel;\n image?: PptImageModel;\n chart?: PptChartModel;\n media?: PptShapeMediaModel;\n oleObject?: PptOleObjectModel;\n smartArt?: PptSmartArtModel;\n },\n): PptShapeKind {\n if (hostType === 'grpSp') return 'group';\n if (domains.table) return 'table';\n if (domains.media) return 'media';\n if (domains.oleObject) return 'oleObject';\n if (domains.smartArt) return 'smartArt';\n if (domains.image || hostType === 'pic') return 'picture';\n if (domains.chart || hasChartRelationship(slide, element)) return 'chart';\n if (hostType === 'graphicFrame') return 'unknown';\n if (allDescendantsNs(element, P_NS, 'ph').length > 0) return 'placeholder';\n if (textElements.length > 0) return 'textBox';\n if (parseCustomGeometry(element)) return 'geometricShape';\n const presetGeometry = parsePresetGeometry(element);\n if (\n (presetGeometry === 'line' || presetGeometry === 'straightConnector1') &&\n allDescendantsNs(element, A_NS, 'ln').length > 0\n ) {\n return 'line';\n }\n if (\n allDescendantsNs(element, A_NS, 'ln').length > 0 &&\n allDescendantsNs(element, A_NS, 'prstGeom').length === 0\n ) {\n return 'line';\n }\n return hostType === 'sp' ? 'geometricShape' : 'unknown';\n}\n\nfunction parseChartModel(\n pkg: Package,\n slide: PptSlideInternal,\n element: Element,\n context: PptParseContext = {},\n): PptChartModel | undefined {\n const chartRef = allDescendantsLocal(element, 'chart')[0];\n const relationshipId =\n chartRef?.getAttributeNS(R_NS, 'id') ?? chartRef?.getAttribute('r:id') ?? undefined;\n if (!relationshipId) return undefined;\n const rel = slide.relationships.get(relationshipId);\n if (!rel || rel.type !== CHART_REL_TYPE) return { relationshipId };\n const targetPath = resolveRelationshipTarget(slide.part.path, rel.target);\n const part = getPart(pkg, targetPath);\n const model: PptChartModel = { relationshipId, targetPath };\n if (!part?.xmlDom) return model;\n const type = parseChartType(part.xmlDom);\n const grouping = parseChartGrouping(part.xmlDom);\n const title = parseChartTitle(part.xmlDom);\n const data = parseChartData(part.xmlDom, context);\n const plotLayout = parseChartPlotLayout(part.xmlDom);\n const axes = parseChartAxes(part.xmlDom, context);\n const seriesNames = data.series\n .map((series) => series.name)\n .filter((value): value is string => Boolean(value));\n if (type) model.type = type;\n if (grouping) model.grouping = grouping;\n if (title) model.title = title;\n if (seriesNames.length > 0) model.seriesNames = seriesNames;\n if (data.series.length > 0) model.data = data;\n if (plotLayout) model.plotLayout = plotLayout;\n if (axes) model.axes = axes;\n return model;\n}\n\nfunction parseChartType(doc: Document): string | undefined {\n const plotArea = allDescendantsLocal(doc, 'plotArea')[0];\n if (!plotArea) return undefined;\n for (let i = 0; i < plotArea.childNodes.length; i++) {\n const child = plotArea.childNodes[i];\n if (child?.nodeType !== 1) continue;\n const localName = (child as Element).localName;\n if (localName.endsWith('Chart')) return localName.slice(0, -'Chart'.length);\n }\n return undefined;\n}\n\nfunction parseChartGrouping(doc: Document): string | undefined {\n const plotArea = allDescendantsLocal(doc, 'plotArea')[0];\n if (!plotArea) return undefined;\n for (let i = 0; i < plotArea.childNodes.length; i++) {\n const child = plotArea.childNodes[i];\n if (child?.nodeType !== 1) continue;\n const chart = child as Element;\n if (!chart.localName.endsWith('Chart')) continue;\n const grouping = firstChildLocal(chart, 'grouping')?.getAttribute('val') ?? undefined;\n if (grouping) return grouping;\n }\n return undefined;\n}\n\nfunction parseChartTitle(doc: Document): string | undefined {\n const title = allDescendantsLocal(doc, 'title')[0];\n if (!title) return undefined;\n const text = allDescendantsNs(title, A_NS, 't').map(textOf).join('');\n return text || undefined;\n}\n\nfunction parseChartData(doc: Document, context: PptParseContext = {}): PptChartData {\n const title = parseChartTitle(doc);\n const plotArea = allDescendantsLocal(doc, 'plotArea')[0];\n const series = plotArea ? parsePlotAreaSeries(plotArea, context) : [];\n return {\n ...(title ? { title } : {}),\n series,\n };\n}\n\nfunction parseChartPlotLayout(doc: Document): PptChartModel['plotLayout'] | undefined {\n const plotArea = allDescendantsLocal(doc, 'plotArea')[0];\n const manualLayout = plotArea ? allDescendantsLocal(plotArea, 'manualLayout')[0] : undefined;\n if (!manualLayout) return undefined;\n const numberFromChild = (name: string) =>\n parseNumber(firstChildLocal(manualLayout, name)?.getAttribute('val') ?? null);\n const layout = {\n ...(numberFromChild('x') !== undefined ? { x: numberFromChild('x')! } : {}),\n ...(numberFromChild('y') !== undefined ? { y: numberFromChild('y')! } : {}),\n ...(numberFromChild('w') !== undefined ? { width: numberFromChild('w')! } : {}),\n ...(numberFromChild('h') !== undefined ? { height: numberFromChild('h')! } : {}),\n };\n return Object.keys(layout).length > 0 ? layout : undefined;\n}\n\nfunction parseChartAxes(\n doc: Document,\n context: PptParseContext = {},\n): PptChartModel['axes'] | undefined {\n const plotArea = allDescendantsLocal(doc, 'plotArea')[0];\n if (!plotArea) return undefined;\n const category = parseChartAxis(childElementsLocal(plotArea, 'catAx')[0], context);\n const value = parseChartAxis(childElementsLocal(plotArea, 'valAx')[0], context);\n const axes = {\n ...(category ? { category } : {}),\n ...(value ? { value } : {}),\n };\n return Object.keys(axes).length > 0 ? axes : undefined;\n}\n\nfunction parseChartAxis(\n axis: Element | undefined,\n context: PptParseContext = {},\n): NonNullable<PptChartModel['axes']>['value'] | undefined {\n if (!axis) return undefined;\n const scaling = firstChildLocal(axis, 'scaling');\n const min = parseNumber(firstChildLocal(scaling ?? axis, 'min')?.getAttribute('val') ?? null);\n const max = parseNumber(firstChildLocal(scaling ?? axis, 'max')?.getAttribute('val') ?? null);\n const majorUnit = parseNumber(firstChildLocal(axis, 'majorUnit')?.getAttribute('val') ?? null);\n const deleted = parseBooleanAttr(firstChildLocal(axis, 'delete')?.getAttribute('val') ?? null);\n const tickLabelPosition = firstChildLocal(axis, 'tickLblPos')?.getAttribute('val') ?? undefined;\n const majorGridlinesElement = childElementsLocal(axis, 'majorGridlines')[0];\n const majorGridlines = Boolean(majorGridlinesElement);\n const axisSpPr = firstChildLocal(axis, 'spPr');\n const gridlineSpPr = majorGridlinesElement\n ? firstChildLocal(majorGridlinesElement, 'spPr')\n : null;\n const line = parseChartLineStyle(axisSpPr ? firstChildNs(axisSpPr, A_NS, 'ln') : null, context);\n const gridline = parseChartLineStyle(\n gridlineSpPr ? firstChildNs(gridlineSpPr, A_NS, 'ln') : null,\n context,\n );\n const result = {\n ...(deleted !== undefined ? { deleted } : {}),\n ...(min !== undefined ? { min } : {}),\n ...(max !== undefined ? { max } : {}),\n ...(majorUnit !== undefined ? { majorUnit } : {}),\n ...(majorGridlines ? { majorGridlines } : {}),\n ...(line.color ? { lineColor: line.color } : {}),\n ...(line.width !== undefined ? { lineWidth: line.width } : {}),\n ...(gridline.color ? { gridlineColor: gridline.color } : {}),\n ...(gridline.width !== undefined ? { gridlineWidth: gridline.width } : {}),\n ...(tickLabelPosition ? { tickLabelPosition } : {}),\n };\n return Object.keys(result).length > 0 ? result : undefined;\n}\n\nfunction parsePlotAreaSeries(\n plotArea: Element,\n context: PptParseContext = {},\n): PptChartSeriesData[] {\n const series: PptChartSeriesData[] = [];\n let chartGroup = 0;\n for (let i = 0; i < plotArea.childNodes.length; i++) {\n const child = plotArea.childNodes[i];\n if (child?.nodeType !== 1) continue;\n const chart = child as Element;\n if (!chart.localName.endsWith('Chart')) continue;\n const type = chart.localName.slice(0, -'Chart'.length);\n const chartLabels = parseChartDataLabelSettings(chart);\n for (const ser of childElementsLocal(chart, 'ser')) {\n const categories = parseChartSeriesCategories(ser);\n const name = parseChartSeriesName(ser);\n const spPr = firstChildLocal(ser, 'spPr');\n const fillColor = spPr\n ? colorFromSolidFill(firstChildNs(spPr, A_NS, 'solidFill'), context)\n : undefined;\n const fillGradient = spPr\n ? parseGradientFill(firstChildNs(spPr, A_NS, 'gradFill'), context)\n : undefined;\n const pointColors = parseChartPointColors(ser, context);\n const ln = spPr ? firstChildNs(spPr, A_NS, 'ln') : undefined;\n const lineStyle = parseChartLineStyle(ln, context);\n const lineGradient = ln\n ? parseGradientFill(firstChildNs(ln, A_NS, 'gradFill'), context)\n : undefined;\n const lineColor = lineStyle.color ?? lineGradient?.colors[0];\n const marker = parseChartSeriesMarker(ser, context);\n const seriesLabels = mergeChartDataLabelSettings(\n chartLabels,\n parseChartDataLabelSettings(ser),\n );\n const dataLabelLayouts = [\n ...parseChartDataLabelLayouts(chart),\n ...parseChartDataLabelLayouts(ser),\n ];\n const smooth = parseBooleanAttr(firstChildLocal(ser, 'smooth')?.getAttribute('val') ?? null);\n series.push({\n ...(name ? { name } : {}),\n type,\n chartGroup,\n ...(categories.length > 0 ? { categories } : {}),\n values: parseChartSeriesValues(ser),\n ...(fillColor ? { fillColor } : {}),\n ...(fillGradient ? { fillGradient } : {}),\n ...(pointColors.length > 0 ? { pointColors } : {}),\n ...(lineStyle.color ? { borderColor: lineStyle.color } : {}),\n ...(lineStyle.width !== undefined ? { borderWidth: lineStyle.width } : {}),\n ...(lineColor ? { lineColor } : {}),\n ...(lineStyle.width !== undefined ? { lineWidth: lineStyle.width } : {}),\n ...(marker ? { marker } : {}),\n ...(seriesLabels.showValueLabels !== undefined\n ? { showValueLabels: seriesLabels.showValueLabels }\n : {}),\n ...(seriesLabels.showCategoryNameLabels !== undefined\n ? { showCategoryNameLabels: seriesLabels.showCategoryNameLabels }\n : {}),\n ...(seriesLabels.showPercentLabels !== undefined\n ? { showPercentLabels: seriesLabels.showPercentLabels }\n : {}),\n ...(dataLabelLayouts.length > 0 ? { dataLabelLayouts } : {}),\n ...(smooth !== undefined ? { smooth } : {}),\n });\n }\n chartGroup++;\n }\n return series;\n}\n\nfunction parseChartLineStyle(\n ln: Element | null | undefined,\n context: PptParseContext = {},\n): { color?: string; width?: number } {\n if (!ln || firstChildNs(ln, A_NS, 'noFill')) return {};\n const solidFill = firstChildNs(ln, A_NS, 'solidFill');\n const gradient = parseGradientFill(firstChildNs(ln, A_NS, 'gradFill'), context);\n const color = colorFromSolidFill(solidFill, context) ?? gradient?.colors[0];\n const width = parseNumber(ln.getAttribute('w') ?? null);\n return {\n ...(color ? { color } : {}),\n ...(width !== undefined ? { width } : {}),\n };\n}\n\nfunction parseChartPointColors(ser: Element, context: PptParseContext = {}): string[] {\n const colors: string[] = [];\n for (const point of childElementsLocal(ser, 'dPt')) {\n const index = parseNumber(firstChildLocal(point, 'idx')?.getAttribute('val') ?? null);\n const spPr = firstChildLocal(point, 'spPr');\n const color = spPr\n ? colorFromSolidFill(firstChildNs(spPr, A_NS, 'solidFill'), context)\n : undefined;\n if (index === undefined || !color) continue;\n colors[index] = color;\n }\n return colors;\n}\n\nfunction parseChartDataLabelSettings(element: Element): {\n showValueLabels?: boolean;\n showCategoryNameLabels?: boolean;\n showPercentLabels?: boolean;\n} {\n const dLbls = firstChildLocal(element, 'dLbls');\n if (!dLbls) return {};\n const deleted = parseBooleanAttr(firstChildLocal(dLbls, 'delete')?.getAttribute('val') ?? null);\n if (deleted === true) {\n return {\n showValueLabels: false,\n showCategoryNameLabels: false,\n showPercentLabels: false,\n };\n }\n return {\n ...chartDataLabelBoolean(dLbls, 'showVal', 'showValueLabels'),\n ...chartDataLabelBoolean(dLbls, 'showCatName', 'showCategoryNameLabels'),\n ...chartDataLabelBoolean(dLbls, 'showPercent', 'showPercentLabels'),\n };\n}\n\nfunction parseChartDataLabelLayouts(element: Element): NonNullable<PptChartSeriesData['dataLabelLayouts']> {\n const dLbls = firstChildLocal(element, 'dLbls');\n if (!dLbls) return [];\n const result: NonNullable<PptChartSeriesData['dataLabelLayouts']> = [];\n for (const label of childElementsLocal(dLbls, 'dLbl')) {\n const index = parseNumber(firstChildLocal(label, 'idx')?.getAttribute('val') ?? null);\n const manualLayout = allDescendantsLocal(label, 'manualLayout')[0];\n if (index === undefined || !manualLayout) continue;\n const x = parseNumber(firstChildLocal(manualLayout, 'x')?.getAttribute('val') ?? null);\n const y = parseNumber(firstChildLocal(manualLayout, 'y')?.getAttribute('val') ?? null);\n if (x === undefined && y === undefined) continue;\n result.push({\n index,\n ...(x !== undefined ? { x } : {}),\n ...(y !== undefined ? { y } : {}),\n });\n }\n return result;\n}\n\nfunction chartDataLabelBoolean<K extends 'showValueLabels' | 'showCategoryNameLabels' | 'showPercentLabels'>(\n dLbls: Element,\n xmlName: string,\n key: K,\n): Partial<Record<K, boolean>> {\n const value = parseBooleanAttr(firstChildLocal(dLbls, xmlName)?.getAttribute('val') ?? null);\n return value === undefined ? {} : { [key]: value } as Partial<Record<K, boolean>>;\n}\n\nfunction mergeChartDataLabelSettings(\n base: {\n showValueLabels?: boolean;\n showCategoryNameLabels?: boolean;\n showPercentLabels?: boolean;\n },\n override: {\n showValueLabels?: boolean;\n showCategoryNameLabels?: boolean;\n showPercentLabels?: boolean;\n },\n): {\n showValueLabels?: boolean;\n showCategoryNameLabels?: boolean;\n showPercentLabels?: boolean;\n} {\n return {\n ...base,\n ...override,\n };\n}\n\nfunction parseChartSeriesMarker(\n ser: Element,\n context: PptParseContext = {},\n): PptChartSeriesData['marker'] | undefined {\n const marker = firstChildLocal(ser, 'marker');\n if (!marker) return undefined;\n const symbol = firstChildLocal(marker, 'symbol')?.getAttribute('val') ?? undefined;\n const size = parseNumber(firstChildLocal(marker, 'size')?.getAttribute('val') ?? null);\n const spPr = firstChildLocal(marker, 'spPr');\n const fillColor = spPr\n ? colorFromSolidFill(firstChildNs(spPr, A_NS, 'solidFill'), context)\n : undefined;\n const line = parseChartLineStyle(spPr ? firstChildNs(spPr, A_NS, 'ln') : null, context);\n return symbol || size !== undefined || fillColor || line.color || line.width !== undefined\n ? {\n ...(symbol ? { symbol } : {}),\n ...(size !== undefined ? { size } : {}),\n ...(fillColor ? { fillColor } : {}),\n ...(line.color ? { lineColor: line.color } : {}),\n ...(line.width !== undefined ? { lineWidth: line.width } : {}),\n }\n : undefined;\n}\n\nfunction childElementsLocal(parent: Element, localName: string): Element[] {\n const result: Element[] = [];\n for (let i = 0; i < parent.childNodes.length; i++) {\n const child = parent.childNodes[i];\n if (child?.nodeType !== 1) continue;\n const element = child as Element;\n if (element.localName === localName) result.push(element);\n }\n return result;\n}\n\nfunction parseChartSeriesName(ser: Element): string | undefined {\n const tx = firstChildLocal(ser, 'tx');\n if (!tx) return undefined;\n const inline = allDescendantsLocal(tx, 'v').map(textOf).join('');\n return valuesFromStringCache(tx)[0] ?? (inline || undefined);\n}\n\nfunction parseChartSeriesCategories(ser: Element): string[] {\n const cat = firstChildLocal(ser, 'cat') ?? firstChildLocal(ser, 'xVal');\n if (!cat) return [];\n return valuesFromStringCache(cat);\n}\n\nfunction parseChartSeriesValues(ser: Element): number[] {\n const val = firstChildLocal(ser, 'val') ?? firstChildLocal(ser, 'yVal');\n if (!val) return [];\n return valuesFromNumberCache(val);\n}\n\nfunction valuesFromStringCache(parent: Element): string[] {\n const cache = firstChildLocal(parent, 'strCache') ?? allDescendantsLocal(parent, 'strCache')[0];\n if (!cache) return [];\n return allDescendantsLocal(cache, 'pt')\n .map((pt) => allDescendantsLocal(pt, 'v')[0])\n .map(textOf)\n .filter(Boolean);\n}\n\nfunction valuesFromNumberCache(parent: Element): number[] {\n const cache = firstChildLocal(parent, 'numCache') ?? allDescendantsLocal(parent, 'numCache')[0];\n if (!cache) return [];\n return allDescendantsLocal(cache, 'pt')\n .map((pt) => Number(textOf(allDescendantsLocal(pt, 'v')[0])))\n .filter((value) => Number.isFinite(value));\n}\n\nfunction hasChartRelationship(slide: PptSlideInternal, element: Element): boolean {\n for (const el of allDescendantsLocal(element, 'chart')) {\n const relId = el.getAttributeNS(R_NS, 'id') ?? el.getAttribute('r:id');\n if (relId && slide.relationships.get(relId)?.type === CHART_REL_TYPE) return true;\n }\n return false;\n}\n\nfunction parseMediaModel(\n pkg: Package,\n slide: PptSlideInternal,\n element: Element,\n): PptShapeMediaModel | undefined {\n const mediaRef =\n allDescendantsLocal(element, 'videoFile')[0] ??\n allDescendantsLocal(element, 'audioFile')[0] ??\n allDescendantsLocal(element, 'media')[0];\n const relId =\n mediaRef?.getAttributeNS(R_NS, 'link') ??\n mediaRef?.getAttribute('r:link') ??\n mediaRef?.getAttributeNS(R_NS, 'embed') ??\n mediaRef?.getAttribute('r:embed') ??\n undefined;\n if (!relId) return undefined;\n const rel = slide.relationships.get(relId);\n const mediaType = mediaTypeFromReference(mediaRef, rel?.type);\n const targetPath =\n rel && isMediaRelationship(rel.type)\n ? resolveRelationshipTarget(slide.part.path, rel.target)\n : undefined;\n const model: PptShapeMediaModel = { relationshipId: relId };\n if (mediaType) model.mediaType = mediaType;\n if (targetPath) {\n model.targetPath = targetPath;\n model.filename = targetPath.slice(targetPath.lastIndexOf('/') + 1);\n const part = getPart(pkg, targetPath);\n if (part?.contentType) model.contentType = part.contentType;\n }\n return model;\n}\n\nfunction parseOleObjectModel(\n slide: PptSlideInternal,\n element: Element,\n): PptOleObjectModel | undefined {\n const ole = allDescendantsLocal(element, 'oleObj')[0];\n if (!ole) return undefined;\n const relId = ole.getAttributeNS(R_NS, 'id') ?? ole.getAttribute('r:id') ?? undefined;\n const model: PptOleObjectModel = {};\n const progId = ole.getAttribute('progId') ?? undefined;\n const name = ole.getAttribute('name') ?? undefined;\n if (relId) {\n model.relationshipId = relId;\n const rel = slide.relationships.get(relId);\n if (rel?.type === OLE_OBJECT_REL_TYPE) {\n model.targetPath = resolveRelationshipTarget(slide.part.path, rel.target);\n }\n }\n if (progId) model.progId = progId;\n if (name) model.name = name;\n return Object.keys(model).length > 0 ? model : undefined;\n}\n\nfunction parseSmartArtModel(\n slide: PptSlideInternal,\n element: Element,\n): PptSmartArtModel | undefined {\n const graphicData = allDescendantsNs(element, A_NS, 'graphicData').find((el) =>\n (el.getAttribute('uri') ?? '').includes(DIAGRAM_URI),\n );\n if (!graphicData) return undefined;\n const relIds = allDescendantsLocal(graphicData, 'relIds')[0];\n if (!relIds) return {};\n const relationshipIds: Record<string, string> = {};\n const targetPaths: Record<string, string> = {};\n for (const attrName of ['dm', 'lo', 'qs', 'cs']) {\n const relId = relIds.getAttributeNS(R_NS, attrName) ?? relIds.getAttribute(`r:${attrName}`);\n if (!relId) continue;\n relationshipIds[attrName] = relId;\n const rel = slide.relationships.get(relId);\n if (rel) targetPaths[attrName] = resolveRelationshipTarget(slide.part.path, rel.target);\n }\n return {\n ...(Object.keys(relationshipIds).length > 0 ? { relationshipIds } : {}),\n ...(Object.keys(targetPaths).length > 0 ? { targetPaths } : {}),\n };\n}\n\nfunction isMediaRelationship(type: string): boolean {\n return type === MEDIA_REL_TYPE || type === VIDEO_REL_TYPE || type === AUDIO_REL_TYPE;\n}\n\nfunction mediaTypeFromReference(\n ref: Element | undefined,\n relationshipType: string | undefined,\n): PptShapeMediaModel['mediaType'] | undefined {\n if (ref?.localName === 'videoFile' || relationshipType === VIDEO_REL_TYPE) return 'video';\n if (ref?.localName === 'audioFile' || relationshipType === AUDIO_REL_TYPE) return 'audio';\n if (relationshipType === MEDIA_REL_TYPE || ref?.localName === 'media') return 'media';\n return undefined;\n}\n\nfunction parseGeometry(element: Element): PptShapeGeometry {\n const xfrm = allDescendantsLocal(element, 'xfrm')[0];\n if (!xfrm) return {};\n const off = firstChildNs(xfrm, A_NS, 'off');\n const ext = firstChildNs(xfrm, A_NS, 'ext');\n const geometry: PptShapeGeometry = {};\n const left = parseNumber(off?.getAttribute('x') ?? null);\n const top = parseNumber(off?.getAttribute('y') ?? null);\n const width = parseNumber(ext?.getAttribute('cx') ?? null);\n const height = parseNumber(ext?.getAttribute('cy') ?? null);\n const rotation = parseNumber(xfrm.getAttribute('rot'));\n const flipHorizontal = parseBooleanAttr(xfrm.getAttribute('flipH'));\n const flipVertical = parseBooleanAttr(xfrm.getAttribute('flipV'));\n if (left !== undefined) geometry.left = left;\n if (top !== undefined) geometry.top = top;\n if (width !== undefined) geometry.width = width;\n if (height !== undefined) geometry.height = height;\n if (rotation !== undefined) geometry.rotation = rotation / 60000;\n if (flipHorizontal !== undefined) geometry.flipHorizontal = flipHorizontal;\n if (flipVertical !== undefined) geometry.flipVertical = flipVertical;\n return geometry;\n}\n\nfunction parseGroupTransform(element: Element): PptGroupTransformModel | undefined {\n const xfrm = allDescendantsLocal(element, 'xfrm')[0];\n if (!xfrm) return undefined;\n const chOff = firstChildNs(xfrm, A_NS, 'chOff');\n const chExt = firstChildNs(xfrm, A_NS, 'chExt');\n const childLeft = parseNumber(chOff?.getAttribute('x') ?? null);\n const childTop = parseNumber(chOff?.getAttribute('y') ?? null);\n const childWidth = parseNumber(chExt?.getAttribute('cx') ?? null);\n const childHeight = parseNumber(chExt?.getAttribute('cy') ?? null);\n if (\n childLeft === undefined &&\n childTop === undefined &&\n childWidth === undefined &&\n childHeight === undefined\n ) {\n return undefined;\n }\n return {\n ...(childLeft !== undefined ? { childLeft } : {}),\n ...(childTop !== undefined ? { childTop } : {}),\n ...(childWidth !== undefined ? { childWidth } : {}),\n ...(childHeight !== undefined ? { childHeight } : {}),\n };\n}\n\nfunction imageModelFromElement(\n slide: PptSlideInternal,\n element: Element,\n): PptImageModel | undefined {\n const blip = allDescendantsNs(element, A_NS, 'blip')[0];\n const svgBlip = blip ? allDescendantsLocal(blip, 'svgBlip')[0] : undefined;\n const relId =\n blip?.getAttributeNS(R_NS, 'embed') ??\n blip?.getAttribute('r:embed') ??\n svgBlip?.getAttributeNS(R_NS, 'embed') ??\n svgBlip?.getAttribute('r:embed');\n if (!relId) return undefined;\n const rel = slide.relationships.get(relId);\n const targetPath =\n rel && rel.type === IMAGE_REL_TYPE\n ? resolveRelationshipTarget(slide.part.path, rel.target)\n : undefined;\n const model: PptImageModel = { relationshipId: relId };\n const crop = parseImageCrop(element);\n const fillRect = parseImageFillRect(element);\n const opacity = parseImageOpacity(blip);\n if (targetPath) {\n model.targetPath = targetPath;\n model.filename = targetPath.slice(targetPath.lastIndexOf('/') + 1);\n }\n if (crop) model.crop = crop;\n if (fillRect) model.fillRect = fillRect;\n if (opacity !== undefined) model.opacity = opacity;\n return model;\n}\n\nfunction parseImageCrop(element: Element): PptImageModel['crop'] | undefined {\n const srcRect = allDescendantsNs(element, A_NS, 'srcRect')[0];\n if (!srcRect) return undefined;\n const crop = {\n ...(parseNumber(srcRect.getAttribute('l')) !== undefined\n ? { left: parseNumber(srcRect.getAttribute('l'))! / 100000 }\n : {}),\n ...(parseNumber(srcRect.getAttribute('t')) !== undefined\n ? { top: parseNumber(srcRect.getAttribute('t'))! / 100000 }\n : {}),\n ...(parseNumber(srcRect.getAttribute('r')) !== undefined\n ? { right: parseNumber(srcRect.getAttribute('r'))! / 100000 }\n : {}),\n ...(parseNumber(srcRect.getAttribute('b')) !== undefined\n ? { bottom: parseNumber(srcRect.getAttribute('b'))! / 100000 }\n : {}),\n };\n return Object.keys(crop).length > 0 ? crop : undefined;\n}\n\nfunction parseImageFillRect(element: Element): PptImageModel['fillRect'] | undefined {\n const stretch = allDescendantsNs(element, A_NS, 'stretch')[0];\n const fillRect = stretch ? firstChildNs(stretch, A_NS, 'fillRect') : null;\n if (!fillRect) return undefined;\n const rect = {\n ...(parseNumber(fillRect.getAttribute('l')) !== undefined\n ? { left: parseNumber(fillRect.getAttribute('l'))! / 100000 }\n : {}),\n ...(parseNumber(fillRect.getAttribute('t')) !== undefined\n ? { top: parseNumber(fillRect.getAttribute('t'))! / 100000 }\n : {}),\n ...(parseNumber(fillRect.getAttribute('r')) !== undefined\n ? { right: parseNumber(fillRect.getAttribute('r'))! / 100000 }\n : {}),\n ...(parseNumber(fillRect.getAttribute('b')) !== undefined\n ? { bottom: parseNumber(fillRect.getAttribute('b'))! / 100000 }\n : {}),\n };\n return Object.keys(rect).length > 0 ? rect : undefined;\n}\n\nfunction parseImageOpacity(blip: Element | undefined): number | undefined {\n if (!blip) return undefined;\n const alphaModFix = firstChildNs(blip, A_NS, 'alphaModFix');\n const amount = parseNumber(alphaModFix?.getAttribute('amt') ?? null);\n return amount === undefined ? undefined : Math.max(0, Math.min(1, amount / 100000));\n}\n\nfunction parseTableCells(element: Element): Element[][] {\n const graphicData = allDescendantsNs(element, A_NS, 'graphicData').find(\n (el) => el.getAttribute('uri') === TABLE_URI,\n );\n if (!graphicData) return [];\n const table = firstChildNs(graphicData, A_NS, 'tbl');\n if (!table) return [];\n return childElementsNs(table, A_NS, 'tr').map((row) => childElementsNs(row, A_NS, 'tc'));\n}\n\nfunction tableModelFromCells(\n element: Element,\n cells: Element[][],\n context: PptParseContext = {},\n): PptTableModel {\n const values = cells.map((row) => row.map((cell) => tableCellText(cell)));\n const cellStyles = cells.map((row) => row.map((cell) => parseTableCellStyle(cell, context)));\n const mergedCells = parseTableCellMerges(cells);\n const table = allDescendantsNs(element, A_NS, 'tbl')[0];\n const columnWidths = table ? parseTableColumnWidths(table) : [];\n const rowHeights = table ? parseTableRowHeights(table) : [];\n return {\n values,\n rowCount: values.length,\n columnCount: values.reduce((max, row) => Math.max(max, row.length), 0),\n ...(columnWidths.length > 0 ? { columnWidths } : {}),\n ...(rowHeights.length > 0 ? { rowHeights } : {}),\n ...(cellStyles.some((row) => row.some((style) => Object.keys(style).length > 0))\n ? { cellStyles }\n : {}),\n ...(mergedCells.length > 0 ? { mergedCells } : {}),\n };\n}\n\nfunction tableCellText(cell: Element): string {\n const paragraphs = allDescendantsNs(cell, A_NS, 'p').map((paragraph) =>\n allDescendantsNs(paragraph, A_NS, 't').map(textOf).join(''),\n );\n while (paragraphs.length > 0 && paragraphs[paragraphs.length - 1] === '') paragraphs.pop();\n if (paragraphs.length > 0) return paragraphs.join('\\n');\n return allDescendantsNs(cell, A_NS, 't').map(textOf).join('');\n}\n\nfunction parseTableColumnWidths(table: Element): number[] {\n const grid = firstChildNs(table, A_NS, 'tblGrid');\n if (!grid) return [];\n return childElementsNs(grid, A_NS, 'gridCol')\n .map((column) => parseNumber(column.getAttribute('w')))\n .filter((value): value is number => value !== undefined);\n}\n\nfunction parseTableRowHeights(table: Element): number[] {\n return childElementsNs(table, A_NS, 'tr')\n .map((row) => parseNumber(row.getAttribute('h')))\n .filter((value): value is number => value !== undefined);\n}\n\nfunction parseTableCellMerges(cells: Element[][]): PptTableCellMerge[] {\n const result: PptTableCellMerge[] = [];\n for (let row = 0; row < cells.length; row++) {\n for (let column = 0; column < cells[row]!.length; column++) {\n const cell = cells[row]![column]!;\n const rowSpan = parseNumber(cell.getAttribute('rowSpan'));\n const columnSpan = parseNumber(cell.getAttribute('gridSpan'));\n const hMerge = parseBooleanAttr(cell.getAttribute('hMerge'));\n const vMerge = parseBooleanAttr(cell.getAttribute('vMerge'));\n if (\n rowSpan === undefined &&\n columnSpan === undefined &&\n hMerge === undefined &&\n vMerge === undefined\n ) {\n continue;\n }\n result.push({\n row,\n column,\n ...(rowSpan !== undefined ? { rowSpan } : {}),\n ...(columnSpan !== undefined ? { columnSpan } : {}),\n ...(hMerge !== undefined ? { hMerge } : {}),\n ...(vMerge !== undefined ? { vMerge } : {}),\n });\n }\n }\n return result;\n}\n\nfunction parseTableCellStyle(cell: Element, context: PptParseContext = {}): PptTableCellStyle {\n const tcPr = firstChildNs(cell, A_NS, 'tcPr');\n const fillColor = colorFromSolidFill(\n tcPr ? firstChildNs(tcPr, A_NS, 'solidFill') : null,\n context,\n );\n const fillGradient = parseGradientFill(\n tcPr ? firstChildNs(tcPr, A_NS, 'gradFill') : null,\n context,\n );\n const borders = tcPr ? parseTableCellBorders(tcPr, context) : undefined;\n const body = tcPr ? parseTableCellBodyProperties(tcPr) : undefined;\n const textStyle = parseTextStyle(cell, context);\n return {\n ...(fillColor ? { fillColor } : {}),\n ...(fillGradient ? { fillGradient } : {}),\n ...(borders ? { borders } : {}),\n ...(body ? { body } : {}),\n ...(Object.keys(textStyle).length > 0 ? { textStyle } : {}),\n };\n}\n\nfunction parseTableCellBorders(\n tcPr: Element,\n context: PptParseContext,\n): PptTableCellStyle['borders'] | undefined {\n const borders = {\n left: parseTableCellBorder(firstChildNs(tcPr, A_NS, 'lnL'), context),\n right: parseTableCellBorder(firstChildNs(tcPr, A_NS, 'lnR'), context),\n top: parseTableCellBorder(firstChildNs(tcPr, A_NS, 'lnT'), context),\n bottom: parseTableCellBorder(firstChildNs(tcPr, A_NS, 'lnB'), context),\n };\n return Object.values(borders).some(Boolean) ? borders : undefined;\n}\n\nfunction parseTableCellBorder(\n line: Element | null,\n context: PptParseContext,\n): NonNullable<PptTableCellStyle['borders']>['left'] | undefined {\n if (!line) return undefined;\n if (firstChildNs(line, A_NS, 'noFill')) {\n return { hidden: true };\n }\n const fill = parseSolidFill(firstChildNs(line, A_NS, 'solidFill'), context);\n const width = parseNumber(line.getAttribute('w') ?? null);\n const dash = parseLineDash(line);\n return {\n ...(fill.color ? { color: fill.color } : {}),\n ...(fill.opacity !== undefined ? { opacity: fill.opacity } : {}),\n ...(width !== undefined ? { width } : {}),\n ...(dash && dash !== 'solid' ? { dash } : {}),\n };\n}\n\nfunction parseTableCellBodyProperties(tcPr: Element): PptTextBodyProperties | undefined {\n const anchor = parseTextBodyAnchor(tcPr.getAttribute('anchor'));\n const wrap = parseTextBodyWrap(tcPr.getAttribute('wrap'));\n const insetLeft = parseNumber(tcPr.getAttribute('marL'));\n const insetTop = parseNumber(tcPr.getAttribute('marT'));\n const insetRight = parseNumber(tcPr.getAttribute('marR'));\n const insetBottom = parseNumber(tcPr.getAttribute('marB'));\n const properties: PptTextBodyProperties = {\n ...(anchor ? { anchor } : {}),\n ...(wrap ? { wrap } : {}),\n ...(insetLeft !== undefined ? { insetLeft } : {}),\n ...(insetTop !== undefined ? { insetTop } : {}),\n ...(insetRight !== undefined ? { insetRight } : {}),\n ...(insetBottom !== undefined ? { insetBottom } : {}),\n };\n return Object.keys(properties).length > 0 ? properties : undefined;\n}\n\nfunction deriveSlideTitle(shapes: PptShapeModel[]): string | undefined {\n const titleShape = shapes.find(\n (shape) => shape.kind === 'placeholder' && shape.text?.text.trim(),\n );\n if (titleShape?.text?.text.trim()) return titleShape.text.text.trim();\n const firstText = shapes.find((shape) => shape.text?.text.trim());\n return firstText?.text?.text.trim() || undefined;\n}\n\nfunction listMedia(pkg: Package): PptMediaModel[] {\n const media: PptMediaModel[] = [];\n for (const part of pkg.parts.values()) {\n if (!part.path.startsWith('ppt/media/')) continue;\n if (!isBinaryPart(part) && !part._originalBytes) continue;\n media.push({\n path: part.path,\n contentType: part.contentType,\n byteLength: part.bytes?.byteLength ?? part._originalBytes?.byteLength ?? 0,\n });\n }\n return media;\n}\n\nfunction listEmbeddedFonts(\n pkg: Package,\n presentationPath: string,\n presentationDoc: Document,\n presentationRels: Map<string, PptRelationship>,\n): PptFontModel[] {\n const fonts: PptFontModel[] = [];\n for (const embeddedFont of allDescendantsNs(presentationDoc, P_NS, 'embeddedFont')) {\n const family = firstChildNs(embeddedFont, P_NS, 'font')?.getAttribute('typeface') ?? '';\n if (!family) continue;\n for (const variant of ['regular', 'bold', 'italic', 'boldItalic'] as const) {\n const ref = firstChildNs(embeddedFont, P_NS, variant);\n const relId = ref?.getAttributeNS(R_NS, 'id') ?? ref?.getAttribute('r:id') ?? undefined;\n if (!relId) continue;\n const rel = presentationRels.get(relId);\n if (!rel || rel.type !== FONT_REL_TYPE) continue;\n const path = resolveRelationshipTarget(presentationPath, rel.target);\n const part = getPart(pkg, path);\n const bytes = part?.bytes ?? part?._originalBytes;\n if (!part || !bytes) continue;\n fonts.push({\n family,\n path,\n contentType: part.contentType,\n byteLength: bytes.byteLength,\n ...(variant === 'bold' || variant === 'boldItalic' ? { weight: 700 } : { weight: 400 }),\n ...(variant === 'italic' || variant === 'boldItalic'\n ? { style: 'italic' as const }\n : { style: 'normal' as const }),\n });\n }\n }\n return fonts;\n}\n\nexport function findOrCreateTransform(shape: Element): Element {\n let xfrm = allDescendantsLocal(shape, 'xfrm')[0];\n if (xfrm) return xfrm;\n const spPr = firstChildLocal(shape, 'spPr');\n if (!spPr) throw new Error('Presentation: shape has no transform container');\n xfrm = shape.ownerDocument.createElementNS(A_NS, 'a:xfrm');\n spPr.insertBefore(xfrm, spPr.firstChild);\n return xfrm;\n}\n","import { parseXmlDocument } from 'slimdom';\nimport { createPackage, createXmlPart, setPart, type Package } from '../pack/index.js';\nimport type { PptPresentationModel, PptShapeModel, PptSlideModel } from './model.js';\n\nconst CT_REL = 'application/vnd.openxmlformats-package.relationships+xml';\nconst CT_PRESENTATION =\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml';\nconst CT_SLIDE = 'application/vnd.openxmlformats-officedocument.presentationml.slide+xml';\nconst REL_NS = 'http://schemas.openxmlformats.org/package/2006/relationships';\nconst OFFICE_REL_NS = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\nconst P_NS = 'http://schemas.openxmlformats.org/presentationml/2006/main';\nconst A_NS = 'http://schemas.openxmlformats.org/drawingml/2006/main';\nconst R_NS = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\nconst TABLE_URI = 'http://schemas.openxmlformats.org/drawingml/2006/table';\n\nexport function createPresentationPackageFromModel(model: PptPresentationModel): Package {\n const pkg = createPackage();\n const slides = model.slides.map((slide, index) => normalizeSlide(slide, index));\n\n setXmlPart(pkg, '_rels/.rels', CT_REL, rootRelsXml());\n setXmlPart(pkg, 'ppt/presentation.xml', CT_PRESENTATION, presentationXml(model, slides));\n setXmlPart(pkg, 'ppt/_rels/presentation.xml.rels', CT_REL, presentationRelsXml(slides));\n for (const slide of slides) {\n setXmlPart(pkg, `ppt/slides/slide${slide.index + 1}.xml`, CT_SLIDE, slideXml(slide));\n }\n return pkg;\n}\n\nfunction normalizeSlide(slide: PptSlideModel, index: number): PptSlideModel {\n return {\n ...slide,\n id: slide.id || String(256 + index),\n index,\n relationshipId: slide.relationshipId || `rId${index + 1}`,\n path: `ppt/slides/slide${index + 1}.xml`,\n shapes: slide.shapes.map((shape, shapeIndex) => normalizeShape(shape, shapeIndex)),\n };\n}\n\nfunction normalizeShape(shape: PptShapeModel, index: number): PptShapeModel {\n return {\n ...shape,\n id: shape.id || String(index + 2),\n name: shape.name || `Shape ${index + 1}`,\n geometry: shape.geometry ?? {},\n };\n}\n\nfunction setXmlPart(pkg: Package, path: string, contentType: string, xml: string): void {\n setPart(\n pkg,\n createXmlPart({\n path,\n contentType,\n xmlDom: parseXmlDocument(xml) as unknown as Document,\n }),\n );\n}\n\nfunction rootRelsXml(): string {\n return xmlDeclaration(\n `<Relationships xmlns=\"${REL_NS}\">` +\n `<Relationship Id=\"rId1\" Type=\"${OFFICE_REL_NS}/officeDocument\" Target=\"ppt/presentation.xml\"/>` +\n `</Relationships>`,\n );\n}\n\nfunction presentationRelsXml(slides: PptSlideModel[]): string {\n return xmlDeclaration(\n `<Relationships xmlns=\"${REL_NS}\">` +\n slides\n .map(\n (slide) =>\n `<Relationship Id=\"${xmlAttr(slide.relationshipId ?? `rId${slide.index + 1}`)}\" ` +\n `Type=\"${OFFICE_REL_NS}/slide\" Target=\"slides/slide${slide.index + 1}.xml\"/>`,\n )\n .join('') +\n `</Relationships>`,\n );\n}\n\nfunction presentationXml(model: PptPresentationModel, slides: PptSlideModel[]): string {\n const size = model.slideSize ?? { width: 9144000, height: 5143500 };\n const slideIds = slides\n .map(\n (slide) =>\n `<p:sldId id=\"${xmlAttr(numericSlideId(slide, slide.index))}\" ` +\n `r:id=\"${xmlAttr(slide.relationshipId ?? `rId${slide.index + 1}`)}\"/>`,\n )\n .join('');\n return xmlDeclaration(\n `<p:presentation xmlns:p=\"${P_NS}\" xmlns:r=\"${R_NS}\">` +\n `<p:sldSz cx=\"${size.width}\" cy=\"${size.height}\"/>` +\n `<p:sldIdLst>${slideIds}</p:sldIdLst>` +\n `</p:presentation>`,\n );\n}\n\nfunction slideXml(slide: PptSlideModel): string {\n return xmlDeclaration(\n `<p:sld xmlns:p=\"${P_NS}\" xmlns:a=\"${A_NS}\" xmlns:r=\"${R_NS}\">` +\n `<p:cSld>` +\n `<p:spTree>` +\n `<p:nvGrpSpPr><p:cNvPr id=\"1\" name=\"\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>` +\n `<p:grpSpPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/></a:xfrm></p:grpSpPr>` +\n slide.shapes.map(shapeXml).join('') +\n `</p:spTree>` +\n `</p:cSld>` +\n `</p:sld>`,\n );\n}\n\nfunction shapeXml(shape: PptShapeModel, index: number): string {\n if (shape.table) return tableShapeXml(shape, index);\n return textShapeXml(shape, index);\n}\n\nfunction textShapeXml(shape: PptShapeModel, index: number): string {\n const id = xmlAttr(shape.id || String(index + 2));\n const name = xmlAttr(shape.name || `TextBox ${index + 1}`);\n const text = xmlText(shape.text?.text ?? '');\n return (\n `<p:sp>` +\n `<p:nvSpPr><p:cNvPr id=\"${id}\" name=\"${name}\"/><p:cNvSpPr/><p:nvPr/></p:nvSpPr>` +\n `<p:spPr>${xfrmXml(shape)}<a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></p:spPr>` +\n `<p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:t>${text}</a:t></a:r></a:p></p:txBody>` +\n `</p:sp>`\n );\n}\n\nfunction tableShapeXml(shape: PptShapeModel, index: number): string {\n const id = xmlAttr(shape.id || String(index + 2));\n const name = xmlAttr(shape.name || `Table ${index + 1}`);\n const rows = shape.table?.values ?? [];\n const columnCount = rows.reduce(\n (max, row) => Math.max(max, row.length),\n shape.table?.columnCount ?? 0,\n );\n const gridCols = Array.from({ length: columnCount }, () => `<a:gridCol w=\"1000000\"/>`).join('');\n const tr = rows\n .map(\n (row) =>\n `<a:tr h=\"370840\">` +\n Array.from({ length: columnCount }, (_, column) => tableCellXml(row[column] ?? '')).join(\n '',\n ) +\n `</a:tr>`,\n )\n .join('');\n return (\n `<p:graphicFrame>` +\n `<p:nvGraphicFramePr><p:cNvPr id=\"${id}\" name=\"${name}\"/><p:cNvGraphicFramePr/><p:nvPr/></p:nvGraphicFramePr>` +\n `<p:xfrm>${xfrmInnerXml(shape)}</p:xfrm>` +\n `<a:graphic><a:graphicData uri=\"${TABLE_URI}\">` +\n `<a:tbl><a:tblPr/><a:tblGrid>${gridCols}</a:tblGrid>${tr}</a:tbl>` +\n `</a:graphicData></a:graphic>` +\n `</p:graphicFrame>`\n );\n}\n\nfunction tableCellXml(text: string): string {\n return (\n `<a:tc>` +\n `<a:txBody><a:bodyPr/><a:p><a:r><a:t>${xmlText(text)}</a:t></a:r></a:p></a:txBody>` +\n `<a:tcPr/>` +\n `</a:tc>`\n );\n}\n\nfunction xfrmXml(shape: PptShapeModel): string {\n return `<a:xfrm>${xfrmInnerXml(shape)}</a:xfrm>`;\n}\n\nfunction xfrmInnerXml(shape: PptShapeModel): string {\n const geometry = shape.geometry ?? {};\n return (\n `<a:off x=\"${geometry.left ?? 0}\" y=\"${geometry.top ?? 0}\"/>` +\n `<a:ext cx=\"${geometry.width ?? 3000000}\" cy=\"${geometry.height ?? 600000}\"/>`\n );\n}\n\nfunction numericSlideId(slide: PptSlideModel, index: number): string {\n return /^\\d+$/.test(slide.id) ? slide.id : String(256 + index);\n}\n\nfunction xmlDeclaration(body: string): string {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${body}`;\n}\n\nfunction xmlText(value: string): string {\n return value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n\nfunction xmlAttr(value: string): string {\n return xmlText(value).replace(/\"/g, '&quot;').replace(/'/g, '&apos;');\n}\n","import {\n createBinaryPart,\n createXmlPart,\n createPackage,\n deletePart,\n fromZip,\n getPart,\n markDirty,\n setPart,\n toZip,\n type Package,\n type Part,\n} from '../pack/index.js';\nimport type {\n PptChartModel,\n PptChartData,\n PptChartSeriesData,\n PptCommentAddOptions,\n PptCommentModel,\n PptExportedImage,\n PptExportedFont,\n PptFindTextOptions,\n PptFontModel,\n PptHyperlinkModel,\n PptHyperlinkWriteOptions,\n PptImageInfo,\n PptImageSource,\n PptImageStyle,\n PptPresentationModel,\n PptPresentationProperties,\n PptShapeGeometry,\n PptShapeStyle,\n PptSlideSize,\n PptShapeKind,\n PptShapeModel,\n PptSlideModel,\n PptSlideLayoutModel,\n PptSlideProperties,\n PptSlideTimingModel,\n PptSlideTransitionModel,\n PptTableCellStyle,\n PptTableCellMerge,\n PptTextBodyProperties,\n PptThemeModel,\n PptTextMatch,\n PptTextParagraph,\n PptTextParagraphWrite,\n PptTextStyle,\n PptTextRun,\n PptTextReplaceOptions,\n PptTextReplaceResult,\n PptTextWriteOptions,\n} from './model.js';\nimport { PptMutationLog, type PptMutation } from './mutations.js';\nimport {\n findOrCreateTransform,\n readPresentationPackage,\n type PptReadResult,\n type PptShapeInternal,\n} from './pptx-reader.js';\nimport { createPresentationPackageFromModel } from './pptx-writer.js';\nimport {\n A_NS,\n OFFICE_REL_NS,\n P_NS,\n PKG_REL_NS,\n R_NS,\n allDescendantsNs,\n allDescendantsLocal,\n childElementsNs,\n firstChildLocal,\n firstChildNs,\n parseNumber,\n parseRelationships,\n relsPathForPart,\n resolveRelationshipTarget,\n setAttrIfDefined,\n textOf,\n} from './xml.js';\nimport { parseXmlDocument } from 'slimdom';\n\nconst XML_NS = 'http://www.w3.org/XML/1998/namespace';\nconst C_NS = 'http://schemas.openxmlformats.org/drawingml/2006/chart';\n\nexport interface PresentationCoreLoadOptions {\n presentationId?: string;\n}\n\nexport class PresentationCore {\n readonly presentationId: string;\n readonly slides: SlideCollectionCore;\n readonly themes: PresentationThemeCollectionCore;\n private readonly pkg: Package;\n private read: PptReadResult;\n private readonly mutations = new PptMutationLog();\n\n private constructor(init: { presentationId: string; pkg: Package; read: PptReadResult }) {\n this.presentationId = init.presentationId;\n this.pkg = init.pkg;\n this.read = init.read;\n this.slides = new SlideCollectionCore(this);\n this.themes = new PresentationThemeCollectionCore(this);\n }\n\n static async fromZip(\n bytes: Uint8Array | ArrayBuffer,\n opts: PresentationCoreLoadOptions = {},\n ): Promise<PresentationCore> {\n const pkg = await fromZip(bytes);\n return PresentationCore.fromPackage(pkg, opts);\n }\n\n static fromPackage(pkg: Package, opts: PresentationCoreLoadOptions = {}): PresentationCore {\n const presentationId = opts.presentationId ?? `ppt:${Date.now()}`;\n return new PresentationCore({\n presentationId,\n pkg,\n read: readPresentationPackage(pkg, presentationId),\n });\n }\n\n static fromModel(\n model: PptPresentationModel,\n opts: PresentationCoreLoadOptions = {},\n ): PresentationCore {\n const presentationId = opts.presentationId ?? model.id ?? `ppt:${Date.now()}`;\n const pkg = createPresentationPackageFromModel({ ...cloneModel(model), id: presentationId });\n return new PresentationCore({\n presentationId,\n pkg,\n read: readPresentationPackage(pkg, presentationId),\n });\n }\n\n toModel(): PptPresentationModel {\n return cloneModel(this.read.model);\n }\n\n properties(): PptPresentationProperties {\n const slides = this.read.model.slides;\n const shapes = slides.flatMap((slide) => slide.shapes);\n return {\n presentationId: this.presentationId,\n slideCount: slides.length,\n shapeCount: shapes.length,\n textShapeCount: shapes.filter((shape) => Boolean(shape.text) && !shape.table).length,\n tableCount: shapes.filter((shape) => Boolean(shape.table)).length,\n pictureCount: shapes.filter((shape) => shape.kind === 'picture').length,\n mediaCount: this.read.model.media?.length ?? 0,\n ...(this.read.model.slideSize ? { slideSize: { ...this.read.model.slideSize } } : {}),\n };\n }\n\n getMutations(): PptMutation[] {\n return this.mutations.list();\n }\n\n clearMutations(): void {\n this.mutations.clear();\n }\n\n findText(query: string | RegExp, options: PptFindTextOptions = {}): PptTextMatch[] {\n return this.read.slides.flatMap((slide) => findTextInSlide(slide, query, options));\n }\n\n replaceText(\n search: string | RegExp,\n replacement: string,\n options: PptTextReplaceOptions = {},\n ): PptTextReplaceResult {\n let count = 0;\n for (const slide of this.slides.items()) {\n count += slide.replaceText(search, replacement, options).count;\n }\n return { count };\n }\n\n exportImages(): PptExportedImage[] {\n return this.read.model.media?.map((media) => exportedImageFromPart(this, media.path)) ?? [];\n }\n\n exportFonts(): PptExportedFont[] {\n return this.read.model.fonts?.map((font) => exportedFontFromPart(this, font)) ?? [];\n }\n\n async toZip(): Promise<Uint8Array> {\n return toZip(this.pkg);\n }\n\n _slides(): PptSlideModel[] {\n return this.read.model.slides;\n }\n\n _getSlide(indexOrId: number | string): PptSlideModel | null {\n if (typeof indexOrId === 'number') return this.read.model.slides[indexOrId] ?? null;\n return (\n this.read.model.slides.find((slide) => slide.id === indexOrId || slide.name === indexOrId) ??\n null\n );\n }\n\n _getSlideInternal(slideId: string): PptReadResult['slides'][number] | null {\n return this.read.slides.find((slide) => slide.model.id === slideId) ?? null;\n }\n\n _record(mutation: PptMutation): void {\n this.mutations.record(mutation);\n }\n\n _package(): Package {\n return this.pkg;\n }\n\n _reloadFromPackage(): void {\n this.read = readPresentationPackage(this.pkg, this.presentationId);\n }\n}\n\nexport class PresentationThemeCollectionCore {\n constructor(private readonly presentation: PresentationCore) {}\n\n items(): PptThemeModel[] {\n return cloneModel(this.presentation.toModel().themes ?? []);\n }\n\n getCount(): number {\n return this.presentation.toModel().themes?.length ?? 0;\n }\n}\n\nexport class SlideCollectionCore {\n constructor(private readonly presentation: PresentationCore) {}\n\n items(): SlideCore[] {\n return this.presentation._slides().map((slide) => new SlideCore(this.presentation, slide.id));\n }\n\n getCount(): number {\n return this.presentation._slides().length;\n }\n\n getItem(indexOrId: number | string): SlideCore {\n const slide = this.presentation._getSlide(indexOrId);\n if (!slide) throw new Error(`Presentation: slide not found: ${String(indexOrId)}`);\n return new SlideCore(this.presentation, slide.id);\n }\n\n getItemOrNullObject(indexOrId: number | string): SlideCore | null {\n const slide = this.presentation._getSlide(indexOrId);\n return slide ? new SlideCore(this.presentation, slide.id) : null;\n }\n\n add(options: PptSlideAddOptions = {}): SlideCore {\n const slides = this.presentation._slides();\n const insertIndex = normalizeInsertIndex(options.index ?? 'end', slides.length);\n const nextNumber = nextSlidePartNumber(slides);\n const slidePath = `ppt/slides/slide${nextNumber}.xml`;\n const slideId = String(nextSlideId(slides));\n const relId = nextRelationshipId(this.presentation);\n const model: PptSlideModel = {\n id: slideId,\n index: insertIndex,\n relationshipId: relId,\n path: slidePath,\n shapes: [],\n };\n if (options.title) {\n model.title = options.title;\n model.shapes.push({\n id: '2',\n name: 'Title',\n kind: 'textBox',\n geometry: defaultTitleGeometry(this.presentation.toModel().slideSize),\n text: { text: options.title },\n });\n }\n setPart(\n this.presentation._package(),\n createXmlPart({\n path: slidePath,\n contentType: 'application/vnd.openxmlformats-officedocument.presentationml.slide+xml',\n xmlDom: parseXmlDocument(slideXmlFromModel(model)) as unknown as Document,\n }),\n );\n addPresentationRelationship(this.presentation, relId, `slides/slide${nextNumber}.xml`);\n addSlideId(this.presentation, insertIndex, slideId, relId);\n deletePart(this.presentation._package(), '[Content_Types].xml');\n this.presentation._reloadFromPackage();\n return new SlideCore(this.presentation, slideId);\n }\n\n copy(indexOrId: number | string, options: PptSlideCopyOptions = {}): SlideCore {\n const source = this.presentation._getSlide(indexOrId);\n if (!source?.path) throw new Error(`Presentation: slide not found: ${String(indexOrId)}`);\n const sourcePart = getPart(this.presentation._package(), source.path);\n if (!sourcePart?.xmlDom)\n throw new Error(`Presentation: source slide has no XML part: ${source.path}`);\n const slides = this.presentation._slides();\n const insertIndex = normalizeInsertIndex(options.index ?? source.index + 1, slides.length);\n const nextNumber = nextSlidePartNumber(slides);\n const slidePath = `ppt/slides/slide${nextNumber}.xml`;\n const slideId = String(nextSlideId(slides));\n const relId = nextRelationshipId(this.presentation);\n setPart(\n this.presentation._package(),\n createXmlPart({\n path: slidePath,\n contentType: sourcePart.contentType,\n xmlDom: sourcePart.xmlDom.cloneNode(true) as Document,\n }),\n );\n const sourceRels = getPart(this.presentation._package(), relsPathForPart(source.path));\n if (sourceRels?.xmlDom) {\n setPart(\n this.presentation._package(),\n createXmlPart({\n path: relsPathForPart(slidePath),\n contentType: sourceRels.contentType,\n xmlDom: sourceRels.xmlDom.cloneNode(true) as Document,\n }),\n );\n }\n addPresentationRelationship(this.presentation, relId, `slides/slide${nextNumber}.xml`);\n addSlideId(this.presentation, insertIndex, slideId, relId);\n deletePart(this.presentation._package(), '[Content_Types].xml');\n this.presentation._reloadFromPackage();\n return new SlideCore(this.presentation, slideId);\n }\n\n move(indexOrId: number | string, toIndex: number): void {\n const slide = this.presentation._getSlide(indexOrId);\n if (!slide?.relationshipId)\n throw new Error(`Presentation: slide not found: ${String(indexOrId)}`);\n const sldIdLst = getSlideIdList(this.presentation);\n const nodes = allDescendantsNs(sldIdLst, P_NS, 'sldId');\n const target = nodes.find(\n (node) =>\n (node.getAttributeNS(R_NS, 'id') ?? node.getAttribute('r:id')) === slide.relationshipId,\n );\n if (!target)\n throw new Error(`Presentation: slide relationship not found: ${slide.relationshipId}`);\n const bounded = Math.max(0, Math.min(toIndex, nodes.length - 1));\n sldIdLst.removeChild(target);\n const refreshed = allDescendantsNs(sldIdLst, P_NS, 'sldId');\n sldIdLst.insertBefore(target, refreshed[bounded] ?? null);\n markDirty(requirePart(this.presentation, 'ppt/presentation.xml'));\n this.presentation._reloadFromPackage();\n }\n\n deleteItem(indexOrId: number | string): void {\n const slide = this.presentation._getSlide(indexOrId);\n if (!slide?.relationshipId || !slide.path)\n throw new Error(`Presentation: slide not found: ${String(indexOrId)}`);\n if (this.presentation._slides().length <= 1)\n throw new Error('Presentation: cannot delete the final slide');\n removeSlideId(this.presentation, slide.relationshipId);\n removePresentationRelationship(this.presentation, slide.relationshipId);\n deletePart(this.presentation._package(), slide.path);\n deletePart(this.presentation._package(), relsPathForPart(slide.path));\n deletePart(this.presentation._package(), '[Content_Types].xml');\n this.presentation._reloadFromPackage();\n }\n}\n\nexport interface PptSlideAddOptions {\n index?: number | 'end';\n title?: string;\n}\n\nexport interface PptSlideCopyOptions {\n index?: number | 'end';\n}\n\nexport interface PptShapeAddOptions {\n name?: string;\n geometry?: Partial<PptShapeGeometry>;\n}\n\nexport interface PptTableAddOptions extends PptShapeAddOptions {\n values?: string[][];\n}\n\nexport interface PptImageAddOptions extends PptShapeAddOptions {\n mimeType?: string;\n filename?: string;\n}\n\nexport interface PptShapeDuplicateOptions extends PptShapeAddOptions {}\n\nexport type PptPresetShape = 'rect' | 'roundRect' | 'ellipse' | 'line';\n\nexport class SlideCore {\n readonly shapes: ShapeCollectionCore;\n readonly notes: SlideNotesApiCore;\n readonly comments: SlideCommentsApiCore;\n\n constructor(\n private readonly presentation: PresentationCore,\n private readonly slideId: string,\n ) {\n this.shapes = new ShapeCollectionCore(presentation, slideId);\n this.notes = new SlideNotesApiCore(presentation, slideId);\n this.comments = new SlideCommentsApiCore(presentation, slideId);\n }\n\n id(): string {\n return this.model().id;\n }\n\n index(): number {\n return this.model().index;\n }\n\n name(): string | undefined {\n return this.model().name;\n }\n\n title(): string | undefined {\n return this.model().title;\n }\n\n layout(): PptSlideLayoutModel | null {\n const layout = this.model().layout;\n return layout ? cloneModel(layout) : null;\n }\n\n transition(): PptSlideTransitionModel | null {\n const transition = this.model().transition;\n return transition ? cloneModel(transition) : null;\n }\n\n timing(): PptSlideTimingModel | null {\n const timing = this.model().timing;\n return timing ? cloneModel(timing) : null;\n }\n\n properties(): PptSlideProperties {\n return slideProperties(this.model());\n }\n\n setTitle(text: string, opts?: PptTextWriteOptions): void {\n const firstTextShape = this.model().shapes.find((shape) => shape.text);\n if (!firstTextShape)\n throw new Error(`Presentation: slide ${this.slideId} has no text shape for title`);\n this.shapes.getItem(firstTextShape.id).text.setText(text, opts);\n this.model().title = text;\n }\n\n findText(query: string | RegExp, options: PptFindTextOptions = {}): PptTextMatch[] {\n const slide = this.presentation._getSlideInternal(this.slideId);\n if (!slide) throw new Error(`Presentation: slide not found: ${this.slideId}`);\n return findTextInSlide(slide, query, options);\n }\n\n replaceText(\n search: string | RegExp,\n replacement: string,\n options: PptTextReplaceOptions = {},\n ): PptTextReplaceResult {\n let count = 0;\n const slide = this.model();\n for (const shape of flattenShapeModels(slide.shapes)) {\n if (shape.text && !shape.table) {\n count += new ShapeCore(this.presentation, this.slideId, shape.id).text.replace(\n search,\n replacement,\n options,\n ).count;\n }\n if (shape.table) {\n for (let row = 0; row < shape.table.values.length; row++) {\n for (let column = 0; column < shape.table.values[row]!.length; column++) {\n const current = shape.table.values[row]![column]!;\n const result = replaceTextValue(current, search, replacement, options);\n if (result.count > 0) {\n new ShapeCore(this.presentation, this.slideId, shape.id).table.setCellText(\n row,\n column,\n result.text,\n );\n count += result.count;\n }\n }\n }\n }\n }\n return { count };\n }\n\n duplicate(options?: PptSlideCopyOptions): SlideCore {\n return this.presentation.slides.copy(this.slideId, options);\n }\n\n moveTo(index: number): void {\n this.presentation.slides.move(this.slideId, index);\n }\n\n delete(): void {\n this.presentation.slides.deleteItem(this.slideId);\n }\n\n toModel(): PptSlideModel {\n return cloneModel(this.model());\n }\n\n private model(): PptSlideModel {\n const slide = this.presentation._getSlide(this.slideId);\n if (!slide) throw new Error(`Presentation: slide not found: ${this.slideId}`);\n return slide;\n }\n}\n\nexport class SlideNotesApiCore {\n constructor(\n private readonly presentation: PresentationCore,\n private readonly slideId: string,\n ) {}\n\n hasText(): boolean {\n return Boolean(this.model().notes?.text);\n }\n\n getText(): string {\n return this.model().notes?.text ?? '';\n }\n\n setText(text: string): void {\n const slide = this.internal();\n const part = ensureNotesSlidePart(this.presentation, slide);\n setNotesText(part.xmlDom!, text);\n markDirty(part);\n this.presentation._reloadFromPackage();\n this.presentation._record({\n type: 'slide.notes.set',\n slideId: this.slideId,\n text,\n });\n }\n\n clear(): void {\n const slide = this.internal();\n const part = getNotesSlidePart(this.presentation, slide);\n if (part?.xmlDom) {\n setNotesText(part.xmlDom, '');\n markDirty(part);\n this.presentation._reloadFromPackage();\n } else {\n slide.model.notes = { text: '' };\n }\n this.presentation._record({\n type: 'slide.notes.clear',\n slideId: this.slideId,\n });\n }\n\n private model(): PptSlideModel {\n const slide = this.presentation._getSlide(this.slideId);\n if (!slide) throw new Error(`Presentation: slide not found: ${this.slideId}`);\n return slide;\n }\n\n private internal(): PptReadResult['slides'][number] {\n const slide = this.presentation._getSlideInternal(this.slideId);\n if (!slide) throw new Error(`Presentation: slide not found: ${this.slideId}`);\n return slide;\n }\n}\n\nexport class SlideCommentsApiCore {\n constructor(\n private readonly presentation: PresentationCore,\n private readonly slideId: string,\n ) {}\n\n items(): PptCommentModel[] {\n return cloneModel(this.model().comments ?? []);\n }\n\n getCount(): number {\n return this.model().comments?.length ?? 0;\n }\n\n add(options: PptCommentAddOptions): PptCommentModel {\n if (!options.text) throw new Error('Presentation: comment text is required');\n const slide = this.internal();\n const author = ensureCommentAuthor(this.presentation, {\n name: options.author ?? 'Coco Reviewer',\n initials: options.initials ?? 'CR',\n });\n const part = ensureSlideCommentsPart(this.presentation, slide);\n const comment = appendSlideComment(part.xmlDom!, {\n ...options,\n authorId: author.id,\n });\n markDirty(part);\n this.presentation._reloadFromPackage();\n this.presentation._record({\n type: 'slide.comment.add',\n slideId: this.slideId,\n comment: options,\n });\n return comment;\n }\n\n delete(commentId: string): void {\n const slide = this.internal();\n const part = getSlideCommentsPart(this.presentation, slide);\n if (!part?.xmlDom) return;\n const removed = removeSlideComment(part.xmlDom, commentId);\n if (!removed) throw new Error(`Presentation: comment not found: ${commentId}`);\n markDirty(part);\n this.presentation._reloadFromPackage();\n this.presentation._record({\n type: 'slide.comment.delete',\n slideId: this.slideId,\n commentId,\n });\n }\n\n clear(): void {\n const slide = this.internal();\n const part = getSlideCommentsPart(this.presentation, slide);\n if (part?.xmlDom) {\n for (const comment of allDescendantsNs(part.xmlDom, P_NS, 'cm')) {\n comment.parentNode?.removeChild(comment);\n }\n markDirty(part);\n this.presentation._reloadFromPackage();\n }\n this.presentation._record({\n type: 'slide.comments.clear',\n slideId: this.slideId,\n });\n }\n\n private model(): PptSlideModel {\n const slide = this.presentation._getSlide(this.slideId);\n if (!slide) throw new Error(`Presentation: slide not found: ${this.slideId}`);\n return slide;\n }\n\n private internal(): PptReadResult['slides'][number] {\n const slide = this.presentation._getSlideInternal(this.slideId);\n if (!slide) throw new Error(`Presentation: slide not found: ${this.slideId}`);\n return slide;\n }\n}\n\nexport class ShapeCollectionCore {\n constructor(\n private readonly presentation: PresentationCore,\n private readonly slideId: string,\n private readonly parentShapeId?: string,\n ) {}\n\n items(): ShapeCore[] {\n return this.shapeModels().map(\n (shape) => new ShapeCore(this.presentation, this.slideId, shape.id),\n );\n }\n\n getCount(): number {\n return this.shapeModels().length;\n }\n\n getItem(idOrName: string): ShapeCore {\n const matches = this.shapeModels().filter(\n (shape) => shape.id === idOrName || shape.name === idOrName,\n );\n if (matches.length === 0) throw new Error(`Presentation: shape not found: ${idOrName}`);\n if (matches.length > 1) throw new Error(`Presentation: shape lookup is ambiguous: ${idOrName}`);\n return new ShapeCore(this.presentation, this.slideId, matches[0]!.id);\n }\n\n getItemAt(index: number): ShapeCore {\n const shape = this.shapeModels()[index];\n if (!shape) throw new Error(`Presentation: shape index out of range: ${index}`);\n return new ShapeCore(this.presentation, this.slideId, shape.id);\n }\n\n getItemOrNullObject(idOrName: string): ShapeCore | null {\n const matches = this.shapeModels().filter(\n (shape) => shape.id === idOrName || shape.name === idOrName,\n );\n return matches.length === 1\n ? new ShapeCore(this.presentation, this.slideId, matches[0]!.id)\n : null;\n }\n\n addTextBox(text: string, options: PptShapeAddOptions = {}): ShapeCore {\n const slide = this.slideModel();\n const shape = makeTextShapeModel(slide, text, options);\n appendShapeXml(this.presentation, this.slideId, simpleTextShapeXml(shape, slide.shapes.length));\n this.presentation._reloadFromPackage();\n this.presentation._record({\n type: 'shape.add',\n slideId: this.slideId,\n shapeId: shape.id,\n kind: 'textBox',\n });\n return new ShapeCore(this.presentation, this.slideId, shape.id);\n }\n\n addTable(rowCount: number, columnCount: number, options: PptTableAddOptions = {}): ShapeCore {\n if (!Number.isInteger(rowCount) || rowCount <= 0)\n throw new Error('Presentation: table rowCount must be positive');\n if (!Number.isInteger(columnCount) || columnCount <= 0)\n throw new Error('Presentation: table columnCount must be positive');\n const slide = this.slideModel();\n const shape = makeTableShapeModel(slide, rowCount, columnCount, options);\n appendShapeXml(this.presentation, this.slideId, tableShapeXml(shape, slide.shapes.length));\n this.presentation._reloadFromPackage();\n this.presentation._record({\n type: 'shape.add',\n slideId: this.slideId,\n shapeId: shape.id,\n kind: 'table',\n });\n return new ShapeCore(this.presentation, this.slideId, shape.id);\n }\n\n addImage(source: PptImageSource, options: PptImageAddOptions = {}): ShapeCore {\n const slide = this.slideModel();\n const image = imageSourceInfo(source, options);\n const mediaPath = nextMediaPath(this.presentation, image.extension);\n const relationshipId = addSlideImageRelationship(this.presentation, this.slideId, mediaPath);\n const shape = makeImageShapeModel(slide, relationshipId, mediaPath, image.contentType, options);\n setPart(\n this.presentation._package(),\n createBinaryPart({\n path: mediaPath,\n contentType: image.contentType,\n bytes: image.bytes,\n originalBytes: image.bytes,\n }),\n );\n appendShapeXml(this.presentation, this.slideId, pictureShapeXml(shape, slide.shapes.length));\n deletePart(this.presentation._package(), '[Content_Types].xml');\n this.presentation._reloadFromPackage();\n this.presentation._record({\n type: 'shape.add',\n slideId: this.slideId,\n shapeId: shape.id,\n kind: 'picture',\n imageRef: mediaPath,\n });\n return new ShapeCore(this.presentation, this.slideId, shape.id);\n }\n\n addShape(preset: PptPresetShape, options: PptShapeAddOptions = {}): ShapeCore {\n const slide = this.slideModel();\n const shape = makePresetShapeModel(slide, preset, options);\n appendShapeXml(\n this.presentation,\n this.slideId,\n presetShapeXml(shape, preset, slide.shapes.length),\n );\n this.presentation._reloadFromPackage();\n this.presentation._record({\n type: 'shape.add',\n slideId: this.slideId,\n shapeId: shape.id,\n kind: shape.kind === 'line' ? 'line' : 'geometricShape',\n });\n return new ShapeCore(this.presentation, this.slideId, shape.id);\n }\n\n deleteItem(idOrName: string): void {\n this.getItem(idOrName).delete();\n }\n\n private slideModel(): PptSlideModel {\n const slide = this.presentation._getSlide(this.slideId);\n if (!slide) throw new Error(`Presentation: slide not found: ${this.slideId}`);\n return slide;\n }\n\n private shapeModels(): PptShapeModel[] {\n if (!this.parentShapeId) return this.slideModel().shapes;\n const parent = getShapeInternal(this.presentation, this.slideId, this.parentShapeId);\n if (parent.model.kind !== 'group')\n throw new Error(`Presentation: shape ${this.parentShapeId} is not a group`);\n return parent.model.children ?? [];\n }\n}\n\nexport class ShapeCore {\n readonly chart: ShapeChartApiCore;\n readonly text: ShapeTextApiCore;\n readonly image: ShapeImageApiCore;\n readonly table: TableApiCore;\n readonly group: ShapeGroupApiCore;\n\n constructor(\n private readonly presentation: PresentationCore,\n private readonly slideId: string,\n private readonly shapeId: string,\n ) {\n this.chart = new ShapeChartApiCore(presentation, slideId, shapeId);\n this.text = new ShapeTextApiCore(presentation, slideId, shapeId);\n this.image = new ShapeImageApiCore(presentation, slideId, shapeId);\n this.table = new TableApiCore(presentation, slideId, shapeId);\n this.group = new ShapeGroupApiCore(presentation, slideId, shapeId);\n }\n\n id(): string {\n return this.model().id;\n }\n\n name(): string | undefined {\n return this.model().name;\n }\n\n setName(name: string): void {\n const shape = this.internal();\n const cNvPr = allDescendantsNs(shape.element, P_NS, 'cNvPr')[0];\n if (!cNvPr) throw new Error(`Presentation: shape ${this.shapeId} has no cNvPr`);\n cNvPr.setAttribute('name', name);\n shape.model.name = name;\n markDirty(shape.slide.part);\n this.presentation._record({\n type: 'shape.name.set',\n slideId: this.slideId,\n shapeId: this.shapeId,\n name,\n });\n }\n\n kind(): PptShapeKind {\n return this.model().kind;\n }\n\n geometry(): PptShapeGeometry {\n return { ...this.model().geometry };\n }\n\n style(): PptShapeStyle {\n return { ...this.model().style };\n }\n\n hyperlink(): PptHyperlinkModel | null {\n const hyperlink = this.model().hyperlink;\n return hyperlink ? cloneModel(hyperlink) : null;\n }\n\n setHyperlink(hyperlink: PptHyperlinkWriteOptions): void {\n const shape = this.internal();\n const cNvPr = allDescendantsNs(shape.element, P_NS, 'cNvPr')[0];\n if (!cNvPr) throw new Error(`Presentation: shape ${this.shapeId} has no cNvPr`);\n const hlink = findOrCreateHyperlink(cNvPr);\n const model = setHyperlinkOnElement(this.presentation, shape.slide, hlink, hyperlink);\n shape.model.hyperlink = model;\n markDirty(shape.slide.part);\n this.presentation._record({\n type: 'shape.hyperlink.set',\n slideId: this.slideId,\n shapeId: this.shapeId,\n hyperlink,\n });\n }\n\n clearHyperlink(): void {\n const shape = this.internal();\n const cNvPr = allDescendantsNs(shape.element, P_NS, 'cNvPr')[0];\n if (!cNvPr) return;\n const hlink = firstChildNs(cNvPr, A_NS, 'hlinkClick');\n clearHyperlinkElement(this.presentation, shape.slide, hlink);\n delete shape.model.hyperlink;\n markDirty(shape.slide.part);\n this.presentation._record({\n type: 'shape.hyperlink.clear',\n slideId: this.slideId,\n shapeId: this.shapeId,\n });\n }\n\n setGeometry(geometry: Partial<PptShapeGeometry>): void {\n const shape = this.internal();\n const model = shape.model;\n model.geometry = { ...model.geometry, ...geometry };\n const xfrm = findOrCreateTransform(shape.element);\n let off = firstChildNs(xfrm, A_NS, 'off');\n if (!off) {\n off = xfrm.ownerDocument.createElementNS(A_NS, 'a:off');\n xfrm.appendChild(off);\n }\n let ext = firstChildNs(xfrm, A_NS, 'ext');\n if (!ext) {\n ext = xfrm.ownerDocument.createElementNS(A_NS, 'a:ext');\n xfrm.appendChild(ext);\n }\n setAttrIfDefined(off, 'x', model.geometry.left);\n setAttrIfDefined(off, 'y', model.geometry.top);\n setAttrIfDefined(ext, 'cx', model.geometry.width);\n setAttrIfDefined(ext, 'cy', model.geometry.height);\n setAttrIfDefined(xfrm, 'rot', degreesToOoxmlAngle(model.geometry.rotation));\n markDirty(shape.slide.part);\n this.presentation._reloadFromPackage();\n this.presentation._record({\n type: 'shape.geometry.set',\n slideId: this.slideId,\n shapeId: this.shapeId,\n geometry,\n });\n }\n\n setFillColor(color: string): void {\n this.setStyle({ fillColor: normalizeHexColor(color) });\n }\n\n setLineStyle(style: Pick<PptShapeStyle, 'lineColor' | 'lineWidth'>): void {\n this.setStyle({\n ...(style.lineColor ? { lineColor: normalizeHexColor(style.lineColor) } : {}),\n ...(style.lineWidth !== undefined ? { lineWidth: style.lineWidth } : {}),\n });\n }\n\n setStyle(style: Partial<PptShapeStyle>): void {\n const shape = this.internal();\n const normalized: Partial<PptShapeStyle> = {\n ...(style.fillColor ? { fillColor: normalizeHexColor(style.fillColor) } : {}),\n ...(style.opacity !== undefined ? { opacity: normalizeOpacity(style.opacity) } : {}),\n ...(style.lineColor ? { lineColor: normalizeHexColor(style.lineColor) } : {}),\n ...(style.lineOpacity !== undefined\n ? { lineOpacity: normalizeOpacity(style.lineOpacity) }\n : {}),\n ...(style.lineWidth !== undefined ? { lineWidth: style.lineWidth } : {}),\n ...(style.shadow ? { shadow: normalizeShadow(style.shadow) } : {}),\n };\n const spPr = findOrCreateShapeProperties(shape.element);\n if (normalized.fillColor) setSolidFill(spPr, normalized.fillColor, normalized.opacity);\n else if (normalized.opacity !== undefined)\n setExistingSolidFillOpacity(spPr, normalized.opacity, shape.model.style?.fillColor);\n if (\n normalized.lineColor ||\n normalized.lineOpacity !== undefined ||\n normalized.lineWidth !== undefined\n ) {\n const ln = findOrCreateLine(spPr);\n if (normalized.lineColor) setSolidFill(ln, normalized.lineColor, normalized.lineOpacity);\n else if (normalized.lineOpacity !== undefined)\n setExistingSolidFillOpacity(ln, normalized.lineOpacity, shape.model.style?.lineColor);\n if (normalized.lineWidth !== undefined) ln.setAttribute('w', String(normalized.lineWidth));\n }\n if (normalized.shadow) setOuterShadow(spPr, normalized.shadow);\n shape.model.style = { ...shape.model.style, ...normalized };\n markDirty(shape.slide.part);\n this.presentation._record({\n type: 'shape.style.set',\n slideId: this.slideId,\n shapeId: this.shapeId,\n style: normalized,\n });\n }\n\n delete(): void {\n const shape = this.internal();\n const parent = shape.element.parentNode;\n if (!parent) throw new Error(`Presentation: shape ${this.shapeId} has no parent XML node`);\n parent.removeChild(shape.element);\n markDirty(shape.slide.part);\n this.presentation._record({\n type: 'shape.delete',\n slideId: this.slideId,\n shapeId: this.shapeId,\n });\n this.presentation._reloadFromPackage();\n }\n\n duplicate(options: PptShapeDuplicateOptions = {}): ShapeCore {\n const shape = this.internal();\n const parent = shape.element.parentNode;\n if (!parent) throw new Error(`Presentation: shape ${this.shapeId} has no parent XML node`);\n const slide = shape.slide.model;\n const newId = nextShapeId(slide);\n const clone = shape.element.cloneNode(true) as Element;\n const name = options.name ?? `${shape.model.name ?? shape.model.kind} Copy ${newId}`;\n const cNvPr = allDescendantsNs(clone, P_NS, 'cNvPr')[0];\n if (!cNvPr) throw new Error(`Presentation: shape ${this.shapeId} has no cNvPr`);\n cNvPr.setAttribute('id', newId);\n cNvPr.setAttribute('name', name);\n if (options.geometry)\n applyGeometryToElement(clone, { ...shape.model.geometry, ...options.geometry });\n let imageRef: string | undefined;\n if (shape.model.kind === 'picture' && shape.model.image?.targetPath) {\n imageRef = duplicatePictureMedia(\n this.presentation,\n this.slideId,\n clone,\n shape.model.image.targetPath,\n );\n }\n parent.insertBefore(clone, shape.element.nextSibling);\n markDirty(shape.slide.part);\n this.presentation._reloadFromPackage();\n this.presentation._record({\n type: 'shape.add',\n slideId: this.slideId,\n shapeId: newId,\n kind: shape.model.kind,\n ...(imageRef ? { imageRef } : {}),\n });\n return new ShapeCore(this.presentation, this.slideId, newId);\n }\n\n bringToFront(): void {\n this.moveInZOrder('front');\n }\n\n sendToBack(): void {\n this.moveInZOrder('back');\n }\n\n toModel(): PptShapeModel {\n return cloneModel(this.model());\n }\n\n private model(): PptShapeModel {\n return this.internal().model;\n }\n\n private internal(): PptShapeInternal {\n return getShapeInternal(this.presentation, this.slideId, this.shapeId);\n }\n\n private moveInZOrder(position: 'front' | 'back'): void {\n const shape = this.internal();\n const parent = shape.element.parentNode;\n if (!parent) throw new Error(`Presentation: shape ${this.shapeId} has no parent XML node`);\n parent.removeChild(shape.element);\n if (position === 'front') {\n parent.appendChild(shape.element);\n } else {\n parent.insertBefore(shape.element, firstShapeTreeElement(parent) ?? null);\n }\n markDirty(shape.slide.part);\n this.presentation._record({\n type: 'shape.zOrder.set',\n slideId: this.slideId,\n shapeId: this.shapeId,\n position,\n });\n this.presentation._reloadFromPackage();\n }\n}\n\nexport class ShapeTextApiCore {\n constructor(\n private readonly presentation: PresentationCore,\n private readonly slideId: string,\n private readonly shapeId: string,\n ) {}\n\n hasText(): boolean {\n return this.internal().textElements.length > 0;\n }\n\n getText(): string {\n const shape = this.internal();\n if (shape.textElements.length === 0)\n throw new Error(`Presentation: shape ${this.shapeId} has no text body`);\n return shape.model.text?.text ?? '';\n }\n\n style(): PptTextStyle {\n return { ...this.internal().model.text?.style };\n }\n\n body(): PptTextBodyProperties {\n return { ...this.internal().model.text?.body };\n }\n\n paragraphs(): PptTextParagraph[] {\n const shape = this.internal();\n if (shape.textElements.length === 0)\n throw new Error(`Presentation: shape ${this.shapeId} has no text body`);\n return textParagraphsFromElement(shape.element, shape.slide);\n }\n\n runs(): PptTextRun[] {\n return this.paragraphs().flatMap((paragraph) => paragraph.runs);\n }\n\n setParagraphs(paragraphs: PptTextParagraphWrite[]): void {\n const shape = this.internal();\n if (shape.textElements.length === 0)\n throw new Error(`Presentation: shape ${this.shapeId} has no text body`);\n const textBody = findShapeTextBody(shape.element);\n if (!textBody) throw new Error(`Presentation: shape ${this.shapeId} has no text body`);\n replaceTextBodyParagraphs(textBody, paragraphs);\n markDirty(shape.slide.part);\n this.presentation._reloadFromPackage();\n const updated = this.internal();\n const nextParagraphs = textParagraphsFromElement(updated.element, updated.slide);\n const text = nextParagraphs.map((paragraph) => paragraph.text).join('\\n');\n updated.model.text = { text, paragraphs: nextParagraphs };\n if (updated.slide.model.title === shape.model.text?.text) updated.slide.model.title = text;\n this.presentation._record({\n type: 'shape.text.paragraphs.set',\n slideId: this.slideId,\n shapeId: this.shapeId,\n paragraphs,\n });\n }\n\n setRunStyle(runIndex: number, style: Partial<PptTextStyle>): void {\n const shape = this.internal();\n if (shape.textElements.length === 0)\n throw new Error(`Presentation: shape ${this.shapeId} has no text body`);\n const textBody = findShapeTextBody(shape.element);\n if (!textBody) throw new Error(`Presentation: shape ${this.shapeId} has no text body`);\n const runs = flatTextRuns(textBody);\n const run = runs[requireIndex(runIndex, runs.length, 'run')];\n if (!run) throw new Error(`Presentation: text run out of range: ${runIndex}`);\n const normalized = normalizeTextStyle(style);\n applyTextStyleToRun(run, normalized);\n shape.model.text = {\n text: shape.model.text?.text ?? this.getText(),\n paragraphs: textParagraphsFromElement(shape.element, shape.slide),\n style: { ...shape.model.text?.style, ...normalized },\n };\n markDirty(shape.slide.part);\n this.presentation._record({\n type: 'shape.text.run.style.set',\n slideId: this.slideId,\n shapeId: this.shapeId,\n runIndex,\n style: normalized,\n });\n }\n\n setRunTextStyle(runIndex: number, style: Partial<PptTextStyle>): void {\n this.setRunStyle(runIndex, style);\n }\n\n setRunHyperlink(runIndex: number, hyperlink: PptHyperlinkWriteOptions): void {\n const shape = this.internal();\n if (shape.textElements.length === 0)\n throw new Error(`Presentation: shape ${this.shapeId} has no text body`);\n const textBody = findShapeTextBody(shape.element);\n if (!textBody) throw new Error(`Presentation: shape ${this.shapeId} has no text body`);\n const runs = flatTextRuns(textBody);\n const run = runs[requireIndex(runIndex, runs.length, 'run')];\n if (!run) throw new Error(`Presentation: text run out of range: ${runIndex}`);\n const rPr = findOrCreateRunProperties(run);\n const hlink = findOrCreateHyperlink(rPr);\n setHyperlinkOnElement(this.presentation, shape.slide, hlink, hyperlink);\n shape.model.text = {\n text: shape.model.text?.text ?? this.getText(),\n paragraphs: textParagraphsFromElement(shape.element, shape.slide),\n style: shape.model.text?.style,\n };\n markDirty(shape.slide.part);\n this.presentation._record({\n type: 'shape.text.run.hyperlink.set',\n slideId: this.slideId,\n shapeId: this.shapeId,\n runIndex,\n hyperlink,\n });\n }\n\n clearRunHyperlink(runIndex: number): void {\n const shape = this.internal();\n if (shape.textElements.length === 0)\n throw new Error(`Presentation: shape ${this.shapeId} has no text body`);\n const textBody = findShapeTextBody(shape.element);\n if (!textBody) throw new Error(`Presentation: shape ${this.shapeId} has no text body`);\n const runs = flatTextRuns(textBody);\n const run = runs[requireIndex(runIndex, runs.length, 'run')];\n if (!run) throw new Error(`Presentation: text run out of range: ${runIndex}`);\n const rPr = firstChildNs(run, A_NS, 'rPr');\n clearHyperlinkElement(\n this.presentation,\n shape.slide,\n rPr ? firstChildNs(rPr, A_NS, 'hlinkClick') : null,\n );\n shape.model.text = {\n text: shape.model.text?.text ?? this.getText(),\n paragraphs: textParagraphsFromElement(shape.element, shape.slide),\n style: shape.model.text?.style,\n };\n markDirty(shape.slide.part);\n this.presentation._record({\n type: 'shape.text.run.hyperlink.clear',\n slideId: this.slideId,\n shapeId: this.shapeId,\n runIndex,\n });\n }\n\n setText(text: string, opts: PptTextWriteOptions = {}): void {\n const shape = this.internal();\n if (shape.textElements.length === 0)\n throw new Error(`Presentation: shape ${this.shapeId} has no text body`);\n const oldText = shape.model.text?.text ?? '';\n if (opts.preserveFirstRunStyle) {\n const [firstParagraph] = textParagraphsFromElement(shape.element, shape.slide);\n const firstRun =\n firstParagraph?.runs.find((run) => run.text.length > 0) ?? firstParagraph?.runs[0];\n this.setParagraphs([\n {\n text,\n ...(firstParagraph?.style ? { style: firstParagraph.style } : {}),\n runs: [\n {\n text,\n ...(firstRun?.style ? { style: firstRun.style } : {}),\n },\n ],\n },\n ]);\n const updated = this.internal();\n updated.model.text = {\n ...(updated.model.text ?? { text }),\n ...(firstRun?.style ? { style: firstRun.style } : {}),\n };\n if (updated.slide.model.title === oldText) updated.slide.model.title = text;\n return;\n }\n const previousStyle = shape.model.text?.style;\n shape.textElements[0]!.textContent = text;\n for (const extra of shape.textElements.slice(1)) extra.textContent = '';\n shape.model.text = {\n text,\n paragraphs: textParagraphsFromElement(shape.element, shape.slide),\n ...(previousStyle ? { style: previousStyle } : {}),\n };\n if (shape.slide.model.title === oldText) shape.slide.model.title = text;\n markDirty(shape.slide.part);\n this.presentation._record({\n type: 'shape.text.set',\n slideId: this.slideId,\n shapeId: this.shapeId,\n text,\n });\n }\n\n setStyle(style: Partial<PptTextStyle>): void {\n const shape = this.internal();\n if (shape.textElements.length === 0)\n throw new Error(`Presentation: shape ${this.shapeId} has no text body`);\n const normalized = normalizeTextStyle(style);\n for (const textEl of shape.textElements) {\n const run = textEl.parentNode;\n if (!run || run.nodeType !== 1) continue;\n applyTextStyleToRun(run as Element, normalized);\n }\n shape.model.text = {\n text: shape.model.text?.text ?? this.getText(),\n style: { ...shape.model.text?.style, ...normalized },\n };\n markDirty(shape.slide.part);\n this.presentation._record({\n type: 'shape.text.style.set',\n slideId: this.slideId,\n shapeId: this.shapeId,\n style: normalized,\n });\n }\n\n setTextStyle(style: Partial<PptTextStyle>): void {\n this.setStyle(style);\n }\n\n setBodyProperties(body: Partial<PptTextBodyProperties>): void {\n const shape = this.internal();\n if (shape.textElements.length === 0)\n throw new Error(`Presentation: shape ${this.shapeId} has no text body`);\n const textBody = findShapeTextBody(shape.element);\n if (!textBody) throw new Error(`Presentation: shape ${this.shapeId} has no text body`);\n const bodyPr = findOrCreateTextBodyProperties(textBody);\n const normalized = normalizeShapeTextBodyProperties(body);\n applyShapeTextBodyProperties(bodyPr, normalized);\n shape.model.text = {\n ...(shape.model.text ?? { text: this.getText() }),\n body: { ...shape.model.text?.body, ...normalized },\n paragraphs: textParagraphsFromElement(shape.element, shape.slide),\n };\n markDirty(shape.slide.part);\n this.presentation._record({\n type: 'shape.text.body.set',\n slideId: this.slideId,\n shapeId: this.shapeId,\n body: normalized,\n });\n }\n\n setBold(enabled: boolean): void {\n this.setStyle({ bold: enabled });\n }\n\n setItalic(enabled: boolean): void {\n this.setStyle({ italic: enabled });\n }\n\n setAlignment(alignment: PptTextStyle['alignment']): void {\n if (!alignment) throw new Error('Presentation: text alignment is required');\n this.setStyle({ alignment });\n }\n\n replace(\n search: string | RegExp,\n replacement: string,\n opts: PptTextReplaceOptions = {},\n ): PptTextReplaceResult {\n const current = this.getText();\n const pattern =\n typeof search === 'string'\n ? new RegExp(escapeRegExp(search), opts.caseSensitive ? 'g' : 'gi')\n : search;\n let count = 0;\n const next = current.replace(pattern, () => {\n count++;\n return replacement;\n });\n if (count > 0) {\n this.setText(next, opts);\n this.presentation._record({\n type: 'shape.text.replace',\n slideId: this.slideId,\n shapeId: this.shapeId,\n search: String(search),\n replacement,\n count,\n });\n }\n return { count };\n }\n\n private internal(): PptShapeInternal {\n return getShapeInternal(this.presentation, this.slideId, this.shapeId);\n }\n}\n\nexport class ShapeChartApiCore {\n constructor(\n private readonly presentation: PresentationCore,\n private readonly slideId: string,\n private readonly shapeId: string,\n ) {}\n\n isChart(): boolean {\n const shape = this.internal().model;\n return shape.kind === 'chart' && Boolean(shape.chart);\n }\n\n getInfo(): PptChartModel | null {\n const chart = this.internal().model.chart;\n return chart ? cloneModel(chart) : null;\n }\n\n getData(): PptChartData | null {\n const part = this.chartPart();\n if (!part?.xmlDom) return null;\n return chartDataFromDocument(part.xmlDom);\n }\n\n setData(data: PptChartData): void {\n const shape = this.internal();\n const part = this.chartPart();\n if (!part?.xmlDom) throw new Error(`Presentation: chart ${this.shapeId} has no chart XML`);\n setChartData(part.xmlDom, data);\n markDirty(part);\n shape.model.chart = {\n ...shape.model.chart,\n ...(data.title ? { title: data.title } : {}),\n seriesNames: data.series\n .map((series) => series.name)\n .filter((value): value is string => Boolean(value)),\n };\n this.presentation._record({\n type: 'shape.chart.data.set',\n slideId: this.slideId,\n shapeId: this.shapeId,\n data,\n });\n }\n\n private internal(): PptShapeInternal {\n return getShapeInternal(this.presentation, this.slideId, this.shapeId);\n }\n\n private chartPart(): Part | undefined {\n const chart = this.internal().model.chart;\n return chart?.targetPath ? getPart(this.presentation._package(), chart.targetPath) : undefined;\n }\n}\n\nexport class ShapeGroupApiCore {\n private readonly children: ShapeCollectionCore;\n\n constructor(\n private readonly presentation: PresentationCore,\n private readonly slideId: string,\n private readonly shapeId: string,\n ) {\n this.children = new ShapeCollectionCore(presentation, slideId, shapeId);\n }\n\n isGroup(): boolean {\n return this.internal().model.kind === 'group';\n }\n\n items(): ShapeCore[] {\n this.requireGroup();\n return this.children.items();\n }\n\n getCount(): number {\n this.requireGroup();\n return this.children.getCount();\n }\n\n getItem(idOrName: string): ShapeCore {\n this.requireGroup();\n return this.children.getItem(idOrName);\n }\n\n getItemAt(index: number): ShapeCore {\n this.requireGroup();\n return this.children.getItemAt(index);\n }\n\n getItemOrNullObject(idOrName: string): ShapeCore | null {\n this.requireGroup();\n return this.children.getItemOrNullObject(idOrName);\n }\n\n private requireGroup(): void {\n if (!this.isGroup()) throw new Error(`Presentation: shape ${this.shapeId} is not a group`);\n }\n\n private internal(): PptShapeInternal {\n return getShapeInternal(this.presentation, this.slideId, this.shapeId);\n }\n}\n\nfunction chartDataFromDocument(doc: Document): PptChartData {\n const title = chartTitleFromDocument(doc);\n const series = allDescendantsLocal(doc, 'ser').map((ser) => {\n const chartLabels = chartDataLabelSettings(closestChartElement(ser));\n const seriesLabels = mergeChartDataLabelSettings(chartLabels, chartDataLabelSettings(ser));\n const dataLabelLayouts = [\n ...chartDataLabelLayouts(closestChartElement(ser)),\n ...chartDataLabelLayouts(ser),\n ];\n return {\n name: chartSeriesName(ser),\n categories: chartSeriesCategories(ser),\n values: chartSeriesValues(ser),\n ...(seriesLabels.showValueLabels !== undefined\n ? { showValueLabels: seriesLabels.showValueLabels }\n : {}),\n ...(seriesLabels.showCategoryNameLabels !== undefined\n ? { showCategoryNameLabels: seriesLabels.showCategoryNameLabels }\n : {}),\n ...(seriesLabels.showPercentLabels !== undefined\n ? { showPercentLabels: seriesLabels.showPercentLabels }\n : {}),\n ...(dataLabelLayouts.length > 0 ? { dataLabelLayouts } : {}),\n };\n });\n return {\n ...(title ? { title } : {}),\n series,\n };\n}\n\nfunction setChartData(doc: Document, data: PptChartData): void {\n const seriesNodes = allDescendantsLocal(doc, 'ser');\n if (seriesNodes.length !== data.series.length) {\n throw new Error(\n `Presentation: chart data must contain ${seriesNodes.length} series, got ${data.series.length}`,\n );\n }\n if (data.title !== undefined) setChartTitle(doc, data.title);\n for (let index = 0; index < seriesNodes.length; index++) {\n const ser = seriesNodes[index]!;\n const series = data.series[index]!;\n if (series.name !== undefined) setChartSeriesName(ser, series.name);\n if (series.categories) setChartSeriesCategories(ser, series.categories);\n setChartSeriesValues(ser, series.values);\n }\n}\n\nfunction chartTitleFromDocument(doc: Document): string | undefined {\n const title = allDescendantsLocal(doc, 'title')[0];\n if (!title) return undefined;\n const text =\n allDescendantsNs(title, A_NS, 't').map(textOf).join('') ||\n allDescendantsLocal(title, 'v').map(textOf).join('');\n return text || undefined;\n}\n\nfunction setChartTitle(doc: Document, title: string): void {\n const titleNode = allDescendantsLocal(doc, 'title')[0];\n if (!titleNode) throw new Error('Presentation: chart has no editable title');\n const textNodes = allDescendantsNs(titleNode, A_NS, 't');\n if (textNodes.length > 0) {\n textNodes[0]!.textContent = title;\n for (const extra of textNodes.slice(1)) extra.textContent = '';\n return;\n }\n const valueNodes = allDescendantsLocal(titleNode, 'v');\n if (valueNodes.length > 0) {\n valueNodes[0]!.textContent = title;\n for (const extra of valueNodes.slice(1)) extra.textContent = '';\n return;\n }\n throw new Error('Presentation: chart title has no editable text node');\n}\n\nfunction chartSeriesName(ser: Element): string | undefined {\n const tx = firstChildLocal(ser, 'tx');\n if (!tx) return undefined;\n const text =\n allDescendantsLocal(tx, 'v').map(textOf).join('') ||\n allDescendantsNs(tx, A_NS, 't').map(textOf).join('');\n return text || undefined;\n}\n\nfunction setChartSeriesName(ser: Element, name: string): void {\n const tx = findOrCreateChartChild(ser, 'tx');\n const strRef = firstChildLocal(tx, 'strRef');\n if (strRef) {\n const cache = findOrCreateChartChild(strRef, 'strCache');\n setStringCache(cache, [name]);\n return;\n }\n let value = firstChildLocal(tx, 'v');\n if (!value) {\n value = tx.ownerDocument.createElementNS(C_NS, 'c:v');\n tx.appendChild(value);\n }\n value.textContent = name;\n}\n\nfunction chartSeriesCategories(ser: Element): string[] | undefined {\n const cat = firstChildLocal(ser, 'cat');\n if (!cat) return undefined;\n const values = valuesFromStringCache(cat);\n return values.length > 0 ? values : undefined;\n}\n\nfunction setChartSeriesCategories(ser: Element, categories: string[]): void {\n const cat = findOrCreateChartChild(ser, 'cat');\n const strRef = firstChildLocal(cat, 'strRef') ?? appendChartChild(cat, 'strRef');\n const cache = findOrCreateChartChild(strRef, 'strCache');\n setStringCache(cache, categories);\n}\n\nfunction chartSeriesValues(ser: Element): number[] {\n const val = firstChildLocal(ser, 'val');\n if (!val) return [];\n return valuesFromNumberCache(val);\n}\n\nfunction chartDataLabelSettings(element: Element | null | undefined): {\n showValueLabels?: boolean;\n showCategoryNameLabels?: boolean;\n showPercentLabels?: boolean;\n} {\n if (!element) return {};\n const dLbls = firstChildLocal(element, 'dLbls');\n if (!dLbls) return {};\n const deleted = parseBooleanAttr(firstChildLocal(dLbls, 'delete')?.getAttribute('val') ?? null);\n if (deleted === true) {\n return {\n showValueLabels: false,\n showCategoryNameLabels: false,\n showPercentLabels: false,\n };\n }\n return {\n ...chartDataLabelBoolean(dLbls, 'showVal', 'showValueLabels'),\n ...chartDataLabelBoolean(dLbls, 'showCatName', 'showCategoryNameLabels'),\n ...chartDataLabelBoolean(dLbls, 'showPercent', 'showPercentLabels'),\n };\n}\n\nfunction chartDataLabelLayouts(\n element: Element | null | undefined,\n): NonNullable<PptChartSeriesData['dataLabelLayouts']> {\n if (!element) return [];\n const dLbls = firstChildLocal(element, 'dLbls');\n if (!dLbls) return [];\n const result: NonNullable<PptChartSeriesData['dataLabelLayouts']> = [];\n for (const label of allDescendantsLocal(dLbls, 'dLbl')) {\n const index = parseNumber(firstChildLocal(label, 'idx')?.getAttribute('val') ?? null);\n const manualLayout = allDescendantsLocal(label, 'manualLayout')[0];\n if (index === undefined || !manualLayout) continue;\n const x = parseNumber(firstChildLocal(manualLayout, 'x')?.getAttribute('val') ?? null);\n const y = parseNumber(firstChildLocal(manualLayout, 'y')?.getAttribute('val') ?? null);\n if (x === undefined && y === undefined) continue;\n result.push({\n index,\n ...(x !== undefined ? { x } : {}),\n ...(y !== undefined ? { y } : {}),\n });\n }\n return result;\n}\n\nfunction chartDataLabelBoolean<K extends 'showValueLabels' | 'showCategoryNameLabels' | 'showPercentLabels'>(\n dLbls: Element,\n xmlName: string,\n key: K,\n): Partial<Record<K, boolean>> {\n const value = parseBooleanAttr(firstChildLocal(dLbls, xmlName)?.getAttribute('val') ?? null);\n return value === undefined ? {} : { [key]: value } as Partial<Record<K, boolean>>;\n}\n\nfunction mergeChartDataLabelSettings(\n base: {\n showValueLabels?: boolean;\n showCategoryNameLabels?: boolean;\n showPercentLabels?: boolean;\n },\n override: {\n showValueLabels?: boolean;\n showCategoryNameLabels?: boolean;\n showPercentLabels?: boolean;\n },\n): {\n showValueLabels?: boolean;\n showCategoryNameLabels?: boolean;\n showPercentLabels?: boolean;\n} {\n return {\n ...base,\n ...override,\n };\n}\n\nfunction closestChartElement(element: Element): Element | null {\n let current = element.parentNode;\n while (current?.nodeType === 1) {\n const candidate = current as Element;\n if (candidate.namespaceURI === C_NS && candidate.localName.endsWith('Chart')) return candidate;\n current = candidate.parentNode;\n }\n return null;\n}\n\nfunction setChartSeriesValues(ser: Element, values: number[]): void {\n const val = findOrCreateChartChild(ser, 'val');\n const numRef = firstChildLocal(val, 'numRef') ?? appendChartChild(val, 'numRef');\n const cache = findOrCreateChartChild(numRef, 'numCache');\n setNumberCache(cache, values);\n}\n\nfunction valuesFromStringCache(parent: Element): string[] {\n const cache = firstChildLocal(parent, 'strCache') ?? allDescendantsLocal(parent, 'strCache')[0];\n if (!cache) return [];\n return sortedCachePoints(cache).map(textOf);\n}\n\nfunction valuesFromNumberCache(parent: Element): number[] {\n const cache = firstChildLocal(parent, 'numCache') ?? allDescendantsLocal(parent, 'numCache')[0];\n if (!cache) return [];\n return sortedCachePoints(cache)\n .map((pt) => Number(textOf(firstChildLocal(pt, 'v')) || textOf(pt)))\n .filter((value) => Number.isFinite(value));\n}\n\nfunction sortedCachePoints(cache: Element): Element[] {\n return childElementsNs(cache, C_NS, 'pt').sort(\n (a, b) => Number(a.getAttribute('idx') ?? 0) - Number(b.getAttribute('idx') ?? 0),\n );\n}\n\nfunction setStringCache(cache: Element, values: string[]): void {\n replaceCachePoints(cache, values, (value) => value);\n}\n\nfunction setNumberCache(cache: Element, values: number[]): void {\n replaceCachePoints(cache, values, (value) => String(value));\n}\n\nfunction replaceCachePoints<T>(cache: Element, values: T[], serialize: (value: T) => string): void {\n for (const child of [\n ...childElementsNs(cache, C_NS, 'pt'),\n ...childElementsNs(cache, C_NS, 'ptCount'),\n ]) {\n child.parentNode?.removeChild(child);\n }\n const ptCount = cache.ownerDocument.createElementNS(C_NS, 'c:ptCount');\n ptCount.setAttribute('val', String(values.length));\n cache.appendChild(ptCount);\n values.forEach((value, index) => {\n const pt = cache.ownerDocument.createElementNS(C_NS, 'c:pt');\n pt.setAttribute('idx', String(index));\n const v = cache.ownerDocument.createElementNS(C_NS, 'c:v');\n v.textContent = serialize(value);\n pt.appendChild(v);\n cache.appendChild(pt);\n });\n}\n\nfunction findOrCreateChartChild(parent: Element, localName: string): Element {\n return firstChildLocal(parent, localName) ?? appendChartChild(parent, localName);\n}\n\nfunction appendChartChild(parent: Element, localName: string): Element {\n const child = parent.ownerDocument.createElementNS(C_NS, `c:${localName}`);\n parent.appendChild(child);\n return child;\n}\n\nexport class ShapeImageApiCore {\n constructor(\n private readonly presentation: PresentationCore,\n private readonly slideId: string,\n private readonly shapeId: string,\n ) {}\n\n isImage(): boolean {\n const image = this.internal().model.image;\n return this.internal().model.kind === 'picture' && Boolean(image?.targetPath);\n }\n\n getInfo(): PptImageInfo | null {\n const image = this.internal().model.image;\n if (!image) return null;\n const part = image.targetPath\n ? getPart(this.presentation._package(), image.targetPath)\n : undefined;\n return {\n relationshipId: image.relationshipId,\n targetPath: image.targetPath,\n contentType: part?.contentType ?? image.contentType,\n filename: image.filename,\n byteLength: part?.bytes?.byteLength ?? part?._originalBytes?.byteLength,\n };\n }\n\n style(): PptImageStyle {\n const image = this.internal().model.image;\n if (!image) return {};\n return cloneModel({\n ...(image.crop ? { crop: image.crop } : {}),\n ...(image.fillRect ? { fillRect: image.fillRect } : {}),\n ...(image.opacity !== undefined ? { opacity: image.opacity } : {}),\n });\n }\n\n setStyle(style: Partial<PptImageStyle>): void {\n const shape = this.internal();\n const image = shape.model.image;\n if (!image) throw new Error(`Presentation: shape ${this.shapeId} has no image style surface`);\n const normalized = normalizeImageStyle(style);\n const blipFill = findImageBlipFill(shape.element);\n if (!blipFill) throw new Error(`Presentation: shape ${this.shapeId} has no image fill XML`);\n if (normalized.crop) setImageCrop(blipFill, normalized.crop);\n if (normalized.fillRect) setImageFillRect(blipFill, normalized.fillRect);\n if (normalized.opacity !== undefined) {\n const blip = firstChildNs(blipFill, A_NS, 'blip');\n if (!blip) throw new Error(`Presentation: shape ${this.shapeId} has no image blip XML`);\n setImageOpacity(blip, normalized.opacity);\n }\n shape.model.image = {\n ...image,\n ...normalized,\n ...(normalized.crop ? { crop: { ...image.crop, ...normalized.crop } } : {}),\n ...(normalized.fillRect ? { fillRect: { ...image.fillRect, ...normalized.fillRect } } : {}),\n };\n markDirty(shape.slide.part);\n this.presentation._record({\n type: 'shape.image.style.set',\n slideId: this.slideId,\n shapeId: this.shapeId,\n style: normalized,\n });\n }\n\n setCrop(crop: PptImageStyle['crop']): void {\n this.setStyle({ crop });\n }\n\n setFillRect(fillRect: PptImageStyle['fillRect']): void {\n this.setStyle({ fillRect });\n }\n\n setOpacity(opacity: number): void {\n this.setStyle({ opacity });\n }\n\n bytes(): Uint8Array {\n const image = this.internal().model.image;\n if (!image?.targetPath)\n throw new Error(`Presentation: shape ${this.shapeId} has no image bytes`);\n return exportedImageFromPart(this.presentation, image.targetPath).bytes;\n }\n\n replace(source: PptImageSource): void {\n const shape = this.internal();\n const image = shape.model.image;\n if (!image?.targetPath)\n throw new Error(`Presentation: shape ${this.shapeId} has no replaceable image`);\n const current = getPart(this.presentation._package(), image.targetPath);\n if (!current) throw new Error(`Presentation: image part not found: ${image.targetPath}`);\n const bytes = imageSourceBytes(source);\n setPart(\n this.presentation._package(),\n createBinaryPart({\n path: image.targetPath,\n contentType: current.contentType,\n bytes,\n originalBytes: bytes,\n }),\n );\n this.presentation._record({\n type: 'shape.image.replace',\n slideId: this.slideId,\n shapeId: this.shapeId,\n imageRef: image.targetPath,\n });\n }\n\n private internal(): PptShapeInternal {\n return getShapeInternal(this.presentation, this.slideId, this.shapeId);\n }\n}\n\nexport class TableApiCore {\n constructor(\n private readonly presentation: PresentationCore,\n private readonly slideId: string,\n private readonly shapeId: string,\n ) {}\n\n isTable(): boolean {\n return Boolean(this.internal().model.table);\n }\n\n rowCount(): number {\n return this.table().rowCount;\n }\n\n columnCount(): number {\n return this.table().columnCount;\n }\n\n values(): string[][] {\n return this.table().values.map((row) => [...row]);\n }\n\n hasMergedCells(): boolean {\n return (this.table().mergedCells?.length ?? 0) > 0;\n }\n\n mergedCells(): PptTableCellMerge[] {\n return cloneModel(this.table().mergedCells ?? []);\n }\n\n setValues(values: string[][]): void {\n const table = this.table();\n this.assertNoMergedCells('set all table values');\n if (\n values.length !== table.rowCount ||\n values.some((row) => row.length !== table.columnCount)\n ) {\n throw new Error(\n `Presentation: table values must match ${table.rowCount}x${table.columnCount}`,\n );\n }\n for (let row = 0; row < values.length; row++) {\n for (let column = 0; column < values[row]!.length; column++) {\n this.writeCellText(row, column, values[row]![column]!);\n }\n }\n this.presentation._record({\n type: 'table.values.set',\n slideId: this.slideId,\n shapeId: this.shapeId,\n values,\n });\n }\n\n getCell(row: number, column: number): TableCellCore {\n return new TableCellCore(this.presentation, this.slideId, this.shapeId, row, column);\n }\n\n setCellText(row: number, column: number, text: string): void {\n this._setCellText(row, column, text);\n }\n\n addRow(index: number | 'end' = 'end', values?: string[]): void {\n const shape = this.internal();\n const table = this.table();\n this.assertNoMergedCells('add rows');\n const insertIndex = normalizeInsertIndex(index, table.rowCount);\n const rowValues = normalizeVector(values, table.columnCount, 'row');\n const tbl = getTableElement(shape);\n const rows = childElementsNs(tbl, A_NS, 'tr');\n const row = tableRowElement(tbl.ownerDocument, rowValues);\n tbl.insertBefore(row, rows[insertIndex] ?? null);\n markDirty(shape.slide.part);\n this.presentation._reloadFromPackage();\n this.presentation._record({\n type: 'table.row.add',\n slideId: this.slideId,\n shapeId: this.shapeId,\n index: insertIndex,\n values: rowValues,\n });\n }\n\n deleteRow(index: number): void {\n const shape = this.internal();\n const table = this.table();\n this.assertNoMergedCells('delete rows');\n if (table.rowCount <= 1) throw new Error('Presentation: cannot delete the final table row');\n const bounded = requireIndex(index, table.rowCount, 'row');\n const tbl = getTableElement(shape);\n const row = childElementsNs(tbl, A_NS, 'tr')[bounded];\n if (!row) throw new Error(`Presentation: table row out of range: ${index}`);\n tbl.removeChild(row);\n markDirty(shape.slide.part);\n this.presentation._reloadFromPackage();\n this.presentation._record({\n type: 'table.row.delete',\n slideId: this.slideId,\n shapeId: this.shapeId,\n index: bounded,\n });\n }\n\n addColumn(index: number | 'end' = 'end', values?: string[]): void {\n const shape = this.internal();\n const table = this.table();\n this.assertNoMergedCells('add columns');\n const insertIndex = normalizeInsertIndex(index, table.columnCount);\n const columnValues = normalizeVector(values, table.rowCount, 'column');\n const tbl = getTableElement(shape);\n const rows = childElementsNs(tbl, A_NS, 'tr');\n const tblGrid = firstChildNs(tbl, A_NS, 'tblGrid');\n if (!tblGrid) throw new Error(`Presentation: table ${this.shapeId} has no tblGrid`);\n const gridCols = childElementsNs(tblGrid, A_NS, 'gridCol');\n tblGrid.insertBefore(tableGridColElement(tbl.ownerDocument), gridCols[insertIndex] ?? null);\n for (let row = 0; row < rows.length; row++) {\n const cells = childElementsNs(rows[row]!, A_NS, 'tc');\n rows[row]!.insertBefore(\n tableCellElement(tbl.ownerDocument, columnValues[row] ?? ''),\n cells[insertIndex] ?? null,\n );\n }\n markDirty(shape.slide.part);\n this.presentation._reloadFromPackage();\n this.presentation._record({\n type: 'table.column.add',\n slideId: this.slideId,\n shapeId: this.shapeId,\n index: insertIndex,\n values: columnValues,\n });\n }\n\n deleteColumn(index: number): void {\n const shape = this.internal();\n const table = this.table();\n this.assertNoMergedCells('delete columns');\n if (table.columnCount <= 1)\n throw new Error('Presentation: cannot delete the final table column');\n const bounded = requireIndex(index, table.columnCount, 'column');\n const tbl = getTableElement(shape);\n const tblGrid = firstChildNs(tbl, A_NS, 'tblGrid');\n if (!tblGrid) throw new Error(`Presentation: table ${this.shapeId} has no tblGrid`);\n const gridCol = childElementsNs(tblGrid, A_NS, 'gridCol')[bounded];\n if (gridCol) tblGrid.removeChild(gridCol);\n for (const row of childElementsNs(tbl, A_NS, 'tr')) {\n const cell = childElementsNs(row, A_NS, 'tc')[bounded];\n if (cell) row.removeChild(cell);\n }\n markDirty(shape.slide.part);\n this.presentation._reloadFromPackage();\n this.presentation._record({\n type: 'table.column.delete',\n slideId: this.slideId,\n shapeId: this.shapeId,\n index: bounded,\n });\n }\n\n _cellText(row: number, column: number): string {\n const table = this.table();\n if (row < 0 || row >= table.rowCount || column < 0 || column >= table.columnCount) {\n throw new Error(`Presentation: table cell out of range: ${row},${column}`);\n }\n return table.values[row]?.[column] ?? '';\n }\n\n _cellStyle(row: number, column: number): PptTableCellStyle {\n const table = this.table();\n if (row < 0 || row >= table.rowCount || column < 0 || column >= table.columnCount) {\n throw new Error(`Presentation: table cell out of range: ${row},${column}`);\n }\n return cloneModel(table.cellStyles?.[row]?.[column] ?? {});\n }\n\n _cellParagraphs(row: number, column: number): PptTextParagraph[] {\n const shape = this.internal();\n const table = this.table();\n if (row < 0 || row >= table.rowCount || column < 0 || column >= table.columnCount) {\n throw new Error(`Presentation: table cell out of range: ${row},${column}`);\n }\n const cell = shape.tableCells[row]?.[column];\n if (!cell) throw new Error(`Presentation: table cell out of range: ${row},${column}`);\n return textParagraphsFromElement(cell, shape.slide);\n }\n\n _setCellParagraphs(row: number, column: number, paragraphs: PptTextParagraphWrite[]): void {\n const shape = this.internal();\n this.assertEditableCell(row, column);\n const cell = this.requireCell(shape, row, column);\n const textBody = firstChildNs(cell, A_NS, 'txBody');\n if (!textBody) throw new Error(`Presentation: table cell ${row},${column} has no text body`);\n replaceTextBodyParagraphs(textBody, paragraphs);\n shape.model.table!.values[row]![column] = textParagraphsFromElement(cell, shape.slide)\n .map((paragraph) => paragraph.text)\n .join('\\n');\n markDirty(shape.slide.part);\n this.presentation._record({\n type: 'table.cell.text.paragraphs.set',\n slideId: this.slideId,\n shapeId: this.shapeId,\n row,\n column,\n paragraphs,\n });\n }\n\n _setCellRunStyle(\n row: number,\n column: number,\n runIndex: number,\n style: Partial<PptTextStyle>,\n ): void {\n const shape = this.internal();\n this.assertEditableCell(row, column);\n const cell = this.requireCell(shape, row, column);\n const runs = flatTextRuns(cell);\n const run = runs[requireIndex(runIndex, runs.length, 'run')];\n if (!run) throw new Error(`Presentation: text run out of range: ${runIndex}`);\n const normalized = normalizeTextStyle(style);\n applyTextStyleToRun(run, normalized);\n const table = shape.model.table!;\n table.cellStyles = ensureTableCellStyles(table.rowCount, table.columnCount, table.cellStyles);\n table.cellStyles[row]![column] = {\n ...table.cellStyles[row]![column],\n textStyle: { ...table.cellStyles[row]![column]?.textStyle, ...normalized },\n };\n markDirty(shape.slide.part);\n this.presentation._record({\n type: 'table.cell.text.run.style.set',\n slideId: this.slideId,\n shapeId: this.shapeId,\n row,\n column,\n runIndex,\n style: normalized,\n });\n }\n\n _setCellText(row: number, column: number, text: string): void {\n this.assertEditableCell(row, column);\n this.writeCellText(row, column, text);\n this.presentation._record({\n type: 'table.cell.text.set',\n slideId: this.slideId,\n shapeId: this.shapeId,\n row,\n column,\n text,\n });\n }\n\n _setCellStyle(row: number, column: number, style: Partial<PptTableCellStyle>): void {\n const shape = this.internal();\n this.assertEditableCell(row, column);\n const cell = shape.tableCells[row]?.[column];\n if (!cell) throw new Error(`Presentation: table cell out of range: ${row},${column}`);\n const normalized: Partial<PptTableCellStyle> = {\n ...(style.fillColor ? { fillColor: normalizeHexColor(style.fillColor) } : {}),\n ...(style.body ? { body: normalizeTableCellBodyProperties(style.body) } : {}),\n ...(style.textStyle ? { textStyle: normalizeTextStyle(style.textStyle) } : {}),\n };\n const tcPr =\n normalized.fillColor || normalized.body ? findOrCreateTableCellProperties(cell) : undefined;\n if (normalized.fillColor)\n setSolidFill(tcPr ?? findOrCreateTableCellProperties(cell), normalized.fillColor);\n if (normalized.body) applyTableCellBodyProperties(tcPr!, normalized.body);\n if (normalized.textStyle)\n applyTextStyleToTextElements(allDescendantsNs(cell, A_NS, 't'), normalized.textStyle);\n const table = shape.model.table!;\n table.cellStyles = ensureTableCellStyles(table.rowCount, table.columnCount, table.cellStyles);\n table.cellStyles[row]![column] = {\n ...table.cellStyles[row]![column],\n ...normalized,\n ...(normalized.body\n ? { body: { ...table.cellStyles[row]![column]?.body, ...normalized.body } }\n : {}),\n ...(normalized.textStyle\n ? { textStyle: { ...table.cellStyles[row]![column]?.textStyle, ...normalized.textStyle } }\n : {}),\n };\n markDirty(shape.slide.part);\n this.presentation._record({\n type: 'table.cell.style.set',\n slideId: this.slideId,\n shapeId: this.shapeId,\n row,\n column,\n style: normalized,\n });\n }\n\n private writeCellText(row: number, column: number, text: string): void {\n const shape = this.internal();\n this.assertEditableCell(row, column);\n const cell = shape.tableCells[row]?.[column];\n if (!cell) throw new Error(`Presentation: table cell out of range: ${row},${column}`);\n const textElements = tableCellTextElements(cell);\n if (textElements.length === 0) textElements.push(createTableCellTextRun(cell));\n textElements[0]!.textContent = text;\n for (const extra of textElements.slice(1)) extra.textContent = '';\n shape.model.table!.values[row]![column] = text;\n markDirty(shape.slide.part);\n }\n\n private table() {\n const table = this.internal().model.table;\n if (!table) throw new Error(`Presentation: shape ${this.shapeId} is not a table`);\n return table;\n }\n\n private requireCell(shape: PptShapeInternal, row: number, column: number): Element {\n const table = this.table();\n if (row < 0 || row >= table.rowCount || column < 0 || column >= table.columnCount) {\n throw new Error(`Presentation: table cell out of range: ${row},${column}`);\n }\n const cell = shape.tableCells[row]?.[column];\n if (!cell) throw new Error(`Presentation: table cell out of range: ${row},${column}`);\n return cell;\n }\n\n private assertNoMergedCells(operation: string): void {\n if (this.hasMergedCells()) {\n throw new Error(`Presentation: cannot ${operation} on a merged-cell table`);\n }\n }\n\n private assertEditableCell(row: number, column: number): void {\n const merge = this.table().mergedCells?.find(\n (item) => item.row === row && item.column === column,\n );\n if (merge?.hMerge || merge?.vMerge) {\n throw new Error(`Presentation: cannot edit merged continuation cell ${row},${column}`);\n }\n }\n\n private internal(): PptShapeInternal {\n return getShapeInternal(this.presentation, this.slideId, this.shapeId);\n }\n}\n\nexport class TableCellCore {\n constructor(\n private readonly presentation: PresentationCore,\n private readonly slideId: string,\n private readonly shapeId: string,\n private readonly row: number,\n private readonly column: number,\n ) {}\n\n text(): string {\n return new TableApiCore(this.presentation, this.slideId, this.shapeId)._cellText(\n this.row,\n this.column,\n );\n }\n\n paragraphs(): PptTextParagraph[] {\n return new TableApiCore(this.presentation, this.slideId, this.shapeId)._cellParagraphs(\n this.row,\n this.column,\n );\n }\n\n runs(): PptTextRun[] {\n return this.paragraphs().flatMap((paragraph) => paragraph.runs);\n }\n\n setParagraphs(paragraphs: PptTextParagraphWrite[]): void {\n new TableApiCore(this.presentation, this.slideId, this.shapeId)._setCellParagraphs(\n this.row,\n this.column,\n paragraphs,\n );\n }\n\n setRunStyle(runIndex: number, style: Partial<PptTextStyle>): void {\n new TableApiCore(this.presentation, this.slideId, this.shapeId)._setCellRunStyle(\n this.row,\n this.column,\n runIndex,\n style,\n );\n }\n\n setText(text: string): void {\n new TableApiCore(this.presentation, this.slideId, this.shapeId)._setCellText(\n this.row,\n this.column,\n text,\n );\n }\n\n style(): PptTableCellStyle {\n return new TableApiCore(this.presentation, this.slideId, this.shapeId)._cellStyle(\n this.row,\n this.column,\n );\n }\n\n setStyle(style: Partial<PptTableCellStyle>): void {\n new TableApiCore(this.presentation, this.slideId, this.shapeId)._setCellStyle(\n this.row,\n this.column,\n style,\n );\n }\n}\n\nfunction getShapeInternal(\n presentation: PresentationCore,\n slideId: string,\n shapeId: string,\n): PptShapeInternal {\n const slide = presentation._getSlideInternal(slideId);\n const shape = slide ? findShapeInternal(slide.shapes, shapeId) : undefined;\n if (!shape) throw new Error(`Presentation: shape not found: ${shapeId}`);\n return shape;\n}\n\nfunction findShapeInternal(\n shapes: PptShapeInternal[],\n shapeId: string,\n): PptShapeInternal | undefined {\n for (const shape of shapes) {\n if (shape.model.id === shapeId) return shape;\n const child = findShapeInternal(shape.children, shapeId);\n if (child) return child;\n }\n return undefined;\n}\n\nfunction exportedImageFromPart(presentation: PresentationCore, path: string): PptExportedImage {\n const part = getPart(presentation._package(), path);\n const bytes = part?.bytes ?? part?._originalBytes;\n if (!part || !bytes) throw new Error(`Presentation: image part not found: ${path}`);\n return {\n path,\n contentType: part.contentType,\n byteLength: bytes.byteLength,\n bytes: new Uint8Array(bytes),\n };\n}\n\nfunction exportedFontFromPart(presentation: PresentationCore, font: PptFontModel): PptExportedFont {\n const part = getPart(presentation._package(), font.path);\n const bytes = part?.bytes ?? part?._originalBytes;\n if (!part || !bytes) throw new Error(`Presentation: font part not found: ${font.path}`);\n return {\n ...font,\n contentType: part.contentType,\n byteLength: bytes.byteLength,\n bytes: new Uint8Array(bytes),\n };\n}\n\nfunction findTextInSlide(\n slide: PptReadResult['slides'][number],\n query: string | RegExp,\n options: PptFindTextOptions,\n): PptTextMatch[] {\n const matches: PptTextMatch[] = [];\n for (const shape of flattenShapeModels(slide.model.shapes)) {\n if (shape.text && !shape.table) {\n matches.push(\n ...findMatchesInValue(shape.text.text, query, options).map((match) => ({\n slideId: slide.model.id,\n slideIndex: slide.model.index,\n shapeId: shape.id,\n shapeName: shape.name,\n source: 'shapeText' as const,\n text: shape.text!.text,\n start: match.start,\n length: match.length,\n })),\n );\n }\n if (shape.table) {\n for (let row = 0; row < shape.table.values.length; row++) {\n for (let column = 0; column < shape.table.values[row]!.length; column++) {\n const text = shape.table.values[row]![column]!;\n matches.push(\n ...findMatchesInValue(text, query, options).map((match) => ({\n slideId: slide.model.id,\n slideIndex: slide.model.index,\n shapeId: shape.id,\n shapeName: shape.name,\n source: 'tableCell' as const,\n text,\n start: match.start,\n length: match.length,\n row,\n column,\n })),\n );\n }\n }\n }\n }\n return matches;\n}\n\nfunction slideProperties(slide: PptSlideModel): PptSlideProperties {\n const shapes = flattenShapeModels(slide.shapes);\n return {\n id: slide.id,\n index: slide.index,\n name: slide.name,\n title: slide.title,\n shapeCount: shapes.length,\n textShapeCount: shapes.filter((shape) => Boolean(shape.text) && !shape.table).length,\n tableCount: shapes.filter((shape) => Boolean(shape.table)).length,\n pictureCount: shapes.filter((shape) => shape.kind === 'picture').length,\n };\n}\n\nfunction flattenShapeModels(shapes: PptShapeModel[]): PptShapeModel[] {\n return shapes.flatMap((shape) => [shape, ...flattenShapeModels(shape.children ?? [])]);\n}\n\nfunction findMatchesInValue(\n value: string,\n query: string | RegExp,\n options: PptFindTextOptions,\n): Array<{ start: number; length: number }> {\n const regexp = textSearchRegExp(query, options);\n const matches: Array<{ start: number; length: number }> = [];\n let match: RegExpExecArray | null;\n while ((match = regexp.exec(value))) {\n matches.push({ start: match.index, length: match[0].length });\n if (match[0].length === 0) regexp.lastIndex++;\n }\n return matches;\n}\n\nfunction replaceTextValue(\n value: string,\n search: string | RegExp,\n replacement: string,\n options: PptTextReplaceOptions,\n): { text: string; count: number } {\n const regexp = textSearchRegExp(search, options);\n let count = 0;\n const text = value.replace(regexp, () => {\n count++;\n return replacement;\n });\n return { text, count };\n}\n\nfunction textSearchRegExp(query: string | RegExp, options: PptFindTextOptions): RegExp {\n if (typeof query !== 'string') {\n const flags = query.flags.includes('g') ? query.flags : `${query.flags}g`;\n return new RegExp(query.source, flags);\n }\n return new RegExp(escapeRegExp(query), options.caseSensitive ? 'g' : 'gi');\n}\n\nfunction getTableElement(shape: PptShapeInternal): Element {\n const table = allDescendantsNs(shape.element, A_NS, 'tbl')[0];\n if (!table) throw new Error(`Presentation: shape ${shape.model.id} has no table XML`);\n return table;\n}\n\nfunction normalizeVector(\n values: string[] | undefined,\n length: number,\n axis: 'row' | 'column',\n): string[] {\n if (values && values.length !== length) {\n throw new Error(`Presentation: ${axis} values must have length ${length}`);\n }\n return Array.from({ length }, (_, index) => values?.[index] ?? '');\n}\n\nfunction requireIndex(index: number, length: number, label: string): number {\n if (!Number.isInteger(index) || index < 0 || index >= length) {\n throw new Error(`Presentation: ${label} index out of range: ${index}`);\n }\n return index;\n}\n\nfunction tableRowElement(doc: Document, values: string[]): Element {\n const row = doc.createElementNS(A_NS, 'a:tr');\n row.setAttribute('h', '370840');\n for (const value of values) row.appendChild(tableCellElement(doc, value));\n return row;\n}\n\nfunction tableCellElement(doc: Document, text: string): Element {\n const parsed = parseXmlDocument(\n `<root xmlns:a=\"${A_NS}\">${tableCellXml(text)}</root>`,\n ) as unknown as Document;\n const cell = Array.from(parsed.documentElement.childNodes).find((node) => node.nodeType === 1);\n if (!cell) throw new Error('Presentation: generated table cell XML is empty');\n return doc.importNode(cell, true) as Element;\n}\n\nfunction tableGridColElement(doc: Document): Element {\n const gridCol = doc.createElementNS(A_NS, 'a:gridCol');\n gridCol.setAttribute('w', '1000000');\n return gridCol;\n}\n\nfunction findOrCreateShapeProperties(shapeElement: Element): Element {\n const existing = allDescendantsNs(shapeElement, P_NS, 'spPr')[0];\n if (existing) return existing;\n const spPr = shapeElement.ownerDocument.createElementNS(P_NS, 'p:spPr');\n const txBody = firstChildNs(shapeElement, P_NS, 'txBody');\n shapeElement.insertBefore(spPr, txBody ?? null);\n return spPr;\n}\n\nfunction findOrCreateLine(spPr: Element): Element {\n const existing = firstChildNs(spPr, A_NS, 'ln');\n if (existing) return existing;\n const ln = spPr.ownerDocument.createElementNS(A_NS, 'a:ln');\n spPr.appendChild(ln);\n return ln;\n}\n\nfunction findOrCreateRunProperties(run: Element): Element {\n const existing = firstChildNs(run, A_NS, 'rPr');\n if (existing) return existing;\n const rPr = run.ownerDocument.createElementNS(A_NS, 'a:rPr');\n run.insertBefore(rPr, run.firstChild);\n return rPr;\n}\n\nfunction findOrCreateTableCellProperties(cell: Element): Element {\n const existing = firstChildNs(cell, A_NS, 'tcPr');\n if (existing) return existing;\n const tcPr = cell.ownerDocument.createElementNS(A_NS, 'a:tcPr');\n cell.appendChild(tcPr);\n return tcPr;\n}\n\nfunction tableCellTextElements(cell: Element): Element[] {\n return Array.from(cell.getElementsByTagNameNS(A_NS, 't')) as Element[];\n}\n\nfunction createTableCellTextRun(cell: Element): Element {\n const doc = cell.ownerDocument;\n let txBody = firstChildNs(cell, A_NS, 'txBody');\n if (!txBody) {\n txBody = doc.createElementNS(A_NS, 'a:txBody');\n txBody.appendChild(doc.createElementNS(A_NS, 'a:bodyPr'));\n const tcPr = firstChildNs(cell, A_NS, 'tcPr');\n cell.insertBefore(txBody, tcPr ?? null);\n }\n\n let paragraph = firstChildNs(txBody, A_NS, 'p');\n if (!paragraph) {\n paragraph = doc.createElementNS(A_NS, 'a:p');\n txBody.appendChild(paragraph);\n }\n\n const run = doc.createElementNS(A_NS, 'a:r');\n const textElement = doc.createElementNS(A_NS, 'a:t');\n run.appendChild(textElement);\n paragraph.appendChild(run);\n return textElement;\n}\n\nfunction findImageBlipFill(shapeElement: Element): Element | null {\n return (\n firstChildNs(shapeElement, P_NS, 'blipFill') ??\n allDescendantsNs(shapeElement, P_NS, 'blipFill')[0] ??\n null\n );\n}\n\nfunction findOrCreateImageSourceRect(blipFill: Element): Element {\n const existing = firstChildNs(blipFill, A_NS, 'srcRect');\n if (existing) return existing;\n const srcRect = blipFill.ownerDocument.createElementNS(A_NS, 'a:srcRect');\n const stretch = firstChildNs(blipFill, A_NS, 'stretch');\n blipFill.insertBefore(srcRect, stretch ?? null);\n return srcRect;\n}\n\nfunction findOrCreateImageStretch(blipFill: Element): Element {\n const existing = firstChildNs(blipFill, A_NS, 'stretch');\n if (existing) return existing;\n const stretch = blipFill.ownerDocument.createElementNS(A_NS, 'a:stretch');\n blipFill.appendChild(stretch);\n return stretch;\n}\n\nfunction findOrCreateImageFillRect(blipFill: Element): Element {\n const stretch = findOrCreateImageStretch(blipFill);\n const existing = firstChildNs(stretch, A_NS, 'fillRect');\n if (existing) return existing;\n const fillRect = blipFill.ownerDocument.createElementNS(A_NS, 'a:fillRect');\n stretch.appendChild(fillRect);\n return fillRect;\n}\n\nfunction findOrCreateParagraphProperties(paragraph: Element): Element {\n const existing = firstChildNs(paragraph, A_NS, 'pPr');\n if (existing) return existing;\n const pPr = paragraph.ownerDocument.createElementNS(A_NS, 'a:pPr');\n paragraph.insertBefore(pPr, paragraph.firstChild);\n return pPr;\n}\n\nfunction closestAncestor(element: Element, ns: string, localName: string): Element | null {\n let current = element.parentNode;\n while (current?.nodeType === 1) {\n const el = current as Element;\n if (el.namespaceURI === ns && el.localName === localName) return el;\n current = el.parentNode;\n }\n return null;\n}\n\nfunction alignmentToOoxml(alignment: NonNullable<PptTextStyle['alignment']>): string {\n if (alignment === 'center') return 'ctr';\n if (alignment === 'right') return 'r';\n if (alignment === 'justify') return 'just';\n if (alignment === 'distributed') return 'dist';\n return 'l';\n}\n\nfunction normalizeTextStyle(style: Partial<PptTextStyle>): Partial<PptTextStyle> {\n return {\n ...(style.fontSize !== undefined ? { fontSize: style.fontSize } : {}),\n ...(style.fontFamily ? { fontFamily: style.fontFamily } : {}),\n ...(style.color ? { color: normalizeHexColor(style.color) } : {}),\n ...(style.bold !== undefined ? { bold: style.bold } : {}),\n ...(style.italic !== undefined ? { italic: style.italic } : {}),\n ...(style.underline !== undefined ? { underline: style.underline } : {}),\n ...(style.strike !== undefined ? { strike: style.strike } : {}),\n ...(style.baseline !== undefined ? { baseline: normalizeTextBaseline(style.baseline) } : {}),\n ...(style.highlight ? { highlight: normalizeHexColor(style.highlight) } : {}),\n ...(style.alignment ? { alignment: style.alignment } : {}),\n ...(style.lineHeight !== undefined ? { lineHeight: style.lineHeight } : {}),\n ...(style.characterSpacing !== undefined ? { characterSpacing: style.characterSpacing } : {}),\n };\n}\n\nfunction normalizeTableCellBodyProperties(\n body: Partial<PptTextBodyProperties>,\n): Partial<PptTextBodyProperties> {\n if (body.autoFit !== undefined)\n throw new Error('Presentation: table cell body autoFit is not writable');\n return {\n ...(body.anchor !== undefined ? { anchor: normalizeTextBodyAnchor(body.anchor) } : {}),\n ...(body.wrap !== undefined ? { wrap: normalizeTextBodyWrap(body.wrap) } : {}),\n ...(body.insetLeft !== undefined\n ? { insetLeft: normalizeNonNegativeNumber(body.insetLeft, 'cell body insetLeft') }\n : {}),\n ...(body.insetTop !== undefined\n ? { insetTop: normalizeNonNegativeNumber(body.insetTop, 'cell body insetTop') }\n : {}),\n ...(body.insetRight !== undefined\n ? { insetRight: normalizeNonNegativeNumber(body.insetRight, 'cell body insetRight') }\n : {}),\n ...(body.insetBottom !== undefined\n ? { insetBottom: normalizeNonNegativeNumber(body.insetBottom, 'cell body insetBottom') }\n : {}),\n };\n}\n\nfunction normalizeImageStyle(style: Partial<PptImageStyle>): Partial<PptImageStyle> {\n return {\n ...(style.crop ? { crop: normalizeImageRect(style.crop, 'crop') } : {}),\n ...(style.fillRect ? { fillRect: normalizeImageRect(style.fillRect, 'fillRect') } : {}),\n ...(style.opacity !== undefined ? { opacity: normalizeOpacity(style.opacity) } : {}),\n };\n}\n\nfunction normalizeImageRect(\n rect: PptImageStyle['crop'],\n name: 'crop' | 'fillRect',\n): NonNullable<PptImageStyle['crop']> {\n if (!rect || Object.keys(rect).length === 0)\n throw new Error(`Presentation: image ${name} must include at least one edge`);\n return {\n ...(rect.left !== undefined ? { left: normalizeImageCropEdge(rect.left, `${name} left`) } : {}),\n ...(rect.top !== undefined ? { top: normalizeImageCropEdge(rect.top, `${name} top`) } : {}),\n ...(rect.right !== undefined\n ? { right: normalizeImageCropEdge(rect.right, `${name} right`) }\n : {}),\n ...(rect.bottom !== undefined\n ? { bottom: normalizeImageCropEdge(rect.bottom, `${name} bottom`) }\n : {}),\n };\n}\n\nfunction normalizeImageCropEdge(value: number, name: string): number {\n if (!Number.isFinite(value) || value < 0 || value > 1)\n throw new Error(`Presentation: image ${name} must be between 0 and 1: ${value}`);\n return value;\n}\n\nfunction normalizeTextBaseline(value: number): number {\n if (!Number.isFinite(value))\n throw new Error(`Presentation: text baseline must be a finite number: ${value}`);\n return value;\n}\n\nfunction normalizeTextBodyAnchor(\n anchor: NonNullable<PptTextBodyProperties['anchor']>,\n): NonNullable<PptTextBodyProperties['anchor']> {\n if (anchor === 'top' || anchor === 'middle' || anchor === 'bottom') return anchor;\n throw new Error(`Presentation: invalid text body anchor ${anchor}`);\n}\n\nfunction normalizeTextBodyWrap(\n wrap: NonNullable<PptTextBodyProperties['wrap']>,\n): NonNullable<PptTextBodyProperties['wrap']> {\n if (wrap === 'none' || wrap === 'square') return wrap;\n throw new Error(`Presentation: invalid text body wrap ${wrap}`);\n}\n\nfunction normalizeTextBodyVertical(\n vertical: NonNullable<PptTextBodyProperties['vertical']>,\n): NonNullable<PptTextBodyProperties['vertical']> {\n if (vertical === 'eastAsian' || vertical === 'vertical') return vertical;\n throw new Error(`Presentation: invalid text body vertical ${vertical}`);\n}\n\nfunction normalizeTextBodyAutoFit(\n autoFit: NonNullable<PptTextBodyProperties['autoFit']>,\n): NonNullable<PptTextBodyProperties['autoFit']> {\n if (autoFit === 'none' || autoFit === 'shape' || autoFit === 'normal') return autoFit;\n throw new Error(`Presentation: invalid text body autoFit ${autoFit}`);\n}\n\nfunction normalizeShapeTextBodyProperties(\n body: Partial<PptTextBodyProperties>,\n): Partial<PptTextBodyProperties> {\n return {\n ...(body.anchor !== undefined ? { anchor: normalizeTextBodyAnchor(body.anchor) } : {}),\n ...(body.autoFit !== undefined ? { autoFit: normalizeTextBodyAutoFit(body.autoFit) } : {}),\n ...(body.wrap !== undefined ? { wrap: normalizeTextBodyWrap(body.wrap) } : {}),\n ...(body.vertical !== undefined ? { vertical: normalizeTextBodyVertical(body.vertical) } : {}),\n ...normalizeTextBodyInsets(body),\n };\n}\n\nfunction normalizeTextBodyInsets(\n body: Partial<PptTextBodyProperties>,\n): Partial<PptTextBodyProperties> {\n return Object.fromEntries(\n (['insetLeft', 'insetTop', 'insetRight', 'insetBottom'] as const)\n .filter((key) => body[key] !== undefined)\n .map((key) => [key, normalizeNonNegativeNumber(body[key]!, `text body ${key}`)]),\n ) as Partial<PptTextBodyProperties>;\n}\n\nfunction findShapeTextBody(shapeElement: Element): Element | null {\n return (\n firstChildNs(shapeElement, P_NS, 'txBody') ??\n allDescendantsNs(shapeElement, P_NS, 'txBody')[0] ??\n allDescendantsNs(shapeElement, A_NS, 'txBody')[0] ??\n null\n );\n}\n\nfunction findOrCreateTextBodyProperties(textBody: Element): Element {\n const existing = firstChildNs(textBody, A_NS, 'bodyPr');\n if (existing) return existing;\n const bodyPr = textBody.ownerDocument.createElementNS(A_NS, 'a:bodyPr');\n textBody.insertBefore(bodyPr, firstChildNs(textBody, A_NS, 'lstStyle') ?? textBody.firstChild);\n return bodyPr;\n}\n\nfunction applyShapeTextBodyProperties(bodyPr: Element, body: Partial<PptTextBodyProperties>): void {\n if (body.anchor !== undefined) bodyPr.setAttribute('anchor', textBodyAnchorToOoxml(body.anchor));\n if (body.wrap !== undefined) bodyPr.setAttribute('wrap', textBodyWrapToOoxml(body.wrap));\n if (body.vertical !== undefined)\n bodyPr.setAttribute('vert', textBodyVerticalToOoxml(body.vertical));\n if (body.insetLeft !== undefined) bodyPr.setAttribute('lIns', String(body.insetLeft));\n if (body.insetTop !== undefined) bodyPr.setAttribute('tIns', String(body.insetTop));\n if (body.insetRight !== undefined) bodyPr.setAttribute('rIns', String(body.insetRight));\n if (body.insetBottom !== undefined) bodyPr.setAttribute('bIns', String(body.insetBottom));\n if (body.autoFit !== undefined) {\n removeTextAutoFitChildren(bodyPr);\n bodyPr.appendChild(textAutoFitElement(bodyPr.ownerDocument, body.autoFit));\n }\n}\n\nfunction removeTextAutoFitChildren(bodyPr: Element): void {\n const autoFitChildren = Array.from(bodyPr.childNodes).filter(\n (child): child is Element =>\n child.nodeType === 1 &&\n (child as Element).namespaceURI === A_NS &&\n ((child as Element).localName === 'spAutoFit' ||\n (child as Element).localName === 'normAutofit' ||\n (child as Element).localName === 'noAutofit'),\n );\n for (const child of autoFitChildren) {\n bodyPr.removeChild(child);\n }\n}\n\nfunction textAutoFitElement(\n doc: Document,\n autoFit: NonNullable<PptTextBodyProperties['autoFit']>,\n): Element {\n const tag =\n autoFit === 'shape' ? 'spAutoFit' : autoFit === 'normal' ? 'normAutofit' : 'noAutofit';\n return doc.createElementNS(A_NS, `a:${tag}`);\n}\n\nfunction replaceTextBodyParagraphs(textBody: Element, paragraphs: PptTextParagraphWrite[]): void {\n const doc = textBody.ownerDocument;\n const normalized = paragraphs.length > 0 ? paragraphs : [{ text: '' }];\n for (const paragraph of childElementsNs(textBody, A_NS, 'p')) {\n textBody.removeChild(paragraph);\n }\n for (const paragraph of normalized) {\n textBody.appendChild(textParagraphElement(doc, paragraph));\n }\n}\n\nfunction textParagraphElement(doc: Document, paragraph: PptTextParagraphWrite): Element {\n const p = doc.createElementNS(A_NS, 'a:p');\n if (paragraph.style) applyParagraphStyle(p, paragraph.style);\n const runs =\n paragraph.runs && paragraph.runs.length > 0 ? paragraph.runs : [{ text: paragraph.text ?? '' }];\n for (const run of runs) {\n for (const element of textRunElements(doc, run)) p.appendChild(element);\n }\n return p;\n}\n\nfunction textRunElements(\n doc: Document,\n run: { text: string; style?: Partial<PptTextStyle> },\n): Element[] {\n const parts = run.text.split('\\n');\n const elements: Element[] = [];\n parts.forEach((part, index) => {\n if (index > 0) elements.push(doc.createElementNS(A_NS, 'a:br'));\n if (part.length > 0 || parts.length === 1) elements.push(textRunElement(doc, part, run.style));\n });\n return elements;\n}\n\nfunction textRunElement(\n doc: Document,\n textValue: string,\n style: Partial<PptTextStyle> | undefined,\n): Element {\n const r = doc.createElementNS(A_NS, 'a:r');\n if (style && Object.keys(style).length > 0) applyTextStyleToRun(r, normalizeTextStyle(style));\n const text = doc.createElementNS(A_NS, 'a:t');\n text.textContent = textValue;\n if (/^\\s|\\s$| {2,}/.test(textValue)) text.setAttributeNS(XML_NS, 'xml:space', 'preserve');\n r.appendChild(text);\n return r;\n}\n\nfunction flatTextRuns(element: Element): Element[] {\n return allDescendantsNs(element, A_NS, 'p').flatMap((paragraph) =>\n childElementsNs(paragraph, A_NS, 'r'),\n );\n}\n\nfunction textParagraphsFromElement(\n element: Element,\n slide?: PptReadResult['slides'][number],\n): PptTextParagraph[] {\n return allDescendantsNs(element, A_NS, 'p').map((paragraph) => {\n const pPr = firstChildNs(paragraph, A_NS, 'pPr');\n const alignment = parseParagraphAlignment(pPr?.getAttribute('algn') ?? null);\n const lineHeight = parseParagraphLineHeight(pPr);\n const bullet = parseParagraphBullet(pPr);\n const marginLeft = parseNumber(pPr?.getAttribute('marL') ?? null);\n const textIndent = parseNumber(pPr?.getAttribute('indent') ?? null);\n const spaceBefore = parseParagraphSpacing(pPr ? firstChildNs(pPr, A_NS, 'spcBef') : null);\n const spaceAfter = parseParagraphSpacing(pPr ? firstChildNs(pPr, A_NS, 'spcAft') : null);\n const paragraphStyle = {\n ...(alignment ? { alignment } : {}),\n ...(bullet ? { bullet: bullet.char } : {}),\n ...(bullet?.color ? { bulletColor: bullet.color } : {}),\n ...(bullet?.fontFamily ? { bulletFontFamily: bullet.fontFamily } : {}),\n ...(bullet?.size !== undefined ? { bulletSize: bullet.size } : {}),\n ...(lineHeight !== undefined ? { lineHeight } : {}),\n ...(marginLeft !== undefined ? { marginLeft } : {}),\n ...(textIndent !== undefined ? { textIndent } : {}),\n ...(spaceBefore !== undefined ? { spaceBefore } : {}),\n ...(spaceAfter !== undefined ? { spaceAfter } : {}),\n };\n const runs = textRunsFromParagraph(paragraph, alignment, slide);\n return {\n text: runs.map((run) => run.text).join(''),\n ...(Object.keys(paragraphStyle).length > 0 ? { style: paragraphStyle } : {}),\n runs,\n };\n });\n}\n\nfunction textRunsFromParagraph(\n paragraph: Element,\n alignment: PptTextStyle['alignment'],\n slide: PptReadResult['slides'][number] | undefined,\n): PptTextRun[] {\n const runs: PptTextRun[] = [];\n for (let i = 0; i < paragraph.childNodes.length; i++) {\n const child = paragraph.childNodes[i];\n if (child?.nodeType !== 1) continue;\n const element = child as Element;\n if (element.namespaceURI !== A_NS) continue;\n if (element.localName === 'r') {\n const text = allDescendantsNs(element, A_NS, 't').map(textOf).join('');\n const style = textStyleFromRun(element, alignment);\n const hyperlink = slide ? hyperlinkFromRun(element, slide) : undefined;\n runs.push({\n text,\n ...(Object.keys(style).length > 0 ? { style } : {}),\n ...(hyperlink ? { hyperlink } : {}),\n });\n } else if (element.localName === 'br') {\n runs.push({ text: '\\n' });\n }\n }\n return runs;\n}\n\nfunction hyperlinkFromRun(\n run: Element,\n slide: PptReadResult['slides'][number],\n): PptHyperlinkModel | undefined {\n const rPr = firstChildNs(run, A_NS, 'rPr');\n return hyperlinkFromElement(slide, rPr ? firstChildNs(rPr, A_NS, 'hlinkClick') : null);\n}\n\nfunction hyperlinkFromElement(\n slide: PptReadResult['slides'][number],\n hlink: Element | null,\n): PptHyperlinkModel | undefined {\n if (!hlink) return undefined;\n const relationshipId =\n hlink.getAttributeNS(R_NS, 'id') ?? hlink.getAttribute('r:id') ?? undefined;\n const rel = relationshipId ? slide.relationships.get(relationshipId) : undefined;\n const action = hlink.getAttribute('action') ?? undefined;\n const tooltip = hlink.getAttribute('tooltip') ?? undefined;\n return {\n ...(relationshipId ? { relationshipId } : {}),\n ...(rel?.target ? { target: rel.target } : {}),\n ...(rel?.targetMode ? { targetMode: rel.targetMode } : {}),\n ...(action ? { action } : {}),\n ...(tooltip ? { tooltip } : {}),\n };\n}\n\nfunction findOrCreateHyperlink(parent: Element): Element {\n const existing = firstChildNs(parent, A_NS, 'hlinkClick');\n if (existing) return existing;\n const hlink = parent.ownerDocument.createElementNS(A_NS, 'a:hlinkClick');\n parent.appendChild(hlink);\n return hlink;\n}\n\nfunction setHyperlinkOnElement(\n presentation: PresentationCore,\n slide: PptReadResult['slides'][number],\n hlink: Element,\n hyperlink: PptHyperlinkWriteOptions,\n): PptHyperlinkModel {\n if (!hyperlink.target) throw new Error('Presentation: hyperlink target is required');\n const existingRelId = hlink.getAttributeNS(R_NS, 'id') ?? hlink.getAttribute('r:id');\n if (existingRelId)\n removeSlideRelationshipIfUnreferenced(presentation, slide, existingRelId, hlink);\n const targetMode = hyperlink.targetMode ?? 'External';\n const relId = addSlideRelationship(presentation, slide, {\n type: `${OFFICE_REL_NS}/hyperlink`,\n target: hyperlink.target,\n targetMode,\n });\n hlink.setAttributeNS(R_NS, 'r:id', relId);\n setOptionalAttr(hlink, 'action', hyperlink.action);\n setOptionalAttr(hlink, 'tooltip', hyperlink.tooltip);\n slide.relationships.set(relId, {\n id: relId,\n type: `${OFFICE_REL_NS}/hyperlink`,\n target: hyperlink.target,\n targetMode,\n });\n return {\n relationshipId: relId,\n target: hyperlink.target,\n targetMode,\n ...(hyperlink.action ? { action: hyperlink.action } : {}),\n ...(hyperlink.tooltip ? { tooltip: hyperlink.tooltip } : {}),\n };\n}\n\nfunction clearHyperlinkElement(\n presentation: PresentationCore,\n slide: PptReadResult['slides'][number],\n hlink: Element | null,\n): void {\n if (!hlink) return;\n const relId = hlink.getAttributeNS(R_NS, 'id') ?? hlink.getAttribute('r:id');\n hlink.parentNode?.removeChild(hlink);\n if (relId) removeSlideRelationshipIfUnreferenced(presentation, slide, relId);\n}\n\nfunction setOptionalAttr(element: Element, name: string, value: string | undefined): void {\n if (value === undefined) element.removeAttribute(name);\n else element.setAttribute(name, value);\n}\n\nfunction textStyleFromRun(run: Element, alignment: PptTextStyle['alignment']): PptTextStyle {\n const rPr = firstChildNs(run, A_NS, 'rPr');\n const size = parseNumber(rPr?.getAttribute('sz') ?? null);\n const fontFamily = rPr ? firstTypeface(rPr) : undefined;\n const color = rPr ? colorFromRunProperties(rPr) : undefined;\n const bold = parseBooleanAttr(rPr?.getAttribute('b') ?? null);\n const italic = parseBooleanAttr(rPr?.getAttribute('i') ?? null);\n const underline = parseUnderlineAttr(rPr?.getAttribute('u') ?? null);\n const strike = parseStrikeAttr(rPr?.getAttribute('strike') ?? null);\n const baseline = parseTextBaseline(rPr);\n const highlight = rPr ? highlightColorFromRunProperties(rPr) : undefined;\n const characterSpacing = parseCharacterSpacing(rPr);\n return {\n ...(size !== undefined ? { fontSize: size / 100 } : {}),\n ...(fontFamily ? { fontFamily } : {}),\n ...(color ? { color } : {}),\n ...(bold !== undefined ? { bold } : {}),\n ...(italic !== undefined ? { italic } : {}),\n ...(underline !== undefined ? { underline } : {}),\n ...(strike !== undefined ? { strike } : {}),\n ...(baseline !== undefined ? { baseline } : {}),\n ...(highlight ? { highlight } : {}),\n ...(alignment ? { alignment } : {}),\n ...(characterSpacing !== undefined ? { characterSpacing } : {}),\n };\n}\n\nfunction firstTypeface(rPr: Element): string | undefined {\n return (\n firstChildNs(rPr, A_NS, 'ea')?.getAttribute('typeface') ??\n firstChildNs(rPr, A_NS, 'latin')?.getAttribute('typeface') ??\n firstChildNs(rPr, A_NS, 'cs')?.getAttribute('typeface') ??\n undefined\n );\n}\n\nfunction colorFromRunProperties(rPr: Element): string | undefined {\n const solidFill = firstChildNs(rPr, A_NS, 'solidFill');\n const srgbClr = solidFill ? firstChildNs(solidFill, A_NS, 'srgbClr') : null;\n const value = srgbClr?.getAttribute('val');\n if (value) return `#${value.toUpperCase()}`;\n const gradientFill = firstChildNs(rPr, A_NS, 'gradFill');\n const firstStop = gradientFill ? firstChildNs(gradientFill, A_NS, 'gs') : null;\n const gradientSrgbClr = firstStop ? firstChildNs(firstStop, A_NS, 'srgbClr') : null;\n const gradientValue = gradientSrgbClr?.getAttribute('val');\n return gradientValue ? `#${gradientValue.toUpperCase()}` : undefined;\n}\n\nfunction parseBooleanAttr(value: string | null): boolean | undefined {\n if (value === null) return undefined;\n return value === '1' || value === 'true';\n}\n\nfunction parseUnderlineAttr(value: string | null): boolean | undefined {\n if (value === null) return undefined;\n return value !== 'none';\n}\n\nfunction parseStrikeAttr(value: string | null): boolean | undefined {\n if (value === null) return undefined;\n return value !== 'noStrike';\n}\n\nfunction parseCharacterSpacing(rPr: Element | null): number | undefined {\n const value = parseNumber(rPr?.getAttribute('spc') ?? null);\n return value !== undefined ? value / 100 : undefined;\n}\n\nfunction parseTextBaseline(rPr: Element | null): number | undefined {\n const value = parseNumber(rPr?.getAttribute('baseline') ?? null);\n return value !== undefined ? value / 100000 : undefined;\n}\n\nfunction highlightColorFromRunProperties(rPr: Element): string | undefined {\n const highlight = firstChildNs(rPr, A_NS, 'highlight');\n const srgbClr = highlight ? firstChildNs(highlight, A_NS, 'srgbClr') : null;\n const value = srgbClr?.getAttribute('val');\n return value ? `#${value.toUpperCase()}` : undefined;\n}\n\nfunction parseParagraphLineHeight(pPr: Element | null): number | undefined {\n const lnSpc = pPr ? firstChildNs(pPr, A_NS, 'lnSpc') : null;\n const pct = lnSpc\n ? parseNumber(firstChildNs(lnSpc, A_NS, 'spcPct')?.getAttribute('val') ?? null)\n : undefined;\n if (pct !== undefined) return pct / 100000;\n return undefined;\n}\n\nfunction parseParagraphSpacing(element: Element | null): number | undefined {\n if (!element) return undefined;\n const points = parseNumber(firstChildNs(element, A_NS, 'spcPts')?.getAttribute('val') ?? null);\n if (points !== undefined) return points * 127;\n const pct = parseNumber(firstChildNs(element, A_NS, 'spcPct')?.getAttribute('val') ?? null);\n return pct !== undefined ? pct / 100000 : undefined;\n}\n\nfunction parseParagraphBullet(\n pPr: Element | null,\n): { char: string; color?: string; fontFamily?: string; size?: number } | undefined {\n if (!pPr || firstChildNs(pPr, A_NS, 'buNone')) return undefined;\n const typeface = firstChildNs(pPr, A_NS, 'buFont')?.getAttribute('typeface') ?? undefined;\n const color = parseBulletColor(pPr);\n const size = parseBulletSize(pPr);\n const buChar = firstChildNs(pPr, A_NS, 'buChar')?.getAttribute('char');\n if (!buChar) return undefined;\n return {\n char: normalizeBulletCharacter(buChar, typeface),\n ...(color ? { color } : {}),\n ...(typeface ? { fontFamily: typeface } : {}),\n ...(size !== undefined ? { size } : {}),\n };\n}\n\nfunction parseBulletSize(pPr: Element): number | undefined {\n const pct = parseNumber(firstChildNs(pPr, A_NS, 'buSzPct')?.getAttribute('val') ?? null);\n if (pct !== undefined) return pct / 100000;\n const pts = parseNumber(firstChildNs(pPr, A_NS, 'buSzPts')?.getAttribute('val') ?? null);\n return pts !== undefined ? pts / 100 : undefined;\n}\n\nfunction parseBulletColor(pPr: Element): string | undefined {\n const buClr = firstChildNs(pPr, A_NS, 'buClr');\n if (!buClr) return undefined;\n const srgbClr = firstChildNs(buClr, A_NS, 'srgbClr');\n const value = srgbClr?.getAttribute('val');\n return value ? `#${value.toUpperCase()}` : undefined;\n}\n\nfunction normalizeBulletCharacter(char: string, typeface: string | null | undefined): string {\n const family = typeface?.toLowerCase() ?? '';\n if (!family.includes('wingdings') && !family.includes('webdings')) return char;\n if (char === 'ü' || char === '\\u00fc') return '✓';\n if (char === 'û' || char === '\\u00fb') return '✗';\n if (char === 'p') return '□';\n if (char === 'n') return '■';\n if (char === 'l') return '●';\n if (char === 'u') return '◆';\n return '•';\n}\n\nfunction parseParagraphAlignment(value: string | null): PptTextStyle['alignment'] | undefined {\n if (value === 'ctr') return 'center';\n if (value === 'r') return 'right';\n if (value === 'just') return 'justify';\n if (value === 'dist' || value === 'thaiDist') return 'distributed';\n if (value === 'l') return 'left';\n return undefined;\n}\n\nfunction applyTextStyleToRun(run: Element, style: Partial<PptTextStyle>): void {\n const rPr = findOrCreateRunProperties(run);\n if (style.fontSize !== undefined)\n rPr.setAttribute('sz', String(Math.round(style.fontSize * 100)));\n if (style.fontFamily) setRunTypeface(rPr, style.fontFamily);\n if (style.color) setSolidFill(rPr, style.color);\n if (style.bold !== undefined) rPr.setAttribute('b', style.bold ? '1' : '0');\n if (style.italic !== undefined) rPr.setAttribute('i', style.italic ? '1' : '0');\n if (style.underline !== undefined) rPr.setAttribute('u', style.underline ? 'sng' : 'none');\n if (style.strike !== undefined)\n rPr.setAttribute('strike', style.strike ? 'sngStrike' : 'noStrike');\n if (style.baseline !== undefined)\n rPr.setAttribute('baseline', String(Math.round(style.baseline * 100000)));\n if (style.highlight) setRunHighlight(rPr, style.highlight);\n if (style.characterSpacing !== undefined)\n rPr.setAttribute('spc', String(Math.round(style.characterSpacing * 100)));\n if (style.alignment) {\n const paragraph = closestAncestor(run, A_NS, 'p');\n if (paragraph)\n findOrCreateParagraphProperties(paragraph).setAttribute(\n 'algn',\n alignmentToOoxml(style.alignment),\n );\n }\n if (style.lineHeight !== undefined) {\n const paragraph = closestAncestor(run, A_NS, 'p');\n if (paragraph)\n setParagraphLineHeight(findOrCreateParagraphProperties(paragraph), style.lineHeight);\n }\n}\n\nfunction setParagraphLineHeight(pPr: Element, lineHeight: number): void {\n let lnSpc = firstChildNs(pPr, A_NS, 'lnSpc');\n if (!lnSpc) {\n lnSpc = pPr.ownerDocument.createElementNS(A_NS, 'a:lnSpc');\n pPr.appendChild(lnSpc);\n }\n for (const child of childElementsNs(lnSpc, A_NS, 'spcPct')) {\n lnSpc.removeChild(child);\n }\n for (const child of childElementsNs(lnSpc, A_NS, 'spcPts')) {\n lnSpc.removeChild(child);\n }\n const spcPct = pPr.ownerDocument.createElementNS(A_NS, 'a:spcPct');\n spcPct.setAttribute('val', String(Math.round(lineHeight * 100000)));\n lnSpc.appendChild(spcPct);\n}\n\nfunction applyParagraphStyle(\n paragraph: Element,\n style: NonNullable<PptTextParagraphWrite['style']>,\n): void {\n const pPr = findOrCreateParagraphProperties(paragraph);\n if (style.alignment) pPr.setAttribute('algn', alignmentToOoxml(style.alignment));\n if (style.lineHeight !== undefined) setParagraphLineHeight(pPr, style.lineHeight);\n if (style.marginLeft !== undefined)\n pPr.setAttribute('marL', String(Math.round(style.marginLeft)));\n if (style.textIndent !== undefined)\n pPr.setAttribute('indent', String(Math.round(style.textIndent)));\n if (style.spaceBefore !== undefined) setParagraphSpacing(pPr, 'spcBef', style.spaceBefore);\n if (style.spaceAfter !== undefined) setParagraphSpacing(pPr, 'spcAft', style.spaceAfter);\n if (style.bullet) setParagraphBullet(pPr, style);\n}\n\nfunction setParagraphSpacing(pPr: Element, localName: 'spcBef' | 'spcAft', value: number): void {\n let spacing = firstChildNs(pPr, A_NS, localName);\n if (!spacing) {\n spacing = pPr.ownerDocument.createElementNS(A_NS, `a:${localName}`);\n pPr.appendChild(spacing);\n }\n for (const child of Array.from(spacing.childNodes)) spacing.removeChild(child);\n const spcPts = pPr.ownerDocument.createElementNS(A_NS, 'a:spcPts');\n spcPts.setAttribute('val', String(Math.round(value / 127)));\n spacing.appendChild(spcPts);\n}\n\nfunction setParagraphBullet(\n pPr: Element,\n style: Pick<\n NonNullable<PptTextParagraphWrite['style']>,\n 'bullet' | 'bulletColor' | 'bulletFontFamily' | 'bulletSize'\n >,\n): void {\n if (!style.bullet) return;\n for (const localName of [\n 'buNone',\n 'buAutoNum',\n 'buChar',\n 'buClr',\n 'buFont',\n 'buSzPct',\n 'buSzPts',\n ]) {\n for (const child of childElementsNs(pPr, A_NS, localName)) pPr.removeChild(child);\n }\n if (style.bulletSize !== undefined) {\n const size = pPr.ownerDocument.createElementNS(\n A_NS,\n style.bulletSize > 4 ? 'a:buSzPts' : 'a:buSzPct',\n );\n size.setAttribute(\n 'val',\n String(Math.round(style.bulletSize > 4 ? style.bulletSize * 100 : style.bulletSize * 100000)),\n );\n pPr.appendChild(size);\n }\n if (style.bulletColor) {\n const buClr = pPr.ownerDocument.createElementNS(A_NS, 'a:buClr');\n const srgbClr = pPr.ownerDocument.createElementNS(A_NS, 'a:srgbClr');\n srgbClr.setAttribute('val', normalizeHexColor(style.bulletColor).slice(1));\n buClr.appendChild(srgbClr);\n pPr.appendChild(buClr);\n }\n if (style.bulletFontFamily) {\n const buFont = pPr.ownerDocument.createElementNS(A_NS, 'a:buFont');\n buFont.setAttribute('typeface', style.bulletFontFamily);\n pPr.appendChild(buFont);\n }\n const buChar = pPr.ownerDocument.createElementNS(A_NS, 'a:buChar');\n buChar.setAttribute('char', style.bullet);\n pPr.appendChild(buChar);\n}\n\nfunction setRunTypeface(rPr: Element, fontFamily: string): void {\n for (const localName of ['latin', 'ea', 'cs']) {\n let font = firstChildNs(rPr, A_NS, localName);\n if (!font) {\n font = rPr.ownerDocument.createElementNS(A_NS, `a:${localName}`);\n rPr.appendChild(font);\n }\n font.setAttribute('typeface', fontFamily);\n }\n}\n\nfunction setRunHighlight(rPr: Element, color: string): void {\n for (const child of childElementsNs(rPr, A_NS, 'highlight')) rPr.removeChild(child);\n const highlight = rPr.ownerDocument.createElementNS(A_NS, 'a:highlight');\n const srgbClr = rPr.ownerDocument.createElementNS(A_NS, 'a:srgbClr');\n srgbClr.setAttribute('val', color.slice(1));\n highlight.appendChild(srgbClr);\n rPr.appendChild(highlight);\n}\n\nfunction applyTextStyleToTextElements(textElements: Element[], style: Partial<PptTextStyle>): void {\n for (const textEl of textElements) {\n const run = textEl.parentNode;\n if (!run || run.nodeType !== 1) continue;\n applyTextStyleToRun(run as Element, style);\n }\n}\n\nfunction ensureTableCellStyles(\n rowCount: number,\n columnCount: number,\n styles: PptTableCellStyle[][] | undefined,\n): PptTableCellStyle[][] {\n return Array.from({ length: rowCount }, (_, row) =>\n Array.from({ length: columnCount }, (_, column) => ({ ...styles?.[row]?.[column] })),\n );\n}\n\nfunction applyTableCellBodyProperties(tcPr: Element, body: Partial<PptTextBodyProperties>): void {\n if (body.anchor !== undefined) tcPr.setAttribute('anchor', textBodyAnchorToOoxml(body.anchor));\n if (body.wrap !== undefined) tcPr.setAttribute('wrap', body.wrap);\n if (body.insetLeft !== undefined) tcPr.setAttribute('marL', String(Math.round(body.insetLeft)));\n if (body.insetTop !== undefined) tcPr.setAttribute('marT', String(Math.round(body.insetTop)));\n if (body.insetRight !== undefined) tcPr.setAttribute('marR', String(Math.round(body.insetRight)));\n if (body.insetBottom !== undefined)\n tcPr.setAttribute('marB', String(Math.round(body.insetBottom)));\n}\n\nfunction textBodyAnchorToOoxml(anchor: NonNullable<PptTextBodyProperties['anchor']>): string {\n if (anchor === 'middle') return 'ctr';\n if (anchor === 'bottom') return 'b';\n return 't';\n}\n\nfunction textBodyWrapToOoxml(wrap: NonNullable<PptTextBodyProperties['wrap']>): string {\n return wrap;\n}\n\nfunction textBodyVerticalToOoxml(vertical: NonNullable<PptTextBodyProperties['vertical']>): string {\n return vertical === 'eastAsian' ? 'eaVert' : 'vert';\n}\n\nfunction setImageCrop(blipFill: Element, crop: NonNullable<PptImageStyle['crop']>): void {\n const srcRect = findOrCreateImageSourceRect(blipFill);\n setImageRectAttributes(srcRect, crop);\n}\n\nfunction setImageFillRect(\n blipFill: Element,\n fillRect: NonNullable<PptImageStyle['fillRect']>,\n): void {\n const element = findOrCreateImageFillRect(blipFill);\n setImageRectAttributes(element, fillRect);\n}\n\nfunction setImageRectAttributes(element: Element, rect: NonNullable<PptImageStyle['crop']>): void {\n if (rect.left !== undefined) element.setAttribute('l', String(Math.round(rect.left * 100000)));\n if (rect.top !== undefined) element.setAttribute('t', String(Math.round(rect.top * 100000)));\n if (rect.right !== undefined) element.setAttribute('r', String(Math.round(rect.right * 100000)));\n if (rect.bottom !== undefined)\n element.setAttribute('b', String(Math.round(rect.bottom * 100000)));\n}\n\nfunction setImageOpacity(blip: Element, opacity: number): void {\n for (const child of childElementsNs(blip, A_NS, 'alphaModFix')) blip.removeChild(child);\n const alpha = blip.ownerDocument.createElementNS(A_NS, 'a:alphaModFix');\n alpha.setAttribute('amt', String(Math.round(opacity * 100000)));\n blip.appendChild(alpha);\n}\n\nfunction setSolidFill(parent: Element, color: string, opacity?: number): void {\n for (const localName of ['noFill', 'solidFill', 'gradFill', 'blipFill', 'pattFill', 'grpFill']) {\n for (const child of Array.from(parent.getElementsByTagNameNS(A_NS, localName))) {\n if (child.parentNode === parent) parent.removeChild(child);\n }\n }\n const solidFill = parent.ownerDocument.createElementNS(A_NS, 'a:solidFill');\n const srgbClr = parent.ownerDocument.createElementNS(A_NS, 'a:srgbClr');\n srgbClr.setAttribute('val', color.slice(1));\n if (opacity !== undefined) {\n const alpha = parent.ownerDocument.createElementNS(A_NS, 'a:alpha');\n alpha.setAttribute('val', String(Math.round(opacity * 100000)));\n srgbClr.appendChild(alpha);\n }\n solidFill.appendChild(srgbClr);\n parent.appendChild(solidFill);\n}\n\nfunction setExistingSolidFillOpacity(\n parent: Element,\n opacity: number,\n fallbackColor?: string,\n): void {\n const solidFill = firstChildNs(parent, A_NS, 'solidFill');\n const srgbClr = solidFill ? firstChildNs(solidFill, A_NS, 'srgbClr') : null;\n if (!solidFill || !srgbClr) {\n if (fallbackColor) setSolidFill(parent, fallbackColor, opacity);\n return;\n }\n for (const child of childElementsNs(srgbClr, A_NS, 'alpha')) srgbClr.removeChild(child);\n const alpha = parent.ownerDocument.createElementNS(A_NS, 'a:alpha');\n alpha.setAttribute('val', String(Math.round(opacity * 100000)));\n srgbClr.appendChild(alpha);\n}\n\nfunction setOuterShadow(spPr: Element, shadow: NonNullable<PptShapeStyle['shadow']>): void {\n let effectList = firstChildNs(spPr, A_NS, 'effectLst');\n if (!effectList) {\n effectList = spPr.ownerDocument.createElementNS(A_NS, 'a:effectLst');\n spPr.appendChild(effectList);\n }\n for (const child of childElementsNs(effectList, A_NS, 'outerShdw')) {\n effectList.removeChild(child);\n }\n const outerShadow = spPr.ownerDocument.createElementNS(A_NS, 'a:outerShdw');\n if (shadow.blur !== undefined)\n outerShadow.setAttribute('blurRad', String(Math.round(shadow.blur)));\n if (shadow.distance !== undefined)\n outerShadow.setAttribute('dist', String(Math.round(shadow.distance)));\n if (shadow.direction !== undefined)\n outerShadow.setAttribute('dir', String(Math.round(shadow.direction * 60000)));\n const color = shadow.color ?? (shadow.opacity !== undefined ? '#000000' : undefined);\n if (color) {\n const srgbClr = spPr.ownerDocument.createElementNS(A_NS, 'a:srgbClr');\n srgbClr.setAttribute('val', color.slice(1));\n if (shadow.opacity !== undefined) {\n const alpha = spPr.ownerDocument.createElementNS(A_NS, 'a:alpha');\n alpha.setAttribute('val', String(Math.round(shadow.opacity * 100000)));\n srgbClr.appendChild(alpha);\n }\n outerShadow.appendChild(srgbClr);\n }\n effectList.appendChild(outerShadow);\n}\n\nfunction normalizeHexColor(color: string): string {\n const trimmed = color.trim();\n const raw = trimmed.startsWith('#') ? trimmed.slice(1) : trimmed;\n if (!/^[0-9a-fA-F]{6}$/.test(raw)) throw new Error(`Presentation: invalid color ${color}`);\n return `#${raw.toUpperCase()}`;\n}\n\nfunction normalizeOpacity(opacity: number): number {\n if (!Number.isFinite(opacity) || opacity < 0 || opacity > 1)\n throw new Error(`Presentation: opacity must be between 0 and 1: ${opacity}`);\n return opacity;\n}\n\nfunction normalizeNonNegativeNumber(value: number, name: string): number {\n if (!Number.isFinite(value) || value < 0)\n throw new Error(`Presentation: ${name} must be a non-negative number: ${value}`);\n return value;\n}\n\nfunction normalizeFiniteNumber(value: number, name: string): number {\n if (!Number.isFinite(value))\n throw new Error(`Presentation: ${name} must be a finite number: ${value}`);\n return value;\n}\n\nfunction normalizeShadow(\n shadow: NonNullable<PptShapeStyle['shadow']>,\n): NonNullable<PptShapeStyle['shadow']> {\n return {\n ...(shadow.color ? { color: normalizeHexColor(shadow.color) } : {}),\n ...(shadow.opacity !== undefined ? { opacity: normalizeOpacity(shadow.opacity) } : {}),\n ...(shadow.blur !== undefined\n ? { blur: normalizeNonNegativeNumber(shadow.blur, 'shadow blur') }\n : {}),\n ...(shadow.distance !== undefined\n ? { distance: normalizeNonNegativeNumber(shadow.distance, 'shadow distance') }\n : {}),\n ...(shadow.direction !== undefined\n ? { direction: normalizeFiniteNumber(shadow.direction, 'shadow direction') }\n : {}),\n };\n}\n\nfunction imageSourceBytes(source: PptImageSource): Uint8Array {\n if (source instanceof Uint8Array) return source;\n if (source instanceof ArrayBuffer) return new Uint8Array(source);\n if ('bytes' in source)\n return source.bytes instanceof Uint8Array ? source.bytes : new Uint8Array(source.bytes);\n return Uint8Array.from(globalThis.atob(source.base64), (char) => char.charCodeAt(0));\n}\n\nfunction imageSourceInfo(\n source: PptImageSource,\n options: PptImageAddOptions = {},\n): { bytes: Uint8Array; contentType: string; extension: string } {\n const bytes = imageSourceBytes(source);\n const contentType = options.mimeType ?? sourceMimeType(source) ?? sniffImageMimeType(bytes);\n return {\n bytes,\n contentType,\n extension: imageExtension(contentType, options.filename ?? sourceFilename(source)),\n };\n}\n\nfunction sourceMimeType(source: PptImageSource): string | undefined {\n if (source instanceof Uint8Array || source instanceof ArrayBuffer) return undefined;\n return source.mimeType;\n}\n\nfunction sourceFilename(source: PptImageSource): string | undefined {\n if (source instanceof Uint8Array || source instanceof ArrayBuffer) return undefined;\n return source.filename;\n}\n\nfunction sniffImageMimeType(bytes: Uint8Array): string {\n if (bytes[0] === 0x89 && bytes[1] === 0x50 && bytes[2] === 0x4e && bytes[3] === 0x47)\n return 'image/png';\n if (bytes[0] === 0xff && bytes[1] === 0xd8) return 'image/jpeg';\n if (bytes[0] === 0x47 && bytes[1] === 0x49 && bytes[2] === 0x46) return 'image/gif';\n return 'image/png';\n}\n\nfunction imageExtension(contentType: string, filename?: string): string {\n const filenameExt = filename?.match(/\\.([A-Za-z0-9]+)$/)?.[1]?.toLowerCase();\n if (filenameExt) return filenameExt === 'jpg' ? 'jpeg' : filenameExt;\n if (contentType === 'image/jpeg') return 'jpeg';\n if (contentType === 'image/gif') return 'gif';\n if (contentType === 'image/svg+xml') return 'svg';\n return 'png';\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction normalizeInsertIndex(index: number | 'end', length: number): number {\n if (index === 'end') return length;\n return Math.max(0, Math.min(index, length));\n}\n\nfunction nextSlidePartNumber(slides: PptSlideModel[]): number {\n const used = new Set(\n slides\n .map((slide) => slide.path?.match(/ppt\\/slides\\/slide(\\d+)\\.xml$/)?.[1])\n .filter((value): value is string => Boolean(value))\n .map((value) => Number(value)),\n );\n let next = 1;\n while (used.has(next)) next++;\n return next;\n}\n\nfunction nextSlideId(slides: PptSlideModel[]): number {\n const max = slides.reduce((value, slide) => {\n const numeric = Number(slide.id);\n return Number.isFinite(numeric) ? Math.max(value, numeric) : value;\n }, 255);\n return max + 1;\n}\n\nfunction nextRelationshipId(presentation: PresentationCore): string {\n const rels = parseRelationships(requirePart(presentation, 'ppt/_rels/presentation.xml.rels'));\n const used = new Set(rels.keys());\n let index = 1;\n while (used.has(`rId${index}`)) index++;\n return `rId${index}`;\n}\n\nfunction addPresentationRelationship(\n presentation: PresentationCore,\n relId: string,\n target: string,\n): void {\n addPresentationRelationshipOfType(presentation, {\n id: relId,\n type: `${OFFICE_REL_NS}/slide`,\n target,\n });\n}\n\nfunction addPresentationRelationshipOfType(\n presentation: PresentationCore,\n relationship: {\n id?: string;\n type: string;\n target: string;\n targetMode?: string;\n },\n): string {\n const part = ensurePresentationRelationshipsPart(presentation);\n const relId = relationship.id ?? nextPresentationRelationshipIdFromPart(part);\n const rel = part.xmlDom!.createElementNS(PKG_REL_NS, 'Relationship');\n rel.setAttribute('Id', relId);\n rel.setAttribute('Type', relationship.type);\n rel.setAttribute('Target', relationship.target);\n if (relationship.targetMode) rel.setAttribute('TargetMode', relationship.targetMode);\n part.xmlDom!.documentElement.appendChild(rel);\n markDirty(part);\n return relId;\n}\n\nfunction ensurePresentationRelationshipsPart(presentation: PresentationCore): Part {\n const existing = getPart(presentation._package(), 'ppt/_rels/presentation.xml.rels');\n if (existing?.xmlDom) return existing;\n const part = createXmlPart({\n path: 'ppt/_rels/presentation.xml.rels',\n contentType: 'application/vnd.openxmlformats-package.relationships+xml',\n xmlDom: parseXmlDocument(\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Relationships xmlns=\"${PKG_REL_NS}\"/>`,\n ) as unknown as Document,\n });\n setPart(presentation._package(), part);\n return part;\n}\n\nfunction nextPresentationRelationshipIdFromPart(part: Part): string {\n const rels = parseRelationships(part);\n const used = new Set(rels.keys());\n let index = 1;\n while (used.has(`rId${index}`)) index++;\n return `rId${index}`;\n}\n\nfunction removePresentationRelationship(presentation: PresentationCore, relId: string): void {\n const part = requirePart(presentation, 'ppt/_rels/presentation.xml.rels');\n const rels = Array.from(\n part.xmlDom!.getElementsByTagNameNS(PKG_REL_NS, 'Relationship'),\n ) as Element[];\n const rel = rels.find((item) => item.getAttribute('Id') === relId);\n if (rel?.parentNode) {\n rel.parentNode.removeChild(rel);\n markDirty(part);\n }\n}\n\nfunction addSlideImageRelationship(\n presentation: PresentationCore,\n slideId: string,\n mediaPath: string,\n): string {\n const slide = presentation._getSlideInternal(slideId);\n if (!slide?.model.path) throw new Error(`Presentation: slide not found: ${slideId}`);\n return addSlideRelationship(presentation, slide, {\n type: `${OFFICE_REL_NS}/image`,\n target: relativeMediaTarget(mediaPath),\n });\n}\n\nfunction addSlideRelationship(\n presentation: PresentationCore,\n slide: PptReadResult['slides'][number],\n relationship: {\n type: string;\n target: string;\n targetMode?: string;\n },\n): string {\n if (!slide.model.path) throw new Error(`Presentation: slide not found: ${slide.model.id}`);\n const part = ensureSlideRelationshipsPart(presentation, slide.model.path);\n const rels = parseRelationships(part);\n const used = new Set(rels.keys());\n let index = 1;\n while (used.has(`rId${index}`)) index++;\n const relId = `rId${index}`;\n const rel = part.xmlDom!.createElementNS(PKG_REL_NS, 'Relationship');\n rel.setAttribute('Id', relId);\n rel.setAttribute('Type', relationship.type);\n rel.setAttribute('Target', relationship.target);\n if (relationship.targetMode) rel.setAttribute('TargetMode', relationship.targetMode);\n part.xmlDom!.documentElement.appendChild(rel);\n markDirty(part);\n slide.relationships.set(relId, {\n id: relId,\n type: relationship.type,\n target: relationship.target,\n targetMode: relationship.targetMode,\n });\n return relId;\n}\n\nfunction removeSlideRelationship(\n presentation: PresentationCore,\n slide: PptReadResult['slides'][number],\n relId: string,\n): void {\n if (!slide.model.path) return;\n const part = getPart(presentation._package(), relsPathForPart(slide.model.path));\n if (!part?.xmlDom) return;\n const rels = Array.from(\n part.xmlDom.getElementsByTagNameNS(PKG_REL_NS, 'Relationship'),\n ) as Element[];\n const rel = rels.find((item) => item.getAttribute('Id') === relId);\n if (rel?.parentNode) {\n rel.parentNode.removeChild(rel);\n markDirty(part);\n }\n slide.relationships.delete(relId);\n}\n\nfunction removeSlideRelationshipIfUnreferenced(\n presentation: PresentationCore,\n slide: PptReadResult['slides'][number],\n relId: string,\n except?: Element,\n): void {\n const refs = slide.part.xmlDom ? allDescendantsNs(slide.part.xmlDom, A_NS, 'hlinkClick') : [];\n const stillUsed = refs.some((item) => {\n if (item === except) return false;\n return (item.getAttributeNS(R_NS, 'id') ?? item.getAttribute('r:id')) === relId;\n });\n if (!stillUsed) removeSlideRelationship(presentation, slide, relId);\n}\n\nfunction getNotesSlidePart(\n presentation: PresentationCore,\n slide: PptReadResult['slides'][number],\n): Part | undefined {\n const rel = Array.from(slide.relationships.values()).find(\n (item) => item.type === `${OFFICE_REL_NS}/notesSlide`,\n );\n return rel ? getPart(presentation._package(), resolveSlideTarget(slide, rel.target)) : undefined;\n}\n\nfunction ensureNotesSlidePart(\n presentation: PresentationCore,\n slide: PptReadResult['slides'][number],\n): Part {\n const existing = getNotesSlidePart(presentation, slide);\n if (existing?.xmlDom) return existing;\n const path = nextNumberedPartPath(presentation, 'ppt/notesSlides/notesSlide', '.xml');\n const part = createXmlPart({\n path,\n contentType: 'application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml',\n xmlDom: parseXmlDocument(notesSlideXml('')) as unknown as Document,\n });\n setPart(presentation._package(), part);\n addSlideRelationship(presentation, slide, {\n type: `${OFFICE_REL_NS}/notesSlide`,\n target: relativeSlideTarget(slide, path),\n });\n deletePart(presentation._package(), '[Content_Types].xml');\n return part;\n}\n\nfunction setNotesText(doc: Document, text: string): void {\n const textNodes = allDescendantsNs(doc, A_NS, 't');\n if (textNodes.length === 0) {\n const nextRoot = parseXmlDocument(notesSlideXml(text)).documentElement;\n if (!nextRoot) throw new Error('Presentation: failed to create notes XML');\n doc.replaceChild(nextRoot as unknown as Node, doc.documentElement as unknown as Node);\n return;\n }\n textNodes[0]!.textContent = text;\n for (const extra of textNodes.slice(1)) extra.textContent = '';\n}\n\nfunction getSlideCommentsPart(\n presentation: PresentationCore,\n slide: PptReadResult['slides'][number],\n): Part | undefined {\n const rel = Array.from(slide.relationships.values()).find(\n (item) => item.type === `${OFFICE_REL_NS}/comments`,\n );\n return rel ? getPart(presentation._package(), resolveSlideTarget(slide, rel.target)) : undefined;\n}\n\nfunction ensureSlideCommentsPart(\n presentation: PresentationCore,\n slide: PptReadResult['slides'][number],\n): Part {\n const existing = getSlideCommentsPart(presentation, slide);\n if (existing?.xmlDom) return existing;\n const path = nextNumberedPartPath(presentation, 'ppt/comments/comment', '.xml');\n const part = createXmlPart({\n path,\n contentType: 'application/vnd.openxmlformats-officedocument.presentationml.comments+xml',\n xmlDom: parseXmlDocument(`<p:cmLst xmlns:p=\"${P_NS}\"/>`) as unknown as Document,\n });\n setPart(presentation._package(), part);\n addSlideRelationship(presentation, slide, {\n type: `${OFFICE_REL_NS}/comments`,\n target: relativeSlideTarget(slide, path),\n });\n deletePart(presentation._package(), '[Content_Types].xml');\n return part;\n}\n\nfunction appendSlideComment(\n doc: Document,\n options: PptCommentAddOptions & { authorId: string },\n): PptCommentModel {\n const root = doc.documentElement;\n const id = String(nextCommentIndex(doc));\n const cm = doc.createElementNS(P_NS, 'p:cm');\n cm.setAttribute('authorId', options.authorId);\n cm.setAttribute('idx', id);\n cm.setAttribute('dt', options.date ?? new Date().toISOString());\n const pos = doc.createElementNS(P_NS, 'p:pos');\n pos.setAttribute('x', String(options.x ?? 0));\n pos.setAttribute('y', String(options.y ?? 0));\n const text = doc.createElementNS(P_NS, 'p:text');\n text.textContent = options.text;\n cm.appendChild(pos);\n cm.appendChild(text);\n root.appendChild(cm);\n return {\n id,\n authorId: options.authorId,\n ...(options.author ? { author: options.author } : {}),\n ...(options.initials ? { initials: options.initials } : {}),\n ...(cm.getAttribute('dt') ? { date: cm.getAttribute('dt')! } : {}),\n text: options.text,\n x: options.x ?? 0,\n y: options.y ?? 0,\n };\n}\n\nfunction removeSlideComment(doc: Document, commentId: string): boolean {\n const comment = allDescendantsNs(doc, P_NS, 'cm').find(\n (item) => item.getAttribute('idx') === commentId,\n );\n if (!comment?.parentNode) return false;\n comment.parentNode.removeChild(comment);\n return true;\n}\n\nfunction ensureCommentAuthor(\n presentation: PresentationCore,\n author: { name: string; initials: string },\n): { id: string } {\n const part = ensureCommentAuthorsPart(presentation);\n const existing = allDescendantsNs(part.xmlDom!, P_NS, 'cmAuthor').find(\n (item) =>\n item.getAttribute('name') === author.name &&\n item.getAttribute('initials') === author.initials,\n );\n if (existing?.getAttribute('id')) return { id: existing.getAttribute('id')! };\n const id = String(nextCommentAuthorId(part.xmlDom!));\n const node = part.xmlDom!.createElementNS(P_NS, 'p:cmAuthor');\n node.setAttribute('id', id);\n node.setAttribute('name', author.name);\n node.setAttribute('initials', author.initials);\n node.setAttribute('lastIdx', '0');\n node.setAttribute('clrIdx', id);\n part.xmlDom!.documentElement.appendChild(node);\n markDirty(part);\n return { id };\n}\n\nfunction ensureCommentAuthorsPart(presentation: PresentationCore): Part {\n const presentationPart = requirePart(presentation, 'ppt/presentation.xml');\n const relsPart = ensurePresentationRelationshipsPart(presentation);\n const rels = parseRelationships(relsPart);\n const existingRel = Array.from(rels.values()).find(\n (item) => item.type === `${OFFICE_REL_NS}/commentAuthors`,\n );\n const path = existingRel\n ? resolveRelationshipTarget(presentationPart.path, existingRel.target)\n : 'ppt/commentAuthors.xml';\n const existing = getPart(presentation._package(), path);\n if (existing?.xmlDom) return existing;\n const part = createXmlPart({\n path,\n contentType: 'application/vnd.openxmlformats-officedocument.presentationml.commentAuthors+xml',\n xmlDom: parseXmlDocument(`<p:cmAuthorLst xmlns:p=\"${P_NS}\"/>`) as unknown as Document,\n });\n setPart(presentation._package(), part);\n if (!existingRel) {\n addPresentationRelationshipOfType(presentation, {\n type: `${OFFICE_REL_NS}/commentAuthors`,\n target: 'commentAuthors.xml',\n });\n }\n deletePart(presentation._package(), '[Content_Types].xml');\n return part;\n}\n\nfunction nextCommentIndex(doc: Document): number {\n return (\n allDescendantsNs(doc, P_NS, 'cm').reduce((max, comment) => {\n const value = Number(comment.getAttribute('idx'));\n return Number.isFinite(value) ? Math.max(max, value) : max;\n }, 0) + 1\n );\n}\n\nfunction nextCommentAuthorId(doc: Document): number {\n return (\n allDescendantsNs(doc, P_NS, 'cmAuthor').reduce((max, author) => {\n const value = Number(author.getAttribute('id'));\n return Number.isFinite(value) ? Math.max(max, value) : max;\n }, -1) + 1\n );\n}\n\nfunction notesSlideXml(text: string): string {\n return `<p:notes xmlns:p=\"${P_NS}\" xmlns:a=\"${A_NS}\"><p:cSld><p:spTree><p:nvGrpSpPr><p:cNvPr id=\"1\" name=\"\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr/><p:sp><p:nvSpPr><p:cNvPr id=\"2\" name=\"Notes Placeholder\"/><p:cNvSpPr/><p:nvPr/></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:t>${escapeXmlText(text)}</a:t></a:r></a:p></p:txBody></p:sp></p:spTree></p:cSld></p:notes>`;\n}\n\nfunction nextNumberedPartPath(\n presentation: PresentationCore,\n prefix: string,\n suffix: string,\n): string {\n let index = 1;\n let path = `${prefix}${index}${suffix}`;\n while (getPart(presentation._package(), path)) {\n index++;\n path = `${prefix}${index}${suffix}`;\n }\n return path;\n}\n\nfunction resolveSlideTarget(slide: PptReadResult['slides'][number], target: string): string {\n return resolveRelationshipTarget(slide.part.path, target);\n}\n\nfunction relativeSlideTarget(slide: PptReadResult['slides'][number], targetPath: string): string {\n if (targetPath.startsWith('ppt/notesSlides/')) {\n return `../notesSlides/${targetPath.slice('ppt/notesSlides/'.length)}`;\n }\n if (targetPath.startsWith('ppt/comments/')) {\n return `../comments/${targetPath.slice('ppt/comments/'.length)}`;\n }\n return `/${targetPath}`;\n}\n\nfunction escapeXmlText(value: string): string {\n return value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n\nfunction ensureSlideRelationshipsPart(presentation: PresentationCore, slidePath: string): Part {\n const relsPath = relsPathForPart(slidePath);\n const existing = presentation._package().parts.get(relsPath);\n if (existing?.xmlDom) return existing;\n const part = createXmlPart({\n path: relsPath,\n contentType: 'application/vnd.openxmlformats-package.relationships+xml',\n xmlDom: parseXmlDocument(\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Relationships xmlns=\"${PKG_REL_NS}\"/>`,\n ) as unknown as Document,\n });\n setPart(presentation._package(), part);\n return part;\n}\n\nfunction relativeMediaTarget(mediaPath: string): string {\n if (!mediaPath.startsWith('ppt/media/')) return `/${mediaPath}`;\n return `../media/${mediaPath.slice('ppt/media/'.length)}`;\n}\n\nfunction getSlideIdList(presentation: PresentationCore): Element {\n const part = requirePart(presentation, 'ppt/presentation.xml');\n const existing = allDescendantsNs(part.xmlDom!, P_NS, 'sldIdLst')[0];\n if (existing) return existing;\n const root = part.xmlDom!.documentElement;\n const sldIdLst = part.xmlDom!.createElementNS(P_NS, 'p:sldIdLst');\n root.appendChild(sldIdLst);\n markDirty(part);\n return sldIdLst;\n}\n\nfunction addSlideId(\n presentation: PresentationCore,\n index: number,\n slideId: string,\n relId: string,\n): void {\n const part = requirePart(presentation, 'ppt/presentation.xml');\n const sldIdLst = getSlideIdList(presentation);\n const sldId = part.xmlDom!.createElementNS(P_NS, 'p:sldId');\n sldId.setAttribute('id', slideId);\n sldId.setAttributeNS(R_NS, 'r:id', relId);\n const nodes = allDescendantsNs(sldIdLst, P_NS, 'sldId');\n sldIdLst.insertBefore(sldId, nodes[index] ?? null);\n markDirty(part);\n}\n\nfunction removeSlideId(presentation: PresentationCore, relId: string): void {\n const part = requirePart(presentation, 'ppt/presentation.xml');\n const sldIdLst = getSlideIdList(presentation);\n const nodes = allDescendantsNs(sldIdLst, P_NS, 'sldId');\n const target = nodes.find(\n (node) => (node.getAttributeNS(R_NS, 'id') ?? node.getAttribute('r:id')) === relId,\n );\n if (target) {\n sldIdLst.removeChild(target);\n markDirty(part);\n }\n}\n\nfunction requirePart(presentation: PresentationCore, path: string): Part {\n const part = presentation._package().parts.get(path);\n if (!part?.xmlDom) throw new Error(`Presentation: missing XML part ${path}`);\n return part;\n}\n\nfunction defaultTitleGeometry(size: PptSlideSize | undefined): PptShapeGeometry {\n const width = size?.width ?? 9144000;\n return {\n left: Math.round(width * 0.08),\n top: 600000,\n width: Math.round(width * 0.84),\n height: 800000,\n };\n}\n\nfunction defaultShapeGeometry(): PptShapeGeometry {\n return {\n left: 600000,\n top: 900000,\n width: 3000000,\n height: 700000,\n };\n}\n\nfunction defaultTableGeometry(rowCount: number): PptShapeGeometry {\n return {\n left: 600000,\n top: 1200000,\n width: 4200000,\n height: Math.max(700000, rowCount * 380000),\n };\n}\n\nfunction defaultImageGeometry(): PptShapeGeometry {\n return {\n left: 600000,\n top: 900000,\n width: 2400000,\n height: 1600000,\n };\n}\n\nfunction defaultPresetShapeGeometry(preset: PptPresetShape): PptShapeGeometry {\n if (preset === 'line') {\n return {\n left: 600000,\n top: 900000,\n width: 2400000,\n height: 0,\n };\n }\n return {\n left: 600000,\n top: 900000,\n width: 1800000,\n height: 900000,\n };\n}\n\nfunction makeTextShapeModel(\n slide: PptSlideModel,\n text: string,\n options: PptShapeAddOptions,\n): PptShapeModel {\n const id = nextShapeId(slide);\n return {\n id,\n name: options.name ?? `TextBox ${id}`,\n kind: 'textBox',\n geometry: { ...defaultShapeGeometry(), ...options.geometry },\n text: { text },\n };\n}\n\nfunction makePresetShapeModel(\n slide: PptSlideModel,\n preset: PptPresetShape,\n options: PptShapeAddOptions,\n): PptShapeModel {\n const id = nextShapeId(slide);\n return {\n id,\n name: options.name ?? `${preset} ${id}`,\n kind: preset === 'line' ? 'line' : 'geometricShape',\n geometry: { ...defaultPresetShapeGeometry(preset), ...options.geometry },\n raw: {\n hostType: 'sp',\n },\n };\n}\n\nfunction makeImageShapeModel(\n slide: PptSlideModel,\n relationshipId: string,\n targetPath: string,\n contentType: string,\n options: PptImageAddOptions,\n): PptShapeModel {\n const id = nextShapeId(slide);\n return {\n id,\n name: options.name ?? `Picture ${id}`,\n kind: 'picture',\n geometry: { ...defaultImageGeometry(), ...options.geometry },\n image: {\n relationshipId,\n targetPath,\n contentType,\n filename: targetPath.slice(targetPath.lastIndexOf('/') + 1),\n },\n };\n}\n\nfunction makeTableShapeModel(\n slide: PptSlideModel,\n rowCount: number,\n columnCount: number,\n options: PptTableAddOptions,\n): PptShapeModel {\n const id = nextShapeId(slide);\n const values = normalizeTableValues(rowCount, columnCount, options.values);\n return {\n id,\n name: options.name ?? `Table ${id}`,\n kind: 'table',\n geometry: { ...defaultTableGeometry(rowCount), ...options.geometry },\n table: {\n rowCount,\n columnCount,\n values,\n },\n };\n}\n\nfunction normalizeTableValues(\n rowCount: number,\n columnCount: number,\n values?: string[][],\n): string[][] {\n if (values && (values.length !== rowCount || values.some((row) => row.length !== columnCount))) {\n throw new Error(`Presentation: table values must match ${rowCount}x${columnCount}`);\n }\n return Array.from({ length: rowCount }, (_, row) =>\n Array.from({ length: columnCount }, (_, column) => values?.[row]?.[column] ?? ''),\n );\n}\n\nfunction nextShapeId(slide: PptSlideModel): string {\n const max = slide.shapes.reduce((value, shape) => {\n const numeric = Number(shape.id);\n return Number.isFinite(numeric) ? Math.max(value, numeric) : value;\n }, 1);\n return String(max + 1);\n}\n\nfunction nextMediaPath(presentation: PresentationCore, extension: string): string {\n let index = 1;\n let path = `ppt/media/image${index}.${extension}`;\n while (presentation._package().parts.has(path)) {\n index++;\n path = `ppt/media/image${index}.${extension}`;\n }\n return path;\n}\n\nfunction applyGeometryToElement(shape: Element, geometry: PptShapeGeometry): void {\n const xfrm = findOrCreateTransform(shape);\n let off = firstChildNs(xfrm, A_NS, 'off');\n if (!off) {\n off = xfrm.ownerDocument.createElementNS(A_NS, 'a:off');\n xfrm.appendChild(off);\n }\n let ext = firstChildNs(xfrm, A_NS, 'ext');\n if (!ext) {\n ext = xfrm.ownerDocument.createElementNS(A_NS, 'a:ext');\n xfrm.appendChild(ext);\n }\n setAttrIfDefined(off, 'x', geometry.left);\n setAttrIfDefined(off, 'y', geometry.top);\n setAttrIfDefined(ext, 'cx', geometry.width);\n setAttrIfDefined(ext, 'cy', geometry.height);\n setAttrIfDefined(xfrm, 'rot', degreesToOoxmlAngle(geometry.rotation));\n}\n\nfunction degreesToOoxmlAngle(rotation: number | undefined): number | undefined {\n return rotation === undefined ? undefined : Math.round(rotation * 60000);\n}\n\nfunction duplicatePictureMedia(\n presentation: PresentationCore,\n slideId: string,\n shape: Element,\n sourcePath: string,\n): string {\n const sourcePart = getPart(presentation._package(), sourcePath);\n const bytes = sourcePart?.bytes ?? sourcePart?._originalBytes;\n if (!sourcePart || !bytes) throw new Error(`Presentation: image part not found: ${sourcePath}`);\n const contentType = sourcePart.contentType || 'image/png';\n const targetPath = nextMediaPath(\n presentation,\n imageExtension(contentType, sourcePath.slice(sourcePath.lastIndexOf('/') + 1)),\n );\n const relationshipId = addSlideImageRelationship(presentation, slideId, targetPath);\n setPart(\n presentation._package(),\n createBinaryPart({\n path: targetPath,\n contentType,\n bytes,\n originalBytes: bytes,\n }),\n );\n const blip = allDescendantsNs(shape, A_NS, 'blip')[0];\n if (!blip) throw new Error('Presentation: duplicated picture shape has no blip relationship');\n blip.setAttributeNS(R_NS, 'r:embed', relationshipId);\n deletePart(presentation._package(), '[Content_Types].xml');\n return targetPath;\n}\n\nfunction appendShapeXml(presentation: PresentationCore, slideId: string, xml: string): void {\n const internal = presentation._getSlideInternal(slideId);\n if (!internal) throw new Error(`Presentation: slide not found: ${slideId}`);\n const spTree = getSpTree(internal);\n const doc = parseXmlDocument(\n `<root xmlns:p=\"${P_NS}\" xmlns:a=\"${A_NS}\" xmlns:r=\"${R_NS}\">${xml}</root>`,\n ) as unknown as Document;\n const element = Array.from(doc.documentElement.childNodes).find((node) => node.nodeType === 1);\n if (!element) throw new Error('Presentation: generated shape XML is empty');\n spTree.appendChild(spTree.ownerDocument.importNode(element, true));\n markDirty(internal.part);\n}\n\nfunction getSpTree(slide: PptReadResult['slides'][number]): Element {\n const spTree = allDescendantsNs(slide.part.xmlDom!, P_NS, 'spTree')[0];\n if (!spTree) throw new Error(`Presentation: slide ${slide.model.id} has no shape tree`);\n return spTree;\n}\n\nfunction firstShapeTreeElement(parent: Node): Element | null {\n for (let i = 0; i < parent.childNodes.length; i++) {\n const child = parent.childNodes[i];\n if (child?.nodeType !== 1) continue;\n const element = child as Element;\n if (element.namespaceURI !== P_NS) continue;\n if (\n element.localName === 'sp' ||\n element.localName === 'pic' ||\n element.localName === 'graphicFrame' ||\n element.localName === 'grpSp'\n ) {\n return element;\n }\n }\n return null;\n}\n\nfunction slideXmlFromModel(slide: PptSlideModel): string {\n return (\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>` +\n `<p:sld xmlns:p=\"${P_NS}\" xmlns:a=\"${A_NS}\" xmlns:r=\"${R_NS}\">` +\n `<p:cSld><p:spTree>` +\n `<p:nvGrpSpPr><p:cNvPr id=\"1\" name=\"\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>` +\n `<p:grpSpPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/></a:xfrm></p:grpSpPr>` +\n slide.shapes.map((shape, index) => simpleTextShapeXml(shape, index)).join('') +\n `</p:spTree></p:cSld>` +\n `</p:sld>`\n );\n}\n\nfunction simpleTextShapeXml(shape: PptShapeModel, index: number): string {\n const geometry = shape.geometry ?? {};\n return (\n `<p:sp>` +\n `<p:nvSpPr><p:cNvPr id=\"${xmlAttr(shape.id || String(index + 2))}\" name=\"${xmlAttr(shape.name || `Shape ${index + 1}`)}\"/><p:cNvSpPr/><p:nvPr/></p:nvSpPr>` +\n `<p:spPr><a:xfrm><a:off x=\"${geometry.left ?? 0}\" y=\"${geometry.top ?? 0}\"/><a:ext cx=\"${geometry.width ?? 3000000}\" cy=\"${geometry.height ?? 600000}\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></p:spPr>` +\n `<p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:t>${xmlText(shape.text?.text ?? '')}</a:t></a:r></a:p></p:txBody>` +\n `</p:sp>`\n );\n}\n\nfunction tableShapeXml(shape: PptShapeModel, index: number): string {\n const geometry = shape.geometry ?? {};\n const rows = shape.table?.values ?? [];\n const columnCount =\n shape.table?.columnCount ?? rows.reduce((max, row) => Math.max(max, row.length), 0);\n const gridCols = Array.from({ length: columnCount }, () => `<a:gridCol w=\"1000000\"/>`).join('');\n const tableRows = rows\n .map(\n (row) =>\n `<a:tr h=\"370840\">` +\n Array.from({ length: columnCount }, (_, column) => tableCellXml(row[column] ?? '')).join(\n '',\n ) +\n `</a:tr>`,\n )\n .join('');\n return (\n `<p:graphicFrame>` +\n `<p:nvGraphicFramePr><p:cNvPr id=\"${xmlAttr(shape.id || String(index + 2))}\" name=\"${xmlAttr(shape.name || `Table ${index + 1}`)}\"/><p:cNvGraphicFramePr/><p:nvPr/></p:nvGraphicFramePr>` +\n `<p:xfrm><a:off x=\"${geometry.left ?? 0}\" y=\"${geometry.top ?? 0}\"/><a:ext cx=\"${geometry.width ?? 3000000}\" cy=\"${geometry.height ?? 900000}\"/></p:xfrm>` +\n `<a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/table\">` +\n `<a:tbl><a:tblPr/><a:tblGrid>${gridCols}</a:tblGrid>${tableRows}</a:tbl>` +\n `</a:graphicData></a:graphic>` +\n `</p:graphicFrame>`\n );\n}\n\nfunction pictureShapeXml(shape: PptShapeModel, index: number): string {\n const geometry = shape.geometry ?? {};\n const relId = shape.image?.relationshipId;\n if (!relId) throw new Error('Presentation: picture shape needs relationshipId');\n return (\n `<p:pic>` +\n `<p:nvPicPr><p:cNvPr id=\"${xmlAttr(shape.id || String(index + 2))}\" name=\"${xmlAttr(shape.name || `Picture ${index + 1}`)}\"/><p:cNvPicPr/><p:nvPr/></p:nvPicPr>` +\n `<p:blipFill><a:blip r:embed=\"${xmlAttr(relId)}\"/><a:stretch><a:fillRect/></a:stretch></p:blipFill>` +\n `<p:spPr><a:xfrm><a:off x=\"${geometry.left ?? 0}\" y=\"${geometry.top ?? 0}\"/><a:ext cx=\"${geometry.width ?? 2400000}\" cy=\"${geometry.height ?? 1600000}\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></p:spPr>` +\n `</p:pic>`\n );\n}\n\nfunction presetShapeXml(shape: PptShapeModel, preset: PptPresetShape, index: number): string {\n const geometry = shape.geometry ?? {};\n const isLine = preset === 'line';\n const shapeProperties = isLine\n ? `<p:spPr><a:xfrm><a:off x=\"${geometry.left ?? 0}\" y=\"${geometry.top ?? 0}\"/><a:ext cx=\"${geometry.width ?? 2400000}\" cy=\"${geometry.height ?? 0}\"/></a:xfrm><a:ln w=\"12700\"/></p:spPr>`\n : `<p:spPr><a:xfrm><a:off x=\"${geometry.left ?? 0}\" y=\"${geometry.top ?? 0}\"/><a:ext cx=\"${geometry.width ?? 1800000}\" cy=\"${geometry.height ?? 900000}\"/></a:xfrm><a:prstGeom prst=\"${xmlAttr(preset)}\"><a:avLst/></a:prstGeom></p:spPr>`;\n return (\n `<p:sp>` +\n `<p:nvSpPr><p:cNvPr id=\"${xmlAttr(shape.id || String(index + 2))}\" name=\"${xmlAttr(shape.name || `${preset} ${index + 1}`)}\"/><p:cNvSpPr/><p:nvPr/></p:nvSpPr>` +\n shapeProperties +\n `</p:sp>`\n );\n}\n\nfunction tableCellXml(text: string): string {\n return (\n `<a:tc>` +\n `<a:txBody><a:bodyPr/><a:p><a:r><a:t>${xmlText(text)}</a:t></a:r></a:p></a:txBody>` +\n `<a:tcPr/>` +\n `</a:tc>`\n );\n}\n\nfunction xmlText(value: string): string {\n return value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n\nfunction xmlAttr(value: string): string {\n return xmlText(value).replace(/\"/g, '&quot;').replace(/'/g, '&apos;');\n}\n\nfunction cloneModel<T>(model: T): T {\n return JSON.parse(JSON.stringify(model)) as T;\n}\n","import {\n PresentationCore,\n PresentationThemeCollectionCore,\n ShapeChartApiCore,\n ShapeCollectionCore,\n ShapeCore,\n ShapeGroupApiCore,\n ShapeImageApiCore,\n ShapeTextApiCore,\n SlideCommentsApiCore,\n SlideCollectionCore,\n SlideCore,\n SlideNotesApiCore,\n TableApiCore,\n TableCellCore,\n type PptImageAddOptions,\n type PptPresetShape,\n type PptShapeAddOptions,\n type PptShapeDuplicateOptions,\n type PptSlideAddOptions,\n type PptSlideCopyOptions,\n type PptTableAddOptions,\n type PresentationCoreLoadOptions,\n} from './presentation-core.js';\nimport type {\n PresentationLoadOptions,\n PresentationRuntimeMode,\n PptChartData,\n PptChartModel,\n PptCommentAddOptions,\n PptCommentModel,\n PptExportedFont,\n PptExportedImage,\n PptFindTextOptions,\n PptHyperlinkModel,\n PptHyperlinkWriteOptions,\n PptImageCropModel,\n PptImageInfo,\n PptImageSource,\n PptImageStyle,\n PptParagraphAlignment,\n PptPresentationModel,\n PptPresentationProperties,\n PptShapeGeometry,\n PptShapeKind,\n PptShapeModel,\n PptShapeStyle,\n PptSlideLayoutModel,\n PptSlideModel,\n PptSlideProperties,\n PptSlideTimingModel,\n PptSlideTransitionModel,\n PptTableCellMerge,\n PptTableCellStyle,\n PptThemeModel,\n PptTextBodyProperties,\n PptTextMatch,\n PptTextParagraph,\n PptTextParagraphWrite,\n PptTextReplaceOptions,\n PptTextReplaceResult,\n PptTextStyle,\n PptTextRun,\n PptTextWriteOptions,\n} from './model.js';\nimport type { PptMutation } from './mutations.js';\n\nexport interface PresentationModeDecision {\n mode: 'inline' | 'worker';\n source: 'explicit-inline' | 'explicit-worker' | 'auto/inline';\n}\n\nexport class Presentation {\n readonly presentationId: string;\n readonly mode: 'inline' | 'worker';\n readonly modeSource: PresentationModeDecision['source'];\n readonly slides: SlideCollection;\n readonly themes: PresentationThemeCollection;\n private disposed = false;\n\n private constructor(\n private readonly core: PresentationCore,\n decision: PresentationModeDecision,\n ) {\n this.presentationId = core.presentationId;\n this.mode = decision.mode;\n this.modeSource = decision.source;\n this.slides = new SlideCollection(core.slides);\n this.themes = new PresentationThemeCollection(core.themes);\n }\n\n static async fromZip(\n bytes: Uint8Array | ArrayBuffer,\n opts: PresentationLoadOptions = {},\n ): Promise<Presentation> {\n const decision = resolveMode(opts.mode);\n const core = await PresentationCore.fromZip(bytes, toCoreOptions(opts));\n opts.onModeResolved?.(decision, core.presentationId);\n return new Presentation(core, decision);\n }\n\n static async fromModel(\n model: PptPresentationModel,\n opts: PresentationLoadOptions = {},\n ): Promise<Presentation> {\n const decision = resolveMode(opts.mode);\n const core = PresentationCore.fromModel(model, toCoreOptions(opts));\n opts.onModeResolved?.(decision, core.presentationId);\n return new Presentation(core, decision);\n }\n\n static async createBlank(opts: PresentationLoadOptions = {}): Promise<Presentation> {\n return Presentation.fromModel(\n {\n id: opts.presentationId,\n slides: [\n {\n id: '256',\n index: 0,\n shapes: [],\n },\n ],\n },\n opts,\n );\n }\n\n async toModel(): Promise<PptPresentationModel> {\n this.assertNotDisposed();\n return this.core.toModel();\n }\n\n async properties(): Promise<PptPresentationProperties> {\n this.assertNotDisposed();\n return this.core.properties();\n }\n\n async toZip(): Promise<Uint8Array> {\n this.assertNotDisposed();\n return this.core.toZip();\n }\n\n async getMutations(): Promise<PptMutation[]> {\n this.assertNotDisposed();\n return this.core.getMutations();\n }\n\n async clearMutations(): Promise<void> {\n this.assertNotDisposed();\n this.core.clearMutations();\n }\n\n async findText(query: string | RegExp, options?: PptFindTextOptions): Promise<PptTextMatch[]> {\n this.assertNotDisposed();\n return this.core.findText(query, options);\n }\n\n async replaceText(\n search: string | RegExp,\n replacement: string,\n options?: PptTextReplaceOptions,\n ): Promise<PptTextReplaceResult> {\n this.assertNotDisposed();\n return this.core.replaceText(search, replacement, options);\n }\n\n async exportImages(): Promise<PptExportedImage[]> {\n this.assertNotDisposed();\n return this.core.exportImages();\n }\n\n async exportFonts(): Promise<PptExportedFont[]> {\n this.assertNotDisposed();\n return this.core.exportFonts();\n }\n\n async executeCode<T = unknown>(): Promise<T> {\n throw new Error('Presentation.executeCode is planned but not implemented in PPT P0 runtime');\n }\n\n async dispose(): Promise<void> {\n this.disposed = true;\n }\n\n private assertNotDisposed(): void {\n if (this.disposed) throw new Error('Presentation has been disposed');\n }\n}\n\nexport class PresentationThemeCollection {\n constructor(private readonly core: PresentationThemeCollectionCore) {}\n\n async items(): Promise<PptThemeModel[]> {\n return this.core.items();\n }\n\n async getCount(): Promise<number> {\n return this.core.getCount();\n }\n}\n\nexport class SlideCollection {\n constructor(private readonly core: SlideCollectionCore) {}\n\n async items(): Promise<Slide[]> {\n return this.core.items().map((slide) => new Slide(slide));\n }\n\n async getCount(): Promise<number> {\n return this.core.getCount();\n }\n\n getItem(indexOrId: number | string): Slide {\n return new Slide(this.core.getItem(indexOrId));\n }\n\n async getItemOrNullObject(indexOrId: number | string): Promise<Slide | null> {\n const slide = this.core.getItemOrNullObject(indexOrId);\n return slide ? new Slide(slide) : null;\n }\n\n async add(options?: PptSlideAddOptions): Promise<Slide> {\n return new Slide(this.core.add(options));\n }\n\n async copy(indexOrId: number | string, options?: PptSlideCopyOptions): Promise<Slide> {\n return new Slide(this.core.copy(indexOrId, options));\n }\n\n async move(indexOrId: number | string, toIndex: number): Promise<void> {\n this.core.move(indexOrId, toIndex);\n }\n\n async deleteItem(indexOrId: number | string): Promise<void> {\n this.core.deleteItem(indexOrId);\n }\n}\n\nexport class Slide {\n readonly shapes: ShapeCollection;\n readonly notes: SlideNotesApi;\n readonly comments: SlideCommentsApi;\n\n constructor(private readonly core: SlideCore) {\n this.shapes = new ShapeCollection(core.shapes);\n this.notes = new SlideNotesApi(core.notes);\n this.comments = new SlideCommentsApi(core.comments);\n }\n\n async id(): Promise<string> {\n return this.core.id();\n }\n\n async index(): Promise<number> {\n return this.core.index();\n }\n\n async name(): Promise<string | undefined> {\n return this.core.name();\n }\n\n async title(): Promise<string | undefined> {\n return this.core.title();\n }\n\n async layout(): Promise<PptSlideLayoutModel | null> {\n return this.core.layout();\n }\n\n async transition(): Promise<PptSlideTransitionModel | null> {\n return this.core.transition();\n }\n\n async timing(): Promise<PptSlideTimingModel | null> {\n return this.core.timing();\n }\n\n async properties(): Promise<PptSlideProperties> {\n return this.core.properties();\n }\n\n async setTitle(text: string, opts?: PptTextWriteOptions): Promise<void> {\n this.core.setTitle(text, opts);\n }\n\n async findText(query: string | RegExp, options?: PptFindTextOptions): Promise<PptTextMatch[]> {\n return this.core.findText(query, options);\n }\n\n async replaceText(\n search: string | RegExp,\n replacement: string,\n options?: PptTextReplaceOptions,\n ): Promise<PptTextReplaceResult> {\n return this.core.replaceText(search, replacement, options);\n }\n\n async duplicate(options?: PptSlideCopyOptions): Promise<Slide> {\n return new Slide(this.core.duplicate(options));\n }\n\n async moveTo(index: number): Promise<void> {\n this.core.moveTo(index);\n }\n\n async delete(): Promise<void> {\n this.core.delete();\n }\n\n async toModel(): Promise<PptSlideModel> {\n return this.core.toModel();\n }\n}\n\nexport class SlideNotesApi {\n constructor(private readonly core: SlideNotesApiCore) {}\n\n async hasText(): Promise<boolean> {\n return this.core.hasText();\n }\n\n async getText(): Promise<string> {\n return this.core.getText();\n }\n\n async setText(text: string): Promise<void> {\n this.core.setText(text);\n }\n\n async clear(): Promise<void> {\n this.core.clear();\n }\n}\n\nexport class SlideCommentsApi {\n constructor(private readonly core: SlideCommentsApiCore) {}\n\n async items(): Promise<PptCommentModel[]> {\n return this.core.items();\n }\n\n async getCount(): Promise<number> {\n return this.core.getCount();\n }\n\n async add(options: PptCommentAddOptions): Promise<PptCommentModel> {\n return this.core.add(options);\n }\n\n async delete(commentId: string): Promise<void> {\n this.core.delete(commentId);\n }\n\n async clear(): Promise<void> {\n this.core.clear();\n }\n}\n\nexport class ShapeCollection {\n constructor(private readonly core: ShapeCollectionCore) {}\n\n async items(): Promise<Shape[]> {\n return this.core.items().map((shape) => new Shape(shape));\n }\n\n async getCount(): Promise<number> {\n return this.core.getCount();\n }\n\n getItem(idOrName: string): Shape {\n return new Shape(this.core.getItem(idOrName));\n }\n\n getItemAt(index: number): Shape {\n return new Shape(this.core.getItemAt(index));\n }\n\n async getItemOrNullObject(idOrName: string): Promise<Shape | null> {\n const shape = this.core.getItemOrNullObject(idOrName);\n return shape ? new Shape(shape) : null;\n }\n\n async addTextBox(text: string, options?: PptShapeAddOptions): Promise<Shape> {\n return new Shape(this.core.addTextBox(text, options));\n }\n\n async addTable(\n rowCount: number,\n columnCount: number,\n options?: PptTableAddOptions,\n ): Promise<Shape> {\n return new Shape(this.core.addTable(rowCount, columnCount, options));\n }\n\n async addImage(source: PptImageSource, options?: PptImageAddOptions): Promise<Shape> {\n return new Shape(this.core.addImage(source, options));\n }\n\n async addShape(preset: PptPresetShape, options?: PptShapeAddOptions): Promise<Shape> {\n return new Shape(this.core.addShape(preset, options));\n }\n\n async deleteItem(idOrName: string): Promise<void> {\n this.core.deleteItem(idOrName);\n }\n}\n\nexport class Shape {\n readonly chart: ShapeChartApi;\n readonly text: ShapeTextApi;\n readonly image: ShapeImageApi;\n readonly table: TableApi;\n readonly group: ShapeGroupApi;\n\n constructor(private readonly core: ShapeCore) {\n this.chart = new ShapeChartApi(core.chart);\n this.text = new ShapeTextApi(core.text);\n this.image = new ShapeImageApi(core.image);\n this.table = new TableApi(core.table);\n this.group = new ShapeGroupApi(core.group);\n }\n\n async id(): Promise<string> {\n return this.core.id();\n }\n\n async name(): Promise<string | undefined> {\n return this.core.name();\n }\n\n async setName(name: string): Promise<void> {\n this.core.setName(name);\n }\n\n async kind(): Promise<PptShapeKind> {\n return this.core.kind();\n }\n\n async geometry(): Promise<PptShapeGeometry> {\n return this.core.geometry();\n }\n\n async style(): Promise<PptShapeStyle> {\n return this.core.style();\n }\n\n async hyperlink(): Promise<PptHyperlinkModel | null> {\n return this.core.hyperlink();\n }\n\n async setHyperlink(hyperlink: PptHyperlinkWriteOptions): Promise<void> {\n this.core.setHyperlink(hyperlink);\n }\n\n async clearHyperlink(): Promise<void> {\n this.core.clearHyperlink();\n }\n\n async setGeometry(geometry: Partial<PptShapeGeometry>): Promise<void> {\n this.core.setGeometry(geometry);\n }\n\n async setFillColor(color: string): Promise<void> {\n this.core.setFillColor(color);\n }\n\n async setLineStyle(style: Pick<PptShapeStyle, 'lineColor' | 'lineWidth'>): Promise<void> {\n this.core.setLineStyle(style);\n }\n\n async setStyle(style: Partial<PptShapeStyle>): Promise<void> {\n this.core.setStyle(style);\n }\n\n async delete(): Promise<void> {\n this.core.delete();\n }\n\n async duplicate(options?: PptShapeDuplicateOptions): Promise<Shape> {\n return new Shape(this.core.duplicate(options));\n }\n\n async bringToFront(): Promise<void> {\n this.core.bringToFront();\n }\n\n async sendToBack(): Promise<void> {\n this.core.sendToBack();\n }\n\n async toModel(): Promise<PptShapeModel> {\n return this.core.toModel();\n }\n}\n\nexport class ShapeChartApi {\n constructor(private readonly core: ShapeChartApiCore) {}\n\n async isChart(): Promise<boolean> {\n return this.core.isChart();\n }\n\n async getInfo(): Promise<PptChartModel | null> {\n return this.core.getInfo();\n }\n\n async getData(): Promise<PptChartData | null> {\n return this.core.getData();\n }\n\n async setData(data: PptChartData): Promise<void> {\n this.core.setData(data);\n }\n}\n\nexport class ShapeGroupApi {\n constructor(private readonly core: ShapeGroupApiCore) {}\n\n async isGroup(): Promise<boolean> {\n return this.core.isGroup();\n }\n\n async items(): Promise<Shape[]> {\n return this.core.items().map((shape) => new Shape(shape));\n }\n\n async getCount(): Promise<number> {\n return this.core.getCount();\n }\n\n getItem(idOrName: string): Shape {\n return new Shape(this.core.getItem(idOrName));\n }\n\n getItemAt(index: number): Shape {\n return new Shape(this.core.getItemAt(index));\n }\n\n async getItemOrNullObject(idOrName: string): Promise<Shape | null> {\n const shape = this.core.getItemOrNullObject(idOrName);\n return shape ? new Shape(shape) : null;\n }\n}\n\nexport class ShapeTextApi {\n constructor(private readonly core: ShapeTextApiCore) {}\n\n async hasText(): Promise<boolean> {\n return this.core.hasText();\n }\n\n async getText(): Promise<string> {\n return this.core.getText();\n }\n\n async style(): Promise<PptTextStyle> {\n return this.core.style();\n }\n\n async body(): Promise<PptTextBodyProperties> {\n return this.core.body();\n }\n\n async paragraphs(): Promise<PptTextParagraph[]> {\n return this.core.paragraphs();\n }\n\n async runs(): Promise<PptTextRun[]> {\n return this.core.runs();\n }\n\n async setParagraphs(paragraphs: PptTextParagraphWrite[]): Promise<void> {\n this.core.setParagraphs(paragraphs);\n }\n\n async setRunStyle(runIndex: number, style: Partial<PptTextStyle>): Promise<void> {\n this.core.setRunStyle(runIndex, style);\n }\n\n async setRunTextStyle(runIndex: number, style: Partial<PptTextStyle>): Promise<void> {\n this.core.setRunTextStyle(runIndex, style);\n }\n\n async setRunHyperlink(runIndex: number, hyperlink: PptHyperlinkWriteOptions): Promise<void> {\n this.core.setRunHyperlink(runIndex, hyperlink);\n }\n\n async clearRunHyperlink(runIndex: number): Promise<void> {\n this.core.clearRunHyperlink(runIndex);\n }\n\n async setText(text: string, opts?: PptTextWriteOptions): Promise<void> {\n this.core.setText(text, opts);\n }\n\n async setStyle(style: Partial<PptTextStyle>): Promise<void> {\n this.core.setStyle(style);\n }\n\n async setTextStyle(style: Partial<PptTextStyle>): Promise<void> {\n this.core.setTextStyle(style);\n }\n\n async setBodyProperties(body: Partial<PptTextBodyProperties>): Promise<void> {\n this.core.setBodyProperties(body);\n }\n\n async setBold(enabled: boolean): Promise<void> {\n this.core.setBold(enabled);\n }\n\n async setItalic(enabled: boolean): Promise<void> {\n this.core.setItalic(enabled);\n }\n\n async setAlignment(alignment: PptParagraphAlignment): Promise<void> {\n this.core.setAlignment(alignment);\n }\n\n async replace(\n search: string | RegExp,\n replacement: string,\n opts?: PptTextReplaceOptions,\n ): Promise<PptTextReplaceResult> {\n return this.core.replace(search, replacement, opts);\n }\n}\n\nexport class ShapeImageApi {\n constructor(private readonly core: ShapeImageApiCore) {}\n\n async isImage(): Promise<boolean> {\n return this.core.isImage();\n }\n\n async getInfo(): Promise<PptImageInfo | null> {\n return this.core.getInfo();\n }\n\n async style(): Promise<PptImageStyle> {\n return this.core.style();\n }\n\n async setStyle(style: Partial<PptImageStyle>): Promise<void> {\n this.core.setStyle(style);\n }\n\n async setCrop(crop: PptImageCropModel): Promise<void> {\n this.core.setCrop(crop);\n }\n\n async setFillRect(fillRect: PptImageCropModel): Promise<void> {\n this.core.setFillRect(fillRect);\n }\n\n async setOpacity(opacity: number): Promise<void> {\n this.core.setOpacity(opacity);\n }\n\n async bytes(): Promise<Uint8Array> {\n return this.core.bytes();\n }\n\n async replace(source: PptImageSource): Promise<void> {\n this.core.replace(source);\n }\n}\n\nexport class TableApi {\n constructor(private readonly core: TableApiCore) {}\n\n async isTable(): Promise<boolean> {\n return this.core.isTable();\n }\n\n async rowCount(): Promise<number> {\n return this.core.rowCount();\n }\n\n async columnCount(): Promise<number> {\n return this.core.columnCount();\n }\n\n async values(): Promise<string[][]> {\n return this.core.values();\n }\n\n async hasMergedCells(): Promise<boolean> {\n return this.core.hasMergedCells();\n }\n\n async mergedCells(): Promise<PptTableCellMerge[]> {\n return this.core.mergedCells();\n }\n\n async setValues(values: string[][]): Promise<void> {\n this.core.setValues(values);\n }\n\n async setCellText(row: number, column: number, text: string): Promise<void> {\n this.core.setCellText(row, column, text);\n }\n\n async addRow(index: number | 'end' = 'end', values?: string[]): Promise<void> {\n this.core.addRow(index, values);\n }\n\n async deleteRow(index: number): Promise<void> {\n this.core.deleteRow(index);\n }\n\n async addColumn(index: number | 'end' = 'end', values?: string[]): Promise<void> {\n this.core.addColumn(index, values);\n }\n\n async deleteColumn(index: number): Promise<void> {\n this.core.deleteColumn(index);\n }\n\n getCell(row: number, column: number): TableCell {\n return new TableCell(this.core.getCell(row, column));\n }\n}\n\nexport class TableCell {\n constructor(private readonly core: TableCellCore) {}\n\n async text(): Promise<string> {\n return this.core.text();\n }\n\n async paragraphs(): Promise<PptTextParagraph[]> {\n return this.core.paragraphs();\n }\n\n async runs(): Promise<PptTextRun[]> {\n return this.core.runs();\n }\n\n async setParagraphs(paragraphs: PptTextParagraphWrite[]): Promise<void> {\n this.core.setParagraphs(paragraphs);\n }\n\n async setRunStyle(runIndex: number, style: Partial<PptTextStyle>): Promise<void> {\n this.core.setRunStyle(runIndex, style);\n }\n\n async setText(text: string): Promise<void> {\n this.core.setText(text);\n }\n\n async style(): Promise<PptTableCellStyle> {\n return this.core.style();\n }\n\n async setStyle(style: Partial<PptTableCellStyle>): Promise<void> {\n this.core.setStyle(style);\n }\n}\n\nfunction resolveMode(mode: PresentationRuntimeMode = 'auto'): PresentationModeDecision {\n if (mode === 'worker') {\n throw new Error('Presentation worker mode is planned but not implemented in PPT P0');\n }\n if (mode === 'inline') return { mode: 'inline', source: 'explicit-inline' };\n return { mode: 'inline', source: 'auto/inline' };\n}\n\nfunction toCoreOptions(opts: PresentationLoadOptions): PresentationCoreLoadOptions {\n return { presentationId: opts.presentationId };\n}\n","import type { PptMutation } from './mutations.js';\nimport type { PptPresentationModel, PptShapeModel, PptSlideModel } from './model.js';\n\nexport type PptWritebackStrategy =\n | 'no-op'\n | 'presentation-package-replace'\n | 'slide-package-replace'\n | 'mutation-replay'\n | 'unsupported';\n\nexport type PptWritebackPreference = 'auto' | 'package' | 'slide-package' | 'mutation';\n\nexport interface PptWritebackCapabilities {\n /** Host can replace the active presentation with a full pptx package. */\n canReplacePresentationPackage?: boolean;\n /** Host can replace an existing slide from a generated slide/package payload. */\n canReplaceSlides?: boolean;\n /** Host can insert new slides from a generated slide/package payload. */\n canInsertSlides?: boolean;\n /** Host can delete slides. */\n canDeleteSlides?: boolean;\n /** Host can reorder slides. */\n canReorderSlides?: boolean;\n /** Host can replay SDK mutation records through live host APIs. */\n canReplayMutations?: boolean;\n /** Optional allow-list for mutation replay. Missing means every mutation type is accepted by the planner. */\n supportedMutationTypes?: PptMutation['type'][];\n /** Upper bound for replay operation count before planner should prefer package replacement. */\n maxMutationCount?: number;\n}\n\nexport interface PptWritebackPlanOptions {\n preference?: PptWritebackPreference;\n mutations?: PptMutation[];\n}\n\nexport type PptDeckDiffKind = 'added' | 'deleted' | 'modified';\nexport type PptShapeDiffKind = 'added' | 'deleted' | 'modified';\n\nexport interface PptShapeDiff {\n kind: PptShapeDiffKind;\n shapeId: string;\n beforeName?: string;\n afterName?: string;\n beforeKind?: PptShapeModel['kind'];\n afterKind?: PptShapeModel['kind'];\n before?: PptShapeModel;\n after?: PptShapeModel;\n}\n\nexport interface PptSlideDiff {\n kind: PptDeckDiffKind;\n slideId: string;\n beforeIndex?: number;\n afterIndex?: number;\n beforeTitle?: string;\n afterTitle?: string;\n moved: boolean;\n propertiesChanged: boolean;\n shapeOrderChanged: boolean;\n shapeChanges: PptShapeDiff[];\n before?: PptSlideModel;\n after?: PptSlideModel;\n}\n\nexport interface PptPresentationDiff {\n changed: boolean;\n presentationPropertiesChanged: boolean;\n slideSizeChanged: boolean;\n mediaChanged: boolean;\n slides: PptSlideDiff[];\n}\n\nexport type PptWritebackOperation =\n | { type: 'replacePresentationPackage' }\n | { type: 'replaceSlidePackage'; slideId: string; slideIndex: number; targetSlide: PptSlideModel }\n | { type: 'insertSlidePackage'; slideId: string; slideIndex: number; targetSlide: PptSlideModel }\n | { type: 'deleteSlide'; slideId: string; slideIndex: number }\n | { type: 'moveSlide'; slideId: string; fromIndex: number; toIndex: number }\n | { type: 'replayMutations'; mutations: PptMutation[] };\n\nexport interface PptWritebackPlan {\n strategy: PptWritebackStrategy;\n diff: PptPresentationDiff;\n operations: PptWritebackOperation[];\n warnings: string[];\n unsupportedReasons: string[];\n}\n\nexport function diffPptPresentationModels(\n before: PptPresentationModel,\n after: PptPresentationModel,\n): PptPresentationDiff {\n const beforeById = new Map(before.slides.map((slide) => [slide.id, slide]));\n const afterById = new Map(after.slides.map((slide) => [slide.id, slide]));\n const slides: PptSlideDiff[] = [];\n\n for (const beforeSlide of before.slides) {\n const afterSlide = afterById.get(beforeSlide.id);\n if (!afterSlide) {\n slides.push({\n kind: 'deleted',\n slideId: beforeSlide.id,\n beforeIndex: beforeSlide.index,\n beforeTitle: beforeSlide.title,\n moved: false,\n propertiesChanged: true,\n shapeOrderChanged: false,\n shapeChanges: beforeSlide.shapes.map((shape) => ({\n kind: 'deleted',\n shapeId: shape.id,\n beforeName: shape.name,\n beforeKind: shape.kind,\n before: cloneModel(shape),\n })),\n before: cloneModel(beforeSlide),\n });\n continue;\n }\n\n const shapeChanges = diffShapes(beforeSlide.shapes, afterSlide.shapes);\n const moved = beforeSlide.index !== afterSlide.index;\n const propertiesChanged = slidePropertiesKey(beforeSlide) !== slidePropertiesKey(afterSlide);\n const shapeOrderChanged =\n shapeOrderKey(beforeSlide.shapes) !== shapeOrderKey(afterSlide.shapes);\n if (moved || propertiesChanged || shapeOrderChanged || shapeChanges.length > 0) {\n slides.push({\n kind: 'modified',\n slideId: beforeSlide.id,\n beforeIndex: beforeSlide.index,\n afterIndex: afterSlide.index,\n beforeTitle: beforeSlide.title,\n afterTitle: afterSlide.title,\n moved,\n propertiesChanged,\n shapeOrderChanged,\n shapeChanges,\n before: cloneModel(beforeSlide),\n after: cloneModel(afterSlide),\n });\n }\n }\n\n for (const afterSlide of after.slides) {\n if (!beforeById.has(afterSlide.id)) {\n slides.push({\n kind: 'added',\n slideId: afterSlide.id,\n afterIndex: afterSlide.index,\n afterTitle: afterSlide.title,\n moved: false,\n propertiesChanged: true,\n shapeOrderChanged: false,\n shapeChanges: afterSlide.shapes.map((shape) => ({\n kind: 'added',\n shapeId: shape.id,\n afterName: shape.name,\n afterKind: shape.kind,\n after: cloneModel(shape),\n })),\n after: cloneModel(afterSlide),\n });\n }\n }\n\n const presentationPropertiesChanged =\n presentationPropertiesKey(before) !== presentationPropertiesKey(after);\n const slideSizeChanged = stableJson(before.slideSize) !== stableJson(after.slideSize);\n const mediaChanged = stableJson(before.media) !== stableJson(after.media);\n\n return {\n changed: presentationPropertiesChanged || slideSizeChanged || mediaChanged || slides.length > 0,\n presentationPropertiesChanged,\n slideSizeChanged,\n mediaChanged,\n slides: slides.sort(\n (left, right) =>\n (left.afterIndex ?? left.beforeIndex ?? 0) - (right.afterIndex ?? right.beforeIndex ?? 0),\n ),\n };\n}\n\nexport function planPptWriteback(\n before: PptPresentationModel,\n after: PptPresentationModel,\n capabilities: PptWritebackCapabilities,\n options: PptWritebackPlanOptions = {},\n): PptWritebackPlan {\n const diff = diffPptPresentationModels(before, after);\n if (!diff.changed) {\n return { strategy: 'no-op', diff, operations: [], warnings: [], unsupportedReasons: [] };\n }\n\n const preference = options.preference ?? 'auto';\n const packagePlan = tryPlanPackage(diff, capabilities);\n if (preference === 'package') return packagePlan;\n\n const slidePlan = tryPlanSlidePackage(diff, after, capabilities);\n if (preference === 'slide-package') return slidePlan;\n\n const mutationPlan = tryPlanMutationReplay(diff, options.mutations, capabilities);\n if (preference === 'mutation') return mutationPlan;\n\n if (packagePlan.strategy !== 'unsupported') return packagePlan;\n if (slidePlan.strategy !== 'unsupported') return slidePlan;\n if (mutationPlan.strategy !== 'unsupported') return mutationPlan;\n\n return unsupported(diff, [\n ...packagePlan.unsupportedReasons,\n ...slidePlan.unsupportedReasons,\n ...mutationPlan.unsupportedReasons,\n ]);\n}\n\nfunction tryPlanPackage(\n diff: PptPresentationDiff,\n capabilities: PptWritebackCapabilities,\n): PptWritebackPlan {\n if (!capabilities.canReplacePresentationPackage) {\n return unsupported(diff, ['host cannot replace the active presentation package in place']);\n }\n return {\n strategy: 'presentation-package-replace',\n diff,\n operations: [{ type: 'replacePresentationPackage' }],\n warnings: [],\n unsupportedReasons: [],\n };\n}\n\nfunction tryPlanSlidePackage(\n diff: PptPresentationDiff,\n after: PptPresentationModel,\n capabilities: PptWritebackCapabilities,\n): PptWritebackPlan {\n const operations: PptWritebackOperation[] = [];\n const warnings: string[] = [];\n const afterById = new Map(after.slides.map((slide) => [slide.id, slide]));\n\n if (diff.presentationPropertiesChanged || diff.slideSizeChanged || diff.mediaChanged) {\n return unsupported(diff, [\n 'slide package replacement cannot apply presentation-level or media-list changes alone',\n ]);\n }\n\n for (const slide of diff.slides) {\n if (slide.kind === 'added') {\n if (!capabilities.canInsertSlides)\n return unsupported(diff, ['slide package replacement cannot insert slides']);\n const targetSlide = afterById.get(slide.slideId);\n if (!targetSlide || slide.afterIndex === undefined) {\n return unsupported(diff, [`target slide model not found for slide id ${slide.slideId}`]);\n }\n operations.push({\n type: 'insertSlidePackage',\n slideId: slide.slideId,\n slideIndex: slide.afterIndex,\n targetSlide: cloneModel(targetSlide),\n });\n continue;\n }\n\n if (slide.kind === 'deleted') {\n if (!capabilities.canDeleteSlides)\n return unsupported(diff, ['slide package replacement cannot delete slides']);\n operations.push({\n type: 'deleteSlide',\n slideId: slide.slideId,\n slideIndex: slide.beforeIndex ?? 0,\n });\n continue;\n }\n\n if (slide.moved) {\n if (!capabilities.canReorderSlides)\n return unsupported(diff, ['slide package replacement cannot reorder slides']);\n operations.push({\n type: 'moveSlide',\n slideId: slide.slideId,\n fromIndex: slide.beforeIndex ?? 0,\n toIndex: slide.afterIndex ?? 0,\n });\n }\n\n if (slide.propertiesChanged || slide.shapeOrderChanged || slide.shapeChanges.length > 0) {\n if (!capabilities.canReplaceSlides)\n return unsupported(diff, ['host cannot replace individual slide packages']);\n const targetSlide = afterById.get(slide.slideId);\n if (!targetSlide || slide.afterIndex === undefined) {\n return unsupported(diff, [`target slide model not found for slide id ${slide.slideId}`]);\n }\n operations.push({\n type: 'replaceSlidePackage',\n slideId: slide.slideId,\n slideIndex: slide.afterIndex,\n targetSlide: cloneModel(targetSlide),\n });\n }\n }\n\n if (operations.some((operation) => operation.type === 'replaceSlidePackage')) {\n warnings.push(\n 'slide package replacement is adapter-defined and must preserve relationships, layouts, and media parts',\n );\n }\n\n return { strategy: 'slide-package-replace', diff, operations, warnings, unsupportedReasons: [] };\n}\n\nfunction tryPlanMutationReplay(\n diff: PptPresentationDiff,\n mutations: PptMutation[] | undefined,\n capabilities: PptWritebackCapabilities,\n): PptWritebackPlan {\n if (!capabilities.canReplayMutations) {\n return unsupported(diff, ['host cannot replay PPT SDK mutations']);\n }\n if (!mutations || mutations.length === 0) {\n return unsupported(diff, ['mutation replay requires SDK mutation records']);\n }\n const maxMutationCount = capabilities.maxMutationCount ?? Number.POSITIVE_INFINITY;\n if (mutations.length > maxMutationCount) {\n return unsupported(diff, [\n `mutation count ${mutations.length} exceeds maxMutationCount ${maxMutationCount}`,\n ]);\n }\n const supported = capabilities.supportedMutationTypes\n ? new Set(capabilities.supportedMutationTypes)\n : null;\n const unsupportedTypes = supported\n ? mutations.map((mutation) => mutation.type).filter((type) => !supported.has(type))\n : [];\n if (unsupportedTypes.length > 0) {\n return unsupported(diff, [\n `host cannot replay mutation types: ${[...new Set(unsupportedTypes)].join(', ')}`,\n ]);\n }\n\n const warnings: string[] = [];\n if (diff.presentationPropertiesChanged || diff.slideSizeChanged) {\n warnings.push(\n 'mutation replay must validate presentation-level changes before applying host operations',\n );\n }\n if (diff.mediaChanged) {\n warnings.push('mutation replay must validate media relationships and package image parts');\n }\n\n return {\n strategy: 'mutation-replay',\n diff,\n operations: [{ type: 'replayMutations', mutations: mutations.map(cloneModel) }],\n warnings,\n unsupportedReasons: [],\n };\n}\n\nfunction unsupported(diff: PptPresentationDiff, unsupportedReasons: string[]): PptWritebackPlan {\n return {\n strategy: 'unsupported',\n diff,\n operations: [],\n warnings: [],\n unsupportedReasons: [...new Set(unsupportedReasons)],\n };\n}\n\nfunction diffShapes(before: PptShapeModel[], after: PptShapeModel[]): PptShapeDiff[] {\n const beforeById = new Map(before.map((shape) => [shape.id, shape]));\n const afterById = new Map(after.map((shape) => [shape.id, shape]));\n const changes: PptShapeDiff[] = [];\n\n for (const beforeShape of before) {\n const afterShape = afterById.get(beforeShape.id);\n if (!afterShape) {\n changes.push({\n kind: 'deleted',\n shapeId: beforeShape.id,\n beforeName: beforeShape.name,\n beforeKind: beforeShape.kind,\n before: cloneModel(beforeShape),\n });\n } else if (stableJson(beforeShape) !== stableJson(afterShape)) {\n changes.push({\n kind: 'modified',\n shapeId: beforeShape.id,\n beforeName: beforeShape.name,\n afterName: afterShape.name,\n beforeKind: beforeShape.kind,\n afterKind: afterShape.kind,\n before: cloneModel(beforeShape),\n after: cloneModel(afterShape),\n });\n }\n }\n\n for (const afterShape of after) {\n if (!beforeById.has(afterShape.id)) {\n changes.push({\n kind: 'added',\n shapeId: afterShape.id,\n afterName: afterShape.name,\n afterKind: afterShape.kind,\n after: cloneModel(afterShape),\n });\n }\n }\n\n return changes.sort((left, right) =>\n left.shapeId.localeCompare(right.shapeId, undefined, { numeric: true }),\n );\n}\n\nfunction presentationPropertiesKey(model: PptPresentationModel): string {\n return stableJson({\n id: model.id,\n title: model.title,\n });\n}\n\nfunction slidePropertiesKey(slide: PptSlideModel): string {\n return stableJson({\n id: slide.id,\n name: slide.name,\n title: slide.title,\n relationshipId: slide.relationshipId,\n path: slide.path,\n layoutId: slide.layoutId,\n });\n}\n\nfunction shapeOrderKey(shapes: PptShapeModel[]): string {\n return stableJson(shapes.map((shape) => shape.id));\n}\n\nfunction stableJson(value: unknown): string {\n return JSON.stringify(sortForJson(value));\n}\n\nfunction sortForJson(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sortForJson);\n if (!value || typeof value !== 'object') return value;\n return Object.fromEntries(\n Object.entries(value)\n .filter(([, entryValue]) => entryValue !== undefined)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entryValue]) => [key, sortForJson(entryValue)]),\n );\n}\n\nfunction cloneModel<T>(model: T): T {\n return JSON.parse(JSON.stringify(model)) as T;\n}\n","import type {\n PptWritebackCapabilities,\n PptWritebackOperation,\n PptWritebackPlan,\n} from './writeback-planner.js';\n\nexport type PptHostKind =\n | 'microsoft-powerpoint'\n | 'wps-presentation'\n | 'onlyoffice-presentation'\n | 'desktop-package'\n | 'custom';\n\nexport type PptHostCapabilityStatus = 'unproven' | 'probed' | 'supported';\n\nexport interface PptHostWritebackProfile {\n host: PptHostKind;\n status: PptHostCapabilityStatus;\n capabilities: PptWritebackCapabilities;\n notes: string[];\n}\n\nexport interface PptHostWritebackProfileOptions {\n capabilities?: PptWritebackCapabilities;\n notes?: string[];\n status?: PptHostCapabilityStatus;\n}\n\nexport interface PptWritebackPlanValidation {\n ok: boolean;\n unsupportedReasons: string[];\n warnings: string[];\n}\n\nexport type PptHostProbeCheckName =\n | 'package.replace'\n | 'slide.replace'\n | 'slide.insert'\n | 'slide.delete'\n | 'slide.reorder'\n | 'shape.add'\n | 'shape.delete'\n | 'shape.name.write'\n | 'shape.zOrder.write'\n | 'shape.geometry.write'\n | 'shape.style.write'\n | 'text.write'\n | 'text.style.write'\n | 'image.write'\n | 'table.cell.write'\n | 'table.cell.style.write'\n | 'table.values.write'\n | 'table.structure.write'\n | 'save.freshness';\n\nexport interface PptHostProbeCheck {\n name: PptHostProbeCheckName;\n passed: boolean;\n message?: string;\n details?: Record<string, unknown>;\n}\n\nexport interface PptHostProbeReport {\n host: PptHostKind;\n generatedAt?: string;\n adapterVersion?: string;\n checks: PptHostProbeCheck[];\n maxMutationCount?: number;\n notes?: string[];\n}\n\nexport interface PptHostProbeSummary {\n host: PptHostKind;\n passed: PptHostProbeCheckName[];\n failed: PptHostProbeCheckName[];\n capabilities: PptWritebackCapabilities;\n notes: string[];\n}\n\nexport interface PptHostProbeAdapter {\n host: PptHostKind;\n adapterVersion?: string;\n runCheck(check: PptHostProbeCheckName): Promise<Omit<PptHostProbeCheck, 'name'> | boolean>;\n}\n\nexport interface PptHostProbeRunOptions {\n checks?: PptHostProbeCheckName[];\n generatedAt?: string;\n maxMutationCount?: number;\n notes?: string[];\n}\n\nexport function createPptHostWritebackProfile(\n host: PptHostKind,\n options: PptHostWritebackProfileOptions = {},\n): PptHostWritebackProfile {\n const base = defaultPptHostWritebackProfile(host);\n return {\n host,\n status: options.status ?? base.status,\n capabilities: {\n ...base.capabilities,\n ...options.capabilities,\n supportedMutationTypes:\n options.capabilities?.supportedMutationTypes ?? base.capabilities.supportedMutationTypes,\n },\n notes: [...base.notes, ...(options.notes ?? [])],\n };\n}\n\nexport async function runPptHostProbe(\n adapter: PptHostProbeAdapter,\n options: PptHostProbeRunOptions = {},\n): Promise<PptHostProbeReport> {\n const checks = options.checks ?? getDefaultPptHostProbeChecks(adapter.host);\n const results: PptHostProbeCheck[] = [];\n for (const name of checks) {\n try {\n const result = await adapter.runCheck(name);\n results.push(typeof result === 'boolean' ? { name, passed: result } : { name, ...result });\n } catch (error) {\n results.push({ name, passed: false, message: errorMessage(error) });\n }\n }\n return {\n host: adapter.host,\n ...(options.generatedAt ? { generatedAt: options.generatedAt } : {}),\n ...(adapter.adapterVersion ? { adapterVersion: adapter.adapterVersion } : {}),\n checks: results,\n ...(options.maxMutationCount !== undefined\n ? { maxMutationCount: options.maxMutationCount }\n : {}),\n ...(options.notes ? { notes: options.notes } : {}),\n };\n}\n\nexport function getDefaultPptHostProbeChecks(host: PptHostKind): PptHostProbeCheckName[] {\n if (host === 'desktop-package') return ['package.replace', 'save.freshness'];\n return [\n 'slide.replace',\n 'slide.insert',\n 'slide.delete',\n 'slide.reorder',\n 'shape.add',\n 'shape.delete',\n 'shape.name.write',\n 'shape.zOrder.write',\n 'shape.geometry.write',\n 'shape.style.write',\n 'text.write',\n 'text.style.write',\n 'image.write',\n 'table.cell.write',\n 'table.cell.style.write',\n 'table.values.write',\n 'table.structure.write',\n 'save.freshness',\n ];\n}\n\nexport function summarizePptHostProbeReport(report: PptHostProbeReport): PptHostProbeSummary {\n const passed = uniqueChecks(\n report.checks.filter((check) => check.passed).map((check) => check.name),\n );\n const failed = uniqueChecks(\n report.checks.filter((check) => !check.passed).map((check) => check.name),\n );\n const capabilities = capabilitiesFromPassedProbeChecks(passed, report.maxMutationCount);\n const failedNotes = report.checks\n .filter((check) => !check.passed && check.message)\n .map((check) => `${check.name}: ${check.message}`);\n return {\n host: report.host,\n passed,\n failed,\n capabilities,\n notes: [...(report.notes ?? []), ...failedNotes],\n };\n}\n\nexport function createPptHostWritebackProfileFromProbeReport(\n report: PptHostProbeReport,\n): PptHostWritebackProfile {\n const summary = summarizePptHostProbeReport(report);\n return createPptHostWritebackProfile(report.host, {\n status: 'probed',\n capabilities: summary.capabilities,\n notes: summary.notes,\n });\n}\n\nexport function getPptWritebackOperationRequirements(\n operation: PptWritebackOperation,\n): Array<keyof PptWritebackCapabilities> {\n switch (operation.type) {\n case 'replacePresentationPackage':\n return ['canReplacePresentationPackage'];\n case 'replaceSlidePackage':\n return ['canReplaceSlides'];\n case 'insertSlidePackage':\n return ['canInsertSlides'];\n case 'deleteSlide':\n return ['canDeleteSlides'];\n case 'moveSlide':\n return ['canReorderSlides'];\n case 'replayMutations':\n return ['canReplayMutations'];\n }\n}\n\nexport function validatePptWritebackPlan(\n plan: PptWritebackPlan,\n profileOrCapabilities: PptHostWritebackProfile | PptWritebackCapabilities,\n): PptWritebackPlanValidation {\n let profile: PptHostWritebackProfile | undefined;\n let capabilities: PptWritebackCapabilities;\n if (isHostProfile(profileOrCapabilities)) {\n profile = profileOrCapabilities;\n capabilities = profile.capabilities;\n } else {\n capabilities = profileOrCapabilities;\n }\n const unsupportedReasons: string[] = [];\n const warnings: string[] = [...plan.warnings];\n\n if (plan.strategy === 'unsupported') {\n unsupportedReasons.push(...plan.unsupportedReasons);\n }\n\n if (profile?.status === 'unproven' && plan.operations.length > 0) {\n warnings.push(\n `host profile ${profile.host} is unproven; adapter must run probes before writeback`,\n );\n }\n\n for (const operation of plan.operations) {\n const missing = getPptWritebackOperationRequirements(operation).filter(\n (capability) => capabilities[capability] !== true,\n );\n for (const capability of missing) {\n unsupportedReasons.push(`operation ${operation.type} requires ${capability}`);\n }\n\n if (operation.type === 'replayMutations') {\n const maxMutationCount = capabilities.maxMutationCount ?? Number.POSITIVE_INFINITY;\n if (operation.mutations.length > maxMutationCount) {\n unsupportedReasons.push(\n `operation replayMutations has ${operation.mutations.length} mutations; maxMutationCount is ${maxMutationCount}`,\n );\n }\n const supported = capabilities.supportedMutationTypes\n ? new Set(capabilities.supportedMutationTypes)\n : null;\n if (supported) {\n const unsupportedTypes = operation.mutations\n .map((mutation) => mutation.type)\n .filter((type) => !supported.has(type));\n if (unsupportedTypes.length > 0) {\n unsupportedReasons.push(\n `operation replayMutations includes unsupported mutation types: ${[...new Set(unsupportedTypes)].join(', ')}`,\n );\n }\n }\n }\n }\n\n return {\n ok: unsupportedReasons.length === 0,\n unsupportedReasons: [...new Set(unsupportedReasons)],\n warnings: [...new Set(warnings)],\n };\n}\n\nfunction defaultPptHostWritebackProfile(host: PptHostKind): PptHostWritebackProfile {\n switch (host) {\n case 'desktop-package':\n return {\n host,\n status: 'supported',\n capabilities: {\n canReplacePresentationPackage: true,\n },\n notes: ['Desktop package profile supports full pptx package replacement only.'],\n };\n case 'microsoft-powerpoint':\n return {\n host,\n status: 'unproven',\n capabilities: {},\n notes: [\n 'Office.js PowerPoint capabilities must be enabled only after runnable host probes.',\n ],\n };\n case 'wps-presentation':\n return {\n host,\n status: 'unproven',\n capabilities: {},\n notes: ['WPSJS Presentation capabilities must be enabled only after runnable host probes.'],\n };\n case 'onlyoffice-presentation':\n return {\n host,\n status: 'unproven',\n capabilities: {},\n notes: [\n 'ONLYOFFICE Presentation capabilities must be enabled only after runnable host probes.',\n ],\n };\n case 'custom':\n return {\n host,\n status: 'unproven',\n capabilities: {},\n notes: ['Custom host capabilities are adapter-declared and should be probe-backed.'],\n };\n }\n}\n\nfunction capabilitiesFromPassedProbeChecks(\n passed: PptHostProbeCheckName[],\n maxMutationCount: number | undefined,\n): PptWritebackCapabilities {\n const checks = new Set(passed);\n const supportedMutationTypes = mutationTypesFromPassedProbeChecks(checks);\n return {\n ...(checks.has('package.replace') && checks.has('save.freshness')\n ? { canReplacePresentationPackage: true }\n : {}),\n ...(checks.has('slide.replace') && checks.has('save.freshness')\n ? { canReplaceSlides: true }\n : {}),\n ...(checks.has('slide.insert') && checks.has('save.freshness')\n ? { canInsertSlides: true }\n : {}),\n ...(checks.has('slide.delete') && checks.has('save.freshness')\n ? { canDeleteSlides: true }\n : {}),\n ...(checks.has('slide.reorder') && checks.has('save.freshness')\n ? { canReorderSlides: true }\n : {}),\n ...(supportedMutationTypes.length > 0 && checks.has('save.freshness')\n ? { canReplayMutations: true, supportedMutationTypes }\n : {}),\n ...(maxMutationCount !== undefined ? { maxMutationCount } : {}),\n };\n}\n\nfunction mutationTypesFromPassedProbeChecks(\n checks: Set<PptHostProbeCheckName>,\n): NonNullable<PptWritebackCapabilities['supportedMutationTypes']> {\n const types = [];\n if (checks.has('shape.add')) types.push('shape.add');\n if (checks.has('shape.delete')) types.push('shape.delete');\n if (checks.has('shape.name.write')) types.push('shape.name.set');\n if (checks.has('shape.zOrder.write')) types.push('shape.zOrder.set');\n if (checks.has('shape.geometry.write')) types.push('shape.geometry.set');\n if (checks.has('shape.style.write')) types.push('shape.style.set');\n if (checks.has('text.write')) {\n types.push('shape.text.set', 'shape.text.replace');\n }\n if (checks.has('text.style.write')) types.push('shape.text.style.set');\n if (checks.has('image.write')) types.push('shape.image.replace');\n if (checks.has('table.cell.write')) types.push('table.cell.text.set');\n if (checks.has('table.cell.style.write')) types.push('table.cell.style.set');\n if (checks.has('table.values.write')) types.push('table.values.set');\n if (checks.has('table.structure.write')) {\n types.push('table.row.add', 'table.row.delete', 'table.column.add', 'table.column.delete');\n }\n return types as NonNullable<PptWritebackCapabilities['supportedMutationTypes']>;\n}\n\nfunction uniqueChecks(checks: PptHostProbeCheckName[]): PptHostProbeCheckName[] {\n return [...new Set(checks)];\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction isHostProfile(\n value: PptHostWritebackProfile | PptWritebackCapabilities,\n): value is PptHostWritebackProfile {\n return 'host' in value && 'capabilities' in value;\n}\n"],"mappings":"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","names":["parseXmlDocument","CONTENT_TYPES_PATH","CONTENT_TYPES_NS","CONTENT_TYPES_CTYPE","parseXmlDocument","xmlText","_a","_b","_a","parseXmlDocument","OFFICE_REL_NS","P_NS","A_NS","R_NS","TABLE_URI","parseXmlDocument","xmlAttr","_a","parseXmlDocument","parseXmlDocument","_a","tableShapeXml","mergeChartDataLabelSettings","valuesFromStringCache","valuesFromNumberCache","parseBooleanAttr","chartDataLabelBoolean","tableCellXml","parseParagraphLineHeight","parseParagraphBullet","parseParagraphSpacing","firstTypeface","parseUnderlineAttr","parseStrikeAttr","parseBulletColor","parseBulletSize","normalizeBulletCharacter","_","xmlAttr","xmlText","cloneModel"]}