@office-open/pptx 0.3.5 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["createOutline","Xc","Xc","MEDIA_EXT_URI","GraphicFrameNonVisual","GraphicFrameNonVisual","GraphicFrameNonVisual"],"sources":["../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/end-paragraph-run.ts","../src/file/shape/paragraph/paragraph-properties.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/slide-layout/slide-layout.ts","../src/file/slide-master/slide-master.ts","../src/file/animation/timing.ts","../src/file/drawingml/effects.ts","../src/file/drawingml/outline.ts","../src/file/drawingml/preset-geometry.ts","../src/file/drawingml/transform-2d.ts","../src/file/drawingml/shape-properties.ts","../src/util/types.ts","../src/file/shape/shape.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/field.ts","../src/file/drawingml/blip-fill.ts","../src/file/drawingml/non-visual-drawing-props.ts","../src/file/drawingml/non-visual-shape-props.ts","../src/file/drawingml/non-visual-picture-props.ts","../src/file/shape/group-shape.ts","../src/file/shape/line-shape.ts","../src/file/media/video-frame.ts","../src/file/media/audio-frame.ts","../src/file/shape-tree/shape-tree.ts","../src/file/notes-master/notes-master.ts","../src/file/header-footer/header-footer.ts","../src/file/picture/picture-non-visual.ts","../src/file/picture/picture.ts","../src/file/background/background.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/chart/axes/axes.ts","../src/file/chart/chart-space.ts","../src/file/chart/chart-frame.ts","../src/file/smartart/smartart-frame.ts","../src/file/smartart/built-in-definitions.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/index.ts","../src/parse/context.ts","../src/parse/drawingml.ts","../src/parse/text-body.ts","../src/parse/shape.ts","../src/parse/slide.ts","../src/parse/document.ts","../src/parse/convert.ts","../src/index.ts"],"sourcesContent":["/**\n * Content Types module for PPTX packages.\n *\n * @module\n */\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\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_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: \"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_SLIDE_MASTER, key: \"/ppt/slideMasters/slideMaster1.xml\" },\n { type: \"Override\", contentType: PPTX_SLIDE_LAYOUT, key: \"/ppt/slideLayouts/slideLayout1.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\nconst STATIC_CHILDREN: IXmlableObject[] = [\n { _attr: { xmlns: \"http://schemas.openxmlformats.org/package/2006/content-types\" } },\n ...STATIC_ENTRIES.map((e) => {\n if (e.type === \"Default\") {\n return { Default: { _attr: { ContentType: e.contentType, Extension: e.key } } };\n }\n return { Override: { _attr: { ContentType: e.contentType, PartName: e.key } } };\n }),\n];\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 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:\n \"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:\n \"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 override prepForXml(_context: IContext): IXmlableObject {\n const children = [...STATIC_CHILDREN];\n for (const e of this.dynamicEntries) {\n if (e.type === \"Default\") {\n children.push({\n Default: { _attr: { ContentType: e.contentType, Extension: e.key } },\n });\n } else {\n children.push({\n Override: { _attr: { ContentType: e.contentType, PartName: e.key } },\n });\n }\n }\n return { Types: children };\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 { IContext, IXmlableObject } from \"@file/xml-components\";\n\nexport interface ICorePropertiesOptions {\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: ICorePropertiesOptions;\n\n public constructor(options: ICorePropertiesOptions) {\n super(\"cp:coreProperties\");\n this.options = options;\n }\n\n public override prepForXml(_context: IContext): IXmlableObject {\n const opts = this.options;\n const children: IXmlableObject[] = [];\n\n children.push({\n _attr: {\n \"xmlns:cp\":\n \"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\",\n \"xmlns:dc\": \"http://purl.org/dc/elements/1.1/\",\n \"xmlns:dcmitype\": \"http://purl.org/dc/dcmitype/\",\n \"xmlns:dcterms\": \"http://purl.org/dc/terms/\",\n \"xmlns:xsi\": \"http://www.w3.org/2001/XMLSchema-instance\",\n },\n });\n\n if (opts.title) children.push({ \"dc:title\": [opts.title] });\n if (opts.subject) children.push({ \"dc:subject\": [opts.subject] });\n if (opts.creator) children.push({ \"dc:creator\": [opts.creator] });\n if (opts.keywords) children.push({ \"cp:keywords\": [opts.keywords] });\n if (opts.description) children.push({ \"dc:description\": [opts.description] });\n if (opts.lastModifiedBy) children.push({ \"cp:lastModifiedBy\": [opts.lastModifiedBy] });\n if (opts.revision) children.push({ \"cp:revision\": [String(opts.revision)] });\n\n const now = new Date().toISOString();\n children.push({ \"dcterms:created\": [{ _attr: { \"xsi:type\": \"dcterms:W3CDTF\" } }, now] });\n children.push({ \"dcterms:modified\": [{ _attr: { \"xsi:type\": \"dcterms:W3CDTF\" } }, now] });\n\n return { \"cp:coreProperties\": children };\n }\n}\n","export interface IHyperlinkData {\n readonly key: string;\n readonly url: string;\n readonly tooltip?: string;\n}\n\nexport class HyperlinkCollection {\n private readonly map = new Map<string, IHyperlinkData>();\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 IHyperlinkData[] {\n return [...this.map.values()];\n }\n}\n","/**\n * Media module for PresentationML documents.\n *\n * @module\n */\nimport type { IMediaDataTransformation } from \"./data\";\nimport type { IMediaData } from \"./data\";\n\nexport interface IMediaTransformation {\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: IMediaTransformation): IMediaDataTransformation => ({\n emus: {\n x: Math.round(options.width * 9525),\n y: Math.round(options.height * 9525),\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, NextAttributeComponent, XmlComponent } from \"@file/xml-components\";\n\nimport type { ITransform2DOptions } from \"./transform-2d\";\n\nexport interface IGroupTransform2DOptions extends ITransform2DOptions {\n readonly childOffsetX?: number;\n readonly childOffsetY?: number;\n readonly childExtentWidth?: number;\n readonly childExtentHeight?: number;\n}\n\n/**\n * a:xfrm — Group transform (CT_GroupTransform2D).\n * Extends regular Transform2D with child offset (chOff) and child extent (chExt).\n */\nexport class GroupTransform2D extends XmlComponent {\n public constructor(options: IGroupTransform2DOptions, prefix: \"a\" | \"p\" = \"a\") {\n super(`${prefix}:xfrm`);\n\n const attrs: Record<\n string,\n { readonly key: string; readonly value: string | boolean | number | undefined }\n > = {};\n if (options.flipH !== undefined) attrs.flipH = { key: \"flipH\", value: options.flipH };\n if (options.rotation !== undefined) attrs.rot = { key: \"rot\", value: options.rotation };\n if (Object.keys(attrs).length > 0) {\n this.root.push(new NextAttributeComponent(attrs));\n }\n\n this.root.push(\n new BuilderElement({\n name: \"a:off\",\n attributes: {\n x: { key: \"x\", value: options.x ?? 0 },\n y: { key: \"y\", value: options.y ?? 0 },\n },\n }),\n );\n\n this.root.push(\n new BuilderElement({\n name: \"a:ext\",\n attributes: {\n cx: { key: \"cx\", value: options.width ?? 0 },\n cy: { key: \"cy\", value: options.height ?? 0 },\n },\n }),\n );\n\n this.root.push(\n new BuilderElement({\n name: \"a:chOff\",\n attributes: {\n x: { key: \"x\", value: options.childOffsetX ?? 0 },\n y: { key: \"y\", value: options.childOffsetY ?? 0 },\n },\n }),\n );\n\n this.root.push(\n new BuilderElement({\n name: \"a:chExt\",\n attributes: {\n cx: { key: \"cx\", value: options.childExtentWidth ?? 0 },\n cy: { key: \"cy\", value: options.childExtentHeight ?? 0 },\n },\n }),\n );\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 { BuilderElement } from \"@file/xml-components\";\nimport type { IXmlableObject } from \"@file/xml-components\";\nimport { attrs } from \"@office-open/xml\";\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\nexport function buildEndParagraphRunPropertiesXml(lang: string = \"en-US\"): string {\n return `<a:endParaRPr${attrs({ lang })}/>`;\n}\n\n/**\n * a:endParaRPr — End paragraph run properties.\n * Lazy: stores lang, builds XML object in prepForXml.\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 prepForXml(\n _context: import(\"@file/xml-components\").IContext,\n ): IXmlableObject | undefined {\n return buildEndParagraphRunProperties(this.lang);\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport type { IXmlableObject } from \"@file/xml-components\";\nimport { attrs } from \"@office-open/xml\";\n\nexport const TextAlignment = {\n LEFT: \"l\",\n CENTER: \"ctr\",\n RIGHT: \"r\",\n JUSTIFY: \"just\",\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 IParagraphPropertiesOptions {\n readonly alignment?: keyof typeof TextAlignment;\n readonly indentLevel?: number;\n readonly marginBottom?: number;\n readonly marginTop?: number;\n readonly bullet?: BulletOptions;\n /** @deprecated Use bullet: { type: \"none\" } instead */\n readonly bulletNone?: boolean;\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: IParagraphPropertiesOptions,\n): IXmlableObject | undefined {\n const children: IXmlableObject[] = [];\n\n const attrs: Record<string, string | number> = {};\n if (options.alignment) attrs.algn = TextAlignment[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 } else if (options.bulletNone !== false) {\n children.push({ \"a:buNone\": {} });\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 object in prepForXml.\n * Omitted from output when completely empty.\n */\nexport class ParagraphProperties extends XmlComponent {\n private readonly options: IParagraphPropertiesOptions;\n\n public constructor(options: IParagraphPropertiesOptions = {}) {\n super(\"a:pPr\");\n this.options = options;\n }\n\n public prepForXml(\n _context: import(\"@file/xml-components\").IContext,\n ): IXmlableObject | undefined {\n return buildParagraphProperties(this.options);\n }\n\n public toXml(): string {\n return buildParagraphPropertiesXml(this.options);\n }\n}\n\nfunction buildBulletChildrenXml(options: BulletOptions): string {\n if (options.type === \"none\") {\n return \"<a:buNone/>\";\n }\n\n let s = \"\";\n if (options.color) {\n s += `<a:buClr><a:srgbClr${attrs({ val: options.color.replace(\"#\", \"\") })}/></a:buClr>`;\n }\n if (options.size !== undefined) {\n s += `<a:buSzPct${attrs({ val: `${options.size}%` })}/>`;\n }\n s += `<a:buFont${attrs({ typeface: \"Arial\", panose: \"020B0604020202020204\", pitchFamily: \"34\", charset: \"0\" })}/>`;\n if (options.type === \"char\") {\n s += `<a:buChar${attrs({ char: options.char ?? \"•\" })}/>`;\n } else if (options.type === \"autoNum\") {\n const buAttrs: Record<string, string | number | undefined> = {\n type: options.format ?? \"arabicPeriod\",\n };\n if (options.startAt !== undefined) buAttrs.startAt = options.startAt;\n s += `<a:buAutoNum${attrs(buAttrs)}/>`;\n }\n return s;\n}\n\nexport function buildParagraphPropertiesXml(options: IParagraphPropertiesOptions): string {\n const attrStr = attrs({\n algn: options.alignment ? TextAlignment[options.alignment] : undefined,\n lvl: options.indentLevel,\n marL: options.marginIndent,\n marR: options.marginRight,\n defTabSz: options.defTabSize,\n });\n\n const body: string[] = [];\n\n if (options.lineSpacing !== undefined) {\n body.push(`<a:lnSpc><a:spcPct${attrs({ val: options.lineSpacing * 1000 })}/></a:lnSpc>`);\n }\n\n if (options.lineSpacingPoints !== undefined) {\n body.push(\n `<a:lnSpc><a:spcPts${attrs({ val: options.lineSpacingPoints * 100 })}/></a:lnSpc>`,\n );\n }\n\n if (options.marginBottom !== undefined || options.marginTop !== undefined) {\n body.push(`<a:spcAft><a:spcPts${attrs({ val: options.marginBottom ?? 0 })}/></a:spcAft>`);\n }\n\n if (options.marginTop !== undefined) {\n body.push(`<a:spcBef><a:spcPts${attrs({ val: options.marginTop })}/></a:spcBef>`);\n }\n\n if (options.bullet) {\n body.push(buildBulletChildrenXml(options.bullet));\n } else if (options.bulletNone !== false) {\n body.push(\"<a:buNone/>\");\n }\n\n if (!attrStr && body.length === 0) return \"\";\n if (body.length === 0) return `<a:pPr${attrStr}/>`;\n return `<a:pPr${attrStr}>${body.join(\"\")}</a:pPr>`;\n}\n","import type { FillOptions } from \"@file/drawingml/fill\";\nimport { buildFill } from \"@file/drawingml/fill\";\nimport { XmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\nimport { attrs, xml } from \"@office-open/xml\";\n\nlet nextHyperlinkId = 1;\n\nexport const UnderlineStyle = {\n SINGLE: \"sng\",\n DOUBLE: \"dbl\",\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 IHyperlinkOptions {\n readonly url: string;\n readonly tooltip?: string;\n}\n\nexport interface IRunPropertiesOptions {\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?: keyof typeof UnderlineStyle;\n readonly font?: string;\n readonly lang?: string;\n readonly fill?: FillOptions;\n readonly hyperlink?: IHyperlinkOptions;\n readonly strike?: keyof typeof StrikeStyle;\n readonly baseline?: number;\n readonly spacing?: number;\n readonly capitalization?: 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 * Pure function: builds a:rPr XML object from options.\n * @param hyperlinkKey - pre-generated key for hyperlink placeholder\n * @param fillObject - pre-built fill IXmlableObject (from buildFill)\n */\nexport function buildRunProperties(\n options: IRunPropertiesOptions,\n hyperlinkKey?: string,\n fillObject?: IXmlableObject,\n): IXmlableObject | undefined {\n const children: IXmlableObject[] = [];\n\n const attrs: Record<string, string | number | boolean> = {};\n if (options.fontSize) attrs.sz = options.fontSize * 100;\n if (options.bold !== undefined) attrs.b = options.bold;\n if (options.italic !== undefined) attrs.i = options.italic;\n if (options.underline) attrs.u = UnderlineStyle[options.underline];\n if (options.lang) attrs.lang = options.lang;\n if (options.strike) attrs.strike = StrikeStyle[options.strike];\n if (options.baseline !== undefined) attrs.baseline = options.baseline;\n if (options.capitalization)\n attrs.cap = TextCapitalization[options.capitalization] ?? options.capitalization;\n if (options.spacing !== undefined) attrs.spc = options.spacing;\n if (options.noProof !== undefined) attrs.noProof = options.noProof;\n if (options.dirty !== undefined) attrs.dirty = options.dirty;\n if (Object.keys(attrs).length > 0) children.push({ _attr: attrs });\n\n if (options.font) {\n children.push({ \"a:latin\": { _attr: { typeface: options.font } } });\n children.push({ \"a:ea\": { _attr: { typeface: options.font } } });\n }\n\n if (options.hyperlink && hyperlinkKey) {\n const hlinkAttrs: Record<string, string> = { \"r:id\": `{hlink:${hyperlinkKey}}` };\n if (options.hyperlink.tooltip) hlinkAttrs.tooltip = options.hyperlink.tooltip;\n children.push({ \"a:hlinkClick\": { _attr: hlinkAttrs } });\n }\n\n if (options.rightToLeft !== undefined) {\n children.push({ \"a:rtl\": { _attr: { val: options.rightToLeft ? 1 : 0 } } });\n }\n\n if (fillObject) {\n children.push(fillObject);\n }\n\n if (children.length === 0) return undefined;\n\n return {\n \"a:rPr\": children.length === 1 && \"_attr\" in children[0] ? children[0] : children,\n };\n}\n\n/**\n * a:rPr — Run properties (font, size, color, etc.).\n * Lazy: stores options, builds XML object in prepForXml.\n */\nexport class RunProperties extends XmlComponent {\n private readonly options: IRunPropertiesOptions;\n\n public static hasProperties(options: IRunPropertiesOptions): 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 public constructor(options: IRunPropertiesOptions = {}) {\n super(\"a:rPr\");\n this.options = options;\n }\n\n public prepForXml(context: IContext): IXmlableObject | undefined {\n const opts = this.options;\n\n // Register hyperlinks (B-level: side effect on context)\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(\n hyperlinkKey,\n opts.hyperlink.url,\n opts.hyperlink.tooltip,\n );\n }\n\n // Handle fill (needs context for prepForXml)\n let fillObj: IXmlableObject | undefined;\n if (opts.fill !== undefined) {\n fillObj = buildFill(opts.fill).prepForXml(context) ?? undefined;\n }\n\n return buildRunProperties(opts, hyperlinkKey, fillObj);\n }\n\n public toXml(context: IContext): string {\n const opts = this.options;\n\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(\n hyperlinkKey,\n opts.hyperlink.url,\n opts.hyperlink.tooltip,\n );\n }\n\n let fillObj: IXmlableObject | undefined;\n if (opts.fill !== undefined) {\n fillObj = buildFill(opts.fill).prepForXml(context) ?? undefined;\n }\n\n return buildRunPropertiesXml(opts, hyperlinkKey, fillObj);\n }\n}\n\n/**\n * String version of buildRunProperties for zero-allocation serialization.\n */\nexport function buildRunPropertiesXml(\n options: IRunPropertiesOptions,\n hyperlinkKey?: string,\n fillObject?: IXmlableObject,\n): string {\n const a: Record<string, string | number | boolean | undefined> = {};\n if (options.fontSize) a.sz = options.fontSize * 100;\n if (options.bold !== undefined) a.b = options.bold;\n if (options.italic !== undefined) a.i = options.italic;\n if (options.underline) a.u = UnderlineStyle[options.underline];\n if (options.lang) a.lang = options.lang;\n if (options.strike) a.strike = StrikeStyle[options.strike];\n if (options.baseline !== undefined) a.baseline = options.baseline;\n if (options.capitalization)\n a.cap = TextCapitalization[options.capitalization] ?? options.capitalization;\n if (options.spacing !== undefined) a.spc = options.spacing;\n if (options.noProof !== undefined) a.noProof = options.noProof;\n if (options.dirty !== undefined) a.dirty = options.dirty;\n\n const attrStr = attrs(a);\n const body: string[] = [];\n\n if (options.font) {\n body.push(\n `<a:latin${attrs({ typeface: options.font })}/><a:ea${attrs({ typeface: options.font })}/>`,\n );\n }\n\n if (options.hyperlink && hyperlinkKey) {\n const h: Record<string, string | undefined> = { \"r:id\": `{hlink:${hyperlinkKey}}` };\n if (options.hyperlink.tooltip) h.tooltip = options.hyperlink.tooltip;\n body.push(`<a:hlinkClick${attrs(h)}/>`);\n }\n\n if (options.rightToLeft !== undefined) {\n body.push(`<a:rtl${attrs({ val: options.rightToLeft ? 1 : 0 })}/>`);\n }\n\n if (fillObject) {\n body.push(xml(fillObject));\n }\n\n if (!attrStr && body.length === 0) return \"\";\n if (body.length === 0) return `<a:rPr${attrStr}/>`;\n return `<a:rPr${attrStr}>${body.join(\"\")}</a:rPr>`;\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\nimport { escapeXml } from \"@office-open/xml\";\n\nimport type { IRunPropertiesOptions } from \"./run-properties\";\nimport { RunProperties } from \"./run-properties\";\n\nexport interface IRunOptions extends IRunPropertiesOptions {\n readonly text?: string;\n}\n\n/**\n * a:r — A run of text with properties.\n * Lazy: stores options, builds XML object in prepForXml.\n */\nexport class Run extends XmlComponent {\n private readonly options: IRunOptions;\n\n public constructor(options: IRunOptions = {}) {\n super(\"a:r\");\n this.options = options;\n }\n\n public prepForXml(context: IContext): IXmlableObject | undefined {\n const children: IXmlableObject[] = [];\n\n if (RunProperties.hasProperties(this.options)) {\n const rPr = new RunProperties(this.options);\n const rPrObj = rPr.prepForXml(context);\n if (rPrObj) children.push(rPrObj);\n }\n\n if (this.options.text) {\n children.push({ \"a:t\": [this.options.text] });\n }\n\n return {\n \"a:r\":\n children.length === 0\n ? {}\n : children.length === 1 && \"_attr\" in children[0]\n ? children[0]\n : children,\n };\n }\n\n public toXml(context: IContext): string {\n let s = \"<a:r>\";\n\n if (RunProperties.hasProperties(this.options)) {\n const rp = new RunProperties(this.options);\n s += rp.toXml(context);\n }\n\n if (this.options.text) {\n s += `<a:t>${escapeXml(this.options.text)}</a:t>`;\n }\n\n s += \"</a:r>\";\n return s;\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\n\nimport { buildEndParagraphRunProperties } from \"./end-paragraph-run\";\nimport { buildEndParagraphRunPropertiesXml } from \"./end-paragraph-run\";\nimport type { IParagraphPropertiesOptions } from \"./paragraph-properties\";\nimport { buildParagraphProperties } from \"./paragraph-properties\";\nimport { buildParagraphPropertiesXml } from \"./paragraph-properties\";\nimport { Run } from \"./run\";\n\nexport interface IParagraphOptions {\n readonly properties?: IParagraphPropertiesOptions;\n readonly children?: readonly (Run | XmlComponent)[];\n}\n\n/**\n * a:p — A paragraph in a text body.\n * Lazy: stores options, builds XML object in prepForXml.\n */\nexport class Paragraph extends XmlComponent {\n private readonly options: IParagraphOptions;\n\n public constructor(options: IParagraphOptions = {}) {\n super(\"a:p\");\n this.options = options;\n }\n\n public prepForXml(context: IContext): IXmlableObject | undefined {\n const children: IXmlableObject[] = [];\n\n const pPr = buildParagraphProperties(this.options.properties ?? {});\n if (pPr) children.push(pPr);\n\n if (this.options.children) {\n for (const child of this.options.children) {\n const obj = child.prepForXml(context);\n if (obj) children.push(obj);\n }\n }\n\n children.push(buildEndParagraphRunProperties());\n\n return { \"a:p\": children };\n }\n\n public toXml(context: IContext): string {\n let s = \"<a:p>\";\n\n const pPr = buildParagraphPropertiesXml(this.options.properties ?? {});\n if (pPr) s += pPr;\n\n if (this.options.children) {\n for (const child of this.options.children) {\n s += child.toXml(context);\n }\n }\n\n s += buildEndParagraphRunPropertiesXml();\n s += \"</a:p>\";\n return s;\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\n\nimport { buildFill } from \"../drawingml/fill\";\nimport type { FillOptions } from \"../drawingml/fill\";\n\nexport interface ICellBorderOptions {\n readonly width?: number;\n readonly color?: string;\n readonly dashStyle?: \"solid\" | \"dash\" | \"dashDot\" | \"lgDash\" | \"sysDot\" | \"sysDash\";\n}\n\nfunction buildBorderLine(name: string, options: ICellBorderOptions): IXmlableObject {\n const attrs: Record<string, string | number> = {};\n const children: IXmlableObject[] = [];\n\n if (options.width !== undefined) attrs.w = options.width;\n if (options.color) {\n children.push({\n \"a:solidFill\": [{ \"a:srgbClr\": { _attr: { val: options.color.replace(\"#\", \"\") } } }],\n });\n }\n if (options.dashStyle) {\n children.push({ \"a:prstDash\": { _attr: { val: options.dashStyle } } });\n }\n\n return { [name]: Object.keys(attrs).length > 0 ? [{ _attr: attrs }, ...children] : children };\n}\n\n/**\n * a:tcPr — Table cell properties (borders + fill).\n * Lazy: stores options, builds IXmlableObject in prepForXml.\n */\nexport class TableCellProperties extends BaseXmlComponent {\n private readonly options?: {\n readonly fill?: FillOptions;\n readonly borders?: {\n readonly top?: ICellBorderOptions;\n readonly bottom?: ICellBorderOptions;\n readonly left?: ICellBorderOptions;\n readonly right?: ICellBorderOptions;\n };\n readonly verticalAlign?: \"t\" | \"ctr\" | \"b\";\n };\n\n public constructor(options?: {\n readonly fill?: FillOptions;\n readonly borders?: {\n readonly top?: ICellBorderOptions;\n readonly bottom?: ICellBorderOptions;\n readonly left?: ICellBorderOptions;\n readonly right?: ICellBorderOptions;\n };\n readonly verticalAlign?: \"t\" | \"ctr\" | \"b\";\n }) {\n super(\"a:tcPr\");\n this.options = options;\n }\n\n public override prepForXml(context: IContext): IXmlableObject {\n const children: IXmlableObject[] = [];\n const opts = this.options;\n\n if (opts?.verticalAlign) {\n children.push({ _attr: { anchor: opts.verticalAlign } });\n }\n\n if (opts?.borders) {\n if (opts.borders.left) children.push(buildBorderLine(\"a:lnL\", opts.borders.left));\n if (opts.borders.right) children.push(buildBorderLine(\"a:lnR\", opts.borders.right));\n if (opts.borders.top) children.push(buildBorderLine(\"a:lnT\", opts.borders.top));\n if (opts.borders.bottom) children.push(buildBorderLine(\"a:lnB\", opts.borders.bottom));\n }\n\n if (opts?.fill !== undefined) {\n const fillComp = buildFill(opts.fill);\n const fillObj = fillComp.prepForXml(context);\n if (fillObj) children.push(fillObj);\n }\n\n return {\n \"a:tcPr\":\n children.length === 0\n ? {}\n : children.length === 1 && \"_attr\" in children[0]\n ? children[0]\n : children,\n };\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\n\nimport type { FillOptions } from \"../drawingml/fill\";\nimport { Paragraph } from \"../shape/paragraph/paragraph\";\nimport { Run } from \"../shape/paragraph/run\";\nimport { TableCellProperties, type ICellBorderOptions } from \"./table-cell-properties\";\n\nexport const VerticalAlignment = {\n TOP: \"t\",\n CENTER: \"ctr\",\n BOTTOM: \"b\",\n} as const;\n\nexport interface ITableCellOptions {\n readonly text?: string;\n readonly children?: readonly BaseXmlComponent[];\n readonly fill?: FillOptions;\n readonly borders?: {\n readonly top?: ICellBorderOptions;\n readonly bottom?: ICellBorderOptions;\n readonly left?: ICellBorderOptions;\n readonly right?: ICellBorderOptions;\n };\n readonly columnSpan?: number;\n readonly rowSpan?: number;\n readonly verticalAlign?: 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 IXmlableObject in prepForXml.\n */\nexport class TableCell extends BaseXmlComponent {\n private readonly options: ITableCellOptions;\n private readonly paragraphs?: readonly BaseXmlComponent[];\n\n public constructor(options: ITableCellOptions = {}) {\n super(\"a:tc\");\n this.options = options;\n this.paragraphs =\n options.children ??\n (options.text !== undefined\n ? [\n new Paragraph({\n properties: { bulletNone: false },\n children: [new Run({ text: options.text })],\n }),\n ]\n : undefined);\n }\n\n public override prepForXml(context: IContext): IXmlableObject {\n const opts = this.options;\n const children: IXmlableObject[] = [];\n\n // gridSpan and rowSpan attributes\n const tcAttrs: Record<string, number> = {};\n if (opts.columnSpan !== undefined && opts.columnSpan > 1)\n tcAttrs.gridSpan = opts.columnSpan;\n if (opts.rowSpan !== undefined && opts.rowSpan > 1) tcAttrs.rowSpan = opts.rowSpan;\n if (Object.keys(tcAttrs).length > 0) children.push({ _attr: tcAttrs });\n\n // a:txBody\n const txBodyChildren: IXmlableObject[] = [];\n const margins = opts.margins;\n const bodyPrAttrs: Record<string, number> = {};\n if (margins?.top !== undefined) bodyPrAttrs.tIns = margins.top;\n if (margins?.bottom !== undefined) bodyPrAttrs.bIns = margins.bottom;\n if (margins?.left !== undefined) bodyPrAttrs.lIns = margins.left;\n if (margins?.right !== undefined) bodyPrAttrs.rIns = margins.right;\n txBodyChildren.push({\n \"a:bodyPr\": Object.keys(bodyPrAttrs).length > 0 ? { _attr: bodyPrAttrs } : {},\n });\n txBodyChildren.push({ \"a:lstStyle\": {} });\n\n if (this.paragraphs) {\n for (const p of this.paragraphs) {\n const pObj = p.prepForXml(context);\n if (pObj) txBodyChildren.push(pObj);\n }\n } else {\n txBodyChildren.push({ \"a:p\": [] });\n }\n children.push({ \"a:txBody\": txBodyChildren });\n\n // a:tcPr\n const tcPr = new TableCellProperties({\n fill: opts.fill,\n borders: opts.borders,\n verticalAlign: opts.verticalAlign ? VerticalAlignment[opts.verticalAlign] : undefined,\n });\n const tcPrObj = tcPr.prepForXml(context);\n if (tcPrObj) children.push(tcPrObj);\n\n return { \"a:tc\": children };\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\nimport { attrs } from \"@office-open/xml\";\n\nimport { VerticalAlignment } from \"../table/table-cell\";\nimport { Paragraph } from \"./paragraph/paragraph\";\nimport { Run } from \"./paragraph/run\";\n\nexport interface ITextBodyOptions {\n readonly paragraphs?: readonly (Paragraph | string)[];\n readonly vertical?: \"vert\" | \"vert270\" | \"horz\" | \"wordArtVert\";\n readonly anchor?: 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: ITextBodyOptions): 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 = VerticalAlignment[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\nfunction buildBodyPrXml(options: ITextBodyOptions): string {\n let s = \"<a:bodyPr\";\n\n const a: Record<string, string | number | undefined> = {};\n if (options.vertical) a.vert = options.vertical;\n if (options.anchor) a.anchor = VerticalAlignment[options.anchor];\n if (options.wrap) a.wrap = options.wrap;\n if (options.margins?.top !== undefined) a.tIns = options.margins.top;\n if (options.margins?.bottom !== undefined) a.bIns = options.margins.bottom;\n if (options.margins?.left !== undefined) a.lIns = options.margins.left;\n if (options.margins?.right !== undefined) a.rIns = options.margins.right;\n if (options.columns !== undefined) a.numCol = options.columns;\n if (options.columnSpacing !== undefined) a.spcCol = options.columnSpacing * 100;\n s += attrs(a);\n\n let inner = \"\";\n if (options.autoFit === \"normal\") inner += \"<a:normAutofit/>\";\n else if (options.autoFit === \"shape\") inner += \"<a:spAutoFit/>\";\n else if (options.autoFit === \"none\") inner += \"<a:noAutofit/>\";\n\n return inner ? `${s}>${inner}</a:bodyPr>` : `${s}/>`;\n}\n\n/**\n * p:txBody — Text body within a shape.\n * Lazy: stores options, builds XML object in prepForXml.\n */\nexport class TextBody extends XmlComponent {\n private readonly options: ITextBodyOptions;\n\n public constructor(options: ITextBodyOptions = {}) {\n super(\"p:txBody\");\n this.options = options;\n }\n\n public prepForXml(context: IContext): IXmlableObject | undefined {\n const children: IXmlableObject[] = [];\n\n children.push(buildBodyPr(this.options));\n children.push({ \"a:lstStyle\": {} });\n\n if (this.options.paragraphs) {\n for (const p of this.options.paragraphs) {\n const para =\n typeof p === \"string\" ? new Paragraph({ children: [new Run({ text: p })] }) : p;\n const obj = para.prepForXml(context);\n if (obj) children.push(obj);\n }\n } else {\n const obj = new Paragraph().prepForXml(context);\n if (obj) children.push(obj);\n }\n\n return { \"p:txBody\": children };\n }\n\n public toXml(context: IContext): string {\n let s = \"<p:txBody>\";\n s += buildBodyPrXml(this.options);\n s += \"<a:lstStyle/>\";\n\n if (this.options.paragraphs) {\n for (const p of this.options.paragraphs) {\n const para =\n typeof p === \"string\" ? new Paragraph({ children: [new Run({ text: p })] }) : p;\n s += para.toXml(context);\n }\n } else {\n s += new Paragraph().toXml(context);\n }\n\n s += \"</p:txBody>\";\n return s;\n }\n}\n","import { GroupShapeProperties } from \"@file/drawingml/group-shape-properties\";\nimport { GroupShapeNonVisualProperties } from \"@file/shape-tree/group-shape-non-visual\";\nimport { BuilderElement, NextAttributeComponent, XmlComponent } from \"@file/xml-components\";\n\nimport { Paragraph } from \"../shape/paragraph/paragraph\";\nimport { Run } from \"../shape/paragraph/run\";\nimport { TextBody } from \"../shape/text-body\";\n\nexport interface INotesSlideOptions {\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: INotesSlideOptions = {}) {\n super(\"p:notes\");\n\n this.root.push(\n new NextAttributeComponent({\n \"xmlns:a\": {\n key: \"xmlns:a\",\n value: \"http://schemas.openxmlformats.org/drawingml/2006/main\",\n },\n \"xmlns:r\": {\n key: \"xmlns:r\",\n value: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\n },\n \"xmlns:p\": {\n key: \"xmlns:p\",\n value: \"http://schemas.openxmlformats.org/presentationml/2006/main\",\n },\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 ? { paragraphs: [new Paragraph({ children: [new Run({ text })] })] }\n : undefined;\n this.root.push(new TextBody(textBodyOptions));\n }\n}\n","import { ImportedXmlComponent } from \"@file/xml-components\";\n\nexport interface IShowOptions {\n readonly loop?: boolean;\n readonly kiosk?: boolean;\n readonly showNarration?: boolean;\n readonly useTimings?: boolean;\n}\n\nfunction buildPresPropsXml(showOptions?: IShowOptions): string {\n const showPrXml = showOptions\n ? `<p:showPr${[\n showOptions.loop ? ' loop=\"1\"' : \"\",\n showOptions.kiosk ? ' kiosk=\"1\"' : \"\",\n showOptions.showNarration === false ? ' showNarration=\"0\"' : \"\",\n showOptions.useTimings ? ' useTimings=\"1\"' : \"\",\n ].join(\"\")}><p:present/></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\n public constructor(showOptions?: IShowOptions) {\n super(\"p:presentationPr\");\n const key = showOptions ? JSON.stringify(showOptions) : \"\";\n if (!PresentationProperties.cache.has(key)) {\n PresentationProperties.cache.set(\n key,\n ImportedXmlComponent.fromXmlString(buildPresPropsXml(showOptions)),\n );\n }\n }\n\n public prepForXml() {\n const key = this.showOptions ? JSON.stringify(this.showOptions) : \"\";\n return PresentationProperties.cache.get(key)!.prepForXml({ stack: [] });\n }\n\n private readonly showOptions?: IShowOptions;\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport { ImportedXmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\n\nexport interface IPresentationOptions {\n readonly slideWidth?: number;\n readonly slideHeight?: number;\n readonly slideIds: readonly 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\nconst DEFAULT_TEXT_STYLE_OBJ: IXmlableObject = ImportedXmlComponent.fromXmlString(\n DEFAULT_TEXT_STYLE_XML,\n).prepForXml({ stack: [] })!;\n\n/**\n * p:presentation — Root element of a PPTX file.\n * Lazy: stores options, builds XML object directly in prepForXml.\n */\nexport class Presentation extends XmlComponent {\n private readonly options: IPresentationOptions;\n\n public constructor(options: IPresentationOptions) {\n super(\"p:presentation\");\n this.options = options;\n }\n\n public prepForXml(_context: IContext): IXmlableObject | undefined {\n const opts = this.options;\n\n const children: IXmlableObject[] = [];\n\n // xmlns attributes\n children.push({\n _attr: {\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 // sldMasterIdLst\n children.push({\n \"p:sldMasterIdLst\": [\n {\n \"p:sldMasterId\": { _attr: { id: 2147483648, \"r:id\": \"rId1\" } },\n },\n ],\n });\n\n // sldIdLst (dynamic)\n const sldIds = opts.slideIds.map((id, i) => ({\n \"p:sldId\": { _attr: { id, \"r:id\": `rId${i + 2}` } },\n }));\n children.push({ \"p:sldIdLst\": sldIds });\n\n // sldSz\n const cx = opts.slideWidth ?? 9144000;\n const cy = opts.slideHeight ?? 6858000;\n children.push({\n \"p:sldSz\": {\n _attr: {\n cx,\n cy,\n ...(cx === 914400 && cy === 6858000 ? { type: \"screen4x3\" } : {}),\n },\n },\n });\n\n // notesSz\n children.push({\n \"p:notesSz\": { _attr: { cx: 6858000, cy: 9144000 } },\n });\n\n // defaultTextStyle (cached static singleton)\n children.push(DEFAULT_TEXT_STYLE_OBJ);\n\n return { \"p:presentation\": children };\n }\n\n public toXml(_context: IContext): string {\n const opts = this.options;\n\n const cx = opts.slideWidth ?? 9144000;\n const cy = opts.slideHeight ?? 6858000;\n const typeAttr = cx === 914400 && cy === 6858000 ? ' type=\"screen4x3\"' : \"\";\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><p:sldMasterId id=\"2147483648\" r:id=\"rId1\"/></p:sldMasterIdLst>';\n s += \"<p:sldIdLst>\";\n for (let i = 0; i < opts.slideIds.length; i++) {\n s += `<p:sldId id=\"${opts.slideIds[i]}\" r:id=\"rId${i + 2}\"/>`;\n }\n s += \"</p:sldIdLst>\";\n s += `<p:sldSz cx=\"${cx}\" cy=\"${cy}\"${typeAttr}/>`;\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 { IPresentationOptions } from \"./presentation\";\n\nexport interface IViewWrapper {\n readonly View: BaseXmlComponent;\n readonly Relationships: Relationships;\n}\n\nexport class PresentationWrapper implements IViewWrapper {\n private readonly presentation: Presentation;\n private readonly relationships: Relationships;\n\n public constructor(options: IPresentationOptions) {\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 public get Relationships(): Relationships {\n return this.relationships;\n }\n}\n","import { ImportedXmlComponent } from \"@file/xml-components\";\n\nconst SLIDE_LAYOUT_XML = `<p:sldLayout 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\" type=\"blank\" preserve=\"1\">\n <p:cSld>\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:sp>\n <p:nvSpPr><p:cNvPr id=\"2\" name=\"Slide Number Placeholder 1\"/><p:cNvSpPr><a:spLocks noGrp=\"1\" noRot=\"1\" noChangeAspect=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"sldNum\" idx=\"1\"/></p:nvPr></p:nvSpPr>\n <p:spPr>\n <a:xfrm anchor=\"t\"><a:off x=\"457200\" y=\"666750\"/><a:ext cx=\"914400\" cy=\"365760\"/></a:xfrm>\n <a:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld type=\"slidNum\"><a:ptv/><a:endParaRPr lang=\"en-US\"/></a:fld></a:p></a:txBody>\n <p:extLst><p:ext xmlns:p14=\"http://schemas.microsoft.com/office/powerpoint/2010/main\" p14:modId=\"{A8390B1C-6C38-4F8F-A66D-48FD5329C7A0}\"/></p:extLst>\n </p:spPr>\n </p:sp>\n <p:sp>\n <p:nvSpPr><p:cNvPr id=\"3\" name=\"Date Placeholder 2\"/><p:cNvSpPr><a:spLocks noGrp=\"1\" noRot=\"1\" noChangeAspect=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"dt\" idx=\"2\"/></p:nvPr></p:nvSpPr>\n <p:spPr>\n <a:xfrm anchor=\"t\"><a:off x=\"457200\" y=\"2743200\"/><a:ext cx=\"4572000\" cy=\"365760\"/></a:xfrm>\n <a:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld type=\"datetime\"><a:ptv/><a:endParaRPr lang=\"en-US\"/></a:fld></a:p></a:txBody>\n <p:extLst><p:ext xmlns:p14=\"http://schemas.microsoft.com/office/powerpoint/2010/main\" p14:modId=\"{A8390B1C-6C38-4F8F-A66D-48FD5329C7A0}\"/></p:extLst>\n </p:spPr>\n </p:sp>\n <p:sp>\n <p:nvSpPr><p:cNvPr id=\"4\" name=\"Footer Placeholder 3\"/><p:cNvSpPr><a:spLocks noGrp=\"1\" noRot=\"1\" noChangeAspect=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"ftr\" idx=\"3\"/></p:nvPr></p:nvSpPr>\n <p:spPr>\n <a:xfrm anchor=\"t\"><a:off x=\"457200\" y=\"6629400\"/><a:ext cx=\"6858000\" cy=\"365760\"/></a:xfrm>\n <a:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></a:txBody>\n <p:extLst><p:ext xmlns:p14=\"http://schemas.microsoft.com/office/powerpoint/2010/main\" p14:modId=\"{A8390B1C-6C38-4F8F-A66D-48FD5329C7A0}\"/></p:extLst>\n </p:spPr>\n </p:sp>\n </p:spTree>\n </p:cSld>\n <p:clrMapOvr>\n <a:masterClrMapping/>\n </p:clrMapOvr>\n</p:sldLayout>`;\n\nexport class DefaultSlideLayout extends ImportedXmlComponent {\n private static instance = ImportedXmlComponent.fromXmlString(SLIDE_LAYOUT_XML);\n\n public constructor() {\n super(\"p:sldLayout\");\n }\n\n public prepForXml() {\n return DefaultSlideLayout.instance.prepForXml({ stack: [] });\n }\n}\n","import type { IHeaderFooterOptions } from \"@file/header-footer/header-footer\";\nimport { ImportedXmlComponent } from \"@file/xml-components\";\n\nfunction buildSlideMasterXml(headerFooter?: IHeaderFooterOptions): string {\n const hfXml = headerFooter ? `<p:hf dt=\"0\" hdr=\"0\" ftr=\"0\" sldNum=\"0\"/>` : \"\";\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\">\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:sp><p:nvSpPr><p:cNvPr id=\"4\" name=\"Date Placeholder 3\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"dt\" sz=\"half\" idx=\"2\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"457200\" y=\"6356350\"/><a:ext cx=\"2133600\" cy=\"365125\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert=\"horz\" lIns=\"91440\" tIns=\"45720\" rIns=\"91440\" bIns=\"45720\" rtlCol=\"0\" anchor=\"ctr\"/><a:lstStyle><a:lvl1pPr algn=\"l\"><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><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><p:sp><p:nvSpPr><p:cNvPr id=\"5\" name=\"Footer Placeholder 4\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"ftr\" sz=\"quarter\" idx=\"3\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"3124200\" y=\"6356350\"/><a:ext cx=\"2895600\" cy=\"365125\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert=\"horz\" lIns=\"91440\" tIns=\"45720\" rIns=\"91440\" bIns=\"45720\" rtlCol=\"0\" anchor=\"ctr\"/><a:lstStyle><a:lvl1pPr algn=\"ctr\"><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><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id=\"6\" name=\"Slide Number Placeholder 5\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"sldNum\" sz=\"quarter\" idx=\"4\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"6553200\" y=\"6356350\"/><a:ext cx=\"2133600\" cy=\"365125\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert=\"horz\" lIns=\"91440\" tIns=\"45720\" rIns=\"91440\" bIns=\"45720\" rtlCol=\"0\" anchor=\"ctr\"/><a:lstStyle><a:lvl1pPr algn=\"r\"><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><a:fld id=\"{C1FF6DA9-008F-8B48-92A6-B652298478BF}\" type=\"slidenum\"><a:rPr lang=\"en-US\" smtClean=\"0\"/><a:t>&lt;#&gt;</a:t></a:fld><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>\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:sldLayoutIdLst>\n <p:sldLayoutId id=\"2147483649\" r:id=\"rId1\"/>\n </p:sldLayoutIdLst>${hfXml}\n <p:txStyles>\n <p:titleStyle>\n <a:lvl1pPr algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc>\n <a:spcBef><a:spcPct val=\"0\"/></a:spcBef>\n <a:buNone/>\n <a:defRPr sz=\"4400\" kern=\"1200\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mj-lt\"/><a:ea typeface=\"+mj-ea\"/><a:cs typeface=\"+mj-cs\"/>\n </a:defRPr>\n </a:lvl1pPr>\n </p:titleStyle>\n <p:bodyStyle>\n <a:lvl1pPr marL=\"228600\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc>\n <a:spcBef><a:spcPts val=\"1000\"/></a:spcBef>\n <a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/>\n <a:buChar char=\"•\"/>\n <a:defRPr sz=\"2800\" kern=\"1200\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </a:defRPr>\n </a:lvl1pPr>\n <a:lvl2pPr marL=\"685800\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc>\n <a:spcBef><a:spcPts val=\"500\"/></a:spcBef>\n <a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/>\n <a:buChar char=\"•\"/>\n <a:defRPr sz=\"2400\" kern=\"1200\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </a:defRPr>\n </a:lvl2pPr>\n <a:lvl3pPr marL=\"1143000\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc>\n <a:spcBef><a:spcPts val=\"500\"/></a:spcBef>\n <a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/>\n <a:buChar char=\"•\"/>\n <a:defRPr sz=\"2000\" kern=\"1200\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </a:defRPr>\n </a:lvl3pPr>\n <a:lvl4pPr marL=\"1600200\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc>\n <a:spcBef><a:spcPts val=\"500\"/></a:spcBef>\n <a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/>\n <a:buChar char=\"•\"/>\n <a:defRPr sz=\"1800\" kern=\"1200\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </a:defRPr>\n </a:lvl4pPr>\n <a:lvl5pPr marL=\"2057400\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc>\n <a:spcBef><a:spcPts val=\"500\"/></a:spcBef>\n <a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/>\n <a:buChar char=\"•\"/>\n <a:defRPr sz=\"1800\" kern=\"1200\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </a:defRPr>\n </a:lvl5pPr>\n <a:lvl6pPr marL=\"2514600\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc>\n <a:spcBef><a:spcPts val=\"500\"/></a:spcBef>\n <a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/>\n <a:buChar char=\"•\"/>\n <a:defRPr sz=\"1800\" kern=\"1200\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </a:defRPr>\n </a:lvl6pPr>\n <a:lvl7pPr marL=\"2971800\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc>\n <a:spcBef><a:spcPts val=\"500\"/></a:spcBef>\n <a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/>\n <a:buChar char=\"•\"/>\n <a:defRPr sz=\"1800\" kern=\"1200\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </a:defRPr>\n </a:lvl7pPr>\n <a:lvl8pPr marL=\"3429000\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc>\n <a:spcBef><a:spcPts val=\"500\"/></a:spcBef>\n <a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/>\n <a:buChar char=\"•\"/>\n <a:defRPr sz=\"1800\" kern=\"1200\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </a:defRPr>\n </a:lvl8pPr>\n <a:lvl9pPr marL=\"3886200\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc>\n <a:spcBef><a:spcPts val=\"500\"/></a:spcBef>\n <a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/>\n <a:buChar char=\"•\"/>\n <a:defRPr sz=\"1800\" kern=\"1200\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </a:defRPr>\n </a:lvl9pPr>\n </p:bodyStyle>\n <p:otherStyle>\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\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </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\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </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\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </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\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </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\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </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\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </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\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </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\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </a:defRPr>\n </a:lvl8pPr>\n <a:lvl9pPr marL=\"3657600\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1800\" kern=\"1200\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </a:defRPr>\n </a:lvl9pPr>\n </p:otherStyle>\n </p:txStyles>\n</p:sldMaster>`;\n}\n\nexport class DefaultSlideMaster extends ImportedXmlComponent {\n private static cache = new Map<string, ImportedXmlComponent>();\n private readonly headerFooter?: IHeaderFooterOptions;\n\n public constructor(headerFooter?: IHeaderFooterOptions) {\n super(\"p:sldMaster\");\n this.headerFooter = headerFooter;\n const key = headerFooter ? JSON.stringify(headerFooter) : \"\";\n if (!DefaultSlideMaster.cache.has(key)) {\n DefaultSlideMaster.cache.set(\n key,\n ImportedXmlComponent.fromXmlString(buildSlideMasterXml(headerFooter)),\n );\n }\n }\n\n public prepForXml() {\n const key = this.headerFooter ? JSON.stringify(this.headerFooter) : \"\";\n return DefaultSlideMaster.cache.get(key)!.prepForXml({ stack: [] });\n }\n}\n","import { BuilderElement, StringContainer, XmlComponent } from \"@file/xml-components\";\n\nimport type { IAnimationOptions, AnimationType } from \"./types\";\n\nconst 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 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\ninterface IAnimationEntry {\n readonly spid: number;\n readonly options: IAnimationOptions;\n}\n\n/**\n * p:timing — Slide timing for shape animations.\n */\nexport class SlideTiming extends XmlComponent {\n public constructor(entries: readonly IAnimationEntry[]) {\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 // Build animation nodes grouped by click (onClick triggers create new click groups)\n const animationNodes: 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 // For afterEffect, add delay from previous click group\n if (options.trigger === \"afterPrevious\" && i > 0) {\n clickGroupDelay += (options.duration ?? 500) + (options.delay ?? 0);\n }\n // For new clickEffect, reset delay\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 = PRESET_IDS[options.type];\n const presetSubtype = options.direction\n ? (DIRECTION_SUBTYPES[options.direction] ?? 0)\n : 0;\n\n // Build the animation effect children\n const effectChildren: XmlComponent[] = [];\n\n // <p:set> to make shape visible\n effectChildren.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: setCtnId },\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: {\n delay: { key: \"delay\", value: \"0\" },\n },\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: [\n new StringContainer(\"p:attrName\", \"style.visibility\"),\n ],\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: \"visible\" } },\n }),\n ],\n }),\n ],\n }),\n );\n\n // Add animEffect for non-appear types\n if (options.type !== \"appear\") {\n const filterBase = FILTER_MAP[options.type];\n const dirMap = DIRECTION_FILTER[options.type];\n const dirFilter =\n 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 effectChildren.push(\n new BuilderElement({\n name: \"p:animEffect\",\n attributes: {\n transition: { key: \"transition\", value: \"in\" },\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: effectCtnId2 },\n dur: {\n key: \"dur\",\n value: String(options.duration ?? 500),\n },\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 // Build effect cTn\n const effectCtn = new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: effectCtnId },\n presetID: { key: \"presetID\", value: presetId },\n presetClass: { key: \"presetClass\", value: \"entr\" },\n presetSubtype: { key: \"presetSubtype\", value: presetSubtype },\n fill: { key: \"fill\", value: \"hold\" },\n nodeType: { key: \"nodeType\", value: nodeType },\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: 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 ],\n }),\n ],\n }),\n ],\n }),\n ],\n }),\n );\n }\n}\n","import { BuilderElement, XmlComponent } from \"@file/xml-components\";\n\nexport type EffectType = \"outerShadow\" | \"innerShadow\" | \"glow\" | \"reflection\" | \"softEdge\";\n\nexport const ReflectionAlignment = {\n TOP_LEFT: \"tl\",\n TOP: \"t\",\n TOP_RIGHT: \"tr\",\n LEFT: \"l\",\n CENTER: \"ctr\",\n RIGHT: \"r\",\n BOTTOM_LEFT: \"bl\",\n BOTTOM: \"b\",\n BOTTOM_RIGHT: \"br\",\n} as const;\n\nexport interface IShadowOptions {\n readonly blur?: number;\n readonly dist?: number;\n readonly direction?: number;\n readonly color?: string;\n readonly alpha?: number;\n readonly rotateWithShape?: boolean;\n}\n\nexport interface IGlowOptions {\n readonly radius?: number;\n readonly color?: string;\n readonly alpha?: number;\n}\n\nexport interface IReflectionOptions {\n readonly blurRadius?: number;\n readonly dist?: 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?: keyof typeof ReflectionAlignment;\n readonly rotateWithShape?: boolean;\n}\n\nexport interface ISoftEdgeOptions {\n readonly radius?: number;\n}\n\nexport interface IBevelOptions {\n readonly width?: number;\n readonly height?: number;\n}\n\nexport interface IRotation3DOptions {\n readonly x?: number;\n readonly y?: number;\n readonly z?: number;\n readonly perspective?: number;\n}\n\nexport interface IEffectsOptions {\n readonly outerShadow?: IShadowOptions;\n readonly innerShadow?: IShadowOptions;\n readonly glow?: IGlowOptions;\n readonly reflection?: IReflectionOptions;\n readonly softEdge?: ISoftEdgeOptions;\n readonly rotation3D?: IRotation3DOptions;\n readonly bevelTop?: IBevelOptions;\n readonly bevelBottom?: IBevelOptions;\n readonly extrusionH?: number;\n readonly material?:\n | \"plastic\"\n | \"metal\"\n | \"matte\"\n | \"warmMatte\"\n | \"softEdge\"\n | \"flat\"\n | \"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\nfunction buildShadowElement(tag: string, options: IShadowOptions): XmlComponent {\n const attrs: Record<\n string,\n { readonly key: string; readonly value: string | number | boolean }\n > = {};\n if (options.blur !== undefined) attrs.blurRad = { key: \"blurRad\", value: options.blur };\n if (options.dist !== undefined) attrs.dist = { key: \"dist\", value: options.dist };\n if (options.direction !== undefined) attrs.dir = { key: \"dir\", value: options.direction };\n if (options.rotateWithShape !== undefined)\n attrs.rotWithShape = { key: \"rotWithShape\", value: options.rotateWithShape ? 1 : 0 };\n\n const color = options.color ?? \"000000\";\n const alpha = options.alpha ?? 40;\n\n return new BuilderElement({\n name: `a:${tag}`,\n attributes: attrs,\n children: [\n new BuilderElement({\n name: \"a:srgbClr\",\n attributes: { val: { key: \"val\", value: color } },\n children: [\n new BuilderElement({\n name: \"a:alpha\",\n attributes: { val: { key: \"val\", value: alpha * 1000 } },\n }),\n ],\n }),\n ],\n });\n}\n\nfunction buildGlowElement(options: IGlowOptions): XmlComponent {\n const radius = options.radius ?? 152400;\n const color = options.color ?? \"4472C4\";\n const alpha = options.alpha ?? 40;\n\n return new BuilderElement({\n name: \"a:glow\",\n attributes: { rad: { key: \"rad\", value: radius } },\n children: [\n new BuilderElement({\n name: \"a:srgbClr\",\n attributes: { val: { key: \"val\", value: color } },\n children: [\n new BuilderElement({\n name: \"a:alpha\",\n attributes: { val: { key: \"val\", value: alpha * 1000 } },\n }),\n ],\n }),\n ],\n });\n}\n\nfunction buildReflectionElement(options: IReflectionOptions): XmlComponent {\n const attrs: Record<string, { readonly key: string; readonly value: string | number }> = {};\n if (options.blurRadius !== undefined)\n attrs.blurRad = { key: \"blurRad\", value: options.blurRadius };\n if (options.startAlpha !== undefined)\n attrs.stA = { key: \"stA\", value: options.startAlpha * 1000 };\n if (options.startPosition !== undefined)\n attrs.stPos = { key: \"stPos\", value: options.startPosition * 1000 };\n if (options.endAlpha !== undefined)\n attrs.endA = { key: \"endA\", value: options.endAlpha * 1000 };\n if (options.endPosition !== undefined)\n attrs.endPos = { key: \"endPos\", value: options.endPosition * 1000 };\n if (options.dist !== undefined) attrs.dist = { key: \"dist\", value: options.dist };\n if (options.direction !== undefined) attrs.dir = { key: \"dir\", value: options.direction };\n if (options.fadeDirection !== undefined)\n attrs.fadeDir = { key: \"fadeDir\", value: options.fadeDirection * 60000 };\n if (options.scaleX !== undefined) attrs.sx = { key: \"sx\", value: options.scaleX * 1000 };\n if (options.scaleY !== undefined) attrs.sy = { key: \"sy\", value: options.scaleY * 1000 };\n if (options.skewX !== undefined) attrs.kx = { key: \"kx\", value: options.skewX * 60000 };\n if (options.skewY !== undefined) attrs.ky = { key: \"ky\", value: options.skewY * 60000 };\n if (options.alignment !== undefined)\n attrs.algn = { key: \"algn\", value: ReflectionAlignment[options.alignment] };\n if (options.rotateWithShape !== undefined)\n attrs.rotWithShape = { key: \"rotWithShape\", value: options.rotateWithShape ? 1 : 0 };\n\n return new BuilderElement({ name: \"a:reflection\", attributes: attrs });\n}\n\nfunction buildSoftEdgeElement(options: ISoftEdgeOptions): XmlComponent {\n const radius = options.radius ?? 50800;\n return new BuilderElement({\n name: \"a:softEdge\",\n attributes: { rad: { key: \"rad\", value: radius } },\n });\n}\n\n/**\n * a:effectLst — Visual effects for a shape (shadow, glow, reflection, etc.).\n * XSD order: blur → fillOverlay → glow → innerShdw → outerShdw → prstShdw → reflection → softEdge\n */\nexport class EffectList extends XmlComponent {\n public constructor(options: IEffectsOptions) {\n super(\"a:effectLst\");\n\n if (options.glow) {\n this.root.push(buildGlowElement(options.glow));\n }\n if (options.innerShadow) {\n this.root.push(buildShadowElement(\"innerShdw\", options.innerShadow));\n }\n if (options.outerShadow) {\n this.root.push(buildShadowElement(\"outerShdw\", options.outerShadow));\n }\n if (options.reflection) {\n this.root.push(buildReflectionElement(options.reflection));\n }\n if (options.softEdge) {\n this.root.push(buildSoftEdgeElement(options.softEdge));\n }\n }\n}\n\n/**\n * a:scene3d — 3D scene for a shape (camera + lighting rig).\n */\nexport function buildScene3D(options: IEffectsOptions): XmlComponent | null {\n if (!options.rotation3D && !options.lighting) return null;\n\n const rotAttrs: Record<string, { readonly key: string; readonly value: number }> = {\n lat: { key: \"lat\", value: (options.rotation3D?.x ?? 0) * 60000 },\n lon: { key: \"lon\", value: (options.rotation3D?.y ?? 0) * 60000 },\n rev: { key: \"rev\", value: (options.rotation3D?.z ?? 0) * 60000 },\n };\n\n const cameraAttrs: Record<string, { readonly key: string; readonly value: string | number }> = {\n prst: {\n key: \"prst\",\n value: options.rotation3D?.perspective ? \"legacyPerspectiveFront\" : \"orthographicFront\",\n },\n };\n if (options.rotation3D?.perspective) {\n cameraAttrs.fov = { key: \"fov\", value: options.rotation3D.perspective };\n }\n\n const camera = new BuilderElement({\n name: \"a:camera\",\n attributes: cameraAttrs,\n children: options.rotation3D\n ? [new BuilderElement({ name: \"a:rot\", attributes: rotAttrs })]\n : undefined,\n });\n\n const lightRig = new BuilderElement({\n name: \"a:lightRig\",\n attributes: {\n rig: { key: \"rig\", value: options.lighting ?? \"threePt\" },\n dir: { key: \"dir\", value: \"t\" },\n },\n children: [\n new BuilderElement({\n name: \"a:rot\",\n attributes: {\n lat: { key: \"lat\", value: 0 },\n lon: { key: \"lon\", value: 0 },\n rev: { key: \"rev\", value: 0 },\n },\n }),\n ],\n });\n\n return new BuilderElement({\n name: \"a:scene3d\",\n children: [camera, lightRig],\n });\n}\n\n/**\n * a:sp3d — 3D shape properties (extrusion, bevel, material).\n * XSD: extrusionH/prstMaterial/contourW/z are attributes; children are bevelT → bevelB → extrusionClr → contourClr → extLst\n */\nexport function buildShape3D(options: IEffectsOptions): XmlComponent | null {\n if (!options.extrusionH && !options.bevelTop && !options.bevelBottom && !options.material)\n return null;\n\n const children: BuilderElement<{}>[] = [];\n\n if (options.bevelTop) {\n children.push(buildBevelElement(\"a:bevelT\", options.bevelTop));\n }\n if (options.bevelBottom) {\n children.push(buildBevelElement(\"a:bevelB\", options.bevelBottom));\n }\n\n const attrs: Record<string, { readonly key: string; readonly value: string | number }> = {};\n if (options.extrusionH !== undefined)\n attrs.extrusionH = { key: \"extrusionH\", value: options.extrusionH };\n if (options.material) attrs.prstMaterial = { key: \"prstMaterial\", value: options.material };\n\n return new BuilderElement({\n name: \"a:sp3d\",\n attributes: Object.keys(attrs).length > 0 ? attrs : undefined,\n children: children.length > 0 ? children : undefined,\n });\n}\n\nfunction buildBevelElement(name: string, options: IBevelOptions): BuilderElement<{}> {\n const attrs: Record<string, { readonly key: string; readonly value: number }> = {};\n if (options.width !== undefined) attrs.w = { key: \"w\", value: options.width * 12700 };\n if (options.height !== undefined) attrs.h = { key: \"h\", value: options.height * 12700 };\n return new BuilderElement({\n name,\n attributes: Object.keys(attrs).length > 0 ? attrs : undefined,\n });\n}\n","import {\n createOutline,\n PresetDash,\n LineEndType,\n LineEndWidth,\n LineEndLength,\n} 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, keyof typeof PresetDash> = {\n solid: \"SOLID\",\n dash: \"DASH\",\n dashDot: \"DASH_DOT\",\n lgDash: \"LG_DASH\",\n sysDot: \"SYS_DOT\",\n sysDash: \"SYS_DASH\",\n};\n\nconst ARROWHEAD_MAP: Record<string, keyof typeof LineEndType> = {\n triangle: \"TRIANGLE\",\n stealth: \"STEALTH\",\n diamond: \"DIAMOND\",\n oval: \"OVAL\",\n open: \"ARROW\",\n};\n\nconst ARROWHEAD_SIZE_MAP: Record<string, keyof typeof LineEndWidth> = {\n sm: \"SMALL\",\n med: \"MEDIUM\",\n lg: \"LARGE\",\n};\n\nfunction toCoreLineEnd(type: string, width?: string, length?: string): CoreLineEndOptions {\n return {\n type: ARROWHEAD_MAP[type] ?? \"TRIANGLE\",\n ...(width ? { width: ARROWHEAD_SIZE_MAP[width] as keyof typeof LineEndWidth } : {}),\n ...(length ? { length: ARROWHEAD_SIZE_MAP[length] as keyof typeof LineEndLength } : {}),\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 { BuilderElement } from \"@file/xml-components\";\n\n/**\n * a:prstGeom — Preset geometry for shapes (rect, ellipse, triangle, etc.).\n */\nexport class PresetGeometry extends BuilderElement<{ readonly prst: string }> {\n public constructor(prst: string, avLst?: BuilderElement) {\n super({\n name: \"a:prstGeom\",\n attributes: { prst: { key: \"prst\", value: prst } },\n children: avLst ? [avLst] : [new BuilderElement({ name: \"a:avLst\" })],\n });\n }\n}\n","import { BuilderElement, NextAttributeComponent, XmlComponent } from \"@file/xml-components\";\n\nexport interface ITransform2DOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n readonly flipH?: boolean;\n readonly rotation?: number;\n}\n\n/**\n * a:xfrm / p:xfrm — 2D transform for shapes and graphic frames (position + size in EMUs).\n */\nexport class Transform2D extends XmlComponent {\n public constructor(options: ITransform2DOptions, prefix: \"a\" | \"p\" = \"a\") {\n super(`${prefix}:xfrm`);\n\n const attrs: Record<\n string,\n { readonly key: string; readonly value: string | boolean | number | undefined }\n > = {};\n if (options.flipH !== undefined) attrs.flipH = { key: \"flipH\", value: options.flipH };\n if (options.rotation !== undefined) attrs.rot = { key: \"rot\", value: options.rotation };\n if (Object.keys(attrs).length > 0) {\n this.root.push(new NextAttributeComponent(attrs));\n }\n\n if (options.x !== undefined || options.y !== undefined) {\n this.root.push(\n new BuilderElement({\n name: \"a:off\",\n attributes: {\n x: { key: \"x\", value: options.x ?? 0 },\n y: { key: \"y\", value: options.y ?? 0 },\n },\n }),\n );\n }\n\n if (options.width !== undefined || options.height !== undefined) {\n this.root.push(\n new BuilderElement({\n name: \"a:ext\",\n attributes: {\n cx: { key: \"cx\", value: options.width ?? 0 },\n cy: { key: \"cy\", value: options.height ?? 0 },\n },\n }),\n );\n }\n }\n}\n","import type { File } from \"@file/file\";\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\n\nimport { EffectList, buildScene3D, buildShape3D, type IEffectsOptions } 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 IConnectionSiteOptions {\n readonly x: number;\n readonly y: number;\n readonly angle?: number;\n}\n\nexport interface IShapePropertiesOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n readonly flipH?: boolean;\n readonly rotation?: number;\n readonly geometry?: string;\n readonly fill?: FillOptions;\n readonly outline?: OutlineOptions;\n readonly effects?: IEffectsOptions;\n readonly connectionSites?: readonly IConnectionSiteOptions[];\n}\n\n/**\n * p:spPr — Shape properties (transform, geometry, fill, outline, effects).\n * Lazy: stores options, builds XML object directly in prepForXml.\n */\nexport class ShapeProperties extends BaseXmlComponent {\n private readonly options: IShapePropertiesOptions;\n\n public constructor(options: IShapePropertiesOptions) {\n super(\"p:spPr\");\n this.options = options;\n }\n\n public prepForXml(context: IContext<File>): IXmlableObject | undefined {\n const opts = this.options;\n const children: IXmlableObject[] = [];\n\n // Transform2D\n if (\n opts.x !== undefined ||\n opts.y !== undefined ||\n opts.width !== undefined ||\n opts.height !== undefined ||\n opts.flipH !== undefined ||\n opts.rotation !== undefined\n ) {\n const xfrmObj = new Transform2D(opts).prepForXml(context);\n if (xfrmObj) children.push(xfrmObj);\n }\n\n // PresetGeometry\n const geomObj = new PresetGeometry(opts.geometry ?? \"rect\").prepForXml(context);\n if (geomObj) children.push(geomObj);\n\n // Fill (register blipFill media — B-level 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 const fillObj = fillComponent.prepForXml(context);\n if (fillObj) children.push(fillObj);\n\n // Outline\n if (opts.outline) {\n const outlineObj = createOutlineCompat(opts.outline).prepForXml(context);\n if (outlineObj) children.push(outlineObj);\n }\n\n // Effects\n if (opts.effects) {\n const effectObj = new EffectList(opts.effects).prepForXml(context);\n if (effectObj) children.push(effectObj);\n\n const scene3d = buildScene3D(opts.effects);\n if (scene3d) {\n const sceneObj = scene3d.prepForXml(context);\n if (sceneObj) children.push(sceneObj);\n }\n\n const shape3d = buildShape3D(opts.effects);\n if (shape3d) {\n const shapeObj = shape3d.prepForXml(context);\n if (shapeObj) children.push(shapeObj);\n }\n }\n\n // Connection sites\n if (opts.connectionSites && opts.connectionSites.length > 0) {\n const cxnChildren: IXmlableObject[] = [];\n for (const site of opts.connectionSites) {\n const siteAttrs: Record<string, string | number> = { pos: `${site.x} ${site.y}` };\n if (site.angle !== undefined) siteAttrs.ang = site.angle;\n cxnChildren.push({ \"a:cxn\": { _attr: siteAttrs } });\n }\n children.push({ \"a:cxnLst\": cxnChildren });\n }\n\n return { \"p:spPr\": children };\n }\n}\n","export {\n convertPixelsToEmu as pixelsToEmus,\n convertEmuToPixels as emusToPixels,\n convertInchesToEmu as inchesToEmus,\n convertEmuToInches as emusToInches,\n convertPointsToEmu as pointsToEmus,\n convertEmuToPoints as emusToPoints,\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","import type { IAnimationOptions } from \"@file/animation/types\";\nimport type { IEffectsOptions } from \"@file/drawingml/effects\";\nimport type { OutlineOptions } from \"@file/drawingml/outline\";\nimport { ShapeProperties } from \"@file/drawingml/shape-properties\";\nimport type { IShapePropertiesOptions } from \"@file/drawingml/shape-properties\";\nimport type { File } from \"@file/file\";\nimport { XmlComponent as Xc } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\nimport { attrs, escapeXml, xml } from \"@office-open/xml\";\nimport { pixelsToEmus } from \"@util/types\";\n\nimport { Paragraph } from \"./paragraph/paragraph\";\nimport { Run } from \"./paragraph/run\";\nimport { TextBody } from \"./text-body\";\nimport type { ITextBodyOptions } from \"./text-body\";\n\nexport interface IShapeOptions {\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?: IShapePropertiesOptions[\"fill\"];\n readonly outline?: OutlineOptions;\n readonly effects?: IEffectsOptions;\n readonly flipH?: boolean;\n readonly rotation?: number;\n readonly text?: string;\n readonly paragraphs?: ITextBodyOptions[\"paragraphs\"];\n readonly textVertical?: ITextBodyOptions[\"vertical\"];\n readonly textAnchor?: ITextBodyOptions[\"anchor\"];\n readonly textAutoFit?: ITextBodyOptions[\"autoFit\"];\n readonly textWrap?: ITextBodyOptions[\"wrap\"];\n readonly textMargins?: ITextBodyOptions[\"margins\"];\n readonly textColumns?: ITextBodyOptions[\"columns\"];\n readonly textColumnSpacing?: ITextBodyOptions[\"columnSpacing\"];\n readonly animation?: IAnimationOptions;\n readonly placeholder?: \"title\" | \"body\" | \"subTitle\" | \"sldNum\" | \"dt\" | \"ftr\" | \"hdr\" | \"obj\";\n readonly placeholderIndex?: number;\n}\n\n/**\n * Pure function: builds p:ph element for placeholder.\n */\nfunction buildPlaceholder(type: string, index?: number): IXmlableObject {\n const attrs: Record<string, string | number> = { type };\n if (index !== undefined) attrs.idx = index;\n return { \"p:ph\": { _attr: attrs } };\n}\n\n/**\n * p:sp — A shape on a slide.\n * Lazy: stores options, builds XML object in prepForXml.\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 private readonly shapeId: number;\n private readonly animationOptions?: IAnimationOptions;\n private readonly options: IShapeOptions;\n\n public constructor(options: IShapeOptions = {}) {\n super(\"p:sp\");\n\n const id = options.id ?? Shape.nextId++;\n this.shapeId = id;\n this.animationOptions = options.animation;\n this.options = { ...options, id };\n }\n\n public get ShapeId(): number {\n return this.shapeId;\n }\n\n public get Animation(): IAnimationOptions | undefined {\n return this.animationOptions;\n }\n\n public override prepForXml(context: IContext): IXmlableObject | undefined {\n const opts = this.options;\n const id = this.shapeId;\n const name = opts.name ?? `Shape ${id}`;\n const children: IXmlableObject[] = [];\n\n // nvSpPr\n const nvPrChildren: IXmlableObject[] = [];\n if (opts.placeholder) {\n nvPrChildren.push(buildPlaceholder(opts.placeholder, opts.placeholderIndex));\n }\n children.push({\n \"p:nvSpPr\": [\n { \"p:cNvPr\": { _attr: { id, name } } },\n { \"p:cNvSpPr\": {} },\n { \"p:nvPr\": nvPrChildren.length > 0 ? nvPrChildren : {} },\n ],\n });\n\n // spPr (ShapeProperties)\n const shapeProps: IShapePropertiesOptions = {\n x: opts.x !== undefined ? pixelsToEmus(opts.x) : undefined,\n y: opts.y !== undefined ? pixelsToEmus(opts.y) : undefined,\n width: opts.width !== undefined ? pixelsToEmus(opts.width) : undefined,\n height: opts.height !== undefined ? pixelsToEmus(opts.height) : undefined,\n geometry: opts.geometry,\n fill: opts.fill,\n outline: opts.outline,\n effects: opts.effects,\n flipH: opts.flipH,\n rotation: opts.rotation,\n };\n const spPr = new ShapeProperties(shapeProps);\n const spPrObj = spPr.prepForXml(context as IContext<File>);\n if (spPrObj) children.push(spPrObj);\n\n // txBody (TextBody)\n const textBodyOptions: ITextBodyOptions = {\n paragraphs:\n opts.paragraphs ??\n (opts.text\n ? [new Paragraph({ children: [new Run({ text: opts.text })] })]\n : undefined),\n vertical: opts.textVertical,\n anchor: opts.textAnchor,\n autoFit: opts.textAutoFit,\n wrap: opts.textWrap,\n margins: opts.textMargins,\n columns: opts.textColumns,\n columnSpacing: opts.textColumnSpacing,\n };\n const txBody = new TextBody(textBodyOptions);\n const txBodyObj = txBody.prepForXml(context);\n if (txBodyObj) children.push(txBodyObj);\n\n return { \"p:sp\": children };\n }\n\n public override toXml(context: IContext): string {\n const opts = this.options;\n const id = this.shapeId;\n const name = escapeXml(opts.name ?? `Shape ${id}`);\n\n let s = \"<p:sp><p:nvSpPr>\";\n s += `<p:cNvPr${attrs({ id, name })}/>`;\n s += \"<p:cNvSpPr/>\";\n\n if (opts.placeholder) {\n const phAttrs: Record<string, string | number | undefined> = { type: opts.placeholder };\n if (opts.placeholderIndex !== undefined) phAttrs.idx = opts.placeholderIndex;\n s += `<p:nvPr><p:ph${attrs(phAttrs)}/></p:nvPr>`;\n } else {\n s += \"<p:nvPr/>\";\n }\n s += \"</p:nvSpPr>\";\n\n // spPr — use prepForXml + xml (ShapeProperties not yet converted)\n const spPr = new ShapeProperties({\n x: opts.x !== undefined ? pixelsToEmus(opts.x) : undefined,\n y: opts.y !== undefined ? pixelsToEmus(opts.y) : undefined,\n width: opts.width !== undefined ? pixelsToEmus(opts.width) : undefined,\n height: opts.height !== undefined ? pixelsToEmus(opts.height) : undefined,\n geometry: opts.geometry,\n fill: opts.fill,\n outline: opts.outline,\n effects: opts.effects,\n flipH: opts.flipH,\n rotation: opts.rotation,\n });\n const spPrObj = spPr.prepForXml(context as IContext<File>);\n if (spPrObj) {\n s += xml(spPrObj);\n }\n\n // txBody\n const txBodyOpts: ITextBodyOptions = {\n paragraphs:\n opts.paragraphs ??\n (opts.text\n ? [new Paragraph({ children: [new Run({ text: opts.text })] })]\n : undefined),\n vertical: opts.textVertical,\n anchor: opts.textAnchor,\n autoFit: opts.textAutoFit,\n wrap: opts.textWrap,\n margins: opts.textMargins,\n columns: opts.textColumns,\n columnSpacing: opts.textColumnSpacing,\n };\n s += new TextBody(txBodyOpts).toXml(context);\n\n s += \"</p:sp>\";\n return s;\n }\n}\n","import type { IContext, IXmlableObject } 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 interface ITransitionOptions {\n readonly type?: TransitionType;\n readonly speed?: \"slow\" | \"med\" | \"fast\";\n readonly advanceOnClick?: boolean;\n readonly advanceAfterTime?: number;\n readonly dir?: string;\n readonly orient?: \"horz\" | \"vert\";\n readonly thruBlk?: boolean;\n readonly spokes?: number;\n}\n\nfunction buildTransitionElement(\n type: TransitionType,\n dir?: string,\n orient?: string,\n thruBlk?: boolean,\n spokes?: number,\n): IXmlableObject {\n const attrs: Record<string, string | number> = {};\n\n if (ORIENT_TYPES.has(type) && dir) {\n attrs.dir = dir;\n } else if (SIDE_DIR_TYPES.has(type) && dir) {\n attrs.dir = dir;\n } else if (EIGHT_DIR_TYPES.has(type) && dir) {\n attrs.dir = dir;\n } else if (type === \"strips\" && dir) {\n attrs.dir = dir;\n } else if ((type === \"fade\" || type === \"cut\") && thruBlk !== undefined) {\n attrs.thruBlk = thruBlk ? 1 : 0;\n } else if (type === \"split\") {\n attrs.orient = orient ?? \"horz\";\n attrs.dir = dir ?? \"out\";\n } else if (type === \"wheel\") {\n attrs.spokes = spokes ?? 4;\n } else if (type === \"zoom\" && dir) {\n attrs.dir = dir;\n }\n\n return { [`p:${type}`]: Object.keys(attrs).length > 0 ? { _attr: attrs } : {} };\n}\n\nexport function buildTransition(options: ITransitionOptions): IXmlableObject {\n const children: IXmlableObject[] = [];\n const attrs: Record<string, string | number> = {};\n if (options.speed) attrs.spd = options.speed;\n if (options.advanceOnClick !== undefined) attrs.advClick = options.advanceOnClick ? 1 : 0;\n if (options.advanceAfterTime !== undefined) attrs.advTm = options.advanceAfterTime;\n if (Object.keys(attrs).length > 0) children.push({ _attr: attrs });\n\n if (options.type) {\n children.push(\n buildTransitionElement(\n options.type,\n options.dir,\n options.orient,\n options.thruBlk,\n options.spokes,\n ),\n );\n }\n\n return { \"p:transition\": children.length === 0 ? {} : children };\n}\n\n/**\n * p:transition — Slide transition effect.\n * Lazy: stores options, builds XML object in prepForXml.\n */\nexport class Transition extends BaseXmlComponent {\n private readonly options: ITransitionOptions;\n\n public constructor(options: ITransitionOptions = {}) {\n super(\"p:transition\");\n this.options = options;\n }\n\n public override prepForXml(_context: IContext): IXmlableObject {\n return buildTransition(this.options);\n }\n}\n","import { SlideTiming } from \"@file/animation/timing\";\nimport type { Background } from \"@file/background/background\";\nimport type { IHeaderFooterOptions } from \"@file/header-footer/header-footer\";\nimport { Shape } from \"@file/shape/shape\";\nimport type { ITransitionOptions } from \"@file/transition/transition\";\nimport { buildTransition } from \"@file/transition/transition\";\nimport { BaseXmlComponent, XmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\nimport { xml } from \"@office-open/xml\";\n\nconst NV_GRP_SP_PR = '<p:nvGrpSpPr><p:cNvPr id=\"1\" name=\"\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>';\n\nconst GRP_SP_PR =\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\nconst CLR_MAP_OVR = \"<p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr>\";\n\nconst XMLNS =\n ' 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\nfunction collectAnimations(children: readonly BaseXmlComponent[]): Array<{\n readonly spid: number;\n readonly options: import(\"@file/animation/types\").IAnimationOptions;\n}> {\n const entries: Array<{\n readonly spid: number;\n readonly options: import(\"@file/animation/types\").IAnimationOptions;\n }> = [];\n for (const child of children) {\n if (child instanceof Shape) {\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 object in prepForXml.\n */\nexport class Slide extends XmlComponent {\n private readonly children: readonly BaseXmlComponent[];\n private readonly background?: Background;\n private readonly transition?: ITransitionOptions;\n public readonly HeaderFooter?: IHeaderFooterOptions;\n\n public constructor(\n children: readonly BaseXmlComponent[],\n background?: Background,\n transition?: ITransitionOptions,\n headerFooter?: IHeaderFooterOptions,\n ) {\n super(\"p:sld\");\n this.children = children;\n this.background = background;\n this.transition = transition;\n this.HeaderFooter = headerFooter;\n }\n\n public override prepForXml(context: IContext): IXmlableObject {\n const children: IXmlableObject[] = [];\n\n // xmlns attributes\n children.push({\n _attr: {\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 // p:cSld — common slide data (background + shape tree)\n const cSldChildren: IXmlableObject[] = [];\n if (this.background) {\n const bgObj = this.background.prepForXml(context);\n if (bgObj) cSldChildren.push(bgObj);\n }\n\n // p:spTree — shape tree\n const spTreeChildren: IXmlableObject[] = [\n {\n \"p:nvGrpSpPr\": [\n { \"p:cNvPr\": { _attr: { id: 1, name: \"\" } } },\n { \"p:cNvGrpSpPr\": {} },\n { \"p:nvPr\": {} },\n ],\n },\n {\n \"p:grpSpPr\": {\n \"a:xfrm\": [\n { \"a:off\": { _attr: { x: 0, y: 0 } } },\n { \"a:ext\": { _attr: { cx: 0, cy: 0 } } },\n { \"a:chOff\": { _attr: { x: 0, y: 0 } } },\n { \"a:chExt\": { _attr: { cx: 0, cy: 0 } } },\n ],\n },\n },\n ];\n for (const child of this.children) {\n const obj = child.prepForXml(context);\n if (obj) spTreeChildren.push(obj);\n }\n cSldChildren.push({ \"p:spTree\": spTreeChildren });\n\n children.push({ \"p:cSld\": cSldChildren });\n\n // p:clrMapOvr\n children.push({ \"p:clrMapOvr\": [{ \"a:masterClrMapping\": {} }] });\n\n // p:transition (optional)\n if (this.transition) {\n const transObj = buildTransition(this.transition);\n if (transObj) children.push(transObj);\n }\n\n // p:timing (animation)\n const animations = collectAnimations(this.children);\n if (animations.length > 0) {\n const timing = new SlideTiming(animations);\n const timingObj = timing.prepForXml(context);\n if (timingObj) children.push(timingObj);\n }\n\n return { \"p:sld\": children };\n }\n\n public toXml(context: IContext): string {\n let s = `<p:sld${XMLNS}>`;\n\n // p:cSld\n s += \"<p:cSld>\";\n if (this.background) {\n const bgObj = this.background.prepForXml(context);\n if (bgObj) s += xml(bgObj);\n }\n\n // p:spTree\n s += \"<p:spTree>\";\n s += NV_GRP_SP_PR;\n s += GRP_SP_PR;\n for (const child of this.children) {\n if (typeof (child as unknown as { toXml?: Function }).toXml === \"function\") {\n s += (child as unknown as { toXml(ctx: IContext): string }).toXml(context);\n } else {\n const obj = child.prepForXml(context);\n if (obj) s += xml(obj);\n }\n }\n s += \"</p:spTree></p:cSld>\";\n\n s += CLR_MAP_OVR;\n\n if (this.transition) {\n const transObj = buildTransition(this.transition);\n if (transObj) s += xml(transObj);\n }\n\n const animations = collectAnimations(this.children);\n if (animations.length > 0) {\n const timing = new SlideTiming(animations);\n const timingObj = timing.prepForXml(context);\n if (timingObj) s += xml(timingObj);\n }\n\n s += \"</p:sld>\";\n return s;\n }\n}\n","import { 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 prepForXml() {\n return TableStyles.instance.prepForXml({ stack: [] });\n }\n}\n","import { ImportedXmlComponent } from \"@file/xml-components\";\n\nconst THEME_XML = `<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"Office Theme\">\n <a:themeElements>\n <a:clrScheme name=\"Office\">\n <a:dk1><a:sysClr val=\"windowText\" lastClr=\"000000\"/></a:dk1>\n <a:lt1><a:sysClr val=\"window\" lastClr=\"FFFFFF\"/></a:lt1>\n <a:dk2><a:srgbClr val=\"44546A\"/></a:dk2>\n <a:lt2><a:srgbClr val=\"E7E6E6\"/></a:lt2>\n <a:accent1><a:srgbClr val=\"4472C4\"/></a:accent1>\n <a:accent2><a:srgbClr val=\"ED7D31\"/></a:accent2>\n <a:accent3><a:srgbClr val=\"A5A5A5\"/></a:accent3>\n <a:accent4><a:srgbClr val=\"FFC000\"/></a:accent4>\n <a:accent5><a:srgbClr val=\"5B9BD5\"/></a:accent5>\n <a:accent6><a:srgbClr val=\"70AD47\"/></a:accent6>\n <a:hlink><a:srgbClr val=\"0563C1\"/></a:hlink>\n <a:folHlink><a:srgbClr val=\"954F72\"/></a:folHlink>\n </a:clrScheme>\n <a:fontScheme name=\"Office\">\n <a:majorFont>\n <a:latin typeface=\"Calibri Light\"/>\n <a:ea typeface=\"\"/>\n <a:cs typeface=\"\"/>\n </a:majorFont>\n <a:minorFont>\n <a:latin typeface=\"Calibri\"/>\n <a:ea typeface=\"\"/>\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\nexport class DefaultTheme extends ImportedXmlComponent {\n public static instance = ImportedXmlComponent.fromXmlString(THEME_XML);\n\n public constructor() {\n super(\"a:theme\");\n }\n\n public prepForXml() {\n return DefaultTheme.instance.prepForXml({ stack: [] });\n }\n}\n","import { 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 prepForXml() {\n return ViewProperties.instance.prepForXml({ stack: [] });\n }\n}\n","import { AppProperties } from \"@file/app-properties/app-properties\";\nimport type { Background } from \"@file/background/background\";\nimport { ChartCollection } from \"@file/chart/chart-collection\";\nimport { ContentTypes } from \"@file/content-types/content-types\";\nimport { CoreProperties, type ICorePropertiesOptions } from \"@file/core-properties/properties\";\nimport type { IHeaderFooterOptions } 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 { DefaultSlideLayout } from \"@file/slide-layout/slide-layout\";\nimport { DefaultSlideMaster } from \"@file/slide-master/slide-master\";\nimport { Slide } from \"@file/slide/slide\";\nimport { SmartArtCollection } from \"@file/smartart/smartart-collection\";\nimport { TableStyles } from \"@file/table-styles\";\nimport { DefaultTheme } from \"@file/theme/theme\";\nimport type { ITransitionOptions } 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 { pixelsToEmus } from \"@util/types\";\n\nexport interface ISlideOptions {\n readonly children?: readonly BaseXmlComponent[];\n readonly background?: Background;\n readonly notes?: string;\n readonly transition?: ITransitionOptions;\n readonly headerFooter?: IHeaderFooterOptions;\n}\n\nexport interface IShowOptions {\n readonly loop?: boolean;\n readonly kiosk?: boolean;\n readonly showNarration?: boolean;\n readonly useTimings?: boolean;\n}\n\nexport interface IPresentationOptions extends ICorePropertiesOptions {\n readonly slideWidth?: number;\n readonly slideHeight?: number;\n readonly slides?: readonly ISlideOptions[];\n readonly show?: IShowOptions;\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\nexport class File {\n private readonly slideOptions: readonly ISlideOptions[];\n private readonly corePropsOptions: ICorePropertiesOptions;\n private readonly showOptions?: IShowOptions;\n private readonly slideWidthEmus?: number;\n private readonly slideHeightEmus?: number;\n\n // Lazy components — created on first getter access\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 theme?: DefaultTheme;\n private tableStyles?: TableStyles;\n private presProps?: PresentationProperties;\n private viewProps?: ViewProperties;\n private slideMaster?: DefaultSlideMaster;\n private slideLayout?: DefaultSlideLayout;\n private slideMasterRels?: Relationships;\n private slideLayoutRels?: Relationships;\n private notesMasterRels?: Relationships;\n\n // Lazy slide data — built on first access\n private slides?: Slide[];\n private slideWrappers?: Array<{ readonly View: Slide; readonly Relationships: Relationships }>;\n private notesSlides?: NotesSlide[];\n\n // Lazy relationship data — built on first access\n private fileRels?: Relationships;\n\n public constructor(options: IPresentationOptions) {\n const slides = options.slides ?? [];\n this.slideOptions = slides;\n this.corePropsOptions = options;\n this.showOptions = options.show;\n this.slideWidthEmus = options.slideWidth ? pixelsToEmus(options.slideWidth) : undefined;\n this.slideHeightEmus = options.slideHeight ? pixelsToEmus(options.slideHeight) : undefined;\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 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 }\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 this.presentationWrapper = new PresentationWrapper({\n slideWidth: this.slideWidthEmus,\n slideHeight: this.slideHeightEmus,\n slideIds: this.slideOptions.map((_, i) => 256 + i),\n });\n // Presentation-level relationships\n const presRels = this.PresentationWrapper.Relationships;\n presRels.addRelationship(\n 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster\",\n \"slideMasters/slideMaster1.xml\",\n );\n for (let i = 0; i < this.slideOptions.length; i++) {\n presRels.addRelationship(\n i + 2,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide\",\n `slides/slide${i + 1}.xml`,\n );\n }\n const n = this.slideOptions.length + 2;\n presRels.addRelationship(\n n,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/presProps\",\n \"presProps.xml\",\n );\n presRels.addRelationship(\n n + 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/viewProps\",\n \"viewProps.xml\",\n );\n presRels.addRelationship(\n n + 2,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n \"theme/theme1.xml\",\n );\n presRels.addRelationship(\n n + 3,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableStyles\",\n \"tableStyles.xml\",\n );\n }\n return this.presentationWrapper;\n }\n\n public get Theme(): DefaultTheme {\n return (this.theme ??= new DefaultTheme());\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 SlideMaster(): DefaultSlideMaster {\n if (!this.slideMaster) {\n const hf = this.slideOptions.find((s) => s.headerFooter)?.headerFooter;\n this.slideMaster = new DefaultSlideMaster(hf);\n }\n return this.slideMaster;\n }\n\n public get SlideMasterRelationships(): Relationships {\n if (!this.slideMasterRels) {\n this.slideMasterRels = buildRelationships([\n {\n id: 1,\n type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout\",\n target: \"../slideLayouts/slideLayout1.xml\",\n },\n {\n id: 2,\n type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n target: \"../theme/theme1.xml\",\n },\n ]);\n }\n return this.slideMasterRels;\n }\n\n public get SlideLayout(): DefaultSlideLayout {\n return (this.slideLayout ??= new DefaultSlideLayout());\n }\n\n public get SlideLayoutRelationships(): Relationships {\n if (!this.slideLayoutRels) {\n this.slideLayoutRels = buildRelationships([\n {\n id: 1,\n type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster\",\n target: \"../slideMasters/slideMaster1.xml\",\n },\n ]);\n }\n return this.slideLayoutRels;\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(s.children ?? [], s.background, s.transition, s.headerFooter),\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 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/slideLayout1.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 public get NotesMasterRelationships(): Relationships {\n return (this.notesMasterRels ??= new Relationships());\n }\n}\n","import { StringContainer } from \"@file/xml-components\";\n\n/**\n * a:t — Text content within a run.\n */\nexport class Text extends StringContainer {\n public constructor(value: string) {\n super(\"a:t\", value);\n }\n}\n","import {\n NextAttributeComponent,\n BuilderElement,\n StringContainer,\n XmlComponent,\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 new NextAttributeComponent({\n id: { key: \"id\", value: `{${crypto.randomUUID()}}` },\n type: { key: \"type\", value: 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(new StringContainer(\"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, XmlComponent } from \"@file/xml-components\";\n\n/**\n * a:blipFill — Image fill with stretch mode.\n */\nexport class BlipFill extends XmlComponent {\n public constructor(fileName: string) {\n super(\"a:blipFill\");\n this.root.push(\n new BuilderElement({\n name: \"a:blip\",\n attributes: {\n \"r:embed\": { key: \"r:embed\", value: `{${fileName}}` },\n },\n }),\n );\n this.root.push(\n new BuilderElement({\n name: \"a:stretch\",\n children: [new BuilderElement({ name: \"a:fillRect\" })],\n }),\n );\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\";\n\n/**\n * p:cNvSpPr — Non-visual shape properties.\n * Uses p: prefix in PresentationML context.\n */\nexport class NonVisualShapeProperties extends XmlComponent {\n public constructor() {\n super(\"p:cNvSpPr\");\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\n\n/**\n * a:cNvPicPr — Non-visual picture drawing properties.\n * Uses a: prefix (DrawingML type) but referenced via p:cNvPicPr in PML context.\n */\nexport class NonVisualPictureProperties extends XmlComponent {\n public constructor() {\n super(\"a:cNvPicPr\");\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\nimport { pixelsToEmus } from \"@util/types\";\n\nexport interface IGroupShapeOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n readonly rotation?: number;\n readonly flipH?: boolean;\n readonly children: readonly BaseXmlComponent[];\n}\n\n/**\n * p:grpSp — Group shape containing child shapes.\n * Lazy: stores options, builds XML object in prepForXml.\n */\nexport class GroupShape extends BaseXmlComponent {\n private static nextId = 100;\n private readonly id: number;\n private readonly options: IGroupShapeOptions;\n\n public constructor(options: IGroupShapeOptions) {\n super(\"p:grpSp\");\n this.id = GroupShape.nextId++;\n this.options = options;\n }\n\n public override prepForXml(context: IContext): IXmlableObject {\n const opts = this.options;\n const id = this.id;\n const name = `Group ${id}`;\n const children: IXmlableObject[] = [];\n\n // p:nvGrpSpPr\n children.push({\n \"p:nvGrpSpPr\": [\n { \"p:cNvPr\": { _attr: { id, name } } },\n { \"p:cNvGrpSpPr\": {} },\n { \"p:nvPr\": {} },\n ],\n });\n\n // p:grpSpPr\n const xfrmChildren: IXmlableObject[] = [];\n const xfrmAttrs: Record<string, string | number> = {};\n if (opts.flipH !== undefined) xfrmAttrs.flipH = opts.flipH ? 1 : 0;\n if (opts.rotation !== undefined) xfrmAttrs.rot = opts.rotation;\n if (Object.keys(xfrmAttrs).length > 0) xfrmChildren.push({ _attr: xfrmAttrs });\n xfrmChildren.push({\n \"a:off\": {\n _attr: {\n x: opts.x !== undefined ? pixelsToEmus(opts.x) : 0,\n y: opts.y !== undefined ? pixelsToEmus(opts.y) : 0,\n },\n },\n });\n xfrmChildren.push({\n \"a:ext\": {\n _attr: {\n cx: opts.width !== undefined ? pixelsToEmus(opts.width) : 0,\n cy: opts.height !== undefined ? pixelsToEmus(opts.height) : 0,\n },\n },\n });\n xfrmChildren.push({ \"a:chOff\": { _attr: { x: 0, y: 0 } } });\n xfrmChildren.push({ \"a:chExt\": { _attr: { cx: 0, cy: 0 } } });\n children.push({ \"p:grpSpPr\": { \"a:xfrm\": xfrmChildren } });\n\n // Child shapes — direct children of p:grpSp (after nvGrpSpPr and grpSpPr)\n for (const child of opts.children) {\n const obj = child.prepForXml(context);\n if (obj) children.push(obj);\n }\n\n return { \"p:grpSp\": children };\n }\n}\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 { pixelsToEmus } from \"@util/types\";\n\n/**\n * p:sp — A line shape on a slide.\n */\nexport class LineShape extends Xc {\n private static nextId = 2;\n private readonly shapeId: number;\n\n public constructor(options: ILineShapeOptions = {}) {\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 = pixelsToEmus(options.x1 ?? 0);\n const y1 = pixelsToEmus(options.y1 ?? 0);\n const x2 = pixelsToEmus(options.x2 ?? 100);\n const y2 = pixelsToEmus(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<\n string,\n { readonly key: string; readonly value: string | number }\n > = {};\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(\"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 public get ShapeId(): number {\n return this.shapeId;\n }\n}\n\nexport interface ILineShapeOptions {\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 private readonly shapeId: number;\n\n public constructor(options: IConnectorShapeOptions = {}) {\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 = pixelsToEmus(options.x1 ?? 0);\n const y1 = pixelsToEmus(options.y1 ?? 0);\n const x2 = pixelsToEmus(options.x2 ?? 100);\n const y2 = pixelsToEmus(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<\n string,\n { readonly key: string; readonly value: string | number }\n > = {};\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(\"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 public get ShapeId(): number {\n return this.shapeId;\n }\n}\n\nexport interface IConnectorShapeOptions {\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?: \"sm\" | \"med\" | \"lg\";\n readonly arrowheadLength?: \"sm\" | \"med\" | \"lg\";\n}\n","import { 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 IContext, XmlComponent } from \"@file/xml-components\";\nimport { pixelsToEmus } from \"@util/types\";\n\nconst MEDIA_EXT_URI = \"{DAA4B4D4-6D71-4841-9C94-3DE7FCFB9230}\";\n\n/**\n * Extract the first video frame from MP4 data as JPEG.\n * Falls back to a generated placeholder if extraction fails.\n */\nfunction extractFirstFrame(videoData: Uint8Array, type: VideoType): Uint8Array {\n if (type === \"mp4\") {\n const jpeg = extractMp4FirstFrame(videoData);\n if (jpeg) return jpeg;\n }\n return generatePlaceholderPoster();\n}\n\n/**\n * Attempt to extract the first I-frame from an MP4 file.\n * MP4 structure: ftyp -> moov (metadata) -> mdat (media data).\n * We scan mdat for JPEG start markers (FFD8) which indicate\n * embedded poster frames, or for AVC NAL unit start codes.\n */\nfunction extractMp4FirstFrame(data: Uint8Array): Uint8Array | null {\n const bytes = new Uint8Array(data);\n\n // Check for embedded JPEG poster (some MP4 files have this in moov/udta/meta)\n for (let i = 0; i < bytes.length - 1; i++) {\n if (bytes[i] === 0xff && bytes[i + 1] === 0xd8) {\n // Found JPEG SOI marker — find EOI\n let end = -1;\n for (let j = i + 2; j < bytes.length - 1; j++) {\n if (bytes[j] === 0xff && bytes[j + 1] === 0xd9) {\n end = j + 2;\n break;\n }\n }\n if (end > i + 100) {\n return bytes.slice(i, end);\n }\n }\n }\n return null;\n}\n\n/**\n * Generate a minimal 320x180 dark gray PNG as a video placeholder poster.\n */\nfunction generatePlaceholderPoster(): Uint8Array {\n const width = 320;\n const height = 180;\n const zlib = require(\"zlib\");\n\n // RGBA raw data: dark gray background with a centered play triangle\n const rawData = Buffer.alloc((width * 3 + 1) * height);\n const centerX = width / 2;\n const centerY = height / 2;\n const triSize = 30;\n\n for (let y = 0; y < height; y++) {\n const rowOffset = y * (width * 3 + 1);\n rawData[rowOffset] = 0; // PNG filter: None\n for (let x = 0; x < width; x++) {\n const px = rowOffset + 1 + x * 3;\n\n // Play triangle: centered, pointing right\n const dx = x - centerX + triSize * 0.3;\n const dy = y - centerY;\n const inTriangle =\n dy >= -triSize &&\n dy <= triSize &&\n dx >= -triSize * 0.5 &&\n dx <= triSize * 0.5 &&\n dx <= triSize * 0.5 - (Math.abs(dy) / triSize) * triSize;\n\n if (inTriangle) {\n rawData[px] = 255; // R\n rawData[px + 1] = 255; // G\n rawData[px + 2] = 255; // B\n } else {\n rawData[px] = 51; // R (#333333)\n rawData[px + 1] = 51; // G\n rawData[px + 2] = 51; // B\n }\n }\n }\n\n const compressed = zlib.deflateSync(rawData);\n\n function crc32(buf: Buffer): number {\n let crc = 0xffffffff;\n for (let i = 0; i < buf.length; i++) {\n crc ^= buf[i];\n for (let j = 0; j < 8; j++) crc = (crc >>> 1) ^ (crc & 1 ? 0xedb88320 : 0);\n }\n return (crc ^ 0xffffffff) >>> 0;\n }\n\n function makeChunk(type: string, data: Buffer): Buffer {\n const len = Buffer.alloc(4);\n len.writeUInt32BE(data.length);\n const typeData = Buffer.concat([Buffer.from(type), data]);\n const crc = Buffer.alloc(4);\n crc.writeUInt32BE(crc32(typeData));\n return Buffer.concat([len, typeData, crc]);\n }\n\n const ihdr = Buffer.alloc(13);\n ihdr.writeUInt32BE(width, 0);\n ihdr.writeUInt32BE(height, 4);\n ihdr[8] = 8; // bit depth\n ihdr[9] = 2; // RGB\n\n return Buffer.concat([\n Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]),\n makeChunk(\"IHDR\", ihdr),\n makeChunk(\"IDAT\", compressed),\n makeChunk(\"IEND\", Buffer.alloc(0)),\n ]);\n}\n\nexport type VideoType = \"mp4\" | \"mov\" | \"wmv\" | \"avi\";\nexport type PosterType = \"png\" | \"jpg\";\n\nexport interface IVideoFrameOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n readonly data: Uint8Array;\n readonly type: VideoType;\n readonly name?: string;\n readonly poster?: Uint8Array;\n readonly posterType?: PosterType;\n readonly posterFrameTime?: number;\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 XmlComponent {\n private static nextId = 100;\n private readonly posterData: IMediaData;\n private readonly videoData: IMediaData;\n\n public constructor(options: IVideoFrameOptions) {\n super(\"p:pic\");\n\n const id = VideoFrame.nextId++;\n const name = options.name ?? `Video ${id}`;\n const mediaFileName = `${name.replace(/\\s+/g, \"_\")}.${options.type}`;\n const posterType = options.posterType ?? \"png\";\n const posterFileName = `${name.replace(/\\s+/g, \"_\")}_poster.${posterType}`;\n\n this.videoData = {\n type: options.type,\n fileName: mediaFileName,\n transformation: {\n pixels: { x: options.width ?? 0, y: options.height ?? 0 },\n emus: { x: pixelsToEmus(options.width ?? 0), y: pixelsToEmus(options.height ?? 0) },\n },\n data: options.data,\n };\n\n const posterBytes = options.poster ?? extractFirstFrame(options.data, options.type);\n this.posterData = {\n type: posterType === \"jpg\" ? \"jpg\" : \"png\",\n fileName: posterFileName,\n transformation: {\n pixels: { x: options.width ?? 0, y: options.height ?? 0 },\n emus: { x: pixelsToEmus(options.width ?? 0), y: pixelsToEmus(options.height ?? 0) },\n },\n data: posterBytes,\n };\n\n // p:nvPicPr with a:videoFile + p14:media\n const nvPrChildren: BuilderElement[] = [\n new BuilderElement({\n name: \"a:videoFile\",\n attributes: {\n \"r:link\": { key: \"r:link\", value: `{video:${mediaFileName}}` },\n },\n }),\n new BuilderElement({\n name: \"p:extLst\",\n children: [\n new BuilderElement({\n name: \"p:ext\",\n attributes: { uri: { key: \"uri\", value: MEDIA_EXT_URI } },\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: \"p: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: \"p: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 with poster image (required by PowerPoint)\n this.root.push(\n new BuilderElement({\n name: \"p:blipFill\",\n children: [\n new BuilderElement({\n name: \"a:blip\",\n attributes: {\n \"r:embed\": { key: \"r:embed\", value: `{${posterFileName}}` },\n },\n }),\n new BuilderElement({\n name: \"a:stretch\",\n children: [new BuilderElement({ name: \"a:fillRect\" })],\n }),\n ],\n }),\n );\n\n // p:spPr\n this.root.push(\n new BuilderElement({\n name: \"p:spPr\",\n children: [\n new Transform2D({\n x: pixelsToEmus(options.x ?? 0),\n y: pixelsToEmus(options.y ?? 0),\n width: pixelsToEmus(options.width ?? 0),\n height: pixelsToEmus(options.height ?? 0),\n }),\n new PresetGeometry(\"rect\"),\n ],\n }),\n );\n }\n\n public override prepForXml(context: IContext) {\n const file = context.fileData as File;\n file?.Media.addImage(this.posterData.fileName, this.posterData);\n file?.Media.addMedia(this.videoData.fileName, this.videoData);\n return super.prepForXml(context);\n }\n}\n","import { 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 IContext, XmlComponent } from \"@file/xml-components\";\nimport { pixelsToEmus } from \"@util/types\";\n\nconst MEDIA_EXT_URI = \"{CF1602FD-DB20-4165-A070-5F299619DA56}\";\n\nexport type AudioType = \"mp3\" | \"wav\" | \"wma\" | \"aac\";\n\nexport interface IAudioFrameOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n readonly data: Uint8Array;\n readonly type: AudioType;\n readonly name?: string;\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 XmlComponent {\n private static nextId = 200;\n private readonly audioData: IMediaData;\n\n public constructor(options: IAudioFrameOptions) {\n super(\"p:pic\");\n\n const id = AudioFrame.nextId++;\n const name = options.name ?? `Audio ${id}`;\n const mediaFileName = `${name.replace(/\\s+/g, \"_\")}.${options.type}`;\n\n this.audioData = {\n type: options.type,\n fileName: mediaFileName,\n transformation: {\n pixels: { x: options.width ?? 0, y: options.height ?? 0 },\n emus: { x: pixelsToEmus(options.width ?? 0), y: pixelsToEmus(options.height ?? 0) },\n },\n data: options.data,\n };\n\n // p:nvPicPr with p14:media extension\n this.root.push(\n new BuilderElement({\n name: \"p:nvPicPr\",\n children: [\n new BuilderElement({\n name: \"a: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: \"a: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: [\n new BuilderElement({\n name: \"p:extLst\",\n children: [\n new BuilderElement({\n name: \"p:ext\",\n attributes: { uri: { key: \"uri\", value: MEDIA_EXT_URI } },\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 ],\n }),\n );\n\n // p:blipFill — empty (no poster for audio, PowerPoint provides default icon)\n this.root.push(\n new BuilderElement({\n name: \"p:blipFill\",\n children: [\n new BuilderElement({\n name: \"a:stretch\",\n children: [new BuilderElement({ name: \"a:fillRect\" })],\n }),\n ],\n }),\n );\n\n // p:spPr\n this.root.push(\n new BuilderElement({\n name: \"p:spPr\",\n children: [\n new Transform2D({\n x: pixelsToEmus(options.x ?? 0),\n y: pixelsToEmus(options.y ?? 0),\n width: pixelsToEmus(options.width ?? 0),\n height: pixelsToEmus(options.height ?? 0),\n }),\n new PresetGeometry(\"rect\"),\n ],\n }),\n );\n }\n\n public override prepForXml(context: IContext) {\n (context.fileData as File)?.Media.addMedia(this.audioData.fileName, this.audioData);\n return super.prepForXml(context);\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 { 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 prepForXml() {\n return DefaultNotesMaster.instance.prepForXml({ stack: [] });\n }\n}\n","import {\n BuilderElement,\n NextAttributeComponent,\n StringContainer,\n XmlComponent,\n} from \"@file/xml-components\";\n\nexport interface IHeaderFooterOptions {\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: IHeaderFooterOptions = {}) {\n super(\"p:hf\");\n\n // Boolean visibility attributes\n const attrs: Record<string, { readonly key: string; readonly value: number }> = {};\n if (options.slideNumber !== false) attrs.sldNum = { key: \"sldNum\", value: 1 };\n if (options.dateTime !== false) attrs.dt = { key: \"dt\", value: 1 };\n // Only set hdr when explicitly true (no header placeholder in default slide master)\n if (options.header === true) attrs.hdr = { key: \"hdr\", value: 1 };\n // Only set ftr when explicitly true or footer has string content\n if (options.footer !== false && options.footer !== undefined)\n attrs.ftr = { key: \"ftr\", value: 1 };\n\n if (Object.keys(attrs).length > 0) {\n this.root.push(new NextAttributeComponent(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: [new StringContainer(\"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","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: \"a: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 IContext, XmlComponent } from \"@file/xml-components\";\nimport { pixelsToEmus } from \"@util/types\";\n\nimport { PictureNonVisual } from \"./picture-non-visual\";\n\nexport interface IPictureOptions {\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 prepForXml.\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: IPictureOptions) {\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: pixelsToEmus(options.width ?? 0),\n y: pixelsToEmus(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 x: pixelsToEmus(options.x ?? 0),\n y: pixelsToEmus(options.y ?? 0),\n width: pixelsToEmus(options.width ?? 0),\n height: pixelsToEmus(options.height ?? 0),\n }),\n new PresetGeometry(\"rect\"),\n ],\n }),\n );\n }\n\n public override prepForXml(context: IContext) {\n (context.fileData as File)?.Media.addImage(this.imageData.fileName, this.imageData);\n return super.prepForXml(context);\n }\n}\n","import type { FillOptions } from \"@file/drawingml/fill\";\nimport { buildFill } from \"@file/drawingml/fill\";\nimport { XmlComponent } from \"@file/xml-components\";\n\nexport interface IBackgroundOptions {\n readonly fill?: FillOptions;\n}\n\n/**\n * p:bg — Slide background.\n */\nexport class Background extends XmlComponent {\n public constructor(options: IBackgroundOptions = {}) {\n super(\"p:bg\");\n this.root.push(new BackgroundProperties(options.fill));\n }\n}\n\nclass BackgroundProperties extends XmlComponent {\n public constructor(fill?: FillOptions) {\n super(\"p:bgPr\");\n this.root.push(fill !== undefined ? buildFill(fill) : buildFill({ type: \"none\" }));\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\n\n/**\n * a:graphic > a:graphicData — DrawingML graphic wrapper for table.\n * Lazy: stores table reference, builds IXmlableObject in prepForXml.\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 prepForXml(context: IContext): IXmlableObject {\n const tableObj = this.table.prepForXml(context);\n const graphicDataChildren: IXmlableObject[] = [\n { _attr: { uri: \"http://schemas.openxmlformats.org/drawingml/2006/table\" } },\n ];\n if (tableObj) graphicDataChildren.push(tableObj);\n return {\n \"a:graphic\": [{ \"a:graphicData\": graphicDataChildren }],\n };\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 { IContext, IXmlableObject } from \"@file/xml-components\";\n\n/**\n * a:tblGrid — Table grid with column width definitions.\n * Lazy: stores widths, builds IXmlableObject in prepForXml.\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 prepForXml(_context: IContext): IXmlableObject {\n const children = this.columnWidths.map((w) => ({\n \"a:gridCol\": { _attr: { w } },\n }));\n return { \"a:tblGrid\": children };\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\n\n/**\n * a:tblPr — Table properties (firstRow, bandRow, etc.).\n * Lazy: stores options, builds IXmlableObject in prepForXml.\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 prepForXml(_context: IContext): IXmlableObject {\n if (!this.options) return { \"a:tblPr\": {} };\n\n const attrs: Record<string, string | number> = {};\n const opts = this.options;\n if (opts.firstRow !== undefined) attrs.firstRow = opts.firstRow ? 1 : 0;\n if (opts.lastRow !== undefined) attrs.lastRow = opts.lastRow ? 1 : 0;\n if (opts.bandRow !== undefined) attrs.bandRow = opts.bandRow ? 1 : 0;\n if (opts.firstCol !== undefined) attrs.firstCol = opts.firstCol ? 1 : 0;\n if (opts.lastCol !== undefined) attrs.lastCol = opts.lastCol ? 1 : 0;\n if (opts.bandCol !== undefined) attrs.bandCol = opts.bandCol ? 1 : 0;\n\n return { \"a:tblPr\": Object.keys(attrs).length > 0 ? { _attr: attrs } : {} };\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\n\nimport { TableCell, type ITableCellOptions } from \"./table-cell\";\n\nexport interface ITableRowOptions {\n readonly height?: number;\n readonly cells: readonly ITableCellOptions[];\n}\n\n/**\n * a:tr — Table row containing cells.\n * Lazy: stores options, builds IXmlableObject in prepForXml.\n */\nexport class TableRow extends BaseXmlComponent {\n private readonly options: ITableRowOptions;\n\n public constructor(options: ITableRowOptions) {\n super(\"a:tr\");\n this.options = options;\n }\n\n public override prepForXml(context: IContext): IXmlableObject {\n const children: IXmlableObject[] = [];\n children.push({ _attr: { h: this.options.height ?? 0 } });\n\n for (const cell of this.options.cells) {\n const tc = new TableCell(cell);\n const obj = tc.prepForXml(context);\n if (obj) children.push(obj);\n }\n\n return { \"a:tr\": children };\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\n\nimport type { ICellBorderOptions } from \"./table-cell-properties\";\nimport { TableGrid } from \"./table-grid\";\nimport { TableProperties } from \"./table-properties\";\nimport { TableRow, type ITableRowOptions } from \"./table-row\";\n\nexport interface ITableOptions {\n readonly rows: readonly ITableRowOptions[];\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?: ICellBorderOptions;\n readonly bottom?: ICellBorderOptions;\n readonly left?: ICellBorderOptions;\n readonly right?: ICellBorderOptions;\n readonly insideHorizontal?: ICellBorderOptions;\n readonly insideVertical?: ICellBorderOptions;\n };\n}\n\n/**\n * a:tbl — DrawingML table element.\n * Lazy: stores options, builds IXmlableObject in prepForXml.\n */\nexport class Table extends BaseXmlComponent {\n private readonly options: ITableOptions;\n\n public constructor(options: ITableOptions) {\n super(\"a:tbl\");\n this.options = options;\n }\n\n public override prepForXml(context: IContext): IXmlableObject {\n const opts = this.options;\n const children: IXmlableObject[] = [];\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 const tblPrObj = tblPr.prepForXml(context);\n if (tblPrObj) children.push(tblPrObj);\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 const grid = new TableGrid(colWidths);\n const gridObj = grid.prepForXml(context);\n if (gridObj) children.push(gridObj);\n\n // a:tr rows\n for (const row of opts.rows) {\n const tr = new TableRow(row);\n const trObj = tr.prepForXml(context);\n if (trObj) children.push(trObj);\n }\n\n return { \"a:tbl\": children };\n }\n}\n","import { Transform2D } from \"@file/drawingml/transform-2d\";\nimport { XmlComponent } from \"@file/xml-components\";\nimport { pixelsToEmus } from \"@util/types\";\n\nimport { Graphic } from \"./graphic\";\nimport { GraphicFrameNonVisual } from \"./graphic-frame-non-visual\";\nimport type { ITableOptions } from \"./table\";\nimport { Table } from \"./table\";\n\nexport interface ITableFrameOptions extends ITableOptions {\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 TableFrame extends XmlComponent {\n public constructor(options: ITableFrameOptions) {\n super(\"p:graphicFrame\");\n\n this.root.push(new GraphicFrameNonVisual());\n\n this.root.push(\n new Transform2D(\n {\n x: pixelsToEmus(options.x ?? 0),\n y: pixelsToEmus(options.y ?? 0),\n width: pixelsToEmus(options.width ?? 0),\n height: pixelsToEmus(options.height ?? 0),\n },\n \"p\",\n ),\n );\n\n const table = new Table(options);\n this.root.push(new Graphic(table));\n }\n}\n","import { BuilderElement, XmlComponent } from \"@file/xml-components\";\nimport { chartAttr, wrapEl } from \"@file/xml-components\";\n\nexport class CatAx extends XmlComponent {\n public constructor(axId: number, crossAx: number) {\n super(\"c:catAx\");\n this.root.push(wrapEl(\"c:axId\", chartAttr({ val: axId })));\n this.root.push(new Scaling());\n this.root.push(wrapEl(\"c:delete\", chartAttr({ val: 0 })));\n this.root.push(wrapEl(\"c:axPos\", chartAttr({ val: \"b\" })));\n this.root.push(wrapEl(\"c:auto\", chartAttr({ val: 1 })));\n this.root.push(wrapEl(\"c:lblOffset\", chartAttr({ val: 100 })));\n this.root.push(wrapEl(\"c:noMultiLvlLbl\", chartAttr({ val: 0 })));\n this.root.push(wrapEl(\"c:crossAx\", chartAttr({ val: crossAx })));\n this.root.push(wrapEl(\"c:crosses\", chartAttr({ val: \"autoZero\" })));\n }\n}\n\nclass Scaling extends XmlComponent {\n public constructor() {\n super(\"c:scaling\");\n this.root.push(wrapEl(\"c:orientation\", chartAttr({ val: \"minMax\" })));\n }\n}\n\nexport class ValAx extends XmlComponent {\n public constructor(axId: number, crossAx: number) {\n super(\"c:valAx\");\n this.root.push(wrapEl(\"c:axId\", chartAttr({ val: axId })));\n this.root.push(new Scaling());\n this.root.push(wrapEl(\"c:delete\", chartAttr({ val: 0 })));\n this.root.push(wrapEl(\"c:axPos\", chartAttr({ val: \"l\" })));\n this.root.push(wrapEl(\"c:numFmt\", chartAttr({ formatCode: \"General\", sourceLinked: 1 })));\n this.root.push(wrapEl(\"c:crossAx\", chartAttr({ val: crossAx })));\n this.root.push(wrapEl(\"c:crosses\", chartAttr({ val: \"autoZero\" })));\n this.root.push(new BuilderElement({ name: \"c:spPr\" }));\n }\n}\n","import { BuilderElement, XmlComponent } from \"@file/xml-components\";\nimport { chartAttr, wrapEl } from \"@file/xml-components\";\n\nimport { CatAx, ValAx } from \"./axes\";\nimport { createChartType } from \"./chart-types/create-chart-type\";\nimport type { ChartType } from \"./chart-types/create-chart-type\";\nimport { ChartTitle } from \"./title\";\n\nexport interface IChartSeriesData {\n readonly name: string;\n readonly values: readonly number[];\n}\n\nexport interface IChartSpaceOptions {\n readonly title?: string;\n readonly type: ChartType;\n readonly categories: readonly string[];\n readonly series: readonly IChartSeriesData[];\n readonly showLegend?: boolean;\n readonly style?: number;\n}\n\nexport class ChartSpace extends XmlComponent {\n public constructor(options: IChartSpaceOptions) {\n super(\"c:chartSpace\");\n\n this.root.push(\n chartAttr({\n \"xmlns:a\": \"http://schemas.openxmlformats.org/drawingml/2006/main\",\n \"xmlns:c\": \"http://schemas.openxmlformats.org/drawingml/2006/chart\",\n \"xmlns:r\": \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\n }),\n );\n\n this.root.push(wrapEl(\"c:date1904\", chartAttr({ val: 0 })));\n this.root.push(wrapEl(\"c:lang\", chartAttr({ val: \"en-US\" })));\n this.root.push(wrapEl(\"c:roundedCorners\", chartAttr({ val: 0 })));\n\n const chart = new ChartContainer();\n\n if (options.title) {\n chart[\"root\"].push(new ChartTitle(options.title));\n }\n\n chart[\"root\"].push(wrapEl(\"c:autoTitleDeleted\", chartAttr({ val: 0 })));\n\n const plotArea = new PlotArea();\n plotArea[\"root\"].push(new BuilderElement({ name: \"c:layout\" }));\n\n plotArea[\"root\"].push(\n createChartType({\n categories: options.categories,\n series: options.series,\n type: options.type,\n }),\n );\n\n if (options.type !== \"pie\") {\n if (options.type === \"scatter\") {\n plotArea[\"root\"].push(new ValAx(10, 20));\n plotArea[\"root\"].push(new ValAx(20, 10));\n } else {\n plotArea[\"root\"].push(new CatAx(10, 20));\n plotArea[\"root\"].push(new ValAx(20, 10));\n }\n }\n\n chart[\"root\"].push(plotArea);\n\n if (options.showLegend !== false) {\n chart[\"root\"].push(createLegend());\n }\n\n this.root.push(chart);\n this.root.push(createChartSpPr());\n this.root.push(createChartTxPr());\n\n if (options.style !== undefined) {\n this.root.push(new ChartStyle(options.style));\n }\n }\n}\n\nclass ChartContainer extends XmlComponent {\n public constructor() {\n super(\"c:chart\");\n }\n}\n\nclass PlotArea extends XmlComponent {\n public constructor() {\n super(\"c:plotArea\");\n }\n}\n\nfunction createLegend(): XmlComponent {\n const legend = new (class extends XmlComponent {\n public constructor() {\n super(\"c:legend\");\n }\n })();\n legend[\"root\"].push(wrapEl(\"c:legendPos\", chartAttr({ val: \"b\" })));\n legend[\"root\"].push(new BuilderElement({ name: \"c:layout\" }));\n legend[\"root\"].push(wrapEl(\"c:overlay\", chartAttr({ val: 0 })));\n legend[\"root\"].push(createNoFillSpPr());\n legend[\"root\"].push(createTxPr());\n return legend;\n}\n\nfunction createNoFillSpPr(): XmlComponent {\n const spPr = new (class extends XmlComponent {\n public constructor() {\n super(\"c:spPr\");\n }\n })();\n spPr[\"root\"].push(\n new (class extends XmlComponent {\n public constructor() {\n super(\"a:noFill\");\n }\n })(),\n );\n spPr[\"root\"].push(\n new (class extends XmlComponent {\n public constructor() {\n super(\"a:ln\");\n this.root.push(\n new (class extends XmlComponent {\n public constructor() {\n super(\"a:noFill\");\n }\n })(),\n );\n }\n })(),\n );\n spPr[\"root\"].push(new BuilderElement({ name: \"a:effectLst\" }));\n return spPr;\n}\n\nfunction createChartSpPr(): XmlComponent {\n const spPr = new (class extends XmlComponent {\n public constructor() {\n super(\"c:spPr\");\n }\n })();\n spPr[\"root\"].push(\n new (class extends XmlComponent {\n public constructor() {\n super(\"a:noFill\");\n }\n })(),\n );\n spPr[\"root\"].push(\n new (class extends XmlComponent {\n public constructor() {\n super(\"a:ln\");\n this.root.push(\n new (class extends XmlComponent {\n public constructor() {\n super(\"a:noFill\");\n }\n })(),\n );\n }\n })(),\n );\n spPr[\"root\"].push(new BuilderElement({ name: \"a:effectLst\" }));\n return spPr;\n}\n\nfunction createChartTxPr(): XmlComponent {\n const txPr = new (class extends XmlComponent {\n public constructor() {\n super(\"c:txPr\");\n }\n })();\n txPr[\"root\"].push(new BuilderElement({ name: \"a:bodyPr\" }));\n txPr[\"root\"].push(new BuilderElement({ name: \"a:lstStyle\" }));\n txPr[\"root\"].push(createTextParagraph());\n return txPr;\n}\n\nfunction createTxPr(): XmlComponent {\n const txPr = new (class extends XmlComponent {\n public constructor() {\n super(\"c:txPr\");\n }\n })();\n txPr[\"root\"].push(createBodyPr());\n txPr[\"root\"].push(new BuilderElement({ name: \"a:lstStyle\" }));\n txPr[\"root\"].push(createTextParagraph());\n return txPr;\n}\n\nfunction createBodyPr(): XmlComponent {\n return new BuilderElement({\n name: \"a:bodyPr\",\n attributes: {\n rot: { key: \"rot\", value: \"0\" },\n spcFirstLastPara: { key: \"spcFirstLastPara\", value: \"1\" },\n vertOverflow: { key: \"vertOverflow\", value: \"ellipsis\" },\n vert: { key: \"vert\", value: \"horz\" },\n wrap: { key: \"wrap\", value: \"square\" },\n anchor: { key: \"anchor\", value: \"ctr\" },\n anchorCtr: { key: \"anchorCtr\", value: \"1\" },\n },\n });\n}\n\nfunction createTextParagraph(): XmlComponent {\n const p = new (class extends XmlComponent {\n public constructor() {\n super(\"a:p\");\n }\n })();\n const pPr = new (class extends XmlComponent {\n public constructor() {\n super(\"a:pPr\");\n }\n })();\n pPr[\"root\"].push(new BuilderElement({ name: \"a:defRPr\" }));\n p[\"root\"].push(pPr);\n p[\"root\"].push(\n new BuilderElement({\n name: \"a:endParaRPr\",\n attributes: { lang: { key: \"lang\", value: \"en-US\" } },\n }),\n );\n return p;\n}\n\nclass ChartStyle extends XmlComponent {\n public constructor(val: number) {\n super(\"c:style\");\n this.root.push(chartAttr({ val: String(val) }));\n }\n}\n","import { Transform2D } from \"@file/drawingml/transform-2d\";\nimport { BuilderElement, NextAttributeComponent, XmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\nimport { pixelsToEmus } from \"@util/types\";\n\nimport { ChartCollection } from \"./chart-collection\";\nimport type { IChartSpaceOptions } from \"./chart-space\";\nimport { ChartSpace } from \"./chart-space\";\n\nlet nextChartFrameId = 2048;\n\nexport interface IChartFrameOptions extends IChartSpaceOptions {\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 ChartFrame extends XmlComponent {\n private readonly chartOptions: IChartSpaceOptions;\n private readonly chartKey: string;\n\n public constructor(options: IChartFrameOptions) {\n super(\"p:graphicFrame\");\n\n this.chartOptions = options;\n this.chartKey = `chart_${nextChartFrameId++}`;\n\n const id = nextChartFrameId++;\n this.root.push(new GraphicFrameNonVisual(id));\n this.root.push(\n new Transform2D(\n {\n x: pixelsToEmus(options.x ?? 0),\n y: pixelsToEmus(options.y ?? 0),\n width: pixelsToEmus(options.width ?? 0),\n height: pixelsToEmus(options.height ?? 0),\n },\n \"p\",\n ),\n );\n\n this.root.push(new ChartGraphic(this.chartKey));\n }\n\n public prepForXml(context: IContext): IXmlableObject | undefined {\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 return super.prepForXml(context);\n }\n\n public get ChartKey(): string {\n return this.chartKey;\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 new NextAttributeComponent({\n uri: {\n key: \"uri\",\n value: \"http://schemas.openxmlformats.org/drawingml/2006/chart\",\n },\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 new NextAttributeComponent({\n xmlnsC: {\n key: \"xmlns:c\",\n value: \"http://schemas.openxmlformats.org/drawingml/2006/chart\",\n },\n xmlnsR: {\n key: \"xmlns:r\",\n value: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\n },\n rId: { key: \"r:id\", value: `{chart:${chartKey}}` },\n }),\n );\n }\n}\n","import { Transform2D } from \"@file/drawingml/transform-2d\";\nimport {\n BuilderElement,\n NextAttributeComponent,\n type IContext,\n type IXmlableObject,\n XmlComponent,\n} from \"@file/xml-components\";\nimport { pixelsToEmus } from \"@util/types\";\n\nimport type { SmartArtCollection } from \"./smartart-collection\";\nimport { createDataModel, type ITreeNode } from \"./tree-to-model\";\n\nlet nextSmartArtFrameId = 1024;\n\nexport interface ISmartArtFrameOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n readonly nodes: readonly ITreeNode[];\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 SmartArtFrame 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: ISmartArtFrameOptions) {\n super(\"p:graphicFrame\");\n\n this.smartArtKey = `smartart_${nextSmartArtFrameId++}`;\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 = nextSmartArtFrameId++;\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 x: pixelsToEmus(options.x ?? 0),\n y: pixelsToEmus(options.y ?? 0),\n width: pixelsToEmus(options.width ?? 0),\n height: pixelsToEmus(options.height ?? 0),\n },\n \"p\",\n ),\n );\n this.root.push(new SmartArtGraphic(this.smartArtKey));\n }\n\n public prepForXml(context: IContext): IXmlableObject | undefined {\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 return super.prepForXml(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 new NextAttributeComponent({\n uri: {\n key: \"uri\",\n value: \"http://schemas.openxmlformats.org/drawingml/2006/diagram\",\n },\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 new NextAttributeComponent({\n xmlnsDgm: {\n key: \"xmlns:dgm\",\n value: \"http://schemas.openxmlformats.org/drawingml/2006/diagram\",\n },\n xmlnsR: {\n key: \"xmlns:r\",\n value: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\n },\n rDm: { key: \"r:dm\", value: `{smartart:${smartArtKey}}` },\n rLo: { key: \"r:lo\", value: `{smartart-lo:${smartArtKey}}` },\n rQs: { key: \"r:qs\", value: `{smartart-qs:${smartArtKey}}` },\n rCs: { key: \"r:cs\", value: `{smartart-cs:${smartArtKey}}` },\n }),\n );\n }\n}\n","/**\n * SmartArt built-in definitions — layout, quick style, and color transforms.\n *\n * Provides XML generators for layoutDef, styleDef, and colorsDef stubs.\n * The \"default\" layout uses a full embedded XML; all others use minimal stubs\n * that carry only the uniqueId — PowerPoint resolves these to its built-in definitions.\n *\n * @module\n */\n\nexport { COLOR_CATEGORIES, LAYOUT_CATEGORIES, STYLE_CATEGORIES } from \"@office-open/core/smartart\";\n\nimport { LAYOUT_CATEGORIES, STYLE_CATEGORIES, COLOR_CATEGORIES } from \"@office-open/core/smartart\";\n\n// ---------------------------------------------------------------------------\n// Layout XML — full for \"default\", stubs for everything else\n// ---------------------------------------------------------------------------\n\nconst DGM_NS = \"http://schemas.openxmlformats.org/drawingml/2006/diagram\";\nconst A_NS = \"http://schemas.openxmlformats.org/drawingml/2006/main\";\nconst XML_DECL = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n\n/** Full default list layout (urn:microsoft.com/office/officeart/2005/8/layout/default) */\nconst FULL_DEFAULT_LAYOUT_XML =\n '<dgm:layoutDef xmlns:dgm=\"' +\n DGM_NS +\n '\" xmlns:a=\"' +\n A_NS +\n '\" uniqueId=\"urn:microsoft.com/office/officeart/2005/8/layout/default\">' +\n '<dgm:title val=\"\"/><dgm:desc val=\"\"/>' +\n '<dgm:catLst><dgm:cat type=\"list\" pri=\"400\"/></dgm:catLst>' +\n '<dgm:sampData><dgm:dataModel><dgm:ptLst><dgm:pt modelId=\"0\" type=\"doc\"/><dgm:pt modelId=\"1\"><dgm:prSet phldr=\"1\"/></dgm:pt><dgm:pt modelId=\"2\"><dgm:prSet phldr=\"1\"/></dgm:pt><dgm:pt modelId=\"3\"><dgm:prSet phldr=\"1\"/></dgm:pt><dgm:pt modelId=\"4\"><dgm:prSet phldr=\"1\"/></dgm:pt><dgm:pt modelId=\"5\"><dgm:prSet phldr=\"1\"/></dgm:pt></dgm:ptLst><dgm:cxnLst><dgm:cxn modelId=\"6\" srcId=\"0\" destId=\"1\" srcOrd=\"0\" destOrd=\"0\"/><dgm:cxn modelId=\"7\" srcId=\"0\" destId=\"2\" srcOrd=\"1\" destOrd=\"0\"/><dgm:cxn modelId=\"8\" srcId=\"0\" destId=\"3\" srcOrd=\"2\" destOrd=\"0\"/><dgm:cxn modelId=\"9\" srcId=\"0\" destId=\"4\" srcOrd=\"3\" destOrd=\"0\"/><dgm:cxn modelId=\"10\" srcId=\"0\" destId=\"5\" srcOrd=\"4\" destOrd=\"0\"/></dgm:cxnLst><dgm:bg/><dgm:whole/></dgm:dataModel></dgm:sampData>' +\n '<dgm:styleData><dgm:dataModel><dgm:ptLst><dgm:pt modelId=\"0\" type=\"doc\"/><dgm:pt modelId=\"1\"/><dgm:pt modelId=\"2\"/></dgm:ptLst><dgm:cxnLst><dgm:cxn modelId=\"3\" srcId=\"0\" destId=\"1\" srcOrd=\"0\" destOrd=\"0\"/><dgm:cxn modelId=\"4\" srcId=\"0\" destId=\"2\" srcOrd=\"1\" destOrd=\"0\"/></dgm:cxnLst><dgm:bg/><dgm:whole/></dgm:dataModel></dgm:styleData>' +\n '<dgm:clrData><dgm:dataModel><dgm:ptLst><dgm:pt modelId=\"0\" type=\"doc\"/><dgm:pt modelId=\"1\"/><dgm:pt modelId=\"2\"/><dgm:pt modelId=\"3\"/><dgm:pt modelId=\"4\"/><dgm:pt modelId=\"5\"/><dgm:pt modelId=\"6\"/></dgm:ptLst><dgm:cxnLst><dgm:cxn modelId=\"7\" srcId=\"0\" destId=\"1\" srcOrd=\"0\" destOrd=\"0\"/><dgm:cxn modelId=\"8\" srcId=\"0\" destId=\"2\" srcOrd=\"1\" destOrd=\"0\"/><dgm:cxn modelId=\"9\" srcId=\"0\" destId=\"3\" srcOrd=\"2\" destOrd=\"0\"/><dgm:cxn modelId=\"10\" srcId=\"0\" destId=\"4\" srcOrd=\"3\" destOrd=\"0\"/><dgm:cxn modelId=\"11\" srcId=\"0\" destId=\"5\" srcOrd=\"4\" destOrd=\"0\"/><dgm:cxn modelId=\"12\" srcId=\"0\" destId=\"6\" srcOrd=\"5\" destOrd=\"0\"/></dgm:cxnLst><dgm:bg/><dgm:whole/></dgm:dataModel></dgm:clrData>' +\n '<dgm:layoutNode name=\"diagram\"><dgm:varLst><dgm:dir/><dgm:resizeHandles val=\"exact\"/></dgm:varLst>' +\n '<dgm:choose name=\"Name0\"><dgm:if name=\"Name1\" func=\"var\" arg=\"dir\" op=\"equ\" val=\"norm\"><dgm:alg type=\"snake\"><dgm:param type=\"grDir\" val=\"tL\"/><dgm:param type=\"flowDir\" val=\"row\"/><dgm:param type=\"contDir\" val=\"sameDir\"/><dgm:param type=\"off\" val=\"ctr\"/></dgm:alg></dgm:if><dgm:else name=\"Name2\"><dgm:alg type=\"snake\"><dgm:param type=\"grDir\" val=\"tR\"/><dgm:param type=\"flowDir\" val=\"row\"/><dgm:param type=\"contDir\" val=\"sameDir\"/><dgm:param type=\"off\" val=\"ctr\"/></dgm:alg></dgm:else></dgm:choose>' +\n '<dgm:shape xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" r:blip=\"\"><dgm:adjLst/></dgm:shape><dgm:presOf/>' +\n '<dgm:constrLst><dgm:constr type=\"w\" for=\"ch\" forName=\"node\" refType=\"w\"/><dgm:constr type=\"h\" for=\"ch\" forName=\"node\" refType=\"w\" refFor=\"ch\" refForName=\"node\" fact=\"0.6\"/><dgm:constr type=\"w\" for=\"ch\" forName=\"sibTrans\" refType=\"w\" refFor=\"ch\" refForName=\"node\" fact=\"0.1\"/><dgm:constr type=\"sp\" refType=\"w\" refFor=\"ch\" refForName=\"sibTrans\"/><dgm:constr type=\"primFontSz\" for=\"ch\" forName=\"node\" op=\"equ\" val=\"65\"/></dgm:constrLst><dgm:ruleLst/>' +\n '<dgm:forEach name=\"Name3\" axis=\"ch\" ptType=\"node\">' +\n '<dgm:layoutNode name=\"node\"><dgm:varLst><dgm:bulletEnabled val=\"1\"/></dgm:varLst>' +\n '<dgm:alg type=\"tx\"/><dgm:shape type=\"rect\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" r:blip=\"\">' +\n '<dgm:adjLst/></dgm:shape><dgm:presOf axis=\"desOrSelf\" ptType=\"node\"/>' +\n '<dgm:constrLst><dgm:constr type=\"lMarg\" refType=\"primFontSz\" fact=\"0.3\"/>' +\n '<dgm:constr type=\"rMarg\" refType=\"primFontSz\" fact=\"0.3\"/>' +\n '<dgm:constr type=\"tMarg\" refType=\"primFontSz\" fact=\"0.3\"/>' +\n '<dgm:constr type=\"bMarg\" refType=\"primFontSz\" fact=\"0.3\"/></dgm:constrLst>' +\n '<dgm:ruleLst><dgm:rule type=\"primFontSz\" val=\"5\" fact=\"NaN\" max=\"NaN\"/></dgm:ruleLst></dgm:layoutNode>' +\n '<dgm:forEach name=\"Name4\" axis=\"followSib\" ptType=\"sibTrans\" cnt=\"1\">' +\n '<dgm:layoutNode name=\"sibTrans\"><dgm:alg type=\"sp\"/>' +\n '<dgm:shape xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" r:blip=\"\">' +\n \"<dgm:adjLst/></dgm:shape><dgm:presOf/><dgm:constrLst/><dgm:ruleLst/>\" +\n \"</dgm:layoutNode></dgm:forEach></dgm:layoutNode></dgm:layoutDef>\";\n\n/**\n * Returns layout XML. Full XML for \"default\", minimal stub for others.\n * Stub has no layoutNode so PowerPoint falls back to built-in definitions\n * based on the uniqueId / loTypeId in the data model.\n */\nexport function getLayoutXml(layoutId: string): string {\n if (layoutId === \"default\") {\n return XML_DECL + FULL_DEFAULT_LAYOUT_XML;\n }\n const cat = LAYOUT_CATEGORIES[layoutId] ?? \"list\";\n return (\n XML_DECL +\n '<dgm:layoutDef xmlns:dgm=\"' +\n DGM_NS +\n '\" xmlns:a=\"' +\n A_NS +\n '\" uniqueId=\"urn:microsoft.com/office/officeart/2005/8/layout/' +\n layoutId +\n '\">' +\n '<dgm:title val=\"\"/><dgm:desc val=\"\"/>' +\n '<dgm:catLst><dgm:cat type=\"' +\n cat +\n '\" pri=\"400\"/></dgm:catLst>' +\n '<dgm:sampData><dgm:dataModel><dgm:ptLst><dgm:pt modelId=\"0\" type=\"doc\"/><dgm:pt modelId=\"1\"><dgm:prSet phldr=\"1\"/></dgm:pt><dgm:pt modelId=\"2\"><dgm:prSet phldr=\"1\"/></dgm:pt></dgm:ptLst><dgm:cxnLst><dgm:cxn modelId=\"3\" srcId=\"0\" destId=\"1\" srcOrd=\"0\" destOrd=\"0\"/><dgm:cxn modelId=\"4\" srcId=\"0\" destId=\"2\" srcOrd=\"1\" destOrd=\"0\"/></dgm:cxnLst><dgm:bg/><dgm:whole/></dgm:dataModel></dgm:sampData>' +\n \"</dgm:layoutDef>\"\n );\n}\n\n/**\n * Returns style stub XML with the given uniqueId.\n */\nexport function getStyleXml(styleId: string): string {\n const cat = STYLE_CATEGORIES[styleId] ?? \"simple\";\n return (\n XML_DECL +\n '<dgm:styleDef xmlns:dgm=\"' +\n DGM_NS +\n '\" xmlns:a=\"' +\n A_NS +\n '\" uniqueId=\"urn:microsoft.com/office/officeart/2005/8/quickstyle/' +\n styleId +\n '\">' +\n '<dgm:title val=\"\"/><dgm:desc val=\"\"/>' +\n '<dgm:catLst><dgm:cat type=\"' +\n cat +\n '\" pri=\"10100\"/></dgm:catLst>' +\n '<dgm:scene3d><a:camera prst=\"orthographicFront\"/><a:lightRig rig=\"threePt\" dir=\"t\"/></dgm:scene3d>' +\n \"</dgm:styleDef>\"\n );\n}\n\n/**\n * Returns color stub XML with the given uniqueId.\n */\nexport function getColorXml(colorId: string): string {\n const cat = COLOR_CATEGORIES[colorId] ?? \"accent1\";\n return (\n XML_DECL +\n '<dgm:colorsDef xmlns:dgm=\"' +\n DGM_NS +\n '\" xmlns:a=\"' +\n A_NS +\n '\" uniqueId=\"urn:microsoft.com/office/officeart/2005/8/colors/' +\n colorId +\n '\">' +\n '<dgm:title val=\"\"/><dgm:desc val=\"\"/>' +\n '<dgm:catLst><dgm:cat type=\"' +\n cat +\n '\" pri=\"11200\"/></dgm:catLst>' +\n \"</dgm:colorsDef>\"\n );\n}\n\n/** Minimal drawing cache for PPTX SmartArt (PowerPoint auto-regenerates this on open) */\nexport const DEFAULT_DRAWING_XML =\n '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n '<dsp:drawing xmlns:dgm=\"http://schemas.openxmlformats.org/drawingml/2006/diagram\" xmlns:dsp=\"http://schemas.microsoft.com/office/drawing/2008/diagram\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">' +\n \"<dsp:spTree>\" +\n '<dsp:nvGrpSpPr><dsp:cNvPr id=\"0\" name=\"\"/><dsp:cNvGrpSpPr/></dsp:nvGrpSpPr>' +\n \"<dsp:grpSpPr/>\" +\n \"</dsp:spTree>\" +\n \"</dsp:drawing>\";\n","import { escapeRegex, 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 hyperlinks.forEach((h, i) => {\n result = result.replace(\n new RegExp(`\\\\{hlink:${escapeRegex(h.key)}\\\\}`, \"g\"),\n formatId(offset, i, \"rId\"),\n );\n });\n return result;\n}\n","import { escapeRegex, 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 mediaData.forEach((m, i) => {\n result = result.replace(\n new RegExp(`\\\\{media:${escapeRegex(m.fileName)}\\\\}`, \"g\"),\n formatId(offset, i, \"rId\"),\n );\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 mediaData.forEach((m, i) => {\n result = result.replace(\n new RegExp(`\\\\{video:${escapeRegex(m.fileName)}\\\\}`, \"g\"),\n formatId(offset, i, \"rId\"),\n );\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 prefix: string,\n mediaArray: readonly { readonly fileName: string }[],\n): readonly { readonly fileName: string }[] {\n const pattern = new RegExp(`\\\\{${escapeRegex(prefix)}([^}]+)\\\\}`, \"g\");\n const keys = new Set<string>();\n for (const match of xml.matchAll(pattern)) {\n keys.add(match[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 { 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 { IContext } from \"@file/xml-components\";\nimport {\n addSmartArtRelationships,\n collectPlaceholderKeys,\n getReferencedMedia,\n hasPlaceholders,\n replaceChartPlaceholders,\n replaceImagePlaceholders,\n replaceSmartArtPlaceholders,\n} from \"@office-open/core\";\nimport type { IXmlifyedFile } from \"@office-open/core\";\nimport { xml } from \"@office-open/xml\";\nimport type { Zippable } from \"fflate\";\n\ninterface IXmlifyedFileMapping {\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 prettifyXml?: string,\n overrides: readonly IXmlifyedFile[] = [],\n ): Zippable {\n const declaration = true;\n const indent = prettifyXml;\n const context: IContext = { fileData: file, stack: [] };\n\n const mapping: IXmlifyedFileMapping = {\n AppProperties: {\n data: xml(this.formatter.format(file.AppProperties, context), { declaration }),\n path: \"docProps/app.xml\",\n },\n Properties: {\n data: xml(this.formatter.format(file.CoreProperties, context), {\n declaration,\n indent,\n }),\n path: \"docProps/core.xml\",\n },\n FileRelationships: {\n data: xml(this.formatter.format(file.FileRelationships, context), {\n declaration: false,\n }),\n path: \"_rels/.rels\",\n },\n };\n\n // Static singletons (ImportedXmlComponent.toXml uses sourceXml directly)\n mapping[\"Theme\"] = {\n data: this.formatter.formatToXml(file.Theme, context, declaration),\n path: \"ppt/theme/theme1.xml\",\n };\n\n mapping[\"TableStyles\"] = {\n data: this.formatter.formatToXml(file.TableStyles, context, declaration),\n path: \"ppt/tableStyles.xml\",\n };\n\n mapping[\"PresProps\"] = {\n data: this.formatter.formatToXml(file.PresProps, context, declaration),\n path: \"ppt/presProps.xml\",\n };\n\n mapping[\"ViewProps\"] = {\n data: this.formatter.formatToXml(file.ViewProps, context, declaration),\n path: \"ppt/viewProps.xml\",\n };\n\n mapping[\"SlideMaster\"] = {\n data: this.formatter.formatToXml(file.SlideMaster, context, declaration),\n path: \"ppt/slideMasters/slideMaster1.xml\",\n };\n\n mapping[\"SlideMasterRelationships\"] = {\n data: xml(this.formatter.format(file.SlideMasterRelationships, context), {\n declaration: false,\n }),\n path: \"ppt/slideMasters/_rels/slideMaster1.xml.rels\",\n };\n\n mapping[\"SlideLayout\"] = {\n data: this.formatter.formatToXml(file.SlideLayout, context, declaration),\n path: \"ppt/slideLayouts/slideLayout1.xml\",\n };\n\n mapping[\"SlideLayoutRelationships\"] = {\n data: xml(this.formatter.format(file.SlideLayoutRelationships, context), {\n declaration: false,\n }),\n path: \"ppt/slideLayouts/_rels/slideLayout1.xml.rels\",\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: xml(this.formatter.format(new DefaultNotesMaster(), context), {\n declaration,\n indent,\n }),\n path: \"ppt/notesMasters/notesMaster1.xml\",\n };\n mapping[\"NotesMasterRelationships\"] = {\n data: xml(this.formatter.format(file.NotesMasterRelationships, context), {\n declaration: false,\n }),\n path: \"ppt/notesMasters/_rels/notesMaster1.xml.rels\",\n };\n }\n\n // Presentation + its relationships\n const presentationXml = this.formatter.formatToXml(\n file.PresentationWrapper.View,\n context,\n declaration,\n );\n let currentImageCount = 0;\n\n const mediaData = getReferencedMedia(presentationXml, file.Media.Array);\n const presImageOffset = file.PresentationWrapper.Relationships.RelationshipCount + 1;\n mediaData.forEach((image, idx) => {\n file.PresentationWrapper.Relationships.addRelationship(\n presImageOffset + idx,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n `../media/${image.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: xml(this.formatter.format(file.PresentationWrapper.Relationships, context), {\n declaration: false,\n }),\n path: \"ppt/_rels/presentation.xml.rels\",\n };\n\n // Slides — format BEFORE ContentTypes so ChartFrame.prepForXml() 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, declaration);\n\n const slideMediaData = getReferencedMedia(slideXml, file.Media.Array);\n const slideImageOffset = slideWrapper.Relationships.RelationshipCount + 1;\n slideMediaData.forEach((image, idx) => {\n slideWrapper.Relationships.addRelationship(\n slideImageOffset + idx,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n `../media/${image.fileName}`,\n );\n });\n\n let replacedSlideXml = replaceImagePlaceholders(\n slideXml,\n slideMediaData,\n slideImageOffset,\n );\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 slideCharts = file.Charts.Array.filter((c) =>\n slideChartKeys.includes(c.key),\n );\n\n replacedSlideXml = replaceChartPlaceholders(\n replacedSlideXml,\n slideCharts.map((c) => c.key),\n slideChartOffset,\n );\n\n slideCharts.forEach((chartData, 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 slideSmartArts = file.SmartArts.Array.filter((s) =>\n slideSmartArtKeys.includes(s.key),\n );\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 slideHlinks = file.Hyperlinks.Array.filter((h) =>\n slideHlinkKeys.includes(h.key),\n );\n const hlinkOffset = slideWrapper.Relationships.RelationshipCount + 1;\n\n replacedSlideXml = replaceHyperlinkPlaceholders(\n replacedSlideXml,\n slideHlinks,\n hlinkOffset,\n );\n\n slideHlinks.forEach((hlink, hi) => {\n slideWrapper.Relationships.addRelationship(\n hlinkOffset + hi,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",\n hlink.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 slideMediaRefs.forEach((media, mi) => {\n slideWrapper.Relationships.addRelationship(\n mediaOffset + mi,\n \"http://schemas.microsoft.com/office/2007/relationships/media\",\n `../media/${media.fileName}`,\n );\n });\n\n slideVideoRefs.forEach((video, vi) => {\n slideWrapper.Relationships.addRelationship(\n videoOffset + vi,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/video\",\n `../media/${video.fileName}`,\n );\n });\n }\n }\n\n mapping[`Slide${i}`] = {\n data: replacedSlideXml,\n path: `ppt/slides/slide${i + 1}.xml`,\n };\n\n mapping[`SlideRelationships${i}`] = {\n data: xml(this.formatter.format(slideWrapper.Relationships, context), {\n declaration: false,\n }),\n path: `ppt/slides/_rels/slide${i + 1}.xml.rels`,\n };\n }\n\n // ContentTypes — AFTER slides so Charts.Array is populated\n file.Charts.Array.forEach((_, i) => {\n file.ContentTypes.addChart(i + 1);\n });\n file.SmartArts.Array.forEach((_, 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: xml(this.formatter.format(file.ContentTypes, context), {\n declaration: false,\n }),\n path: \"[Content_Types].xml\",\n };\n\n // Convert mapping to Zippable (XML files: STORE, no compression benefit)\n const files: Zippable = {};\n for (const key of Object.keys(mapping)) {\n const entry = mapping[key];\n files[entry.path] = [textToUint8Array(entry.data), { level: 0 }];\n }\n\n // Add overrides\n for (const override of overrides) {\n files[override.path] =\n override.data instanceof Uint8Array\n ? override.data\n : textToUint8Array(override.data);\n }\n\n // Add chart parts (STORE — XML, no compression benefit)\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`] = [\n textToUint8Array(\n xml(this.formatter.format(chartData.chartSpace, context), {\n declaration,\n indent,\n }),\n ),\n { level: 0 },\n ];\n files[`ppt/charts/_rels/chart${i + 1}.xml.rels`] = [\n textToUint8Array(\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 { level: 0 },\n ];\n }\n\n // Add SmartArt diagram parts (STORE)\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`] = [\n textToUint8Array(\n xml(this.formatter.format(smartArtData.dataModel, context), {\n declaration,\n indent,\n }),\n ),\n { level: 0 },\n ];\n files[`ppt/diagrams/layout${i + 1}.xml`] = [\n textToUint8Array(getLayoutXml(smartArtData.layout)),\n { level: 0 },\n ];\n files[`ppt/diagrams/quickStyle${i + 1}.xml`] = [\n textToUint8Array(getStyleXml(smartArtData.style)),\n { level: 0 },\n ];\n files[`ppt/diagrams/colors${i + 1}.xml`] = [\n textToUint8Array(getColorXml(smartArtData.color)),\n { level: 0 },\n ];\n files[`ppt/diagrams/drawing${i + 1}.xml`] = [\n textToUint8Array(DEFAULT_DRAWING_XML),\n { level: 0 },\n ];\n }\n\n // Add notes slides (STORE)\n for (let i = 0; i < file.NotesSlides.length; i++) {\n const notesSlide = file.NotesSlides[i];\n files[`ppt/notesSlides/notesSlide${i + 1}.xml`] = [\n textToUint8Array(\n xml(this.formatter.format(notesSlide, context), {\n declaration,\n indent,\n }),\n ),\n { level: 0 },\n ];\n files[`ppt/notesSlides/_rels/notesSlide${i + 1}.xml.rels`] = [\n textToUint8Array(\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 { level: 0 },\n ];\n }\n\n // Add media files (STORE compression)\n for (const image of file.Media.Array) {\n files[`ppt/media/${image.fileName}`] = [image.data, { level: 0 }];\n if (image.type === \"svg\" && \"fallback\" in image) {\n const fallback = (\n image as import(\"@file/media/data\").IMediaData & {\n readonly fallback: { readonly fileName: string; readonly data: Uint8Array };\n }\n ).fallback;\n files[`ppt/media/${fallback.fileName}`] = [fallback.data, { level: 0 }];\n }\n }\n\n return files;\n }\n}\n\nfunction textToUint8Array(data: string | Uint8Array): Uint8Array {\n if (data instanceof Uint8Array) {\n return data;\n }\n return new TextEncoder().encode(data);\n}\n","import { Readable } from \"stream\";\n\nimport type { File } from \"@file/file\";\nimport { convertOutput, convertPrettifyType, OoxmlMimeType, PrettifyType } from \"@office-open/core\";\nexport { PrettifyType } from \"@office-open/core\";\nimport type { IXmlifyedFile, OutputByType, OutputType } from \"@office-open/core\";\nimport { type ZipOptions, Zip, ZipDeflate, ZipPassThrough, zipSync } from \"fflate\";\n\nimport { Compiler } from \"./next-compiler\";\n\nexport class Packer {\n public static async pack<T extends OutputType>(\n file: File,\n type: T,\n prettify?: boolean | (typeof PrettifyType)[keyof typeof PrettifyType],\n overrides: readonly IXmlifyedFile[] = [],\n ): Promise<OutputByType[T]> {\n const files = this.compiler.compile(file, convertPrettifyType(prettify), overrides);\n const zipped = zipSync(files, { level: 6 });\n return convertOutput(zipped, type, OoxmlMimeType.PPTX);\n }\n\n public static toBuffer(\n file: File,\n prettify?: boolean | (typeof PrettifyType)[keyof typeof PrettifyType],\n overrides: readonly IXmlifyedFile[] = [],\n ): Promise<Buffer> {\n return Packer.pack(file, \"nodebuffer\", prettify, overrides);\n }\n\n public static toBlob(\n file: File,\n prettify?: boolean | (typeof PrettifyType)[keyof typeof PrettifyType],\n overrides: readonly IXmlifyedFile[] = [],\n ): Promise<Blob> {\n return Packer.pack(file, \"blob\", prettify, overrides);\n }\n\n public static toBase64String(\n file: File,\n prettify?: boolean | (typeof PrettifyType)[keyof typeof PrettifyType],\n overrides: readonly IXmlifyedFile[] = [],\n ): Promise<string> {\n return Packer.pack(file, \"base64\", prettify, overrides);\n }\n\n public static toStream(\n file: File,\n prettify?: boolean | (typeof PrettifyType)[keyof typeof PrettifyType],\n overrides: readonly IXmlifyedFile[] = [],\n ): Readable {\n const stream = new Readable({ read() {} });\n\n try {\n const files = this.compiler.compile(file, convertPrettifyType(prettify), overrides);\n\n const zip = new Zip((err, chunk, final) => {\n if (err) {\n stream.destroy(err);\n return;\n }\n if (!stream.destroyed) {\n stream.push(chunk);\n }\n if (final) {\n stream.push(null);\n }\n });\n\n for (const [name, data] of Object.entries(files)) {\n const raw = Array.isArray(data) ? (data[0] as Uint8Array) : (data as Uint8Array);\n const level = Array.isArray(data) ? ((data[1] as ZipOptions).level ?? 6) : 6;\n const entry =\n level === 0 ? new ZipPassThrough(name) : new ZipDeflate(name, { level });\n zip.add(entry);\n entry.push(raw, true);\n }\n\n zip.end();\n } catch (err) {\n stream.destroy(err instanceof Error ? err : new Error(String(err)));\n }\n\n return stream;\n }\n\n private static readonly compiler = new Compiler();\n}\n","export * from \"./convenience-functions\";\nexport * from \"./types\";\nexport * from \"./values\";\n","import { readXmlFromZip, parseRels } from \"@office-open/core\";\nimport { findChild, attrNum } from \"@office-open/xml\";\n\nexport interface PptxParseContext {\n zip: Map<string, Uint8Array>;\n slidePaths: string[];\n slideWidth?: number;\n slideHeight?: number;\n}\n\nexport function createPptxParseContext(zip: Map<string, Uint8Array>): PptxParseContext {\n const slidePaths: string[] = [];\n let slideWidth: number | undefined;\n let slideHeight: number | undefined;\n\n // Parse presentation.xml\n const presentationXml = readXmlFromZip(zip, \"ppt/presentation.xml\");\n if (presentationXml) {\n const sldSz = findChild(presentationXml, \"p:sldSz\");\n if (sldSz) {\n slideWidth = attrNum(sldSz, \"cx\");\n slideHeight = attrNum(sldSz, \"cy\");\n }\n }\n\n // Parse presentation.xml.rels for slide paths\n const rels = parseRels(zip, \"ppt/_rels/presentation.xml.rels\");\n for (const rel of rels) {\n if (\n rel.type.includes(\"/slide\") &&\n !rel.type.includes(\"slideLayout\") &&\n !rel.type.includes(\"slideMaster\")\n ) {\n const path = rel.target.startsWith(\"../\")\n ? `ppt/${rel.target.replace(\"../\", \"\")}`\n : `ppt/${rel.target}`;\n slidePaths.push(path);\n }\n }\n\n // Sort slide paths by number for consistent ordering\n slidePaths.sort((a, b) => {\n const numA = parseInt(a.match(/slide(\\d+)/)?.[1] ?? \"0\", 10);\n const numB = parseInt(b.match(/slide(\\d+)/)?.[1] ?? \"0\", 10);\n return numA - numB;\n });\n\n return { zip, slidePaths, slideWidth, slideHeight };\n}\n\nexport function resolveSlideMediaPath(relsTarget: string): string {\n if (relsTarget.startsWith(\"../\")) {\n return `ppt/${relsTarget.replace(\"../\", \"\")}`;\n }\n return `ppt/${relsTarget}`;\n}\n\nconst relsCache = new Map<string, Map<string, { target: string; type: string }>>();\n\nexport function getSlideRels(\n ctx: PptxParseContext,\n slidePath: string,\n): Map<string, { target: string; type: string }> {\n const cached = relsCache.get(slidePath);\n if (cached) return cached;\n\n const relsMap = new Map<string, { target: string; type: string }>();\n const relsPath = slidePath.replace(\"ppt/slides/\", \"ppt/slides/_rels/\") + \".rels\";\n const rels = parseRels(ctx.zip, relsPath);\n for (const rel of rels) {\n relsMap.set(rel.id, { target: rel.target, type: rel.type });\n }\n\n relsCache.set(slidePath, relsMap);\n return relsMap;\n}\n","import type { FillOptions } from \"@office-open/core/drawingml\";\nimport { findChild, attr, attrNum } from \"@office-open/xml\";\nimport type { Element } from \"@office-open/xml\";\n\nimport type { ParsedOutlineOptions, ParsedEffectsOptions } from \"./types\";\n\nexport function parseTransform(spPr: Element): {\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n rotation?: number;\n flipH?: boolean;\n flipV?: boolean;\n} {\n const result: ReturnType<typeof parseTransform> = {};\n\n const xfrm = findChild(spPr, \"a:xfrm\");\n if (xfrm) {\n const off = findChild(xfrm, \"a:off\");\n if (off) {\n result.x = attrNum(off, \"x\");\n result.y = attrNum(off, \"y\");\n }\n\n const ext = findChild(xfrm, \"a:ext\");\n if (ext) {\n result.width = attrNum(ext, \"cx\");\n result.height = attrNum(ext, \"cy\");\n }\n\n const rot = attrNum(xfrm, \"rot\");\n if (rot !== undefined && rot !== 0) {\n // OOXML rotation is in 60000ths of a degree\n result.rotation = rot / 60000;\n }\n\n const flipH = attr(xfrm, \"flipH\");\n if (flipH === \"1\") result.flipH = true;\n\n const flipV = attr(xfrm, \"flipV\");\n if (flipV === \"1\") result.flipV = true;\n }\n\n return result;\n}\n\nexport function parseGeometry(spPr: Element): string | undefined {\n const prstGeom = findChild(spPr, \"a:prstGeom\");\n if (prstGeom) {\n return attr(prstGeom, \"prst\") ?? undefined;\n }\n return undefined;\n}\n\nexport function parseFill(spPr: Element): FillOptions | undefined {\n const solidFill = findChild(spPr, \"a:solidFill\");\n if (solidFill) {\n const srgbClr = findChild(solidFill, \"a:srgbClr\");\n const schemeClr = findChild(solidFill, \"a:schemeClr\");\n\n let color: string | undefined;\n if (srgbClr) {\n color = attr(srgbClr, \"val\");\n } else if (schemeClr) {\n color = attr(schemeClr, \"val\");\n }\n\n if (color) return { type: \"solid\", color };\n }\n\n const gradFill = findChild(spPr, \"a:gradFill\");\n if (gradFill) {\n const stops: Array<{ 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\") ?? 0;\n const srgbClr = findChild(gs, \"a:srgbClr\");\n const schemeClr = findChild(gs, \"a:schemeClr\");\n const color = srgbClr\n ? attr(srgbClr, \"val\")\n : schemeClr\n ? attr(schemeClr, \"val\")\n : undefined;\n if (color) stops.push({ position: pos, color });\n }\n }\n\n const result: Record<string, unknown> = { type: \"gradient\", stops };\n\n // Linear gradient\n const lin = findChild(gradFill, \"a:lin\");\n if (lin) {\n const angle = attrNum(lin, \"ang\");\n const scaled = attr(lin, \"scaled\");\n if (angle !== undefined) result.angle = angle;\n if (scaled !== undefined) result.scaled = scaled === \"1\";\n }\n\n // Path gradient\n const path = findChild(gradFill, \"a:path\");\n if (path) {\n result.path = attr(path, \"path\") ?? \"circle\";\n const fillToRect = findChild(path, \"a:fillToRect\");\n if (fillToRect) {\n result.fillToRect = {\n l: attr(fillToRect, \"l\"),\n t: attr(fillToRect, \"t\"),\n r: attr(fillToRect, \"r\"),\n b: attr(fillToRect, \"b\"),\n };\n }\n }\n\n return result as FillOptions;\n }\n\n const noFill = findChild(spPr, \"a:noFill\");\n if (noFill) return { type: \"none\" };\n\n // Pattern fill — complete\n const pattFill = findChild(spPr, \"a:pattFill\");\n if (pattFill) {\n const prst = attr(pattFill, \"prst\");\n const fgClr = findChild(pattFill, \"a:fgClr\");\n const bgClr = findChild(pattFill, \"a:bgClr\");\n const fg = fgClr\n ? findChild(fgClr, \"a:srgbClr\")\n ? attr(findChild(fgClr, \"a:srgbClr\")!, \"val\")\n : findChild(fgClr, \"a:schemeClr\")\n ? attr(findChild(fgClr, \"a:schemeClr\")!, \"val\")\n : undefined\n : undefined;\n const bg = bgClr\n ? findChild(bgClr, \"a:srgbClr\")\n ? attr(findChild(bgClr, \"a:srgbClr\")!, \"val\")\n : findChild(bgClr, \"a:schemeClr\")\n ? attr(findChild(bgClr, \"a:schemeClr\")!, \"val\")\n : undefined\n : undefined;\n return { type: \"pattern\", pattern: prst!, ...(fg && { fg }), ...(bg && { bg }) };\n }\n\n // Blip fill — complete\n const blipFill = findChild(spPr, \"a:blipFill\");\n if (blipFill) {\n const result: Record<string, unknown> = { type: \"blip\" };\n const blip = findChild(blipFill, \"a:blip\");\n if (blip) {\n const embed = attr(blip, \"r:embed\");\n const link = attr(blip, \"r:link\");\n if (embed) result.embed = embed;\n if (link) result.link = link;\n }\n // Stretch\n const stretch = findChild(blipFill, \"a:stretch\");\n if (stretch) {\n result.stretch = true;\n const fillRect = findChild(stretch, \"a:fillRect\");\n if (fillRect) {\n result.fillRect = {\n l: attr(fillRect, \"l\"),\n t: attr(fillRect, \"t\"),\n r: attr(fillRect, \"r\"),\n b: attr(fillRect, \"b\"),\n };\n }\n }\n // Tile\n const tile = findChild(blipFill, \"a:tile\");\n if (tile) {\n delete result.stretch;\n result.tile = true;\n }\n return result as FillOptions;\n }\n\n return undefined;\n}\n\nexport function parseOutline(spPr: Element): ParsedOutlineOptions | undefined {\n const ln = findChild(spPr, \"a:ln\");\n if (!ln) return undefined;\n\n const result: ParsedOutlineOptions = {};\n\n const w = attrNum(ln, \"w\");\n if (w !== undefined) result.width = w;\n\n const cap = attr(ln, \"cap\");\n if (cap) result.cap = cap;\n\n const cmpd = attr(ln, \"cmpd\");\n if (cmpd) result.compound = cmpd;\n\n const algn = attr(ln, \"algn\");\n if (algn) result.alignment = algn;\n\n // Fill\n const solidFill = findChild(ln, \"a:solidFill\");\n if (solidFill) {\n const srgbClr = findChild(solidFill, \"a:srgbClr\");\n const schemeClr = findChild(solidFill, \"a:schemeClr\");\n const color = srgbClr\n ? attr(srgbClr, \"val\")\n : schemeClr\n ? attr(schemeClr, \"val\")\n : undefined;\n if (color) result.color = color;\n }\n\n // Dash style\n const prstDash = findChild(ln, \"a:prstDash\");\n if (prstDash) {\n const val = attr(prstDash, \"val\");\n if (val) result.dashStyle = val;\n }\n\n // Round/bevel\n const round = findChild(ln, \"a:round\");\n if (round) result.round = true;\n\n const bevel = findChild(ln, \"a:bevel\");\n if (bevel) result.bevel = true;\n\n // Line head/tail end\n const headEnd = findChild(ln, \"a:headEnd\");\n if (headEnd) {\n const he: Record<string, unknown> = {};\n const type = attr(headEnd, \"type\");\n const w = attrNum(headEnd, \"w\");\n const len = attrNum(headEnd, \"len\");\n if (type) he.type = type;\n if (w !== undefined) he.width = w;\n if (len !== undefined) he.length = len;\n if (Object.keys(he).length > 0) result.headEnd = he;\n }\n\n const tailEnd = findChild(ln, \"a:tailEnd\");\n if (tailEnd) {\n const te: Record<string, unknown> = {};\n const type = attr(tailEnd, \"type\");\n const w = attrNum(tailEnd, \"w\");\n const len = attrNum(tailEnd, \"len\");\n if (type) te.type = type;\n if (w !== undefined) te.width = w;\n if (len !== undefined) te.length = len;\n if (Object.keys(te).length > 0) result.tailEnd = te;\n }\n\n // Join style\n const join = findChild(ln, \"a:join\");\n if (join) {\n const type = attr(join, \"type\");\n if (type) result.join = type;\n }\n\n // No line\n const noFill = findChild(ln, \"a:noFill\");\n if (noFill) result.width = 0;\n\n return Object.keys(result).length > 0 ? result : undefined;\n}\n\nexport function parseEffects(spPr: Element): ParsedEffectsOptions | undefined {\n const effectLst = findChild(spPr, \"a:effectLst\");\n if (!effectLst) return undefined;\n\n const result: ParsedEffectsOptions = {};\n\n // Outer shadow\n const outerShdw = findChild(effectLst, \"a:outerShdw\");\n if (outerShdw) {\n const shadow: Record<string, unknown> = {};\n const blurRad = attrNum(outerShdw, \"blurRad\");\n const dist = attrNum(outerShdw, \"dist\");\n const dir = attrNum(outerShdw, \"dir\");\n const algn = attr(outerShdw, \"algn\");\n const rotWithShape = attr(outerShdw, \"rotWithShape\");\n\n if (blurRad !== undefined) shadow.blurRadius = blurRad;\n if (dist !== undefined) shadow.distance = dist;\n if (dir !== undefined) shadow.direction = dir;\n if (algn) shadow.alignment = algn;\n if (rotWithShape !== undefined) shadow.rotateWithShape = rotWithShape === \"1\";\n\n const solidFill = findChild(outerShdw, \"a:solidFill\");\n if (solidFill) {\n const srgbClr = findChild(solidFill, \"a:srgbClr\");\n if (srgbClr) shadow.color = attr(srgbClr, \"val\");\n }\n\n result.outerShadow = shadow;\n }\n\n // Inner shadow\n const innerShdw = findChild(effectLst, \"a:innerShdw\");\n if (innerShdw) {\n const shadow: Record<string, unknown> = {};\n const blurRad = attrNum(innerShdw, \"blurRad\");\n const dist = attrNum(innerShdw, \"dist\");\n const dir = attrNum(innerShdw, \"dir\");\n const rotWithShape = attr(innerShdw, \"rotWithShape\");\n if (blurRad !== undefined) shadow.blurRadius = blurRad;\n if (dist !== undefined) shadow.distance = dist;\n if (dir !== undefined) shadow.direction = dir;\n if (rotWithShape !== undefined) shadow.rotateWithShape = rotWithShape === \"1\";\n const solidFill = findChild(innerShdw, \"a:solidFill\");\n if (solidFill) {\n const srgbClr = findChild(solidFill, \"a:srgbClr\");\n if (srgbClr) shadow.color = attr(srgbClr, \"val\");\n }\n result.innerShadow = shadow;\n }\n\n // Glow\n const glow = findChild(effectLst, \"a:glow\");\n if (glow) {\n const radius = attrNum(glow, \"rad\");\n const glowObj: Record<string, unknown> = {};\n if (radius !== undefined) glowObj.radius = radius;\n const solidFill = findChild(glow, \"a:solidFill\");\n if (solidFill) {\n const srgbClr = findChild(solidFill, \"a:srgbClr\");\n if (srgbClr) glowObj.color = attr(srgbClr, \"val\");\n }\n if (Object.keys(glowObj).length > 0) result.glow = glowObj;\n }\n\n // Reflection\n const reflection = findChild(effectLst, \"a:reflection\");\n if (reflection) {\n const refObj: Record<string, unknown> = {};\n const blurRad = attrNum(reflection, \"blurRad\");\n const dist = attrNum(reflection, \"dist\");\n const dir = attrNum(reflection, \"dir\");\n const fadeDir = attrNum(reflection, \"fadeDir\");\n const stA = attrNum(reflection, \"stA\");\n const stB = attrNum(reflection, \"stB\");\n const rotWithShape = attr(reflection, \"rotWithShape\");\n if (blurRad !== undefined) refObj.blurRadius = blurRad;\n if (dist !== undefined) refObj.distance = dist;\n if (dir !== undefined) refObj.direction = dir;\n if (fadeDir !== undefined) refObj.fadeDirection = fadeDir;\n if (stA !== undefined) refObj.startAlpha = stA;\n if (stB !== undefined) refObj.endAlpha = stB;\n if (rotWithShape !== undefined) refObj.rotateWithShape = rotWithShape === \"1\";\n if (Object.keys(refObj).length > 0) result.reflection = refObj;\n }\n\n return Object.keys(result).length > 0 ? result : undefined;\n}\n","import { findChild, children, attr, attrBool, attrNum, textOf } from \"@office-open/xml\";\nimport type { Element } from \"@office-open/xml\";\n\nimport type { PptxParseContext } from \"./context\";\nimport type { ParagraphJson, RunJson } from \"./types\";\n\nexport function parseTextBody(\n txBody: Element,\n ctx: PptxParseContext,\n): {\n paragraphs?: ParagraphJson[];\n vertical?: string;\n anchor?: string;\n autoFit?: string;\n wrap?: string;\n margins?: Record<string, number>;\n columns?: number;\n columnSpacing?: number;\n} {\n const result: ReturnType<typeof parseTextBody> = {};\n\n // Body properties\n const bodyPr = findChild(txBody, \"a:bodyPr\");\n if (bodyPr) {\n const vert = attr(bodyPr, \"vert\");\n if (vert) result.vertical = vert;\n\n const anchor = attr(bodyPr, \"anchor\");\n if (anchor) result.anchor = anchor;\n\n const wrap = attr(bodyPr, \"wrap\");\n if (wrap) result.wrap = wrap;\n\n const lIns = attrNum(bodyPr, \"lIns\");\n const tIns = attrNum(bodyPr, \"tIns\");\n const rIns = attrNum(bodyPr, \"rIns\");\n const bIns = attrNum(bodyPr, \"bIns\");\n if (lIns !== undefined || tIns !== undefined || rIns !== undefined || bIns !== undefined) {\n const margins: Record<string, number> = {};\n if (lIns !== undefined) margins.left = lIns;\n if (tIns !== undefined) margins.top = tIns;\n if (rIns !== undefined) margins.right = rIns;\n if (bIns !== undefined) margins.bottom = bIns;\n result.margins = margins;\n }\n\n const numCol = attrNum(bodyPr, \"numCol\");\n if (numCol !== undefined && numCol > 1) result.columns = numCol;\n\n const spcCol = attrNum(bodyPr, \"spcCol\");\n if (spcCol !== undefined) result.columnSpacing = spcCol;\n\n // AutoFit\n const normAutofit = findChild(bodyPr, \"a:normAutofit\");\n const spAutoFit = findChild(bodyPr, \"a:spAutoFit\");\n const noAutofit = findChild(bodyPr, \"a:noAutofit\");\n\n if (normAutofit) result.autoFit = \"normal\";\n if (spAutoFit) result.autoFit = \"shape\";\n if (noAutofit) result.autoFit = \"none\";\n }\n\n // Parse paragraphs\n const paragraphs = children(txBody, \"a:p\");\n if (paragraphs.length > 0) {\n result.paragraphs = paragraphs.map((p) => parsePptxParagraph(p, ctx));\n }\n\n return result;\n}\n\nexport function parsePptxParagraph(p: Element, ctx: PptxParseContext): ParagraphJson {\n const result: ParagraphJson = {};\n const pPr = findChild(p, \"a:pPr\");\n\n if (pPr) {\n const algn = attr(pPr, \"algn\");\n if (algn) result.alignment = algn;\n\n const lvl = attrNum(pPr, \"lvl\");\n const marL = attrNum(pPr, \"marL\");\n const indent = attrNum(pPr, \"indent\");\n if (lvl !== undefined || marL !== undefined || indent !== undefined) {\n const indentObj: Record<string, number> = {};\n if (lvl !== undefined) indentObj.level = lvl;\n if (marL !== undefined) indentObj.left = marL;\n if (indent !== undefined) indentObj.margin = indent;\n result.indent = indentObj;\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) {\n if (!result.spacing) result.spacing = {};\n result.spacing.before = val;\n }\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) {\n if (!result.spacing) result.spacing = {};\n result.spacing.after = val;\n }\n }\n }\n\n const lnSpc = findChild(pPr, \"a:lnSpc\");\n if (lnSpc) {\n const spcPts = findChild(lnSpc, \"a:spcPts\");\n if (spcPts) {\n const val = attrNum(spcPts, \"val\");\n if (val !== undefined) {\n if (!result.spacing) result.spacing = {};\n result.spacing.line = val;\n }\n }\n }\n\n // Bullet/numbering detection\n const buNone = findChild(pPr, \"a:buNone\");\n if (!buNone) {\n const buChar = findChild(pPr, \"a:buChar\");\n const buAutoNum = findChild(pPr, \"a:buAutoNum\");\n\n if (buAutoNum) {\n const type = attr(buAutoNum, \"type\");\n result.numbering = { type: type ?? \"arabicPeriod\", level: lvl ?? 0 };\n } else if (buChar) {\n const char = attr(buChar, \"char\");\n result.bullet = { type: char ?? \"bullet\", level: lvl ?? 0 };\n } else if (lvl !== undefined && lvl > 0) {\n // Has indent level but no explicit bullet — likely inherits from master\n result.bullet = { level: lvl };\n }\n }\n }\n\n // Parse runs\n const runs: RunJson[] = [];\n\n for (const child of p.elements ?? []) {\n if (child.name === \"a:r\") {\n const run = parsePptxRun(child, ctx);\n if (run) runs.push(run);\n } else if (child.name === \"a:br\") {\n runs.push({ text: \"\\n\" });\n } else if (child.name === \"a:fld\") {\n // Field element — extract text from t element\n const t = findChild(child, \"a:t\");\n if (t) {\n const text = textOf(t);\n if (text) runs.push({ text });\n }\n } else if (child.name === \"a:hlinkClick\") {\n // Hyperlink run\n const r = children(child, \"a:r\")[0];\n if (r) {\n const run = parsePptxRun(r, ctx);\n if (run) {\n const action = attr(child, \"action\");\n if (action) {\n run.hyperlink = { url: action };\n }\n const tooltip = attr(child, \"tooltip\");\n if (tooltip && run.hyperlink) {\n run.hyperlink.tooltip = tooltip;\n }\n runs.push(run);\n }\n }\n }\n }\n\n if (runs.length > 0) {\n result.children = runs;\n }\n\n // If only one text run with no formatting, simplify\n if (runs.length === 1 && runs[0].text !== undefined) {\n const hasFormatting = Object.keys(runs[0]).some((k) => k !== \"text\");\n if (!hasFormatting) {\n result.text = runs[0].text;\n delete result.children;\n }\n }\n\n return result;\n}\n\nfunction parsePptxRun(r: Element, _ctx: PptxParseContext): RunJson | undefined {\n const result: RunJson = {};\n const rPr = findChild(r, \"a:rPr\");\n\n // Extract text\n const t = findChild(r, \"a:t\");\n const text = textOf(t);\n if (text) result.text = text;\n\n if (!text && !rPr) return undefined;\n\n if (rPr) {\n const sz = attrNum(rPr, \"sz\");\n if (sz !== undefined) result.fontSize = sz;\n\n const b = attrBool(rPr, \"b\");\n if (b) result.bold = true;\n\n const i = attrBool(rPr, \"i\");\n if (i) result.italic = true;\n\n const u = attr(rPr, \"u\");\n if (u && u !== \"none\") result.underline = u;\n\n const strike = attr(rPr, \"strike\");\n if (strike && strike !== \"noStrike\") result.strike = strike;\n\n const lang = attr(rPr, \"lang\");\n if (lang) result.lang = lang;\n\n const spc = attrNum(rPr, \"spc\");\n if (spc !== undefined) result.spacing = spc;\n\n const baseline = attrNum(rPr, \"baseline\");\n if (baseline !== undefined) result.baseline = baseline;\n\n const cap = attr(rPr, \"cap\");\n if (cap) result.capitalization = cap;\n\n const dirty = attr(rPr, \"dirty\");\n if (dirty === \"1\") result.noProof = true; // dirty flag often used with noProof\n\n const noProof = attr(rPr, \"noProof\");\n if (noProof === \"1\") result.noProof = true;\n\n const rtl = attr(rPr, \"rtl\");\n if (rtl === \"1\") result.rightToLeft = true;\n\n // Font family\n const latin = findChild(rPr, \"a:latin\");\n if (latin) {\n const typeface = attr(latin, \"typeface\");\n if (typeface) result.font = typeface;\n }\n\n // Fill (solid color)\n const solidFill = findChild(rPr, \"a:solidFill\");\n if (solidFill) {\n const srgbClr = findChild(solidFill, \"a:srgbClr\");\n const schemeClr = findChild(solidFill, \"a:schemeClr\");\n if (srgbClr) {\n const val = attr(srgbClr, \"val\");\n if (val) result.fill = { type: \"solid\", color: val };\n } else if (schemeClr) {\n const val = attr(schemeClr, \"val\");\n if (val) result.fill = { type: \"solid\", color: val };\n }\n }\n }\n\n return result;\n}\n","import { uint8ToBase64, getImageType } from \"@office-open/core\";\nimport { findChild, attr, attrNum, findDeep } from \"@office-open/xml\";\nimport type { Element } from \"@office-open/xml\";\n\nimport type { PptxParseContext } from \"./context\";\nimport { resolveSlideMediaPath } from \"./context\";\nimport { parseTransform, parseGeometry, parseFill, parseOutline, parseEffects } from \"./drawingml\";\nimport { parseTextBody } from \"./text-body\";\nimport type {\n ShapeJson,\n PictureJson,\n ConnectorShapeJson,\n TableJson,\n TableCellJson,\n TableRowJson,\n} from \"./types\";\n\nexport function parseShape(\n sp: Element,\n ctx: PptxParseContext,\n _slideRels: Map<string, { target: string; type: string }>,\n): ShapeJson {\n const result: ShapeJson = { $type: \"shape\" };\n\n // NVSpPr (non-visual shape properties)\n const nvSpPr = findChild(sp, \"p:nvSpPr\");\n if (nvSpPr) {\n const cNvPr = findChild(nvSpPr, \"p:cNvPr\");\n if (cNvPr) {\n const id = attrNum(cNvPr, \"id\");\n const name = attr(cNvPr, \"name\");\n if (id !== undefined) result.id = id;\n if (name) result.name = name;\n }\n\n const nvPr = findChild(nvSpPr, \"p:nvPr\");\n if (nvPr) {\n const ph = findChild(nvPr, \"p:ph\");\n if (ph) {\n const type = attr(ph, \"type\") ?? attr(ph, \"idx\");\n // Map placeholder types\n if (type === \"title\" || type === \"0\") result.placeholder = \"title\";\n else if (type === \"body\" || type === \"1\") result.placeholder = \"body\";\n else if (type === \"subTitle\" || type === \"2\") result.placeholder = \"subTitle\";\n else if (type === \"sldNum\" || type === \"3\") result.placeholder = \"sldNum\";\n else if (type === \"dt\" || type === \"4\") result.placeholder = \"dt\";\n else if (type === \"ftr\" || type === \"5\") result.placeholder = \"ftr\";\n else if (type === \"hdr\" || type === \"6\") result.placeholder = \"hdr\";\n else if (type) result.placeholder = type as ShapeJson[\"placeholder\"];\n\n const idx = attrNum(ph, \"idx\");\n if (idx !== undefined) result.placeholderIndex = idx;\n }\n }\n }\n\n // SpPr (shape properties)\n const spPr = findChild(sp, \"p:spPr\");\n if (spPr) {\n const transform = parseTransform(spPr);\n Object.assign(result, transform);\n\n result.geometry = parseGeometry(spPr);\n result.fill = parseFill(spPr);\n result.outline = parseOutline(spPr);\n result.effects = parseEffects(spPr);\n }\n\n // Text body\n const txBody = findChild(sp, \"p:txBody\");\n if (txBody) {\n const textBody = parseTextBody(txBody, ctx);\n if (textBody.paragraphs) result.paragraphs = textBody.paragraphs;\n if (textBody.vertical) result.textVertical = textBody.vertical;\n if (textBody.anchor) result.textAnchor = textBody.anchor;\n if (textBody.autoFit) result.textAutoFit = textBody.autoFit;\n }\n\n return result;\n}\n\nexport function parsePicture(\n pic: Element,\n ctx: PptxParseContext,\n slideRels: Map<string, { target: string; type: string }>,\n): PictureJson | undefined {\n const result: PictureJson = { $type: \"picture\" };\n\n // NVPicPr (non-visual picture properties)\n const nvPicPr = findChild(pic, \"p:nvPicPr\");\n if (nvPicPr) {\n const cNvPr = findChild(nvPicPr, \"p:cNvPr\");\n if (cNvPr) {\n const id = attrNum(cNvPr, \"id\");\n const name = attr(cNvPr, \"name\");\n if (id !== undefined) result.id = id;\n if (name) result.name = name;\n }\n }\n\n // BlipFill (image data)\n const blipFill = findChild(pic, \"p:blipFill\");\n if (blipFill) {\n const blip = findChild(blipFill, \"a:blip\");\n if (blip) {\n const embedId = attr(blip, \"r:embed\");\n\n if (embedId) {\n const rel = slideRels.get(embedId);\n if (rel) {\n const mediaPath = resolveSlideMediaPath(rel.target);\n const data = ctx.zip.get(mediaPath);\n if (data) {\n result.data = uint8ToBase64(data);\n result.type = getImageType(mediaPath);\n }\n }\n }\n }\n }\n\n if (!result.data) return undefined;\n\n // Shape properties (transform, outline, etc.)\n const spPr = findChild(pic, \"p:spPr\");\n if (spPr) {\n const transform = parseTransform(spPr);\n Object.assign(result, transform);\n result.outline = parseOutline(spPr);\n result.effects = parseEffects(spPr);\n }\n\n return result;\n}\n\nexport function parseConnector(cxnSp: Element, _ctx: PptxParseContext): ConnectorShapeJson {\n const result: ConnectorShapeJson = { $type: \"connectorShape\" };\n\n // NV connector properties\n const nvCxnSpPr = findChild(cxnSp, \"p:nvCxnSpPr\");\n if (nvCxnSpPr) {\n const cNvPr = findChild(nvCxnSpPr, \"p:cNvPr\");\n if (cNvPr) {\n const id = attrNum(cNvPr, \"id\");\n const name = attr(cNvPr, \"name\");\n if (id !== undefined) result.id = id;\n if (name) result.name = name;\n }\n }\n\n // Shape properties\n const spPr = findChild(cxnSp, \"p:spPr\");\n if (spPr) {\n const transform = parseTransform(spPr);\n Object.assign(result, transform);\n result.outline = parseOutline(spPr);\n\n // Connector style\n const prstGeom = findChild(spPr, \"a:prstGeom\");\n if (prstGeom) {\n const type = attr(prstGeom, \"prst\");\n if (type) result.style = type;\n }\n }\n\n return result;\n}\n\nexport function parsePptxTable(\n graphicFrame: Element,\n ctx: PptxParseContext,\n): TableJson | undefined {\n const result: TableJson = { $type: \"table\", rows: [] };\n\n // Non-visual properties\n // xfrm is in the spPr child\n const spPr = findChild(graphicFrame, \"p:xfrm\") ?? findChild(graphicFrame, \"a:xfrm\");\n if (spPr) {\n const off = findChild(spPr, \"a:off\");\n if (off) {\n result.x = attrNum(off, \"x\");\n result.y = attrNum(off, \"y\");\n }\n const ext = findChild(spPr, \"a:ext\");\n if (ext) {\n result.width = attrNum(ext, \"cx\");\n result.height = attrNum(ext, \"cy\");\n }\n }\n\n // Find the actual table element\n const tbl = findDeep(graphicFrame, \"a:tbl\")[0];\n if (!tbl) return undefined;\n\n // Table properties (a:tblPr)\n const tblPr = findChild(tbl, \"a:tblPr\");\n if (tblPr) {\n const bandRow = attr(tblPr, \"bandRow\");\n const bandCol = attr(tblPr, \"bandCol\");\n const firstRow = attr(tblPr, \"firstRow\");\n const firstCol = attr(tblPr, \"firstCol\");\n const lastRow = attr(tblPr, \"lastRow\");\n const lastCol = attr(tblPr, \"lastCol\");\n if (bandRow || bandCol || firstRow || firstCol || lastRow || lastCol) {\n result.tableStyle = {\n ...(bandRow === \"1\" && { bandRow: true }),\n ...(bandCol === \"1\" && { bandCol: true }),\n ...(firstRow === \"1\" && { firstRow: true }),\n ...(firstCol === \"1\" && { firstCol: true }),\n ...(lastRow === \"1\" && { lastRow: true }),\n ...(lastCol === \"1\" && { lastCol: true }),\n };\n }\n }\n\n // Parse rows\n for (const tr of tbl.elements ?? []) {\n if (tr.name !== \"a:tr\") continue;\n\n const row: TableRowJson = { cells: [] };\n const trH = attrNum(tr, \"h\");\n if (trH !== undefined) row.height = trH;\n\n for (const tc of tr.elements ?? []) {\n if (tc.name !== \"a:tc\") continue;\n\n const cell: TableCellJson = {};\n\n // Column span\n const gridSpan = attrNum(tc, \"gridSpan\");\n if (gridSpan !== undefined && gridSpan > 1) cell.columnSpan = gridSpan;\n\n // Row span\n const rowSpan = attrNum(tc, \"rowSpan\");\n if (rowSpan !== undefined && rowSpan > 1) cell.rowSpan = rowSpan;\n\n // Cell properties\n const tcPr = findChild(tc, \"a:tcPr\");\n if (tcPr) {\n // Fill\n const solidFill = findChild(tcPr, \"a:solidFill\");\n if (solidFill) {\n const srgbClr = findChild(solidFill, \"a:srgbClr\");\n if (srgbClr) {\n const color = attr(srgbClr, \"val\");\n if (color) cell.fill = { type: \"solid\", color };\n }\n }\n\n // Vertical align\n const anchor = attr(tcPr, \"anchor\");\n if (anchor) cell.verticalAlign = anchor;\n\n // Margins\n const marL = attrNum(tcPr, \"marL\");\n const marR = attrNum(tcPr, \"marR\");\n const marT = attrNum(tcPr, \"marT\");\n const marB = attrNum(tcPr, \"marB\");\n if (\n marL !== undefined ||\n marR !== undefined ||\n marT !== undefined ||\n marB !== undefined\n ) {\n const margins: Record<string, number> = {};\n if (marL !== undefined) margins.left = marL;\n if (marR !== undefined) margins.right = marR;\n if (marT !== undefined) margins.top = marT;\n if (marB !== undefined) margins.bottom = marB;\n cell.margins = margins;\n }\n\n // Width\n const tcW = attrNum(tcPr, \"w\");\n if (tcW !== undefined) cell.width = tcW;\n\n // Cell borders\n const tcBorders = findChild(tcPr, \"a:tcBorders\");\n if (tcBorders) {\n const borders: Record<string, unknown> = {};\n for (const border of tcBorders.elements ?? []) {\n if (border.name?.startsWith(\"a:\")) {\n const borderName = border.name.replace(\"a:\", \"\");\n const w = attrNum(border, \"w\");\n if (w !== undefined) {\n const borderDef: Record<string, unknown> = { width: w };\n // Extract color from a:solidFill/a:srgbClr/@val\n const solidFill = findChild(border, \"a:solidFill\");\n if (solidFill) {\n const srgbClr = findChild(solidFill, \"a:srgbClr\");\n if (srgbClr) {\n const color = attr(srgbClr, \"val\");\n if (color) borderDef.color = color;\n }\n }\n // Extract dashStyle from a:prstDash/@val\n const prstDash = findChild(border, \"a:prstDash\");\n if (prstDash) {\n const dashVal = attr(prstDash, \"val\");\n if (dashVal) borderDef.dashStyle = dashVal;\n }\n borders[borderName] = borderDef;\n }\n }\n }\n if (Object.keys(borders).length > 0) cell.borders = borders;\n }\n }\n\n // Text body\n const txBody = findChild(tc, \"a:txBody\");\n if (txBody) {\n const textBody = parseTextBody(txBody, ctx);\n if (textBody.paragraphs) cell.paragraphs = textBody.paragraphs;\n }\n\n row.cells.push(cell);\n }\n\n result.rows.push(row);\n }\n\n return result;\n}\n","import { readXmlFromZip } from \"@office-open/core\";\nimport { findChild, attr, attrNum } from \"@office-open/xml\";\nimport type { Element } from \"@office-open/xml\";\n\nimport type { PptxParseContext } from \"./context\";\nimport { getSlideRels } from \"./context\";\nimport { parseShape, parsePicture, parseConnector, parsePptxTable } from \"./shape\";\nimport { parseTextBody } from \"./text-body\";\nimport type { SlideJson, SlideChildJson, GroupShapeJson, ParagraphJson } from \"./types\";\n\nexport function parseSlide(slideXml: Element, ctx: PptxParseContext, slidePath: string): SlideJson {\n const result: SlideJson = { children: [] };\n\n const slideRels = getSlideRels(ctx, slidePath);\n\n const cSld = findChild(slideXml, \"p:cSld\");\n if (!cSld) return result;\n\n // Background\n const bg = findChild(cSld, \"p:bg\");\n if (bg) {\n result.background = parseSlideBackground(bg);\n }\n\n // Shape tree\n const spTree = findChild(cSld, \"p:spTree\");\n if (spTree) {\n for (const child of spTree.elements ?? []) {\n // Skip spTree's own group properties (not child shapes)\n if (child.name === \"p:nvGrpSpPr\" || child.name === \"p:grpSpPr\") continue;\n const parsed = parseShapeTreeElement(child, ctx, slideRels);\n if (parsed) result.children.push(parsed);\n }\n }\n\n // Transition (enhanced)\n const transition = findChild(slideXml, \"p:transition\");\n if (transition) {\n result.transition = parseTransition(transition);\n }\n\n // Notes\n let notesTarget: string | undefined;\n for (const [, rel] of slideRels) {\n if (rel.type.includes(\"notesSlide\")) {\n notesTarget = rel.target;\n break;\n }\n }\n if (notesTarget) {\n const notesPath = notesTarget.startsWith(\"../\")\n ? notesTarget.replace(\"../\", \"ppt/\")\n : `ppt/${notesTarget}`;\n const notesXml = readXmlFromZip(ctx.zip, notesPath);\n if (notesXml) {\n const notesContent = parseSlideNotes(notesXml, ctx);\n if (notesContent) result.notes = notesContent;\n }\n }\n\n return result;\n}\n\nfunction parseShapeTreeElement(\n el: Element,\n ctx: PptxParseContext,\n slideRels: Map<string, { target: string; type: string }>,\n): SlideChildJson | undefined {\n switch (el.name) {\n case \"p:sp\":\n return parseShape(el, ctx, slideRels);\n case \"p:pic\":\n return parsePicture(el, ctx, slideRels);\n case \"p:cxnSp\":\n return parseConnector(el, ctx);\n case \"p:graphicFrame\": {\n const table = parsePptxTable(el, ctx);\n return table ?? { $raw: true, element: el };\n }\n case \"p:grpSp\":\n return parseGroupShape(el, ctx, slideRels);\n default:\n return { $raw: true, element: el };\n }\n}\n\n/** Recursively parse group shapes */\nfunction parseGroupShape(\n grpSp: Element,\n ctx: PptxParseContext,\n slideRels: Map<string, { target: string; type: string }>,\n): GroupShapeJson {\n const result: GroupShapeJson = { $type: \"groupShape\" };\n\n const nvSpPr = findChild(grpSp, \"p:nvGrpSpPr\");\n const cNvPr = findChild(nvSpPr, \"p:cNvPr\") ?? findChild(nvSpPr, \"p:nvPr\");\n if (cNvPr) {\n const id = attrNum(cNvPr, \"id\");\n const name = attr(cNvPr, \"name\");\n if (id !== undefined) result.id = id;\n if (name) result.name = name;\n }\n\n const grpSpPr = findChild(grpSp, \"p:grpSpPr\");\n if (grpSpPr) {\n const xfrm = findChild(grpSpPr, \"a:xfrm\");\n if (xfrm) {\n const off = findChild(xfrm, \"a:off\");\n const ext = findChild(xfrm, \"a:ext\");\n if (off) {\n result.x = attrNum(off, \"x\");\n result.y = attrNum(off, \"y\");\n }\n if (ext) {\n result.width = attrNum(ext, \"cx\");\n result.height = attrNum(ext, \"cy\");\n }\n const rot = attrNum(xfrm, \"rot\");\n if (rot !== undefined && rot !== 0) {\n // OOXML rotation is in 60000ths of a degree\n result.rotation = rot / 60000;\n }\n const flipH = attr(xfrm, \"flipH\");\n const flipV = attr(xfrm, \"flipV\");\n if (flipH === \"1\") result.flipH = true;\n if (flipV === \"1\") result.flipV = true;\n }\n }\n\n // Parse children — CT_GroupShape allows sp/grpSp/etc directly (no spTree wrapper)\n // Some producers use spTree inside grpSp; handle both layouts\n const childSource = findChild(grpSp, \"p:spTree\") ?? grpSp;\n const children: SlideChildJson[] = [];\n for (const child of childSource.elements ?? []) {\n if (child.name === \"p:nvGrpSpPr\" || child.name === \"p:grpSpPr\") continue;\n const parsed = parseShapeTreeElement(child, ctx, slideRels);\n if (parsed) children.push(parsed);\n }\n if (children.length > 0) result.children = children;\n\n return result;\n}\n\n/** Parse slide notes content */\nfunction parseSlideNotes(\n notesXml: Element,\n ctx: PptxParseContext,\n): string | ParagraphJson[] | undefined {\n const cSld = findChild(notesXml, \"p:cSld\");\n if (!cSld) return undefined;\n\n const spTree = findChild(cSld, \"p:spTree\");\n if (!spTree) return undefined;\n\n for (const child of spTree.elements ?? []) {\n if (child.name === \"p:sp\") {\n const nvSpPr = findChild(child, \"p:nvSpPr\");\n const nvPr = findChild(nvSpPr, \"p:nvPr\");\n if (nvPr) {\n const ph = findChild(nvPr, \"p:ph\");\n if (ph && (attr(ph, \"type\") === \"body\" || attr(ph, \"type\") === undefined)) {\n const txBody = findChild(child, \"p:txBody\");\n if (txBody) {\n const parsed = parseTextBody(txBody, ctx);\n if (parsed.paragraphs && parsed.paragraphs.length > 0) {\n return parsed.paragraphs;\n }\n }\n }\n }\n }\n }\n return undefined;\n}\n\nfunction parseSlideBackground(bg: Element): string | Record<string, unknown> | undefined {\n const bgPr = findChild(bg, \"p:bgPr\");\n if (!bgPr) return undefined;\n\n // Check for solid fill\n const solidFill = findChild(bgPr, \"a:solidFill\");\n if (solidFill) {\n const srgbClr = findChild(solidFill, \"a:srgbClr\");\n const schemeClr = findChild(solidFill, \"a:schemeClr\");\n const color = srgbClr\n ? attr(srgbClr, \"val\")\n : schemeClr\n ? attr(schemeClr, \"val\")\n : undefined;\n if (color) return color;\n }\n\n // Gradient fill\n const gradFill = findChild(bgPr, \"a:gradFill\");\n if (gradFill) {\n return { type: \"gradient\" };\n }\n\n return undefined;\n}\n\nfunction parseTransition(transition: Element): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n const spd = attr(transition, \"spd\");\n const advClick = attr(transition, \"advClick\");\n const advTm = attrNum(transition, \"advTm\");\n const p14Dur = attrNum(transition, \"p14:dur\");\n\n if (spd) result.speed = spd;\n if (advClick !== undefined) result.advanceOnClick = advClick === \"1\";\n if (advTm !== undefined) result.advanceAfterMs = advTm;\n if (p14Dur !== undefined) result.durationMs = p14Dur;\n\n // Get the first child element which defines the transition type\n for (const child of transition.elements ?? []) {\n if (child.name?.startsWith(\"p:\") && child.name !== \"p:transition\") {\n const type = child.name.replace(\"p:\", \"\");\n result.type = type;\n\n // Transition-specific options\n const p14Prst = findChild(child, \"p14:prst\");\n if (p14Prst) {\n const prstVal = attr(p14Prst, \"val\");\n if (prstVal) result.preset = prstVal;\n }\n break;\n }\n }\n\n return result;\n}\n","import {\n unzipToMap,\n readXmlFromZip,\n readAllXmlParts,\n parseCoreProperties,\n} from \"@office-open/core\";\nimport type { Element } from \"@office-open/xml\";\n\nimport { createPptxParseContext } from \"./context\";\nimport { parseSlide } from \"./slide\";\nimport type { PptxDocumentJson } from \"./types\";\n\nexport interface ParsePptxOptions {\n /** Include raw XML parts in $parts for lossless round-trip (default: true) */\n includeRawParts?: boolean;\n}\n\nexport async function parsePptx(\n data: Uint8Array,\n options?: ParsePptxOptions,\n): Promise<PptxDocumentJson> {\n const zip = unzipToMap(data);\n const ctx = createPptxParseContext(zip);\n const includeRawParts = options?.includeRawParts !== false;\n\n // Parse core properties\n const coreProps = parseCoreProperties(zip);\n\n // Parse each slide\n const slides = [];\n\n for (const slidePath of ctx.slidePaths) {\n const slideXml = readXmlFromZip(zip, slidePath);\n if (!slideXml) continue;\n\n const slide = parseSlide(slideXml, ctx, slidePath);\n slides.push(slide);\n }\n\n // Collect raw XML parts for round-trip\n let $parts: Record<string, Element> | undefined;\n if (includeRawParts) {\n $parts = readAllXmlParts(zip, {\n skipPaths: ctx.slidePaths,\n });\n }\n\n return {\n slides,\n ...($parts && { $parts }),\n ...(ctx.slideWidth !== undefined && { slideWidth: ctx.slideWidth }),\n ...(ctx.slideHeight !== undefined && { slideHeight: ctx.slideHeight }),\n ...(coreProps.title && { title: coreProps.title }),\n ...(coreProps.creator && { creator: coreProps.creator }),\n ...(coreProps.subject && { subject: coreProps.subject }),\n ...(coreProps.keywords && { keywords: coreProps.keywords }),\n ...(coreProps.description && { description: coreProps.description }),\n ...(coreProps.lastModifiedBy && { lastModifiedBy: coreProps.lastModifiedBy }),\n };\n}\n\nexport type {\n PptxDocumentJson,\n SlideJson,\n SlideChildJson,\n ShapeJson,\n PictureJson,\n ConnectorShapeJson,\n GroupShapeJson,\n TableJson,\n TableRowJson,\n TableCellJson,\n ParagraphJson,\n RunJson,\n RawElement,\n MixedChildren,\n} from \"./types\";\nexport { isRaw } from \"./types\";\n","import { Picture } from \"@file/picture/picture\";\nimport { GroupShape } from \"@file/shape/group-shape\";\nimport { ConnectorShape } from \"@file/shape/line-shape\";\nimport { Paragraph } from \"@file/shape/paragraph/paragraph\";\nimport { Run } from \"@file/shape/paragraph/run\";\nimport type { TextCapitalization } from \"@file/shape/paragraph/run-properties\";\nimport { Shape } from \"@file/shape/shape\";\nimport { Table } from \"@file/table/table\";\nimport type { BaseXmlComponent } from \"@file/xml-components\";\nimport { RawPassthrough } from \"@office-open/core\";\nimport type { FillOptions } from \"@office-open/core/drawingml\";\n\nimport { isRaw } from \"./types\";\nimport type {\n SlideChildJson,\n ShapeJson,\n PictureJson,\n ConnectorShapeJson,\n GroupShapeJson,\n TableJson,\n ParagraphJson,\n RunJson,\n ParsedOutlineOptions,\n} from \"./types\";\n\n// ── Constants ──\n\nconst EMU_PER_PIXEL = 9525;\n\n// ── Public API ──\n\n/**\n * Convert parsed slide children to constructor-ready BaseXmlComponent[].\n */\nexport function toSlideChildren(children: SlideChildJson[]): BaseXmlComponent[] {\n return children.map(convertSlideChild);\n}\n\n// ── Internal converters ──\n\nfunction convertSlideChild(child: SlideChildJson): BaseXmlComponent {\n if (isRaw(child)) return new RawPassthrough(child.element);\n\n switch (child.$type) {\n case \"shape\":\n return convertShape(child);\n case \"picture\":\n return convertPicture(child);\n case \"connectorShape\":\n return convertConnectorShape(child);\n case \"table\":\n return convertTable(child);\n case \"groupShape\":\n return convertGroupShape(child);\n default:\n return new RawPassthrough((child as Record<string, unknown>).element as any);\n }\n}\n\nfunction convertShape(json: ShapeJson): Shape {\n const { paragraphs, fill, outline, x, y, width, height, rotation, ...rest } = json as any;\n return new Shape({\n ...rest,\n x: x != null ? Math.round(x / EMU_PER_PIXEL) : undefined,\n y: y != null ? Math.round(y / EMU_PER_PIXEL) : undefined,\n width: width != null ? Math.round(width / EMU_PER_PIXEL) : undefined,\n height: height != null ? Math.round(height / EMU_PER_PIXEL) : undefined,\n rotation: rotation != null ? rotation * 60000 : undefined,\n fill: convertFill(fill),\n outline: convertOutline(outline),\n paragraphs: paragraphs?.map(convertParagraph),\n });\n}\n\nfunction convertPicture(json: PictureJson): Picture {\n const { data, type, x, y, width, height, ...rest } = json as any;\n return new Picture({\n ...rest,\n data: base64ToUint8Array(data),\n type: type as any,\n x: x != null ? Math.round(x / EMU_PER_PIXEL) : undefined,\n y: y != null ? Math.round(y / EMU_PER_PIXEL) : undefined,\n width: width != null ? Math.round(width / EMU_PER_PIXEL) : undefined,\n height: height != null ? Math.round(height / EMU_PER_PIXEL) : undefined,\n });\n}\n\nfunction convertConnectorShape(json: ConnectorShapeJson): ConnectorShape {\n const { outline, x, y, width, height, ...rest } = json as any;\n // Parser outputs x/y/width/height (EMU), constructor expects x1/y1/x2/y2 (pixel)\n const x1 = x != null ? Math.round(x / EMU_PER_PIXEL) : 0;\n const y1 = y != null ? Math.round(y / EMU_PER_PIXEL) : 0;\n const x2 = x != null && width != null ? Math.round((x + width) / EMU_PER_PIXEL) : x1 + 100;\n const y2 = y != null && height != null ? Math.round((y + height) / EMU_PER_PIXEL) : y1 + 100;\n return new ConnectorShape({\n ...rest,\n x1,\n y1,\n x2,\n y2,\n outline: convertOutline(outline),\n });\n}\n\nfunction convertTable(json: TableJson): Table {\n const { rows, ...rest } = json as any;\n return new Table({\n ...rest,\n rows: rows.map(convertTableRow),\n });\n}\n\nfunction convertGroupShape(json: GroupShapeJson): GroupShape {\n const { children, x, y, width, height, rotation, ...rest } = json as any;\n return new GroupShape({\n ...rest,\n x: x != null ? Math.round(x / EMU_PER_PIXEL) : undefined,\n y: y != null ? Math.round(y / EMU_PER_PIXEL) : undefined,\n width: width != null ? Math.round(width / EMU_PER_PIXEL) : undefined,\n height: height != null ? Math.round(height / EMU_PER_PIXEL) : undefined,\n // Group rotation is in degrees (rot / 60000), constructor expects rot value\n rotation: rotation != null ? rotation * 60000 : undefined,\n children: children ? toSlideChildren(children) : [],\n });\n}\n\nfunction convertTableRow(row: any): any {\n return {\n cells: (row.cells ?? []).map(convertTableCell),\n height: row.height,\n };\n}\n\nfunction convertTableCell(cell: any): any {\n return {\n paragraphs: cell.paragraphs?.map(convertParagraph),\n columnSpan: cell.columnSpan,\n rowSpan: cell.rowSpan,\n fill: convertFill(cell.fill),\n borders: convertCellBorders(cell.borders),\n verticalAlign: cell.verticalAlign,\n width: cell.width,\n };\n}\n\nfunction convertParagraph(json: ParagraphJson): Paragraph {\n const { children, text, ...rest } = json as any;\n const runs = children?.map(convertRun) ?? (text ? [new Run({ text })] : undefined);\n return new Paragraph({\n ...rest,\n children: runs,\n });\n}\n\nfunction convertRun(json: RunJson): Run {\n const { fill, underline, strike, capitalization, fontSize, ...rest } = json as any;\n return new Run({\n ...rest,\n fontSize: fontSize != null ? Math.round(fontSize / 100) : undefined,\n fill: convertFill(fill),\n underline: mapUnderline(underline),\n strike: mapStrike(strike),\n capitalization: mapCapitalization(capitalization),\n });\n}\n\n// ── Helpers ──\n\nconst BORDER_KEY_MAP: Record<string, string> = {\n lnT: \"top\",\n lnB: \"bottom\",\n lnL: \"left\",\n lnR: \"right\",\n lnH: \"insideHorizontal\",\n lnV: \"insideVertical\",\n};\n\nfunction convertCellBorders(borders: Record<string, unknown> | undefined): any {\n if (!borders) return undefined;\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(borders)) {\n const mappedKey = BORDER_KEY_MAP[key] ?? key;\n result[mappedKey] = value;\n }\n return Object.keys(result).length > 0 ? result : undefined;\n}\n\nfunction convertFill(fill: FillOptions | undefined): any {\n if (!fill || typeof fill === \"string\") return fill;\n return fill;\n}\n\nfunction convertOutline(outline: ParsedOutlineOptions | undefined): any {\n if (!outline) return undefined;\n const result: Record<string, unknown> = {};\n if (outline.width != null) result.width = outline.width;\n if (outline.color != null) result.color = outline.color;\n if (outline.dashStyle != null) result.dashStyle = mapDash(outline.dashStyle);\n if (outline.cap != null) result.cap = outline.cap;\n if (outline.compound != null) result.compound = outline.compound;\n if (outline.headEnd) result.headEnd = outline.headEnd;\n if (outline.tailEnd) result.tailEnd = outline.tailEnd;\n if (outline.join != null) result.join = outline.join;\n return Object.keys(result).length > 0 ? result : undefined;\n}\n\nfunction base64ToUint8Array(base64: string): Uint8Array {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n\nconst UNDERLINE_MAP: Record<string, string> = {\n sng: \"SINGLE\",\n dbl: \"DOUBLE\",\n heavy: \"HEAVY\",\n dotted: \"DOTTED\",\n dash: \"DASH\",\n dashDot: \"DASH_DOT\",\n dashDotDot: \"DASH_DOT_DOT\",\n sysDash: \"SYS_DASH\",\n sysDotDash: \"SYS_DOT_DASH\",\n};\n\nconst STRIKE_MAP: Record<string, string> = {\n noStrike: \"NONE\",\n sngStrike: \"SINGLE\",\n dblStrike: \"DOUBLE\",\n heavyStrike: \"DOUBLE\",\n};\n\nconst CAPITALIZATION_MAP: Record<string, keyof typeof TextCapitalization> = {\n none: \"NONE\",\n small: \"SMALL\",\n all: \"ALL\",\n};\n\nconst DASH_MAP: Record<string, string> = {\n solid: \"SOLID\",\n dash: \"DASH\",\n dashDot: \"DASH_DOT\",\n dashDotDot: \"LG_DASH_DOT\",\n dot: \"DOT\",\n lgDash: \"LARGE_DASH\",\n sysDash: \"SYS_DASH\",\n sysDotDash: \"SYS_DOT_DASH\",\n};\n\nfunction mapUnderline(value: string | undefined): any {\n if (!value) return undefined;\n return UNDERLINE_MAP[value] ?? value;\n}\n\nfunction mapStrike(value: string | undefined): any {\n if (!value) return undefined;\n return STRIKE_MAP[value] ?? value;\n}\n\nfunction mapCapitalization(value: string | undefined): any {\n if (!value) return undefined;\n return CAPITALIZATION_MAP[value] ?? value;\n}\n\nfunction mapDash(value: string | undefined): string | undefined {\n if (!value) return undefined;\n return DASH_MAP[value] ?? value;\n}\n","export { File as Presentation } from \"./file\";\nexport * from \"./file\";\nexport * from \"./export\";\nexport * from \"./util\";\nexport * from \"./parse/document\";\nexport * from \"./parse/convert\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["convertPixelsToEmu","createScene3D","createShape3D","createEffectList","createOutline","Xc","convertPixelsToEmu","convertPixelsToEmu","convertPixelsToEmu","Xc","convertPixelsToEmu","MEDIA_EXT_URI","convertPixelsToEmu","convertPixelsToEmu","convertPixelsToEmu","GraphicFrameNonVisual","GraphicFrameNonVisual","convertPixelsToEmu","GraphicFrameNonVisual","convertPixelsToEmu","convertPixelsToEmu"],"sources":["../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/end-paragraph-run.ts","../src/file/shape/paragraph/paragraph-properties.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/slide-layout/slide-layout.ts","../src/file/slide-master/slide-master.ts","../src/file/animation/timing.ts","../src/file/drawingml/effects.ts","../src/file/drawingml/outline.ts","../src/file/drawingml/transform-2d.ts","../src/file/drawingml/shape-properties.ts","../src/file/shape/shape.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/field.ts","../src/file/drawingml/blip-fill.ts","../src/file/drawingml/non-visual-drawing-props.ts","../src/file/drawingml/non-visual-shape-props.ts","../src/file/drawingml/non-visual-picture-props.ts","../src/file/shape/group-shape.ts","../src/file/shape/line-shape.ts","../src/file/media/video-frame.ts","../src/file/media/audio-frame.ts","../src/file/shape-tree/shape-tree.ts","../src/file/notes-master/notes-master.ts","../src/file/header-footer/header-footer.ts","../src/file/picture/picture-non-visual.ts","../src/file/picture/picture.ts","../src/file/background/background.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/chart/chart-frame.ts","../src/file/smartart/smartart-frame.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.ts","../src/index.ts"],"sourcesContent":["/**\n * Content Types module for PPTX packages.\n *\n * @module\n */\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\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_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: \"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_SLIDE_MASTER, key: \"/ppt/slideMasters/slideMaster1.xml\" },\n { type: \"Override\", contentType: PPTX_SLIDE_LAYOUT, key: \"/ppt/slideLayouts/slideLayout1.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\nconst STATIC_CHILDREN: IXmlableObject[] = [\n { _attr: { xmlns: \"http://schemas.openxmlformats.org/package/2006/content-types\" } },\n ...STATIC_ENTRIES.map((e) => {\n if (e.type === \"Default\") {\n return { Default: { _attr: { ContentType: e.contentType, Extension: e.key } } };\n }\n return { Override: { _attr: { ContentType: e.contentType, PartName: e.key } } };\n }),\n];\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 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:\n \"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:\n \"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 override prepForXml(_context: IContext): IXmlableObject {\n const children = [...STATIC_CHILDREN];\n for (const e of this.dynamicEntries) {\n if (e.type === \"Default\") {\n children.push({\n Default: { _attr: { ContentType: e.contentType, Extension: e.key } },\n });\n } else {\n children.push({\n Override: { _attr: { ContentType: e.contentType, PartName: e.key } },\n });\n }\n }\n return { Types: children };\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 { IContext, IXmlableObject } from \"@file/xml-components\";\nimport { buildCorePropertiesXml } from \"@office-open/core\";\n\nexport interface ICorePropertiesOptions {\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: ICorePropertiesOptions;\n\n public constructor(options: ICorePropertiesOptions) {\n super(\"cp:coreProperties\");\n this.options = options;\n }\n\n public override prepForXml(_context: IContext): IXmlableObject {\n return buildCorePropertiesXml(this.options);\n }\n}\n","export interface IHyperlinkData {\n readonly key: string;\n readonly url: string;\n readonly tooltip?: string;\n}\n\nexport class HyperlinkCollection {\n private readonly map = new Map<string, IHyperlinkData>();\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 IHyperlinkData[] {\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 { IMediaDataTransformation } from \"./data\";\nimport type { IMediaData } from \"./data\";\n\nexport interface IMediaTransformation {\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: IMediaTransformation): IMediaDataTransformation => ({\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 { IContext, IXmlableObject } 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 prepForXml(context: IContext): IXmlableObject | undefined {\n return this.core[\"prepForXml\"]?.(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 { BuilderElement } from \"@file/xml-components\";\nimport type { IXmlableObject } from \"@file/xml-components\";\nimport { attrs } from \"@office-open/xml\";\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\nexport function buildEndParagraphRunPropertiesXml(lang: string = \"en-US\"): string {\n return `<a:endParaRPr${attrs({ lang })}/>`;\n}\n\n/**\n * a:endParaRPr — End paragraph run properties.\n * Lazy: stores lang, builds XML object in prepForXml.\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 prepForXml(\n _context: import(\"@file/xml-components\").IContext,\n ): IXmlableObject | undefined {\n return buildEndParagraphRunProperties(this.lang);\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport type { IXmlableObject } from \"@file/xml-components\";\nimport { attrs } from \"@office-open/xml\";\n\nexport const TextAlignment = {\n LEFT: \"l\",\n CENTER: \"ctr\",\n RIGHT: \"r\",\n JUSTIFY: \"just\",\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 IParagraphPropertiesOptions {\n readonly alignment?: keyof typeof TextAlignment;\n readonly indentLevel?: number;\n readonly marginBottom?: number;\n readonly marginTop?: number;\n readonly bullet?: BulletOptions;\n /** @deprecated Use bullet: { type: \"none\" } instead */\n readonly bulletNone?: boolean;\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: IParagraphPropertiesOptions,\n): IXmlableObject | undefined {\n const children: IXmlableObject[] = [];\n\n const attrs: Record<string, string | number> = {};\n if (options.alignment) attrs.algn = TextAlignment[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 } else if (options.bulletNone !== false) {\n children.push({ \"a:buNone\": {} });\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 object in prepForXml.\n * Omitted from output when completely empty.\n */\nexport class ParagraphProperties extends XmlComponent {\n private readonly options: IParagraphPropertiesOptions;\n\n public constructor(options: IParagraphPropertiesOptions = {}) {\n super(\"a:pPr\");\n this.options = options;\n }\n\n public prepForXml(\n _context: import(\"@file/xml-components\").IContext,\n ): IXmlableObject | undefined {\n return buildParagraphProperties(this.options);\n }\n\n public toXml(): string {\n return buildParagraphPropertiesXml(this.options);\n }\n}\n\nfunction buildBulletChildrenXml(options: BulletOptions): string {\n if (options.type === \"none\") {\n return \"<a:buNone/>\";\n }\n\n let s = \"\";\n if (options.color) {\n s += `<a:buClr><a:srgbClr${attrs({ val: options.color.replace(\"#\", \"\") })}/></a:buClr>`;\n }\n if (options.size !== undefined) {\n s += `<a:buSzPct${attrs({ val: `${options.size}%` })}/>`;\n }\n s += `<a:buFont${attrs({ typeface: \"Arial\", panose: \"020B0604020202020204\", pitchFamily: \"34\", charset: \"0\" })}/>`;\n if (options.type === \"char\") {\n s += `<a:buChar${attrs({ char: options.char ?? \"•\" })}/>`;\n } else if (options.type === \"autoNum\") {\n const buAttrs: Record<string, string | number | undefined> = {\n type: options.format ?? \"arabicPeriod\",\n };\n if (options.startAt !== undefined) buAttrs.startAt = options.startAt;\n s += `<a:buAutoNum${attrs(buAttrs)}/>`;\n }\n return s;\n}\n\nexport function buildParagraphPropertiesXml(options: IParagraphPropertiesOptions): string {\n const attrStr = attrs({\n algn: options.alignment ? TextAlignment[options.alignment] : undefined,\n lvl: options.indentLevel,\n marL: options.marginIndent,\n marR: options.marginRight,\n defTabSz: options.defTabSize,\n });\n\n const body: string[] = [];\n\n if (options.lineSpacing !== undefined) {\n body.push(`<a:lnSpc><a:spcPct${attrs({ val: options.lineSpacing * 1000 })}/></a:lnSpc>`);\n }\n\n if (options.lineSpacingPoints !== undefined) {\n body.push(\n `<a:lnSpc><a:spcPts${attrs({ val: options.lineSpacingPoints * 100 })}/></a:lnSpc>`,\n );\n }\n\n if (options.marginBottom !== undefined || options.marginTop !== undefined) {\n body.push(`<a:spcAft><a:spcPts${attrs({ val: options.marginBottom ?? 0 })}/></a:spcAft>`);\n }\n\n if (options.marginTop !== undefined) {\n body.push(`<a:spcBef><a:spcPts${attrs({ val: options.marginTop })}/></a:spcBef>`);\n }\n\n if (options.bullet) {\n body.push(buildBulletChildrenXml(options.bullet));\n } else if (options.bulletNone !== false) {\n body.push(\"<a:buNone/>\");\n }\n\n if (!attrStr && body.length === 0) return \"\";\n if (body.length === 0) return `<a:pPr${attrStr}/>`;\n return `<a:pPr${attrStr}>${body.join(\"\")}</a:pPr>`;\n}\n","import type { FillOptions } from \"@file/drawingml/fill\";\nimport { buildFill } from \"@file/drawingml/fill\";\nimport { XmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\nimport { attrs, xml } from \"@office-open/xml\";\n\nlet nextHyperlinkId = 1;\n\nexport const UnderlineStyle = {\n SINGLE: \"sng\",\n DOUBLE: \"dbl\",\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 IHyperlinkOptions {\n readonly url: string;\n readonly tooltip?: string;\n}\n\nexport interface IRunPropertiesOptions {\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?: keyof typeof UnderlineStyle;\n readonly font?: string;\n readonly lang?: string;\n readonly fill?: FillOptions;\n readonly hyperlink?: IHyperlinkOptions;\n readonly strike?: keyof typeof StrikeStyle;\n readonly baseline?: number;\n readonly spacing?: number;\n readonly capitalization?: 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 * Pure function: builds a:rPr XML object from options.\n * @param hyperlinkKey - pre-generated key for hyperlink placeholder\n * @param fillObject - pre-built fill IXmlableObject (from buildFill)\n */\nexport function buildRunProperties(\n options: IRunPropertiesOptions,\n hyperlinkKey?: string,\n fillObject?: IXmlableObject,\n): IXmlableObject | undefined {\n const children: IXmlableObject[] = [];\n\n const attrs: Record<string, string | number | boolean> = {};\n if (options.fontSize) attrs.sz = options.fontSize * 100;\n if (options.bold !== undefined) attrs.b = options.bold;\n if (options.italic !== undefined) attrs.i = options.italic;\n if (options.underline) attrs.u = UnderlineStyle[options.underline];\n if (options.lang) attrs.lang = options.lang;\n if (options.strike) attrs.strike = StrikeStyle[options.strike];\n if (options.baseline !== undefined) attrs.baseline = options.baseline;\n if (options.capitalization)\n attrs.cap = TextCapitalization[options.capitalization] ?? options.capitalization;\n if (options.spacing !== undefined) attrs.spc = options.spacing;\n if (options.noProof !== undefined) attrs.noProof = options.noProof;\n if (options.dirty !== undefined) attrs.dirty = options.dirty;\n if (Object.keys(attrs).length > 0) children.push({ _attr: attrs });\n\n if (options.font) {\n children.push({ \"a:latin\": { _attr: { typeface: options.font } } });\n children.push({ \"a:ea\": { _attr: { typeface: options.font } } });\n }\n\n if (options.hyperlink && hyperlinkKey) {\n const hlinkAttrs: Record<string, string> = { \"r:id\": `{hlink:${hyperlinkKey}}` };\n if (options.hyperlink.tooltip) hlinkAttrs.tooltip = options.hyperlink.tooltip;\n children.push({ \"a:hlinkClick\": { _attr: hlinkAttrs } });\n }\n\n if (options.rightToLeft !== undefined) {\n children.push({ \"a:rtl\": { _attr: { val: options.rightToLeft ? 1 : 0 } } });\n }\n\n if (fillObject) {\n children.push(fillObject);\n }\n\n if (children.length === 0) return undefined;\n\n return {\n \"a:rPr\": children.length === 1 && \"_attr\" in children[0] ? children[0] : children,\n };\n}\n\n/**\n * a:rPr — Run properties (font, size, color, etc.).\n * Lazy: stores options, builds XML object in prepForXml.\n */\nexport class RunProperties extends XmlComponent {\n private readonly options: IRunPropertiesOptions;\n\n public static hasProperties(options: IRunPropertiesOptions): 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 public constructor(options: IRunPropertiesOptions = {}) {\n super(\"a:rPr\");\n this.options = options;\n }\n\n public prepForXml(context: IContext): IXmlableObject | undefined {\n const opts = this.options;\n\n // Register hyperlinks (B-level: side effect on context)\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(\n hyperlinkKey,\n opts.hyperlink.url,\n opts.hyperlink.tooltip,\n );\n }\n\n // Handle fill (needs context for prepForXml)\n let fillObj: IXmlableObject | undefined;\n if (opts.fill !== undefined) {\n fillObj = buildFill(opts.fill).prepForXml(context) ?? undefined;\n }\n\n return buildRunProperties(opts, hyperlinkKey, fillObj);\n }\n\n public toXml(context: IContext): string {\n const opts = this.options;\n\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(\n hyperlinkKey,\n opts.hyperlink.url,\n opts.hyperlink.tooltip,\n );\n }\n\n let fillObj: IXmlableObject | undefined;\n if (opts.fill !== undefined) {\n fillObj = buildFill(opts.fill).prepForXml(context) ?? undefined;\n }\n\n return buildRunPropertiesXml(opts, hyperlinkKey, fillObj);\n }\n}\n\n/**\n * String version of buildRunProperties for zero-allocation serialization.\n */\nexport function buildRunPropertiesXml(\n options: IRunPropertiesOptions,\n hyperlinkKey?: string,\n fillObject?: IXmlableObject,\n): string {\n const a: Record<string, string | number | boolean | undefined> = {};\n if (options.fontSize) a.sz = options.fontSize * 100;\n if (options.bold !== undefined) a.b = options.bold;\n if (options.italic !== undefined) a.i = options.italic;\n if (options.underline) a.u = UnderlineStyle[options.underline];\n if (options.lang) a.lang = options.lang;\n if (options.strike) a.strike = StrikeStyle[options.strike];\n if (options.baseline !== undefined) a.baseline = options.baseline;\n if (options.capitalization)\n a.cap = TextCapitalization[options.capitalization] ?? options.capitalization;\n if (options.spacing !== undefined) a.spc = options.spacing;\n if (options.noProof !== undefined) a.noProof = options.noProof;\n if (options.dirty !== undefined) a.dirty = options.dirty;\n\n const attrStr = attrs(a);\n const body: string[] = [];\n\n if (options.font) {\n body.push(\n `<a:latin${attrs({ typeface: options.font })}/><a:ea${attrs({ typeface: options.font })}/>`,\n );\n }\n\n if (options.hyperlink && hyperlinkKey) {\n const h: Record<string, string | undefined> = { \"r:id\": `{hlink:${hyperlinkKey}}` };\n if (options.hyperlink.tooltip) h.tooltip = options.hyperlink.tooltip;\n body.push(`<a:hlinkClick${attrs(h)}/>`);\n }\n\n if (options.rightToLeft !== undefined) {\n body.push(`<a:rtl${attrs({ val: options.rightToLeft ? 1 : 0 })}/>`);\n }\n\n if (fillObject) {\n body.push(xml(fillObject));\n }\n\n if (!attrStr && body.length === 0) return \"\";\n if (body.length === 0) return `<a:rPr${attrStr}/>`;\n return `<a:rPr${attrStr}>${body.join(\"\")}</a:rPr>`;\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\nimport { escapeXml } from \"@office-open/xml\";\n\nimport type { IRunPropertiesOptions } from \"./run-properties\";\nimport { RunProperties } from \"./run-properties\";\n\nexport interface IRunOptions extends IRunPropertiesOptions {\n readonly text?: string;\n}\n\n/**\n * a:r — A run of text with properties.\n * Lazy: stores options, builds XML object in prepForXml.\n */\nexport class TextRun extends XmlComponent {\n private readonly options: IRunOptions;\n\n public constructor(options: IRunOptions | string = {}) {\n super(\"a:r\");\n this.options = typeof options === \"string\" ? { text: options } : options;\n }\n\n public prepForXml(context: IContext): IXmlableObject | undefined {\n const children: IXmlableObject[] = [];\n\n if (RunProperties.hasProperties(this.options)) {\n const rPr = new RunProperties(this.options);\n const rPrObj = rPr.prepForXml(context);\n if (rPrObj) children.push(rPrObj);\n }\n\n if (this.options.text) {\n children.push({ \"a:t\": [this.options.text] });\n }\n\n return {\n \"a:r\":\n children.length === 0\n ? {}\n : children.length === 1 && \"_attr\" in children[0]\n ? children[0]\n : children,\n };\n }\n\n public toXml(context: IContext): string {\n let s = \"<a:r>\";\n\n if (RunProperties.hasProperties(this.options)) {\n const rp = new RunProperties(this.options);\n s += rp.toXml(context);\n }\n\n if (this.options.text) {\n s += `<a:t>${escapeXml(this.options.text)}</a:t>`;\n }\n\n s += \"</a:r>\";\n return s;\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\n\nimport { buildEndParagraphRunProperties } from \"./end-paragraph-run\";\nimport { buildEndParagraphRunPropertiesXml } from \"./end-paragraph-run\";\nimport type { IParagraphPropertiesOptions } from \"./paragraph-properties\";\nimport { buildParagraphProperties } from \"./paragraph-properties\";\nimport { buildParagraphPropertiesXml } from \"./paragraph-properties\";\nimport { TextRun } from \"./run\";\n\nexport interface IParagraphOptions {\n /** Simple text content for the paragraph. Creates a single TextRun. */\n readonly text?: string;\n readonly properties?: IParagraphPropertiesOptions;\n readonly children?: readonly (TextRun | XmlComponent)[];\n}\n\n/**\n * a:p — A paragraph in a text body.\n * Lazy: stores options, builds XML object in prepForXml.\n */\nexport class Paragraph extends XmlComponent {\n private readonly options: IParagraphOptions;\n\n public constructor(options: string | IParagraphOptions = {}) {\n super(\"a:p\");\n this.options = typeof options === \"string\" ? { text: options } : options;\n }\n\n public prepForXml(context: IContext): IXmlableObject | undefined {\n const children: IXmlableObject[] = [];\n\n const pPr = buildParagraphProperties(this.options.properties ?? {});\n if (pPr) children.push(pPr);\n\n if (this.options.text) {\n const obj = new TextRun(this.options.text).prepForXml(context);\n if (obj) children.push(obj);\n }\n\n if (this.options.children) {\n for (const child of this.options.children) {\n const obj = child.prepForXml(context);\n if (obj) children.push(obj);\n }\n }\n\n children.push(buildEndParagraphRunProperties());\n\n return { \"a:p\": children };\n }\n\n public toXml(context: IContext): string {\n let s = \"<a:p>\";\n\n const pPr = buildParagraphPropertiesXml(this.options.properties ?? {});\n if (pPr) s += pPr;\n\n if (this.options.text) {\n s += new TextRun(this.options.text).toXml(context);\n }\n\n if (this.options.children) {\n for (const child of this.options.children) {\n s += child.toXml(context);\n }\n }\n\n s += buildEndParagraphRunPropertiesXml();\n s += \"</a:p>\";\n return s;\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\n\nimport { buildFill } from \"../drawingml/fill\";\nimport type { FillOptions } from \"../drawingml/fill\";\n\nexport interface ICellBorderOptions {\n readonly width?: number;\n readonly color?: string;\n readonly dashStyle?: \"solid\" | \"dash\" | \"dashDot\" | \"lgDash\" | \"sysDot\" | \"sysDash\";\n}\n\nfunction buildBorderLine(name: string, options: ICellBorderOptions): IXmlableObject {\n const attrs: Record<string, string | number> = {};\n const children: IXmlableObject[] = [];\n\n if (options.width !== undefined) attrs.w = options.width;\n if (options.color) {\n children.push({\n \"a:solidFill\": [{ \"a:srgbClr\": { _attr: { val: options.color.replace(\"#\", \"\") } } }],\n });\n }\n if (options.dashStyle) {\n children.push({ \"a:prstDash\": { _attr: { val: options.dashStyle } } });\n }\n\n return { [name]: Object.keys(attrs).length > 0 ? [{ _attr: attrs }, ...children] : children };\n}\n\n/**\n * a:tcPr — Table cell properties (borders + fill).\n * Lazy: stores options, builds IXmlableObject in prepForXml.\n */\nexport class TableCellProperties extends BaseXmlComponent {\n private readonly options?: {\n readonly fill?: FillOptions;\n readonly borders?: {\n readonly top?: ICellBorderOptions;\n readonly bottom?: ICellBorderOptions;\n readonly left?: ICellBorderOptions;\n readonly right?: ICellBorderOptions;\n };\n readonly verticalAlign?: \"t\" | \"ctr\" | \"b\";\n };\n\n public constructor(options?: {\n readonly fill?: FillOptions;\n readonly borders?: {\n readonly top?: ICellBorderOptions;\n readonly bottom?: ICellBorderOptions;\n readonly left?: ICellBorderOptions;\n readonly right?: ICellBorderOptions;\n };\n readonly verticalAlign?: \"t\" | \"ctr\" | \"b\";\n }) {\n super(\"a:tcPr\");\n this.options = options;\n }\n\n public override prepForXml(context: IContext): IXmlableObject {\n const children: IXmlableObject[] = [];\n const opts = this.options;\n\n if (opts?.verticalAlign) {\n children.push({ _attr: { anchor: opts.verticalAlign } });\n }\n\n if (opts?.borders) {\n if (opts.borders.left) children.push(buildBorderLine(\"a:lnL\", opts.borders.left));\n if (opts.borders.right) children.push(buildBorderLine(\"a:lnR\", opts.borders.right));\n if (opts.borders.top) children.push(buildBorderLine(\"a:lnT\", opts.borders.top));\n if (opts.borders.bottom) children.push(buildBorderLine(\"a:lnB\", opts.borders.bottom));\n }\n\n if (opts?.fill !== undefined) {\n const fillComp = buildFill(opts.fill);\n const fillObj = fillComp.prepForXml(context);\n if (fillObj) children.push(fillObj);\n }\n\n return {\n \"a:tcPr\":\n children.length === 0\n ? {}\n : children.length === 1 && \"_attr\" in children[0]\n ? children[0]\n : children,\n };\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\n\nimport type { FillOptions } from \"../drawingml/fill\";\nimport { Paragraph } from \"../shape/paragraph/paragraph\";\nimport { TextRun } from \"../shape/paragraph/run\";\nimport { TableCellProperties, type ICellBorderOptions } from \"./table-cell-properties\";\n\nexport const VerticalAlignment = {\n TOP: \"t\",\n CENTER: \"ctr\",\n BOTTOM: \"b\",\n} as const;\n\nexport interface ITableCellOptions {\n readonly text?: string;\n readonly children?: readonly BaseXmlComponent[];\n readonly fill?: FillOptions;\n readonly borders?: {\n readonly top?: ICellBorderOptions;\n readonly bottom?: ICellBorderOptions;\n readonly left?: ICellBorderOptions;\n readonly right?: ICellBorderOptions;\n };\n readonly columnSpan?: number;\n readonly rowSpan?: number;\n readonly verticalAlign?: 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 IXmlableObject in prepForXml.\n */\nexport class TableCell extends BaseXmlComponent {\n private readonly options: ITableCellOptions;\n private readonly paragraphs?: readonly BaseXmlComponent[];\n\n public constructor(options: ITableCellOptions = {}) {\n super(\"a:tc\");\n this.options = options;\n this.paragraphs =\n options.children ??\n (options.text !== undefined\n ? [\n new Paragraph({\n properties: { bulletNone: false },\n children: [new TextRun({ text: options.text })],\n }),\n ]\n : undefined);\n }\n\n public override prepForXml(context: IContext): IXmlableObject {\n const opts = this.options;\n const children: IXmlableObject[] = [];\n\n // gridSpan and rowSpan attributes\n const tcAttrs: Record<string, number> = {};\n if (opts.columnSpan !== undefined && opts.columnSpan > 1)\n tcAttrs.gridSpan = opts.columnSpan;\n if (opts.rowSpan !== undefined && opts.rowSpan > 1) tcAttrs.rowSpan = opts.rowSpan;\n if (Object.keys(tcAttrs).length > 0) children.push({ _attr: tcAttrs });\n\n // a:txBody\n const txBodyChildren: IXmlableObject[] = [];\n const margins = opts.margins;\n const bodyPrAttrs: Record<string, number> = {};\n if (margins?.top !== undefined) bodyPrAttrs.tIns = margins.top;\n if (margins?.bottom !== undefined) bodyPrAttrs.bIns = margins.bottom;\n if (margins?.left !== undefined) bodyPrAttrs.lIns = margins.left;\n if (margins?.right !== undefined) bodyPrAttrs.rIns = margins.right;\n txBodyChildren.push({\n \"a:bodyPr\": Object.keys(bodyPrAttrs).length > 0 ? { _attr: bodyPrAttrs } : {},\n });\n txBodyChildren.push({ \"a:lstStyle\": {} });\n\n if (this.paragraphs) {\n for (const p of this.paragraphs) {\n const pObj = p.prepForXml(context);\n if (pObj) txBodyChildren.push(pObj);\n }\n } else {\n txBodyChildren.push({ \"a:p\": [] });\n }\n children.push({ \"a:txBody\": txBodyChildren });\n\n // a:tcPr\n const tcPr = new TableCellProperties({\n fill: opts.fill,\n borders: opts.borders,\n verticalAlign: opts.verticalAlign ? VerticalAlignment[opts.verticalAlign] : undefined,\n });\n const tcPrObj = tcPr.prepForXml(context);\n if (tcPrObj) children.push(tcPrObj);\n\n return { \"a:tc\": children };\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\nimport { attrs } from \"@office-open/xml\";\n\nimport { VerticalAlignment } from \"../table/table-cell\";\nimport { Paragraph } from \"./paragraph/paragraph\";\nimport { TextRun } from \"./paragraph/run\";\n\nexport interface ITextBodyOptions {\n readonly paragraphs?: readonly (Paragraph | string)[];\n readonly vertical?: \"vert\" | \"vert270\" | \"horz\" | \"wordArtVert\";\n readonly anchor?: 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: ITextBodyOptions): 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 = VerticalAlignment[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\nfunction buildBodyPrXml(options: ITextBodyOptions): string {\n let s = \"<a:bodyPr\";\n\n const a: Record<string, string | number | undefined> = {};\n if (options.vertical) a.vert = options.vertical;\n if (options.anchor) a.anchor = VerticalAlignment[options.anchor];\n if (options.wrap) a.wrap = options.wrap;\n if (options.margins?.top !== undefined) a.tIns = options.margins.top;\n if (options.margins?.bottom !== undefined) a.bIns = options.margins.bottom;\n if (options.margins?.left !== undefined) a.lIns = options.margins.left;\n if (options.margins?.right !== undefined) a.rIns = options.margins.right;\n if (options.columns !== undefined) a.numCol = options.columns;\n if (options.columnSpacing !== undefined) a.spcCol = options.columnSpacing * 100;\n s += attrs(a);\n\n let inner = \"\";\n if (options.autoFit === \"normal\") inner += \"<a:normAutofit/>\";\n else if (options.autoFit === \"shape\") inner += \"<a:spAutoFit/>\";\n else if (options.autoFit === \"none\") inner += \"<a:noAutofit/>\";\n\n return inner ? `${s}>${inner}</a:bodyPr>` : `${s}/>`;\n}\n\n/**\n * p:txBody — Text body within a shape.\n * Lazy: stores options, builds XML object in prepForXml.\n */\nexport class TextBody extends XmlComponent {\n private readonly options: ITextBodyOptions;\n\n public constructor(options: ITextBodyOptions = {}) {\n super(\"p:txBody\");\n this.options = options;\n }\n\n public prepForXml(context: IContext): IXmlableObject | undefined {\n const children: IXmlableObject[] = [];\n\n children.push(buildBodyPr(this.options));\n children.push({ \"a:lstStyle\": {} });\n\n if (this.options.paragraphs) {\n for (const p of this.options.paragraphs) {\n const para =\n typeof p === \"string\"\n ? new Paragraph({ children: [new TextRun({ text: p })] })\n : p;\n const obj = para.prepForXml(context);\n if (obj) children.push(obj);\n }\n } else {\n const obj = new Paragraph().prepForXml(context);\n if (obj) children.push(obj);\n }\n\n return { \"p:txBody\": children };\n }\n\n public toXml(context: IContext): string {\n let s = \"<p:txBody>\";\n s += buildBodyPrXml(this.options);\n s += \"<a:lstStyle/>\";\n\n if (this.options.paragraphs) {\n for (const p of this.options.paragraphs) {\n const para =\n typeof p === \"string\"\n ? new Paragraph({ children: [new TextRun({ text: p })] })\n : p;\n s += para.toXml(context);\n }\n } else {\n s += new Paragraph().toXml(context);\n }\n\n s += \"</p:txBody>\";\n return s;\n }\n}\n","import { GroupShapeProperties } from \"@file/drawingml/group-shape-properties\";\nimport { GroupShapeNonVisualProperties } from \"@file/shape-tree/group-shape-non-visual\";\nimport { BuilderElement, NextAttributeComponent, 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 INotesSlideOptions {\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: INotesSlideOptions = {}) {\n super(\"p:notes\");\n\n this.root.push(\n new NextAttributeComponent({\n \"xmlns:a\": {\n key: \"xmlns:a\",\n value: \"http://schemas.openxmlformats.org/drawingml/2006/main\",\n },\n \"xmlns:r\": {\n key: \"xmlns:r\",\n value: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\n },\n \"xmlns:p\": {\n key: \"xmlns:p\",\n value: \"http://schemas.openxmlformats.org/presentationml/2006/main\",\n },\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 ? { paragraphs: [new Paragraph({ children: [new TextRun({ text })] })] }\n : undefined;\n this.root.push(new TextBody(textBodyOptions));\n }\n}\n","import { ImportedXmlComponent } from \"@file/xml-components\";\n\nexport interface IShowOptions {\n readonly loop?: boolean;\n readonly kiosk?: boolean;\n readonly showNarration?: boolean;\n readonly useTimings?: boolean;\n}\n\nfunction buildPresPropsXml(showOptions?: IShowOptions): string {\n const showPrXml = showOptions\n ? `<p:showPr${[\n showOptions.loop ? ' loop=\"1\"' : \"\",\n showOptions.kiosk ? ' kiosk=\"1\"' : \"\",\n showOptions.showNarration === false ? ' showNarration=\"0\"' : \"\",\n showOptions.useTimings ? ' useTimings=\"1\"' : \"\",\n ].join(\"\")}><p:present/></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\n public constructor(showOptions?: IShowOptions) {\n super(\"p:presentationPr\");\n const key = showOptions ? JSON.stringify(showOptions) : \"\";\n if (!PresentationProperties.cache.has(key)) {\n PresentationProperties.cache.set(\n key,\n ImportedXmlComponent.fromXmlString(buildPresPropsXml(showOptions)),\n );\n }\n }\n\n public prepForXml() {\n const key = this.showOptions ? JSON.stringify(this.showOptions) : \"\";\n return PresentationProperties.cache.get(key)!.prepForXml({ stack: [] });\n }\n\n private readonly showOptions?: IShowOptions;\n}\n","import { XmlComponent } from \"@file/xml-components\";\nimport { ImportedXmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\n\nexport interface IPresentationOptions {\n readonly slideWidth?: number;\n readonly slideHeight?: number;\n readonly slideIds: readonly 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\nconst DEFAULT_TEXT_STYLE_OBJ: IXmlableObject = ImportedXmlComponent.fromXmlString(\n DEFAULT_TEXT_STYLE_XML,\n).prepForXml({ stack: [] })!;\n\n/**\n * p:presentation — Root element of a PPTX file.\n * Lazy: stores options, builds XML object directly in prepForXml.\n */\nexport class Presentation extends XmlComponent {\n private readonly options: IPresentationOptions;\n\n public constructor(options: IPresentationOptions) {\n super(\"p:presentation\");\n this.options = options;\n }\n\n public prepForXml(_context: IContext): IXmlableObject | undefined {\n const opts = this.options;\n\n const children: IXmlableObject[] = [];\n\n // xmlns attributes\n children.push({\n _attr: {\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 // sldMasterIdLst\n children.push({\n \"p:sldMasterIdLst\": [\n {\n \"p:sldMasterId\": { _attr: { id: 2147483648, \"r:id\": \"rId1\" } },\n },\n ],\n });\n\n // sldIdLst (dynamic)\n const sldIds = opts.slideIds.map((id, i) => ({\n \"p:sldId\": { _attr: { id, \"r:id\": `rId${i + 2}` } },\n }));\n children.push({ \"p:sldIdLst\": sldIds });\n\n // sldSz\n const cx = opts.slideWidth ?? 9144000;\n const cy = opts.slideHeight ?? 6858000;\n children.push({\n \"p:sldSz\": {\n _attr: {\n cx,\n cy,\n ...(cx === 914400 && cy === 6858000 ? { type: \"screen4x3\" } : {}),\n },\n },\n });\n\n // notesSz\n children.push({\n \"p:notesSz\": { _attr: { cx: 6858000, cy: 9144000 } },\n });\n\n // defaultTextStyle (cached static singleton)\n children.push(DEFAULT_TEXT_STYLE_OBJ);\n\n return { \"p:presentation\": children };\n }\n\n public toXml(_context: IContext): string {\n const opts = this.options;\n\n const cx = opts.slideWidth ?? 9144000;\n const cy = opts.slideHeight ?? 6858000;\n const typeAttr = cx === 914400 && cy === 6858000 ? ' type=\"screen4x3\"' : \"\";\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><p:sldMasterId id=\"2147483648\" r:id=\"rId1\"/></p:sldMasterIdLst>';\n s += \"<p:sldIdLst>\";\n for (let i = 0; i < opts.slideIds.length; i++) {\n s += `<p:sldId id=\"${opts.slideIds[i]}\" r:id=\"rId${i + 2}\"/>`;\n }\n s += \"</p:sldIdLst>\";\n s += `<p:sldSz cx=\"${cx}\" cy=\"${cy}\"${typeAttr}/>`;\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 { IPresentationOptions } from \"./presentation\";\n\nexport interface IViewWrapper {\n readonly View: BaseXmlComponent;\n readonly Relationships: Relationships;\n}\n\nexport class PresentationWrapper implements IViewWrapper {\n private readonly presentation: Presentation;\n private readonly relationships: Relationships;\n\n public constructor(options: IPresentationOptions) {\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 public get Relationships(): Relationships {\n return this.relationships;\n }\n}\n","import { ImportedXmlComponent } from \"@file/xml-components\";\n\nconst SLIDE_LAYOUT_XML = `<p:sldLayout 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\" type=\"blank\" preserve=\"1\">\n <p:cSld>\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:sp>\n <p:nvSpPr><p:cNvPr id=\"2\" name=\"Slide Number Placeholder 1\"/><p:cNvSpPr><a:spLocks noGrp=\"1\" noRot=\"1\" noChangeAspect=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"sldNum\" idx=\"1\"/></p:nvPr></p:nvSpPr>\n <p:spPr>\n <a:xfrm anchor=\"t\"><a:off x=\"457200\" y=\"666750\"/><a:ext cx=\"914400\" cy=\"365760\"/></a:xfrm>\n <a:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld type=\"slidNum\"><a:ptv/><a:endParaRPr lang=\"en-US\"/></a:fld></a:p></a:txBody>\n <p:extLst><p:ext xmlns:p14=\"http://schemas.microsoft.com/office/powerpoint/2010/main\" p14:modId=\"{A8390B1C-6C38-4F8F-A66D-48FD5329C7A0}\"/></p:extLst>\n </p:spPr>\n </p:sp>\n <p:sp>\n <p:nvSpPr><p:cNvPr id=\"3\" name=\"Date Placeholder 2\"/><p:cNvSpPr><a:spLocks noGrp=\"1\" noRot=\"1\" noChangeAspect=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"dt\" idx=\"2\"/></p:nvPr></p:nvSpPr>\n <p:spPr>\n <a:xfrm anchor=\"t\"><a:off x=\"457200\" y=\"2743200\"/><a:ext cx=\"4572000\" cy=\"365760\"/></a:xfrm>\n <a:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld type=\"datetime\"><a:ptv/><a:endParaRPr lang=\"en-US\"/></a:fld></a:p></a:txBody>\n <p:extLst><p:ext xmlns:p14=\"http://schemas.microsoft.com/office/powerpoint/2010/main\" p14:modId=\"{A8390B1C-6C38-4F8F-A66D-48FD5329C7A0}\"/></p:extLst>\n </p:spPr>\n </p:sp>\n <p:sp>\n <p:nvSpPr><p:cNvPr id=\"4\" name=\"Footer Placeholder 3\"/><p:cNvSpPr><a:spLocks noGrp=\"1\" noRot=\"1\" noChangeAspect=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"ftr\" idx=\"3\"/></p:nvPr></p:nvSpPr>\n <p:spPr>\n <a:xfrm anchor=\"t\"><a:off x=\"457200\" y=\"6629400\"/><a:ext cx=\"6858000\" cy=\"365760\"/></a:xfrm>\n <a:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></a:txBody>\n <p:extLst><p:ext xmlns:p14=\"http://schemas.microsoft.com/office/powerpoint/2010/main\" p14:modId=\"{A8390B1C-6C38-4F8F-A66D-48FD5329C7A0}\"/></p:extLst>\n </p:spPr>\n </p:sp>\n </p:spTree>\n </p:cSld>\n <p:clrMapOvr>\n <a:masterClrMapping/>\n </p:clrMapOvr>\n</p:sldLayout>`;\n\nexport class DefaultSlideLayout extends ImportedXmlComponent {\n private static instance = ImportedXmlComponent.fromXmlString(SLIDE_LAYOUT_XML);\n\n public constructor() {\n super(\"p:sldLayout\");\n }\n\n public prepForXml() {\n return DefaultSlideLayout.instance.prepForXml({ stack: [] });\n }\n}\n","import type { IHeaderFooterOptions } from \"@file/header-footer/header-footer\";\nimport { ImportedXmlComponent } from \"@file/xml-components\";\n\nfunction buildSlideMasterXml(headerFooter?: IHeaderFooterOptions): string {\n const hfXml = headerFooter ? `<p:hf dt=\"0\" hdr=\"0\" ftr=\"0\" sldNum=\"0\"/>` : \"\";\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\">\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:sp><p:nvSpPr><p:cNvPr id=\"4\" name=\"Date Placeholder 3\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"dt\" sz=\"half\" idx=\"2\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"457200\" y=\"6356350\"/><a:ext cx=\"2133600\" cy=\"365125\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert=\"horz\" lIns=\"91440\" tIns=\"45720\" rIns=\"91440\" bIns=\"45720\" rtlCol=\"0\" anchor=\"ctr\"/><a:lstStyle><a:lvl1pPr algn=\"l\"><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><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><p:sp><p:nvSpPr><p:cNvPr id=\"5\" name=\"Footer Placeholder 4\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"ftr\" sz=\"quarter\" idx=\"3\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"3124200\" y=\"6356350\"/><a:ext cx=\"2895600\" cy=\"365125\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert=\"horz\" lIns=\"91440\" tIns=\"45720\" rIns=\"91440\" bIns=\"45720\" rtlCol=\"0\" anchor=\"ctr\"/><a:lstStyle><a:lvl1pPr algn=\"ctr\"><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><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id=\"6\" name=\"Slide Number Placeholder 5\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"sldNum\" sz=\"quarter\" idx=\"4\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"6553200\" y=\"6356350\"/><a:ext cx=\"2133600\" cy=\"365125\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert=\"horz\" lIns=\"91440\" tIns=\"45720\" rIns=\"91440\" bIns=\"45720\" rtlCol=\"0\" anchor=\"ctr\"/><a:lstStyle><a:lvl1pPr algn=\"r\"><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><a:fld id=\"{C1FF6DA9-008F-8B48-92A6-B652298478BF}\" type=\"slidenum\"><a:rPr lang=\"en-US\" smtClean=\"0\"/><a:t>&lt;#&gt;</a:t></a:fld><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>\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:sldLayoutIdLst>\n <p:sldLayoutId id=\"2147483649\" r:id=\"rId1\"/>\n </p:sldLayoutIdLst>${hfXml}\n <p:txStyles>\n <p:titleStyle>\n <a:lvl1pPr algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc>\n <a:spcBef><a:spcPct val=\"0\"/></a:spcBef>\n <a:buNone/>\n <a:defRPr sz=\"4400\" kern=\"1200\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mj-lt\"/><a:ea typeface=\"+mj-ea\"/><a:cs typeface=\"+mj-cs\"/>\n </a:defRPr>\n </a:lvl1pPr>\n </p:titleStyle>\n <p:bodyStyle>\n <a:lvl1pPr marL=\"228600\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc>\n <a:spcBef><a:spcPts val=\"1000\"/></a:spcBef>\n <a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/>\n <a:buChar char=\"•\"/>\n <a:defRPr sz=\"2800\" kern=\"1200\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </a:defRPr>\n </a:lvl1pPr>\n <a:lvl2pPr marL=\"685800\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc>\n <a:spcBef><a:spcPts val=\"500\"/></a:spcBef>\n <a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/>\n <a:buChar char=\"•\"/>\n <a:defRPr sz=\"2400\" kern=\"1200\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </a:defRPr>\n </a:lvl2pPr>\n <a:lvl3pPr marL=\"1143000\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc>\n <a:spcBef><a:spcPts val=\"500\"/></a:spcBef>\n <a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/>\n <a:buChar char=\"•\"/>\n <a:defRPr sz=\"2000\" kern=\"1200\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </a:defRPr>\n </a:lvl3pPr>\n <a:lvl4pPr marL=\"1600200\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc>\n <a:spcBef><a:spcPts val=\"500\"/></a:spcBef>\n <a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/>\n <a:buChar char=\"•\"/>\n <a:defRPr sz=\"1800\" kern=\"1200\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </a:defRPr>\n </a:lvl4pPr>\n <a:lvl5pPr marL=\"2057400\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc>\n <a:spcBef><a:spcPts val=\"500\"/></a:spcBef>\n <a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/>\n <a:buChar char=\"•\"/>\n <a:defRPr sz=\"1800\" kern=\"1200\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </a:defRPr>\n </a:lvl5pPr>\n <a:lvl6pPr marL=\"2514600\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc>\n <a:spcBef><a:spcPts val=\"500\"/></a:spcBef>\n <a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/>\n <a:buChar char=\"•\"/>\n <a:defRPr sz=\"1800\" kern=\"1200\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </a:defRPr>\n </a:lvl6pPr>\n <a:lvl7pPr marL=\"2971800\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc>\n <a:spcBef><a:spcPts val=\"500\"/></a:spcBef>\n <a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/>\n <a:buChar char=\"•\"/>\n <a:defRPr sz=\"1800\" kern=\"1200\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </a:defRPr>\n </a:lvl7pPr>\n <a:lvl8pPr marL=\"3429000\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc>\n <a:spcBef><a:spcPts val=\"500\"/></a:spcBef>\n <a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/>\n <a:buChar char=\"•\"/>\n <a:defRPr sz=\"1800\" kern=\"1200\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </a:defRPr>\n </a:lvl8pPr>\n <a:lvl9pPr marL=\"3886200\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:lnSpc><a:spcPct val=\"90000\"/></a:lnSpc>\n <a:spcBef><a:spcPts val=\"500\"/></a:spcBef>\n <a:buFont typeface=\"Arial\" panose=\"020B0604020202020204\" pitchFamily=\"34\" charset=\"0\"/>\n <a:buChar char=\"•\"/>\n <a:defRPr sz=\"1800\" kern=\"1200\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </a:defRPr>\n </a:lvl9pPr>\n </p:bodyStyle>\n <p:otherStyle>\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\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </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\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </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\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </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\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </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\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </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\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </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\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </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\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </a:defRPr>\n </a:lvl8pPr>\n <a:lvl9pPr marL=\"3657600\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\">\n <a:defRPr sz=\"1800\" kern=\"1200\">\n <a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>\n <a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>\n </a:defRPr>\n </a:lvl9pPr>\n </p:otherStyle>\n </p:txStyles>\n</p:sldMaster>`;\n}\n\nexport class DefaultSlideMaster extends ImportedXmlComponent {\n private static cache = new Map<string, ImportedXmlComponent>();\n private readonly headerFooter?: IHeaderFooterOptions;\n\n public constructor(headerFooter?: IHeaderFooterOptions) {\n super(\"p:sldMaster\");\n this.headerFooter = headerFooter;\n const key = headerFooter ? JSON.stringify(headerFooter) : \"\";\n if (!DefaultSlideMaster.cache.has(key)) {\n DefaultSlideMaster.cache.set(\n key,\n ImportedXmlComponent.fromXmlString(buildSlideMasterXml(headerFooter)),\n );\n }\n }\n\n public prepForXml() {\n const key = this.headerFooter ? JSON.stringify(this.headerFooter) : \"\";\n return DefaultSlideMaster.cache.get(key)!.prepForXml({ stack: [] });\n }\n}\n","import { BuilderElement, StringContainer, XmlComponent } from \"@file/xml-components\";\n\nimport type { IAnimationOptions, AnimationType } from \"./types\";\n\nconst 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 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\ninterface IAnimationEntry {\n readonly spid: number;\n readonly options: IAnimationOptions;\n}\n\n/**\n * p:timing — Slide timing for shape animations.\n */\nexport class SlideTiming extends XmlComponent {\n public constructor(entries: readonly IAnimationEntry[]) {\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 // Build animation nodes grouped by click (onClick triggers create new click groups)\n const animationNodes: 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 // For afterEffect, add delay from previous click group\n if (options.trigger === \"afterPrevious\" && i > 0) {\n clickGroupDelay += (options.duration ?? 500) + (options.delay ?? 0);\n }\n // For new clickEffect, reset delay\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 = PRESET_IDS[options.type];\n const presetSubtype = options.direction\n ? (DIRECTION_SUBTYPES[options.direction] ?? 0)\n : 0;\n\n // Build the animation effect children\n const effectChildren: XmlComponent[] = [];\n\n // <p:set> to make shape visible\n effectChildren.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: setCtnId },\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: {\n delay: { key: \"delay\", value: \"0\" },\n },\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: [\n new StringContainer(\"p:attrName\", \"style.visibility\"),\n ],\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: \"visible\" } },\n }),\n ],\n }),\n ],\n }),\n );\n\n // Add animEffect for non-appear types\n if (options.type !== \"appear\") {\n const filterBase = FILTER_MAP[options.type];\n const dirMap = DIRECTION_FILTER[options.type];\n const dirFilter =\n 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 effectChildren.push(\n new BuilderElement({\n name: \"p:animEffect\",\n attributes: {\n transition: { key: \"transition\", value: \"in\" },\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: effectCtnId2 },\n dur: {\n key: \"dur\",\n value: String(options.duration ?? 500),\n },\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 // Build effect cTn\n const effectCtn = new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: effectCtnId },\n presetID: { key: \"presetID\", value: presetId },\n presetClass: { key: \"presetClass\", value: \"entr\" },\n presetSubtype: { key: \"presetSubtype\", value: presetSubtype },\n fill: { key: \"fill\", value: \"hold\" },\n nodeType: { key: \"nodeType\", value: nodeType },\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: 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 ],\n }),\n ],\n }),\n ],\n }),\n ],\n }),\n );\n }\n}\n","import {\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: \"tl\",\n TOP: \"t\",\n TOP_RIGHT: \"tr\",\n LEFT: \"l\",\n CENTER: \"ctr\",\n RIGHT: \"r\",\n BOTTOM_LEFT: \"bl\",\n BOTTOM: \"b\",\n BOTTOM_RIGHT: \"br\",\n} as const;\n\nexport interface IShadowOptions {\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 IGlowOptions {\n readonly radius?: number;\n readonly color?: string;\n readonly alpha?: number;\n}\n\nexport interface IReflectionOptions {\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?: keyof typeof ReflectionAlignment;\n readonly rotateWithShape?: boolean;\n}\n\nexport interface ISoftEdgeOptions {\n readonly radius?: number;\n}\n\nexport interface IBevelOptions {\n readonly width?: number;\n readonly height?: number;\n}\n\nexport interface IRotation3DOptions {\n readonly x?: number;\n readonly y?: number;\n readonly z?: number;\n readonly perspective?: number;\n}\n\nexport interface IEffectsOptions {\n readonly outerShadow?: IShadowOptions;\n readonly innerShadow?: IShadowOptions;\n readonly glow?: IGlowOptions;\n readonly reflection?: IReflectionOptions;\n readonly softEdge?: ISoftEdgeOptions;\n readonly rotation3D?: IRotation3DOptions;\n readonly bevelTop?: IBevelOptions;\n readonly bevelBottom?: IBevelOptions;\n readonly extrusionH?: number;\n readonly material?:\n | \"plastic\"\n | \"metal\"\n | \"matte\"\n | \"warmMatte\"\n | \"softEdge\"\n | \"flat\"\n | \"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 IShadowOptions to core OuterShadowEffectOptions. */\nfunction toOuterShadow(opts: IShadowOptions) {\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 IShadowOptions to core InnerShadowEffectOptions. */\nfunction toInnerShadow(opts: IShadowOptions) {\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 IGlowOptions to core GlowEffectOptions. */\nfunction toGlow(opts: IGlowOptions) {\n return {\n radius: opts.radius ?? 152400,\n color: toColor(opts.color, opts.alpha),\n };\n}\n\n/** Convert PPTX IReflectionOptions to core ReflectionEffectOptions. */\nfunction toReflection(opts: IReflectionOptions) {\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 = ReflectionAlignment[opts.alignment];\n if (opts.rotateWithShape === false) result.rotWithShape = 0;\n return result;\n}\n\n/** Convert PPTX IBevelOptions to core BevelOptions. */\nfunction toBevel(opts: IBevelOptions): 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 IEffectsOptions to core EffectListOptions. */\nfunction toEffectListOptions(opts: IEffectsOptions): 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 IEffectsOptions to core Scene3DOptions, or null if not needed. */\nexport function buildScene3D(options: IEffectsOptions): 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 IEffectsOptions to core Shape3DOptions, or null if not needed. */\nexport function buildShape3D(options: IEffectsOptions): 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\n ? { prstMaterial: options.material as Shape3DOptions[\"prstMaterial\"] }\n : {}),\n };\n\n return createShape3D(shape3dOpts);\n}\n\n/** Create a:effectLst from PPTX simplified IEffectsOptions. */\nexport function createPptxEffectList(options: IEffectsOptions) {\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","import {\n createOutline,\n PresetDash,\n LineEndType,\n LineEndWidth,\n LineEndLength,\n} 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, keyof typeof PresetDash> = {\n solid: \"SOLID\",\n dash: \"DASH\",\n dashDot: \"DASH_DOT\",\n lgDash: \"LG_DASH\",\n sysDot: \"SYS_DOT\",\n sysDash: \"SYS_DASH\",\n};\n\nconst ARROWHEAD_MAP: Record<string, keyof typeof LineEndType> = {\n triangle: \"TRIANGLE\",\n stealth: \"STEALTH\",\n diamond: \"DIAMOND\",\n oval: \"OVAL\",\n open: \"ARROW\",\n};\n\nconst ARROWHEAD_SIZE_MAP: Record<string, keyof typeof LineEndWidth> = {\n sm: \"SMALL\",\n med: \"MEDIUM\",\n lg: \"LARGE\",\n};\n\nfunction toCoreLineEnd(type: string, width?: string, length?: string): CoreLineEndOptions {\n return {\n type: ARROWHEAD_MAP[type] ?? \"TRIANGLE\",\n ...(width ? { width: ARROWHEAD_SIZE_MAP[width] as keyof typeof LineEndWidth } : {}),\n ...(length ? { length: ARROWHEAD_SIZE_MAP[length] as keyof typeof LineEndLength } : {}),\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 { XmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } 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 prepForXml(context: IContext): IXmlableObject | undefined {\n return this.core[\"prepForXml\"]?.(context);\n }\n}\n","import type { File } from \"@file/file\";\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\n\nimport { createPptxEffectList, buildScene3D, buildShape3D, type IEffectsOptions } 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 IConnectionSiteOptions {\n readonly x: number;\n readonly y: number;\n readonly angle?: number;\n}\n\nexport interface IShapePropertiesOptions {\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?: IEffectsOptions;\n readonly connectionSites?: readonly IConnectionSiteOptions[];\n}\n\n/**\n * p:spPr — Shape properties (transform, geometry, fill, outline, effects).\n * Lazy: stores options, builds XML object directly in prepForXml.\n */\nexport class ShapeProperties extends BaseXmlComponent {\n private readonly options: IShapePropertiesOptions;\n\n public constructor(options: IShapePropertiesOptions) {\n super(\"p:spPr\");\n this.options = options;\n }\n\n public prepForXml(context: IContext<File>): IXmlableObject | undefined {\n const opts = this.options;\n const children: IXmlableObject[] = [];\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 const xfrmObj = new Transform2D(opts).prepForXml(context);\n if (xfrmObj) children.push(xfrmObj);\n }\n\n // PresetGeometry\n const geomObj = new PresetGeometry({ preset: opts.geometry ?? \"rect\" }).prepForXml(context);\n if (geomObj) children.push(geomObj);\n\n // Fill (register blipFill media — B-level 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 const fillObj = fillComponent.prepForXml(context);\n if (fillObj) children.push(fillObj);\n\n // Outline\n if (opts.outline) {\n const outlineObj = createOutlineCompat(opts.outline).prepForXml(context);\n if (outlineObj) children.push(outlineObj);\n }\n\n // Effects\n if (opts.effects) {\n const effectObj = createPptxEffectList(opts.effects);\n if (effectObj) {\n const effectXmlObj = effectObj.prepForXml(context);\n if (effectXmlObj) children.push(effectXmlObj);\n }\n\n const scene3d = buildScene3D(opts.effects);\n if (scene3d) {\n const sceneObj = scene3d.prepForXml(context);\n if (sceneObj) children.push(sceneObj);\n }\n\n const shape3d = buildShape3D(opts.effects);\n if (shape3d) {\n const shapeObj = shape3d.prepForXml(context);\n if (shapeObj) children.push(shapeObj);\n }\n }\n\n // Connection sites\n if (opts.connectionSites && opts.connectionSites.length > 0) {\n const cxnChildren: IXmlableObject[] = [];\n for (const site of opts.connectionSites) {\n const siteAttrs: Record<string, string | number> = { pos: `${site.x} ${site.y}` };\n if (site.angle !== undefined) siteAttrs.ang = site.angle;\n cxnChildren.push({ \"a:cxn\": { _attr: siteAttrs } });\n }\n children.push({ \"a:cxnLst\": cxnChildren });\n }\n\n return { \"p:spPr\": children };\n }\n}\n","import type { IAnimationOptions } from \"@file/animation/types\";\nimport type { IEffectsOptions } from \"@file/drawingml/effects\";\nimport type { OutlineOptions } from \"@file/drawingml/outline\";\nimport { ShapeProperties } from \"@file/drawingml/shape-properties\";\nimport type { IShapePropertiesOptions } from \"@file/drawingml/shape-properties\";\nimport type { File } from \"@file/file\";\nimport { XmlComponent as Xc } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\nimport { convertPixelsToEmu } from \"@office-open/core\";\nimport { attrs, escapeXml, xml } from \"@office-open/xml\";\n\nimport { Paragraph } from \"./paragraph/paragraph\";\nimport { TextBody } from \"./text-body\";\nimport type { ITextBodyOptions } from \"./text-body\";\n\nexport interface IShapeOptions {\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?: IShapePropertiesOptions[\"fill\"];\n readonly outline?: OutlineOptions;\n readonly effects?: IEffectsOptions;\n readonly flipHorizontal?: boolean;\n readonly rotation?: number;\n readonly text?: string;\n readonly paragraphs?: ITextBodyOptions[\"paragraphs\"];\n readonly textVertical?: ITextBodyOptions[\"vertical\"];\n readonly textAnchor?: ITextBodyOptions[\"anchor\"];\n readonly textAutoFit?: ITextBodyOptions[\"autoFit\"];\n readonly textWrap?: ITextBodyOptions[\"wrap\"];\n readonly textMargins?: ITextBodyOptions[\"margins\"];\n readonly textColumns?: ITextBodyOptions[\"columns\"];\n readonly textColumnSpacing?: ITextBodyOptions[\"columnSpacing\"];\n readonly animation?: IAnimationOptions;\n readonly placeholder?: \"title\" | \"body\" | \"subTitle\" | \"sldNum\" | \"dt\" | \"ftr\" | \"hdr\" | \"obj\";\n readonly placeholderIndex?: number;\n}\n\n/**\n * Pure function: builds p:ph element for placeholder.\n */\nfunction buildPlaceholder(type: string, index?: number): IXmlableObject {\n const attrs: Record<string, string | number> = { type };\n if (index !== undefined) attrs.idx = index;\n return { \"p:ph\": { _attr: attrs } };\n}\n\n/**\n * p:sp — A shape on a slide.\n * Lazy: stores options, builds XML object in prepForXml.\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 private readonly shapeId: number;\n private readonly animationOptions?: IAnimationOptions;\n private readonly options: IShapeOptions;\n\n public constructor(options: IShapeOptions = {}) {\n super(\"p:sp\");\n\n const id = options.id ?? Shape.nextId++;\n this.shapeId = id;\n this.animationOptions = options.animation;\n this.options = { ...options, id };\n }\n\n public get ShapeId(): number {\n return this.shapeId;\n }\n\n public get Animation(): IAnimationOptions | undefined {\n return this.animationOptions;\n }\n\n public override prepForXml(context: IContext): IXmlableObject | undefined {\n const opts = this.options;\n const id = this.shapeId;\n const name = opts.name ?? `Shape ${id}`;\n const children: IXmlableObject[] = [];\n\n // nvSpPr\n const nvPrChildren: IXmlableObject[] = [];\n if (opts.placeholder) {\n nvPrChildren.push(buildPlaceholder(opts.placeholder, opts.placeholderIndex));\n }\n children.push({\n \"p:nvSpPr\": [\n { \"p:cNvPr\": { _attr: { id, name } } },\n { \"p:cNvSpPr\": {} },\n { \"p:nvPr\": nvPrChildren.length > 0 ? nvPrChildren : {} },\n ],\n });\n\n // spPr (ShapeProperties)\n const shapeProps: IShapePropertiesOptions = {\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 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 spPrObj = spPr.prepForXml(context as IContext<File>);\n if (spPrObj) children.push(spPrObj);\n\n // txBody (TextBody)\n const textBodyOptions: ITextBodyOptions = {\n paragraphs:\n opts.paragraphs ?? (opts.text ? [new Paragraph({ text: opts.text })] : undefined),\n vertical: opts.textVertical,\n anchor: opts.textAnchor,\n autoFit: opts.textAutoFit,\n wrap: opts.textWrap,\n margins: opts.textMargins,\n columns: opts.textColumns,\n columnSpacing: opts.textColumnSpacing,\n };\n const txBody = new TextBody(textBodyOptions);\n const txBodyObj = txBody.prepForXml(context);\n if (txBodyObj) children.push(txBodyObj);\n\n return { \"p:sp\": children };\n }\n\n public override toXml(context: IContext): string {\n const opts = this.options;\n const id = this.shapeId;\n const name = escapeXml(opts.name ?? `Shape ${id}`);\n\n let s = \"<p:sp><p:nvSpPr>\";\n s += `<p:cNvPr${attrs({ id, name })}/>`;\n s += \"<p:cNvSpPr/>\";\n\n if (opts.placeholder) {\n const phAttrs: Record<string, string | number | undefined> = { type: opts.placeholder };\n if (opts.placeholderIndex !== undefined) phAttrs.idx = opts.placeholderIndex;\n s += `<p:nvPr><p:ph${attrs(phAttrs)}/></p:nvPr>`;\n } else {\n s += \"<p:nvPr/>\";\n }\n s += \"</p:nvSpPr>\";\n\n // spPr — use prepForXml + xml (ShapeProperties not yet converted)\n const spPr = new ShapeProperties({\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 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 spPrObj = spPr.prepForXml(context as IContext<File>);\n if (spPrObj) {\n s += xml(spPrObj);\n }\n\n // txBody\n const txBodyOpts: ITextBodyOptions = {\n paragraphs:\n opts.paragraphs ?? (opts.text ? [new Paragraph({ text: opts.text })] : undefined),\n vertical: opts.textVertical,\n anchor: opts.textAnchor,\n autoFit: opts.textAutoFit,\n wrap: opts.textWrap,\n margins: opts.textMargins,\n columns: opts.textColumns,\n columnSpacing: opts.textColumnSpacing,\n };\n s += new TextBody(txBodyOpts).toXml(context);\n\n s += \"</p:sp>\";\n return s;\n }\n}\n","import type { IContext, IXmlableObject } 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 interface ITransitionOptions {\n readonly type?: TransitionType;\n readonly speed?: \"slow\" | \"med\" | \"fast\";\n readonly advanceOnClick?: boolean;\n readonly advanceAfterTime?: number;\n readonly dir?: string;\n readonly orient?: \"horz\" | \"vert\";\n readonly thruBlk?: boolean;\n readonly spokes?: number;\n}\n\nfunction buildTransitionElement(\n type: TransitionType,\n dir?: string,\n orient?: string,\n thruBlk?: boolean,\n spokes?: number,\n): IXmlableObject {\n const attrs: Record<string, string | number> = {};\n\n if (ORIENT_TYPES.has(type) && dir) {\n attrs.dir = dir;\n } else if (SIDE_DIR_TYPES.has(type) && dir) {\n attrs.dir = dir;\n } else if (EIGHT_DIR_TYPES.has(type) && dir) {\n attrs.dir = dir;\n } else if (type === \"strips\" && dir) {\n attrs.dir = dir;\n } else if ((type === \"fade\" || type === \"cut\") && thruBlk !== undefined) {\n attrs.thruBlk = thruBlk ? 1 : 0;\n } else if (type === \"split\") {\n attrs.orient = orient ?? \"horz\";\n attrs.dir = dir ?? \"out\";\n } else if (type === \"wheel\") {\n attrs.spokes = spokes ?? 4;\n } else if (type === \"zoom\" && dir) {\n attrs.dir = dir;\n }\n\n return { [`p:${type}`]: Object.keys(attrs).length > 0 ? { _attr: attrs } : {} };\n}\n\nexport function buildTransition(options: ITransitionOptions): IXmlableObject {\n const children: IXmlableObject[] = [];\n const attrs: Record<string, string | number> = {};\n if (options.speed) attrs.spd = options.speed;\n if (options.advanceOnClick !== undefined) attrs.advClick = options.advanceOnClick ? 1 : 0;\n if (options.advanceAfterTime !== undefined) attrs.advTm = options.advanceAfterTime;\n if (Object.keys(attrs).length > 0) children.push({ _attr: attrs });\n\n if (options.type) {\n children.push(\n buildTransitionElement(\n options.type,\n options.dir,\n options.orient,\n options.thruBlk,\n options.spokes,\n ),\n );\n }\n\n return { \"p:transition\": children.length === 0 ? {} : children };\n}\n\n/**\n * p:transition — Slide transition effect.\n * Lazy: stores options, builds XML object in prepForXml.\n */\nexport class Transition extends BaseXmlComponent {\n private readonly options: ITransitionOptions;\n\n public constructor(options: ITransitionOptions = {}) {\n super(\"p:transition\");\n this.options = options;\n }\n\n public override prepForXml(_context: IContext): IXmlableObject {\n return buildTransition(this.options);\n }\n}\n","import { SlideTiming } from \"@file/animation/timing\";\nimport type { Background } from \"@file/background/background\";\nimport type { IHeaderFooterOptions } from \"@file/header-footer/header-footer\";\nimport { Shape } from \"@file/shape/shape\";\nimport type { ITransitionOptions } from \"@file/transition/transition\";\nimport { buildTransition } from \"@file/transition/transition\";\nimport { BaseXmlComponent, XmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\nimport { xml } from \"@office-open/xml\";\n\nconst NV_GRP_SP_PR = '<p:nvGrpSpPr><p:cNvPr id=\"1\" name=\"\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>';\n\nconst GRP_SP_PR =\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\nconst CLR_MAP_OVR = \"<p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr>\";\n\nconst XMLNS =\n ' 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\nfunction collectAnimations(children: readonly BaseXmlComponent[]): Array<{\n readonly spid: number;\n readonly options: import(\"@file/animation/types\").IAnimationOptions;\n}> {\n const entries: Array<{\n readonly spid: number;\n readonly options: import(\"@file/animation/types\").IAnimationOptions;\n }> = [];\n for (const child of children) {\n if (child instanceof Shape) {\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 object in prepForXml.\n */\nexport class Slide extends XmlComponent {\n private readonly children: readonly BaseXmlComponent[];\n private readonly background?: Background;\n private readonly transition?: ITransitionOptions;\n public readonly HeaderFooter?: IHeaderFooterOptions;\n\n public constructor(\n children: readonly BaseXmlComponent[],\n background?: Background,\n transition?: ITransitionOptions,\n headerFooter?: IHeaderFooterOptions,\n ) {\n super(\"p:sld\");\n this.children = children;\n this.background = background;\n this.transition = transition;\n this.HeaderFooter = headerFooter;\n }\n\n public override prepForXml(context: IContext): IXmlableObject {\n const children: IXmlableObject[] = [];\n\n // xmlns attributes\n children.push({\n _attr: {\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 // p:cSld — common slide data (background + shape tree)\n const cSldChildren: IXmlableObject[] = [];\n if (this.background) {\n const bgObj = this.background.prepForXml(context);\n if (bgObj) cSldChildren.push(bgObj);\n }\n\n // p:spTree — shape tree\n const spTreeChildren: IXmlableObject[] = [\n {\n \"p:nvGrpSpPr\": [\n { \"p:cNvPr\": { _attr: { id: 1, name: \"\" } } },\n { \"p:cNvGrpSpPr\": {} },\n { \"p:nvPr\": {} },\n ],\n },\n {\n \"p:grpSpPr\": {\n \"a:xfrm\": [\n { \"a:off\": { _attr: { x: 0, y: 0 } } },\n { \"a:ext\": { _attr: { cx: 0, cy: 0 } } },\n { \"a:chOff\": { _attr: { x: 0, y: 0 } } },\n { \"a:chExt\": { _attr: { cx: 0, cy: 0 } } },\n ],\n },\n },\n ];\n for (const child of this.children) {\n const obj = child.prepForXml(context);\n if (obj) spTreeChildren.push(obj);\n }\n cSldChildren.push({ \"p:spTree\": spTreeChildren });\n\n children.push({ \"p:cSld\": cSldChildren });\n\n // p:clrMapOvr\n children.push({ \"p:clrMapOvr\": [{ \"a:masterClrMapping\": {} }] });\n\n // p:transition (optional)\n if (this.transition) {\n const transObj = buildTransition(this.transition);\n if (transObj) children.push(transObj);\n }\n\n // p:timing (animation)\n const animations = collectAnimations(this.children);\n if (animations.length > 0) {\n const timing = new SlideTiming(animations);\n const timingObj = timing.prepForXml(context);\n if (timingObj) children.push(timingObj);\n }\n\n return { \"p:sld\": children };\n }\n\n public toXml(context: IContext): string {\n let s = `<p:sld${XMLNS}>`;\n\n // p:cSld\n s += \"<p:cSld>\";\n if (this.background) {\n const bgObj = this.background.prepForXml(context);\n if (bgObj) s += xml(bgObj);\n }\n\n // p:spTree\n s += \"<p:spTree>\";\n s += NV_GRP_SP_PR;\n s += GRP_SP_PR;\n for (const child of this.children) {\n if (typeof (child as unknown as { toXml?: Function }).toXml === \"function\") {\n s += (child as unknown as { toXml(ctx: IContext): string }).toXml(context);\n } else {\n const obj = child.prepForXml(context);\n if (obj) s += xml(obj);\n }\n }\n s += \"</p:spTree></p:cSld>\";\n\n s += CLR_MAP_OVR;\n\n if (this.transition) {\n const transObj = buildTransition(this.transition);\n if (transObj) s += xml(transObj);\n }\n\n const animations = collectAnimations(this.children);\n if (animations.length > 0) {\n const timing = new SlideTiming(animations);\n const timingObj = timing.prepForXml(context);\n if (timingObj) s += xml(timingObj);\n }\n\n s += \"</p:sld>\";\n return s;\n }\n}\n","import { 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 prepForXml() {\n return TableStyles.instance.prepForXml({ stack: [] });\n }\n}\n","import { ImportedXmlComponent } from \"@file/xml-components\";\n\nconst THEME_XML = `<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"Office Theme\">\n <a:themeElements>\n <a:clrScheme name=\"Office\">\n <a:dk1><a:sysClr val=\"windowText\" lastClr=\"000000\"/></a:dk1>\n <a:lt1><a:sysClr val=\"window\" lastClr=\"FFFFFF\"/></a:lt1>\n <a:dk2><a:srgbClr val=\"44546A\"/></a:dk2>\n <a:lt2><a:srgbClr val=\"E7E6E6\"/></a:lt2>\n <a:accent1><a:srgbClr val=\"4472C4\"/></a:accent1>\n <a:accent2><a:srgbClr val=\"ED7D31\"/></a:accent2>\n <a:accent3><a:srgbClr val=\"A5A5A5\"/></a:accent3>\n <a:accent4><a:srgbClr val=\"FFC000\"/></a:accent4>\n <a:accent5><a:srgbClr val=\"5B9BD5\"/></a:accent5>\n <a:accent6><a:srgbClr val=\"70AD47\"/></a:accent6>\n <a:hlink><a:srgbClr val=\"0563C1\"/></a:hlink>\n <a:folHlink><a:srgbClr val=\"954F72\"/></a:folHlink>\n </a:clrScheme>\n <a:fontScheme name=\"Office\">\n <a:majorFont>\n <a:latin typeface=\"Calibri Light\"/>\n <a:ea typeface=\"\"/>\n <a:cs typeface=\"\"/>\n </a:majorFont>\n <a:minorFont>\n <a:latin typeface=\"Calibri\"/>\n <a:ea typeface=\"\"/>\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\nexport class DefaultTheme extends ImportedXmlComponent {\n public static instance = ImportedXmlComponent.fromXmlString(THEME_XML);\n\n public constructor() {\n super(\"a:theme\");\n }\n\n public prepForXml() {\n return DefaultTheme.instance.prepForXml({ stack: [] });\n }\n}\n","import { 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 prepForXml() {\n return ViewProperties.instance.prepForXml({ stack: [] });\n }\n}\n","import { AppProperties } from \"@file/app-properties/app-properties\";\nimport type { Background } from \"@file/background/background\";\nimport { ChartCollection } from \"@file/chart/chart-collection\";\nimport { ContentTypes } from \"@file/content-types/content-types\";\nimport { CoreProperties, type ICorePropertiesOptions } from \"@file/core-properties/properties\";\nimport type { IHeaderFooterOptions } 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 { DefaultSlideLayout } from \"@file/slide-layout/slide-layout\";\nimport { DefaultSlideMaster } from \"@file/slide-master/slide-master\";\nimport { Slide } from \"@file/slide/slide\";\nimport { SmartArtCollection } from \"@file/smartart/smartart-collection\";\nimport { TableStyles } from \"@file/table-styles\";\nimport { DefaultTheme } from \"@file/theme/theme\";\nimport type { ITransitionOptions } 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\nexport interface ISlideOptions {\n readonly children?: readonly BaseXmlComponent[];\n readonly background?: Background;\n readonly notes?: string;\n readonly transition?: ITransitionOptions;\n readonly headerFooter?: IHeaderFooterOptions;\n}\n\nexport interface IShowOptions {\n readonly loop?: boolean;\n readonly kiosk?: boolean;\n readonly showNarration?: boolean;\n readonly useTimings?: boolean;\n}\n\nexport interface IPresentationOptions extends ICorePropertiesOptions {\n readonly slideWidth?: number;\n readonly slideHeight?: number;\n readonly slides?: readonly ISlideOptions[];\n readonly show?: IShowOptions;\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\nexport class File {\n private readonly slideOptions: readonly ISlideOptions[];\n private readonly corePropsOptions: ICorePropertiesOptions;\n private readonly showOptions?: IShowOptions;\n private readonly slideWidthEmus?: number;\n private readonly slideHeightEmus?: number;\n\n // Lazy components — created on first getter access\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 theme?: DefaultTheme;\n private tableStyles?: TableStyles;\n private presProps?: PresentationProperties;\n private viewProps?: ViewProperties;\n private slideMaster?: DefaultSlideMaster;\n private slideLayout?: DefaultSlideLayout;\n private slideMasterRels?: Relationships;\n private slideLayoutRels?: Relationships;\n private notesMasterRels?: Relationships;\n\n // Lazy slide data — built on first access\n private slides?: Slide[];\n private slideWrappers?: Array<{ readonly View: Slide; readonly Relationships: Relationships }>;\n private notesSlides?: NotesSlide[];\n\n // Lazy relationship data — built on first access\n private fileRels?: Relationships;\n\n public constructor(options: IPresentationOptions) {\n const slides = options.slides ?? [];\n this.slideOptions = slides;\n this.corePropsOptions = options;\n this.showOptions = options.show;\n this.slideWidthEmus = options.slideWidth\n ? convertPixelsToEmu(options.slideWidth)\n : undefined;\n this.slideHeightEmus = options.slideHeight\n ? convertPixelsToEmu(options.slideHeight)\n : undefined;\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 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 }\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 this.presentationWrapper = new PresentationWrapper({\n slideWidth: this.slideWidthEmus,\n slideHeight: this.slideHeightEmus,\n slideIds: this.slideOptions.map((_, i) => 256 + i),\n });\n // Presentation-level relationships\n const presRels = this.PresentationWrapper.Relationships;\n presRels.addRelationship(\n 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster\",\n \"slideMasters/slideMaster1.xml\",\n );\n for (let i = 0; i < this.slideOptions.length; i++) {\n presRels.addRelationship(\n i + 2,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide\",\n `slides/slide${i + 1}.xml`,\n );\n }\n const n = this.slideOptions.length + 2;\n presRels.addRelationship(\n n,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/presProps\",\n \"presProps.xml\",\n );\n presRels.addRelationship(\n n + 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/viewProps\",\n \"viewProps.xml\",\n );\n presRels.addRelationship(\n n + 2,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n \"theme/theme1.xml\",\n );\n presRels.addRelationship(\n n + 3,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableStyles\",\n \"tableStyles.xml\",\n );\n }\n return this.presentationWrapper;\n }\n\n public get Theme(): DefaultTheme {\n return (this.theme ??= new DefaultTheme());\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 SlideMaster(): DefaultSlideMaster {\n if (!this.slideMaster) {\n const hf = this.slideOptions.find((s) => s.headerFooter)?.headerFooter;\n this.slideMaster = new DefaultSlideMaster(hf);\n }\n return this.slideMaster;\n }\n\n public get SlideMasterRelationships(): Relationships {\n if (!this.slideMasterRels) {\n this.slideMasterRels = buildRelationships([\n {\n id: 1,\n type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout\",\n target: \"../slideLayouts/slideLayout1.xml\",\n },\n {\n id: 2,\n type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n target: \"../theme/theme1.xml\",\n },\n ]);\n }\n return this.slideMasterRels;\n }\n\n public get SlideLayout(): DefaultSlideLayout {\n return (this.slideLayout ??= new DefaultSlideLayout());\n }\n\n public get SlideLayoutRelationships(): Relationships {\n if (!this.slideLayoutRels) {\n this.slideLayoutRels = buildRelationships([\n {\n id: 1,\n type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster\",\n target: \"../slideMasters/slideMaster1.xml\",\n },\n ]);\n }\n return this.slideLayoutRels;\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(s.children ?? [], s.background, s.transition, s.headerFooter),\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 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/slideLayout1.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 public get NotesMasterRelationships(): Relationships {\n return (this.notesMasterRels ??= new Relationships());\n }\n}\n","import { StringContainer } from \"@file/xml-components\";\n\n/**\n * a:t — Text content within a run.\n */\nexport class Text extends StringContainer {\n public constructor(value: string) {\n super(\"a:t\", value);\n }\n}\n","import {\n NextAttributeComponent,\n BuilderElement,\n StringContainer,\n XmlComponent,\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 new NextAttributeComponent({\n id: { key: \"id\", value: `{${crypto.randomUUID()}}` },\n type: { key: \"type\", value: 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(new StringContainer(\"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 { XmlComponent } from \"@file/xml-components\";\nimport { createBlip, Stretch } from \"@office-open/core/drawingml\";\n\n/**\n * a:blipFill — Image fill with stretch mode.\n * Uses core createBlip for the blip element.\n */\nexport class BlipFill extends XmlComponent {\n public constructor(fileName: string) {\n super(\"a:blipFill\");\n this.root.push(createBlip({ referenceId: fileName }));\n this.root.push(new Stretch());\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\";\n\n/**\n * p:cNvSpPr — Non-visual shape properties.\n * Uses p: prefix in PresentationML context.\n */\nexport class NonVisualShapeProperties extends XmlComponent {\n public constructor() {\n super(\"p:cNvSpPr\");\n }\n}\n","import { XmlComponent } from \"@file/xml-components\";\n\n/**\n * a:cNvPicPr — Non-visual picture drawing properties.\n * Uses a: prefix (DrawingML type) but referenced via p:cNvPicPr in PML context.\n */\nexport class NonVisualPictureProperties extends XmlComponent {\n public constructor() {\n super(\"a:cNvPicPr\");\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\nimport { convertPixelsToEmu } from \"@office-open/core\";\n\nexport interface IGroupShapeOptions {\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 BaseXmlComponent[];\n}\n\n/**\n * p:grpSp — Group shape containing child shapes.\n * Lazy: stores options, builds XML object in prepForXml.\n */\nexport class GroupShape extends BaseXmlComponent {\n private static nextId = 100;\n private readonly id: number;\n private readonly options: IGroupShapeOptions;\n\n public constructor(options: IGroupShapeOptions) {\n super(\"p:grpSp\");\n this.id = GroupShape.nextId++;\n this.options = options;\n }\n\n public override prepForXml(context: IContext): IXmlableObject {\n const opts = this.options;\n const id = this.id;\n const name = `Group ${id}`;\n const children: IXmlableObject[] = [];\n\n // p:nvGrpSpPr\n children.push({\n \"p:nvGrpSpPr\": [\n { \"p:cNvPr\": { _attr: { id, name } } },\n { \"p:cNvGrpSpPr\": {} },\n { \"p:nvPr\": {} },\n ],\n });\n\n // p:grpSpPr\n const xfrmChildren: IXmlableObject[] = [];\n const xfrmAttrs: Record<string, string | number> = {};\n if (opts.flipHorizontal !== undefined) xfrmAttrs.flipH = opts.flipHorizontal ? 1 : 0;\n if (opts.rotation !== undefined) xfrmAttrs.rot = opts.rotation;\n if (Object.keys(xfrmAttrs).length > 0) xfrmChildren.push({ _attr: xfrmAttrs });\n xfrmChildren.push({\n \"a:off\": {\n _attr: {\n x: opts.x !== undefined ? convertPixelsToEmu(opts.x) : 0,\n y: opts.y !== undefined ? convertPixelsToEmu(opts.y) : 0,\n },\n },\n });\n xfrmChildren.push({\n \"a:ext\": {\n _attr: {\n cx: opts.width !== undefined ? convertPixelsToEmu(opts.width) : 0,\n cy: opts.height !== undefined ? convertPixelsToEmu(opts.height) : 0,\n },\n },\n });\n xfrmChildren.push({ \"a:chOff\": { _attr: { x: 0, y: 0 } } });\n xfrmChildren.push({ \"a:chExt\": { _attr: { cx: 0, cy: 0 } } });\n children.push({ \"p:grpSpPr\": { \"a:xfrm\": xfrmChildren } });\n\n // Child shapes — direct children of p:grpSp (after nvGrpSpPr and grpSpPr)\n for (const child of opts.children) {\n const obj = child.prepForXml(context);\n if (obj) children.push(obj);\n }\n\n return { \"p:grpSp\": children };\n }\n}\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 private readonly shapeId: number;\n\n public constructor(options: ILineShapeOptions = {}) {\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<\n string,\n { readonly key: string; readonly value: string | number }\n > = {};\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 public get ShapeId(): number {\n return this.shapeId;\n }\n}\n\nexport interface ILineShapeOptions {\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 private readonly shapeId: number;\n\n public constructor(options: IConnectorShapeOptions = {}) {\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<\n string,\n { readonly key: string; readonly value: string | number }\n > = {};\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 public get ShapeId(): number {\n return this.shapeId;\n }\n}\n\nexport interface IConnectorShapeOptions {\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?: \"sm\" | \"med\" | \"lg\";\n readonly arrowheadLength?: \"sm\" | \"med\" | \"lg\";\n}\n","import { 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 IContext, XmlComponent } from \"@file/xml-components\";\nimport { convertPixelsToEmu } from \"@office-open/core\";\n\nconst MEDIA_EXT_URI = \"{DAA4B4D4-6D71-4841-9C94-3DE7FCFB9230}\";\n\n/**\n * Extract the first video frame from MP4 data as JPEG.\n * Falls back to a generated placeholder if extraction fails.\n */\nfunction extractFirstFrame(videoData: Uint8Array, type: VideoType): Uint8Array {\n if (type === \"mp4\") {\n const jpeg = extractMp4FirstFrame(videoData);\n if (jpeg) return jpeg;\n }\n return generatePlaceholderPoster();\n}\n\n/**\n * Attempt to extract the first I-frame from an MP4 file.\n * MP4 structure: ftyp -> moov (metadata) -> mdat (media data).\n * We scan mdat for JPEG start markers (FFD8) which indicate\n * embedded poster frames, or for AVC NAL unit start codes.\n */\nfunction extractMp4FirstFrame(data: Uint8Array): Uint8Array | null {\n const bytes = new Uint8Array(data);\n\n // Check for embedded JPEG poster (some MP4 files have this in moov/udta/meta)\n for (let i = 0; i < bytes.length - 1; i++) {\n if (bytes[i] === 0xff && bytes[i + 1] === 0xd8) {\n // Found JPEG SOI marker — find EOI\n let end = -1;\n for (let j = i + 2; j < bytes.length - 1; j++) {\n if (bytes[j] === 0xff && bytes[j + 1] === 0xd9) {\n end = j + 2;\n break;\n }\n }\n if (end > i + 100) {\n return bytes.slice(i, end);\n }\n }\n }\n return null;\n}\n\n/**\n * Generate a minimal 320x180 dark gray PNG as a video placeholder poster.\n */\nfunction generatePlaceholderPoster(): Uint8Array {\n const width = 320;\n const height = 180;\n const zlib = require(\"zlib\");\n\n // RGBA raw data: dark gray background with a centered play triangle\n const rawData = Buffer.alloc((width * 3 + 1) * height);\n const centerX = width / 2;\n const centerY = height / 2;\n const triSize = 30;\n\n for (let y = 0; y < height; y++) {\n const rowOffset = y * (width * 3 + 1);\n rawData[rowOffset] = 0; // PNG filter: None\n for (let x = 0; x < width; x++) {\n const px = rowOffset + 1 + x * 3;\n\n // Play triangle: centered, pointing right\n const dx = x - centerX + triSize * 0.3;\n const dy = y - centerY;\n const inTriangle =\n dy >= -triSize &&\n dy <= triSize &&\n dx >= -triSize * 0.5 &&\n dx <= triSize * 0.5 &&\n dx <= triSize * 0.5 - (Math.abs(dy) / triSize) * triSize;\n\n if (inTriangle) {\n rawData[px] = 255; // R\n rawData[px + 1] = 255; // G\n rawData[px + 2] = 255; // B\n } else {\n rawData[px] = 51; // R (#333333)\n rawData[px + 1] = 51; // G\n rawData[px + 2] = 51; // B\n }\n }\n }\n\n const compressed = zlib.deflateSync(rawData);\n\n function crc32(buf: Buffer): number {\n let crc = 0xffffffff;\n for (let i = 0; i < buf.length; i++) {\n crc ^= buf[i];\n for (let j = 0; j < 8; j++) crc = (crc >>> 1) ^ (crc & 1 ? 0xedb88320 : 0);\n }\n return (crc ^ 0xffffffff) >>> 0;\n }\n\n function makeChunk(type: string, data: Buffer): Buffer {\n const len = Buffer.alloc(4);\n len.writeUInt32BE(data.length);\n const typeData = Buffer.concat([Buffer.from(type), data]);\n const crc = Buffer.alloc(4);\n crc.writeUInt32BE(crc32(typeData));\n return Buffer.concat([len, typeData, crc]);\n }\n\n const ihdr = Buffer.alloc(13);\n ihdr.writeUInt32BE(width, 0);\n ihdr.writeUInt32BE(height, 4);\n ihdr[8] = 8; // bit depth\n ihdr[9] = 2; // RGB\n\n return Buffer.concat([\n Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]),\n makeChunk(\"IHDR\", ihdr),\n makeChunk(\"IDAT\", compressed),\n makeChunk(\"IEND\", Buffer.alloc(0)),\n ]);\n}\n\nexport type VideoType = \"mp4\" | \"mov\" | \"wmv\" | \"avi\";\nexport type PosterType = \"png\" | \"jpg\";\n\nexport interface IVideoFrameOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n readonly data: Uint8Array;\n readonly type: VideoType;\n readonly name?: string;\n readonly poster?: Uint8Array;\n readonly posterType?: PosterType;\n readonly posterFrameTime?: number;\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 XmlComponent {\n private static nextId = 100;\n private readonly posterData: IMediaData;\n private readonly videoData: IMediaData;\n\n public constructor(options: IVideoFrameOptions) {\n super(\"p:pic\");\n\n const id = VideoFrame.nextId++;\n const name = options.name ?? `Video ${id}`;\n const mediaFileName = `${name.replace(/\\s+/g, \"_\")}.${options.type}`;\n const posterType = options.posterType ?? \"png\";\n const posterFileName = `${name.replace(/\\s+/g, \"_\")}_poster.${posterType}`;\n\n this.videoData = {\n type: options.type,\n fileName: mediaFileName,\n transformation: {\n pixels: { x: options.width ?? 0, y: options.height ?? 0 },\n emus: {\n x: convertPixelsToEmu(options.width ?? 0),\n y: convertPixelsToEmu(options.height ?? 0),\n },\n },\n data: options.data,\n };\n\n const posterBytes = options.poster ?? extractFirstFrame(options.data, options.type);\n this.posterData = {\n type: posterType === \"jpg\" ? \"jpg\" : \"png\",\n fileName: posterFileName,\n transformation: {\n pixels: { x: options.width ?? 0, y: options.height ?? 0 },\n emus: {\n x: convertPixelsToEmu(options.width ?? 0),\n y: convertPixelsToEmu(options.height ?? 0),\n },\n },\n data: posterBytes,\n };\n\n // p:nvPicPr with a:videoFile + p14:media\n const nvPrChildren: BuilderElement[] = [\n new BuilderElement({\n name: \"a:videoFile\",\n attributes: {\n \"r:link\": { key: \"r:link\", value: `{video:${mediaFileName}}` },\n },\n }),\n new BuilderElement({\n name: \"p:extLst\",\n children: [\n new BuilderElement({\n name: \"p:ext\",\n attributes: { uri: { key: \"uri\", value: MEDIA_EXT_URI } },\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: \"p: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: \"p: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 with poster image (required by PowerPoint)\n this.root.push(\n new BuilderElement({\n name: \"p:blipFill\",\n children: [\n new BuilderElement({\n name: \"a:blip\",\n attributes: {\n \"r:embed\": { key: \"r:embed\", value: `{${posterFileName}}` },\n },\n }),\n new BuilderElement({\n name: \"a:stretch\",\n children: [new BuilderElement({ name: \"a:fillRect\" })],\n }),\n ],\n }),\n );\n\n // p:spPr\n this.root.push(\n new BuilderElement({\n name: \"p:spPr\",\n children: [\n new Transform2D({\n x: convertPixelsToEmu(options.x ?? 0),\n y: convertPixelsToEmu(options.y ?? 0),\n width: convertPixelsToEmu(options.width ?? 0),\n height: convertPixelsToEmu(options.height ?? 0),\n }),\n new PresetGeometry({ preset: \"rect\" }),\n ],\n }),\n );\n }\n\n public override prepForXml(context: IContext) {\n const file = context.fileData as File;\n file?.Media.addImage(this.posterData.fileName, this.posterData);\n file?.Media.addMedia(this.videoData.fileName, this.videoData);\n return super.prepForXml(context);\n }\n}\n","import { 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 IContext, XmlComponent } from \"@file/xml-components\";\nimport { convertPixelsToEmu } from \"@office-open/core\";\n\nconst MEDIA_EXT_URI = \"{CF1602FD-DB20-4165-A070-5F299619DA56}\";\n\nexport type AudioType = \"mp3\" | \"wav\" | \"wma\" | \"aac\";\n\nexport interface IAudioFrameOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n readonly data: Uint8Array;\n readonly type: AudioType;\n readonly name?: string;\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 XmlComponent {\n private static nextId = 200;\n private readonly audioData: IMediaData;\n\n public constructor(options: IAudioFrameOptions) {\n super(\"p:pic\");\n\n const id = AudioFrame.nextId++;\n const name = options.name ?? `Audio ${id}`;\n const mediaFileName = `${name.replace(/\\s+/g, \"_\")}.${options.type}`;\n\n this.audioData = {\n type: options.type,\n fileName: mediaFileName,\n transformation: {\n pixels: { x: options.width ?? 0, y: options.height ?? 0 },\n emus: {\n x: convertPixelsToEmu(options.width ?? 0),\n y: convertPixelsToEmu(options.height ?? 0),\n },\n },\n data: options.data,\n };\n\n // p:nvPicPr with p14:media extension\n this.root.push(\n new BuilderElement({\n name: \"p:nvPicPr\",\n children: [\n new BuilderElement({\n name: \"a: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: \"a: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: [\n new BuilderElement({\n name: \"p:extLst\",\n children: [\n new BuilderElement({\n name: \"p:ext\",\n attributes: { uri: { key: \"uri\", value: MEDIA_EXT_URI } },\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 ],\n }),\n );\n\n // p:blipFill — empty (no poster for audio, PowerPoint provides default icon)\n this.root.push(\n new BuilderElement({\n name: \"p:blipFill\",\n children: [\n new BuilderElement({\n name: \"a:stretch\",\n children: [new BuilderElement({ name: \"a:fillRect\" })],\n }),\n ],\n }),\n );\n\n // p:spPr\n this.root.push(\n new BuilderElement({\n name: \"p:spPr\",\n children: [\n new Transform2D({\n x: convertPixelsToEmu(options.x ?? 0),\n y: convertPixelsToEmu(options.y ?? 0),\n width: convertPixelsToEmu(options.width ?? 0),\n height: convertPixelsToEmu(options.height ?? 0),\n }),\n new PresetGeometry({ preset: \"rect\" }),\n ],\n }),\n );\n }\n\n public override prepForXml(context: IContext) {\n (context.fileData as File)?.Media.addMedia(this.audioData.fileName, this.audioData);\n return super.prepForXml(context);\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 { 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 prepForXml() {\n return DefaultNotesMaster.instance.prepForXml({ stack: [] });\n }\n}\n","import {\n BuilderElement,\n NextAttributeComponent,\n StringContainer,\n XmlComponent,\n} from \"@file/xml-components\";\n\nexport interface IHeaderFooterOptions {\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: IHeaderFooterOptions = {}) {\n super(\"p:hf\");\n\n // Boolean visibility attributes\n const attrs: Record<string, { readonly key: string; readonly value: number }> = {};\n if (options.slideNumber !== false) attrs.sldNum = { key: \"sldNum\", value: 1 };\n if (options.dateTime !== false) attrs.dt = { key: \"dt\", value: 1 };\n // Only set hdr when explicitly true (no header placeholder in default slide master)\n if (options.header === true) attrs.hdr = { key: \"hdr\", value: 1 };\n // Only set ftr when explicitly true or footer has string content\n if (options.footer !== false && options.footer !== undefined)\n attrs.ftr = { key: \"ftr\", value: 1 };\n\n if (Object.keys(attrs).length > 0) {\n this.root.push(new NextAttributeComponent(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: [new StringContainer(\"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","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: \"a: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 IContext, XmlComponent } from \"@file/xml-components\";\nimport { convertPixelsToEmu } from \"@office-open/core\";\n\nimport { PictureNonVisual } from \"./picture-non-visual\";\n\nexport interface IPictureOptions {\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 prepForXml.\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: IPictureOptions) {\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 x: convertPixelsToEmu(options.x ?? 0),\n y: convertPixelsToEmu(options.y ?? 0),\n width: convertPixelsToEmu(options.width ?? 0),\n height: convertPixelsToEmu(options.height ?? 0),\n }),\n new PresetGeometry({ preset: \"rect\" }),\n ],\n }),\n );\n }\n\n public override prepForXml(context: IContext) {\n (context.fileData as File)?.Media.addImage(this.imageData.fileName, this.imageData);\n return super.prepForXml(context);\n }\n}\n","import type { FillOptions } from \"@file/drawingml/fill\";\nimport { buildFill } from \"@file/drawingml/fill\";\nimport { XmlComponent } from \"@file/xml-components\";\n\nexport interface IBackgroundOptions {\n readonly fill?: FillOptions;\n}\n\n/**\n * p:bg — Slide background.\n */\nexport class Background extends XmlComponent {\n public constructor(options: IBackgroundOptions = {}) {\n super(\"p:bg\");\n this.root.push(new BackgroundProperties(options.fill));\n }\n}\n\nclass BackgroundProperties extends XmlComponent {\n public constructor(fill?: FillOptions) {\n super(\"p:bgPr\");\n this.root.push(fill !== undefined ? buildFill(fill) : buildFill({ type: \"none\" }));\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\n\n/**\n * a:graphic > a:graphicData — DrawingML graphic wrapper for table.\n * Lazy: stores table reference, builds IXmlableObject in prepForXml.\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 prepForXml(context: IContext): IXmlableObject {\n const tableObj = this.table.prepForXml(context);\n const graphicDataChildren: IXmlableObject[] = [\n { _attr: { uri: \"http://schemas.openxmlformats.org/drawingml/2006/table\" } },\n ];\n if (tableObj) graphicDataChildren.push(tableObj);\n return {\n \"a:graphic\": [{ \"a:graphicData\": graphicDataChildren }],\n };\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 { IContext, IXmlableObject } from \"@file/xml-components\";\n\n/**\n * a:tblGrid — Table grid with column width definitions.\n * Lazy: stores widths, builds IXmlableObject in prepForXml.\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 prepForXml(_context: IContext): IXmlableObject {\n const children = this.columnWidths.map((w) => ({\n \"a:gridCol\": { _attr: { w } },\n }));\n return { \"a:tblGrid\": children };\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\n\n/**\n * a:tblPr — Table properties (firstRow, bandRow, etc.).\n * Lazy: stores options, builds IXmlableObject in prepForXml.\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 prepForXml(_context: IContext): IXmlableObject {\n if (!this.options) return { \"a:tblPr\": {} };\n\n const attrs: Record<string, string | number> = {};\n const opts = this.options;\n if (opts.firstRow !== undefined) attrs.firstRow = opts.firstRow ? 1 : 0;\n if (opts.lastRow !== undefined) attrs.lastRow = opts.lastRow ? 1 : 0;\n if (opts.bandRow !== undefined) attrs.bandRow = opts.bandRow ? 1 : 0;\n if (opts.firstCol !== undefined) attrs.firstCol = opts.firstCol ? 1 : 0;\n if (opts.lastCol !== undefined) attrs.lastCol = opts.lastCol ? 1 : 0;\n if (opts.bandCol !== undefined) attrs.bandCol = opts.bandCol ? 1 : 0;\n\n return { \"a:tblPr\": Object.keys(attrs).length > 0 ? { _attr: attrs } : {} };\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\n\nimport { TableCell, type ITableCellOptions } from \"./table-cell\";\n\nexport interface ITableRowOptions {\n readonly height?: number;\n readonly cells: readonly ITableCellOptions[];\n}\n\n/**\n * a:tr — Table row containing cells.\n * Lazy: stores options, builds IXmlableObject in prepForXml.\n */\nexport class TableRow extends BaseXmlComponent {\n private readonly options: ITableRowOptions;\n\n public constructor(options: ITableRowOptions) {\n super(\"a:tr\");\n this.options = options;\n }\n\n public override prepForXml(context: IContext): IXmlableObject {\n const children: IXmlableObject[] = [];\n children.push({ _attr: { h: this.options.height ?? 0 } });\n\n for (const cell of this.options.cells) {\n const tc = new TableCell(cell);\n const obj = tc.prepForXml(context);\n if (obj) children.push(obj);\n }\n\n return { \"a:tr\": children };\n }\n}\n","import { BaseXmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\n\nimport type { ICellBorderOptions } from \"./table-cell-properties\";\nimport { TableGrid } from \"./table-grid\";\nimport { TableProperties } from \"./table-properties\";\nimport { TableRow, type ITableRowOptions } from \"./table-row\";\n\nexport interface ITableOptions {\n readonly rows: readonly ITableRowOptions[];\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?: ICellBorderOptions;\n readonly bottom?: ICellBorderOptions;\n readonly left?: ICellBorderOptions;\n readonly right?: ICellBorderOptions;\n readonly insideHorizontal?: ICellBorderOptions;\n readonly insideVertical?: ICellBorderOptions;\n };\n}\n\n/**\n * a:tbl — DrawingML table element.\n * Lazy: stores options, builds IXmlableObject in prepForXml.\n */\nexport class Table extends BaseXmlComponent {\n private readonly options: ITableOptions;\n\n public constructor(options: ITableOptions) {\n super(\"a:tbl\");\n this.options = options;\n }\n\n public override prepForXml(context: IContext): IXmlableObject {\n const opts = this.options;\n const children: IXmlableObject[] = [];\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 const tblPrObj = tblPr.prepForXml(context);\n if (tblPrObj) children.push(tblPrObj);\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 const grid = new TableGrid(colWidths);\n const gridObj = grid.prepForXml(context);\n if (gridObj) children.push(gridObj);\n\n // a:tr rows\n for (const row of opts.rows) {\n const tr = new TableRow(row);\n const trObj = tr.prepForXml(context);\n if (trObj) children.push(trObj);\n }\n\n return { \"a:tbl\": children };\n }\n}\n","import { Transform2D } from \"@file/drawingml/transform-2d\";\nimport { XmlComponent } from \"@file/xml-components\";\nimport { convertPixelsToEmu } from \"@office-open/core\";\n\nimport { Graphic } from \"./graphic\";\nimport { GraphicFrameNonVisual } from \"./graphic-frame-non-visual\";\nimport type { ITableOptions } from \"./table\";\nimport { Table } from \"./table\";\n\nexport interface ITableFrameOptions extends ITableOptions {\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 TableFrame extends XmlComponent {\n public constructor(options: ITableFrameOptions) {\n super(\"p:graphicFrame\");\n\n this.root.push(new GraphicFrameNonVisual());\n\n this.root.push(\n new Transform2D(\n {\n x: convertPixelsToEmu(options.x ?? 0),\n y: convertPixelsToEmu(options.y ?? 0),\n width: convertPixelsToEmu(options.width ?? 0),\n height: convertPixelsToEmu(options.height ?? 0),\n },\n \"p\",\n ),\n );\n\n const table = new Table(options);\n this.root.push(new Graphic(table));\n }\n}\n","import { Transform2D } from \"@file/drawingml/transform-2d\";\nimport { BuilderElement, NextAttributeComponent, XmlComponent } from \"@file/xml-components\";\nimport type { IContext, IXmlableObject } from \"@file/xml-components\";\nimport { convertPixelsToEmu } from \"@office-open/core\";\n\nimport { ChartCollection } from \"./chart-collection\";\nimport type { IChartSpaceOptions } from \"./chart-space\";\nimport { ChartSpace } from \"./chart-space\";\n\nlet nextChartFrameId = 2048;\n\nexport interface IChartFrameOptions extends IChartSpaceOptions {\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 ChartFrame extends XmlComponent {\n private readonly chartOptions: IChartSpaceOptions;\n private readonly chartKey: string;\n\n public constructor(options: IChartFrameOptions) {\n super(\"p:graphicFrame\");\n\n this.chartOptions = options;\n this.chartKey = `chart_${nextChartFrameId++}`;\n\n const id = nextChartFrameId++;\n this.root.push(new GraphicFrameNonVisual(id));\n this.root.push(\n new Transform2D(\n {\n x: convertPixelsToEmu(options.x ?? 0),\n y: convertPixelsToEmu(options.y ?? 0),\n width: convertPixelsToEmu(options.width ?? 0),\n height: convertPixelsToEmu(options.height ?? 0),\n },\n \"p\",\n ),\n );\n\n this.root.push(new ChartGraphic(this.chartKey));\n }\n\n public prepForXml(context: IContext): IXmlableObject | undefined {\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 return super.prepForXml(context);\n }\n\n public get ChartKey(): string {\n return this.chartKey;\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 new NextAttributeComponent({\n uri: {\n key: \"uri\",\n value: \"http://schemas.openxmlformats.org/drawingml/2006/chart\",\n },\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 new NextAttributeComponent({\n xmlnsC: {\n key: \"xmlns:c\",\n value: \"http://schemas.openxmlformats.org/drawingml/2006/chart\",\n },\n xmlnsR: {\n key: \"xmlns:r\",\n value: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\n },\n rId: { key: \"r:id\", value: `{chart:${chartKey}}` },\n }),\n );\n }\n}\n","import { Transform2D } from \"@file/drawingml/transform-2d\";\nimport {\n BuilderElement,\n NextAttributeComponent,\n type IContext,\n type IXmlableObject,\n XmlComponent,\n} from \"@file/xml-components\";\nimport { convertPixelsToEmu } from \"@office-open/core\";\n\nimport type { SmartArtCollection } from \"./smartart-collection\";\nimport { createDataModel, type ITreeNode } from \"./tree-to-model\";\n\nlet nextSmartArtFrameId = 1024;\n\nexport interface ISmartArtFrameOptions {\n readonly x?: number;\n readonly y?: number;\n readonly width?: number;\n readonly height?: number;\n readonly nodes: readonly ITreeNode[];\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 SmartArtFrame 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: ISmartArtFrameOptions) {\n super(\"p:graphicFrame\");\n\n this.smartArtKey = `smartart_${nextSmartArtFrameId++}`;\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 = nextSmartArtFrameId++;\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 x: convertPixelsToEmu(options.x ?? 0),\n y: convertPixelsToEmu(options.y ?? 0),\n width: convertPixelsToEmu(options.width ?? 0),\n height: convertPixelsToEmu(options.height ?? 0),\n },\n \"p\",\n ),\n );\n this.root.push(new SmartArtGraphic(this.smartArtKey));\n }\n\n public prepForXml(context: IContext): IXmlableObject | undefined {\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 return super.prepForXml(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 new NextAttributeComponent({\n uri: {\n key: \"uri\",\n value: \"http://schemas.openxmlformats.org/drawingml/2006/diagram\",\n },\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 new NextAttributeComponent({\n xmlnsDgm: {\n key: \"xmlns:dgm\",\n value: \"http://schemas.openxmlformats.org/drawingml/2006/diagram\",\n },\n xmlnsR: {\n key: \"xmlns:r\",\n value: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\n },\n rDm: { key: \"r:dm\", value: `{smartart:${smartArtKey}}` },\n rLo: { key: \"r:lo\", value: `{smartart-lo:${smartArtKey}}` },\n rQs: { key: \"r:qs\", value: `{smartart-qs:${smartArtKey}}` },\n rCs: { key: \"r:cs\", value: `{smartart-cs:${smartArtKey}}` },\n }),\n );\n }\n}\n","import { escapeRegex, 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 hyperlinks.forEach((h, i) => {\n result = result.replace(\n new RegExp(`\\\\{hlink:${escapeRegex(h.key)}\\\\}`, \"g\"),\n formatId(offset, i, \"rId\"),\n );\n });\n return result;\n}\n","import { escapeRegex, 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 mediaData.forEach((m, i) => {\n result = result.replace(\n new RegExp(`\\\\{media:${escapeRegex(m.fileName)}\\\\}`, \"g\"),\n formatId(offset, i, \"rId\"),\n );\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 mediaData.forEach((m, i) => {\n result = result.replace(\n new RegExp(`\\\\{video:${escapeRegex(m.fileName)}\\\\}`, \"g\"),\n formatId(offset, i, \"rId\"),\n );\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 prefix: string,\n mediaArray: readonly { readonly fileName: string }[],\n): readonly { readonly fileName: string }[] {\n const pattern = new RegExp(`\\\\{${escapeRegex(prefix)}([^}]+)\\\\}`, \"g\");\n const keys = new Set<string>();\n for (const match of xml.matchAll(pattern)) {\n keys.add(match[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 { 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 { IContext } from \"@file/xml-components\";\nimport {\n addSmartArtRelationships,\n collectPlaceholderKeys,\n getReferencedMedia,\n hasPlaceholders,\n replaceChartPlaceholders,\n replaceImagePlaceholders,\n replaceSmartArtPlaceholders,\n} from \"@office-open/core\";\nimport type { IXmlifyedFile } from \"@office-open/core\";\nimport { xml } from \"@office-open/xml\";\nimport type { Zippable } from \"fflate\";\n\ninterface IXmlifyedFileMapping {\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 prettifyXml?: string,\n overrides: readonly IXmlifyedFile[] = [],\n ): Zippable {\n const declaration = true;\n const indent = prettifyXml;\n const context: IContext = { fileData: file, stack: [] };\n\n const mapping: IXmlifyedFileMapping = {\n AppProperties: {\n data: xml(this.formatter.format(file.AppProperties, context), { declaration }),\n path: \"docProps/app.xml\",\n },\n Properties: {\n data: xml(this.formatter.format(file.CoreProperties, context), {\n declaration,\n indent,\n }),\n path: \"docProps/core.xml\",\n },\n FileRelationships: {\n data: xml(this.formatter.format(file.FileRelationships, context), {\n declaration: false,\n }),\n path: \"_rels/.rels\",\n },\n };\n\n // Static singletons (ImportedXmlComponent.toXml uses sourceXml directly)\n mapping[\"Theme\"] = {\n data: this.formatter.formatToXml(file.Theme, context, declaration),\n path: \"ppt/theme/theme1.xml\",\n };\n\n mapping[\"TableStyles\"] = {\n data: this.formatter.formatToXml(file.TableStyles, context, declaration),\n path: \"ppt/tableStyles.xml\",\n };\n\n mapping[\"PresProps\"] = {\n data: this.formatter.formatToXml(file.PresProps, context, declaration),\n path: \"ppt/presProps.xml\",\n };\n\n mapping[\"ViewProps\"] = {\n data: this.formatter.formatToXml(file.ViewProps, context, declaration),\n path: \"ppt/viewProps.xml\",\n };\n\n mapping[\"SlideMaster\"] = {\n data: this.formatter.formatToXml(file.SlideMaster, context, declaration),\n path: \"ppt/slideMasters/slideMaster1.xml\",\n };\n\n mapping[\"SlideMasterRelationships\"] = {\n data: xml(this.formatter.format(file.SlideMasterRelationships, context), {\n declaration: false,\n }),\n path: \"ppt/slideMasters/_rels/slideMaster1.xml.rels\",\n };\n\n mapping[\"SlideLayout\"] = {\n data: this.formatter.formatToXml(file.SlideLayout, context, declaration),\n path: \"ppt/slideLayouts/slideLayout1.xml\",\n };\n\n mapping[\"SlideLayoutRelationships\"] = {\n data: xml(this.formatter.format(file.SlideLayoutRelationships, context), {\n declaration: false,\n }),\n path: \"ppt/slideLayouts/_rels/slideLayout1.xml.rels\",\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: xml(this.formatter.format(new DefaultNotesMaster(), context), {\n declaration,\n indent,\n }),\n path: \"ppt/notesMasters/notesMaster1.xml\",\n };\n mapping[\"NotesMasterRelationships\"] = {\n data: xml(this.formatter.format(file.NotesMasterRelationships, context), {\n declaration: false,\n }),\n path: \"ppt/notesMasters/_rels/notesMaster1.xml.rels\",\n };\n }\n\n // Presentation + its relationships\n const presentationXml = this.formatter.formatToXml(\n file.PresentationWrapper.View,\n context,\n declaration,\n );\n let currentImageCount = 0;\n\n const mediaData = getReferencedMedia(presentationXml, file.Media.Array);\n const presImageOffset = file.PresentationWrapper.Relationships.RelationshipCount + 1;\n mediaData.forEach((image, idx) => {\n file.PresentationWrapper.Relationships.addRelationship(\n presImageOffset + idx,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n `../media/${image.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: xml(this.formatter.format(file.PresentationWrapper.Relationships, context), {\n declaration: false,\n }),\n path: \"ppt/_rels/presentation.xml.rels\",\n };\n\n // Slides — format BEFORE ContentTypes so ChartFrame.prepForXml() 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, declaration);\n\n const slideMediaData = getReferencedMedia(slideXml, file.Media.Array);\n const slideImageOffset = slideWrapper.Relationships.RelationshipCount + 1;\n slideMediaData.forEach((image, idx) => {\n slideWrapper.Relationships.addRelationship(\n slideImageOffset + idx,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n `../media/${image.fileName}`,\n );\n });\n\n let replacedSlideXml = replaceImagePlaceholders(\n slideXml,\n slideMediaData,\n slideImageOffset,\n );\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 slideCharts = file.Charts.Array.filter((c) =>\n slideChartKeys.includes(c.key),\n );\n\n replacedSlideXml = replaceChartPlaceholders(\n replacedSlideXml,\n slideCharts.map((c) => c.key),\n slideChartOffset,\n );\n\n slideCharts.forEach((chartData, 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 slideSmartArts = file.SmartArts.Array.filter((s) =>\n slideSmartArtKeys.includes(s.key),\n );\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 slideHlinks = file.Hyperlinks.Array.filter((h) =>\n slideHlinkKeys.includes(h.key),\n );\n const hlinkOffset = slideWrapper.Relationships.RelationshipCount + 1;\n\n replacedSlideXml = replaceHyperlinkPlaceholders(\n replacedSlideXml,\n slideHlinks,\n hlinkOffset,\n );\n\n slideHlinks.forEach((hlink, hi) => {\n slideWrapper.Relationships.addRelationship(\n hlinkOffset + hi,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",\n hlink.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 slideMediaRefs.forEach((media, mi) => {\n slideWrapper.Relationships.addRelationship(\n mediaOffset + mi,\n \"http://schemas.microsoft.com/office/2007/relationships/media\",\n `../media/${media.fileName}`,\n );\n });\n\n slideVideoRefs.forEach((video, vi) => {\n slideWrapper.Relationships.addRelationship(\n videoOffset + vi,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/video\",\n `../media/${video.fileName}`,\n );\n });\n }\n }\n\n mapping[`Slide${i}`] = {\n data: replacedSlideXml,\n path: `ppt/slides/slide${i + 1}.xml`,\n };\n\n mapping[`SlideRelationships${i}`] = {\n data: xml(this.formatter.format(slideWrapper.Relationships, context), {\n declaration: false,\n }),\n path: `ppt/slides/_rels/slide${i + 1}.xml.rels`,\n };\n }\n\n // ContentTypes — AFTER slides so Charts.Array is populated\n file.Charts.Array.forEach((_, i) => {\n file.ContentTypes.addChart(i + 1);\n });\n file.SmartArts.Array.forEach((_, 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: xml(this.formatter.format(file.ContentTypes, context), {\n declaration: false,\n }),\n path: \"[Content_Types].xml\",\n };\n\n // Convert mapping to Zippable (XML files: STORE, no compression benefit)\n const files: Zippable = {};\n for (const key of Object.keys(mapping)) {\n const entry = mapping[key];\n files[entry.path] = [textToUint8Array(entry.data), { level: 0 }];\n }\n\n // Add overrides\n for (const override of overrides) {\n files[override.path] =\n override.data instanceof Uint8Array\n ? override.data\n : textToUint8Array(override.data);\n }\n\n // Add chart parts (STORE — XML, no compression benefit)\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`] = [\n textToUint8Array(\n xml(this.formatter.format(chartData.chartSpace, context), {\n declaration,\n indent,\n }),\n ),\n { level: 0 },\n ];\n files[`ppt/charts/_rels/chart${i + 1}.xml.rels`] = [\n textToUint8Array(\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 { level: 0 },\n ];\n }\n\n // Add SmartArt diagram parts (STORE)\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`] = [\n textToUint8Array(\n xml(this.formatter.format(smartArtData.dataModel, context), {\n declaration,\n indent,\n }),\n ),\n { level: 0 },\n ];\n files[`ppt/diagrams/layout${i + 1}.xml`] = [\n textToUint8Array(getLayoutXml(smartArtData.layout)),\n { level: 0 },\n ];\n files[`ppt/diagrams/quickStyle${i + 1}.xml`] = [\n textToUint8Array(getStyleXml(smartArtData.style)),\n { level: 0 },\n ];\n files[`ppt/diagrams/colors${i + 1}.xml`] = [\n textToUint8Array(getColorXml(smartArtData.color)),\n { level: 0 },\n ];\n files[`ppt/diagrams/drawing${i + 1}.xml`] = [\n textToUint8Array(DEFAULT_DRAWING_XML),\n { level: 0 },\n ];\n }\n\n // Add notes slides (STORE)\n for (let i = 0; i < file.NotesSlides.length; i++) {\n const notesSlide = file.NotesSlides[i];\n files[`ppt/notesSlides/notesSlide${i + 1}.xml`] = [\n textToUint8Array(\n xml(this.formatter.format(notesSlide, context), {\n declaration,\n indent,\n }),\n ),\n { level: 0 },\n ];\n files[`ppt/notesSlides/_rels/notesSlide${i + 1}.xml.rels`] = [\n textToUint8Array(\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 { level: 0 },\n ];\n }\n\n // Add media files (STORE compression)\n for (const image of file.Media.Array) {\n files[`ppt/media/${image.fileName}`] = [image.data, { level: 0 }];\n if (image.type === \"svg\" && \"fallback\" in image) {\n const fallback = (\n image as import(\"@file/media/data\").IMediaData & {\n readonly fallback: { readonly fileName: string; readonly data: Uint8Array };\n }\n ).fallback;\n files[`ppt/media/${fallback.fileName}`] = [fallback.data, { level: 0 }];\n }\n }\n\n return files;\n }\n}\n\nfunction textToUint8Array(data: string | Uint8Array): Uint8Array {\n if (data instanceof Uint8Array) {\n return data;\n }\n return new TextEncoder().encode(data);\n}\n","import { Readable } from \"stream\";\n\nimport type { File } from \"@file/file\";\nimport { convertOutput, convertPrettifyType, OoxmlMimeType, PrettifyType } from \"@office-open/core\";\nexport { PrettifyType } from \"@office-open/core\";\nimport type { IXmlifyedFile, OutputByType, OutputType } from \"@office-open/core\";\nimport { type ZipOptions, Zip, ZipDeflate, ZipPassThrough, zipSync } from \"fflate\";\n\nimport { Compiler } from \"./next-compiler\";\n\nexport class Packer {\n public static async pack<T extends OutputType>(\n file: File,\n type: T,\n prettify?: boolean | (typeof PrettifyType)[keyof typeof PrettifyType],\n overrides: readonly IXmlifyedFile[] = [],\n ): Promise<OutputByType[T]> {\n const files = this.compiler.compile(file, convertPrettifyType(prettify), overrides);\n const zipped = zipSync(files, { level: 6 });\n return convertOutput(zipped, type, OoxmlMimeType.PPTX);\n }\n\n public static async toString(\n file: File,\n prettify?: boolean | (typeof PrettifyType)[keyof typeof PrettifyType],\n overrides: readonly IXmlifyedFile[] = [],\n ): Promise<string> {\n return Packer.pack(file, \"string\", prettify, overrides);\n }\n\n public static toArrayBuffer(\n file: File,\n prettify?: boolean | (typeof PrettifyType)[keyof typeof PrettifyType],\n overrides: readonly IXmlifyedFile[] = [],\n ): Promise<ArrayBuffer> {\n return Packer.pack(file, \"arraybuffer\", prettify, overrides);\n }\n\n public static toBuffer(\n file: File,\n prettify?: boolean | (typeof PrettifyType)[keyof typeof PrettifyType],\n overrides: readonly IXmlifyedFile[] = [],\n ): Promise<Buffer> {\n return Packer.pack(file, \"nodebuffer\", prettify, overrides);\n }\n\n public static toBlob(\n file: File,\n prettify?: boolean | (typeof PrettifyType)[keyof typeof PrettifyType],\n overrides: readonly IXmlifyedFile[] = [],\n ): Promise<Blob> {\n return Packer.pack(file, \"blob\", prettify, overrides);\n }\n\n public static toBase64String(\n file: File,\n prettify?: boolean | (typeof PrettifyType)[keyof typeof PrettifyType],\n overrides: readonly IXmlifyedFile[] = [],\n ): Promise<string> {\n return Packer.pack(file, \"base64\", prettify, overrides);\n }\n\n public static toStream(\n file: File,\n prettify?: boolean | (typeof PrettifyType)[keyof typeof PrettifyType],\n overrides: readonly IXmlifyedFile[] = [],\n ): Readable {\n const stream = new Readable({ read() {} });\n\n try {\n const files = this.compiler.compile(file, convertPrettifyType(prettify), overrides);\n\n const zip = new Zip((err, chunk, final) => {\n if (err) {\n stream.destroy(err);\n return;\n }\n if (!stream.destroyed) {\n stream.push(Buffer.from(chunk));\n }\n if (final) {\n stream.push(null);\n }\n });\n\n for (const [name, data] of Object.entries(files)) {\n const raw = Array.isArray(data) ? (data[0] as Uint8Array) : (data as Uint8Array);\n const level = Array.isArray(data) ? ((data[1] as ZipOptions).level ?? 6) : 6;\n const entry =\n level === 0 ? new ZipPassThrough(name) : new ZipDeflate(name, { level });\n zip.add(entry);\n entry.push(raw, true);\n }\n\n zip.end();\n } catch (err) {\n stream.destroy(err instanceof Error ? err : new Error(String(err)));\n }\n\n return stream;\n }\n\n private static readonly compiler = new Compiler();\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","import type { ParsedDocument } from \"@office-open/core\";\nimport { parseDocument } from \"@office-open/core\";\nimport { attr, attrNum, findChild } from \"@office-open/xml\";\n\nexport { parseDocument };\n\nexport interface PptxDocument {\n doc: ParsedDocument;\n slidePaths: string[];\n slideMasterPaths: string[];\n slideLayoutPaths: string[];\n notesSlidePaths: string[];\n slideWidth?: number;\n slideHeight?: number;\n}\n\nfunction resolveRelsPath(target: string): string {\n // Target is relative to the source part (ppt/presentation.xml), base is \"ppt/\"\n if (target.startsWith(\"/\")) return target.slice(1);\n if (target.startsWith(\"../\")) return target.replace(\"../\", \"\");\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\n/** Filter keys to XML files only (exclude .rels and binary files). */\nfunction xmlKeys(keys: string[]): string[] {\n return keys.filter((k) => k.endsWith(\".xml\"));\n}\n\nexport function parsePptx(data: Uint8Array): PptxDocument {\n const doc = parseDocument(data);\n\n // Parse slide size from presentation.xml\n const presentationXml = doc.get(\"ppt/presentation.xml\");\n let slideWidth: number | undefined;\n let slideHeight: number | undefined;\n if (presentationXml) {\n const sldSz = findChild(presentationXml, \"p:sldSz\");\n if (sldSz) {\n slideWidth = attrNum(sldSz, \"cx\");\n slideHeight = attrNum(sldSz, \"cy\");\n }\n }\n\n // Parse slide/slideMaster/notesSlide paths from presentation.xml.rels\n const relsXml = doc.get(\"ppt/_rels/presentation.xml.rels\");\n const slidePaths: string[] = [];\n const slideMasterPaths: string[] = [];\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 slideMasterPaths.push(path);\n } else if (\n type.includes(\"/slide\") &&\n !type.includes(\"slideLayout\") &&\n !type.includes(\"slideMaster\")\n ) {\n slidePaths.push(path);\n }\n }\n }\n\n sortByNumber(slidePaths);\n sortByNumber(slideMasterPaths);\n\n // slideLayouts are referenced from slideMaster rels, not presentation.xml.rels\n const slideLayoutPaths = sortByNumber(xmlKeys(doc.keys(\"ppt/slideLayouts/\")));\n\n // notesSlides are referenced from slide rels, not presentation.xml.rels\n const notesSlidePaths = sortByNumber(xmlKeys(doc.keys(\"ppt/notesSlides/\")));\n\n return {\n doc,\n slidePaths,\n slideMasterPaths,\n slideLayoutPaths,\n notesSlidePaths,\n slideWidth,\n slideHeight,\n };\n}\n","export { File as Presentation } from \"./file\";\nexport * from \"./file\";\nexport * from \"./export\";\nexport * from \"./util\";\nexport { parsePptx, parseDocument } from \"./parse\";\nexport type { PptxDocument } from \"./parse\";\n"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}