@particle-academy/dark-slide 0.7.0 → 0.7.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.
- package/dist/index.cjs +49 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +49 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +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/table/composites.ts","../src/table/table-resolver.ts","../src/text/box-decoration.ts","../src/writer/pptx-writer.ts","../src/agent.ts","../src/dark-slide.ts"],"names":["end","hex","line","kind","fill","themeColor"],"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\n /**\n * The mono typeface this deck was written with, read back from the theme's\n * `<a:extLst>`. Empty when the package does not record one — anything not\n * written by a current DarkSlide — in which case the name sniff below is the\n * only signal available.\n */\n private monoTypeface = \"\";\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 /**\n * The mono typeface recorded in `theme1.xml`'s `<a:extLst>`, or `\"\"`.\n *\n * Deliberately a regex rather than a parse: this runs before the deck is\n * built, the element is one attribute deep, and a theme part that does not\n * carry the extension is the common case rather than an error.\n */\n private readMonoTypeface(): string {\n const xml = this.getPart(\"ppt/theme/theme1.xml\");\n if (xml === false) {\n return \"\";\n }\n\n const m = /<ds:monoFont[^>]*typeface=\"([^\"]*)\"/.exec(xml);\n return m\n ? m[1]!\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/&/g, \"&\")\n : \"\";\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 this.monoTypeface = this.readMonoTypeface();\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 // Whether row 0 is a header is DECLARED, not assumed. `a:tblPr/@firstRow`\n // is the only thing that says so, and header-less tables are ordinary now —\n // every metadataGrid and kpiBand is one. Assuming a header promoted a row\n // of DATA to column labels and dropped it from the rows, silently losing\n // content on the way back in.\n const tblPr = descendant(tbl, \"tblPr\");\n const hasHeader = tblPr !== undefined && (at(tblPr, \"firstRow\") ?? \"0\") === \"1\";\n\n // Column widths come from the grid, as fractions of the table, so a table\n // written with unequal columns reads back with them.\n const gridWidths = descendants(tbl, \"gridCol\").map((c) => parseInt(at(c, \"w\") ?? \"0\", 10) || 0);\n const gridTotal = gridWidths.reduce((a, b) => a + b, 0);\n\n const firstCells = descendants(rows[0]!, \"tc\");\n const columnCount = Math.max(firstCells.length, gridWidths.length);\n\n const columns: { key: string; label: string; width?: number }[] = [];\n for (let i = 0; i < columnCount; i++) {\n const column: { key: string; label: string; width?: number } = {\n key: \"col\" + (i + 1),\n label: hasHeader && firstCells[i] !== undefined ? this.cellText(firstCells[i]!) : \"\",\n };\n if (gridTotal > 0 && gridWidths[i] !== undefined) {\n column.width = gridWidths[i]! / gridTotal;\n }\n columns.push(column);\n }\n\n const bodyRows: Record<string, string>[] = [];\n for (let r = hasHeader ? 1 : 0; 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 let 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 // Exact match against the typeface the deck RECORDED first, then the\n // name sniff.\n //\n // The sniff alone was sound while the writer always emitted Consolas.\n // Once a deck can name its own mono font it is not: \"Fira Code\" and\n // \"Cascadia\" contain none of these words, so a code run came back as\n // plain text — a silent downgrade on a file that opens perfectly.\n //\n // The sniff stays as the fallback, because it is the only thing that\n // works for a pptx written by anything else.\n const recorded = this.monoTypeface.toLowerCase();\n\n if (\n (recorded !== \"\" && typeface === recorded) ||\n typeface.includes(\"consola\") ||\n typeface.includes(\"mono\") ||\n typeface.includes(\"courier\")\n ) {\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 // Coalesce adjacent runs that carry the SAME decoration.\n //\n // DrawingML splits text into runs for reasons that have nothing to do with\n // emphasis — a syntax highlighter emits one run per token, all of them\n // code — and emitting a marker per run produces markdown that is not merely\n // ugly but WRONG. A highlighted `const deck = 1;` came back as\n // \"`const`` deck = ``1``;`\", where every pair of adjacent backticks closes\n // one span and opens the next, so re-parsing it yields the inverse of the\n // intended emphasis.\n //\n // Merging first is also what makes the output stable: the same text reads\n // the same whether the writer split it into one run or six.\n const merged: typeof parsed = [];\n for (const run of parsed) {\n const last = merged[merged.length - 1];\n\n if (last && last.b === run.b && last.i === run.i && last.code === run.code) {\n last.text += run.text;\n continue;\n }\n\n merged.push({ ...run });\n }\n parsed = merged;\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 /**\n * `kpiBand` and `metadataGrid` are COMPOSITES: they expand into a `table`\n * before the writer serialises anything, so they add no OOXML surface and\n * read back as the table they became. See table/composites.\n */\n ELEMENT_TYPES: [\"text\", \"image\", \"chart\", \"code\", \"table\", \"shape\", \"embed\", \"kpiBand\", \"metadataGrid\"] as const,\n\n /** The subset of ELEMENT_TYPES that is sugar over a `table`. */\n COMPOSITE_ELEMENT_TYPES: [\"kpiBand\", \"metadataGrid\"] 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 case \"kpiBand\":\n case \"metadataGrid\":\n // An items-less composite is not an error the writer can see: it\n // expands to a table with no rows and renders as a blank rectangle,\n // which is the worst kind of wrong.\n if (!Array.isArray(element.items) || element.items.length === 0) {\n errors.push(err(`${path}/items`, \"non-empty array\", gettype(element.items ?? null), element.items ?? null, `A \\`${element.type}\\` must have a non-empty \\`items\\` array.`));\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, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/\"/g, \""\");\n },\n\n attr(s: string): string {\n return s\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\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 * Composite elements — `kpiBand` and `metadataGrid` — as AUTHORING SUGAR.\n * Mirrors PHP `Table\\Composites`.\n *\n * Each expands into an ordinary `table` element before the writer ever sees\n * it. That is deliberate, and it has three consequences worth stating because\n * a genuinely new primitive looks tempting:\n *\n * 1. No new OOXML surface. A KPI band is a two-row table with the rule\n * between the rows switched off; a metadata grid is a label-over-value\n * table with every rule switched off. Both were expressible the moment\n * per-cell borders existed — the composite spares an agent the arithmetic.\n * 2. `@particle-academy/fancy-slides` keeps a schema it can render. A new\n * element type would be a hole in the JS editor the day it shipped.\n * 3. A composite READ BACK comes back as its expansion, a `table`. Lossy in\n * one direction, documented rather than hidden — the alternative is a\n * reader inventing intent it cannot recover.\n */\nimport { isNumeric, isPlainObject } from \"../util\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Any = any;\n\nexport const COMPOSITE_TYPES = [\"kpiBand\", \"metadataGrid\"] as const;\n\nexport const Composites = {\n TYPES: COMPOSITE_TYPES,\n\n isComposite(type: unknown): boolean {\n return typeof type === \"string\" && (COMPOSITE_TYPES as readonly string[]).includes(type);\n },\n\n expand(element: Any, theme: Any = {}): Any {\n switch (element?.type) {\n case \"kpiBand\":\n return kpiBand(element, theme);\n case \"metadataGrid\":\n return metadataGrid(element, theme);\n default:\n return element;\n }\n },\n};\n\n/**\n * Four big figures with a small caption under each, in one banded box.\n *\n * The figure and its caption are two table rows that must read as one cell, so\n * the rule between them is turned off from BOTH sides — a border is resolved\n * per cell, and leaving either half on draws the line.\n */\nfunction kpiBand(element: Any, theme: Any): Any {\n const items = itemsOf(element);\n const style: Any = isPlainObject(element.style) ? element.style : {};\n\n const accent = themeColor(theme, \"accent\", \"#8B5CF6\");\n const fill = style.fill ?? null;\n const valueColor = style.valueColor ?? style.color ?? accent;\n const captionColor = style.captionColor ?? themeColor(theme, \"muted\", \"#64748B\");\n // Conservative on purpose: the writer has no font metrics, so it cannot know\n // a figure will fit. Four items across a full-width band at 60 wrapped\n // \"$51K-$68K\" onto two lines. A deck that knows its own content raises it.\n const valueSize = style.valueFontSize ?? 40;\n const captionSize = style.captionFontSize ?? 20;\n const align = style.align ?? \"center\";\n\n const columns: Any[] = [];\n const values: Any = {};\n const captions: Any = {};\n items.forEach((item, i) => {\n const key = `k${i}`;\n columns.push({ key, label: \"\" });\n values[key] = String(item.value ?? \"\");\n captions[key] = String(item.caption ?? \"\");\n });\n\n // Only the rule BETWEEN kpis, plus the band's own outline.\n const borders = style.borders ?? {\n inner: { width: 0.75, color: themeColor(theme, \"muted\", \"#D9DEE4\") },\n outer: { width: 0.75, color: themeColor(theme, \"muted\", \"#D9DEE4\") },\n };\n\n return {\n id: element.id ?? \"kpi-band\",\n type: \"table\",\n x: element.x ?? 0.06,\n y: element.y ?? 0.5,\n w: element.w ?? 0.88,\n h: element.h ?? 0.2,\n z: element.z ?? null,\n hidden: element.hidden ?? null,\n animation: element.animation ?? null,\n columns,\n rows: [\n {\n cells: values,\n height: style.valueHeight ?? 44,\n fontSize: valueSize,\n color: valueColor,\n bold: true,\n align,\n anchor: \"bottom\",\n borders: withoutSide(borders, \"bottom\"),\n },\n {\n cells: captions,\n height: style.captionHeight ?? 30,\n fontSize: captionSize,\n color: captionColor,\n align,\n anchor: \"top\",\n borders: withoutSide(borders, \"top\"),\n },\n ],\n style: {\n header: false,\n stripe: false,\n fill,\n padding: style.padding ?? { left: 8, right: 8, top: 2, bottom: 2 },\n },\n };\n}\n\n/**\n * A label/value metadata panel, `columns` across and as many rows down as the\n * items need. Labels are letterspaced small caps — the eyebrow treatment the\n * construct exists for.\n *\n * A short final row is PADDED to full width. A ragged row is a shorter\n * `<a:tr>` than the grid declares, which is a corrupt file rather than a\n * cosmetic problem.\n */\nfunction metadataGrid(element: Any, theme: Any): Any {\n const items = itemsOf(element);\n const style: Any = isPlainObject(element.style) ? element.style : {};\n\n const across = isNumeric(element.columns) ? Math.max(1, Math.trunc(Number(element.columns))) : 3;\n\n const labelColor = style.labelColor ?? themeColor(theme, \"muted\", \"#64748B\");\n const valueColor = style.valueColor ?? themeColor(theme, \"text\", \"#0F172A\");\n const fill = style.fill ?? null;\n\n const columns: Any[] = [];\n for (let i = 0; i < across; i++) columns.push({ key: `c${i}`, label: \"\" });\n\n const rows: Any[] = [];\n for (let start = 0; start < items.length; start += across) {\n const chunk = items.slice(start, start + across);\n const labels: Any = {};\n const values: Any = {};\n for (let i = 0; i < across; i++) {\n const item: Any = isPlainObject(chunk[i]) ? chunk[i] : {};\n labels[`c${i}`] = String(item.label ?? \"\");\n values[`c${i}`] = String(item.value ?? \"\");\n }\n rows.push({\n cells: labels,\n height: style.labelHeight ?? 18,\n fontSize: style.labelFontSize ?? 18,\n color: labelColor,\n letterSpacing: style.labelLetterSpacing ?? 1.2,\n caps: \"small\",\n bold: true,\n anchor: \"bottom\",\n });\n rows.push({\n cells: values,\n height: style.valueHeight ?? 26,\n fontSize: style.valueFontSize ?? 28,\n color: valueColor,\n bold: true,\n anchor: \"top\",\n });\n }\n\n return {\n id: element.id ?? \"metadata-grid\",\n type: \"table\",\n x: element.x ?? 0.06,\n y: element.y ?? 0.5,\n w: element.w ?? 0.88,\n h: element.h ?? 0.22,\n z: element.z ?? null,\n hidden: element.hidden ?? null,\n animation: element.animation ?? null,\n columns,\n rows,\n style: {\n header: false,\n stripe: false,\n borders: style.borders ?? false,\n fill,\n padding: style.padding ?? { left: 10, right: 10, top: 2, bottom: 2 },\n },\n };\n}\n\n/** Drop one side from a border spec, so two stacked rows read as one cell. */\nfunction withoutSide(borders: Any, side: string): Any {\n if (!isPlainObject(borders)) return borders;\n return { ...borders, [side]: false };\n}\n\nfunction itemsOf(element: Any): Any[] {\n const items = Array.isArray(element?.items) ? element.items : [];\n return items.filter((i: Any) => isPlainObject(i));\n}\n\nfunction themeColor(theme: Any, key: string, fallback: string): string {\n const colors: Any = isPlainObject(theme?.colors) ? theme.colors : {};\n const value = colors[key];\n return typeof value === \"string\" && value !== \"\" ? value : fallback;\n}\n","/**\n * Turns a loose agent-authored `table` element into a fully-resolved table,\n * where every cell already carries every decision. Mirrors PHP\n * `Table\\TableResolver` — including its resolution ORDER, because the two\n * engines are held to byte-identical OOXML.\n *\n * The resolved shape is expressed in POINTS and 6-digit hex, never EMU, so it\n * is document-format-neutral: `last-word` (docx) needs the same decisions and\n * renders them as `w:tcBorders` / `w:tcMar` / `w:vAlign` / `w:gridSpan`. The\n * shared contract between the two packages is THIS MODEL, not the XML, and it\n * is pinned as a cross-language table in `fancy-conformance`\n * (`shared/table-cell-control`).\n *\n * Precedence, which is the whole design:\n *\n * cell > row > column > band (header|stripe|body) > table > theme > default\n *\n * A key that is ABSENT falls through. A key present with the value `false`\n * stops the chain and means \"off\" — which is why this code tests key presence\n * rather than truthiness in the places it does.\n */\nimport { Color } from \"../helpers/color\";\nimport { isNumeric, isPlainObject } from \"../util\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Any = any;\n\nexport const DEFAULT_FONT_SIZE = 28;\nexport const DEFAULT_BODY_COLOR = \"#0F172A\";\nexport const DEFAULT_HEADER_COLOR = \"#FFFFFF\";\nexport const DEFAULT_ACCENT = \"#8B5CF6\";\nexport const DEFAULT_STRIPE_FILL = \"#F8FAFC\";\nexport const DEFAULT_BORDER_COLOR = \"#D9DEE4\";\nexport const DEFAULT_BORDER_WIDTH = 0.75;\nexport const DEFAULT_PADDING_X = 7.2;\nexport const DEFAULT_PADDING_Y = 3.6;\nexport const DEFAULT_HEADER_HEIGHT = 40;\nexport const DEFAULT_BODY_HEIGHT = 30;\n\nexport interface ResolvedBorder {\n width: number;\n color: string;\n style: string;\n}\n\nexport interface ResolvedCell {\n text: string;\n bold: boolean;\n italic: boolean;\n underline: boolean;\n color: string;\n fill: string | null;\n align: string;\n anchor: string;\n fontSize: number;\n letterSpacing: number;\n caps: string;\n fontFamily: string | null;\n padding: { left: number; right: number; top: number; bottom: number };\n borders: { left: ResolvedBorder | null; right: ResolvedBorder | null; top: ResolvedBorder | null; bottom: ResolvedBorder | null };\n colSpan: number;\n rowSpan: number;\n merged: string;\n}\n\nexport interface ResolvedColumn {\n key: string;\n label: string;\n width: number | null;\n align: string | null;\n anchor: string | null;\n widthFrac: number;\n}\n\nexport interface ResolvedRow {\n header: boolean;\n height: number;\n cells: ResolvedCell[];\n}\n\nexport interface ResolvedTable {\n columns: ResolvedColumn[];\n rows: ResolvedRow[];\n hasHeader: boolean;\n}\n\nconst STYLE_KEYS = [\n \"fill\", \"color\", \"bold\", \"italic\", \"underline\", \"align\", \"anchor\",\n \"fontSize\", \"letterSpacing\", \"caps\", \"fontFamily\", \"padding\", \"borders\",\n] as const;\n\nconst CELL_SPEC_KEYS = [\n \"text\", \"colSpan\", \"rowSpan\", \"fill\", \"color\", \"bold\", \"italic\", \"underline\",\n \"align\", \"anchor\", \"fontSize\", \"letterSpacing\", \"caps\", \"fontFamily\", \"padding\", \"borders\",\n];\n\nexport const TableResolver = {\n DEFAULT_FONT_SIZE,\n DEFAULT_BORDER_WIDTH,\n DEFAULT_BORDER_COLOR,\n\n resolve(element: Any, theme: Any = {}): ResolvedTable {\n const columns = normalizeColumns(Array.isArray(element?.columns) ? element.columns : []);\n const rawRows: Any[] = Array.isArray(element?.rows) ? element.rows : [];\n const style: Any = isPlainObject(element?.style) ? element.style : {};\n\n const accent = themeColor(theme, \"accent\", DEFAULT_ACCENT);\n\n const headerSpec = style.header ?? [];\n const hasHeader = headerSpec !== false;\n const headerStyle: Any = isPlainObject(headerSpec) ? headerSpec : {};\n\n const bodyStyle: Any = isPlainObject(style.body) ? style.body : {};\n\n const stripeSpec = style.stripe ?? [];\n const stripeOn = stripeSpec !== false;\n const stripeStyle: Any = isPlainObject(stripeSpec) ? stripeSpec : {};\n\n const tableDefaults: Any = {\n color: DEFAULT_BODY_COLOR,\n align: \"left\",\n anchor: \"middle\",\n fontSize: DEFAULT_FONT_SIZE,\n };\n const tableStyle = styleKeys(style);\n\n const grid = buildGrid(columns, rawRows, hasHeader);\n\n const rows: ResolvedRow[] = [];\n const rowCount = grid.length;\n\n grid.forEach((gridRow, r) => {\n const isHeader = hasHeader && r === 0;\n const rowSource: Any = gridRow.source;\n const rowStyle = styleKeys(rowSource);\n\n let bandStyle: Any = isHeader\n ? { fill: accent, color: DEFAULT_HEADER_COLOR, bold: true, ...headerStyle }\n : bodyStyle;\n\n // Striping is counted over BODY rows only, and the first body row is\n // never striped — which is what the writer did before this existed.\n if (!isHeader && stripeOn) {\n const bodyIndex = hasHeader ? r - 1 : r;\n if (bodyIndex % 2 === 1) {\n bandStyle = { ...bandStyle, fill: DEFAULT_STRIPE_FILL, ...stripeStyle };\n }\n }\n\n const cells: ResolvedCell[] = gridRow.cells.map((slot, c) =>\n resolveCell(\n slot,\n [tableDefaults, tableStyle, bandStyle, styleKeys(columns[c]!), rowStyle],\n {\n firstRow: r === 0,\n lastRow: r === rowCount - 1,\n firstCol: c === 0,\n lastCol: c === columns.length - 1,\n },\n ),\n );\n\n rows.push({\n header: isHeader,\n height: rowHeight(rowSource, bandStyle, tableStyle, isHeader),\n cells,\n });\n });\n\n return { columns, rows, hasHeader };\n },\n\n normalizeColumns,\n columnWidthsEmu,\n};\n\n// ─── Columns ────────────────────────────────────────────────────────────────\n\n/**\n * Normalise the column list, resolving widths to fractions that sum to 1.\n *\n * Two modes, chosen by the values themselves: every declared width <= 1 makes\n * them FRACTIONS of the table (columns without one share what is left over);\n * any declared width > 1 makes them WEIGHTS (columns without one weigh 1). No\n * width anywhere is an equal split, which is what the writer did before widths\n * were reachable at all.\n */\nfunction normalizeColumns(raw: Any[]): ResolvedColumn[] {\n const columns: ResolvedColumn[] = raw.map((col: Any, i: number) => {\n const c: Any = isPlainObject(col) ? col : { key: String(col) };\n return {\n key: String(c.key ?? `col${i}`),\n label: String(c.label ?? c.key ?? \"\"),\n width: isNumeric(c.width) && Number(c.width) > 0 ? Number(c.width) : null,\n align: c.align ?? null,\n anchor: c.anchor ?? null,\n widthFrac: 0,\n };\n });\n\n const n = columns.length;\n if (n === 0) return [];\n\n const declared = columns.map((c) => c.width).filter((w): w is number => w !== null);\n\n if (declared.length === 0) {\n columns.forEach((c) => (c.widthFrac = 1 / n));\n return columns;\n }\n\n const asFractions = Math.max(...declared) <= 1.0;\n const undeclared = n - declared.length;\n\n let weights: number[];\n if (asFractions) {\n const remaining = Math.max(0, 1 - declared.reduce((a, b) => a + b, 0));\n const share = undeclared > 0 ? remaining / undeclared : 0;\n weights = columns.map((c) => c.width ?? share);\n } else {\n weights = columns.map((c) => c.width ?? 1.0);\n }\n\n const total = weights.reduce((a, b) => a + b, 0);\n columns.forEach((c, i) => (c.widthFrac = total > 0 ? weights[i]! / total : 1 / n));\n\n return columns;\n}\n\n/**\n * Column widths in EMU that sum EXACTLY to the table width.\n *\n * Rounding each fraction independently loses or gains a few EMU and leaves the\n * grid a hair narrower or wider than the frame; accumulating and differencing\n * cannot.\n */\nfunction columnWidthsEmu(columns: ResolvedColumn[], totalEmu: number): number[] {\n const out: number[] = [];\n let cum = 0;\n let prev = 0;\n for (const col of columns) {\n cum += col.widthFrac;\n const edge = Math.round(cum * totalEmu);\n out.push(edge - prev);\n prev = edge;\n }\n return out;\n}\n\n// ─── The grid ───────────────────────────────────────────────────────────────\n\ninterface Slot {\n spec: Any;\n merged: string;\n colSpan: number;\n rowSpan: number;\n}\n\n/**\n * Lay every row out as exactly columns.length slots, marking the ones a span\n * swallows. Spans are clamped to the grid: a `colSpan` of 99 on a two-column\n * table is a 2, never a row with 99 cells in it.\n */\nfunction buildGrid(columns: ResolvedColumn[], rawRows: Any[], hasHeader: boolean): { source: Any; cells: Slot[] }[] {\n const n = columns.length;\n const grid: { source: Any; cells: Slot[] }[] = [];\n\n if (hasHeader) {\n grid.push({\n source: {},\n cells: columns.map((col) => ({ spec: { text: col.label }, merged: \"none\", colSpan: 1, rowSpan: 1 })),\n });\n }\n\n for (const row of rawRows) {\n if (!isPlainObject(row)) continue;\n const cellMap: Any = isPlainObject(row.cells) ? row.cells : row;\n grid.push({\n source: row,\n cells: columns.map((col) => ({\n spec: cellSpec(cellMap[col.key]),\n merged: \"none\",\n colSpan: 1,\n rowSpan: 1,\n })),\n });\n }\n\n for (let r = 0; r < grid.length; r++) {\n for (let c = 0; c < n; c++) {\n if (grid[r]!.cells[c]!.merged !== \"none\") continue;\n const spec = grid[r]!.cells[c]!.spec;\n const colSpan = clampSpan(spec.colSpan, n - c);\n const rowSpan = clampSpan(spec.rowSpan, grid.length - r);\n\n grid[r]!.cells[c]!.colSpan = colSpan;\n grid[r]!.cells[c]!.rowSpan = rowSpan;\n\n for (let dr = 0; dr < rowSpan; dr++) {\n for (let dc = 0; dc < colSpan; dc++) {\n if (dr === 0 && dc === 0) continue;\n const covered = dc > 0 && dr > 0 ? \"both\" : dc > 0 ? \"horizontal\" : \"vertical\";\n grid[r + dr]!.cells[c + dc]!.merged = covered;\n grid[r + dr]!.cells[c + dc]!.spec = { text: \"\" };\n }\n }\n }\n }\n\n return grid;\n}\n\nfunction clampSpan(span: Any, available: number): number {\n const s = isNumeric(span) ? Math.trunc(Number(span)) : 1;\n return Math.max(1, Math.min(s, Math.max(1, available)));\n}\n\n/**\n * A cell value is either a scalar or a spec object.\n *\n * BEHAVIOUR CHANGE: an object used to be JSON-stringified into the cell text.\n * Anything carrying none of the spec keys still is, so a genuine nested value\n * an agent meant to display is not silently emptied.\n */\nfunction cellSpec(value: Any): Any {\n if (isPlainObject(value)) {\n if (CELL_SPEC_KEYS.some((k) => k in value)) {\n return { ...value, text: scalarText(value.text ?? \"\") };\n }\n return { text: JSON.stringify(value) };\n }\n if (Array.isArray(value)) return { text: JSON.stringify(value) };\n return { text: scalarText(value) };\n}\n\nfunction scalarText(value: Any): string {\n if (value === null || value === undefined) return \"\";\n if (typeof value === \"boolean\") return value ? \"1\" : \"\";\n if (typeof value === \"number\" || typeof value === \"string\") return String(value);\n return JSON.stringify(value);\n}\n\n// ─── One cell ───────────────────────────────────────────────────────────────\n\nfunction resolveCell(slot: Slot, chain: Any[], edges: Record<string, boolean>): ResolvedCell {\n const spec = slot.spec;\n const layers = [...chain, styleKeys(spec)];\n\n const resolved: Any = {};\n for (const layer of layers) {\n for (const k of Object.keys(layer)) resolved[k] = layer[k];\n }\n\n const fill = resolved.fill ?? null;\n\n return {\n text: String(spec.text ?? \"\"),\n bold: Boolean(resolved.bold ?? false),\n italic: Boolean(resolved.italic ?? false),\n underline: Boolean(resolved.underline ?? false),\n color: hex(resolved.color ?? DEFAULT_BODY_COLOR, \"0F172A\"),\n fill: fill === false || fill === null || fill === \"none\" ? null : hex(fill, \"FFFFFF\"),\n align: alignOf(resolved.align ?? \"left\"),\n anchor: anchorOf(resolved.anchor ?? \"middle\"),\n fontSize: Math.max(1, Number(resolved.fontSize ?? DEFAULT_FONT_SIZE) / 2),\n letterSpacing: Number(resolved.letterSpacing ?? 0),\n caps: capsOf(resolved.caps ?? \"none\"),\n fontFamily: resolved.fontFamily !== undefined && resolved.fontFamily !== null ? String(resolved.fontFamily) : null,\n padding: resolvePadding(resolved.padding ?? null),\n borders: resolveBorders(layers, edges),\n colSpan: slot.colSpan,\n rowSpan: slot.rowSpan,\n merged: slot.merged,\n };\n}\n\n/**\n * Per-side border resolution. The whole point of the module, and the part\n * `last-word` needs identically.\n */\nfunction resolveBorders(layers: Any[], edges: Record<string, boolean>): ResolvedCell[\"borders\"] {\n const sides: [keyof ResolvedCell[\"borders\"], string][] = [\n [\"left\", \"firstCol\"],\n [\"right\", \"lastCol\"],\n [\"top\", \"firstRow\"],\n [\"bottom\", \"lastRow\"],\n ];\n\n const out: Any = {};\n\n for (const [side, edgeKey] of sides) {\n const isOuter = edges[edgeKey]!;\n let value: Any = { width: DEFAULT_BORDER_WIDTH, color: DEFAULT_BORDER_COLOR };\n\n for (const layer of layers) {\n if (!(\"borders\" in layer)) continue;\n const spec = layer.borders;\n\n if (spec === false || spec === null || spec === \"none\") {\n value = null;\n continue;\n }\n if (!isPlainObject(spec)) continue;\n if (spec.none) {\n value = null;\n continue;\n }\n\n // A bare {width,color,style} means all four sides.\n if (spec.width !== undefined || spec.color !== undefined || spec.style !== undefined) {\n value = spec;\n }\n if (\"all\" in spec) value = spec.all;\n const band = isOuter ? \"outer\" : \"inner\";\n if (band in spec) value = spec[band];\n if (side in spec) value = spec[side];\n }\n\n out[side] = borderSide(value);\n }\n\n return out;\n}\n\nfunction borderSide(value: Any): ResolvedBorder | null {\n if (value === false || value === null || value === undefined || value === \"none\") return null;\n if (!isPlainObject(value)) return null;\n\n const width = isNumeric(value.width) ? Number(value.width) : DEFAULT_BORDER_WIDTH;\n if (width <= 0) return null;\n\n const style = String(value.style ?? \"solid\");\n\n return {\n width,\n color: hex(value.color ?? DEFAULT_BORDER_COLOR, \"D9DEE4\"),\n style: [\"solid\", \"dash\", \"dot\"].includes(style) ? style : \"solid\",\n };\n}\n\nfunction resolvePadding(padding: Any): ResolvedCell[\"padding\"] {\n const out = {\n left: DEFAULT_PADDING_X,\n right: DEFAULT_PADDING_X,\n top: DEFAULT_PADDING_Y,\n bottom: DEFAULT_PADDING_Y,\n };\n\n if (isNumeric(padding)) {\n const v = Number(padding);\n return { left: v, right: v, top: v, bottom: v };\n }\n if (isPlainObject(padding)) {\n for (const side of [\"left\", \"right\", \"top\", \"bottom\"] as const) {\n if (isNumeric(padding[side])) out[side] = Number(padding[side]);\n }\n }\n\n return out;\n}\n\n// ─── Bands + defaults ───────────────────────────────────────────────────────\n\n/**\n * The style keys a layer may contribute. Filtering by an allow-list keeps a\n * row's `cells` / `height` (and a column's `key` / `label`) from leaking into a\n * cell's resolved style.\n */\nfunction styleKeys(source: Any): Any {\n const out: Any = {};\n if (!isPlainObject(source)) return out;\n for (const k of STYLE_KEYS) {\n if (k in source && source[k] !== null && source[k] !== undefined) out[k] = source[k];\n }\n return out;\n}\n\nfunction rowHeight(rowSource: Any, bandStyle: Any, tableStyle: Any, isHeader: boolean): number {\n for (const candidate of [rowSource?.height, bandStyle?.height, tableStyle?.rowHeight]) {\n if (isNumeric(candidate)) return Number(candidate);\n }\n return isHeader ? DEFAULT_HEADER_HEIGHT : DEFAULT_BODY_HEIGHT;\n}\n\n// ─── Small coercions ────────────────────────────────────────────────────────\n\nfunction themeColor(theme: Any, key: string, fallback: string): string {\n const colors: Any = isPlainObject(theme?.colors) ? theme.colors : {};\n const value = colors[key];\n return typeof value === \"string\" && value !== \"\" ? value : fallback;\n}\n\nfunction hex(value: Any, fallback: string): string {\n return Color.parse(typeof value === \"string\" ? value : null, fallback)[0];\n}\n\nfunction alignOf(value: Any): string {\n switch (String(value)) {\n case \"center\":\n case \"centre\":\n return \"center\";\n case \"right\":\n return \"right\";\n case \"justify\":\n return \"justify\";\n default:\n return \"left\";\n }\n}\n\nfunction anchorOf(value: Any): string {\n switch (String(value)) {\n case \"top\":\n return \"top\";\n case \"bottom\":\n return \"bottom\";\n default:\n return \"middle\";\n }\n}\n\nfunction capsOf(value: Any): string {\n switch (String(value)) {\n case \"small\":\n return \"small\";\n case \"all\":\n case \"upper\":\n return \"all\";\n default:\n return \"none\";\n }\n}\n","/**\n * The box a text element lives in: fill, outline, corner radius, insets — and\n * the left accent bar that makes a callout a callout. Mirrors PHP\n * `Text\\BoxDecoration`.\n *\n * ## Why the accent bar is a gradient\n *\n * DrawingML has no per-side border on a shape: `<a:ln>` is all four sides or\n * none. So a coloured bar down one edge has always meant a second shape\n * underneath, which pushes z-ordering and geometry onto whoever authors the\n * deck — and an agent emitting three elements that have to line up is three\n * chances to get it wrong.\n *\n * `<a:gradFill>` with two stops at ADJACENT positions is a hard edge, not a\n * blend. Four stops therefore paint a bar and a flat tint in a single shape,\n * with no extra element, no z-order and no second shape id for the animation\n * builder to renumber. Verified rendering before it was designed in.\n */\nimport { Color } from \"../helpers/color\";\nimport { Emu } from \"../helpers/emu\";\nimport { Xml } from \"../helpers/xml\";\nimport { isNumeric, isPlainObject } from \"../util\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Any = any;\n\n/** Gap between the accent bar and the text when nothing says otherwise. */\nexport const ACCENT_GUTTER_PT = 8.0;\n\nexport const BoxDecoration = {\n ACCENT_GUTTER_PT,\n\n /** The `<p:spPr>` interior: geometry, fill and line, in schema order. */\n spPr(style: Any, widthEmu: number, heightEmu: number): string {\n return geometry(style, widthEmu, heightEmu) + fill(style, widthEmu) + line(style);\n },\n\n hasDecoration(style: Any): boolean {\n return (\n style?.fill !== undefined ||\n style?.accentBar !== undefined ||\n style?.border !== undefined ||\n style?.radius !== undefined\n );\n },\n\n /**\n * `lIns`/`tIns`/`rIns`/`bIns` for the text body, or an empty string when the\n * element says nothing — decks that predate this keep their bytes.\n *\n * An accent bar with no explicit padding gets a left inset wide enough to\n * clear it, because text printed on top of the bar is the obvious way for\n * this feature to look broken.\n */\n bodyInsets(style: Any): string {\n const padding = style?.padding ?? null;\n const bar: Any = isPlainObject(style?.accentBar) ? style.accentBar : null;\n\n if ((padding === null || padding === undefined) && bar === null) return \"\";\n\n // PowerPoint's own defaults, which is what an undecorated box uses.\n const sides: Record<string, number> = { left: 7.2, right: 7.2, top: 3.6, bottom: 3.6 };\n\n if (bar !== null && (bar.side ?? \"left\") !== \"right\") {\n sides.left = Number(bar.width ?? 4) + ACCENT_GUTTER_PT;\n }\n if (bar !== null && (bar.side ?? \"left\") === \"right\") {\n sides.right = Number(bar.width ?? 4) + ACCENT_GUTTER_PT;\n }\n\n if (isNumeric(padding)) {\n for (const k of Object.keys(sides)) sides[k] = Number(padding);\n } else if (isPlainObject(padding)) {\n for (const k of Object.keys(sides)) {\n if (isNumeric(padding[k])) sides[k] = Number(padding[k]);\n }\n }\n\n return (\n ` lIns=\"${Emu.fromPt(sides.left!)}\"` +\n ` tIns=\"${Emu.fromPt(sides.top!)}\"` +\n ` rIns=\"${Emu.fromPt(sides.right!)}\"` +\n ` bIns=\"${Emu.fromPt(sides.bottom!)}\"`\n );\n },\n};\n\nfunction geometry(style: Any, widthEmu: number, heightEmu: number): string {\n const radius = style?.radius ?? null;\n if (!isNumeric(radius) || Number(radius) <= 0) {\n return '<a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>';\n }\n\n // `adj` is a proportion of HALF the shorter side, in 1/1000 of a percent.\n const shorter = Math.max(1, Math.min(widthEmu, heightEmu));\n let adj = Math.round((Emu.fromPt(Number(radius)) / (shorter / 2)) * 100000);\n adj = Math.max(0, Math.min(50000, adj));\n\n return `<a:prstGeom prst=\"roundRect\"><a:avLst><a:gd name=\"adj\" fmla=\"val ${adj}\"/></a:avLst></a:prstGeom>`;\n}\n\nfunction fill(style: Any, widthEmu: number): string {\n const bar: Any = isPlainObject(style?.accentBar) ? style.accentBar : null;\n const hasFill = style?.fill !== undefined && style.fill !== false && style.fill !== \"none\";\n\n if (bar === null) {\n if (!hasFill) return \"<a:noFill/>\";\n const [hex] = Color.parse(String(style.fill), \"FFFFFF\");\n return `<a:solidFill><a:srgbClr val=\"${hex}\"/></a:solidFill>`;\n }\n\n const [barHex] = Color.parse(String(bar.color ?? \"#8B5CF6\"), \"8B5CF6\");\n const [restHex] = Color.parse(hasFill ? String(style.fill) : \"#FFFFFF\", \"FFFFFF\");\n\n const barEmu = Emu.fromPt(Number(bar.width ?? 4));\n let pos = widthEmu > 0 ? Math.round((barEmu / widthEmu) * 100000) : 1000;\n pos = Math.max(1, Math.min(99998, pos));\n\n const right = (bar.side ?? \"left\") === \"right\";\n\n let stops: string;\n if (right) {\n const edge = 100000 - pos;\n stops =\n `<a:gs pos=\"0\"><a:srgbClr val=\"${restHex}\"/></a:gs>` +\n `<a:gs pos=\"${edge - 1}\"><a:srgbClr val=\"${restHex}\"/></a:gs>` +\n `<a:gs pos=\"${edge}\"><a:srgbClr val=\"${barHex}\"/></a:gs>` +\n `<a:gs pos=\"100000\"><a:srgbClr val=\"${barHex}\"/></a:gs>`;\n } else {\n stops =\n `<a:gs pos=\"0\"><a:srgbClr val=\"${barHex}\"/></a:gs>` +\n `<a:gs pos=\"${pos}\"><a:srgbClr val=\"${barHex}\"/></a:gs>` +\n `<a:gs pos=\"${pos + 1}\"><a:srgbClr val=\"${restHex}\"/></a:gs>` +\n `<a:gs pos=\"100000\"><a:srgbClr val=\"${restHex}\"/></a:gs>`;\n }\n\n return `<a:gradFill flip=\"none\" rotWithShape=\"0\"><a:gsLst>${stops}</a:gsLst><a:lin ang=\"0\" scaled=\"0\"/></a:gradFill>`;\n}\n\nfunction line(style: Any): string {\n const border = style?.border ?? null;\n if (border === null || border === undefined || border === false || border === \"none\") return \"\";\n if (!isPlainObject(border)) return \"\";\n\n const width = isNumeric(border.width) ? Number(border.width) : 1.0;\n if (width <= 0) return \"\";\n\n const [hex] = Color.parse(String(border.color ?? \"#CBD5E1\"), \"CBD5E1\");\n const dash = (border.style ?? \"solid\") !== \"solid\" ? `<a:prstDash val=\"${Xml.attr(String(border.style))}\"/>` : \"\";\n\n return `<a:ln w=\"${Emu.fromPt(width)}\"><a:solidFill><a:srgbClr val=\"${hex}\"/></a:solidFill>${dash}</a:ln>`;\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 { Composites } from \"../table/composites\";\nimport { TableResolver, type ResolvedCell } from \"../table/table-resolver\";\nimport { BoxDecoration } from \"../text/box-decoration\";\nimport { isNumeric, isPlainObject } from \"../util\";\nimport { zipSync } from \"../zip\";\n\nconst NS_CHART = \"http://schemas.openxmlformats.org/drawingml/2006/chart\";\n\n/** `anchor` on `<a:tcPr>` — the vertical anchor of a table cell. */\nconst ANCHOR_ATTR: Record<string, string> = { top: \"t\", middle: \"ctr\", bottom: \"b\" };\n\n/** `algn` on `<a:pPr>`. */\nconst ALIGN_ATTR: Record<string, string> = { left: \"l\", center: \"ctr\", right: \"r\", justify: \"just\" };\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 /** Extension uri under which the deck's mono typeface is recorded in theme1.xml. */\n static readonly MONO_FONT_EXT_URI = \"urn:particle-academy:dark-slide:mono-font\";\n\n /** Namespace for DarkSlide's own elements inside an `<a:ext>`. */\n static readonly NS_DARK_SLIDE = \"urn:particle-academy:dark-slide\";\n\n private themeAccent = \"8B5CF6\";\n\n /** The deck's theme, kept whole so the table resolver can read its colours. */\n private deckTheme: Any = {};\n\n /**\n * Monospace typeface for code runs, from `theme.fonts.mono`.\n *\n * There is no third slot in OOXML's `<a:fontScheme>` — a theme carries a\n * major and a minor font and nothing else — so unlike heading and body this\n * cannot ride along in theme1.xml and has to be written onto each code run.\n * That is why it was missed in all three engines: accepted by every\n * validator, published in the JSON Schema handed to an LLM as the tool\n * definition, named in the writers' own docblocks, and applied nowhere.\n */\n private themeMono = \"Consolas\";\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 this.deckTheme = isPlainObject(deck?.theme) ? deck.theme : {};\n const mono = deck?.theme?.fonts?.mono;\n this.themeMono = typeof mono === \"string\" && mono.trim() !== \"\" ? mono.trim() : \"Consolas\";\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 const mono = Xml.attr(this.themeMono);\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 // The mono typeface, recorded so the READER can recognise a code run\n // again. `<a:fontScheme>` has exactly two slots, so there is nowhere in a\n // standard theme for a third font; `<a:extLst>` is the standard place for\n // exactly this, and consumers that do not know the uri ignore it.\n '<a:extLst><a:ext uri=\"' + PptxWriter.MONO_FONT_EXT_URI + '\">' +\n '<ds:monoFont xmlns:ds=\"' + PptxWriter.NS_DARK_SLIDE + '\" typeface=\"' + mono + '\"/>' +\n \"</a:ext></a:extLst>\" +\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\n // Composites are authoring sugar: they become an ordinary `table` element\n // here, before anything is serialised. See table/composites.\n if (Composites.isComposite(element.type)) {\n element = Composites.expand(element, this.deckTheme);\n }\n\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 style: Any = isPlainObject(element.style) ? element.style : {};\n const body = this.buildTextBody(String(element.content ?? \"\"), style, String(element.format ?? \"plain\"));\n const id = element.id ?? `text-${shapeId}`;\n\n const widthEmu = Emu.fromFracX(toFloat(element.w ?? 0.8));\n const heightEmu = Emu.fromFracY(toFloat(element.h ?? 0.2));\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 BoxDecoration.spPr(style, widthEmu, heightEmu) +\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, strokeAlpha] = Color.parse(element.stroke ?? \"#8B5CF6\", \"8B5CF6\");\n const strokeWidth = toFloat(element.strokeWidth ?? 2);\n const strokeWidthEmu = Emu.fromPt(strokeWidth);\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 // \"No outline\" has to be sayable. `<a:ln w=\"0\">` is a HAIRLINE in every\n // renderer tested, not an absence, so a zero width or a transparent stroke\n // has to become an explicit `<a:noFill/>` — otherwise every composed\n // callout carries a thin border nobody asked for.\n const lnXml =\n strokeWidth <= 0 || strokeAlpha === 0\n ? \"<a:ln><a:noFill/></a:ln>\"\n : '<a:ln w=\"' + strokeWidthEmu + '\"><a:solidFill><a:srgbClr val=\"' + strokeHex + '\"/></a:solidFill>' + dashStr + \"</a:ln>\";\n\n // A shape carrying `content` gets a real text body. Before this it was\n // always an empty `<a:endParaRPr/>`, so a labelled shape was two elements\n // the author had to keep aligned by hand.\n const content = String(element.content ?? \"\");\n const txBody =\n content === \"\"\n ? '<p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody>'\n : this.buildTextBody(\n content,\n { align: \"center\", verticalAlign: \"middle\", ...(isPlainObject(element.style) ? element.style : {}) },\n String(element.format ?? \"plain\"),\n );\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 lnXml +\n \"</p:spPr>\" +\n 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=\"' + Xml.attr(this.themeMono) + '\"/>' +\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 columnsRaw: Any[] = Array.isArray(element.columns) ? element.columns : [];\n if (columnsRaw.length === 0) {\n return this.buildPlaceholder(\"[table: no columns]\", element, shapeId);\n }\n\n const table = TableResolver.resolve(element, this.deckTheme);\n\n const totalWidthEmu = Emu.fromFracX(toFloat(element.w ?? 0.5));\n const widths = TableResolver.columnWidthsEmu(table.columns, totalWidthEmu);\n\n let gridCols = \"\";\n for (const w of widths) {\n gridCols += '<a:gridCol w=\"' + w + '\"/>';\n }\n\n let rowsXml = \"\";\n for (const row of table.rows) {\n let cells = \"\";\n for (const cell of row.cells) {\n cells += this.buildTableCell(cell);\n }\n rowsXml += '<a:tr h=\"' + Emu.fromPt(row.height) + '\">' + cells + \"</a:tr>\";\n }\n\n const xfrm = this.xfrmFromFractions(element);\n const id = element.id ?? `table-${shapeId}`;\n\n // \"No Style, No Grid\". Every fill and every rule is now stated per cell, so\n // a built-in table style is not a default to fall back on — it is a second\n // opinion layered on top of ours. The old id was Medium Style 2 Accent 1,\n // whose banding fought the striping below it.\n const tblPr =\n \"<a:tblPr\" + (table.hasHeader ? ' firstRow=\"1\"' : \"\") +\n \"><a:tableStyleId>{2D5ABB26-0587-4C30-8999-92F81FD0307C}</a:tableStyleId></a:tblPr>\";\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 tblPr +\n \"<a:tblGrid>\" + gridCols + \"</a:tblGrid>\" +\n rowsXml +\n \"</a:tbl>\" +\n \"</a:graphicData>\" +\n \"</a:graphic>\" +\n \"</p:graphicFrame>\"\n );\n }\n\n /**\n * Serialise one resolved cell. Makes no styling decisions — every value here\n * was decided by the resolver.\n *\n * Three things in here are load-bearing and easy to get wrong:\n *\n * - `gridSpan` / `rowSpan` / `hMerge` / `vMerge` are attributes of\n * `<a:tc>`, NOT of `<a:tcPr>`. On `tcPr` they parse fine and are silently\n * ignored, so the table renders unmerged with no error anywhere.\n * - `<a:tcPr>` has a FIXED child order: lnL, lnR, lnT, lnB, then the fill.\n * Emitting the fill first produces a file whose fill a reader drops.\n * - \"No border\" is STATED. An absent `<a:lnL>` is an UNSPECIFIED rule, not\n * an absent one, and a reader supplies its own.\n */\n private buildTableCell(cell: ResolvedCell): string {\n let attrs = \"\";\n if (cell.colSpan > 1) attrs += ' gridSpan=\"' + cell.colSpan + '\"';\n if (cell.rowSpan > 1) attrs += ' rowSpan=\"' + cell.rowSpan + '\"';\n if (cell.merged === \"horizontal\" || cell.merged === \"both\") attrs += ' hMerge=\"1\"';\n if (cell.merged === \"vertical\" || cell.merged === \"both\") attrs += ' vMerge=\"1\"';\n\n const pad = cell.padding;\n const tcPrAttrs =\n ' marL=\"' + Emu.fromPt(pad.left) + '\"' +\n ' marR=\"' + Emu.fromPt(pad.right) + '\"' +\n ' marT=\"' + Emu.fromPt(pad.top) + '\"' +\n ' marB=\"' + Emu.fromPt(pad.bottom) + '\"' +\n ' anchor=\"' + ANCHOR_ATTR[cell.anchor]! + '\"';\n\n let borders = \"\";\n for (const [side, suffix] of [[\"left\", \"L\"], [\"right\", \"R\"], [\"top\", \"T\"], [\"bottom\", \"B\"]] as const) {\n const spec = cell.borders[side];\n if (spec === null) {\n borders += \"<a:ln\" + suffix + \"><a:noFill/></a:ln\" + suffix + \">\";\n continue;\n }\n borders +=\n \"<a:ln\" + suffix + ' w=\"' + Emu.fromPt(spec.width) + '\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\">' +\n '<a:solidFill><a:srgbClr val=\"' + spec.color + '\"/></a:solidFill>' +\n '<a:prstDash val=\"' + spec.style + '\"/>' +\n \"</a:ln\" + suffix + \">\";\n }\n\n const fill =\n cell.fill === null\n ? \"<a:noFill/>\"\n : '<a:solidFill><a:srgbClr val=\"' + cell.fill + '\"/></a:solidFill>';\n\n return (\n \"<a:tc\" + attrs + \">\" +\n \"<a:txBody>\" +\n \"<a:bodyPr/>\" +\n \"<a:lstStyle/>\" +\n '<a:p><a:pPr algn=\"' + ALIGN_ATTR[cell.align]! + '\"/>' +\n this.buildCellRun(cell) +\n \"</a:p>\" +\n \"</a:txBody>\" +\n \"<a:tcPr\" + tcPrAttrs + \">\" + borders + fill + \"</a:tcPr>\" +\n \"</a:tc>\"\n );\n }\n\n private buildCellRun(cell: ResolvedCell): string {\n let rPr = '<a:rPr lang=\"en-US\" sz=\"' + Emu.hundredthsOfPoint(cell.fontSize) + '\"';\n if (cell.bold) rPr += ' b=\"1\"';\n if (cell.italic) rPr += ' i=\"1\"';\n if (cell.underline) rPr += ' u=\"sng\"';\n if (cell.letterSpacing !== 0) rPr += ' spc=\"' + Emu.hundredthsOfPoint(cell.letterSpacing) + '\"';\n if (cell.caps !== \"none\") rPr += ' cap=\"' + cell.caps + '\"';\n rPr += \">\";\n rPr += '<a:solidFill><a:srgbClr val=\"' + cell.color + '\"/></a:solidFill>';\n if (cell.fontFamily !== null) {\n rPr += '<a:latin typeface=\"' + Xml.attr(cell.fontFamily) + '\"/>';\n }\n rPr += \"</a:rPr>\";\n\n // An empty run is legal but PowerPoint prefers an endParaRPr for a\n // genuinely empty cell — and a merged continuation cell is always one.\n if (cell.text === \"\") {\n return '<a:endParaRPr lang=\"en-US\" sz=\"' + Emu.hundredthsOfPoint(cell.fontSize) + '\"/>';\n }\n\n return \"<a:r>\" + rPr + \"<a:t>\" + Xml.text(cell.text) + \"</a:t></a:r>\";\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 const spacing = this.paragraphSpacing(style);\n const bullet = this.bulletMarkup(style.bullet ?? null);\n const runExtra = this.runExtraAttrs(style);\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 pPr += isBullet ? ' indent=\"-228600\" marL=\"228600\">' : \">\";\n pPr += spacing;\n pPr += isBullet ? bullet : \"<a:buNone/>\";\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 runExtra,\n );\n }\n } else {\n runs = this.buildRun(body, paragraphSz, paragraphBold, baseItalic, baseUnderline, colorHex, fontFamily, false, false, false, runExtra);\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\"' + BoxDecoration.bodyInsets(style) + \"/>\" +\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 extra = \"\",\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=\"' + Xml.attr(this.themeMono) + '\"/>';\n }\n\n const rPr =\n '<a:rPr lang=\"en-US\" sz=\"' + sz + '\"' + b + i + u + extra + '><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 /**\n * `<a:lnSpc>` / `<a:spcBef>` / `<a:spcAft>` for a paragraph.\n *\n * `lineHeight` is a MULTIPLE (1.4 = 140%), matching CSS and the fancy-slides\n * editor; `spaceBefore` / `spaceAfter` are points. Empty when the style is\n * silent, so decks that predate this keep their bytes.\n */\n private paragraphSpacing(style: Any): string {\n let out = \"\";\n if (isNumeric(style?.lineHeight)) {\n out += '<a:lnSpc><a:spcPct val=\"' + Math.round(toFloat(style.lineHeight) * 100000) + '\"/></a:lnSpc>';\n }\n if (isNumeric(style?.spaceBefore)) {\n out += '<a:spcBef><a:spcPts val=\"' + Emu.hundredthsOfPoint(toFloat(style.spaceBefore)) + '\"/></a:spcBef>';\n }\n if (isNumeric(style?.spaceAfter)) {\n out += '<a:spcAft><a:spcPts val=\"' + Emu.hundredthsOfPoint(toFloat(style.spaceAfter)) + '\"/></a:spcAft>';\n }\n return out;\n }\n\n /**\n * The bullet markup for a list paragraph.\n *\n * `none` suppresses it, `number` makes an auto-numbered list, and anything\n * else is taken as the literal character — which is all a check-mark list is.\n * The default stays the round bullet the writer has always emitted.\n */\n private bulletMarkup(bullet: Any): string {\n if (bullet === null || bullet === undefined || bullet === \"\") {\n return '<a:buFont typeface=\"Arial\"/><a:buChar char=\"•\"/>';\n }\n if (bullet === \"none\" || bullet === false) {\n return \"<a:buNone/>\";\n }\n if (bullet === \"number\") {\n return '<a:buAutoNum type=\"arabicPeriod\"/>';\n }\n return '<a:buFont typeface=\"Arial\"/><a:buChar char=\"' + Xml.attr(String(bullet)) + '\"/>';\n }\n\n /**\n * Run attributes that apply to every run in the body: letter spacing and\n * capitalisation. Both are `<a:rPr>` attributes, so they have to be built as\n * a string and appended rather than nested.\n */\n private runExtraAttrs(style: Any): string {\n let out = \"\";\n if (isNumeric(style?.letterSpacing)) {\n out += ' spc=\"' + Emu.hundredthsOfPoint(toFloat(style.letterSpacing)) + '\"';\n }\n const caps = style?.caps ?? null;\n if (caps === \"small\") {\n out += ' cap=\"small\"';\n } else if (caps === \"all\" || caps === \"upper\") {\n out += ' cap=\"all\"';\n }\n return out;\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"]}
|
|
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/table/composites.ts","../src/table/table-resolver.ts","../src/text/box-decoration.ts","../src/writer/pptx-writer.ts","../src/agent.ts","../src/dark-slide.ts"],"names":["end","hex","line","kind","fill","themeColor"],"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\n /**\n * The mono typeface this deck was written with, read back from the theme's\n * `<a:extLst>`. Empty when the package does not record one — anything not\n * written by a current DarkSlide — in which case the name sniff below is the\n * only signal available.\n */\n private monoTypeface = \"\";\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 /**\n * The mono typeface recorded in `theme1.xml`'s `<a:extLst>`, or `\"\"`.\n *\n * Deliberately a regex rather than a parse: this runs before the deck is\n * built, the element is one attribute deep, and a theme part that does not\n * carry the extension is the common case rather than an error.\n */\n private readMonoTypeface(): string {\n const xml = this.getPart(\"ppt/theme/theme1.xml\");\n if (xml === false) {\n return \"\";\n }\n\n const m = /<ds:monoFont[^>]*typeface=\"([^\"]*)\"/.exec(xml);\n return m\n ? m[1]!\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/&/g, \"&\")\n : \"\";\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 this.monoTypeface = this.readMonoTypeface();\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 // Whether row 0 is a header is DECLARED, not assumed. `a:tblPr/@firstRow`\n // is the only thing that says so, and header-less tables are ordinary now —\n // every metadataGrid and kpiBand is one. Assuming a header promoted a row\n // of DATA to column labels and dropped it from the rows, silently losing\n // content on the way back in.\n const tblPr = descendant(tbl, \"tblPr\");\n const hasHeader = tblPr !== undefined && (at(tblPr, \"firstRow\") ?? \"0\") === \"1\";\n\n // Column widths come from the grid, as fractions of the table, so a table\n // written with unequal columns reads back with them.\n const gridWidths = descendants(tbl, \"gridCol\").map((c) => parseInt(at(c, \"w\") ?? \"0\", 10) || 0);\n const gridTotal = gridWidths.reduce((a, b) => a + b, 0);\n\n const firstCells = descendants(rows[0]!, \"tc\");\n const columnCount = Math.max(firstCells.length, gridWidths.length);\n\n const columns: { key: string; label: string; width?: number }[] = [];\n for (let i = 0; i < columnCount; i++) {\n const column: { key: string; label: string; width?: number } = {\n key: \"col\" + (i + 1),\n label: hasHeader && firstCells[i] !== undefined ? this.cellText(firstCells[i]!) : \"\",\n };\n if (gridTotal > 0 && gridWidths[i] !== undefined) {\n column.width = gridWidths[i]! / gridTotal;\n }\n columns.push(column);\n }\n\n const bodyRows: Record<string, string>[] = [];\n for (let r = hasHeader ? 1 : 0; 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 let 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 // Exact match against the typeface the deck RECORDED first, then the\n // name sniff.\n //\n // The sniff alone was sound while the writer always emitted Consolas.\n // Once a deck can name its own mono font it is not: \"Fira Code\" and\n // \"Cascadia\" contain none of these words, so a code run came back as\n // plain text — a silent downgrade on a file that opens perfectly.\n //\n // The sniff stays as the fallback, because it is the only thing that\n // works for a pptx written by anything else.\n const recorded = this.monoTypeface.toLowerCase();\n\n if (\n (recorded !== \"\" && typeface === recorded) ||\n typeface.includes(\"consola\") ||\n typeface.includes(\"mono\") ||\n typeface.includes(\"courier\")\n ) {\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 // Coalesce adjacent runs that carry the SAME decoration.\n //\n // DrawingML splits text into runs for reasons that have nothing to do with\n // emphasis — a syntax highlighter emits one run per token, all of them\n // code — and emitting a marker per run produces markdown that is not merely\n // ugly but WRONG. A highlighted `const deck = 1;` came back as\n // \"`const`` deck = ``1``;`\", where every pair of adjacent backticks closes\n // one span and opens the next, so re-parsing it yields the inverse of the\n // intended emphasis.\n //\n // Merging first is also what makes the output stable: the same text reads\n // the same whether the writer split it into one run or six.\n const merged: typeof parsed = [];\n for (const run of parsed) {\n const last = merged[merged.length - 1];\n\n if (last && last.b === run.b && last.i === run.i && last.code === run.code) {\n last.text += run.text;\n continue;\n }\n\n merged.push({ ...run });\n }\n parsed = merged;\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 /**\n * `kpiBand` and `metadataGrid` are COMPOSITES: they expand into a `table`\n * before the writer serialises anything, so they add no OOXML surface and\n * read back as the table they became. See table/composites.\n */\n ELEMENT_TYPES: [\"text\", \"image\", \"chart\", \"code\", \"table\", \"shape\", \"embed\", \"kpiBand\", \"metadataGrid\"] as const,\n\n /** The subset of ELEMENT_TYPES that is sugar over a `table`. */\n COMPOSITE_ELEMENT_TYPES: [\"kpiBand\", \"metadataGrid\"] 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\n/**\n * The `style` object, with the unit of every field the writer reads.\n *\n * It used to be published as a bare `{ type: \"object\" }`, so a model filling it\n * in had only the key names, and `fontSize` reads as points. It is design pixels,\n * halved on the way into the file (trap 5 in AGENTS.md): an agent in the\n * fancy-labs document lab set a headline at what it called 232pt and the deck\n * carried 116pt. The units in this object are not all the same either.\n *\n * IDENTICAL to the PHP reference's `Schema::styleJsonSchema()`, and\n * `tests/schema-parity.test.ts` diffs the two exports, so the engines cannot\n * tell a model different things about the same field.\n */\nfunction styleJsonSchema(): Record<string, unknown> {\n return {\n type: \"object\",\n description:\n \"How a text element, or the text inside a shape, looks. The units are NOT uniform: fontSize is in design pixels and is halved into points, while letterSpacing, spaceBefore, spaceAfter, padding, radius and the border and accent-bar widths are already in points, and lineHeight is a multiple.\",\n properties: {\n fontSize: { type: \"number\", description: \"Type size in DESIGN PIXELS on the 1920px-wide fancy-slides canvas, NOT points. The PPTX file carries half, with an 8pt minimum: 96 is written as 48pt, 24 as 12pt, and anything under 16 as 8pt. Default 24.\" },\n fontFamily: { type: \"string\", description: \"Typeface name. No font is embedded in the file, so where this face is not installed the viewer substitutes another, which also changes how wide the text is.\" },\n weight: { type: [\"string\", \"number\"], description: 'Bold when \"bold\" or \"semibold\", or a number of 600 or more. PPTX has only bold and regular, so any other weight renders regular.' },\n italic: { type: \"boolean\" },\n underline: { type: \"boolean\" },\n color: { type: \"string\", description: 'Text colour as a hex string. Default \"#0F172A\".' },\n align: { type: \"string\", description: 'Horizontal alignment: \"left\" (default), \"center\", \"right\" or \"justify\". Anything else renders left.' },\n verticalAlign: { type: \"string\", description: 'Vertical alignment inside the box: \"top\" (default), \"middle\" or \"bottom\".' },\n lineHeight: { type: \"number\", description: \"Line spacing as a MULTIPLE of the type size, as in CSS: 1.4 is written as 140% line spacing.\" },\n letterSpacing: { type: \"number\", description: \"Extra space between letters, in POINTS, not halved: 2 is written as 2pt.\" },\n spaceBefore: { type: \"number\", description: \"Space above each paragraph, in POINTS, not halved: 6 is written as 6pt.\" },\n spaceAfter: { type: \"number\", description: \"Space below each paragraph, in POINTS, not halved.\" },\n caps: { type: \"string\", description: '\"small\" for small capitals, or \"all\" (also \"upper\") for all capitals.' },\n bullet: { type: [\"string\", \"boolean\"], description: 'Marker for list lines (\"- item\"): omit for a round bullet, \"none\" or false for no marker, \"number\" for 1. 2. 3., or any other string to use it as the marker character.' },\n fill: { type: [\"string\", \"boolean\"], description: 'Background colour of the box, as a hex string. \"none\" or false for no fill.' },\n radius: { type: \"number\", description: \"Corner radius of the box, in POINTS.\" },\n border: {\n type: \"object\",\n description: \"An outline on all four sides of the box. PPTX cannot outline a single side; use accentBar for that.\",\n properties: {\n width: { type: \"number\", description: \"Line width in POINTS. Default 1; 0 draws no line.\" },\n color: { type: \"string\", description: 'Hex colour. Default \"#CBD5E1\".' },\n style: { type: \"string\", description: '\"solid\" (default), or a DrawingML dash name such as \"dash\" or \"sysDot\".' },\n },\n },\n padding: { type: [\"number\", \"object\"], description: \"Inset between the box edge and the text, in POINTS: one number for every side (12 is written as 12pt), or {left, right, top, bottom}. When unset the insets are 7.2 left and right and 3.6 top and bottom, widened to clear an accent bar.\" },\n accentBar: {\n type: \"object\",\n description: \"A coloured bar down one edge of the box, as on a callout. Painted inside the same shape, so it needs no second element.\",\n properties: {\n color: { type: \"string\", description: 'Hex colour. Default \"#8B5CF6\".' },\n width: { type: \"number\", description: \"Bar width in POINTS. Default 4.\" },\n side: { type: \"string\", description: '\"left\" (default) or \"right\".' },\n },\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, description: \"Left edge as a FRACTION of the slide width: 0 is the left edge, 0.5 the centre, 1 the right edge. Not pixels.\" },\n y: { type: \"number\", minimum: 0, maximum: 1, description: \"Top edge as a FRACTION of the slide height: 0 is the top, 1 the bottom. Not pixels.\" },\n w: { type: \"number\", minimum: 0, maximum: 1, description: \"Width as a FRACTION of the slide width. 1 spans the whole slide.\" },\n h: { type: \"number\", minimum: 0, maximum: 1, description: \"Height as a FRACTION of the slide height. 1 spans the whole slide.\" },\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: styleJsonSchema(),\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 case \"kpiBand\":\n case \"metadataGrid\":\n // An items-less composite is not an error the writer can see: it\n // expands to a table with no rows and renders as a blank rectangle,\n // which is the worst kind of wrong.\n if (!Array.isArray(element.items) || element.items.length === 0) {\n errors.push(err(`${path}/items`, \"non-empty array\", gettype(element.items ?? null), element.items ?? null, `A \\`${element.type}\\` must have a non-empty \\`items\\` array.`));\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, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/\"/g, \""\");\n },\n\n attr(s: string): string {\n return s\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\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 * Composite elements — `kpiBand` and `metadataGrid` — as AUTHORING SUGAR.\n * Mirrors PHP `Table\\Composites`.\n *\n * Each expands into an ordinary `table` element before the writer ever sees\n * it. That is deliberate, and it has three consequences worth stating because\n * a genuinely new primitive looks tempting:\n *\n * 1. No new OOXML surface. A KPI band is a two-row table with the rule\n * between the rows switched off; a metadata grid is a label-over-value\n * table with every rule switched off. Both were expressible the moment\n * per-cell borders existed — the composite spares an agent the arithmetic.\n * 2. `@particle-academy/fancy-slides` keeps a schema it can render. A new\n * element type would be a hole in the JS editor the day it shipped.\n * 3. A composite READ BACK comes back as its expansion, a `table`. Lossy in\n * one direction, documented rather than hidden — the alternative is a\n * reader inventing intent it cannot recover.\n */\nimport { isNumeric, isPlainObject } from \"../util\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Any = any;\n\nexport const COMPOSITE_TYPES = [\"kpiBand\", \"metadataGrid\"] as const;\n\nexport const Composites = {\n TYPES: COMPOSITE_TYPES,\n\n isComposite(type: unknown): boolean {\n return typeof type === \"string\" && (COMPOSITE_TYPES as readonly string[]).includes(type);\n },\n\n expand(element: Any, theme: Any = {}): Any {\n switch (element?.type) {\n case \"kpiBand\":\n return kpiBand(element, theme);\n case \"metadataGrid\":\n return metadataGrid(element, theme);\n default:\n return element;\n }\n },\n};\n\n/**\n * Four big figures with a small caption under each, in one banded box.\n *\n * The figure and its caption are two table rows that must read as one cell, so\n * the rule between them is turned off from BOTH sides — a border is resolved\n * per cell, and leaving either half on draws the line.\n */\nfunction kpiBand(element: Any, theme: Any): Any {\n const items = itemsOf(element);\n const style: Any = isPlainObject(element.style) ? element.style : {};\n\n const accent = themeColor(theme, \"accent\", \"#8B5CF6\");\n const fill = style.fill ?? null;\n const valueColor = style.valueColor ?? style.color ?? accent;\n const captionColor = style.captionColor ?? themeColor(theme, \"muted\", \"#64748B\");\n // Conservative on purpose: the writer has no font metrics, so it cannot know\n // a figure will fit. Four items across a full-width band at 60 wrapped\n // \"$51K-$68K\" onto two lines. A deck that knows its own content raises it.\n const valueSize = style.valueFontSize ?? 40;\n const captionSize = style.captionFontSize ?? 20;\n const align = style.align ?? \"center\";\n\n const columns: Any[] = [];\n const values: Any = {};\n const captions: Any = {};\n items.forEach((item, i) => {\n const key = `k${i}`;\n columns.push({ key, label: \"\" });\n values[key] = String(item.value ?? \"\");\n captions[key] = String(item.caption ?? \"\");\n });\n\n // Only the rule BETWEEN kpis, plus the band's own outline.\n const borders = style.borders ?? {\n inner: { width: 0.75, color: themeColor(theme, \"muted\", \"#D9DEE4\") },\n outer: { width: 0.75, color: themeColor(theme, \"muted\", \"#D9DEE4\") },\n };\n\n return {\n id: element.id ?? \"kpi-band\",\n type: \"table\",\n x: element.x ?? 0.06,\n y: element.y ?? 0.5,\n w: element.w ?? 0.88,\n h: element.h ?? 0.2,\n z: element.z ?? null,\n hidden: element.hidden ?? null,\n animation: element.animation ?? null,\n columns,\n rows: [\n {\n cells: values,\n height: style.valueHeight ?? 44,\n fontSize: valueSize,\n color: valueColor,\n bold: true,\n align,\n anchor: \"bottom\",\n borders: withoutSide(borders, \"bottom\"),\n },\n {\n cells: captions,\n height: style.captionHeight ?? 30,\n fontSize: captionSize,\n color: captionColor,\n align,\n anchor: \"top\",\n borders: withoutSide(borders, \"top\"),\n },\n ],\n style: {\n header: false,\n stripe: false,\n fill,\n padding: style.padding ?? { left: 8, right: 8, top: 2, bottom: 2 },\n },\n };\n}\n\n/**\n * A label/value metadata panel, `columns` across and as many rows down as the\n * items need. Labels are letterspaced small caps — the eyebrow treatment the\n * construct exists for.\n *\n * A short final row is PADDED to full width. A ragged row is a shorter\n * `<a:tr>` than the grid declares, which is a corrupt file rather than a\n * cosmetic problem.\n */\nfunction metadataGrid(element: Any, theme: Any): Any {\n const items = itemsOf(element);\n const style: Any = isPlainObject(element.style) ? element.style : {};\n\n const across = isNumeric(element.columns) ? Math.max(1, Math.trunc(Number(element.columns))) : 3;\n\n const labelColor = style.labelColor ?? themeColor(theme, \"muted\", \"#64748B\");\n const valueColor = style.valueColor ?? themeColor(theme, \"text\", \"#0F172A\");\n const fill = style.fill ?? null;\n\n const columns: Any[] = [];\n for (let i = 0; i < across; i++) columns.push({ key: `c${i}`, label: \"\" });\n\n const rows: Any[] = [];\n for (let start = 0; start < items.length; start += across) {\n const chunk = items.slice(start, start + across);\n const labels: Any = {};\n const values: Any = {};\n for (let i = 0; i < across; i++) {\n const item: Any = isPlainObject(chunk[i]) ? chunk[i] : {};\n labels[`c${i}`] = String(item.label ?? \"\");\n values[`c${i}`] = String(item.value ?? \"\");\n }\n rows.push({\n cells: labels,\n height: style.labelHeight ?? 18,\n fontSize: style.labelFontSize ?? 18,\n color: labelColor,\n letterSpacing: style.labelLetterSpacing ?? 1.2,\n caps: \"small\",\n bold: true,\n anchor: \"bottom\",\n });\n rows.push({\n cells: values,\n height: style.valueHeight ?? 26,\n fontSize: style.valueFontSize ?? 28,\n color: valueColor,\n bold: true,\n anchor: \"top\",\n });\n }\n\n return {\n id: element.id ?? \"metadata-grid\",\n type: \"table\",\n x: element.x ?? 0.06,\n y: element.y ?? 0.5,\n w: element.w ?? 0.88,\n h: element.h ?? 0.22,\n z: element.z ?? null,\n hidden: element.hidden ?? null,\n animation: element.animation ?? null,\n columns,\n rows,\n style: {\n header: false,\n stripe: false,\n borders: style.borders ?? false,\n fill,\n padding: style.padding ?? { left: 10, right: 10, top: 2, bottom: 2 },\n },\n };\n}\n\n/** Drop one side from a border spec, so two stacked rows read as one cell. */\nfunction withoutSide(borders: Any, side: string): Any {\n if (!isPlainObject(borders)) return borders;\n return { ...borders, [side]: false };\n}\n\nfunction itemsOf(element: Any): Any[] {\n const items = Array.isArray(element?.items) ? element.items : [];\n return items.filter((i: Any) => isPlainObject(i));\n}\n\nfunction themeColor(theme: Any, key: string, fallback: string): string {\n const colors: Any = isPlainObject(theme?.colors) ? theme.colors : {};\n const value = colors[key];\n return typeof value === \"string\" && value !== \"\" ? value : fallback;\n}\n","/**\n * Turns a loose agent-authored `table` element into a fully-resolved table,\n * where every cell already carries every decision. Mirrors PHP\n * `Table\\TableResolver` — including its resolution ORDER, because the two\n * engines are held to byte-identical OOXML.\n *\n * The resolved shape is expressed in POINTS and 6-digit hex, never EMU, so it\n * is document-format-neutral: `last-word` (docx) needs the same decisions and\n * renders them as `w:tcBorders` / `w:tcMar` / `w:vAlign` / `w:gridSpan`. The\n * shared contract between the two packages is THIS MODEL, not the XML, and it\n * is pinned as a cross-language table in `fancy-conformance`\n * (`shared/table-cell-control`).\n *\n * Precedence, which is the whole design:\n *\n * cell > row > column > band (header|stripe|body) > table > theme > default\n *\n * A key that is ABSENT falls through. A key present with the value `false`\n * stops the chain and means \"off\" — which is why this code tests key presence\n * rather than truthiness in the places it does.\n */\nimport { Color } from \"../helpers/color\";\nimport { isNumeric, isPlainObject } from \"../util\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Any = any;\n\nexport const DEFAULT_FONT_SIZE = 28;\nexport const DEFAULT_BODY_COLOR = \"#0F172A\";\nexport const DEFAULT_HEADER_COLOR = \"#FFFFFF\";\nexport const DEFAULT_ACCENT = \"#8B5CF6\";\nexport const DEFAULT_STRIPE_FILL = \"#F8FAFC\";\nexport const DEFAULT_BORDER_COLOR = \"#D9DEE4\";\nexport const DEFAULT_BORDER_WIDTH = 0.75;\nexport const DEFAULT_PADDING_X = 7.2;\nexport const DEFAULT_PADDING_Y = 3.6;\nexport const DEFAULT_HEADER_HEIGHT = 40;\nexport const DEFAULT_BODY_HEIGHT = 30;\n\nexport interface ResolvedBorder {\n width: number;\n color: string;\n style: string;\n}\n\nexport interface ResolvedCell {\n text: string;\n bold: boolean;\n italic: boolean;\n underline: boolean;\n color: string;\n fill: string | null;\n align: string;\n anchor: string;\n fontSize: number;\n letterSpacing: number;\n caps: string;\n fontFamily: string | null;\n padding: { left: number; right: number; top: number; bottom: number };\n borders: { left: ResolvedBorder | null; right: ResolvedBorder | null; top: ResolvedBorder | null; bottom: ResolvedBorder | null };\n colSpan: number;\n rowSpan: number;\n merged: string;\n}\n\nexport interface ResolvedColumn {\n key: string;\n label: string;\n width: number | null;\n align: string | null;\n anchor: string | null;\n widthFrac: number;\n}\n\nexport interface ResolvedRow {\n header: boolean;\n height: number;\n cells: ResolvedCell[];\n}\n\nexport interface ResolvedTable {\n columns: ResolvedColumn[];\n rows: ResolvedRow[];\n hasHeader: boolean;\n}\n\nconst STYLE_KEYS = [\n \"fill\", \"color\", \"bold\", \"italic\", \"underline\", \"align\", \"anchor\",\n \"fontSize\", \"letterSpacing\", \"caps\", \"fontFamily\", \"padding\", \"borders\",\n] as const;\n\nconst CELL_SPEC_KEYS = [\n \"text\", \"colSpan\", \"rowSpan\", \"fill\", \"color\", \"bold\", \"italic\", \"underline\",\n \"align\", \"anchor\", \"fontSize\", \"letterSpacing\", \"caps\", \"fontFamily\", \"padding\", \"borders\",\n];\n\nexport const TableResolver = {\n DEFAULT_FONT_SIZE,\n DEFAULT_BORDER_WIDTH,\n DEFAULT_BORDER_COLOR,\n\n resolve(element: Any, theme: Any = {}): ResolvedTable {\n const columns = normalizeColumns(Array.isArray(element?.columns) ? element.columns : []);\n const rawRows: Any[] = Array.isArray(element?.rows) ? element.rows : [];\n const style: Any = isPlainObject(element?.style) ? element.style : {};\n\n const accent = themeColor(theme, \"accent\", DEFAULT_ACCENT);\n\n const headerSpec = style.header ?? [];\n const hasHeader = headerSpec !== false;\n const headerStyle: Any = isPlainObject(headerSpec) ? headerSpec : {};\n\n const bodyStyle: Any = isPlainObject(style.body) ? style.body : {};\n\n const stripeSpec = style.stripe ?? [];\n const stripeOn = stripeSpec !== false;\n const stripeStyle: Any = isPlainObject(stripeSpec) ? stripeSpec : {};\n\n const tableDefaults: Any = {\n color: DEFAULT_BODY_COLOR,\n align: \"left\",\n anchor: \"middle\",\n fontSize: DEFAULT_FONT_SIZE,\n };\n const tableStyle = styleKeys(style);\n\n const grid = buildGrid(columns, rawRows, hasHeader);\n\n const rows: ResolvedRow[] = [];\n const rowCount = grid.length;\n\n grid.forEach((gridRow, r) => {\n const isHeader = hasHeader && r === 0;\n const rowSource: Any = gridRow.source;\n const rowStyle = styleKeys(rowSource);\n\n let bandStyle: Any = isHeader\n ? { fill: accent, color: DEFAULT_HEADER_COLOR, bold: true, ...headerStyle }\n : bodyStyle;\n\n // Striping is counted over BODY rows only, and the first body row is\n // never striped — which is what the writer did before this existed.\n if (!isHeader && stripeOn) {\n const bodyIndex = hasHeader ? r - 1 : r;\n if (bodyIndex % 2 === 1) {\n bandStyle = { ...bandStyle, fill: DEFAULT_STRIPE_FILL, ...stripeStyle };\n }\n }\n\n const cells: ResolvedCell[] = gridRow.cells.map((slot, c) =>\n resolveCell(\n slot,\n [tableDefaults, tableStyle, bandStyle, styleKeys(columns[c]!), rowStyle],\n {\n firstRow: r === 0,\n lastRow: r === rowCount - 1,\n firstCol: c === 0,\n lastCol: c === columns.length - 1,\n },\n ),\n );\n\n rows.push({\n header: isHeader,\n height: rowHeight(rowSource, bandStyle, tableStyle, isHeader),\n cells,\n });\n });\n\n return { columns, rows, hasHeader };\n },\n\n normalizeColumns,\n columnWidthsEmu,\n};\n\n// ─── Columns ────────────────────────────────────────────────────────────────\n\n/**\n * Normalise the column list, resolving widths to fractions that sum to 1.\n *\n * Two modes, chosen by the values themselves: every declared width <= 1 makes\n * them FRACTIONS of the table (columns without one share what is left over);\n * any declared width > 1 makes them WEIGHTS (columns without one weigh 1). No\n * width anywhere is an equal split, which is what the writer did before widths\n * were reachable at all.\n */\nfunction normalizeColumns(raw: Any[]): ResolvedColumn[] {\n const columns: ResolvedColumn[] = raw.map((col: Any, i: number) => {\n const c: Any = isPlainObject(col) ? col : { key: String(col) };\n return {\n key: String(c.key ?? `col${i}`),\n label: String(c.label ?? c.key ?? \"\"),\n width: isNumeric(c.width) && Number(c.width) > 0 ? Number(c.width) : null,\n align: c.align ?? null,\n anchor: c.anchor ?? null,\n widthFrac: 0,\n };\n });\n\n const n = columns.length;\n if (n === 0) return [];\n\n const declared = columns.map((c) => c.width).filter((w): w is number => w !== null);\n\n if (declared.length === 0) {\n columns.forEach((c) => (c.widthFrac = 1 / n));\n return columns;\n }\n\n const asFractions = Math.max(...declared) <= 1.0;\n const undeclared = n - declared.length;\n\n let weights: number[];\n if (asFractions) {\n const remaining = Math.max(0, 1 - declared.reduce((a, b) => a + b, 0));\n const share = undeclared > 0 ? remaining / undeclared : 0;\n weights = columns.map((c) => c.width ?? share);\n } else {\n weights = columns.map((c) => c.width ?? 1.0);\n }\n\n const total = weights.reduce((a, b) => a + b, 0);\n columns.forEach((c, i) => (c.widthFrac = total > 0 ? weights[i]! / total : 1 / n));\n\n return columns;\n}\n\n/**\n * Column widths in EMU that sum EXACTLY to the table width.\n *\n * Rounding each fraction independently loses or gains a few EMU and leaves the\n * grid a hair narrower or wider than the frame; accumulating and differencing\n * cannot.\n */\nfunction columnWidthsEmu(columns: ResolvedColumn[], totalEmu: number): number[] {\n const out: number[] = [];\n let cum = 0;\n let prev = 0;\n for (const col of columns) {\n cum += col.widthFrac;\n const edge = Math.round(cum * totalEmu);\n out.push(edge - prev);\n prev = edge;\n }\n return out;\n}\n\n// ─── The grid ───────────────────────────────────────────────────────────────\n\ninterface Slot {\n spec: Any;\n merged: string;\n colSpan: number;\n rowSpan: number;\n}\n\n/**\n * Lay every row out as exactly columns.length slots, marking the ones a span\n * swallows. Spans are clamped to the grid: a `colSpan` of 99 on a two-column\n * table is a 2, never a row with 99 cells in it.\n */\nfunction buildGrid(columns: ResolvedColumn[], rawRows: Any[], hasHeader: boolean): { source: Any; cells: Slot[] }[] {\n const n = columns.length;\n const grid: { source: Any; cells: Slot[] }[] = [];\n\n if (hasHeader) {\n grid.push({\n source: {},\n cells: columns.map((col) => ({ spec: { text: col.label }, merged: \"none\", colSpan: 1, rowSpan: 1 })),\n });\n }\n\n for (const row of rawRows) {\n if (!isPlainObject(row)) continue;\n const cellMap: Any = isPlainObject(row.cells) ? row.cells : row;\n grid.push({\n source: row,\n cells: columns.map((col) => ({\n spec: cellSpec(cellMap[col.key]),\n merged: \"none\",\n colSpan: 1,\n rowSpan: 1,\n })),\n });\n }\n\n for (let r = 0; r < grid.length; r++) {\n for (let c = 0; c < n; c++) {\n if (grid[r]!.cells[c]!.merged !== \"none\") continue;\n const spec = grid[r]!.cells[c]!.spec;\n const colSpan = clampSpan(spec.colSpan, n - c);\n const rowSpan = clampSpan(spec.rowSpan, grid.length - r);\n\n grid[r]!.cells[c]!.colSpan = colSpan;\n grid[r]!.cells[c]!.rowSpan = rowSpan;\n\n for (let dr = 0; dr < rowSpan; dr++) {\n for (let dc = 0; dc < colSpan; dc++) {\n if (dr === 0 && dc === 0) continue;\n const covered = dc > 0 && dr > 0 ? \"both\" : dc > 0 ? \"horizontal\" : \"vertical\";\n grid[r + dr]!.cells[c + dc]!.merged = covered;\n grid[r + dr]!.cells[c + dc]!.spec = { text: \"\" };\n }\n }\n }\n }\n\n return grid;\n}\n\nfunction clampSpan(span: Any, available: number): number {\n const s = isNumeric(span) ? Math.trunc(Number(span)) : 1;\n return Math.max(1, Math.min(s, Math.max(1, available)));\n}\n\n/**\n * A cell value is either a scalar or a spec object.\n *\n * BEHAVIOUR CHANGE: an object used to be JSON-stringified into the cell text.\n * Anything carrying none of the spec keys still is, so a genuine nested value\n * an agent meant to display is not silently emptied.\n */\nfunction cellSpec(value: Any): Any {\n if (isPlainObject(value)) {\n if (CELL_SPEC_KEYS.some((k) => k in value)) {\n return { ...value, text: scalarText(value.text ?? \"\") };\n }\n return { text: JSON.stringify(value) };\n }\n if (Array.isArray(value)) return { text: JSON.stringify(value) };\n return { text: scalarText(value) };\n}\n\nfunction scalarText(value: Any): string {\n if (value === null || value === undefined) return \"\";\n if (typeof value === \"boolean\") return value ? \"1\" : \"\";\n if (typeof value === \"number\" || typeof value === \"string\") return String(value);\n return JSON.stringify(value);\n}\n\n// ─── One cell ───────────────────────────────────────────────────────────────\n\nfunction resolveCell(slot: Slot, chain: Any[], edges: Record<string, boolean>): ResolvedCell {\n const spec = slot.spec;\n const layers = [...chain, styleKeys(spec)];\n\n const resolved: Any = {};\n for (const layer of layers) {\n for (const k of Object.keys(layer)) resolved[k] = layer[k];\n }\n\n const fill = resolved.fill ?? null;\n\n return {\n text: String(spec.text ?? \"\"),\n bold: Boolean(resolved.bold ?? false),\n italic: Boolean(resolved.italic ?? false),\n underline: Boolean(resolved.underline ?? false),\n color: hex(resolved.color ?? DEFAULT_BODY_COLOR, \"0F172A\"),\n fill: fill === false || fill === null || fill === \"none\" ? null : hex(fill, \"FFFFFF\"),\n align: alignOf(resolved.align ?? \"left\"),\n anchor: anchorOf(resolved.anchor ?? \"middle\"),\n fontSize: Math.max(1, Number(resolved.fontSize ?? DEFAULT_FONT_SIZE) / 2),\n letterSpacing: Number(resolved.letterSpacing ?? 0),\n caps: capsOf(resolved.caps ?? \"none\"),\n fontFamily: resolved.fontFamily !== undefined && resolved.fontFamily !== null ? String(resolved.fontFamily) : null,\n padding: resolvePadding(resolved.padding ?? null),\n borders: resolveBorders(layers, edges),\n colSpan: slot.colSpan,\n rowSpan: slot.rowSpan,\n merged: slot.merged,\n };\n}\n\n/**\n * Per-side border resolution. The whole point of the module, and the part\n * `last-word` needs identically.\n */\nfunction resolveBorders(layers: Any[], edges: Record<string, boolean>): ResolvedCell[\"borders\"] {\n const sides: [keyof ResolvedCell[\"borders\"], string][] = [\n [\"left\", \"firstCol\"],\n [\"right\", \"lastCol\"],\n [\"top\", \"firstRow\"],\n [\"bottom\", \"lastRow\"],\n ];\n\n const out: Any = {};\n\n for (const [side, edgeKey] of sides) {\n const isOuter = edges[edgeKey]!;\n let value: Any = { width: DEFAULT_BORDER_WIDTH, color: DEFAULT_BORDER_COLOR };\n\n for (const layer of layers) {\n if (!(\"borders\" in layer)) continue;\n const spec = layer.borders;\n\n if (spec === false || spec === null || spec === \"none\") {\n value = null;\n continue;\n }\n if (!isPlainObject(spec)) continue;\n if (spec.none) {\n value = null;\n continue;\n }\n\n // A bare {width,color,style} means all four sides.\n if (spec.width !== undefined || spec.color !== undefined || spec.style !== undefined) {\n value = spec;\n }\n if (\"all\" in spec) value = spec.all;\n const band = isOuter ? \"outer\" : \"inner\";\n if (band in spec) value = spec[band];\n if (side in spec) value = spec[side];\n }\n\n out[side] = borderSide(value);\n }\n\n return out;\n}\n\nfunction borderSide(value: Any): ResolvedBorder | null {\n if (value === false || value === null || value === undefined || value === \"none\") return null;\n if (!isPlainObject(value)) return null;\n\n const width = isNumeric(value.width) ? Number(value.width) : DEFAULT_BORDER_WIDTH;\n if (width <= 0) return null;\n\n const style = String(value.style ?? \"solid\");\n\n return {\n width,\n color: hex(value.color ?? DEFAULT_BORDER_COLOR, \"D9DEE4\"),\n style: [\"solid\", \"dash\", \"dot\"].includes(style) ? style : \"solid\",\n };\n}\n\nfunction resolvePadding(padding: Any): ResolvedCell[\"padding\"] {\n const out = {\n left: DEFAULT_PADDING_X,\n right: DEFAULT_PADDING_X,\n top: DEFAULT_PADDING_Y,\n bottom: DEFAULT_PADDING_Y,\n };\n\n if (isNumeric(padding)) {\n const v = Number(padding);\n return { left: v, right: v, top: v, bottom: v };\n }\n if (isPlainObject(padding)) {\n for (const side of [\"left\", \"right\", \"top\", \"bottom\"] as const) {\n if (isNumeric(padding[side])) out[side] = Number(padding[side]);\n }\n }\n\n return out;\n}\n\n// ─── Bands + defaults ───────────────────────────────────────────────────────\n\n/**\n * The style keys a layer may contribute. Filtering by an allow-list keeps a\n * row's `cells` / `height` (and a column's `key` / `label`) from leaking into a\n * cell's resolved style.\n */\nfunction styleKeys(source: Any): Any {\n const out: Any = {};\n if (!isPlainObject(source)) return out;\n for (const k of STYLE_KEYS) {\n if (k in source && source[k] !== null && source[k] !== undefined) out[k] = source[k];\n }\n return out;\n}\n\nfunction rowHeight(rowSource: Any, bandStyle: Any, tableStyle: Any, isHeader: boolean): number {\n for (const candidate of [rowSource?.height, bandStyle?.height, tableStyle?.rowHeight]) {\n if (isNumeric(candidate)) return Number(candidate);\n }\n return isHeader ? DEFAULT_HEADER_HEIGHT : DEFAULT_BODY_HEIGHT;\n}\n\n// ─── Small coercions ────────────────────────────────────────────────────────\n\nfunction themeColor(theme: Any, key: string, fallback: string): string {\n const colors: Any = isPlainObject(theme?.colors) ? theme.colors : {};\n const value = colors[key];\n return typeof value === \"string\" && value !== \"\" ? value : fallback;\n}\n\nfunction hex(value: Any, fallback: string): string {\n return Color.parse(typeof value === \"string\" ? value : null, fallback)[0];\n}\n\nfunction alignOf(value: Any): string {\n switch (String(value)) {\n case \"center\":\n case \"centre\":\n return \"center\";\n case \"right\":\n return \"right\";\n case \"justify\":\n return \"justify\";\n default:\n return \"left\";\n }\n}\n\nfunction anchorOf(value: Any): string {\n switch (String(value)) {\n case \"top\":\n return \"top\";\n case \"bottom\":\n return \"bottom\";\n default:\n return \"middle\";\n }\n}\n\nfunction capsOf(value: Any): string {\n switch (String(value)) {\n case \"small\":\n return \"small\";\n case \"all\":\n case \"upper\":\n return \"all\";\n default:\n return \"none\";\n }\n}\n","/**\n * The box a text element lives in: fill, outline, corner radius, insets — and\n * the left accent bar that makes a callout a callout. Mirrors PHP\n * `Text\\BoxDecoration`.\n *\n * ## Why the accent bar is a gradient\n *\n * DrawingML has no per-side border on a shape: `<a:ln>` is all four sides or\n * none. So a coloured bar down one edge has always meant a second shape\n * underneath, which pushes z-ordering and geometry onto whoever authors the\n * deck — and an agent emitting three elements that have to line up is three\n * chances to get it wrong.\n *\n * `<a:gradFill>` with two stops at ADJACENT positions is a hard edge, not a\n * blend. Four stops therefore paint a bar and a flat tint in a single shape,\n * with no extra element, no z-order and no second shape id for the animation\n * builder to renumber. Verified rendering before it was designed in.\n */\nimport { Color } from \"../helpers/color\";\nimport { Emu } from \"../helpers/emu\";\nimport { Xml } from \"../helpers/xml\";\nimport { isNumeric, isPlainObject } from \"../util\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Any = any;\n\n/** Gap between the accent bar and the text when nothing says otherwise. */\nexport const ACCENT_GUTTER_PT = 8.0;\n\nexport const BoxDecoration = {\n ACCENT_GUTTER_PT,\n\n /** The `<p:spPr>` interior: geometry, fill and line, in schema order. */\n spPr(style: Any, widthEmu: number, heightEmu: number): string {\n return geometry(style, widthEmu, heightEmu) + fill(style, widthEmu) + line(style);\n },\n\n hasDecoration(style: Any): boolean {\n return (\n style?.fill !== undefined ||\n style?.accentBar !== undefined ||\n style?.border !== undefined ||\n style?.radius !== undefined\n );\n },\n\n /**\n * `lIns`/`tIns`/`rIns`/`bIns` for the text body, or an empty string when the\n * element says nothing — decks that predate this keep their bytes.\n *\n * An accent bar with no explicit padding gets a left inset wide enough to\n * clear it, because text printed on top of the bar is the obvious way for\n * this feature to look broken.\n */\n bodyInsets(style: Any): string {\n const padding = style?.padding ?? null;\n const bar: Any = isPlainObject(style?.accentBar) ? style.accentBar : null;\n\n if ((padding === null || padding === undefined) && bar === null) return \"\";\n\n // PowerPoint's own defaults, which is what an undecorated box uses.\n const sides: Record<string, number> = { left: 7.2, right: 7.2, top: 3.6, bottom: 3.6 };\n\n if (bar !== null && (bar.side ?? \"left\") !== \"right\") {\n sides.left = Number(bar.width ?? 4) + ACCENT_GUTTER_PT;\n }\n if (bar !== null && (bar.side ?? \"left\") === \"right\") {\n sides.right = Number(bar.width ?? 4) + ACCENT_GUTTER_PT;\n }\n\n if (isNumeric(padding)) {\n for (const k of Object.keys(sides)) sides[k] = Number(padding);\n } else if (isPlainObject(padding)) {\n for (const k of Object.keys(sides)) {\n if (isNumeric(padding[k])) sides[k] = Number(padding[k]);\n }\n }\n\n return (\n ` lIns=\"${Emu.fromPt(sides.left!)}\"` +\n ` tIns=\"${Emu.fromPt(sides.top!)}\"` +\n ` rIns=\"${Emu.fromPt(sides.right!)}\"` +\n ` bIns=\"${Emu.fromPt(sides.bottom!)}\"`\n );\n },\n};\n\nfunction geometry(style: Any, widthEmu: number, heightEmu: number): string {\n const radius = style?.radius ?? null;\n if (!isNumeric(radius) || Number(radius) <= 0) {\n return '<a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>';\n }\n\n // `adj` is a proportion of HALF the shorter side, in 1/1000 of a percent.\n const shorter = Math.max(1, Math.min(widthEmu, heightEmu));\n let adj = Math.round((Emu.fromPt(Number(radius)) / (shorter / 2)) * 100000);\n adj = Math.max(0, Math.min(50000, adj));\n\n return `<a:prstGeom prst=\"roundRect\"><a:avLst><a:gd name=\"adj\" fmla=\"val ${adj}\"/></a:avLst></a:prstGeom>`;\n}\n\nfunction fill(style: Any, widthEmu: number): string {\n const bar: Any = isPlainObject(style?.accentBar) ? style.accentBar : null;\n const hasFill = style?.fill !== undefined && style.fill !== false && style.fill !== \"none\";\n\n if (bar === null) {\n if (!hasFill) return \"<a:noFill/>\";\n const [hex] = Color.parse(String(style.fill), \"FFFFFF\");\n return `<a:solidFill><a:srgbClr val=\"${hex}\"/></a:solidFill>`;\n }\n\n const [barHex] = Color.parse(String(bar.color ?? \"#8B5CF6\"), \"8B5CF6\");\n const [restHex] = Color.parse(hasFill ? String(style.fill) : \"#FFFFFF\", \"FFFFFF\");\n\n const barEmu = Emu.fromPt(Number(bar.width ?? 4));\n let pos = widthEmu > 0 ? Math.round((barEmu / widthEmu) * 100000) : 1000;\n pos = Math.max(1, Math.min(99998, pos));\n\n const right = (bar.side ?? \"left\") === \"right\";\n\n let stops: string;\n if (right) {\n const edge = 100000 - pos;\n stops =\n `<a:gs pos=\"0\"><a:srgbClr val=\"${restHex}\"/></a:gs>` +\n `<a:gs pos=\"${edge - 1}\"><a:srgbClr val=\"${restHex}\"/></a:gs>` +\n `<a:gs pos=\"${edge}\"><a:srgbClr val=\"${barHex}\"/></a:gs>` +\n `<a:gs pos=\"100000\"><a:srgbClr val=\"${barHex}\"/></a:gs>`;\n } else {\n stops =\n `<a:gs pos=\"0\"><a:srgbClr val=\"${barHex}\"/></a:gs>` +\n `<a:gs pos=\"${pos}\"><a:srgbClr val=\"${barHex}\"/></a:gs>` +\n `<a:gs pos=\"${pos + 1}\"><a:srgbClr val=\"${restHex}\"/></a:gs>` +\n `<a:gs pos=\"100000\"><a:srgbClr val=\"${restHex}\"/></a:gs>`;\n }\n\n return `<a:gradFill flip=\"none\" rotWithShape=\"0\"><a:gsLst>${stops}</a:gsLst><a:lin ang=\"0\" scaled=\"0\"/></a:gradFill>`;\n}\n\nfunction line(style: Any): string {\n const border = style?.border ?? null;\n if (border === null || border === undefined || border === false || border === \"none\") return \"\";\n if (!isPlainObject(border)) return \"\";\n\n const width = isNumeric(border.width) ? Number(border.width) : 1.0;\n if (width <= 0) return \"\";\n\n const [hex] = Color.parse(String(border.color ?? \"#CBD5E1\"), \"CBD5E1\");\n const dash = (border.style ?? \"solid\") !== \"solid\" ? `<a:prstDash val=\"${Xml.attr(String(border.style))}\"/>` : \"\";\n\n return `<a:ln w=\"${Emu.fromPt(width)}\"><a:solidFill><a:srgbClr val=\"${hex}\"/></a:solidFill>${dash}</a:ln>`;\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 { Composites } from \"../table/composites\";\nimport { TableResolver, type ResolvedCell } from \"../table/table-resolver\";\nimport { BoxDecoration } from \"../text/box-decoration\";\nimport { isNumeric, isPlainObject } from \"../util\";\nimport { zipSync } from \"../zip\";\n\nconst NS_CHART = \"http://schemas.openxmlformats.org/drawingml/2006/chart\";\n\n/** `anchor` on `<a:tcPr>` — the vertical anchor of a table cell. */\nconst ANCHOR_ATTR: Record<string, string> = { top: \"t\", middle: \"ctr\", bottom: \"b\" };\n\n/** `algn` on `<a:pPr>`. */\nconst ALIGN_ATTR: Record<string, string> = { left: \"l\", center: \"ctr\", right: \"r\", justify: \"just\" };\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 /** Extension uri under which the deck's mono typeface is recorded in theme1.xml. */\n static readonly MONO_FONT_EXT_URI = \"urn:particle-academy:dark-slide:mono-font\";\n\n /** Namespace for DarkSlide's own elements inside an `<a:ext>`. */\n static readonly NS_DARK_SLIDE = \"urn:particle-academy:dark-slide\";\n\n private themeAccent = \"8B5CF6\";\n\n /** The deck's theme, kept whole so the table resolver can read its colours. */\n private deckTheme: Any = {};\n\n /**\n * Monospace typeface for code runs, from `theme.fonts.mono`.\n *\n * There is no third slot in OOXML's `<a:fontScheme>` — a theme carries a\n * major and a minor font and nothing else — so unlike heading and body this\n * cannot ride along in theme1.xml and has to be written onto each code run.\n * That is why it was missed in all three engines: accepted by every\n * validator, published in the JSON Schema handed to an LLM as the tool\n * definition, named in the writers' own docblocks, and applied nowhere.\n */\n private themeMono = \"Consolas\";\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 this.deckTheme = isPlainObject(deck?.theme) ? deck.theme : {};\n const mono = deck?.theme?.fonts?.mono;\n this.themeMono = typeof mono === \"string\" && mono.trim() !== \"\" ? mono.trim() : \"Consolas\";\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 const mono = Xml.attr(this.themeMono);\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 // The mono typeface, recorded so the READER can recognise a code run\n // again. `<a:fontScheme>` has exactly two slots, so there is nowhere in a\n // standard theme for a third font; `<a:extLst>` is the standard place for\n // exactly this, and consumers that do not know the uri ignore it.\n '<a:extLst><a:ext uri=\"' + PptxWriter.MONO_FONT_EXT_URI + '\">' +\n '<ds:monoFont xmlns:ds=\"' + PptxWriter.NS_DARK_SLIDE + '\" typeface=\"' + mono + '\"/>' +\n \"</a:ext></a:extLst>\" +\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\n // Composites are authoring sugar: they become an ordinary `table` element\n // here, before anything is serialised. See table/composites.\n if (Composites.isComposite(element.type)) {\n element = Composites.expand(element, this.deckTheme);\n }\n\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 style: Any = isPlainObject(element.style) ? element.style : {};\n const body = this.buildTextBody(String(element.content ?? \"\"), style, String(element.format ?? \"plain\"));\n const id = element.id ?? `text-${shapeId}`;\n\n const widthEmu = Emu.fromFracX(toFloat(element.w ?? 0.8));\n const heightEmu = Emu.fromFracY(toFloat(element.h ?? 0.2));\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 BoxDecoration.spPr(style, widthEmu, heightEmu) +\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, strokeAlpha] = Color.parse(element.stroke ?? \"#8B5CF6\", \"8B5CF6\");\n const strokeWidth = toFloat(element.strokeWidth ?? 2);\n const strokeWidthEmu = Emu.fromPt(strokeWidth);\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 // \"No outline\" has to be sayable. `<a:ln w=\"0\">` is a HAIRLINE in every\n // renderer tested, not an absence, so a zero width or a transparent stroke\n // has to become an explicit `<a:noFill/>` — otherwise every composed\n // callout carries a thin border nobody asked for.\n const lnXml =\n strokeWidth <= 0 || strokeAlpha === 0\n ? \"<a:ln><a:noFill/></a:ln>\"\n : '<a:ln w=\"' + strokeWidthEmu + '\"><a:solidFill><a:srgbClr val=\"' + strokeHex + '\"/></a:solidFill>' + dashStr + \"</a:ln>\";\n\n // A shape carrying `content` gets a real text body. Before this it was\n // always an empty `<a:endParaRPr/>`, so a labelled shape was two elements\n // the author had to keep aligned by hand.\n const content = String(element.content ?? \"\");\n const txBody =\n content === \"\"\n ? '<p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody>'\n : this.buildTextBody(\n content,\n { align: \"center\", verticalAlign: \"middle\", ...(isPlainObject(element.style) ? element.style : {}) },\n String(element.format ?? \"plain\"),\n );\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 lnXml +\n \"</p:spPr>\" +\n 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=\"' + Xml.attr(this.themeMono) + '\"/>' +\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 columnsRaw: Any[] = Array.isArray(element.columns) ? element.columns : [];\n if (columnsRaw.length === 0) {\n return this.buildPlaceholder(\"[table: no columns]\", element, shapeId);\n }\n\n const table = TableResolver.resolve(element, this.deckTheme);\n\n const totalWidthEmu = Emu.fromFracX(toFloat(element.w ?? 0.5));\n const widths = TableResolver.columnWidthsEmu(table.columns, totalWidthEmu);\n\n let gridCols = \"\";\n for (const w of widths) {\n gridCols += '<a:gridCol w=\"' + w + '\"/>';\n }\n\n let rowsXml = \"\";\n for (const row of table.rows) {\n let cells = \"\";\n for (const cell of row.cells) {\n cells += this.buildTableCell(cell);\n }\n rowsXml += '<a:tr h=\"' + Emu.fromPt(row.height) + '\">' + cells + \"</a:tr>\";\n }\n\n const xfrm = this.xfrmFromFractions(element);\n const id = element.id ?? `table-${shapeId}`;\n\n // \"No Style, No Grid\". Every fill and every rule is now stated per cell, so\n // a built-in table style is not a default to fall back on — it is a second\n // opinion layered on top of ours. The old id was Medium Style 2 Accent 1,\n // whose banding fought the striping below it.\n const tblPr =\n \"<a:tblPr\" + (table.hasHeader ? ' firstRow=\"1\"' : \"\") +\n \"><a:tableStyleId>{2D5ABB26-0587-4C30-8999-92F81FD0307C}</a:tableStyleId></a:tblPr>\";\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 tblPr +\n \"<a:tblGrid>\" + gridCols + \"</a:tblGrid>\" +\n rowsXml +\n \"</a:tbl>\" +\n \"</a:graphicData>\" +\n \"</a:graphic>\" +\n \"</p:graphicFrame>\"\n );\n }\n\n /**\n * Serialise one resolved cell. Makes no styling decisions — every value here\n * was decided by the resolver.\n *\n * Three things in here are load-bearing and easy to get wrong:\n *\n * - `gridSpan` / `rowSpan` / `hMerge` / `vMerge` are attributes of\n * `<a:tc>`, NOT of `<a:tcPr>`. On `tcPr` they parse fine and are silently\n * ignored, so the table renders unmerged with no error anywhere.\n * - `<a:tcPr>` has a FIXED child order: lnL, lnR, lnT, lnB, then the fill.\n * Emitting the fill first produces a file whose fill a reader drops.\n * - \"No border\" is STATED. An absent `<a:lnL>` is an UNSPECIFIED rule, not\n * an absent one, and a reader supplies its own.\n */\n private buildTableCell(cell: ResolvedCell): string {\n let attrs = \"\";\n if (cell.colSpan > 1) attrs += ' gridSpan=\"' + cell.colSpan + '\"';\n if (cell.rowSpan > 1) attrs += ' rowSpan=\"' + cell.rowSpan + '\"';\n if (cell.merged === \"horizontal\" || cell.merged === \"both\") attrs += ' hMerge=\"1\"';\n if (cell.merged === \"vertical\" || cell.merged === \"both\") attrs += ' vMerge=\"1\"';\n\n const pad = cell.padding;\n const tcPrAttrs =\n ' marL=\"' + Emu.fromPt(pad.left) + '\"' +\n ' marR=\"' + Emu.fromPt(pad.right) + '\"' +\n ' marT=\"' + Emu.fromPt(pad.top) + '\"' +\n ' marB=\"' + Emu.fromPt(pad.bottom) + '\"' +\n ' anchor=\"' + ANCHOR_ATTR[cell.anchor]! + '\"';\n\n let borders = \"\";\n for (const [side, suffix] of [[\"left\", \"L\"], [\"right\", \"R\"], [\"top\", \"T\"], [\"bottom\", \"B\"]] as const) {\n const spec = cell.borders[side];\n if (spec === null) {\n borders += \"<a:ln\" + suffix + \"><a:noFill/></a:ln\" + suffix + \">\";\n continue;\n }\n borders +=\n \"<a:ln\" + suffix + ' w=\"' + Emu.fromPt(spec.width) + '\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\">' +\n '<a:solidFill><a:srgbClr val=\"' + spec.color + '\"/></a:solidFill>' +\n '<a:prstDash val=\"' + spec.style + '\"/>' +\n \"</a:ln\" + suffix + \">\";\n }\n\n const fill =\n cell.fill === null\n ? \"<a:noFill/>\"\n : '<a:solidFill><a:srgbClr val=\"' + cell.fill + '\"/></a:solidFill>';\n\n return (\n \"<a:tc\" + attrs + \">\" +\n \"<a:txBody>\" +\n \"<a:bodyPr/>\" +\n \"<a:lstStyle/>\" +\n '<a:p><a:pPr algn=\"' + ALIGN_ATTR[cell.align]! + '\"/>' +\n this.buildCellRun(cell) +\n \"</a:p>\" +\n \"</a:txBody>\" +\n \"<a:tcPr\" + tcPrAttrs + \">\" + borders + fill + \"</a:tcPr>\" +\n \"</a:tc>\"\n );\n }\n\n private buildCellRun(cell: ResolvedCell): string {\n let rPr = '<a:rPr lang=\"en-US\" sz=\"' + Emu.hundredthsOfPoint(cell.fontSize) + '\"';\n if (cell.bold) rPr += ' b=\"1\"';\n if (cell.italic) rPr += ' i=\"1\"';\n if (cell.underline) rPr += ' u=\"sng\"';\n if (cell.letterSpacing !== 0) rPr += ' spc=\"' + Emu.hundredthsOfPoint(cell.letterSpacing) + '\"';\n if (cell.caps !== \"none\") rPr += ' cap=\"' + cell.caps + '\"';\n rPr += \">\";\n rPr += '<a:solidFill><a:srgbClr val=\"' + cell.color + '\"/></a:solidFill>';\n if (cell.fontFamily !== null) {\n rPr += '<a:latin typeface=\"' + Xml.attr(cell.fontFamily) + '\"/>';\n }\n rPr += \"</a:rPr>\";\n\n // An empty run is legal but PowerPoint prefers an endParaRPr for a\n // genuinely empty cell — and a merged continuation cell is always one.\n if (cell.text === \"\") {\n return '<a:endParaRPr lang=\"en-US\" sz=\"' + Emu.hundredthsOfPoint(cell.fontSize) + '\"/>';\n }\n\n return \"<a:r>\" + rPr + \"<a:t>\" + Xml.text(cell.text) + \"</a:t></a:r>\";\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 const spacing = this.paragraphSpacing(style);\n const bullet = this.bulletMarkup(style.bullet ?? null);\n const runExtra = this.runExtraAttrs(style);\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 pPr += isBullet ? ' indent=\"-228600\" marL=\"228600\">' : \">\";\n pPr += spacing;\n pPr += isBullet ? bullet : \"<a:buNone/>\";\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 runExtra,\n );\n }\n } else {\n runs = this.buildRun(body, paragraphSz, paragraphBold, baseItalic, baseUnderline, colorHex, fontFamily, false, false, false, runExtra);\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\"' + BoxDecoration.bodyInsets(style) + \"/>\" +\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 extra = \"\",\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=\"' + Xml.attr(this.themeMono) + '\"/>';\n }\n\n const rPr =\n '<a:rPr lang=\"en-US\" sz=\"' + sz + '\"' + b + i + u + extra + '><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 /**\n * `<a:lnSpc>` / `<a:spcBef>` / `<a:spcAft>` for a paragraph.\n *\n * `lineHeight` is a MULTIPLE (1.4 = 140%), matching CSS and the fancy-slides\n * editor; `spaceBefore` / `spaceAfter` are points. Empty when the style is\n * silent, so decks that predate this keep their bytes.\n */\n private paragraphSpacing(style: Any): string {\n let out = \"\";\n if (isNumeric(style?.lineHeight)) {\n out += '<a:lnSpc><a:spcPct val=\"' + Math.round(toFloat(style.lineHeight) * 100000) + '\"/></a:lnSpc>';\n }\n if (isNumeric(style?.spaceBefore)) {\n out += '<a:spcBef><a:spcPts val=\"' + Emu.hundredthsOfPoint(toFloat(style.spaceBefore)) + '\"/></a:spcBef>';\n }\n if (isNumeric(style?.spaceAfter)) {\n out += '<a:spcAft><a:spcPts val=\"' + Emu.hundredthsOfPoint(toFloat(style.spaceAfter)) + '\"/></a:spcAft>';\n }\n return out;\n }\n\n /**\n * The bullet markup for a list paragraph.\n *\n * `none` suppresses it, `number` makes an auto-numbered list, and anything\n * else is taken as the literal character — which is all a check-mark list is.\n * The default stays the round bullet the writer has always emitted.\n */\n private bulletMarkup(bullet: Any): string {\n if (bullet === null || bullet === undefined || bullet === \"\") {\n return '<a:buFont typeface=\"Arial\"/><a:buChar char=\"•\"/>';\n }\n if (bullet === \"none\" || bullet === false) {\n return \"<a:buNone/>\";\n }\n if (bullet === \"number\") {\n return '<a:buAutoNum type=\"arabicPeriod\"/>';\n }\n return '<a:buFont typeface=\"Arial\"/><a:buChar char=\"' + Xml.attr(String(bullet)) + '\"/>';\n }\n\n /**\n * Run attributes that apply to every run in the body: letter spacing and\n * capitalisation. Both are `<a:rPr>` attributes, so they have to be built as\n * a string and appended rather than nested.\n */\n private runExtraAttrs(style: Any): string {\n let out = \"\";\n if (isNumeric(style?.letterSpacing)) {\n out += ' spc=\"' + Emu.hundredthsOfPoint(toFloat(style.letterSpacing)) + '\"';\n }\n const caps = style?.caps ?? null;\n if (caps === \"small\") {\n out += ' cap=\"small\"';\n } else if (caps === \"all\" || caps === \"upper\") {\n out += ' cap=\"all\"';\n }\n return out;\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/** This package's own version, pinned to package.json by `version.test.ts`. */\nexport const VERSION = \"0.7.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"]}
|