@particle-academy/dark-slide 0.5.2

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/exceptions.ts","../src/helpers/emu.ts","../src/reader/xml.ts","../src/zip/crc32.ts","../src/zip/zip-writer.ts","../src/zip/inflate.ts","../src/zip/zip-reader.ts","../src/reader/pptx-reader.ts","../src/util.ts","../src/schema/schema.ts","../src/schema/repairer.ts","../src/schema/validator.ts","../src/helpers/chart-translator.ts","../src/helpers/color.ts","../src/helpers/markdown-inline.ts","../src/helpers/syntax-highlighter.ts","../src/helpers/xml.ts","../src/writer/pptx-writer.ts","../src/agent.ts","../src/dark-slide.ts"],"names":["end","kind","isScalar"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ValidationError } from \"./schema/types\";\n\n/** Thrown by Agent.write/toBytes when the schema is invalid. Mirrors PHP `SchemaException`. */\nexport class SchemaException extends Error {\n readonly errors: ValidationError[];\n\n constructor(message: string, errors: ValidationError[]) {\n super(message);\n this.name = \"SchemaException\";\n this.errors = errors;\n Object.setPrototypeOf(this, SchemaException.prototype);\n }\n}\n","/** EMU conversion helpers. Mirrors PHP `Helpers\\Emu`. 914,400 EMU = 1 inch. */\nexport const EMU_PER_INCH = 914400;\nexport const DEFAULT_SLIDE_WIDTH = 9144000;\nexport const DEFAULT_SLIDE_HEIGHT = 5143500;\n\nexport const Emu = {\n EMU_PER_INCH,\n DEFAULT_SLIDE_WIDTH,\n DEFAULT_SLIDE_HEIGHT,\n\n fromFracX(f: number, slideWidthEmu = DEFAULT_SLIDE_WIDTH): number {\n return Math.round(f * slideWidthEmu);\n },\n fromFracY(f: number, slideHeightEmu = DEFAULT_SLIDE_HEIGHT): number {\n return Math.round(f * slideHeightEmu);\n },\n toFracX(emu: number, slideWidthEmu = DEFAULT_SLIDE_WIDTH): number {\n return slideWidthEmu === 0 ? 0 : emu / slideWidthEmu;\n },\n toFracY(emu: number, slideHeightEmu = DEFAULT_SLIDE_HEIGHT): number {\n return slideHeightEmu === 0 ? 0 : emu / slideHeightEmu;\n },\n fromPt(pt: number): number {\n return Math.round(pt * (EMU_PER_INCH / 72));\n },\n hundredthsOfPoint(pt: number): number {\n return Math.round(pt * 100);\n },\n};\n","/**\n * Tiny isomorphic XML parser — enough to read OOXML parts (replacing PHP's\n * SimpleXML). Namespace prefixes are stripped so nodes/attributes are queried\n * by local name, matching how the PHP reader accesses SimpleXML.\n */\n\nexport interface XmlNode {\n name: string;\n attrs: Record<string, string>;\n children: XmlNode[];\n text: string;\n}\n\nfunction localName(name: string): string {\n const idx = name.indexOf(\":\");\n return idx >= 0 ? name.slice(idx + 1) : name;\n}\n\nfunction unescapeXml(s: string): string {\n if (s.indexOf(\"&\") < 0) return s;\n return s.replace(/&(#x?[0-9a-fA-F]+|\\w+);/g, (m, ent: string) => {\n switch (ent) {\n case \"amp\":\n return \"&\";\n case \"lt\":\n return \"<\";\n case \"gt\":\n return \">\";\n case \"quot\":\n return '\"';\n case \"apos\":\n return \"'\";\n default:\n if (ent[0] === \"#\") {\n const code = ent[1] === \"x\" || ent[1] === \"X\" ? parseInt(ent.slice(2), 16) : parseInt(ent.slice(1), 10);\n return Number.isFinite(code) ? String.fromCodePoint(code) : m;\n }\n return m;\n }\n });\n}\n\nfunction findTagEnd(src: string, from: number): number {\n let quote = \"\";\n for (let i = from; i < src.length; i++) {\n const ch = src[i]!;\n if (quote) {\n if (ch === quote) quote = \"\";\n } else if (ch === '\"' || ch === \"'\") {\n quote = ch;\n } else if (ch === \">\") {\n return i;\n }\n }\n return src.length;\n}\n\nconst ATTR_RE = /([^\\s=/]+)\\s*=\\s*(\"([^\"]*)\"|'([^']*)')/g;\n\nfunction parseTag(inner: string): { name: string; attrs: Record<string, string> } {\n const trimmed = inner.trim();\n let i = 0;\n while (i < trimmed.length && !/\\s/.test(trimmed[i]!)) i++;\n const name = trimmed.slice(0, i);\n const attrs: Record<string, string> = {};\n const rest = trimmed.slice(i);\n for (const m of rest.matchAll(ATTR_RE)) {\n const key = localName(m[1]!);\n const value = unescapeXml(m[3] ?? m[4] ?? \"\");\n attrs[key] = value;\n }\n return { name, attrs };\n}\n\nexport function parseXml(src: string): XmlNode | null {\n let i = 0;\n const n = src.length;\n const root: XmlNode = { name: \"#root\", attrs: {}, children: [], text: \"\" };\n const stack: XmlNode[] = [root];\n\n while (i < n) {\n if (src[i] === \"<\") {\n if (src.startsWith(\"<!--\", i)) {\n const end = src.indexOf(\"-->\", i);\n i = end < 0 ? n : end + 3;\n continue;\n }\n if (src.startsWith(\"<![CDATA[\", i)) {\n const end = src.indexOf(\"]]>\", i);\n stack[stack.length - 1]!.text += src.slice(i + 9, end < 0 ? n : end);\n i = end < 0 ? n : end + 3;\n continue;\n }\n if (src.startsWith(\"<?\", i)) {\n const end = src.indexOf(\"?>\", i);\n i = end < 0 ? n : end + 2;\n continue;\n }\n if (src.startsWith(\"<!\", i)) {\n const end = src.indexOf(\">\", i);\n i = end < 0 ? n : end + 1;\n continue;\n }\n if (src[i + 1] === \"/\") {\n const end = src.indexOf(\">\", i);\n if (stack.length > 1) stack.pop();\n i = end < 0 ? n : end + 1;\n continue;\n }\n const end = findTagEnd(src, i + 1);\n const tagContent = src.slice(i + 1, end);\n const selfClosing = tagContent.endsWith(\"/\");\n const { name, attrs } = parseTag(selfClosing ? tagContent.slice(0, -1) : tagContent);\n const node: XmlNode = { name: localName(name), attrs, children: [], text: \"\" };\n stack[stack.length - 1]!.children.push(node);\n if (!selfClosing) stack.push(node);\n i = end + 1;\n } else {\n const next = src.indexOf(\"<\", i);\n const stop = next < 0 ? n : next;\n stack[stack.length - 1]!.text += unescapeXml(src.slice(i, stop));\n i = stop;\n }\n }\n\n return root.children[0] ?? null;\n}\n\n/** First child element with the given local name. */\nexport function el(node: XmlNode | null | undefined, name: string): XmlNode | undefined {\n return node?.children.find((c) => c.name === name);\n}\n\n/** All child elements with the given local name. */\nexport function els(node: XmlNode | null | undefined, name: string): XmlNode[] {\n return node ? node.children.filter((c) => c.name === name) : [];\n}\n\n/** Attribute by local name, or undefined. */\nexport function at(node: XmlNode | null | undefined, name: string): string | undefined {\n return node?.attrs[name];\n}\n","/**\n * CRC-32 (IEEE 802.3) over a byte array — used for ZIP local/central headers.\n * Table-based, zero-dependency.\n */\n\nconst TABLE = /* @__PURE__ */ (() => {\n const t = new Uint32Array(256);\n for (let n = 0; n < 256; n++) {\n let c = n;\n for (let k = 0; k < 8; k++) {\n c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n }\n t[n] = c >>> 0;\n }\n return t;\n})();\n\nexport function crc32(bytes: Uint8Array): number {\n let crc = 0xffffffff;\n for (let i = 0; i < bytes.length; i++) {\n crc = TABLE[(crc ^ bytes[i]!) & 0xff]! ^ (crc >>> 8);\n }\n return (crc ^ 0xffffffff) >>> 0;\n}\n","/**\n * Minimal ZIP writer using the STORE method (no compression). Valid OOXML\n * containers don't require compression, so this stays tiny, deterministic, and\n * isomorphic. Filenames are UTF-8 (general-purpose bit 11 set).\n */\nimport { crc32 } from \"./crc32\";\n\nexport interface ZipFile {\n name: string;\n data: Uint8Array;\n}\n\nconst encoder = new TextEncoder();\n\n// Fixed DOS timestamp (1980-01-01 00:00:00) for deterministic, reproducible output.\nconst DOS_TIME = 0;\nconst DOS_DATE = 0x0021;\n\nexport function zipSync(files: ZipFile[]): Uint8Array {\n const localParts: Uint8Array[] = [];\n const centralParts: Uint8Array[] = [];\n let offset = 0;\n\n for (const f of files) {\n const nameBytes = encoder.encode(f.name);\n const crc = crc32(f.data);\n const size = f.data.length;\n\n const lh = new Uint8Array(30 + nameBytes.length);\n const ldv = new DataView(lh.buffer);\n ldv.setUint32(0, 0x04034b50, true);\n ldv.setUint16(4, 20, true); // version needed to extract\n ldv.setUint16(6, 0x0800, true); // flags: UTF-8 filename\n ldv.setUint16(8, 0, true); // method: STORE\n ldv.setUint16(10, DOS_TIME, true);\n ldv.setUint16(12, DOS_DATE, true);\n ldv.setUint32(14, crc, true);\n ldv.setUint32(18, size, true); // compressed size\n ldv.setUint32(22, size, true); // uncompressed size\n ldv.setUint16(26, nameBytes.length, true);\n ldv.setUint16(28, 0, true); // extra length\n lh.set(nameBytes, 30);\n localParts.push(lh, f.data);\n\n const cd = new Uint8Array(46 + nameBytes.length);\n const cdv = new DataView(cd.buffer);\n cdv.setUint32(0, 0x02014b50, true);\n cdv.setUint16(4, 20, true); // version made by\n cdv.setUint16(6, 20, true); // version needed\n cdv.setUint16(8, 0x0800, true);\n cdv.setUint16(10, 0, true); // method\n cdv.setUint16(12, DOS_TIME, true);\n cdv.setUint16(14, DOS_DATE, true);\n cdv.setUint32(16, crc, true);\n cdv.setUint32(20, size, true);\n cdv.setUint32(24, size, true);\n cdv.setUint16(28, nameBytes.length, true);\n cdv.setUint16(30, 0, true); // extra length\n cdv.setUint16(32, 0, true); // comment length\n cdv.setUint16(34, 0, true); // disk number start\n cdv.setUint16(36, 0, true); // internal attrs\n cdv.setUint32(38, 0, true); // external attrs\n cdv.setUint32(42, offset, true); // local header offset\n cd.set(nameBytes, 46);\n centralParts.push(cd);\n\n offset += lh.length + f.data.length;\n }\n\n const localSize = offset;\n const centralSize = centralParts.reduce((s, c) => s + c.length, 0);\n\n const eocd = new Uint8Array(22);\n const edv = new DataView(eocd.buffer);\n edv.setUint32(0, 0x06054b50, true);\n edv.setUint16(4, 0, true); // this disk\n edv.setUint16(6, 0, true); // disk with central dir\n edv.setUint16(8, files.length, true);\n edv.setUint16(10, files.length, true);\n edv.setUint32(12, centralSize, true);\n edv.setUint32(16, localSize, true); // central dir offset\n edv.setUint16(20, 0, true); // comment length\n\n const out = new Uint8Array(localSize + centralSize + 22);\n let p = 0;\n for (const part of localParts) {\n out.set(part, p);\n p += part.length;\n }\n for (const part of centralParts) {\n out.set(part, p);\n p += part.length;\n }\n out.set(eocd, p);\n return out;\n}\n","/**\n * Raw DEFLATE (RFC 1951) decompression — `inflateRaw`.\n *\n * Office documents (.xlsx/.pptx) authored by Excel/PowerPoint store their parts\n * with DEFLATE compression, so the reader must inflate them. Our own writer uses\n * the STORE method (no compression), so this is only exercised when reading\n * externally-authored files. Decompress-only, zero-dependency, isomorphic.\n *\n * Algorithm adapted from the public-domain \"tinf\" inflate (Jørgen Ibsen).\n */\n\nclass Tree {\n // number of codes with a given bit length\n readonly table = new Uint16Array(16);\n // symbols sorted by code\n readonly trans = new Uint16Array(288);\n}\n\nconst LENGTH_BITS = new Uint8Array([\n 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5,\n 5, 5, 0,\n]);\nconst LENGTH_BASE = new Uint16Array([\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67,\n 83, 99, 115, 131, 163, 195, 227, 258,\n]);\nconst DIST_BITS = new Uint8Array([\n 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11,\n 11, 12, 12, 13, 13,\n]);\nconst DIST_BASE = new Uint16Array([\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769,\n 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577,\n]);\n// order in which code-length-code lengths are stored\nconst CLC_INDEX = new Uint8Array([\n 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15,\n]);\n\nfunction buildFixedTrees(lt: Tree, dt: Tree): void {\n let i: number;\n for (i = 0; i < 7; i++) lt.table[i] = 0;\n lt.table[7] = 24;\n lt.table[8] = 152;\n lt.table[9] = 112;\n for (i = 0; i < 24; i++) lt.trans[i] = 256 + i;\n for (i = 0; i < 144; i++) lt.trans[24 + i] = i;\n for (i = 0; i < 8; i++) lt.trans[24 + 144 + i] = 280 + i;\n for (i = 0; i < 112; i++) lt.trans[24 + 144 + 8 + i] = 144 + i;\n for (i = 0; i < 5; i++) dt.table[i] = 0;\n dt.table[5] = 32;\n for (i = 0; i < 32; i++) dt.trans[i] = i;\n}\n\nconst OFFS = new Uint16Array(16);\n\nfunction buildTree(t: Tree, lengths: Uint8Array, off: number, num: number): void {\n let i: number;\n let sum = 0;\n for (i = 0; i < 16; i++) t.table[i] = 0;\n for (i = 0; i < num; i++) t.table[lengths[off + i]!]!++;\n t.table[0] = 0;\n for (i = 0; i < 16; i++) {\n OFFS[i] = sum;\n sum += t.table[i]!;\n }\n for (i = 0; i < num; i++) {\n const len = lengths[off + i]!;\n if (len) t.trans[OFFS[len]!++] = i;\n }\n}\n\nclass Reader {\n source: Uint8Array;\n index = 0;\n tag = 0;\n bitcount = 0;\n constructor(source: Uint8Array) {\n this.source = source;\n }\n}\n\nfunction getBit(d: Reader): number {\n if (d.bitcount-- === 0) {\n d.tag = d.source[d.index++]!;\n d.bitcount = 7;\n }\n const bit = d.tag & 1;\n d.tag >>>= 1;\n return bit;\n}\n\nfunction readBits(d: Reader, num: number, base: number): number {\n if (!num) return base;\n let val = 0;\n for (let i = 0; i < num; i++) val |= getBit(d) << i;\n return val + base;\n}\n\nfunction decodeSymbol(d: Reader, t: Tree): number {\n let sum = 0;\n let cur = 0;\n let len = 0;\n do {\n cur = 2 * cur + getBit(d);\n len++;\n sum += t.table[len]!;\n cur -= t.table[len]!;\n } while (cur >= 0);\n return t.trans[sum + cur]!;\n}\n\nfunction decodeTrees(d: Reader, lt: Tree, dt: Tree): void {\n const lengths = new Uint8Array(288 + 32);\n const hlit = readBits(d, 5, 257);\n const hdist = readBits(d, 5, 1);\n const hclen = readBits(d, 4, 4);\n let i: number;\n for (i = 0; i < 19; i++) lengths[i] = 0;\n for (i = 0; i < hclen; i++) {\n const clen = readBits(d, 3, 0);\n lengths[CLC_INDEX[i]!] = clen;\n }\n const codeTree = new Tree();\n buildTree(codeTree, lengths, 0, 19);\n for (let num = 0; num < hlit + hdist; ) {\n const sym = decodeSymbol(d, codeTree);\n switch (sym) {\n case 16: {\n const prev = lengths[num - 1]!;\n for (let length = readBits(d, 2, 3); length; length--) lengths[num++] = prev;\n break;\n }\n case 17:\n for (let length = readBits(d, 3, 3); length; length--) lengths[num++] = 0;\n break;\n case 18:\n for (let length = readBits(d, 7, 11); length; length--) lengths[num++] = 0;\n break;\n default:\n lengths[num++] = sym;\n break;\n }\n }\n buildTree(lt, lengths, 0, hlit);\n buildTree(dt, lengths, hlit, hdist);\n}\n\nclass Out {\n buf = new Uint8Array(1024);\n len = 0;\n push(b: number): void {\n if (this.len >= this.buf.length) {\n const next = new Uint8Array(this.buf.length * 2);\n next.set(this.buf);\n this.buf = next;\n }\n this.buf[this.len++] = b;\n }\n}\n\nfunction inflateBlockData(d: Reader, out: Out, lt: Tree, dt: Tree): void {\n for (;;) {\n const sym = decodeSymbol(d, lt);\n if (sym === 256) return;\n if (sym < 256) {\n out.push(sym);\n } else {\n const lengthSym = sym - 257;\n const length = readBits(d, LENGTH_BITS[lengthSym]!, LENGTH_BASE[lengthSym]!);\n const distSym = decodeSymbol(d, dt);\n const dist = readBits(d, DIST_BITS[distSym]!, DIST_BASE[distSym]!);\n const offs = out.len - dist;\n for (let i = 0; i < length; i++) out.push(out.buf[offs + i]!);\n }\n }\n}\n\nfunction inflateUncompressedBlock(d: Reader, out: Out): void {\n // discard remaining bits in the current (partial) byte\n d.bitcount = 0;\n let length = d.source[d.index + 1]! * 256 + d.source[d.index]!;\n d.index += 4; // skip LEN + NLEN\n for (; length; length--) out.push(d.source[d.index++]!);\n}\n\nexport function inflateRaw(source: Uint8Array): Uint8Array {\n const d = new Reader(source);\n const out = new Out();\n const lt = new Tree();\n const dt = new Tree();\n let bfinal: number;\n do {\n bfinal = getBit(d);\n const btype = readBits(d, 2, 0);\n if (btype === 0) {\n inflateUncompressedBlock(d, out);\n } else if (btype === 1) {\n buildFixedTrees(lt, dt);\n inflateBlockData(d, out, lt, dt);\n } else if (btype === 2) {\n decodeTrees(d, lt, dt);\n inflateBlockData(d, out, lt, dt);\n } else {\n throw new Error(\"dark-slide: invalid DEFLATE block type\");\n }\n } while (!bfinal);\n return out.buf.subarray(0, out.len);\n}\n","/**\n * Minimal ZIP reader. Parses the central directory and returns a name → bytes\n * map. Supports STORE (method 0) and DEFLATE (method 8, via `inflateRaw`) so it\n * reads both our own output and Excel/PowerPoint-authored files. Zip64 is not\n * handled (OOXML parts are well under 4 GB).\n */\nimport { inflateRaw } from \"./inflate\";\n\nconst decoder = new TextDecoder();\n\nexport function unzipSync(data: Uint8Array): Record<string, Uint8Array> {\n const dv = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n // Locate the End Of Central Directory record (scan backward; it may carry a comment).\n let eocd = -1;\n for (let i = data.length - 22; i >= 0; i--) {\n if (dv.getUint32(i, true) === 0x06054b50) {\n eocd = i;\n break;\n }\n }\n if (eocd < 0) throw new Error(\"dark-slide: not a zip archive (no EOCD record)\");\n\n const count = dv.getUint16(eocd + 10, true);\n let cd = dv.getUint32(eocd + 16, true);\n const result: Record<string, Uint8Array> = {};\n\n for (let n = 0; n < count; n++) {\n if (dv.getUint32(cd, true) !== 0x02014b50) break;\n const method = dv.getUint16(cd + 10, true);\n const compSize = dv.getUint32(cd + 20, true);\n const nameLen = dv.getUint16(cd + 28, true);\n const extraLen = dv.getUint16(cd + 30, true);\n const commentLen = dv.getUint16(cd + 32, true);\n const localOffset = dv.getUint32(cd + 42, true);\n const name = decoder.decode(data.subarray(cd + 46, cd + 46 + nameLen));\n\n const lhNameLen = dv.getUint16(localOffset + 26, true);\n const lhExtraLen = dv.getUint16(localOffset + 28, true);\n const dataStart = localOffset + 30 + lhNameLen + lhExtraLen;\n const raw = data.subarray(dataStart, dataStart + compSize);\n\n let content: Uint8Array;\n if (method === 0) content = raw.slice();\n else if (method === 8) content = inflateRaw(raw);\n else throw new Error(`dark-slide: unsupported zip method ${method} for \"${name}\"`);\n\n result[name] = content;\n cd += 46 + nameLen + extraLen + commentLen;\n }\n\n return result;\n}\n","/**\n * Best-effort PPTX → Deck reader. Faithful 1:1 port of PHP\n * `DarkSlide\\Reader\\PptxReader`. Uses the vendored zip + XML parser instead of\n * ZipArchive / SimpleXML.\n */\n\nimport { Emu } from \"../helpers/emu\";\nimport { parseXml, el, at, type XmlNode } from \"./xml\";\nimport { unzipSync } from \"../zip\";\n\nconst DECODER = new TextDecoder();\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Any = any;\n\nfunction base64Encode(bytes: Uint8Array): string {\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString(\"base64\");\n }\n let bin = \"\";\n for (let i = 0; i < bytes.length; i++) bin += String.fromCharCode(bytes[i]!);\n // eslint-disable-next-line no-undef\n return btoa(bin);\n}\n\n/** PHP basename of a path. */\nfunction basename(path: string): string {\n const parts = path.split(\"/\");\n return parts[parts.length - 1]!;\n}\n\n/** PHP dirname of a path. */\nfunction dirname(path: string): string {\n const idx = path.lastIndexOf(\"/\");\n return idx < 0 ? \".\" : path.slice(0, idx);\n}\n\n/** Lowercased file extension (no dot). */\nfunction extension(path: string): string {\n const base = basename(path);\n const idx = base.lastIndexOf(\".\");\n return idx < 0 ? \"\" : base.slice(idx + 1).toLowerCase();\n}\n\n/** First descendant (self excluded) with the given local name, depth-first. */\nfunction descendant(node: XmlNode | undefined, name: string): XmlNode | undefined {\n if (!node) return undefined;\n for (const child of node.children) {\n if (child.name === name) return child;\n const found = descendant(child, name);\n if (found) return found;\n }\n return undefined;\n}\n\n/** All descendants (self excluded) with the given local name, document order. */\nfunction descendants(node: XmlNode | undefined, name: string): XmlNode[] {\n const out: XmlNode[] = [];\n if (!node) return out;\n for (const child of node.children) {\n if (child.name === name) out.push(child);\n out.push(...descendants(child, name));\n }\n return out;\n}\n\n/** Concatenated text of a node and all descendants. */\nfunction deepText(node: XmlNode): string {\n let s = node.text;\n for (const child of node.children) s += deepText(child);\n return s;\n}\n\nexport class PptxReader {\n private currentSlideRels: Record<string, { type: string; target: string }> = {};\n private parts: Record<string, Uint8Array> = {};\n\n /** Read a PPTX file's bytes into a Deck schema object. */\n read(bytes: Uint8Array): Record<string, unknown> {\n return this.fromBytes(bytes);\n }\n\n fromBytes(bytes: Uint8Array): Record<string, unknown> {\n this.parts = unzipSync(bytes);\n return this.extract();\n }\n\n private getPart(name: string): string | false {\n const p = this.parts[name];\n return p === undefined ? false : DECODER.decode(p);\n }\n\n private extract(): Record<string, unknown> {\n const deck: Record<string, Any> = {\n id: \"imported-\" + ((Math.floor(Date.now() / 1000) & 0xffffff).toString(16)),\n title: this.readCoreTitle() ?? \"Imported\",\n theme: { name: \"imported\" },\n slides: [],\n };\n\n const presentationRels = this.getPart(\"ppt/_rels/presentation.xml.rels\");\n if (presentationRels === false) {\n return deck;\n }\n const slideTargets = this.extractSlideTargets(presentationRels);\n\n slideTargets.forEach((slideTarget, i) => {\n const slideXml = this.getPart(\"ppt/\" + slideTarget);\n if (slideXml === false) {\n return;\n }\n const slideRels =\n this.getPart(\"ppt/\" + dirname(slideTarget) + \"/_rels/\" + basename(slideTarget) + \".rels\") || \"\";\n const notes = this.readNotesFor(slideRels);\n this.currentSlideRels = this.parseSlideRels(slideRels, slideTarget);\n\n const slide = this.parseSlide(slideXml, \"imported-slide-\" + (i + 1), notes);\n deck.slides.push(slide);\n });\n\n return deck;\n }\n\n private parseSlideRels(relsXml: string, slideTargetRelative: string): Record<string, { type: string; target: string }> {\n if (relsXml === \"\") {\n return {};\n }\n const root = parseXml(relsXml);\n if (!root) {\n return {};\n }\n\n const slideDirAbs = \"ppt/\" + dirname(slideTargetRelative);\n const rels: Record<string, { type: string; target: string }> = {};\n for (const r of descendants(root, \"Relationship\")) {\n const id = at(r, \"Id\") ?? \"\";\n const type = at(r, \"Type\") ?? \"\";\n const target = at(r, \"Target\") ?? \"\";\n const resolved = this.resolveRelTarget(slideDirAbs, target);\n rels[id] = { type, target: resolved };\n }\n\n return rels;\n }\n\n private resolveRelTarget(baseDir: string, target: string): string {\n if (target.startsWith(\"/\")) {\n return target.replace(/^\\/+/, \"\");\n }\n const stack = baseDir.split(\"/\");\n for (const segment of target.split(\"/\")) {\n if (segment === \"..\") {\n stack.pop();\n } else if (segment !== \".\" && segment !== \"\") {\n stack.push(segment);\n }\n }\n return stack.join(\"/\");\n }\n\n private extractSlideTargets(relsXml: string): string[] {\n const targets: string[] = [];\n const root = parseXml(relsXml);\n if (!root) {\n return [];\n }\n for (const r of descendants(root, \"Relationship\")) {\n const type = at(r, \"Type\") ?? \"\";\n if (type.endsWith(\"/slide\")) {\n targets.push(at(r, \"Target\") ?? \"\");\n }\n }\n return targets;\n }\n\n private readCoreTitle(): string | null {\n const xml = this.getPart(\"docProps/core.xml\");\n if (xml === false) {\n return null;\n }\n const root = parseXml(xml);\n if (!root) {\n return null;\n }\n const title = descendant(root, \"title\");\n if (title) {\n return deepText(title);\n }\n return null;\n }\n\n private readNotesFor(slideRelsXml: string): string | null {\n if (slideRelsXml === \"\") {\n return null;\n }\n const root = parseXml(slideRelsXml);\n if (!root) {\n return null;\n }\n for (const r of descendants(root, \"Relationship\")) {\n if ((at(r, \"Type\") ?? \"\").endsWith(\"/notesSlide\")) {\n const target = at(r, \"Target\") ?? \"\";\n const notesXml = this.getPart(\"ppt/\" + target.replace(/\\.\\.\\//g, \"\").replace(/^\\/+/, \"\"));\n if (notesXml === false) {\n return null;\n }\n return this.parseNotesText(notesXml);\n }\n }\n return null;\n }\n\n private parseNotesText(xml: string): string {\n const root = parseXml(xml);\n if (!root) {\n return \"\";\n }\n const parts: string[] = [];\n for (const t of descendants(root, \"t\")) {\n parts.push(deepText(t));\n }\n return parts.join(\"\\n\");\n }\n\n private parseSlide(xml: string, id: string, notes: string | null): Record<string, Any> {\n const slide: Record<string, Any> = {\n id,\n layout: \"blank\",\n elements: [],\n };\n if (notes !== null && notes !== \"\") {\n slide.notes = notes;\n }\n\n const root = parseXml(xml);\n if (!root) {\n return slide;\n }\n\n const bg = this.parseBackground(root);\n if (bg !== null) {\n slide.background = bg;\n }\n\n for (const shape of descendants(root, \"sp\")) {\n const element = this.parseShape(shape);\n if (element !== null) {\n slide.elements.push(element);\n }\n }\n for (const pic of descendants(root, \"pic\")) {\n const element = this.parsePic(pic);\n if (element !== null) {\n slide.elements.push(element);\n }\n }\n for (const gf of descendants(root, \"graphicFrame\")) {\n const element = this.parseGraphicFrame(gf);\n if (element !== null) {\n slide.elements.push(element);\n }\n }\n\n return slide;\n }\n\n private parseBackground(root: XmlNode): Record<string, Any> | null {\n // //p:bg/p:bgPr → first bgPr that is a child of a bg.\n let bgPr: XmlNode | undefined;\n for (const bg of descendants(root, \"bg\")) {\n const inner = el(bg, \"bgPr\");\n if (inner) {\n bgPr = inner;\n break;\n }\n }\n if (!bgPr) {\n return null;\n }\n\n // Solid fill\n const solidFill = descendant(bgPr, \"solidFill\");\n const solid = solidFill ? descendant(solidFill, \"srgbClr\") : undefined;\n if (solid) {\n const hex = at(solid, \"val\") ?? \"\";\n if (hex !== \"\") {\n return { color: \"#\" + hex };\n }\n }\n\n // Gradient fill\n const grad = descendant(bgPr, \"gradFill\");\n if (grad) {\n const css = this.gradFillToCss(grad);\n if (css !== null) {\n return { gradient: css };\n }\n }\n\n // Image (blipFill)\n const blipFill = descendant(bgPr, \"blipFill\");\n const blip = blipFill ? descendant(blipFill, \"blip\") : undefined;\n if (blip) {\n const rid = at(blip, \"embed\") ?? \"\";\n if (rid !== \"\" && this.currentSlideRels[rid] !== undefined) {\n const dataUri = this.readMediaAsDataUri(this.currentSlideRels[rid]!.target);\n if (dataUri !== null) {\n return { image: dataUri };\n }\n }\n }\n\n return null;\n }\n\n private gradFillToCss(grad: XmlNode): string | null {\n const stops = descendants(grad, \"gs\");\n if (stops.length === 0) {\n return null;\n }\n\n const stopStrings: string[] = [];\n for (const stop of stops) {\n const pos = parseInt(at(stop, \"pos\") ?? \"0\", 10) || 0; // 0..100000\n const pct = round1(pos / 1000);\n const color = descendant(stop, \"srgbClr\");\n if (!color) {\n continue;\n }\n const hex = at(color, \"val\") ?? \"\";\n if (hex === \"\") {\n continue;\n }\n stopStrings.push(\"#\" + hex.toLowerCase() + \" \" + numToStr(pct) + \"%\");\n }\n if (stopStrings.length === 0) {\n return null;\n }\n\n const lin = descendant(grad, \"lin\");\n let angle = 180;\n if (lin) {\n const pptxAng = parseInt(at(lin, \"ang\") ?? \"0\", 10) || 0;\n const deg = pptxAng / 60000 + 90;\n angle = Math.round((((deg % 360) + 360) % 360));\n }\n\n return \"linear-gradient(\" + angle + \"deg, \" + stopStrings.join(\", \") + \")\";\n }\n\n private readMediaAsDataUri(archivePath: string): string | null {\n const part = this.parts[archivePath];\n if (part === undefined) {\n return null;\n }\n const mime = this.guessMimeFromArchivePath(archivePath);\n return \"data:\" + mime + \";base64,\" + base64Encode(part);\n }\n\n private guessMimeFromArchivePath(path: string): string {\n switch (extension(path)) {\n case \"png\":\n return \"image/png\";\n case \"jpg\":\n case \"jpeg\":\n return \"image/jpeg\";\n case \"gif\":\n return \"image/gif\";\n case \"svg\":\n return \"image/svg+xml\";\n case \"webp\":\n return \"image/webp\";\n default:\n return \"application/octet-stream\";\n }\n }\n\n private parseShape(sp: XmlNode): Record<string, Any> | null {\n const xfrm = descendant(sp, \"xfrm\");\n if (!xfrm) {\n return null;\n }\n const offset = el(xfrm, \"off\");\n const extent = el(xfrm, \"ext\");\n if (!offset || !extent) {\n return null;\n }\n const x = parseInt(at(offset, \"x\") ?? \"0\", 10) || 0;\n const y = parseInt(at(offset, \"y\") ?? \"0\", 10) || 0;\n const cx = parseInt(at(extent, \"cx\") ?? \"0\", 10) || 0;\n const cy = parseInt(at(extent, \"cy\") ?? \"0\", 10) || 0;\n\n const cNvPr = descendant(sp, \"cNvPr\");\n const base: Record<string, Any> = {\n id: cNvPr ? at(cNvPr, \"name\") ?? \"imported-\" + randInt(1000, 9999) : \"imported-\" + randInt(1000, 9999),\n x: Emu.toFracX(x),\n y: Emu.toFracY(y),\n w: Emu.toFracX(cx),\n h: Emu.toFracY(cy),\n };\n\n const tBody = descendant(sp, \"txBody\");\n const paragraphMarkdown: string[] = [];\n let anyDecoration = false;\n if (tBody) {\n for (const p of descendants(tBody, \"p\")) {\n const [md, decorated] = this.paragraphToMarkdown(p);\n paragraphMarkdown.push(md);\n anyDecoration = anyDecoration || decorated;\n }\n }\n\n const prstGeom = descendant(sp, \"prstGeom\");\n const prst = prstGeom ? at(prstGeom, \"prst\") ?? null : null;\n\n const hasText = paragraphMarkdown.some((t) => t !== \"\");\n if (hasText) {\n return {\n ...base,\n type: \"text\",\n content: paragraphMarkdown.join(\"\\n\"),\n format: anyDecoration ? \"markdown\" : \"plain\",\n };\n }\n\n let shapeKind: string | null;\n switch (prst) {\n case \"rect\":\n shapeKind = \"rect\";\n break;\n case \"roundRect\":\n shapeKind = \"rounded-rect\";\n break;\n case \"ellipse\":\n shapeKind = \"ellipse\";\n break;\n case \"triangle\":\n shapeKind = \"triangle\";\n break;\n case \"line\":\n shapeKind = \"line\";\n break;\n case \"rightArrow\":\n shapeKind = \"arrow\";\n break;\n default:\n shapeKind = null;\n }\n if (shapeKind !== null) {\n return { ...base, type: \"shape\", shape: shapeKind };\n }\n\n return null;\n }\n\n private parsePic(pic: XmlNode): Record<string, Any> | null {\n const xfrm = descendant(pic, \"xfrm\");\n if (!xfrm) {\n return null;\n }\n const offset = el(xfrm, \"off\");\n const extent = el(xfrm, \"ext\");\n if (!offset || !extent) {\n return null;\n }\n\n let src = \"\";\n const blip = descendant(pic, \"blip\");\n if (blip) {\n const rid = at(blip, \"embed\") ?? \"\";\n if (rid !== \"\" && this.currentSlideRels[rid] !== undefined) {\n const dataUri = this.readMediaAsDataUri(this.currentSlideRels[rid]!.target);\n if (dataUri !== null) {\n src = dataUri;\n }\n }\n }\n\n const cNvPr = descendant(pic, \"cNvPr\");\n\n return {\n id: cNvPr ? at(cNvPr, \"name\") ?? \"imported-\" + randInt(1000, 9999) : \"imported-\" + randInt(1000, 9999),\n type: \"image\",\n x: Emu.toFracX(parseInt(at(offset, \"x\") ?? \"0\", 10) || 0),\n y: Emu.toFracY(parseInt(at(offset, \"y\") ?? \"0\", 10) || 0),\n w: Emu.toFracX(parseInt(at(extent, \"cx\") ?? \"0\", 10) || 0),\n h: Emu.toFracY(parseInt(at(extent, \"cy\") ?? \"0\", 10) || 0),\n src,\n fit: \"contain\",\n };\n }\n\n private parseGraphicFrame(gf: XmlNode): Record<string, Any> | null {\n const xfrm = descendant(gf, \"xfrm\");\n if (!xfrm) {\n return null;\n }\n const offset = el(xfrm, \"off\");\n const extent = el(xfrm, \"ext\");\n if (!offset || !extent) {\n return null;\n }\n\n const tbl = descendant(gf, \"tbl\");\n if (!tbl) {\n return null;\n }\n\n const rows = descendants(tbl, \"tr\");\n if (rows.length === 0) {\n return null;\n }\n\n const headerCells = descendants(rows[0]!, \"tc\");\n const columns: { key: string; label: string }[] = [];\n headerCells.forEach((cell, i) => {\n const label = this.cellText(cell);\n columns.push({ key: \"col\" + (i + 1), label });\n });\n\n const bodyRows: Record<string, string>[] = [];\n for (let r = 1; r < rows.length; r++) {\n const rowCells = descendants(rows[r]!, \"tc\");\n const rowData: Record<string, string> = {};\n columns.forEach((col, i) => {\n const cell = rowCells[i];\n if (cell !== undefined) {\n rowData[col.key] = this.cellText(cell);\n }\n });\n bodyRows.push(rowData);\n }\n\n const cNvPr = descendant(gf, \"cNvPr\");\n\n return {\n id: cNvPr ? at(cNvPr, \"name\") ?? \"imported-table-\" + randInt(1000, 9999) : \"imported-table-\" + randInt(1000, 9999),\n type: \"table\",\n x: Emu.toFracX(parseInt(at(offset, \"x\") ?? \"0\", 10) || 0),\n y: Emu.toFracY(parseInt(at(offset, \"y\") ?? \"0\", 10) || 0),\n w: Emu.toFracX(parseInt(at(extent, \"cx\") ?? \"0\", 10) || 0),\n h: Emu.toFracY(parseInt(at(extent, \"cy\") ?? \"0\", 10) || 0),\n columns,\n rows: bodyRows,\n };\n }\n\n private cellText(cell: XmlNode): string {\n const segments: string[] = [];\n for (const t of descendants(cell, \"t\")) {\n segments.push(deepText(t));\n }\n return segments.join(\"\");\n }\n\n private paragraphToMarkdown(p: XmlNode): [string, boolean] {\n // Bullet?\n const pPr = descendant(p, \"pPr\");\n const bu = pPr ? descendant(pPr, \"buChar\") : undefined;\n const isBullet = bu !== undefined;\n\n const runs = descendants(p, \"r\");\n if (runs.length === 0) {\n return [isBullet ? \"- \" : \"\", isBullet];\n }\n\n const parsed: { text: string; b: boolean; i: boolean; code: boolean }[] = [];\n let allBold = true;\n let allItalic = true;\n let anyNonEmpty = false;\n for (const r of runs) {\n const rPr = el(r, \"rPr\");\n const tNode = el(r, \"t\");\n const text = tNode ? deepText(tNode) : \"\";\n let b = false;\n let i = false;\n let code = false;\n if (rPr) {\n b = (at(rPr, \"b\") ?? \"0\") === \"1\";\n i = (at(rPr, \"i\") ?? \"0\") === \"1\";\n const latin = el(rPr, \"latin\");\n if (latin) {\n const typeface = (at(latin, \"typeface\") ?? \"\").toLowerCase();\n if (typeface.includes(\"consola\") || typeface.includes(\"mono\") || typeface.includes(\"courier\")) {\n code = true;\n }\n }\n }\n if (text !== \"\") {\n anyNonEmpty = true;\n if (!b) {\n allBold = false;\n }\n if (!i) {\n allItalic = false;\n }\n }\n parsed.push({ text, b, i, code });\n }\n if (!anyNonEmpty) {\n return [isBullet ? \"- \" : \"\", isBullet];\n }\n\n let line = \"\";\n let anyDecoration = false;\n for (const run of parsed) {\n const text = run.text;\n const emitBold = run.b && !allBold;\n const emitItalic = run.i && !allItalic;\n if (run.code) {\n line += \"`\" + text + \"`\";\n anyDecoration = true;\n } else if (emitBold && emitItalic) {\n line += \"***\" + text + \"***\";\n anyDecoration = true;\n } else if (emitBold) {\n line += \"**\" + text + \"**\";\n anyDecoration = true;\n } else if (emitItalic) {\n line += \"*\" + text + \"*\";\n anyDecoration = true;\n } else {\n line += text;\n }\n }\n\n if (isBullet) {\n return [\"- \" + line, true];\n }\n\n return [line, anyDecoration];\n }\n}\n\n// ─── Module helpers ──────────────────────────────────────────────────────\n\nfunction randInt(min: number, max: number): number {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\n/** PHP `round($x, 1)`. */\nfunction round1(x: number): number {\n return Math.round(x * 10) / 10;\n}\n\n/** PHP `(string)` of a float — JS `String` already drops trailing `.0`. */\nfunction numToStr(n: number): string {\n return String(n);\n}\n","/** Shared helpers mirroring PHP loose semantics. */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isPlainObject(value: unknown): value is Record<string, any> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/** PHP `is_numeric` (approx): number, or numeric string with optional leading ws. */\nexport function isNumeric(v: unknown): boolean {\n if (typeof v === \"number\") return Number.isFinite(v);\n if (typeof v !== \"string\") return false;\n return /^\\s*[+-]?(\\d+(\\.\\d+)?|\\.\\d+)([eE][+-]?\\d+)?$/.test(v);\n}\n\n/** PHP `gettype`-style label used by the validator's `got` field. */\nexport function gettype(v: unknown): string {\n if (v === null || v === undefined) return \"null\";\n if (Array.isArray(v)) return \"array\";\n switch (typeof v) {\n case \"object\":\n return \"object\";\n case \"boolean\":\n return \"boolean\";\n case \"number\":\n return Number.isInteger(v) ? \"integer\" : \"double\";\n case \"string\":\n return \"string\";\n default:\n return typeof v;\n }\n}\n\n/** structuredClone with JSON fallback. */\nexport function clone<T>(v: T): T {\n return typeof structuredClone === \"function\"\n ? structuredClone(v)\n : (JSON.parse(JSON.stringify(v)) as T);\n}\n","/**\n * Schema constants describing the Deck shape. Mirrors PHP `Schema\\Schema`\n * (and `@particle-academy/fancy-slides` types.ts).\n */\nexport const Schema = {\n VERSION: \"0.1.0\",\n\n ELEMENT_TYPES: [\"text\", \"image\", \"chart\", \"code\", \"table\", \"shape\", \"embed\"] as const,\n SLIDE_LAYOUTS: [\n \"blank\",\n \"title\",\n \"title-content\",\n \"two-column\",\n \"section-divider\",\n \"image-text\",\n \"text-image\",\n \"quote\",\n ] as const,\n SHAPE_KINDS: [\"rect\", \"rounded-rect\", \"ellipse\", \"triangle\", \"line\", \"arrow\"] as const,\n TEXT_FORMATS: [\"markdown\", \"html\", \"plain\"] as const,\n SLIDE_TRANSITION_KINDS: [\"none\", \"fade\", \"slide\", \"zoom\"] as const,\n SLIDE_TRANSITION_DIRECTIONS: [\"left\", \"right\", \"up\", \"down\"] as const,\n ANIMATION_EFFECTS: [\"fade\", \"fly-in\", \"zoom\", \"wipe\"] as const,\n ANIMATION_TRIGGERS: [\"on-click\", \"with-prev\", \"after-prev\"] as const,\n ANIMATION_DIRECTIONS: [\"left\", \"right\", \"up\", \"down\"] as const,\n ANIMATION_DEFAULT_DURATION_MS: 500,\n DEFAULT_SLIDE_WIDTH_EMU: 9144000,\n DEFAULT_SLIDE_HEIGHT_EMU: 5143500,\n DEFAULT_THEME_NAME: \"default\",\n\n deckRequiredKeys(): string[] {\n return [\"id\", \"title\", \"slides\", \"theme\"];\n },\n slideRequiredKeys(): string[] {\n return [\"id\", \"elements\"];\n },\n elementRequiredKeys(): string[] {\n return [\"id\", \"type\", \"x\", \"y\", \"w\", \"h\"];\n },\n\n jsonSchema(): Record<string, unknown> {\n return {\n $schema: \"http://json-schema.org/draft-07/schema#\",\n title: \"DarkSlide Deck\",\n type: \"object\",\n required: this.deckRequiredKeys(),\n properties: {\n id: { type: \"string\" },\n title: { type: \"string\" },\n theme: {\n type: \"object\",\n required: [\"name\"],\n properties: {\n name: { type: \"string\" },\n aspectRatio: { type: \"number\" },\n slideWidth: { type: \"number\" },\n colors: {\n type: \"object\",\n properties: {\n background: { type: \"string\" },\n text: { type: \"string\" },\n muted: { type: \"string\" },\n accent: { type: \"string\" },\n surface: { type: \"string\" },\n },\n },\n fonts: {\n type: \"object\",\n properties: {\n heading: { type: \"string\" },\n body: { type: \"string\" },\n mono: { type: \"string\" },\n },\n },\n },\n },\n slides: {\n type: \"array\",\n items: {\n type: \"object\",\n required: this.slideRequiredKeys(),\n properties: {\n id: { type: \"string\" },\n layout: { type: \"string\", enum: this.SLIDE_LAYOUTS },\n elements: { type: \"array\", items: elementJsonSchema() },\n background: {\n type: \"object\",\n properties: {\n color: { type: \"string\" },\n image: { type: \"string\" },\n imageFit: { type: \"string\", enum: [\"contain\", \"cover\", \"fill\"] },\n gradient: { type: \"string\" },\n },\n },\n transition: {\n type: \"object\",\n properties: {\n kind: { type: \"string\", enum: this.SLIDE_TRANSITION_KINDS },\n duration: { type: \"number\" },\n direction: { type: \"string\", enum: this.SLIDE_TRANSITION_DIRECTIONS },\n },\n },\n notes: { type: \"string\" },\n metadata: { type: \"object\" },\n },\n },\n },\n metadata: { type: \"object\" },\n },\n };\n },\n};\n\nfunction elementJsonSchema(): Record<string, unknown> {\n return {\n type: \"object\",\n required: Schema.elementRequiredKeys(),\n properties: {\n id: { type: \"string\" },\n type: { type: \"string\", enum: Schema.ELEMENT_TYPES },\n x: { type: \"number\", minimum: 0, maximum: 1 },\n y: { type: \"number\", minimum: 0, maximum: 1 },\n w: { type: \"number\", minimum: 0, maximum: 1 },\n h: { type: \"number\", minimum: 0, maximum: 1 },\n rotation: { type: \"number\" },\n z: { type: \"integer\" },\n locked: { type: \"boolean\" },\n hidden: { type: \"boolean\" },\n href: { type: \"string\" },\n content: { type: \"string\" },\n format: { type: \"string\", enum: Schema.TEXT_FORMATS },\n style: { type: \"object\" },\n src: { type: \"string\" },\n alt: { type: \"string\" },\n fit: { type: \"string\", enum: [\"contain\", \"cover\", \"fill\", \"scale-down\"] },\n shape: { type: \"string\", enum: Schema.SHAPE_KINDS },\n fill: { type: \"string\" },\n stroke: { type: \"string\" },\n strokeWidth: { type: \"number\" },\n dashed: { type: \"boolean\" },\n radius: { type: \"number\" },\n code: { type: \"string\" },\n language: { type: \"string\" },\n codeTheme: { type: \"string\" },\n columns: { type: \"array\" },\n rows: { type: \"array\" },\n option: { type: \"object\" },\n chartTheme: { type: \"string\" },\n animation: {\n type: \"object\",\n required: [\"effect\"],\n properties: {\n effect: { type: \"string\", enum: Schema.ANIMATION_EFFECTS },\n trigger: { type: \"string\", enum: Schema.ANIMATION_TRIGGERS },\n direction: { type: \"string\", enum: Schema.ANIMATION_DIRECTIONS },\n duration: { type: \"number\" },\n delay: { type: \"number\" },\n order: { type: \"number\" },\n byParagraph: { type: \"boolean\" },\n },\n },\n },\n };\n}\n","import { clone, isNumeric, isPlainObject } from \"../util\";\nimport { Schema } from \"./schema\";\n\ntype Any = any;\n\n/** Heuristic deck repair. Mirrors PHP `Schema\\Repairer`. Never mutates input. */\nexport class Repairer {\n private idCounter = 0;\n\n repair(deckInput: Any): Record<string, unknown> {\n this.idCounter = 0;\n const deck: Any = isPlainObject(deckInput) ? clone(deckInput) : {};\n\n deck.id ??= this.generateId(\"deck\");\n deck.title ??= \"Untitled\";\n deck.theme = this.repairTheme(deck.theme ?? null);\n deck.slides = this.repairSlides(deck.slides ?? []);\n\n return deck;\n }\n\n private repairTheme(theme: Any): Record<string, unknown> {\n if (!isPlainObject(theme)) return { name: Schema.DEFAULT_THEME_NAME };\n theme.name ??= Schema.DEFAULT_THEME_NAME;\n return theme;\n }\n\n private repairSlides(slides: Any): Record<string, unknown>[] {\n if (!Array.isArray(slides)) return [];\n const out: Record<string, unknown>[] = [];\n slides.forEach((slide: Any, i: number) => {\n if (!isPlainObject(slide)) return;\n out.push(this.repairSlide(slide, i));\n });\n return out;\n }\n\n private repairSlide(slide: Any, index: number): Record<string, unknown> {\n slide.id ??= this.generateId(\"s\", index);\n slide.elements = this.repairElements(slide.elements ?? []);\n if (slide.layout !== undefined && !(Schema.SLIDE_LAYOUTS as readonly string[]).includes(slide.layout)) {\n slide.layout = \"blank\";\n }\n return slide;\n }\n\n private repairElements(elements: Any): Record<string, unknown>[] {\n if (!Array.isArray(elements)) return [];\n const out: Record<string, unknown>[] = [];\n elements.forEach((element: Any, i: number) => {\n if (!isPlainObject(element)) return;\n const repaired = this.repairElement(element, i);\n if (repaired !== null) out.push(repaired);\n });\n return out;\n }\n\n private repairElement(element: Any, index: number): Record<string, unknown> | null {\n if (element.type === undefined || !(Schema.ELEMENT_TYPES as readonly string[]).includes(element.type)) {\n return null;\n }\n\n element.id ??= this.generateId(\"e\", index);\n\n for (const coord of [\"x\", \"y\", \"w\", \"h\"] as const) {\n element[coord] = this.clamp(isNumeric(element[coord]) ? Number(element[coord]) : 0, 0, 1);\n }\n if (element.w < 0.02) element.w = 0.02;\n if (element.h < 0.02) element.h = 0.02;\n\n switch (element.type) {\n case \"text\":\n element.content = typeof element.content === \"string\" ? element.content : \"\";\n break;\n case \"image\":\n element.src = typeof element.src === \"string\" ? element.src : \"\";\n break;\n case \"shape\":\n element.shape =\n typeof element.shape === \"string\" && (Schema.SHAPE_KINDS as readonly string[]).includes(element.shape)\n ? element.shape\n : \"rect\";\n break;\n case \"code\":\n element.code = typeof element.code === \"string\" ? element.code : \"\";\n break;\n }\n\n return element;\n }\n\n private generateId(prefix: string, index = 0): string {\n this.idCounter++;\n const t = (Math.floor(Date.now() / 1000) & 0xffffff).toString(16);\n const n = String(this.idCounter + index).padStart(3, \"0\");\n return `${prefix}-${t}-${n}`;\n }\n\n private clamp(v: number, min: number, max: number): number {\n if (!Number.isFinite(v)) return min;\n return Math.max(min, Math.min(max, v));\n }\n}\n","import { gettype, isNumeric, isPlainObject } from \"../util\";\nimport { Schema } from \"./schema\";\nimport type { ValidationError } from \"./types\";\n\ntype Any = any;\n\n/** Liberal schema validator. Mirrors PHP `Schema\\Validator`. */\nexport class Validator {\n validate(deck: Any): ValidationError[] {\n const errors: ValidationError[] = [];\n const d = isPlainObject(deck) ? deck : {};\n\n for (const key of Schema.deckRequiredKeys()) {\n if (!(key in d)) errors.push(err(`/${key}`, key, \"missing\", null, `Deck must have an \\`${key}\\` field.`));\n }\n\n if (d.id !== undefined && typeof d.id !== \"string\") {\n errors.push(err(\"/id\", \"string\", gettype(d.id), d.id, \"Deck id must be a string.\"));\n }\n if (d.title !== undefined && typeof d.title !== \"string\") {\n errors.push(err(\"/title\", \"string\", gettype(d.title), d.title, \"Deck title must be a string.\"));\n }\n\n if (d.theme !== undefined) {\n if (!isPlainObject(d.theme)) {\n errors.push(err(\"/theme\", \"object\", gettype(d.theme), d.theme, \"Theme must be an object with at least a `name` field.\"));\n } else if (d.theme.name === undefined) {\n errors.push(err(\"/theme/name\", \"string\", \"missing\", null, \"Theme must have a name.\"));\n }\n }\n\n if (d.slides !== undefined) {\n if (!Array.isArray(d.slides)) {\n errors.push(err(\"/slides\", \"array\", gettype(d.slides), d.slides, \"Slides must be a JSON array.\"));\n } else {\n d.slides.forEach((slide: Any, i: number) => {\n errors.push(...this.validateSlide(slide, `/slides/${i}`));\n });\n }\n }\n\n return errors;\n }\n\n private validateSlide(slide: Any, path: string): ValidationError[] {\n const errors: ValidationError[] = [];\n if (!isPlainObject(slide)) {\n return [err(path, \"object\", gettype(slide), slide, \"Each slide must be a JSON object.\")];\n }\n\n for (const key of Schema.slideRequiredKeys()) {\n if (!(key in slide)) errors.push(err(`${path}/${key}`, key, \"missing\", null, `Slide must have a \\`${key}\\` field.`));\n }\n\n if (slide.id !== undefined && typeof slide.id !== \"string\") {\n errors.push(err(`${path}/id`, \"string\", gettype(slide.id), slide.id, \"Slide id must be a string.\"));\n }\n\n if (slide.elements !== undefined) {\n if (!Array.isArray(slide.elements)) {\n errors.push(err(`${path}/elements`, \"array\", gettype(slide.elements), slide.elements, \"Slide elements must be an array.\"));\n } else {\n slide.elements.forEach((element: Any, i: number) => {\n errors.push(...this.validateElement(element, `${path}/elements/${i}`));\n });\n }\n }\n\n if (slide.notes !== undefined && typeof slide.notes !== \"string\") {\n errors.push(err(`${path}/notes`, \"string\", gettype(slide.notes), slide.notes, \"Slide notes must be a string.\"));\n }\n\n return errors;\n }\n\n private validateElement(element: Any, path: string): ValidationError[] {\n const errors: ValidationError[] = [];\n if (!isPlainObject(element)) {\n return [err(path, \"object\", gettype(element), element, \"Each element must be a JSON object.\")];\n }\n\n for (const key of Schema.elementRequiredKeys()) {\n if (!(key in element)) errors.push(err(`${path}/${key}`, key, \"missing\", null, `Element must have a \\`${key}\\` field.`));\n }\n\n if (element.type !== undefined && !(Schema.ELEMENT_TYPES as readonly string[]).includes(element.type)) {\n errors.push(\n err(\n `${path}/type`,\n \"one of: \" + Schema.ELEMENT_TYPES.join(\" / \"),\n String(element.type),\n element.type,\n \"Unknown element type — supported: \" + Schema.ELEMENT_TYPES.join(\", \"),\n ),\n );\n }\n\n for (const coord of [\"x\", \"y\", \"w\", \"h\"] as const) {\n if (!(coord in element)) continue;\n if (!isNumeric(element[coord])) {\n errors.push(\n err(\n `${path}/${coord}`,\n \"number (0..1)\",\n gettype(element[coord]),\n element[coord],\n `Element ${coord} must be a number in the 0..1 range (slide-relative fraction).`,\n ),\n );\n }\n }\n\n if (typeof element.type === \"string\") {\n switch (element.type) {\n case \"text\":\n if (typeof element.content !== \"string\") {\n errors.push(err(`${path}/content`, \"string\", gettype(element.content ?? null), element.content ?? null, \"Text element must have a `content` string.\"));\n }\n break;\n case \"image\":\n if (typeof element.src !== \"string\") {\n errors.push(err(`${path}/src`, \"string (URL or data URI)\", gettype(element.src ?? null), element.src ?? null, \"Image element must have a `src` string.\"));\n }\n break;\n case \"shape\":\n if (!(Schema.SHAPE_KINDS as readonly string[]).includes(element.shape)) {\n errors.push(err(`${path}/shape`, \"one of: \" + Schema.SHAPE_KINDS.join(\" / \"), String(element.shape ?? \"missing\"), element.shape ?? null, \"Shape element must specify a known `shape` kind.\"));\n }\n break;\n case \"code\":\n if (typeof element.code !== \"string\") {\n errors.push(err(`${path}/code`, \"string\", gettype(element.code ?? null), element.code ?? null, \"Code element must have a `code` string.\"));\n }\n break;\n }\n }\n\n return errors;\n }\n}\n\nfunction err(path: string, expected: string, got: string, value: unknown, hint: string): ValidationError {\n return { path, expected, got, value, hint };\n}\n","import { isNumeric, isPlainObject } from \"../util\";\n\ntype Any = any;\n\nexport interface ChartSeries {\n type: string;\n name: string;\n values: number[];\n smooth: boolean;\n area: boolean;\n points: { x: number; y: number }[];\n}\nexport interface ChartSpec {\n kind: string;\n title: string;\n categories: string[];\n series: ChartSeries[];\n}\n\nconst SUPPORTED_TYPES = [\"bar\", \"line\", \"pie\", \"scatter\"];\n\nconst isScalar = (v: unknown): boolean =>\n typeof v === \"number\" || typeof v === \"string\" || typeof v === \"boolean\";\n\n/** ECharts option → normalised chart spec, or null. Mirrors PHP `Helpers\\ChartTranslator`. */\nexport const ChartTranslator = {\n SUPPORTED_TYPES,\n\n translate(option: Any): ChartSpec | null {\n const rawSeries = extractSeries(option);\n if (rawSeries.length === 0) return null;\n\n let categories = extractCategories(option);\n const series: ChartSeries[] = [];\n let kind: string | null = null;\n\n for (const raw of rawSeries) {\n if (!isPlainObject(raw)) continue;\n const type = typeof raw.type === \"string\" ? raw.type.toLowerCase() : \"bar\";\n if (!SUPPORTED_TYPES.includes(type)) return null;\n\n const normalised = normaliseSeries(raw, type);\n if (normalised === null) return null;\n\n kind ??= type;\n series.push(normalised);\n\n if (type === \"pie\" && categories.length === 0) {\n categories = pieCategories(raw);\n }\n }\n\n if (series.length === 0 || kind === null) return null;\n\n return { kind, title: extractTitle(option), categories, series };\n },\n};\n\nfunction extractSeries(option: Any): Any[] {\n const series = option?.series ?? null;\n if (Array.isArray(series)) return series;\n if (isPlainObject(series) && Object.keys(series).length > 0) return [series];\n return [];\n}\n\nfunction extractCategories(option: Any): string[] {\n let candidates: Any = null;\n const xAxis = option?.xAxis ?? null;\n if (Array.isArray(xAxis)) {\n candidates = isPlainObject(xAxis[0]) ? xAxis[0].data : (xAxis as Any).data;\n } else if (isPlainObject(xAxis)) {\n candidates = xAxis.data;\n }\n if (!Array.isArray(candidates)) candidates = option?.categories ?? null;\n if (!Array.isArray(candidates)) return [];\n\n const out: string[] = [];\n for (const value of candidates) {\n if (isScalar(value)) out.push(String(value));\n }\n return out;\n}\n\nfunction extractTitle(option: Any): string {\n const title = option?.title ?? null;\n if (isPlainObject(title)) {\n const text = title.text ?? title[0]?.text ?? null;\n if (typeof text === \"string\") return text;\n }\n if (Array.isArray(title)) {\n const text = title[0]?.text ?? null;\n if (typeof text === \"string\") return text;\n }\n if (typeof title === \"string\") return title;\n return \"\";\n}\n\nfunction normaliseSeries(raw: Any, type: string): ChartSeries | null {\n const name = isScalar(raw.name) ? String(raw.name) : \"\";\n const data = raw.data ?? null;\n if (!Array.isArray(data)) return null;\n\n const values: number[] = [];\n const points: { x: number; y: number }[] = [];\n for (const point of data) {\n if (type === \"scatter\") {\n const xy = scatterPoint(point);\n if (xy !== null) points.push(xy);\n continue;\n }\n values.push(numericValue(point));\n }\n\n if (type === \"scatter\" && points.length === 0) return null;\n if (type !== \"scatter\" && values.length === 0) return null;\n\n const area = type === \"line\" && raw.areaStyle !== undefined;\n return { type, name, values, smooth: !!raw.smooth, area, points };\n}\n\nfunction numericValue(point: Any): number {\n if (isNumeric(point)) return Number(point);\n if (isPlainObject(point) && isNumeric(point.value)) return Number(point.value);\n return 0;\n}\n\nfunction scatterPoint(point: Any): { x: number; y: number } | null {\n let pair = point;\n if (isPlainObject(point) && Array.isArray(point.value)) pair = point.value;\n if (Array.isArray(pair) && pair.length >= 2 && isNumeric(pair[0]) && isNumeric(pair[1])) {\n return { x: Number(pair[0]), y: Number(pair[1]) };\n }\n return null;\n}\n\nfunction pieCategories(raw: Any): string[] {\n const data = raw.data ?? null;\n if (!Array.isArray(data)) return [];\n return data.map((point: Any, i: number) =>\n isPlainObject(point) && isScalar(point.name) ? String(point.name) : `Slice ${i + 1}`,\n );\n}\n","/**\n * Color parsing → [hex (RRGGBB, uppercase), alpha (0..100000 PPTX units)].\n * Mirrors PHP `Helpers\\Color`.\n */\nconst NAMED: Record<string, string> = {\n black: \"000000\",\n white: \"FFFFFF\",\n red: \"FF0000\",\n green: \"008000\",\n blue: \"0000FF\",\n yellow: \"FFFF00\",\n cyan: \"00FFFF\",\n magenta: \"FF00FF\",\n gray: \"808080\",\n grey: \"808080\",\n silver: \"C0C0C0\",\n maroon: \"800000\",\n olive: \"808000\",\n lime: \"00FF00\",\n aqua: \"00FFFF\",\n teal: \"008080\",\n navy: \"000080\",\n fuchsia: \"FF00FF\",\n purple: \"800080\",\n orange: \"FFA500\",\n};\n\nexport const Color = {\n parse(color: string | null | undefined, fallbackHex = \"000000\"): [string, number] {\n if (color === null || color === undefined || color === \"\") return [fallbackHex, 100000];\n const c = color.trim();\n\n if (c === \"transparent\" || c === \"none\") return [fallbackHex, 0];\n\n let m = /^#([0-9a-fA-F]{3})$/.exec(c);\n if (m) {\n const h = m[1]!;\n const hex = (h[0]! + h[0]! + h[1]! + h[1]! + h[2]! + h[2]!).toUpperCase();\n return [hex, 100000];\n }\n m = /^#([0-9a-fA-F]{6})$/.exec(c);\n if (m) return [m[1]!.toUpperCase(), 100000];\n m = /^#([0-9a-fA-F]{8})$/.exec(c);\n if (m) {\n const hex = m[1]!.slice(0, 6).toUpperCase();\n const a = parseInt(m[1]!.slice(6, 8), 16);\n return [hex, Math.round((a / 255) * 100000)];\n }\n\n m = /^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*([0-9.]+)\\s*)?\\)$/i.exec(c);\n if (m) {\n const r = parseInt(m[1]!, 10);\n const g = parseInt(m[2]!, 10);\n const b = parseInt(m[3]!, 10);\n const a = m[4] !== undefined ? parseFloat(m[4]) : 1.0;\n const hex = [r, g, b].map((n) => n.toString(16).padStart(2, \"0\")).join(\"\").toUpperCase();\n return [hex, Math.round(a * 100000)];\n }\n\n const named = NAMED[c.toLowerCase()];\n if (named !== undefined) return [named, 100000];\n\n return [fallbackHex, 100000];\n },\n};\n","/** Inline-markdown tokenizer → runs. Mirrors PHP `Helpers\\MarkdownInline`. */\nexport interface InlineRun {\n text: string;\n b: boolean;\n i: boolean;\n code: boolean;\n}\n\nconst isWordChar = (ch: string): boolean => /[a-zA-Z0-9_]/.test(ch);\n\nexport const MarkdownInline = {\n tokenize(text: string): InlineRun[] {\n const runs: InlineRun[] = [];\n let i = 0;\n const len = text.length;\n let buf = \"\";\n let b = false;\n let it = false;\n const code = false; // never set as loop state (matches PHP)\n\n const flush = (): void => {\n if (buf !== \"\") {\n runs.push({ text: buf, b, i: it, code });\n buf = \"\";\n }\n };\n\n while (i < len) {\n const c = text[i]!;\n const next2 = text.slice(i, i + 2);\n\n // Code spans win — they swallow markers literally.\n if (c === \"`\" && !code) {\n flush();\n const end = text.indexOf(\"`\", i + 1);\n if (end === -1) {\n buf += text.slice(i);\n i = len;\n continue;\n }\n runs.push({ text: text.slice(i + 1, end), b, i: it, code: true });\n i = end + 1;\n continue;\n }\n\n // Bold via ** or __\n if (next2 === \"**\" || next2 === \"__\") {\n flush();\n b = !b;\n i += 2;\n continue;\n }\n\n // Italic via * or _\n if ((c === \"*\" || c === \"_\") && !code) {\n const prev = i > 0 ? text[i - 1]! : \" \";\n if ((it && isWordChar(prev)) || !it) {\n if (!it) {\n if (!isWordChar(prev) || prev === \" \") {\n flush();\n it = true;\n i++;\n continue;\n }\n } else {\n flush();\n it = false;\n i++;\n continue;\n }\n }\n }\n\n buf += c;\n i++;\n }\n\n flush();\n\n if (runs.length === 0) {\n runs.push({ text: \"\", b: false, i: false, code: false });\n }\n\n return runs;\n },\n\n /** [isBullet, contentWithoutMarker]. */\n bulletPrefix(line: string): [boolean, string] {\n if (line.startsWith(\"- \") || line.startsWith(\"* \")) return [true, line.slice(2)];\n return [false, line];\n },\n\n /** [level (1..6, 0=none), contentWithoutMarker]. */\n headingPrefix(line: string): [number, string] {\n const m = /^(#{1,6})\\s+(.*)$/.exec(line);\n if (m) return [m[1]!.length, m[2]!];\n return [0, line];\n },\n};\n","/**\n * Minimal zero-dependency syntax highlighter. Mirrors PHP `Helpers\\SyntaxHighlighter`.\n * Emits (text, kind) tokens; kinds: plain/keyword/string/comment/number/builtin/punctuation.\n */\nexport interface Token {\n text: string;\n kind: string;\n}\n\ninterface LangConfig {\n patterns: Record<string, RegExp>;\n keywords: string[];\n builtins: string[];\n}\n\n// sticky + dotall so each pattern matches exactly at the scan offset, dot spans newlines\nconst S = (re: RegExp): RegExp => new RegExp(re.source, \"sy\");\n\nconst C_LIKE: Record<string, RegExp> = {\n comment: S(/\\/\\/[^\\n]*|\\/\\*.*?\\*\\//),\n string: S(/\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'|`(?:[^`\\\\]|\\\\.)*`/),\n number: S(/\\b\\d+(?:\\.\\d+)?\\b/),\n word: S(/[A-Za-z_$][A-Za-z0-9_$]*/),\n punctuation: S(/[{}\\[\\]();,]/),\n};\n\nfunction config(lang: string | null): LangConfig | null {\n if (lang === null) return null;\n switch (lang) {\n case \"javascript\":\n case \"typescript\":\n return {\n patterns: C_LIKE,\n keywords: [\"const\",\"let\",\"var\",\"function\",\"return\",\"if\",\"else\",\"for\",\"while\",\"do\",\"switch\",\"case\",\"break\",\"continue\",\"new\",\"class\",\"extends\",\"implements\",\"interface\",\"type\",\"enum\",\"import\",\"export\",\"from\",\"as\",\"default\",\"async\",\"await\",\"try\",\"catch\",\"finally\",\"throw\",\"typeof\",\"instanceof\",\"in\",\"of\",\"this\",\"super\",\"null\",\"undefined\",\"true\",\"false\",\"void\",\"never\",\"any\",\"unknown\",\"string\",\"number\",\"boolean\",\"object\"],\n builtins: [\"console\",\"Math\",\"JSON\",\"Object\",\"Array\",\"String\",\"Number\",\"Boolean\",\"Promise\",\"Map\",\"Set\",\"Date\",\"Error\",\"document\",\"window\",\"globalThis\",\"require\",\"module\",\"process\"],\n };\n case \"php\":\n return {\n patterns: {\n comment: S(/\\/\\/[^\\n]*|#[^\\n]*|\\/\\*.*?\\*\\//),\n string: S(/\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'/),\n number: S(/\\b\\d+(?:\\.\\d+)?\\b/),\n word: S(/\\$?[A-Za-z_][A-Za-z0-9_]*/),\n punctuation: S(/[{}\\[\\]();,]/),\n },\n keywords: [\"abstract\",\"and\",\"array\",\"as\",\"break\",\"callable\",\"case\",\"catch\",\"class\",\"clone\",\"const\",\"continue\",\"declare\",\"default\",\"do\",\"echo\",\"else\",\"elseif\",\"empty\",\"enddeclare\",\"endfor\",\"endforeach\",\"endif\",\"endswitch\",\"endwhile\",\"enum\",\"extends\",\"final\",\"finally\",\"fn\",\"for\",\"foreach\",\"function\",\"global\",\"goto\",\"if\",\"implements\",\"include\",\"include_once\",\"instanceof\",\"insteadof\",\"interface\",\"isset\",\"list\",\"match\",\"namespace\",\"new\",\"null\",\"or\",\"private\",\"protected\",\"public\",\"readonly\",\"require\",\"require_once\",\"return\",\"static\",\"switch\",\"throw\",\"trait\",\"try\",\"unset\",\"use\",\"var\",\"while\",\"xor\",\"yield\",\"true\",\"false\",\"self\",\"parent\",\"this\"],\n builtins: [\"__construct\",\"__toString\",\"__invoke\",\"array_map\",\"array_filter\",\"array_reduce\",\"array_keys\",\"array_values\",\"array_merge\",\"count\",\"strlen\",\"str_replace\",\"str_starts_with\",\"str_ends_with\",\"str_contains\",\"substr\",\"sprintf\",\"printf\",\"json_encode\",\"json_decode\"],\n };\n case \"json\":\n return {\n patterns: {\n string: S(/\"(?:[^\"\\\\]|\\\\.)*\"/),\n number: S(/-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/),\n word: S(/[A-Za-z_][A-Za-z0-9_]*/),\n punctuation: S(/[{}\\[\\]:,]/),\n },\n keywords: [\"true\", \"false\", \"null\"],\n builtins: [],\n };\n case \"bash\":\n return {\n patterns: {\n comment: S(/#[^\\n]*/),\n string: S(/\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'/),\n number: S(/\\b\\d+\\b/),\n word: S(/[A-Za-z_][A-Za-z0-9_]*/),\n punctuation: S(/[{}\\[\\]();|&]/),\n },\n keywords: [\"if\",\"then\",\"else\",\"elif\",\"fi\",\"for\",\"while\",\"do\",\"done\",\"case\",\"esac\",\"in\",\"function\",\"return\",\"break\",\"continue\",\"export\",\"local\",\"readonly\",\"unset\"],\n builtins: [\"echo\",\"printf\",\"cd\",\"pwd\",\"ls\",\"cp\",\"mv\",\"rm\",\"mkdir\",\"touch\",\"cat\",\"grep\",\"sed\",\"awk\",\"curl\",\"wget\",\"git\",\"npm\",\"composer\",\"php\",\"node\"],\n };\n case \"css\":\n return {\n patterns: {\n comment: S(/\\/\\*.*?\\*\\//),\n string: S(/\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'/),\n number: S(/-?\\d+(?:\\.\\d+)?(?:px|em|rem|%|vw|vh|deg)?/),\n word: S(/[\\-A-Za-z_][\\-A-Za-z0-9_]*/),\n punctuation: S(/[{};:,]/),\n },\n keywords: [\"important\", \"inherit\", \"initial\", \"unset\", \"auto\", \"none\"],\n builtins: [],\n };\n case \"python\":\n return {\n patterns: {\n comment: S(/#[^\\n]*/),\n string: S(/\"\"\"[\\s\\S]*?\"\"\"|'''[\\s\\S]*?'''|\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'/),\n number: S(/\\b\\d+(?:\\.\\d+)?\\b/),\n word: S(/[A-Za-z_][A-Za-z0-9_]*/),\n punctuation: S(/[{}\\[\\]():,]/),\n },\n keywords: [\"and\",\"as\",\"assert\",\"async\",\"await\",\"break\",\"class\",\"continue\",\"def\",\"del\",\"elif\",\"else\",\"except\",\"finally\",\"for\",\"from\",\"global\",\"if\",\"import\",\"in\",\"is\",\"lambda\",\"nonlocal\",\"not\",\"or\",\"pass\",\"raise\",\"return\",\"try\",\"while\",\"with\",\"yield\",\"True\",\"False\",\"None\"],\n builtins: [\"print\",\"len\",\"range\",\"list\",\"dict\",\"set\",\"tuple\",\"str\",\"int\",\"float\",\"bool\",\"open\",\"input\",\"enumerate\",\"zip\",\"map\",\"filter\",\"sorted\",\"reversed\",\"sum\",\"min\",\"max\",\"abs\",\"round\"],\n };\n case \"html\":\n return {\n patterns: {\n comment: S(/<!--.*?-->/),\n string: S(/\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'/),\n keyword: S(/<\\/?[A-Za-z][A-Za-z0-9-]*/),\n punctuation: S(/>|\\/>|=/),\n },\n keywords: [],\n builtins: [],\n };\n default:\n return null;\n }\n}\n\nfunction normalizeLanguage(language: string | null | undefined): string | null {\n if (language === null || language === undefined) return null;\n const lang = language.toLowerCase().trim();\n switch (lang) {\n case \"js\":\n return \"javascript\";\n case \"ts\":\n return \"typescript\";\n case \"jsx\":\n case \"tsx\":\n return \"typescript\";\n case \"sh\":\n case \"shell\":\n case \"bash\":\n case \"zsh\":\n return \"bash\";\n case \"py\":\n return \"python\";\n case \"xml\":\n return \"html\";\n default:\n return lang;\n }\n}\n\nexport const SyntaxHighlighter = {\n tokenize(code: string, language: string | null | undefined): Token[] {\n const lang = normalizeLanguage(language);\n const cfg = config(lang);\n if (cfg === null) return [{ text: code, kind: \"plain\" }];\n\n const tokens: Token[] = [];\n let offset = 0;\n const len = code.length;\n const keywords = new Set(cfg.keywords);\n const builtins = new Set(cfg.builtins);\n\n while (offset < len) {\n let bestKind: string | null = null;\n let bestLen = 0;\n\n for (const [kind, re] of Object.entries(cfg.patterns)) {\n re.lastIndex = offset;\n const m = re.exec(code);\n if (m && m.index === offset) {\n const matchLen = m[0].length;\n if (matchLen > bestLen) {\n bestLen = matchLen;\n bestKind = kind;\n }\n }\n }\n\n if (bestKind === null || bestLen === 0) {\n tokens.push({ text: code[offset]!, kind: \"plain\" });\n offset++;\n continue;\n }\n\n const text = code.slice(offset, offset + bestLen);\n let kind = bestKind;\n if (kind === \"word\") {\n if (keywords.has(text)) kind = \"keyword\";\n else if (builtins.has(text)) kind = \"builtin\";\n else kind = \"plain\";\n }\n tokens.push({ text, kind });\n offset += bestLen;\n }\n\n return coalesce(tokens);\n },\n\n colorFor(kind: string): string {\n switch (kind) {\n case \"keyword\":\n return \"C084FC\";\n case \"string\":\n return \"86EFAC\";\n case \"comment\":\n return \"64748B\";\n case \"number\":\n return \"FBBF24\";\n case \"builtin\":\n return \"67E8F9\";\n case \"punctuation\":\n return \"CBD5E1\";\n default:\n return \"F8FAFC\";\n }\n },\n\n supportedLanguages(): string[] {\n return [\"javascript\", \"typescript\", \"jsx\", \"tsx\", \"php\", \"json\", \"bash\", \"shell\", \"css\", \"python\", \"html\", \"xml\"];\n },\n};\n\nfunction coalesce(tokens: Token[]): Token[] {\n const out: Token[] = [];\n for (const t of tokens) {\n const last = out[out.length - 1];\n if (last && last.kind === t.kind) {\n last.text += t.text;\n continue;\n }\n out.push({ ...t });\n }\n return out;\n}\n","/**\n * XML escaping for the PPTX writer. Mirrors PHP `Helpers\\Xml`:\n * - text(): ENT_XML1 | ENT_COMPAT — escapes & < > \" (NOT apostrophe)\n * - attr(): ENT_XML1 | ENT_QUOTES — escapes & < > \" '\n * - declaration(): trailing newline included (matches PHP byte output)\n */\nexport const Xml = {\n text(s: string): string {\n return s.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n },\n\n attr(s: string): string {\n return s\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&apos;\");\n },\n\n declaration(standalone = true): string {\n const sa = standalone ? ' standalone=\"yes\"' : \"\";\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"${sa}?>\\n`;\n },\n};\n","/**\n * PPTX (Office Open XML) writer. Faithful 1:1 port of PHP\n * `DarkSlide\\Writer\\PptxWriter`. Builds the archive entirely in memory and\n * returns its bytes via the vendored `zipSync`. Every emitted string mirrors\n * the PHP writer byte-for-byte.\n */\n\nimport { ChartTranslator, type ChartSpec } from \"../helpers/chart-translator\";\nimport { Color } from \"../helpers/color\";\nimport { Emu } from \"../helpers/emu\";\nimport { MarkdownInline } from \"../helpers/markdown-inline\";\nimport { SyntaxHighlighter } from \"../helpers/syntax-highlighter\";\nimport { Xml } from \"../helpers/xml\";\nimport { Schema } from \"../schema/schema\";\nimport { isNumeric, isPlainObject } from \"../util\";\nimport { zipSync } from \"../zip\";\n\nconst NS_CHART = \"http://schemas.openxmlformats.org/drawingml/2006/chart\";\n\nconst LAYOUT_ORDER = [\n \"blank\",\n \"title\",\n \"title-content\",\n \"two-column\",\n \"section-divider\",\n \"image-text\",\n \"text-image\",\n \"quote\",\n];\n\nconst CHART_PALETTE = [\"8B5CF6\", \"EC4899\", \"06B6D4\", \"F59E0B\", \"10B981\", \"3B82F6\", \"EF4444\", \"A855F7\"];\n\nconst ENCODER = new TextEncoder();\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Any = any;\n\ninterface Rel {\n id: string;\n type: string;\n target: string;\n mode?: string;\n}\n\ninterface MediaData {\n bytes: Uint8Array;\n mime: string;\n}\n\ninterface StagedMedia {\n relId: string;\n target: string;\n bytes: Uint8Array;\n}\n\ninterface AnimatedBuild {\n shapeId: number;\n arrayIndex: number;\n animation: Record<string, Any>;\n paragraphCount: number | null;\n}\n\ninterface SubBuild {\n shapeId: number;\n arrayIndex: number;\n animation: Record<string, Any>;\n paragraph: number | null;\n}\n\nfunction base64Decode(b64: string): Uint8Array {\n if (typeof Buffer !== \"undefined\") {\n const buf = Buffer.from(b64, \"base64\");\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n // eslint-disable-next-line no-undef\n const bin = atob(b64);\n const out = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);\n return out;\n}\n\n/** PHP `(int)` truncation toward zero. */\nfunction toInt(v: Any): number {\n const n = typeof v === \"number\" ? v : parseFloat(String(v));\n if (!Number.isFinite(n)) return 0;\n return Math.trunc(n);\n}\n\nexport class PptxWriter {\n private mediaCounter = 0;\n private chartCounter = 0;\n /** Ordered list of media files queued for the archive. */\n private mediaFiles: { path: string; bytes: Uint8Array }[] = [];\n /** Ordered list of chart part XML queued for the archive. */\n private chartFiles: { path: string; xml: string }[] = [];\n private themeAccent = \"8B5CF6\";\n private tnId = 0;\n private pendingSlideRels: Record<number, Rel[]> = {};\n\n constructor(\n private tempDir: string | null = null,\n private allowHttpImages = false,\n ) {}\n\n write(): never {\n throw new Error(\"PptxWriter.write is Node-only; use Agent.write\");\n }\n\n toBytes(deck: Any): Uint8Array {\n this.mediaCounter = 0;\n this.chartCounter = 0;\n this.mediaFiles = [];\n this.chartFiles = [];\n this.pendingSlideRels = {};\n [this.themeAccent] = Color.parse((deck?.theme?.colors?.accent ?? \"#8B5CF6\") as string, \"8B5CF6\");\n\n const slides: Any[] = deck?.slides ?? [];\n const slideCount = slides.length;\n\n const files: { name: string; data: Uint8Array }[] = [];\n const add = (name: string, content: string | Uint8Array) => {\n files.push({ name, data: typeof content === \"string\" ? ENCODER.encode(content) : content });\n };\n\n // 1. Stage every text-based part first so media/chart references register\n // before [Content_Types].xml is written.\n const slidesXml: Record<number, string> = {};\n const notesSlidesXml: Record<number, string> = {};\n slides.forEach((slide, i) => {\n const oneBased = i + 1;\n slidesXml[oneBased] = this.buildSlideXml(slide, oneBased, deck);\n if (slide && slide.notes) {\n notesSlidesXml[oneBased] = this.buildNotesSlideXml(slide, oneBased);\n }\n });\n\n const notesIds = Object.keys(notesSlidesXml).map((k) => parseInt(k, 10));\n const chartPartPaths = this.chartFiles.map((c) => c.path);\n\n // 2. Top-level + ppt-level scaffolding.\n add(\"[Content_Types].xml\", this.buildContentTypes(slideCount, notesIds, chartPartPaths));\n add(\"_rels/.rels\", this.buildTopRels());\n add(\"docProps/core.xml\", this.buildCoreProps(deck));\n add(\"docProps/app.xml\", this.buildAppProps(slideCount));\n\n add(\"ppt/presentation.xml\", this.buildPresentation(slideCount));\n add(\"ppt/_rels/presentation.xml.rels\", this.buildPresentationRels(slideCount));\n\n add(\"ppt/theme/theme1.xml\", this.buildTheme(deck));\n add(\"ppt/slideMasters/slideMaster1.xml\", this.buildSlideMaster());\n add(\"ppt/slideMasters/_rels/slideMaster1.xml.rels\", this.buildSlideMasterRels());\n\n // 3. Slide layout parts.\n LAYOUT_ORDER.forEach((layoutName, idx) => {\n const n = idx + 1;\n add(`ppt/slideLayouts/slideLayout${n}.xml`, this.buildSlideLayout(layoutName));\n add(`ppt/slideLayouts/_rels/slideLayout${n}.xml.rels`, this.buildSlideLayoutRels());\n });\n\n // 4. Slide parts.\n for (let i = 1; i <= slideCount; i++) {\n const xml = slidesXml[i]!;\n const layoutNum = this.layoutNumberFor(slides[i - 1]?.layout ?? null);\n add(`ppt/slides/slide${i}.xml`, xml);\n add(`ppt/slides/_rels/slide${i}.xml.rels`, this.buildSlideRels(i, notesSlidesXml[i] !== undefined, layoutNum));\n }\n\n // 5. Notes slide parts.\n for (const i of notesIds) {\n add(`ppt/notesSlides/notesSlide${i}.xml`, notesSlidesXml[i]!);\n add(`ppt/notesSlides/_rels/notesSlide${i}.xml.rels`, this.buildNotesSlideRels(i));\n }\n\n // 6. Native chart parts.\n for (const chart of this.chartFiles) {\n add(chart.path, chart.xml);\n }\n\n // 7. Embedded media files.\n for (const media of this.mediaFiles) {\n add(media.path, media.bytes);\n }\n\n return zipSync(files);\n }\n\n // ─── Top-level parts ───────────────────────────────────────────────────\n\n private buildContentTypes(slideCount: number, notesSlideIds: number[], chartParts: string[]): string {\n let slideOverrides = \"\";\n for (let i = 1; i <= slideCount; i++) {\n slideOverrides +=\n '<Override PartName=\"/ppt/slides/slide' +\n i +\n '.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\"/>';\n }\n let layoutOverrides = \"\";\n LAYOUT_ORDER.forEach((_, idx) => {\n const n = idx + 1;\n layoutOverrides +=\n '<Override PartName=\"/ppt/slideLayouts/slideLayout' +\n n +\n '.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml\"/>';\n });\n let notesOverrides = \"\";\n for (const i of notesSlideIds) {\n notesOverrides +=\n '<Override PartName=\"/ppt/notesSlides/notesSlide' +\n i +\n '.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml\"/>';\n }\n let chartOverrides = \"\";\n for (const archivePath of chartParts) {\n chartOverrides +=\n '<Override PartName=\"/' +\n archivePath +\n '\" ContentType=\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\"/>';\n }\n\n const extensionDefaults =\n '<Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>' +\n '<Default Extension=\"xml\" ContentType=\"application/xml\"/>' +\n '<Default Extension=\"png\" ContentType=\"image/png\"/>' +\n '<Default Extension=\"jpg\" ContentType=\"image/jpeg\"/>' +\n '<Default Extension=\"jpeg\" ContentType=\"image/jpeg\"/>' +\n '<Default Extension=\"gif\" ContentType=\"image/gif\"/>' +\n '<Default Extension=\"svg\" ContentType=\"image/svg+xml\"/>' +\n '<Default Extension=\"webp\" ContentType=\"image/webp\"/>';\n\n return (\n Xml.declaration() +\n '<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">' +\n extensionDefaults +\n '<Override PartName=\"/ppt/presentation.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\"/>' +\n '<Override PartName=\"/ppt/slideMasters/slideMaster1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml\"/>' +\n layoutOverrides +\n '<Override PartName=\"/ppt/theme/theme1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.theme+xml\"/>' +\n slideOverrides +\n notesOverrides +\n chartOverrides +\n '<Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\"/>' +\n '<Override PartName=\"/docProps/app.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.extended-properties+xml\"/>' +\n \"</Types>\"\n );\n }\n\n private buildTopRels(): string {\n return (\n Xml.declaration() +\n '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' +\n '<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"ppt/presentation.xml\"/>' +\n '<Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\" Target=\"docProps/core.xml\"/>' +\n '<Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\" Target=\"docProps/app.xml\"/>' +\n \"</Relationships>\"\n );\n }\n\n private buildCoreProps(deck: Any): string {\n const title = Xml.text(String(deck?.title ?? \"Untitled\"));\n const author =\n deck?.metadata?.author !== undefined && deck?.metadata?.author !== null\n ? Xml.text(String(deck.metadata.author))\n : \"Dark Slide\";\n const now = new Date().toISOString().replace(/\\.\\d{3}Z$/, \"Z\");\n\n return (\n Xml.declaration() +\n '<cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">' +\n `<dc:title>${title}</dc:title>` +\n `<dc:creator>${author}</dc:creator>` +\n `<cp:lastModifiedBy>${author}</cp:lastModifiedBy>` +\n `<dcterms:created xsi:type=\"dcterms:W3CDTF\">${now}</dcterms:created>` +\n `<dcterms:modified xsi:type=\"dcterms:W3CDTF\">${now}</dcterms:modified>` +\n \"</cp:coreProperties>\"\n );\n }\n\n private buildAppProps(slideCount: number): string {\n return (\n Xml.declaration() +\n '<Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\" xmlns:vt=\"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes\">' +\n \"<Application>DarkSlide</Application>\" +\n \"<AppVersion>0.4.0</AppVersion>\" +\n `<Slides>${slideCount}</Slides>` +\n \"</Properties>\"\n );\n }\n\n // ─── presentation.xml ──────────────────────────────────────────────────\n\n private buildPresentation(slideCount: number): string {\n let sldIdLst = \"\";\n for (let i = 1; i <= slideCount; i++) {\n const id = 256 + (i - 1);\n sldIdLst += '<p:sldId id=\"' + id + '\" r:id=\"rId' + (i + 1) + '\"/>';\n }\n const slideMasterRid = \"rId\" + (slideCount + 2);\n\n return (\n Xml.declaration() +\n '<p:presentation xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" ' +\n 'xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" ' +\n 'xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\" ' +\n 'saveSubsetFonts=\"1\">' +\n '<p:sldMasterIdLst><p:sldMasterId id=\"2147483648\" r:id=\"' + slideMasterRid + '\"/></p:sldMasterIdLst>' +\n '<p:sldIdLst>' + sldIdLst + '</p:sldIdLst>' +\n '<p:sldSz cx=\"' + Emu.DEFAULT_SLIDE_WIDTH + '\" cy=\"' + Emu.DEFAULT_SLIDE_HEIGHT + '\" type=\"screen16x9\"/>' +\n '<p:notesSz cx=\"' + Emu.DEFAULT_SLIDE_HEIGHT + '\" cy=\"' + Emu.DEFAULT_SLIDE_WIDTH + '\"/>' +\n \"</p:presentation>\"\n );\n }\n\n private buildPresentationRels(slideCount: number): string {\n let rels =\n '<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\" Target=\"theme/theme1.xml\"/>';\n for (let i = 1; i <= slideCount; i++) {\n rels +=\n '<Relationship Id=\"rId' +\n (i + 1) +\n '\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide\" Target=\"slides/slide' +\n i +\n '.xml\"/>';\n }\n rels +=\n '<Relationship Id=\"rId' +\n (slideCount + 2) +\n '\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster\" Target=\"slideMasters/slideMaster1.xml\"/>';\n\n return (\n Xml.declaration() +\n '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' +\n rels +\n \"</Relationships>\"\n );\n }\n\n // ─── theme / master / layout ───────────────────────────────────────────\n\n private buildTheme(deck: Any): string {\n const colors: Any = deck?.theme?.colors ?? {};\n const [bg] = Color.parse(colors.background ?? \"#FFFFFF\", \"FFFFFF\");\n const [text] = Color.parse(colors.text ?? \"#0F172A\", \"0F172A\");\n const [accent] = Color.parse(colors.accent ?? \"#8B5CF6\", \"8B5CF6\");\n const [muted] = Color.parse(colors.muted ?? \"#44546A\", \"44546A\");\n const [surface] = Color.parse(colors.surface ?? \"#E7E6E6\", \"E7E6E6\");\n\n const heading = Xml.attr(String(deck?.theme?.fonts?.heading ?? \"Calibri\"));\n const body = Xml.attr(String(deck?.theme?.fonts?.body ?? \"Calibri\"));\n\n const palette = [...CHART_PALETTE];\n palette[0] = accent;\n\n return (\n Xml.declaration() +\n '<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"DarkSlide\">' +\n \"<a:themeElements>\" +\n '<a:clrScheme name=\"DarkSlide\">' +\n '<a:dk1><a:srgbClr val=\"' + text + '\"/></a:dk1>' +\n '<a:lt1><a:srgbClr val=\"' + bg + '\"/></a:lt1>' +\n '<a:dk2><a:srgbClr val=\"' + muted + '\"/></a:dk2>' +\n '<a:lt2><a:srgbClr val=\"' + surface + '\"/></a:lt2>' +\n '<a:accent1><a:srgbClr val=\"' + palette[0] + '\"/></a:accent1>' +\n '<a:accent2><a:srgbClr val=\"' + palette[1] + '\"/></a:accent2>' +\n '<a:accent3><a:srgbClr val=\"' + palette[2] + '\"/></a:accent3>' +\n '<a:accent4><a:srgbClr val=\"' + palette[3] + '\"/></a:accent4>' +\n '<a:accent5><a:srgbClr val=\"' + palette[4] + '\"/></a:accent5>' +\n '<a:accent6><a:srgbClr val=\"' + palette[5] + '\"/></a:accent6>' +\n '<a:hlink><a:srgbClr val=\"0563C1\"/></a:hlink>' +\n '<a:folHlink><a:srgbClr val=\"954F72\"/></a:folHlink>' +\n \"</a:clrScheme>\" +\n '<a:fontScheme name=\"DarkSlide\">' +\n '<a:majorFont><a:latin typeface=\"' + heading + '\"/><a:ea typeface=\"\"/><a:cs typeface=\"\"/></a:majorFont>' +\n '<a:minorFont><a:latin typeface=\"' + body + '\"/><a:ea typeface=\"\"/><a:cs typeface=\"\"/></a:minorFont>' +\n \"</a:fontScheme>\" +\n '<a:fmtScheme name=\"DarkSlide\">' +\n '<a:fillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill></a:fillStyleLst>' +\n '<a:lnStyleLst><a:ln w=\"6350\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill></a:ln><a:ln w=\"12700\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill></a:ln><a:ln w=\"19050\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill></a:ln></a:lnStyleLst>' +\n '<a:effectStyleLst><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle></a:effectStyleLst>' +\n '<a:bgFillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill></a:bgFillStyleLst>' +\n \"</a:fmtScheme>\" +\n \"</a:themeElements>\" +\n \"</a:theme>\"\n );\n }\n\n private buildSlideMaster(): string {\n return (\n Xml.declaration() +\n '<p:sldMaster xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" ' +\n 'xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" ' +\n 'xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">' +\n '<p:cSld><p:bg><p:bgRef idx=\"1001\"><a:schemeClr val=\"bg1\"/></p:bgRef></p:bg>' +\n \"<p:spTree>\" +\n '<p:nvGrpSpPr><p:cNvPr id=\"1\" name=\"\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>' +\n '<p:grpSpPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/><a:chOff x=\"0\" y=\"0\"/><a:chExt cx=\"0\" cy=\"0\"/></a:xfrm></p:grpSpPr>' +\n \"</p:spTree>\" +\n \"</p:cSld>\" +\n '<p:clrMap bg1=\"lt1\" tx1=\"dk1\" bg2=\"lt2\" tx2=\"dk2\" accent1=\"accent1\" accent2=\"accent2\" accent3=\"accent3\" accent4=\"accent4\" accent5=\"accent5\" accent6=\"accent6\" hlink=\"hlink\" folHlink=\"folHlink\"/>' +\n \"<p:sldLayoutIdLst>\" + this.buildSlideLayoutIdLst() + \"</p:sldLayoutIdLst>\" +\n \"<p:txStyles>\" +\n '<p:titleStyle><a:lvl1pPr algn=\"ctr\"><a:defRPr sz=\"4400\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill></a:defRPr></a:lvl1pPr></p:titleStyle>' +\n '<p:bodyStyle><a:lvl1pPr><a:defRPr sz=\"2400\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill></a:defRPr></a:lvl1pPr></p:bodyStyle>' +\n \"<p:otherStyle/>\" +\n \"</p:txStyles>\" +\n \"</p:sldMaster>\"\n );\n }\n\n private buildSlideLayoutIdLst(): string {\n let out = \"\";\n LAYOUT_ORDER.forEach((_, idx) => {\n const n = idx + 1;\n const id = 2147483648 + n;\n out += '<p:sldLayoutId id=\"' + id + '\" r:id=\"rId' + n + '\"/>';\n });\n return out;\n }\n\n private buildSlideMasterRels(): string {\n let rels = \"\";\n LAYOUT_ORDER.forEach((_, idx) => {\n const n = idx + 1;\n rels +=\n '<Relationship Id=\"rId' +\n n +\n '\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout\" Target=\"../slideLayouts/slideLayout' +\n n +\n '.xml\"/>';\n });\n const themeRid = \"rId\" + (LAYOUT_ORDER.length + 1);\n rels +=\n '<Relationship Id=\"' +\n themeRid +\n '\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\" Target=\"../theme/theme1.xml\"/>';\n\n return (\n Xml.declaration() +\n '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' +\n rels +\n \"</Relationships>\"\n );\n }\n\n private layoutNumberFor(layout: string | null): number {\n if (layout === null || layout === undefined) {\n return 1;\n }\n const idx = LAYOUT_ORDER.indexOf(layout);\n return idx === -1 ? 1 : idx + 1;\n }\n\n private layoutTypeFor(layout: string): string {\n switch (layout) {\n case \"title\":\n return \"title\";\n case \"title-content\":\n return \"obj\";\n case \"two-column\":\n return \"twoObj\";\n case \"section-divider\":\n return \"secHead\";\n case \"image-text\":\n case \"text-image\":\n return \"picTx\";\n case \"quote\":\n return \"obj\";\n default:\n return \"blank\";\n }\n }\n\n private buildSlideLayout(layout: string): string {\n const type = this.layoutTypeFor(layout);\n const name = Xml.attr(ucwords(layout.replace(/-/g, \" \")));\n\n return (\n Xml.declaration() +\n '<p:sldLayout xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" ' +\n 'xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" ' +\n 'xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\" ' +\n 'type=\"' + type + '\" preserve=\"1\">' +\n '<p:cSld name=\"' + name + '\">' +\n \"<p:spTree>\" +\n '<p:nvGrpSpPr><p:cNvPr id=\"1\" name=\"\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>' +\n '<p:grpSpPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/><a:chOff x=\"0\" y=\"0\"/><a:chExt cx=\"0\" cy=\"0\"/></a:xfrm></p:grpSpPr>' +\n \"</p:spTree>\" +\n \"</p:cSld>\" +\n \"<p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr>\" +\n \"</p:sldLayout>\"\n );\n }\n\n private buildSlideLayoutRels(): string {\n return (\n Xml.declaration() +\n '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' +\n '<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster\" Target=\"../slideMasters/slideMaster1.xml\"/>' +\n \"</Relationships>\"\n );\n }\n\n // ─── Per-slide rendering ──────────────────────────────────────────────\n\n private buildSlideXml(slide: Any, slideNumber: number, deck: Any = {}): string {\n const elements: Any[] = [...(slide?.elements ?? [])];\n elements.sort((a, b) => (a?.z ?? -1) - (b?.z ?? -1));\n\n let shapeId = 2;\n let shapeTreeXml = \"\";\n let slideRels: Rel[] = [];\n\n const bgResult = this.buildBackground(slide?.background ?? null, slideNumber, slideRels);\n const bg = bgResult.xml;\n slideRels = bgResult.rels;\n\n const animatedBuilds: AnimatedBuild[] = [];\n\n elements.forEach((element, arrayIndex) => {\n if (!isPlainObject(element) || element.type === undefined) {\n return;\n }\n if (element.hidden) {\n return;\n }\n const [xml, rels] = this.buildElementXml(element, shapeId, slideNumber);\n if (xml === \"\") {\n return;\n }\n shapeTreeXml += xml;\n slideRels = slideRels.concat(rels);\n\n if (isPlainObject(element.animation) && element.animation.effect !== undefined) {\n let paragraphCount: number | null = null;\n if (element.type === \"text\" && element.animation.byParagraph) {\n paragraphCount = String(element.content ?? \"\").split(\"\\n\").length;\n }\n\n animatedBuilds.push({\n shapeId,\n arrayIndex,\n animation: element.animation,\n paragraphCount,\n });\n }\n\n shapeId++;\n });\n\n this.pendingSlideRels[slideNumber] = slideRels;\n\n const transition = this.buildTransition(slide?.transition ?? null, deck?.theme?.defaultTransition ?? null);\n const timing = this.buildTiming(animatedBuilds);\n\n return (\n Xml.declaration() +\n '<p:sld xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" ' +\n 'xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" ' +\n 'xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">' +\n \"<p:cSld>\" +\n bg +\n \"<p:spTree>\" +\n '<p:nvGrpSpPr><p:cNvPr id=\"1\" name=\"\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>' +\n '<p:grpSpPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/><a:chOff x=\"0\" y=\"0\"/><a:chExt cx=\"0\" cy=\"0\"/></a:xfrm></p:grpSpPr>' +\n shapeTreeXml +\n \"</p:spTree>\" +\n \"</p:cSld>\" +\n transition +\n timing +\n \"</p:sld>\"\n );\n }\n\n private buildTransition(transition: Any, fallback: Any): string {\n let spec: Any = isPlainObject(transition) ? transition : null;\n if (spec === null || (spec.kind ?? null) === null || (spec.kind ?? null) === \"none\") {\n spec = isPlainObject(fallback) ? fallback : null;\n }\n if (spec === null) {\n return \"\";\n }\n\n const kind = typeof spec.kind === \"string\" ? String(spec.kind).toLowerCase() : \"none\";\n if (kind === \"none\" || !(Schema.SLIDE_TRANSITION_KINDS as readonly string[]).includes(kind)) {\n return \"\";\n }\n\n const spd = this.transitionSpeed(spec.duration ?? null);\n\n let effect: string;\n switch (kind) {\n case \"fade\":\n effect = \"<p:fade/>\";\n break;\n case \"slide\":\n effect = '<p:push dir=\"' + this.transitionDirection(spec.direction ?? null) + '\"/>';\n break;\n case \"zoom\":\n effect = \"<p:circle/>\";\n break;\n default:\n effect = \"\";\n }\n if (effect === \"\") {\n return \"\";\n }\n\n return '<p:transition spd=\"' + spd + '\">' + effect + \"</p:transition>\";\n }\n\n private transitionSpeed(duration: Any): string {\n if (!isNumeric(duration)) {\n return \"med\";\n }\n const ms = parseFloat(String(duration));\n if (ms >= 700) {\n return \"slow\";\n }\n if (ms <= 250) {\n return \"fast\";\n }\n return \"med\";\n }\n\n private transitionDirection(direction: Any): string {\n switch (typeof direction === \"string\" ? direction.toLowerCase() : \"\") {\n case \"left\":\n return \"l\";\n case \"right\":\n return \"r\";\n case \"up\":\n return \"u\";\n case \"down\":\n return \"d\";\n default:\n return \"l\";\n }\n }\n\n // ─── Element entrance animations (`<p:timing>`) ───────────────────────────\n\n private buildTiming(builds: AnimatedBuild[]): string {\n if (builds.length === 0) {\n return \"\";\n }\n\n const sorted = [...builds];\n sorted.sort((a, b) => {\n const ao = isNumeric(a.animation.order) ? parseFloat(String(a.animation.order)) : 0;\n const bo = isNumeric(b.animation.order) ? parseFloat(String(b.animation.order)) : 0;\n if (ao !== bo) {\n return ao < bo ? -1 : 1;\n }\n return a.arrayIndex - b.arrayIndex;\n });\n\n const subBuilds: SubBuild[] = [];\n for (const build of sorted) {\n const paragraphCount = build.paragraphCount ?? null;\n if (paragraphCount === null || paragraphCount <= 1) {\n subBuilds.push({\n shapeId: build.shapeId,\n arrayIndex: build.arrayIndex,\n animation: build.animation,\n paragraph: paragraphCount === null ? null : 0,\n });\n continue;\n }\n\n for (let i = 0; i < paragraphCount; i++) {\n const animation: Record<string, Any> = { ...build.animation };\n if (i > 0) {\n animation.trigger = \"on-click\";\n }\n subBuilds.push({\n shapeId: build.shapeId,\n arrayIndex: build.arrayIndex,\n animation,\n paragraph: i,\n });\n }\n }\n\n const steps: SubBuild[][] = [];\n for (const build of subBuilds) {\n const trigger = this.animationTrigger(build.animation.trigger ?? null);\n if (steps.length === 0 || trigger === \"on-click\") {\n steps.push([build]);\n } else {\n steps[steps.length - 1]!.push(build);\n }\n }\n\n this.tnId = 1;\n const rootId = this.tnId++;\n\n let stepPars = \"\";\n for (const step of steps) {\n stepPars += this.buildStepPar(step);\n }\n\n const mainSeqId = this.tnId++;\n\n return (\n \"<p:timing>\" +\n \"<p:tnLst>\" +\n \"<p:par>\" +\n '<p:cTn id=\"' + rootId + '\" dur=\"indefinite\" restart=\"never\" nodeType=\"tmRoot\">' +\n \"<p:childTnLst>\" +\n '<p:seq concurrent=\"1\" nextAc=\"seek\">' +\n '<p:cTn id=\"' + mainSeqId + '\" dur=\"indefinite\" nodeType=\"mainSeq\">' +\n \"<p:childTnLst>\" +\n stepPars +\n \"</p:childTnLst>\" +\n \"</p:cTn>\" +\n '<p:prevCondLst><p:cond evt=\"onPrev\" delay=\"0\"><p:tgtEl><p:sldTgt/></p:tgtEl></p:cond></p:prevCondLst>' +\n '<p:nextCondLst><p:cond evt=\"onNext\" delay=\"0\"><p:tgtEl><p:sldTgt/></p:tgtEl></p:cond></p:nextCondLst>' +\n \"</p:seq>\" +\n \"</p:childTnLst>\" +\n \"</p:cTn>\" +\n \"</p:par>\" +\n \"</p:tnLst>\" +\n \"</p:timing>\"\n );\n }\n\n private buildTargetEl(spid: number, paragraph: number | null): string {\n if (paragraph === null) {\n return '<p:tgtEl><p:spTgt spid=\"' + spid + '\"/></p:tgtEl>';\n }\n return (\n '<p:tgtEl><p:spTgt spid=\"' + spid + '\">' +\n '<p:txEl><p:pRg st=\"' + paragraph + '\" end=\"' + paragraph + '\"/></p:txEl>' +\n \"</p:spTgt></p:tgtEl>\"\n );\n }\n\n private buildStepPar(step: SubBuild[]): string {\n const lead = step[0]!;\n const leadDelay = this.animationDelay(lead.animation);\n const leadDuration = this.animationDuration(lead.animation);\n\n let childTns = \"\";\n step.forEach((build, i) => {\n let begin: number;\n if (i === 0) {\n begin = leadDelay;\n } else {\n const trigger = this.animationTrigger(build.animation.trigger ?? null);\n const base = trigger === \"after-prev\" ? leadDelay + leadDuration : leadDelay;\n begin = base + this.animationDelay(build.animation);\n }\n childTns += this.buildEffectPar(build, begin);\n });\n\n const stepId = this.tnId++;\n\n return (\n \"<p:par>\" +\n '<p:cTn id=\"' + stepId + '\" fill=\"hold\">' +\n '<p:stCondLst><p:cond delay=\"indefinite\"/></p:stCondLst>' +\n \"<p:childTnLst>\" +\n childTns +\n \"</p:childTnLst>\" +\n \"</p:cTn>\" +\n \"</p:par>\"\n );\n }\n\n private buildEffectPar(build: SubBuild, beginMs: number): string {\n const spid = build.shapeId;\n const paragraph = build.paragraph;\n const animation = build.animation;\n const effect = this.animationEffect(animation.effect ?? null);\n const duration = this.animationDuration(animation);\n const direction = this.animationDirection(animation.direction ?? null);\n\n const wrapId = this.tnId++;\n\n const stCond = '<p:stCondLst><p:cond delay=\"' + Math.max(0, beginMs) + '\"/></p:stCondLst>';\n\n let effectXml: string;\n switch (effect) {\n case \"fly-in\":\n effectXml = this.buildFlyInEffect(spid, duration, direction, paragraph);\n break;\n case \"zoom\":\n effectXml = this.buildZoomEffect(spid, duration, paragraph);\n break;\n case \"wipe\":\n effectXml = this.buildWipeEffect(spid, duration, direction, paragraph);\n break;\n default:\n effectXml = this.buildFadeEffect(spid, duration, paragraph);\n }\n\n const presetId = this.animationPresetId(effect);\n\n return (\n \"<p:par>\" +\n '<p:cTn id=\"' + wrapId + '\" presetID=\"' + presetId + '\" presetClass=\"entr\" presetSubtype=\"0\" fill=\"hold\">' +\n stCond +\n \"<p:childTnLst>\" +\n effectXml +\n \"</p:childTnLst>\" +\n \"</p:cTn>\" +\n \"</p:par>\"\n );\n }\n\n private animationPresetId(effect: string): number {\n switch (effect) {\n case \"fly-in\":\n return 2;\n case \"wipe\":\n return 22;\n case \"zoom\":\n return 23;\n default:\n return 10;\n }\n }\n\n private buildVisibilitySet(spid: number, paragraph: number | null = null): string {\n const id = this.tnId++;\n\n return (\n \"<p:set>\" +\n \"<p:cBhvr>\" +\n '<p:cTn id=\"' + id + '\" dur=\"1\" fill=\"hold\">' +\n '<p:stCondLst><p:cond delay=\"0\"/></p:stCondLst>' +\n \"</p:cTn>\" +\n this.buildTargetEl(spid, paragraph) +\n \"<p:attrNameLst><p:attrName>style.visibility</p:attrName></p:attrNameLst>\" +\n \"</p:cBhvr>\" +\n '<p:to><p:strVal val=\"visible\"/></p:to>' +\n \"</p:set>\"\n );\n }\n\n private buildFadeEffect(spid: number, durationMs: number, paragraph: number | null = null): string {\n const set = this.buildVisibilitySet(spid, paragraph);\n const id = this.tnId++;\n\n const effect =\n '<p:animEffect transition=\"in\" filter=\"fade\">' +\n \"<p:cBhvr>\" +\n '<p:cTn id=\"' + id + '\" dur=\"' + durationMs + '\"/>' +\n this.buildTargetEl(spid, paragraph) +\n \"</p:cBhvr>\" +\n \"</p:animEffect>\";\n\n return set + effect;\n }\n\n private buildFlyInEffect(spid: number, durationMs: number, direction: string, paragraph: number | null = null): string {\n const set = this.buildVisibilitySet(spid, paragraph);\n\n let attr: string, fromExpr: string, toExpr: string;\n switch (direction) {\n case \"right\":\n [attr, fromExpr, toExpr] = [\"ppt_x\", \"1+#ppt_w/2\", \"#ppt_x\"];\n break;\n case \"up\":\n [attr, fromExpr, toExpr] = [\"ppt_y\", \"0-#ppt_h/2\", \"#ppt_y\"];\n break;\n case \"down\":\n [attr, fromExpr, toExpr] = [\"ppt_y\", \"1+#ppt_h/2\", \"#ppt_y\"];\n break;\n default:\n [attr, fromExpr, toExpr] = [\"ppt_x\", \"0-#ppt_w/2\", \"#ppt_x\"];\n }\n\n const id = this.tnId++;\n\n const anim =\n '<p:anim calcmode=\"lin\" valueType=\"num\">' +\n '<p:cBhvr additive=\"base\">' +\n '<p:cTn id=\"' + id + '\" dur=\"' + durationMs + '\" fill=\"hold\"/>' +\n this.buildTargetEl(spid, paragraph) +\n \"<p:attrNameLst><p:attrName>\" + attr + \"</p:attrName></p:attrNameLst>\" +\n \"</p:cBhvr>\" +\n \"<p:tavLst>\" +\n '<p:tav tm=\"0\"><p:val><p:strVal val=\"' + fromExpr + '\"/></p:val></p:tav>' +\n '<p:tav tm=\"100000\"><p:val><p:strVal val=\"' + toExpr + '\"/></p:val></p:tav>' +\n \"</p:tavLst>\" +\n \"</p:anim>\";\n\n return set + anim;\n }\n\n private buildZoomEffect(spid: number, durationMs: number, paragraph: number | null = null): string {\n const set = this.buildVisibilitySet(spid, paragraph);\n const fadeId = this.tnId++;\n const scaleId = this.tnId++;\n\n const fade =\n '<p:animEffect transition=\"in\" filter=\"fade\">' +\n \"<p:cBhvr>\" +\n '<p:cTn id=\"' + fadeId + '\" dur=\"' + durationMs + '\"/>' +\n this.buildTargetEl(spid, paragraph) +\n \"</p:cBhvr>\" +\n \"</p:animEffect>\";\n\n const scale =\n \"<p:animScale>\" +\n \"<p:cBhvr>\" +\n '<p:cTn id=\"' + scaleId + '\" dur=\"' + durationMs + '\" fill=\"hold\"/>' +\n this.buildTargetEl(spid, paragraph) +\n \"</p:cBhvr>\" +\n '<p:from x=\"0\" y=\"0\"/>' +\n '<p:to x=\"100000\" y=\"100000\"/>' +\n \"</p:animScale>\";\n\n return set + fade + scale;\n }\n\n private buildWipeEffect(spid: number, durationMs: number, direction: string, paragraph: number | null = null): string {\n const set = this.buildVisibilitySet(spid, paragraph);\n\n let filter: string;\n switch (direction) {\n case \"right\":\n filter = \"wipe(left)\";\n break;\n case \"up\":\n filter = \"wipe(down)\";\n break;\n case \"down\":\n filter = \"wipe(up)\";\n break;\n default:\n filter = \"wipe(right)\";\n }\n\n const id = this.tnId++;\n\n const effect =\n '<p:animEffect transition=\"in\" filter=\"' + filter + '\">' +\n \"<p:cBhvr>\" +\n '<p:cTn id=\"' + id + '\" dur=\"' + durationMs + '\"/>' +\n this.buildTargetEl(spid, paragraph) +\n \"</p:cBhvr>\" +\n \"</p:animEffect>\";\n\n return set + effect;\n }\n\n private animationEffect(effect: Any): string {\n const name = typeof effect === \"string\" ? effect.toLowerCase() : \"\";\n return (Schema.ANIMATION_EFFECTS as readonly string[]).includes(name) ? name : \"fade\";\n }\n\n private animationTrigger(trigger: Any): string {\n const name = typeof trigger === \"string\" ? trigger.toLowerCase() : \"\";\n return (Schema.ANIMATION_TRIGGERS as readonly string[]).includes(name) ? name : \"on-click\";\n }\n\n private animationDirection(direction: Any): string {\n const name = typeof direction === \"string\" ? direction.toLowerCase() : \"\";\n return (Schema.ANIMATION_DIRECTIONS as readonly string[]).includes(name) ? name : \"left\";\n }\n\n private animationDuration(animation: Record<string, Any>): number {\n const duration = isNumeric(animation.duration)\n ? Math.round(parseFloat(String(animation.duration)))\n : Schema.ANIMATION_DEFAULT_DURATION_MS;\n return Math.max(1, duration);\n }\n\n private animationDelay(animation: Record<string, Any>): number {\n const delay = isNumeric(animation.delay) ? Math.round(parseFloat(String(animation.delay))) : 0;\n return Math.max(0, delay);\n }\n\n // ─── Background ───────────────────────────────────────────────────────\n\n private buildBackground(bg: Any, slideNumber: number, rels: Rel[]): { xml: string; rels: Rel[] } {\n if (!isPlainObject(bg)) {\n return { xml: \"\", rels };\n }\n\n if (typeof bg.image === \"string\" && bg.image !== \"\") {\n const embed = this.stageMedia(bg.image, slideNumber);\n if (embed !== null) {\n rels.push({\n id: embed.relId,\n type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n target: embed.target,\n });\n\n return {\n xml:\n \"<p:bg><p:bgPr>\" +\n '<a:blipFill dpi=\"0\" rotWithShape=\"1\"><a:blip r:embed=\"' + embed.relId + '\"/><a:srcRect/><a:stretch><a:fillRect/></a:stretch></a:blipFill>' +\n \"<a:effectLst/></p:bgPr></p:bg>\",\n rels,\n };\n }\n }\n\n if (typeof bg.gradient === \"string\") {\n const grad = this.parseGradient(bg.gradient);\n if (grad !== null) {\n return { xml: \"<p:bg><p:bgPr>\" + grad + \"<a:effectLst/></p:bgPr></p:bg>\", rels };\n }\n }\n\n if (typeof bg.color === \"string\") {\n const [hex, alpha] = Color.parse(bg.color);\n return {\n xml:\n '<p:bg><p:bgPr><a:solidFill><a:srgbClr val=\"' + hex + '\"><a:alpha val=\"' + alpha + '\"/></a:srgbClr></a:solidFill><a:effectLst/></p:bgPr></p:bg>',\n rels,\n };\n }\n\n return { xml: \"\", rels };\n }\n\n private parseGradient(cssInput: string): string | null {\n const css = cssInput.trim();\n const m = /^linear-gradient\\((.+)\\)\\s*;?\\s*$/i.exec(css);\n if (!m) {\n return null;\n }\n const args = m[1]!;\n\n const parts = this.splitTopLevelCommas(args);\n if (parts.length < 2) {\n return null;\n }\n\n let angleDeg = 90.0;\n const first = parts[0]!.trim();\n const directionLike = /^(?:to\\s+|[-+]?[0-9.]+(?:deg|rad|turn|grad)?\\s*$)/i.test(first);\n if (directionLike) {\n angleDeg = this.parseGradientDirection(first);\n parts.shift();\n }\n\n const stops: { hex: string; pos: number }[] = [];\n const count = parts.length;\n parts.forEach((partRaw, i) => {\n const part = partRaw.trim();\n let colorStr: string;\n let pos: number;\n const sm = /^(.+?)\\s+([0-9.]+%?)\\s*$/.exec(part);\n if (sm) {\n colorStr = sm[1]!;\n const posStr = sm[2]!;\n if (posStr.endsWith(\"%\")) {\n pos = parseFloat(posStr.replace(/%+$/, \"\")) / 100;\n } else {\n pos = parseFloat(posStr);\n }\n } else {\n colorStr = part;\n pos = count <= 1 ? 0.0 : i / (count - 1);\n }\n const [hex] = Color.parse(colorStr);\n stops.push({ hex, pos: Math.max(0.0, Math.min(1.0, pos)) });\n });\n\n let gsList = \"\";\n for (const stop of stops) {\n const pos1000 = Math.round(stop.pos * 100000);\n gsList += '<a:gs pos=\"' + pos1000 + '\"><a:srgbClr val=\"' + stop.hex + '\"/></a:gs>';\n }\n\n let pptxAngle = Math.round((angleDeg - 90) * 60000);\n pptxAngle = ((pptxAngle % (360 * 60000)) + 360 * 60000) % (360 * 60000);\n\n return (\n '<a:gradFill flip=\"none\" rotWithShape=\"1\">' +\n \"<a:gsLst>\" + gsList + \"</a:gsLst>\" +\n '<a:lin ang=\"' + pptxAngle + '\" scaled=\"0\"/>' +\n \"</a:gradFill>\"\n );\n }\n\n private splitTopLevelCommas(s: string): string[] {\n const out: string[] = [];\n let depth = 0;\n let buf = \"\";\n for (let i = 0; i < s.length; i++) {\n const c = s[i]!;\n if (c === \"(\") {\n depth++;\n buf += c;\n } else if (c === \")\") {\n depth = Math.max(0, depth - 1);\n buf += c;\n } else if (c === \",\" && depth === 0) {\n out.push(buf);\n buf = \"\";\n } else {\n buf += c;\n }\n }\n if (buf !== \"\") {\n out.push(buf);\n }\n return out;\n }\n\n private parseGradientDirection(dirInput: string): number {\n const dir = dirInput.trim();\n let m = /^([-+]?[0-9.]+)deg$/i.exec(dir);\n if (m) {\n return parseFloat(m[1]!);\n }\n m = /^([-+]?[0-9.]+)rad$/i.exec(dir);\n if (m) {\n return (parseFloat(m[1]!) * 180) / Math.PI;\n }\n m = /^([-+]?[0-9.]+)turn$/i.exec(dir);\n if (m) {\n return parseFloat(m[1]!) * 360;\n }\n switch (dir.toLowerCase()) {\n case \"to top\":\n return 0;\n case \"to top right\":\n return 45;\n case \"to right\":\n return 90;\n case \"to bottom right\":\n return 135;\n case \"to bottom\":\n return 180;\n case \"to bottom left\":\n return 225;\n case \"to left\":\n return 270;\n case \"to top left\":\n return 315;\n default:\n return 180;\n }\n }\n\n // ─── Element dispatch ─────────────────────────────────────────────────\n\n private buildElementXml(element: Any, shapeId: number, slideNumber: number): [string, Rel[]] {\n const rels: Rel[] = [];\n let xml: string;\n switch (element.type) {\n case \"text\":\n xml = this.buildTextShape(element, shapeId);\n break;\n case \"image\":\n xml = this.buildImageShape(element, shapeId, slideNumber, rels);\n break;\n case \"shape\":\n xml = this.buildShape(element, shapeId);\n break;\n case \"code\":\n xml = this.buildCodeShape(element, shapeId);\n break;\n case \"chart\":\n xml = this.buildChart(element, shapeId, slideNumber, rels);\n break;\n case \"table\":\n xml = this.buildTable(element, shapeId);\n break;\n case \"embed\":\n xml = this.buildPlaceholder(\"[embed: \" + String(element.src ?? \"\") + \"]\", element, shapeId);\n break;\n default:\n xml = \"\";\n }\n\n xml = this.applyHyperlink(xml, element, shapeId, rels);\n\n return [xml, rels];\n }\n\n private applyHyperlink(xml: string, element: Any, shapeId: number, rels: Rel[]): string {\n const href = element.href ?? null;\n if (typeof href !== \"string\" || href === \"\" || xml === \"\") {\n return xml;\n }\n\n const relId = \"rIdLink\" + shapeId;\n rels.push({\n id: relId,\n type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",\n target: href,\n mode: \"External\",\n });\n\n const hlink = '<a:hlinkClick r:id=\"' + relId + '\"/>';\n let count = 0;\n const injected = xml.replace(/<p:cNvPr\\b([^>]*)\\/>/, (_full, attrs: string) => {\n if (count > 0) return _full;\n count++;\n return \"<p:cNvPr\" + attrs + \">\" + hlink + \"</p:cNvPr>\";\n });\n\n return count > 0 ? injected : xml;\n }\n\n // ─── Element renderers ────────────────────────────────────────────────\n\n private buildTextShape(element: Any, shapeId: number): string {\n const xfrm = this.xfrmFromFractions(element);\n const body = this.buildTextBody(\n String(element.content ?? \"\"),\n element.style ?? {},\n String(element.format ?? \"plain\"),\n );\n const id = element.id ?? `text-${shapeId}`;\n\n return (\n \"<p:sp>\" +\n \"<p:nvSpPr>\" +\n '<p:cNvPr id=\"' + shapeId + '\" name=\"' + Xml.attr(String(id)) + '\"/>' +\n '<p:cNvSpPr txBox=\"1\"/>' +\n \"<p:nvPr/>\" +\n \"</p:nvSpPr>\" +\n \"<p:spPr>\" +\n xfrm +\n '<a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>' +\n \"<a:noFill/>\" +\n \"</p:spPr>\" +\n body +\n \"</p:sp>\"\n );\n }\n\n private buildImageShape(element: Any, shapeId: number, slideNumber: number, rels: Rel[]): string {\n const src = String(element.src ?? \"\");\n const embed = this.stageMedia(src, slideNumber);\n if (embed === null) {\n return this.buildPlaceholder(\"[image: \" + src + \"]\", element, shapeId);\n }\n const relId = embed.relId;\n rels.push({\n id: relId,\n type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n target: embed.target,\n });\n\n const id = element.id ?? `image-${shapeId}`;\n const alt = Xml.attr(String(element.alt ?? \"\"));\n const fit = typeof element.fit === \"string\" ? element.fit.toLowerCase() : \"fill\";\n\n const boxX = Emu.fromFracX(toFloat(element.x ?? 0));\n const boxY = Emu.fromFracY(toFloat(element.y ?? 0));\n const boxW = Math.max(1, Emu.fromFracX(toFloat(element.w ?? 0)));\n const boxH = Math.max(1, Emu.fromFracY(toFloat(element.h ?? 0)));\n\n const intrinsic = getImageSize(embed.bytes);\n const imgW = intrinsic ? intrinsic[0] : 0;\n const imgH = intrinsic ? intrinsic[1] : 0;\n\n let offX = boxX;\n let offY = boxY;\n let extW = boxW;\n let extH = boxH;\n let srcRect = \"\";\n\n const explicitCrop = this.imageCropRect(element.crop ?? null);\n if (explicitCrop !== null) {\n srcRect = explicitCrop;\n } else if (fit === \"cover\" && imgW > 0 && imgH > 0) {\n srcRect = this.coverSrcRect(boxW, boxH, imgW, imgH);\n } else if ((fit === \"contain\" || fit === \"scale-down\") && imgW > 0 && imgH > 0) {\n [offX, offY, extW, extH] = this.containedRect(boxX, boxY, boxW, boxH, imgW, imgH);\n }\n\n const blipFill =\n '<p:blipFill><a:blip r:embed=\"' + relId + '\"/>' + srcRect + \"<a:stretch><a:fillRect/></a:stretch></p:blipFill>\";\n\n return (\n \"<p:pic>\" +\n \"<p:nvPicPr>\" +\n '<p:cNvPr id=\"' + shapeId + '\" name=\"' + Xml.attr(String(id)) + '\" descr=\"' + alt + '\"/>' +\n '<p:cNvPicPr><a:picLocks noChangeAspect=\"1\"/></p:cNvPicPr>' +\n \"<p:nvPr/>\" +\n \"</p:nvPicPr>\" +\n blipFill +\n \"<p:spPr>\" +\n '<a:xfrm><a:off x=\"' + offX + '\" y=\"' + offY + '\"/><a:ext cx=\"' + extW + '\" cy=\"' + extH + '\"/></a:xfrm>' +\n '<a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>' +\n \"</p:spPr>\" +\n \"</p:pic>\"\n );\n }\n\n private imageCropRect(crop: Any): string | null {\n if (!isPlainObject(crop)) {\n return null;\n }\n const x = isNumeric(crop.x) ? parseFloat(String(crop.x)) : null;\n const y = isNumeric(crop.y) ? parseFloat(String(crop.y)) : null;\n const w = isNumeric(crop.w) ? parseFloat(String(crop.w)) : null;\n const h = isNumeric(crop.h) ? parseFloat(String(crop.h)) : null;\n if (x === null || y === null || w === null || h === null) {\n return null;\n }\n let l = Math.round(x * 100000);\n let t = Math.round(y * 100000);\n let r = Math.round((1 - x - w) * 100000);\n let b = Math.round((1 - y - h) * 100000);\n l = Math.max(0, Math.min(100000, l));\n t = Math.max(0, Math.min(100000, t));\n r = Math.max(0, Math.min(100000, r));\n b = Math.max(0, Math.min(100000, b));\n\n return '<a:srcRect l=\"' + l + '\" t=\"' + t + '\" r=\"' + r + '\" b=\"' + b + '\"/>';\n }\n\n private coverSrcRect(boxW: number, boxH: number, imgW: number, imgH: number): string {\n const boxAspect = boxW / boxH;\n const imgAspect = imgW / imgH;\n let l = 0,\n t = 0,\n r = 0,\n b = 0;\n\n if (imgAspect > boxAspect) {\n const visibleFrac = boxAspect / imgAspect;\n const inset = Math.round(((1 - visibleFrac) / 2) * 100000);\n l = inset;\n r = inset;\n } else if (imgAspect < boxAspect) {\n const visibleFrac = imgAspect / boxAspect;\n const inset = Math.round(((1 - visibleFrac) / 2) * 100000);\n t = inset;\n b = inset;\n }\n\n return '<a:srcRect l=\"' + l + '\" t=\"' + t + '\" r=\"' + r + '\" b=\"' + b + '\"/>';\n }\n\n private containedRect(\n boxX: number,\n boxY: number,\n boxW: number,\n boxH: number,\n imgW: number,\n imgH: number,\n ): [number, number, number, number] {\n const scale = Math.min(boxW / imgW, boxH / imgH);\n const extW = Math.max(1, Math.round(imgW * scale));\n const extH = Math.max(1, Math.round(imgH * scale));\n const offX = boxX + Math.round((boxW - extW) / 2);\n const offY = boxY + Math.round((boxH - extH) / 2);\n\n return [offX, offY, extW, extH];\n }\n\n private buildShape(element: Any, shapeId: number): string {\n const xfrm = this.xfrmFromFractions(element);\n const id = element.id ?? `shape-${shapeId}`;\n const kind = String(element.shape ?? \"rect\");\n let prst: string;\n switch (kind) {\n case \"rect\":\n prst = \"rect\";\n break;\n case \"rounded-rect\":\n prst = \"roundRect\";\n break;\n case \"ellipse\":\n prst = \"ellipse\";\n break;\n case \"triangle\":\n prst = \"triangle\";\n break;\n case \"line\":\n prst = \"line\";\n break;\n case \"arrow\":\n prst = \"rightArrow\";\n break;\n default:\n prst = \"rect\";\n }\n\n const [fillHex, fillAlpha] = Color.parse(element.fill ?? \"rgba(139,92,246,0.15)\", \"8B5CF6\");\n const [strokeHex] = Color.parse(element.stroke ?? \"#8B5CF6\", \"8B5CF6\");\n const strokeWidthEmu = Emu.fromPt(toFloat(element.strokeWidth ?? 2));\n const dashStr = element.dashed ? '<a:prstDash val=\"dash\"/>' : \"\";\n\n const fillXml =\n fillAlpha === 0\n ? \"<a:noFill/>\"\n : '<a:solidFill><a:srgbClr val=\"' + fillHex + '\"><a:alpha val=\"' + fillAlpha + '\"/></a:srgbClr></a:solidFill>';\n\n return (\n \"<p:sp>\" +\n \"<p:nvSpPr>\" +\n '<p:cNvPr id=\"' + shapeId + '\" name=\"' + Xml.attr(String(id)) + '\"/>' +\n \"<p:cNvSpPr/>\" +\n \"<p:nvPr/>\" +\n \"</p:nvSpPr>\" +\n \"<p:spPr>\" +\n xfrm +\n '<a:prstGeom prst=\"' + prst + '\"><a:avLst/></a:prstGeom>' +\n fillXml +\n '<a:ln w=\"' + strokeWidthEmu + '\"><a:solidFill><a:srgbClr val=\"' + strokeHex + '\"/></a:solidFill>' + dashStr + \"</a:ln>\" +\n \"</p:spPr>\" +\n '<p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody>' +\n \"</p:sp>\"\n );\n }\n\n private buildCodeShape(element: Any, shapeId: number): string {\n const xfrm = this.xfrmFromFractions(element);\n const code = String(element.code ?? \"\");\n const id = element.id ?? `code-${shapeId}`;\n const language = element.language !== undefined && element.language !== null ? String(element.language) : null;\n const body = this.buildHighlightedCodeBody(code, language);\n\n return (\n \"<p:sp>\" +\n \"<p:nvSpPr>\" +\n '<p:cNvPr id=\"' + shapeId + '\" name=\"' + Xml.attr(String(id)) + '\"/>' +\n '<p:cNvSpPr txBox=\"1\"/>' +\n \"<p:nvPr/>\" +\n \"</p:nvSpPr>\" +\n \"<p:spPr>\" +\n xfrm +\n '<a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>' +\n '<a:solidFill><a:srgbClr val=\"0F172A\"/></a:solidFill>' +\n \"</p:spPr>\" +\n body +\n \"</p:sp>\"\n );\n }\n\n private buildHighlightedCodeBody(code: string, language: string | null): string {\n const sz = Emu.hundredthsOfPoint(12);\n let paragraphs = \"\";\n const lines = code.split(\"\\n\");\n for (const line of lines) {\n const tokens = SyntaxHighlighter.tokenize(line, language);\n let runs = \"\";\n for (const token of tokens) {\n if (token.text === \"\") {\n continue;\n }\n const color = SyntaxHighlighter.colorFor(token.kind);\n runs +=\n \"<a:r>\" +\n '<a:rPr lang=\"en-US\" sz=\"' + sz + '\">' +\n '<a:solidFill><a:srgbClr val=\"' + color + '\"/></a:solidFill>' +\n '<a:latin typeface=\"Consolas\"/>' +\n \"</a:rPr>\" +\n \"<a:t>\" + Xml.text(token.text) + \"</a:t>\" +\n \"</a:r>\";\n }\n if (runs === \"\") {\n runs = '<a:endParaRPr lang=\"en-US\" sz=\"' + sz + '\"/>';\n }\n paragraphs += '<a:p><a:pPr algn=\"l\"/>' + runs + \"</a:p>\";\n }\n\n return (\n \"<p:txBody>\" +\n '<a:bodyPr wrap=\"square\" anchor=\"t\" rtlCol=\"0\" lIns=\"91440\" tIns=\"45720\" rIns=\"91440\" bIns=\"45720\"/>' +\n \"<a:lstStyle/>\" +\n paragraphs +\n \"</p:txBody>\"\n );\n }\n\n private buildTable(element: Any, shapeId: number): string {\n const columns: Any[] = Array.isArray(element.columns) ? element.columns : [];\n const rows: Any[] = Array.isArray(element.rows) ? element.rows : [];\n if (columns.length === 0) {\n return this.buildPlaceholder(\"[table: no columns]\", element, shapeId);\n }\n\n const totalWidthEmu = Emu.fromFracX(toFloat(element.w ?? 0.5));\n const colCount = columns.length;\n const colWidthEmu = Math.round(totalWidthEmu / Math.max(1, colCount));\n\n const headerRowH = Emu.fromPt(40);\n const bodyRowH = Emu.fromPt(30);\n\n let gridCols = \"\";\n for (let i = 0; i < columns.length; i++) {\n gridCols += '<a:gridCol w=\"' + colWidthEmu + '\"/>';\n }\n\n let headerCells = \"\";\n for (const col of columns) {\n const label = String(col.label ?? col.key ?? \"\");\n headerCells += this.buildTableCell(label, true);\n }\n const headerRow = '<a:tr h=\"' + headerRowH + '\">' + headerCells + \"</a:tr>\";\n\n let bodyRows = \"\";\n let rowIndex = 0;\n for (const row of rows) {\n if (!isPlainObject(row)) {\n continue;\n }\n let cells = \"\";\n for (const col of columns) {\n const key = String(col.key ?? \"\");\n const value = row[key] ?? \"\";\n const text = isScalar(value) ? scalarToString(value) : JSON.stringify(value);\n cells += this.buildTableCell(String(text), false, rowIndex % 2 === 1);\n }\n bodyRows += '<a:tr h=\"' + bodyRowH + '\">' + cells + \"</a:tr>\";\n rowIndex++;\n }\n\n const xfrm = this.xfrmFromFractions(element);\n const id = element.id ?? `table-${shapeId}`;\n\n return (\n \"<p:graphicFrame>\" +\n \"<p:nvGraphicFramePr>\" +\n '<p:cNvPr id=\"' + shapeId + '\" name=\"' + Xml.attr(String(id)) + '\"/>' +\n '<p:cNvGraphicFramePr><a:graphicFrameLocks noGrp=\"1\"/></p:cNvGraphicFramePr>' +\n \"<p:nvPr/>\" +\n \"</p:nvGraphicFramePr>\" +\n \"<p:xfrm>\" + innerXfrm(xfrm) + \"</p:xfrm>\" +\n '<a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">' +\n '<a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/table\">' +\n \"<a:tbl>\" +\n '<a:tblPr firstRow=\"1\" bandRow=\"1\"><a:tableStyleId>{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}</a:tableStyleId></a:tblPr>' +\n \"<a:tblGrid>\" + gridCols + \"</a:tblGrid>\" +\n headerRow +\n bodyRows +\n \"</a:tbl>\" +\n \"</a:graphicData>\" +\n \"</a:graphic>\" +\n \"</p:graphicFrame>\"\n );\n }\n\n private buildTableCell(text: string, header: boolean, striped = false): string {\n let fill: string;\n let textColor: string;\n let bold: string;\n if (header) {\n fill = '<a:solidFill><a:srgbClr val=\"8B5CF6\"/></a:solidFill>';\n textColor = \"FFFFFF\";\n bold = ' b=\"1\"';\n } else {\n fill = striped ? '<a:solidFill><a:srgbClr val=\"F8FAFC\"/></a:solidFill>' : \"<a:noFill/>\";\n textColor = \"0F172A\";\n bold = \"\";\n }\n\n return (\n \"<a:tc>\" +\n \"<a:txBody>\" +\n '<a:bodyPr wrap=\"square\" anchor=\"ctr\" lIns=\"91440\" tIns=\"45720\" rIns=\"91440\" bIns=\"45720\"/>' +\n \"<a:lstStyle/>\" +\n '<a:p><a:pPr algn=\"l\"/><a:r><a:rPr lang=\"en-US\" sz=\"1400\"' + bold + '><a:solidFill><a:srgbClr val=\"' + textColor + '\"/></a:solidFill></a:rPr><a:t>' + Xml.text(text) + \"</a:t></a:r></a:p>\" +\n \"</a:txBody>\" +\n \"<a:tcPr>\" + fill + \"</a:tcPr>\" +\n \"</a:tc>\"\n );\n }\n\n // ─── Charts ───────────────────────────────────────────────────────────\n\n private buildChart(element: Any, shapeId: number, slideNumber: number, rels: Rel[]): string {\n const option = isPlainObject(element.option) ? element.option : null;\n const spec = option !== null ? ChartTranslator.translate(option) : null;\n\n if (spec !== null) {\n this.chartCounter++;\n const n = this.chartCounter;\n const archivePath = `ppt/charts/chart${n}.xml`;\n this.chartFiles.push({ path: archivePath, xml: this.buildChartPart(spec) });\n\n const relId = \"rIdChart\" + n;\n rels.push({\n id: relId,\n type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\",\n target: `../charts/chart${n}.xml`,\n });\n\n return this.buildChartFrame(element, shapeId, relId);\n }\n\n const preRender = this.chartPreRenderSrc(element);\n if (preRender !== null) {\n const imageElement = { ...element };\n imageElement.src = preRender;\n imageElement.fit = element.fit ?? \"contain\";\n\n return this.buildImageShape(imageElement, shapeId, slideNumber, rels);\n }\n\n let title = \"\";\n if (isPlainObject(option)) {\n title = String((option as Any).title?.text ?? \"\");\n }\n const label = title !== \"\" ? title : \"chart\";\n\n return this.buildChartPlaceholder(label, element, shapeId);\n }\n\n private chartPreRenderSrc(element: Any): string | null {\n for (const key of [\"image\", \"src\"]) {\n const value = element[key] ?? null;\n if (typeof value === \"string\" && value.startsWith(\"data:\")) {\n return value;\n }\n }\n return null;\n }\n\n private buildChartFrame(element: Any, shapeId: number, relId: string): string {\n const xfrm = this.xfrmFromFractions(element);\n const innerX = innerXfrm(xfrm);\n const id = element.id ?? `chart-${shapeId}`;\n\n return (\n \"<p:graphicFrame>\" +\n \"<p:nvGraphicFramePr>\" +\n '<p:cNvPr id=\"' + shapeId + '\" name=\"' + Xml.attr(String(id)) + '\"/>' +\n \"<p:cNvGraphicFramePr/>\" +\n \"<p:nvPr/>\" +\n \"</p:nvGraphicFramePr>\" +\n \"<p:xfrm>\" + innerX + \"</p:xfrm>\" +\n '<a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">' +\n '<a:graphicData uri=\"' + NS_CHART + '\">' +\n '<c:chart xmlns:c=\"' + NS_CHART + '\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" r:id=\"' + relId + '\"/>' +\n \"</a:graphicData>\" +\n \"</a:graphic>\" +\n \"</p:graphicFrame>\"\n );\n }\n\n private buildChartPart(spec: ChartSpec): string {\n const kind = spec.kind;\n let plot: string;\n switch (kind) {\n case \"bar\":\n plot = this.buildBarChartXml(spec);\n break;\n case \"line\":\n plot = this.buildLineChartXml(spec);\n break;\n case \"pie\":\n plot = this.buildPieChartXml(spec);\n break;\n case \"scatter\":\n plot = this.buildScatterChartXml(spec);\n break;\n default:\n plot = this.buildBarChartXml(spec);\n }\n\n let title: string;\n if (spec.title !== \"\") {\n title =\n \"<c:title><c:tx><c:rich><a:bodyPr/><a:p><a:r><a:t>\" +\n Xml.text(spec.title) +\n '</a:t></a:r></a:p></c:rich></c:tx><c:overlay val=\"0\"/></c:title><c:autoTitleDeleted val=\"0\"/>';\n } else {\n title = '<c:autoTitleDeleted val=\"1\"/>';\n }\n\n return (\n Xml.declaration() +\n '<c:chartSpace xmlns:c=\"' + NS_CHART + '\" ' +\n 'xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" ' +\n 'xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">' +\n \"<c:chart>\" +\n title +\n \"<c:plotArea>\" +\n \"<c:layout/>\" +\n plot +\n \"</c:plotArea>\" +\n '<c:legend><c:legendPos val=\"b\"/><c:overlay val=\"0\"/></c:legend>' +\n '<c:plotVisOnly val=\"1\"/>' +\n '<c:dispBlanksAs val=\"gap\"/>' +\n \"</c:chart>\" +\n \"</c:chartSpace>\"\n );\n }\n\n private buildBarChartXml(spec: ChartSpec): string {\n let sers = \"\";\n spec.series.forEach((series, idx) => {\n sers +=\n \"<c:ser>\" +\n '<c:idx val=\"' + idx + '\"/>' +\n '<c:order val=\"' + idx + '\"/>' +\n this.chartSeriesName(series, idx) +\n this.chartSeriesFill(idx) +\n this.chartCatRef(spec.categories, series.values) +\n this.chartValRef(series.values) +\n \"</c:ser>\";\n });\n\n return (\n \"<c:barChart>\" +\n '<c:barDir val=\"col\"/>' +\n '<c:grouping val=\"clustered\"/>' +\n '<c:varyColors val=\"0\"/>' +\n sers +\n '<c:axId val=\"111111111\"/>' +\n '<c:axId val=\"222222222\"/>' +\n \"</c:barChart>\" +\n this.buildCatValAxes()\n );\n }\n\n private buildLineChartXml(spec: ChartSpec): string {\n let isArea = false;\n for (const series of spec.series) {\n if (series.area) {\n isArea = true;\n break;\n }\n }\n\n let sers = \"\";\n spec.series.forEach((series, idx) => {\n const smooth = !isArea && series.smooth ? '<c:smooth val=\"1\"/>' : \"\";\n sers +=\n \"<c:ser>\" +\n '<c:idx val=\"' + idx + '\"/>' +\n '<c:order val=\"' + idx + '\"/>' +\n this.chartSeriesName(series, idx) +\n this.chartSeriesLine(idx) +\n this.chartCatRef(spec.categories, series.values) +\n this.chartValRef(series.values) +\n smooth +\n \"</c:ser>\";\n });\n\n if (isArea) {\n return (\n \"<c:areaChart>\" +\n '<c:grouping val=\"standard\"/>' +\n '<c:varyColors val=\"0\"/>' +\n sers +\n '<c:axId val=\"111111111\"/>' +\n '<c:axId val=\"222222222\"/>' +\n \"</c:areaChart>\" +\n this.buildCatValAxes()\n );\n }\n\n return (\n \"<c:lineChart>\" +\n '<c:grouping val=\"standard\"/>' +\n '<c:varyColors val=\"0\"/>' +\n sers +\n '<c:marker val=\"1\"/>' +\n '<c:axId val=\"111111111\"/>' +\n '<c:axId val=\"222222222\"/>' +\n \"</c:lineChart>\" +\n this.buildCatValAxes()\n );\n }\n\n private buildPieChartXml(spec: ChartSpec): string {\n const series: Any = spec.series[0] ?? { values: [], name: \"\" };\n const values: number[] = Array.isArray(series.values) ? series.values : [];\n const categories = spec.categories;\n\n let dPts = \"\";\n values.forEach((_, idx) => {\n dPts +=\n \"<c:dPt>\" +\n '<c:idx val=\"' + idx + '\"/>' +\n '<c:bubble3D val=\"0\"/>' +\n '<c:spPr><a:solidFill><a:srgbClr val=\"' + this.chartColor(idx) + '\"/></a:solidFill></c:spPr>' +\n \"</c:dPt>\";\n });\n\n return (\n \"<c:pieChart>\" +\n '<c:varyColors val=\"1\"/>' +\n \"<c:ser>\" +\n '<c:idx val=\"0\"/>' +\n '<c:order val=\"0\"/>' +\n this.chartSeriesName(series, 0) +\n dPts +\n this.chartCatRef(categories, values) +\n this.chartValRef(values) +\n \"</c:ser>\" +\n '<c:firstSliceAng val=\"0\"/>' +\n \"</c:pieChart>\"\n );\n }\n\n private buildScatterChartXml(spec: ChartSpec): string {\n let sers = \"\";\n spec.series.forEach((series, idx) => {\n const points: Any[] = Array.isArray(series.points) ? series.points : [];\n const xs: number[] = [];\n const ys: number[] = [];\n for (const point of points) {\n xs.push(toFloat(point.x ?? 0));\n ys.push(toFloat(point.y ?? 0));\n }\n sers +=\n \"<c:ser>\" +\n '<c:idx val=\"' + idx + '\"/>' +\n '<c:order val=\"' + idx + '\"/>' +\n this.chartSeriesName(series, idx) +\n '<c:spPr><a:ln w=\"19050\"><a:noFill/></a:ln></c:spPr>' +\n '<c:marker><c:symbol val=\"circle\"/><c:size val=\"6\"/><c:spPr><a:solidFill><a:srgbClr val=\"' + this.chartColor(idx) + '\"/></a:solidFill></c:spPr></c:marker>' +\n \"<c:xVal>\" + this.numLit(xs) + \"</c:xVal>\" +\n \"<c:yVal>\" + this.numLit(ys) + \"</c:yVal>\" +\n \"</c:ser>\";\n });\n\n return (\n \"<c:scatterChart>\" +\n '<c:scatterStyle val=\"lineMarker\"/>' +\n '<c:varyColors val=\"0\"/>' +\n sers +\n '<c:axId val=\"111111111\"/>' +\n '<c:axId val=\"222222222\"/>' +\n \"</c:scatterChart>\" +\n '<c:valAx><c:axId val=\"111111111\"/><c:scaling><c:orientation val=\"minMax\"/></c:scaling><c:delete val=\"0\"/><c:axPos val=\"b\"/><c:crossAx val=\"222222222\"/></c:valAx>' +\n '<c:valAx><c:axId val=\"222222222\"/><c:scaling><c:orientation val=\"minMax\"/></c:scaling><c:delete val=\"0\"/><c:axPos val=\"l\"/><c:crossAx val=\"111111111\"/></c:valAx>'\n );\n }\n\n private buildCatValAxes(): string {\n return (\n \"<c:catAx>\" +\n '<c:axId val=\"111111111\"/>' +\n '<c:scaling><c:orientation val=\"minMax\"/></c:scaling>' +\n '<c:delete val=\"0\"/>' +\n '<c:axPos val=\"b\"/>' +\n '<c:crossAx val=\"222222222\"/>' +\n \"</c:catAx>\" +\n \"<c:valAx>\" +\n '<c:axId val=\"222222222\"/>' +\n '<c:scaling><c:orientation val=\"minMax\"/></c:scaling>' +\n '<c:delete val=\"0\"/>' +\n '<c:axPos val=\"l\"/>' +\n '<c:crossAx val=\"111111111\"/>' +\n \"</c:valAx>\"\n );\n }\n\n private chartSeriesName(series: Any, idx: number): string {\n const name =\n typeof series.name === \"string\" && series.name !== \"\" ? String(series.name) : \"Series \" + (idx + 1);\n\n return (\n '<c:tx><c:strRef><c:f>Sheet1!$A$' + (idx + 1) + '</c:f><c:strCache><c:ptCount val=\"1\"/><c:pt idx=\"0\"><c:v>' + Xml.text(name) + \"</c:v></c:pt></c:strCache></c:strRef></c:tx>\"\n );\n }\n\n private chartSeriesFill(idx: number): string {\n return '<c:spPr><a:solidFill><a:srgbClr val=\"' + this.chartColor(idx) + '\"/></a:solidFill></c:spPr>';\n }\n\n private chartSeriesLine(idx: number): string {\n return '<c:spPr><a:ln w=\"28575\"><a:solidFill><a:srgbClr val=\"' + this.chartColor(idx) + '\"/></a:solidFill></a:ln></c:spPr>';\n }\n\n private chartCatRef(categoriesInput: string[], values: number[]): string {\n let categories = categoriesInput;\n if (categories.length === 0) {\n categories = [];\n for (let i = 0; i < values.length; i++) {\n categories.push(String(i + 1));\n }\n }\n\n let pts = \"\";\n categories.forEach((label, i) => {\n pts += '<c:pt idx=\"' + i + '\"><c:v>' + Xml.text(String(label)) + \"</c:v></c:pt>\";\n });\n\n return '<c:cat><c:strLit><c:ptCount val=\"' + categories.length + '\"/>' + pts + \"</c:strLit></c:cat>\";\n }\n\n private chartValRef(values: number[]): string {\n return \"<c:val>\" + this.numLit(values) + \"</c:val>\";\n }\n\n private numLit(values: number[]): string {\n let pts = \"\";\n values.forEach((value, i) => {\n pts += '<c:pt idx=\"' + i + '\"><c:v>' + this.numStr(toFloat(value)) + \"</c:v></c:pt>\";\n });\n\n return '<c:numLit><c:formatCode>General</c:formatCode><c:ptCount val=\"' + values.length + '\"/>' + pts + \"</c:numLit>\";\n }\n\n private numStr(value: number): string {\n if (value === Math.floor(value) && Math.abs(value) < 1.0e15) {\n return String(Math.trunc(value));\n }\n return value.toFixed(6).replace(/0+$/, \"\").replace(/\\.$/, \"\");\n }\n\n private chartColor(idx: number): string {\n if (idx === 0) {\n return this.themeAccent;\n }\n return CHART_PALETTE[idx % CHART_PALETTE.length]!;\n }\n\n private buildChartPlaceholder(label: string, element: Any, shapeId: number): string {\n const xfrm = this.xfrmFromFractions(element);\n const id = element.id ?? `chart-${shapeId}`;\n\n return (\n \"<p:sp>\" +\n \"<p:nvSpPr>\" +\n '<p:cNvPr id=\"' + shapeId + '\" name=\"' + Xml.attr(String(id)) + '\"/>' +\n \"<p:cNvSpPr/>\" +\n \"<p:nvPr/>\" +\n \"</p:nvSpPr>\" +\n \"<p:spPr>\" +\n xfrm +\n '<a:prstGeom prst=\"roundRect\"><a:avLst/></a:prstGeom>' +\n '<a:solidFill><a:srgbClr val=\"F1F5F9\"/></a:solidFill>' +\n '<a:ln w=\"12700\"><a:solidFill><a:srgbClr val=\"CBD5E1\"/></a:solidFill></a:ln>' +\n \"</p:spPr>\" +\n \"<p:txBody>\" +\n '<a:bodyPr wrap=\"square\" anchor=\"ctr\" rtlCol=\"0\"/>' +\n \"<a:lstStyle/>\" +\n '<a:p><a:pPr algn=\"ctr\"/><a:r><a:rPr lang=\"en-US\" sz=\"1600\" b=\"1\"><a:solidFill><a:srgbClr val=\"64748B\"/></a:solidFill></a:rPr><a:t>' + Xml.text(label) + \"</a:t></a:r></a:p>\" +\n \"</p:txBody>\" +\n \"</p:sp>\"\n );\n }\n\n private buildPlaceholder(label: string, element: Any, shapeId: number): string {\n return this.buildTextShape(\n {\n id: element.id ?? `placeholder-${shapeId}`,\n type: \"text\",\n x: element.x ?? 0.1,\n y: element.y ?? 0.4,\n w: element.w ?? 0.8,\n h: element.h ?? 0.2,\n content: label,\n format: \"plain\",\n style: { fontSize: 20, align: \"center\", color: \"#64748B\" },\n },\n shapeId,\n );\n }\n\n // ─── Text body / paragraphs / runs ────────────────────────────────────\n\n private buildTextBody(content: string, style: Any, format: string): string {\n const fontPt = toFloat(style.fontSize ?? 24);\n const pt = Math.max(8.0, fontPt / 2);\n const sz = Emu.hundredthsOfPoint(pt);\n const baseBold = this.weightToBold(style.weight ?? null);\n const baseItalic = style.italic ? ' i=\"1\"' : \"\";\n const baseUnderline = style.underline ? ' u=\"sng\"' : \"\";\n const align = this.alignToAlgn(String(style.align ?? \"left\"));\n const [colorHex] = Color.parse(String(style.color ?? \"#0F172A\"), \"0F172A\");\n const fontFamily =\n style.fontFamily !== undefined && style.fontFamily !== null\n ? '<a:latin typeface=\"' + Xml.attr(String(style.fontFamily)) + '\"/>'\n : \"\";\n let anchor: string;\n switch (style.verticalAlign ?? \"top\") {\n case \"middle\":\n anchor = 't=\"ctr\"';\n break;\n case \"bottom\":\n anchor = 't=\"b\"';\n break;\n default:\n anchor = 't=\"t\"';\n }\n\n const renderRuns = format === \"markdown\";\n\n let paragraphs = \"\";\n const lines = content.split(\"\\n\");\n for (const line of lines) {\n let headingLevel = 0;\n let isBullet = false;\n let body = line;\n if (renderRuns) {\n [headingLevel, body] = MarkdownInline.headingPrefix(line);\n if (headingLevel === 0) {\n [isBullet, body] = MarkdownInline.bulletPrefix(line);\n }\n }\n\n let paragraphSz = sz;\n let paragraphBold = baseBold;\n if (headingLevel > 0) {\n let multiplier: number;\n switch (headingLevel) {\n case 1:\n multiplier = 1.8;\n break;\n case 2:\n multiplier = 1.45;\n break;\n case 3:\n multiplier = 1.2;\n break;\n default:\n multiplier = 1.0;\n }\n paragraphSz = Emu.hundredthsOfPoint(pt * multiplier);\n paragraphBold = ' b=\"1\"';\n }\n\n let pPr = '<a:pPr algn=\"' + align + '\"';\n if (isBullet) {\n pPr += ' indent=\"-228600\" marL=\"228600\"><a:buFont typeface=\"Arial\"/><a:buChar char=\"•\"/>';\n } else {\n pPr += \"><a:buNone/>\";\n }\n pPr += \"</a:pPr>\";\n\n let runs = \"\";\n if (renderRuns) {\n const tokens = MarkdownInline.tokenize(body);\n for (const token of tokens) {\n runs += this.buildRun(\n token.text,\n paragraphSz,\n paragraphBold,\n baseItalic,\n baseUnderline,\n colorHex,\n fontFamily,\n token.b,\n token.i,\n token.code,\n );\n }\n } else {\n runs = this.buildRun(body, paragraphSz, paragraphBold, baseItalic, baseUnderline, colorHex, fontFamily, false, false, false);\n }\n\n paragraphs += \"<a:p>\" + pPr + runs + \"</a:p>\";\n }\n\n return (\n \"<p:txBody>\" +\n '<a:bodyPr wrap=\"square\" anchor=\"' + anchor.slice(3, -1) + '\" rtlCol=\"0\"/>' +\n \"<a:lstStyle/>\" +\n paragraphs +\n \"</p:txBody>\"\n );\n }\n\n private buildRun(\n text: string,\n sz: number,\n baseBold: string,\n baseItalic: string,\n baseUnderline: string,\n colorHex: string,\n fontFamily: string,\n bold: boolean,\n italic: boolean,\n code: boolean,\n ): string {\n const b = bold ? ' b=\"1\"' : baseBold;\n const i = (italic ? ' i=\"1\"' : \"\") || baseItalic;\n const u = baseUnderline;\n let color = colorHex;\n let family = fontFamily;\n\n if (code) {\n color = \"8B5CF6\";\n family = '<a:latin typeface=\"Consolas\"/>';\n }\n\n const rPr =\n '<a:rPr lang=\"en-US\" sz=\"' + sz + '\"' + b + i + u + '><a:solidFill><a:srgbClr val=\"' + color + '\"/></a:solidFill>' + family + \"</a:rPr>\";\n\n return \"<a:r>\" + rPr + \"<a:t>\" + Xml.text(text) + \"</a:t></a:r>\";\n }\n\n private weightToBold(weight: Any): string {\n if (isNumeric(weight) && toInt(weight) >= 600) {\n return ' b=\"1\"';\n }\n if (weight === \"bold\" || weight === \"semibold\") {\n return ' b=\"1\"';\n }\n return \"\";\n }\n\n private alignToAlgn(align: string): string {\n switch (align) {\n case \"center\":\n return \"ctr\";\n case \"right\":\n return \"r\";\n case \"justify\":\n return \"just\";\n default:\n return \"l\";\n }\n }\n\n // ─── Geometry helper ──────────────────────────────────────────────────\n\n private xfrmFromFractions(element: Any): string {\n const x = Emu.fromFracX(toFloat(element.x ?? 0));\n const y = Emu.fromFracY(toFloat(element.y ?? 0));\n const cx = Emu.fromFracX(toFloat(element.w ?? 0));\n const cy = Emu.fromFracY(toFloat(element.h ?? 0));\n const rot = element.rotation !== undefined ? Math.round(toFloat(element.rotation) * 60000) : 0;\n const rotAttr = rot !== 0 ? ' rot=\"' + rot + '\"' : \"\";\n\n return '<a:xfrm' + rotAttr + '><a:off x=\"' + x + '\" y=\"' + y + '\"/><a:ext cx=\"' + cx + '\" cy=\"' + cy + '\"/></a:xfrm>';\n }\n\n // ─── Media staging ────────────────────────────────────────────────────\n\n private stageMedia(src: string, _slideNumber: number): StagedMedia | null {\n const data = this.loadImageBytes(src);\n if (data === null) {\n return null;\n }\n this.mediaCounter++;\n const i = this.mediaCounter;\n const ext = this.extensionForMime(data.mime) ?? \"png\";\n const archivePath = `ppt/media/image${i}.${ext}`;\n this.mediaFiles.push({ path: archivePath, bytes: data.bytes });\n\n const relId = \"rId\" + i;\n\n return {\n relId,\n target: `../media/image${i}.${ext}`,\n bytes: data.bytes,\n };\n }\n\n private loadImageBytes(src: string): MediaData | null {\n // data: URI — decode inline.\n const m = /^data:([^;,]+)(?:;base64)?,([\\s\\S]*)$/.exec(src);\n if (m) {\n const mime = m[1]!;\n const payload = m[2]!;\n let bytes: Uint8Array | null;\n if (src.includes(\";base64,\")) {\n try {\n bytes = base64Decode(payload);\n } catch {\n bytes = null;\n }\n } else {\n try {\n bytes = ENCODER.encode(decodeURIComponent(payload));\n } catch {\n bytes = null;\n }\n }\n if (bytes === null) {\n return null;\n }\n return { bytes, mime };\n }\n\n // file://, local paths, and http(s) cannot be fetched synchronously in an\n // isomorphic context — PHP reads them from disk / network. Returning null\n // here replicates the PHP \"couldn't obtain image\" path (placeholder).\n return null;\n }\n\n private extensionForMime(mime: string): string | null {\n switch (mime) {\n case \"image/png\":\n return \"png\";\n case \"image/jpeg\":\n return \"jpg\";\n case \"image/gif\":\n return \"gif\";\n case \"image/svg+xml\":\n return \"svg\";\n case \"image/webp\":\n return \"webp\";\n default:\n return null;\n }\n }\n\n // ─── Slide rels ───────────────────────────────────────────────────────\n\n private buildSlideRels(slideNumber: number, hasNotes: boolean, layoutNumber = 1): string {\n let rels = \"\";\n rels +=\n '<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout\" Target=\"../slideLayouts/slideLayout' + layoutNumber + '.xml\"/>';\n let nextRelNum = 2;\n\n if (hasNotes) {\n rels +=\n '<Relationship Id=\"rId' + nextRelNum + '\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide\" Target=\"../notesSlides/notesSlide' + slideNumber + '.xml\"/>';\n nextRelNum++;\n }\n\n for (const rel of this.pendingSlideRels[slideNumber] ?? []) {\n const mode = (rel.mode ?? null) === \"External\" ? ' TargetMode=\"External\"' : \"\";\n rels +=\n '<Relationship Id=\"' + Xml.attr(rel.id) + '\" Type=\"' + Xml.attr(rel.type) + '\" Target=\"' + Xml.attr(rel.target) + '\"' + mode + \"/>\";\n }\n\n return (\n Xml.declaration() +\n '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' +\n rels +\n \"</Relationships>\"\n );\n }\n\n // ─── Notes slides ─────────────────────────────────────────────────────\n\n private buildNotesSlideXml(slide: Any, _slideNumber: number): string {\n const notes = String(slide.notes ?? \"\");\n let paragraphs = \"\";\n for (const line of notes.split(\"\\n\")) {\n paragraphs += '<a:p><a:r><a:rPr lang=\"en-US\" sz=\"1200\"/><a:t>' + Xml.text(line) + \"</a:t></a:r></a:p>\";\n }\n\n return (\n Xml.declaration() +\n '<p:notes xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" ' +\n 'xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" ' +\n 'xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">' +\n \"<p:cSld>\" +\n \"<p:spTree>\" +\n '<p:nvGrpSpPr><p:cNvPr id=\"1\" name=\"\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>' +\n '<p:grpSpPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/><a:chOff x=\"0\" y=\"0\"/><a:chExt cx=\"0\" cy=\"0\"/></a:xfrm></p:grpSpPr>' +\n \"<p:sp>\" +\n \"<p:nvSpPr>\" +\n '<p:cNvPr id=\"2\" name=\"Notes Placeholder\"/>' +\n '<p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr>' +\n '<p:nvPr><p:ph type=\"body\"/></p:nvPr>' +\n \"</p:nvSpPr>\" +\n '<p:spPr><a:xfrm><a:off x=\"685800\" y=\"1700213\"/><a:ext cx=\"5772150\" cy=\"3679371\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></p:spPr>' +\n \"<p:txBody><a:bodyPr/><a:lstStyle/>\" +\n paragraphs +\n \"</p:txBody>\" +\n \"</p:sp>\" +\n \"</p:spTree>\" +\n \"</p:cSld>\" +\n \"</p:notes>\"\n );\n }\n\n private buildNotesSlideRels(slideNumber: number): string {\n return (\n Xml.declaration() +\n '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' +\n '<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide\" Target=\"../slides/slide' + slideNumber + '.xml\"/>' +\n \"</Relationships>\"\n );\n }\n}\n\n// ─── Module helpers ──────────────────────────────────────────────────────\n\n/** PHP `(float)` cast — non-numeric → 0. */\nfunction toFloat(v: Any): number {\n if (typeof v === \"number\") return v;\n const n = parseFloat(String(v));\n return Number.isFinite(n) ? n : 0;\n}\n\n/** PHP `ucwords` — uppercase first letter of each space-delimited word. */\nfunction ucwords(s: string): string {\n return s.replace(/(^|\\s)([a-z])/g, (_m, sp: string, ch: string) => sp + ch.toUpperCase());\n}\n\n/** Slice the inner content of an `<a:xfrm>...</a:xfrm>` wrapper. */\nfunction innerXfrm(xfrm: string): string {\n return xfrm.slice(\"<a:xfrm>\".length, -\"</a:xfrm>\".length);\n}\n\nfunction isScalar(v: Any): boolean {\n return (\n typeof v === \"string\" ||\n typeof v === \"number\" ||\n typeof v === \"boolean\" ||\n v === null ||\n typeof v === \"bigint\"\n );\n}\n\n/** PHP `(string)` cast of a scalar (true→\"1\", false→\"\", null→\"\"). */\nfunction scalarToString(v: Any): string {\n if (v === true) return \"1\";\n if (v === false) return \"\";\n if (v === null) return \"\";\n return String(v);\n}\n\n/**\n * Read intrinsic width/height from PNG / GIF / JPEG byte headers. Mirrors PHP's\n * `getimagesizefromstring` for the cases the writer cares about (cover/contain\n * fit). Returns null when the dimensions can't be determined.\n */\nfunction getImageSize(bytes: Uint8Array): [number, number] | null {\n if (bytes.length >= 24 && bytes[0] === 0x89 && bytes[1] === 0x50 && bytes[2] === 0x4e && bytes[3] === 0x47) {\n // PNG: IHDR width/height at offset 16 (big-endian).\n const w = (bytes[16]! << 24) | (bytes[17]! << 16) | (bytes[18]! << 8) | bytes[19]!;\n const h = (bytes[20]! << 24) | (bytes[21]! << 16) | (bytes[22]! << 8) | bytes[23]!;\n return [w >>> 0, h >>> 0];\n }\n if (bytes.length >= 10 && bytes[0] === 0x47 && bytes[1] === 0x49 && bytes[2] === 0x46) {\n // GIF: width/height little-endian at offset 6.\n const w = bytes[6]! | (bytes[7]! << 8);\n const h = bytes[8]! | (bytes[9]! << 8);\n return [w, h];\n }\n if (bytes.length >= 4 && bytes[0] === 0xff && bytes[1] === 0xd8) {\n // JPEG: scan SOF markers for dimensions.\n let i = 2;\n while (i + 9 < bytes.length) {\n if (bytes[i] !== 0xff) {\n i++;\n continue;\n }\n const marker = bytes[i + 1]!;\n if (marker >= 0xc0 && marker <= 0xcf && marker !== 0xc4 && marker !== 0xc8 && marker !== 0xcc) {\n const h = (bytes[i + 5]! << 8) | bytes[i + 6]!;\n const w = (bytes[i + 7]! << 8) | bytes[i + 8]!;\n return [w, h];\n }\n const len = (bytes[i + 2]! << 8) | bytes[i + 3]!;\n i += 2 + len;\n }\n }\n return null;\n}\n","/**\n * Agent — the structured-tool surface for DarkSlide. Mirrors PHP `Agent`.\n * Universal methods are synchronous; file-touching methods (`write`) are async\n * and Node-only (browsers have no sync FS).\n */\n\nimport { SchemaException } from \"./exceptions\";\nimport { PptxReader } from \"./reader/pptx-reader\";\nimport { Repairer } from \"./schema/repairer\";\nimport { Schema } from \"./schema/schema\";\nimport type { RepairResult, ValidationError, WriteOptions, WriteResult } from \"./schema/types\";\nimport { Validator } from \"./schema/validator\";\nimport { PptxWriter } from \"./writer/pptx-writer\";\n\n/** Feature-parity baseline with PHP dark-slide; bumped independently on npm. */\nexport const VERSION = \"0.5.2\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Any = any;\n\nfunction toU8(input: Uint8Array | ArrayBuffer): Uint8Array {\n return input instanceof Uint8Array ? input : new Uint8Array(input);\n}\n\nfunction makeWriter(options: WriteOptions = {}): PptxWriter {\n return new PptxWriter(options.tempDir ?? null, options.allowHttpImages ?? false);\n}\n\nfunction assertValid(deck: Any): void {\n const errors = new Validator().validate(deck);\n if (errors.length > 0) {\n throw new SchemaException(\n \"Deck failed schema validation. Call Agent::validateAndRepair() for a recoverable form.\",\n errors,\n );\n }\n}\n\nexport const Agent = {\n /** Validate a deck without writing. Empty array = valid. */\n validate(deck: Any): ValidationError[] {\n return new Validator().validate(deck);\n },\n\n /**\n * Validate + apply heuristic repairs. Returns `{ ok, schema, errors }` where\n * `ok` is true when the (possibly repaired) deck validates clean.\n */\n validateAndRepair(deck: Any): RepairResult {\n const errors = this.validate(deck);\n if (errors.length === 0) {\n return { ok: true, schema: deck, errors: [] };\n }\n const repaired = new Repairer().repair(deck);\n const remaining = this.validate(repaired);\n\n return {\n ok: remaining.length === 0,\n schema: repaired,\n errors: remaining,\n };\n },\n\n /** PPTX bytes for a deck (no temp file). Universal. Throws SchemaException if invalid. */\n toBytes(deck: Any, options: WriteOptions = {}): Uint8Array {\n assertValid(deck);\n return makeWriter(options).toBytes(deck);\n },\n\n /** Write a deck to disk as a PPTX file (Node only). Throws SchemaException if invalid. */\n async write(deck: Any, path: string, options: WriteOptions = {}): Promise<WriteResult> {\n assertValid(deck);\n const bytes = makeWriter(options).toBytes(deck);\n const fs = await import(\"node:fs\");\n fs.writeFileSync(path, bytes);\n return { path, bytes: bytes.length, slides: deck?.slides?.length ?? 0 };\n },\n\n /** Read PPTX bytes back into the Deck schema. Universal. */\n read(input: Uint8Array | ArrayBuffer): Record<string, unknown> {\n return new PptxReader().read(toU8(input));\n },\n\n /** Alias for {@see read}. */\n fromBytes(input: Uint8Array | ArrayBuffer): Record<string, unknown> {\n return new PptxReader().read(toU8(input));\n },\n\n /** Plain-text summary of a deck. Mirrors PHP `Agent::describe`. */\n describe(deck: Any): string {\n const title = String(deck?.title ?? \"Untitled\");\n const themeName = String(deck?.theme?.name ?? Schema.DEFAULT_THEME_NAME);\n const slides: Any[] = deck?.slides ?? [];\n const slideCount = slides.length;\n\n const elementCounts: Record<string, number> = {};\n for (const slide of slides) {\n for (const element of slide?.elements ?? []) {\n const type = String(element?.type ?? \"unknown\");\n elementCounts[type] = (elementCounts[type] ?? 0) + 1;\n }\n }\n\n const lines = [`Deck: ${title}`, `Theme: ${themeName}`, `Slides: ${slideCount}`];\n const keys = Object.keys(elementCounts);\n if (keys.length > 0) {\n const parts = keys.map((type) => `${elementCounts[type]} ${type}`);\n lines.push(\"Elements: \" + parts.join(\", \"));\n }\n\n return lines.join(\"\\n\");\n },\n\n /** JSON Schema export for LLM tool-use registration. */\n jsonSchema(): Record<string, unknown> {\n return Schema.jsonSchema();\n },\n\n version(): string {\n return VERSION;\n },\n};\n","/**\n * Top-level instance API mirroring PHP `DarkSlide`. Delegates to {@see Agent};\n * exists so DI consumers can hold a configured instance (tempDir /\n * allowHttpImages) with familiar instance semantics.\n */\n\nimport { Agent, VERSION } from \"./agent\";\nimport { SchemaException } from \"./exceptions\";\nimport type { RepairResult, ValidationError, WriteResult } from \"./schema/types\";\nimport { Validator } from \"./schema/validator\";\nimport { PptxWriter } from \"./writer/pptx-writer\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Any = any;\n\nexport class DarkSlide {\n static readonly VERSION = VERSION;\n\n constructor(\n private tempDir: string | null = null,\n private allowHttpImages = false,\n ) {}\n\n validate(deck: Any): ValidationError[] {\n return Agent.validate(deck);\n }\n\n validateAndRepair(deck: Any): RepairResult {\n return Agent.validateAndRepair(deck);\n }\n\n async write(deck: Any, path: string): Promise<WriteResult> {\n return Agent.write(deck, path, { tempDir: this.tempDir ?? undefined, allowHttpImages: this.allowHttpImages });\n }\n\n toBytes(deck: Any): Uint8Array {\n this.throwIfInvalid(deck);\n return new PptxWriter(this.tempDir, this.allowHttpImages).toBytes(deck);\n }\n\n private throwIfInvalid(deck: Any): void {\n const errors = new Validator().validate(deck);\n if (errors.length > 0) {\n throw new SchemaException(\n \"Deck failed schema validation. Call validateAndRepair() for a recoverable form.\",\n errors,\n );\n }\n }\n\n read(input: Uint8Array | ArrayBuffer): Record<string, unknown> {\n return Agent.read(input);\n }\n\n describe(deck: Any): string {\n return Agent.describe(deck);\n }\n\n jsonSchema(): Record<string, unknown> {\n return Agent.jsonSchema();\n }\n}\n"]}