pptx-craft 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/registry.ts","../src/core/theme.ts","../src/core/slide-master.ts","../src/core/slide-layout.ts","../src/core/notes-master.ts","../src/core/handout-master.ts","../src/ooxml/xml.ts","../src/ooxml/units.ts","../src/ooxml/constants.ts","../src/ooxml/serializers/shared.ts","../src/ooxml/serializers/color.ts","../src/ooxml/serializers/scene3d.ts","../src/ooxml/serializers/text.ts","../src/ooxml/serializers/image.ts","../src/ooxml/serializers/shape.ts","../src/ooxml/serializers/table.ts","../src/ooxml/serializers/chart.ts","../src/ooxml/serializers/media.ts","../src/ooxml/serializers/group.ts","../src/ooxml/serializers/connector.ts","../src/io/writer.ts","../src/core/relationships.ts","../src/ooxml/serializers/slide.ts","../src/ooxml/serializers/presentation.ts","../src/ooxml/serializers/theme.ts","../src/ooxml/serializers/slide-master.ts","../src/ooxml/serializers/slide-layout.ts","../src/core/content-types.ts","../src/ooxml/serializers/content-types.ts","../src/ooxml/serializers/notes.ts","../src/ooxml/serializers/pres-props.ts","../src/ooxml/serializers/view-props.ts","../src/ooxml/serializers/notes-master.ts","../src/ooxml/serializers/comment-authors.ts","../src/ooxml/serializers/comments.ts","../src/ooxml/serializers/handout-master.ts","../src/ooxml/serializers/tags.ts","../src/ooxml/serializers/slide-update-info.ts","../src/ooxml/serializers/core-props.ts","../src/elements/base.ts","../src/elements/text.ts","../src/elements/image.ts","../src/elements/shape.ts","../src/elements/table.ts","../src/elements/chart.ts","../src/elements/media.ts","../src/elements/group.ts","../src/elements/connector.ts","../src/builder/slide-builder.ts","../src/builder/presentation-builder.ts"],"sourcesContent":["import type { ElementType, IElementSerializer, IElement, IRegistry } from './types.js';\n\nexport class Registry implements IRegistry {\n private serializers = new Map<ElementType, IElementSerializer>();\n\n registerElement<E extends IElement>(type: ElementType, serializer: IElementSerializer<E>): void {\n this.serializers.set(type, serializer as IElementSerializer);\n }\n\n getSerializer(type: ElementType): IElementSerializer | undefined {\n return this.serializers.get(type);\n }\n}\n","import type { ColorScheme, FontScheme, Theme } from './types.js';\n\nexport const defaultColorScheme: ColorScheme = {\n dk1: '000000',\n lt1: 'FFFFFF',\n dk2: '44546A',\n lt2: 'E7E6E6',\n accent1: '4472C4',\n accent2: 'ED7D31',\n accent3: 'A5A5A5',\n accent4: 'FFC000',\n accent5: '5B9BD5',\n accent6: '70AD47',\n hlink: '0563C1',\n folHlink: '954F72',\n};\n\nexport const defaultFontScheme: FontScheme = {\n majorFont: 'Calibri Light',\n minorFont: 'Calibri',\n};\n\nexport const defaultTheme: Theme = {\n name: 'Office Theme',\n colors: defaultColorScheme,\n fonts: defaultFontScheme,\n};\n","import type { Color, IElement } from './types.js';\n\nexport interface SlideMasterDef {\n name: string;\n background?: Color;\n elements?: IElement[];\n}\n\nexport class SlideMaster {\n name: string;\n background?: Color;\n elements: IElement[];\n\n constructor(def: SlideMasterDef) {\n this.name = def.name;\n this.background = def.background;\n this.elements = def.elements ?? [];\n }\n}\n","import type { Placement } from './types.js';\n\nexport type PlaceholderType = 'title' | 'body' | 'ctrTitle' | 'subTitle' | 'dt' | 'ftr' | 'sldNum';\n\nexport interface PlaceholderDef {\n type: PlaceholderType;\n placement: Placement;\n idx?: number;\n}\n\nexport type LayoutType = 'blank' | 'title' | 'titleAndContent' | 'sectionHeader' | 'twoContent';\n\nexport interface SlideLayoutDef {\n name: string;\n type?: LayoutType;\n placeholders?: PlaceholderDef[];\n}\n\nexport class SlideLayout {\n name: string;\n type: LayoutType;\n placeholders: PlaceholderDef[];\n\n constructor(def: SlideLayoutDef) {\n this.name = def.name;\n this.type = def.type ?? 'blank';\n this.placeholders = def.placeholders ?? [];\n }\n}\n\nexport const builtinLayouts: Record<string, SlideLayoutDef> = {\n blank: {\n name: 'Blank',\n type: 'blank',\n placeholders: [],\n },\n title: {\n name: 'Title Slide',\n type: 'title',\n placeholders: [\n { type: 'ctrTitle', placement: { x: 0.69, y: 1.65, w: 8.63, h: 2.13 }, idx: 0 },\n { type: 'subTitle', placement: { x: 1.36, y: 4.08, w: 7.29, h: 1.68 }, idx: 1 },\n ],\n },\n titleAndContent: {\n name: 'Title and Content',\n type: 'titleAndContent',\n placeholders: [\n { type: 'title', placement: { x: 0.5, y: 0.28, w: 9.0, h: 1.0 }, idx: 0 },\n { type: 'body', placement: { x: 0.5, y: 1.53, w: 9.0, h: 5.47 }, idx: 1 },\n ],\n },\n sectionHeader: {\n name: 'Section Header',\n type: 'sectionHeader',\n placeholders: [\n { type: 'title', placement: { x: 0.69, y: 1.65, w: 8.63, h: 2.13 }, idx: 0 },\n { type: 'body', placement: { x: 0.69, y: 4.08, w: 8.63, h: 1.68 }, idx: 1 },\n ],\n },\n twoContent: {\n name: 'Two Content',\n type: 'twoContent',\n placeholders: [\n { type: 'title', placement: { x: 0.5, y: 0.28, w: 9.0, h: 1.0 }, idx: 0 },\n { type: 'body', placement: { x: 0.5, y: 1.53, w: 4.25, h: 5.47 }, idx: 1 },\n { type: 'body', placement: { x: 5.25, y: 1.53, w: 4.25, h: 5.47 }, idx: 2 },\n ],\n },\n};\n","export interface NotesMasterDef {\n name?: string;\n}\n\nexport class NotesMaster {\n name: string;\n\n constructor(def?: NotesMasterDef) {\n this.name = def?.name ?? 'Default Notes Master';\n }\n}\n","export interface HandoutMasterDef {\n name?: string;\n}\n\nexport class HandoutMaster {\n name: string;\n\n constructor(def?: HandoutMasterDef) {\n this.name = def?.name ?? 'Default Handout Master';\n }\n}\n","const AMP = /&/g;\nconst LT = /</g;\nconst GT = />/g;\nconst QUOT = /\"/g;\nconst APOS = /'/g;\n\nexport function escapeXml(s: string): string {\n return s\n .replace(AMP, '&amp;')\n .replace(LT, '&lt;')\n .replace(GT, '&gt;')\n .replace(QUOT, '&quot;')\n .replace(APOS, '&apos;');\n}\n\nexport function tag(\n name: string,\n attrs?: Record<string, string | number | undefined>,\n children?: string,\n): string {\n let s = `<${name}`;\n if (attrs) {\n for (const [k, v] of Object.entries(attrs)) {\n if (v !== undefined) {\n s += ` ${k}=\"${escapeXml(String(v))}\"`;\n }\n }\n }\n if (children !== undefined && children !== '') {\n s += `>${children}</${name}>`;\n } else {\n s += '/>';\n }\n return s;\n}\n\nexport function openTag(name: string, attrs?: Record<string, string | number | undefined>): string {\n let s = `<${name}`;\n if (attrs) {\n for (const [k, v] of Object.entries(attrs)) {\n if (v !== undefined) {\n s += ` ${k}=\"${escapeXml(String(v))}\"`;\n }\n }\n }\n s += '>';\n return s;\n}\n\nexport function closeTag(name: string): string {\n return `</${name}>`;\n}\n","import type { Emu, Inches } from '../core/types.js';\n\nconst EMU_PER_INCH = 914400;\nconst EMU_PER_CM = 360000;\nconst EMU_PER_PT = 12700;\n\nexport function inchesToEmu(inches: Inches): Emu {\n return Math.round(inches * EMU_PER_INCH);\n}\n\nexport function emuToInches(emu: Emu): Inches {\n return emu / EMU_PER_INCH;\n}\n\nexport function cmToEmu(cm: number): Emu {\n return Math.round(cm * EMU_PER_CM);\n}\n\nexport function ptToEmu(pt: number): Emu {\n return Math.round(pt * EMU_PER_PT);\n}\n\nexport function ptToHundredths(pt: number): number {\n return Math.round(pt * 100);\n}\n","export const NAMESPACE = {\n a: 'http://schemas.openxmlformats.org/drawingml/2006/main',\n r: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n p: 'http://schemas.openxmlformats.org/presentationml/2006/main',\n} as const;\n\nexport const CONTENT_TYPE = {\n presentation:\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml',\n slide: 'application/vnd.openxmlformats-officedocument.presentationml.slide+xml',\n slideLayout: 'application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml',\n slideMaster: 'application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml',\n theme: 'application/vnd.openxmlformats-officedocument.theme+xml',\n rels: 'application/vnd.openxmlformats-package.relationships+xml',\n coreProps: 'application/vnd.openxmlformats-package.core-properties+xml',\n appProps: 'application/vnd.openxmlformats-officedocument.extended-properties+xml',\n presProps: 'application/vnd.openxmlformats-officedocument.presentationml.presProps+xml',\n viewProps: 'application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml',\n notesMaster: 'application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml',\n notesSlide: 'application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml',\n commentAuthors: 'application/vnd.openxmlformats-officedocument.presentationml.commentAuthors+xml',\n comments: 'application/vnd.openxmlformats-officedocument.presentationml.comments+xml',\n handoutMaster: 'application/vnd.openxmlformats-officedocument.presentationml.handoutMaster+xml',\n tags: 'application/vnd.openxmlformats-officedocument.presentationml.tags+xml',\n slideUpdateInfo:\n 'application/vnd.openxmlformats-officedocument.presentationml.slideUpdateInfo+xml',\n png: 'image/png',\n jpeg: 'image/jpeg',\n gif: 'image/gif',\n svg: 'image/svg+xml',\n} as const;\n\nexport const REL_TYPE = {\n slide: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide',\n slideMaster: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster',\n slideLayout: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout',\n theme: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme',\n image: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',\n officeDocument:\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument',\n coreProperties:\n 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties',\n extendedProperties:\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties',\n presProps: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/presProps',\n viewProps: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/viewProps',\n notesMaster: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster',\n notesSlide: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide',\n commentAuthors:\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/commentAuthors',\n comments: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments',\n handoutMaster:\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/handoutMaster',\n tags: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/tags',\n slideUpdateInfo:\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideUpdateInfo',\n htmlPubSaveAs:\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/htmlPubSaveAs',\n slideUpdateUrl:\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideUpdateUrl',\n} as const;\n\nexport const DEFAULT_SLIDE_WIDTH = 10;\nexport const DEFAULT_SLIDE_HEIGHT = 7.5;\n","import type {\n Color,\n Fill,\n GradientFill,\n PatternFill,\n PictureFill,\n LineProperties,\n EffectProperties,\n ShadowEffect,\n GlowEffect,\n ReflectionEffect,\n SoftEdgeEffect,\n Placement,\n TransformProperties,\n HyperlinkProperties,\n SerializationContext,\n} from '../../core/types.js';\nimport { tag } from '../xml.js';\nimport { inchesToEmu, ptToEmu } from '../units.js';\nimport { REL_TYPE } from '../constants.js';\nimport { readFileSync } from 'node:fs';\nimport { serializeColor, serializeSolidFill, serializeColorWithAlpha } from './color.js';\n\nfunction isGradientFill(fill: Fill): fill is GradientFill {\n return typeof fill === 'object' && 'stops' in fill && 'type' in fill;\n}\n\nfunction isPatternFill(fill: Fill): fill is PatternFill {\n return typeof fill === 'object' && 'pattern' in fill;\n}\n\nfunction isPictureFill(fill: Fill): fill is PictureFill {\n return (\n typeof fill === 'object' &&\n !isGradientFill(fill) &&\n !isPatternFill(fill) &&\n ('path' in fill || 'data' in fill)\n );\n}\n\n/**\n * Serializes a fill definition (solid, gradient, pattern, or picture) to OOXML.\n * @param ctx - Required when the fill is a picture fill, to register the image relationship.\n */\nexport function serializeFill(fill: Fill, ctx?: SerializationContext): string {\n if (\n typeof fill === 'string' ||\n (typeof fill === 'object' &&\n ('scheme' in fill ||\n 'sys' in fill ||\n 'preset' in fill ||\n 'hex' in fill ||\n ('hue' in fill && 'sat' in fill && 'lum' in fill)))\n ) {\n return serializeSolidFill(fill as Color);\n }\n\n if (isGradientFill(fill)) {\n let stopsXml = '';\n for (const stop of fill.stops) {\n const pos = Math.round(stop.position * 1000);\n const clrXml = serializeColorWithAlpha(stop.color, stop.alpha);\n stopsXml += tag('a:gs', { pos }, clrXml);\n }\n let dirChild = '';\n if (fill.type === 'linear') {\n dirChild = tag('a:lin', { ang: Math.round((fill.angle ?? 0) * 60000), scaled: '1' });\n } else if (fill.type === 'radial' || fill.type === 'path') {\n dirChild = tag(\n 'a:path',\n { path: fill.type === 'radial' ? 'circle' : 'rect' },\n tag('a:fillToRect', { l: '50000', t: '50000', r: '50000', b: '50000' }),\n );\n }\n return tag('a:gradFill', undefined, tag('a:gsLst', undefined, stopsXml) + dirChild);\n }\n\n if (isPatternFill(fill)) {\n return tag(\n 'a:pattFill',\n { prst: fill.pattern },\n tag('a:fgClr', undefined, serializeColor(fill.foreground)) +\n tag('a:bgClr', undefined, serializeColor(fill.background)),\n );\n }\n\n if (isPictureFill(fill) && ctx) {\n let data = fill.data;\n if (!data && fill.path) {\n data = readFileSync(fill.path);\n }\n if (!data) return '';\n const ct = fill.contentType ?? 'image/png';\n const ext = ct.split('/')[1] ?? 'png';\n const fileName = `fill_${Date.now()}.${ext}`;\n const target = `../media/${fileName}`;\n const rId = ctx.addRelationship(REL_TYPE.image, target, data);\n let content = tag('a:blip', { 'r:embed': rId });\n if (fill.tile) {\n content += tag('a:tile', {\n sx: fill.tile.sx,\n sy: fill.tile.sy,\n tx: fill.tile.tx,\n ty: fill.tile.ty,\n });\n } else {\n content += tag('a:stretch', undefined, tag('a:fillRect'));\n }\n return tag('a:blipFill', undefined, content);\n }\n\n return '';\n}\n\n/** Serializes line properties (stroke width in points, color, dash style, arrows) to OOXML. */\nexport function serializeLine(line: LineProperties): string {\n const attrs: Record<string, string | number> = {};\n if (line.width) attrs.w = ptToEmu(line.width);\n if (line.cap) attrs.cap = line.cap === 'square' ? 'sq' : line.cap;\n if (line.compound) attrs.cmpd = line.compound;\n if (line.alignment) attrs.algn = line.alignment;\n\n let children = '';\n if (line.fill) {\n children += serializeFill(line.fill);\n } else if (line.color) {\n children += tag('a:solidFill', undefined, serializeColorWithAlpha(line.color, line.opacity));\n }\n if (line.customDash && line.customDash.length > 0) {\n let dashChildren = '';\n for (const seg of line.customDash) {\n dashChildren += tag('a:ds', { d: seg.d, sp: seg.sp });\n }\n children += tag('a:custDash', undefined, dashChildren);\n } else if (line.dash && line.dash !== 'solid') {\n children += tag('a:prstDash', { val: line.dash });\n }\n if (line.join) {\n if (line.join === 'round') children += tag('a:round');\n else if (line.join === 'bevel') children += tag('a:bevel');\n else children += tag('a:miter', { lim: '800000' });\n }\n if (line.headEnd) {\n const hAttrs: Record<string, string> = {};\n if (line.headEnd.type) hAttrs.type = line.headEnd.type;\n if (line.headEnd.width) hAttrs.w = line.headEnd.width;\n if (line.headEnd.length) hAttrs.len = line.headEnd.length;\n children += tag('a:headEnd', hAttrs);\n }\n if (line.tailEnd) {\n const tAttrs: Record<string, string> = {};\n if (line.tailEnd.type) tAttrs.type = line.tailEnd.type;\n if (line.tailEnd.width) tAttrs.w = line.tailEnd.width;\n if (line.tailEnd.length) tAttrs.len = line.tailEnd.length;\n children += tag('a:tailEnd', tAttrs);\n }\n\n return tag('a:ln', attrs, children || undefined);\n}\n\nfunction serializeShadow(shadow: ShadowEffect): string {\n const isInner = shadow.type === 'inner';\n const elName = isInner ? 'a:innerShdw' : 'a:outerShdw';\n const attrs: Record<string, string | number> = {};\n if (shadow.blur) attrs.blurRad = ptToEmu(shadow.blur);\n if (shadow.offset) attrs.dist = ptToEmu(shadow.offset);\n if (shadow.angle !== undefined) attrs.dir = Math.round(shadow.angle * 60000);\n const color = shadow.color ?? '000000';\n return tag(elName, attrs, serializeColorWithAlpha(color, shadow.alpha));\n}\n\nfunction serializeGlow(glow: GlowEffect): string {\n const attrs: Record<string, string | number> = {};\n if (glow.radius) attrs.rad = ptToEmu(glow.radius);\n const color = glow.color ?? 'FFC000';\n return tag('a:glow', attrs, serializeColorWithAlpha(color, glow.alpha));\n}\n\nfunction serializeReflection(refl: ReflectionEffect): string {\n const attrs: Record<string, string | number> = {};\n if (refl.blur) attrs.blurRad = ptToEmu(refl.blur);\n if (refl.startAlpha !== undefined) attrs.stA = Math.round(refl.startAlpha * 1000);\n if (refl.endAlpha !== undefined) attrs.endA = Math.round(refl.endAlpha * 1000);\n if (refl.distance) attrs.dist = ptToEmu(refl.distance);\n if (refl.direction !== undefined) attrs.dir = Math.round(refl.direction * 60000);\n if (refl.fadeDirection !== undefined) attrs.fadeDir = Math.round(refl.fadeDirection * 60000);\n return tag('a:reflection', attrs);\n}\n\nfunction serializeSoftEdge(se: SoftEdgeEffect): string {\n const attrs: Record<string, string | number> = {};\n if (se.radius) attrs.rad = ptToEmu(se.radius);\n return tag('a:softEdge', attrs);\n}\n\n/** Serializes visual effects (shadow, glow, reflection, soft edge) to an OOXML effect list. */\nexport function serializeEffects(effects: EffectProperties): string {\n let children = '';\n if (effects.glow) children += serializeGlow(effects.glow);\n if (effects.shadow) children += serializeShadow(effects.shadow);\n if (effects.reflection) children += serializeReflection(effects.reflection);\n if (effects.softEdge) children += serializeSoftEdge(effects.softEdge);\n if (!children) return '';\n return tag('a:effectLst', undefined, children);\n}\n\n/**\n * Serializes placement (position/size in inches) and transform properties (rotation, flip) to OOXML.\n * Rotation is in degrees; position and size are converted from inches to EMUs.\n */\nexport function serializeTransform(placement: Placement, transform?: TransformProperties): string {\n const xfrmAttrs: Record<string, string | number> = {};\n const rot = placement.rotation ?? transform?.rotation;\n if (rot) xfrmAttrs.rot = Math.round(rot * 60000);\n if (transform?.flipH) xfrmAttrs.flipH = '1';\n if (transform?.flipV) xfrmAttrs.flipV = '1';\n\n return tag(\n 'a:xfrm',\n Object.keys(xfrmAttrs).length > 0 ? xfrmAttrs : undefined,\n tag('a:off', { x: inchesToEmu(placement.x), y: inchesToEmu(placement.y) }) +\n tag('a:ext', { cx: inchesToEmu(placement.w), cy: inchesToEmu(placement.h) }),\n );\n}\n\nconst HYPERLINK_REL_TYPE =\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink';\n\n/** Serializes a hyperlink (URL or slide jump) to an OOXML `a:hlinkClick` element. */\nexport function serializeHyperlink(link: HyperlinkProperties, ctx: SerializationContext): string {\n if (link.url) {\n const rId = ctx.addRelationship(HYPERLINK_REL_TYPE, link.url);\n const attrs: Record<string, string> = { 'r:id': rId };\n if (link.tooltip) attrs.tooltip = link.tooltip;\n return tag('a:hlinkClick', attrs);\n }\n if (link.email) {\n const rId = ctx.addRelationship(HYPERLINK_REL_TYPE, `mailto:${link.email}`);\n const attrs: Record<string, string> = { 'r:id': rId };\n if (link.tooltip) attrs.tooltip = link.tooltip;\n return tag('a:hlinkClick', attrs);\n }\n if (link.file) {\n const rId = ctx.addRelationship(HYPERLINK_REL_TYPE, link.file);\n const attrs: Record<string, string> = { 'r:id': rId };\n if (link.tooltip) attrs.tooltip = link.tooltip;\n return tag('a:hlinkClick', attrs);\n }\n if (link.action) {\n const attrs: Record<string, string> = { action: link.action };\n if (link.tooltip) attrs.tooltip = link.tooltip;\n return tag('a:hlinkClick', attrs);\n }\n if (link.slide !== undefined) {\n const attrs: Record<string, string> = { action: 'ppaction://hlinksldjump' };\n if (link.tooltip) attrs.tooltip = link.tooltip;\n return tag('a:hlinkClick', attrs);\n }\n return '';\n}\n","import type {\n Color,\n ColorTransform,\n SchemeColor,\n SystemColor,\n PresetColor,\n HslColor,\n SrgbColor,\n} from '../../core/types.js';\nimport { tag } from '../xml.js';\n\nexport function isSchemeColor(c: Color): c is SchemeColor {\n return typeof c === 'object' && 'scheme' in c;\n}\n\nexport function isSystemColor(c: Color): c is SystemColor {\n return typeof c === 'object' && 'sys' in c;\n}\n\nexport function isPresetColor(c: Color): c is PresetColor {\n return typeof c === 'object' && 'preset' in c;\n}\n\nexport function isHslColor(c: Color): c is HslColor {\n return typeof c === 'object' && 'hue' in c && 'sat' in c && 'lum' in c;\n}\n\nexport function isSrgbColor(c: Color): c is SrgbColor {\n return typeof c === 'object' && 'hex' in c;\n}\n\nfunction serializeTransforms(t: ColorTransform): string {\n let xml = '';\n if (t.tint !== undefined) xml += tag('a:tint', { val: t.tint });\n if (t.shade !== undefined) xml += tag('a:shade', { val: t.shade });\n if (t.satMod !== undefined) xml += tag('a:satMod', { val: t.satMod });\n if (t.satOff !== undefined) xml += tag('a:satOff', { val: t.satOff });\n if (t.lumMod !== undefined) xml += tag('a:lumMod', { val: t.lumMod });\n if (t.lumOff !== undefined) xml += tag('a:lumOff', { val: t.lumOff });\n if (t.hueMod !== undefined) xml += tag('a:hueMod', { val: t.hueMod });\n if (t.hueOff !== undefined) xml += tag('a:hueOff', { val: t.hueOff });\n if (t.alpha !== undefined) xml += tag('a:alpha', { val: Math.round(t.alpha * 1000) });\n if (t.alphaOff !== undefined) xml += tag('a:alphaOff', { val: Math.round(t.alphaOff * 1000) });\n return xml;\n}\n\nexport function serializeColor(color: Color): string {\n if (typeof color === 'string') {\n return tag('a:srgbClr', { val: color });\n }\n if (isSchemeColor(color)) {\n const children = color.transforms ? serializeTransforms(color.transforms) : undefined;\n return tag('a:schemeClr', { val: color.scheme }, children);\n }\n if (isSystemColor(color)) {\n const attrs: Record<string, string> = { val: color.sys };\n if (color.lastClr) attrs.lastClr = color.lastClr;\n const children = color.transforms ? serializeTransforms(color.transforms) : undefined;\n return tag('a:sysClr', attrs, children);\n }\n if (isPresetColor(color)) {\n const children = color.transforms ? serializeTransforms(color.transforms) : undefined;\n return tag('a:prstClr', { val: color.preset }, children);\n }\n if (isHslColor(color)) {\n const children = color.transforms ? serializeTransforms(color.transforms) : undefined;\n return tag(\n 'a:hslClr',\n {\n hue: Math.round(color.hue * 60000),\n sat: Math.round(color.sat * 1000),\n lum: Math.round(color.lum * 1000),\n },\n children,\n );\n }\n if (isSrgbColor(color)) {\n const children = color.transforms ? serializeTransforms(color.transforms) : undefined;\n return tag('a:srgbClr', { val: color.hex }, children);\n }\n return tag('a:srgbClr', { val: '000000' });\n}\n\nexport function serializeSolidFill(color: Color): string {\n return tag('a:solidFill', undefined, serializeColor(color));\n}\n\nexport function serializeColorWithAlpha(color: Color, alpha?: number): string {\n if (alpha === undefined || alpha >= 100) return serializeColor(color);\n const alphaChild = tag('a:alpha', { val: Math.round(alpha * 1000) });\n if (typeof color === 'string') {\n return tag('a:srgbClr', { val: color }, alphaChild);\n }\n if (isSrgbColor(color)) {\n let children = color.transforms ? serializeTransforms(color.transforms) : '';\n children += alphaChild;\n return tag('a:srgbClr', { val: color.hex }, children);\n }\n if (isSchemeColor(color)) {\n let children = color.transforms ? serializeTransforms(color.transforms) : '';\n children += alphaChild;\n return tag('a:schemeClr', { val: color.scheme }, children);\n }\n if (isSystemColor(color)) {\n const attrs: Record<string, string> = { val: color.sys };\n if (color.lastClr) attrs.lastClr = color.lastClr;\n let children = color.transforms ? serializeTransforms(color.transforms) : '';\n children += alphaChild;\n return tag('a:sysClr', attrs, children);\n }\n if (isPresetColor(color)) {\n let children = color.transforms ? serializeTransforms(color.transforms) : '';\n children += alphaChild;\n return tag('a:prstClr', { val: color.preset }, children);\n }\n if (isHslColor(color)) {\n let children = color.transforms ? serializeTransforms(color.transforms) : '';\n children += alphaChild;\n return tag(\n 'a:hslClr',\n {\n hue: Math.round(color.hue * 60000),\n sat: Math.round(color.sat * 1000),\n lum: Math.round(color.lum * 1000),\n },\n children,\n );\n }\n return tag('a:srgbClr', { val: '000000' }, alphaChild);\n}\n","import type { Scene3DProperties, Shape3DProperties } from '../../core/types.js';\nimport { tag } from '../xml.js';\nimport { serializeColor } from './color.js';\n\nexport function serializeScene3D(scene: Scene3DProperties): string {\n let children = '';\n if (scene.camera) {\n const attrs: Record<string, string | number> = {\n prst: scene.camera.preset ?? 'orthographicFront',\n };\n if (scene.camera.fov !== undefined) attrs.fov = Math.round(scene.camera.fov * 60000);\n children += tag('a:camera', attrs);\n } else {\n children += tag('a:camera', { prst: 'orthographicFront' });\n }\n if (scene.lightRig) {\n const attrs: Record<string, string> = {\n rig: scene.lightRig.type ?? 'threePt',\n dir: scene.lightRig.direction ?? 't',\n };\n children += tag('a:lightRig', attrs);\n } else {\n children += tag('a:lightRig', { rig: 'threePt', dir: 't' });\n }\n return tag('a:scene3d', undefined, children);\n}\n\nexport function serializeShape3D(sp3d: Shape3DProperties): string {\n const attrs: Record<string, string | number> = {};\n if (sp3d.extrusionHeight !== undefined)\n attrs.extrusionH = Math.round(sp3d.extrusionHeight * 12700);\n if (sp3d.contourWidth !== undefined) attrs.contourW = Math.round(sp3d.contourWidth * 12700);\n if (sp3d.material) attrs.prstMaterial = sp3d.material;\n\n let children = '';\n if (sp3d.bevelTop) {\n const bAttrs: Record<string, string | number> = {};\n if (sp3d.bevelTop.width !== undefined) bAttrs.w = Math.round(sp3d.bevelTop.width * 12700);\n if (sp3d.bevelTop.height !== undefined) bAttrs.h = Math.round(sp3d.bevelTop.height * 12700);\n if (sp3d.bevelTop.preset) bAttrs.prst = sp3d.bevelTop.preset;\n children += tag('a:bevelT', bAttrs);\n }\n if (sp3d.bevelBottom) {\n const bAttrs: Record<string, string | number> = {};\n if (sp3d.bevelBottom.width !== undefined) bAttrs.w = Math.round(sp3d.bevelBottom.width * 12700);\n if (sp3d.bevelBottom.height !== undefined)\n bAttrs.h = Math.round(sp3d.bevelBottom.height * 12700);\n if (sp3d.bevelBottom.preset) bAttrs.prst = sp3d.bevelBottom.preset;\n children += tag('a:bevelB', bAttrs);\n }\n if (sp3d.extrusionColor) {\n children += tag('a:extrusionClr', undefined, serializeColor(sp3d.extrusionColor));\n }\n if (sp3d.contourColor) {\n children += tag('a:contourClr', undefined, serializeColor(sp3d.contourColor));\n }\n\n return tag('a:sp3d', Object.keys(attrs).length > 0 ? attrs : undefined, children || undefined);\n}\n","import type {\n IElementSerializer,\n SerializationContext,\n TextRunOptions,\n TextBodyOptions,\n} from '../../core/types.js';\nimport type { TextElement, TextParagraph, TextRun } from '../../elements/text.js';\nimport { tag, openTag, closeTag } from '../xml.js';\nimport { ptToHundredths, ptToEmu } from '../units.js';\nimport {\n serializeFill,\n serializeLine,\n serializeEffects,\n serializeTransform,\n serializeHyperlink,\n} from './shared.js';\nimport { serializeColor, serializeSolidFill, serializeColorWithAlpha } from './color.js';\nimport { serializeScene3D, serializeShape3D } from './scene3d.js';\n\nfunction serializeSpacing(val: number | { value: number; unit: 'pt' | 'pct' }): string {\n if (typeof val === 'number') {\n return tag('a:spcPts', { val: ptToHundredths(val) });\n }\n if (val.unit === 'pct') {\n return tag('a:spcPct', { val: Math.round(val.value * 1000) });\n }\n return tag('a:spcPts', { val: ptToHundredths(val.value) });\n}\n\nfunction serializeRunProps(run: TextRun, ctx: SerializationContext): string {\n const o = run.options;\n if (!o) return '';\n const attrs: Record<string, string | number> = {};\n if (o.fontSize) attrs.sz = ptToHundredths(o.fontSize);\n if (o.bold) attrs.b = '1';\n if (o.italic) attrs.i = '1';\n if (o.underline) attrs.u = 'sng';\n if (o.strikethrough) {\n attrs.strike = o.strikethrough === 'double' ? 'dblStrike' : 'sngStrike';\n }\n if (o.caps === 'small') attrs.cap = 'small';\n else if (o.caps === 'all') attrs.cap = 'all';\n if (o.letterSpacing) attrs.spc = Math.round(o.letterSpacing * 100);\n if (o.lang) attrs.lang = o.lang;\n if (o.altLang) attrs.altLang = o.altLang;\n if (o.subscript) attrs.baseline = '-40000';\n else if (o.superscript) attrs.baseline = '30000';\n else if (o.baseline !== undefined) attrs.baseline = String(Math.round(o.baseline * 1000));\n\n let children = '';\n if (o.color) children += serializeSolidFill(o.color);\n if (o.highlight) children += tag('a:highlight', undefined, serializeColor(o.highlight));\n if (o.fontFace) children += tag('a:latin', { typeface: o.fontFace });\n if (o.eastAsianFont) children += tag('a:ea', { typeface: o.eastAsianFont });\n if (o.complexScriptFont) children += tag('a:cs', { typeface: o.complexScriptFont });\n if (o.outline) children += serializeLine(o.outline);\n if (o.shadow) {\n const sAttrs: Record<string, string | number> = {};\n if (o.shadow.blur) sAttrs.blurRad = ptToEmu(o.shadow.blur);\n if (o.shadow.offset) sAttrs.dist = ptToEmu(o.shadow.offset);\n if (o.shadow.angle !== undefined) sAttrs.dir = Math.round(o.shadow.angle * 60000);\n const sc = o.shadow.color ?? '000000';\n children += tag(\n 'a:effectLst',\n undefined,\n tag('a:outerShdw', sAttrs, serializeColorWithAlpha(sc, o.shadow.alpha)),\n );\n }\n if (o.hyperlink) children += serializeHyperlink(o.hyperlink, ctx);\n\n if (children) return tag('a:rPr', attrs, children);\n if (Object.keys(attrs).length > 0) return tag('a:rPr', attrs);\n return '';\n}\n\nfunction serializeDefRunProps(o: TextRunOptions): string {\n const attrs: Record<string, string | number> = {};\n if (o.fontSize) attrs.sz = ptToHundredths(o.fontSize);\n if (o.bold) attrs.b = '1';\n if (o.italic) attrs.i = '1';\n let children = '';\n if (o.color) children += serializeSolidFill(o.color);\n if (o.fontFace) children += tag('a:latin', { typeface: o.fontFace });\n return tag('a:defRPr', attrs, children || undefined);\n}\n\nexport function serializeParagraph(para: TextParagraph, ctx: SerializationContext): string {\n let xml = openTag('a:p');\n const pOpts = para.options;\n if (pOpts) {\n const attrs: Record<string, string | number> = {};\n if (pOpts.align) {\n const map: Record<string, string> = { left: 'l', center: 'ctr', right: 'r', justify: 'just' };\n attrs.algn = map[pOpts.align] ?? 'l';\n }\n if (pOpts.level !== undefined) attrs.lvl = pOpts.level;\n if (pOpts.indent) attrs.indent = ptToEmu(pOpts.indent);\n if (pOpts.marginLeft) attrs.marL = ptToEmu(pOpts.marginLeft);\n if (pOpts.rtl) attrs.rtl = '1';\n\n let pPrChildren = '';\n\n if (pOpts.lineSpacing) {\n pPrChildren += tag('a:lnSpc', undefined, serializeSpacing(pOpts.lineSpacing));\n }\n if (pOpts.spaceBefore) {\n pPrChildren += tag('a:spcBef', undefined, serializeSpacing(pOpts.spaceBefore));\n }\n if (pOpts.spaceAfter) {\n pPrChildren += tag('a:spcAft', undefined, serializeSpacing(pOpts.spaceAfter));\n }\n\n if (pOpts.bullet) {\n if (pOpts.bullet === true) {\n pPrChildren += tag('a:buChar', { char: '\\u2022' });\n } else {\n if (pOpts.bullet.color) {\n pPrChildren += tag('a:buClr', undefined, serializeColor(pOpts.bullet.color));\n }\n if (pOpts.bullet.size) {\n pPrChildren += tag('a:buSzPct', { val: Math.round(pOpts.bullet.size * 1000) });\n }\n if (pOpts.bullet.font) {\n pPrChildren += tag('a:buFont', { typeface: pOpts.bullet.font });\n }\n if (pOpts.bullet.type === 'auto') {\n pPrChildren += tag('a:buAutoNum', { type: 'arabicPeriod' });\n } else {\n pPrChildren += tag('a:buChar', { char: pOpts.bullet.char ?? '\\u2022' });\n }\n }\n } else if (pOpts.numbering) {\n if (pOpts.numbering.color) {\n pPrChildren += tag('a:buClr', undefined, serializeColor(pOpts.numbering.color));\n }\n if (pOpts.numbering.size) {\n pPrChildren += tag('a:buSzPct', { val: Math.round(pOpts.numbering.size * 1000) });\n }\n if (pOpts.numbering.font) {\n pPrChildren += tag('a:buFont', { typeface: pOpts.numbering.font });\n }\n const numAttrs: Record<string, string | number> = {\n type: pOpts.numbering.type ?? 'arabicPeriod',\n };\n if (pOpts.numbering.startAt) numAttrs.startAt = pOpts.numbering.startAt;\n pPrChildren += tag('a:buAutoNum', numAttrs);\n }\n\n if (pOpts.tabStops) {\n let tabsXml = '';\n for (const ts of pOpts.tabStops) {\n const tsAttrs: Record<string, string | number> = { pos: ptToEmu(ts.position) };\n if (ts.alignment) tsAttrs.algn = ts.alignment;\n tabsXml += tag('a:tab', tsAttrs);\n }\n pPrChildren += tag('a:tabLst', undefined, tabsXml);\n }\n\n if (pOpts.defaultRunOptions) {\n pPrChildren += serializeDefRunProps(pOpts.defaultRunOptions);\n }\n\n xml += tag('a:pPr', attrs, pPrChildren || undefined);\n }\n for (const run of para.runs) {\n xml += openTag('a:r');\n xml += serializeRunProps(run, ctx);\n xml += tag('a:t', undefined, run.text);\n xml += closeTag('a:r');\n }\n xml += closeTag('a:p');\n return xml;\n}\n\nfunction serializeBodyPr(bodyOpts?: TextBodyOptions): string {\n const attrs: Record<string, string | number> = { wrap: 'square', rtlCol: '0' };\n\n if (bodyOpts) {\n if (bodyOpts.verticalAlign) {\n const map: Record<string, string> = { top: 't', middle: 'ctr', bottom: 'b' };\n attrs.anchor = map[bodyOpts.verticalAlign] ?? 't';\n }\n if (bodyOpts.textDirection) {\n const map: Record<string, string> = {\n horz: 'horz',\n vert: 'vert',\n vert270: 'vert270',\n wordArtVert: 'wordArtVert',\n };\n if (map[bodyOpts.textDirection]) attrs.vert = map[bodyOpts.textDirection];\n }\n if (bodyOpts.wordWrap === false) attrs.wrap = 'none';\n if (bodyOpts.columns && bodyOpts.columns > 1) attrs.numCol = bodyOpts.columns;\n if (bodyOpts.columnSpacing) attrs.spcCol = ptToEmu(bodyOpts.columnSpacing);\n if (bodyOpts.margin) {\n if (bodyOpts.margin.top !== undefined) attrs.tIns = ptToEmu(bodyOpts.margin.top);\n if (bodyOpts.margin.bottom !== undefined) attrs.bIns = ptToEmu(bodyOpts.margin.bottom);\n if (bodyOpts.margin.left !== undefined) attrs.lIns = ptToEmu(bodyOpts.margin.left);\n if (bodyOpts.margin.right !== undefined) attrs.rIns = ptToEmu(bodyOpts.margin.right);\n }\n }\n\n let children = '';\n if (bodyOpts?.autoFit === true || bodyOpts?.autoFit === 'shrink') {\n children += tag('a:normAutofit');\n } else if (bodyOpts?.autoFit === 'none') {\n children += tag('a:noAutofit');\n }\n if (bodyOpts?.textPath) {\n children += tag('a:prstTxWarp', { prst: bodyOpts.textPath.preset }, tag('a:avLst'));\n }\n\n return tag('a:bodyPr', attrs, children || undefined);\n}\n\nexport const textSerializer: IElementSerializer<TextElement> = {\n type: 'text',\n serialize(element: TextElement, ctx: SerializationContext): string {\n const p = element.placement;\n let xml = openTag('p:sp');\n\n xml += tag(\n 'p:nvSpPr',\n undefined,\n tag('p:cNvPr', { id: '0', name: element.name ?? '' }) +\n tag('p:cNvSpPr', { txBox: '1' }) +\n tag('p:nvPr'),\n );\n\n xml += openTag('p:spPr');\n xml += serializeTransform(p, element.transform);\n xml += tag('a:prstGeom', { prst: 'rect' }, tag('a:avLst'));\n if (element.fill) xml += serializeFill(element.fill, ctx);\n if (element.line) xml += serializeLine(element.line);\n if (element.effects) xml += serializeEffects(element.effects);\n if (element.scene3d) xml += serializeScene3D(element.scene3d);\n if (element.shape3d) xml += serializeShape3D(element.shape3d);\n xml += closeTag('p:spPr');\n\n xml += openTag('p:txBody');\n xml += serializeBodyPr(element.bodyOptions);\n xml += tag('a:lstStyle');\n for (const para of element.paragraphs) {\n xml += serializeParagraph(para, ctx);\n }\n xml += closeTag('p:txBody');\n\n xml += closeTag('p:sp');\n return xml;\n },\n};\n","import type { IElementSerializer, SerializationContext } from '../../core/types.js';\nimport type { ImageElement } from '../../elements/image.js';\nimport { tag, openTag, closeTag } from '../xml.js';\nimport { REL_TYPE } from '../constants.js';\nimport { readFileSync } from 'node:fs';\nimport {\n serializeLine,\n serializeEffects,\n serializeTransform,\n serializeHyperlink,\n} from './shared.js';\nimport { serializeScene3D, serializeShape3D } from './scene3d.js';\nimport { serializeColor } from './color.js';\n\nlet imageCounter = 0;\n\nexport const imageSerializer: IElementSerializer<ImageElement> = {\n type: 'image',\n serialize(element: ImageElement, ctx: SerializationContext): string {\n imageCounter++;\n const ext = element.contentType.split('/')[1] ?? 'png';\n const fileName = `image${imageCounter}.${ext}`;\n const target = `../media/${fileName}`;\n\n let data = element.data;\n if (!data && element.path) {\n data = readFileSync(element.path);\n }\n if (!data) throw new Error('Image element must have data or path');\n\n const rId = ctx.addRelationship(REL_TYPE.image, target, data);\n\n const p = element.placement;\n let xml = openTag('p:pic');\n\n let cNvPrChildren = '';\n if (element.hyperlink) {\n cNvPrChildren = serializeHyperlink(element.hyperlink, ctx);\n }\n\n const lockAspect = element.lockAspectRatio !== false;\n xml += tag(\n 'p:nvPicPr',\n undefined,\n tag('p:cNvPr', { id: '0', name: element.name ?? fileName }, cNvPrChildren || undefined) +\n tag(\n 'p:cNvPicPr',\n undefined,\n tag('a:picLocks', { noChangeAspect: lockAspect ? '1' : '0' }),\n ) +\n tag('p:nvPr'),\n );\n\n let blipChildren = '';\n if (element.opacity !== undefined && element.opacity < 100) {\n blipChildren += tag('a:alphaModFix', { amt: Math.round(element.opacity * 1000) });\n }\n if (element.brightness !== undefined || element.contrast !== undefined) {\n const lumAttrs: Record<string, number> = {};\n if (element.brightness !== undefined) lumAttrs.bright = element.brightness * 1000;\n if (element.contrast !== undefined) lumAttrs.contrast = element.contrast * 1000;\n blipChildren += tag('a:lum', lumAttrs);\n }\n if (element.saturation !== undefined) {\n blipChildren += tag('a:saturation' as string, { sat: Math.round(element.saturation * 1000) });\n }\n if (element.duotone) {\n blipChildren += tag(\n 'a:duotone',\n undefined,\n serializeColor(element.duotone.color1) + serializeColor(element.duotone.color2),\n );\n }\n let fillContent = tag('a:blip', { 'r:embed': rId }, blipChildren || undefined);\n\n if (element.crop) {\n const cropAttrs: Record<string, number> = {};\n if (element.crop.top) cropAttrs.t = Math.round(element.crop.top * 1000);\n if (element.crop.bottom) cropAttrs.b = Math.round(element.crop.bottom * 1000);\n if (element.crop.left) cropAttrs.l = Math.round(element.crop.left * 1000);\n if (element.crop.right) cropAttrs.r = Math.round(element.crop.right * 1000);\n fillContent += tag('a:srcRect', cropAttrs);\n }\n\n fillContent += tag('a:stretch', undefined, tag('a:fillRect'));\n xml += tag('p:blipFill', undefined, fillContent);\n\n xml += openTag('p:spPr');\n xml += serializeTransform(p, element.transform);\n xml += tag('a:prstGeom', { prst: element.cropShape ?? 'rect' }, tag('a:avLst'));\n if (element.border) xml += serializeLine(element.border);\n if (element.effects) xml += serializeEffects(element.effects);\n if (element.scene3d) xml += serializeScene3D(element.scene3d);\n if (element.shape3d) xml += serializeShape3D(element.shape3d);\n xml += closeTag('p:spPr');\n\n xml += closeTag('p:pic');\n return xml;\n },\n};\n","import type {\n IElementSerializer,\n SerializationContext,\n CustomGeometry,\n ShapeLocks,\n} from '../../core/types.js';\nimport type { ShapeElement } from '../../elements/shape.js';\nimport { tag, openTag, closeTag } from '../xml.js';\nimport { ptToEmu } from '../units.js';\nimport {\n serializeFill,\n serializeLine,\n serializeEffects,\n serializeTransform,\n serializeHyperlink,\n} from './shared.js';\nimport { serializeParagraph } from './text.js';\nimport { serializeScene3D, serializeShape3D } from './scene3d.js';\n\nconst GEOMETRY_MAP: Record<string, string> = {\n rect: 'rect',\n roundRect: 'roundRect',\n ellipse: 'ellipse',\n triangle: 'triangle',\n diamond: 'diamond',\n line: 'line',\n arrow: 'rightArrow',\n star5: 'star5',\n heart: 'heart',\n};\n\nfunction serializeCustomGeometry(geom: CustomGeometry): string {\n let pathLst = '';\n for (const path of geom.paths) {\n const pathAttrs: Record<string, number> = {};\n if (path.w !== undefined) pathAttrs.w = path.w;\n if (path.h !== undefined) pathAttrs.h = path.h;\n let cmds = '';\n for (const cmd of path.commands) {\n switch (cmd.type) {\n case 'moveTo':\n cmds += tag('a:moveTo', undefined, tag('a:pt', { x: cmd.x, y: cmd.y }));\n break;\n case 'lineTo':\n cmds += tag('a:lnTo', undefined, tag('a:pt', { x: cmd.x, y: cmd.y }));\n break;\n case 'arcTo':\n cmds += tag('a:arcTo', { wR: cmd.wR, hR: cmd.hR, stAng: cmd.stAng, swAng: cmd.swAng });\n break;\n case 'cubicBezTo':\n cmds += tag(\n 'a:cubicBezTo',\n undefined,\n tag('a:pt', { x: cmd.x1, y: cmd.y1 }) +\n tag('a:pt', { x: cmd.x2, y: cmd.y2 }) +\n tag('a:pt', { x: cmd.x, y: cmd.y }),\n );\n break;\n case 'close':\n cmds += tag('a:close');\n break;\n }\n }\n pathLst += tag('a:path', Object.keys(pathAttrs).length > 0 ? pathAttrs : undefined, cmds);\n }\n return tag('a:custGeom', undefined, tag('a:avLst') + tag('a:pathLst', undefined, pathLst));\n}\n\nfunction serializeShapeLocks(locks: ShapeLocks): string {\n const attrs: Record<string, string> = {};\n if (locks.noGroup) attrs.noGrp = '1';\n if (locks.noRotation) attrs.noRot = '1';\n if (locks.noMove) attrs.noMove = '1';\n if (locks.noResize) attrs.noResize = '1';\n if (locks.noSelect) attrs.noSelect = '1';\n if (locks.noTextEdit) attrs.noTextEdit = '1';\n return tag('a:spLocks', attrs);\n}\n\nexport const shapeSerializer: IElementSerializer<ShapeElement> = {\n type: 'shape',\n serialize(element: ShapeElement, ctx: SerializationContext): string {\n const p = element.placement;\n const prst = GEOMETRY_MAP[element.geometry] ?? element.geometry;\n\n let xml = openTag('p:sp');\n\n let cNvPrChildren = '';\n if (element.hyperlink) {\n cNvPrChildren = serializeHyperlink(element.hyperlink, ctx);\n }\n let cNvSpPrChildren = '';\n if (element.locks) {\n cNvSpPrChildren = serializeShapeLocks(element.locks);\n }\n xml += tag(\n 'p:nvSpPr',\n undefined,\n tag('p:cNvPr', { id: '0', name: element.name ?? '' }, cNvPrChildren || undefined) +\n tag('p:cNvSpPr', undefined, cNvSpPrChildren || undefined) +\n tag('p:nvPr'),\n );\n\n xml += openTag('p:spPr');\n xml += serializeTransform(p, element.transform);\n\n if (element.customGeometry) {\n xml += serializeCustomGeometry(element.customGeometry);\n } else {\n let avLstXml = '';\n if (element.adjustValues) {\n for (const [name, val] of Object.entries(element.adjustValues)) {\n avLstXml += tag('a:gd', { name, fmla: `val ${val}` });\n }\n }\n xml += tag(\n 'a:prstGeom',\n { prst },\n avLstXml ? tag('a:avLst', undefined, avLstXml) : tag('a:avLst'),\n );\n }\n\n if (element.fill) {\n xml += serializeFill(element.fill, ctx);\n }\n if (element.line) {\n xml += serializeLine(element.line);\n }\n if (element.effects) {\n xml += serializeEffects(element.effects);\n }\n if (element.scene3d) {\n xml += serializeScene3D(element.scene3d);\n }\n if (element.shape3d) {\n xml += serializeShape3D(element.shape3d);\n }\n\n xml += closeTag('p:spPr');\n\n if (element.text) {\n xml += openTag('p:txBody');\n const bodyAttrs: Record<string, string | number> = { wrap: 'square', rtlCol: '0' };\n if (element.textOptions) {\n if (element.textOptions.verticalAlign) {\n const map: Record<string, string> = { top: 't', middle: 'ctr', bottom: 'b' };\n bodyAttrs.anchor = map[element.textOptions.verticalAlign] ?? 't';\n }\n if (element.textOptions.wordWrap === false) bodyAttrs.wrap = 'none';\n if (element.textOptions.margin) {\n if (element.textOptions.margin.top !== undefined)\n bodyAttrs.tIns = ptToEmu(element.textOptions.margin.top);\n if (element.textOptions.margin.bottom !== undefined)\n bodyAttrs.bIns = ptToEmu(element.textOptions.margin.bottom);\n if (element.textOptions.margin.left !== undefined)\n bodyAttrs.lIns = ptToEmu(element.textOptions.margin.left);\n if (element.textOptions.margin.right !== undefined)\n bodyAttrs.rIns = ptToEmu(element.textOptions.margin.right);\n }\n }\n let bodyChildren = '';\n if (element.textOptions?.autoFit === true || element.textOptions?.autoFit === 'shrink') {\n bodyChildren = tag('a:normAutofit');\n } else if (element.textOptions?.autoFit === 'none') {\n bodyChildren = tag('a:noAutofit');\n }\n xml += tag('a:bodyPr', bodyAttrs, bodyChildren || undefined);\n xml += tag('a:lstStyle');\n const lines = element.text.split('\\n');\n for (const line of lines) {\n xml += serializeParagraph(\n {\n runs: [{ text: line, options: element.textRunOptions }],\n options: element.textParagraphOptions,\n },\n ctx,\n );\n }\n xml += closeTag('p:txBody');\n }\n\n xml += closeTag('p:sp');\n return xml;\n },\n};\n","import type {\n IElementSerializer,\n SerializationContext,\n TableCell,\n TableCellBorder,\n TableBorderOptions,\n} from '../../core/types.js';\nimport type { TableElement } from '../../elements/table.js';\nimport { tag, openTag, closeTag } from '../xml.js';\nimport { inchesToEmu, ptToHundredths, ptToEmu } from '../units.js';\nimport { serializeFill } from './shared.js';\nimport { serializeSolidFill } from './color.js';\n\nfunction serializeBorderLine(b: TableCellBorder, defaultWidth?: number): string {\n const bw = b.width ? ptToEmu(b.width) : (defaultWidth ?? 12700);\n const bc = b.color ?? '000000';\n return tag('a:ln', { w: bw }, serializeSolidFill(bc));\n}\n\nfunction serializeCellBorders(cell: TableCell, _tableBorder?: TableBorderOptions): string {\n const o = cell.options;\n let xml = '';\n\n const sides = [\n { cellKey: 'borderLeft' as const, tblKey: 'left' as const, elName: 'a:lnL' },\n { cellKey: 'borderRight' as const, tblKey: 'right' as const, elName: 'a:lnR' },\n { cellKey: 'borderTop' as const, tblKey: 'top' as const, elName: 'a:lnT' },\n { cellKey: 'borderBottom' as const, tblKey: 'bottom' as const, elName: 'a:lnB' },\n ];\n\n for (const side of sides) {\n const cellBorder = o?.[side.cellKey];\n if (cellBorder) {\n xml += tag(side.elName, undefined, serializeBorderLine(cellBorder));\n }\n }\n\n return xml;\n}\n\nfunction serializeCell(\n cell: TableCell,\n tableBorder?: TableBorderOptions,\n ctx?: SerializationContext,\n): string {\n const o = cell.options;\n const tcAttrs: Record<string, string | number> = {};\n if (o?.colSpan && o.colSpan > 1) tcAttrs.gridSpan = o.colSpan;\n if (o?.rowSpan && o.rowSpan > 1) tcAttrs.rowSpan = o.rowSpan;\n\n let xml = openTag('a:tc', Object.keys(tcAttrs).length > 0 ? tcAttrs : undefined);\n\n xml += openTag('a:txBody');\n {\n const bodyAttrs: Record<string, string | number> = {};\n if (o?.textBody) {\n if (o.textBody.verticalAlign) {\n const m: Record<string, string> = { top: 't', middle: 'ctr', bottom: 'b' };\n bodyAttrs.anchor = m[o.textBody.verticalAlign] ?? 't';\n }\n if (o.textBody.wordWrap === false) bodyAttrs.wrap = 'none';\n if (o.textBody.margin) {\n if (o.textBody.margin.top !== undefined) bodyAttrs.tIns = ptToEmu(o.textBody.margin.top);\n if (o.textBody.margin.bottom !== undefined)\n bodyAttrs.bIns = ptToEmu(o.textBody.margin.bottom);\n if (o.textBody.margin.left !== undefined) bodyAttrs.lIns = ptToEmu(o.textBody.margin.left);\n if (o.textBody.margin.right !== undefined)\n bodyAttrs.rIns = ptToEmu(o.textBody.margin.right);\n }\n }\n xml += tag('a:bodyPr', Object.keys(bodyAttrs).length > 0 ? bodyAttrs : undefined);\n }\n xml += tag('a:lstStyle');\n xml += openTag('a:p');\n\n if (o?.align) {\n const map: Record<string, string> = { left: 'l', center: 'ctr', right: 'r', justify: 'just' };\n xml += tag('a:pPr', { algn: map[o.align] ?? 'l' });\n }\n\n xml += openTag('a:r');\n const rAttrs: Record<string, string | number> = {};\n if (o?.fontSize) rAttrs.sz = ptToHundredths(o.fontSize);\n if (o?.bold) rAttrs.b = '1';\n if (o?.italic) rAttrs.i = '1';\n if (o?.underline) rAttrs.u = 'sng';\n if (o?.strikethrough) {\n rAttrs.strike = o.strikethrough === 'double' ? 'dblStrike' : 'sngStrike';\n }\n let rPrChildren = '';\n if (o?.color) rPrChildren += serializeSolidFill(o.color);\n if (o?.fontFace) rPrChildren += tag('a:latin', { typeface: o.fontFace });\n xml += tag('a:rPr', { lang: 'en-US', ...rAttrs }, rPrChildren || undefined);\n xml += tag('a:t', undefined, cell.text);\n xml += closeTag('a:r');\n xml += closeTag('a:p');\n xml += closeTag('a:txBody');\n\n let tcPr = '';\n const tcPrAttrs: Record<string, string> = {};\n\n if (o?.verticalAlign) {\n const map: Record<string, string> = {\n top: 't',\n middle: 'ctr',\n bottom: 'b',\n distributed: 'dist',\n };\n tcPrAttrs.anchor = map[o.verticalAlign] ?? 't';\n }\n\n tcPr += serializeCellBorders(cell, tableBorder);\n\n if (o?.fill) {\n tcPr += serializeFill(o.fill, ctx);\n }\n\n if (o?.margin) {\n if (o.margin.top !== undefined) tcPrAttrs.marT = String(ptToEmu(o.margin.top));\n if (o.margin.bottom !== undefined) tcPrAttrs.marB = String(ptToEmu(o.margin.bottom));\n if (o.margin.left !== undefined) tcPrAttrs.marL = String(ptToEmu(o.margin.left));\n if (o.margin.right !== undefined) tcPrAttrs.marR = String(ptToEmu(o.margin.right));\n }\n\n xml += tag(\n 'a:tcPr',\n Object.keys(tcPrAttrs).length > 0 ? tcPrAttrs : undefined,\n tcPr || undefined,\n );\n\n xml += closeTag('a:tc');\n return xml;\n}\n\nfunction serializeTableBorders(border: TableBorderOptions): string {\n const bw = border.width ? ptToEmu(border.width) : 12700;\n const bc = border.color ?? '000000';\n const defaultLine = tag('a:ln', { w: bw }, serializeSolidFill(bc));\n\n const sides: Array<{ key: keyof TableBorderOptions; elName: string }> = [\n { key: 'left', elName: 'a:left' },\n { key: 'right', elName: 'a:right' },\n { key: 'top', elName: 'a:top' },\n { key: 'bottom', elName: 'a:bottom' },\n { key: 'insideH', elName: 'a:insideH' },\n { key: 'insideV', elName: 'a:insideV' },\n ];\n\n let xml = '';\n for (const side of sides) {\n const override = border[side.key];\n if (typeof override === 'object' && override !== null && 'color' in override) {\n xml += tag(side.elName, undefined, serializeBorderLine(override as TableCellBorder));\n } else {\n xml += tag(side.elName, undefined, defaultLine);\n }\n }\n return xml;\n}\n\nexport const tableSerializer: IElementSerializer<TableElement> = {\n type: 'table',\n serialize(element: TableElement, ctx: SerializationContext): string {\n const p = element.placement;\n const numCols = element.rows[0]?.length ?? 0;\n\n let xml = openTag('p:graphicFrame');\n\n xml += tag(\n 'p:nvGraphicFramePr',\n undefined,\n tag('p:cNvPr', { id: '0', name: element.name ?? 'Table' }) +\n tag('p:cNvGraphicFramePr', undefined, tag('a:graphicFrameLocks', { noGrp: '1' })) +\n tag('p:nvPr'),\n );\n\n xml += tag(\n 'p:xfrm',\n undefined,\n tag('a:off', { x: inchesToEmu(p.x), y: inchesToEmu(p.y) }) +\n tag('a:ext', { cx: inchesToEmu(p.w), cy: inchesToEmu(p.h) }),\n );\n\n xml += openTag('a:graphic');\n xml += openTag('a:graphicData', {\n uri: 'http://schemas.openxmlformats.org/drawingml/2006/table',\n });\n xml += openTag('a:tbl');\n\n const tblPrAttrs: Record<string, string> = {\n firstRow: element.firstRow ? '1' : '0',\n lastRow: element.lastRow ? '1' : '0',\n firstCol: element.firstCol ? '1' : '0',\n lastCol: element.lastCol ? '1' : '0',\n bandRow: element.bandRow ? '1' : '0',\n bandCol: element.bandCol ? '1' : '0',\n };\n\n let tblPrChildren = '';\n if (element.fill) {\n tblPrChildren += serializeFill(element.fill, ctx);\n }\n if (element.border) {\n tblPrChildren += serializeTableBorders(element.border);\n }\n if (element.tableStyleId) {\n tblPrChildren += tag('a:tblStyle', { val: element.tableStyleId });\n }\n xml += tag('a:tblPr', tblPrAttrs, tblPrChildren || undefined);\n\n xml += openTag('a:tblGrid');\n const defaultColWidth = p.w / numCols;\n for (let i = 0; i < numCols; i++) {\n const w = element.colWidths?.[i] ?? defaultColWidth;\n xml += tag('a:gridCol', { w: inchesToEmu(w) });\n }\n xml += closeTag('a:tblGrid');\n\n const defaultRowHeight = p.h / element.rows.length;\n for (let r = 0; r < element.rows.length; r++) {\n const h = element.rowHeights?.[r] ?? defaultRowHeight;\n xml += openTag('a:tr', { h: inchesToEmu(h) });\n for (const cell of element.rows[r]) {\n xml += serializeCell(cell, element.border, ctx);\n }\n xml += closeTag('a:tr');\n }\n\n xml += closeTag('a:tbl');\n xml += closeTag('a:graphicData');\n xml += closeTag('a:graphic');\n xml += closeTag('p:graphicFrame');\n return xml;\n },\n};\n","import type {\n IElementSerializer,\n SerializationContext,\n ChartType,\n ChartData,\n AxisOptions,\n TrendlineOptions,\n ErrorBarOptions,\n DataLabelOptions,\n} from '../../core/types.js';\nimport type { ChartElement } from '../../elements/chart.js';\nimport { tag, openTag, closeTag, escapeXml } from '../xml.js';\nimport { inchesToEmu, ptToEmu, ptToHundredths } from '../units.js';\nimport { NAMESPACE } from '../constants.js';\nimport { serializeSolidFill, serializeColorWithAlpha } from './color.js';\n\nfunction serializeTrendline(t: TrendlineOptions): string {\n let xml = openTag('c:trendline');\n xml += tag('c:trendlineType', { val: t.type ?? 'linear' });\n if (t.order !== undefined) xml += tag('c:order', { val: t.order });\n if (t.period !== undefined) xml += tag('c:period', { val: t.period });\n if (t.forward !== undefined) xml += tag('c:forward', { val: t.forward });\n if (t.backward !== undefined) xml += tag('c:backward', { val: t.backward });\n if (t.intercept !== undefined) xml += tag('c:intercept', { val: t.intercept });\n if (t.displayEquation) xml += tag('c:dispEq', { val: '1' });\n if (t.displayRSquared) xml += tag('c:dispRSqr', { val: '1' });\n if (t.color || t.width || t.dash) {\n let spPr = '';\n const lnAttrs: Record<string, string | number> = {};\n if (t.width) lnAttrs.w = ptToEmu(t.width);\n let lnChildren = '';\n if (t.color) lnChildren += serializeSolidFill(t.color);\n if (t.dash && t.dash !== 'solid') lnChildren += tag('a:prstDash', { val: t.dash });\n spPr += tag(\n 'a:ln',\n Object.keys(lnAttrs).length > 0 ? lnAttrs : undefined,\n lnChildren || undefined,\n );\n xml += tag('c:spPr', undefined, spPr);\n }\n xml += closeTag('c:trendline');\n return xml;\n}\n\nfunction serializeErrorBars(e: ErrorBarOptions): string {\n let xml = openTag('c:errBars');\n xml += tag('c:errDir', { val: e.direction ?? 'y' });\n xml += tag('c:errBarType', { val: e.type ?? 'both' });\n xml += tag('c:errValType', { val: e.valueType ?? 'fixedVal' });\n if (e.noEndCap) xml += tag('c:noEndCap', { val: '1' });\n if (e.value !== undefined) xml += tag('c:val', { val: e.value });\n if (e.color || e.width) {\n let spPr = '';\n const lnAttrs: Record<string, string | number> = {};\n if (e.width) lnAttrs.w = ptToEmu(e.width);\n let lnChildren = '';\n if (e.color) lnChildren += serializeSolidFill(e.color);\n spPr += tag(\n 'a:ln',\n Object.keys(lnAttrs).length > 0 ? lnAttrs : undefined,\n lnChildren || undefined,\n );\n xml += tag('c:spPr', undefined, spPr);\n }\n xml += closeTag('c:errBars');\n return xml;\n}\n\nfunction serializeDataLabels(dl: DataLabelOptions): string {\n let xml = openTag('c:dLbls');\n if (dl.position) xml += tag('c:dLblPos', { val: dl.position });\n if (dl.numberFormat) {\n xml += tag('c:numFmt', { formatCode: dl.numberFormat, sourceLinked: '0' });\n }\n if (dl.fontSize || dl.fontFace || dl.color) {\n let rPrChildren = '';\n if (dl.color) rPrChildren += serializeSolidFill(dl.color);\n if (dl.fontFace) rPrChildren += tag('a:latin', { typeface: dl.fontFace });\n const rPrAttrs: Record<string, string | number> = {};\n if (dl.fontSize) rPrAttrs.sz = ptToHundredths(dl.fontSize);\n xml += tag(\n 'c:txPr',\n undefined,\n tag('a:bodyPr') +\n tag('a:lstStyle') +\n tag(\n 'a:p',\n undefined,\n tag(\n 'a:pPr',\n undefined,\n tag(\n 'a:defRPr',\n Object.keys(rPrAttrs).length > 0 ? rPrAttrs : undefined,\n rPrChildren || undefined,\n ),\n ),\n ),\n );\n }\n if (dl.separator) xml += tag('c:separator', undefined, dl.separator);\n xml += tag('c:showVal', { val: dl.showValue !== false ? '1' : '0' });\n xml += tag('c:showCatName', { val: dl.showCategory ? '1' : '0' });\n xml += tag('c:showSerName', { val: dl.showSeriesName ? '1' : '0' });\n xml += tag('c:showPercent', { val: dl.showPercent ? '1' : '0' });\n xml += closeTag('c:dLbls');\n return xml;\n}\n\nlet chartCounter = 0;\n\nconst CHART_NS = 'http://schemas.openxmlformats.org/drawingml/2006/chart';\nconst CHART_REL_TYPE = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart';\n\nconst DEFAULT_COLORS = [\n '4472C4',\n 'ED7D31',\n 'A5A5A5',\n 'FFC000',\n '5B9BD5',\n '70AD47',\n '264478',\n '9B57A2',\n '636363',\n 'EB6B0A',\n];\n\nfunction serializeAxis(\n axisTag: 'c:catAx' | 'c:valAx' | 'c:dateAx',\n axId: string,\n crossAxId: string,\n position: string,\n opts?: AxisOptions,\n showGridLines?: boolean,\n): string {\n let xml = openTag(axisTag);\n xml += tag('c:axId', undefined, axId);\n\n let scalingChildren = tag('c:orientation', { val: opts?.orientation ?? 'minMax' });\n if (opts?.min !== undefined) scalingChildren += tag('c:min', { val: opts.min });\n if (opts?.max !== undefined) scalingChildren += tag('c:max', { val: opts.max });\n if (opts?.logBase !== undefined) scalingChildren += tag('c:logBase', { val: opts.logBase });\n xml += tag('c:scaling', undefined, scalingChildren);\n\n xml += tag('c:delete', { val: opts?.delete ? '1' : '0' });\n xml += tag('c:axPos', { val: opts?.position ?? position });\n\n if (opts?.format) {\n xml += tag('c:numFmt', { formatCode: opts.format, sourceLinked: '0' });\n }\n\n const showMajor = opts?.majorGridlines ?? (axisTag === 'c:valAx' && showGridLines);\n if (showMajor) {\n if (typeof showMajor === 'object') {\n const glAttrs: Record<string, string | number> = {};\n if (showMajor.width) glAttrs.w = ptToEmu(showMajor.width);\n let glChildren = '';\n if (showMajor.color) {\n glChildren = serializeSolidFill(showMajor.color);\n }\n xml += tag(\n 'c:majorGridlines',\n undefined,\n tag('c:spPr', undefined, tag('a:ln', glAttrs, glChildren || undefined)),\n );\n } else {\n xml += tag('c:majorGridlines');\n }\n }\n\n if (opts?.minorGridlines) {\n if (typeof opts.minorGridlines === 'object') {\n const glAttrs: Record<string, string | number> = {};\n if (opts.minorGridlines.width) glAttrs.w = ptToEmu(opts.minorGridlines.width);\n let glChildren = '';\n if (opts.minorGridlines.color) {\n glChildren = serializeSolidFill(opts.minorGridlines.color);\n }\n xml += tag(\n 'c:minorGridlines',\n undefined,\n tag('c:spPr', undefined, tag('a:ln', glAttrs, glChildren || undefined)),\n );\n } else {\n xml += tag('c:minorGridlines');\n }\n }\n\n if (opts?.title) {\n const titleRPrAttrs: Record<string, string | number> = { lang: 'en-US' };\n if (opts.titleFontSize) titleRPrAttrs.sz = ptToHundredths(opts.titleFontSize);\n xml += tag(\n 'c:title',\n undefined,\n tag(\n 'c:tx',\n undefined,\n tag(\n 'c:rich',\n undefined,\n tag('a:bodyPr') +\n tag('a:lstStyle') +\n tag(\n 'a:p',\n undefined,\n tag('a:pPr', undefined, tag('a:defRPr', titleRPrAttrs)) +\n tag(\n 'a:r',\n undefined,\n tag('a:rPr', titleRPrAttrs) + tag('a:t', undefined, escapeXml(opts.title)),\n ),\n ),\n ),\n ) + tag('c:overlay', { val: '0' }),\n );\n }\n\n if (opts?.majorUnit) xml += tag('c:majorUnit', { val: opts.majorUnit });\n if (opts?.minorUnit) xml += tag('c:minorUnit', { val: opts.minorUnit });\n\n if (opts?.labelFontSize || opts?.labelColor || opts?.labelRotation !== undefined) {\n const bodyAttrs: Record<string, string | number> = {};\n if (opts?.labelRotation !== undefined) bodyAttrs.rot = Math.round(opts.labelRotation * 60000);\n const rPrAttrs: Record<string, string | number> = {};\n if (opts?.labelFontSize) rPrAttrs.sz = ptToHundredths(opts.labelFontSize);\n let rPrChildren = '';\n if (opts?.labelColor) rPrChildren = serializeSolidFill(opts.labelColor);\n xml += tag(\n 'c:txPr',\n undefined,\n tag('a:bodyPr', bodyAttrs) +\n tag('a:lstStyle') +\n tag(\n 'a:p',\n undefined,\n tag('a:pPr', undefined, tag('a:defRPr', rPrAttrs, rPrChildren || undefined)),\n ),\n );\n }\n\n xml += tag('c:crossAx', undefined, crossAxId);\n\n if (opts?.crossesAt !== undefined) {\n if (opts.crossesAt === 'min') xml += tag('c:crosses', { val: 'min' });\n else if (opts.crossesAt === 'max') xml += tag('c:crosses', { val: 'max' });\n else if (opts.crossesAt === 'auto') xml += tag('c:crosses', { val: 'autoZero' });\n else xml += tag('c:crossesAt', { val: opts.crossesAt });\n }\n\n xml += closeTag(axisTag);\n return xml;\n}\n\nfunction serializeSeriesData(\n data: ChartData,\n chartType: ChartType,\n showDataLabels: boolean,\n): string {\n let xml = '';\n const isScatter = chartType === 'scatter';\n\n for (let i = 0; i < data.series.length; i++) {\n const s = data.series[i];\n const color = s.color ?? DEFAULT_COLORS[i % DEFAULT_COLORS.length];\n\n xml += openTag('c:ser');\n xml += tag('c:idx', { val: i });\n xml += tag('c:order', { val: i });\n xml += tag(\n 'c:tx',\n undefined,\n tag(\n 'c:strRef',\n undefined,\n tag('c:f', undefined, `Sheet1!$B$1`) +\n tag(\n 'c:strCache',\n undefined,\n tag('c:ptCount', { val: '1' }) +\n tag('c:pt', { idx: '0' }, tag('c:v', undefined, escapeXml(s.name))),\n ),\n ),\n );\n\n let spPrChildren = serializeSolidFill(color);\n if (s.lineWidth || s.lineDash) {\n const lnAttrs: Record<string, string | number> = {};\n if (s.lineWidth) lnAttrs.w = ptToEmu(s.lineWidth);\n let lnChildren = serializeSolidFill(color);\n if (s.lineDash && s.lineDash !== 'solid') {\n lnChildren += tag('a:prstDash', { val: s.lineDash });\n }\n spPrChildren += tag('a:ln', lnAttrs, lnChildren);\n }\n if (s.opacity !== undefined && s.opacity < 100) {\n spPrChildren = tag(\n 'a:solidFill',\n undefined,\n serializeColorWithAlpha(s.fill ?? color, s.opacity),\n );\n }\n xml += tag('c:spPr', undefined, spPrChildren);\n\n if (s.marker) {\n let markerXml = '';\n markerXml += tag('c:symbol', { val: s.marker.type ?? 'circle' });\n if (s.marker.size) markerXml += tag('c:size', { val: s.marker.size });\n let markerSpPr = '';\n if (s.marker.fill) {\n markerSpPr += serializeSolidFill(s.marker.fill);\n }\n if (s.marker.border) {\n let lnChildren = '';\n if (s.marker.border.color) {\n lnChildren = serializeSolidFill(s.marker.border.color);\n }\n const lnAttrs: Record<string, string | number> = {};\n if (s.marker.border.width) lnAttrs.w = ptToEmu(s.marker.border.width);\n markerSpPr += tag('a:ln', lnAttrs, lnChildren || undefined);\n }\n if (markerSpPr) markerXml += tag('c:spPr', undefined, markerSpPr);\n xml += tag('c:marker', undefined, markerXml);\n }\n\n if (s.colors && s.colors.length > 0) {\n for (let j = 0; j < s.colors.length; j++) {\n xml += tag(\n 'c:dPt',\n undefined,\n tag('c:idx', { val: j }) + tag('c:spPr', undefined, serializeSolidFill(s.colors[j])),\n );\n }\n }\n\n if (showDataLabels) {\n xml += tag(\n 'c:dLbls',\n undefined,\n tag('c:showVal', { val: '1' }) +\n tag('c:showCatName', { val: '0' }) +\n tag('c:showSerName', { val: '0' }),\n );\n } else if (s.dataLabels) {\n xml += serializeDataLabels(s.dataLabels);\n }\n\n if (s.trendline) {\n xml += serializeTrendline(s.trendline);\n }\n\n if (s.errorBars) {\n xml += serializeErrorBars(s.errorBars);\n }\n\n if (s.explosion !== undefined) {\n xml += tag('c:explosion', { val: s.explosion });\n }\n\n if (s.smooth) {\n xml += tag('c:smooth', { val: '1' });\n }\n\n if (data.categories && !isScatter) {\n xml += openTag('c:cat');\n xml += openTag('c:strRef');\n xml += tag('c:f', undefined, 'Sheet1!$A$2:$A$' + (data.categories.length + 1));\n xml += openTag('c:strCache');\n xml += tag('c:ptCount', { val: data.categories.length });\n for (let j = 0; j < data.categories.length; j++) {\n xml += tag('c:pt', { idx: j }, tag('c:v', undefined, escapeXml(data.categories[j])));\n }\n xml += closeTag('c:strCache');\n xml += closeTag('c:strRef');\n xml += closeTag('c:cat');\n }\n\n if (isScatter && data.xValues) {\n xml += openTag('c:xVal');\n xml += openTag('c:numRef');\n xml += tag('c:f', undefined, `Sheet1!$A$2:$A$${data.xValues.length + 1}`);\n xml += openTag('c:numCache');\n xml += tag('c:formatCode', undefined, 'General');\n xml += tag('c:ptCount', { val: data.xValues.length });\n for (let j = 0; j < data.xValues.length; j++) {\n xml += tag('c:pt', { idx: j }, tag('c:v', undefined, String(data.xValues[j])));\n }\n xml += closeTag('c:numCache');\n xml += closeTag('c:numRef');\n xml += closeTag('c:xVal');\n\n xml += openTag('c:yVal');\n } else {\n xml += openTag('c:val');\n }\n xml += openTag('c:numRef');\n xml += tag('c:f', undefined, `Sheet1!$B$2:$B$${s.values.length + 1}`);\n xml += openTag('c:numCache');\n xml += tag('c:formatCode', undefined, 'General');\n xml += tag('c:ptCount', { val: s.values.length });\n for (let j = 0; j < s.values.length; j++) {\n xml += tag('c:pt', { idx: j }, tag('c:v', undefined, String(s.values[j])));\n }\n xml += closeTag('c:numCache');\n xml += closeTag('c:numRef');\n xml += closeTag(isScatter ? 'c:yVal' : 'c:val');\n\n if (chartType === 'bubble' && data.bubbleSizes) {\n xml += openTag('c:bubbleSize');\n xml += openTag('c:numRef');\n xml += tag('c:f', undefined, `Sheet1!$C$2:$C$${data.bubbleSizes.length + 1}`);\n xml += openTag('c:numCache');\n xml += tag('c:formatCode', undefined, 'General');\n xml += tag('c:ptCount', { val: data.bubbleSizes.length });\n for (let j = 0; j < data.bubbleSizes.length; j++) {\n xml += tag('c:pt', { idx: j }, tag('c:v', undefined, String(data.bubbleSizes[j])));\n }\n xml += closeTag('c:numCache');\n xml += closeTag('c:numRef');\n xml += closeTag('c:bubbleSize');\n }\n\n xml += closeTag('c:ser');\n }\n\n return xml;\n}\n\nfunction getOoxmlChartTag(chartType: ChartType): string {\n const map: Record<ChartType, string> = {\n bar: 'c:barChart',\n col: 'c:barChart',\n line: 'c:lineChart',\n pie: 'c:pieChart',\n area: 'c:areaChart',\n scatter: 'c:scatterChart',\n doughnut: 'c:doughnutChart',\n radar: 'c:radarChart',\n bubble: 'c:bubbleChart',\n stock: 'c:stockChart',\n surface: 'c:surfaceChart',\n bar3D: 'c:bar3DChart',\n col3D: 'c:bar3DChart',\n line3D: 'c:line3DChart',\n pie3D: 'c:pie3DChart',\n area3D: 'c:area3DChart',\n };\n return map[chartType];\n}\n\nfunction serializeChartXml(element: ChartElement): string {\n const { chartType, data, title, showLegend, showDataLabels, showGridLines } = element;\n const chartTag = getOoxmlChartTag(chartType);\n const noAxesTypes: ChartType[] = ['pie', 'doughnut', 'pie3D'];\n const hasAxes = !noAxesTypes.includes(chartType);\n\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n xml += openTag('c:chartSpace', {\n 'xmlns:c': CHART_NS,\n 'xmlns:a': NAMESPACE.a,\n 'xmlns:r': NAMESPACE.r,\n });\n\n xml += openTag('c:chart');\n\n if (title) {\n const titleRPrAttrs: Record<string, string | number> = { lang: 'en-US' };\n if (element.titleFontSize) titleRPrAttrs.sz = ptToHundredths(element.titleFontSize);\n let titleRPrChildren = '';\n if (element.titleColor) {\n titleRPrChildren = serializeSolidFill(element.titleColor);\n }\n xml += tag(\n 'c:title',\n undefined,\n tag(\n 'c:tx',\n undefined,\n tag(\n 'c:rich',\n undefined,\n tag('a:bodyPr') +\n tag('a:lstStyle') +\n tag(\n 'a:p',\n undefined,\n tag(\n 'a:pPr',\n undefined,\n tag('a:defRPr', titleRPrAttrs, titleRPrChildren || undefined),\n ) +\n tag(\n 'a:r',\n undefined,\n tag('a:rPr', titleRPrAttrs, titleRPrChildren || undefined) +\n tag('a:t', undefined, escapeXml(title)),\n ),\n ),\n ),\n ) + tag('c:overlay', { val: '0' }),\n );\n } else {\n xml += tag('c:autoTitleDeleted', { val: '1' });\n }\n\n if (element.view3D) {\n let v3d = '';\n if (element.view3D.rotX !== undefined) v3d += tag('c:rotX', { val: element.view3D.rotX });\n if (element.view3D.rotY !== undefined) v3d += tag('c:rotY', { val: element.view3D.rotY });\n if (element.view3D.depthPercent !== undefined)\n v3d += tag('c:depthPercent', { val: element.view3D.depthPercent });\n if (element.view3D.rAngAx !== undefined)\n v3d += tag('c:rAngAx', { val: element.view3D.rAngAx ? '1' : '0' });\n if (element.view3D.perspective !== undefined)\n v3d += tag('c:perspective', { val: element.view3D.perspective });\n xml += tag('c:view3D', undefined, v3d);\n }\n\n xml += openTag('c:plotArea');\n xml += tag('c:layout');\n\n xml += openTag(chartTag);\n\n if (chartType === 'bar' || chartType === 'bar3D') {\n xml += tag('c:barDir', { val: 'bar' });\n xml += tag('c:grouping', { val: element.barGrouping ?? 'clustered' });\n } else if (chartType === 'col' || chartType === 'col3D') {\n xml += tag('c:barDir', { val: 'col' });\n xml += tag('c:grouping', { val: element.barGrouping ?? 'clustered' });\n } else if (chartType === 'line' || chartType === 'line3D') {\n xml += tag('c:grouping', { val: element.lineGrouping ?? 'standard' });\n } else if (chartType === 'area' || chartType === 'area3D') {\n xml += tag('c:grouping', { val: element.areaGrouping ?? 'standard' });\n } else if (chartType === 'scatter') {\n xml += tag('c:scatterStyle', { val: element.scatterStyle ?? 'lineMarker' });\n } else if (chartType === 'radar') {\n xml += tag('c:radarStyle', { val: element.radarStyle ?? 'marker' });\n }\n\n xml += serializeSeriesData(data, chartType, showDataLabels);\n\n if (chartType === 'pie' || chartType === 'pie3D') {\n if (element.pieExplosion) {\n for (let i = 0; i < data.series[0]?.values.length; i++) {\n xml += tag(\n 'c:dPt',\n undefined,\n tag('c:idx', { val: i }) + tag('c:explosion', { val: element.pieExplosion }),\n );\n }\n }\n }\n\n if (chartType === 'doughnut') {\n xml += tag('c:holeSize', { val: element.doughnutHoleSize ?? 50 });\n }\n\n if (\n (chartType === 'bar' ||\n chartType === 'col' ||\n chartType === 'bar3D' ||\n chartType === 'col3D') &&\n element.barGapWidth !== undefined\n ) {\n xml += tag('c:gapWidth', { val: element.barGapWidth });\n }\n if (\n (chartType === 'bar' ||\n chartType === 'col' ||\n chartType === 'bar3D' ||\n chartType === 'col3D') &&\n element.barOverlap !== undefined\n ) {\n xml += tag('c:overlap', { val: element.barOverlap });\n }\n\n if (hasAxes) {\n xml += tag('c:axId', { val: '1' });\n xml += tag('c:axId', { val: '2' });\n }\n\n xml += closeTag(chartTag);\n\n if (hasAxes) {\n xml += serializeAxis('c:catAx', '1', '2', 'b', element.catAxis, showGridLines);\n xml += serializeAxis('c:valAx', '2', '1', 'l', element.valAxis, showGridLines);\n if (element.secondaryValAxis) {\n xml += serializeAxis('c:valAx', '3', '1', 'r', element.secondaryValAxis, false);\n }\n }\n\n if (element.plotArea) {\n let plotSpPr = '';\n if (element.plotArea.fill) {\n plotSpPr += serializeSolidFill(element.plotArea.fill);\n }\n if (plotSpPr) {\n xml += tag('c:spPr', undefined, plotSpPr);\n }\n }\n\n xml += closeTag('c:plotArea');\n\n if (showLegend) {\n xml += tag(\n 'c:legend',\n undefined,\n tag('c:legendPos', { val: element.legendPosition ?? 'b' }) + tag('c:overlay', { val: '0' }),\n );\n }\n\n xml += tag('c:plotVisOnly', { val: '1' });\n xml += closeTag('c:chart');\n\n if (element.fill) {\n xml += tag('c:spPr', undefined, serializeSolidFill(element.fill));\n }\n\n xml += closeTag('c:chartSpace');\n\n return xml;\n}\n\nexport const chartSerializer: IElementSerializer<ChartElement> = {\n type: 'chart',\n serialize(element: ChartElement, ctx: SerializationContext): string {\n chartCounter++;\n const chartFileName = `chart${chartCounter}.xml`;\n const target = `../charts/${chartFileName}`;\n\n const chartXml = serializeChartXml(element);\n const encoder = new TextEncoder();\n const rId = ctx.addRelationship(CHART_REL_TYPE, target, encoder.encode(chartXml));\n\n const p = element.placement;\n let xml = openTag('p:graphicFrame');\n\n xml += tag(\n 'p:nvGraphicFramePr',\n undefined,\n tag('p:cNvPr', { id: '0', name: element.name ?? 'Chart' }) +\n tag('p:cNvGraphicFramePr') +\n tag('p:nvPr'),\n );\n\n xml += tag(\n 'p:xfrm',\n undefined,\n tag('a:off', { x: inchesToEmu(p.x), y: inchesToEmu(p.y) }) +\n tag('a:ext', { cx: inchesToEmu(p.w), cy: inchesToEmu(p.h) }),\n );\n\n xml += tag(\n 'a:graphic',\n undefined,\n tag('a:graphicData', { uri: CHART_NS }, tag('c:chart', { 'xmlns:c': CHART_NS, 'r:id': rId })),\n );\n\n xml += closeTag('p:graphicFrame');\n return xml;\n },\n};\n","import type { IElementSerializer, SerializationContext } from '../../core/types.js';\nimport type { MediaElement } from '../../elements/media.js';\nimport { tag, openTag, closeTag } from '../xml.js';\nimport { REL_TYPE } from '../constants.js';\nimport { readFileSync } from 'node:fs';\nimport { serializeEffects, serializeTransform } from './shared.js';\n\nlet mediaCounter = 0;\n\nconst MEDIA_REL_TYPE = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/video';\nconst AUDIO_REL_TYPE = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/audio';\n\nfunction extFromContentType(ct: string): string {\n const map: Record<string, string> = {\n 'video/mp4': 'mp4',\n 'video/webm': 'webm',\n 'video/avi': 'avi',\n 'audio/mpeg': 'mp3',\n 'audio/mp3': 'mp3',\n 'audio/wav': 'wav',\n 'audio/ogg': 'ogg',\n };\n return map[ct] ?? ct.split('/')[1] ?? 'bin';\n}\n\nexport const mediaSerializer: IElementSerializer<MediaElement> = {\n type: 'media',\n serialize(element: MediaElement, ctx: SerializationContext): string {\n mediaCounter++;\n const ext = extFromContentType(element.contentType);\n const fileName = `media${mediaCounter}.${ext}`;\n const target = `../media/${fileName}`;\n const relType = element.mediaType === 'audio' ? AUDIO_REL_TYPE : MEDIA_REL_TYPE;\n\n let data = element.data;\n if (!data && element.path) {\n data = readFileSync(element.path);\n }\n if (!data) throw new Error('Media element must have data or path');\n\n const rId = ctx.addRelationship(relType, target, data);\n\n const p = element.placement;\n\n if (element.mediaType === 'audio') {\n let xml = openTag('p:sp');\n xml += tag(\n 'p:nvSpPr',\n undefined,\n tag('p:cNvPr', { id: '0', name: element.name ?? 'Audio' }) +\n tag('p:cNvSpPr') +\n tag('p:nvPr', undefined, tag('a:audioFile', { 'r:link': rId })),\n );\n xml += openTag('p:spPr');\n xml += serializeTransform(p, element.transform);\n xml += tag('a:prstGeom', { prst: 'rect' }, tag('a:avLst'));\n if (element.effects) xml += serializeEffects(element.effects);\n xml += closeTag('p:spPr');\n xml += closeTag('p:sp');\n return xml;\n }\n\n // Video\n let posterRId: string | undefined;\n if (element.poster) {\n let posterData = element.poster.data;\n if (!posterData && element.poster.path) {\n posterData = readFileSync(element.poster.path);\n }\n if (posterData) {\n const pCt = element.poster.contentType ?? 'image/png';\n const pExt = pCt.split('/')[1] ?? 'png';\n const posterFile = `poster${mediaCounter}.${pExt}`;\n posterRId = ctx.addRelationship(REL_TYPE.image, `../media/${posterFile}`, posterData);\n }\n }\n\n let xml = openTag('p:pic');\n xml += tag(\n 'p:nvPicPr',\n undefined,\n tag('p:cNvPr', { id: '0', name: element.name ?? 'Video' }) +\n tag('p:cNvPicPr', undefined, tag('a:picLocks', { noChangeAspect: '1' })) +\n tag('p:nvPr', undefined, tag('a:videoFile', { 'r:link': rId })),\n );\n xml += tag(\n 'p:blipFill',\n undefined,\n tag('a:blip', posterRId ? { 'r:embed': posterRId } : undefined) +\n tag('a:stretch', undefined, tag('a:fillRect')),\n );\n xml += openTag('p:spPr');\n xml += serializeTransform(p, element.transform);\n xml += tag('a:prstGeom', { prst: 'rect' }, tag('a:avLst'));\n if (element.effects) xml += serializeEffects(element.effects);\n xml += closeTag('p:spPr');\n xml += closeTag('p:pic');\n return xml;\n },\n};\n","import type { IElementSerializer, SerializationContext } from '../../core/types.js';\nimport type { GroupElement } from '../../elements/group.js';\nimport type { Registry } from '../../core/registry.js';\nimport { tag, openTag, closeTag } from '../xml.js';\nimport { inchesToEmu } from '../units.js';\n\nexport function createGroupSerializer(registry: Registry): IElementSerializer<GroupElement> {\n return {\n type: 'group',\n serialize(element: GroupElement, ctx: SerializationContext): string {\n const p = element.placement;\n let xml = openTag('p:grpSp');\n\n xml += tag(\n 'p:nvGrpSpPr',\n undefined,\n tag('p:cNvPr', { id: '0', name: element.name ?? '' }) + tag('p:cNvGrpSpPr') + tag('p:nvPr'),\n );\n\n xml += tag(\n 'p:grpSpPr',\n undefined,\n tag(\n 'a:xfrm',\n undefined,\n tag('a:off', { x: inchesToEmu(p.x), y: inchesToEmu(p.y) }) +\n tag('a:ext', { cx: inchesToEmu(p.w), cy: inchesToEmu(p.h) }) +\n tag('a:chOff', { x: inchesToEmu(p.x), y: inchesToEmu(p.y) }) +\n tag('a:chExt', { cx: inchesToEmu(p.w), cy: inchesToEmu(p.h) }),\n ),\n );\n\n for (const child of element.children) {\n const serializer = registry.getSerializer(child.type);\n if (serializer) {\n xml += serializer.serialize(child, ctx);\n }\n }\n\n xml += closeTag('p:grpSp');\n return xml;\n },\n };\n}\n","import type { IElementSerializer, SerializationContext } from '../../core/types.js';\nimport type { ConnectorElement } from '../../elements/connector.js';\nimport { tag, openTag, closeTag } from '../xml.js';\nimport { serializeLine, serializeTransform } from './shared.js';\nimport { serializeSolidFill } from './color.js';\n\nconst CONNECTOR_GEOM: Record<string, string> = {\n straight: 'straightConnector1',\n elbow: 'bentConnector3',\n curved: 'curvedConnector3',\n};\n\nexport const connectorSerializer: IElementSerializer<ConnectorElement> = {\n type: 'connector',\n serialize(element: ConnectorElement, _ctx: SerializationContext): string {\n const p = element.placement;\n const prst = CONNECTOR_GEOM[element.connectorType] ?? 'straightConnector1';\n\n let xml = openTag('p:cxnSp');\n\n xml += tag(\n 'p:nvCxnSpPr',\n undefined,\n tag('p:cNvPr', { id: '0', name: element.name ?? '' }) + tag('p:cNvCxnSpPr') + tag('p:nvPr'),\n );\n\n xml += openTag('p:spPr');\n xml += serializeTransform(p);\n xml += tag('a:prstGeom', { prst }, tag('a:avLst'));\n\n if (element.line) {\n xml += serializeLine(element.line);\n } else {\n let defaultLn = serializeSolidFill('000000');\n if (element.startArrow) {\n const hAttrs: Record<string, string> = {};\n if (element.startArrow.type) hAttrs.type = element.startArrow.type;\n if (element.startArrow.width) hAttrs.w = element.startArrow.width;\n if (element.startArrow.length) hAttrs.len = element.startArrow.length;\n defaultLn += tag('a:headEnd', hAttrs);\n }\n if (element.endArrow) {\n const tAttrs: Record<string, string> = {};\n if (element.endArrow.type) tAttrs.type = element.endArrow.type;\n if (element.endArrow.width) tAttrs.w = element.endArrow.width;\n if (element.endArrow.length) tAttrs.len = element.endArrow.length;\n defaultLn += tag('a:tailEnd', tAttrs);\n }\n xml += tag('a:ln', { w: '12700' }, defaultLn);\n }\n\n xml += closeTag('p:spPr');\n xml += closeTag('p:cxnSp');\n return xml;\n },\n};\n","import { zipSync, type Zippable } from 'fflate';\nimport type {\n IElement,\n Theme,\n PresentationProperties,\n ViewProperties,\n SlideComment,\n CommentAuthor,\n UserDefinedTag,\n SlideSyncData,\n SlideTransition,\n Animation,\n SlideBackground,\n} from '../core/types.js';\nimport type { Registry } from '../core/registry.js';\nimport type { SlideMaster } from '../core/slide-master.js';\nimport type { SlideLayout } from '../core/slide-layout.js';\nimport type { NotesMaster } from '../core/notes-master.js';\nimport type { HandoutMaster } from '../core/handout-master.js';\nimport { RelationshipManager } from '../core/relationships.js';\nimport { serializeSlide } from '../ooxml/serializers/slide.js';\nimport { serializePresentation } from '../ooxml/serializers/presentation.js';\nimport { serializeTheme } from '../ooxml/serializers/theme.js';\nimport { serializeSlideMaster } from '../ooxml/serializers/slide-master.js';\nimport { serializeSlideLayout } from '../ooxml/serializers/slide-layout.js';\nimport { buildContentTypes } from '../ooxml/serializers/content-types.js';\nimport { serializeNotesSlide } from '../ooxml/serializers/notes.js';\nimport { serializePresProps } from '../ooxml/serializers/pres-props.js';\nimport { serializeViewProps } from '../ooxml/serializers/view-props.js';\nimport { serializeNotesMaster } from '../ooxml/serializers/notes-master.js';\nimport { serializeCommentAuthors } from '../ooxml/serializers/comment-authors.js';\nimport { serializeComments } from '../ooxml/serializers/comments.js';\nimport { serializeHandoutMaster } from '../ooxml/serializers/handout-master.js';\nimport { serializeTags } from '../ooxml/serializers/tags.js';\nimport { serializeSlideUpdateInfo } from '../ooxml/serializers/slide-update-info.js';\nimport { serializeCoreProperties } from '../ooxml/serializers/core-props.js';\nimport { REL_TYPE } from '../ooxml/constants.js';\n\n/** Data describing a single slide's content and metadata. */\nexport interface SlideData {\n /** Elements (text, images, shapes, etc.) placed on the slide. */\n elements: IElement[];\n /** Plain-text speaker notes for this slide. */\n notes?: string;\n /** Index into the layouts array; defaults to 0 (blank). */\n layoutIndex?: number;\n /** Comments attached to this slide. */\n comments?: SlideComment[];\n /** User-defined key-value tags for this slide. */\n tags?: UserDefinedTag[];\n /** Synchronization metadata for collaborative editing. */\n syncData?: SlideSyncData;\n /** Transition effect applied when advancing to this slide. */\n transition?: SlideTransition;\n /** Animation effects applied to elements on this slide. */\n animations?: Animation[];\n /** Background fill or image for this slide. */\n background?: SlideBackground;\n}\n\n/** Input required to serialize a complete PPTX presentation. */\nexport interface WriterInput {\n /** All slides in presentation order. */\n slides: SlideData[];\n /** Theme defining colors, fonts, and formatting defaults. */\n theme: Theme;\n /** Element serializer registry. */\n registry: Registry;\n /** Slide masters (at least one required). */\n masters: SlideMaster[];\n /** Slide layouts referenced by slides via layoutIndex. */\n layouts: SlideLayout[];\n /** Presentation-level properties (slideshow, print, etc.). */\n presProps?: PresentationProperties;\n /** View properties (normal view, slide sorter, etc.). */\n viewProps?: ViewProperties;\n /** Notes master definition; generated automatically when any slide has notes. */\n notesMaster?: NotesMaster;\n /** Comment authors; required when any slide contains comments. */\n commentAuthors?: CommentAuthor[];\n /** Handout master definition. */\n handoutMaster?: HandoutMaster;\n /** Presentation-level user-defined tags. */\n tags?: UserDefinedTag[];\n /** URI for HTML publish save-as relationship. */\n htmlPublishUri?: string;\n /** URL for slide update synchronization. */\n slideUpdateUrl?: string;\n /** Custom slide size. */\n slideSize?: { width: number; height: number; type?: string };\n /** Core document properties (Dublin Core metadata). */\n coreProperties?: {\n title?: string;\n creator?: string;\n subject?: string;\n description?: string;\n keywords?: string;\n category?: string;\n };\n}\n\nconst encoder = new TextEncoder();\n\n/**\n * Assembles all OOXML parts and returns the PPTX file as a zipped Uint8Array.\n * Handles slides, themes, masters, layouts, notes, comments, tags, and media.\n */\nexport function writePresentation(input: WriterInput): Uint8Array {\n const { slides, theme, registry, masters, layouts } = input;\n const files: Zippable = {};\n const allMedia = new Map<string, Uint8Array>();\n const imageExtensions = new Set<string>();\n\n // Presentation relationships (order matters: slideMaster=rId1, theme=rId2)\n const presRels = new RelationshipManager();\n presRels.add(REL_TYPE.slideMaster, 'slideMasters/slideMaster1.xml');\n presRels.add(REL_TYPE.theme, 'theme/theme1.xml');\n\n const slideRIds: string[] = [];\n for (let i = 0; i < slides.length; i++) {\n const rId = presRels.add(REL_TYPE.slide, `slides/slide${i + 1}.xml`);\n slideRIds.push(rId);\n }\n\n // Presentation Properties (always generated)\n presRels.add(REL_TYPE.presProps, 'presProps.xml');\n files['ppt/presProps.xml'] = encoder.encode(serializePresProps(input.presProps));\n\n // View Properties (always generated)\n presRels.add(REL_TYPE.viewProps, 'viewProps.xml');\n files['ppt/viewProps.xml'] = encoder.encode(serializeViewProps(input.viewProps));\n\n let chartCount = 0;\n let notesCount = 0;\n let commentCount = 0;\n let tagCount = 0;\n const hasNotes = slides.some((s) => s.notes);\n const hasComments =\n input.commentAuthors &&\n input.commentAuthors.length > 0 &&\n slides.some((s) => s.comments?.length);\n\n // Notes Master (generated when any slide has notes)\n if (hasNotes) {\n presRels.add(REL_TYPE.notesMaster, 'notesMasters/notesMaster1.xml');\n files['ppt/notesMasters/notesMaster1.xml'] = encoder.encode(serializeNotesMaster());\n const notesMasterRels = new RelationshipManager();\n notesMasterRels.add(REL_TYPE.theme, '../theme/theme1.xml');\n files['ppt/notesMasters/_rels/notesMaster1.xml.rels'] = encoder.encode(notesMasterRels.toXml());\n }\n\n // Handout Master (only when explicitly configured)\n if (input.handoutMaster) {\n presRels.add(REL_TYPE.handoutMaster, 'handoutMasters/handoutMaster1.xml');\n files['ppt/handoutMasters/handoutMaster1.xml'] = encoder.encode(serializeHandoutMaster());\n const handoutMasterRels = new RelationshipManager();\n handoutMasterRels.add(REL_TYPE.theme, '../theme/theme1.xml');\n files['ppt/handoutMasters/_rels/handoutMaster1.xml.rels'] = encoder.encode(\n handoutMasterRels.toXml(),\n );\n }\n\n // Comment Authors (generated when any comments exist)\n if (hasComments && input.commentAuthors) {\n presRels.add(REL_TYPE.commentAuthors, 'commentAuthors.xml');\n files['ppt/commentAuthors.xml'] = encoder.encode(serializeCommentAuthors(input.commentAuthors));\n }\n\n // Presentation-level tags\n if (input.tags && input.tags.length > 0) {\n tagCount++;\n presRels.add(REL_TYPE.tags, `tags/tag${tagCount}.xml`);\n files[`ppt/tags/tag${tagCount}.xml`] = encoder.encode(serializeTags(input.tags));\n }\n\n // External relationships\n if (input.htmlPublishUri) {\n presRels.add(REL_TYPE.htmlPubSaveAs, input.htmlPublishUri, undefined, true);\n }\n\n // Serialize slides\n for (let i = 0; i < slides.length; i++) {\n const layoutIdx = slides[i].layoutIndex ?? 0;\n const result = serializeSlide(\n slides[i].elements,\n i,\n theme,\n registry,\n `rId1`,\n slides[i].transition,\n slides[i].animations,\n slides[i].background,\n );\n files[`ppt/slides/slide${i + 1}.xml`] = encoder.encode(result.slideXml);\n\n for (const [path, data] of result.media) {\n allMedia.set(path, data);\n if (path.startsWith('ppt/charts/')) {\n chartCount++;\n } else {\n const ext = path.split('.').pop() ?? 'bin';\n imageExtensions.add(ext);\n }\n }\n\n // Build slide relationships\n const slideRelManager = new RelationshipManager();\n slideRelManager.add(REL_TYPE.slideLayout, `../slideLayouts/slideLayout${layoutIdx + 1}.xml`);\n\n // Notes\n if (slides[i].notes) {\n notesCount++;\n const notesRel = new RelationshipManager();\n notesRel.add(REL_TYPE.slide, `../slides/slide${i + 1}.xml`);\n notesRel.add(REL_TYPE.notesMaster, '../notesMasters/notesMaster1.xml');\n\n const notesXml = serializeNotesSlide(slides[i].notes ?? '');\n files[`ppt/notesSlides/notesSlide${notesCount}.xml`] = encoder.encode(notesXml);\n files[`ppt/notesSlides/_rels/notesSlide${notesCount}.xml.rels`] = encoder.encode(\n notesRel.toXml(),\n );\n\n slideRelManager.add(REL_TYPE.notesSlide, `../notesSlides/notesSlide${notesCount}.xml`);\n }\n\n // Slide comments\n const slideComments = slides[i].comments;\n if (slideComments && slideComments.length > 0) {\n commentCount++;\n slideRelManager.add(REL_TYPE.comments, `../comments/comment${commentCount}.xml`);\n files[`ppt/comments/comment${commentCount}.xml`] = encoder.encode(\n serializeComments(slideComments),\n );\n }\n\n // Slide-level tags\n const slideTags = slides[i].tags;\n if (slideTags && slideTags.length > 0) {\n tagCount++;\n slideRelManager.add(REL_TYPE.tags, `../tags/tag${tagCount}.xml`);\n files[`ppt/tags/tag${tagCount}.xml`] = encoder.encode(serializeTags(slideTags));\n }\n\n // Slide sync data\n const syncData = slides[i].syncData;\n if (syncData) {\n slideRelManager.add(\n REL_TYPE.slideUpdateInfo,\n `../slideUpdateInfo/slideUpdateInfo${i + 1}.xml`,\n );\n files[`ppt/slideUpdateInfo/slideUpdateInfo${i + 1}.xml`] = encoder.encode(\n serializeSlideUpdateInfo(syncData),\n );\n if (input.slideUpdateUrl) {\n const syncRels = new RelationshipManager();\n syncRels.add(REL_TYPE.slideUpdateUrl, input.slideUpdateUrl, undefined, true);\n files[`ppt/slideUpdateInfo/_rels/slideUpdateInfo${i + 1}.xml.rels`] = encoder.encode(\n syncRels.toXml(),\n );\n }\n }\n\n // Media relationships from element serialization\n for (const rel of result.mediaRels) {\n slideRelManager.add(rel.type, rel.target);\n }\n\n files[`ppt/slides/_rels/slide${i + 1}.xml.rels`] = encoder.encode(slideRelManager.toXml());\n }\n\n // Theme\n files['ppt/theme/theme1.xml'] = encoder.encode(serializeTheme(theme));\n\n // Slide masters\n for (let i = 0; i < masters.length; i++) {\n files[`ppt/slideMasters/slideMaster${i + 1}.xml`] = encoder.encode(\n serializeSlideMaster(masters[i], layouts.length),\n );\n\n const masterRels = new RelationshipManager();\n for (let j = 0; j < layouts.length; j++) {\n masterRels.add(REL_TYPE.slideLayout, `../slideLayouts/slideLayout${j + 1}.xml`);\n }\n masterRels.add(REL_TYPE.theme, '../theme/theme1.xml');\n files[`ppt/slideMasters/_rels/slideMaster${i + 1}.xml.rels`] = encoder.encode(\n masterRels.toXml(),\n );\n }\n\n // Slide layouts\n for (let i = 0; i < layouts.length; i++) {\n files[`ppt/slideLayouts/slideLayout${i + 1}.xml`] = encoder.encode(\n serializeSlideLayout(layouts[i]),\n );\n\n const layoutRels = new RelationshipManager();\n layoutRels.add(REL_TYPE.slideMaster, '../slideMasters/slideMaster1.xml');\n files[`ppt/slideLayouts/_rels/slideLayout${i + 1}.xml.rels`] = encoder.encode(\n layoutRels.toXml(),\n );\n }\n\n // Content types\n files['[Content_Types].xml'] = encoder.encode(\n buildContentTypes({\n slideCount: slides.length,\n imageExtensions,\n chartCount,\n notesCount,\n layoutCount: layouts.length,\n hasNotesMaster: hasNotes,\n hasHandoutMaster: !!input.handoutMaster,\n commentCount,\n hasCommentAuthors: !!hasComments,\n tagCount,\n syncDataCount: slides.filter((s) => s.syncData).length,\n }),\n );\n\n // Presentation\n files['ppt/presentation.xml'] = encoder.encode(\n serializePresentation(slides.length, slideRIds, input.slideSize),\n );\n files['ppt/_rels/presentation.xml.rels'] = encoder.encode(presRels.toXml());\n\n // Core properties\n if (input.coreProperties) {\n files['docProps/core.xml'] = encoder.encode(serializeCoreProperties(input.coreProperties));\n }\n\n // Root rels\n const rootRels = new RelationshipManager();\n rootRels.add(REL_TYPE.officeDocument, 'ppt/presentation.xml');\n if (input.coreProperties) {\n rootRels.add(\n 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties',\n 'docProps/core.xml',\n );\n }\n files['_rels/.rels'] = encoder.encode(rootRels.toXml());\n\n // Media + chart files\n for (const [path, data] of allMedia) {\n files[path] = data;\n }\n\n return zipSync(files);\n}\n","import { tag } from '../ooxml/xml.js';\n\nexport interface Relationship {\n id: string;\n type: string;\n target: string;\n data?: Uint8Array;\n external?: boolean;\n}\n\nexport class RelationshipManager {\n private counter = 0;\n private rels: Relationship[] = [];\n\n add(type: string, target: string, data?: Uint8Array, external?: boolean): string {\n this.counter++;\n const id = `rId${this.counter}`;\n this.rels.push({ id, type, target, data, external });\n return id;\n }\n\n getAll(): readonly Relationship[] {\n return this.rels;\n }\n\n toXml(): string {\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n xml += '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">';\n for (const rel of this.rels) {\n const attrs: Record<string, string> = {\n Id: rel.id,\n Type: rel.type,\n Target: rel.target,\n };\n if (rel.external) {\n attrs.TargetMode = 'External';\n }\n xml += tag('Relationship', attrs);\n }\n xml += '</Relationships>';\n return xml;\n }\n}\n","import type {\n IElement,\n SerializationContext,\n Theme,\n SlideTransition,\n Animation,\n SlideBackground,\n} from '../../core/types.js';\nimport type { Registry } from '../../core/registry.js';\nimport { RelationshipManager } from '../../core/relationships.js';\nimport { openTag, closeTag, tag } from '../xml.js';\nimport { NAMESPACE } from '../constants.js';\nimport { serializeFill } from './shared.js';\nimport { serializeSolidFill } from './color.js';\n\nexport interface MediaRel {\n type: string;\n target: string;\n}\n\nexport interface SlideSerializerResult {\n slideXml: string;\n relsXml: string;\n media: Map<string, Uint8Array>;\n mediaRels: MediaRel[];\n}\n\nfunction serializeTransition(t: SlideTransition): string {\n const attrs: Record<string, string | number> = {};\n if (t.durationMs !== undefined) {\n attrs.dur = t.durationMs;\n } else if (t.duration) {\n attrs.spd = t.duration <= 500 ? 'fast' : t.duration <= 1500 ? 'med' : 'slow';\n }\n if (t.advanceOnClick === false) attrs.advClick = '0';\n if (t.advanceAfter !== undefined) {\n attrs.advTm = t.advanceAfter;\n }\n\n const type = t.type ?? 'fade';\n let child = '';\n\n const transMap: Record<string, string> = {\n fade: 'p:fade',\n push: 'p:push',\n wipe: 'p:wipe',\n split: 'p:split',\n cover: 'p:cover',\n uncover: 'p:uncover',\n strips: 'p:strips',\n blinds: 'p:blinds',\n checker: 'p:checker',\n dissolve: 'p:dissolve',\n comb: 'p:comb',\n newsflash: 'p:newsflash',\n randomBars: 'p:randomBar',\n circle: 'p:circle',\n diamond: 'p:diamond',\n plus: 'p:plus',\n wedge: 'p:wedge',\n wheel: 'p:wheel',\n zoom: 'p:zoom',\n cut: 'p:cut',\n random: 'p:random',\n };\n\n const elName = transMap[type];\n if (elName && type !== 'none') {\n const dirAttrs: Record<string, string> = {};\n if (t.direction) dirAttrs.dir = t.direction;\n child = tag(elName, Object.keys(dirAttrs).length > 0 ? dirAttrs : undefined);\n }\n\n return tag('p:transition', attrs, child || undefined);\n}\n\nfunction serializeAnimations(animations: Animation[]): string {\n let tnLstXml = '';\n\n for (let i = 0; i < animations.length; i++) {\n const anim = animations[i];\n const dur = anim.duration ?? 500;\n const delay = anim.delay ?? 0;\n const spTgtId = String(anim.elementIndex + 2);\n\n let nodeType: string;\n if (anim.trigger === 'withPrevious') nodeType = 'withEffect';\n else if (anim.trigger === 'afterPrevious') nodeType = 'afterEffect';\n else nodeType = 'clickEffect';\n\n const cTnAttrs: Record<string, string | number> = {\n id: String((i + 1) * 10 + 1),\n dur: String(dur),\n fill: 'hold',\n };\n if (anim.acceleration !== undefined) cTnAttrs.accel = Math.round(anim.acceleration * 1000);\n if (anim.deceleration !== undefined) cTnAttrs.decel = Math.round(anim.deceleration * 1000);\n\n const tgtEl = tag('p:tgtEl', undefined, tag('p:spTgt', { spid: spTgtId }));\n const stCond = tag('p:stCondLst', undefined, tag('p:cond', { delay: String(delay) }));\n\n let animEffect: string;\n if (anim.motionPath) {\n animEffect = tag(\n 'p:animMotion',\n { origin: 'layout', path: anim.motionPath, pathEditMode: 'relative' },\n tag('p:cBhvr', undefined, tag('p:cTn', cTnAttrs, stCond) + tgtEl),\n );\n } else if (anim.effect === 'appear') {\n const setCTn = { ...cTnAttrs, dur: '1' };\n animEffect = tag(\n 'p:set',\n undefined,\n tag('p:cBhvr', undefined, tag('p:cTn', setCTn, stCond) + tgtEl) +\n tag('p:to', undefined, tag('p:strVal', { val: 'visible' })),\n );\n } else {\n animEffect = tag(\n 'p:animEffect',\n { transition: anim.category === 'exit' ? 'out' : 'in', filter: anim.effect },\n tag('p:cBhvr', undefined, tag('p:cTn', cTnAttrs, stCond) + tgtEl),\n );\n }\n\n const childTnXml = tag(\n 'p:par',\n undefined,\n tag(\n 'p:cTn',\n { id: String((i + 1) * 10), fill: 'hold', nodeType },\n tag('p:stCondLst', undefined, tag('p:cond', { delay: '0' })) +\n tag('p:childTnLst', undefined, animEffect),\n ),\n );\n\n tnLstXml += childTnXml;\n }\n\n const mainSeq = tag(\n 'p:seq',\n { concurrent: '1', nextAc: 'seek' },\n tag(\n 'p:cTn',\n { id: '1', dur: 'indefinite', nodeType: 'mainSeq' },\n tag('p:childTnLst', undefined, tnLstXml),\n ) +\n tag(\n 'p:prevCondLst',\n undefined,\n tag('p:cond', { evt: 'onPrev', delay: '0' }, tag('p:tgtEl', undefined, tag('p:sldTgt'))),\n ) +\n tag(\n 'p:nextCondLst',\n undefined,\n tag('p:cond', { evt: 'onNext', delay: '0' }, tag('p:tgtEl', undefined, tag('p:sldTgt'))),\n ),\n );\n\n return tag('p:timing', undefined, tag('p:tnLst', undefined, mainSeq));\n}\n\nexport function serializeSlide(\n elements: IElement[],\n slideIndex: number,\n theme: Theme,\n registry: Registry,\n _layoutRId: string,\n transition?: SlideTransition,\n animations?: Animation[],\n background?: SlideBackground,\n): SlideSerializerResult {\n const relManager = new RelationshipManager();\n const media = new Map<string, Uint8Array>();\n const mediaRels: MediaRel[] = [];\n\n relManager.add(\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout',\n '../slideLayouts/slideLayout1.xml',\n );\n\n const ctx: SerializationContext = {\n addRelationship(type, target, data) {\n const rId = relManager.add(type, target);\n mediaRels.push({ type, target });\n if (data) {\n const fileName = target.split('/').pop() ?? 'file';\n if (target.includes('/charts/')) {\n media.set(`ppt/charts/${fileName}`, data);\n } else {\n media.set(`ppt/media/${fileName}`, data);\n }\n }\n return rId;\n },\n theme,\n slideIndex,\n };\n\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n xml += openTag('p:sld', {\n 'xmlns:a': NAMESPACE.a,\n 'xmlns:r': NAMESPACE.r,\n 'xmlns:p': NAMESPACE.p,\n });\n xml += openTag('p:cSld');\n\n if (background) {\n let bgXml = '';\n if (background.color) {\n bgXml = tag('p:bgPr', undefined, serializeSolidFill(background.color) + tag('a:effectLst'));\n } else if (background.fill) {\n bgXml = tag('p:bgPr', undefined, serializeFill(background.fill, ctx) + tag('a:effectLst'));\n }\n if (bgXml) xml += tag('p:bg', undefined, bgXml);\n }\n\n xml += openTag('p:spTree');\n\n xml += tag(\n 'p:nvGrpSpPr',\n undefined,\n tag('p:cNvPr', { id: '1', name: '' }) + tag('p:cNvGrpSpPr') + tag('p:nvPr'),\n );\n xml += tag(\n 'p:grpSpPr',\n undefined,\n tag(\n 'a:xfrm',\n undefined,\n tag('a:off', { x: '0', y: '0' }) +\n tag('a:ext', { cx: '0', cy: '0' }) +\n tag('a:chOff', { x: '0', y: '0' }) +\n tag('a:chExt', { cx: '0', cy: '0' }),\n ),\n );\n\n for (const el of elements) {\n const serializer = registry.getSerializer(el.type);\n if (!serializer) {\n throw new Error(`No serializer registered for element type: ${el.type}`);\n }\n xml += serializer.serialize(el, ctx);\n }\n\n xml += closeTag('p:spTree');\n xml += closeTag('p:cSld');\n\n if (transition) {\n xml += serializeTransition(transition);\n }\n\n if (animations && animations.length > 0) {\n xml += serializeAnimations(animations);\n }\n\n xml += closeTag('p:sld');\n\n return {\n slideXml: xml,\n relsXml: relManager.toXml(),\n media,\n mediaRels,\n };\n}\n","import { openTag, closeTag, tag } from '../xml.js';\nimport { inchesToEmu } from '../units.js';\nimport { NAMESPACE, DEFAULT_SLIDE_WIDTH, DEFAULT_SLIDE_HEIGHT } from '../constants.js';\n\nexport interface SlideSizeOption {\n width?: number;\n height?: number;\n type?: string;\n}\n\nexport function serializePresentation(\n slideCount: number,\n slideRIds: string[],\n slideSize?: SlideSizeOption,\n): string {\n const sldW = slideSize?.width ?? DEFAULT_SLIDE_WIDTH;\n const sldH = slideSize?.height ?? DEFAULT_SLIDE_HEIGHT;\n const sldType = slideSize?.type ?? 'custom';\n\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n xml += openTag('p:presentation', {\n 'xmlns:a': NAMESPACE.a,\n 'xmlns:r': NAMESPACE.r,\n 'xmlns:p': NAMESPACE.p,\n saveSubsetFonts: '1',\n });\n\n xml += tag(\n 'p:sldMasterIdLst',\n undefined,\n tag('p:sldMasterId', { id: '2147483648', 'r:id': 'rId1' }),\n );\n\n xml += openTag('p:sldIdLst');\n for (let i = 0; i < slideCount; i++) {\n xml += tag('p:sldId', { id: String(256 + i), 'r:id': slideRIds[i] });\n }\n xml += closeTag('p:sldIdLst');\n\n xml += tag('p:sldSz', {\n cx: inchesToEmu(sldW),\n cy: inchesToEmu(sldH),\n type: sldType,\n });\n xml += tag('p:notesSz', {\n cx: inchesToEmu(sldW),\n cy: inchesToEmu(sldH),\n });\n\n xml += closeTag('p:presentation');\n return xml;\n}\n","import type { Theme } from '../../core/types.js';\nimport { tag, openTag, closeTag } from '../xml.js';\nimport { NAMESPACE } from '../constants.js';\nimport { serializeColor } from './color.js';\n\nexport function serializeTheme(theme: Theme): string {\n const c = theme.colors;\n const f = theme.fonts;\n\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n xml += openTag('a:theme', {\n 'xmlns:a': NAMESPACE.a,\n name: theme.name,\n });\n\n xml += openTag('a:themeElements');\n\n // Color scheme\n xml += openTag('a:clrScheme', { name: theme.name });\n const colorEntries: [string, string][] = [\n ['a:dk1', c.dk1],\n ['a:lt1', c.lt1],\n ['a:dk2', c.dk2],\n ['a:lt2', c.lt2],\n ['a:accent1', c.accent1],\n ['a:accent2', c.accent2],\n ['a:accent3', c.accent3],\n ['a:accent4', c.accent4],\n ['a:accent5', c.accent5],\n ['a:accent6', c.accent6],\n ['a:hlink', c.hlink],\n ['a:folHlink', c.folHlink],\n ];\n for (const [tagName, val] of colorEntries) {\n xml += tag(tagName, undefined, serializeColor(val));\n }\n xml += closeTag('a:clrScheme');\n\n // Font scheme\n xml += openTag('a:fontScheme', { name: theme.name });\n xml += tag(\n 'a:majorFont',\n undefined,\n tag('a:latin', { typeface: f.majorFont }) +\n tag('a:ea', { typeface: f.majorEastAsian ?? '' }) +\n tag('a:cs', { typeface: f.majorComplexScript ?? '' }),\n );\n xml += tag(\n 'a:minorFont',\n undefined,\n tag('a:latin', { typeface: f.minorFont }) +\n tag('a:ea', { typeface: f.minorEastAsian ?? '' }) +\n tag('a:cs', { typeface: f.minorComplexScript ?? '' }),\n );\n xml += closeTag('a:fontScheme');\n\n // Format scheme (minimal required)\n xml += openTag('a:fmtScheme', { name: theme.name });\n xml += tag(\n 'a:fillStyleLst',\n undefined,\n tag('a:solidFill', undefined, tag('a:schemeClr', { val: 'phClr' })) +\n tag('a:solidFill', undefined, tag('a:schemeClr', { val: 'phClr' })) +\n tag('a:solidFill', undefined, tag('a:schemeClr', { val: 'phClr' })),\n );\n xml += tag(\n 'a:lnStyleLst',\n undefined,\n tag(\n 'a:ln',\n { w: '6350', cap: 'flat', cmpd: 'sng', algn: 'ctr' },\n tag('a:solidFill', undefined, tag('a:schemeClr', { val: 'phClr' })),\n ) +\n tag(\n 'a:ln',\n { w: '12700', cap: 'flat', cmpd: 'sng', algn: 'ctr' },\n tag('a:solidFill', undefined, tag('a:schemeClr', { val: 'phClr' })),\n ) +\n tag(\n 'a:ln',\n { w: '19050', cap: 'flat', cmpd: 'sng', algn: 'ctr' },\n tag('a:solidFill', undefined, tag('a:schemeClr', { val: 'phClr' })),\n ),\n );\n xml += tag(\n 'a:effectStyleLst',\n undefined,\n tag('a:effectStyle', undefined, tag('a:effectLst')) +\n tag('a:effectStyle', undefined, tag('a:effectLst')) +\n tag('a:effectStyle', undefined, tag('a:effectLst')),\n );\n xml += tag(\n 'a:bgFillStyleLst',\n undefined,\n tag('a:solidFill', undefined, tag('a:schemeClr', { val: 'phClr' })) +\n tag('a:solidFill', undefined, tag('a:schemeClr', { val: 'phClr' })) +\n tag('a:solidFill', undefined, tag('a:schemeClr', { val: 'phClr' })),\n );\n xml += closeTag('a:fmtScheme');\n\n xml += closeTag('a:themeElements');\n xml += tag('a:objectDefaults');\n\n if (theme.extraColorSchemes && theme.extraColorSchemes.length > 0) {\n let extraXml = '';\n for (let i = 0; i < theme.extraColorSchemes.length; i++) {\n const ec = theme.extraColorSchemes[i];\n let schemeXml = '';\n const extraEntries: [string, string][] = [\n ['a:dk1', ec.dk1],\n ['a:lt1', ec.lt1],\n ['a:dk2', ec.dk2],\n ['a:lt2', ec.lt2],\n ['a:accent1', ec.accent1],\n ['a:accent2', ec.accent2],\n ['a:accent3', ec.accent3],\n ['a:accent4', ec.accent4],\n ['a:accent5', ec.accent5],\n ['a:accent6', ec.accent6],\n ['a:hlink', ec.hlink],\n ['a:folHlink', ec.folHlink],\n ];\n for (const [tagName, val] of extraEntries) {\n schemeXml += tag(tagName, undefined, serializeColor(val));\n }\n extraXml += tag(\n 'a:extraClrScheme',\n undefined,\n tag('a:clrScheme', { name: `Extra ${i + 1}` }, schemeXml),\n );\n }\n xml += tag('a:extraClrSchemeLst', undefined, extraXml);\n } else {\n xml += tag('a:extraClrSchemeLst');\n }\n\n xml += closeTag('a:theme');\n\n return xml;\n}\n","import type { SlideMaster } from '../../core/slide-master.js';\nimport { openTag, closeTag, tag } from '../xml.js';\nimport { NAMESPACE } from '../constants.js';\nimport { serializeSolidFill } from './color.js';\n\nexport function serializeSlideMaster(master: SlideMaster, layoutCount: number): string {\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n xml += openTag('p:sldMaster', {\n 'xmlns:a': NAMESPACE.a,\n 'xmlns:r': NAMESPACE.r,\n 'xmlns:p': NAMESPACE.p,\n });\n\n xml += openTag('p:cSld');\n\n // Background\n if (master.background) {\n xml += tag(\n 'p:bg',\n undefined,\n tag('p:bgPr', undefined, serializeSolidFill(master.background) + tag('a:effectLst')),\n );\n } else {\n xml += tag(\n 'p:bg',\n undefined,\n tag('p:bgRef', { idx: '1001' }, tag('a:schemeClr', { val: 'bg1' })),\n );\n }\n\n xml += openTag('p:spTree');\n xml += tag(\n 'p:nvGrpSpPr',\n undefined,\n tag('p:cNvPr', { id: '1', name: '' }) + tag('p:cNvGrpSpPr') + tag('p:nvPr'),\n );\n xml += tag(\n 'p:grpSpPr',\n undefined,\n tag(\n 'a:xfrm',\n undefined,\n tag('a:off', { x: '0', y: '0' }) +\n tag('a:ext', { cx: '0', cy: '0' }) +\n tag('a:chOff', { x: '0', y: '0' }) +\n tag('a:chExt', { cx: '0', cy: '0' }),\n ),\n );\n xml += closeTag('p:spTree');\n xml += closeTag('p:cSld');\n\n xml += openTag('p:clrMap', {\n bg1: 'lt1',\n tx1: 'dk1',\n bg2: 'lt2',\n tx2: 'dk2',\n accent1: 'accent1',\n accent2: 'accent2',\n accent3: 'accent3',\n accent4: 'accent4',\n accent5: 'accent5',\n accent6: 'accent6',\n hlink: 'hlink',\n folHlink: 'folHlink',\n });\n xml += closeTag('p:clrMap');\n\n xml += openTag('p:sldLayoutIdLst');\n for (let i = 0; i < layoutCount; i++) {\n xml += tag('p:sldLayoutId', { id: String(2147483649 + i), 'r:id': `rId${i + 1}` });\n }\n xml += closeTag('p:sldLayoutIdLst');\n\n xml += closeTag('p:sldMaster');\n return xml;\n}\n","import type { SlideLayout } from '../../core/slide-layout.js';\nimport { openTag, closeTag, tag } from '../xml.js';\nimport { inchesToEmu } from '../units.js';\nimport { NAMESPACE } from '../constants.js';\n\nexport function serializeSlideLayout(layout: SlideLayout): string {\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n xml += openTag('p:sldLayout', {\n 'xmlns:a': NAMESPACE.a,\n 'xmlns:r': NAMESPACE.r,\n 'xmlns:p': NAMESPACE.p,\n type: layout.type === 'title' ? 'title' : layout.type === 'blank' ? 'blank' : 'obj',\n preserve: '1',\n });\n\n xml += openTag('p:cSld', { name: layout.name });\n xml += openTag('p:spTree');\n\n xml += tag(\n 'p:nvGrpSpPr',\n undefined,\n tag('p:cNvPr', { id: '1', name: '' }) + tag('p:cNvGrpSpPr') + tag('p:nvPr'),\n );\n xml += tag(\n 'p:grpSpPr',\n undefined,\n tag(\n 'a:xfrm',\n undefined,\n tag('a:off', { x: '0', y: '0' }) +\n tag('a:ext', { cx: '0', cy: '0' }) +\n tag('a:chOff', { x: '0', y: '0' }) +\n tag('a:chExt', { cx: '0', cy: '0' }),\n ),\n );\n\n // Placeholders\n let spId = 2;\n for (const ph of layout.placeholders) {\n const p = ph.placement;\n xml += openTag('p:sp');\n xml += tag(\n 'p:nvSpPr',\n undefined,\n tag('p:cNvPr', { id: String(spId), name: `${ph.type} ${ph.idx ?? spId}` }) +\n tag('p:cNvSpPr', undefined, tag('a:spLocks', { noGrp: '1' })) +\n tag(\n 'p:nvPr',\n undefined,\n tag('p:ph', {\n type: ph.type,\n ...(ph.idx !== undefined ? { idx: String(ph.idx) } : {}),\n }),\n ),\n );\n xml += tag(\n 'p:spPr',\n undefined,\n tag(\n 'a:xfrm',\n undefined,\n tag('a:off', { x: inchesToEmu(p.x), y: inchesToEmu(p.y) }) +\n tag('a:ext', { cx: inchesToEmu(p.w), cy: inchesToEmu(p.h) }),\n ),\n );\n xml += closeTag('p:sp');\n spId++;\n }\n\n xml += closeTag('p:spTree');\n xml += closeTag('p:cSld');\n xml += closeTag('p:sldLayout');\n return xml;\n}\n","import { tag } from '../ooxml/xml.js';\n\nexport class ContentTypesBuilder {\n private defaults = new Map<string, string>();\n private overrides = new Map<string, string>();\n\n addDefault(extension: string, contentType: string): void {\n this.defaults.set(extension, contentType);\n }\n\n addOverride(partName: string, contentType: string): void {\n this.overrides.set(partName, contentType);\n }\n\n toXml(): string {\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n xml += '<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">';\n for (const [ext, ct] of this.defaults) {\n xml += tag('Default', { Extension: ext, ContentType: ct });\n }\n for (const [pn, ct] of this.overrides) {\n xml += tag('Override', { PartName: pn, ContentType: ct });\n }\n xml += '</Types>';\n return xml;\n }\n}\n","import { ContentTypesBuilder } from '../../core/content-types.js';\nimport { CONTENT_TYPE } from '../constants.js';\n\nexport interface ContentTypesCounts {\n slideCount: number;\n imageExtensions: Set<string>;\n chartCount: number;\n notesCount: number;\n layoutCount: number;\n hasNotesMaster?: boolean;\n hasHandoutMaster?: boolean;\n commentCount?: number;\n hasCommentAuthors?: boolean;\n tagCount?: number;\n syncDataCount?: number;\n}\n\nexport function buildContentTypes(opts: ContentTypesCounts): string {\n const { slideCount, imageExtensions, chartCount, notesCount, layoutCount } = opts;\n const ct = new ContentTypesBuilder();\n\n ct.addDefault('rels', CONTENT_TYPE.rels);\n ct.addDefault('xml', 'application/xml');\n\n for (const ext of imageExtensions) {\n const map: Record<string, string> = {\n png: CONTENT_TYPE.png,\n jpeg: CONTENT_TYPE.jpeg,\n jpg: CONTENT_TYPE.jpeg,\n gif: CONTENT_TYPE.gif,\n svg: CONTENT_TYPE.svg,\n };\n if (map[ext]) ct.addDefault(ext, map[ext]);\n }\n\n ct.addOverride('/ppt/presentation.xml', CONTENT_TYPE.presentation);\n ct.addOverride('/ppt/theme/theme1.xml', CONTENT_TYPE.theme);\n ct.addOverride('/ppt/slideMasters/slideMaster1.xml', CONTENT_TYPE.slideMaster);\n ct.addOverride('/ppt/presProps.xml', CONTENT_TYPE.presProps);\n ct.addOverride('/ppt/viewProps.xml', CONTENT_TYPE.viewProps);\n\n for (let i = 1; i <= layoutCount; i++) {\n ct.addOverride(`/ppt/slideLayouts/slideLayout${i}.xml`, CONTENT_TYPE.slideLayout);\n }\n\n for (let i = 1; i <= slideCount; i++) {\n ct.addOverride(`/ppt/slides/slide${i}.xml`, CONTENT_TYPE.slide);\n }\n\n for (let i = 1; i <= chartCount; i++) {\n ct.addOverride(\n `/ppt/charts/chart${i}.xml`,\n 'application/vnd.openxmlformats-officedocument.drawingml.chart+xml',\n );\n }\n\n for (let i = 1; i <= notesCount; i++) {\n ct.addOverride(`/ppt/notesSlides/notesSlide${i}.xml`, CONTENT_TYPE.notesSlide);\n }\n\n if (opts.hasNotesMaster) {\n ct.addOverride('/ppt/notesMasters/notesMaster1.xml', CONTENT_TYPE.notesMaster);\n }\n\n if (opts.hasHandoutMaster) {\n ct.addOverride('/ppt/handoutMasters/handoutMaster1.xml', CONTENT_TYPE.handoutMaster);\n }\n\n if (opts.hasCommentAuthors) {\n ct.addOverride('/ppt/commentAuthors.xml', CONTENT_TYPE.commentAuthors);\n }\n\n const commentCount = opts.commentCount ?? 0;\n for (let i = 1; i <= commentCount; i++) {\n ct.addOverride(`/ppt/comments/comment${i}.xml`, CONTENT_TYPE.comments);\n }\n\n const tagCount = opts.tagCount ?? 0;\n for (let i = 1; i <= tagCount; i++) {\n ct.addOverride(`/ppt/tags/tag${i}.xml`, CONTENT_TYPE.tags);\n }\n\n const syncDataCount = opts.syncDataCount ?? 0;\n for (let i = 1; i <= syncDataCount; i++) {\n ct.addOverride(`/ppt/slideUpdateInfo/slideUpdateInfo${i}.xml`, CONTENT_TYPE.slideUpdateInfo);\n }\n\n return ct.toXml();\n}\n","import { openTag, closeTag, tag, escapeXml } from '../xml.js';\nimport { NAMESPACE } from '../constants.js';\n\nexport function serializeNotesSlide(notes: string): string {\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n xml += openTag('p:notes', {\n 'xmlns:a': NAMESPACE.a,\n 'xmlns:r': NAMESPACE.r,\n 'xmlns:p': NAMESPACE.p,\n });\n\n xml += openTag('p:cSld');\n xml += openTag('p:spTree');\n\n xml += tag(\n 'p:nvGrpSpPr',\n undefined,\n tag('p:cNvPr', { id: '1', name: '' }) + tag('p:cNvGrpSpPr') + tag('p:nvPr'),\n );\n xml += tag(\n 'p:grpSpPr',\n undefined,\n tag(\n 'a:xfrm',\n undefined,\n tag('a:off', { x: '0', y: '0' }) +\n tag('a:ext', { cx: '0', cy: '0' }) +\n tag('a:chOff', { x: '0', y: '0' }) +\n tag('a:chExt', { cx: '0', cy: '0' }),\n ),\n );\n\n // Slide image placeholder\n xml += openTag('p:sp');\n xml += tag(\n 'p:nvSpPr',\n undefined,\n tag('p:cNvPr', { id: '2', name: 'Slide Image Placeholder' }) +\n tag(\n 'p:cNvSpPr',\n undefined,\n tag('a:spLocks', { noGrp: '1', noRot: '1', noChangeAspect: '1' }),\n ) +\n tag('p:nvPr', undefined, tag('p:ph', { type: 'sldImg' })),\n );\n xml += tag('p:spPr');\n xml += closeTag('p:sp');\n\n // Notes text body\n xml += openTag('p:sp');\n xml += tag(\n 'p:nvSpPr',\n undefined,\n tag('p:cNvPr', { id: '3', name: 'Notes Placeholder' }) +\n tag('p:cNvSpPr', undefined, tag('a:spLocks', { noGrp: '1' })) +\n tag('p:nvPr', undefined, tag('p:ph', { type: 'body', idx: '1' })),\n );\n xml += tag('p:spPr');\n xml += openTag('p:txBody');\n xml += tag('a:bodyPr');\n xml += tag('a:lstStyle');\n\n const lines = notes.split('\\n');\n for (const line of lines) {\n xml += tag(\n 'a:p',\n undefined,\n tag(\n 'a:r',\n undefined,\n tag('a:rPr', { lang: 'en-US' }) + tag('a:t', undefined, escapeXml(line)),\n ),\n );\n }\n\n xml += closeTag('p:txBody');\n xml += closeTag('p:sp');\n\n xml += closeTag('p:spTree');\n xml += closeTag('p:cSld');\n xml += closeTag('p:notes');\n\n return xml;\n}\n","import { openTag, closeTag, tag } from '../xml.js';\nimport { NAMESPACE } from '../constants.js';\nimport type { PresentationProperties } from '../../core/types.js';\n\nexport function serializePresProps(props?: PresentationProperties): string {\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n xml += openTag('p:presentationPr', {\n 'xmlns:a': NAMESPACE.a,\n 'xmlns:r': NAMESPACE.r,\n 'xmlns:p': NAMESPACE.p,\n });\n\n if (props?.slideShow) {\n const s = props.slideShow;\n const attrs: Record<string, string> = {};\n if (s.loop != null) attrs.loop = s.loop ? '1' : '0';\n if (s.showNarration != null) attrs.showNarration = s.showNarration ? '1' : '0';\n if (s.showAnimation != null) attrs.showAnimation = s.showAnimation ? '1' : '0';\n if (s.useTimings != null) attrs.useTimings = s.useTimings ? '1' : '0';\n xml += tag('p:showPr', attrs);\n }\n\n if (props?.print) {\n const p = props.print;\n const attrs: Record<string, string> = {};\n if (p.frameSlides != null) attrs.frameSlides = p.frameSlides ? '1' : '0';\n if (p.hiddenSlides != null) attrs.prnWhat = p.hiddenSlides ? 'slides' : 'slides';\n xml += tag('p:prnPr', attrs);\n }\n\n xml += closeTag('p:presentationPr');\n return xml;\n}\n","import { openTag, closeTag } from '../xml.js';\nimport { NAMESPACE } from '../constants.js';\nimport type { ViewProperties } from '../../core/types.js';\n\nexport function serializeViewProps(props?: ViewProperties): string {\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n\n const attrs: Record<string, string> = {\n 'xmlns:a': NAMESPACE.a,\n 'xmlns:r': NAMESPACE.r,\n 'xmlns:p': NAMESPACE.p,\n };\n if (props?.lastView) {\n attrs.lastView = props.lastView;\n }\n\n xml += openTag('p:viewPr', attrs);\n xml += closeTag('p:viewPr');\n return xml;\n}\n","import { openTag, closeTag, tag } from '../xml.js';\nimport { NAMESPACE } from '../constants.js';\n\nexport function serializeNotesMaster(): string {\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n xml += openTag('p:notesMaster', {\n 'xmlns:a': NAMESPACE.a,\n 'xmlns:r': NAMESPACE.r,\n 'xmlns:p': NAMESPACE.p,\n });\n\n xml += openTag('p:cSld');\n xml += openTag('p:spTree');\n xml += tag(\n 'p:nvGrpSpPr',\n undefined,\n tag('p:cNvPr', { id: '1', name: '' }) + tag('p:cNvGrpSpPr') + tag('p:nvPr'),\n );\n xml += tag(\n 'p:grpSpPr',\n undefined,\n tag(\n 'a:xfrm',\n undefined,\n tag('a:off', { x: '0', y: '0' }) +\n tag('a:ext', { cx: '0', cy: '0' }) +\n tag('a:chOff', { x: '0', y: '0' }) +\n tag('a:chExt', { cx: '0', cy: '0' }),\n ),\n );\n xml += closeTag('p:spTree');\n xml += closeTag('p:cSld');\n\n xml += tag('p:clrMap', {\n bg1: 'lt1',\n tx1: 'dk1',\n bg2: 'lt2',\n tx2: 'dk2',\n accent1: 'accent1',\n accent2: 'accent2',\n accent3: 'accent3',\n accent4: 'accent4',\n accent5: 'accent5',\n accent6: 'accent6',\n hlink: 'hlink',\n folHlink: 'folHlink',\n });\n\n xml += closeTag('p:notesMaster');\n return xml;\n}\n","import { openTag, closeTag, tag } from '../xml.js';\nimport { NAMESPACE } from '../constants.js';\nimport type { CommentAuthor } from '../../core/types.js';\n\nexport function serializeCommentAuthors(authors: CommentAuthor[]): string {\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n xml += openTag('p:cmAuthorLst', {\n 'xmlns:a': NAMESPACE.a,\n 'xmlns:r': NAMESPACE.r,\n 'xmlns:p': NAMESPACE.p,\n });\n\n for (const author of authors) {\n xml += tag('p:cmAuthor', {\n id: String(author.id),\n name: author.name,\n initials: author.initials,\n lastIdx: String(author.lastIdx),\n clrIdx: String(author.clrIdx),\n });\n }\n\n xml += closeTag('p:cmAuthorLst');\n return xml;\n}\n","import { openTag, closeTag, tag } from '../xml.js';\nimport { NAMESPACE } from '../constants.js';\nimport { inchesToEmu } from '../units.js';\nimport type { SlideComment } from '../../core/types.js';\n\nexport function serializeComments(comments: SlideComment[]): string {\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n xml += openTag('p:cmLst', {\n 'xmlns:a': NAMESPACE.a,\n 'xmlns:r': NAMESPACE.r,\n 'xmlns:p': NAMESPACE.p,\n });\n\n for (const comment of comments) {\n const attrs: Record<string, string> = {\n authorId: String(comment.authorId),\n idx: String(comment.index ?? 1),\n };\n if (comment.date) {\n attrs.dt = comment.date;\n }\n\n let body = '';\n if (comment.position) {\n body += tag('p:pos', {\n x: String(inchesToEmu(comment.position.x)),\n y: String(inchesToEmu(comment.position.y)),\n });\n } else {\n body += tag('p:pos', { x: '0', y: '0' });\n }\n body += tag('p:text', undefined, comment.text);\n\n xml += tag('p:cm', attrs, body);\n }\n\n xml += closeTag('p:cmLst');\n return xml;\n}\n","import { openTag, closeTag, tag } from '../xml.js';\nimport { NAMESPACE } from '../constants.js';\n\nexport function serializeHandoutMaster(): string {\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n xml += openTag('p:handoutMaster', {\n 'xmlns:a': NAMESPACE.a,\n 'xmlns:r': NAMESPACE.r,\n 'xmlns:p': NAMESPACE.p,\n });\n\n xml += openTag('p:cSld');\n xml += openTag('p:spTree');\n xml += tag(\n 'p:nvGrpSpPr',\n undefined,\n tag('p:cNvPr', { id: '1', name: '' }) + tag('p:cNvGrpSpPr') + tag('p:nvPr'),\n );\n xml += tag(\n 'p:grpSpPr',\n undefined,\n tag(\n 'a:xfrm',\n undefined,\n tag('a:off', { x: '0', y: '0' }) +\n tag('a:ext', { cx: '0', cy: '0' }) +\n tag('a:chOff', { x: '0', y: '0' }) +\n tag('a:chExt', { cx: '0', cy: '0' }),\n ),\n );\n xml += closeTag('p:spTree');\n xml += closeTag('p:cSld');\n\n xml += tag('p:clrMap', {\n bg1: 'lt1',\n tx1: 'dk1',\n bg2: 'lt2',\n tx2: 'dk2',\n accent1: 'accent1',\n accent2: 'accent2',\n accent3: 'accent3',\n accent4: 'accent4',\n accent5: 'accent5',\n accent6: 'accent6',\n hlink: 'hlink',\n folHlink: 'folHlink',\n });\n\n xml += closeTag('p:handoutMaster');\n return xml;\n}\n","import { openTag, closeTag, tag } from '../xml.js';\nimport { NAMESPACE } from '../constants.js';\nimport type { UserDefinedTag } from '../../core/types.js';\n\nexport function serializeTags(tags: UserDefinedTag[]): string {\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n xml += openTag('p:tagLst', {\n 'xmlns:a': NAMESPACE.a,\n 'xmlns:r': NAMESPACE.r,\n 'xmlns:p': NAMESPACE.p,\n });\n\n for (const t of tags) {\n xml += tag('p:tag', { name: t.name, val: t.value });\n }\n\n xml += closeTag('p:tagLst');\n return xml;\n}\n","import { openTag, closeTag } from '../xml.js';\nimport { NAMESPACE } from '../constants.js';\nimport type { SlideSyncData } from '../../core/types.js';\n\nexport function serializeSlideUpdateInfo(data: SlideSyncData): string {\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n xml += openTag('p:sldSyncPr', {\n 'xmlns:a': NAMESPACE.a,\n 'xmlns:r': NAMESPACE.r,\n 'xmlns:p': NAMESPACE.p,\n serverSldId: data.serverSldId,\n serverSldModifiedTime: data.serverSldModifiedTime,\n clientInsertedTime: data.clientInsertedTime,\n });\n xml += closeTag('p:sldSyncPr');\n return xml;\n}\n","import { tag, openTag, closeTag } from '../xml.js';\n\nexport interface CorePropertiesInput {\n title?: string;\n creator?: string;\n subject?: string;\n description?: string;\n keywords?: string;\n category?: string;\n}\n\nexport function serializeCoreProperties(props: CorePropertiesInput): string {\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n xml += openTag('cp:coreProperties', {\n 'xmlns:cp': 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties',\n 'xmlns:dc': 'http://purl.org/dc/elements/1.1/',\n 'xmlns:dcterms': 'http://purl.org/dc/terms/',\n 'xmlns:dcmitype': 'http://purl.org/dc/dcmitype/',\n 'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n });\n if (props.title) xml += tag('dc:title', undefined, props.title);\n if (props.creator) xml += tag('dc:creator', undefined, props.creator);\n if (props.subject) xml += tag('dc:subject', undefined, props.subject);\n if (props.description) xml += tag('dc:description', undefined, props.description);\n if (props.keywords) xml += tag('cp:keywords', undefined, props.keywords);\n if (props.category) xml += tag('cp:category', undefined, props.category);\n xml += closeTag('cp:coreProperties');\n return xml;\n}\n","import type { ElementType, IElement, Placement } from '../core/types.js';\n\n/** Abstract base class for all slide elements. */\nexport abstract class BaseElement implements IElement {\n /** Discriminator indicating the concrete element kind. */\n abstract readonly type: ElementType;\n /** Position and size of the element on the slide. */\n placement: Placement;\n /** Optional human-readable name for the element. */\n name?: string;\n\n constructor(placement: Placement, name?: string) {\n this.placement = placement;\n this.name = name;\n }\n}\n","import type {\n Placement,\n TextRunOptions,\n ParagraphOptions,\n TextBodyOptions,\n Fill,\n LineProperties,\n EffectProperties,\n TransformProperties,\n Scene3DProperties,\n Shape3DProperties,\n} from '../core/types.js';\nimport { BaseElement } from './base.js';\n\n/** A single run of text with optional formatting. */\nexport interface TextRun {\n /** The text content of this run. */\n text: string;\n /** Optional formatting applied to this run (font, size, color, etc.). */\n options?: TextRunOptions;\n}\n\n/** A paragraph composed of one or more text runs. */\nexport interface TextParagraph {\n /** Ordered text runs that make up the paragraph. */\n runs: TextRun[];\n /** Optional paragraph-level formatting (alignment, spacing, etc.). */\n options?: ParagraphOptions;\n}\n\n/** A text box element containing one or more paragraphs. */\nexport class TextElement extends BaseElement {\n /** Element type discriminator. */\n readonly type = 'text' as const;\n /** Paragraphs that make up the text content. */\n paragraphs: TextParagraph[];\n /** Options controlling the text body (margins, wrapping, auto-fit, etc.). */\n bodyOptions?: TextBodyOptions;\n /** Background fill for the text box. */\n fill?: Fill;\n /** Outline/border properties for the text box. */\n line?: LineProperties;\n /** Visual effects (shadow, glow, etc.). */\n effects?: EffectProperties;\n /** 2-D transform (rotation, flip). */\n transform?: TransformProperties;\n /** 3D scene (camera + lighting). */\n scene3d?: Scene3DProperties;\n /** 3D shape (extrusion, bevels, material). */\n shape3d?: Shape3DProperties;\n\n constructor(\n paragraphs: TextParagraph[],\n placement: Placement,\n name?: string,\n opts?: {\n bodyOptions?: TextBodyOptions;\n fill?: Fill;\n line?: LineProperties;\n effects?: EffectProperties;\n transform?: TransformProperties;\n scene3d?: Scene3DProperties;\n shape3d?: Shape3DProperties;\n },\n ) {\n super(placement, name);\n this.paragraphs = paragraphs;\n this.bodyOptions = opts?.bodyOptions;\n this.fill = opts?.fill;\n this.line = opts?.line;\n this.effects = opts?.effects;\n this.transform = opts?.transform;\n this.scene3d = opts?.scene3d;\n this.shape3d = opts?.shape3d;\n }\n\n /**\n * Creates a TextElement from a plain string, splitting on newlines into paragraphs.\n * @param text - Plain text content (newlines become paragraph breaks).\n * @param placement - Position and size on the slide.\n * @param runOptions - Optional formatting for all text runs.\n * @param paraOptions - Optional paragraph-level formatting.\n * @param bodyOptions - Optional text body options.\n * @returns A new TextElement instance.\n */\n static fromString(\n text: string,\n placement: Placement,\n runOptions?: TextRunOptions,\n paraOptions?: ParagraphOptions,\n bodyOptions?: TextBodyOptions,\n ): TextElement {\n const lines = text.split('\\n');\n const paragraphs: TextParagraph[] = lines.map((line) => ({\n runs: [{ text: line, options: runOptions }],\n options: paraOptions,\n }));\n return new TextElement(paragraphs, placement, undefined, { bodyOptions });\n }\n}\n","import type {\n Placement,\n LineProperties,\n EffectProperties,\n TransformProperties,\n HyperlinkProperties,\n Scene3DProperties,\n Shape3DProperties,\n Color,\n PresetGeometry,\n} from '../core/types.js';\nimport { BaseElement } from './base.js';\n\n/** An image element placed on a slide. */\nexport class ImageElement extends BaseElement {\n /** Element type discriminator. */\n readonly type = 'image' as const;\n /** File system path to the image (mutually exclusive with `data`). */\n path?: string;\n /** Raw image bytes (mutually exclusive with `path`). */\n data?: Uint8Array;\n /** MIME type of the image (defaults to 'image/png'). */\n contentType: string;\n /** Border/outline properties for the image. */\n border?: LineProperties;\n /** Visual effects (shadow, glow, etc.). */\n effects?: EffectProperties;\n /** 2-D transform (rotation, flip). */\n transform?: TransformProperties;\n /** Image opacity, 0-100. */\n opacity?: number;\n /** Crop offsets as fractions (0-1) from each edge. */\n crop?: { top?: number; bottom?: number; left?: number; right?: number };\n /** Hyperlink attached to the image. */\n hyperlink?: HyperlinkProperties;\n /** Whether to lock the aspect ratio when resizing. */\n lockAspectRatio?: boolean;\n /** 3D scene (camera + lighting). */\n scene3d?: Scene3DProperties;\n /** 3D shape (extrusion, bevels, material). */\n shape3d?: Shape3DProperties;\n brightness?: number;\n contrast?: number;\n saturation?: number;\n duotone?: { color1: Color; color2: Color };\n cropShape?: PresetGeometry;\n\n constructor(\n placement: Placement,\n opts: {\n path?: string;\n data?: Uint8Array;\n contentType?: string;\n border?: LineProperties;\n effects?: EffectProperties;\n transform?: TransformProperties;\n opacity?: number;\n crop?: { top?: number; bottom?: number; left?: number; right?: number };\n hyperlink?: HyperlinkProperties;\n lockAspectRatio?: boolean;\n scene3d?: Scene3DProperties;\n shape3d?: Shape3DProperties;\n brightness?: number;\n contrast?: number;\n saturation?: number;\n duotone?: { color1: Color; color2: Color };\n cropShape?: PresetGeometry;\n },\n ) {\n super(placement);\n this.path = opts.path;\n this.data = opts.data;\n this.contentType = opts.contentType ?? 'image/png';\n this.border = opts.border;\n this.effects = opts.effects;\n this.transform = opts.transform;\n this.opacity = opts.opacity;\n this.crop = opts.crop;\n this.hyperlink = opts.hyperlink;\n this.lockAspectRatio = opts.lockAspectRatio;\n this.scene3d = opts.scene3d;\n this.shape3d = opts.shape3d;\n this.brightness = opts.brightness;\n this.contrast = opts.contrast;\n this.saturation = opts.saturation;\n this.duotone = opts.duotone;\n this.cropShape = opts.cropShape;\n }\n}\n","import type {\n Placement,\n PresetGeometry,\n Fill,\n LineProperties,\n EffectProperties,\n TransformProperties,\n HyperlinkProperties,\n ShapeTextOptions,\n TextRunOptions,\n ParagraphOptions,\n Scene3DProperties,\n Shape3DProperties,\n CustomGeometry,\n ShapeLocks,\n} from '../core/types.js';\nimport { BaseElement } from './base.js';\n\n/** An auto-shape element (rectangle, ellipse, arrow, etc.). */\nexport class ShapeElement extends BaseElement {\n /** Element type discriminator. */\n readonly type = 'shape' as const;\n /** Preset geometry type (e.g. 'rect', 'ellipse', 'roundRect'). */\n geometry: PresetGeometry;\n /** Background fill for the shape. */\n fill?: Fill;\n /** Outline/border properties. */\n line?: LineProperties;\n /** Visual effects (shadow, glow, etc.). */\n effects?: EffectProperties;\n /** 2-D transform (rotation, flip). */\n transform?: TransformProperties;\n /** Shape opacity, 0-100. */\n opacity?: number;\n /** Plain text content rendered inside the shape. */\n text?: string;\n /** Text body options for text rendered inside the shape. */\n textOptions?: ShapeTextOptions;\n /** Run-level formatting for the shape's text. */\n textRunOptions?: TextRunOptions;\n /** Paragraph-level formatting for the shape's text. */\n textParagraphOptions?: ParagraphOptions;\n /** Geometry adjustment values keyed by handle name. */\n adjustValues?: Record<string, number>;\n /** Hyperlink attached to the shape. */\n hyperlink?: HyperlinkProperties;\n /** 3D scene (camera + lighting). */\n scene3d?: Scene3DProperties;\n /** 3D shape (extrusion, bevels, material). */\n shape3d?: Shape3DProperties;\n /** Custom geometry (overrides preset). */\n customGeometry?: CustomGeometry;\n /** Shape protection locks. */\n locks?: ShapeLocks;\n\n constructor(\n geometry: PresetGeometry,\n placement: Placement,\n opts?: {\n fill?: Fill;\n line?: LineProperties;\n effects?: EffectProperties;\n transform?: TransformProperties;\n opacity?: number;\n text?: string;\n textOptions?: ShapeTextOptions;\n textRunOptions?: TextRunOptions;\n textParagraphOptions?: ParagraphOptions;\n adjustValues?: Record<string, number>;\n hyperlink?: HyperlinkProperties;\n scene3d?: Scene3DProperties;\n shape3d?: Shape3DProperties;\n customGeometry?: CustomGeometry;\n locks?: ShapeLocks;\n },\n ) {\n super(placement);\n this.geometry = geometry;\n this.fill = opts?.fill;\n this.line = opts?.line;\n this.effects = opts?.effects;\n this.transform = opts?.transform;\n this.opacity = opts?.opacity;\n this.text = opts?.text;\n this.textOptions = opts?.textOptions;\n this.textRunOptions = opts?.textRunOptions;\n this.textParagraphOptions = opts?.textParagraphOptions;\n this.adjustValues = opts?.adjustValues;\n this.hyperlink = opts?.hyperlink;\n this.scene3d = opts?.scene3d;\n this.shape3d = opts?.shape3d;\n this.customGeometry = opts?.customGeometry;\n this.locks = opts?.locks;\n }\n}\n","import type {\n Placement,\n TableRow,\n Fill,\n TableBorderOptions,\n EffectProperties,\n TransformProperties,\n Color,\n} from '../core/types.js';\nimport { BaseElement } from './base.js';\n\n/** A table element with rows, columns, and optional banding. */\nexport class TableElement extends BaseElement {\n /** Element type discriminator. */\n readonly type = 'table' as const;\n /** Row data including cells and per-row options. */\n rows: TableRow[];\n /** Column widths in EMUs. */\n colWidths?: number[];\n /** Row heights in EMUs. */\n rowHeights?: number[];\n /** Border configuration for the table. */\n border?: TableBorderOptions;\n /** Default background fill for cells. */\n fill?: Fill;\n /** Apply special formatting to the first row. */\n firstRow?: boolean;\n /** Apply special formatting to the last row. */\n lastRow?: boolean;\n /** Apply special formatting to the first column. */\n firstCol?: boolean;\n /** Apply special formatting to the last column. */\n lastCol?: boolean;\n /** Enable row banding (alternating row colors). */\n bandRow?: boolean;\n /** Enable column banding (alternating column colors). */\n bandCol?: boolean;\n /** Pair of colors for alternating row bands. */\n bandRowColors?: [Color, Color];\n /** Visual effects (shadow, glow, etc.). */\n effects?: EffectProperties;\n /** 2-D transform (rotation, flip). */\n transform?: TransformProperties;\n /** Built-in table style GUID. */\n tableStyleId?: string;\n\n constructor(\n rows: TableRow[],\n placement: Placement,\n opts?: {\n colWidths?: number[];\n rowHeights?: number[];\n border?: TableBorderOptions;\n fill?: Fill;\n firstRow?: boolean;\n lastRow?: boolean;\n firstCol?: boolean;\n lastCol?: boolean;\n bandRow?: boolean;\n bandCol?: boolean;\n bandRowColors?: [Color, Color];\n effects?: EffectProperties;\n transform?: TransformProperties;\n tableStyleId?: string;\n },\n ) {\n super(placement);\n this.rows = rows;\n this.colWidths = opts?.colWidths;\n this.rowHeights = opts?.rowHeights;\n this.border = opts?.border;\n this.fill = opts?.fill;\n this.firstRow = opts?.firstRow;\n this.lastRow = opts?.lastRow;\n this.firstCol = opts?.firstCol;\n this.lastCol = opts?.lastCol;\n this.bandRow = opts?.bandRow;\n this.bandCol = opts?.bandCol;\n this.bandRowColors = opts?.bandRowColors;\n this.effects = opts?.effects;\n this.transform = opts?.transform;\n this.tableStyleId = opts?.tableStyleId;\n }\n}\n","import type {\n Placement,\n ChartType,\n ChartData,\n AxisOptions,\n LineProperties,\n Color,\n DataLabelOptions,\n} from '../core/types.js';\nimport { BaseElement } from './base.js';\n\n/** A chart element (bar, line, pie, scatter, etc.). */\nexport class ChartElement extends BaseElement {\n /** Element type discriminator. */\n readonly type = 'chart' as const;\n /** The kind of chart to render (e.g. 'bar', 'line', 'pie'). */\n chartType: ChartType;\n /** Series and category data for the chart. */\n data: ChartData;\n /** Optional chart title text. */\n title?: string;\n /** Whether to display the legend (defaults to true). */\n showLegend: boolean;\n /** Whether to show data labels on data points (defaults to false). */\n showDataLabels: boolean;\n /** Whether to display grid lines (defaults to true). */\n showGridLines: boolean;\n /** Font size for the chart title, in points. */\n titleFontSize?: number;\n /** Color for the chart title. */\n titleColor?: Color;\n /** Position of the legend relative to the chart. */\n legendPosition?: 'b' | 't' | 'l' | 'r' | 'tr';\n /** Category (horizontal) axis options. */\n catAxis?: AxisOptions;\n /** Primary value (vertical) axis options. */\n valAxis?: AxisOptions;\n /** Secondary value axis options (for combo charts). */\n secondaryValAxis?: AxisOptions;\n /** Plot area background fill and border. */\n plotArea?: { fill?: Color; border?: LineProperties };\n /** Gap width between bar groups, as a percentage. */\n barGapWidth?: number;\n /** Overlap between bars in a group, as a percentage (-100 to 100). */\n barOverlap?: number;\n /** Grouping mode for bar/column charts. */\n barGrouping?: 'clustered' | 'stacked' | 'percentStacked';\n /** Explosion distance for pie slices, as a percentage. */\n pieExplosion?: number;\n /** Hole size for doughnut charts, as a percentage (0-90). */\n doughnutHoleSize?: number;\n /** Grouping mode for line charts. */\n lineGrouping?: 'standard' | 'stacked' | 'percentStacked';\n /** Grouping mode for area charts. */\n areaGrouping?: 'standard' | 'stacked' | 'percentStacked';\n /** Rendering style for scatter charts. */\n scatterStyle?: 'lineMarker' | 'line' | 'marker' | 'smooth' | 'smoothMarker';\n /** Rendering style for radar charts. */\n radarStyle?: 'standard' | 'marker' | 'filled';\n /** Chart border/outline properties. */\n border?: LineProperties;\n /** Chart background fill color. */\n fill?: Color;\n /** Chart-level data label configuration. */\n dataLabels?: DataLabelOptions;\n /** 3-D view settings for the chart. */\n view3D?: {\n rotX?: number;\n rotY?: number;\n depthPercent?: number;\n rAngAx?: boolean;\n perspective?: number;\n };\n\n constructor(\n chartType: ChartType,\n data: ChartData,\n placement: Placement,\n opts?: {\n title?: string;\n showLegend?: boolean;\n showDataLabels?: boolean;\n showGridLines?: boolean;\n titleFontSize?: number;\n titleColor?: Color;\n legendPosition?: 'b' | 't' | 'l' | 'r' | 'tr';\n catAxis?: AxisOptions;\n valAxis?: AxisOptions;\n secondaryValAxis?: AxisOptions;\n plotArea?: { fill?: Color; border?: LineProperties };\n barGapWidth?: number;\n barOverlap?: number;\n barGrouping?: 'clustered' | 'stacked' | 'percentStacked';\n pieExplosion?: number;\n doughnutHoleSize?: number;\n lineGrouping?: 'standard' | 'stacked' | 'percentStacked';\n areaGrouping?: 'standard' | 'stacked' | 'percentStacked';\n scatterStyle?: 'lineMarker' | 'line' | 'marker' | 'smooth' | 'smoothMarker';\n radarStyle?: 'standard' | 'marker' | 'filled';\n border?: LineProperties;\n fill?: Color;\n dataLabels?: DataLabelOptions;\n view3D?: {\n rotX?: number;\n rotY?: number;\n depthPercent?: number;\n rAngAx?: boolean;\n perspective?: number;\n };\n },\n ) {\n super(placement);\n this.chartType = chartType;\n this.data = data;\n this.title = opts?.title;\n this.showLegend = opts?.showLegend ?? true;\n this.showDataLabels = opts?.showDataLabels ?? false;\n this.showGridLines = opts?.showGridLines ?? true;\n this.titleFontSize = opts?.titleFontSize;\n this.titleColor = opts?.titleColor;\n this.legendPosition = opts?.legendPosition;\n this.catAxis = opts?.catAxis;\n this.valAxis = opts?.valAxis;\n this.secondaryValAxis = opts?.secondaryValAxis;\n this.plotArea = opts?.plotArea;\n this.barGapWidth = opts?.barGapWidth;\n this.barOverlap = opts?.barOverlap;\n this.barGrouping = opts?.barGrouping;\n this.pieExplosion = opts?.pieExplosion;\n this.doughnutHoleSize = opts?.doughnutHoleSize;\n this.lineGrouping = opts?.lineGrouping;\n this.areaGrouping = opts?.areaGrouping;\n this.scatterStyle = opts?.scatterStyle;\n this.radarStyle = opts?.radarStyle;\n this.border = opts?.border;\n this.fill = opts?.fill;\n this.dataLabels = opts?.dataLabels;\n this.view3D = opts?.view3D;\n }\n}\n","import type {\n Placement,\n MediaPlaybackOptions,\n MediaPoster,\n EffectProperties,\n TransformProperties,\n} from '../core/types.js';\nimport { BaseElement } from './base.js';\n\n/** Discriminator for the kind of embedded media. */\nexport type MediaType = 'video' | 'audio';\n\n/** An embedded video or audio media element. */\nexport class MediaElement extends BaseElement {\n /** Element type discriminator. */\n readonly type = 'media' as const;\n /** Whether this is a video or audio element. */\n mediaType: MediaType;\n /** File system path to the media file (mutually exclusive with `data`). */\n path?: string;\n /** Raw media bytes (mutually exclusive with `path`). */\n data?: Uint8Array;\n /** MIME type (defaults to 'video/mp4' or 'audio/mpeg' based on mediaType). */\n contentType: string;\n /** Poster/thumbnail image displayed before playback. */\n poster?: MediaPoster;\n /** Playback settings (autoplay, loop, etc.). */\n playback?: MediaPlaybackOptions;\n /** Visual effects (shadow, glow, etc.). */\n effects?: EffectProperties;\n /** 2-D transform (rotation, flip). */\n transform?: TransformProperties;\n\n constructor(\n mediaType: MediaType,\n placement: Placement,\n opts: {\n path?: string;\n data?: Uint8Array;\n contentType?: string;\n poster?: MediaPoster;\n playback?: MediaPlaybackOptions;\n effects?: EffectProperties;\n transform?: TransformProperties;\n },\n ) {\n super(placement);\n this.mediaType = mediaType;\n this.path = opts.path;\n this.data = opts.data;\n this.contentType = opts.contentType ?? (mediaType === 'video' ? 'video/mp4' : 'audio/mpeg');\n this.poster = opts.poster;\n this.playback = opts.playback;\n this.effects = opts.effects;\n this.transform = opts.transform;\n }\n}\n","import type { Placement, IElement } from '../core/types.js';\nimport { BaseElement } from './base.js';\n\n/** A group element that contains multiple child elements. */\nexport class GroupElement extends BaseElement {\n /** Element type discriminator. */\n readonly type = 'group' as const;\n /** Child elements contained within this group. */\n children: IElement[];\n\n constructor(children: IElement[], placement: Placement, name?: string) {\n super(placement, name);\n this.children = children;\n }\n}\n","import type { Placement, ConnectorType, LineProperties, LineEndProperties } from '../core/types.js';\nimport { BaseElement } from './base.js';\n\n/** A connector line element (straight, elbow, or curved). */\nexport class ConnectorElement extends BaseElement {\n /** Element type discriminator. */\n readonly type = 'connector' as const;\n /** The connector routing style (defaults to 'straight'). */\n connectorType: ConnectorType;\n /** Line formatting (color, width, dash style, etc.). */\n line?: LineProperties;\n /** Arrowhead properties for the start of the connector. */\n startArrow?: LineEndProperties;\n /** Arrowhead properties for the end of the connector. */\n endArrow?: LineEndProperties;\n\n constructor(\n placement: Placement,\n opts?: {\n type?: ConnectorType;\n line?: LineProperties;\n startArrow?: LineEndProperties;\n endArrow?: LineEndProperties;\n },\n ) {\n super(placement);\n this.connectorType = opts?.type ?? 'straight';\n this.line = opts?.line;\n this.startArrow = opts?.startArrow;\n this.endArrow = opts?.endArrow;\n }\n}\n","import type {\n IElement,\n TextOptions,\n ImageOptions,\n ShapeOptions,\n TableOptions,\n TableRow,\n PresetGeometry,\n Placement,\n ChartType,\n ChartData,\n ChartOptions,\n MediaOptions,\n CommentAuthor,\n SlideSyncData,\n SlideTransition,\n Animation,\n GroupOptions,\n ConnectorOptions,\n SlideBackground,\n} from '../core/types.js';\nimport type { SlideData } from '../io/writer.js';\nimport { TextElement } from '../elements/text.js';\nimport { ImageElement } from '../elements/image.js';\nimport { ShapeElement } from '../elements/shape.js';\nimport { TableElement } from '../elements/table.js';\nimport { ChartElement } from '../elements/chart.js';\nimport { MediaElement } from '../elements/media.js';\nimport { GroupElement } from '../elements/group.js';\nimport { ConnectorElement } from '../elements/connector.js';\n\nfunction placementFromOpts(opts: Partial<Placement>): Placement {\n return {\n x: opts.x ?? 0,\n y: opts.y ?? 0,\n w: opts.w ?? 5,\n h: opts.h ?? 1,\n };\n}\n\n/** Builder for adding elements and metadata to a single slide. */\nexport class SlideBuilder {\n private data: SlideData;\n private commentAuthors?: CommentAuthor[];\n\n constructor(data: SlideData, commentAuthors?: CommentAuthor[]) {\n this.data = data;\n this.commentAuthors = commentAuthors;\n }\n\n /** Adds a text box to the slide. Placement dimensions are in inches. */\n addText(text: string, opts: TextOptions = {}): this {\n const placement = placementFromOpts(opts);\n const element = TextElement.fromString(\n text,\n placement,\n {\n bold: opts.bold,\n italic: opts.italic,\n underline: opts.underline,\n strikethrough: opts.strikethrough,\n fontSize: opts.fontSize,\n fontFace: opts.fontFace,\n color: opts.color,\n subscript: opts.subscript,\n superscript: opts.superscript,\n highlight: opts.highlight,\n letterSpacing: opts.letterSpacing,\n baseline: opts.baseline,\n hyperlink: opts.hyperlink,\n outline: opts.outline,\n shadow: opts.shadow,\n caps: opts.caps,\n lang: opts.lang,\n },\n {\n align: opts.align,\n lineSpacing: opts.lineSpacing,\n spaceBefore: opts.spaceBefore,\n spaceAfter: opts.spaceAfter,\n indent: opts.indent,\n marginLeft: opts.marginLeft,\n level: opts.level,\n rtl: opts.rtl,\n bullet: opts.bullet,\n numbering: opts.numbering,\n tabStops: opts.tabStops,\n defaultRunOptions: opts.defaultRunOptions,\n },\n {\n verticalAlign: opts.verticalAlign,\n textDirection: opts.textDirection,\n wordWrap: opts.wordWrap,\n autoFit: opts.autoFit,\n margin: opts.margin,\n columns: opts.columns,\n columnSpacing: opts.columnSpacing,\n },\n );\n if (opts.fill) element.fill = opts.fill;\n if (opts.line) element.line = opts.line;\n if (opts.effects) element.effects = opts.effects;\n if (opts.transform) element.transform = opts.transform;\n if (opts.scene3d) element.scene3d = opts.scene3d;\n if (opts.shape3d) element.shape3d = opts.shape3d;\n this.data.elements.push(element);\n return this;\n }\n\n /** Adds an image to the slide from a file path or binary data. */\n addImage(opts: ImageOptions): this {\n const placement = placementFromOpts(opts);\n const element = new ImageElement(placement, {\n path: opts.path,\n data: opts.data,\n contentType: opts.contentType,\n border: opts.border,\n effects: opts.effects,\n transform: opts.transform,\n opacity: opts.opacity,\n crop: opts.crop,\n hyperlink: opts.hyperlink,\n lockAspectRatio: opts.lockAspectRatio,\n scene3d: opts.scene3d,\n shape3d: opts.shape3d,\n brightness: opts.brightness,\n contrast: opts.contrast,\n saturation: opts.saturation,\n duotone: opts.duotone,\n cropShape: opts.cropShape,\n });\n this.data.elements.push(element);\n return this;\n }\n\n /** Adds a preset geometry shape to the slide. */\n addShape(geometry: PresetGeometry, opts: ShapeOptions = {}): this {\n const placement = placementFromOpts(opts);\n const element = new ShapeElement(geometry, placement, {\n fill: opts.fill,\n line: opts.line,\n effects: opts.effects,\n transform: opts.transform,\n opacity: opts.opacity,\n text: opts.text,\n textOptions: opts.textOptions,\n textRunOptions: opts.textRunOptions,\n textParagraphOptions: opts.textParagraphOptions,\n adjustValues: opts.adjustValues,\n hyperlink: opts.hyperlink,\n scene3d: opts.scene3d,\n shape3d: opts.shape3d,\n customGeometry: opts.customGeometry,\n locks: opts.locks,\n });\n this.data.elements.push(element);\n return this;\n }\n\n /** Adds a table to the slide. */\n addTable(rows: TableRow[], opts: TableOptions = {}): this {\n const placement = placementFromOpts(opts);\n const element = new TableElement(rows, placement, {\n colWidths: opts.colWidths,\n rowHeights: opts.rowHeights,\n border: opts.border,\n fill: opts.fill,\n firstRow: opts.firstRow,\n lastRow: opts.lastRow,\n firstCol: opts.firstCol,\n lastCol: opts.lastCol,\n bandRow: opts.bandRow,\n bandCol: opts.bandCol,\n bandRowColors: opts.bandRowColors,\n effects: opts.effects,\n transform: opts.transform,\n tableStyleId: opts.tableStyleId,\n });\n this.data.elements.push(element);\n return this;\n }\n\n /** Adds a chart to the slide. Defaults to 6x4 inches if width/height are not specified. */\n addChart(type: ChartType, data: ChartData, opts: ChartOptions = {}): this {\n const placement = placementFromOpts({ ...opts, w: opts.w ?? 6, h: opts.h ?? 4 });\n const element = new ChartElement(type, data, placement, {\n title: opts.title,\n showLegend: opts.showLegend,\n showDataLabels: opts.showDataLabels,\n showGridLines: opts.showGridLines,\n titleFontSize: opts.titleFontSize,\n titleColor: opts.titleColor,\n legendPosition: opts.legendPosition,\n catAxis: opts.catAxis,\n valAxis: opts.valAxis,\n secondaryValAxis: opts.secondaryValAxis,\n plotArea: opts.plotArea,\n barGapWidth: opts.barGapWidth,\n barOverlap: opts.barOverlap,\n barGrouping: opts.barGrouping,\n pieExplosion: opts.pieExplosion,\n doughnutHoleSize: opts.doughnutHoleSize,\n lineGrouping: opts.lineGrouping,\n areaGrouping: opts.areaGrouping,\n scatterStyle: opts.scatterStyle,\n radarStyle: opts.radarStyle,\n border: opts.border,\n fill: opts.fill,\n dataLabels: opts.dataLabels,\n view3D: opts.view3D,\n });\n this.data.elements.push(element);\n return this;\n }\n\n /** Sets speaker notes text for this slide. */\n setNotes(notes: string): this {\n this.data.notes = notes;\n return this;\n }\n\n /** Adds a video element to the slide. Defaults to 6x4 inches. */\n addVideo(opts: MediaOptions): this {\n const placement = placementFromOpts({ ...opts, w: opts.w ?? 6, h: opts.h ?? 4 });\n const element = new MediaElement('video', placement, {\n path: opts.path,\n data: opts.data,\n contentType: opts.contentType,\n poster: opts.poster,\n playback: opts.playback,\n effects: opts.effects,\n transform: opts.transform,\n });\n this.data.elements.push(element);\n return this;\n }\n\n /** Adds an audio element to the slide. Defaults to 1x1 inch. */\n addAudio(opts: MediaOptions): this {\n const placement = placementFromOpts({ ...opts, w: opts.w ?? 1, h: opts.h ?? 1 });\n const element = new MediaElement('audio', placement, {\n path: opts.path,\n data: opts.data,\n contentType: opts.contentType,\n poster: opts.poster,\n playback: opts.playback,\n effects: opts.effects,\n transform: opts.transform,\n });\n this.data.elements.push(element);\n return this;\n }\n\n /** Adds a pre-built element directly to the slide. */\n addElement(element: IElement): this {\n this.data.elements.push(element);\n return this;\n }\n\n /**\n * Adds a comment to the slide.\n * @param authorId - ID returned by {@link Presentation.defineCommentAuthor}.\n */\n addComment(\n text: string,\n authorId: number,\n opts?: { position?: { x: number; y: number }; date?: string },\n ): this {\n if (!this.data.comments) this.data.comments = [];\n if (this.commentAuthors) {\n const author = this.commentAuthors.find((a) => a.id === authorId);\n if (author) author.lastIdx++;\n }\n this.data.comments.push({\n authorId,\n text,\n date: opts?.date,\n position: opts?.position,\n index: this.data.comments.length + 1,\n });\n return this;\n }\n\n /** Sets user-defined tags on this slide as key-value pairs. */\n setTags(tags: Record<string, string>): this {\n this.data.tags = Object.entries(tags).map(([name, value]) => ({ name, value }));\n return this;\n }\n\n /** Sets synchronization data for collaborative slide updates. */\n setSyncData(data: SlideSyncData): this {\n this.data.syncData = data;\n return this;\n }\n\n /** Sets the transition effect for this slide. */\n setTransition(transition: SlideTransition): this {\n this.data.transition = transition;\n return this;\n }\n\n /** Adds an animation to the slide's animation sequence. */\n addAnimation(anim: Animation): this {\n if (!this.data.animations) this.data.animations = [];\n this.data.animations.push(anim);\n return this;\n }\n\n /** Sets the background fill or image for this slide. */\n setBackground(bg: SlideBackground): this {\n this.data.background = bg;\n return this;\n }\n\n /**\n * Adds a group of elements that are positioned and transformed together.\n * @param buildFn - Callback receiving a {@link GroupBuilder} to populate the group.\n */\n addGroup(buildFn: (group: GroupBuilder) => void, opts: GroupOptions = {}): this {\n const placement = placementFromOpts(opts);\n const children: IElement[] = [];\n const groupBuilder = new GroupBuilder(children);\n buildFn(groupBuilder);\n const element = new GroupElement(children, placement);\n this.data.elements.push(element);\n return this;\n }\n\n /** Adds a connector line between points on the slide. */\n addConnector(opts: ConnectorOptions): this {\n const placement = placementFromOpts(opts);\n const element = new ConnectorElement(placement, {\n type: opts.type,\n line: opts.line,\n startArrow: opts.startArrow,\n endArrow: opts.endArrow,\n });\n this.data.elements.push(element);\n return this;\n }\n}\n\n/** Builder for adding child elements within a group. */\nclass GroupBuilder {\n private children: IElement[];\n\n constructor(children: IElement[]) {\n this.children = children;\n }\n\n /** Adds a shape to the group. */\n addShape(geometry: PresetGeometry, opts: ShapeOptions = {}): this {\n const placement = placementFromOpts(opts);\n this.children.push(\n new ShapeElement(geometry, placement, {\n fill: opts.fill,\n line: opts.line,\n effects: opts.effects,\n transform: opts.transform,\n text: opts.text,\n textOptions: opts.textOptions,\n textRunOptions: opts.textRunOptions,\n textParagraphOptions: opts.textParagraphOptions,\n adjustValues: opts.adjustValues,\n hyperlink: opts.hyperlink,\n }),\n );\n return this;\n }\n\n /** Adds a text box to the group. */\n addText(text: string, opts: TextOptions = {}): this {\n const placement = placementFromOpts(opts);\n this.children.push(\n TextElement.fromString(\n text,\n placement,\n {\n bold: opts.bold,\n italic: opts.italic,\n underline: opts.underline,\n fontSize: opts.fontSize,\n fontFace: opts.fontFace,\n color: opts.color,\n },\n { align: opts.align },\n ),\n );\n return this;\n }\n\n /** Adds an image to the group. */\n addImage(opts: ImageOptions): this {\n const placement = placementFromOpts(opts);\n this.children.push(\n new ImageElement(placement, {\n path: opts.path,\n data: opts.data,\n contentType: opts.contentType,\n }),\n );\n return this;\n }\n\n /** Adds a pre-built element directly to the group. */\n addElement(element: IElement): this {\n this.children.push(element);\n return this;\n }\n}\n","import type {\n Inches,\n IPlugin,\n Theme,\n PresentationProperties,\n ViewProperties,\n SlideShowProperties,\n PrintProperties,\n CommentAuthor,\n UserDefinedTag,\n} from '../core/types.js';\nimport { Registry } from '../core/registry.js';\nimport { defaultTheme } from '../core/theme.js';\nimport { SlideMaster, type SlideMasterDef } from '../core/slide-master.js';\nimport { SlideLayout, type SlideLayoutDef, builtinLayouts } from '../core/slide-layout.js';\nimport { NotesMaster, type NotesMasterDef } from '../core/notes-master.js';\nimport { HandoutMaster, type HandoutMasterDef } from '../core/handout-master.js';\nimport { textSerializer } from '../ooxml/serializers/text.js';\nimport { imageSerializer } from '../ooxml/serializers/image.js';\nimport { shapeSerializer } from '../ooxml/serializers/shape.js';\nimport { tableSerializer } from '../ooxml/serializers/table.js';\nimport { chartSerializer } from '../ooxml/serializers/chart.js';\nimport { mediaSerializer } from '../ooxml/serializers/media.js';\nimport { createGroupSerializer } from '../ooxml/serializers/group.js';\nimport { connectorSerializer } from '../ooxml/serializers/connector.js';\nimport { writePresentation, type SlideData } from '../io/writer.js';\nimport { SlideBuilder } from './slide-builder.js';\n\n/** Options for creating a new presentation. */\nexport interface PresentationOptions {\n /** Custom theme overrides for colors and fonts. */\n theme?: Partial<Theme>;\n /** URI for HTML publish output. */\n htmlPublishUri?: string;\n /** URL for slide update synchronization. */\n slideUpdateUrl?: string;\n /** Custom slide size (default: standard widescreen 10x7.5). */\n slideSize?: { width: Inches; height: Inches; type?: string };\n /** Default language for text runs (e.g. 'en-US'). */\n defaultLang?: string;\n /** Core document properties (Dublin Core metadata). */\n coreProperties?: {\n title?: string;\n creator?: string;\n subject?: string;\n description?: string;\n keywords?: string;\n category?: string;\n };\n}\n\n/** Builder for constructing PPTX presentations. */\nexport class Presentation {\n private slides: SlideData[] = [];\n private registry: Registry;\n private theme: Theme;\n private masters: SlideMaster[];\n private layouts: SlideLayout[];\n private layoutNameMap = new Map<string, number>();\n private presProps: PresentationProperties = {};\n private viewProps: ViewProperties = {};\n private notesMaster?: NotesMaster;\n private handoutMaster?: HandoutMaster;\n private commentAuthors: CommentAuthor[] = [];\n private authorNameMap = new Map<string, number>();\n private presTags: UserDefinedTag[] = [];\n private opts: PresentationOptions;\n\n /** Creates a new presentation with optional configuration. */\n constructor(opts?: PresentationOptions) {\n this.opts = opts ?? {};\n this.theme = {\n ...defaultTheme,\n ...opts?.theme,\n colors: { ...defaultTheme.colors, ...opts?.theme?.colors },\n fonts: { ...defaultTheme.fonts, ...opts?.theme?.fonts },\n };\n this.registry = new Registry();\n this.registry.registerElement('text', textSerializer);\n this.registry.registerElement('image', imageSerializer);\n this.registry.registerElement('shape', shapeSerializer);\n this.registry.registerElement('table', tableSerializer);\n this.registry.registerElement('chart', chartSerializer);\n this.registry.registerElement('media', mediaSerializer);\n this.registry.registerElement('group', createGroupSerializer(this.registry));\n this.registry.registerElement('connector', connectorSerializer);\n\n this.masters = [new SlideMaster({ name: 'Default Master' })];\n this.layouts = [new SlideLayout(builtinLayouts.blank)];\n this.layoutNameMap.set('blank', 0);\n }\n\n /** Registers a plugin to extend serialization capabilities. */\n use(plugin: IPlugin): this {\n plugin.install(this.registry);\n return this;\n }\n\n /** Defines or replaces the default slide master. */\n defineSlideMaster(def: SlideMasterDef): this {\n this.masters[0] = new SlideMaster(def);\n return this;\n }\n\n /** Registers a new slide layout that can be referenced by name when adding slides. */\n defineLayout(def: SlideLayoutDef): this {\n const idx = this.layouts.length;\n this.layouts.push(new SlideLayout(def));\n this.layoutNameMap.set(def.name, idx);\n return this;\n }\n\n /** Defines the notes master for speaker notes formatting. */\n defineNotesMaster(def?: NotesMasterDef): this {\n this.notesMaster = new NotesMaster(def);\n return this;\n }\n\n /** Defines the handout master for printed handout formatting. */\n defineHandoutMaster(def?: HandoutMasterDef): this {\n this.handoutMaster = new HandoutMaster(def);\n return this;\n }\n\n /** Configures slideshow playback properties (e.g., loop, timing). */\n setShowProperties(props: SlideShowProperties): this {\n this.presProps.slideShow = props;\n return this;\n }\n\n /** Configures print-related properties. */\n setPrintProperties(props: PrintProperties): this {\n this.presProps.print = props;\n return this;\n }\n\n /** Sets the default view properties (e.g., normal, slide sorter). */\n setViewProperties(props: ViewProperties): this {\n this.viewProps = props;\n return this;\n }\n\n /**\n * Registers a comment author. Returns the author ID, reusing an existing one if the name matches.\n * @param name - Display name of the author.\n * @param initials - Author initials shown in comment badges.\n */\n defineCommentAuthor(name: string, initials: string): number {\n const existing = this.authorNameMap.get(name);\n if (existing != null) return existing;\n\n const id = this.commentAuthors.length;\n this.commentAuthors.push({ id, name, initials, lastIdx: 0, clrIdx: id });\n this.authorNameMap.set(name, id);\n return id;\n }\n\n /** Sets user-defined tags on the presentation as key-value pairs. */\n setTags(tags: Record<string, string>): this {\n this.presTags = Object.entries(tags).map(([name, value]) => ({ name, value }));\n return this;\n }\n\n /**\n * Adds a new slide and returns a builder for populating it.\n * @param layoutName - Name of a previously defined layout; defaults to \"blank\".\n */\n addSlide(layoutName?: string): SlideBuilder {\n const layoutIndex = layoutName ? (this.layoutNameMap.get(layoutName) ?? 0) : 0;\n const slideData: SlideData = { elements: [], layoutIndex };\n this.slides.push(slideData);\n return new SlideBuilder(slideData, this.commentAuthors);\n }\n\n /** Serializes the presentation to a PPTX file in memory and returns the raw bytes. */\n toBuffer(): Uint8Array {\n return writePresentation({\n slides: this.slides,\n theme: this.theme,\n registry: this.registry,\n masters: this.masters,\n layouts: this.layouts,\n presProps: this.presProps,\n viewProps: this.viewProps,\n notesMaster: this.notesMaster,\n commentAuthors: this.commentAuthors.length > 0 ? this.commentAuthors : undefined,\n handoutMaster: this.handoutMaster,\n tags: this.presTags.length > 0 ? this.presTags : undefined,\n htmlPublishUri: this.opts.htmlPublishUri,\n slideUpdateUrl: this.opts.slideUpdateUrl,\n slideSize: this.opts.slideSize,\n coreProperties: this.opts.coreProperties,\n });\n }\n\n /** Writes the presentation as a .pptx file to disk (Node.js only). */\n async toFile(path: string): Promise<void> {\n const { writeFile } = await import('node:fs/promises');\n const buf = this.toBuffer();\n await writeFile(path, buf);\n }\n}\n"],"mappings":"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","names":["readFileSync","readFileSync","encoder","readFileSync","readFileSync","xml"]}