@office-open/pptx 0.6.9 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -20
- package/dist/index.d.mts +14 -20
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +300 -165
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["createScene3D","createShape3D","createEffectList","convertPixelsToEmu","createOutline","createEffectList","convertPixelsToEmu","GraphicFrameNonVisual","convertPixelsToEmu","MEDIA_EXT_URI","convertPixelsToEmu","convertPixelsToEmu","createOutline","Xc","convertPixelsToEmu","Xc","GraphicFrameNonVisual","SW_REF","sx","convertPixelsToEmu","buildChildrenXml","convertPixelsToEmu","convertPixelsToEmu","encoder","Formatter","findDeep","convertEmuToPixels","convertEmuToPixels"],"sources":["../src/file/drawingml/effects.ts","../src/file/drawingml/fill.ts","../src/file/xml-components/base.ts","../src/file/xml-components/index.ts","../src/file/background/background.ts","../src/file/chart/chart-collection.ts","../src/file/comment/comment-author-list.ts","../src/file/comment/slide-comment-list.ts","../src/file/content-types/content-types.ts","../src/file/core-properties/properties.ts","../src/file/hyperlink-collection.ts","../src/file/media/media.ts","../src/file/drawingml/group-transform-2d.ts","../src/file/drawingml/group-shape-properties.ts","../src/file/shape-tree/group-shape-non-visual.ts","../src/file/shape/paragraph/paragraph-properties.ts","../src/file/constants.ts","../src/file/shape/paragraph/run-properties.ts","../src/file/shape/paragraph/run.ts","../src/file/shape/paragraph/paragraph.ts","../src/file/table/table-cell-properties.ts","../src/file/table/table-cell.ts","../src/file/shape/text-body.ts","../src/file/notes/notes-slide.ts","../src/file/presentation-properties.ts","../src/file/presentation/presentation.ts","../src/file/presentation/presentation-wrapper.ts","../src/file/drawingml/transform-2d.ts","../src/util/position.ts","../src/file/chart/chart-frame.ts","../src/file/media/media-frame-base.ts","../src/file/media/audio-frame.ts","../src/file/media/video-frame.ts","../src/file/drawingml/blip-fill.ts","../src/file/drawingml/non-visual-picture-props.ts","../src/file/picture/picture-non-visual.ts","../src/file/picture/picture.ts","../src/file/shape/group-shape.ts","../src/file/drawingml/non-visual-shape-props.ts","../src/file/drawingml/outline.ts","../src/file/shape/line-shape.ts","../src/file/drawingml/shape-properties.ts","../src/file/shape/shape.ts","../src/file/smartart/smartart-frame.ts","../src/file/table/graphic.ts","../src/file/table/graphic-frame-non-visual.ts","../src/file/table/table-grid.ts","../src/file/table/table-properties.ts","../src/file/table/table-row.ts","../src/file/table/table.ts","../src/file/table/table-frame.ts","../src/file/slide/coerce.ts","../src/file/slide-layout/slide-layout.ts","../src/file/slide-master/slide-master.ts","../src/file/animation/timing.ts","../src/file/transition/transition.ts","../src/file/slide/slide.ts","../src/file/table-styles.ts","../src/file/theme/theme.ts","../src/file/view-properties.ts","../src/file/file.ts","../src/file/shape/paragraph/text.ts","../src/file/shape/paragraph/end-paragraph-run.ts","../src/file/shape/paragraph/field.ts","../src/file/drawingml/non-visual-drawing-props.ts","../src/file/shape-tree/shape-tree.ts","../src/file/notes-master/notes-master.ts","../src/file/header-footer/header-footer.ts","../src/file/index.ts","../src/export/packer/hyperlink-placeholders.ts","../src/export/packer/media-placeholders.ts","../src/export/packer/next-compiler.ts","../src/export/packer/packer.ts","../src/util/types.ts","../src/util/index.ts","../src/parse/context.ts","../src/parse/animation.ts","../src/parse/slide.ts","../src/parse/slide-layout.ts","../src/parse/theme.ts","../src/parse.ts","../src/patcher/from-pptx.ts","../src/index.ts"],"sourcesContent":["import { xsdRectAlignment } from \"@office-open/core\";\nimport {\n createEffectList,\n createScene3D,\n createShape3D,\n type EffectListOptions,\n type Scene3DOptions,\n type Shape3DOptions,\n type BevelOptions,\n} from \"@office-open/core/drawingml\";\n\nexport type EffectType = \"outerShadow\" | \"innerShadow\" | \"glow\" | \"reflection\" | \"softEdge\";\n\nexport const ReflectionAlignment = {\n TOP_LEFT: \"topLeft\",\n TOP: \"top\",\n TOP_RIGHT: \"topRight\",\n LEFT: \"left\",\n CENTER: \"center\",\n RIGHT: \"right\",\n BOTTOM_LEFT: \"bottomLeft\",\n BOTTOM: \"bottom\",\n BOTTOM_RIGHT: \"bottomRight\",\n} as const;\n\nexport interface ShadowOptions {\n readonly blur?: number;\n readonly distance?: number;\n readonly direction?: number;\n readonly color?: string;\n readonly alpha?: number;\n readonly rotateWithShape?: boolean;\n}\n\nexport interface GlowOptions {\n readonly radius?: number;\n readonly color?: string;\n readonly alpha?: number;\n}\n\nexport interface ReflectionOptions {\n readonly blurRadius?: number;\n readonly distance?: number;\n readonly direction?: number;\n readonly startAlpha?: number;\n readonly startPosition?: number;\n readonly endAlpha?: number;\n readonly endPosition?: number;\n readonly fadeDirection?: number;\n readonly scaleX?: number;\n readonly scaleY?: number;\n readonly skewX?: number;\n readonly skewY?: number;\n readonly alignment?: (typeof ReflectionAlignment)[keyof typeof ReflectionAlignment];\n readonly rotateWithShape?: boolean;\n}\n\nexport interface SoftEdgeOptions {\n readonly radius?: number;\n}\n\nexport interface PPTXBevelOptions {\n readonly width?: number;\n readonly height?: number;\n}\n\nexport interface Rotation3DOptions {\n readonly x?: number;\n readonly y?: number;\n readonly z?: number;\n readonly perspective?: number;\n}\n\nexport interface EffectsOptions {\n readonly outerShadow?: ShadowOptions;\n readonly innerShadow?: ShadowOptions;\n readonly glow?: GlowOptions;\n readonly reflection?: ReflectionOptions;\n readonly softEdge?: SoftEdgeOptions;\n readonly rotation3D?: Rotation3DOptions;\n readonly bevelTop?: PPTXBevelOptions;\n readonly bevelBottom?: PPTXBevelOptions;\n readonly extrusionH?: number;\n readonly material?: \"plastic\" | \"metal\" | \"matte\" | \"warmMatte\" | \"softEdge\" | \"flat\" | \"powder\";\n readonly lighting?:\n | \"flat\"\n | \"legacyFlat1\"\n | \"legacyFlat2\"\n | \"legacyFlat3\"\n | \"legacyFlat4\"\n | \"legacyHarsh1\"\n | \"legacyHarsh2\"\n | \"legacyHarsh3\"\n | \"legacyHarsh4\"\n | \"legacyNormal1\"\n | \"legacyNormal2\"\n | \"legacyNormal3\"\n | \"legacyNormal4\"\n | \"threePt\"\n | \"balanced\"\n | \"soft\"\n | \"harsh\"\n | \"flood\"\n | \"contrasting\"\n | \"morning\"\n | \"sunrise\"\n | \"sunset\"\n | \"chilly\"\n | \"freezing\"\n | \"twoPt\"\n | \"brightRoom\"\n | \"gallery\";\n}\n\n/** Convert PPTX simple color to core SolidFillOptions. */\nfunction toColor(color?: string, alpha?: number) {\n if (!color) return { value: \"000000\", alpha: (alpha ?? 40) * 1000 };\n return { value: color.replace(\"#\", \"\"), alpha: (alpha ?? 40) * 1000 };\n}\n\n/** Convert PPTX ShadowOptions to core OuterShadowEffectOptions. */\nfunction toOuterShadow(opts: ShadowOptions) {\n return {\n blurRadius: opts.blur,\n distance: opts.distance,\n direction: opts.direction,\n rotWithShape: opts.rotateWithShape === false ? false : undefined,\n color: toColor(opts.color, opts.alpha),\n };\n}\n\n/** Convert PPTX ShadowOptions to core InnerShadowEffectOptions. */\nfunction toInnerShadow(opts: ShadowOptions) {\n return {\n blurRadius: opts.blur,\n distance: opts.distance,\n direction: opts.direction,\n color: toColor(opts.color, opts.alpha),\n };\n}\n\n/** Convert PPTX GlowOptions to core GlowEffectOptions. */\nfunction toGlow(opts: GlowOptions) {\n return {\n radius: opts.radius ?? 152400,\n color: toColor(opts.color, opts.alpha),\n };\n}\n\n/** Convert PPTX ReflectionOptions to core ReflectionEffectOptions. */\nfunction toReflection(opts: ReflectionOptions) {\n const result: Record<string, number | string> = {};\n if (opts.blurRadius !== undefined) result.blurRadius = opts.blurRadius;\n if (opts.distance !== undefined) result.distance = opts.distance;\n if (opts.direction !== undefined) result.direction = opts.direction;\n if (opts.startAlpha !== undefined) result.startAlpha = opts.startAlpha * 1000;\n if (opts.startPosition !== undefined) result.startPosition = opts.startPosition * 1000;\n if (opts.endAlpha !== undefined) result.endAlpha = opts.endAlpha * 1000;\n if (opts.endPosition !== undefined) result.endPosition = opts.endPosition * 1000;\n if (opts.fadeDirection !== undefined) result.fadeDirection = opts.fadeDirection * 60000;\n if (opts.scaleX !== undefined) result.scaleX = opts.scaleX * 1000;\n if (opts.scaleY !== undefined) result.scaleY = opts.scaleY * 1000;\n if (opts.skewX !== undefined) result.skewX = opts.skewX * 60000;\n if (opts.skewY !== undefined) result.skewY = opts.skewY * 60000;\n if (opts.alignment !== undefined) result.alignment = xsdRectAlignment.to(opts.alignment);\n if (opts.rotateWithShape === false) result.rotWithShape = 0;\n return result;\n}\n\n/** Convert PPTX PPTXBevelOptions to core BevelOptions. */\nfunction toBevel(opts: PPTXBevelOptions): BevelOptions {\n return {\n ...(opts.width !== undefined && { w: opts.width * 12700 }),\n ...(opts.height !== undefined && { h: opts.height * 12700 }),\n };\n}\n\n/** Map PPTX EffectsOptions to core EffectListOptions. */\nfunction toEffectListOptions(opts: EffectsOptions): EffectListOptions | undefined {\n const hasEffects =\n opts.outerShadow || opts.innerShadow || opts.glow || opts.reflection || opts.softEdge;\n if (!hasEffects) return undefined;\n\n return {\n outerShadow: opts.outerShadow ? toOuterShadow(opts.outerShadow) : undefined,\n innerShadow: opts.innerShadow ? toInnerShadow(opts.innerShadow) : undefined,\n glow: opts.glow ? toGlow(opts.glow) : undefined,\n reflection: opts.reflection ? toReflection(opts.reflection) : undefined,\n softEdge: opts.softEdge ? (opts.softEdge.radius ?? 50800) : undefined,\n };\n}\n\n/** Map PPTX EffectsOptions to core Scene3DOptions, or null if not needed. */\nexport function buildScene3D(options: EffectsOptions): ReturnType<typeof createScene3D> | null {\n if (!options.rotation3D && !options.lighting) return null;\n\n const cameraPreset = options.rotation3D?.perspective\n ? \"legacyPerspectiveFront\"\n : \"orthographicFront\";\n const cameraOpts = {\n preset: cameraPreset,\n ...(options.rotation3D?.perspective && { fov: options.rotation3D.perspective }),\n ...(options.rotation3D && {\n rotation: {\n lat: (options.rotation3D.x ?? 0) * 60000,\n lon: (options.rotation3D.y ?? 0) * 60000,\n rev: (options.rotation3D.z ?? 0) * 60000,\n },\n }),\n };\n\n return createScene3D({\n camera: cameraOpts as Scene3DOptions[\"camera\"],\n lightRig: { rig: options.lighting ?? \"threePt\", direction: \"t\" },\n });\n}\n\n/** Map PPTX EffectsOptions to core Shape3DOptions, or null if not needed. */\nexport function buildShape3D(options: EffectsOptions): ReturnType<typeof createShape3D> | null {\n if (!options.extrusionH && !options.bevelTop && !options.bevelBottom && !options.material)\n return null;\n\n const shape3dOpts: Shape3DOptions = {\n ...(options.bevelTop ? { bevelT: toBevel(options.bevelTop) } : {}),\n ...(options.bevelBottom ? { bevelB: toBevel(options.bevelBottom) } : {}),\n ...(options.extrusionH !== undefined ? { extrusionH: options.extrusionH } : {}),\n ...(options.material ? { prstMaterial: options.material } : {}),\n };\n\n return createShape3D(shape3dOpts);\n}\n\n/** Create a:effectLst from PPTX simplified EffectsOptions. */\nexport function createPptxEffectList(options: EffectsOptions) {\n const effectListOpts = toEffectListOptions(options);\n return effectListOpts ? createEffectList(effectListOpts) : null;\n}\n\n// Re-export core types for advanced users\nexport type { EffectListOptions, Scene3DOptions, Shape3DOptions, BevelOptions };\n","export {\n buildFill,\n extractBlipFillMedia,\n type BlipFillConfigOptions,\n type BlipFillMediaData,\n type FillOptions,\n type GradientStopOptions,\n} from \"@office-open/core/drawingml\";\n","/**\n * Base XML Component infrastructure for PPTX documents.\n * Re-exports from core for local path alias usage.\n *\n * @module\n */\nexport { BaseXmlComponent } from \"@office-open/core\";\nexport type { Context, IXmlableObject } from \"@office-open/core\";\n","/**\n * XML Components module — re-exports from core + pptx-specific additions.\n *\n * @module\n */\n// Core re-exports\nexport { BaseXmlComponent } from \"./base\";\nexport type { Context, IXmlableObject } from \"./base\";\nexport { XmlComponent, IgnoreIfEmptyXmlComponent, EMPTY_OBJECT } from \"@office-open/core\";\nexport { buildAttrObject } from \"@office-open/core\";\nexport type { AttributePayload } from \"@office-open/core\";\nexport {\n EmptyElement,\n BuilderElement,\n chartAttr,\n wrapEl,\n stringContainerObj,\n} from \"@office-open/core\";\nexport {\n ImportedXmlComponent,\n ImportedRootElementAttributes,\n convertToXmlComponent,\n} from \"@office-open/core\";\nexport { InitializableXmlComponent } from \"@office-open/core\";\n","import type { EffectsOptions } from \"@file/drawingml/effects\";\nimport { createPptxEffectList } from \"@file/drawingml/effects\";\nimport type { FillOptions } from \"@file/drawingml/fill\";\nimport { buildFill } from \"@file/drawingml/fill\";\nimport { XmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\n\nexport interface BackgroundOptions {\n readonly fill?: FillOptions;\n readonly effects?: EffectsOptions;\n readonly shadeToTitle?: boolean;\n}\n\n/**\n * p:bg — Slide background.\n */\nexport class Background extends XmlComponent {\n public constructor(options: BackgroundOptions = {}) {\n super(\"p:bg\");\n this.root.push(new BackgroundProperties(options));\n }\n}\n\nclass BackgroundProperties extends XmlComponent {\n private readonly shadeToTitle: boolean;\n\n public constructor(options: BackgroundOptions) {\n super(\"p:bgPr\");\n this.shadeToTitle = !!options.shadeToTitle;\n this.root.push(\n options.fill !== undefined ? buildFill(options.fill) : buildFill({ type: \"none\" }),\n );\n if (options.effects) {\n const el = createPptxEffectList(options.effects);\n if (el) this.root.push(el);\n }\n }\n\n public override toXml(context: Context): string {\n if (this.shadeToTitle) {\n this.root.unshift({ _attr: { shadeToTitle: 1 } });\n const result = super.toXml(context);\n this.root.shift();\n return result;\n }\n return super.toXml(context);\n }\n}\n","export { ChartCollection, type ChartData } from \"@office-open/core/chart\";\n","import { buildAttrObject, BuilderElement, XmlComponent } from \"@file/xml-components\";\n\nexport interface AuthorEntry {\n readonly id: number;\n readonly name: string;\n readonly initials: string;\n readonly clrIdx: number;\n readonly lastIdx: number;\n}\n\n/**\n * p:cmAuthorLst — Comment author list stored in `ppt/commentAuthors.xml`.\n */\nexport class CommentAuthorList extends XmlComponent {\n public constructor(authors: readonly AuthorEntry[]) {\n super(\"p:cmAuthorLst\");\n this.root.push(\n buildAttrObject({\n \"xmlns:p\": \"http://schemas.openxmlformats.org/presentationml/2006/main\",\n }),\n );\n for (const author of authors) {\n this.root.push(\n new BuilderElement({\n name: \"p:cmAuthor\",\n attributes: {\n id: { key: \"id\", value: author.id },\n name: { key: \"name\", value: author.name },\n initials: { key: \"initials\", value: author.initials },\n clrIdx: { key: \"clrIdx\", value: author.clrIdx },\n lastIdx: { key: \"lastIdx\", value: author.lastIdx },\n },\n }),\n );\n }\n }\n}\n","import { buildAttrObject, BuilderElement, XmlComponent } from \"@file/xml-components\";\n\nexport interface CommentEntry {\n readonly authorId: number;\n readonly idx: number;\n readonly date?: string;\n readonly x: number;\n readonly y: number;\n readonly text: string;\n}\n\n/**\n * p:cmLst — Comment list stored in `ppt/comments/slideN.xml`.\n */\nexport class SlideCommentList extends XmlComponent {\n public constructor(comments: readonly CommentEntry[]) {\n super(\"p:cmLst\");\n this.root.push(\n buildAttrObject({\n \"xmlns:p\": \"http://schemas.openxmlformats.org/presentationml/2006/main\",\n }),\n );\n for (const comment of comments) {\n this.root.push(\n new BuilderElement({\n name: \"p:cm\",\n attributes: {\n authorId: { key: \"authorId\", value: comment.authorId },\n idx: { key: \"idx\", value: comment.idx },\n ...(comment.date != null ? { dt: { key: \"dt\", value: comment.date } } : {}),\n },\n children: [\n new BuilderElement({\n name: \"p:pos\",\n attributes: {\n x: { key: \"x\", value: comment.x },\n y: { key: \"y\", value: comment.y },\n },\n }),\n new BuilderElement({\n name: \"p:text\",\n children: [comment.text],\n }),\n ],\n }),\n );\n }\n }\n}\n","/**\n * Content Types module for PPTX packages.\n *\n * @module\n */\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\nimport { escapeXml } from \"@office-open/xml\";\n\nconst PPTX_MAIN =\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\";\nconst PPTX_SLIDE = \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\";\nconst PPTX_SLIDE_MASTER =\n \"application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml\";\nconst PPTX_SLIDE_LAYOUT =\n \"application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml\";\nconst PPTX_THEME = \"application/vnd.openxmlformats-officedocument.theme+xml\";\nconst PPTX_NOTES = \"application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml\";\nconst PPTX_COMMENTS = \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\";\nconst PPTX_COMMENT_AUTHORS =\n \"application/vnd.openxmlformats-officedocument.presentationml.commentAuthors+xml\";\nconst PPTX_CHART = \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\";\nconst PPTX_PRES_PROPS =\n \"application/vnd.openxmlformats-officedocument.presentationml.presProps+xml\";\nconst PPTX_VIEW_PROPS =\n \"application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml\";\nconst PPTX_TABLE_STYLES =\n \"application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml\";\n\ntype EntryType = \"Default\" | \"Override\";\n\ninterface ContentEntry {\n readonly type: EntryType;\n readonly contentType: string;\n readonly key: string;\n}\n\nconst STATIC_ENTRIES: readonly ContentEntry[] = [\n {\n type: \"Default\",\n contentType: \"application/vnd.openxmlformats-package.relationships+xml\",\n key: \"rels\",\n },\n { type: \"Default\", contentType: \"application/xml\", key: \"xml\" },\n { type: \"Default\", contentType: \"image/png\", key: \"png\" },\n { type: \"Default\", contentType: \"image/jpeg\", key: \"jpeg\" },\n { type: \"Default\", contentType: \"image/jpeg\", key: \"jpg\" },\n { type: \"Default\", contentType: \"video/mp4\", key: \"mp4\" },\n { type: \"Override\", contentType: PPTX_MAIN, key: \"/ppt/presentation.xml\" },\n {\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-package.core-properties+xml\",\n key: \"/docProps/core.xml\",\n },\n {\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.extended-properties+xml\",\n key: \"/docProps/app.xml\",\n },\n { type: \"Override\", contentType: PPTX_THEME, key: \"/ppt/theme/theme1.xml\" },\n { type: \"Override\", contentType: PPTX_PRES_PROPS, key: \"/ppt/presProps.xml\" },\n { type: \"Override\", contentType: PPTX_VIEW_PROPS, key: \"/ppt/viewProps.xml\" },\n { type: \"Override\", contentType: PPTX_TABLE_STYLES, key: \"/ppt/tableStyles.xml\" },\n];\n\nfunction formatEntry(e: ContentEntry): string {\n if (e.type === \"Default\") {\n return `<Default ContentType=\"${escapeXml(e.contentType)}\" Extension=\"${escapeXml(e.key)}\"/>`;\n }\n return `<Override ContentType=\"${escapeXml(e.contentType)}\" PartName=\"${escapeXml(e.key)}\"/>`;\n}\n\nconst STATIC_XML =\n `<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">` +\n STATIC_ENTRIES.map(formatEntry).join(\"\");\n\nexport class ContentTypes extends BaseXmlComponent {\n private readonly dynamicEntries: ContentEntry[] = [];\n\n public constructor() {\n super(\"Types\");\n }\n\n public addSlide(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: PPTX_SLIDE,\n key: `/ppt/slides/slide${index}.xml`,\n });\n }\n\n public addNotesSlide(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: PPTX_NOTES,\n key: `/ppt/notesSlides/notesSlide${index}.xml`,\n });\n }\n\n public addComments(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: PPTX_COMMENTS,\n key: `/ppt/comments/comment${index}.xml`,\n });\n }\n\n public addCommentAuthors(): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: PPTX_COMMENT_AUTHORS,\n key: \"/ppt/commentAuthors.xml\",\n });\n }\n\n public addChart(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: PPTX_CHART,\n key: `/ppt/charts/chart${index}.xml`,\n });\n }\n\n public addDiagramData(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml\",\n key: `/ppt/diagrams/data${index}.xml`,\n });\n }\n\n public addDiagramLayout(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml\",\n key: `/ppt/diagrams/layout${index}.xml`,\n });\n }\n\n public addDiagramStyle(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml\",\n key: `/ppt/diagrams/quickStyle${index}.xml`,\n });\n }\n\n public addDiagramColors(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml\",\n key: `/ppt/diagrams/colors${index}.xml`,\n });\n }\n\n public addDiagramDrawing(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: \"application/vnd.ms-office.drawingml.diagramDrawing+xml\",\n key: `/ppt/diagrams/drawing${index}.xml`,\n });\n }\n\n public addSlideLayout(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: PPTX_SLIDE_LAYOUT,\n key: `/ppt/slideLayouts/slideLayout${index}.xml`,\n });\n }\n\n public addSlideMaster(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: PPTX_SLIDE_MASTER,\n key: `/ppt/slideMasters/slideMaster${index}.xml`,\n });\n }\n\n public addTheme(index: number): void {\n if (index !== 1) {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: PPTX_THEME,\n key: `/ppt/theme/theme${index}.xml`,\n });\n }\n }\n\n public override toXml(_context: Context): string {\n const parts: string[] = [STATIC_XML];\n for (const e of this.dynamicEntries) {\n parts.push(formatEntry(e));\n }\n parts.push(\"</Types>\");\n return parts.join(\"\");\n }\n}\n","/**\n * Core Properties module for PresentationML documents.\n *\n * Reference: ISO-IEC29500-4_2016 shared-documentPropertiesCore.xsd\n *\n * @module\n */\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\nimport { buildCorePropertiesXmlString } from \"@office-open/core\";\n\nexport interface CorePropertiesOptions {\n readonly title?: string;\n readonly subject?: string;\n readonly creator?: string;\n readonly keywords?: string;\n readonly description?: string;\n readonly lastModifiedBy?: string;\n readonly revision?: number;\n}\n\nexport class CoreProperties extends BaseXmlComponent {\n private readonly options: CorePropertiesOptions;\n\n public constructor(options: CorePropertiesOptions) {\n super(\"cp:coreProperties\");\n this.options = options;\n }\n\n public override toXml(_context: Context): string {\n return buildCorePropertiesXmlString(this.options);\n }\n}\n","export interface HyperlinkData {\n readonly key: string;\n readonly url: string;\n readonly tooltip?: string;\n}\n\nexport class HyperlinkCollection {\n private readonly map = new Map<string, HyperlinkData>();\n\n public addHyperlink(key: string, url: string, tooltip?: string): void {\n this.map.set(key, { key, url, tooltip });\n }\n\n public get array(): readonly HyperlinkData[] {\n return [...this.map.values()];\n }\n}\n","/**\n * Media module for PresentationML documents.\n *\n * @module\n */\nimport { convertPixelsToEmu } from \"@office-open/core\";\n\nimport type { MediaDataTransformation } from \"./data\";\nimport type { IMediaData } from \"./data\";\n\nexport interface MediaTransformation {\n readonly offset?: {\n readonly top?: number;\n readonly left?: number;\n };\n readonly width: number;\n readonly height: number;\n readonly flip?: {\n readonly vertical?: boolean;\n readonly horizontal?: boolean;\n };\n readonly rotation?: number;\n}\n\nexport const createTransformation = (options: MediaTransformation): MediaDataTransformation => ({\n emus: {\n x: convertPixelsToEmu(options.width),\n y: convertPixelsToEmu(options.height),\n },\n pixels: {\n x: Math.round(options.width),\n y: Math.round(options.height),\n },\n flip: options.flip,\n rotation: options.rotation ? options.rotation * 60_000 : undefined,\n});\n\nexport class Media {\n private readonly map: Map<string, IMediaData>;\n\n public constructor() {\n this.map = new Map<string, IMediaData>();\n }\n\n public addImage(key: string, mediaData: IMediaData): void {\n this.map.set(key, mediaData);\n }\n\n public addMedia(key: string, mediaData: IMediaData): void {\n this.map.set(key, mediaData);\n }\n\n public get array(): readonly IMediaData[] {\n return [...this.map.values()];\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\nimport {\n createGroupTransform2D,\n type GroupTransform2DOptions as CoreGroupTransform2DOptions,\n} from \"@office-open/core/drawingml\";\n\nexport type IGroupTransform2DOptions = CoreGroupTransform2DOptions;\n\n/**\n * a:xfrm — Group transform (CT_GroupTransform2D).\n * Extends regular Transform2D with child offset (chOff) and child extent (chExt).\n * Delegates to core createGroupTransform2D.\n */\nexport class GroupTransform2D extends XmlComponent {\n private readonly core: XmlComponent;\n\n public constructor(options: IGroupTransform2DOptions, prefix: \"a\" | \"p\" = \"a\") {\n super(`${prefix}:xfrm`);\n this.core = createGroupTransform2D(options, `${prefix}:xfrm`);\n }\n\n public override toXml(context: Context): string {\n return this.core.toXml(context);\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\n\nimport { GroupTransform2D, type IGroupTransform2DOptions } from \"./group-transform-2d\";\n\n/**\n * p:grpSpPr — Group shape properties with CT_GroupTransform2D.\n */\nexport class GroupShapeProperties extends XmlComponent {\n public constructor(options?: IGroupTransform2DOptions) {\n super(\"p:grpSpPr\");\n this.root.push(new GroupTransform2D(options ?? {}));\n }\n}\n","import { BuilderElement } from \"@file/xml-components\";\n\n/**\n * p:nvGrpSpPr — Non-visual properties for a group shape.\n */\nexport class GroupShapeNonVisualProperties extends BuilderElement<{}> {\n public constructor(id: number = 1, name: string = \"\") {\n super({\n name: \"p:nvGrpSpPr\",\n children: [\n new BuilderElement({\n name: \"p:cNvPr\",\n attributes: {\n id: { key: \"id\", value: id },\n name: { key: \"name\", value: name },\n },\n }),\n new BuilderElement({ name: \"p:cNvGrpSpPr\" }),\n new BuilderElement({ name: \"p:nvPr\" }),\n ],\n });\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport type { Context, IXmlableObject } from \"@file/xml-components\";\nimport { xsdTextAlign } from \"@office-open/core\";\nimport { xml } from \"@office-open/xml\";\n\nexport const TextAlignment = {\n LEFT: \"left\",\n CENTER: \"center\",\n RIGHT: \"right\",\n JUSTIFY: \"justify\",\n} as const;\n\nexport type BulletCharOptions = {\n readonly type: \"char\";\n readonly char?: string;\n readonly color?: string;\n readonly size?: number;\n};\n\nexport type BulletAutoNumOptions = {\n readonly type: \"autoNum\";\n readonly format?: string;\n readonly startAt?: number;\n readonly color?: string;\n readonly size?: number;\n};\n\nexport type BulletNoneOption = {\n readonly type: \"none\";\n};\n\nexport type BulletOptions = BulletCharOptions | BulletAutoNumOptions | BulletNoneOption;\n\nexport interface ParagraphPropertiesOptions {\n readonly alignment?: (typeof TextAlignment)[keyof typeof TextAlignment];\n readonly indentLevel?: number;\n readonly marginBottom?: number;\n readonly marginTop?: number;\n readonly bullet?: BulletOptions;\n readonly lineSpacing?: number;\n readonly lineSpacingPoints?: number;\n readonly marginIndent?: number;\n readonly marginRight?: number;\n readonly defTabSize?: number;\n}\n\nfunction buildBulletChildren(options: BulletOptions): IXmlableObject[] {\n const children: IXmlableObject[] = [];\n\n if (options.type === \"none\") {\n children.push({ \"a:buNone\": {} });\n return children;\n }\n\n if (options.color) {\n children.push({\n \"a:buClr\": [{ \"a:srgbClr\": { _attr: { val: options.color.replace(\"#\", \"\") } } }],\n });\n }\n\n if (options.size !== undefined) {\n children.push({ \"a:buSzPct\": { _attr: { val: `${options.size}%` } } });\n }\n\n children.push({\n \"a:buFont\": {\n _attr: {\n typeface: \"Arial\",\n panose: \"020B0604020202020204\",\n pitchFamily: \"34\",\n charset: \"0\",\n },\n },\n });\n\n if (options.type === \"char\") {\n children.push({ \"a:buChar\": { _attr: { char: options.char ?? \"•\" } } });\n } else if (options.type === \"autoNum\") {\n const buAttrs: Record<string, string | number> = { type: options.format ?? \"arabicPeriod\" };\n if (options.startAt !== undefined) buAttrs.startAt = options.startAt;\n children.push({ \"a:buAutoNum\": { _attr: buAttrs } });\n }\n\n return children;\n}\n\n/**\n * Pure function: builds a:pPr XML object from options.\n * Returns undefined when no meaningful content (empty → omitted from output).\n */\nexport function buildParagraphProperties(\n options: ParagraphPropertiesOptions,\n): IXmlableObject | undefined {\n const children: IXmlableObject[] = [];\n\n const attrs: Record<string, string | number> = {};\n if (options.alignment) attrs.algn = xsdTextAlign.to(options.alignment);\n if (options.indentLevel !== undefined) attrs.lvl = options.indentLevel;\n if (options.marginIndent !== undefined) attrs.marL = options.marginIndent;\n if (options.marginRight !== undefined) attrs.marR = options.marginRight;\n if (options.defTabSize !== undefined) attrs.defTabSz = options.defTabSize;\n if (Object.keys(attrs).length > 0) children.push({ _attr: attrs });\n\n if (options.lineSpacing !== undefined) {\n children.push({\n \"a:lnSpc\": [{ \"a:spcPct\": { _attr: { val: options.lineSpacing * 1000 } } }],\n });\n }\n\n if (options.lineSpacingPoints !== undefined) {\n children.push({\n \"a:lnSpc\": [{ \"a:spcPts\": { _attr: { val: options.lineSpacingPoints * 100 } } }],\n });\n }\n\n if (options.marginBottom !== undefined || options.marginTop !== undefined) {\n children.push({\n \"a:spcAft\": [{ \"a:spcPts\": { _attr: { val: options.marginBottom ?? 0 } } }],\n });\n }\n\n if (options.marginTop !== undefined) {\n children.push({\n \"a:spcBef\": [{ \"a:spcPts\": { _attr: { val: options.marginTop } } }],\n });\n }\n\n if (options.bullet) {\n children.push(...buildBulletChildren(options.bullet));\n }\n\n if (children.length === 0) return undefined;\n\n return {\n \"a:pPr\": children.length === 1 && \"_attr\" in children[0] ? children[0] : children,\n };\n}\n\n/**\n * a:pPr — Paragraph properties (alignment, indent, spacing).\n * Lazy: stores options, builds XML in toXml().\n * Omitted from output when completely empty.\n */\nexport class ParagraphProperties extends XmlComponent {\n private readonly options: ParagraphPropertiesOptions;\n\n public constructor(options: ParagraphPropertiesOptions = {}) {\n super(\"a:pPr\");\n this.options = options;\n }\n\n public override toXml(_context: Context): string {\n const obj = buildParagraphProperties(this.options);\n return obj ? xml(obj) : \"\";\n }\n}\n","/**\n * OOXML magic-number constants for PPTX generation.\n *\n * Values are in EMU (English Metric Units) or hundredths of a point,\n * as defined by the OOXML specification.\n * @module\n */\n\n// ── Outline defaults (a:ln) ──\n\n/** Default outline width: 1pt = 12700 EMU */\nexport const DEFAULT_OUTLINE_WIDTH = 12700;\n\n// ── Shadow defaults (a:outerShdw) ──\n\n/** Default shadow blur radius: ~4pt = 50800 EMU */\nexport const DEFAULT_SHADOW_BLUR_RADIUS = 50800;\n\n/** Default shadow distance: ~3pt = 38100 EMU */\nexport const DEFAULT_SHADOW_DISTANCE = 38100;\n\n/** Default shadow direction: 270° = 2700000 (60,000ths of a degree) */\nexport const DEFAULT_SHADOW_DIRECTION = 2700000;\n\n/** Default shadow alpha: 40% = 40000 (100,000ths of a percent) */\nexport const DEFAULT_SHADOW_ALPHA = 40000;\n\n// ── Angle / percentage multipliers ──\n\n/** Degrees to OOXML angle units: 1° = 60,000 */\nexport const DEGREE_MULTIPLIER = 60000;\n\n/** Font size to OOXML units: 1pt = 100 hundredths */\nexport const FONT_SIZE_MULTIPLIER = 100;\n\n/** Percentage to OOXML units: 1% = 1,000 */\nexport const PERCENTAGE_MULTIPLIER = 1000;\n","import {\n DEFAULT_OUTLINE_WIDTH,\n DEFAULT_SHADOW_ALPHA,\n DEFAULT_SHADOW_BLUR_RADIUS,\n DEFAULT_SHADOW_DIRECTION,\n DEFAULT_SHADOW_DISTANCE,\n} from \"@file/constants\";\nimport type { FillOptions } from \"@file/drawingml/fill\";\nimport { buildFill } from \"@file/drawingml/fill\";\nimport { XmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\nimport { xsdStrikeStyle, xsdTextCaps, xsdUnderlineStyle } from \"@office-open/core\";\nimport { createEffectList, createOutline } from \"@office-open/core/drawingml\";\n\nlet nextHyperlinkId = 1;\n\nexport const UnderlineStyle = {\n SINGLE: \"single\",\n DOUBLE: \"double\",\n NONE: \"none\",\n} as const;\n\nexport const StrikeStyle = {\n SINGLE: \"sngStrike\",\n DOUBLE: \"dblStrike\",\n NONE: \"noStrike\",\n} as const;\n\nexport const TextCapitalization = {\n NONE: \"none\",\n ALL: \"all\",\n SMALL: \"small\",\n} as const;\n\nexport interface HyperlinkOptions {\n readonly url: string;\n readonly tooltip?: string;\n}\n\nexport interface RunPropertiesOptions {\n /** Font size in points. Serialized as OOXML `a:sz` (hundredths of a point). */\n readonly fontSize?: number;\n readonly bold?: boolean;\n readonly italic?: boolean;\n readonly underline?: (typeof UnderlineStyle)[keyof typeof UnderlineStyle];\n readonly font?: string;\n readonly lang?: string;\n readonly fill?: FillOptions;\n readonly hyperlink?: HyperlinkOptions;\n readonly strike?: (typeof StrikeStyle)[keyof typeof StrikeStyle];\n readonly baseline?: number;\n readonly spacing?: number;\n readonly capitalization?: (typeof TextCapitalization)[keyof typeof TextCapitalization];\n readonly shadow?: boolean;\n readonly outline?: boolean;\n readonly rightToLeft?: boolean;\n readonly noProof?: boolean;\n readonly dirty?: boolean;\n}\n\n/**\n * Builds a:rPr attribute string.\n */\nfunction buildAttrString(options: RunPropertiesOptions): string {\n const attrs: string[] = [];\n if (options.fontSize) attrs.push(`sz=\"${options.fontSize * 100}\"`);\n if (options.bold !== undefined) attrs.push(`b=\"${options.bold ? 1 : 0}\"`);\n if (options.italic !== undefined) attrs.push(`i=\"${options.italic ? 1 : 0}\"`);\n if (options.underline) attrs.push(`u=\"${xsdUnderlineStyle.to(options.underline)}\"`);\n if (options.lang) attrs.push(`lang=\"${options.lang}\"`);\n if (options.strike) attrs.push(`strike=\"${xsdStrikeStyle.to(options.strike)}\"`);\n if (options.baseline !== undefined) attrs.push(`baseline=\"${options.baseline}\"`);\n if (options.capitalization) attrs.push(`cap=\"${xsdTextCaps.to(options.capitalization)}\"`);\n if (options.spacing !== undefined) attrs.push(`spc=\"${options.spacing}\"`);\n if (options.noProof !== undefined) attrs.push(`noProof=\"${options.noProof ? 1 : 0}\"`);\n if (options.dirty !== undefined) attrs.push(`dirty=\"${options.dirty ? 1 : 0}\"`);\n return attrs.join(\" \");\n}\n\n/**\n * Checks if options have any settable properties.\n */\nexport function hasRunProperties(options: RunPropertiesOptions): boolean {\n return !!(\n options.fontSize ||\n options.bold !== undefined ||\n options.italic !== undefined ||\n options.underline ||\n options.font ||\n options.lang ||\n options.fill ||\n options.hyperlink ||\n options.strike ||\n options.baseline !== undefined ||\n options.spacing !== undefined ||\n options.capitalization ||\n options.shadow !== undefined ||\n options.outline !== undefined ||\n options.rightToLeft !== undefined ||\n options.noProof !== undefined ||\n options.dirty !== undefined\n );\n}\n\n/**\n * a:rPr — Run properties (font, size, color, etc.).\n */\nexport class RunProperties extends XmlComponent {\n private readonly options: RunPropertiesOptions;\n\n public static hasProperties = hasRunProperties;\n\n public constructor(options: RunPropertiesOptions = {}) {\n super(\"a:rPr\");\n this.options = options;\n }\n\n public override toXml(context: Context): string {\n const opts = this.options;\n\n // Side-effect: register hyperlink\n let hyperlinkKey: string | undefined;\n if (opts.hyperlink) {\n hyperlinkKey = `hlink_${nextHyperlinkId++}`;\n const file = context.fileData as {\n hyperlinks?: { addHyperlink(key: string, url: string, tooltip?: string): void };\n };\n file?.hyperlinks?.addHyperlink(hyperlinkKey, opts.hyperlink.url, opts.hyperlink.tooltip);\n }\n\n const parts: string[] = [];\n const attrStr = buildAttrString(opts);\n\n // XSD order: ln → fill → effect → latin/ea → hlinkClick → rtl\n if (opts.outline) {\n parts.push(\n createOutline({\n width: DEFAULT_OUTLINE_WIDTH,\n type: \"solidFill\",\n color: { value: \"000000\" },\n }).toXml(context),\n );\n }\n if (opts.fill !== undefined) {\n parts.push(buildFill(opts.fill).toXml(context));\n }\n if (opts.shadow) {\n parts.push(\n createEffectList({\n outerShadow: {\n blurRadius: DEFAULT_SHADOW_BLUR_RADIUS,\n distance: DEFAULT_SHADOW_DISTANCE,\n direction: DEFAULT_SHADOW_DIRECTION,\n color: { value: \"000000\", transforms: { alpha: DEFAULT_SHADOW_ALPHA } },\n },\n }).toXml(context),\n );\n }\n\n if (opts.font) {\n parts.push(`<a:latin typeface=\"${opts.font}\"/>`);\n parts.push(`<a:ea typeface=\"${opts.font}\"/>`);\n }\n\n if (opts.hyperlink && hyperlinkKey) {\n const tooltip = opts.hyperlink.tooltip ? ` tooltip=\"${opts.hyperlink.tooltip}\"` : \"\";\n parts.push(`<a:hlinkClick r:id=\"{hlink:${hyperlinkKey}}\"${tooltip}/>`);\n }\n\n if (opts.rightToLeft !== undefined) {\n parts.push(`<a:rtl val=\"${opts.rightToLeft ? 1 : 0}\"/>`);\n }\n\n if (attrStr.length === 0 && parts.length === 0) return \"\";\n\n if (parts.length === 0) return `<a:rPr ${attrStr}/>`;\n return `<a:rPr ${attrStr}>${parts.join(\"\")}</a:rPr>`;\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\nimport { escapeXml } from \"@office-open/xml\";\n\nimport { RunProperties } from \"./run-properties\";\nimport type { RunPropertiesOptions } from \"./run-properties\";\n\nexport interface RunOptions extends RunPropertiesOptions {\n readonly text?: string;\n}\n\n/**\n * a:r — A run of text with properties.\n */\nexport class TextRun extends XmlComponent {\n private readonly options: RunOptions;\n\n public constructor(options: RunOptions | string = {}) {\n super(\"a:r\");\n this.options = typeof options === \"string\" ? { text: options } : options;\n }\n\n public override toXml(context: Context): string {\n const body = new RunProperties(this.options).toXml(context);\n if (this.options.text) {\n return `<a:r>${body}<a:t>${escapeXml(this.options.text)}</a:t></a:r>`;\n }\n return body ? `<a:r>${body}</a:r>` : \"<a:r/>\";\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\nimport { xml } from \"@office-open/xml\";\n\nimport type { ParagraphPropertiesOptions } from \"./paragraph-properties\";\nimport { buildParagraphProperties } from \"./paragraph-properties\";\nimport { TextRun } from \"./run\";\nimport type { RunOptions } from \"./run\";\n\nexport interface ParagraphOptions {\n /** Simple text content for the paragraph. Creates a single TextRun. */\n readonly text?: string;\n readonly properties?: ParagraphPropertiesOptions;\n readonly children?: readonly (TextRun | RunOptions | XmlComponent)[];\n}\n\n/**\n * a:p — A paragraph in a text body.\n * Lazy: stores options, builds XML in toXml().\n */\nexport class Paragraph extends XmlComponent {\n private readonly options: ParagraphOptions;\n\n public constructor(options: string | ParagraphOptions = {}) {\n super(\"a:p\");\n this.options = typeof options === \"string\" ? { text: options } : options;\n }\n\n public override toXml(context: Context): string {\n const parts: string[] = [];\n\n const pPr = buildParagraphProperties(this.options.properties ?? {});\n if (pPr) parts.push(xml(pPr));\n\n if (this.options.text) {\n parts.push(new TextRun(this.options.text).toXml(context));\n }\n\n if (this.options.children) {\n for (const rawChild of this.options.children) {\n const child =\n rawChild instanceof TextRun || rawChild instanceof XmlComponent\n ? rawChild\n : new TextRun(rawChild);\n parts.push(child.toXml(context));\n }\n }\n\n parts.push('<a:endParaRPr lang=\"en-US\"/>');\n\n const body = parts.join(\"\");\n return body ? `<a:p>${body}</a:p>` : \"<a:p/>\";\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\n\nimport { buildFill } from \"../drawingml/fill\";\nimport type { FillOptions } from \"../drawingml/fill\";\n\nexport interface CellBorderOptions {\n readonly width?: number;\n readonly color?: string;\n readonly dashStyle?: \"solid\" | \"dash\" | \"dashDot\" | \"lgDash\" | \"sysDot\" | \"sysDash\";\n}\n\nfunction buildBorderLine(name: string, options: CellBorderOptions): string {\n const attrs: string[] = [];\n if (options.width !== undefined) attrs.push(`w=\"${options.width}\"`);\n\n const children: string[] = [];\n if (options.color) {\n children.push(\n `<a:solidFill><a:srgbClr val=\"${options.color.replace(\"#\", \"\")}\"/></a:solidFill>`,\n );\n }\n if (options.dashStyle) {\n children.push(`<a:prstDash val=\"${options.dashStyle}\"/>`);\n }\n\n const attrStr = attrs.length > 0 ? ` ${attrs.join(\" \")}` : \"\";\n if (children.length === 0) return `<${name}${attrStr}/>`;\n return `<${name}${attrStr}>${children.join(\"\")}</${name}>`;\n}\n\n/**\n * a:tcPr — Table cell properties (borders + fill).\n */\nexport class TableCellProperties extends BaseXmlComponent {\n private readonly options?: {\n readonly fill?: FillOptions;\n readonly borders?: {\n readonly top?: CellBorderOptions;\n readonly bottom?: CellBorderOptions;\n readonly left?: CellBorderOptions;\n readonly right?: CellBorderOptions;\n };\n readonly verticalAlign?: \"t\" | \"ctr\" | \"b\";\n };\n\n public constructor(options?: {\n readonly fill?: FillOptions;\n readonly borders?: {\n readonly top?: CellBorderOptions;\n readonly bottom?: CellBorderOptions;\n readonly left?: CellBorderOptions;\n readonly right?: CellBorderOptions;\n };\n readonly verticalAlign?: \"t\" | \"ctr\" | \"b\";\n }) {\n super(\"a:tcPr\");\n this.options = options;\n }\n\n public override toXml(context: Context): string {\n const parts: string[] = [];\n const opts = this.options;\n\n if (opts?.verticalAlign) {\n parts.push(`anchor=\"${opts.verticalAlign}\"`);\n }\n\n if (opts?.borders) {\n if (opts.borders.left) parts.push(buildBorderLine(\"a:lnL\", opts.borders.left));\n if (opts.borders.right) parts.push(buildBorderLine(\"a:lnR\", opts.borders.right));\n if (opts.borders.top) parts.push(buildBorderLine(\"a:lnT\", opts.borders.top));\n if (opts.borders.bottom) parts.push(buildBorderLine(\"a:lnB\", opts.borders.bottom));\n }\n\n if (opts?.fill !== undefined) {\n const fillComp = buildFill(opts.fill);\n parts.push(fillComp.toXml(context));\n }\n\n if (parts.length === 0) return \"<a:tcPr/>\";\n\n // Check if first part is an attribute string (no <)\n const firstIsAttr = !parts[0].startsWith(\"<\");\n if (firstIsAttr) {\n const attrStr = parts[0];\n const children = parts.slice(1);\n if (children.length === 0) return `<a:tcPr ${attrStr}/>`;\n return `<a:tcPr ${attrStr}>${children.join(\"\")}</a:tcPr>`;\n }\n\n return `<a:tcPr>${parts.join(\"\")}</a:tcPr>`;\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\nimport { xsdTextAnchor } from \"@office-open/core\";\n\nimport type { FillOptions } from \"../drawingml/fill\";\nimport { Paragraph } from \"../shape/paragraph/paragraph\";\nimport type { ParagraphOptions } from \"../shape/paragraph/paragraph\";\nimport { TextRun } from \"../shape/paragraph/run\";\nimport { TableCellProperties, type CellBorderOptions } from \"./table-cell-properties\";\n\nexport const VerticalAlignment = {\n TOP: \"top\",\n CENTER: \"center\",\n BOTTOM: \"bottom\",\n} as const;\n\nexport interface TableCellOptions {\n readonly text?: string;\n readonly children?: readonly (BaseXmlComponent | ParagraphOptions | string)[];\n readonly fill?: FillOptions;\n readonly borders?: {\n readonly top?: CellBorderOptions;\n readonly bottom?: CellBorderOptions;\n readonly left?: CellBorderOptions;\n readonly right?: CellBorderOptions;\n };\n readonly columnSpan?: number;\n readonly rowSpan?: number;\n readonly verticalAlign?: (typeof VerticalAlignment)[keyof typeof VerticalAlignment];\n readonly margins?: {\n readonly top?: number;\n readonly bottom?: number;\n readonly left?: number;\n readonly right?: number;\n };\n}\n\n/**\n * a:tc — Table cell with text body and properties.\n * Lazy: stores options, builds XML string in toXml.\n */\nexport class TableCell extends BaseXmlComponent {\n private readonly options: TableCellOptions;\n private readonly paragraphs?: readonly BaseXmlComponent[];\n\n public constructor(options: TableCellOptions = {}) {\n super(\"a:tc\");\n this.options = options;\n this.paragraphs =\n options.children?.map((c) =>\n typeof c === \"string\"\n ? new Paragraph(c)\n : c instanceof BaseXmlComponent\n ? c\n : new Paragraph(c),\n ) ??\n (options.text !== undefined\n ? [\n new Paragraph({\n properties: {},\n children: [new TextRun({ text: options.text })],\n }),\n ]\n : undefined);\n }\n\n public override toXml(context: Context): string {\n const opts = this.options;\n const parts: string[] = [];\n\n // gridSpan / rowSpan attributes\n const tcAttrs: string[] = [];\n if (opts.columnSpan !== undefined && opts.columnSpan > 1)\n tcAttrs.push(`gridSpan=\"${opts.columnSpan}\"`);\n if (opts.rowSpan !== undefined && opts.rowSpan > 1) tcAttrs.push(`rowSpan=\"${opts.rowSpan}\"`);\n const tcAttrStr = tcAttrs.length > 0 ? ` ${tcAttrs.join(\" \")}` : \"\";\n\n // a:txBody\n const txParts: string[] = [];\n const margins = opts.margins;\n const bodyPrAttrs: string[] = [];\n if (margins?.top !== undefined) bodyPrAttrs.push(`tIns=\"${margins.top}\"`);\n if (margins?.bottom !== undefined) bodyPrAttrs.push(`bIns=\"${margins.bottom}\"`);\n if (margins?.left !== undefined) bodyPrAttrs.push(`lIns=\"${margins.left}\"`);\n if (margins?.right !== undefined) bodyPrAttrs.push(`rIns=\"${margins.right}\"`);\n const bodyPrStr = bodyPrAttrs.length > 0 ? ` ${bodyPrAttrs.join(\" \")}` : \"\";\n txParts.push(`<a:bodyPr${bodyPrStr}/>`);\n txParts.push(\"<a:lstStyle/>\");\n\n if (this.paragraphs) {\n for (const p of this.paragraphs) {\n txParts.push(p.toXml(context));\n }\n } else {\n txParts.push(\"<a:p/>\");\n }\n parts.push(`<a:txBody>${txParts.join(\"\")}</a:txBody>`);\n\n // a:tcPr (has fill needing context, uses toXml() internally)\n const tcPr = new TableCellProperties({\n fill: opts.fill,\n borders: opts.borders,\n verticalAlign: opts.verticalAlign\n ? (xsdTextAnchor.to(opts.verticalAlign) as \"t\" | \"ctr\" | \"b\")\n : undefined,\n });\n parts.push(tcPr.toXml(context));\n\n return `<a:tc${tcAttrStr}>${parts.join(\"\")}</a:tc>`;\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport type { Context, IXmlableObject } from \"@file/xml-components\";\nimport { xsdTextAnchor } from \"@office-open/core\";\nimport { xml } from \"@office-open/xml\";\n\nimport { VerticalAlignment } from \"../table/table-cell\";\nimport { Paragraph } from \"./paragraph/paragraph\";\nimport type { ParagraphOptions } from \"./paragraph/paragraph\";\nimport { TextRun } from \"./paragraph/run\";\n\nexport interface TextBodyOptions {\n readonly text?: string;\n readonly children?: readonly (Paragraph | ParagraphOptions | string)[];\n readonly vertical?: \"vert\" | \"vert270\" | \"horz\" | \"wordArtVert\";\n readonly anchor?: (typeof VerticalAlignment)[keyof typeof VerticalAlignment];\n readonly autoFit?: \"normal\" | \"shape\" | \"none\";\n readonly wrap?: \"square\" | \"none\";\n readonly margins?: {\n readonly top?: number;\n readonly bottom?: number;\n readonly left?: number;\n readonly right?: number;\n };\n readonly columns?: number;\n readonly columnSpacing?: number;\n}\n\n/**\n * Pure function: builds a:bodyPr content.\n */\nfunction buildBodyPr(options: TextBodyOptions): IXmlableObject {\n const bodyPrChildren: IXmlableObject[] = [];\n\n if (options.autoFit === \"normal\") bodyPrChildren.push({ \"a:normAutofit\": {} });\n else if (options.autoFit === \"shape\") bodyPrChildren.push({ \"a:spAutoFit\": {} });\n else if (options.autoFit === \"none\") bodyPrChildren.push({ \"a:noAutofit\": {} });\n\n const bodyPrContent: IXmlableObject[] = [];\n\n const attrs: Record<string, string | number> = {};\n if (options.vertical) attrs.vert = options.vertical;\n if (options.anchor) attrs.anchor = xsdTextAnchor.to(options.anchor);\n if (options.wrap) attrs.wrap = options.wrap;\n if (options.margins?.top !== undefined) attrs.tIns = options.margins.top;\n if (options.margins?.bottom !== undefined) attrs.bIns = options.margins.bottom;\n if (options.margins?.left !== undefined) attrs.lIns = options.margins.left;\n if (options.margins?.right !== undefined) attrs.rIns = options.margins.right;\n if (options.columns !== undefined) attrs.numCol = options.columns;\n if (options.columnSpacing !== undefined) attrs.spcCol = options.columnSpacing * 100;\n if (Object.keys(attrs).length > 0) bodyPrContent.push({ _attr: attrs });\n\n bodyPrContent.push(...bodyPrChildren);\n\n return {\n \"a:bodyPr\":\n bodyPrContent.length === 1 && \"_attr\" in bodyPrContent[0]\n ? bodyPrContent[0]\n : bodyPrContent.length > 0\n ? bodyPrContent\n : {},\n };\n}\n\n/**\n * p:txBody — Text body within a shape.\n * Lazy: stores options, builds XML in toXml().\n */\nexport class TextBody extends XmlComponent {\n private readonly options: TextBodyOptions;\n\n public constructor(options: TextBodyOptions = {}) {\n super(\"p:txBody\");\n this.options = options;\n }\n\n public override toXml(context: Context): string {\n const parts: string[] = [];\n\n parts.push(xml(buildBodyPr(this.options)));\n parts.push(\"<a:lstStyle/>\");\n\n if (this.options.children) {\n for (const p of this.options.children) {\n const para =\n typeof p === \"string\"\n ? new Paragraph({ children: [new TextRun({ text: p })] })\n : p instanceof Paragraph\n ? p\n : new Paragraph(p);\n parts.push(para.toXml(context));\n }\n } else if (this.options.text !== undefined) {\n parts.push(\n new Paragraph({\n children: [new TextRun({ text: this.options.text })],\n }).toXml(context),\n );\n } else {\n parts.push(new Paragraph().toXml(context));\n }\n\n return `<p:txBody>${parts.join(\"\")}</p:txBody>`;\n }\n}\n","import { GroupShapeProperties } from \"@file/drawingml/group-shape-properties\";\nimport { GroupShapeNonVisualProperties } from \"@file/shape-tree/group-shape-non-visual\";\nimport { buildAttrObject, BuilderElement, XmlComponent } from \"@file/xml-components\";\n\nimport { Paragraph } from \"../shape/paragraph/paragraph\";\nimport { TextRun } from \"../shape/paragraph/run\";\nimport { TextBody } from \"../shape/text-body\";\n\nexport interface NotesSlideOptions {\n readonly text?: string;\n}\n\n/**\n * p:notes — A notes slide associated with a presentation slide.\n *\n * Contains a slide image placeholder and a body text area for speaker notes.\n */\nexport class NotesSlide extends XmlComponent {\n public constructor(options: NotesSlideOptions = {}) {\n super(\"p:notes\");\n\n this.root.push(\n buildAttrObject({\n \"xmlns:a\": \"http://schemas.openxmlformats.org/drawingml/2006/main\",\n \"xmlns:r\": \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\n \"xmlns:p\": \"http://schemas.openxmlformats.org/presentationml/2006/main\",\n }),\n );\n\n this.root.push(new NotesCommonSlideData(options.text));\n this.root.push(\n new BuilderElement({\n name: \"p:clrMapOvr\",\n children: [new BuilderElement({ name: \"a:masterClrMapping\" })],\n }),\n );\n }\n}\n\nclass NotesCommonSlideData extends XmlComponent {\n public constructor(text?: string) {\n super(\"p:cSld\");\n this.root.push(new NotesShapeTree(text));\n }\n}\n\nclass NotesShapeTree extends XmlComponent {\n public constructor(text?: string) {\n super(\"p:spTree\");\n this.root.push(new GroupShapeNonVisualProperties());\n this.root.push(new GroupShapeProperties());\n this.root.push(new SlideImagePlaceholder());\n this.root.push(new NotesBodyPlaceholder(text));\n }\n}\n\nclass SlideImagePlaceholder extends XmlComponent {\n public constructor() {\n super(\"p:sp\");\n this.root.push(\n new BuilderElement({\n name: \"p:nvSpPr\",\n children: [\n new BuilderElement({\n name: \"p:cNvPr\",\n attributes: {\n id: { key: \"id\", value: 2 },\n name: { key: \"name\", value: \"Slide Image Placeholder 1\" },\n },\n }),\n new BuilderElement({ name: \"p:cNvSpPr\" }),\n new BuilderElement({\n name: \"p:nvPr\",\n children: [\n new BuilderElement({\n name: \"p:ph\",\n attributes: { type: { key: \"type\", value: \"sldImg\" } },\n }),\n ],\n }),\n ],\n }),\n );\n this.root.push(\n new BuilderElement({\n name: \"p:spPr\",\n children: [\n new BuilderElement({\n name: \"a:xfrm\",\n children: [\n new BuilderElement({\n name: \"a:off\",\n attributes: {\n x: { key: \"x\", value: 685800 },\n y: { key: \"y\", value: 1600200 },\n },\n }),\n new BuilderElement({\n name: \"a:ext\",\n attributes: {\n cx: { key: \"cx\", value: 5486400 },\n cy: { key: \"cy\", value: 3086100 },\n },\n }),\n ],\n }),\n ],\n }),\n );\n }\n}\n\nclass NotesBodyPlaceholder extends XmlComponent {\n public constructor(text?: string) {\n super(\"p:sp\");\n this.root.push(\n new BuilderElement({\n name: \"p:nvSpPr\",\n children: [\n new BuilderElement({\n name: \"p:cNvPr\",\n attributes: {\n id: { key: \"id\", value: 3 },\n name: { key: \"name\", value: \"Notes Placeholder 1\" },\n },\n }),\n new BuilderElement({ name: \"p:cNvSpPr\" }),\n new BuilderElement({\n name: \"p:nvPr\",\n children: [\n new BuilderElement({\n name: \"p:ph\",\n attributes: {\n type: { key: \"type\", value: \"body\" },\n idx: { key: \"idx\", value: 1 },\n },\n }),\n ],\n }),\n ],\n }),\n );\n this.root.push(\n new BuilderElement({\n name: \"p:spPr\",\n children: [\n new BuilderElement({\n name: \"a:xfrm\",\n children: [\n new BuilderElement({\n name: \"a:off\",\n attributes: {\n x: { key: \"x\", value: 685800 },\n y: { key: \"y\", value: 4800600 },\n },\n }),\n new BuilderElement({\n name: \"a:ext\",\n attributes: {\n cx: { key: \"cx\", value: 5486400 },\n cy: { key: \"cy\", value: 3600450 },\n },\n }),\n ],\n }),\n ],\n }),\n );\n\n const textBodyOptions = text\n ? { children: [new Paragraph({ children: [new TextRun({ text })] })] }\n : undefined;\n this.root.push(new TextBody(textBodyOptions));\n }\n}\n","import type { Context } from \"@file/xml-components\";\nimport { ImportedXmlComponent } from \"@file/xml-components\";\n\nexport interface ShowOptions {\n readonly loop?: boolean;\n readonly kiosk?: boolean;\n readonly showNarration?: boolean;\n readonly useTimings?: boolean;\n}\n\nfunction buildPresPropsXml(showOptions?: ShowOptions): string {\n if (!showOptions) {\n return `<p:presentationPr xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"/>`;\n }\n\n const attrs: string[] = [];\n if (showOptions.loop) attrs.push(' loop=\"1\"');\n if (showOptions.showNarration === false) attrs.push(' showNarration=\"0\"');\n if (showOptions.useTimings) attrs.push(' useTimings=\"1\"');\n\n // EG_ShowType: present | browse | kiosk (child element, not attribute)\n const showType = showOptions.kiosk ? \"<p:kiosk/>\" : \"<p:present/>\";\n const showPrXml = `<p:showPr${attrs.join(\"\")}>${showType}</p:showPr>`;\n\n return `<p:presentationPr xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">${showPrXml}</p:presentationPr>`;\n}\n\nexport class PresentationProperties extends ImportedXmlComponent {\n private static cache = new Map<string, ImportedXmlComponent>();\n private readonly key: string;\n\n public constructor(showOptions?: ShowOptions) {\n super(\"p:presentationPr\");\n this.key = showOptions ? presPropsKey(showOptions) : \"\";\n if (!PresentationProperties.cache.has(this.key)) {\n PresentationProperties.cache.set(\n this.key,\n ImportedXmlComponent.fromXmlString(buildPresPropsXml(showOptions)),\n );\n }\n }\n\n public override toXml(context: Context): string {\n return PresentationProperties.cache.get(this.key)!.toXml(context);\n }\n}\n\nfunction presPropsKey(o: ShowOptions): string {\n return `l${o.loop ? 1 : 0}k${o.kiosk ? 1 : 0}n${o.showNarration ? 1 : 0}t${o.useTimings ? 1 : 0}`;\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\n\nexport interface PresentationOptions {\n readonly slideWidth?: number;\n readonly slideHeight?: number;\n readonly slideIds: readonly number[];\n readonly masterCount: number;\n}\n\nconst DEFAULT_TEXT_STYLE_XML = `<p:defaultTextStyle xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">\n <a:defPPr><a:defRPr/></a:defPPr>\n <a:lvl1pPr marL=\"0\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl1pPr>\n <a:lvl2pPr marL=\"457200\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl2pPr>\n <a:lvl3pPr marL=\"914400\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl3pPr>\n <a:lvl4pPr marL=\"1371600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl4pPr>\n <a:lvl5pPr marL=\"1828800\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl5pPr>\n <a:lvl6pPr marL=\"2286000\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl6pPr>\n <a:lvl7pPr marL=\"2743200\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl7pPr>\n <a:lvl8pPr marL=\"3200400\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl8pPr>\n <a:lvl9pPr marL=\"3657600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl9pPr>\n</p:defaultTextStyle>`;\n\n/**\n * p:presentation — Root element of a PPTX file.\n * Lazy: stores options, builds XML in toXml().\n */\nexport class Presentation extends XmlComponent {\n private readonly options: PresentationOptions;\n\n public constructor(options: PresentationOptions) {\n super(\"p:presentation\");\n this.options = options;\n }\n\n public toXml(_context: Context): string {\n const opts = this.options;\n\n const cx = opts.slideWidth ?? 12192000;\n const cy = opts.slideHeight ?? 6858000;\n\n let s = `<p:presentation xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">`;\n s += \"<p:sldMasterIdLst>\";\n for (let mi = 0; mi < opts.masterCount; mi++) {\n s += `<p:sldMasterId id=\"${2147483648 + mi * 12}\" r:id=\"rId${mi + 1}\"/>`;\n }\n s += \"</p:sldMasterIdLst>\";\n s += \"<p:sldIdLst>\";\n const sRidOff = opts.masterCount + 1;\n for (let i = 0; i < opts.slideIds.length; i++) {\n s += `<p:sldId id=\"${opts.slideIds[i]}\" r:id=\"rId${sRidOff + i}\"/>`;\n }\n s += \"</p:sldIdLst>\";\n s += `<p:sldSz cx=\"${cx}\" cy=\"${cy}\"/>`;\n s += '<p:notesSz cx=\"6858000\" cy=\"9144000\"/>';\n s += DEFAULT_TEXT_STYLE_XML;\n s += \"</p:presentation>\";\n return s;\n }\n}\n","import { Relationships } from \"@file/relationships/relationships\";\nimport type { BaseXmlComponent } from \"@file/xml-components\";\n\nimport { Presentation } from \"./presentation\";\nimport type { PresentationOptions } from \"./presentation\";\n\nexport interface ViewWrapper {\n readonly view: BaseXmlComponent;\n readonly relationships: Relationships;\n}\n\nexport class PresentationWrapper implements ViewWrapper {\n private readonly presentation: Presentation;\n public readonly relationships: Relationships;\n\n public constructor(options: PresentationOptions) {\n this.presentation = new Presentation(options);\n this.relationships = new Relationships();\n }\n\n public get view(): Presentation {\n return this.presentation;\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\nimport {\n createTransform2D,\n type Transform2DOptions as CoreTransform2DOptions,\n} from \"@office-open/core/drawingml\";\n\nexport type ITransform2DOptions = CoreTransform2DOptions;\n\n/**\n * a:xfrm / p:xfrm — 2D transform for shapes and graphic frames (position + size in EMUs).\n * Delegates to core createTransform2D.\n */\nexport class Transform2D extends XmlComponent {\n private readonly core: XmlComponent;\n\n public constructor(options: ITransform2DOptions, prefix: \"a\" | \"p\" = \"a\") {\n super(`${prefix}:xfrm`);\n this.core = createTransform2D(options, `${prefix}:xfrm`);\n }\n\n public override toXml(context: Context): string {\n return this.core.toXml(context);\n }\n}\n","/**\n * Position/size conversion utilities for PPTX components.\n * @module\n */\nimport { convertPixelsToEmu } from \"@office-open/core\";\n\n/**\n * Pixel position options accepted by most positioned components.\n */\nexport interface PositionOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n}\n\n/**\n * Converts pixel position/size values to EMU, defaulting missing values to 0.\n *\n * Used by components that always need a transform (Chart, Picture,\n * Table, SmartArt, MediaFrameBase, etc.).\n */\nexport function emuPosition(opts: PositionOptions): {\n x: number;\n y: number;\n width: number;\n height: number;\n} {\n return {\n x: convertPixelsToEmu(opts.x ?? 0),\n y: convertPixelsToEmu(opts.y ?? 0),\n width: convertPixelsToEmu(opts.width ?? 0),\n height: convertPixelsToEmu(opts.height ?? 0),\n };\n}\n\n/**\n * Converts pixel position/size values to EMU, preserving undefined.\n *\n * Used by Shape which may omit position to let PowerPoint auto-layout.\n */\nexport function emuPositionOptional(opts: PositionOptions): {\n x: number | undefined;\n y: number | undefined;\n width: number | undefined;\n height: number | undefined;\n} {\n return {\n x: opts.x !== undefined ? convertPixelsToEmu(opts.x) : undefined,\n y: opts.y !== undefined ? convertPixelsToEmu(opts.y) : undefined,\n width: opts.width !== undefined ? convertPixelsToEmu(opts.width) : undefined,\n height: opts.height !== undefined ? convertPixelsToEmu(opts.height) : undefined,\n };\n}\n","import { Transform2D } from \"@file/drawingml/transform-2d\";\nimport { buildAttrObject, BuilderElement, XmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\nimport { emuPosition } from \"@util/position\";\n\nimport { ChartCollection } from \"./chart-collection\";\nimport type { ChartSpaceOptions } from \"./chart-space\";\nimport { ChartSpace } from \"./chart-space\";\n\nlet nextChartId = 2048;\n\nexport interface ChartOptions extends ChartSpaceOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n}\n\n/**\n * p:graphicFrame — Slide-level graphic frame wrapping a chart.\n *\n * The chart is stored as a separate part (ppt/charts/chart{n}.xml)\n * and referenced via a relationship ID placeholder {chart:key}.\n */\nexport class Chart extends XmlComponent {\n private readonly chartOptions: ChartSpaceOptions;\n public readonly chartKey: string;\n\n public constructor(options: ChartOptions) {\n super(\"p:graphicFrame\");\n\n this.chartOptions = options;\n this.chartKey = `chart_${nextChartId++}`;\n\n const id = nextChartId++;\n this.root.push(new GraphicFrameNonVisual(id));\n this.root.push(\n new Transform2D(\n {\n ...emuPosition(options),\n },\n \"p\",\n ),\n );\n\n this.root.push(new ChartGraphic(this.chartKey));\n }\n\n /** Register chart data with the File's Chart collection. */\n private registerChart(context: Context): void {\n const file = context.fileData as { charts: ChartCollection };\n if (file?.charts) {\n file.charts.addChart(this.chartKey, {\n chartSpace: new ChartSpace(this.chartOptions),\n key: this.chartKey,\n });\n }\n }\n\n public override toXml(context: Context): string {\n this.registerChart(context);\n return super.toXml(context);\n }\n}\n\nclass GraphicFrameNonVisual extends XmlComponent {\n public constructor(id: number) {\n super(\"p:nvGraphicFramePr\");\n this.root.push(\n new BuilderElement({\n name: \"p:cNvPr\",\n attributes: {\n id: { key: \"id\", value: id },\n name: { key: \"name\", value: `Chart ${id}` },\n },\n }),\n );\n this.root.push(\n new BuilderElement({\n name: \"p:cNvGraphicFramePr\",\n children: [\n new BuilderElement({\n name: \"a:graphicFrameLocks\",\n attributes: { noGrp: { key: \"noGrp\", value: 1 } },\n }),\n ],\n }),\n );\n this.root.push(new BuilderElement({ name: \"p:nvPr\" }));\n }\n}\n\nclass ChartGraphic extends XmlComponent {\n public constructor(chartKey: string) {\n super(\"a:graphic\");\n this.root.push(new ChartGraphicData(chartKey));\n }\n}\n\nclass ChartGraphicData extends XmlComponent {\n public constructor(chartKey: string) {\n super(\"a:graphicData\");\n this.root.push(\n buildAttrObject({\n uri: \"http://schemas.openxmlformats.org/drawingml/2006/chart\",\n }),\n );\n this.root.push(new ChartRef(chartKey));\n }\n}\n\nclass ChartRef extends XmlComponent {\n public constructor(chartKey: string) {\n super(\"c:chart\");\n this.root.push(\n buildAttrObject({\n \"xmlns:c\": \"http://schemas.openxmlformats.org/drawingml/2006/chart\",\n \"xmlns:r\": \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\n \"r:id\": `{chart:${chartKey}}`,\n }),\n );\n }\n}\n","import type { AnimationOptions } from \"@file/animation/types\";\n/**\n * Shared base class for media frames (video, audio) on slides.\n * @module\n */\nimport { PresetGeometry } from \"@file/drawingml/preset-geometry\";\nimport { Transform2D } from \"@file/drawingml/transform-2d\";\nimport type { File } from \"@file/file\";\nimport type { IMediaData } from \"@file/media/data\";\nimport { BuilderElement, type Context, XmlComponent } from \"@file/xml-components\";\nimport { convertPixelsToEmu } from \"@office-open/core\";\nimport { emuPosition } from \"@util/position\";\n\n/**\n * Common options for all media frames.\n * @internal\n */\nexport interface MediaFrameBaseOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n readonly data: Uint8Array;\n readonly type: IMediaData[\"type\"];\n readonly name?: string;\n readonly animation?: AnimationOptions;\n}\n\n/**\n * Builds an IMediaData object from pixel dimensions and raw data.\n * Generic parameter preserves the specific type literal for correct union narrowing.\n */\nfunction buildMediaData<T extends IMediaData[\"type\"]>(\n type: T,\n fileName: string,\n width: number,\n height: number,\n data: Uint8Array,\n): IMediaData & { readonly type: T } {\n return {\n type,\n fileName,\n transformation: {\n pixels: { x: width, y: height },\n emus: { x: convertPixelsToEmu(width), y: convertPixelsToEmu(height) },\n },\n data,\n } as IMediaData & { readonly type: T };\n}\n\n/**\n * Base class for media frames (video, audio) on slides.\n *\n * Encapsulates the common structure: ID assignment, media data building,\n * p:spPr (Transform2D + PresetGeometry), p:blipFill, p:nvPicPr parts,\n * and media registration in toXml().\n */\nexport abstract class MediaFrameBase extends XmlComponent {\n public readonly shapeId: number;\n public readonly animation: AnimationOptions | undefined;\n protected readonly mediaData: IMediaData;\n protected readonly posterData?: IMediaData;\n\n protected constructor(\n options: MediaFrameBaseOptions,\n id: number,\n mediaFileName: string,\n params: {\n readonly extUri: string;\n readonly cNvPrPrefix: string;\n readonly nvPrExtraChildren?: BuilderElement[];\n readonly posterBytes?: Uint8Array;\n readonly posterType?: string;\n readonly posterFileName?: string;\n },\n ) {\n super(\"p:pic\");\n\n this.shapeId = id;\n this.animation = options.animation;\n\n const name = options.name ?? `Media ${id}`;\n const w = options.width ?? 0;\n const h = options.height ?? 0;\n\n this.mediaData = buildMediaData(options.type, mediaFileName, w, h, options.data);\n\n // Poster data (video only)\n if (params.posterBytes) {\n const pt = params.posterType ?? \"png\";\n const pfn = params.posterFileName ?? `${name.replace(/\\s+/g, \"_\")}_poster.${pt}`;\n this.posterData = buildMediaData(pt === \"jpg\" ? \"jpg\" : \"png\", pfn, w, h, params.posterBytes);\n }\n\n // p:nvPicPr\n const nvPrChildren: BuilderElement[] = [...(params.nvPrExtraChildren ?? [])];\n nvPrChildren.push(\n new BuilderElement({\n name: \"p:extLst\",\n children: [\n new BuilderElement({\n name: \"p:ext\",\n attributes: { uri: { key: \"uri\", value: params.extUri } },\n children: [\n new BuilderElement({\n name: \"p14:media\",\n attributes: {\n \"r:embed\": {\n key: \"r:embed\",\n value: `{media:${mediaFileName}}`,\n },\n \"xmlns:p14\": {\n key: \"xmlns:p14\",\n value: \"http://schemas.microsoft.com/office/powerpoint/2010/main\",\n },\n },\n }),\n ],\n }),\n ],\n }),\n );\n\n this.root.push(\n new BuilderElement({\n name: \"p:nvPicPr\",\n children: [\n new BuilderElement({\n name: `${params.cNvPrPrefix}:cNvPr`,\n attributes: {\n id: { key: \"id\", value: id },\n name: { key: \"name\", value: name },\n descr: { key: \"descr\", value: \"\" },\n },\n }),\n new BuilderElement({\n name: `${params.cNvPrPrefix}:cNvPicPr`,\n children: [\n new BuilderElement({\n name: \"a:picLocks\",\n attributes: {\n noChangeAspect: { key: \"noChangeAspect\", value: \"1\" },\n },\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:nvPr\",\n children: nvPrChildren,\n }),\n ],\n }),\n );\n\n // p:blipFill\n const blipFillChildren: BuilderElement[] = [];\n if (this.posterData) {\n blipFillChildren.push(\n new BuilderElement({\n name: \"a:blip\",\n attributes: {\n \"r:embed\": { key: \"r:embed\", value: `{${this.posterData.fileName}}` },\n },\n }),\n );\n }\n blipFillChildren.push(\n new BuilderElement({\n name: \"a:stretch\",\n children: [new BuilderElement({ name: \"a:fillRect\" })],\n }),\n );\n this.root.push(new BuilderElement({ name: \"p:blipFill\", children: blipFillChildren }));\n\n // p:spPr\n this.root.push(\n new BuilderElement({\n name: \"p:spPr\",\n children: [\n new Transform2D({\n ...emuPosition(options),\n }),\n new PresetGeometry({ preset: \"rect\" }),\n ],\n }),\n );\n }\n\n /** Register media data with the File's Media collection. */\n private registerMedia(context: Context): void {\n const file = context.fileData as File;\n if (this.posterData) {\n file?.media.addImage(this.posterData.fileName, this.posterData);\n }\n file?.media.addMedia(this.mediaData.fileName, this.mediaData);\n }\n\n public override toXml(context: Context): string {\n this.registerMedia(context);\n return super.toXml(context);\n }\n}\n","import { MediaFrameBase, type MediaFrameBaseOptions } from \"./media-frame-base\";\n\nconst MEDIA_EXT_URI = \"{CF1602FD-DB20-4165-A070-5F299619DA56}\";\n\nexport type AudioType = \"mp3\" | \"wav\" | \"wma\" | \"aac\";\n\nexport interface AudioFrameOptions extends MediaFrameBaseOptions {\n readonly type: AudioType;\n}\n\n/**\n * p:pic — An audio frame on a slide.\n *\n * Uses a media relationship for the audio file (via {media:fileName} placeholder).\n */\nexport class AudioFrame extends MediaFrameBase {\n private static nextId = 200;\n\n public constructor(options: AudioFrameOptions) {\n const id = AudioFrame.nextId++;\n const name = options.name ?? `Audio ${id}`;\n const mediaFileName = `${name.replace(/\\s+/g, \"_\")}.${options.type}`;\n\n super(options, id, mediaFileName, {\n extUri: MEDIA_EXT_URI,\n cNvPrPrefix: \"p\",\n });\n }\n}\n","import { BuilderElement } from \"@file/xml-components\";\n\nimport { MediaFrameBase, type MediaFrameBaseOptions } from \"./media-frame-base\";\n\nconst MEDIA_EXT_URI = \"{DAA4B4D4-6D71-4841-9C94-3DE7FCFB9230}\";\n\n/** Minimal 1x1 transparent PNG (67 bytes). */\nconst MINIMAL_PNG = new Uint8Array([\n 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 1, 0, 0, 0, 1, 8, 6, 0, 0,\n 0, 31, 21, 196, 137, 0, 0, 0, 13, 73, 68, 65, 84, 8, 215, 99, 24, 5, 163, 0, 0, 0, 2, 0, 1, 226,\n 33, 188, 51, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130,\n]);\n\nexport type VideoType = \"mp4\" | \"mov\" | \"wmv\" | \"avi\";\nexport type PosterType = \"png\" | \"jpg\";\n\nexport interface VideoFrameOptions extends MediaFrameBaseOptions {\n readonly type: VideoType;\n readonly poster?: Uint8Array;\n readonly posterType?: PosterType;\n}\n\n/**\n * p:pic — A video frame on a slide.\n *\n * Uses three relationships:\n * - Image relationship for poster frame (via {posterFileName} placeholder)\n * - Video relationship for video file (via {video:fileName} placeholder in a:videoFile r:link)\n * - Media relationship for video file (via {media:fileName} placeholder in p14:media r:embed)\n */\nexport class VideoFrame extends MediaFrameBase {\n private static nextId = 100;\n\n public constructor(options: VideoFrameOptions) {\n const id = VideoFrame.nextId++;\n const name = options.name ?? `Video ${id}`;\n const mediaFileName = `${name.replace(/\\s+/g, \"_\")}.${options.type}`;\n const posterBytes = options.poster ?? MINIMAL_PNG;\n const posterType = options.posterType ?? \"png\";\n const posterFileName = `${name.replace(/\\s+/g, \"_\")}_poster.${posterType}`;\n\n super(options, id, mediaFileName, {\n extUri: MEDIA_EXT_URI,\n cNvPrPrefix: \"p\",\n nvPrExtraChildren: [\n new BuilderElement({\n name: \"a:videoFile\",\n attributes: {\n \"r:link\": { key: \"r:link\", value: `{video:${mediaFileName}}` },\n },\n }),\n ],\n posterBytes,\n posterType,\n posterFileName,\n });\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport { createBlip, Stretch } from \"@office-open/core/drawingml\";\n\n/**\n * p:blipFill — Image fill with stretch mode (within p:pic context).\n * Uses core createBlip for the blip element.\n */\nexport class BlipFill extends XmlComponent {\n public constructor(fileName: string) {\n super(\"p:blipFill\");\n this.root.push(createBlip({ referenceId: fileName }));\n this.root.push(new Stretch());\n }\n}\n","import { EmptyElement } from \"@file/xml-components\";\n\n/**\n * p:cNvPicPr — Non-visual picture drawing properties (within p:pic context).\n */\nexport class NonVisualPictureProperties extends EmptyElement {\n public constructor() {\n super(\"p:cNvPicPr\");\n }\n}\n","import { NonVisualPictureProperties } from \"@file/drawingml/non-visual-picture-props\";\nimport { BuilderElement, XmlComponent } from \"@file/xml-components\";\n\n/**\n * p:nvPicPr — Non-visual picture properties for p:pic.\n */\nexport class PictureNonVisual extends XmlComponent {\n public constructor(id: number, name: string) {\n super(\"p:nvPicPr\");\n this.root.push(\n new BuilderElement({\n name: \"p:cNvPr\",\n attributes: {\n id: { key: \"id\", value: id },\n name: { key: \"name\", value: name },\n descr: { key: \"descr\", value: \"\" },\n },\n }),\n );\n this.root.push(new NonVisualPictureProperties());\n this.root.push(new BuilderElement({ name: \"p:nvPr\" }));\n }\n}\n","import { BlipFill } from \"@file/drawingml/blip-fill\";\nimport { PresetGeometry } from \"@file/drawingml/preset-geometry\";\nimport { Transform2D } from \"@file/drawingml/transform-2d\";\nimport type { File } from \"@file/file\";\nimport type { IMediaData } from \"@file/media/data\";\nimport { BuilderElement, type Context, XmlComponent } from \"@file/xml-components\";\nimport { convertPixelsToEmu } from \"@office-open/core\";\nimport { emuPosition } from \"@util/position\";\n\nimport { PictureNonVisual } from \"./picture-non-visual\";\n\nexport interface PictureOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n readonly data: Uint8Array;\n readonly type: \"png\" | \"jpg\" | \"gif\" | \"bmp\" | \"emf\" | \"wmf\";\n readonly name?: string;\n}\n\n/**\n * p:pic — A picture on a slide.\n *\n * Registers image with Media collection via toXml().\n * The ImageReplacer replaces `{fileName}` placeholder with actual rId.\n */\nexport class Picture extends XmlComponent {\n private static nextId = 100;\n private readonly imageData: IMediaData;\n\n public constructor(options: PictureOptions) {\n super(\"p:pic\");\n\n const id = Picture.nextId++;\n const name = options.name ?? `Picture ${id}`;\n const fileName = `${name.replace(/\\s+/g, \"_\")}.${options.type}`;\n\n this.imageData = {\n type: options.type,\n fileName,\n transformation: {\n pixels: {\n x: options.width ?? 0,\n y: options.height ?? 0,\n },\n emus: {\n x: convertPixelsToEmu(options.width ?? 0),\n y: convertPixelsToEmu(options.height ?? 0),\n },\n },\n data: options.data,\n };\n\n this.root.push(new PictureNonVisual(id, name));\n\n this.root.push(new BlipFill(fileName));\n\n this.root.push(\n new BuilderElement({\n name: \"p:spPr\",\n children: [\n new Transform2D({\n ...emuPosition(options),\n }),\n new PresetGeometry({ preset: \"rect\" }),\n ],\n }),\n );\n }\n\n /** Register image with the File's Media collection. */\n private registerMedia(context: Context): void {\n (context.fileData as File).media.addImage(this.imageData.fileName, this.imageData);\n }\n\n public override toXml(context: Context): string {\n this.registerMedia(context);\n return super.toXml(context);\n }\n}\n","import { coerceChild } from \"@file/slide/coerce\";\nimport type { SlideChild } from \"@file/slide/slide-child\";\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\nimport { convertPixelsToEmu } from \"@office-open/core\";\n\nexport interface GroupShapeOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n readonly rotation?: number;\n readonly flipHorizontal?: boolean;\n readonly children: readonly SlideChild[];\n}\n\n/**\n * p:grpSp — Group shape containing child shapes.\n * Lazy: stores options, builds XML in toXml().\n */\nexport class GroupShape extends BaseXmlComponent {\n private static nextId = 100;\n private readonly id: number;\n private readonly options: GroupShapeOptions;\n\n public constructor(options: GroupShapeOptions) {\n super(\"p:grpSp\");\n this.id = GroupShape.nextId++;\n this.options = options;\n }\n\n public override toXml(context: Context): string {\n const opts = this.options;\n const id = this.id;\n const parts: string[] = [];\n\n // p:nvGrpSpPr\n parts.push(\n `<p:nvGrpSpPr><p:cNvPr id=\"${id}\" name=\"Group ${id}\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>`,\n );\n\n // p:grpSpPr\n const xfrmAttrs: string[] = [];\n if (opts.flipHorizontal !== undefined) xfrmAttrs.push(`flipH=\"${opts.flipHorizontal ? 1 : 0}\"`);\n if (opts.rotation !== undefined) xfrmAttrs.push(`rot=\"${opts.rotation}\"`);\n const xfrmAttrStr = xfrmAttrs.length > 0 ? ` ${xfrmAttrs.join(\" \")}` : \"\";\n parts.push(\n `<p:grpSpPr><a:xfrm${xfrmAttrStr}><a:off x=\"${convertPixelsToEmu(opts.x ?? 0)}\" y=\"${convertPixelsToEmu(opts.y ?? 0)}\"/><a:ext cx=\"${convertPixelsToEmu(opts.width ?? 0)}\" cy=\"${convertPixelsToEmu(opts.height ?? 0)}\"/><a:chOff x=\"0\" y=\"0\"/><a:chExt cx=\"0\" cy=\"0\"/></a:xfrm></p:grpSpPr>`,\n );\n\n // Child shapes\n for (const rawChild of opts.children) {\n const child = coerceChild(rawChild);\n const s = child.toXml(context);\n if (s) parts.push(s);\n }\n\n return `<p:grpSp>${parts.join(\"\")}</p:grpSp>`;\n }\n}\n","import { EmptyElement } from \"@file/xml-components\";\n\n/**\n * p:cNvSpPr — Non-visual shape properties.\n * Uses p: prefix in PresentationML context.\n */\nexport class NonVisualShapeProperties extends EmptyElement {\n public constructor() {\n super(\"p:cNvSpPr\");\n }\n}\n","import { createOutline, PresetDash, LineEndType, LineEndWidth } from \"@office-open/core/drawingml\";\nimport type {\n OutlineOptions as CoreOutlineOptions,\n LineEndOptions as CoreLineEndOptions,\n} from \"@office-open/core/drawingml\";\n\n/**\n * PPTX-specific outline options (backward-compatible API).\n */\nexport interface OutlineOptions {\n readonly width?: number;\n readonly color?: string;\n readonly dashStyle?: \"solid\" | \"dash\" | \"dashDot\" | \"lgDash\" | \"sysDot\" | \"sysDash\";\n}\n\nexport type { CoreOutlineOptions as OutlineOptionsCore };\n\nconst DASH_STYLE_MAP: Record<string, (typeof PresetDash)[keyof typeof PresetDash]> = {\n solid: \"solid\",\n dash: \"dash\",\n dashDot: \"dashDot\",\n lgDash: \"lgDash\",\n sysDot: \"sysDot\",\n sysDash: \"sysDash\",\n};\n\nconst ARROWHEAD_MAP: Record<string, (typeof LineEndType)[keyof typeof LineEndType]> = {\n triangle: \"triangle\",\n stealth: \"stealth\",\n diamond: \"diamond\",\n oval: \"oval\",\n open: \"arrow\",\n};\n\nfunction toCoreLineEnd(type: string, width?: string, length?: string): CoreLineEndOptions {\n return {\n type: ARROWHEAD_MAP[type] ?? \"triangle\",\n ...(width ? { width: width as (typeof LineEndWidth)[keyof typeof LineEndWidth] } : {}),\n ...(length ? { length: length as (typeof LineEndWidth)[keyof typeof LineEndWidth] } : {}),\n };\n}\n\n/**\n * Creates an outline element using pptx's simplified API.\n */\nexport const createOutlineCompat = (\n options: OutlineOptions = {},\n arrowheads?: {\n readonly beginType?: string;\n readonly endType?: string;\n readonly width?: string;\n readonly length?: string;\n },\n) =>\n createOutline({\n width: options.width,\n ...(options.color\n ? { type: \"solidFill\" as const, color: { value: options.color.replace(\"#\", \"\") } }\n : { type: \"noFill\" as const }),\n ...(options.dashStyle && {\n dash: DASH_STYLE_MAP[options.dashStyle] ?? \"solid\",\n }),\n ...(arrowheads?.endType\n ? { headEnd: toCoreLineEnd(arrowheads.endType, arrowheads.width, arrowheads.length) }\n : {}),\n ...(arrowheads?.beginType\n ? { tailEnd: toCoreLineEnd(arrowheads.beginType, arrowheads.width, arrowheads.length) }\n : {}),\n } satisfies CoreOutlineOptions);\n","import type { FillOptions } from \"@file/drawingml/fill\";\nimport { buildFill } from \"@file/drawingml/fill\";\nimport { NonVisualShapeProperties } from \"@file/drawingml/non-visual-shape-props\";\nimport { createOutlineCompat, type OutlineOptions } from \"@file/drawingml/outline\";\nimport { PresetGeometry } from \"@file/drawingml/preset-geometry\";\nimport { BuilderElement, XmlComponent as Xc } from \"@file/xml-components\";\nimport { convertPixelsToEmu } from \"@office-open/core\";\n\n/**\n * p:sp — A line shape on a slide.\n */\nexport class LineShape extends Xc {\n private static nextId = 2;\n public readonly shapeId: number;\n\n public constructor(options: LineShapeOptions = {}) {\n super(\"p:sp\");\n\n const id = options.id ?? LineShape.nextId++;\n this.shapeId = id;\n const name = options.name ?? `Line ${id}`;\n\n const x1 = convertPixelsToEmu(options.x1 ?? 0);\n const y1 = convertPixelsToEmu(options.y1 ?? 0);\n const x2 = convertPixelsToEmu(options.x2 ?? 100);\n const y2 = convertPixelsToEmu(options.y2 ?? 100);\n\n this.root.push(\n new BuilderElement({\n name: \"p:nvSpPr\",\n children: [\n new BuilderElement({\n name: \"p:cNvPr\",\n attributes: {\n id: { key: \"id\", value: id },\n name: { key: \"name\", value: name },\n },\n }),\n new NonVisualShapeProperties(),\n new BuilderElement({ name: \"p:nvPr\" }),\n ],\n }),\n );\n\n const offX = Math.min(x1, x2);\n const offY = Math.min(y1, y2);\n\n const xfrmAttrs:\n | Record<string, { readonly key: string; readonly value: string | number }>\n | undefined =\n x1 > x2 || y1 > y2\n ? (() => {\n const a: Record<string, { readonly key: string; readonly value: string | number }> = {};\n if (x1 > x2) a.flipH = { key: \"flipH\", value: 1 };\n if (y1 > y2) a.flipV = { key: \"flipV\", value: 1 };\n return a;\n })()\n : undefined;\n\n const spPrChildren: BuilderElement<{}>[] = [\n new BuilderElement({\n name: \"a:xfrm\",\n children: [\n new BuilderElement({\n name: \"a:off\",\n attributes: { x: { key: \"x\", value: offX }, y: { key: \"y\", value: offY } },\n }),\n new BuilderElement({\n name: \"a:ext\",\n attributes: {\n cx: { key: \"cx\", value: Math.abs(x2 - x1) },\n cy: { key: \"cy\", value: Math.abs(y2 - y1) },\n },\n }),\n ],\n attributes: xfrmAttrs,\n }),\n new PresetGeometry({ preset: \"line\" }),\n ];\n\n if (options.fill !== undefined) {\n spPrChildren.push(buildFill(options.fill));\n }\n if (options.outline) {\n spPrChildren.push(createOutlineCompat(options.outline));\n }\n\n this.root.push(\n new BuilderElement({\n name: \"p:spPr\",\n children: spPrChildren,\n }),\n );\n\n this.root.push(\n new BuilderElement({\n name: \"p:txBody\",\n children: [\n new BuilderElement({\n name: \"a:bodyPr\",\n attributes: { wrap: { key: \"wrap\", value: \"square\" } },\n }),\n new BuilderElement({ name: \"a:lstStyle\" }),\n new BuilderElement({ name: \"a:p\" }),\n ],\n }),\n );\n }\n}\n\nexport interface LineShapeOptions {\n readonly id?: number;\n readonly name?: string;\n readonly x1?: number;\n readonly y1?: number;\n readonly x2?: number;\n readonly y2?: number;\n readonly fill?: FillOptions;\n readonly outline?: OutlineOptions;\n}\n\nexport type ArrowheadType = \"triangle\" | \"stealth\" | \"diamond\" | \"oval\" | \"open\" | \"none\";\n\n/**\n * p:cxnSp — A connector shape on a slide (line with optional arrowheads).\n */\nexport class ConnectorShape extends Xc {\n private static nextId = 2;\n public readonly shapeId: number;\n\n public constructor(options: ConnectorShapeOptions = {}) {\n super(\"p:cxnSp\");\n\n const id = options.id ?? ConnectorShape.nextId++;\n this.shapeId = id;\n const name = options.name ?? `Connector ${id}`;\n\n const x1 = convertPixelsToEmu(options.x1 ?? 0);\n const y1 = convertPixelsToEmu(options.y1 ?? 0);\n const x2 = convertPixelsToEmu(options.x2 ?? 100);\n const y2 = convertPixelsToEmu(options.y2 ?? 100);\n\n this.root.push(\n new BuilderElement({\n name: \"p:nvCxnSpPr\",\n children: [\n new BuilderElement({\n name: \"p:cNvPr\",\n attributes: {\n id: { key: \"id\", value: id },\n name: { key: \"name\", value: name },\n },\n }),\n new BuilderElement({ name: \"p:cNvCxnSpPr\" }),\n new BuilderElement({ name: \"p:nvPr\" }),\n ],\n }),\n );\n\n const offX = Math.min(x1, x2);\n const offY = Math.min(y1, y2);\n\n const xfrmAttrs:\n | Record<string, { readonly key: string; readonly value: string | number }>\n | undefined =\n x1 > x2 || y1 > y2\n ? (() => {\n const a: Record<string, { readonly key: string; readonly value: string | number }> = {};\n if (x1 > x2) a.flipH = { key: \"flipH\", value: 1 };\n if (y1 > y2) a.flipV = { key: \"flipV\", value: 1 };\n return a;\n })()\n : undefined;\n\n const spPrChildren: BuilderElement<{}>[] = [\n new BuilderElement({\n name: \"a:xfrm\",\n children: [\n new BuilderElement({\n name: \"a:off\",\n attributes: { x: { key: \"x\", value: offX }, y: { key: \"y\", value: offY } },\n }),\n new BuilderElement({\n name: \"a:ext\",\n attributes: {\n cx: { key: \"cx\", value: Math.abs(x2 - x1) },\n cy: { key: \"cy\", value: Math.abs(y2 - y1) },\n },\n }),\n ],\n attributes: xfrmAttrs,\n }),\n new PresetGeometry({ preset: \"line\" }),\n ];\n\n if (options.fill !== undefined) {\n spPrChildren.push(buildFill(options.fill));\n }\n\n // Arrowheads + outline: headEnd/tailEnd must be inside a:ln per XSD\n const hasArrowheads = options.beginArrowhead || options.endArrowhead;\n if (options.outline || hasArrowheads) {\n spPrChildren.push(\n createOutlineCompat(\n options.outline ?? {},\n hasArrowheads\n ? {\n beginType: options.beginArrowhead,\n endType: options.endArrowhead,\n width: options.arrowheadWidth,\n length: options.arrowheadLength,\n }\n : undefined,\n ),\n );\n }\n\n this.root.push(\n new BuilderElement({\n name: \"p:spPr\",\n children: spPrChildren,\n }),\n );\n }\n}\n\nexport interface ConnectorShapeOptions {\n readonly id?: number;\n readonly name?: string;\n readonly x1?: number;\n readonly y1?: number;\n readonly x2?: number;\n readonly y2?: number;\n readonly fill?: FillOptions;\n readonly outline?: OutlineOptions;\n readonly beginArrowhead?: ArrowheadType;\n readonly endArrowhead?: ArrowheadType;\n readonly arrowheadWidth?: \"small\" | \"medium\" | \"large\";\n readonly arrowheadLength?: \"small\" | \"medium\" | \"large\";\n}\n","import type { File } from \"@file/file\";\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\n\nimport { createPptxEffectList, buildScene3D, buildShape3D, type EffectsOptions } from \"./effects\";\nimport { buildFill, extractBlipFillMedia } from \"./fill\";\nimport type { FillOptions } from \"./fill\";\nimport { createOutlineCompat } from \"./outline\";\nimport type { OutlineOptions } from \"./outline\";\nimport { PresetGeometry } from \"./preset-geometry\";\nimport { Transform2D } from \"./transform-2d\";\n\nexport interface ConnectionSiteOptions {\n readonly x: number;\n readonly y: number;\n readonly angle?: number;\n}\n\nexport interface ShapePropertiesOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n readonly flipHorizontal?: boolean;\n readonly rotation?: number;\n readonly geometry?: string;\n readonly fill?: FillOptions;\n readonly outline?: OutlineOptions;\n readonly effects?: EffectsOptions;\n readonly connectionSites?: readonly ConnectionSiteOptions[];\n}\n\n/**\n * p:spPr — Shape properties (transform, geometry, fill, outline, effects).\n */\nexport class ShapeProperties extends BaseXmlComponent {\n private readonly options: ShapePropertiesOptions;\n\n public constructor(options: ShapePropertiesOptions) {\n super(\"p:spPr\");\n this.options = options;\n }\n\n public override toXml(context: Context<File>): string {\n const opts = this.options;\n const parts: string[] = [];\n\n // Transform2D\n if (\n opts.x !== undefined ||\n opts.y !== undefined ||\n opts.width !== undefined ||\n opts.height !== undefined ||\n opts.flipHorizontal !== undefined ||\n opts.rotation !== undefined\n ) {\n parts.push(new Transform2D(opts).toXml(context));\n }\n\n // PresetGeometry\n parts.push(new PresetGeometry({ preset: opts.geometry ?? \"rect\" }).toXml(context));\n\n // Fill (register blipFill media — side effect)\n const media = opts.fill ? extractBlipFillMedia(opts.fill) : undefined;\n if (media) {\n context.fileData?.media.addImage(media.fileName, {\n data: media.data,\n fileName: media.fileName,\n type: media.type as \"png\",\n transformation: { pixels: { x: 0, y: 0 }, emus: { x: 0, y: 0 } },\n });\n }\n\n const fillComponent = buildFill(opts.fill !== undefined ? opts.fill : { type: \"none\" });\n parts.push(fillComponent.toXml(context));\n\n // Outline\n if (opts.outline) {\n parts.push(createOutlineCompat(opts.outline).toXml(context));\n }\n\n // Effects\n if (opts.effects) {\n const effectObj = createPptxEffectList(opts.effects);\n if (effectObj) parts.push(effectObj.toXml(context));\n\n const scene3d = buildScene3D(opts.effects);\n if (scene3d) parts.push(scene3d.toXml(context));\n\n const shape3d = buildShape3D(opts.effects);\n if (shape3d) parts.push(shape3d.toXml(context));\n }\n\n // Connection sites\n if (opts.connectionSites && opts.connectionSites.length > 0) {\n const cxnParts: string[] = [];\n for (const site of opts.connectionSites) {\n const ang = site.angle !== undefined ? ` ang=\"${site.angle}\"` : \"\";\n cxnParts.push(`<a:cxn pos=\"${site.x} ${site.y}\"${ang}/>`);\n }\n parts.push(`<a:cxnLst>${cxnParts.join(\"\")}</a:cxnLst>`);\n }\n\n return `<p:spPr>${parts.join(\"\")}</p:spPr>`;\n }\n}\n","import type { AnimationOptions } from \"@file/animation/types\";\nimport type { EffectsOptions } from \"@file/drawingml/effects\";\nimport type { OutlineOptions } from \"@file/drawingml/outline\";\nimport { ShapeProperties } from \"@file/drawingml/shape-properties\";\nimport type { ShapePropertiesOptions } from \"@file/drawingml/shape-properties\";\nimport type { File } from \"@file/file\";\nimport { XmlComponent as Xc } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\nimport { escapeXml } from \"@office-open/xml\";\nimport { emuPositionOptional } from \"@util/position\";\n\nimport { TextBody } from \"./text-body\";\nimport type { TextBodyOptions } from \"./text-body\";\n\nexport interface ShapeOptions {\n readonly id?: number;\n readonly name?: string;\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n readonly geometry?: string;\n readonly fill?: ShapePropertiesOptions[\"fill\"];\n readonly outline?: OutlineOptions;\n readonly effects?: EffectsOptions;\n readonly flipHorizontal?: boolean;\n readonly rotation?: number;\n readonly textBody?: TextBodyOptions;\n readonly animation?: AnimationOptions;\n readonly placeholder?: \"title\" | \"body\" | \"subTitle\" | \"sldNum\" | \"dt\" | \"ftr\" | \"hdr\" | \"obj\";\n readonly placeholderIndex?: number;\n}\n\n/**\n * p:sp — A shape on a slide.\n * Lazy: stores options, builds XML in toXml().\n *\n * x/y/width/height accept pixel values and are internally converted to EMUs.\n */\nexport class Shape extends Xc {\n private static nextId = 2;\n public readonly shapeId: number;\n public readonly animation: AnimationOptions | undefined;\n private readonly options: ShapeOptions;\n\n public constructor(options: ShapeOptions = {}) {\n super(\"p:sp\");\n\n const id = options.id ?? Shape.nextId++;\n this.shapeId = id;\n this.animation = options.animation;\n this.options = { ...options, id };\n }\n\n public override toXml(context: Context): string {\n const opts = this.options;\n const id = this.shapeId;\n const name = opts.name ?? `Shape ${id}`;\n const parts: string[] = [];\n\n // p:nvSpPr\n let nvPrContent = \"<p:nvPr/>\";\n if (opts.placeholder) {\n const phAttrs: string[] = [`type=\"${opts.placeholder}\"`];\n if (opts.placeholderIndex !== undefined) phAttrs.push(`idx=\"${opts.placeholderIndex}\"`);\n nvPrContent = `<p:nvPr><p:ph ${phAttrs.join(\" \")}/></p:nvPr>`;\n }\n parts.push(\n `<p:nvSpPr><p:cNvPr id=\"${id}\" name=\"${escapeXml(name)}\"/><p:cNvSpPr/>${nvPrContent}</p:nvSpPr>`,\n );\n\n // p:spPr (ShapeProperties — has side effects, uses toXml() internally)\n const shapeProps: ShapePropertiesOptions = {\n ...emuPositionOptional(opts),\n geometry: opts.geometry,\n fill: opts.fill,\n outline: opts.outline,\n effects: opts.effects,\n flipHorizontal: opts.flipHorizontal,\n rotation: opts.rotation,\n };\n const spPr = new ShapeProperties(shapeProps);\n const spPrXml = spPr.toXml(context as Context<File>);\n if (spPrXml) parts.push(spPrXml);\n\n // p:txBody (TextBody — has toXml)\n const txBody = new TextBody(opts.textBody ?? {});\n parts.push(txBody.toXml(context));\n\n return `<p:sp>${parts.join(\"\")}</p:sp>`;\n }\n}\n","import { Transform2D } from \"@file/drawingml/transform-2d\";\nimport { buildAttrObject, BuilderElement, type Context, XmlComponent } from \"@file/xml-components\";\nimport { emuPosition } from \"@util/position\";\n\nimport type { SmartArtCollection } from \"./smartart-collection\";\nimport { createDataModel, type TreeNode } from \"./tree-to-model\";\n\nlet nextSmartArtId = 1024;\n\nexport interface SmartArtOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n readonly nodes: readonly TreeNode[];\n readonly name?: string;\n /** Layout ID (e.g. \"default\", \"process1\", \"hierarchy1\") */\n readonly layout?: string;\n /** Quick style ID (e.g. \"simple1\", \"moderate1\") */\n readonly style?: string;\n /** Color transform ID (e.g. \"accent1_2\", \"colorful1\") */\n readonly color?: string;\n}\n\n/**\n * p:graphicFrame — Slide-level graphic frame wrapping a SmartArt diagram.\n */\nexport class SmartArt extends XmlComponent {\n private readonly smartArtKey: string;\n private readonly dataModel: ReturnType<typeof createDataModel>;\n private readonly layoutId: string;\n private readonly styleId: string;\n private readonly colorId: string;\n\n public constructor(options: SmartArtOptions) {\n super(\"p:graphicFrame\");\n\n this.smartArtKey = `smartart_${nextSmartArtId++}`;\n this.layoutId = options.layout ?? \"default\";\n this.styleId = options.style ?? \"simple1\";\n this.colorId = options.color ?? \"accent1_2\";\n this.dataModel = createDataModel(options.nodes, this.layoutId, this.styleId, this.colorId);\n\n const id = nextSmartArtId++;\n const name = options.name ?? `Diagram ${id}`;\n\n this.root.push(new GraphicFrameNonVisual(id, name));\n this.root.push(\n new Transform2D(\n {\n ...emuPosition(options),\n },\n \"p\",\n ),\n );\n this.root.push(new SmartArtGraphic(this.smartArtKey));\n }\n\n /** Register SmartArt data with the File's SmartArt collection. */\n private registerSmartArt(context: Context): void {\n const file = context.fileData as { smartArts: SmartArtCollection };\n if (file?.smartArts) {\n file.smartArts.addSmartArt(this.smartArtKey, {\n key: this.smartArtKey,\n dataModel: this.dataModel,\n layout: this.layoutId,\n style: this.styleId,\n color: this.colorId,\n });\n }\n }\n\n public override toXml(context: Context): string {\n this.registerSmartArt(context);\n return super.toXml(context);\n }\n}\n\nclass GraphicFrameNonVisual extends XmlComponent {\n public constructor(id: number, name: string) {\n super(\"p:nvGraphicFramePr\");\n this.root.push(\n new BuilderElement({\n name: \"p:cNvPr\",\n attributes: {\n id: { key: \"id\", value: id },\n name: { key: \"name\", value: name },\n },\n }),\n );\n this.root.push(\n new BuilderElement({\n name: \"p:cNvGraphicFramePr\",\n children: [\n new BuilderElement({\n name: \"a:graphicFrameLocks\",\n attributes: { noGrp: { key: \"noGrp\", value: 1 } },\n }),\n ],\n }),\n );\n this.root.push(new BuilderElement({ name: \"p:nvPr\" }));\n }\n}\n\nclass SmartArtGraphic extends XmlComponent {\n public constructor(smartArtKey: string) {\n super(\"a:graphic\");\n this.root.push(new SmartArtGraphicData(smartArtKey));\n }\n}\n\nclass SmartArtGraphicData extends XmlComponent {\n public constructor(smartArtKey: string) {\n super(\"a:graphicData\");\n this.root.push(\n buildAttrObject({\n uri: \"http://schemas.openxmlformats.org/drawingml/2006/diagram\",\n }),\n );\n this.root.push(new DiagramRelIds(smartArtKey));\n }\n}\n\nclass DiagramRelIds extends XmlComponent {\n public constructor(smartArtKey: string) {\n super(\"dgm:relIds\");\n this.root.push(\n buildAttrObject({\n \"xmlns:dgm\": \"http://schemas.openxmlformats.org/drawingml/2006/diagram\",\n \"xmlns:r\": \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\n \"r:dm\": `{smartart:${smartArtKey}}`,\n \"r:lo\": `{smartart-lo:${smartArtKey}}`,\n \"r:qs\": `{smartart-qs:${smartArtKey}}`,\n \"r:cs\": `{smartart-cs:${smartArtKey}}`,\n }),\n );\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\n\n/**\n * a:graphic > a:graphicData — DrawingML graphic wrapper for table.\n * Lazy: stores table reference, builds XML in toXml().\n */\nexport class Graphic extends BaseXmlComponent {\n private readonly table: BaseXmlComponent;\n\n public constructor(table: BaseXmlComponent) {\n super(\"a:graphic\");\n this.table = table;\n }\n\n public override toXml(context: Context): string {\n const tableXml = this.table.toXml(context);\n return `<a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/table\">${tableXml}</a:graphicData></a:graphic>`;\n }\n}\n","import { BuilderElement, XmlComponent } from \"@file/xml-components\";\n\n/**\n * p:nvGraphicFramePr — Non-visual properties for graphic frame.\n */\nexport class GraphicFrameNonVisual extends XmlComponent {\n private static nextId = 1024;\n\n public constructor() {\n super(\"p:nvGraphicFramePr\");\n const id = GraphicFrameNonVisual.nextId++;\n this.root.push(\n new BuilderElement({\n name: \"p:cNvPr\",\n attributes: {\n id: { key: \"id\", value: id },\n name: { key: \"name\", value: `Table ${id}` },\n },\n }),\n );\n this.root.push(\n new BuilderElement({\n name: \"p:cNvGraphicFramePr\",\n children: [\n new BuilderElement({\n name: \"a:graphicFrameLocks\",\n attributes: { noGrp: { key: \"noGrp\", value: 1 } },\n }),\n ],\n }),\n );\n this.root.push(new BuilderElement({ name: \"p:nvPr\" }));\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\n\n/**\n * a:tblGrid — Table grid with column width definitions.\n * Lazy: stores widths, builds XML in toXml().\n */\nexport class TableGrid extends BaseXmlComponent {\n private readonly columnWidths: readonly number[];\n\n public constructor(columnWidths: readonly number[]) {\n super(\"a:tblGrid\");\n this.columnWidths = columnWidths;\n }\n\n public override toXml(_context: Context): string {\n const cols = this.columnWidths.map((w) => `<a:gridCol w=\"${w}\"/>`).join(\"\");\n return `<a:tblGrid>${cols}</a:tblGrid>`;\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\n\n/**\n * a:tblPr — Table properties (firstRow, bandRow, etc.).\n * Lazy: stores options, builds XML in toXml().\n */\nexport class TableProperties extends BaseXmlComponent {\n private readonly options?: {\n readonly firstRow?: boolean;\n readonly lastRow?: boolean;\n readonly bandRow?: boolean;\n readonly firstCol?: boolean;\n readonly lastCol?: boolean;\n readonly bandCol?: boolean;\n };\n\n public constructor(options?: {\n readonly firstRow?: boolean;\n readonly lastRow?: boolean;\n readonly bandRow?: boolean;\n readonly firstCol?: boolean;\n readonly lastCol?: boolean;\n readonly bandCol?: boolean;\n }) {\n super(\"a:tblPr\");\n this.options = options;\n }\n\n public override toXml(_context: Context): string {\n if (!this.options) return \"<a:tblPr/>\";\n const opts = this.options;\n const attrs: string[] = [];\n if (opts.firstRow !== undefined) attrs.push(`firstRow=\"${opts.firstRow ? 1 : 0}\"`);\n if (opts.lastRow !== undefined) attrs.push(`lastRow=\"${opts.lastRow ? 1 : 0}\"`);\n if (opts.bandRow !== undefined) attrs.push(`bandRow=\"${opts.bandRow ? 1 : 0}\"`);\n if (opts.firstCol !== undefined) attrs.push(`firstCol=\"${opts.firstCol ? 1 : 0}\"`);\n if (opts.lastCol !== undefined) attrs.push(`lastCol=\"${opts.lastCol ? 1 : 0}\"`);\n if (opts.bandCol !== undefined) attrs.push(`bandCol=\"${opts.bandCol ? 1 : 0}\"`);\n return attrs.length === 0 ? \"<a:tblPr/>\" : `<a:tblPr ${attrs.join(\" \")}/>`;\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\n\nimport { TableCell, type TableCellOptions } from \"./table-cell\";\n\nexport interface TableRowOptions {\n readonly height?: number;\n readonly cells: readonly TableCellOptions[];\n}\n\n/**\n * a:tr — Table row containing cells.\n * Lazy: stores options, builds XML in toXml().\n */\nexport class TableRow extends BaseXmlComponent {\n private readonly options: TableRowOptions;\n\n public constructor(options: TableRowOptions) {\n super(\"a:tr\");\n this.options = options;\n }\n\n public override toXml(context: Context): string {\n const h = this.options.height ?? 0;\n const parts: string[] = [];\n for (const cell of this.options.cells) {\n parts.push(new TableCell(cell).toXml(context));\n }\n return `<a:tr h=\"${h}\">${parts.join(\"\")}</a:tr>`;\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\n\nimport type { CellBorderOptions } from \"./table-cell-properties\";\nimport { TableGrid } from \"./table-grid\";\nimport { TableProperties } from \"./table-properties\";\nimport { TableRow, type TableRowOptions } from \"./table-row\";\n\nexport interface DrawingTableOptions {\n readonly rows: readonly TableRowOptions[];\n readonly columnWidths?: readonly number[];\n readonly firstRow?: boolean;\n readonly lastRow?: boolean;\n readonly bandRow?: boolean;\n readonly firstCol?: boolean;\n readonly lastCol?: boolean;\n readonly bandCol?: boolean;\n readonly borders?: {\n readonly top?: CellBorderOptions;\n readonly bottom?: CellBorderOptions;\n readonly left?: CellBorderOptions;\n readonly right?: CellBorderOptions;\n };\n}\n\n/**\n * a:tbl — DrawingML table element.\n * Lazy: stores options, builds XML in toXml().\n */\nexport class DrawingTable extends BaseXmlComponent {\n private readonly options: DrawingTableOptions;\n\n public constructor(options: DrawingTableOptions) {\n super(\"a:tbl\");\n this.options = options;\n }\n\n public override toXml(context: Context): string {\n const opts = this.options;\n const parts: string[] = [];\n\n // a:tblPr\n const tblPr = new TableProperties({\n firstRow: opts.firstRow,\n lastRow: opts.lastRow,\n bandRow: opts.bandRow,\n firstCol: opts.firstCol,\n lastCol: opts.lastCol,\n bandCol: opts.bandCol,\n });\n parts.push(tblPr.toXml(context));\n\n // a:tblGrid\n const colWidths =\n opts.columnWidths && opts.columnWidths.length > 0\n ? opts.columnWidths\n : Array.from({ length: opts.rows[0]?.cells.length ?? 1 }, () => 0);\n parts.push(new TableGrid(colWidths).toXml(context));\n\n // a:tr — distribute table-level borders to edge cells\n const rowCount = opts.rows.length;\n for (let ri = 0; ri < rowCount; ri++) {\n const row = opts.rows[ri];\n const cells = this.distributeBorders(row, ri, rowCount, opts.borders);\n parts.push(new TableRow({ ...row, cells }).toXml(context));\n }\n\n return `<a:tbl>${parts.join(\"\")}</a:tbl>`;\n }\n\n /** Distribute table-level borders to edge cells only when needed. */\n private distributeBorders(\n row: TableRowOptions,\n ri: number,\n rowCount: number,\n tb: DrawingTableOptions[\"borders\"],\n ): TableRowOptions[\"cells\"] {\n if (!tb) return row.cells;\n const colCount = row.cells.length;\n return row.cells.map((cell, ci) => {\n const needTop = ri === 0 && !!tb.top && !cell.borders?.top;\n const needBottom = ri === rowCount - 1 && !!tb.bottom && !cell.borders?.bottom;\n const needLeft = ci === 0 && !!tb.left && !cell.borders?.left;\n const needRight = ci === colCount - 1 && !!tb.right && !cell.borders?.right;\n if (!needTop && !needBottom && !needLeft && !needRight) return cell;\n const borders = {\n ...cell.borders,\n ...(needTop && { top: tb.top }),\n ...(needBottom && { bottom: tb.bottom }),\n ...(needLeft && { left: tb.left }),\n ...(needRight && { right: tb.right }),\n };\n return { ...cell, borders };\n });\n }\n}\n","import { Transform2D } from \"@file/drawingml/transform-2d\";\nimport { XmlComponent } from \"@file/xml-components\";\nimport { emuPosition } from \"@util/position\";\n\nimport { Graphic } from \"./graphic\";\nimport { GraphicFrameNonVisual } from \"./graphic-frame-non-visual\";\nimport type { DrawingTableOptions } from \"./table\";\nimport { DrawingTable } from \"./table\";\n\nexport interface TableOptions extends DrawingTableOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n}\n\n/**\n * p:graphicFrame — Slide-level graphic frame wrapping a table.\n *\n * x/y/width/height accept pixel values, converted to EMUs internally.\n */\nexport class Table extends XmlComponent {\n public constructor(options: TableOptions) {\n super(\"p:graphicFrame\");\n\n this.root.push(new GraphicFrameNonVisual());\n\n this.root.push(\n new Transform2D(\n {\n ...emuPosition(options),\n },\n \"p\",\n ),\n );\n\n const table = new DrawingTable(options);\n this.root.push(new Graphic(table));\n }\n}\n","import { Chart } from \"@file/chart/chart-frame\";\nimport type { MasterChild } from \"@file/file\";\nimport { AudioFrame } from \"@file/media/audio-frame\";\nimport { VideoFrame } from \"@file/media/video-frame\";\nimport { Picture } from \"@file/picture/picture\";\nimport { GroupShape } from \"@file/shape/group-shape\";\nimport { ConnectorShape, LineShape } from \"@file/shape/line-shape\";\nimport { Shape } from \"@file/shape/shape\";\nimport type { SlideChild } from \"@file/slide/slide-child\";\nimport { SmartArt } from \"@file/smartart/smartart-frame\";\nimport { Table } from \"@file/table/table-frame\";\nimport { BaseXmlComponent } from \"@file/xml-components\";\n\nexport function coerceChild(child: SlideChild): BaseXmlComponent {\n if (child instanceof BaseXmlComponent) return child;\n if (\"shape\" in child) return new Shape(child.shape);\n if (\"picture\" in child) return new Picture(child.picture);\n if (\"table\" in child) return new Table(child.table);\n if (\"chart\" in child) return new Chart(child.chart);\n if (\"line\" in child) return new LineShape(child.line);\n if (\"connector\" in child) return new ConnectorShape(child.connector);\n if (\"video\" in child) return new VideoFrame(child.video);\n if (\"audio\" in child) return new AudioFrame(child.audio);\n if (\"group\" in child) return new GroupShape(child.group);\n if (\"smartart\" in child) return new SmartArt(child.smartart);\n throw new Error(\"Unknown slide child type\");\n}\n\nexport function coerceMasterChild(child: MasterChild): BaseXmlComponent {\n if (child instanceof BaseXmlComponent) return child;\n if (\"shape\" in child) return new Shape(child.shape);\n throw new Error(\"Unknown master child type\");\n}\n","import type { LayoutDefinition, MasterChild } from \"@file/file\";\nimport type { MasterPlaceholderPosition } from \"@file/slide-master/slide-master\";\nimport { coerceMasterChild } from \"@file/slide/coerce\";\nimport type { Context } from \"@file/xml-components\";\nimport { ImportedXmlComponent } from \"@file/xml-components\";\nimport { convertPixelsToEmu } from \"@office-open/core\";\n\nexport type SlideLayoutType =\n | \"blank\"\n | \"title\"\n | \"tx\"\n | \"twoColTx\"\n | \"titleOnly\"\n | \"obj\"\n | \"secHead\"\n | \"chart\"\n | \"tbl\"\n | \"picTx\"\n | \"twoObj\"\n | \"twoTxTwoObj\"\n | \"objTx\"\n | \"vertTx\"\n | \"vertTitleAndTx\";\n\nconst NS = `xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"`;\n\nconst SP_TREE_HEADER = `<p:nvGrpSpPr><p:cNvPr id=\"1\" name=\"\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/><a:chOff x=\"0\" y=\"0\"/><a:chExt cx=\"0\" cy=\"0\"/></a:xfrm></p:grpSpPr>`;\n\n// 16:9 reference slide width\nconst SW_REF = 12192000;\nconst sx = (refX: number, sw: number) => Math.round((refX * sw) / SW_REF);\n\n// ── Placeholder XML builders ──\n\n// No xfrm — inherited from master\nfunction dtPlaceholder(id: number): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Date Placeholder ${id - 1}\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"dt\" sz=\"half\" idx=\"10\"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id=\"{5BCAD085-E8A6-8845-BD4E-CB4CCA059FC4}\" type=\"datetimeFigureOut\"><a:rPr lang=\"en-US\" smtClean=\"0\"/><a:t>1/27/13</a:t></a:fld><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\nfunction ftrPlaceholder(id: number): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Footer Placeholder ${id - 1}\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"ftr\" sz=\"quarter\" idx=\"11\"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\nfunction sldNumPlaceholder(id: number): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Slide Number Placeholder ${id - 1}\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"sldNum\" sz=\"quarter\" idx=\"12\"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id=\"{C1FF6DA9-008F-8B48-92A6-B652298478BF}\" type=\"slidenum\"><a:rPr lang=\"en-US\" smtClean=\"0\"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\n// title — no idx, no xfrm (inherited)\nfunction titlePlaceholder(id: number): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Title 1\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"title\"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\n// Body (generic) idx, no xfrm (inherited)\nfunction bodyPlaceholder(id: number, idx: number): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Content Placeholder ${id - 1}\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph idx=\"${idx}\"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\n// Body with xfrm (positioned)\nfunction bodyPlaceholderAt(\n id: number,\n idx: number,\n x: number,\n y: number,\n cx: number,\n cy: number,\n): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Content Placeholder ${id - 1}\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph idx=\"${idx}\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\n// Body with explicit type=\"body\" and xfrm\nfunction typedBodyPlaceholder(\n id: number,\n idx: number,\n x: number,\n y: number,\n cx: number,\n cy: number,\n): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Text Placeholder ${id - 1}\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"body\" idx=\"${idx}\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\n// Title with xfrm\nfunction titlePlaceholderAt(id: number, x: number, y: number, cx: number, cy: number): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Title 1\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"title\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\n// ctrTitle — centered title for title layout\nfunction ctrTitlePlaceholder(id: number, x: number, y: number, cx: number, cy: number): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Title 1\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"ctrTitle\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr anchor=\"b\"/><a:lstStyle><a:lvl1pPr algn=\"ctr\"><a:defRPr sz=\"6000\"/></a:lvl1pPr></a:lstStyle><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\n// subTitle for title layout\nfunction subTitlePlaceholder(id: number, x: number, y: number, cx: number, cy: number): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Subtitle 2\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"subTitle\" idx=\"1\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr marL=\"0\" indent=\"0\" algn=\"ctr\"><a:buNone/><a:defRPr sz=\"2400\"/></a:lvl1pPr></a:lstStyle><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\n// Pic placeholder\nfunction picPlaceholder(\n id: number,\n idx: number,\n x: number,\n y: number,\n cx: number,\n cy: number,\n): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Picture Placeholder ${id - 1}\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"pic\" idx=\"${idx}\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\n// ── Layout definitions (16:9 reference positions) ──\n\ninterface LayoutDef {\n type: SlideLayoutType;\n name: string;\n buildShapes: (sw: number) => string;\n}\n\nconst LAYOUT_DEFS: Record<SlideLayoutType, LayoutDef> = {\n // 1. title — ctrTitle + subTitle\n title: {\n type: \"title\",\n name: \"Title Slide\",\n buildShapes: (sw) =>\n ctrTitlePlaceholder(2, sx(1524000, sw), 1122363, sx(9144000, sw), 2387600) +\n subTitlePlaceholder(3, sx(1524000, sw), 3602038, sx(9144000, sw), 1655762),\n },\n // 2. obj — title + body (generic content)\n obj: {\n type: \"obj\",\n name: \"Title and Content\",\n buildShapes: () => titlePlaceholder(2) + bodyPlaceholder(3, 1),\n },\n // 3. secHead — title + body (both positioned)\n secHead: {\n type: \"secHead\",\n name: \"Section Header\",\n buildShapes: (sw) =>\n titlePlaceholderAt(2, sx(831850, sw), 1709738, sx(10515600, sw), 2852737) +\n typedBodyPlaceholder(3, 1, sx(831850, sw), 4589463, sx(10515600, sw), 1500187),\n },\n // 4. twoObj — title + 2 body columns\n twoObj: {\n type: \"twoObj\",\n name: \"Two Content\",\n buildShapes: (sw) =>\n titlePlaceholder(2) +\n bodyPlaceholderAt(3, 1, sx(838200, sw), 1825625, sx(5181600, sw), 4351338) +\n bodyPlaceholderAt(4, 2, sx(6172200, sw), 1825625, sx(5181600, sw), 4351338),\n },\n // 5. twoTxTwoObj — title + 4 quadrants (2 text, 2 content)\n twoTxTwoObj: {\n type: \"twoTxTwoObj\",\n name: \"Comparison\",\n buildShapes: (sw) =>\n titlePlaceholderAt(2, sx(839788, sw), 365125, sx(10515600, sw), 1325563) +\n typedBodyPlaceholder(3, 1, sx(839788, sw), 1681163, sx(5157787, sw), 823912) +\n bodyPlaceholderAt(4, 2, sx(839788, sw), 2505075, sx(5157787, sw), 3684588) +\n typedBodyPlaceholder(5, 3, sx(6172200, sw), 1681163, sx(5183188, sw), 823912) +\n bodyPlaceholderAt(6, 4, sx(6172200, sw), 2505075, sx(5183188, sw), 3684588),\n },\n // 6. titleOnly — title only\n titleOnly: {\n type: \"titleOnly\",\n name: \"Title Only\",\n buildShapes: () => titlePlaceholder(2),\n },\n // 7. blank — no content placeholders\n blank: {\n type: \"blank\",\n name: \"Blank\",\n buildShapes: () => \"\",\n },\n // 8. objTx — title + body + text (object and text)\n objTx: {\n type: \"objTx\",\n name: \"Content with Caption\",\n buildShapes: (sw) =>\n titlePlaceholderAt(2, sx(839788, sw), 457200, sx(3932237, sw), 1600200) +\n bodyPlaceholderAt(3, 1, sx(5183188, sw), 987425, sx(6172200, sw), 4873625) +\n typedBodyPlaceholder(4, 2, sx(839788, sw), 2057400, sx(3932237, sw), 3811588),\n },\n // 9. picTx — title + pic + text\n picTx: {\n type: \"picTx\",\n name: \"Picture with Caption\",\n buildShapes: (sw) =>\n titlePlaceholderAt(2, sx(839788, sw), 457200, sx(3932237, sw), 1600200) +\n picPlaceholder(3, 1, sx(5183188, sw), 987425, sx(6172200, sw), 4873625) +\n typedBodyPlaceholder(4, 2, sx(839788, sw), 2057400, sx(3932237, sw), 3811588),\n },\n // 10. vertTx — title + body (vertical text)\n vertTx: {\n type: \"vertTx\",\n name: \"Vertical Text\",\n buildShapes: () =>\n titlePlaceholder(2) +\n `<p:sp><p:nvSpPr><p:cNvPr id=\"3\" name=\"Text Placeholder 2\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"body\" idx=\"1\"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`,\n },\n // 11. vertTitleAndTx — vertical title + body\n vertTitleAndTx: {\n type: \"vertTitleAndTx\",\n name: \"Vertical Title and Text\",\n buildShapes: (sw) =>\n titlePlaceholderAt(2, sx(8724900, sw), 365125, sx(2628900, sw), 5811838) +\n typedBodyPlaceholder(3, 1, sx(838200, sw), 365125, sx(7734300, sw), 5811838),\n },\n // Aliases / simplified versions\n tx: {\n type: \"tx\",\n name: \"Title and Text\",\n buildShapes: () => titlePlaceholder(2) + bodyPlaceholder(3, 1),\n },\n chart: {\n type: \"chart\",\n name: \"Content with Caption\",\n buildShapes: () => titlePlaceholder(2) + bodyPlaceholder(3, 1),\n },\n tbl: {\n type: \"tbl\",\n name: \"Content with Caption\",\n buildShapes: () => titlePlaceholder(2) + bodyPlaceholder(3, 1),\n },\n twoColTx: {\n type: \"twoColTx\",\n name: \"Two Content\",\n buildShapes: (sw) =>\n titlePlaceholder(2) +\n bodyPlaceholderAt(3, 1, sx(838200, sw), 1825625, sx(5181600, sw), 4351338) +\n bodyPlaceholderAt(4, 2, sx(6172200, sw), 1825625, sx(5181600, sw), 4351338),\n },\n};\n\nfunction buildLayoutXml(layoutType: SlideLayoutType, slideWidth: number = SW_REF): string {\n const def = LAYOUT_DEFS[layoutType];\n const contentShapes = def.buildShapes(slideWidth);\n // Count content shapes to determine starting ID for footer placeholders\n const contentCount = contentShapes ? (contentShapes.match(/<p:sp>/g) || []).length : 0;\n const footerStartId = 2 + contentCount;\n\n const footerShapes =\n dtPlaceholder(footerStartId) +\n ftrPlaceholder(footerStartId + 1) +\n sldNumPlaceholder(footerStartId + 2);\n\n return `<p:sldLayout ${NS} type=\"${layoutType}\" preserve=\"1\"><p:cSld name=\"${def.name}\"><p:spTree>${SP_TREE_HEADER}${contentShapes}${footerShapes}</p:spTree></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>`;\n}\n\n// ── Custom layout builder ──\n\nfunction posToEmu(pos: MasterPlaceholderPosition) {\n return {\n x: convertPixelsToEmu(pos.x),\n y: convertPixelsToEmu(pos.y),\n cx: convertPixelsToEmu(pos.width),\n cy: convertPixelsToEmu(pos.height),\n };\n}\n\nfunction positionedTitlePlaceholder(\n id: number,\n x: number,\n y: number,\n cx: number,\n cy: number,\n): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Title 1\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"title\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\nfunction positionedSubtitlePlaceholder(\n id: number,\n x: number,\n y: number,\n cx: number,\n cy: number,\n): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Subtitle 2\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"subTitle\" idx=\"1\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\nfunction positionedBodyPlaceholder(\n id: number,\n idx: number,\n x: number,\n y: number,\n cx: number,\n cy: number,\n): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Content Placeholder ${id - 1}\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph idx=\"${idx}\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\nfunction positionedDatePlaceholder(\n id: number,\n x: number,\n y: number,\n cx: number,\n cy: number,\n): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Date Placeholder ${id - 1}\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"dt\" sz=\"half\" idx=\"10\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id=\"{5BCAD085-E8A6-8845-BD4E-CB4CCA059FC4}\" type=\"datetimeFigureOut\"><a:rPr lang=\"en-US\" smtClean=\"0\"/><a:t>1/27/13</a:t></a:fld><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\nfunction positionedFooterPlaceholder(\n id: number,\n x: number,\n y: number,\n cx: number,\n cy: number,\n): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Footer Placeholder ${id - 1}\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"ftr\" sz=\"quarter\" idx=\"11\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\nfunction positionedSldNumPlaceholder(\n id: number,\n x: number,\n y: number,\n cx: number,\n cy: number,\n): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Slide Number Placeholder ${id - 1}\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"sldNum\" sz=\"quarter\" idx=\"12\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id=\"{C1FF6DA9-008F-8B48-92A6-B652298478BF}\" type=\"slidenum\"><a:rPr lang=\"en-US\" smtClean=\"0\"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\nfunction buildChildrenXml(children?: readonly MasterChild[]): string {\n if (!children || children.length === 0) return \"\";\n const ctx: Context = { stack: [] };\n let result = \"\";\n for (const child of children) {\n const xmlStr = coerceMasterChild(child).toXml(ctx);\n if (xmlStr) result += xmlStr;\n }\n return result;\n}\n\nfunction buildCustomLayoutXml(def: LayoutDefinition): string {\n const ph = def.placeholders ?? {};\n const layoutType = def.type ?? \"blank\";\n const displayName = def.name ?? LAYOUT_DEFS[layoutType]?.name ?? layoutType;\n\n const shapes: string[] = [];\n let nextId = 2;\n\n // Content placeholders\n if (ph.title !== false) {\n const titlePos = ph.title ? posToEmu(ph.title) : null;\n if (titlePos) {\n shapes.push(\n positionedTitlePlaceholder(nextId++, titlePos.x, titlePos.y, titlePos.cx, titlePos.cy),\n );\n } else {\n shapes.push(titlePlaceholder(nextId++));\n }\n }\n\n if (ph.subtitle !== false && ph.subtitle !== undefined) {\n const subPos = posToEmu(ph.subtitle);\n shapes.push(positionedSubtitlePlaceholder(nextId++, subPos.x, subPos.y, subPos.cx, subPos.cy));\n }\n\n if (ph.body !== false && ph.body !== undefined) {\n const bodyPos = ph.body ? posToEmu(ph.body) : null;\n if (bodyPos) {\n shapes.push(\n positionedBodyPlaceholder(nextId++, 1, bodyPos.x, bodyPos.y, bodyPos.cx, bodyPos.cy),\n );\n } else {\n shapes.push(bodyPlaceholder(nextId++, 1));\n }\n }\n\n // Footer placeholders\n if (ph.date !== false && ph.date !== undefined) {\n const datePos = ph.date ? posToEmu(ph.date) : null;\n if (datePos) {\n shapes.push(\n positionedDatePlaceholder(nextId++, datePos.x, datePos.y, datePos.cx, datePos.cy),\n );\n } else {\n shapes.push(dtPlaceholder(nextId++));\n }\n }\n\n if (ph.footer !== false && ph.footer !== undefined) {\n const ftrPos = ph.footer ? posToEmu(ph.footer) : null;\n if (ftrPos) {\n shapes.push(positionedFooterPlaceholder(nextId++, ftrPos.x, ftrPos.y, ftrPos.cx, ftrPos.cy));\n } else {\n shapes.push(ftrPlaceholder(nextId++));\n }\n }\n\n if (ph.slideNumber !== false && ph.slideNumber !== undefined) {\n const sldPos = ph.slideNumber ? posToEmu(ph.slideNumber) : null;\n if (sldPos) {\n shapes.push(positionedSldNumPlaceholder(nextId++, sldPos.x, sldPos.y, sldPos.cx, sldPos.cy));\n } else {\n shapes.push(sldNumPlaceholder(nextId++));\n }\n }\n\n // Children shapes — shift ids\n const childrenXml = buildChildrenXml(def.children);\n if (childrenXml) {\n const offset = nextId - 1;\n shapes.push(childrenXml.replace(/ id=\"(\\d+)\"/g, (_, n) => ` id=\"${parseInt(n) + offset}\"`));\n }\n\n return `<p:sldLayout ${NS} type=\"${layoutType}\" preserve=\"1\"><p:cSld name=\"${displayName}\"><p:spTree>${SP_TREE_HEADER}${shapes.join(\"\")}</p:spTree></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>`;\n}\n\nexport class SlideLayout extends ImportedXmlComponent {\n private static cache = new Map<string, ImportedXmlComponent>();\n public readonly layoutType: SlideLayoutType;\n private readonly cacheKey: string;\n\n public constructor(\n layoutType: SlideLayoutType = \"blank\",\n slideWidth: number = SW_REF,\n definition?: LayoutDefinition,\n ) {\n super(\"p:sldLayout\");\n this.layoutType = layoutType;\n\n const hasCustom =\n definition &&\n (definition.placeholders !== undefined ||\n (definition.children !== undefined && definition.children.length > 0));\n\n if (hasCustom) {\n // Custom layouts are not cached (may contain dynamic children)\n this.cacheKey = `custom:${layoutType}:${slideWidth}:${Date.now()}:${Math.random()}`;\n SlideLayout.cache.set(\n this.cacheKey,\n ImportedXmlComponent.fromXmlString(buildCustomLayoutXml(definition!)),\n );\n } else {\n this.cacheKey = `${layoutType}:${slideWidth}`;\n if (!SlideLayout.cache.has(this.cacheKey)) {\n SlideLayout.cache.set(\n this.cacheKey,\n ImportedXmlComponent.fromXmlString(buildLayoutXml(layoutType, slideWidth)),\n );\n }\n }\n }\n\n public override toXml(context: Context): string {\n return SlideLayout.cache.get(this.cacheKey)!.toXml(context);\n }\n}\n\nexport class DefaultSlideLayout extends SlideLayout {\n public constructor() {\n super(\"blank\");\n }\n}\n","import type { BackgroundOptions } from \"@file/background/background\";\nimport type { MasterChild } from \"@file/file\";\nimport type { SlideHeaderFooterOptions } from \"@file/header-footer/header-footer\";\nimport { coerceMasterChild } from \"@file/slide/coerce\";\nimport type { Context } from \"@file/xml-components\";\nimport { ImportedXmlComponent } from \"@file/xml-components\";\nimport { convertPixelsToEmu } from \"@office-open/core\";\n\nexport interface MasterPlaceholderPosition {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n}\n\nexport interface MasterPlaceholderOptions {\n readonly title?: boolean | MasterPlaceholderPosition;\n readonly body?: boolean | MasterPlaceholderPosition;\n readonly date?: boolean | MasterPlaceholderPosition;\n readonly footer?: boolean | MasterPlaceholderPosition;\n readonly slideNumber?: boolean | MasterPlaceholderPosition;\n}\n\nexport interface SlideMasterOptions {\n readonly background?: BackgroundOptions;\n readonly children?: readonly MasterChild[];\n readonly placeholders?: MasterPlaceholderOptions;\n}\n\n// Reference positions (16:9 master, slideWidth = 12192000 EMU)\nconst SW_REF = 12192000;\nconst sx = (refX: number, sw: number) => Math.round((refX * sw) / SW_REF);\n\nconst REF_TITLE = { x: 838200, y: 365125, cx: 10515600, cy: 1325563 };\nconst REF_BODY = { x: 838200, y: 1825625, cx: 10515600, cy: 4351338 };\nconst REF_DATE = { x: 838200, y: 6356350, cx: 2743200, cy: 365125 };\nconst REF_FOOTER = { x: 4038600, y: 6356350, cx: 4114800, cy: 365125 };\nconst REF_SLDNUM = { x: 8610600, y: 6356350, cx: 2743200, cy: 365125 };\n\nfunction toEmu(pos: MasterPlaceholderPosition) {\n return {\n x: convertPixelsToEmu(pos.x),\n y: convertPixelsToEmu(pos.y),\n cx: convertPixelsToEmu(pos.width),\n cy: convertPixelsToEmu(pos.height),\n };\n}\n\nfunction resolvePos(\n opt: boolean | MasterPlaceholderPosition | undefined,\n ref: { x: number; y: number; cx: number; cy: number },\n): { x: number; y: number; cx: number; cy: number } | null {\n if (opt === false) return null;\n if (opt === undefined || opt === true) return ref;\n return toEmu(opt);\n}\n\nfunction phSp(\n id: number,\n name: string,\n phAttrs: string,\n x: number,\n y: number,\n cx: number,\n cy: number,\n bodyContent: string,\n): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"${name}\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph ${phAttrs}/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></p:spPr><p:txBody>${bodyContent}</p:txBody></p:sp>`;\n}\n\nconst BODY_DEFAULT = `<a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p>`;\n\nfunction footerBody(algn: string, fldType: string, fldId: string, fldText: string): string {\n const fld =\n fldType && fldId\n ? `<a:fld id=\"${fldId}\" type=\"${fldType}\"><a:rPr lang=\"en-US\" smtClean=\"0\"/><a:t>${fldText}</a:t></a:fld>`\n : \"\";\n return `<a:bodyPr/><a:lstStyle><a:lvl1pPr algn=\"${algn}\"><a:defRPr sz=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"><a:tint val=\"75000\"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl1pPr></a:lstStyle><a:p>${fld}<a:endParaRPr lang=\"en-US\"/></a:p>`;\n}\n\nfunction buildBackgroundXml(bg?: BackgroundOptions): string {\n if (!bg) return `<p:bgRef idx=\"1001\"><a:schemeClr val=\"bg1\"/></p:bgRef>`;\n const { Background } = require(\"@file/background/background\") as {\n Background: new (o?: BackgroundOptions) => { toXml(ctx: Context): string };\n };\n const bgObj = new Background(bg);\n const full = bgObj.toXml({ stack: [] } as Context);\n // Strip the outer <p:bg> since the caller already provides the wrapper.\n return full.replace(/^<p:bg[^>]*>/, \"\").replace(/<\\/p:bg>$/, \"\");\n}\n\nfunction buildChildrenXml(children?: readonly MasterChild[]): string {\n if (!children || children.length === 0) return \"\";\n const ctx: Context = { stack: [] };\n let result = \"\";\n for (const child of children) {\n const xmlStr = coerceMasterChild(child).toXml(ctx);\n if (xmlStr) result += xmlStr;\n }\n return result;\n}\n\nfunction buildSlideMasterXml(\n layoutCount: number,\n _headerFooter?: SlideHeaderFooterOptions,\n masterOptions?: SlideMasterOptions,\n slideWidth: number = SW_REF,\n masterIndex: number = 0,\n): string {\n const hfXml = `<p:hf dt=\"0\" hdr=\"0\" ftr=\"0\" sldNum=\"0\"/>`;\n const ph = masterOptions?.placeholders ?? {};\n\n // Layout IDs must be globally unique across all masters.\n // Master ID = 2147483648 + masterIndex * 12; layouts start at masterId + 1.\n const layoutIdBase = 2147483648 + masterIndex * 12 + 1;\n const layoutIdEntries: string[] = [];\n for (let i = 0; i < layoutCount; i++) {\n layoutIdEntries.push(`<p:sldLayoutId id=\"${layoutIdBase + i}\" r:id=\"rId${i + 1}\"/>`);\n }\n\n // Scaled reference positions (x/cx scaled, y/cy fixed)\n const sRef = (r: { x: number; y: number; cx: number; cy: number }) => ({\n x: sx(r.x, slideWidth),\n y: r.y,\n cx: sx(r.cx, slideWidth),\n cy: r.cy,\n });\n\n // Build placeholders\n const shapes: string[] = [];\n let nextId = 2;\n\n const titlePos = resolvePos(ph.title, sRef(REF_TITLE));\n if (titlePos) {\n shapes.push(\n phSp(\n nextId++,\n \"Title Placeholder 1\",\n 'type=\"title\"',\n titlePos.x,\n titlePos.y,\n titlePos.cx,\n titlePos.cy,\n BODY_DEFAULT,\n ),\n );\n }\n\n const bodyPos = resolvePos(ph.body, sRef(REF_BODY));\n if (bodyPos) {\n shapes.push(\n phSp(\n nextId++,\n \"Text Placeholder 2\",\n 'type=\"body\" idx=\"1\"',\n bodyPos.x,\n bodyPos.y,\n bodyPos.cx,\n bodyPos.cy,\n BODY_DEFAULT,\n ),\n );\n }\n\n const datePos = resolvePos(ph.date, sRef(REF_DATE));\n if (datePos) {\n shapes.push(\n phSp(\n nextId++,\n \"Date Placeholder 3\",\n 'type=\"dt\" sz=\"half\" idx=\"2\"',\n datePos.x,\n datePos.y,\n datePos.cx,\n datePos.cy,\n footerBody(\"l\", \"datetimeFigureOut\", \"{5BCAD085-E8A6-8845-BD4E-CB4CCA059FC4}\", \"1/27/13\"),\n ),\n );\n }\n\n const footerPos = resolvePos(ph.footer, sRef(REF_FOOTER));\n if (footerPos) {\n shapes.push(\n phSp(\n nextId++,\n \"Footer Placeholder 4\",\n 'type=\"ftr\" sz=\"quarter\" idx=\"3\"',\n footerPos.x,\n footerPos.y,\n footerPos.cx,\n footerPos.cy,\n footerBody(\"ctr\", \"\", \"\", \"\"),\n ),\n );\n }\n\n const sldNumPos = resolvePos(ph.slideNumber, sRef(REF_SLDNUM));\n if (sldNumPos) {\n shapes.push(\n phSp(\n nextId++,\n \"Slide Number Placeholder 5\",\n 'type=\"sldNum\" sz=\"quarter\" idx=\"4\"',\n sldNumPos.x,\n sldNumPos.y,\n sldNumPos.cx,\n sldNumPos.cy,\n footerBody(\"r\", \"slidenum\", \"{C1FF6DA9-008F-8B48-92A6-B652298478BF}\", \"‹#›\"),\n ),\n );\n }\n\n // Custom children shapes — shift ids to avoid conflicts with placeholder ids\n const childrenXml = buildChildrenXml(masterOptions?.children);\n if (childrenXml) {\n const offset = nextId - 1;\n shapes.push(childrenXml.replace(/ id=\"(\\d+)\"/g, (_, n) => ` id=\"${parseInt(n) + offset}\"`));\n }\n\n // Background\n const bgInnerXml = buildBackgroundXml(masterOptions?.background);\n\n return `<p:sldMaster xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"><p:cSld><p:bg>${bgInnerXml}</p:bg><p:spTree><p:nvGrpSpPr><p:cNvPr id=\"1\" name=\"\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/><a:chOff x=\"0\" y=\"0\"/><a:chExt cx=\"0\" cy=\"0\"/></a:xfrm></p:grpSpPr>${shapes.join(\"\")}</p:spTree></p:cSld><p:clrMap bg1=\"lt1\" tx1=\"dk1\" bg2=\"lt2\" tx2=\"dk2\" accent1=\"accent1\" accent2=\"accent2\" accent3=\"accent3\" accent4=\"accent4\" accent5=\"accent5\" accent6=\"accent6\" hlink=\"hlink\" folHlink=\"folHlink\"/><p:sldLayoutIdLst>${layoutIdEntries.join(\"\")}</p:sldLayoutIdLst>${hfXml}<p:txStyles><p:titleStyle><a:lvl1pPr algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc><a:spcBef><a:spcPct val=\"0\"/></a:spcBef><a:buNone/><a:defRPr sz=\"4400\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mj-lt\"/><a:ea typeface=\"+mj-ea\"/><a:cs typeface=\"+mj-cs\"/></a:defRPr></a:lvl1pPr></p:titleStyle><p:bodyStyle><a:lvl1pPr marL=\"228600\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc><a:spcBef><a:spcPct val=\"0\"/></a:spcBef><a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"•\"/><a:defRPr sz=\"2800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl1pPr><a:lvl2pPr marL=\"685800\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc><a:spcBef><a:spcPts val=\"500\"/></a:spcBef><a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"•\"/><a:defRPr sz=\"2400\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl2pPr><a:lvl3pPr marL=\"1143000\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc><a:spcBef><a:spcPts val=\"500\"/></a:spcBef><a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"•\"/><a:defRPr sz=\"2000\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl3pPr><a:lvl4pPr marL=\"1600200\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc><a:spcBef><a:spcPts val=\"500\"/></a:spcBef><a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"•\"/><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl4pPr><a:lvl5pPr marL=\"2057400\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc><a:spcBef><a:spcPts val=\"500\"/></a:spcBef><a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"•\"/><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl5pPr><a:lvl6pPr marL=\"2514600\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc><a:spcBef><a:spcPts val=\"500\"/></a:spcBef><a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"•\"/><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl6pPr><a:lvl7pPr marL=\"2971800\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc><a:spcBef><a:spcPts val=\"500\"/></a:spcBef><a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"•\"/><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl7pPr><a:lvl8pPr marL=\"3429000\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc><a:spcBef><a:spcPts val=\"500\"/></a:spcBef><a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"•\"/><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl8pPr><a:lvl9pPr marL=\"3886200\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc><a:spcBef><a:spcPts val=\"500\"/></a:spcBef><a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"•\"/><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl9pPr></p:bodyStyle><p:otherStyle><a:defPPr><a:defRPr/></a:defPPr><a:lvl1pPr marL=\"0\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl1pPr><a:lvl2pPr marL=\"457200\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl2pPr><a:lvl3pPr marL=\"914400\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl3pPr><a:lvl4pPr marL=\"1371600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl4pPr><a:lvl5pPr marL=\"1828800\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl5pPr><a:lvl6pPr marL=\"2286000\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl6pPr><a:lvl7pPr marL=\"2743200\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl7pPr><a:lvl8pPr marL=\"3200400\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl8pPr><a:lvl9pPr marL=\"3657600\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl9pPr></p:otherStyle></p:txStyles></p:sldMaster>`;\n}\n\nexport class DefaultSlideMaster extends ImportedXmlComponent {\n private static cache = new Map<string, ImportedXmlComponent>();\n private readonly cacheKey: string;\n\n public constructor(\n layoutCount: number = 1,\n headerFooter?: SlideHeaderFooterOptions,\n masterOptions?: SlideMasterOptions,\n slideWidth: number = SW_REF,\n masterIndex: number = 0,\n ) {\n super(\"p:sldMaster\");\n this.cacheKey = `${layoutCount}:${masterOptions ? JSON.stringify(masterOptions) : \"\"}:${slideWidth}:${masterIndex}`;\n if (!DefaultSlideMaster.cache.has(this.cacheKey)) {\n DefaultSlideMaster.cache.set(\n this.cacheKey,\n ImportedXmlComponent.fromXmlString(\n buildSlideMasterXml(layoutCount, headerFooter, masterOptions, slideWidth, masterIndex),\n ),\n );\n }\n }\n\n public override toXml(context: Context): string {\n return DefaultSlideMaster.cache.get(this.cacheKey)!.toXml(context);\n }\n}\n","import { BuilderElement, XmlComponent, stringContainerObj } from \"@file/xml-components\";\n\nimport type {\n AnimationClass,\n AnimationType,\n EmphasisType,\n AnimationOptions,\n PathAnimationType,\n} from \"./types\";\n\n// --- Preset ID mappings ---\n\nconst ENTR_PRESET_IDS: Record<AnimationType, number> = {\n appear: 1,\n fade: 10,\n fly: 2,\n wipe: 22,\n dissolve: 34,\n split: 21,\n blinds: 25,\n checker: 26,\n randomBars: 24,\n wheel: 27,\n zoom: 10,\n cover: 28,\n push: 19,\n strips: 23,\n};\n\nconst EXIT_PRESET_IDS: Record<AnimationType, number> = {\n appear: 53,\n fade: 59,\n fly: 51,\n wipe: 72,\n dissolve: 84,\n split: 71,\n blinds: 75,\n checker: 76,\n randomBars: 74,\n wheel: 77,\n zoom: 60,\n cover: 78,\n push: 69,\n strips: 73,\n};\n\nconst EMPH_PRESET_IDS: Record<EmphasisType, number> = {\n growShrink: 53,\n spin: 54,\n growWithTurn: 56,\n colorChange: 29,\n transparency: 57,\n boldFlash: 50,\n wave: 55,\n pulse: 58,\n};\n\nconst PATH_PRESET_IDS: Record<PathAnimationType, number> = {\n customPath: 200,\n arc: 201,\n bounce: 202,\n circle: 203,\n curve: 204,\n figureEight: 205,\n line: 206,\n loop: 207,\n};\n\nconst DIRECTION_SUBTYPES: Record<string, number> = {\n left: 4,\n right: 8,\n up: 2,\n down: 1,\n horizontal: 16,\n vertical: 32,\n};\n\nconst FILTER_MAP: Record<string, string> = {\n fade: \"fade\",\n fly: \"fly\",\n wipe: \"wipe\",\n dissolve: \"dissolve\",\n split: \"split\",\n blinds: \"blinds\",\n checker: \"checkerboard\",\n randomBars: \"randombars\",\n wheel: \"wheel\",\n zoom: \"zoom\",\n cover: \"cover\",\n push: \"push\",\n strips: \"strips\",\n};\n\nconst DIRECTION_FILTER: Record<string, Record<string, string>> = {\n fly: { left: \"fromLeft\", right: \"fromRight\", up: \"fromTop\", down: \"fromBottom\" },\n wipe: { left: \"right\", right: \"left\", up: \"down\", down: \"up\" },\n split: { horizontal: \"horizontal\", vertical: \"vertical\" },\n blinds: { horizontal: \"horizontal\", vertical: \"vertical\" },\n checker: { horizontal: \"horizontal\", vertical: \"vertical\" },\n randomBars: { horizontal: \"horizontal\", vertical: \"vertical\" },\n cover: { left: \"left\", right: \"right\", up: \"top\", down: \"bottom\" },\n push: { left: \"left\", right: \"right\", up: \"top\", down: \"bottom\" },\n strips: {\n left: \"fromBottomLeft\",\n right: \"fromTopRight\",\n up: \"fromBottomRight\",\n down: \"fromTopLeft\",\n },\n wheel: {},\n};\n\nconst PATH_STRINGS: Record<PathAnimationType, string> = {\n customPath: \"\",\n arc: \"M 0 0 C 50 -100 100 -100 150 0\",\n bounce: \"M 0 0 L 50 0 C 50 -30 30 -50 0 -50 C -30 -50 -50 -30 -50 0 L 50 0\",\n circle: \"M 0 0 C 50 -50 100 0 50 50 C 0 100 -50 50 0 0\",\n curve: \"M 0 0 C 50 -80 100 -80 150 0 C 200 80 250 80 300 0\",\n figureEight:\n \"M 0 0 C 50 -50 100 0 50 50 C 0 100 -50 50 0 0 C -50 -50 -100 0 -50 50 C 0 100 50 50 0 0\",\n line: \"M 0 0 L 200 0\",\n loop: \"M 0 0 C 50 -80 100 0 50 80 C 0 160 -50 80 0 0\",\n};\n\n// --- Helper functions ---\n\nfunction resolvePresetId(options: AnimationOptions): number {\n if (options.mediaType) return 1;\n if (options.attributeName) return 0;\n const cls: AnimationClass = options.class ?? \"entr\";\n\n if (cls === \"emph\" && options.emphasisType) {\n return EMPH_PRESET_IDS[options.emphasisType] ?? 0;\n }\n\n if (options.pathType) {\n return PATH_PRESET_IDS[options.pathType] ?? 200;\n }\n\n const type = options.type ?? \"appear\";\n const map = cls === \"exit\" ? EXIT_PRESET_IDS : ENTR_PRESET_IDS;\n return map[type] ?? 0;\n}\n\nfunction resolvePresetClass(options: AnimationOptions): AnimationClass {\n if (options.mediaType) return \"mediacall\";\n if (options.attributeName) return \"entr\";\n if (options.pathType) return \"emph\";\n return options.class ?? \"entr\";\n}\n\nfunction resolvePresetSubtype(options: AnimationOptions): number {\n if (options.direction) {\n return DIRECTION_SUBTYPES[options.direction] ?? 0;\n }\n return 0;\n}\n\nfunction buildTargetElement(spid: number, options?: AnimationOptions): XmlComponent {\n const spTgtChildren: XmlComponent[] = [];\n if (options?.charRange) {\n spTgtChildren.push(\n new BuilderElement({\n name: \"p:txEl\",\n children: [\n new BuilderElement({\n name: \"p:charRg\",\n attributes: {\n st: { key: \"st\", value: options.charRange[0] },\n end: { key: \"end\", value: options.charRange[1] },\n },\n }),\n ],\n }),\n );\n } else if (options?.paragraphRange) {\n spTgtChildren.push(\n new BuilderElement({\n name: \"p:txEl\",\n children: [\n new BuilderElement({\n name: \"p:pRg\",\n attributes: {\n st: { key: \"st\", value: options.paragraphRange[0] },\n end: { key: \"end\", value: options.paragraphRange[1] },\n },\n }),\n ],\n }),\n );\n }\n\n return new BuilderElement({\n name: \"p:tgtEl\",\n children: [\n new BuilderElement({\n name: \"p:spTgt\",\n attributes: { spid: { key: \"spid\", value: spid } },\n children: spTgtChildren.length > 0 ? spTgtChildren : undefined,\n }),\n ],\n });\n}\n\nfunction buildEntrOrExitEffects(\n options: AnimationOptions,\n spid: number,\n ids: { set: number; effect: number },\n): XmlComponent[] {\n const children: XmlComponent[] = [];\n\n // p:set — make shape visible (entr) or hidden (exit)\n const cls = options.class ?? \"entr\";\n const visibility = cls === \"exit\" ? \"hidden\" : \"visible\";\n children.push(\n new BuilderElement({\n name: \"p:set\",\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.set },\n dur: { key: \"dur\", value: \"1\" },\n fill: { key: \"fill\", value: \"hold\" },\n },\n children: [\n new BuilderElement({\n name: \"p:stCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: { delay: { key: \"delay\", value: \"0\" } },\n }),\n ],\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:tgtEl\",\n children: [\n new BuilderElement({\n name: \"p:spTgt\",\n attributes: { spid: { key: \"spid\", value: spid } },\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:attrNameLst\",\n children: [stringContainerObj(\"p:attrName\", \"style.visibility\")],\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:to\",\n children: [\n new BuilderElement({\n name: \"p:strVal\",\n attributes: { val: { key: \"val\", value: visibility } },\n }),\n ],\n }),\n ],\n }),\n );\n\n // p:animEffect for non-appear types\n if (options.type !== \"appear\") {\n const filterBase = FILTER_MAP[options.type ?? \"fade\"];\n const dirMap = DIRECTION_FILTER[options.type ?? \"fade\"];\n const dirFilter = options.direction && dirMap ? dirMap[options.direction] : undefined;\n\n let filter = filterBase;\n if (options.type === \"wheel\") {\n filter = \"wheel(4)\";\n } else if (options.type === \"split\") {\n const dir = options.direction ?? \"horizontal\";\n filter = `split(${dir})`;\n } else if (dirFilter) {\n filter = `${filterBase}(${dirFilter})`;\n }\n\n const transition = cls === \"exit\" ? \"out\" : \"in\";\n\n children.push(\n new BuilderElement({\n name: \"p:animEffect\",\n attributes: {\n transition: { key: \"transition\", value: transition },\n filter: { key: \"filter\", value: filter },\n },\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.effect },\n dur: { key: \"dur\", value: String(options.duration ?? 500) },\n fill: { key: \"fill\", value: \"hold\" },\n },\n }),\n new BuilderElement({\n name: \"p:tgtEl\",\n children: [\n new BuilderElement({\n name: \"p:spTgt\",\n attributes: { spid: { key: \"spid\", value: spid } },\n }),\n ],\n }),\n ],\n }),\n ],\n }),\n );\n }\n\n return children;\n}\n\nfunction buildEmphasisEffects(\n options: AnimationOptions,\n spid: number,\n ids: { set: number; effect: number },\n): XmlComponent[] {\n const emphType = options.emphasisType ?? \"growShrink\";\n const children: XmlComponent[] = [];\n const dur = String(options.duration ?? 500);\n\n // Common target element\n const tgtEl = new BuilderElement({\n name: \"p:tgtEl\",\n children: [\n new BuilderElement({\n name: \"p:spTgt\",\n attributes: { spid: { key: \"spid\", value: spid } },\n }),\n ],\n });\n\n switch (emphType) {\n case \"growShrink\":\n children.push(\n new BuilderElement({\n name: \"p:animScale\",\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.effect },\n dur: { key: \"dur\", value: dur },\n fill: { key: \"fill\", value: \"hold\" },\n ...(options.autoReverse ? { autoRev: { key: \"autoRev\", value: 1 } } : {}),\n },\n children: [\n new BuilderElement({\n name: \"p:stCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: {\n delay: { key: \"delay\", value: \"0\" },\n },\n }),\n ],\n }),\n ],\n }),\n tgtEl,\n ],\n }),\n new BuilderElement({\n name: \"p:by\",\n attributes: {\n x: { key: \"x\", value: \"150000\" },\n y: { key: \"y\", value: \"150000\" },\n },\n }),\n ],\n }),\n );\n break;\n\n case \"spin\":\n children.push(\n new BuilderElement({\n name: \"p:animRot\",\n attributes: { by: { key: \"by\", value: \"3600000\" } },\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.effect },\n dur: { key: \"dur\", value: dur },\n fill: { key: \"fill\", value: \"hold\" },\n },\n children: [\n new BuilderElement({\n name: \"p:stCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: {\n delay: { key: \"delay\", value: \"0\" },\n },\n }),\n ],\n }),\n ],\n }),\n tgtEl,\n ],\n }),\n ],\n }),\n );\n break;\n\n case \"colorChange\": {\n const color = options.color ?? \"FF0000\";\n children.push(\n new BuilderElement({\n name: \"p:animClr\",\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.effect },\n dur: { key: \"dur\", value: dur },\n fill: { key: \"fill\", value: \"hold\" },\n },\n children: [\n new BuilderElement({\n name: \"p:stCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: {\n delay: { key: \"delay\", value: \"0\" },\n },\n }),\n ],\n }),\n ],\n }),\n tgtEl,\n ],\n }),\n new BuilderElement({\n name: \"p:to\",\n children: [\n new BuilderElement({\n name: \"a:srgbClr\",\n attributes: { val: { key: \"val\", value: color } },\n }),\n ],\n }),\n ],\n }),\n );\n break;\n }\n\n case \"transparency\":\n children.push(\n new BuilderElement({\n name: \"p:anim\",\n attributes: {\n calcmode: { key: \"calcmode\", value: \"lin\" },\n valueType: { key: \"valueType\", value: \"num\" },\n from: { key: \"from\", value: \"0\" },\n to: { key: \"to\", value: \"1\" },\n },\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.effect },\n dur: { key: \"dur\", value: dur },\n fill: { key: \"fill\", value: \"hold\" },\n },\n }),\n tgtEl,\n new BuilderElement({\n name: \"p:attrNameLst\",\n children: [stringContainerObj(\"p:attrName\", \"style.opacity\")],\n }),\n ],\n }),\n ],\n }),\n );\n break;\n\n default:\n // boldFlash, wave, pulse, growWithTurn — use p:animEffect with emph filter\n children.push(\n new BuilderElement({\n name: \"p:animEffect\",\n attributes: {\n transition: { key: \"transition\", value: \"in\" },\n filter: { key: \"filter\", value: emphType },\n },\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.effect },\n dur: { key: \"dur\", value: dur },\n fill: { key: \"fill\", value: \"hold\" },\n },\n }),\n tgtEl,\n ],\n }),\n ],\n }),\n );\n break;\n }\n\n return children;\n}\n\nfunction buildPathEffects(\n options: AnimationOptions,\n spid: number,\n ids: { set: number; effect: number },\n): XmlComponent[] {\n const pathStr = options.path ?? PATH_STRINGS[options.pathType ?? \"customPath\"] ?? \"\";\n const dur = String(options.duration ?? 1000);\n\n return [\n new BuilderElement({\n name: \"p:animMotion\",\n attributes: {\n origin: { key: \"origin\", value: \"layout\" },\n path: { key: \"path\", value: pathStr },\n },\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.effect },\n dur: { key: \"dur\", value: dur },\n fill: { key: \"fill\", value: \"hold\" },\n },\n children: [\n new BuilderElement({\n name: \"p:stCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: { delay: { key: \"delay\", value: \"0\" } },\n }),\n ],\n }),\n ],\n }),\n buildTargetElement(spid, options),\n ],\n }),\n ],\n }),\n ];\n}\n\n/**\n * Build p:cmd for media play/pause/stop (goes inside the animation sequence).\n * PowerPoint uses p:cmd type=\"call\" cmd=\"playFrom(0.0)\" for video play.\n */\nfunction buildMediaPlayCommand(\n options: AnimationOptions,\n spid: number,\n ids: { cmd: number },\n): XmlComponent {\n const cmdStr = options.fullScreen ? \"playFrom(0.0,1.0)\" : \"playFrom(0.0)\";\n\n return new BuilderElement({\n name: \"p:cmd\",\n attributes: {\n type: { key: \"type\", value: \"call\" },\n cmd: { key: \"cmd\", value: cmdStr },\n },\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.cmd },\n dur: { key: \"dur\", value: String(options.duration ?? 10000) },\n fill: { key: \"fill\", value: \"hold\" },\n },\n }),\n buildTargetElement(spid),\n ],\n }),\n ],\n });\n}\n\n/**\n * Build p:video/p:audio with p:cMediaNode (goes as sibling of p:seq).\n * This is the media state controller, separate from the play command.\n */\nfunction buildMediaStateNode(\n options: AnimationOptions,\n spid: number,\n ids: { mediaCtn: number },\n): XmlComponent {\n const isVideo = options.mediaType === \"playVideo\";\n const elementName = isVideo ? \"p:video\" : \"p:audio\";\n\n const mediaAttrs: Record<string, { key: string; value: string | number | boolean }> = {};\n if (!isVideo && options.isNarration) {\n mediaAttrs.isNarration = { key: \"isNarration\", value: true };\n }\n if (isVideo && options.fullScreen) {\n mediaAttrs.fullScrn = { key: \"fullScrn\", value: true };\n }\n\n const cMediaNodeAttrs: Record<string, { key: string; value: string | number }> = {};\n if (options.volume !== undefined) {\n cMediaNodeAttrs.vol = { key: \"vol\", value: options.volume * 1000 };\n } else {\n cMediaNodeAttrs.vol = { key: \"vol\", value: 80000 };\n }\n if (options.mute) {\n cMediaNodeAttrs.mute = { key: \"mute\", value: 1 };\n }\n\n return new BuilderElement({\n name: elementName,\n attributes: Object.keys(mediaAttrs).length > 0 ? mediaAttrs : undefined,\n children: [\n new BuilderElement({\n name: \"p:cMediaNode\",\n attributes: cMediaNodeAttrs,\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.mediaCtn },\n fill: { key: \"fill\", value: \"hold\" },\n display: { key: \"display\", value: \"0\" },\n },\n children: [\n new BuilderElement({\n name: \"p:stCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: {\n delay: { key: \"delay\", value: \"indefinite\" },\n },\n }),\n ],\n }),\n ],\n }),\n buildTargetElement(spid),\n ],\n }),\n ],\n });\n}\n\nfunction buildPropertyAnimation(\n options: AnimationOptions,\n spid: number,\n ids: { cBhvr: number },\n): XmlComponent {\n const attrs: Record<string, { key: string; value: string }> = {};\n if (options.calcMode) attrs.calcmode = { key: \"calcmode\", value: options.calcMode };\n if (options.valueType) attrs.valueType = { key: \"valueType\", value: options.valueType };\n if (options.from !== undefined) attrs.from = { key: \"from\", value: options.from };\n if (options.to !== undefined) attrs.to = { key: \"to\", value: options.to };\n if (options.animBy !== undefined) attrs.by = { key: \"by\", value: options.animBy };\n\n const cBhvrChildren: XmlComponent[] = [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.cBhvr },\n dur: { key: \"dur\", value: String(options.duration ?? 500) },\n fill: { key: \"fill\", value: \"hold\" },\n },\n }),\n buildTargetElement(spid, options),\n ];\n\n if (options.attributeName) {\n cBhvrChildren.push(\n new BuilderElement({\n name: \"p:attrNameLst\",\n children: [stringContainerObj(\"p:attrName\", options.attributeName)],\n }),\n );\n }\n\n const animChildren: XmlComponent[] = [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: cBhvrChildren,\n }),\n ];\n\n // Build tavLst if from/to are specified\n if (options.from !== undefined || options.to !== undefined) {\n const tavList: XmlComponent[] = [];\n if (options.from !== undefined) {\n tavList.push(\n new BuilderElement({\n name: \"p:tav\",\n attributes: { tm: { key: \"tm\", value: \"0\" } },\n children: [\n new BuilderElement({\n name: \"p:val\",\n children: [\n new BuilderElement({\n name: \"p:strVal\",\n attributes: { val: { key: \"val\", value: options.from } },\n }),\n ],\n }),\n ],\n }),\n );\n }\n if (options.to !== undefined) {\n tavList.push(\n new BuilderElement({\n name: \"p:tav\",\n attributes: { tm: { key: \"tm\", value: \"100000\" } },\n children: [\n new BuilderElement({\n name: \"p:val\",\n children: [\n new BuilderElement({\n name: \"p:strVal\",\n attributes: { val: { key: \"val\", value: options.to } },\n }),\n ],\n }),\n ],\n }),\n );\n }\n if (tavList.length > 0) {\n animChildren.push(\n new BuilderElement({\n name: \"p:tavLst\",\n children: tavList,\n }),\n );\n }\n }\n\n return new BuilderElement({\n name: \"p:anim\",\n attributes: Object.keys(attrs).length > 0 ? attrs : undefined,\n children: animChildren,\n });\n}\n\n// --- Main class ---\n\ninterface AnimationEntry {\n readonly spid: number;\n readonly options: AnimationOptions;\n}\n\n/**\n * p:timing — Slide timing for shape animations.\n */\nexport class SlideTiming extends XmlComponent {\n public constructor(entries: readonly AnimationEntry[]) {\n super(\"p:timing\");\n\n if (entries.length === 0) return;\n\n let id = 1;\n const rootCtnId = id++;\n const seqCtnId = id++;\n\n const animationNodes: XmlComponent[] = [];\n const mediaStateNodes: XmlComponent[] = [];\n let clickGroupDelay = 0;\n\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n const { spid, options } = entry;\n\n const nodeType =\n options.trigger === \"withPrevious\"\n ? \"withEffect\"\n : options.trigger === \"afterPrevious\"\n ? \"afterEffect\"\n : \"clickEffect\";\n\n if (options.trigger === \"afterPrevious\" && i > 0) {\n clickGroupDelay += (options.duration ?? 500) + (options.delay ?? 0);\n }\n if (options.trigger === \"onClick\" || options.trigger === undefined) {\n clickGroupDelay = 0;\n }\n\n const groupCtnId = id++;\n const effectCtnId = id++;\n const setCtnId = id++;\n const effectCtnId2 = id++;\n\n const presetId = resolvePresetId(options);\n const presetClass = resolvePresetClass(options);\n const presetSubtype = resolvePresetSubtype(options);\n\n // Build effect children based on animation class\n let effectChildren: XmlComponent[];\n\n if (options.mediaType) {\n effectChildren = [buildMediaPlayCommand(options, spid, { cmd: effectCtnId2 })];\n // Generate media state node (p:video/p:audio) as sibling of p:seq\n const mediaStateId = id++;\n mediaStateNodes.push(buildMediaStateNode(options, spid, { mediaCtn: mediaStateId }));\n } else if (options.attributeName) {\n effectChildren = [buildPropertyAnimation(options, spid, { cBhvr: effectCtnId2 })];\n } else if (options.pathType) {\n effectChildren = buildPathEffects(options, spid, {\n set: setCtnId,\n effect: effectCtnId2,\n });\n } else if (presetClass === \"emph\") {\n effectChildren = buildEmphasisEffects(options, spid, {\n set: setCtnId,\n effect: effectCtnId2,\n });\n } else {\n effectChildren = buildEntrOrExitEffects(options, spid, {\n set: setCtnId,\n effect: effectCtnId2,\n });\n }\n\n // Build cTn attributes with optional speed/repeatCount/autoReverse\n const cTnAttrs: Record<string, { key: string; value: string | number }> = {\n id: { key: \"id\", value: effectCtnId },\n fill: { key: \"fill\", value: \"hold\" },\n nodeType: { key: \"nodeType\", value: nodeType },\n };\n if (!options.mediaType && !options.attributeName) {\n cTnAttrs.presetID = { key: \"presetID\", value: presetId };\n cTnAttrs.presetClass = { key: \"presetClass\", value: presetClass };\n cTnAttrs.presetSubtype = { key: \"presetSubtype\", value: presetSubtype };\n }\n if (options.mediaType) {\n cTnAttrs.presetID = { key: \"presetID\", value: presetId };\n cTnAttrs.presetClass = { key: \"presetClass\", value: presetClass };\n cTnAttrs.presetSubtype = { key: \"presetSubtype\", value: presetSubtype };\n }\n if (options.speed !== undefined) cTnAttrs.spd = { key: \"spd\", value: String(options.speed) };\n if (options.repeatCount !== undefined)\n cTnAttrs.repeatCount = { key: \"repeatCount\", value: String(options.repeatCount) };\n if (options.autoReverse) cTnAttrs.autoRev = { key: \"autoRev\", value: 1 };\n\n // Build effect cTn\n const effectCtn = new BuilderElement({\n name: \"p:cTn\",\n attributes: cTnAttrs,\n children: [\n new BuilderElement({\n name: \"p:stCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: {\n delay: { key: \"delay\", value: String(options.delay ?? 0) },\n },\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:childTnLst\",\n children: effectChildren,\n }),\n ],\n });\n\n // Wrap in inner par\n const innerPar = new BuilderElement({\n name: \"p:par\",\n children: [effectCtn],\n });\n\n // Wrap in outer par (click group)\n const outerPar = new BuilderElement({\n name: \"p:par\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: groupCtnId },\n fill: { key: \"fill\", value: \"hold\" },\n },\n children: [\n new BuilderElement({\n name: \"p:stCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: { delay: { key: \"delay\", value: \"0\" } },\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:childTnLst\",\n children: [innerPar],\n }),\n ],\n }),\n ],\n });\n\n animationNodes.push(outerPar);\n }\n\n // Assemble the full timing tree\n this.root.push(\n new BuilderElement({\n name: \"p:tnLst\",\n children: [\n new BuilderElement({\n name: \"p:par\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: rootCtnId },\n dur: { key: \"dur\", value: \"indefinite\" },\n restart: { key: \"restart\", value: \"never\" },\n nodeType: { key: \"nodeType\", value: \"tmRoot\" },\n },\n children: [\n new BuilderElement({\n name: \"p:childTnLst\",\n children: [\n new BuilderElement({\n name: \"p:seq\",\n attributes: {\n concurrent: { key: \"concurrent\", value: 1 },\n nextAc: { key: \"nextAc\", value: \"seek\" },\n },\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: seqCtnId },\n dur: {\n key: \"dur\",\n value: \"indefinite\",\n },\n nodeType: {\n key: \"nodeType\",\n value: \"mainSeq\",\n },\n },\n children: [\n new BuilderElement({\n name: \"p:childTnLst\",\n children: animationNodes,\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:prevCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: {\n evt: {\n key: \"evt\",\n value: \"onPrev\",\n },\n delay: {\n key: \"delay\",\n value: \"0\",\n },\n },\n children: [\n new BuilderElement({\n name: \"p:tgtEl\",\n children: [\n new BuilderElement({\n name: \"p:sldTgt\",\n }),\n ],\n }),\n ],\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:nextCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: {\n evt: {\n key: \"evt\",\n value: \"onNext\",\n },\n delay: {\n key: \"delay\",\n value: \"0\",\n },\n },\n children: [\n new BuilderElement({\n name: \"p:tgtEl\",\n children: [\n new BuilderElement({\n name: \"p:sldTgt\",\n }),\n ],\n }),\n ],\n }),\n ],\n }),\n ],\n }),\n ...mediaStateNodes,\n ],\n }),\n ],\n }),\n ],\n }),\n ],\n }),\n );\n }\n}\n","import type { Context } from \"@file/xml-components\";\nimport { BaseXmlComponent } from \"@file/xml-components\";\n\nconst ORIENT_TYPES = new Set([\"blinds\", \"checker\", \"comb\", \"randomBar\"]);\n\nconst SIDE_DIR_TYPES = new Set([\"push\", \"wipe\"]);\n\nconst EIGHT_DIR_TYPES = new Set([\"cover\", \"pull\"]);\n\nexport type TransitionType =\n | \"fade\"\n | \"push\"\n | \"wipe\"\n | \"split\"\n | \"blinds\"\n | \"checker\"\n | \"comb\"\n | \"randomBar\"\n | \"cover\"\n | \"pull\"\n | \"strips\"\n | \"wheel\"\n | \"zoom\"\n | \"circle\"\n | \"dissolve\"\n | \"diamond\"\n | \"newsflash\"\n | \"plus\"\n | \"wedge\"\n | \"random\"\n | \"cut\";\n\nexport type TransitionDirection =\n | \"left\"\n | \"up\"\n | \"right\"\n | \"down\"\n | \"leftUp\"\n | \"rightUp\"\n | \"leftDown\"\n | \"rightDown\"\n | \"out\"\n | \"in\";\n\nconst DIRECTION_MAP: Record<TransitionDirection, string> = {\n left: \"l\",\n up: \"u\",\n right: \"r\",\n down: \"d\",\n leftUp: \"lu\",\n rightUp: \"ru\",\n leftDown: \"ld\",\n rightDown: \"rd\",\n out: \"out\",\n in: \"in\",\n};\n\nexport interface TransitionOptions {\n readonly type?: TransitionType;\n readonly speed?: \"slow\" | \"med\" | \"fast\";\n readonly advanceOnClick?: boolean;\n readonly advanceAfterTime?: number;\n readonly direction?: TransitionDirection;\n readonly orient?: \"horz\" | \"vert\";\n readonly thruBlk?: boolean;\n readonly spokes?: number;\n}\n\nfunction buildTransitionElement(\n type: TransitionType,\n direction?: TransitionDirection,\n orient?: string,\n thruBlk?: boolean,\n spokes?: number,\n): string {\n const dir = direction ? DIRECTION_MAP[direction] : undefined;\n const attrs: string[] = [];\n\n if (ORIENT_TYPES.has(type) && dir) {\n attrs.push(`dir=\"${dir}\"`);\n } else if (SIDE_DIR_TYPES.has(type) && dir) {\n attrs.push(`dir=\"${dir}\"`);\n } else if (EIGHT_DIR_TYPES.has(type) && dir) {\n attrs.push(`dir=\"${dir}\"`);\n } else if (type === \"strips\" && dir) {\n attrs.push(`dir=\"${dir}\"`);\n } else if ((type === \"fade\" || type === \"cut\") && thruBlk !== undefined) {\n attrs.push(`thruBlk=\"${thruBlk ? 1 : 0}\"`);\n } else if (type === \"split\") {\n attrs.push(`orient=\"${orient ?? \"horz\"}\"`, `dir=\"${dir ?? \"out\"}\"`);\n } else if (type === \"wheel\") {\n attrs.push(`spokes=\"${spokes ?? 4}\"`);\n } else if (type === \"zoom\" && dir) {\n attrs.push(`dir=\"${dir}\"`);\n }\n\n return attrs.length > 0 ? `<p:${type} ${attrs.join(\" \")}/>` : `<p:${type}/>`;\n}\n\nexport function buildTransition(options: TransitionOptions): string {\n const attrParts: string[] = [];\n if (options.speed) attrParts.push(`spd=\"${options.speed}\"`);\n if (options.advanceOnClick !== undefined)\n attrParts.push(`advClick=\"${options.advanceOnClick ? 1 : 0}\"`);\n if (options.advanceAfterTime !== undefined) attrParts.push(`advTm=\"${options.advanceAfterTime}\"`);\n\n const children: string[] = [];\n if (options.type) {\n children.push(\n buildTransitionElement(\n options.type,\n options.direction,\n options.orient,\n options.thruBlk,\n options.spokes,\n ),\n );\n }\n\n if (attrParts.length === 0 && children.length === 0) {\n return \"<p:transition/>\";\n }\n\n const attrStr = attrParts.length > 0 ? ` ${attrParts.join(\" \")}` : \"\";\n if (children.length === 0) {\n return `<p:transition${attrStr}/>`;\n }\n return `<p:transition${attrStr}>${children.join(\"\")}</p:transition>`;\n}\n\n/**\n * p:transition — Slide transition effect.\n * Lazy: stores options, builds XML in toXml.\n */\nexport class Transition extends BaseXmlComponent {\n private readonly options: TransitionOptions;\n\n public constructor(options: TransitionOptions = {}) {\n super(\"p:transition\");\n this.options = options;\n }\n\n public override toXml(_context: Context): string {\n return buildTransition(this.options);\n }\n}\n","import { SlideTiming } from \"@file/animation/timing\";\nimport type { AnimationOptions } from \"@file/animation/types\";\nimport type { Background } from \"@file/background/background\";\nimport type { SlideHeaderFooterOptions } from \"@file/header-footer/header-footer\";\nimport { coerceChild } from \"@file/slide/coerce\";\nimport type { SlideChild } from \"@file/slide/slide-child\";\nimport type { TransitionOptions } from \"@file/transition/transition\";\nimport { buildTransition } from \"@file/transition/transition\";\nimport { BaseXmlComponent, XmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\n\ninterface Animatable {\n readonly shapeId: number;\n readonly animation?: AnimationOptions;\n}\n\nfunction isAnimatable(child: BaseXmlComponent): child is BaseXmlComponent & Animatable {\n return \"shapeId\" in child && \"animation\" in child;\n}\n\nfunction collectAnimations(children: readonly BaseXmlComponent[]): Array<{\n readonly spid: number;\n readonly options: AnimationOptions;\n}> {\n const entries: Array<{ readonly spid: number; readonly options: AnimationOptions }> = [];\n for (const child of children) {\n if (isAnimatable(child)) {\n const anim = child.animation;\n if (anim) {\n entries.push({ spid: child.shapeId, options: anim });\n }\n }\n }\n return entries;\n}\n\n/**\n * p:sld — A slide in a presentation.\n * Lazy: stores options, builds XML in toXml().\n */\nexport class Slide extends XmlComponent {\n private readonly children: readonly SlideChild[];\n private readonly background?: Background;\n private readonly transition?: TransitionOptions;\n public readonly HeaderFooter?: SlideHeaderFooterOptions;\n\n public constructor(\n children: readonly SlideChild[],\n background?: Background,\n transition?: TransitionOptions,\n headerFooter?: SlideHeaderFooterOptions,\n ) {\n super(\"p:sld\");\n this.children = children;\n this.background = background;\n this.transition = transition;\n this.HeaderFooter = headerFooter;\n }\n\n // Direct XML serialization — builds the <p:sld> wrapper as string, but uses\n // toXml() for child components that have lazy root[] (empty) patterns.\n public override toXml(context: Context): string {\n const parts: string[] = [];\n\n // Opening tag with namespace declarations\n parts.push(\n '<p:sld xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">',\n );\n\n // p:cSld — common slide data\n parts.push(\"<p:cSld>\");\n if (this.background) {\n parts.push(this.background.toXml(context));\n }\n\n // p:spTree — shape tree (fixed wrapper + dynamic children)\n parts.push(\"<p:spTree>\");\n parts.push('<p:nvGrpSpPr><p:cNvPr id=\"1\" name=\"\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>');\n parts.push(\n '<p:grpSpPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/><a:chOff x=\"0\" y=\"0\"/><a:chExt cx=\"0\" cy=\"0\"/></a:xfrm></p:grpSpPr>',\n );\n\n const coercedChildren = this.children.map(coerceChild);\n for (const child of coercedChildren) {\n const s = child.toXml(context);\n if (s) parts.push(s);\n }\n\n parts.push(\"</p:spTree>\");\n parts.push(\"</p:cSld>\");\n\n // p:clrMapOvr\n parts.push(\"<p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr>\");\n\n // p:transition (optional)\n if (this.transition) {\n parts.push(buildTransition(this.transition));\n }\n\n // p:timing (animation)\n const animations = collectAnimations(coercedChildren);\n if (animations.length > 0) {\n const timing = new SlideTiming(animations);\n parts.push(timing.toXml(context));\n }\n\n parts.push(\"</p:sld>\");\n return parts.join(\"\");\n }\n}\n","import type { Context } from \"@file/xml-components\";\nimport { ImportedXmlComponent } from \"@file/xml-components\";\n\nconst TABLE_STYLES_XML = `<a:tblStyleLst xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" def=\"{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}\"/>`;\n\nexport class TableStyles extends ImportedXmlComponent {\n private static instance = ImportedXmlComponent.fromXmlString(TABLE_STYLES_XML);\n\n public constructor() {\n super(\"a:tblStyleLst\");\n }\n\n public override toXml(context: Context): string {\n return TableStyles.instance.toXml(context);\n }\n}\n","import { ImportedXmlComponent } from \"@file/xml-components\";\n\nexport interface ColorSchemeOptions {\n dark1?: string;\n light1?: string;\n dark2?: string;\n light2?: string;\n accent1?: string;\n accent2?: string;\n accent3?: string;\n accent4?: string;\n accent5?: string;\n accent6?: string;\n hyperlink?: string;\n followedHyperlink?: string;\n}\n\nexport interface FontSchemeOptions {\n majorFont?: string;\n minorFont?: string;\n majorFontAsian?: string;\n minorFontAsian?: string;\n}\n\nexport interface ThemeOptions {\n name?: string;\n colors?: ColorSchemeOptions;\n fonts?: FontSchemeOptions;\n}\n\nconst DEFAULT_COLORS: Required<ColorSchemeOptions> = {\n dark1: \"000000\",\n light1: \"FFFFFF\",\n dark2: \"44546A\",\n light2: \"E7E6E6\",\n accent1: \"4472C4\",\n accent2: \"ED7D31\",\n accent3: \"A5A5A5\",\n accent4: \"FFC000\",\n accent5: \"5B9BD5\",\n accent6: \"70AD47\",\n hyperlink: \"0563C1\",\n followedHyperlink: \"954F72\",\n};\n\nfunction buildThemeXml(options?: ThemeOptions): string {\n const name = options?.name ?? \"Office Theme\";\n const c = { ...DEFAULT_COLORS, ...options?.colors };\n const f = options?.fonts;\n\n const majorFont = f?.majorFont ?? \"Calibri Light\";\n const minorFont = f?.minorFont ?? \"Calibri\";\n const majorFontAsian = f?.majorFontAsian ?? \"\";\n const minorFontAsian = f?.minorFontAsian ?? \"\";\n\n // dk1/lt1 use sysClr in Office theme; srgbClr override when customized\n const dk1 =\n options?.colors?.dark1 !== undefined\n ? `<a:srgbClr val=\"${c.dark1}\"/>`\n : `<a:sysClr val=\"windowText\" lastClr=\"000000\"/>`;\n const lt1 =\n options?.colors?.light1 !== undefined\n ? `<a:srgbClr val=\"${c.light1}\"/>`\n : `<a:sysClr val=\"window\" lastClr=\"FFFFFF\"/>`;\n\n return `<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"${name}\">\n <a:themeElements>\n <a:clrScheme name=\"${name}\">\n <a:dk1>${dk1}</a:dk1>\n <a:lt1>${lt1}</a:lt1>\n <a:dk2><a:srgbClr val=\"${c.dark2}\"/></a:dk2>\n <a:lt2><a:srgbClr val=\"${c.light2}\"/></a:lt2>\n <a:accent1><a:srgbClr val=\"${c.accent1}\"/></a:accent1>\n <a:accent2><a:srgbClr val=\"${c.accent2}\"/></a:accent2>\n <a:accent3><a:srgbClr val=\"${c.accent3}\"/></a:accent3>\n <a:accent4><a:srgbClr val=\"${c.accent4}\"/></a:accent4>\n <a:accent5><a:srgbClr val=\"${c.accent5}\"/></a:accent5>\n <a:accent6><a:srgbClr val=\"${c.accent6}\"/></a:accent6>\n <a:hlink><a:srgbClr val=\"${c.hyperlink}\"/></a:hlink>\n <a:folHlink><a:srgbClr val=\"${c.followedHyperlink}\"/></a:folHlink>\n </a:clrScheme>\n <a:fontScheme name=\"${name}\">\n <a:majorFont>\n <a:latin typeface=\"${majorFont}\"/>\n <a:ea typeface=\"${majorFontAsian}\"/>\n <a:cs typeface=\"\"/>\n </a:majorFont>\n <a:minorFont>\n <a:latin typeface=\"${minorFont}\"/>\n <a:ea typeface=\"${minorFontAsian}\"/>\n <a:cs typeface=\"\"/>\n </a:minorFont>\n </a:fontScheme>\n <a:fmtScheme name=\"Office\">\n <a:fillStyleLst>\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\n </a:fillStyleLst>\n <a:lnStyleLst>\n <a:ln w=\"6350\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/></a:ln>\n <a:ln w=\"12700\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/></a:ln>\n <a:ln w=\"19050\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/></a:ln>\n </a:lnStyleLst>\n <a:effectStyleLst>\n <a:effectStyle><a:effectLst/></a:effectStyle>\n <a:effectStyle><a:effectLst/></a:effectStyle>\n <a:effectStyle><a:effectLst/></a:effectStyle>\n </a:effectStyleLst>\n <a:bgFillStyleLst>\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\n </a:bgFillStyleLst>\n </a:fmtScheme>\n </a:themeElements>\n <a:objectDefaults/>\n <a:extraClrSchemeLst/>\n</a:theme>`;\n}\n\nexport class DefaultTheme extends ImportedXmlComponent {\n private static cache = new Map<string, ImportedXmlComponent>();\n private readonly cacheKey: string;\n\n public constructor(options?: ThemeOptions) {\n super(\"a:theme\");\n this.cacheKey = options ? themeKey(options) : \"\";\n if (!DefaultTheme.cache.has(this.cacheKey)) {\n DefaultTheme.cache.set(\n this.cacheKey,\n ImportedXmlComponent.fromXmlString(buildThemeXml(options)),\n );\n }\n }\n\n public override toXml(context: any): string {\n return DefaultTheme.cache.get(this.cacheKey)!.toXml(context);\n }\n}\n\nfunction themeKey(o: ThemeOptions): string {\n const c = o.colors;\n const f = o.fonts;\n return `n${o.name ?? \"\"}c${c?.dark1 ?? \"\"}${c?.light1 ?? \"\"}${c?.dark2 ?? \"\"}${c?.light2 ?? \"\"}${c?.accent1 ?? \"\"}${c?.accent2 ?? \"\"}${c?.accent3 ?? \"\"}${c?.accent4 ?? \"\"}${c?.accent5 ?? \"\"}${c?.accent6 ?? \"\"}${c?.hyperlink ?? \"\"}${c?.followedHyperlink ?? \"\"}f${f?.majorFont ?? \"\"}${f?.minorFont ?? \"\"}${f?.majorFontAsian ?? \"\"}${f?.minorFontAsian ?? \"\"}`;\n}\n","import type { Context } from \"@file/xml-components\";\nimport { ImportedXmlComponent } from \"@file/xml-components\";\n\nconst VIEW_PROPS_XML = `<p:viewPr xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">\n <p:normalViewPr>\n <p:restoredLeft sz=\"14996\" autoAdjust=\"0\"/>\n <p:restoredTop sz=\"94660\"/>\n </p:normalViewPr>\n <p:slideViewPr>\n <p:cSldViewPr snapToGrid=\"0\">\n <p:cViewPr varScale=\"1\">\n <p:scale><a:sx n=\"90\" d=\"100\"/><a:sy n=\"90\" d=\"100\"/></p:scale>\n <p:origin x=\"1200\" y=\"72\"/>\n </p:cViewPr>\n <p:guideLst/>\n </p:cSldViewPr>\n </p:slideViewPr>\n <p:notesTextViewPr>\n <p:cViewPr>\n <p:scale><a:sx n=\"1\" d=\"1\"/><a:sy n=\"1\" d=\"1\"/></p:scale>\n <p:origin x=\"0\" y=\"0\"/>\n </p:cViewPr>\n </p:notesTextViewPr>\n <p:gridSpacing cx=\"72008\" cy=\"72008\"/>\n</p:viewPr>`;\n\nexport class ViewProperties extends ImportedXmlComponent {\n private static instance = ImportedXmlComponent.fromXmlString(VIEW_PROPS_XML);\n\n public constructor() {\n super(\"p:viewPr\");\n }\n\n public override toXml(context: Context): string {\n return ViewProperties.instance.toXml(context);\n }\n}\n","import { AppProperties } from \"@file/app-properties/app-properties\";\nimport { Background, type BackgroundOptions } from \"@file/background/background\";\nimport { ChartCollection } from \"@file/chart/chart-collection\";\nimport { CommentAuthorList } from \"@file/comment/comment-author-list\";\nimport type { AuthorEntry } from \"@file/comment/comment-author-list\";\nimport { SlideCommentList } from \"@file/comment/slide-comment-list\";\nimport { ContentTypes } from \"@file/content-types/content-types\";\nimport { CoreProperties, type CorePropertiesOptions } from \"@file/core-properties/properties\";\nimport type { SlideHeaderFooterOptions } from \"@file/header-footer/header-footer\";\nimport { HyperlinkCollection } from \"@file/hyperlink-collection\";\nimport { Media } from \"@file/media/media\";\nimport { NotesSlide } from \"@file/notes/notes-slide\";\nimport { PresentationProperties } from \"@file/presentation-properties\";\nimport { PresentationWrapper } from \"@file/presentation/presentation-wrapper\";\nimport { Relationships } from \"@file/relationships/relationships\";\nimport type { ShapeOptions } from \"@file/shape/shape\";\nimport { SlideLayout, type SlideLayoutType } from \"@file/slide-layout/slide-layout\";\nimport {\n DefaultSlideMaster,\n type MasterPlaceholderPosition,\n type SlideMasterOptions,\n} from \"@file/slide-master/slide-master\";\nimport { Slide } from \"@file/slide/slide\";\nimport type { SlideChild } from \"@file/slide/slide-child\";\nimport { SmartArtCollection } from \"@file/smartart/smartart-collection\";\nimport { TableStyles } from \"@file/table-styles\";\nimport { DefaultTheme, type ThemeOptions } from \"@file/theme/theme\";\nimport type { TransitionOptions } from \"@file/transition/transition\";\nimport { ViewProperties } from \"@file/view-properties\";\nimport type { BaseXmlComponent } from \"@file/xml-components\";\nimport type { RelationshipType } from \"@office-open/core\";\nimport { convertPixelsToEmu } from \"@office-open/core\";\n\n// ── Public interfaces ──\n\nexport type MasterChild = BaseXmlComponent | { shape: ShapeOptions };\n\nexport type SlideSize = \"16:9\" | \"4:3\" | { readonly width: number; readonly height: number };\n\nexport interface LayoutPlaceholderOptions {\n readonly title?: MasterPlaceholderPosition | false;\n readonly body?: MasterPlaceholderPosition | false;\n readonly subtitle?: MasterPlaceholderPosition | false;\n readonly date?: MasterPlaceholderPosition | false;\n readonly footer?: MasterPlaceholderPosition | false;\n readonly slideNumber?: MasterPlaceholderPosition | false;\n}\n\nexport interface LayoutDefinition {\n readonly type?: SlideLayoutType;\n readonly name?: string;\n readonly placeholders?: LayoutPlaceholderOptions;\n readonly children?: readonly MasterChild[];\n}\n\nexport interface MasterDefinition extends SlideMasterOptions {\n readonly name?: string;\n readonly theme?: ThemeOptions;\n readonly layouts?: readonly LayoutDefinition[];\n}\n\nexport interface SlideCommentOptions {\n readonly author: string;\n readonly text: string;\n readonly x: number;\n readonly y: number;\n readonly initials?: string;\n readonly date?: string;\n}\n\nexport interface SlideOptions {\n readonly children?: readonly SlideChild[];\n readonly background?: BackgroundOptions;\n readonly notes?: string;\n readonly transition?: TransitionOptions;\n readonly headerFooter?: SlideHeaderFooterOptions;\n readonly comments?: readonly SlideCommentOptions[];\n readonly layout?: SlideLayoutType | string;\n readonly master?: string;\n}\n\nexport interface ShowOptions {\n readonly loop?: boolean;\n readonly kiosk?: boolean;\n readonly showNarration?: boolean;\n readonly useTimings?: boolean;\n}\n\nexport interface PresentationOptions extends CorePropertiesOptions {\n readonly size?: SlideSize;\n readonly masters?: readonly MasterDefinition[];\n readonly slides?: readonly SlideOptions[];\n readonly show?: ShowOptions;\n}\n\ninterface RelEntry {\n readonly id: number | string;\n readonly type: RelationshipType;\n readonly target: string;\n readonly mode?: string;\n}\n\nfunction buildRelationships(entries: readonly RelEntry[]): Relationships {\n const rels = new Relationships();\n for (const e of entries) {\n rels.addRelationship(e.id, e.type, e.target, e.mode as \"External\" | undefined);\n }\n return rels;\n}\n\nfunction deriveInitials(name: string): string {\n const parts = name.trim().split(/\\s+/);\n return parts.length >= 2\n ? (parts[0][0] + parts[parts.length - 1][0]).toUpperCase()\n : name.slice(0, 2).toUpperCase();\n}\n\nfunction resolveSlideSize(size?: SlideSize): { width: number; height: number } {\n if (!size || size === \"16:9\") return { width: 12192000, height: 6858000 };\n if (size === \"4:3\") return { width: 9144000, height: 6858000 };\n return { width: convertPixelsToEmu(size.width), height: convertPixelsToEmu(size.height) };\n}\n\ninterface LayoutInfo {\n readonly key: string;\n readonly index: number;\n readonly masterIndex: number;\n readonly layout: SlideLayout;\n}\n\ninterface MasterInfo {\n readonly name: string;\n readonly index: number;\n readonly definition: MasterDefinition;\n readonly master: DefaultSlideMaster;\n readonly theme: DefaultTheme;\n readonly layouts: LayoutInfo[];\n readonly masterRels: Relationships;\n readonly layoutRels: Relationships[];\n}\n\nexport class File {\n private readonly slideOptions: readonly SlideOptions[];\n private readonly corePropsOptions: CorePropertiesOptions;\n private readonly showOptions?: ShowOptions;\n private readonly slideWidthEmus: number;\n private readonly slideHeightEmus: number;\n private readonly masterDefs: readonly MasterDefinition[];\n\n // Lazy components\n private _coreProperties?: CoreProperties;\n private _appProperties?: AppProperties;\n private _contentTypes?: ContentTypes;\n private _media?: Media;\n private _charts?: ChartCollection;\n private _smartArts?: SmartArtCollection;\n private _hyperlinks?: HyperlinkCollection;\n private _presentationWrapper?: PresentationWrapper;\n private _tableStyles?: TableStyles;\n private _presProps?: PresentationProperties;\n private _viewProps?: ViewProperties;\n private _notesMasterRels?: Relationships;\n\n // Multi-master support\n private masterMap?: MasterInfo[];\n private _allLayouts?: readonly LayoutInfo[];\n private _allLayoutRels?: readonly Relationships[];\n\n // Lazy slide data\n private _slides?: Slide[];\n private _slideWrappers?: Array<{ readonly view: Slide; readonly relationships: Relationships }>;\n private _notesSlides?: NotesSlide[];\n private _commentAuthorList?: CommentAuthorList;\n private _slideCommentLists?: (SlideCommentList | undefined)[];\n\n // Lazy relationship data\n private _fileRels?: Relationships;\n\n public constructor(options: PresentationOptions) {\n this.slideOptions = options.slides ?? [];\n this.corePropsOptions = options;\n this.showOptions = options.show;\n this.masterDefs = options.masters ?? [];\n const sz = resolveSlideSize(options.size);\n this.slideWidthEmus = sz.width;\n this.slideHeightEmus = sz.height;\n }\n\n // ── Master / Layout resolution ──\n\n private getMasterMap(): MasterInfo[] {\n if (this.masterMap) return this.masterMap;\n\n const defs = this.masterDefs.length > 0 ? this.masterDefs : [{} as MasterDefinition];\n const slideMasterLookup = new Map<number, number>();\n\n // Build slide → master index lookup\n for (let si = 0; si < this.slideOptions.length; si++) {\n const masterName = this.slideOptions[si].master;\n if (masterName === undefined) {\n slideMasterLookup.set(si, 0);\n continue;\n }\n const mi = defs.findIndex((d) => d.name === masterName);\n slideMasterLookup.set(si, mi >= 0 ? mi : 0);\n }\n\n let globalLayoutIndex = 0;\n const masters: MasterInfo[] = [];\n\n for (let mi = 0; mi < defs.length; mi++) {\n const def = defs[mi];\n const name = def.name ?? `master${mi + 1}`;\n\n // Collect layout types needed for this master\n const layoutDefs = def.layouts;\n let layoutKeys: readonly string[];\n if (layoutDefs && layoutDefs.length > 0) {\n layoutKeys = layoutDefs.map(\n (ld) => ld.type ?? ld.name ?? `layout${mi}_${layoutDefs.indexOf(ld)}`,\n );\n } else {\n // Auto-derive from slides referencing this master\n const seen = new Set<string>();\n const keys: string[] = [];\n for (let si = 0; si < this.slideOptions.length; si++) {\n if (slideMasterLookup.get(si) === mi) {\n const lt = this.slideOptions[si].layout ?? \"blank\";\n if (!seen.has(lt)) {\n seen.add(lt);\n keys.push(lt);\n }\n }\n }\n layoutKeys = keys.length > 0 ? keys : [\"blank\"];\n }\n\n const hf = this.slideOptions.find((s) => s.headerFooter)?.headerFooter;\n const master = new DefaultSlideMaster(layoutKeys.length, hf, def, this.slideWidthEmus, mi);\n const theme = new DefaultTheme(def.theme);\n\n const layouts: LayoutInfo[] = [];\n const layoutRels: Relationships[] = [];\n\n for (let li = 0; li < layoutKeys.length; li++) {\n const key = layoutKeys[li];\n const layoutDef = layoutDefs?.[li];\n const slideLayoutType = (layoutDef?.type ?? key) as SlideLayoutType;\n layouts.push({\n key,\n index: globalLayoutIndex,\n masterIndex: mi,\n layout: new SlideLayout(slideLayoutType, this.slideWidthEmus, layoutDef),\n });\n layoutRels.push(\n buildRelationships([\n {\n id: 1,\n type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster\",\n target: `../slideMasters/slideMaster${mi + 1}.xml`,\n },\n ]),\n );\n globalLayoutIndex++;\n }\n\n // Master rels: layouts + theme\n const masterRelsEntries: RelEntry[] = [];\n for (let li = 0; li < layouts.length; li++) {\n masterRelsEntries.push({\n id: li + 1,\n type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout\",\n target: `../slideLayouts/slideLayout${layouts[li].index + 1}.xml`,\n });\n }\n masterRelsEntries.push({\n id: layouts.length + 1,\n type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n target: `../theme/theme${mi + 1}.xml`,\n });\n\n masters.push({\n name,\n index: mi,\n definition: def,\n master,\n theme,\n layouts,\n masterRels: buildRelationships(masterRelsEntries),\n layoutRels,\n });\n }\n\n this.masterMap = masters;\n this._allLayouts = masters.flatMap((m) => m.layouts);\n this._allLayoutRels = masters.flatMap((m) => m.layoutRels);\n return this.masterMap;\n }\n\n private findLayoutForSlide(slideIndex: number): LayoutInfo {\n const opts = this.slideOptions[slideIndex];\n const masters = this.getMasterMap();\n const mi =\n opts.master !== undefined\n ? Math.max(\n 0,\n masters.findIndex((m) => m.name === opts.master),\n )\n : 0;\n const master = masters[mi];\n const layoutKey = opts.layout ?? \"blank\";\n const li = master.layouts.find((l) => l.key === layoutKey);\n return li ?? master.layouts[0];\n }\n\n // ── Lazy getters ──\n\n public get coreProperties(): CoreProperties {\n return (this._coreProperties ??= new CoreProperties(this.corePropsOptions));\n }\n\n public get appProperties(): AppProperties {\n return (this._appProperties ??= new AppProperties());\n }\n\n public get contentTypes(): ContentTypes {\n if (!this._contentTypes) {\n this._contentTypes = new ContentTypes();\n let hasComments = false;\n for (let i = 0; i < this.slideOptions.length; i++) {\n this._contentTypes.addSlide(i + 1);\n if (this.slideOptions[i].notes) {\n this._contentTypes.addNotesSlide(i + 1);\n }\n if (this.slideOptions[i].comments && this.slideOptions[i].comments!.length > 0) {\n this._contentTypes.addComments(i + 1);\n hasComments = true;\n }\n }\n if (hasComments) {\n this._contentTypes.addCommentAuthors();\n }\n }\n return this._contentTypes;\n }\n\n public get fileRelationships(): Relationships {\n if (!this._fileRels) {\n this._fileRels = buildRelationships([\n {\n id: 1,\n type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n target: \"ppt/presentation.xml\",\n },\n {\n id: 2,\n type: \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\",\n target: \"docProps/core.xml\",\n },\n {\n id: 3,\n type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\",\n target: \"docProps/app.xml\",\n },\n ]);\n }\n return this._fileRels;\n }\n\n public get media(): Media {\n return (this._media ??= new Media());\n }\n\n public get charts(): ChartCollection {\n return (this._charts ??= new ChartCollection());\n }\n\n public get smartArts(): SmartArtCollection {\n return (this._smartArts ??= new SmartArtCollection());\n }\n\n public get hyperlinks(): HyperlinkCollection {\n return (this._hyperlinks ??= new HyperlinkCollection());\n }\n\n public get presentationWrapper(): PresentationWrapper {\n if (!this._presentationWrapper) {\n const masters = this.getMasterMap();\n this._presentationWrapper = new PresentationWrapper({\n slideWidth: this.slideWidthEmus,\n slideHeight: this.slideHeightEmus,\n slideIds: this.slideOptions.map((_, i) => 256 + i),\n masterCount: masters.length,\n });\n const presRels = this._presentationWrapper.relationships;\n let rid = 1;\n // Masters\n for (let mi = 0; mi < masters.length; mi++) {\n presRels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster\",\n `slideMasters/slideMaster${mi + 1}.xml`,\n );\n }\n // Slides\n for (let i = 0; i < this.slideOptions.length; i++) {\n presRels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide\",\n `slides/slide${i + 1}.xml`,\n );\n }\n // Static parts\n presRels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/presProps\",\n \"presProps.xml\",\n );\n presRels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/viewProps\",\n \"viewProps.xml\",\n );\n for (let mi = 0; mi < masters.length; mi++) {\n presRels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n `theme/theme${mi + 1}.xml`,\n );\n }\n presRels.addRelationship(\n rid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableStyles\",\n \"tableStyles.xml\",\n );\n }\n return this._presentationWrapper;\n }\n\n public get themes(): readonly DefaultTheme[] {\n return this.getMasterMap().map((m) => m.theme);\n }\n\n public get tableStyles(): TableStyles {\n return (this._tableStyles ??= new TableStyles());\n }\n\n public get presProps(): PresentationProperties {\n return (this._presProps ??= new PresentationProperties(this.showOptions));\n }\n\n public get viewProps(): ViewProperties {\n return (this._viewProps ??= new ViewProperties());\n }\n\n public get slideMasters(): readonly DefaultSlideMaster[] {\n return this.getMasterMap().map((m) => m.master);\n }\n\n public get slideMasterRelsArray(): readonly Relationships[] {\n return this.getMasterMap().map((m) => m.masterRels);\n }\n\n public get allLayouts(): readonly LayoutInfo[] {\n this.getMasterMap();\n return this._allLayouts!;\n }\n\n public get allLayoutRelsArray(): readonly Relationships[] {\n this.getMasterMap();\n return this._allLayoutRels!;\n }\n\n public get slides(): readonly Slide[] {\n if (!this._slides) {\n this._slides = [];\n for (const s of this.slideOptions) {\n this._slides!.push(\n new Slide(\n s.children ?? [],\n s.background ? new Background(s.background) : undefined,\n s.transition,\n s.headerFooter,\n ),\n );\n }\n }\n return this._slides;\n }\n\n public get slideWrappers(): Array<{\n readonly view: Slide;\n readonly relationships: Relationships;\n }> {\n if (!this._slideWrappers) {\n this._slideWrappers = [];\n for (let i = 0; i < this.slideOptions.length; i++) {\n const layout = this.findLayoutForSlide(i);\n this._slideWrappers.push({\n view: this.slides[i],\n relationships: buildRelationships([\n {\n id: 1,\n type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout\",\n target: `../slideLayouts/slideLayout${layout.index + 1}.xml`,\n },\n ]),\n });\n }\n }\n return this._slideWrappers;\n }\n\n public get notesSlides(): readonly NotesSlide[] {\n if (!this._notesSlides) {\n this._notesSlides = [];\n for (let i = 0; i < this.slideOptions.length; i++) {\n if (this.slideOptions[i].notes) {\n this._notesSlides.push(new NotesSlide({ text: this.slideOptions[i].notes }));\n }\n }\n }\n return this._notesSlides;\n }\n\n /** Map from slide index → notesSlide index (0-based) for slides that have notes. */\n public get notesSlideIndexMap(): Map<number, number> {\n const map = new Map<number, number>();\n let notesIdx = 0;\n for (let i = 0; i < this.slideOptions.length; i++) {\n if (this.slideOptions[i].notes) {\n map.set(i, notesIdx++);\n }\n }\n return map;\n }\n\n public get notesMasterRelationships(): Relationships {\n return (this._notesMasterRels ??= new Relationships());\n }\n\n public get commentAuthorList(): CommentAuthorList | undefined {\n if (!this._commentAuthorList && !this._slideCommentLists) {\n this.buildComments();\n }\n return this._commentAuthorList;\n }\n\n public get slideCommentLists(): readonly (SlideCommentList | undefined)[] {\n if (!this._slideCommentLists) {\n this.buildComments();\n }\n return this._slideCommentLists!;\n }\n\n private buildComments(): void {\n const authorMap = new Map<\n string,\n { id: number; name: string; initials: string; clrIdx: number; commentCount: number }\n >();\n let nextAuthorId = 0;\n\n this._slideCommentLists = Array.from<SlideCommentList | undefined>({\n length: this.slideOptions.length,\n });\n\n for (let i = 0; i < this.slideOptions.length; i++) {\n const slideComments = this.slideOptions[i].comments;\n if (!slideComments || slideComments.length === 0) continue;\n\n const commentEntries: Array<{\n readonly authorId: number;\n readonly idx: number;\n readonly date?: string;\n readonly x: number;\n readonly y: number;\n readonly text: string;\n }> = [];\n\n for (const c of slideComments) {\n let author = authorMap.get(c.author);\n if (!author) {\n const id = nextAuthorId++;\n author = {\n id,\n name: c.author,\n initials: c.initials || deriveInitials(c.author),\n clrIdx: id,\n commentCount: 0,\n };\n authorMap.set(c.author, author);\n }\n author.commentCount++;\n\n commentEntries.push({\n authorId: author.id,\n idx: author.commentCount,\n date: c.date,\n x: c.x,\n y: c.y,\n text: c.text,\n });\n }\n\n this._slideCommentLists[i] = new SlideCommentList(commentEntries);\n }\n\n if (authorMap.size > 0) {\n const authors: AuthorEntry[] = Array.from(authorMap.values(), (a) => ({\n id: a.id,\n name: a.name,\n initials: a.initials,\n clrIdx: a.clrIdx,\n lastIdx: a.commentCount,\n }));\n this._commentAuthorList = new CommentAuthorList(authors);\n }\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\n\n/**\n * a:t — Text content within a run.\n */\nexport class Text extends XmlComponent {\n public constructor(value: string) {\n super(\"a:t\");\n this.root.push(value);\n }\n}\n","import { BuilderElement } from \"@file/xml-components\";\nimport type { Context, IXmlableObject } from \"@file/xml-components\";\n\n/**\n * Pure function: builds a:endParaRPr XML object.\n */\nexport function buildEndParagraphRunProperties(lang: string = \"en-US\"): IXmlableObject {\n return { \"a:endParaRPr\": { _attr: { lang } } };\n}\n\n/**\n * a:endParaRPr — End paragraph run properties.\n * Lazy: stores lang, builds XML in toXml().\n */\nexport class EndParagraphRunProperties extends BuilderElement<{\n readonly lang: string;\n}> {\n private readonly lang: string;\n\n public constructor(lang: string = \"en-US\") {\n super({ name: \"a:endParaRPr\" });\n this.lang = lang;\n }\n\n public override toXml(_context: Context): string {\n return `<a:endParaRPr lang=\"${this.lang}\"/>`;\n }\n}\n","import {\n buildAttrObject,\n BuilderElement,\n XmlComponent,\n stringContainerObj,\n} from \"@file/xml-components\";\n\n/**\n * a:fld — A field element for dynamic content in slide text.\n *\n * Used in slide master placeholders for slide numbers, dates, etc.\n */\nexport class Field extends XmlComponent {\n public constructor(fieldType: string, displayText: string) {\n super(\"a:fld\");\n\n this.root.push(\n buildAttrObject({\n id: `{${crypto.randomUUID()}}`,\n type: fieldType,\n }),\n );\n\n this.root.push(\n new BuilderElement({\n name: \"a:rPr\",\n attributes: {\n lang: { key: \"lang\", value: \"en-US\" },\n smtClean: { key: \"smtClean\", value: 0 },\n },\n }),\n );\n\n this.root.push(stringContainerObj(\"a:t\", displayText));\n }\n}\n\n/**\n * Slide number field — outputs current slide number.\n */\nexport class SlideNumberField extends Field {\n public constructor(displayText = \"<#>\") {\n super(\"slidenum\", displayText);\n }\n}\n\n/**\n * Date/time field — outputs formatted date.\n */\nexport class DateTimeField extends Field {\n public constructor(displayText?: string, format?: string) {\n super(format ?? \"datetimeFigureOut\", displayText ?? \"\");\n }\n}\n","import { BuilderElement } from \"@file/xml-components\";\n\n/**\n * a:cNvPr — Non-visual drawing properties (id, name).\n */\nexport class NonVisualDrawingProperties extends BuilderElement<{\n readonly id: number;\n readonly name: string;\n}> {\n public constructor(id: number, name: string) {\n super({\n name: \"a:cNvPr\",\n attributes: { id: { key: \"id\", value: id }, name: { key: \"name\", value: name } },\n });\n }\n}\n","import { GroupShapeProperties } from \"@file/drawingml/group-shape-properties\";\nimport { XmlComponent } from \"@file/xml-components\";\n\nimport { GroupShapeNonVisualProperties } from \"./group-shape-non-visual\";\n\n/**\n * p:spTree — Shape tree containing all shapes on a slide.\n */\nexport class ShapeTree extends XmlComponent {\n public constructor(children: readonly XmlComponent[]) {\n super(\"p:spTree\");\n this.root.push(new GroupShapeNonVisualProperties());\n this.root.push(new GroupShapeProperties());\n this.root.push(...children);\n }\n}\n","import type { Context } from \"@file/xml-components\";\nimport { ImportedXmlComponent } from \"@file/xml-components\";\n\nconst NOTES_MASTER_XML = `<p:notesMaster xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">\n <p:cSld>\n <p:bg>\n <p:bgRef idx=\"1001\">\n <a:schemeClr val=\"bg1\"/>\n </p:bgRef>\n </p:bg>\n <p:spTree>\n <p:nvGrpSpPr>\n <p:cNvPr id=\"1\" name=\"\"/>\n <p:cNvGrpSpPr/>\n <p:nvPr/>\n </p:nvGrpSpPr>\n <p:grpSpPr>\n <a:xfrm>\n <a:off x=\"0\" y=\"0\"/>\n <a:ext cx=\"0\" cy=\"0\"/>\n <a:chOff x=\"0\" y=\"0\"/>\n <a:chExt cx=\"0\" cy=\"0\"/>\n </a:xfrm>\n </p:grpSpPr>\n </p:spTree>\n </p:cSld>\n <p:clrMap bg1=\"lt1\" tx1=\"dk1\" bg2=\"lt2\" tx2=\"dk2\" accent1=\"accent1\" accent2=\"accent2\" accent3=\"accent3\" accent4=\"accent4\" accent5=\"accent5\" accent6=\"accent6\" hlink=\"hlink\" folHlink=\"folHlink\"/>\n</p:notesMaster>`;\n\nexport class DefaultNotesMaster extends ImportedXmlComponent {\n private static instance = ImportedXmlComponent.fromXmlString(NOTES_MASTER_XML);\n\n public constructor() {\n super(\"p:notesMaster\");\n }\n\n public override toXml(context: Context): string {\n return DefaultNotesMaster.instance.toXml(context);\n }\n}\n","import {\n buildAttrObject,\n BuilderElement,\n XmlComponent,\n stringContainerObj,\n} from \"@file/xml-components\";\n\nexport interface SlideHeaderFooterOptions {\n readonly slideNumber?: boolean;\n readonly dateTime?: boolean;\n readonly footer?: string | boolean;\n readonly header?: boolean;\n}\n\n/**\n * p:hf — Slide header/footer settings.\n *\n * CT_HeaderFooter has boolean attributes (sldNum, hdr, ftr, dt) for visibility.\n * Footer text content is passed as p:ftr child element (legacy support).\n */\nexport class HeaderFooter extends XmlComponent {\n public constructor(options: SlideHeaderFooterOptions = {}) {\n super(\"p:hf\");\n\n // Boolean visibility attributes\n const attrs: Record<string, number> = {};\n if (options.slideNumber !== false) attrs.sldNum = 1;\n if (options.dateTime !== false) attrs.dt = 1;\n // Only set hdr when explicitly true (no header placeholder in default slide master)\n if (options.header === true) attrs.hdr = 1;\n // Only set ftr when explicitly true or footer has string content\n if (options.footer !== false && options.footer !== undefined) attrs.ftr = 1;\n\n if (Object.keys(attrs).length > 0) {\n this.root.push(buildAttrObject(attrs));\n }\n\n // Footer text content as child element\n if (typeof options.footer === \"string\") {\n this.root.push(\n new BuilderElement({\n name: \"p:ftr\",\n children: [\n new BuilderElement({\n name: \"p:txBody\",\n children: [\n new BuilderElement({ name: \"a:bodyPr\" }),\n new BuilderElement({ name: \"a:lstStyle\" }),\n new BuilderElement({\n name: \"a:p\",\n children: [\n new BuilderElement({\n name: \"a:r\",\n children: [stringContainerObj(\"a:t\", options.footer)],\n }),\n new BuilderElement({\n name: \"a:endParaRPr\",\n attributes: { lang: { key: \"lang\", value: \"en-US\" } },\n }),\n ],\n }),\n ],\n }),\n ],\n }),\n );\n }\n }\n}\n","export {\n File,\n type PresentationOptions,\n type SlideOptions,\n type SlideCommentOptions,\n type MasterDefinition,\n type LayoutDefinition,\n type LayoutPlaceholderOptions,\n type MasterChild,\n type SlideSize,\n} from \"./file\";\nexport { Presentation } from \"./presentation/presentation\";\nexport type { PresentationOptions as IPresentationXmlOptions } from \"./presentation/presentation\";\nexport { Shape, type ShapeOptions } from \"./shape/shape\";\nexport { TextBody, type TextBodyOptions } from \"./shape/text-body\";\nexport { Paragraph, type ParagraphOptions } from \"./shape/paragraph/paragraph\";\nexport { TextRun, type RunOptions } from \"./shape/paragraph/run\";\nexport { Text } from \"./shape/paragraph/text\";\nexport {\n RunProperties,\n UnderlineStyle,\n StrikeStyle,\n TextCapitalization,\n type RunPropertiesOptions,\n type HyperlinkOptions,\n} from \"./shape/paragraph/run-properties\";\nexport {\n ParagraphProperties,\n TextAlignment,\n type ParagraphPropertiesOptions,\n} from \"./shape/paragraph/paragraph-properties\";\nexport { EndParagraphRunProperties } from \"./shape/paragraph/end-paragraph-run\";\nexport { Field, SlideNumberField, DateTimeField } from \"./shape/paragraph/field\";\n\n// DrawingML — re-exports from core\nexport {\n createOutline,\n type OutlineOptions as CoreOutlineOptions,\n} from \"@office-open/core/drawingml\";\nexport {\n createGradientFill,\n createGradientStop,\n type GradientFillOptions as CoreGradientFillOptions,\n type GradientStop,\n PathShadeType,\n TileFlipMode,\n} from \"@office-open/core/drawingml\";\nexport {\n LineCap,\n CompoundLine,\n PenAlignment,\n PresetDash,\n LineJoin,\n} from \"@office-open/core/drawingml\";\nexport { createScene3D, type Scene3DOptions } from \"@office-open/core/drawingml\";\nexport {\n createShape3D,\n type Shape3DOptions,\n PresetMaterialType,\n} from \"@office-open/core/drawingml\";\nexport {\n createBevel,\n createBottomBevel,\n type BevelOptions,\n BevelPresetType,\n} from \"@office-open/core/drawingml\";\nexport { createEffectList, type EffectListOptions } from \"@office-open/core/drawingml\";\nexport { createColorElement } from \"@office-open/core/drawingml\";\nexport { createColorTransforms, type ColorTransformOptions } from \"@office-open/core/drawingml\";\n\n// DrawingML — fill API\nexport {\n buildFill,\n extractBlipFillMedia,\n type BlipFillConfigOptions,\n type BlipFillMediaData,\n type FillOptions,\n type GradientStopOptions,\n} from \"./drawingml/fill\";\nexport { createOutlineCompat, type OutlineOptions } from \"./drawingml/outline\";\n\n// DrawingML — local implementations (pptx-specific)\nexport { BlipFill } from \"./drawingml/blip-fill\";\nexport { Transform2D, type ITransform2DOptions } from \"./drawingml/transform-2d\";\nexport { PresetGeometry } from \"./drawingml/preset-geometry\";\nexport { ShapeProperties, type ShapePropertiesOptions } from \"./drawingml/shape-properties\";\nexport {\n createPptxEffectList,\n ReflectionAlignment,\n type EffectsOptions,\n type ShadowOptions,\n type GlowOptions,\n type ReflectionOptions,\n type SoftEdgeOptions,\n} from \"./drawingml/effects\";\nexport { NonVisualDrawingProperties } from \"./drawingml/non-visual-drawing-props\";\nexport { NonVisualShapeProperties } from \"./drawingml/non-visual-shape-props\";\nexport { NonVisualPictureProperties } from \"./drawingml/non-visual-picture-props\";\nexport { GroupShapeProperties } from \"./drawingml/group-shape-properties\";\nexport { GroupTransform2D, type IGroupTransform2DOptions } from \"./drawingml/group-transform-2d\";\n\nexport { GroupShape, type GroupShapeOptions } from \"./shape/group-shape\";\nexport { LineShape, type LineShapeOptions } from \"./shape/line-shape\";\nexport { ConnectorShape, type ConnectorShapeOptions } from \"./shape/line-shape\";\nexport { Media } from \"./media/media\";\nexport { createTransformation, type MediaTransformation } from \"./media/media\";\nexport type { IMediaData, MediaDataTransformation } from \"./media/data\";\nexport {\n VideoFrame,\n type VideoFrameOptions,\n type VideoType,\n type PosterType,\n} from \"./media/video-frame\";\nexport { AudioFrame, type AudioFrameOptions, type AudioType } from \"./media/audio-frame\";\nexport { CoreProperties, type CorePropertiesOptions } from \"./core-properties/properties\";\nexport { AppProperties } from \"./app-properties/app-properties\";\nexport { ContentTypes } from \"./content-types/content-types\";\nexport { Relationships } from \"./relationships/relationships\";\nexport { type RelationshipType } from \"./relationships/relationship/relationship\";\nexport { Slide } from \"./slide/slide\";\nexport { type SlideChild } from \"./slide/slide-child\";\nexport { coerceChild } from \"./slide/coerce\";\nexport { ShapeTree } from \"./shape-tree/shape-tree\";\nexport {\n DefaultTheme,\n type ThemeOptions,\n type ColorSchemeOptions,\n type FontSchemeOptions,\n} from \"./theme/theme\";\nexport {\n DefaultSlideMaster,\n type SlideMasterOptions,\n type MasterPlaceholderOptions,\n type MasterPlaceholderPosition,\n} from \"./slide-master/slide-master\";\nexport { DefaultSlideLayout, SlideLayout, type SlideLayoutType } from \"./slide-layout/slide-layout\";\nexport { DefaultNotesMaster } from \"./notes-master/notes-master\";\nexport { NotesSlide, type NotesSlideOptions } from \"./notes/notes-slide\";\nexport { HeaderFooter, type SlideHeaderFooterOptions } from \"./header-footer/header-footer\";\nexport { PresentationWrapper, type ViewWrapper } from \"./presentation/presentation-wrapper\";\nexport { Picture, type PictureOptions } from \"./picture/picture\";\nexport { Background, type BackgroundOptions } from \"./background/background\";\nexport { Table, type TableOptions } from \"./table/table-frame\";\nexport { DrawingTable } from \"./table/table\";\nexport { TableRow, type TableRowOptions } from \"./table/table-row\";\nexport { TableCell, VerticalAlignment, type TableCellOptions } from \"./table/table-cell\";\nexport { TableProperties } from \"./table/table-properties\";\nexport { TableCellProperties, type CellBorderOptions } from \"./table/table-cell-properties\";\nexport { Chart, type ChartOptions } from \"./chart/chart-frame\";\nexport { ChartCollection, type ChartData } from \"./chart/chart-collection\";\nexport { ChartSpace, type ChartSpaceOptions, type ChartSeriesData } from \"./chart/chart-space\";\nexport type { ChartType } from \"./chart/chart-types/create-chart-type\";\nexport { SmartArt, type SmartArtOptions, type TreeNode } from \"./smartart\";\nexport {\n Transition,\n type TransitionOptions,\n type TransitionType,\n type TransitionDirection,\n} from \"./transition/transition\";\nexport {\n type AnimationType,\n type AnimationTrigger,\n type AnimationDirection,\n type AnimationClass,\n type EmphasisType,\n type PathAnimationType,\n type MediaAnimationType,\n type AnimationCalcMode,\n type AnimationValueType,\n type AnimationOptions,\n} from \"./animation/types\";\n","import { formatId } from \"@office-open/core\";\n\nexport function replaceHyperlinkPlaceholders(\n xml: string,\n hyperlinks: readonly { readonly key: string }[],\n offset: number,\n): string {\n let result = xml;\n for (let i = 0; i < hyperlinks.length; i++) {\n result = result.replaceAll(`{hlink:${hyperlinks[i].key}}`, formatId(offset, i, \"rId\"));\n }\n return result;\n}\n","import { formatId } from \"@office-open/core\";\n\nexport function replaceMediaPlaceholders(\n xml: string,\n mediaData: readonly { readonly fileName: string }[],\n offset: number,\n): string {\n let result = xml;\n for (let i = 0; i < mediaData.length; i++) {\n result = result.replaceAll(`{media:${mediaData[i].fileName}}`, formatId(offset, i, \"rId\"));\n }\n return result;\n}\n\nexport function replaceVideoPlaceholders(\n xml: string,\n mediaData: readonly { readonly fileName: string }[],\n offset: number,\n): string {\n let result = xml;\n for (let i = 0; i < mediaData.length; i++) {\n result = result.replaceAll(`{video:${mediaData[i].fileName}}`, formatId(offset, i, \"rId\"));\n }\n return result;\n}\n\nexport function getMediaRefs(\n xml: string,\n mediaArray: readonly { readonly fileName: string }[],\n): readonly { readonly fileName: string }[] {\n return collectRefs(xml, \"{media:\", mediaArray);\n}\n\nexport function getVideoRefs(\n xml: string,\n mediaArray: readonly { readonly fileName: string }[],\n): readonly { readonly fileName: string }[] {\n return collectRefs(xml, \"{video:\", mediaArray);\n}\n\nfunction collectRefs(\n xml: string,\n search: string,\n mediaArray: readonly { readonly fileName: string }[],\n): readonly { readonly fileName: string }[] {\n const keys = new Set<string>();\n let pos = 0;\n while ((pos = xml.indexOf(search, pos)) !== -1) {\n const keyStart = pos + search.length;\n const keyEnd = xml.indexOf(\"}\", keyStart);\n if (keyEnd === -1) break;\n keys.add(xml.substring(keyStart, keyEnd));\n pos = keyEnd + 1;\n }\n return mediaArray.filter((m) => keys.has(m.fileName));\n}\n","import { Formatter } from \"@export/formatter\";\nimport type { File } from \"@file/file\";\nimport type { IMediaData } from \"@file/media/data\";\nimport { DefaultNotesMaster } from \"@file/notes-master/notes-master\";\nimport {\n DEFAULT_DRAWING_XML,\n getColorXml,\n getLayoutXml,\n getStyleXml,\n} from \"@file/smartart/built-in-definitions\";\nimport type { Context } from \"@file/xml-components\";\nimport {\n ZIP_STORED_LEVEL,\n addSmartArtRelationships,\n collectPlaceholderKeys,\n compileMapping,\n getReferencedMedia,\n hasPlaceholders,\n replaceChartPlaceholders,\n replaceImagePlaceholders,\n replaceSmartArtPlaceholders,\n} from \"@office-open/core\";\nimport type { XmlifyedFile, Zippable } from \"@office-open/core\";\nimport { xml } from \"@office-open/xml\";\n\n/** Reusable TextEncoder (stateless, safe to share). */\nconst encoder = new TextEncoder();\n\ninterface XmlifyedFileMapping {\n [key: string]: { data: string; path: string };\n}\n\nimport { replaceHyperlinkPlaceholders } from \"./hyperlink-placeholders\";\nimport {\n getMediaRefs,\n getVideoRefs,\n replaceMediaPlaceholders,\n replaceVideoPlaceholders,\n} from \"./media-placeholders\";\n\nexport class Compiler {\n private readonly formatter = new Formatter();\n\n public compile(file: File, overrides: readonly XmlifyedFile[] = []): Zippable {\n const context: Context = { fileData: file, stack: [] };\n\n const mapping: XmlifyedFileMapping = {\n AppProperties: {\n data: this.formatter.formatToXml(file.appProperties, context),\n path: \"docProps/app.xml\",\n },\n Properties: {\n data: this.formatter.formatToXml(file.coreProperties, context),\n path: \"docProps/core.xml\",\n },\n FileRelationships: {\n data: this.formatter.formatToXml(file.fileRelationships, context),\n path: \"_rels/.rels\",\n },\n };\n\n // Static singletons (ImportedXmlComponent.toXml uses sourceXml directly)\n // Themes (one per master)\n const themes = file.themes;\n for (let ti = 0; ti < themes.length; ti++) {\n mapping[`Theme${ti}`] = {\n data: this.formatter.formatToXml(themes[ti], context),\n path: `ppt/theme/theme${ti + 1}.xml`,\n };\n }\n\n mapping[\"TableStyles\"] = {\n data: this.formatter.formatToXml(file.tableStyles, context),\n path: \"ppt/tableStyles.xml\",\n };\n\n mapping[\"PresProps\"] = {\n data: this.formatter.formatToXml(file.presProps, context),\n path: \"ppt/presProps.xml\",\n };\n\n mapping[\"ViewProps\"] = {\n data: this.formatter.formatToXml(file.viewProps, context),\n path: \"ppt/viewProps.xml\",\n };\n\n // Slide Masters\n const masters = file.slideMasters;\n const masterRels = file.slideMasterRelsArray;\n for (let mi = 0; mi < masters.length; mi++) {\n mapping[`SlideMaster${mi}`] = {\n data: this.formatter.formatToXml(masters[mi], context),\n path: `ppt/slideMasters/slideMaster${mi + 1}.xml`,\n };\n mapping[`SlideMasterRels${mi}`] = {\n data: this.formatter.formatToXml(masterRels[mi], context),\n path: `ppt/slideMasters/_rels/slideMaster${mi + 1}.xml.rels`,\n };\n }\n\n // Slide Layouts\n const layouts = file.allLayouts;\n const layoutRels = file.allLayoutRelsArray;\n for (let li = 0; li < layouts.length; li++) {\n mapping[`SlideLayout${li}`] = {\n data: this.formatter.formatToXml(layouts[li].layout, context),\n path: `ppt/slideLayouts/slideLayout${li + 1}.xml`,\n };\n mapping[`SlideLayoutRels${li}`] = {\n data: this.formatter.formatToXml(layoutRels[li], context),\n path: `ppt/slideLayouts/_rels/slideLayout${li + 1}.xml.rels`,\n };\n }\n\n // Register layout content types\n for (let i = 0; i < layouts.length; i++) {\n file.contentTypes.addSlideLayout(i + 1);\n }\n // Register master + theme content types\n for (let mi = 0; mi < masters.length; mi++) {\n file.contentTypes.addSlideMaster(mi + 1);\n file.contentTypes.addTheme(mi + 1);\n }\n\n // Notes Master — only when notes slides exist\n if (file.notesSlides.length > 0) {\n file.presentationWrapper.relationships.addRelationship(\n file.presentationWrapper.relationships.relationshipCount + 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster\",\n \"notesMasters/notesMaster1.xml\",\n );\n mapping[\"NotesMaster\"] = {\n data: this.formatter.formatToXml(new DefaultNotesMaster(), context),\n path: \"ppt/notesMasters/notesMaster1.xml\",\n };\n mapping[\"NotesMasterRelationships\"] = {\n data: this.formatter.formatToXml(file.notesMasterRelationships, context),\n path: \"ppt/notesMasters/_rels/notesMaster1.xml.rels\",\n };\n }\n\n // Comment Authors — only when comments exist\n if (file.commentAuthorList) {\n file.presentationWrapper.relationships.addRelationship(\n file.presentationWrapper.relationships.relationshipCount + 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/commentAuthors\",\n \"commentAuthors.xml\",\n );\n }\n\n // Presentation + its relationships\n const presentationXml = this.formatter.formatToXml(file.presentationWrapper.view, context);\n let currentImageCount = 0;\n\n const mediaData = getReferencedMedia(presentationXml, file.media.array);\n const presImageOffset = file.presentationWrapper.relationships.relationshipCount + 1;\n for (let idx = 0; idx < mediaData.length; idx++) {\n file.presentationWrapper.relationships.addRelationship(\n presImageOffset + idx,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n `../media/${mediaData[idx].fileName}`,\n );\n }\n\n const replacedPresentationXml = replaceImagePlaceholders(\n presentationXml,\n mediaData,\n presImageOffset,\n );\n currentImageCount += mediaData.length;\n\n mapping[\"Presentation\"] = {\n data: replacedPresentationXml,\n path: \"ppt/presentation.xml\",\n };\n\n mapping[\"PresentationRelationships\"] = {\n data: this.formatter.formatToXml(file.presentationWrapper.relationships, context),\n path: \"ppt/_rels/presentation.xml.rels\",\n };\n\n // Slides — format BEFORE ContentTypes so Chart.toXml() populates Charts\n for (let i = 0; i < file.slides.length; i++) {\n const slideWrapper = file.slideWrappers[i];\n const slideXml = this.formatter.formatToXml(slideWrapper.view, context);\n\n const slideMediaData = getReferencedMedia(slideXml, file.media.array);\n const slideImageOffset = slideWrapper.relationships.relationshipCount + 1;\n for (let idx = 0; idx < slideMediaData.length; idx++) {\n slideWrapper.relationships.addRelationship(\n slideImageOffset + idx,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n `../media/${slideMediaData[idx].fileName}`,\n );\n }\n\n let replacedSlideXml = replaceImagePlaceholders(slideXml, slideMediaData, slideImageOffset);\n currentImageCount += slideMediaData.length;\n\n // Placeholder replacement — single pre-check avoids 4 regex scans when none exist\n if (hasPlaceholders(replacedSlideXml)) {\n // Chart placeholder replacement\n const slideChartKeys = collectPlaceholderKeys(replacedSlideXml, \"chart:\");\n if (slideChartKeys.length > 0) {\n const slideChartOffset = slideWrapper.relationships.relationshipCount + 1;\n const slideChartKeySet = new Set(slideChartKeys);\n const slideCharts = file.charts.array.filter((c) => slideChartKeySet.has(c.key));\n\n replacedSlideXml = replaceChartPlaceholders(\n replacedSlideXml,\n slideCharts.map((c) => c.key),\n slideChartOffset,\n );\n\n for (let ci = 0; ci < slideCharts.length; ci++) {\n const chartData = slideCharts[ci];\n const globalIndex = file.charts.array.indexOf(chartData);\n slideWrapper.relationships.addRelationship(\n slideChartOffset + ci,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\",\n `../charts/chart${globalIndex + 1}.xml`,\n );\n }\n }\n\n // SmartArt placeholder replacement\n const slideSmartArtKeys = collectPlaceholderKeys(replacedSlideXml, \"smartart:\");\n if (slideSmartArtKeys.length > 0) {\n const slideSmartArtKeySet = new Set(slideSmartArtKeys);\n const slideSmartArts = file.smartArts.array.filter((s) => slideSmartArtKeySet.has(s.key));\n const saOffset = slideWrapper.relationships.relationshipCount + 1;\n\n replacedSlideXml = replaceSmartArtPlaceholders(\n replacedSlideXml,\n slideSmartArts.map((s) => s.key),\n saOffset,\n );\n\n const saGlobalStart = file.smartArts.array.indexOf(slideSmartArts[0]);\n addSmartArtRelationships(\n slideSmartArts.map((s) => s.key),\n (id, type, target) => {\n slideWrapper.relationships.addRelationship(id, type, target);\n },\n saOffset,\n saGlobalStart,\n {\n pathPrefix: \"../\",\n styleRelType:\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramQuickStyle\",\n },\n );\n }\n\n // Hyperlink placeholder replacement\n const slideHlinkKeys = collectPlaceholderKeys(replacedSlideXml, \"hlink:\");\n if (slideHlinkKeys.length > 0) {\n const slideHlinkKeySet = new Set(slideHlinkKeys);\n const slideHlinks = file.hyperlinks.array.filter((h) => slideHlinkKeySet.has(h.key));\n const hlinkOffset = slideWrapper.relationships.relationshipCount + 1;\n\n replacedSlideXml = replaceHyperlinkPlaceholders(\n replacedSlideXml,\n slideHlinks,\n hlinkOffset,\n );\n\n for (let hi = 0; hi < slideHlinks.length; hi++) {\n slideWrapper.relationships.addRelationship(\n hlinkOffset + hi,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",\n slideHlinks[hi].url,\n \"External\",\n );\n }\n }\n\n // Media (video/audio) placeholder replacement\n const slideMediaRefs = getMediaRefs(replacedSlideXml, file.media.array);\n const slideVideoRefs = getVideoRefs(replacedSlideXml, file.media.array);\n\n if (slideMediaRefs.length > 0 || slideVideoRefs.length > 0) {\n const mediaOffset = slideWrapper.relationships.relationshipCount + 1;\n const videoOffset = mediaOffset + slideMediaRefs.length;\n\n replacedSlideXml = replaceMediaPlaceholders(\n replacedSlideXml,\n slideMediaRefs,\n mediaOffset,\n );\n\n replacedSlideXml = replaceVideoPlaceholders(\n replacedSlideXml,\n slideVideoRefs,\n videoOffset,\n );\n\n for (let mi = 0; mi < slideMediaRefs.length; mi++) {\n slideWrapper.relationships.addRelationship(\n mediaOffset + mi,\n \"http://schemas.microsoft.com/office/2007/relationships/media\",\n `../media/${slideMediaRefs[mi].fileName}`,\n );\n }\n\n for (let vi = 0; vi < slideVideoRefs.length; vi++) {\n slideWrapper.relationships.addRelationship(\n videoOffset + vi,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/video\",\n `../media/${slideVideoRefs[vi].fileName}`,\n );\n }\n }\n }\n\n mapping[`Slide${i}`] = {\n data: replacedSlideXml,\n path: `ppt/slides/slide${i + 1}.xml`,\n };\n\n // Add comment relationship for this slide\n const slideComments = file.slideCommentLists[i];\n if (slideComments) {\n slideWrapper.relationships.addRelationship(\n slideWrapper.relationships.relationshipCount + 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\",\n `../comments/comment${i + 1}.xml`,\n );\n }\n\n // Add notesSlide relationship for this slide (if it has notes)\n const notesSlideIndex = file.notesSlideIndexMap.get(i);\n if (notesSlideIndex !== undefined) {\n slideWrapper.relationships.addRelationship(\n slideWrapper.relationships.relationshipCount + 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide\",\n `../notesSlides/notesSlide${notesSlideIndex + 1}.xml`,\n );\n }\n\n mapping[`SlideRelationships${i}`] = {\n data: this.formatter.formatToXml(slideWrapper.relationships, context),\n path: `ppt/slides/_rels/slide${i + 1}.xml.rels`,\n };\n }\n\n // ContentTypes — AFTER slides so Charts.Array is populated\n for (let i = 0; i < file.charts.array.length; i++) {\n file.contentTypes.addChart(i + 1);\n }\n for (let i = 0; i < file.smartArts.array.length; i++) {\n file.contentTypes.addDiagramData(i + 1);\n file.contentTypes.addDiagramLayout(i + 1);\n file.contentTypes.addDiagramStyle(i + 1);\n file.contentTypes.addDiagramColors(i + 1);\n file.contentTypes.addDiagramDrawing(i + 1);\n }\n mapping[\"ContentTypes\"] = {\n data: this.formatter.formatToXml(file.contentTypes, context),\n path: \"[Content_Types].xml\",\n };\n\n // Convert mapping to Zippable (XML files use global DEFLATE default)\n const files = compileMapping(mapping, overrides);\n\n // Add chart parts\n for (let i = 0; i < file.charts.array.length; i++) {\n const chartData = file.charts.array[i];\n files[`ppt/charts/chart${i + 1}.xml`] = encoder.encode(\n this.formatter.formatToXml(chartData.chartSpace, context),\n );\n files[`ppt/charts/_rels/chart${i + 1}.xml.rels`] = encoder.encode(\n xml(\n {\n Relationships: {\n _attr: {\n xmlns: \"http://schemas.openxmlformats.org/package/2006/relationships\",\n },\n },\n },\n { declaration: { encoding: \"UTF-8\", standalone: \"yes\" } },\n ),\n );\n }\n\n // Add SmartArt diagram parts\n for (let i = 0; i < file.smartArts.array.length; i++) {\n const smartArtData = file.smartArts.array[i];\n files[`ppt/diagrams/data${i + 1}.xml`] = encoder.encode(\n this.formatter.formatToXml(smartArtData.dataModel, context),\n );\n files[`ppt/diagrams/layout${i + 1}.xml`] = encoder.encode(getLayoutXml(smartArtData.layout));\n files[`ppt/diagrams/quickStyle${i + 1}.xml`] = encoder.encode(\n getStyleXml(smartArtData.style),\n );\n files[`ppt/diagrams/colors${i + 1}.xml`] = encoder.encode(getColorXml(smartArtData.color));\n files[`ppt/diagrams/drawing${i + 1}.xml`] = encoder.encode(DEFAULT_DRAWING_XML);\n }\n\n // Add notes slides\n for (let i = 0; i < file.notesSlides.length; i++) {\n const notesSlide = file.notesSlides[i];\n files[`ppt/notesSlides/notesSlide${i + 1}.xml`] = encoder.encode(\n this.formatter.formatToXml(notesSlide, context),\n );\n files[`ppt/notesSlides/_rels/notesSlide${i + 1}.xml.rels`] = encoder.encode(\n xml(\n {\n Relationships: {\n _attr: {\n xmlns: \"http://schemas.openxmlformats.org/package/2006/relationships\",\n },\n },\n },\n { declaration: { encoding: \"UTF-8\", standalone: \"yes\" } },\n ),\n );\n }\n\n // Add comment authors\n if (file.commentAuthorList) {\n files[\"ppt/commentAuthors.xml\"] = encoder.encode(\n this.formatter.formatToXml(file.commentAuthorList, context),\n );\n }\n\n // Add slide comments\n const commentLists = file.slideCommentLists;\n for (let i = 0; i < commentLists.length; i++) {\n if (commentLists[i]) {\n files[`ppt/comments/comment${i + 1}.xml`] = encoder.encode(\n this.formatter.formatToXml(commentLists[i]!, context),\n );\n }\n }\n\n // Add media files (STORE — already-compressed formats)\n for (const image of file.media.array) {\n files[`ppt/media/${image.fileName}`] = [image.data, { level: ZIP_STORED_LEVEL }];\n if (image.type === \"svg\" && \"fallback\" in image) {\n const fallback = (\n image as IMediaData & {\n readonly fallback: { readonly fileName: string; readonly data: Uint8Array };\n }\n ).fallback;\n files[`ppt/media/${fallback.fileName}`] = [fallback.data, { level: ZIP_STORED_LEVEL }];\n }\n }\n\n return files;\n }\n}\n","import type { File } from \"@file/file\";\nimport { createPacker, OoxmlMimeType } from \"@office-open/core\";\n\nimport { Compiler } from \"./next-compiler\";\n\nconst compiler = new Compiler();\n\nexport const Packer = createPacker<File>({\n compile: (file, overrides) => compiler.compile(file, overrides),\n mimeType: OoxmlMimeType.PPTX,\n});\n","export {\n convertPixelsToEmu,\n convertEmuToPixels,\n convertInchesToEmu,\n convertEmuToInches,\n convertPointsToEmu,\n convertEmuToPoints,\n} from \"@office-open/core\";\n\n/** Convert percentage to thousandths of a percent (used in some OOXML attributes) */\nexport const percentToTHousandths = (percent: number): number => Math.round(percent * 1000);\n\n/** Common slide size presets (in pixels at 96 DPI) */\nexport const SlideSizePreset = {\n WIDE: { width: 960, height: 540 },\n STANDARD_4X3: { width: 720, height: 540 },\n WIDESCREEN_16X10: { width: 960, height: 600 },\n WIDESCREEN_16X9: { width: 960, height: 540 },\n} as const;\n","export * from \"./convenience-functions\";\nexport * from \"./types\";\nexport * from \"./values\";\n","/**\n * Parse context for PPTX documents.\n *\n * @module\n */\nimport type { PptxDocument } from \"../parse\";\n\nexport class ParseContext {\n constructor(\n readonly pptx: PptxDocument,\n /** Slide relationship ID → path, parsed from slide's _rels file */\n readonly slideRels: Map<string, string>,\n ) {}\n}\n","/**\n * Animation parser for PPTX documents.\n *\n * Parses p:timing elements and maps animations to their target shapes.\n *\n * @module\n */\nimport { attr, attrNum, findChild } from \"@office-open/xml\";\nimport type { Element } from \"@office-open/xml\";\n\nimport type {\n AnimationOptions,\n AnimationType,\n EmphasisType,\n PathAnimationType,\n} from \"../file/animation/types\";\n\n// Reverse lookup maps: presetID → type name\nconst ENTR_PRESET_TO_TYPE = new Map<number, AnimationType>();\nconst EXIT_PRESET_TO_TYPE = new Map<number, AnimationType>();\nconst EMPH_PRESET_TO_ID = new Map<number, EmphasisType>();\nconst PATH_PRESET_TO_TYPE = new Map<number, PathAnimationType>();\n\n// Build reverse maps (inline to avoid importing from file module)\nconst ENTR_IDS: Record<AnimationType, number> = {\n appear: 1,\n fade: 10,\n fly: 2,\n wipe: 22,\n dissolve: 34,\n split: 21,\n blinds: 25,\n checker: 26,\n randomBars: 24,\n wheel: 27,\n zoom: 10,\n cover: 28,\n push: 19,\n strips: 23,\n};\nconst EXIT_IDS: Record<AnimationType, number> = {\n appear: 53,\n fade: 59,\n fly: 51,\n wipe: 72,\n dissolve: 84,\n split: 71,\n blinds: 75,\n checker: 76,\n randomBars: 74,\n wheel: 77,\n zoom: 60,\n cover: 78,\n push: 69,\n strips: 73,\n};\nconst EMPH_IDS: Record<EmphasisType, number> = {\n growShrink: 53,\n spin: 54,\n growWithTurn: 56,\n colorChange: 29,\n transparency: 57,\n boldFlash: 50,\n wave: 55,\n pulse: 58,\n};\nconst PATH_IDS: Record<PathAnimationType, number> = {\n customPath: 200,\n arc: 201,\n bounce: 202,\n circle: 203,\n curve: 204,\n figureEight: 205,\n line: 206,\n loop: 207,\n};\n\nfor (const [k, v] of Object.entries(ENTR_IDS)) ENTR_PRESET_TO_TYPE.set(v, k as AnimationType);\nfor (const [k, v] of Object.entries(EXIT_IDS)) EXIT_PRESET_TO_TYPE.set(v, k as AnimationType);\nfor (const [k, v] of Object.entries(EMPH_IDS)) EMPH_PRESET_TO_ID.set(v, k as EmphasisType);\nfor (const [k, v] of Object.entries(PATH_IDS)) PATH_PRESET_TO_TYPE.set(v, k as PathAnimationType);\n\n// Direction subtype reverse map\nconst SUBTYPE_TO_DIRECTION = new Map<number, string>();\nconst DIRECTION_SUBTYPES: Record<string, number> = {\n left: 4,\n right: 8,\n up: 2,\n down: 1,\n horizontal: 16,\n vertical: 32,\n};\nfor (const [k, v] of Object.entries(DIRECTION_SUBTYPES)) SUBTYPE_TO_DIRECTION.set(v, k);\n\n/**\n * Parse p:timing element and return a map of shape ID → AnimationOptions.\n */\nexport function parseTiming(el: Element): Map<number, AnimationOptions> {\n const result = new Map<number, AnimationOptions>();\n\n // p:timing > p:tnLst > p:par > p:cTn(nodeType=mainSeq) > p:childTnLst > p:seq\n const tnLst = findChild(el, \"p:tnLst\");\n if (!tnLst) return result;\n\n const mainPar = findChild(tnLst, \"p:par\");\n if (!mainPar) return result;\n\n const mainCTn = findChild(mainPar, \"p:cTn\");\n if (!mainCTn) return result;\n\n const childTnLst = findChild(mainCTn, \"p:childTnLst\");\n if (!childTnLst) return result;\n\n const seq = findChild(childTnLst, \"p:seq\");\n if (!seq) return result;\n\n const seqCTn = findChild(seq, \"p:cTn\");\n const seqChildTnLst = seqCTn ? findChild(seqCTn, \"p:childTnLst\") : undefined;\n if (!seqChildTnLst) return result;\n\n // Each p:par in the seq childTnLst is an animation sequence entry\n for (const parEl of seqChildTnLst.elements ?? []) {\n if (parEl.name !== \"p:par\") continue;\n\n const parCTn = findChild(parEl, \"p:cTn\");\n if (!parCTn) continue;\n\n const parChildTnLst = findChild(parCTn, \"p:childTnLst\");\n if (!parChildTnLst) continue;\n\n // Iterate effects within the par\n for (const effectEl of parChildTnLst.elements ?? []) {\n const anim = parseAnimationEffect(effectEl);\n if (!anim) continue;\n\n // Extract target shape ID\n const shapeId = extractTargetShapeId(effectEl);\n if (shapeId !== undefined) {\n result.set(shapeId, anim);\n }\n }\n }\n\n return result;\n}\n\nfunction parseAnimationEffect(el: Element): AnimationOptions | undefined {\n const opts: Record<string, unknown> = {};\n\n const cTn = findChild(el, \"p:cTn\") ?? el;\n\n // Trigger type from nodeType\n const nodeType = attr(cTn, \"nodeType\");\n if (nodeType === \"clickEffect\") opts.trigger = \"onClick\";\n else if (nodeType === \"withEffect\") opts.trigger = \"withPrevious\";\n else if (nodeType === \"afterEffect\") opts.trigger = \"afterPrevious\";\n\n // Preset class (entr/exit/emph/mediacall)\n const presetClass = attr(cTn, \"presetClass\");\n if (presetClass) opts.class = presetClass;\n\n // Preset ID → animation type\n const presetID = attrNum(cTn, \"presetID\");\n\n // Duration\n const dur = attr(cTn, \"dur\");\n if (dur) {\n const ms = parseDuration(dur);\n if (ms !== undefined) opts.duration = ms;\n }\n\n // Delay from p:stCondLst\n const stCondLst = findChild(cTn, \"p:stCondLst\");\n if (stCondLst) {\n const cond = findChild(stCondLst, \"p:cond\");\n if (cond) {\n const delay = attr(cond, \"delay\");\n if (delay) {\n const ms = parseDuration(delay);\n if (ms !== undefined) opts.delay = ms;\n }\n }\n }\n\n // Direction from presetSubtype\n const presetSubtype = attrNum(cTn, \"presetSubtype\");\n if (presetSubtype !== undefined) {\n const dir = SUBTYPE_TO_DIRECTION.get(presetSubtype);\n if (dir) opts.direction = dir as AnimationOptions[\"direction\"];\n }\n\n // Determine type from presetID and class\n if (presetID !== undefined) {\n const cls = presetClass ?? \"entr\";\n if (cls === \"entr\") {\n const type = ENTR_PRESET_TO_TYPE.get(presetID);\n if (type) opts.type = type;\n } else if (cls === \"exit\") {\n const type = EXIT_PRESET_TO_TYPE.get(presetID);\n if (type) opts.type = type;\n } else if (cls === \"emph\") {\n const emphType = EMPH_PRESET_TO_ID.get(presetID);\n if (emphType) {\n opts.emphasisType = emphType;\n opts.type = \"appear\"; // fallback type\n }\n } else if (cls === \"mediacall\") {\n opts.mediaType = \"play\";\n opts.type = \"appear\";\n }\n }\n\n // Check for sub-effect types\n const childTnLst = findChild(cTn, \"p:childTnLst\");\n if (childTnLst) {\n for (const sub of childTnLst.elements ?? []) {\n switch (sub.name) {\n case \"p:animEffect\": {\n // Duration is inside p:animEffect > p:cBhvr > p:cTn\n if (opts.duration === undefined) {\n const cBhvr = findChild(sub, \"p:cBhvr\");\n const subCTn = cBhvr ? findChild(cBhvr, \"p:cTn\") : undefined;\n if (subCTn) {\n const subDur = attr(subCTn, \"dur\");\n if (subDur) {\n const ms = parseDuration(subDur);\n if (ms !== undefined) opts.duration = ms;\n }\n }\n }\n break;\n }\n case \"p:anim\": {\n const subCTn = findChild(sub, \"p:cTn\");\n if (subCTn) {\n const attrName = findChild(subCTn, \"p:attrNameLst\");\n if (attrName) {\n const name = findChild(attrName, \"p:attrName\");\n if (name) {\n const text = name.elements?.[0]?.text;\n if (text) opts.attributeName = text as string;\n }\n }\n }\n const from = findChild(sub, \"p:cb\");\n if (from) {\n const val = findChild(from, \"p:val\");\n if (val) {\n const v = attr(val, \"val\");\n if (v) opts.from = v;\n }\n }\n // Simplified: look at to value from tavLst\n const toEl = findChild(sub, \"p:tavLst\");\n if (toEl) {\n const tav = findChild(toEl, \"p:tav\");\n if (tav) {\n const toVal = findChild(tav, \"p:val\");\n if (toVal) {\n const v = attr(toVal, \"val\");\n if (v) opts.to = v;\n }\n }\n }\n break;\n }\n case \"p:animMotion\": {\n opts.pathType = \"customPath\" as PathAnimationType;\n const path = attr(sub, \"path\");\n if (path) opts.path = path;\n break;\n }\n case \"p:animScale\": {\n opts.emphasisType = \"growShrink\" as EmphasisType;\n readSubDuration(sub, opts);\n break;\n }\n case \"p:animRot\": {\n opts.emphasisType = \"spin\" as EmphasisType;\n readSubDuration(sub, opts);\n break;\n }\n case \"p:animClr\": {\n opts.emphasisType = \"colorChange\" as EmphasisType;\n readSubDuration(sub, opts);\n break;\n }\n case \"p:cmd\": {\n const cmdType = attr(sub, \"type\");\n if (cmdType === \"call\") opts.mediaType = \"play\";\n break;\n }\n }\n }\n }\n\n return Object.keys(opts).length > 0 ? (opts as AnimationOptions) : undefined;\n}\n\nfunction extractTargetShapeId(el: Element): number | undefined {\n // Look for p:cBhvr > p:tgtEl > p:spTgt > @spid\n const cBhvr = findDeep(el, \"p:cBhvr\")[0];\n if (!cBhvr) return undefined;\n\n const tgtEl = findChild(cBhvr, \"p:tgtEl\");\n if (!tgtEl) return undefined;\n\n const spTgt = findChild(tgtEl, \"p:spTgt\");\n if (!spTgt) return undefined;\n\n return attrNum(spTgt, \"spid\");\n}\n\nfunction findDeep(parent: Element, name: string): Element[] {\n const results: Element[] = [];\n\n function walk(el: Element): void {\n if (el.name === name) {\n results.push(el);\n return;\n }\n for (const child of el.elements ?? []) {\n walk(child);\n }\n }\n\n for (const child of parent.elements ?? []) {\n walk(child);\n }\n return results;\n}\n\n/**\n * Read duration from p:cBhvr > p:cTn inside a sub-effect element.\n */\nfunction readSubDuration(sub: Element, opts: Record<string, unknown>): void {\n if (opts.duration !== undefined) return;\n const cBhvr = findChild(sub, \"p:cBhvr\");\n const subCTn = cBhvr ? findChild(cBhvr, \"p:cTn\") : undefined;\n if (subCTn) {\n const subDur = attr(subCTn, \"dur\");\n if (subDur) {\n const ms = parseDuration(subDur);\n if (ms !== undefined) opts.duration = ms;\n }\n }\n}\n\n/**\n * Parse OOXML duration string to milliseconds.\n * Format: \"PT#H#M#S\" or \"###ms\" or just a number string\n */\nfunction parseDuration(val: string): number | undefined {\n // \"PT0.5S\" → 500, \"PT1S\" → 1000, \"PT0S\" → 0\n if (val.startsWith(\"PT\")) {\n let ms = 0;\n const sMatch = val.match(/(\\d+\\.?\\d*)S/);\n if (sMatch) ms += Math.round(parseFloat(sMatch[1]) * 1000);\n const mMatch = val.match(/(\\d+\\.?\\d*)M/);\n if (mMatch) ms += Math.round(parseFloat(mMatch[1]) * 60000);\n const hMatch = val.match(/(\\d+\\.?\\d*)H/);\n if (hMatch) ms += Math.round(parseFloat(hMatch[1]) * 3600000);\n return ms;\n }\n // \"indefinite\" → undefined\n if (val === \"indefinite\") return undefined;\n // Plain number string (already ms)\n const num = parseInt(val, 10);\n return isNaN(num) ? undefined : num;\n}\n","/**\n * Slide parser for PPTX documents.\n *\n * Parses p:sld elements into SlideOptions.\n *\n * @module\n */\nimport { convertEmuToPixels, xsdLineEndSize } from \"@office-open/core\";\nimport {\n attr,\n attrBool,\n attrNum,\n children,\n colorAttr,\n findChild,\n findDeep,\n textOf,\n} from \"@office-open/xml\";\nimport type { Element } from \"@office-open/xml\";\n\nimport type { BackgroundOptions } from \"../file/background/background\";\nimport type { ChartOptions } from \"../file/chart/chart-frame\";\nimport type { SlideOptions } from \"../file/file\";\nimport type { AudioFrameOptions } from \"../file/media/audio-frame\";\nimport type { VideoFrameOptions } from \"../file/media/video-frame\";\nimport type { PictureOptions } from \"../file/picture/picture\";\nimport type { GroupShapeOptions } from \"../file/shape/group-shape\";\nimport type {\n ArrowheadType,\n ConnectorShapeOptions,\n LineShapeOptions,\n} from \"../file/shape/line-shape\";\nimport type { ShapeOptions } from \"../file/shape/shape\";\nimport type { SlideChild } from \"../file/slide/slide-child\";\nimport type { SmartArtOptions } from \"../file/smartart/smartart-frame\";\nimport type { TableOptions } from \"../file/table/table-frame\";\nimport type {\n TransitionOptions,\n TransitionDirection,\n TransitionType,\n} from \"../file/transition/transition\";\nimport { parseTiming } from \"./animation\";\nimport type { ParseContext } from \"./context\";\n\n// ── Slide parser ──────────────────────────────────────────────────────────────\n\n/**\n * Parse a p:sld element into SlideOptions.\n */\nexport function parseSlide(el: Element, ctx: ParseContext): SlideOptions {\n const opts: Record<string, unknown> = {};\n\n // p:cSld\n const cSld = findChild(el, \"p:cSld\");\n if (cSld) {\n // Background\n const bg = findChild(cSld, \"p:bg\");\n if (bg) opts.background = parseBackground(bg);\n\n // Shape tree → children\n const spTree = findChild(cSld, \"p:spTree\");\n if (spTree) {\n const slideChildren: SlideChild[] = [];\n for (const child of spTree.elements ?? []) {\n const parsed = parseSlideChild(child, ctx);\n if (parsed !== undefined) slideChildren.push(parsed);\n }\n if (slideChildren.length > 0) opts.children = slideChildren;\n }\n\n // Header/Footer (p:hf)\n const hf = findChild(cSld, \"p:hf\");\n if (hf) {\n const hfOpts: Record<string, unknown> = {};\n if (findChild(hf, \"p:sldNum\")) hfOpts.slideNumber = true;\n if (findChild(hf, \"p:dt\")) hfOpts.dateTime = true;\n if (findChild(hf, \"p:ftr\")) hfOpts.footer = true;\n if (findChild(hf, \"p:hdr\")) hfOpts.header = true;\n if (Object.keys(hfOpts).length > 0) opts.headerFooter = hfOpts;\n }\n }\n\n // p:transition\n const transition = findChild(el, \"p:transition\");\n if (transition) opts.transition = parseTransition(transition);\n\n // p:timing → animation (attach to shapes by ID)\n const timing = findChild(el, \"p:timing\");\n if (timing) {\n const animMap = parseTiming(timing);\n if (animMap.size > 0 && opts.children) {\n // Build ID → child index map\n const children = opts.children as SlideChild[];\n for (let i = 0; i < children.length; i++) {\n const child = children[i] as Record<string, unknown>;\n const inner = (child[Object.keys(child)[0]] ?? {}) as Record<string, unknown>;\n const shapeId = inner.id as number | undefined;\n if (shapeId !== undefined && animMap.has(shapeId)) {\n inner.animation = animMap.get(shapeId);\n }\n }\n }\n }\n\n // Notes via slide rels (notesSlide relationship)\n for (const [, path] of ctx.slideRels) {\n if (!path.includes(\"notesSlides\")) continue;\n const notesEl = ctx.pptx.doc.get(path);\n if (!notesEl) continue;\n const notes = parseNotesSlide(notesEl);\n if (notes) opts.notes = notes;\n break;\n }\n\n return opts as SlideOptions;\n}\n\n// ── Slide child dispatch ──────────────────────────────────────────────────────\n\nexport function parseSlideChild(el: Element, ctx: ParseContext): SlideChild | undefined {\n switch (el.name) {\n case \"p:sp\": {\n // Check if it's a line shape (prstGeom with prst=\"line\")\n const spPr = findChild(el, \"p:spPr\");\n const prstGeom = spPr ? findChild(spPr, \"a:prstGeom\") : undefined;\n const prst = prstGeom ? attr(prstGeom, \"prst\") : undefined;\n if (prst === \"line\") {\n return { line: parseLineShape(el) };\n }\n return { shape: parseShape(el, ctx) };\n }\n case \"p:pic\": {\n // Check for video/audio extension URI in nvPr\n const mediaType = detectMediaType(el);\n if (mediaType === \"video\") {\n return {\n video: parseMediaFrame(el, ctx, \"video\") as unknown as VideoFrameOptions,\n };\n }\n if (mediaType === \"audio\") {\n return {\n audio: parseMediaFrame(el, ctx, \"audio\") as unknown as AudioFrameOptions,\n };\n }\n return { picture: parsePicture(el, ctx) };\n }\n case \"p:graphicFrame\":\n return parseGraphicFrame(el, ctx);\n case \"p:cxnSp\":\n return { connector: parseConnector(el) };\n case \"p:grpSp\":\n return { group: parseGroup(el, ctx) };\n default:\n return undefined;\n }\n}\n\n// ── Background parser ─────────────────────────────────────────────────────────\n\nexport function parseBackground(el: Element): BackgroundOptions {\n const opts: Record<string, unknown> = {};\n const bgPr = findChild(el, \"p:bgPr\");\n if (bgPr) {\n const shadeToTitle = attrBool(bgPr, \"shadeToTitle\");\n if (shadeToTitle) opts.shadeToTitle = true;\n\n // Parse fill\n const fill = parseFillFromElement(bgPr);\n if (fill) opts.fill = fill;\n }\n return opts as BackgroundOptions;\n}\n\n// ── Transition parser ─────────────────────────────────────────────────────────\n\nconst DIRECTION_REVERSE: Record<string, TransitionDirection> = {\n l: \"left\",\n u: \"up\",\n r: \"right\",\n d: \"down\",\n lu: \"leftUp\",\n ru: \"rightUp\",\n ld: \"leftDown\",\n rd: \"rightDown\",\n out: \"out\",\n in: \"in\",\n};\n\nconst SPEED_MAP: Record<string, \"slow\" | \"med\" | \"fast\"> = {\n slow: \"slow\",\n med: \"med\",\n fast: \"fast\",\n};\n\nfunction parseTransition(el: Element): TransitionOptions {\n const opts: Record<string, unknown> = {};\n\n const spd = attr(el, \"spd\");\n if (spd && spd in SPEED_MAP) opts.speed = SPEED_MAP[spd];\n\n const advClick = attrBool(el, \"advClick\");\n if (advClick !== undefined) opts.advanceOnClick = advClick;\n\n const advTm = attrNum(el, \"advTm\");\n if (advTm !== undefined) opts.advanceAfterTime = advTm;\n\n // Find transition type element\n for (const child of el.elements ?? []) {\n if (!child.name) continue;\n const typeName = child.name.replace(\"p:\", \"\") as TransitionType;\n const knownTypes = new Set([\n \"fade\",\n \"push\",\n \"wipe\",\n \"split\",\n \"blinds\",\n \"checker\",\n \"comb\",\n \"randomBar\",\n \"cover\",\n \"pull\",\n \"strips\",\n \"wheel\",\n \"zoom\",\n \"circle\",\n \"dissolve\",\n \"diamond\",\n \"newsflash\",\n \"plus\",\n \"wedge\",\n \"random\",\n \"cut\",\n ]);\n if (knownTypes.has(typeName)) {\n opts.type = typeName;\n const dir = attr(child, \"dir\");\n if (dir && dir in DIRECTION_REVERSE) opts.direction = DIRECTION_REVERSE[dir];\n const orient = attr(child, \"orient\");\n if (orient) opts.orient = orient as \"horz\" | \"vert\";\n const thruBlk = attrBool(child, \"thruBlk\");\n if (thruBlk !== undefined) opts.thruBlk = thruBlk;\n const spokes = attrNum(child, \"spokes\");\n if (spokes !== undefined) opts.spokes = spokes;\n break;\n }\n }\n\n return opts as TransitionOptions;\n}\n\n// ── Shape parser ──────────────────────────────────────────────────────────────\n\nfunction parseShape(el: Element, ctx: ParseContext): ShapeOptions {\n const opts: Record<string, unknown> = {};\n\n // p:nvSpPr → id, name, placeholder\n const nvSpPr = findChild(el, \"p:nvSpPr\");\n if (nvSpPr) {\n const cNvPr = findChild(nvSpPr, \"p:cNvPr\");\n if (cNvPr) {\n const id = attrNum(cNvPr, \"id\");\n if (id !== undefined) opts.id = id;\n const name = attr(cNvPr, \"name\");\n if (name) opts.name = name;\n }\n // Placeholder\n const nvPr = findChild(nvSpPr, \"p:nvPr\");\n if (nvPr) {\n const ph = findChild(nvPr, \"p:ph\");\n if (ph) {\n const phType = attr(ph, \"type\");\n if (phType) opts.placeholder = phType;\n const phIdx = attrNum(ph, \"idx\");\n if (phIdx !== undefined) opts.placeholderIndex = phIdx;\n }\n }\n }\n\n // p:spPr → position, geometry, fill, outline, effects\n const spPr = findChild(el, \"p:spPr\");\n if (spPr) {\n parseTransformFromSpPr(spPr, opts);\n parseGeometryFromSpPr(spPr, opts);\n const fill = parseFillFromElement(spPr);\n if (fill) opts.fill = fill;\n const outline = parseOutlineFromElement(spPr);\n if (outline) opts.outline = outline;\n const effects = parseEffectsFromElement(spPr);\n if (effects) opts.effects = effects;\n }\n\n // p:txBody → text, paragraphs\n const txBody = findChild(el, \"p:txBody\");\n if (txBody) {\n parseTextBody(txBody, opts, ctx.slideRels);\n }\n\n return opts as unknown as ShapeOptions;\n}\n\n// ── Picture parser ────────────────────────────────────────────────────────────\n\n// ── Line shape parser ─────────────────────────────────────────────────────────\n\nfunction parseLineShape(el: Element): LineShapeOptions {\n const opts: Record<string, unknown> = {};\n\n // p:nvSpPr → id, name\n const nvSpPr = findChild(el, \"p:nvSpPr\");\n if (nvSpPr) {\n const cNvPr = findChild(nvSpPr, \"p:cNvPr\");\n if (cNvPr) {\n const id = attrNum(cNvPr, \"id\");\n if (id !== undefined) opts.id = id;\n const name = attr(cNvPr, \"name\");\n if (name) opts.name = name;\n }\n }\n\n // p:spPr → endpoints (same logic as connector)\n const spPr = findChild(el, \"p:spPr\");\n if (spPr) {\n const xfrm = findChild(spPr, \"a:xfrm\");\n if (xfrm) {\n const off = findChild(xfrm, \"a:off\");\n const ext = findChild(xfrm, \"a:ext\");\n const flipH = attrBool(xfrm, \"flipH\");\n const flipV = attrBool(xfrm, \"flipV\");\n\n if (off && ext) {\n const offX = attrNum(off, \"x\") ?? 0;\n const offY = attrNum(off, \"y\") ?? 0;\n const cx = attrNum(ext, \"cx\") ?? 0;\n const cy = attrNum(ext, \"cy\") ?? 0;\n\n const x1 = flipH ? offX + cx : offX;\n const y1 = flipV ? offY + cy : offY;\n const x2 = flipH ? offX : offX + cx;\n const y2 = flipV ? offY : offY + cy;\n\n opts.x1 = convertEmuToPixels(x1);\n opts.y1 = convertEmuToPixels(y1);\n opts.x2 = convertEmuToPixels(x2);\n opts.y2 = convertEmuToPixels(y2);\n }\n }\n\n const fill = parseFillFromElement(spPr);\n if (fill) opts.fill = fill;\n const outline = parseOutlineFromElement(spPr);\n if (outline) opts.outline = outline;\n }\n\n return opts as LineShapeOptions;\n}\n\n// ── Picture parser (continued) ────────────────────────────────────────────────\n\nfunction parsePicture(el: Element, ctx: ParseContext): PictureOptions {\n const opts: Record<string, unknown> = {};\n\n // Position from p:spPr\n const spPr = findChild(el, \"p:spPr\");\n if (spPr) parseTransformFromSpPr(spPr, opts);\n\n // Image data from p:blipFill → a:blip → r:embed\n const blip = findDeep(el, \"a:blip\")[0];\n if (blip) {\n const rEmbed = attr(blip, \"r:embed\");\n if (rEmbed) {\n const mediaPath =\n ctx.slideRels.get(rEmbed) ?? ctx.pptx.partRefs.media.find((p) => p.includes(rEmbed));\n if (mediaPath) {\n const imageData = ctx.pptx.doc.getRaw(mediaPath);\n if (imageData) {\n opts.data = imageData;\n opts.type = imageTypeFromPath(mediaPath);\n }\n }\n }\n }\n\n // Name from p:nvPicPr → a:cNvPr or p:cNvPr\n const nvPicPr = findChild(el, \"p:nvPicPr\");\n if (nvPicPr) {\n const cNvPr = findChild(nvPicPr, \"a:cNvPr\") ?? findChild(nvPicPr, \"p:cNvPr\");\n if (cNvPr) {\n const name = attr(cNvPr, \"name\");\n if (name) opts.name = name;\n }\n }\n\n return opts as unknown as PictureOptions;\n}\n\n// ── Graphic frame parser (chart / table / smartart) ───────────────────────────\n\nfunction parseGraphicFrame(el: Element, ctx: ParseContext): SlideChild | undefined {\n const graphicData = findDeep(el, \"a:graphicData\")[0];\n if (!graphicData) return undefined;\n\n const uri = attr(graphicData, \"uri\") ?? \"\";\n\n if (uri.includes(\"/chart\")) {\n return { chart: parseChartFrame(el, ctx) };\n }\n if (uri.includes(\"/diagram\")) {\n return { smartart: parseSmartArtFrame(el, ctx) };\n }\n\n // Check for table (a:graphicData → a:tbl)\n const tbl = findChild(graphicData, \"a:tbl\");\n if (tbl) {\n return { table: parseTableFrame(el, tbl) };\n }\n\n return undefined;\n}\n\n// ── Chart frame parser ────────────────────────────────────────────────────────\n\nfunction parseChartFrame(el: Element, ctx: ParseContext): ChartOptions {\n const opts: Record<string, unknown> = {};\n\n // Position from p:xfrm\n parseTransformFromElement(el, opts);\n\n // Chart data\n const chartRef = findDeep(el, \"c:chart\")[0];\n if (chartRef) {\n const rId = attr(chartRef, \"r:id\");\n if (rId) {\n const chartPath = ctx.slideRels.get(rId);\n if (chartPath) {\n const chartXml = ctx.pptx.doc.get(chartPath);\n if (chartXml) {\n const chartOpts = parseChartXml(chartXml);\n if (chartOpts) Object.assign(opts, chartOpts);\n }\n }\n }\n }\n\n return opts as unknown as ChartOptions;\n}\n\n/**\n * Parse c:chartSpace element into chart options.\n */\nfunction parseChartXml(el: Element): Record<string, unknown> | undefined {\n const chart = findChild(el, \"c:chart\");\n if (!chart) return undefined;\n\n const opts: Record<string, unknown> = {};\n\n // Title\n const titleEl = findChild(chart, \"c:title\");\n if (titleEl) {\n const rich = findDeep(titleEl, \"c:rich\")[0];\n if (rich) {\n const t = findDeep(rich, \"a:t\")[0];\n if (t) {\n const title = textOf(t);\n if (title) opts.title = title;\n }\n }\n }\n\n // Plot area → chart type\n const plotArea = findChild(chart, \"c:plotArea\");\n if (!plotArea) return undefined;\n\n let chartType: string | undefined;\n let typeElement: Element | undefined;\n\n for (const child of plotArea.elements ?? []) {\n switch (child.name) {\n case \"c:barChart\": {\n const barDir = findChild(child, \"c:barDir\");\n chartType = barDir && attr(barDir, \"val\") === \"bar\" ? \"bar\" : \"column\";\n typeElement = child;\n break;\n }\n case \"c:lineChart\":\n chartType = \"line\";\n typeElement = child;\n break;\n case \"c:pieChart\":\n chartType = \"pie\";\n typeElement = child;\n break;\n case \"c:areaChart\":\n chartType = \"area\";\n typeElement = child;\n break;\n case \"c:scatterChart\":\n chartType = \"scatter\";\n typeElement = child;\n break;\n }\n if (chartType) break;\n }\n\n if (!chartType || !typeElement) return undefined;\n opts.type = chartType;\n\n // Series\n const series: { name: string; values: number[] }[] = [];\n let categories: string[] | undefined;\n\n for (const serEl of typeElement.elements ?? []) {\n if (serEl.name !== \"c:ser\") continue;\n const nameParts = extractStrCache(serEl, \"c:tx\");\n const cats = extractStrCache(serEl, \"c:cat\");\n if (cats.length > 0 && !categories) categories = cats;\n const vals = extractNumCache(serEl);\n series.push({ name: nameParts[0] ?? \"\", values: vals });\n }\n\n opts.categories = categories ?? [];\n opts.series = series;\n opts.showLegend = findChild(chart, \"c:legend\") !== undefined;\n\n const styleEl = findChild(el, \"c:style\");\n if (styleEl) {\n const val = attrNum(styleEl, \"val\");\n if (val !== undefined) opts.style = val;\n }\n\n return opts;\n}\n\nfunction extractStrCache(parent: Element, containerName: string): string[] {\n const container = findChild(parent, containerName);\n if (!container) return [];\n const cache = findDeep(container, \"c:strCache\")[0];\n if (!cache) return [];\n\n const values: string[] = [];\n for (const pt of cache.elements ?? []) {\n if (pt.name !== \"c:pt\") continue;\n const v = findChild(pt, \"c:v\");\n if (v) values.push(textOf(v) ?? \"\");\n }\n return values;\n}\n\nfunction extractNumCache(parent: Element): number[] {\n const valEl = findChild(parent, \"c:val\");\n if (!valEl) return [];\n const cache = findDeep(valEl, \"c:numCache\")[0];\n if (!cache) return [];\n\n const values: number[] = [];\n for (const pt of cache.elements ?? []) {\n if (pt.name !== \"c:pt\") continue;\n const v = findChild(pt, \"c:v\");\n if (v) {\n const num = Number(textOf(v));\n if (!isNaN(num)) values.push(num);\n }\n }\n return values;\n}\n\n// ── SmartArt frame parser ─────────────────────────────────────────────────────\n\nfunction parseSmartArtFrame(el: Element, ctx: ParseContext): SmartArtOptions {\n const opts: Record<string, unknown> = {};\n\n // Position\n parseTransformFromElement(el, opts);\n\n // Name from p:nvGraphicFramePr → p:cNvPr\n const nvGfxFramePr = findChild(el, \"p:nvGraphicFramePr\");\n if (nvGfxFramePr) {\n const cNvPr = findChild(nvGfxFramePr, \"p:cNvPr\");\n if (cNvPr) {\n const name = attr(cNvPr, \"name\");\n if (name) opts.name = name;\n }\n }\n\n // SmartArt data via dgm:relIds → r:dm\n const relIds = findDeep(el, \"dgm:relIds\")[0];\n if (relIds) {\n const rId = attr(relIds, \"r:dm\");\n if (rId) {\n const dataPath = ctx.slideRels.get(rId);\n if (dataPath) {\n const dataEl = ctx.pptx.doc.get(dataPath);\n if (dataEl) {\n parseSmartArtDataXml(dataEl, opts);\n }\n }\n }\n }\n\n return opts as unknown as SmartArtOptions;\n}\n\nfunction parseSmartArtDataXml(el: Element, opts: Record<string, unknown>): void {\n const ptLst = findChild(el, \"dgm:ptLst\");\n if (!ptLst) {\n opts.nodes = [];\n return;\n }\n\n const nodeMap = new Map<string, string>();\n\n for (const pt of ptLst.elements ?? []) {\n if (pt.name !== \"dgm:pt\") continue;\n const type = attr(pt, \"type\");\n const modelId = attr(pt, \"modelId\");\n\n if (type === \"doc\") {\n const prSet = findChild(pt, \"dgm:prSet\");\n if (prSet) {\n const loTypeId = attr(prSet, \"loTypeId\") ?? \"\";\n const qsTypeId = attr(prSet, \"qsTypeId\") ?? \"\";\n const csTypeId = attr(prSet, \"csTypeId\") ?? \"\";\n const layout = loTypeId.split(\"/\").pop();\n if (layout) opts.layout = layout;\n const style = qsTypeId.split(\"/\").pop();\n if (style) opts.style = style;\n const color = csTypeId.split(\"/\").pop();\n if (color) opts.color = color;\n }\n } else if (type === \"node\" && modelId) {\n const t = findDeep(pt, \"a:t\")[0];\n nodeMap.set(modelId, t ? (textOf(t) ?? \"\") : \"\");\n }\n }\n\n // Build tree from connections\n const cxnLst = findChild(el, \"dgm:cxnLst\");\n if (!cxnLst) {\n opts.nodes = [];\n return;\n }\n\n const childrenMap = new Map<string, string[]>();\n for (const cxn of cxnLst.elements ?? []) {\n if (cxn.name !== \"dgm:cxn\") continue;\n const srcId = attr(cxn, \"srcId\");\n const destId = attr(cxn, \"destId\");\n if (!srcId || !destId || !nodeMap.has(destId)) continue;\n\n let arr = childrenMap.get(srcId);\n if (!arr) {\n arr = [];\n childrenMap.set(srcId, arr);\n }\n arr.push(destId);\n }\n\n const topIds = childrenMap.get(\"0\") ?? [];\n opts.nodes = topIds.map((id) => buildSmartArtNode(id, nodeMap, childrenMap));\n}\n\nfunction buildSmartArtNode(\n id: string,\n nodeMap: Map<string, string>,\n childrenMap: Map<string, string[]>,\n): { text: string; children?: unknown[] } {\n const text = nodeMap.get(id) ?? \"\";\n const childIds = childrenMap.get(id) ?? [];\n if (childIds.length === 0) return { text };\n return { text, children: childIds.map((cid) => buildSmartArtNode(cid, nodeMap, childrenMap)) };\n}\n\n// ── Table frame parser ────────────────────────────────────────────────────────\n\nfunction parseTableFrame(el: Element, tbl: Element): TableOptions {\n const opts: Record<string, unknown> = {};\n\n // Position\n parseTransformFromElement(el, opts);\n\n // a:tblPr\n const tblPr = findChild(tbl, \"a:tblPr\");\n if (tblPr) {\n if (attrBool(tblPr, \"firstRow\")) opts.firstRow = true;\n if (attrBool(tblPr, \"lastRow\")) opts.lastRow = true;\n if (attrBool(tblPr, \"bandRow\")) opts.bandRow = true;\n if (attrBool(tblPr, \"firstCol\")) opts.firstCol = true;\n if (attrBool(tblPr, \"lastCol\")) opts.lastCol = true;\n if (attrBool(tblPr, \"bandCol\")) opts.bandCol = true;\n\n // Table-level borders (a:lnL/lnR/lnT/lnB)\n const borders: Record<string, unknown> = {};\n for (const [elName, key] of [\n [\"a:lnL\", \"left\"],\n [\"a:lnR\", \"right\"],\n [\"a:lnT\", \"top\"],\n [\"a:lnB\", \"bottom\"],\n ] as const) {\n const borderEl = findChild(tblPr, elName);\n if (borderEl) {\n const borderOpts: Record<string, unknown> = {};\n const w = attrNum(borderEl, \"w\");\n if (w !== undefined) borderOpts.width = w;\n const fill = parseFillFromElement(borderEl);\n if (typeof fill === \"string\") borderOpts.color = fill;\n if (Object.keys(borderOpts).length > 0) borders[key] = borderOpts;\n }\n }\n if (Object.keys(borders).length > 0) opts.borders = borders;\n }\n\n // a:tblGrid → columnWidths\n const tblGrid = findChild(tbl, \"a:tblGrid\");\n if (tblGrid) {\n const colWidths: number[] = [];\n for (const gridCol of children(tblGrid, \"a:gridCol\")) {\n const w = attrNum(gridCol, \"w\");\n colWidths.push(w ?? 0);\n }\n if (colWidths.length > 0) opts.columnWidths = colWidths;\n }\n\n // a:tr → rows\n const rows: Record<string, unknown>[] = [];\n for (const tr of children(tbl, \"a:tr\")) {\n const rowOpts: Record<string, unknown> = {};\n const h = attrNum(tr, \"h\");\n if (h !== undefined) rowOpts.height = h;\n\n const cells: Record<string, unknown>[] = [];\n for (const tc of children(tr, \"a:tc\")) {\n cells.push(parseTableCell(tc));\n }\n rowOpts.cells = cells;\n rows.push(rowOpts);\n }\n opts.rows = rows;\n\n return opts as unknown as TableOptions;\n}\n\nfunction parseTableCell(tc: Element): Record<string, unknown> {\n const opts: Record<string, unknown> = {};\n\n // gridSpan / rowSpan\n const gridSpan = attrNum(tc, \"gridSpan\");\n if (gridSpan !== undefined && gridSpan > 1) opts.columnSpan = gridSpan;\n const rowSpan = attrNum(tc, \"rowSpan\");\n if (rowSpan !== undefined && rowSpan > 1) opts.rowSpan = rowSpan;\n\n // a:txBody → paragraphs + bodyPr margins\n const txBody = findChild(tc, \"a:txBody\");\n if (txBody) {\n const paragraphs = parseParagraphsFromTxBody(txBody);\n if (paragraphs.length > 0) opts.children = paragraphs;\n\n // Extract margins from a:bodyPr (if not already from a:tcPr)\n const bodyPr = findChild(txBody, \"a:bodyPr\");\n if (bodyPr) {\n const margins: Record<string, number> = {};\n for (const [attrName, key] of [\n [\"tIns\", \"top\"],\n [\"bIns\", \"bottom\"],\n [\"lIns\", \"left\"],\n [\"rIns\", \"right\"],\n ] as const) {\n const val = attrNum(bodyPr, attrName);\n if (val !== undefined) margins[key] = val;\n }\n if (Object.keys(margins).length > 0) opts.margins = margins;\n }\n }\n\n // a:tcPr\n const tcPr = findChild(tc, \"a:tcPr\");\n if (tcPr) {\n const fill = parseFillFromElement(tcPr);\n if (fill) opts.fill = fill;\n\n const anchor = attr(tcPr, \"anchor\");\n if (anchor) {\n const anchorMap: Record<string, string> = { t: \"top\", ctr: \"center\", b: \"bottom\" };\n if (anchor in anchorMap) opts.verticalAlign = anchorMap[anchor];\n }\n\n // Margins\n const margins: Record<string, number> = {};\n const tIns = attrNum(tcPr, \"tIns\");\n if (tIns !== undefined) margins.top = tIns;\n const bIns = attrNum(tcPr, \"bIns\");\n if (bIns !== undefined) margins.bottom = bIns;\n const lIns = attrNum(tcPr, \"lIns\");\n if (lIns !== undefined) margins.left = lIns;\n const rIns = attrNum(tcPr, \"rIns\");\n if (rIns !== undefined) margins.right = rIns;\n if (Object.keys(margins).length > 0) opts.margins = margins;\n\n // Borders\n const borders: Record<string, unknown> = {};\n for (const [elName, key] of [\n [\"a:lnL\", \"left\"],\n [\"a:lnR\", \"right\"],\n [\"a:lnT\", \"top\"],\n [\"a:lnB\", \"bottom\"],\n ] as const) {\n const borderEl = findChild(tcPr, elName);\n if (borderEl) {\n const w = attrNum(borderEl, \"w\");\n const borderOpts: Record<string, unknown> = {};\n if (w !== undefined) borderOpts.width = w;\n const fill = parseFillFromElement(borderEl);\n if (typeof fill === \"string\") borderOpts.color = fill;\n if (Object.keys(borderOpts).length > 0) borders[key] = borderOpts;\n }\n }\n if (Object.keys(borders).length > 0) opts.borders = borders;\n }\n\n return opts;\n}\n\n// ── Connector parser ──────────────────────────────────────────────────────────\n\nfunction parseConnector(el: Element): ConnectorShapeOptions {\n const opts: Record<string, unknown> = {};\n\n // p:nvCxnSpPr → id, name\n const nvCxnSpPr = findChild(el, \"p:nvCxnSpPr\");\n if (nvCxnSpPr) {\n const cNvPr = findChild(nvCxnSpPr, \"p:cNvPr\");\n if (cNvPr) {\n const id = attrNum(cNvPr, \"id\");\n if (id !== undefined) opts.id = id;\n const name = attr(cNvPr, \"name\");\n if (name) opts.name = name;\n }\n }\n\n // p:spPr → endpoints\n const spPr = findChild(el, \"p:spPr\");\n if (spPr) {\n const xfrm = findChild(spPr, \"a:xfrm\");\n if (xfrm) {\n const off = findChild(xfrm, \"a:off\");\n const ext = findChild(xfrm, \"a:ext\");\n const flipH = attrBool(xfrm, \"flipH\");\n const flipV = attrBool(xfrm, \"flipV\");\n\n if (off && ext) {\n const offX = attrNum(off, \"x\") ?? 0;\n const offY = attrNum(off, \"y\") ?? 0;\n const cx = attrNum(ext, \"cx\") ?? 0;\n const cy = attrNum(ext, \"cy\") ?? 0;\n\n // Reconstruct endpoints\n const x1 = flipH ? offX + cx : offX;\n const y1 = flipV ? offY + cy : offY;\n const x2 = flipH ? offX : offX + cx;\n const y2 = flipV ? offY : offY + cy;\n\n opts.x1 = convertEmuToPixels(x1);\n opts.y1 = convertEmuToPixels(y1);\n opts.x2 = convertEmuToPixels(x2);\n opts.y2 = convertEmuToPixels(y2);\n }\n }\n\n const fill = parseFillFromElement(spPr);\n if (fill) opts.fill = fill;\n const outline = parseOutlineFromElement(spPr);\n if (outline) opts.outline = outline;\n\n // Arrowheads from outline\n // Note: generation code maps endArrowhead → a:headEnd, beginArrowhead → a:tailEnd\n const ln = findChild(spPr, \"a:ln\");\n if (ln) {\n const headEnd = findChild(ln, \"a:headEnd\");\n if (headEnd) {\n const type = attr(headEnd, \"type\");\n if (type) opts.endArrowhead = type as ArrowheadType;\n const len = attr(headEnd, \"len\");\n if (len) opts.arrowheadLength = xsdLineEndSize.from(len) as \"small\" | \"medium\" | \"large\";\n const w = attr(headEnd, \"w\");\n if (w) opts.arrowheadWidth = xsdLineEndSize.from(w) as \"small\" | \"medium\" | \"large\";\n }\n const tailEnd = findChild(ln, \"a:tailEnd\");\n if (tailEnd) {\n const type = attr(tailEnd, \"type\");\n if (type) opts.beginArrowhead = type as ArrowheadType;\n }\n }\n }\n\n return opts as unknown as ConnectorShapeOptions;\n}\n\n// ── Group parser ──────────────────────────────────────────────────────────────\n\nfunction parseGroup(el: Element, ctx: ParseContext): GroupShapeOptions {\n const opts: Record<string, unknown> = {};\n\n // p:grpSpPr → position, rotation, flip\n const grpSpPr = findChild(el, \"p:grpSpPr\");\n if (grpSpPr) {\n const xfrm = findChild(grpSpPr, \"a:xfrm\");\n if (xfrm) {\n const off = findChild(xfrm, \"a:off\");\n if (off) {\n const x = attrNum(off, \"x\");\n if (x !== undefined) opts.x = convertEmuToPixels(x);\n const y = attrNum(off, \"y\");\n if (y !== undefined) opts.y = convertEmuToPixels(y);\n }\n const ext = findChild(xfrm, \"a:ext\");\n if (ext) {\n const cx = attrNum(ext, \"cx\");\n if (cx !== undefined) opts.width = convertEmuToPixels(cx);\n const cy = attrNum(ext, \"cy\");\n if (cy !== undefined) opts.height = convertEmuToPixels(cy);\n }\n const rot = attrNum(xfrm, \"rot\");\n if (rot !== undefined) opts.rotation = rot;\n const flipH = attrBool(xfrm, \"flipH\");\n if (flipH) opts.flipHorizontal = true;\n }\n }\n\n // Children\n const groupChildren: SlideChild[] = [];\n for (const child of el.elements ?? []) {\n if (child.name === \"p:nvGrpSpPr\" || child.name === \"p:grpSpPr\") continue;\n const parsed = parseSlideChild(child, ctx);\n if (parsed !== undefined) groupChildren.push(parsed);\n }\n opts.children = groupChildren;\n\n return opts as unknown as GroupShapeOptions;\n}\n\n// ── Text body / paragraph / run parsers ───────────────────────────────────────\n\nfunction parseTextBody(\n txBody: Element,\n opts: Record<string, unknown>,\n rels?: Map<string, string>,\n): void {\n const textBody: Record<string, unknown> = {};\n\n // a:bodyPr\n const bodyPr = findChild(txBody, \"a:bodyPr\");\n if (bodyPr) {\n const vert = attr(bodyPr, \"vert\");\n if (vert) textBody.vertical = vert;\n const anchor = attr(bodyPr, \"anchor\");\n if (anchor) {\n const anchorMap: Record<string, string> = { t: \"top\", ctr: \"center\", b: \"bottom\" };\n if (anchor in anchorMap) textBody.anchor = anchorMap[anchor];\n }\n const wrap = attr(bodyPr, \"wrap\");\n if (wrap) textBody.wrap = wrap;\n const tIns = attrNum(bodyPr, \"tIns\");\n const bIns = attrNum(bodyPr, \"bIns\");\n const lIns = attrNum(bodyPr, \"lIns\");\n const rIns = attrNum(bodyPr, \"rIns\");\n const margins: Record<string, number> = {};\n if (tIns !== undefined) margins.top = tIns;\n if (bIns !== undefined) margins.bottom = bIns;\n if (lIns !== undefined) margins.left = lIns;\n if (rIns !== undefined) margins.right = rIns;\n if (Object.keys(margins).length > 0) textBody.margins = margins;\n\n const numCol = attrNum(bodyPr, \"numCol\");\n if (numCol !== undefined) textBody.columns = numCol;\n const spcCol = attrNum(bodyPr, \"spcCol\");\n if (spcCol !== undefined) textBody.columnSpacing = spcCol / 100;\n\n // AutoFit\n if (findChild(bodyPr, \"a:normAutofit\")) textBody.autoFit = \"normal\";\n else if (findChild(bodyPr, \"a:spAutoFit\")) textBody.autoFit = \"shape\";\n else if (findChild(bodyPr, \"a:noAutofit\")) textBody.autoFit = \"none\";\n }\n\n // Paragraphs\n const paragraphs = parseParagraphsFromTxBody(txBody, rels);\n if (paragraphs.length === 1) {\n const p = paragraphs[0] as Record<string, unknown>;\n // parseParagraph already promotes single-run-plain-text to p.text\n if (p.text && !p.children) {\n const props = p.properties as Record<string, unknown> | undefined;\n // Only promote if paragraph properties are trivial (just bulletNone or empty)\n const hasNonTrivialProps =\n props &&\n Object.keys(props).some(\n (k) => k !== \"bullet\" || (props[k] as Record<string, unknown>)?.type !== \"none\",\n );\n if (!hasNonTrivialProps) {\n textBody.text = p.text;\n opts.textBody = textBody;\n return;\n }\n }\n }\n\n if (paragraphs.length > 0) textBody.children = paragraphs;\n if (Object.keys(textBody).length > 0) opts.textBody = textBody;\n}\n\nfunction parseParagraphsFromTxBody(txBody: Element, rels?: Map<string, string>): unknown[] {\n const paragraphs: unknown[] = [];\n for (const pEl of children(txBody, \"a:p\")) {\n paragraphs.push(parseParagraph(pEl, rels));\n }\n return paragraphs;\n}\n\nfunction parseParagraph(el: Element, rels?: Map<string, string>): Record<string, unknown> {\n const opts: Record<string, unknown> = {};\n\n // a:pPr\n const pPr = findChild(el, \"a:pPr\");\n if (pPr) {\n const props: Record<string, unknown> = {};\n\n const algn = attr(pPr, \"algn\");\n if (algn) {\n const alignMap: Record<string, string> = {\n l: \"left\",\n ctr: \"center\",\n r: \"right\",\n just: \"justify\",\n };\n if (algn in alignMap) props.alignment = alignMap[algn];\n }\n\n const lvl = attrNum(pPr, \"lvl\");\n if (lvl !== undefined) props.indentLevel = lvl;\n\n const marL = attrNum(pPr, \"marL\");\n if (marL !== undefined) props.marginIndent = marL;\n const marR = attrNum(pPr, \"marR\");\n if (marR !== undefined) props.marginRight = marR;\n\n // Bullet\n if (findChild(pPr, \"a:buNone\")) {\n props.bullet = { type: \"none\" };\n } else if (findChild(pPr, \"a:buChar\")) {\n const buChar = findChild(pPr, \"a:buChar\")!;\n const bulletOpts: Record<string, unknown> = { type: \"char\" };\n const ch = attr(buChar, \"char\");\n if (ch) bulletOpts.char = ch;\n // Color\n const buClr = findChild(pPr, \"a:buClr\");\n if (buClr) {\n const srgbClr = findChild(buClr, \"a:srgbClr\");\n if (srgbClr) {\n const val = colorAttr(srgbClr, \"val\");\n if (val) bulletOpts.color = val;\n }\n }\n // Size\n const buSzPct = findChild(pPr, \"a:buSzPct\");\n if (buSzPct) {\n const val = attr(buSzPct, \"val\");\n if (val) bulletOpts.size = parseInt(String(val), 10);\n }\n props.bullet = bulletOpts;\n } else if (findChild(pPr, \"a:buAutoNum\")) {\n const buAutoNum = findChild(pPr, \"a:buAutoNum\")!;\n const bulletOpts: Record<string, unknown> = { type: \"autoNum\" };\n const fmt = attr(buAutoNum, \"type\");\n if (fmt) bulletOpts.format = fmt;\n const startAt = attrNum(buAutoNum, \"startAt\");\n if (startAt !== undefined) bulletOpts.startAt = startAt;\n props.bullet = bulletOpts;\n }\n\n // Spacing\n const lnSpc = findChild(pPr, \"a:lnSpc\");\n if (lnSpc) {\n const spcPct = findChild(lnSpc, \"a:spcPct\");\n if (spcPct) {\n const val = attrNum(spcPct, \"val\");\n if (val !== undefined) props.lineSpacing = val / 1000;\n }\n const spcPts = findChild(lnSpc, \"a:spcPts\");\n if (spcPts) {\n const val = attrNum(spcPts, \"val\");\n if (val !== undefined) props.lineSpacingPoints = val / 100;\n }\n }\n\n const spcAft = findChild(pPr, \"a:spcAft\");\n if (spcAft) {\n const spcPts = findChild(spcAft, \"a:spcPts\");\n if (spcPts) {\n const val = attrNum(spcPts, \"val\");\n if (val !== undefined) props.marginBottom = val;\n }\n }\n\n const spcBef = findChild(pPr, \"a:spcBef\");\n if (spcBef) {\n const spcPts = findChild(spcBef, \"a:spcPts\");\n if (spcPts) {\n const val = attrNum(spcPts, \"val\");\n if (val !== undefined) props.marginTop = val;\n }\n }\n\n if (Object.keys(props).length > 0) opts.properties = props;\n }\n\n // Runs (a:r)\n const runs: Record<string, unknown>[] = [];\n for (const rEl of children(el, \"a:r\")) {\n runs.push(parseRun(rEl, rels));\n }\n\n // Simple text extraction: if single run with only text\n if (runs.length === 1 && Object.keys(runs[0]).length === 1 && runs[0].text) {\n opts.text = runs[0].text;\n } else if (runs.length > 0) {\n opts.children = runs;\n }\n\n return opts;\n}\n\nfunction parseRun(el: Element, rels?: Map<string, string>): Record<string, unknown> {\n const opts: Record<string, unknown> = {};\n\n // a:rPr\n const rPr = findChild(el, \"a:rPr\");\n if (rPr) {\n const sz = attrNum(rPr, \"sz\");\n if (sz !== undefined) opts.fontSize = sz / 100;\n\n const b = attrBool(rPr, \"b\");\n if (b !== undefined) opts.bold = b;\n\n const i = attrBool(rPr, \"i\");\n if (i !== undefined) opts.italic = i;\n\n const u = attr(rPr, \"u\");\n if (u) {\n const underlineMap: Record<string, string> = { sng: \"single\", dbl: \"double\", none: \"none\" };\n if (u in underlineMap) opts.underline = underlineMap[u];\n }\n\n const lang = attr(rPr, \"lang\");\n if (lang) opts.lang = lang;\n\n const strike = attr(rPr, \"strike\");\n if (strike) {\n const strikeMap: Record<string, string> = {\n sngStrike: \"sngStrike\",\n dblStrike: \"dblStrike\",\n noStrike: \"noStrike\",\n };\n if (strike in strikeMap) opts.strike = strikeMap[strike];\n }\n\n const baseline = attrNum(rPr, \"baseline\");\n if (baseline !== undefined) opts.baseline = baseline;\n\n const cap = attr(rPr, \"cap\");\n if (cap) {\n const capMap: Record<string, string> = { none: \"none\", all: \"all\", small: \"small\" };\n if (cap in capMap) opts.capitalization = capMap[cap];\n }\n\n const spc = attrNum(rPr, \"spc\");\n if (spc !== undefined) opts.spacing = spc;\n\n // Font\n const latin = findChild(rPr, \"a:latin\");\n if (latin) {\n const typeface = attr(latin, \"typeface\");\n if (typeface) opts.font = typeface;\n }\n\n // Fill (text color)\n const fill = parseFillFromElement(rPr);\n if (fill) opts.fill = fill;\n\n // Hyperlink (a:hlinkClick)\n const hlinkClick = findChild(rPr, \"a:hlinkClick\");\n if (hlinkClick && rels) {\n const rId = attr(hlinkClick, \"r:id\");\n if (rId) {\n const url = rels.get(rId);\n if (url) {\n const hyperlink: Record<string, unknown> = { url };\n const tooltip = attr(hlinkClick, \"tooltip\");\n if (tooltip) hyperlink.tooltip = tooltip;\n opts.hyperlink = hyperlink;\n }\n }\n }\n }\n\n // a:t → text\n const t = findChild(el, \"a:t\");\n if (t) opts.text = textOf(t) ?? \"\";\n\n return opts;\n}\n\n// ── Common helpers ────────────────────────────────────────────────────────────\n\nfunction parseTransformFromSpPr(spPr: Element, opts: Record<string, unknown>): void {\n const xfrm = findChild(spPr, \"a:xfrm\");\n if (!xfrm) return;\n\n const off = findChild(xfrm, \"a:off\");\n if (off) {\n const x = attrNum(off, \"x\");\n if (x !== undefined) opts.x = convertEmuToPixels(x);\n const y = attrNum(off, \"y\");\n if (y !== undefined) opts.y = convertEmuToPixels(y);\n }\n\n const ext = findChild(xfrm, \"a:ext\");\n if (ext) {\n const cx = attrNum(ext, \"cx\");\n if (cx !== undefined) opts.width = convertEmuToPixels(cx);\n const cy = attrNum(ext, \"cy\");\n if (cy !== undefined) opts.height = convertEmuToPixels(cy);\n }\n\n const rot = attrNum(xfrm, \"rot\");\n if (rot !== undefined) opts.rotation = rot;\n\n const flipH = attrBool(xfrm, \"flipH\");\n if (flipH) opts.flipHorizontal = true;\n}\n\nfunction parseTransformFromElement(el: Element, opts: Record<string, unknown>): void {\n // For graphic frames, xfrm may be direct child or under p:xfrm\n const xfrm = findChild(el, \"p:xfrm\") ?? findDeep(el, \"a:xfrm\")[0] ?? findDeep(el, \"p:xfrm\")[0];\n if (!xfrm) return;\n\n const off = findChild(xfrm, \"a:off\");\n if (off) {\n const x = attrNum(off, \"x\");\n if (x !== undefined) opts.x = convertEmuToPixels(x);\n const y = attrNum(off, \"y\");\n if (y !== undefined) opts.y = convertEmuToPixels(y);\n }\n\n const ext = findChild(xfrm, \"a:ext\");\n if (ext) {\n const cx = attrNum(ext, \"cx\");\n if (cx !== undefined) opts.width = convertEmuToPixels(cx);\n const cy = attrNum(ext, \"cy\");\n if (cy !== undefined) opts.height = convertEmuToPixels(cy);\n }\n}\n\nfunction parseGeometryFromSpPr(spPr: Element, opts: Record<string, unknown>): void {\n // a:prstGeom → preset\n const prstGeom = findChild(spPr, \"a:prstGeom\");\n if (prstGeom) {\n const preset = attr(prstGeom, \"prst\");\n if (preset && preset !== \"rect\") opts.geometry = preset;\n }\n}\n\nfunction parseFillFromElement(parent: Element): unknown {\n // Solid fill\n const solidFill = findChild(parent, \"a:solidFill\");\n if (solidFill) {\n const srgbClr = findChild(solidFill, \"a:srgbClr\");\n if (srgbClr) {\n return colorAttr(srgbClr, \"val\");\n }\n const schemeClr = findChild(solidFill, \"a:schemeClr\");\n if (schemeClr) {\n return { type: \"scheme\", color: attr(schemeClr, \"val\") };\n }\n }\n\n // No fill\n if (findChild(parent, \"a:noFill\")) return { type: \"none\" };\n\n // Pattern fill\n const pattFill = findChild(parent, \"a:pattFill\");\n if (pattFill) {\n const prst = attr(pattFill, \"prst\");\n const result: Record<string, unknown> = { type: \"pattern\", pattern: prst ?? \"\" };\n\n const fgClr = findChild(pattFill, \"a:fgClr\");\n if (fgClr) {\n const srgbClr = findChild(fgClr, \"a:srgbClr\");\n if (srgbClr) {\n const val = colorAttr(srgbClr, \"val\");\n if (val) result.foregroundColor = val;\n }\n }\n\n const bgClr = findChild(pattFill, \"a:bgClr\");\n if (bgClr) {\n const srgbClr = findChild(bgClr, \"a:srgbClr\");\n if (srgbClr) {\n const val = colorAttr(srgbClr, \"val\");\n if (val) result.backgroundColor = val;\n }\n }\n\n return result;\n }\n\n // Blip fill (image fill on shapes)\n const blipFill = findChild(parent, \"a:blipFill\");\n if (blipFill) {\n const blip = findChild(blipFill, \"a:blip\");\n if (blip) {\n return { type: \"blip\" };\n }\n }\n\n // Gradient fill\n const gradFill = findChild(parent, \"a:gradFill\");\n if (gradFill) {\n const stops: { position: number; color: string }[] = [];\n const gsLst = findChild(gradFill, \"a:gsLst\");\n if (gsLst) {\n for (const gs of gsLst.elements ?? []) {\n if (gs.name !== \"a:gs\") continue;\n const pos = attrNum(gs, \"pos\");\n const srgbClr = findChild(gs, \"a:srgbClr\");\n if (pos !== undefined && srgbClr) {\n stops.push({ position: pos / 1000, color: colorAttr(srgbClr, \"val\") ?? \"\" });\n }\n }\n }\n if (stops.length > 0) {\n const result: Record<string, unknown> = { type: \"gradient\", stops };\n // Extract angle from a:lin element (OOXML unit → degrees)\n const lin = findChild(gradFill, \"a:lin\");\n if (lin) {\n const ang = attrNum(lin, \"ang\");\n if (ang !== undefined) result.angle = Math.round(ang / 60000);\n }\n // Extract path shade from a:path element\n const pathEl = findChild(gradFill, \"a:path\");\n if (pathEl) {\n const pathType = attr(pathEl, \"path\");\n if (pathType) result.path = pathType;\n }\n return result;\n }\n }\n\n return undefined;\n}\n\nfunction parseOutlineFromElement(parent: Element): unknown {\n const ln = findChild(parent, \"a:ln\");\n if (!ln) return undefined;\n\n const opts: Record<string, unknown> = {};\n const w = attrNum(ln, \"w\");\n if (w !== undefined) opts.width = w;\n\n // For outline, only extract solid color (OutlineOptions uses `color` string)\n const solidFill = findChild(ln, \"a:solidFill\");\n if (solidFill) {\n const srgbClr = findChild(solidFill, \"a:srgbClr\");\n if (srgbClr) {\n const val = colorAttr(srgbClr, \"val\");\n if (val) opts.color = val;\n }\n }\n\n // Dash style\n const prstDash = findChild(ln, \"a:prstDash\");\n if (prstDash) {\n const val = attr(prstDash, \"val\");\n if (val) opts.dashStyle = val;\n }\n\n return Object.keys(opts).length > 0 ? opts : undefined;\n}\n\nfunction parseEffectsFromElement(parent: Element): unknown {\n const spPr = findChild(parent, \"p:spPr\") ?? parent;\n const opts: Record<string, unknown> = {};\n\n // 2D effects from a:effectLst\n const effectLst = findChild(spPr, \"a:effectLst\");\n if (effectLst) {\n for (const child of effectLst.elements ?? []) {\n if (!child.name) continue;\n switch (child.name) {\n case \"a:outerShdw\": {\n const shadow: Record<string, unknown> = {};\n const blurRad = attrNum(child, \"blurRad\");\n if (blurRad !== undefined) shadow.blur = blurRad;\n const dist = attrNum(child, \"dist\");\n if (dist !== undefined) shadow.distance = dist;\n const dir = attrNum(child, \"dir\");\n if (dir !== undefined) shadow.direction = dir;\n const color = extractColorFromElement(child);\n if (color) {\n if (color.color) shadow.color = color.color;\n if (color.alpha !== undefined) shadow.alpha = color.alpha;\n }\n opts.outerShadow = shadow;\n break;\n }\n case \"a:innerShdw\": {\n const shadow: Record<string, unknown> = {};\n const blurRad = attrNum(child, \"blurRad\");\n if (blurRad !== undefined) shadow.blur = blurRad;\n const dist = attrNum(child, \"dist\");\n if (dist !== undefined) shadow.distance = dist;\n const dir = attrNum(child, \"dir\");\n if (dir !== undefined) shadow.direction = dir;\n const color = extractColorFromElement(child);\n if (color) {\n if (color.color) shadow.color = color.color;\n if (color.alpha !== undefined) shadow.alpha = color.alpha;\n }\n opts.innerShadow = shadow;\n break;\n }\n case \"a:glow\": {\n const glow: Record<string, unknown> = {};\n const rad = attrNum(child, \"rad\");\n if (rad !== undefined) glow.radius = rad;\n const color = extractColorFromElement(child);\n if (color) {\n if (color.color) glow.color = color.color;\n if (color.alpha !== undefined) glow.alpha = color.alpha;\n }\n opts.glow = glow;\n break;\n }\n case \"a:reflection\": {\n const reflection: Record<string, unknown> = {};\n const blurRad = attrNum(child, \"blurRad\");\n if (blurRad !== undefined) reflection.blurRadius = blurRad;\n const dist = attrNum(child, \"dist\");\n if (dist !== undefined) reflection.distance = dist;\n const dir = attrNum(child, \"dir\");\n if (dir !== undefined) reflection.direction = dir;\n const stA = attrNum(child, \"stA\");\n if (stA !== undefined) reflection.startAlpha = stA / 1000;\n const endA = attrNum(child, \"endA\");\n if (endA !== undefined) reflection.endAlpha = endA / 1000;\n opts.reflection = reflection;\n break;\n }\n case \"a:softEdge\": {\n const rad = attrNum(child, \"rad\");\n if (rad !== undefined) opts.softEdge = { radius: rad };\n break;\n }\n }\n }\n }\n\n // 3D scene (rotation3D, lighting) from a:scene3d\n const scene3d = findChild(spPr, \"a:scene3d\");\n if (scene3d) {\n const camera = findChild(scene3d, \"a:camera\");\n if (camera) {\n const rot = findChild(camera, \"a:rot\");\n if (rot) {\n const rotation3d: Record<string, number> = {};\n const lat = attrNum(rot, \"lat\");\n const lon = attrNum(rot, \"lon\");\n const rev = attrNum(rot, \"rev\");\n if (lat !== undefined) rotation3d.x = Math.round(lat / 60000);\n if (lon !== undefined) rotation3d.y = Math.round(lon / 60000);\n if (rev !== undefined) rotation3d.z = Math.round(rev / 60000);\n const fov = attrNum(camera, \"fov\");\n if (fov !== undefined) rotation3d.perspective = fov;\n if (Object.keys(rotation3d).length > 0) opts.rotation3D = rotation3d;\n }\n }\n const lightRig = findChild(scene3d, \"a:lightRig\");\n if (lightRig) {\n const rig = attr(lightRig, \"rig\");\n if (rig) opts.lighting = rig;\n }\n }\n\n // 3D shape properties (bevel, extrusion, material) from a:sp3d\n const sp3d = findChild(spPr, \"a:sp3d\");\n if (sp3d) {\n const bevelT = findChild(sp3d, \"a:bevelT\");\n if (bevelT) {\n const bevel: Record<string, unknown> = {};\n const w = attrNum(bevelT, \"w\");\n const h = attrNum(bevelT, \"h\");\n if (w !== undefined) bevel.width = Math.round(w / 12700);\n if (h !== undefined) bevel.height = Math.round(h / 12700);\n const prst = attr(bevelT, \"prst\");\n if (prst) bevel.preset = prst;\n if (Object.keys(bevel).length > 0) opts.bevelTop = bevel;\n }\n const bevelB = findChild(sp3d, \"a:bevelB\");\n if (bevelB) {\n const bevel: Record<string, unknown> = {};\n const w = attrNum(bevelB, \"w\");\n const h = attrNum(bevelB, \"h\");\n if (w !== undefined) bevel.width = Math.round(w / 12700);\n if (h !== undefined) bevel.height = Math.round(h / 12700);\n const prst = attr(bevelB, \"prst\");\n if (prst) bevel.preset = prst;\n if (Object.keys(bevel).length > 0) opts.bevelBottom = bevel;\n }\n const z = attrNum(sp3d, \"z\");\n if (z !== undefined) opts.depth = z;\n const contourW = attrNum(sp3d, \"contourW\");\n if (contourW !== undefined) opts.contourWidth = contourW;\n const extrusionH = attrNum(sp3d, \"extrusionH\");\n if (extrusionH !== undefined) opts.extrusionH = extrusionH;\n const prstMaterial = attr(sp3d, \"prstMaterial\");\n if (prstMaterial) {\n opts.material = prstMaterial;\n }\n }\n\n return Object.keys(opts).length > 0 ? opts : undefined;\n}\n\n/**\n * Extract color and alpha from an effect element's child color element.\n * Looks for a:srgbClr with optional a:alpha transform.\n */\nfunction extractColorFromElement(el: Element): { color?: string; alpha?: number } | undefined {\n for (const child of el.elements ?? []) {\n if (child.name === \"a:srgbClr\") {\n const color = colorAttr(child, \"val\");\n let alpha: number | undefined;\n for (const transform of child.elements ?? []) {\n if (transform.name === \"a:alpha\") {\n const val = attrNum(transform, \"val\");\n if (val !== undefined) alpha = Math.round(val / 1000);\n }\n }\n return { color: color ?? undefined, alpha };\n }\n }\n return undefined;\n}\n\n/**\n * Parse a notesSlide XML element and extract the notes text.\n */\nfunction parseNotesSlide(el: Element): string | undefined {\n const cSld = findChild(el, \"p:cSld\");\n if (!cSld) return undefined;\n\n const spTree = findChild(cSld, \"p:spTree\");\n if (!spTree) return undefined;\n\n // Look for the notes body placeholder (typically type \"body\" in p:nvSpPr > p:nvPr > p:ph)\n const texts: string[] = [];\n for (const sp of spTree.elements ?? []) {\n if (sp.name !== \"p:sp\") continue;\n // Check if this is a body placeholder\n const nvSpPr = findChild(sp, \"p:nvSpPr\");\n const nvPr = nvSpPr ? findChild(nvSpPr, \"p:nvPr\") : undefined;\n const ph = nvPr ? findChild(nvPr, \"p:ph\") : undefined;\n const phType = ph ? attr(ph, \"type\") : undefined;\n // Skip slide image placeholder (type \"sldImg\")\n if (phType === \"sldImg\") continue;\n\n const txBody = findChild(sp, \"p:txBody\");\n if (txBody) {\n const t = extractPlainText(txBody);\n if (t) texts.push(t);\n }\n }\n\n return texts.length > 0 ? texts.join(\"\\n\") : undefined;\n}\n\n/**\n * Extract plain text from a p:txBody element by concatenating all a:t values.\n */\nfunction extractPlainText(el: Element): string {\n const parts: string[] = [];\n for (const p of children(el, \"a:p\")) {\n for (const r of children(p, \"a:r\")) {\n for (const t of children(r, \"a:t\")) {\n const text = textOf(t);\n if (text) parts.push(text);\n }\n }\n parts.push(\"\\n\");\n }\n // Remove trailing newline\n if (parts.length > 0 && parts[parts.length - 1] === \"\\n\") parts.pop();\n return parts.join(\"\");\n}\n\nfunction imageTypeFromPath(path: string): \"jpg\" | \"png\" | \"gif\" | \"bmp\" | \"emf\" | \"wmf\" {\n const ext = path.split(\".\").pop()?.toLowerCase() ?? \"\";\n switch (ext) {\n case \"jpg\":\n case \"jpeg\":\n return \"jpg\";\n case \"png\":\n return \"png\";\n case \"gif\":\n return \"gif\";\n case \"bmp\":\n return \"bmp\";\n case \"emf\":\n return \"emf\";\n case \"wmf\":\n return \"wmf\";\n default:\n return \"png\";\n }\n}\n\n// ── Video / Audio detection and parsing ───────────────────────────────────────\n\nconst VIDEO_EXT_URI = \"{DAA4B4D4-6D71-4841-9C94-3DE7FCFB9230}\";\nconst AUDIO_EXT_URI = \"{CF1602FD-DB20-4165-A070-5F299619DA56}\";\n\n/**\n * Check if a p:pic element is actually a video or audio frame\n * by looking for media extension URIs in nvPr > extLst.\n */\nfunction detectMediaType(el: Element): \"video\" | \"audio\" | undefined {\n const nvPicPr = findChild(el, \"p:nvPicPr\");\n if (!nvPicPr) return undefined;\n\n const nvPr = findChild(nvPicPr, \"p:nvPr\");\n if (!nvPr) return undefined;\n\n const extLst = findChild(nvPr, \"p:extLst\");\n if (!extLst) return undefined;\n\n for (const ext of extLst.elements ?? []) {\n if (ext.name !== \"p:ext\") continue;\n const uri = attr(ext, \"uri\");\n if (uri === VIDEO_EXT_URI) return \"video\";\n if (uri === AUDIO_EXT_URI) return \"audio\";\n }\n\n return undefined;\n}\n\nfunction parseMediaFrame(\n el: Element,\n ctx: ParseContext,\n mediaKind: \"video\" | \"audio\",\n): Record<string, unknown> {\n const opts: Record<string, unknown> = {};\n\n // Position from p:spPr\n const spPr = findChild(el, \"p:spPr\");\n if (spPr) parseTransformFromSpPr(spPr, opts);\n\n // Name from p:nvPicPr → a:cNvPr or p:cNvPr\n const nvPicPr = findChild(el, \"p:nvPicPr\");\n if (nvPicPr) {\n const cNvPr = findChild(nvPicPr, \"a:cNvPr\") ?? findChild(nvPicPr, \"p:cNvPr\");\n if (cNvPr) {\n const name = attr(cNvPr, \"name\");\n if (name) opts.name = name;\n }\n }\n\n // Media data from a:videoFile/a:audioFile (r:link) or p14:media (r:embed)\n const mediaFileEl = findDeep(el, \"a:videoFile\")[0] ?? findDeep(el, \"a:audioFile\")[0];\n const rLink = mediaFileEl ? attr(mediaFileEl, \"r:link\") : undefined;\n\n // Fallback: p14:media in extLst (used by audio frames)\n const p14media = !mediaFileEl ? findDeep(el, \"p14:media\")[0] : undefined;\n const rEmbed = p14media ? attr(p14media, \"r:embed\") : undefined;\n\n const mediaRef = rLink ?? rEmbed;\n if (mediaRef) {\n const mediaPath = ctx.slideRels.get(mediaRef);\n if (mediaPath) {\n const data = ctx.pptx.doc.getRaw(mediaPath);\n if (data) {\n opts.data = data;\n opts.type = mediaTypeFromPath(mediaPath, mediaKind);\n }\n }\n }\n\n // Video poster frame from blipFill\n if (mediaKind === \"video\") {\n const blipFill = findChild(el, \"p:blipFill\");\n if (blipFill) {\n const posterBlip = findChild(blipFill, \"a:blip\");\n if (posterBlip) {\n const rEmbed = attr(posterBlip, \"r:embed\");\n if (rEmbed) {\n const posterPath = ctx.slideRels.get(rEmbed);\n if (posterPath) {\n const posterData = ctx.pptx.doc.getRaw(posterPath);\n if (posterData) {\n opts.poster = posterData;\n opts.posterType = imageTypeFromPath(posterPath);\n }\n }\n }\n }\n }\n }\n\n return opts;\n}\n\nfunction mediaTypeFromPath(path: string, kind: \"video\" | \"audio\"): string {\n const ext = path.split(\".\").pop()?.toLowerCase() ?? \"\";\n\n if (kind === \"video\") {\n switch (ext) {\n case \"mp4\":\n return \"mp4\";\n case \"mov\":\n case \"qt\":\n return \"mov\";\n case \"wmv\":\n return \"wmv\";\n case \"avi\":\n return \"avi\";\n default:\n return \"mp4\";\n }\n } else {\n switch (ext) {\n case \"mp3\":\n return \"mp3\";\n case \"wav\":\n return \"wav\";\n case \"wma\":\n return \"wma\";\n case \"aac\":\n return \"aac\";\n default:\n return \"mp3\";\n }\n }\n}\n\n// ── Blip fill parsing ─────────────────────────────────────────────────────────\n\n/**\n * Parse a:blipFill from a shape's spPr.\n * Used when a shape has an image fill (not a picture element).\n * Returns { type: \"blip\", data } if found.\n */\n","import { attr, findChild } from \"@office-open/xml\";\nimport type { Element } from \"@office-open/xml\";\n\nimport type { SlideLayoutType } from \"../file/slide-layout/slide-layout\";\n\n// Display name → SlideLayoutType mapping (from LAYOUT_DEFS in slide-layout.ts)\nconst NAME_TO_TYPE: Record<string, SlideLayoutType> = {\n \"Title Slide\": \"title\",\n \"Title and Content\": \"obj\",\n \"Section Header\": \"secHead\",\n \"Two Content\": \"twoObj\",\n Comparison: \"twoTxTwoObj\",\n \"Title Only\": \"titleOnly\",\n Blank: \"blank\",\n \"Content with Caption\": \"objTx\",\n \"Picture with Caption\": \"picTx\",\n \"Vertical Text\": \"vertTx\",\n \"Vertical Title and Text\": \"vertTitleAndTx\",\n \"Title and Text\": \"tx\",\n};\n\nexport function parseSlideLayoutType(el: Element): SlideLayoutType | string {\n const cSld = findChild(el, \"p:cSld\");\n if (cSld) {\n const name = attr(cSld, \"name\");\n if (name) {\n const mapped = NAME_TO_TYPE[name];\n if (mapped) return mapped;\n // Fallback: return display name as custom string\n return name;\n }\n }\n return \"blank\";\n}\n","import { attr, colorAttr, findChild } from \"@office-open/xml\";\nimport type { Element } from \"@office-open/xml\";\n\nimport type { ColorSchemeOptions, FontSchemeOptions, ThemeOptions } from \"../file/theme/theme\";\n\n// Mapping: XML element name → ColorSchemeOptions key\nconst COLOR_MAP: Record<string, keyof ColorSchemeOptions> = {\n \"a:dk1\": \"dark1\",\n \"a:lt1\": \"light1\",\n \"a:dk2\": \"dark2\",\n \"a:lt2\": \"light2\",\n \"a:accent1\": \"accent1\",\n \"a:accent2\": \"accent2\",\n \"a:accent3\": \"accent3\",\n \"a:accent4\": \"accent4\",\n \"a:accent5\": \"accent5\",\n \"a:accent6\": \"accent6\",\n \"a:hlink\": \"hyperlink\",\n \"a:folHlink\": \"followedHyperlink\",\n};\n\nfunction extractColor(el: Element): string | undefined {\n const srgb = findChild(el, \"a:srgbClr\");\n if (srgb) return colorAttr(srgb, \"val\") ?? undefined;\n const sysClr = findChild(el, \"a:sysClr\");\n if (sysClr) return attr(sysClr, \"lastClr\") ?? undefined;\n return undefined;\n}\n\nexport function parseColorScheme(el: Element): ColorSchemeOptions {\n const colors: Record<string, string> = {};\n for (const child of el.elements ?? []) {\n if (!child.name) continue;\n const key = COLOR_MAP[child.name];\n if (!key) continue;\n const val = extractColor(child);\n if (val) colors[key] = val;\n }\n return colors as ColorSchemeOptions;\n}\n\nexport function parseFontScheme(el: Element): FontSchemeOptions {\n const fonts: Record<string, string> = {};\n const major = findChild(el, \"a:majorFont\");\n if (major) {\n const latin = findChild(major, \"a:latin\");\n if (latin) fonts.majorFont = attr(latin, \"typeface\") ?? \"\";\n const ea = findChild(major, \"a:ea\");\n if (ea) fonts.majorFontAsian = attr(ea, \"typeface\") ?? \"\";\n }\n const minor = findChild(el, \"a:minorFont\");\n if (minor) {\n const latin = findChild(minor, \"a:latin\");\n if (latin) fonts.minorFont = attr(latin, \"typeface\") ?? \"\";\n const ea = findChild(minor, \"a:ea\");\n if (ea) fonts.minorFontAsian = attr(ea, \"typeface\") ?? \"\";\n }\n return fonts as FontSchemeOptions;\n}\n\nexport function parseTheme(el: Element): ThemeOptions {\n const opts: Record<string, unknown> = {};\n const name = attr(el, \"name\");\n if (name) opts.name = name;\n\n const themeElements = findChild(el, \"a:themeElements\");\n if (themeElements) {\n const clrScheme = findChild(themeElements, \"a:clrScheme\");\n if (clrScheme) opts.colors = parseColorScheme(clrScheme);\n\n const fontScheme = findChild(themeElements, \"a:fontScheme\");\n if (fontScheme) opts.fonts = parseFontScheme(fontScheme);\n }\n\n return opts as ThemeOptions;\n}\n","import type { ParsedArchive } from \"@office-open/core\";\nimport { parseArchive, parseCorePropsElement, convertEmuToPixels } from \"@office-open/core\";\nimport type { Element } from \"@office-open/xml\";\nimport { attr, attrNum, findChild, textOf } from \"@office-open/xml\";\nimport type { DataType } from \"undio\";\nimport { toUint8Array } from \"undio\";\n\nimport type { SlideChild } from \"./file/slide/slide-child\";\nimport { ParseContext } from \"./parse/context\";\nimport { parseSlide } from \"./parse/slide\";\nimport { parseSlideChild } from \"./parse/slide\";\nimport { parseBackground } from \"./parse/slide\";\nimport { parseSlideLayoutType } from \"./parse/slide-layout\";\nimport { parseTheme } from \"./parse/theme\";\n\nexport { parseArchive };\n\nimport type { MasterDefinition, SlideOptions, PresentationOptions } from \"./file/file\";\nimport type { SlideLayoutType } from \"./file/slide-layout/slide-layout\";\n\n/**\n * All part paths extracted from the PPTX package.\n * Field names correspond directly to the OOXML directory structure.\n */\nexport interface PptxPartRefs {\n /** ppt/theme/themeN.xml */\n themes: string[];\n /** ppt/notesMasters/notesMasterN.xml */\n notesMasters: string[];\n /** ppt/commentAuthors.xml */\n commentAuthors?: string;\n /** ppt/comments/commentN.xml (from slide rels) */\n comments: string[];\n /** ppt/charts/chartN.xml (from slide rels) */\n charts: string[];\n /** ppt/diagrams/dataN.xml (from slide rels) */\n diagramData: string[];\n /** ppt/media/* (all media files) */\n media: string[];\n}\n\nexport interface PptxDocument {\n doc: ParsedArchive;\n /** ppt/presentation.xml root element (p:presentation) */\n presentation?: Element;\n /** ppt/slides/slideN.xml */\n slides: string[];\n /** ppt/slideMasters/slideMasterN.xml */\n slideMasters: string[];\n /** ppt/slideLayouts/slideLayoutN.xml */\n slideLayouts: string[];\n /** ppt/notesSlides/notesSlideN.xml */\n notesSlides: string[];\n partRefs: PptxPartRefs;\n /** ppt/presProps.xml */\n presProps?: string;\n /** ppt/viewProps.xml */\n viewProps?: string;\n /** ppt/tableStyles.xml */\n tableStyles?: string;\n /** docProps/core.xml */\n coreProps?: string;\n /** docProps/app.xml */\n appProps?: string;\n}\n\nfunction resolveRelsPath(target: string): string {\n if (target.startsWith(\"/\")) return target.slice(1);\n if (target.startsWith(\"../\")) return target.replace(\"../\", \"ppt/\");\n return `ppt/${target}`;\n}\n\nfunction sortByNumber(paths: string[]): string[] {\n return paths.sort((a, b) => {\n const numA = parseInt(a.match(/(\\d+)/)?.[1] ?? \"0\", 10);\n const numB = parseInt(b.match(/(\\d+)/)?.[1] ?? \"0\", 10);\n return numA - numB;\n });\n}\n\nfunction xmlKeys(keys: string[]): string[] {\n return keys.filter((k) => k.endsWith(\".xml\"));\n}\n\nfunction parseRootRels(doc: ParsedArchive): { coreProps?: string; appProps?: string } {\n const relsEl = doc.get(\"_rels/.rels\");\n if (!relsEl) return {};\n\n let coreProps: string | undefined;\n let appProps: string | undefined;\n\n for (const child of relsEl.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const type = attr(child, \"Type\") ?? \"\";\n const target = attr(child, \"Target\") ?? \"\";\n if (!target) continue;\n\n const path = target.startsWith(\"/\") ? target.slice(1) : target;\n\n if (type.includes(\"/core-properties\")) {\n coreProps = path;\n } else if (type.includes(\"/extended-properties\")) {\n appProps = path;\n }\n }\n\n return { coreProps, appProps };\n}\n\nfunction parseSlideRels(doc: ParsedArchive, slidePaths: string[], refs: PptxPartRefs): void {\n const commentsSet = new Set(refs.comments);\n const chartsSet = new Set(refs.charts);\n const diagramDataSet = new Set(refs.diagramData);\n const mediaSet = new Set(refs.media);\n\n for (const slidePath of slidePaths) {\n const parts = slidePath.split(\"/\");\n const fileName = parts.pop()!;\n const relsPath = `${parts.join(\"/\")}/_rels/${fileName}.rels`;\n\n const relsEl = doc.get(relsPath);\n if (!relsEl) continue;\n\n for (const child of relsEl.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const type = attr(child, \"Type\") ?? \"\";\n const target = attr(child, \"Target\") ?? \"\";\n if (!target) continue;\n\n const path = resolveRelsPath(target);\n\n if (type.includes(\"/comments\") && !type.includes(\"commentAuthors\")) {\n commentsSet.add(path);\n } else if (type.includes(\"/chart\")) {\n chartsSet.add(path);\n } else if (type.includes(\"/diagramData\")) {\n diagramDataSet.add(path);\n } else if (type.includes(\"/image\") || type.includes(\"/video\") || type.includes(\"/media\")) {\n mediaSet.add(path);\n }\n }\n }\n\n refs.comments = [...commentsSet];\n refs.charts = [...chartsSet];\n refs.diagramData = [...diagramDataSet];\n refs.media = [...mediaSet];\n}\n\nexport function parsePptx(data: DataType): PptxDocument {\n const uint8 = toUint8Array(data);\n const doc = parseArchive(uint8);\n\n const presentation = doc.get(\"ppt/presentation.xml\");\n\n const relsXml = doc.get(\"ppt/_rels/presentation.xml.rels\");\n const slides: string[] = [];\n const slideMasters: string[] = [];\n const themes: string[] = [];\n const notesMasters: string[] = [];\n let presProps: string | undefined;\n let viewProps: string | undefined;\n let tableStyles: string | undefined;\n let commentAuthors: string | undefined;\n\n if (relsXml) {\n for (const child of relsXml.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const type = attr(child, \"Type\") ?? \"\";\n const target = attr(child, \"Target\") ?? \"\";\n if (!target) continue;\n\n const path = resolveRelsPath(target);\n\n if (type.includes(\"/slideMaster\")) {\n slideMasters.push(path);\n } else if (\n type.includes(\"/slide\") &&\n !type.includes(\"slideLayout\") &&\n !type.includes(\"slideMaster\")\n ) {\n slides.push(path);\n } else if (type.includes(\"/theme\")) {\n themes.push(path);\n } else if (type.includes(\"/notesMaster\")) {\n notesMasters.push(path);\n } else if (type.includes(\"/presProps\")) {\n presProps = path;\n } else if (type.includes(\"/viewProps\")) {\n viewProps = path;\n } else if (type.includes(\"/tableStyles\")) {\n tableStyles = path;\n } else if (type.includes(\"/commentAuthors\")) {\n commentAuthors = path;\n }\n }\n }\n\n sortByNumber(slides);\n sortByNumber(slideMasters);\n sortByNumber(themes);\n sortByNumber(notesMasters);\n\n const slideLayouts = sortByNumber(xmlKeys(doc.keys(\"ppt/slideLayouts/\")));\n const notesSlides = sortByNumber(xmlKeys(doc.keys(\"ppt/notesSlides/\")));\n\n const partRefs: PptxPartRefs = {\n themes,\n notesMasters,\n commentAuthors,\n comments: [],\n charts: [],\n diagramData: [],\n media: doc.keys(\"ppt/media/\"),\n };\n\n parseSlideRels(doc, slides, partRefs);\n sortByNumber(partRefs.comments);\n sortByNumber(partRefs.charts);\n sortByNumber(partRefs.diagramData);\n\n const { coreProps, appProps } = parseRootRels(doc);\n\n return {\n doc,\n presentation,\n slides,\n slideMasters,\n slideLayouts,\n notesSlides,\n partRefs,\n presProps,\n viewProps,\n tableStyles,\n coreProps,\n appProps,\n };\n}\n\n/**\n * Parse a single slide's relationship file into a Map<rId, path>.\n */\nfunction parseSlideRelMap(doc: ParsedArchive, slidePath: string): Map<string, string> {\n const rels = new Map<string, string>();\n const parts = slidePath.split(\"/\");\n const fileName = parts.pop()!;\n const relsPath = `${parts.join(\"/\")}/_rels/${fileName}.rels`;\n\n const relsEl = doc.get(relsPath);\n if (!relsEl) return rels;\n\n for (const child of relsEl.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const id = attr(child, \"Id\") ?? \"\";\n const target = attr(child, \"Target\") ?? \"\";\n if (!id || !target) continue;\n // External links (hyperlinks) keep their original URL target\n if (attr(child, \"TargetMode\") === \"External\") {\n rels.set(id, target);\n } else {\n rels.set(id, resolveRelsPath(target));\n }\n }\n\n return rels;\n}\n\n/**\n * Build a map from each path to the rel target matching a predicate.\n */\nfunction resolveRelTargets(\n doc: ParsedArchive,\n paths: readonly string[],\n predicate: (target: string) => boolean,\n): Map<string, string> {\n const map = new Map<string, string>();\n for (const path of paths) {\n for (const target of parseSlideRelMap(doc, path).values()) {\n if (predicate(target)) map.set(path, target);\n }\n }\n return map;\n}\n\n/**\n * Parse a .pptx file and convert it into PresentationOptions.\n *\n * This is the main public API for parsing PPTX files.\n * The returned options can be passed directly to `new Presentation(parsed)`\n * to recreate the presentation.\n *\n * @param data - Raw bytes of a .pptx file\n * @returns Parsed presentation options\n */\nexport function parsePresentation(data: DataType): PresentationOptions {\n const pptx = parsePptx(data);\n const opts: Record<string, unknown> = {};\n\n // 1. Parse slide size from p:sldSz\n if (pptx.presentation) {\n const sldSz = findChild(pptx.presentation, \"p:sldSz\");\n if (sldSz) {\n const cx = attrNum(sldSz, \"cx\");\n const cy = attrNum(sldSz, \"cy\");\n if (cx === 12192000 && cy === 6858000) {\n opts.size = \"16:9\";\n } else if (cx === 9144000 && cy === 6858000) {\n opts.size = \"4:3\";\n } else if (cx && cy) {\n opts.size = { width: convertEmuToPixels(cx), height: convertEmuToPixels(cy) };\n }\n }\n }\n\n // 2. Parse core properties\n if (pptx.coreProps) {\n const corePropsEl = pptx.doc.get(pptx.coreProps);\n if (corePropsEl) {\n const cp = parseCorePropsElement(corePropsEl);\n if (cp.title) opts.title = cp.title;\n if (cp.subject) opts.subject = cp.subject;\n if (cp.creator) opts.creator = cp.creator;\n if (cp.keywords) opts.keywords = cp.keywords;\n if (cp.description) opts.description = cp.description;\n if (cp.lastModifiedBy) opts.lastModifiedBy = cp.lastModifiedBy;\n if (cp.revision) opts.revision = parseInt(cp.revision, 10);\n }\n }\n\n // 3. Parse show options from presProps\n if (pptx.presProps) {\n const presPropsEl = pptx.doc.get(pptx.presProps);\n if (presPropsEl) {\n const showPr = findChild(presPropsEl, \"p:showPr\");\n if (showPr) {\n const show: Record<string, unknown> = {};\n if (attr(showPr, \"loop\") === \"1\") show.loop = true;\n // kiosk is a child element per XSD EG_ShowType, not an attribute\n if (findChild(showPr, \"p:kiosk\")) show.kiosk = true;\n const showNarrationVal = attr(showPr, \"showNarration\");\n if (showNarrationVal === \"0\") show.showNarration = false;\n else if (showNarrationVal !== undefined) show.showNarration = true;\n if (attr(showPr, \"useTimings\") === \"1\") show.useTimings = true;\n if (Object.keys(show).length > 0) opts.show = show;\n }\n }\n }\n\n // 4. Build relationship maps\n const masterThemePaths = resolveRelTargets(pptx.doc, pptx.slideMasters, (t) =>\n t.includes(\"/theme\"),\n );\n const layoutMasterPaths = resolveRelTargets(pptx.doc, pptx.slideLayouts, (t) =>\n t.includes(\"/slideMaster\"),\n );\n const slideLayoutPaths = resolveRelTargets(pptx.doc, pptx.slides, (t) =>\n t.includes(\"/slideLayout\"),\n );\n\n // 5. Parse masters\n const masterCount = pptx.slideMasters.length;\n const masterDefs: MasterDefinition[] = [];\n for (let mi = 0; mi < masterCount; mi++) {\n const masterPath = pptx.slideMasters[mi];\n const masterEl = pptx.doc.get(masterPath);\n if (!masterEl) continue;\n\n // Theme\n const themePath = masterThemePaths.get(masterPath);\n const themeEl = themePath ? pptx.doc.get(themePath) : undefined;\n const themeOptions = themeEl ? parseTheme(themeEl) : undefined;\n\n // Background (inline: findChild → parseBackground)\n const cSld = findChild(masterEl, \"p:cSld\");\n const bg = cSld ? findChild(cSld, \"p:bg\") : undefined;\n const masterBackground = bg ? parseBackground(bg) : undefined;\n const hasBackground = masterBackground && Object.keys(masterBackground).length > 0;\n\n // Children: extract non-placeholder shapes from spTree\n const spTree = cSld ? findChild(cSld, \"p:spTree\") : undefined;\n const masterChildren: SlideChild[] = [];\n if (spTree) {\n const emptyCtx: ParseContext = { pptx, slideRels: new Map() };\n for (const child of spTree.elements ?? []) {\n // Skip nvGrpSpPr/grpSpPr (tree container structure, not shapes)\n if (child.name === \"p:nvGrpSpPr\" || child.name === \"p:grpSpPr\") continue;\n // Skip placeholder shapes (generated by DefaultSlideMaster template)\n if (child.name === \"p:sp\") {\n const nvSpPr = findChild(child, \"p:nvSpPr\");\n const nvPr = nvSpPr ? findChild(nvSpPr, \"p:nvPr\") : undefined;\n if (nvPr && findChild(nvPr, \"p:ph\")) continue;\n }\n const parsed = parseSlideChild(child, emptyCtx);\n if (parsed !== undefined) masterChildren.push(parsed);\n }\n }\n\n // Layouts belonging to this master\n const masterLayouts: NonNullable<MasterDefinition[\"layouts\"]>[number][] = [];\n for (const layoutPath of pptx.slideLayouts) {\n if (layoutMasterPaths.get(layoutPath) !== masterPath) continue;\n const layoutEl = pptx.doc.get(layoutPath);\n if (layoutEl) masterLayouts.push({ type: parseSlideLayoutType(layoutEl) as SlideLayoutType });\n }\n\n const masterName = themeOptions?.name ?? `master${mi + 1}`;\n const masterDef = {} as Record<string, unknown>;\n masterDef.name = masterName;\n if (themeOptions) masterDef.theme = themeOptions;\n if (hasBackground) masterDef.background = masterBackground;\n if (masterChildren.length > 0) masterDef.children = masterChildren;\n if (masterLayouts.length > 0) masterDef.layouts = masterLayouts;\n masterDefs.push(masterDef as MasterDefinition);\n }\n\n // Only set masters if there's more than one (single master is auto-created)\n if (masterCount > 1) {\n opts.masters = masterDefs;\n }\n\n // 6. Parse comment authors\n const commentAuthors = new Map<number, { name: string; initials: string }>();\n if (pptx.partRefs.commentAuthors) {\n const authorsEl = pptx.doc.get(pptx.partRefs.commentAuthors);\n if (authorsEl) {\n for (const child of authorsEl.elements ?? []) {\n if (child.name !== \"p:cmAuthor\") continue;\n const id = attrNum(child, \"id\");\n const name = attr(child, \"name\");\n const initials = attr(child, \"initials\");\n if (id !== undefined) {\n commentAuthors.set(id, { name: name ?? \"\", initials: initials ?? \"\" });\n }\n }\n }\n }\n\n // 7. Parse slides with layout and master references\n const result: SlideOptions[] = [];\n for (let si = 0; si < pptx.slides.length; si++) {\n const slidePath = pptx.slides[si];\n const slideEl = pptx.doc.get(slidePath);\n if (!slideEl) continue;\n\n const slideRels = parseSlideRelMap(pptx.doc, slidePath);\n const ctx = new ParseContext(pptx, slideRels);\n const slideOpts = parseSlide(slideEl, ctx) as Record<string, unknown>;\n\n // Resolve layout → master\n const layoutPath = slideLayoutPaths.get(slidePath);\n if (layoutPath) {\n const layoutEl = pptx.doc.get(layoutPath);\n if (layoutEl) slideOpts.layout = parseSlideLayoutType(layoutEl);\n\n const resolvedMasterPath = layoutMasterPaths.get(layoutPath);\n if (resolvedMasterPath) {\n const masterIdx = pptx.slideMasters.indexOf(resolvedMasterPath);\n if (masterIdx >= 0 && masterDefs[masterIdx]) {\n slideOpts.master = masterDefs[masterIdx].name;\n }\n }\n }\n\n // Comments via slide rels\n for (const [, relPath] of slideRels) {\n if (!relPath.includes(\"/comments/\")) continue;\n const commentsEl = pptx.doc.get(relPath);\n if (!commentsEl) continue;\n\n const comments: Record<string, unknown>[] = [];\n for (const cm of commentsEl.elements ?? []) {\n if (cm.name !== \"p:cm\") continue;\n const authorId = attrNum(cm, \"authorId\");\n const dt = attr(cm, \"dt\");\n const idx = attrNum(cm, \"idx\");\n\n const author = authorId !== undefined ? commentAuthors.get(authorId) : undefined;\n const pos = findChild(cm, \"p:pos\");\n const x = pos ? attrNum(pos, \"x\") : undefined;\n const y = pos ? attrNum(pos, \"y\") : undefined;\n\n // Extract text from p:text or p:txBody\n const textEl = findChild(cm, \"p:text\");\n const txBody = findChild(cm, \"p:txBody\");\n const text = textEl ? (textOf(textEl) ?? \"\") : txBody ? extractCommentText(txBody) : \"\";\n\n const commentEntry: Record<string, unknown> = {};\n if (authorId !== undefined) commentEntry.authorId = authorId;\n if (author) commentEntry.author = author.name;\n if (idx !== undefined) commentEntry.idx = idx;\n if (dt) commentEntry.date = dt;\n if (x !== undefined) commentEntry.x = x;\n if (y !== undefined) commentEntry.y = y;\n if (text) commentEntry.text = text;\n\n comments.push(commentEntry);\n }\n\n if (comments.length > 0) slideOpts.comments = comments;\n break;\n }\n\n result.push(slideOpts as SlideOptions);\n }\n\n opts.slides = result;\n return opts as PresentationOptions;\n}\n\n/**\n * Extract plain text from a p:txBody in a comment element.\n */\nfunction extractCommentText(txBody: Element): string {\n const parts: string[] = [];\n for (const p of txBody.elements ?? []) {\n if (p.name !== \"a:p\") continue;\n for (const r of p.elements ?? []) {\n if (r.name !== \"a:r\") continue;\n for (const t of r.elements ?? []) {\n if (t.name === \"a:t\") {\n const text = textOf(t);\n if (text) parts.push(text);\n }\n }\n }\n }\n return parts.join(\"\");\n}\n","import type { Context, XmlComponent } from \"@file/xml-components\";\nimport {\n PPTX_NS,\n Formatter,\n OoxmlMimeType,\n appendContentType,\n createReplacer,\n toJson,\n strFromU8,\n unzipSync,\n zipAndConvert,\n} from \"@office-open/core\";\nimport type { OutputByType, OutputType } from \"@office-open/core\";\nimport { js2xml, xml2js } from \"@office-open/xml\";\nimport type { Element } from \"@office-open/xml\";\nimport { toUint8Array } from \"undio\";\n\n/** Reusable TextEncoder (stateless, safe to share). */\nconst encoder = new TextEncoder();\n\nexport type InputDataType = Buffer | string | number[] | Uint8Array | ArrayBuffer | Blob;\n\nexport const PatchType = {\n PARAGRAPH: \"paragraph\",\n} as const;\n\nexport type PatchDocumentOutputType = OutputType;\n\ninterface ParagraphPatch {\n readonly type: typeof PatchType.PARAGRAPH;\n readonly children: readonly unknown[];\n}\n\nexport type IPatch = ParagraphPatch;\n\nexport interface PatchPresentationOptions<\n T extends PatchDocumentOutputType = PatchDocumentOutputType,\n> {\n readonly outputType: T;\n readonly data: InputDataType;\n readonly patches: Readonly<Record<string, IPatch>>;\n readonly keepOriginalStyles?: boolean;\n readonly placeholderDelimiters?: Readonly<{\n readonly start: string;\n readonly end: string;\n }>;\n}\n\nconst formatter = new Formatter();\n\nconst pptxReplacer = createReplacer({\n ns: PPTX_NS,\n formatChild: (child: unknown, context: unknown): Element[] => {\n const xmlStr = formatter.formatToXml(child as XmlComponent, context as Context);\n const jsonObj = xml2js(xmlStr, { captureSpacesBetweenElements: true });\n return [jsonObj.elements![0]];\n },\n preserveSpace: false,\n});\n\nconst IMAGE_CONTENT_TYPES: ReadonlyArray<readonly [string, string]> = [\n [\"image/png\", \"png\"],\n [\"image/jpeg\", \"jpeg\"],\n [\"image/jpeg\", \"jpg\"],\n [\"image/bmp\", \"bmp\"],\n [\"image/gif\", \"gif\"],\n [\"image/svg+xml\", \"svg\"],\n [\"image/tiff\", \"tif\"],\n [\"image/tiff\", \"tiff\"],\n [\"image/x-emf\", \"emf\"],\n [\"image/x-wmf\", \"wmf\"],\n];\n\nconst SLIDE_RE = /^ppt\\/slides\\/slide(\\d+)\\.xml$/;\n\n/**\n * Patches an existing .pptx presentation by replacing placeholders with new content.\n *\n * @publicApi\n */\nexport const patchPresentation = async <\n T extends PatchDocumentOutputType = PatchDocumentOutputType,\n>({\n outputType,\n data,\n patches,\n keepOriginalStyles = true,\n placeholderDelimiters = { end: \"}}\", start: \"{{\" } as const,\n}: PatchPresentationOptions<T>): Promise<OutputByType[T]> => {\n const zipContent = unzipSync(toUint8Array(data));\n\n const xmlMap = new Map<string, Element>();\n const binaryMap = new Map<string, Uint8Array>();\n let hasMedia = false;\n\n // Separate XML files from binary files\n for (const [key, value] of Object.entries(zipContent)) {\n if (key.endsWith(\".xml\") || key.endsWith(\".rels\")) {\n xmlMap.set(key, toJson(strFromU8(value)));\n } else {\n binaryMap.set(key, value);\n }\n }\n\n // Collect slide paths sorted by number\n const slidePaths = Object.keys(zipContent)\n .filter((k) => SLIDE_RE.test(k))\n .sort((a, b) => {\n const na = parseInt(a.match(SLIDE_RE)![1], 10);\n const nb = parseInt(b.match(SLIDE_RE)![1], 10);\n return na - nb;\n });\n\n const { start, end } = placeholderDelimiters;\n if (!start.trim() || !end.trim()) {\n throw new Error(\"Both start and end delimiters must be non-empty strings.\");\n }\n\n const context: Context = { stack: [] };\n\n // Process text replacement on each slide\n for (const slidePath of slidePaths) {\n const json = xmlMap.get(slidePath);\n if (!json) continue;\n\n for (const [patchKey, patchValue] of Object.entries(patches)) {\n const patchText = `${start}${patchKey}${end}`;\n pptxReplacer({\n context,\n json,\n keepOriginalStyles,\n patch: patchValue,\n patchText,\n });\n }\n }\n\n // Handle image replacements in ppt/media/\n for (const [key, patch] of Object.entries(patches)) {\n if (\"data\" in patch && patch.data instanceof Uint8Array) {\n const mediaPath = `ppt/media/${key}`;\n if (binaryMap.has(mediaPath)) {\n binaryMap.set(mediaPath, patch.data);\n hasMedia = true;\n }\n }\n }\n\n // Add image content types if media was touched\n if (hasMedia) {\n const contentTypes = xmlMap.get(\"[Content_Types].xml\");\n if (contentTypes) {\n for (const [contentType, extension] of IMAGE_CONTENT_TYPES) {\n appendContentType(contentTypes, contentType, extension);\n }\n }\n }\n\n // Rebuild ZIP\n const files: Record<string, Uint8Array> = {};\n\n for (const [key, value] of xmlMap) {\n files[key] = encoder.encode(js2xml(value));\n }\n\n for (const [key, value] of binaryMap) {\n files[key] = value;\n }\n\n return await zipAndConvert(files, outputType, OoxmlMimeType.PPTX);\n};\n","export { File as Presentation } from \"./file\";\nexport * from \"./file\";\nexport * from \"./export\";\nexport * from \"./util\";\nexport * from \"./parse\";\nexport * from \"./patcher\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["createScene3D","createShape3D","createEffectList","convertPixelsToEmu","createOutline","createEffectList","convertPixelsToEmu","GraphicFrameNonVisual","convertPixelsToEmu","MEDIA_EXT_URI","convertPixelsToEmu","convertPixelsToEmu","createOutline","Xc","convertPixelsToEmu","Xc","GraphicFrameNonVisual","SW_REF","sx","convertPixelsToEmu","buildChildrenXml","convertPixelsToEmu","convertPixelsToEmu","encoder","Formatter","findDeep","convertEmuToPixels","convertEmuToPixels"],"sources":["../src/file/drawingml/effects.ts","../src/file/drawingml/fill.ts","../src/file/xml-components/base.ts","../src/file/xml-components/index.ts","../src/file/background/background.ts","../src/file/chart/chart-collection.ts","../src/file/comment/comment-author-list.ts","../src/file/comment/slide-comment-list.ts","../src/file/content-types/content-types.ts","../src/file/core-properties/properties.ts","../src/file/hyperlink-collection.ts","../src/file/media/media.ts","../src/file/shape-tree/group-shape-non-visual.ts","../src/file/shape/paragraph/paragraph-properties.ts","../src/file/constants.ts","../src/file/shape/paragraph/run-properties.ts","../src/file/shape/paragraph/run.ts","../src/file/shape/paragraph/paragraph.ts","../src/file/shape/text-body.ts","../src/file/notes/notes-slide.ts","../src/file/presentation-properties.ts","../src/file/presentation/presentation.ts","../src/file/presentation/presentation-wrapper.ts","../src/file/drawingml/transform-2d.ts","../src/util/position.ts","../src/file/chart/chart-frame.ts","../src/file/media/media-frame-base.ts","../src/file/media/audio-frame.ts","../src/file/media/video-frame.ts","../src/file/drawingml/blip-fill.ts","../src/file/drawingml/non-visual-picture-props.ts","../src/file/picture/picture-non-visual.ts","../src/file/picture/picture.ts","../src/file/shape/group-shape.ts","../src/file/drawingml/non-visual-shape-props.ts","../src/file/drawingml/outline.ts","../src/file/shape/line-shape.ts","../src/file/drawingml/shape-properties.ts","../src/file/shape/shape.ts","../src/file/smartart/smartart-frame.ts","../src/file/table/graphic.ts","../src/file/table/graphic-frame-non-visual.ts","../src/file/table/table-grid.ts","../src/file/table/table-properties.ts","../src/file/table/table-cell-properties.ts","../src/file/table/table-cell.ts","../src/file/table/table-row.ts","../src/file/table/table.ts","../src/file/table/table-frame.ts","../src/file/slide/coerce.ts","../src/file/slide-layout/slide-layout.ts","../src/file/slide-master/slide-master.ts","../src/file/animation/timing.ts","../src/file/transition/transition.ts","../src/file/slide/slide.ts","../src/file/table-styles.ts","../src/file/theme/theme.ts","../src/file/view-properties.ts","../src/file/file.ts","../src/file/shape/paragraph/text.ts","../src/file/shape/paragraph/end-paragraph-run.ts","../src/file/shape/paragraph/field.ts","../src/file/drawingml/non-visual-drawing-props.ts","../src/file/drawingml/group-transform-2d.ts","../src/file/drawingml/group-shape-properties.ts","../src/file/shape-tree/shape-tree.ts","../src/file/notes-master/notes-master.ts","../src/file/header-footer/header-footer.ts","../src/file/index.ts","../src/export/packer/hyperlink-placeholders.ts","../src/export/packer/media-placeholders.ts","../src/export/packer/next-compiler.ts","../src/export/packer/packer.ts","../src/util/types.ts","../src/util/index.ts","../src/parse/context.ts","../src/parse/animation.ts","../src/parse/slide.ts","../src/parse/slide-layout.ts","../src/parse/theme.ts","../src/parse.ts","../src/patcher/from-pptx.ts","../src/index.ts"],"sourcesContent":["import { xsdRectAlignment } from \"@office-open/core\";\nimport {\n createEffectList,\n createScene3D,\n createShape3D,\n type EffectListOptions,\n type Scene3DOptions,\n type Shape3DOptions,\n type BevelOptions,\n} from \"@office-open/core/drawingml\";\n\nexport type EffectType = \"outerShadow\" | \"innerShadow\" | \"glow\" | \"reflection\" | \"softEdge\";\n\nexport const ReflectionAlignment = {\n TOP_LEFT: \"topLeft\",\n TOP: \"top\",\n TOP_RIGHT: \"topRight\",\n LEFT: \"left\",\n CENTER: \"center\",\n RIGHT: \"right\",\n BOTTOM_LEFT: \"bottomLeft\",\n BOTTOM: \"bottom\",\n BOTTOM_RIGHT: \"bottomRight\",\n} as const;\n\nexport interface ShadowOptions {\n readonly blur?: number;\n readonly distance?: number;\n readonly direction?: number;\n readonly color?: string;\n readonly alpha?: number;\n readonly rotateWithShape?: boolean;\n}\n\nexport interface GlowOptions {\n readonly radius?: number;\n readonly color?: string;\n readonly alpha?: number;\n}\n\nexport interface ReflectionOptions {\n readonly blurRadius?: number;\n readonly distance?: number;\n readonly direction?: number;\n readonly startAlpha?: number;\n readonly startPosition?: number;\n readonly endAlpha?: number;\n readonly endPosition?: number;\n readonly fadeDirection?: number;\n readonly scaleX?: number;\n readonly scaleY?: number;\n readonly skewX?: number;\n readonly skewY?: number;\n readonly alignment?: (typeof ReflectionAlignment)[keyof typeof ReflectionAlignment];\n readonly rotateWithShape?: boolean;\n}\n\nexport interface SoftEdgeOptions {\n readonly radius?: number;\n}\n\nexport interface PPTXBevelOptions {\n readonly width?: number;\n readonly height?: number;\n}\n\nexport interface Rotation3DOptions {\n readonly x?: number;\n readonly y?: number;\n readonly z?: number;\n readonly perspective?: number;\n}\n\nexport interface EffectsOptions {\n readonly outerShadow?: ShadowOptions;\n readonly innerShadow?: ShadowOptions;\n readonly glow?: GlowOptions;\n readonly reflection?: ReflectionOptions;\n readonly softEdge?: SoftEdgeOptions;\n readonly rotation3D?: Rotation3DOptions;\n readonly bevelTop?: PPTXBevelOptions;\n readonly bevelBottom?: PPTXBevelOptions;\n readonly extrusionH?: number;\n readonly material?: \"plastic\" | \"metal\" | \"matte\" | \"warmMatte\" | \"softEdge\" | \"flat\" | \"powder\";\n readonly lighting?:\n | \"flat\"\n | \"legacyFlat1\"\n | \"legacyFlat2\"\n | \"legacyFlat3\"\n | \"legacyFlat4\"\n | \"legacyHarsh1\"\n | \"legacyHarsh2\"\n | \"legacyHarsh3\"\n | \"legacyHarsh4\"\n | \"legacyNormal1\"\n | \"legacyNormal2\"\n | \"legacyNormal3\"\n | \"legacyNormal4\"\n | \"threePt\"\n | \"balanced\"\n | \"soft\"\n | \"harsh\"\n | \"flood\"\n | \"contrasting\"\n | \"morning\"\n | \"sunrise\"\n | \"sunset\"\n | \"chilly\"\n | \"freezing\"\n | \"twoPt\"\n | \"brightRoom\"\n | \"gallery\";\n}\n\n/** Convert PPTX simple color to core SolidFillOptions. */\nfunction toColor(color?: string, alpha?: number) {\n if (!color) return { value: \"000000\", alpha: (alpha ?? 40) * 1000 };\n return { value: color.replace(\"#\", \"\"), alpha: (alpha ?? 40) * 1000 };\n}\n\n/** Convert PPTX ShadowOptions to core OuterShadowEffectOptions. */\nfunction toOuterShadow(opts: ShadowOptions) {\n return {\n blurRadius: opts.blur,\n distance: opts.distance,\n direction: opts.direction,\n rotWithShape: opts.rotateWithShape === false ? false : undefined,\n color: toColor(opts.color, opts.alpha),\n };\n}\n\n/** Convert PPTX ShadowOptions to core InnerShadowEffectOptions. */\nfunction toInnerShadow(opts: ShadowOptions) {\n return {\n blurRadius: opts.blur,\n distance: opts.distance,\n direction: opts.direction,\n color: toColor(opts.color, opts.alpha),\n };\n}\n\n/** Convert PPTX GlowOptions to core GlowEffectOptions. */\nfunction toGlow(opts: GlowOptions) {\n return {\n radius: opts.radius ?? 152400,\n color: toColor(opts.color, opts.alpha),\n };\n}\n\n/** Convert PPTX ReflectionOptions to core ReflectionEffectOptions. */\nfunction toReflection(opts: ReflectionOptions) {\n const result: Record<string, number | string> = {};\n if (opts.blurRadius !== undefined) result.blurRadius = opts.blurRadius;\n if (opts.distance !== undefined) result.distance = opts.distance;\n if (opts.direction !== undefined) result.direction = opts.direction;\n if (opts.startAlpha !== undefined) result.startAlpha = opts.startAlpha * 1000;\n if (opts.startPosition !== undefined) result.startPosition = opts.startPosition * 1000;\n if (opts.endAlpha !== undefined) result.endAlpha = opts.endAlpha * 1000;\n if (opts.endPosition !== undefined) result.endPosition = opts.endPosition * 1000;\n if (opts.fadeDirection !== undefined) result.fadeDirection = opts.fadeDirection * 60000;\n if (opts.scaleX !== undefined) result.scaleX = opts.scaleX * 1000;\n if (opts.scaleY !== undefined) result.scaleY = opts.scaleY * 1000;\n if (opts.skewX !== undefined) result.skewX = opts.skewX * 60000;\n if (opts.skewY !== undefined) result.skewY = opts.skewY * 60000;\n if (opts.alignment !== undefined) result.alignment = xsdRectAlignment.to(opts.alignment);\n if (opts.rotateWithShape === false) result.rotWithShape = 0;\n return result;\n}\n\n/** Convert PPTX PPTXBevelOptions to core BevelOptions. */\nfunction toBevel(opts: PPTXBevelOptions): BevelOptions {\n return {\n ...(opts.width !== undefined && { w: opts.width * 12700 }),\n ...(opts.height !== undefined && { h: opts.height * 12700 }),\n };\n}\n\n/** Map PPTX EffectsOptions to core EffectListOptions. */\nfunction toEffectListOptions(opts: EffectsOptions): EffectListOptions | undefined {\n const hasEffects =\n opts.outerShadow || opts.innerShadow || opts.glow || opts.reflection || opts.softEdge;\n if (!hasEffects) return undefined;\n\n return {\n outerShadow: opts.outerShadow ? toOuterShadow(opts.outerShadow) : undefined,\n innerShadow: opts.innerShadow ? toInnerShadow(opts.innerShadow) : undefined,\n glow: opts.glow ? toGlow(opts.glow) : undefined,\n reflection: opts.reflection ? toReflection(opts.reflection) : undefined,\n softEdge: opts.softEdge ? (opts.softEdge.radius ?? 50800) : undefined,\n };\n}\n\n/** Map PPTX EffectsOptions to core Scene3DOptions, or null if not needed. */\nexport function buildScene3D(options: EffectsOptions): ReturnType<typeof createScene3D> | null {\n if (!options.rotation3D && !options.lighting) return null;\n\n const cameraPreset = options.rotation3D?.perspective\n ? \"legacyPerspectiveFront\"\n : \"orthographicFront\";\n const cameraOpts = {\n preset: cameraPreset,\n ...(options.rotation3D?.perspective && { fov: options.rotation3D.perspective }),\n ...(options.rotation3D && {\n rotation: {\n lat: (options.rotation3D.x ?? 0) * 60000,\n lon: (options.rotation3D.y ?? 0) * 60000,\n rev: (options.rotation3D.z ?? 0) * 60000,\n },\n }),\n };\n\n return createScene3D({\n camera: cameraOpts as Scene3DOptions[\"camera\"],\n lightRig: { rig: options.lighting ?? \"threePt\", direction: \"t\" },\n });\n}\n\n/** Map PPTX EffectsOptions to core Shape3DOptions, or null if not needed. */\nexport function buildShape3D(options: EffectsOptions): ReturnType<typeof createShape3D> | null {\n if (!options.extrusionH && !options.bevelTop && !options.bevelBottom && !options.material)\n return null;\n\n const shape3dOpts: Shape3DOptions = {\n ...(options.bevelTop ? { bevelT: toBevel(options.bevelTop) } : {}),\n ...(options.bevelBottom ? { bevelB: toBevel(options.bevelBottom) } : {}),\n ...(options.extrusionH !== undefined ? { extrusionH: options.extrusionH } : {}),\n ...(options.material ? { prstMaterial: options.material } : {}),\n };\n\n return createShape3D(shape3dOpts);\n}\n\n/** Create a:effectLst from PPTX simplified EffectsOptions. */\nexport function createPptxEffectList(options: EffectsOptions) {\n const effectListOpts = toEffectListOptions(options);\n return effectListOpts ? createEffectList(effectListOpts) : null;\n}\n\n// Re-export core types for advanced users\nexport type { EffectListOptions, Scene3DOptions, Shape3DOptions, BevelOptions };\n","export {\n buildFill,\n extractBlipFillMedia,\n type BlipFillConfigOptions,\n type BlipFillMediaData,\n type FillOptions,\n type GradientStopOptions,\n} from \"@office-open/core/drawingml\";\n","/**\n * Base XML Component infrastructure for PPTX documents.\n * Re-exports from core for local path alias usage.\n *\n * @module\n */\nexport { BaseXmlComponent } from \"@office-open/core\";\nexport type { Context, IXmlableObject } from \"@office-open/core\";\n","/**\n * XML Components module — re-exports from core + pptx-specific additions.\n *\n * @module\n */\n// Core re-exports\nexport { BaseXmlComponent } from \"./base\";\nexport type { Context, IXmlableObject } from \"./base\";\nexport { XmlComponent, IgnoreIfEmptyXmlComponent, EMPTY_OBJECT } from \"@office-open/core\";\nexport { buildAttrObject } from \"@office-open/core\";\nexport type { AttributePayload } from \"@office-open/core\";\nexport {\n EmptyElement,\n BuilderElement,\n chartAttr,\n wrapEl,\n stringContainerObj,\n} from \"@office-open/core\";\nexport {\n ImportedXmlComponent,\n ImportedRootElementAttributes,\n convertToXmlComponent,\n} from \"@office-open/core\";\nexport { InitializableXmlComponent } from \"@office-open/core\";\n","import type { EffectsOptions } from \"@file/drawingml/effects\";\nimport { createPptxEffectList } from \"@file/drawingml/effects\";\nimport type { FillOptions } from \"@file/drawingml/fill\";\nimport { buildFill } from \"@file/drawingml/fill\";\nimport { XmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\n\nexport interface BackgroundOptions {\n readonly fill?: FillOptions;\n readonly effects?: EffectsOptions;\n readonly shadeToTitle?: boolean;\n}\n\n/**\n * p:bg — Slide background.\n */\nexport class Background extends XmlComponent {\n public constructor(options: BackgroundOptions = {}) {\n super(\"p:bg\");\n this.root.push(new BackgroundProperties(options));\n }\n}\n\nclass BackgroundProperties extends XmlComponent {\n private readonly shadeToTitle: boolean;\n\n public constructor(options: BackgroundOptions) {\n super(\"p:bgPr\");\n this.shadeToTitle = !!options.shadeToTitle;\n this.root.push(\n options.fill !== undefined ? buildFill(options.fill) : buildFill({ type: \"none\" }),\n );\n if (options.effects) {\n const el = createPptxEffectList(options.effects);\n if (el) this.root.push(el);\n }\n }\n\n public override toXml(context: Context): string {\n if (this.shadeToTitle) {\n this.root.unshift({ _attr: { shadeToTitle: 1 } });\n const result = super.toXml(context);\n this.root.shift();\n return result;\n }\n return super.toXml(context);\n }\n}\n","export { ChartCollection, type ChartData } from \"@office-open/core/chart\";\n","import { buildAttrObject, BuilderElement, XmlComponent } from \"@file/xml-components\";\n\nexport interface AuthorEntry {\n readonly id: number;\n readonly name: string;\n readonly initials: string;\n readonly clrIdx: number;\n readonly lastIdx: number;\n}\n\n/**\n * p:cmAuthorLst — Comment author list stored in `ppt/commentAuthors.xml`.\n */\nexport class CommentAuthorList extends XmlComponent {\n public constructor(authors: readonly AuthorEntry[]) {\n super(\"p:cmAuthorLst\");\n this.root.push(\n buildAttrObject({\n \"xmlns:p\": \"http://schemas.openxmlformats.org/presentationml/2006/main\",\n }),\n );\n for (const author of authors) {\n this.root.push(\n new BuilderElement({\n name: \"p:cmAuthor\",\n attributes: {\n id: { key: \"id\", value: author.id },\n name: { key: \"name\", value: author.name },\n initials: { key: \"initials\", value: author.initials },\n clrIdx: { key: \"clrIdx\", value: author.clrIdx },\n lastIdx: { key: \"lastIdx\", value: author.lastIdx },\n },\n }),\n );\n }\n }\n}\n","import { buildAttrObject, BuilderElement, XmlComponent } from \"@file/xml-components\";\n\nexport interface CommentEntry {\n readonly authorId: number;\n readonly idx: number;\n readonly date?: string;\n readonly x: number;\n readonly y: number;\n readonly text: string;\n}\n\n/**\n * p:cmLst — Comment list stored in `ppt/comments/slideN.xml`.\n */\nexport class SlideCommentList extends XmlComponent {\n public constructor(comments: readonly CommentEntry[]) {\n super(\"p:cmLst\");\n this.root.push(\n buildAttrObject({\n \"xmlns:p\": \"http://schemas.openxmlformats.org/presentationml/2006/main\",\n }),\n );\n for (const comment of comments) {\n this.root.push(\n new BuilderElement({\n name: \"p:cm\",\n attributes: {\n authorId: { key: \"authorId\", value: comment.authorId },\n idx: { key: \"idx\", value: comment.idx },\n ...(comment.date != null ? { dt: { key: \"dt\", value: comment.date } } : {}),\n },\n children: [\n new BuilderElement({\n name: \"p:pos\",\n attributes: {\n x: { key: \"x\", value: comment.x },\n y: { key: \"y\", value: comment.y },\n },\n }),\n new BuilderElement({\n name: \"p:text\",\n children: [comment.text],\n }),\n ],\n }),\n );\n }\n }\n}\n","/**\n * Content Types module for PPTX packages.\n *\n * @module\n */\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\nimport { escapeXml } from \"@office-open/xml\";\n\nconst PPTX_MAIN =\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\";\nconst PPTX_SLIDE = \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\";\nconst PPTX_SLIDE_MASTER =\n \"application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml\";\nconst PPTX_SLIDE_LAYOUT =\n \"application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml\";\nconst PPTX_THEME = \"application/vnd.openxmlformats-officedocument.theme+xml\";\nconst PPTX_NOTES = \"application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml\";\nconst PPTX_NOTES_MASTER =\n \"application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml\";\nconst PPTX_COMMENTS = \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\";\nconst PPTX_COMMENT_AUTHORS =\n \"application/vnd.openxmlformats-officedocument.presentationml.commentAuthors+xml\";\nconst PPTX_CHART = \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\";\nconst PPTX_PRES_PROPS =\n \"application/vnd.openxmlformats-officedocument.presentationml.presProps+xml\";\nconst PPTX_VIEW_PROPS =\n \"application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml\";\nconst PPTX_TABLE_STYLES =\n \"application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml\";\n\ntype EntryType = \"Default\" | \"Override\";\n\ninterface ContentEntry {\n readonly type: EntryType;\n readonly contentType: string;\n readonly key: string;\n}\n\nconst STATIC_ENTRIES: readonly ContentEntry[] = [\n {\n type: \"Default\",\n contentType: \"application/vnd.openxmlformats-package.relationships+xml\",\n key: \"rels\",\n },\n { type: \"Default\", contentType: \"application/xml\", key: \"xml\" },\n { type: \"Default\", contentType: \"image/png\", key: \"png\" },\n { type: \"Default\", contentType: \"image/jpeg\", key: \"jpeg\" },\n { type: \"Default\", contentType: \"image/jpeg\", key: \"jpg\" },\n { type: \"Default\", contentType: \"video/mp4\", key: \"mp4\" },\n { type: \"Override\", contentType: PPTX_MAIN, key: \"/ppt/presentation.xml\" },\n {\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-package.core-properties+xml\",\n key: \"/docProps/core.xml\",\n },\n {\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.extended-properties+xml\",\n key: \"/docProps/app.xml\",\n },\n { type: \"Override\", contentType: PPTX_THEME, key: \"/ppt/theme/theme1.xml\" },\n { type: \"Override\", contentType: PPTX_PRES_PROPS, key: \"/ppt/presProps.xml\" },\n { type: \"Override\", contentType: PPTX_VIEW_PROPS, key: \"/ppt/viewProps.xml\" },\n { type: \"Override\", contentType: PPTX_TABLE_STYLES, key: \"/ppt/tableStyles.xml\" },\n];\n\nfunction formatEntry(e: ContentEntry): string {\n if (e.type === \"Default\") {\n return `<Default ContentType=\"${escapeXml(e.contentType)}\" Extension=\"${escapeXml(e.key)}\"/>`;\n }\n return `<Override ContentType=\"${escapeXml(e.contentType)}\" PartName=\"${escapeXml(e.key)}\"/>`;\n}\n\nconst STATIC_XML =\n `<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">` +\n STATIC_ENTRIES.map(formatEntry).join(\"\");\n\nexport class ContentTypes extends BaseXmlComponent {\n private readonly dynamicEntries: ContentEntry[] = [];\n\n public constructor() {\n super(\"Types\");\n }\n\n public addSlide(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: PPTX_SLIDE,\n key: `/ppt/slides/slide${index}.xml`,\n });\n }\n\n public addNotesSlide(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: PPTX_NOTES,\n key: `/ppt/notesSlides/notesSlide${index}.xml`,\n });\n }\n\n public addNotesMaster(): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: PPTX_NOTES_MASTER,\n key: \"/ppt/notesMasters/notesMaster1.xml\",\n });\n }\n\n public addComments(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: PPTX_COMMENTS,\n key: `/ppt/comments/comment${index}.xml`,\n });\n }\n\n public addCommentAuthors(): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: PPTX_COMMENT_AUTHORS,\n key: \"/ppt/commentAuthors.xml\",\n });\n }\n\n public addChart(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: PPTX_CHART,\n key: `/ppt/charts/chart${index}.xml`,\n });\n }\n\n public addDiagramData(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml\",\n key: `/ppt/diagrams/data${index}.xml`,\n });\n }\n\n public addDiagramLayout(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml\",\n key: `/ppt/diagrams/layout${index}.xml`,\n });\n }\n\n public addDiagramStyle(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml\",\n key: `/ppt/diagrams/quickStyle${index}.xml`,\n });\n }\n\n public addDiagramColors(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml\",\n key: `/ppt/diagrams/colors${index}.xml`,\n });\n }\n\n public addDiagramDrawing(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: \"application/vnd.ms-office.drawingml.diagramDrawing+xml\",\n key: `/ppt/diagrams/drawing${index}.xml`,\n });\n }\n\n public addSlideLayout(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: PPTX_SLIDE_LAYOUT,\n key: `/ppt/slideLayouts/slideLayout${index}.xml`,\n });\n }\n\n public addSlideMaster(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: PPTX_SLIDE_MASTER,\n key: `/ppt/slideMasters/slideMaster${index}.xml`,\n });\n }\n\n public addTheme(index: number): void {\n if (index !== 1) {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: PPTX_THEME,\n key: `/ppt/theme/theme${index}.xml`,\n });\n }\n }\n\n public override toXml(_context: Context): string {\n const parts: string[] = [STATIC_XML];\n for (const e of this.dynamicEntries) {\n parts.push(formatEntry(e));\n }\n parts.push(\"</Types>\");\n return parts.join(\"\");\n }\n}\n","/**\n * Core Properties module for PresentationML documents.\n *\n * Reference: ISO-IEC29500-4_2016 shared-documentPropertiesCore.xsd\n *\n * @module\n */\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\nimport { buildCorePropertiesXmlString } from \"@office-open/core\";\n\nexport interface CorePropertiesOptions {\n readonly title?: string;\n readonly subject?: string;\n readonly creator?: string;\n readonly keywords?: string;\n readonly description?: string;\n readonly lastModifiedBy?: string;\n readonly revision?: number;\n}\n\nexport class CoreProperties extends BaseXmlComponent {\n private readonly options: CorePropertiesOptions;\n\n public constructor(options: CorePropertiesOptions) {\n super(\"cp:coreProperties\");\n this.options = options;\n }\n\n public override toXml(_context: Context): string {\n return buildCorePropertiesXmlString(this.options);\n }\n}\n","export interface HyperlinkData {\n readonly key: string;\n readonly url: string;\n readonly tooltip?: string;\n}\n\nexport class HyperlinkCollection {\n private readonly map = new Map<string, HyperlinkData>();\n\n public addHyperlink(key: string, url: string, tooltip?: string): void {\n this.map.set(key, { key, url, tooltip });\n }\n\n public get array(): readonly HyperlinkData[] {\n return [...this.map.values()];\n }\n}\n","/**\n * Media module for PresentationML documents.\n *\n * @module\n */\nimport { convertPixelsToEmu } from \"@office-open/core\";\n\nimport type { MediaDataTransformation } from \"./data\";\nimport type { IMediaData } from \"./data\";\n\nexport interface MediaTransformation {\n readonly offset?: {\n readonly top?: number;\n readonly left?: number;\n };\n readonly width: number;\n readonly height: number;\n readonly flip?: {\n readonly vertical?: boolean;\n readonly horizontal?: boolean;\n };\n readonly rotation?: number;\n}\n\nexport const createTransformation = (options: MediaTransformation): MediaDataTransformation => ({\n emus: {\n x: convertPixelsToEmu(options.width),\n y: convertPixelsToEmu(options.height),\n },\n pixels: {\n x: Math.round(options.width),\n y: Math.round(options.height),\n },\n flip: options.flip,\n rotation: options.rotation ? options.rotation * 60_000 : undefined,\n});\n\nexport class Media {\n private readonly map: Map<string, IMediaData>;\n\n public constructor() {\n this.map = new Map<string, IMediaData>();\n }\n\n public addImage(key: string, mediaData: IMediaData): void {\n this.map.set(key, mediaData);\n }\n\n public addMedia(key: string, mediaData: IMediaData): void {\n this.map.set(key, mediaData);\n }\n\n public get array(): readonly IMediaData[] {\n return [...this.map.values()];\n }\n}\n","import { BuilderElement } from \"@file/xml-components\";\n\n/**\n * p:nvGrpSpPr — Non-visual properties for a group shape.\n */\nexport class GroupShapeNonVisualProperties extends BuilderElement<{}> {\n public constructor(id: number = 1, name: string = \"\") {\n super({\n name: \"p:nvGrpSpPr\",\n children: [\n new BuilderElement({\n name: \"p:cNvPr\",\n attributes: {\n id: { key: \"id\", value: id },\n name: { key: \"name\", value: name },\n },\n }),\n new BuilderElement({ name: \"p:cNvGrpSpPr\" }),\n new BuilderElement({ name: \"p:nvPr\" }),\n ],\n });\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport type { Context, IXmlableObject } from \"@file/xml-components\";\nimport { xsdTextAlign } from \"@office-open/core\";\nimport { xml } from \"@office-open/xml\";\n\nexport type TextAlignment = \"left\" | \"center\" | \"right\" | \"justify\";\n\nexport type BulletCharOptions = {\n readonly type: \"char\";\n readonly char?: string;\n readonly color?: string;\n readonly size?: number;\n};\n\nexport type BulletAutoNumOptions = {\n readonly type: \"autoNum\";\n readonly format?: string;\n readonly startAt?: number;\n readonly color?: string;\n readonly size?: number;\n};\n\nexport type BulletNoneOption = {\n readonly type: \"none\";\n};\n\nexport type BulletOptions = BulletCharOptions | BulletAutoNumOptions | BulletNoneOption;\n\nexport interface ParagraphPropertiesOptions {\n readonly alignment?: TextAlignment;\n readonly indentLevel?: number;\n readonly marginBottom?: number;\n readonly marginTop?: number;\n readonly bullet?: BulletOptions;\n readonly lineSpacing?: number;\n readonly lineSpacingPoints?: number;\n readonly marginIndent?: number;\n readonly marginRight?: number;\n readonly defTabSize?: number;\n}\n\nfunction buildBulletChildren(options: BulletOptions): IXmlableObject[] {\n const children: IXmlableObject[] = [];\n\n if (options.type === \"none\") {\n children.push({ \"a:buNone\": {} });\n return children;\n }\n\n if (options.color) {\n children.push({\n \"a:buClr\": [{ \"a:srgbClr\": { _attr: { val: options.color.replace(\"#\", \"\") } } }],\n });\n }\n\n if (options.size !== undefined) {\n children.push({ \"a:buSzPct\": { _attr: { val: `${options.size}%` } } });\n }\n\n children.push({\n \"a:buFont\": {\n _attr: {\n typeface: \"Arial\",\n panose: \"020B0604020202020204\",\n pitchFamily: \"34\",\n charset: \"0\",\n },\n },\n });\n\n if (options.type === \"char\") {\n children.push({ \"a:buChar\": { _attr: { char: options.char ?? \"•\" } } });\n } else if (options.type === \"autoNum\") {\n const buAttrs: Record<string, string | number> = { type: options.format ?? \"arabicPeriod\" };\n if (options.startAt !== undefined) buAttrs.startAt = options.startAt;\n children.push({ \"a:buAutoNum\": { _attr: buAttrs } });\n }\n\n return children;\n}\n\n/**\n * Pure function: builds a:pPr XML object from options.\n * Returns undefined when no meaningful content (empty → omitted from output).\n */\nexport function buildParagraphProperties(\n options: ParagraphPropertiesOptions,\n): IXmlableObject | undefined {\n const children: IXmlableObject[] = [];\n\n const attrs: Record<string, string | number> = {};\n if (options.alignment) attrs.algn = xsdTextAlign.to(options.alignment);\n if (options.indentLevel !== undefined) attrs.lvl = options.indentLevel;\n if (options.marginIndent !== undefined) attrs.marL = options.marginIndent;\n if (options.marginRight !== undefined) attrs.marR = options.marginRight;\n if (options.defTabSize !== undefined) attrs.defTabSz = options.defTabSize;\n if (Object.keys(attrs).length > 0) children.push({ _attr: attrs });\n\n if (options.lineSpacing !== undefined) {\n children.push({\n \"a:lnSpc\": [{ \"a:spcPct\": { _attr: { val: options.lineSpacing * 1000 } } }],\n });\n }\n\n if (options.lineSpacingPoints !== undefined) {\n children.push({\n \"a:lnSpc\": [{ \"a:spcPts\": { _attr: { val: options.lineSpacingPoints * 100 } } }],\n });\n }\n\n if (options.marginBottom !== undefined || options.marginTop !== undefined) {\n children.push({\n \"a:spcAft\": [{ \"a:spcPts\": { _attr: { val: options.marginBottom ?? 0 } } }],\n });\n }\n\n if (options.marginTop !== undefined) {\n children.push({\n \"a:spcBef\": [{ \"a:spcPts\": { _attr: { val: options.marginTop } } }],\n });\n }\n\n if (options.bullet) {\n children.push(...buildBulletChildren(options.bullet));\n }\n\n if (children.length === 0) return undefined;\n\n return {\n \"a:pPr\": children.length === 1 && \"_attr\" in children[0] ? children[0] : children,\n };\n}\n\n/**\n * a:pPr — Paragraph properties (alignment, indent, spacing).\n * Lazy: stores options, builds XML in toXml().\n * Omitted from output when completely empty.\n */\nexport class ParagraphProperties extends XmlComponent {\n private readonly options: ParagraphPropertiesOptions;\n\n public constructor(options: ParagraphPropertiesOptions = {}) {\n super(\"a:pPr\");\n this.options = options;\n }\n\n public override toXml(_context: Context): string {\n const obj = buildParagraphProperties(this.options);\n return obj ? xml(obj) : \"\";\n }\n}\n","/**\n * OOXML magic-number constants for PPTX generation.\n *\n * Values are in EMU (English Metric Units) or hundredths of a point,\n * as defined by the OOXML specification.\n * @module\n */\n\n// ── Outline defaults (a:ln) ──\n\n/** Default outline width: 1pt = 12700 EMU */\nexport const DEFAULT_OUTLINE_WIDTH = 12700;\n\n// ── Shadow defaults (a:outerShdw) ──\n\n/** Default shadow blur radius: ~4pt = 50800 EMU */\nexport const DEFAULT_SHADOW_BLUR_RADIUS = 50800;\n\n/** Default shadow distance: ~3pt = 38100 EMU */\nexport const DEFAULT_SHADOW_DISTANCE = 38100;\n\n/** Default shadow direction: 270° = 2700000 (60,000ths of a degree) */\nexport const DEFAULT_SHADOW_DIRECTION = 2700000;\n\n/** Default shadow alpha: 40% = 40000 (100,000ths of a percent) */\nexport const DEFAULT_SHADOW_ALPHA = 40000;\n\n// ── Angle / percentage multipliers ──\n\n/** Degrees to OOXML angle units: 1° = 60,000 */\nexport const DEGREE_MULTIPLIER = 60000;\n\n/** Font size to OOXML units: 1pt = 100 hundredths */\nexport const FONT_SIZE_MULTIPLIER = 100;\n\n/** Percentage to OOXML units: 1% = 1,000 */\nexport const PERCENTAGE_MULTIPLIER = 1000;\n","import {\n DEFAULT_OUTLINE_WIDTH,\n DEFAULT_SHADOW_ALPHA,\n DEFAULT_SHADOW_BLUR_RADIUS,\n DEFAULT_SHADOW_DIRECTION,\n DEFAULT_SHADOW_DISTANCE,\n} from \"@file/constants\";\nimport type { FillOptions } from \"@file/drawingml/fill\";\nimport { buildFill } from \"@file/drawingml/fill\";\nimport { XmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\nimport { xsdStrikeStyle, xsdTextCaps, xsdUnderlineStyle } from \"@office-open/core\";\nimport { createEffectList, createOutline } from \"@office-open/core/drawingml\";\n\nlet nextHyperlinkId = 1;\n\nexport const UnderlineStyle = {\n SINGLE: \"single\",\n DOUBLE: \"double\",\n NONE: \"none\",\n} as const;\n\nexport const StrikeStyle = {\n SINGLE: \"sngStrike\",\n DOUBLE: \"dblStrike\",\n NONE: \"noStrike\",\n} as const;\n\nexport const TextCapitalization = {\n NONE: \"none\",\n ALL: \"all\",\n SMALL: \"small\",\n} as const;\n\nexport interface HyperlinkOptions {\n readonly url: string;\n readonly tooltip?: string;\n}\n\nexport interface RunPropertiesOptions {\n /** Font size in points. Serialized as OOXML `a:sz` (hundredths of a point). */\n readonly fontSize?: number;\n readonly bold?: boolean;\n readonly italic?: boolean;\n readonly underline?: (typeof UnderlineStyle)[keyof typeof UnderlineStyle];\n readonly font?: string;\n readonly lang?: string;\n readonly fill?: FillOptions;\n readonly hyperlink?: HyperlinkOptions;\n readonly strike?: (typeof StrikeStyle)[keyof typeof StrikeStyle];\n readonly baseline?: number;\n readonly spacing?: number;\n readonly capitalization?: (typeof TextCapitalization)[keyof typeof TextCapitalization];\n readonly shadow?: boolean;\n readonly outline?: boolean;\n readonly rightToLeft?: boolean;\n readonly noProof?: boolean;\n readonly dirty?: boolean;\n}\n\n/**\n * Builds a:rPr attribute string.\n */\nfunction buildAttrString(options: RunPropertiesOptions): string {\n const attrs: string[] = [];\n if (options.fontSize) attrs.push(`sz=\"${options.fontSize * 100}\"`);\n if (options.bold !== undefined) attrs.push(`b=\"${options.bold ? 1 : 0}\"`);\n if (options.italic !== undefined) attrs.push(`i=\"${options.italic ? 1 : 0}\"`);\n if (options.underline) attrs.push(`u=\"${xsdUnderlineStyle.to(options.underline)}\"`);\n if (options.lang) attrs.push(`lang=\"${options.lang}\"`);\n if (options.strike) attrs.push(`strike=\"${xsdStrikeStyle.to(options.strike)}\"`);\n if (options.baseline !== undefined) attrs.push(`baseline=\"${options.baseline}\"`);\n if (options.capitalization) attrs.push(`cap=\"${xsdTextCaps.to(options.capitalization)}\"`);\n if (options.spacing !== undefined) attrs.push(`spc=\"${options.spacing}\"`);\n if (options.noProof !== undefined) attrs.push(`noProof=\"${options.noProof ? 1 : 0}\"`);\n if (options.dirty !== undefined) attrs.push(`dirty=\"${options.dirty ? 1 : 0}\"`);\n return attrs.join(\" \");\n}\n\n/**\n * Checks if options have any settable properties.\n */\nexport function hasRunProperties(options: RunPropertiesOptions): boolean {\n return !!(\n options.fontSize ||\n options.bold !== undefined ||\n options.italic !== undefined ||\n options.underline ||\n options.font ||\n options.lang ||\n options.fill ||\n options.hyperlink ||\n options.strike ||\n options.baseline !== undefined ||\n options.spacing !== undefined ||\n options.capitalization ||\n options.shadow !== undefined ||\n options.outline !== undefined ||\n options.rightToLeft !== undefined ||\n options.noProof !== undefined ||\n options.dirty !== undefined\n );\n}\n\n/**\n * a:rPr — Run properties (font, size, color, etc.).\n */\nexport class RunProperties extends XmlComponent {\n private readonly options: RunPropertiesOptions;\n\n public static hasProperties = hasRunProperties;\n\n public constructor(options: RunPropertiesOptions = {}) {\n super(\"a:rPr\");\n this.options = options;\n }\n\n public override toXml(context: Context): string {\n const opts = this.options;\n\n // Side-effect: register hyperlink\n let hyperlinkKey: string | undefined;\n if (opts.hyperlink) {\n hyperlinkKey = `hlink_${nextHyperlinkId++}`;\n const file = context.fileData as {\n hyperlinks?: { addHyperlink(key: string, url: string, tooltip?: string): void };\n };\n file?.hyperlinks?.addHyperlink(hyperlinkKey, opts.hyperlink.url, opts.hyperlink.tooltip);\n }\n\n const parts: string[] = [];\n const attrStr = buildAttrString(opts);\n\n // XSD order: ln → fill → effect → latin/ea → hlinkClick → rtl\n if (opts.outline) {\n parts.push(\n createOutline({\n width: DEFAULT_OUTLINE_WIDTH,\n type: \"solidFill\",\n color: { value: \"000000\" },\n }).toXml(context),\n );\n }\n if (opts.fill !== undefined) {\n parts.push(buildFill(opts.fill).toXml(context));\n }\n if (opts.shadow) {\n parts.push(\n createEffectList({\n outerShadow: {\n blurRadius: DEFAULT_SHADOW_BLUR_RADIUS,\n distance: DEFAULT_SHADOW_DISTANCE,\n direction: DEFAULT_SHADOW_DIRECTION,\n color: { value: \"000000\", transforms: { alpha: DEFAULT_SHADOW_ALPHA } },\n },\n }).toXml(context),\n );\n }\n\n if (opts.font) {\n parts.push(`<a:latin typeface=\"${opts.font}\"/>`);\n parts.push(`<a:ea typeface=\"${opts.font}\"/>`);\n }\n\n if (opts.hyperlink && hyperlinkKey) {\n const tooltip = opts.hyperlink.tooltip ? ` tooltip=\"${opts.hyperlink.tooltip}\"` : \"\";\n parts.push(`<a:hlinkClick r:id=\"{hlink:${hyperlinkKey}}\"${tooltip}/>`);\n }\n\n if (opts.rightToLeft !== undefined) {\n parts.push(`<a:rtl val=\"${opts.rightToLeft ? 1 : 0}\"/>`);\n }\n\n if (attrStr.length === 0 && parts.length === 0) return \"\";\n\n if (parts.length === 0) return `<a:rPr ${attrStr}/>`;\n return `<a:rPr ${attrStr}>${parts.join(\"\")}</a:rPr>`;\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\nimport { escapeXml } from \"@office-open/xml\";\n\nimport { RunProperties } from \"./run-properties\";\nimport type { RunPropertiesOptions } from \"./run-properties\";\n\nexport interface RunOptions extends RunPropertiesOptions {\n readonly text?: string;\n}\n\n/**\n * a:r — A run of text with properties.\n */\nexport class TextRun extends XmlComponent {\n private readonly options: RunOptions;\n\n public constructor(options: RunOptions | string = {}) {\n super(\"a:r\");\n this.options = typeof options === \"string\" ? { text: options } : options;\n }\n\n public override toXml(context: Context): string {\n const body = new RunProperties(this.options).toXml(context);\n if (this.options.text) {\n return `<a:r>${body}<a:t>${escapeXml(this.options.text)}</a:t></a:r>`;\n }\n return body ? `<a:r>${body}</a:r>` : \"<a:r/>\";\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\nimport { xml } from \"@office-open/xml\";\n\nimport type { ParagraphPropertiesOptions } from \"./paragraph-properties\";\nimport { buildParagraphProperties } from \"./paragraph-properties\";\nimport { TextRun } from \"./run\";\nimport type { RunOptions } from \"./run\";\n\nexport interface ParagraphOptions {\n /** Simple text content for the paragraph. Creates a single TextRun. */\n readonly text?: string;\n readonly properties?: ParagraphPropertiesOptions;\n readonly children?: readonly (TextRun | RunOptions | XmlComponent)[];\n}\n\n/**\n * a:p — A paragraph in a text body.\n * Lazy: stores options, builds XML in toXml().\n */\nexport class Paragraph extends XmlComponent {\n private readonly options: ParagraphOptions;\n\n public constructor(options: string | ParagraphOptions = {}) {\n super(\"a:p\");\n this.options = typeof options === \"string\" ? { text: options } : options;\n }\n\n public override toXml(context: Context): string {\n const parts: string[] = [];\n\n const pPr = buildParagraphProperties(this.options.properties ?? {});\n if (pPr) parts.push(xml(pPr));\n\n if (this.options.text) {\n parts.push(new TextRun(this.options.text).toXml(context));\n }\n\n if (this.options.children) {\n for (const rawChild of this.options.children) {\n const child =\n rawChild instanceof TextRun || rawChild instanceof XmlComponent\n ? rawChild\n : new TextRun(rawChild);\n parts.push(child.toXml(context));\n }\n }\n\n parts.push('<a:endParaRPr lang=\"en-US\"/>');\n\n const body = parts.join(\"\");\n return body ? `<a:p>${body}</a:p>` : \"<a:p/>\";\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport type { Context, IXmlableObject } from \"@file/xml-components\";\nimport { xsdTextAnchor } from \"@office-open/core\";\nimport { xml } from \"@office-open/xml\";\n\nimport type { VerticalAlignment } from \"../table/table-cell\";\nimport { Paragraph } from \"./paragraph/paragraph\";\nimport type { ParagraphOptions } from \"./paragraph/paragraph\";\nimport { TextRun } from \"./paragraph/run\";\n\nexport interface TextBodyOptions {\n readonly text?: string;\n readonly children?: readonly (Paragraph | ParagraphOptions | string)[];\n readonly vertical?:\n | \"horz\"\n | \"vert\"\n | \"vert270\"\n | \"wordArtVert\"\n | \"eaVert\"\n | \"mongolianVert\"\n | \"wordArtVertRtl\";\n readonly anchor?: VerticalAlignment;\n readonly autoFit?: \"normal\" | \"shape\" | \"none\";\n readonly wrap?: \"square\" | \"none\";\n readonly margins?: {\n readonly top?: number;\n readonly bottom?: number;\n readonly left?: number;\n readonly right?: number;\n };\n readonly columns?: number;\n readonly columnSpacing?: number;\n}\n\n/**\n * Pure function: builds a:bodyPr content.\n */\nfunction buildBodyPr(options: TextBodyOptions): IXmlableObject {\n const bodyPrChildren: IXmlableObject[] = [];\n\n if (options.autoFit === \"normal\") bodyPrChildren.push({ \"a:normAutofit\": {} });\n else if (options.autoFit === \"shape\") bodyPrChildren.push({ \"a:spAutoFit\": {} });\n else if (options.autoFit === \"none\") bodyPrChildren.push({ \"a:noAutofit\": {} });\n\n const bodyPrContent: IXmlableObject[] = [];\n\n const attrs: Record<string, string | number> = {};\n if (options.vertical) attrs.vert = options.vertical;\n if (options.anchor) attrs.anchor = xsdTextAnchor.to(options.anchor);\n if (options.wrap) attrs.wrap = options.wrap;\n if (options.margins?.top !== undefined) attrs.tIns = options.margins.top;\n if (options.margins?.bottom !== undefined) attrs.bIns = options.margins.bottom;\n if (options.margins?.left !== undefined) attrs.lIns = options.margins.left;\n if (options.margins?.right !== undefined) attrs.rIns = options.margins.right;\n if (options.columns !== undefined) attrs.numCol = options.columns;\n if (options.columnSpacing !== undefined) attrs.spcCol = options.columnSpacing * 100;\n if (Object.keys(attrs).length > 0) bodyPrContent.push({ _attr: attrs });\n\n bodyPrContent.push(...bodyPrChildren);\n\n return {\n \"a:bodyPr\":\n bodyPrContent.length === 1 && \"_attr\" in bodyPrContent[0]\n ? bodyPrContent[0]\n : bodyPrContent.length > 0\n ? bodyPrContent\n : {},\n };\n}\n\n/**\n * p:txBody — Text body within a shape.\n * Lazy: stores options, builds XML in toXml().\n */\nexport class TextBody extends XmlComponent {\n private readonly options: TextBodyOptions;\n\n public constructor(options: TextBodyOptions = {}) {\n super(\"p:txBody\");\n this.options = options;\n }\n\n public override toXml(context: Context): string {\n const parts: string[] = [];\n\n parts.push(xml(buildBodyPr(this.options)));\n parts.push(\"<a:lstStyle/>\");\n\n if (this.options.children) {\n for (const p of this.options.children) {\n const para =\n typeof p === \"string\"\n ? new Paragraph({ children: [new TextRun({ text: p })] })\n : p instanceof Paragraph\n ? p\n : new Paragraph(p);\n parts.push(para.toXml(context));\n }\n } else if (this.options.text !== undefined) {\n parts.push(\n new Paragraph({\n children: [new TextRun({ text: this.options.text })],\n }).toXml(context),\n );\n } else {\n parts.push(new Paragraph().toXml(context));\n }\n\n return `<p:txBody>${parts.join(\"\")}</p:txBody>`;\n }\n}\n","import { GroupShapeNonVisualProperties } from \"@file/shape-tree/group-shape-non-visual\";\nimport { buildAttrObject, BuilderElement, XmlComponent } from \"@file/xml-components\";\n\nimport { Paragraph } from \"../shape/paragraph/paragraph\";\nimport { TextRun } from \"../shape/paragraph/run\";\nimport { TextBody } from \"../shape/text-body\";\n\nexport interface NotesSlideOptions {\n readonly text?: string;\n}\n\nexport class NotesSlide extends XmlComponent {\n public constructor(options: NotesSlideOptions = {}) {\n super(\"p:notes\");\n\n this.root.push(\n buildAttrObject({\n \"xmlns:a\": \"http://schemas.openxmlformats.org/drawingml/2006/main\",\n \"xmlns:r\": \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\n \"xmlns:p\": \"http://schemas.openxmlformats.org/presentationml/2006/main\",\n }),\n );\n\n this.root.push(new NotesCommonSlideData(options.text));\n this.root.push(\n new BuilderElement({\n name: \"p:clrMapOvr\",\n children: [new BuilderElement({ name: \"a:masterClrMapping\" })],\n }),\n );\n }\n}\n\nclass NotesCommonSlideData extends XmlComponent {\n public constructor(text?: string) {\n super(\"p:cSld\");\n this.root.push(new NotesShapeTree(text));\n }\n}\n\nclass NotesShapeTree extends XmlComponent {\n public constructor(text?: string) {\n super(\"p:spTree\");\n this.root.push(new GroupShapeNonVisualProperties());\n this.root.push(\n new BuilderElement({\n name: \"p:grpSpPr\",\n children: [\n new BuilderElement({\n name: \"a:xfrm\",\n children: [\n new BuilderElement({\n name: \"a:off\",\n attributes: { x: { key: \"x\", value: 0 }, y: { key: \"y\", value: 0 } },\n }),\n new BuilderElement({\n name: \"a:ext\",\n attributes: { cx: { key: \"cx\", value: 0 }, cy: { key: \"cy\", value: 0 } },\n }),\n new BuilderElement({\n name: \"a:chOff\",\n attributes: { x: { key: \"x\", value: 0 }, y: { key: \"y\", value: 0 } },\n }),\n new BuilderElement({\n name: \"a:chExt\",\n attributes: { cx: { key: \"cx\", value: 0 }, cy: { key: \"cy\", value: 0 } },\n }),\n ],\n }),\n ],\n }),\n );\n this.root.push(new SlideImagePlaceholder());\n this.root.push(new NotesBodyPlaceholder(text));\n }\n}\n\nclass SlideImagePlaceholder extends XmlComponent {\n public constructor() {\n super(\"p:sp\");\n this.root.push(\n new BuilderElement({\n name: \"p:nvSpPr\",\n children: [\n new BuilderElement({\n name: \"p:cNvPr\",\n attributes: {\n id: { key: \"id\", value: 2 },\n name: { key: \"name\", value: \"Slide Image Placeholder 1\" },\n },\n }),\n new BuilderElement({\n name: \"p:cNvSpPr\",\n children: [\n new BuilderElement({\n name: \"a:spLocks\",\n attributes: {\n noGrp: { key: \"noGrp\", value: 1 },\n noRot: { key: \"noRot\", value: 1 },\n noChangeAspect: { key: \"noChangeAspect\", value: 1 },\n },\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:nvPr\",\n children: [\n new BuilderElement({\n name: \"p:ph\",\n attributes: { type: { key: \"type\", value: \"sldImg\" } },\n }),\n ],\n }),\n ],\n }),\n );\n this.root.push(\n new BuilderElement({\n name: \"p:spPr\",\n children: [\n new BuilderElement({\n name: \"a:xfrm\",\n children: [\n new BuilderElement({\n name: \"a:off\",\n attributes: {\n x: { key: \"x\", value: 685800 },\n y: { key: \"y\", value: 1600200 },\n },\n }),\n new BuilderElement({\n name: \"a:ext\",\n attributes: {\n cx: { key: \"cx\", value: 5486400 },\n cy: { key: \"cy\", value: 3086100 },\n },\n }),\n ],\n }),\n ],\n }),\n );\n }\n}\n\nclass NotesBodyPlaceholder extends XmlComponent {\n public constructor(text?: string) {\n super(\"p:sp\");\n this.root.push(\n new BuilderElement({\n name: \"p:nvSpPr\",\n children: [\n new BuilderElement({\n name: \"p:cNvPr\",\n attributes: {\n id: { key: \"id\", value: 3 },\n name: { key: \"name\", value: \"Notes Placeholder 1\" },\n },\n }),\n new BuilderElement({\n name: \"p:cNvSpPr\",\n children: [\n new BuilderElement({\n name: \"a:spLocks\",\n attributes: { noGrp: { key: \"noGrp\", value: 1 } },\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:nvPr\",\n children: [\n new BuilderElement({\n name: \"p:ph\",\n attributes: {\n type: { key: \"type\", value: \"body\" },\n idx: { key: \"idx\", value: 1 },\n },\n }),\n ],\n }),\n ],\n }),\n );\n this.root.push(\n new BuilderElement({\n name: \"p:spPr\",\n children: [\n new BuilderElement({\n name: \"a:xfrm\",\n children: [\n new BuilderElement({\n name: \"a:off\",\n attributes: {\n x: { key: \"x\", value: 685800 },\n y: { key: \"y\", value: 4800600 },\n },\n }),\n new BuilderElement({\n name: \"a:ext\",\n attributes: {\n cx: { key: \"cx\", value: 5486400 },\n cy: { key: \"cy\", value: 3600450 },\n },\n }),\n ],\n }),\n ],\n }),\n );\n\n const textBodyOptions = text\n ? { children: [new Paragraph({ children: [new TextRun({ text })] })] }\n : undefined;\n this.root.push(new TextBody(textBodyOptions));\n }\n}\n","import type { Context } from \"@file/xml-components\";\nimport { ImportedXmlComponent } from \"@file/xml-components\";\n\nexport interface ShowOptions {\n readonly loop?: boolean;\n readonly kiosk?: boolean;\n readonly showNarration?: boolean;\n readonly useTimings?: boolean;\n}\n\nfunction buildPresPropsXml(showOptions?: ShowOptions): string {\n if (!showOptions) {\n return `<p:presentationPr xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"/>`;\n }\n\n const attrs: string[] = [];\n if (showOptions.loop) attrs.push(' loop=\"1\"');\n if (showOptions.showNarration === false) attrs.push(' showNarration=\"0\"');\n if (showOptions.useTimings) attrs.push(' useTimings=\"1\"');\n\n // EG_ShowType: present | browse | kiosk (child element, not attribute)\n const showType = showOptions.kiosk ? \"<p:kiosk/>\" : \"<p:present/>\";\n const showPrXml = `<p:showPr${attrs.join(\"\")}>${showType}</p:showPr>`;\n\n return `<p:presentationPr xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">${showPrXml}</p:presentationPr>`;\n}\n\nexport class PresentationProperties extends ImportedXmlComponent {\n private static cache = new Map<string, ImportedXmlComponent>();\n private readonly key: string;\n\n public constructor(showOptions?: ShowOptions) {\n super(\"p:presentationPr\");\n this.key = showOptions ? presPropsKey(showOptions) : \"\";\n if (!PresentationProperties.cache.has(this.key)) {\n PresentationProperties.cache.set(\n this.key,\n ImportedXmlComponent.fromXmlString(buildPresPropsXml(showOptions)),\n );\n }\n }\n\n public override toXml(context: Context): string {\n return PresentationProperties.cache.get(this.key)!.toXml(context);\n }\n}\n\nfunction presPropsKey(o: ShowOptions): string {\n return `l${o.loop ? 1 : 0}k${o.kiosk ? 1 : 0}n${o.showNarration ? 1 : 0}t${o.useTimings ? 1 : 0}`;\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\n\nexport interface PresentationOptions {\n readonly slideWidth?: number;\n readonly slideHeight?: number;\n readonly slideIds: readonly number[];\n readonly masterCount: number;\n readonly notesMasterRId?: number;\n}\n\nconst DEFAULT_TEXT_STYLE_XML = `<p:defaultTextStyle xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">\n <a:defPPr><a:defRPr/></a:defPPr>\n <a:lvl1pPr marL=\"0\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl1pPr>\n <a:lvl2pPr marL=\"457200\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl2pPr>\n <a:lvl3pPr marL=\"914400\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl3pPr>\n <a:lvl4pPr marL=\"1371600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl4pPr>\n <a:lvl5pPr marL=\"1828800\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl5pPr>\n <a:lvl6pPr marL=\"2286000\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl6pPr>\n <a:lvl7pPr marL=\"2743200\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl7pPr>\n <a:lvl8pPr marL=\"3200400\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl8pPr>\n <a:lvl9pPr marL=\"3657600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl9pPr>\n</p:defaultTextStyle>`;\n\n/**\n * p:presentation — Root element of a PPTX file.\n * Lazy: stores options, builds XML in toXml().\n */\nexport class Presentation extends XmlComponent {\n private options: PresentationOptions;\n\n public constructor(options: PresentationOptions) {\n super(\"p:presentation\");\n this.options = options;\n }\n\n public setNotesMasterRId(rId: number): void {\n this.options = { ...this.options, notesMasterRId: rId };\n }\n\n public toXml(_context: Context): string {\n const opts = this.options;\n\n const cx = opts.slideWidth ?? 12192000;\n const cy = opts.slideHeight ?? 6858000;\n\n let s = `<p:presentation xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">`;\n s += \"<p:sldMasterIdLst>\";\n for (let mi = 0; mi < opts.masterCount; mi++) {\n s += `<p:sldMasterId id=\"${2147483648 + mi * 12}\" r:id=\"rId${mi + 1}\"/>`;\n }\n s += \"</p:sldMasterIdLst>\";\n if (opts.notesMasterRId) {\n s += `<p:notesMasterIdLst><p:notesMasterId r:id=\"rId${opts.notesMasterRId}\"/></p:notesMasterIdLst>`;\n }\n s += \"<p:sldIdLst>\";\n const sRidOff = opts.masterCount + 1;\n for (let i = 0; i < opts.slideIds.length; i++) {\n s += `<p:sldId id=\"${opts.slideIds[i]}\" r:id=\"rId${sRidOff + i}\"/>`;\n }\n s += \"</p:sldIdLst>\";\n s += `<p:sldSz cx=\"${cx}\" cy=\"${cy}\"/>`;\n s += '<p:notesSz cx=\"6858000\" cy=\"9144000\"/>';\n s += DEFAULT_TEXT_STYLE_XML;\n s += \"</p:presentation>\";\n return s;\n }\n}\n","import { Relationships } from \"@file/relationships/relationships\";\nimport type { BaseXmlComponent } from \"@file/xml-components\";\n\nimport { Presentation } from \"./presentation\";\nimport type { PresentationOptions } from \"./presentation\";\n\nexport interface ViewWrapper {\n readonly view: BaseXmlComponent;\n readonly relationships: Relationships;\n}\n\nexport class PresentationWrapper implements ViewWrapper {\n private readonly presentation: Presentation;\n public readonly relationships: Relationships;\n\n public constructor(options: PresentationOptions) {\n this.presentation = new Presentation(options);\n this.relationships = new Relationships();\n }\n\n public get view(): Presentation {\n return this.presentation;\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\nimport {\n createTransform2D,\n type Transform2DOptions as CoreTransform2DOptions,\n} from \"@office-open/core/drawingml\";\n\nexport type ITransform2DOptions = CoreTransform2DOptions;\n\n/**\n * a:xfrm / p:xfrm — 2D transform for shapes and graphic frames (position + size in EMUs).\n * Delegates to core createTransform2D.\n */\nexport class Transform2D extends XmlComponent {\n private readonly core: XmlComponent;\n\n public constructor(options: ITransform2DOptions, prefix: \"a\" | \"p\" = \"a\") {\n super(`${prefix}:xfrm`);\n this.core = createTransform2D(options, `${prefix}:xfrm`);\n }\n\n public override toXml(context: Context): string {\n return this.core.toXml(context);\n }\n}\n","/**\n * Position/size conversion utilities for PPTX components.\n * @module\n */\nimport { convertPixelsToEmu } from \"@office-open/core\";\n\n/**\n * Pixel position options accepted by most positioned components.\n */\nexport interface PositionOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n}\n\n/**\n * Converts pixel position/size values to EMU, defaulting missing values to 0.\n *\n * Used by components that always need a transform (Chart, Picture,\n * Table, SmartArt, MediaFrameBase, etc.).\n */\nexport function emuPosition(opts: PositionOptions): {\n x: number;\n y: number;\n width: number;\n height: number;\n} {\n return {\n x: convertPixelsToEmu(opts.x ?? 0),\n y: convertPixelsToEmu(opts.y ?? 0),\n width: convertPixelsToEmu(opts.width ?? 0),\n height: convertPixelsToEmu(opts.height ?? 0),\n };\n}\n\n/**\n * Converts pixel position/size values to EMU, preserving undefined.\n *\n * Used by Shape which may omit position to let PowerPoint auto-layout.\n */\nexport function emuPositionOptional(opts: PositionOptions): {\n x: number | undefined;\n y: number | undefined;\n width: number | undefined;\n height: number | undefined;\n} {\n return {\n x: opts.x !== undefined ? convertPixelsToEmu(opts.x) : undefined,\n y: opts.y !== undefined ? convertPixelsToEmu(opts.y) : undefined,\n width: opts.width !== undefined ? convertPixelsToEmu(opts.width) : undefined,\n height: opts.height !== undefined ? convertPixelsToEmu(opts.height) : undefined,\n };\n}\n","import { Transform2D } from \"@file/drawingml/transform-2d\";\nimport { buildAttrObject, BuilderElement, XmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\nimport { emuPosition } from \"@util/position\";\n\nimport { ChartCollection } from \"./chart-collection\";\nimport type { ChartSpaceOptions } from \"./chart-space\";\nimport { ChartSpace } from \"./chart-space\";\n\nlet nextChartId = 2048;\n\nexport interface ChartOptions extends ChartSpaceOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n}\n\n/**\n * p:graphicFrame — Slide-level graphic frame wrapping a chart.\n *\n * The chart is stored as a separate part (ppt/charts/chart{n}.xml)\n * and referenced via a relationship ID placeholder {chart:key}.\n */\nexport class Chart extends XmlComponent {\n private readonly chartOptions: ChartSpaceOptions;\n public readonly chartKey: string;\n\n public constructor(options: ChartOptions) {\n super(\"p:graphicFrame\");\n\n this.chartOptions = options;\n this.chartKey = `chart_${nextChartId++}`;\n\n const id = nextChartId++;\n this.root.push(new GraphicFrameNonVisual(id));\n this.root.push(\n new Transform2D(\n {\n ...emuPosition(options),\n },\n \"p\",\n ),\n );\n\n this.root.push(new ChartGraphic(this.chartKey));\n }\n\n /** Register chart data with the File's Chart collection. */\n private registerChart(context: Context): void {\n const file = context.fileData as { charts: ChartCollection };\n if (file?.charts) {\n file.charts.addChart(this.chartKey, {\n chartSpace: new ChartSpace(this.chartOptions),\n key: this.chartKey,\n });\n }\n }\n\n public override toXml(context: Context): string {\n this.registerChart(context);\n return super.toXml(context);\n }\n}\n\nclass GraphicFrameNonVisual extends XmlComponent {\n public constructor(id: number) {\n super(\"p:nvGraphicFramePr\");\n this.root.push(\n new BuilderElement({\n name: \"p:cNvPr\",\n attributes: {\n id: { key: \"id\", value: id },\n name: { key: \"name\", value: `Chart ${id}` },\n },\n }),\n );\n this.root.push(\n new BuilderElement({\n name: \"p:cNvGraphicFramePr\",\n children: [\n new BuilderElement({\n name: \"a:graphicFrameLocks\",\n attributes: { noGrp: { key: \"noGrp\", value: 1 } },\n }),\n ],\n }),\n );\n this.root.push(new BuilderElement({ name: \"p:nvPr\" }));\n }\n}\n\nclass ChartGraphic extends XmlComponent {\n public constructor(chartKey: string) {\n super(\"a:graphic\");\n this.root.push(new ChartGraphicData(chartKey));\n }\n}\n\nclass ChartGraphicData extends XmlComponent {\n public constructor(chartKey: string) {\n super(\"a:graphicData\");\n this.root.push(\n buildAttrObject({\n uri: \"http://schemas.openxmlformats.org/drawingml/2006/chart\",\n }),\n );\n this.root.push(new ChartRef(chartKey));\n }\n}\n\nclass ChartRef extends XmlComponent {\n public constructor(chartKey: string) {\n super(\"c:chart\");\n this.root.push(\n buildAttrObject({\n \"xmlns:c\": \"http://schemas.openxmlformats.org/drawingml/2006/chart\",\n \"xmlns:r\": \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\n \"r:id\": `{chart:${chartKey}}`,\n }),\n );\n }\n}\n","import type { AnimationOptions } from \"@file/animation/types\";\n/**\n * Shared base class for media frames (video, audio) on slides.\n * @module\n */\nimport { PresetGeometry } from \"@file/drawingml/preset-geometry\";\nimport { Transform2D } from \"@file/drawingml/transform-2d\";\nimport type { File } from \"@file/file\";\nimport type { IMediaData } from \"@file/media/data\";\nimport { BuilderElement, type Context, XmlComponent } from \"@file/xml-components\";\nimport { convertPixelsToEmu } from \"@office-open/core\";\nimport { emuPosition } from \"@util/position\";\n\n/**\n * Common options for all media frames.\n * @internal\n */\nexport interface MediaFrameBaseOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n readonly data: Uint8Array;\n readonly type: IMediaData[\"type\"];\n readonly name?: string;\n readonly animation?: AnimationOptions;\n}\n\n/**\n * Builds an IMediaData object from pixel dimensions and raw data.\n * Generic parameter preserves the specific type literal for correct union narrowing.\n */\nfunction buildMediaData<T extends IMediaData[\"type\"]>(\n type: T,\n fileName: string,\n width: number,\n height: number,\n data: Uint8Array,\n): IMediaData & { readonly type: T } {\n return {\n type,\n fileName,\n transformation: {\n pixels: { x: width, y: height },\n emus: { x: convertPixelsToEmu(width), y: convertPixelsToEmu(height) },\n },\n data,\n } as IMediaData & { readonly type: T };\n}\n\n/**\n * Base class for media frames (video, audio) on slides.\n *\n * Encapsulates the common structure: ID assignment, media data building,\n * p:spPr (Transform2D + PresetGeometry), p:blipFill, p:nvPicPr parts,\n * and media registration in toXml().\n */\nexport abstract class MediaFrameBase extends XmlComponent {\n public readonly shapeId: number;\n public readonly animation: AnimationOptions | undefined;\n protected readonly mediaData: IMediaData;\n protected readonly posterData?: IMediaData;\n\n protected constructor(\n options: MediaFrameBaseOptions,\n id: number,\n mediaFileName: string,\n params: {\n readonly extUri: string;\n readonly cNvPrPrefix: string;\n readonly nvPrExtraChildren?: BuilderElement[];\n readonly posterBytes?: Uint8Array;\n readonly posterType?: string;\n readonly posterFileName?: string;\n },\n ) {\n super(\"p:pic\");\n\n this.shapeId = id;\n this.animation = options.animation;\n\n const name = options.name ?? `Media ${id}`;\n const w = options.width ?? 0;\n const h = options.height ?? 0;\n\n this.mediaData = buildMediaData(options.type, mediaFileName, w, h, options.data);\n\n // Poster data (video only)\n if (params.posterBytes) {\n const pt = params.posterType ?? \"png\";\n const pfn = params.posterFileName ?? `${name.replace(/\\s+/g, \"_\")}_poster.${pt}`;\n this.posterData = buildMediaData(pt === \"jpg\" ? \"jpg\" : \"png\", pfn, w, h, params.posterBytes);\n }\n\n // p:nvPicPr\n const nvPrChildren: BuilderElement[] = [...(params.nvPrExtraChildren ?? [])];\n nvPrChildren.push(\n new BuilderElement({\n name: \"p:extLst\",\n children: [\n new BuilderElement({\n name: \"p:ext\",\n attributes: { uri: { key: \"uri\", value: params.extUri } },\n children: [\n new BuilderElement({\n name: \"p14:media\",\n attributes: {\n \"r:embed\": {\n key: \"r:embed\",\n value: `{media:${mediaFileName}}`,\n },\n \"xmlns:p14\": {\n key: \"xmlns:p14\",\n value: \"http://schemas.microsoft.com/office/powerpoint/2010/main\",\n },\n },\n }),\n ],\n }),\n ],\n }),\n );\n\n this.root.push(\n new BuilderElement({\n name: \"p:nvPicPr\",\n children: [\n new BuilderElement({\n name: `${params.cNvPrPrefix}:cNvPr`,\n attributes: {\n id: { key: \"id\", value: id },\n name: { key: \"name\", value: name },\n descr: { key: \"descr\", value: \"\" },\n },\n }),\n new BuilderElement({\n name: `${params.cNvPrPrefix}:cNvPicPr`,\n children: [\n new BuilderElement({\n name: \"a:picLocks\",\n attributes: {\n noChangeAspect: { key: \"noChangeAspect\", value: \"1\" },\n },\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:nvPr\",\n children: nvPrChildren,\n }),\n ],\n }),\n );\n\n // p:blipFill\n const blipFillChildren: BuilderElement[] = [];\n if (this.posterData) {\n blipFillChildren.push(\n new BuilderElement({\n name: \"a:blip\",\n attributes: {\n \"r:embed\": { key: \"r:embed\", value: `{${this.posterData.fileName}}` },\n },\n }),\n );\n }\n blipFillChildren.push(\n new BuilderElement({\n name: \"a:stretch\",\n children: [new BuilderElement({ name: \"a:fillRect\" })],\n }),\n );\n this.root.push(new BuilderElement({ name: \"p:blipFill\", children: blipFillChildren }));\n\n // p:spPr\n this.root.push(\n new BuilderElement({\n name: \"p:spPr\",\n children: [\n new Transform2D({\n ...emuPosition(options),\n }),\n new PresetGeometry({ preset: \"rect\" }),\n ],\n }),\n );\n }\n\n /** Register media data with the File's Media collection. */\n private registerMedia(context: Context): void {\n const file = context.fileData as File;\n if (this.posterData) {\n file?.media.addImage(this.posterData.fileName, this.posterData);\n }\n file?.media.addMedia(this.mediaData.fileName, this.mediaData);\n }\n\n public override toXml(context: Context): string {\n this.registerMedia(context);\n return super.toXml(context);\n }\n}\n","import { MediaFrameBase, type MediaFrameBaseOptions } from \"./media-frame-base\";\n\nconst MEDIA_EXT_URI = \"{CF1602FD-DB20-4165-A070-5F299619DA56}\";\n\nexport type AudioType = \"mp3\" | \"wav\" | \"wma\" | \"aac\";\n\nexport interface AudioFrameOptions extends MediaFrameBaseOptions {\n readonly type: AudioType;\n}\n\n/**\n * p:pic — An audio frame on a slide.\n *\n * Uses a media relationship for the audio file (via {media:fileName} placeholder).\n */\nexport class AudioFrame extends MediaFrameBase {\n private static nextId = 200;\n\n public constructor(options: AudioFrameOptions) {\n const id = AudioFrame.nextId++;\n const name = options.name ?? `Audio ${id}`;\n const mediaFileName = `${name.replace(/\\s+/g, \"_\")}.${options.type}`;\n\n super(options, id, mediaFileName, {\n extUri: MEDIA_EXT_URI,\n cNvPrPrefix: \"p\",\n });\n }\n}\n","import { BuilderElement } from \"@file/xml-components\";\n\nimport { MediaFrameBase, type MediaFrameBaseOptions } from \"./media-frame-base\";\n\nconst MEDIA_EXT_URI = \"{DAA4B4D4-6D71-4841-9C94-3DE7FCFB9230}\";\n\n/** Minimal 1x1 transparent PNG (67 bytes). */\nconst MINIMAL_PNG = new Uint8Array([\n 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 1, 0, 0, 0, 1, 8, 6, 0, 0,\n 0, 31, 21, 196, 137, 0, 0, 0, 13, 73, 68, 65, 84, 8, 215, 99, 24, 5, 163, 0, 0, 0, 2, 0, 1, 226,\n 33, 188, 51, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130,\n]);\n\nexport type VideoType = \"mp4\" | \"mov\" | \"wmv\" | \"avi\";\nexport type PosterType = \"png\" | \"jpg\";\n\nexport interface VideoFrameOptions extends MediaFrameBaseOptions {\n readonly type: VideoType;\n readonly poster?: Uint8Array;\n readonly posterType?: PosterType;\n}\n\n/**\n * p:pic — A video frame on a slide.\n *\n * Uses three relationships:\n * - Image relationship for poster frame (via {posterFileName} placeholder)\n * - Video relationship for video file (via {video:fileName} placeholder in a:videoFile r:link)\n * - Media relationship for video file (via {media:fileName} placeholder in p14:media r:embed)\n */\nexport class VideoFrame extends MediaFrameBase {\n private static nextId = 100;\n\n public constructor(options: VideoFrameOptions) {\n const id = VideoFrame.nextId++;\n const name = options.name ?? `Video ${id}`;\n const mediaFileName = `${name.replace(/\\s+/g, \"_\")}.${options.type}`;\n const posterBytes = options.poster ?? MINIMAL_PNG;\n const posterType = options.posterType ?? \"png\";\n const posterFileName = `${name.replace(/\\s+/g, \"_\")}_poster.${posterType}`;\n\n super(options, id, mediaFileName, {\n extUri: MEDIA_EXT_URI,\n cNvPrPrefix: \"p\",\n nvPrExtraChildren: [\n new BuilderElement({\n name: \"a:videoFile\",\n attributes: {\n \"r:link\": { key: \"r:link\", value: `{video:${mediaFileName}}` },\n },\n }),\n ],\n posterBytes,\n posterType,\n posterFileName,\n });\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport { createBlip, Stretch } from \"@office-open/core/drawingml\";\n\n/**\n * p:blipFill — Image fill with stretch mode (within p:pic context).\n * Uses core createBlip for the blip element.\n */\nexport class BlipFill extends XmlComponent {\n public constructor(fileName: string) {\n super(\"p:blipFill\");\n this.root.push(createBlip({ referenceId: fileName }));\n this.root.push(new Stretch());\n }\n}\n","import { EmptyElement } from \"@file/xml-components\";\n\n/**\n * p:cNvPicPr — Non-visual picture drawing properties (within p:pic context).\n */\nexport class NonVisualPictureProperties extends EmptyElement {\n public constructor() {\n super(\"p:cNvPicPr\");\n }\n}\n","import { NonVisualPictureProperties } from \"@file/drawingml/non-visual-picture-props\";\nimport { BuilderElement, XmlComponent } from \"@file/xml-components\";\n\n/**\n * p:nvPicPr — Non-visual picture properties for p:pic.\n */\nexport class PictureNonVisual extends XmlComponent {\n public constructor(id: number, name: string) {\n super(\"p:nvPicPr\");\n this.root.push(\n new BuilderElement({\n name: \"p:cNvPr\",\n attributes: {\n id: { key: \"id\", value: id },\n name: { key: \"name\", value: name },\n descr: { key: \"descr\", value: \"\" },\n },\n }),\n );\n this.root.push(new NonVisualPictureProperties());\n this.root.push(new BuilderElement({ name: \"p:nvPr\" }));\n }\n}\n","import { BlipFill } from \"@file/drawingml/blip-fill\";\nimport { PresetGeometry } from \"@file/drawingml/preset-geometry\";\nimport { Transform2D } from \"@file/drawingml/transform-2d\";\nimport type { File } from \"@file/file\";\nimport type { IMediaData } from \"@file/media/data\";\nimport { BuilderElement, type Context, XmlComponent } from \"@file/xml-components\";\nimport { convertPixelsToEmu } from \"@office-open/core\";\nimport { emuPosition } from \"@util/position\";\n\nimport { PictureNonVisual } from \"./picture-non-visual\";\n\nexport interface PictureOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n readonly data: Uint8Array;\n readonly type: \"png\" | \"jpg\" | \"gif\" | \"bmp\" | \"emf\" | \"wmf\";\n readonly name?: string;\n}\n\n/**\n * p:pic — A picture on a slide.\n *\n * Registers image with Media collection via toXml().\n * The ImageReplacer replaces `{fileName}` placeholder with actual rId.\n */\nexport class Picture extends XmlComponent {\n private static nextId = 100;\n private readonly imageData: IMediaData;\n\n public constructor(options: PictureOptions) {\n super(\"p:pic\");\n\n const id = Picture.nextId++;\n const name = options.name ?? `Picture ${id}`;\n const fileName = `${name.replace(/\\s+/g, \"_\")}.${options.type}`;\n\n this.imageData = {\n type: options.type,\n fileName,\n transformation: {\n pixels: {\n x: options.width ?? 0,\n y: options.height ?? 0,\n },\n emus: {\n x: convertPixelsToEmu(options.width ?? 0),\n y: convertPixelsToEmu(options.height ?? 0),\n },\n },\n data: options.data,\n };\n\n this.root.push(new PictureNonVisual(id, name));\n\n this.root.push(new BlipFill(fileName));\n\n this.root.push(\n new BuilderElement({\n name: \"p:spPr\",\n children: [\n new Transform2D({\n ...emuPosition(options),\n }),\n new PresetGeometry({ preset: \"rect\" }),\n ],\n }),\n );\n }\n\n /** Register image with the File's Media collection. */\n private registerMedia(context: Context): void {\n (context.fileData as File).media.addImage(this.imageData.fileName, this.imageData);\n }\n\n public override toXml(context: Context): string {\n this.registerMedia(context);\n return super.toXml(context);\n }\n}\n","import { coerceChild } from \"@file/slide/coerce\";\nimport type { SlideChild } from \"@file/slide/slide-child\";\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\nimport { convertPixelsToEmu } from \"@office-open/core\";\n\nexport interface GroupShapeOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n readonly rotation?: number;\n readonly flipHorizontal?: boolean;\n readonly children: readonly SlideChild[];\n}\n\n/**\n * p:grpSp — Group shape containing child shapes.\n * Lazy: stores options, builds XML in toXml().\n */\nexport class GroupShape extends BaseXmlComponent {\n private static nextId = 100;\n private readonly id: number;\n private readonly options: GroupShapeOptions;\n\n public constructor(options: GroupShapeOptions) {\n super(\"p:grpSp\");\n this.id = GroupShape.nextId++;\n this.options = options;\n }\n\n public override toXml(context: Context): string {\n const opts = this.options;\n const id = this.id;\n const parts: string[] = [];\n\n // p:nvGrpSpPr\n parts.push(\n `<p:nvGrpSpPr><p:cNvPr id=\"${id}\" name=\"Group ${id}\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>`,\n );\n\n // p:grpSpPr\n const xfrmAttrs: string[] = [];\n if (opts.flipHorizontal !== undefined) xfrmAttrs.push(`flipH=\"${opts.flipHorizontal ? 1 : 0}\"`);\n if (opts.rotation !== undefined) xfrmAttrs.push(`rot=\"${opts.rotation}\"`);\n const xfrmAttrStr = xfrmAttrs.length > 0 ? ` ${xfrmAttrs.join(\" \")}` : \"\";\n parts.push(\n `<p:grpSpPr><a:xfrm${xfrmAttrStr}><a:off x=\"${convertPixelsToEmu(opts.x ?? 0)}\" y=\"${convertPixelsToEmu(opts.y ?? 0)}\"/><a:ext cx=\"${convertPixelsToEmu(opts.width ?? 0)}\" cy=\"${convertPixelsToEmu(opts.height ?? 0)}\"/><a:chOff x=\"0\" y=\"0\"/><a:chExt cx=\"0\" cy=\"0\"/></a:xfrm></p:grpSpPr>`,\n );\n\n // Child shapes\n for (const rawChild of opts.children) {\n const child = coerceChild(rawChild);\n const s = child.toXml(context);\n if (s) parts.push(s);\n }\n\n return `<p:grpSp>${parts.join(\"\")}</p:grpSp>`;\n }\n}\n","import { EmptyElement } from \"@file/xml-components\";\n\n/**\n * p:cNvSpPr — Non-visual shape properties.\n * Uses p: prefix in PresentationML context.\n */\nexport class NonVisualShapeProperties extends EmptyElement {\n public constructor() {\n super(\"p:cNvSpPr\");\n }\n}\n","import { createOutline, PresetDash, LineEndType, LineEndWidth } from \"@office-open/core/drawingml\";\nimport type {\n OutlineOptions as CoreOutlineOptions,\n LineEndOptions as CoreLineEndOptions,\n} from \"@office-open/core/drawingml\";\n\n/**\n * PPTX-specific outline options (backward-compatible API).\n */\nexport interface OutlineOptions {\n readonly width?: number;\n readonly color?: string;\n readonly dashStyle?: \"solid\" | \"dash\" | \"dashDot\" | \"lgDash\" | \"sysDot\" | \"sysDash\";\n}\n\nexport type { CoreOutlineOptions as OutlineOptionsCore };\n\nconst DASH_STYLE_MAP: Record<string, (typeof PresetDash)[keyof typeof PresetDash]> = {\n solid: \"solid\",\n dash: \"dash\",\n dashDot: \"dashDot\",\n lgDash: \"lgDash\",\n sysDot: \"sysDot\",\n sysDash: \"sysDash\",\n};\n\nconst ARROWHEAD_MAP: Record<string, (typeof LineEndType)[keyof typeof LineEndType]> = {\n triangle: \"triangle\",\n stealth: \"stealth\",\n diamond: \"diamond\",\n oval: \"oval\",\n open: \"arrow\",\n};\n\nfunction toCoreLineEnd(type: string, width?: string, length?: string): CoreLineEndOptions {\n return {\n type: ARROWHEAD_MAP[type] ?? \"triangle\",\n ...(width ? { width: width as (typeof LineEndWidth)[keyof typeof LineEndWidth] } : {}),\n ...(length ? { length: length as (typeof LineEndWidth)[keyof typeof LineEndWidth] } : {}),\n };\n}\n\n/**\n * Creates an outline element using pptx's simplified API.\n */\nexport const createOutlineCompat = (\n options: OutlineOptions = {},\n arrowheads?: {\n readonly beginType?: string;\n readonly endType?: string;\n readonly width?: string;\n readonly length?: string;\n },\n) =>\n createOutline({\n width: options.width,\n ...(options.color\n ? { type: \"solidFill\" as const, color: { value: options.color.replace(\"#\", \"\") } }\n : { type: \"noFill\" as const }),\n ...(options.dashStyle && {\n dash: DASH_STYLE_MAP[options.dashStyle] ?? \"solid\",\n }),\n ...(arrowheads?.endType\n ? { headEnd: toCoreLineEnd(arrowheads.endType, arrowheads.width, arrowheads.length) }\n : {}),\n ...(arrowheads?.beginType\n ? { tailEnd: toCoreLineEnd(arrowheads.beginType, arrowheads.width, arrowheads.length) }\n : {}),\n } satisfies CoreOutlineOptions);\n","import type { FillOptions } from \"@file/drawingml/fill\";\nimport { buildFill } from \"@file/drawingml/fill\";\nimport { NonVisualShapeProperties } from \"@file/drawingml/non-visual-shape-props\";\nimport { createOutlineCompat, type OutlineOptions } from \"@file/drawingml/outline\";\nimport { PresetGeometry } from \"@file/drawingml/preset-geometry\";\nimport { BuilderElement, XmlComponent as Xc } from \"@file/xml-components\";\nimport { convertPixelsToEmu } from \"@office-open/core\";\n\n/**\n * p:sp — A line shape on a slide.\n */\nexport class LineShape extends Xc {\n private static nextId = 2;\n public readonly shapeId: number;\n\n public constructor(options: LineShapeOptions = {}) {\n super(\"p:sp\");\n\n const id = options.id ?? LineShape.nextId++;\n this.shapeId = id;\n const name = options.name ?? `Line ${id}`;\n\n const x1 = convertPixelsToEmu(options.x1 ?? 0);\n const y1 = convertPixelsToEmu(options.y1 ?? 0);\n const x2 = convertPixelsToEmu(options.x2 ?? 100);\n const y2 = convertPixelsToEmu(options.y2 ?? 100);\n\n this.root.push(\n new BuilderElement({\n name: \"p:nvSpPr\",\n children: [\n new BuilderElement({\n name: \"p:cNvPr\",\n attributes: {\n id: { key: \"id\", value: id },\n name: { key: \"name\", value: name },\n },\n }),\n new NonVisualShapeProperties(),\n new BuilderElement({ name: \"p:nvPr\" }),\n ],\n }),\n );\n\n const offX = Math.min(x1, x2);\n const offY = Math.min(y1, y2);\n\n const xfrmAttrs:\n | Record<string, { readonly key: string; readonly value: string | number }>\n | undefined =\n x1 > x2 || y1 > y2\n ? (() => {\n const a: Record<string, { readonly key: string; readonly value: string | number }> = {};\n if (x1 > x2) a.flipH = { key: \"flipH\", value: 1 };\n if (y1 > y2) a.flipV = { key: \"flipV\", value: 1 };\n return a;\n })()\n : undefined;\n\n const spPrChildren: BuilderElement<{}>[] = [\n new BuilderElement({\n name: \"a:xfrm\",\n children: [\n new BuilderElement({\n name: \"a:off\",\n attributes: { x: { key: \"x\", value: offX }, y: { key: \"y\", value: offY } },\n }),\n new BuilderElement({\n name: \"a:ext\",\n attributes: {\n cx: { key: \"cx\", value: Math.abs(x2 - x1) },\n cy: { key: \"cy\", value: Math.abs(y2 - y1) },\n },\n }),\n ],\n attributes: xfrmAttrs,\n }),\n new PresetGeometry({ preset: \"line\" }),\n ];\n\n if (options.fill !== undefined) {\n spPrChildren.push(buildFill(options.fill));\n }\n if (options.outline) {\n spPrChildren.push(createOutlineCompat(options.outline));\n }\n\n this.root.push(\n new BuilderElement({\n name: \"p:spPr\",\n children: spPrChildren,\n }),\n );\n\n this.root.push(\n new BuilderElement({\n name: \"p:txBody\",\n children: [\n new BuilderElement({\n name: \"a:bodyPr\",\n attributes: { wrap: { key: \"wrap\", value: \"square\" } },\n }),\n new BuilderElement({ name: \"a:lstStyle\" }),\n new BuilderElement({ name: \"a:p\" }),\n ],\n }),\n );\n }\n}\n\nexport interface LineShapeOptions {\n readonly id?: number;\n readonly name?: string;\n readonly x1?: number;\n readonly y1?: number;\n readonly x2?: number;\n readonly y2?: number;\n readonly fill?: FillOptions;\n readonly outline?: OutlineOptions;\n}\n\nexport type ArrowheadType = \"triangle\" | \"stealth\" | \"diamond\" | \"oval\" | \"open\" | \"none\";\n\n/**\n * p:cxnSp — A connector shape on a slide (line with optional arrowheads).\n */\nexport class ConnectorShape extends Xc {\n private static nextId = 2;\n public readonly shapeId: number;\n\n public constructor(options: ConnectorShapeOptions = {}) {\n super(\"p:cxnSp\");\n\n const id = options.id ?? ConnectorShape.nextId++;\n this.shapeId = id;\n const name = options.name ?? `Connector ${id}`;\n\n const x1 = convertPixelsToEmu(options.x1 ?? 0);\n const y1 = convertPixelsToEmu(options.y1 ?? 0);\n const x2 = convertPixelsToEmu(options.x2 ?? 100);\n const y2 = convertPixelsToEmu(options.y2 ?? 100);\n\n this.root.push(\n new BuilderElement({\n name: \"p:nvCxnSpPr\",\n children: [\n new BuilderElement({\n name: \"p:cNvPr\",\n attributes: {\n id: { key: \"id\", value: id },\n name: { key: \"name\", value: name },\n },\n }),\n new BuilderElement({ name: \"p:cNvCxnSpPr\" }),\n new BuilderElement({ name: \"p:nvPr\" }),\n ],\n }),\n );\n\n const offX = Math.min(x1, x2);\n const offY = Math.min(y1, y2);\n\n const xfrmAttrs:\n | Record<string, { readonly key: string; readonly value: string | number }>\n | undefined =\n x1 > x2 || y1 > y2\n ? (() => {\n const a: Record<string, { readonly key: string; readonly value: string | number }> = {};\n if (x1 > x2) a.flipH = { key: \"flipH\", value: 1 };\n if (y1 > y2) a.flipV = { key: \"flipV\", value: 1 };\n return a;\n })()\n : undefined;\n\n const spPrChildren: BuilderElement<{}>[] = [\n new BuilderElement({\n name: \"a:xfrm\",\n children: [\n new BuilderElement({\n name: \"a:off\",\n attributes: { x: { key: \"x\", value: offX }, y: { key: \"y\", value: offY } },\n }),\n new BuilderElement({\n name: \"a:ext\",\n attributes: {\n cx: { key: \"cx\", value: Math.abs(x2 - x1) },\n cy: { key: \"cy\", value: Math.abs(y2 - y1) },\n },\n }),\n ],\n attributes: xfrmAttrs,\n }),\n new PresetGeometry({ preset: \"line\" }),\n ];\n\n if (options.fill !== undefined) {\n spPrChildren.push(buildFill(options.fill));\n }\n\n // Arrowheads + outline: headEnd/tailEnd must be inside a:ln per XSD\n const hasArrowheads = options.beginArrowhead || options.endArrowhead;\n if (options.outline || hasArrowheads) {\n spPrChildren.push(\n createOutlineCompat(\n options.outline ?? {},\n hasArrowheads\n ? {\n beginType: options.beginArrowhead,\n endType: options.endArrowhead,\n width: options.arrowheadWidth,\n length: options.arrowheadLength,\n }\n : undefined,\n ),\n );\n }\n\n this.root.push(\n new BuilderElement({\n name: \"p:spPr\",\n children: spPrChildren,\n }),\n );\n }\n}\n\nexport interface ConnectorShapeOptions {\n readonly id?: number;\n readonly name?: string;\n readonly x1?: number;\n readonly y1?: number;\n readonly x2?: number;\n readonly y2?: number;\n readonly fill?: FillOptions;\n readonly outline?: OutlineOptions;\n readonly beginArrowhead?: ArrowheadType;\n readonly endArrowhead?: ArrowheadType;\n readonly arrowheadWidth?: \"small\" | \"medium\" | \"large\";\n readonly arrowheadLength?: \"small\" | \"medium\" | \"large\";\n}\n","import type { File } from \"@file/file\";\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\n\nimport { createPptxEffectList, buildScene3D, buildShape3D, type EffectsOptions } from \"./effects\";\nimport { buildFill, extractBlipFillMedia } from \"./fill\";\nimport type { FillOptions } from \"./fill\";\nimport { createOutlineCompat } from \"./outline\";\nimport type { OutlineOptions } from \"./outline\";\nimport { PresetGeometry } from \"./preset-geometry\";\nimport { Transform2D } from \"./transform-2d\";\n\nexport interface ConnectionSiteOptions {\n readonly x: number;\n readonly y: number;\n readonly angle?: number;\n}\n\nexport interface ShapePropertiesOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n readonly flipHorizontal?: boolean;\n readonly rotation?: number;\n readonly geometry?: string;\n readonly fill?: FillOptions;\n readonly outline?: OutlineOptions;\n readonly effects?: EffectsOptions;\n readonly connectionSites?: readonly ConnectionSiteOptions[];\n}\n\n/**\n * p:spPr — Shape properties (transform, geometry, fill, outline, effects).\n */\nexport class ShapeProperties extends BaseXmlComponent {\n private readonly options: ShapePropertiesOptions;\n\n public constructor(options: ShapePropertiesOptions) {\n super(\"p:spPr\");\n this.options = options;\n }\n\n public override toXml(context: Context<File>): string {\n const opts = this.options;\n const parts: string[] = [];\n\n // Transform2D\n if (\n opts.x !== undefined ||\n opts.y !== undefined ||\n opts.width !== undefined ||\n opts.height !== undefined ||\n opts.flipHorizontal !== undefined ||\n opts.rotation !== undefined\n ) {\n parts.push(new Transform2D(opts).toXml(context));\n }\n\n // PresetGeometry\n parts.push(new PresetGeometry({ preset: opts.geometry ?? \"rect\" }).toXml(context));\n\n // Fill (register blipFill media — side effect)\n const media = opts.fill ? extractBlipFillMedia(opts.fill) : undefined;\n if (media) {\n context.fileData?.media.addImage(media.fileName, {\n data: media.data,\n fileName: media.fileName,\n type: media.type as \"png\",\n transformation: { pixels: { x: 0, y: 0 }, emus: { x: 0, y: 0 } },\n });\n }\n\n const fillComponent = buildFill(opts.fill !== undefined ? opts.fill : { type: \"none\" });\n parts.push(fillComponent.toXml(context));\n\n // Outline\n if (opts.outline) {\n parts.push(createOutlineCompat(opts.outline).toXml(context));\n }\n\n // Effects\n if (opts.effects) {\n const effectObj = createPptxEffectList(opts.effects);\n if (effectObj) parts.push(effectObj.toXml(context));\n\n const scene3d = buildScene3D(opts.effects);\n if (scene3d) parts.push(scene3d.toXml(context));\n\n const shape3d = buildShape3D(opts.effects);\n if (shape3d) parts.push(shape3d.toXml(context));\n }\n\n // Connection sites\n if (opts.connectionSites && opts.connectionSites.length > 0) {\n const cxnParts: string[] = [];\n for (const site of opts.connectionSites) {\n const ang = site.angle !== undefined ? ` ang=\"${site.angle}\"` : \"\";\n cxnParts.push(`<a:cxn pos=\"${site.x} ${site.y}\"${ang}/>`);\n }\n parts.push(`<a:cxnLst>${cxnParts.join(\"\")}</a:cxnLst>`);\n }\n\n return `<p:spPr>${parts.join(\"\")}</p:spPr>`;\n }\n}\n","import type { AnimationOptions } from \"@file/animation/types\";\nimport type { EffectsOptions } from \"@file/drawingml/effects\";\nimport type { OutlineOptions } from \"@file/drawingml/outline\";\nimport { ShapeProperties } from \"@file/drawingml/shape-properties\";\nimport type { ShapePropertiesOptions } from \"@file/drawingml/shape-properties\";\nimport type { File } from \"@file/file\";\nimport { XmlComponent as Xc } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\nimport { escapeXml } from \"@office-open/xml\";\nimport { emuPositionOptional } from \"@util/position\";\n\nimport { TextBody } from \"./text-body\";\nimport type { TextBodyOptions } from \"./text-body\";\n\nexport interface ShapeOptions {\n readonly id?: number;\n readonly name?: string;\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n readonly geometry?: string;\n readonly fill?: ShapePropertiesOptions[\"fill\"];\n readonly outline?: OutlineOptions;\n readonly effects?: EffectsOptions;\n readonly flipHorizontal?: boolean;\n readonly rotation?: number;\n readonly textBody?: TextBodyOptions;\n readonly animation?: AnimationOptions;\n readonly placeholder?: \"title\" | \"body\" | \"subTitle\" | \"sldNum\" | \"dt\" | \"ftr\" | \"hdr\" | \"obj\";\n readonly placeholderIndex?: number;\n}\n\n/**\n * p:sp — A shape on a slide.\n * Lazy: stores options, builds XML in toXml().\n *\n * x/y/width/height accept pixel values and are internally converted to EMUs.\n */\nexport class Shape extends Xc {\n private static nextId = 2;\n public readonly shapeId: number;\n public readonly animation: AnimationOptions | undefined;\n private readonly options: ShapeOptions;\n\n public constructor(options: ShapeOptions = {}) {\n super(\"p:sp\");\n\n const id = options.id ?? Shape.nextId++;\n this.shapeId = id;\n this.animation = options.animation;\n this.options = { ...options, id };\n }\n\n public override toXml(context: Context): string {\n const opts = this.options;\n const id = this.shapeId;\n const name = opts.name ?? `Shape ${id}`;\n const parts: string[] = [];\n\n // p:nvSpPr\n let nvPrContent = \"<p:nvPr/>\";\n if (opts.placeholder) {\n const phAttrs: string[] = [`type=\"${opts.placeholder}\"`];\n if (opts.placeholderIndex !== undefined) phAttrs.push(`idx=\"${opts.placeholderIndex}\"`);\n nvPrContent = `<p:nvPr><p:ph ${phAttrs.join(\" \")}/></p:nvPr>`;\n }\n parts.push(\n `<p:nvSpPr><p:cNvPr id=\"${id}\" name=\"${escapeXml(name)}\"/><p:cNvSpPr/>${nvPrContent}</p:nvSpPr>`,\n );\n\n // p:spPr (ShapeProperties — has side effects, uses toXml() internally)\n const shapeProps: ShapePropertiesOptions = {\n ...emuPositionOptional(opts),\n geometry: opts.geometry,\n fill: opts.fill,\n outline: opts.outline,\n effects: opts.effects,\n flipHorizontal: opts.flipHorizontal,\n rotation: opts.rotation,\n };\n const spPr = new ShapeProperties(shapeProps);\n const spPrXml = spPr.toXml(context as Context<File>);\n if (spPrXml) parts.push(spPrXml);\n\n // p:txBody (TextBody — has toXml)\n const txBody = new TextBody(opts.textBody ?? {});\n parts.push(txBody.toXml(context));\n\n return `<p:sp>${parts.join(\"\")}</p:sp>`;\n }\n}\n","import { Transform2D } from \"@file/drawingml/transform-2d\";\nimport { buildAttrObject, BuilderElement, type Context, XmlComponent } from \"@file/xml-components\";\nimport { emuPosition } from \"@util/position\";\n\nimport type { SmartArtCollection } from \"./smartart-collection\";\nimport { createDataModel, type TreeNode } from \"./tree-to-model\";\n\nlet nextSmartArtId = 1024;\n\nexport interface SmartArtOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n readonly nodes: readonly TreeNode[];\n readonly name?: string;\n /** Layout ID (e.g. \"default\", \"process1\", \"hierarchy1\") */\n readonly layout?: string;\n /** Quick style ID (e.g. \"simple1\", \"moderate1\") */\n readonly style?: string;\n /** Color transform ID (e.g. \"accent1_2\", \"colorful1\") */\n readonly color?: string;\n}\n\n/**\n * p:graphicFrame — Slide-level graphic frame wrapping a SmartArt diagram.\n */\nexport class SmartArt extends XmlComponent {\n private readonly smartArtKey: string;\n private readonly dataModel: ReturnType<typeof createDataModel>;\n private readonly layoutId: string;\n private readonly styleId: string;\n private readonly colorId: string;\n\n public constructor(options: SmartArtOptions) {\n super(\"p:graphicFrame\");\n\n this.smartArtKey = `smartart_${nextSmartArtId++}`;\n this.layoutId = options.layout ?? \"default\";\n this.styleId = options.style ?? \"simple1\";\n this.colorId = options.color ?? \"accent1_2\";\n this.dataModel = createDataModel(options.nodes, this.layoutId, this.styleId, this.colorId);\n\n const id = nextSmartArtId++;\n const name = options.name ?? `Diagram ${id}`;\n\n this.root.push(new GraphicFrameNonVisual(id, name));\n this.root.push(\n new Transform2D(\n {\n ...emuPosition(options),\n },\n \"p\",\n ),\n );\n this.root.push(new SmartArtGraphic(this.smartArtKey));\n }\n\n /** Register SmartArt data with the File's SmartArt collection. */\n private registerSmartArt(context: Context): void {\n const file = context.fileData as { smartArts: SmartArtCollection };\n if (file?.smartArts) {\n file.smartArts.addSmartArt(this.smartArtKey, {\n key: this.smartArtKey,\n dataModel: this.dataModel,\n layout: this.layoutId,\n style: this.styleId,\n color: this.colorId,\n });\n }\n }\n\n public override toXml(context: Context): string {\n this.registerSmartArt(context);\n return super.toXml(context);\n }\n}\n\nclass GraphicFrameNonVisual extends XmlComponent {\n public constructor(id: number, name: string) {\n super(\"p:nvGraphicFramePr\");\n this.root.push(\n new BuilderElement({\n name: \"p:cNvPr\",\n attributes: {\n id: { key: \"id\", value: id },\n name: { key: \"name\", value: name },\n },\n }),\n );\n this.root.push(\n new BuilderElement({\n name: \"p:cNvGraphicFramePr\",\n children: [\n new BuilderElement({\n name: \"a:graphicFrameLocks\",\n attributes: { noGrp: { key: \"noGrp\", value: 1 } },\n }),\n ],\n }),\n );\n this.root.push(new BuilderElement({ name: \"p:nvPr\" }));\n }\n}\n\nclass SmartArtGraphic extends XmlComponent {\n public constructor(smartArtKey: string) {\n super(\"a:graphic\");\n this.root.push(new SmartArtGraphicData(smartArtKey));\n }\n}\n\nclass SmartArtGraphicData extends XmlComponent {\n public constructor(smartArtKey: string) {\n super(\"a:graphicData\");\n this.root.push(\n buildAttrObject({\n uri: \"http://schemas.openxmlformats.org/drawingml/2006/diagram\",\n }),\n );\n this.root.push(new DiagramRelIds(smartArtKey));\n }\n}\n\nclass DiagramRelIds extends XmlComponent {\n public constructor(smartArtKey: string) {\n super(\"dgm:relIds\");\n this.root.push(\n buildAttrObject({\n \"xmlns:dgm\": \"http://schemas.openxmlformats.org/drawingml/2006/diagram\",\n \"xmlns:r\": \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\n \"r:dm\": `{smartart:${smartArtKey}}`,\n \"r:lo\": `{smartart-lo:${smartArtKey}}`,\n \"r:qs\": `{smartart-qs:${smartArtKey}}`,\n \"r:cs\": `{smartart-cs:${smartArtKey}}`,\n }),\n );\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\n\n/**\n * a:graphic > a:graphicData — DrawingML graphic wrapper for table.\n * Lazy: stores table reference, builds XML in toXml().\n */\nexport class Graphic extends BaseXmlComponent {\n private readonly table: BaseXmlComponent;\n\n public constructor(table: BaseXmlComponent) {\n super(\"a:graphic\");\n this.table = table;\n }\n\n public override toXml(context: Context): string {\n const tableXml = this.table.toXml(context);\n return `<a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/table\">${tableXml}</a:graphicData></a:graphic>`;\n }\n}\n","import { BuilderElement, XmlComponent } from \"@file/xml-components\";\n\n/**\n * p:nvGraphicFramePr — Non-visual properties for graphic frame.\n */\nexport class GraphicFrameNonVisual extends XmlComponent {\n private static nextId = 1024;\n\n public constructor() {\n super(\"p:nvGraphicFramePr\");\n const id = GraphicFrameNonVisual.nextId++;\n this.root.push(\n new BuilderElement({\n name: \"p:cNvPr\",\n attributes: {\n id: { key: \"id\", value: id },\n name: { key: \"name\", value: `Table ${id}` },\n },\n }),\n );\n this.root.push(\n new BuilderElement({\n name: \"p:cNvGraphicFramePr\",\n children: [\n new BuilderElement({\n name: \"a:graphicFrameLocks\",\n attributes: { noGrp: { key: \"noGrp\", value: 1 } },\n }),\n ],\n }),\n );\n this.root.push(new BuilderElement({ name: \"p:nvPr\" }));\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\n\n/**\n * a:tblGrid — Table grid with column width definitions.\n * Lazy: stores widths, builds XML in toXml().\n */\nexport class TableGrid extends BaseXmlComponent {\n private readonly columnWidths: readonly number[];\n\n public constructor(columnWidths: readonly number[]) {\n super(\"a:tblGrid\");\n this.columnWidths = columnWidths;\n }\n\n public override toXml(_context: Context): string {\n const cols = this.columnWidths.map((w) => `<a:gridCol w=\"${w}\"/>`).join(\"\");\n return `<a:tblGrid>${cols}</a:tblGrid>`;\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\n\n/**\n * a:tblPr — Table properties (firstRow, bandRow, etc.).\n * Lazy: stores options, builds XML in toXml().\n */\nexport class TableProperties extends BaseXmlComponent {\n private readonly options?: {\n readonly firstRow?: boolean;\n readonly lastRow?: boolean;\n readonly bandRow?: boolean;\n readonly firstCol?: boolean;\n readonly lastCol?: boolean;\n readonly bandCol?: boolean;\n };\n\n public constructor(options?: {\n readonly firstRow?: boolean;\n readonly lastRow?: boolean;\n readonly bandRow?: boolean;\n readonly firstCol?: boolean;\n readonly lastCol?: boolean;\n readonly bandCol?: boolean;\n }) {\n super(\"a:tblPr\");\n this.options = options;\n }\n\n public override toXml(_context: Context): string {\n if (!this.options) return \"<a:tblPr/>\";\n const opts = this.options;\n const attrs: string[] = [];\n if (opts.firstRow !== undefined) attrs.push(`firstRow=\"${opts.firstRow ? 1 : 0}\"`);\n if (opts.lastRow !== undefined) attrs.push(`lastRow=\"${opts.lastRow ? 1 : 0}\"`);\n if (opts.bandRow !== undefined) attrs.push(`bandRow=\"${opts.bandRow ? 1 : 0}\"`);\n if (opts.firstCol !== undefined) attrs.push(`firstCol=\"${opts.firstCol ? 1 : 0}\"`);\n if (opts.lastCol !== undefined) attrs.push(`lastCol=\"${opts.lastCol ? 1 : 0}\"`);\n if (opts.bandCol !== undefined) attrs.push(`bandCol=\"${opts.bandCol ? 1 : 0}\"`);\n return attrs.length === 0 ? \"<a:tblPr/>\" : `<a:tblPr ${attrs.join(\" \")}/>`;\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\n\nimport { buildFill } from \"../drawingml/fill\";\nimport type { FillOptions } from \"../drawingml/fill\";\n\nexport interface CellBorderOptions {\n readonly width?: number;\n readonly color?: string;\n readonly dashStyle?: \"solid\" | \"dash\" | \"dashDot\" | \"lgDash\" | \"sysDot\" | \"sysDash\";\n}\n\nfunction buildBorderLine(name: string, options: CellBorderOptions): string {\n const attrs: string[] = [];\n if (options.width !== undefined) attrs.push(`w=\"${options.width}\"`);\n\n const children: string[] = [];\n if (options.color) {\n children.push(\n `<a:solidFill><a:srgbClr val=\"${options.color.replace(\"#\", \"\")}\"/></a:solidFill>`,\n );\n }\n if (options.dashStyle) {\n children.push(`<a:prstDash val=\"${options.dashStyle}\"/>`);\n }\n\n const attrStr = attrs.length > 0 ? ` ${attrs.join(\" \")}` : \"\";\n if (children.length === 0) return `<${name}${attrStr}/>`;\n return `<${name}${attrStr}>${children.join(\"\")}</${name}>`;\n}\n\n/**\n * a:tcPr — Table cell properties (borders + fill).\n */\nexport class TableCellProperties extends BaseXmlComponent {\n private readonly options?: {\n readonly fill?: FillOptions;\n readonly borders?: {\n readonly top?: CellBorderOptions;\n readonly bottom?: CellBorderOptions;\n readonly left?: CellBorderOptions;\n readonly right?: CellBorderOptions;\n };\n readonly verticalAlign?: \"t\" | \"ctr\" | \"b\";\n };\n\n public constructor(options?: {\n readonly fill?: FillOptions;\n readonly borders?: {\n readonly top?: CellBorderOptions;\n readonly bottom?: CellBorderOptions;\n readonly left?: CellBorderOptions;\n readonly right?: CellBorderOptions;\n };\n readonly verticalAlign?: \"t\" | \"ctr\" | \"b\";\n }) {\n super(\"a:tcPr\");\n this.options = options;\n }\n\n public override toXml(context: Context): string {\n const parts: string[] = [];\n const opts = this.options;\n\n if (opts?.verticalAlign) {\n parts.push(`anchor=\"${opts.verticalAlign}\"`);\n }\n\n if (opts?.borders) {\n if (opts.borders.left) parts.push(buildBorderLine(\"a:lnL\", opts.borders.left));\n if (opts.borders.right) parts.push(buildBorderLine(\"a:lnR\", opts.borders.right));\n if (opts.borders.top) parts.push(buildBorderLine(\"a:lnT\", opts.borders.top));\n if (opts.borders.bottom) parts.push(buildBorderLine(\"a:lnB\", opts.borders.bottom));\n }\n\n if (opts?.fill !== undefined) {\n const fillComp = buildFill(opts.fill);\n parts.push(fillComp.toXml(context));\n }\n\n if (parts.length === 0) return \"<a:tcPr/>\";\n\n // Check if first part is an attribute string (no <)\n const firstIsAttr = !parts[0].startsWith(\"<\");\n if (firstIsAttr) {\n const attrStr = parts[0];\n const children = parts.slice(1);\n if (children.length === 0) return `<a:tcPr ${attrStr}/>`;\n return `<a:tcPr ${attrStr}>${children.join(\"\")}</a:tcPr>`;\n }\n\n return `<a:tcPr>${parts.join(\"\")}</a:tcPr>`;\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\nimport { xsdTextAnchor } from \"@office-open/core\";\n\nimport type { FillOptions } from \"../drawingml/fill\";\nimport { Paragraph } from \"../shape/paragraph/paragraph\";\nimport type { ParagraphOptions } from \"../shape/paragraph/paragraph\";\nimport { TextRun } from \"../shape/paragraph/run\";\nimport { TableCellProperties, type CellBorderOptions } from \"./table-cell-properties\";\n\nexport type VerticalAlignment = \"top\" | \"center\" | \"bottom\" | \"justify\" | \"distribute\";\n\nexport interface TableCellOptions {\n readonly text?: string;\n readonly children?: readonly (BaseXmlComponent | ParagraphOptions | string)[];\n readonly fill?: FillOptions;\n readonly borders?: {\n readonly top?: CellBorderOptions;\n readonly bottom?: CellBorderOptions;\n readonly left?: CellBorderOptions;\n readonly right?: CellBorderOptions;\n };\n readonly columnSpan?: number;\n readonly rowSpan?: number;\n readonly verticalAlign?: VerticalAlignment;\n readonly margins?: {\n readonly top?: number;\n readonly bottom?: number;\n readonly left?: number;\n readonly right?: number;\n };\n}\n\n/**\n * a:tc — Table cell with text body and properties.\n * Lazy: stores options, builds XML string in toXml.\n */\nexport class TableCell extends BaseXmlComponent {\n private readonly options: TableCellOptions;\n private readonly paragraphs?: readonly BaseXmlComponent[];\n\n public constructor(options: TableCellOptions = {}) {\n super(\"a:tc\");\n this.options = options;\n this.paragraphs =\n options.children?.map((c) =>\n typeof c === \"string\"\n ? new Paragraph(c)\n : c instanceof BaseXmlComponent\n ? c\n : new Paragraph(c),\n ) ??\n (options.text !== undefined\n ? [\n new Paragraph({\n properties: {},\n children: [new TextRun({ text: options.text })],\n }),\n ]\n : undefined);\n }\n\n public override toXml(context: Context): string {\n const opts = this.options;\n const parts: string[] = [];\n\n // gridSpan / rowSpan attributes\n const tcAttrs: string[] = [];\n if (opts.columnSpan !== undefined && opts.columnSpan > 1)\n tcAttrs.push(`gridSpan=\"${opts.columnSpan}\"`);\n if (opts.rowSpan !== undefined && opts.rowSpan > 1) tcAttrs.push(`rowSpan=\"${opts.rowSpan}\"`);\n const tcAttrStr = tcAttrs.length > 0 ? ` ${tcAttrs.join(\" \")}` : \"\";\n\n // a:txBody\n const txParts: string[] = [];\n const margins = opts.margins;\n const bodyPrAttrs: string[] = [];\n if (margins?.top !== undefined) bodyPrAttrs.push(`tIns=\"${margins.top}\"`);\n if (margins?.bottom !== undefined) bodyPrAttrs.push(`bIns=\"${margins.bottom}\"`);\n if (margins?.left !== undefined) bodyPrAttrs.push(`lIns=\"${margins.left}\"`);\n if (margins?.right !== undefined) bodyPrAttrs.push(`rIns=\"${margins.right}\"`);\n const bodyPrStr = bodyPrAttrs.length > 0 ? ` ${bodyPrAttrs.join(\" \")}` : \"\";\n txParts.push(`<a:bodyPr${bodyPrStr}/>`);\n txParts.push(\"<a:lstStyle/>\");\n\n if (this.paragraphs) {\n for (const p of this.paragraphs) {\n txParts.push(p.toXml(context));\n }\n } else {\n txParts.push(\"<a:p/>\");\n }\n parts.push(`<a:txBody>${txParts.join(\"\")}</a:txBody>`);\n\n // a:tcPr (has fill needing context, uses toXml() internally)\n const tcPr = new TableCellProperties({\n fill: opts.fill,\n borders: opts.borders,\n verticalAlign: opts.verticalAlign\n ? (xsdTextAnchor.to(opts.verticalAlign) as \"t\" | \"ctr\" | \"b\")\n : undefined,\n });\n parts.push(tcPr.toXml(context));\n\n return `<a:tc${tcAttrStr}>${parts.join(\"\")}</a:tc>`;\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\n\nimport { TableCell, type TableCellOptions } from \"./table-cell\";\n\nexport interface TableRowOptions {\n readonly height?: number;\n readonly cells: readonly TableCellOptions[];\n}\n\n/**\n * a:tr — Table row containing cells.\n * Lazy: stores options, builds XML in toXml().\n */\nexport class TableRow extends BaseXmlComponent {\n private readonly options: TableRowOptions;\n\n public constructor(options: TableRowOptions) {\n super(\"a:tr\");\n this.options = options;\n }\n\n public override toXml(context: Context): string {\n const h = this.options.height ?? 0;\n const parts: string[] = [];\n for (const cell of this.options.cells) {\n parts.push(new TableCell(cell).toXml(context));\n }\n return `<a:tr h=\"${h}\">${parts.join(\"\")}</a:tr>`;\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\n\nimport type { CellBorderOptions } from \"./table-cell-properties\";\nimport { TableGrid } from \"./table-grid\";\nimport { TableProperties } from \"./table-properties\";\nimport { TableRow, type TableRowOptions } from \"./table-row\";\n\nexport interface DrawingTableOptions {\n readonly rows: readonly TableRowOptions[];\n readonly columnWidths?: readonly number[];\n readonly firstRow?: boolean;\n readonly lastRow?: boolean;\n readonly bandRow?: boolean;\n readonly firstCol?: boolean;\n readonly lastCol?: boolean;\n readonly bandCol?: boolean;\n readonly borders?: {\n readonly top?: CellBorderOptions;\n readonly bottom?: CellBorderOptions;\n readonly left?: CellBorderOptions;\n readonly right?: CellBorderOptions;\n };\n}\n\n/**\n * a:tbl — DrawingML table element.\n * Lazy: stores options, builds XML in toXml().\n */\nexport class DrawingTable extends BaseXmlComponent {\n private readonly options: DrawingTableOptions;\n\n public constructor(options: DrawingTableOptions) {\n super(\"a:tbl\");\n this.options = options;\n }\n\n public override toXml(context: Context): string {\n const opts = this.options;\n const parts: string[] = [];\n\n // a:tblPr\n const tblPr = new TableProperties({\n firstRow: opts.firstRow,\n lastRow: opts.lastRow,\n bandRow: opts.bandRow,\n firstCol: opts.firstCol,\n lastCol: opts.lastCol,\n bandCol: opts.bandCol,\n });\n parts.push(tblPr.toXml(context));\n\n // a:tblGrid\n const colWidths =\n opts.columnWidths && opts.columnWidths.length > 0\n ? opts.columnWidths\n : Array.from({ length: opts.rows[0]?.cells.length ?? 1 }, () => 0);\n parts.push(new TableGrid(colWidths).toXml(context));\n\n // a:tr — distribute table-level borders to edge cells\n const rowCount = opts.rows.length;\n for (let ri = 0; ri < rowCount; ri++) {\n const row = opts.rows[ri];\n const cells = this.distributeBorders(row, ri, rowCount, opts.borders);\n parts.push(new TableRow({ ...row, cells }).toXml(context));\n }\n\n return `<a:tbl>${parts.join(\"\")}</a:tbl>`;\n }\n\n /** Distribute table-level borders to edge cells only when needed. */\n private distributeBorders(\n row: TableRowOptions,\n ri: number,\n rowCount: number,\n tb: DrawingTableOptions[\"borders\"],\n ): TableRowOptions[\"cells\"] {\n if (!tb) return row.cells;\n const colCount = row.cells.length;\n return row.cells.map((cell, ci) => {\n const needTop = ri === 0 && !!tb.top && !cell.borders?.top;\n const needBottom = ri === rowCount - 1 && !!tb.bottom && !cell.borders?.bottom;\n const needLeft = ci === 0 && !!tb.left && !cell.borders?.left;\n const needRight = ci === colCount - 1 && !!tb.right && !cell.borders?.right;\n if (!needTop && !needBottom && !needLeft && !needRight) return cell;\n const borders = {\n ...cell.borders,\n ...(needTop && { top: tb.top }),\n ...(needBottom && { bottom: tb.bottom }),\n ...(needLeft && { left: tb.left }),\n ...(needRight && { right: tb.right }),\n };\n return { ...cell, borders };\n });\n }\n}\n","import { Transform2D } from \"@file/drawingml/transform-2d\";\nimport { XmlComponent } from \"@file/xml-components\";\nimport { emuPosition } from \"@util/position\";\n\nimport { Graphic } from \"./graphic\";\nimport { GraphicFrameNonVisual } from \"./graphic-frame-non-visual\";\nimport type { DrawingTableOptions } from \"./table\";\nimport { DrawingTable } from \"./table\";\n\nexport interface TableOptions extends DrawingTableOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n}\n\n/**\n * p:graphicFrame — Slide-level graphic frame wrapping a table.\n *\n * x/y/width/height accept pixel values, converted to EMUs internally.\n */\nexport class Table extends XmlComponent {\n public constructor(options: TableOptions) {\n super(\"p:graphicFrame\");\n\n this.root.push(new GraphicFrameNonVisual());\n\n this.root.push(\n new Transform2D(\n {\n ...emuPosition(options),\n },\n \"p\",\n ),\n );\n\n const table = new DrawingTable(options);\n this.root.push(new Graphic(table));\n }\n}\n","import { Chart } from \"@file/chart/chart-frame\";\nimport type { MasterChild } from \"@file/file\";\nimport { AudioFrame } from \"@file/media/audio-frame\";\nimport { VideoFrame } from \"@file/media/video-frame\";\nimport { Picture } from \"@file/picture/picture\";\nimport { GroupShape } from \"@file/shape/group-shape\";\nimport { ConnectorShape, LineShape } from \"@file/shape/line-shape\";\nimport { Shape } from \"@file/shape/shape\";\nimport type { SlideChild } from \"@file/slide/slide-child\";\nimport { SmartArt } from \"@file/smartart/smartart-frame\";\nimport { Table } from \"@file/table/table-frame\";\nimport { BaseXmlComponent } from \"@file/xml-components\";\n\nexport function coerceChild(child: SlideChild): BaseXmlComponent {\n if (child instanceof BaseXmlComponent) return child;\n if (\"shape\" in child) return new Shape(child.shape);\n if (\"picture\" in child) return new Picture(child.picture);\n if (\"table\" in child) return new Table(child.table);\n if (\"chart\" in child) return new Chart(child.chart);\n if (\"line\" in child) return new LineShape(child.line);\n if (\"connector\" in child) return new ConnectorShape(child.connector);\n if (\"video\" in child) return new VideoFrame(child.video);\n if (\"audio\" in child) return new AudioFrame(child.audio);\n if (\"group\" in child) return new GroupShape(child.group);\n if (\"smartart\" in child) return new SmartArt(child.smartart);\n throw new Error(\"Unknown slide child type\");\n}\n\nexport function coerceMasterChild(child: MasterChild): BaseXmlComponent {\n if (child instanceof BaseXmlComponent) return child;\n if (\"shape\" in child) return new Shape(child.shape);\n throw new Error(\"Unknown master child type\");\n}\n","import type { LayoutDefinition, MasterChild } from \"@file/file\";\nimport type { MasterPlaceholderPosition } from \"@file/slide-master/slide-master\";\nimport { coerceMasterChild } from \"@file/slide/coerce\";\nimport type { Context } from \"@file/xml-components\";\nimport { ImportedXmlComponent } from \"@file/xml-components\";\nimport { convertPixelsToEmu } from \"@office-open/core\";\n\nexport type SlideLayoutType =\n | \"blank\"\n | \"title\"\n | \"tx\"\n | \"twoColTx\"\n | \"titleOnly\"\n | \"obj\"\n | \"secHead\"\n | \"chart\"\n | \"tbl\"\n | \"picTx\"\n | \"twoObj\"\n | \"twoTxTwoObj\"\n | \"objTx\"\n | \"vertTx\"\n | \"vertTitleAndTx\";\n\nconst NS = `xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"`;\n\nconst SP_TREE_HEADER = `<p:nvGrpSpPr><p:cNvPr id=\"1\" name=\"\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/><a:chOff x=\"0\" y=\"0\"/><a:chExt cx=\"0\" cy=\"0\"/></a:xfrm></p:grpSpPr>`;\n\n// 16:9 reference slide width\nconst SW_REF = 12192000;\nconst sx = (refX: number, sw: number) => Math.round((refX * sw) / SW_REF);\n\n// ── Placeholder XML builders ──\n\n// No xfrm — inherited from master\nfunction dtPlaceholder(id: number): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Date Placeholder ${id - 1}\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"dt\" sz=\"half\" idx=\"10\"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id=\"{5BCAD085-E8A6-8845-BD4E-CB4CCA059FC4}\" type=\"datetimeFigureOut\"><a:rPr lang=\"en-US\" smtClean=\"0\"/><a:t>1/27/13</a:t></a:fld><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\nfunction ftrPlaceholder(id: number): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Footer Placeholder ${id - 1}\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"ftr\" sz=\"quarter\" idx=\"11\"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\nfunction sldNumPlaceholder(id: number): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Slide Number Placeholder ${id - 1}\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"sldNum\" sz=\"quarter\" idx=\"12\"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id=\"{C1FF6DA9-008F-8B48-92A6-B652298478BF}\" type=\"slidenum\"><a:rPr lang=\"en-US\" smtClean=\"0\"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\n// title — no idx, no xfrm (inherited)\nfunction titlePlaceholder(id: number): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Title 1\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"title\"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\n// Body (generic) idx, no xfrm (inherited)\nfunction bodyPlaceholder(id: number, idx: number): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Content Placeholder ${id - 1}\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph idx=\"${idx}\"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\n// Body with xfrm (positioned)\nfunction bodyPlaceholderAt(\n id: number,\n idx: number,\n x: number,\n y: number,\n cx: number,\n cy: number,\n): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Content Placeholder ${id - 1}\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph idx=\"${idx}\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\n// Body with explicit type=\"body\" and xfrm\nfunction typedBodyPlaceholder(\n id: number,\n idx: number,\n x: number,\n y: number,\n cx: number,\n cy: number,\n): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Text Placeholder ${id - 1}\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"body\" idx=\"${idx}\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\n// Title with xfrm\nfunction titlePlaceholderAt(id: number, x: number, y: number, cx: number, cy: number): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Title 1\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"title\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\n// ctrTitle — centered title for title layout\nfunction ctrTitlePlaceholder(id: number, x: number, y: number, cx: number, cy: number): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Title 1\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"ctrTitle\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr anchor=\"b\"/><a:lstStyle><a:lvl1pPr algn=\"ctr\"><a:defRPr sz=\"6000\"/></a:lvl1pPr></a:lstStyle><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\n// subTitle for title layout\nfunction subTitlePlaceholder(id: number, x: number, y: number, cx: number, cy: number): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Subtitle 2\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"subTitle\" idx=\"1\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr marL=\"0\" indent=\"0\" algn=\"ctr\"><a:buNone/><a:defRPr sz=\"2400\"/></a:lvl1pPr></a:lstStyle><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\n// Pic placeholder\nfunction picPlaceholder(\n id: number,\n idx: number,\n x: number,\n y: number,\n cx: number,\n cy: number,\n): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Picture Placeholder ${id - 1}\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"pic\" idx=\"${idx}\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\n// ── Layout definitions (16:9 reference positions) ──\n\ninterface LayoutDef {\n type: SlideLayoutType;\n name: string;\n buildShapes: (sw: number) => string;\n}\n\nconst LAYOUT_DEFS: Record<SlideLayoutType, LayoutDef> = {\n // 1. title — ctrTitle + subTitle\n title: {\n type: \"title\",\n name: \"Title Slide\",\n buildShapes: (sw) =>\n ctrTitlePlaceholder(2, sx(1524000, sw), 1122363, sx(9144000, sw), 2387600) +\n subTitlePlaceholder(3, sx(1524000, sw), 3602038, sx(9144000, sw), 1655762),\n },\n // 2. obj — title + body (generic content)\n obj: {\n type: \"obj\",\n name: \"Title and Content\",\n buildShapes: () => titlePlaceholder(2) + bodyPlaceholder(3, 1),\n },\n // 3. secHead — title + body (both positioned)\n secHead: {\n type: \"secHead\",\n name: \"Section Header\",\n buildShapes: (sw) =>\n titlePlaceholderAt(2, sx(831850, sw), 1709738, sx(10515600, sw), 2852737) +\n typedBodyPlaceholder(3, 1, sx(831850, sw), 4589463, sx(10515600, sw), 1500187),\n },\n // 4. twoObj — title + 2 body columns\n twoObj: {\n type: \"twoObj\",\n name: \"Two Content\",\n buildShapes: (sw) =>\n titlePlaceholder(2) +\n bodyPlaceholderAt(3, 1, sx(838200, sw), 1825625, sx(5181600, sw), 4351338) +\n bodyPlaceholderAt(4, 2, sx(6172200, sw), 1825625, sx(5181600, sw), 4351338),\n },\n // 5. twoTxTwoObj — title + 4 quadrants (2 text, 2 content)\n twoTxTwoObj: {\n type: \"twoTxTwoObj\",\n name: \"Comparison\",\n buildShapes: (sw) =>\n titlePlaceholderAt(2, sx(839788, sw), 365125, sx(10515600, sw), 1325563) +\n typedBodyPlaceholder(3, 1, sx(839788, sw), 1681163, sx(5157787, sw), 823912) +\n bodyPlaceholderAt(4, 2, sx(839788, sw), 2505075, sx(5157787, sw), 3684588) +\n typedBodyPlaceholder(5, 3, sx(6172200, sw), 1681163, sx(5183188, sw), 823912) +\n bodyPlaceholderAt(6, 4, sx(6172200, sw), 2505075, sx(5183188, sw), 3684588),\n },\n // 6. titleOnly — title only\n titleOnly: {\n type: \"titleOnly\",\n name: \"Title Only\",\n buildShapes: () => titlePlaceholder(2),\n },\n // 7. blank — no content placeholders\n blank: {\n type: \"blank\",\n name: \"Blank\",\n buildShapes: () => \"\",\n },\n // 8. objTx — title + body + text (object and text)\n objTx: {\n type: \"objTx\",\n name: \"Content with Caption\",\n buildShapes: (sw) =>\n titlePlaceholderAt(2, sx(839788, sw), 457200, sx(3932237, sw), 1600200) +\n bodyPlaceholderAt(3, 1, sx(5183188, sw), 987425, sx(6172200, sw), 4873625) +\n typedBodyPlaceholder(4, 2, sx(839788, sw), 2057400, sx(3932237, sw), 3811588),\n },\n // 9. picTx — title + pic + text\n picTx: {\n type: \"picTx\",\n name: \"Picture with Caption\",\n buildShapes: (sw) =>\n titlePlaceholderAt(2, sx(839788, sw), 457200, sx(3932237, sw), 1600200) +\n picPlaceholder(3, 1, sx(5183188, sw), 987425, sx(6172200, sw), 4873625) +\n typedBodyPlaceholder(4, 2, sx(839788, sw), 2057400, sx(3932237, sw), 3811588),\n },\n // 10. vertTx — title + body (vertical text)\n vertTx: {\n type: \"vertTx\",\n name: \"Vertical Text\",\n buildShapes: () =>\n titlePlaceholder(2) +\n `<p:sp><p:nvSpPr><p:cNvPr id=\"3\" name=\"Text Placeholder 2\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"body\" idx=\"1\"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`,\n },\n // 11. vertTitleAndTx — vertical title + body\n vertTitleAndTx: {\n type: \"vertTitleAndTx\",\n name: \"Vertical Title and Text\",\n buildShapes: (sw) =>\n titlePlaceholderAt(2, sx(8724900, sw), 365125, sx(2628900, sw), 5811838) +\n typedBodyPlaceholder(3, 1, sx(838200, sw), 365125, sx(7734300, sw), 5811838),\n },\n // Aliases / simplified versions\n tx: {\n type: \"tx\",\n name: \"Title and Text\",\n buildShapes: () => titlePlaceholder(2) + bodyPlaceholder(3, 1),\n },\n chart: {\n type: \"chart\",\n name: \"Content with Caption\",\n buildShapes: () => titlePlaceholder(2) + bodyPlaceholder(3, 1),\n },\n tbl: {\n type: \"tbl\",\n name: \"Content with Caption\",\n buildShapes: () => titlePlaceholder(2) + bodyPlaceholder(3, 1),\n },\n twoColTx: {\n type: \"twoColTx\",\n name: \"Two Content\",\n buildShapes: (sw) =>\n titlePlaceholder(2) +\n bodyPlaceholderAt(3, 1, sx(838200, sw), 1825625, sx(5181600, sw), 4351338) +\n bodyPlaceholderAt(4, 2, sx(6172200, sw), 1825625, sx(5181600, sw), 4351338),\n },\n};\n\nfunction buildLayoutXml(layoutType: SlideLayoutType, slideWidth: number = SW_REF): string {\n const def = LAYOUT_DEFS[layoutType];\n const contentShapes = def.buildShapes(slideWidth);\n // Count content shapes to determine starting ID for footer placeholders\n const contentCount = contentShapes ? (contentShapes.match(/<p:sp>/g) || []).length : 0;\n const footerStartId = 2 + contentCount;\n\n const footerShapes =\n dtPlaceholder(footerStartId) +\n ftrPlaceholder(footerStartId + 1) +\n sldNumPlaceholder(footerStartId + 2);\n\n return `<p:sldLayout ${NS} type=\"${layoutType}\" preserve=\"1\"><p:cSld name=\"${def.name}\"><p:spTree>${SP_TREE_HEADER}${contentShapes}${footerShapes}</p:spTree></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>`;\n}\n\n// ── Custom layout builder ──\n\nfunction posToEmu(pos: MasterPlaceholderPosition) {\n return {\n x: convertPixelsToEmu(pos.x),\n y: convertPixelsToEmu(pos.y),\n cx: convertPixelsToEmu(pos.width),\n cy: convertPixelsToEmu(pos.height),\n };\n}\n\nfunction positionedTitlePlaceholder(\n id: number,\n x: number,\n y: number,\n cx: number,\n cy: number,\n): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Title 1\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"title\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\nfunction positionedSubtitlePlaceholder(\n id: number,\n x: number,\n y: number,\n cx: number,\n cy: number,\n): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Subtitle 2\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"subTitle\" idx=\"1\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\nfunction positionedBodyPlaceholder(\n id: number,\n idx: number,\n x: number,\n y: number,\n cx: number,\n cy: number,\n): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Content Placeholder ${id - 1}\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph idx=\"${idx}\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\nfunction positionedDatePlaceholder(\n id: number,\n x: number,\n y: number,\n cx: number,\n cy: number,\n): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Date Placeholder ${id - 1}\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"dt\" sz=\"half\" idx=\"10\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id=\"{5BCAD085-E8A6-8845-BD4E-CB4CCA059FC4}\" type=\"datetimeFigureOut\"><a:rPr lang=\"en-US\" smtClean=\"0\"/><a:t>1/27/13</a:t></a:fld><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\nfunction positionedFooterPlaceholder(\n id: number,\n x: number,\n y: number,\n cx: number,\n cy: number,\n): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Footer Placeholder ${id - 1}\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"ftr\" sz=\"quarter\" idx=\"11\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\nfunction positionedSldNumPlaceholder(\n id: number,\n x: number,\n y: number,\n cx: number,\n cy: number,\n): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"Slide Number Placeholder ${id - 1}\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"sldNum\" sz=\"quarter\" idx=\"12\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id=\"{C1FF6DA9-008F-8B48-92A6-B652298478BF}\" type=\"slidenum\"><a:rPr lang=\"en-US\" smtClean=\"0\"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>`;\n}\n\nfunction buildChildrenXml(children?: readonly MasterChild[]): string {\n if (!children || children.length === 0) return \"\";\n const ctx: Context = { stack: [] };\n let result = \"\";\n for (const child of children) {\n const xmlStr = coerceMasterChild(child).toXml(ctx);\n if (xmlStr) result += xmlStr;\n }\n return result;\n}\n\nfunction buildCustomLayoutXml(def: LayoutDefinition): string {\n const ph = def.placeholders ?? {};\n const layoutType = def.type ?? \"blank\";\n const displayName = def.name ?? LAYOUT_DEFS[layoutType]?.name ?? layoutType;\n\n const shapes: string[] = [];\n let nextId = 2;\n\n // Content placeholders\n if (ph.title !== false) {\n const titlePos = ph.title ? posToEmu(ph.title) : null;\n if (titlePos) {\n shapes.push(\n positionedTitlePlaceholder(nextId++, titlePos.x, titlePos.y, titlePos.cx, titlePos.cy),\n );\n } else {\n shapes.push(titlePlaceholder(nextId++));\n }\n }\n\n if (ph.subtitle !== false && ph.subtitle !== undefined) {\n const subPos = posToEmu(ph.subtitle);\n shapes.push(positionedSubtitlePlaceholder(nextId++, subPos.x, subPos.y, subPos.cx, subPos.cy));\n }\n\n if (ph.body !== false && ph.body !== undefined) {\n const bodyPos = ph.body ? posToEmu(ph.body) : null;\n if (bodyPos) {\n shapes.push(\n positionedBodyPlaceholder(nextId++, 1, bodyPos.x, bodyPos.y, bodyPos.cx, bodyPos.cy),\n );\n } else {\n shapes.push(bodyPlaceholder(nextId++, 1));\n }\n }\n\n // Footer placeholders\n if (ph.date !== false && ph.date !== undefined) {\n const datePos = ph.date ? posToEmu(ph.date) : null;\n if (datePos) {\n shapes.push(\n positionedDatePlaceholder(nextId++, datePos.x, datePos.y, datePos.cx, datePos.cy),\n );\n } else {\n shapes.push(dtPlaceholder(nextId++));\n }\n }\n\n if (ph.footer !== false && ph.footer !== undefined) {\n const ftrPos = ph.footer ? posToEmu(ph.footer) : null;\n if (ftrPos) {\n shapes.push(positionedFooterPlaceholder(nextId++, ftrPos.x, ftrPos.y, ftrPos.cx, ftrPos.cy));\n } else {\n shapes.push(ftrPlaceholder(nextId++));\n }\n }\n\n if (ph.slideNumber !== false && ph.slideNumber !== undefined) {\n const sldPos = ph.slideNumber ? posToEmu(ph.slideNumber) : null;\n if (sldPos) {\n shapes.push(positionedSldNumPlaceholder(nextId++, sldPos.x, sldPos.y, sldPos.cx, sldPos.cy));\n } else {\n shapes.push(sldNumPlaceholder(nextId++));\n }\n }\n\n // Children shapes — shift ids\n const childrenXml = buildChildrenXml(def.children);\n if (childrenXml) {\n const offset = nextId - 1;\n shapes.push(childrenXml.replace(/ id=\"(\\d+)\"/g, (_, n) => ` id=\"${parseInt(n) + offset}\"`));\n }\n\n return `<p:sldLayout ${NS} type=\"${layoutType}\" preserve=\"1\"><p:cSld name=\"${displayName}\"><p:spTree>${SP_TREE_HEADER}${shapes.join(\"\")}</p:spTree></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>`;\n}\n\nexport class SlideLayout extends ImportedXmlComponent {\n private static cache = new Map<string, ImportedXmlComponent>();\n public readonly layoutType: SlideLayoutType;\n private readonly cacheKey: string;\n\n public constructor(\n layoutType: SlideLayoutType = \"blank\",\n slideWidth: number = SW_REF,\n definition?: LayoutDefinition,\n ) {\n super(\"p:sldLayout\");\n this.layoutType = layoutType;\n\n const hasCustom =\n definition &&\n (definition.placeholders !== undefined ||\n (definition.children !== undefined && definition.children.length > 0));\n\n if (hasCustom) {\n // Custom layouts are not cached (may contain dynamic children)\n this.cacheKey = `custom:${layoutType}:${slideWidth}:${Date.now()}:${Math.random()}`;\n SlideLayout.cache.set(\n this.cacheKey,\n ImportedXmlComponent.fromXmlString(buildCustomLayoutXml(definition!)),\n );\n } else {\n this.cacheKey = `${layoutType}:${slideWidth}`;\n if (!SlideLayout.cache.has(this.cacheKey)) {\n SlideLayout.cache.set(\n this.cacheKey,\n ImportedXmlComponent.fromXmlString(buildLayoutXml(layoutType, slideWidth)),\n );\n }\n }\n }\n\n public override toXml(context: Context): string {\n return SlideLayout.cache.get(this.cacheKey)!.toXml(context);\n }\n}\n\nexport class DefaultSlideLayout extends SlideLayout {\n public constructor() {\n super(\"blank\");\n }\n}\n","import type { BackgroundOptions } from \"@file/background/background\";\nimport type { MasterChild } from \"@file/file\";\nimport type { SlideHeaderFooterOptions } from \"@file/header-footer/header-footer\";\nimport { coerceMasterChild } from \"@file/slide/coerce\";\nimport type { Context } from \"@file/xml-components\";\nimport { ImportedXmlComponent } from \"@file/xml-components\";\nimport { convertPixelsToEmu } from \"@office-open/core\";\n\nexport interface MasterPlaceholderPosition {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n}\n\nexport interface MasterPlaceholderOptions {\n readonly title?: boolean | MasterPlaceholderPosition;\n readonly body?: boolean | MasterPlaceholderPosition;\n readonly date?: boolean | MasterPlaceholderPosition;\n readonly footer?: boolean | MasterPlaceholderPosition;\n readonly slideNumber?: boolean | MasterPlaceholderPosition;\n}\n\nexport interface SlideMasterOptions {\n readonly background?: BackgroundOptions;\n readonly children?: readonly MasterChild[];\n readonly placeholders?: MasterPlaceholderOptions;\n}\n\n// Reference positions (16:9 master, slideWidth = 12192000 EMU)\nconst SW_REF = 12192000;\nconst sx = (refX: number, sw: number) => Math.round((refX * sw) / SW_REF);\n\nconst REF_TITLE = { x: 838200, y: 365125, cx: 10515600, cy: 1325563 };\nconst REF_BODY = { x: 838200, y: 1825625, cx: 10515600, cy: 4351338 };\nconst REF_DATE = { x: 838200, y: 6356350, cx: 2743200, cy: 365125 };\nconst REF_FOOTER = { x: 4038600, y: 6356350, cx: 4114800, cy: 365125 };\nconst REF_SLDNUM = { x: 8610600, y: 6356350, cx: 2743200, cy: 365125 };\n\nfunction toEmu(pos: MasterPlaceholderPosition) {\n return {\n x: convertPixelsToEmu(pos.x),\n y: convertPixelsToEmu(pos.y),\n cx: convertPixelsToEmu(pos.width),\n cy: convertPixelsToEmu(pos.height),\n };\n}\n\nfunction resolvePos(\n opt: boolean | MasterPlaceholderPosition | undefined,\n ref: { x: number; y: number; cx: number; cy: number },\n): { x: number; y: number; cx: number; cy: number } | null {\n if (opt === false) return null;\n if (opt === undefined || opt === true) return ref;\n return toEmu(opt);\n}\n\nfunction phSp(\n id: number,\n name: string,\n phAttrs: string,\n x: number,\n y: number,\n cx: number,\n cy: number,\n bodyContent: string,\n): string {\n return `<p:sp><p:nvSpPr><p:cNvPr id=\"${id}\" name=\"${name}\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph ${phAttrs}/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></p:spPr><p:txBody>${bodyContent}</p:txBody></p:sp>`;\n}\n\nconst BODY_DEFAULT = `<a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p>`;\n\nfunction footerBody(algn: string, fldType: string, fldId: string, fldText: string): string {\n const fld =\n fldType && fldId\n ? `<a:fld id=\"${fldId}\" type=\"${fldType}\"><a:rPr lang=\"en-US\" smtClean=\"0\"/><a:t>${fldText}</a:t></a:fld>`\n : \"\";\n return `<a:bodyPr/><a:lstStyle><a:lvl1pPr algn=\"${algn}\"><a:defRPr sz=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"><a:tint val=\"75000\"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl1pPr></a:lstStyle><a:p>${fld}<a:endParaRPr lang=\"en-US\"/></a:p>`;\n}\n\nfunction buildBackgroundXml(bg?: BackgroundOptions): string {\n if (!bg) return `<p:bgRef idx=\"1001\"><a:schemeClr val=\"bg1\"/></p:bgRef>`;\n const { Background } = require(\"@file/background/background\") as {\n Background: new (o?: BackgroundOptions) => { toXml(ctx: Context): string };\n };\n const bgObj = new Background(bg);\n const full = bgObj.toXml({ stack: [] } as Context);\n // Strip the outer <p:bg> since the caller already provides the wrapper.\n return full.replace(/^<p:bg[^>]*>/, \"\").replace(/<\\/p:bg>$/, \"\");\n}\n\nfunction buildChildrenXml(children?: readonly MasterChild[]): string {\n if (!children || children.length === 0) return \"\";\n const ctx: Context = { stack: [] };\n let result = \"\";\n for (const child of children) {\n const xmlStr = coerceMasterChild(child).toXml(ctx);\n if (xmlStr) result += xmlStr;\n }\n return result;\n}\n\nfunction buildSlideMasterXml(\n layoutCount: number,\n _headerFooter?: SlideHeaderFooterOptions,\n masterOptions?: SlideMasterOptions,\n slideWidth: number = SW_REF,\n masterIndex: number = 0,\n): string {\n const hfXml = `<p:hf dt=\"0\" hdr=\"0\" ftr=\"0\" sldNum=\"0\"/>`;\n const ph = masterOptions?.placeholders ?? {};\n\n // Layout IDs must be globally unique across all masters.\n // Master ID = 2147483648 + masterIndex * 12; layouts start at masterId + 1.\n const layoutIdBase = 2147483648 + masterIndex * 12 + 1;\n const layoutIdEntries: string[] = [];\n for (let i = 0; i < layoutCount; i++) {\n layoutIdEntries.push(`<p:sldLayoutId id=\"${layoutIdBase + i}\" r:id=\"rId${i + 1}\"/>`);\n }\n\n // Scaled reference positions (x/cx scaled, y/cy fixed)\n const sRef = (r: { x: number; y: number; cx: number; cy: number }) => ({\n x: sx(r.x, slideWidth),\n y: r.y,\n cx: sx(r.cx, slideWidth),\n cy: r.cy,\n });\n\n // Build placeholders\n const shapes: string[] = [];\n let nextId = 2;\n\n const titlePos = resolvePos(ph.title, sRef(REF_TITLE));\n if (titlePos) {\n shapes.push(\n phSp(\n nextId++,\n \"Title Placeholder 1\",\n 'type=\"title\"',\n titlePos.x,\n titlePos.y,\n titlePos.cx,\n titlePos.cy,\n BODY_DEFAULT,\n ),\n );\n }\n\n const bodyPos = resolvePos(ph.body, sRef(REF_BODY));\n if (bodyPos) {\n shapes.push(\n phSp(\n nextId++,\n \"Text Placeholder 2\",\n 'type=\"body\" idx=\"1\"',\n bodyPos.x,\n bodyPos.y,\n bodyPos.cx,\n bodyPos.cy,\n BODY_DEFAULT,\n ),\n );\n }\n\n const datePos = resolvePos(ph.date, sRef(REF_DATE));\n if (datePos) {\n shapes.push(\n phSp(\n nextId++,\n \"Date Placeholder 3\",\n 'type=\"dt\" sz=\"half\" idx=\"2\"',\n datePos.x,\n datePos.y,\n datePos.cx,\n datePos.cy,\n footerBody(\"l\", \"datetimeFigureOut\", \"{5BCAD085-E8A6-8845-BD4E-CB4CCA059FC4}\", \"1/27/13\"),\n ),\n );\n }\n\n const footerPos = resolvePos(ph.footer, sRef(REF_FOOTER));\n if (footerPos) {\n shapes.push(\n phSp(\n nextId++,\n \"Footer Placeholder 4\",\n 'type=\"ftr\" sz=\"quarter\" idx=\"3\"',\n footerPos.x,\n footerPos.y,\n footerPos.cx,\n footerPos.cy,\n footerBody(\"ctr\", \"\", \"\", \"\"),\n ),\n );\n }\n\n const sldNumPos = resolvePos(ph.slideNumber, sRef(REF_SLDNUM));\n if (sldNumPos) {\n shapes.push(\n phSp(\n nextId++,\n \"Slide Number Placeholder 5\",\n 'type=\"sldNum\" sz=\"quarter\" idx=\"4\"',\n sldNumPos.x,\n sldNumPos.y,\n sldNumPos.cx,\n sldNumPos.cy,\n footerBody(\"r\", \"slidenum\", \"{C1FF6DA9-008F-8B48-92A6-B652298478BF}\", \"‹#›\"),\n ),\n );\n }\n\n // Custom children shapes — shift ids to avoid conflicts with placeholder ids\n const childrenXml = buildChildrenXml(masterOptions?.children);\n if (childrenXml) {\n const offset = nextId - 1;\n shapes.push(childrenXml.replace(/ id=\"(\\d+)\"/g, (_, n) => ` id=\"${parseInt(n) + offset}\"`));\n }\n\n // Background\n const bgInnerXml = buildBackgroundXml(masterOptions?.background);\n\n return `<p:sldMaster xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"><p:cSld><p:bg>${bgInnerXml}</p:bg><p:spTree><p:nvGrpSpPr><p:cNvPr id=\"1\" name=\"\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/><a:chOff x=\"0\" y=\"0\"/><a:chExt cx=\"0\" cy=\"0\"/></a:xfrm></p:grpSpPr>${shapes.join(\"\")}</p:spTree></p:cSld><p:clrMap bg1=\"lt1\" tx1=\"dk1\" bg2=\"lt2\" tx2=\"dk2\" accent1=\"accent1\" accent2=\"accent2\" accent3=\"accent3\" accent4=\"accent4\" accent5=\"accent5\" accent6=\"accent6\" hlink=\"hlink\" folHlink=\"folHlink\"/><p:sldLayoutIdLst>${layoutIdEntries.join(\"\")}</p:sldLayoutIdLst>${hfXml}<p:txStyles><p:titleStyle><a:lvl1pPr algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc><a:spcBef><a:spcPct val=\"0\"/></a:spcBef><a:buNone/><a:defRPr sz=\"4400\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mj-lt\"/><a:ea typeface=\"+mj-ea\"/><a:cs typeface=\"+mj-cs\"/></a:defRPr></a:lvl1pPr></p:titleStyle><p:bodyStyle><a:lvl1pPr marL=\"228600\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc><a:spcBef><a:spcPct val=\"0\"/></a:spcBef><a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"•\"/><a:defRPr sz=\"2800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl1pPr><a:lvl2pPr marL=\"685800\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc><a:spcBef><a:spcPts val=\"500\"/></a:spcBef><a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"•\"/><a:defRPr sz=\"2400\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl2pPr><a:lvl3pPr marL=\"1143000\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc><a:spcBef><a:spcPts val=\"500\"/></a:spcBef><a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"•\"/><a:defRPr sz=\"2000\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl3pPr><a:lvl4pPr marL=\"1600200\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc><a:spcBef><a:spcPts val=\"500\"/></a:spcBef><a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"•\"/><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl4pPr><a:lvl5pPr marL=\"2057400\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc><a:spcBef><a:spcPts val=\"500\"/></a:spcBef><a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"•\"/><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl5pPr><a:lvl6pPr marL=\"2514600\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc><a:spcBef><a:spcPts val=\"500\"/></a:spcBef><a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"•\"/><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl6pPr><a:lvl7pPr marL=\"2971800\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc><a:spcBef><a:spcPts val=\"500\"/></a:spcBef><a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"•\"/><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl7pPr><a:lvl8pPr marL=\"3429000\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc><a:spcBef><a:spcPts val=\"500\"/></a:spcBef><a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"•\"/><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl8pPr><a:lvl9pPr marL=\"3886200\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc><a:spcBef><a:spcPts val=\"500\"/></a:spcBef><a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"•\"/><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl9pPr></p:bodyStyle><p:otherStyle><a:defPPr><a:defRPr/></a:defPPr><a:lvl1pPr marL=\"0\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl1pPr><a:lvl2pPr marL=\"457200\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl2pPr><a:lvl3pPr marL=\"914400\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl3pPr><a:lvl4pPr marL=\"1371600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl4pPr><a:lvl5pPr marL=\"1828800\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl5pPr><a:lvl6pPr marL=\"2286000\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl6pPr><a:lvl7pPr marL=\"2743200\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl7pPr><a:lvl8pPr marL=\"3200400\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl8pPr><a:lvl9pPr marL=\"3657600\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl9pPr></p:otherStyle></p:txStyles></p:sldMaster>`;\n}\n\nexport class DefaultSlideMaster extends ImportedXmlComponent {\n private static cache = new Map<string, ImportedXmlComponent>();\n private readonly cacheKey: string;\n\n public constructor(\n layoutCount: number = 1,\n headerFooter?: SlideHeaderFooterOptions,\n masterOptions?: SlideMasterOptions,\n slideWidth: number = SW_REF,\n masterIndex: number = 0,\n ) {\n super(\"p:sldMaster\");\n this.cacheKey = `${layoutCount}:${masterOptions ? JSON.stringify(masterOptions) : \"\"}:${slideWidth}:${masterIndex}`;\n if (!DefaultSlideMaster.cache.has(this.cacheKey)) {\n DefaultSlideMaster.cache.set(\n this.cacheKey,\n ImportedXmlComponent.fromXmlString(\n buildSlideMasterXml(layoutCount, headerFooter, masterOptions, slideWidth, masterIndex),\n ),\n );\n }\n }\n\n public override toXml(context: Context): string {\n return DefaultSlideMaster.cache.get(this.cacheKey)!.toXml(context);\n }\n}\n","import { BuilderElement, XmlComponent, stringContainerObj } from \"@file/xml-components\";\n\nimport type {\n AnimationClass,\n AnimationType,\n EmphasisType,\n AnimationOptions,\n PathAnimationType,\n} from \"./types\";\n\n// --- Preset ID mappings ---\n\nconst ENTR_PRESET_IDS: Record<AnimationType, number> = {\n appear: 1,\n fade: 10,\n fly: 2,\n wipe: 22,\n dissolve: 34,\n split: 21,\n blinds: 25,\n checker: 26,\n randomBars: 24,\n wheel: 27,\n zoom: 10,\n cover: 28,\n push: 19,\n strips: 23,\n};\n\nconst EXIT_PRESET_IDS: Record<AnimationType, number> = {\n appear: 53,\n fade: 59,\n fly: 51,\n wipe: 72,\n dissolve: 84,\n split: 71,\n blinds: 75,\n checker: 76,\n randomBars: 74,\n wheel: 77,\n zoom: 60,\n cover: 78,\n push: 69,\n strips: 73,\n};\n\nconst EMPH_PRESET_IDS: Record<EmphasisType, number> = {\n growShrink: 53,\n spin: 54,\n growWithTurn: 56,\n colorChange: 29,\n transparency: 57,\n boldFlash: 50,\n wave: 55,\n pulse: 58,\n};\n\nconst PATH_PRESET_IDS: Record<PathAnimationType, number> = {\n customPath: 200,\n arc: 201,\n bounce: 202,\n circle: 203,\n curve: 204,\n figureEight: 205,\n line: 206,\n loop: 207,\n};\n\nconst DIRECTION_SUBTYPES: Record<string, number> = {\n left: 4,\n right: 8,\n up: 2,\n down: 1,\n horizontal: 16,\n vertical: 32,\n};\n\nconst FILTER_MAP: Record<string, string> = {\n fade: \"fade\",\n fly: \"fly\",\n wipe: \"wipe\",\n dissolve: \"dissolve\",\n split: \"split\",\n blinds: \"blinds\",\n checker: \"checkerboard\",\n randomBars: \"randombars\",\n wheel: \"wheel\",\n zoom: \"zoom\",\n cover: \"cover\",\n push: \"push\",\n strips: \"strips\",\n};\n\nconst DIRECTION_FILTER: Record<string, Record<string, string>> = {\n fly: { left: \"fromLeft\", right: \"fromRight\", up: \"fromTop\", down: \"fromBottom\" },\n wipe: { left: \"right\", right: \"left\", up: \"down\", down: \"up\" },\n split: { horizontal: \"horizontal\", vertical: \"vertical\" },\n blinds: { horizontal: \"horizontal\", vertical: \"vertical\" },\n checker: { horizontal: \"horizontal\", vertical: \"vertical\" },\n randomBars: { horizontal: \"horizontal\", vertical: \"vertical\" },\n cover: { left: \"left\", right: \"right\", up: \"top\", down: \"bottom\" },\n push: { left: \"left\", right: \"right\", up: \"top\", down: \"bottom\" },\n strips: {\n left: \"fromBottomLeft\",\n right: \"fromTopRight\",\n up: \"fromBottomRight\",\n down: \"fromTopLeft\",\n },\n wheel: {},\n};\n\nconst PATH_STRINGS: Record<PathAnimationType, string> = {\n customPath: \"\",\n arc: \"M 0 0 C 50 -100 100 -100 150 0\",\n bounce: \"M 0 0 L 50 0 C 50 -30 30 -50 0 -50 C -30 -50 -50 -30 -50 0 L 50 0\",\n circle: \"M 0 0 C 50 -50 100 0 50 50 C 0 100 -50 50 0 0\",\n curve: \"M 0 0 C 50 -80 100 -80 150 0 C 200 80 250 80 300 0\",\n figureEight:\n \"M 0 0 C 50 -50 100 0 50 50 C 0 100 -50 50 0 0 C -50 -50 -100 0 -50 50 C 0 100 50 50 0 0\",\n line: \"M 0 0 L 200 0\",\n loop: \"M 0 0 C 50 -80 100 0 50 80 C 0 160 -50 80 0 0\",\n};\n\n// --- Helper functions ---\n\nfunction resolvePresetId(options: AnimationOptions): number {\n if (options.mediaType) return 1;\n if (options.attributeName) return 0;\n const cls: AnimationClass = options.class ?? \"entr\";\n\n if (cls === \"emph\" && options.emphasisType) {\n return EMPH_PRESET_IDS[options.emphasisType] ?? 0;\n }\n\n if (options.pathType) {\n return PATH_PRESET_IDS[options.pathType] ?? 200;\n }\n\n const type = options.type ?? \"appear\";\n const map = cls === \"exit\" ? EXIT_PRESET_IDS : ENTR_PRESET_IDS;\n return map[type] ?? 0;\n}\n\nfunction resolvePresetClass(options: AnimationOptions): AnimationClass {\n if (options.mediaType) return \"mediacall\";\n if (options.attributeName) return \"entr\";\n if (options.pathType) return \"emph\";\n return options.class ?? \"entr\";\n}\n\nfunction resolvePresetSubtype(options: AnimationOptions): number {\n if (options.direction) {\n return DIRECTION_SUBTYPES[options.direction] ?? 0;\n }\n return 0;\n}\n\nfunction buildTargetElement(spid: number, options?: AnimationOptions): XmlComponent {\n const spTgtChildren: XmlComponent[] = [];\n if (options?.charRange) {\n spTgtChildren.push(\n new BuilderElement({\n name: \"p:txEl\",\n children: [\n new BuilderElement({\n name: \"p:charRg\",\n attributes: {\n st: { key: \"st\", value: options.charRange[0] },\n end: { key: \"end\", value: options.charRange[1] },\n },\n }),\n ],\n }),\n );\n } else if (options?.paragraphRange) {\n spTgtChildren.push(\n new BuilderElement({\n name: \"p:txEl\",\n children: [\n new BuilderElement({\n name: \"p:pRg\",\n attributes: {\n st: { key: \"st\", value: options.paragraphRange[0] },\n end: { key: \"end\", value: options.paragraphRange[1] },\n },\n }),\n ],\n }),\n );\n }\n\n return new BuilderElement({\n name: \"p:tgtEl\",\n children: [\n new BuilderElement({\n name: \"p:spTgt\",\n attributes: { spid: { key: \"spid\", value: spid } },\n children: spTgtChildren.length > 0 ? spTgtChildren : undefined,\n }),\n ],\n });\n}\n\nfunction buildEntrOrExitEffects(\n options: AnimationOptions,\n spid: number,\n ids: { set: number; effect: number },\n): XmlComponent[] {\n const children: XmlComponent[] = [];\n\n // p:set — make shape visible (entr) or hidden (exit)\n const cls = options.class ?? \"entr\";\n const visibility = cls === \"exit\" ? \"hidden\" : \"visible\";\n children.push(\n new BuilderElement({\n name: \"p:set\",\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.set },\n dur: { key: \"dur\", value: \"1\" },\n fill: { key: \"fill\", value: \"hold\" },\n },\n children: [\n new BuilderElement({\n name: \"p:stCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: { delay: { key: \"delay\", value: \"0\" } },\n }),\n ],\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:tgtEl\",\n children: [\n new BuilderElement({\n name: \"p:spTgt\",\n attributes: { spid: { key: \"spid\", value: spid } },\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:attrNameLst\",\n children: [stringContainerObj(\"p:attrName\", \"style.visibility\")],\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:to\",\n children: [\n new BuilderElement({\n name: \"p:strVal\",\n attributes: { val: { key: \"val\", value: visibility } },\n }),\n ],\n }),\n ],\n }),\n );\n\n // p:animEffect for non-appear types\n if (options.type !== \"appear\") {\n const filterBase = FILTER_MAP[options.type ?? \"fade\"];\n const dirMap = DIRECTION_FILTER[options.type ?? \"fade\"];\n const dirFilter = options.direction && dirMap ? dirMap[options.direction] : undefined;\n\n let filter = filterBase;\n if (options.type === \"wheel\") {\n filter = \"wheel(4)\";\n } else if (options.type === \"split\") {\n const dir = options.direction ?? \"horizontal\";\n filter = `split(${dir})`;\n } else if (dirFilter) {\n filter = `${filterBase}(${dirFilter})`;\n }\n\n const transition = cls === \"exit\" ? \"out\" : \"in\";\n\n children.push(\n new BuilderElement({\n name: \"p:animEffect\",\n attributes: {\n transition: { key: \"transition\", value: transition },\n filter: { key: \"filter\", value: filter },\n },\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.effect },\n dur: { key: \"dur\", value: String(options.duration ?? 500) },\n fill: { key: \"fill\", value: \"hold\" },\n },\n }),\n new BuilderElement({\n name: \"p:tgtEl\",\n children: [\n new BuilderElement({\n name: \"p:spTgt\",\n attributes: { spid: { key: \"spid\", value: spid } },\n }),\n ],\n }),\n ],\n }),\n ],\n }),\n );\n }\n\n return children;\n}\n\nfunction buildEmphasisEffects(\n options: AnimationOptions,\n spid: number,\n ids: { set: number; effect: number },\n): XmlComponent[] {\n const emphType = options.emphasisType ?? \"growShrink\";\n const children: XmlComponent[] = [];\n const dur = String(options.duration ?? 500);\n\n // Common target element\n const tgtEl = new BuilderElement({\n name: \"p:tgtEl\",\n children: [\n new BuilderElement({\n name: \"p:spTgt\",\n attributes: { spid: { key: \"spid\", value: spid } },\n }),\n ],\n });\n\n switch (emphType) {\n case \"growShrink\":\n children.push(\n new BuilderElement({\n name: \"p:animScale\",\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.effect },\n dur: { key: \"dur\", value: dur },\n fill: { key: \"fill\", value: \"hold\" },\n ...(options.autoReverse ? { autoRev: { key: \"autoRev\", value: 1 } } : {}),\n },\n children: [\n new BuilderElement({\n name: \"p:stCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: {\n delay: { key: \"delay\", value: \"0\" },\n },\n }),\n ],\n }),\n ],\n }),\n tgtEl,\n ],\n }),\n new BuilderElement({\n name: \"p:by\",\n attributes: {\n x: { key: \"x\", value: \"150000\" },\n y: { key: \"y\", value: \"150000\" },\n },\n }),\n ],\n }),\n );\n break;\n\n case \"spin\":\n children.push(\n new BuilderElement({\n name: \"p:animRot\",\n attributes: { by: { key: \"by\", value: \"3600000\" } },\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.effect },\n dur: { key: \"dur\", value: dur },\n fill: { key: \"fill\", value: \"hold\" },\n },\n children: [\n new BuilderElement({\n name: \"p:stCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: {\n delay: { key: \"delay\", value: \"0\" },\n },\n }),\n ],\n }),\n ],\n }),\n tgtEl,\n ],\n }),\n ],\n }),\n );\n break;\n\n case \"colorChange\": {\n const color = options.color ?? \"FF0000\";\n children.push(\n new BuilderElement({\n name: \"p:animClr\",\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.effect },\n dur: { key: \"dur\", value: dur },\n fill: { key: \"fill\", value: \"hold\" },\n },\n children: [\n new BuilderElement({\n name: \"p:stCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: {\n delay: { key: \"delay\", value: \"0\" },\n },\n }),\n ],\n }),\n ],\n }),\n tgtEl,\n ],\n }),\n new BuilderElement({\n name: \"p:to\",\n children: [\n new BuilderElement({\n name: \"a:srgbClr\",\n attributes: { val: { key: \"val\", value: color } },\n }),\n ],\n }),\n ],\n }),\n );\n break;\n }\n\n case \"transparency\":\n children.push(\n new BuilderElement({\n name: \"p:anim\",\n attributes: {\n calcmode: { key: \"calcmode\", value: \"lin\" },\n valueType: { key: \"valueType\", value: \"num\" },\n from: { key: \"from\", value: \"0\" },\n to: { key: \"to\", value: \"1\" },\n },\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.effect },\n dur: { key: \"dur\", value: dur },\n fill: { key: \"fill\", value: \"hold\" },\n },\n }),\n tgtEl,\n new BuilderElement({\n name: \"p:attrNameLst\",\n children: [stringContainerObj(\"p:attrName\", \"style.opacity\")],\n }),\n ],\n }),\n ],\n }),\n );\n break;\n\n default:\n // boldFlash, wave, pulse, growWithTurn — use p:animEffect with emph filter\n children.push(\n new BuilderElement({\n name: \"p:animEffect\",\n attributes: {\n transition: { key: \"transition\", value: \"in\" },\n filter: { key: \"filter\", value: emphType },\n },\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.effect },\n dur: { key: \"dur\", value: dur },\n fill: { key: \"fill\", value: \"hold\" },\n },\n }),\n tgtEl,\n ],\n }),\n ],\n }),\n );\n break;\n }\n\n return children;\n}\n\nfunction buildPathEffects(\n options: AnimationOptions,\n spid: number,\n ids: { set: number; effect: number },\n): XmlComponent[] {\n const pathStr = options.path ?? PATH_STRINGS[options.pathType ?? \"customPath\"] ?? \"\";\n const dur = String(options.duration ?? 1000);\n\n return [\n new BuilderElement({\n name: \"p:animMotion\",\n attributes: {\n origin: { key: \"origin\", value: \"layout\" },\n path: { key: \"path\", value: pathStr },\n },\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.effect },\n dur: { key: \"dur\", value: dur },\n fill: { key: \"fill\", value: \"hold\" },\n },\n children: [\n new BuilderElement({\n name: \"p:stCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: { delay: { key: \"delay\", value: \"0\" } },\n }),\n ],\n }),\n ],\n }),\n buildTargetElement(spid, options),\n ],\n }),\n ],\n }),\n ];\n}\n\n/**\n * Build p:cmd for media play/pause/stop (goes inside the animation sequence).\n * PowerPoint uses p:cmd type=\"call\" cmd=\"playFrom(0.0)\" for video play.\n */\nfunction buildMediaPlayCommand(\n options: AnimationOptions,\n spid: number,\n ids: { cmd: number },\n): XmlComponent {\n const cmdStr = options.fullScreen ? \"playFrom(0.0,1.0)\" : \"playFrom(0.0)\";\n\n return new BuilderElement({\n name: \"p:cmd\",\n attributes: {\n type: { key: \"type\", value: \"call\" },\n cmd: { key: \"cmd\", value: cmdStr },\n },\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.cmd },\n dur: { key: \"dur\", value: String(options.duration ?? 10000) },\n fill: { key: \"fill\", value: \"hold\" },\n },\n }),\n buildTargetElement(spid),\n ],\n }),\n ],\n });\n}\n\n/**\n * Build p:video/p:audio with p:cMediaNode (goes as sibling of p:seq).\n * This is the media state controller, separate from the play command.\n */\nfunction buildMediaStateNode(\n options: AnimationOptions,\n spid: number,\n ids: { mediaCtn: number },\n): XmlComponent {\n const isVideo = options.mediaType === \"playVideo\";\n const elementName = isVideo ? \"p:video\" : \"p:audio\";\n\n const mediaAttrs: Record<string, { key: string; value: string | number | boolean }> = {};\n if (!isVideo && options.isNarration) {\n mediaAttrs.isNarration = { key: \"isNarration\", value: true };\n }\n if (isVideo && options.fullScreen) {\n mediaAttrs.fullScrn = { key: \"fullScrn\", value: true };\n }\n\n const cMediaNodeAttrs: Record<string, { key: string; value: string | number }> = {};\n if (options.volume !== undefined) {\n cMediaNodeAttrs.vol = { key: \"vol\", value: options.volume * 1000 };\n } else {\n cMediaNodeAttrs.vol = { key: \"vol\", value: 80000 };\n }\n if (options.mute) {\n cMediaNodeAttrs.mute = { key: \"mute\", value: 1 };\n }\n\n return new BuilderElement({\n name: elementName,\n attributes: Object.keys(mediaAttrs).length > 0 ? mediaAttrs : undefined,\n children: [\n new BuilderElement({\n name: \"p:cMediaNode\",\n attributes: cMediaNodeAttrs,\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.mediaCtn },\n fill: { key: \"fill\", value: \"hold\" },\n display: { key: \"display\", value: \"0\" },\n },\n children: [\n new BuilderElement({\n name: \"p:stCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: {\n delay: { key: \"delay\", value: \"indefinite\" },\n },\n }),\n ],\n }),\n ],\n }),\n buildTargetElement(spid),\n ],\n }),\n ],\n });\n}\n\nfunction buildPropertyAnimation(\n options: AnimationOptions,\n spid: number,\n ids: { cBhvr: number },\n): XmlComponent {\n const attrs: Record<string, { key: string; value: string }> = {};\n if (options.calcMode) attrs.calcmode = { key: \"calcmode\", value: options.calcMode };\n if (options.valueType) attrs.valueType = { key: \"valueType\", value: options.valueType };\n if (options.from !== undefined) attrs.from = { key: \"from\", value: options.from };\n if (options.to !== undefined) attrs.to = { key: \"to\", value: options.to };\n if (options.animBy !== undefined) attrs.by = { key: \"by\", value: options.animBy };\n\n const cBhvrChildren: XmlComponent[] = [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.cBhvr },\n dur: { key: \"dur\", value: String(options.duration ?? 500) },\n fill: { key: \"fill\", value: \"hold\" },\n },\n }),\n buildTargetElement(spid, options),\n ];\n\n if (options.attributeName) {\n cBhvrChildren.push(\n new BuilderElement({\n name: \"p:attrNameLst\",\n children: [stringContainerObj(\"p:attrName\", options.attributeName)],\n }),\n );\n }\n\n const animChildren: XmlComponent[] = [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: cBhvrChildren,\n }),\n ];\n\n // Build tavLst if from/to are specified\n if (options.from !== undefined || options.to !== undefined) {\n const tavList: XmlComponent[] = [];\n if (options.from !== undefined) {\n tavList.push(\n new BuilderElement({\n name: \"p:tav\",\n attributes: { tm: { key: \"tm\", value: \"0\" } },\n children: [\n new BuilderElement({\n name: \"p:val\",\n children: [\n new BuilderElement({\n name: \"p:strVal\",\n attributes: { val: { key: \"val\", value: options.from } },\n }),\n ],\n }),\n ],\n }),\n );\n }\n if (options.to !== undefined) {\n tavList.push(\n new BuilderElement({\n name: \"p:tav\",\n attributes: { tm: { key: \"tm\", value: \"100000\" } },\n children: [\n new BuilderElement({\n name: \"p:val\",\n children: [\n new BuilderElement({\n name: \"p:strVal\",\n attributes: { val: { key: \"val\", value: options.to } },\n }),\n ],\n }),\n ],\n }),\n );\n }\n if (tavList.length > 0) {\n animChildren.push(\n new BuilderElement({\n name: \"p:tavLst\",\n children: tavList,\n }),\n );\n }\n }\n\n return new BuilderElement({\n name: \"p:anim\",\n attributes: Object.keys(attrs).length > 0 ? attrs : undefined,\n children: animChildren,\n });\n}\n\n// --- Main class ---\n\ninterface AnimationEntry {\n readonly spid: number;\n readonly options: AnimationOptions;\n}\n\n/**\n * p:timing — Slide timing for shape animations.\n */\nexport class SlideTiming extends XmlComponent {\n public constructor(entries: readonly AnimationEntry[]) {\n super(\"p:timing\");\n\n if (entries.length === 0) return;\n\n let id = 1;\n const rootCtnId = id++;\n const seqCtnId = id++;\n\n const animationNodes: XmlComponent[] = [];\n const mediaStateNodes: XmlComponent[] = [];\n let clickGroupDelay = 0;\n\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n const { spid, options } = entry;\n\n const nodeType =\n options.trigger === \"withPrevious\"\n ? \"withEffect\"\n : options.trigger === \"afterPrevious\"\n ? \"afterEffect\"\n : \"clickEffect\";\n\n if (options.trigger === \"afterPrevious\" && i > 0) {\n clickGroupDelay += (options.duration ?? 500) + (options.delay ?? 0);\n }\n if (options.trigger === \"onClick\" || options.trigger === undefined) {\n clickGroupDelay = 0;\n }\n\n const groupCtnId = id++;\n const effectCtnId = id++;\n const setCtnId = id++;\n const effectCtnId2 = id++;\n\n const presetId = resolvePresetId(options);\n const presetClass = resolvePresetClass(options);\n const presetSubtype = resolvePresetSubtype(options);\n\n // Build effect children based on animation class\n let effectChildren: XmlComponent[];\n\n if (options.mediaType) {\n effectChildren = [buildMediaPlayCommand(options, spid, { cmd: effectCtnId2 })];\n // Generate media state node (p:video/p:audio) as sibling of p:seq\n const mediaStateId = id++;\n mediaStateNodes.push(buildMediaStateNode(options, spid, { mediaCtn: mediaStateId }));\n } else if (options.attributeName) {\n effectChildren = [buildPropertyAnimation(options, spid, { cBhvr: effectCtnId2 })];\n } else if (options.pathType) {\n effectChildren = buildPathEffects(options, spid, {\n set: setCtnId,\n effect: effectCtnId2,\n });\n } else if (presetClass === \"emph\") {\n effectChildren = buildEmphasisEffects(options, spid, {\n set: setCtnId,\n effect: effectCtnId2,\n });\n } else {\n effectChildren = buildEntrOrExitEffects(options, spid, {\n set: setCtnId,\n effect: effectCtnId2,\n });\n }\n\n // Build cTn attributes with optional speed/repeatCount/autoReverse\n const cTnAttrs: Record<string, { key: string; value: string | number }> = {\n id: { key: \"id\", value: effectCtnId },\n fill: { key: \"fill\", value: \"hold\" },\n nodeType: { key: \"nodeType\", value: nodeType },\n };\n if (!options.mediaType && !options.attributeName) {\n cTnAttrs.presetID = { key: \"presetID\", value: presetId };\n cTnAttrs.presetClass = { key: \"presetClass\", value: presetClass };\n cTnAttrs.presetSubtype = { key: \"presetSubtype\", value: presetSubtype };\n }\n if (options.mediaType) {\n cTnAttrs.presetID = { key: \"presetID\", value: presetId };\n cTnAttrs.presetClass = { key: \"presetClass\", value: presetClass };\n cTnAttrs.presetSubtype = { key: \"presetSubtype\", value: presetSubtype };\n }\n if (options.speed !== undefined) cTnAttrs.spd = { key: \"spd\", value: String(options.speed) };\n if (options.repeatCount !== undefined)\n cTnAttrs.repeatCount = { key: \"repeatCount\", value: String(options.repeatCount) };\n if (options.autoReverse) cTnAttrs.autoRev = { key: \"autoRev\", value: 1 };\n\n // Build effect cTn\n const effectCtn = new BuilderElement({\n name: \"p:cTn\",\n attributes: cTnAttrs,\n children: [\n new BuilderElement({\n name: \"p:stCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: {\n delay: { key: \"delay\", value: String(options.delay ?? 0) },\n },\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:childTnLst\",\n children: effectChildren,\n }),\n ],\n });\n\n // Wrap in inner par\n const innerPar = new BuilderElement({\n name: \"p:par\",\n children: [effectCtn],\n });\n\n // Wrap in outer par (click group)\n const outerPar = new BuilderElement({\n name: \"p:par\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: groupCtnId },\n fill: { key: \"fill\", value: \"hold\" },\n },\n children: [\n new BuilderElement({\n name: \"p:stCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: { delay: { key: \"delay\", value: \"0\" } },\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:childTnLst\",\n children: [innerPar],\n }),\n ],\n }),\n ],\n });\n\n animationNodes.push(outerPar);\n }\n\n // Assemble the full timing tree\n this.root.push(\n new BuilderElement({\n name: \"p:tnLst\",\n children: [\n new BuilderElement({\n name: \"p:par\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: rootCtnId },\n dur: { key: \"dur\", value: \"indefinite\" },\n restart: { key: \"restart\", value: \"never\" },\n nodeType: { key: \"nodeType\", value: \"tmRoot\" },\n },\n children: [\n new BuilderElement({\n name: \"p:childTnLst\",\n children: [\n new BuilderElement({\n name: \"p:seq\",\n attributes: {\n concurrent: { key: \"concurrent\", value: 1 },\n nextAc: { key: \"nextAc\", value: \"seek\" },\n },\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: seqCtnId },\n dur: {\n key: \"dur\",\n value: \"indefinite\",\n },\n nodeType: {\n key: \"nodeType\",\n value: \"mainSeq\",\n },\n },\n children: [\n new BuilderElement({\n name: \"p:childTnLst\",\n children: animationNodes,\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:prevCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: {\n evt: {\n key: \"evt\",\n value: \"onPrev\",\n },\n delay: {\n key: \"delay\",\n value: \"0\",\n },\n },\n children: [\n new BuilderElement({\n name: \"p:tgtEl\",\n children: [\n new BuilderElement({\n name: \"p:sldTgt\",\n }),\n ],\n }),\n ],\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:nextCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: {\n evt: {\n key: \"evt\",\n value: \"onNext\",\n },\n delay: {\n key: \"delay\",\n value: \"0\",\n },\n },\n children: [\n new BuilderElement({\n name: \"p:tgtEl\",\n children: [\n new BuilderElement({\n name: \"p:sldTgt\",\n }),\n ],\n }),\n ],\n }),\n ],\n }),\n ],\n }),\n ...mediaStateNodes,\n ],\n }),\n ],\n }),\n ],\n }),\n ],\n }),\n );\n }\n}\n","import type { Context } from \"@file/xml-components\";\nimport { BaseXmlComponent } from \"@file/xml-components\";\n\nconst ORIENT_TYPES = new Set([\"blinds\", \"checker\", \"comb\", \"randomBar\"]);\n\nconst SIDE_DIR_TYPES = new Set([\"push\", \"wipe\"]);\n\nconst EIGHT_DIR_TYPES = new Set([\"cover\", \"pull\"]);\n\nexport type TransitionType =\n | \"fade\"\n | \"push\"\n | \"wipe\"\n | \"split\"\n | \"blinds\"\n | \"checker\"\n | \"comb\"\n | \"randomBar\"\n | \"cover\"\n | \"pull\"\n | \"strips\"\n | \"wheel\"\n | \"zoom\"\n | \"circle\"\n | \"dissolve\"\n | \"diamond\"\n | \"newsflash\"\n | \"plus\"\n | \"wedge\"\n | \"random\"\n | \"cut\";\n\nexport type TransitionDirection =\n | \"left\"\n | \"up\"\n | \"right\"\n | \"down\"\n | \"leftUp\"\n | \"rightUp\"\n | \"leftDown\"\n | \"rightDown\"\n | \"out\"\n | \"in\";\n\nconst DIRECTION_MAP: Record<TransitionDirection, string> = {\n left: \"l\",\n up: \"u\",\n right: \"r\",\n down: \"d\",\n leftUp: \"lu\",\n rightUp: \"ru\",\n leftDown: \"ld\",\n rightDown: \"rd\",\n out: \"out\",\n in: \"in\",\n};\n\nexport interface TransitionOptions {\n readonly type?: TransitionType;\n readonly speed?: \"slow\" | \"med\" | \"fast\";\n readonly advanceOnClick?: boolean;\n readonly advanceAfterTime?: number;\n readonly direction?: TransitionDirection;\n readonly orient?: \"horz\" | \"vert\";\n readonly thruBlk?: boolean;\n readonly spokes?: number;\n}\n\nfunction buildTransitionElement(\n type: TransitionType,\n direction?: TransitionDirection,\n orient?: string,\n thruBlk?: boolean,\n spokes?: number,\n): string {\n const dir = direction ? DIRECTION_MAP[direction] : undefined;\n const attrs: string[] = [];\n\n if (ORIENT_TYPES.has(type) && dir && dir !== \"horz\") {\n attrs.push(`dir=\"${dir}\"`);\n } else if (SIDE_DIR_TYPES.has(type) && dir && dir !== \"l\") {\n attrs.push(`dir=\"${dir}\"`);\n } else if (EIGHT_DIR_TYPES.has(type) && dir && dir !== \"l\") {\n attrs.push(`dir=\"${dir}\"`);\n } else if (type === \"strips\" && dir && dir !== \"lu\") {\n attrs.push(`dir=\"${dir}\"`);\n } else if ((type === \"fade\" || type === \"cut\") && thruBlk !== undefined) {\n attrs.push(`thruBlk=\"${thruBlk ? 1 : 0}\"`);\n } else if (type === \"split\") {\n if (orient && orient !== \"horz\") attrs.push(`orient=\"${orient}\"`);\n if (dir && dir !== \"out\") attrs.push(`dir=\"${dir}\"`);\n } else if (type === \"wheel\") {\n if (spokes !== undefined && spokes !== 4) attrs.push(`spokes=\"${spokes}\"`);\n } else if (type === \"zoom\" && dir && dir !== \"in\") {\n attrs.push(`dir=\"${dir}\"`);\n }\n\n return attrs.length > 0 ? `<p:${type} ${attrs.join(\" \")}/>` : `<p:${type}/>`;\n}\n\nexport function buildTransition(options: TransitionOptions): string {\n const attrParts: string[] = [];\n if (options.speed) attrParts.push(`spd=\"${options.speed}\"`);\n if (options.advanceOnClick !== undefined)\n attrParts.push(`advClick=\"${options.advanceOnClick ? 1 : 0}\"`);\n if (options.advanceAfterTime !== undefined) attrParts.push(`advTm=\"${options.advanceAfterTime}\"`);\n\n const children: string[] = [];\n if (options.type) {\n children.push(\n buildTransitionElement(\n options.type,\n options.direction,\n options.orient,\n options.thruBlk,\n options.spokes,\n ),\n );\n }\n\n if (attrParts.length === 0 && children.length === 0) {\n return \"<p:transition/>\";\n }\n\n const attrStr = attrParts.length > 0 ? ` ${attrParts.join(\" \")}` : \"\";\n if (children.length === 0) {\n return `<p:transition${attrStr}/>`;\n }\n return `<p:transition${attrStr}>${children.join(\"\")}</p:transition>`;\n}\n\n/**\n * p:transition — Slide transition effect.\n * Lazy: stores options, builds XML in toXml.\n */\nexport class Transition extends BaseXmlComponent {\n private readonly options: TransitionOptions;\n\n public constructor(options: TransitionOptions = {}) {\n super(\"p:transition\");\n this.options = options;\n }\n\n public override toXml(_context: Context): string {\n return buildTransition(this.options);\n }\n}\n","import { SlideTiming } from \"@file/animation/timing\";\nimport type { AnimationOptions } from \"@file/animation/types\";\nimport type { Background } from \"@file/background/background\";\nimport type { SlideHeaderFooterOptions } from \"@file/header-footer/header-footer\";\nimport { coerceChild } from \"@file/slide/coerce\";\nimport type { SlideChild } from \"@file/slide/slide-child\";\nimport type { TransitionOptions } from \"@file/transition/transition\";\nimport { buildTransition } from \"@file/transition/transition\";\nimport { BaseXmlComponent, XmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\n\ninterface Animatable {\n readonly shapeId: number;\n readonly animation?: AnimationOptions;\n}\n\nfunction isAnimatable(child: BaseXmlComponent): child is BaseXmlComponent & Animatable {\n return \"shapeId\" in child && \"animation\" in child;\n}\n\nfunction collectAnimations(children: readonly BaseXmlComponent[]): Array<{\n readonly spid: number;\n readonly options: AnimationOptions;\n}> {\n const entries: Array<{ readonly spid: number; readonly options: AnimationOptions }> = [];\n for (const child of children) {\n if (isAnimatable(child)) {\n const anim = child.animation;\n if (anim) {\n entries.push({ spid: child.shapeId, options: anim });\n }\n }\n }\n return entries;\n}\n\n/**\n * p:sld — A slide in a presentation.\n * Lazy: stores options, builds XML in toXml().\n */\nexport class Slide extends XmlComponent {\n private readonly children: readonly SlideChild[];\n private readonly background?: Background;\n private readonly transition?: TransitionOptions;\n public readonly HeaderFooter?: SlideHeaderFooterOptions;\n\n public constructor(\n children: readonly SlideChild[],\n background?: Background,\n transition?: TransitionOptions,\n headerFooter?: SlideHeaderFooterOptions,\n ) {\n super(\"p:sld\");\n this.children = children;\n this.background = background;\n this.transition = transition;\n this.HeaderFooter = headerFooter;\n }\n\n // Direct XML serialization — builds the <p:sld> wrapper as string, but uses\n // toXml() for child components that have lazy root[] (empty) patterns.\n public override toXml(context: Context): string {\n const parts: string[] = [];\n\n // Opening tag with namespace declarations\n parts.push(\n '<p:sld xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">',\n );\n\n // p:cSld — common slide data\n parts.push(\"<p:cSld>\");\n if (this.background) {\n parts.push(this.background.toXml(context));\n }\n\n // p:spTree — shape tree (fixed wrapper + dynamic children)\n parts.push(\"<p:spTree>\");\n parts.push('<p:nvGrpSpPr><p:cNvPr id=\"1\" name=\"\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>');\n parts.push(\n '<p:grpSpPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/><a:chOff x=\"0\" y=\"0\"/><a:chExt cx=\"0\" cy=\"0\"/></a:xfrm></p:grpSpPr>',\n );\n\n const coercedChildren = this.children.map(coerceChild);\n for (const child of coercedChildren) {\n const s = child.toXml(context);\n if (s) parts.push(s);\n }\n\n parts.push(\"</p:spTree>\");\n parts.push(\"</p:cSld>\");\n\n // p:clrMapOvr\n parts.push(\"<p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr>\");\n\n // p:transition (optional)\n if (this.transition) {\n parts.push(buildTransition(this.transition));\n }\n\n // p:timing (animation)\n const animations = collectAnimations(coercedChildren);\n if (animations.length > 0) {\n const timing = new SlideTiming(animations);\n parts.push(timing.toXml(context));\n }\n\n parts.push(\"</p:sld>\");\n return parts.join(\"\");\n }\n}\n","import type { Context } from \"@file/xml-components\";\nimport { ImportedXmlComponent } from \"@file/xml-components\";\n\nconst TABLE_STYLES_XML = `<a:tblStyleLst xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" def=\"{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}\"/>`;\n\nexport class TableStyles extends ImportedXmlComponent {\n private static instance = ImportedXmlComponent.fromXmlString(TABLE_STYLES_XML);\n\n public constructor() {\n super(\"a:tblStyleLst\");\n }\n\n public override toXml(context: Context): string {\n return TableStyles.instance.toXml(context);\n }\n}\n","import type { Context } from \"@file/xml-components\";\nimport { ImportedXmlComponent } from \"@file/xml-components\";\n\nexport interface ColorSchemeOptions {\n dark1?: string;\n light1?: string;\n dark2?: string;\n light2?: string;\n accent1?: string;\n accent2?: string;\n accent3?: string;\n accent4?: string;\n accent5?: string;\n accent6?: string;\n hyperlink?: string;\n followedHyperlink?: string;\n}\n\nexport interface FontSchemeOptions {\n majorFont?: string;\n minorFont?: string;\n majorFontAsian?: string;\n minorFontAsian?: string;\n}\n\nexport interface ThemeOptions {\n name?: string;\n colors?: ColorSchemeOptions;\n fonts?: FontSchemeOptions;\n}\n\nconst DEFAULT_COLORS: Required<ColorSchemeOptions> = {\n dark1: \"000000\",\n light1: \"FFFFFF\",\n dark2: \"44546A\",\n light2: \"E7E6E6\",\n accent1: \"4472C4\",\n accent2: \"ED7D31\",\n accent3: \"A5A5A5\",\n accent4: \"FFC000\",\n accent5: \"5B9BD5\",\n accent6: \"70AD47\",\n hyperlink: \"0563C1\",\n followedHyperlink: \"954F72\",\n};\n\nfunction buildThemeXml(options?: ThemeOptions): string {\n const name = options?.name ?? \"Office Theme\";\n const c = { ...DEFAULT_COLORS, ...options?.colors };\n const f = options?.fonts;\n\n const majorFont = f?.majorFont ?? \"Calibri Light\";\n const minorFont = f?.minorFont ?? \"Calibri\";\n const majorFontAsian = f?.majorFontAsian ?? \"\";\n const minorFontAsian = f?.minorFontAsian ?? \"\";\n\n // dk1/lt1 use sysClr in Office theme; srgbClr override when customized\n const dk1 =\n options?.colors?.dark1 !== undefined\n ? `<a:srgbClr val=\"${c.dark1}\"/>`\n : `<a:sysClr val=\"windowText\" lastClr=\"000000\"/>`;\n const lt1 =\n options?.colors?.light1 !== undefined\n ? `<a:srgbClr val=\"${c.light1}\"/>`\n : `<a:sysClr val=\"window\" lastClr=\"FFFFFF\"/>`;\n\n return `<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"${name}\">\n <a:themeElements>\n <a:clrScheme name=\"${name}\">\n <a:dk1>${dk1}</a:dk1>\n <a:lt1>${lt1}</a:lt1>\n <a:dk2><a:srgbClr val=\"${c.dark2}\"/></a:dk2>\n <a:lt2><a:srgbClr val=\"${c.light2}\"/></a:lt2>\n <a:accent1><a:srgbClr val=\"${c.accent1}\"/></a:accent1>\n <a:accent2><a:srgbClr val=\"${c.accent2}\"/></a:accent2>\n <a:accent3><a:srgbClr val=\"${c.accent3}\"/></a:accent3>\n <a:accent4><a:srgbClr val=\"${c.accent4}\"/></a:accent4>\n <a:accent5><a:srgbClr val=\"${c.accent5}\"/></a:accent5>\n <a:accent6><a:srgbClr val=\"${c.accent6}\"/></a:accent6>\n <a:hlink><a:srgbClr val=\"${c.hyperlink}\"/></a:hlink>\n <a:folHlink><a:srgbClr val=\"${c.followedHyperlink}\"/></a:folHlink>\n </a:clrScheme>\n <a:fontScheme name=\"${name}\">\n <a:majorFont>\n <a:latin typeface=\"${majorFont}\"/>\n <a:ea typeface=\"${majorFontAsian}\"/>\n <a:cs typeface=\"\"/>\n </a:majorFont>\n <a:minorFont>\n <a:latin typeface=\"${minorFont}\"/>\n <a:ea typeface=\"${minorFontAsian}\"/>\n <a:cs typeface=\"\"/>\n </a:minorFont>\n </a:fontScheme>\n <a:fmtScheme name=\"Office\">\n <a:fillStyleLst>\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\n </a:fillStyleLst>\n <a:lnStyleLst>\n <a:ln w=\"6350\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/></a:ln>\n <a:ln w=\"12700\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/></a:ln>\n <a:ln w=\"19050\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/></a:ln>\n </a:lnStyleLst>\n <a:effectStyleLst>\n <a:effectStyle><a:effectLst/></a:effectStyle>\n <a:effectStyle><a:effectLst/></a:effectStyle>\n <a:effectStyle><a:effectLst/></a:effectStyle>\n </a:effectStyleLst>\n <a:bgFillStyleLst>\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\n </a:bgFillStyleLst>\n </a:fmtScheme>\n </a:themeElements>\n <a:objectDefaults/>\n <a:extraClrSchemeLst/>\n</a:theme>`;\n}\n\nexport class DefaultTheme extends ImportedXmlComponent {\n private static cache = new Map<string, ImportedXmlComponent>();\n private readonly cacheKey: string;\n\n public constructor(options?: ThemeOptions) {\n super(\"a:theme\");\n this.cacheKey = options ? themeKey(options) : \"\";\n if (!DefaultTheme.cache.has(this.cacheKey)) {\n DefaultTheme.cache.set(\n this.cacheKey,\n ImportedXmlComponent.fromXmlString(buildThemeXml(options)),\n );\n }\n }\n\n public override toXml(context: Context): string {\n return DefaultTheme.cache.get(this.cacheKey)!.toXml(context);\n }\n}\n\nfunction themeKey(o: ThemeOptions): string {\n const c = o.colors;\n const f = o.fonts;\n return `n${o.name ?? \"\"}c${c?.dark1 ?? \"\"}${c?.light1 ?? \"\"}${c?.dark2 ?? \"\"}${c?.light2 ?? \"\"}${c?.accent1 ?? \"\"}${c?.accent2 ?? \"\"}${c?.accent3 ?? \"\"}${c?.accent4 ?? \"\"}${c?.accent5 ?? \"\"}${c?.accent6 ?? \"\"}${c?.hyperlink ?? \"\"}${c?.followedHyperlink ?? \"\"}f${f?.majorFont ?? \"\"}${f?.minorFont ?? \"\"}${f?.majorFontAsian ?? \"\"}${f?.minorFontAsian ?? \"\"}`;\n}\n","import type { Context } from \"@file/xml-components\";\nimport { ImportedXmlComponent } from \"@file/xml-components\";\n\nconst VIEW_PROPS_XML = `<p:viewPr xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">\n <p:normalViewPr>\n <p:restoredLeft sz=\"14996\" autoAdjust=\"0\"/>\n <p:restoredTop sz=\"94660\"/>\n </p:normalViewPr>\n <p:slideViewPr>\n <p:cSldViewPr snapToGrid=\"0\">\n <p:cViewPr varScale=\"1\">\n <p:scale><a:sx n=\"90\" d=\"100\"/><a:sy n=\"90\" d=\"100\"/></p:scale>\n <p:origin x=\"1200\" y=\"72\"/>\n </p:cViewPr>\n <p:guideLst/>\n </p:cSldViewPr>\n </p:slideViewPr>\n <p:notesTextViewPr>\n <p:cViewPr>\n <p:scale><a:sx n=\"1\" d=\"1\"/><a:sy n=\"1\" d=\"1\"/></p:scale>\n <p:origin x=\"0\" y=\"0\"/>\n </p:cViewPr>\n </p:notesTextViewPr>\n <p:gridSpacing cx=\"72008\" cy=\"72008\"/>\n</p:viewPr>`;\n\nexport class ViewProperties extends ImportedXmlComponent {\n private static instance = ImportedXmlComponent.fromXmlString(VIEW_PROPS_XML);\n\n public constructor() {\n super(\"p:viewPr\");\n }\n\n public override toXml(context: Context): string {\n return ViewProperties.instance.toXml(context);\n }\n}\n","import { AppProperties } from \"@file/app-properties/app-properties\";\nimport { Background, type BackgroundOptions } from \"@file/background/background\";\nimport { ChartCollection } from \"@file/chart/chart-collection\";\nimport { CommentAuthorList } from \"@file/comment/comment-author-list\";\nimport type { AuthorEntry } from \"@file/comment/comment-author-list\";\nimport { SlideCommentList } from \"@file/comment/slide-comment-list\";\nimport { ContentTypes } from \"@file/content-types/content-types\";\nimport { CoreProperties, type CorePropertiesOptions } from \"@file/core-properties/properties\";\nimport type { SlideHeaderFooterOptions } from \"@file/header-footer/header-footer\";\nimport { HyperlinkCollection } from \"@file/hyperlink-collection\";\nimport { Media } from \"@file/media/media\";\nimport { NotesSlide } from \"@file/notes/notes-slide\";\nimport { PresentationProperties } from \"@file/presentation-properties\";\nimport { PresentationWrapper } from \"@file/presentation/presentation-wrapper\";\nimport { Relationships } from \"@file/relationships/relationships\";\nimport type { ShapeOptions } from \"@file/shape/shape\";\nimport { SlideLayout, type SlideLayoutType } from \"@file/slide-layout/slide-layout\";\nimport {\n DefaultSlideMaster,\n type MasterPlaceholderPosition,\n type SlideMasterOptions,\n} from \"@file/slide-master/slide-master\";\nimport { Slide } from \"@file/slide/slide\";\nimport type { SlideChild } from \"@file/slide/slide-child\";\nimport { SmartArtCollection } from \"@file/smartart/smartart-collection\";\nimport { TableStyles } from \"@file/table-styles\";\nimport { DefaultTheme, type ThemeOptions } from \"@file/theme/theme\";\nimport type { TransitionOptions } from \"@file/transition/transition\";\nimport { ViewProperties } from \"@file/view-properties\";\nimport type { BaseXmlComponent } from \"@file/xml-components\";\nimport type { RelationshipType } from \"@office-open/core\";\nimport { convertPixelsToEmu } from \"@office-open/core\";\n\n// ── Public interfaces ──\n\nexport type MasterChild = BaseXmlComponent | { shape: ShapeOptions };\n\nexport type SlideSize = \"16:9\" | \"4:3\" | { readonly width: number; readonly height: number };\n\nexport interface LayoutPlaceholderOptions {\n readonly title?: MasterPlaceholderPosition | false;\n readonly body?: MasterPlaceholderPosition | false;\n readonly subtitle?: MasterPlaceholderPosition | false;\n readonly date?: MasterPlaceholderPosition | false;\n readonly footer?: MasterPlaceholderPosition | false;\n readonly slideNumber?: MasterPlaceholderPosition | false;\n}\n\nexport interface LayoutDefinition {\n readonly type?: SlideLayoutType;\n readonly name?: string;\n readonly placeholders?: LayoutPlaceholderOptions;\n readonly children?: readonly MasterChild[];\n}\n\nexport interface MasterDefinition extends SlideMasterOptions {\n readonly name?: string;\n readonly theme?: ThemeOptions;\n readonly layouts?: readonly LayoutDefinition[];\n}\n\nexport interface SlideCommentOptions {\n readonly author: string;\n readonly text: string;\n readonly x: number;\n readonly y: number;\n readonly initials?: string;\n readonly date?: string;\n}\n\nexport interface SlideOptions {\n readonly children?: readonly SlideChild[];\n readonly background?: BackgroundOptions;\n readonly notes?: string;\n readonly transition?: TransitionOptions;\n readonly headerFooter?: SlideHeaderFooterOptions;\n readonly comments?: readonly SlideCommentOptions[];\n readonly layout?: SlideLayoutType | string;\n readonly master?: string;\n}\n\nexport interface ShowOptions {\n readonly loop?: boolean;\n readonly kiosk?: boolean;\n readonly showNarration?: boolean;\n readonly useTimings?: boolean;\n}\n\nexport interface PresentationOptions extends CorePropertiesOptions {\n readonly size?: SlideSize;\n readonly masters?: readonly MasterDefinition[];\n readonly slides?: readonly SlideOptions[];\n readonly show?: ShowOptions;\n}\n\ninterface RelEntry {\n readonly id: number | string;\n readonly type: RelationshipType;\n readonly target: string;\n readonly mode?: string;\n}\n\nfunction buildRelationships(entries: readonly RelEntry[]): Relationships {\n const rels = new Relationships();\n for (const e of entries) {\n rels.addRelationship(e.id, e.type, e.target, e.mode as \"External\" | undefined);\n }\n return rels;\n}\n\nfunction deriveInitials(name: string): string {\n const parts = name.trim().split(/\\s+/);\n return parts.length >= 2\n ? (parts[0][0] + parts[parts.length - 1][0]).toUpperCase()\n : name.slice(0, 2).toUpperCase();\n}\n\nfunction resolveSlideSize(size?: SlideSize): { width: number; height: number } {\n if (!size || size === \"16:9\") return { width: 12192000, height: 6858000 };\n if (size === \"4:3\") return { width: 9144000, height: 6858000 };\n return { width: convertPixelsToEmu(size.width), height: convertPixelsToEmu(size.height) };\n}\n\ninterface LayoutInfo {\n readonly key: string;\n readonly index: number;\n readonly masterIndex: number;\n readonly layout: SlideLayout;\n}\n\ninterface MasterInfo {\n readonly name: string;\n readonly index: number;\n readonly definition: MasterDefinition;\n readonly master: DefaultSlideMaster;\n readonly theme: DefaultTheme;\n readonly layouts: LayoutInfo[];\n readonly masterRels: Relationships;\n readonly layoutRels: Relationships[];\n}\n\nexport class File {\n private readonly slideOptions: readonly SlideOptions[];\n private readonly corePropsOptions: CorePropertiesOptions;\n private readonly showOptions?: ShowOptions;\n private readonly slideWidthEmus: number;\n private readonly slideHeightEmus: number;\n private readonly masterDefs: readonly MasterDefinition[];\n\n // Lazy components\n private _coreProperties?: CoreProperties;\n private _appProperties?: AppProperties;\n private _contentTypes?: ContentTypes;\n private _media?: Media;\n private _charts?: ChartCollection;\n private _smartArts?: SmartArtCollection;\n private _hyperlinks?: HyperlinkCollection;\n private _presentationWrapper?: PresentationWrapper;\n private _tableStyles?: TableStyles;\n private _presProps?: PresentationProperties;\n private _viewProps?: ViewProperties;\n private _notesMasterRels?: Relationships;\n\n // Multi-master support\n private masterMap?: MasterInfo[];\n private _allLayouts?: readonly LayoutInfo[];\n private _allLayoutRels?: readonly Relationships[];\n\n // Lazy slide data\n private _slides?: Slide[];\n private _slideWrappers?: Array<{ readonly view: Slide; readonly relationships: Relationships }>;\n private _notesSlides?: NotesSlide[];\n private _commentAuthorList?: CommentAuthorList;\n private _slideCommentLists?: (SlideCommentList | undefined)[];\n\n // Lazy relationship data\n private _fileRels?: Relationships;\n\n public constructor(options: PresentationOptions) {\n this.slideOptions = options.slides ?? [];\n this.corePropsOptions = options;\n this.showOptions = options.show;\n this.masterDefs = options.masters ?? [];\n const sz = resolveSlideSize(options.size);\n this.slideWidthEmus = sz.width;\n this.slideHeightEmus = sz.height;\n }\n\n // ── Master / Layout resolution ──\n\n private getMasterMap(): MasterInfo[] {\n if (this.masterMap) return this.masterMap;\n\n const defs = this.masterDefs.length > 0 ? this.masterDefs : [{} as MasterDefinition];\n const slideMasterLookup = new Map<number, number>();\n\n // Build slide → master index lookup\n for (let si = 0; si < this.slideOptions.length; si++) {\n const masterName = this.slideOptions[si].master;\n if (masterName === undefined) {\n slideMasterLookup.set(si, 0);\n continue;\n }\n const mi = defs.findIndex((d) => d.name === masterName);\n slideMasterLookup.set(si, mi >= 0 ? mi : 0);\n }\n\n let globalLayoutIndex = 0;\n const masters: MasterInfo[] = [];\n\n for (let mi = 0; mi < defs.length; mi++) {\n const def = defs[mi];\n const name = def.name ?? `master${mi + 1}`;\n\n // Collect layout types needed for this master\n const layoutDefs = def.layouts;\n let layoutKeys: readonly string[];\n if (layoutDefs && layoutDefs.length > 0) {\n layoutKeys = layoutDefs.map(\n (ld) => ld.type ?? ld.name ?? `layout${mi}_${layoutDefs.indexOf(ld)}`,\n );\n } else {\n // Auto-derive from slides referencing this master\n const seen = new Set<string>();\n const keys: string[] = [];\n for (let si = 0; si < this.slideOptions.length; si++) {\n if (slideMasterLookup.get(si) === mi) {\n const lt = this.slideOptions[si].layout ?? \"blank\";\n if (!seen.has(lt)) {\n seen.add(lt);\n keys.push(lt);\n }\n }\n }\n layoutKeys = keys.length > 0 ? keys : [\"blank\"];\n }\n\n const hf = this.slideOptions.find((s) => s.headerFooter)?.headerFooter;\n const master = new DefaultSlideMaster(layoutKeys.length, hf, def, this.slideWidthEmus, mi);\n const theme = new DefaultTheme(def.theme);\n\n const layouts: LayoutInfo[] = [];\n const layoutRels: Relationships[] = [];\n\n for (let li = 0; li < layoutKeys.length; li++) {\n const key = layoutKeys[li];\n const layoutDef = layoutDefs?.[li];\n const slideLayoutType = (layoutDef?.type ?? key) as SlideLayoutType;\n layouts.push({\n key,\n index: globalLayoutIndex,\n masterIndex: mi,\n layout: new SlideLayout(slideLayoutType, this.slideWidthEmus, layoutDef),\n });\n layoutRels.push(\n buildRelationships([\n {\n id: 1,\n type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster\",\n target: `../slideMasters/slideMaster${mi + 1}.xml`,\n },\n ]),\n );\n globalLayoutIndex++;\n }\n\n // Master rels: layouts + theme\n const masterRelsEntries: RelEntry[] = [];\n for (let li = 0; li < layouts.length; li++) {\n masterRelsEntries.push({\n id: li + 1,\n type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout\",\n target: `../slideLayouts/slideLayout${layouts[li].index + 1}.xml`,\n });\n }\n masterRelsEntries.push({\n id: layouts.length + 1,\n type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n target: `../theme/theme${mi + 1}.xml`,\n });\n\n masters.push({\n name,\n index: mi,\n definition: def,\n master,\n theme,\n layouts,\n masterRels: buildRelationships(masterRelsEntries),\n layoutRels,\n });\n }\n\n this.masterMap = masters;\n this._allLayouts = masters.flatMap((m) => m.layouts);\n this._allLayoutRels = masters.flatMap((m) => m.layoutRels);\n return this.masterMap;\n }\n\n private findLayoutForSlide(slideIndex: number): LayoutInfo {\n const opts = this.slideOptions[slideIndex];\n const masters = this.getMasterMap();\n const mi =\n opts.master !== undefined\n ? Math.max(\n 0,\n masters.findIndex((m) => m.name === opts.master),\n )\n : 0;\n const master = masters[mi];\n const layoutKey = opts.layout ?? \"blank\";\n const li = master.layouts.find((l) => l.key === layoutKey);\n return li ?? master.layouts[0];\n }\n\n // ── Lazy getters ──\n\n public get coreProperties(): CoreProperties {\n return (this._coreProperties ??= new CoreProperties(this.corePropsOptions));\n }\n\n public get appProperties(): AppProperties {\n return (this._appProperties ??= new AppProperties());\n }\n\n public get contentTypes(): ContentTypes {\n if (!this._contentTypes) {\n this._contentTypes = new ContentTypes();\n let hasComments = false;\n let notesSlideIdx = 0;\n for (let i = 0; i < this.slideOptions.length; i++) {\n this._contentTypes.addSlide(i + 1);\n if (this.slideOptions[i].notes) {\n this._contentTypes.addNotesSlide(notesSlideIdx + 1);\n notesSlideIdx++;\n }\n if (this.slideOptions[i].comments && this.slideOptions[i].comments!.length > 0) {\n this._contentTypes.addComments(i + 1);\n hasComments = true;\n }\n }\n if (notesSlideIdx > 0) {\n this._contentTypes.addNotesMaster();\n }\n if (hasComments) {\n this._contentTypes.addCommentAuthors();\n }\n }\n return this._contentTypes;\n }\n\n public get fileRelationships(): Relationships {\n if (!this._fileRels) {\n this._fileRels = buildRelationships([\n {\n id: 1,\n type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n target: \"ppt/presentation.xml\",\n },\n {\n id: 2,\n type: \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\",\n target: \"docProps/core.xml\",\n },\n {\n id: 3,\n type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\",\n target: \"docProps/app.xml\",\n },\n ]);\n }\n return this._fileRels;\n }\n\n public get media(): Media {\n return (this._media ??= new Media());\n }\n\n public get charts(): ChartCollection {\n return (this._charts ??= new ChartCollection());\n }\n\n public get smartArts(): SmartArtCollection {\n return (this._smartArts ??= new SmartArtCollection());\n }\n\n public get hyperlinks(): HyperlinkCollection {\n return (this._hyperlinks ??= new HyperlinkCollection());\n }\n\n public get presentationWrapper(): PresentationWrapper {\n if (!this._presentationWrapper) {\n const masters = this.getMasterMap();\n this._presentationWrapper = new PresentationWrapper({\n slideWidth: this.slideWidthEmus,\n slideHeight: this.slideHeightEmus,\n slideIds: this.slideOptions.map((_, i) => 256 + i),\n masterCount: masters.length,\n });\n const presRels = this._presentationWrapper.relationships;\n let rid = 1;\n // Masters\n for (let mi = 0; mi < masters.length; mi++) {\n presRels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster\",\n `slideMasters/slideMaster${mi + 1}.xml`,\n );\n }\n // Slides\n for (let i = 0; i < this.slideOptions.length; i++) {\n presRels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide\",\n `slides/slide${i + 1}.xml`,\n );\n }\n // Static parts\n presRels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/presProps\",\n \"presProps.xml\",\n );\n presRels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/viewProps\",\n \"viewProps.xml\",\n );\n for (let mi = 0; mi < masters.length; mi++) {\n presRels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n `theme/theme${mi + 1}.xml`,\n );\n }\n presRels.addRelationship(\n rid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableStyles\",\n \"tableStyles.xml\",\n );\n }\n return this._presentationWrapper;\n }\n\n public get themes(): readonly DefaultTheme[] {\n return this.getMasterMap().map((m) => m.theme);\n }\n\n public get tableStyles(): TableStyles {\n return (this._tableStyles ??= new TableStyles());\n }\n\n public get presProps(): PresentationProperties {\n return (this._presProps ??= new PresentationProperties(this.showOptions));\n }\n\n public get viewProps(): ViewProperties {\n return (this._viewProps ??= new ViewProperties());\n }\n\n public get slideMasters(): readonly DefaultSlideMaster[] {\n return this.getMasterMap().map((m) => m.master);\n }\n\n public get slideMasterRelsArray(): readonly Relationships[] {\n return this.getMasterMap().map((m) => m.masterRels);\n }\n\n public get allLayouts(): readonly LayoutInfo[] {\n this.getMasterMap();\n return this._allLayouts!;\n }\n\n public get allLayoutRelsArray(): readonly Relationships[] {\n this.getMasterMap();\n return this._allLayoutRels!;\n }\n\n public get slides(): readonly Slide[] {\n if (!this._slides) {\n this._slides = [];\n for (const s of this.slideOptions) {\n this._slides!.push(\n new Slide(\n s.children ?? [],\n s.background ? new Background(s.background) : undefined,\n s.transition,\n s.headerFooter,\n ),\n );\n }\n }\n return this._slides;\n }\n\n public get slideWrappers(): Array<{\n readonly view: Slide;\n readonly relationships: Relationships;\n }> {\n if (!this._slideWrappers) {\n this._slideWrappers = [];\n for (let i = 0; i < this.slideOptions.length; i++) {\n const layout = this.findLayoutForSlide(i);\n this._slideWrappers.push({\n view: this.slides[i],\n relationships: buildRelationships([\n {\n id: 1,\n type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout\",\n target: `../slideLayouts/slideLayout${layout.index + 1}.xml`,\n },\n ]),\n });\n }\n }\n return this._slideWrappers;\n }\n\n public get notesSlides(): readonly NotesSlide[] {\n if (!this._notesSlides) {\n this._notesSlides = [];\n for (let i = 0; i < this.slideOptions.length; i++) {\n if (this.slideOptions[i].notes) {\n this._notesSlides.push(new NotesSlide({ text: this.slideOptions[i].notes }));\n }\n }\n }\n return this._notesSlides;\n }\n\n /** Map from slide index → notesSlide index (0-based) for slides that have notes. */\n public get notesSlideIndexMap(): Map<number, number> {\n const map = new Map<number, number>();\n let notesIdx = 0;\n for (let i = 0; i < this.slideOptions.length; i++) {\n if (this.slideOptions[i].notes) {\n map.set(i, notesIdx++);\n }\n }\n return map;\n }\n\n public get notesMasterRelationships(): Relationships {\n return (this._notesMasterRels ??= new Relationships());\n }\n\n public get commentAuthorList(): CommentAuthorList | undefined {\n if (!this._commentAuthorList && !this._slideCommentLists) {\n this.buildComments();\n }\n return this._commentAuthorList;\n }\n\n public get slideCommentLists(): readonly (SlideCommentList | undefined)[] {\n if (!this._slideCommentLists) {\n this.buildComments();\n }\n return this._slideCommentLists!;\n }\n\n private buildComments(): void {\n const authorMap = new Map<\n string,\n { id: number; name: string; initials: string; clrIdx: number; commentCount: number }\n >();\n let nextAuthorId = 0;\n\n this._slideCommentLists = Array.from<SlideCommentList | undefined>({\n length: this.slideOptions.length,\n });\n\n for (let i = 0; i < this.slideOptions.length; i++) {\n const slideComments = this.slideOptions[i].comments;\n if (!slideComments || slideComments.length === 0) continue;\n\n const commentEntries: Array<{\n readonly authorId: number;\n readonly idx: number;\n readonly date?: string;\n readonly x: number;\n readonly y: number;\n readonly text: string;\n }> = [];\n\n for (const c of slideComments) {\n let author = authorMap.get(c.author);\n if (!author) {\n const id = nextAuthorId++;\n author = {\n id,\n name: c.author,\n initials: c.initials || deriveInitials(c.author),\n clrIdx: id,\n commentCount: 0,\n };\n authorMap.set(c.author, author);\n }\n author.commentCount++;\n\n commentEntries.push({\n authorId: author.id,\n idx: author.commentCount,\n date: c.date,\n x: c.x,\n y: c.y,\n text: c.text,\n });\n }\n\n this._slideCommentLists[i] = new SlideCommentList(commentEntries);\n }\n\n if (authorMap.size > 0) {\n const authors: AuthorEntry[] = Array.from(authorMap.values(), (a) => ({\n id: a.id,\n name: a.name,\n initials: a.initials,\n clrIdx: a.clrIdx,\n lastIdx: a.commentCount,\n }));\n this._commentAuthorList = new CommentAuthorList(authors);\n }\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\n\n/**\n * a:t — Text content within a run.\n */\nexport class Text extends XmlComponent {\n public constructor(value: string) {\n super(\"a:t\");\n this.root.push(value);\n }\n}\n","import { BuilderElement } from \"@file/xml-components\";\nimport type { Context, IXmlableObject } from \"@file/xml-components\";\n\n/**\n * Pure function: builds a:endParaRPr XML object.\n */\nexport function buildEndParagraphRunProperties(lang: string = \"en-US\"): IXmlableObject {\n return { \"a:endParaRPr\": { _attr: { lang } } };\n}\n\n/**\n * a:endParaRPr — End paragraph run properties.\n * Lazy: stores lang, builds XML in toXml().\n */\nexport class EndParagraphRunProperties extends BuilderElement<{\n readonly lang: string;\n}> {\n private readonly lang: string;\n\n public constructor(lang: string = \"en-US\") {\n super({ name: \"a:endParaRPr\" });\n this.lang = lang;\n }\n\n public override toXml(_context: Context): string {\n return `<a:endParaRPr lang=\"${this.lang}\"/>`;\n }\n}\n","import {\n buildAttrObject,\n BuilderElement,\n XmlComponent,\n stringContainerObj,\n} from \"@file/xml-components\";\n\n/**\n * a:fld — A field element for dynamic content in slide text.\n *\n * Used in slide master placeholders for slide numbers, dates, etc.\n */\nexport class Field extends XmlComponent {\n public constructor(fieldType: string, displayText: string) {\n super(\"a:fld\");\n\n this.root.push(\n buildAttrObject({\n id: `{${crypto.randomUUID()}}`,\n type: fieldType,\n }),\n );\n\n this.root.push(\n new BuilderElement({\n name: \"a:rPr\",\n attributes: {\n lang: { key: \"lang\", value: \"en-US\" },\n smtClean: { key: \"smtClean\", value: 0 },\n },\n }),\n );\n\n this.root.push(stringContainerObj(\"a:t\", displayText));\n }\n}\n\n/**\n * Slide number field — outputs current slide number.\n */\nexport class SlideNumberField extends Field {\n public constructor(displayText = \"<#>\") {\n super(\"slidenum\", displayText);\n }\n}\n\n/**\n * Date/time field — outputs formatted date.\n */\nexport class DateTimeField extends Field {\n public constructor(displayText?: string, format?: string) {\n super(format ?? \"datetimeFigureOut\", displayText ?? \"\");\n }\n}\n","import { BuilderElement } from \"@file/xml-components\";\n\n/**\n * a:cNvPr — Non-visual drawing properties (id, name).\n */\nexport class NonVisualDrawingProperties extends BuilderElement<{\n readonly id: number;\n readonly name: string;\n}> {\n public constructor(id: number, name: string) {\n super({\n name: \"a:cNvPr\",\n attributes: { id: { key: \"id\", value: id }, name: { key: \"name\", value: name } },\n });\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport type { Context } from \"@file/xml-components\";\nimport {\n createGroupTransform2D,\n type GroupTransform2DOptions as CoreGroupTransform2DOptions,\n} from \"@office-open/core/drawingml\";\n\nexport type IGroupTransform2DOptions = CoreGroupTransform2DOptions;\n\n/**\n * a:xfrm — Group transform (CT_GroupTransform2D).\n * Extends regular Transform2D with child offset (chOff) and child extent (chExt).\n * Delegates to core createGroupTransform2D.\n */\nexport class GroupTransform2D extends XmlComponent {\n private readonly core: XmlComponent;\n\n public constructor(options: IGroupTransform2DOptions, prefix: \"a\" | \"p\" = \"a\") {\n super(`${prefix}:xfrm`);\n this.core = createGroupTransform2D(options, `${prefix}:xfrm`);\n }\n\n public override toXml(context: Context): string {\n return this.core.toXml(context);\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\n\nimport { GroupTransform2D, type IGroupTransform2DOptions } from \"./group-transform-2d\";\n\n/**\n * p:grpSpPr — Group shape properties with CT_GroupTransform2D.\n */\nexport class GroupShapeProperties extends XmlComponent {\n public constructor(options?: IGroupTransform2DOptions) {\n super(\"p:grpSpPr\");\n this.root.push(new GroupTransform2D(options ?? {}));\n }\n}\n","import { GroupShapeProperties } from \"@file/drawingml/group-shape-properties\";\nimport { XmlComponent } from \"@file/xml-components\";\n\nimport { GroupShapeNonVisualProperties } from \"./group-shape-non-visual\";\n\n/**\n * p:spTree — Shape tree containing all shapes on a slide.\n */\nexport class ShapeTree extends XmlComponent {\n public constructor(children: readonly XmlComponent[]) {\n super(\"p:spTree\");\n this.root.push(new GroupShapeNonVisualProperties());\n this.root.push(new GroupShapeProperties());\n this.root.push(...children);\n }\n}\n","import type { Context } from \"@file/xml-components\";\nimport { ImportedXmlComponent } from \"@file/xml-components\";\n\nconst NOTES_MASTER_XML = `<p:notesMaster xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">\n <p:cSld>\n <p:bg>\n <p:bgRef idx=\"1001\">\n <a:schemeClr val=\"bg1\"/>\n </p:bgRef>\n </p:bg>\n <p:spTree>\n <p:nvGrpSpPr>\n <p:cNvPr id=\"1\" name=\"\"/>\n <p:cNvGrpSpPr/>\n <p:nvPr/>\n </p:nvGrpSpPr>\n <p:grpSpPr>\n <a:xfrm>\n <a:off x=\"0\" y=\"0\"/>\n <a:ext cx=\"0\" cy=\"0\"/>\n <a:chOff x=\"0\" y=\"0\"/>\n <a:chExt cx=\"0\" cy=\"0\"/>\n </a:xfrm>\n </p:grpSpPr>\n </p:spTree>\n </p:cSld>\n <p:clrMap bg1=\"lt1\" tx1=\"dk1\" bg2=\"lt2\" tx2=\"dk2\" accent1=\"accent1\" accent2=\"accent2\" accent3=\"accent3\" accent4=\"accent4\" accent5=\"accent5\" accent6=\"accent6\" hlink=\"hlink\" folHlink=\"folHlink\"/>\n <p:notesStyle>\n <a:lvl1pPr marL=\"0\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1200\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl1pPr>\n <a:lvl2pPr marL=\"457200\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1200\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl2pPr>\n <a:lvl3pPr marL=\"914400\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1200\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl3pPr>\n <a:lvl4pPr marL=\"1371600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1200\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl4pPr>\n <a:lvl5pPr marL=\"1828800\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1200\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl5pPr>\n <a:lvl6pPr marL=\"2286000\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1200\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl6pPr>\n <a:lvl7pPr marL=\"2743200\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1200\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl7pPr>\n <a:lvl8pPr marL=\"3200400\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1200\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl8pPr>\n <a:lvl9pPr marL=\"3657600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1200\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr>\n </a:lvl9pPr>\n </p:notesStyle>\n</p:notesMaster>`;\n\nexport class DefaultNotesMaster extends ImportedXmlComponent {\n private static instance = ImportedXmlComponent.fromXmlString(NOTES_MASTER_XML);\n\n public constructor() {\n super(\"p:notesMaster\");\n }\n\n public override toXml(context: Context): string {\n return DefaultNotesMaster.instance.toXml(context);\n }\n}\n","import {\n buildAttrObject,\n BuilderElement,\n XmlComponent,\n stringContainerObj,\n} from \"@file/xml-components\";\n\nexport interface SlideHeaderFooterOptions {\n readonly slideNumber?: boolean;\n readonly dateTime?: boolean;\n readonly footer?: string | boolean;\n readonly header?: boolean;\n}\n\n/**\n * p:hf — Slide header/footer settings.\n *\n * CT_HeaderFooter has boolean attributes (sldNum, hdr, ftr, dt) for visibility.\n * Footer text content is passed as p:ftr child element (legacy support).\n */\nexport class HeaderFooter extends XmlComponent {\n public constructor(options: SlideHeaderFooterOptions = {}) {\n super(\"p:hf\");\n\n // Boolean visibility attributes\n const attrs: Record<string, number> = {};\n if (options.slideNumber !== false) attrs.sldNum = 1;\n if (options.dateTime !== false) attrs.dt = 1;\n // Only set hdr when explicitly true (no header placeholder in default slide master)\n if (options.header === true) attrs.hdr = 1;\n // Only set ftr when explicitly true or footer has string content\n if (options.footer !== false && options.footer !== undefined) attrs.ftr = 1;\n\n if (Object.keys(attrs).length > 0) {\n this.root.push(buildAttrObject(attrs));\n }\n\n // Footer text content as child element\n if (typeof options.footer === \"string\") {\n this.root.push(\n new BuilderElement({\n name: \"p:ftr\",\n children: [\n new BuilderElement({\n name: \"p:txBody\",\n children: [\n new BuilderElement({ name: \"a:bodyPr\" }),\n new BuilderElement({ name: \"a:lstStyle\" }),\n new BuilderElement({\n name: \"a:p\",\n children: [\n new BuilderElement({\n name: \"a:r\",\n children: [stringContainerObj(\"a:t\", options.footer)],\n }),\n new BuilderElement({\n name: \"a:endParaRPr\",\n attributes: { lang: { key: \"lang\", value: \"en-US\" } },\n }),\n ],\n }),\n ],\n }),\n ],\n }),\n );\n }\n }\n}\n","export {\n File,\n type PresentationOptions,\n type SlideOptions,\n type SlideCommentOptions,\n type MasterDefinition,\n type LayoutDefinition,\n type LayoutPlaceholderOptions,\n type MasterChild,\n type SlideSize,\n} from \"./file\";\nexport { Presentation } from \"./presentation/presentation\";\nexport type { PresentationOptions as IPresentationXmlOptions } from \"./presentation/presentation\";\nexport { Shape, type ShapeOptions } from \"./shape/shape\";\nexport { TextBody, type TextBodyOptions } from \"./shape/text-body\";\nexport { Paragraph, type ParagraphOptions } from \"./shape/paragraph/paragraph\";\nexport { TextRun, type RunOptions } from \"./shape/paragraph/run\";\nexport { Text } from \"./shape/paragraph/text\";\nexport {\n RunProperties,\n UnderlineStyle,\n StrikeStyle,\n TextCapitalization,\n type RunPropertiesOptions,\n type HyperlinkOptions,\n} from \"./shape/paragraph/run-properties\";\nexport {\n ParagraphProperties,\n type TextAlignment,\n type ParagraphPropertiesOptions,\n} from \"./shape/paragraph/paragraph-properties\";\nexport { EndParagraphRunProperties } from \"./shape/paragraph/end-paragraph-run\";\nexport { Field, SlideNumberField, DateTimeField } from \"./shape/paragraph/field\";\n\n// DrawingML — re-exports from core\nexport {\n createOutline,\n type OutlineOptions as CoreOutlineOptions,\n} from \"@office-open/core/drawingml\";\nexport {\n createGradientFill,\n createGradientStop,\n type GradientFillOptions as CoreGradientFillOptions,\n type GradientStop,\n PathShadeType,\n TileFlipMode,\n} from \"@office-open/core/drawingml\";\nexport {\n LineCap,\n CompoundLine,\n PenAlignment,\n PresetDash,\n LineJoin,\n} from \"@office-open/core/drawingml\";\nexport { createScene3D, type Scene3DOptions } from \"@office-open/core/drawingml\";\nexport {\n createShape3D,\n type Shape3DOptions,\n PresetMaterialType,\n} from \"@office-open/core/drawingml\";\nexport {\n createBevel,\n createBottomBevel,\n type BevelOptions,\n BevelPresetType,\n} from \"@office-open/core/drawingml\";\nexport { createEffectList, type EffectListOptions } from \"@office-open/core/drawingml\";\nexport { createColorElement } from \"@office-open/core/drawingml\";\nexport { createColorTransforms, type ColorTransformOptions } from \"@office-open/core/drawingml\";\n\n// DrawingML — fill API\nexport {\n buildFill,\n extractBlipFillMedia,\n type BlipFillConfigOptions,\n type BlipFillMediaData,\n type FillOptions,\n type GradientStopOptions,\n} from \"./drawingml/fill\";\nexport { createOutlineCompat, type OutlineOptions } from \"./drawingml/outline\";\n\n// DrawingML — local implementations (pptx-specific)\nexport { BlipFill } from \"./drawingml/blip-fill\";\nexport { Transform2D, type ITransform2DOptions } from \"./drawingml/transform-2d\";\nexport { PresetGeometry } from \"./drawingml/preset-geometry\";\nexport { ShapeProperties, type ShapePropertiesOptions } from \"./drawingml/shape-properties\";\nexport {\n createPptxEffectList,\n ReflectionAlignment,\n type EffectsOptions,\n type ShadowOptions,\n type GlowOptions,\n type ReflectionOptions,\n type SoftEdgeOptions,\n} from \"./drawingml/effects\";\nexport { NonVisualDrawingProperties } from \"./drawingml/non-visual-drawing-props\";\nexport { NonVisualShapeProperties } from \"./drawingml/non-visual-shape-props\";\nexport { NonVisualPictureProperties } from \"./drawingml/non-visual-picture-props\";\nexport { GroupShapeProperties } from \"./drawingml/group-shape-properties\";\nexport { GroupTransform2D, type IGroupTransform2DOptions } from \"./drawingml/group-transform-2d\";\n\nexport { GroupShape, type GroupShapeOptions } from \"./shape/group-shape\";\nexport { LineShape, type LineShapeOptions } from \"./shape/line-shape\";\nexport { ConnectorShape, type ConnectorShapeOptions } from \"./shape/line-shape\";\nexport { Media } from \"./media/media\";\nexport { createTransformation, type MediaTransformation } from \"./media/media\";\nexport type { IMediaData, MediaDataTransformation } from \"./media/data\";\nexport {\n VideoFrame,\n type VideoFrameOptions,\n type VideoType,\n type PosterType,\n} from \"./media/video-frame\";\nexport { AudioFrame, type AudioFrameOptions, type AudioType } from \"./media/audio-frame\";\nexport { CoreProperties, type CorePropertiesOptions } from \"./core-properties/properties\";\nexport { AppProperties } from \"./app-properties/app-properties\";\nexport { ContentTypes } from \"./content-types/content-types\";\nexport { Relationships } from \"./relationships/relationships\";\nexport { type RelationshipType } from \"./relationships/relationship/relationship\";\nexport { Slide } from \"./slide/slide\";\nexport { type SlideChild } from \"./slide/slide-child\";\nexport { coerceChild } from \"./slide/coerce\";\nexport { ShapeTree } from \"./shape-tree/shape-tree\";\nexport {\n DefaultTheme,\n type ThemeOptions,\n type ColorSchemeOptions,\n type FontSchemeOptions,\n} from \"./theme/theme\";\nexport {\n DefaultSlideMaster,\n type SlideMasterOptions,\n type MasterPlaceholderOptions,\n type MasterPlaceholderPosition,\n} from \"./slide-master/slide-master\";\nexport { DefaultSlideLayout, SlideLayout, type SlideLayoutType } from \"./slide-layout/slide-layout\";\nexport { DefaultNotesMaster } from \"./notes-master/notes-master\";\nexport { NotesSlide, type NotesSlideOptions } from \"./notes/notes-slide\";\nexport { HeaderFooter, type SlideHeaderFooterOptions } from \"./header-footer/header-footer\";\nexport { PresentationWrapper, type ViewWrapper } from \"./presentation/presentation-wrapper\";\nexport { Picture, type PictureOptions } from \"./picture/picture\";\nexport { Background, type BackgroundOptions } from \"./background/background\";\nexport { Table, type TableOptions } from \"./table/table-frame\";\nexport { DrawingTable } from \"./table/table\";\nexport { TableRow, type TableRowOptions } from \"./table/table-row\";\nexport { TableCell, type VerticalAlignment, type TableCellOptions } from \"./table/table-cell\";\nexport { TableProperties } from \"./table/table-properties\";\nexport { TableCellProperties, type CellBorderOptions } from \"./table/table-cell-properties\";\nexport { Chart, type ChartOptions } from \"./chart/chart-frame\";\nexport { ChartCollection, type ChartData } from \"./chart/chart-collection\";\nexport { ChartSpace, type ChartSpaceOptions, type ChartSeriesData } from \"./chart/chart-space\";\nexport type { ChartType } from \"./chart/chart-types/create-chart-type\";\nexport { SmartArt, type SmartArtOptions, type TreeNode } from \"./smartart\";\nexport {\n Transition,\n type TransitionOptions,\n type TransitionType,\n type TransitionDirection,\n} from \"./transition/transition\";\nexport {\n type AnimationType,\n type AnimationTrigger,\n type AnimationDirection,\n type AnimationClass,\n type EmphasisType,\n type PathAnimationType,\n type MediaAnimationType,\n type AnimationCalcMode,\n type AnimationValueType,\n type AnimationOptions,\n} from \"./animation/types\";\n","import { formatId } from \"@office-open/core\";\n\nexport function replaceHyperlinkPlaceholders(\n xml: string,\n hyperlinks: readonly { readonly key: string }[],\n offset: number,\n): string {\n let result = xml;\n for (let i = 0; i < hyperlinks.length; i++) {\n result = result.replaceAll(`{hlink:${hyperlinks[i].key}}`, formatId(offset, i, \"rId\"));\n }\n return result;\n}\n","import { formatId } from \"@office-open/core\";\n\nexport function replaceMediaPlaceholders(\n xml: string,\n mediaData: readonly { readonly fileName: string }[],\n offset: number,\n): string {\n let result = xml;\n for (let i = 0; i < mediaData.length; i++) {\n result = result.replaceAll(`{media:${mediaData[i].fileName}}`, formatId(offset, i, \"rId\"));\n }\n return result;\n}\n\nexport function replaceVideoPlaceholders(\n xml: string,\n mediaData: readonly { readonly fileName: string }[],\n offset: number,\n): string {\n let result = xml;\n for (let i = 0; i < mediaData.length; i++) {\n result = result.replaceAll(`{video:${mediaData[i].fileName}}`, formatId(offset, i, \"rId\"));\n }\n return result;\n}\n\nexport function getMediaRefs(\n xml: string,\n mediaArray: readonly { readonly fileName: string }[],\n): readonly { readonly fileName: string }[] {\n return collectRefs(xml, \"{media:\", mediaArray);\n}\n\nexport function getVideoRefs(\n xml: string,\n mediaArray: readonly { readonly fileName: string }[],\n): readonly { readonly fileName: string }[] {\n return collectRefs(xml, \"{video:\", mediaArray);\n}\n\nfunction collectRefs(\n xml: string,\n search: string,\n mediaArray: readonly { readonly fileName: string }[],\n): readonly { readonly fileName: string }[] {\n const keys = new Set<string>();\n let pos = 0;\n while ((pos = xml.indexOf(search, pos)) !== -1) {\n const keyStart = pos + search.length;\n const keyEnd = xml.indexOf(\"}\", keyStart);\n if (keyEnd === -1) break;\n keys.add(xml.substring(keyStart, keyEnd));\n pos = keyEnd + 1;\n }\n return mediaArray.filter((m) => keys.has(m.fileName));\n}\n","import { Formatter } from \"@export/formatter\";\nimport type { File } from \"@file/file\";\nimport type { IMediaData } from \"@file/media/data\";\nimport { DefaultNotesMaster } from \"@file/notes-master/notes-master\";\nimport { Relationships } from \"@file/relationships/relationships\";\nimport {\n DEFAULT_DRAWING_XML,\n getColorXml,\n getLayoutXml,\n getStyleXml,\n} from \"@file/smartart/built-in-definitions\";\nimport { DefaultTheme } from \"@file/theme/theme\";\nimport type { Context } from \"@file/xml-components\";\nimport {\n addSmartArtRelationships,\n collectPlaceholderKeys,\n compileMapping,\n getReferencedMedia,\n hasPlaceholders,\n replaceChartPlaceholders,\n replaceImagePlaceholders,\n replaceSmartArtPlaceholders,\n} from \"@office-open/core\";\nimport type { XmlifyedFile, ZipOptions, Zippable } from \"@office-open/core\";\nimport { xml } from \"@office-open/xml\";\n\n/** Reusable TextEncoder (stateless, safe to share). */\nconst encoder = new TextEncoder();\n\ninterface XmlifyedFileMapping {\n [key: string]: { data: string; path: string };\n}\n\nimport { replaceHyperlinkPlaceholders } from \"./hyperlink-placeholders\";\nimport {\n getMediaRefs,\n getVideoRefs,\n replaceMediaPlaceholders,\n replaceVideoPlaceholders,\n} from \"./media-placeholders\";\n\nexport class Compiler {\n private readonly formatter = new Formatter();\n\n public compile(\n file: File,\n overrides: readonly XmlifyedFile[] = [],\n mediaLevel: number = 0,\n ): Zippable {\n const context: Context = { fileData: file, stack: [] };\n\n const mapping: XmlifyedFileMapping = {\n AppProperties: {\n data: this.formatter.formatToXml(file.appProperties, context),\n path: \"docProps/app.xml\",\n },\n Properties: {\n data: this.formatter.formatToXml(file.coreProperties, context),\n path: \"docProps/core.xml\",\n },\n FileRelationships: {\n data: this.formatter.formatToXml(file.fileRelationships, context),\n path: \"_rels/.rels\",\n },\n };\n\n // Static singletons (ImportedXmlComponent.toXml uses sourceXml directly)\n // Themes (one per master)\n const themes = file.themes;\n for (let ti = 0; ti < themes.length; ti++) {\n mapping[`Theme${ti}`] = {\n data: this.formatter.formatToXml(themes[ti], context),\n path: `ppt/theme/theme${ti + 1}.xml`,\n };\n }\n\n mapping[\"TableStyles\"] = {\n data: this.formatter.formatToXml(file.tableStyles, context),\n path: \"ppt/tableStyles.xml\",\n };\n\n mapping[\"PresProps\"] = {\n data: this.formatter.formatToXml(file.presProps, context),\n path: \"ppt/presProps.xml\",\n };\n\n mapping[\"ViewProps\"] = {\n data: this.formatter.formatToXml(file.viewProps, context),\n path: \"ppt/viewProps.xml\",\n };\n\n // Slide Masters\n const masters = file.slideMasters;\n const masterRels = file.slideMasterRelsArray;\n for (let mi = 0; mi < masters.length; mi++) {\n mapping[`SlideMaster${mi}`] = {\n data: this.formatter.formatToXml(masters[mi], context),\n path: `ppt/slideMasters/slideMaster${mi + 1}.xml`,\n };\n mapping[`SlideMasterRels${mi}`] = {\n data: this.formatter.formatToXml(masterRels[mi], context),\n path: `ppt/slideMasters/_rels/slideMaster${mi + 1}.xml.rels`,\n };\n }\n\n // Slide Layouts\n const layouts = file.allLayouts;\n const layoutRels = file.allLayoutRelsArray;\n for (let li = 0; li < layouts.length; li++) {\n mapping[`SlideLayout${li}`] = {\n data: this.formatter.formatToXml(layouts[li].layout, context),\n path: `ppt/slideLayouts/slideLayout${li + 1}.xml`,\n };\n mapping[`SlideLayoutRels${li}`] = {\n data: this.formatter.formatToXml(layoutRels[li], context),\n path: `ppt/slideLayouts/_rels/slideLayout${li + 1}.xml.rels`,\n };\n }\n\n // Register layout content types\n for (let i = 0; i < layouts.length; i++) {\n file.contentTypes.addSlideLayout(i + 1);\n }\n // Register master + theme content types\n for (let mi = 0; mi < masters.length; mi++) {\n file.contentTypes.addSlideMaster(mi + 1);\n file.contentTypes.addTheme(mi + 1);\n }\n\n // Notes Master — only when notes slides exist\n if (file.notesSlides.length > 0) {\n const notesMasterRId = file.presentationWrapper.relationships.relationshipCount + 1;\n file.presentationWrapper.relationships.addRelationship(\n notesMasterRId,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster\",\n \"notesMasters/notesMaster1.xml\",\n );\n file.presentationWrapper.view.setNotesMasterRId(notesMasterRId);\n const notesMasterThemeIndex = themes.length + 1;\n mapping[\"NotesMaster\"] = {\n data: this.formatter.formatToXml(new DefaultNotesMaster(), context),\n path: \"ppt/notesMasters/notesMaster1.xml\",\n };\n const notesMasterTheme = new DefaultTheme();\n mapping[\"NotesMasterTheme\"] = {\n data: this.formatter.formatToXml(notesMasterTheme, context),\n path: `ppt/theme/theme${notesMasterThemeIndex}.xml`,\n };\n file.contentTypes.addTheme(notesMasterThemeIndex);\n const notesMasterRels = new Relationships();\n notesMasterRels.addRelationship(\n 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n `../theme/theme${notesMasterThemeIndex}.xml`,\n );\n mapping[\"NotesMasterRelationships\"] = {\n data: this.formatter.formatToXml(notesMasterRels, context),\n path: \"ppt/notesMasters/_rels/notesMaster1.xml.rels\",\n };\n }\n\n // Comment Authors — only when comments exist\n if (file.commentAuthorList) {\n file.presentationWrapper.relationships.addRelationship(\n file.presentationWrapper.relationships.relationshipCount + 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/commentAuthors\",\n \"commentAuthors.xml\",\n );\n }\n\n // Presentation + its relationships\n const presentationXml = this.formatter.formatToXml(file.presentationWrapper.view, context);\n let currentImageCount = 0;\n\n const mediaData = getReferencedMedia(presentationXml, file.media.array);\n const presImageOffset = file.presentationWrapper.relationships.relationshipCount + 1;\n for (let idx = 0; idx < mediaData.length; idx++) {\n file.presentationWrapper.relationships.addRelationship(\n presImageOffset + idx,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n `../media/${mediaData[idx].fileName}`,\n );\n }\n\n const replacedPresentationXml = replaceImagePlaceholders(\n presentationXml,\n mediaData,\n presImageOffset,\n );\n currentImageCount += mediaData.length;\n\n mapping[\"Presentation\"] = {\n data: replacedPresentationXml,\n path: \"ppt/presentation.xml\",\n };\n\n mapping[\"PresentationRelationships\"] = {\n data: this.formatter.formatToXml(file.presentationWrapper.relationships, context),\n path: \"ppt/_rels/presentation.xml.rels\",\n };\n\n // Slides — format BEFORE ContentTypes so Chart.toXml() populates Charts\n for (let i = 0; i < file.slides.length; i++) {\n const slideWrapper = file.slideWrappers[i];\n const slideXml = this.formatter.formatToXml(slideWrapper.view, context);\n\n const slideMediaData = getReferencedMedia(slideXml, file.media.array);\n const slideImageOffset = slideWrapper.relationships.relationshipCount + 1;\n for (let idx = 0; idx < slideMediaData.length; idx++) {\n slideWrapper.relationships.addRelationship(\n slideImageOffset + idx,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n `../media/${slideMediaData[idx].fileName}`,\n );\n }\n\n let replacedSlideXml = replaceImagePlaceholders(slideXml, slideMediaData, slideImageOffset);\n currentImageCount += slideMediaData.length;\n\n // Placeholder replacement — single pre-check avoids 4 regex scans when none exist\n if (hasPlaceholders(replacedSlideXml)) {\n // Chart placeholder replacement\n const slideChartKeys = collectPlaceholderKeys(replacedSlideXml, \"chart:\");\n if (slideChartKeys.length > 0) {\n const slideChartOffset = slideWrapper.relationships.relationshipCount + 1;\n const slideChartKeySet = new Set(slideChartKeys);\n const slideCharts = file.charts.array.filter((c) => slideChartKeySet.has(c.key));\n\n replacedSlideXml = replaceChartPlaceholders(\n replacedSlideXml,\n slideCharts.map((c) => c.key),\n slideChartOffset,\n );\n\n for (let ci = 0; ci < slideCharts.length; ci++) {\n const chartData = slideCharts[ci];\n const globalIndex = file.charts.array.indexOf(chartData);\n slideWrapper.relationships.addRelationship(\n slideChartOffset + ci,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\",\n `../charts/chart${globalIndex + 1}.xml`,\n );\n }\n }\n\n // SmartArt placeholder replacement\n const slideSmartArtKeys = collectPlaceholderKeys(replacedSlideXml, \"smartart:\");\n if (slideSmartArtKeys.length > 0) {\n const slideSmartArtKeySet = new Set(slideSmartArtKeys);\n const slideSmartArts = file.smartArts.array.filter((s) => slideSmartArtKeySet.has(s.key));\n const saOffset = slideWrapper.relationships.relationshipCount + 1;\n\n replacedSlideXml = replaceSmartArtPlaceholders(\n replacedSlideXml,\n slideSmartArts.map((s) => s.key),\n saOffset,\n );\n\n const saGlobalStart = file.smartArts.array.indexOf(slideSmartArts[0]);\n addSmartArtRelationships(\n slideSmartArts.map((s) => s.key),\n (id, type, target) => {\n slideWrapper.relationships.addRelationship(id, type, target);\n },\n saOffset,\n saGlobalStart,\n {\n pathPrefix: \"../\",\n styleRelType:\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramQuickStyle\",\n },\n );\n }\n\n // Hyperlink placeholder replacement\n const slideHlinkKeys = collectPlaceholderKeys(replacedSlideXml, \"hlink:\");\n if (slideHlinkKeys.length > 0) {\n const slideHlinkKeySet = new Set(slideHlinkKeys);\n const slideHlinks = file.hyperlinks.array.filter((h) => slideHlinkKeySet.has(h.key));\n const hlinkOffset = slideWrapper.relationships.relationshipCount + 1;\n\n replacedSlideXml = replaceHyperlinkPlaceholders(\n replacedSlideXml,\n slideHlinks,\n hlinkOffset,\n );\n\n for (let hi = 0; hi < slideHlinks.length; hi++) {\n slideWrapper.relationships.addRelationship(\n hlinkOffset + hi,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",\n slideHlinks[hi].url,\n \"External\",\n );\n }\n }\n\n // Media (video/audio) placeholder replacement\n const slideMediaRefs = getMediaRefs(replacedSlideXml, file.media.array);\n const slideVideoRefs = getVideoRefs(replacedSlideXml, file.media.array);\n\n if (slideMediaRefs.length > 0 || slideVideoRefs.length > 0) {\n const mediaOffset = slideWrapper.relationships.relationshipCount + 1;\n const videoOffset = mediaOffset + slideMediaRefs.length;\n\n replacedSlideXml = replaceMediaPlaceholders(\n replacedSlideXml,\n slideMediaRefs,\n mediaOffset,\n );\n\n replacedSlideXml = replaceVideoPlaceholders(\n replacedSlideXml,\n slideVideoRefs,\n videoOffset,\n );\n\n for (let mi = 0; mi < slideMediaRefs.length; mi++) {\n slideWrapper.relationships.addRelationship(\n mediaOffset + mi,\n \"http://schemas.microsoft.com/office/2007/relationships/media\",\n `../media/${slideMediaRefs[mi].fileName}`,\n );\n }\n\n for (let vi = 0; vi < slideVideoRefs.length; vi++) {\n slideWrapper.relationships.addRelationship(\n videoOffset + vi,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/video\",\n `../media/${slideVideoRefs[vi].fileName}`,\n );\n }\n }\n }\n\n mapping[`Slide${i}`] = {\n data: replacedSlideXml,\n path: `ppt/slides/slide${i + 1}.xml`,\n };\n\n // Add comment relationship for this slide\n const slideComments = file.slideCommentLists[i];\n if (slideComments) {\n slideWrapper.relationships.addRelationship(\n slideWrapper.relationships.relationshipCount + 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\",\n `../comments/comment${i + 1}.xml`,\n );\n }\n\n // Add notesSlide relationship for this slide (if it has notes)\n const notesSlideIndex = file.notesSlideIndexMap.get(i);\n if (notesSlideIndex !== undefined) {\n slideWrapper.relationships.addRelationship(\n slideWrapper.relationships.relationshipCount + 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide\",\n `../notesSlides/notesSlide${notesSlideIndex + 1}.xml`,\n );\n }\n\n mapping[`SlideRelationships${i}`] = {\n data: this.formatter.formatToXml(slideWrapper.relationships, context),\n path: `ppt/slides/_rels/slide${i + 1}.xml.rels`,\n };\n }\n\n // ContentTypes — AFTER slides so Charts.Array is populated\n for (let i = 0; i < file.charts.array.length; i++) {\n file.contentTypes.addChart(i + 1);\n }\n for (let i = 0; i < file.smartArts.array.length; i++) {\n file.contentTypes.addDiagramData(i + 1);\n file.contentTypes.addDiagramLayout(i + 1);\n file.contentTypes.addDiagramStyle(i + 1);\n file.contentTypes.addDiagramColors(i + 1);\n file.contentTypes.addDiagramDrawing(i + 1);\n }\n mapping[\"ContentTypes\"] = {\n data: this.formatter.formatToXml(file.contentTypes, context),\n path: \"[Content_Types].xml\",\n };\n\n // Convert mapping to Zippable (XML files use global DEFLATE default)\n const files = compileMapping(mapping, overrides);\n\n // Add chart parts\n for (let i = 0; i < file.charts.array.length; i++) {\n const chartData = file.charts.array[i];\n files[`ppt/charts/chart${i + 1}.xml`] = encoder.encode(\n this.formatter.formatToXml(chartData.chartSpace, context),\n );\n files[`ppt/charts/_rels/chart${i + 1}.xml.rels`] = encoder.encode(\n xml(\n {\n Relationships: {\n _attr: {\n xmlns: \"http://schemas.openxmlformats.org/package/2006/relationships\",\n },\n },\n },\n { declaration: { encoding: \"UTF-8\", standalone: \"yes\" } },\n ),\n );\n }\n\n // Add SmartArt diagram parts\n for (let i = 0; i < file.smartArts.array.length; i++) {\n const smartArtData = file.smartArts.array[i];\n files[`ppt/diagrams/data${i + 1}.xml`] = encoder.encode(\n this.formatter.formatToXml(smartArtData.dataModel, context),\n );\n files[`ppt/diagrams/layout${i + 1}.xml`] = encoder.encode(getLayoutXml(smartArtData.layout));\n files[`ppt/diagrams/quickStyle${i + 1}.xml`] = encoder.encode(\n getStyleXml(smartArtData.style),\n );\n files[`ppt/diagrams/colors${i + 1}.xml`] = encoder.encode(getColorXml(smartArtData.color));\n files[`ppt/diagrams/drawing${i + 1}.xml`] = encoder.encode(DEFAULT_DRAWING_XML);\n }\n\n // Add notes slides\n const notesSlideToSlide = new Map<number, number>();\n for (const [slideIdx, notesIdx] of file.notesSlideIndexMap) {\n notesSlideToSlide.set(notesIdx, slideIdx);\n }\n for (let i = 0; i < file.notesSlides.length; i++) {\n const notesSlide = file.notesSlides[i];\n files[`ppt/notesSlides/notesSlide${i + 1}.xml`] = encoder.encode(\n this.formatter.formatToXml(notesSlide, context),\n );\n const slideIdx = notesSlideToSlide.get(i) ?? 0;\n const nsRels = new Relationships();\n nsRels.addRelationship(\n 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster\",\n \"../notesMasters/notesMaster1.xml\",\n );\n nsRels.addRelationship(\n 2,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide\",\n `../slides/slide${slideIdx + 1}.xml`,\n );\n files[`ppt/notesSlides/_rels/notesSlide${i + 1}.xml.rels`] = encoder.encode(\n this.formatter.formatToXml(nsRels, context),\n );\n }\n\n // Add comment authors\n if (file.commentAuthorList) {\n files[\"ppt/commentAuthors.xml\"] = encoder.encode(\n this.formatter.formatToXml(file.commentAuthorList, context),\n );\n }\n\n // Add slide comments\n const commentLists = file.slideCommentLists;\n for (let i = 0; i < commentLists.length; i++) {\n if (commentLists[i]) {\n files[`ppt/comments/comment${i + 1}.xml`] = encoder.encode(\n this.formatter.formatToXml(commentLists[i]!, context),\n );\n }\n }\n\n // Add media files\n for (const image of file.media.array) {\n files[`ppt/media/${image.fileName}`] = [\n image.data,\n { level: mediaLevel as ZipOptions[\"level\"] },\n ];\n if (image.type === \"svg\" && \"fallback\" in image) {\n const fallback = (\n image as IMediaData & {\n readonly fallback: { readonly fileName: string; readonly data: Uint8Array };\n }\n ).fallback;\n files[`ppt/media/${fallback.fileName}`] = [\n fallback.data,\n { level: mediaLevel as ZipOptions[\"level\"] },\n ];\n }\n }\n\n return files;\n }\n}\n","import type { File } from \"@file/file\";\nimport { createPacker, OoxmlMimeType } from \"@office-open/core\";\n\nimport { Compiler } from \"./next-compiler\";\n\nconst compiler = new Compiler();\n\nexport const Packer = createPacker<File>({\n compile: (file, overrides, mediaLevel) => compiler.compile(file, overrides, mediaLevel),\n mimeType: OoxmlMimeType.PPTX,\n});\n","export {\n convertPixelsToEmu,\n convertEmuToPixels,\n convertInchesToEmu,\n convertEmuToInches,\n convertPointsToEmu,\n convertEmuToPoints,\n} from \"@office-open/core\";\n\n/** Convert percentage to thousandths of a percent (used in some OOXML attributes) */\nexport const percentToTHousandths = (percent: number): number => Math.round(percent * 1000);\n\n/** Common slide size presets (in pixels at 96 DPI) */\nexport const SlideSizePreset = {\n WIDE: { width: 960, height: 540 },\n STANDARD_4X3: { width: 720, height: 540 },\n WIDESCREEN_16X10: { width: 960, height: 600 },\n WIDESCREEN_16X9: { width: 960, height: 540 },\n} as const;\n","export * from \"./convenience-functions\";\nexport * from \"./types\";\nexport * from \"./values\";\n","/**\n * Parse context for PPTX documents.\n *\n * @module\n */\nimport type { PptxDocument } from \"../parse\";\n\nexport class ParseContext {\n constructor(\n readonly pptx: PptxDocument,\n /** Slide relationship ID → path, parsed from slide's _rels file */\n readonly slideRels: Map<string, string>,\n ) {}\n}\n","/**\n * Animation parser for PPTX documents.\n *\n * Parses p:timing elements and maps animations to their target shapes.\n *\n * @module\n */\nimport { attr, attrNum, findChild } from \"@office-open/xml\";\nimport type { Element } from \"@office-open/xml\";\n\nimport type {\n AnimationOptions,\n AnimationType,\n EmphasisType,\n PathAnimationType,\n} from \"../file/animation/types\";\n\n// Reverse lookup maps: presetID → type name\nconst ENTR_PRESET_TO_TYPE = new Map<number, AnimationType>();\nconst EXIT_PRESET_TO_TYPE = new Map<number, AnimationType>();\nconst EMPH_PRESET_TO_ID = new Map<number, EmphasisType>();\nconst PATH_PRESET_TO_TYPE = new Map<number, PathAnimationType>();\n\n// Build reverse maps (inline to avoid importing from file module)\nconst ENTR_IDS: Record<AnimationType, number> = {\n appear: 1,\n fade: 10,\n fly: 2,\n wipe: 22,\n dissolve: 34,\n split: 21,\n blinds: 25,\n checker: 26,\n randomBars: 24,\n wheel: 27,\n zoom: 10,\n cover: 28,\n push: 19,\n strips: 23,\n};\nconst EXIT_IDS: Record<AnimationType, number> = {\n appear: 53,\n fade: 59,\n fly: 51,\n wipe: 72,\n dissolve: 84,\n split: 71,\n blinds: 75,\n checker: 76,\n randomBars: 74,\n wheel: 77,\n zoom: 60,\n cover: 78,\n push: 69,\n strips: 73,\n};\nconst EMPH_IDS: Record<EmphasisType, number> = {\n growShrink: 53,\n spin: 54,\n growWithTurn: 56,\n colorChange: 29,\n transparency: 57,\n boldFlash: 50,\n wave: 55,\n pulse: 58,\n};\nconst PATH_IDS: Record<PathAnimationType, number> = {\n customPath: 200,\n arc: 201,\n bounce: 202,\n circle: 203,\n curve: 204,\n figureEight: 205,\n line: 206,\n loop: 207,\n};\n\nfor (const [k, v] of Object.entries(ENTR_IDS)) ENTR_PRESET_TO_TYPE.set(v, k as AnimationType);\nfor (const [k, v] of Object.entries(EXIT_IDS)) EXIT_PRESET_TO_TYPE.set(v, k as AnimationType);\nfor (const [k, v] of Object.entries(EMPH_IDS)) EMPH_PRESET_TO_ID.set(v, k as EmphasisType);\nfor (const [k, v] of Object.entries(PATH_IDS)) PATH_PRESET_TO_TYPE.set(v, k as PathAnimationType);\n\n// Direction subtype reverse map\nconst SUBTYPE_TO_DIRECTION = new Map<number, string>();\nconst DIRECTION_SUBTYPES: Record<string, number> = {\n left: 4,\n right: 8,\n up: 2,\n down: 1,\n horizontal: 16,\n vertical: 32,\n};\nfor (const [k, v] of Object.entries(DIRECTION_SUBTYPES)) SUBTYPE_TO_DIRECTION.set(v, k);\n\n/**\n * Parse p:timing element and return a map of shape ID → AnimationOptions.\n */\nexport function parseTiming(el: Element): Map<number, AnimationOptions> {\n const result = new Map<number, AnimationOptions>();\n\n // p:timing > p:tnLst > p:par > p:cTn(nodeType=mainSeq) > p:childTnLst > p:seq\n const tnLst = findChild(el, \"p:tnLst\");\n if (!tnLst) return result;\n\n const mainPar = findChild(tnLst, \"p:par\");\n if (!mainPar) return result;\n\n const mainCTn = findChild(mainPar, \"p:cTn\");\n if (!mainCTn) return result;\n\n const childTnLst = findChild(mainCTn, \"p:childTnLst\");\n if (!childTnLst) return result;\n\n const seq = findChild(childTnLst, \"p:seq\");\n if (!seq) return result;\n\n const seqCTn = findChild(seq, \"p:cTn\");\n const seqChildTnLst = seqCTn ? findChild(seqCTn, \"p:childTnLst\") : undefined;\n if (!seqChildTnLst) return result;\n\n // Each p:par in the seq childTnLst is an animation sequence entry\n for (const parEl of seqChildTnLst.elements ?? []) {\n if (parEl.name !== \"p:par\") continue;\n\n const parCTn = findChild(parEl, \"p:cTn\");\n if (!parCTn) continue;\n\n const parChildTnLst = findChild(parCTn, \"p:childTnLst\");\n if (!parChildTnLst) continue;\n\n // Iterate effects within the par\n for (const effectEl of parChildTnLst.elements ?? []) {\n const anim = parseAnimationEffect(effectEl);\n if (!anim) continue;\n\n // Extract target shape ID\n const shapeId = extractTargetShapeId(effectEl);\n if (shapeId !== undefined) {\n result.set(shapeId, anim);\n }\n }\n }\n\n return result;\n}\n\nfunction parseAnimationEffect(el: Element): AnimationOptions | undefined {\n const opts: Record<string, unknown> = {};\n\n const cTn = findChild(el, \"p:cTn\") ?? el;\n\n // Trigger type from nodeType\n const nodeType = attr(cTn, \"nodeType\");\n if (nodeType === \"clickEffect\") opts.trigger = \"onClick\";\n else if (nodeType === \"withEffect\") opts.trigger = \"withPrevious\";\n else if (nodeType === \"afterEffect\") opts.trigger = \"afterPrevious\";\n\n // Preset class (entr/exit/emph/mediacall)\n const presetClass = attr(cTn, \"presetClass\");\n if (presetClass) opts.class = presetClass;\n\n // Preset ID → animation type\n const presetID = attrNum(cTn, \"presetID\");\n\n // Duration\n const dur = attr(cTn, \"dur\");\n if (dur) {\n const ms = parseDuration(dur);\n if (ms !== undefined) opts.duration = ms;\n }\n\n // Delay from p:stCondLst\n const stCondLst = findChild(cTn, \"p:stCondLst\");\n if (stCondLst) {\n const cond = findChild(stCondLst, \"p:cond\");\n if (cond) {\n const delay = attr(cond, \"delay\");\n if (delay) {\n const ms = parseDuration(delay);\n if (ms !== undefined) opts.delay = ms;\n }\n }\n }\n\n // Direction from presetSubtype\n const presetSubtype = attrNum(cTn, \"presetSubtype\");\n if (presetSubtype !== undefined) {\n const dir = SUBTYPE_TO_DIRECTION.get(presetSubtype);\n if (dir) opts.direction = dir as AnimationOptions[\"direction\"];\n }\n\n // Determine type from presetID and class\n if (presetID !== undefined) {\n const cls = presetClass ?? \"entr\";\n if (cls === \"entr\") {\n const type = ENTR_PRESET_TO_TYPE.get(presetID);\n if (type) opts.type = type;\n } else if (cls === \"exit\") {\n const type = EXIT_PRESET_TO_TYPE.get(presetID);\n if (type) opts.type = type;\n } else if (cls === \"emph\") {\n const emphType = EMPH_PRESET_TO_ID.get(presetID);\n if (emphType) {\n opts.emphasisType = emphType;\n opts.type = \"appear\"; // fallback type\n }\n } else if (cls === \"mediacall\") {\n opts.mediaType = \"play\";\n opts.type = \"appear\";\n }\n }\n\n // Check for sub-effect types\n const childTnLst = findChild(cTn, \"p:childTnLst\");\n if (childTnLst) {\n for (const sub of childTnLst.elements ?? []) {\n switch (sub.name) {\n case \"p:animEffect\": {\n // Duration is inside p:animEffect > p:cBhvr > p:cTn\n if (opts.duration === undefined) {\n const cBhvr = findChild(sub, \"p:cBhvr\");\n const subCTn = cBhvr ? findChild(cBhvr, \"p:cTn\") : undefined;\n if (subCTn) {\n const subDur = attr(subCTn, \"dur\");\n if (subDur) {\n const ms = parseDuration(subDur);\n if (ms !== undefined) opts.duration = ms;\n }\n }\n }\n break;\n }\n case \"p:anim\": {\n const subCTn = findChild(sub, \"p:cTn\");\n if (subCTn) {\n const attrName = findChild(subCTn, \"p:attrNameLst\");\n if (attrName) {\n const name = findChild(attrName, \"p:attrName\");\n if (name) {\n const text = name.elements?.[0]?.text;\n if (text) opts.attributeName = text as string;\n }\n }\n }\n const from = findChild(sub, \"p:cb\");\n if (from) {\n const val = findChild(from, \"p:val\");\n if (val) {\n const v = attr(val, \"val\");\n if (v) opts.from = v;\n }\n }\n // Simplified: look at to value from tavLst\n const toEl = findChild(sub, \"p:tavLst\");\n if (toEl) {\n const tav = findChild(toEl, \"p:tav\");\n if (tav) {\n const toVal = findChild(tav, \"p:val\");\n if (toVal) {\n const v = attr(toVal, \"val\");\n if (v) opts.to = v;\n }\n }\n }\n break;\n }\n case \"p:animMotion\": {\n opts.pathType = \"customPath\" as PathAnimationType;\n const path = attr(sub, \"path\");\n if (path) opts.path = path;\n break;\n }\n case \"p:animScale\": {\n opts.emphasisType = \"growShrink\" as EmphasisType;\n readSubDuration(sub, opts);\n break;\n }\n case \"p:animRot\": {\n opts.emphasisType = \"spin\" as EmphasisType;\n readSubDuration(sub, opts);\n break;\n }\n case \"p:animClr\": {\n opts.emphasisType = \"colorChange\" as EmphasisType;\n readSubDuration(sub, opts);\n break;\n }\n case \"p:cmd\": {\n const cmdType = attr(sub, \"type\");\n if (cmdType === \"call\") opts.mediaType = \"play\";\n break;\n }\n }\n }\n }\n\n return Object.keys(opts).length > 0 ? (opts as AnimationOptions) : undefined;\n}\n\nfunction extractTargetShapeId(el: Element): number | undefined {\n // Look for p:cBhvr > p:tgtEl > p:spTgt > @spid\n const cBhvr = findDeep(el, \"p:cBhvr\")[0];\n if (!cBhvr) return undefined;\n\n const tgtEl = findChild(cBhvr, \"p:tgtEl\");\n if (!tgtEl) return undefined;\n\n const spTgt = findChild(tgtEl, \"p:spTgt\");\n if (!spTgt) return undefined;\n\n return attrNum(spTgt, \"spid\");\n}\n\nfunction findDeep(parent: Element, name: string): Element[] {\n const results: Element[] = [];\n\n function walk(el: Element): void {\n if (el.name === name) {\n results.push(el);\n return;\n }\n for (const child of el.elements ?? []) {\n walk(child);\n }\n }\n\n for (const child of parent.elements ?? []) {\n walk(child);\n }\n return results;\n}\n\n/**\n * Read duration from p:cBhvr > p:cTn inside a sub-effect element.\n */\nfunction readSubDuration(sub: Element, opts: Record<string, unknown>): void {\n if (opts.duration !== undefined) return;\n const cBhvr = findChild(sub, \"p:cBhvr\");\n const subCTn = cBhvr ? findChild(cBhvr, \"p:cTn\") : undefined;\n if (subCTn) {\n const subDur = attr(subCTn, \"dur\");\n if (subDur) {\n const ms = parseDuration(subDur);\n if (ms !== undefined) opts.duration = ms;\n }\n }\n}\n\n/**\n * Parse OOXML duration string to milliseconds.\n * Format: \"PT#H#M#S\" or \"###ms\" or just a number string\n */\nfunction parseDuration(val: string): number | undefined {\n // \"PT0.5S\" → 500, \"PT1S\" → 1000, \"PT0S\" → 0\n if (val.startsWith(\"PT\")) {\n let ms = 0;\n const sMatch = val.match(/(\\d+\\.?\\d*)S/);\n if (sMatch) ms += Math.round(parseFloat(sMatch[1]) * 1000);\n const mMatch = val.match(/(\\d+\\.?\\d*)M/);\n if (mMatch) ms += Math.round(parseFloat(mMatch[1]) * 60000);\n const hMatch = val.match(/(\\d+\\.?\\d*)H/);\n if (hMatch) ms += Math.round(parseFloat(hMatch[1]) * 3600000);\n return ms;\n }\n // \"indefinite\" → undefined\n if (val === \"indefinite\") return undefined;\n // Plain number string (already ms)\n const num = parseInt(val, 10);\n return isNaN(num) ? undefined : num;\n}\n","/**\n * Slide parser for PPTX documents.\n *\n * Parses p:sld elements into SlideOptions.\n *\n * @module\n */\nimport { convertEmuToPixels, xsdLineEndSize } from \"@office-open/core\";\nimport {\n attr,\n attrBool,\n attrNum,\n children,\n colorAttr,\n findChild,\n findDeep,\n textOf,\n} from \"@office-open/xml\";\nimport type { Element } from \"@office-open/xml\";\n\nimport type { BackgroundOptions } from \"../file/background/background\";\nimport type { ChartOptions } from \"../file/chart/chart-frame\";\nimport type { SlideOptions } from \"../file/file\";\nimport type { AudioFrameOptions } from \"../file/media/audio-frame\";\nimport type { VideoFrameOptions } from \"../file/media/video-frame\";\nimport type { PictureOptions } from \"../file/picture/picture\";\nimport type { GroupShapeOptions } from \"../file/shape/group-shape\";\nimport type {\n ArrowheadType,\n ConnectorShapeOptions,\n LineShapeOptions,\n} from \"../file/shape/line-shape\";\nimport type { ShapeOptions } from \"../file/shape/shape\";\nimport type { SlideChild } from \"../file/slide/slide-child\";\nimport type { SmartArtOptions } from \"../file/smartart/smartart-frame\";\nimport type { TableOptions } from \"../file/table/table-frame\";\nimport type {\n TransitionOptions,\n TransitionDirection,\n TransitionType,\n} from \"../file/transition/transition\";\nimport { parseTiming } from \"./animation\";\nimport type { ParseContext } from \"./context\";\n\n// ── Slide parser ──────────────────────────────────────────────────────────────\n\n/**\n * Parse a p:sld element into SlideOptions.\n */\nexport function parseSlide(el: Element, ctx: ParseContext): SlideOptions {\n const opts: Record<string, unknown> = {};\n\n // p:cSld\n const cSld = findChild(el, \"p:cSld\");\n if (cSld) {\n // Background\n const bg = findChild(cSld, \"p:bg\");\n if (bg) opts.background = parseBackground(bg);\n\n // Shape tree → children\n const spTree = findChild(cSld, \"p:spTree\");\n if (spTree) {\n const slideChildren: SlideChild[] = [];\n for (const child of spTree.elements ?? []) {\n const parsed = parseSlideChild(child, ctx);\n if (parsed !== undefined) slideChildren.push(parsed);\n }\n if (slideChildren.length > 0) opts.children = slideChildren;\n }\n\n // Header/Footer (p:hf)\n const hf = findChild(cSld, \"p:hf\");\n if (hf) {\n const hfOpts: Record<string, unknown> = {};\n if (findChild(hf, \"p:sldNum\")) hfOpts.slideNumber = true;\n if (findChild(hf, \"p:dt\")) hfOpts.dateTime = true;\n if (findChild(hf, \"p:ftr\")) hfOpts.footer = true;\n if (findChild(hf, \"p:hdr\")) hfOpts.header = true;\n if (Object.keys(hfOpts).length > 0) opts.headerFooter = hfOpts;\n }\n }\n\n // p:transition\n const transition = findChild(el, \"p:transition\");\n if (transition) opts.transition = parseTransition(transition);\n\n // p:timing → animation (attach to shapes by ID)\n const timing = findChild(el, \"p:timing\");\n if (timing) {\n const animMap = parseTiming(timing);\n if (animMap.size > 0 && opts.children) {\n // Build ID → child index map\n const children = opts.children as SlideChild[];\n for (let i = 0; i < children.length; i++) {\n const child = children[i] as Record<string, unknown>;\n const inner = (child[Object.keys(child)[0]] ?? {}) as Record<string, unknown>;\n const shapeId = inner.id as number | undefined;\n if (shapeId !== undefined && animMap.has(shapeId)) {\n inner.animation = animMap.get(shapeId);\n }\n }\n }\n }\n\n // Notes via slide rels (notesSlide relationship)\n for (const [, path] of ctx.slideRels) {\n if (!path.includes(\"notesSlides\")) continue;\n const notesEl = ctx.pptx.doc.get(path);\n if (!notesEl) continue;\n const notes = parseNotesSlide(notesEl);\n if (notes) opts.notes = notes;\n break;\n }\n\n return opts as SlideOptions;\n}\n\n// ── Slide child dispatch ──────────────────────────────────────────────────────\n\nexport function parseSlideChild(el: Element, ctx: ParseContext): SlideChild | undefined {\n switch (el.name) {\n case \"p:sp\": {\n // Check if it's a line shape (prstGeom with prst=\"line\")\n const spPr = findChild(el, \"p:spPr\");\n const prstGeom = spPr ? findChild(spPr, \"a:prstGeom\") : undefined;\n const prst = prstGeom ? attr(prstGeom, \"prst\") : undefined;\n if (prst === \"line\") {\n return { line: parseLineShape(el) };\n }\n return { shape: parseShape(el, ctx) };\n }\n case \"p:pic\": {\n // Check for video/audio extension URI in nvPr\n const mediaType = detectMediaType(el);\n if (mediaType === \"video\") {\n return {\n video: parseMediaFrame(el, ctx, \"video\") as unknown as VideoFrameOptions,\n };\n }\n if (mediaType === \"audio\") {\n return {\n audio: parseMediaFrame(el, ctx, \"audio\") as unknown as AudioFrameOptions,\n };\n }\n return { picture: parsePicture(el, ctx) };\n }\n case \"p:graphicFrame\":\n return parseGraphicFrame(el, ctx);\n case \"p:cxnSp\":\n return { connector: parseConnector(el) };\n case \"p:grpSp\":\n return { group: parseGroup(el, ctx) };\n default:\n return undefined;\n }\n}\n\n// ── Background parser ─────────────────────────────────────────────────────────\n\nexport function parseBackground(el: Element): BackgroundOptions {\n const opts: Record<string, unknown> = {};\n const bgPr = findChild(el, \"p:bgPr\");\n if (bgPr) {\n const shadeToTitle = attrBool(bgPr, \"shadeToTitle\");\n if (shadeToTitle) opts.shadeToTitle = true;\n\n // Parse fill\n const fill = parseFillFromElement(bgPr);\n if (fill) opts.fill = fill;\n }\n return opts as BackgroundOptions;\n}\n\n// ── Transition parser ─────────────────────────────────────────────────────────\n\nconst DIRECTION_REVERSE: Record<string, TransitionDirection> = {\n l: \"left\",\n u: \"up\",\n r: \"right\",\n d: \"down\",\n lu: \"leftUp\",\n ru: \"rightUp\",\n ld: \"leftDown\",\n rd: \"rightDown\",\n out: \"out\",\n in: \"in\",\n};\n\nconst SPEED_MAP: Record<string, \"slow\" | \"med\" | \"fast\"> = {\n slow: \"slow\",\n med: \"med\",\n fast: \"fast\",\n};\n\nfunction parseTransition(el: Element): TransitionOptions {\n const opts: Record<string, unknown> = {};\n\n const spd = attr(el, \"spd\");\n if (spd && spd in SPEED_MAP) opts.speed = SPEED_MAP[spd];\n\n const advClick = attrBool(el, \"advClick\");\n if (advClick !== undefined) opts.advanceOnClick = advClick;\n\n const advTm = attrNum(el, \"advTm\");\n if (advTm !== undefined) opts.advanceAfterTime = advTm;\n\n // Find transition type element\n for (const child of el.elements ?? []) {\n if (!child.name) continue;\n const typeName = child.name.replace(\"p:\", \"\") as TransitionType;\n const knownTypes = new Set([\n \"fade\",\n \"push\",\n \"wipe\",\n \"split\",\n \"blinds\",\n \"checker\",\n \"comb\",\n \"randomBar\",\n \"cover\",\n \"pull\",\n \"strips\",\n \"wheel\",\n \"zoom\",\n \"circle\",\n \"dissolve\",\n \"diamond\",\n \"newsflash\",\n \"plus\",\n \"wedge\",\n \"random\",\n \"cut\",\n ]);\n if (knownTypes.has(typeName)) {\n opts.type = typeName;\n const dir = attr(child, \"dir\");\n if (dir && dir in DIRECTION_REVERSE) opts.direction = DIRECTION_REVERSE[dir];\n const orient = attr(child, \"orient\");\n if (orient) opts.orient = orient as \"horz\" | \"vert\";\n const thruBlk = attrBool(child, \"thruBlk\");\n if (thruBlk !== undefined) opts.thruBlk = thruBlk;\n const spokes = attrNum(child, \"spokes\");\n if (spokes !== undefined) opts.spokes = spokes;\n break;\n }\n }\n\n return opts as TransitionOptions;\n}\n\n// ── Shape parser ──────────────────────────────────────────────────────────────\n\nfunction parseShape(el: Element, ctx: ParseContext): ShapeOptions {\n const opts: Record<string, unknown> = {};\n\n // p:nvSpPr → id, name, placeholder\n const nvSpPr = findChild(el, \"p:nvSpPr\");\n if (nvSpPr) {\n const cNvPr = findChild(nvSpPr, \"p:cNvPr\");\n if (cNvPr) {\n const id = attrNum(cNvPr, \"id\");\n if (id !== undefined) opts.id = id;\n const name = attr(cNvPr, \"name\");\n if (name) opts.name = name;\n }\n // Placeholder\n const nvPr = findChild(nvSpPr, \"p:nvPr\");\n if (nvPr) {\n const ph = findChild(nvPr, \"p:ph\");\n if (ph) {\n const phType = attr(ph, \"type\");\n if (phType) opts.placeholder = phType;\n const phIdx = attrNum(ph, \"idx\");\n if (phIdx !== undefined) opts.placeholderIndex = phIdx;\n }\n }\n }\n\n // p:spPr → position, geometry, fill, outline, effects\n const spPr = findChild(el, \"p:spPr\");\n if (spPr) {\n parseTransformFromSpPr(spPr, opts);\n parseGeometryFromSpPr(spPr, opts);\n const fill = parseFillFromElement(spPr);\n if (fill) opts.fill = fill;\n const outline = parseOutlineFromElement(spPr);\n if (outline) opts.outline = outline;\n const effects = parseEffectsFromElement(spPr);\n if (effects) opts.effects = effects;\n }\n\n // p:txBody → text, paragraphs\n const txBody = findChild(el, \"p:txBody\");\n if (txBody) {\n parseTextBody(txBody, opts, ctx.slideRels);\n }\n\n return opts as unknown as ShapeOptions;\n}\n\n// ── Picture parser ────────────────────────────────────────────────────────────\n\n// ── Line shape parser ─────────────────────────────────────────────────────────\n\nfunction parseLineShape(el: Element): LineShapeOptions {\n const opts: Record<string, unknown> = {};\n\n // p:nvSpPr → id, name\n const nvSpPr = findChild(el, \"p:nvSpPr\");\n if (nvSpPr) {\n const cNvPr = findChild(nvSpPr, \"p:cNvPr\");\n if (cNvPr) {\n const id = attrNum(cNvPr, \"id\");\n if (id !== undefined) opts.id = id;\n const name = attr(cNvPr, \"name\");\n if (name) opts.name = name;\n }\n }\n\n // p:spPr → endpoints (same logic as connector)\n const spPr = findChild(el, \"p:spPr\");\n if (spPr) {\n const xfrm = findChild(spPr, \"a:xfrm\");\n if (xfrm) {\n const off = findChild(xfrm, \"a:off\");\n const ext = findChild(xfrm, \"a:ext\");\n const flipH = attrBool(xfrm, \"flipH\");\n const flipV = attrBool(xfrm, \"flipV\");\n\n if (off && ext) {\n const offX = attrNum(off, \"x\") ?? 0;\n const offY = attrNum(off, \"y\") ?? 0;\n const cx = attrNum(ext, \"cx\") ?? 0;\n const cy = attrNum(ext, \"cy\") ?? 0;\n\n const x1 = flipH ? offX + cx : offX;\n const y1 = flipV ? offY + cy : offY;\n const x2 = flipH ? offX : offX + cx;\n const y2 = flipV ? offY : offY + cy;\n\n opts.x1 = convertEmuToPixels(x1);\n opts.y1 = convertEmuToPixels(y1);\n opts.x2 = convertEmuToPixels(x2);\n opts.y2 = convertEmuToPixels(y2);\n }\n }\n\n const fill = parseFillFromElement(spPr);\n if (fill) opts.fill = fill;\n const outline = parseOutlineFromElement(spPr);\n if (outline) opts.outline = outline;\n }\n\n return opts as LineShapeOptions;\n}\n\n// ── Picture parser (continued) ────────────────────────────────────────────────\n\nfunction parsePicture(el: Element, ctx: ParseContext): PictureOptions {\n const opts: Record<string, unknown> = {};\n\n // Position from p:spPr\n const spPr = findChild(el, \"p:spPr\");\n if (spPr) parseTransformFromSpPr(spPr, opts);\n\n // Image data from p:blipFill → a:blip → r:embed\n const blip = findDeep(el, \"a:blip\")[0];\n if (blip) {\n const rEmbed = attr(blip, \"r:embed\");\n if (rEmbed) {\n const mediaPath =\n ctx.slideRels.get(rEmbed) ?? ctx.pptx.partRefs.media.find((p) => p.includes(rEmbed));\n if (mediaPath) {\n const imageData = ctx.pptx.doc.getRaw(mediaPath);\n if (imageData) {\n opts.data = imageData;\n opts.type = imageTypeFromPath(mediaPath);\n }\n }\n }\n }\n\n // Name from p:nvPicPr → a:cNvPr or p:cNvPr\n const nvPicPr = findChild(el, \"p:nvPicPr\");\n if (nvPicPr) {\n const cNvPr = findChild(nvPicPr, \"a:cNvPr\") ?? findChild(nvPicPr, \"p:cNvPr\");\n if (cNvPr) {\n const name = attr(cNvPr, \"name\");\n if (name) opts.name = name;\n }\n }\n\n return opts as unknown as PictureOptions;\n}\n\n// ── Graphic frame parser (chart / table / smartart) ───────────────────────────\n\nfunction parseGraphicFrame(el: Element, ctx: ParseContext): SlideChild | undefined {\n const graphicData = findDeep(el, \"a:graphicData\")[0];\n if (!graphicData) return undefined;\n\n const uri = attr(graphicData, \"uri\") ?? \"\";\n\n if (uri.includes(\"/chart\")) {\n return { chart: parseChartFrame(el, ctx) };\n }\n if (uri.includes(\"/diagram\")) {\n return { smartart: parseSmartArtFrame(el, ctx) };\n }\n\n // Check for table (a:graphicData → a:tbl)\n const tbl = findChild(graphicData, \"a:tbl\");\n if (tbl) {\n return { table: parseTableFrame(el, tbl) };\n }\n\n return undefined;\n}\n\n// ── Chart frame parser ────────────────────────────────────────────────────────\n\nfunction parseChartFrame(el: Element, ctx: ParseContext): ChartOptions {\n const opts: Record<string, unknown> = {};\n\n // Position from p:xfrm\n parseTransformFromElement(el, opts);\n\n // Chart data\n const chartRef = findDeep(el, \"c:chart\")[0];\n if (chartRef) {\n const rId = attr(chartRef, \"r:id\");\n if (rId) {\n const chartPath = ctx.slideRels.get(rId);\n if (chartPath) {\n const chartXml = ctx.pptx.doc.get(chartPath);\n if (chartXml) {\n const chartOpts = parseChartXml(chartXml);\n if (chartOpts) Object.assign(opts, chartOpts);\n }\n }\n }\n }\n\n return opts as unknown as ChartOptions;\n}\n\n/**\n * Parse c:chartSpace element into chart options.\n */\nfunction parseChartXml(el: Element): Record<string, unknown> | undefined {\n const chart = findChild(el, \"c:chart\");\n if (!chart) return undefined;\n\n const opts: Record<string, unknown> = {};\n\n // Title\n const titleEl = findChild(chart, \"c:title\");\n if (titleEl) {\n const rich = findDeep(titleEl, \"c:rich\")[0];\n if (rich) {\n const t = findDeep(rich, \"a:t\")[0];\n if (t) {\n const title = textOf(t);\n if (title) opts.title = title;\n }\n }\n }\n\n // Plot area → chart type\n const plotArea = findChild(chart, \"c:plotArea\");\n if (!plotArea) return undefined;\n\n let chartType: string | undefined;\n let typeElement: Element | undefined;\n\n for (const child of plotArea.elements ?? []) {\n switch (child.name) {\n case \"c:barChart\": {\n const barDir = findChild(child, \"c:barDir\");\n chartType = barDir && attr(barDir, \"val\") === \"bar\" ? \"bar\" : \"column\";\n typeElement = child;\n break;\n }\n case \"c:lineChart\":\n chartType = \"line\";\n typeElement = child;\n break;\n case \"c:pieChart\":\n chartType = \"pie\";\n typeElement = child;\n break;\n case \"c:areaChart\":\n chartType = \"area\";\n typeElement = child;\n break;\n case \"c:scatterChart\":\n chartType = \"scatter\";\n typeElement = child;\n break;\n }\n if (chartType) break;\n }\n\n if (!chartType || !typeElement) return undefined;\n opts.type = chartType;\n\n // Series\n const series: { name: string; values: number[] }[] = [];\n let categories: string[] | undefined;\n\n for (const serEl of typeElement.elements ?? []) {\n if (serEl.name !== \"c:ser\") continue;\n const nameParts = extractStrCache(serEl, \"c:tx\");\n const cats = extractStrCache(serEl, \"c:cat\");\n if (cats.length > 0 && !categories) categories = cats;\n const vals = extractNumCache(serEl);\n series.push({ name: nameParts[0] ?? \"\", values: vals });\n }\n\n opts.categories = categories ?? [];\n opts.series = series;\n opts.showLegend = findChild(chart, \"c:legend\") !== undefined;\n\n const styleEl = findChild(el, \"c:style\");\n if (styleEl) {\n const val = attrNum(styleEl, \"val\");\n if (val !== undefined) opts.style = val;\n }\n\n return opts;\n}\n\nfunction extractStrCache(parent: Element, containerName: string): string[] {\n const container = findChild(parent, containerName);\n if (!container) return [];\n const cache = findDeep(container, \"c:strCache\")[0];\n if (!cache) return [];\n\n const values: string[] = [];\n for (const pt of cache.elements ?? []) {\n if (pt.name !== \"c:pt\") continue;\n const v = findChild(pt, \"c:v\");\n if (v) values.push(textOf(v) ?? \"\");\n }\n return values;\n}\n\nfunction extractNumCache(parent: Element): number[] {\n const valEl = findChild(parent, \"c:val\");\n if (!valEl) return [];\n const cache = findDeep(valEl, \"c:numCache\")[0];\n if (!cache) return [];\n\n const values: number[] = [];\n for (const pt of cache.elements ?? []) {\n if (pt.name !== \"c:pt\") continue;\n const v = findChild(pt, \"c:v\");\n if (v) {\n const num = Number(textOf(v));\n if (!isNaN(num)) values.push(num);\n }\n }\n return values;\n}\n\n// ── SmartArt frame parser ─────────────────────────────────────────────────────\n\nfunction parseSmartArtFrame(el: Element, ctx: ParseContext): SmartArtOptions {\n const opts: Record<string, unknown> = {};\n\n // Position\n parseTransformFromElement(el, opts);\n\n // Name from p:nvGraphicFramePr → p:cNvPr\n const nvGfxFramePr = findChild(el, \"p:nvGraphicFramePr\");\n if (nvGfxFramePr) {\n const cNvPr = findChild(nvGfxFramePr, \"p:cNvPr\");\n if (cNvPr) {\n const name = attr(cNvPr, \"name\");\n if (name) opts.name = name;\n }\n }\n\n // SmartArt data via dgm:relIds → r:dm\n const relIds = findDeep(el, \"dgm:relIds\")[0];\n if (relIds) {\n const rId = attr(relIds, \"r:dm\");\n if (rId) {\n const dataPath = ctx.slideRels.get(rId);\n if (dataPath) {\n const dataEl = ctx.pptx.doc.get(dataPath);\n if (dataEl) {\n parseSmartArtDataXml(dataEl, opts);\n }\n }\n }\n }\n\n return opts as unknown as SmartArtOptions;\n}\n\nfunction parseSmartArtDataXml(el: Element, opts: Record<string, unknown>): void {\n const ptLst = findChild(el, \"dgm:ptLst\");\n if (!ptLst) {\n opts.nodes = [];\n return;\n }\n\n const nodeMap = new Map<string, string>();\n\n for (const pt of ptLst.elements ?? []) {\n if (pt.name !== \"dgm:pt\") continue;\n const type = attr(pt, \"type\");\n const modelId = attr(pt, \"modelId\");\n\n if (type === \"doc\") {\n const prSet = findChild(pt, \"dgm:prSet\");\n if (prSet) {\n const loTypeId = attr(prSet, \"loTypeId\") ?? \"\";\n const qsTypeId = attr(prSet, \"qsTypeId\") ?? \"\";\n const csTypeId = attr(prSet, \"csTypeId\") ?? \"\";\n const layout = loTypeId.split(\"/\").pop();\n if (layout) opts.layout = layout;\n const style = qsTypeId.split(\"/\").pop();\n if (style) opts.style = style;\n const color = csTypeId.split(\"/\").pop();\n if (color) opts.color = color;\n }\n } else if (type === \"node\" && modelId) {\n const t = findDeep(pt, \"a:t\")[0];\n nodeMap.set(modelId, t ? (textOf(t) ?? \"\") : \"\");\n }\n }\n\n // Build tree from connections\n const cxnLst = findChild(el, \"dgm:cxnLst\");\n if (!cxnLst) {\n opts.nodes = [];\n return;\n }\n\n const childrenMap = new Map<string, string[]>();\n for (const cxn of cxnLst.elements ?? []) {\n if (cxn.name !== \"dgm:cxn\") continue;\n const srcId = attr(cxn, \"srcId\");\n const destId = attr(cxn, \"destId\");\n if (!srcId || !destId || !nodeMap.has(destId)) continue;\n\n let arr = childrenMap.get(srcId);\n if (!arr) {\n arr = [];\n childrenMap.set(srcId, arr);\n }\n arr.push(destId);\n }\n\n const topIds = childrenMap.get(\"0\") ?? [];\n opts.nodes = topIds.map((id) => buildSmartArtNode(id, nodeMap, childrenMap));\n}\n\nfunction buildSmartArtNode(\n id: string,\n nodeMap: Map<string, string>,\n childrenMap: Map<string, string[]>,\n): { text: string; children?: unknown[] } {\n const text = nodeMap.get(id) ?? \"\";\n const childIds = childrenMap.get(id) ?? [];\n if (childIds.length === 0) return { text };\n return { text, children: childIds.map((cid) => buildSmartArtNode(cid, nodeMap, childrenMap)) };\n}\n\n// ── Table frame parser ────────────────────────────────────────────────────────\n\nfunction parseTableFrame(el: Element, tbl: Element): TableOptions {\n const opts: Record<string, unknown> = {};\n\n // Position\n parseTransformFromElement(el, opts);\n\n // a:tblPr\n const tblPr = findChild(tbl, \"a:tblPr\");\n if (tblPr) {\n if (attrBool(tblPr, \"firstRow\")) opts.firstRow = true;\n if (attrBool(tblPr, \"lastRow\")) opts.lastRow = true;\n if (attrBool(tblPr, \"bandRow\")) opts.bandRow = true;\n if (attrBool(tblPr, \"firstCol\")) opts.firstCol = true;\n if (attrBool(tblPr, \"lastCol\")) opts.lastCol = true;\n if (attrBool(tblPr, \"bandCol\")) opts.bandCol = true;\n\n // Table-level borders (a:lnL/lnR/lnT/lnB)\n const borders: Record<string, unknown> = {};\n for (const [elName, key] of [\n [\"a:lnL\", \"left\"],\n [\"a:lnR\", \"right\"],\n [\"a:lnT\", \"top\"],\n [\"a:lnB\", \"bottom\"],\n ] as const) {\n const borderEl = findChild(tblPr, elName);\n if (borderEl) {\n const borderOpts: Record<string, unknown> = {};\n const w = attrNum(borderEl, \"w\");\n if (w !== undefined) borderOpts.width = w;\n const fill = parseFillFromElement(borderEl);\n if (typeof fill === \"string\") borderOpts.color = fill;\n if (Object.keys(borderOpts).length > 0) borders[key] = borderOpts;\n }\n }\n if (Object.keys(borders).length > 0) opts.borders = borders;\n }\n\n // a:tblGrid → columnWidths\n const tblGrid = findChild(tbl, \"a:tblGrid\");\n if (tblGrid) {\n const colWidths: number[] = [];\n for (const gridCol of children(tblGrid, \"a:gridCol\")) {\n const w = attrNum(gridCol, \"w\");\n colWidths.push(w ?? 0);\n }\n if (colWidths.length > 0) opts.columnWidths = colWidths;\n }\n\n // a:tr → rows\n const rows: Record<string, unknown>[] = [];\n for (const tr of children(tbl, \"a:tr\")) {\n const rowOpts: Record<string, unknown> = {};\n const h = attrNum(tr, \"h\");\n if (h !== undefined) rowOpts.height = h;\n\n const cells: Record<string, unknown>[] = [];\n for (const tc of children(tr, \"a:tc\")) {\n cells.push(parseTableCell(tc));\n }\n rowOpts.cells = cells;\n rows.push(rowOpts);\n }\n opts.rows = rows;\n\n return opts as unknown as TableOptions;\n}\n\nfunction parseTableCell(tc: Element): Record<string, unknown> {\n const opts: Record<string, unknown> = {};\n\n // gridSpan / rowSpan\n const gridSpan = attrNum(tc, \"gridSpan\");\n if (gridSpan !== undefined && gridSpan > 1) opts.columnSpan = gridSpan;\n const rowSpan = attrNum(tc, \"rowSpan\");\n if (rowSpan !== undefined && rowSpan > 1) opts.rowSpan = rowSpan;\n\n // a:txBody → paragraphs + bodyPr margins\n const txBody = findChild(tc, \"a:txBody\");\n if (txBody) {\n const paragraphs = parseParagraphsFromTxBody(txBody);\n if (paragraphs.length > 0) opts.children = paragraphs;\n\n // Extract margins from a:bodyPr (if not already from a:tcPr)\n const bodyPr = findChild(txBody, \"a:bodyPr\");\n if (bodyPr) {\n const margins: Record<string, number> = {};\n for (const [attrName, key] of [\n [\"tIns\", \"top\"],\n [\"bIns\", \"bottom\"],\n [\"lIns\", \"left\"],\n [\"rIns\", \"right\"],\n ] as const) {\n const val = attrNum(bodyPr, attrName);\n if (val !== undefined) margins[key] = val;\n }\n if (Object.keys(margins).length > 0) opts.margins = margins;\n }\n }\n\n // a:tcPr\n const tcPr = findChild(tc, \"a:tcPr\");\n if (tcPr) {\n const fill = parseFillFromElement(tcPr);\n if (fill) opts.fill = fill;\n\n const anchor = attr(tcPr, \"anchor\");\n if (anchor) {\n const anchorMap: Record<string, string> = { t: \"top\", ctr: \"center\", b: \"bottom\" };\n if (anchor in anchorMap) opts.verticalAlign = anchorMap[anchor];\n }\n\n // Margins\n const margins: Record<string, number> = {};\n const tIns = attrNum(tcPr, \"tIns\");\n if (tIns !== undefined) margins.top = tIns;\n const bIns = attrNum(tcPr, \"bIns\");\n if (bIns !== undefined) margins.bottom = bIns;\n const lIns = attrNum(tcPr, \"lIns\");\n if (lIns !== undefined) margins.left = lIns;\n const rIns = attrNum(tcPr, \"rIns\");\n if (rIns !== undefined) margins.right = rIns;\n if (Object.keys(margins).length > 0) opts.margins = margins;\n\n // Borders\n const borders: Record<string, unknown> = {};\n for (const [elName, key] of [\n [\"a:lnL\", \"left\"],\n [\"a:lnR\", \"right\"],\n [\"a:lnT\", \"top\"],\n [\"a:lnB\", \"bottom\"],\n ] as const) {\n const borderEl = findChild(tcPr, elName);\n if (borderEl) {\n const w = attrNum(borderEl, \"w\");\n const borderOpts: Record<string, unknown> = {};\n if (w !== undefined) borderOpts.width = w;\n const fill = parseFillFromElement(borderEl);\n if (typeof fill === \"string\") borderOpts.color = fill;\n if (Object.keys(borderOpts).length > 0) borders[key] = borderOpts;\n }\n }\n if (Object.keys(borders).length > 0) opts.borders = borders;\n }\n\n return opts;\n}\n\n// ── Connector parser ──────────────────────────────────────────────────────────\n\nfunction parseConnector(el: Element): ConnectorShapeOptions {\n const opts: Record<string, unknown> = {};\n\n // p:nvCxnSpPr → id, name\n const nvCxnSpPr = findChild(el, \"p:nvCxnSpPr\");\n if (nvCxnSpPr) {\n const cNvPr = findChild(nvCxnSpPr, \"p:cNvPr\");\n if (cNvPr) {\n const id = attrNum(cNvPr, \"id\");\n if (id !== undefined) opts.id = id;\n const name = attr(cNvPr, \"name\");\n if (name) opts.name = name;\n }\n }\n\n // p:spPr → endpoints\n const spPr = findChild(el, \"p:spPr\");\n if (spPr) {\n const xfrm = findChild(spPr, \"a:xfrm\");\n if (xfrm) {\n const off = findChild(xfrm, \"a:off\");\n const ext = findChild(xfrm, \"a:ext\");\n const flipH = attrBool(xfrm, \"flipH\");\n const flipV = attrBool(xfrm, \"flipV\");\n\n if (off && ext) {\n const offX = attrNum(off, \"x\") ?? 0;\n const offY = attrNum(off, \"y\") ?? 0;\n const cx = attrNum(ext, \"cx\") ?? 0;\n const cy = attrNum(ext, \"cy\") ?? 0;\n\n // Reconstruct endpoints\n const x1 = flipH ? offX + cx : offX;\n const y1 = flipV ? offY + cy : offY;\n const x2 = flipH ? offX : offX + cx;\n const y2 = flipV ? offY : offY + cy;\n\n opts.x1 = convertEmuToPixels(x1);\n opts.y1 = convertEmuToPixels(y1);\n opts.x2 = convertEmuToPixels(x2);\n opts.y2 = convertEmuToPixels(y2);\n }\n }\n\n const fill = parseFillFromElement(spPr);\n if (fill) opts.fill = fill;\n const outline = parseOutlineFromElement(spPr);\n if (outline) opts.outline = outline;\n\n // Arrowheads from outline\n // Note: generation code maps endArrowhead → a:headEnd, beginArrowhead → a:tailEnd\n const ln = findChild(spPr, \"a:ln\");\n if (ln) {\n const headEnd = findChild(ln, \"a:headEnd\");\n if (headEnd) {\n const type = attr(headEnd, \"type\");\n if (type) opts.endArrowhead = type as ArrowheadType;\n const len = attr(headEnd, \"len\");\n if (len) opts.arrowheadLength = xsdLineEndSize.from(len) as \"small\" | \"medium\" | \"large\";\n const w = attr(headEnd, \"w\");\n if (w) opts.arrowheadWidth = xsdLineEndSize.from(w) as \"small\" | \"medium\" | \"large\";\n }\n const tailEnd = findChild(ln, \"a:tailEnd\");\n if (tailEnd) {\n const type = attr(tailEnd, \"type\");\n if (type) opts.beginArrowhead = type as ArrowheadType;\n }\n }\n }\n\n return opts as unknown as ConnectorShapeOptions;\n}\n\n// ── Group parser ──────────────────────────────────────────────────────────────\n\nfunction parseGroup(el: Element, ctx: ParseContext): GroupShapeOptions {\n const opts: Record<string, unknown> = {};\n\n // p:grpSpPr → position, rotation, flip\n const grpSpPr = findChild(el, \"p:grpSpPr\");\n if (grpSpPr) {\n const xfrm = findChild(grpSpPr, \"a:xfrm\");\n if (xfrm) {\n const off = findChild(xfrm, \"a:off\");\n if (off) {\n const x = attrNum(off, \"x\");\n if (x !== undefined) opts.x = convertEmuToPixels(x);\n const y = attrNum(off, \"y\");\n if (y !== undefined) opts.y = convertEmuToPixels(y);\n }\n const ext = findChild(xfrm, \"a:ext\");\n if (ext) {\n const cx = attrNum(ext, \"cx\");\n if (cx !== undefined) opts.width = convertEmuToPixels(cx);\n const cy = attrNum(ext, \"cy\");\n if (cy !== undefined) opts.height = convertEmuToPixels(cy);\n }\n const rot = attrNum(xfrm, \"rot\");\n if (rot !== undefined) opts.rotation = rot;\n const flipH = attrBool(xfrm, \"flipH\");\n if (flipH) opts.flipHorizontal = true;\n }\n }\n\n // Children\n const groupChildren: SlideChild[] = [];\n for (const child of el.elements ?? []) {\n if (child.name === \"p:nvGrpSpPr\" || child.name === \"p:grpSpPr\") continue;\n const parsed = parseSlideChild(child, ctx);\n if (parsed !== undefined) groupChildren.push(parsed);\n }\n opts.children = groupChildren;\n\n return opts as unknown as GroupShapeOptions;\n}\n\n// ── Text body / paragraph / run parsers ───────────────────────────────────────\n\nfunction parseTextBody(\n txBody: Element,\n opts: Record<string, unknown>,\n rels?: Map<string, string>,\n): void {\n const textBody: Record<string, unknown> = {};\n\n // a:bodyPr\n const bodyPr = findChild(txBody, \"a:bodyPr\");\n if (bodyPr) {\n const vert = attr(bodyPr, \"vert\");\n if (vert) textBody.vertical = vert;\n const anchor = attr(bodyPr, \"anchor\");\n if (anchor) {\n const anchorMap: Record<string, string> = { t: \"top\", ctr: \"center\", b: \"bottom\" };\n if (anchor in anchorMap) textBody.anchor = anchorMap[anchor];\n }\n const wrap = attr(bodyPr, \"wrap\");\n if (wrap) textBody.wrap = wrap;\n const tIns = attrNum(bodyPr, \"tIns\");\n const bIns = attrNum(bodyPr, \"bIns\");\n const lIns = attrNum(bodyPr, \"lIns\");\n const rIns = attrNum(bodyPr, \"rIns\");\n const margins: Record<string, number> = {};\n if (tIns !== undefined) margins.top = tIns;\n if (bIns !== undefined) margins.bottom = bIns;\n if (lIns !== undefined) margins.left = lIns;\n if (rIns !== undefined) margins.right = rIns;\n if (Object.keys(margins).length > 0) textBody.margins = margins;\n\n const numCol = attrNum(bodyPr, \"numCol\");\n if (numCol !== undefined) textBody.columns = numCol;\n const spcCol = attrNum(bodyPr, \"spcCol\");\n if (spcCol !== undefined) textBody.columnSpacing = spcCol / 100;\n\n // AutoFit\n if (findChild(bodyPr, \"a:normAutofit\")) textBody.autoFit = \"normal\";\n else if (findChild(bodyPr, \"a:spAutoFit\")) textBody.autoFit = \"shape\";\n else if (findChild(bodyPr, \"a:noAutofit\")) textBody.autoFit = \"none\";\n }\n\n // Paragraphs\n const paragraphs = parseParagraphsFromTxBody(txBody, rels);\n if (paragraphs.length === 1) {\n const p = paragraphs[0] as Record<string, unknown>;\n // parseParagraph already promotes single-run-plain-text to p.text\n if (p.text && !p.children) {\n const props = p.properties as Record<string, unknown> | undefined;\n // Only promote if paragraph properties are trivial (just bulletNone or empty)\n const hasNonTrivialProps =\n props &&\n Object.keys(props).some(\n (k) => k !== \"bullet\" || (props[k] as Record<string, unknown>)?.type !== \"none\",\n );\n if (!hasNonTrivialProps) {\n textBody.text = p.text;\n opts.textBody = textBody;\n return;\n }\n }\n }\n\n if (paragraphs.length > 0) textBody.children = paragraphs;\n if (Object.keys(textBody).length > 0) opts.textBody = textBody;\n}\n\nfunction parseParagraphsFromTxBody(txBody: Element, rels?: Map<string, string>): unknown[] {\n const paragraphs: unknown[] = [];\n for (const pEl of children(txBody, \"a:p\")) {\n paragraphs.push(parseParagraph(pEl, rels));\n }\n return paragraphs;\n}\n\nfunction parseParagraph(el: Element, rels?: Map<string, string>): Record<string, unknown> {\n const opts: Record<string, unknown> = {};\n\n // a:pPr\n const pPr = findChild(el, \"a:pPr\");\n if (pPr) {\n const props: Record<string, unknown> = {};\n\n const algn = attr(pPr, \"algn\");\n if (algn) {\n const alignMap: Record<string, string> = {\n l: \"left\",\n ctr: \"center\",\n r: \"right\",\n just: \"justify\",\n };\n if (algn in alignMap) props.alignment = alignMap[algn];\n }\n\n const lvl = attrNum(pPr, \"lvl\");\n if (lvl !== undefined) props.indentLevel = lvl;\n\n const marL = attrNum(pPr, \"marL\");\n if (marL !== undefined) props.marginIndent = marL;\n const marR = attrNum(pPr, \"marR\");\n if (marR !== undefined) props.marginRight = marR;\n\n // Bullet\n if (findChild(pPr, \"a:buNone\")) {\n props.bullet = { type: \"none\" };\n } else if (findChild(pPr, \"a:buChar\")) {\n const buChar = findChild(pPr, \"a:buChar\")!;\n const bulletOpts: Record<string, unknown> = { type: \"char\" };\n const ch = attr(buChar, \"char\");\n if (ch) bulletOpts.char = ch;\n // Color\n const buClr = findChild(pPr, \"a:buClr\");\n if (buClr) {\n const srgbClr = findChild(buClr, \"a:srgbClr\");\n if (srgbClr) {\n const val = colorAttr(srgbClr, \"val\");\n if (val) bulletOpts.color = val;\n }\n }\n // Size\n const buSzPct = findChild(pPr, \"a:buSzPct\");\n if (buSzPct) {\n const val = attr(buSzPct, \"val\");\n if (val) bulletOpts.size = parseInt(String(val), 10);\n }\n props.bullet = bulletOpts;\n } else if (findChild(pPr, \"a:buAutoNum\")) {\n const buAutoNum = findChild(pPr, \"a:buAutoNum\")!;\n const bulletOpts: Record<string, unknown> = { type: \"autoNum\" };\n const fmt = attr(buAutoNum, \"type\");\n if (fmt) bulletOpts.format = fmt;\n const startAt = attrNum(buAutoNum, \"startAt\");\n if (startAt !== undefined) bulletOpts.startAt = startAt;\n props.bullet = bulletOpts;\n }\n\n // Spacing\n const lnSpc = findChild(pPr, \"a:lnSpc\");\n if (lnSpc) {\n const spcPct = findChild(lnSpc, \"a:spcPct\");\n if (spcPct) {\n const val = attrNum(spcPct, \"val\");\n if (val !== undefined) props.lineSpacing = val / 1000;\n }\n const spcPts = findChild(lnSpc, \"a:spcPts\");\n if (spcPts) {\n const val = attrNum(spcPts, \"val\");\n if (val !== undefined) props.lineSpacingPoints = val / 100;\n }\n }\n\n const spcAft = findChild(pPr, \"a:spcAft\");\n if (spcAft) {\n const spcPts = findChild(spcAft, \"a:spcPts\");\n if (spcPts) {\n const val = attrNum(spcPts, \"val\");\n if (val !== undefined) props.marginBottom = val;\n }\n }\n\n const spcBef = findChild(pPr, \"a:spcBef\");\n if (spcBef) {\n const spcPts = findChild(spcBef, \"a:spcPts\");\n if (spcPts) {\n const val = attrNum(spcPts, \"val\");\n if (val !== undefined) props.marginTop = val;\n }\n }\n\n if (Object.keys(props).length > 0) opts.properties = props;\n }\n\n // Runs (a:r)\n const runs: Record<string, unknown>[] = [];\n for (const rEl of children(el, \"a:r\")) {\n runs.push(parseRun(rEl, rels));\n }\n\n // Simple text extraction: if single run with only text\n if (runs.length === 1 && Object.keys(runs[0]).length === 1 && runs[0].text) {\n opts.text = runs[0].text;\n } else if (runs.length > 0) {\n opts.children = runs;\n }\n\n return opts;\n}\n\nfunction parseRun(el: Element, rels?: Map<string, string>): Record<string, unknown> {\n const opts: Record<string, unknown> = {};\n\n // a:rPr\n const rPr = findChild(el, \"a:rPr\");\n if (rPr) {\n const sz = attrNum(rPr, \"sz\");\n if (sz !== undefined) opts.fontSize = sz / 100;\n\n const b = attrBool(rPr, \"b\");\n if (b !== undefined) opts.bold = b;\n\n const i = attrBool(rPr, \"i\");\n if (i !== undefined) opts.italic = i;\n\n const u = attr(rPr, \"u\");\n if (u) {\n const underlineMap: Record<string, string> = { sng: \"single\", dbl: \"double\", none: \"none\" };\n if (u in underlineMap) opts.underline = underlineMap[u];\n }\n\n const lang = attr(rPr, \"lang\");\n if (lang) opts.lang = lang;\n\n const strike = attr(rPr, \"strike\");\n if (strike) {\n const strikeMap: Record<string, string> = {\n sngStrike: \"sngStrike\",\n dblStrike: \"dblStrike\",\n noStrike: \"noStrike\",\n };\n if (strike in strikeMap) opts.strike = strikeMap[strike];\n }\n\n const baseline = attrNum(rPr, \"baseline\");\n if (baseline !== undefined) opts.baseline = baseline;\n\n const cap = attr(rPr, \"cap\");\n if (cap) {\n const capMap: Record<string, string> = { none: \"none\", all: \"all\", small: \"small\" };\n if (cap in capMap) opts.capitalization = capMap[cap];\n }\n\n const spc = attrNum(rPr, \"spc\");\n if (spc !== undefined) opts.spacing = spc;\n\n // Font\n const latin = findChild(rPr, \"a:latin\");\n if (latin) {\n const typeface = attr(latin, \"typeface\");\n if (typeface) opts.font = typeface;\n }\n\n // Fill (text color)\n const fill = parseFillFromElement(rPr);\n if (fill) opts.fill = fill;\n\n // Hyperlink (a:hlinkClick)\n const hlinkClick = findChild(rPr, \"a:hlinkClick\");\n if (hlinkClick && rels) {\n const rId = attr(hlinkClick, \"r:id\");\n if (rId) {\n const url = rels.get(rId);\n if (url) {\n const hyperlink: Record<string, unknown> = { url };\n const tooltip = attr(hlinkClick, \"tooltip\");\n if (tooltip) hyperlink.tooltip = tooltip;\n opts.hyperlink = hyperlink;\n }\n }\n }\n }\n\n // a:t → text\n const t = findChild(el, \"a:t\");\n if (t) opts.text = textOf(t) ?? \"\";\n\n return opts;\n}\n\n// ── Common helpers ────────────────────────────────────────────────────────────\n\nfunction parseTransformFromSpPr(spPr: Element, opts: Record<string, unknown>): void {\n const xfrm = findChild(spPr, \"a:xfrm\");\n if (!xfrm) return;\n\n const off = findChild(xfrm, \"a:off\");\n if (off) {\n const x = attrNum(off, \"x\");\n if (x !== undefined) opts.x = convertEmuToPixels(x);\n const y = attrNum(off, \"y\");\n if (y !== undefined) opts.y = convertEmuToPixels(y);\n }\n\n const ext = findChild(xfrm, \"a:ext\");\n if (ext) {\n const cx = attrNum(ext, \"cx\");\n if (cx !== undefined) opts.width = convertEmuToPixels(cx);\n const cy = attrNum(ext, \"cy\");\n if (cy !== undefined) opts.height = convertEmuToPixels(cy);\n }\n\n const rot = attrNum(xfrm, \"rot\");\n if (rot !== undefined) opts.rotation = rot;\n\n const flipH = attrBool(xfrm, \"flipH\");\n if (flipH) opts.flipHorizontal = true;\n}\n\nfunction parseTransformFromElement(el: Element, opts: Record<string, unknown>): void {\n // For graphic frames, xfrm may be direct child or under p:xfrm\n const xfrm = findChild(el, \"p:xfrm\") ?? findDeep(el, \"a:xfrm\")[0] ?? findDeep(el, \"p:xfrm\")[0];\n if (!xfrm) return;\n\n const off = findChild(xfrm, \"a:off\");\n if (off) {\n const x = attrNum(off, \"x\");\n if (x !== undefined) opts.x = convertEmuToPixels(x);\n const y = attrNum(off, \"y\");\n if (y !== undefined) opts.y = convertEmuToPixels(y);\n }\n\n const ext = findChild(xfrm, \"a:ext\");\n if (ext) {\n const cx = attrNum(ext, \"cx\");\n if (cx !== undefined) opts.width = convertEmuToPixels(cx);\n const cy = attrNum(ext, \"cy\");\n if (cy !== undefined) opts.height = convertEmuToPixels(cy);\n }\n}\n\nfunction parseGeometryFromSpPr(spPr: Element, opts: Record<string, unknown>): void {\n // a:prstGeom → preset\n const prstGeom = findChild(spPr, \"a:prstGeom\");\n if (prstGeom) {\n const preset = attr(prstGeom, \"prst\");\n if (preset && preset !== \"rect\") opts.geometry = preset;\n }\n}\n\nfunction parseFillFromElement(parent: Element): unknown {\n // Solid fill\n const solidFill = findChild(parent, \"a:solidFill\");\n if (solidFill) {\n const srgbClr = findChild(solidFill, \"a:srgbClr\");\n if (srgbClr) {\n return colorAttr(srgbClr, \"val\");\n }\n const schemeClr = findChild(solidFill, \"a:schemeClr\");\n if (schemeClr) {\n return { type: \"scheme\", color: attr(schemeClr, \"val\") };\n }\n }\n\n // No fill\n if (findChild(parent, \"a:noFill\")) return { type: \"none\" };\n\n // Pattern fill\n const pattFill = findChild(parent, \"a:pattFill\");\n if (pattFill) {\n const prst = attr(pattFill, \"prst\");\n const result: Record<string, unknown> = { type: \"pattern\", pattern: prst ?? \"\" };\n\n const fgClr = findChild(pattFill, \"a:fgClr\");\n if (fgClr) {\n const srgbClr = findChild(fgClr, \"a:srgbClr\");\n if (srgbClr) {\n const val = colorAttr(srgbClr, \"val\");\n if (val) result.foregroundColor = val;\n }\n }\n\n const bgClr = findChild(pattFill, \"a:bgClr\");\n if (bgClr) {\n const srgbClr = findChild(bgClr, \"a:srgbClr\");\n if (srgbClr) {\n const val = colorAttr(srgbClr, \"val\");\n if (val) result.backgroundColor = val;\n }\n }\n\n return result;\n }\n\n // Blip fill (image fill on shapes)\n const blipFill = findChild(parent, \"a:blipFill\");\n if (blipFill) {\n const blip = findChild(blipFill, \"a:blip\");\n if (blip) {\n return { type: \"blip\" };\n }\n }\n\n // Gradient fill\n const gradFill = findChild(parent, \"a:gradFill\");\n if (gradFill) {\n const stops: { position: number; color: string }[] = [];\n const gsLst = findChild(gradFill, \"a:gsLst\");\n if (gsLst) {\n for (const gs of gsLst.elements ?? []) {\n if (gs.name !== \"a:gs\") continue;\n const pos = attrNum(gs, \"pos\");\n const srgbClr = findChild(gs, \"a:srgbClr\");\n if (pos !== undefined && srgbClr) {\n stops.push({ position: pos / 1000, color: colorAttr(srgbClr, \"val\") ?? \"\" });\n }\n }\n }\n if (stops.length > 0) {\n const result: Record<string, unknown> = { type: \"gradient\", stops };\n // Extract angle from a:lin element (OOXML unit → degrees)\n const lin = findChild(gradFill, \"a:lin\");\n if (lin) {\n const ang = attrNum(lin, \"ang\");\n if (ang !== undefined) result.angle = Math.round(ang / 60000);\n }\n // Extract path shade from a:path element\n const pathEl = findChild(gradFill, \"a:path\");\n if (pathEl) {\n const pathType = attr(pathEl, \"path\");\n if (pathType) result.path = pathType;\n }\n return result;\n }\n }\n\n return undefined;\n}\n\nfunction parseOutlineFromElement(parent: Element): unknown {\n const ln = findChild(parent, \"a:ln\");\n if (!ln) return undefined;\n\n const opts: Record<string, unknown> = {};\n const w = attrNum(ln, \"w\");\n if (w !== undefined) opts.width = w;\n\n // For outline, only extract solid color (OutlineOptions uses `color` string)\n const solidFill = findChild(ln, \"a:solidFill\");\n if (solidFill) {\n const srgbClr = findChild(solidFill, \"a:srgbClr\");\n if (srgbClr) {\n const val = colorAttr(srgbClr, \"val\");\n if (val) opts.color = val;\n }\n }\n\n // Dash style\n const prstDash = findChild(ln, \"a:prstDash\");\n if (prstDash) {\n const val = attr(prstDash, \"val\");\n if (val) opts.dashStyle = val;\n }\n\n return Object.keys(opts).length > 0 ? opts : undefined;\n}\n\nfunction parseEffectsFromElement(parent: Element): unknown {\n const spPr = findChild(parent, \"p:spPr\") ?? parent;\n const opts: Record<string, unknown> = {};\n\n // 2D effects from a:effectLst\n const effectLst = findChild(spPr, \"a:effectLst\");\n if (effectLst) {\n for (const child of effectLst.elements ?? []) {\n if (!child.name) continue;\n switch (child.name) {\n case \"a:outerShdw\": {\n const shadow: Record<string, unknown> = {};\n const blurRad = attrNum(child, \"blurRad\");\n if (blurRad !== undefined) shadow.blur = blurRad;\n const dist = attrNum(child, \"dist\");\n if (dist !== undefined) shadow.distance = dist;\n const dir = attrNum(child, \"dir\");\n if (dir !== undefined) shadow.direction = dir;\n const color = extractColorFromElement(child);\n if (color) {\n if (color.color) shadow.color = color.color;\n if (color.alpha !== undefined) shadow.alpha = color.alpha;\n }\n opts.outerShadow = shadow;\n break;\n }\n case \"a:innerShdw\": {\n const shadow: Record<string, unknown> = {};\n const blurRad = attrNum(child, \"blurRad\");\n if (blurRad !== undefined) shadow.blur = blurRad;\n const dist = attrNum(child, \"dist\");\n if (dist !== undefined) shadow.distance = dist;\n const dir = attrNum(child, \"dir\");\n if (dir !== undefined) shadow.direction = dir;\n const color = extractColorFromElement(child);\n if (color) {\n if (color.color) shadow.color = color.color;\n if (color.alpha !== undefined) shadow.alpha = color.alpha;\n }\n opts.innerShadow = shadow;\n break;\n }\n case \"a:glow\": {\n const glow: Record<string, unknown> = {};\n const rad = attrNum(child, \"rad\");\n if (rad !== undefined) glow.radius = rad;\n const color = extractColorFromElement(child);\n if (color) {\n if (color.color) glow.color = color.color;\n if (color.alpha !== undefined) glow.alpha = color.alpha;\n }\n opts.glow = glow;\n break;\n }\n case \"a:reflection\": {\n const reflection: Record<string, unknown> = {};\n const blurRad = attrNum(child, \"blurRad\");\n if (blurRad !== undefined) reflection.blurRadius = blurRad;\n const dist = attrNum(child, \"dist\");\n if (dist !== undefined) reflection.distance = dist;\n const dir = attrNum(child, \"dir\");\n if (dir !== undefined) reflection.direction = dir;\n const stA = attrNum(child, \"stA\");\n if (stA !== undefined) reflection.startAlpha = stA / 1000;\n const endA = attrNum(child, \"endA\");\n if (endA !== undefined) reflection.endAlpha = endA / 1000;\n opts.reflection = reflection;\n break;\n }\n case \"a:softEdge\": {\n const rad = attrNum(child, \"rad\");\n if (rad !== undefined) opts.softEdge = { radius: rad };\n break;\n }\n }\n }\n }\n\n // 3D scene (rotation3D, lighting) from a:scene3d\n const scene3d = findChild(spPr, \"a:scene3d\");\n if (scene3d) {\n const camera = findChild(scene3d, \"a:camera\");\n if (camera) {\n const rot = findChild(camera, \"a:rot\");\n if (rot) {\n const rotation3d: Record<string, number> = {};\n const lat = attrNum(rot, \"lat\");\n const lon = attrNum(rot, \"lon\");\n const rev = attrNum(rot, \"rev\");\n if (lat !== undefined) rotation3d.x = Math.round(lat / 60000);\n if (lon !== undefined) rotation3d.y = Math.round(lon / 60000);\n if (rev !== undefined) rotation3d.z = Math.round(rev / 60000);\n const fov = attrNum(camera, \"fov\");\n if (fov !== undefined) rotation3d.perspective = fov;\n if (Object.keys(rotation3d).length > 0) opts.rotation3D = rotation3d;\n }\n }\n const lightRig = findChild(scene3d, \"a:lightRig\");\n if (lightRig) {\n const rig = attr(lightRig, \"rig\");\n if (rig) opts.lighting = rig;\n }\n }\n\n // 3D shape properties (bevel, extrusion, material) from a:sp3d\n const sp3d = findChild(spPr, \"a:sp3d\");\n if (sp3d) {\n const bevelT = findChild(sp3d, \"a:bevelT\");\n if (bevelT) {\n const bevel: Record<string, unknown> = {};\n const w = attrNum(bevelT, \"w\");\n const h = attrNum(bevelT, \"h\");\n if (w !== undefined) bevel.width = Math.round(w / 12700);\n if (h !== undefined) bevel.height = Math.round(h / 12700);\n const prst = attr(bevelT, \"prst\");\n if (prst) bevel.preset = prst;\n if (Object.keys(bevel).length > 0) opts.bevelTop = bevel;\n }\n const bevelB = findChild(sp3d, \"a:bevelB\");\n if (bevelB) {\n const bevel: Record<string, unknown> = {};\n const w = attrNum(bevelB, \"w\");\n const h = attrNum(bevelB, \"h\");\n if (w !== undefined) bevel.width = Math.round(w / 12700);\n if (h !== undefined) bevel.height = Math.round(h / 12700);\n const prst = attr(bevelB, \"prst\");\n if (prst) bevel.preset = prst;\n if (Object.keys(bevel).length > 0) opts.bevelBottom = bevel;\n }\n const z = attrNum(sp3d, \"z\");\n if (z !== undefined) opts.depth = z;\n const contourW = attrNum(sp3d, \"contourW\");\n if (contourW !== undefined) opts.contourWidth = contourW;\n const extrusionH = attrNum(sp3d, \"extrusionH\");\n if (extrusionH !== undefined) opts.extrusionH = extrusionH;\n const prstMaterial = attr(sp3d, \"prstMaterial\");\n if (prstMaterial) {\n opts.material = prstMaterial;\n }\n }\n\n return Object.keys(opts).length > 0 ? opts : undefined;\n}\n\n/**\n * Extract color and alpha from an effect element's child color element.\n * Looks for a:srgbClr with optional a:alpha transform.\n */\nfunction extractColorFromElement(el: Element): { color?: string; alpha?: number } | undefined {\n for (const child of el.elements ?? []) {\n if (child.name === \"a:srgbClr\") {\n const color = colorAttr(child, \"val\");\n let alpha: number | undefined;\n for (const transform of child.elements ?? []) {\n if (transform.name === \"a:alpha\") {\n const val = attrNum(transform, \"val\");\n if (val !== undefined) alpha = Math.round(val / 1000);\n }\n }\n return { color: color ?? undefined, alpha };\n }\n }\n return undefined;\n}\n\n/**\n * Parse a notesSlide XML element and extract the notes text.\n */\nfunction parseNotesSlide(el: Element): string | undefined {\n const cSld = findChild(el, \"p:cSld\");\n if (!cSld) return undefined;\n\n const spTree = findChild(cSld, \"p:spTree\");\n if (!spTree) return undefined;\n\n // Look for the notes body placeholder (typically type \"body\" in p:nvSpPr > p:nvPr > p:ph)\n const texts: string[] = [];\n for (const sp of spTree.elements ?? []) {\n if (sp.name !== \"p:sp\") continue;\n // Check if this is a body placeholder\n const nvSpPr = findChild(sp, \"p:nvSpPr\");\n const nvPr = nvSpPr ? findChild(nvSpPr, \"p:nvPr\") : undefined;\n const ph = nvPr ? findChild(nvPr, \"p:ph\") : undefined;\n const phType = ph ? attr(ph, \"type\") : undefined;\n // Skip slide image placeholder (type \"sldImg\")\n if (phType === \"sldImg\") continue;\n\n const txBody = findChild(sp, \"p:txBody\");\n if (txBody) {\n const t = extractPlainText(txBody);\n if (t) texts.push(t);\n }\n }\n\n return texts.length > 0 ? texts.join(\"\\n\") : undefined;\n}\n\n/**\n * Extract plain text from a p:txBody element by concatenating all a:t values.\n */\nfunction extractPlainText(el: Element): string {\n const parts: string[] = [];\n for (const p of children(el, \"a:p\")) {\n for (const r of children(p, \"a:r\")) {\n for (const t of children(r, \"a:t\")) {\n const text = textOf(t);\n if (text) parts.push(text);\n }\n }\n parts.push(\"\\n\");\n }\n // Remove trailing newline\n if (parts.length > 0 && parts[parts.length - 1] === \"\\n\") parts.pop();\n return parts.join(\"\");\n}\n\nfunction imageTypeFromPath(path: string): \"jpg\" | \"png\" | \"gif\" | \"bmp\" | \"emf\" | \"wmf\" {\n const ext = path.split(\".\").pop()?.toLowerCase() ?? \"\";\n switch (ext) {\n case \"jpg\":\n case \"jpeg\":\n return \"jpg\";\n case \"png\":\n return \"png\";\n case \"gif\":\n return \"gif\";\n case \"bmp\":\n return \"bmp\";\n case \"emf\":\n return \"emf\";\n case \"wmf\":\n return \"wmf\";\n default:\n return \"png\";\n }\n}\n\n// ── Video / Audio detection and parsing ───────────────────────────────────────\n\nconst VIDEO_EXT_URI = \"{DAA4B4D4-6D71-4841-9C94-3DE7FCFB9230}\";\nconst AUDIO_EXT_URI = \"{CF1602FD-DB20-4165-A070-5F299619DA56}\";\n\n/**\n * Check if a p:pic element is actually a video or audio frame\n * by looking for media extension URIs in nvPr > extLst.\n */\nfunction detectMediaType(el: Element): \"video\" | \"audio\" | undefined {\n const nvPicPr = findChild(el, \"p:nvPicPr\");\n if (!nvPicPr) return undefined;\n\n const nvPr = findChild(nvPicPr, \"p:nvPr\");\n if (!nvPr) return undefined;\n\n const extLst = findChild(nvPr, \"p:extLst\");\n if (!extLst) return undefined;\n\n for (const ext of extLst.elements ?? []) {\n if (ext.name !== \"p:ext\") continue;\n const uri = attr(ext, \"uri\");\n if (uri === VIDEO_EXT_URI) return \"video\";\n if (uri === AUDIO_EXT_URI) return \"audio\";\n }\n\n return undefined;\n}\n\nfunction parseMediaFrame(\n el: Element,\n ctx: ParseContext,\n mediaKind: \"video\" | \"audio\",\n): Record<string, unknown> {\n const opts: Record<string, unknown> = {};\n\n // Position from p:spPr\n const spPr = findChild(el, \"p:spPr\");\n if (spPr) parseTransformFromSpPr(spPr, opts);\n\n // Name from p:nvPicPr → a:cNvPr or p:cNvPr\n const nvPicPr = findChild(el, \"p:nvPicPr\");\n if (nvPicPr) {\n const cNvPr = findChild(nvPicPr, \"a:cNvPr\") ?? findChild(nvPicPr, \"p:cNvPr\");\n if (cNvPr) {\n const name = attr(cNvPr, \"name\");\n if (name) opts.name = name;\n }\n }\n\n // Media data from a:videoFile/a:audioFile (r:link) or p14:media (r:embed)\n const mediaFileEl = findDeep(el, \"a:videoFile\")[0] ?? findDeep(el, \"a:audioFile\")[0];\n const rLink = mediaFileEl ? attr(mediaFileEl, \"r:link\") : undefined;\n\n // Fallback: p14:media in extLst (used by audio frames)\n const p14media = !mediaFileEl ? findDeep(el, \"p14:media\")[0] : undefined;\n const rEmbed = p14media ? attr(p14media, \"r:embed\") : undefined;\n\n const mediaRef = rLink ?? rEmbed;\n if (mediaRef) {\n const mediaPath = ctx.slideRels.get(mediaRef);\n if (mediaPath) {\n const data = ctx.pptx.doc.getRaw(mediaPath);\n if (data) {\n opts.data = data;\n opts.type = mediaTypeFromPath(mediaPath, mediaKind);\n }\n }\n }\n\n // Video poster frame from blipFill\n if (mediaKind === \"video\") {\n const blipFill = findChild(el, \"p:blipFill\");\n if (blipFill) {\n const posterBlip = findChild(blipFill, \"a:blip\");\n if (posterBlip) {\n const rEmbed = attr(posterBlip, \"r:embed\");\n if (rEmbed) {\n const posterPath = ctx.slideRels.get(rEmbed);\n if (posterPath) {\n const posterData = ctx.pptx.doc.getRaw(posterPath);\n if (posterData) {\n opts.poster = posterData;\n opts.posterType = imageTypeFromPath(posterPath);\n }\n }\n }\n }\n }\n }\n\n return opts;\n}\n\nfunction mediaTypeFromPath(path: string, kind: \"video\" | \"audio\"): string {\n const ext = path.split(\".\").pop()?.toLowerCase() ?? \"\";\n\n if (kind === \"video\") {\n switch (ext) {\n case \"mp4\":\n return \"mp4\";\n case \"mov\":\n case \"qt\":\n return \"mov\";\n case \"wmv\":\n return \"wmv\";\n case \"avi\":\n return \"avi\";\n default:\n return \"mp4\";\n }\n } else {\n switch (ext) {\n case \"mp3\":\n return \"mp3\";\n case \"wav\":\n return \"wav\";\n case \"wma\":\n return \"wma\";\n case \"aac\":\n return \"aac\";\n default:\n return \"mp3\";\n }\n }\n}\n\n// ── Blip fill parsing ─────────────────────────────────────────────────────────\n\n/**\n * Parse a:blipFill from a shape's spPr.\n * Used when a shape has an image fill (not a picture element).\n * Returns { type: \"blip\", data } if found.\n */\n","import { attr, findChild } from \"@office-open/xml\";\nimport type { Element } from \"@office-open/xml\";\n\nimport type { SlideLayoutType } from \"../file/slide-layout/slide-layout\";\n\n// Display name → SlideLayoutType mapping (from LAYOUT_DEFS in slide-layout.ts)\nconst NAME_TO_TYPE: Record<string, SlideLayoutType> = {\n \"Title Slide\": \"title\",\n \"Title and Content\": \"obj\",\n \"Section Header\": \"secHead\",\n \"Two Content\": \"twoObj\",\n Comparison: \"twoTxTwoObj\",\n \"Title Only\": \"titleOnly\",\n Blank: \"blank\",\n \"Content with Caption\": \"objTx\",\n \"Picture with Caption\": \"picTx\",\n \"Vertical Text\": \"vertTx\",\n \"Vertical Title and Text\": \"vertTitleAndTx\",\n \"Title and Text\": \"tx\",\n};\n\nexport function parseSlideLayoutType(el: Element): SlideLayoutType | string {\n const cSld = findChild(el, \"p:cSld\");\n if (cSld) {\n const name = attr(cSld, \"name\");\n if (name) {\n const mapped = NAME_TO_TYPE[name];\n if (mapped) return mapped;\n // Fallback: return display name as custom string\n return name;\n }\n }\n return \"blank\";\n}\n","import { attr, colorAttr, findChild } from \"@office-open/xml\";\nimport type { Element } from \"@office-open/xml\";\n\nimport type { ColorSchemeOptions, FontSchemeOptions, ThemeOptions } from \"../file/theme/theme\";\n\n// Mapping: XML element name → ColorSchemeOptions key\nconst COLOR_MAP: Record<string, keyof ColorSchemeOptions> = {\n \"a:dk1\": \"dark1\",\n \"a:lt1\": \"light1\",\n \"a:dk2\": \"dark2\",\n \"a:lt2\": \"light2\",\n \"a:accent1\": \"accent1\",\n \"a:accent2\": \"accent2\",\n \"a:accent3\": \"accent3\",\n \"a:accent4\": \"accent4\",\n \"a:accent5\": \"accent5\",\n \"a:accent6\": \"accent6\",\n \"a:hlink\": \"hyperlink\",\n \"a:folHlink\": \"followedHyperlink\",\n};\n\nfunction extractColor(el: Element): string | undefined {\n const srgb = findChild(el, \"a:srgbClr\");\n if (srgb) return colorAttr(srgb, \"val\") ?? undefined;\n const sysClr = findChild(el, \"a:sysClr\");\n if (sysClr) return attr(sysClr, \"lastClr\") ?? undefined;\n return undefined;\n}\n\nexport function parseColorScheme(el: Element): ColorSchemeOptions {\n const colors: Record<string, string> = {};\n for (const child of el.elements ?? []) {\n if (!child.name) continue;\n const key = COLOR_MAP[child.name];\n if (!key) continue;\n const val = extractColor(child);\n if (val) colors[key] = val;\n }\n return colors as ColorSchemeOptions;\n}\n\nexport function parseFontScheme(el: Element): FontSchemeOptions {\n const fonts: Record<string, string> = {};\n const major = findChild(el, \"a:majorFont\");\n if (major) {\n const latin = findChild(major, \"a:latin\");\n if (latin) fonts.majorFont = attr(latin, \"typeface\") ?? \"\";\n const ea = findChild(major, \"a:ea\");\n if (ea) fonts.majorFontAsian = attr(ea, \"typeface\") ?? \"\";\n }\n const minor = findChild(el, \"a:minorFont\");\n if (minor) {\n const latin = findChild(minor, \"a:latin\");\n if (latin) fonts.minorFont = attr(latin, \"typeface\") ?? \"\";\n const ea = findChild(minor, \"a:ea\");\n if (ea) fonts.minorFontAsian = attr(ea, \"typeface\") ?? \"\";\n }\n return fonts as FontSchemeOptions;\n}\n\nexport function parseTheme(el: Element): ThemeOptions {\n const opts: Record<string, unknown> = {};\n const name = attr(el, \"name\");\n if (name) opts.name = name;\n\n const themeElements = findChild(el, \"a:themeElements\");\n if (themeElements) {\n const clrScheme = findChild(themeElements, \"a:clrScheme\");\n if (clrScheme) opts.colors = parseColorScheme(clrScheme);\n\n const fontScheme = findChild(themeElements, \"a:fontScheme\");\n if (fontScheme) opts.fonts = parseFontScheme(fontScheme);\n }\n\n return opts as ThemeOptions;\n}\n","import type { ParsedArchive } from \"@office-open/core\";\nimport { parseArchive, parseCorePropsElement, convertEmuToPixels } from \"@office-open/core\";\nimport type { Element } from \"@office-open/xml\";\nimport { attr, attrNum, findChild, textOf } from \"@office-open/xml\";\nimport type { DataType } from \"undio\";\nimport { toUint8Array } from \"undio\";\n\nimport type { SlideChild } from \"./file/slide/slide-child\";\nimport { ParseContext } from \"./parse/context\";\nimport { parseSlide } from \"./parse/slide\";\nimport { parseSlideChild } from \"./parse/slide\";\nimport { parseBackground } from \"./parse/slide\";\nimport { parseSlideLayoutType } from \"./parse/slide-layout\";\nimport { parseTheme } from \"./parse/theme\";\n\nexport { parseArchive };\n\nimport type { MasterDefinition, SlideOptions, PresentationOptions } from \"./file/file\";\nimport type { SlideLayoutType } from \"./file/slide-layout/slide-layout\";\n\n/**\n * All part paths extracted from the PPTX package.\n * Field names correspond directly to the OOXML directory structure.\n */\nexport interface PptxPartRefs {\n /** ppt/theme/themeN.xml */\n themes: string[];\n /** ppt/notesMasters/notesMasterN.xml */\n notesMasters: string[];\n /** ppt/commentAuthors.xml */\n commentAuthors?: string;\n /** ppt/comments/commentN.xml (from slide rels) */\n comments: string[];\n /** ppt/charts/chartN.xml (from slide rels) */\n charts: string[];\n /** ppt/diagrams/dataN.xml (from slide rels) */\n diagramData: string[];\n /** ppt/media/* (all media files) */\n media: string[];\n}\n\nexport interface PptxDocument {\n doc: ParsedArchive;\n /** ppt/presentation.xml root element (p:presentation) */\n presentation?: Element;\n /** ppt/slides/slideN.xml */\n slides: string[];\n /** ppt/slideMasters/slideMasterN.xml */\n slideMasters: string[];\n /** ppt/slideLayouts/slideLayoutN.xml */\n slideLayouts: string[];\n /** ppt/notesSlides/notesSlideN.xml */\n notesSlides: string[];\n partRefs: PptxPartRefs;\n /** ppt/presProps.xml */\n presProps?: string;\n /** ppt/viewProps.xml */\n viewProps?: string;\n /** ppt/tableStyles.xml */\n tableStyles?: string;\n /** docProps/core.xml */\n coreProps?: string;\n /** docProps/app.xml */\n appProps?: string;\n}\n\nfunction resolveRelsPath(target: string): string {\n if (target.startsWith(\"/\")) return target.slice(1);\n if (target.startsWith(\"../\")) return target.replace(\"../\", \"ppt/\");\n return `ppt/${target}`;\n}\n\nfunction sortByNumber(paths: string[]): string[] {\n return paths.sort((a, b) => {\n const numA = parseInt(a.match(/(\\d+)/)?.[1] ?? \"0\", 10);\n const numB = parseInt(b.match(/(\\d+)/)?.[1] ?? \"0\", 10);\n return numA - numB;\n });\n}\n\nfunction xmlKeys(keys: string[]): string[] {\n return keys.filter((k) => k.endsWith(\".xml\"));\n}\n\nfunction parseRootRels(doc: ParsedArchive): { coreProps?: string; appProps?: string } {\n const relsEl = doc.get(\"_rels/.rels\");\n if (!relsEl) return {};\n\n let coreProps: string | undefined;\n let appProps: string | undefined;\n\n for (const child of relsEl.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const type = attr(child, \"Type\") ?? \"\";\n const target = attr(child, \"Target\") ?? \"\";\n if (!target) continue;\n\n const path = target.startsWith(\"/\") ? target.slice(1) : target;\n\n if (type.includes(\"/core-properties\")) {\n coreProps = path;\n } else if (type.includes(\"/extended-properties\")) {\n appProps = path;\n }\n }\n\n return { coreProps, appProps };\n}\n\nfunction parseSlideRels(doc: ParsedArchive, slidePaths: string[], refs: PptxPartRefs): void {\n const commentsSet = new Set(refs.comments);\n const chartsSet = new Set(refs.charts);\n const diagramDataSet = new Set(refs.diagramData);\n const mediaSet = new Set(refs.media);\n\n for (const slidePath of slidePaths) {\n const parts = slidePath.split(\"/\");\n const fileName = parts.pop()!;\n const relsPath = `${parts.join(\"/\")}/_rels/${fileName}.rels`;\n\n const relsEl = doc.get(relsPath);\n if (!relsEl) continue;\n\n for (const child of relsEl.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const type = attr(child, \"Type\") ?? \"\";\n const target = attr(child, \"Target\") ?? \"\";\n if (!target) continue;\n\n const path = resolveRelsPath(target);\n\n if (type.includes(\"/comments\") && !type.includes(\"commentAuthors\")) {\n commentsSet.add(path);\n } else if (type.includes(\"/chart\")) {\n chartsSet.add(path);\n } else if (type.includes(\"/diagramData\")) {\n diagramDataSet.add(path);\n } else if (type.includes(\"/image\") || type.includes(\"/video\") || type.includes(\"/media\")) {\n mediaSet.add(path);\n }\n }\n }\n\n refs.comments = [...commentsSet];\n refs.charts = [...chartsSet];\n refs.diagramData = [...diagramDataSet];\n refs.media = [...mediaSet];\n}\n\nexport function parsePptx(data: DataType): PptxDocument {\n const uint8 = toUint8Array(data);\n const doc = parseArchive(uint8);\n\n const presentation = doc.get(\"ppt/presentation.xml\");\n\n const relsXml = doc.get(\"ppt/_rels/presentation.xml.rels\");\n const slides: string[] = [];\n const slideMasters: string[] = [];\n const themes: string[] = [];\n const notesMasters: string[] = [];\n let presProps: string | undefined;\n let viewProps: string | undefined;\n let tableStyles: string | undefined;\n let commentAuthors: string | undefined;\n\n if (relsXml) {\n for (const child of relsXml.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const type = attr(child, \"Type\") ?? \"\";\n const target = attr(child, \"Target\") ?? \"\";\n if (!target) continue;\n\n const path = resolveRelsPath(target);\n\n if (type.includes(\"/slideMaster\")) {\n slideMasters.push(path);\n } else if (\n type.includes(\"/slide\") &&\n !type.includes(\"slideLayout\") &&\n !type.includes(\"slideMaster\")\n ) {\n slides.push(path);\n } else if (type.includes(\"/theme\")) {\n themes.push(path);\n } else if (type.includes(\"/notesMaster\")) {\n notesMasters.push(path);\n } else if (type.includes(\"/presProps\")) {\n presProps = path;\n } else if (type.includes(\"/viewProps\")) {\n viewProps = path;\n } else if (type.includes(\"/tableStyles\")) {\n tableStyles = path;\n } else if (type.includes(\"/commentAuthors\")) {\n commentAuthors = path;\n }\n }\n }\n\n sortByNumber(slides);\n sortByNumber(slideMasters);\n sortByNumber(themes);\n sortByNumber(notesMasters);\n\n const slideLayouts = sortByNumber(xmlKeys(doc.keys(\"ppt/slideLayouts/\")));\n const notesSlides = sortByNumber(xmlKeys(doc.keys(\"ppt/notesSlides/\")));\n\n const partRefs: PptxPartRefs = {\n themes,\n notesMasters,\n commentAuthors,\n comments: [],\n charts: [],\n diagramData: [],\n media: doc.keys(\"ppt/media/\"),\n };\n\n parseSlideRels(doc, slides, partRefs);\n sortByNumber(partRefs.comments);\n sortByNumber(partRefs.charts);\n sortByNumber(partRefs.diagramData);\n\n const { coreProps, appProps } = parseRootRels(doc);\n\n return {\n doc,\n presentation,\n slides,\n slideMasters,\n slideLayouts,\n notesSlides,\n partRefs,\n presProps,\n viewProps,\n tableStyles,\n coreProps,\n appProps,\n };\n}\n\n/**\n * Parse a single slide's relationship file into a Map<rId, path>.\n */\nfunction parseSlideRelMap(doc: ParsedArchive, slidePath: string): Map<string, string> {\n const rels = new Map<string, string>();\n const parts = slidePath.split(\"/\");\n const fileName = parts.pop()!;\n const relsPath = `${parts.join(\"/\")}/_rels/${fileName}.rels`;\n\n const relsEl = doc.get(relsPath);\n if (!relsEl) return rels;\n\n for (const child of relsEl.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const id = attr(child, \"Id\") ?? \"\";\n const target = attr(child, \"Target\") ?? \"\";\n if (!id || !target) continue;\n // External links (hyperlinks) keep their original URL target\n if (attr(child, \"TargetMode\") === \"External\") {\n rels.set(id, target);\n } else {\n rels.set(id, resolveRelsPath(target));\n }\n }\n\n return rels;\n}\n\n/**\n * Build a map from each path to the rel target matching a predicate.\n */\nfunction resolveRelTargets(\n doc: ParsedArchive,\n paths: readonly string[],\n predicate: (target: string) => boolean,\n): Map<string, string> {\n const map = new Map<string, string>();\n for (const path of paths) {\n for (const target of parseSlideRelMap(doc, path).values()) {\n if (predicate(target)) map.set(path, target);\n }\n }\n return map;\n}\n\n/**\n * Parse a .pptx file and convert it into PresentationOptions.\n *\n * This is the main public API for parsing PPTX files.\n * The returned options can be passed directly to `new Presentation(parsed)`\n * to recreate the presentation.\n *\n * @param data - Raw bytes of a .pptx file\n * @returns Parsed presentation options\n */\nexport function parsePresentation(data: DataType): PresentationOptions {\n const pptx = parsePptx(data);\n const opts: Record<string, unknown> = {};\n\n // 1. Parse slide size from p:sldSz\n if (pptx.presentation) {\n const sldSz = findChild(pptx.presentation, \"p:sldSz\");\n if (sldSz) {\n const cx = attrNum(sldSz, \"cx\");\n const cy = attrNum(sldSz, \"cy\");\n if (cx === 12192000 && cy === 6858000) {\n opts.size = \"16:9\";\n } else if (cx === 9144000 && cy === 6858000) {\n opts.size = \"4:3\";\n } else if (cx && cy) {\n opts.size = { width: convertEmuToPixels(cx), height: convertEmuToPixels(cy) };\n }\n }\n }\n\n // 2. Parse core properties\n if (pptx.coreProps) {\n const corePropsEl = pptx.doc.get(pptx.coreProps);\n if (corePropsEl) {\n const cp = parseCorePropsElement(corePropsEl);\n if (cp.title) opts.title = cp.title;\n if (cp.subject) opts.subject = cp.subject;\n if (cp.creator) opts.creator = cp.creator;\n if (cp.keywords) opts.keywords = cp.keywords;\n if (cp.description) opts.description = cp.description;\n if (cp.lastModifiedBy) opts.lastModifiedBy = cp.lastModifiedBy;\n if (cp.revision) opts.revision = parseInt(cp.revision, 10);\n }\n }\n\n // 3. Parse show options from presProps\n if (pptx.presProps) {\n const presPropsEl = pptx.doc.get(pptx.presProps);\n if (presPropsEl) {\n const showPr = findChild(presPropsEl, \"p:showPr\");\n if (showPr) {\n const show: Record<string, unknown> = {};\n if (attr(showPr, \"loop\") === \"1\") show.loop = true;\n // kiosk is a child element per XSD EG_ShowType, not an attribute\n if (findChild(showPr, \"p:kiosk\")) show.kiosk = true;\n const showNarrationVal = attr(showPr, \"showNarration\");\n if (showNarrationVal === \"0\") show.showNarration = false;\n else if (showNarrationVal !== undefined) show.showNarration = true;\n if (attr(showPr, \"useTimings\") === \"1\") show.useTimings = true;\n if (Object.keys(show).length > 0) opts.show = show;\n }\n }\n }\n\n // 4. Build relationship maps\n const masterThemePaths = resolveRelTargets(pptx.doc, pptx.slideMasters, (t) =>\n t.includes(\"/theme\"),\n );\n const layoutMasterPaths = resolveRelTargets(pptx.doc, pptx.slideLayouts, (t) =>\n t.includes(\"/slideMaster\"),\n );\n const slideLayoutPaths = resolveRelTargets(pptx.doc, pptx.slides, (t) =>\n t.includes(\"/slideLayout\"),\n );\n\n // 5. Parse masters\n const masterCount = pptx.slideMasters.length;\n const masterDefs: MasterDefinition[] = [];\n for (let mi = 0; mi < masterCount; mi++) {\n const masterPath = pptx.slideMasters[mi];\n const masterEl = pptx.doc.get(masterPath);\n if (!masterEl) continue;\n\n // Theme\n const themePath = masterThemePaths.get(masterPath);\n const themeEl = themePath ? pptx.doc.get(themePath) : undefined;\n const themeOptions = themeEl ? parseTheme(themeEl) : undefined;\n\n // Background (inline: findChild → parseBackground)\n const cSld = findChild(masterEl, \"p:cSld\");\n const bg = cSld ? findChild(cSld, \"p:bg\") : undefined;\n const masterBackground = bg ? parseBackground(bg) : undefined;\n const hasBackground = masterBackground && Object.keys(masterBackground).length > 0;\n\n // Children: extract non-placeholder shapes from spTree\n const spTree = cSld ? findChild(cSld, \"p:spTree\") : undefined;\n const masterChildren: SlideChild[] = [];\n if (spTree) {\n const emptyCtx: ParseContext = { pptx, slideRels: new Map() };\n for (const child of spTree.elements ?? []) {\n // Skip nvGrpSpPr/grpSpPr (tree container structure, not shapes)\n if (child.name === \"p:nvGrpSpPr\" || child.name === \"p:grpSpPr\") continue;\n // Skip placeholder shapes (generated by DefaultSlideMaster template)\n if (child.name === \"p:sp\") {\n const nvSpPr = findChild(child, \"p:nvSpPr\");\n const nvPr = nvSpPr ? findChild(nvSpPr, \"p:nvPr\") : undefined;\n if (nvPr && findChild(nvPr, \"p:ph\")) continue;\n }\n const parsed = parseSlideChild(child, emptyCtx);\n if (parsed !== undefined) masterChildren.push(parsed);\n }\n }\n\n // Layouts belonging to this master\n const masterLayouts: NonNullable<MasterDefinition[\"layouts\"]>[number][] = [];\n for (const layoutPath of pptx.slideLayouts) {\n if (layoutMasterPaths.get(layoutPath) !== masterPath) continue;\n const layoutEl = pptx.doc.get(layoutPath);\n if (layoutEl) masterLayouts.push({ type: parseSlideLayoutType(layoutEl) as SlideLayoutType });\n }\n\n const masterName = themeOptions?.name ?? `master${mi + 1}`;\n const masterDef = {} as Record<string, unknown>;\n masterDef.name = masterName;\n if (themeOptions) masterDef.theme = themeOptions;\n if (hasBackground) masterDef.background = masterBackground;\n if (masterChildren.length > 0) masterDef.children = masterChildren;\n if (masterLayouts.length > 0) masterDef.layouts = masterLayouts;\n masterDefs.push(masterDef as MasterDefinition);\n }\n\n // Only set masters if there's more than one (single master is auto-created)\n if (masterCount > 1) {\n opts.masters = masterDefs;\n }\n\n // 6. Parse comment authors\n const commentAuthors = new Map<number, { name: string; initials: string }>();\n if (pptx.partRefs.commentAuthors) {\n const authorsEl = pptx.doc.get(pptx.partRefs.commentAuthors);\n if (authorsEl) {\n for (const child of authorsEl.elements ?? []) {\n if (child.name !== \"p:cmAuthor\") continue;\n const id = attrNum(child, \"id\");\n const name = attr(child, \"name\");\n const initials = attr(child, \"initials\");\n if (id !== undefined) {\n commentAuthors.set(id, { name: name ?? \"\", initials: initials ?? \"\" });\n }\n }\n }\n }\n\n // 7. Parse slides with layout and master references\n const result: SlideOptions[] = [];\n for (let si = 0; si < pptx.slides.length; si++) {\n const slidePath = pptx.slides[si];\n const slideEl = pptx.doc.get(slidePath);\n if (!slideEl) continue;\n\n const slideRels = parseSlideRelMap(pptx.doc, slidePath);\n const ctx = new ParseContext(pptx, slideRels);\n const slideOpts = parseSlide(slideEl, ctx) as Record<string, unknown>;\n\n // Resolve layout → master\n const layoutPath = slideLayoutPaths.get(slidePath);\n if (layoutPath) {\n const layoutEl = pptx.doc.get(layoutPath);\n if (layoutEl) slideOpts.layout = parseSlideLayoutType(layoutEl);\n\n const resolvedMasterPath = layoutMasterPaths.get(layoutPath);\n if (resolvedMasterPath) {\n const masterIdx = pptx.slideMasters.indexOf(resolvedMasterPath);\n if (masterIdx >= 0 && masterDefs[masterIdx]) {\n slideOpts.master = masterDefs[masterIdx].name;\n }\n }\n }\n\n // Comments via slide rels\n for (const [, relPath] of slideRels) {\n if (!relPath.includes(\"/comments/\")) continue;\n const commentsEl = pptx.doc.get(relPath);\n if (!commentsEl) continue;\n\n const comments: Record<string, unknown>[] = [];\n for (const cm of commentsEl.elements ?? []) {\n if (cm.name !== \"p:cm\") continue;\n const authorId = attrNum(cm, \"authorId\");\n const dt = attr(cm, \"dt\");\n const idx = attrNum(cm, \"idx\");\n\n const author = authorId !== undefined ? commentAuthors.get(authorId) : undefined;\n const pos = findChild(cm, \"p:pos\");\n const x = pos ? attrNum(pos, \"x\") : undefined;\n const y = pos ? attrNum(pos, \"y\") : undefined;\n\n // Extract text from p:text or p:txBody\n const textEl = findChild(cm, \"p:text\");\n const txBody = findChild(cm, \"p:txBody\");\n const text = textEl ? (textOf(textEl) ?? \"\") : txBody ? extractCommentText(txBody) : \"\";\n\n const commentEntry: Record<string, unknown> = {};\n if (authorId !== undefined) commentEntry.authorId = authorId;\n if (author) commentEntry.author = author.name;\n if (idx !== undefined) commentEntry.idx = idx;\n if (dt) commentEntry.date = dt;\n if (x !== undefined) commentEntry.x = x;\n if (y !== undefined) commentEntry.y = y;\n if (text) commentEntry.text = text;\n\n comments.push(commentEntry);\n }\n\n if (comments.length > 0) slideOpts.comments = comments;\n break;\n }\n\n result.push(slideOpts as SlideOptions);\n }\n\n opts.slides = result;\n return opts as PresentationOptions;\n}\n\n/**\n * Extract plain text from a p:txBody in a comment element.\n */\nfunction extractCommentText(txBody: Element): string {\n const parts: string[] = [];\n for (const p of txBody.elements ?? []) {\n if (p.name !== \"a:p\") continue;\n for (const r of p.elements ?? []) {\n if (r.name !== \"a:r\") continue;\n for (const t of r.elements ?? []) {\n if (t.name === \"a:t\") {\n const text = textOf(t);\n if (text) parts.push(text);\n }\n }\n }\n }\n return parts.join(\"\");\n}\n","import type { Context, XmlComponent } from \"@file/xml-components\";\nimport {\n PPTX_NS,\n Formatter,\n OoxmlMimeType,\n appendContentType,\n createReplacer,\n toJson,\n strFromU8,\n unzipSync,\n zipAndConvert,\n} from \"@office-open/core\";\nimport type { OutputByType, OutputType } from \"@office-open/core\";\nimport { js2xml, xml2js } from \"@office-open/xml\";\nimport type { Element } from \"@office-open/xml\";\nimport { toUint8Array } from \"undio\";\n\n/** Reusable TextEncoder (stateless, safe to share). */\nconst encoder = new TextEncoder();\n\nexport type InputDataType = Buffer | string | number[] | Uint8Array | ArrayBuffer | Blob;\n\nexport const PatchType = {\n PARAGRAPH: \"paragraph\",\n} as const;\n\nexport type PatchDocumentOutputType = OutputType;\n\ninterface ParagraphPatch {\n readonly type: typeof PatchType.PARAGRAPH;\n readonly children: readonly unknown[];\n}\n\nexport type IPatch = ParagraphPatch;\n\nexport interface PatchPresentationOptions<\n T extends PatchDocumentOutputType = PatchDocumentOutputType,\n> {\n readonly outputType: T;\n readonly data: InputDataType;\n readonly patches: Readonly<Record<string, IPatch>>;\n readonly keepOriginalStyles?: boolean;\n readonly placeholderDelimiters?: Readonly<{\n readonly start: string;\n readonly end: string;\n }>;\n}\n\nconst formatter = new Formatter();\n\nconst pptxReplacer = createReplacer({\n ns: PPTX_NS,\n formatChild: (child: unknown, context: unknown): Element[] => {\n const xmlStr = formatter.formatToXml(child as XmlComponent, context as Context);\n const jsonObj = xml2js(xmlStr, { captureSpacesBetweenElements: true });\n return [jsonObj.elements![0]];\n },\n preserveSpace: false,\n});\n\nconst IMAGE_CONTENT_TYPES: ReadonlyArray<readonly [string, string]> = [\n [\"image/png\", \"png\"],\n [\"image/jpeg\", \"jpeg\"],\n [\"image/jpeg\", \"jpg\"],\n [\"image/bmp\", \"bmp\"],\n [\"image/gif\", \"gif\"],\n [\"image/svg+xml\", \"svg\"],\n [\"image/tiff\", \"tif\"],\n [\"image/tiff\", \"tiff\"],\n [\"image/x-emf\", \"emf\"],\n [\"image/x-wmf\", \"wmf\"],\n];\n\nconst SLIDE_RE = /^ppt\\/slides\\/slide(\\d+)\\.xml$/;\n\n/**\n * Patches an existing .pptx presentation by replacing placeholders with new content.\n *\n * @publicApi\n */\nexport const patchPresentation = async <\n T extends PatchDocumentOutputType = PatchDocumentOutputType,\n>({\n outputType,\n data,\n patches,\n keepOriginalStyles = true,\n placeholderDelimiters = { end: \"}}\", start: \"{{\" } as const,\n}: PatchPresentationOptions<T>): Promise<OutputByType[T]> => {\n const zipContent = unzipSync(toUint8Array(data));\n\n const xmlMap = new Map<string, Element>();\n const binaryMap = new Map<string, Uint8Array>();\n let hasMedia = false;\n\n // Separate XML files from binary files\n for (const [key, value] of Object.entries(zipContent)) {\n if (key.endsWith(\".xml\") || key.endsWith(\".rels\")) {\n xmlMap.set(key, toJson(strFromU8(value)));\n } else {\n binaryMap.set(key, value);\n }\n }\n\n // Collect slide paths sorted by number\n const slidePaths = Object.keys(zipContent)\n .filter((k) => SLIDE_RE.test(k))\n .sort((a, b) => {\n const na = parseInt(a.match(SLIDE_RE)![1], 10);\n const nb = parseInt(b.match(SLIDE_RE)![1], 10);\n return na - nb;\n });\n\n const { start, end } = placeholderDelimiters;\n if (!start.trim() || !end.trim()) {\n throw new Error(\"Both start and end delimiters must be non-empty strings.\");\n }\n\n const context: Context = { stack: [] };\n\n // Process text replacement on each slide\n for (const slidePath of slidePaths) {\n const json = xmlMap.get(slidePath);\n if (!json) continue;\n\n for (const [patchKey, patchValue] of Object.entries(patches)) {\n const patchText = `${start}${patchKey}${end}`;\n pptxReplacer({\n context,\n json,\n keepOriginalStyles,\n patch: patchValue,\n patchText,\n });\n }\n }\n\n // Handle image replacements in ppt/media/\n for (const [key, patch] of Object.entries(patches)) {\n if (\"data\" in patch && patch.data instanceof Uint8Array) {\n const mediaPath = `ppt/media/${key}`;\n if (binaryMap.has(mediaPath)) {\n binaryMap.set(mediaPath, patch.data);\n hasMedia = true;\n }\n }\n }\n\n // Add image content types if media was touched\n if (hasMedia) {\n const contentTypes = xmlMap.get(\"[Content_Types].xml\");\n if (contentTypes) {\n for (const [contentType, extension] of IMAGE_CONTENT_TYPES) {\n appendContentType(contentTypes, contentType, extension);\n }\n }\n }\n\n // Rebuild ZIP\n const files: Record<string, Uint8Array> = {};\n\n for (const [key, value] of xmlMap) {\n files[key] = encoder.encode(js2xml(value));\n }\n\n for (const [key, value] of binaryMap) {\n files[key] = value;\n }\n\n return await zipAndConvert(files, outputType, OoxmlMimeType.PPTX);\n};\n","export { File as Presentation } from \"./file\";\nexport * from \"./file\";\nexport * from \"./export\";\nexport * from \"./util\";\nexport * from \"./parse\";\nexport * from \"./patcher\";\n"],"mappings":"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"}
|