@office-open/pptx 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.d.mts +14 -3
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +517 -128
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -5
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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><#></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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"}
|
|
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><#></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 {\n AnimationClass,\n AnimationType,\n EmphasisType,\n IAnimationOptions,\n PathAnimationType,\n} from \"./types\";\n\n// --- Preset ID mappings ---\n\nconst ENTR_PRESET_IDS: Record<AnimationType, number> = {\n appear: 1,\n fade: 10,\n fly: 2,\n wipe: 22,\n dissolve: 34,\n split: 21,\n blinds: 25,\n checker: 26,\n randomBars: 24,\n wheel: 27,\n zoom: 10,\n cover: 28,\n push: 19,\n strips: 23,\n};\n\nconst EXIT_PRESET_IDS: Record<AnimationType, number> = {\n appear: 53,\n fade: 59,\n fly: 51,\n wipe: 72,\n dissolve: 84,\n split: 71,\n blinds: 75,\n checker: 76,\n randomBars: 74,\n wheel: 77,\n zoom: 60,\n cover: 78,\n push: 69,\n strips: 73,\n};\n\nconst EMPH_PRESET_IDS: Record<EmphasisType, number> = {\n growShrink: 53,\n spin: 54,\n growWithTurn: 56,\n colorChange: 29,\n transparency: 57,\n boldFlash: 50,\n wave: 55,\n pulse: 58,\n};\n\nconst PATH_PRESET_IDS: Record<PathAnimationType, number> = {\n customPath: 200,\n arc: 201,\n bounce: 202,\n circle: 203,\n curve: 204,\n figureEight: 205,\n line: 206,\n loop: 207,\n};\n\nconst DIRECTION_SUBTYPES: Record<string, number> = {\n left: 4,\n right: 8,\n up: 2,\n down: 1,\n horizontal: 16,\n vertical: 32,\n};\n\nconst FILTER_MAP: Record<string, string> = {\n fade: \"fade\",\n fly: \"fly\",\n wipe: \"wipe\",\n dissolve: \"dissolve\",\n split: \"split\",\n blinds: \"blinds\",\n checker: \"checkerboard\",\n randomBars: \"randombars\",\n wheel: \"wheel\",\n zoom: \"zoom\",\n cover: \"cover\",\n push: \"push\",\n strips: \"strips\",\n};\n\nconst DIRECTION_FILTER: Record<string, Record<string, string>> = {\n fly: { left: \"fromLeft\", right: \"fromRight\", up: \"fromTop\", down: \"fromBottom\" },\n wipe: { left: \"right\", right: \"left\", up: \"down\", down: \"up\" },\n split: { horizontal: \"horizontal\", vertical: \"vertical\" },\n blinds: { horizontal: \"horizontal\", vertical: \"vertical\" },\n checker: { horizontal: \"horizontal\", vertical: \"vertical\" },\n randomBars: { horizontal: \"horizontal\", vertical: \"vertical\" },\n cover: { left: \"left\", right: \"right\", up: \"top\", down: \"bottom\" },\n push: { left: \"left\", right: \"right\", up: \"top\", down: \"bottom\" },\n strips: {\n left: \"fromBottomLeft\",\n right: \"fromTopRight\",\n up: \"fromBottomRight\",\n down: \"fromTopLeft\",\n },\n wheel: {},\n};\n\nconst PATH_STRINGS: Record<PathAnimationType, string> = {\n customPath: \"\",\n arc: \"M 0 0 C 50 -100 100 -100 150 0\",\n bounce: \"M 0 0 L 50 0 C 50 -30 30 -50 0 -50 C -30 -50 -50 -30 -50 0 L 50 0\",\n circle: \"M 0 0 C 50 -50 100 0 50 50 C 0 100 -50 50 0 0\",\n curve: \"M 0 0 C 50 -80 100 -80 150 0 C 200 80 250 80 300 0\",\n figureEight:\n \"M 0 0 C 50 -50 100 0 50 50 C 0 100 -50 50 0 0 C -50 -50 -100 0 -50 50 C 0 100 50 50 0 0\",\n line: \"M 0 0 L 200 0\",\n loop: \"M 0 0 C 50 -80 100 0 50 80 C 0 160 -50 80 0 0\",\n};\n\n// --- Helper functions ---\n\nfunction resolvePresetId(options: IAnimationOptions): number {\n const cls: AnimationClass = options.class ?? \"entr\";\n\n if (cls === \"emph\" && options.emphasisType) {\n return EMPH_PRESET_IDS[options.emphasisType] ?? 0;\n }\n\n if (options.pathType) {\n return PATH_PRESET_IDS[options.pathType] ?? 200;\n }\n\n const type = options.type ?? \"appear\";\n const map = cls === \"exit\" ? EXIT_PRESET_IDS : ENTR_PRESET_IDS;\n return map[type] ?? 0;\n}\n\nfunction resolvePresetClass(options: IAnimationOptions): AnimationClass {\n if (options.pathType) return \"emph\";\n return options.class ?? \"entr\";\n}\n\nfunction resolvePresetSubtype(options: IAnimationOptions): number {\n if (options.direction) {\n return DIRECTION_SUBTYPES[options.direction] ?? 0;\n }\n return 0;\n}\n\nfunction buildEntrOrExitEffects(\n options: IAnimationOptions,\n spid: number,\n ids: { set: number; effect: number },\n): XmlComponent[] {\n const children: XmlComponent[] = [];\n\n // p:set — make shape visible (entr) or hidden (exit)\n const cls = options.class ?? \"entr\";\n const visibility = cls === \"exit\" ? \"hidden\" : \"visible\";\n children.push(\n new BuilderElement({\n name: \"p:set\",\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.set },\n dur: { key: \"dur\", value: \"1\" },\n fill: { key: \"fill\", value: \"hold\" },\n },\n children: [\n new BuilderElement({\n name: \"p:stCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: { delay: { key: \"delay\", value: \"0\" } },\n }),\n ],\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:tgtEl\",\n children: [\n new BuilderElement({\n name: \"p:spTgt\",\n attributes: { spid: { key: \"spid\", value: spid } },\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:attrNameLst\",\n children: [new StringContainer(\"p:attrName\", \"style.visibility\")],\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:to\",\n children: [\n new BuilderElement({\n name: \"p:strVal\",\n attributes: { val: { key: \"val\", value: visibility } },\n }),\n ],\n }),\n ],\n }),\n );\n\n // p:animEffect for non-appear types\n if (options.type !== \"appear\") {\n const filterBase = FILTER_MAP[options.type ?? \"fade\"];\n const dirMap = DIRECTION_FILTER[options.type ?? \"fade\"];\n const dirFilter = options.direction && dirMap ? dirMap[options.direction] : undefined;\n\n let filter = filterBase;\n if (options.type === \"wheel\") {\n filter = \"wheel(4)\";\n } else if (options.type === \"split\") {\n const dir = options.direction ?? \"horizontal\";\n filter = `split(${dir})`;\n } else if (dirFilter) {\n filter = `${filterBase}(${dirFilter})`;\n }\n\n const transition = cls === \"exit\" ? \"out\" : \"in\";\n\n children.push(\n new BuilderElement({\n name: \"p:animEffect\",\n attributes: {\n transition: { key: \"transition\", value: transition },\n filter: { key: \"filter\", value: filter },\n },\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.effect },\n dur: { key: \"dur\", value: String(options.duration ?? 500) },\n fill: { key: \"fill\", value: \"hold\" },\n },\n }),\n new BuilderElement({\n name: \"p:tgtEl\",\n children: [\n new BuilderElement({\n name: \"p:spTgt\",\n attributes: { spid: { key: \"spid\", value: spid } },\n }),\n ],\n }),\n ],\n }),\n ],\n }),\n );\n }\n\n return children;\n}\n\nfunction buildEmphasisEffects(\n options: IAnimationOptions,\n spid: number,\n ids: { set: number; effect: number },\n): XmlComponent[] {\n const emphType = options.emphasisType ?? \"growShrink\";\n const children: XmlComponent[] = [];\n const dur = String(options.duration ?? 500);\n\n // Common target element\n const tgtEl = new BuilderElement({\n name: \"p:tgtEl\",\n children: [\n new BuilderElement({\n name: \"p:spTgt\",\n attributes: { spid: { key: \"spid\", value: spid } },\n }),\n ],\n });\n\n switch (emphType) {\n case \"growShrink\":\n children.push(\n new BuilderElement({\n name: \"p:animScale\",\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.effect },\n dur: { key: \"dur\", value: dur },\n fill: { key: \"fill\", value: \"hold\" },\n ...(options.autoReverse\n ? { autoRev: { key: \"autoRev\", value: 1 } }\n : {}),\n },\n children: [\n new BuilderElement({\n name: \"p:stCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: {\n delay: { key: \"delay\", value: \"0\" },\n },\n }),\n ],\n }),\n ],\n }),\n tgtEl,\n ],\n }),\n new BuilderElement({\n name: \"p:by\",\n attributes: {\n x: { key: \"x\", value: \"150000\" },\n y: { key: \"y\", value: \"150000\" },\n },\n }),\n ],\n }),\n );\n break;\n\n case \"spin\":\n children.push(\n new BuilderElement({\n name: \"p:animRot\",\n attributes: { by: { key: \"by\", value: \"3600000\" } },\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.effect },\n dur: { key: \"dur\", value: dur },\n fill: { key: \"fill\", value: \"hold\" },\n },\n children: [\n new BuilderElement({\n name: \"p:stCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: {\n delay: { key: \"delay\", value: \"0\" },\n },\n }),\n ],\n }),\n ],\n }),\n tgtEl,\n ],\n }),\n ],\n }),\n );\n break;\n\n case \"colorChange\": {\n const color = options.color ?? \"FF0000\";\n children.push(\n new BuilderElement({\n name: \"p:animClr\",\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.effect },\n dur: { key: \"dur\", value: dur },\n fill: { key: \"fill\", value: \"hold\" },\n },\n children: [\n new BuilderElement({\n name: \"p:stCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: {\n delay: { key: \"delay\", value: \"0\" },\n },\n }),\n ],\n }),\n ],\n }),\n tgtEl,\n ],\n }),\n new BuilderElement({\n name: \"p:to\",\n children: [\n new BuilderElement({\n name: \"a:srgbClr\",\n attributes: { val: { key: \"val\", value: color } },\n }),\n ],\n }),\n ],\n }),\n );\n break;\n }\n\n case \"transparency\":\n children.push(\n new BuilderElement({\n name: \"p:anim\",\n attributes: {\n calcmode: { key: \"calcmode\", value: \"lin\" },\n valueType: { key: \"valueType\", value: \"num\" },\n from: { key: \"from\", value: \"0\" },\n to: { key: \"to\", value: \"1\" },\n },\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.effect },\n dur: { key: \"dur\", value: dur },\n fill: { key: \"fill\", value: \"hold\" },\n },\n }),\n tgtEl,\n new BuilderElement({\n name: \"p:attrNameLst\",\n children: [new StringContainer(\"p:attrName\", \"style.opacity\")],\n }),\n ],\n }),\n ],\n }),\n );\n break;\n\n default:\n // boldFlash, wave, pulse, growWithTurn — use p:animEffect with emph filter\n children.push(\n new BuilderElement({\n name: \"p:animEffect\",\n attributes: {\n transition: { key: \"transition\", value: \"in\" },\n filter: { key: \"filter\", value: emphType },\n },\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.effect },\n dur: { key: \"dur\", value: dur },\n fill: { key: \"fill\", value: \"hold\" },\n },\n }),\n tgtEl,\n ],\n }),\n ],\n }),\n );\n break;\n }\n\n return children;\n}\n\nfunction buildPathEffects(\n options: IAnimationOptions,\n spid: number,\n ids: { set: number; effect: number },\n): XmlComponent[] {\n const pathStr = options.path ?? PATH_STRINGS[options.pathType ?? \"customPath\"] ?? \"\";\n const dur = String(options.duration ?? 1000);\n\n return [\n new BuilderElement({\n name: \"p:animMotion\",\n attributes: {\n origin: { key: \"origin\", value: \"layout\" },\n path: { key: \"path\", value: pathStr },\n },\n children: [\n new BuilderElement({\n name: \"p:cBhvr\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: ids.effect },\n dur: { key: \"dur\", value: dur },\n fill: { key: \"fill\", value: \"hold\" },\n },\n children: [\n new BuilderElement({\n name: \"p:stCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: { delay: { key: \"delay\", value: \"0\" } },\n }),\n ],\n }),\n ],\n }),\n 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// --- Main class ---\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 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 if (options.trigger === \"afterPrevious\" && i > 0) {\n clickGroupDelay += (options.duration ?? 500) + (options.delay ?? 0);\n }\n if (options.trigger === \"onClick\" || options.trigger === undefined) {\n clickGroupDelay = 0;\n }\n\n const groupCtnId = id++;\n const effectCtnId = id++;\n const setCtnId = id++;\n const effectCtnId2 = id++;\n\n const presetId = resolvePresetId(options);\n const presetClass = resolvePresetClass(options);\n const presetSubtype = resolvePresetSubtype(options);\n\n // Build effect children based on animation class\n let effectChildren: XmlComponent[];\n\n if (options.pathType) {\n effectChildren = buildPathEffects(options, spid, {\n set: setCtnId,\n effect: effectCtnId2,\n });\n } else if (presetClass === \"emph\") {\n effectChildren = buildEmphasisEffects(options, spid, {\n set: setCtnId,\n effect: effectCtnId2,\n });\n } else {\n effectChildren = buildEntrOrExitEffects(options, spid, {\n set: setCtnId,\n effect: effectCtnId2,\n });\n }\n\n // Build cTn attributes with optional speed/repeatCount/autoReverse\n const cTnAttrs: Record<string, { key: string; value: string | number }> = {\n id: { key: \"id\", value: effectCtnId },\n presetID: { key: \"presetID\", value: presetId },\n presetClass: { key: \"presetClass\", value: presetClass },\n presetSubtype: { key: \"presetSubtype\", value: presetSubtype },\n fill: { key: \"fill\", value: \"hold\" },\n nodeType: { key: \"nodeType\", value: nodeType },\n };\n if (options.speed !== undefined)\n cTnAttrs.spd = { key: \"spd\", value: String(options.speed) };\n if (options.repeatCount !== undefined)\n cTnAttrs.repeatCount = { key: \"repeatCount\", value: String(options.repeatCount) };\n if (options.autoReverse) cTnAttrs.autoRev = { key: \"autoRev\", value: 1 };\n\n // Build effect cTn\n const effectCtn = new BuilderElement({\n name: \"p:cTn\",\n attributes: cTnAttrs,\n children: [\n new BuilderElement({\n name: \"p:stCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: {\n delay: { key: \"delay\", value: String(options.delay ?? 0) },\n },\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:childTnLst\",\n children: effectChildren,\n }),\n ],\n });\n\n // Wrap in inner par\n const innerPar = new BuilderElement({\n name: \"p:par\",\n children: [effectCtn],\n });\n\n // Wrap in outer par (click group)\n const outerPar = new BuilderElement({\n name: \"p:par\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: groupCtnId },\n fill: { key: \"fill\", value: \"hold\" },\n },\n children: [\n new BuilderElement({\n name: \"p:stCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: { delay: { key: \"delay\", value: \"0\" } },\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:childTnLst\",\n children: [innerPar],\n }),\n ],\n }),\n ],\n });\n\n animationNodes.push(outerPar);\n }\n\n // Assemble the full timing tree\n this.root.push(\n new BuilderElement({\n name: \"p:tnLst\",\n children: [\n new BuilderElement({\n name: \"p:par\",\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: rootCtnId },\n dur: { key: \"dur\", value: \"indefinite\" },\n restart: { key: \"restart\", value: \"never\" },\n nodeType: { key: \"nodeType\", value: \"tmRoot\" },\n },\n children: [\n new BuilderElement({\n name: \"p:childTnLst\",\n children: [\n new BuilderElement({\n name: \"p:seq\",\n attributes: {\n concurrent: { key: \"concurrent\", value: 1 },\n nextAc: { key: \"nextAc\", value: \"seek\" },\n },\n children: [\n new BuilderElement({\n name: \"p:cTn\",\n attributes: {\n id: { key: \"id\", value: seqCtnId },\n dur: {\n key: \"dur\",\n value: \"indefinite\",\n },\n nodeType: {\n key: \"nodeType\",\n value: \"mainSeq\",\n },\n },\n children: [\n new BuilderElement({\n name: \"p:childTnLst\",\n children: animationNodes,\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:prevCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: {\n evt: {\n key: \"evt\",\n value: \"onPrev\",\n },\n delay: {\n key: \"delay\",\n value: \"0\",\n },\n },\n children: [\n new BuilderElement({\n name: \"p:tgtEl\",\n children: [\n new BuilderElement({\n name: \"p:sldTgt\",\n }),\n ],\n }),\n ],\n }),\n ],\n }),\n new BuilderElement({\n name: \"p:nextCondLst\",\n children: [\n new BuilderElement({\n name: \"p:cond\",\n attributes: {\n evt: {\n key: \"evt\",\n value: \"onNext\",\n },\n delay: {\n key: \"delay\",\n value: \"0\",\n },\n },\n children: [\n new BuilderElement({\n name: \"p:tgtEl\",\n children: [\n new BuilderElement({\n name: \"p:sldTgt\",\n }),\n ],\n }),\n ],\n }),\n ],\n }),\n ],\n }),\n ],\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":";;;;;;;;;;;;;;AAQA,MAAM,YACF;AACJ,MAAM,aAAa;AACnB,MAAM,oBACF;AACJ,MAAM,oBACF;AACJ,MAAM,aAAa;AACnB,MAAM,aAAa;AACnB,MAAM,aAAa;AA6CnB,MAAM,kBAAoC,CACtC,EAAE,OAAO,EAAE,OAAO,gEAAgE,EAAE,EACpF,GA/B4C;CAC5C;EACI,MAAM;EACN,aAAa;EACb,KAAK;EACR;CACD;EAAE,MAAM;EAAW,aAAa;EAAmB,KAAK;EAAO;CAC/D;EAAE,MAAM;EAAW,aAAa;EAAa,KAAK;EAAO;CACzD;EAAE,MAAM;EAAW,aAAa;EAAc,KAAK;EAAQ;CAC3D;EAAE,MAAM;EAAW,aAAa;EAAa,KAAK;EAAO;CACzD;EAAE,MAAM;EAAY,aAAa;EAAW,KAAK;EAAyB;CAC1E;EACI,MAAM;EACN,aAAa;EACb,KAAK;EACR;CACD;EACI,MAAM;EACN,aAAa;EACb,KAAK;EACR;CACD;EAAE,MAAM;EAAY,aAAa;EAAY,KAAK;EAAyB;CAC3E;EAAE,MAAM;EAAY,aAAa;EAAmB,KAAK;EAAsC;CAC/F;EAAE,MAAM;EAAY,aAAa;EAAmB,KAAK;EAAsC;CAC/F;EAAE,MAAM;EAAY,aAtCpB;EAsCkD,KAAK;EAAsB;CAC7E;EAAE,MAAM;EAAY,aArCpB;EAqCkD,KAAK;EAAsB;CAC7E;EAAE,MAAM;EAAY,aApCpB;EAoCoD,KAAK;EAAwB;CACpF,CAIqB,KAAK,MAAM;AACzB,KAAI,EAAE,SAAS,UACX,QAAO,EAAE,SAAS,EAAE,OAAO;EAAE,aAAa,EAAE;EAAa,WAAW,EAAE;EAAK,EAAE,EAAE;AAEnF,QAAO,EAAE,UAAU,EAAE,OAAO;EAAE,aAAa,EAAE;EAAa,UAAU,EAAE;EAAK,EAAE,EAAE;EACjF,CACL;AAED,IAAa,eAAb,cAAkC,iBAAiB;CAC/C,iBAAkD,EAAE;CAEpD,cAAqB;AACjB,QAAM,QAAQ;;CAGlB,SAAgB,OAAqB;AACjC,OAAK,eAAe,KAAK;GACrB,MAAM;GACN,aAAa;GACb,KAAK,oBAAoB,MAAM;GAClC,CAAC;;CAGN,cAAqB,OAAqB;AACtC,OAAK,eAAe,KAAK;GACrB,MAAM;GACN,aAAa;GACb,KAAK,8BAA8B,MAAM;GAC5C,CAAC;;CAGN,SAAgB,OAAqB;AACjC,OAAK,eAAe,KAAK;GACrB,MAAM;GACN,aAAa;GACb,KAAK,oBAAoB,MAAM;GAClC,CAAC;;CAGN,eAAsB,OAAqB;AACvC,OAAK,eAAe,KAAK;GACrB,MAAM;GACN,aAAa;GACb,KAAK,qBAAqB,MAAM;GACnC,CAAC;;CAGN,iBAAwB,OAAqB;AACzC,OAAK,eAAe,KAAK;GACrB,MAAM;GACN,aACI;GACJ,KAAK,uBAAuB,MAAM;GACrC,CAAC;;CAGN,gBAAuB,OAAqB;AACxC,OAAK,eAAe,KAAK;GACrB,MAAM;GACN,aAAa;GACb,KAAK,2BAA2B,MAAM;GACzC,CAAC;;CAGN,iBAAwB,OAAqB;AACzC,OAAK,eAAe,KAAK;GACrB,MAAM;GACN,aACI;GACJ,KAAK,uBAAuB,MAAM;GACrC,CAAC;;CAGN,kBAAyB,OAAqB;AAC1C,OAAK,eAAe,KAAK;GACrB,MAAM;GACN,aAAa;GACb,KAAK,wBAAwB,MAAM;GACtC,CAAC;;CAGN,WAA2B,UAAoC;EAC3D,MAAM,WAAW,CAAC,GAAG,gBAAgB;AACrC,OAAK,MAAM,KAAK,KAAK,eACjB,KAAI,EAAE,SAAS,UACX,UAAS,KAAK,EACV,SAAS,EAAE,OAAO;GAAE,aAAa,EAAE;GAAa,WAAW,EAAE;GAAK,EAAE,EACvE,CAAC;MAEF,UAAS,KAAK,EACV,UAAU,EAAE,OAAO;GAAE,aAAa,EAAE;GAAa,UAAU,EAAE;GAAK,EAAE,EACvE,CAAC;AAGV,SAAO,EAAE,OAAO,UAAU;;;;;;;;;;;;ACzIlC,IAAa,iBAAb,cAAoC,iBAAiB;CACjD;CAEA,YAAmB,SAAiC;AAChD,QAAM,oBAAoB;AAC1B,OAAK,UAAU;;CAGnB,WAA2B,UAAoC;AAC3D,SAAO,uBAAuB,KAAK,QAAQ;;;;;ACxBnD,IAAa,sBAAb,MAAiC;CAC7B,sBAAuB,IAAI,KAA6B;CAExD,aAAoB,KAAa,KAAa,SAAwB;AAClE,OAAK,IAAI,IAAI,KAAK;GAAE;GAAK;GAAK;GAAS,CAAC;;CAG5C,IAAW,QAAmC;AAC1C,SAAO,CAAC,GAAG,KAAK,IAAI,QAAQ,CAAC;;;;;;;;;;ACUrC,MAAa,wBAAwB,aAA6D;CAC9F,MAAM;EACF,GAAGA,qBAAmB,QAAQ,MAAM;EACpC,GAAGA,qBAAmB,QAAQ,OAAO;EACxC;CACD,QAAQ;EACJ,GAAG,KAAK,MAAM,QAAQ,MAAM;EAC5B,GAAG,KAAK,MAAM,QAAQ,OAAO;EAChC;CACD,MAAM,QAAQ;CACd,UAAU,QAAQ,WAAW,QAAQ,WAAW,MAAS,KAAA;CAC5D;AAED,IAAa,QAAb,MAAmB;CACf;CAEA,cAAqB;AACjB,OAAK,sBAAM,IAAI,KAAyB;;CAG5C,SAAgB,KAAa,WAA6B;AACtD,OAAK,IAAI,IAAI,KAAK,UAAU;;CAGhC,SAAgB,KAAa,WAA6B;AACtD,OAAK,IAAI,IAAI,KAAK,UAAU;;CAGhC,IAAW,QAA+B;AACtC,SAAO,CAAC,GAAG,KAAK,IAAI,QAAQ,CAAC;;;;;;;;;;ACvCrC,IAAa,mBAAb,cAAsC,aAAa;CAC/C;CAEA,YAAmB,SAAmC,SAAoB,KAAK;AAC3E,QAAM,GAAG,OAAO,OAAO;AACvB,OAAK,OAAO,uBAAuB,SAAS,GAAG,OAAO,OAAO;;CAGjE,WAA2B,SAA+C;AACtE,SAAO,KAAK,KAAK,gBAAgB,QAAQ;;;;;;;;AChBjD,IAAa,uBAAb,cAA0C,aAAa;CACnD,YAAmB,SAAoC;AACnD,QAAM,YAAY;AAClB,OAAK,KAAK,KAAK,IAAI,iBAAiB,WAAW,EAAE,CAAC,CAAC;;;;;;;;ACL3D,IAAa,gCAAb,cAAmD,eAAmB;CAClE,YAAmB,KAAa,GAAG,OAAe,IAAI;AAClD,QAAM;GACF,MAAM;GACN,UAAU;IACN,IAAI,eAAe;KACf,MAAM;KACN,YAAY;MACR,IAAI;OAAE,KAAK;OAAM,OAAO;OAAI;MAC5B,MAAM;OAAE,KAAK;OAAQ,OAAO;OAAM;MACrC;KACJ,CAAC;IACF,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAC;IAC5C,IAAI,eAAe,EAAE,MAAM,UAAU,CAAC;IACzC;GACJ,CAAC;;;;;;;;ACbV,SAAgB,+BAA+B,OAAe,SAAyB;AACnF,QAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;;AAGlD,SAAgB,kCAAkC,OAAe,SAAiB;AAC9E,QAAO,gBAAgB,MAAM,EAAE,MAAM,CAAC,CAAC;;;;;;AAO3C,IAAa,4BAAb,cAA+C,eAE5C;CACC;CAEA,YAAmB,OAAe,SAAS;AACvC,QAAM,EAAE,MAAM,gBAAgB,CAAC;AAC/B,OAAK,OAAO;;CAGhB,WACI,UAC0B;AAC1B,SAAO,+BAA+B,KAAK,KAAK;;;;;AC5BxD,MAAa,gBAAgB;CACzB,MAAM;CACN,QAAQ;CACR,OAAO;CACP,SAAS;CACZ;AAsCD,SAAS,oBAAoB,SAA0C;CACnE,MAAM,WAA6B,EAAE;AAErC,KAAI,QAAQ,SAAS,QAAQ;AACzB,WAAS,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC;AACjC,SAAO;;AAGX,KAAI,QAAQ,MACR,UAAS,KAAK,EACV,WAAW,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,QAAQ,MAAM,QAAQ,KAAK,GAAG,EAAE,EAAE,EAAE,CAAC,EACnF,CAAC;AAGN,KAAI,QAAQ,SAAS,KAAA,EACjB,UAAS,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,GAAG,QAAQ,KAAK,IAAI,EAAE,EAAE,CAAC;AAG1E,UAAS,KAAK,EACV,YAAY,EACR,OAAO;EACH,UAAU;EACV,QAAQ;EACR,aAAa;EACb,SAAS;EACZ,EACJ,EACJ,CAAC;AAEF,KAAI,QAAQ,SAAS,OACjB,UAAS,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,QAAQ,QAAQ,KAAK,EAAE,EAAE,CAAC;UAChE,QAAQ,SAAS,WAAW;EACnC,MAAM,UAA2C,EAAE,MAAM,QAAQ,UAAU,gBAAgB;AAC3F,MAAI,QAAQ,YAAY,KAAA,EAAW,SAAQ,UAAU,QAAQ;AAC7D,WAAS,KAAK,EAAE,eAAe,EAAE,OAAO,SAAS,EAAE,CAAC;;AAGxD,QAAO;;;;;;AAOX,SAAgB,yBACZ,SAC0B;CAC1B,MAAM,WAA6B,EAAE;CAErC,MAAM,QAAyC,EAAE;AACjD,KAAI,QAAQ,UAAW,OAAM,OAAO,cAAc,QAAQ;AAC1D,KAAI,QAAQ,gBAAgB,KAAA,EAAW,OAAM,MAAM,QAAQ;AAC3D,KAAI,QAAQ,iBAAiB,KAAA,EAAW,OAAM,OAAO,QAAQ;AAC7D,KAAI,QAAQ,gBAAgB,KAAA,EAAW,OAAM,OAAO,QAAQ;AAC5D,KAAI,QAAQ,eAAe,KAAA,EAAW,OAAM,WAAW,QAAQ;AAC/D,KAAI,OAAO,KAAK,MAAM,CAAC,SAAS,EAAG,UAAS,KAAK,EAAE,OAAO,OAAO,CAAC;AAElE,KAAI,QAAQ,gBAAgB,KAAA,EACxB,UAAS,KAAK,EACV,WAAW,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,QAAQ,cAAc,KAAM,EAAE,EAAE,CAAC,EAC9E,CAAC;AAGN,KAAI,QAAQ,sBAAsB,KAAA,EAC9B,UAAS,KAAK,EACV,WAAW,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,QAAQ,oBAAoB,KAAK,EAAE,EAAE,CAAC,EACnF,CAAC;AAGN,KAAI,QAAQ,iBAAiB,KAAA,KAAa,QAAQ,cAAc,KAAA,EAC5D,UAAS,KAAK,EACV,YAAY,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,QAAQ,gBAAgB,GAAG,EAAE,EAAE,CAAC,EAC9E,CAAC;AAGN,KAAI,QAAQ,cAAc,KAAA,EACtB,UAAS,KAAK,EACV,YAAY,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,QAAQ,WAAW,EAAE,EAAE,CAAC,EACtE,CAAC;AAGN,KAAI,QAAQ,OACR,UAAS,KAAK,GAAG,oBAAoB,QAAQ,OAAO,CAAC;UAC9C,QAAQ,eAAe,MAC9B,UAAS,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC;AAGrC,KAAI,SAAS,WAAW,EAAG,QAAO,KAAA;AAElC,QAAO,EACH,SAAS,SAAS,WAAW,KAAK,WAAW,SAAS,KAAK,SAAS,KAAK,UAC5E;;;;;;;AAQL,IAAa,sBAAb,cAAyC,aAAa;CAClD;CAEA,YAAmB,UAAuC,EAAE,EAAE;AAC1D,QAAM,QAAQ;AACd,OAAK,UAAU;;CAGnB,WACI,UAC0B;AAC1B,SAAO,yBAAyB,KAAK,QAAQ;;CAGjD,QAAuB;AACnB,SAAO,4BAA4B,KAAK,QAAQ;;;AAIxD,SAAS,uBAAuB,SAAgC;AAC5D,KAAI,QAAQ,SAAS,OACjB,QAAO;CAGX,IAAI,IAAI;AACR,KAAI,QAAQ,MACR,MAAK,sBAAsB,MAAM,EAAE,KAAK,QAAQ,MAAM,QAAQ,KAAK,GAAG,EAAE,CAAC,CAAC;AAE9E,KAAI,QAAQ,SAAS,KAAA,EACjB,MAAK,aAAa,MAAM,EAAE,KAAK,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC;AAEzD,MAAK,YAAY,MAAM;EAAE,UAAU;EAAS,QAAQ;EAAwB,aAAa;EAAM,SAAS;EAAK,CAAC,CAAC;AAC/G,KAAI,QAAQ,SAAS,OACjB,MAAK,YAAY,MAAM,EAAE,MAAM,QAAQ,QAAQ,KAAK,CAAC,CAAC;UAC/C,QAAQ,SAAS,WAAW;EACnC,MAAM,UAAuD,EACzD,MAAM,QAAQ,UAAU,gBAC3B;AACD,MAAI,QAAQ,YAAY,KAAA,EAAW,SAAQ,UAAU,QAAQ;AAC7D,OAAK,eAAe,MAAM,QAAQ,CAAC;;AAEvC,QAAO;;AAGX,SAAgB,4BAA4B,SAA8C;CACtF,MAAM,UAAU,MAAM;EAClB,MAAM,QAAQ,YAAY,cAAc,QAAQ,aAAa,KAAA;EAC7D,KAAK,QAAQ;EACb,MAAM,QAAQ;EACd,MAAM,QAAQ;EACd,UAAU,QAAQ;EACrB,CAAC;CAEF,MAAM,OAAiB,EAAE;AAEzB,KAAI,QAAQ,gBAAgB,KAAA,EACxB,MAAK,KAAK,qBAAqB,MAAM,EAAE,KAAK,QAAQ,cAAc,KAAM,CAAC,CAAC,cAAc;AAG5F,KAAI,QAAQ,sBAAsB,KAAA,EAC9B,MAAK,KACD,qBAAqB,MAAM,EAAE,KAAK,QAAQ,oBAAoB,KAAK,CAAC,CAAC,cACxE;AAGL,KAAI,QAAQ,iBAAiB,KAAA,KAAa,QAAQ,cAAc,KAAA,EAC5D,MAAK,KAAK,sBAAsB,MAAM,EAAE,KAAK,QAAQ,gBAAgB,GAAG,CAAC,CAAC,eAAe;AAG7F,KAAI,QAAQ,cAAc,KAAA,EACtB,MAAK,KAAK,sBAAsB,MAAM,EAAE,KAAK,QAAQ,WAAW,CAAC,CAAC,eAAe;AAGrF,KAAI,QAAQ,OACR,MAAK,KAAK,uBAAuB,QAAQ,OAAO,CAAC;UAC1C,QAAQ,eAAe,MAC9B,MAAK,KAAK,cAAc;AAG5B,KAAI,CAAC,WAAW,KAAK,WAAW,EAAG,QAAO;AAC1C,KAAI,KAAK,WAAW,EAAG,QAAO,SAAS,QAAQ;AAC/C,QAAO,SAAS,QAAQ,GAAG,KAAK,KAAK,GAAG,CAAC;;;;AC7N7C,IAAI,kBAAkB;AAEtB,MAAa,iBAAiB;CAC1B,QAAQ;CACR,QAAQ;CACR,MAAM;CACT;AAED,MAAa,cAAc;CACvB,QAAQ;CACR,QAAQ;CACR,MAAM;CACT;AAED,MAAa,qBAAqB;CAC9B,MAAM;CACN,KAAK;CACL,OAAO;CACV;;;;;;AAiCD,SAAgB,mBACZ,SACA,cACA,YAC0B;CAC1B,MAAM,WAA6B,EAAE;CAErC,MAAM,QAAmD,EAAE;AAC3D,KAAI,QAAQ,SAAU,OAAM,KAAK,QAAQ,WAAW;AACpD,KAAI,QAAQ,SAAS,KAAA,EAAW,OAAM,IAAI,QAAQ;AAClD,KAAI,QAAQ,WAAW,KAAA,EAAW,OAAM,IAAI,QAAQ;AACpD,KAAI,QAAQ,UAAW,OAAM,IAAI,eAAe,QAAQ;AACxD,KAAI,QAAQ,KAAM,OAAM,OAAO,QAAQ;AACvC,KAAI,QAAQ,OAAQ,OAAM,SAAS,YAAY,QAAQ;AACvD,KAAI,QAAQ,aAAa,KAAA,EAAW,OAAM,WAAW,QAAQ;AAC7D,KAAI,QAAQ,eACR,OAAM,MAAM,mBAAmB,QAAQ,mBAAmB,QAAQ;AACtE,KAAI,QAAQ,YAAY,KAAA,EAAW,OAAM,MAAM,QAAQ;AACvD,KAAI,QAAQ,YAAY,KAAA,EAAW,OAAM,UAAU,QAAQ;AAC3D,KAAI,QAAQ,UAAU,KAAA,EAAW,OAAM,QAAQ,QAAQ;AACvD,KAAI,OAAO,KAAK,MAAM,CAAC,SAAS,EAAG,UAAS,KAAK,EAAE,OAAO,OAAO,CAAC;AAElE,KAAI,QAAQ,MAAM;AACd,WAAS,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,QAAQ,MAAM,EAAE,EAAE,CAAC;AACnE,WAAS,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,QAAQ,MAAM,EAAE,EAAE,CAAC;;AAGpE,KAAI,QAAQ,aAAa,cAAc;EACnC,MAAM,aAAqC,EAAE,QAAQ,UAAU,aAAa,IAAI;AAChF,MAAI,QAAQ,UAAU,QAAS,YAAW,UAAU,QAAQ,UAAU;AACtE,WAAS,KAAK,EAAE,gBAAgB,EAAE,OAAO,YAAY,EAAE,CAAC;;AAG5D,KAAI,QAAQ,gBAAgB,KAAA,EACxB,UAAS,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,QAAQ,cAAc,IAAI,GAAG,EAAE,EAAE,CAAC;AAG/E,KAAI,WACA,UAAS,KAAK,WAAW;AAG7B,KAAI,SAAS,WAAW,EAAG,QAAO,KAAA;AAElC,QAAO,EACH,SAAS,SAAS,WAAW,KAAK,WAAW,SAAS,KAAK,SAAS,KAAK,UAC5E;;;;;;AAOL,IAAa,gBAAb,cAAmC,aAAa;CAC5C;CAEA,OAAc,cAAc,SAAyC;AACjE,SAAO,CAAC,EACJ,QAAQ,YACR,QAAQ,SAAS,KAAA,KACjB,QAAQ,WAAW,KAAA,KACnB,QAAQ,aACR,QAAQ,QACR,QAAQ,QACR,QAAQ,QACR,QAAQ,aACR,QAAQ,UACR,QAAQ,aAAa,KAAA,KACrB,QAAQ,YAAY,KAAA,KACpB,QAAQ,kBACR,QAAQ,WAAW,KAAA,KACnB,QAAQ,YAAY,KAAA,KACpB,QAAQ,gBAAgB,KAAA,KACxB,QAAQ,YAAY,KAAA,KACpB,QAAQ,UAAU,KAAA;;CAI1B,YAAmB,UAAiC,EAAE,EAAE;AACpD,QAAM,QAAQ;AACd,OAAK,UAAU;;CAGnB,WAAkB,SAA+C;EAC7D,MAAM,OAAO,KAAK;EAGlB,IAAI;AACJ,MAAI,KAAK,WAAW;AAChB,kBAAe,SAAS;AACX,WAAQ,UAGf,YAAY,aACd,cACA,KAAK,UAAU,KACf,KAAK,UAAU,QAClB;;EAIL,IAAI;AACJ,MAAI,KAAK,SAAS,KAAA,EACd,WAAU,UAAU,KAAK,KAAK,CAAC,WAAW,QAAQ,IAAI,KAAA;AAG1D,SAAO,mBAAmB,MAAM,cAAc,QAAQ;;CAG1D,MAAa,SAA2B;EACpC,MAAM,OAAO,KAAK;EAElB,IAAI;AACJ,MAAI,KAAK,WAAW;AAChB,kBAAe,SAAS;AACX,WAAQ,UAGf,YAAY,aACd,cACA,KAAK,UAAU,KACf,KAAK,UAAU,QAClB;;EAGL,IAAI;AACJ,MAAI,KAAK,SAAS,KAAA,EACd,WAAU,UAAU,KAAK,KAAK,CAAC,WAAW,QAAQ,IAAI,KAAA;AAG1D,SAAO,sBAAsB,MAAM,cAAc,QAAQ;;;;;;AAOjE,SAAgB,sBACZ,SACA,cACA,YACM;CACN,MAAM,IAA2D,EAAE;AACnE,KAAI,QAAQ,SAAU,GAAE,KAAK,QAAQ,WAAW;AAChD,KAAI,QAAQ,SAAS,KAAA,EAAW,GAAE,IAAI,QAAQ;AAC9C,KAAI,QAAQ,WAAW,KAAA,EAAW,GAAE,IAAI,QAAQ;AAChD,KAAI,QAAQ,UAAW,GAAE,IAAI,eAAe,QAAQ;AACpD,KAAI,QAAQ,KAAM,GAAE,OAAO,QAAQ;AACnC,KAAI,QAAQ,OAAQ,GAAE,SAAS,YAAY,QAAQ;AACnD,KAAI,QAAQ,aAAa,KAAA,EAAW,GAAE,WAAW,QAAQ;AACzD,KAAI,QAAQ,eACR,GAAE,MAAM,mBAAmB,QAAQ,mBAAmB,QAAQ;AAClE,KAAI,QAAQ,YAAY,KAAA,EAAW,GAAE,MAAM,QAAQ;AACnD,KAAI,QAAQ,YAAY,KAAA,EAAW,GAAE,UAAU,QAAQ;AACvD,KAAI,QAAQ,UAAU,KAAA,EAAW,GAAE,QAAQ,QAAQ;CAEnD,MAAM,UAAU,MAAM,EAAE;CACxB,MAAM,OAAiB,EAAE;AAEzB,KAAI,QAAQ,KACR,MAAK,KACD,WAAW,MAAM,EAAE,UAAU,QAAQ,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,UAAU,QAAQ,MAAM,CAAC,CAAC,IAC3F;AAGL,KAAI,QAAQ,aAAa,cAAc;EACnC,MAAM,IAAwC,EAAE,QAAQ,UAAU,aAAa,IAAI;AACnF,MAAI,QAAQ,UAAU,QAAS,GAAE,UAAU,QAAQ,UAAU;AAC7D,OAAK,KAAK,gBAAgB,MAAM,EAAE,CAAC,IAAI;;AAG3C,KAAI,QAAQ,gBAAgB,KAAA,EACxB,MAAK,KAAK,SAAS,MAAM,EAAE,KAAK,QAAQ,cAAc,IAAI,GAAG,CAAC,CAAC,IAAI;AAGvE,KAAI,WACA,MAAK,KAAK,IAAI,WAAW,CAAC;AAG9B,KAAI,CAAC,WAAW,KAAK,WAAW,EAAG,QAAO;AAC1C,KAAI,KAAK,WAAW,EAAG,QAAO,SAAS,QAAQ;AAC/C,QAAO,SAAS,QAAQ,GAAG,KAAK,KAAK,GAAG,CAAC;;;;;;;;AC9N7C,IAAa,UAAb,cAA6B,aAAa;CACtC;CAEA,YAAmB,UAAgC,EAAE,EAAE;AACnD,QAAM,MAAM;AACZ,OAAK,UAAU,OAAO,YAAY,WAAW,EAAE,MAAM,SAAS,GAAG;;CAGrE,WAAkB,SAA+C;EAC7D,MAAM,WAA6B,EAAE;AAErC,MAAI,cAAc,cAAc,KAAK,QAAQ,EAAE;GAE3C,MAAM,SADM,IAAI,cAAc,KAAK,QAAQ,CACxB,WAAW,QAAQ;AACtC,OAAI,OAAQ,UAAS,KAAK,OAAO;;AAGrC,MAAI,KAAK,QAAQ,KACb,UAAS,KAAK,EAAE,OAAO,CAAC,KAAK,QAAQ,KAAK,EAAE,CAAC;AAGjD,SAAO,EACH,OACI,SAAS,WAAW,IACd,EAAE,GACF,SAAS,WAAW,KAAK,WAAW,SAAS,KAC3C,SAAS,KACT,UACf;;CAGL,MAAa,SAA2B;EACpC,IAAI,IAAI;AAER,MAAI,cAAc,cAAc,KAAK,QAAQ,EAAE;GAC3C,MAAM,KAAK,IAAI,cAAc,KAAK,QAAQ;AAC1C,QAAK,GAAG,MAAM,QAAQ;;AAG1B,MAAI,KAAK,QAAQ,KACb,MAAK,QAAQ,UAAU,KAAK,QAAQ,KAAK,CAAC;AAG9C,OAAK;AACL,SAAO;;;;;;;;;ACtCf,IAAa,YAAb,cAA+B,aAAa;CACxC;CAEA,YAAmB,UAAsC,EAAE,EAAE;AACzD,QAAM,MAAM;AACZ,OAAK,UAAU,OAAO,YAAY,WAAW,EAAE,MAAM,SAAS,GAAG;;CAGrE,WAAkB,SAA+C;EAC7D,MAAM,WAA6B,EAAE;EAErC,MAAM,MAAM,yBAAyB,KAAK,QAAQ,cAAc,EAAE,CAAC;AACnE,MAAI,IAAK,UAAS,KAAK,IAAI;AAE3B,MAAI,KAAK,QAAQ,MAAM;GACnB,MAAM,MAAM,IAAI,QAAQ,KAAK,QAAQ,KAAK,CAAC,WAAW,QAAQ;AAC9D,OAAI,IAAK,UAAS,KAAK,IAAI;;AAG/B,MAAI,KAAK,QAAQ,SACb,MAAK,MAAM,SAAS,KAAK,QAAQ,UAAU;GACvC,MAAM,MAAM,MAAM,WAAW,QAAQ;AACrC,OAAI,IAAK,UAAS,KAAK,IAAI;;AAInC,WAAS,KAAK,gCAAgC,CAAC;AAE/C,SAAO,EAAE,OAAO,UAAU;;CAG9B,MAAa,SAA2B;EACpC,IAAI,IAAI;EAER,MAAM,MAAM,4BAA4B,KAAK,QAAQ,cAAc,EAAE,CAAC;AACtE,MAAI,IAAK,MAAK;AAEd,MAAI,KAAK,QAAQ,KACb,MAAK,IAAI,QAAQ,KAAK,QAAQ,KAAK,CAAC,MAAM,QAAQ;AAGtD,MAAI,KAAK,QAAQ,SACb,MAAK,MAAM,SAAS,KAAK,QAAQ,SAC7B,MAAK,MAAM,MAAM,QAAQ;AAIjC,OAAK,mCAAmC;AACxC,OAAK;AACL,SAAO;;;;;AC1Df,SAAS,gBAAgB,MAAc,SAA6C;CAChF,MAAM,QAAyC,EAAE;CACjD,MAAM,WAA6B,EAAE;AAErC,KAAI,QAAQ,UAAU,KAAA,EAAW,OAAM,IAAI,QAAQ;AACnD,KAAI,QAAQ,MACR,UAAS,KAAK,EACV,eAAe,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,QAAQ,MAAM,QAAQ,KAAK,GAAG,EAAE,EAAE,EAAE,CAAC,EACvF,CAAC;AAEN,KAAI,QAAQ,UACR,UAAS,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,QAAQ,WAAW,EAAE,EAAE,CAAC;AAG1E,QAAO,GAAG,OAAO,OAAO,KAAK,MAAM,CAAC,SAAS,IAAI,CAAC,EAAE,OAAO,OAAO,EAAE,GAAG,SAAS,GAAG,UAAU;;;;;;AAOjG,IAAa,sBAAb,cAAyC,iBAAiB;CACtD;CAWA,YAAmB,SAShB;AACC,QAAM,SAAS;AACf,OAAK,UAAU;;CAGnB,WAA2B,SAAmC;EAC1D,MAAM,WAA6B,EAAE;EACrC,MAAM,OAAO,KAAK;AAElB,MAAI,MAAM,cACN,UAAS,KAAK,EAAE,OAAO,EAAE,QAAQ,KAAK,eAAe,EAAE,CAAC;AAG5D,MAAI,MAAM,SAAS;AACf,OAAI,KAAK,QAAQ,KAAM,UAAS,KAAK,gBAAgB,SAAS,KAAK,QAAQ,KAAK,CAAC;AACjF,OAAI,KAAK,QAAQ,MAAO,UAAS,KAAK,gBAAgB,SAAS,KAAK,QAAQ,MAAM,CAAC;AACnF,OAAI,KAAK,QAAQ,IAAK,UAAS,KAAK,gBAAgB,SAAS,KAAK,QAAQ,IAAI,CAAC;AAC/E,OAAI,KAAK,QAAQ,OAAQ,UAAS,KAAK,gBAAgB,SAAS,KAAK,QAAQ,OAAO,CAAC;;AAGzF,MAAI,MAAM,SAAS,KAAA,GAAW;GAE1B,MAAM,UADW,UAAU,KAAK,KAAK,CACZ,WAAW,QAAQ;AAC5C,OAAI,QAAS,UAAS,KAAK,QAAQ;;AAGvC,SAAO,EACH,UACI,SAAS,WAAW,IACd,EAAE,GACF,SAAS,WAAW,KAAK,WAAW,SAAS,KAC3C,SAAS,KACT,UACf;;;;;AC/ET,MAAa,oBAAoB;CAC7B,KAAK;CACL,QAAQ;CACR,QAAQ;CACX;;;;;AA2BD,IAAa,YAAb,cAA+B,iBAAiB;CAC5C;CACA;CAEA,YAAmB,UAA6B,EAAE,EAAE;AAChD,QAAM,OAAO;AACb,OAAK,UAAU;AACf,OAAK,aACD,QAAQ,aACP,QAAQ,SAAS,KAAA,IACZ,CACI,IAAI,UAAU;GACV,YAAY,EAAE,YAAY,OAAO;GACjC,UAAU,CAAC,IAAI,QAAQ,EAAE,MAAM,QAAQ,MAAM,CAAC,CAAC;GAClD,CAAC,CACL,GACD,KAAA;;CAGd,WAA2B,SAAmC;EAC1D,MAAM,OAAO,KAAK;EAClB,MAAM,WAA6B,EAAE;EAGrC,MAAM,UAAkC,EAAE;AAC1C,MAAI,KAAK,eAAe,KAAA,KAAa,KAAK,aAAa,EACnD,SAAQ,WAAW,KAAK;AAC5B,MAAI,KAAK,YAAY,KAAA,KAAa,KAAK,UAAU,EAAG,SAAQ,UAAU,KAAK;AAC3E,MAAI,OAAO,KAAK,QAAQ,CAAC,SAAS,EAAG,UAAS,KAAK,EAAE,OAAO,SAAS,CAAC;EAGtE,MAAM,iBAAmC,EAAE;EAC3C,MAAM,UAAU,KAAK;EACrB,MAAM,cAAsC,EAAE;AAC9C,MAAI,SAAS,QAAQ,KAAA,EAAW,aAAY,OAAO,QAAQ;AAC3D,MAAI,SAAS,WAAW,KAAA,EAAW,aAAY,OAAO,QAAQ;AAC9D,MAAI,SAAS,SAAS,KAAA,EAAW,aAAY,OAAO,QAAQ;AAC5D,MAAI,SAAS,UAAU,KAAA,EAAW,aAAY,OAAO,QAAQ;AAC7D,iBAAe,KAAK,EAChB,YAAY,OAAO,KAAK,YAAY,CAAC,SAAS,IAAI,EAAE,OAAO,aAAa,GAAG,EAAE,EAChF,CAAC;AACF,iBAAe,KAAK,EAAE,cAAc,EAAE,EAAE,CAAC;AAEzC,MAAI,KAAK,WACL,MAAK,MAAM,KAAK,KAAK,YAAY;GAC7B,MAAM,OAAO,EAAE,WAAW,QAAQ;AAClC,OAAI,KAAM,gBAAe,KAAK,KAAK;;MAGvC,gBAAe,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;AAEtC,WAAS,KAAK,EAAE,YAAY,gBAAgB,CAAC;EAQ7C,MAAM,UALO,IAAI,oBAAoB;GACjC,MAAM,KAAK;GACX,SAAS,KAAK;GACd,eAAe,KAAK,gBAAgB,kBAAkB,KAAK,iBAAiB,KAAA;GAC/E,CAAC,CACmB,WAAW,QAAQ;AACxC,MAAI,QAAS,UAAS,KAAK,QAAQ;AAEnC,SAAO,EAAE,QAAQ,UAAU;;;;;;;;AC1EnC,SAAS,YAAY,SAA2C;CAC5D,MAAM,iBAAmC,EAAE;AAE3C,KAAI,QAAQ,YAAY,SAAU,gBAAe,KAAK,EAAE,iBAAiB,EAAE,EAAE,CAAC;UACrE,QAAQ,YAAY,QAAS,gBAAe,KAAK,EAAE,eAAe,EAAE,EAAE,CAAC;UACvE,QAAQ,YAAY,OAAQ,gBAAe,KAAK,EAAE,eAAe,EAAE,EAAE,CAAC;CAE/E,MAAM,gBAAkC,EAAE;CAE1C,MAAM,QAAyC,EAAE;AACjD,KAAI,QAAQ,SAAU,OAAM,OAAO,QAAQ;AAC3C,KAAI,QAAQ,OAAQ,OAAM,SAAS,kBAAkB,QAAQ;AAC7D,KAAI,QAAQ,KAAM,OAAM,OAAO,QAAQ;AACvC,KAAI,QAAQ,SAAS,QAAQ,KAAA,EAAW,OAAM,OAAO,QAAQ,QAAQ;AACrE,KAAI,QAAQ,SAAS,WAAW,KAAA,EAAW,OAAM,OAAO,QAAQ,QAAQ;AACxE,KAAI,QAAQ,SAAS,SAAS,KAAA,EAAW,OAAM,OAAO,QAAQ,QAAQ;AACtE,KAAI,QAAQ,SAAS,UAAU,KAAA,EAAW,OAAM,OAAO,QAAQ,QAAQ;AACvE,KAAI,QAAQ,YAAY,KAAA,EAAW,OAAM,SAAS,QAAQ;AAC1D,KAAI,QAAQ,kBAAkB,KAAA,EAAW,OAAM,SAAS,QAAQ,gBAAgB;AAChF,KAAI,OAAO,KAAK,MAAM,CAAC,SAAS,EAAG,eAAc,KAAK,EAAE,OAAO,OAAO,CAAC;AAEvE,eAAc,KAAK,GAAG,eAAe;AAErC,QAAO,EACH,YACI,cAAc,WAAW,KAAK,WAAW,cAAc,KACjD,cAAc,KACd,cAAc,SAAS,IACrB,gBACA,EAAE,EACjB;;AAGL,SAAS,eAAe,SAAmC;CACvD,IAAI,IAAI;CAER,MAAM,IAAiD,EAAE;AACzD,KAAI,QAAQ,SAAU,GAAE,OAAO,QAAQ;AACvC,KAAI,QAAQ,OAAQ,GAAE,SAAS,kBAAkB,QAAQ;AACzD,KAAI,QAAQ,KAAM,GAAE,OAAO,QAAQ;AACnC,KAAI,QAAQ,SAAS,QAAQ,KAAA,EAAW,GAAE,OAAO,QAAQ,QAAQ;AACjE,KAAI,QAAQ,SAAS,WAAW,KAAA,EAAW,GAAE,OAAO,QAAQ,QAAQ;AACpE,KAAI,QAAQ,SAAS,SAAS,KAAA,EAAW,GAAE,OAAO,QAAQ,QAAQ;AAClE,KAAI,QAAQ,SAAS,UAAU,KAAA,EAAW,GAAE,OAAO,QAAQ,QAAQ;AACnE,KAAI,QAAQ,YAAY,KAAA,EAAW,GAAE,SAAS,QAAQ;AACtD,KAAI,QAAQ,kBAAkB,KAAA,EAAW,GAAE,SAAS,QAAQ,gBAAgB;AAC5E,MAAK,MAAM,EAAE;CAEb,IAAI,QAAQ;AACZ,KAAI,QAAQ,YAAY,SAAU,UAAS;UAClC,QAAQ,YAAY,QAAS,UAAS;UACtC,QAAQ,YAAY,OAAQ,UAAS;AAE9C,QAAO,QAAQ,GAAG,EAAE,GAAG,MAAM,eAAe,GAAG,EAAE;;;;;;AAOrD,IAAa,WAAb,cAA8B,aAAa;CACvC;CAEA,YAAmB,UAA4B,EAAE,EAAE;AAC/C,QAAM,WAAW;AACjB,OAAK,UAAU;;CAGnB,WAAkB,SAA+C;EAC7D,MAAM,WAA6B,EAAE;AAErC,WAAS,KAAK,YAAY,KAAK,QAAQ,CAAC;AACxC,WAAS,KAAK,EAAE,cAAc,EAAE,EAAE,CAAC;AAEnC,MAAI,KAAK,QAAQ,WACb,MAAK,MAAM,KAAK,KAAK,QAAQ,YAAY;GAKrC,MAAM,OAHF,OAAO,MAAM,WACP,IAAI,UAAU,EAAE,UAAU,CAAC,IAAI,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,GACvD,GACO,WAAW,QAAQ;AACpC,OAAI,IAAK,UAAS,KAAK,IAAI;;OAE5B;GACH,MAAM,MAAM,IAAI,WAAW,CAAC,WAAW,QAAQ;AAC/C,OAAI,IAAK,UAAS,KAAK,IAAI;;AAG/B,SAAO,EAAE,YAAY,UAAU;;CAGnC,MAAa,SAA2B;EACpC,IAAI,IAAI;AACR,OAAK,eAAe,KAAK,QAAQ;AACjC,OAAK;AAEL,MAAI,KAAK,QAAQ,WACb,MAAK,MAAM,KAAK,KAAK,QAAQ,YAAY;GACrC,MAAM,OACF,OAAO,MAAM,WACP,IAAI,UAAU,EAAE,UAAU,CAAC,IAAI,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,GACvD;AACV,QAAK,KAAK,MAAM,QAAQ;;MAG5B,MAAK,IAAI,WAAW,CAAC,MAAM,QAAQ;AAGvC,OAAK;AACL,SAAO;;;;;;;;;;ACvHf,IAAa,aAAb,cAAgC,aAAa;CACzC,YAAmB,UAA8B,EAAE,EAAE;AACjD,QAAM,UAAU;AAEhB,OAAK,KAAK,KACN,IAAI,uBAAuB;GACvB,WAAW;IACP,KAAK;IACL,OAAO;IACV;GACD,WAAW;IACP,KAAK;IACL,OAAO;IACV;GACD,WAAW;IACP,KAAK;IACL,OAAO;IACV;GACJ,CAAC,CACL;AAED,OAAK,KAAK,KAAK,IAAI,qBAAqB,QAAQ,KAAK,CAAC;AACtD,OAAK,KAAK,KACN,IAAI,eAAe;GACf,MAAM;GACN,UAAU,CAAC,IAAI,eAAe,EAAE,MAAM,sBAAsB,CAAC,CAAC;GACjE,CAAC,CACL;;;AAIT,IAAM,uBAAN,cAAmC,aAAa;CAC5C,YAAmB,MAAe;AAC9B,QAAM,SAAS;AACf,OAAK,KAAK,KAAK,IAAI,eAAe,KAAK,CAAC;;;AAIhD,IAAM,iBAAN,cAA6B,aAAa;CACtC,YAAmB,MAAe;AAC9B,QAAM,WAAW;AACjB,OAAK,KAAK,KAAK,IAAI,+BAA+B,CAAC;AACnD,OAAK,KAAK,KAAK,IAAI,sBAAsB,CAAC;AAC1C,OAAK,KAAK,KAAK,IAAI,uBAAuB,CAAC;AAC3C,OAAK,KAAK,KAAK,IAAI,qBAAqB,KAAK,CAAC;;;AAItD,IAAM,wBAAN,cAAoC,aAAa;CAC7C,cAAqB;AACjB,QAAM,OAAO;AACb,OAAK,KAAK,KACN,IAAI,eAAe;GACf,MAAM;GACN,UAAU;IACN,IAAI,eAAe;KACf,MAAM;KACN,YAAY;MACR,IAAI;OAAE,KAAK;OAAM,OAAO;OAAG;MAC3B,MAAM;OAAE,KAAK;OAAQ,OAAO;OAA6B;MAC5D;KACJ,CAAC;IACF,IAAI,eAAe,EAAE,MAAM,aAAa,CAAC;IACzC,IAAI,eAAe;KACf,MAAM;KACN,UAAU,CACN,IAAI,eAAe;MACf,MAAM;MACN,YAAY,EAAE,MAAM;OAAE,KAAK;OAAQ,OAAO;OAAU,EAAE;MACzD,CAAC,CACL;KACJ,CAAC;IACL;GACJ,CAAC,CACL;AACD,OAAK,KAAK,KACN,IAAI,eAAe;GACf,MAAM;GACN,UAAU,CACN,IAAI,eAAe;IACf,MAAM;IACN,UAAU,CACN,IAAI,eAAe;KACf,MAAM;KACN,YAAY;MACR,GAAG;OAAE,KAAK;OAAK,OAAO;OAAQ;MAC9B,GAAG;OAAE,KAAK;OAAK,OAAO;OAAS;MAClC;KACJ,CAAC,EACF,IAAI,eAAe;KACf,MAAM;KACN,YAAY;MACR,IAAI;OAAE,KAAK;OAAM,OAAO;OAAS;MACjC,IAAI;OAAE,KAAK;OAAM,OAAO;OAAS;MACpC;KACJ,CAAC,CACL;IACJ,CAAC,CACL;GACJ,CAAC,CACL;;;AAIT,IAAM,uBAAN,cAAmC,aAAa;CAC5C,YAAmB,MAAe;AAC9B,QAAM,OAAO;AACb,OAAK,KAAK,KACN,IAAI,eAAe;GACf,MAAM;GACN,UAAU;IACN,IAAI,eAAe;KACf,MAAM;KACN,YAAY;MACR,IAAI;OAAE,KAAK;OAAM,OAAO;OAAG;MAC3B,MAAM;OAAE,KAAK;OAAQ,OAAO;OAAuB;MACtD;KACJ,CAAC;IACF,IAAI,eAAe,EAAE,MAAM,aAAa,CAAC;IACzC,IAAI,eAAe;KACf,MAAM;KACN,UAAU,CACN,IAAI,eAAe;MACf,MAAM;MACN,YAAY;OACR,MAAM;QAAE,KAAK;QAAQ,OAAO;QAAQ;OACpC,KAAK;QAAE,KAAK;QAAO,OAAO;QAAG;OAChC;MACJ,CAAC,CACL;KACJ,CAAC;IACL;GACJ,CAAC,CACL;AACD,OAAK,KAAK,KACN,IAAI,eAAe;GACf,MAAM;GACN,UAAU,CACN,IAAI,eAAe;IACf,MAAM;IACN,UAAU,CACN,IAAI,eAAe;KACf,MAAM;KACN,YAAY;MACR,GAAG;OAAE,KAAK;OAAK,OAAO;OAAQ;MAC9B,GAAG;OAAE,KAAK;OAAK,OAAO;OAAS;MAClC;KACJ,CAAC,EACF,IAAI,eAAe;KACf,MAAM;KACN,YAAY;MACR,IAAI;OAAE,KAAK;OAAM,OAAO;OAAS;MACjC,IAAI;OAAE,KAAK;OAAM,OAAO;OAAS;MACpC;KACJ,CAAC,CACL;IACJ,CAAC,CACL;GACJ,CAAC,CACL;EAED,MAAM,kBAAkB,OAClB,EAAE,YAAY,CAAC,IAAI,UAAU,EAAE,UAAU,CAAC,IAAI,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GACtE,KAAA;AACN,OAAK,KAAK,KAAK,IAAI,SAAS,gBAAgB,CAAC;;;;;AC5KrD,SAAS,kBAAkB,aAAoC;AAS3D,QAAO,wOARW,cACZ,YAAY;EACR,YAAY,OAAO,gBAAc;EACjC,YAAY,QAAQ,iBAAe;EACnC,YAAY,kBAAkB,QAAQ,yBAAuB;EAC7D,YAAY,aAAa,sBAAoB;EAChD,CAAC,KAAK,GAAG,CAAC,4BACX,GACmP;;AAG7P,IAAa,yBAAb,MAAa,+BAA+B,qBAAqB;CAC7D,OAAe,wBAAQ,IAAI,KAAmC;CAE9D,YAAmB,aAA4B;AAC3C,QAAM,mBAAmB;EACzB,MAAM,MAAM,cAAc,KAAK,UAAU,YAAY,GAAG;AACxD,MAAI,CAAC,uBAAuB,MAAM,IAAI,IAAI,CACtC,wBAAuB,MAAM,IACzB,KACA,qBAAqB,cAAc,kBAAkB,YAAY,CAAC,CACrE;;CAIT,aAAoB;EAChB,MAAM,MAAM,KAAK,cAAc,KAAK,UAAU,KAAK,YAAY,GAAG;AAClE,SAAO,uBAAuB,MAAM,IAAI,IAAI,CAAE,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;;CAG3E;;;;AC9BJ,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+B/B,MAAM,yBAAyC,qBAAqB,cAChE,uBACH,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;;;;;AAM3B,IAAa,eAAb,cAAkC,aAAa;CAC3C;CAEA,YAAmB,SAA+B;AAC9C,QAAM,iBAAiB;AACvB,OAAK,UAAU;;CAGnB,WAAkB,UAAgD;EAC9D,MAAM,OAAO,KAAK;EAElB,MAAM,WAA6B,EAAE;AAGrC,WAAS,KAAK,EACV,OAAO;GACH,WAAW;GACX,WAAW;GACX,WAAW;GACd,EACJ,CAAC;AAGF,WAAS,KAAK,EACV,oBAAoB,CAChB,EACI,iBAAiB,EAAE,OAAO;GAAE,IAAI;GAAY,QAAQ;GAAQ,EAAE,EACjE,CACJ,EACJ,CAAC;EAGF,MAAM,SAAS,KAAK,SAAS,KAAK,IAAI,OAAO,EACzC,WAAW,EAAE,OAAO;GAAE;GAAI,QAAQ,MAAM,IAAI;GAAK,EAAE,EACtD,EAAE;AACH,WAAS,KAAK,EAAE,cAAc,QAAQ,CAAC;EAGvC,MAAM,KAAK,KAAK,cAAc;EAC9B,MAAM,KAAK,KAAK,eAAe;AAC/B,WAAS,KAAK,EACV,WAAW,EACP,OAAO;GACH;GACA;GACA,GAAI,OAAO,UAAU,OAAO,SAAU,EAAE,MAAM,aAAa,GAAG,EAAE;GACnE,EACJ,EACJ,CAAC;AAGF,WAAS,KAAK,EACV,aAAa,EAAE,OAAO;GAAE,IAAI;GAAS,IAAI;GAAS,EAAE,EACvD,CAAC;AAGF,WAAS,KAAK,uBAAuB;AAErC,SAAO,EAAE,kBAAkB,UAAU;;CAGzC,MAAa,UAA4B;EACrC,MAAM,OAAO,KAAK;EAElB,MAAM,KAAK,KAAK,cAAc;EAC9B,MAAM,KAAK,KAAK,eAAe;EAC/B,MAAM,WAAW,OAAO,UAAU,OAAO,SAAU,wBAAsB;EAEzE,IAAI,IAAI;AACR,OAAK;AACL,OAAK;AACL,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,IACtC,MAAK,gBAAgB,KAAK,SAAS,GAAG,aAAa,IAAI,EAAE;AAE7D,OAAK;AACL,OAAK,gBAAgB,GAAG,QAAQ,GAAG,GAAG,SAAS;AAC/C,OAAK;AACL,OAAK;AACL,OAAK;AACL,SAAO;;;;;ACrHf,IAAa,sBAAb,MAAyD;CACrD;CACA;CAEA,YAAmB,SAA+B;AAC9C,OAAK,eAAe,IAAI,aAAa,QAAQ;AAC7C,OAAK,gBAAgB,IAAI,eAAe;;CAG5C,IAAW,OAAqB;AAC5B,SAAO,KAAK;;CAGhB,IAAW,gBAA+B;AACtC,SAAO,KAAK;;;;;ACvBpB,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CzB,IAAa,qBAAb,MAAa,2BAA2B,qBAAqB;CACzD,OAAe,WAAW,qBAAqB,cAAc,iBAAiB;CAE9E,cAAqB;AACjB,QAAM,cAAc;;CAGxB,aAAoB;AAChB,SAAO,mBAAmB,SAAS,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;;;;;ACtDpE,SAAS,oBAAoB,cAA6C;AAEtE,QAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;uBADO,eAAe,8CAA8C,GA4BlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsK7B,IAAa,qBAAb,MAAa,2BAA2B,qBAAqB;CACzD,OAAe,wBAAQ,IAAI,KAAmC;CAC9D;CAEA,YAAmB,cAAqC;AACpD,QAAM,cAAc;AACpB,OAAK,eAAe;EACpB,MAAM,MAAM,eAAe,KAAK,UAAU,aAAa,GAAG;AAC1D,MAAI,CAAC,mBAAmB,MAAM,IAAI,IAAI,CAClC,oBAAmB,MAAM,IACrB,KACA,qBAAqB,cAAc,oBAAoB,aAAa,CAAC,CACxE;;CAIT,aAAoB;EAChB,MAAM,MAAM,KAAK,eAAe,KAAK,UAAU,KAAK,aAAa,GAAG;AACpE,SAAO,mBAAmB,MAAM,IAAI,IAAI,CAAE,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;;;;;AC5M3E,MAAM,kBAAiD;CACnD,QAAQ;CACR,MAAM;CACN,KAAK;CACL,MAAM;CACN,UAAU;CACV,OAAO;CACP,QAAQ;CACR,SAAS;CACT,YAAY;CACZ,OAAO;CACP,MAAM;CACN,OAAO;CACP,MAAM;CACN,QAAQ;CACX;AAED,MAAM,kBAAiD;CACnD,QAAQ;CACR,MAAM;CACN,KAAK;CACL,MAAM;CACN,UAAU;CACV,OAAO;CACP,QAAQ;CACR,SAAS;CACT,YAAY;CACZ,OAAO;CACP,MAAM;CACN,OAAO;CACP,MAAM;CACN,QAAQ;CACX;AAED,MAAM,kBAAgD;CAClD,YAAY;CACZ,MAAM;CACN,cAAc;CACd,aAAa;CACb,cAAc;CACd,WAAW;CACX,MAAM;CACN,OAAO;CACV;AAED,MAAM,kBAAqD;CACvD,YAAY;CACZ,KAAK;CACL,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,aAAa;CACb,MAAM;CACN,MAAM;CACT;AAED,MAAM,qBAA6C;CAC/C,MAAM;CACN,OAAO;CACP,IAAI;CACJ,MAAM;CACN,YAAY;CACZ,UAAU;CACb;AAED,MAAM,aAAqC;CACvC,MAAM;CACN,KAAK;CACL,MAAM;CACN,UAAU;CACV,OAAO;CACP,QAAQ;CACR,SAAS;CACT,YAAY;CACZ,OAAO;CACP,MAAM;CACN,OAAO;CACP,MAAM;CACN,QAAQ;CACX;AAED,MAAM,mBAA2D;CAC7D,KAAK;EAAE,MAAM;EAAY,OAAO;EAAa,IAAI;EAAW,MAAM;EAAc;CAChF,MAAM;EAAE,MAAM;EAAS,OAAO;EAAQ,IAAI;EAAQ,MAAM;EAAM;CAC9D,OAAO;EAAE,YAAY;EAAc,UAAU;EAAY;CACzD,QAAQ;EAAE,YAAY;EAAc,UAAU;EAAY;CAC1D,SAAS;EAAE,YAAY;EAAc,UAAU;EAAY;CAC3D,YAAY;EAAE,YAAY;EAAc,UAAU;EAAY;CAC9D,OAAO;EAAE,MAAM;EAAQ,OAAO;EAAS,IAAI;EAAO,MAAM;EAAU;CAClE,MAAM;EAAE,MAAM;EAAQ,OAAO;EAAS,IAAI;EAAO,MAAM;EAAU;CACjE,QAAQ;EACJ,MAAM;EACN,OAAO;EACP,IAAI;EACJ,MAAM;EACT;CACD,OAAO,EAAE;CACZ;AAED,MAAM,eAAkD;CACpD,YAAY;CACZ,KAAK;CACL,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,aACI;CACJ,MAAM;CACN,MAAM;CACT;AAID,SAAS,gBAAgB,SAAoC;CACzD,MAAM,MAAsB,QAAQ,SAAS;AAE7C,KAAI,QAAQ,UAAU,QAAQ,aAC1B,QAAO,gBAAgB,QAAQ,iBAAiB;AAGpD,KAAI,QAAQ,SACR,QAAO,gBAAgB,QAAQ,aAAa;CAGhD,MAAM,OAAO,QAAQ,QAAQ;AAE7B,SADY,QAAQ,SAAS,kBAAkB,iBACpC,SAAS;;AAGxB,SAAS,mBAAmB,SAA4C;AACpE,KAAI,QAAQ,SAAU,QAAO;AAC7B,QAAO,QAAQ,SAAS;;AAG5B,SAAS,qBAAqB,SAAoC;AAC9D,KAAI,QAAQ,UACR,QAAO,mBAAmB,QAAQ,cAAc;AAEpD,QAAO;;AAGX,SAAS,uBACL,SACA,MACA,KACc;CACd,MAAM,WAA2B,EAAE;CAGnC,MAAM,MAAM,QAAQ,SAAS;CAC7B,MAAM,aAAa,QAAQ,SAAS,WAAW;AAC/C,UAAS,KACL,IAAI,eAAe;EACf,MAAM;EACN,UAAU,CACN,IAAI,eAAe;GACf,MAAM;GACN,UAAU;IACN,IAAI,eAAe;KACf,MAAM;KACN,YAAY;MACR,IAAI;OAAE,KAAK;OAAM,OAAO,IAAI;OAAK;MACjC,KAAK;OAAE,KAAK;OAAO,OAAO;OAAK;MAC/B,MAAM;OAAE,KAAK;OAAQ,OAAO;OAAQ;MACvC;KACD,UAAU,CACN,IAAI,eAAe;MACf,MAAM;MACN,UAAU,CACN,IAAI,eAAe;OACf,MAAM;OACN,YAAY,EAAE,OAAO;QAAE,KAAK;QAAS,OAAO;QAAK,EAAE;OACtD,CAAC,CACL;MACJ,CAAC,CACL;KACJ,CAAC;IACF,IAAI,eAAe;KACf,MAAM;KACN,UAAU,CACN,IAAI,eAAe;MACf,MAAM;MACN,YAAY,EAAE,MAAM;OAAE,KAAK;OAAQ,OAAO;OAAM,EAAE;MACrD,CAAC,CACL;KACJ,CAAC;IACF,IAAI,eAAe;KACf,MAAM;KACN,UAAU,CAAC,IAAI,gBAAgB,cAAc,mBAAmB,CAAC;KACpE,CAAC;IACL;GACJ,CAAC,EACF,IAAI,eAAe;GACf,MAAM;GACN,UAAU,CACN,IAAI,eAAe;IACf,MAAM;IACN,YAAY,EAAE,KAAK;KAAE,KAAK;KAAO,OAAO;KAAY,EAAE;IACzD,CAAC,CACL;GACJ,CAAC,CACL;EACJ,CAAC,CACL;AAGD,KAAI,QAAQ,SAAS,UAAU;EAC3B,MAAM,aAAa,WAAW,QAAQ,QAAQ;EAC9C,MAAM,SAAS,iBAAiB,QAAQ,QAAQ;EAChD,MAAM,YAAY,QAAQ,aAAa,SAAS,OAAO,QAAQ,aAAa,KAAA;EAE5E,IAAI,SAAS;AACb,MAAI,QAAQ,SAAS,QACjB,UAAS;WACF,QAAQ,SAAS,QAExB,UAAS,SADG,QAAQ,aAAa,aACX;WACf,UACP,UAAS,GAAG,WAAW,GAAG,UAAU;EAGxC,MAAM,aAAa,QAAQ,SAAS,QAAQ;AAE5C,WAAS,KACL,IAAI,eAAe;GACf,MAAM;GACN,YAAY;IACR,YAAY;KAAE,KAAK;KAAc,OAAO;KAAY;IACpD,QAAQ;KAAE,KAAK;KAAU,OAAO;KAAQ;IAC3C;GACD,UAAU,CACN,IAAI,eAAe;IACf,MAAM;IACN,UAAU,CACN,IAAI,eAAe;KACf,MAAM;KACN,YAAY;MACR,IAAI;OAAE,KAAK;OAAM,OAAO,IAAI;OAAQ;MACpC,KAAK;OAAE,KAAK;OAAO,OAAO,OAAO,QAAQ,YAAY,IAAI;OAAE;MAC3D,MAAM;OAAE,KAAK;OAAQ,OAAO;OAAQ;MACvC;KACJ,CAAC,EACF,IAAI,eAAe;KACf,MAAM;KACN,UAAU,CACN,IAAI,eAAe;MACf,MAAM;MACN,YAAY,EAAE,MAAM;OAAE,KAAK;OAAQ,OAAO;OAAM,EAAE;MACrD,CAAC,CACL;KACJ,CAAC,CACL;IACJ,CAAC,CACL;GACJ,CAAC,CACL;;AAGL,QAAO;;AAGX,SAAS,qBACL,SACA,MACA,KACc;CACd,MAAM,WAAW,QAAQ,gBAAgB;CACzC,MAAM,WAA2B,EAAE;CACnC,MAAM,MAAM,OAAO,QAAQ,YAAY,IAAI;CAG3C,MAAM,QAAQ,IAAI,eAAe;EAC7B,MAAM;EACN,UAAU,CACN,IAAI,eAAe;GACf,MAAM;GACN,YAAY,EAAE,MAAM;IAAE,KAAK;IAAQ,OAAO;IAAM,EAAE;GACrD,CAAC,CACL;EACJ,CAAC;AAEF,SAAQ,UAAR;EACI,KAAK;AACD,YAAS,KACL,IAAI,eAAe;IACf,MAAM;IACN,UAAU,CACN,IAAI,eAAe;KACf,MAAM;KACN,UAAU,CACN,IAAI,eAAe;MACf,MAAM;MACN,YAAY;OACR,IAAI;QAAE,KAAK;QAAM,OAAO,IAAI;QAAQ;OACpC,KAAK;QAAE,KAAK;QAAO,OAAO;QAAK;OAC/B,MAAM;QAAE,KAAK;QAAQ,OAAO;QAAQ;OACpC,GAAI,QAAQ,cACN,EAAE,SAAS;QAAE,KAAK;QAAW,OAAO;QAAG,EAAE,GACzC,EAAE;OACX;MACD,UAAU,CACN,IAAI,eAAe;OACf,MAAM;OACN,UAAU,CACN,IAAI,eAAe;QACf,MAAM;QACN,YAAY,EACR,OAAO;SAAE,KAAK;SAAS,OAAO;SAAK,EACtC;QACJ,CAAC,CACL;OACJ,CAAC,CACL;MACJ,CAAC,EACF,MACH;KACJ,CAAC,EACF,IAAI,eAAe;KACf,MAAM;KACN,YAAY;MACR,GAAG;OAAE,KAAK;OAAK,OAAO;OAAU;MAChC,GAAG;OAAE,KAAK;OAAK,OAAO;OAAU;MACnC;KACJ,CAAC,CACL;IACJ,CAAC,CACL;AACD;EAEJ,KAAK;AACD,YAAS,KACL,IAAI,eAAe;IACf,MAAM;IACN,YAAY,EAAE,IAAI;KAAE,KAAK;KAAM,OAAO;KAAW,EAAE;IACnD,UAAU,CACN,IAAI,eAAe;KACf,MAAM;KACN,UAAU,CACN,IAAI,eAAe;MACf,MAAM;MACN,YAAY;OACR,IAAI;QAAE,KAAK;QAAM,OAAO,IAAI;QAAQ;OACpC,KAAK;QAAE,KAAK;QAAO,OAAO;QAAK;OAC/B,MAAM;QAAE,KAAK;QAAQ,OAAO;QAAQ;OACvC;MACD,UAAU,CACN,IAAI,eAAe;OACf,MAAM;OACN,UAAU,CACN,IAAI,eAAe;QACf,MAAM;QACN,YAAY,EACR,OAAO;SAAE,KAAK;SAAS,OAAO;SAAK,EACtC;QACJ,CAAC,CACL;OACJ,CAAC,CACL;MACJ,CAAC,EACF,MACH;KACJ,CAAC,CACL;IACJ,CAAC,CACL;AACD;EAEJ,KAAK,eAAe;GAChB,MAAM,QAAQ,QAAQ,SAAS;AAC/B,YAAS,KACL,IAAI,eAAe;IACf,MAAM;IACN,UAAU,CACN,IAAI,eAAe;KACf,MAAM;KACN,UAAU,CACN,IAAI,eAAe;MACf,MAAM;MACN,YAAY;OACR,IAAI;QAAE,KAAK;QAAM,OAAO,IAAI;QAAQ;OACpC,KAAK;QAAE,KAAK;QAAO,OAAO;QAAK;OAC/B,MAAM;QAAE,KAAK;QAAQ,OAAO;QAAQ;OACvC;MACD,UAAU,CACN,IAAI,eAAe;OACf,MAAM;OACN,UAAU,CACN,IAAI,eAAe;QACf,MAAM;QACN,YAAY,EACR,OAAO;SAAE,KAAK;SAAS,OAAO;SAAK,EACtC;QACJ,CAAC,CACL;OACJ,CAAC,CACL;MACJ,CAAC,EACF,MACH;KACJ,CAAC,EACF,IAAI,eAAe;KACf,MAAM;KACN,UAAU,CACN,IAAI,eAAe;MACf,MAAM;MACN,YAAY,EAAE,KAAK;OAAE,KAAK;OAAO,OAAO;OAAO,EAAE;MACpD,CAAC,CACL;KACJ,CAAC,CACL;IACJ,CAAC,CACL;AACD;;EAGJ,KAAK;AACD,YAAS,KACL,IAAI,eAAe;IACf,MAAM;IACN,YAAY;KACR,UAAU;MAAE,KAAK;MAAY,OAAO;MAAO;KAC3C,WAAW;MAAE,KAAK;MAAa,OAAO;MAAO;KAC7C,MAAM;MAAE,KAAK;MAAQ,OAAO;MAAK;KACjC,IAAI;MAAE,KAAK;MAAM,OAAO;MAAK;KAChC;IACD,UAAU,CACN,IAAI,eAAe;KACf,MAAM;KACN,UAAU;MACN,IAAI,eAAe;OACf,MAAM;OACN,YAAY;QACR,IAAI;SAAE,KAAK;SAAM,OAAO,IAAI;SAAQ;QACpC,KAAK;SAAE,KAAK;SAAO,OAAO;SAAK;QAC/B,MAAM;SAAE,KAAK;SAAQ,OAAO;SAAQ;QACvC;OACJ,CAAC;MACF;MACA,IAAI,eAAe;OACf,MAAM;OACN,UAAU,CAAC,IAAI,gBAAgB,cAAc,gBAAgB,CAAC;OACjE,CAAC;MACL;KACJ,CAAC,CACL;IACJ,CAAC,CACL;AACD;EAEJ;AAEI,YAAS,KACL,IAAI,eAAe;IACf,MAAM;IACN,YAAY;KACR,YAAY;MAAE,KAAK;MAAc,OAAO;MAAM;KAC9C,QAAQ;MAAE,KAAK;MAAU,OAAO;MAAU;KAC7C;IACD,UAAU,CACN,IAAI,eAAe;KACf,MAAM;KACN,UAAU,CACN,IAAI,eAAe;MACf,MAAM;MACN,YAAY;OACR,IAAI;QAAE,KAAK;QAAM,OAAO,IAAI;QAAQ;OACpC,KAAK;QAAE,KAAK;QAAO,OAAO;QAAK;OAC/B,MAAM;QAAE,KAAK;QAAQ,OAAO;QAAQ;OACvC;MACJ,CAAC,EACF,MACH;KACJ,CAAC,CACL;IACJ,CAAC,CACL;AACD;;AAGR,QAAO;;AAGX,SAAS,iBACL,SACA,MACA,KACc;CACd,MAAM,UAAU,QAAQ,QAAQ,aAAa,QAAQ,YAAY,iBAAiB;CAClF,MAAM,MAAM,OAAO,QAAQ,YAAY,IAAK;AAE5C,QAAO,CACH,IAAI,eAAe;EACf,MAAM;EACN,YAAY;GACR,QAAQ;IAAE,KAAK;IAAU,OAAO;IAAU;GAC1C,MAAM;IAAE,KAAK;IAAQ,OAAO;IAAS;GACxC;EACD,UAAU,CACN,IAAI,eAAe;GACf,MAAM;GACN,UAAU,CACN,IAAI,eAAe;IACf,MAAM;IACN,YAAY;KACR,IAAI;MAAE,KAAK;MAAM,OAAO,IAAI;MAAQ;KACpC,KAAK;MAAE,KAAK;MAAO,OAAO;MAAK;KAC/B,MAAM;MAAE,KAAK;MAAQ,OAAO;MAAQ;KACvC;IACD,UAAU,CACN,IAAI,eAAe;KACf,MAAM;KACN,UAAU,CACN,IAAI,eAAe;MACf,MAAM;MACN,YAAY,EAAE,OAAO;OAAE,KAAK;OAAS,OAAO;OAAK,EAAE;MACtD,CAAC,CACL;KACJ,CAAC,CACL;IACJ,CAAC,EACF,IAAI,eAAe;IACf,MAAM;IACN,UAAU,CACN,IAAI,eAAe;KACf,MAAM;KACN,YAAY,EAAE,MAAM;MAAE,KAAK;MAAQ,OAAO;MAAM,EAAE;KACrD,CAAC,CACL;IACJ,CAAC,CACL;GACJ,CAAC,CACL;EACJ,CAAC,CACL;;;;;AAaL,IAAa,cAAb,cAAiC,aAAa;CAC1C,YAAmB,SAAqC;AACpD,QAAM,WAAW;AAEjB,MAAI,QAAQ,WAAW,EAAG;EAE1B,IAAI,KAAK;EACT,MAAM,YAAY;EAClB,MAAM,WAAW;EAEjB,MAAM,iBAAiC,EAAE;EACzC,IAAI,kBAAkB;AAEtB,OAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;GAErC,MAAM,EAAE,MAAM,YADA,QAAQ;GAGtB,MAAM,WACF,QAAQ,YAAY,iBACd,eACA,QAAQ,YAAY,kBAClB,gBACA;AAEZ,OAAI,QAAQ,YAAY,mBAAmB,IAAI,EAC3C,qBAAoB,QAAQ,YAAY,QAAQ,QAAQ,SAAS;AAErE,OAAI,QAAQ,YAAY,aAAa,QAAQ,YAAY,KAAA,EACrD,mBAAkB;GAGtB,MAAM,aAAa;GACnB,MAAM,cAAc;GACpB,MAAM,WAAW;GACjB,MAAM,eAAe;GAErB,MAAM,WAAW,gBAAgB,QAAQ;GACzC,MAAM,cAAc,mBAAmB,QAAQ;GAC/C,MAAM,gBAAgB,qBAAqB,QAAQ;GAGnD,IAAI;AAEJ,OAAI,QAAQ,SACR,kBAAiB,iBAAiB,SAAS,MAAM;IAC7C,KAAK;IACL,QAAQ;IACX,CAAC;YACK,gBAAgB,OACvB,kBAAiB,qBAAqB,SAAS,MAAM;IACjD,KAAK;IACL,QAAQ;IACX,CAAC;OAEF,kBAAiB,uBAAuB,SAAS,MAAM;IACnD,KAAK;IACL,QAAQ;IACX,CAAC;GAIN,MAAM,WAAoE;IACtE,IAAI;KAAE,KAAK;KAAM,OAAO;KAAa;IACrC,UAAU;KAAE,KAAK;KAAY,OAAO;KAAU;IAC9C,aAAa;KAAE,KAAK;KAAe,OAAO;KAAa;IACvD,eAAe;KAAE,KAAK;KAAiB,OAAO;KAAe;IAC7D,MAAM;KAAE,KAAK;KAAQ,OAAO;KAAQ;IACpC,UAAU;KAAE,KAAK;KAAY,OAAO;KAAU;IACjD;AACD,OAAI,QAAQ,UAAU,KAAA,EAClB,UAAS,MAAM;IAAE,KAAK;IAAO,OAAO,OAAO,QAAQ,MAAM;IAAE;AAC/D,OAAI,QAAQ,gBAAgB,KAAA,EACxB,UAAS,cAAc;IAAE,KAAK;IAAe,OAAO,OAAO,QAAQ,YAAY;IAAE;AACrF,OAAI,QAAQ,YAAa,UAAS,UAAU;IAAE,KAAK;IAAW,OAAO;IAAG;GA0BxE,MAAM,WAAW,IAAI,eAAe;IAChC,MAAM;IACN,UAAU,CAzBI,IAAI,eAAe;KACjC,MAAM;KACN,YAAY;KACZ,UAAU,CACN,IAAI,eAAe;MACf,MAAM;MACN,UAAU,CACN,IAAI,eAAe;OACf,MAAM;OACN,YAAY,EACR,OAAO;QAAE,KAAK;QAAS,OAAO,OAAO,QAAQ,SAAS,EAAE;QAAE,EAC7D;OACJ,CAAC,CACL;MACJ,CAAC,EACF,IAAI,eAAe;MACf,MAAM;MACN,UAAU;MACb,CAAC,CACL;KACJ,CAAC,CAKuB;IACxB,CAAC;GAGF,MAAM,WAAW,IAAI,eAAe;IAChC,MAAM;IACN,UAAU,CACN,IAAI,eAAe;KACf,MAAM;KACN,YAAY;MACR,IAAI;OAAE,KAAK;OAAM,OAAO;OAAY;MACpC,MAAM;OAAE,KAAK;OAAQ,OAAO;OAAQ;MACvC;KACD,UAAU,CACN,IAAI,eAAe;MACf,MAAM;MACN,UAAU,CACN,IAAI,eAAe;OACf,MAAM;OACN,YAAY,EAAE,OAAO;QAAE,KAAK;QAAS,OAAO;QAAK,EAAE;OACtD,CAAC,CACL;MACJ,CAAC,EACF,IAAI,eAAe;MACf,MAAM;MACN,UAAU,CAAC,SAAS;MACvB,CAAC,CACL;KACJ,CAAC,CACL;IACJ,CAAC;AAEF,kBAAe,KAAK,SAAS;;AAIjC,OAAK,KAAK,KACN,IAAI,eAAe;GACf,MAAM;GACN,UAAU,CACN,IAAI,eAAe;IACf,MAAM;IACN,UAAU,CACN,IAAI,eAAe;KACf,MAAM;KACN,YAAY;MACR,IAAI;OAAE,KAAK;OAAM,OAAO;OAAW;MACnC,KAAK;OAAE,KAAK;OAAO,OAAO;OAAc;MACxC,SAAS;OAAE,KAAK;OAAW,OAAO;OAAS;MAC3C,UAAU;OAAE,KAAK;OAAY,OAAO;OAAU;MACjD;KACD,UAAU,CACN,IAAI,eAAe;MACf,MAAM;MACN,UAAU,CACN,IAAI,eAAe;OACf,MAAM;OACN,YAAY;QACR,YAAY;SAAE,KAAK;SAAc,OAAO;SAAG;QAC3C,QAAQ;SAAE,KAAK;SAAU,OAAO;SAAQ;QAC3C;OACD,UAAU;QACN,IAAI,eAAe;SACf,MAAM;SACN,YAAY;UACR,IAAI;WAAE,KAAK;WAAM,OAAO;WAAU;UAClC,KAAK;WACD,KAAK;WACL,OAAO;WACV;UACD,UAAU;WACN,KAAK;WACL,OAAO;WACV;UACJ;SACD,UAAU,CACN,IAAI,eAAe;UACf,MAAM;UACN,UAAU;UACb,CAAC,CACL;SACJ,CAAC;QACF,IAAI,eAAe;SACf,MAAM;SACN,UAAU,CACN,IAAI,eAAe;UACf,MAAM;UACN,YAAY;WACR,KAAK;YACD,KAAK;YACL,OAAO;YACV;WACD,OAAO;YACH,KAAK;YACL,OAAO;YACV;WACJ;UACD,UAAU,CACN,IAAI,eAAe;WACf,MAAM;WACN,UAAU,CACN,IAAI,eAAe,EACf,MAAM,YACT,CAAC,CACL;WACJ,CAAC,CACL;UACJ,CAAC,CACL;SACJ,CAAC;QACF,IAAI,eAAe;SACf,MAAM;SACN,UAAU,CACN,IAAI,eAAe;UACf,MAAM;UACN,YAAY;WACR,KAAK;YACD,KAAK;YACL,OAAO;YACV;WACD,OAAO;YACH,KAAK;YACL,OAAO;YACV;WACJ;UACD,UAAU,CACN,IAAI,eAAe;WACf,MAAM;WACN,UAAU,CACN,IAAI,eAAe,EACf,MAAM,YACT,CAAC,CACL;WACJ,CAAC,CACL;UACJ,CAAC,CACL;SACJ,CAAC;QACL;OACJ,CAAC,CACL;MACJ,CAAC,CACL;KACJ,CAAC,CACL;IACJ,CAAC,CACL;GACJ,CAAC,CACL;;;;;AC3xBT,MAAa,sBAAsB;CAC/B,UAAU;CACV,KAAK;CACL,WAAW;CACX,MAAM;CACN,QAAQ;CACR,OAAO;CACP,aAAa;CACb,QAAQ;CACR,cAAc;CACjB;;AAmGD,SAAS,QAAQ,OAAgB,OAAgB;AAC7C,KAAI,CAAC,MAAO,QAAO;EAAE,OAAO;EAAU,QAAQ,SAAS,MAAM;EAAM;AACnE,QAAO;EAAE,OAAO,MAAM,QAAQ,KAAK,GAAG;EAAE,QAAQ,SAAS,MAAM;EAAM;;;AAIzE,SAAS,cAAc,MAAsB;AACzC,QAAO;EACH,YAAY,KAAK;EACjB,UAAU,KAAK;EACf,WAAW,KAAK;EAChB,cAAc,KAAK,oBAAoB,QAAQ,QAAQ,KAAA;EACvD,OAAO,QAAQ,KAAK,OAAO,KAAK,MAAM;EACzC;;;AAIL,SAAS,cAAc,MAAsB;AACzC,QAAO;EACH,YAAY,KAAK;EACjB,UAAU,KAAK;EACf,WAAW,KAAK;EAChB,OAAO,QAAQ,KAAK,OAAO,KAAK,MAAM;EACzC;;;AAIL,SAAS,OAAO,MAAoB;AAChC,QAAO;EACH,QAAQ,KAAK,UAAU;EACvB,OAAO,QAAQ,KAAK,OAAO,KAAK,MAAM;EACzC;;;AAIL,SAAS,aAAa,MAA0B;CAC5C,MAAM,SAA0C,EAAE;AAClD,KAAI,KAAK,eAAe,KAAA,EAAW,QAAO,aAAa,KAAK;AAC5D,KAAI,KAAK,aAAa,KAAA,EAAW,QAAO,WAAW,KAAK;AACxD,KAAI,KAAK,cAAc,KAAA,EAAW,QAAO,YAAY,KAAK;AAC1D,KAAI,KAAK,eAAe,KAAA,EAAW,QAAO,aAAa,KAAK,aAAa;AACzE,KAAI,KAAK,kBAAkB,KAAA,EAAW,QAAO,gBAAgB,KAAK,gBAAgB;AAClF,KAAI,KAAK,aAAa,KAAA,EAAW,QAAO,WAAW,KAAK,WAAW;AACnE,KAAI,KAAK,gBAAgB,KAAA,EAAW,QAAO,cAAc,KAAK,cAAc;AAC5E,KAAI,KAAK,kBAAkB,KAAA,EAAW,QAAO,gBAAgB,KAAK,gBAAgB;AAClF,KAAI,KAAK,WAAW,KAAA,EAAW,QAAO,SAAS,KAAK,SAAS;AAC7D,KAAI,KAAK,WAAW,KAAA,EAAW,QAAO,SAAS,KAAK,SAAS;AAC7D,KAAI,KAAK,UAAU,KAAA,EAAW,QAAO,QAAQ,KAAK,QAAQ;AAC1D,KAAI,KAAK,UAAU,KAAA,EAAW,QAAO,QAAQ,KAAK,QAAQ;AAC1D,KAAI,KAAK,cAAc,KAAA,EAAW,QAAO,YAAY,oBAAoB,KAAK;AAC9E,KAAI,KAAK,oBAAoB,MAAO,QAAO,eAAe;AAC1D,QAAO;;;AAIX,SAAS,QAAQ,MAAmC;AAChD,QAAO;EACH,GAAI,KAAK,UAAU,KAAA,KAAa,EAAE,GAAG,KAAK,QAAQ,OAAO;EACzD,GAAI,KAAK,WAAW,KAAA,KAAa,EAAE,GAAG,KAAK,SAAS,OAAO;EAC9D;;;AAIL,SAAS,oBAAoB,MAAsD;AAG/E,KAAI,EADA,KAAK,eAAe,KAAK,eAAe,KAAK,QAAQ,KAAK,cAAc,KAAK,UAChE,QAAO,KAAA;AAExB,QAAO;EACH,aAAa,KAAK,cAAc,cAAc,KAAK,YAAY,GAAG,KAAA;EAClE,aAAa,KAAK,cAAc,cAAc,KAAK,YAAY,GAAG,KAAA;EAClE,MAAM,KAAK,OAAO,OAAO,KAAK,KAAK,GAAG,KAAA;EACtC,YAAY,KAAK,aAAa,aAAa,KAAK,WAAW,GAAG,KAAA;EAC9D,UAAU,KAAK,WAAY,KAAK,SAAS,UAAU,QAAS,KAAA;EAC/D;;;AAIL,SAAgB,aAAa,SAAmE;AAC5F,KAAI,CAAC,QAAQ,cAAc,CAAC,QAAQ,SAAU,QAAO;AAiBrD,QAAOC,gBAAc;EACjB,QAbe;GACf,QAJiB,QAAQ,YAAY,cACnC,2BACA;GAGF,GAAI,QAAQ,YAAY,eAAe,EAAE,KAAK,QAAQ,WAAW,aAAa;GAC9E,GAAI,QAAQ,cAAc,EACtB,UAAU;IACN,MAAM,QAAQ,WAAW,KAAK,KAAK;IACnC,MAAM,QAAQ,WAAW,KAAK,KAAK;IACnC,MAAM,QAAQ,WAAW,KAAK,KAAK;IACtC,EACJ;GACJ;EAIG,UAAU;GAAE,KAAK,QAAQ,YAAY;GAAW,WAAW;GAAK;EACnE,CAAC;;;AAIN,SAAgB,aAAa,SAAmE;AAC5F,KAAI,CAAC,QAAQ,cAAc,CAAC,QAAQ,YAAY,CAAC,QAAQ,eAAe,CAAC,QAAQ,SAC7E,QAAO;AAWX,QAAOC,gBAT6B;EAChC,GAAI,QAAQ,WAAW,EAAE,QAAQ,QAAQ,QAAQ,SAAS,EAAE,GAAG,EAAE;EACjE,GAAI,QAAQ,cAAc,EAAE,QAAQ,QAAQ,QAAQ,YAAY,EAAE,GAAG,EAAE;EACvE,GAAI,QAAQ,eAAe,KAAA,IAAY,EAAE,YAAY,QAAQ,YAAY,GAAG,EAAE;EAC9E,GAAI,QAAQ,WACN,EAAE,cAAc,QAAQ,UAA4C,GACpE,EAAE;EACX,CAEgC;;;AAIrC,SAAgB,qBAAqB,SAA0B;CAC3D,MAAM,iBAAiB,oBAAoB,QAAQ;AACnD,QAAO,iBAAiBC,mBAAiB,eAAe,GAAG;;;;AC5N/D,MAAM,iBAA0D;CAC5D,OAAO;CACP,MAAM;CACN,SAAS;CACT,QAAQ;CACR,QAAQ;CACR,SAAS;CACZ;AAED,MAAM,gBAA0D;CAC5D,UAAU;CACV,SAAS;CACT,SAAS;CACT,MAAM;CACN,MAAM;CACT;AAED,MAAM,qBAAgE;CAClE,IAAI;CACJ,KAAK;CACL,IAAI;CACP;AAED,SAAS,cAAc,MAAc,OAAgB,QAAqC;AACtF,QAAO;EACH,MAAM,cAAc,SAAS;EAC7B,GAAI,QAAQ,EAAE,OAAO,mBAAmB,QAAqC,GAAG,EAAE;EAClF,GAAI,SAAS,EAAE,QAAQ,mBAAmB,SAAuC,GAAG,EAAE;EACzF;;;;;AAML,MAAa,uBACT,UAA0B,EAAE,EAC5B,eAOAC,gBAAc;CACV,OAAO,QAAQ;CACf,GAAI,QAAQ,QACN;EAAE,MAAM;EAAsB,OAAO,EAAE,OAAO,QAAQ,MAAM,QAAQ,KAAK,GAAG,EAAE;EAAE,GAChF,EAAE,MAAM,UAAmB;CACjC,GAAI,QAAQ,aAAa,EACrB,MAAM,eAAe,QAAQ,cAAc,SAC9C;CACD,GAAI,YAAY,UACV,EAAE,SAAS,cAAc,WAAW,SAAS,WAAW,OAAO,WAAW,OAAO,EAAE,GACnF,EAAE;CACR,GAAI,YAAY,YACV,EAAE,SAAS,cAAc,WAAW,WAAW,WAAW,OAAO,WAAW,OAAO,EAAE,GACrF,EAAE;CACX,CAA8B;;;;;;;ACnEnC,IAAa,cAAb,cAAiC,aAAa;CAC1C;CAEA,YAAmB,SAA8B,SAAoB,KAAK;AACtE,QAAM,GAAG,OAAO,OAAO;AACvB,OAAK,OAAO,kBAAkB,SAAS,GAAG,OAAO,OAAO;;CAG5D,WAA2B,SAA+C;AACtE,SAAO,KAAK,KAAK,gBAAgB,QAAQ;;;;;;;;;ACcjD,IAAa,kBAAb,cAAqC,iBAAiB;CAClD;CAEA,YAAmB,SAAkC;AACjD,QAAM,SAAS;AACf,OAAK,UAAU;;CAGnB,WAAkB,SAAqD;EACnE,MAAM,OAAO,KAAK;EAClB,MAAM,WAA6B,EAAE;AAGrC,MACI,KAAK,MAAM,KAAA,KACX,KAAK,MAAM,KAAA,KACX,KAAK,UAAU,KAAA,KACf,KAAK,WAAW,KAAA,KAChB,KAAK,mBAAmB,KAAA,KACxB,KAAK,aAAa,KAAA,GACpB;GACE,MAAM,UAAU,IAAI,YAAY,KAAK,CAAC,WAAW,QAAQ;AACzD,OAAI,QAAS,UAAS,KAAK,QAAQ;;EAIvC,MAAM,UAAU,IAAI,eAAe,EAAE,QAAQ,KAAK,YAAY,QAAQ,CAAC,CAAC,WAAW,QAAQ;AAC3F,MAAI,QAAS,UAAS,KAAK,QAAQ;EAGnC,MAAM,QAAQ,KAAK,OAAO,qBAAqB,KAAK,KAAK,GAAG,KAAA;AAC5D,MAAI,MACA,SAAQ,UAAU,MAAM,SAAS,MAAM,UAAU;GAC7C,MAAM,MAAM;GACZ,UAAU,MAAM;GAChB,MAAM,MAAM;GACZ,gBAAgB;IAAE,QAAQ;KAAE,GAAG;KAAG,GAAG;KAAG;IAAE,MAAM;KAAE,GAAG;KAAG,GAAG;KAAG;IAAE;GACnE,CAAC;EAIN,MAAM,UADgB,UAAU,KAAK,SAAS,KAAA,IAAY,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC,CACzD,WAAW,QAAQ;AACjD,MAAI,QAAS,UAAS,KAAK,QAAQ;AAGnC,MAAI,KAAK,SAAS;GACd,MAAM,aAAa,oBAAoB,KAAK,QAAQ,CAAC,WAAW,QAAQ;AACxE,OAAI,WAAY,UAAS,KAAK,WAAW;;AAI7C,MAAI,KAAK,SAAS;GACd,MAAM,YAAY,qBAAqB,KAAK,QAAQ;AACpD,OAAI,WAAW;IACX,MAAM,eAAe,UAAU,WAAW,QAAQ;AAClD,QAAI,aAAc,UAAS,KAAK,aAAa;;GAGjD,MAAM,UAAU,aAAa,KAAK,QAAQ;AAC1C,OAAI,SAAS;IACT,MAAM,WAAW,QAAQ,WAAW,QAAQ;AAC5C,QAAI,SAAU,UAAS,KAAK,SAAS;;GAGzC,MAAM,UAAU,aAAa,KAAK,QAAQ;AAC1C,OAAI,SAAS;IACT,MAAM,WAAW,QAAQ,WAAW,QAAQ;AAC5C,QAAI,SAAU,UAAS,KAAK,SAAS;;;AAK7C,MAAI,KAAK,mBAAmB,KAAK,gBAAgB,SAAS,GAAG;GACzD,MAAM,cAAgC,EAAE;AACxC,QAAK,MAAM,QAAQ,KAAK,iBAAiB;IACrC,MAAM,YAA6C,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,KAAK,KAAK;AACjF,QAAI,KAAK,UAAU,KAAA,EAAW,WAAU,MAAM,KAAK;AACnD,gBAAY,KAAK,EAAE,SAAS,EAAE,OAAO,WAAW,EAAE,CAAC;;AAEvD,YAAS,KAAK,EAAE,YAAY,aAAa,CAAC;;AAG9C,SAAO,EAAE,UAAU,UAAU;;;;;;;;ACzErC,SAAS,iBAAiB,MAAc,OAAgC;CACpE,MAAM,QAAyC,EAAE,MAAM;AACvD,KAAI,UAAU,KAAA,EAAW,OAAM,MAAM;AACrC,QAAO,EAAE,QAAQ,EAAE,OAAO,OAAO,EAAE;;;;;;;;AASvC,IAAa,QAAb,MAAa,cAAcC,aAAG;CAC1B,OAAe,SAAS;CACxB;CACA;CACA;CAEA,YAAmB,UAAyB,EAAE,EAAE;AAC5C,QAAM,OAAO;EAEb,MAAM,KAAK,QAAQ,MAAM,MAAM;AAC/B,OAAK,UAAU;AACf,OAAK,mBAAmB,QAAQ;AAChC,OAAK,UAAU;GAAE,GAAG;GAAS;GAAI;;CAGrC,IAAW,UAAkB;AACzB,SAAO,KAAK;;CAGhB,IAAW,YAA2C;AAClD,SAAO,KAAK;;CAGhB,WAA2B,SAA+C;EACtE,MAAM,OAAO,KAAK;EAClB,MAAM,KAAK,KAAK;EAChB,MAAM,OAAO,KAAK,QAAQ,SAAS;EACnC,MAAM,WAA6B,EAAE;EAGrC,MAAM,eAAiC,EAAE;AACzC,MAAI,KAAK,YACL,cAAa,KAAK,iBAAiB,KAAK,aAAa,KAAK,iBAAiB,CAAC;AAEhF,WAAS,KAAK,EACV,YAAY;GACR,EAAE,WAAW,EAAE,OAAO;IAAE;IAAI;IAAM,EAAE,EAAE;GACtC,EAAE,aAAa,EAAE,EAAE;GACnB,EAAE,UAAU,aAAa,SAAS,IAAI,eAAe,EAAE,EAAE;GAC5D,EACJ,CAAC;EAgBF,MAAM,UADO,IAAI,gBAZ2B;GACxC,GAAG,KAAK,MAAM,KAAA,IAAYC,qBAAmB,KAAK,EAAE,GAAG,KAAA;GACvD,GAAG,KAAK,MAAM,KAAA,IAAYA,qBAAmB,KAAK,EAAE,GAAG,KAAA;GACvD,OAAO,KAAK,UAAU,KAAA,IAAYA,qBAAmB,KAAK,MAAM,GAAG,KAAA;GACnE,QAAQ,KAAK,WAAW,KAAA,IAAYA,qBAAmB,KAAK,OAAO,GAAG,KAAA;GACtE,UAAU,KAAK;GACf,MAAM,KAAK;GACX,SAAS,KAAK;GACd,SAAS,KAAK;GACd,gBAAgB,KAAK;GACrB,UAAU,KAAK;GAClB,CAC2C,CACvB,WAAW,QAA0B;AAC1D,MAAI,QAAS,UAAS,KAAK,QAAQ;EAenC,MAAM,YADS,IAAI,SAXuB;GACtC,YACI,KAAK,eAAe,KAAK,OAAO,CAAC,IAAI,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,GAAG,KAAA;GAC3E,UAAU,KAAK;GACf,QAAQ,KAAK;GACb,SAAS,KAAK;GACd,MAAM,KAAK;GACX,SAAS,KAAK;GACd,SAAS,KAAK;GACd,eAAe,KAAK;GACvB,CAC2C,CACnB,WAAW,QAAQ;AAC5C,MAAI,UAAW,UAAS,KAAK,UAAU;AAEvC,SAAO,EAAE,QAAQ,UAAU;;CAG/B,MAAsB,SAA2B;EAC7C,MAAM,OAAO,KAAK;EAClB,MAAM,KAAK,KAAK;EAChB,MAAM,OAAO,UAAU,KAAK,QAAQ,SAAS,KAAK;EAElD,IAAI,IAAI;AACR,OAAK,WAAW,MAAM;GAAE;GAAI;GAAM,CAAC,CAAC;AACpC,OAAK;AAEL,MAAI,KAAK,aAAa;GAClB,MAAM,UAAuD,EAAE,MAAM,KAAK,aAAa;AACvF,OAAI,KAAK,qBAAqB,KAAA,EAAW,SAAQ,MAAM,KAAK;AAC5D,QAAK,gBAAgB,MAAM,QAAQ,CAAC;QAEpC,MAAK;AAET,OAAK;EAeL,MAAM,UAZO,IAAI,gBAAgB;GAC7B,GAAG,KAAK,MAAM,KAAA,IAAYA,qBAAmB,KAAK,EAAE,GAAG,KAAA;GACvD,GAAG,KAAK,MAAM,KAAA,IAAYA,qBAAmB,KAAK,EAAE,GAAG,KAAA;GACvD,OAAO,KAAK,UAAU,KAAA,IAAYA,qBAAmB,KAAK,MAAM,GAAG,KAAA;GACnE,QAAQ,KAAK,WAAW,KAAA,IAAYA,qBAAmB,KAAK,OAAO,GAAG,KAAA;GACtE,UAAU,KAAK;GACf,MAAM,KAAK;GACX,SAAS,KAAK;GACd,SAAS,KAAK;GACd,gBAAgB,KAAK;GACrB,UAAU,KAAK;GAClB,CAAC,CACmB,WAAW,QAA0B;AAC1D,MAAI,QACA,MAAK,IAAI,QAAQ;EAIrB,MAAM,aAA+B;GACjC,YACI,KAAK,eAAe,KAAK,OAAO,CAAC,IAAI,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,GAAG,KAAA;GAC3E,UAAU,KAAK;GACf,QAAQ,KAAK;GACb,SAAS,KAAK;GACd,MAAM,KAAK;GACX,SAAS,KAAK;GACd,SAAS,KAAK;GACd,eAAe,KAAK;GACvB;AACD,OAAK,IAAI,SAAS,WAAW,CAAC,MAAM,QAAQ;AAE5C,OAAK;AACL,SAAO;;;;;ACvLf,MAAM,eAAe,IAAI,IAAI;CAAC;CAAU;CAAW;CAAQ;CAAY,CAAC;AAExE,MAAM,iBAAiB,IAAI,IAAI,CAAC,QAAQ,OAAO,CAAC;AAEhD,MAAM,kBAAkB,IAAI,IAAI,CAAC,SAAS,OAAO,CAAC;AAoClD,SAAS,uBACL,MACA,KACA,QACA,SACA,QACc;CACd,MAAM,QAAyC,EAAE;AAEjD,KAAI,aAAa,IAAI,KAAK,IAAI,IAC1B,OAAM,MAAM;UACL,eAAe,IAAI,KAAK,IAAI,IACnC,OAAM,MAAM;UACL,gBAAgB,IAAI,KAAK,IAAI,IACpC,OAAM,MAAM;UACL,SAAS,YAAY,IAC5B,OAAM,MAAM;WACJ,SAAS,UAAU,SAAS,UAAU,YAAY,KAAA,EAC1D,OAAM,UAAU,UAAU,IAAI;UACvB,SAAS,SAAS;AACzB,QAAM,SAAS,UAAU;AACzB,QAAM,MAAM,OAAO;YACZ,SAAS,QAChB,OAAM,SAAS,UAAU;UAClB,SAAS,UAAU,IAC1B,OAAM,MAAM;AAGhB,QAAO,GAAG,KAAK,SAAS,OAAO,KAAK,MAAM,CAAC,SAAS,IAAI,EAAE,OAAO,OAAO,GAAG,EAAE,EAAE;;AAGnF,SAAgB,gBAAgB,SAA6C;CACzE,MAAM,WAA6B,EAAE;CACrC,MAAM,QAAyC,EAAE;AACjD,KAAI,QAAQ,MAAO,OAAM,MAAM,QAAQ;AACvC,KAAI,QAAQ,mBAAmB,KAAA,EAAW,OAAM,WAAW,QAAQ,iBAAiB,IAAI;AACxF,KAAI,QAAQ,qBAAqB,KAAA,EAAW,OAAM,QAAQ,QAAQ;AAClE,KAAI,OAAO,KAAK,MAAM,CAAC,SAAS,EAAG,UAAS,KAAK,EAAE,OAAO,OAAO,CAAC;AAElE,KAAI,QAAQ,KACR,UAAS,KACL,uBACI,QAAQ,MACR,QAAQ,KACR,QAAQ,QACR,QAAQ,SACR,QAAQ,OACX,CACJ;AAGL,QAAO,EAAE,gBAAgB,SAAS,WAAW,IAAI,EAAE,GAAG,UAAU;;;;;;AAOpE,IAAa,aAAb,cAAgC,iBAAiB;CAC7C;CAEA,YAAmB,UAA8B,EAAE,EAAE;AACjD,QAAM,eAAe;AACrB,OAAK,UAAU;;CAGnB,WAA2B,UAAoC;AAC3D,SAAO,gBAAgB,KAAK,QAAQ;;;;;ACpG5C,MAAM,eAAe;AAErB,MAAM,YACF;AAEJ,MAAM,cAAc;AAEpB,MAAM,QACF;AAEJ,SAAS,kBAAkB,UAGxB;CACC,MAAM,UAGD,EAAE;AACP,MAAK,MAAM,SAAS,SAChB,KAAI,iBAAiB,OAAO;EACxB,MAAM,OAAO,MAAM;AACnB,MAAI,KACA,SAAQ,KAAK;GAAE,MAAM,MAAM;GAAS,SAAS;GAAM,CAAC;;AAIhE,QAAO;;;;;;AAOX,IAAa,QAAb,cAA2B,aAAa;CACpC;CACA;CACA;CACA;CAEA,YACI,UACA,YACA,YACA,cACF;AACE,QAAM,QAAQ;AACd,OAAK,WAAW;AAChB,OAAK,aAAa;AAClB,OAAK,aAAa;AAClB,OAAK,eAAe;;CAGxB,WAA2B,SAAmC;EAC1D,MAAM,WAA6B,EAAE;AAGrC,WAAS,KAAK,EACV,OAAO;GACH,WAAW;GACX,WAAW;GACX,WAAW;GACd,EACJ,CAAC;EAGF,MAAM,eAAiC,EAAE;AACzC,MAAI,KAAK,YAAY;GACjB,MAAM,QAAQ,KAAK,WAAW,WAAW,QAAQ;AACjD,OAAI,MAAO,cAAa,KAAK,MAAM;;EAIvC,MAAM,iBAAmC,CACrC,EACI,eAAe;GACX,EAAE,WAAW,EAAE,OAAO;IAAE,IAAI;IAAG,MAAM;IAAI,EAAE,EAAE;GAC7C,EAAE,gBAAgB,EAAE,EAAE;GACtB,EAAE,UAAU,EAAE,EAAE;GACnB,EACJ,EACD,EACI,aAAa,EACT,UAAU;GACN,EAAE,SAAS,EAAE,OAAO;IAAE,GAAG;IAAG,GAAG;IAAG,EAAE,EAAE;GACtC,EAAE,SAAS,EAAE,OAAO;IAAE,IAAI;IAAG,IAAI;IAAG,EAAE,EAAE;GACxC,EAAE,WAAW,EAAE,OAAO;IAAE,GAAG;IAAG,GAAG;IAAG,EAAE,EAAE;GACxC,EAAE,WAAW,EAAE,OAAO;IAAE,IAAI;IAAG,IAAI;IAAG,EAAE,EAAE;GAC7C,EACJ,EACJ,CACJ;AACD,OAAK,MAAM,SAAS,KAAK,UAAU;GAC/B,MAAM,MAAM,MAAM,WAAW,QAAQ;AACrC,OAAI,IAAK,gBAAe,KAAK,IAAI;;AAErC,eAAa,KAAK,EAAE,YAAY,gBAAgB,CAAC;AAEjD,WAAS,KAAK,EAAE,UAAU,cAAc,CAAC;AAGzC,WAAS,KAAK,EAAE,eAAe,CAAC,EAAE,sBAAsB,EAAE,EAAE,CAAC,EAAE,CAAC;AAGhE,MAAI,KAAK,YAAY;GACjB,MAAM,WAAW,gBAAgB,KAAK,WAAW;AACjD,OAAI,SAAU,UAAS,KAAK,SAAS;;EAIzC,MAAM,aAAa,kBAAkB,KAAK,SAAS;AACnD,MAAI,WAAW,SAAS,GAAG;GAEvB,MAAM,YADS,IAAI,YAAY,WAAW,CACjB,WAAW,QAAQ;AAC5C,OAAI,UAAW,UAAS,KAAK,UAAU;;AAG3C,SAAO,EAAE,SAAS,UAAU;;CAGhC,MAAa,SAA2B;EACpC,IAAI,IAAI,SAAS,MAAM;AAGvB,OAAK;AACL,MAAI,KAAK,YAAY;GACjB,MAAM,QAAQ,KAAK,WAAW,WAAW,QAAQ;AACjD,OAAI,MAAO,MAAK,IAAI,MAAM;;AAI9B,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK,MAAM,SAAS,KAAK,SACrB,KAAI,OAAQ,MAA0C,UAAU,WAC5D,MAAM,MAAsD,MAAM,QAAQ;OACvE;GACH,MAAM,MAAM,MAAM,WAAW,QAAQ;AACrC,OAAI,IAAK,MAAK,IAAI,IAAI;;AAG9B,OAAK;AAEL,OAAK;AAEL,MAAI,KAAK,YAAY;GACjB,MAAM,WAAW,gBAAgB,KAAK,WAAW;AACjD,OAAI,SAAU,MAAK,IAAI,SAAS;;EAGpC,MAAM,aAAa,kBAAkB,KAAK,SAAS;AACnD,MAAI,WAAW,SAAS,GAAG;GAEvB,MAAM,YADS,IAAI,YAAY,WAAW,CACjB,WAAW,QAAQ;AAC5C,OAAI,UAAW,MAAK,IAAI,UAAU;;AAGtC,OAAK;AACL,SAAO;;;;;ACtKf,MAAM,mBAAmB;AAEzB,IAAa,cAAb,MAAa,oBAAoB,qBAAqB;CAClD,OAAe,WAAW,qBAAqB,cAAc,iBAAiB;CAE9E,cAAqB;AACjB,QAAM,gBAAgB;;CAG1B,aAAoB;AAChB,SAAO,YAAY,SAAS,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;;;;;ACV7D,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuDlB,IAAa,eAAb,MAAa,qBAAqB,qBAAqB;CACnD,OAAc,WAAW,qBAAqB,cAAc,UAAU;CAEtE,cAAqB;AACjB,QAAM,UAAU;;CAGpB,aAAoB;AAChB,SAAO,aAAa,SAAS,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;;;;;AC/D9D,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;AAuBvB,IAAa,iBAAb,MAAa,uBAAuB,qBAAqB;CACrD,OAAe,WAAW,qBAAqB,cAAc,eAAe;CAE5E,cAAqB;AACjB,QAAM,WAAW;;CAGrB,aAAoB;AAChB,SAAO,eAAe,SAAS,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;;;;;ACoBhE,SAAS,mBAAmB,SAA6C;CACrE,MAAM,OAAO,IAAI,eAAe;AAChC,MAAK,MAAM,KAAK,QACZ,MAAK,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAA+B;AAElF,QAAO;;AAGX,IAAa,OAAb,MAAkB;CACd;CACA;CACA;CACA;CACA;CAGA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAGA;CACA;CACA;CAGA;CAEA,YAAmB,SAA+B;EAC9C,MAAM,SAAS,QAAQ,UAAU,EAAE;AACnC,OAAK,eAAe;AACpB,OAAK,mBAAmB;AACxB,OAAK,cAAc,QAAQ;AAC3B,OAAK,iBAAiB,QAAQ,aACxBC,qBAAmB,QAAQ,WAAW,GACtC,KAAA;AACN,OAAK,kBAAkB,QAAQ,cACzBA,qBAAmB,QAAQ,YAAY,GACvC,KAAA;;CAKV,IAAW,iBAAiC;AACxC,SAAQ,KAAK,mBAAmB,IAAI,eAAe,KAAK,iBAAiB;;CAG7E,IAAW,gBAA+B;AACtC,SAAQ,KAAK,kBAAkB,IAAI,eAAe;;CAGtD,IAAW,eAA6B;AACpC,MAAI,CAAC,KAAK,cAAc;AACpB,QAAK,eAAe,IAAI,cAAc;AACtC,QAAK,IAAI,IAAI,GAAG,IAAI,KAAK,aAAa,QAAQ,KAAK;AAC/C,SAAK,aAAa,SAAS,IAAI,EAAE;AACjC,QAAI,KAAK,aAAa,GAAG,MACrB,MAAK,aAAa,cAAc,IAAI,EAAE;;;AAIlD,SAAO,KAAK;;CAGhB,IAAW,oBAAmC;AAC1C,MAAI,CAAC,KAAK,SACN,MAAK,WAAW,mBAAmB;GAC/B;IACI,IAAI;IACJ,MAAM;IACN,QAAQ;IACX;GACD;IACI,IAAI;IACJ,MAAM;IACN,QAAQ;IACX;GACD;IACI,IAAI;IACJ,MAAM;IACN,QAAQ;IACX;GACJ,CAAC;AAEN,SAAO,KAAK;;CAGhB,IAAW,QAAe;AACtB,SAAQ,KAAK,UAAU,IAAI,OAAO;;CAGtC,IAAW,SAA0B;AACjC,SAAQ,KAAK,WAAW,IAAI,iBAAiB;;CAGjD,IAAW,YAAgC;AACvC,SAAQ,KAAK,cAAc,IAAI,oBAAoB;;CAGvD,IAAW,aAAkC;AACzC,SAAQ,KAAK,eAAe,IAAI,qBAAqB;;CAGzD,IAAW,sBAA2C;AAClD,MAAI,CAAC,KAAK,qBAAqB;AAC3B,QAAK,sBAAsB,IAAI,oBAAoB;IAC/C,YAAY,KAAK;IACjB,aAAa,KAAK;IAClB,UAAU,KAAK,aAAa,KAAK,GAAG,MAAM,MAAM,EAAE;IACrD,CAAC;GAEF,MAAM,WAAW,KAAK,oBAAoB;AAC1C,YAAS,gBACL,GACA,mFACA,gCACH;AACD,QAAK,IAAI,IAAI,GAAG,IAAI,KAAK,aAAa,QAAQ,IAC1C,UAAS,gBACL,IAAI,GACJ,6EACA,eAAe,IAAI,EAAE,MACxB;GAEL,MAAM,IAAI,KAAK,aAAa,SAAS;AACrC,YAAS,gBACL,GACA,iFACA,gBACH;AACD,YAAS,gBACL,IAAI,GACJ,iFACA,gBACH;AACD,YAAS,gBACL,IAAI,GACJ,6EACA,mBACH;AACD,YAAS,gBACL,IAAI,GACJ,mFACA,kBACH;;AAEL,SAAO,KAAK;;CAGhB,IAAW,QAAsB;AAC7B,SAAQ,KAAK,UAAU,IAAI,cAAc;;CAG7C,IAAW,cAA2B;AAClC,SAAQ,KAAK,gBAAgB,IAAI,aAAa;;CAGlD,IAAW,YAAoC;AAC3C,SAAQ,KAAK,cAAc,IAAI,uBAAuB,KAAK,YAAY;;CAG3E,IAAW,YAA4B;AACnC,SAAQ,KAAK,cAAc,IAAI,gBAAgB;;CAGnD,IAAW,cAAkC;AACzC,MAAI,CAAC,KAAK,aAAa;GACnB,MAAM,KAAK,KAAK,aAAa,MAAM,MAAM,EAAE,aAAa,EAAE;AAC1D,QAAK,cAAc,IAAI,mBAAmB,GAAG;;AAEjD,SAAO,KAAK;;CAGhB,IAAW,2BAA0C;AACjD,MAAI,CAAC,KAAK,gBACN,MAAK,kBAAkB,mBAAmB,CACtC;GACI,IAAI;GACJ,MAAM;GACN,QAAQ;GACX,EACD;GACI,IAAI;GACJ,MAAM;GACN,QAAQ;GACX,CACJ,CAAC;AAEN,SAAO,KAAK;;CAGhB,IAAW,cAAkC;AACzC,SAAQ,KAAK,gBAAgB,IAAI,oBAAoB;;CAGzD,IAAW,2BAA0C;AACjD,MAAI,CAAC,KAAK,gBACN,MAAK,kBAAkB,mBAAmB,CACtC;GACI,IAAI;GACJ,MAAM;GACN,QAAQ;GACX,CACJ,CAAC;AAEN,SAAO,KAAK;;CAGhB,IAAW,SAA2B;AAClC,MAAI,CAAC,KAAK,QAAQ;AACd,QAAK,SAAS,EAAE;AAChB,QAAK,MAAM,KAAK,KAAK,aACjB,MAAK,OAAO,KACR,IAAI,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,CAC1E;;AAGT,SAAO,KAAK;;CAGhB,IAAW,gBAGR;AACC,MAAI,CAAC,KAAK,eAAe;AACrB,QAAK,gBAAgB,EAAE;AACvB,QAAK,IAAI,IAAI,GAAG,IAAI,KAAK,aAAa,QAAQ,IAC1C,MAAK,cAAc,KAAK;IACpB,MAAM,KAAK,OAAO;IAClB,eAAe,mBAAmB,CAC9B;KACI,IAAI;KACJ,MAAM;KACN,QAAQ;KACX,CACJ,CAAC;IACL,CAAC;;AAGV,SAAO,KAAK;;CAGhB,IAAW,cAAqC;AAC5C,MAAI,CAAC,KAAK,aAAa;AACnB,QAAK,cAAc,EAAE;AACrB,QAAK,IAAI,IAAI,GAAG,IAAI,KAAK,aAAa,QAAQ,IAC1C,KAAI,KAAK,aAAa,GAAG,MACrB,MAAK,YAAY,KAAK,IAAI,WAAW,EAAE,MAAM,KAAK,aAAa,GAAG,OAAO,CAAC,CAAC;;AAIvF,SAAO,KAAK;;CAGhB,IAAW,2BAA0C;AACjD,SAAQ,KAAK,oBAAoB,IAAI,eAAe;;;;;;;;AC7T5D,IAAa,OAAb,cAA0B,gBAAgB;CACtC,YAAmB,OAAe;AAC9B,QAAM,OAAO,MAAM;;;;;;;;;;ACK3B,IAAa,QAAb,cAA2B,aAAa;CACpC,YAAmB,WAAmB,aAAqB;AACvD,QAAM,QAAQ;AAEd,OAAK,KAAK,KACN,IAAI,uBAAuB;GACvB,IAAI;IAAE,KAAK;IAAM,OAAO,IAAI,OAAO,YAAY,CAAC;IAAI;GACpD,MAAM;IAAE,KAAK;IAAQ,OAAO;IAAW;GAC1C,CAAC,CACL;AAED,OAAK,KAAK,KACN,IAAI,eAAe;GACf,MAAM;GACN,YAAY;IACR,MAAM;KAAE,KAAK;KAAQ,OAAO;KAAS;IACrC,UAAU;KAAE,KAAK;KAAY,OAAO;KAAG;IAC1C;GACJ,CAAC,CACL;AAED,OAAK,KAAK,KAAK,IAAI,gBAAgB,OAAO,YAAY,CAAC;;;;;;AAO/D,IAAa,mBAAb,cAAsC,MAAM;CACxC,YAAmB,cAAc,OAAO;AACpC,QAAM,YAAY,YAAY;;;;;;AAOtC,IAAa,gBAAb,cAAmC,MAAM;CACrC,YAAmB,aAAsB,QAAiB;AACtD,QAAM,UAAU,qBAAqB,eAAe,GAAG;;;;;;;;;AC5C/D,IAAa,WAAb,cAA8B,aAAa;CACvC,YAAmB,UAAkB;AACjC,QAAM,aAAa;AACnB,OAAK,KAAK,KAAK,WAAW,EAAE,aAAa,UAAU,CAAC,CAAC;AACrD,OAAK,KAAK,KAAK,IAAI,SAAS,CAAC;;;;;;;;ACNrC,IAAa,6BAAb,cAAgD,eAG7C;CACC,YAAmB,IAAY,MAAc;AACzC,QAAM;GACF,MAAM;GACN,YAAY;IAAE,IAAI;KAAE,KAAK;KAAM,OAAO;KAAI;IAAE,MAAM;KAAE,KAAK;KAAQ,OAAO;KAAM;IAAE;GACnF,CAAC;;;;;;;;;ACPV,IAAa,2BAAb,cAA8C,aAAa;CACvD,cAAqB;AACjB,QAAM,YAAY;;;;;;;;;ACF1B,IAAa,6BAAb,cAAgD,aAAa;CACzD,cAAqB;AACjB,QAAM,aAAa;;;;;;;;;ACU3B,IAAa,aAAb,MAAa,mBAAmB,iBAAiB;CAC7C,OAAe,SAAS;CACxB;CACA;CAEA,YAAmB,SAA6B;AAC5C,QAAM,UAAU;AAChB,OAAK,KAAK,WAAW;AACrB,OAAK,UAAU;;CAGnB,WAA2B,SAAmC;EAC1D,MAAM,OAAO,KAAK;EAClB,MAAM,KAAK,KAAK;EAChB,MAAM,OAAO,SAAS;EACtB,MAAM,WAA6B,EAAE;AAGrC,WAAS,KAAK,EACV,eAAe;GACX,EAAE,WAAW,EAAE,OAAO;IAAE;IAAI;IAAM,EAAE,EAAE;GACtC,EAAE,gBAAgB,EAAE,EAAE;GACtB,EAAE,UAAU,EAAE,EAAE;GACnB,EACJ,CAAC;EAGF,MAAM,eAAiC,EAAE;EACzC,MAAM,YAA6C,EAAE;AACrD,MAAI,KAAK,mBAAmB,KAAA,EAAW,WAAU,QAAQ,KAAK,iBAAiB,IAAI;AACnF,MAAI,KAAK,aAAa,KAAA,EAAW,WAAU,MAAM,KAAK;AACtD,MAAI,OAAO,KAAK,UAAU,CAAC,SAAS,EAAG,cAAa,KAAK,EAAE,OAAO,WAAW,CAAC;AAC9E,eAAa,KAAK,EACd,SAAS,EACL,OAAO;GACH,GAAG,KAAK,MAAM,KAAA,IAAYC,qBAAmB,KAAK,EAAE,GAAG;GACvD,GAAG,KAAK,MAAM,KAAA,IAAYA,qBAAmB,KAAK,EAAE,GAAG;GAC1D,EACJ,EACJ,CAAC;AACF,eAAa,KAAK,EACd,SAAS,EACL,OAAO;GACH,IAAI,KAAK,UAAU,KAAA,IAAYA,qBAAmB,KAAK,MAAM,GAAG;GAChE,IAAI,KAAK,WAAW,KAAA,IAAYA,qBAAmB,KAAK,OAAO,GAAG;GACrE,EACJ,EACJ,CAAC;AACF,eAAa,KAAK,EAAE,WAAW,EAAE,OAAO;GAAE,GAAG;GAAG,GAAG;GAAG,EAAE,EAAE,CAAC;AAC3D,eAAa,KAAK,EAAE,WAAW,EAAE,OAAO;GAAE,IAAI;GAAG,IAAI;GAAG,EAAE,EAAE,CAAC;AAC7D,WAAS,KAAK,EAAE,aAAa,EAAE,UAAU,cAAc,EAAE,CAAC;AAG1D,OAAK,MAAM,SAAS,KAAK,UAAU;GAC/B,MAAM,MAAM,MAAM,WAAW,QAAQ;AACrC,OAAI,IAAK,UAAS,KAAK,IAAI;;AAG/B,SAAO,EAAE,WAAW,UAAU;;;;;;;;ACjEtC,IAAa,YAAb,MAAa,kBAAkBC,aAAG;CAC9B,OAAe,SAAS;CACxB;CAEA,YAAmB,UAA6B,EAAE,EAAE;AAChD,QAAM,OAAO;EAEb,MAAM,KAAK,QAAQ,MAAM,UAAU;AACnC,OAAK,UAAU;EACf,MAAM,OAAO,QAAQ,QAAQ,QAAQ;EAErC,MAAM,KAAKC,qBAAmB,QAAQ,MAAM,EAAE;EAC9C,MAAM,KAAKA,qBAAmB,QAAQ,MAAM,EAAE;EAC9C,MAAM,KAAKA,qBAAmB,QAAQ,MAAM,IAAI;EAChD,MAAM,KAAKA,qBAAmB,QAAQ,MAAM,IAAI;AAEhD,OAAK,KAAK,KACN,IAAI,eAAe;GACf,MAAM;GACN,UAAU;IACN,IAAI,eAAe;KACf,MAAM;KACN,YAAY;MACR,IAAI;OAAE,KAAK;OAAM,OAAO;OAAI;MAC5B,MAAM;OAAE,KAAK;OAAQ,OAAO;OAAM;MACrC;KACJ,CAAC;IACF,IAAI,0BAA0B;IAC9B,IAAI,eAAe,EAAE,MAAM,UAAU,CAAC;IACzC;GACJ,CAAC,CACL;EAED,MAAM,OAAO,KAAK,IAAI,IAAI,GAAG;EAC7B,MAAM,OAAO,KAAK,IAAI,IAAI,GAAG;EAE7B,MAAM,YAGF,KAAK,MAAM,KAAK,YACH;GACH,MAAM,IAGF,EAAE;AACN,OAAI,KAAK,GAAI,GAAE,QAAQ;IAAE,KAAK;IAAS,OAAO;IAAG;AACjD,OAAI,KAAK,GAAI,GAAE,QAAQ;IAAE,KAAK;IAAS,OAAO;IAAG;AACjD,UAAO;MACP,GACJ,KAAA;EAEV,MAAM,eAAqC,CACvC,IAAI,eAAe;GACf,MAAM;GACN,UAAU,CACN,IAAI,eAAe;IACf,MAAM;IACN,YAAY;KAAE,GAAG;MAAE,KAAK;MAAK,OAAO;MAAM;KAAE,GAAG;MAAE,KAAK;MAAK,OAAO;MAAM;KAAE;IAC7E,CAAC,EACF,IAAI,eAAe;IACf,MAAM;IACN,YAAY;KACR,IAAI;MAAE,KAAK;MAAM,OAAO,KAAK,IAAI,KAAK,GAAG;MAAE;KAC3C,IAAI;MAAE,KAAK;MAAM,OAAO,KAAK,IAAI,KAAK,GAAG;MAAE;KAC9C;IACJ,CAAC,CACL;GACD,YAAY;GACf,CAAC,EACF,IAAI,eAAe,EAAE,QAAQ,QAAQ,CAAC,CACzC;AAED,MAAI,QAAQ,SAAS,KAAA,EACjB,cAAa,KAAK,UAAU,QAAQ,KAAK,CAAC;AAE9C,MAAI,QAAQ,QACR,cAAa,KAAK,oBAAoB,QAAQ,QAAQ,CAAC;AAG3D,OAAK,KAAK,KACN,IAAI,eAAe;GACf,MAAM;GACN,UAAU;GACb,CAAC,CACL;AAED,OAAK,KAAK,KACN,IAAI,eAAe;GACf,MAAM;GACN,UAAU;IACN,IAAI,eAAe;KACf,MAAM;KACN,YAAY,EAAE,MAAM;MAAE,KAAK;MAAQ,OAAO;MAAU,EAAE;KACzD,CAAC;IACF,IAAI,eAAe,EAAE,MAAM,cAAc,CAAC;IAC1C,IAAI,eAAe,EAAE,MAAM,OAAO,CAAC;IACtC;GACJ,CAAC,CACL;;CAGL,IAAW,UAAkB;AACzB,SAAO,KAAK;;;;;;AAoBpB,IAAa,iBAAb,MAAa,uBAAuBD,aAAG;CACnC,OAAe,SAAS;CACxB;CAEA,YAAmB,UAAkC,EAAE,EAAE;AACrD,QAAM,UAAU;EAEhB,MAAM,KAAK,QAAQ,MAAM,eAAe;AACxC,OAAK,UAAU;EACf,MAAM,OAAO,QAAQ,QAAQ,aAAa;EAE1C,MAAM,KAAKC,qBAAmB,QAAQ,MAAM,EAAE;EAC9C,MAAM,KAAKA,qBAAmB,QAAQ,MAAM,EAAE;EAC9C,MAAM,KAAKA,qBAAmB,QAAQ,MAAM,IAAI;EAChD,MAAM,KAAKA,qBAAmB,QAAQ,MAAM,IAAI;AAEhD,OAAK,KAAK,KACN,IAAI,eAAe;GACf,MAAM;GACN,UAAU;IACN,IAAI,eAAe;KACf,MAAM;KACN,YAAY;MACR,IAAI;OAAE,KAAK;OAAM,OAAO;OAAI;MAC5B,MAAM;OAAE,KAAK;OAAQ,OAAO;OAAM;MACrC;KACJ,CAAC;IACF,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAC;IAC5C,IAAI,eAAe,EAAE,MAAM,UAAU,CAAC;IACzC;GACJ,CAAC,CACL;EAED,MAAM,OAAO,KAAK,IAAI,IAAI,GAAG;EAC7B,MAAM,OAAO,KAAK,IAAI,IAAI,GAAG;EAE7B,MAAM,YAGF,KAAK,MAAM,KAAK,YACH;GACH,MAAM,IAGF,EAAE;AACN,OAAI,KAAK,GAAI,GAAE,QAAQ;IAAE,KAAK;IAAS,OAAO;IAAG;AACjD,OAAI,KAAK,GAAI,GAAE,QAAQ;IAAE,KAAK;IAAS,OAAO;IAAG;AACjD,UAAO;MACP,GACJ,KAAA;EAEV,MAAM,eAAqC,CACvC,IAAI,eAAe;GACf,MAAM;GACN,UAAU,CACN,IAAI,eAAe;IACf,MAAM;IACN,YAAY;KAAE,GAAG;MAAE,KAAK;MAAK,OAAO;MAAM;KAAE,GAAG;MAAE,KAAK;MAAK,OAAO;MAAM;KAAE;IAC7E,CAAC,EACF,IAAI,eAAe;IACf,MAAM;IACN,YAAY;KACR,IAAI;MAAE,KAAK;MAAM,OAAO,KAAK,IAAI,KAAK,GAAG;MAAE;KAC3C,IAAI;MAAE,KAAK;MAAM,OAAO,KAAK,IAAI,KAAK,GAAG;MAAE;KAC9C;IACJ,CAAC,CACL;GACD,YAAY;GACf,CAAC,EACF,IAAI,eAAe,EAAE,QAAQ,QAAQ,CAAC,CACzC;AAED,MAAI,QAAQ,SAAS,KAAA,EACjB,cAAa,KAAK,UAAU,QAAQ,KAAK,CAAC;EAI9C,MAAM,gBAAgB,QAAQ,kBAAkB,QAAQ;AACxD,MAAI,QAAQ,WAAW,cACnB,cAAa,KACT,oBACI,QAAQ,WAAW,EAAE,EACrB,gBACM;GACI,WAAW,QAAQ;GACnB,SAAS,QAAQ;GACjB,OAAO,QAAQ;GACf,QAAQ,QAAQ;GACnB,GACD,KAAA,EACT,CACJ;AAGL,OAAK,KAAK,KACN,IAAI,eAAe;GACf,MAAM;GACN,UAAU;GACb,CAAC,CACL;;CAGL,IAAW,UAAkB;AACzB,SAAO,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|