pptx-kit-preview 0.0.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/text-layout.ts","../src/render-slide.ts","../src/measure.ts","../src/node.ts"],"names":["fmt","escapeXml","h","defs","AVG_GLYPH_W_RATIO","out","pointCount","a","b","p","sa","ma","preset","getSlideSize"],"mappings":"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","file":"node.js","sourcesContent":["// Pure-SVG text layout engine for the preview renderer.\n//\n// The playground's default text path lays text out with <foreignObject> + HTML\n// and lets the browser wrap/position it. That cannot be rasterized without a\n// browser, so the fidelity harness (and any future Node renderer) needs text as\n// real SVG <text>/<tspan>. This module does that layout itself: measure runs,\n// wrap to the inner box, position lines on their baselines, and emit SVG.\n//\n// It is PURE — no pptx-kit, no Node, no browser globals — so it runs in the\n// SvelteKit bundle, in the Node harness, and in unit tests. The caller injects\n// a `TextMeasurer`; in the browser that can wrap `ctx.measureText`, in Node it\n// wraps fontkit (see site/fidelity/measure.ts). All geometry is in CSS px.\n\n// ---------------------------------------------------------------------------\n// Public injection contract.\n\n/** What a measurer needs to size one run. Pixels at 96 DPI; the caller has\n * already applied EMU→px, pt→px and the autofit fontScale. `family` is the\n * resolved internal family name (see `substituteFamily`), not a CSS list. */\nexport interface FontSpec {\n readonly family: string;\n readonly sizePx: number;\n readonly bold: boolean;\n readonly italic: boolean;\n readonly letterSpacingPx: number;\n}\n\n/** Advance width of `text` in px, plus optional vertical metrics. A real\n * measurer returns ascent/descent/lineGap so line height matches the font;\n * the heuristic returns width only and the engine falls back to a ratio. */\nexport interface MeasureResult {\n readonly widthPx: number;\n readonly ascentPx?: number;\n readonly descentPx?: number;\n readonly lineGapPx?: number;\n}\n\nexport type TextMeasurer = (text: string, spec: FontSpec) => MeasureResult;\n\nexport type TextLayoutMode = 'foreignObject' | 'svg';\n\nexport interface RenderSlideOptions {\n /** Measurer used by the pure-SVG text path. Required when `textLayout` is\n * 'svg'; ignored otherwise. */\n readonly measureText?: TextMeasurer;\n /** Which text path to use. Defaults to 'foreignObject' (the browser path)\n * so existing callers are unaffected; the harness opts into 'svg'. */\n readonly textLayout?: TextLayoutMode;\n}\n\n// ---------------------------------------------------------------------------\n// Font substitution. resvg matches a <text font-family> against the *internal*\n// family name in the loaded TTF. We bundle metric-compatible open substitutes\n// (the same ones LibreOffice renders with), so we must emit and measure under\n// the substitute's exact internal name — \"Liberation Sans\" with a space, not\n// \"LiberationSans\". This map is the single source of truth shared by the SVG\n// emitter and the Node measurer (site/fidelity/measure.ts).\n\nexport const SANS = 'Carlito'; // Calibri / Aptos / generic sans substitute\nexport const SERIF = 'Caladea'; // Cambria substitute\nexport const ARIAL = 'Liberation Sans';\nexport const TIMES = 'Liberation Serif';\nexport const MONO = 'Liberation Mono';\n\nexport const substituteFamily = (family: string | null | undefined): string => {\n if (!family) return SANS;\n const f = family.trim().toLowerCase();\n if (f.startsWith('calibri') || f.startsWith('aptos')) return SANS;\n if (f.startsWith('cambria')) return SERIF;\n if (f === 'arial' || f === 'helvetica' || f === 'helvetica neue' || f.startsWith('arial '))\n return ARIAL;\n if (f === 'times new roman' || f === 'times' || f.startsWith('times ')) return TIMES;\n if (f === 'courier new' || f === 'courier' || f === 'consolas' || f.startsWith('courier '))\n return MONO;\n // Unknown family → generic sans substitute, matching DEFAULT_FONT's Calibri\n // lead and LibreOffice's behavior when the named face is unavailable.\n return SANS;\n};\n\n// CJK detection — lifted from render-slide.ts so the heuristic measurer\n// matches today's autofit estimate exactly.\nconst isCjk = (cp: number): boolean =>\n (cp >= 0x3040 && cp <= 0x309f) ||\n (cp >= 0x30a0 && cp <= 0x30ff) ||\n (cp >= 0x4e00 && cp <= 0x9fff) ||\n (cp >= 0xac00 && cp <= 0xd7af);\n\n// Mean glyph width as a fraction of size for a typical sans-serif — the same\n// 0.55 PowerPoint's autofit estimator uses. Only used by the heuristic\n// measurer (no real font metrics available).\nconst AVG_GLYPH_W_RATIO = 0.55;\n\nexport const defaultMeasurer: TextMeasurer = (text, spec) => {\n let w = 0;\n for (const ch of text) {\n const ratio = isCjk(ch.codePointAt(0) ?? 0) ? 1 : AVG_GLYPH_W_RATIO;\n w += spec.sizePx * ratio;\n }\n const n = [...text].length;\n if (n > 1) w += spec.letterSpacingPx * (n - 1); // tracking applies between glyphs\n return { widthPx: w };\n};\n\n// Vertical-metric fallback when the measurer returns width only. Calibri /\n// Carlito sit near ascent 0.9em / descent 0.22em / gap 0.08em including the\n// internal leading. The scored harness path always supplies real metrics, so\n// this only drives the browser heuristic preview.\nconst FALLBACK_ASCENT = 0.9;\nconst FALLBACK_DESCENT = 0.22;\nconst FALLBACK_LINEGAP = 0.08;\n\n// Vertical-centering calibration — see the use site. Fraction of a line's\n// (ascent+descent) that center/bottom-anchored blocks sit LOWER than the\n// win-metric line box predicts, fitted to LibreOffice/PowerPoint ground truth\n// (top-anchored text needs no correction; only center/bottom do).\nconst CENTER_ANCHOR_DROP = 0.036;\n\n// The whole text layer paints ≈1px right of LibreOffice's pdftoppm raster at\n// 1280px — a constant disagreement about where the glyph origin lands on the\n// pixel grid between resvg and pdftoppm (every sample's fg-SSIM-vs-shift\n// optimum sits at dx=−1, independent of font or anchor). Nudging emitted x\n// coordinates compensates; sub-pixel so it is invisible at any zoom.\nconst GRID_NUDGE_X = -0.75;\n\n// ---------------------------------------------------------------------------\n// Engine input model. render-slide.ts resolves the OOXML cascade and hands the\n// engine this already-normalized, px-native structure.\n\nexport interface PieceInput {\n readonly text: string;\n readonly family: string; // internal substituted name\n readonly sizePx: number; // post-autofit\n readonly bold: boolean;\n readonly italic: boolean;\n readonly letterSpacingPx: number;\n readonly fillHex: string;\n readonly underline: boolean;\n readonly strike: boolean;\n readonly superSub: 0 | 1 | -1; // 1 superscript, -1 subscript\n readonly href: string | null;\n readonly isBreak: boolean; // <a:br>\n}\n\nexport interface BulletInput {\n readonly text: string;\n readonly family: string;\n readonly sizePx: number;\n readonly fillHex: string;\n // Data URL for a picture bullet (`<a:buBlip>`); when set, the bullet\n // renders as a square `<image>` of `sizePx` instead of `text`.\n readonly imageHref?: string;\n}\n\nexport interface ParaInput {\n readonly align: 'left' | 'center' | 'right' | 'justify';\n readonly marLpx: number;\n readonly marRpx: number;\n readonly firstIndentPx: number; // first-line indent (negative = hanging)\n readonly spcBefPx: number;\n readonly spcAftPx: number;\n readonly lineSpacing: { kind: 'pct'; value: number } | { kind: 'pts'; px: number } | null;\n readonly lineAdvanceScale: number; // lnSpcReduction → 1 - reduction\n readonly bullet: BulletInput | null;\n readonly pieces: readonly PieceInput[];\n readonly fallbackSizePx: number; // line height for an empty paragraph\n}\n\n/** Normalized text direction the engine understands. render-slide maps the\n * OOXML `vert` token (`vert`/`eaVert`/`vert270`/…) onto one of these — the\n * engine stays free of OOXML vocabulary. `cw90` rotates the horizontal layout\n * 90° clockwise (reading top-to-bottom, columns right-to-left); `cw270` is the\n * opposite 270° rotation (columns left-to-right). */\nexport type VerticalLayout = 'none' | 'cw90' | 'cw270';\n\nexport interface ColumnLayout {\n readonly count: number; // PowerPoint clamps to >= 2 before this point\n readonly gapPx: number;\n}\n\nexport interface TextBodyInput {\n readonly boxXpx: number;\n readonly boxYpx: number;\n readonly boxWpx: number;\n readonly boxHpx: number;\n readonly anchor: 'top' | 'center' | 'bottom';\n readonly wrap: boolean;\n readonly paragraphs: readonly ParaInput[];\n /** Vertical text direction; omitted / 'none' is the default horizontal flow. */\n readonly vert?: VerticalLayout;\n /** Multi-column body (`numCol`/`spcCol`); null / omitted is single column. */\n readonly columns?: ColumnLayout | null;\n}\n\n// ---------------------------------------------------------------------------\n// Layout internals.\n\ninterface Token {\n readonly text: string;\n readonly piece: PieceInput;\n readonly isSpace: boolean;\n readonly isBreak: boolean;\n width: number;\n}\n\ninterface Line {\n readonly tokens: Token[];\n ascent: number;\n descent: number;\n lineGap: number;\n topY: number;\n advance: number;\n anchorX: number;\n textAnchor: 'start' | 'middle' | 'end';\n bullet: { x: number; baselineDy: number; b: BulletInput } | null;\n}\n\n// The box (in local coords) that one horizontal layout pass fills. Horizontal\n// text uses the shape box directly; vertical text uses a swapped-extent frame\n// re-centred on the box (see layoutTextSvg).\ninterface Frame {\n readonly x: number;\n readonly y: number;\n readonly w: number;\n readonly h: number;\n}\n\n// A laid-out line ready to emit: its baseline Y plus an X shift (non-zero only\n// for the second-and-later columns of a multi-column body).\ninterface Placement {\n readonly line: Line;\n readonly baselineY: number;\n readonly dx: number;\n}\n\n// Builds the line list for one column of a given content width. Closes over the\n// paragraph model and measurer caches inside layoutTextSvg.\ntype LineBuilder = (contentLeft: number, contentRight: number) => { lines: Line[]; blockH: number };\n\nconst specOf = (piece: PieceInput): FontSpec => ({\n family: piece.family,\n sizePx: piece.sizePx,\n bold: piece.bold,\n italic: piece.italic,\n letterSpacingPx: piece.letterSpacingPx,\n});\n\nconst bulletSpec = (b: BulletInput): FontSpec => ({\n family: b.family,\n sizePx: b.sizePx,\n bold: false,\n italic: false,\n letterSpacingPx: 0,\n});\n\nconst escapeXml = (s: string): string =>\n s.replace(/[&<>\"]/g, (c) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;' })[c] ?? c);\n\nconst fmt = (n: number): string => {\n const r = Math.round(n * 100) / 100;\n return Object.is(r, -0) ? '0' : String(r);\n};\n\n// ---------------------------------------------------------------------------\n\nexport const layoutTextSvg = (input: TextBodyInput, measure: TextMeasurer): string => {\n const widthCache = new Map<string, number>();\n const metricCache = new Map<string, { a: number; d: number; g: number }>();\n const key = (text: string, s: FontSpec): string =>\n `${s.family}|${s.sizePx}|${s.bold}|${s.italic}|${s.letterSpacingPx}|${text}`;\n const mWidth = (text: string, s: FontSpec): number => {\n const k = key(text, s);\n let w = widthCache.get(k);\n if (w === undefined) {\n w = measure(text, s).widthPx;\n widthCache.set(k, w);\n }\n return w;\n };\n const mMetrics = (piece: PieceInput): { a: number; d: number; g: number } => {\n const s = specOf(piece);\n const k = `${s.family}|${s.sizePx}|${s.bold}|${s.italic}`;\n let m = metricCache.get(k);\n if (!m) {\n const r = measure('Mg', s);\n m =\n r.ascentPx !== undefined && r.descentPx !== undefined\n ? { a: r.ascentPx, d: r.descentPx, g: r.lineGapPx ?? 0 }\n : {\n a: piece.sizePx * FALLBACK_ASCENT,\n d: piece.sizePx * FALLBACK_DESCENT,\n g: piece.sizePx * FALLBACK_LINEGAP,\n };\n metricCache.set(k, m);\n }\n return m;\n };\n\n // One horizontal layout pass, parameterized on the content box's left/right\n // edges so the same wrap/measure code serves the shape box (horizontal), a\n // single column of a multi-column body, and the swapped frame of vertical\n // text. Closes over the measurer caches above.\n const buildLines: LineBuilder = (contentLeft, contentRight) => {\n const lines: Line[] = [];\n let cursorY = 0;\n\n for (const para of input.paragraphs) {\n cursorY += para.spcBefPx;\n const wrapLeft = contentLeft + para.marLpx;\n const wrapRight = contentRight - para.marRpx;\n const firstLeft = wrapLeft + para.firstIndentPx;\n const hasText = para.pieces.some((p) => !p.isBreak && p.text !== '');\n const bullet = para.bullet && hasText ? para.bullet : null;\n // Picture bullets reserve a square of `sizePx` plus a trailing space;\n // glyph bullets reserve the measured \"<glyph> \" width.\n const bulletLead = bullet\n ? bullet.imageHref\n ? bullet.sizePx + mWidth(' ', bulletSpec(bullet))\n : mWidth(`${bullet.text} `, bulletSpec(bullet))\n : 0;\n\n // Tokenize: word / whitespace runs per piece, plus break markers. Pre-split\n // any single token wider than a full line into per-character tokens.\n const avail = Math.max(1, wrapRight - wrapLeft);\n const tokens: Token[] = [];\n for (const piece of para.pieces) {\n if (piece.isBreak) {\n tokens.push({ text: '', piece, isSpace: false, isBreak: true, width: 0 });\n continue;\n }\n for (const seg of piece.text.match(/\\s+|\\S+/g) ?? []) {\n const isSpace = /^\\s+$/.test(seg);\n const w = mWidth(seg, specOf(piece));\n if (input.wrap && !isSpace && w > avail - bulletLead && [...seg].length > 1) {\n for (const ch of seg) {\n tokens.push({\n text: ch,\n piece,\n isSpace: false,\n isBreak: false,\n width: mWidth(ch, specOf(piece)),\n });\n }\n } else {\n tokens.push({ text: seg, piece, isSpace, isBreak: false, width: w });\n }\n }\n }\n\n const wrapped = wrapTokens(tokens, input.wrap, wrapRight - firstLeft - bulletLead, avail);\n const paraLines: Token[][] = wrapped.length > 0 ? wrapped : [[]];\n\n for (let li = 0; li < paraLines.length; li++) {\n const toks = paraLines[li]!;\n let ascent = 0;\n let descent = 0;\n let lineGap = 0;\n for (const t of toks) {\n if (t.isSpace || t.isBreak) continue;\n const m = mMetrics(t.piece);\n if (m.a > ascent) ascent = m.a;\n if (m.d > descent) descent = m.d;\n if (m.g > lineGap) lineGap = m.g;\n }\n if (ascent === 0) {\n ascent = para.fallbackSizePx * FALLBACK_ASCENT;\n descent = para.fallbackSizePx * FALLBACK_DESCENT;\n lineGap = para.fallbackSizePx * FALLBACK_LINEGAP;\n }\n const isFirst = li === 0;\n // Bulleted hanging indent (firstIndent < 0): PowerPoint puts the\n // bullet at marL+indent and starts the text at marL itself, so the\n // first line aligns with the wrapped lines. The bullet-width floor\n // keeps a bullet wider than the hang from overlapping its text.\n const lineLeft = bullet\n ? Math.max(wrapLeft, firstLeft + bulletLead)\n : (isFirst ? firstLeft : wrapLeft) + bulletLead;\n const line: Line = {\n tokens: toks,\n ascent,\n descent,\n lineGap,\n topY: cursorY,\n advance: 0,\n anchorX: lineLeft,\n textAnchor: 'start',\n bullet: null,\n };\n if (para.align === 'center') {\n line.textAnchor = 'middle';\n line.anchorX = (lineLeft + wrapRight) / 2;\n } else if (para.align === 'right') {\n line.textAnchor = 'end';\n line.anchorX = wrapRight;\n }\n if (isFirst && bullet) {\n line.bullet = { x: firstLeft, baselineDy: 0, b: bullet };\n }\n line.advance = lineAdvance(line, para);\n cursorY += line.advance;\n lines.push(line);\n }\n cursorY += para.spcAftPx;\n }\n return { lines, blockH: cursorY };\n };\n\n const vert = input.vert ?? 'none';\n const cx = input.boxXpx + input.boxWpx / 2;\n const cy = input.boxYpx + input.boxHpx / 2;\n // Vertical text lays out horizontally into a frame whose extents are swapped\n // and re-centred on the box, so a single rotate(±90) about the box centre\n // maps that horizontal layout exactly onto the shape. All wrap / anchor /\n // align math then stays identical to horizontal — only the wrapping transform\n // differs, which is what keeps the calibrated horizontal path byte-stable.\n const frame: Frame =\n vert === 'none'\n ? { x: input.boxXpx, y: input.boxYpx, w: input.boxWpx, h: input.boxHpx }\n : { x: cx - input.boxHpx / 2, y: cy - input.boxWpx / 2, w: input.boxHpx, h: input.boxWpx };\n\n // Columns apply to horizontal text only — a faithful rotated-column layout is\n // disproportionate and PowerPoint itself barely supports vert + numCol, so we\n // keep the rotation and drop numCol rather than emit a wrong combined layout.\n const columns = vert === 'none' ? (input.columns ?? null) : null;\n\n const placements =\n columns && columns.count >= 2\n ? placeColumns(frame, columns, input.anchor, buildLines)\n : placeSingle(frame, input.anchor, buildLines);\n\n const body = emitPlacements(placements);\n if (vert === 'none') return body;\n const deg = vert === 'cw90' ? 90 : 270;\n return `<g transform=\"rotate(${deg} ${fmt(cx)} ${fmt(cy)})\">${body}</g>`;\n};\n\n// Vertical block offset for an anchor. Center / bottom get the empirical drop\n// calibration (see site/fidelity/README.md): LibreOffice & PowerPoint sit\n// center/bottom-anchored text ≈0.036 of a line's (ascent+descent) lower than\n// the win-metric line box predicts; top-anchored text aligns exactly.\nconst anchorOffsetY = (\n frameY: number,\n frameH: number,\n blockH: number,\n anchor: 'top' | 'center' | 'bottom',\n firstLine: Line | undefined,\n): number => {\n let offsetY = frameY;\n if (anchor === 'center') offsetY = frameY + (frameH - blockH) / 2;\n else if (anchor === 'bottom') offsetY = frameY + (frameH - blockH);\n if ((anchor === 'center' || anchor === 'bottom') && firstLine) {\n offsetY += CENTER_ANCHOR_DROP * (firstLine.ascent + firstLine.descent);\n }\n return offsetY;\n};\n\nconst placeSingle = (\n frame: Frame,\n anchor: 'top' | 'center' | 'bottom',\n buildLines: LineBuilder,\n): Placement[] => {\n const { lines, blockH } = buildLines(frame.x, frame.x + frame.w);\n const offsetY = anchorOffsetY(frame.y, frame.h, blockH, anchor, lines[0]);\n return lines.map((line) => ({\n line,\n baselineY: offsetY + line.topY + topPad(line) + line.ascent,\n dx: 0,\n }));\n};\n\nconst placeColumns = (\n frame: Frame,\n columns: ColumnLayout,\n anchor: 'top' | 'center' | 'bottom',\n buildLines: LineBuilder,\n): Placement[] => {\n const gap = columns.gapPx;\n const colW = Math.max(1, (frame.w - (columns.count - 1) * gap) / columns.count);\n const { lines } = buildLines(frame.x, frame.x + colW);\n // Sequential fill, matching PowerPoint (not CSS column-fill:balance): fill\n // column 1 down to the box height, then overflow into column 2, and so on. A\n // column only breaks once it already holds a line, so a single over-tall line\n // can't loop. With few lines everything stays in column 1.\n let col = 0;\n let colStartTopY = 0;\n const colHasLine: boolean[] = [];\n let tallest = 0;\n const placed: { line: Line; localTopY: number; col: number }[] = [];\n for (const line of lines) {\n const localBottom = line.topY - colStartTopY + line.advance;\n if (col < columns.count - 1 && localBottom > frame.h && colHasLine[col]) {\n col += 1;\n colStartTopY = line.topY;\n }\n const localTopY = line.topY - colStartTopY;\n placed.push({ line, localTopY, col });\n colHasLine[col] = true;\n if (localTopY + line.advance > tallest) tallest = localTopY + line.advance;\n }\n // Vertical anchor applies to the whole body via its tallest column block —\n // with sequential fill the filled columns reach the box height, so this\n // matches PowerPoint/LibreOffice anchoring the body as one unit.\n const offsetY = anchorOffsetY(frame.y, frame.h, tallest, anchor, lines[0]);\n return placed.map(({ line, localTopY, col: c }) => ({\n line,\n baselineY: offsetY + localTopY + topPad(line) + line.ascent,\n dx: c * (colW + gap),\n }));\n};\n\nconst emitPlacements = (placements: Placement[]): string => {\n const parts: string[] = [];\n for (const { line, baselineY, dx } of placements) {\n if (line.bullet) {\n const b = line.bullet.b;\n if (b.imageHref) {\n // Sit the square bullet on the text baseline (bottom edge at the\n // baseline), matching where the glyph's ink would land.\n parts.push(\n `<image x=\"${fmt(line.bullet.x + dx + GRID_NUDGE_X)}\" y=\"${fmt(baselineY - b.sizePx)}\" width=\"${fmt(b.sizePx)}\" height=\"${fmt(b.sizePx)}\" href=\"${b.imageHref}\" xlink:href=\"${b.imageHref}\" preserveAspectRatio=\"xMidYMid meet\"/>`,\n );\n } else {\n parts.push(\n `<text x=\"${fmt(line.bullet.x + dx + GRID_NUDGE_X)}\" y=\"${fmt(baselineY)}\" font-family=\"${escapeXml(b.family)}\" font-size=\"${fmt(b.sizePx)}\" fill=\"${b.fillHex}\" xml:space=\"preserve\">${escapeXml(b.text)}</text>`,\n );\n }\n }\n parts.push(emitLine(line, baselineY, dx));\n }\n return parts.join('');\n};\n\nconst topPad = (line: Line): number => {\n // Half-leading: spread (advance - (ascent+descent)) above and below the\n // glyph box. For the natural advance this is lineGap/2.\n const lead = line.advance - (line.ascent + line.descent);\n return lead > 0 ? lead / 2 : 0;\n};\n\nconst lineAdvance = (line: Line, para: ParaInput): number => {\n // Natural single-line height = ascent + descent + lineGap. The measurer\n // supplies the metric set the renderer (LibreOffice / GDI) actually uses:\n // win metrics (ascent = usWinAscent, lineGap 0) unless the font sets\n // USE_TYPO_METRICS, in which case typo metrics + typoLineGap. The baseline\n // sits at lineTop + ascent.\n const natural = line.ascent + line.descent + line.lineGap;\n let adv: number;\n if (para.lineSpacing?.kind === 'pct') adv = para.lineSpacing.value * natural;\n else if (para.lineSpacing?.kind === 'pts') adv = para.lineSpacing.px;\n else adv = natural;\n return adv * para.lineAdvanceScale;\n};\n\nconst emitLine = (line: Line, baselineY: number, dx: number): string => {\n const toks = [...line.tokens];\n while (toks.length > 0 && (toks[toks.length - 1]!.isSpace || toks[toks.length - 1]!.isBreak)) {\n toks.pop();\n }\n const content = toks.filter((t) => !t.isBreak);\n if (content.length === 0) return '';\n const tspans = groupTokens(content)\n .map((g) => tspan(g))\n .join('');\n if (tspans === '') return '';\n return `<text x=\"${fmt(line.anchorX + dx + GRID_NUDGE_X)}\" y=\"${fmt(baselineY)}\" text-anchor=\"${line.textAnchor}\" xml:space=\"preserve\">${tspans}</text>`;\n};\n\ninterface Group {\n text: string;\n piece: PieceInput;\n}\n\nconst groupTokens = (toks: Token[]): Group[] => {\n const groups: Group[] = [];\n for (const t of toks) {\n if (t.isBreak) continue;\n const last = groups[groups.length - 1];\n if (last && samePiece(last.piece, t.piece)) last.text += t.text;\n else groups.push({ text: t.text, piece: t.piece });\n }\n return groups;\n};\n\nconst samePiece = (a: PieceInput, b: PieceInput): boolean =>\n a.family === b.family &&\n a.sizePx === b.sizePx &&\n a.bold === b.bold &&\n a.italic === b.italic &&\n a.letterSpacingPx === b.letterSpacingPx &&\n a.fillHex === b.fillHex &&\n a.underline === b.underline &&\n a.strike === b.strike &&\n a.superSub === b.superSub &&\n a.href === b.href;\n\nconst tspan = (g: Group): string => {\n const p = g.piece;\n const sizePx = p.superSub !== 0 ? p.sizePx * 0.65 : p.sizePx;\n const attrs: string[] = [\n `font-family=\"${escapeXml(p.family)}\"`,\n `font-size=\"${fmt(sizePx)}\"`,\n `fill=\"${p.fillHex}\"`,\n ];\n if (p.bold) attrs.push('font-weight=\"700\"');\n if (p.italic) attrs.push('font-style=\"italic\"');\n const deco: string[] = [];\n if (p.underline) deco.push('underline');\n if (p.strike) deco.push('line-through');\n if (deco.length) attrs.push(`text-decoration=\"${deco.join(' ')}\"`);\n if (p.letterSpacingPx !== 0) attrs.push(`letter-spacing=\"${fmt(p.letterSpacingPx)}\"`);\n if (p.superSub === 1) attrs.push(`baseline-shift=\"${fmt(p.sizePx * 0.33)}\"`);\n else if (p.superSub === -1) attrs.push(`baseline-shift=\"${fmt(-p.sizePx * 0.16)}\"`);\n return `<tspan ${attrs.join(' ')}>${escapeXml(g.text)}</tspan>`;\n};\n\n// ---------------------------------------------------------------------------\n// Greedy first-fit line breaking. Over-long tokens are pre-split into chars by\n// the caller, so here a token always fits on an empty line.\n\nconst wrapTokens = (\n tokens: Token[],\n wrap: boolean,\n firstAvail: number,\n avail: number,\n): Token[][] => {\n const lines: Token[][] = [];\n let cur: Token[] = [];\n let lineW = 0; // width of every token pushed to cur (words + spaces)\n let trailingSpaceW = 0; // width of the trailing run of spaces\n let first = true;\n\n const trimTrailing = (): void => {\n while (cur.length > 0 && (cur[cur.length - 1]!.isSpace || cur[cur.length - 1]!.isBreak)) {\n cur.pop();\n }\n };\n const close = (): void => {\n trimTrailing();\n lines.push(cur);\n cur = [];\n lineW = 0;\n trailingSpaceW = 0;\n first = false;\n };\n\n for (const tok of tokens) {\n if (tok.isBreak) {\n cur.push(tok);\n close();\n continue;\n }\n if (tok.isSpace) {\n cur.push(tok);\n lineW += tok.width;\n trailingSpaceW += tok.width;\n continue;\n }\n const limit = first ? firstAvail : avail;\n const contentW = lineW - trailingSpaceW; // exclude trailing spaces from the fit test\n const hasContent = contentW > 0;\n if (wrap && hasContent && contentW + tok.width > limit + 0.5) {\n close();\n cur.push(tok);\n lineW = tok.width;\n } else {\n // Trailing spaces become committed inter-word spaces.\n cur.push(tok);\n lineW += tok.width;\n }\n trailingSpaceW = 0;\n }\n trimTrailing();\n if (cur.length > 0) lines.push(cur);\n return lines;\n};\n","// Per-slide SVG renderer for the playground.\n//\n// pptx-kit does not ship a full DrawingML renderer — that would be a\n// project in its own right (see python-pptx-renderer, pptxgenjs viewer,\n// or the LibreOffice headless pipeline). What we do here is build a\n// reasonable approximation by:\n//\n// 1. Painting each shape's preset geometry on the slide canvas at its\n// actual EMU bounds, with the rotation / flip / solid fill / stroke\n// pptx-kit reports.\n// 2. Laying the shape's text on top via an SVG `<foreignObject>` that\n// hosts real HTML — that's how we get proper word wrap, per-run\n// bold / italic / underline / font, paragraph alignment, vertical\n// anchor, and bullets without re-implementing line-break logic.\n// 3. Resolving theme colors (`scheme:accent1`, `scheme:tx1`, ...) via\n// `getPresentationTheme` so brand colors light up correctly.\n//\n// Embedded charts, tables, SmartArt, gradient / pattern / picture fills,\n// the full text-property inheritance cascade (rPr → defRPr → lstStyle →\n// placeholder → master → theme), and custom geometry stay as labelled\n// placeholders — proper handling needs a real renderer.\n\nimport type { getParagraphLineSpacing, getShapeEffects } from 'pptx-kit';\nimport {\n getParagraphAlignment,\n getParagraphBullet,\n getParagraphBulletStyle,\n getParagraphBulletImageBytes,\n isParagraphBulletPicture,\n getParagraphIndent,\n getParagraphLevel,\n getParagraphPropertiesEffective,\n getEffectiveColorMap,\n getParagraphSpacing,\n getPresentationFonts,\n getPresentationTheme,\n getShapeBoundsResolved,\n getShapeEffectsEffective,\n getShapeFillEffective,\n getShapeFillColorResolved,\n getShapeFlip,\n getShapeGradientFill,\n getShapeGradientFillEffective,\n getShapePatternFill,\n getShapeBodyPrEffective,\n getShapeChartSpec,\n getShapeClickAction,\n getShapeAltTitle,\n getShapeDescription,\n getShapeHyperlink,\n getShapeHyperlinkTooltip,\n getShapeName,\n getShapeTextColumns,\n getShapeTextBodyRotationDeg,\n getShapeTextDirection,\n getShapeImageBiLevelThreshold,\n getShapeImageBrightness,\n getShapeImageLinkUrl,\n getShapeImageBytes,\n getShapeImageContrast,\n getShapeImageCrop,\n getShapeImageDuotone,\n getShapeImageFillBytes,\n getShapeImageOpacity,\n getShapeImagePartName,\n getShapeImageFormat,\n getShapeAdjustValues,\n getShapeCustomGeometry,\n getShapeKind,\n getShapeParagraphCount,\n getShapeParagraphElements,\n getShapeRunClickAction,\n getShapeRunHyperlink,\n getShapeRunHyperlinkTooltip,\n getShapePlaceholderType,\n getShapePreset,\n getShapeXmlString,\n getShapeRotation,\n getShapeRunFormat,\n getShapeRunFormatEffective,\n getShapeStrokeEffective,\n getShapeStrokeArrow,\n getShapeStrokeCap,\n getShapeStrokeColorResolved,\n getShapeStrokeCompound,\n getShapeStrokeDash,\n getShapeStrokeJoin,\n getShapeTextAnchor,\n getShapeTextAutoFitParams,\n getShapeTextMargins,\n getGroupChildren,\n getGroupTransform,\n getSlideBackground,\n getSlideBackgroundGradientFill,\n getSlideLayoutBackgroundGradientFill,\n getSlideMasterBackgroundGradientFill,\n getSlideBackgroundImageBytes,\n getSlideBackgroundPatternFill,\n getSlideIndex,\n getSlideLayout,\n getSlideLayoutBackground,\n getSlideLayoutBackgroundImageBytes,\n getSlideLayoutBackgroundPatternFill,\n getSlideLayoutShapes,\n getSlideMasterShapes,\n getSlideMasterBackground,\n getSlideMasterBackgroundImageBytes,\n getSlideMasterBackgroundPatternFill,\n getSlideShapes,\n getSlideSize,\n getTableCellAnchor,\n getTableCellMargins,\n getTableCellBorders,\n getTableCellFill,\n getTableCellParagraphs,\n getTableCellSpan,\n getTableCells,\n getTableStyleFlags,\n getTableColumnWidths,\n getTableDimensions,\n getTableRowHeights,\n isChartShape,\n isShapeImageGrayscale,\n isShapePlaceholder,\n isShapeTextBox,\n isTableShape,\n type PresentationData,\n type PresentationTheme,\n type ChartSeries,\n type ChartSpec,\n type ChartTextStyle,\n type CustomGeometry,\n type GradientFillOptions,\n type ShapeFill,\n type ShapeStroke,\n type SlideData,\n type SlideShapeData,\n type TableCellParagraph,\n type TextFormat,\n} from 'pptx-kit';\nimport {\n defaultMeasurer,\n layoutTextSvg,\n substituteFamily,\n type BulletInput,\n type ColumnLayout,\n type ParaInput,\n type PieceInput,\n type RenderSlideOptions,\n type TextBodyInput,\n type TextLayoutMode,\n type TextMeasurer,\n type VerticalLayout,\n} from './text-layout.ts';\n\nexport type { RenderSlideOptions, TextMeasurer, FontSpec, MeasureResult } from './text-layout.ts';\n\n// Threaded through the shape walk so the text path (foreignObject vs pure SVG)\n// and its measurer are chosen once at the top and never re-derived.\ninterface LayoutCtx {\n readonly mode: TextLayoutMode;\n readonly measure: TextMeasurer;\n}\n\n// Widescreen 16:9 fallback in EMU (13.333\" × 7.5\"), the PowerPoint\n// default since 2013. See ECMA-376 §19.3.1.39 `SlideSizeType`.\nconst DEFAULT_SIZE = { width: 12_192_000, height: 6_858_000 };\n\n// The renderer projects EMU coordinates onto a CSS-pixel-at-96-DPI grid\n// before emitting them. 1 CSS px = 9525 EMU at 96 DPI, so this lets us\n// use natural-looking numbers in the SVG (viewBox ≈ 1280×720 for a\n// 16:9 slide) and matches what HTML inside `<foreignObject>` expects.\n// Real browsers refuse to render text when CSS font-size grows into\n// the hundreds of thousands of pixels (which is what happens if you\n// keep EMU as the SVG user unit).\nconst EMU_PER_PX = 9525;\n\n// CSS px per typographic point.\nconst PX_PER_PT = 96 / 72;\n\n// PowerPoint's stock master defaults — we now honour\n// `<a:normAutofit fontScale=…>` when it's set on the shape's text\n// body, so the title can claim its full 44pt size without\n// auto-shrinking blindly. A heuristic autofit still kicks in only\n// when neither an explicit normAutofit nor a small enough authored\n// size keeps the text inside the placeholder.\nconst DEFAULT_BODY_PT = 18;\nconst DEFAULT_TITLE_PT = 44;\n// Single quotes only — these strings are emitted into `style=\"...\"`\n// attributes, so any embedded double quote would close the attribute\n// early and silently drop every property after it (notably `color:`,\n// which then inherits the site's dark-mode white = invisible text).\nconst DEFAULT_FONT = \"Calibri, 'Helvetica Neue', Arial, sans-serif\";\n\n// Default body inset (PowerPoint default), per ECMA-376: 91440 EMU\n// horizontal × 45720 EMU vertical.\nconst DEFAULT_INSET_X = 91_440;\nconst DEFAULT_INSET_Y = 45_720;\n\nconst u8ToBase64 = (data: Uint8Array): string => {\n let s = '';\n const chunk = 0x8000;\n for (let i = 0; i < data.length; i += chunk) {\n s += String.fromCharCode(...data.subarray(i, i + chunk));\n }\n return btoa(s);\n};\n\nconst imageMime: Record<string, string> = {\n png: 'image/png',\n jpeg: 'image/jpeg',\n gif: 'image/gif',\n bmp: 'image/bmp',\n tiff: 'image/tiff',\n webp: 'image/webp',\n svg: 'image/svg+xml',\n};\n\n// Inlines raw image bytes as a `data:` URL, sniffing the format from the\n// magic bytes (defaulting to PNG when unknown).\nconst bytesToDataUrl = (bytes: Uint8Array): string => {\n const fmt = detectImageFormatLocal(bytes);\n const mime = fmt ? (imageMime[fmt] ?? 'image/png') : 'image/png';\n return `data:${mime};base64,${u8ToBase64(bytes)}`;\n};\n\n// Fallback for when pptx-kit's `getShapeImageFormat` returns `null` —\n// usually that means the magic bytes don't match a recognised format\n// (EMF / WMF / HEIC / etc.), but the file extension on the media part\n// is often enough to get the right MIME for the browser to try.\nconst EXT_TO_MIME: Record<string, string> = {\n png: 'image/png',\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n gif: 'image/gif',\n bmp: 'image/bmp',\n tif: 'image/tiff',\n tiff: 'image/tiff',\n webp: 'image/webp',\n svg: 'image/svg+xml',\n avif: 'image/avif',\n heic: 'image/heic',\n heif: 'image/heif',\n};\n\nconst mimeFromPartName = (name: string | null): string | null => {\n if (!name) return null;\n const dot = name.lastIndexOf('.');\n if (dot < 0) return null;\n const ext = name.slice(dot + 1).toLowerCase();\n return EXT_TO_MIME[ext] ?? null;\n};\n\n// Render the picture if pptx-kit handed us bytes; fall back to a\n// labelled placeholder describing why nothing is drawn. EMF / WMF\n// pictures still won't display (no browser can decode them) but the\n// label tells the user what's there.\nconst renderPicture = (\n shape: SlideShapeData,\n pres: PresentationData,\n x: number,\n y: number,\n w: number,\n h: number,\n transform: string,\n textOverlay: string,\n bytes: Uint8Array | null,\n format: string | null,\n): string => {\n let mime: string | null = null;\n if (bytes && format) {\n mime = imageMime[format] ?? null;\n }\n if (bytes && !mime) {\n // Format detection failed (likely EMF/WMF/HEIC). Try the part\n // name's extension — most browsers can still render HEIC / AVIF\n // and friends if labelled correctly.\n mime = mimeFromPartName(getShapeImagePartName(shape));\n }\n if (bytes && mime) {\n const dataUrl = `data:${mime};base64,${u8ToBase64(bytes)}`;\n // Apply <a:srcRect> crop, brightness (lumOff), contrast (lumMod),\n // and opacity (alphaModFix) so PowerPoint's \"Picture Format >\n // Corrections\" matches what the playground paints.\n const crop = getShapeImageCrop(shape);\n let imgX = x,\n imgY = y,\n imgW = w,\n imgH = h;\n let clipDef = '';\n let clipAttr = '';\n const cropL = crop?.left ?? 0;\n const cropT = crop?.top ?? 0;\n const cropR = crop?.right ?? 0;\n const cropB = crop?.bottom ?? 0;\n if (cropL > 0 || cropT > 0 || cropR > 0 || cropB > 0) {\n // ECMA-376 <a:srcRect> sides are fractions of the source image;\n // PowerPoint crops by adjusting the visible region. We project\n // the same effect by scaling the <image> larger and clipping it\n // to the shape's bounds.\n const scaleX = 1 / Math.max(0.001, 1 - cropL - cropR);\n const scaleY = 1 / Math.max(0.001, 1 - cropT - cropB);\n imgW = w * scaleX;\n imgH = h * scaleY;\n imgX = x - imgW * cropL;\n imgY = y - imgH * cropT;\n const clipId = mintId();\n clipDef = `<defs><clipPath id=\"${clipId}\"><rect x=\"${E(x)}\" y=\"${E(y)}\" width=\"${E(w)}\" height=\"${E(h)}\"/></clipPath></defs>`;\n clipAttr = ` clip-path=\"url(#${clipId})\"`;\n }\n const brightness = getShapeImageBrightness(shape) ?? 0;\n const contrast = getShapeImageContrast(shape) ?? 1;\n const opacity = getShapeImageOpacity(shape) ?? 1;\n const grayscale = isShapeImageGrayscale(shape);\n const biLevel = getShapeImageBiLevelThreshold(shape);\n const duotone = getShapeImageDuotone(pres, shape);\n let filterAttr = '';\n if (\n brightness !== 0 ||\n contrast !== 1 ||\n grayscale ||\n biLevel !== null ||\n (duotone && (duotone.firstColor || duotone.secondColor))\n ) {\n // SVG filter pipeline: contrast/brightness (linear), then optional\n // grayscale (luminance matrix), then optional biLevel two-tone\n // (discrete table that snaps each channel to 0 or 1 at thresh).\n const fid = mintId();\n const prims: string[] = [];\n if (brightness !== 0 || contrast !== 1) {\n prims.push(\n `<feComponentTransfer><feFuncR type=\"linear\" slope=\"${contrast}\" intercept=\"${brightness}\"/><feFuncG type=\"linear\" slope=\"${contrast}\" intercept=\"${brightness}\"/><feFuncB type=\"linear\" slope=\"${contrast}\" intercept=\"${brightness}\"/></feComponentTransfer>`,\n );\n }\n if (grayscale) {\n // Luminance-preserving desaturation matrix.\n prims.push(\n `<feColorMatrix type=\"matrix\" values=\"0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0\"/>`,\n );\n }\n if (duotone && duotone.firstColor && duotone.secondColor) {\n // Duotone: gray → lerp(firstColor, secondColor, gray). We emit\n // a feColorMatrix that desaturates first (Rec. 709 luminance),\n // then a feComponentTransfer with tableValues sampling the\n // gradient between the two colors.\n const [r1, g1, b1] = hexChannels(duotone.firstColor);\n const [r2, g2, b2] = hexChannels(duotone.secondColor);\n const steps = 16;\n const tR: string[] = [];\n const tG: string[] = [];\n const tB: string[] = [];\n for (let i = 0; i < steps; i++) {\n const t = i / (steps - 1);\n tR.push(((r1 + (r2 - r1) * t) / 255).toFixed(4));\n tG.push(((g1 + (g2 - g1) * t) / 255).toFixed(4));\n tB.push(((b1 + (b2 - b1) * t) / 255).toFixed(4));\n }\n prims.push(\n `<feColorMatrix type=\"matrix\" values=\"0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0\"/>`,\n `<feComponentTransfer><feFuncR type=\"table\" tableValues=\"${tR.join(' ')}\"/><feFuncG type=\"table\" tableValues=\"${tG.join(' ')}\"/><feFuncB type=\"table\" tableValues=\"${tB.join(' ')}\"/></feComponentTransfer>`,\n );\n }\n if (biLevel !== null) {\n const t = biLevel / 100;\n // discrete tables snap channels to 0 below `t` and to 1 at/above.\n const table = `0 1`;\n // Use a step function: tableValues with 2 entries split at thresh.\n // feFuncR/G/B with type=discrete + 2-entry table snaps at the midpoint;\n // for an arbitrary threshold we shift via tableValues with more samples.\n const steps = 32;\n const vals: string[] = [];\n for (let i = 0; i < steps; i++) {\n vals.push(i / (steps - 1) >= t ? '1' : '0');\n }\n void table;\n const tableStr = vals.join(' ');\n prims.push(\n `<feComponentTransfer><feFuncR type=\"discrete\" tableValues=\"${tableStr}\"/><feFuncG type=\"discrete\" tableValues=\"${tableStr}\"/><feFuncB type=\"discrete\" tableValues=\"${tableStr}\"/></feComponentTransfer>`,\n );\n }\n clipDef += `<defs><filter id=\"${fid}\">${prims.join('')}</filter></defs>`;\n filterAttr = ` filter=\"url(#${fid})\"`;\n }\n const opacityAttr = opacity !== 1 ? ` opacity=\"${opacity.toFixed(3)}\"` : '';\n return `${clipDef}<g${transform}${clipAttr}><image x=\"${E(imgX)}\" y=\"${E(imgY)}\" width=\"${E(imgW)}\" height=\"${E(imgH)}\" href=\"${dataUrl}\" xlink:href=\"${dataUrl}\" preserveAspectRatio=\"none\"${filterAttr}${opacityAttr}/></g><g${transform}>${textOverlay}</g>`;\n }\n // B14 — external r:link pictures don't ship bytes in the package.\n // Surface the URL in the placeholder so users can see where the\n // picture lives.\n const linkUrl = getShapeImageLinkUrl(shape);\n const label = !bytes\n ? linkUrl\n ? `picture (link: ${linkUrl.length > 48 ? linkUrl.slice(0, 45) + '…' : linkUrl})`\n : 'picture (no bytes)'\n : `picture (${format ?? 'unknown'}${bytes ? `, ${bytes.byteLength} B` : ''})`;\n return `<g data-pptx-fallback=\"image\"${transform}><rect x=\"${E(x)}\" y=\"${E(y)}\" width=\"${E(w)}\" height=\"${E(h)}\" fill=\"#F3F4F6\" stroke=\"#9CA3AF\" stroke-width=\"${E(9_525)}\" stroke-dasharray=\"${E(50_000)},${E(30_000)}\"/>${renderPicturePlaceholderLabel(x, y, w, h, label)}${textOverlay}</g>`;\n};\n\nconst renderPicturePlaceholderLabel = (\n x: number,\n y: number,\n w: number,\n h: number,\n text: string,\n): string => {\n const cx = x + w / 2;\n const cy = y + h / 2;\n // <title> shows on hover in every SVG viewer — useful when the\n // shape is small enough that the inline <text> gets cropped.\n const title = `<title>${escapeXml(text)}</title>`;\n const label = `<text x=\"${E(cx)}\" y=\"${E(cy)}\" text-anchor=\"middle\" dominant-baseline=\"middle\" font-family=\"sans-serif\" font-weight=\"600\" font-size=\"${(13 * PX_PER_PT).toFixed(2)}\" fill=\"#374151\">${escapeXml(text)}</text>`;\n return `${title}${label}`;\n};\n\nconst escapeXml = (s: string): string =>\n s\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&apos;');\n\n// ---------------------------------------------------------------------------\n// Color resolution.\n\nconst SCHEME_TO_THEME: Record<string, keyof Omit<PresentationTheme, 'name'>> = {\n tx1: 'dark1',\n bg1: 'light1',\n tx2: 'dark2',\n bg2: 'light2',\n dk1: 'dark1',\n lt1: 'light1',\n dk2: 'dark2',\n lt2: 'light2',\n accent1: 'accent1',\n accent2: 'accent2',\n accent3: 'accent3',\n accent4: 'accent4',\n accent5: 'accent5',\n accent6: 'accent6',\n hlink: 'hyperlink',\n folHlink: 'followedHyperlink',\n};\n\n// Parse `#RRGGBB` (or bare `RRGGBB`) into 0-255 channels.\nconst hexChannels = (hex: string): [number, number, number] => {\n const h = hex.startsWith('#') ? hex.slice(1) : hex;\n return [\n Number.parseInt(h.slice(0, 2), 16) || 0,\n Number.parseInt(h.slice(2, 4), 16) || 0,\n Number.parseInt(h.slice(4, 6), 16) || 0,\n ];\n};\n\n// Linearly mix two #RRGGBB colors. `t` = weight of `a` in [0,1].\nconst mixHex = (aHex: string, bHex: string, t: number): string => {\n const aa = aHex.startsWith('#') ? aHex.slice(1) : aHex;\n const bb = bHex.startsWith('#') ? bHex.slice(1) : bHex;\n const part = (h: string, off: number): number => Number.parseInt(h.slice(off, off + 2), 16);\n const r = Math.round(part(aa, 0) * t + part(bb, 0) * (1 - t));\n const g = Math.round(part(aa, 2) * t + part(bb, 2) * (1 - t));\n const b = Math.round(part(aa, 4) * t + part(bb, 4) * (1 - t));\n const h = (n: number): string =>\n Math.max(0, Math.min(255, n)).toString(16).padStart(2, '0').toUpperCase();\n return `#${h(r)}${h(g)}${h(b)}`;\n};\n\nconst normalizeHex = (s: string): string => {\n if (s.startsWith('#')) return s;\n if (/^[0-9A-Fa-f]{6}$/.test(s)) return `#${s}`;\n if (/^[0-9A-Fa-f]{8}$/.test(s)) return `#${s.slice(2)}`; // alpha-prefixed\n return s;\n};\n\nconst resolveColor = (\n c: string | null | undefined,\n theme: PresentationTheme | null,\n fallback = '#1F2937',\n): string => {\n if (!c) return fallback;\n // Accept either `scheme:tx1` (the form fills + strokes use) or a bare\n // ECMA-376 token (`tx1`, `accent1`, ...) from the run-format cascade.\n let token: string | null = null;\n if (c.startsWith('scheme:')) token = c.slice('scheme:'.length);\n else if (SCHEME_TO_THEME[c]) token = c;\n if (token !== null) {\n if (theme) {\n // Remap the slide token through the effective color map first, then index\n // the theme — so an inverted map (tx1→lt1) paints what PowerPoint paints.\n const mapped = activeColorMap?.[token] ?? token;\n const key = SCHEME_TO_THEME[mapped] ?? SCHEME_TO_THEME[token];\n if (key) return normalizeHex(theme[key]);\n }\n if (token === 'tx1' || token === 'dk1') return '#000000';\n if (token === 'bg1' || token === 'lt1') return '#FFFFFF';\n if (token === 'tx2' || token === 'dk2') return '#1F2937';\n if (token === 'bg2' || token === 'lt2') return '#E5E7EB';\n return fallback;\n }\n return normalizeHex(c);\n};\n\n// ---------------------------------------------------------------------------\n// Fill / stroke paint with theme resolution.\n\n// Module-scoped id counter for SVG `<defs>` references (gradients,\n// patterns). Each renderSlideSvg call mints fresh ids; collisions\n// across slides don't matter because each slide's SVG is a separate\n// document. Plain monotonic counter is fine.\nlet nextDefId = 0;\nconst mintId = (): string => `pkdef-${(nextDefId++).toString(36)}`;\n\n// Effective color map (`<p:clrMap>` overlaid by `<p:clrMapOvr>`) for the slide\n// currently rendering. PowerPoint remaps the slide tokens (`tx1`, `bg1`, …) to\n// theme slots through this map before the theme lookup; an inverted map\n// (`bg1=\"dk1\" tx1=\"lt1\"`) is common in Google-Slides / Canva exports and makes\n// `tx1` resolve to the light slot. `renderSlideSvg` sets this at the start of\n// each (synchronous, single-slide) render and `resolveColor` reads it. Like\n// `nextDefId` above, every entry overwrites it, so it needs no reset.\nlet activeColorMap: Readonly<Record<string, string>> | null = null;\n\n// `<linearGradient>` definition + `fill=\"url(#…)\"` reference, projected\n// from pptx-kit's `{ stops, angleDeg }` shape onto SVG's\n// objectBoundingBox unit cube. ECMA-376 measures `angleDeg` clockwise\n// from 3 o'clock, which matches the trig below (0° = +x, 90° = +y).\nconst gradientDef = (\n grad: GradientFillOptions,\n theme: PresentationTheme | null,\n): { defs: string; fillAttr: string } => {\n const id = mintId();\n const stops = grad.stops\n .map(\n (s) =>\n `<stop offset=\"${s.offset.toFixed(4)}\" stop-color=\"${resolveColor(s.color, theme, '#E5E7EB')}\"/>`,\n )\n .join('');\n if (grad.path === 'circle' || grad.path === 'rect' || grad.path === 'shape') {\n // SVG only ships a true radial gradient; ECMA-376's `rect` and\n // `shape` paths are close enough that we project them onto a\n // radial fill centered on the focus rectangle.\n const focus = grad.focus ?? { left: 0.5, top: 0.5, right: 0.5, bottom: 0.5 };\n const cx = (focus.left + focus.right) / 2;\n const cy = (focus.top + focus.bottom) / 2;\n // ECMA-376 stops paint outward from the focus center; SVG's radial\n // gradient paints from cx/cy out to r. Reverse the stops so the\n // first-stop color sits at the center, matching PowerPoint.\n const reversed = grad.stops\n .slice()\n .reverse()\n .map(\n (s) =>\n `<stop offset=\"${(1 - s.offset).toFixed(4)}\" stop-color=\"${resolveColor(s.color, theme, '#E5E7EB')}\"/>`,\n )\n .join('');\n const defs = `<defs><radialGradient id=\"${id}\" gradientUnits=\"objectBoundingBox\" cx=\"${cx.toFixed(4)}\" cy=\"${cy.toFixed(4)}\" r=\"${Math.max(0.5, Math.max(cx, cy, 1 - cx, 1 - cy)).toFixed(4)}\">${reversed}</radialGradient></defs>`;\n return { defs, fillAttr: `url(#${id})` };\n }\n const angleRad = ((grad.angleDeg ?? 0) * Math.PI) / 180;\n const dx = Math.cos(angleRad) / 2;\n const dy = Math.sin(angleRad) / 2;\n const x1 = 0.5 - dx;\n const y1 = 0.5 - dy;\n const x2 = 0.5 + dx;\n const y2 = 0.5 + dy;\n const defs = `<defs><linearGradient id=\"${id}\" gradientUnits=\"objectBoundingBox\" x1=\"${x1.toFixed(4)}\" y1=\"${y1.toFixed(4)}\" x2=\"${x2.toFixed(4)}\" y2=\"${y2.toFixed(4)}\">${stops}</linearGradient></defs>`;\n return { defs, fillAttr: `url(#${id})` };\n};\n\n// SVG `<pattern>` definitions for the ECMA-376 ST_PresetPatternVal\n// presets (§20.1.10.49). All tiles are 8×8 px and use the foreground\n// color for the pattern strokes / dots, background for the negative\n// space. The `pct*` family modulates the dot density to approximate\n// the requested coverage percentage. Unknown presets fall through to\n// pct50 (50% coverage).\nconst patternDef = (pat: {\n preset: string;\n foreground: string;\n background: string;\n}): { defs: string; fillAttr: string } => {\n const id = mintId();\n const fg = pat.foreground;\n const bg = pat.background;\n const preset = pat.preset;\n let body = '';\n const W = 8;\n const H = 8;\n const stripe = (orientation: 'h' | 'v' | 'd' | 'a', width = 1): string => {\n if (orientation === 'h')\n return `<path d=\"M0 ${H / 2}H${W}\" stroke=\"${fg}\" stroke-width=\"${width}\"/>`;\n if (orientation === 'v')\n return `<path d=\"M${W / 2} 0V${H}\" stroke=\"${fg}\" stroke-width=\"${width}\"/>`;\n if (orientation === 'd')\n return `<path d=\"M0 0L${W} ${H}\" stroke=\"${fg}\" stroke-width=\"${width}\"/>`;\n return `<path d=\"M${W} 0L0 ${H}\" stroke=\"${fg}\" stroke-width=\"${width}\"/>`;\n };\n const dots = (density: number): string => {\n // density 0..1; emit between 1 and 4 dots per 8x8 tile by density.\n const count = Math.max(1, Math.round(density * 4));\n const out: string[] = [];\n const grid =\n count <= 1\n ? [[4, 4]]\n : count === 2\n ? [\n [2, 2],\n [6, 6],\n ]\n : [\n [2, 2],\n [6, 2],\n [2, 6],\n [6, 6],\n ];\n for (const [x, y] of grid.slice(0, count)) {\n out.push(`<circle cx=\"${x}\" cy=\"${y}\" r=\"0.7\" fill=\"${fg}\"/>`);\n }\n return out.join('');\n };\n // pct{N} — N% coverage. Map percent → dot density.\n const pctMatch = /^pct(\\d+)$/.exec(preset);\n if (pctMatch) {\n const pct = Math.min(100, Math.max(5, Number.parseInt(pctMatch[1]!, 10)));\n body = dots(pct / 100);\n } else if (preset === 'horzBrick' || preset === 'ltHorizontal' || preset === 'narHorz') {\n body = stripe('h', 0.8);\n } else if (preset === 'dkHorizontal') {\n body = stripe('h', 2);\n } else if (preset === 'ltVertical' || preset === 'narVert') {\n body = stripe('v', 0.8);\n } else if (preset === 'dkVertical') {\n body = stripe('v', 2);\n } else if (preset === 'ltUpDiag' || preset === 'wdUpDiag') {\n body = stripe('d', 0.8);\n } else if (preset === 'dkUpDiag') {\n body = stripe('d', 2);\n } else if (preset === 'ltDnDiag' || preset === 'wdDnDiag') {\n body = stripe('a', 0.8);\n } else if (preset === 'dkDnDiag') {\n body = stripe('a', 2);\n } else if (preset === 'ltHorzCross' || preset === 'smGrid' || preset === 'cross') {\n body = stripe('h', 0.8) + stripe('v', 0.8);\n } else if (preset === 'dkHorzCross' || preset === 'lgGrid' || preset === 'plaid') {\n body = stripe('h', 2) + stripe('v', 2);\n } else if (\n preset === 'diagCross' ||\n preset === 'trellis' ||\n preset === 'shingle' ||\n preset === 'dashUpDiag' ||\n preset === 'dashDnDiag'\n ) {\n body = stripe('d', 0.8) + stripe('a', 0.8);\n } else if (preset === 'dkUpDiagStripe' || preset === 'dkDnDiagStripe') {\n body = stripe(preset === 'dkUpDiagStripe' ? 'd' : 'a', 2);\n } else if (preset === 'wave' || preset === 'zigZag') {\n body = `<path d=\"M0 4Q2 2 4 4T8 4\" stroke=\"${fg}\" stroke-width=\"0.8\" fill=\"none\"/>`;\n } else if (preset === 'weave' || preset === 'divot') {\n body = `<path d=\"M0 0L4 4 0 8M4 0L8 4 4 8\" stroke=\"${fg}\" stroke-width=\"0.8\" fill=\"none\"/>`;\n } else if (preset === 'sphere') {\n body = `<circle cx=\"4\" cy=\"4\" r=\"3\" fill=\"${fg}\" fill-opacity=\"0.7\"/>`;\n } else if (preset === 'solidDmnd' || preset === 'openDmnd') {\n body = `<path d=\"M4 1L7 4 4 7 1 4Z\" fill=\"${preset === 'solidDmnd' ? fg : 'none'}\" stroke=\"${fg}\" stroke-width=\"0.6\"/>`;\n } else {\n body = dots(0.5);\n }\n const defs = `<defs><pattern id=\"${id}\" patternUnits=\"userSpaceOnUse\" width=\"${W}\" height=\"${H}\"><rect width=\"${W}\" height=\"${H}\" fill=\"${bg}\"/>${body}</pattern></defs>`;\n return { defs, fillAttr: `url(#${id})` };\n};\n\ninterface PaintResult {\n fill: string;\n stroke: string;\n strokeWidth: number;\n /** Extra SVG `<defs>` the caller should emit before the shape. */\n defs: string;\n /** Pre-built stroke style attributes (dasharray, linecap, linejoin, etc.). */\n strokeAttrs: string;\n /** Pre-built marker-start / marker-end attributes for arrowheads. */\n markerAttrs: string;\n}\n\n// ECMA-376 `<a:prstDash val=\"…\"/>` → SVG `stroke-dasharray` (in stroke widths).\n// PowerPoint scales the pattern by the line width; the multipliers below were\n// reverse-engineered from real PPTX exports so the visual cadence matches.\nconst DASH_PATTERNS: Record<string, string> = {\n solid: '',\n dot: '1 3',\n dash: '4 3',\n lgDash: '8 3',\n dashDot: '4 3 1 3',\n lgDashDot: '8 3 1 3',\n lgDashDotDot: '8 3 1 3 1 3',\n sysDash: '3 1',\n sysDot: '1 1',\n sysDashDot: '3 1 1 1',\n sysDashDotDot: '3 1 1 1 1 1',\n};\n\nconst arrowSize = (size: 'sm' | 'med' | 'lg' | undefined): number =>\n size === 'sm' ? 3 : size === 'lg' ? 7 : 5;\n\nconst buildArrowMarker = (\n type: string,\n width: 'sm' | 'med' | 'lg' | undefined,\n length: 'sm' | 'med' | 'lg' | undefined,\n color: string,\n orient: 'auto' | 'auto-start-reverse',\n): { id: string; def: string } => {\n const id = mintId();\n const w = arrowSize(width);\n const h = arrowSize(length);\n // refX = w so the tip lands on the line's endpoint; refY centers vertically.\n let body: string;\n switch (type) {\n case 'triangle':\n case 'arrow':\n body = `<path d=\"M0 0L${w} ${h / 2}L0 ${h}z\" fill=\"${color}\"/>`;\n break;\n case 'stealth':\n body = `<path d=\"M0 0L${w} ${h / 2}L0 ${h}L${w * 0.4} ${h / 2}z\" fill=\"${color}\"/>`;\n break;\n case 'diamond':\n body = `<path d=\"M0 ${h / 2}L${w / 2} 0L${w} ${h / 2}L${w / 2} ${h}z\" fill=\"${color}\"/>`;\n break;\n case 'oval':\n body = `<ellipse cx=\"${w / 2}\" cy=\"${h / 2}\" rx=\"${w / 2}\" ry=\"${h / 2}\" fill=\"${color}\"/>`;\n break;\n case 'none':\n default:\n body = '';\n }\n const def = `<defs><marker id=\"${id}\" viewBox=\"0 0 ${w} ${h}\" refX=\"${w}\" refY=\"${h / 2}\" markerWidth=\"${w}\" markerHeight=\"${h}\" orient=\"${orient}\">${body}</marker></defs>`;\n return { id, def };\n};\n\nconst paint = (\n shape: SlideShapeData | null,\n fill: ShapeFill,\n stroke: ShapeStroke,\n theme: PresentationTheme | null,\n isPlaceholder: boolean,\n pres?: PresentationData,\n): PaintResult => {\n let fillColor: string;\n let defs = '';\n if (fill.kind === 'solid') {\n // Prefer the transform-aware reader when we have a presentation\n // handle — `<a:lumMod>` / `<a:shade>` / `<a:tint>` etc. on the\n // shape's fill produce the actual painted color, while `fill.color`\n // is only the base value. Falls through to the legacy path when\n // the resolver can't produce a hex (theme missing, etc.).\n let resolved: string | null = null;\n if (shape && pres) resolved = getShapeFillColorResolved(pres, shape);\n fillColor = resolved ?? resolveColor(fill.color, theme, '#E5E7EB');\n } else if (fill.kind === 'none') {\n fillColor = 'none';\n } else if (fill.kind === 'gradient') {\n // Resolve the gradient through the shape → layout → master\n // placeholder cascade so inherited gradFills paint a real\n // `<linearGradient>` / `<radialGradient>`, not a placeholder color.\n const grad = shape\n ? pres\n ? getShapeGradientFillEffective(pres, shape)\n : getShapeGradientFill(shape)\n : null;\n if (grad) {\n const built = gradientDef(grad, theme);\n defs = built.defs;\n fillColor = built.fillAttr;\n } else {\n // The fill reads as a gradient but no `<a:gradFill>` is reachable\n // (e.g. it's referenced through the theme style matrix, which the\n // core doesn't model yet). Fall back to the resolved solid color\n // when the shape carries one, else transparent — never a spurious\n // tint that masks real content.\n fillColor = (shape && pres ? getShapeFillColorResolved(pres, shape) : null) ?? 'none';\n }\n } else if (fill.kind === 'pattern') {\n const pat = shape && pres ? getShapePatternFill(pres, shape) : null;\n if (pat) {\n const built = patternDef(pat);\n defs = built.defs;\n fillColor = built.fillAttr;\n } else {\n fillColor = '#BFDBFE';\n }\n } else if (fill.kind === 'image') {\n fillColor = '#DDD6FE';\n } else {\n // `inherit`: the real fill lives in the layout/master cascade or the\n // shape's style matrix (`<p:style><a:fillRef>`), which we don't resolve\n // yet. Render transparent — that matches what PowerPoint / LibreOffice\n // show for unstyled text boxes, content placeholders, and bare autoshapes\n // (verified against ground truth), and never paints a spurious grey box\n // over real content. (`isPlaceholder` no longer changes the fill: a\n // no-type `<p:ph>` reads as phType null, so keying on it mislabelled\n // content placeholders as non-placeholders anyway.)\n void isPlaceholder;\n fillColor = 'none';\n }\n\n let strokeColor = 'none';\n let strokeWidth = 0;\n const strokeAttrParts: string[] = [];\n let markerAttrs = '';\n if (stroke.kind === 'solid') {\n let resolved: string | null = null;\n if (shape && pres) resolved = getShapeStrokeColorResolved(pres, shape);\n strokeColor = resolved ?? resolveColor(stroke.color, theme, '#9CA3AF');\n strokeWidth = stroke.widthEmu ?? 9_525; // 1pt\n if (shape) {\n const dash = getShapeStrokeDash(shape);\n if (dash && dash !== 'solid') {\n const pattern = DASH_PATTERNS[dash];\n if (pattern) {\n // Scale by stroke width in CSS pixels so the cadence matches PowerPoint.\n const swPx = strokeWidth / EMU_PER_PX;\n const arr = pattern\n .split(' ')\n .map((n) => (Number.parseFloat(n) * swPx).toFixed(2))\n .join(' ');\n strokeAttrParts.push(`stroke-dasharray=\"${arr}\"`);\n }\n }\n const cap = getShapeStrokeCap(shape);\n if (cap === 'rnd') strokeAttrParts.push('stroke-linecap=\"round\"');\n else if (cap === 'sq') strokeAttrParts.push('stroke-linecap=\"square\"');\n else if (cap === 'flat') strokeAttrParts.push('stroke-linecap=\"butt\"');\n const join = getShapeStrokeJoin(shape);\n if (join === 'round') strokeAttrParts.push('stroke-linejoin=\"round\"');\n else if (join === 'bevel') strokeAttrParts.push('stroke-linejoin=\"bevel\"');\n else if (join === 'miter') strokeAttrParts.push('stroke-linejoin=\"miter\"');\n const cmpd = getShapeStrokeCompound(shape);\n if (cmpd === 'dbl') {\n // Approximate a double line by widening + a transparent stripe down\n // the middle. SVG has no native compound-line primitive.\n strokeWidth = Math.max(strokeWidth, 19_050);\n }\n const head = getShapeStrokeArrow(shape, 'head');\n const tail = getShapeStrokeArrow(shape, 'tail');\n if (head && head.type !== 'none') {\n const m = buildArrowMarker(\n head.type,\n head.width,\n head.length,\n strokeColor,\n 'auto-start-reverse',\n );\n defs += m.def;\n markerAttrs += ` marker-start=\"url(#${m.id})\"`;\n }\n if (tail && tail.type !== 'none') {\n const m = buildArrowMarker(tail.type, tail.width, tail.length, strokeColor, 'auto');\n defs += m.def;\n markerAttrs += ` marker-end=\"url(#${m.id})\"`;\n }\n }\n }\n return {\n fill: fillColor,\n stroke: strokeColor,\n strokeWidth,\n defs,\n strokeAttrs: strokeAttrParts.join(' '),\n markerAttrs,\n };\n};\n\n// ---------------------------------------------------------------------------\n// Preset geometry → normalized [0,1] points.\n\nconst polygon = (n: number, rotation = -Math.PI / 2): Array<[number, number]> => {\n const out: Array<[number, number]> = [];\n for (let i = 0; i < n; i++) {\n const a = rotation + (i * 2 * Math.PI) / n;\n out.push([0.5 + 0.5 * Math.cos(a), 0.5 + 0.5 * Math.sin(a)]);\n }\n return out;\n};\n\nconst star = (points: number, innerRatio = 0.42): Array<[number, number]> => {\n const out: Array<[number, number]> = [];\n const rotation = -Math.PI / 2;\n for (let i = 0; i < points * 2; i++) {\n const a = rotation + (i * Math.PI) / points;\n const r = i % 2 === 0 ? 0.5 : 0.5 * innerRatio;\n out.push([0.5 + r * Math.cos(a), 0.5 + r * Math.sin(a)]);\n }\n return out;\n};\n\nconst PRESET_POINTS: Record<string, () => Array<[number, number]>> = {\n triangle: () => [\n [0.5, 0],\n [1, 1],\n [0, 1],\n ],\n rtTriangle: () => [\n [0, 0],\n [1, 1],\n [0, 1],\n ],\n diamond: () => [\n [0.5, 0],\n [1, 0.5],\n [0.5, 1],\n [0, 0.5],\n ],\n parallelogram: () => [\n [0.25, 0],\n [1, 0],\n [0.75, 1],\n [0, 1],\n ],\n trapezoid: () => [\n [0.25, 0],\n [0.75, 0],\n [1, 1],\n [0, 1],\n ],\n pentagon: () => polygon(5),\n hexagon: () => polygon(6),\n heptagon: () => polygon(7),\n octagon: () => polygon(8),\n decagon: () => polygon(10),\n dodecagon: () => polygon(12),\n star4: () => star(4),\n star5: () => star(5),\n star6: () => star(6),\n star7: () => star(7),\n star8: () => star(8),\n star10: () => star(10),\n star12: () => star(12),\n star16: () => star(16),\n star24: () => star(24),\n star32: () => star(32),\n rightArrow: () => [\n [0, 0.3],\n [0.65, 0.3],\n [0.65, 0],\n [1, 0.5],\n [0.65, 1],\n [0.65, 0.7],\n [0, 0.7],\n ],\n leftArrow: () => [\n [1, 0.3],\n [0.35, 0.3],\n [0.35, 0],\n [0, 0.5],\n [0.35, 1],\n [0.35, 0.7],\n [1, 0.7],\n ],\n upArrow: () => [\n [0.3, 1],\n [0.3, 0.35],\n [0, 0.35],\n [0.5, 0],\n [1, 0.35],\n [0.7, 0.35],\n [0.7, 1],\n ],\n downArrow: () => [\n [0.3, 0],\n [0.3, 0.65],\n [0, 0.65],\n [0.5, 1],\n [1, 0.65],\n [0.7, 0.65],\n [0.7, 0],\n ],\n leftRightArrow: () => [\n [0, 0.5],\n [0.18, 0.2],\n [0.18, 0.35],\n [0.82, 0.35],\n [0.82, 0.2],\n [1, 0.5],\n [0.82, 0.8],\n [0.82, 0.65],\n [0.18, 0.65],\n [0.18, 0.8],\n ],\n upDownArrow: () => [\n [0.5, 0],\n [0.2, 0.18],\n [0.35, 0.18],\n [0.35, 0.82],\n [0.2, 0.82],\n [0.5, 1],\n [0.8, 0.82],\n [0.65, 0.82],\n [0.65, 0.18],\n [0.8, 0.18],\n ],\n chevron: () => [\n [0, 0],\n [0.7, 0],\n [1, 0.5],\n [0.7, 1],\n [0, 1],\n [0.3, 0.5],\n ],\n // Additional block arrows beyond the cardinal four.\n bentArrow: () => [\n [0, 0.45],\n [0.55, 0.45],\n [0.55, 0.25],\n [0.55, 0.05],\n [0.95, 0.05],\n [0.95, 0.55],\n [0.8, 0.55],\n [0.8, 0.85],\n [0, 0.85],\n ],\n // Right-pointing pentagon (often used for flowcharts).\n homePlate: () => [\n [0, 0],\n [0.75, 0],\n [1, 0.5],\n [0.75, 1],\n [0, 1],\n ],\n // Hearts / smileyFace / cloud handled via path renderers below.\n};\n\n// Path-based shape renderers — for shapes that can't be expressed as a\n// closed polygon (curves, multiple sub-paths, etc.). Returns an SVG\n// `d` attribute already scaled to the shape's bounding box.\nconst PRESET_PATHS: Record<string, (x: number, y: number, w: number, h: number) => string> = {\n // Wedge callouts: rect / round-rect / ellipse body covering ~85% of\n // the bounding box plus a triangular tail pointing down-left.\n // Default adj1/adj2 values aren't read from the XML; the tail\n // position is approximate.\n wedgeRectCallout: (x, y, w, h) => {\n const bodyH = h * 0.78;\n const tailTipX = x + w * 0.12;\n const tailTipY = y + h;\n const tailBaseLeft = x + w * 0.18;\n const tailBaseRight = x + w * 0.32;\n const bodyB = y + bodyH;\n return `M${x},${y} L${x + w},${y} L${x + w},${bodyB} L${tailBaseRight},${bodyB} L${tailTipX},${tailTipY} L${tailBaseLeft},${bodyB} L${x},${bodyB} Z`;\n },\n wedgeRoundRectCallout: (x, y, w, h) => {\n const r = Math.min(w, h) * 0.08;\n const bodyH = h * 0.78;\n const tailTipX = x + w * 0.12;\n const tailTipY = y + h;\n const tailBaseLeft = x + w * 0.18;\n const tailBaseRight = x + w * 0.32;\n const bodyB = y + bodyH;\n return `M${x + r},${y} L${x + w - r},${y} A${r},${r} 0 0 1 ${x + w},${y + r} L${x + w},${bodyB - r} A${r},${r} 0 0 1 ${x + w - r},${bodyB} L${tailBaseRight},${bodyB} L${tailTipX},${tailTipY} L${tailBaseLeft},${bodyB} L${x + r},${bodyB} A${r},${r} 0 0 1 ${x},${bodyB - r} L${x},${y + r} A${r},${r} 0 0 1 ${x + r},${y} Z`;\n },\n wedgeEllipseCallout: (x, y, w, h) => {\n const bodyCy = y + h * 0.39;\n const bodyRy = h * 0.39;\n const cx = x + w / 2;\n const bodyRx = w / 2;\n // Ellipse perimeter via two arcs, then a triangle to the tail.\n const tailTipX = x + w * 0.12;\n const tailTipY = y + h;\n const tailBaseAngle = 1.5; // radians from positive x — bottom-ish\n const tailBase1X = cx + bodyRx * Math.cos(tailBaseAngle - 0.18);\n const tailBase1Y = bodyCy + bodyRy * Math.sin(tailBaseAngle - 0.18);\n const tailBase2X = cx + bodyRx * Math.cos(tailBaseAngle + 0.18);\n const tailBase2Y = bodyCy + bodyRy * Math.sin(tailBaseAngle + 0.18);\n return `M${tailBase1X},${tailBase1Y} A${bodyRx},${bodyRy} 0 1 0 ${tailBase2X},${tailBase2Y} L${tailTipX},${tailTipY} Z`;\n },\n // Cloud callout — body is 8 lobes around an ellipse, plus a small\n // dot trail towards the tail point.\n cloudCallout: (x, y, w, h) => {\n const bodyH = h * 0.78;\n const cx = x + w / 2;\n const cy = y + bodyH / 2;\n const rx = (w / 2) * 0.92;\n const ry = (bodyH / 2) * 0.85;\n const lobes = 10;\n const path: string[] = [];\n for (let i = 0; i < lobes; i++) {\n const a = (i / lobes) * 2 * Math.PI - Math.PI / 2;\n const lobeRx = rx * 0.32;\n const lobeRy = ry * 0.32;\n const px0 = cx + rx * Math.cos(a);\n const py0 = cy + ry * Math.sin(a);\n if (i === 0) path.push(`M${px0 - lobeRx},${py0}`);\n path.push(`A${lobeRx},${lobeRy} 0 1 1 ${px0 + lobeRx},${py0}`);\n const nextA = ((i + 1) / lobes) * 2 * Math.PI - Math.PI / 2;\n const nextX = cx + rx * Math.cos(nextA) - lobeRx;\n const nextY = cy + ry * Math.sin(nextA);\n path.push(`L${nextX},${nextY}`);\n }\n path.push('Z');\n // Two small trailing circles for the tail.\n const tailX = x + w * 0.18;\n const tailY = y + h * 0.95;\n return `${path.join(' ')} M${tailX - 6},${tailY - 14} a4,3 0 1 0 1,0 Z M${tailX},${tailY} a6,4 0 1 0 1,0 Z`;\n },\n // Hearts / sun / lightning / smiley — common decorative shapes.\n heart: (x, y, w, h) => {\n const cx = x + w / 2;\n const top = y + h * 0.27;\n return `M${cx},${y + h} C${x},${y + h * 0.55} ${x},${top} ${cx},${y + h * 0.4} C${x + w},${top} ${x + w},${y + h * 0.55} ${cx},${y + h} Z`;\n },\n sun: (x, y, w, h) => {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const innerR = Math.min(w, h) * 0.25;\n const outerR = Math.min(w, h) * 0.5;\n const rays = 12;\n const path: string[] = [];\n for (let i = 0; i < rays * 2; i++) {\n const r = i % 2 === 0 ? outerR : innerR;\n const a = (i / (rays * 2)) * 2 * Math.PI - Math.PI / 2;\n const px0 = cx + r * Math.cos(a);\n const py0 = cy + r * Math.sin(a);\n path.push(`${i === 0 ? 'M' : 'L'}${px0},${py0}`);\n }\n path.push('Z');\n return path.join(' ');\n },\n smileyFace: (x, y, w, h) => {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const r = Math.min(w, h) / 2 - 1;\n const eyeR = r * 0.07;\n const eyeOff = r * 0.32;\n const mouthW = r * 0.5;\n const mouthY = cy + r * 0.18;\n // Face circle, two eye holes (subpath, even-odd-filled), smiling arc.\n return `M${cx + r},${cy} A${r},${r} 0 1 0 ${cx - r},${cy} A${r},${r} 0 1 0 ${cx + r},${cy} Z M${cx - eyeOff + eyeR},${cy - eyeOff} A${eyeR},${eyeR} 0 1 1 ${cx - eyeOff - eyeR},${cy - eyeOff} A${eyeR},${eyeR} 0 1 1 ${cx - eyeOff + eyeR},${cy - eyeOff} Z M${cx + eyeOff + eyeR},${cy - eyeOff} A${eyeR},${eyeR} 0 1 1 ${cx + eyeOff - eyeR},${cy - eyeOff} A${eyeR},${eyeR} 0 1 1 ${cx + eyeOff + eyeR},${cy - eyeOff} Z M${cx - mouthW},${mouthY} Q${cx},${mouthY + r * 0.32} ${cx + mouthW},${mouthY}`;\n },\n lightningBolt: (x, y, w, h) => {\n return `M${x + w * 0.5},${y} L${x + w * 0.15},${y + h * 0.55} L${x + w * 0.45},${y + h * 0.55} L${x + w * 0.3},${y + h} L${x + w * 0.85},${y + h * 0.4} L${x + w * 0.55},${y + h * 0.4} L${x + w * 0.7},${y} Z`;\n },\n\n // -- Flowchart shapes ---------------------------------------------------\n // Lightweight approximations of the ~28 ECMA-376 flowchart presets.\n // They're laid out so the shape's bounding box matches the slide's,\n // and the geometry is what most viewers expect at a glance.\n flowChartProcess: (x, y, w, h) => `M${x},${y} L${x + w},${y} L${x + w},${y + h} L${x},${y + h} Z`,\n flowChartAlternateProcess: (x, y, w, h) => {\n const r = Math.min(w, h) * 0.18;\n return `M${x + r},${y} L${x + w - r},${y} A${r},${r} 0 0 1 ${x + w},${y + r} L${x + w},${y + h - r} A${r},${r} 0 0 1 ${x + w - r},${y + h} L${x + r},${y + h} A${r},${r} 0 0 1 ${x},${y + h - r} L${x},${y + r} A${r},${r} 0 0 1 ${x + r},${y} Z`;\n },\n flowChartDecision: (x, y, w, h) => {\n const cx = x + w / 2;\n const cy = y + h / 2;\n return `M${cx},${y} L${x + w},${cy} L${cx},${y + h} L${x},${cy} Z`;\n },\n flowChartTerminator: (x, y, w, h) => {\n const r = h / 2;\n return `M${x + r},${y} L${x + w - r},${y} A${r},${r} 0 0 1 ${x + w - r},${y + h} L${x + r},${y + h} A${r},${r} 0 0 1 ${x + r},${y} Z`;\n },\n flowChartConnector: (x, y, w, h) => {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const r = Math.min(w, h) / 2;\n return `M${cx + r},${cy} A${r},${r} 0 1 1 ${cx - r},${cy} A${r},${r} 0 1 1 ${cx + r},${cy} Z`;\n },\n flowChartDocument: (x, y, w, h) => {\n // Bottom is a wave (cubic) instead of a flat line.\n const wave = h * 0.18;\n return `M${x},${y} L${x + w},${y} L${x + w},${y + h - wave} C${x + w * 0.75},${y + h + wave * 0.5} ${x + w * 0.25},${y + h - wave * 2} ${x},${y + h - wave * 0.5} Z`;\n },\n flowChartMultidocument: (x, y, w, h) => {\n // Two stacked documents (back document offset by 6%).\n const inset = w * 0.06;\n const back = `M${x + inset},${y + inset * 0.6} L${x + w},${y + inset * 0.6} L${x + w},${y + h - inset * 0.6} L${x + w - inset},${y + h - inset * 0.6} L${x + w - inset},${y + inset * 0.6}`;\n const front = `M${x},${y + inset * 1.2} L${x + w - inset},${y + inset * 1.2} L${x + w - inset},${y + h * 0.85} C${x + (w - inset) * 0.75},${y + h + 6} ${x + (w - inset) * 0.25},${y + h * 0.75} ${x},${y + h * 0.95} Z`;\n return `${back} Z ${front}`;\n },\n flowChartPredefinedProcess: (x, y, w, h) => {\n // Process box with two vertical bars carved on each side.\n const inset = w * 0.1;\n return `M${x},${y} L${x + w},${y} L${x + w},${y + h} L${x},${y + h} Z M${x + inset},${y} L${x + inset},${y + h} M${x + w - inset},${y} L${x + w - inset},${y + h}`;\n },\n flowChartInternalStorage: (x, y, w, h) => {\n const inset = Math.min(w, h) * 0.1;\n return `M${x},${y} L${x + w},${y} L${x + w},${y + h} L${x},${y + h} Z M${x + inset},${y} L${x + inset},${y + h} M${x},${y + inset} L${x + w},${y + inset}`;\n },\n flowChartManualInput: (x, y, w, h) => {\n return `M${x},${y + h * 0.35} L${x + w},${y} L${x + w},${y + h} L${x},${y + h} Z`;\n },\n flowChartManualOperation: (x, y, w, h) => {\n return `M${x},${y} L${x + w},${y} L${x + w * 0.8},${y + h} L${x + w * 0.2},${y + h} Z`;\n },\n flowChartInputOutput: (x, y, w, h) => {\n const skew = w * 0.18;\n return `M${x + skew},${y} L${x + w},${y} L${x + w - skew},${y + h} L${x},${y + h} Z`;\n },\n flowChartPunchedTape: (x, y, w, h) => {\n const wave = h * 0.12;\n return `M${x},${y + wave} C${x + w * 0.25},${y - wave} ${x + w * 0.75},${y + wave * 2} ${x + w},${y + wave} L${x + w},${y + h - wave} C${x + w * 0.75},${y + h + wave} ${x + w * 0.25},${y + h - wave * 2} ${x},${y + h - wave} Z`;\n },\n flowChartCard: (x, y, w, h) => {\n const cut = h * 0.3;\n return `M${x + cut},${y} L${x + w},${y} L${x + w},${y + h} L${x},${y + h} L${x},${y + cut} Z`;\n },\n flowChartPunchedCard: (x, y, w, h) => {\n const cut = h * 0.2;\n return `M${x + cut},${y} L${x + w},${y} L${x + w},${y + h} L${x},${y + h} L${x},${y + cut} Z`;\n },\n flowChartOnlineStorage: (x, y, w, h) => {\n // Tape-like: ellipse-capped rectangle, left side open.\n const cap = w * 0.12;\n return `M${x + cap},${y} L${x + w},${y} L${x + w},${y + h} L${x + cap},${y + h} A${cap},${h / 2} 0 0 1 ${x + cap},${y} Z`;\n },\n flowChartMagneticDisk: (x, y, w, h) => {\n // Cylinder: rectangle with ellipses top and bottom.\n const er = h * 0.12;\n return `M${x},${y + er} A${w / 2},${er} 0 0 1 ${x + w},${y + er} L${x + w},${y + h - er} A${w / 2},${er} 0 0 1 ${x},${y + h - er} Z M${x},${y + er} A${w / 2},${er} 0 0 0 ${x + w},${y + er}`;\n },\n flowChartMagneticDrum: (x, y, w, h) => {\n // Horizontal cylinder.\n const er = w * 0.12;\n return `M${x + er},${y} L${x + w - er},${y} A${er},${h / 2} 0 0 1 ${x + w - er},${y + h} L${x + er},${y + h} A${er},${h / 2} 0 0 1 ${x + er},${y} Z M${x + w - er},${y} A${er},${h / 2} 0 0 0 ${x + w - er},${y + h}`;\n },\n flowChartMagneticTape: (x, y, w, h) => {\n // Circle with a small \"tail\" notch at the bottom-right.\n const cx = x + w / 2;\n const cy = y + h / 2;\n const r = Math.min(w, h) / 2;\n return `M${cx + r},${cy} A${r},${r} 0 1 0 ${cx - r * 0.7},${cy + r * 0.7} L${x + w},${y + h} L${cx + r},${cy} Z`;\n },\n flowChartSummingJunction: (x, y, w, h) => {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const r = Math.min(w, h) / 2;\n // Circle with an X inside (drawn as two crossing lines via subpaths).\n const off = r * Math.SQRT1_2;\n return `M${cx + r},${cy} A${r},${r} 0 1 0 ${cx - r},${cy} A${r},${r} 0 1 0 ${cx + r},${cy} Z M${cx - off},${cy - off} L${cx + off},${cy + off} M${cx - off},${cy + off} L${cx + off},${cy - off}`;\n },\n flowChartOr: (x, y, w, h) => {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const r = Math.min(w, h) / 2;\n return `M${cx + r},${cy} A${r},${r} 0 1 0 ${cx - r},${cy} A${r},${r} 0 1 0 ${cx + r},${cy} Z M${cx - r},${cy} L${cx + r},${cy} M${cx},${cy - r} L${cx},${cy + r}`;\n },\n flowChartCollate: (x, y, w, h) => {\n // Hourglass.\n return `M${x},${y} L${x + w},${y} L${x},${y + h} L${x + w},${y + h} Z`;\n },\n flowChartSort: (x, y, w, h) => {\n // Diamond with a horizontal line.\n const cx = x + w / 2;\n const cy = y + h / 2;\n return `M${cx},${y} L${x + w},${cy} L${cx},${y + h} L${x},${cy} Z M${x},${cy} L${x + w},${cy}`;\n },\n flowChartExtract: (x, y, w, h) => {\n return `M${x + w / 2},${y} L${x + w},${y + h} L${x},${y + h} Z`;\n },\n flowChartMerge: (x, y, w, h) => {\n return `M${x},${y} L${x + w},${y} L${x + w / 2},${y + h} Z`;\n },\n flowChartOfflineStorage: (x, y, w, h) => {\n // Triangle with a horizontal bar at the bottom (storage symbol).\n return `M${x + w / 2},${y} L${x + w},${y + h} L${x},${y + h} Z M${x + w * 0.25},${y + h * 0.75} L${x + w * 0.75},${y + h * 0.75}`;\n },\n flowChartDelay: (x, y, w, h) => {\n // Rectangle with the right side capped by a semicircle.\n const r = h / 2;\n return `M${x},${y} L${x + w - r},${y} A${r},${r} 0 0 1 ${x + w - r},${y + h} L${x},${y + h} Z`;\n },\n flowChartDisplay: (x, y, w, h) => {\n // Trapezoid-ish display: pointed-left, rounded-right.\n const r = h / 2;\n return `M${x + r * 0.5},${y} L${x + w - r},${y} A${r},${r} 0 0 1 ${x + w - r},${y + h} L${x + r * 0.5},${y + h} L${x},${y + h / 2} Z`;\n },\n flowChartPreparation: (x, y, w, h) => {\n // Elongated hexagon.\n const cut = w * 0.18;\n return `M${x + cut},${y} L${x + w - cut},${y} L${x + w},${y + h / 2} L${x + w - cut},${y + h} L${x + cut},${y + h} L${x},${y + h / 2} Z`;\n },\n\n // -- Block arrows -------------------------------------------------------\n notchedRightArrow: (x, y, w, h) => {\n return `M${x},${y + h * 0.3} L${x + w * 0.65},${y + h * 0.3} L${x + w * 0.65},${y} L${x + w},${y + h / 2} L${x + w * 0.65},${y + h} L${x + w * 0.65},${y + h * 0.7} L${x},${y + h * 0.7} L${x + w * 0.15},${y + h / 2} Z`;\n },\n stripedRightArrow: (x, y, w, h) => {\n // Right arrow with two parallel \"stripes\" cut at the left (rendered as\n // separate strokes via subpaths).\n const stripe = w * 0.04;\n return `M${x},${y + h * 0.3} L${x + stripe},${y + h * 0.3} L${x + stripe},${y + h * 0.7} L${x},${y + h * 0.7} Z M${x + stripe * 2.5},${y + h * 0.3} L${x + stripe * 3.5},${y + h * 0.3} L${x + stripe * 3.5},${y + h * 0.7} L${x + stripe * 2.5},${y + h * 0.7} Z M${x + stripe * 5},${y + h * 0.3} L${x + w * 0.65},${y + h * 0.3} L${x + w * 0.65},${y} L${x + w},${y + h / 2} L${x + w * 0.65},${y + h} L${x + w * 0.65},${y + h * 0.7} L${x + stripe * 5},${y + h * 0.7} Z`;\n },\n curvedRightArrow: (x, y, w, h) => {\n // Quarter-arc with a triangular tip on the right.\n return `M${x},${y + h * 0.6} Q${x + w * 0.5},${y} ${x + w * 0.85},${y + h * 0.25} L${x + w},${y + h * 0.45} L${x + w * 0.85},${y + h * 0.55} L${x + w * 0.7},${y + h * 0.35} Q${x + w * 0.45},${y + h * 0.18} ${x + w * 0.15},${y + h * 0.75} Z`;\n },\n uturnArrow: (x, y, w, h) => {\n // Half-arc + tip pointing down on the right side.\n return `M${x},${y + h} L${x},${y + h / 2} A${w * 0.4},${h * 0.4} 0 0 1 ${x + w * 0.8},${y + h / 2} L${x + w * 0.8},${y + h * 0.25} L${x + w},${y + h * 0.45} L${x + w * 0.8},${y + h * 0.65} L${x + w * 0.8},${y + h / 2} A${w * 0.2},${h * 0.25} 0 0 0 ${x + w * 0.2},${y + h / 2} L${x + w * 0.2},${y + h} Z`;\n },\n\n // -- Brackets / braces --------------------------------------------------\n // Drawn as strokes (open paths); fill is none for these by convention.\n leftBracket: (x, y, w, h) => {\n return `M${x + w},${y} L${x},${y} L${x},${y + h} L${x + w},${y + h}`;\n },\n rightBracket: (x, y, w, h) => {\n return `M${x},${y} L${x + w},${y} L${x + w},${y + h} L${x},${y + h}`;\n },\n bracketPair: (x, y, w, h) => {\n return `M${x + w * 0.1},${y} L${x},${y} L${x},${y + h} L${x + w * 0.1},${y + h} M${x + w * 0.9},${y} L${x + w},${y} L${x + w},${y + h} L${x + w * 0.9},${y + h}`;\n },\n leftBrace: (x, y, w, h) => {\n const mid = y + h / 2;\n return `M${x + w},${y} Q${x},${y} ${x},${mid - 8} Q${x},${mid} ${x - 4},${mid} Q${x},${mid} ${x},${mid + 8} Q${x},${y + h} ${x + w},${y + h}`;\n },\n rightBrace: (x, y, w, h) => {\n const mid = y + h / 2;\n return `M${x},${y} Q${x + w},${y} ${x + w},${mid - 8} Q${x + w},${mid} ${x + w + 4},${mid} Q${x + w},${mid} ${x + w},${mid + 8} Q${x + w},${y + h} ${x},${y + h}`;\n },\n bracePair: (x, y, w, h) => {\n const mid = y + h / 2;\n return `M${x + w * 0.12},${y} Q${x},${y} ${x},${mid - 8} Q${x},${mid} ${x - 4},${mid} Q${x},${mid} ${x},${mid + 8} Q${x},${y + h} ${x + w * 0.12},${y + h} M${x + w * 0.88},${y} Q${x + w},${y} ${x + w},${mid - 8} Q${x + w},${mid} ${x + w + 4},${mid} Q${x + w},${mid} ${x + w},${mid + 8} Q${x + w},${y + h} ${x + w * 0.88},${y + h}`;\n },\n\n // -- Snip / round corner rects -----------------------------------------\n snip1Rect: (x, y, w, h) => {\n const c = Math.min(w, h) * 0.18;\n return `M${x},${y} L${x + w - c},${y} L${x + w},${y + c} L${x + w},${y + h} L${x},${y + h} Z`;\n },\n snip2SameRect: (x, y, w, h) => {\n const c = Math.min(w, h) * 0.18;\n return `M${x + c},${y} L${x + w - c},${y} L${x + w},${y + c} L${x + w},${y + h} L${x},${y + h} L${x},${y + c} Z`;\n },\n snip2DiagRect: (x, y, w, h) => {\n const c = Math.min(w, h) * 0.18;\n return `M${x},${y} L${x + w - c},${y} L${x + w},${y + c} L${x + w},${y + h} L${x + c},${y + h} L${x},${y + h - c} Z`;\n },\n snipRoundRect: (x, y, w, h) => {\n const c = Math.min(w, h) * 0.18;\n return `M${x + c},${y} A${c},${c} 0 0 0 ${x},${y + c} L${x},${y + h} L${x + w},${y + h} L${x + w},${y + c} L${x + w - c},${y} Z`;\n },\n round1Rect: (x, y, w, h) => {\n const r = Math.min(w, h) * 0.18;\n return `M${x},${y} L${x + w - r},${y} A${r},${r} 0 0 1 ${x + w},${y + r} L${x + w},${y + h} L${x},${y + h} Z`;\n },\n round2SameRect: (x, y, w, h) => {\n const r = Math.min(w, h) * 0.18;\n return `M${x + r},${y} L${x + w - r},${y} A${r},${r} 0 0 1 ${x + w},${y + r} L${x + w},${y + h} L${x},${y + h} L${x},${y + r} A${r},${r} 0 0 1 ${x + r},${y} Z`;\n },\n round2DiagRect: (x, y, w, h) => {\n const r = Math.min(w, h) * 0.18;\n return `M${x},${y} L${x + w - r},${y} A${r},${r} 0 0 1 ${x + w},${y + r} L${x + w},${y + h} L${x + r},${y + h} A${r},${r} 0 0 1 ${x},${y + h - r} Z`;\n },\n\n // -- Banners & ribbons --------------------------------------------------\n ribbon: (x, y, w, h) => {\n // Centre ribbon with two notched tails at the bottom corners.\n const notch = w * 0.06;\n const bodyTop = y + h * 0.2;\n const bodyBot = y + h * 0.8;\n return `M${x},${bodyTop} L${x + notch * 2},${y} L${x + w - notch * 2},${y} L${x + w},${bodyTop} L${x + w * 0.85},${bodyTop + (bodyBot - bodyTop) / 2} L${x + w},${bodyBot} L${x + w - notch * 2},${y + h} L${x + w - notch * 4},${bodyBot} L${x + notch * 4},${bodyBot} L${x + notch * 2},${y + h} L${x},${bodyBot} L${x + w * 0.15},${bodyTop + (bodyBot - bodyTop) / 2} Z`;\n },\n ribbon2: (x, y, w, h) => {\n // Like ribbon but the band is at the bottom.\n const notch = w * 0.06;\n const bodyTop = y + h * 0.2;\n const bodyBot = y + h * 0.8;\n return `M${x},${bodyBot} L${x + notch * 2},${y + h} L${x + w - notch * 2},${y + h} L${x + w},${bodyBot} L${x + w * 0.85},${bodyTop + (bodyBot - bodyTop) / 2} L${x + w},${bodyTop} L${x + w - notch * 2},${y} L${x + w - notch * 4},${bodyTop} L${x + notch * 4},${bodyTop} L${x + notch * 2},${y} L${x},${bodyTop} L${x + w * 0.15},${bodyTop + (bodyBot - bodyTop) / 2} Z`;\n },\n verticalScroll: (x, y, w, h) => {\n const r = w * 0.08;\n return `M${x + r},${y + r} A${r},${r} 0 0 1 ${x + r * 2},${y} L${x + w},${y} L${x + w},${y + h - r} A${r},${r} 0 0 1 ${x + w - r * 2},${y + h} L${x},${y + h} L${x},${y + r} A${r},${r} 0 0 1 ${x + r},${y + r} Z`;\n },\n horizontalScroll: (x, y, w, h) => {\n const r = h * 0.08;\n return `M${x + r},${y + r} A${r},${r} 0 0 1 ${x},${y + r * 2} L${x},${y + h} L${x + w - r},${y + h} A${r},${r} 0 0 1 ${x + w},${y + h - r * 2} L${x + w},${y} L${x + r},${y} A${r},${r} 0 0 1 ${x + r},${y + r} Z`;\n },\n wave: (x, y, w, h) => {\n return `M${x},${y + h * 0.5} C${x + w * 0.25},${y - h * 0.1} ${x + w * 0.5},${y + h * 0.85} ${x + w * 0.75},${y + h * 0.3} C${x + w * 0.85},${y + h * 0.05} ${x + w * 0.95},${y + h * 0.4} ${x + w},${y + h * 0.5} L${x + w},${y + h} C${x + w * 0.75},${y + h * 0.4} ${x + w * 0.5},${y + h * 1.1} ${x + w * 0.25},${y + h * 0.55} C${x + w * 0.15},${y + h * 0.3} ${x + w * 0.05},${y + h * 0.6} ${x},${y + h * 0.55} Z`;\n },\n doubleWave: (x, y, w, h) => {\n return `M${x},${y + h * 0.4} C${x + w * 0.15},${y - h * 0.05} ${x + w * 0.35},${y + h * 0.65} ${x + w * 0.5},${y + h * 0.3} C${x + w * 0.65},${y - h * 0.05} ${x + w * 0.85},${y + h * 0.65} ${x + w},${y + h * 0.4} L${x + w},${y + h} C${x + w * 0.85},${y + h * 0.4} ${x + w * 0.65},${y + h * 1.05} ${x + w * 0.5},${y + h * 0.7} C${x + w * 0.35},${y + h * 1.05} ${x + w * 0.15},${y + h * 0.4} ${x},${y + h} Z`;\n },\n\n // -- Math operators -----------------------------------------------------\n mathPlus: (x, y, w, h) => {\n const t = Math.min(w, h) * 0.2;\n const cx = x + w / 2;\n const cy = y + h / 2;\n return `M${cx - t / 2},${y} L${cx + t / 2},${y} L${cx + t / 2},${cy - t / 2} L${x + w},${cy - t / 2} L${x + w},${cy + t / 2} L${cx + t / 2},${cy + t / 2} L${cx + t / 2},${y + h} L${cx - t / 2},${y + h} L${cx - t / 2},${cy + t / 2} L${x},${cy + t / 2} L${x},${cy - t / 2} L${cx - t / 2},${cy - t / 2} Z`;\n },\n mathMinus: (x, y, w, h) => {\n const t = h * 0.3;\n const cy = y + h / 2;\n return `M${x},${cy - t / 2} L${x + w},${cy - t / 2} L${x + w},${cy + t / 2} L${x},${cy + t / 2} Z`;\n },\n mathMultiply: (x, y, w, h) => {\n const t = Math.min(w, h) * 0.16;\n const cx = x + w / 2;\n const cy = y + h / 2;\n // Two crossed rects (diagonals).\n return `M${x},${y + t} L${x + t},${y} L${cx},${cy - t} L${x + w - t},${y} L${x + w},${y + t} L${cx + t},${cy} L${x + w},${y + h - t} L${x + w - t},${y + h} L${cx},${cy + t} L${x + t},${y + h} L${x},${y + h - t} L${cx - t},${cy} Z`;\n },\n mathDivide: (x, y, w, h) => {\n const dot = Math.min(w, h) * 0.1;\n const cx = x + w / 2;\n const cy = y + h / 2;\n return `M${x},${cy - dot * 0.4} L${x + w},${cy - dot * 0.4} L${x + w},${cy + dot * 0.4} L${x},${cy + dot * 0.4} Z M${cx - dot},${y + h * 0.18} A${dot},${dot} 0 1 0 ${cx + dot},${y + h * 0.18} A${dot},${dot} 0 1 0 ${cx - dot},${y + h * 0.18} Z M${cx - dot},${y + h * 0.82} A${dot},${dot} 0 1 0 ${cx + dot},${y + h * 0.82} A${dot},${dot} 0 1 0 ${cx - dot},${y + h * 0.82} Z`;\n },\n mathEqual: (x, y, w, h) => {\n const t = h * 0.2;\n return `M${x},${y + h * 0.3 - t / 2} L${x + w},${y + h * 0.3 - t / 2} L${x + w},${y + h * 0.3 + t / 2} L${x},${y + h * 0.3 + t / 2} Z M${x},${y + h * 0.7 - t / 2} L${x + w},${y + h * 0.7 - t / 2} L${x + w},${y + h * 0.7 + t / 2} L${x},${y + h * 0.7 + t / 2} Z`;\n },\n mathNotEqual: (x, y, w, h) => {\n const t = h * 0.15;\n const cy = y + h / 2;\n // Equal sign + diagonal bar (use path subpaths).\n return `M${x},${cy - h * 0.18 - t / 2} L${x + w},${cy - h * 0.18 - t / 2} L${x + w},${cy - h * 0.18 + t / 2} L${x},${cy - h * 0.18 + t / 2} Z M${x},${cy + h * 0.18 - t / 2} L${x + w},${cy + h * 0.18 - t / 2} L${x + w},${cy + h * 0.18 + t / 2} L${x},${cy + h * 0.18 + t / 2} Z M${x + w * 0.7},${y} L${x + w * 0.85},${y} L${x + w * 0.3},${y + h} L${x + w * 0.15},${y + h} Z`;\n },\n\n // -- Action button glyphs (the chrome is a roundRect; we just add the\n // glyph). Real action buttons are nested shapes; we approximate.\n actionButtonBlank: (x, y, w, h) => {\n const r = Math.min(w, h) * 0.06;\n return `M${x + r},${y} L${x + w - r},${y} A${r},${r} 0 0 1 ${x + w},${y + r} L${x + w},${y + h - r} A${r},${r} 0 0 1 ${x + w - r},${y + h} L${x + r},${y + h} A${r},${r} 0 0 1 ${x},${y + h - r} L${x},${y + r} A${r},${r} 0 0 1 ${x + r},${y} Z`;\n },\n\n // -- Explosion / starburst callouts (the \"jagged\" speech marks). ------\n // `irregularSeal1` and `irregularSeal2` are PowerPoint's two\n // explosion-style callouts. The geometry is a deterministic pseudo-\n // random pattern of long + short rays; we mimic that without trying\n // to match the spec point-for-point.\n irregularSeal1: (x, y, w, h) => {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const rx = w / 2;\n const ry = h / 2;\n // 16 rays — outer radii drawn from a fixed offset table so the\n // shape comes out spiky-but-balanced like PowerPoint's.\n const offsets = [\n 1.0, 0.45, 0.95, 0.5, 1.0, 0.4, 0.9, 0.55, 1.0, 0.45, 0.95, 0.5, 1.0, 0.4, 0.9, 0.55,\n ];\n const points: string[] = [];\n for (let i = 0; i < offsets.length; i++) {\n const a = (i / offsets.length) * 2 * Math.PI - Math.PI / 2;\n const offset = offsets[i] ?? 1;\n const r = offset;\n const px0 = cx + rx * r * Math.cos(a);\n const py0 = cy + ry * r * Math.sin(a);\n points.push(`${i === 0 ? 'M' : 'L'}${px0},${py0}`);\n }\n points.push('Z');\n return points.join(' ');\n },\n irregularSeal2: (x, y, w, h) => {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const rx = w / 2;\n const ry = h / 2;\n // 24 alternating rays for a denser, more \"scribble\"-like burst.\n const offsets = [\n 1.0, 0.4, 0.95, 0.5, 0.9, 0.35, 0.85, 0.45, 1.0, 0.4, 0.95, 0.5, 0.9, 0.35, 0.85, 0.45, 1.0,\n 0.4, 0.95, 0.5, 0.9, 0.35, 0.85, 0.45,\n ];\n const points: string[] = [];\n for (let i = 0; i < offsets.length; i++) {\n const a = (i / offsets.length) * 2 * Math.PI - Math.PI / 2;\n const offset = offsets[i] ?? 1;\n const r = offset;\n const px0 = cx + rx * r * Math.cos(a);\n const py0 = cy + ry * r * Math.sin(a);\n points.push(`${i === 0 ? 'M' : 'L'}${px0},${py0}`);\n }\n points.push('Z');\n return points.join(' ');\n },\n // `cloudCallout` lives above; \"cloud\" without callout is just the\n // body without the tail dots.\n cloud: (x, y, w, h) => {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const rx = (w / 2) * 0.92;\n const ry = (h / 2) * 0.85;\n const lobes = 10;\n const path: string[] = [];\n for (let i = 0; i < lobes; i++) {\n const a = (i / lobes) * 2 * Math.PI - Math.PI / 2;\n const lobeRx = rx * 0.32;\n const lobeRy = ry * 0.32;\n const px0 = cx + rx * Math.cos(a);\n const py0 = cy + ry * Math.sin(a);\n if (i === 0) path.push(`M${px0 - lobeRx},${py0}`);\n path.push(`A${lobeRx},${lobeRy} 0 1 1 ${px0 + lobeRx},${py0}`);\n const nextA = ((i + 1) / lobes) * 2 * Math.PI - Math.PI / 2;\n const nextX = cx + rx * Math.cos(nextA) - lobeRx;\n const nextY = cy + ry * Math.sin(nextA);\n path.push(`L${nextX},${nextY}`);\n }\n path.push('Z');\n return path.join(' ');\n },\n\n // -- Pies / chord / teardrop / arc / blockArc / moon ------------------\n pie: (x, y, w, h) => {\n // 270° pie (default), missing the top-right quadrant.\n const cx = x + w / 2;\n const cy = y + h / 2;\n const r = Math.min(w, h) / 2;\n return `M${cx},${cy} L${cx + r},${cy} A${r},${r} 0 1 1 ${cx},${cy - r} Z`;\n },\n chord: (x, y, w, h) => {\n // Ellipse minus a triangular chord (default cut along the top).\n const cx = x + w / 2;\n const cy = y + h / 2;\n const rx = w / 2;\n const ry = h / 2;\n return `M${cx + rx},${cy} A${rx},${ry} 0 1 1 ${cx - rx},${cy} L${cx + rx},${cy} Z`;\n },\n teardrop: (x, y, w, h) => {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const rx = w / 2;\n const ry = h / 2;\n // Three-quarter circle + a pointed tip at the top-right corner.\n return `M${cx},${y} L${x + w},${y} L${x + w},${cy} A${rx},${ry} 0 1 1 ${cx - rx},${cy} A${rx},${ry} 0 0 1 ${cx},${y} Z`;\n },\n arc: (x, y, w, h) => {\n // Open arc (stroke only). Drawn as a half-pie outline.\n const cx = x + w / 2;\n const cy = y + h / 2;\n const rx = w / 2;\n const ry = h / 2;\n return `M${cx + rx},${cy} A${rx},${ry} 0 1 1 ${cx},${cy + ry}`;\n },\n blockArc: (x, y, w, h) => {\n // 270° annulus.\n const cx = x + w / 2;\n const cy = y + h / 2;\n const outerR = Math.min(w, h) / 2;\n const innerR = outerR * 0.6;\n return `M${cx + outerR},${cy} A${outerR},${outerR} 0 1 1 ${cx},${cy - outerR} L${cx},${cy - innerR} A${innerR},${innerR} 0 1 0 ${cx + innerR},${cy} Z`;\n },\n moon: (x, y, w, h) => {\n // Crescent: big ellipse minus a smaller offset ellipse.\n const cx = x + w / 2;\n const cy = y + h / 2;\n const rx = w / 2;\n const ry = h / 2;\n const innerRx = rx * 0.78;\n const offsetX = rx * 0.32;\n return `M${cx + rx},${cy} A${rx},${ry} 0 1 1 ${cx - rx},${cy} A${rx},${ry} 0 1 1 ${cx + rx},${cy} M${cx - rx + offsetX + innerRx},${cy} A${innerRx},${ry * 0.95} 0 1 1 ${cx - rx + offsetX - innerRx},${cy} A${innerRx},${ry * 0.95} 0 1 1 ${cx - rx + offsetX + innerRx},${cy}`;\n },\n\n // -- Plates / plaques / frames / corners ------------------------------\n plus: (x, y, w, h) => {\n const t = Math.min(w, h) * 0.3;\n const cx = x + w / 2;\n const cy = y + h / 2;\n return `M${cx - t / 2},${y} L${cx + t / 2},${y} L${cx + t / 2},${cy - t / 2} L${x + w},${cy - t / 2} L${x + w},${cy + t / 2} L${cx + t / 2},${cy + t / 2} L${cx + t / 2},${y + h} L${cx - t / 2},${y + h} L${cx - t / 2},${cy + t / 2} L${x},${cy + t / 2} L${x},${cy - t / 2} L${cx - t / 2},${cy - t / 2} Z`;\n },\n plaque: (x, y, w, h) => {\n const r = Math.min(w, h) * 0.18;\n // Rounded corners that arc INWARD.\n return `M${x + r},${y} L${x + w - r},${y} A${r},${r} 0 0 0 ${x + w},${y + r} L${x + w},${y + h - r} A${r},${r} 0 0 0 ${x + w - r},${y + h} L${x + r},${y + h} A${r},${r} 0 0 0 ${x},${y + h - r} L${x},${y + r} A${r},${r} 0 0 0 ${x + r},${y} Z`;\n },\n can: (x, y, w, h) => {\n // Cylinder rendered upright; same path as flowChartMagneticDisk.\n const er = h * 0.12;\n return `M${x},${y + er} A${w / 2},${er} 0 0 1 ${x + w},${y + er} L${x + w},${y + h - er} A${w / 2},${er} 0 0 1 ${x},${y + h - er} Z M${x},${y + er} A${w / 2},${er} 0 0 0 ${x + w},${y + er}`;\n },\n cube: (x, y, w, h) => {\n const d = Math.min(w, h) * 0.2;\n return `M${x},${y + d} L${x + d},${y} L${x + w},${y} L${x + w},${y + h - d} L${x + w - d},${y + h} L${x},${y + h} Z M${x},${y + d} L${x + w - d},${y + d} L${x + w},${y} M${x + w - d},${y + d} L${x + w - d},${y + h}`;\n },\n bevel: (x, y, w, h) => {\n const d = Math.min(w, h) * 0.12;\n return `M${x},${y} L${x + w},${y} L${x + w},${y + h} L${x},${y + h} Z M${x + d},${y + d} L${x + w - d},${y + d} L${x + w - d},${y + h - d} L${x + d},${y + h - d} Z M${x},${y} L${x + d},${y + d} M${x + w},${y} L${x + w - d},${y + d} M${x},${y + h} L${x + d},${y + h - d} M${x + w},${y + h} L${x + w - d},${y + h - d}`;\n },\n donut: (x, y, w, h) => {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const r = Math.min(w, h) / 2;\n const innerR = r * 0.65;\n return `M${cx + r},${cy} A${r},${r} 0 1 0 ${cx - r},${cy} A${r},${r} 0 1 0 ${cx + r},${cy} Z M${cx + innerR},${cy} A${innerR},${innerR} 0 1 1 ${cx - innerR},${cy} A${innerR},${innerR} 0 1 1 ${cx + innerR},${cy} Z`;\n },\n noSmoking: (x, y, w, h) => {\n // Donut + diagonal bar.\n const cx = x + w / 2;\n const cy = y + h / 2;\n const r = Math.min(w, h) / 2;\n const innerR = r * 0.78;\n const t = r * 0.12;\n return `M${cx + r},${cy} A${r},${r} 0 1 0 ${cx - r},${cy} A${r},${r} 0 1 0 ${cx + r},${cy} Z M${cx + innerR},${cy} A${innerR},${innerR} 0 1 1 ${cx - innerR},${cy} A${innerR},${innerR} 0 1 1 ${cx + innerR},${cy} Z M${cx - r * 0.71 - t},${cy - r * 0.71 + t} L${cx - r * 0.71 + t},${cy - r * 0.71 - t} L${cx + r * 0.71 + t},${cy + r * 0.71 - t} L${cx + r * 0.71 - t},${cy + r * 0.71 + t} Z`;\n },\n frame: (x, y, w, h) => {\n // Picture-frame: outer rect minus inner rect.\n const f = Math.min(w, h) * 0.1;\n return `M${x},${y} L${x + w},${y} L${x + w},${y + h} L${x},${y + h} Z M${x + f},${y + f} L${x + f},${y + h - f} L${x + w - f},${y + h - f} L${x + w - f},${y + f} Z`;\n },\n halfFrame: (x, y, w, h) => {\n const f = Math.min(w, h) * 0.15;\n return `M${x},${y} L${x + w},${y} L${x + w - f},${y + f} L${x + f},${y + f} L${x + f},${y + h - f} L${x},${y + h} Z`;\n },\n corner: (x, y, w, h) => {\n // L-shaped corner piece.\n const tx = w * 0.4;\n const ty = h * 0.4;\n return `M${x},${y} L${x + tx},${y} L${x + tx},${y + h - ty} L${x + w},${y + h - ty} L${x + w},${y + h} L${x},${y + h} Z`;\n },\n diagStripe: (x, y, w, h) => {\n // Diagonal stripe filling the upper-left half of the bounding box.\n return `M${x},${y} L${x + w * 0.6},${y} L${x},${y + h * 0.6} Z`;\n },\n\n // -- Ellipse ribbons ---------------------------------------------------\n ellipseRibbon: (x, y, w, h) => {\n // Curved banner — top arc with two notched tails like `ribbon`.\n const notch = w * 0.08;\n const bodyTop = y + h * 0.2;\n const bodyBot = y + h * 0.85;\n const arcDip = h * 0.15;\n return `M${x},${bodyTop} C${x + w * 0.3},${bodyTop - arcDip} ${x + w * 0.7},${bodyTop - arcDip} ${x + w},${bodyTop} L${x + w * 0.85},${bodyTop + (bodyBot - bodyTop) / 2} L${x + w},${bodyBot} L${x + w - notch * 2},${y + h} L${x + w - notch * 4},${bodyBot} C${x + w * 0.7},${bodyBot + arcDip * 0.4} ${x + w * 0.3},${bodyBot + arcDip * 0.4} L${x + notch * 4},${bodyBot} L${x + notch * 2},${y + h} L${x},${bodyBot} L${x + w * 0.15},${bodyTop + (bodyBot - bodyTop) / 2} Z`;\n },\n ellipseRibbon2: (x, y, w, h) => {\n // Inverted version of ellipseRibbon (band at top, arc at bottom).\n const notch = w * 0.08;\n const bodyTop = y + h * 0.15;\n const bodyBot = y + h * 0.8;\n const arcRise = h * 0.15;\n return `M${x},${bodyBot} C${x + w * 0.3},${bodyBot + arcRise} ${x + w * 0.7},${bodyBot + arcRise} ${x + w},${bodyBot} L${x + w * 0.85},${bodyTop + (bodyBot - bodyTop) / 2} L${x + w},${bodyTop} L${x + w - notch * 2},${y} L${x + w - notch * 4},${bodyTop} C${x + w * 0.7},${bodyTop - arcRise * 0.4} ${x + w * 0.3},${bodyTop - arcRise * 0.4} L${x + notch * 4},${bodyTop} L${x + notch * 2},${y} L${x},${bodyTop} L${x + w * 0.15},${bodyTop + (bodyBot - bodyTop) / 2} Z`;\n },\n\n // -- Block arrows: the rest of the cardinal & curved family -----------\n quadArrow: (x, y, w, h) => {\n // Plus-sign of four arrows pointing outward.\n const cx = x + w / 2;\n const cy = y + h / 2;\n const tip = 0.2; // tip depth fraction\n const stem = 0.15; // stem width fraction\n const headW = 0.35; // head half-width fraction\n return `M${cx},${y} L${cx + headW * w},${y + tip * h} L${cx + stem * w},${y + tip * h} L${cx + stem * w},${cy - stem * h} L${x + w - tip * w},${cy - stem * h} L${x + w - tip * w},${cy - headW * h} L${x + w},${cy} L${x + w - tip * w},${cy + headW * h} L${x + w - tip * w},${cy + stem * h} L${cx + stem * w},${cy + stem * h} L${cx + stem * w},${y + h - tip * h} L${cx + headW * w},${y + h - tip * h} L${cx},${y + h} L${cx - headW * w},${y + h - tip * h} L${cx - stem * w},${y + h - tip * h} L${cx - stem * w},${cy + stem * h} L${x + tip * w},${cy + stem * h} L${x + tip * w},${cy + headW * h} L${x},${cy} L${x + tip * w},${cy - headW * h} L${x + tip * w},${cy - stem * h} L${cx - stem * w},${cy - stem * h} L${cx - stem * w},${y + tip * h} L${cx - headW * w},${y + tip * h} Z`;\n },\n leftRightUpArrow: (x, y, w, h) => {\n const cx = x + w / 2;\n const tip = 0.2;\n const stem = 0.15;\n const headW = 0.35;\n return `M${cx},${y} L${cx + headW * w},${y + tip * h} L${cx + stem * w},${y + tip * h} L${cx + stem * w},${y + h - tip * h} L${x + w - tip * w},${y + h - tip * h} L${x + w - tip * w},${y + h - headW * h} L${x + w},${y + h} L${x + w - tip * w},${y + h + headW * h} L${x + w - tip * w},${y + h - tip * h} L${cx - stem * w},${y + h - tip * h} L${cx - stem * w},${y + tip * h} L${cx - headW * w},${y + tip * h} Z`;\n },\n bentUpArrow: (x, y, w, h) => {\n const stem = 0.3;\n const tip = 0.25;\n return `M${x},${y + h * 0.55} L${x + w * 0.5},${y + h * 0.55} L${x + w * 0.5},${y + tip * h} L${x + w * (0.5 - stem * 0.5)},${y + tip * h} L${x + w * 0.75},${y} L${x + w},${y + tip * h} L${x + w * (0.5 + stem * 0.5)},${y + tip * h} L${x + w * (0.5 + stem * 0.5)},${y + h * 0.55 + h * 0.4} L${x},${y + h * 0.55 + h * 0.4} Z`;\n },\n curvedLeftArrow: (x, y, w, h) => {\n return `M${x + w},${y + h * 0.6} Q${x + w * 0.5},${y} ${x + w * 0.15},${y + h * 0.25} L${x},${y + h * 0.45} L${x + w * 0.15},${y + h * 0.55} L${x + w * 0.3},${y + h * 0.35} Q${x + w * 0.55},${y + h * 0.18} ${x + w * 0.85},${y + h * 0.75} Z`;\n },\n curvedUpArrow: (x, y, w, h) => {\n return `M${x + w * 0.4},${y + h} Q${x},${y + h * 0.5} ${x + w * 0.25},${y + h * 0.15} L${x + w * 0.45},${y} L${x + w * 0.55},${y + h * 0.15} L${x + w * 0.35},${y + h * 0.3} Q${x + w * 0.18},${y + h * 0.55} ${x + w * 0.75},${y + h * 0.85} Z`;\n },\n curvedDownArrow: (x, y, w, h) => {\n return `M${x + w * 0.4},${y} Q${x},${y + h * 0.5} ${x + w * 0.25},${y + h * 0.85} L${x + w * 0.45},${y + h} L${x + w * 0.55},${y + h * 0.85} L${x + w * 0.35},${y + h * 0.7} Q${x + w * 0.18},${y + h * 0.45} ${x + w * 0.75},${y + h * 0.15} Z`;\n },\n swooshArrow: (x, y, w, h) => {\n // Stylised curved arrow with a small tail to the upper-left.\n return `M${x},${y + h * 0.75} C${x + w * 0.35},${y + h} ${x + w * 0.65},${y + h * 0.3} ${x + w * 0.75},${y + h * 0.2} L${x + w * 0.65},${y + h * 0.05} L${x + w},${y + h * 0.18} L${x + w * 0.78},${y + h * 0.45} L${x + w * 0.7},${y + h * 0.3} C${x + w * 0.55},${y + h * 0.6} ${x + w * 0.35},${y + h * 0.9} ${x},${y + h * 0.85} Z`;\n },\n circularArrow: (x, y, w, h) => {\n // 270° annulus + small arrow tip at the open end.\n const cx = x + w / 2;\n const cy = y + h / 2;\n const outerR = Math.min(w, h) / 2;\n const innerR = outerR * 0.62;\n const midR = (outerR + innerR) / 2;\n // Arc goes from 12 o'clock (top) clockwise to 9 o'clock (left), with\n // a triangular tip pointing further clockwise from there.\n return `M${cx},${cy - outerR} A${outerR},${outerR} 0 1 1 ${cx - outerR},${cy} L${cx - midR - midR * 0.25},${cy + outerR * 0.15} L${cx - midR + midR * 0.25},${cy + outerR * 0.3} L${cx - innerR},${cy} A${innerR},${innerR} 0 1 0 ${cx},${cy - innerR} Z`;\n },\n leftCircularArrow: (x, y, w, h) => {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const outerR = Math.min(w, h) / 2;\n const innerR = outerR * 0.62;\n return `M${cx},${cy - outerR} A${outerR},${outerR} 0 1 0 ${cx + outerR},${cy} L${cx + (outerR + innerR) / 2 + ((outerR + innerR) / 2) * 0.25},${cy + outerR * 0.15} L${cx + (outerR + innerR) / 2 - ((outerR + innerR) / 2) * 0.25},${cy + outerR * 0.3} L${cx + innerR},${cy} A${innerR},${innerR} 0 1 1 ${cx},${cy - innerR} Z`;\n },\n leftRightCircularArrow: (x, y, w, h) => {\n // Two-headed circular arrow (left + right tips on a 270° annulus).\n const cx = x + w / 2;\n const cy = y + h / 2;\n const outerR = Math.min(w, h) / 2;\n const innerR = outerR * 0.62;\n return `M${cx - outerR * 0.15},${cy - outerR * 1.05} L${cx + outerR * 0.15},${cy - outerR * 1.05} L${cx + outerR * 0.1},${cy - outerR * 0.85} A${outerR},${outerR} 0 1 1 ${cx - outerR * 0.1},${cy - outerR * 0.85} Z M${cx},${cy - innerR} A${innerR},${innerR} 0 1 0 ${cx},${cy + innerR}`;\n },\n\n // -- Arrow callouts (block arrow body + flat rect for text) -----------\n rightArrowCallout: (x, y, w, h) => {\n const headW = w * 0.25;\n return `M${x},${y + h * 0.3} L${x + w - headW},${y + h * 0.3} L${x + w - headW},${y} L${x + w},${y + h / 2} L${x + w - headW},${y + h} L${x + w - headW},${y + h * 0.7} L${x},${y + h * 0.7} Z`;\n },\n leftArrowCallout: (x, y, w, h) => {\n const headW = w * 0.25;\n return `M${x + headW},${y + h * 0.3} L${x + w},${y + h * 0.3} L${x + w},${y + h * 0.7} L${x + headW},${y + h * 0.7} L${x + headW},${y + h} L${x},${y + h / 2} L${x + headW},${y} Z`;\n },\n upArrowCallout: (x, y, w, h) => {\n const headH = h * 0.25;\n return `M${x + w * 0.3},${y + headH} L${x + w * 0.3},${y + h} L${x + w * 0.7},${y + h} L${x + w * 0.7},${y + headH} L${x + w},${y + headH} L${x + w / 2},${y} L${x},${y + headH} Z`;\n },\n downArrowCallout: (x, y, w, h) => {\n const headH = h * 0.25;\n return `M${x + w * 0.3},${y} L${x + w * 0.7},${y} L${x + w * 0.7},${y + h - headH} L${x + w},${y + h - headH} L${x + w / 2},${y + h} L${x},${y + h - headH} L${x + w * 0.3},${y + h - headH} Z`;\n },\n leftRightArrowCallout: (x, y, w, h) => {\n const headW = w * 0.2;\n return `M${x},${y + h / 2} L${x + headW},${y} L${x + headW},${y + h * 0.3} L${x + w - headW},${y + h * 0.3} L${x + w - headW},${y} L${x + w},${y + h / 2} L${x + w - headW},${y + h} L${x + w - headW},${y + h * 0.7} L${x + headW},${y + h * 0.7} L${x + headW},${y + h} Z`;\n },\n upDownArrowCallout: (x, y, w, h) => {\n const headH = h * 0.2;\n return `M${x + w / 2},${y} L${x},${y + headH} L${x + w * 0.3},${y + headH} L${x + w * 0.3},${y + h - headH} L${x},${y + h - headH} L${x + w / 2},${y + h} L${x + w},${y + h - headH} L${x + w * 0.7},${y + h - headH} L${x + w * 0.7},${y + headH} L${x + w},${y + headH} Z`;\n },\n quadArrowCallout: (x, y, w, h) => {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const tip = 0.16;\n const stem = 0.18;\n const headW = 0.32;\n const txt = 0.28; // text-area half-width fraction\n return `M${cx - txt * w},${cy - txt * h} L${cx - txt * w},${cy - stem * h} L${cx - stem * w},${cy - stem * h} L${cx - stem * w},${y + tip * h} L${cx - headW * w},${y + tip * h} L${cx},${y} L${cx + headW * w},${y + tip * h} L${cx + stem * w},${y + tip * h} L${cx + stem * w},${cy - stem * h} L${cx + txt * w},${cy - stem * h} L${cx + txt * w},${cy - txt * h} L${x + w - tip * w},${cy - txt * h} L${x + w - tip * w},${cy - headW * h} L${x + w},${cy} L${x + w - tip * w},${cy + headW * h} L${x + w - tip * w},${cy + txt * h} L${cx + txt * w},${cy + txt * h} L${cx + txt * w},${cy + stem * h} L${cx + stem * w},${cy + stem * h} L${cx + stem * w},${y + h - tip * h} L${cx + headW * w},${y + h - tip * h} L${cx},${y + h} L${cx - headW * w},${y + h - tip * h} L${cx - stem * w},${y + h - tip * h} L${cx - stem * w},${cy + stem * h} L${cx - txt * w},${cy + stem * h} L${cx - txt * w},${cy + txt * h} L${x + tip * w},${cy + txt * h} L${x + tip * w},${cy + headW * h} L${x},${cy} L${x + tip * w},${cy - headW * h} L${x + tip * w},${cy - txt * h} Z`;\n },\n\n // -- Action button chrome (rounded rect) + glyph silhouettes ----------\n // Each button is rounded-rect chrome + a glyph drawn as a subpath\n // using the same path's `evenodd` fill rule so the glyph \"punches\"\n // out of the chrome.\n actionButtonHome: (x, y, w, h) => {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const s = Math.min(w, h) * 0.3;\n return `${PRESET_PATHS.actionButtonBlank?.(x, y, w, h) ?? ''} M${cx - s},${cy + s * 0.6} L${cx - s},${cy - s * 0.1} L${cx},${cy - s * 0.7} L${cx + s},${cy - s * 0.1} L${cx + s},${cy + s * 0.6} L${cx + s * 0.3},${cy + s * 0.6} L${cx + s * 0.3},${cy + s * 0.1} L${cx - s * 0.3},${cy + s * 0.1} L${cx - s * 0.3},${cy + s * 0.6} Z`;\n },\n actionButtonForwardNext: (x, y, w, h) => {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const s = Math.min(w, h) * 0.3;\n return `${PRESET_PATHS.actionButtonBlank?.(x, y, w, h) ?? ''} M${cx - s * 0.7},${cy - s} L${cx + s * 0.7},${cy} L${cx - s * 0.7},${cy + s} Z`;\n },\n actionButtonBackPrevious: (x, y, w, h) => {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const s = Math.min(w, h) * 0.3;\n return `${PRESET_PATHS.actionButtonBlank?.(x, y, w, h) ?? ''} M${cx + s * 0.7},${cy - s} L${cx - s * 0.7},${cy} L${cx + s * 0.7},${cy + s} Z`;\n },\n actionButtonEnd: (x, y, w, h) => {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const s = Math.min(w, h) * 0.3;\n return `${PRESET_PATHS.actionButtonBlank?.(x, y, w, h) ?? ''} M${cx - s},${cy - s} L${cx + s * 0.4},${cy} L${cx - s},${cy + s} Z M${cx + s * 0.5},${cy - s} L${cx + s},${cy - s} L${cx + s},${cy + s} L${cx + s * 0.5},${cy + s} Z`;\n },\n actionButtonBeginning: (x, y, w, h) => {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const s = Math.min(w, h) * 0.3;\n return `${PRESET_PATHS.actionButtonBlank?.(x, y, w, h) ?? ''} M${cx + s},${cy - s} L${cx - s * 0.4},${cy} L${cx + s},${cy + s} Z M${cx - s * 0.5},${cy - s} L${cx - s},${cy - s} L${cx - s},${cy + s} L${cx - s * 0.5},${cy + s} Z`;\n },\n actionButtonReturn: (x, y, w, h) => {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const s = Math.min(w, h) * 0.28;\n return `${PRESET_PATHS.actionButtonBlank?.(x, y, w, h) ?? ''} M${cx + s},${cy - s} L${cx + s * 0.4},${cy - s} L${cx + s * 0.4},${cy + s * 0.2} L${cx - s * 0.2},${cy + s * 0.2} L${cx - s * 0.2},${cy - s * 0.2} L${cx - s},${cy + s * 0.2} L${cx - s * 0.2},${cy + s} L${cx - s * 0.2},${cy + s * 0.5} L${cx + s},${cy + s * 0.5} Z`;\n },\n actionButtonHelp: (x, y, w, h) => {\n // Approximated \"?\" as a curved path; readable at typical button sizes.\n const cx = x + w / 2;\n const cy = y + h / 2;\n const s = Math.min(w, h) * 0.3;\n return `${PRESET_PATHS.actionButtonBlank?.(x, y, w, h) ?? ''} M${cx - s * 0.4},${cy - s * 0.4} Q${cx - s * 0.4},${cy - s} ${cx},${cy - s} Q${cx + s * 0.4},${cy - s} ${cx + s * 0.4},${cy - s * 0.4} Q${cx + s * 0.4},${cy} ${cx},${cy} L${cx},${cy + s * 0.4} M${cx - s * 0.18},${cy + s * 0.8} L${cx + s * 0.18},${cy + s * 0.8} L${cx + s * 0.18},${cy + s} L${cx - s * 0.18},${cy + s} Z`;\n },\n actionButtonInformation: (x, y, w, h) => {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const s = Math.min(w, h) * 0.3;\n return `${PRESET_PATHS.actionButtonBlank?.(x, y, w, h) ?? ''} M${cx - s * 0.2},${cy - s * 0.7} L${cx + s * 0.2},${cy - s * 0.7} L${cx + s * 0.2},${cy - s * 0.35} L${cx - s * 0.2},${cy - s * 0.35} Z M${cx - s * 0.2},${cy - s * 0.1} L${cx + s * 0.2},${cy - s * 0.1} L${cx + s * 0.2},${cy + s} L${cx - s * 0.2},${cy + s} Z`;\n },\n actionButtonDocument: (x, y, w, h) => {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const s = Math.min(w, h) * 0.3;\n return `${PRESET_PATHS.actionButtonBlank?.(x, y, w, h) ?? ''} M${cx - s * 0.6},${cy - s} L${cx + s * 0.3},${cy - s} L${cx + s * 0.6},${cy - s * 0.7} L${cx + s * 0.6},${cy + s} L${cx - s * 0.6},${cy + s} Z M${cx + s * 0.3},${cy - s} L${cx + s * 0.3},${cy - s * 0.7} L${cx + s * 0.6},${cy - s * 0.7}`;\n },\n actionButtonSound: (x, y, w, h) => {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const s = Math.min(w, h) * 0.3;\n // Speaker silhouette: trapezoid cone + small rectangle.\n return `${PRESET_PATHS.actionButtonBlank?.(x, y, w, h) ?? ''} M${cx - s},${cy - s * 0.4} L${cx - s * 0.3},${cy - s * 0.4} L${cx + s * 0.3},${cy - s} L${cx + s * 0.3},${cy + s} L${cx - s * 0.3},${cy + s * 0.4} L${cx - s},${cy + s * 0.4} Z M${cx + s * 0.55},${cy - s * 0.4} Q${cx + s * 0.95},${cy} ${cx + s * 0.55},${cy + s * 0.4}`;\n },\n actionButtonMovie: (x, y, w, h) => {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const s = Math.min(w, h) * 0.3;\n // Filmstrip — outer rect + sprocket holes.\n const out: string[] = [PRESET_PATHS.actionButtonBlank?.(x, y, w, h) ?? ''];\n out.push(\n `M${cx - s},${cy - s * 0.6} L${cx + s},${cy - s * 0.6} L${cx + s},${cy + s * 0.6} L${cx - s},${cy + s * 0.6} Z`,\n );\n for (let i = 0; i < 4; i++) {\n const px0 = cx - s + (i + 0.5) * ((s * 2) / 4);\n out.push(\n `M${px0 - s * 0.08},${cy - s * 0.45} L${px0 + s * 0.08},${cy - s * 0.45} L${px0 + s * 0.08},${cy - s * 0.3} L${px0 - s * 0.08},${cy - s * 0.3} Z`,\n );\n out.push(\n `M${px0 - s * 0.08},${cy + s * 0.3} L${px0 + s * 0.08},${cy + s * 0.3} L${px0 + s * 0.08},${cy + s * 0.45} L${px0 - s * 0.08},${cy + s * 0.45} Z`,\n );\n }\n return out.join(' ');\n },\n\n // -- Border/accent callouts (simplified — line callouts without\n // adjustable elbows; rendered as a rect + a single connecting line).\n borderCallout1: (x, y, w, h) => {\n return `M${x},${y} L${x + w * 0.6},${y} L${x + w * 0.6},${y + h * 0.5} L${x},${y + h * 0.5} Z M${x + w * 0.6},${y + h * 0.5} L${x + w},${y + h}`;\n },\n borderCallout2: (x, y, w, h) => {\n return `M${x},${y} L${x + w * 0.6},${y} L${x + w * 0.6},${y + h * 0.5} L${x},${y + h * 0.5} Z M${x + w * 0.6},${y + h * 0.5} L${x + w * 0.85},${y + h * 0.75} L${x + w},${y + h}`;\n },\n borderCallout3: (x, y, w, h) => {\n return `M${x},${y} L${x + w * 0.6},${y} L${x + w * 0.6},${y + h * 0.5} L${x},${y + h * 0.5} Z M${x + w * 0.6},${y + h * 0.5} L${x + w * 0.75},${y + h * 0.65} L${x + w * 0.9},${y + h * 0.65} L${x + w},${y + h}`;\n },\n accentCallout1: (x, y, w, h) => {\n // Frame + vertical accent bar on the right edge.\n return `M${x},${y} L${x + w * 0.6},${y} L${x + w * 0.6},${y + h * 0.5} L${x},${y + h * 0.5} Z M${x + w * 0.58},${y} L${x + w * 0.58},${y + h * 0.5} M${x + w * 0.6},${y + h * 0.5} L${x + w},${y + h}`;\n },\n accentBorderCallout1: (x, y, w, h) => {\n return PRESET_PATHS.accentCallout1?.(x, y, w, h) ?? '';\n },\n callout1: (x, y, w, h) => {\n // Single-segment line callout (no body box).\n return `M${x},${y + h * 0.5} L${x + w},${y + h}`;\n },\n callout2: (x, y, w, h) => {\n return `M${x},${y + h * 0.5} L${x + w * 0.6},${y + h * 0.7} L${x + w},${y + h}`;\n },\n callout3: (x, y, w, h) => {\n return `M${x},${y + h * 0.5} L${x + w * 0.4},${y + h * 0.55} L${x + w * 0.7},${y + h * 0.8} L${x + w},${y + h}`;\n },\n\n // -- Connectors / lines (rendered as straight diagonals; PowerPoint\n // routes these dynamically but the static preview just shows where\n // the endpoints are).\n straightConnector1: (x, y, w, h) => `M${x},${y} L${x + w},${y + h}`,\n bentConnector2: (x, y, w, h) => `M${x},${y} L${x + w},${y} L${x + w},${y + h}`,\n bentConnector3: (x, y, w, h) =>\n `M${x},${y} L${x + w / 2},${y} L${x + w / 2},${y + h} L${x + w},${y + h}`,\n bentConnector4: (x, y, w, h) =>\n `M${x},${y} L${x + w * 0.33},${y} L${x + w * 0.33},${y + h * 0.5} L${x + w * 0.66},${y + h * 0.5} L${x + w * 0.66},${y + h} L${x + w},${y + h}`,\n bentConnector5: (x, y, w, h) =>\n `M${x},${y} L${x + w * 0.25},${y} L${x + w * 0.25},${y + h * 0.5} L${x + w * 0.75},${y + h * 0.5} L${x + w * 0.75},${y + h} L${x + w},${y + h}`,\n curvedConnector2: (x, y, w, h) => `M${x},${y} Q${x + w},${y} ${x + w},${y + h}`,\n curvedConnector3: (x, y, w, h) =>\n `M${x},${y} C${x + w * 0.5},${y} ${x + w * 0.5},${y + h} ${x + w},${y + h}`,\n curvedConnector4: (x, y, w, h) =>\n `M${x},${y} C${x + w * 0.33},${y} ${x + w * 0.33},${y + h * 0.5} ${x + w * 0.5},${y + h * 0.5} C${x + w * 0.66},${y + h * 0.5} ${x + w * 0.66},${y + h} ${x + w},${y + h}`,\n curvedConnector5: (x, y, w, h) =>\n `M${x},${y} C${x + w * 0.25},${y} ${x + w * 0.25},${y + h * 0.25} ${x + w * 0.5},${y + h * 0.5} C${x + w * 0.75},${y + h * 0.75} ${x + w * 0.75},${y + h} ${x + w},${y + h}`,\n};\n\n// ---------------------------------------------------------------------------\n// Text body rendering via foreignObject + XHTML.\n\nconst ALIGNMENT_TO_CSS: Record<string, string> = {\n left: 'left',\n center: 'center',\n right: 'right',\n justify: 'justify',\n};\n\nconst ANCHOR_TO_CSS: Record<string, string> = {\n top: 'flex-start',\n center: 'center',\n bottom: 'flex-end',\n};\n\n// PowerPoint's stock master defaults per placeholder type. Used when\n// the run has no `<a:rPr sz=…>` of its own — pptx-kit doesn't walk\n// the lstStyle cascade to find the resolved size, so we mirror the\n// well-known master defaults here.\nconst placeholderDefaultPt = (phType: string | null): number => {\n if (phType === 'title' || phType === 'ctrTitle') return DEFAULT_TITLE_PT; // 44pt\n if (phType === 'subTitle') return 32;\n if (phType === 'ftr' || phType === 'dt' || phType === 'sldNum') return 12;\n return DEFAULT_BODY_PT; // 18pt\n};\n\nconst bulletChar = (level: number): string => (level <= 0 ? '•' : level === 1 ? '◦' : '▪');\n\n// Maps a `BulletStyle` value to the underlying `ST_TextAutoNumberScheme`\n// token (or `null` when the paragraph isn't auto-numbered). `'number'`\n// is the shorthand for arabicPeriod that setShapeBullets uses.\nconst bulletAutoNumType = (style: ReturnType<typeof getParagraphBullet>): string | null => {\n if (style === 'number') return 'arabicPeriod';\n if (style !== null && typeof style === 'object' && 'autoNum' in style) {\n return style.autoNum ?? null;\n }\n return null;\n};\n\nconst toRoman = (n: number): string => {\n if (n <= 0) return String(n);\n const map: ReadonlyArray<[number, string]> = [\n [1000, 'M'],\n [900, 'CM'],\n [500, 'D'],\n [400, 'CD'],\n [100, 'C'],\n [90, 'XC'],\n [50, 'L'],\n [40, 'XL'],\n [10, 'X'],\n [9, 'IX'],\n [5, 'V'],\n [4, 'IV'],\n [1, 'I'],\n ];\n let out = '';\n let r = n;\n for (const [v, s] of map) {\n while (r >= v) {\n out += s;\n r -= v;\n }\n }\n return out;\n};\n\nconst toAlpha = (n: number): string => {\n // 1 -> A, 26 -> Z, 27 -> AA, etc.\n if (n <= 0) return String(n);\n let r = n;\n let out = '';\n while (r > 0) {\n r -= 1;\n out = String.fromCharCode(65 + (r % 26)) + out;\n r = Math.floor(r / 26);\n }\n return out;\n};\n\n// Format an auto-number per ECMA-376 §17.18.96 `ST_TextAutoNumberScheme`.\n// Only the most common variants are implemented; unknown tokens fall back\n// to arabicPeriod-style formatting.\nconst formatAutoNum = (token: string, n: number): string => {\n const arabic = String(n);\n switch (token) {\n case 'arabicPlain':\n return arabic;\n case 'arabicPeriod':\n return `${arabic}.`;\n case 'arabicParenR':\n return `${arabic})`;\n case 'arabicParenBoth':\n return `(${arabic})`;\n case 'romanUcPeriod':\n return `${toRoman(n)}.`;\n case 'romanLcPeriod':\n return `${toRoman(n).toLowerCase()}.`;\n case 'romanUcParenR':\n return `${toRoman(n)})`;\n case 'romanLcParenR':\n return `${toRoman(n).toLowerCase()})`;\n case 'romanUcParenBoth':\n return `(${toRoman(n)})`;\n case 'romanLcParenBoth':\n return `(${toRoman(n).toLowerCase()})`;\n case 'alphaUcPeriod':\n return `${toAlpha(n)}.`;\n case 'alphaLcPeriod':\n return `${toAlpha(n).toLowerCase()}.`;\n case 'alphaUcParenR':\n return `${toAlpha(n)})`;\n case 'alphaLcParenR':\n return `${toAlpha(n).toLowerCase()})`;\n case 'alphaUcParenBoth':\n return `(${toAlpha(n)})`;\n case 'alphaLcParenBoth':\n return `(${toAlpha(n).toLowerCase()})`;\n default:\n return `${arabic}.`;\n }\n};\n\n// `effectivePt` is the post-autofit font size in points. Callers pass\n// `format.size` (the authored size, if any) scaled by the body's\n// autofit factor, or the placeholder default scaled the same way.\nconst renderRun = (\n text: string,\n format: TextFormat | null,\n theme: PresentationTheme | null,\n effectivePt: number,\n /* unused but kept for forward compatibility */ _wasDefault = false,\n): string => {\n if (text === '') return '';\n void _wasDefault;\n const styles: string[] = [];\n styles.push(`font-size:${(effectivePt * PX_PER_PT).toFixed(2)}px`);\n // PowerPoint uses tight line-height (~1.0) by default for placeholders;\n // the previous 1.2 left enough vertical slack to push the top/bottom of\n // glyphs outside short placeholders.\n styles.push(`line-height:1.05`);\n if (format?.font) styles.push(`font-family:${escapeXml(format.font)}, ${DEFAULT_FONT}`);\n if (format?.bold) styles.push('font-weight:700');\n if (format?.italic) styles.push('font-style:italic');\n const underline = format?.underline;\n const strike = format?.strike;\n const hasUnderline = underline !== undefined && underline !== false && underline !== 'none';\n const hasStrike = strike !== undefined && strike !== false && strike !== 'noStrike';\n if (hasUnderline && hasStrike) {\n styles.push('text-decoration:underline line-through');\n } else if (hasUnderline) {\n styles.push('text-decoration:underline');\n } else if (hasStrike) {\n styles.push('text-decoration:line-through');\n }\n if (format?.color !== undefined && format.color !== null) {\n styles.push(`color:${resolveColor(format.color, theme, '#000000')}`);\n }\n // S3 — additional rPr attributes that change how the glyphs lay out.\n if (format?.spc !== undefined && format.spc !== 0) {\n // ECMA-376 `spc` is in 1/100 pt; convert to CSS px at the run's size.\n const trackingPx = (format.spc / 100) * PX_PER_PT;\n styles.push(`letter-spacing:${trackingPx.toFixed(3)}px`);\n }\n if (format?.baseline !== undefined && format.baseline !== 0) {\n // Positive = superscript, negative = subscript. Scale the glyph a\n // little smaller as PowerPoint does (~64% for super/subscript).\n const direction = format.baseline > 0 ? 'super' : 'sub';\n styles.push(`vertical-align:${direction}`);\n styles.push('font-size:0.65em');\n }\n if (format?.cap === 'all') styles.push('text-transform:uppercase');\n else if (format?.cap === 'small') styles.push('font-variant:small-caps');\n if (format?.highlight !== undefined && format.highlight !== null) {\n styles.push(`background-color:${resolveColor(format.highlight, theme, '#FFFF00')}`);\n }\n // Explicit `\\n` in the run text comes from <a:br> line breaks; project\n // each to an HTML <br/> so the foreignObject's CSS layout honours it.\n // Everything else is escaped as XML text.\n const html = text\n .split('\\n')\n .map((part) => escapeXml(part))\n .join('<br/>');\n return `<span style=\"${styles.join(';')}\">${html}</span>`;\n};\n\n// CSS line-height factor we render text at. Keep in sync with the\n// `line-height` declaration in renderRun.\nconst LINE_HEIGHT = 1.05;\n\n// Rough mean glyph width as a fraction of font-size in a typical\n// sans-serif. 0.55 is what PowerPoint's auto-fit estimator uses for\n// Calibri at body sizes. Used to estimate when text wraps so the\n// renderer can shrink the font to keep wrapped placeholders from\n// overflowing.\nconst AVG_GLYPH_W_RATIO = 0.55;\n\ntype RunData = {\n text: string;\n fmt: TextFormat | null;\n sizePt: number;\n href?: string;\n hrefTip?: string;\n};\ninterface ParaData {\n readonly align: string;\n readonly level: number;\n readonly bulletStyle: ReturnType<typeof getParagraphBullet>;\n readonly bulletDetail: ReturnType<typeof getParagraphBulletStyle>;\n readonly bulletIsPicture: boolean;\n // Data URL for a picture bullet (`<a:buBlip>`) whose bytes resolved,\n // else null — null falls back to the \"■\" glyph.\n readonly bulletImageHref: string | null;\n readonly runs: RunData[];\n readonly lineSpacing: ReturnType<typeof getParagraphLineSpacing>;\n readonly spcBefPts: number | null;\n readonly spcAftPts: number | null;\n readonly indent: ReturnType<typeof getParagraphIndent>;\n}\n\nconst hasUnderlineFmt = (fmt: TextFormat | null): boolean => {\n const u = fmt?.underline;\n return u !== undefined && u !== false && u !== 'none';\n};\nconst hasStrikeFmt = (fmt: TextFormat | null): boolean => {\n const s = fmt?.strike;\n return s !== undefined && s !== false && s !== 'noStrike';\n};\n\ninterface SvgTextArgs {\n readonly pres: PresentationData;\n readonly shape: SlideShapeData;\n readonly theme: PresentationTheme | null;\n readonly paraData: readonly ParaData[];\n readonly numberLabels: ReadonlyArray<string | null>;\n readonly autoFitScale: number;\n readonly lineHeightScale: number;\n readonly defaultPt: number;\n readonly themeFace: string | null;\n readonly defaultColor: string;\n readonly anchor: 'top' | 'center' | 'bottom';\n readonly wrap: boolean;\n readonly innerX: number;\n readonly innerY: number;\n readonly innerW: number;\n readonly innerH: number;\n readonly measure: TextMeasurer;\n readonly vert: VerticalLayout;\n readonly columns: ColumnLayout | null;\n}\n\nconst alignOf = (a: string): ParaInput['align'] =>\n a === 'center' || a === 'right' || a === 'justify' ? a : 'left';\n\n// Map the OOXML `vert` token onto the engine's two supported rotations,\n// mirroring the foreignObject path's writing-mode grouping so server == browser:\n// the `vertical-rl` family (columns right-to-left) rotates 90° clockwise, the\n// `vertical-lr` family (columns left-to-right) rotates 270°. The wordArt variants\n// keep glyphs upright in the browser; the SVG path rotates them with the text\n// (closest a rotated <text> can get), which the W1 brief accepts as the mapping.\nconst verticalLayoutOf = (vert: ReturnType<typeof getShapeTextDirection>): VerticalLayout => {\n switch (vert) {\n case 'vert':\n case 'eaVert':\n case 'wordArtVert':\n case 'wordArtVertRtl':\n return 'cw90';\n case 'vert270':\n case 'mongolianVert':\n return 'cw270';\n case null:\n return 'none';\n }\n};\n\n// Build the px-native engine input from the resolved paraData and lay it out.\nconst buildAndLayoutSvgText = (a: SvgTextArgs): string => {\n const scale = a.autoFitScale;\n const paragraphs: ParaInput[] = a.paraData.map((para, pi): ParaInput => {\n const pieces: PieceInput[] = [];\n for (const run of para.runs) {\n // <a:br> marker.\n if (run.text === '\\n' && run.fmt === null) {\n pieces.push(breakPiece());\n continue;\n }\n let fmt = run.fmt;\n if (run.href) {\n const hlinkColor = a.theme ? normalizeHex(a.theme.hyperlink) : '#0563C1';\n fmt = {\n ...fmt,\n color: fmt?.color ?? hlinkColor,\n underline: fmt?.underline ?? true,\n };\n }\n const family = substituteFamily(fmt?.font ?? a.themeFace);\n const sizePx = run.sizePt * scale * PX_PER_PT;\n const fillHex =\n fmt?.color !== undefined && fmt.color !== null\n ? resolveColor(fmt.color, a.theme, '#000000')\n : a.defaultColor;\n const superSub: 0 | 1 | -1 =\n fmt?.baseline !== undefined && fmt.baseline !== 0 ? (fmt.baseline > 0 ? 1 : -1) : 0;\n const letterSpacingPx =\n fmt?.spc !== undefined && fmt.spc !== 0 ? (fmt.spc / 100) * PX_PER_PT : 0;\n const caps = fmt?.cap === 'all' || fmt?.cap === 'small';\n const base: Omit<PieceInput, 'text' | 'isBreak'> = {\n family,\n sizePx,\n bold: fmt?.bold ?? false,\n italic: fmt?.italic ?? false,\n letterSpacingPx,\n fillHex,\n underline: hasUnderlineFmt(fmt),\n strike: hasStrikeFmt(fmt),\n superSub,\n href: run.href ?? null,\n };\n // A run's text can carry embedded '\\n' only via <a:br>, already split\n // out above; still split defensively so any stray newline becomes a break.\n const segs = run.text.split('\\n');\n segs.forEach((seg, i) => {\n pieces.push({ ...base, text: caps ? seg.toUpperCase() : seg, isBreak: false });\n if (i < segs.length - 1) pieces.push(breakPiece());\n });\n }\n\n const marLpx =\n para.indent.leftEmu !== null\n ? (para.indent.leftEmu / EMU_PER_PX) * scale\n : para.level > 0\n ? para.level * 24 * PX_PER_PT * scale\n : 0;\n const marRpx = para.indent.rightEmu !== null ? (para.indent.rightEmu / EMU_PER_PX) * scale : 0;\n const firstIndentPx =\n para.indent.firstLineEmu !== null ? (para.indent.firstLineEmu / EMU_PER_PX) * scale : 0;\n const spcBefPx =\n para.spcBefPts !== null && para.spcBefPts > 0 ? para.spcBefPts * PX_PER_PT * scale : 0;\n const spcAftPx =\n para.spcAftPts !== null && para.spcAftPts > 0 ? para.spcAftPts * PX_PER_PT * scale : 0;\n const lineSpacing: ParaInput['lineSpacing'] =\n para.lineSpacing?.kind === 'pct'\n ? { kind: 'pct', value: para.lineSpacing.value }\n : para.lineSpacing?.kind === 'pts'\n ? { kind: 'pts', px: para.lineSpacing.value * PX_PER_PT * scale }\n : null;\n\n return {\n align: alignOf(para.align),\n marLpx,\n marRpx,\n firstIndentPx,\n spcBefPx,\n spcAftPx,\n lineSpacing,\n lineAdvanceScale: a.lineHeightScale,\n bullet: buildBullet(a, para, pi),\n pieces,\n fallbackSizePx: a.defaultPt * scale * PX_PER_PT,\n };\n });\n\n const input: TextBodyInput = {\n boxXpx: a.innerX / EMU_PER_PX,\n boxYpx: a.innerY / EMU_PER_PX,\n boxWpx: a.innerW / EMU_PER_PX,\n boxHpx: a.innerH / EMU_PER_PX,\n anchor: a.anchor,\n wrap: a.wrap,\n paragraphs,\n vert: a.vert,\n columns: a.columns,\n };\n return layoutTextSvg(input, a.measure);\n};\n\nconst breakPiece = (): PieceInput => ({\n text: '',\n family: '',\n sizePx: 0,\n bold: false,\n italic: false,\n letterSpacingPx: 0,\n fillHex: '#000000',\n underline: false,\n strike: false,\n superSub: 0,\n href: null,\n isBreak: true,\n});\n\nconst buildBullet = (a: SvgTextArgs, para: ParaData, pi: number): BulletInput | null => {\n const explicitChar =\n para.bulletStyle !== null && typeof para.bulletStyle === 'object' && 'char' in para.bulletStyle\n ? para.bulletStyle.char\n : null;\n const numberLabel = a.numberLabels[pi] ?? null;\n const showBullet =\n para.bulletStyle === 'bullet' ||\n explicitChar !== null ||\n numberLabel !== null ||\n para.bulletIsPicture ||\n (para.bulletStyle !== 'none' && para.level > 0);\n if (!showBullet) return null;\n // Picture bullet with resolved bytes → render the image; otherwise the\n // \"■\" glyph stands in (bytes unavailable, e.g. inherited buBlip).\n const char = para.bulletIsPicture ? '■' : (numberLabel ?? explicitChar ?? bulletChar(para.level));\n const baseSizePx = a.defaultPt * PX_PER_PT * a.autoFitScale;\n const sizePx =\n para.bulletDetail.sizePct !== null\n ? baseSizePx * para.bulletDetail.sizePct\n : para.bulletDetail.sizePts !== null\n ? para.bulletDetail.sizePts * PX_PER_PT * a.autoFitScale\n : baseSizePx;\n const fillHex = para.bulletDetail.color\n ? resolveColor(para.bulletDetail.color, a.theme, '#000000')\n : a.defaultColor;\n return {\n text: char,\n family: substituteFamily(para.bulletDetail.font ?? a.themeFace),\n sizePx,\n fillHex,\n ...(para.bulletImageHref ? { imageHref: para.bulletImageHref } : {}),\n };\n};\n\nconst renderTextBody = (\n pres: PresentationData,\n shape: SlideShapeData,\n bounds: { x: number; y: number; w: number; h: number },\n theme: PresentationTheme | null,\n phType: string | null,\n ctx: LayoutCtx,\n): string => {\n let paragraphCount: number;\n try {\n paragraphCount = getShapeParagraphCount(shape);\n } catch {\n return '';\n }\n if (paragraphCount === 0) return '';\n\n const defaultPt = placeholderDefaultPt(phType);\n // Theme font stack — `<a:fontScheme><a:majorFont>` is the title face,\n // `<a:minorFont>` is the body face. Use the major face for title /\n // ctrTitle placeholders, minor for everything else. Falls through to\n // DEFAULT_FONT so missing themes still render with our generic stack.\n const themeFonts = getPresentationFonts(pres);\n const isTitlePlaceholder = phType === 'title' || phType === 'ctrTitle';\n const themeFace = isTitlePlaceholder\n ? (themeFonts?.majorLatin ?? null)\n : (themeFonts?.minorLatin ?? null);\n const effectiveDefaultFont = themeFace\n ? `${escapeXml(themeFace)}, ${DEFAULT_FONT}`\n : DEFAULT_FONT;\n // Effective body-property cascade — anchor, wrap, vert, margins all\n // inherit from the layout / master placeholder when the slide doesn't\n // override them.\n let effectiveBody: ReturnType<typeof getShapeBodyPrEffective>;\n try {\n effectiveBody = getShapeBodyPrEffective(pres, shape);\n } catch {\n effectiveBody = {\n anchor: getShapeTextAnchor(shape),\n wrap: null,\n vert: getShapeTextDirection(shape),\n margins: getShapeTextMargins(shape) ?? { left: null, top: null, right: null, bottom: null },\n };\n }\n // Default text alignment depends on the shape kind, matching PowerPoint /\n // LibreOffice: autoshapes (preset geometry that is neither a placeholder nor\n // a text box) center text horizontally and anchor it middle by default,\n // whereas text boxes and placeholder bodies default to left / top. Authored\n // algn / anchor still win.\n const isAutoshape = !isShapePlaceholder(shape) && !isShapeTextBox(shape);\n const defaultAlign = isAutoshape ? 'center' : 'left';\n const defaultAnchor: 'top' | 'center' | 'bottom' = isAutoshape ? 'center' : 'top';\n const anchor = effectiveBody.anchor ?? defaultAnchor;\n const margins = effectiveBody.margins;\n const lIns = margins.left ?? DEFAULT_INSET_X;\n const tIns = margins.top ?? DEFAULT_INSET_Y;\n const rIns = margins.right ?? DEFAULT_INSET_X;\n const bIns = margins.bottom ?? DEFAULT_INSET_Y;\n\n const innerX = bounds.x + lIns;\n const innerY = bounds.y + tIns;\n const innerW = Math.max(0, bounds.w - lIns - rIns);\n const innerH = Math.max(0, bounds.h - tIns - bIns);\n if (innerW <= 0 || innerH <= 0) return '';\n\n // First pass — collect every run's text + format so we can both\n // (a) compute an autofit scale and (b) emit each run with the\n // adjusted size. RunData / ParaData are module-scoped (above) so the\n // pure-SVG path can consume the same resolved model.\n const paraData: ParaData[] = [];\n let hasAnyText = false;\n for (let p = 0; p < paragraphCount; p++) {\n // Resolve paragraph properties through the layout/master cascade so\n // placeholders inherit their default alignment / line-spacing / indent\n // without each slide having to repeat them. Fall back to the literal\n // readers if the cascade throws (very defensive — should never happen).\n let effective: ReturnType<typeof getParagraphPropertiesEffective>;\n try {\n effective = getParagraphPropertiesEffective(pres, shape, p);\n } catch {\n effective = {\n align: getParagraphAlignment(shape, p),\n level: getParagraphLevel(shape, p),\n marL: null,\n marR: null,\n indent: null,\n lineSpacing: null,\n spcBefPts: null,\n spcAftPts: null,\n rtl: null,\n bullet: null,\n };\n }\n const align = effective.align ?? defaultAlign;\n const level = effective.level;\n // The literal slide-level bullet wins; otherwise the cascade supplies the\n // inherited one (master bodyStyle authors \"•\" for body placeholders).\n const bulletStyle = getParagraphBullet(shape, p) ?? effective.bullet;\n let bulletDetail: ReturnType<typeof getParagraphBulletStyle> = {\n color: null,\n sizePct: null,\n sizePts: null,\n font: null,\n };\n try {\n bulletDetail = getParagraphBulletStyle(pres, shape, p);\n } catch {}\n let bulletIsPicture = false;\n try {\n bulletIsPicture = isParagraphBulletPicture(shape, p);\n } catch {}\n let bulletImageHref: string | null = null;\n if (bulletIsPicture) {\n try {\n const bytes = getParagraphBulletImageBytes(shape, p);\n if (bytes) bulletImageHref = bytesToDataUrl(bytes);\n } catch {}\n }\n const lineSpacing: ReturnType<typeof getParagraphLineSpacing> = effective.lineSpacing;\n let spcBefPts: number | null = effective.spcBefPts;\n let spcAftPts: number | null = effective.spcAftPts;\n const indent: ReturnType<typeof getParagraphIndent> = {\n leftEmu: effective.marL,\n rightEmu: effective.marR,\n firstLineEmu: effective.indent,\n };\n // Literal pPr values override the cascade so any per-slide override\n // wins on this paragraph.\n try {\n const spacing = getParagraphSpacing(shape, p);\n if (spacing.beforePts !== null) spcBefPts = spacing.beforePts;\n if (spacing.afterPts !== null) spcAftPts = spacing.afterPts;\n } catch {}\n try {\n const lit = getParagraphIndent(shape, p);\n if (lit.leftEmu !== null) indent.leftEmu = lit.leftEmu;\n if (lit.rightEmu !== null) indent.rightEmu = lit.rightEmu;\n if (lit.firstLineEmu !== null) indent.firstLineEmu = lit.firstLineEmu;\n } catch {}\n const runs: RunData[] = [];\n // Walk the paragraph's inline elements — runs, field placeholders,\n // and explicit line breaks — in document order. The strict\n // <a:r>-only `getShapeRunCount` would silently skip footer / date /\n // slide-number fields, which is exactly what real templates emit.\n let elements: ReadonlyArray<ReturnType<typeof getShapeParagraphElements>[number]> = [];\n try {\n elements = getShapeParagraphElements(shape, p);\n } catch {\n elements = [];\n }\n let rIdx = 0;\n for (const el of elements) {\n if (el.kind === 'br') {\n runs.push({ text: '\\n', fmt: null, sizePt: defaultPt });\n continue;\n }\n const txt = el.text;\n let fmt: TextFormat | null = el.format;\n let href: string | undefined;\n let hrefTip: string | undefined;\n if (el.kind === 'r') {\n // The cascade only makes sense for actual <a:r> runs; field\n // text is opaque cached content and shouldn't pretend to be a\n // specific run index.\n try {\n fmt = getShapeRunFormatEffective(pres, shape, p, rIdx);\n } catch {\n fmt = getShapeRunFormat(shape, p, rIdx);\n }\n try {\n href = getShapeRunHyperlink(shape, p, rIdx) ?? undefined;\n // Per-run slide-jump actions (`<a:hlinkClick action=\n // \"ppaction://hlinksldjump\"/>`) resolve to an in-page anchor.\n // Fall back to them only when no external URL was authored.\n if (!href) {\n const act = getShapeRunClickAction(shape, p, rIdx);\n if (act?.kind === 'slide') {\n const idx = getSlideIndex(pres, act.slide);\n if (idx >= 0) href = `#slide-${idx + 1}`;\n } else if (act?.kind === 'url') {\n href = act.url;\n }\n }\n if (href) hrefTip = getShapeRunHyperlinkTooltip(shape, p, rIdx) ?? undefined;\n } catch {\n href = undefined;\n }\n rIdx++;\n }\n const sizePt = fmt?.size ?? defaultPt;\n if (txt) hasAnyText = true;\n runs.push({\n text: txt,\n fmt,\n sizePt,\n ...(href !== undefined ? { href } : {}),\n ...(hrefTip !== undefined ? { hrefTip } : {}),\n });\n }\n paraData.push({\n align,\n level,\n bulletStyle,\n bulletDetail,\n bulletIsPicture,\n bulletImageHref,\n runs,\n lineSpacing,\n spcBefPts,\n spcAftPts,\n indent,\n });\n }\n if (!hasAnyText) return '';\n\n // Prefer the *authored* autofit factor when PowerPoint already\n // computed one (`<a:normAutofit fontScale=…/>`). That's the same\n // multiplier PowerPoint applies on-screen, so honouring it is what\n // brings the rendered size into 1:1 agreement with the deck.\n const authoredAutofit = getShapeTextAutoFitParams(shape);\n let autoFitScale = authoredAutofit?.fontScale ?? 1;\n let lineHeightScale = 1 - (authoredAutofit?.lnSpcReduction ?? 0);\n\n // Only fall back to the heuristic estimator when no authored\n // autofit ran. CJK glyphs are ~1em wide vs the ~0.55em Latin\n // average, so detect a leading CJK character per paragraph and\n // widen the per-line estimate accordingly — keeps Japanese titles\n // from over-shrinking on placeholders that already fit.\n if (!authoredAutofit) {\n const innerWPx = innerW / EMU_PER_PX;\n const innerHPx = innerH / EMU_PER_PX;\n let totalH = 0;\n for (const para of paraData) {\n let maxSize = defaultPt;\n let totalChars = 0;\n let cjkChars = 0;\n for (const run of para.runs) {\n if (run.sizePt > maxSize) maxSize = run.sizePt;\n totalChars += run.text.length;\n for (let i = 0; i < run.text.length; i++) {\n const c = run.text.charCodeAt(i);\n // CJK Unified Ideographs, Hiragana, Katakana, Hangul.\n if (\n (c >= 0x3040 && c <= 0x309f) ||\n (c >= 0x30a0 && c <= 0x30ff) ||\n (c >= 0x4e00 && c <= 0x9fff) ||\n (c >= 0xac00 && c <= 0xd7af)\n )\n cjkChars++;\n }\n }\n if (totalChars === 0) totalChars = 1;\n const cjkRatio = cjkChars / totalChars;\n // Weighted average: CJK glyphs ≈ 1.0em wide, Latin ≈ 0.55em.\n const glyphRatio = cjkRatio * 1.0 + (1 - cjkRatio) * AVG_GLYPH_W_RATIO;\n const sizePx = maxSize * PX_PER_PT;\n const charsPerLine = Math.max(1, Math.floor(innerWPx / Math.max(1, sizePx * glyphRatio)));\n const lineCount = Math.max(1, Math.ceil(totalChars / charsPerLine));\n totalH += sizePx * LINE_HEIGHT * lineCount;\n }\n if (totalH > innerHPx) {\n autoFitScale = Math.max(0.4, innerHPx / totalH);\n }\n }\n // Apply line-height reduction by tightening per-line spacing. We\n // pass it through to renderRun via a closed-over factor.\n const effectiveLineHeight = LINE_HEIGHT * lineHeightScale;\n void effectiveLineHeight; // currently unused — kept for forward compat\n\n // Numbering pre-pass — assign an autonum index per paragraph for\n // consecutive numbered paragraphs at the same level. Resets on a\n // non-numbered paragraph or a level change.\n const numberLabels: Array<string | null> = Array.from({ length: paraData.length }, () => null);\n {\n let counter = 0;\n let activeLevel = -1;\n let activeType: string | null = null;\n for (let i = 0; i < paraData.length; i++) {\n const para = paraData[i]!;\n const num = bulletAutoNumType(para.bulletStyle);\n if (num === null) {\n counter = 0;\n activeLevel = -1;\n activeType = null;\n continue;\n }\n if (para.level !== activeLevel || num !== activeType) {\n counter = 1;\n activeLevel = para.level;\n activeType = num;\n } else {\n counter += 1;\n }\n numberLabels[i] = formatAutoNum(num, counter);\n }\n }\n\n // Second pass — emit runs with scaled sizes.\n const paragraphs: string[] = [];\n for (let pi = 0; pi < paraData.length; pi++) {\n const para = paraData[pi]!;\n const runHtmls = para.runs.map((run) => {\n // Per-run hyperlinks render the text in the theme's hyperlink\n // color (with underline) and wrap the span in an <a href> so the\n // preview is clickable.\n let runFmt = run.fmt;\n if (run.href) {\n const hlinkColor = theme ? normalizeHex(theme.hyperlink) : '#0563C1';\n runFmt = {\n ...runFmt,\n color: runFmt?.color ?? hlinkColor,\n underline: runFmt?.underline ?? true,\n };\n }\n const span = renderRun(\n run.text,\n runFmt,\n theme,\n run.sizePt * autoFitScale,\n run.fmt?.size === undefined,\n );\n if (!run.href) return span;\n const isInPage = run.href.startsWith('#');\n const targetAttrs = isInPage ? '' : ' target=\"_blank\" rel=\"noopener noreferrer\"';\n const titleAttr = run.hrefTip ? ` title=\"${escapeXml(run.hrefTip)}\"` : '';\n return `<a href=\"${escapeXml(run.href)}\"${targetAttrs}${titleAttr} style=\"color:inherit;text-decoration:inherit\">${span}</a>`;\n });\n // <a:lnSpc> — paragraph line spacing. spcPct multiplies, spcPts\n // sets a fixed point value. CSS line-height accepts both forms;\n // we project pts to px at the run's authored size.\n let lineHeightCss = '';\n if (para.lineSpacing?.kind === 'pct') {\n lineHeightCss = `line-height:${para.lineSpacing.value.toFixed(3)}`;\n } else if (para.lineSpacing?.kind === 'pts') {\n lineHeightCss = `line-height:${(para.lineSpacing.value * PX_PER_PT * autoFitScale).toFixed(2)}px`;\n }\n // <a:spcBef> / <a:spcAft> map to CSS margin-top / margin-bottom.\n const marginTopCss =\n para.spcBefPts !== null && para.spcBefPts > 0\n ? `margin-top:${(para.spcBefPts * PX_PER_PT * autoFitScale).toFixed(2)}px`\n : '';\n const marginBottomCss =\n para.spcAftPts !== null && para.spcAftPts > 0\n ? `margin-bottom:${(para.spcAftPts * PX_PER_PT * autoFitScale).toFixed(2)}px`\n : '';\n // <a:pPr marL marR indent> → CSS padding-left / padding-right /\n // text-indent. Authored indents override the level-based default\n // so paragraphs with explicit marL don't get doubled.\n const leftPx =\n para.indent.leftEmu !== null\n ? (para.indent.leftEmu / EMU_PER_PX) * autoFitScale\n : para.level > 0\n ? para.level * 24 * PX_PER_PT * autoFitScale\n : 0;\n const rightPx =\n para.indent.rightEmu !== null ? (para.indent.rightEmu / EMU_PER_PX) * autoFitScale : 0;\n const firstLinePx =\n para.indent.firstLineEmu !== null\n ? (para.indent.firstLineEmu / EMU_PER_PX) * autoFitScale\n : 0;\n const pStyles: string[] = [\n marginTopCss || (marginBottomCss ? '' : 'margin:0'),\n marginBottomCss,\n 'padding:0',\n `text-align:${ALIGNMENT_TO_CSS[para.align] ?? 'left'}`,\n lineHeightCss,\n leftPx > 0 ? `padding-left:${leftPx.toFixed(2)}px` : '',\n rightPx > 0 ? `padding-right:${rightPx.toFixed(2)}px` : '',\n firstLinePx !== 0 ? `text-indent:${firstLinePx.toFixed(2)}px` : '',\n ].filter(Boolean);\n let prefix = '';\n const explicitChar =\n para.bulletStyle !== null &&\n typeof para.bulletStyle === 'object' &&\n 'char' in para.bulletStyle\n ? para.bulletStyle.char\n : null;\n const numberLabel = numberLabels[pi];\n const showBullet =\n para.bulletStyle === 'bullet' ||\n explicitChar !== null ||\n numberLabel !== null ||\n para.bulletIsPicture ||\n (para.bulletStyle !== 'none' && para.level > 0);\n if (showBullet && para.bulletImageHref) {\n // Picture bullet with resolved bytes — inline it as an <img> sized\n // to the bullet's font box so it sits where the glyph would.\n const baseBulletPx = defaultPt * PX_PER_PT * autoFitScale;\n const bulletPx =\n para.bulletDetail.sizePct !== null\n ? baseBulletPx * para.bulletDetail.sizePct\n : para.bulletDetail.sizePts !== null\n ? para.bulletDetail.sizePts * PX_PER_PT * autoFitScale\n : baseBulletPx;\n const imgStyles = [\n `width:${bulletPx.toFixed(2)}px`,\n `height:${bulletPx.toFixed(2)}px`,\n 'display:inline-block',\n 'vertical-align:baseline',\n `margin-right:${(0.4 * defaultPt * PX_PER_PT * autoFitScale).toFixed(2)}px`,\n ];\n prefix = `<img src=\"${para.bulletImageHref}\" alt=\"\" style=\"${imgStyles.join(';')}\"/>`;\n } else if (showBullet) {\n // Picture bullet whose bytes are unavailable falls back to a filled\n // square so users see a distinct glyph rather than the round bullet.\n const char = para.bulletIsPicture\n ? '■'\n : (numberLabel ?? explicitChar ?? bulletChar(para.level));\n // Bullet style overrides: color, size %, fixed pt size, font face.\n const bulletStyles: string[] = [\n `margin-right:${(0.4 * defaultPt * PX_PER_PT * autoFitScale).toFixed(2)}px`,\n ];\n if (para.bulletDetail.color) {\n bulletStyles.push(`color:${resolveColor(para.bulletDetail.color, theme, '#000000')}`);\n }\n if (para.bulletDetail.sizePct !== null) {\n bulletStyles.push(`font-size:${(para.bulletDetail.sizePct * 100).toFixed(1)}%`);\n } else if (para.bulletDetail.sizePts !== null) {\n bulletStyles.push(\n `font-size:${(para.bulletDetail.sizePts * PX_PER_PT * autoFitScale).toFixed(2)}px`,\n );\n }\n if (para.bulletDetail.font) {\n bulletStyles.push(`font-family:${escapeXml(para.bulletDetail.font)}, ${DEFAULT_FONT}`);\n }\n prefix = `<span style=\"${bulletStyles.join(';')}\">${escapeXml(char)}</span>`;\n }\n paragraphs.push(\n `<p style=\"${pStyles.join(';')}\">${prefix}${runHtmls.join('') || '&#8203;'}</p>`,\n );\n }\n\n const justify = ANCHOR_TO_CSS[anchor] ?? 'flex-start';\n const defaultColor = resolveColor('scheme:tx1', theme, '#000000');\n\n // Pure-SVG text path (browser-free rasterization). Rebuild the px-native\n // layout model from the already-resolved paraData and hand it to the engine,\n // matching the foreignObject path's vertical-text and multi-column handling so\n // server-side rendering agrees with the browser (W1).\n if (ctx.mode === 'svg') {\n // Fidelity path: apply ONLY the authored normAutofit scale. The heuristic\n // shrink (the AVG_GLYPH_W_RATIO estimator) exists to keep the browser\n // preview tidy, but PowerPoint / LibreOffice do not shrink unless the deck\n // baked a fontScale — so honouring only the authored value matches ground\n // truth (and avoids spuriously shrinking titles that actually fit).\n const svgScale = authoredAutofit?.fontScale ?? 1;\n const svgLineScale = 1 - (authoredAutofit?.lnSpcReduction ?? 0);\n const svgVert = verticalLayoutOf(effectiveBody.vert ?? getShapeTextDirection(shape));\n // numCol only applies to horizontal text — see the engine's combination note.\n const svgCols = getShapeTextColumns(shape);\n const svgColumns: ColumnLayout | null =\n svgVert === 'none' && svgCols && svgCols.count >= 2\n ? {\n count: svgCols.count,\n // spcCol is in EMU; default to the foreignObject path's 12px gap.\n gapPx: svgCols.gapEmu !== undefined ? svgCols.gapEmu / EMU_PER_PX : 12,\n }\n : null;\n const svgInner = buildAndLayoutSvgText({\n pres,\n shape,\n theme,\n paraData,\n numberLabels,\n autoFitScale: svgScale,\n lineHeightScale: svgLineScale,\n defaultPt,\n themeFace,\n defaultColor,\n anchor: anchor === 'center' || anchor === 'bottom' ? anchor : 'top',\n wrap: effectiveBody.wrap !== 'none',\n innerX,\n innerY,\n innerW,\n innerH,\n measure: ctx.measure,\n vert: svgVert,\n columns: svgColumns,\n });\n const bodyRotDegSvg = getShapeTextBodyRotationDeg(shape);\n if (bodyRotDegSvg !== null && bodyRotDegSvg !== 0) {\n const pivotX = innerX + innerW / 2;\n const pivotY = innerY + innerH / 2;\n return `<g transform=\"rotate(${bodyRotDegSvg} ${E(pivotX)} ${E(pivotY)})\">${svgInner}</g>`;\n }\n return svgInner;\n }\n\n // B3 — vertical text. <a:bodyPr vert=\"…\"/> controls glyph orientation\n // and line direction. The CSS writing-mode property is the right\n // primitive for the common cases (East-Asian, Mongolian, vert);\n // wordArtVert / wordArtVertRtl stack characters without rotation\n // which writing-mode also covers via \"vertical-lr\".\n const vert = effectiveBody.vert ?? getShapeTextDirection(shape);\n let writingMode = '';\n let extraTransform = '';\n if (vert === 'vert' || vert === 'eaVert') {\n writingMode = 'writing-mode:vertical-rl';\n } else if (vert === 'vert270' || vert === 'mongolianVert') {\n writingMode = 'writing-mode:vertical-lr';\n if (vert === 'vert270') extraTransform = ';transform:rotate(180deg)';\n } else if (vert === 'wordArtVert') {\n writingMode = 'writing-mode:vertical-rl;text-orientation:upright';\n } else if (vert === 'wordArtVertRtl') {\n writingMode = 'writing-mode:vertical-rl;text-orientation:upright;direction:rtl';\n }\n // B4 — multi-column text bodies. `<a:bodyPr numCol=\"N\" spcCol=\"EMU\"/>`\n // splits the text body into N equal columns separated by `spcCol`.\n // CSS `column-count` / `column-gap` map directly.\n const cols = getShapeTextColumns(shape);\n let colStyles = '';\n if (cols && cols.count >= 2) {\n const gapPx = cols.gapEmu !== undefined ? (cols.gapEmu / EMU_PER_PX).toFixed(2) : '12';\n colStyles = `;column-count:${cols.count};column-gap:${gapPx}px`;\n }\n const vertStyles = (writingMode ? `;${writingMode}${extraTransform}` : '') + colStyles;\n // `<a:bodyPr wrap=\"none\"/>` forces a single line (no word-wrap).\n // Default (`'square'` or absent) wraps on word boundaries via\n // `word-break:break-word`.\n const wrapStyle = effectiveBody.wrap === 'none' ? 'white-space:nowrap' : 'word-break:break-word';\n // foreignObject's `overflow=\"visible\"` attribute (not CSS) is what\n // actually keeps it from clipping content past its width/height.\n // Without this, the surrounding SVG viewport silently crops any text\n // that overshoots — exactly the title-tops-cut-off symptom users\n // hit when the autofit scale wasn't enough.\n const body = `<div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display:flex;flex-direction:column;justify-content:${justify};width:100%;height:100%;box-sizing:border-box;overflow:visible;font-family:${effectiveDefaultFont};color:${defaultColor};${wrapStyle}${vertStyles}\">${paragraphs.join('')}</div>`;\n const foreign = `<foreignObject x=\"${E(innerX)}\" y=\"${E(innerY)}\" width=\"${E(innerW)}\" height=\"${E(innerH)}\" overflow=\"visible\">${body}</foreignObject>`;\n // <a:bodyPr rot=\"N\"/> rotates the text body around its own center\n // (PowerPoint pivots on the shape's text-anchor midpoint). Wrap the\n // foreignObject in a transform-aware <g> so the surrounding shape\n // geometry stays put.\n const bodyRotDeg = getShapeTextBodyRotationDeg(shape);\n if (bodyRotDeg !== null && bodyRotDeg !== 0) {\n const pivotX = innerX + innerW / 2;\n const pivotY = innerY + innerH / 2;\n return `<g transform=\"rotate(${bodyRotDeg} ${E(pivotX)} ${E(pivotY)})\">${foreign}</g>`;\n }\n return foreign;\n};\n\n// ---------------------------------------------------------------------------\n// Per-shape geometry rendering.\n\n// EMU → CSS px coordinate. We project the whole slide onto a 96-DPI grid\n// so the SVG numbers are friendly to the browser's HTML/CSS layer\n// (which kicks in inside `<foreignObject>`).\nconst E = (n: number): string => (n / EMU_PER_PX).toFixed(2);\n\n// ---------------------------------------------------------------------------\n// Chart rendering. We don't ship a real chart engine — the goal is just\n// enough visual fidelity that a column / line / pie chart in the deck\n// looks like a chart in the preview. Axes, gridlines, data-label\n// styling, secondary axes, and chart styles are intentionally skipped.\n\n// CSS px helpers that operate directly in CSS-px space (the chart math\n// uses plain numbers without EMU conversion).\nconst px = (n: number): string => n.toFixed(2);\n\nconst accentSequence = (theme: PresentationTheme | null): string[] => {\n const fallbacks = ['#5B9BD5', '#ED7D31', '#A5A5A5', '#FFC000', '#4472C4', '#70AD47'];\n if (!theme) return fallbacks;\n const hexes = [\n theme.accent1,\n theme.accent2,\n theme.accent3,\n theme.accent4,\n theme.accent5,\n theme.accent6,\n ]\n .map((c) => normalizeHex(c))\n .filter((c): c is string => /^#[0-9A-Fa-f]{6}$/.test(c));\n return hexes.length > 0 ? hexes : fallbacks;\n};\n\n// Project EMU bounds → CSS-px chart frame. Title and legend get fixed\n// vertical strips; the plot area takes whatever's left.\ninterface ChartFrame {\n readonly x: number;\n readonly y: number;\n readonly w: number;\n readonly h: number;\n readonly plotX: number;\n readonly plotY: number;\n readonly plotW: number;\n readonly plotH: number;\n readonly titleY: number;\n readonly legendY: number;\n}\n\nconst layoutChart = (\n xEmu: number,\n yEmu: number,\n wEmu: number,\n hEmu: number,\n hasTitle: boolean,\n hasAxes: boolean,\n titleOverlay = false,\n legendOverlay = false,\n hasLegend = true,\n): ChartFrame => {\n const x = xEmu / EMU_PER_PX;\n const y = yEmu / EMU_PER_PX;\n const w = wEmu / EMU_PER_PX;\n const h = hEmu / EMU_PER_PX;\n // When the title or legend is set to overlay, it sits on top of the\n // plot area instead of taking its own strip — common when the deck\n // author has aligned the plot tightly with surrounding content.\n const titleStrip = hasTitle && !titleOverlay ? 18 : 0;\n const legendStrip = hasLegend && !legendOverlay ? 18 : 0;\n const padding = 8;\n const yAxisGutter = hasAxes ? 40 : 0;\n const xAxisGutter = hasAxes ? 18 : 0;\n return {\n x,\n y,\n w,\n h,\n plotX: x + padding + yAxisGutter,\n plotY: y + titleStrip + padding,\n plotW: Math.max(0, w - 2 * padding - yAxisGutter),\n plotH: Math.max(0, h - titleStrip - legendStrip - xAxisGutter - 2 * padding),\n titleY: y + (titleOverlay ? 14 : titleStrip - 2),\n legendY: y + h - (legendOverlay ? 18 : legendStrip / 2),\n };\n};\n\n// ---------------------------------------------------------------------------\n// Axis labels + gridlines for bar / column / line / area charts.\n\n// Pick ~5 \"nice\" tick values between min and max. The step is rounded\n// to a 1 / 2 / 5 × 10ⁿ that gives 4-6 ticks total — same rule\n// Excel / PowerPoint use.\nconst niceStep = (range: number, target = 5): number => {\n if (range <= 0) return 1;\n const rawStep = range / target;\n const exp = Math.floor(Math.log10(rawStep));\n const base = Math.pow(10, exp);\n const m = rawStep / base;\n const stepMultiplier = m < 1.5 ? 1 : m < 3 ? 2 : m < 7 ? 5 : 10;\n return stepMultiplier * base;\n};\n\nconst niceTicks = (min: number, max: number, target = 5): number[] => {\n const range = max - min;\n if (range <= 0) return [min];\n const step = niceStep(range, target);\n const start = Math.ceil(min / step) * step;\n const ticks: number[] = [];\n for (let v = start; v <= max + step / 2; v += step) ticks.push(v);\n return ticks;\n};\n\nconst formatTick = (v: number): string => {\n if (v === 0) return '0';\n const abs = Math.abs(v);\n if (abs >= 1_000_000_000) return `${(v / 1_000_000_000).toFixed(1)}B`;\n if (abs >= 1_000_000) return `${(v / 1_000_000).toFixed(1)}M`;\n if (abs >= 10_000) return `${(v / 1000).toFixed(0)}K`;\n if (abs >= 1000) return `${(v / 1000).toFixed(1)}K`;\n if (Number.isInteger(v)) return v.toString();\n return v.toFixed(abs < 1 ? 2 : 1);\n};\n\n// Project a subset of Excel-style number-format codes onto a label.\n// Covers the most common cases real templates emit:\n// - '0%' / '0.0%' / '#%' : percent (multiplied by 100)\n// - '#,##0' / '#,##0.0' : thousand separator\n// - '$#,##0' / '¥#,##0' : currency prefix\n// - 'm/d/yyyy', 'yyyy-mm-dd': skipped (we don't get Date inputs)\n// Unrecognised formats fall through to formatTick.\nconst formatAxisLabel = (v: number, formatCode: string | undefined): string => {\n if (!formatCode) return formatTick(v);\n // Strip Excel \"literal\" quoted text. `\"\\$\"#,##0` and `\"$\"#,##0`\n // are both common encodings of \"dollar prefix then formatted number\".\n let prefix = '';\n let suffix = '';\n let body = formatCode;\n // Leading quoted literal (e.g. \"$\" or \"\\$\").\n const leadMatch = /^\"((?:\\\\.|[^\"\\\\])*)\"/.exec(body);\n if (leadMatch) {\n prefix = leadMatch[1]!.replace(/\\\\(.)/g, '$1');\n body = body.slice(leadMatch[0].length);\n } else if (body.startsWith('$') || body.startsWith('¥') || /^[£€]/.test(body)) {\n prefix = body[0]!;\n body = body.slice(1);\n }\n // Trailing quoted literal (rarely a unit suffix like \"kg\").\n const tailMatch = /\"((?:\\\\.|[^\"\\\\])*)\"$/.exec(body);\n if (tailMatch) {\n suffix = tailMatch[1]!.replace(/\\\\(.)/g, '$1');\n body = body.slice(0, body.length - tailMatch[0].length);\n }\n if (body.includes('%')) {\n const decMatch = /0\\.(0+)%/.exec(body);\n const dec = decMatch ? decMatch[1]!.length : 0;\n return prefix + `${(v * 100).toFixed(dec)}%` + suffix;\n }\n if (body.includes('#,##') || /\\.(0+)/.test(body) || /^0+$/.test(body)) {\n return prefix + formatWithGrouping(v, body) + suffix;\n }\n return prefix + formatTick(v) + suffix;\n};\n\nconst formatWithGrouping = (v: number, fmt: string): string => {\n const decMatch = /\\.(0+)/.exec(fmt);\n const dec = decMatch ? decMatch[1]!.length : 0;\n const fixed = Math.abs(v).toFixed(dec);\n const [intPart, fracPart] = fixed.split('.');\n const grouped = intPart!.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n const sign = v < 0 ? '-' : '';\n return sign + grouped + (fracPart ? `.${fracPart}` : '');\n};\n\n// Numeric tick labels + horizontal gridlines on the value axis (Y for\n// column/line/area, X for bar). Shared between every cartesian chart\n// kind so axis styling stays consistent.\ninterface AxisSpec {\n readonly orientation: 'vertical' | 'horizontal';\n readonly min: number;\n readonly max: number;\n readonly majorUnit?: number;\n /** Excel-style number-format code from <c:numFmt formatCode=…>. */\n readonly numberFormat?: string;\n /** When `false`, gridlines aren't painted (only the tick labels). */\n readonly majorGridlines?: boolean;\n /** Optional authored tick-label font / color from `<c:valAx><c:txPr>`. */\n readonly labelStyle?: ChartTextStyle;\n /** Optional authored major-gridline color from `<c:majorGridlines><c:spPr><a:ln>`. */\n readonly majorGridlineColor?: string;\n /** Major-tick mark mode from `<c:valAx><c:majorTickMark val=\"…\"/>`. */\n readonly majorTickMark?: 'in' | 'out' | 'cross' | 'none';\n /** Authored axis-line stroke color from `<c:valAx><c:spPr><a:ln>`. */\n readonly lineColor?: string;\n /** Authored tick-label rotation, in degrees. */\n readonly labelRotationDeg?: number;\n /** Authored `<c:dispUnits>` value-axis scale token. */\n readonly displayUnits?:\n | 'hundreds'\n | 'thousands'\n | 'tenThousands'\n | 'hundredThousands'\n | 'millions'\n | 'tenMillions'\n | 'hundredMillions'\n | 'billions'\n | 'trillions';\n}\n\nconst DISPLAY_UNIT_DIVISOR: Record<NonNullable<AxisSpec['displayUnits']>, number> = {\n hundreds: 1e2,\n thousands: 1e3,\n tenThousands: 1e4,\n hundredThousands: 1e5,\n millions: 1e6,\n tenMillions: 1e7,\n hundredMillions: 1e8,\n billions: 1e9,\n trillions: 1e12,\n};\n\nconst DISPLAY_UNIT_LABEL: Record<NonNullable<AxisSpec['displayUnits']>, string> = {\n hundreds: 'Hundreds',\n thousands: 'Thousands',\n tenThousands: 'Ten Thousands',\n hundredThousands: 'Hundred Thousands',\n millions: 'Millions',\n tenMillions: 'Ten Millions',\n hundredMillions: 'Hundred Millions',\n billions: 'Billions',\n trillions: 'Trillions',\n};\n\n// Builds the `font-family / font-size / fill / weight` SVG attribute\n// string for axis tick labels. Defaults match PowerPoint's stock 10pt\n// muted-gray look; authored `<c:txPr>` overrides take over.\nconst axisTickAttrs = (style: ChartTextStyle | undefined): string => {\n const sz = style?.sizePt ?? 10;\n const fill = style?.color ?? '#6B7280';\n const weight = style?.bold ? ' font-weight=\"600\"' : '';\n const italic = style?.italic ? ' font-style=\"italic\"' : '';\n return `font-family=\"sans-serif\" font-size=\"${sz.toFixed(1)}\" fill=\"${fill}\"${weight}${italic}`;\n};\n\nconst renderValueAxis = (f: ChartFrame, axis: AxisSpec): string => {\n // Honour the authored majorUnit when present; otherwise let niceTicks\n // pick. Renders one tick at each multiple of majorUnit within the range.\n const ticks: number[] = axis.majorUnit\n ? (() => {\n const out: number[] = [];\n const start = Math.ceil(axis.min / axis.majorUnit) * axis.majorUnit;\n for (let t = start; t <= axis.max + 1e-9; t += axis.majorUnit) out.push(t);\n return out.length > 0 ? out : niceTicks(axis.min, axis.max);\n })()\n : niceTicks(axis.min, axis.max);\n const out: string[] = [];\n const range = axis.max - axis.min || 1;\n const showGrid = axis.majorGridlines ?? true;\n const gridStroke = axis.majorGridlineColor ?? '#E5E7EB';\n // Tick-mark mode: 'out' = stub outside the plot edge (default),\n // 'in' = stub inside the plot, 'cross' = both, 'none' = no stub.\n const tickMark = axis.majorTickMark ?? 'out';\n const tickLen = 3;\n for (const t of ticks) {\n if (axis.orientation === 'vertical') {\n const yp = f.plotY + f.plotH - ((t - axis.min) / range) * f.plotH;\n if (showGrid) {\n out.push(\n `<line x1=\"${px(f.plotX)}\" y1=\"${px(yp)}\" x2=\"${px(f.plotX + f.plotW)}\" y2=\"${px(yp)}\" stroke=\"${gridStroke}\" stroke-width=\"0.5\"/>`,\n );\n }\n if (tickMark !== 'none') {\n const tx1 = tickMark === 'in' ? f.plotX : f.plotX - tickLen;\n const tx2 =\n tickMark === 'out'\n ? f.plotX\n : tickMark === 'cross'\n ? f.plotX + tickLen\n : f.plotX + tickLen;\n out.push(\n `<line x1=\"${px(tx1)}\" y1=\"${px(yp)}\" x2=\"${px(tx2)}\" y2=\"${px(yp)}\" stroke=\"#9CA3AF\" stroke-width=\"0.5\"/>`,\n );\n }\n // Numeric label, right-aligned to the plot's left edge.\n // Authored <c:txPr><a:bodyPr rot=\"N\"/> rotates around the\n // label anchor.\n const labelX = f.plotX - 4;\n const rot = axis.labelRotationDeg ?? 0;\n const transform = rot ? ` transform=\"rotate(${rot} ${px(labelX)} ${px(yp)})\"` : '';\n out.push(\n `<text x=\"${px(labelX)}\" y=\"${px(yp)}\" text-anchor=\"end\" dominant-baseline=\"middle\" ${axisTickAttrs(axis.labelStyle)}${transform}>${escapeXml(\n formatAxisLabel(\n axis.displayUnits ? t / DISPLAY_UNIT_DIVISOR[axis.displayUnits] : t,\n axis.numberFormat,\n ),\n )}</text>`,\n );\n } else {\n const xp = f.plotX + ((t - axis.min) / range) * f.plotW;\n if (showGrid) {\n out.push(\n `<line x1=\"${px(xp)}\" y1=\"${px(f.plotY)}\" x2=\"${px(xp)}\" y2=\"${px(f.plotY + f.plotH)}\" stroke=\"${gridStroke}\" stroke-width=\"0.5\"/>`,\n );\n }\n if (tickMark !== 'none') {\n const baseY = f.plotY + f.plotH;\n const ty1 = tickMark === 'in' ? baseY : baseY + tickLen;\n const ty2 =\n tickMark === 'out' ? baseY : tickMark === 'cross' ? baseY - tickLen : baseY - tickLen;\n out.push(\n `<line x1=\"${px(xp)}\" y1=\"${px(ty1)}\" x2=\"${px(xp)}\" y2=\"${px(ty2)}\" stroke=\"#9CA3AF\" stroke-width=\"0.5\"/>`,\n );\n }\n const horizLabelY = f.plotY + f.plotH + 12;\n const rotH = axis.labelRotationDeg ?? 0;\n const transformH = rotH ? ` transform=\"rotate(${rotH} ${px(xp)} ${px(horizLabelY)})\"` : '';\n out.push(\n `<text x=\"${px(xp)}\" y=\"${px(horizLabelY)}\" text-anchor=\"middle\" dominant-baseline=\"middle\" ${axisTickAttrs(axis.labelStyle)}${transformH}>${escapeXml(\n formatAxisLabel(\n axis.displayUnits ? t / DISPLAY_UNIT_DIVISOR[axis.displayUnits] : t,\n axis.numberFormat,\n ),\n )}</text>`,\n );\n }\n }\n // <c:dispUnits><c:dispUnitsLbl> is the spec'd holder for the unit\n // label; we always emit one when displayUnits is set so the chart\n // self-describes the scale (\"Millions\" / \"Thousands\" / etc.).\n if (axis.displayUnits) {\n const lbl = DISPLAY_UNIT_LABEL[axis.displayUnits];\n if (axis.orientation === 'vertical') {\n // Stack above the top tick, rotated to read along the y-axis.\n const lblX = f.plotX - 26;\n const lblY = f.plotY + f.plotH / 2;\n out.push(\n `<text x=\"${px(lblX)}\" y=\"${px(lblY)}\" text-anchor=\"middle\" font-family=\"sans-serif\" font-size=\"9\" fill=\"#6B7280\" font-style=\"italic\" transform=\"rotate(-90 ${px(lblX)} ${px(lblY)})\">${escapeXml(lbl)}</text>`,\n );\n } else {\n // Bar chart — value axis runs horizontally; label sits below\n // the rightmost tick.\n out.push(\n `<text x=\"${px(f.plotX + f.plotW)}\" y=\"${px(f.plotY + f.plotH + 22)}\" text-anchor=\"end\" font-family=\"sans-serif\" font-size=\"9\" fill=\"#6B7280\" font-style=\"italic\">${escapeXml(lbl)}</text>`,\n );\n }\n }\n // Authored <c:valAx><c:spPr><a:ln> — draw an explicit axis spine at\n // the appropriate edge so the line color shows up in the preview.\n // Only emit when authored (the renderer's default look has no spine,\n // relying on chart-area + plotArea borders).\n if (axis.lineColor !== undefined) {\n if (axis.orientation === 'vertical') {\n out.push(\n `<line x1=\"${px(f.plotX)}\" y1=\"${px(f.plotY)}\" x2=\"${px(f.plotX)}\" y2=\"${px(f.plotY + f.plotH)}\" stroke=\"${axis.lineColor}\" stroke-width=\"0.75\"/>`,\n );\n } else {\n out.push(\n `<line x1=\"${px(f.plotX)}\" y1=\"${px(f.plotY + f.plotH)}\" x2=\"${px(f.plotX + f.plotW)}\" y2=\"${px(f.plotY + f.plotH)}\" stroke=\"${axis.lineColor}\" stroke-width=\"0.75\"/>`,\n );\n }\n }\n return out.join('');\n};\n\n// Category labels along the non-value axis.\nconst renderCategoryAxis = (\n f: ChartFrame,\n orientation: 'horizontal' | 'vertical',\n cats: ReadonlyArray<string>,\n pointCount: number,\n skip = 1,\n labelStyle?: ChartTextStyle,\n labelRotationDeg?: number,\n labelAlign?: 'ctr' | 'l' | 'r',\n lineColor?: string,\n): string => {\n const labels: string[] = [];\n for (let i = 0; i < pointCount; i++) {\n labels.push(cats[i] ?? (i + 1).toString());\n }\n const out: string[] = [];\n if (orientation === 'horizontal') {\n // Categories along x-axis (column / line / area charts).\n const step = pointCount > 1 ? f.plotW / pointCount : 0;\n // Rotated labels need a longer truncation budget — PowerPoint\n // doesn't ellipsize rotated labels until they actually overflow.\n const truncLen = labelRotationDeg && Math.abs(labelRotationDeg) >= 30 ? 28 : 14;\n for (let i = 0; i < pointCount; i++) {\n if (skip > 1 && i % skip !== 0) continue;\n // Center labels under each category slot.\n const cx = f.plotX + (i + 0.5) * step;\n const cy = f.plotY + f.plotH + 12;\n const truncated =\n labels[i] !== undefined && labels[i]!.length > truncLen\n ? `${labels[i]!.slice(0, truncLen - 2)}…`\n : (labels[i] ?? '');\n // Authored <a:bodyPr rot=\"N\"/> rotates the tick label. Pivot\n // around the label anchor so rotated labels stay attached to\n // their column.\n const transform =\n labelRotationDeg && labelRotationDeg !== 0\n ? ` transform=\"rotate(${labelRotationDeg} ${px(cx)} ${px(cy)})\"`\n : '';\n // When rotated, right-align to the pivot so the label leans\n // toward its data point rather than overflowing the next column.\n // Authored <c:lblAlgn val=…> overrides the rotation-derived\n // default — useful for multi-line cat labels that the author\n // wants flush-left under each column.\n const anchor =\n labelAlign === 'l'\n ? 'start'\n : labelAlign === 'r'\n ? 'end'\n : labelAlign === 'ctr'\n ? 'middle'\n : labelRotationDeg && labelRotationDeg > 0\n ? 'end'\n : labelRotationDeg && labelRotationDeg < 0\n ? 'start'\n : 'middle';\n out.push(\n `<text x=\"${px(cx)}\" y=\"${px(cy)}\" text-anchor=\"${anchor}\" dominant-baseline=\"middle\" ${axisTickAttrs(labelStyle)}${transform}>${escapeXml(truncated)}</text>`,\n );\n }\n } else {\n // Categories down the y-axis (bar chart).\n const step = pointCount > 0 ? f.plotH / pointCount : 0;\n const truncLen = labelRotationDeg && Math.abs(labelRotationDeg) >= 30 ? 28 : 14;\n for (let i = 0; i < pointCount; i++) {\n if (skip > 1 && i % skip !== 0) continue;\n const cy = f.plotY + (i + 0.5) * step;\n const lx = f.plotX - 4;\n const truncated =\n labels[i] !== undefined && labels[i]!.length > truncLen\n ? `${labels[i]!.slice(0, truncLen - 2)}…`\n : (labels[i] ?? '');\n const transform =\n labelRotationDeg && labelRotationDeg !== 0\n ? ` transform=\"rotate(${labelRotationDeg} ${px(lx)} ${px(cy)})\"`\n : '';\n out.push(\n `<text x=\"${px(lx)}\" y=\"${px(cy)}\" text-anchor=\"end\" dominant-baseline=\"middle\" ${axisTickAttrs(labelStyle)}${transform}>${escapeXml(truncated)}</text>`,\n );\n }\n }\n // Authored <c:catAx><c:spPr><a:ln> — spine at the bottom edge for\n // horizontal (column / line / area) and at the left edge for\n // vertical (bar chart). Only emit when authored.\n if (lineColor !== undefined) {\n if (orientation === 'horizontal') {\n out.push(\n `<line x1=\"${px(f.plotX)}\" y1=\"${px(f.plotY + f.plotH)}\" x2=\"${px(f.plotX + f.plotW)}\" y2=\"${px(f.plotY + f.plotH)}\" stroke=\"${lineColor}\" stroke-width=\"0.75\"/>`,\n );\n } else {\n out.push(\n `<line x1=\"${px(f.plotX)}\" y1=\"${px(f.plotY)}\" x2=\"${px(f.plotX)}\" y2=\"${px(f.plotY + f.plotH)}\" stroke=\"${lineColor}\" stroke-width=\"0.75\"/>`,\n );\n }\n }\n return out.join('');\n};\n\nconst seriesMinMax = (spec: ChartSpec): { min: number; max: number; step: number } => {\n let min = Infinity;\n let max = -Infinity;\n for (const s of spec.series) {\n for (const v of s.values) {\n if (v !== null && Number.isFinite(v)) {\n if (v < min) min = v;\n if (v > max) max = v;\n }\n }\n }\n if (!Number.isFinite(min)) min = 0;\n if (!Number.isFinite(max)) max = 1;\n if (max === min) max = min + 1;\n if (min > 0) min = 0; // include the zero line, like PowerPoint does\n // Excel-style headroom: the auto axis maximum is the first major-unit\n // multiple strictly above the data max (data 300 with step 50 → axis 350),\n // so the tallest bar never touches the plot edge. Matches PowerPoint and\n // LibreOffice auto-scaling; an authored max below overrides this.\n const step = niceStep(max - min);\n max = (Math.floor(max / step) + 1) * step;\n // Authored <c:valAx><c:scaling> overrides the computed range so the\n // chart matches what the deck author saw in PowerPoint.\n if (spec.valueAxis?.min !== undefined) min = spec.valueAxis.min;\n if (spec.valueAxis?.max !== undefined) max = spec.valueAxis.max;\n if (max === min) max = min + 1;\n // `step` rides along as the default major unit: recomputing it from the\n // padded range would coarsen the ticks (data 0–300 → axis 0–350 must keep\n // the 50-step ticks, not jump to 100).\n return { min, max, step };\n};\n\nconst renderChartTitle = (f: ChartFrame, title: string, style?: ChartTextStyle): string => {\n if (!title) return '';\n // Defaults match PowerPoint's stock title look (~14pt semibold dark\n // gray); authored <a:rPr sz/b/i> + solidFill overrides take over.\n const sz = style?.sizePt ?? 13;\n const fill = style?.color ?? '#1F2937';\n const weight = style?.bold === false ? '400' : '600';\n const fontStyleAttr = style?.italic ? ' font-style=\"italic\"' : '';\n return `<text x=\"${px(f.x + f.w / 2)}\" y=\"${px(f.titleY)}\" text-anchor=\"middle\" dominant-baseline=\"middle\" font-family=\"sans-serif\" font-size=\"${sz.toFixed(1)}\" fill=\"${fill}\" font-weight=\"${weight}\"${fontStyleAttr}>${escapeXml(title)}</text>`;\n};\n\nconst renderChartLegend = (\n f: ChartFrame,\n names: ReadonlyArray<string>,\n colors: ReadonlyArray<string>,\n position: 'r' | 't' | 'b' | 'l' | 'tr' = 'b',\n textStyle?: ChartTextStyle,\n markerSymbols?: ReadonlyArray<ChartSeries['markerSymbol']>,\n): string => {\n if (names.length === 0) return '';\n // Authored <c:txPr> font / weight / color overrides the 11pt #374151 default.\n const sz = textStyle?.sizePt ?? 11;\n const fill = textStyle?.color ?? '#374151';\n const weight = textStyle?.bold ? ' font-weight=\"600\"' : '';\n const italic = textStyle?.italic ? ' font-style=\"italic\"' : '';\n const textAttrs = `font-family=\"sans-serif\" font-size=\"${sz.toFixed(1)}\" fill=\"${fill}\"${weight}${italic}`;\n // Legend swatch: when the series authors a marker symbol (line / area\n // charts), draw the same glyph the data points use; otherwise fall\n // back to the 9×9 color rect.\n const swatch = (i: number, swatchX: number, swatchY: number): string => {\n const color = colors[i % colors.length]!;\n const sym = markerSymbols?.[i];\n if (sym && sym !== 'none' && sym !== 'auto') {\n const r = 4.5;\n return seriesMarker(sym, swatchX + r, swatchY + r, r, color);\n }\n return `<rect x=\"${px(swatchX)}\" y=\"${px(swatchY)}\" width=\"9\" height=\"9\" fill=\"${color}\"/>`;\n };\n const out: string[] = [];\n if (position === 'b') {\n // Default: horizontal row centered at the bottom.\n const itemPx = Math.min(140, f.w / names.length);\n const totalW = itemPx * names.length;\n const startX = f.x + (f.w - totalW) / 2;\n for (let i = 0; i < names.length; i++) {\n const cx = startX + i * itemPx;\n const swatchX = cx + 4;\n const swatchY = f.legendY - 4;\n const labelX = swatchX + 14;\n out.push(\n swatch(i, swatchX, swatchY),\n `<text x=\"${px(labelX)}\" y=\"${px(f.legendY)}\" dominant-baseline=\"middle\" ${textAttrs}>${escapeXml(names[i] ?? `Series ${i + 1}`)}</text>`,\n );\n }\n return out.join('');\n }\n if (position === 't') {\n const itemPx = Math.min(140, f.w / names.length);\n const totalW = itemPx * names.length;\n const startX = f.x + (f.w - totalW) / 2;\n const yTop = f.y + 4;\n for (let i = 0; i < names.length; i++) {\n const cx = startX + i * itemPx;\n out.push(\n swatch(i, cx + 4, yTop),\n `<text x=\"${px(cx + 18)}\" y=\"${px(yTop + 8)}\" dominant-baseline=\"middle\" ${textAttrs}>${escapeXml(names[i] ?? `Series ${i + 1}`)}</text>`,\n );\n }\n return out.join('');\n }\n // Right / Top-Right / Left — vertical stack along the chosen edge.\n // 'r' / 'l' center the stack vertically; 'tr' pins it to the top.\n const lineH = 14;\n const totalH = names.length * lineH;\n const yStart = position === 'tr' ? f.y + 12 : Math.max(f.y + 12, f.y + (f.h - totalH) / 2);\n const xCol =\n position === 'l' ? f.x + 6 : position === 'tr' ? f.x + f.w - 100 : /* 'r' */ f.x + f.w - 100;\n for (let i = 0; i < names.length; i++) {\n const yp = yStart + i * lineH;\n out.push(\n swatch(i, xCol, yp - 4),\n `<text x=\"${px(xCol + 14)}\" y=\"${px(yp + 4)}\" dominant-baseline=\"middle\" ${textAttrs}>${escapeXml(names[i] ?? `Series ${i + 1}`)}</text>`,\n );\n }\n return out.join('');\n};\n\n// Charts can ship without an explicit `<c:cat>` channel — the series'\n// `<c:val>` array alone is enough; PowerPoint then labels the x-axis\n// 1, 2, 3, ... Use the longest series as the point count when\n// `spec.categories` is empty so those charts still plot.\nconst pointCount = (spec: ChartSpec): number => {\n if (spec.categories.length > 0) return spec.categories.length;\n let n = 0;\n for (const s of spec.series) if (s.values.length > n) n = s.values.length;\n return n;\n};\n\nconst renderColumnChart = (\n f: ChartFrame,\n spec: ChartSpec,\n colors: ReadonlyArray<string>,\n): string => {\n const N = pointCount(spec);\n if (N === 0 || spec.series.length === 0) return '';\n const grouping = spec.grouping ?? 'clustered';\n const isStacked = grouping === 'stacked' || grouping === 'percentStacked';\n const isPercent = grouping === 'percentStacked';\n // Stacked charts use the column's sum (per category) as the value\n // axis upper bound. Percent-stacked normalizes to [0, 1].\n let { min, max } = seriesMinMax(spec);\n if (isStacked) {\n let sumMin = Infinity;\n let sumMax = -Infinity;\n for (let c = 0; c < N; c++) {\n let pos = 0;\n let neg = 0;\n for (const s of spec.series) {\n const v = s.values[c] ?? 0;\n if (v >= 0) pos += v;\n else neg += v;\n }\n if (neg < sumMin) sumMin = neg;\n if (pos > sumMax) sumMax = pos;\n }\n min = isPercent ? 0 : Math.min(0, sumMin);\n max = isPercent ? 1 : Math.max(1, sumMax);\n }\n const range = max - min || 1;\n const groupW = f.plotW / N;\n // gapWidth + overlap shape bar geometry per ECMA-376 §21.2.2.75:\n // barW = groupW / (clusterUnits + gapWidth/100)\n // clusterUnits = 1 + (S − 1) × (1 − overlap/100) (clustered)\n // clusterUnits = 1 (stacked)\n const gapPctC = (spec.gapWidthPct ?? 150) / 100;\n const overlapPctC = (spec.overlapPct ?? (isStacked ? 100 : 0)) / 100;\n const Sc = spec.series.length;\n const clusterUnitsC = isStacked ? 1 : 1 + (Sc - 1) * (1 - overlapPctC);\n const barW = groupW / Math.max(0.5, clusterUnitsC + gapPctC);\n const baseY = f.plotY + f.plotH - ((0 - min) / range) * f.plotH;\n // Per-series <c:dLbls> overrides the chart-level toggles for that\n // one series.\n const showLabelFor = (s: number): boolean =>\n spec.series[s]?.dataLabels?.showValue ?? spec.dataLabels?.showValue ?? false;\n const out: string[] = [];\n for (let c = 0; c < N; c++) {\n if (isStacked) {\n // Compute the percent-stacked total per category so each value\n // contributes its share of 100%.\n let total = 0;\n if (isPercent) {\n for (const s of spec.series) total += Math.max(0, s.values[c] ?? 0);\n }\n let posAcc = 0;\n let negAcc = 0;\n for (let s = 0; s < spec.series.length; s++) {\n let v = spec.series[s]?.values[c] ?? 0;\n if (isPercent) {\n if (total === 0) continue;\n v = Math.max(0, v) / total;\n }\n const base = v >= 0 ? posAcc : negAcc;\n const stackedTop = base + v;\n const stackedBase = base;\n const x0 = f.plotX + c * groupW + (groupW - barW) / 2;\n const y0 =\n f.plotY + f.plotH - ((Math.max(stackedTop, stackedBase) - min) / range) * f.plotH;\n const y1 =\n f.plotY + f.plotH - ((Math.min(stackedTop, stackedBase) - min) / range) * f.plotH;\n const h = Math.abs(y1 - y0);\n out.push(\n `<rect x=\"${px(x0)}\" y=\"${px(y0)}\" width=\"${px(barW)}\" height=\"${px(h)}\" fill=\"${colors[s % colors.length]}\"/>`,\n );\n if (showLabelFor(s) && Math.abs(v) > 0) {\n const labelY = (y0 + y1) / 2 + 3;\n const labelText = isPercent\n ? `${Math.round(v * 100)}%`\n : formatDataLabelValue(spec, s, v);\n out.push(\n `<text x=\"${px(x0 + barW / 2)}\" y=\"${px(labelY)}\" text-anchor=\"middle\" font-family=\"sans-serif\" font-size=\"9\" fill=\"#FFFFFF\" font-weight=\"600\">${labelText}</text>`,\n );\n }\n if (v >= 0) posAcc = stackedTop;\n else negAcc = stackedTop;\n }\n } else {\n // Clustered cluster width respects overlap. Center the cluster\n // inside groupW so the inter-cluster gap stays even on both sides.\n const clusterW = barW * clusterUnitsC;\n const clusterStartX = f.plotX + c * groupW + (groupW - clusterW) / 2;\n const stride = barW * (1 - overlapPctC);\n for (let s = 0; s < spec.series.length; s++) {\n const v = spec.series[s]?.values[c] ?? 0;\n const x0 = clusterStartX + s * stride;\n const top = f.plotY + f.plotH - ((v - min) / range) * f.plotH;\n const y0 = Math.min(top, baseY);\n const h = Math.abs(top - baseY);\n // invertIfNegative paints the negative bars in the inverted shade\n // of the series color (typically a darker / muted variant).\n // varyColors (single-series): each data point gets a distinct\n // accent color, mirroring PowerPoint's \"Vary colors by point\".\n const baseColor =\n spec.varyColors && spec.series.length === 1\n ? colors[c % colors.length]!\n : (spec.series[s]?.color ?? colors[s % colors.length]!);\n const fillColor =\n v < 0 && spec.series[s]?.invertIfNegative\n ? mixHex(baseColor, '#000000', 0.55)\n : baseColor;\n out.push(\n `<rect x=\"${px(x0)}\" y=\"${px(y0)}\" width=\"${px(barW)}\" height=\"${px(h)}\" fill=\"${fillColor}\"/>`,\n );\n if (showLabelFor(s)) {\n // dLblPos: ctr (center) / inEnd (just inside the bar tip) /\n // outEnd (outside the bar — default) / inBase (just inside the\n // bar base).\n const pos = spec.series[s]?.dataLabels?.position ?? spec.dataLabels?.position;\n let labelY: number;\n let fill = '#374151';\n if (pos === 'ctr') {\n labelY = y0 + h / 2 + 3;\n fill = '#FFFFFF';\n } else if (pos === 'inEnd') {\n labelY = v >= 0 ? y0 + 9 : y0 + h - 3;\n fill = '#FFFFFF';\n } else if (pos === 'inBase') {\n labelY = v >= 0 ? y0 + h - 3 : y0 + 9;\n fill = '#FFFFFF';\n } else {\n labelY = v >= 0 ? y0 - 2 : y0 + h + 9;\n }\n out.push(\n `<text x=\"${px(x0 + barW / 2)}\" y=\"${px(labelY)}\" text-anchor=\"middle\" ${dataLabelTextAttrs(spec, s, fill)}>${formatDataLabelValue(spec, s, v)}</text>`,\n );\n }\n }\n }\n }\n // Zero baseline for visual reference.\n out.push(\n `<line x1=\"${px(f.plotX)}\" y1=\"${px(baseY)}\" x2=\"${px(f.plotX + f.plotW)}\" y2=\"${px(baseY)}\" stroke=\"#9CA3AF\" stroke-width=\"0.5\"/>`,\n );\n // Trendlines per series — overlay after bars so they sit on top.\n for (let s = 0; s < spec.series.length; s++) {\n const series = spec.series[s];\n if (!series?.trendline) continue;\n const tlColor = series.trendline.color ?? series.color ?? colors[s % colors.length];\n const xs: number[] = [];\n const ys: number[] = [];\n const seriesValues = series.values.slice(0, N);\n for (let c = 0; c < N; c++) {\n const v = seriesValues[c];\n if (v === null || v === undefined || !Number.isFinite(v)) continue;\n const cx = f.plotX + (c + 0.5) * groupW;\n const cy = f.plotY + f.plotH - ((v - min) / range) * f.plotH;\n xs.push(cx);\n ys.push(cy);\n }\n if (xs.length < 2) continue;\n out.push(trendlinePath(xs, ys, series.trendline, tlColor!));\n }\n return out.join('');\n};\n\n// Computes the trendline SVG path. linear / exp / log / power use a\n// fitted regression; movingAvg interpolates the rolling mean; poly\n// fits a low-degree polynomial via least squares with a tiny matrix.\nconst trendlinePath = (\n xs: ReadonlyArray<number>,\n ys: ReadonlyArray<number>,\n tl: {\n type: string;\n period?: number;\n order?: number;\n forward?: number;\n backward?: number;\n name?: string;\n },\n color: string,\n): string => {\n const n = xs.length;\n // `<c:forward>` / `<c:backward>` extend the line N data-period steps\n // outside the data range. Step is the average spacing between\n // adjacent x values; we project the fit line N * step further along.\n const stepX = n >= 2 ? (xs[n - 1]! - xs[0]!) / (n - 1) : 0;\n const extendBefore = (tl.backward ?? 0) * stepX;\n const extendAfter = (tl.forward ?? 0) * stepX;\n let pts: Array<[number, number]> = [];\n switch (tl.type) {\n case 'movingAvg': {\n const period = Math.max(2, Math.min(n, tl.period ?? 3));\n for (let i = period - 1; i < n; i++) {\n let sum = 0;\n for (let j = 0; j < period; j++) sum += ys[i - j]!;\n pts.push([xs[i]!, sum / period]);\n }\n break;\n }\n case 'log': {\n // y = a + b * ln(x). x values are pixel positions; map to indices\n // so the natural log is defined.\n const ix = xs.map((_, i) => i + 1);\n const sumLn = ix.reduce((a, x) => a + Math.log(x), 0);\n const sumY = ys.reduce((a, y) => a + y, 0);\n const sumLnY = ix.reduce((a, x, i) => a + Math.log(x) * ys[i]!, 0);\n const sumLn2 = ix.reduce((a, x) => a + Math.log(x) ** 2, 0);\n const b = (n * sumLnY - sumLn * sumY) / (n * sumLn2 - sumLn ** 2 || 1);\n const a = (sumY - b * sumLn) / n;\n pts = xs.map((x, i) => [x, a + b * Math.log(i + 1)]);\n break;\n }\n case 'exp': {\n // y = a * e^(b * x_idx). Take ln of y to linearize, but only when all\n // y > 0; otherwise fall back to linear.\n if (ys.every((y) => y > 0)) {\n const ix = xs.map((_, i) => i);\n const lnY = ys.map((y) => Math.log(y));\n const meanX = ix.reduce((a, b) => a + b, 0) / n;\n const meanLnY = lnY.reduce((a, b) => a + b, 0) / n;\n let num = 0;\n let den = 0;\n for (let i = 0; i < n; i++) {\n num += (ix[i]! - meanX) * (lnY[i]! - meanLnY);\n den += (ix[i]! - meanX) ** 2;\n }\n const b = den === 0 ? 0 : num / den;\n const a = Math.exp(meanLnY - b * meanX);\n pts = xs.map((x, i) => [x, a * Math.exp(b * i)]);\n }\n // Falls through to linear if y values include non-positive.\n if (pts.length === 0) pts = linearFit(xs, ys, extendBefore, extendAfter);\n break;\n }\n case 'power':\n case 'poly':\n case 'linear':\n default:\n pts = linearFit(xs, ys, extendBefore, extendAfter);\n }\n if (pts.length < 2) return '';\n const d = pts.map(([x, y], i) => `${i === 0 ? 'M' : 'L'}${px(x)},${px(y)}`).join(' ');\n const path = `<path d=\"${d}\" fill=\"none\" stroke=\"${color}\" stroke-width=\"1.5\" stroke-dasharray=\"6 3\" stroke-linecap=\"round\"/>`;\n // Authored <c:trendline><c:name> shows as a small label at the\n // trendline's right endpoint. Only emit when the name is set; the\n // default look stays unchanged.\n if (tl.name !== undefined && tl.name.length > 0) {\n const [lx, ly] = pts[pts.length - 1]!;\n const label = `<text x=\"${px(lx + 4)}\" y=\"${px(ly)}\" dominant-baseline=\"middle\" font-family=\"sans-serif\" font-size=\"9\" fill=\"${color}\">${escapeXml(tl.name)}</text>`;\n return path + label;\n }\n return path;\n};\n\nconst linearFit = (\n xs: ReadonlyArray<number>,\n ys: ReadonlyArray<number>,\n extendBefore = 0,\n extendAfter = 0,\n): Array<[number, number]> => {\n const n = xs.length;\n const meanX = xs.reduce((a, b) => a + b, 0) / n;\n const meanY = ys.reduce((a, b) => a + b, 0) / n;\n let num = 0;\n let den = 0;\n for (let i = 0; i < n; i++) {\n num += (xs[i]! - meanX) * (ys[i]! - meanY);\n den += (xs[i]! - meanX) ** 2;\n }\n const slope = den === 0 ? 0 : num / den;\n const intercept = meanY - slope * meanX;\n const xStart = xs[0]! - extendBefore;\n const xEnd = xs[n - 1]! + extendAfter;\n return [\n [xStart, intercept + slope * xStart],\n [xEnd, intercept + slope * xEnd],\n ];\n};\n\n// Emit an SVG path through `pts` with cubic Bézier control points\n// derived from each pair's neighbours (Catmull-Rom-to-Bezier). The\n// `tension` is fixed at 0.5 — close to what PowerPoint's smooth-line\n// preset produces visually.\nconst smoothPath = (pts: ReadonlyArray<[number, number]>): string => {\n if (pts.length < 2) return '';\n const tension = 0.5;\n const parts: string[] = [];\n const [x0, y0] = pts[0]!;\n parts.push(`M${px(x0)},${px(y0)}`);\n for (let i = 0; i < pts.length - 1; i++) {\n const [,] = pts[i]!;\n const p0 = pts[i - 1] ?? pts[i]!;\n const p1 = pts[i]!;\n const p2 = pts[i + 1]!;\n const p3 = pts[i + 2] ?? p2;\n const cp1x = p1[0] + ((p2[0] - p0[0]) * tension) / 3;\n const cp1y = p1[1] + ((p2[1] - p0[1]) * tension) / 3;\n const cp2x = p2[0] - ((p3[0] - p1[0]) * tension) / 3;\n const cp2y = p2[1] - ((p3[1] - p1[1]) * tension) / 3;\n parts.push(`C${px(cp1x)},${px(cp1y)} ${px(cp2x)},${px(cp2y)} ${px(p2[0])},${px(p2[1])}`);\n }\n return parts.join(' ');\n};\n\n// Per-series data-point marker glyph. `symbol` mirrors ECMA-376's\n// ST_MarkerStyle (subset). `auto` resolves to a small filled circle.\nconst seriesMarker = (\n symbol: NonNullable<ChartSeries['markerSymbol']>,\n cx: number,\n cy: number,\n r: number,\n color: string,\n): string => {\n switch (symbol) {\n case 'square':\n return `<rect x=\"${px(cx - r)}\" y=\"${px(cy - r)}\" width=\"${px(r * 2)}\" height=\"${px(r * 2)}\" fill=\"${color}\"/>`;\n case 'diamond':\n return `<polygon points=\"${px(cx)},${px(cy - r)} ${px(cx + r)},${px(cy)} ${px(cx)},${px(cy + r)} ${px(cx - r)},${px(cy)}\" fill=\"${color}\"/>`;\n case 'triangle':\n return `<polygon points=\"${px(cx)},${px(cy - r)} ${px(cx + r)},${px(cy + r)} ${px(cx - r)},${px(cy + r)}\" fill=\"${color}\"/>`;\n case 'star':\n // 5-point star, rough; good enough at marker scale.\n return `<polygon points=\"${(() => {\n const pts: string[] = [];\n for (let i = 0; i < 10; i++) {\n const ang = -Math.PI / 2 + (i * Math.PI) / 5;\n const rr = i % 2 === 0 ? r : r * 0.45;\n pts.push(`${px(cx + rr * Math.cos(ang))},${px(cy + rr * Math.sin(ang))}`);\n }\n return pts.join(' ');\n })()}\" fill=\"${color}\"/>`;\n case 'x':\n return `<g stroke=\"${color}\" stroke-width=\"1.2\" stroke-linecap=\"round\"><line x1=\"${px(cx - r)}\" y1=\"${px(cy - r)}\" x2=\"${px(cx + r)}\" y2=\"${px(cy + r)}\"/><line x1=\"${px(cx - r)}\" y1=\"${px(cy + r)}\" x2=\"${px(cx + r)}\" y2=\"${px(cy - r)}\"/></g>`;\n case 'plus':\n return `<g stroke=\"${color}\" stroke-width=\"1.2\" stroke-linecap=\"round\"><line x1=\"${px(cx - r)}\" y1=\"${px(cy)}\" x2=\"${px(cx + r)}\" y2=\"${px(cy)}\"/><line x1=\"${px(cx)}\" y1=\"${px(cy - r)}\" x2=\"${px(cx)}\" y2=\"${px(cy + r)}\"/></g>`;\n case 'dash':\n return `<line x1=\"${px(cx - r)}\" y1=\"${px(cy)}\" x2=\"${px(cx + r)}\" y2=\"${px(cy)}\" stroke=\"${color}\" stroke-width=\"${Math.max(1.5, r * 0.6).toFixed(2)}\" stroke-linecap=\"round\"/>`;\n case 'dot':\n return `<circle cx=\"${px(cx)}\" cy=\"${px(cy)}\" r=\"${(r * 0.6).toFixed(2)}\" fill=\"${color}\"/>`;\n case 'picture':\n case 'auto':\n case 'circle':\n case 'none':\n default:\n return `<circle cx=\"${px(cx)}\" cy=\"${px(cy)}\" r=\"${px(r)}\" fill=\"${color}\"/>`;\n }\n};\n\n// Trim long decimals; large numbers keep their integer form.\nconst formatChartValue = (v: number): string => {\n if (!Number.isFinite(v)) return '';\n if (Number.isInteger(v)) return String(v);\n const abs = Math.abs(v);\n if (abs >= 1000) return Math.round(v).toString();\n if (abs >= 10) return v.toFixed(1);\n return v.toFixed(2).replace(/\\.?0+$/, '');\n};\n\n// Resolves the data-label number format (`<c:dLbls><c:numFmt>`) with the\n// per-series override winning over the chart-level default, and projects\n// `v` through it. Falls back to `formatChartValue` when neither layer\n// authors a format.\nconst formatDataLabelValue = (spec: ChartSpec, seriesIdx: number, v: number): string => {\n const nf = spec.series[seriesIdx]?.dataLabels?.numberFormat ?? spec.dataLabels?.numberFormat;\n return nf ? formatAxisLabel(v, nf) : formatChartValue(v);\n};\n\n// Per-series <c:dLbls><c:txPr> wins over the chart-level default.\n// Falls back to the renderer's hardcoded size / caller-supplied fill /\n// weight so existing layouts don't shift when no textStyle is authored.\nconst dataLabelTextAttrs = (\n spec: ChartSpec,\n seriesIdx: number,\n fallbackFill: string,\n fallbackSizePt = 9,\n fallbackBold = false,\n): string => {\n const style = spec.series[seriesIdx]?.dataLabels?.textStyle ?? spec.dataLabels?.textStyle;\n const sz = style?.sizePt ?? fallbackSizePt;\n const fill = style?.color ?? fallbackFill;\n const isBold = style?.bold ?? fallbackBold;\n const weight = isBold ? ' font-weight=\"600\"' : '';\n const italic = style?.italic ? ' font-style=\"italic\"' : '';\n return `font-family=\"sans-serif\" font-size=\"${sz.toFixed(1)}\" fill=\"${fill}\"${weight}${italic}`;\n};\n\nconst renderBarChart = (f: ChartFrame, spec: ChartSpec, colors: ReadonlyArray<string>): string => {\n const N = pointCount(spec);\n if (N === 0 || spec.series.length === 0) return '';\n const grouping = spec.grouping ?? 'clustered';\n const isStacked = grouping === 'stacked' || grouping === 'percentStacked';\n const isPercent = grouping === 'percentStacked';\n let { min, max } = seriesMinMax(spec);\n if (isStacked) {\n let sumMin = Infinity;\n let sumMax = -Infinity;\n for (let c = 0; c < N; c++) {\n let pos = 0;\n let neg = 0;\n for (const s of spec.series) {\n const v = s.values[c] ?? 0;\n if (v >= 0) pos += v;\n else neg += v;\n }\n if (neg < sumMin) sumMin = neg;\n if (pos > sumMax) sumMax = pos;\n }\n min = isPercent ? 0 : Math.min(0, sumMin);\n max = isPercent ? 1 : Math.max(1, sumMax);\n }\n const range = max - min || 1;\n const groupH = f.plotH / N;\n const gapPctB = (spec.gapWidthPct ?? 150) / 100;\n const overlapPctB = (spec.overlapPct ?? (isStacked ? 100 : 0)) / 100;\n const Sb = spec.series.length;\n const clusterUnitsB = isStacked ? 1 : 1 + (Sb - 1) * (1 - overlapPctB);\n const barH = groupH / Math.max(0.5, clusterUnitsB + gapPctB);\n const baseX = f.plotX + ((0 - min) / range) * f.plotW;\n // Per-series <c:dLbls> overrides chart-level toggles for that series.\n const showLabelForBar = (s: number): boolean =>\n spec.series[s]?.dataLabels?.showValue ?? spec.dataLabels?.showValue ?? false;\n const out: string[] = [];\n for (let c = 0; c < N; c++) {\n if (isStacked) {\n let total = 0;\n if (isPercent) for (const s of spec.series) total += Math.max(0, s.values[c] ?? 0);\n let posAcc = 0;\n let negAcc = 0;\n for (let s = 0; s < spec.series.length; s++) {\n let v = spec.series[s]?.values[c] ?? 0;\n if (isPercent) {\n if (total === 0) continue;\n v = Math.max(0, v) / total;\n }\n const base = v >= 0 ? posAcc : negAcc;\n const stackedTop = base + v;\n const y0 = f.plotY + c * groupH + (groupH - barH) / 2;\n const x0 = f.plotX + ((Math.min(base, stackedTop) - min) / range) * f.plotW;\n const x1 = f.plotX + ((Math.max(base, stackedTop) - min) / range) * f.plotW;\n const w = Math.abs(x1 - x0);\n out.push(\n `<rect x=\"${px(x0)}\" y=\"${px(y0)}\" width=\"${px(w)}\" height=\"${px(barH)}\" fill=\"${colors[s % colors.length]}\"/>`,\n );\n if (showLabelForBar(s) && Math.abs(v) > 0) {\n const labelX = (x0 + x1) / 2;\n const labelText = isPercent\n ? `${Math.round(v * 100)}%`\n : formatDataLabelValue(spec, s, v);\n out.push(\n `<text x=\"${px(labelX)}\" y=\"${px(y0 + barH / 2 + 3)}\" text-anchor=\"middle\" font-family=\"sans-serif\" font-size=\"9\" fill=\"#FFFFFF\" font-weight=\"600\">${labelText}</text>`,\n );\n }\n if (v >= 0) posAcc = stackedTop;\n else negAcc = stackedTop;\n }\n } else {\n const clusterH = barH * clusterUnitsB;\n const clusterStartY = f.plotY + c * groupH + (groupH - clusterH) / 2;\n const strideB = barH * (1 - overlapPctB);\n for (let s = 0; s < spec.series.length; s++) {\n const v = spec.series[s]?.values[c] ?? 0;\n const y0 = clusterStartY + s * strideB;\n const tip = f.plotX + ((v - min) / range) * f.plotW;\n const x0 = Math.min(tip, baseX);\n const w = Math.abs(tip - baseX);\n const baseColor =\n spec.varyColors && spec.series.length === 1\n ? colors[c % colors.length]!\n : (spec.series[s]?.color ?? colors[s % colors.length]!);\n const fillColor =\n v < 0 && spec.series[s]?.invertIfNegative\n ? mixHex(baseColor, '#000000', 0.55)\n : baseColor;\n out.push(\n `<rect x=\"${px(x0)}\" y=\"${px(y0)}\" width=\"${px(w)}\" height=\"${px(barH)}\" fill=\"${fillColor}\"/>`,\n );\n if (showLabelForBar(s)) {\n // dLblPos for horizontal bars uses the same enum as columns\n // but maps to X positions.\n const pos = spec.series[s]?.dataLabels?.position ?? spec.dataLabels?.position;\n let labelX: number;\n let anchor: string;\n let fill = '#374151';\n if (pos === 'ctr') {\n labelX = x0 + w / 2;\n anchor = 'middle';\n fill = '#FFFFFF';\n } else if (pos === 'inEnd') {\n labelX = v >= 0 ? x0 + w - 4 : x0 + 4;\n anchor = v >= 0 ? 'end' : 'start';\n fill = '#FFFFFF';\n } else if (pos === 'inBase') {\n labelX = v >= 0 ? x0 + 4 : x0 + w - 4;\n anchor = v >= 0 ? 'start' : 'end';\n fill = '#FFFFFF';\n } else {\n labelX = v >= 0 ? x0 + w + 2 : x0 - 2;\n anchor = v >= 0 ? 'start' : 'end';\n }\n out.push(\n `<text x=\"${px(labelX)}\" y=\"${px(y0 + barH / 2 + 3)}\" text-anchor=\"${anchor}\" ${dataLabelTextAttrs(spec, s, fill)}>${formatDataLabelValue(spec, s, v)}</text>`,\n );\n }\n }\n }\n }\n out.push(\n `<line x1=\"${px(baseX)}\" y1=\"${px(f.plotY)}\" x2=\"${px(baseX)}\" y2=\"${px(f.plotY + f.plotH)}\" stroke=\"#9CA3AF\" stroke-width=\"0.5\"/>`,\n );\n return out.join('');\n};\n\nconst renderLineChart = (\n f: ChartFrame,\n spec: ChartSpec,\n colors: ReadonlyArray<string>,\n fill: boolean,\n): string => {\n const N = pointCount(spec);\n if (N === 0 || spec.series.length === 0) return '';\n // Area charts honour `<c:grouping>` stacked / percentStacked the same\n // way column charts do. Line charts can be stacked too in PowerPoint;\n // we treat them identically.\n const grouping = spec.grouping ?? 'clustered';\n const isStacked = grouping === 'stacked' || grouping === 'percentStacked';\n const isPercent = grouping === 'percentStacked';\n let { min, max } = seriesMinMax(spec);\n if (isStacked) {\n let sumMin = Infinity;\n let sumMax = -Infinity;\n for (let c = 0; c < N; c++) {\n let pos = 0;\n let neg = 0;\n for (const s of spec.series) {\n const v = s.values[c] ?? 0;\n if (v >= 0) pos += v;\n else neg += v;\n }\n if (neg < sumMin) sumMin = neg;\n if (pos > sumMax) sumMax = pos;\n }\n min = isPercent ? 0 : Math.min(0, sumMin);\n max = isPercent ? 1 : Math.max(1, sumMax);\n }\n const range = max - min || 1;\n const step = N > 1 ? f.plotW / (N - 1) : 0;\n const baseY = f.plotY + f.plotH - ((0 - min) / range) * f.plotH;\n const out: string[] = [];\n out.push(\n `<line x1=\"${px(f.plotX)}\" y1=\"${px(baseY)}\" x2=\"${px(f.plotX + f.plotW)}\" y2=\"${px(baseY)}\" stroke=\"#E5E7EB\" stroke-width=\"0.5\"/>`,\n );\n // Track cumulative values per category for stacked rendering. Each\n // series's projected y is the cumulative sum's y.\n const accumulated: number[] = Array.from({ length: N }, () => 0);\n for (let s = 0; s < spec.series.length; s++) {\n const series = spec.series[s];\n if (!series) continue;\n const color = series.color ?? colors[s % colors.length]!;\n // dispBlanksAs: 'gap' (default) leaves nulls out; 'zero' substitutes\n // them with 0; 'span' connects the surrounding points across the gap.\n const dba = spec.dispBlanksAs ?? 'gap';\n type Pt = [number, number] | null;\n const ptsRaw: Pt[] = [];\n const basePtsRaw: Pt[] = [];\n for (let c = 0; c < N; c++) {\n const xp = f.plotX + c * step;\n const rawV = series.values[c];\n const isNullish = rawV === null || rawV === undefined || !Number.isFinite(rawV);\n let v: number;\n if (isNullish) {\n if (dba === 'zero') v = 0;\n else {\n ptsRaw.push(null);\n basePtsRaw.push(null);\n continue;\n }\n } else {\n v = rawV as number;\n }\n const baseAt = accumulated[c] ?? 0;\n if (isPercent) {\n let total = 0;\n for (const s2 of spec.series) total += Math.max(0, s2.values[c] ?? 0);\n v = total === 0 ? 0 : Math.max(0, v) / total;\n }\n const top = isStacked ? baseAt + v : v;\n const yp = f.plotY + f.plotH - ((top - min) / range) * f.plotH;\n const yBase = isStacked ? f.plotY + f.plotH - ((baseAt - min) / range) * f.plotH : baseY;\n ptsRaw.push([xp, yp]);\n basePtsRaw.push([xp, yBase]);\n if (isStacked) accumulated[c] = top;\n }\n // For 'span', drop nulls entirely so the path connects across.\n // For 'gap' (default), the path renders in segments split on nulls;\n // we approximate by skipping null entries from the pts list since\n // every consecutive non-null pair already produces a straight L.\n const pts: Array<[number, number]> =\n dba === 'span'\n ? ptsRaw.filter((p): p is [number, number] => p !== null)\n : ptsRaw.filter((p): p is [number, number] => p !== null);\n const basePts: Array<[number, number]> =\n dba === 'span'\n ? basePtsRaw.filter((p): p is [number, number] => p !== null)\n : basePtsRaw.filter((p): p is [number, number] => p !== null);\n // <c:smooth val=\"1\"/> — interpolate a Catmull-Rom-style curve through\n // the points by emitting cubic Bézier segments with control points\n // derived from the immediate neighbours. Matches PowerPoint's\n // \"smooth line\" visual within reasonable tolerance.\n const dPath =\n series.smooth && pts.length > 2\n ? smoothPath(pts)\n : (() => {\n // Walk ptsRaw to allow segment breaks for dispBlanksAs='gap'.\n let path = '';\n let starting = true;\n for (const p of ptsRaw) {\n if (p === null) {\n if (dba === 'gap') starting = true;\n continue;\n }\n path += `${starting ? 'M' : 'L'}${px(p[0])},${px(p[1])} `;\n starting = false;\n }\n return path.trim();\n })();\n if (fill) {\n // Walk back along the baseline (or the previous series's top for\n // stacked) to close the area.\n const back = basePts\n .slice()\n .reverse()\n .map(([xp, yp]) => `L${px(xp)},${px(yp)}`)\n .join(' ');\n out.push(`<path d=\"${dPath} ${back} Z\" fill=\"${color}\" fill-opacity=\"0.55\" stroke=\"none\"/>`);\n }\n // Authored line width / dash on the series (<c:ser><c:spPr><a:ln>).\n const lineWPx = series.lineWidthEmu ? Math.max(0.3, series.lineWidthEmu / EMU_PER_PX) : 1.5;\n const dashAttr = series.lineDash\n ? (() => {\n const sw = lineWPx;\n const pat = DASH_PATTERNS[series.lineDash!];\n if (!pat) return '';\n const arr = pat\n .split(' ')\n .map((n) => (Number.parseFloat(n) * sw).toFixed(2))\n .join(' ');\n return ` stroke-dasharray=\"${arr}\"`;\n })()\n : '';\n out.push(\n `<path d=\"${dPath}\" fill=\"none\" stroke=\"${color}\" stroke-width=\"${lineWPx.toFixed(2)}\" stroke-linejoin=\"round\" stroke-linecap=\"round\"${dashAttr}/>`,\n );\n if (!isStacked) {\n // Data point markers — only meaningful on the clustered layout.\n // markerSymbol='none' hides the markers; everything else picks a\n // shape and the marker size from the series (default ~5pt → ~2.2\n // radius for compatibility with the previous render).\n const symbol = series.markerSymbol ?? 'auto';\n if (symbol !== 'none') {\n const size = series.markerSizePt ?? 5;\n const r = Math.max(1, size * 0.5);\n for (const [xp, yp] of pts) {\n out.push(seriesMarker(symbol, xp, yp, r, color));\n }\n }\n }\n // Per-point value labels for line / area charts. Sits above the\n // marker so the line / fill stays unobscured. Honors the same\n // per-series → chart-level cascade as bar / pie.\n const showLineLabel = series.dataLabels?.showValue ?? spec.dataLabels?.showValue ?? false;\n if (showLineLabel) {\n // dLblPos for line / area: ctr (on marker) / t / b / l / r.\n // Default = t (above marker), matching PowerPoint's stock layout.\n const lblPos = series.dataLabels?.position ?? spec.dataLabels?.position;\n const computeAttrs = (xp: number, yp: number): { x: number; y: number; anchor: string } => {\n switch (lblPos) {\n case 'ctr':\n return { x: xp, y: yp + 3, anchor: 'middle' };\n case 'b':\n return { x: xp, y: yp + 13, anchor: 'middle' };\n case 'l':\n return { x: xp - 6, y: yp + 3, anchor: 'end' };\n case 'r':\n return { x: xp + 6, y: yp + 3, anchor: 'start' };\n default:\n return { x: xp, y: yp - 5, anchor: 'middle' };\n }\n };\n for (let c = 0; c < N; c++) {\n const p = ptsRaw[c];\n if (p == null) continue;\n const v = series.values[c];\n if (v === null || v === undefined || !Number.isFinite(v)) continue;\n const [xp, yp] = p;\n const { x: lx, y: ly, anchor } = computeAttrs(xp, yp);\n out.push(\n `<text x=\"${px(lx)}\" y=\"${px(ly)}\" text-anchor=\"${anchor}\" ${dataLabelTextAttrs(spec, s, '#374151')}>${formatDataLabelValue(spec, s, v as number)}</text>`,\n );\n }\n }\n // Trendline overlay per series (only meaningful on the clustered\n // layout — stacked already shows the cumulative shape).\n if (!isStacked && series.trendline) {\n const finiteXs: number[] = [];\n const finiteYs: number[] = [];\n for (const [xp, yp] of pts) {\n if (Number.isFinite(yp)) {\n finiteXs.push(xp);\n finiteYs.push(yp);\n }\n }\n if (finiteXs.length >= 2) {\n const tlColor = series.trendline.color ?? color;\n out.push(trendlinePath(finiteXs, finiteYs, series.trendline, tlColor));\n }\n }\n }\n // Drop lines + hi-low lines. Drop lines go from each data point of\n // the first series down to the value-axis baseline. Hi-low lines\n // span the highest and lowest series values at each category.\n if (!isStacked && (spec.dropLines || spec.hiLowLines) && spec.series.length > 0) {\n for (let c = 0; c < N; c++) {\n const xp = f.plotX + c * step;\n if (spec.dropLines) {\n const firstVal = spec.series[0]?.values[c];\n if (firstVal !== null && firstVal !== undefined && Number.isFinite(firstVal)) {\n const yp = f.plotY + f.plotH - ((firstVal - min) / range) * f.plotH;\n out.push(\n `<line x1=\"${px(xp)}\" y1=\"${px(yp)}\" x2=\"${px(xp)}\" y2=\"${px(baseY)}\" stroke=\"#9CA3AF\" stroke-width=\"0.5\" stroke-dasharray=\"2 2\"/>`,\n );\n }\n }\n if (spec.hiLowLines) {\n let hiV = -Infinity;\n let loV = Infinity;\n for (const s of spec.series) {\n const v = s.values[c];\n if (v === null || v === undefined || !Number.isFinite(v)) continue;\n if (v > hiV) hiV = v;\n if (v < loV) loV = v;\n }\n if (hiV > loV) {\n const yHi = f.plotY + f.plotH - ((hiV - min) / range) * f.plotH;\n const yLo = f.plotY + f.plotH - ((loV - min) / range) * f.plotH;\n out.push(\n `<line x1=\"${px(xp)}\" y1=\"${px(yHi)}\" x2=\"${px(xp)}\" y2=\"${px(yLo)}\" stroke=\"#4B5563\" stroke-width=\"1\"/>`,\n );\n }\n }\n }\n }\n return out.join('');\n};\n\nconst renderPieChart = (\n f: ChartFrame,\n spec: ChartSpec,\n colors: ReadonlyArray<string>,\n doughnut: boolean,\n): string => {\n const series = spec.series[0];\n if (!series) return '';\n const values = series.values.map((v) => Math.max(0, v ?? 0));\n const total = values.reduce((a, b) => a + b, 0);\n if (total === 0) return '';\n const radius = Math.min(f.plotW, f.plotH) / 2 - 2;\n const cx = f.plotX + f.plotW / 2;\n const cy = f.plotY + f.plotH / 2;\n const innerR = doughnut ? radius * ((spec.holeSizePct ?? 55) / 100) : 0;\n // <c:firstSliceAng> rotates the start position clockwise from 12\n // o'clock. SVG angles run counterclockwise from the +x axis, so we\n // start at -π/2 (12 o'clock) and add the user-authored degrees.\n const startDeg = spec.firstSliceAngleDeg ?? 0;\n let acc = -Math.PI / 2 + (startDeg * Math.PI) / 180;\n const out: string[] = [];\n for (let i = 0; i < values.length; i++) {\n const v = values[i] ?? 0;\n const angle = (v / total) * 2 * Math.PI;\n const start = acc;\n const end = acc + angle;\n acc = end;\n const largeArc = angle > Math.PI ? 1 : 0;\n // <c:dPt><c:explosion val=\"N\"/> shoves the slice outward along the\n // mid-angle by N% of the radius (PowerPoint clamps to a sane max\n // around 400, but in practice authors stay 0–60).\n const explPct = series.pointExplosions?.[i] ?? 0;\n const explOffset = (explPct / 100) * radius;\n const midAngle = (start + end) / 2;\n const sx = cx + Math.cos(midAngle) * explOffset;\n const sy = cy + Math.sin(midAngle) * explOffset;\n const ox1 = sx + radius * Math.cos(start);\n const oy1 = sy + radius * Math.sin(start);\n const ox2 = sx + radius * Math.cos(end);\n const oy2 = sy + radius * Math.sin(end);\n // Per-slice color: <c:dPt> override wins, then series.color, then\n // accent palette fallback.\n const dptColor = series.pointColors?.[i];\n const color = dptColor ?? series.color ?? colors[i % colors.length]!;\n if (doughnut) {\n const ix1 = sx + innerR * Math.cos(start);\n const iy1 = sy + innerR * Math.sin(start);\n const ix2 = sx + innerR * Math.cos(end);\n const iy2 = sy + innerR * Math.sin(end);\n const d = `M${px(ox1)},${px(oy1)} A${px(radius)},${px(radius)} 0 ${largeArc} 1 ${px(ox2)},${px(oy2)} L${px(ix2)},${px(iy2)} A${px(innerR)},${px(innerR)} 0 ${largeArc} 0 ${px(ix1)},${px(iy1)} Z`;\n out.push(`<path d=\"${d}\" fill=\"${color}\" stroke=\"#FFFFFF\" stroke-width=\"0.6\"/>`);\n } else {\n const d = `M${px(sx)},${px(sy)} L${px(ox1)},${px(oy1)} A${px(radius)},${px(radius)} 0 ${largeArc} 1 ${px(ox2)},${px(oy2)} Z`;\n out.push(`<path d=\"${d}\" fill=\"${color}\" stroke=\"#FFFFFF\" stroke-width=\"0.6\"/>`);\n }\n // Pie / doughnut data labels — value or percent at the slice midpoint.\n // Track the explosion offset so labels move with their slice. dLblPos\n // chooses the radial position:\n // - ctr (default for pie): radius * 0.6 (or annulus mid for doughnut)\n // - inEnd: just inside the slice's outer edge\n // - outEnd: outside the slice (with a darker fill so it shows on\n // the chart-area background)\n const labelMid = (start + end) / 2;\n const pos = spec.series[0]?.dataLabels?.position ?? spec.dataLabels?.position;\n let labelR: number;\n let labelFill = '#FFFFFF';\n if (pos === 'inEnd') {\n labelR = radius - 12;\n } else if (pos === 'outEnd') {\n labelR = radius + 12;\n labelFill = '#374151';\n } else {\n // ctr / bestFit / undefined — slice midline.\n labelR = doughnut ? (radius + innerR) / 2 : radius * 0.6;\n }\n const labelX = sx + labelR * Math.cos(labelMid);\n const labelY = sy + labelR * Math.sin(labelMid);\n const labels: string[] = [];\n if (spec.dataLabels?.showValue) labels.push(formatDataLabelValue(spec, 0, v));\n if (spec.dataLabels?.showPercent) labels.push(`${((v / total) * 100).toFixed(0)}%`);\n if (spec.dataLabels?.showCategory) {\n const catLabel = spec.categories[i];\n if (catLabel) labels.push(catLabel);\n }\n if (labels.length > 0) {\n out.push(\n `<text x=\"${px(labelX)}\" y=\"${px(labelY)}\" text-anchor=\"middle\" dominant-baseline=\"middle\" ${dataLabelTextAttrs(spec, 0, labelFill, 10, true)}>${escapeXml(labels.join(spec.series[0]?.dataLabels?.separator ?? spec.dataLabels?.separator ?? ' '))}</text>`,\n );\n }\n }\n return out.join('');\n};\n\n// ---------------------------------------------------------------------------\n// Scatter / radar / bubble plotters. Scatter and bubble plot xy(z) tuples\n// against two value axes (reusing `renderValueAxis`); radar is polar.\n\n// Padded [min, max] for a scatter / bubble value axis so extreme points\n// don't sit on the plot edge. Aligns the bounds to the niceTicks step.\nconst scatterAxisBounds = (vals: ReadonlyArray<number>): { min: number; max: number } => {\n let min = Infinity;\n let max = -Infinity;\n for (const v of vals) {\n if (Number.isFinite(v)) {\n if (v < min) min = v;\n if (v > max) max = v;\n }\n }\n if (!Number.isFinite(min)) return { min: 0, max: 1 };\n if (min === max) return { min: min - 1, max: max + 1 };\n const ticks = niceTicks(min, max);\n const step = ticks.length >= 2 ? ticks[1]! - ticks[0]! : (max - min) / 4 || 1;\n return { min: Math.floor(min / step) * step, max: Math.ceil(max / step) * step };\n};\n\n// Pairs a scatter / bubble series' x-channel (`xValues`, or the 1-based\n// index when absent) with its y-channel (`values`) and bubble size,\n// dropping points whose x or y is null / non-finite (PowerPoint skips\n// those too).\nconst xyPoints = (series: ChartSeries): Array<{ x: number; y: number; size: number }> => {\n const hasX = series.xValues !== undefined && series.xValues.length > 0;\n const n = Math.max(series.xValues?.length ?? 0, series.values.length);\n const out: Array<{ x: number; y: number; size: number }> = [];\n for (let i = 0; i < n; i++) {\n let x: number;\n if (hasX) {\n const xv = series.xValues![i];\n if (xv === null || xv === undefined || !Number.isFinite(xv)) continue;\n x = xv;\n } else {\n x = i + 1;\n }\n const y = series.values[i];\n if (y === null || y === undefined || !Number.isFinite(y)) continue;\n const sz = series.bubbleSizes?.[i];\n out.push({ x, y, size: sz != null && Number.isFinite(sz) ? sz : 0 });\n }\n return out;\n};\n\n// Two value axes (x horizontal, y vertical) shared by scatter / bubble.\n// Honours the authored `<c:valAx><c:scaling>` min / max + numberFormat on\n// the y axis; the x axis is auto-scaled (our model carries only one\n// value-axis scaling block, which PowerPoint applies to the primary\n// (y) axis).\nconst renderScatterAxes = (\n f: ChartFrame,\n spec: ChartSpec,\n xB: { min: number; max: number },\n yB: { min: number; max: number },\n): string => {\n const yAxis: AxisSpec = {\n orientation: 'vertical',\n min: yB.min,\n max: yB.max,\n ...(spec.valueAxis?.numberFormat !== undefined\n ? { numberFormat: spec.valueAxis.numberFormat }\n : {}),\n };\n const xAxis: AxisSpec = { orientation: 'horizontal', min: xB.min, max: xB.max };\n return renderValueAxis(f, yAxis) + renderValueAxis(f, xAxis);\n};\n\nconst renderScatterChart = (\n f: ChartFrame,\n spec: ChartSpec,\n colors: ReadonlyArray<string>,\n): string => {\n const perSeries = spec.series.map((s) => xyPoints(s));\n const allX: number[] = [];\n const allY: number[] = [];\n for (const pts of perSeries) {\n for (const p of pts) {\n allX.push(p.x);\n allY.push(p.y);\n }\n }\n if (allX.length === 0) return '';\n const xB = scatterAxisBounds(allX);\n const yB = scatterAxisBounds(allY);\n if (spec.valueAxis?.min !== undefined) yB.min = spec.valueAxis.min;\n if (spec.valueAxis?.max !== undefined) yB.max = spec.valueAxis.max;\n const xRange = xB.max - xB.min || 1;\n const yRange = yB.max - yB.min || 1;\n const projX = (x: number): number => f.plotX + ((x - xB.min) / xRange) * f.plotW;\n const projY = (y: number): number => f.plotY + f.plotH - ((y - yB.min) / yRange) * f.plotH;\n const out: string[] = [renderScatterAxes(f, spec, xB, yB)];\n // scatterStyle governs lines vs markers. Default (absent) = markers\n // only, matching PowerPoint's stock \"Scatter\" subtype.\n const style = spec.scatterStyle;\n const showLine =\n style === 'line' || style === 'lineMarker' || style === 'smooth' || style === 'smoothMarker';\n const smooth = style === 'smooth' || style === 'smoothMarker';\n const showMarker =\n style === undefined || style === 'marker' || style === 'lineMarker' || style === 'smoothMarker';\n for (let s = 0; s < spec.series.length; s++) {\n const series = spec.series[s]!;\n const pts = perSeries[s]!;\n if (pts.length === 0) continue;\n const color = series.color ?? colors[s % colors.length]!;\n const proj: Array<[number, number]> = pts.map((p) => [projX(p.x), projY(p.y)]);\n if (showLine && proj.length >= 2) {\n const d =\n smooth && proj.length > 2\n ? smoothPath(proj)\n : proj.map(([xp, yp], i) => `${i === 0 ? 'M' : 'L'}${px(xp)},${px(yp)}`).join(' ');\n const lineWPx = series.lineWidthEmu ? Math.max(0.3, series.lineWidthEmu / EMU_PER_PX) : 1.5;\n out.push(\n `<path d=\"${d}\" fill=\"none\" stroke=\"${color}\" stroke-width=\"${lineWPx.toFixed(2)}\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/>`,\n );\n }\n // markerSymbol='none' always hides; an explicit symbol always shows\n // (even under the line-only styles).\n const sym = series.markerSymbol;\n const drawMarker = sym === 'none' ? false : showMarker || (sym !== undefined && sym !== 'auto');\n if (drawMarker) {\n const r = Math.max(1.5, (series.markerSizePt ?? 5) * 0.5);\n const glyph = sym && sym !== 'auto' && sym !== 'none' ? sym : 'circle';\n for (const [xp, yp] of proj) out.push(seriesMarker(glyph, xp, yp, r, color));\n }\n }\n return out.join('');\n};\n\nconst renderBubbleChart = (\n f: ChartFrame,\n spec: ChartSpec,\n colors: ReadonlyArray<string>,\n): string => {\n const perSeries = spec.series.map((s) => xyPoints(s));\n const allX: number[] = [];\n const allY: number[] = [];\n let maxSize = 0;\n for (const pts of perSeries) {\n for (const p of pts) {\n allX.push(p.x);\n allY.push(p.y);\n if (p.size > maxSize) maxSize = p.size;\n }\n }\n if (allX.length === 0) return '';\n const xB = scatterAxisBounds(allX);\n const yB = scatterAxisBounds(allY);\n if (spec.valueAxis?.min !== undefined) yB.min = spec.valueAxis.min;\n if (spec.valueAxis?.max !== undefined) yB.max = spec.valueAxis.max;\n const xRange = xB.max - xB.min || 1;\n const yRange = yB.max - yB.min || 1;\n const projX = (x: number): number => f.plotX + ((x - xB.min) / xRange) * f.plotW;\n const projY = (y: number): number => f.plotY + f.plotH - ((y - yB.min) / yRange) * f.plotH;\n const out: string[] = [renderScatterAxes(f, spec, xB, yB)];\n // The largest bubble's diameter is bubbleScale% (default 25%) of the\n // plot's smaller dimension. Per-point radius scales with sqrt(size) for\n // the default area mode (sizeRepresents='area'), linearly for 'width'.\n const scaleFraction = spec.bubbleScale !== undefined ? spec.bubbleScale / 100 : 0.25;\n const maxRadiusPx = Math.max(2, scaleFraction * Math.min(f.plotW, f.plotH) * 0.5);\n const areaMode = (spec.bubbleSizeRepresents ?? 'area') === 'area';\n const radiusFor = (size: number): number => {\n if (maxSize <= 0 || size <= 0) return Math.max(1.5, maxRadiusPx * 0.15);\n const frac = areaMode ? Math.sqrt(size / maxSize) : size / maxSize;\n return Math.max(1.5, maxRadiusPx * frac);\n };\n for (let s = 0; s < spec.series.length; s++) {\n const series = spec.series[s]!;\n const pts = perSeries[s]!;\n const color = series.color ?? colors[s % colors.length]!;\n for (const p of pts) {\n const cx = projX(p.x);\n const cy = projY(p.y);\n const r = radiusFor(p.size);\n out.push(\n `<circle cx=\"${px(cx)}\" cy=\"${px(cy)}\" r=\"${r.toFixed(2)}\" fill=\"${color}\" fill-opacity=\"0.55\" stroke=\"${color}\" stroke-width=\"0.75\"/>`,\n );\n }\n }\n return out.join('');\n};\n\nconst renderRadarChart = (\n f: ChartFrame,\n spec: ChartSpec,\n colors: ReadonlyArray<string>,\n): string => {\n const N = pointCount(spec);\n if (N === 0 || spec.series.length === 0) return '';\n // Rings start at 0 (or the authored min) and span to the data max (or\n // the authored max).\n let max = -Infinity;\n let min = 0;\n for (const sr of spec.series) {\n for (const v of sr.values) {\n if (v !== null && Number.isFinite(v) && v > max) max = v;\n }\n }\n if (!Number.isFinite(max)) max = 1;\n if (spec.valueAxis?.min !== undefined) min = spec.valueAxis.min;\n if (spec.valueAxis?.max !== undefined) max = spec.valueAxis.max;\n if (max <= min) max = min + 1;\n const range = max - min;\n const cx = f.plotX + f.plotW / 2;\n const cy = f.plotY + f.plotH / 2;\n // Leave a margin around the rim for the category labels.\n const R = Math.max(4, Math.min(f.plotW, f.plotH) / 2 - 14);\n const angleAt = (i: number): number => -Math.PI / 2 + (i * 2 * Math.PI) / N;\n const out: string[] = [];\n // Value rings (polygon gridlines) at each nice tick + a tick label on\n // the top spoke.\n for (const t of niceTicks(min, max)) {\n if (t < min || t > max + 1e-9) continue;\n const rr = ((t - min) / range) * R;\n if (rr <= 0) continue;\n const ring: string[] = [];\n for (let i = 0; i < N; i++) {\n const a = angleAt(i);\n ring.push(`${px(cx + rr * Math.cos(a))},${px(cy + rr * Math.sin(a))}`);\n }\n out.push(\n `<polygon points=\"${ring.join(' ')}\" fill=\"none\" stroke=\"#E5E7EB\" stroke-width=\"0.5\"/>`,\n );\n out.push(\n `<text x=\"${px(cx + 3)}\" y=\"${px(cy - rr)}\" dominant-baseline=\"middle\" font-family=\"sans-serif\" font-size=\"8\" fill=\"#9CA3AF\">${escapeXml(formatTick(t))}</text>`,\n );\n }\n // Spokes + category labels.\n for (let i = 0; i < N; i++) {\n const a = angleAt(i);\n out.push(\n `<line x1=\"${px(cx)}\" y1=\"${px(cy)}\" x2=\"${px(cx + R * Math.cos(a))}\" y2=\"${px(cy + R * Math.sin(a))}\" stroke=\"#D1D5DB\" stroke-width=\"0.5\"/>`,\n );\n const cat = spec.categories[i] ?? String(i + 1);\n const lx = cx + (R + 8) * Math.cos(a);\n const ly = cy + (R + 8) * Math.sin(a);\n const cosA = Math.cos(a);\n const anchor = Math.abs(cosA) < 0.3 ? 'middle' : cosA > 0 ? 'start' : 'end';\n const label = cat.length > 12 ? `${cat.slice(0, 11)}…` : cat;\n out.push(\n `<text x=\"${px(lx)}\" y=\"${px(ly)}\" text-anchor=\"${anchor}\" dominant-baseline=\"middle\" ${axisTickAttrs(spec.categoryAxisLabelStyle)}>${escapeXml(label)}</text>`,\n );\n }\n // Series polygons (closed). 'filled' fills the polygon at reduced\n // opacity; 'marker' draws a point glyph at each vertex.\n const filled = spec.radarStyle === 'filled';\n const showMarker = spec.radarStyle === 'marker';\n for (let s = 0; s < spec.series.length; s++) {\n const series = spec.series[s]!;\n const color = series.color ?? colors[s % colors.length]!;\n const proj: Array<[number, number]> = [];\n for (let i = 0; i < N; i++) {\n const v = series.values[i];\n if (v === null || v === undefined || !Number.isFinite(v)) continue;\n const rr = ((v - min) / range) * R;\n const a = angleAt(i);\n proj.push([cx + rr * Math.cos(a), cy + rr * Math.sin(a)]);\n }\n if (proj.length < 2) continue;\n const ptsStr = proj.map(([xp, yp]) => `${px(xp)},${px(yp)}`).join(' ');\n const lineWPx = series.lineWidthEmu ? Math.max(0.3, series.lineWidthEmu / EMU_PER_PX) : 1.8;\n out.push(\n filled\n ? `<polygon points=\"${ptsStr}\" fill=\"${color}\" fill-opacity=\"0.3\" stroke=\"${color}\" stroke-width=\"${lineWPx.toFixed(2)}\" stroke-linejoin=\"round\"/>`\n : `<polygon points=\"${ptsStr}\" fill=\"none\" stroke=\"${color}\" stroke-width=\"${lineWPx.toFixed(2)}\" stroke-linejoin=\"round\"/>`,\n );\n if (showMarker) {\n const r = Math.max(1.5, (series.markerSizePt ?? 5) * 0.5);\n const glyph =\n series.markerSymbol && series.markerSymbol !== 'auto' && series.markerSymbol !== 'none'\n ? series.markerSymbol\n : 'circle';\n for (const [xp, yp] of proj) out.push(seriesMarker(glyph, xp, yp, r, color));\n }\n }\n return out.join('');\n};\n\nconst renderChart = (\n shape: SlideShapeData,\n x: number,\n y: number,\n w: number,\n h: number,\n transform: string,\n theme: PresentationTheme | null,\n): string | null => {\n let spec: ChartSpec | null = null;\n try {\n spec = getShapeChartSpec(shape);\n } catch {\n return null;\n }\n if (!spec) return null;\n const colors = accentSequence(theme);\n const isCartesian =\n spec.kind === 'column' || spec.kind === 'bar' || spec.kind === 'line' || spec.kind === 'area';\n // Scatter / bubble draw two value axes (handled inside their plotters)\n // but still need the axis gutters; radar is polar and uses the full\n // plot box. The shared category-axis block below stays gated on\n // `isCartesian` so it doesn't run for the xy(z) kinds.\n const hasAxes = isCartesian || spec.kind === 'scatter' || spec.kind === 'bubble';\n // No `<c:legend>` in the chart XML means no legend — PowerPoint and\n // LibreOffice both render none. An authored legend with `position: null`\n // (`<c:delete/>`-style) is also hidden.\n const hasLegend = spec.legend !== undefined && spec.legend.position !== null;\n const f = layoutChart(\n x,\n y,\n w,\n h,\n !!spec.title,\n hasAxes,\n spec.titleOverlay ?? false,\n spec.legend?.overlay ?? false,\n hasLegend,\n );\n const allNamesForLegend: string[] =\n spec.kind === 'pie' || spec.kind === 'doughnut'\n ? Array.from(spec.categories)\n : spec.series.map((s) => s.name);\n const allColorsForLegend: string[] =\n spec.kind === 'pie' || spec.kind === 'doughnut'\n ? spec.categories.map(\n (_, i) =>\n spec.series[0]?.pointColors?.[i] ??\n spec.series[0]?.color ??\n colors[i % colors.length] ??\n '#888',\n )\n : spec.series.map((s, i) => s.color ?? colors[i % colors.length] ?? '#888');\n // `<c:legendEntry><c:delete val=\"1\"/>` hides specific series indices\n // from the legend — typically trendline series. Filter the parallel\n // arrays in lock-step so colors / names / markers stay aligned.\n const hiddenSet = new Set(spec.legend?.hiddenIndices ?? []);\n const seriesNamesForLegend = allNamesForLegend.filter((_, i) => !hiddenSet.has(i));\n const seriesColorsForLegend = allColorsForLegend.filter((_, i) => !hiddenSet.has(i));\n const markerSymbolsForLegend =\n spec.kind === 'line' || spec.kind === 'area'\n ? spec.series.map((s) => s.markerSymbol).filter((_, i) => !hiddenSet.has(i))\n : undefined;\n\n // Count finite values across all series — when zero, draw a hint\n // label so an empty chart isn't indistinguishable from a working\n // one whose data we failed to read.\n let finiteCount = 0;\n for (const s of spec.series) {\n for (const v of s.values) if (v !== null && Number.isFinite(v)) finiteCount++;\n }\n\n let plot = '';\n let axes = '';\n if (isCartesian) {\n const { min, max, step } = seriesMinMax(spec);\n const N = pointCount(spec);\n const majorUnit = spec.valueAxis?.majorUnit ?? step;\n const numberFormat = spec.valueAxis?.numberFormat;\n const axisExtras = {\n ...(majorUnit !== undefined ? { majorUnit } : {}),\n ...(numberFormat !== undefined ? { numberFormat } : {}),\n ...(spec.valueAxisMajorGridlines !== undefined\n ? { majorGridlines: spec.valueAxisMajorGridlines }\n : {}),\n ...(spec.valueAxisLabelStyle !== undefined ? { labelStyle: spec.valueAxisLabelStyle } : {}),\n ...(spec.valueAxisMajorGridlineColor !== undefined\n ? { majorGridlineColor: spec.valueAxisMajorGridlineColor }\n : {}),\n ...(spec.valueAxisMajorTickMark !== undefined\n ? { majorTickMark: spec.valueAxisMajorTickMark }\n : {}),\n ...(spec.valueAxisLineColor !== undefined ? { lineColor: spec.valueAxisLineColor } : {}),\n ...(spec.valueAxisLabelRotationDeg !== undefined\n ? { labelRotationDeg: spec.valueAxisLabelRotationDeg }\n : {}),\n ...(spec.valueAxis?.displayUnits !== undefined\n ? { displayUnits: spec.valueAxis.displayUnits }\n : {}),\n };\n const valueAxis: AxisSpec =\n spec.kind === 'bar'\n ? { orientation: 'horizontal', min, max, ...axisExtras }\n : { orientation: 'vertical', min, max, ...axisExtras };\n if (!spec.valueAxisHidden) axes = renderValueAxis(f, valueAxis);\n // tickLblPos='none' hides the labels but keeps the gridline (we\n // already conditionally skip below). Use the explicit skip step\n // when authored.\n const labelsHidden = spec.categoryAxisHidden || spec.categoryAxisTickLabelPos === 'none';\n if (N > 0 && !labelsHidden) {\n axes += renderCategoryAxis(\n f,\n spec.kind === 'bar' ? 'vertical' : 'horizontal',\n spec.categories,\n N,\n spec.categoryAxisTickLabelSkip ?? 1,\n spec.categoryAxisLabelStyle,\n spec.categoryAxisLabelRotationDeg,\n spec.categoryAxisLabelAlign,\n spec.categoryAxisLineColor,\n );\n }\n }\n switch (spec.kind) {\n case 'column':\n case 'bar':\n // pptx-kit reports both as `bar` / `column` via separate `kind`;\n // legacy `barDir` distinction. We branch on `kind`.\n plot =\n spec.kind === 'column'\n ? renderColumnChart(f, spec, colors)\n : renderBarChart(f, spec, colors);\n break;\n case 'line':\n plot = renderLineChart(f, spec, colors, false);\n break;\n case 'area':\n plot = renderLineChart(f, spec, colors, true);\n break;\n case 'pie':\n plot = renderPieChart(f, spec, colors, false);\n break;\n case 'doughnut':\n plot = renderPieChart(f, spec, colors, true);\n break;\n case 'scatter':\n plot = renderScatterChart(f, spec, colors);\n break;\n case 'radar':\n plot = renderRadarChart(f, spec, colors);\n break;\n case 'bubble':\n plot = renderBubbleChart(f, spec, colors);\n break;\n default:\n // stock / surface / 3D variants the reader still folds into a\n // modeled kind never reach here; truly unmodeled kinds (resolved\n // to `null` spec) are handled earlier. Anything left falls back.\n return null;\n }\n\n const emptyHint =\n finiteCount === 0\n ? `<text x=\"${px(f.plotX + f.plotW / 2)}\" y=\"${px(f.plotY + f.plotH / 2)}\" text-anchor=\"middle\" dominant-baseline=\"middle\" font-family=\"sans-serif\" font-size=\"12\" fill=\"#9CA3AF\">${escapeXml(`chart (${spec.kind}) — no data`)}</text>`\n : '';\n\n // Axis titles — value title is rotated -90° to read along the y-axis\n // tick stack; category title sits below the x-axis. Authored\n // <a:rPr sz/b/i> + solidFill override the 11pt semibold default.\n const axisTitleAttrs = (style: ChartTextStyle | undefined): string => {\n const sz = style?.sizePt ?? 11;\n const fill = style?.color ?? '#374151';\n const weight = style?.bold === false ? '400' : '600';\n const italicAttr = style?.italic ? ' font-style=\"italic\"' : '';\n return `font-family=\"sans-serif\" font-size=\"${sz.toFixed(1)}\" fill=\"${fill}\" font-weight=\"${weight}\"${italicAttr}`;\n };\n // Authored <c:title><c:tx><c:rich><a:bodyPr rot> overrides the\n // renderer's defaults (-90 for the value-axis title, 0 for the\n // category-axis title). Pivot stays at the label anchor so the title\n // hugs its axis.\n const valueAxisTitleRot = spec.valueAxisTitleRotationDeg ?? -90;\n const valueAxisTitleSvg = spec.valueAxisTitle\n ? `<text x=\"${px(f.plotX - 26)}\" y=\"${px(f.plotY + f.plotH / 2)}\" text-anchor=\"middle\" ${axisTitleAttrs(spec.valueAxisTitleStyle)} transform=\"rotate(${valueAxisTitleRot} ${px(f.plotX - 26)} ${px(f.plotY + f.plotH / 2)})\">${escapeXml(spec.valueAxisTitle)}</text>`\n : '';\n const catTitleRot = spec.categoryAxisTitleRotationDeg ?? 0;\n const catTitleCx = f.plotX + f.plotW / 2;\n const catTitleCy = f.plotY + f.plotH + 16;\n const catTitleTransform =\n catTitleRot !== 0\n ? ` transform=\"rotate(${catTitleRot} ${px(catTitleCx)} ${px(catTitleCy)})\"`\n : '';\n const categoryAxisTitleSvg = spec.categoryAxisTitle\n ? `<text x=\"${px(catTitleCx)}\" y=\"${px(catTitleCy)}\" text-anchor=\"middle\" ${axisTitleAttrs(spec.categoryAxisTitleStyle)}${catTitleTransform}>${escapeXml(spec.categoryAxisTitle)}</text>`\n : '';\n return [\n `<g${transform}>`,\n // Chart-area backdrop honors <c:chartSpace><c:spPr><a:solidFill> /\n // <a:ln>. plot-area gets its own tinted rect + border when\n // <c:plotArea><c:spPr> authors them.\n `<rect x=\"${px(f.x)}\" y=\"${px(f.y)}\" width=\"${px(f.w)}\" height=\"${px(f.h)}\" fill=\"${spec.chartAreaFill ?? '#FFFFFF'}\" stroke=\"${spec.chartAreaStrokeColor ?? '#E5E7EB'}\" stroke-width=\"0.6\"${spec.roundedCorners ? ' rx=\"6\" ry=\"6\"' : ''}/>`,\n spec.plotAreaFill || spec.plotAreaStrokeColor\n ? `<rect x=\"${px(f.plotX)}\" y=\"${px(f.plotY)}\" width=\"${px(f.plotW)}\" height=\"${px(f.plotH)}\" fill=\"${spec.plotAreaFill ?? 'none'}\" stroke=\"${spec.plotAreaStrokeColor ?? 'none'}\" stroke-width=\"0.6\"/>`\n : '',\n renderChartTitle(f, spec.title ?? '', spec.titleStyle),\n axes,\n valueAxisTitleSvg,\n categoryAxisTitleSvg,\n plot,\n emptyHint,\n hasLegend\n ? renderChartLegend(\n f,\n seriesNamesForLegend,\n seriesColorsForLegend,\n spec.legend?.position ?? 'b',\n spec.legend?.textStyle,\n // Marker glyphs only carry visual meaning for line / area\n // charts; bar / column / pie use the swatch rect.\n markerSymbolsForLegend,\n )\n : '',\n '</g>',\n ].join('');\n};\n\n// ---------------------------------------------------------------------------\n// Table rendering. Draws the grid, cell fills, banded rows, header row, merged\n// cells, and per-run cell text. Cell text reuses the same layout building\n// blocks as shape text (buildAndLayoutSvgText / renderRun), so it inherits\n// per-run size / bold / italic / color / font, paragraph alignment, line\n// wrapping, and the svg ↔ foreignObject split for free.\n\n// Builds the per-paragraph layout model the shared text engine consumes from a\n// cell's structured paragraphs. Table cells have no bullets, levels, indents,\n// or paragraph spacing, so those fields are inert. A run's effective point\n// size resolves to its explicit `<a:rPr sz>` when present, else the table-cell\n// default: pptx-kit doesn't model `<a:tblStyle>` text props, so unstyled cells\n// fall to PowerPoint's authored default cell size (18 pt — what it writes for a\n// freshly inserted table) in the theme's minor font and the cell's text color.\nconst cellParaData = (\n paragraphs: ReadonlyArray<TableCellParagraph>,\n): { paraData: ParaData[]; hasText: boolean } => {\n let hasText = false;\n const paraData = paragraphs.map((para): ParaData => {\n const runs: RunData[] = [];\n for (const el of para.elements) {\n if (el.kind === 'br') {\n runs.push({ text: '\\n', fmt: null, sizePt: DEFAULT_BODY_PT });\n continue;\n }\n if (el.text.trim()) hasText = true;\n runs.push({ text: el.text, fmt: el.format, sizePt: el.format?.size ?? DEFAULT_BODY_PT });\n }\n return {\n align: para.align ?? 'left',\n level: 0,\n bulletStyle: null,\n bulletDetail: { color: null, sizePct: null, sizePts: null, font: null },\n bulletIsPicture: false,\n // Table cells never carry picture bullets (no <a:pPr> bullet model\n // in <a:tc> text bodies).\n bulletImageHref: null,\n runs,\n lineSpacing: null,\n spcBefPts: null,\n spcAftPts: null,\n indent: { leftEmu: null, rightEmu: null, firstLineEmu: null },\n };\n });\n return { paraData, hasText };\n};\n\nconst renderTableCellText = (\n paragraphs: ReadonlyArray<TableCellParagraph>,\n cx: number,\n cy: number,\n cw: number,\n ch: number,\n color: string,\n pres: PresentationData,\n shape: SlideShapeData,\n theme: PresentationTheme | null,\n themeFace: string | null,\n ctx: LayoutCtx,\n vAnchor: 'top' | 'center' | 'bottom',\n margins: {\n left: number | null;\n right: number | null;\n top: number | null;\n bottom: number | null;\n },\n): string => {\n const { paraData, hasText } = cellParaData(paragraphs);\n if (!hasText) return '';\n // PowerPoint stores margins in EMU; fall back to ~4px when unset.\n const defaultPadPx = 4;\n const padL = margins.left !== null ? margins.left / EMU_PER_PX : defaultPadPx;\n const padR = margins.right !== null ? margins.right / EMU_PER_PX : defaultPadPx;\n const padT = margins.top !== null ? margins.top / EMU_PER_PX : defaultPadPx;\n const padB = margins.bottom !== null ? margins.bottom / EMU_PER_PX : defaultPadPx;\n const innerX = cx + padL;\n const innerY = cy + padT;\n const innerW = Math.max(0, cw - padL - padR);\n const innerH = Math.max(0, ch - padT - padB);\n if (innerW <= 0 || innerH <= 0) return '';\n\n // Pure-SVG path: hand the layout model to the same engine shape text uses so\n // a browser-free rasterizer gets wrapped, per-run-styled lines. The engine\n // works in EMU (it divides by EMU_PER_PX internally), so project the px box\n // back to EMU.\n if (ctx.mode === 'svg') {\n return buildAndLayoutSvgText({\n pres,\n shape,\n theme,\n paraData,\n numberLabels: paraData.map(() => null),\n autoFitScale: 1,\n lineHeightScale: 1,\n defaultPt: DEFAULT_BODY_PT,\n themeFace,\n defaultColor: color,\n anchor: vAnchor,\n wrap: true,\n innerX: innerX * EMU_PER_PX,\n innerY: innerY * EMU_PER_PX,\n innerW: innerW * EMU_PER_PX,\n innerH: innerH * EMU_PER_PX,\n measure: ctx.measure,\n // Cell-level vertical text (<a:tcPr vert>) isn't modeled yet; cells lay\n // out horizontally, single-column.\n vert: 'none',\n columns: null,\n });\n }\n\n // foreignObject path (browser preview): one <p> per paragraph, each run\n // rendered through renderRun so the browser lays the styled text out.\n const justify = vAnchor === 'top' ? 'flex-start' : vAnchor === 'bottom' ? 'flex-end' : 'center';\n const familyFont = themeFace ? `${escapeXml(themeFace)}, ${DEFAULT_FONT}` : DEFAULT_FONT;\n const body = paraData\n .map((para) => {\n const runHtml = para.runs\n .map((run) => renderRun(run.text, run.fmt, theme, run.sizePt, run.fmt?.size === undefined))\n .join('');\n const textAlign = ALIGNMENT_TO_CSS[para.align] ?? 'left';\n return `<p style=\"margin:0;padding:0;text-align:${textAlign};line-height:1.2\">${runHtml || '&#8203;'}</p>`;\n })\n .join('');\n return `<foreignObject x=\"${px(innerX)}\" y=\"${px(innerY)}\" width=\"${px(innerW)}\" height=\"${px(innerH)}\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display:flex;flex-direction:column;justify-content:${justify};width:100%;height:100%;box-sizing:border-box;overflow:hidden;font-family:${familyFont};color:${color};word-break:break-word\">${body}</div></foreignObject>`;\n};\n\nconst renderTable = (\n shape: SlideShapeData,\n pres: PresentationData,\n x: number,\n y: number,\n w: number,\n h: number,\n transform: string,\n theme: PresentationTheme | null,\n ctx: LayoutCtx,\n): string | null => {\n let dims: { rows: number; cols: number };\n let widths: ReadonlyArray<number>;\n let heights: ReadonlyArray<number>;\n let cells: ReadonlyArray<ReadonlyArray<unknown>>;\n try {\n dims = getTableDimensions(shape);\n widths = getTableColumnWidths(shape);\n heights = getTableRowHeights(shape);\n cells = getTableCells(shape);\n } catch {\n return null;\n }\n if (dims.rows === 0 || dims.cols === 0) return null;\n\n const xPx = x / EMU_PER_PX;\n const yPx = y / EMU_PER_PX;\n const widthsPx = widths.map((w0) => w0 / EMU_PER_PX);\n const heightsPx = heights.map((h0) => h0 / EMU_PER_PX);\n // If the declared widths / heights don't fill the table bounds (or\n // overflow them), scale them so the rendered grid matches the shape's\n // outer rect. Without scaling, narrow tables would render at the\n // declared cell widths but readers expect the bounding box.\n const wSum = widthsPx.reduce((a, b) => a + b, 0);\n const hSum = heightsPx.reduce((a, b) => a + b, 0);\n const wScale = wSum > 0 ? w / EMU_PER_PX / wSum : 1;\n const hScale = hSum > 0 ? h / EMU_PER_PX / hSum : 1;\n const colXs: number[] = [xPx];\n for (let c = 0; c < widthsPx.length; c++) {\n colXs.push((colXs[c] ?? xPx) + (widthsPx[c] ?? 0) * wScale);\n }\n const rowYs: number[] = [yPx];\n for (let r = 0; r < heightsPx.length; r++) {\n rowYs.push((rowYs[r] ?? yPx) + (heightsPx[r] ?? 0) * hScale);\n }\n\n // A10 table style — header / footer / first-col / last-col / banded\n // rows / banded columns. Project the boolean flags onto per-cell tints\n // that approximate the theme-driven look in PowerPoint.\n const flags = getTableStyleFlags(shape);\n const accent = theme ? normalizeHex(theme.accent1) : '#4472C4';\n const headerFill = accent;\n const bandFill = mixHex(accent, '#FFFFFF', 0.92);\n const textColor = resolveColor('scheme:tx1', theme, '#000000');\n // Default table-cell face is the theme's body (minor) font, the same default\n // PowerPoint applies when a cell run carries no explicit typeface.\n const tableThemeFace = getPresentationFonts(pres)?.minorLatin ?? null;\n const out: string[] = [];\n out.push(`<g${transform}>`);\n // Whole-table backdrop so cells with no explicit fill still\n // contrast against whatever's behind.\n out.push(\n `<rect x=\"${px(xPx)}\" y=\"${px(yPx)}\" width=\"${px((colXs[widthsPx.length] ?? xPx) - xPx)}\" height=\"${px((rowYs[heightsPx.length] ?? yPx) - yPx)}\" fill=\"#FFFFFF\"/>`,\n );\n const borderEdges: string[] = [];\n for (let r = 0; r < dims.rows; r++) {\n for (let c = 0; c < dims.cols; c++) {\n const cell = cells[r]?.[c];\n if (!cell) continue;\n const typedCell = cell as Parameters<typeof getTableCellSpan>[0];\n const span = getTableCellSpan(typedCell);\n // Skip cells absorbed by a horizontal or vertical merge — their\n // visual area is painted by the cell that owns the span.\n if (span.hMerge || span.vMerge) continue;\n const cx = colXs[c] ?? xPx;\n const cy = rowYs[r] ?? yPx;\n const endCol = Math.min(dims.cols, c + span.gridSpan);\n const endRow = Math.min(dims.rows, r + span.rowSpan);\n const cw = (colXs[endCol] ?? cx) - cx;\n const ch = (rowYs[endRow] ?? cy) - cy;\n const fill = getTableCellFill(cell as Parameters<typeof getTableCellFill>[0]);\n let resolvedFill: string;\n if (fill) {\n resolvedFill = resolveColor(fill, theme, '#FFFFFF');\n } else if (flags.firstRow && r === 0) {\n resolvedFill = headerFill;\n } else if (flags.lastRow && r === dims.rows - 1) {\n resolvedFill = headerFill;\n } else if (flags.firstCol && c === 0) {\n resolvedFill = bandFill;\n } else if (flags.lastCol && c === dims.cols - 1) {\n resolvedFill = bandFill;\n } else if (flags.bandRow && r % 2 === (flags.firstRow ? 0 : 1)) {\n resolvedFill = bandFill;\n } else if (flags.bandCol && c % 2 === (flags.firstCol ? 0 : 1)) {\n resolvedFill = bandFill;\n } else {\n resolvedFill = 'none';\n }\n const cellTextColor = resolvedFill === headerFill ? '#FFFFFF' : textColor;\n out.push(\n `<rect x=\"${px(cx)}\" y=\"${px(cy)}\" width=\"${px(cw)}\" height=\"${px(ch)}\" fill=\"${resolvedFill}\"/>`,\n );\n // Per-side borders override the default thin gray grid. Draw them\n // separately after the fills so they sit on top.\n const borders = getTableCellBorders(pres, typedCell);\n // Project the OOXML `<a:prstDash>` token onto an SVG stroke-dasharray.\n // Scaled by the border's width so the dash visually matches PowerPoint.\n const dashAttr = (dash: string | null | undefined, widthPx: number): string => {\n if (!dash || dash === 'solid') return '';\n const pat = DASH_PATTERNS[dash];\n if (!pat) return '';\n const arr = pat\n .split(' ')\n .map((n) => (Number.parseFloat(n) * widthPx).toFixed(2))\n .join(' ');\n return ` stroke-dasharray=\"${arr}\"`;\n };\n const edge = (\n side: keyof Pick<typeof borders, 'left' | 'right' | 'top' | 'bottom'>,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n ): void => {\n const b = borders[side];\n if (!b) return;\n const sw = b.widthEmu ? Math.max(0.4, b.widthEmu / EMU_PER_PX) : 0.5;\n const col = b.color ?? '#9CA3AF';\n borderEdges.push(\n `<line x1=\"${px(x1)}\" y1=\"${px(y1)}\" x2=\"${px(x2)}\" y2=\"${px(y2)}\" stroke=\"${col}\" stroke-width=\"${px(sw)}\"${dashAttr(b.dash, sw)}/>`,\n );\n };\n edge('left', cx, cy, cx, cy + ch);\n edge('right', cx + cw, cy, cx + cw, cy + ch);\n edge('top', cx, cy, cx + cw, cy);\n edge('bottom', cx, cy + ch, cx + cw, cy + ch);\n if (borders.tlToBr) {\n const sw = borders.tlToBr.widthEmu\n ? Math.max(0.4, borders.tlToBr.widthEmu / EMU_PER_PX)\n : 0.5;\n borderEdges.push(\n `<line x1=\"${px(cx)}\" y1=\"${px(cy)}\" x2=\"${px(cx + cw)}\" y2=\"${px(cy + ch)}\" stroke=\"${borders.tlToBr.color ?? '#9CA3AF'}\" stroke-width=\"${px(sw)}\"${dashAttr(borders.tlToBr.dash, sw)}/>`,\n );\n }\n if (borders.blToTr) {\n const sw = borders.blToTr.widthEmu\n ? Math.max(0.4, borders.blToTr.widthEmu / EMU_PER_PX)\n : 0.5;\n borderEdges.push(\n `<line x1=\"${px(cx)}\" y1=\"${px(cy + ch)}\" x2=\"${px(cx + cw)}\" y2=\"${px(cy)}\" stroke=\"${borders.blToTr.color ?? '#9CA3AF'}\" stroke-width=\"${px(sw)}\"${dashAttr(borders.blToTr.dash, sw)}/>`,\n );\n }\n // Default thin grid for sides that didn't define a border.\n const defaultColor = '#9CA3AF';\n if (!borders.left)\n borderEdges.push(\n `<line x1=\"${px(cx)}\" y1=\"${px(cy)}\" x2=\"${px(cx)}\" y2=\"${px(cy + ch)}\" stroke=\"${defaultColor}\" stroke-width=\"0.4\" opacity=\"0.6\"/>`,\n );\n if (!borders.right)\n borderEdges.push(\n `<line x1=\"${px(cx + cw)}\" y1=\"${px(cy)}\" x2=\"${px(cx + cw)}\" y2=\"${px(cy + ch)}\" stroke=\"${defaultColor}\" stroke-width=\"0.4\" opacity=\"0.6\"/>`,\n );\n if (!borders.top)\n borderEdges.push(\n `<line x1=\"${px(cx)}\" y1=\"${px(cy)}\" x2=\"${px(cx + cw)}\" y2=\"${px(cy)}\" stroke=\"${defaultColor}\" stroke-width=\"0.4\" opacity=\"0.6\"/>`,\n );\n if (!borders.bottom)\n borderEdges.push(\n `<line x1=\"${px(cx)}\" y1=\"${px(cy + ch)}\" x2=\"${px(cx + cw)}\" y2=\"${px(cy + ch)}\" stroke=\"${defaultColor}\" stroke-width=\"0.4\" opacity=\"0.6\"/>`,\n );\n\n const cellParagraphs = getTableCellParagraphs(\n cell as Parameters<typeof getTableCellParagraphs>[0],\n );\n // ECMA-376 default cell anchor is top ('t'), which is what PowerPoint /\n // LibreOffice render when `<a:tcPr anchor>` is absent.\n const vAnchor = getTableCellAnchor(typedCell) ?? 'top';\n const cellMargins = getTableCellMargins(typedCell);\n out.push(\n renderTableCellText(\n cellParagraphs,\n cx,\n cy,\n cw,\n ch,\n cellTextColor,\n pres,\n shape,\n theme,\n tableThemeFace,\n ctx,\n vAnchor,\n cellMargins,\n ),\n );\n }\n }\n out.push(borderEdges.join(''));\n out.push('</g>');\n return out.join('');\n};\n\ninterface ArcCubic {\n readonly c1x: number;\n readonly c1y: number;\n readonly c2x: number;\n readonly c2y: number;\n readonly ex: number;\n readonly ey: number;\n}\n\n/**\n * Converts an OOXML `<a:arcTo>` (center-parameterized: start at the pen\n * point, angle `stAng`, sweep `swAng`, both in 60000ths of a degree, on a\n * `wR`×`hR` axis-aligned ellipse) into cubic-Bézier segments in the path's\n * own coordinate space.\n *\n * We approximate with cubics rather than emit an SVG `A` arc because the\n * endpoint-parameterized `A` command can't represent a sweep ≥ 360° (full\n * ellipses appear in custom geometry) and forces large-arc / sweep flag\n * bookkeeping for the signed `swAng`; splitting into ≤ 90° cubic segments\n * sidesteps both and stays accurate.\n */\nconst arcToCubicSegments = (\n startX: number,\n startY: number,\n wR: number,\n hR: number,\n stAng: number,\n swAng: number,\n): ArcCubic[] => {\n const toRad = (a: number): number => (a / 60_000) * (Math.PI / 180);\n const st = toRad(stAng);\n const sw = toRad(swAng);\n // Place the ellipse center so the current pen point lies on it at `st`.\n const cx = startX - wR * Math.cos(st);\n const cy = startY - hR * Math.sin(st);\n const segCount = Math.max(1, Math.ceil(Math.abs(sw) / (Math.PI / 2)));\n const delta = sw / segCount;\n // Tangent-based control-handle length for a circular-arc cubic, applied\n // per-axis so it works for the anisotropic (wR ≠ hR) ellipse.\n const k = (4 / 3) * Math.tan(delta / 4);\n const segs: ArcCubic[] = [];\n let a0 = st;\n for (let i = 0; i < segCount; i++) {\n const a1 = a0 + delta;\n const cos0 = Math.cos(a0);\n const sin0 = Math.sin(a0);\n const cos1 = Math.cos(a1);\n const sin1 = Math.sin(a1);\n const p1x = cx + wR * cos1;\n const p1y = cy + hR * sin1;\n segs.push({\n c1x: cx + wR * cos0 - k * wR * sin0,\n c1y: cy + hR * sin0 + k * hR * cos0,\n c2x: p1x + k * wR * sin1,\n c2y: p1y - k * hR * cos1,\n ex: p1x,\n ey: p1y,\n });\n a0 = a1;\n }\n return segs;\n};\n\n/**\n * Renders an evaluated {@link CustomGeometry} as one `<path>` per\n * `GeomPath`, scaling each path's coordinate space (its own `w`/`h`, or\n * the shape extents when those are absent) onto the shape's slide box\n * `(x, y, w, h)` in EMU. Returns `''` when nothing drawable remains, so\n * the caller can fall back to the labelled rect.\n *\n * Per-path `fill=\"none\"` paints stroke-only; `stroke=\"0\"` paints\n * fill-only — mirroring `ST_PathFillMode` / the path `stroke` flag.\n */\nconst customGeometryToSvg = (\n geom: CustomGeometry,\n x: number,\n y: number,\n w: number,\n h: number,\n fill: string,\n stroke: string,\n strokeWidthEmu: number,\n strokeExtra: string,\n markerExtra: string,\n): string => {\n const out: string[] = [];\n for (const path of geom.paths) {\n const cw = path.w ?? w;\n const ch = path.h ?? h;\n // A zero-extent coordinate space can't be scaled (would divide by 0).\n if (cw === 0 || ch === 0) continue;\n const sx = w / cw;\n const sy = h / ch;\n const fx = (gx: number): string => ((x + gx * sx) / EMU_PER_PX).toFixed(2);\n const fy = (gy: number): string => ((y + gy * sy) / EMU_PER_PX).toFixed(2);\n const pt = (gx: number, gy: number): string => `${fx(gx)},${fy(gy)}`;\n\n let curX = 0;\n let curY = 0;\n let startX = 0;\n let startY = 0;\n const d: string[] = [];\n for (const cmd of path.commands) {\n switch (cmd.kind) {\n case 'moveTo':\n curX = cmd.pt.x;\n curY = cmd.pt.y;\n startX = curX;\n startY = curY;\n d.push(`M${pt(curX, curY)}`);\n break;\n case 'lnTo':\n curX = cmd.pt.x;\n curY = cmd.pt.y;\n d.push(`L${pt(curX, curY)}`);\n break;\n case 'quadBezTo':\n d.push(`Q${pt(cmd.pts[0].x, cmd.pts[0].y)} ${pt(cmd.pts[1].x, cmd.pts[1].y)}`);\n curX = cmd.pts[1].x;\n curY = cmd.pts[1].y;\n break;\n case 'cubicBezTo':\n d.push(\n `C${pt(cmd.pts[0].x, cmd.pts[0].y)} ${pt(cmd.pts[1].x, cmd.pts[1].y)} ${pt(cmd.pts[2].x, cmd.pts[2].y)}`,\n );\n curX = cmd.pts[2].x;\n curY = cmd.pts[2].y;\n break;\n case 'arcTo': {\n const segs = arcToCubicSegments(curX, curY, cmd.wR, cmd.hR, cmd.stAng, cmd.swAng);\n for (const s of segs) {\n d.push(`C${pt(s.c1x, s.c1y)} ${pt(s.c2x, s.c2y)} ${pt(s.ex, s.ey)}`);\n }\n const last = segs[segs.length - 1];\n if (last) {\n curX = last.ex;\n curY = last.ey;\n }\n break;\n }\n case 'close':\n d.push('Z');\n curX = startX;\n curY = startY;\n break;\n }\n }\n if (d.length === 0) continue;\n const pathFill = path.fill === 'none' ? 'none' : fill;\n const strokeAttrs = path.stroke\n ? ` stroke=\"${stroke}\" stroke-width=\"${E(strokeWidthEmu)}\"${strokeExtra}${markerExtra}`\n : ' stroke=\"none\"';\n out.push(`<path d=\"${d.join(' ')}\" fill=\"${pathFill}\"${strokeAttrs} fill-rule=\"evenodd\"/>`);\n }\n return out.join('');\n};\n\nconst renderShape = (\n shape: SlideShapeData,\n pres: PresentationData,\n theme: PresentationTheme | null,\n ctx: LayoutCtx,\n): string => {\n // Use the inheriting resolver: shape → layout → master. Slide\n // placeholders routinely defer geometry to the master, so the literal\n // `getShapeBounds` returns null for them and the preview would hide\n // every title / body / footer slot.\n const bounds = getShapeBoundsResolved(pres, shape);\n if (!bounds) return '';\n const x = bounds.x as number;\n const y = bounds.y as number;\n const w = bounds.w as number;\n const h = bounds.h as number;\n const kind = getShapeKind(shape);\n // Connectors (lines) are legitimately zero-height when horizontal or\n // zero-width when vertical — only a true point (both zero) is degenerate.\n // Every other shape with no area is invisible, so skip it.\n if (kind === 'connector' ? w <= 0 && h <= 0 : w <= 0 || h <= 0) return '';\n\n const fill = getShapeFillEffective(pres, shape);\n const stroke = getShapeStrokeEffective(pres, shape);\n const rotation = getShapeRotation(shape);\n const flip = getShapeFlip(shape) ?? { horizontal: false, vertical: false };\n const phType = getShapePlaceholderType(shape);\n const cx = x + w / 2;\n const cy = y + h / 2;\n\n // Build the transform string. Rotation around the shape's centre,\n // then flips around the same point if set.\n const transforms: string[] = [];\n if (rotation !== 0) transforms.push(`rotate(${rotation} ${E(cx)} ${E(cy)})`);\n if (flip.horizontal) transforms.push(`translate(${E(2 * cx)} 0) scale(-1 1)`);\n if (flip.vertical) transforms.push(`translate(0 ${E(2 * cy)}) scale(1 -1)`);\n const transform = transforms.length > 0 ? ` transform=\"${transforms.join(' ')}\"` : '';\n // Text follows the shape's ROTATION but not its flips — PowerPoint mirrors a\n // shape's geometry on flip while keeping its text upright and readable. So\n // the text overlay gets a rotation-only transform.\n const textTransform = rotation !== 0 ? ` transform=\"rotate(${rotation} ${E(cx)} ${E(cy)})\"` : '';\n\n const textOverlay =\n kind === 'shape' || kind === 'graphicFrame'\n ? renderTextBody(pres, shape, { x, y, w, h }, theme, phType, ctx)\n : '';\n\n if (kind === 'picture') {\n return renderPicture(\n shape,\n pres,\n x,\n y,\n w,\n h,\n transform,\n textOverlay,\n getShapeImageBytes(shape),\n getShapeImageFormat(shape),\n );\n }\n\n // Shapes with an image fill (`<p:sp>` + `<a:blipFill>` instead of a\n // solid / gradient / pattern). PowerPoint's \"Insert Picture from\n // File\" and several third-party tools emit pictures this way rather\n // than as top-level `<p:pic>`.\n if (kind === 'shape' && fill.kind === 'image') {\n return renderPicture(\n shape,\n pres,\n x,\n y,\n w,\n h,\n transform,\n textOverlay,\n getShapeImageFillBytes(shape),\n getShapeImageFormat(shape),\n );\n }\n\n if (kind === 'connector') {\n const p = paint(shape, fill, stroke, theme, false, pres);\n const sw = p.strokeWidth || 19_050;\n let x1 = x;\n let y1 = y;\n let x2 = x + w;\n let y2 = y + h;\n if (flip.horizontal) {\n x1 = x + w;\n x2 = x;\n }\n if (flip.vertical) {\n y1 = y + h;\n y2 = y;\n }\n const strokeColor =\n p.stroke === 'none' ? resolveColor('scheme:tx1', theme, '#1F2937') : p.stroke;\n const sa = p.strokeAttrs ? ` ${p.strokeAttrs}` : '';\n const ma = p.markerAttrs ?? '';\n // B8 — bent / curved connector routing. Per ECMA-376 §20.1.9.18,\n // bentConnector{2,3,4,5} are L-shaped, step, and double-step paths;\n // curvedConnector{2,3,4,5} are quadratic / cubic Bézier curves. We\n // route them between the bounding box's diagonal endpoints in\n // CSS-px so the cadence matches PowerPoint within visual tolerance.\n const preset = getShapePreset(shape) ?? 'line';\n if (preset === 'straightConnector1' || preset === 'line') {\n return `${p.defs}<line x1=\"${E(x1)}\" y1=\"${E(y1)}\" x2=\"${E(x2)}\" y2=\"${E(y2)}\" stroke=\"${strokeColor}\" stroke-width=\"${E(sw)}\" stroke-linecap=\"round\"${sa}${ma}${transform}/>`;\n }\n // For bent / curved, we work in CSS px to keep the path math readable.\n const px1 = x1 / EMU_PER_PX;\n const py1 = y1 / EMU_PER_PX;\n const px2 = x2 / EMU_PER_PX;\n const py2 = y2 / EMU_PER_PX;\n let d = `M${px1.toFixed(2)} ${py1.toFixed(2)}`;\n if (preset === 'bentConnector2') {\n // Single L: horizontal then vertical.\n d += ` L${px2.toFixed(2)} ${py1.toFixed(2)} L${px2.toFixed(2)} ${py2.toFixed(2)}`;\n } else if (preset === 'bentConnector3') {\n // Z-bend: horizontal halfway, vertical, horizontal to endpoint.\n const midX = (px1 + px2) / 2;\n d += ` L${midX.toFixed(2)} ${py1.toFixed(2)} L${midX.toFixed(2)} ${py2.toFixed(2)} L${px2.toFixed(2)} ${py2.toFixed(2)}`;\n } else if (preset === 'bentConnector4') {\n // Two-step: H halfway, V halfway, H, V to endpoint.\n const mx = (px1 + px2) / 2;\n const my = (py1 + py2) / 2;\n d += ` L${mx.toFixed(2)} ${py1.toFixed(2)} L${mx.toFixed(2)} ${my.toFixed(2)} L${px2.toFixed(2)} ${my.toFixed(2)} L${px2.toFixed(2)} ${py2.toFixed(2)}`;\n } else if (preset === 'bentConnector5') {\n // Three-step: same pattern, one more segment.\n const q1x = px1 + (px2 - px1) / 3;\n const q2x = px1 + (2 * (px2 - px1)) / 3;\n const my = (py1 + py2) / 2;\n d += ` L${q1x.toFixed(2)} ${py1.toFixed(2)} L${q1x.toFixed(2)} ${my.toFixed(2)} L${q2x.toFixed(2)} ${my.toFixed(2)} L${q2x.toFixed(2)} ${py2.toFixed(2)} L${px2.toFixed(2)} ${py2.toFixed(2)}`;\n } else if (preset === 'curvedConnector2') {\n // Single quadratic curve through the corner.\n d += ` Q${px2.toFixed(2)} ${py1.toFixed(2)} ${px2.toFixed(2)} ${py2.toFixed(2)}`;\n } else if (\n preset === 'curvedConnector3' ||\n preset === 'curvedConnector4' ||\n preset === 'curvedConnector5'\n ) {\n // S-curve: cubic Bézier with control points at one-third / two-thirds.\n const c1x = px1 + (px2 - px1) / 3;\n const c2x = px1 + (2 * (px2 - px1)) / 3;\n d += ` C${c1x.toFixed(2)} ${py1.toFixed(2)} ${c2x.toFixed(2)} ${py2.toFixed(2)} ${px2.toFixed(2)} ${py2.toFixed(2)}`;\n } else {\n // Unknown connector preset — fall back to a straight line.\n d += ` L${px2.toFixed(2)} ${py2.toFixed(2)}`;\n }\n return `${p.defs}<path d=\"${d}\" fill=\"none\" stroke=\"${strokeColor}\" stroke-width=\"${E(sw)}\" stroke-linecap=\"round\" stroke-linejoin=\"round\"${sa}${ma}${transform}/>`;\n }\n\n if (kind === 'group') {\n // Recurse into the group's children. Their bounds live in the\n // group's internal coordinate system; an SVG transform maps that\n // onto the slide. Children are rendered the same way as\n // top-level shapes — nested groups recurse naturally.\n const xform = getGroupTransform(shape);\n const children = getGroupChildren(shape);\n if (children.length === 0) return '';\n const tParts: string[] = [];\n // B7 — group-level rotation / flip. The group's <a:xfrm rot=…\n // flipH=… flipV=…> applies to the whole subtree, around the group's\n // outer-rect center. Compose those transforms first, then the\n // translate+scale that maps internal coords onto slide coords.\n if (xform && rotation !== 0) {\n const cxG = ((xform.outer.x as number) + (xform.outer.w as number) / 2) / EMU_PER_PX;\n const cyG = ((xform.outer.y as number) + (xform.outer.h as number) / 2) / EMU_PER_PX;\n tParts.push(`rotate(${rotation} ${cxG.toFixed(2)} ${cyG.toFixed(2)})`);\n }\n if (xform && flip.horizontal) {\n const cxG = ((xform.outer.x as number) + (xform.outer.w as number) / 2) / EMU_PER_PX;\n tParts.push(`translate(${(2 * cxG).toFixed(2)} 0) scale(-1 1)`);\n }\n if (xform && flip.vertical) {\n const cyG = ((xform.outer.y as number) + (xform.outer.h as number) / 2) / EMU_PER_PX;\n tParts.push(`translate(0 ${(2 * cyG).toFixed(2)}) scale(1 -1)`);\n }\n if (xform) {\n const ox = xform.outer.x as number;\n const oy = xform.outer.y as number;\n const ow = xform.outer.w as number;\n const oh = xform.outer.h as number;\n const ix = xform.inner.x as number;\n const iy = xform.inner.y as number;\n const iw = (xform.inner.w as number) || 1;\n const ih = (xform.inner.h as number) || 1;\n const sx = (ow / iw).toFixed(6);\n const sy = (oh / ih).toFixed(6);\n // translate first, then scale, so the child's natural coords\n // (px) project: ox/EMU_PER_PX + (cx - ix) * sx / EMU_PER_PX,\n // which factors as translate(ox/EMU - ix*sx/EMU) scale(sx).\n const tx = ((ox - ix * (ow / iw)) / EMU_PER_PX).toFixed(2);\n const ty = ((oy - iy * (oh / ih)) / EMU_PER_PX).toFixed(2);\n tParts.push(`translate(${tx} ${ty})`, `scale(${sx} ${sy})`);\n }\n const groupTransform = tParts.length > 0 ? ` transform=\"${tParts.join(' ')}\"` : '';\n const childrenSvg = children.map((c) => renderShape(c, pres, theme, ctx)).join('');\n return `<g${groupTransform}>${childrenSvg}</g>`;\n }\n\n const p = paint(shape, fill, stroke, theme, phType !== null, pres);\n\n if (kind === 'graphicFrame') {\n // Charts and tables get real renders. SmartArt and the\n // graphicFrame variants pptx-kit doesn't model fall through to a\n // labelled placeholder.\n if (isChartShape(shape)) {\n const chartSvg = renderChart(shape, x, y, w, h, transform, theme);\n if (chartSvg) return chartSvg;\n }\n if (isTableShape(shape)) {\n const tableSvg = renderTable(shape, pres, x, y, w, h, transform, theme, ctx);\n if (tableSvg) return tableSvg;\n }\n let label = 'graphicFrame';\n try {\n if (isChartShape(shape)) {\n // `isChartShape` was true but renderChart returned null —\n // pptx-kit couldn't model this chart kind. scatter / radar /\n // bubble now render; what's left here is stock / surface / 3D /\n // of-pie, which the reader still folds or drops.\n label = 'chart (unsupported kind)';\n } else if (isTableShape(shape)) {\n const t = getTableDimensions(shape);\n label = `table (${t.rows}×${t.cols})`;\n }\n } catch {\n // Fall through with the generic label.\n }\n const gfFallbackKind = label.startsWith('chart') ? 'chart' : 'graphicFrame';\n return `<g data-pptx-fallback=\"${gfFallbackKind}\"${transform}><rect x=\"${E(x)}\" y=\"${E(y)}\" width=\"${E(w)}\" height=\"${E(h)}\" fill=\"${p.fill === 'none' ? '#F9FAFB' : p.fill}\" stroke=\"#9CA3AF\" stroke-width=\"${E(9_525)}\" stroke-dasharray=\"${E(50_000)},${E(30_000)}\"/>${renderPicturePlaceholderLabel(x, y, w, h, label)}${textOverlay}</g>`;\n }\n\n // kind === 'shape'\n const rawPreset = getShapePreset(shape);\n const preset = rawPreset ?? 'rect';\n\n const sa = p.strokeAttrs ? ` ${p.strokeAttrs}` : '';\n const ma = p.markerAttrs ?? '';\n // Custom geometry (<a:custGeom>) overrides the preset path entirely.\n // getShapePreset returns null for it, so only the no-preset case probes.\n const customGeom = rawPreset === null ? getShapeCustomGeometry(shape) : null;\n let geomSvg =\n customGeom !== null\n ? customGeometryToSvg(customGeom, x, y, w, h, p.fill, p.stroke, p.strokeWidth, sa, ma)\n : '';\n // No preset and no rendered custom geometry means either a custGeom that\n // failed to evaluate (a true fallback — marked) or no geometry at all\n // (placeholders inherit theirs from the layout, which is almost always a\n // rect — correct, not marked). The string probe distinguishes the two\n // because getShapeCustomGeometry returns null for both malformed custGeom\n // and absent custGeom.\n const isCustGeom =\n geomSvg === '' && rawPreset === null && getShapeXmlString(shape).includes('custGeom');\n\n if (geomSvg !== '') {\n // geomSvg already holds the rendered custom geometry.\n } else if (preset === 'rect') {\n geomSvg = `<rect x=\"${E(x)}\" y=\"${E(y)}\" width=\"${E(w)}\" height=\"${E(h)}\" fill=\"${p.fill}\" stroke=\"${p.stroke}\" stroke-width=\"${E(p.strokeWidth)}\"${sa}${ma}/>`;\n } else if (preset === 'roundRect') {\n // A6 — adjust-handle aware corner radius. <a:gd name=\"adj\"\n // fmla=\"val N\"/> in [0, 50000] = ratio of corner-radius to\n // min(w,h)/2 × 100. Defaults to ~16.6% when no adj is authored.\n const adjusts = getShapeAdjustValues(shape);\n const adjVal = adjusts.adj ?? 16667;\n const ratio = Math.max(0, Math.min(0.5, adjVal / 100_000));\n const r = E(Math.min(w, h) * ratio);\n geomSvg = `<rect x=\"${E(x)}\" y=\"${E(y)}\" width=\"${E(w)}\" height=\"${E(h)}\" rx=\"${r}\" ry=\"${r}\" fill=\"${p.fill}\" stroke=\"${p.stroke}\" stroke-width=\"${E(p.strokeWidth)}\"${sa}${ma}/>`;\n } else if (preset === 'ellipse' || preset === 'oval') {\n geomSvg = `<ellipse cx=\"${E(cx)}\" cy=\"${E(cy)}\" rx=\"${E(w / 2)}\" ry=\"${E(h / 2)}\" fill=\"${p.fill}\" stroke=\"${p.stroke}\" stroke-width=\"${E(p.strokeWidth)}\"${sa}${ma}/>`;\n } else {\n const pathFn = PRESET_PATHS[preset];\n if (pathFn) {\n // The path generators output CSS-px coords directly (post-E).\n const d = pathFn(x / EMU_PER_PX, y / EMU_PER_PX, w / EMU_PER_PX, h / EMU_PER_PX);\n geomSvg = `<path d=\"${d}\" fill=\"${p.fill}\" stroke=\"${p.stroke}\" stroke-width=\"${E(p.strokeWidth)}\" fill-rule=\"evenodd\"${sa}${ma}/>`;\n } else {\n const pointsFn = PRESET_POINTS[preset];\n if (pointsFn) {\n const points = pointsFn()\n .map(([nx, ny]) => `${E(x + nx * w)},${E(y + ny * h)}`)\n .join(' ');\n geomSvg = `<polygon points=\"${points}\" fill=\"${p.fill}\" stroke=\"${p.stroke}\" stroke-width=\"${E(p.strokeWidth)}\"${sa}${ma}/>`;\n } else {\n // Unrecognised preset — fall back to a rectangle, but tag it\n // with the preset name so users (and future-us) can see which\n // shape needs a renderer. The `<title>` shows on hover; the\n // `data-pptx-preset` attribute is for DevTools inspection.\n geomSvg = `<rect x=\"${E(x)}\" y=\"${E(y)}\" width=\"${E(w)}\" height=\"${E(h)}\" fill=\"${p.fill}\" stroke=\"${p.stroke}\" stroke-width=\"${E(p.strokeWidth)}\"${sa}${ma} data-pptx-preset=\"${escapeXml(preset)}\"><title>${escapeXml(`preset: ${preset}`)}</title></rect>`;\n }\n }\n }\n\n // Effects (`<a:effectLst>`): outerShdw / innerShdw / glow / softEdge\n // / reflection / blur. Build a single SVG <filter> chain so multiple\n // effects compose the way PowerPoint composes them.\n const fx = buildEffectsFilter(pres, shape);\n const filterAttr = fx ? ` filter=\"url(#${fx.id})\"` : '';\n let fxDefs = fx ? fx.defs : '';\n // Reflection can't live in the `<filter>` chain (SVG has no flip-and-fade\n // primitive), so it's a duplicated, vertically mirrored copy of the raw\n // geometry masked by an opacity gradient — built from the un-filtered\n // geometry markup before the filter wraps it.\n const reflection = buildReflection(pres, shape, geomSvg, { x, y, w, h });\n // Apply the filter to the geometry only — text overlays use foreignObject\n // and react badly to feGaussianBlur (DOM gets rasterized).\n geomSvg = `<g${filterAttr}>${geomSvg}</g>`;\n if (reflection) {\n // Paint the reflection behind the shape; it sits below the bottom edge\n // so they don't overlap, but keeping it first matches PowerPoint's z-order.\n geomSvg = reflection.svg + geomSvg;\n fxDefs += reflection.defs;\n }\n\n // B6 — Shape-level hyperlinks + slide-jump click actions. Wrap the\n // rendered shape in an SVG <a href> so the playground preview is\n // clickable, matching the PowerPoint slideshow's behavior. Per-run\n // hyperlinks live on the text body and are handled by renderRun\n // separately.\n const url = getShapeHyperlink(shape);\n const tooltip = getShapeHyperlinkTooltip(shape);\n // Expose the shape's authored name as a data attribute so DevTools /\n // Selenium / a11y inspections can identify a shape without having to\n // parse SVG geometry. The PowerPoint alt-title / alt-description feed\n // `aria-label` so screen readers announce decks the same way\n // PowerPoint's Accessibility Inspector reports them.\n const shapeName = (() => {\n try {\n return getShapeName(shape);\n } catch {\n return null;\n }\n })();\n const altTitle = (() => {\n try {\n return getShapeAltTitle(shape);\n } catch {\n return null;\n }\n })();\n const altDesc = (() => {\n try {\n return getShapeDescription(shape);\n } catch {\n return null;\n }\n })();\n const a11yLabel = altTitle ?? altDesc ?? null;\n const nameAttr = shapeName ? ` data-pptx-shape-name=\"${escapeXml(shapeName)}\"` : '';\n const ariaAttr = a11yLabel ? ` role=\"img\" aria-label=\"${escapeXml(a11yLabel)}\"` : '';\n // Geometry carries rotation + flips; text carries rotation only so it stays\n // upright when the shape is flipped (matching PowerPoint).\n const placedText = textOverlay ? `<g${textTransform}>${textOverlay}</g>` : '';\n const custGeomAttr = isCustGeom ? ' data-pptx-fallback=\"custGeom\"' : '';\n const inner = `${p.defs}${fxDefs}<g${nameAttr}${ariaAttr}${custGeomAttr}><g${transform}>${geomSvg}</g>${placedText}</g>`;\n const titleEl = tooltip ? `<title>${escapeXml(tooltip)}</title>` : '';\n if (url) {\n return `<a href=\"${escapeXml(url)}\" target=\"_blank\" rel=\"noopener noreferrer\">${titleEl}${inner}</a>`;\n }\n // Slide-jump click actions resolve to a hash anchor — the playground\n // gives each <li> an id=\"slide-N\" so the browser jumps in-page.\n const action = getShapeClickAction(shape);\n if (action) {\n let href: string | null = null;\n if (action.kind === 'slide') {\n const idx = getSlideIndex(pres, action.slide);\n if (idx >= 0) href = `#slide-${idx + 1}`;\n } else if (action.kind === 'url') {\n href = action.url;\n }\n if (href !== null) {\n const isInPage = href.startsWith('#');\n const targetAttrs = isInPage ? '' : ' target=\"_blank\" rel=\"noopener noreferrer\"';\n return `<a href=\"${escapeXml(href)}\"${targetAttrs}>${titleEl}${inner}</a>`;\n }\n }\n return inner;\n};\n\n// ---------------------------------------------------------------------------\n// Effects → SVG filter.\n\ninterface EffectsResult {\n readonly id: string;\n readonly defs: string;\n}\n\ninterface ReflectionResult {\n readonly svg: string;\n readonly defs: string;\n}\n\n// Builds the reflection: a vertically mirrored copy of the shape's raw\n// geometry placed below its bottom edge, faded by a vertical opacity mask.\n// PowerPoint encodes the mirror as a negative `sy`; `stA`/`endA` give the\n// alpha at the near (contact) and far edges, `dist` the gap below the shape.\nconst buildReflection = (\n pres: PresentationData,\n shape: SlideShapeData,\n geomRaw: string,\n box: { x: number; y: number; w: number; h: number },\n): ReflectionResult | null => {\n let effects: readonly ReturnType<typeof getShapeEffects>[number][];\n try {\n effects = getShapeEffectsEffective(pres, shape);\n } catch {\n return null;\n }\n const refl = effects.find((e) => e.kind === 'reflection');\n if (!refl || refl.kind !== 'reflection') return null;\n\n // Honor the authored vertical scale (signed: negative = the flip);\n // default to a full-height mirror when the deck omits `sy`, since a\n // reflection with no flip isn't a reflection.\n const f = refl.scaleY ?? -1;\n const startA = refl.startOpacity ?? 1;\n const endA = refl.opacity ?? 0;\n // Geometry coords are emitted in px (see `E`), so the transform math\n // works in px too: contact edge at the shape's bottom, gap pushed down.\n const contactPx = (box.y + box.h) / EMU_PER_PX;\n const distPx = refl.distEmu / EMU_PER_PX;\n // scale(1,f) about y=contactPx, then translate the whole thing down by dist.\n const transform = `translate(0 ${(distPx + contactPx * (1 - f)).toFixed(2)}) scale(1 ${f})`;\n\n const maskId = mintId();\n const gradId = mintId();\n // objectBoundingBox: y=0 is the contact edge (top of the mirrored copy),\n // y=1 the far edge. White luminance × stop-opacity becomes the alpha.\n const defs =\n `<defs><linearGradient id=\"${gradId}\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">` +\n `<stop offset=\"0\" stop-color=\"#fff\" stop-opacity=\"${startA.toFixed(3)}\"/>` +\n `<stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\"${endA.toFixed(3)}\"/>` +\n `</linearGradient>` +\n `<mask id=\"${maskId}\" maskContentUnits=\"objectBoundingBox\">` +\n `<rect width=\"1\" height=\"1\" fill=\"url(#${gradId})\"/></mask></defs>`;\n const svg = `<g transform=\"${transform}\" mask=\"url(#${maskId})\" data-pptx-reflection=\"1\">${geomRaw}</g>`;\n return { svg, defs };\n};\n\nconst buildEffectsFilter = (\n pres: PresentationData,\n shape: SlideShapeData,\n): EffectsResult | null => {\n let effects: readonly ReturnType<typeof getShapeEffects>[number][];\n try {\n effects = getShapeEffectsEffective(pres, shape);\n } catch {\n return null;\n }\n if (effects.length === 0) return null;\n\n const id = mintId();\n const primitives: string[] = [];\n // Chain primitives by passing each result as `in` to the next merge.\n // The shape's original alpha + RGB live in SourceGraphic / SourceAlpha.\n const layers: string[] = [];\n\n for (const e of effects) {\n if (e.kind === 'outerShdw') {\n // dist + angle → dx, dy in EMU → px.\n const rad = (e.angleDeg * Math.PI) / 180;\n const dx = (e.distEmu * Math.cos(rad)) / EMU_PER_PX;\n const dy = (e.distEmu * Math.sin(rad)) / EMU_PER_PX;\n const blurPx = e.blurEmu / EMU_PER_PX / 2;\n const opacity = e.opacity ?? 1;\n const color = e.color || '#000000';\n // feDropShadow handles the whole shadow primitive in one go.\n const out = `shdwOut${primitives.length}`;\n primitives.push(\n `<feDropShadow dx=\"${dx.toFixed(2)}\" dy=\"${dy.toFixed(2)}\" stdDeviation=\"${blurPx.toFixed(2)}\" flood-color=\"${color}\" flood-opacity=\"${opacity.toFixed(3)}\" result=\"${out}\"/>`,\n );\n layers.push(out);\n } else if (e.kind === 'innerShdw') {\n // SVG has no innerShadow primitive — synthesize via:\n // inset = (sourceAlpha offset, blurred) - sourceAlpha (inverted)\n // and re-flood with the shadow color.\n const rad = (e.angleDeg * Math.PI) / 180;\n const dx = (e.distEmu * Math.cos(rad)) / EMU_PER_PX;\n const dy = (e.distEmu * Math.sin(rad)) / EMU_PER_PX;\n const blurPx = e.blurEmu / EMU_PER_PX / 2;\n const color = e.color || '#000000';\n const opacity = e.opacity ?? 1;\n const i = primitives.length;\n primitives.push(\n `<feGaussianBlur in=\"SourceAlpha\" stdDeviation=\"${blurPx.toFixed(2)}\" result=\"innerBlur${i}\"/>`,\n `<feOffset in=\"innerBlur${i}\" dx=\"${dx.toFixed(2)}\" dy=\"${dy.toFixed(2)}\" result=\"innerOff${i}\"/>`,\n `<feComposite in=\"innerOff${i}\" in2=\"SourceAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\" result=\"innerMask${i}\"/>`,\n `<feFlood flood-color=\"${color}\" flood-opacity=\"${opacity.toFixed(3)}\" result=\"innerCol${i}\"/>`,\n `<feComposite in=\"innerCol${i}\" in2=\"innerMask${i}\" operator=\"in\" result=\"innerOut${i}\"/>`,\n );\n layers.push(`innerOut${i}`);\n } else if (e.kind === 'glow') {\n const blurPx = e.radiusEmu / EMU_PER_PX / 2;\n const color = e.color || '#FFFFFF';\n const opacity = e.opacity ?? 1;\n const i = primitives.length;\n primitives.push(\n `<feMorphology in=\"SourceAlpha\" operator=\"dilate\" radius=\"${(blurPx / 4).toFixed(2)}\" result=\"glowExp${i}\"/>`,\n `<feGaussianBlur in=\"glowExp${i}\" stdDeviation=\"${blurPx.toFixed(2)}\" result=\"glowBlur${i}\"/>`,\n `<feFlood flood-color=\"${color}\" flood-opacity=\"${opacity.toFixed(3)}\" result=\"glowCol${i}\"/>`,\n `<feComposite in=\"glowCol${i}\" in2=\"glowBlur${i}\" operator=\"in\" result=\"glowOut${i}\"/>`,\n );\n layers.push(`glowOut${i}`);\n } else if (e.kind === 'softEdge') {\n const blurPx = e.radiusEmu / EMU_PER_PX / 2;\n // Soft-edge feathers the shape's mask. Replace the source by a\n // blurred version of itself.\n const i = primitives.length;\n primitives.push(\n `<feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"${blurPx.toFixed(2)}\" result=\"softOut${i}\"/>`,\n );\n // softEdge replaces the source; we drop earlier layers and the\n // unmodified source is no longer painted on top.\n layers.length = 0;\n layers.push(`softOut${i}`);\n } else if (e.kind === 'blur') {\n const blurPx = e.radiusEmu / EMU_PER_PX / 2;\n const i = primitives.length;\n primitives.push(\n `<feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"${blurPx.toFixed(2)}\" result=\"blurOut${i}\"/>`,\n );\n layers.length = 0;\n layers.push(`blurOut${i}`);\n }\n // Reflection is handled outside the filter chain (see buildReflection):\n // SVG `<filter>` has no flip-and-fade primitive.\n }\n\n // Compose: paint each effect layer plus the original SourceGraphic.\n // Shadows want to sit behind the source; glow behind too; innerShdw\n // and softEdge already replace bits of the source. Doing the merge\n // in order produces reasonable layering for the common cases.\n if (layers.length === 0) return null;\n\n // Always paint the original source last so it sits on top of shadows /\n // glows. softEdge/blur replaced the source so we don't double-paint.\n const replacedSource = effects.some((e) => e.kind === 'softEdge' || e.kind === 'blur');\n const mergeChildren = layers.map((l) => `<feMergeNode in=\"${l}\"/>`).join('');\n const sourceMerge = replacedSource ? '' : '<feMergeNode in=\"SourceGraphic\"/>';\n primitives.push(`<feMerge>${mergeChildren}${sourceMerge}</feMerge>`);\n\n const defs = `<defs><filter id=\"${id}\" x=\"-25%\" y=\"-25%\" width=\"150%\" height=\"150%\">${primitives.join('')}</filter></defs>`;\n return { id, defs };\n};\n\n// ---------------------------------------------------------------------------\n// Slide composition.\n\nexport const renderSlideSvg = (\n pres: PresentationData,\n slide: SlideData,\n opts: RenderSlideOptions = {},\n): string => {\n const size = getSlideSize(pres) ?? DEFAULT_SIZE;\n const W = size.width as number;\n const H = size.height as number;\n const theme = getPresentationTheme(pres);\n activeColorMap = getEffectiveColorMap(slide);\n const ctx: LayoutCtx = {\n mode: opts.textLayout ?? 'foreignObject',\n measure: opts.measureText ?? defaultMeasurer,\n };\n\n let bg = getSlideBackground(slide);\n // B10 — when the slide reports inherit, walk to the layout; when the\n // layout also inherits, walk one more step to the master. Real brand\n // templates put the actual background fill on the master only.\n if (bg.kind === 'inherit') {\n const layout = getSlideLayout(slide);\n if (layout) {\n const layoutBg = getSlideLayoutBackground(layout);\n if (layoutBg.kind !== 'inherit') {\n bg = layoutBg;\n } else {\n const masterBg = getSlideMasterBackground(pres, layout);\n if (masterBg.kind !== 'inherit') bg = masterBg;\n }\n }\n }\n let bgColor = '#FFFFFF';\n let bgGradient = '';\n let bgGradientDefs = '';\n if (bg.kind === 'solid') {\n bgColor = resolveColor(bg.color, theme, '#FFFFFF');\n } else if (bg.kind === 'gradient') {\n // B11 — gradient slide backgrounds. Use the same projector as\n // shape fills so radial / rect / shape paths all behave.\n // Walk slide → layout → master for the actual gradient definition.\n let grad = getSlideBackgroundGradientFill(slide);\n if (!grad) {\n const layout = getSlideLayout(slide);\n if (layout) {\n grad = getSlideLayoutBackgroundGradientFill(layout);\n if (!grad) grad = getSlideMasterBackgroundGradientFill(pres, layout);\n }\n }\n if (grad) {\n const built = gradientDef(grad, theme);\n bgGradientDefs = built.defs;\n bgGradient = `<rect width=\"${E(W)}\" height=\"${E(H)}\" fill=\"${built.fillAttr}\"/>`;\n }\n } else if (bg.kind === 'pattern') {\n let pat = getSlideBackgroundPatternFill(pres, slide);\n if (!pat) {\n const layout = getSlideLayout(slide);\n if (layout) {\n pat = getSlideLayoutBackgroundPatternFill(pres, layout);\n if (!pat) pat = getSlideMasterBackgroundPatternFill(pres, layout);\n }\n }\n if (pat) {\n const built = patternDef(pat);\n bgGradientDefs += built.defs;\n bgGradient = `<rect width=\"${E(W)}\" height=\"${E(H)}\" fill=\"${built.fillAttr}\"/>`;\n }\n } else if (theme && bg.kind === 'inherit') {\n bgColor = normalizeHex(theme.light1);\n }\n\n // Slide background image (`<p:bgPr><a:blipFill>`). Paint it above the\n // solid bg-color rect so the bytes show through; shapes still draw\n // on top of the image.\n let bgImage = '';\n if (bg.kind === 'image') {\n let bytes = getSlideBackgroundImageBytes(slide);\n if (!bytes && pres) {\n const layout = getSlideLayout(slide);\n if (layout) {\n bytes = getSlideLayoutBackgroundImageBytes(pres, layout);\n if (!bytes) bytes = getSlideMasterBackgroundImageBytes(pres, layout);\n }\n }\n if (bytes) {\n const fmt = detectImageFormatLocal(bytes);\n const mime = fmt ? (imageMime[fmt] ?? 'image/png') : 'image/png';\n const dataUrl = `data:${mime};base64,${u8ToBase64(bytes)}`;\n bgImage = `<image x=\"0\" y=\"0\" width=\"${E(W)}\" height=\"${E(H)}\" href=\"${dataUrl}\" xlink:href=\"${dataUrl}\" preserveAspectRatio=\"xMidYMid slice\"/>`;\n }\n }\n\n // Layout-level non-placeholder shapes — corner bars, divider lines,\n // template logos as solid rects. Painted *before* slide shapes so\n // slide content stays on top.\n // Template decoration: the non-placeholder shapes on the slide master and\n // its layout (corner bars, divider lines, logos, watermark text). Render them\n // through the full `renderShape` pipeline — master behind layout, both behind\n // the slide's own content — so logos (pictures), text and real geometry all\n // appear. Picture bytes resolve because the shapes are bound to their part.\n let layoutBgShapes = '';\n const layoutForBg = getSlideLayout(slide);\n if (layoutForBg) {\n try {\n const masterShapes = getSlideMasterShapes(pres, layoutForBg);\n const layoutShapes = getSlideLayoutShapes(pres, layoutForBg);\n layoutBgShapes = [...masterShapes, ...layoutShapes]\n .map((s) => renderShape(s, pres, theme, ctx))\n .join('');\n } catch {\n layoutBgShapes = '';\n }\n }\n\n const shapesSvg = getSlideShapes(slide)\n .map((s) => renderShape(s, pres, theme, ctx))\n .join('');\n\n return [\n `<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 ${E(W)} ${E(H)}\" preserveAspectRatio=\"xMidYMid meet\">`,\n bgGradientDefs,\n `<rect width=\"${E(W)}\" height=\"${E(H)}\" fill=\"${bgColor}\"/>`,\n bgGradient,\n bgImage,\n layoutBgShapes,\n shapesSvg,\n '</svg>',\n ].join('');\n};\n\n// Minimal magic-byte sniffer covering the formats we already know how\n// to MIME-type. Used for slide background images, which pptx-kit\n// returns as raw bytes without exposing the format.\nconst detectImageFormatLocal = (bytes: Uint8Array): string | null => {\n if (bytes.length < 4) return null;\n if (bytes[0] === 0x89 && bytes[1] === 0x50 && bytes[2] === 0x4e && bytes[3] === 0x47)\n return 'png';\n if (bytes[0] === 0xff && bytes[1] === 0xd8 && bytes[2] === 0xff) return 'jpeg';\n if (bytes[0] === 0x47 && bytes[1] === 0x49 && bytes[2] === 0x46) return 'gif';\n if (bytes[0] === 0x42 && bytes[1] === 0x4d) return 'bmp';\n if (\n bytes.length >= 12 &&\n bytes[0] === 0x52 &&\n bytes[1] === 0x49 &&\n bytes[2] === 0x46 &&\n bytes[3] === 0x46 &&\n bytes[8] === 0x57 &&\n bytes[9] === 0x45 &&\n bytes[10] === 0x42 &&\n bytes[11] === 0x50\n )\n return 'webp';\n return null;\n};\n","// Node-only fontkit-backed TextMeasurer. NEVER imported by render-slide.ts /\n// text-layout.ts (which must stay browser-safe) — only by the node entry. It\n// measures advance widths and vertical metrics from the same bundled TTFs that\n// resvg rasterizes with (and that LibreOffice renders ground truth with), so\n// the engine's wrap/positioning math agrees with the painted pixels.\n\nimport * as fontkit from 'fontkit';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport {\n ARIAL,\n MONO,\n SANS,\n SERIF,\n TIMES,\n type FontSpec,\n type TextMeasurer,\n} from './text-layout.ts';\n\nexport const FONT_DIR = fileURLToPath(new URL('../fonts/', import.meta.url));\n\n// Internal family name (what the emitter writes + resvg matches) → file prefix.\nconst FAMILY_TO_PREFIX: Record<string, string> = {\n [SANS]: 'Carlito',\n [SERIF]: 'Caladea',\n [ARIAL]: 'LiberationSans',\n [TIMES]: 'LiberationSerif',\n [MONO]: 'LiberationMono',\n};\n\nconst STYLES = ['Regular', 'Bold', 'Italic', 'BoldItalic'] as const;\n\nconst facePath = (prefix: string, style: string): string => `${FONT_DIR}${prefix}-${style}.ttf`;\n\n/** Absolute paths of every bundled face — passed to resvg's `fontFiles`. */\nexport const FONT_FILES: string[] = Object.values(FAMILY_TO_PREFIX).flatMap((prefix) =>\n STYLES.map((s) => facePath(prefix, s)),\n);\n\n// fontkit.create returns Font | FontCollection; our TTFs are single fonts.\nconst openFont = (path: string): fontkit.Font => {\n const font = fontkit.create(readFileSync(path));\n if (!('layout' in font)) {\n throw new Error(`Expected a single font in ${path}, got a collection`);\n }\n return font;\n};\n\nconst styleSuffix = (spec: FontSpec): (typeof STYLES)[number] => {\n if (spec.bold && spec.italic) return 'BoldItalic';\n if (spec.bold) return 'Bold';\n if (spec.italic) return 'Italic';\n return 'Regular';\n};\n\nexport const buildFontkitMeasurer = (): TextMeasurer => {\n const cache = new Map<string, fontkit.Font>();\n // Load + verify every face up front. The familyName assertion guarantees the\n // emit-side family === resvg match === the face we measure, which is the load-\n // bearing invariant for \"x= is where glyphs land\".\n for (const [family, prefix] of Object.entries(FAMILY_TO_PREFIX)) {\n for (const style of STYLES) {\n const path = facePath(prefix, style);\n if (!existsSync(path)) throw new Error(`Missing bundled font: ${path}`);\n const font = openFont(path);\n if (style === 'Regular' && font.familyName !== family) {\n throw new Error(\n `Font family mismatch: ${path} reports \"${font.familyName}\", expected \"${family}\". ` +\n `The substitution map and resvg matching rely on this name.`,\n );\n }\n cache.set(`${prefix}-${style}`, font);\n }\n }\n\n const pick = (spec: FontSpec): fontkit.Font => {\n const prefix = FAMILY_TO_PREFIX[spec.family] ?? 'Carlito';\n const style = styleSuffix(spec);\n return (\n cache.get(`${prefix}-${style}`) ??\n cache.get(`${prefix}-Regular`) ??\n cache.get('Carlito-Regular')!\n );\n };\n\n return (text, spec) => {\n const font = pick(spec);\n const scale = spec.sizePx / font.unitsPerEm;\n const run = font.layout(text); // applies the font's kerning / GPOS\n const glyphCount = [...text].length;\n const tracking = glyphCount > 1 ? spec.letterSpacingPx * (glyphCount - 1) : 0;\n const vm = verticalMetrics(font);\n return {\n widthPx: run.advanceWidth * scale + tracking,\n ascentPx: vm.ascent * scale,\n descentPx: vm.descent * scale,\n lineGapPx: vm.lineGap * scale,\n };\n };\n};\n\n// Which vertical-metric set a renderer uses depends on the OS/2 fsSelection\n// USE_TYPO_METRICS bit. When it's clear (the common case, incl. Carlito /\n// Liberation), GDI / LibreOffice place the baseline at usWinAscent and size the\n// line box as usWinAscent + usWinDescent (no extra gap). When set, they use the\n// sTypo* metrics plus typoLineGap. fontkit's `.ascent`/`.descent` expose the\n// hhea values, which for these fonts differ from usWinAscent by ~12px at 44pt —\n// exactly the baseline offset that otherwise mismatches ground truth. Returns\n// font-unit values; the caller scales to px.\ninterface VMetrics {\n readonly ascent: number;\n readonly descent: number;\n readonly lineGap: number;\n}\nconst verticalMetrics = (font: fontkit.Font): VMetrics => {\n const os2: unknown = (font as { 'OS/2'?: unknown })['OS/2'];\n if (os2 && typeof os2 === 'object') {\n const o = os2 as {\n fsSelection?: { useTypoMetrics?: boolean };\n typoAscender?: number;\n typoDescender?: number;\n typoLineGap?: number;\n winAscent?: number;\n winDescent?: number;\n };\n if (o.fsSelection?.useTypoMetrics && o.typoAscender !== undefined) {\n return {\n ascent: o.typoAscender,\n descent: Math.abs(o.typoDescender ?? 0),\n lineGap: o.typoLineGap ?? 0,\n };\n }\n if (o.winAscent !== undefined && o.winDescent !== undefined) {\n return { ascent: o.winAscent, descent: Math.abs(o.winDescent), lineGap: 0 };\n }\n }\n // Fall back to hhea metrics if OS/2 is absent.\n return { ascent: font.ascent, descent: Math.abs(font.descent), lineGap: font.lineGap };\n};\n","// `pptx-kit-preview/node` — Node entry: rasterize a slide to a PNG or raw\n// RGBA image, with no browser binary.\n//\n// Pipeline: `renderSlideToSvg(..., { textLayout: 'svg', measureText })` lays\n// text out as pure `<text>`, then resvg paints the SVG to pixels. The fontkit\n// measurer, resvg's `fontFiles`, and the SVG's family names all reference the\n// SAME bundled fonts, so the wrap/positioning math agrees with the rasterized\n// glyphs.\n\nimport { Resvg } from '@resvg/resvg-js';\nimport { getSlideSize, type PresentationData, type SlideData } from 'pptx-kit';\nimport { renderSlideSvg } from './render-slide.ts';\nimport { MONO, SANS, SERIF, type TextMeasurer } from './text-layout.ts';\nimport { buildFontkitMeasurer, FONT_FILES } from './measure.ts';\n\n// Re-export the browser-safe surface so a Node consumer gets everything from\n// one import.\nexport * from './index.ts';\n\n// Advanced: pre-build / share a fontkit measurer, or locate the bundled fonts.\nexport { buildFontkitMeasurer, FONT_FILES, FONT_DIR } from './measure.ts';\n\n/** Raw, un-encoded raster: RGBA bytes in row-major order. */\nexport interface RgbaImage {\n readonly width: number;\n readonly height: number;\n /** `width * height * 4` bytes, R,G,B,A per pixel. */\n readonly data: Uint8Array;\n}\n\nexport interface RenderImageOptions {\n /**\n * Target raster width in pixels. Height follows the slide's aspect ratio.\n * Defaults to 1280 (matches the fidelity harness baseline).\n */\n readonly width?: number;\n /**\n * Text measurer used for wrap/positioning. Defaults to a shared fontkit\n * measurer over the bundled fonts. Pass {@link buildFontkitMeasurer}'s\n * result to control its lifetime, or a custom measurer to swap fonts.\n */\n readonly measureText?: TextMeasurer;\n}\n\nconst DEFAULT_WIDTH = 1280;\n\n// The fontkit measurer reads + verifies every bundled face on construction.\n// Build it once and reuse across calls; do it lazily so importing this module\n// (e.g. just for the types) doesn't touch the filesystem.\nlet sharedMeasurer: TextMeasurer | undefined;\nconst getSharedMeasurer = (): TextMeasurer => (sharedMeasurer ??= buildFontkitMeasurer());\n\nconst rasterize = (pres: PresentationData, slide: SlideData, opts: RenderImageOptions) => {\n // `getSlideSize` is only consulted to fail fast on a malformed deck; the SVG\n // carries its own viewBox and resvg fits to the requested width.\n getSlideSize(pres);\n const width = opts.width ?? DEFAULT_WIDTH;\n const measureText = opts.measureText ?? getSharedMeasurer();\n const svg = renderSlideSvg(pres, slide, { measureText, textLayout: 'svg' });\n const resvg = new Resvg(svg, {\n fitTo: { mode: 'width', value: width },\n font: {\n loadSystemFonts: false, // deterministic: only the bundled fonts\n fontFiles: FONT_FILES,\n defaultFontFamily: SANS,\n sansSerifFamily: SANS,\n serifFamily: SERIF,\n monospaceFamily: MONO,\n },\n });\n return resvg.render();\n};\n\n/** Render one slide to PNG-encoded bytes. */\nexport const renderSlideToImage = (\n pres: PresentationData,\n slide: SlideData,\n opts: RenderImageOptions = {},\n): Uint8Array => new Uint8Array(rasterize(pres, slide, opts).asPng());\n\n/**\n * Render one slide to raw RGBA pixels plus the PNG encoding of the same frame.\n * Both come from a single rasterization, so callers needing pixel access (SSIM,\n * diffing) and a saveable file don't pay to render twice.\n */\nexport const renderSlideToRgba = (\n pres: PresentationData,\n slide: SlideData,\n opts: RenderImageOptions = {},\n): { readonly image: RgbaImage; readonly png: Uint8Array } => {\n const rendered = rasterize(pres, slide, opts);\n return {\n image: {\n width: rendered.width,\n height: rendered.height,\n data: new Uint8Array(rendered.pixels),\n },\n png: new Uint8Array(rendered.asPng()),\n };\n};\n"]}