@extend-ai/react-pptx 0.2.4 → 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.
- package/CHANGELOG.md +19 -1
- package/README.md +20 -0
- package/THIRD_PARTY_LICENSES/apache-poi-LICENSE.txt +268 -0
- package/THIRD_PARTY_LICENSES/apache-poi-NOTICE.txt +36 -0
- package/THIRD_PARTY_LICENSES/apache-poi-SOURCE.md +13 -0
- package/THIRD_PARTY_NOTICES.md +15 -20
- package/dist/{dist-NDTOVNYD.js → dist-L6HJ7VKE.js} +268 -7
- package/dist/dist-L6HJ7VKE.js.map +1 -0
- package/dist/index.d.ts +495 -3
- package/dist/index.js +2499 -8568
- package/dist/index.js.map +1 -1
- package/dist/native-parser-worker.js +166 -6
- package/dist/native-parser-worker.js.map +1 -1
- package/dist/pptx_wasm_bg.wasm +0 -0
- package/package.json +6 -22
- package/THIRD_PARTY_LICENSES/ISC.txt +0 -15
- package/dist/chunk-YVOPQP3D.js +0 -50
- package/dist/chunk-YVOPQP3D.js.map +0 -1
- package/dist/dist-NDTOVNYD.js.map +0 -1
- package/dist/region-map-atlas-S2YXLDE2.js +0 -125
- package/dist/region-map-atlas-S2YXLDE2.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../../../node_modules/.pnpm/@extend-ai+office-fonts@https+++github.com+extend-hq+rust-office+releases+download+office-fon_7r4y6vimjxvcmpreabk5ezevri/node_modules/@extend-ai/office-fonts/families.js","../../../node_modules/.pnpm/@extend-ai+office-fonts@https+++github.com+extend-hq+rust-office+releases+download+office-fon_7r4y6vimjxvcmpreabk5ezevri/node_modules/@extend-ai/office-fonts/runtime.js","../src/fonts.ts","../src/charts/chart-model.ts","../src/charts/surface-regl.tsx","../src/charts/chart-renderer.tsx","../src/charts/shared-chart-svg.ts","../src/charts/chart-host.tsx","../src/metafile-renderer.ts","../src/zoom.ts","../src/normalized-viewer.ts","../src/wasm.ts","../src/performance.ts","../src/parse.ts","../src/ReactPptxViewer.tsx","../src/hooks.ts","../src/thumbnails.ts","../src/thumbnail-renderer.ts"],"names":["face","families","fontFamily","primary","elements","document","color","primarySeries","styleAppearance","chart","getBuiltinSurfacePalette","React","MemoSurfaceChartComposite","jsx","parseRgbColor","mixRgbColor","lightenColor","darkenColor","clamp","safeNumber","canonicalKey","normalizeLegendPosition","resolveSurfaceBaseColor","normalizeBuiltinSurfaceStyleId","hasExplicitSurfaceBaseColor","buildMonochromeSurfacePalette","shouldPreferBuiltinSurfacePalette","getSurfaceBandCount","isContourSurfaceChart","getSurfaceColorStops","resolveSurfaceBandPaletteColor","getSurfaceDomain","resolveSurfaceBandColor","d3Line","getSurfaceWireframePalette","resolveSurfaceWireframeColor","jsxs","projectCartesian3dPoint","symbol","d3Symbol","Fragment","startCenter","endCenter","startAxisA","endAxisA","startAxisB","endAxisB","backStartArc","backEndArc","frontStartArc","frontEndArc","backWallPath","frontWallPath","endCapPath","positive","negative","_","start","end","fill","d3Area","d3Pie","d3Arc","arc","quads","points","d3Hierarchy","d3Partition","d3Treemap","MemoChartSvg","createElement","timeout","placeholders","state","result","isPresentationDocument","maximum","useRef","useEffect","ReactPptxViewer","useState","useCallback","EMU_PER_CSS_PIXEL","DEFAULT_MAX_DIMENSION","finitePositive","useMemo","attributes"],"mappings":"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","file":"index.js","sourcesContent":["export type PptxViewerErrorCode =\n | 'aborted'\n | 'fetch-failed'\n | 'invalid-source'\n | 'unsupported-environment'\n | 'unsupported-format'\n | 'encrypted-document'\n | 'resource-limit'\n | 'parse-failed'\n | 'render-failed';\n\nexport class PptxViewerError extends Error {\n readonly code: PptxViewerErrorCode;\n readonly cause?: unknown;\n readonly details?: Readonly<Record<string, unknown>>;\n\n constructor(\n code: PptxViewerErrorCode,\n message: string,\n options: { cause?: unknown; details?: Readonly<Record<string, unknown>> } = {},\n ) {\n super(message);\n this.name = 'PptxViewerError';\n this.code = code;\n if (options.cause !== undefined) this.cause = options.cause;\n if (options.details !== undefined) this.details = options.details;\n }\n}\n\nexport function toPptxViewerError(\n error: unknown,\n fallbackCode: PptxViewerErrorCode,\n fallbackMessage: string,\n): PptxViewerError {\n if (error instanceof PptxViewerError) return error;\n if (error instanceof DOMException && error.name === 'AbortError') {\n return new PptxViewerError('aborted', 'Presentation loading was cancelled.', { cause: error });\n }\n if (error instanceof Error && error.name === 'AbortError') {\n return new PptxViewerError('aborted', 'Presentation loading was cancelled.', { cause: error });\n }\n return new PptxViewerError(fallbackCode, fallbackMessage, { cause: error });\n}\n\nexport function throwIfAborted(signal?: AbortSignal): void {\n if (signal?.aborted) {\n throw new PptxViewerError('aborted', 'Presentation loading was cancelled.', {\n cause: signal.reason,\n });\n }\n}\n","export const families = [\n { id: \"carlito\", family: \"Carlito\", original: \"Calibri\", load: () => import(\"./carlito-data.js\") },\n { id: \"arimo\", family: \"Arimo\", original: \"Arial\", load: () => import(\"./arimo-data.js\") },\n { id: \"tinos\", family: \"Tinos\", original: \"Times New Roman\", load: () => import(\"./tinos-data.js\") },\n { id: \"cousine\", family: \"Cousine\", original: \"Courier New\", load: () => import(\"./cousine-data.js\") },\n { id: \"intos\", family: \"Intos\", original: \"Aptos\", load: () => import(\"./intos-data.js\") },\n { id: \"intos-narrow\", family: \"Intos Narrow\", original: \"Aptos Narrow\", load: () => import(\"./intos-narrow-data.js\") }\n];\n","import { families } from \"./families.js\";\n\nconst registry = Symbol.for(\"@extend-ai/office-fonts/loads/v2\");\nconst loads = globalThis[registry] ??= new WeakMap();\nconst normalize = (family) => family.trim().replace(/^[\"']|[\"']$/g, \"\").toLowerCase();\nconst primary = (family) => family.split(\",\")[0];\nconst lookup = new Map(families.flatMap((family) =>\n [family.original, family.family].map((name) => [normalize(name), family])));\nconst variants = [\n { style: \"normal\", weight: \"400\", suffix: \"\" },\n { style: \"normal\", weight: \"700\", suffix: \" Bold\" },\n { style: \"italic\", weight: \"400\", suffix: \" Italic\" },\n { style: \"italic\", weight: \"700\", suffix: \" Bold Italic\" },\n];\n\nexport function officeFontFallback(family) {\n return lookup.get(normalize(primary(family)))?.family;\n}\n\nfunction matches(face, family, variant) {\n const weight = face.weight === \"normal\" ? \"400\" : face.weight === \"bold\" ? \"700\" : face.weight;\n const range = weight.split(/\\s+/).map(Number);\n return normalize(face.family) === normalize(family) && face.style === variant.style\n && Number(variant.weight) >= range[0] && Number(variant.weight) <= (range[1] ?? range[0]);\n}\n\nexport async function loadOfficeFonts(target = globalThis.document, requestedFamilies = [\"Calibri\"]) {\n const FontFaceClass = target?.defaultView?.FontFace ?? globalThis.FontFace;\n if (!target?.fonts || !FontFaceClass) return;\n const fonts = target.fonts;\n let entries = loads.get(fonts);\n if (!entries) loads.set(fonts, entries = new Map());\n const selected = new Set([...requestedFamilies].map((name) => normalize(primary(name))));\n await Promise.all([...selected].map(async (key) => {\n const definition = lookup.get(key);\n if (!definition) return;\n const previous = entries.get(key);\n if (previous && (!previous.ready || previous.faces.every((face) => fonts.has(face)))) return previous.promise;\n const family = key === normalize(definition.original) ? definition.original : definition.family;\n const state = { ready: false, faces: [], promise: undefined };\n state.promise = (async () => {\n const added = [];\n try {\n const results = await Promise.allSettled(variants.map(async (variant, index) => {\n const existing = [...fonts].filter((face) => matches(face, family, variant) && face.status !== \"error\");\n if (existing.length) {\n const loaded = await Promise.allSettled(existing.map((face) => face.load()));\n const available = loaded.flatMap((result) => result.status === \"fulfilled\" ? [result.value] : []);\n if (available.length) return available;\n }\n let face;\n if (family === definition.original) {\n try {\n face = await new FontFaceClass(family, `local(\"${family}${variant.suffix}\")`, variant).load();\n } catch {\n face = undefined;\n }\n }\n if (!face) {\n const { faces: assets } = await definition.load();\n face = new FontFaceClass(family, `url(\"${assets[index].source}\")`, variant);\n fonts.add(face);\n added.push(face);\n await face.load();\n } else {\n fonts.add(face);\n added.push(face);\n }\n return [face];\n }));\n const failure = results.find((result) => result.status === \"rejected\");\n if (failure) throw failure.reason;\n state.faces = results.flatMap((result) => result.value);\n state.ready = true;\n } catch (error) {\n for (const face of added) fonts.delete(face);\n entries.delete(key);\n throw error;\n }\n })();\n entries.set(key, state);\n return state.promise;\n }));\n}\n\nexport async function embedOfficeFonts(svg) {\n const opening = /^\\s*(?:<\\?xml[^?]*\\?>\\s*)?<svg\\b[^>]*>/i.exec(svg);\n if (!opening || /data-office-fonts=/.test(svg)) return svg;\n const names = new Set();\n for (const match of svg.matchAll(/\\bfont-family\\s*(?:=\\s*\"([^\"]*)\"|=\\s*'([^']*)'|:\\s*([^;}]+))/gi)) {\n const name = primary((match[1] ?? match[2] ?? match[3]).replace(/"|'/g, \"\"));\n const definition = lookup.get(normalize(name));\n if (definition) names.add(normalize(name));\n }\n if (!names.size) return svg;\n const bold = /font-weight\\s*(?:=\\s*[\"']|:\\s*)(?:bold|[5-9]00)/i.test(svg);\n const italic = /font-style\\s*(?:=\\s*[\"']|:\\s*)(?:italic|oblique)/i.test(svg);\n const rules = await Promise.all([...names].map(async (name) => {\n const definition = lookup.get(name);\n const family = name === normalize(definition.original) ? definition.original : definition.family;\n const { faces } = await definition.load();\n return faces.flatMap(({ source, style, weight }, index) => {\n if ((!bold && weight === \"700\") || (!italic && style === \"italic\")) return [];\n const local = family === definition.original ? `local(\"${family}${variants[index].suffix}\"),` : \"\";\n return [`@font-face{font-family:\"${family}\";src:${local}url(\"${source}\") format(\"woff2\");font-style:${style};font-weight:${weight}}`];\n }).join(\"\");\n }));\n return svg.slice(0, opening[0].length) + `<defs data-office-fonts=\"v2\"><style>${rules.join(\"\")}</style></defs>` + svg.slice(opening[0].length);\n}\n\nexport const OFFICE_FALLBACK_FONT = \"Carlito\";\n","import { loadOfficeFonts } from '@extend-ai/office-fonts';\nimport type {\n PresentationDocument,\n PresentationEmbeddedFont,\n PresentationWarning,\n} from '@extend-ai/react-pptx-model';\nimport type { PptxFontOptions, PptxFontSource } from './types';\n\nconst GENERIC_FAMILIES = new Set([\n 'serif',\n 'sans-serif',\n 'monospace',\n 'cursive',\n 'fantasy',\n 'system-ui',\n 'ui-serif',\n 'ui-sans-serif',\n 'ui-monospace',\n 'emoji',\n 'math',\n 'fangsong',\n]);\n\n/** Cross-platform, metrically similar substitutions for common Office typefaces. */\nexport const OFFICE_FONT_FALLBACKS: Readonly<Record<string, readonly string[]>> = {\n aptos: ['Aptos', 'Intos', 'Segoe UI', 'Arial', 'sans-serif'],\n 'aptos narrow': ['Aptos Narrow', 'Intos Narrow', 'Arial', 'sans-serif'],\n 'aptos display': ['Aptos Display', 'Segoe UI', 'Arial', 'sans-serif'],\n calibri: ['Calibri', 'Carlito', 'Arial', 'sans-serif'],\n 'calibri light': ['Calibri Light', 'Carlito', 'Arial', 'sans-serif'],\n cambria: ['Cambria', 'Caladea', 'Georgia', 'serif'],\n 'cambria math': ['Cambria Math', 'STIX Two Math', 'STIXGeneral', 'math'],\n arial: ['Arial', 'Arimo', 'Liberation Sans', 'Helvetica', 'sans-serif'],\n 'arial narrow': ['Arial Narrow', 'Liberation Sans Narrow', 'Arial', 'sans-serif'],\n 'arial unicode ms': ['Arial Unicode MS', 'Noto Sans', 'Segoe UI Symbol', 'sans-serif'],\n 'times new roman': ['Times New Roman', 'Tinos', 'Liberation Serif', 'Times', 'serif'],\n 'courier new': ['Courier New', 'Cousine', 'Liberation Mono', 'Courier', 'monospace'],\n consolas: ['Consolas', 'Cascadia Mono', 'Liberation Mono', 'monospace'],\n 'century gothic': ['Century Gothic', 'Avenir Next', 'Futura', 'Arial', 'sans-serif'],\n 'franklin gothic medium': ['Franklin Gothic Medium', 'Arial', 'sans-serif'],\n 'segoe ui': ['Segoe UI', 'Inter', 'Arial', 'sans-serif'],\n 'sitka heading': ['Sitka Heading', 'Georgia', 'Times New Roman', 'serif'],\n sitka: ['Sitka', 'Georgia', 'Times New Roman', 'serif'],\n 'source sans pro': ['Source Sans Pro', 'Helvetica Neue', 'Arial', 'sans-serif'],\n candara: ['Candara', 'Noto Sans', 'Arial', 'sans-serif'],\n constantia: ['Constantia', 'Georgia', 'serif'],\n corbel: ['Corbel', 'Noto Sans', 'Arial', 'sans-serif'],\n garamond: ['Garamond', 'EB Garamond', 'Georgia', 'serif'],\n 'book antiqua': ['Book Antiqua', 'Palatino Linotype', 'Palatino', 'serif'],\n 'palatino linotype': ['Palatino Linotype', 'Palatino', 'Georgia', 'serif'],\n 'ms gothic': ['MS Gothic', 'Yu Gothic', 'Meiryo', 'Noto Sans CJK JP', 'sans-serif'],\n 'ms pgothic': ['MS PGothic', 'Yu Gothic', 'Meiryo', 'Noto Sans CJK JP', 'sans-serif'],\n 'ms mincho': ['MS Mincho', 'Yu Mincho', 'Noto Serif CJK JP', 'serif'],\n 'ms pmincho': ['MS PMincho', 'Yu Mincho', 'Noto Serif CJK JP', 'serif'],\n meiryo: ['Meiryo', 'Yu Gothic', 'Noto Sans CJK JP', 'sans-serif'],\n 'yu gothic': ['Yu Gothic', 'Meiryo', 'Noto Sans CJK JP', 'sans-serif'],\n 'yu mincho': ['Yu Mincho', 'Noto Serif CJK JP', 'serif'],\n simsun: ['SimSun', 'Songti SC', 'Noto Serif CJK SC', 'serif'],\n simhei: ['SimHei', 'Heiti SC', 'Microsoft YaHei', 'Noto Sans CJK SC', 'sans-serif'],\n 'microsoft yahei': ['Microsoft YaHei', 'PingFang SC', 'Noto Sans CJK SC', 'sans-serif'],\n dengxian: ['DengXian', 'Microsoft YaHei', 'Noto Sans CJK SC', 'sans-serif'],\n fangsong: ['FangSong', 'STFangsong', 'Noto Serif CJK SC', 'serif'],\n kaiti: ['KaiTi', 'STKaiti', 'Noto Serif CJK SC', 'serif'],\n mingliu: ['MingLiU', 'PingFang TC', 'Noto Serif CJK TC', 'serif'],\n pmingliu: ['PMingLiU', 'PingFang TC', 'Noto Serif CJK TC', 'serif'],\n 'microsoft jhenghei': ['Microsoft JhengHei', 'PingFang TC', 'Noto Sans CJK TC', 'sans-serif'],\n 'malgun gothic': ['Malgun Gothic', 'Apple SD Gothic Neo', 'Noto Sans CJK KR', 'sans-serif'],\n batang: ['Batang', 'AppleMyungjo', 'Noto Serif CJK KR', 'serif'],\n gulim: ['Gulim', 'Apple SD Gothic Neo', 'Noto Sans CJK KR', 'sans-serif'],\n 'nirmala ui': ['Nirmala UI', 'Noto Sans Devanagari', 'Noto Sans', 'sans-serif'],\n mangal: ['Mangal', 'Noto Sans Devanagari', 'Nirmala UI', 'sans-serif'],\n 'traditional arabic': ['Traditional Arabic', 'Noto Naskh Arabic', 'Arial', 'serif'],\n 'simplified arabic': ['Simplified Arabic', 'Noto Naskh Arabic', 'Arial', 'sans-serif'],\n 'sakkal majalla': ['Sakkal Majalla', 'Noto Naskh Arabic', 'serif'],\n gisha: ['Gisha', 'Noto Sans Hebrew', 'Arial Hebrew', 'sans-serif'],\n david: ['David', 'Noto Serif Hebrew', 'Times New Roman', 'serif'],\n};\n\nconst UNIVERSAL_SANS_FALLBACKS = [\n 'Noto Sans',\n 'Noto Sans CJK SC',\n 'Noto Sans CJK JP',\n 'Noto Sans CJK KR',\n 'Noto Sans Arabic',\n 'Noto Sans Hebrew',\n 'Segoe UI Symbol',\n 'sans-serif',\n] as const;\n\nfunction normalizeFamily(value: string): string {\n return value.trim().replace(/^['\"]|['\"]$/g, '');\n}\n\nfunction parseFamilyList(value: string): string[] {\n const result: string[] = [];\n let token = '';\n let quote = '';\n for (const character of value) {\n if ((character === '\"' || character === \"'\") && (!quote || quote === character)) {\n quote = quote ? '' : character;\n token += character;\n } else if (character === ',' && !quote) {\n if (normalizeFamily(token)) result.push(normalizeFamily(token));\n token = '';\n } else token += character;\n }\n if (normalizeFamily(token)) result.push(normalizeFamily(token));\n return result;\n}\n\nfunction serializeFamily(family: string): string {\n if (GENERIC_FAMILIES.has(family.toLowerCase())) return family;\n return `\"${family.replaceAll('\"', '\\\\\"')}\"`;\n}\n\nfunction uniqueFamilies(families: readonly string[]): string[] {\n const seen = new Set<string>();\n return families.filter((family) => {\n const key = normalizeFamily(family).toLowerCase();\n if (!key || seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n}\n\nexport function resolvePptxFontFamily(\n fontFamily: string,\n options: Pick<PptxFontOptions, 'fallbacks' | 'fallbackFamilies' | 'useOfficeFallbacks'> = {},\n): string {\n const requested = parseFamilyList(fontFamily);\n const primary = requested[0] ?? '';\n const configured = options.fallbacks?.[primary] ?? options.fallbacks?.[primary.toLowerCase()];\n const configuredList = typeof configured === 'string' ? [configured] : (configured ?? []);\n const office =\n options.useOfficeFallbacks === false\n ? []\n : (OFFICE_FONT_FALLBACKS[primary.toLowerCase()] ?? []);\n const lower = primary.toLowerCase();\n const generic = /serif|times|cambria|mincho|ming|song|batang|david|garamond|palatino/.test(lower)\n ? ['Noto Serif', 'Noto Serif CJK SC', 'serif']\n : [...UNIVERSAL_SANS_FALLBACKS];\n return uniqueFamilies([\n ...(primary ? [primary] : []),\n ...configuredList,\n ...office,\n ...requested.slice(1),\n ...(options.fallbackFamilies ?? []),\n ...generic,\n ])\n .map(serializeFamily)\n .join(', ');\n}\n\nfunction fontSourceValue(source: string): string {\n if (/^(?:url|local)\\(/i.test(source.trim())) return source;\n return `url(${JSON.stringify(source)})`;\n}\n\nfunction browserHasFont(family: string): boolean {\n if (\n typeof document.fonts?.check === 'function' &&\n !document.fonts.check(`12px ${serializeFamily(family)}`)\n ) {\n return false;\n }\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n if (!context) return true;\n const sample = 'mmmmmmmmmmlliWWW0123456789';\n return ['monospace', 'serif', 'sans-serif'].some((baseline) => {\n context.font = `72px ${baseline}`;\n const baselineWidth = context.measureText(sample).width;\n context.font = `72px ${serializeFamily(family)}, ${baseline}`;\n return Math.abs(context.measureText(sample).width - baselineWidth) > 0.01;\n });\n}\n\nfunction timeout<T>(promise: Promise<T>, milliseconds: number): Promise<T> {\n if (!Number.isFinite(milliseconds) || milliseconds <= 0) return promise;\n return new Promise<T>((resolve, reject) => {\n const timer = globalThis.setTimeout(\n () => reject(new Error('Font loading timed out.')),\n milliseconds,\n );\n void promise.then(\n (value) => {\n globalThis.clearTimeout(timer);\n resolve(value);\n },\n (error: unknown) => {\n globalThis.clearTimeout(timer);\n reject(error);\n },\n );\n });\n}\n\nexport class PptxFontManager {\n private readonly faces: FontFace[] = [];\n private readonly objectUrls = new Set<string>();\n private readonly warned = new Set<string>();\n private readonly loadedFamilies = new Set<string>();\n\n constructor(\n private readonly options: PptxFontOptions = {},\n private readonly reportWarning: (warning: PresentationWarning) => void = () => {},\n ) {}\n\n private warn(warning: PresentationWarning): void {\n const key = `${warning.code}:${warning.feature ?? warning.message}`;\n if (this.warned.has(key)) return;\n this.warned.add(key);\n this.reportWarning(warning);\n }\n\n private embeddedSources(presentation: PresentationDocument): PptxFontSource[] {\n if (this.options.loadEmbeddedFonts === false) return [];\n return (presentation.embeddedFonts ?? []).flatMap((font: PresentationEmbeddedFont) => {\n const asset = presentation.assets[font.assetId];\n if (!asset?.data) return [];\n return [\n {\n family: font.family,\n source: asset.data,\n descriptors: { style: font.style, weight: font.weight },\n },\n ];\n });\n }\n\n private async loadSource(source: PptxFontSource): Promise<void> {\n if (typeof FontFace === 'undefined' || !document.fonts) return;\n let data: string | BufferSource;\n if (typeof source.source === 'string') data = fontSourceValue(source.source);\n else if (source.source instanceof Blob) {\n const url = URL.createObjectURL(source.source);\n this.objectUrls.add(url);\n data = `url(${JSON.stringify(url)})`;\n } else if (source.source instanceof Uint8Array) {\n data = source.source.slice().buffer as ArrayBuffer;\n } else data = source.source;\n const face = new FontFace(source.family, data, source.descriptors);\n document.fonts.add(face);\n this.faces.push(face);\n await timeout(face.load(), this.options.loadTimeoutMs ?? 5_000);\n this.loadedFamilies.add(source.family.toLowerCase());\n this.options.onFontLoaded?.(source.family, face);\n }\n\n async prepare(presentation: PresentationDocument): Promise<void> {\n const sources = [...this.embeddedSources(presentation), ...(this.options.sources ?? [])];\n const results = await Promise.allSettled(sources.map((source) => this.loadSource(source)));\n results.forEach((result, index) => {\n if (result.status === 'fulfilled') return;\n const family = sources[index]?.family ?? 'unknown';\n this.warn({\n code: 'missing-font',\n severity: 'warning',\n feature: family,\n message: `The supplied font “${family}” could not be loaded; a compatible fallback will be used.`,\n });\n });\n if (this.options.useOfficeFallbacks !== false) {\n const families = new Set<string>(['Calibri']);\n const seen = new Set<object>();\n const collect = (value: unknown): void => {\n if (!value || typeof value !== 'object' || seen.has(value)) return;\n seen.add(value);\n for (const [key, child] of Object.entries(value)) {\n if (/fontFamily$/i.test(key) && typeof child === 'string') families.add(child);\n else if (child && typeof child === 'object') collect(child);\n }\n };\n collect(presentation.slides);\n collect(presentation.masters);\n collect(presentation.layouts);\n for (const theme of presentation.themes) {\n for (const family of [...Object.values(theme.majorFonts ?? {}), ...Object.values(theme.minorFonts ?? {})]) {\n if (family) families.add(family);\n }\n }\n await loadOfficeFonts(document, families).catch(() => undefined);\n }\n if (document.fonts && this.options.waitForFonts !== false) {\n await timeout(\n Promise.resolve(document.fonts.ready).then(() => undefined),\n this.options.loadTimeoutMs ?? 5_000,\n ).catch(() => undefined);\n }\n this.options.onFontsReady?.();\n }\n\n applyTo(root: HTMLElement, slideIndex?: number): void {\n const elements: Element[] = [\n root,\n ...root.querySelectorAll('[style*=\"font-family\"], [font-family]'),\n ];\n for (const element of elements) {\n const raw =\n (element instanceof HTMLElement || element instanceof SVGElement\n ? element.style.fontFamily\n : '') || element.getAttribute('font-family');\n if (!raw) continue;\n const primary = parseFamilyList(raw)[0];\n if (!primary || primary.startsWith('+') || GENERIC_FAMILIES.has(primary.toLowerCase()))\n continue;\n if (element instanceof HTMLElement || element instanceof SVGElement) {\n element.style.fontFamily = resolvePptxFontFamily(raw, this.options);\n }\n if (\n this.options.reportMissingFonts === false ||\n this.loadedFamilies.has(primary.toLowerCase()) ||\n browserHasFont(primary)\n ) {\n continue;\n }\n this.warn({\n code: 'missing-font',\n severity: 'warning',\n feature: primary,\n ...(slideIndex === undefined ? {} : { slideIndex }),\n message: `Font “${primary}” is not available in this browser; the configured fallback stack is being used.`,\n });\n }\n }\n\n destroy(): void {\n if (document.fonts) for (const face of this.faces) document.fonts.delete(face);\n this.faces.length = 0;\n for (const url of this.objectUrls) URL.revokeObjectURL(url);\n this.objectUrls.clear();\n }\n}\n","/**\n * Builds the vendored react-xlsx chart model (`XlsxChart`) from raw PowerPoint\n * chart part XML, then applies the same Microsoft chart style pipeline\n * (style/colors companion parts, theme palette, built-in Office defaults) that\n * react-xlsx uses, so charts render with identical styles and colors.\n *\n * The parsing helpers are ported from react-xlsx `charts.ts`; the base model\n * builders replace the Duke Sheets wasm output with a direct DrawingML parse\n * because PowerPoint chart parts always carry their cached data.\n */\nimport type { ChartNode, PresentationTheme } from '@extend-ai/react-pptx-model';\nimport type {\n XlsxChart,\n XlsxChartAxis,\n XlsxChartDataLabels,\n XlsxChartPointDataLabel,\n XlsxChartPointStyle,\n XlsxChartSeries,\n XlsxChartTypeGroup,\n XlsxChartWall,\n XlsxThemePalette,\n} from './chart-types';\n\nconst EMU_PER_PIXEL = 9525;\n\n/** Default Office series palette when the theme has no accent colors. */\nconst SERIES_COLORS = ['#4472c4', '#ed7d31', '#a5a5a5', '#ffc000', '#5b9bd5', '#70ad47'];\n\nconst THEME_COLOR_INDEX_BY_NAME: Record<string, number> = {\n accent1: 4,\n accent2: 5,\n accent3: 6,\n accent4: 7,\n accent5: 8,\n accent6: 9,\n dk1: 1,\n dk2: 3,\n folHlink: 11,\n hlink: 10,\n lt1: 0,\n lt2: 2,\n tx1: 1,\n tx2: 3,\n bg1: 0,\n bg2: 2,\n};\n\nconst PRIMARY_CHART_TYPE_LOCAL_NAMES = [\n 'barChart',\n 'lineChart',\n 'line3DChart',\n 'stockChart',\n 'radarChart',\n 'scatterChart',\n 'pieChart',\n 'pie3DChart',\n 'doughnutChart',\n 'areaChart',\n 'area3DChart',\n 'bar3DChart',\n 'ofPieChart',\n 'bubbleChart',\n 'surfaceChart',\n 'surface3DChart',\n] as const;\n\ntype ChartStyleAppearance = {\n axisLabelColor?: string | undefined;\n axisLineColor?: string | undefined;\n chartAreaBorderColor?: string | undefined;\n chartAreaFillColor?: string | undefined;\n chartAreaNoFill?: boolean | undefined;\n paletteOffset?: number | undefined;\n textColor?: string | undefined;\n titleColor?: string | undefined;\n};\n\n/** Maps a slide's resolved PowerPoint theme onto the Excel-style palette. */\nexport function buildThemePaletteFromPresentationTheme(\n theme: PresentationTheme | undefined,\n): XlsxThemePalette | null {\n if (!theme) return null;\n const colorsByIndex: Record<number, string> = {};\n for (const [name, value] of Object.entries(theme.colors ?? {})) {\n const index = THEME_COLOR_INDEX_BY_NAME[name];\n if (index === undefined) continue;\n const normalized = normalizeHexColor(value);\n if (normalized && colorsByIndex[index] === undefined) colorsByIndex[index] = normalized;\n }\n if (Object.keys(colorsByIndex).length === 0) return null;\n return {\n colorsByIndex,\n majorLatinFont: theme.majorFonts?.latin,\n minorLatinFont: theme.minorFonts?.latin,\n };\n}\n\nfunction clampUnitInterval(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nfunction isElementNode(node: Node | ChildNode | null | undefined): node is Element {\n return node != null && node.nodeType === 1;\n}\n\nfunction parseXml(xml: string): XMLDocument | null {\n if (typeof DOMParser === 'undefined') return null;\n try {\n const document = new DOMParser().parseFromString(xml, 'application/xml');\n return document.getElementsByTagName('parsererror').length > 0 ? null : document;\n } catch {\n return null;\n }\n}\n\nfunction getLocalChildren(parent: ParentNode, localName: string): Element[] {\n return Array.from(parent.childNodes).filter(\n (node): node is Element => node.nodeType === 1 && (node as Element).localName === localName,\n );\n}\n\nfunction getLocalDescendants(parent: ParentNode, localName: string): Element[] {\n return Array.from((parent as Element | Document).getElementsByTagName('*')).filter(\n (node) => node.localName === localName,\n );\n}\n\nfunction getFirstLocalChild(parent: ParentNode | null, localName: string): Element | null {\n if (!parent) return null;\n return getLocalChildren(parent, localName)[0] ?? null;\n}\n\nfunction getFirstLocalDescendant(parent: ParentNode | null, localName: string): Element | null {\n if (!parent) return null;\n return getLocalDescendants(parent, localName)[0] ?? null;\n}\n\nfunction normalizeHexColor(value: string): string | null {\n const hex = value.replace(/^#/, '');\n if (hex.length === 8) return `#${hex.slice(2).toLowerCase()}`;\n if (hex.length === 6) return `#${hex.toLowerCase()}`;\n return null;\n}\n\nfunction parseHexColor(color: string): [number, number, number] | null {\n const normalized = normalizeHexColor(color);\n const match = normalized ? /^#([0-9a-f]{6})$/.exec(normalized) : null;\n if (!match?.[1]) return null;\n const hex = match[1];\n return [\n Number.parseInt(hex.slice(0, 2), 16),\n Number.parseInt(hex.slice(2, 4), 16),\n Number.parseInt(hex.slice(4, 6), 16),\n ];\n}\n\nfunction rgbToHsl(red: number, green: number, blue: number): [number, number, number] {\n const normalizedRed = red / 255;\n const normalizedGreen = green / 255;\n const normalizedBlue = blue / 255;\n const max = Math.max(normalizedRed, normalizedGreen, normalizedBlue);\n const min = Math.min(normalizedRed, normalizedGreen, normalizedBlue);\n const lightness = (max + min) / 2;\n if (max === min) return [0, 0, lightness];\n const delta = max - min;\n const saturation = lightness > 0.5 ? delta / (2 - max - min) : delta / (max + min);\n let hue = 0;\n switch (max) {\n case normalizedRed:\n hue = (normalizedGreen - normalizedBlue) / delta + (normalizedGreen < normalizedBlue ? 6 : 0);\n break;\n case normalizedGreen:\n hue = (normalizedBlue - normalizedRed) / delta + 2;\n break;\n default:\n hue = (normalizedRed - normalizedGreen) / delta + 4;\n break;\n }\n return [hue / 6, saturation, lightness];\n}\n\nfunction hueToRgb(p: number, q: number, t: number): number {\n let nextT = t;\n if (nextT < 0) nextT += 1;\n if (nextT > 1) nextT -= 1;\n if (nextT < 1 / 6) return p + (q - p) * 6 * nextT;\n if (nextT < 1 / 2) return q;\n if (nextT < 2 / 3) return p + (q - p) * (2 / 3 - nextT) * 6;\n return p;\n}\n\nfunction hslToRgb(hue: number, saturation: number, lightness: number): [number, number, number] {\n if (saturation === 0) {\n const gray = Math.round(lightness * 255);\n return [gray, gray, gray];\n }\n const q =\n lightness < 0.5 ? lightness * (1 + saturation) : lightness + saturation - lightness * saturation;\n const p = 2 * lightness - q;\n return [\n Math.round(hueToRgb(p, q, hue + 1 / 3) * 255),\n Math.round(hueToRgb(p, q, hue) * 255),\n Math.round(hueToRgb(p, q, hue - 1 / 3) * 255),\n ];\n}\n\nfunction rgbToHex(red: number, green: number, blue: number): string {\n return `#${[red, green, blue]\n .map((channel) => Math.max(0, Math.min(255, Math.round(channel))).toString(16).padStart(2, '0'))\n .join('')}`;\n}\n\nfunction applyLightnessTransform(baseColor: string, modifier = 1, offset = 0): string | null {\n const rgb = parseHexColor(baseColor);\n if (!rgb) return normalizeHexColor(baseColor);\n const [hue, saturation, lightness] = rgbToHsl(rgb[0], rgb[1], rgb[2]);\n const nextLightness = clampUnitInterval(lightness * modifier + offset);\n const [nextRed, nextGreen, nextBlue] = hslToRgb(hue, saturation, nextLightness);\n return rgbToHex(nextRed, nextGreen, nextBlue);\n}\n\nfunction resolveThemeColor(name: string | null, themePalette?: XlsxThemePalette | null): string | null {\n if (!name) return null;\n const index = THEME_COLOR_INDEX_BY_NAME[name];\n return index === undefined ? null : (themePalette?.colorsByIndex[index] ?? null);\n}\n\nfunction resolveThemeTypeface(\n typeface: string | null,\n themePalette?: XlsxThemePalette | null,\n): string | null {\n if (!typeface) return null;\n if (typeface === '+mn-lt' || typeface === '+mn-ea' || typeface === '+mn-cs') {\n return themePalette?.minorLatinFont ?? null;\n }\n if (typeface === '+mj-lt' || typeface === '+mj-ea' || typeface === '+mj-cs') {\n return themePalette?.majorLatinFont ?? null;\n }\n return typeface;\n}\n\nfunction readChartTextTypeface(\n textPropertiesNode: Element | null,\n themePalette?: XlsxThemePalette | null,\n): string | null {\n if (!textPropertiesNode) return null;\n const defaultRunProperties =\n getFirstLocalDescendant(textPropertiesNode, 'defRPr') ??\n getFirstLocalDescendant(textPropertiesNode, 'rPr');\n if (!defaultRunProperties) return null;\n const typeface =\n getFirstLocalChild(defaultRunProperties, 'latin')?.getAttribute('typeface') ??\n getFirstLocalChild(defaultRunProperties, 'ea')?.getAttribute('typeface') ??\n getFirstLocalChild(defaultRunProperties, 'cs')?.getAttribute('typeface') ??\n null;\n const resolved = resolveThemeTypeface(typeface, themePalette)?.trim() ?? '';\n return resolved.length > 0 ? resolved : null;\n}\n\nfunction resolveChartColorNode(\n node: Element | null,\n themePalette?: XlsxThemePalette | null,\n): string | null {\n if (!node) return null;\n let baseColor: string | null = null;\n if (node.localName === 'srgbClr') {\n baseColor = normalizeHexColor(`#${node.getAttribute('val') ?? ''}`);\n } else if (node.localName === 'schemeClr') {\n baseColor = resolveThemeColor(node.getAttribute('val'), themePalette);\n } else if (node.localName === 'sysClr') {\n baseColor = normalizeHexColor(`#${node.getAttribute('lastClr') ?? ''}`);\n }\n if (!baseColor) return null;\n let lightnessModifier = 1;\n let lightnessOffset = 0;\n for (const transformNode of Array.from(node.childNodes).filter(isElementNode)) {\n const rawValue = Number(transformNode.getAttribute('val') ?? Number.NaN);\n if (!Number.isFinite(rawValue)) continue;\n if (transformNode.localName === 'lumMod') {\n lightnessModifier *= rawValue / 100000;\n } else if (transformNode.localName === 'lumOff') {\n lightnessOffset += rawValue / 100000;\n } else if (transformNode.localName === 'tint') {\n lightnessOffset += (1 - lightnessOffset) * (rawValue / 100000);\n } else if (transformNode.localName === 'shade') {\n lightnessModifier *= rawValue / 100000;\n }\n }\n return applyLightnessTransform(baseColor, lightnessModifier, lightnessOffset);\n}\n\nfunction isChartColorElement(node: Element | null | undefined): node is Element {\n return Boolean(\n node && (node.localName === 'schemeClr' || node.localName === 'srgbClr' || node.localName === 'sysClr'),\n );\n}\n\nfunction findFirstChartColorElement(node: Element | null): Element | null {\n if (!node) return null;\n if (isChartColorElement(node)) return node;\n for (const localName of ['srgbClr', 'schemeClr', 'sysClr']) {\n for (const candidate of getLocalDescendants(node, localName)) {\n if (isChartColorElement(candidate)) return candidate;\n }\n }\n return null;\n}\n\nfunction resolveChartFillColor(\n shapeNode: Element | null,\n themePalette?: XlsxThemePalette | null,\n): string | null {\n if (!shapeNode || getFirstLocalChild(shapeNode, 'noFill')) return null;\n const solidFill = getFirstLocalChild(shapeNode, 'solidFill');\n if (solidFill) {\n const colorNode = findFirstChartColorElement(\n Array.from(solidFill.childNodes).find(isElementNode) ?? null,\n );\n return resolveChartColorNode(colorNode, themePalette);\n }\n const gradientFill = getFirstLocalChild(shapeNode, 'gradFill');\n const gradientStops = gradientFill\n ? getLocalDescendants(gradientFill, 'gs')\n .map((stopNode) => ({\n colorNode: Array.from(stopNode.childNodes).find(isElementNode) ?? null,\n position: Number(stopNode.getAttribute('pos') ?? Number.NaN),\n }))\n .filter((stop) => Boolean(stop.colorNode))\n : [];\n if (gradientStops.length === 0) return null;\n gradientStops.sort((left, right) => {\n const leftPos = Number.isFinite(left.position) ? left.position : 0;\n const rightPos = Number.isFinite(right.position) ? right.position : 0;\n return leftPos - rightPos;\n });\n const midpointStop =\n gradientStops.find((stop) => Number.isFinite(stop.position) && stop.position >= 50000) ??\n gradientStops[Math.floor(gradientStops.length / 2)] ??\n gradientStops[0];\n return resolveChartColorNode(midpointStop?.colorNode ?? null, themePalette);\n}\n\nfunction resolveChartLineStyle(\n shapeNode: Element | null,\n themePalette?: XlsxThemePalette | null,\n): { color: string | null; hidden: boolean; widthPx: number | undefined } {\n const lineNode =\n shapeNode?.localName === 'ln' ? shapeNode : shapeNode ? getFirstLocalChild(shapeNode, 'ln') : null;\n if (!lineNode) return { color: null, hidden: false, widthPx: undefined };\n if (getFirstLocalChild(lineNode, 'noFill')) return { color: null, hidden: true, widthPx: undefined };\n const solidFill = getFirstLocalChild(lineNode, 'solidFill');\n const colorNode = solidFill\n ? findFirstChartColorElement(Array.from(solidFill.childNodes).find(isElementNode) ?? null)\n : null;\n const widthValue = Number(lineNode.getAttribute('w') ?? Number.NaN);\n return {\n color: resolveChartColorNode(colorNode, themePalette),\n hidden: false,\n widthPx: Number.isFinite(widthValue) ? Math.max(1, widthValue / EMU_PER_PIXEL) : undefined,\n };\n}\n\nfunction normalizeLegendPosition(position: string | undefined): string | undefined {\n if (!position) return undefined;\n switch (position) {\n case 'bottom':\n return 'b';\n case 'left':\n return 'l';\n case 'right':\n return 'r';\n case 'top':\n return 't';\n default:\n return position;\n }\n}\n\nfunction readChartNumericAttribute(parent: Element | null, localName: string): number | undefined {\n const node = parent ? getFirstLocalChild(parent, localName) : null;\n const value = Number(node?.getAttribute('val') ?? Number.NaN);\n return Number.isFinite(value) ? value : undefined;\n}\n\nfunction readChartBooleanAttribute(parent: Element | null, localName: string): boolean | undefined {\n const node = parent ? getFirstLocalChild(parent, localName) : null;\n if (!node) return undefined;\n const rawValue = node.getAttribute('val');\n if (rawValue == null) return true;\n if (rawValue === '1' || rawValue === 'true') return true;\n if (rawValue === '0' || rawValue === 'false') return false;\n return undefined;\n}\n\nfunction readChartLabelFontSizePt(textPropertiesNode: Element | null): number | undefined {\n if (!textPropertiesNode) return undefined;\n const runPropertiesNode =\n getFirstLocalDescendant(textPropertiesNode, 'defRPr') ??\n getFirstLocalDescendant(textPropertiesNode, 'rPr');\n const rawSize = Number(runPropertiesNode?.getAttribute('sz') ?? Number.NaN);\n if (!Number.isFinite(rawSize) || rawSize <= 0) return undefined;\n return rawSize / 100;\n}\n\nfunction parseChartPointDataLabelsFromXml(labelsNode: Element): XlsxChartPointDataLabel[] {\n const fallbackFontSizePt = readChartLabelFontSizePt(getFirstLocalChild(labelsNode, 'txPr'));\n const labels: XlsxChartPointDataLabel[] = [];\n for (const pointLabelNode of getLocalChildren(labelsNode, 'dLbl')) {\n const index = readChartNumericAttribute(pointLabelNode, 'idx');\n if (typeof index !== 'number' || !Number.isFinite(index)) continue;\n const layoutNode = getFirstLocalChild(pointLabelNode, 'layout');\n const manualLayoutNode = layoutNode ? getFirstLocalChild(layoutNode, 'manualLayout') : null;\n labels.push({\n deleted: readChartBooleanAttribute(pointLabelNode, 'delete'),\n fontSizePt: readChartLabelFontSizePt(getFirstLocalChild(pointLabelNode, 'txPr')) ?? fallbackFontSizePt,\n index,\n showBubbleSize: readChartBooleanAttribute(pointLabelNode, 'showBubbleSize'),\n showCategoryName: readChartBooleanAttribute(pointLabelNode, 'showCatName'),\n showPercent: readChartBooleanAttribute(pointLabelNode, 'showPercent'),\n showSeriesName: readChartBooleanAttribute(pointLabelNode, 'showSerName'),\n showValue: readChartBooleanAttribute(pointLabelNode, 'showVal'),\n x: readChartNumericAttribute(manualLayoutNode, 'x'),\n y: readChartNumericAttribute(manualLayoutNode, 'y'),\n });\n }\n return labels;\n}\n\nfunction parseChartDataLabelsFromXml(labelsNode: Element | null): XlsxChartDataLabels | null {\n if (!labelsNode) return null;\n const pointLabels = parseChartPointDataLabelsFromXml(labelsNode);\n const labels: XlsxChartDataLabels = {\n pointLabels: pointLabels.length > 0 ? pointLabels : undefined,\n raw: {},\n showBubbleSize: readChartBooleanAttribute(labelsNode, 'showBubbleSize'),\n showCategoryName: readChartBooleanAttribute(labelsNode, 'showCatName'),\n showLegendKey: readChartBooleanAttribute(labelsNode, 'showLegendKey'),\n showPercent: readChartBooleanAttribute(labelsNode, 'showPercent'),\n showSeriesName: readChartBooleanAttribute(labelsNode, 'showSerName'),\n showValue: readChartBooleanAttribute(labelsNode, 'showVal'),\n };\n const hasValue =\n labels.showBubbleSize !== undefined ||\n labels.showCategoryName !== undefined ||\n labels.showLegendKey !== undefined ||\n labels.showPercent !== undefined ||\n (labels.pointLabels?.length ?? 0) > 0 ||\n labels.showSeriesName !== undefined ||\n labels.showValue !== undefined;\n return hasValue ? labels : null;\n}\n\nfunction cellValueToNumber(value: string): number | null {\n const parsed = Number(value.replace(/,/g, ''));\n return Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction parseChartCacheValues(\n parentNode: Element | null,\n cacheName: 'numCache' | 'strCache',\n mode: 'category' | 'value',\n): Array<number | string | null> | null {\n if (!parentNode) return null;\n const referenceNode =\n getFirstLocalChild(parentNode, 'numRef') ??\n getFirstLocalChild(parentNode, 'strRef') ??\n parentNode;\n const cacheNode =\n getFirstLocalChild(referenceNode, cacheName) ??\n // Literal (unlinked) data lives in numLit/strLit with the same pt shape.\n getFirstLocalChild(referenceNode, cacheName === 'numCache' ? 'numLit' : 'strLit');\n if (!cacheNode) return null;\n const pointCount = readChartNumericAttribute(cacheNode, 'ptCount');\n const pointNodes = getLocalChildren(cacheNode, 'pt')\n .map((pointNode) => {\n const rawIndex = Number(pointNode.getAttribute('idx') ?? Number.NaN);\n return {\n index: Number.isFinite(rawIndex) ? rawIndex : 0,\n value: getFirstLocalChild(pointNode, 'v')?.textContent ?? '',\n };\n })\n .sort((left, right) => left.index - right.index);\n if (pointNodes.length === 0) return null;\n const maxIndex = pointNodes.reduce((max, point) => Math.max(max, point.index), 0);\n const targetLength = Math.max(\n pointNodes.length,\n Number.isFinite(pointCount ?? Number.NaN) ? Number(pointCount) : 0,\n maxIndex + 1,\n );\n const values = Array.from({ length: targetLength }, () => null as number | string | null);\n for (const point of pointNodes) {\n if (point.index < 0 || point.index >= values.length) continue;\n if (mode === 'value') {\n values[point.index] = cellValueToNumber(point.value);\n } else {\n values[point.index] = point.value.length > 0 ? point.value : null;\n }\n }\n return values;\n}\n\nfunction parseChartMultiLevelCacheValues(\n parentNode: Element | null,\n mode: 'category' | 'value',\n): Array<number | string | null> | null {\n if (!parentNode) return null;\n const referenceNode = getFirstLocalChild(parentNode, 'multiLvlStrRef') ?? parentNode;\n const cacheNode = getFirstLocalChild(referenceNode, 'multiLvlStrCache');\n if (!cacheNode) return null;\n const levelNodes = getLocalChildren(cacheNode, 'lvl');\n if (levelNodes.length === 0) return null;\n const pointCount = readChartNumericAttribute(cacheNode, 'ptCount');\n const primaryLevelNode =\n mode === 'category' ? (levelNodes[levelNodes.length - 1] ?? levelNodes[0]) : levelNodes[0];\n if (!primaryLevelNode) return null;\n const pointNodes = getLocalChildren(primaryLevelNode, 'pt')\n .map((pointNode) => {\n const rawIndex = Number(pointNode.getAttribute('idx') ?? Number.NaN);\n return {\n index: Number.isFinite(rawIndex) ? rawIndex : 0,\n value: getFirstLocalChild(pointNode, 'v')?.textContent ?? '',\n };\n })\n .sort((left, right) => left.index - right.index);\n if (pointNodes.length === 0) return null;\n const maxIndex = pointNodes.reduce((max, point) => Math.max(max, point.index), 0);\n const targetLength = Math.max(\n pointNodes.length,\n Number.isFinite(pointCount ?? Number.NaN) ? Number(pointCount) : 0,\n maxIndex + 1,\n );\n const values = Array.from({ length: targetLength }, () => null as number | string | null);\n for (const point of pointNodes) {\n if (point.index < 0 || point.index >= values.length) continue;\n if (mode === 'value') {\n values[point.index] = cellValueToNumber(point.value);\n continue;\n }\n values[point.index] = point.value.length > 0 ? point.value : null;\n }\n return values;\n}\n\nfunction parseChartPointStyles(\n seriesNode: Element,\n themePalette?: XlsxThemePalette | null,\n): XlsxChartPointStyle[] {\n const pointStyles: XlsxChartPointStyle[] = [];\n for (const dataPointNode of getLocalChildren(seriesNode, 'dPt')) {\n const indexValue = readChartNumericAttribute(dataPointNode, 'idx');\n if (indexValue === undefined) continue;\n const shapeProperties = getFirstLocalChild(dataPointNode, 'spPr');\n const lineStyle = resolveChartLineStyle(shapeProperties, themePalette);\n pointStyles.push({\n color: resolveChartFillColor(shapeProperties, themePalette) ?? undefined,\n explosion: readChartNumericAttribute(dataPointNode, 'explosion'),\n index: indexValue,\n lineColor: lineStyle.color ?? undefined,\n });\n }\n return pointStyles;\n}\n\nfunction parseInvertNegativeStyle(\n seriesNode: Element,\n themePalette?: XlsxThemePalette | null,\n): { color: string | undefined; lineColor: string | undefined } {\n const invertNode = getFirstLocalDescendant(seriesNode, 'invertSolidFillFmt');\n const shapeProperties = invertNode ? getFirstLocalChild(invertNode, 'spPr') : null;\n if (!shapeProperties) return { color: undefined, lineColor: undefined };\n const lineStyle = resolveChartLineStyle(shapeProperties, themePalette);\n return {\n color: resolveChartFillColor(shapeProperties, themePalette) ?? undefined,\n lineColor: lineStyle.color ?? undefined,\n };\n}\n\nfunction readChartAxisFromXml(axisNode: Element | null): Partial<XlsxChartAxis> | null {\n if (!axisNode) return null;\n const numFmt = getFirstLocalChild(axisNode, 'numFmt');\n const scalingNode = getFirstLocalChild(axisNode, 'scaling');\n const axis: Partial<XlsxChartAxis> = {\n crossId: readChartNumericAttribute(axisNode, 'crossAx'),\n crosses: getFirstLocalChild(axisNode, 'crosses')?.getAttribute('val') ?? undefined,\n crossBetween: getFirstLocalChild(axisNode, 'crossBetween')?.getAttribute('val') ?? undefined,\n delete:\n getFirstLocalChild(axisNode, 'delete')?.getAttribute('val') === '1'\n ? true\n : getFirstLocalChild(axisNode, 'delete')?.getAttribute('val') === '0'\n ? false\n : undefined,\n id: readChartNumericAttribute(axisNode, 'axId'),\n labelPosition: getFirstLocalChild(axisNode, 'tickLblPos')?.getAttribute('val') ?? undefined,\n logBase: readChartNumericAttribute(scalingNode, 'logBase'),\n orientation: getFirstLocalChild(scalingNode ?? axisNode, 'orientation')?.getAttribute('val') ?? undefined,\n majorGridlines: Boolean(getFirstLocalChild(axisNode, 'majorGridlines')),\n majorTickMark: getFirstLocalChild(axisNode, 'majorTickMark')?.getAttribute('val') ?? undefined,\n majorUnit: readChartNumericAttribute(axisNode, 'majorUnit'),\n max: readChartNumericAttribute(scalingNode, 'max'),\n min: readChartNumericAttribute(scalingNode, 'min'),\n minorGridlines: Boolean(getFirstLocalChild(axisNode, 'minorGridlines')),\n minorTickMark: getFirstLocalChild(axisNode, 'minorTickMark')?.getAttribute('val') ?? undefined,\n minorUnit: readChartNumericAttribute(axisNode, 'minorUnit'),\n position: getFirstLocalChild(axisNode, 'axPos')?.getAttribute('val') ?? undefined,\n tickLabelSkip: readChartNumericAttribute(axisNode, 'tickLblSkip'),\n tickMarkSkip: readChartNumericAttribute(axisNode, 'tickMarkSkip'),\n };\n if (numFmt) {\n axis.numberFormat = {\n formatCode: numFmt.getAttribute('formatCode') ?? undefined,\n sourceLinked:\n numFmt.getAttribute('sourceLinked') === '1'\n ? true\n : numFmt.getAttribute('sourceLinked') === '0'\n ? false\n : undefined,\n };\n }\n return axis;\n}\n\nfunction mergeChartAxis(\n target: XlsxChartAxis | null | undefined,\n patch: Partial<XlsxChartAxis> | null | undefined,\n): XlsxChartAxis | null {\n if (!patch) return target ?? null;\n return { ...(target ?? {}), ...patch };\n}\n\nfunction readChartWallFromXml(\n wallNode: Element | null,\n themePalette?: XlsxThemePalette | null,\n): XlsxChartWall | null {\n if (!wallNode) return null;\n const shapeProperties = getFirstLocalChild(wallNode, 'spPr');\n const lineStyle = resolveChartLineStyle(shapeProperties, themePalette);\n return {\n fillColor: resolveChartFillColor(shapeProperties, themePalette) ?? undefined,\n hidden: shapeProperties ? getFirstLocalChild(shapeProperties, 'noFill') != null : undefined,\n lineColor: lineStyle.color ?? undefined,\n thickness: readChartNumericAttribute(wallNode, 'thickness'),\n };\n}\n\nfunction readChartColorPalette(\n colorsXml: string | undefined,\n themePalette?: XlsxThemePalette | null,\n): string[] {\n if (!colorsXml) return [];\n const colorStyleDocument = parseXml(colorsXml);\n if (!colorStyleDocument?.documentElement) return [];\n return Array.from(colorStyleDocument.documentElement.childNodes)\n .filter((child): child is Element => isElementNode(child) && child.localName !== 'variation')\n .map(\n (child) =>\n resolveChartColorNode(child, themePalette) ??\n resolveChartColorNode(findFirstChartColorElement(child), themePalette),\n )\n .filter((color): color is string => typeof color === 'string');\n}\n\nfunction readChartStyleAppearance(\n styleXml: string | undefined,\n themePalette?: XlsxThemePalette | null,\n): ChartStyleAppearance {\n if (!styleXml) return {};\n const styleDocument = parseXml(styleXml);\n if (!styleDocument) return {};\n const dataPointNode = getFirstLocalDescendant(styleDocument, 'dataPoint');\n const fillRefNode = dataPointNode ? getFirstLocalChild(dataPointNode, 'fillRef') : null;\n const index = Number(fillRefNode?.getAttribute('idx') ?? Number.NaN);\n const chartAreaNode = getFirstLocalDescendant(styleDocument, 'chartArea');\n const chartAreaShapeProperties = chartAreaNode ? getFirstLocalChild(chartAreaNode, 'spPr') : null;\n const chartAreaFontRef = chartAreaNode ? getFirstLocalChild(chartAreaNode, 'fontRef') : null;\n const chartAreaFontColor = chartAreaFontRef\n ? resolveChartColorNode(Array.from(chartAreaFontRef.childNodes).find(isElementNode) ?? null, themePalette)\n : null;\n const titleNode = getFirstLocalDescendant(styleDocument, 'title');\n const titleFontRef = titleNode ? getFirstLocalChild(titleNode, 'fontRef') : null;\n const titleColor = titleFontRef\n ? resolveChartColorNode(Array.from(titleFontRef.childNodes).find(isElementNode) ?? null, themePalette)\n : null;\n const axisStyleNode =\n getFirstLocalDescendant(styleDocument, 'categoryAxis') ??\n getFirstLocalDescendant(styleDocument, 'valueAxis');\n const axisShapeProperties = axisStyleNode ? getFirstLocalChild(axisStyleNode, 'spPr') : null;\n const axisFontRef = axisStyleNode ? getFirstLocalChild(axisStyleNode, 'fontRef') : null;\n const chartAreaNoFill = chartAreaShapeProperties\n ? getFirstLocalChild(chartAreaShapeProperties, 'noFill') != null\n : false;\n return {\n axisLabelColor: axisFontRef\n ? (resolveChartColorNode(Array.from(axisFontRef.childNodes).find(isElementNode) ?? null, themePalette) ??\n undefined)\n : undefined,\n axisLineColor: resolveChartLineStyle(axisShapeProperties, themePalette).color ?? undefined,\n chartAreaBorderColor: resolveChartLineStyle(chartAreaShapeProperties, themePalette).color ?? undefined,\n chartAreaFillColor: resolveChartFillColor(chartAreaShapeProperties, themePalette) ?? undefined,\n chartAreaNoFill,\n paletteOffset: Number.isFinite(index) ? index : undefined,\n textColor: chartAreaFontColor ?? undefined,\n titleColor: titleColor ?? chartAreaFontColor ?? undefined,\n };\n}\n\nfunction buildThemeSeriesPalette(themePalette?: XlsxThemePalette | null): string[] {\n const themeColors = [4, 5, 6, 7, 8, 9]\n .map((index) => themePalette?.colorsByIndex[index] ?? null)\n .filter((color): color is string => Boolean(color));\n return themeColors.length > 0 ? themeColors : SERIES_COLORS;\n}\n\nfunction normalizeBuiltinChartStyleId(styleId: number | undefined): number | null {\n if (typeof styleId !== 'number' || !Number.isFinite(styleId)) return null;\n return styleId >= 100 ? styleId - 100 : styleId;\n}\n\nfunction resolveBuiltinScatterMarkerSymbol(chart: XlsxChart): string | undefined {\n if (!chart.chartType.startsWith('Scatter')) return undefined;\n if (chart.scatterStyle === 'line' || chart.scatterStyle === 'smooth' || chart.scatterStyle === 'none') {\n return undefined;\n }\n // An omitted c:marker delegates the symbol to the built-in chart style; it\n // does not mean \"none\". The built-in style used by the python-pptx fixture\n // (18/118) resolves its default scatter marker to a diamond.\n return normalizeBuiltinChartStyleId(chart.chartStyleId) === 18 ? 'diamond' : 'auto';\n}\n\nfunction getBuiltinSurfacePalette(\n styleId: number | undefined,\n wireframe: boolean | undefined,\n): string[] | null {\n const normalized = normalizeBuiltinChartStyleId(styleId);\n if (normalized === 34 || (wireframe === true && normalized == null)) {\n return ['#5b9bd5', '#ed7d31', '#a5a5a5'];\n }\n if (normalized === 35 || normalized === 36 || (wireframe !== true && normalized == null)) {\n return ['#2f5597', '#4472c4', '#5b9bd5', '#8faadc', '#d9e2f3'];\n }\n return null;\n}\n\nfunction applyBuiltinSurfaceDefaults(chart: XlsxChart): void {\n if (chart.chartType !== 'Surface') return;\n const builtinPalette = getBuiltinSurfacePalette(chart.chartStyleId, chart.wireframe);\n if ((!chart.chartColorPalette || chart.chartColorPalette.length === 0) && builtinPalette) {\n chart.chartColorPalette = builtinPalette;\n }\n const wallFill = chart.wireframe ? '#d0d0d0' : '#d9d9df';\n const wallLine = chart.wireframe ? '#a6a6a6' : '#a8adb7';\n chart.floor = {\n ...(chart.floor ?? {}),\n fillColor: chart.floor?.fillColor ?? wallFill,\n lineColor: chart.floor?.lineColor ?? wallLine,\n };\n chart.sideWall = {\n ...(chart.sideWall ?? {}),\n fillColor: chart.sideWall?.fillColor ?? wallFill,\n lineColor: chart.sideWall?.lineColor ?? wallLine,\n };\n chart.backWall = {\n ...(chart.backWall ?? {}),\n fillColor: chart.backWall?.fillColor ?? wallFill,\n lineColor: chart.backWall?.lineColor ?? wallLine,\n };\n if (!chart.surfaceMaterial && chart.wireframe !== true) {\n chart.surfaceMaterial = 'flat';\n }\n}\n\nexport function applyBuiltinChartDefaults(\n chart: XlsxChart,\n themePalette?: XlsxThemePalette | null,\n): void {\n const darkBuiltInStyle =\n typeof chart.chartStyleId === 'number' && chart.chartStyleId >= 140 && chart.chartStyleId < 150;\n const textColor = themePalette?.colorsByIndex[1] ?? themePalette?.colorsByIndex[3] ?? null;\n const minorTypeface = themePalette?.minorLatinFont?.trim() || undefined;\n const derivedAxisColor = textColor ? applyLightnessTransform(textColor, 0.35, 0.55) : null;\n const derivedBorderColor = textColor\n ? applyLightnessTransform(textColor, chart.is3d ? 0.28 : 0.22, chart.is3d ? 0.6 : 0.7)\n : null;\n if (darkBuiltInStyle) {\n chart.chartAreaFillColor = chart.chartAreaFillColor ?? '#1f1f1f';\n chart.chartAreaBorderColor = chart.chartAreaBorderColor ?? '#1f1f1f';\n chart.textColor = chart.textColor ?? '#f5f5f5';\n chart.titleColor = chart.titleColor ?? '#f5f5f5';\n chart.axisLabelColor = chart.axisLabelColor ?? '#d9d9d9';\n chart.axisLineColor = chart.axisLineColor ?? '#8c8c8c';\n }\n chart.chartAreaBorderColor = chart.chartAreaBorderColor ?? derivedBorderColor ?? undefined;\n chart.textColor = chart.textColor ?? textColor ?? undefined;\n chart.titleColor = chart.titleColor ?? textColor ?? undefined;\n chart.axisLabelColor = chart.axisLabelColor ?? derivedAxisColor ?? textColor ?? undefined;\n chart.axisLineColor = chart.axisLineColor ?? derivedAxisColor ?? textColor ?? undefined;\n chart.fontFamily = chart.fontFamily ?? minorTypeface;\n chart.titleFontFamily = chart.titleFontFamily ?? chart.fontFamily ?? minorTypeface;\n\n const seriesPalette =\n chart.chartColorPalette && chart.chartColorPalette.length > 0\n ? chart.chartColorPalette\n : buildThemeSeriesPalette(themePalette);\n if (!chart.chartColorPalette || chart.chartColorPalette.length === 0) {\n chart.chartColorPalette = seriesPalette;\n }\n const builtinScatterMarker = resolveBuiltinScatterMarkerSymbol(chart);\n\n chart.series = chart.series.map((series, index) => {\n const fallbackColor = seriesPalette[index % seriesPalette.length];\n return {\n ...series,\n color: series.color ?? series.lineColor ?? fallbackColor,\n lineColor: series.lineColor ?? series.color ?? fallbackColor,\n markerColor: series.markerColor ?? series.color ?? series.lineColor ?? fallbackColor,\n markerLineColor: series.markerLineColor ?? series.lineColor ?? series.color ?? fallbackColor,\n markerSymbol: series.markerSymbol ?? builtinScatterMarker,\n };\n });\n chart.typeGroups = chart.typeGroups?.map((group, groupIndex) => ({\n ...group,\n series: group.series.map((series, seriesIndex) => {\n const fallbackColor = seriesPalette[(groupIndex + seriesIndex) % seriesPalette.length];\n return {\n ...series,\n color: series.color ?? series.lineColor ?? fallbackColor,\n lineColor: series.lineColor ?? series.color ?? fallbackColor,\n markerColor: series.markerColor ?? series.color ?? series.lineColor ?? fallbackColor,\n markerLineColor: series.markerLineColor ?? series.lineColor ?? series.color ?? fallbackColor,\n };\n }),\n }));\n applyBuiltinSurfaceDefaults(chart);\n}\n\nfunction resolveScatterChartType(scatterStyle: string | null | undefined): string {\n switch (scatterStyle) {\n case 'line':\n case 'lineMarker':\n return 'ScatterLines';\n case 'smooth':\n case 'smoothMarker':\n return 'ScatterSmooth';\n default:\n return 'Scatter';\n }\n}\n\nfunction findPrimaryChartTypeNode(plotAreaNode: Element | null): Element | null {\n if (!plotAreaNode) return null;\n for (const localName of PRIMARY_CHART_TYPE_LOCAL_NAMES) {\n const node = getLocalChildren(plotAreaNode, localName)[0];\n if (node) return node;\n }\n return null;\n}\n\n/** Maps a classic chart-type node to the normalized react-xlsx chart type. */\nfunction resolveClassicGroupChartType(chartTypeNode: Element): {\n chartType: string;\n is3d: boolean | undefined;\n} {\n const grouping = getFirstLocalChild(chartTypeNode, 'grouping')?.getAttribute('val');\n switch (chartTypeNode.localName) {\n case 'barChart':\n case 'bar3DChart': {\n const isHorizontalBar = getFirstLocalChild(chartTypeNode, 'barDir')?.getAttribute('val') === 'bar';\n const is3d = chartTypeNode.localName === 'bar3DChart' ? true : undefined;\n if (grouping === 'percentStacked') {\n return { chartType: isHorizontalBar ? 'BarPercentStacked' : 'ColumnPercentStacked', is3d };\n }\n if (grouping === 'stacked') {\n return { chartType: isHorizontalBar ? 'BarStacked' : 'ColumnStacked', is3d };\n }\n return { chartType: isHorizontalBar ? 'BarClustered' : 'ColumnClustered', is3d };\n }\n case 'areaChart':\n case 'area3DChart': {\n const is3d = chartTypeNode.localName === 'area3DChart' ? true : undefined;\n if (grouping === 'stacked') return { chartType: 'AreaStacked', is3d };\n if (grouping === 'percentStacked') return { chartType: 'AreaPercentStacked', is3d };\n return { chartType: 'Area', is3d };\n }\n case 'lineChart':\n case 'line3DChart': {\n const is3d = chartTypeNode.localName === 'line3DChart' ? true : undefined;\n if (grouping === 'stacked') return { chartType: 'LineStacked', is3d };\n if (grouping === 'percentStacked') return { chartType: 'LinePercentStacked', is3d };\n return { chartType: 'Line', is3d };\n }\n case 'pieChart':\n return { chartType: 'Pie', is3d: undefined };\n case 'pie3DChart':\n return { chartType: 'Pie3D', is3d: true };\n case 'doughnutChart':\n return { chartType: 'Doughnut', is3d: undefined };\n case 'ofPieChart':\n return { chartType: 'BarOfPie', is3d: undefined };\n case 'scatterChart':\n return {\n chartType: resolveScatterChartType(\n getFirstLocalChild(chartTypeNode, 'scatterStyle')?.getAttribute('val'),\n ),\n is3d: undefined,\n };\n case 'radarChart':\n return { chartType: 'Radar', is3d: undefined };\n case 'surfaceChart':\n return { chartType: 'Surface', is3d: false };\n case 'surface3DChart':\n return { chartType: 'Surface', is3d: true };\n case 'stockChart':\n return { chartType: 'Stock', is3d: undefined };\n case 'bubbleChart':\n return { chartType: 'Bubble', is3d: undefined };\n default:\n return { chartType: 'ColumnClustered', is3d: undefined };\n }\n}\n\nfunction isScatterLikeChartType(chartType: string): boolean {\n return (\n chartType === 'Scatter' ||\n chartType === 'ScatterLines' ||\n chartType === 'ScatterSmooth' ||\n chartType === 'Bubble'\n );\n}\n\nfunction readSeriesName(seriesNode: Element): string | undefined {\n const textNode = getFirstLocalChild(seriesNode, 'tx');\n if (!textNode) return undefined;\n const cached = parseChartCacheValues(textNode, 'strCache', 'category');\n const cachedName = cached?.find((value) => typeof value === 'string' && value.length > 0);\n if (typeof cachedName === 'string') return cachedName;\n const literal = getFirstLocalChild(textNode, 'v')?.textContent ?? '';\n return literal.length > 0 ? literal : undefined;\n}\n\n/** Fully parses one classic `c:ser` node into the normalized series model. */\nfunction parseClassicSeries(\n seriesNode: Element,\n chartType: string,\n seriesId: string,\n themePalette?: XlsxThemePalette | null,\n): XlsxChartSeries {\n const isScatterChart = isScatterLikeChartType(chartType);\n const categories = isScatterChart\n ? (parseChartCacheValues(getFirstLocalChild(seriesNode, 'xVal'), 'numCache', 'value') ??\n parseChartMultiLevelCacheValues(getFirstLocalChild(seriesNode, 'xVal'), 'category'))\n : (parseChartCacheValues(getFirstLocalChild(seriesNode, 'cat'), 'strCache', 'category') ??\n parseChartCacheValues(getFirstLocalChild(seriesNode, 'cat'), 'numCache', 'category') ??\n parseChartMultiLevelCacheValues(getFirstLocalChild(seriesNode, 'cat'), 'category'));\n const values = isScatterChart\n ? parseChartCacheValues(getFirstLocalChild(seriesNode, 'yVal'), 'numCache', 'value')\n : parseChartCacheValues(getFirstLocalChild(seriesNode, 'val'), 'numCache', 'value');\n const bubbleSizes =\n chartType === 'Bubble'\n ? parseChartCacheValues(getFirstLocalChild(seriesNode, 'bubbleSize'), 'numCache', 'value')\n : null;\n const shapeProperties = getFirstLocalChild(seriesNode, 'spPr');\n const markerNode = getFirstLocalChild(seriesNode, 'marker');\n const markerShapeProperties = markerNode ? getFirstLocalChild(markerNode, 'spPr') : null;\n const lineStyle = resolveChartLineStyle(shapeProperties, themePalette);\n const markerLineStyle = resolveChartLineStyle(markerShapeProperties, themePalette);\n const fillColor = resolveChartFillColor(shapeProperties, themePalette);\n const markerSize = readChartNumericAttribute(markerNode, 'size');\n const markerSymbol = markerNode\n ? (getFirstLocalChild(markerNode, 'symbol')?.getAttribute('val') ?? undefined)\n : undefined;\n const pointStyles = parseChartPointStyles(seriesNode, themePalette);\n const invertNegativeStyle = parseInvertNegativeStyle(seriesNode, themePalette);\n const seriesExplosion = readChartNumericAttribute(seriesNode, 'explosion');\n const resolvedLineColor = lineStyle.hidden\n ? undefined\n : (lineStyle.color ?? fillColor ?? undefined);\n return {\n bubbleSizeRef: null,\n bubbleSizes: bubbleSizes\n ? bubbleSizes.map((value) => (typeof value === 'number' && Number.isFinite(value) ? value : null))\n : [],\n categories: categories ?? [],\n categoriesRef: null,\n color: fillColor ?? lineStyle.color ?? undefined,\n dataPoints: [],\n dataPointStyles: pointStyles.length > 0 ? pointStyles : undefined,\n id: seriesId,\n invertIfNegative: readChartBooleanAttribute(seriesNode, 'invertIfNegative'),\n lineColor: resolvedLineColor,\n lineWidthPx: lineStyle.hidden ? undefined : lineStyle.widthPx,\n marker: undefined,\n markerColor:\n resolveChartFillColor(markerShapeProperties, themePalette) ??\n fillColor ??\n lineStyle.color ??\n undefined,\n markerLineColor: markerLineStyle.color ?? lineStyle.color ?? fillColor ?? undefined,\n markerSize,\n markerSymbol,\n name: readSeriesName(seriesNode),\n negativeColor: invertNegativeStyle.color,\n negativeLineColor: invertNegativeStyle.lineColor,\n raw: {},\n shapeProperties: {\n xmlExplosion: seriesExplosion ?? undefined,\n xmlFillColor: fillColor ?? undefined,\n xmlLineHidden: lineStyle.hidden ? true : undefined,\n xmlLineColor: lineStyle.color ?? undefined,\n xmlLineWidthPx: lineStyle.widthPx ?? undefined,\n xmlNegativeFillColor: invertNegativeStyle.color ?? undefined,\n xmlNegativeLineColor: invertNegativeStyle.lineColor ?? undefined,\n },\n smooth: readChartBooleanAttribute(seriesNode, 'smooth'),\n values: values\n ? values.map((value) => (typeof value === 'number' && Number.isFinite(value) ? value : null))\n : [],\n valuesRef: null,\n };\n}\n\nfunction readGroupAxisIds(chartTypeNode: Element): number[] {\n return getLocalChildren(chartTypeNode, 'axId')\n .map((node) => Number(node.getAttribute('val') ?? Number.NaN))\n .filter((value) => Number.isFinite(value));\n}\n\nfunction readChartTitle(chartNode: Element | null): string | undefined {\n const titleNode = chartNode ? getFirstLocalChild(chartNode, 'title') : null;\n if (!titleNode) return undefined;\n const texts = getLocalDescendants(titleNode, 't')\n .map((node) => node.textContent ?? '')\n .filter((value) => value.trim().length > 0);\n const joined = texts.join('');\n return joined.length > 0 ? joined : undefined;\n}\n\nfunction defaultAnchor(): XlsxChart['anchor'] {\n return {\n kind: 'two-cell',\n from: { col: 0, colOffsetEmu: 0, row: 0, rowOffsetEmu: 0 },\n to: { col: 8, colOffsetEmu: 0, row: 15, rowOffsetEmu: 0 },\n };\n}\n\nfunction createEmptyChart(id: string): XlsxChart {\n return {\n anchor: defaultAnchor(),\n axes: [],\n categoryAxis: null,\n chartType: 'ColumnClustered',\n dataLabels: null,\n editable: false,\n id,\n legend: null,\n seriesAxis: null,\n series: [],\n sheetIndex: 0,\n sideWall: null,\n backWall: null,\n floor: null,\n typeGroups: [],\n valueAxis: null,\n workbookSheetIndex: 0,\n zIndex: 0,\n };\n}\n\n/** Builds the base chart model from a classic `c:chartSpace` document. */\nfunction buildClassicChartBase(id: string, chartDocument: XMLDocument, themePalette?: XlsxThemePalette | null): XlsxChart {\n const chart = createEmptyChart(id);\n const chartNode = getFirstLocalDescendant(chartDocument, 'chart');\n const plotAreaNode = chartNode ? getFirstLocalChild(chartNode, 'plotArea') : null;\n chart.title = readChartTitle(chartNode);\n chart.autoTitleDeleted = readChartBooleanAttribute(chartNode, 'autoTitleDeleted');\n chart.name = chart.title;\n\n const groupNodes = plotAreaNode\n ? Array.from(plotAreaNode.childNodes)\n .filter(isElementNode)\n .filter((node) =>\n (PRIMARY_CHART_TYPE_LOCAL_NAMES as readonly string[]).includes(node.localName ?? ''),\n )\n : [];\n const typeGroups: XlsxChartTypeGroup[] = [];\n let seriesCounter = 0;\n for (const [groupIndex, groupNode] of groupNodes.entries()) {\n const resolved = resolveClassicGroupChartType(groupNode);\n const groupSeries = getLocalChildren(groupNode, 'ser').map((seriesNode) => {\n const parsed = parseClassicSeries(\n seriesNode,\n resolved.chartType,\n `${id}-series-${seriesCounter}`,\n themePalette,\n );\n seriesCounter += 1;\n return parsed;\n });\n typeGroups.push({\n axisIds: readGroupAxisIds(groupNode),\n chartType: resolved.chartType,\n dataLabels: parseChartDataLabelsFromXml(getFirstLocalChild(groupNode, 'dLbls')),\n gapWidth: readChartNumericAttribute(groupNode, 'gapWidth'),\n is3d: resolved.is3d,\n overlap: readChartNumericAttribute(groupNode, 'overlap'),\n raw: { groupIndex, xmlChartType: groupNode.localName ?? undefined },\n series: groupSeries,\n varyColors: readChartBooleanAttribute(groupNode, 'varyColors'),\n });\n }\n chart.series = typeGroups.flatMap((group) => group.series);\n chart.typeGroups = typeGroups.length > 1 ? typeGroups : [];\n const primaryGroup = typeGroups[0];\n if (primaryGroup) {\n chart.chartType = primaryGroup.chartType;\n chart.is3d = primaryGroup.is3d;\n chart.gapWidth = primaryGroup.gapWidth;\n chart.overlap = primaryGroup.overlap;\n chart.varyColors = primaryGroup.varyColors;\n }\n\n // Populate the axis list with ids so combo groups can resolve their axes.\n if (plotAreaNode) {\n const categoryAxisNodes = [\n ...getLocalChildren(plotAreaNode, 'catAx'),\n ...getLocalChildren(plotAreaNode, 'dateAx'),\n ];\n const valueAxisNodes = getLocalChildren(plotAreaNode, 'valAx');\n const seriesAxisNodes = getLocalChildren(plotAreaNode, 'serAx');\n const axes = [...categoryAxisNodes, ...valueAxisNodes, ...seriesAxisNodes]\n .map((axisNode) => readChartAxisFromXml(axisNode))\n .filter((axis): axis is XlsxChartAxis => axis !== null);\n chart.axes = axes;\n }\n return chart;\n}\n\n// ---------------------------------------------------------------------------\n// Modern chartEx (`cx:chartSpace`) support: funnel, waterfall, treemap,\n// sunburst, histogram/pareto, box & whisker, and region maps.\n// ---------------------------------------------------------------------------\n\nfunction humanizeChartExLayoutLabel(layout: string | undefined): string | undefined {\n if (!layout) return undefined;\n return layout\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/[-_]+/g, ' ')\n .trim()\n .replace(/\\b\\w/g, (match) => match.toUpperCase());\n}\n\nfunction resolveChartExLayoutChartType(layout: string | undefined): string {\n switch (layout) {\n case 'boxWhisker':\n return 'BoxWhisker';\n case 'clusteredColumn':\n return 'ColumnClustered';\n case 'funnel':\n return 'Funnel';\n case 'paretoLine':\n return 'Line';\n case 'regionMap':\n return 'RegionMap';\n case 'sunburst':\n return 'Sunburst';\n case 'treemap':\n return 'Treemap';\n case 'waterfall':\n return 'Waterfall';\n default:\n return layout ? `Unsupported(cx:${layout})` : 'ColumnClustered';\n }\n}\n\ntype ChartExDimension = {\n dimType: string;\n levels: Array<Array<string | null>>;\n};\n\n/** Reads a `cx:strDim`/`cx:numDim` level list; points carry text directly. */\nfunction readChartExDimension(dimensionNode: Element): ChartExDimension {\n const levels = getLocalChildren(dimensionNode, 'lvl').map((levelNode) => {\n const pointCount = Number(levelNode.getAttribute('ptCount') ?? Number.NaN);\n const pointNodes = getLocalChildren(levelNode, 'pt')\n .map((pointNode) => ({\n index: Number(pointNode.getAttribute('idx') ?? Number.NaN),\n value: pointNode.textContent ?? '',\n }))\n .filter((point) => Number.isFinite(point.index) && point.index >= 0);\n const maxIndex = pointNodes.reduce((max, point) => Math.max(max, point.index), -1);\n const length = Math.max(Number.isFinite(pointCount) ? pointCount : 0, maxIndex + 1);\n const values = Array.from({ length }, () => null as string | null);\n for (const point of pointNodes) {\n if (point.index < values.length) values[point.index] = point.value;\n }\n return values;\n });\n return {\n dimType: dimensionNode.getAttribute('type') ?? (dimensionNode.localName === 'numDim' ? 'val' : 'cat'),\n levels,\n };\n}\n\ntype ChartExHistogramBin = {\n count: number;\n label: string;\n lower: number;\n upper: number;\n};\n\nfunction niceHistogramStep(value: number): number {\n if (!Number.isFinite(value) || value <= 0) return 1;\n const exponent = Math.floor(Math.log10(value));\n const scale = 10 ** exponent;\n const normalized = value / scale;\n if (normalized <= 1) return scale;\n if (normalized <= 2) return scale * 2;\n if (normalized <= 5) return scale * 5;\n return scale * 10;\n}\n\nfunction formatHistogramBinLabel(lower: number, upper: number, index: number, closedRight: boolean): string {\n const leftBracket = closedRight ? (index === 0 ? '[' : '(') : '[';\n const rightBracket = closedRight ? ']' : ')';\n return `${leftBracket}${Number(lower.toFixed(6))},${Number(upper.toFixed(6))}${rightBracket}`;\n}\n\nfunction buildChartExHistogramBins(\n values: number[],\n binning: Record<string, unknown> | null,\n sortByFrequency: boolean,\n): ChartExHistogramBin[] {\n if (values.length === 0) return [];\n const minValue = Math.min(...values);\n const maxValue = Math.max(...values);\n const explicitWidth =\n typeof binning?.binWidth === 'number' && Number.isFinite(binning.binWidth) && binning.binWidth > 0\n ? binning.binWidth\n : typeof binning?.width === 'number' && Number.isFinite(binning.width) && binning.width > 0\n ? binning.width\n : undefined;\n const explicitCount =\n typeof binning?.binCount === 'number' && Number.isFinite(binning.binCount) && binning.binCount > 0\n ? binning.binCount\n : typeof binning?.count === 'number' && Number.isFinite(binning.count) && binning.count > 0\n ? binning.count\n : undefined;\n const closedRight = binning?.intervalClosed === 'r' || binning?.intervalClosed === 'right';\n const mean = values.reduce((sum, value) => sum + value, 0) / values.length;\n const variance =\n values.reduce((sum, value) => sum + (value - mean) ** 2, 0) / Math.max(1, values.length);\n const standardDeviation = Math.sqrt(Math.max(0, variance));\n const allIntegers = values.every((value) => Math.abs(value - Math.round(value)) < 1e-9);\n const scottWidth =\n standardDeviation > 0 ? (3.49 * standardDeviation) / Math.cbrt(values.length) : undefined;\n const fallbackWidth =\n explicitCount != null\n ? (maxValue - minValue) / Math.max(1, explicitCount)\n : (scottWidth ?? (maxValue - minValue) / Math.max(1, Math.ceil(Math.log2(values.length) + 1)));\n const roughWidth =\n explicitWidth ??\n (allIntegers\n ? Math.max(1, Math.ceil(Math.max(fallbackWidth, 1e-6)))\n : niceHistogramStep(Math.max(fallbackWidth, 1e-6)));\n const binWidth = Math.max(roughWidth, 1e-6);\n const start =\n explicitWidth != null || explicitCount != null ? Math.floor(minValue / binWidth) * binWidth : minValue;\n const end = Math.max(start + binWidth, start + Math.ceil((maxValue - start) / binWidth) * binWidth);\n const binCount = Math.max(1, Math.ceil((end - start) / binWidth));\n const bins = Array.from({ length: binCount }, (_, index) => {\n const lower = start + binWidth * index;\n const upper = lower + binWidth;\n return {\n count: 0,\n label: formatHistogramBinLabel(lower, upper, index, closedRight),\n lower,\n upper,\n } satisfies ChartExHistogramBin;\n });\n values.forEach((value) => {\n if (!Number.isFinite(value)) return;\n const offset = (value - start) / binWidth;\n let binIndex = Math.floor(offset);\n if (closedRight && Math.abs(offset - Math.round(offset)) < 1e-9 && value > start) {\n binIndex -= 1;\n }\n if (value >= end) binIndex = bins.length - 1;\n if (value <= start) binIndex = 0;\n const target = bins[Math.max(0, Math.min(bins.length - 1, binIndex))];\n if (target) target.count += 1;\n });\n if (sortByFrequency) {\n bins.sort((left, right) => right.count - left.count || left.lower - right.lower);\n }\n return bins;\n}\n\nfunction buildChartExHistogramSeries(\n series: XlsxChartSeries,\n binning: Record<string, unknown> | null,\n sortByFrequency: boolean,\n): XlsxChartSeries {\n if (!binning) return series;\n const numericValues = series.values.filter(\n (value): value is number => typeof value === 'number' && Number.isFinite(value),\n );\n if (numericValues.length === 0) return series;\n const bins = buildChartExHistogramBins(numericValues, binning, sortByFrequency);\n if (bins.length === 0) return series;\n return {\n ...series,\n categories: bins.map((bin) => bin.label),\n categoriesRef: null,\n raw: {\n ...series.raw,\n chartExHistogramBins: bins,\n chartExSourceValues: numericValues,\n },\n values: bins.map((bin) => bin.count),\n };\n}\n\nfunction buildChartExParetoLineSeries(\n series: XlsxChartSeries,\n name: string | undefined,\n): XlsxChartSeries {\n const counts = series.values.map((value) =>\n typeof value === 'number' && Number.isFinite(value) ? value : 0,\n );\n const total = counts.reduce((sum, value) => sum + value, 0);\n let running = 0;\n const cumulative = counts.map((value) => {\n running += value;\n return total > 0 ? (running / total) * 100 : 0;\n });\n return {\n ...series,\n color: undefined,\n lineColor: undefined,\n markerColor: undefined,\n markerLineColor: undefined,\n markerSize: 7,\n markerSymbol: 'circle',\n name: name ?? 'Pareto',\n raw: {\n ...(series.raw ?? {}),\n chartExLayout: 'paretoLine',\n },\n values: cumulative,\n };\n}\n\nfunction collapseChartExPointSeries(chartType: string, series: XlsxChartSeries[]): XlsxChartSeries[] {\n if (chartType !== 'Funnel' && chartType !== 'Waterfall') {\n if (\n (chartType === 'Sunburst' || chartType === 'Treemap') &&\n series.length > 1 &&\n series.every((entry) => {\n const raw = entry.raw && typeof entry.raw === 'object' ? (entry.raw as Record<string, unknown>) : null;\n return raw?.dimType === 'size';\n })\n ) {\n const primarySeries = series.find((entry) => entry.hidden !== true) ?? series[0] ?? null;\n if (!primarySeries) return series;\n return [{ ...primarySeries, dataPoints: [], hidden: false }];\n }\n return series;\n }\n const primarySeries = series.find((entry) => entry.hidden !== true) ?? series[0] ?? null;\n if (!primarySeries) return series;\n // Unlike the react-xlsx wasm model (one series per funnel/waterfall point),\n // the XML builder produces a single series whose cached categories are the\n // stage labels, so they must be preserved.\n return [{ ...primarySeries, dataPoints: [], hidden: false }];\n}\n\nfunction readChartExBinning(seriesNode: Element): Record<string, unknown> | null {\n const layoutPrNode = getFirstLocalChild(seriesNode, 'layoutPr');\n const binningNode = layoutPrNode ? getFirstLocalChild(layoutPrNode, 'binning') : null;\n if (!binningNode) return null;\n const binning: Record<string, unknown> = {};\n for (const attribute of Array.from(binningNode.attributes)) {\n const rawValue = attribute.value;\n const numeric = Number(rawValue);\n binning[attribute.localName || attribute.name] =\n Number.isFinite(numeric) && rawValue.trim() !== '' ? numeric : rawValue;\n }\n for (const child of Array.from(binningNode.childNodes).filter(isElementNode)) {\n const rawValue = child.getAttribute('val');\n if (rawValue == null) continue;\n const numeric = Number(rawValue);\n binning[child.localName ?? ''] = Number.isFinite(numeric) && rawValue.trim() !== '' ? numeric : rawValue;\n }\n return binning;\n}\n\nfunction readChartExAxis(axisNode: Element): XlsxChartAxis {\n const numFmt = getFirstLocalChild(axisNode, 'numFmt');\n const valScaling = getFirstLocalChild(axisNode, 'valScaling');\n const axis: XlsxChartAxis = {\n delete: axisNode.getAttribute('hidden') === '1' ? true : undefined,\n id: Number.isFinite(Number(axisNode.getAttribute('id'))) ? Number(axisNode.getAttribute('id')) : undefined,\n majorGridlines: getFirstLocalChild(axisNode, 'majorGridlines') ? true : undefined,\n max: Number.isFinite(Number(valScaling?.getAttribute('max'))) ? Number(valScaling?.getAttribute('max')) : undefined,\n min: Number.isFinite(Number(valScaling?.getAttribute('min'))) ? Number(valScaling?.getAttribute('min')) : undefined,\n minorGridlines: getFirstLocalChild(axisNode, 'minorGridlines') ? true : undefined,\n raw: {},\n };\n if (numFmt) {\n axis.numberFormat = {\n formatCode: numFmt.getAttribute('formatCode') ?? undefined,\n sourceLinked:\n numFmt.getAttribute('sourceLinked') === '1'\n ? true\n : numFmt.getAttribute('sourceLinked') === '0'\n ? false\n : undefined,\n };\n }\n return axis;\n}\n\n/** Builds the base chart model from a modern `cx:chartSpace` document. */\nfunction buildChartExBase(id: string, chartDocument: XMLDocument, themePalette?: XlsxThemePalette | null): XlsxChart {\n const chart = createEmptyChart(id);\n const chartNode = getFirstLocalDescendant(chartDocument, 'chart');\n const chartDataNode = getFirstLocalDescendant(chartDocument, 'chartData');\n const plotAreaNode = chartNode ? getFirstLocalChild(chartNode, 'plotArea') : null;\n const plotAreaRegion = plotAreaNode ? getFirstLocalChild(plotAreaNode, 'plotAreaRegion') : null;\n\n const dataById = new Map<number, ChartExDimension[]>();\n if (chartDataNode) {\n for (const dataNode of getLocalChildren(chartDataNode, 'data')) {\n const dataId = Number(dataNode.getAttribute('id') ?? Number.NaN);\n if (!Number.isFinite(dataId)) continue;\n const dimensions = [\n ...getLocalChildren(dataNode, 'strDim'),\n ...getLocalChildren(dataNode, 'numDim'),\n ].map(readChartExDimension);\n dataById.set(dataId, dimensions);\n }\n }\n\n const seriesNodes = plotAreaRegion ? getLocalChildren(plotAreaRegion, 'series') : [];\n const seriesLayouts = seriesNodes.map((node) => node.getAttribute('layoutId') ?? undefined);\n const primaryLayout = seriesLayouts.find((value): value is string => Boolean(value && value.length > 0));\n const chartType = resolveChartExLayoutChartType(primaryLayout);\n const fallbackTitle = humanizeChartExLayoutLabel(primaryLayout);\n const titleNode = chartNode ? getFirstLocalChild(chartNode, 'title') : null;\n const titleText = titleNode\n ? getLocalDescendants(titleNode, 'v')\n .map((node) => node.textContent ?? '')\n .join('')\n .trim()\n : '';\n const chartTitle = titleText.length > 0 ? titleText : titleNode ? 'Chart Title' : fallbackTitle;\n\n const normalizedSeries = seriesNodes.map((seriesNode, seriesIndex): XlsxChartSeries => {\n const dataId = readChartNumericAttribute(seriesNode, 'dataId');\n const dimensions = dataId !== undefined ? (dataById.get(dataId) ?? []) : [];\n const categoryDimension =\n dimensions.find((dimension) => dimension.dimType === 'cat') ??\n dimensions.find((dimension) => dimension.dimType === 'name') ??\n null;\n const valueDimension =\n dimensions.find(\n (dimension) =>\n dimension.dimType === 'val' ||\n dimension.dimType === 'y' ||\n dimension.dimType === 'colorVal' ||\n dimension.dimType === 'size',\n ) ??\n dimensions.find((dimension) => dimension !== categoryDimension) ??\n categoryDimension;\n const colorStringDimension = dimensions.find((dimension) => dimension.dimType === 'colorStr') ?? null;\n // Levels arrive innermost-first; the leaf level provides the display label.\n const categoryLevels = categoryDimension?.levels ?? [];\n const leafCategories = categoryLevels[0] ?? [];\n const pointCount = Math.max(\n leafCategories.length,\n valueDimension?.levels[0]?.length ?? 0,\n );\n const hierarchyCategories: string[][] = Array.from({ length: pointCount }, (_, pointIndex) => {\n const path: string[] = [];\n for (let level = categoryLevels.length - 1; level >= 0; level -= 1) {\n const label = categoryLevels[level]?.[pointIndex];\n if (typeof label === 'string' && label.length > 0) path.push(label);\n }\n return path;\n });\n const values = (valueDimension?.levels[0] ?? []).map((value) => {\n if (value == null) return null;\n return cellValueToNumber(value);\n });\n const colorStrings = (colorStringDimension?.levels[0] ?? []).map((value) => {\n if (typeof value !== 'string') return null;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n });\n const shapeProperties = getFirstLocalChild(seriesNode, 'spPr');\n const fillColor = resolveChartFillColor(shapeProperties, themePalette);\n const lineStyle = resolveChartLineStyle(shapeProperties, themePalette);\n const textNode = getFirstLocalChild(seriesNode, 'tx');\n const nameText = textNode\n ? getLocalDescendants(textNode, 'v')\n .map((node) => node.textContent ?? '')\n .join('')\n .trim()\n : '';\n const layoutPrNode = getFirstLocalChild(seriesNode, 'layoutPr');\n const geographyNode = layoutPrNode ? getFirstLocalChild(layoutPrNode, 'geography') : null;\n const geography = geographyNode\n ? Object.fromEntries(\n Array.from(geographyNode.attributes).map((attribute) => [\n attribute.localName || attribute.name,\n attribute.value,\n ]),\n )\n : null;\n const valueColorsNode = getFirstLocalChild(seriesNode, 'valueColors');\n const valueColors = valueColorsNode\n ? Array.from(valueColorsNode.childNodes)\n .filter(isElementNode)\n .map((node) => resolveChartColorNode(findFirstChartColorElement(node) ?? node, themePalette))\n .filter((value): value is string => typeof value === 'string' && value.length > 0)\n : [];\n return {\n bubbleSizeRef: null,\n bubbleSizes: [],\n categories: leafCategories.map((value) => (value != null && value.length > 0 ? value : null)),\n categoriesRef: null,\n color: fillColor ?? undefined,\n dataPoints: [],\n dataPointStyles: undefined,\n hidden: seriesNode.getAttribute('hidden') === '1' ? true : undefined,\n id: `${id}-series-${seriesIndex}`,\n lineColor: lineStyle.color ?? fillColor ?? undefined,\n lineWidthPx: lineStyle.widthPx,\n markerColor: fillColor ?? undefined,\n markerLineColor: lineStyle.color ?? fillColor ?? undefined,\n name: nameText.length > 0 ? nameText : undefined,\n raw: {\n chartExColorStrings: colorStrings,\n chartExHierarchyCategories: hierarchyCategories,\n dimType: valueDimension?.dimType,\n layoutId: seriesNode.getAttribute('layoutId') ?? undefined,\n layoutPr: geography ? { geography } : undefined,\n valueColors: valueColors.length > 0 ? valueColors : undefined,\n },\n values,\n valuesRef: null,\n };\n });\n\n const clusteredColumnIndex = seriesLayouts.findIndex((layout) => layout === 'clusteredColumn');\n const hasParetoLine = seriesLayouts.includes('paretoLine');\n const paretoLineSeriesIndex = seriesLayouts.findIndex((layout) => layout === 'paretoLine');\n const clusteredNode = clusteredColumnIndex >= 0 ? (seriesNodes[clusteredColumnIndex] ?? null) : null;\n const binning = clusteredNode ? readChartExBinning(clusteredNode) : null;\n const clusteredBase =\n clusteredColumnIndex >= 0\n ? (normalizedSeries[clusteredColumnIndex] ?? normalizedSeries[0] ?? null)\n : null;\n const primaryHistogramSeries =\n clusteredBase && binning ? buildChartExHistogramSeries(clusteredBase, binning, hasParetoLine) : null;\n const synthesizedParetoSeries =\n hasParetoLine && primaryHistogramSeries && primaryHistogramSeries.values.length > 0\n ? buildChartExParetoLineSeriesFromNodes(\n primaryHistogramSeries,\n paretoLineSeriesIndex >= 0 ? normalizedSeries[paretoLineSeriesIndex] : undefined,\n )\n : null;\n const resolvedSeries = synthesizedParetoSeries\n ? [primaryHistogramSeries as XlsxChartSeries, synthesizedParetoSeries]\n : primaryHistogramSeries\n ? [\n primaryHistogramSeries,\n ...normalizedSeries.filter((_, seriesIndex) => seriesIndex !== clusteredColumnIndex),\n ]\n : collapseChartExPointSeries(chartType, normalizedSeries);\n const resolvedChartType = primaryHistogramSeries ? 'ColumnClustered' : chartType;\n\n const axes = plotAreaNode ? getLocalChildren(plotAreaNode, 'axis').map(readChartExAxis) : [];\n const legendNode = chartNode ? getFirstLocalChild(chartNode, 'legend') : null;\n\n chart.axes = axes;\n chart.categoryAxis = axes[0] ?? null;\n chart.valueAxis = axes.find((axis) => axis.numberFormat || axis.majorGridlines) ?? axes[1] ?? null;\n chart.chartExLayout = primaryLayout;\n chart.chartType = resolvedChartType;\n if (primaryHistogramSeries) chart.gapWidth = 0;\n chart.legend = legendNode\n ? {\n overlay: legendNode.getAttribute('overlay') === '1',\n position: normalizeLegendPosition(legendNode.getAttribute('pos') ?? undefined),\n raw: {},\n }\n : null;\n chart.name = chartTitle;\n chart.series = resolvedSeries;\n chart.title = chartTitle;\n chart.typeGroups = synthesizedParetoSeries\n ? [\n {\n chartType: 'ColumnClustered',\n gapWidth: 0,\n raw: { gapWidth: 0, layout: 'clusteredColumn' },\n series: [primaryHistogramSeries as XlsxChartSeries],\n },\n {\n chartType: 'Line',\n raw: { layout: 'paretoLine' },\n series: [synthesizedParetoSeries],\n },\n ]\n : [];\n const firstSeriesDataLabels = seriesNodes[0]\n ? parseChartDataLabelsFromXml(getFirstLocalChild(seriesNodes[0], 'dataLabels'))\n : null;\n chart.dataLabels = firstSeriesDataLabels;\n return chart;\n}\n\nfunction buildChartExParetoLineSeriesFromNodes(\n histogramSeries: XlsxChartSeries,\n paretoSeries: XlsxChartSeries | undefined,\n): XlsxChartSeries {\n return buildChartExParetoLineSeries(histogramSeries, paretoSeries?.name);\n}\n\n// ---------------------------------------------------------------------------\n// Regex fallbacks (mirrors react-xlsx behaviour for malformed chart XML).\n// ---------------------------------------------------------------------------\n\nfunction resolveColorFromXmlFragment(\n fragment: string,\n themePalette?: XlsxThemePalette | null,\n): string | undefined {\n if (!fragment) return undefined;\n const srgbMatch = fragment.match(/<a:srgbClr\\b[^>]*\\bval=\"([0-9a-fA-F]{6,8})\"/i);\n if (srgbMatch?.[1]) return normalizeHexColor(srgbMatch[1]) ?? undefined;\n const schemeMatch =\n fragment.match(/<a:schemeClr\\b[^>]*\\bval=\"([^\"]+)\"[^>]*>([\\s\\S]*?)<\\/a:schemeClr>/i) ??\n fragment.match(/<a:schemeClr\\b[^>]*\\bval=\"([^\"]+)\"[^>]*/i);\n if (!schemeMatch?.[1]) return undefined;\n const baseColor = resolveThemeColor(schemeMatch[1], themePalette);\n if (!baseColor) return undefined;\n const transforms = schemeMatch[2] ?? '';\n let lightnessModifier = 1;\n let lightnessOffset = 0;\n for (const match of transforms.matchAll(/<a:(lumMod|lumOff|tint|shade)\\b[^>]*\\bval=\"(-?\\d+(?:\\.\\d+)?)\"/gi)) {\n const transform = match[1]?.toLowerCase();\n const rawValue = Number(match[2] ?? Number.NaN);\n if (!transform || !Number.isFinite(rawValue)) continue;\n if (transform === 'lummod') {\n lightnessModifier *= rawValue / 100000;\n } else if (transform === 'lumoff') {\n lightnessOffset += rawValue / 100000;\n } else if (transform === 'tint') {\n lightnessOffset += (1 - lightnessOffset) * (rawValue / 100000);\n } else if (transform === 'shade') {\n lightnessModifier *= rawValue / 100000;\n }\n }\n return applyLightnessTransform(baseColor, lightnessModifier, lightnessOffset) ?? undefined;\n}\n\nfunction readHexColorFromXmlFragment(\n fragment: string,\n preferLine = false,\n themePalette?: XlsxThemePalette | null,\n): string | undefined {\n const source = preferLine\n ? (fragment.match(/<a:ln\\b[\\s\\S]*?<\\/a:ln>/i)?.[0] ?? '')\n : (fragment.match(/<a:solidFill\\b[\\s\\S]*?<\\/a:solidFill>/i)?.[0] ?? '');\n return resolveColorFromXmlFragment(source, themePalette);\n}\n\ntype FallbackSeriesStyle = {\n color?: string | undefined;\n lineColor?: string | undefined;\n};\n\nfunction parseFallbackSeriesStylesFromChartXml(\n chartXml: string,\n themePalette?: XlsxThemePalette | null,\n): FallbackSeriesStyle[] {\n const seriesBlocks = chartXml.match(/<c:ser\\b[\\s\\S]*?<\\/c:ser>/gi) ?? [];\n if (seriesBlocks.length === 0) return [];\n return seriesBlocks.map((seriesBlock) => {\n const shapeBlock = seriesBlock.match(/<c:spPr\\b[\\s\\S]*?<\\/c:spPr>/i)?.[0] ?? '';\n return {\n color: readHexColorFromXmlFragment(shapeBlock, false, themePalette),\n lineColor: readHexColorFromXmlFragment(shapeBlock, true, themePalette),\n };\n });\n}\n\n// ---------------------------------------------------------------------------\n// Style application (ported from react-xlsx `applyChartStyleFromXml`).\n// ---------------------------------------------------------------------------\n\nfunction applyChartSeriesStyleFromXml(\n chart: XlsxChart,\n chartTypeNode: Element,\n themePalette?: XlsxThemePalette | null,\n): void {\n const seriesNodes = getLocalChildren(chartTypeNode, 'ser');\n chart.series = chart.series.map((series, index) => {\n const seriesNode = seriesNodes[index];\n if (!seriesNode) return series;\n const shapeProperties = getFirstLocalChild(seriesNode, 'spPr');\n const markerNode = getFirstLocalChild(seriesNode, 'marker');\n const markerShapeProperties = getFirstLocalChild(markerNode ?? chartTypeNode, 'spPr');\n const lineStyle = resolveChartLineStyle(shapeProperties, themePalette);\n const markerLineStyle = resolveChartLineStyle(markerShapeProperties, themePalette);\n const fillColor = resolveChartFillColor(shapeProperties, themePalette);\n const markerSize = readChartNumericAttribute(markerNode, 'size');\n const markerSymbolNode = markerNode ? getFirstLocalChild(markerNode, 'symbol') : null;\n const markerSymbol = markerSymbolNode?.getAttribute('val') ?? undefined;\n const pointStyles = parseChartPointStyles(seriesNode, themePalette);\n const seriesExplosion = readChartNumericAttribute(seriesNode, 'explosion');\n const invertNegativeStyle = parseInvertNegativeStyle(seriesNode, themePalette);\n const invertIfNegative = readChartBooleanAttribute(seriesNode, 'invertIfNegative');\n const isScatterChart = isScatterLikeChartType(chart.chartType);\n const cachedCategories = isScatterChart\n ? (parseChartCacheValues(getFirstLocalChild(seriesNode, 'xVal'), 'numCache', 'value') ??\n parseChartMultiLevelCacheValues(getFirstLocalChild(seriesNode, 'xVal'), 'category'))\n : (parseChartCacheValues(getFirstLocalChild(seriesNode, 'cat'), 'strCache', 'category') ??\n parseChartCacheValues(getFirstLocalChild(seriesNode, 'cat'), 'numCache', 'category') ??\n parseChartMultiLevelCacheValues(getFirstLocalChild(seriesNode, 'cat'), 'category'));\n const cachedValues = isScatterChart\n ? parseChartCacheValues(getFirstLocalChild(seriesNode, 'yVal'), 'numCache', 'value')\n : parseChartCacheValues(getFirstLocalChild(seriesNode, 'val'), 'numCache', 'value');\n const cachedBubbleSizes =\n chart.chartType === 'Bubble'\n ? parseChartCacheValues(getFirstLocalChild(seriesNode, 'bubbleSize'), 'numCache', 'value')\n : null;\n const resolvedLineColor = lineStyle.hidden\n ? undefined\n : (lineStyle.color ?? fillColor ?? series.lineColor ?? series.color);\n return {\n ...series,\n bubbleSizes: cachedBubbleSizes\n ? cachedBubbleSizes.map((value) =>\n typeof value === 'number' && Number.isFinite(value) ? value : null,\n )\n : series.bubbleSizes,\n categories: cachedCategories ?? series.categories,\n color: fillColor ?? lineStyle.color ?? series.color,\n dataPointStyles: pointStyles.length > 0 ? pointStyles : series.dataPointStyles,\n lineColor: resolvedLineColor,\n lineWidthPx: lineStyle.hidden ? undefined : (lineStyle.widthPx ?? series.lineWidthPx),\n markerColor:\n resolveChartFillColor(markerShapeProperties, themePalette) ??\n fillColor ??\n lineStyle.color ??\n undefined,\n markerLineColor: markerLineStyle.color ?? lineStyle.color ?? fillColor ?? undefined,\n markerSize: markerSize ?? series.markerSize,\n markerSymbol,\n smooth: readChartBooleanAttribute(seriesNode, 'smooth') ?? series.smooth,\n invertIfNegative: invertIfNegative ?? series.invertIfNegative,\n shapeProperties: {\n ...series.shapeProperties,\n xmlExplosion: seriesExplosion ?? undefined,\n xmlFillColor: fillColor ?? undefined,\n xmlLineHidden: lineStyle.hidden ? true : undefined,\n xmlLineColor: lineStyle.color ?? undefined,\n xmlLineWidthPx: lineStyle.widthPx ?? undefined,\n xmlNegativeFillColor: invertNegativeStyle.color ?? undefined,\n xmlNegativeLineColor: invertNegativeStyle.lineColor ?? undefined,\n },\n negativeColor: invertNegativeStyle.color ?? series.negativeColor,\n negativeLineColor: invertNegativeStyle.lineColor ?? series.negativeLineColor,\n values: cachedValues\n ? cachedValues.map((value) => (typeof value === 'number' && Number.isFinite(value) ? value : null))\n : series.values,\n };\n });\n}\n\nexport function applyChartStyleFromXml(\n chart: XlsxChart,\n chartXml: string,\n styleXml: string | undefined,\n colorsXml: string | undefined,\n themePalette?: XlsxThemePalette | null,\n): void {\n const fallbackSeriesStyles = parseFallbackSeriesStylesFromChartXml(chartXml, themePalette);\n const applyFallbackSeriesStyles = (): void => {\n if (fallbackSeriesStyles.length === 0) return;\n chart.series = chart.series.map((series, seriesIndex) => {\n const fallbackStyle = fallbackSeriesStyles[seriesIndex];\n if (!fallbackStyle) return series;\n const fallbackColor = fallbackStyle.color ?? fallbackStyle.lineColor;\n return {\n ...series,\n color: series.color ?? fallbackColor,\n lineColor: series.lineColor ?? fallbackStyle.lineColor ?? fallbackColor,\n markerColor: series.markerColor ?? fallbackColor ?? series.color,\n markerLineColor:\n series.markerLineColor ?? fallbackStyle.lineColor ?? fallbackColor ?? series.lineColor,\n };\n });\n };\n const applyRelationshipStyles = (): ChartStyleAppearance => {\n const palette = readChartColorPalette(colorsXml, themePalette);\n if (palette.length > 0) chart.chartColorPalette = palette;\n const styleAppearance = readChartStyleAppearance(styleXml, themePalette);\n chart.axisLabelColor = styleAppearance.axisLabelColor ?? chart.axisLabelColor;\n chart.axisLineColor = styleAppearance.axisLineColor ?? chart.axisLineColor;\n chart.chartAreaBorderColor = styleAppearance.chartAreaBorderColor ?? chart.chartAreaBorderColor;\n chart.chartAreaFillColor = styleAppearance.chartAreaFillColor ?? chart.chartAreaFillColor;\n chart.chartColorPaletteOffset = styleAppearance.paletteOffset ?? chart.chartColorPaletteOffset;\n chart.textColor = styleAppearance.textColor ?? chart.textColor;\n chart.titleColor = styleAppearance.titleColor ?? chart.titleColor;\n return styleAppearance;\n };\n\n const chartDocument = parseXml(chartXml);\n const chartNode = chartDocument ? getFirstLocalDescendant(chartDocument, 'chart') : null;\n const plotAreaNode = chartNode ? getFirstLocalChild(chartNode, 'plotArea') : null;\n const styleIdNode = chartDocument?.documentElement\n ? getFirstLocalDescendant(chartDocument.documentElement, 'style')\n : null;\n const chartTypeNode = findPrimaryChartTypeNode(plotAreaNode);\n\n if (!chartNode || !chartTypeNode || !plotAreaNode) {\n applyRelationshipStyles();\n const fallbackStyleId = Number(styleIdNode?.getAttribute('val') ?? Number.NaN);\n if (Number.isFinite(fallbackStyleId)) chart.chartStyleId = fallbackStyleId;\n applyFallbackSeriesStyles();\n applyBuiltinChartDefaults(chart, themePalette);\n return;\n }\n const plotArea = plotAreaNode;\n\n const resolvedType = resolveClassicGroupChartType(chartTypeNode);\n chart.chartType = resolvedType.chartType;\n if (resolvedType.is3d !== undefined) chart.is3d = resolvedType.is3d;\n\n const legendNode = getFirstLocalChild(chartNode, 'legend');\n const legendPosition = legendNode\n ? (getFirstLocalChild(legendNode, 'legendPos')?.getAttribute('val') ?? undefined)\n : undefined;\n const legendOverlay = legendNode\n ? getFirstLocalChild(legendNode, 'overlay')?.getAttribute('val')\n : undefined;\n chart.legend = legendNode\n ? {\n overlay: legendOverlay === '1',\n position: normalizeLegendPosition(legendPosition),\n raw: chart.legend?.raw,\n }\n : chart.legend;\n const plotVisibleOnly = readChartBooleanAttribute(chartNode, 'plotVisOnly');\n if (plotVisibleOnly !== undefined) chart.plotVisibleOnly = plotVisibleOnly;\n chart.displayBlanksAs =\n getFirstLocalChild(chartNode, 'dispBlanksAs')?.getAttribute('val') ?? chart.displayBlanksAs;\n const styleId = Number(styleIdNode?.getAttribute('val') ?? Number.NaN);\n chart.chartStyleId = Number.isFinite(styleId) ? styleId : chart.chartStyleId;\n chart.firstSliceAngle = readChartNumericAttribute(chartTypeNode, 'firstSliceAng') ?? chart.firstSliceAngle;\n chart.gapWidth = readChartNumericAttribute(chartTypeNode, 'gapWidth') ?? chart.gapWidth;\n chart.overlap = readChartNumericAttribute(chartTypeNode, 'overlap') ?? chart.overlap;\n chart.bubbleScale = readChartNumericAttribute(chartTypeNode, 'bubbleScale') ?? chart.bubbleScale;\n chart.varyColors = readChartBooleanAttribute(chartTypeNode, 'varyColors') ?? chart.varyColors;\n const bubble3dNode = getFirstLocalChild(chartTypeNode, 'bubble3D');\n chart.bubble3d = bubble3dNode ? bubble3dNode.getAttribute('val') !== '0' : chart.bubble3d;\n chart.holeSize = readChartNumericAttribute(chartTypeNode, 'holeSize') ?? chart.holeSize;\n chart.radarStyle = getFirstLocalChild(chartTypeNode, 'radarStyle')?.getAttribute('val') ?? chart.radarStyle;\n chart.scatterStyle =\n getFirstLocalChild(chartTypeNode, 'scatterStyle')?.getAttribute('val') ?? chart.scatterStyle;\n chart.shape3d = getFirstLocalChild(chartTypeNode, 'shape')?.getAttribute('val') ?? chart.shape3d;\n const wireframeNode = getFirstLocalChild(chartTypeNode, 'wireframe');\n chart.wireframe = wireframeNode ? wireframeNode.getAttribute('val') !== '0' : chart.wireframe;\n const chartTypeDataLabels = parseChartDataLabelsFromXml(getFirstLocalChild(chartTypeNode, 'dLbls'));\n const firstSeriesNode = getLocalChildren(chartTypeNode, 'ser')[0] ?? null;\n const seriesDataLabels = parseChartDataLabelsFromXml(getFirstLocalChild(firstSeriesNode, 'dLbls'));\n chart.dataLabels = chartTypeDataLabels ?? seriesDataLabels ?? chart.dataLabels;\n const seriesSp3dNode = firstSeriesNode ? getFirstLocalDescendant(firstSeriesNode, 'sp3d') : null;\n chart.surfaceMaterial = seriesSp3dNode?.getAttribute('prstMaterial') ?? chart.surfaceMaterial;\n const bandFormatsNode = getLocalChildren(chartTypeNode, 'bandFmts')[0] ?? null;\n const bandFormatNodes = bandFormatsNode ? getLocalChildren(bandFormatsNode, 'bandFmt') : [];\n const bandFormatColors = bandFormatNodes\n .map((bandFormatNode) => {\n const shapeProperties = getFirstLocalChild(bandFormatNode, 'spPr');\n return resolveChartFillColor(shapeProperties, themePalette) ?? undefined;\n })\n .filter((color): color is string => typeof color === 'string' && color.length > 0);\n const bandFormatLineColors = bandFormatNodes\n .map((bandFormatNode) => {\n const shapeProperties = getFirstLocalChild(bandFormatNode, 'spPr');\n return resolveChartLineStyle(shapeProperties, themePalette).color ?? undefined;\n })\n .filter((color): color is string => typeof color === 'string' && color.length > 0);\n\n chart.raw = {\n ...(chart.raw ?? {}),\n bandFormatCount: bandFormatNodes.length > 0 ? bandFormatNodes.length : undefined,\n bandFormatColors: bandFormatColors.length > 0 ? bandFormatColors : undefined,\n bandFormatLineColors: bandFormatLineColors.length > 0 ? bandFormatLineColors : undefined,\n date1904: readChartBooleanAttribute(chartDocument?.documentElement ?? null, 'date1904'),\n bubble3d: chart.bubble3d,\n grouping: getFirstLocalChild(chartTypeNode, 'grouping')?.getAttribute('val') ?? undefined,\n ofPieType: getFirstLocalChild(chartTypeNode, 'ofPieType')?.getAttribute('val') ?? undefined,\n shape: getFirstLocalChild(chartTypeNode, 'shape')?.getAttribute('val') ?? undefined,\n secondPieSize: readChartNumericAttribute(chartTypeNode, 'secondPieSize'),\n scatterStyle: chart.scatterStyle,\n splitPos: readChartNumericAttribute(chartTypeNode, 'splitPos'),\n splitType: getFirstLocalChild(chartTypeNode, 'splitType')?.getAttribute('val') ?? undefined,\n xmlChartType: chartTypeNode.localName,\n };\n const view3dNode = getFirstLocalDescendant(chartNode, 'view3D');\n if (view3dNode) {\n chart.view3d = {\n depthPercent: readChartNumericAttribute(view3dNode, 'depthPercent'),\n perspective: readChartNumericAttribute(view3dNode, 'perspective'),\n rAngAx: getFirstLocalChild(view3dNode, 'rAngAx')?.getAttribute('val') === '1',\n rotX: readChartNumericAttribute(view3dNode, 'rotX'),\n rotY: readChartNumericAttribute(view3dNode, 'rotY'),\n };\n }\n chart.floor = readChartWallFromXml(getFirstLocalChild(chartNode, 'floor'), themePalette) ?? chart.floor;\n chart.sideWall =\n readChartWallFromXml(getFirstLocalChild(chartNode, 'sideWall'), themePalette) ?? chart.sideWall;\n chart.backWall =\n readChartWallFromXml(getFirstLocalChild(chartNode, 'backWall'), themePalette) ?? chart.backWall;\n\n const styleAppearance = applyRelationshipStyles();\n const chartTextTypeface = readChartTextTypeface(getFirstLocalChild(chartNode, 'txPr'), themePalette);\n const titleTypeface = readChartTextTypeface(getFirstLocalDescendant(chartNode, 'title'), themePalette);\n chart.fontFamily = chartTextTypeface ?? chart.fontFamily;\n chart.titleFontFamily = titleTypeface ?? chart.titleFontFamily ?? chart.fontFamily;\n\n const chartAreaShapeProperties = chartDocument?.documentElement\n ? getFirstLocalChild(chartDocument.documentElement, 'spPr')\n : null;\n const plotAreaShapeProperties = getFirstLocalChild(plotArea, 'spPr');\n const chartAreaNoFill = chartAreaShapeProperties\n ? getFirstLocalChild(chartAreaShapeProperties, 'noFill') != null\n : false;\n const plotAreaNoFill = plotAreaShapeProperties\n ? getFirstLocalChild(plotAreaShapeProperties, 'noFill') != null\n : false;\n chart.raw = {\n ...(chart.raw ?? {}),\n chartAreaNoFill: styleAppearance.chartAreaNoFill === true || chartAreaNoFill,\n plotAreaNoFill,\n };\n if (chartAreaShapeProperties) {\n const chartAreaFillColor = resolveChartFillColor(chartAreaShapeProperties, themePalette);\n if (chartAreaFillColor) {\n chart.chartAreaFillColor = chartAreaFillColor;\n } else if (getFirstLocalChild(chartAreaShapeProperties, 'noFill')) {\n chart.chartAreaFillColor = 'transparent';\n }\n const chartAreaLineStyle = resolveChartLineStyle(chartAreaShapeProperties, themePalette);\n if (chartAreaLineStyle.hidden) {\n chart.chartAreaBorderColor = 'transparent';\n } else if (chartAreaLineStyle.color) {\n chart.chartAreaBorderColor = chartAreaLineStyle.color;\n }\n }\n if (!chart.chartAreaFillColor && (styleAppearance.chartAreaNoFill === true || plotAreaNoFill)) {\n chart.chartAreaFillColor = 'transparent';\n }\n\n const categoryAxisNodes = [\n ...getLocalChildren(plotArea, 'catAx'),\n ...getLocalChildren(plotArea, 'dateAx'),\n ];\n const valueAxisNodes = getLocalChildren(plotArea, 'valAx');\n const seriesAxisNode = getLocalChildren(plotArea, 'serAx')[0] ?? null;\n const isScatterLike = isScatterLikeChartType(chart.chartType);\n let categoryAxisNode = categoryAxisNodes[0] ?? null;\n let valueAxisNode = valueAxisNodes[0] ?? null;\n if (!categoryAxisNode && isScatterLike && valueAxisNodes.length >= 2) {\n categoryAxisNode =\n valueAxisNodes.find((axisNode) => {\n const position = getFirstLocalChild(axisNode, 'axPos')?.getAttribute('val');\n return position === 'b' || position === 't';\n }) ?? valueAxisNodes[0] ?? null;\n valueAxisNode =\n valueAxisNodes.find((axisNode) => {\n const position = getFirstLocalChild(axisNode, 'axPos')?.getAttribute('val');\n return position === 'l' || position === 'r';\n }) ??\n valueAxisNodes[1] ??\n valueAxisNodes[0] ??\n null;\n }\n chart.categoryAxis = mergeChartAxis(chart.categoryAxis, readChartAxisFromXml(categoryAxisNode));\n chart.valueAxis = mergeChartAxis(chart.valueAxis, readChartAxisFromXml(valueAxisNode));\n chart.seriesAxis = mergeChartAxis(chart.seriesAxis, readChartAxisFromXml(seriesAxisNode));\n chart.axes =\n chart.axes.length > 0\n ? chart.axes.map((axis, index) =>\n index === 0 && categoryAxisNode\n ? { ...axis, ...readChartAxisFromXml(categoryAxisNode) }\n : index === 1 && valueAxisNode\n ? { ...axis, ...readChartAxisFromXml(valueAxisNode) }\n : axis,\n )\n : chart.axes;\n if (seriesAxisNode) {\n const seriesAxis = readChartAxisFromXml(seriesAxisNode);\n if (seriesAxis && !chart.axes.some((axis) => axis.id != null && axis.id === seriesAxis.id)) {\n chart.axes = [...chart.axes, seriesAxis as XlsxChartAxis];\n }\n }\n\n applyChartSeriesStyleFromXml(chart, chartTypeNode, themePalette);\n applyFallbackSeriesStyles();\n applyBuiltinChartDefaults(chart, themePalette);\n}\n\n// ---------------------------------------------------------------------------\n// Entry points.\n// ---------------------------------------------------------------------------\n\nconst LEGACY_CHART_TYPE_MAP: Record<string, string> = {\n bar: 'ColumnClustered',\n line: 'Line',\n pie: 'Pie',\n doughnut: 'Doughnut',\n area: 'Area',\n scatter: 'Scatter',\n radar: 'Radar',\n bubble: 'Bubble',\n stock: 'Stock',\n surface: 'Surface',\n};\n\n/** Builds a renderable chart from the parsed summary when no XML is available. */\nfunction buildFallbackChart(node: ChartNode): XlsxChart {\n const chart = createEmptyChart(node.id);\n chart.chartType = LEGACY_CHART_TYPE_MAP[node.chartType] ?? 'ColumnClustered';\n chart.title = node.title;\n chart.name = node.title;\n chart.legend = node.hasLegend ? { position: 'b', raw: {} } : null;\n chart.series = node.series.map((series, index) => ({\n bubbleSizeRef: null,\n bubbleSizes: [],\n categories: (series.categories ?? []).map((value) =>\n typeof value === 'string' || typeof value === 'number' ? value : null,\n ),\n categoriesRef: null,\n color: series.color?.value ? (normalizeHexColor(series.color.value) ?? undefined) : undefined,\n dataPoints: [],\n id: `${node.id}-series-${index}`,\n name: series.name,\n raw: {},\n values: series.values.map((value) =>\n typeof value === 'number' && Number.isFinite(value) ? value : null,\n ),\n valuesRef: null,\n }));\n return chart;\n}\n\nfunction isChartExDocument(chartDocument: XMLDocument): boolean {\n return getFirstLocalDescendant(chartDocument, 'chartData') != null;\n}\n\n/**\n * Builds a fully styled chart model for a PowerPoint chart node using the same\n * pipeline as react-xlsx: base model, chart XML styles, companion style and\n * color parts, and built-in Office defaults driven by the slide theme.\n */\nexport function buildPptxChart(node: ChartNode, themePalette: XlsxThemePalette | null): XlsxChart {\n const chartXml = node.chartXml;\n if (chartXml) {\n const chartDocument = parseXml(chartXml);\n if (chartDocument) {\n if (isChartExDocument(chartDocument)) {\n const chart = buildChartExBase(node.id, chartDocument, themePalette);\n const palette = readChartColorPalette(node.chartColorsXml, themePalette);\n if (palette.length > 0) chart.chartColorPalette = palette;\n const styleAppearance = readChartStyleAppearance(node.chartStyleXml, themePalette);\n chart.axisLabelColor = styleAppearance.axisLabelColor ?? chart.axisLabelColor;\n chart.axisLineColor = styleAppearance.axisLineColor ?? chart.axisLineColor;\n chart.chartAreaBorderColor = styleAppearance.chartAreaBorderColor ?? chart.chartAreaBorderColor;\n chart.chartAreaFillColor = styleAppearance.chartAreaFillColor ?? chart.chartAreaFillColor;\n chart.chartColorPaletteOffset = styleAppearance.paletteOffset ?? chart.chartColorPaletteOffset;\n chart.textColor = styleAppearance.textColor ?? chart.textColor;\n chart.titleColor = styleAppearance.titleColor ?? chart.titleColor;\n if (styleAppearance.chartAreaNoFill === true && !chart.chartAreaFillColor) {\n chart.chartAreaFillColor = 'transparent';\n }\n applyBuiltinChartDefaults(chart, themePalette);\n return chart;\n }\n const chart = buildClassicChartBase(node.id, chartDocument, themePalette);\n applyChartStyleFromXml(chart, chartXml, node.chartStyleXml, node.chartColorsXml, themePalette);\n return chart;\n }\n }\n const chart = buildFallbackChart(node);\n applyBuiltinChartDefaults(chart, themePalette);\n return chart;\n}\n","// @ts-nocheck -- vendored from @extend-ai/react-xlsx, which compiles without\n// noUncheckedIndexedAccess/exactOptionalPropertyTypes. Keep edits minimal so\n// this file stays diffable against the react-xlsx source of truth.\nimport createREGL from \"regl\";\nimport * as React from \"react\";\nimport type { XlsxChart } from \"./chart-types\";\n\ntype SurfacePalette = {\n border: string;\n mutedText: string;\n surface: string;\n text: string;\n};\n\ntype SurfaceLayout = {\n height: number;\n plot: {\n height: number;\n left: number;\n top: number;\n width: number;\n };\n width: number;\n};\n\ntype SurfaceCompositeProps = {\n background: string;\n borderColor: string;\n chart: XlsxChart;\n fontFamily: string;\n layout: SurfaceLayout;\n onDoubleClick?: React.MouseEventHandler<SVGSVGElement>;\n onPointerDown?: React.PointerEventHandler<SVGSVGElement>;\n overlay: React.ReactNode;\n palette: SurfacePalette;\n fallback: React.ReactNode;\n};\n\ntype SurfaceDomain = {\n maxValue: number;\n minValue: number;\n safeMax: number;\n ticks: number[];\n};\n\ntype SurfacePoint3D = {\n depth: number;\n worldX: number;\n worldY: number;\n worldZ: number;\n x: number;\n y: number;\n};\n\ntype SurfaceVertex = {\n bandColor: string;\n point: SurfacePoint3D;\n value: number;\n};\n\ntype SolidSurfaceTriangle = {\n color: string;\n points: [SurfacePoint3D, SurfacePoint3D, SurfacePoint3D];\n};\n\ntype SurfaceScene = {\n fillColors: Float32Array;\n fillPositions: Float32Array;\n lineColors: Float32Array;\n linePositions: Float32Array;\n wallColors: Float32Array;\n wallPositions: Float32Array;\n};\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value));\n}\n\nfunction safeNumber(value: unknown) {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === \"string\") {\n const normalized = value.trim().replace(/,/g, \"\");\n if (!normalized) {\n return null;\n }\n const parsed = Number(normalized);\n return Number.isFinite(parsed) ? parsed : null;\n }\n return null;\n}\n\nfunction parseRgbColor(color: string) {\n const match = /^#?([0-9a-f]{6})$/i.exec(color);\n if (!match) {\n return null;\n }\n return {\n blue: Number.parseInt(match[1].slice(4, 6), 16),\n green: Number.parseInt(match[1].slice(2, 4), 16),\n red: Number.parseInt(match[1].slice(0, 2), 16)\n };\n}\n\nfunction mixRgbColor(color: string, mixWith: string, ratio: number) {\n const base = parseRgbColor(color);\n const target = parseRgbColor(mixWith);\n if (!base || !target) {\n return color;\n }\n const clamped = clamp(ratio, 0, 1);\n const mixChannel = (left: number, right: number) => Math.round(left + (right - left) * clamped);\n return `#${[\n mixChannel(base.red, target.red),\n mixChannel(base.green, target.green),\n mixChannel(base.blue, target.blue)\n ].map((value) => value.toString(16).padStart(2, \"0\")).join(\"\")}`;\n}\n\nfunction lightenColor(color: string, ratio: number) {\n return mixRgbColor(color, \"#ffffff\", ratio);\n}\n\nfunction darkenColor(color: string, ratio: number) {\n return mixRgbColor(color, \"#000000\", ratio);\n}\n\nfunction resolveSurfaceBaseColor(chart: XlsxChart, palette: SurfacePalette) {\n return chart.chartColorPalette?.[0]\n ?? chart.series[0]?.color\n ?? chart.series[0]?.lineColor\n ?? chart.axisLineColor\n ?? chart.textColor\n ?? palette.text;\n}\n\nfunction normalizeBuiltinSurfaceStyleId(styleId: number | undefined) {\n if (typeof styleId !== \"number\" || !Number.isFinite(styleId)) {\n return null;\n }\n return styleId >= 100 ? styleId - 100 : styleId;\n}\n\nfunction normalizeSurfaceRendererHexColor(value: unknown) {\n if (typeof value !== \"string\") {\n return null;\n }\n const trimmed = value.trim();\n if (!trimmed) {\n return null;\n }\n const normalized = trimmed.startsWith(\"#\") ? trimmed.slice(1) : trimmed;\n return /^[0-9a-f]{6}$/i.test(normalized) ? `#${normalized.toLowerCase()}` : null;\n}\n\nfunction hasExplicitSurfaceBaseColor(chart: XlsxChart) {\n const primarySeriesColor = normalizeSurfaceRendererHexColor(chart.series[0]?.color ?? chart.series[0]?.lineColor);\n if (!primarySeriesColor) {\n return null;\n }\n const paletteColor = normalizeSurfaceRendererHexColor(chart.chartColorPalette?.[0]);\n return paletteColor && paletteColor === primarySeriesColor ? null : primarySeriesColor;\n}\n\nfunction buildMonochromeSurfacePalette(baseColor: string, count: number) {\n if (count <= 3) {\n return [\n lightenColor(baseColor, 0.22),\n baseColor,\n darkenColor(baseColor, 0.2)\n ];\n }\n return [\n lightenColor(baseColor, 0.3),\n lightenColor(baseColor, 0.14),\n baseColor,\n darkenColor(baseColor, 0.1),\n darkenColor(baseColor, 0.22)\n ];\n}\n\nfunction getBuiltinSurfacePalette(chart: XlsxChart) {\n const normalized = normalizeBuiltinSurfaceStyleId(chart.chartStyleId);\n const explicitBaseColor = hasExplicitSurfaceBaseColor(chart);\n if (normalized === 26) {\n return buildMonochromeSurfacePalette(explicitBaseColor ?? \"#ff006e\", 3);\n }\n if (normalized === 34 && explicitBaseColor) {\n return buildMonochromeSurfacePalette(explicitBaseColor, 3);\n }\n if (normalized === 34 || (chart.wireframe === true && normalized == null)) {\n return [\"#5b9bd5\", \"#ed7d31\", \"#a5a5a5\"];\n }\n if (normalized === 35 || normalized === 36 || (chart.wireframe !== true && normalized == null)) {\n return [\"#2f5597\", \"#4472c4\", \"#5b9bd5\", \"#8faadc\", \"#d9e2f3\"];\n }\n return null;\n}\n\nfunction shouldPreferBuiltinSurfacePalette(chart: XlsxChart) {\n const normalized = normalizeBuiltinSurfaceStyleId(chart.chartStyleId);\n const rawChartType = chart.raw && typeof chart.raw === \"object\" && typeof (chart.raw as Record<string, unknown>).xmlChartType === \"string\"\n ? String((chart.raw as Record<string, unknown>).xmlChartType)\n : \"\";\n return (\n (rawChartType === \"surfaceChart\" || rawChartType === \"surface3DChart\")\n && (normalized === 26 || normalized === 34 || normalized === 35 || normalized === 36)\n );\n}\n\nfunction getSurfaceBandCount(chart: XlsxChart) {\n const raw = chart.raw && typeof chart.raw === \"object\" ? chart.raw as Record<string, unknown> : null;\n const explicitBandCount = typeof raw?.bandFormatCount === \"number\" && Number.isFinite(raw.bandFormatCount)\n ? raw.bandFormatCount\n : null;\n if (explicitBandCount != null && explicitBandCount > 0 && !(isContourSurfaceChart(chart) && chart.wireframe !== true)) {\n return explicitBandCount;\n }\n const builtinPalette = getBuiltinSurfacePalette(chart);\n if (shouldPreferBuiltinSurfacePalette(chart) && builtinPalette && builtinPalette.length > 0) {\n return builtinPalette.length;\n }\n if (chart.chartColorPalette && chart.chartColorPalette.length > 1) {\n return chart.chartColorPalette.length;\n }\n if (builtinPalette && builtinPalette.length > 0) {\n return builtinPalette.length;\n }\n return chart.wireframe ? 3 : 5;\n}\n\nfunction getSurfaceColorStops(chart: XlsxChart, palette: SurfacePalette) {\n const builtinPalette = getBuiltinSurfacePalette(chart);\n if (shouldPreferBuiltinSurfacePalette(chart) && builtinPalette && builtinPalette.length >= 2) {\n return builtinPalette;\n }\n const explicitStops = (chart.chartColorPalette ?? []).filter((value): value is string => typeof value === \"string\" && value.length > 0);\n if (explicitStops.length >= 2) {\n return explicitStops;\n }\n if (builtinPalette && builtinPalette.length >= 2) {\n return builtinPalette;\n }\n const baseColor = resolveSurfaceBaseColor(chart, palette);\n return [\n darkenColor(baseColor, 0.42),\n darkenColor(baseColor, 0.24),\n baseColor,\n lightenColor(baseColor, 0.18),\n lightenColor(baseColor, 0.34),\n lightenColor(baseColor, 0.5)\n ];\n}\n\nfunction getSurfaceDomain(chart: XlsxChart): SurfaceDomain | null {\n const numericValues = chart.series.flatMap((series) => (\n series.values\n .map((value) => safeNumber(value))\n .filter((value): value is number => value != null)\n ));\n if (numericValues.length === 0) {\n return null;\n }\n const explicitMin = typeof chart.valueAxis?.min === \"number\" && Number.isFinite(chart.valueAxis.min)\n ? chart.valueAxis.min\n : null;\n const explicitMax = typeof chart.valueAxis?.max === \"number\" && Number.isFinite(chart.valueAxis.max)\n ? chart.valueAxis.max\n : null;\n const rawMin = Math.min(...numericValues);\n const rawMax = Math.max(...numericValues);\n const bandCount = Math.max(1, getSurfaceBandCount(chart));\n const spanBase = Math.max(1e-6, rawMax - Math.min(0, rawMin));\n const roughStep = spanBase / bandCount;\n const magnitude = Math.pow(10, Math.floor(Math.log10(Math.max(roughStep, 1e-6))));\n const normalized = roughStep / magnitude;\n const niceStep = normalized <= 1 ? 1 : normalized <= 2 ? 2 : normalized <= 5 ? 5 : 10;\n const step = typeof chart.valueAxis?.majorUnit === \"number\" && chart.valueAxis.majorUnit > 0\n ? chart.valueAxis.majorUnit\n : niceStep * magnitude;\n const minValue = explicitMin ?? (rawMin >= 0 ? 0 : Math.floor(rawMin / step) * step);\n const maxValue = explicitMax ?? Math.ceil(rawMax / step) * step;\n const safeMax = maxValue <= minValue ? minValue + step : maxValue;\n const ticks: number[] = [];\n for (let current = minValue; current <= safeMax + step * 0.001; current += step) {\n ticks.push(Number(current.toFixed(8)));\n }\n return {\n maxValue,\n minValue,\n safeMax,\n ticks: [...new Set(ticks)].sort((left, right) => left - right)\n };\n}\n\nfunction resolveSurfaceColor(chart: XlsxChart, palette: SurfacePalette, ratio: number) {\n const stops = getSurfaceColorStops(chart, palette);\n if (stops.length === 0) {\n return resolveSurfaceBaseColor(chart, palette);\n }\n if (stops.length === 1) {\n return stops[0];\n }\n const clampedRatio = clamp(ratio, 0, 1) * (stops.length - 1);\n const lowerIndex = Math.floor(clampedRatio);\n const upperIndex = Math.min(stops.length - 1, lowerIndex + 1);\n const mixRatio = clampedRatio - lowerIndex;\n return mixRgbColor(stops[lowerIndex] ?? stops[0], stops[upperIndex] ?? stops[stops.length - 1], mixRatio);\n}\n\nfunction resolveSurfaceBandPaletteColor(chart: XlsxChart, palette: SurfacePalette, domain: SurfaceDomain, value: number) {\n const stops = getSurfaceColorStops(chart, palette);\n if (stops.length === 0) {\n return resolveSurfaceBaseColor(chart, palette);\n }\n const ticks = domain.ticks;\n for (let index = 0; index < ticks.length - 1; index += 1) {\n const end = ticks[index + 1] ?? domain.safeMax;\n if (value <= end || index === ticks.length - 2) {\n return stops[Math.min(stops.length - 1, Math.max(0, index))] ?? stops[stops.length - 1] ?? resolveSurfaceBaseColor(chart, palette);\n }\n }\n return stops[stops.length - 1] ?? resolveSurfaceBaseColor(chart, palette);\n}\n\nfunction resolveSurfaceBandColor(chart: XlsxChart, palette: SurfacePalette, domain: SurfaceDomain, value: number) {\n return resolveSurfaceBandPaletteColor(chart, palette, domain, value);\n}\n\nfunction getSurfaceWireframePalette(chart: XlsxChart, palette: SurfacePalette) {\n const raw = chart.raw && typeof chart.raw === \"object\" ? chart.raw as Record<string, unknown> : null;\n const explicit = Array.isArray(raw?.bandFormatLineColors)\n ? raw.bandFormatLineColors.filter((color): color is string => typeof color === \"string\" && color.length > 0)\n : [];\n if (explicit.length > 0) {\n return explicit;\n }\n return getSurfaceColorStops(chart, palette);\n}\n\nfunction resolveSurfaceWireframeColor(chart: XlsxChart, palette: SurfacePalette, domain: SurfaceDomain, value: number) {\n const stops = getSurfaceWireframePalette(chart, palette);\n if (stops.length === 0) {\n return resolveSurfaceBandPaletteColor(chart, palette, domain, value);\n }\n const ticks = domain.ticks;\n for (let index = 0; index < ticks.length - 1; index += 1) {\n const end = ticks[index + 1] ?? domain.safeMax;\n if (value <= end || index === ticks.length - 2) {\n return stops[Math.min(stops.length - 1, Math.max(0, index))] ?? resolveSurfaceBandPaletteColor(chart, palette, domain, value);\n }\n }\n return stops[stops.length - 1] ?? resolveSurfaceBandPaletteColor(chart, palette, domain, value);\n}\n\nfunction colorToRgba(color: string, alpha = 1) {\n const rgb = parseRgbColor(color);\n if (!rgb) {\n return [0.1, 0.1, 0.1, alpha] as const;\n }\n return [rgb.red / 255, rgb.green / 255, rgb.blue / 255, alpha] as const;\n}\n\nfunction shadeSurfaceColor(color: string, intensity: number) {\n const shaded = intensity >= 1\n ? lightenColor(color, clamp((intensity - 1) * 0.4, 0, 0.22))\n : darkenColor(color, clamp((1 - intensity) * 0.5, 0, 0.28));\n return colorToRgba(shaded, 1);\n}\n\nfunction bilinearInterpolate(p00: number, p10: number, p01: number, p11: number, u: number, v: number) {\n return (\n p00 * (1 - u) * (1 - v)\n + p10 * u * (1 - v)\n + p01 * (1 - u) * v\n + p11 * u * v\n );\n}\n\nfunction normalizeSurfaceX(column: number, cols: number) {\n return cols <= 1 ? 0 : ((column / (cols - 1)) - 0.5) * 2;\n}\n\nfunction normalizeSurfaceY(row: number, rows: number) {\n return rows <= 1 ? 0 : ((row / (rows - 1)) - 0.5) * 2;\n}\n\nfunction normalizeSurfaceZ(value: number, domain: SurfaceDomain, depthScale: number) {\n return -((((value - domain.minValue) / (domain.safeMax - domain.minValue)) - 0.5) * 1.8) * depthScale;\n}\n\nfunction projectCartesian3dPoint(\n x: number,\n y: number,\n z: number,\n rotXRad: number,\n rotYRad: number,\n usePerspective: boolean,\n perspectiveStrength: number\n) {\n const cosX = Math.cos(rotXRad);\n const sinX = Math.sin(rotXRad);\n const cosY = Math.cos(rotYRad);\n const sinY = Math.sin(rotYRad);\n const x1 = x * cosY + z * sinY;\n const z1 = -x * sinY + z * cosY;\n const y1 = y * cosX - z1 * sinX;\n const z2 = y * sinX + z1 * cosX;\n const perspective = usePerspective\n ? 1 / Math.max(0.18, 1 + z2 * (0.24 + perspectiveStrength * 0.5))\n : 1;\n return {\n depth: z2,\n x: x1 * perspective,\n y: y1 * perspective\n };\n}\n\nfunction computeNormal(left: SurfacePoint3D, middle: SurfacePoint3D, right: SurfacePoint3D) {\n const ux = middle.worldX - left.worldX;\n const uy = middle.worldY - left.worldY;\n const uz = middle.worldZ - left.worldZ;\n const vx = right.worldX - left.worldX;\n const vy = right.worldY - left.worldY;\n const vz = right.worldZ - left.worldZ;\n const nx = uy * vz - uz * vy;\n const ny = uz * vx - ux * vz;\n const nz = ux * vy - uy * vx;\n const length = Math.hypot(nx, ny, nz) || 1;\n return {\n x: nx / length,\n y: ny / length,\n z: nz / length\n };\n}\n\nfunction withProjectedDepth(point: SurfacePoint3D, depth: number): SurfacePoint3D {\n return {\n ...point,\n depth\n };\n}\n\nfunction nudgeProjectedDepth(point: SurfacePoint3D, delta: number): SurfacePoint3D {\n return {\n ...point,\n depth: point.depth + delta\n };\n}\n\nfunction isContourSurfaceChart(chart: XlsxChart) {\n const rawChartType = chart.raw && typeof chart.raw === \"object\" && typeof chart.raw.xmlChartType === \"string\"\n ? chart.raw.xmlChartType\n : \"\";\n if (rawChartType === \"surfaceChart\") {\n return true;\n }\n if (rawChartType === \"surface3DChart\") {\n return false;\n }\n return chart.chartType === \"Surface\" && chart.is3d !== true;\n}\n\nfunction buildSurfaceMesh(chart: XlsxChart, palette: SurfacePalette, layout: SurfaceLayout): SurfaceScene | null {\n const rows = chart.series.length;\n const cols = chart.series.reduce((max, series) => Math.max(max, series.values.length), 0);\n if (rows < 2 || cols < 2) {\n return null;\n }\n const matrix = chart.series.map((series) => (\n Array.from({ length: cols }, (_, columnIndex) => safeNumber(series.values[columnIndex]))\n ));\n const domain = getSurfaceDomain(chart);\n if (!domain) {\n return null;\n }\n const isContour = isContourSurfaceChart(chart);\n const isWireframe = chart.wireframe === true;\n const fillVertices: SurfaceVertex[] = [];\n const wallTriangles: SolidSurfaceTriangle[] = [];\n const contourLines: Array<{ color: string; from: SurfacePoint3D; to: SurfacePoint3D }> = [];\n const meshLines: Array<{ color: string; from: SurfacePoint3D; to: SurfacePoint3D }> = [];\n const stepsPerCell = isContour ? 12 : 24;\n const rotX = clamp(chart.view3d?.rotX ?? (isWireframe ? 85 : 25), -88, 88) * (Math.PI / 180);\n const rotY = clamp(chart.view3d?.rotY ?? (isWireframe ? 0 : 30), -88, 88) * (Math.PI / 180);\n const usePerspective = !isContour && chart.view3d?.rAngAx === false;\n const perspectiveStrength = clamp((chart.view3d?.perspective ?? (usePerspective ? 30 : 0)) / 100, 0, 1);\n const depthScale = isContour ? 1 : clamp((chart.view3d?.depthPercent ?? 100) / 100, 0.2, 4);\n const usesFlatMaterial = chart.surfaceMaterial === \"flat\";\n const wallLineColor = chart.backWall?.lineColor ?? chart.sideWall?.lineColor ?? chart.floor?.lineColor ?? chart.axisLineColor ?? \"#a6a6a6\";\n const backWallFill = chart.backWall?.fillColor ?? \"#d9d9df\";\n const sideWallFill = chart.sideWall?.fillColor ?? \"#d5d7dc\";\n const floorFill = chart.floor?.fillColor ?? \"#d0d2d8\";\n const projectPoint = (column: number, row: number, value: number): SurfacePoint3D => {\n const worldX = normalizeSurfaceX(column, cols);\n if (isContour) {\n return {\n depth: 0,\n worldX,\n worldY: normalizeSurfaceY(row, rows),\n worldZ: 0,\n x: worldX,\n y: normalizeSurfaceY(row, rows)\n };\n }\n const worldY = normalizeSurfaceZ(value, domain, depthScale);\n const worldZ = normalizeSurfaceY(row, rows);\n const projected = projectCartesian3dPoint(worldX, worldY, worldZ, rotX, rotY, usePerspective, perspectiveStrength);\n return {\n depth: projected.depth,\n worldX,\n worldY,\n worldZ,\n x: projected.x,\n y: projected.y\n };\n };\n const addWallQuad = (a: SurfacePoint3D, b: SurfacePoint3D, c: SurfacePoint3D, d: SurfacePoint3D, color: string) => {\n wallTriangles.push(\n { color, points: [a, b, c] },\n { color, points: [a, c, d] }\n );\n };\n const addMeshLine = (from: SurfacePoint3D, to: SurfacePoint3D, color: string) => {\n meshLines.push({ color, from, to });\n };\n\n for (let rowIndex = 0; rowIndex < rows - 1; rowIndex += 1) {\n for (let columnIndex = 0; columnIndex < cols - 1; columnIndex += 1) {\n const p00 = matrix[rowIndex]?.[columnIndex];\n const p10 = matrix[rowIndex]?.[columnIndex + 1];\n const p01 = matrix[rowIndex + 1]?.[columnIndex];\n const p11 = matrix[rowIndex + 1]?.[columnIndex + 1];\n if (p00 == null || p10 == null || p01 == null || p11 == null) {\n continue;\n }\n for (let stepRow = 0; stepRow < stepsPerCell; stepRow += 1) {\n for (let stepColumn = 0; stepColumn < stepsPerCell; stepColumn += 1) {\n const u0 = stepColumn / stepsPerCell;\n const u1 = (stepColumn + 1) / stepsPerCell;\n const v0 = stepRow / stepsPerCell;\n const v1 = (stepRow + 1) / stepsPerCell;\n const sample = (u: number, v: number) => {\n const value = bilinearInterpolate(p00, p10, p01, p11, u, v);\n return {\n bandColor: resolveSurfaceBandColor(chart, palette, domain, value),\n point: isContour\n ? withProjectedDepth(projectPoint(columnIndex + u, rowIndex + v, value), isWireframe ? 0.12 : 0.08)\n : projectPoint(columnIndex + u, rowIndex + v, value),\n value\n };\n };\n const a = sample(u0, v0);\n const b = sample(u1, v0);\n const c = sample(u1, v1);\n const d = sample(u0, v1);\n if (!isWireframe) {\n const avg1 = (a.value + b.value + c.value) / 3;\n const avg2 = (a.value + c.value + d.value) / 3;\n fillVertices.push(\n { ...a, bandColor: resolveSurfaceBandColor(chart, palette, domain, avg1) },\n { ...b, bandColor: resolveSurfaceBandColor(chart, palette, domain, avg1) },\n { ...c, bandColor: resolveSurfaceBandColor(chart, palette, domain, avg1) },\n { ...a, bandColor: resolveSurfaceBandColor(chart, palette, domain, avg2) },\n { ...c, bandColor: resolveSurfaceBandColor(chart, palette, domain, avg2) },\n { ...d, bandColor: resolveSurfaceBandColor(chart, palette, domain, avg2) }\n );\n }\n }\n }\n\n const thresholds = domain.ticks.slice(1, -1);\n if (isContour && isWireframe) {\n const corners = [\n { value: p00, x: columnIndex, y: rowIndex },\n { value: p10, x: columnIndex + 1, y: rowIndex },\n { value: p11, x: columnIndex + 1, y: rowIndex + 1 },\n { value: p01, x: columnIndex, y: rowIndex + 1 }\n ];\n const edges: Array<[typeof corners[number], typeof corners[number]]> = [\n [corners[0], corners[1]],\n [corners[1], corners[2]],\n [corners[2], corners[3]],\n [corners[3], corners[0]]\n ];\n thresholds.forEach((threshold) => {\n const intersections: Array<{ x: number; y: number }> = [];\n edges.forEach(([start, end]) => {\n const delta = end.value - start.value;\n if (delta === 0) {\n return;\n }\n const crosses = (start.value < threshold && end.value > threshold) || (start.value > threshold && end.value < threshold);\n if (!crosses) {\n return;\n }\n const ratio = (threshold - start.value) / delta;\n intersections.push({\n x: start.x + (end.x - start.x) * ratio,\n y: start.y + (end.y - start.y) * ratio\n });\n });\n if (intersections.length === 2) {\n contourLines.push({\n color: darkenColor(resolveSurfaceBandColor(chart, palette, domain, threshold), 0.22),\n from: withProjectedDepth(projectPoint(intersections[0]?.x ?? columnIndex, intersections[0]?.y ?? rowIndex, threshold), 0.18),\n to: withProjectedDepth(projectPoint(intersections[1]?.x ?? columnIndex + 1, intersections[1]?.y ?? rowIndex + 1, threshold), 0.18)\n });\n } else if (intersections.length === 4) {\n const center = (p00 + p10 + p01 + p11) / 4;\n const pairings = center >= threshold\n ? [[0, 1], [2, 3]]\n : [[0, 3], [1, 2]];\n pairings.forEach(([leftIndex, rightIndex]) => {\n const leftPoint = intersections[leftIndex] ?? intersections[0];\n const rightPoint = intersections[rightIndex] ?? intersections[intersections.length - 1];\n if (!leftPoint || !rightPoint) {\n return;\n }\n contourLines.push({\n color: darkenColor(resolveSurfaceBandColor(chart, palette, domain, threshold), 0.22),\n from: withProjectedDepth(projectPoint(leftPoint.x, leftPoint.y, threshold), 0.18),\n to: withProjectedDepth(projectPoint(rightPoint.x, rightPoint.y, threshold), 0.18)\n });\n });\n }\n });\n } else if (!isContour) {\n const corners = [\n { value: p00, x: columnIndex, y: rowIndex },\n { value: p10, x: columnIndex + 1, y: rowIndex },\n { value: p11, x: columnIndex + 1, y: rowIndex + 1 },\n { value: p01, x: columnIndex, y: rowIndex + 1 }\n ];\n const edges: Array<[typeof corners[number], typeof corners[number]]> = [\n [corners[0], corners[1]],\n [corners[1], corners[2]],\n [corners[2], corners[3]],\n [corners[3], corners[0]]\n ];\n thresholds.forEach((threshold) => {\n const intersections: Array<{ x: number; y: number }> = [];\n edges.forEach(([start, end]) => {\n const delta = end.value - start.value;\n if (delta === 0) {\n return;\n }\n const crosses = (start.value < threshold && end.value > threshold) || (start.value > threshold && end.value < threshold);\n if (!crosses) {\n return;\n }\n const ratio = (threshold - start.value) / delta;\n intersections.push({\n x: start.x + (end.x - start.x) * ratio,\n y: start.y + (end.y - start.y) * ratio\n });\n });\n if (intersections.length === 2) {\n contourLines.push({\n color: darkenColor(resolveSurfaceBandPaletteColor(chart, palette, domain, threshold), 0.26),\n from: projectPoint(intersections[0]?.x ?? columnIndex, intersections[0]?.y ?? rowIndex, threshold),\n to: projectPoint(intersections[1]?.x ?? columnIndex + 1, intersections[1]?.y ?? rowIndex + 1, threshold)\n });\n } else if (intersections.length === 4) {\n const center = (p00 + p10 + p01 + p11) / 4;\n const pairings = center >= threshold\n ? [[0, 1], [2, 3]]\n : [[0, 3], [1, 2]];\n pairings.forEach(([leftIndex, rightIndex]) => {\n const leftPoint = intersections[leftIndex] ?? intersections[0];\n const rightPoint = intersections[rightIndex] ?? intersections[intersections.length - 1];\n if (!leftPoint || !rightPoint) {\n return;\n }\n contourLines.push({\n color: darkenColor(resolveSurfaceBandPaletteColor(chart, palette, domain, threshold), 0.26),\n from: projectPoint(leftPoint.x, leftPoint.y, threshold),\n to: projectPoint(rightPoint.x, rightPoint.y, threshold)\n });\n });\n }\n });\n }\n }\n }\n\n const columnSkip = Math.max(1, chart.categoryAxis?.tickMarkSkip ?? 1);\n const rowSkip = Math.max(1, chart.seriesAxis?.tickMarkSkip ?? 1);\n if (isContour) {\n const topLeft = withProjectedDepth(projectPoint(0, 0, domain.minValue), -0.12);\n const topRight = withProjectedDepth(projectPoint(cols - 1, 0, domain.minValue), -0.12);\n const bottomRight = withProjectedDepth(projectPoint(cols - 1, rows - 1, domain.minValue), -0.12);\n const bottomLeft = withProjectedDepth(projectPoint(0, rows - 1, domain.minValue), -0.12);\n if (chart.backWall?.hidden !== true && backWallFill !== \"transparent\") {\n addWallQuad(topLeft, topRight, bottomRight, bottomLeft, backWallFill);\n }\n for (let columnIndex = 0; columnIndex < cols; columnIndex += columnSkip) {\n addMeshLine(\n withProjectedDepth(projectPoint(columnIndex, 0, domain.minValue), 0.04),\n withProjectedDepth(projectPoint(columnIndex, rows - 1, domain.minValue), 0.04),\n wallLineColor\n );\n }\n for (let rowIndex = 0; rowIndex < rows; rowIndex += rowSkip) {\n addMeshLine(\n withProjectedDepth(projectPoint(0, rowIndex, domain.minValue), 0.04),\n withProjectedDepth(projectPoint(cols - 1, rowIndex, domain.minValue), 0.04),\n wallLineColor\n );\n }\n } else {\n const minPlaneValue = domain.minValue;\n const wallDepthOffset = -0.2;\n if (chart.floor?.hidden !== true && floorFill !== \"transparent\") {\n addWallQuad(\n nudgeProjectedDepth(projectPoint(0, 0, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, 0, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, rows - 1, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(0, rows - 1, minPlaneValue), wallDepthOffset),\n floorFill\n );\n }\n if (chart.backWall?.hidden !== true && backWallFill !== \"transparent\") {\n addWallQuad(\n nudgeProjectedDepth(projectPoint(0, 0, domain.safeMax), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, 0, domain.safeMax), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, 0, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(0, 0, minPlaneValue), wallDepthOffset),\n backWallFill\n );\n }\n if (chart.sideWall?.hidden !== true && sideWallFill !== \"transparent\") {\n addWallQuad(\n nudgeProjectedDepth(projectPoint(cols - 1, 0, domain.safeMax), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, rows - 1, domain.safeMax), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, rows - 1, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, 0, minPlaneValue), wallDepthOffset),\n sideWallFill\n );\n }\n for (const tick of domain.ticks) {\n if (chart.backWall?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(0, 0, tick), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(cols - 1, 0, tick), wallDepthOffset * 0.75), wallLineColor);\n }\n if (chart.sideWall?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(cols - 1, 0, tick), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(cols - 1, rows - 1, tick), wallDepthOffset * 0.75), wallLineColor);\n }\n }\n for (let columnIndex = 0; columnIndex < cols; columnIndex += columnSkip) {\n if (chart.floor?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(columnIndex, 0, minPlaneValue), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(columnIndex, rows - 1, minPlaneValue), wallDepthOffset * 0.75), wallLineColor);\n }\n if (chart.backWall?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(columnIndex, 0, minPlaneValue), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(columnIndex, 0, domain.safeMax), wallDepthOffset * 0.75), wallLineColor);\n }\n }\n for (let rowIndex = 0; rowIndex < rows; rowIndex += rowSkip) {\n if (chart.floor?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(0, rowIndex, minPlaneValue), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(cols - 1, rowIndex, minPlaneValue), wallDepthOffset * 0.75), wallLineColor);\n }\n if (chart.sideWall?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(cols - 1, rowIndex, minPlaneValue), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(cols - 1, rowIndex, domain.safeMax), wallDepthOffset * 0.75), wallLineColor);\n }\n }\n }\n\n if (!isContour && isWireframe) {\n const addWireMeshLine = (\n fromColumn: number,\n fromRow: number,\n toColumn: number,\n toRow: number,\n fromValue: number,\n toValue: number,\n color: string\n ) => {\n const averageValue = (fromValue + toValue) * 0.5;\n addMeshLine(\n projectPoint(fromColumn, fromRow, fromValue),\n projectPoint(toColumn, toRow, toValue),\n color || resolveSurfaceWireframeColor(chart, palette, domain, averageValue)\n );\n };\n for (let rowIndex = 0; rowIndex < rows; rowIndex += 1) {\n const rowValues = matrix[rowIndex]?.filter((value): value is number => value != null) ?? [];\n const rowAverage = rowValues.length > 0\n ? rowValues.reduce((sum, value) => sum + value, 0) / rowValues.length\n : domain.minValue;\n const rowColor = chart.series[rowIndex]?.lineColor\n ?? chart.series[rowIndex]?.color\n ?? resolveSurfaceWireframeColor(chart, palette, domain, rowAverage);\n for (let columnIndex = 0; columnIndex < cols - 1; columnIndex += 1) {\n const left = matrix[rowIndex]?.[columnIndex];\n const right = matrix[rowIndex]?.[columnIndex + 1];\n if (left == null || right == null) {\n continue;\n }\n for (let step = 0; step < stepsPerCell; step += 1) {\n const u0 = step / stepsPerCell;\n const u1 = (step + 1) / stepsPerCell;\n const fromColumn = columnIndex + u0;\n const toColumn = columnIndex + u1;\n const fromValue = left + (right - left) * u0;\n const toValue = left + (right - left) * u1;\n addWireMeshLine(fromColumn, rowIndex, toColumn, rowIndex, fromValue, toValue, rowColor);\n }\n }\n }\n for (let columnIndex = 0; columnIndex < cols; columnIndex += 1) {\n const columnValues = Array.from({ length: rows }, (_, rowIndex) => matrix[rowIndex]?.[columnIndex])\n .filter((value): value is number => value != null);\n const columnAverage = columnValues.length > 0\n ? columnValues.reduce((sum, value) => sum + value, 0) / columnValues.length\n : domain.minValue;\n const columnColor = resolveSurfaceWireframeColor(chart, palette, domain, columnAverage);\n for (let rowIndex = 0; rowIndex < rows - 1; rowIndex += 1) {\n const top = matrix[rowIndex]?.[columnIndex];\n const bottom = matrix[rowIndex + 1]?.[columnIndex];\n if (top == null || bottom == null) {\n continue;\n }\n for (let step = 0; step < stepsPerCell; step += 1) {\n const v0 = step / stepsPerCell;\n const v1 = (step + 1) / stepsPerCell;\n const fromRow = rowIndex + v0;\n const toRow = rowIndex + v1;\n const fromValue = top + (bottom - top) * v0;\n const toValue = top + (bottom - top) * v1;\n addWireMeshLine(columnIndex, fromRow, columnIndex, toRow, fromValue, toValue, columnColor);\n }\n }\n }\n }\n\n const allPoints = [\n ...fillVertices.map((vertex) => vertex.point),\n ...wallTriangles.flatMap((triangle) => triangle.points),\n ...meshLines.flatMap((line) => [line.from, line.to]),\n ...contourLines.flatMap((line) => [line.from, line.to])\n ];\n if (allPoints.length === 0) {\n return null;\n }\n\n const minX = Math.min(...allPoints.map((point) => point.x));\n const maxX = Math.max(...allPoints.map((point) => point.x));\n const minY = Math.min(...allPoints.map((point) => point.y));\n const maxY = Math.max(...allPoints.map((point) => point.y));\n const minDepth = Math.min(...allPoints.map((point) => point.depth));\n const maxDepth = Math.max(...allPoints.map((point) => point.depth));\n const scale = Math.min(\n layout.plot.width / Math.max(0.25, maxX - minX),\n layout.plot.height / Math.max(0.25, maxY - minY)\n ) * 0.82;\n const centerX = layout.plot.left + layout.plot.width / 2;\n const centerY = layout.plot.top + layout.plot.height / 2;\n const centerRawX = (minX + maxX) / 2;\n const centerRawY = (minY + maxY) / 2;\n const toScreenX = (x: number) => centerX + (x - centerRawX) * scale;\n const toScreenY = (y: number) => centerY + (y - centerRawY) * scale;\n const toClipPoint = (point: SurfacePoint3D) => {\n const screenX = toScreenX(point.x);\n const screenY = toScreenY(point.y);\n return {\n x: (screenX / layout.width) * 2 - 1,\n y: 1 - (screenY / layout.height) * 2,\n z: clamp(((point.depth - minDepth) / Math.max(1e-6, maxDepth - minDepth)) * 2 - 1, -1, 1)\n };\n };\n\n const fillPositions: number[] = [];\n const fillColors: number[] = [];\n const wallPositions: number[] = [];\n const wallColors: number[] = [];\n for (const triangle of wallTriangles) {\n const rgba = colorToRgba(triangle.color, 1);\n for (const point of triangle.points) {\n const clip = toClipPoint(point);\n wallPositions.push(clip.x, clip.y, clip.z);\n wallColors.push(rgba[0], rgba[1], rgba[2], rgba[3] * 0.92);\n }\n }\n for (let index = 0; index < fillVertices.length; index += 3) {\n const left = fillVertices[index];\n const middle = fillVertices[index + 1];\n const right = fillVertices[index + 2];\n if (!left || !middle || !right) {\n continue;\n }\n const normal = computeNormal(left.point, middle.point, right.point);\n const lightDirection = { x: -0.32, y: 0.84, z: 0.44 };\n const rawLight = normal.x * lightDirection.x + normal.y * lightDirection.y + normal.z * lightDirection.z;\n const shaded = usesFlatMaterial\n ? colorToRgba(left.bandColor, 1)\n : shadeSurfaceColor(left.bandColor, clamp(0.8 + rawLight * 0.28, 0.52, 1.08));\n [left, middle, right].forEach((vertex) => {\n const clip = toClipPoint(vertex.point);\n fillPositions.push(clip.x, clip.y, clip.z);\n fillColors.push(shaded[0], shaded[1], shaded[2], shaded[3]);\n });\n }\n\n const linePositions: number[] = [];\n const lineColors: number[] = [];\n meshLines.forEach((line) => {\n const from = toClipPoint(line.from);\n const to = toClipPoint(line.to);\n const rgba = colorToRgba(line.color, 1);\n linePositions.push(from.x, from.y, from.z, to.x, to.y, to.z);\n lineColors.push(rgba[0], rgba[1], rgba[2], rgba[3], rgba[0], rgba[1], rgba[2], rgba[3]);\n });\n contourLines.forEach((line) => {\n const from = toClipPoint(line.from);\n const to = toClipPoint(line.to);\n const rgba = colorToRgba(line.color, 1);\n linePositions.push(from.x, from.y, from.z, to.x, to.y, to.z);\n lineColors.push(rgba[0], rgba[1], rgba[2], rgba[3], rgba[0], rgba[1], rgba[2], rgba[3]);\n });\n\n return {\n fillColors: new Float32Array(fillColors),\n fillPositions: new Float32Array(fillPositions),\n lineColors: new Float32Array(lineColors),\n linePositions: new Float32Array(linePositions),\n wallColors: new Float32Array(wallColors),\n wallPositions: new Float32Array(wallPositions)\n };\n}\n\nexport const MemoSurfaceChartComposite = React.memo(function MemoSurfaceChartComposite({\n background,\n borderColor,\n chart,\n fontFamily,\n layout,\n onDoubleClick,\n onPointerDown,\n overlay,\n palette,\n fallback\n}: SurfaceCompositeProps) {\n const canvasRef = React.useRef<HTMLCanvasElement | null>(null);\n const [ready, setReady] = React.useState(false);\n const [failed, setFailed] = React.useState(false);\n const isContour = isContourSurfaceChart(chart);\n\n React.useEffect(() => {\n if (isContour) {\n setReady(false);\n setFailed(false);\n return;\n }\n const canvas = canvasRef.current;\n if (!canvas) {\n return;\n }\n let cancelled = false;\n let reglInstance: ReturnType<typeof createREGL> | null = null;\n\n const drawSurface = () => {\n try {\n const scene = buildSurfaceMesh(chart, palette, layout);\n if (!scene) {\n if (!cancelled) {\n setFailed(true);\n setReady(false);\n }\n return;\n }\n const dpr = window.devicePixelRatio || 1;\n canvas.width = Math.max(1, Math.round(layout.width * dpr));\n canvas.height = Math.max(1, Math.round(layout.height * dpr));\n reglInstance = createREGL({\n attributes: {\n alpha: true,\n antialias: true,\n depth: true,\n premultipliedAlpha: true\n },\n canvas\n });\n const fillCommand = scene.fillPositions.length > 0\n ? reglInstance({\n attributes: {\n color: scene.fillColors,\n position: scene.fillPositions\n },\n blend: {\n enable: true,\n func: {\n dstRGB: \"one minus src alpha\",\n dstAlpha: \"one minus src alpha\",\n srcRGB: \"src alpha\",\n srcAlpha: \"src alpha\"\n }\n },\n count: scene.fillPositions.length / 3,\n depth: {\n enable: true\n },\n frag: `\n precision mediump float;\n varying vec4 vColor;\n void main() {\n gl_FragColor = vColor;\n }\n `,\n primitive: \"triangles\",\n vert: `\n precision mediump float;\n attribute vec3 position;\n attribute vec4 color;\n varying vec4 vColor;\n void main() {\n gl_Position = vec4(position, 1.0);\n vColor = color;\n }\n `\n })\n : null;\n const wallCommand = scene.wallPositions.length > 0\n ? reglInstance({\n attributes: {\n color: scene.wallColors,\n position: scene.wallPositions\n },\n blend: {\n enable: true,\n func: {\n dstRGB: \"one minus src alpha\",\n dstAlpha: \"one minus src alpha\",\n srcRGB: \"src alpha\",\n srcAlpha: \"src alpha\"\n }\n },\n count: scene.wallPositions.length / 3,\n depth: {\n enable: false\n },\n frag: `\n precision mediump float;\n varying vec4 vColor;\n void main() {\n gl_FragColor = vColor;\n }\n `,\n primitive: \"triangles\",\n vert: `\n precision mediump float;\n attribute vec3 position;\n attribute vec4 color;\n varying vec4 vColor;\n void main() {\n gl_Position = vec4(position, 1.0);\n vColor = color;\n }\n `\n })\n : null;\n const lineCommand = scene.linePositions.length > 0\n ? reglInstance({\n attributes: {\n color: scene.lineColors,\n position: scene.linePositions\n },\n blend: {\n enable: true,\n func: {\n dstRGB: \"one minus src alpha\",\n dstAlpha: \"one minus src alpha\",\n srcRGB: \"src alpha\",\n srcAlpha: \"src alpha\"\n }\n },\n count: scene.linePositions.length / 3,\n depth: {\n enable: false\n },\n frag: `\n precision mediump float;\n varying vec4 vColor;\n void main() {\n gl_FragColor = vColor;\n }\n `,\n lineWidth: 1,\n primitive: \"lines\",\n vert: `\n precision mediump float;\n attribute vec3 position;\n attribute vec4 color;\n varying vec4 vColor;\n void main() {\n gl_Position = vec4(position, 1.0);\n vColor = color;\n }\n `\n })\n : null;\n\n reglInstance.clear({ color: [0, 0, 0, 0], depth: 1 });\n wallCommand?.();\n fillCommand?.();\n lineCommand?.();\n if (!cancelled) {\n setReady(true);\n setFailed(false);\n }\n } catch {\n if (!cancelled) {\n setReady(false);\n setFailed(true);\n }\n }\n };\n\n setReady(false);\n setFailed(false);\n drawSurface();\n\n return () => {\n cancelled = true;\n reglInstance?.destroy();\n };\n }, [\n chart,\n isContour,\n layout,\n palette\n ]);\n\n const shouldRenderFallback = isContour || failed || !ready;\n\n return (\n <div\n aria-label={chart.title ?? chart.name ?? \"Chart\"}\n role=\"img\"\n style={{\n background,\n border: borderColor.trim().toLowerCase() === \"transparent\" ? \"none\" : `1px solid ${borderColor}`,\n boxSizing: \"border-box\",\n fontFamily,\n height: \"100%\",\n overflow: \"hidden\",\n pointerEvents: \"auto\",\n position: \"relative\",\n width: \"100%\"\n }}\n >\n <canvas\n ref={canvasRef}\n style={{\n display: shouldRenderFallback ? \"none\" : \"block\",\n height: \"100%\",\n inset: 0,\n position: \"absolute\",\n width: \"100%\"\n }}\n />\n <svg\n onDoubleClick={onDoubleClick}\n onPointerDown={onPointerDown}\n style={{ display: \"block\", height: \"100%\", inset: 0, position: \"absolute\", width: \"100%\" }}\n viewBox={`0 0 ${layout.width} ${layout.height}`}\n >\n {shouldRenderFallback ? fallback : null}\n {overlay}\n </svg>\n </div>\n );\n}, (prev, next) => (\n prev.chart === next.chart\n && prev.palette === next.palette\n && prev.background === next.background\n && prev.borderColor === next.borderColor\n && prev.fontFamily === next.fontFamily\n && prev.onDoubleClick === next.onDoubleClick\n && prev.onPointerDown === next.onPointerDown\n && prev.layout.width === next.layout.width\n && prev.layout.height === next.layout.height\n && prev.layout.plot.left === next.layout.plot.left\n && prev.layout.plot.top === next.layout.plot.top\n && prev.layout.plot.width === next.layout.plot.width\n && prev.layout.plot.height === next.layout.plot.height\n && prev.overlay === next.overlay\n && prev.fallback === next.fallback\n));\n","// @ts-nocheck -- vendored from @extend-ai/react-xlsx, which compiles without\n// noUncheckedIndexedAccess/exactOptionalPropertyTypes. Keep edits minimal so\n// this file stays diffable against the react-xlsx source of truth.\nimport { hierarchy as d3Hierarchy, partition as d3Partition, treemap as d3Treemap, treemapBinary, treemapDice, treemapSquarify } from \"d3-hierarchy\";\nimport { geoIdentity, geoMercator, geoNaturalEarth1, geoPath } from \"d3-geo\";\nimport * as React from \"react\";\nimport { scaleBand, scaleLinear, scalePoint } from \"d3-scale\";\nimport {\n arc as d3Arc,\n area as d3Area,\n curveCatmullRom,\n curveLinear,\n curveLinearClosed,\n line as d3Line,\n pie as d3Pie,\n symbol as d3Symbol,\n symbolCircle,\n symbolCross,\n symbolDiamond,\n symbolSquare,\n symbolStar,\n symbolTriangle\n} from \"d3-shape\";\nimport type { CurveFactory } from \"d3-shape\";\nimport { MemoSurfaceChartComposite } from \"./surface-regl\";\nimport {\n getRegionMapAtlas,\n normalizeRegionMapKey,\n REGION_MAP_COUNTRY_ALIASES,\n REGION_MAP_US_STATE_ALIASES,\n type RegionMapFeature\n} from \"./region-map-data\";\nimport type { HierarchyNode, HierarchyRectangularNode } from \"d3-hierarchy\";\nimport type { Feature, FeatureCollection, Geometry } from \"geojson\";\nimport type { XlsxChart, XlsxChartAxis, XlsxChartElementSelection, XlsxChartSeries, XlsxChartTypeGroup, XlsxImageRect } from \"./chart-types\";\n\ntype ChartRendererPalette = {\n border: string;\n mutedText: string;\n surface: string;\n text: string;\n};\n\ntype ChartSvgProps = {\n chart: XlsxChart;\n onChartElementDoubleClick?: (selection: XlsxChartElementSelection, event: React.MouseEvent<SVGSVGElement>) => void;\n onChartElementPointerDown?: (selection: XlsxChartElementSelection, event: React.PointerEvent<SVGSVGElement>) => void;\n palette: ChartRendererPalette;\n rect: XlsxImageRect;\n selectedChartElement?: XlsxChartElementSelection | null;\n};\n\ntype LegendItem = {\n color: string;\n label: string;\n};\n\ntype PlotRect = {\n height: number;\n left: number;\n top: number;\n width: number;\n};\n\ntype ChartLayout = {\n height: number;\n legendItems: LegendItem[];\n legendPosition: string | undefined;\n plot: PlotRect;\n titleHeight: number;\n width: number;\n};\n\ntype BarRect = {\n capEnd?: boolean;\n capStart?: boolean;\n categoryIndex: number;\n bottomScale?: number;\n color: string;\n depthOrder?: number;\n depthOffsetX?: number;\n depthOffsetY?: number;\n depthX?: number;\n depthY?: number;\n gradientId?: string;\n height: number;\n invertedNegative?: boolean;\n isHorizontal: boolean;\n key: string;\n left: number;\n shape3d?: string;\n seriesIndex: number;\n stroke: string;\n strokeWidth: number;\n topScale?: number;\n value: number;\n width: number;\n top: number;\n};\n\ntype ChartElementDataOptions = {\n selectionMode?: \"seriesFirst\";\n};\n\nfunction chartElementDataProps(seriesIndex: number, pointIndex?: number, options?: ChartElementDataOptions) {\n return {\n \"data-xlsx-chart-point-index\": typeof pointIndex === \"number\" ? String(pointIndex) : undefined,\n \"data-xlsx-chart-selection-mode\": options?.selectionMode,\n \"data-xlsx-chart-series-index\": String(seriesIndex),\n style: {\n cursor: \"pointer\",\n pointerEvents: \"all\"\n } as React.CSSProperties\n };\n}\n\nfunction barChartElementDataProps(seriesIndex: number, pointIndex: number) {\n return chartElementDataProps(seriesIndex, pointIndex, { selectionMode: \"seriesFirst\" });\n}\n\nfunction resolveChartElementTarget(target: EventTarget | null) {\n if (!(target instanceof Element)) {\n return null;\n }\n\n return target.closest(\"[data-xlsx-chart-series-index]\") as HTMLElement | SVGElement | null;\n}\n\nfunction resolveChartSelectionFromTarget(\n chart: XlsxChart,\n target: EventTarget | null,\n selectedChartElement: XlsxChartElementSelection | null | undefined\n): XlsxChartElementSelection | null {\n const element = resolveChartElementTarget(target);\n if (!element) {\n return selectedChartElement?.chartId === chart.id\n ? { chartId: chart.id, kind: \"chart\" }\n : { chartId: chart.id, kind: \"chart\" };\n }\n\n const seriesIndex = Number(element.dataset.xlsxChartSeriesIndex);\n if (!Number.isInteger(seriesIndex) || seriesIndex < 0 || seriesIndex >= chart.series.length) {\n return null;\n }\n\n const series = chart.series[seriesIndex];\n if (!series) {\n return null;\n }\n\n const rawPointIndex = element.dataset.xlsxChartPointIndex;\n const rawElementKind = element.dataset.xlsxChartElementKind;\n const selectionMode = element.dataset.xlsxChartSelectionMode;\n const pointIndex = rawPointIndex == null || rawPointIndex === \"\" ? null : Number(rawPointIndex);\n const hasPoint = pointIndex != null && Number.isInteger(pointIndex) && pointIndex >= 0;\n const sameSelectedSeries = selectedChartElement?.chartId === chart.id\n && selectedChartElement.kind !== \"chart\"\n && selectedChartElement.seriesIndex === seriesIndex;\n if (hasPoint && (selectionMode !== \"seriesFirst\" || sameSelectedSeries)) {\n return {\n chartId: chart.id,\n kind: \"point\",\n pointIndex,\n seriesId: series.id,\n seriesIndex\n };\n }\n\n return {\n chartId: chart.id,\n kind: rawElementKind === \"legendEntry\" ? \"legendEntry\" : \"series\",\n seriesId: series.id,\n seriesIndex\n };\n}\n\nfunction isSelectedChartSeries(\n selectedChartElement: XlsxChartElementSelection | null | undefined,\n chartId: string,\n seriesIndex: number\n) {\n return selectedChartElement?.chartId === chartId\n && selectedChartElement.kind !== \"chart\"\n && selectedChartElement.seriesIndex === seriesIndex;\n}\n\nfunction isSelectedChartPoint(\n selectedChartElement: XlsxChartElementSelection | null | undefined,\n chartId: string,\n seriesIndex: number,\n pointIndex: number\n) {\n return selectedChartElement?.chartId === chartId\n && selectedChartElement.kind === \"point\"\n && selectedChartElement.seriesIndex === seriesIndex\n && selectedChartElement.pointIndex === pointIndex;\n}\n\nfunction isSelectedChartPointOrSeries(\n selectedChartElement: XlsxChartElementSelection | null | undefined,\n chartId: string,\n seriesIndex: number,\n pointIndex: number\n) {\n return isSelectedChartPoint(selectedChartElement, chartId, seriesIndex, pointIndex)\n || (\n isSelectedChartSeries(selectedChartElement, chartId, seriesIndex)\n && selectedChartElement?.kind !== \"point\"\n );\n}\n\nfunction renderSelectionRectHandles(\n key: string,\n left: number,\n top: number,\n width: number,\n height: number,\n color = \"#64748b\"\n) {\n return renderSelectionPointHandles(\n key,\n [\n { x: left, y: top },\n { x: left + width, y: top },\n { x: left, y: top + height },\n { x: left + width, y: top + height }\n ],\n color\n );\n}\n\nfunction renderSelectionPointHandles(\n key: string,\n points: Array<{ x: number; y: number }>,\n color = \"#64748b\"\n) {\n const radius = 3;\n\n return (\n <g key={key} pointerEvents=\"none\">\n {points.map((point, index) => (\n <circle\n cx={point.x}\n cy={point.y}\n fill=\"#ffffff\"\n key={`${key}-handle-${index}`}\n r={radius}\n stroke={color}\n strokeWidth={1.1}\n style={{ filter: \"drop-shadow(0 1px 2px rgba(15, 23, 42, 0.18))\" }}\n vectorEffect=\"non-scaling-stroke\"\n />\n ))}\n </g>\n );\n}\n\ntype ChartHierarchyDatum = {\n children?: ChartHierarchyDatum[];\n colorIndex?: number;\n name: string;\n value?: number;\n};\n\ntype ComboRenderableGroup = {\n axisIds: number[];\n categoryAxis: XlsxChartAxis | null;\n chartType: string;\n gapWidth?: number;\n is3d?: boolean;\n raw?: Record<string, unknown>;\n series: XlsxChartSeries[];\n valueAxis: XlsxChartAxis | null;\n};\n\ntype ChartStage = {\n color: string;\n isSubtotal: boolean;\n label: string;\n value: number;\n};\n\ntype BoxWhiskerStats = {\n lowerFence: number;\n lowerWhisker: number;\n max: number;\n mean: number;\n median: number;\n min: number;\n outliers: number[];\n q1: number;\n q3: number;\n upperFence: number;\n upperWhisker: number;\n visiblePoints: number[];\n};\n\ntype SurfaceDomain = {\n maxValue: number;\n minValue: number;\n safeMax: number;\n ticks: number[];\n};\n\nfunction parseRgbColor(color: string) {\n const match = /^#?([0-9a-f]{6})$/i.exec(color);\n if (!match) {\n return null;\n }\n return {\n blue: Number.parseInt(match[1].slice(4, 6), 16),\n green: Number.parseInt(match[1].slice(2, 4), 16),\n red: Number.parseInt(match[1].slice(0, 2), 16)\n };\n}\n\nfunction mixRgbColor(color: string, mixWith: string, ratio: number) {\n const base = parseRgbColor(color);\n const target = parseRgbColor(mixWith);\n if (!base || !target) {\n return color;\n }\n const clamped = Math.max(0, Math.min(1, ratio));\n const mixChannel = (left: number, right: number) => Math.round(left + (right - left) * clamped);\n return `#${[\n mixChannel(base.red, target.red),\n mixChannel(base.green, target.green),\n mixChannel(base.blue, target.blue)\n ].map((value) => value.toString(16).padStart(2, \"0\")).join(\"\")}`;\n}\n\nfunction lightenColor(color: string, ratio: number) {\n return mixRgbColor(color, \"#ffffff\", ratio);\n}\n\nfunction darkenColor(color: string, ratio: number) {\n return mixRgbColor(color, \"#000000\", ratio);\n}\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value));\n}\n\nconst DEFAULT_CHART_FONT_STACK = [\n \"\\\"Aptos\\\"\",\n \"Calibri\",\n \"Carlito\",\n \"\\\"Segoe UI\\\"\",\n \"Tahoma\",\n \"Arial\",\n \"sans-serif\"\n].join(\", \");\n\nconst DEFAULT_CHART_TEXT_COLOR = \"#000000\";\nconst DEFAULT_CHART_MUTED_TEXT_COLOR = \"#7f7f7f\";\n\nfunction escapeCssFontFamilyToken(value: string) {\n const trimmed = value.trim();\n if (!trimmed) {\n return \"\";\n }\n if (\n trimmed.startsWith(\"\\\"\")\n || trimmed.startsWith(\"'\")\n || /^(serif|sans-serif|monospace|cursive|fantasy|system-ui|math|emoji|fangsong)$/i.test(trimmed)\n ) {\n return trimmed;\n }\n return /\\s/.test(trimmed) ? `\"${trimmed.replace(/\"/g, \"\\\\\\\"\")}\"` : trimmed;\n}\n\nfunction buildChartFontFamily(fontFamily: string | undefined) {\n if (!fontFamily || fontFamily.trim().length === 0) {\n return DEFAULT_CHART_FONT_STACK;\n }\n const tokens = fontFamily\n .split(\",\")\n .map(escapeCssFontFamilyToken)\n .filter((token) => token.length > 0);\n if (tokens.length === 0) {\n return DEFAULT_CHART_FONT_STACK;\n }\n return [...tokens, \"\\\"Segoe UI\\\"\", \"Tahoma\", \"Arial\", \"sans-serif\"].join(\", \");\n}\n\nfunction resolveChartTextColor(chart: XlsxChart) {\n return chart.textColor ?? chart.titleColor ?? DEFAULT_CHART_TEXT_COLOR;\n}\n\nfunction resolveChartAxisTextColor(chart: XlsxChart) {\n return chart.axisLabelColor ?? chart.textColor ?? chart.titleColor ?? DEFAULT_CHART_TEXT_COLOR;\n}\n\nfunction resolveChartMutedTextColor(chart: XlsxChart) {\n return chart.textColor ?? chart.axisLabelColor ?? DEFAULT_CHART_MUTED_TEXT_COLOR;\n}\n\nfunction safeNumber(value: unknown) {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === \"string\") {\n const normalized = value.trim().replace(/,/g, \"\");\n if (!normalized) {\n return null;\n }\n const parsed = Number(normalized);\n return Number.isFinite(parsed) ? parsed : null;\n }\n return null;\n}\n\nfunction chartSeriesColor(chart: XlsxChart, seriesIndex: number) {\n const series = chart.series[seriesIndex];\n const paletteColor = chart.chartColorPalette?.[seriesIndex % Math.max(1, chart.chartColorPalette.length)];\n return series?.color ?? series?.lineColor ?? paletteColor ?? chart.textColor ?? \"#222222\";\n}\n\nfunction chartSeriesStrokeColor(chart: XlsxChart, seriesIndex: number) {\n const series = chart.series[seriesIndex];\n const paletteColor = chart.chartColorPalette?.[seriesIndex % Math.max(1, chart.chartColorPalette.length)];\n return series?.lineColor ?? series?.color ?? paletteColor ?? chart.textColor ?? \"#222222\";\n}\n\nfunction chartPointColor(chart: XlsxChart, pointIndex: number, seriesIndex = 0) {\n const pointStyle = chart.series[seriesIndex]?.dataPointStyles?.find((entry) => entry.index === pointIndex);\n if (pointStyle?.color) {\n return pointStyle.color;\n }\n const rawPoint = chart.series[seriesIndex]?.dataPoints?.[pointIndex];\n if (rawPoint && typeof rawPoint === \"object\") {\n const pointRecord = rawPoint as Record<string, unknown>;\n if (typeof pointRecord.color === \"string\") {\n return pointRecord.color;\n }\n if (typeof pointRecord.fillColor === \"string\") {\n return pointRecord.fillColor;\n }\n if (typeof pointRecord.solidFillHex === \"string\") {\n const normalized = pointRecord.solidFillHex.replace(/^#/, \"\");\n if (/^[0-9a-fA-F]{6}$/.test(normalized)) {\n return `#${normalized.toLowerCase()}`;\n }\n }\n const shapeProperties = pointRecord.shapeProperties && typeof pointRecord.shapeProperties === \"object\"\n ? pointRecord.shapeProperties as Record<string, unknown>\n : null;\n if (shapeProperties && typeof shapeProperties.solidFillHex === \"string\") {\n const normalized = shapeProperties.solidFillHex.replace(/^#/, \"\");\n if (/^[0-9a-fA-F]{6}$/.test(normalized)) {\n return `#${normalized.toLowerCase()}`;\n }\n }\n }\n const palette = chart.chartColorPalette;\n if (palette && palette.length > 0) {\n const offset = chart.chartColorPaletteOffset ?? 0;\n return palette[(pointIndex + offset) % palette.length] ?? palette[pointIndex % palette.length];\n }\n return chartSeriesColor(chart, seriesIndex);\n}\n\nfunction isHistogramLikeSeries(series: XlsxChartSeries | null | undefined) {\n const raw = series?.raw && typeof series.raw === \"object\"\n ? series.raw as Record<string, unknown>\n : null;\n return Array.isArray(raw?.chartExHistogramBins) && raw.chartExHistogramBins.length > 0;\n}\n\nfunction isHistogramLikeChart(chart: XlsxChart) {\n return chart.series.some((series) => isHistogramLikeSeries(series));\n}\n\nfunction resolveRegionMapFeature(value: unknown, featureSet: \"country\" | \"us-state\" = \"country\") {\n const rawKey = normalizeRegionMapKey(value);\n if (!rawKey) {\n return null;\n }\n const atlas = getRegionMapAtlas();\n if (!atlas) {\n return null;\n }\n if (featureSet === \"us-state\") {\n const canonicalKey = REGION_MAP_US_STATE_ALIASES.get(rawKey) ?? rawKey;\n return atlas.usStateFeaturesByKey.get(canonicalKey) ?? null;\n }\n const canonicalKey = REGION_MAP_COUNTRY_ALIASES.get(rawKey) ?? rawKey;\n return atlas.countryFeaturesByKey.get(canonicalKey) ?? null;\n}\n\nfunction resolveRegionMapBaseColor(chart: XlsxChart, seriesIndex: number) {\n return chart.series[seriesIndex]?.color\n ?? chart.series[seriesIndex]?.lineColor\n ?? chart.chartColorPalette?.[0]\n ?? \"#ff006e\";\n}\n\nfunction resolveRegionMapDataColor(chart: XlsxChart, seriesIndex: number) {\n const pointColor = normalizeRendererHexColor(chartPointColor(chart, 0, seriesIndex));\n if (pointColor) {\n return pointColor;\n }\n\n const palette = Array.isArray(chart.chartColorPalette) ? chart.chartColorPalette : [];\n if (palette.length > 0) {\n const offset = chart.chartColorPaletteOffset ?? 0;\n const paletteColor = normalizeRendererHexColor(\n palette[((offset % palette.length) + palette.length) % palette.length]\n );\n if (paletteColor) {\n return paletteColor;\n }\n }\n\n return normalizeRendererHexColor(chart.series[seriesIndex]?.color ?? chart.series[seriesIndex]?.lineColor)\n ?? \"#4f81bd\";\n}\n\nfunction resolveRegionMapValueColors(series: XlsxChartSeries | null | undefined) {\n const raw = series?.raw && typeof series.raw === \"object\"\n ? series.raw as Record<string, unknown>\n : null;\n const colors = Array.isArray(raw?.valueColors)\n ? raw.valueColors\n .map((value) => normalizeRendererHexColor(value))\n .filter((value): value is string => Boolean(value))\n : [];\n return colors.length >= 2 ? colors : null;\n}\n\nfunction resolveRegionMapColorStrings(series: XlsxChartSeries | null | undefined) {\n const raw = series?.raw && typeof series.raw === \"object\"\n ? series.raw as Record<string, unknown>\n : null;\n const values = Array.isArray(raw?.chartExColorStrings)\n ? raw.chartExColorStrings\n .map((value) => (typeof value === \"string\" ? value.trim() : \"\"))\n .filter((value): value is string => value.length > 0)\n : [];\n return values.length > 0 ? values : null;\n}\n\nfunction resolveRegionMapLayoutProperties(series: XlsxChartSeries | null | undefined) {\n const raw = series?.raw && typeof series.raw === \"object\"\n ? series.raw as Record<string, unknown>\n : null;\n return raw?.layoutProperties && typeof raw.layoutProperties === \"object\"\n ? raw.layoutProperties as Record<string, unknown>\n : null;\n}\n\nfunction resolveRegionMapFeatureSet(labels: string[], geography: Record<string, unknown> | null) {\n const cultureRegion = typeof geography?.cultureRegion === \"string\"\n ? geography.cultureRegion.trim().toUpperCase()\n : \"\";\n const countryMatches = labels.filter((label) => resolveRegionMapFeature(label, \"country\") != null).length;\n const stateMatches = labels.filter((label) => resolveRegionMapFeature(label, \"us-state\") != null).length;\n if (cultureRegion === \"US\" && stateMatches > 0 && stateMatches >= countryMatches) {\n return \"us-state\" as const;\n }\n return \"country\" as const;\n}\n\nfunction getRegionMapBaseFeatures(featureSet: \"country\" | \"us-state\") {\n const atlas = getRegionMapAtlas();\n if (!atlas) {\n return [] as RegionMapFeature[];\n }\n return featureSet === \"us-state\" ? atlas.usStateFeatures : atlas.worldCountryFeatures;\n}\n\nfunction resolveRegionMapValueColorFromStops(stops: string[], ratio: number) {\n if (stops.length === 0) {\n return \"#4f81bd\";\n }\n if (stops.length === 1) {\n return stops[0];\n }\n const clamped = clamp(ratio, 0, 1);\n const scaled = clamped * (stops.length - 1);\n const lowerIndex = Math.floor(scaled);\n const upperIndex = Math.min(stops.length - 1, lowerIndex + 1);\n const mixRatio = scaled - lowerIndex;\n return mixRgbColor(stops[lowerIndex] ?? stops[0], stops[upperIndex] ?? stops[stops.length - 1], mixRatio);\n}\n\nfunction resolveRegionMapValueColor(chart: XlsxChart, seriesIndex: number, ratio: number) {\n const explicitStops = resolveRegionMapValueColors(chart.series[seriesIndex] ?? null);\n if (explicitStops) {\n return resolveRegionMapValueColorFromStops(explicitStops, ratio);\n }\n const baseColor = resolveRegionMapDataColor(chart, seriesIndex);\n return resolveRegionMapValueColorFromStops([\n lightenColor(baseColor, 0.82),\n lightenColor(baseColor, 0.28),\n darkenColor(baseColor, 0.08)\n ], ratio);\n}\n\nfunction resolveRegionMapNoDataColor(chart: XlsxChart, seriesIndex: number) {\n const baseColor = resolveRegionMapBaseColor(chart, seriesIndex);\n return normalizeRendererHexColor(baseColor) ?? \"#ff006e\";\n}\n\nfunction buildRegionMapLegendItems(chart: XlsxChart): LegendItem[] {\n const primarySeriesIndex = Math.max(0, chart.series.findIndex((series) => series.hidden !== true));\n const categoricalValues = resolveRegionMapColorStrings(chart.series[primarySeriesIndex] ?? null);\n if (categoricalValues) {\n const uniqueValues = Array.from(new Set(categoricalValues));\n return uniqueValues.map((value, index) => ({\n color: chartPointColor(chart, index, primarySeriesIndex),\n label: value\n }));\n }\n const values = (chart.series[primarySeriesIndex]?.values ?? [])\n .map((value) => safeNumber(value))\n .filter((value): value is number => value != null);\n if (values.length === 0) {\n return [];\n }\n const minValue = Math.min(...values);\n const maxValue = Math.max(...values);\n const ticks = buildNumericTickValues(minValue, maxValue, undefined).slice(0, 5);\n return ticks.slice(0, -1).map((tick, index) => {\n const nextTick = ticks[index + 1] ?? maxValue;\n const midpoint = tick + (nextTick - tick) * 0.5;\n const ratio = (midpoint - minValue) / Math.max(1e-6, maxValue - minValue);\n return {\n color: resolveRegionMapValueColor(chart, primarySeriesIndex, ratio),\n label: `${formatTickValue(tick)}-${formatTickValue(nextTick)}`\n };\n });\n}\n\nfunction normalizeBuiltinPieStyleId(styleId: number | undefined) {\n if (typeof styleId !== \"number\" || !Number.isFinite(styleId)) {\n return null;\n }\n return styleId >= 100 ? styleId - 100 : styleId;\n}\n\nfunction getBuiltinPiePalette(chart: XlsxChart, seriesIndex: number) {\n const normalized = normalizeBuiltinPieStyleId(chart.chartStyleId);\n if (normalized !== 32) {\n return null;\n }\n const baseColor = chart.series[seriesIndex]?.color\n ?? chart.series[seriesIndex]?.lineColor\n ?? chart.chartColorPalette?.[0]\n ?? null;\n if (!baseColor) {\n return null;\n }\n return [\n lightenColor(baseColor, 0.16),\n darkenColor(baseColor, 0.42),\n baseColor,\n darkenColor(baseColor, 0.18),\n lightenColor(baseColor, 0.08),\n darkenColor(baseColor, 0.3)\n ];\n}\n\nfunction resolvePiePointColor(chart: XlsxChart, pointIndex: number, seriesIndex = 0) {\n const pointStyle = chart.series[seriesIndex]?.dataPointStyles?.find((entry) => entry.index === pointIndex);\n if (pointStyle?.color) {\n return pointStyle.color;\n }\n const builtinPalette = getBuiltinPiePalette(chart, seriesIndex);\n if (builtinPalette && builtinPalette.length > 0) {\n return builtinPalette[pointIndex % builtinPalette.length] ?? builtinPalette[0];\n }\n return chartPointColor(chart, pointIndex, seriesIndex);\n}\n\nfunction selectPrimaryPieSeriesIndex(chart: XlsxChart) {\n let bestIndex = 0;\n let bestScore = Number.NEGATIVE_INFINITY;\n\n chart.series.forEach((series, index) => {\n let positiveCount = 0;\n let total = 0;\n for (const rawValue of series.values) {\n const value = safeNumber(rawValue);\n if (value != null && value > 0) {\n positiveCount += 1;\n total += value;\n }\n }\n const score = positiveCount * 1_000_000 + total;\n if (score > bestScore) {\n bestScore = score;\n bestIndex = index;\n }\n });\n\n return bestIndex;\n}\n\nfunction chartSeriesBarColors(\n chart: XlsxChart,\n seriesIndex: number,\n value: number,\n negativeFillMode: \"chartArea\" | \"none\" | \"series\"\n) {\n const series = chart.series[seriesIndex];\n const defaultFill = chartSeriesColor(chart, seriesIndex);\n const defaultStroke = chartSeriesStrokeColor(chart, seriesIndex);\n const defaultStrokeWidth = typeof series?.lineWidthPx === \"number\" && Number.isFinite(series.lineWidthPx)\n ? Math.max(0.8, Math.min(4, series.lineWidthPx))\n : 1;\n if (value < 0 && series?.invertIfNegative) {\n const resolvedNegativeFill = negativeFillMode === \"none\"\n ? \"none\"\n : series.negativeColor\n ?? (negativeFillMode === \"chartArea\" ? chart.chartAreaFillColor : undefined)\n ?? defaultFill;\n return {\n fill: resolvedNegativeFill,\n stroke: series.negativeLineColor ?? defaultStroke,\n strokeWidth: defaultStrokeWidth\n };\n }\n return {\n fill: defaultFill,\n stroke: defaultStroke,\n strokeWidth: defaultStrokeWidth\n };\n}\n\nfunction resolveCategoryBandPadding(gapWidth: number | undefined) {\n const normalizedGap = typeof gapWidth === \"number\" && Number.isFinite(gapWidth)\n ? clamp(gapWidth, 0, 500)\n : 150;\n const inner = clamp(normalizedGap / (100 + normalizedGap), 0.05, 0.88);\n const outer = clamp(inner * 0.5, 0, 0.45);\n return { inner, outer };\n}\n\nfunction normalizeLegendPosition(position: string | undefined) {\n switch (position) {\n case \"bottom\":\n return \"bottom\";\n case \"left\":\n return \"left\";\n case \"right\":\n return \"right\";\n case \"top\":\n return \"top\";\n case \"b\":\n return \"bottom\";\n case \"l\":\n return \"left\";\n case \"r\":\n return \"right\";\n case \"t\":\n return \"top\";\n default:\n return position;\n }\n}\n\nfunction normalizeChartMarkerSymbol(value: string | undefined) {\n if (!value || value === \"none\") {\n return \"none\";\n }\n if (value === \"auto\") {\n return \"circle\";\n }\n return value;\n}\n\nfunction normalizeRenderableChartType(chart: XlsxChart) {\n if (chart.chartType === \"ScatterSmooth\") {\n return \"ScatterSmooth\";\n }\n if (chart.chartType === \"Pie\" && chart.is3d) {\n return \"Pie3D\";\n }\n if (\n chart.chartType === \"Pie\"\n && chart.series.some((series) => Array.isArray(series.dataPoints) && series.dataPoints.some((point) => (\n point != null\n && typeof point === \"object\"\n && \"explosion\" in point\n && typeof (point as { explosion?: unknown }).explosion === \"number\"\n && ((point as { explosion?: number }).explosion ?? 0) > 0\n )))\n ) {\n return \"PieExploded\";\n }\n if (chart.chartType === \"Unsupported(c:ofPieChart)\") {\n return \"BarOfPie\";\n }\n return chart.chartType;\n}\n\nfunction normalizeCategoryLabel(value: unknown) {\n if (value == null) {\n return \"\";\n }\n return String(value)\n .replace(/[\\u200B-\\u200D\\uFEFF]/g, \"\")\n .trim();\n}\n\nfunction estimateReferencePointCount(formula: string | undefined) {\n if (!formula) {\n return 0;\n }\n const bang = formula.lastIndexOf(\"!\");\n const rawRange = (bang >= 0 ? formula.slice(bang + 1) : formula).replace(/\\$/g, \"\");\n const match = /^([A-Za-z]+)(\\d+):([A-Za-z]+)(\\d+)$/.exec(rawRange.trim());\n if (!match) {\n return 0;\n }\n const startRow = Number(match[2]);\n const endRow = Number(match[4]);\n if (!Number.isFinite(startRow) || !Number.isFinite(endRow)) {\n return 0;\n }\n return Math.abs(endRow - startRow) + 1;\n}\n\nfunction getCategoryLabels(chart: XlsxChart) {\n const primaryCategories = chart.series[0]?.categories ?? [];\n const includeReferenceCategoryCount = chart.plotVisibleOnly !== true;\n const referenceCategoryCount = includeReferenceCategoryCount\n ? Math.max(\n 0,\n ...chart.series.map((series) => Math.max(\n estimateReferencePointCount(series.categoriesRef?.formula),\n estimateReferencePointCount(series.valuesRef?.formula)\n ))\n )\n : 0;\n const categoryCount = Math.max(\n referenceCategoryCount,\n primaryCategories.length,\n ...chart.series.map((series) => Math.max(series.categories.length, series.values.length))\n );\n if (categoryCount <= 0) {\n return [];\n }\n const hasAnyExplicitCategory = chart.series.some((series) => (\n series.categories.some((value) => normalizeCategoryLabel(value).length > 0)\n ));\n const fallbackToImplicitOrdinal = chart.series.some((series) => {\n const categoriesLength = series.categories.length;\n if (categoriesLength === 0) {\n return false;\n }\n return series.categories.every((value) => normalizeCategoryLabel(value).length === 0);\n }) || !hasAnyExplicitCategory;\n return Array.from({ length: categoryCount }, (_, categoryIndex) => {\n const primary = primaryCategories[categoryIndex];\n if (primary != null) {\n const normalizedPrimary = normalizeCategoryLabel(primary);\n if (normalizedPrimary.length > 0) {\n return formatCategoryLabel(chart, primary, normalizedPrimary);\n }\n }\n const fallback = chart.series\n .map((series) => series.categories[categoryIndex])\n .find((value) => normalizeCategoryLabel(value).length > 0);\n if (fallback != null) {\n return formatCategoryLabel(chart, fallback, normalizeCategoryLabel(fallback));\n }\n return fallbackToImplicitOrdinal ? String(categoryIndex + 1) : \"\";\n });\n}\n\nfunction isComboChart(chart: XlsxChart) {\n const typeGroups = chart.typeGroups ?? [];\n if (typeGroups.length < 2) {\n return false;\n }\n const distinctChartTypes = new Set(typeGroups.map((group) => group.chartType));\n return distinctChartTypes.size > 1;\n}\n\nfunction getComboLegendSeries(chart: XlsxChart) {\n if (!isComboChart(chart)) {\n return chart.series.map((series, index) => ({\n color: chartSeriesColor(chart, index),\n label: series.name ?? `Series ${index + 1}`\n }));\n }\n return (chart.typeGroups ?? []).flatMap((group) => (\n group.series.map((series, seriesIndex) => ({\n color: series.lineColor ?? series.markerColor ?? series.color ?? chartSeriesColor(chart, seriesIndex),\n label: series.name ?? `Series ${seriesIndex + 1}`\n }))\n ));\n}\n\nfunction findAxisForGroup(\n chart: XlsxChart,\n axisIds: number[],\n positionMatcher: (position: string | undefined) => boolean,\n allowAnyMatch = false\n) {\n const positionedMatch = chart.axes.find((axis) => (\n axis.id != null\n && axisIds.includes(axis.id)\n && positionMatcher(axis.position)\n ));\n if (positionedMatch) {\n return positionedMatch;\n }\n if (!allowAnyMatch) {\n return null;\n }\n return chart.axes.find((axis) => axis.id != null && axisIds.includes(axis.id)) ?? null;\n}\n\nfunction buildComboGroups(chart: XlsxChart): ComboRenderableGroup[] {\n return (chart.typeGroups ?? []).map((group) => {\n const axisIds = group.axisIds ?? [];\n const categoryAxis = findAxisForGroup(chart, axisIds, (position) => position === \"b\" || position === \"t\")\n ?? chart.categoryAxis\n ?? null;\n const valueAxis = findAxisForGroup(chart, axisIds, (position) => position === \"l\" || position === \"r\", true)\n ?? chart.valueAxis\n ?? null;\n return {\n axisIds,\n categoryAxis,\n chartType: group.chartType,\n gapWidth: group.gapWidth,\n is3d: group.is3d,\n raw: group.raw,\n series: group.series,\n valueAxis\n };\n }).filter((group) => group.series.length > 0);\n}\n\nfunction resolveRenderableSeriesValue(rawValue: unknown, displayBlanksAs: string | undefined) {\n const numeric = safeNumber(rawValue);\n if (numeric != null) {\n return numeric;\n }\n return displayBlanksAs === \"zero\" ? 0 : null;\n}\n\nfunction coerceLooseNumber(value: unknown): number | null {\n const strict = safeNumber(value);\n if (strict != null) {\n return strict;\n }\n if (Array.isArray(value)) {\n for (const entry of value) {\n const nested = coerceLooseNumber(entry);\n if (nested != null) {\n return nested;\n }\n }\n return null;\n }\n if (value && typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n for (const key of [\"x\", \"value\", \"v\", \"num\", \"number\", \"raw\"]) {\n const nested = coerceLooseNumber(record[key]);\n if (nested != null) {\n return nested;\n }\n }\n return null;\n }\n if (typeof value === \"string\") {\n const match = /-?\\d+(?:\\.\\d+)?/.exec(value);\n if (!match) {\n return null;\n }\n const parsed = Number(match[0]);\n return Number.isFinite(parsed) ? parsed : null;\n }\n return null;\n}\n\nfunction buildPieEntries(chart: XlsxChart, seriesIndex = selectPrimaryPieSeriesIndex(chart)) {\n const categories = getCategoryLabels(chart);\n const values = chart.series[seriesIndex]?.values ?? [];\n return values\n .map((rawValue, index) => ({\n color: resolvePiePointColor(chart, index, seriesIndex),\n index,\n label: normalizeCategoryLabel(categories[index]),\n value: Math.max(0, safeNumber(rawValue) ?? 0)\n }))\n .filter((entry) => entry.value > 0);\n}\n\nfunction resolveChartStageSubtotal(series: XlsxChart[\"series\"][number]) {\n const raw = series.raw && typeof series.raw === \"object\"\n ? series.raw as Record<string, unknown>\n : null;\n const layoutProperties = raw?.layoutProperties && typeof raw.layoutProperties === \"object\"\n ? raw.layoutProperties as Record<string, unknown>\n : null;\n const subtotals = Array.isArray(layoutProperties?.subtotals) ? layoutProperties.subtotals : [];\n return subtotals.length > 0 || layoutProperties?.aggregation === true;\n}\n\nfunction buildChartStages(chart: XlsxChart) {\n if (chart.chartType === \"Funnel\" || chart.chartType === \"Waterfall\") {\n const primarySeriesIndex = Math.max(0, chart.series.findIndex((series) => series.hidden !== true));\n const primarySeries = chart.series[primarySeriesIndex] ?? null;\n if (!primarySeries) {\n return [];\n }\n\n const labels = getCategoryLabels(chart);\n return primarySeries.values\n .map((rawValue, index): ChartStage | null => {\n const value = safeNumber(rawValue);\n if (value == null || !Number.isFinite(value)) {\n return null;\n }\n return {\n color: chart.varyColors\n ? chartPointColor(chart, index, primarySeriesIndex)\n : chartSeriesColor(chart, primarySeriesIndex),\n isSubtotal: false,\n label: normalizeCategoryLabel(labels[index]) || String(index + 1),\n value\n };\n })\n .filter((stage): stage is ChartStage => stage != null);\n }\n\n return chart.series\n .map((series, index): ChartStage | null => {\n const value = series.values.reduce<number>((sum, entry) => sum + (safeNumber(entry) ?? 0), 0);\n if (!Number.isFinite(value)) {\n return null;\n }\n const formula = typeof series.valuesRef?.formula === \"string\" ? series.valuesRef.formula : \"\";\n const label = series.name\n ?? (formula.length > 0 ? formula.replace(/^.*!/, \"\").replace(/\\$/g, \"\") : `Series ${index + 1}`);\n return {\n color: chartSeriesColor(chart, typeof series.formatIdx === \"number\" ? series.formatIdx : index),\n isSubtotal: resolveChartStageSubtotal(series),\n label,\n value\n };\n })\n .filter((stage): stage is ChartStage => stage != null);\n}\n\nfunction buildHierarchyData(chart: XlsxChart) {\n const root: ChartHierarchyDatum = {\n children: [],\n name: chart.title ?? chart.name ?? \"Root\"\n };\n const rootChildren = root.children ?? [];\n const topLevelIndexByName = new Map<string, number>();\n const primaryHierarchySeries = chart.series.find((series) => {\n const raw = series.raw && typeof series.raw === \"object\" ? series.raw as Record<string, unknown> : null;\n return Array.isArray(raw?.chartExHierarchyCategories);\n }) ?? null;\n const primaryHierarchyPaths = (() => {\n if (!primaryHierarchySeries) {\n return null;\n }\n const raw = primaryHierarchySeries.raw as Record<string, unknown>;\n return Array.isArray(raw.chartExHierarchyCategories)\n ? raw.chartExHierarchyCategories.map((entry) => Array.isArray(entry)\n ? entry.map((value) => normalizeCategoryLabel(value)).filter((value) => value.length > 0)\n : [])\n : null;\n })();\n const rowCount = primaryHierarchyPaths\n ? primaryHierarchyPaths.length\n : Math.max(0, ...chart.series.map((series) => series.values.length));\n\n for (let rowIndex = 0; rowIndex < rowCount; rowIndex += 1) {\n const path = primaryHierarchyPaths?.[rowIndex] ?? chart.series\n .map((series) => normalizeCategoryLabel(series.categories[rowIndex] ?? series.values[rowIndex]))\n .filter((value) => value.length > 0);\n if (path.length === 0) {\n continue;\n }\n\n let current = root;\n path.forEach((part, levelIndex) => {\n current.children = current.children ?? [];\n const preserveDuplicateLeaf = levelIndex === path.length - 1 && path.length === 1;\n let next = preserveDuplicateLeaf\n ? undefined\n : current.children.find((child) => child.name === part);\n if (!next) {\n next = { children: [], name: part };\n if (levelIndex === 0) {\n const topLevelIndex = topLevelIndexByName.size;\n topLevelIndexByName.set(part, topLevelIndex);\n next.colorIndex = topLevelIndex;\n } else {\n next.colorIndex = current.colorIndex;\n }\n current.children.push(next);\n }\n current = next;\n });\n\n const valueSource = primaryHierarchySeries ?? chart.series[chart.series.length - 1] ?? null;\n current.value = (current.value ?? 0) + Math.max(0.0001, safeNumber(valueSource?.values[rowIndex]) ?? 1);\n }\n\n return rootChildren.length > 0 ? root : null;\n}\n\nfunction resolveBoxWhiskerQuartileMethod(series: XlsxChartSeries) {\n const raw = series.raw && typeof series.raw === \"object\" ? series.raw as Record<string, unknown> : null;\n const layoutProperties = raw?.layoutProperties && typeof raw.layoutProperties === \"object\"\n ? raw.layoutProperties as Record<string, unknown>\n : null;\n const statistics = layoutProperties?.statistics && typeof layoutProperties.statistics === \"object\"\n ? layoutProperties.statistics as Record<string, unknown>\n : null;\n return statistics?.quartileMethod === \"inclusive\" ? \"inclusive\" : \"exclusive\";\n}\n\nfunction resolveBoxWhiskerVisibility(series: XlsxChartSeries) {\n const raw = series.raw && typeof series.raw === \"object\" ? series.raw as Record<string, unknown> : null;\n const layoutProperties = raw?.layoutProperties && typeof raw.layoutProperties === \"object\"\n ? raw.layoutProperties as Record<string, unknown>\n : null;\n const visibility = layoutProperties?.visibility && typeof layoutProperties.visibility === \"object\"\n ? layoutProperties.visibility as Record<string, unknown>\n : null;\n return {\n meanLine: visibility?.meanLine === true,\n meanMarker: visibility?.meanMarker !== false,\n nonoutliers: visibility?.nonoutliers === true,\n outliers: visibility?.outliers !== false\n };\n}\n\nfunction computePercentile(sortedValues: number[], percentile: number, method: \"exclusive\" | \"inclusive\") {\n const count = sortedValues.length;\n if (count === 0) {\n return 0;\n }\n if (count === 1) {\n return sortedValues[0] ?? 0;\n }\n\n const rank = method === \"exclusive\"\n ? percentile * (count + 1)\n : 1 + percentile * (count - 1);\n if (rank <= 1) {\n return sortedValues[0] ?? 0;\n }\n if (rank >= count) {\n return sortedValues[count - 1] ?? 0;\n }\n\n const lowerIndex = Math.floor(rank) - 1;\n const upperIndex = Math.ceil(rank) - 1;\n const fraction = rank - Math.floor(rank);\n const lower = sortedValues[Math.max(0, lowerIndex)] ?? sortedValues[0] ?? 0;\n const upper = sortedValues[Math.max(0, upperIndex)] ?? sortedValues[count - 1] ?? 0;\n return lower + (upper - lower) * fraction;\n}\n\nfunction computeBoxWhiskerStats(series: XlsxChartSeries): BoxWhiskerStats | null {\n const sortedValues = series.values\n .map((value) => safeNumber(value))\n .filter((value): value is number => value != null)\n .sort((left, right) => left - right);\n if (sortedValues.length === 0) {\n return null;\n }\n\n const quartileMethod = resolveBoxWhiskerQuartileMethod(series);\n const q1 = computePercentile(sortedValues, 0.25, quartileMethod);\n const median = computePercentile(sortedValues, 0.5, quartileMethod);\n const q3 = computePercentile(sortedValues, 0.75, quartileMethod);\n const iqr = q3 - q1;\n const lowerFence = q1 - iqr * 1.5;\n const upperFence = q3 + iqr * 1.5;\n const visiblePoints = sortedValues.filter((value) => value >= lowerFence && value <= upperFence);\n const outliers = sortedValues.filter((value) => value < lowerFence || value > upperFence);\n const lowerWhisker = visiblePoints[0] ?? sortedValues[0] ?? 0;\n const upperWhisker = visiblePoints[visiblePoints.length - 1] ?? sortedValues[sortedValues.length - 1] ?? 0;\n const mean = sortedValues.reduce((sum, value) => sum + value, 0) / sortedValues.length;\n\n return {\n lowerFence,\n lowerWhisker,\n max: sortedValues[sortedValues.length - 1] ?? 0,\n mean,\n median,\n min: sortedValues[0] ?? 0,\n outliers,\n q1,\n q3,\n upperFence,\n upperWhisker,\n visiblePoints\n };\n}\n\nfunction resolveHierarchyNodeColor(chart: XlsxChart, node: HierarchyNode<ChartHierarchyDatum>) {\n const lineage = node.ancestors().reverse();\n const topLevel = lineage[1];\n const baseIndex = topLevel?.data.colorIndex ?? 0;\n const baseColor = chartSeriesColor(chart, baseIndex);\n const depth = Math.max(0, node.depth - 1);\n return depth === 0 ? baseColor : lightenColor(baseColor, clamp(depth * 0.16, 0, 0.5));\n}\n\nfunction resolveTreemapNodeColor(chart: XlsxChart, node: HierarchyNode<ChartHierarchyDatum>) {\n const lineage = node.ancestors().reverse();\n const topLevel = lineage[1];\n return chartSeriesColor(chart, topLevel?.data.colorIndex ?? 0);\n}\n\nfunction excelTreemapTile(node: HierarchyRectangularNode<ChartHierarchyDatum>, x0: number, y0: number, x1: number, y1: number) {\n if (!node.children || node.children.length === 0) {\n return;\n }\n if (node.depth === 0) {\n treemapDice(node, x0, y0, x1, y1);\n node.children.forEach((child) => excelTreemapTile(child, child.x0, child.y0, child.x1, child.y1));\n return;\n }\n treemapBinary(node, x0, y0, x1, y1);\n node.children.forEach((child) => excelTreemapTile(child, child.x0, child.y0, child.x1, child.y1));\n}\n\nfunction resolveSurfaceBaseColor(chart: XlsxChart, palette: ChartRendererPalette) {\n return chart.chartColorPalette?.[0]\n ?? chart.series[0]?.color\n ?? chart.series[0]?.lineColor\n ?? chart.axisLineColor\n ?? chart.textColor\n ?? palette.text;\n}\n\nfunction normalizeBuiltinSurfaceStyleId(styleId: number | undefined) {\n if (typeof styleId !== \"number\" || !Number.isFinite(styleId)) {\n return null;\n }\n return styleId >= 100 ? styleId - 100 : styleId;\n}\n\nfunction hasExplicitSurfaceBaseColor(chart: XlsxChart) {\n const primarySeriesColor = normalizeRendererHexColor(chart.series[0]?.color ?? chart.series[0]?.lineColor);\n if (!primarySeriesColor) {\n return null;\n }\n const paletteColor = normalizeRendererHexColor(chart.chartColorPalette?.[0]);\n return paletteColor && paletteColor === primarySeriesColor ? null : primarySeriesColor;\n}\n\nfunction buildMonochromeSurfacePalette(baseColor: string, count: number) {\n if (count <= 3) {\n return [\n lightenColor(baseColor, 0.22),\n baseColor,\n darkenColor(baseColor, 0.2)\n ];\n }\n return [\n lightenColor(baseColor, 0.3),\n lightenColor(baseColor, 0.14),\n baseColor,\n darkenColor(baseColor, 0.1),\n darkenColor(baseColor, 0.22)\n ];\n}\n\nfunction getBuiltinSurfacePalette(chart: XlsxChart) {\n const normalized = normalizeBuiltinSurfaceStyleId(chart.chartStyleId);\n const explicitBaseColor = hasExplicitSurfaceBaseColor(chart);\n if (normalized === 26) {\n return buildMonochromeSurfacePalette(explicitBaseColor ?? \"#ff006e\", 3);\n }\n if (normalized === 34 && explicitBaseColor) {\n return buildMonochromeSurfacePalette(explicitBaseColor, 3);\n }\n if (normalized === 34 || (chart.wireframe === true && normalized == null)) {\n return [\"#5b9bd5\", \"#ed7d31\", \"#a5a5a5\"];\n }\n if (normalized === 35 || normalized === 36 || (chart.wireframe !== true && normalized == null)) {\n return [\"#2f5597\", \"#4472c4\", \"#5b9bd5\", \"#8faadc\", \"#d9e2f3\"];\n }\n return null;\n}\n\nfunction shouldPreferBuiltinSurfacePalette(chart: XlsxChart) {\n const normalized = normalizeBuiltinSurfaceStyleId(chart.chartStyleId);\n const rawChartType = chart.raw && typeof chart.raw === \"object\" && typeof (chart.raw as Record<string, unknown>).xmlChartType === \"string\"\n ? String((chart.raw as Record<string, unknown>).xmlChartType)\n : \"\";\n return (\n (rawChartType === \"surfaceChart\" || rawChartType === \"surface3DChart\")\n && (normalized === 26 || normalized === 34 || normalized === 35 || normalized === 36)\n );\n}\n\nfunction getSurfaceBandCount(chart: XlsxChart) {\n const raw = chart.raw && typeof chart.raw === \"object\" ? chart.raw as Record<string, unknown> : null;\n const explicitBandCount = typeof raw?.bandFormatCount === \"number\" && Number.isFinite(raw.bandFormatCount)\n ? raw.bandFormatCount\n : null;\n if (explicitBandCount != null && explicitBandCount > 0 && !(isContourSurfaceChart(chart) && chart.wireframe !== true)) {\n return explicitBandCount;\n }\n const builtinPalette = getBuiltinSurfacePalette(chart);\n if (shouldPreferBuiltinSurfacePalette(chart) && builtinPalette && builtinPalette.length > 0) {\n return builtinPalette.length;\n }\n if (chart.chartColorPalette && chart.chartColorPalette.length > 1) {\n return chart.chartColorPalette.length;\n }\n if (builtinPalette && builtinPalette.length > 0) {\n return builtinPalette.length;\n }\n return chart.wireframe ? 3 : 5;\n}\n\nfunction getSurfaceColorStops(chart: XlsxChart, palette: ChartRendererPalette) {\n const builtinPalette = getBuiltinSurfacePalette(chart);\n if (shouldPreferBuiltinSurfacePalette(chart) && builtinPalette && builtinPalette.length >= 2) {\n return builtinPalette;\n }\n const explicitStops = (chart.chartColorPalette ?? []).filter((value): value is string => typeof value === \"string\" && value.length > 0);\n if (explicitStops.length >= 2) {\n return explicitStops;\n }\n if (builtinPalette && builtinPalette.length >= 2) {\n return builtinPalette;\n }\n const baseColor = resolveSurfaceBaseColor(chart, palette);\n return [\n darkenColor(baseColor, 0.42),\n darkenColor(baseColor, 0.24),\n baseColor,\n lightenColor(baseColor, 0.18),\n lightenColor(baseColor, 0.34),\n lightenColor(baseColor, 0.5)\n ];\n}\n\nfunction resolveSurfaceBandPaletteColor(chart: XlsxChart, palette: ChartRendererPalette, domain: SurfaceDomain, value: number) {\n const stops = getSurfaceColorStops(chart, palette);\n if (stops.length === 0) {\n return resolveSurfaceBaseColor(chart, palette);\n }\n const bandIndex = resolveSurfaceBandIndex(domain, value);\n return stops[Math.min(stops.length - 1, Math.max(0, bandIndex))] ?? stops[stops.length - 1] ?? resolveSurfaceBaseColor(chart, palette);\n}\n\nfunction getSurfaceDomain(chart: XlsxChart): SurfaceDomain | null {\n const numericValues = chart.series.flatMap((series) => (\n series.values\n .map((value) => safeNumber(value))\n .filter((value): value is number => value != null)\n ));\n if (numericValues.length === 0) {\n return null;\n }\n const explicitMin = typeof chart.valueAxis?.min === \"number\" && Number.isFinite(chart.valueAxis.min)\n ? chart.valueAxis.min\n : null;\n const explicitMax = typeof chart.valueAxis?.max === \"number\" && Number.isFinite(chart.valueAxis.max)\n ? chart.valueAxis.max\n : null;\n const rawMin = Math.min(...numericValues);\n const rawMax = Math.max(...numericValues);\n const bandCount = Math.max(1, getSurfaceBandCount(chart));\n const spanBase = Math.max(1e-6, rawMax - Math.min(0, rawMin));\n const roughStep = spanBase / bandCount;\n const magnitude = 10 ** Math.floor(Math.log10(Math.max(roughStep, 1e-6)));\n const normalized = roughStep / magnitude;\n const niceNormalized = normalized <= 1 ? 1 : normalized <= 2 ? 2 : normalized <= 5 ? 5 : 10;\n const step = typeof chart.valueAxis?.majorUnit === \"number\" && chart.valueAxis.majorUnit > 0\n ? chart.valueAxis.majorUnit\n : niceNormalized * magnitude;\n const minValue = explicitMin ?? (rawMin >= 0 ? 0 : Math.floor(rawMin / step) * step);\n const maxValue = explicitMax ?? Math.ceil(rawMax / step) * step;\n const safeMax = maxValue <= minValue ? minValue + step : maxValue;\n const ticks: number[] = [];\n for (let current = minValue; current <= safeMax + step * 0.001; current += step) {\n ticks.push(Number(current.toFixed(8)));\n }\n return {\n maxValue,\n minValue,\n safeMax,\n ticks: ticks.length >= 2 ? ticks : [minValue, safeMax]\n };\n}\n\nfunction resolveSurfaceColor(chart: XlsxChart, palette: ChartRendererPalette, ratio: number) {\n const stops = getSurfaceColorStops(chart, palette);\n if (stops.length === 0) {\n return resolveSurfaceBaseColor(chart, palette);\n }\n if (stops.length === 1) {\n return stops[0];\n }\n const clamped = clamp(ratio, 0, 1) * (stops.length - 1);\n const lowerIndex = Math.floor(clamped);\n const upperIndex = Math.min(stops.length - 1, lowerIndex + 1);\n const mixRatio = clamped - lowerIndex;\n return mixRgbColor(stops[lowerIndex] ?? stops[0], stops[upperIndex] ?? stops[stops.length - 1], mixRatio);\n}\n\nfunction resolveSurfaceBandColor(chart: XlsxChart, palette: ChartRendererPalette, domain: SurfaceDomain, value: number) {\n return resolveSurfaceBandPaletteColor(chart, palette, domain, value);\n}\n\nfunction resolveSurfaceBandIndex(domain: SurfaceDomain, value: number) {\n const ticks = domain.ticks;\n for (let index = 0; index < ticks.length - 1; index += 1) {\n const end = ticks[index + 1] ?? domain.safeMax;\n if (value <= end || index === ticks.length - 2) {\n return index;\n }\n }\n return Math.max(0, ticks.length - 2);\n}\n\ntype SurfacePathPoint = { x: number; y: number };\n\nfunction buildSurfaceSmoothPath(points: SurfacePathPoint[], smooth: boolean) {\n if (points.length < 2) {\n return \"\";\n }\n return d3Line<SurfacePathPoint>()\n .x((point) => point.x)\n .y((point) => point.y)\n .curve(points.length >= 3 && smooth ? curveCatmullRom.alpha(0.5) : curveLinear)(points) ?? \"\";\n}\n\nfunction splitSurfacePointRuns<T extends { hasValue: boolean; x: number; y: number }>(points: T[]) {\n const runs: SurfacePathPoint[][] = [];\n let currentRun: SurfacePathPoint[] = [];\n points.forEach((point) => {\n if (!point.hasValue) {\n if (currentRun.length >= 2) {\n runs.push(currentRun);\n }\n currentRun = [];\n return;\n }\n const nextPoint = { x: point.x, y: point.y };\n const previous = currentRun[currentRun.length - 1];\n if (!previous || Math.abs(previous.x - nextPoint.x) > 0.01 || Math.abs(previous.y - nextPoint.y) > 0.01) {\n currentRun.push(nextPoint);\n }\n });\n if (currentRun.length >= 2) {\n runs.push(currentRun);\n }\n return runs;\n}\n\ntype SurfaceContourSegment = {\n end: SurfacePathPoint;\n start: SurfacePathPoint;\n};\n\nfunction connectSurfaceContourSegments(segments: SurfaceContourSegment[]) {\n const remaining = [...segments];\n const epsilon = 0.75;\n const within = (left: SurfacePathPoint, right: SurfacePathPoint) => (\n Math.abs(left.x - right.x) <= epsilon && Math.abs(left.y - right.y) <= epsilon\n );\n const paths: SurfacePathPoint[][] = [];\n\n while (remaining.length > 0) {\n const seed = remaining.shift();\n if (!seed) {\n break;\n }\n const chain: SurfacePathPoint[] = [seed.start, seed.end];\n let changed = true;\n while (changed) {\n changed = false;\n for (let index = remaining.length - 1; index >= 0; index -= 1) {\n const candidate = remaining[index];\n if (!candidate) {\n continue;\n }\n if (within(chain[chain.length - 1] ?? candidate.start, candidate.start)) {\n chain.push(candidate.end);\n } else if (within(chain[chain.length - 1] ?? candidate.start, candidate.end)) {\n chain.push(candidate.start);\n } else if (within(chain[0] ?? candidate.start, candidate.end)) {\n chain.unshift(candidate.start);\n } else if (within(chain[0] ?? candidate.start, candidate.start)) {\n chain.unshift(candidate.end);\n } else {\n continue;\n }\n remaining.splice(index, 1);\n changed = true;\n }\n }\n const deduped = chain.filter((point, index) => {\n if (index === 0) {\n return true;\n }\n const previous = chain[index - 1];\n return !previous || !within(previous, point);\n });\n if (deduped.length >= 2) {\n paths.push(deduped);\n }\n }\n\n return paths;\n}\n\nfunction getSurfaceWireframePalette(chart: XlsxChart, palette: ChartRendererPalette) {\n const raw = chart.raw && typeof chart.raw === \"object\" ? chart.raw as Record<string, unknown> : null;\n const explicit = Array.isArray(raw?.bandFormatLineColors)\n ? raw.bandFormatLineColors.filter((color): color is string => typeof color === \"string\" && color.length > 0)\n : [];\n if (explicit.length > 0) {\n return explicit;\n }\n return getSurfaceColorStops(chart, palette);\n}\n\nfunction resolveSurfaceWireframeColor(chart: XlsxChart, palette: ChartRendererPalette, domain: SurfaceDomain, value: number) {\n const stops = getSurfaceWireframePalette(chart, palette);\n if (stops.length === 0) {\n return resolveSurfaceBandPaletteColor(chart, palette, domain, value);\n }\n const bandIndex = resolveSurfaceBandIndex(domain, value);\n return stops[Math.min(stops.length - 1, Math.max(0, bandIndex))] ?? resolveSurfaceBandPaletteColor(chart, palette, domain, value);\n}\n\nfunction resolveSurfacePlotRect(chart: XlsxChart, layout: ChartLayout) {\n if (!isContourSurfaceChart(chart)) {\n return layout.plot;\n }\n const columnCount = Math.max(1, getCategoryLabels(chart).length);\n const rowCount = Math.max(1, chart.series.length);\n const targetAspect = Math.max(0.72, columnCount / Math.max(1, rowCount));\n const widthScale = chart.wireframe ? 0.78 : 0.84;\n const heightScale = chart.wireframe ? 0.72 : 0.8;\n let width = layout.plot.width * widthScale;\n let height = layout.plot.height * heightScale;\n if (width / Math.max(1e-6, height) > targetAspect) {\n width = height * targetAspect;\n } else {\n height = width / Math.max(1e-6, targetAspect);\n }\n return {\n height,\n left: layout.plot.left + (layout.plot.width - width) / 2,\n top: layout.plot.top + (layout.plot.height - height) / 2,\n width\n };\n}\n\nfunction buildSurfaceLegendItems(chart: XlsxChart, palette: ChartRendererPalette) {\n const domain = getSurfaceDomain(chart);\n if (!domain) {\n return [];\n }\n const items: LegendItem[] = [];\n for (let index = 0; index < domain.ticks.length - 1; index += 1) {\n const start = domain.ticks[index] ?? domain.minValue;\n const end = domain.ticks[index + 1] ?? domain.safeMax;\n const midpoint = start + (end - start) * 0.5;\n const ratio = (midpoint - domain.minValue) / Math.max(1e-6, domain.safeMax - domain.minValue);\n items.push({\n color: resolveSurfaceColor(chart, palette, ratio),\n label: `${formatTickValue(start)}-${formatTickValue(end)}`\n });\n }\n return items.reverse();\n}\n\nfunction isContourSurfaceChart(chart: XlsxChart) {\n const rawChartType = chart.raw && typeof chart.raw === \"object\" && typeof (chart.raw as Record<string, unknown>).xmlChartType === \"string\"\n ? (chart.raw as Record<string, unknown>).xmlChartType\n : \"\";\n if (rawChartType === \"surfaceChart\") {\n return true;\n }\n if (rawChartType === \"surface3DChart\") {\n return false;\n }\n return chart.chartType === \"Surface\" && chart.is3d !== true;\n}\n\nfunction renderSurfaceAxes(chart: XlsxChart, layout: ChartLayout) {\n const plot = resolveSurfacePlotRect(chart, layout);\n const categories = getCategoryLabels(chart);\n const seriesLabels = chart.series.map((series, index) => normalizeCategoryLabel(series.name) || `Q${index + 1}`);\n const labelColor = resolveChartAxisTextColor(chart);\n const axisColor = chart.axisLineColor ?? chart.chartAreaBorderColor ?? \"#888888\";\n const rowCount = Math.max(1, seriesLabels.length);\n const columnCount = Math.max(1, categories.length);\n const columnPositions = categories.map((_, index) => (\n plot.left + (columnCount <= 1 ? plot.width / 2 : (index / (columnCount - 1)) * plot.width)\n ));\n const rowPositions = seriesLabels.map((_, index) => (\n plot.top + plot.height - (rowCount <= 1 ? plot.height / 2 : (index / (rowCount - 1)) * plot.height)\n ));\n\n return (\n <g>\n <rect\n fill=\"none\"\n height={plot.height}\n stroke={lightenColor(axisColor, 0.18)}\n strokeWidth={0.8}\n width={plot.width}\n x={plot.left}\n y={plot.top}\n />\n {categories.map((label, index) => (\n <text\n key={`surface-x-label-${index}`}\n fill={labelColor}\n fontSize={10}\n textAnchor=\"middle\"\n x={columnPositions[index] ?? plot.left}\n y={plot.top + plot.height + 14}\n >\n {label}\n </text>\n ))}\n {seriesLabels.map((label, index) => (\n <text\n key={`surface-y-label-${index}`}\n fill={labelColor}\n fontSize={10}\n textAnchor=\"start\"\n x={plot.left + plot.width + 8}\n y={(rowPositions[index] ?? plot.top) + 3}\n >\n {label}\n </text>\n ))}\n </g>\n );\n}\n\nfunction normalizeRendererHexColor(value: unknown) {\n if (typeof value !== \"string\") {\n return null;\n }\n const trimmed = value.trim();\n if (!trimmed) {\n return null;\n }\n const normalized = trimmed.startsWith(\"#\") ? trimmed.slice(1) : trimmed;\n return /^[0-9a-f]{6}$/i.test(normalized) ? `#${normalized.toLowerCase()}` : null;\n}\n\nfunction resolveStockRoleIndices(chart: XlsxChart) {\n const roles = {\n close: indexByName(chart.series, /close|last|end/),\n high: indexByName(chart.series, /high|max|top/),\n low: indexByName(chart.series, /low|min|bottom/),\n open: indexByName(chart.series, /open|start/),\n volume: indexByName(chart.series, /volume|vol/)\n };\n const usedIndices = new Set<number>(Object.values(roles).filter((value): value is number => value != null));\n const remainingIndices = chart.series.map((_, index) => index).filter((index) => !usedIndices.has(index));\n const canonicalOrder = chart.series.length >= 4\n ? ([\"open\", \"high\", \"low\", \"close\"] as const)\n : ([\"high\", \"low\", \"close\"] as const);\n canonicalOrder.forEach((role) => {\n if (roles[role] == null) {\n const nextIndex = remainingIndices.shift();\n if (nextIndex != null) {\n roles[role] = nextIndex;\n }\n }\n });\n return roles;\n}\n\nfunction resolveStockPalette(chart: XlsxChart, axisColor: string) {\n const raw = chart.raw && typeof chart.raw === \"object\" ? chart.raw as Record<string, unknown> : null;\n const highLowLines = raw?.highLowLines && typeof raw.highLowLines === \"object\"\n ? raw.highLowLines as Record<string, unknown>\n : null;\n const shapeProperties = highLowLines?.shapeProperties && typeof highLowLines.shapeProperties === \"object\"\n ? highLowLines.shapeProperties as Record<string, unknown>\n : null;\n const lineColor = normalizeRendererHexColor(shapeProperties?.lineColorHex) ?? axisColor ?? \"#333333\";\n const chartStyleId = typeof chart.chartStyleId === \"number\" ? chart.chartStyleId : null;\n const closeAccent = chartStyleId != null && chartStyleId >= 128 ? \"#c0504d\" : lineColor;\n const lowAccent = chartStyleId != null && chartStyleId >= 128 ? \"#d9a3a0\" : lightenColor(lineColor, 0.45);\n return {\n closeAccent,\n downFill: lightenColor(lineColor, 0.4),\n lineColor,\n lowAccent,\n openAccent: lightenColor(lineColor, 0.22),\n upFill: \"#ffffff\",\n volumeFill: lightenColor(lineColor, 0.26)\n };\n}\n\nfunction buildStockLegendItems(chart: XlsxChart, palette: ChartRendererPalette): LegendItem[] {\n const axisColor = chart.axisLineColor ?? chart.chartAreaBorderColor ?? palette.border;\n const roles = resolveStockRoleIndices(chart);\n const stockPalette = resolveStockPalette(chart, axisColor);\n return chart.series.map((series, index) => {\n let color = stockPalette.lineColor;\n if (roles.volume === index) {\n color = stockPalette.volumeFill;\n } else if (roles.open === index) {\n color = stockPalette.openAccent;\n } else if (roles.low === index) {\n color = stockPalette.lowAccent;\n } else if (roles.close === index) {\n color = stockPalette.closeAccent;\n }\n return {\n color,\n label: series.name ?? `Series ${index + 1}`\n };\n });\n}\n\nfunction getLegendItems(chart: XlsxChart, chartType: string, palette: ChartRendererPalette): LegendItem[] {\n if (!chart.legend) {\n return [];\n }\n if (isComboChart(chart)) {\n return getComboLegendSeries(chart);\n }\n if (chartType === \"Stock\") {\n return buildStockLegendItems(chart, palette);\n }\n if (chartType === \"Surface\") {\n return buildSurfaceLegendItems(chart, palette);\n }\n if (chartType === \"RegionMap\") {\n return buildRegionMapLegendItems(chart);\n }\n if (chartType === \"Sunburst\" || chartType === \"Treemap\") {\n const hierarchyData = buildHierarchyData(chart);\n if (!hierarchyData?.children) {\n return [];\n }\n return hierarchyData.children.map((child, index) => ({\n color: chartSeriesColor(chart, child.colorIndex ?? index),\n label: child.name\n }));\n }\n if (chartType === \"Pie\" || chartType === \"Pie3D\" || chartType === \"PieExploded\" || chartType === \"Doughnut\" || chartType === \"BarOfPie\") {\n if (chartType === \"BarOfPie\") {\n const categories = getCategoryLabels(chart);\n const values = chart.series[0]?.values ?? [];\n return categories\n .map((label, index) => ({\n color: chartPointColor(chart, index),\n label: normalizeCategoryLabel(label),\n value: safeNumber(values[index]) ?? 0\n }))\n .filter((entry) => entry.value > 0 && entry.label.trim().length > 0)\n .map((entry) => ({\n color: entry.color,\n label: entry.label\n }));\n }\n return buildPieEntries(chart).map((entry) => ({\n color: entry.color,\n label: entry.label\n }));\n }\n const isXyLegend = (\n chartType === \"Scatter\"\n || chartType === \"ScatterLines\"\n || chartType === \"ScatterSmooth\"\n || chartType === \"Bubble\"\n );\n return chart.series.map((series, index) => ({\n color: isXyLegend\n ? (series.lineColor ?? series.markerColor ?? series.color ?? chartSeriesColor(chart, index))\n : chartSeriesColor(chart, index),\n label: series.name ?? `Series ${index + 1}`\n }));\n}\n\nfunction buildLayout(chart: XlsxChart, rect: XlsxImageRect, legendItems: LegendItem[]): ChartLayout {\n const width = Math.max(80, Math.round(rect.width));\n const height = Math.max(60, Math.round(rect.height));\n const isSurfaceChart = chart.chartType === \"Surface\"\n || (chart.raw && typeof chart.raw === \"object\" && typeof (chart.raw as Record<string, unknown>).xmlChartType === \"string\" && String((chart.raw as Record<string, unknown>).xmlChartType).includes(\"surface\"));\n const titleHeight = chart.title ? (isSurfaceChart ? 30 : 24) : 8;\n const legendPosition = normalizeLegendPosition(chart.legend?.position);\n\n const legendVertical = legendItems.length > 0 && (legendPosition === \"right\" || legendPosition === \"left\");\n const legendHorizontal = legendItems.length > 0 && (legendPosition === \"top\" || legendPosition === \"bottom\");\n\n const plotLeft = 42 + (legendPosition === \"left\" ? 98 : 0);\n const plotRight = 16 + (legendPosition === \"right\" ? 98 : 0);\n const plotTop = titleHeight + (legendPosition === \"top\" ? 24 : 0);\n const plotBottom = 28 + (legendPosition === \"bottom\" ? 24 : 0);\n\n const plotWidth = Math.max(40, width - plotLeft - plotRight);\n const plotHeight = Math.max(40, height - plotTop - plotBottom);\n\n const compactWidth = width <= 280;\n const compactHeight = height <= 200;\n const finalLegendPosition = compactWidth || compactHeight\n ? (legendVertical ? \"bottom\" : legendPosition)\n : legendPosition;\n\n return {\n height,\n legendItems,\n legendPosition: finalLegendPosition,\n plot: {\n height: Math.max(40, height - plotTop - plotBottom),\n left: plotLeft,\n top: plotTop,\n width: Math.max(40, width - plotLeft - plotRight)\n },\n titleHeight,\n width\n };\n}\n\nfunction buildNiceStep(minValue: number, maxValue: number, preferredTicks = 5) {\n const span = Math.max(1e-6, maxValue - minValue);\n const roughStep = span / Math.max(1, preferredTicks);\n const magnitude = 10 ** Math.floor(Math.log10(roughStep));\n const normalized = roughStep / magnitude;\n const niceNormalized = normalized <= 1 ? 1 : normalized <= 2 ? 2 : normalized <= 5 ? 5 : 10;\n return niceNormalized * magnitude;\n}\n\nfunction buildNumericTickValues(minValue: number, maxValue: number, majorUnit?: number) {\n if (!Number.isFinite(minValue) || !Number.isFinite(maxValue) || maxValue <= minValue) {\n return [];\n }\n const step = typeof majorUnit === \"number\" && majorUnit > 0\n ? majorUnit\n : buildNiceStep(minValue, maxValue, 5);\n if (!Number.isFinite(step) || step <= 0) {\n return [];\n }\n const start = Math.floor(minValue / step) * step;\n const values: number[] = [];\n for (let current = start; current <= maxValue + step * 0.001; current += step) {\n if (current >= minValue - step * 0.001 && current <= maxValue + step * 0.001) {\n values.push(Number(current.toFixed(8)));\n }\n }\n return values;\n}\n\nfunction resolveNumericAxisDomain(minValue: number, maxValue: number, majorUnit?: number, includeZero = false) {\n if (!Number.isFinite(minValue) || !Number.isFinite(maxValue)) {\n return {\n max: 1,\n min: 0,\n ticks: [0, 1]\n };\n }\n let domainMin = includeZero ? Math.min(0, minValue) : minValue;\n let domainMax = includeZero ? Math.max(0, maxValue) : maxValue;\n if (domainMax <= domainMin) {\n domainMax = domainMin + 1;\n }\n const step = typeof majorUnit === \"number\" && majorUnit > 0\n ? majorUnit\n : buildNiceStep(domainMin, domainMax, 5);\n const roundedMin = typeof majorUnit === \"number\" && majorUnit > 0\n ? domainMin\n : Math.floor(domainMin / step) * step;\n const roundedMax = typeof majorUnit === \"number\" && majorUnit > 0\n ? domainMax\n : Math.ceil(domainMax / step) * step;\n const finalMin = includeZero ? Math.min(0, roundedMin) : roundedMin;\n const finalMax = roundedMax <= finalMin ? finalMin + step : roundedMax;\n const ticks = buildNumericTickValues(finalMin, finalMax, step);\n return {\n max: finalMax,\n min: finalMin,\n ticks: ticks.length > 0 ? ticks : [finalMin, finalMax]\n };\n}\n\nfunction resolveAxisDomainWithChartOverrides(\n axis: XlsxChartAxis | null | undefined,\n minValue: number,\n maxValue: number,\n includeZero = false\n) {\n const hasExplicitMin = typeof axis?.min === \"number\" && Number.isFinite(axis.min);\n const hasExplicitMax = typeof axis?.max === \"number\" && Number.isFinite(axis.max);\n const rawMin = hasExplicitMin ? Number(axis?.min) : minValue;\n const rawMax = hasExplicitMax ? Number(axis?.max) : maxValue;\n const domain = resolveNumericAxisDomain(rawMin, rawMax, axis?.majorUnit, includeZero);\n return {\n hasExplicitMax,\n hasExplicitMin,\n majorUnit: axis?.majorUnit,\n max: hasExplicitMax ? Number(axis?.max) : domain.max,\n min: hasExplicitMin ? Number(axis?.min) : domain.min,\n ticks: (hasExplicitMin || hasExplicitMax)\n ? buildNumericTickValues(\n hasExplicitMin ? Number(axis?.min) : domain.min,\n hasExplicitMax ? Number(axis?.max) : domain.max,\n axis?.majorUnit\n )\n : domain.ticks\n };\n}\n\nfunction resolve3dFrameOffsets(chart: XlsxChart, baseDepthX = 11, baseDepthY = 8) {\n const depthRatio = clamp((chart.view3d?.depthPercent ?? 100) / 100, 0.35, 3.2);\n const rotX = clamp(chart.view3d?.rotX ?? 20, -80, 80);\n const rotY = clamp(chart.view3d?.rotY ?? 20, -80, 80);\n const usePerspective = chart.view3d?.rAngAx === false;\n const perspectiveStrength = clamp((chart.view3d?.perspective ?? (usePerspective ? 26 : 0)) / 100, 0, 1);\n const projectedOrigin = projectCartesian3dPoint(\n 0,\n 0,\n 0,\n rotX * (Math.PI / 180),\n rotY * (Math.PI / 180),\n usePerspective,\n perspectiveStrength\n );\n const projectedDepthPoint = projectCartesian3dPoint(\n 0,\n 0,\n 1,\n rotX * (Math.PI / 180),\n rotY * (Math.PI / 180),\n usePerspective,\n perspectiveStrength\n );\n const depthDirectionX = projectedDepthPoint.x - projectedOrigin.x;\n const depthDirectionY = projectedDepthPoint.y - projectedOrigin.y;\n const horizontalBias = clamp(1.42 + Math.abs(rotY) / 48 + depthRatio * 0.06, 1.5, 1.95);\n const verticalBias = clamp(1.18 + Math.abs(rotX) / 78, 1.22, 1.5);\n const biasedDepthDirectionX = depthDirectionX * horizontalBias;\n const biasedDepthDirectionY = depthDirectionY * verticalBias;\n const depthDirectionMagnitude = Math.hypot(biasedDepthDirectionX, biasedDepthDirectionY) || 1;\n const horizontalFactor = clamp(Math.abs(rotY) / 22, 0.55, 2.2);\n const verticalFactor = clamp(Math.abs(rotX) / 18, 0.45, 1.9);\n const legacyDepthX = Math.max(6, baseDepthX * depthRatio * horizontalFactor) * (rotY < 0 ? -1 : 1);\n const legacyDepthY = -Math.max(4, baseDepthY * depthRatio * verticalFactor);\n const depthMagnitude = Math.max(10, Math.hypot(legacyDepthX, legacyDepthY) * 1.34);\n const depthX = biasedDepthDirectionX / depthDirectionMagnitude * depthMagnitude;\n const depthY = biasedDepthDirectionY / depthDirectionMagnitude * depthMagnitude;\n return {\n depthRatio,\n depthX,\n depthY,\n insetBottom: Math.max(6, Math.abs(depthY) + 5),\n insetLeft: depthX < 0 ? Math.abs(depthX) + 4 : 0,\n insetRight: depthX > 0 ? depthX + 4 : 0,\n insetTop: Math.max(4, Math.abs(depthY) + 2)\n };\n}\n\nfunction formatTickValue(value: number) {\n if (Math.abs(value) >= 1000) {\n return value.toLocaleString(undefined, { maximumFractionDigits: 0 });\n }\n return value.toLocaleString(undefined, { maximumFractionDigits: 2 });\n}\n\nfunction formatPercentTickValue(value: number) {\n return `${formatTickValue(value)}%`;\n}\n\nfunction isLikelyDateFormatCode(formatCode: string | undefined) {\n if (!formatCode) {\n return false;\n }\n const normalized = formatCode\n .toLowerCase()\n .replace(/\\[[^\\]]*]/g, \" \")\n .replace(/\"[^\"]*\"/g, \" \")\n .replace(/\\\\./g, \" \");\n return /(?:d|m|y)/.test(normalized);\n}\n\nfunction excelSerialToDate(serial: number, use1904: boolean) {\n const wholeDays = Math.trunc(serial);\n const milliseconds = Math.round((serial - wholeDays) * 86_400_000);\n const baseUtc = use1904\n ? Date.UTC(1904, 0, 1)\n : Date.UTC(1899, 11, 30);\n return new Date(baseUtc + wholeDays * 86_400_000 + milliseconds);\n}\n\nfunction formatExcelDateSerial(value: number, formatCode: string | undefined, use1904: boolean) {\n const date = excelSerialToDate(value, use1904);\n const normalized = (formatCode ?? \"\").toLowerCase();\n const options: Intl.DateTimeFormatOptions = {};\n\n if (/yyyy/.test(normalized)) {\n options.year = \"numeric\";\n } else if (/yy/.test(normalized)) {\n options.year = \"2-digit\";\n }\n\n if (/mmmm/.test(normalized)) {\n options.month = \"long\";\n } else if (/mmm/.test(normalized)) {\n options.month = \"short\";\n } else if (/(^|[^a-z])m([^a-z]|$)|(^|[^a-z])mm([^a-z]|$)/.test(normalized)) {\n options.month = \"numeric\";\n }\n\n if (/dddd/.test(normalized)) {\n options.weekday = \"long\";\n } else if (/ddd/.test(normalized)) {\n options.weekday = \"short\";\n }\n\n if (/d/.test(normalized)) {\n options.day = \"numeric\";\n }\n\n if (Object.keys(options).length === 0) {\n options.month = \"short\";\n options.day = \"numeric\";\n }\n\n return new Intl.DateTimeFormat(undefined, options).format(date);\n}\n\nfunction formatCategoryLabel(chart: XlsxChart, value: unknown, fallback = \"\") {\n const rawRecord = chart.raw && typeof chart.raw === \"object\"\n ? chart.raw as Record<string, unknown>\n : null;\n const numeric = typeof value === \"number\" && Number.isFinite(value)\n ? value\n : null;\n const formatCode = chart.categoryAxis?.numberFormat?.formatCode;\n if (numeric != null && isLikelyDateFormatCode(formatCode)) {\n return formatExcelDateSerial(numeric, formatCode, rawRecord?.date1904 === true);\n }\n\n const normalized = normalizeCategoryLabel(value);\n if (normalized.length > 0) {\n return normalized;\n }\n return fallback;\n}\n\nfunction truncateSvgText(value: string, maxWidth: number, fontSize = 10) {\n if (!value || maxWidth <= 0) {\n return \"\";\n }\n const charWidth = Math.max(4.2, fontSize * 0.56);\n const maxChars = Math.max(1, Math.floor(maxWidth / charWidth));\n if (value.length <= maxChars) {\n return value;\n }\n if (maxChars <= 1) {\n return \"…\";\n }\n return `${value.slice(0, Math.max(0, maxChars - 1)).trimEnd()}…`;\n}\n\nfunction markerSymbolPath(symbol: string, size: number) {\n if (symbol === \"none\") {\n return \"\";\n }\n const symbolType = (() => {\n switch (symbol) {\n case \"diamond\":\n return symbolDiamond;\n case \"square\":\n return symbolSquare;\n case \"triangle\":\n case \"triangle-up\":\n return symbolTriangle;\n case \"cross\":\n case \"plus\":\n return symbolCross;\n case \"star\":\n return symbolStar;\n case \"circle\":\n default:\n return symbolCircle;\n }\n })();\n return d3Symbol().type(symbolType).size(size * size * Math.PI)() ?? \"\";\n}\n\nconst TWO_PI = Math.PI * 2;\n\nfunction normalizePieArc(startAngle: number, endAngle: number) {\n let start = startAngle;\n let end = endAngle;\n while (end < start) {\n end += TWO_PI;\n }\n return { end, start };\n}\n\nfunction resolvePieFrontSegments(startAngle: number, endAngle: number): Array<[number, number]> {\n const { start, end } = normalizePieArc(startAngle, endAngle);\n const segments: Array<[number, number]> = [];\n const minBand = Math.floor(start / TWO_PI) - 1;\n const maxBand = Math.ceil(end / TWO_PI) + 1;\n for (let band = minBand; band <= maxBand; band += 1) {\n const frontStart = Math.PI / 2 + band * TWO_PI;\n const frontEnd = Math.PI * 1.5 + band * TWO_PI;\n const segmentStart = Math.max(start, frontStart);\n const segmentEnd = Math.min(end, frontEnd);\n if (segmentEnd - segmentStart > 1e-4) {\n segments.push([segmentStart, segmentEnd]);\n }\n }\n return segments;\n}\n\nfunction pieEllipsePoint(\n centerX: number,\n centerY: number,\n radius: number,\n tilt: number,\n angle: number,\n depth = 0\n) {\n return {\n x: centerX + Math.sin(angle) * radius,\n y: centerY - Math.cos(angle) * radius * tilt + depth\n };\n}\n\nfunction toSvgNumber(value: number) {\n return Number(value.toFixed(3));\n}\n\nfunction buildPieOuterWallPath(\n centerX: number,\n centerY: number,\n radius: number,\n tilt: number,\n depth: number,\n startAngle: number,\n endAngle: number,\n fullArc = false\n) {\n const ry = radius * tilt;\n const segments = fullArc ? [[startAngle, endAngle] as [number, number]] : resolvePieFrontSegments(startAngle, endAngle);\n return segments.map(([segmentStart, segmentEnd]) => {\n const topStart = pieEllipsePoint(centerX, centerY, radius, tilt, segmentStart, 0);\n const topEnd = pieEllipsePoint(centerX, centerY, radius, tilt, segmentEnd, 0);\n const bottomStart = pieEllipsePoint(centerX, centerY, radius, tilt, segmentStart, depth);\n const bottomEnd = pieEllipsePoint(centerX, centerY, radius, tilt, segmentEnd, depth);\n const largeArc = segmentEnd - segmentStart > Math.PI ? 1 : 0;\n return [\n `M ${toSvgNumber(topStart.x)} ${toSvgNumber(topStart.y)}`,\n `A ${toSvgNumber(radius)} ${toSvgNumber(ry)} 0 ${largeArc} 1 ${toSvgNumber(topEnd.x)} ${toSvgNumber(topEnd.y)}`,\n `L ${toSvgNumber(bottomEnd.x)} ${toSvgNumber(bottomEnd.y)}`,\n `A ${toSvgNumber(radius)} ${toSvgNumber(ry)} 0 ${largeArc} 0 ${toSvgNumber(bottomStart.x)} ${toSvgNumber(bottomStart.y)}`,\n \"Z\"\n ].join(\" \");\n });\n}\n\nfunction isPieFrontFacingAngle(angle: number) {\n const normalized = ((angle % TWO_PI) + TWO_PI) % TWO_PI;\n return normalized > Math.PI / 2 && normalized < Math.PI * 1.5;\n}\n\nfunction buildPieRadialWallPath(\n centerX: number,\n centerY: number,\n radius: number,\n tilt: number,\n depth: number,\n angle: number,\n forceVisible = false\n) {\n if (!forceVisible && !isPieFrontFacingAngle(angle)) {\n return null;\n }\n const topCenter = { x: centerX, y: centerY };\n const bottomCenter = { x: centerX, y: centerY + depth };\n const topEdge = pieEllipsePoint(centerX, centerY, radius, tilt, angle, 0);\n const bottomEdge = pieEllipsePoint(centerX, centerY, radius, tilt, angle, depth);\n return [\n `M ${toSvgNumber(topCenter.x)} ${toSvgNumber(topCenter.y)}`,\n `L ${toSvgNumber(topEdge.x)} ${toSvgNumber(topEdge.y)}`,\n `L ${toSvgNumber(bottomEdge.x)} ${toSvgNumber(bottomEdge.y)}`,\n `L ${toSvgNumber(bottomCenter.x)} ${toSvgNumber(bottomCenter.y)}`,\n \"Z\"\n ].join(\" \");\n}\n\nfunction renderTitle(chart: XlsxChart, layout: ChartLayout, palette: ChartRendererPalette) {\n if (!chart.title) {\n return null;\n }\n const fontSize = 12;\n const text = truncateSvgText(chart.title, Math.max(40, layout.width - 12), fontSize);\n const baselineY = layout.titleHeight >= 30 ? 19 : 16;\n return (\n <text\n fill={chart.titleColor ?? chart.textColor ?? DEFAULT_CHART_TEXT_COLOR}\n fontFamily={buildChartFontFamily(chart.titleFontFamily ?? chart.fontFamily)}\n fontSize={fontSize}\n fontWeight={600}\n textAnchor=\"middle\"\n x={layout.width / 2}\n y={baselineY}\n >\n {text}\n </text>\n );\n}\n\nfunction renderLegend(chart: XlsxChart, layout: ChartLayout, palette: ChartRendererPalette) {\n if (!chart.legend || layout.legendItems.length === 0) {\n return null;\n }\n const textColor = resolveChartAxisTextColor(chart);\n const legendPos = layout.legendPosition;\n const items = layout.legendItems;\n const swatchSize = 8;\n const textOffset = swatchSize + 4;\n\n if (legendPos === \"left\" || legendPos === \"right\") {\n const x = legendPos === \"right\"\n ? layout.plot.left + layout.plot.width + 8\n : 8;\n const startY = layout.plot.top + 6;\n return (\n <g>\n {items.map((item, index) => {\n const y = startY + index * 18;\n return (\n <g\n {...(index < chart.series.length ? chartElementDataProps(index) : {})}\n data-xlsx-chart-element-kind={index < chart.series.length ? \"legendEntry\" : undefined}\n key={`legend-${index}`}\n transform={`translate(${x}, ${y})`}\n >\n <rect fill={item.color} height={swatchSize} rx={1.2} ry={1.2} width={swatchSize} x={0} y={-7} />\n <text fill={textColor} fontSize={10} x={textOffset} y={0}>\n {item.label}\n </text>\n </g>\n );\n })}\n </g>\n );\n }\n\n const rowY = legendPos === \"top\" ? (layout.titleHeight + 12) : (layout.height - 8);\n const totalWidth = items.reduce((sum, item) => sum + 24 + Math.min(96, item.label.length * 5.4), 0);\n let cursorX = Math.max(8, (layout.width - totalWidth) / 2);\n return (\n <g>\n {items.map((item, index) => {\n const labelWidth = Math.min(96, item.label.length * 5.4);\n const node = (\n <g\n {...(index < chart.series.length ? chartElementDataProps(index) : {})}\n data-xlsx-chart-element-kind={index < chart.series.length ? \"legendEntry\" : undefined}\n key={`legend-${index}`}\n transform={`translate(${cursorX}, ${rowY})`}\n >\n <rect fill={item.color} height={swatchSize} rx={1.2} ry={1.2} width={swatchSize} x={0} y={-7} />\n <text fill={textColor} fontSize={10} x={textOffset} y={0}>\n {item.label}\n </text>\n </g>\n );\n cursorX += 24 + labelWidth;\n return node;\n })}\n </g>\n );\n}\n\nfunction renderCartesianAxes(\n chart: XlsxChart,\n palette: ChartRendererPalette,\n plot: PlotRect,\n isHorizontal: boolean,\n categoryLabels: string[],\n categoryPositions: number[],\n valueTicks: number[],\n mapValue: (value: number) => number,\n formatValueTick: (value: number) => string = formatTickValue\n) {\n const axisColor = chart.axisLineColor ?? chart.chartAreaBorderColor ?? palette.border;\n const labelColor = resolveChartAxisTextColor(chart);\n const zeroPosition = mapValue(0);\n\n return (\n <g>\n {valueTicks.map((tick) => {\n const valuePosition = mapValue(tick);\n if (isHorizontal) {\n return (\n <g key={`grid-v-${tick}`}>\n <line\n stroke={lightenColor(axisColor, 0.7)}\n strokeWidth={1}\n x1={valuePosition}\n x2={valuePosition}\n y1={plot.top}\n y2={plot.top + plot.height}\n />\n <text\n fill={labelColor}\n fontSize={10}\n textAnchor=\"middle\"\n x={valuePosition}\n y={plot.top + plot.height + 14}\n >\n {formatValueTick(tick)}\n </text>\n </g>\n );\n }\n return (\n <g key={`grid-h-${tick}`}>\n <line\n stroke={lightenColor(axisColor, 0.7)}\n strokeWidth={1}\n x1={plot.left}\n x2={plot.left + plot.width}\n y1={valuePosition}\n y2={valuePosition}\n />\n <text\n fill={labelColor}\n fontSize={10}\n textAnchor=\"end\"\n x={plot.left - 6}\n y={valuePosition + 3}\n >\n {formatValueTick(tick)}\n </text>\n </g>\n );\n })}\n {categoryPositions.map((position, index) => {\n const label = categoryLabels[index] ?? \"\";\n if (isHorizontal) {\n return (\n <text\n key={`cat-y-${index}`}\n fill={labelColor}\n fontSize={10}\n textAnchor=\"end\"\n x={plot.left - 6}\n y={position + 3}\n >\n {label}\n </text>\n );\n }\n return (\n <text\n key={`cat-x-${index}`}\n fill={labelColor}\n fontSize={10}\n textAnchor=\"middle\"\n x={position}\n y={plot.top + plot.height + 14}\n >\n {label}\n </text>\n );\n })}\n {isHorizontal ? (\n <>\n <line\n stroke={axisColor}\n strokeWidth={1.2}\n x1={plot.left}\n x2={plot.left + plot.width}\n y1={plot.top + plot.height}\n y2={plot.top + plot.height}\n />\n <line\n stroke={axisColor}\n strokeWidth={1.2}\n x1={zeroPosition}\n x2={zeroPosition}\n y1={plot.top}\n y2={plot.top + plot.height}\n />\n </>\n ) : (\n <>\n <line\n stroke={axisColor}\n strokeWidth={1.2}\n x1={plot.left}\n x2={plot.left}\n y1={plot.top}\n y2={plot.top + plot.height}\n />\n <line\n stroke={axisColor}\n strokeWidth={1.2}\n x1={plot.left}\n x2={plot.left + plot.width}\n y1={zeroPosition}\n y2={zeroPosition}\n />\n </>\n )}\n </g>\n );\n}\n\nfunction scaleProjectedVector(vector: { x: number; y: number }, scale: number) {\n return {\n x: vector.x * scale,\n y: vector.y * scale\n };\n}\n\nfunction sampleProjectedEllipseArc(\n center: { x: number; y: number },\n axisA: { x: number; y: number },\n axisB: { x: number; y: number },\n startAngle: number,\n endAngle: number\n) {\n const steps = Math.max(12, Math.ceil(Math.abs(endAngle - startAngle) / (Math.PI / 14)));\n const points: Array<{ x: number; y: number }> = [];\n for (let step = 0; step <= steps; step += 1) {\n const ratio = step / steps;\n const angle = startAngle + ((endAngle - startAngle) * ratio);\n points.push({\n x: center.x + (axisA.x * Math.cos(angle)) + (axisB.x * Math.sin(angle)),\n y: center.y + (axisA.y * Math.cos(angle)) + (axisB.y * Math.sin(angle))\n });\n }\n return points;\n}\n\nfunction buildRibbonSvgPath(startArc: Array<{ x: number; y: number }>, endArc: Array<{ x: number; y: number }>) {\n if (startArc.length === 0 || endArc.length === 0) {\n return \"\";\n }\n return buildLinearSvgPath([...startArc, ...endArc.slice().reverse()], true);\n}\n\nfunction renderRadialFrustum(\n bar: BarRect,\n normalizedShape: \"cone\" | \"cylinder\",\n frontFill: string,\n sideFill: string,\n topFill: string\n) {\n const depthX = bar.depthX ?? (bar.isHorizontal ? 10 : 9);\n const depthY = bar.depthY ?? -7;\n const frontX = bar.left + (bar.depthOffsetX ?? 0);\n const frontY = bar.top + (bar.depthOffsetY ?? 0);\n const frontW = bar.width;\n const frontH = bar.height;\n const centerX = frontX + frontW / 2;\n const centerY = frontY + frontH / 2;\n const showStartCap = bar.capStart !== false;\n const showEndCap = bar.capEnd !== false;\n const startScale = normalizedShape === \"cone\" ? clamp(bar.bottomScale ?? 1, 0, 1) : 1;\n const endScale = normalizedShape === \"cone\" ? clamp(bar.topScale ?? 1, 0, 1) : 1;\n const radialDepthScale = normalizedShape === \"cylinder\"\n ? (bar.isHorizontal ? 0.52 : 0.48)\n : (bar.isHorizontal ? 0.7 : 0.58);\n const depthAxis = scaleProjectedVector({ x: depthX / 2, y: depthY / 2 }, radialDepthScale);\n const secondaryStrokeWidth = Math.max(0.6, bar.strokeWidth * 0.65);\n\n if (bar.isHorizontal) {\n const startCenter = { x: frontX + depthAxis.x, y: centerY + depthAxis.y };\n const endCenter = { x: frontX + frontW + depthAxis.x, y: centerY + depthAxis.y };\n const startAxisA = { x: 0, y: (frontH * startScale) / 2 };\n const endAxisA = { x: 0, y: (frontH * endScale) / 2 };\n const startAxisB = scaleProjectedVector(depthAxis, startScale);\n const endAxisB = scaleProjectedVector(depthAxis, endScale);\n const backStartArc = sampleProjectedEllipseArc(startCenter, startAxisA, startAxisB, 0, Math.PI);\n const backEndArc = sampleProjectedEllipseArc(endCenter, endAxisA, endAxisB, 0, Math.PI);\n const frontStartArc = sampleProjectedEllipseArc(startCenter, startAxisA, startAxisB, Math.PI, Math.PI * 2);\n const frontEndArc = sampleProjectedEllipseArc(endCenter, endAxisA, endAxisB, Math.PI, Math.PI * 2);\n const backWallPath = buildRibbonSvgPath(backEndArc, backStartArc);\n const frontWallPath = buildRibbonSvgPath(frontEndArc, frontStartArc);\n const endCapPath = endScale > 0.018\n ? buildLinearSvgPath(sampleProjectedEllipseArc(endCenter, endAxisA, endAxisB, 0, Math.PI * 2), true)\n : \"\";\n const startCapPath = startScale > 0.028\n ? buildLinearSvgPath(sampleProjectedEllipseArc(startCenter, startAxisA, startAxisB, 0, Math.PI * 2), true)\n : \"\";\n return (\n <g key={`${bar.key}-3d-horizontal-${normalizedShape}`}>\n {backWallPath ? <path d={backWallPath} fill={sideFill} stroke={bar.stroke} strokeWidth={secondaryStrokeWidth} /> : null}\n {showEndCap && endCapPath ? <path d={endCapPath} fill={topFill} stroke={bar.stroke} strokeWidth={secondaryStrokeWidth} /> : null}\n {frontWallPath ? <path d={frontWallPath} fill={frontFill} stroke={bar.stroke} strokeWidth={bar.strokeWidth} /> : null}\n {showStartCap && startCapPath ? <path d={startCapPath} fill={frontFill} stroke={bar.stroke} strokeWidth={secondaryStrokeWidth} /> : null}\n </g>\n );\n }\n\n const startCenter = { x: centerX + depthAxis.x, y: frontY + frontH + depthAxis.y };\n const endCenter = { x: centerX + depthAxis.x, y: frontY + depthAxis.y };\n const startAxisA = { x: (frontW * startScale) / 2, y: 0 };\n const endAxisA = { x: (frontW * endScale) / 2, y: 0 };\n const startAxisB = scaleProjectedVector(depthAxis, startScale);\n const endAxisB = scaleProjectedVector(depthAxis, endScale);\n const backStartArc = sampleProjectedEllipseArc(startCenter, startAxisA, startAxisB, 0, Math.PI);\n const backEndArc = sampleProjectedEllipseArc(endCenter, endAxisA, endAxisB, 0, Math.PI);\n const frontStartArc = sampleProjectedEllipseArc(startCenter, startAxisA, startAxisB, Math.PI, Math.PI * 2);\n const frontEndArc = sampleProjectedEllipseArc(endCenter, endAxisA, endAxisB, Math.PI, Math.PI * 2);\n const backWallPath = buildRibbonSvgPath(backEndArc, backStartArc);\n const frontWallPath = buildRibbonSvgPath(frontEndArc, frontStartArc);\n const endCapPath = endScale > 0.018\n ? buildLinearSvgPath(sampleProjectedEllipseArc(endCenter, endAxisA, endAxisB, 0, Math.PI * 2), true)\n : \"\";\n return (\n <g key={`${bar.key}-3d-${normalizedShape}`}>\n {backWallPath ? <path d={backWallPath} fill={sideFill} stroke={bar.stroke} strokeWidth={secondaryStrokeWidth} /> : null}\n {showEndCap && endCapPath ? <path d={endCapPath} fill={topFill} stroke={bar.stroke} strokeWidth={secondaryStrokeWidth} /> : null}\n {frontWallPath ? <path d={frontWallPath} fill={frontFill} stroke={bar.stroke} strokeWidth={bar.strokeWidth} /> : null}\n </g>\n );\n}\n\nfunction renderExtrudedRect(bar: BarRect) {\n const normalizedShape = (() => {\n switch (bar.shape3d) {\n case \"cone\":\n case \"coneToMax\":\n return \"cone\";\n case \"cylinder\":\n return \"cylinder\";\n case \"pyramid\":\n case \"pyramidToMax\":\n return \"pyramid\";\n default:\n return \"box\";\n }\n })();\n const depthX = bar.depthX ?? (bar.isHorizontal ? 10 : 9);\n const depthY = bar.depthY ?? -7;\n const frontX = bar.left + (bar.depthOffsetX ?? 0);\n const frontY = bar.top + (bar.depthOffsetY ?? 0);\n const frontW = bar.width;\n const frontH = bar.height;\n const frontX2 = frontX + frontW;\n const frontY2 = frontY + frontH;\n\n const sideAnchorX = frontX2;\n const sideDepthX = depthX;\n const centerX = frontX + frontW / 2;\n const bottomScale = clamp(bar.bottomScale ?? 1, 0.04, 1);\n const topScale = clamp(bar.topScale ?? 1, 0.04, 1);\n const bottomHalfWidth = (frontW * bottomScale) / 2;\n const topHalfWidth = (frontW * topScale) / 2;\n const bottomLeft = centerX - bottomHalfWidth;\n const bottomRight = centerX + bottomHalfWidth;\n const topLeft = centerX - topHalfWidth;\n const topRight = centerX + topHalfWidth;\n const showStartCap = bar.capStart !== false;\n const showEndCap = bar.capEnd !== false;\n\n const topFace = `${frontX},${frontY} ${frontX2},${frontY} ${frontX2 + sideDepthX},${frontY + depthY} ${frontX + sideDepthX},${frontY + depthY}`;\n const sideFace = `${sideAnchorX},${frontY} ${sideAnchorX},${frontY2} ${sideAnchorX + sideDepthX},${frontY2 + depthY} ${sideAnchorX + sideDepthX},${frontY + depthY}`;\n const frontFill = bar.gradientId ? `url(#${bar.gradientId})` : bar.color;\n const sideFill = bar.invertedNegative ? bar.color : darkenColor(bar.color, 0.22);\n const topFill = bar.invertedNegative ? lightenColor(bar.color, 0.04) : lightenColor(bar.color, 0.24);\n\n if (normalizedShape === \"cylinder\" || normalizedShape === \"cone\") {\n return renderRadialFrustum(bar, normalizedShape, frontFill, sideFill, topFill);\n }\n\n if (normalizedShape === \"box\") {\n return (\n <g key={`${bar.key}-3d`}>\n <polygon fill={sideFill} points={sideFace} stroke={bar.stroke} strokeWidth={Math.max(0.6, bar.strokeWidth * 0.65)} />\n <polygon fill={topFill} points={topFace} stroke={bar.stroke} strokeWidth={Math.max(0.6, bar.strokeWidth * 0.65)} />\n <rect fill={frontFill} height={frontH} stroke={bar.stroke} strokeWidth={bar.strokeWidth} width={frontW} x={frontX} y={frontY} />\n </g>\n );\n }\n\n if (bar.isHorizontal) {\n const centerY = frontY + frontH / 2;\n const startHalfHeight = (frontH * clamp(bar.bottomScale ?? 1, 0.04, 1)) / 2;\n const endHalfHeight = (frontH * clamp(bar.topScale ?? 1, 0.04, 1)) / 2;\n const startTop = centerY - startHalfHeight;\n const startBottom = centerY + startHalfHeight;\n const endTop = centerY - endHalfHeight;\n const endBottom = centerY + endHalfHeight;\n const topFacePoints = `${frontX},${startTop} ${frontX2},${endTop} ${frontX2 + sideDepthX},${endTop + depthY} ${frontX + sideDepthX},${startTop + depthY}`;\n const farSidePoints = `${frontX2},${endTop} ${frontX2},${endBottom} ${frontX2 + sideDepthX},${endBottom + depthY} ${frontX2 + sideDepthX},${endTop + depthY}`;\n\n const taperedFarFace = `${frontX2},${endTop} ${frontX2 + sideDepthX},${endTop + depthY} ${frontX2 + sideDepthX},${endBottom + depthY} ${frontX2},${endBottom}`;\n const frontPolygon = `${frontX},${startTop} ${frontX2},${endTop} ${frontX2},${endBottom} ${frontX},${startBottom}`;\n\n return (\n <g key={`${bar.key}-3d-horizontal-${normalizedShape}`}>\n <polygon fill={sideFill} points={taperedFarFace} stroke={bar.stroke} strokeWidth={Math.max(0.6, bar.strokeWidth * 0.65)} />\n <polygon fill={topFill} points={topFacePoints} stroke={bar.stroke} strokeWidth={Math.max(0.6, bar.strokeWidth * 0.65)} />\n <polygon fill={frontFill} points={frontPolygon} stroke={bar.stroke} strokeWidth={bar.strokeWidth} />\n </g>\n );\n }\n\n const taperedTopFace = `${topLeft},${frontY} ${topRight},${frontY} ${topRight + sideDepthX},${frontY + depthY} ${topLeft + sideDepthX},${frontY + depthY}`;\n const taperedSideFace = `${topRight},${frontY} ${bottomRight},${frontY2} ${bottomRight + sideDepthX},${frontY2 + depthY} ${topRight + sideDepthX},${frontY + depthY}`;\n const pyramidFrontFace = `${topLeft},${frontY} ${topRight},${frontY} ${bottomRight},${frontY2} ${bottomLeft},${frontY2}`;\n\n return (\n <g key={`${bar.key}-3d-${normalizedShape}`}>\n <polygon fill={sideFill} points={taperedSideFace} stroke={bar.stroke} strokeWidth={Math.max(0.6, bar.strokeWidth * 0.65)} />\n {showEndCap ? (\n <polygon fill={topFill} points={taperedTopFace} stroke={bar.stroke} strokeWidth={Math.max(0.6, bar.strokeWidth * 0.65)} />\n ) : null}\n <polygon fill={frontFill} points={pyramidFrontFace} stroke={bar.stroke} strokeWidth={bar.strokeWidth} />\n </g>\n );\n}\n\nfunction buildLinearSvgPath(points: Array<{ x: number; y: number }>, close = false) {\n if (points.length === 0) {\n return \"\";\n }\n const commands = points.map((point, index) => (\n `${index === 0 ? \"M\" : \"L\"} ${toSvgNumber(point.x)} ${toSvgNumber(point.y)}`\n ));\n if (close) {\n commands.push(\"Z\");\n }\n return commands.join(\" \");\n}\n\nfunction projectCartesian3dPoint(\n x: number,\n y: number,\n z: number,\n rotXRad: number,\n rotYRad: number,\n usePerspective: boolean,\n perspectiveStrength: number\n) {\n const cosX = Math.cos(rotXRad);\n const sinX = Math.sin(rotXRad);\n const cosY = Math.cos(rotYRad);\n const sinY = Math.sin(rotYRad);\n\n const x1 = x * cosY + z * sinY;\n const z1 = -x * sinY + z * cosY;\n const y1 = y * cosX - z1 * sinX;\n const z2 = y * sinX + z1 * cosX;\n const perspective = usePerspective\n ? 1 / Math.max(0.22, 1 + z2 * (0.26 + perspectiveStrength * 0.54))\n : 1;\n\n return {\n depth: z2,\n x: x1 * perspective,\n y: y1 * perspective\n };\n}\n\nfunction renderLineOrAreaChart3d(\n chart: XlsxChart,\n palette: ChartRendererPalette,\n layout: ChartLayout,\n categories: string[],\n stackedPointsBySeries: Array<Array<{ defined: boolean; y: number | null; y0: number | null; y1: number | null }>>,\n minValue: number,\n maxValue: number,\n isAreaChart: boolean,\n isStackedSeries: boolean,\n selectedChartElement?: XlsxChartElementSelection | null\n) {\n const plot = layout.plot;\n const valueDomain = resolveAxisDomainWithChartOverrides(\n chart.valueAxis,\n minValue,\n maxValue,\n isAreaChart || chart.valueAxis?.crosses === \"autoZero\"\n );\n minValue = valueDomain.min;\n maxValue = valueDomain.max;\n const valueSpan = Math.max(1e-6, maxValue - minValue);\n const seriesCount = Math.max(1, chart.series.length);\n const categoryCount = Math.max(1, categories.length);\n const depthScale = clamp((chart.view3d?.depthPercent ?? 100) / 100, 0.5, 4);\n const halfDepth = (seriesCount <= 1 ? 0.82 : 1.02) * depthScale;\n const frontZ = halfDepth;\n const backZ = -halfDepth;\n const baseValue = isAreaChart ? Math.max(minValue, Math.min(maxValue, 0)) : minValue;\n const rotXRad = clamp(chart.view3d?.rotX ?? 18, -80, 80) * (Math.PI / 180);\n const rotYRad = clamp(chart.view3d?.rotY ?? 24, -80, 80) * (Math.PI / 180);\n const usePerspective = chart.view3d?.rAngAx === false;\n const perspectiveStrength = clamp((chart.view3d?.perspective ?? (usePerspective ? 26 : 0)) / 100, 0, 1);\n\n const normalizeX = (categoryIndex: number) => (\n categoryCount <= 1 ? 0 : ((categoryIndex / (categoryCount - 1)) - 0.5) * 2\n );\n const normalizeY = (value: number) => (\n -((((value - minValue) / valueSpan) - 0.5) * 2)\n );\n const stackedAreaDepthSpan = isAreaChart && isStackedSeries\n ? Math.max(0.18, (frontZ - backZ) * 0.56)\n : 0;\n const stackedAreaBackZ = frontZ - stackedAreaDepthSpan;\n const normalizeZ = (seriesIndex: number) => (\n seriesCount <= 1 || (isAreaChart && isStackedSeries)\n ? frontZ * 0.94\n : (((seriesIndex / (seriesCount - 1)) - 0.5) * (frontZ - backZ))\n );\n const projectSeriesPoint = (x: number, value: number, z: number) => projectCartesian3dPoint(\n x,\n normalizeY(value),\n z,\n rotXRad,\n rotYRad,\n usePerspective,\n perspectiveStrength\n );\n\n const cubeCorners = [\n { x: -1, y: -1, z: backZ },\n { x: 1, y: -1, z: backZ },\n { x: 1, y: 1, z: backZ },\n { x: -1, y: 1, z: backZ },\n { x: -1, y: -1, z: frontZ },\n { x: 1, y: -1, z: frontZ },\n { x: 1, y: 1, z: frontZ },\n { x: -1, y: 1, z: frontZ }\n ].map((corner) => projectCartesian3dPoint(\n corner.x,\n corner.y,\n corner.z,\n rotXRad,\n rotYRad,\n usePerspective,\n perspectiveStrength\n ));\n\n const projectedSeries = stackedPointsBySeries.map((seriesPoints, seriesIndex) => {\n const z = normalizeZ(seriesIndex);\n return seriesPoints.map((point, categoryIndex) => {\n const x = normalizeX(categoryIndex);\n const topValue = isStackedSeries ? (point.y1 ?? point.y ?? baseValue) : (point.y ?? baseValue);\n const bottomValue = isAreaChart\n ? (isStackedSeries ? (point.y0 ?? baseValue) : baseValue)\n : baseValue;\n const top = projectSeriesPoint(x, topValue, z);\n const bottom = projectSeriesPoint(x, bottomValue, z);\n const topBack = isAreaChart && isStackedSeries\n ? projectSeriesPoint(x, topValue, stackedAreaBackZ)\n : null;\n const bottomBack = isAreaChart && isStackedSeries\n ? projectSeriesPoint(x, bottomValue, stackedAreaBackZ)\n : null;\n return {\n bottom,\n bottomBack,\n categoryIndex,\n defined: point.defined,\n depth: top.depth,\n depthBack: topBack?.depth ?? top.depth,\n top,\n topBack\n };\n });\n });\n\n const bounds = [\n ...cubeCorners,\n ...projectedSeries.flatMap((series) => series.flatMap((point) => point.defined\n ? [point.top, point.bottom, ...(point.topBack ? [point.topBack] : []), ...(point.bottomBack ? [point.bottomBack] : [])]\n : []))\n ];\n const minX = Math.min(...bounds.map((point) => point.x));\n const maxX = Math.max(...bounds.map((point) => point.x));\n const minY = Math.min(...bounds.map((point) => point.y));\n const maxY = Math.max(...bounds.map((point) => point.y));\n const scale = Math.min(\n plot.width / Math.max(0.4, maxX - minX),\n plot.height / Math.max(0.4, maxY - minY)\n ) * 0.82;\n const centerRawX = (minX + maxX) / 2;\n const centerRawY = (minY + maxY) / 2;\n const centerX = plot.left + plot.width / 2;\n const centerY = plot.top + plot.height / 2;\n const toScreenPoint = (point: { depth: number; x: number; y: number }) => ({\n depth: point.depth,\n x: centerX + (point.x - centerRawX) * scale,\n y: centerY + (point.y - centerRawY) * scale\n });\n\n const screenCorners = cubeCorners.map(toScreenPoint);\n const seriesGeometry = projectedSeries.map((series, seriesIndex) => ({\n averageDepth: series.reduce((sum, point) => sum + ((point.depth + point.depthBack) / 2), 0) / Math.max(1, series.length),\n points: series.map((point) => ({\n bottom: toScreenPoint(point.bottom),\n bottomBack: point.bottomBack ? toScreenPoint(point.bottomBack) : null,\n categoryIndex: point.categoryIndex,\n defined: point.defined,\n top: toScreenPoint(point.top),\n topBack: point.topBack ? toScreenPoint(point.topBack) : null\n })),\n seriesIndex\n })).sort((left, right) => left.averageDepth - right.averageDepth);\n\n const edgeColor = chart.axisLineColor ?? chart.chartAreaBorderColor ?? palette.border;\n const gridColor = lightenColor(edgeColor, 0.56);\n const labelColor = resolveChartAxisTextColor(chart);\n const boxEdges: Array<[number, number, boolean]> = [\n [0, 1, false], [1, 2, false], [2, 3, false], [3, 0, false],\n [4, 5, true], [5, 6, true], [6, 7, true], [7, 4, true],\n [0, 4, false], [1, 5, true], [2, 6, true], [3, 7, false]\n ];\n const yTicks = valueDomain.ticks;\n const xLabelPoints = categories.map((category, categoryIndex) => ({\n label: category,\n point: toScreenPoint(projectCartesian3dPoint(\n normalizeX(categoryIndex),\n -1.06,\n frontZ,\n rotXRad,\n rotYRad,\n usePerspective,\n perspectiveStrength\n ))\n }));\n const yLabelPoints = yTicks.map((tick) => ({\n point: toScreenPoint(projectCartesian3dPoint(\n -1.04,\n normalizeY(tick),\n frontZ,\n rotXRad,\n rotYRad,\n usePerspective,\n perspectiveStrength\n )),\n tick\n }));\n\n return (\n <g>\n {yTicks.map((tick) => {\n const yNorm = normalizeY(tick);\n const leftBack = toScreenPoint(projectCartesian3dPoint(-1, yNorm, backZ, rotXRad, rotYRad, usePerspective, perspectiveStrength));\n const rightBack = toScreenPoint(projectCartesian3dPoint(1, yNorm, backZ, rotXRad, rotYRad, usePerspective, perspectiveStrength));\n const leftFront = toScreenPoint(projectCartesian3dPoint(-1, yNorm, frontZ, rotXRad, rotYRad, usePerspective, perspectiveStrength));\n return (\n <g key={`line3d-grid-${tick}`}>\n <line stroke={gridColor} strokeWidth={1} x1={leftBack.x} x2={rightBack.x} y1={leftBack.y} y2={rightBack.y} />\n <line stroke={gridColor} strokeWidth={0.9} x1={leftBack.x} x2={leftFront.x} y1={leftBack.y} y2={leftFront.y} />\n </g>\n );\n })}\n {boxEdges.map(([startIndex, endIndex, emphasized], index) => {\n const start = screenCorners[startIndex];\n const end = screenCorners[endIndex];\n return (\n <line\n key={`line3d-box-${index}`}\n stroke={emphasized ? edgeColor : lightenColor(edgeColor, 0.34)}\n strokeWidth={emphasized ? 1.35 : 1}\n x1={start.x}\n x2={end.x}\n y1={start.y}\n y2={end.y}\n />\n );\n })}\n {seriesGeometry.map(({ points, seriesIndex }) => {\n const definedPoints = points.filter((point) => point.defined);\n if (definedPoints.length === 0) {\n return null;\n }\n const linePoints = definedPoints.map((point) => point.top);\n const areaPoints = isAreaChart\n ? [\n ...definedPoints.map((point) => point.top),\n ...definedPoints.slice().reverse().map((point) => point.bottom)\n ]\n : [];\n const areaBackPoints = isAreaChart && isStackedSeries\n ? [\n ...definedPoints.map((point) => point.topBack ?? point.top),\n ...definedPoints.slice().reverse().map((point) => point.bottomBack ?? point.bottom)\n ]\n : [];\n const strokeColor = chartSeriesStrokeColor(chart, seriesIndex);\n const fillColor = chartSeriesColor(chart, seriesIndex);\n const markerSymbol = normalizeChartMarkerSymbol(chart.series[seriesIndex]?.markerSymbol);\n const markerPath = markerSymbolPath(markerSymbol, Math.max(4, chart.series[seriesIndex]?.markerSize ?? 6) * 0.52);\n const slabFaces = isAreaChart && isStackedSeries\n ? definedPoints.slice(1).map((point, pointIndex) => {\n const previous = definedPoints[pointIndex];\n if (!previous?.topBack || !point.topBack || !previous.bottomBack || !point.bottomBack) {\n return null;\n }\n const topFace = buildLinearSvgPath([previous.top, point.top, point.topBack, previous.topBack], true);\n const bottomFace = buildLinearSvgPath([previous.bottom, point.bottom, point.bottomBack, previous.bottomBack], true);\n return (\n <React.Fragment key={`line3d-area-face-${seriesIndex}-${pointIndex}`}>\n <path\n {...chartElementDataProps(seriesIndex)}\n d={topFace}\n fill={lightenColor(fillColor, 0.08)}\n fillOpacity={0.8}\n stroke={darkenColor(fillColor, 0.16)}\n strokeWidth={0.8}\n />\n <path\n {...chartElementDataProps(seriesIndex)}\n d={bottomFace}\n fill={darkenColor(fillColor, 0.2)}\n fillOpacity={0.34}\n stroke={darkenColor(fillColor, 0.24)}\n strokeWidth={0.6}\n />\n </React.Fragment>\n );\n })\n : [];\n const firstDefinedPoint = definedPoints[0] ?? null;\n const lastDefinedPoint = definedPoints[definedPoints.length - 1] ?? null;\n const startCap = isAreaChart && isStackedSeries && firstDefinedPoint?.topBack && firstDefinedPoint?.bottomBack\n ? buildLinearSvgPath([\n firstDefinedPoint.top,\n firstDefinedPoint.bottom,\n firstDefinedPoint.bottomBack,\n firstDefinedPoint.topBack\n ], true)\n : \"\";\n const endCap = isAreaChart && isStackedSeries && lastDefinedPoint?.topBack && lastDefinedPoint?.bottomBack\n ? buildLinearSvgPath([\n lastDefinedPoint.top,\n lastDefinedPoint.bottom,\n lastDefinedPoint.bottomBack,\n lastDefinedPoint.topBack\n ], true)\n : \"\";\n\n return (\n <g key={`line3d-series-${seriesIndex}`}>\n {isAreaChart && isStackedSeries && areaBackPoints.length >= 3 ? (\n <path\n {...chartElementDataProps(seriesIndex)}\n d={buildLinearSvgPath(areaBackPoints, true)}\n fill={darkenColor(fillColor, 0.18)}\n fillOpacity={0.44}\n stroke={darkenColor(fillColor, 0.26)}\n strokeWidth={0.8}\n />\n ) : null}\n {slabFaces}\n {startCap ? (\n <path\n {...chartElementDataProps(seriesIndex)}\n d={startCap}\n fill={darkenColor(fillColor, 0.24)}\n fillOpacity={0.54}\n stroke={darkenColor(fillColor, 0.3)}\n strokeWidth={0.7}\n />\n ) : null}\n {endCap ? (\n <path\n {...chartElementDataProps(seriesIndex)}\n d={endCap}\n fill={darkenColor(fillColor, 0.14)}\n fillOpacity={0.6}\n stroke={darkenColor(fillColor, 0.24)}\n strokeWidth={0.7}\n />\n ) : null}\n {isAreaChart && areaPoints.length >= 3 ? (\n <path\n {...chartElementDataProps(seriesIndex)}\n d={buildLinearSvgPath(areaPoints, true)}\n fill={fillColor}\n fillOpacity={0.74}\n stroke={darkenColor(fillColor, 0.12)}\n strokeWidth={0.9}\n />\n ) : null}\n {!isAreaChart\n ? definedPoints.map((point, pointIndex) => (\n <line\n key={`line3d-drop-${seriesIndex}-${pointIndex}`}\n stroke={lightenColor(strokeColor, 0.44)}\n strokeDasharray=\"2 2\"\n strokeWidth={0.9}\n x1={point.top.x}\n x2={point.bottom.x}\n y1={point.top.y}\n y2={point.bottom.y}\n />\n ))\n : null}\n <path\n {...chartElementDataProps(seriesIndex)}\n d={buildLinearSvgPath(linePoints)}\n fill=\"none\"\n stroke={strokeColor}\n strokeLinejoin=\"round\"\n strokeWidth={Math.max(1.8, chart.series[seriesIndex]?.lineWidthPx ?? 2)}\n />\n {markerPath.length > 0\n ? definedPoints.map((point, pointIndex) => (\n <g\n key={`line3d-marker-${seriesIndex}-${pointIndex}`}\n transform={`translate(${toSvgNumber(point.top.x)}, ${toSvgNumber(point.top.y)})`}\n >\n <path\n {...chartElementDataProps(seriesIndex, point.categoryIndex)}\n d={markerPath}\n fill={chart.series[seriesIndex]?.markerColor ?? fillColor}\n stroke={chart.series[seriesIndex]?.markerLineColor ?? chart.chartAreaFillColor ?? palette.surface}\n strokeWidth={1}\n />\n </g>\n ))\n : null}\n {definedPoints.map((point) => (\n <circle\n {...chartElementDataProps(seriesIndex, point.categoryIndex)}\n cx={point.top.x}\n cy={point.top.y}\n fill=\"transparent\"\n key={`line3d-hit-${seriesIndex}-${point.categoryIndex}`}\n r={7}\n stroke=\"none\"\n />\n ))}\n {definedPoints.map((point) => (\n isSelectedChartPointOrSeries(selectedChartElement, chart.id, seriesIndex, point.categoryIndex)\n ? renderSelectionPointHandles(\n `line3d-selection-${seriesIndex}-${point.categoryIndex}`,\n [{ x: point.top.x, y: point.top.y }]\n )\n : null\n ))}\n </g>\n );\n })}\n {yLabelPoints.map(({ point, tick }) => (\n <text\n key={`line3d-y-label-${tick}`}\n fill={labelColor}\n fontSize={10}\n textAnchor=\"end\"\n x={point.x - 6}\n y={point.y + 3}\n >\n {formatTickValue(tick)}\n </text>\n ))}\n {xLabelPoints.map(({ label, point }, index) => (\n <text\n key={`line3d-x-label-${index}`}\n fill={labelColor}\n fontSize={10}\n textAnchor=\"middle\"\n x={point.x}\n y={point.y + 14}\n >\n {label}\n </text>\n ))}\n </g>\n );\n}\n\nfunction renderBarChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, chartType: string, selectedChartElement?: XlsxChartElementSelection | null) {\n if (chart.series.length === 0) {\n return null;\n }\n const sourceCategories = getCategoryLabels(chart);\n if (sourceCategories.length === 0) {\n return null;\n }\n const isPercentStacked = chartType === \"ColumnPercentStacked\" || chartType === \"BarPercentStacked\";\n const isHorizontal = chartType === \"BarClustered\" || chartType === \"BarStacked\" || chartType === \"BarPercentStacked\";\n const isHistogramLike = isHistogramLikeChart(chart) && chartType === \"ColumnClustered\";\n const shouldReverseCategories = isHorizontal && chart.categoryAxis?.orientation !== \"maxMin\";\n const categories = shouldReverseCategories ? sourceCategories.slice().reverse() : sourceCategories;\n const isStacked = chartType === \"ColumnStacked\" || chartType === \"BarStacked\" || isPercentStacked;\n const negativeFillMode: \"chartArea\" | \"none\" | \"series\" = isPercentStacked\n ? \"chartArea\"\n : chartType === \"ColumnClustered\"\n ? \"none\"\n : \"series\";\n const categoryCount = categories.length;\n const seriesCount = chart.series.length;\n const normalized3dShape = (() => {\n switch (chart.shape3d) {\n case \"cone\":\n case \"coneToMax\":\n return \"cone\";\n case \"cylinder\":\n return \"cylinder\";\n case \"pyramid\":\n case \"pyramidToMax\":\n return \"pyramid\";\n default:\n return \"box\";\n }\n })();\n const frameOffsets = chart.is3d ? resolve3dFrameOffsets(chart, isHorizontal ? 9 : 11, isHorizontal ? 7 : 8) : null;\n const plot = chart.is3d && frameOffsets\n ? {\n ...layout.plot,\n height: Math.max(20, layout.plot.height - frameOffsets.insetBottom - 2),\n left: layout.plot.left + frameOffsets.insetLeft,\n top: layout.plot.top + frameOffsets.insetTop,\n width: Math.max(20, layout.plot.width - frameOffsets.insetLeft - frameOffsets.insetRight - 2)\n }\n : layout.plot;\n\n const matrix = chart.series.map((series) => {\n const values = Array.from(\n { length: categoryCount },\n (_, categoryIndex) => safeNumber(series.values[categoryIndex]) ?? 0\n );\n return shouldReverseCategories ? values.reverse() : values;\n });\n const rawMatrix = matrix.map((row) => row.slice());\n\n if (isPercentStacked) {\n for (let categoryIndex = 0; categoryIndex < categoryCount; categoryIndex += 1) {\n const total = matrix.reduce((sum, row) => sum + Math.max(0, row[categoryIndex] ?? 0), 0);\n for (let seriesIndex = 0; seriesIndex < seriesCount; seriesIndex += 1) {\n matrix[seriesIndex][categoryIndex] = total > 0 ? ((matrix[seriesIndex][categoryIndex] ?? 0) / total) * 100 : 0;\n }\n }\n }\n\n const positiveTotals = Array.from({ length: categoryCount }, (_, categoryIndex) => (\n matrix.reduce((sum, row) => sum + Math.max(0, row[categoryIndex] ?? 0), 0)\n ));\n const negativeTotals = Array.from({ length: categoryCount }, (_, categoryIndex) => (\n Math.abs(matrix.reduce((sum, row) => sum + Math.min(0, row[categoryIndex] ?? 0), 0))\n ));\n\n let minValue = Number.POSITIVE_INFINITY;\n let maxValue = Number.NEGATIVE_INFINITY;\n if (isStacked) {\n for (let categoryIndex = 0; categoryIndex < categoryCount; categoryIndex += 1) {\n let positive = 0;\n let negative = 0;\n for (let seriesIndex = 0; seriesIndex < seriesCount; seriesIndex += 1) {\n const value = matrix[seriesIndex][categoryIndex] ?? 0;\n if (value >= 0) {\n positive += value;\n } else {\n negative += value;\n }\n }\n maxValue = Math.max(maxValue, positive);\n minValue = Math.min(minValue, negative);\n }\n } else {\n for (const row of matrix) {\n for (const value of row) {\n maxValue = Math.max(maxValue, value);\n minValue = Math.min(minValue, value);\n }\n }\n }\n if (!Number.isFinite(minValue) || !Number.isFinite(maxValue)) {\n minValue = 0;\n maxValue = 1;\n }\n\n const valueDomain = resolveAxisDomainWithChartOverrides(\n chart.valueAxis,\n minValue,\n maxValue,\n true\n );\n minValue = valueDomain.min;\n maxValue = valueDomain.max;\n\n const categoryBandPadding = isHistogramLike\n ? { inner: 0, outer: 0 }\n : resolveCategoryBandPadding(chart.gapWidth);\n const categoryScale = scaleBand<string>()\n .domain(categories)\n .range(isHorizontal ? [plot.top, plot.top + plot.height] : [plot.left, plot.left + plot.width])\n .paddingInner(categoryBandPadding.inner)\n .paddingOuter(categoryBandPadding.outer);\n\n const seriesScale = scaleBand<string>()\n .domain(Array.from({ length: seriesCount }, (_, index) => String(index)))\n .range([0, categoryScale.bandwidth()])\n .paddingInner(isHistogramLike ? 0 : 0.16)\n .paddingOuter(isHistogramLike ? 0 : 0.08);\n const usesSeriesDepthAxis = (\n chart.is3d === true\n && !isHorizontal\n && !isStacked\n && seriesCount > 1\n && chart.seriesAxis != null\n );\n const depthLaneSpread = usesSeriesDepthAxis\n ? clamp(1.26 + seriesCount * 0.16, 1.4, 1.96)\n : 1;\n const depthGridSpanX = usesSeriesDepthAxis && frameOffsets\n ? frameOffsets.depthX * depthLaneSpread\n : 0;\n const depthGridSpanY = usesSeriesDepthAxis && frameOffsets\n ? frameOffsets.depthY * depthLaneSpread\n : 0;\n const depthSlotX = usesSeriesDepthAxis ? depthGridSpanX / Math.max(1, seriesCount) : 0;\n const depthSlotY = usesSeriesDepthAxis ? depthGridSpanY / Math.max(1, seriesCount) : 0;\n const depthBarX = usesSeriesDepthAxis\n ? Math.sign(depthSlotX || frameOffsets?.depthX || 1) * Math.max(8, Math.abs(depthSlotX) * 1.14)\n : frameOffsets?.depthX;\n const depthBarY = usesSeriesDepthAxis\n ? Math.sign(depthSlotY || frameOffsets?.depthY || -1) * Math.max(5.5, Math.abs(depthSlotY) * 1.12)\n : frameOffsets?.depthY;\n\n const shouldReverseValueAxis = chart.valueAxis?.orientation === \"maxMin\";\n const valueScale = scaleLinear()\n .domain([minValue, maxValue])\n .range(\n isHorizontal\n ? (shouldReverseValueAxis ? [plot.left + plot.width, plot.left] : [plot.left, plot.left + plot.width])\n : (shouldReverseValueAxis ? [plot.top, plot.top + plot.height] : [plot.top + plot.height, plot.top])\n );\n\n const ticks = isPercentStacked\n ? buildNumericTickValues(minValue, maxValue, chart.valueAxis?.majorUnit ?? 20)\n : valueDomain.ticks;\n const categoryPositions = categories.map((category) => {\n const bandStart = categoryScale(category) ?? 0;\n return bandStart + categoryScale.bandwidth() / 2;\n });\n\n const bars: BarRect[] = [];\n const positive = Array.from({ length: categoryCount }, () => 0);\n const negative = Array.from({ length: categoryCount }, () => 0);\n\n for (let seriesIndex = 0; seriesIndex < seriesCount; seriesIndex += 1) {\n for (let categoryIndex = 0; categoryIndex < categoryCount; categoryIndex += 1) {\n const value = matrix[seriesIndex][categoryIndex] ?? 0;\n const rawValue = rawMatrix[seriesIndex][categoryIndex] ?? value;\n const pointIndex = shouldReverseCategories ? (categoryCount - 1 - categoryIndex) : categoryIndex;\n const pointStyle = chart.series[seriesIndex]?.dataPointStyles?.find((entry) => entry.index === pointIndex);\n let start = 0;\n let end = value;\n if (isStacked) {\n if (value >= 0) {\n start = positive[categoryIndex];\n positive[categoryIndex] += value;\n end = positive[categoryIndex];\n } else {\n start = negative[categoryIndex];\n negative[categoryIndex] += value;\n end = negative[categoryIndex];\n }\n }\n\n const colors = chartSeriesBarColors(chart, seriesIndex, rawValue, negativeFillMode);\n const isInvertedNegative = rawValue < 0 && chart.series[seriesIndex]?.invertIfNegative === true;\n if (!(isInvertedNegative)) {\n if (pointStyle?.color) {\n colors.fill = pointStyle.color;\n if (!pointStyle.lineColor) {\n colors.stroke = pointStyle.color;\n }\n }\n if (pointStyle?.lineColor) {\n colors.stroke = pointStyle.lineColor;\n }\n }\n if (isInvertedNegative && isPercentStacked && chart.is3d) {\n colors.fill = \"#ffffff\";\n }\n const category = categories[categoryIndex];\n const categoryStart = categoryScale(category) ?? 0;\n const barThickness = usesSeriesDepthAxis\n ? Math.max(7, categoryScale.bandwidth() * 0.4)\n : isHistogramLike\n ? categoryScale.bandwidth()\n : isStacked\n ? categoryScale.bandwidth()\n : seriesScale.bandwidth();\n const barOffset = usesSeriesDepthAxis\n ? Math.max(0, (categoryScale.bandwidth() - barThickness) * 0.5)\n : isHistogramLike\n ? 0\n : isStacked\n ? 0\n : (seriesScale(String(seriesIndex)) ?? 0);\n const depthOffsetX = usesSeriesDepthAxis ? depthSlotX * seriesIndex : 0;\n const depthOffsetY = usesSeriesDepthAxis ? depthSlotY * seriesIndex : 0;\n const depthOrder = depthOffsetX * (frameOffsets?.depthX ?? 0) + depthOffsetY * (frameOffsets?.depthY ?? 0);\n const shapeTaper = normalized3dShape === \"pyramid\"\n ? 0.94\n : normalized3dShape === \"cone\"\n ? 1\n : 0;\n let topScale = 1;\n let bottomScale = 1;\n if (chart.is3d && shapeTaper > 0) {\n const scaleAt = (ratio: number) => {\n const clampedRatio = clamp(ratio, 0, 1);\n const taperedRatio = normalized3dShape === \"cone\"\n ? Math.pow(clampedRatio, isHorizontal ? 1.85 : 1.08)\n : clampedRatio;\n return clamp(1 - (taperedRatio * shapeTaper), normalized3dShape === \"cone\" ? 0 : 0.04, 1);\n };\n if (rawValue >= 0) {\n const total = Math.max(1e-6, isStacked ? positiveTotals[categoryIndex] : Math.abs(rawValue));\n bottomScale = scaleAt(isStacked ? start / total : 0);\n topScale = scaleAt(isStacked ? end / total : 1);\n } else {\n const total = Math.max(1e-6, isStacked ? negativeTotals[categoryIndex] : Math.abs(rawValue));\n topScale = scaleAt(isStacked ? Math.abs(start) / total : 0);\n bottomScale = scaleAt(isStacked ? Math.abs(end) / total : 1);\n }\n }\n\n if (isHorizontal) {\n const x1 = valueScale(start);\n const x2 = valueScale(end);\n const maxPositive = positiveTotals[categoryIndex] ?? 0;\n const maxNegative = negativeTotals[categoryIndex] ?? 0;\n bars.push({\n capEnd: !isStacked || (rawValue >= 0\n ? Math.abs(end - maxPositive) < 1e-6\n : Math.abs(end - maxNegative) < 1e-6),\n capStart: !isStacked || Math.abs(start) < 1e-6,\n bottomScale,\n categoryIndex,\n color: colors.fill,\n depthOrder,\n depthOffsetX,\n depthOffsetY,\n height: Math.max(1, barThickness),\n isHorizontal: true,\n key: `bar-${seriesIndex}-${categoryIndex}`,\n left: Math.min(x1, x2),\n depthX: usesSeriesDepthAxis ? depthBarX : frameOffsets?.depthX,\n depthY: usesSeriesDepthAxis ? depthBarY : frameOffsets?.depthY,\n shape3d: normalized3dShape,\n seriesIndex,\n stroke: colors.stroke,\n strokeWidth: colors.strokeWidth,\n topScale,\n top: categoryStart + barOffset,\n invertedNegative: isInvertedNegative,\n value: rawValue,\n width: Math.max(1, Math.abs(x2 - x1))\n });\n } else {\n const y1 = valueScale(start);\n const y2 = valueScale(end);\n const maxPositive = positiveTotals[categoryIndex] ?? 0;\n const maxNegative = negativeTotals[categoryIndex] ?? 0;\n bars.push({\n capEnd: !isStacked || (rawValue >= 0\n ? Math.abs(end - maxPositive) < 1e-6\n : Math.abs(end - maxNegative) < 1e-6),\n capStart: !isStacked || Math.abs(start) < 1e-6,\n bottomScale,\n categoryIndex,\n color: colors.fill,\n depthOrder,\n depthOffsetX,\n depthOffsetY,\n height: Math.max(1, Math.abs(y2 - y1)),\n isHorizontal: false,\n key: `bar-${seriesIndex}-${categoryIndex}`,\n left: categoryStart + barOffset,\n depthX: usesSeriesDepthAxis ? depthBarX : frameOffsets?.depthX,\n depthY: usesSeriesDepthAxis ? depthBarY : frameOffsets?.depthY,\n shape3d: normalized3dShape,\n seriesIndex,\n stroke: colors.stroke,\n strokeWidth: colors.strokeWidth,\n topScale,\n top: Math.min(y1, y2),\n invertedNegative: isInvertedNegative,\n value: rawValue,\n width: Math.max(1, barThickness)\n });\n }\n }\n }\n\n const renderedBars = chart.is3d && isStacked\n ? bars.slice().sort((left, right) => {\n if (left.categoryIndex !== right.categoryIndex) {\n return left.categoryIndex - right.categoryIndex;\n }\n const leftNegative = left.value < 0 ? 0 : 1;\n const rightNegative = right.value < 0 ? 0 : 1;\n if (leftNegative !== rightNegative) {\n return leftNegative - rightNegative;\n }\n if (isHorizontal) {\n if (left.left !== right.left) {\n return left.left - right.left;\n }\n return left.seriesIndex - right.seriesIndex;\n }\n if (left.top !== right.top) {\n return right.top - left.top;\n }\n return left.seriesIndex - right.seriesIndex;\n })\n : bars;\n const sortedBars = usesSeriesDepthAxis\n ? renderedBars.slice().sort((left, right) => {\n if ((left.depthOrder ?? 0) !== (right.depthOrder ?? 0)) {\n return (right.depthOrder ?? 0) - (left.depthOrder ?? 0);\n }\n if (left.categoryIndex !== right.categoryIndex) {\n return left.categoryIndex - right.categoryIndex;\n }\n return left.top - right.top;\n })\n : renderedBars;\n\n const useVertical3dGradient = chart.is3d && !isHorizontal;\n const gradientByColor = new Map<string, string>();\n if (useVertical3dGradient) {\n for (const bar of renderedBars) {\n if (!bar.color || bar.color === \"none\" || bar.color.startsWith(\"url(\")) {\n continue;\n }\n if (!gradientByColor.has(bar.color)) {\n gradientByColor.set(\n bar.color,\n `bar3d-front-${chart.id}-${gradientByColor.size}`.replace(/[^A-Za-z0-9_-]/g, \"-\")\n );\n }\n bar.gradientId = gradientByColor.get(bar.color);\n }\n }\n\n const axisNode = renderCartesianAxes(\n chart,\n palette,\n plot,\n isHorizontal,\n categories,\n categoryPositions,\n ticks,\n (value) => valueScale(value),\n isPercentStacked ? formatPercentTickValue : formatTickValue\n );\n const depthAxisColor = chart.axisLineColor ?? chart.chartAreaBorderColor ?? palette.border;\n const depthGridColor = lightenColor(depthAxisColor, 0.48);\n const frameDepthX = usesSeriesDepthAxis ? depthGridSpanX : (frameOffsets?.depthX ?? 0);\n const frameDepthY = usesSeriesDepthAxis ? depthGridSpanY : (frameOffsets?.depthY ?? 0);\n const depthAxisNode = usesSeriesDepthAxis && frameOffsets ? (\n <g>\n {Array.from({ length: categoryCount + 1 }, (_, boundaryIndex) => {\n const x = plot.left + ((boundaryIndex / Math.max(1, categoryCount)) * plot.width);\n return (\n <line\n key={`bar3d-floor-x-${boundaryIndex}`}\n stroke={depthGridColor}\n strokeWidth={0.9}\n x1={x}\n x2={x + depthGridSpanX}\n y1={plot.top + plot.height}\n y2={plot.top + plot.height + depthGridSpanY}\n />\n );\n })}\n {Array.from({ length: seriesCount + 1 }, (_, boundaryIndex) => {\n const ratio = boundaryIndex / Math.max(1, seriesCount);\n const offsetX = depthGridSpanX * ratio;\n const offsetY = depthGridSpanY * ratio;\n return (\n <line\n key={`bar3d-floor-z-${boundaryIndex}`}\n stroke={depthGridColor}\n strokeWidth={0.9}\n x1={plot.left + offsetX}\n x2={plot.left + plot.width + offsetX}\n y1={plot.top + plot.height + offsetY}\n y2={plot.top + plot.height + offsetY}\n />\n );\n })}\n {chart.series.map((series, seriesIndex) => {\n const ratio = (seriesIndex + 0.5) / Math.max(1, seriesCount);\n const x = plot.left + plot.width + depthGridSpanX * ratio;\n const y = plot.top + plot.height + depthGridSpanY * ratio;\n return (\n <text\n key={`bar3d-ser-label-${seriesIndex}`}\n fill={resolveChartAxisTextColor(chart)}\n fontSize={10}\n textAnchor=\"start\"\n x={x + 7}\n y={y + 3}\n >\n {series.name ?? `Series ${seriesIndex + 1}`}\n </text>\n );\n })}\n </g>\n ) : null;\n\n const frameNode = chart.is3d && frameOffsets ? (\n <g>\n <polygon\n fill={lightenColor(chart.chartAreaFillColor ?? palette.surface, 0.05)}\n points={`${plot.left},${plot.top + plot.height} ${plot.left + plot.width},${plot.top + plot.height} ${plot.left + plot.width + frameDepthX},${plot.top + plot.height + frameDepthY} ${plot.left + frameDepthX},${plot.top + plot.height + frameDepthY}`}\n stroke={lightenColor(chart.axisLineColor ?? palette.border, 0.2)}\n strokeWidth={1}\n />\n <polygon\n fill={lightenColor(chart.chartAreaFillColor ?? palette.surface, 0.12)}\n points={`${plot.left},${plot.top} ${plot.left + plot.width},${plot.top} ${plot.left + plot.width + frameDepthX},${plot.top + frameDepthY} ${plot.left + frameDepthX},${plot.top + frameDepthY}`}\n stroke={lightenColor(chart.axisLineColor ?? palette.border, 0.2)}\n strokeWidth={1}\n />\n </g>\n ) : null;\n\n return (\n <g>\n {useVertical3dGradient && gradientByColor.size > 0 ? (\n <defs>\n {Array.from(gradientByColor.entries()).map(([color, id]) => (\n <linearGradient id={id} key={id} x1=\"0%\" x2=\"0%\" y1=\"0%\" y2=\"100%\">\n <stop offset=\"0%\" stopColor={lightenColor(color, 0.28)} />\n <stop offset=\"42%\" stopColor={lightenColor(color, 0.12)} />\n <stop offset=\"100%\" stopColor={darkenColor(color, 0.1)} />\n </linearGradient>\n ))}\n </defs>\n ) : null}\n {axisNode}\n {frameNode}\n {depthAxisNode}\n {chart.is3d\n ? sortedBars.map((bar) => (\n <g key={`bar-hit-${bar.key}`} {...barChartElementDataProps(bar.seriesIndex, bar.categoryIndex)}>\n {renderExtrudedRect(bar)}\n </g>\n ))\n : renderedBars.map((bar) => (\n <rect\n {...barChartElementDataProps(bar.seriesIndex, bar.categoryIndex)}\n key={bar.key}\n fill={bar.color}\n height={bar.height}\n stroke={isHistogramLike ? \"none\" : bar.stroke}\n strokeWidth={isHistogramLike ? 0 : bar.strokeWidth}\n width={bar.width}\n x={bar.left}\n y={bar.top}\n />\n ))}\n {renderedBars.map((bar) => (\n isSelectedChartPoint(selectedChartElement, chart.id, bar.seriesIndex, bar.categoryIndex)\n || (\n isSelectedChartSeries(selectedChartElement, chart.id, bar.seriesIndex)\n && selectedChartElement?.kind !== \"point\"\n )\n ? renderSelectionRectHandles(`bar-selection-${bar.key}`, bar.left, bar.top, bar.width, bar.height)\n : null\n ))}\n </g>\n );\n}\n\nfunction renderLineOrAreaChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, chartType: string, selectedChartElement?: XlsxChartElementSelection | null) {\n if (chart.series.length === 0) {\n return null;\n }\n const categories = getCategoryLabels(chart);\n if (categories.length === 0) {\n return null;\n }\n const plot = layout.plot;\n const displayBlanksAs = chart.displayBlanksAs;\n const isAreaChart = chartType === \"Area\" || chartType === \"AreaStacked\" || chartType === \"AreaPercentStacked\";\n const isStackedArea = chartType === \"AreaStacked\" || chartType === \"AreaPercentStacked\";\n const isStackedLine = chartType === \"LineStacked\" || chartType === \"LinePercentStacked\";\n const isStackedSeries = isStackedArea || isStackedLine;\n const isPercentStackedSeries = chartType === \"AreaPercentStacked\" || chartType === \"LinePercentStacked\";\n const resolvedValuesBySeries = chart.series.map((series) => (\n categories.map((_, categoryIndex) => resolveRenderableSeriesValue(series.values[categoryIndex], displayBlanksAs))\n ));\n\n type SeriesPoint = {\n defined: boolean;\n y: number | null;\n y0: number | null;\n y1: number | null;\n };\n\n const stackedPointsBySeries: SeriesPoint[][] = isStackedSeries\n ? (() => {\n const positive = Array.from({ length: categories.length }, () => 0);\n const negative = Array.from({ length: categories.length }, () => 0);\n const categoryTotals = isPercentStackedSeries\n ? categories.map((_, categoryIndex) => {\n const total = resolvedValuesBySeries.reduce((sum, seriesValues) => (\n sum + (seriesValues[categoryIndex] ?? 0)\n ), 0);\n return Math.abs(total) < 1e-9 ? 1 : total;\n })\n : null;\n return chart.series.map((_, seriesIndex) => (\n categories.map((_, categoryIndex) => {\n const rawValue = resolvedValuesBySeries[seriesIndex]?.[categoryIndex] ?? null;\n if (rawValue == null) {\n return { defined: false, y: null, y0: null, y1: null };\n }\n const value = isPercentStackedSeries\n ? (rawValue / (categoryTotals?.[categoryIndex] ?? 1)) * 100\n : rawValue;\n if (value >= 0) {\n const start = positive[categoryIndex];\n const end = start + value;\n positive[categoryIndex] = end;\n return { defined: true, y: end, y0: start, y1: end };\n }\n const start = negative[categoryIndex];\n const end = start + value;\n negative[categoryIndex] = end;\n return { defined: true, y: end, y0: start, y1: end };\n })\n ));\n })()\n : chart.series.map((_, seriesIndex) => (\n categories.map((_, categoryIndex) => {\n const value = resolvedValuesBySeries[seriesIndex]?.[categoryIndex] ?? null;\n return {\n defined: value != null,\n y: value,\n y0: null,\n y1: value\n };\n })\n ));\n\n const stackedExtents = stackedPointsBySeries\n .flatMap((seriesPoints) => (\n seriesPoints.flatMap((point) => (\n point.defined\n ? [point.y0, point.y1].filter((value): value is number => value != null && Number.isFinite(value))\n : []\n ))\n ));\n if (stackedExtents.length === 0) {\n return null;\n }\n let minValue = Math.min(...stackedExtents);\n let maxValue = Math.max(...stackedExtents);\n if (isAreaChart) {\n minValue = Math.min(0, minValue);\n } else if ((chartType === \"Line\" || isStackedLine) && chart.valueAxis?.crosses === \"autoZero\") {\n minValue = Math.min(0, minValue);\n }\n if (isPercentStackedSeries) {\n const explicitMin = typeof chart.valueAxis?.min === \"number\" && Number.isFinite(chart.valueAxis.min)\n ? Number(chart.valueAxis.min)\n : Math.min(0, minValue);\n const explicitMax = typeof chart.valueAxis?.max === \"number\" && Number.isFinite(chart.valueAxis.max)\n ? Number(chart.valueAxis.max)\n : Math.max(100, maxValue);\n minValue = explicitMin;\n maxValue = explicitMax <= explicitMin ? explicitMin + 1 : explicitMax;\n } else {\n const valueDomain = resolveAxisDomainWithChartOverrides(\n chart.valueAxis,\n minValue,\n maxValue,\n isAreaChart || chart.valueAxis?.crosses === \"autoZero\"\n );\n minValue = valueDomain.min;\n maxValue = valueDomain.max;\n }\n\n const xScale = scalePoint<string>()\n .domain(categories)\n .range([plot.left, plot.left + plot.width]);\n const yScale = scaleLinear()\n .domain([minValue, maxValue])\n .range([plot.top + plot.height, plot.top]);\n\n const ticks = isPercentStackedSeries\n ? buildNumericTickValues(minValue, maxValue, chart.valueAxis?.majorUnit ?? 20)\n : resolveAxisDomainWithChartOverrides(\n chart.valueAxis,\n minValue,\n maxValue,\n isAreaChart || chart.valueAxis?.crosses === \"autoZero\"\n ).ticks;\n const categoryPositions = categories.map((category) => xScale(category) ?? plot.left);\n\n const curve: CurveFactory = curveLinear;\n const areaBaseline = yScale(Math.max(minValue, 0));\n const plotPointsBySeries = chart.series.map((_, seriesIndex) => (\n categories.map((category, categoryIndex) => {\n const point = stackedPointsBySeries[seriesIndex]?.[categoryIndex] ?? {\n defined: false,\n y: null,\n y0: null,\n y1: null\n };\n return {\n defined: point.defined,\n x: xScale(category) ?? plot.left,\n y: point.y,\n y0: point.y0,\n y1: point.y1\n };\n })\n ));\n\n if (chart.is3d) {\n return renderLineOrAreaChart3d(\n chart,\n palette,\n layout,\n categories,\n stackedPointsBySeries,\n minValue,\n maxValue,\n isAreaChart,\n isStackedSeries,\n selectedChartElement\n );\n }\n\n const rawRecord = chart.raw && typeof chart.raw === \"object\"\n ? chart.raw as Record<string, unknown>\n : null;\n const dropLinesRecord = rawRecord?.dropLines && typeof rawRecord.dropLines === \"object\"\n ? rawRecord.dropLines as Record<string, unknown>\n : null;\n const highLowLinesRecord = rawRecord?.highLowLines && typeof rawRecord.highLowLines === \"object\"\n ? rawRecord.highLowLines as Record<string, unknown>\n : null;\n const upDownBarsRecord = rawRecord?.upDownBars && typeof rawRecord.upDownBars === \"object\"\n ? rawRecord.upDownBars as Record<string, unknown>\n : null;\n const dropLineColor = normalizeRendererHexColor((dropLinesRecord?.shapeProperties as Record<string, unknown> | undefined)?.lineColorHex)\n ?? lightenColor(chart.axisLineColor ?? chart.chartAreaBorderColor ?? palette.border, 0.45);\n const highLowLineColor = normalizeRendererHexColor((highLowLinesRecord?.shapeProperties as Record<string, unknown> | undefined)?.lineColorHex)\n ?? chart.axisLineColor\n ?? chart.chartAreaBorderColor\n ?? palette.border;\n const upDownGapWidth = typeof upDownBarsRecord?.gapWidth === \"number\" && Number.isFinite(upDownBarsRecord.gapWidth)\n ? upDownBarsRecord.gapWidth\n : 150;\n const categoryStep = categoryPositions.length >= 2\n ? Math.min(...categoryPositions.slice(1).map((position, index) => Math.abs(position - (categoryPositions[index] ?? 0))).filter((value) => value > 0))\n : plot.width;\n const upDownBarWidth = clamp(categoryStep * (1 - resolveCategoryBandPadding(upDownGapWidth).inner) * 0.82, 3, 28);\n\n return (\n <g>\n {renderCartesianAxes(\n chart,\n palette,\n plot,\n false,\n categories,\n categoryPositions,\n ticks,\n (value) => yScale(value)\n )}\n {!isAreaChart && !isStackedSeries && highLowLinesRecord\n ? categories.map((_, categoryIndex) => {\n const yValues = plotPointsBySeries\n .map((seriesPoints) => seriesPoints[categoryIndex]?.y)\n .filter((value): value is number => value != null && Number.isFinite(value));\n if (yValues.length < 2) {\n return null;\n }\n const x = categoryPositions[categoryIndex] ?? plot.left;\n return (\n <line\n key={`high-low-${categoryIndex}`}\n stroke={highLowLineColor}\n strokeWidth={1}\n x1={x}\n x2={x}\n y1={yScale(Math.min(...yValues))}\n y2={yScale(Math.max(...yValues))}\n />\n );\n })\n : null}\n {!isAreaChart && !isStackedSeries && upDownBarsRecord && plotPointsBySeries.length >= 2\n ? categories.map((_, categoryIndex) => {\n const first = plotPointsBySeries[0]?.[categoryIndex];\n const second = plotPointsBySeries[1]?.[categoryIndex];\n if (!first || !second || first.y == null || second.y == null) {\n return null;\n }\n const top = yScale(Math.max(first.y, second.y));\n const bottom = yScale(Math.min(first.y, second.y));\n const isUpBar = second.y >= first.y;\n const fill = isUpBar ? darkenColor(highLowLineColor, 0.12) : \"#c0504d\";\n return (\n <rect\n key={`up-down-${categoryIndex}`}\n fill={fill}\n fillOpacity={0.92}\n height={Math.max(1, bottom - top)}\n stroke={darkenColor(fill, 0.18)}\n strokeWidth={1}\n width={upDownBarWidth}\n x={(categoryPositions[categoryIndex] ?? plot.left) - upDownBarWidth / 2}\n y={top}\n />\n );\n })\n : null}\n {chart.series.map((series, seriesIndex) => {\n const points = plotPointsBySeries[seriesIndex] ?? [];\n const lineStrokePoints = displayBlanksAs === \"span\"\n ? points.filter((point) => point.y != null)\n : points;\n const linePath = d3Line<{ x: number; y: number | null }>()\n .defined((point) => point.y != null)\n .x((point) => point.x)\n .y((point) => yScale(point.y ?? 0))\n .curve(curve)(lineStrokePoints) ?? \"\";\n\n const areaPath = isAreaChart\n ? d3Area<{ x: number; y: number | null; y0: number | null; y1: number | null }>()\n .defined((point) => (\n isStackedSeries\n ? point.y0 != null && point.y1 != null\n : point.y != null\n ))\n .x((point) => point.x)\n .y0((point) => (\n isStackedSeries\n ? yScale(point.y0 ?? 0)\n : areaBaseline\n ))\n .y1((point) => yScale((isStackedSeries ? point.y1 : point.y) ?? 0))\n .curve(curve)(points) ?? \"\"\n : \"\";\n\n const seriesFillColor = typeof series.shapeProperties?.xmlFillColor === \"string\"\n ? series.shapeProperties.xmlFillColor\n : chartSeriesColor(chart, seriesIndex);\n return (\n <g key={`line-series-${seriesIndex}`}>\n {!isAreaChart && !isStackedSeries && dropLinesRecord\n ? points.map((point, pointIndex) => (\n point.y == null ? null : (\n <line\n key={`drop-line-${seriesIndex}-${pointIndex}`}\n stroke={dropLineColor}\n strokeWidth={1}\n x1={point.x}\n x2={point.x}\n y1={yScale(point.y)}\n y2={areaBaseline}\n />\n )\n ))\n : null}\n {isAreaChart ? (\n <path\n {...chartElementDataProps(seriesIndex)}\n d={areaPath}\n fill={seriesFillColor}\n fillOpacity={1}\n stroke=\"none\"\n />\n ) : null}\n <path\n {...chartElementDataProps(seriesIndex)}\n d={linePath}\n fill=\"none\"\n stroke={chartSeriesStrokeColor(chart, seriesIndex)}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={Math.max(1.5, series.lineWidthPx ?? 2)}\n />\n {points.map((point, pointIndex) => (\n point.y == null ? null : (\n <circle\n {...chartElementDataProps(seriesIndex, pointIndex)}\n key={`line-marker-${seriesIndex}-${pointIndex}`}\n cx={point.x}\n cy={yScale(point.y)}\n fill={series.markerColor ?? chartSeriesColor(chart, seriesIndex)}\n r={Math.max(2, (series.markerSize ?? 6) * 0.25)}\n stroke={series.markerLineColor ?? chart.chartAreaFillColor ?? chartSeriesStrokeColor(chart, seriesIndex)}\n strokeWidth={1}\n />\n )\n ))}\n {points.map((point, pointIndex) => (\n point.y != null && (\n isSelectedChartPoint(selectedChartElement, chart.id, seriesIndex, pointIndex)\n || (\n isSelectedChartSeries(selectedChartElement, chart.id, seriesIndex)\n && selectedChartElement?.kind !== \"point\"\n )\n )\n ? isAreaChart\n ? renderSelectionPointHandles(`area-selection-${seriesIndex}-${pointIndex}`, [{ x: point.x, y: yScale(point.y) }])\n : renderSelectionRectHandles(\n `line-selection-${seriesIndex}-${pointIndex}`,\n point.x - 4,\n yScale(point.y) - 4,\n 8,\n 8\n )\n : null\n ))}\n </g>\n );\n })}\n </g>\n );\n}\n\nfunction renderComboChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, selectedChartElement?: XlsxChartElementSelection | null) {\n const groups = buildComboGroups(chart);\n const columnGroup = groups.find((group) => group.chartType.startsWith(\"Column\"));\n const lineGroup = groups.find((group) => group.chartType.startsWith(\"Line\"));\n if (!columnGroup || !lineGroup) {\n return null;\n }\n\n const primaryChart: XlsxChart = {\n ...chart,\n categoryAxis: columnGroup.categoryAxis ?? chart.categoryAxis,\n chartType: columnGroup.chartType,\n dataLabels: undefined,\n is3d: columnGroup.is3d ?? false,\n series: columnGroup.series,\n valueAxis: columnGroup.valueAxis ?? chart.valueAxis\n };\n const categories = getCategoryLabels(primaryChart);\n if (categories.length === 0) {\n return null;\n }\n\n const plot = layout.plot;\n const groupGapWidth = typeof columnGroup.raw?.gapWidth === \"number\" && Number.isFinite(columnGroup.raw.gapWidth)\n ? columnGroup.raw.gapWidth\n : columnGroup.gapWidth ?? chart.gapWidth;\n const histogramColumns = columnGroup.series.some((series) => isHistogramLikeSeries(series));\n const categoryBandPadding = histogramColumns\n ? { inner: 0, outer: 0 }\n : resolveCategoryBandPadding(groupGapWidth);\n const categoryScale = scaleBand<string>()\n .domain(categories)\n .range([plot.left, plot.left + plot.width])\n .paddingInner(categoryBandPadding.inner)\n .paddingOuter(categoryBandPadding.outer);\n const seriesScale = scaleBand<string>()\n .domain(Array.from({ length: columnGroup.series.length }, (_, index) => String(index)))\n .range([0, categoryScale.bandwidth()])\n .paddingInner(histogramColumns ? 0 : 0.16)\n .paddingOuter(histogramColumns ? 0 : 0.08);\n const categoryPositions = categories.map((category) => (\n (categoryScale(category) ?? plot.left) + categoryScale.bandwidth() / 2\n ));\n const resolveGlobalSeriesIndex = (series: XlsxChartSeries) => {\n const index = chart.series.findIndex((candidate) => candidate.id === series.id);\n return index >= 0 ? index : 0;\n };\n\n const primaryValues = columnGroup.series.flatMap((series) => (\n series.values.map((value) => safeNumber(value)).filter((value): value is number => value != null)\n ));\n const secondaryValues = lineGroup.series.flatMap((series) => (\n series.values.map((value) => safeNumber(value)).filter((value): value is number => value != null)\n ));\n if (primaryValues.length === 0 || secondaryValues.length === 0) {\n return null;\n }\n\n const primaryDomain = resolveNumericAxisDomain(\n typeof columnGroup.valueAxis?.min === \"number\" ? columnGroup.valueAxis.min : Math.min(...primaryValues),\n typeof columnGroup.valueAxis?.max === \"number\" ? columnGroup.valueAxis.max : Math.max(...primaryValues),\n columnGroup.valueAxis?.majorUnit,\n true\n );\n const secondaryDomain = resolveNumericAxisDomain(\n typeof lineGroup.valueAxis?.min === \"number\" ? lineGroup.valueAxis.min : Math.min(...secondaryValues),\n typeof lineGroup.valueAxis?.max === \"number\" ? lineGroup.valueAxis.max : Math.max(...secondaryValues),\n lineGroup.valueAxis?.majorUnit,\n false\n );\n const primaryScale = scaleLinear()\n .domain([primaryDomain.min, primaryDomain.max])\n .range([plot.top + plot.height, plot.top]);\n const secondaryScale = scaleLinear()\n .domain([secondaryDomain.min, secondaryDomain.max])\n .range([plot.top + plot.height, plot.top]);\n const axisColor = chart.axisLineColor ?? chart.chartAreaBorderColor ?? palette.border;\n const labelColor = resolveChartAxisTextColor(chart);\n\n return (\n <g>\n {renderCartesianAxes(\n primaryChart,\n palette,\n plot,\n false,\n categories,\n categoryPositions,\n primaryDomain.ticks,\n (value) => primaryScale(value)\n )}\n {secondaryDomain.ticks.map((tick) => {\n const y = secondaryScale(tick);\n return (\n <text\n key={`combo-secondary-tick-${tick}`}\n fill={labelColor}\n fontSize={10}\n textAnchor=\"start\"\n x={plot.left + plot.width + 6}\n y={y + 3}\n >\n {formatTickValue(tick)}\n </text>\n );\n })}\n <line\n stroke={axisColor}\n strokeWidth={1.2}\n x1={plot.left + plot.width}\n x2={plot.left + plot.width}\n y1={plot.top}\n y2={plot.top + plot.height}\n />\n {columnGroup.series.flatMap((series, seriesIndex) => categories.map((category, categoryIndex) => {\n const globalSeriesIndex = resolveGlobalSeriesIndex(series);\n const value = safeNumber(series.values[categoryIndex]) ?? 0;\n const categoryStart = categoryScale(category) ?? plot.left;\n const barWidth = Math.max(1, histogramColumns ? categoryScale.bandwidth() : seriesScale.bandwidth());\n const x = categoryStart + (histogramColumns ? 0 : (seriesScale(String(seriesIndex)) ?? 0));\n const y = primaryScale(Math.max(0, value));\n const zeroY = primaryScale(0);\n const height = Math.max(1, Math.abs(zeroY - primaryScale(value)));\n const selected = isSelectedChartPoint(selectedChartElement, chart.id, globalSeriesIndex, categoryIndex)\n || (\n isSelectedChartSeries(selectedChartElement, chart.id, globalSeriesIndex)\n && selectedChartElement?.kind !== \"point\"\n );\n return (\n <React.Fragment key={`combo-bar-${seriesIndex}-${categoryIndex}`}>\n <rect\n {...barChartElementDataProps(globalSeriesIndex, categoryIndex)}\n fill={series.color ?? series.lineColor ?? chartSeriesColor(primaryChart, seriesIndex)}\n height={height}\n stroke={selected ? \"#64748b\" : (histogramColumns ? \"none\" : (series.lineColor ?? series.color ?? chartSeriesStrokeColor(primaryChart, seriesIndex)))}\n strokeWidth={selected ? 2 : (histogramColumns ? 0 : 1)}\n width={barWidth}\n x={x}\n y={Math.min(y, zeroY)}\n />\n {selected\n ? renderSelectionRectHandles(\n `combo-bar-selection-${globalSeriesIndex}-${categoryIndex}`,\n x,\n Math.min(y, zeroY),\n barWidth,\n height\n )\n : null}\n </React.Fragment>\n );\n }))}\n {lineGroup.series.map((series, seriesIndex) => {\n const globalSeriesIndex = resolveGlobalSeriesIndex(series);\n const points = categories.map((category, categoryIndex) => ({\n x: (categoryScale(category) ?? plot.left) + categoryScale.bandwidth() / 2,\n y: safeNumber(series.values[categoryIndex])\n }));\n const lineStrokePoints = chart.displayBlanksAs === \"span\"\n ? points.filter((point) => point.y != null)\n : points;\n const path = d3Line<{ x: number; y: number | null }>()\n .defined((point) => point.y != null)\n .x((point) => point.x)\n .y((point) => secondaryScale(point.y ?? 0))\n .curve(curveLinear)(lineStrokePoints) ?? \"\";\n return (\n <g key={`combo-line-${seriesIndex}`}>\n <path\n {...chartElementDataProps(globalSeriesIndex)}\n d={path}\n fill=\"none\"\n stroke={series.lineColor ?? series.color ?? chartSeriesStrokeColor(chart, columnGroup.series.length + seriesIndex)}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={Math.max(1.5, series.lineWidthPx ?? 2)}\n />\n {points.map((point, pointIndex) => (\n point.y == null ? null : (\n <path\n {...chartElementDataProps(globalSeriesIndex, pointIndex)}\n d={markerSymbolPath(normalizeChartMarkerSymbol(series.markerSymbol), Math.max(4, series.markerSize ?? 7)) || markerSymbolPath(\"circle\", 7)}\n fill={series.markerColor ?? series.color ?? series.lineColor ?? chartSeriesColor(chart, columnGroup.series.length + seriesIndex)}\n key={`combo-line-marker-${seriesIndex}-${pointIndex}`}\n stroke={series.markerLineColor ?? chart.chartAreaFillColor ?? \"#ffffff\"}\n strokeWidth={1}\n transform={`translate(${point.x}, ${secondaryScale(point.y)})`}\n />\n )\n ))}\n {points.map((point, pointIndex) => (\n point.y != null && isSelectedChartPointOrSeries(selectedChartElement, chart.id, globalSeriesIndex, pointIndex)\n ? renderSelectionRectHandles(\n `combo-line-selection-${globalSeriesIndex}-${pointIndex}`,\n point.x - 4,\n secondaryScale(point.y) - 4,\n 8,\n 8\n )\n : null\n ))}\n </g>\n );\n })}\n </g>\n );\n}\n\nfunction renderScatterChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, smooth: boolean, selectedChartElement?: XlsxChartElementSelection | null) {\n const plot = layout.plot;\n const rawRecord = chart.raw && typeof chart.raw === \"object\"\n ? chart.raw as Record<string, unknown>\n : null;\n const normalizedTitle = typeof chart.title === \"string\" ? chart.title.trim().toLowerCase() : \"\";\n const scatterStyle = typeof chart.scatterStyle === \"string\"\n ? chart.scatterStyle\n : rawRecord && typeof rawRecord.scatterStyle === \"string\"\n ? rawRecord.scatterStyle\n : undefined;\n const styleDrawsLine = scatterStyle\n ? scatterStyle === \"line\" || scatterStyle === \"lineMarker\" || scatterStyle === \"smooth\" || scatterStyle === \"smoothMarker\"\n : true;\n const styleShowsMarkers = scatterStyle\n ? scatterStyle === \"marker\" || scatterStyle === \"lineMarker\" || scatterStyle === \"smoothMarker\"\n : true;\n const styleUsesSmoothCurve = scatterStyle\n ? scatterStyle === \"smooth\" || scatterStyle === \"smoothMarker\"\n : smooth;\n const titleForcesMarkerOnly = normalizedTitle.includes(\"marker only\");\n const titleForcesNoMarkers = normalizedTitle.includes(\"no markers\");\n const titleForcesWithMarkers = normalizedTitle.includes(\"with markers\");\n const pointsBySeries = chart.series.map((series) => {\n const yLength = series.values.length;\n const directXValues = Array.from({ length: yLength }, (_, index) => coerceLooseNumber(series.categories[index]));\n\n let resolvedXValues = directXValues;\n let usesSyntheticIndex = false;\n if (directXValues.filter((value) => value != null).length < Math.max(2, yLength - 1)) {\n const categories = series.categories ?? [];\n const pairedXValues = Array.from({ length: yLength }, (_, index) => {\n const candidates = [\n categories[index],\n categories[index * 2],\n categories[index * 2 + 1],\n categories[index + 1]\n ];\n for (const candidate of candidates) {\n const parsed = coerceLooseNumber(candidate);\n if (parsed != null) {\n return parsed;\n }\n }\n return null;\n });\n if (pairedXValues.filter((value) => value != null).length >= 2) {\n resolvedXValues = pairedXValues;\n } else {\n const numericPool = categories\n .map((entry) => coerceLooseNumber(entry))\n .filter((value): value is number => value != null);\n if (numericPool.length >= 2) {\n resolvedXValues = Array.from(\n { length: yLength },\n (_, index) => numericPool[index] ?? numericPool[numericPool.length - 1] ?? null\n );\n } else {\n usesSyntheticIndex = true;\n resolvedXValues = Array.from({ length: yLength }, (_, index) => index + 1);\n }\n }\n }\n\n const points = series.values.map((value, index) => {\n const x = coerceLooseNumber(resolvedXValues[index]);\n const y = safeNumber(value);\n return x == null || y == null ? null : { x, y };\n }).filter((point): point is { x: number; y: number } => point != null);\n return {\n pointCount: yLength,\n points,\n series,\n usesSyntheticIndex\n };\n });\n\n const allX = pointsBySeries.flatMap((series) => series.points.map((point) => point.x));\n const allY = pointsBySeries.flatMap((series) => series.points.map((point) => point.y));\n if (allX.length === 0 || allY.length === 0) {\n return null;\n }\n\n const hasExplicitMinX = typeof chart.categoryAxis?.min === \"number\" && Number.isFinite(chart.categoryAxis.min);\n const hasExplicitMaxX = typeof chart.categoryAxis?.max === \"number\" && Number.isFinite(chart.categoryAxis.max);\n const hasExplicitMinY = typeof chart.valueAxis?.min === \"number\" && Number.isFinite(chart.valueAxis.min);\n const hasExplicitMaxY = typeof chart.valueAxis?.max === \"number\" && Number.isFinite(chart.valueAxis.max);\n const hasSyntheticIndexAxis = pointsBySeries.some((series) => series.usesSyntheticIndex);\n const syntheticPointCount = Math.max(0, ...pointsBySeries.map((series) => series.pointCount));\n\n let minX = hasExplicitMinX ? Number(chart.categoryAxis?.min) : Math.min(...allX);\n let maxX = hasExplicitMaxX ? Number(chart.categoryAxis?.max) : Math.max(...allX);\n let minY = hasExplicitMinY ? Number(chart.valueAxis?.min) : Math.min(...allY);\n let maxY = hasExplicitMaxY ? Number(chart.valueAxis?.max) : Math.max(...allY);\n\n if (!hasExplicitMinX) {\n minX = hasSyntheticIndexAxis\n ? 0\n : chart.categoryAxis?.crosses === \"autoZero\"\n ? Math.min(0, minX)\n : minX;\n }\n if (!hasExplicitMaxX) {\n maxX = hasSyntheticIndexAxis\n ? Math.max(maxX, syntheticPointCount + 1)\n : chart.categoryAxis?.crosses === \"autoZero\"\n ? Math.max(0, maxX)\n : maxX;\n }\n if (!hasExplicitMinY && chart.valueAxis?.crosses === \"autoZero\") {\n minY = Math.min(0, minY);\n }\n if (!hasExplicitMaxY && chart.valueAxis?.crosses === \"autoZero\") {\n maxY = Math.max(0, maxY);\n }\n\n if (maxX <= minX) {\n maxX = minX + 1;\n }\n if (maxY <= minY) {\n maxY = minY + 1;\n }\n\n const xStep = typeof chart.categoryAxis?.majorUnit === \"number\" && chart.categoryAxis.majorUnit > 0\n ? chart.categoryAxis.majorUnit\n : buildNiceStep(minX, maxX, 5);\n const yStep = typeof chart.valueAxis?.majorUnit === \"number\" && chart.valueAxis.majorUnit > 0\n ? chart.valueAxis.majorUnit\n : buildNiceStep(minY, maxY, 5);\n\n if (!hasExplicitMinX && !hasSyntheticIndexAxis && Number.isFinite(xStep) && xStep > 0) {\n minX = Math.floor(minX / xStep) * xStep;\n }\n if (!hasExplicitMaxX && !hasSyntheticIndexAxis && Number.isFinite(xStep) && xStep > 0) {\n maxX = Math.ceil(maxX / xStep) * xStep;\n }\n if (!hasExplicitMinY && Number.isFinite(yStep) && yStep > 0) {\n minY = Math.floor(minY / yStep) * yStep;\n }\n if (!hasExplicitMaxY && Number.isFinite(yStep) && yStep > 0) {\n maxY = Math.ceil(maxY / yStep) * yStep;\n }\n\n const safeMaxX = maxX <= minX ? minX + 1 : maxX;\n const safeMaxY = maxY <= minY ? minY + 1 : maxY;\n\n const xScale = scaleLinear().domain([minX, safeMaxX]).range([plot.left, plot.left + plot.width]);\n const yScale = scaleLinear().domain([minY, safeMaxY]).range([plot.top + plot.height, plot.top]);\n const xMajorUnit = typeof chart.categoryAxis?.majorUnit === \"number\" && chart.categoryAxis.majorUnit > 0\n ? chart.categoryAxis.majorUnit\n : hasSyntheticIndexAxis\n ? 1\n : undefined;\n const yMajorUnit = typeof chart.valueAxis?.majorUnit === \"number\" && chart.valueAxis.majorUnit > 0\n ? chart.valueAxis.majorUnit\n : buildNiceStep(minY, safeMaxY, 6);\n const xTicks = buildNumericTickValues(minX, safeMaxX, xMajorUnit);\n const yTicks = buildNumericTickValues(minY, safeMaxY, yMajorUnit);\n const axisColor = chart.axisLineColor ?? chart.chartAreaBorderColor ?? palette.border;\n const labelColor = resolveChartAxisTextColor(chart);\n\n const hasZeroX = minX <= 0 && safeMaxX >= 0;\n const hasZeroY = minY <= 0 && safeMaxY >= 0;\n\n return (\n <g>\n {xTicks.map((tick) => (\n <g key={`scatter-x-${tick}`}>\n <line\n stroke={lightenColor(axisColor, 0.7)}\n strokeWidth={1}\n x1={xScale(tick)}\n x2={xScale(tick)}\n y1={plot.top}\n y2={plot.top + plot.height}\n />\n <text fill={labelColor} fontSize={10} textAnchor=\"middle\" x={xScale(tick)} y={plot.top + plot.height + 14}>\n {formatTickValue(tick)}\n </text>\n </g>\n ))}\n {yTicks.map((tick) => (\n <g key={`scatter-y-${tick}`}>\n <line\n stroke={lightenColor(axisColor, 0.7)}\n strokeWidth={1}\n x1={plot.left}\n x2={plot.left + plot.width}\n y1={yScale(tick)}\n y2={yScale(tick)}\n />\n <text fill={labelColor} fontSize={10} textAnchor=\"end\" x={plot.left - 6} y={yScale(tick) + 3}>\n {formatTickValue(tick)}\n </text>\n </g>\n ))}\n {hasZeroY ? (\n <line\n stroke={axisColor}\n strokeWidth={1.2}\n x1={plot.left}\n x2={plot.left + plot.width}\n y1={yScale(0)}\n y2={yScale(0)}\n />\n ) : null}\n {hasZeroX ? (\n <line\n stroke={axisColor}\n strokeWidth={1.2}\n x1={xScale(0)}\n x2={xScale(0)}\n y1={plot.top}\n y2={plot.top + plot.height}\n />\n ) : null}\n {pointsBySeries.map((seriesPoints, seriesIndex) => {\n const series = seriesPoints.series;\n const markerSize = Math.max(5, series.markerSize ?? 7);\n const markerPath = markerSymbolPath(\n normalizeChartMarkerSymbol(series.markerSymbol),\n markerSize * 0.55\n );\n const markerFill = series.lineColor ?? series.markerColor ?? series.color ?? chartSeriesStrokeColor(chart, seriesIndex);\n const shouldDrawLine = !titleForcesMarkerOnly\n && styleDrawsLine\n && series.shapeProperties?.xmlLineHidden !== true\n && seriesPoints.points.length > 1;\n const shouldDrawMarkers = !titleForcesNoMarkers\n && (titleForcesMarkerOnly || titleForcesWithMarkers || styleShowsMarkers)\n && markerPath.length > 0;\n const lineCurve = smooth || styleUsesSmoothCurve || series.smooth === true\n ? curveCatmullRom.alpha(0.5)\n : curveLinear;\n const linePath = shouldDrawLine\n ? d3Line<{ x: number; y: number }>()\n .x((point) => xScale(point.x))\n .y((point) => yScale(point.y))\n .curve(lineCurve)(seriesPoints.points) ?? \"\"\n : \"\";\n\n return (\n <g key={`scatter-series-${seriesIndex}`}>\n {shouldDrawLine && linePath.length > 0 ? (\n <path\n {...chartElementDataProps(seriesIndex)}\n d={linePath}\n fill=\"none\"\n stroke={series.lineColor ?? chartSeriesStrokeColor(chart, seriesIndex)}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={Math.max(1.2, series.lineWidthPx ?? 2)}\n />\n ) : null}\n {seriesPoints.points.map((point, pointIndex) => {\n if (!shouldDrawMarkers) {\n return null;\n }\n return (\n <g\n key={`scatter-point-${seriesIndex}-${pointIndex}`}\n transform={`translate(${xScale(point.x)}, ${yScale(point.y)})`}\n >\n <path\n {...chartElementDataProps(seriesIndex, pointIndex, { selectionMode: \"seriesFirst\" })}\n d={markerPath}\n fill={markerFill}\n stroke=\"none\"\n strokeWidth={0}\n />\n </g>\n );\n })}\n {seriesPoints.points.map((point, pointIndex) => (\n isSelectedChartPoint(selectedChartElement, chart.id, seriesIndex, pointIndex)\n || (\n isSelectedChartSeries(selectedChartElement, chart.id, seriesIndex)\n && selectedChartElement?.kind !== \"point\"\n )\n ? renderSelectionPointHandles(\n `scatter-selection-${seriesIndex}-${pointIndex}`,\n [{ x: xScale(point.x), y: yScale(point.y) }]\n )\n : null\n ))}\n </g>\n );\n })}\n </g>\n );\n}\n\nfunction renderBubbleChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, selectedChartElement?: XlsxChartElementSelection | null) {\n const plot = layout.plot;\n const pointsBySeries = chart.series.map((series) => (\n series.values.map((value, index) => {\n const x = safeNumber(series.categories[index]);\n const y = safeNumber(value);\n const bubble = safeNumber(series.bubbleSizes?.[index]);\n return x == null || y == null ? null : { bubble: bubble ?? 1, index, x, y };\n }).filter((point): point is { bubble: number; index: number; x: number; y: number } => point != null)\n ));\n\n const allX = pointsBySeries.flatMap((points) => points.map((point) => point.x));\n const allY = pointsBySeries.flatMap((points) => points.map((point) => point.y));\n const allBubble = pointsBySeries.flatMap((points) => points.map((point) => point.bubble));\n if (allX.length === 0 || allY.length === 0) {\n return null;\n }\n const minX = Math.min(...allX);\n const maxX = Math.max(...allX);\n const minY = Math.min(...allY);\n const maxY = Math.max(...allY);\n const bubbleMagnitudes = allBubble.map((value) => Math.sqrt(Math.max(0, value)));\n const minBubbleMagnitude = Math.min(...bubbleMagnitudes);\n const maxBubbleMagnitude = Math.max(...bubbleMagnitudes);\n\n const bubbleScaleFactor = clamp((chart.bubbleScale ?? 100) / 100, 0.2, 4);\n const minRadius = 4;\n const maxRadius = Math.max(minRadius + 2, 12 * bubbleScaleFactor);\n const radiusScale = scaleLinear()\n .domain([minBubbleMagnitude, maxBubbleMagnitude <= minBubbleMagnitude ? minBubbleMagnitude + 1 : maxBubbleMagnitude])\n .range([minRadius, maxRadius]);\n const safeMaxX = maxX <= minX ? minX + 1 : maxX;\n const safeMaxY = maxY <= minY ? minY + 1 : maxY;\n const xSpan = safeMaxX - minX;\n const ySpan = safeMaxY - minY;\n const xPad = Math.max(xSpan * 0.04, (xSpan * maxRadius) / Math.max(1, plot.width));\n const yPad = Math.max(ySpan * 0.06, (ySpan * maxRadius) / Math.max(1, plot.height));\n const xDomain = resolveAxisDomainWithChartOverrides(\n chart.categoryAxis,\n minX - xPad,\n safeMaxX + xPad,\n chart.categoryAxis?.crosses === \"autoZero\"\n );\n const yDomain = resolveAxisDomainWithChartOverrides(\n chart.valueAxis,\n minY - yPad,\n safeMaxY + yPad,\n chart.valueAxis?.crosses === \"autoZero\"\n );\n const xScale = scaleLinear().domain([xDomain.min, xDomain.max]).range([plot.left, plot.left + plot.width]);\n const yScale = scaleLinear().domain([yDomain.min, yDomain.max]).range([plot.top + plot.height, plot.top]);\n\n const xTicks = xDomain.ticks;\n const yTicks = yDomain.ticks;\n const axisColor = chart.axisLineColor ?? chart.chartAreaBorderColor ?? palette.border;\n const labelColor = resolveChartAxisTextColor(chart);\n const isBubble3d = chart.bubble3d === true || chart.is3d === true;\n const labelsEnabled = Boolean(\n chart.dataLabels?.showCategoryName\n || chart.dataLabels?.showSeriesName\n || chart.dataLabels?.showValue\n || chart.dataLabels?.showBubbleSize\n || chart.dataLabels?.showPercent\n );\n const bubbleTotals = pointsBySeries.map((points) => (\n points.reduce((sum, point) => sum + Math.abs(point.bubble), 0)\n ));\n\n return (\n <g>\n {xTicks.map((tick) => (\n <g key={`bubble-x-${tick}`}>\n <line\n stroke={lightenColor(axisColor, 0.72)}\n strokeWidth={1}\n x1={xScale(tick)}\n x2={xScale(tick)}\n y1={plot.top}\n y2={plot.top + plot.height}\n />\n <text fill={labelColor} fontSize={10} textAnchor=\"middle\" x={xScale(tick)} y={plot.top + plot.height + 14}>\n {formatTickValue(tick)}\n </text>\n </g>\n ))}\n {yTicks.map((tick) => (\n <g key={`bubble-y-${tick}`}>\n <line\n stroke={lightenColor(axisColor, 0.72)}\n strokeWidth={1}\n x1={plot.left}\n x2={plot.left + plot.width}\n y1={yScale(tick)}\n y2={yScale(tick)}\n />\n <text fill={labelColor} fontSize={10} textAnchor=\"end\" x={plot.left - 6} y={yScale(tick) + 3}>\n {formatTickValue(tick)}\n </text>\n </g>\n ))}\n <line stroke={axisColor} strokeWidth={1.2} x1={plot.left} x2={plot.left + plot.width} y1={plot.top + plot.height} y2={plot.top + plot.height} />\n <line stroke={axisColor} strokeWidth={1.2} x1={plot.left} x2={plot.left} y1={plot.top} y2={plot.top + plot.height} />\n {pointsBySeries.map((points, seriesIndex) => (\n <g key={`bubble-series-${seriesIndex}`}>\n {isBubble3d ? (\n <defs>\n <radialGradient id={`bubble3d-grad-${chart.id}-${seriesIndex}`} cx=\"35%\" cy=\"30%\" r=\"70%\">\n <stop offset=\"0%\" stopColor={lightenColor(chart.series[seriesIndex]?.color ?? chart.series[seriesIndex]?.lineColor ?? chartSeriesColor(chart, seriesIndex), 0.42)} />\n <stop offset=\"58%\" stopColor={chart.series[seriesIndex]?.color ?? chart.series[seriesIndex]?.lineColor ?? chartSeriesColor(chart, seriesIndex)} />\n <stop offset=\"100%\" stopColor={darkenColor(chart.series[seriesIndex]?.color ?? chart.series[seriesIndex]?.lineColor ?? chartSeriesColor(chart, seriesIndex), 0.18)} />\n </radialGradient>\n </defs>\n ) : null}\n {[...points]\n .sort((left, right) => {\n if (left.bubble !== right.bubble) {\n return right.bubble - left.bubble;\n }\n return left.index - right.index;\n })\n .map((point) => {\n const series = chart.series[seriesIndex];\n const baseColor = series?.color ?? series?.lineColor ?? chartSeriesColor(chart, seriesIndex);\n const radius = radiusScale(Math.sqrt(Math.max(0, point.bubble)));\n const pieces: string[] = [];\n if (chart.dataLabels?.showSeriesName && series?.name) {\n pieces.push(series.name);\n }\n if (chart.dataLabels?.showCategoryName) {\n pieces.push(formatTickValue(point.x));\n }\n if (chart.dataLabels?.showValue) {\n pieces.push(formatTickValue(point.y));\n }\n if (chart.dataLabels?.showBubbleSize) {\n pieces.push(formatTickValue(point.bubble));\n }\n if (chart.dataLabels?.showPercent) {\n pieces.push(`${Math.round((Math.abs(point.bubble) / Math.max(1, bubbleTotals[seriesIndex] ?? 1)) * 100)}%`);\n }\n return (\n <g key={`bubble-${seriesIndex}-${point.index}`}>\n <circle\n {...chartElementDataProps(seriesIndex, point.index, { selectionMode: \"seriesFirst\" })}\n cx={xScale(point.x)}\n cy={yScale(point.y)}\n fill={isBubble3d ? `url(#bubble3d-grad-${chart.id}-${seriesIndex})` : baseColor}\n fillOpacity={isBubble3d ? 0.98 : 0.78}\n r={radius}\n stroke={darkenColor(baseColor, 0.18)}\n strokeWidth={isBubble3d ? 1.2 : 1}\n />\n {isSelectedChartPoint(selectedChartElement, chart.id, seriesIndex, point.index)\n || (\n isSelectedChartSeries(selectedChartElement, chart.id, seriesIndex)\n && selectedChartElement?.kind !== \"point\"\n )\n ? renderSelectionRectHandles(\n `bubble-selection-${seriesIndex}-${point.index}`,\n xScale(point.x) - radius,\n yScale(point.y) - radius,\n radius * 2,\n radius * 2\n )\n : null}\n {isBubble3d ? (\n <ellipse\n cx={xScale(point.x) - radius * 0.16}\n cy={yScale(point.y) - radius * 0.22}\n fill=\"#ffffff\"\n opacity={0.22}\n rx={Math.max(1.5, radius * 0.34)}\n ry={Math.max(1, radius * 0.2)}\n />\n ) : null}\n {labelsEnabled && pieces.length > 0 ? (\n <text\n fill={resolveChartTextColor(chart)}\n fontSize={10}\n textAnchor=\"start\"\n x={xScale(point.x) + radius + 4}\n y={yScale(point.y) + 3}\n >\n {pieces.join(\", \")}\n </text>\n ) : null}\n </g>\n );\n })}\n </g>\n ))}\n </g>\n );\n}\n\nfunction renderRadarChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, selectedChartElement?: XlsxChartElementSelection | null) {\n if (chart.series.length === 0) {\n return null;\n }\n const categories = getCategoryLabels(chart);\n if (categories.length === 0) {\n return null;\n }\n const plot = layout.plot;\n const centerX = plot.left + plot.width * 0.5;\n const centerY = plot.top + plot.height * 0.52;\n const radius = Math.max(22, Math.min(plot.width, plot.height) * 0.38);\n const values = chart.series.flatMap((series) => (\n series.values\n .slice(0, categories.length)\n .map((value) => safeNumber(value))\n .filter((value): value is number => value != null)\n ));\n const hasExplicitMin = typeof chart.valueAxis?.min === \"number\" && Number.isFinite(chart.valueAxis.min);\n const hasExplicitMax = typeof chart.valueAxis?.max === \"number\" && Number.isFinite(chart.valueAxis.max);\n let minValue = hasExplicitMin\n ? Number(chart.valueAxis?.min)\n : Math.min(0, ...(values.length ? values : [0]));\n let maxValue = hasExplicitMax\n ? Number(chart.valueAxis?.max)\n : Math.max(1, ...(values.length ? values : [1]));\n if (chart.valueAxis?.crosses === \"autoZero\") {\n minValue = Math.min(0, minValue);\n }\n const safeMax = maxValue <= minValue ? minValue + 1 : maxValue;\n const span = Math.max(1e-6, safeMax - minValue);\n const candidateMajorUnit = typeof chart.valueAxis?.majorUnit === \"number\" && chart.valueAxis.majorUnit > 0\n ? chart.valueAxis.majorUnit\n : undefined;\n const preferredMajorUnit = candidateMajorUnit && span / candidateMajorUnit >= 3\n ? candidateMajorUnit\n : buildNiceStep(minValue, safeMax, 6);\n const ticks = buildNumericTickValues(minValue, safeMax, preferredMajorUnit);\n const axisColor = chart.axisLineColor ?? chart.chartAreaBorderColor ?? palette.border;\n const labelColor = resolveChartAxisTextColor(chart);\n const filled = chart.radarStyle === \"filled\";\n const showSpokes = chart.categoryAxis?.majorGridlines === true;\n\n const angleAt = (index: number) => (Math.PI * 2 * index) / categories.length - Math.PI / 2;\n const radialPoint = (index: number, valueRatio: number) => {\n const angle = angleAt(index);\n const r = radius * valueRatio;\n return {\n x: centerX + Math.cos(angle) * r,\n y: centerY + Math.sin(angle) * r\n };\n };\n\n return (\n <g>\n {ticks.map((tick, ringIndex) => {\n const ratio = (tick - minValue) / (safeMax - minValue);\n const ringPoints = categories.map((_, categoryIndex) => radialPoint(categoryIndex, ratio));\n const ringPath = d3Line<{ x: number; y: number }>()\n .x((point) => point.x)\n .y((point) => point.y)\n .curve(curveLinearClosed)(ringPoints) ?? \"\";\n return (\n <g key={`radar-ring-${ringIndex}`}>\n <path\n d={ringPath}\n fill={ringIndex % 2 === 0 ? \"transparent\" : lightenColor(chart.chartAreaFillColor ?? palette.surface, 0.04)}\n stroke={lightenColor(axisColor, 0.5)}\n strokeWidth={1}\n />\n <text fill={labelColor} fontSize={9} x={centerX + 4} y={centerY - radius * ratio + 3}>\n {formatTickValue(tick)}\n </text>\n </g>\n );\n })}\n {categories.map((category, categoryIndex) => {\n const edge = radialPoint(categoryIndex, 1);\n return (\n <g key={`radar-axis-${categoryIndex}`}>\n {showSpokes ? (\n <line stroke={lightenColor(axisColor, 0.52)} strokeWidth={1} x1={centerX} x2={edge.x} y1={centerY} y2={edge.y} />\n ) : null}\n <text\n fill={labelColor}\n fontSize={10}\n textAnchor=\"middle\"\n x={centerX + (edge.x - centerX) * 1.1}\n y={centerY + (edge.y - centerY) * 1.1}\n >\n {category}\n </text>\n </g>\n );\n })}\n {chart.series.map((series, seriesIndex) => {\n const points = categories.map((_, categoryIndex) => {\n const rawValue = safeNumber(series.values[categoryIndex]);\n if (rawValue == null) {\n return {\n defined: false,\n pointIndex: categoryIndex,\n ...radialPoint(categoryIndex, 0)\n };\n }\n const ratio = clamp((rawValue - minValue) / (safeMax - minValue), 0, 1);\n return {\n defined: true,\n pointIndex: categoryIndex,\n ...radialPoint(categoryIndex, ratio)\n };\n });\n const definedPoints = points.filter((point) => point.defined);\n if (definedPoints.length === 0) {\n return null;\n }\n const hasGap = points.some((point) => !point.defined);\n const polygon = d3Line<{ defined: boolean; x: number; y: number }>()\n .defined((point) => point.defined)\n .x((point) => point.x)\n .y((point) => point.y)\n .curve(hasGap ? curveLinear : curveLinearClosed)(points) ?? \"\";\n const color = chartSeriesColor(chart, seriesIndex);\n const markerSymbol = normalizeChartMarkerSymbol(series.markerSymbol);\n const markerSize = Math.max(4, series.markerSize ?? 6);\n const markerPath = markerSymbolPath(markerSymbol, markerSize * 0.5);\n\t const showMarkers = markerSymbol !== \"none\" && markerPath.length > 0;\n\t return (\n\t <g key={`radar-series-${seriesIndex}`}>\n\t {definedPoints.length >= 2 ? (\n\t <path\n\t {...chartElementDataProps(seriesIndex)}\n\t d={polygon}\n\t fill={filled && !hasGap && definedPoints.length >= 3 ? color : \"none\"}\n\t fillOpacity={filled ? 0.26 : 0}\n\t stroke={chartSeriesStrokeColor(chart, seriesIndex)}\n\t strokeWidth={1.8}\n\t />\n\t ) : null}\n\t {showMarkers\n\t ? definedPoints.map((point) => (\n\t <g\n\t key={`radar-point-${seriesIndex}-${point.pointIndex}`}\n\t transform={`translate(${point.x}, ${point.y})`}\n\t >\n\t <path\n\t {...chartElementDataProps(seriesIndex, point.pointIndex)}\n\t d={markerPath}\n\t fill={series.markerColor ?? color}\n\t stroke={series.markerLineColor ?? chart.chartAreaFillColor ?? palette.surface}\n\t strokeWidth={1}\n\t />\n\t </g>\n\t ))\n\t : null}\n\t {definedPoints.map((point) => (\n\t isSelectedChartPoint(selectedChartElement, chart.id, seriesIndex, point.pointIndex)\n\t || (\n\t isSelectedChartSeries(selectedChartElement, chart.id, seriesIndex)\n\t && selectedChartElement?.kind !== \"point\"\n\t )\n\t ? renderSelectionPointHandles(\n\t `radar-selection-${seriesIndex}-${point.pointIndex}`,\n\t [{ x: point.x, y: point.y }]\n\t )\n\t : null\n\t ))}\n\t </g>\n\t );\n })}\n </g>\n );\n}\n\nfunction renderPieChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, chartType: string, selectedChartElement?: XlsxChartElementSelection | null) {\n const pieSeriesIndex = selectPrimaryPieSeriesIndex(chart);\n const pieSeries = chart.series[pieSeriesIndex];\n const pieData = buildPieEntries(chart, pieSeriesIndex);\n if (pieData.length === 0) {\n return null;\n }\n\n const legendOnRight = layout.legendPosition === \"right\";\n const centerX = legendOnRight ? layout.plot.left + layout.plot.width * 0.42 : layout.plot.left + layout.plot.width * 0.5;\n const centerY = layout.plot.top + layout.plot.height * 0.54;\n const outerRadius = Math.max(16, Math.min(layout.plot.width, layout.plot.height) * (chartType === \"Doughnut\" ? 0.32 : 0.38));\n const innerRatio = chartType === \"Doughnut\" ? clamp((chart.holeSize ?? 56) / 100, 0.1, 0.9) : 0;\n const innerRadius = outerRadius * innerRatio;\n const startAngle = ((chart.firstSliceAngle ?? 0) * Math.PI) / 180;\n const arcs = d3Pie<{ color: string; index: number; label: string; value: number }>()\n .value((entry) => entry.value)\n .sort(null)\n .startAngle(startAngle)\n .endAngle(startAngle + Math.PI * 2)(pieData);\n\n const arcPath = d3Arc<typeof arcs[number]>()\n .innerRadius(innerRadius)\n .outerRadius(outerRadius);\n\n const isPie3d = chartType === \"Pie3D\" || (chartType === \"PieExploded\" && chart.is3d === true);\n const rotX = chart.view3d?.rotX ?? 20;\n const perspective = chart.view3d?.perspective ?? 30;\n const tiltFromRotX = clamp(0.14 + (rotX / 90) * 0.72, 0.12, 0.92);\n const perspectiveCompression = clamp(1 - (perspective / 180), 0.55, 1);\n const tilt = isPie3d ? clamp(tiltFromRotX * perspectiveCompression, 0.14, 0.78) : 1;\n const depthScale = (chart.view3d?.depthPercent ?? 100) / 100;\n const depth = isPie3d ? Math.max(9, outerRadius * 0.28 * depthScale) : 0;\n const dataLabelsEnabled = Boolean(chart.dataLabels?.showCategoryName || chart.dataLabels?.showPercent || chart.dataLabels?.showValue);\n const total = pieData.reduce((sum, entry) => sum + entry.value, 0);\n const shadowId = `pie3d-shadow-${chart.id}`.replace(/[^A-Za-z0-9_-]/g, \"-\");\n const baseShadowId = `pie3d-base-shadow-${chart.id}`.replace(/[^A-Za-z0-9_-]/g, \"-\");\n const sliceSeparatorColor = chart.chartAreaFillColor ?? \"#ffffff\";\n const labelBounds = {\n bottom: layout.height - 6,\n left: 6,\n right: layout.width - 6,\n top: layout.plot.top + 8\n };\n const pointLabelByIndex = new Map((chart.dataLabels?.pointLabels ?? []).map((label) => [label.index, label]));\n const centerValuePointLabel = chartType === \"Doughnut\"\n ? (chart.dataLabels?.pointLabels ?? []).find((label) => (\n label.deleted !== true\n && label.showValue === true\n && label.showCategoryName !== true\n && label.showPercent !== true\n && label.showSeriesName !== true\n && label.showBubbleSize !== true\n )) ?? null\n : null;\n const centerValueEntry = centerValuePointLabel\n ? pieData.find((entry) => entry.index === centerValuePointLabel.index) ?? null\n : null;\n const shouldRenderCenterValue = chartType === \"Doughnut\" && centerValueEntry != null;\n const centerValueLooksPercent = centerValueEntry != null\n && total > 0\n && total <= 1.0000001\n && centerValueEntry.value >= 0\n && centerValueEntry.value <= 1.0000001;\n const centerValueText = centerValueEntry == null\n ? \"\"\n : centerValueLooksPercent\n ? `${Math.round(centerValueEntry.value * 100)}%`\n : formatTickValue(centerValueEntry.value);\n const centerValueFontSize = shouldRenderCenterValue\n ? Math.max(\n 14,\n Math.min(\n Math.max(20, innerRadius * 0.72),\n (centerValuePointLabel?.fontSizePt ?? 28) * 0.85\n )\n )\n : 0;\n\n const resolveSliceExplosion = (pointIndex: number) => {\n const pointStyle = pieSeries?.dataPointStyles?.find((entry) => entry.index === pointIndex);\n const seriesExplosion = typeof pieSeries?.shapeProperties?.xmlExplosion === \"number\"\n ? pieSeries.shapeProperties.xmlExplosion\n : 0;\n const rawExplosion = Math.max(0, pointStyle?.explosion ?? seriesExplosion ?? 0);\n if (rawExplosion <= 0) {\n return 0;\n }\n // OOXML explosion values are percent-like offsets of the pie radius.\n return outerRadius * clamp(rawExplosion / 100, 0, 4);\n };\n const hasExplodedSlices = arcs.some((arc) => resolveSliceExplosion(arc.data.index) > 0);\n const sliceSeparatorWidth = hasExplodedSlices ? 2 : 1.2;\n\n return (\n <g>\n {isPie3d ? (\n <defs>\n <filter id={shadowId} x=\"-40%\" y=\"-40%\" width=\"180%\" height=\"200%\">\n <feDropShadow dx=\"1.2\" dy=\"3.6\" floodColor=\"#000000\" floodOpacity=\"0.28\" stdDeviation=\"2.8\" />\n </filter>\n <filter id={baseShadowId} x=\"-50%\" y=\"-50%\" width=\"220%\" height=\"220%\">\n <feGaussianBlur stdDeviation=\"3.2\" />\n </filter>\n </defs>\n ) : null}\n {isPie3d ? (\n <ellipse\n cx={centerX}\n cy={centerY + depth + 3}\n fill=\"#000000\"\n filter={`url(#${baseShadowId})`}\n opacity={0.14}\n rx={outerRadius * 1.02}\n ry={outerRadius * tilt * 0.68}\n />\n ) : null}\n {isPie3d\n ? arcs.map((arc) => {\n const midAngle = (arc.startAngle + arc.endAngle) / 2;\n const explosion = resolveSliceExplosion(arc.data.index);\n const explodeX = Math.sin(midAngle) * explosion;\n const explodeY = -Math.cos(midAngle) * explosion * tilt;\n const sidePaths = buildPieOuterWallPath(\n centerX,\n centerY,\n outerRadius,\n tilt,\n depth,\n arc.startAngle,\n arc.endAngle,\n explosion > 0\n );\n if (sidePaths.length === 0) {\n return null;\n }\n return (\n <g key={`pie-side-${arc.data.index}`} transform={`translate(${explodeX}, ${explodeY})`}>\n {sidePaths.map((sidePath, sideIndex) => (\n <path\n d={sidePath}\n fill={darkenColor(arc.data.color, 0.34)}\n key={`pie-side-path-${arc.data.index}-${sideIndex}`}\n stroke={darkenColor(arc.data.color, 0.5)}\n strokeWidth={0.8}\n />\n ))}\n {explosion > 0 ? (() => {\n const startWall = buildPieRadialWallPath(\n centerX,\n centerY,\n outerRadius,\n tilt,\n depth,\n arc.startAngle,\n true\n );\n const endWall = buildPieRadialWallPath(\n centerX,\n centerY,\n outerRadius,\n tilt,\n depth,\n arc.endAngle,\n true\n );\n return (\n <>\n {startWall ? (\n <path\n d={startWall}\n fill={darkenColor(arc.data.color, 0.26)}\n stroke={darkenColor(arc.data.color, 0.44)}\n strokeWidth={0.8}\n />\n ) : null}\n {endWall ? (\n <path\n d={endWall}\n fill={darkenColor(arc.data.color, 0.2)}\n stroke={darkenColor(arc.data.color, 0.4)}\n strokeWidth={0.8}\n />\n ) : null}\n </>\n );\n })() : null}\n </g>\n );\n })\n : null}\n {arcs.map((arc) => {\n const explosion = resolveSliceExplosion(arc.data.index);\n const midAngle = (arc.startAngle + arc.endAngle) / 2;\n const explodeX = Math.sin(midAngle) * explosion;\n const explodeY = -Math.cos(midAngle) * explosion * (isPie3d ? tilt : 1);\n const isSliceSelected = isSelectedChartPoint(selectedChartElement, chart.id, pieSeriesIndex, arc.data.index)\n || (\n isSelectedChartSeries(selectedChartElement, chart.id, pieSeriesIndex)\n && selectedChartElement?.kind !== \"point\"\n );\n const sliceHandlePoints = isSliceSelected\n ? [\n pieEllipsePoint(centerX, centerY, outerRadius, isPie3d ? tilt : 1, arc.startAngle),\n pieEllipsePoint(centerX, centerY, outerRadius, isPie3d ? tilt : 1, midAngle),\n pieEllipsePoint(centerX, centerY, outerRadius, isPie3d ? tilt : 1, arc.endAngle),\n innerRadius > 0\n ? pieEllipsePoint(centerX, centerY, innerRadius, isPie3d ? tilt : 1, midAngle)\n : { x: centerX, y: centerY }\n ].map((point) => ({\n x: point.x + explodeX,\n y: point.y + explodeY\n }))\n : [];\n const labelRadius = outerRadius + (chartType === \"PieExploded\" ? 8 : 12);\n const labelX = centerX + Math.sin(midAngle) * labelRadius + explodeX;\n const labelY = centerY - Math.cos(midAngle) * labelRadius * (isPie3d ? tilt : 1) + explodeY;\n const pieces: string[] = [];\n if (chart.dataLabels?.showCategoryName && arc.data.label.trim().length > 0) {\n pieces.push(arc.data.label);\n }\n const pointLabel = pointLabelByIndex.get(arc.data.index);\n const showValue = pointLabel?.showValue ?? chart.dataLabels?.showValue;\n const showPercent = pointLabel?.showPercent ?? chart.dataLabels?.showPercent;\n if (showValue) {\n pieces.push(formatTickValue(arc.data.value));\n }\n if (showPercent) {\n pieces.push(`${Math.round((arc.data.value / Math.max(1, total)) * 100)}%`);\n }\n const labelText = pieces.join(\", \");\n const truncatedLabelText = truncateSvgText(labelText, Math.max(48, layout.width * 0.42), 10);\n const approxLabelWidth = Math.max(12, truncatedLabelText.length * 5.6);\n let labelAnchor: \"end\" | \"start\" = labelX >= centerX ? \"start\" : \"end\";\n let resolvedLabelX = labelX;\n if (labelAnchor === \"start\" && resolvedLabelX + approxLabelWidth > labelBounds.right) {\n labelAnchor = \"end\";\n }\n if (labelAnchor === \"end\" && resolvedLabelX - approxLabelWidth < labelBounds.left) {\n labelAnchor = \"start\";\n }\n resolvedLabelX = clamp(resolvedLabelX, labelBounds.left, labelBounds.right);\n const resolvedLabelY = clamp(labelY, labelBounds.top, labelBounds.bottom);\n return (\n <React.Fragment key={`pie-top-${arc.data.index}`}>\n <g transform={`translate(${explodeX}, ${explodeY})`}>\n <path\n {...chartElementDataProps(pieSeriesIndex, arc.data.index)}\n d={(arcPath(arc) ?? \"\")}\n fill={arc.data.color}\n filter={isPie3d ? `url(#${shadowId})` : undefined}\n stroke={isSliceSelected ? \"#64748b\" : sliceSeparatorColor}\n strokeWidth={isSliceSelected ? Math.max(2, sliceSeparatorWidth) : sliceSeparatorWidth}\n transform={`translate(${centerX}, ${centerY})${isPie3d ? ` scale(1, ${tilt})` : \"\"}`}\n />\n </g>\n {isSliceSelected\n ? renderSelectionPointHandles(`pie-selection-${arc.data.index}`, sliceHandlePoints)\n : null}\n {dataLabelsEnabled && truncatedLabelText.length > 0 ? (\n <text\n fill={resolveChartTextColor(chart)}\n fontSize={10}\n textAnchor={labelAnchor}\n x={resolvedLabelX}\n y={resolvedLabelY}\n >\n {truncatedLabelText}\n </text>\n ) : null}\n </React.Fragment>\n );\n })}\n {shouldRenderCenterValue ? (\n <text\n fill={chart.textColor ?? chart.titleColor ?? DEFAULT_CHART_TEXT_COLOR}\n fontSize={centerValueFontSize}\n fontWeight={700}\n textAnchor=\"middle\"\n x={centerX}\n y={centerY + centerValueFontSize * 0.34}\n >\n {centerValueText}\n </text>\n ) : null}\n </g>\n );\n}\n\nfunction renderBarOfPieChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, selectedChartElement?: XlsxChartElementSelection | null) {\n const pieSeriesIndex = selectPrimaryPieSeriesIndex(chart);\n const pieSeries = chart.series[pieSeriesIndex];\n const categories = getCategoryLabels(chart);\n const values = pieSeries?.values.map((value) => Math.max(0, safeNumber(value) ?? 0)) ?? [];\n if (values.length === 0) {\n return null;\n }\n const raw = (chart.raw ?? {}) as Record<string, unknown>;\n const ofPieType = raw.ofPieType === \"pie\" ? \"pie\" : \"bar\";\n const splitPos = typeof raw.splitPos === \"number\" ? raw.splitPos : 0;\n let secondaryIndices = values\n .map((value, index) => ({ index, value }))\n .filter(({ value }) => value <= splitPos)\n .map(({ index }) => index);\n if (secondaryIndices.length === 0) {\n secondaryIndices = values\n .map((value, index) => ({ index, value }))\n .sort((left, right) => left.value - right.value)\n .slice(0, Math.min(2, values.length))\n .map(({ index }) => index);\n }\n const secondarySet = new Set(secondaryIndices);\n const secondaryTotal = secondaryIndices.reduce((sum, index) => sum + (values[index] ?? 0), 0);\n const primaryData = values.flatMap((value, index) => secondarySet.has(index)\n ? []\n : [{ color: chartPointColor(chart, index, pieSeriesIndex), index, label: categories[index], value }]);\n if (secondaryTotal > 0) {\n primaryData.push({\n color: chartPointColor(chart, secondaryIndices[0] ?? 0, pieSeriesIndex),\n index: secondaryIndices[0] ?? 0,\n label: \"Other\",\n value: secondaryTotal\n });\n }\n\n const pieCenterX = layout.plot.left + layout.plot.width * 0.28;\n const pieCenterY = layout.plot.top + layout.plot.height * 0.55;\n const pieRadius = Math.max(16, Math.min(layout.plot.height, layout.plot.width * 0.45) * 0.3);\n const arc = d3Arc<{ endAngle: number; startAngle: number }>().innerRadius(0).outerRadius(pieRadius);\n const pieArcs = d3Pie<{ color: string; index: number; label: string; value: number }>()\n .value((entry) => entry.value)\n .sort(null)\n .startAngle(((90 - (chart.firstSliceAngle ?? 0)) * Math.PI) / 180)\n .endAngle(((90 - (chart.firstSliceAngle ?? 0)) * Math.PI) / 180 + Math.PI * 2)(primaryData);\n\n const secondaryLabels = secondaryIndices.map((index) => categories[index] ?? \"\");\n const secondaryValues = secondaryIndices.map((index) => values[index] ?? 0);\n const connectorTargetX = layout.plot.left + layout.plot.width * 0.69;\n const secondaryData = secondaryIndices.map((index) => ({\n color: chartPointColor(chart, index, pieSeriesIndex),\n index,\n label: categories[index] ?? \"\",\n value: values[index] ?? 0\n }));\n const secondaryCenterX = layout.plot.left + layout.plot.width * 0.79;\n const secondaryCenterY = pieCenterY;\n const secondaryRadius = pieRadius * clamp(((typeof raw.secondPieSize === \"number\" ? raw.secondPieSize : 100) / 100), 0.55, 1.5);\n const secondaryArc = d3Arc<{ endAngle: number; startAngle: number }>().innerRadius(0).outerRadius(secondaryRadius);\n const secondaryPieArcs = d3Pie<{ color: string; index: number; label: string; value: number }>()\n .value((entry) => entry.value)\n .sort(null)\n .startAngle(((90 - (chart.firstSliceAngle ?? 0)) * Math.PI) / 180)\n .endAngle(((90 - (chart.firstSliceAngle ?? 0)) * Math.PI) / 180 + Math.PI * 2)(secondaryData);\n const stackedBarLeft = layout.plot.left + layout.plot.width * 0.72;\n const stackedBarWidth = Math.max(20, layout.plot.width * 0.13);\n const stackedBarTop = layout.plot.top + 16;\n const stackedBarHeight = Math.max(28, layout.plot.height - 32);\n const secondaryTotalSafe = Math.max(1e-6, secondaryTotal);\n let stackCursor = stackedBarTop;\n\n return (\n <g>\n {pieArcs.map((entry, index) => {\n const selected = isSelectedChartPointOrSeries(selectedChartElement, chart.id, pieSeriesIndex, entry.data.index);\n const midAngle = (entry.startAngle + entry.endAngle) / 2;\n const dot = pieEllipsePoint(pieCenterX, pieCenterY, pieRadius * 0.62, 1, midAngle);\n return (\n <React.Fragment key={`bar-of-pie-main-${index}`}>\n <path\n {...chartElementDataProps(pieSeriesIndex, entry.data.index)}\n d={arc(entry) ?? \"\"}\n fill={entry.data.color}\n stroke={selected ? \"#64748b\" : chart.chartAreaFillColor ?? palette.surface}\n strokeWidth={selected ? 2 : 1}\n transform={`translate(${pieCenterX}, ${pieCenterY})`}\n />\n {selected\n ? renderSelectionPointHandles(`bar-of-pie-main-selection-${index}`, [dot])\n : null}\n </React.Fragment>\n );\n })}\n <line\n stroke={chart.chartAreaBorderColor ?? palette.border}\n strokeWidth={1}\n x1={pieCenterX + pieRadius}\n x2={connectorTargetX}\n y1={pieCenterY - pieRadius * 0.4}\n y2={layout.plot.top + 10}\n />\n <line\n stroke={chart.chartAreaBorderColor ?? palette.border}\n strokeWidth={1}\n x1={pieCenterX + pieRadius}\n x2={connectorTargetX}\n y1={pieCenterY + pieRadius * 0.4}\n y2={layout.plot.top + layout.plot.height - 10}\n />\n {ofPieType === \"pie\"\n ? secondaryPieArcs.map((entry, index) => {\n const selected = isSelectedChartPointOrSeries(selectedChartElement, chart.id, pieSeriesIndex, entry.data.index);\n const midAngle = (entry.startAngle + entry.endAngle) / 2;\n const dot = pieEllipsePoint(secondaryCenterX, secondaryCenterY, secondaryRadius * 0.62, 1, midAngle);\n return (\n <React.Fragment key={`bar-of-pie-secondary-pie-${index}`}>\n <path\n {...chartElementDataProps(pieSeriesIndex, entry.data.index)}\n d={secondaryArc(entry) ?? \"\"}\n fill={entry.data.color}\n stroke={selected ? \"#64748b\" : chart.chartAreaFillColor ?? palette.surface}\n strokeWidth={selected ? 2 : 1}\n transform={`translate(${secondaryCenterX}, ${secondaryCenterY})`}\n />\n {selected\n ? renderSelectionPointHandles(`bar-of-pie-secondary-pie-selection-${index}`, [dot])\n : null}\n </React.Fragment>\n );\n })\n : secondaryData.map((entry, index) => {\n const segmentHeight = index === secondaryData.length - 1\n ? Math.max(1, stackedBarTop + stackedBarHeight - stackCursor)\n : Math.max(1, (entry.value / secondaryTotalSafe) * stackedBarHeight);\n const y = stackCursor;\n stackCursor += segmentHeight;\n const selected = isSelectedChartPointOrSeries(selectedChartElement, chart.id, pieSeriesIndex, entry.index);\n return (\n <g key={`bar-of-pie-secondary-bar-${index}`}>\n <rect\n {...chartElementDataProps(pieSeriesIndex, entry.index)}\n fill={entry.color}\n height={segmentHeight}\n stroke={selected ? \"#64748b\" : chart.chartAreaFillColor ?? palette.surface}\n strokeWidth={selected ? 2 : 1}\n width={stackedBarWidth}\n x={stackedBarLeft}\n y={y}\n />\n {selected\n ? renderSelectionRectHandles(\n `bar-of-pie-secondary-bar-selection-${index}`,\n stackedBarLeft,\n y,\n stackedBarWidth,\n segmentHeight\n )\n : null}\n <text\n fill={resolveChartAxisTextColor(chart)}\n fontSize={10}\n textAnchor=\"start\"\n x={stackedBarLeft + stackedBarWidth + 6}\n y={y + segmentHeight * 0.5 + 3}\n >\n {entry.label}\n </text>\n </g>\n );\n })}\n </g>\n );\n}\n\nfunction renderSurfaceChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, selectedChartElement?: XlsxChartElementSelection | null) {\n const plot = resolveSurfacePlotRect(chart, layout);\n const categories = getCategoryLabels(chart);\n const rows = chart.series.length;\n const cols = Math.max(\n categories.length,\n chart.series.reduce((max, series) => Math.max(max, series.values.length), 0)\n );\n if (rows === 0 || cols === 0) {\n return null;\n }\n const matrix = chart.series.map((series) => (\n Array.from({ length: cols }, (_, columnIndex) => safeNumber(series.values[columnIndex]))\n ));\n const domain = getSurfaceDomain(chart);\n if (!domain) {\n return null;\n }\n const isContour = isContourSurfaceChart(chart);\n const minValue = domain.minValue;\n const safeMax = domain.safeMax;\n const wallFill = chart.backWall?.fillColor ?? \"#d9d9df\";\n const wallLineColor = chart.backWall?.lineColor ?? chart.sideWall?.lineColor ?? chart.floor?.lineColor ?? (chart.axisLineColor ?? lightenColor(resolveSurfaceBaseColor(chart, palette), 0.4));\n\n if (isContour) {\n const thresholds = domain.ticks.slice(1, -1);\n const quads: React.ReactNode[] = [];\n const contourSegmentsByThreshold = new Map<number, SurfaceContourSegment[]>();\n\n for (let rowIndex = 0; rowIndex < rows - 1; rowIndex += 1) {\n for (let columnIndex = 0; columnIndex < cols - 1; columnIndex += 1) {\n const p00 = matrix[rowIndex]?.[columnIndex];\n const p10 = matrix[rowIndex]?.[columnIndex + 1];\n const p01 = matrix[rowIndex + 1]?.[columnIndex];\n const p11 = matrix[rowIndex + 1]?.[columnIndex + 1];\n if (p00 == null || p10 == null || p01 == null || p11 == null) {\n continue;\n }\n\n const x0 = plot.left + (columnIndex / Math.max(1, cols - 1)) * plot.width;\n const x1 = plot.left + ((columnIndex + 1) / Math.max(1, cols - 1)) * plot.width;\n const y0 = plot.top + plot.height - (rowIndex / Math.max(1, rows - 1)) * plot.height;\n const y1 = plot.top + plot.height - ((rowIndex + 1) / Math.max(1, rows - 1)) * plot.height;\n const averageValue = (p00 + p10 + p01 + p11) / 4;\n\n if (!chart.wireframe) {\n const primaryAvgA = (p00 + p10 + p11) / 3;\n const primaryAvgB = (p00 + p11 + p01) / 3;\n const secondaryAvgA = (p00 + p10 + p01) / 3;\n const secondaryAvgB = (p10 + p11 + p01) / 3;\n const primaryRange = (Math.max(p00, p10, p11) - Math.min(p00, p10, p11))\n + (Math.max(p00, p11, p01) - Math.min(p00, p11, p01));\n const secondaryRange = (Math.max(p00, p10, p01) - Math.min(p00, p10, p01))\n + (Math.max(p10, p11, p01) - Math.min(p10, p11, p01));\n const usePrimaryDiagonal = primaryRange <= secondaryRange;\n const triangles = usePrimaryDiagonal\n ? [\n {\n bandColor: resolveSurfaceBandColor(chart, palette, domain, primaryAvgA),\n bandIndex: resolveSurfaceBandIndex(domain, primaryAvgA),\n points: `${x0},${y0} ${x1},${y0} ${x1},${y1}`\n },\n {\n bandColor: resolveSurfaceBandColor(chart, palette, domain, primaryAvgB),\n bandIndex: resolveSurfaceBandIndex(domain, primaryAvgB),\n points: `${x0},${y0} ${x1},${y1} ${x0},${y1}`\n }\n ]\n : [\n {\n bandColor: resolveSurfaceBandColor(chart, palette, domain, secondaryAvgA),\n bandIndex: resolveSurfaceBandIndex(domain, secondaryAvgA),\n points: `${x0},${y0} ${x1},${y0} ${x0},${y1}`\n },\n {\n bandColor: resolveSurfaceBandColor(chart, palette, domain, secondaryAvgB),\n bandIndex: resolveSurfaceBandIndex(domain, secondaryAvgB),\n points: `${x1},${y0} ${x1},${y1} ${x0},${y1}`\n }\n ];\n const splitLine = usePrimaryDiagonal\n ? { x1: x0, y1: y0, x2: x1, y2: y1 }\n : { x1: x1, y1: y0, x2: x0, y2: y1 };\n const splitBands = triangles[0]?.bandIndex !== triangles[1]?.bandIndex;\n quads.push(\n <g key={`surface-contour-cell-${rowIndex}-${columnIndex}`}>\n {splitBands ? (\n <>\n <polygon fill={triangles[0]?.bandColor} points={triangles[0]?.points} stroke=\"none\" />\n <polygon fill={triangles[1]?.bandColor} points={triangles[1]?.points} stroke=\"none\" />\n <line\n stroke={darkenColor(resolveSurfaceBandPaletteColor(chart, palette, domain, averageValue), 0.22)}\n strokeWidth={0.8}\n x1={splitLine.x1}\n x2={splitLine.x2}\n y1={splitLine.y1}\n y2={splitLine.y2}\n />\n </>\n ) : (\n <rect\n fill={resolveSurfaceBandColor(chart, palette, domain, averageValue)}\n height={Math.abs(y1 - y0)}\n stroke=\"none\"\n width={Math.abs(x1 - x0)}\n x={Math.min(x0, x1)}\n y={Math.min(y0, y1)}\n />\n )}\n </g>\n );\n }\n\n const corners = [\n { value: p00, x: x0, y: y0 },\n { value: p10, x: x1, y: y0 },\n { value: p11, x: x1, y: y1 },\n { value: p01, x: x0, y: y1 }\n ];\n const edges: Array<[typeof corners[number], typeof corners[number]]> = [\n [corners[0], corners[1]],\n [corners[1], corners[2]],\n [corners[2], corners[3]],\n [corners[3], corners[0]]\n ];\n thresholds.forEach((threshold) => {\n const intersections: Array<{ x: number; y: number }> = [];\n edges.forEach(([start, end]) => {\n const delta = end.value - start.value;\n if (delta === 0) {\n return;\n }\n const crosses = (start.value < threshold && end.value > threshold) || (start.value > threshold && end.value < threshold);\n if (!crosses) {\n return;\n }\n const mix = (threshold - start.value) / delta;\n intersections.push({\n x: start.x + (end.x - start.x) * mix,\n y: start.y + (end.y - start.y) * mix\n });\n });\n if (intersections.length === 2) {\n const segments = contourSegmentsByThreshold.get(threshold) ?? [];\n segments.push({\n end: intersections[1] ?? intersections[0] ?? { x: x1, y: y1 },\n start: intersections[0] ?? { x: x0, y: y0 }\n });\n contourSegmentsByThreshold.set(threshold, segments);\n } else if (intersections.length === 4) {\n const center = averageValue;\n const pairings = center >= threshold\n ? [[0, 1], [2, 3]]\n : [[0, 3], [1, 2]];\n pairings.forEach(([startIndex, endIndex], pairingIndex) => {\n const leftPoint = intersections[startIndex] ?? intersections[0];\n const rightPoint = intersections[endIndex] ?? intersections[intersections.length - 1];\n if (!leftPoint || !rightPoint) {\n return;\n }\n const segments = contourSegmentsByThreshold.get(threshold) ?? [];\n segments.push({\n end: rightPoint,\n start: leftPoint\n });\n contourSegmentsByThreshold.set(threshold, segments);\n });\n }\n });\n }\n }\n\n const contourLines = Array.from(contourSegmentsByThreshold.entries()).flatMap(([threshold, segments], thresholdIndex) => (\n connectSurfaceContourSegments(segments).map((points, pathIndex) => {\n const path = buildSurfaceSmoothPath(points, true);\n if (!path) {\n return null;\n }\n return (\n <path\n key={`surface-contour-line-${thresholdIndex}-${pathIndex}`}\n d={path}\n fill=\"none\"\n stroke={chart.wireframe\n ? resolveSurfaceWireframeColor(chart, palette, domain, threshold)\n : darkenColor(resolveSurfaceBandColor(chart, palette, domain, threshold), 0.18)}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={chart.wireframe ? 1.45 : 1.2}\n />\n );\n })\n ));\n\n const columnAverages = Array.from({ length: cols }, (_, columnIndex) => {\n const values = Array.from({ length: rows }, (_, rowIndex) => matrix[rowIndex]?.[columnIndex])\n .filter((value): value is number => value != null);\n if (values.length === 0) {\n return domain.minValue;\n }\n return values.reduce((sum, value) => sum + value, 0) / values.length;\n });\n const rowAverages = Array.from({ length: rows }, (_, rowIndex) => {\n const values = matrix[rowIndex]?.filter((value): value is number => value != null) ?? [];\n if (values.length === 0) {\n return domain.minValue;\n }\n return values.reduce((sum, value) => sum + value, 0) / values.length;\n });\n\n return (\n <g>\n <rect\n fill={wallFill}\n height={plot.height}\n stroke={lightenColor(wallLineColor, 0.14)}\n strokeWidth={0.8}\n width={plot.width}\n x={plot.left}\n y={plot.top}\n />\n {Array.from({ length: cols }, (_, columnIndex) => {\n const x = plot.left + (cols <= 1 ? plot.width / 2 : (columnIndex / (cols - 1)) * plot.width);\n return (\n <line\n key={`surface-contour-grid-col-${columnIndex}`}\n stroke={chart.wireframe\n ? resolveSurfaceWireframeColor(chart, palette, domain, columnAverages[columnIndex] ?? domain.minValue)\n : lightenColor(wallLineColor, 0.18)}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={chart.wireframe ? 1.15 : 0.8}\n x1={x}\n x2={x}\n y1={plot.top}\n y2={plot.top + plot.height}\n />\n );\n })}\n {Array.from({ length: rows }, (_, rowIndex) => {\n const y = plot.top + plot.height - (rows <= 1 ? plot.height / 2 : (rowIndex / (rows - 1)) * plot.height);\n const rowStroke = chart.series[rowIndex]?.lineColor\n ?? chart.series[rowIndex]?.color\n ?? resolveSurfaceWireframeColor(chart, palette, domain, rowAverages[rowIndex] ?? domain.minValue);\n return (\n <line\n key={`surface-contour-grid-row-${rowIndex}`}\n stroke={chart.wireframe ? rowStroke : lightenColor(wallLineColor, 0.18)}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={chart.wireframe ? 1.15 : 0.8}\n x1={plot.left}\n x2={plot.left + plot.width}\n y1={y}\n y2={y}\n />\n );\n })}\n {quads}\n {contourLines}\n {chart.wireframe ? null : (\n <rect\n fill=\"none\"\n height={plot.height}\n stroke={lightenColor(wallLineColor, 0.1)}\n strokeWidth={0.8}\n width={plot.width}\n x={plot.left}\n y={plot.top}\n />\n )}\n </g>\n );\n }\n\n const rotX = clamp(chart.view3d?.rotX ?? (chart.wireframe ? 90 : 25), -88, 88) * (Math.PI / 180);\n const rotY = clamp(chart.view3d?.rotY ?? (chart.wireframe ? 0 : 30), -88, 88) * (Math.PI / 180);\n const usePerspective = chart.view3d?.rAngAx === false;\n const perspectiveStrength = clamp(\n (chart.view3d?.perspective ?? (usePerspective ? 30 : 0)) / 100,\n 0,\n 1\n );\n const depthScale = clamp((chart.view3d?.depthPercent ?? 100) / 100, 0.2, 4);\n const cosX = Math.cos(rotX);\n const sinX = Math.sin(rotX);\n const cosY = Math.cos(rotY);\n const sinY = Math.sin(rotY);\n\n type SurfacePoint = { depth: number; hasValue: boolean; value: number; x: number; y: number };\n const rawPoints: SurfacePoint[][] = Array.from({ length: rows }, (_, rowIndex) => (\n Array.from({ length: cols }, (_, columnIndex) => {\n const value = matrix[rowIndex][columnIndex];\n const hasValue = value != null;\n const normalizedX = cols <= 1 ? 0 : ((columnIndex / (cols - 1)) - 0.5) * 2;\n const normalizedY = hasValue ? (-((((value - minValue) / (safeMax - minValue)) - 0.5) * 1.8) * depthScale) : (0.9 * depthScale);\n const normalizedZ = rows <= 1 ? 0 : ((rowIndex / (rows - 1)) - 0.5) * 2;\n\n const x1 = normalizedX * cosY + normalizedZ * sinY;\n const z1 = -normalizedX * sinY + normalizedZ * cosY;\n const y1 = normalizedY * cosX - z1 * sinX;\n const z2 = normalizedY * sinX + z1 * cosX;\n const perspective = usePerspective\n ? 1 / Math.max(0.18, 1 + z2 * (0.24 + perspectiveStrength * 0.5))\n : 1;\n\n return {\n depth: z2,\n hasValue,\n value: value ?? minValue,\n x: x1 * perspective,\n y: y1 * perspective\n };\n })\n ));\n\n const bounds = rawPoints.flat();\n const minX = Math.min(...bounds.map((point) => point.x));\n const maxX = Math.max(...bounds.map((point) => point.x));\n const minY = Math.min(...bounds.map((point) => point.y));\n const maxY = Math.max(...bounds.map((point) => point.y));\n const scale = Math.min(\n layout.plot.width / Math.max(0.25, maxX - minX),\n layout.plot.height / Math.max(0.25, maxY - minY)\n ) * 0.82;\n const centerX = layout.plot.left + layout.plot.width / 2;\n const centerY = layout.plot.top + layout.plot.height / 2;\n const centerRawX = (minX + maxX) / 2;\n const centerRawY = (minY + maxY) / 2;\n\n const points = rawPoints.map((row) => row.map((point) => ({\n ...point,\n x: centerX + (point.x - centerRawX) * scale,\n y: centerY + (point.y - centerRawY) * scale\n })));\n\n const baseColor = resolveSurfaceBaseColor(chart, palette);\n const axisColor = chart.axisLineColor ?? lightenColor(baseColor, 0.4);\n type Quad = {\n color: string;\n depth: number;\n key: string;\n points: string;\n stroke: string;\n };\n const quads: Quad[] = [];\n for (let rowIndex = 0; rowIndex < rows - 1; rowIndex += 1) {\n for (let columnIndex = 0; columnIndex < cols - 1; columnIndex += 1) {\n const p00 = points[rowIndex][columnIndex];\n const p10 = points[rowIndex][columnIndex + 1];\n const p11 = points[rowIndex + 1][columnIndex + 1];\n const p01 = points[rowIndex + 1][columnIndex];\n if (!p00.hasValue || !p10.hasValue || !p11.hasValue || !p01.hasValue) {\n continue;\n }\n const averageValue = (p00.value + p10.value + p11.value + p01.value) / 4;\n const ratio = clamp((averageValue - minValue) / (safeMax - minValue), 0, 1);\n quads.push({\n color: resolveSurfaceColor(chart, palette, ratio),\n depth: (p00.depth + p10.depth + p11.depth + p01.depth) / 4,\n key: `surface-quad-${rowIndex}-${columnIndex}`,\n points: `${p00.x},${p00.y} ${p10.x},${p10.y} ${p11.x},${p11.y} ${p01.x},${p01.y}`,\n stroke: lightenColor(baseColor, 0.18)\n });\n }\n }\n quads.sort((left, right) => left.depth - right.depth);\n\n const surfaceContourLines = !isContour\n ? (() => {\n const contourSegmentsByThreshold = new Map<number, SurfaceContourSegment[]>();\n const thresholds = domain.ticks.slice(1, -1);\n for (let rowIndex = 0; rowIndex < rows - 1; rowIndex += 1) {\n for (let columnIndex = 0; columnIndex < cols - 1; columnIndex += 1) {\n const topLeft = points[rowIndex][columnIndex];\n const topRight = points[rowIndex][columnIndex + 1];\n const bottomRight = points[rowIndex + 1][columnIndex + 1];\n const bottomLeft = points[rowIndex + 1][columnIndex];\n if (!topLeft.hasValue || !topRight.hasValue || !bottomRight.hasValue || !bottomLeft.hasValue) {\n continue;\n }\n const corners = [\n { point: topLeft, value: topLeft.value },\n { point: topRight, value: topRight.value },\n { point: bottomRight, value: bottomRight.value },\n { point: bottomLeft, value: bottomLeft.value }\n ];\n const edges: Array<[typeof corners[number], typeof corners[number]]> = [\n [corners[0], corners[1]],\n [corners[1], corners[2]],\n [corners[2], corners[3]],\n [corners[3], corners[0]]\n ];\n thresholds.forEach((threshold) => {\n const intersections: SurfacePathPoint[] = [];\n edges.forEach(([start, end]) => {\n const delta = end.value - start.value;\n if (delta === 0) {\n return;\n }\n const crosses = (start.value < threshold && end.value > threshold) || (start.value > threshold && end.value < threshold);\n if (!crosses) {\n return;\n }\n const ratio = (threshold - start.value) / delta;\n intersections.push({\n x: start.point.x + (end.point.x - start.point.x) * ratio,\n y: start.point.y + (end.point.y - start.point.y) * ratio\n });\n });\n if (intersections.length === 2) {\n const segments = contourSegmentsByThreshold.get(threshold) ?? [];\n segments.push({\n end: intersections[1] ?? intersections[0] ?? { x: topRight.x, y: topRight.y },\n start: intersections[0] ?? { x: topLeft.x, y: topLeft.y }\n });\n contourSegmentsByThreshold.set(threshold, segments);\n } else if (intersections.length === 4) {\n const center = (topLeft.value + topRight.value + bottomRight.value + bottomLeft.value) / 4;\n const pairings = center >= threshold\n ? [[0, 1], [2, 3]]\n : [[0, 3], [1, 2]];\n pairings.forEach(([startIndex, endIndex]) => {\n const startPoint = intersections[startIndex] ?? intersections[0];\n const endPoint = intersections[endIndex] ?? intersections[intersections.length - 1];\n if (!startPoint || !endPoint) {\n return;\n }\n const segments = contourSegmentsByThreshold.get(threshold) ?? [];\n segments.push({\n end: endPoint,\n start: startPoint\n });\n contourSegmentsByThreshold.set(threshold, segments);\n });\n }\n });\n }\n }\n return Array.from(contourSegmentsByThreshold.entries()).flatMap(([threshold, segments], thresholdIndex) => (\n connectSurfaceContourSegments(segments).map((pathPoints, pathIndex) => {\n const path = buildSurfaceSmoothPath(pathPoints, true);\n if (!path) {\n return null;\n }\n return (\n <path\n key={`surface-level-line-${thresholdIndex}-${pathIndex}`}\n d={path}\n fill=\"none\"\n stroke={darkenColor(resolveSurfaceBandPaletteColor(chart, palette, domain, threshold), 0.26)}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.55}\n />\n );\n })\n ));\n })()\n : [];\n\n const buildSurfacePathRuns = (\n segmentPoints: Array<{ depth: number; hasValue: boolean; value: number; x: number; y: number }>,\n keyPrefix: string,\n strokeColor: string,\n strokeWidth: number\n ) => (\n splitSurfacePointRuns(segmentPoints).map((run, runIndex) => {\n const path = buildSurfaceSmoothPath(run, chart.wireframe === true);\n if (!path) {\n return null;\n }\n return (\n <path\n key={`${keyPrefix}-${runIndex}`}\n d={path}\n fill=\"none\"\n stroke={strokeColor}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={strokeWidth}\n />\n );\n })\n );\n\n return (\n <g>\n {isContour ? (\n <>\n <rect\n fill={wallFill}\n height={layout.plot.height}\n stroke={lightenColor(axisColor, 0.18)}\n strokeWidth={0.8}\n width={layout.plot.width}\n x={layout.plot.left}\n y={layout.plot.top}\n />\n {Array.from({ length: cols }, (_, columnIndex) => {\n const x = layout.plot.left + (cols <= 1 ? layout.plot.width / 2 : (columnIndex / (cols - 1)) * layout.plot.width);\n return (\n <line\n key={`surface-fallback-column-grid-${columnIndex}`}\n stroke={lightenColor(wallLineColor, 0.12)}\n strokeWidth={0.8}\n x1={x}\n x2={x}\n y1={layout.plot.top}\n y2={layout.plot.top + layout.plot.height}\n />\n );\n })}\n {Array.from({ length: rows }, (_, rowIndex) => {\n const y = layout.plot.top + layout.plot.height - (rows <= 1 ? layout.plot.height / 2 : (rowIndex / (rows - 1)) * layout.plot.height);\n return (\n <line\n key={`surface-fallback-row-grid-${rowIndex}`}\n stroke={lightenColor(wallLineColor, 0.12)}\n strokeWidth={0.8}\n x1={layout.plot.left}\n x2={layout.plot.left + layout.plot.width}\n y1={y}\n y2={y}\n />\n );\n })}\n </>\n ) : null}\n {chart.wireframe ? null : quads.map((quad) => (\n <polygon\n key={quad.key}\n fill={quad.color}\n fillOpacity={0.95}\n points={quad.points}\n stroke={quad.stroke}\n strokeWidth={0.7}\n />\n ))}\n {Array.from({ length: rows }, (_, rowIndex) => {\n const rowPoints = points[rowIndex];\n const averageValue = matrix[rowIndex]\n ?.filter((value): value is number => value != null)\n .reduce((sum, value, _, values) => sum + value / Math.max(1, values.length), 0) ?? domain.minValue;\n const rowStroke = chart.wireframe\n ? (chart.series[rowIndex]?.lineColor\n ?? chart.series[rowIndex]?.color\n ?? resolveSurfaceWireframeColor(chart, palette, domain, averageValue))\n : darkenColor(resolveSurfaceBandColor(chart, palette, domain, averageValue), 0.1);\n return (\n <g key={`surface-row-${rowIndex}`}>\n {buildSurfacePathRuns(\n rowPoints,\n `surface-row-${rowIndex}`,\n rowStroke,\n chart.wireframe ? Math.max(1.45, chart.series[rowIndex]?.lineWidthPx ?? 1.8) : 0.8\n )}\n </g>\n );\n })}\n {Array.from({ length: cols }, (_, columnIndex) => {\n const columnPoints = Array.from({ length: rows }, (_, rowIndex) => points[rowIndex][columnIndex]);\n const columnValues = Array.from({ length: rows }, (_, rowIndex) => matrix[rowIndex]?.[columnIndex])\n .filter((value): value is number => value != null);\n const columnAverage = columnValues.length > 0\n ? columnValues.reduce((sum, value) => sum + value, 0) / columnValues.length\n : domain.minValue;\n const columnStroke = chart.wireframe\n ? resolveSurfaceWireframeColor(chart, palette, domain, columnAverage)\n : darkenColor(resolveSurfaceBandColor(chart, palette, domain, columnAverage), 0.1);\n return (\n <g key={`surface-column-${columnIndex}`}>\n {buildSurfacePathRuns(\n columnPoints,\n `surface-column-${columnIndex}`,\n columnStroke,\n chart.wireframe ? 1.35 : 0.8\n )}\n </g>\n );\n })}\n {surfaceContourLines}\n {chart.wireframe ? (\n <rect\n fill=\"none\"\n height={layout.plot.height}\n stroke={lightenColor(axisColor, 0.18)}\n strokeWidth={0.8}\n width={layout.plot.width}\n x={layout.plot.left}\n y={layout.plot.top}\n />\n ) : null}\n </g>\n );\n}\n\nfunction renderSurfaceHitOverlay(\n chart: XlsxChart,\n layout: ChartLayout,\n selectedChartElement?: XlsxChartElementSelection | null\n) {\n const plot = resolveSurfacePlotRect(chart, layout);\n const categories = getCategoryLabels(chart);\n const rows = chart.series.length;\n const cols = Math.max(\n categories.length,\n chart.series.reduce((max, series) => Math.max(max, series.values.length), 0)\n );\n if (rows === 0 || cols === 0) {\n return null;\n }\n\n const cellWidth = plot.width / cols;\n const cellHeight = plot.height / rows;\n return (\n <g>\n {chart.series.flatMap((_, seriesIndex) => (\n Array.from({ length: cols }, (_, pointIndex) => {\n const left = plot.left + pointIndex * cellWidth;\n const top = plot.top + seriesIndex * cellHeight;\n const selected = isSelectedChartPointOrSeries(selectedChartElement, chart.id, seriesIndex, pointIndex);\n return (\n <React.Fragment key={`surface-hit-${seriesIndex}-${pointIndex}`}>\n <rect\n {...chartElementDataProps(seriesIndex, pointIndex)}\n fill=\"transparent\"\n height={cellHeight}\n stroke=\"none\"\n width={cellWidth}\n x={left}\n y={top}\n />\n {selected\n ? renderSelectionRectHandles(\n `surface-selection-${seriesIndex}-${pointIndex}`,\n left,\n top,\n cellWidth,\n cellHeight\n )\n : null}\n </React.Fragment>\n );\n })\n ))}\n </g>\n );\n}\n\nfunction indexByName(series: XlsxChart[\"series\"], matcher: RegExp) {\n const index = series.findIndex((entry) => matcher.test((entry.name ?? \"\").toLowerCase()));\n return index >= 0 ? index : null;\n}\n\nfunction renderStockChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, selectedChartElement?: XlsxChartElementSelection | null) {\n const categories = getCategoryLabels(chart);\n if (categories.length === 0 || chart.series.length < 2) {\n return null;\n }\n\n const roles = resolveStockRoleIndices(chart);\n const highIndex = roles.high ?? 0;\n const lowIndex = roles.low ?? Math.min(1, chart.series.length - 1);\n const closeIndex = roles.close ?? Math.min(2, chart.series.length - 1);\n const openIndex = roles.open;\n const volumeIndex = roles.volume != null && ![highIndex, lowIndex, closeIndex, openIndex].includes(roles.volume)\n ? roles.volume\n : null;\n const high = chart.series[highIndex];\n const low = chart.series[lowIndex];\n const close = chart.series[closeIndex];\n const open = openIndex != null ? chart.series[openIndex] : null;\n const volume = volumeIndex != null ? chart.series[volumeIndex] : null;\n\n const points = categories\n .map((category, index) => {\n const highValue = safeNumber(high.values[index]);\n const lowValue = safeNumber(low.values[index]);\n const closeValue = safeNumber(close.values[index]);\n const openValue = open ? safeNumber(open.values[index]) : null;\n const volumeValue = volume ? safeNumber(volume.values[index]) : null;\n if (highValue == null || lowValue == null || closeValue == null) {\n return null;\n }\n return {\n category,\n close: closeValue,\n high: highValue,\n low: lowValue,\n open: openValue,\n volume: volumeValue\n };\n })\n .filter((entry): entry is { category: string; close: number; high: number; low: number; open: number | null; volume: number | null } => entry != null);\n if (points.length === 0) {\n return null;\n }\n\n const plot = layout.plot;\n const hasVolume = volume != null && points.some((entry) => (entry.volume ?? 0) > 0);\n const axisColor = chart.axisLineColor ?? chart.chartAreaBorderColor ?? palette.border;\n const stockPalette = resolveStockPalette(chart, axisColor);\n const rawMinValue = hasVolume\n ? Math.min(0, ...points.flatMap((entry) => [entry.low, entry.close, entry.open ?? entry.close, entry.volume ?? 0]))\n : Math.min(...points.map((entry) => entry.low));\n const rawMaxValue = hasVolume\n ? Math.max(...points.flatMap((entry) => [entry.high, entry.close, entry.open ?? entry.close, entry.volume ?? 0]))\n : Math.max(...points.map((entry) => entry.high));\n const resolvedDomain = resolveNumericAxisDomain(\n typeof chart.valueAxis?.min === \"number\" && Number.isFinite(chart.valueAxis.min) ? chart.valueAxis.min : rawMinValue,\n typeof chart.valueAxis?.max === \"number\" && Number.isFinite(chart.valueAxis.max) ? chart.valueAxis.max : rawMaxValue,\n chart.valueAxis?.majorUnit,\n hasVolume\n );\n const yScale = scaleLinear()\n .domain([resolvedDomain.min, resolvedDomain.max])\n .range([plot.top + plot.height, plot.top]);\n const xScale = scaleBand<string>()\n .domain(categories)\n .range([plot.left, plot.left + plot.width])\n .paddingInner(0.28)\n .paddingOuter(0.18);\n const ticks = resolvedDomain.ticks;\n const labelColor = resolveChartAxisTextColor(chart);\n const openTickColor = stockPalette.openAccent;\n const closeTickColor = openIndex != null ? stockPalette.lineColor : stockPalette.closeAccent;\n const labelStep = Math.max(1, Math.ceil(categories.length / Math.max(4, Math.floor(plot.width / 68))));\n const zeroY = yScale(Math.max(resolvedDomain.min, 0));\n\n return (\n <g>\n {ticks.map((tick) => (\n <g key={`stock-tick-${tick}`}>\n <line\n stroke={lightenColor(axisColor, 0.72)}\n strokeWidth={1}\n x1={plot.left}\n x2={plot.left + plot.width}\n y1={yScale(tick)}\n y2={yScale(tick)}\n />\n <text fill={labelColor} fontSize={10} textAnchor=\"end\" x={plot.left - 6} y={yScale(tick) + 3}>\n {formatTickValue(tick)}\n </text>\n </g>\n ))}\n {categories.map((category, index) => {\n if (index % labelStep !== 0 && index !== categories.length - 1) {\n return null;\n }\n const x = (xScale(category) ?? plot.left) + xScale.bandwidth() * 0.5;\n return (\n <text\n key={`stock-cat-${category}`}\n fill={labelColor}\n fontSize={10}\n textAnchor=\"middle\"\n x={x}\n y={plot.top + plot.height + 14}\n >\n {category}\n </text>\n );\n })}\n <line stroke={axisColor} strokeWidth={1.2} x1={plot.left} x2={plot.left} y1={plot.top} y2={plot.top + plot.height} />\n <line stroke={axisColor} strokeWidth={1.2} x1={plot.left} x2={plot.left + plot.width} y1={plot.top + plot.height} y2={plot.top + plot.height} />\n {points.map((entry, index) => {\n const x = (xScale(entry.category) ?? plot.left) + xScale.bandwidth() * 0.5;\n const previousClose = index > 0 ? points[index - 1]?.close ?? entry.close : entry.close;\n const isUp = entry.open != null\n ? entry.close >= entry.open\n : entry.close >= previousClose;\n const stroke = stockPalette.lineColor;\n const candleWidth = Math.max(5, xScale.bandwidth() * 0.56);\n const bodyLeft = x - candleWidth / 2;\n const openY = entry.open != null ? yScale(entry.open) : null;\n const closeY = yScale(entry.close);\n const highY = yScale(entry.high);\n const lowY = yScale(entry.low);\n const selected = isSelectedChartPointOrSeries(selectedChartElement, chart.id, closeIndex, index);\n return (\n <g\n {...chartElementDataProps(closeIndex, index)}\n key={`stock-point-${index}`}\n >\n {hasVolume && entry.volume != null ? (\n <rect\n fill={stockPalette.volumeFill}\n height={Math.max(1, zeroY - yScale(entry.volume))}\n opacity={0.94}\n stroke=\"none\"\n width={Math.max(3, xScale.bandwidth() * 0.64)}\n x={x - Math.max(3, xScale.bandwidth() * 0.64) / 2}\n y={yScale(entry.volume)}\n />\n ) : null}\n <line stroke={stroke} strokeWidth={1.6} x1={x} x2={x} y1={highY} y2={lowY} />\n {entry.open != null && openY != null ? (\n Math.abs(openY - closeY) >= 1 ? (\n <rect\n fill={isUp ? stockPalette.upFill : stockPalette.downFill}\n height={Math.max(1.4, Math.abs(closeY - openY))}\n stroke={stroke}\n strokeWidth={1.3}\n width={candleWidth}\n x={bodyLeft}\n y={Math.min(openY, closeY)}\n />\n ) : (\n <line stroke={stroke} strokeWidth={1.6} x1={bodyLeft} x2={bodyLeft + candleWidth} y1={closeY} y2={closeY} />\n )\n ) : (\n <line stroke={closeTickColor} strokeWidth={1.8} x1={x} x2={x + 7} y1={closeY} y2={closeY} />\n )}\n {entry.open != null && openY != null ? (\n <line stroke={openTickColor} strokeWidth={1.8} x1={x - 7} x2={x} y1={openY} y2={openY} />\n ) : null}\n {selected\n ? renderSelectionPointHandles(`stock-selection-${index}`, [{ x, y: closeY }])\n : null}\n </g>\n );\n })}\n </g>\n );\n}\n\nfunction renderWaterfallChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, selectedChartElement?: XlsxChartElementSelection | null) {\n const stages = buildChartStages(chart);\n if (stages.length === 0) {\n return null;\n }\n\n const plot = layout.plot;\n const labels = stages.map((stage) => stage.label);\n const xScale = scaleBand<string>()\n .domain(labels)\n .range([plot.left, plot.left + plot.width])\n .paddingInner(0.34)\n .paddingOuter(0.18);\n\n const bars: Array<ChartStage & { end: number; index: number; start: number }> = [];\n let runningTotal = 0;\n stages.forEach((stage, index) => {\n const start = stage.isSubtotal ? 0 : runningTotal;\n const end = stage.isSubtotal ? runningTotal : runningTotal + stage.value;\n if (!stage.isSubtotal) {\n runningTotal = end;\n }\n bars.push({ ...stage, end, index, start });\n });\n\n const extents = bars.flatMap((bar) => [0, bar.start, bar.end]);\n let minValue = Math.min(...extents);\n let maxValue = Math.max(...extents);\n if (maxValue <= minValue) {\n maxValue = minValue + 1;\n }\n\n const yScale = scaleLinear()\n .domain([minValue, maxValue])\n .range([plot.top + plot.height, plot.top]);\n const ticks = buildNumericTickValues(minValue, maxValue, chart.valueAxis?.majorUnit);\n const axisColor = chart.axisLineColor ?? chart.chartAreaBorderColor ?? palette.border;\n const labelColor = resolveChartAxisTextColor(chart);\n\n return (\n <g>\n {ticks.map((tick) => (\n <g key={`waterfall-y-${tick}`}>\n <line\n stroke={lightenColor(axisColor, 0.72)}\n strokeWidth={1}\n x1={plot.left}\n x2={plot.left + plot.width}\n y1={yScale(tick)}\n y2={yScale(tick)}\n />\n <text fill={labelColor} fontSize={10} textAnchor=\"end\" x={plot.left - 6} y={yScale(tick) + 3}>\n {formatTickValue(tick)}\n </text>\n </g>\n ))}\n <line stroke={axisColor} strokeWidth={1.2} x1={plot.left} x2={plot.left} y1={plot.top} y2={plot.top + plot.height} />\n <line stroke={axisColor} strokeWidth={1.2} x1={plot.left} x2={plot.left + plot.width} y1={yScale(0)} y2={yScale(0)} />\n {bars.map((bar, index) => {\n const bandLeft = xScale(bar.label) ?? plot.left;\n const bandWidth = xScale.bandwidth();\n const topValue = Math.max(bar.start, bar.end);\n const bottomValue = Math.min(bar.start, bar.end);\n const top = yScale(topValue);\n const height = Math.max(1, yScale(bottomValue) - top);\n const fill = bar.isSubtotal\n ? darkenColor(bar.color, 0.18)\n : bar.value >= 0\n ? bar.color\n : lightenColor(bar.color, 0.22);\n const connectorStart = index > 0 ? bars[index - 1] : null;\n const connectorY = connectorStart ? yScale(connectorStart.end) : 0;\n const selected = isSelectedChartPointOrSeries(selectedChartElement, chart.id, 0, index);\n\n return (\n <g key={`waterfall-bar-${index}`}>\n {connectorStart ? (\n <line\n stroke={lightenColor(axisColor, 0.35)}\n strokeDasharray=\"3 3\"\n strokeWidth={1}\n x1={(xScale(connectorStart.label) ?? plot.left) + xScale.bandwidth()}\n x2={bandLeft}\n y1={connectorY}\n y2={connectorY}\n />\n ) : null}\n <rect\n {...chartElementDataProps(0, index)}\n fill={fill}\n rx={2}\n ry={2}\n stroke={selected ? \"#64748b\" : darkenColor(fill, 0.22)}\n strokeWidth={selected ? 2 : 1}\n x={bandLeft}\n y={top}\n width={bandWidth}\n height={height}\n />\n {selected\n ? renderSelectionRectHandles(`waterfall-selection-${index}`, bandLeft, top, bandWidth, height)\n : null}\n <text\n fill={labelColor}\n fontSize={10}\n textAnchor=\"middle\"\n x={bandLeft + bandWidth * 0.5}\n y={plot.top + plot.height + 14}\n >\n {bar.label}\n </text>\n <text\n fill={labelColor}\n fontSize={10}\n textAnchor=\"middle\"\n x={bandLeft + bandWidth * 0.5}\n y={top - 6}\n >\n {formatTickValue(bar.end)}\n </text>\n </g>\n );\n })}\n </g>\n );\n}\n\nfunction renderFunnelChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, selectedChartElement?: XlsxChartElementSelection | null) {\n const stages = buildChartStages(chart)\n .map((stage) => ({ ...stage, value: Math.max(0, stage.value) }))\n .filter((stage) => stage.value > 0);\n if (stages.length === 0) {\n return null;\n }\n\n const plot = layout.plot;\n const maxValue = Math.max(...stages.map((stage) => stage.value));\n const sectionHeight = plot.height / stages.length;\n const centerX = plot.left + plot.width * 0.5;\n const labelColor = resolveChartTextColor(chart);\n\n return (\n <g>\n {stages.map((stage, index) => {\n const stageWidth = (stage.value / maxValue) * plot.width;\n const topY = plot.top + index * sectionHeight;\n const stageHeight = Math.max(6, sectionHeight - 2);\n const left = centerX - stageWidth * 0.5;\n const fill = stage.isSubtotal ? darkenColor(stage.color, 0.14) : stage.color;\n const labelFitsInside = stageWidth > 90;\n const selected = isSelectedChartPointOrSeries(selectedChartElement, chart.id, 0, index);\n\n return (\n <g key={`funnel-stage-${index}`}>\n <rect\n {...chartElementDataProps(0, index)}\n fill={fill}\n height={stageHeight}\n rx={0}\n ry={0}\n stroke={selected ? \"#64748b\" : darkenColor(fill, 0.2)}\n strokeWidth={selected ? 2 : 1}\n width={stageWidth}\n x={left}\n y={topY}\n />\n {selected\n ? renderSelectionRectHandles(`funnel-selection-${index}`, left, topY, stageWidth, stageHeight)\n : null}\n <text\n fill={labelColor}\n fontSize={10}\n textAnchor={labelFitsInside ? \"middle\" : \"start\"}\n x={labelFitsInside ? centerX : centerX + stageWidth * 0.5 + 8}\n y={topY + sectionHeight * 0.5}\n >\n {`${stage.label} ${formatTickValue(stage.value)}`}\n </text>\n </g>\n );\n })}\n </g>\n );\n}\n\nfunction renderSunburstChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, selectedChartElement?: XlsxChartElementSelection | null) {\n const hierarchyData = buildHierarchyData(chart);\n if (!hierarchyData) {\n return null;\n }\n\n const root = d3Hierarchy(hierarchyData)\n .sum((node) => node.children && node.children.length > 0 ? 0 : Math.max(0.0001, node.value ?? 0))\n .sort((left, right) => (right.value ?? 0) - (left.value ?? 0));\n const partitioned = d3Partition<ChartHierarchyDatum>()\n .size([Math.PI * 2, root.height + 1])(root);\n const plot = layout.plot;\n const radius = Math.max(24, Math.min(plot.width, plot.height) * 0.5);\n const holeRadius = radius * 0.16;\n const centerX = plot.left + plot.width * 0.5;\n const centerY = plot.top + plot.height * 0.5;\n const ringSpan = Math.max(1, partitioned.height || 1);\n const arcBuilder = d3Arc<HierarchyRectangularNode<ChartHierarchyDatum>>()\n .startAngle((node) => node.x0)\n .endAngle((node) => node.x1)\n .padAngle(0.005)\n .padRadius(radius)\n .innerRadius((node) => holeRadius + ((node.y0 - 1) / ringSpan) * (radius - holeRadius))\n .outerRadius((node) => holeRadius + ((node.y1 - 1) / ringSpan) * (radius - holeRadius) - 1);\n\n return (\n <g transform={`translate(${centerX}, ${centerY})`}>\n {partitioned.descendants().filter((node) => node.depth > 0).map((node, index) => {\n const path = arcBuilder(node);\n if (!path) {\n return null;\n }\n const labelAngle = (node.x0 + node.x1) * 0.5 - Math.PI * 0.5;\n const labelRadius = holeRadius + (((node.y0 + node.y1) * 0.5 - 1) / ringSpan) * (radius - holeRadius);\n const labelX = Math.cos(labelAngle) * labelRadius;\n const labelY = Math.sin(labelAngle) * labelRadius;\n const arcSpan = node.x1 - node.x0;\n const canShowLabel = arcSpan * labelRadius > 26;\n const fill = resolveHierarchyNodeColor(chart, node);\n const selected = isSelectedChartPointOrSeries(selectedChartElement, chart.id, 0, index);\n\n return (\n <g key={`sunburst-node-${index}`}>\n <path\n {...chartElementDataProps(0, index)}\n d={path}\n fill={fill}\n stroke={selected ? \"#64748b\" : palette.surface}\n strokeWidth={selected ? 2 : 1}\n />\n {selected\n ? renderSelectionPointHandles(`sunburst-selection-${index}`, [{ x: labelX, y: labelY }])\n : null}\n {canShowLabel ? (\n <text\n fill={darkenColor(fill, 0.65)}\n fontSize={9}\n textAnchor=\"middle\"\n transform={`translate(${labelX}, ${labelY}) rotate(${(labelAngle * 180) / Math.PI})`}\n >\n {node.data.name}\n </text>\n ) : null}\n </g>\n );\n })}\n <circle fill={chart.chartAreaFillColor ?? palette.surface} r={holeRadius - 2} />\n </g>\n );\n}\n\nfunction renderTreemapChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, selectedChartElement?: XlsxChartElementSelection | null) {\n const hierarchyData = buildHierarchyData(chart);\n if (!hierarchyData) {\n return null;\n }\n\n const root = d3Hierarchy(hierarchyData)\n .sum((node) => node.children && node.children.length > 0 ? 0 : Math.max(0.0001, node.value ?? 0))\n .sort((left, right) => (right.value ?? 0) - (left.value ?? 0));\n const treemapRoot = d3Treemap<ChartHierarchyDatum>()\n .size([layout.plot.width, layout.plot.height])\n .paddingInner(2)\n .paddingOuter(1)\n .round(true)\n .tile(excelTreemapTile)(root);\n\n return (\n <g transform={`translate(${layout.plot.left}, ${layout.plot.top})`}>\n {treemapRoot.leaves().map((leaf, index) => {\n const fill = resolveTreemapNodeColor(chart, leaf);\n const width = Math.max(0, leaf.x1 - leaf.x0);\n const height = Math.max(0, leaf.y1 - leaf.y0);\n const canShowLabel = width > 48 && height > 22;\n const selected = isSelectedChartPointOrSeries(selectedChartElement, chart.id, 0, index);\n\n return (\n <g key={`treemap-leaf-${index}`}>\n <rect\n {...chartElementDataProps(0, index)}\n fill={fill}\n rx={3}\n ry={3}\n stroke={selected ? \"#64748b\" : palette.surface}\n strokeWidth={selected ? 2 : 1}\n x={leaf.x0}\n y={leaf.y0}\n width={width}\n height={height}\n />\n {selected\n ? renderSelectionRectHandles(`treemap-selection-${index}`, leaf.x0, leaf.y0, width, height)\n : null}\n {canShowLabel ? (\n <>\n <text\n fill={darkenColor(fill, 0.68)}\n fontSize={10}\n fontWeight={600}\n x={leaf.x0 + 8}\n y={leaf.y0 + 14}\n >\n {leaf.data.name}\n </text>\n <text\n fill={darkenColor(fill, 0.54)}\n fontSize={9}\n x={leaf.x0 + 8}\n y={leaf.y0 + 28}\n >\n {formatTickValue(leaf.value ?? 0)}\n </text>\n </>\n ) : null}\n </g>\n );\n })}\n </g>\n );\n}\n\nfunction renderBoxWhiskerChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, selectedChartElement?: XlsxChartElementSelection | null) {\n const visibleSeries = chart.series.filter((series) => series.hidden !== true);\n if (visibleSeries.length === 0) {\n return null;\n }\n\n const seriesStats = visibleSeries.map((series, index) => ({\n color: series.color ?? chartSeriesColor(chart, typeof series.formatIdx === \"number\" ? series.formatIdx : index),\n label: normalizeCategoryLabel(series.name) || `Series ${index + 1}`,\n lineColor: series.lineColor ?? series.color ?? chartSeriesColor(chart, typeof series.formatIdx === \"number\" ? series.formatIdx : index),\n series,\n stats: computeBoxWhiskerStats(series),\n visibility: resolveBoxWhiskerVisibility(series)\n })).filter((entry): entry is {\n color: string;\n label: string;\n lineColor: string;\n series: XlsxChartSeries;\n stats: BoxWhiskerStats;\n visibility: ReturnType<typeof resolveBoxWhiskerVisibility>;\n } => entry.stats != null);\n\n if (seriesStats.length === 0) {\n return null;\n }\n\n const allValues = seriesStats.flatMap((entry) => [\n entry.stats.min,\n entry.stats.lowerWhisker,\n entry.stats.q1,\n entry.stats.median,\n entry.stats.q3,\n entry.stats.upperWhisker,\n entry.stats.max\n ]);\n const minValue = Math.min(...allValues);\n const maxValue = Math.max(...allValues);\n const valueDomain = resolveAxisDomainWithChartOverrides(chart.valueAxis, minValue, maxValue, false);\n const yScale = scaleLinear()\n .domain([valueDomain.min, valueDomain.max])\n .range([layout.plot.top + layout.plot.height, layout.plot.top]);\n const xScale = scalePoint<number>()\n .domain(seriesStats.map((_, index) => index))\n .range([layout.plot.left + 24, layout.plot.left + layout.plot.width - 24]);\n const gap = seriesStats.length > 1\n ? Math.abs((xScale(1) ?? 0) - (xScale(0) ?? 0))\n : layout.plot.width * 0.5;\n const boxWidth = clamp(gap * 0.34, 20, 54);\n const capWidth = Math.max(8, boxWidth * 0.52);\n const axisColor = chart.axisLineColor ?? chart.chartAreaBorderColor ?? palette.border;\n const labelColor = resolveChartAxisTextColor(chart);\n const meanLinePoints = seriesStats\n .filter((entry) => entry.visibility.meanLine)\n .map((entry, index) => `${xScale(index) ?? layout.plot.left},${yScale(entry.stats.mean)}`);\n\n return (\n <g>\n {valueDomain.ticks.map((tick, index) => {\n const y = yScale(tick);\n return (\n <g key={`box-whisker-grid-${index}`}>\n <line\n stroke={lightenColor(axisColor, 0.22)}\n strokeWidth={0.8}\n x1={layout.plot.left}\n x2={layout.plot.left + layout.plot.width}\n y1={y}\n y2={y}\n />\n <text\n fill={labelColor}\n fontSize={10}\n textAnchor=\"end\"\n x={layout.plot.left - 6}\n y={y + 3}\n >\n {formatTickValue(tick)}\n </text>\n </g>\n );\n })}\n <line\n stroke={axisColor}\n strokeWidth={1}\n x1={layout.plot.left}\n x2={layout.plot.left}\n y1={layout.plot.top}\n y2={layout.plot.top + layout.plot.height}\n />\n <line\n stroke={axisColor}\n strokeWidth={1}\n x1={layout.plot.left}\n x2={layout.plot.left + layout.plot.width}\n y1={layout.plot.top + layout.plot.height}\n y2={layout.plot.top + layout.plot.height}\n />\n {meanLinePoints.length >= 2 ? (\n <polyline\n fill=\"none\"\n points={meanLinePoints.join(\" \")}\n stroke={darkenColor(axisColor, 0.2)}\n strokeDasharray=\"4 3\"\n strokeWidth={1}\n />\n ) : null}\n {seriesStats.map((entry, index) => {\n const x = xScale(index) ?? layout.plot.left;\n const boxTop = yScale(entry.stats.q3);\n const boxBottom = yScale(entry.stats.q1);\n const medianY = yScale(entry.stats.median);\n const lowerWhiskerY = yScale(entry.stats.lowerWhisker);\n const upperWhiskerY = yScale(entry.stats.upperWhisker);\n const meanY = yScale(entry.stats.mean);\n const visiblePoints = entry.visibility.nonoutliers\n ? entry.stats.visiblePoints\n : [];\n const outliers = entry.visibility.outliers\n ? entry.stats.outliers\n : [];\n const selected = isSelectedChartPointOrSeries(selectedChartElement, chart.id, index, index);\n\n return (\n <g {...chartElementDataProps(index)} key={`box-whisker-series-${index}`}>\n <line\n stroke={entry.lineColor}\n strokeWidth={1.5}\n x1={x}\n x2={x}\n y1={upperWhiskerY}\n y2={boxTop}\n />\n <line\n stroke={entry.lineColor}\n strokeWidth={1.5}\n x1={x}\n x2={x}\n y1={boxBottom}\n y2={lowerWhiskerY}\n />\n <line\n stroke={entry.lineColor}\n strokeWidth={1.5}\n x1={x - capWidth * 0.5}\n x2={x + capWidth * 0.5}\n y1={upperWhiskerY}\n y2={upperWhiskerY}\n />\n <line\n stroke={entry.lineColor}\n strokeWidth={1.5}\n x1={x - capWidth * 0.5}\n x2={x + capWidth * 0.5}\n y1={lowerWhiskerY}\n y2={lowerWhiskerY}\n />\n <rect\n {...chartElementDataProps(index, index)}\n fill={lightenColor(entry.color, 0.35)}\n fillOpacity={0.72}\n height={Math.max(1, boxBottom - boxTop)}\n stroke={selected ? \"#64748b\" : entry.lineColor}\n strokeWidth={selected ? 2 : 1.5}\n width={boxWidth}\n x={x - boxWidth * 0.5}\n y={boxTop}\n />\n {selected\n ? renderSelectionRectHandles(\n `box-whisker-selection-${index}`,\n x - boxWidth * 0.5,\n boxTop,\n boxWidth,\n Math.max(1, boxBottom - boxTop)\n )\n : null}\n <line\n stroke={darkenColor(entry.lineColor, 0.15)}\n strokeWidth={2}\n x1={x - boxWidth * 0.5}\n x2={x + boxWidth * 0.5}\n y1={medianY}\n y2={medianY}\n />\n {entry.visibility.meanMarker ? (\n <>\n <line\n stroke={darkenColor(entry.lineColor, 0.18)}\n strokeWidth={1.2}\n x1={x - 4}\n x2={x + 4}\n y1={meanY - 4}\n y2={meanY + 4}\n />\n <line\n stroke={darkenColor(entry.lineColor, 0.18)}\n strokeWidth={1.2}\n x1={x - 4}\n x2={x + 4}\n y1={meanY + 4}\n y2={meanY - 4}\n />\n </>\n ) : null}\n {visiblePoints.map((value, pointIndex) => {\n const y = yScale(value);\n const jitter = ((pointIndex % 7) - 3) * (boxWidth / 16);\n return (\n <circle\n {...chartElementDataProps(index, pointIndex)}\n key={`box-whisker-visible-${index}-${pointIndex}`}\n cx={x + jitter}\n cy={y}\n fill={entry.color}\n fillOpacity={0.45}\n r={2}\n stroke=\"none\"\n />\n );\n })}\n {outliers.map((value, pointIndex) => {\n const y = yScale(value);\n return (\n <circle\n {...chartElementDataProps(index, pointIndex)}\n key={`box-whisker-outlier-${index}-${pointIndex}`}\n cx={x}\n cy={y}\n fill=\"#ffffff\"\n r={3}\n stroke={entry.lineColor}\n strokeWidth={1.2}\n />\n );\n })}\n <text\n fill={labelColor}\n fontSize={10}\n textAnchor=\"middle\"\n x={x}\n y={layout.plot.top + layout.plot.height + 14}\n >\n {entry.label}\n </text>\n </g>\n );\n })}\n </g>\n );\n}\n\nfunction renderRegionMapChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, selectedChartElement?: XlsxChartElementSelection | null) {\n const primarySeriesIndex = Math.max(0, chart.series.findIndex((series) => series.hidden !== true));\n const primarySeries = chart.series[primarySeriesIndex] ?? null;\n if (!primarySeries) {\n return null;\n }\n\n const labels = getCategoryLabels(chart);\n const layoutProperties = resolveRegionMapLayoutProperties(primarySeries);\n const geography = layoutProperties?.geography && typeof layoutProperties.geography === \"object\"\n ? layoutProperties.geography as Record<string, unknown>\n : null;\n const featureSet = resolveRegionMapFeatureSet(labels, geography);\n const viewedRegionType = typeof geography?.viewedRegionType === \"string\"\n ? geography.viewedRegionType\n : null;\n const projectionType = typeof geography?.projectionType === \"string\"\n ? geography.projectionType\n : null;\n const projection = featureSet === \"us-state\"\n ? geoIdentity()\n : projectionType === \"miller\"\n ? geoMercator()\n : geoNaturalEarth1();\n const availableFeatures = getRegionMapBaseFeatures(featureSet);\n const categoricalValues = resolveRegionMapColorStrings(primarySeries);\n const categoricalColorByLabel = categoricalValues\n ? new Map(\n Array.from(new Set(categoricalValues)).map((value, index) => [\n value,\n chartPointColor(chart, index, primarySeriesIndex)\n ])\n )\n : null;\n const entries = labels.map((label, index) => {\n const feature = resolveRegionMapFeature(label, featureSet);\n const value = safeNumber(primarySeries.values[index]);\n const colorLabel = categoricalValues?.[index] ?? null;\n return {\n colorLabel,\n feature,\n key: normalizeCategoryLabel(label),\n label: normalizeCategoryLabel(label),\n value\n };\n }).filter((entry) => entry.feature != null && (entry.value != null || entry.colorLabel != null)) as Array<{\n colorLabel: string | null;\n feature: RegionMapFeature;\n key: string;\n label: string;\n value: number | null;\n }>;\n const fitToMatchedData = entries.length > 0 && (viewedRegionType === \"dataOnly\" || entries.length === 1);\n const fitFeatures = fitToMatchedData\n ? entries.map((entry) => entry.feature)\n : availableFeatures;\n projection.fitExtent(\n [\n [layout.plot.left + 8, layout.plot.top + 8],\n [layout.plot.left + layout.plot.width - 8, layout.plot.top + layout.plot.height - 8]\n ],\n {\n type: \"FeatureCollection\",\n features: fitFeatures\n } satisfies FeatureCollection<Geometry, { name?: string }>\n );\n const path = geoPath(projection);\n const baseFeatures = fitToMatchedData\n ? fitFeatures\n : availableFeatures;\n const noDataFill = resolveRegionMapNoDataColor(chart, primarySeriesIndex);\n const outlineColor = chart.chartAreaBorderColor && chart.chartAreaBorderColor !== \"transparent\"\n ? chart.chartAreaBorderColor\n : darkenColor(noDataFill, 0.22);\n const numericEntryValues = entries\n .map((entry) => entry.value)\n .filter((value): value is number => typeof value === \"number\" && Number.isFinite(value));\n const minValue = numericEntryValues.length > 0 ? Math.min(...numericEntryValues) : 0;\n const maxValue = numericEntryValues.length > 0 ? Math.max(...numericEntryValues) : 1;\n const showRegionLabels = layoutProperties?.regionLabelLayout !== \"none\";\n\n return (\n <g>\n {baseFeatures.map((feature, index) => {\n const d = path(feature);\n if (!d) {\n return null;\n }\n return (\n <path\n d={d}\n fill={noDataFill}\n key={`region-map-base-${feature.id ?? index}`}\n stroke={outlineColor}\n strokeLinejoin=\"round\"\n strokeWidth={0.6}\n />\n );\n })}\n {entries.map((entry, index) => {\n const d = path(entry.feature);\n if (!d) {\n return null;\n }\n const fill = entry.value != null\n ? (() => {\n const ratio = maxValue <= minValue ? 1 : (entry.value - minValue) / Math.max(1e-6, maxValue - minValue);\n return resolveRegionMapValueColor(chart, primarySeriesIndex, ratio);\n })()\n : categoricalColorByLabel?.get(entry.colorLabel ?? \"\") ?? resolveRegionMapDataColor(chart, primarySeriesIndex);\n const selected = isSelectedChartPointOrSeries(selectedChartElement, chart.id, primarySeriesIndex, index);\n const centroid = path.centroid(entry.feature);\n const canShowSelectionDot = Number.isFinite(centroid[0]) && Number.isFinite(centroid[1]);\n return (\n <React.Fragment key={`region-map-value-${entry.key || index}`}>\n <path\n {...chartElementDataProps(primarySeriesIndex, index)}\n d={d}\n fill={fill}\n stroke={selected ? \"#64748b\" : darkenColor(fill, 0.18)}\n strokeLinejoin=\"round\"\n strokeWidth={selected ? 1.8 : 0.85}\n />\n {selected && canShowSelectionDot\n ? renderSelectionPointHandles(`region-map-selection-${index}`, [{ x: centroid[0], y: centroid[1] }])\n : null}\n </React.Fragment>\n );\n })}\n {showRegionLabels\n ? entries.map((entry, index) => {\n const bounds = path.bounds(entry.feature);\n const [[x0, y0], [x1, y1]] = bounds;\n const width = x1 - x0;\n const height = y1 - y0;\n if (!Number.isFinite(width) || !Number.isFinite(height) || width < 26 || height < 12) {\n return null;\n }\n const centroid = path.centroid(entry.feature);\n if (!Number.isFinite(centroid[0]) || !Number.isFinite(centroid[1])) {\n return null;\n }\n return (\n <text\n fill={resolveChartTextColor(chart)}\n fontSize={9}\n fontWeight={600}\n key={`region-map-label-${entry.key || index}`}\n textAnchor=\"middle\"\n x={centroid[0]}\n y={centroid[1]}\n >\n {truncateSvgText(entry.label, Math.max(28, width - 4), 9)}\n </text>\n );\n })\n : null}\n </g>\n );\n}\n\nfunction renderUnsupported(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, chartType: string) {\n return (\n <g>\n <rect\n fill={lightenColor(chart.chartAreaFillColor ?? palette.surface, 0.02)}\n height={layout.plot.height}\n stroke={lightenColor(chart.axisLineColor ?? palette.border, 0.2)}\n strokeDasharray=\"3 3\"\n width={layout.plot.width}\n x={layout.plot.left}\n y={layout.plot.top}\n />\n <text\n fill={resolveChartMutedTextColor(chart)}\n fontSize={11}\n textAnchor=\"middle\"\n x={layout.plot.left + layout.plot.width / 2}\n y={layout.plot.top + layout.plot.height / 2}\n >\n {`Unsupported chart type: ${chartType}`}\n </text>\n </g>\n );\n}\n\nfunction renderChartPlot(\n chart: XlsxChart,\n palette: ChartRendererPalette,\n layout: ChartLayout,\n chartType: string,\n selectedChartElement?: XlsxChartElementSelection | null\n) {\n if (isComboChart(chart)) {\n return renderComboChart(chart, palette, layout, selectedChartElement) ?? renderUnsupported(chart, palette, layout, \"Combo\");\n }\n if (\n chartType === \"ColumnClustered\"\n || chartType === \"ColumnStacked\"\n || chartType === \"ColumnPercentStacked\"\n || chartType === \"BarClustered\"\n || chartType === \"BarStacked\"\n || chartType === \"BarPercentStacked\"\n ) {\n return renderBarChart(chart, palette, layout, chartType, selectedChartElement);\n }\n if (\n chartType === \"Line\"\n || chartType === \"LineStacked\"\n || chartType === \"LinePercentStacked\"\n || chartType === \"Area\"\n || chartType === \"AreaStacked\"\n || chartType === \"AreaPercentStacked\"\n ) {\n return renderLineOrAreaChart(chart, palette, layout, chartType, selectedChartElement);\n }\n if (chartType === \"Scatter\") {\n return renderScatterChart(chart, palette, layout, false, selectedChartElement);\n }\n if (chartType === \"ScatterLines\") {\n return renderScatterChart(chart, palette, layout, false, selectedChartElement);\n }\n if (chartType === \"ScatterSmooth\") {\n return renderScatterChart(chart, palette, layout, true, selectedChartElement);\n }\n if (chartType === \"Bubble\") {\n return renderBubbleChart(chart, palette, layout, selectedChartElement);\n }\n if (chartType === \"Radar\") {\n return renderRadarChart(chart, palette, layout, selectedChartElement);\n }\n if (chartType === \"Pie\" || chartType === \"Pie3D\" || chartType === \"PieExploded\" || chartType === \"Doughnut\") {\n return renderPieChart(chart, palette, layout, chartType, selectedChartElement);\n }\n if (chartType === \"BarOfPie\") {\n return renderBarOfPieChart(chart, palette, layout, selectedChartElement);\n }\n if (chartType === \"Surface\") {\n return renderSurfaceChart(chart, palette, layout, selectedChartElement);\n }\n if (chartType === \"Stock\") {\n return renderStockChart(chart, palette, layout, selectedChartElement);\n }\n if (chartType === \"Waterfall\") {\n return renderWaterfallChart(chart, palette, layout, selectedChartElement);\n }\n if (chartType === \"Funnel\") {\n return renderFunnelChart(chart, palette, layout, selectedChartElement);\n }\n if (chartType === \"BoxWhisker\") {\n return renderBoxWhiskerChart(chart, palette, layout, selectedChartElement);\n }\n if (chartType === \"Sunburst\") {\n return renderSunburstChart(chart, palette, layout, selectedChartElement);\n }\n if (chartType === \"Treemap\") {\n return renderTreemapChart(chart, palette, layout, selectedChartElement);\n }\n if (chartType === \"RegionMap\") {\n return renderRegionMapChart(chart, palette, layout, selectedChartElement);\n }\n return renderUnsupported(chart, palette, layout, chartType);\n}\n\nexport const MemoChartSvg = React.memo(function MemoChartSvg({\n chart,\n onChartElementDoubleClick,\n onChartElementPointerDown,\n palette,\n rect,\n selectedChartElement\n}: ChartSvgProps) {\n const renderChartType = normalizeRenderableChartType(chart);\n const legendItems = getLegendItems(chart, renderChartType, palette);\n const layout = buildLayout(chart, rect, legendItems);\n const chartRaw = chart.raw && typeof chart.raw === \"object\" ? chart.raw as Record<string, unknown> : null;\n const explicitNoFill = chartRaw?.chartAreaNoFill === true || chartRaw?.plotAreaNoFill === true;\n const background = chart.chartAreaFillColor ?? (explicitNoFill ? \"transparent\" : \"#ffffff\");\n const borderColor = chart.chartAreaBorderColor ?? \"transparent\";\n const normalizedBackground = background.trim().toLowerCase();\n const normalizedBorderColor = borderColor.trim().toLowerCase();\n const hideBackgroundRect = normalizedBackground === \"transparent\" && normalizedBorderColor === \"transparent\";\n const fontFamily = buildChartFontFamily(chart.fontFamily);\n const handlePointerDown = React.useCallback((event: React.PointerEvent<SVGSVGElement>) => {\n const selection = resolveChartSelectionFromTarget(chart, event.target, selectedChartElement);\n if (!selection) {\n return;\n }\n\n if (resolveChartElementTarget(event.target)) {\n event.stopPropagation();\n }\n onChartElementPointerDown?.(selection, event);\n }, [chart, onChartElementPointerDown, selectedChartElement]);\n const handleDoubleClick = React.useCallback((event: React.MouseEvent<SVGSVGElement>) => {\n const selection = resolveChartSelectionFromTarget(chart, event.target, selectedChartElement);\n if (!selection) {\n return;\n }\n\n if (resolveChartElementTarget(event.target)) {\n event.stopPropagation();\n }\n onChartElementDoubleClick?.(selection, event);\n }, [chart, onChartElementDoubleClick, selectedChartElement]);\n\n if (renderChartType === \"Surface\") {\n return (\n <MemoSurfaceChartComposite\n background={background}\n borderColor={borderColor}\n chart={chart}\n fallback={renderSurfaceChart(chart, palette, layout, selectedChartElement)}\n fontFamily={fontFamily}\n layout={layout}\n onDoubleClick={handleDoubleClick}\n onPointerDown={handlePointerDown}\n overlay={\n <>\n {renderSurfaceHitOverlay(chart, layout, selectedChartElement)}\n {renderSurfaceAxes(chart, layout)}\n {renderTitle(chart, layout, palette)}\n {renderLegend(chart, layout, palette)}\n </>\n }\n palette={palette}\n />\n );\n }\n\n return (\n <svg\n aria-label={chart.title ?? chart.name ?? \"Chart\"}\n onDoubleClick={handleDoubleClick}\n onPointerDown={handlePointerDown}\n role=\"img\"\n style={{ display: \"block\", fontFamily, height: \"100%\", pointerEvents: \"auto\", width: \"100%\" }}\n viewBox={`0 0 ${layout.width} ${layout.height}`}\n >\n {hideBackgroundRect\n ? null\n : <rect fill={background} height={layout.height} stroke={borderColor} strokeWidth={1} width={layout.width} x={0} y={0} />}\n {renderTitle(chart, layout, palette)}\n {renderLegend(chart, layout, palette)}\n {renderChartPlot(chart, palette, layout, renderChartType, selectedChartElement)}\n </svg>\n );\n}, (prev, next) => (\n prev.chart === next.chart\n && prev.onChartElementDoubleClick === next.onChartElementDoubleClick\n && prev.onChartElementPointerDown === next.onChartElementPointerDown\n && prev.palette === next.palette\n && prev.rect.height === next.rect.height\n && prev.rect.width === next.rect.width\n && prev.rect.left === next.rect.left\n && prev.rect.top === next.rect.top\n && prev.selectedChartElement === next.selectedChartElement\n));\n","const svgNamespace = 'http://www.w3.org/2000/svg';\nconst elements = new Set(\n 'svg g rect circle ellipse path polygon polyline line text tspan defs clipPath linearGradient radialGradient stop pattern filter feDropShadow'.split(\n ' ',\n ),\n);\nconst attributes = new Set(\n (\n 'width height viewBox x y x1 y1 x2 y2 cx cy rx ry r d points transform id dx dy ' +\n 'fill fill-opacity fill-rule stroke stroke-opacity stroke-width stroke-dasharray stroke-linecap stroke-linejoin ' +\n 'clip-path filter opacity font-family font-size font-weight font-style text-anchor textLength lengthAdjust ' +\n 'offset stop-color stop-opacity gradientUnits gradientTransform fx fy fr patternUnits patternContentUnits ' +\n 'shape-rendering stdDeviation flood-color flood-opacity overflow ' +\n 'data-chart-kind data-chart-series data-chart-point data-chart-x data-chart-y data-docx-series data-docx-point'\n ).split(' '),\n);\nconst paints = new Set(['fill', 'stroke', 'filter', 'clip-path', 'stop-color', 'flood-color']);\nlet sequence = 0;\n\nexport function mountSharedChart(container: HTMLElement, markup: string, label: string): boolean {\n if (markup.includes('<!') || markup.includes('<?')) return false;\n const svg = new DOMParser().parseFromString(markup, 'image/svg+xml').documentElement;\n if (svg.localName !== 'svg') return false;\n\n const prefix = `rpv-chart-${++sequence}-`;\n for (const element of [svg, ...Array.from(svg.querySelectorAll('*'))]) {\n if (element.namespaceURI !== svgNamespace || !elements.has(element.localName)) return false;\n for (const attribute of Array.from(element.attributes)) {\n const { name, value } = attribute;\n if (name === 'xmlns' && element === svg && value === svgNamespace) continue;\n if (attribute.namespaceURI || !attributes.has(name)) return false;\n if (name === 'id') {\n if (!/^[a-zA-Z_][\\w.-]*$/.test(value)) return false;\n element.id = prefix + value;\n } else if (paints.has(name)) {\n const reference = /^url\\(#([\\w.-]+)\\)$/.exec(value);\n if (reference) element.setAttribute(name, `url(#${prefix}${reference[1]})`);\n else if (!/^(?:#[\\da-fA-F]{3,8}|[a-zA-Z]+|rgba?\\([\\d.% ,]+\\))$/.test(value)) return false;\n }\n }\n const series = element.getAttribute('data-chart-series');\n if (series === null) continue;\n element.setAttribute('data-xlsx-chart-series-index', series);\n const point = element.getAttribute('data-chart-point');\n if (point !== null) element.setAttribute('data-xlsx-chart-point-index', point);\n const kind = element.getAttribute('data-chart-kind');\n if (kind === 'bar') element.setAttribute('data-xlsx-chart-selection-mode', 'seriesFirst');\n if (kind === 'legendEntry') element.setAttribute('data-xlsx-chart-element-kind', 'legendEntry');\n if (kind === 'point') {\n const hit = svg.ownerDocument.createElementNS(svgNamespace, 'circle');\n hit.setAttribute('cx', element.getAttribute('data-chart-x') ?? '0');\n hit.setAttribute('cy', element.getAttribute('data-chart-y') ?? '0');\n hit.setAttribute('r', '5');\n hit.setAttribute('fill', 'transparent');\n element.append(hit);\n }\n element.setAttribute('cursor', 'pointer');\n }\n const view = container.ownerDocument.importNode(svg, true) as unknown as SVGSVGElement;\n view.style.cssText = 'width:100%;height:100%;display:block;';\n view.setAttribute('role', 'img');\n view.setAttribute('aria-label', label);\n container.replaceChildren(view);\n return true;\n}\n","/**\n * Bridges the DOM-based normalized viewer and the React chart renderer\n * vendored from react-xlsx. Charts are rendered to static SVG markup\n * synchronously, which keeps slide construction deterministic and avoids\n * nesting live React roots inside host applications' render cycles.\n */\nimport { createElement } from 'react';\nimport { renderToStaticMarkup } from 'react-dom/server';\nimport type { ChartNode, PresentationTheme } from '@extend-ai/react-pptx-model';\nimport { buildPptxChart, buildThemePaletteFromPresentationTheme } from './chart-model';\nimport { MemoChartSvg } from './chart-renderer';\nimport { getRegionMapAtlas, loadRegionMapAtlas } from './region-map-data';\nimport { mountSharedChart } from './shared-chart-svg';\nimport type { XlsxChart } from './chart-types';\n\n/** Neutral light palette matching react-xlsx viewer chrome defaults. */\nexport const CHART_HOST_PALETTE = {\n border: '#e4e4e7',\n mutedText: '#71717a',\n surface: '#ffffff',\n text: '#18181b',\n} as const;\n\n/**\n * Renders a PowerPoint chart node into `container` with react-xlsx fidelity.\n * Returns false when the chart model cannot be built or rendered (callers\n * then fall back to a plain placeholder).\n */\nfunction chartNeedsRegionMapAtlas(chart: XlsxChart): boolean {\n return (\n chart.chartType === 'RegionMap' ||\n (chart.typeGroups ?? []).some((group) => group.chartType === 'RegionMap')\n );\n}\n\nexport function renderChartInto(\n container: HTMLElement,\n node: ChartNode,\n theme: PresentationTheme | undefined,\n): boolean {\n try {\n if (\n node.chartSvg &&\n mountSharedChart(container, node.chartSvg, node.title ?? node.name ?? 'Chart')\n ) {\n return true;\n }\n const themePalette = buildThemePaletteFromPresentationTheme(theme);\n const chart = buildPptxChart(node, themePalette);\n const render = () => {\n const element = createElement(MemoChartSvg, {\n chart,\n palette: CHART_HOST_PALETTE,\n rect: {\n left: 0,\n top: 0,\n width: Math.max(1, node.transform.width / 9525),\n height: Math.max(1, node.transform.height / 9525),\n },\n });\n return renderToStaticMarkup(element);\n };\n const markup = render();\n if (!markup) return false;\n container.innerHTML = markup;\n // Excel map charts need the TopoJSON boundary atlas, which lives in a\n // lazily loaded chunk so ordinary decks never pay for it. Re-render the\n // chart in place once the geometry arrives.\n if (chartNeedsRegionMapAtlas(chart) && !getRegionMapAtlas()) {\n void loadRegionMapAtlas()\n .then(() => {\n if (!container.isConnected) return;\n const refreshed = render();\n if (refreshed) container.innerHTML = refreshed;\n })\n .catch(() => undefined);\n }\n return true;\n } catch {\n return false;\n }\n}\n","/**\n * Bounded browser renderer for the GDI records commonly embedded in PowerPoint\n * EMF and WMF preview images. The parser is intentionally local to the viewer:\n * metafile bytes never leave the browser and malformed records fail closed.\n */\n\nexport interface MetafileRenderOptions {\n maxWidth?: number;\n maxHeight?: number;\n dpiScale?: number;\n maxCanvasDimension?: number;\n maxRecords?: number;\n fontFamilyMap?: Readonly<Record<string, string>>;\n}\n\ntype RenderCanvas = HTMLCanvasElement | OffscreenCanvas;\n\ninterface Point {\n x: number;\n y: number;\n}\n\ninterface Bounds {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\ninterface Matrix {\n a: number;\n b: number;\n c: number;\n d: number;\n e: number;\n f: number;\n}\n\ninterface Pen {\n kind: 'pen';\n color: string;\n width: number;\n style: number;\n null: boolean;\n}\n\ninterface Brush {\n kind: 'brush';\n color: string;\n style: number;\n null: boolean;\n}\n\ninterface Font {\n kind: 'font';\n family: string;\n height: number;\n weight: number;\n italic: boolean;\n underline: boolean;\n strike: boolean;\n escapement: number;\n}\n\ntype GdiObject = Pen | Brush | Font;\n\ninterface DrawingState {\n pen: Pen;\n brush: Brush;\n font: Font;\n textColor: string;\n backgroundColor: string;\n backgroundMode: number;\n textAlign: number;\n fillMode: CanvasFillRule;\n current: Point;\n windowOrigin: Point;\n windowExtent: Point;\n viewportOrigin: Point;\n viewportExtent: Point;\n mappingEnabled: boolean;\n world: Matrix;\n}\n\ninterface Surface {\n canvas: RenderCanvas;\n context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D;\n scaleX: number;\n scaleY: number;\n}\n\nconst DEFAULT_MAX_DIMENSION = 4_096;\nconst DEFAULT_MAX_RECORDS = 200_000;\nconst DEFAULT_FONT: Font = {\n kind: 'font',\n family: 'sans-serif',\n height: 12,\n weight: 400,\n italic: false,\n underline: false,\n strike: false,\n escapement: 0,\n};\nconst DEFAULT_PEN: Pen = { kind: 'pen', color: '#000000', width: 1, style: 0, null: false };\nconst DEFAULT_BRUSH: Brush = {\n kind: 'brush',\n color: '#ffffff',\n style: 0,\n null: false,\n};\n\nfunction finitePositive(value: number | undefined, fallback: number): number {\n return value !== undefined && Number.isFinite(value) && value > 0 ? value : fallback;\n}\n\nfunction readOptions(\n maxWidth: number | undefined,\n maxHeight: number | undefined,\n optionsOrScale: MetafileRenderOptions | number | undefined,\n): Required<Omit<MetafileRenderOptions, 'fontFamilyMap'>> & {\n fontFamilyMap: Readonly<Record<string, string>>;\n} {\n const options =\n typeof optionsOrScale === 'number' ? { dpiScale: optionsOrScale } : optionsOrScale;\n return {\n maxWidth: finitePositive(options?.maxWidth ?? maxWidth, Number.POSITIVE_INFINITY),\n maxHeight: finitePositive(options?.maxHeight ?? maxHeight, Number.POSITIVE_INFINITY),\n dpiScale: Math.min(4, finitePositive(options?.dpiScale, 1)),\n maxCanvasDimension: Math.floor(\n finitePositive(options?.maxCanvasDimension, DEFAULT_MAX_DIMENSION),\n ),\n maxRecords: Math.floor(finitePositive(options?.maxRecords, DEFAULT_MAX_RECORDS)),\n fontFamilyMap: options?.fontFamilyMap ?? {},\n };\n}\n\nfunction createSurface(\n logicalWidth: number,\n logicalHeight: number,\n options: ReturnType<typeof readOptions>,\n): Surface | undefined {\n if (!(logicalWidth > 0) || !(logicalHeight > 0)) return undefined;\n const fit = Math.min(\n 1,\n options.maxWidth / logicalWidth,\n options.maxHeight / logicalHeight,\n options.maxCanvasDimension / (logicalWidth * options.dpiScale),\n options.maxCanvasDimension / (logicalHeight * options.dpiScale),\n );\n const width = Math.max(1, Math.round(logicalWidth * fit * options.dpiScale));\n const height = Math.max(1, Math.round(logicalHeight * fit * options.dpiScale));\n let canvas: RenderCanvas;\n if (typeof OffscreenCanvas !== 'undefined') canvas = new OffscreenCanvas(width, height);\n else if (typeof document !== 'undefined') {\n canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n } else return undefined;\n const context = canvas.getContext('2d');\n if (!context) return undefined;\n return {\n canvas,\n context: context as CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\n scaleX: width / logicalWidth,\n scaleY: height / logicalHeight,\n };\n}\n\nasync function exportPng(canvas: RenderCanvas): Promise<string | null> {\n if ('convertToBlob' in canvas) {\n const blob = await canvas.convertToBlob({ type: 'image/png' });\n if (typeof FileReader !== 'undefined') {\n return await new Promise<string | null>((resolve) => {\n const reader = new FileReader();\n reader.onerror = () => resolve(null);\n reader.onload = () => resolve(typeof reader.result === 'string' ? reader.result : null);\n reader.readAsDataURL(blob);\n });\n }\n const bytes = new Uint8Array(await blob.arrayBuffer());\n let binary = '';\n for (const byte of bytes) binary += String.fromCharCode(byte);\n return typeof btoa === 'function' ? `data:image/png;base64,${btoa(binary)}` : null;\n }\n return canvas.toDataURL('image/png');\n}\n\nfunction colorRef(view: DataView, offset: number): string {\n const hex = (value: number) => value.toString(16).padStart(2, '0');\n return `#${hex(view.getUint8(offset))}${hex(view.getUint8(offset + 1))}${hex(view.getUint8(offset + 2))}`;\n}\n\nfunction readUtf16(view: DataView, offset: number, characters: number): string {\n const end = Math.min(view.byteLength, offset + characters * 2);\n let value = '';\n for (let cursor = offset; cursor + 1 < end; cursor += 2) {\n const code = view.getUint16(cursor, true);\n if (code === 0) break;\n value += String.fromCharCode(code);\n }\n return value;\n}\n\nfunction readAnsi(view: DataView, offset: number, length: number): string {\n const end = Math.min(view.byteLength, offset + length);\n let value = '';\n for (let cursor = offset; cursor < end; cursor += 1) {\n const code = view.getUint8(cursor);\n if (code === 0) break;\n value += String.fromCharCode(code);\n }\n return value;\n}\n\nfunction fontFamily(face: string, map: Readonly<Record<string, string>>): string {\n const clean = face.trim() || 'sans-serif';\n const mapped = map[clean] ?? map[clean.toLowerCase()] ?? clean;\n return /^(?:serif|sans-serif|monospace|system-ui)$/i.test(mapped)\n ? mapped\n : `\"${mapped.replaceAll('\"', '\\\\\"')}\"`;\n}\n\nfunction cloneState(state: DrawingState): DrawingState {\n return {\n ...state,\n pen: { ...state.pen },\n brush: { ...state.brush },\n font: { ...state.font },\n current: { ...state.current },\n windowOrigin: { ...state.windowOrigin },\n windowExtent: { ...state.windowExtent },\n viewportOrigin: { ...state.viewportOrigin },\n viewportExtent: { ...state.viewportExtent },\n world: { ...state.world },\n };\n}\n\nfunction initialState(bounds: Bounds): DrawingState {\n return {\n pen: { ...DEFAULT_PEN },\n brush: { ...DEFAULT_BRUSH },\n font: { ...DEFAULT_FONT },\n textColor: '#000000',\n backgroundColor: '#ffffff',\n backgroundMode: 2,\n textAlign: 0,\n fillMode: 'nonzero',\n current: { x: 0, y: 0 },\n windowOrigin: { x: bounds.left, y: bounds.top },\n windowExtent: { x: bounds.right - bounds.left, y: bounds.bottom - bounds.top },\n viewportOrigin: { x: 0, y: 0 },\n viewportExtent: { x: bounds.right - bounds.left, y: bounds.bottom - bounds.top },\n mappingEnabled: false,\n world: { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0 },\n };\n}\n\nclass GdiRenderer {\n readonly objects = new Map<number, GdiObject>();\n readonly stack: DrawingState[] = [];\n state: DrawingState;\n\n constructor(\n readonly context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\n readonly bounds: Bounds,\n readonly scaleX: number,\n readonly scaleY: number,\n readonly familyMap: Readonly<Record<string, string>>,\n ) {\n this.state = initialState(bounds);\n }\n\n point(x: number, y: number): Point {\n const matrix = this.state.world;\n const transformed = {\n x: matrix.a * x + matrix.c * y + matrix.e,\n y: matrix.b * x + matrix.d * y + matrix.f,\n };\n const deviceX = this.state.mappingEnabled\n ? ((transformed.x - this.state.windowOrigin.x) / (this.state.windowExtent.x || 1)) *\n (this.state.viewportExtent.x || 1) +\n this.state.viewportOrigin.x\n : transformed.x;\n const deviceY = this.state.mappingEnabled\n ? ((transformed.y - this.state.windowOrigin.y) / (this.state.windowExtent.y || 1)) *\n (this.state.viewportExtent.y || 1) +\n this.state.viewportOrigin.y\n : transformed.y;\n return {\n x: (deviceX - this.bounds.left) * this.scaleX,\n y: (deviceY - this.bounds.top) * this.scaleY,\n };\n }\n\n lengthX(value: number): number {\n return (\n Math.abs(\n this.state.mappingEnabled\n ? (value / (this.state.windowExtent.x || 1)) * (this.state.viewportExtent.x || 1)\n : value,\n ) * this.scaleX\n );\n }\n\n lengthY(value: number): number {\n return (\n Math.abs(\n this.state.mappingEnabled\n ? (value / (this.state.windowExtent.y || 1)) * (this.state.viewportExtent.y || 1)\n : value,\n ) * this.scaleY\n );\n }\n\n applyPen(): boolean {\n const pen = this.state.pen;\n if (pen.null) return false;\n this.context.strokeStyle = pen.color;\n this.context.lineWidth = Math.max(1, this.lengthX(pen.width || 1));\n const dash = pen.style & 0x0f;\n this.context.setLineDash?.(\n dash === 1 ? [8, 4] : dash === 2 ? [2, 3] : dash === 3 ? [8, 3, 2, 3] : [],\n );\n return true;\n }\n\n applyBrush(): boolean {\n if (this.state.brush.null) return false;\n this.context.fillStyle = this.state.brush.color;\n return true;\n }\n\n paintPath(close = false): void {\n if (close) this.context.closePath();\n if (this.applyBrush() && close) this.context.fill(this.state.fillMode);\n if (this.applyPen()) this.context.stroke();\n }\n\n selectObject(index: number): void {\n const object = index >= 0x80000000 ? stockObject(index & 0x7fffffff) : this.objects.get(index);\n if (!object) return;\n if (object.kind === 'pen') this.state.pen = { ...object };\n else if (object.kind === 'brush') this.state.brush = { ...object };\n else this.state.font = { ...object };\n }\n\n drawText(text: string, x: number, y: number): void {\n if (!text) return;\n const position = this.point(x, y);\n const size = Math.max(8, this.lengthY(this.state.font.height));\n const weight = Math.max(100, Math.min(900, Math.round(this.state.font.weight / 100) * 100));\n const weightPart = weight === 400 ? '' : `${weight} `;\n this.context.font = `${this.state.font.italic ? 'italic ' : ''}${weightPart}${size}px ${fontFamily(this.state.font.family, this.familyMap)}`;\n this.context.fillStyle = this.state.textColor;\n this.context.textAlign =\n (this.state.textAlign & 6) === 6\n ? 'center'\n : (this.state.textAlign & 2) === 2\n ? 'right'\n : 'left';\n this.context.textBaseline =\n (this.state.textAlign & 24) === 24\n ? 'alphabetic'\n : (this.state.textAlign & 8) === 8\n ? 'bottom'\n : 'top';\n const angle = (-this.state.font.escapement / 10) * (Math.PI / 180);\n if (angle) {\n this.context.save();\n this.context.translate(position.x, position.y);\n this.context.rotate(angle);\n this.context.fillText(text, 0, 0);\n this.context.restore();\n } else this.context.fillText(text, position.x, position.y);\n }\n}\n\nfunction stockObject(index: number): GdiObject | undefined {\n if (index === 0) return { ...DEFAULT_BRUSH };\n if (index === 4) return { ...DEFAULT_BRUSH, color: '#000000' };\n if (index === 5) return { ...DEFAULT_BRUSH, null: true };\n if (index === 6) return { ...DEFAULT_PEN, color: '#ffffff' };\n if (index === 7) return { ...DEFAULT_PEN };\n if (index === 8) return { ...DEFAULT_PEN, null: true };\n if (index >= 10 && index <= 17) return { ...DEFAULT_FONT };\n return undefined;\n}\n\nfunction validRange(view: DataView, offset: number, length: number): boolean {\n return offset >= 0 && length >= 0 && offset <= view.byteLength - length;\n}\n\nfunction drawRectangle(renderer: GdiRenderer, bounds: Bounds, radius?: Point): void {\n const first = renderer.point(bounds.left, bounds.top);\n const second = renderer.point(bounds.right, bounds.bottom);\n const x = Math.min(first.x, second.x);\n const y = Math.min(first.y, second.y);\n const width = Math.abs(second.x - first.x);\n const height = Math.abs(second.y - first.y);\n renderer.context.beginPath();\n if (radius && 'roundRect' in renderer.context) {\n renderer.context.roundRect(x, y, width, height, [\n renderer.lengthX(radius.x) / 2,\n renderer.lengthY(radius.y) / 2,\n ]);\n } else renderer.context.rect(x, y, width, height);\n renderer.paintPath(true);\n}\n\nfunction drawEllipse(renderer: GdiRenderer, bounds: Bounds): void {\n const first = renderer.point(bounds.left, bounds.top);\n const second = renderer.point(bounds.right, bounds.bottom);\n const centerX = (first.x + second.x) / 2;\n const centerY = (first.y + second.y) / 2;\n renderer.context.beginPath();\n renderer.context.ellipse(\n centerX,\n centerY,\n Math.abs(second.x - first.x) / 2,\n Math.abs(second.y - first.y) / 2,\n 0,\n 0,\n Math.PI * 2,\n );\n renderer.paintPath(true);\n}\n\nfunction drawPoints(renderer: GdiRenderer, points: Point[], close: boolean): void {\n const first = points[0];\n if (!first) return;\n const start = renderer.point(first.x, first.y);\n renderer.context.beginPath();\n renderer.context.moveTo(start.x, start.y);\n for (const point of points.slice(1)) {\n const next = renderer.point(point.x, point.y);\n renderer.context.lineTo(next.x, next.y);\n }\n renderer.paintPath(close);\n}\n\nfunction readBounds32(view: DataView, offset: number): Bounds {\n return {\n left: view.getInt32(offset, true),\n top: view.getInt32(offset + 4, true),\n right: view.getInt32(offset + 8, true),\n bottom: view.getInt32(offset + 12, true),\n };\n}\n\nfunction replayEmfRecord(\n renderer: GdiRenderer,\n view: DataView,\n recordOffset: number,\n type: number,\n size: number,\n): boolean {\n const data = recordOffset + 8;\n switch (type) {\n case 9:\n renderer.state.windowExtent = {\n x: view.getInt32(data, true),\n y: view.getInt32(data + 4, true),\n };\n renderer.state.mappingEnabled = true;\n break;\n case 10:\n renderer.state.windowOrigin = {\n x: view.getInt32(data, true),\n y: view.getInt32(data + 4, true),\n };\n renderer.state.mappingEnabled = true;\n break;\n case 11:\n renderer.state.viewportExtent = {\n x: view.getInt32(data, true),\n y: view.getInt32(data + 4, true),\n };\n renderer.state.mappingEnabled = true;\n break;\n case 12:\n renderer.state.viewportOrigin = {\n x: view.getInt32(data, true),\n y: view.getInt32(data + 4, true),\n };\n renderer.state.mappingEnabled = true;\n break;\n case 14:\n return false;\n case 15: {\n const point = renderer.point(view.getInt32(data, true), view.getInt32(data + 4, true));\n renderer.context.fillStyle = colorRef(view, data + 8);\n renderer.context.fillRect(point.x, point.y, 1, 1);\n break;\n }\n case 17:\n renderer.state.mappingEnabled = view.getInt32(data, true) !== 1;\n break;\n case 18:\n renderer.state.backgroundMode = view.getInt32(data, true);\n break;\n case 19:\n renderer.state.fillMode = view.getInt32(data, true) === 1 ? 'evenodd' : 'nonzero';\n break;\n case 22:\n renderer.state.textAlign = view.getInt32(data, true);\n break;\n case 24:\n renderer.state.textColor = colorRef(view, data);\n break;\n case 25:\n renderer.state.backgroundColor = colorRef(view, data);\n break;\n case 27:\n renderer.state.current = {\n x: view.getInt32(data, true),\n y: view.getInt32(data + 4, true),\n };\n break;\n case 30: {\n const bounds = readBounds32(view, data);\n const first = renderer.point(bounds.left, bounds.top);\n const second = renderer.point(bounds.right, bounds.bottom);\n renderer.context.beginPath();\n renderer.context.rect(first.x, first.y, second.x - first.x, second.y - first.y);\n renderer.context.clip();\n break;\n }\n case 33:\n renderer.stack.push(cloneState(renderer.state));\n renderer.context.save();\n break;\n case 34: {\n const restored = renderer.stack.pop();\n if (restored) {\n renderer.state = restored;\n renderer.context.restore();\n }\n break;\n }\n case 35:\n renderer.state.world = {\n a: view.getFloat32(data, true),\n b: view.getFloat32(data + 4, true),\n c: view.getFloat32(data + 8, true),\n d: view.getFloat32(data + 12, true),\n e: view.getFloat32(data + 16, true),\n f: view.getFloat32(data + 20, true),\n };\n break;\n case 37:\n renderer.selectObject(view.getUint32(data, true));\n break;\n case 38:\n renderer.objects.set(view.getUint32(data, true), {\n kind: 'pen',\n style: view.getUint32(data + 4, true),\n width: Math.abs(view.getInt32(data + 8, true)) || 1,\n color: colorRef(view, data + 16),\n null: false,\n });\n break;\n case 39: {\n const style = view.getUint32(data + 4, true);\n renderer.objects.set(view.getUint32(data, true), {\n kind: 'brush',\n style,\n color: colorRef(view, data + 8),\n null: style === 1,\n });\n break;\n }\n case 40:\n renderer.objects.delete(view.getUint32(data, true));\n break;\n case 42:\n drawEllipse(renderer, readBounds32(view, data));\n break;\n case 43:\n drawRectangle(renderer, readBounds32(view, data));\n break;\n case 44:\n drawRectangle(renderer, readBounds32(view, data), {\n x: view.getInt32(data + 16, true),\n y: view.getInt32(data + 20, true),\n });\n break;\n case 54: {\n const end = { x: view.getInt32(data, true), y: view.getInt32(data + 4, true) };\n drawPoints(renderer, [renderer.state.current, end], false);\n renderer.state.current = end;\n break;\n }\n case 82:\n renderer.objects.set(view.getUint32(data, true), {\n kind: 'font',\n height: Math.abs(view.getInt32(data + 4, true)) || 12,\n escapement: view.getInt32(data + 12, true),\n weight: view.getInt32(data + 20, true) || 400,\n italic: view.getUint8(data + 24) !== 0,\n underline: view.getUint8(data + 25) !== 0,\n strike: view.getUint8(data + 26) !== 0,\n family: readUtf16(view, data + 32, 32) || 'sans-serif',\n });\n break;\n case 84: {\n const count = view.getUint32(data + 36, true);\n const stringOffset = view.getUint32(data + 40, true);\n if (count <= 1_000_000 && stringOffset >= 8 && stringOffset + count * 2 <= size) {\n renderer.drawText(\n readUtf16(view, recordOffset + stringOffset, count),\n view.getInt32(data + 28, true),\n view.getInt32(data + 32, true),\n );\n }\n break;\n }\n case 3:\n case 4:\n case 85:\n case 86:\n case 87: {\n const count = view.getUint32(data + 16, true);\n const short = type >= 85;\n const stride = short ? 4 : 8;\n if (count > 1_000_000 || 20 + count * stride > size - 8) break;\n const points: Point[] = [];\n for (let index = 0; index < count; index += 1) {\n const offset = data + 20 + index * stride;\n points.push({\n x: short ? view.getInt16(offset, true) : view.getInt32(offset, true),\n y: short ? view.getInt16(offset + 2, true) : view.getInt32(offset + 4, true),\n });\n }\n drawPoints(renderer, points, type === 3 || type === 86);\n break;\n }\n }\n return true;\n}\n\nfunction emfBounds(view: DataView): Bounds | undefined {\n if (view.byteLength < 88 || view.getUint32(0, true) !== 1) return undefined;\n const bounds = readBounds32(view, 8);\n if (bounds.right > bounds.left && bounds.bottom > bounds.top) return bounds;\n return undefined;\n}\n\nexport async function renderEmfToDataUrl(\n buffer: ArrayBuffer,\n maxWidth?: number,\n maxHeight?: number,\n optionsOrScale?: MetafileRenderOptions | number,\n): Promise<string | null> {\n try {\n const view = new DataView(buffer);\n const bounds = emfBounds(view);\n if (!bounds) return null;\n const options = readOptions(maxWidth, maxHeight, optionsOrScale);\n const surface = createSurface(bounds.right - bounds.left, bounds.bottom - bounds.top, options);\n if (!surface) return null;\n const renderer = new GdiRenderer(\n surface.context,\n bounds,\n surface.scaleX,\n surface.scaleY,\n options.fontFamilyMap,\n );\n let offset = 0;\n let records = 0;\n while (offset + 8 <= view.byteLength && records < options.maxRecords) {\n const type = view.getUint32(offset, true);\n const size = view.getUint32(offset + 4, true);\n if (size < 8 || size % 4 !== 0 || !validRange(view, offset, size)) return null;\n records += 1;\n const keepGoing = replayEmfRecord(renderer, view, offset, type, size);\n offset += size;\n if (!keepGoing) break;\n }\n return await exportPng(surface.canvas);\n } catch {\n return null;\n }\n}\n\nconst PLACEABLE_WMF_KEY = 0x9ac6cdd7;\n\ninterface WmfHeader {\n recordsOffset: number;\n bounds: Bounds;\n}\n\nfunction wmfHeader(view: DataView): WmfHeader | undefined {\n if (view.byteLength < 18) return undefined;\n if (view.getUint32(0, true) === PLACEABLE_WMF_KEY) {\n if (view.byteLength < 40) return undefined;\n const bounds = {\n left: view.getInt16(6, true),\n top: view.getInt16(8, true),\n right: view.getInt16(10, true),\n bottom: view.getInt16(12, true),\n };\n if (bounds.right <= bounds.left || bounds.bottom <= bounds.top) return undefined;\n return { recordsOffset: 40, bounds };\n }\n // A non-placeable WMF has no physical bounds. Start with its logical default;\n // SETWINDOWORG/SETWINDOWEXT records refine the mapping during replay.\n return { recordsOffset: 18, bounds: { left: 0, top: 0, right: 1_024, bottom: 768 } };\n}\n\nfunction addWmfObject(renderer: GdiRenderer, object: GdiObject): void {\n let index = 0;\n while (renderer.objects.has(index)) index += 1;\n renderer.objects.set(index, object);\n}\n\nfunction wmfPoint(view: DataView, offset: number): Point {\n return { x: view.getInt16(offset, true), y: view.getInt16(offset + 2, true) };\n}\n\nfunction replayWmfRecord(\n renderer: GdiRenderer,\n view: DataView,\n data: number,\n functionId: number,\n dataLength: number,\n): boolean {\n switch (functionId) {\n case 0x0000:\n return false;\n case 0x001e:\n renderer.stack.push(cloneState(renderer.state));\n renderer.context.save();\n break;\n case 0x0102:\n renderer.state.backgroundMode = view.getUint16(data, true);\n break;\n case 0x0106:\n renderer.state.fillMode = view.getUint16(data, true) === 1 ? 'evenodd' : 'nonzero';\n break;\n case 0x012d:\n renderer.selectObject(view.getUint16(data, true));\n break;\n case 0x012e:\n renderer.state.textAlign = view.getUint16(data, true);\n break;\n case 0x0127: {\n const restored = renderer.stack.pop();\n if (restored) {\n renderer.state = restored;\n renderer.context.restore();\n }\n break;\n }\n case 0x01f0:\n renderer.objects.delete(view.getUint16(data, true));\n break;\n case 0x0201:\n renderer.state.backgroundColor = colorRef(view, data);\n break;\n case 0x0209:\n renderer.state.textColor = colorRef(view, data);\n break;\n case 0x020b:\n renderer.state.windowOrigin = {\n x: view.getInt16(data + 2, true),\n y: view.getInt16(data, true),\n };\n renderer.state.mappingEnabled = true;\n break;\n case 0x020c:\n renderer.state.windowExtent = {\n x: view.getInt16(data + 2, true),\n y: view.getInt16(data, true),\n };\n renderer.state.mappingEnabled = true;\n break;\n case 0x0214:\n renderer.state.current = {\n x: view.getInt16(data + 2, true),\n y: view.getInt16(data, true),\n };\n break;\n case 0x0213: {\n const end = { x: view.getInt16(data + 2, true), y: view.getInt16(data, true) };\n drawPoints(renderer, [renderer.state.current, end], false);\n renderer.state.current = end;\n break;\n }\n case 0x02fa:\n addWmfObject(renderer, {\n kind: 'pen',\n style: view.getUint16(data, true),\n width: Math.abs(view.getInt16(data + 2, true)) || 1,\n color: colorRef(view, data + 6),\n null: false,\n });\n break;\n case 0x02fc: {\n const style = view.getUint16(data, true);\n addWmfObject(renderer, {\n kind: 'brush',\n style,\n color: colorRef(view, data + 2),\n null: style === 1,\n });\n break;\n }\n case 0x02fb:\n addWmfObject(renderer, {\n kind: 'font',\n height: Math.abs(view.getInt16(data, true)) || 12,\n escapement: view.getInt16(data + 4, true),\n weight: view.getInt16(data + 8, true) || 400,\n italic: view.getUint8(data + 10) !== 0,\n underline: view.getUint8(data + 11) !== 0,\n strike: view.getUint8(data + 12) !== 0,\n family: readAnsi(view, data + 18, Math.max(0, dataLength - 18)) || 'sans-serif',\n });\n break;\n case 0x0324:\n case 0x0325: {\n const count = view.getUint16(data, true);\n if (2 + count * 4 > dataLength) break;\n const points: Point[] = [];\n for (let index = 0; index < count; index += 1) {\n points.push(wmfPoint(view, data + 2 + index * 4));\n }\n drawPoints(renderer, points, functionId === 0x0324);\n break;\n }\n case 0x0418: {\n const bottom = view.getInt16(data, true);\n const right = view.getInt16(data + 2, true);\n const top = view.getInt16(data + 4, true);\n const left = view.getInt16(data + 6, true);\n drawEllipse(renderer, { left, top, right, bottom });\n break;\n }\n case 0x041b: {\n const bottom = view.getInt16(data, true);\n const right = view.getInt16(data + 2, true);\n const top = view.getInt16(data + 4, true);\n const left = view.getInt16(data + 6, true);\n drawRectangle(renderer, { left, top, right, bottom });\n break;\n }\n case 0x061c: {\n const bottom = view.getInt16(data + 4, true);\n const right = view.getInt16(data + 6, true);\n const top = view.getInt16(data + 8, true);\n const left = view.getInt16(data + 10, true);\n drawRectangle(\n renderer,\n { left, top, right, bottom },\n {\n x: view.getInt16(data + 2, true),\n y: view.getInt16(data, true),\n },\n );\n break;\n }\n case 0x0521: {\n const count = view.getUint16(data, true);\n const padded = (count + 1) & ~1;\n if (2 + padded + 4 > dataLength) break;\n renderer.drawText(\n readAnsi(view, data + 2, count),\n view.getInt16(data + 2 + padded + 2, true),\n view.getInt16(data + 2 + padded, true),\n );\n break;\n }\n case 0x0a32: {\n const count = view.getUint16(data + 4, true);\n const options = view.getUint16(data + 6, true);\n const stringOffset = data + ((options & 6) !== 0 ? 16 : 8);\n if (stringOffset + count > data + dataLength) break;\n renderer.drawText(\n readAnsi(view, stringOffset, count),\n view.getInt16(data + 2, true),\n view.getInt16(data, true),\n );\n break;\n }\n }\n return true;\n}\n\nexport async function renderWmfToDataUrl(\n buffer: ArrayBuffer,\n maxWidth?: number,\n maxHeight?: number,\n optionsOrScale?: MetafileRenderOptions | number,\n): Promise<string | null> {\n try {\n const view = new DataView(buffer);\n const header = wmfHeader(view);\n if (!header) return null;\n const options = readOptions(maxWidth, maxHeight, optionsOrScale);\n const surface = createSurface(\n header.bounds.right - header.bounds.left,\n header.bounds.bottom - header.bounds.top,\n options,\n );\n if (!surface) return null;\n const renderer = new GdiRenderer(\n surface.context,\n header.bounds,\n surface.scaleX,\n surface.scaleY,\n options.fontFamilyMap,\n );\n renderer.state.mappingEnabled = true;\n let offset = header.recordsOffset;\n let records = 0;\n while (offset + 6 <= view.byteLength && records < options.maxRecords) {\n const words = view.getUint32(offset, true);\n const size = words * 2;\n if (words < 3 || !validRange(view, offset, size)) return null;\n const functionId = view.getUint16(offset + 4, true);\n records += 1;\n const keepGoing = replayWmfRecord(renderer, view, offset + 6, functionId, size - 6);\n offset += size;\n if (!keepGoing) break;\n }\n return await exportPng(surface.canvas);\n } catch {\n return null;\n }\n}\n","import type { ViewerZoomLevel } from './types';\n\nexport const MIN_VIEWER_ZOOM = 10;\nexport const MAX_VIEWER_ZOOM = 400;\n\nexport function normalizeViewerZoomLevel(level: ViewerZoomLevel): ViewerZoomLevel {\n if (typeof level !== 'number') return level;\n if (Number.isNaN(level)) return 100;\n return Math.max(MIN_VIEWER_ZOOM, Math.min(MAX_VIEWER_ZOOM, level));\n}\n\nexport function resolveViewerZoom(\n level: ViewerZoomLevel,\n viewportWidth: number,\n viewportHeight: number,\n contentWidth: number,\n contentHeight: number,\n): number {\n const normalized = normalizeViewerZoomLevel(level);\n if (typeof normalized === 'number') return normalized;\n\n const safeContentWidth = Number.isFinite(contentWidth) && contentWidth > 0 ? contentWidth : 1;\n const safeContentHeight = Number.isFinite(contentHeight) && contentHeight > 0 ? contentHeight : 1;\n const fitWidth =\n ((Number.isFinite(viewportWidth) && viewportWidth > 0 ? viewportWidth : safeContentWidth) /\n safeContentWidth) *\n 100;\n const fitHeight =\n ((Number.isFinite(viewportHeight) && viewportHeight > 0 ? viewportHeight : safeContentHeight) /\n safeContentHeight) *\n 100;\n\n const resolved =\n normalized === 'fit-width'\n ? fitWidth\n : normalized === 'fit-page'\n ? Math.min(fitWidth, fitHeight)\n : Math.min(fitWidth, 100);\n return Math.max(MIN_VIEWER_ZOOM, Math.min(MAX_VIEWER_ZOOM, resolved));\n}\n","import type {\n FillStyle,\n ImageEffects,\n LineStyle,\n PresentationAsset,\n PresentationDocument,\n PresentationSearchResult,\n PresentationTheme,\n SlideNode,\n TextParagraph,\n TextRun,\n} from '@extend-ai/react-pptx-model';\nimport { renderChartInto } from './charts/chart-host';\nimport type {\n FitMode,\n SearchHighlightOptions,\n ViewerZoomLevel,\n ViewerZoomState,\n ViewerSearchOptions,\n VirtualizationOptions,\n} from './types';\nimport { Virtualizer } from '@tanstack/virtual-core';\nimport { OFFICE_FONT_FALLBACKS } from './fonts';\nimport { renderEmfToDataUrl, renderWmfToDataUrl } from './metafile-renderer';\nimport {\n MAX_VIEWER_ZOOM,\n MIN_VIEWER_ZOOM,\n normalizeViewerZoomLevel,\n resolveViewerZoom,\n} from './zoom';\n\nconst EMU_PER_CSS_PIXEL = 9_525;\nconst DEFAULT_TEXT_HORIZONTAL_INSET_EMU = 91_440;\nconst DEFAULT_TEXT_VERTICAL_INSET_EMU = 45_720;\nconst POWERPOINT_SINGLE_LINE_HEIGHT = 1.15;\n\ninterface TextRenderOptions {\n fontScale?: number;\n lineSpacingReduction?: number;\n textWrap?: string;\n spaceFirstLastParagraph?: boolean;\n}\n\ntype TextSpacingValue = number | { value: number; unit: 'points' | 'percent' };\n\ninterface NormalizedViewerCallbacks {\n onSlideChange?: (index: number) => void;\n onZoomChange?: (state: ViewerZoomState) => void;\n onSlideRendered?: (index: number, element: HTMLElement) => void;\n onSlideUnmounted?: (index: number) => void;\n onNodeError?: (nodeId: string, error: unknown) => void;\n}\n\ninterface DisposableHandle {\n element: HTMLElement;\n target: HTMLElement;\n ready: Promise<void>;\n setScale(scale: number): void;\n dispose(): void;\n}\n\ntype RenderListOptions = VirtualizationOptions & {\n showSlideLabels?: boolean;\n initialSlideIndex?: number;\n};\n\ninterface ListPlaceholder {\n item: HTMLElement;\n mount(): Promise<void>;\n unmount(): void;\n isMounted(): boolean;\n setScale(scale: number): void;\n}\n\ninterface ActiveListState {\n generation: number;\n options: RenderListOptions;\n placeholders: ListPlaceholder[];\n /** Deterministic offset navigation provided by the TanStack virtualizer. */\n scrollToIndex?: (index: number, options?: ScrollIntoViewOptions) => void;\n /** Recomputes list geometry without rebuilding slide DOM. */\n updateScale?: () => void;\n /** Temporarily leaves a navigation target as an empty shell so scrolling can paint first. */\n deferMount?: (index: number) => void;\n resumeMount?: (index: number) => void;\n}\n\nclass PresentationAssetCache {\n private references = 0;\n private readonly objectUrls = new Set<string>();\n private readonly assetUrls = new Map<string, string>();\n private readonly metafileUrls = new Map<string, Promise<string | undefined>>();\n\n acquire(): this {\n this.references += 1;\n return this;\n }\n\n metafileUrl(assetId: string, contentType: string, data: Uint8Array): Promise<string | undefined> {\n const cached = this.metafileUrls.get(assetId);\n if (cached) return cached;\n const convert = contentType.includes('wmf') ? renderWmfToDataUrl : renderEmfToDataUrl;\n const ownedBytes = data.slice();\n const pending = convert(ownedBytes.buffer as ArrayBuffer, 2_048, 2_048, {\n dpiScale: 2,\n maxCanvasDimension: 4_096,\n maxRecords: 200_000,\n fontFamilyMap: METAFILE_FONT_MAP,\n }).then((url) => url || undefined);\n this.metafileUrls.set(assetId, pending);\n return pending;\n }\n\n assetUrl(asset: PresentationAsset): Promise<string | undefined> {\n if (asset.url) return Promise.resolve(asset.url);\n if (!asset.data) return Promise.resolve(undefined);\n const contentType = asset.contentType.toLowerCase();\n if (contentType.includes('emf') || contentType.includes('wmf')) {\n return this.metafileUrl(asset.id, contentType, asset.data);\n }\n const cached = this.assetUrls.get(asset.id);\n if (cached) return Promise.resolve(cached);\n const ownedBytes = asset.data.slice();\n const url = URL.createObjectURL(\n new Blob([ownedBytes.buffer as ArrayBuffer], { type: asset.contentType }),\n );\n this.objectUrls.add(url);\n this.assetUrls.set(asset.id, url);\n return Promise.resolve(url);\n }\n\n release(): void {\n this.references = Math.max(0, this.references - 1);\n if (this.references > 0) return;\n for (const url of this.objectUrls) URL.revokeObjectURL(url);\n this.objectUrls.clear();\n this.assetUrls.clear();\n this.metafileUrls.clear();\n }\n}\n\nconst presentationAssetCaches = new WeakMap<PresentationDocument, PresentationAssetCache>();\n\nfunction acquirePresentationAssetCache(presentation: PresentationDocument): PresentationAssetCache {\n let cache = presentationAssetCaches.get(presentation);\n if (!cache) {\n cache = new PresentationAssetCache();\n presentationAssetCaches.set(presentation, cache);\n }\n return cache.acquire();\n}\n\n/** Vertical spacing between slides in continuous mode, in CSS pixels. */\nconst LIST_ITEM_GAP = 24;\n\n/**\n * Viewport rect used when layout measurements are unavailable (jsdom, SSR,\n * display: none) so the virtualizer still mounts an initial window.\n */\nconst FALLBACK_VIEWPORT_RECT = { width: 800, height: 600 };\n\nfunction pixelValue(value: string): number {\n const parsed = Number.parseFloat(value);\n return Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction scaleListAnchorOffset(\n offset: number,\n previousSlideHeight: number,\n nextSlideHeight: number,\n): number {\n if (previousSlideHeight <= 0) return offset;\n if (offset <= previousSlideHeight) return offset * (nextSlideHeight / previousSlideHeight);\n // The inter-slide gap is fixed CSS geometry and should not grow with zoom.\n return nextSlideHeight + (offset - previousSlideHeight);\n}\n\nconst METAFILE_FONT_MAP = Object.fromEntries(\n Object.entries(OFFICE_FONT_FALLBACKS).map(([family, fallbacks]) => [\n family,\n fallbacks.find(\n (candidate) => candidate.toLowerCase() !== family && !candidate.endsWith('serif'),\n ) ??\n fallbacks[0] ??\n family,\n ]),\n);\n\nfunction safeCssColorToken(raw: string): string | undefined {\n const value = raw.trim();\n if (!value || /[\\u0000-\\u001f\\u007f;{}'\"\\\\]/.test(value)) return undefined;\n if (/^(?:url|var|image|element|cross-fade)\\s*\\(/i.test(value)) return undefined;\n if (/^#(?:[\\da-f]{3,4}|[\\da-f]{6}|[\\da-f]{8})$/i.test(value)) return value;\n if (/^(?:[\\da-f]{3,4}|[\\da-f]{6}|[\\da-f]{8})$/i.test(value)) return `#${value}`;\n if (/^(?:rgb|rgba|hsl|hsla)\\([\\d\\s.,%+/-]+\\)$/i.test(value)) return value;\n if (/^[a-z]+$/i.test(value)) {\n if (/^(?:inherit|initial|unset|revert|currentcolor)$/i.test(value)) return undefined;\n const probe = document.createElement('span');\n probe.style.color = value;\n return probe.style.color ? value : undefined;\n }\n return undefined;\n}\n\nfunction color(value?: { value: string; alpha?: number }): string | undefined {\n if (!value) return undefined;\n const safe = safeCssColorToken(value.value);\n if (!safe) return undefined;\n if (value.alpha === undefined || value.alpha >= 1) return safe;\n const alpha = Math.max(0, Math.min(1, value.alpha));\n return `color-mix(in srgb, ${safe} ${Math.round(alpha * 100)}%, transparent)`;\n}\n\nfunction fill(fillStyle?: FillStyle): string | undefined {\n if (!fillStyle || fillStyle.type === 'none') return undefined;\n if (fillStyle.type === 'solid') return color(fillStyle.color);\n if (fillStyle.type === 'gradient') {\n const stops = [...fillStyle.stops]\n .sort((first, second) => first.position - second.position)\n .map((stop) => {\n const stopColor = color(stop.color);\n const position = Math.max(0, Math.min(1, stop.position));\n return stopColor ? `${stopColor} ${position * 100}%` : undefined;\n });\n if (stops.some((stop) => !stop)) return undefined;\n // DrawingML's 0-degree vector points left-to-right; CSS 90deg does the\n // same. Both increase clockwise, so the coordinate-system offset is +90.\n const cssAngle = ((((fillStyle.angle ?? 0) + 90) % 360) + 360) % 360;\n return `linear-gradient(${cssAngle}deg, ${stops.join(', ')})`;\n }\n if (fillStyle.type === 'pattern') {\n const foreground = color(fillStyle.foreground) ?? 'currentColor';\n const background = color(fillStyle.background) ?? 'transparent';\n const angle = /(?:vert|vertical)/i.test(fillStyle.preset)\n ? 90\n : /(?:diag|cross)/i.test(fillStyle.preset)\n ? 45\n : 0;\n return `repeating-linear-gradient(${angle}deg, ${foreground} 0 1px, ${background} 1px 5px)`;\n }\n return undefined;\n}\n\nfunction safeHyperlink(raw: string | undefined): string | undefined {\n if (!raw) return undefined;\n const value = raw.trim();\n if (!value || /[\\u0000-\\u001f\\u007f\\\\]/.test(value)) return undefined;\n if (value.startsWith('//')) return undefined;\n const scheme = /^([a-z][a-z\\d+.-]*):/i.exec(value)?.[1]?.toLowerCase();\n if (scheme && !['http', 'https', 'mailto', 'tel'].includes(scheme)) return undefined;\n return value;\n}\n\nfunction boundedScale(value: number | undefined): number {\n return value === undefined || !Number.isFinite(value) ? 1 : Math.max(0.01, Math.min(1, value));\n}\n\nfunction lineSpacingValue(value: TextSpacingValue, reduction: number): string {\n if (typeof value === 'object') {\n if (value.unit === 'points') return `${value.value}pt`;\n return String(value.value * POWERPOINT_SINGLE_LINE_HEIGHT * (1 - reduction));\n }\n // The public model currently carries both OOXML point and percentage spacing\n // as numbers. Percentage spacing is conventionally 50 or greater; smaller\n // values are fixed point sizes.\n return value >= 50 ? `${value * POWERPOINT_SINGLE_LINE_HEIGHT * (1 - reduction)}%` : `${value}pt`;\n}\n\nfunction paragraphSpacingValue(value: TextSpacingValue): string {\n if (typeof value === 'object') {\n return value.unit === 'points'\n ? `${value.value}pt`\n : `${value.value * POWERPOINT_SINGLE_LINE_HEIGHT}em`;\n }\n // Percentage paragraph spacing is relative to the current line height. CSS\n // vertical percentage margins are relative to width, so express it in em.\n return value >= 50 ? `${(value / 100) * POWERPOINT_SINGLE_LINE_HEIGHT}em` : `${value}pt`;\n}\n\nfunction bulletCharacter(paragraph: TextParagraph, counters: Map<number, number>): string {\n const bullet = paragraph.bullet;\n if (!bullet) return '';\n if (bullet.kind === 'number') {\n const level = paragraph.level ?? 0;\n const next = counters.get(level) ?? bullet.startAt ?? 1;\n counters.set(level, next + 1);\n for (const key of counters.keys()) if (key > level) counters.delete(key);\n return `${next}.`;\n }\n if (bullet.kind === 'picture') return '•';\n const value = bullet.value ?? '•';\n // Wingdings/Symbol private-use bullets have no useful glyph when their\n // original font is unavailable in a browser. Preserve ordinary Unicode\n // bullets and use a stable round bullet for private-use code points.\n return /[\\uE000-\\uF8FF]/u.test(value) ? '•' : value;\n}\n\nfunction isEastAsianLanguage(language: string): boolean {\n return /^(?:ja|ko|zh)(?:-|$)/i.test(language);\n}\n\nfunction isComplexScriptLanguage(language: string): boolean {\n return /^(?:ar|dv|fa|he|ku|ps|syr|ug|ur|yi)(?:-|$)/i.test(language);\n}\n\nfunction runFontFamily(run: TextRun): string | undefined {\n const language = run.language ?? run.alternativeLanguage ?? '';\n const symbolFirst = /^[\\u2000-\\u206f\\u2190-\\u2bff\\ue000-\\uf8ff\\s]+$/u.test(run.text);\n const ordered = symbolFirst\n ? [run.symbolFontFamily, run.fontFamily, run.eastAsianFontFamily, run.complexScriptFontFamily]\n : isEastAsianLanguage(language)\n ? [run.eastAsianFontFamily, run.fontFamily, run.complexScriptFontFamily, run.symbolFontFamily]\n : isComplexScriptLanguage(language) || run.rightToLeft\n ? [\n run.complexScriptFontFamily,\n run.fontFamily,\n run.eastAsianFontFamily,\n run.symbolFontFamily,\n ]\n : [\n run.fontFamily,\n run.eastAsianFontFamily,\n run.complexScriptFontFamily,\n run.symbolFontFamily,\n ];\n const families = ordered.filter(\n (family, index): family is string => Boolean(family) && ordered.indexOf(family) === index,\n );\n return families.length > 0 ? families.join(', ') : undefined;\n}\n\nfunction createTextRunElement(\n run: TextRun,\n paragraph: TextParagraph,\n fontScale: number,\n): HTMLElement {\n const href = safeHyperlink(run.hyperlink);\n const span = document.createElement(href ? 'a' : 'span');\n span.textContent = run.text;\n const fontFamily = runFontFamily(run);\n if (fontFamily) span.style.fontFamily = fontFamily;\n if (run.fontSizePt !== undefined) span.style.fontSize = `${run.fontSizePt * fontScale}pt`;\n if (run.characterSpacingPt !== undefined)\n span.style.letterSpacing = `${run.characterSpacingPt}pt`;\n if (run.kerningThresholdPt !== undefined) {\n const effectiveFontSize = run.fontSizePt === undefined ? undefined : run.fontSizePt * fontScale;\n span.style.fontKerning =\n effectiveFontSize === undefined || effectiveFontSize >= run.kerningThresholdPt\n ? 'normal'\n : 'none';\n }\n if (run.bold) span.style.fontWeight = '700';\n if (run.italic) span.style.fontStyle = 'italic';\n const decorations = [run.underline ? 'underline' : '', run.strike ? 'line-through' : ''].filter(\n Boolean,\n );\n if (decorations.length) span.style.textDecoration = decorations.join(' ');\n if (run.color) span.style.color = color(run.color) ?? '';\n if (run.baseline) {\n span.style.verticalAlign = run.baseline > 0 ? 'super' : 'sub';\n span.style.fontSize = span.style.fontSize || '0.75em';\n }\n const language = run.language ?? run.alternativeLanguage;\n if (language) span.lang = language;\n if (run.rightToLeft !== undefined) {\n span.dir = run.rightToLeft ? 'rtl' : 'ltr';\n span.style.unicodeBidi = 'embed';\n }\n if (paragraph.latinLineBreak && !isEastAsianLanguage(language ?? '')) {\n span.style.overflowWrap = 'anywhere';\n }\n if (paragraph.eastAsianLineBreak === false && isEastAsianLanguage(language ?? '')) {\n span.style.wordBreak = 'keep-all';\n }\n if (href && span instanceof HTMLAnchorElement) {\n span.href = href;\n span.target = '_blank';\n span.rel = 'noreferrer noopener';\n // Browser link defaults are not part of DrawingML. PowerPoint stores\n // hyperlink color and underline explicitly in the run properties.\n if (!run.color) span.style.color = 'inherit';\n if (!decorations.length) span.style.textDecoration = 'none';\n }\n return span;\n}\n\nfunction splitRunsIntoTabRows(runs: TextRun[]): TextRun[][][] {\n const rows: TextRun[][][] = [[[]]];\n for (const run of runs) {\n for (const token of run.text.split(/([\\t\\n])/u)) {\n if (!token) continue;\n if (token === '\\t') {\n rows.at(-1)!.push([]);\n } else if (token === '\\n') {\n rows.push([[]]);\n } else {\n rows\n .at(-1)!\n .at(-1)!\n .push({ ...run, text: token });\n }\n }\n }\n return rows;\n}\n\nfunction appendExplicitTabLayout(\n line: HTMLElement,\n paragraph: TextParagraph,\n fontScale: number,\n): boolean {\n const stops = [...(paragraph.tabStops ?? [])]\n .filter((stop) => Number.isFinite(stop.positionEmu) && stop.positionEmu >= 0)\n .sort((first, second) => first.positionEmu - second.positionEmu);\n if (stops.length === 0 || !paragraph.runs.some((run) => run.text.includes('\\t'))) return false;\n\n const widths: number[] = [];\n let previous = 0;\n for (const stop of stops) {\n widths.push(Math.max(0, (stop.positionEmu - previous) / EMU_PER_CSS_PIXEL));\n previous = stop.positionEmu;\n }\n const template = `${widths.map((width) => `${width}px`).join(' ')} minmax(0, 1fr)`;\n for (const cells of splitRunsIntoTabRows(paragraph.runs)) {\n const row = document.createElement('span');\n row.dataset.rpvTabRow = '';\n row.style.display = 'grid';\n row.style.position = 'relative';\n row.style.gridTemplateColumns = template;\n row.style.minWidth = '0';\n row.style.minHeight = '1em';\n cells.forEach((runs, cellIndex) => {\n const cell = document.createElement('span');\n cell.dataset.rpvTabCell = String(cellIndex);\n cell.style.minWidth = '0';\n if (cellIndex === 0) {\n cell.style.gridColumn = '1';\n } else {\n const stopIndex = Math.min(cellIndex - 1, stops.length - 1);\n const stop = stops[stopIndex]!;\n if (stop.alignment === 'left') {\n cell.style.gridColumn = String(Math.min(stopIndex + 2, stops.length + 1));\n } else if (stop.alignment === 'center') {\n cell.style.position = 'absolute';\n cell.style.left = `${stop.positionEmu / EMU_PER_CSS_PIXEL}px`;\n cell.style.transform = 'translateX(-50%)';\n } else {\n cell.style.gridColumn = String(Math.max(1, stopIndex + 1));\n cell.style.justifySelf = 'end';\n }\n }\n for (const run of runs) cell.append(createTextRunElement(run, paragraph, fontScale));\n row.append(cell);\n });\n line.append(row);\n }\n return true;\n}\n\nfunction applyText(\n container: HTMLElement,\n paragraphs: TextParagraph[],\n options: TextRenderOptions = {},\n): void {\n const fontScale = boundedScale(options.fontScale);\n const lineSpacingReduction = Math.max(0, Math.min(1, options.lineSpacingReduction ?? 0));\n const counters = new Map<number, number>();\n const wraps = !/^(?:none|nowrap)$/i.test(options.textWrap ?? 'square');\n container.style.whiteSpace = wraps ? 'pre-wrap' : 'pre';\n container.style.overflowWrap = 'normal';\n for (const [paragraphIndex, paragraph] of paragraphs.entries()) {\n const line = document.createElement('div');\n line.dataset.rpvTextParagraph = '';\n line.style.minWidth = '0';\n line.style.fontWeight = '400';\n line.style.lineHeight = String(POWERPOINT_SINGLE_LINE_HEIGHT * (1 - lineSpacingReduction));\n line.style.textAlign =\n paragraph.alignment === 'distributed' ? 'justify' : (paragraph.alignment ?? 'left');\n if (paragraph.alignment === 'distributed') {\n line.style.textAlignLast = 'justify';\n line.style.setProperty('text-justify', 'inter-character');\n } else if (paragraph.alignment === 'justify') {\n line.style.setProperty('text-justify', 'inter-word');\n }\n line.style.direction = paragraph.rtl ? 'rtl' : 'ltr';\n line.style.overflowWrap = wraps && paragraph.latinLineBreak ? 'anywhere' : 'normal';\n if (paragraph.eastAsianLineBreak !== undefined) {\n line.style.wordBreak = paragraph.eastAsianLineBreak ? 'normal' : 'keep-all';\n line.style.setProperty('line-break', paragraph.eastAsianLineBreak ? 'strict' : 'auto');\n }\n if (paragraph.hangingPunctuation) {\n line.style.setProperty('hanging-punctuation', 'first allow-end last');\n }\n if (paragraph.defaultTabSizeEmu !== undefined) {\n line.style.tabSize = `${paragraph.defaultTabSizeEmu / EMU_PER_CSS_PIXEL}px`;\n }\n line.style.marginLeft =\n paragraph.marginLeftEmu !== undefined\n ? `${paragraph.marginLeftEmu / EMU_PER_CSS_PIXEL}px`\n : paragraph.level\n ? `${paragraph.level * 1.25}em`\n : '0';\n if (paragraph.indentEmu !== undefined) {\n line.style.textIndent = `${paragraph.indentEmu / EMU_PER_CSS_PIXEL}px`;\n }\n if (\n paragraph.spaceBefore !== undefined &&\n (options.spaceFirstLastParagraph !== false || paragraphIndex !== 0)\n ) {\n line.style.marginTop = paragraphSpacingValue(paragraph.spaceBefore);\n }\n if (\n paragraph.spaceAfter !== undefined &&\n (options.spaceFirstLastParagraph !== false || paragraphIndex !== paragraphs.length - 1)\n ) {\n line.style.marginBottom = paragraphSpacingValue(paragraph.spaceAfter);\n }\n if (paragraph.lineSpacing !== undefined) {\n line.style.lineHeight = lineSpacingValue(paragraph.lineSpacing, lineSpacingReduction);\n }\n if (paragraph.bullet) {\n const marker = document.createElement('span');\n marker.dataset.rpvBullet = '';\n marker.textContent = `${bulletCharacter(paragraph, counters)}\\u00a0`;\n if (!paragraph.rtl && paragraph.indentEmu !== undefined && paragraph.indentEmu < 0) {\n marker.style.display = 'inline-block';\n marker.style.width = `${-paragraph.indentEmu / EMU_PER_CSS_PIXEL}px`;\n }\n if (paragraph.bullet.fontFamily) marker.style.fontFamily = paragraph.bullet.fontFamily;\n if (paragraph.bullet.fontSizePt !== undefined) {\n marker.style.fontSize = `${paragraph.bullet.fontSizePt * fontScale}pt`;\n } else if (paragraph.bullet.sizePercent !== undefined) {\n const surroundingSize = paragraph.runs.find(\n (run) => run.fontSizePt !== undefined,\n )?.fontSizePt;\n marker.style.fontSize =\n surroundingSize !== undefined\n ? `${surroundingSize * fontScale * paragraph.bullet.sizePercent}pt`\n : `${paragraph.bullet.sizePercent * 100}%`;\n }\n marker.setAttribute('aria-hidden', 'true');\n line.append(marker);\n }\n const usedExplicitTabs =\n !paragraph.bullet && appendExplicitTabLayout(line, paragraph, fontScale);\n if (!usedExplicitTabs) {\n for (const run of paragraph.runs)\n line.append(createTextRunElement(run, paragraph, fontScale));\n }\n container.append(line);\n }\n}\n\nfunction applyLine(element: HTMLElement, line?: LineStyle): void {\n if (!line) return;\n const width = Math.max(0, line.width ?? 1);\n const lineColor = color(line.color) ?? 'currentColor';\n const style = /dash|dot/i.test(line.dash ?? '') ? 'dashed' : 'solid';\n element.style.border = `${width}px ${style} ${lineColor}`;\n}\n\nfunction normalizedPresetGeometryPath(preset?: string): string | undefined {\n switch (preset) {\n case 'straightConnector1':\n return 'M 0 0 L 1 1';\n case 'heart':\n // ECMA-376 preset geometry, normalized from w/h coordinates to 0..1.\n return 'M 0.5 0.25 C 0.7083333333 -0.3333333333 1.5208333333 0.25 0.5 1 C -0.5208333333 0.25 0.2916666667 -0.3333333333 0.5 0.25 Z';\n default:\n return undefined;\n }\n}\n\nfunction applyGeometry(element: HTMLElement, preset?: string): void {\n switch (preset) {\n case 'ellipse':\n element.style.borderRadius = '50%';\n break;\n case 'roundRect':\n element.style.borderRadius = '10%';\n break;\n case 'triangle':\n element.style.clipPath = 'polygon(50% 0, 100% 100%, 0 100%)';\n break;\n case 'rtTriangle':\n element.style.clipPath = 'polygon(0 0, 100% 100%, 0 100%)';\n break;\n case 'diamond':\n element.style.clipPath = 'polygon(50% 0, 100% 50%, 50% 100%, 0 50%)';\n break;\n case 'parallelogram':\n element.style.clipPath = 'polygon(20% 0, 100% 0, 80% 100%, 0 100%)';\n break;\n case 'diagStripe':\n element.style.clipPath = 'polygon(0 50%, 50% 0, 100% 0, 0 100%)';\n break;\n case 'hexagon':\n element.style.clipPath = 'polygon(25% 0, 75% 0, 100% 50%, 75% 100%, 25% 100%, 0 50%)';\n break;\n case 'chevron':\n element.style.clipPath = 'polygon(0 0, 70% 0, 100% 50%, 70% 100%, 0 100%, 30% 50%)';\n break;\n case 'rightArrow':\n element.style.clipPath = 'polygon(0 25%, 75% 25%, 75% 0, 100% 50%, 75% 100%, 75% 75%, 0 75%)';\n break;\n case 'leftArrow':\n element.style.clipPath =\n 'polygon(25% 0, 25% 25%, 100% 25%, 100% 75%, 25% 75%, 25% 100%, 0 50%)';\n break;\n case 'upArrow':\n element.style.clipPath =\n 'polygon(50% 0, 100% 25%, 75% 25%, 75% 100%, 25% 100%, 25% 25%, 0 25%)';\n break;\n case 'downArrow':\n element.style.clipPath = 'polygon(25% 0, 75% 0, 75% 75%, 100% 75%, 50% 100%, 0 75%, 25% 75%)';\n break;\n case 'pentagon':\n element.style.clipPath = 'polygon(50% 0, 100% 38%, 82% 100%, 18% 100%, 0 38%)';\n break;\n case 'star5':\n element.style.clipPath =\n 'polygon(50% 0, 61% 35%, 98% 35%, 68% 57%, 79% 94%, 50% 72%, 21% 94%, 32% 57%, 2% 35%, 39% 35%)';\n break;\n }\n}\n\nfunction applyTextInsets(\n element: HTMLElement,\n insets: { top: number; right: number; bottom: number; left: number } | undefined,\n useBodyDefaults: boolean,\n): void {\n const resolved =\n insets ??\n (useBodyDefaults\n ? {\n top: DEFAULT_TEXT_VERTICAL_INSET_EMU,\n right: DEFAULT_TEXT_HORIZONTAL_INSET_EMU,\n bottom: DEFAULT_TEXT_VERTICAL_INSET_EMU,\n left: DEFAULT_TEXT_HORIZONTAL_INSET_EMU,\n }\n : undefined);\n if (!resolved) return;\n element.style.padding = `${resolved.top / EMU_PER_CSS_PIXEL}px ${resolved.right / EMU_PER_CSS_PIXEL}px ${resolved.bottom / EMU_PER_CSS_PIXEL}px ${resolved.left / EMU_PER_CSS_PIXEL}px`;\n}\n\nfunction applyTextOrientation(\n element: HTMLElement,\n textRotation?: number,\n verticalText?: string,\n rotationAsVerticalFlow = false,\n): void {\n const vertical = verticalText?.toLowerCase();\n if (vertical && vertical !== 'horz') {\n element.style.writingMode = vertical.includes('mongolian') ? 'vertical-lr' : 'vertical-rl';\n element.style.textOrientation = vertical.includes('wordartvert') ? 'upright' : 'mixed';\n }\n if (textRotation === undefined || !Number.isFinite(textRotation) || textRotation === 0) return;\n const normalized = ((textRotation % 360) + 360) % 360;\n if (rotationAsVerticalFlow && (normalized === 90 || normalized === 270)) {\n element.style.writingMode = 'vertical-rl';\n element.style.textOrientation = 'mixed';\n if (normalized === 270) element.style.transform = 'rotate(180deg)';\n return;\n }\n element.style.transform = `rotate(${textRotation}deg)`;\n element.style.transformOrigin = 'center';\n}\n\nfunction allowsTextOverflow(value: string | undefined): boolean {\n return value === undefined || /overflow/i.test(value);\n}\n\nfunction applyCroppedImage(\n image: HTMLImageElement,\n crop: { top: number; right: number; bottom: number; left: number },\n): void {\n const horizontal = Math.max(0.000_001, 1 - crop.left - crop.right);\n const vertical = Math.max(0.000_001, 1 - crop.top - crop.bottom);\n image.style.position = 'absolute';\n image.style.maxWidth = 'none';\n image.style.maxHeight = 'none';\n image.style.width = `${100 / horizontal}%`;\n image.style.height = `${100 / vertical}%`;\n image.style.left = `${(-crop.left / horizontal) * 100}%`;\n image.style.top = `${(-crop.top / vertical) * 100}%`;\n image.style.objectFit = 'fill';\n}\n\nfunction isWordCharacter(value: string | undefined): boolean {\n return Boolean(value && /[\\p{L}\\p{N}_]/u.test(value));\n}\n\nfunction rgbChannels(value: string | undefined): [number, number, number] | undefined {\n const hex = value?.trim().replace(/^#/, '');\n if (!hex || hex.length !== 6 || !/^[\\da-f]{6}$/i.test(hex)) return undefined;\n return [\n Number.parseInt(hex.slice(0, 2), 16),\n Number.parseInt(hex.slice(2, 4), 16),\n Number.parseInt(hex.slice(4, 6), 16),\n ];\n}\n\n/**\n * Builds a hidden SVG carrying a DrawingML duotone filter: the picture is\n * reduced to luminance, then mapped from the dark color to the light color.\n */\nfunction createDuotoneFilter(\n id: string,\n dark: [number, number, number],\n light: [number, number, number],\n): SVGSVGElement {\n const namespace = 'http://www.w3.org/2000/svg';\n const svg = document.createElementNS(namespace, 'svg');\n svg.setAttribute('width', '0');\n svg.setAttribute('height', '0');\n svg.style.position = 'absolute';\n svg.setAttribute('aria-hidden', 'true');\n const filter = document.createElementNS(namespace, 'filter');\n filter.id = id;\n filter.setAttribute('color-interpolation-filters', 'sRGB');\n const luminance = document.createElementNS(namespace, 'feColorMatrix');\n luminance.setAttribute('type', 'matrix');\n luminance.setAttribute(\n 'values',\n '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 const transfer = document.createElementNS(namespace, 'feComponentTransfer');\n const channels: Array<['feFuncR' | 'feFuncG' | 'feFuncB', 0 | 1 | 2]> = [\n ['feFuncR', 0],\n ['feFuncG', 1],\n ['feFuncB', 2],\n ];\n for (const [name, channel] of channels) {\n const func = document.createElementNS(namespace, name);\n func.setAttribute('type', 'table');\n func.setAttribute('tableValues', `${dark[channel] / 255} ${light[channel] / 255}`);\n transfer.append(func);\n }\n filter.append(luminance, transfer);\n svg.append(filter);\n return svg;\n}\n\n/**\n * Builds a deterministic sRGB threshold filter for DrawingML `a:biLevel`.\n * A discrete 256-entry transfer avoids the browser-dependent rounding of a\n * very large CSS contrast filter around the threshold boundary.\n */\nfunction createBiLevelFilter(id: string, threshold: number): SVGSVGElement {\n const namespace = 'http://www.w3.org/2000/svg';\n const svg = document.createElementNS(namespace, 'svg');\n svg.setAttribute('width', '0');\n svg.setAttribute('height', '0');\n svg.style.position = 'absolute';\n svg.setAttribute('aria-hidden', 'true');\n const filter = document.createElementNS(namespace, 'filter');\n filter.id = id;\n filter.setAttribute('color-interpolation-filters', 'sRGB');\n const luminance = document.createElementNS(namespace, 'feColorMatrix');\n luminance.setAttribute('type', 'matrix');\n luminance.setAttribute(\n 'values',\n '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 const transfer = document.createElementNS(namespace, 'feComponentTransfer');\n const tableValues = Array.from({ length: 256 }, (_, index) =>\n index / 255 < threshold ? '0' : '1',\n ).join(' ');\n for (const name of ['feFuncR', 'feFuncG', 'feFuncB'] as const) {\n const func = document.createElementNS(namespace, name);\n func.setAttribute('type', 'discrete');\n func.setAttribute('tableValues', tableValues);\n transfer.append(func);\n }\n filter.append(luminance, transfer);\n svg.append(filter);\n return svg;\n}\n\nfunction searchDocument(\n presentation: PresentationDocument,\n query: string | RegExp,\n options: ViewerSearchOptions = {},\n): PresentationSearchResult[] {\n if (typeof query === 'string' && !query) return [];\n const results: PresentationSearchResult[] = [];\n const expression =\n query instanceof RegExp\n ? new RegExp(query.source, query.flags.includes('g') ? query.flags : `${query.flags}g`)\n : new RegExp(\n options.useRegex ? query : query.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'),\n options.matchCase ? 'g' : 'gi',\n );\n const visit = (slideIndex: number, nodes: SlideNode[]): void => {\n for (const node of nodes) {\n const texts: string[] = [];\n if (node.type === 'shape' && options.includeShapes !== false) {\n texts.push(...(node.paragraphs ?? []).map((p) => p.runs.map((run) => run.text).join('')));\n } else if (node.type === 'table' && options.includeTables !== false) {\n for (const row of node.rows)\n for (const cell of row) {\n texts.push(...cell.paragraphs.map((p) => p.runs.map((run) => run.text).join('')));\n }\n } else if (node.type === 'chart') {\n if (node.title) texts.push(node.title);\n for (const series of node.series) if (series.name) texts.push(series.name);\n } else if (node.type === 'group' && options.includeGroups !== false) {\n visit(slideIndex, node.children);\n }\n const text = texts.join('\\n');\n expression.lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = expression.exec(text))) {\n const matchedText = match[0];\n if (\n !options.wholeWord ||\n (!isWordCharacter(text[match.index - 1]) &&\n !isWordCharacter(text[match.index + matchedText.length]))\n ) {\n const radius = options.snippetRadius ?? 32;\n results.push({\n slideIndex,\n nodeId: node.id,\n nodeType: node.type,\n text,\n matchStart: match.index,\n matchEnd: match.index + matchedText.length,\n snippet: text.slice(\n Math.max(0, match.index - radius),\n match.index + matchedText.length + radius,\n ),\n bounds: node.transform,\n });\n }\n if (!matchedText) expression.lastIndex += 1;\n }\n }\n };\n for (const slide of presentation.slides) visit(slide.index, slide.nodes);\n return results;\n}\n\nexport class NormalizedPresentationViewer {\n private current = 0;\n private zoomLevel: ViewerZoomLevel = 'automatic';\n private resolvedZoom = 100;\n private readonly assetCache: PresentationAssetCache;\n private resizeObserver: ResizeObserver | undefined;\n private activeViewport: HTMLElement | undefined;\n private listCleanup: (() => void) | undefined;\n private highlight: HTMLElement | undefined;\n private activeMountResources: Set<Promise<void>> | undefined;\n private mountedHandles = new Set<DisposableHandle>();\n private handlesByTarget = new Map<HTMLElement, DisposableHandle>();\n private destroyed = false;\n private renderingSlideIndex: number | undefined;\n private customGeometrySequence = 0;\n private renderGeneration = 0;\n private navigationGeneration = 0;\n private lastNotifiedSlide: number | undefined;\n private lastZoomNotification: ViewerZoomState | undefined;\n private listState: ActiveListState | undefined;\n private renderState:\n { mode: 'single' } | { mode: 'continuous'; options: RenderListOptions } | undefined;\n\n constructor(\n private readonly container: HTMLElement,\n readonly presentation: PresentationDocument,\n private readonly callbacks: NormalizedViewerCallbacks = {},\n ) {\n this.assetCache = acquirePresentationAssetCache(presentation);\n }\n\n get slideCount(): number {\n return this.presentation.slides.length;\n }\n get currentSlideIndex(): number {\n return this.current;\n }\n get zoom(): ViewerZoomLevel {\n return this.zoomLevel;\n }\n get zoomPercent(): number {\n return this.resolvedZoom;\n }\n get resolvedZoomPercent(): number {\n return this.resolvedZoom;\n }\n get fitMode(): FitMode {\n return typeof this.zoomLevel === 'number' ? 'none' : 'contain';\n }\n\n private get naturalSlideWidth(): number {\n const width = this.presentation.size.widthEmu / EMU_PER_CSS_PIXEL;\n return Number.isFinite(width) && width > 0 ? width : 1;\n }\n\n private get naturalSlideHeight(): number {\n const height = this.presentation.size.heightEmu / EMU_PER_CSS_PIXEL;\n return Number.isFinite(height) && height > 0 ? height : 1;\n }\n\n private viewportSize(viewport: HTMLElement): { width: number; height: number } {\n const rect = viewport.getBoundingClientRect();\n let width = viewport.clientWidth || rect.width;\n let height = viewport.clientHeight || rect.height;\n if (typeof getComputedStyle === 'function') {\n const viewportStyle = getComputedStyle(viewport);\n width -= pixelValue(viewportStyle.paddingLeft) + pixelValue(viewportStyle.paddingRight);\n height -= pixelValue(viewportStyle.paddingTop) + pixelValue(viewportStyle.paddingBottom);\n if (viewport !== this.container) {\n const containerStyle = getComputedStyle(this.container);\n width -= pixelValue(containerStyle.paddingLeft) + pixelValue(containerStyle.paddingRight);\n height -= pixelValue(containerStyle.paddingTop) + pixelValue(containerStyle.paddingBottom);\n }\n }\n return { width: Math.max(0, width), height: Math.max(0, height) };\n }\n\n resolveZoom(level: ViewerZoomLevel, viewport = this.activeViewport ?? this.container): number {\n const size = this.viewportSize(viewport);\n return resolveViewerZoom(\n level,\n size.width,\n size.height,\n this.naturalSlideWidth,\n this.naturalSlideHeight,\n );\n }\n\n private scaleForViewport(viewport: HTMLElement): number {\n return this.resolveZoom(this.zoomLevel, viewport) / 100;\n }\n\n private publishZoom(resolvedZoom: number): void {\n const normalized = Math.max(MIN_VIEWER_ZOOM, Math.min(MAX_VIEWER_ZOOM, resolvedZoom));\n const levelChanged = this.lastZoomNotification?.level !== this.zoomLevel;\n const resolutionChanged =\n this.lastZoomNotification === undefined ||\n Math.abs(this.lastZoomNotification.resolvedZoom - normalized) > 0.01;\n this.resolvedZoom = normalized;\n if (!levelChanged && !resolutionChanged) return;\n const state = { level: this.zoomLevel, resolvedZoom: normalized } satisfies ViewerZoomState;\n this.lastZoomNotification = state;\n this.callbacks.onZoomChange?.(state);\n }\n\n private observeViewport(viewport: HTMLElement): void {\n if (this.activeViewport === viewport && this.resizeObserver) return;\n this.resizeObserver?.disconnect();\n this.resizeObserver = undefined;\n this.activeViewport = viewport;\n if (typeof ResizeObserver === 'undefined') return;\n this.resizeObserver = new ResizeObserver(() => {\n if (this.destroyed || typeof this.zoomLevel === 'number') return;\n void this.updateRenderedScale();\n });\n this.resizeObserver.observe(viewport);\n if (viewport !== this.container) this.resizeObserver.observe(this.container);\n }\n\n private isRenderActive(generation: number): boolean {\n return !this.destroyed && generation === this.renderGeneration;\n }\n\n private beginRender(): number | undefined {\n if (this.destroyed) return undefined;\n const generation = ++this.renderGeneration;\n this.navigationGeneration += 1;\n this.listCleanup?.();\n this.listCleanup = undefined;\n this.resizeObserver?.disconnect();\n this.resizeObserver = undefined;\n this.activeViewport = undefined;\n this.listState = undefined;\n this.clearSearchHighlights();\n return generation;\n }\n\n private notifySlideChange(index: number): void {\n if (this.destroyed || this.lastNotifiedSlide === index) return;\n this.lastNotifiedSlide = index;\n this.callbacks.onSlideChange?.(index);\n }\n\n private assetUrl(asset: PresentationAsset): Promise<string | undefined> {\n return this.assetCache.assetUrl(asset);\n }\n\n private applyAsset(assetId: string, apply: (url: string) => void, nodeId: string): void {\n const asset = this.presentation.assets[assetId];\n if (!asset) return;\n const resources = this.activeMountResources;\n const pending = this.assetUrl(asset)\n .then((url) => {\n if (url && !this.destroyed) apply(url);\n })\n .catch((error: unknown) => {\n if (!this.destroyed) this.callbacks.onNodeError?.(nodeId, error);\n });\n resources?.add(pending);\n }\n\n /**\n * Applies DrawingML picture recolor effects (`a:biLevel`, `a:grayscl`,\n * `a:duotone`, `a:lum`) to the element that paints the picture, matching\n * PowerPoint's rendering as closely as CSS/SVG filters allow.\n */\n private applyImageEffects(\n target: HTMLElement | SVGElement,\n effects: ImageEffects | undefined,\n filterHost: HTMLElement,\n ): void {\n if (!effects) return;\n const filters: string[] = [];\n if (effects.duotone && effects.duotone.length >= 2) {\n const dark = rgbChannels(effects.duotone[0]?.value);\n const light = rgbChannels(effects.duotone[1]?.value);\n if (dark && light) {\n const id = `rpv-duotone-${++this.customGeometrySequence}`;\n filterHost.append(createDuotoneFilter(id, dark, light));\n filters.push(`url(#${id})`);\n }\n }\n if (effects.biLevelThreshold !== undefined) {\n const threshold = Math.min(0.98, Math.max(0.02, effects.biLevelThreshold));\n const id = `rpv-bilevel-${++this.customGeometrySequence}`;\n filterHost.append(createBiLevelFilter(id, threshold));\n filters.push(`url(#${id})`);\n } else if (effects.grayscale) {\n filters.push('grayscale(1)');\n }\n if (effects.brightness) {\n filters.push(`brightness(${1 + Math.max(-1, Math.min(1, effects.brightness))})`);\n }\n if (effects.contrast) {\n filters.push(`contrast(${1 + Math.max(-1, Math.min(1, effects.contrast))})`);\n }\n if (filters.length > 0) target.style.filter = filters.join(' ');\n }\n\n private applyFill(element: HTMLElement, fillStyle: FillStyle | undefined, nodeId: string): void {\n if (fillStyle?.type === 'image') {\n const opacity = Math.max(0, Math.min(1, fillStyle.opacity ?? 1));\n const target =\n opacity < 1 || fillStyle.effects\n ? (() => {\n const layer = document.createElement('div');\n layer.dataset.rpvImageFill = '';\n layer.style.position = 'absolute';\n layer.style.inset = '0';\n layer.style.pointerEvents = 'none';\n layer.style.opacity = String(opacity);\n layer.style.zIndex = '0';\n if (!element.style.position) element.style.position = 'relative';\n element.prepend(layer);\n return layer;\n })()\n : element;\n target.style.backgroundRepeat = fillStyle.mode === 'tile' ? 'repeat' : 'no-repeat';\n if (fillStyle.mode === 'tile') target.style.backgroundSize = 'auto';\n else if (fillStyle.crop) {\n const horizontal = Math.max(0.000_001, 1 - fillStyle.crop.left - fillStyle.crop.right);\n const vertical = Math.max(0.000_001, 1 - fillStyle.crop.top - fillStyle.crop.bottom);\n target.style.backgroundSize = `${100 / horizontal}% ${100 / vertical}%`;\n const horizontalCrop = fillStyle.crop.left + fillStyle.crop.right;\n const verticalCrop = fillStyle.crop.top + fillStyle.crop.bottom;\n target.style.backgroundPosition = `${\n Math.abs(horizontalCrop) > 0.000_001 ? (fillStyle.crop.left / horizontalCrop) * 100 : 50\n }% ${Math.abs(verticalCrop) > 0.000_001 ? (fillStyle.crop.top / verticalCrop) * 100 : 50}%`;\n } else {\n target.style.backgroundSize = '100% 100%';\n }\n this.applyImageEffects(target, fillStyle.effects, element);\n this.applyAsset(\n fillStyle.assetId,\n (url) => {\n target.style.backgroundImage = `url(${JSON.stringify(url)})`;\n },\n nodeId,\n );\n return;\n }\n element.style.background = fill(fillStyle) ?? 'transparent';\n }\n\n private createCustomGeometry(\n node: Extract<SlideNode, { type: 'shape' }>,\n pathData = node.geometry.path ?? '',\n ): SVGSVGElement {\n const namespace = 'http://www.w3.org/2000/svg';\n const svg = document.createElementNS(namespace, 'svg');\n svg.dataset.rpvCustomGeometry = '';\n svg.setAttribute('viewBox', '0 0 1 1');\n svg.setAttribute('preserveAspectRatio', 'none');\n svg.style.position = 'absolute';\n svg.style.inset = '0';\n svg.style.width = '100%';\n svg.style.height = '100%';\n svg.style.overflow = 'visible';\n svg.style.pointerEvents = 'none';\n\n let renderedPathData = pathData;\n if (node.geometry.preset === 'straightConnector1') {\n if (node.transform.width === 0 && node.transform.height !== 0) {\n svg.style.left = '-0.5px';\n svg.style.width = '1px';\n renderedPathData = 'M 0.5 0 L 0.5 1';\n } else if (node.transform.height === 0 && node.transform.width !== 0) {\n svg.style.top = '-0.5px';\n svg.style.height = '1px';\n renderedPathData = 'M 0 0.5 L 1 0.5';\n }\n }\n\n const path = document.createElementNS(namespace, 'path');\n path.setAttribute('d', renderedPathData);\n path.setAttribute('vector-effect', 'non-scaling-stroke');\n path.style.fill = 'none';\n\n const fillStyle = node.fill;\n if (fillStyle?.type === 'solid') {\n path.style.fill = color(fillStyle.color) ?? 'none';\n } else if (fillStyle?.type === 'gradient' && fillStyle.stops.length) {\n const definitions = document.createElementNS(namespace, 'defs');\n const gradient = document.createElementNS(namespace, 'linearGradient');\n const gradientId = `rpv-gradient-${++this.customGeometrySequence}`;\n gradient.id = gradientId;\n const radians = ((fillStyle.angle ?? 0) * Math.PI) / 180;\n const horizontal = Math.cos(radians) / 2;\n const vertical = Math.sin(radians) / 2;\n gradient.setAttribute('x1', String(0.5 - horizontal));\n gradient.setAttribute('y1', String(0.5 - vertical));\n gradient.setAttribute('x2', String(0.5 + horizontal));\n gradient.setAttribute('y2', String(0.5 + vertical));\n for (const stopStyle of [...fillStyle.stops].sort(\n (first, second) => first.position - second.position,\n )) {\n const stop = document.createElementNS(namespace, 'stop');\n stop.setAttribute('offset', String(Math.max(0, Math.min(1, stopStyle.position))));\n stop.style.stopColor = color(stopStyle.color) ?? 'transparent';\n gradient.append(stop);\n }\n definitions.append(gradient);\n svg.append(definitions);\n path.style.fill = `url(#${gradientId})`;\n } else if (fillStyle?.type === 'pattern') {\n path.style.fill = color(fillStyle.foreground) ?? 'none';\n } else if (fillStyle?.type === 'image') {\n const definitions = document.createElementNS(namespace, 'defs');\n const clipPath = document.createElementNS(namespace, 'clipPath');\n const clipId = `rpv-clip-${++this.customGeometrySequence}`;\n clipPath.id = clipId;\n const clipShape = path.cloneNode() as SVGPathElement;\n clipShape.removeAttribute('style');\n clipPath.append(clipShape);\n definitions.append(clipPath);\n svg.append(definitions);\n\n const image = document.createElementNS(namespace, 'image');\n const horizontal = Math.max(\n 0.000_001,\n 1 - (fillStyle.crop?.left ?? 0) - (fillStyle.crop?.right ?? 0),\n );\n const vertical = Math.max(\n 0.000_001,\n 1 - (fillStyle.crop?.top ?? 0) - (fillStyle.crop?.bottom ?? 0),\n );\n image.setAttribute('x', String(-(fillStyle.crop?.left ?? 0) / horizontal));\n image.setAttribute('y', String(-(fillStyle.crop?.top ?? 0) / vertical));\n image.setAttribute('width', String(1 / horizontal));\n image.setAttribute('height', String(1 / vertical));\n image.setAttribute('preserveAspectRatio', 'none');\n image.setAttribute('clip-path', `url(#${clipId})`);\n image.style.opacity = String(Math.max(0, Math.min(1, fillStyle.opacity ?? 1)));\n this.applyAsset(fillStyle.assetId, (url) => image.setAttribute('href', url), node.id);\n svg.append(image);\n }\n\n if (node.line) {\n path.style.stroke = color(node.line.color) ?? 'currentColor';\n path.style.strokeWidth = `${Math.max(0, node.line.width ?? 1)}px`;\n if (/dash/i.test(node.line.dash ?? '')) path.style.strokeDasharray = '6 4';\n else if (/dot/i.test(node.line.dash ?? '')) path.style.strokeDasharray = '1 3';\n }\n svg.append(path);\n return svg;\n }\n\n private themeForSlide(index: number | undefined): PresentationTheme | undefined {\n const slide = index === undefined ? undefined : this.presentation.slides[index];\n const master = this.presentation.masters.find((entry) => entry.id === slide?.masterId);\n return (\n this.presentation.themes.find((entry) => entry.id === master?.themeId) ??\n this.presentation.themes[0]\n );\n }\n\n private createChart(node: Extract<SlideNode, { type: 'chart' }>): HTMLElement {\n const container = document.createElement('div');\n container.style.width = '100%';\n container.style.height = '100%';\n container.setAttribute('role', 'img');\n container.setAttribute('aria-label', node.title ?? `${node.chartType} chart`);\n if (renderChartInto(container, node, this.themeForSlide(this.renderingSlideIndex))) {\n return container;\n }\n return this.createChartFallback(node);\n }\n\n private createChartFallback(node: Extract<SlideNode, { type: 'chart' }>): HTMLElement {\n const chart = document.createElement('div');\n chart.style.width = '100%';\n chart.style.height = '100%';\n chart.style.display = 'flex';\n chart.style.flexDirection = 'column';\n chart.style.boxSizing = 'border-box';\n chart.style.padding = '4%';\n chart.setAttribute('role', 'img');\n chart.setAttribute('aria-label', node.title ?? `${node.chartType} chart`);\n if (node.title) {\n const title = document.createElement('div');\n title.textContent = node.title;\n title.style.textAlign = 'center';\n title.style.fontWeight = '600';\n title.style.flex = '0 0 auto';\n chart.append(title);\n }\n const values = node.series\n .flatMap((series) => series.values)\n .filter((value): value is number => typeof value === 'number' && Number.isFinite(value));\n if (!values.length) {\n const empty = document.createElement('div');\n empty.textContent = node.title ?? 'Chart';\n empty.style.margin = 'auto';\n chart.append(empty);\n return chart;\n }\n const palette = ['#4472c4', '#ed7d31', '#a5a5a5', '#ffc000', '#5b9bd5', '#70ad47'];\n if (/pie|doughnut/i.test(node.chartType)) {\n const total = values.reduce((sum, value) => sum + Math.max(0, value), 0) || 1;\n let cursor = 0;\n const stops = values.map((value, index) => {\n const start = (cursor / total) * 360;\n cursor += Math.max(0, value);\n const end = (cursor / total) * 360;\n return `${palette[index % palette.length]} ${start}deg ${end}deg`;\n });\n const pie = document.createElement('div');\n pie.style.margin = 'auto';\n pie.style.width = 'min(78%, 220px)';\n pie.style.aspectRatio = '1';\n pie.style.borderRadius = '50%';\n pie.style.background = `conic-gradient(${stops.join(', ')})`;\n if (/doughnut/i.test(node.chartType)) {\n pie.style.mask = 'radial-gradient(circle, transparent 0 42%, #000 43%)';\n }\n chart.append(pie);\n return chart;\n }\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('viewBox', '0 0 1000 600');\n svg.setAttribute('preserveAspectRatio', 'none');\n svg.style.width = '100%';\n svg.style.flex = '1 1 auto';\n const hasNegativeValues = values.some((value) => value < 0);\n const minimum = hasNegativeValues ? Math.min(0, ...values) : 0;\n // Keep the original PowerPoint-oracle geometry for positive-only charts.\n // Mixed-sign charts need a real zero baseline, but scaling sub-unit\n // positive values to the full plot made many existing charts enormous.\n const maximum = hasNegativeValues ? Math.max(0, ...values) : Math.max(1, ...values);\n const range = maximum - minimum || 1;\n const plotTop = hasNegativeValues ? 60 : 80;\n const plotHeight = hasNegativeValues ? 480 : 460;\n const yPosition = (value: number) => plotTop + ((maximum - value) / range) * plotHeight;\n const zeroY = yPosition(0);\n const pointCount = Math.max(1, ...node.series.map((series) => series.values.length));\n if (/line|scatter|area/i.test(node.chartType)) {\n node.series.forEach((series, seriesIndex) => {\n const points = series.values\n .map((value, index) =>\n typeof value !== 'number' || !Number.isFinite(value)\n ? null\n : `${80 + (index / Math.max(1, pointCount - 1)) * 840},${yPosition(value)}`,\n )\n .filter((point): point is string => point !== null)\n .join(' ');\n const line = document.createElementNS('http://www.w3.org/2000/svg', 'polyline');\n line.setAttribute('points', points);\n line.setAttribute('fill', 'none');\n line.setAttribute('stroke', color(series.color) ?? palette[seriesIndex % palette.length]!);\n line.setAttribute('stroke-width', '8');\n svg.append(line);\n });\n } else {\n const seriesCount = Math.max(1, node.series.length);\n const slot = 840 / pointCount;\n const barWidth = Math.max(4, (slot * 0.72) / seriesCount);\n node.series.forEach((series, seriesIndex) => {\n series.values.forEach((value, index) => {\n if (typeof value !== 'number' || !Number.isFinite(value)) return;\n const valueY = yPosition(value);\n const height = Math.abs(zeroY - valueY);\n const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n rect.setAttribute('x', String(80 + index * slot + seriesIndex * barWidth));\n rect.setAttribute('y', String(Math.min(zeroY, valueY)));\n rect.setAttribute('width', String(barWidth * 0.9));\n rect.setAttribute('height', String(height));\n rect.setAttribute('fill', color(series.color) ?? palette[seriesIndex % palette.length]!);\n svg.append(rect);\n });\n });\n }\n chart.append(svg);\n return chart;\n }\n\n private createNode(\n node: SlideNode,\n coordinate: { x: number; y: number; width: number; height: number },\n ): HTMLElement {\n const href = safeHyperlink(node.hyperlink);\n const element = document.createElement(href ? 'a' : 'div');\n element.dataset.rpvNodeId = node.id;\n element.style.position = 'absolute';\n element.style.left = `${((node.transform.x - coordinate.x) / coordinate.width) * 100}%`;\n element.style.top = `${((node.transform.y - coordinate.y) / coordinate.height) * 100}%`;\n element.style.width = `${(node.transform.width / coordinate.width) * 100}%`;\n element.style.height = `${(node.transform.height / coordinate.height) * 100}%`;\n element.style.boxSizing = 'border-box';\n const transforms = [`rotate(${node.transform.rotation ?? 0}deg)`];\n if (node.transform.flipHorizontal) transforms.push('scaleX(-1)');\n if (node.transform.flipVertical) transforms.push('scaleY(-1)');\n element.style.transform = transforms.join(' ');\n element.style.transformOrigin = 'center';\n if (node.hidden) element.hidden = true;\n if (node.opacity !== undefined) element.style.opacity = String(node.opacity);\n if (node.altText) element.setAttribute('aria-label', node.altText);\n if (href && element instanceof HTMLAnchorElement) {\n element.href = href;\n element.target = '_blank';\n element.rel = 'noreferrer noopener';\n element.style.color = 'inherit';\n element.style.textDecoration = 'none';\n }\n\n if (node.type === 'shape') {\n const presetPath = normalizedPresetGeometryPath(node.geometry.preset);\n if (node.geometry.path || presetPath) {\n element.append(this.createCustomGeometry(node, node.geometry.path ?? presetPath));\n } else {\n this.applyFill(element, node.fill, node.id);\n applyGeometry(element, node.geometry.preset);\n applyLine(element, node.line);\n }\n const shapeAutofit = node.autofit?.mode === 'shape';\n const verticalText = Boolean(node.verticalText && node.verticalText.toLowerCase() !== 'horz');\n const growsToFitText = shapeAutofit && !verticalText;\n if (growsToFitText) {\n const minimumHeight = element.style.height;\n element.style.height = 'auto';\n element.style.minHeight = minimumHeight;\n element.style.display = 'flex';\n element.style.flexDirection = 'column';\n }\n element.style.overflowX =\n shapeAutofit || allowsTextOverflow(node.horizontalOverflow) ? 'visible' : 'clip';\n element.style.overflowY =\n shapeAutofit || allowsTextOverflow(node.verticalOverflow) ? 'visible' : 'clip';\n if (node.paragraphs) {\n const textBody = document.createElement('div');\n textBody.dataset.rpvTextBody = '';\n textBody.style.position = growsToFitText ? 'relative' : 'absolute';\n if (!growsToFitText) textBody.style.inset = '0';\n textBody.style.width = '100%';\n textBody.style.height = growsToFitText ? 'auto' : '100%';\n if (growsToFitText) textBody.style.flex = '1 0 auto';\n textBody.style.boxSizing = 'border-box';\n textBody.style.display = 'flex';\n textBody.style.flexDirection = 'column';\n textBody.style.justifyContent =\n node.verticalAlignment === 'middle'\n ? 'center'\n : node.verticalAlignment === 'bottom'\n ? 'flex-end'\n : 'flex-start';\n applyTextInsets(textBody, node.textInsets, true);\n applyTextOrientation(textBody, node.textRotation, node.verticalText);\n\n const textContent = document.createElement('div');\n textContent.dataset.rpvTextContent = '';\n textContent.style.minWidth = '0';\n textContent.style.maxHeight = '100%';\n if (node.columnCount && node.columnCount > 1) {\n textContent.style.width = '100%';\n textContent.style.height = '100%';\n textContent.style.columnCount = String(Math.floor(node.columnCount));\n textContent.style.columnFill = 'auto';\n if (node.columnSpacing !== undefined) {\n textContent.style.columnGap = `${node.columnSpacing / EMU_PER_CSS_PIXEL}px`;\n }\n if (node.rightToLeftColumns) textContent.style.direction = 'rtl';\n }\n applyText(textContent, node.paragraphs, {\n ...(node.autofit?.mode === 'normal'\n ? {\n fontScale: node.autofit.fontScale,\n lineSpacingReduction: node.autofit.lineSpacingReduction,\n }\n : {}),\n ...(node.textWrap !== undefined ? { textWrap: node.textWrap } : {}),\n ...(node.spaceFirstLastParagraph !== undefined\n ? { spaceFirstLastParagraph: node.spaceFirstLastParagraph }\n : {}),\n });\n textBody.append(textContent);\n element.append(textBody);\n }\n } else if (node.type === 'image') {\n const image = document.createElement('img');\n this.applyAsset(node.assetId, (url) => (image.src = url), node.id);\n image.alt = node.altText ?? node.name ?? '';\n image.style.display = 'block';\n image.style.width = '100%';\n image.style.height = '100%';\n image.style.objectFit = node.preserveAspectRatio === false ? 'fill' : 'contain';\n element.style.overflow = 'hidden';\n if (node.crop) applyCroppedImage(image, node.crop);\n this.applyImageEffects(image, node.effects, element);\n element.append(image);\n } else if (node.type === 'group') {\n const childCoordinate = node.childTransform ?? {\n x: 0,\n y: 0,\n width: node.transform.width,\n height: node.transform.height,\n };\n for (const child of node.children) element.append(this.createNode(child, childCoordinate));\n } else if (node.type === 'table') {\n const table = document.createElement('table');\n table.style.width = '100%';\n table.style.height = '100%';\n table.style.borderCollapse = 'collapse';\n table.style.tableLayout = 'fixed';\n if (node.columnWidths?.length) {\n const total = node.columnWidths.reduce((sum, width) => sum + width, 0) || 1;\n const columns = document.createElement('colgroup');\n for (const width of node.columnWidths) {\n const column = document.createElement('col');\n column.style.width = `${(width / total) * 100}%`;\n columns.append(column);\n }\n table.append(columns);\n }\n const totalRowHeight = node.rowHeights?.reduce((sum, height) => sum + height, 0) || 0;\n const hasFixedRowHeights = totalRowHeight > 0;\n node.rows.forEach((row, rowIndex) => {\n const tr = table.insertRow();\n if (totalRowHeight && node.rowHeights?.[rowIndex] !== undefined) {\n tr.style.height = `${(node.rowHeights[rowIndex]! / totalRowHeight) * 100}%`;\n }\n for (const cell of row) {\n const td = tr.insertCell();\n td.colSpan = cell.colSpan ?? 1;\n td.rowSpan = cell.rowSpan ?? 1;\n if (hasFixedRowHeights) {\n td.style.position = 'relative';\n td.style.padding = '0';\n } else if (cell.textInsets) applyTextInsets(td, cell.textInsets, false);\n else td.style.padding = '0.25em';\n td.style.overflow = 'hidden';\n td.style.verticalAlign = cell.verticalAlignment ?? 'middle';\n this.applyFill(td, cell.fill, node.id);\n for (const [side, border] of Object.entries(cell.borders ?? {})) {\n if (!border) continue;\n const width = Math.max(0, border.width ?? 1);\n const style = /dash|dot/i.test(border.dash ?? '') ? 'dashed' : 'solid';\n td.style.setProperty(\n `border-${side}`,\n `${width}px ${style} ${color(border.color) ?? 'currentColor'}`,\n );\n }\n const textBody = document.createElement('div');\n textBody.dataset.rpvTableTextBody = '';\n textBody.style.width = '100%';\n textBody.style.boxSizing = 'border-box';\n if (hasFixedRowHeights) {\n textBody.style.position = 'absolute';\n textBody.style.inset = '0';\n textBody.style.height = '100%';\n textBody.style.display = 'flex';\n textBody.style.flexDirection = 'column';\n textBody.style.justifyContent =\n cell.verticalAlignment === 'top'\n ? 'flex-start'\n : cell.verticalAlignment === 'bottom'\n ? 'flex-end'\n : 'center';\n if (cell.textInsets) applyTextInsets(textBody, cell.textInsets, false);\n else textBody.style.padding = '0.25em';\n }\n applyTextOrientation(textBody, cell.textRotation, undefined, true);\n applyText(textBody, cell.paragraphs);\n td.append(textBody);\n }\n });\n element.append(table);\n } else if (node.type === 'chart') {\n element.append(this.createChart(node));\n } else if (node.type === 'media') {\n const media = document.createElement(node.mediaType === 'audio' ? 'audio' : 'video');\n media.controls = true;\n media.style.width = '100%';\n media.style.height = '100%';\n if (node.assetId) this.applyAsset(node.assetId, (url) => (media.src = url), node.id);\n if (node.posterAssetId && media instanceof HTMLVideoElement) {\n this.applyAsset(node.posterAssetId, (url) => (media.poster = url), node.id);\n }\n element.append(media);\n } else if (node.type === 'unknown') {\n element.dataset.rpvUnsupportedFeature = node.feature;\n if (node.fallbackAssetId) {\n const image = document.createElement('img');\n image.alt = node.altText ?? node.name ?? '';\n image.style.width = '100%';\n image.style.height = '100%';\n image.style.objectFit = 'contain';\n this.applyAsset(node.fallbackAssetId, (url) => (image.src = url), node.id);\n element.append(image);\n }\n }\n return element;\n }\n\n private createSlide(index: number): HTMLElement {\n const slide = this.presentation.slides[index];\n if (!slide) throw new RangeError(`Slide ${index} does not exist.`);\n this.renderingSlideIndex = index;\n const element = document.createElement('section');\n element.className = 'rpv-normalized-slide';\n element.dataset.rpvSlideIndex = String(index);\n element.dataset.rpvSlideHidden = String(Boolean(slide.hidden));\n element.setAttribute('aria-label', `Slide ${index + 1} of ${this.slideCount}`);\n element.style.position = 'relative';\n element.style.width = `${this.naturalSlideWidth}px`;\n element.style.height = `${this.naturalSlideHeight}px`;\n element.style.overflow = 'hidden';\n element.style.background = '#fff';\n element.style.color = '#000';\n element.style.fontFamily = 'Arial, sans-serif';\n element.style.fontWeight = '400';\n element.style.lineHeight = String(POWERPOINT_SINGLE_LINE_HEIGHT);\n if (slide.background && slide.background.type !== 'none') {\n this.applyFill(element, slide.background, slide.id);\n }\n for (const node of slide.nodes) {\n try {\n element.append(\n this.createNode(node, {\n x: 0,\n y: 0,\n width: this.presentation.size.widthEmu,\n height: this.presentation.size.heightEmu,\n }),\n );\n } catch (error) {\n this.callbacks.onNodeError?.(node.id, error);\n }\n }\n this.renderingSlideIndex = undefined;\n return element;\n }\n\n private emptyHandle(target: HTMLElement): DisposableHandle {\n const element = document.createElement('section');\n return {\n element,\n target,\n ready: Promise.resolve(),\n setScale: () => {},\n dispose: () => element.remove(),\n };\n }\n\n private mount(index: number, target: HTMLElement, scale?: number): DisposableHandle {\n if (this.destroyed) return this.emptyHandle(target);\n this.handlesByTarget.get(target)?.dispose();\n const resources = new Set<Promise<void>>();\n const previousResources = this.activeMountResources;\n this.activeMountResources = resources;\n let slide: HTMLElement;\n try {\n slide = this.createSlide(index);\n } finally {\n this.activeMountResources = previousResources;\n }\n const effectiveScale = scale ?? this.scaleForViewport(target);\n const wrapper = document.createElement('div');\n wrapper.dataset.rpvSlideWrapper = String(index);\n wrapper.style.position = 'relative';\n wrapper.style.margin = '0 auto';\n slide.style.transformOrigin = 'top left';\n const setScale = (nextScale: number): void => {\n wrapper.style.width = `${this.naturalSlideWidth * nextScale}px`;\n wrapper.style.height = `${this.naturalSlideHeight * nextScale}px`;\n slide.style.transform = `scale(${nextScale})`;\n };\n setScale(effectiveScale);\n wrapper.append(slide);\n target.replaceChildren(wrapper);\n this.callbacks.onSlideRendered?.(index, slide);\n let disposed = false;\n const handle: DisposableHandle = {\n element: slide,\n target,\n ready: Promise.all([...resources]).then(() => undefined),\n setScale,\n dispose: () => {\n if (disposed) return;\n disposed = true;\n wrapper.remove();\n this.mountedHandles.delete(handle);\n if (this.handlesByTarget.get(target) === handle) this.handlesByTarget.delete(target);\n this.callbacks.onSlideUnmounted?.(index);\n },\n };\n this.mountedHandles.add(handle);\n this.handlesByTarget.set(target, handle);\n return handle;\n }\n\n private disposeContainerSlides(): void {\n for (const handle of [...this.mountedHandles]) {\n if (handle.target === this.container || this.container.contains(handle.target)) {\n handle.dispose();\n }\n }\n }\n\n private async yieldRenderBatch(): Promise<void> {\n if (typeof requestAnimationFrame !== 'undefined') {\n await new Promise<void>((resolve) => requestAnimationFrame(() => resolve()));\n } else {\n await Promise.resolve();\n }\n }\n\n private async yieldNavigationPaint(): Promise<void> {\n if (typeof requestAnimationFrame !== 'undefined') {\n await new Promise<void>((resolve) => {\n let settled = false;\n let firstFrame: number | undefined;\n let secondFrame: number | undefined;\n const complete = () => {\n if (settled) return;\n settled = true;\n clearTimeout(timeout);\n if (typeof cancelAnimationFrame !== 'undefined') {\n if (firstFrame !== undefined) cancelAnimationFrame(firstFrame);\n if (secondFrame !== undefined) cancelAnimationFrame(secondFrame);\n }\n resolve();\n };\n // Animation frames can be suspended in a hidden document. Preserve the\n // foreground paint opportunity without leaving navigation unresolved.\n const timeout = setTimeout(complete, 100);\n firstFrame = requestAnimationFrame(() => {\n if (settled) return;\n secondFrame = requestAnimationFrame(complete);\n });\n });\n } else {\n await new Promise<void>((resolve) => setTimeout(resolve, 0));\n }\n }\n\n private async mountInBatches(\n placeholders: ListPlaceholder[],\n indices: number[],\n batchSize: number,\n generation: number,\n ): Promise<void> {\n const uniqueIndices = [...new Set(indices)].filter(\n (index) => index >= 0 && index < placeholders.length,\n );\n const size =\n Number.isFinite(batchSize) && batchSize > 0 ? Math.max(1, Math.floor(batchSize)) : 3;\n for (let offset = 0; offset < uniqueIndices.length; offset += size) {\n if (!this.isRenderActive(generation)) return;\n await Promise.all(\n uniqueIndices.slice(offset, offset + size).map((index) => placeholders[index]!.mount()),\n );\n if (!this.isRenderActive(generation)) return;\n if (offset + size < uniqueIndices.length) await this.yieldRenderBatch();\n }\n }\n\n async renderSlide(index = this.current): Promise<void> {\n this.renderState = { mode: 'single' };\n const generation = this.beginRender();\n if (generation === undefined) return;\n this.observeViewport(this.container);\n this.current = Math.max(0, Math.min(this.slideCount - 1, index));\n this.disposeContainerSlides();\n this.container.replaceChildren();\n if (this.slideCount === 0) return;\n const handle = this.mount(this.current, this.container);\n await handle.ready;\n if (!this.isRenderActive(generation) || this.handlesByTarget.get(this.container) !== handle) {\n return;\n }\n this.publishZoom(this.scaleForViewport(this.container) * 100);\n this.notifySlideChange(this.current);\n }\n\n private createListPlaceholder(\n index: number,\n item: HTMLElement,\n generation: number,\n scale?: number,\n ): ListPlaceholder {\n let handle: DisposableHandle | undefined;\n let mountPromise: Promise<void> | undefined;\n let effectiveScale = scale;\n const isActive = () =>\n this.isRenderActive(generation) && this.listState?.generation === generation;\n const mount = (): Promise<void> => {\n if (!isActive()) return Promise.resolve();\n if (handle) return handle.ready;\n if (mountPromise) return mountPromise;\n const nextHandle = this.mount(index, item, effectiveScale);\n handle = nextHandle;\n const pending = nextHandle.ready\n .then(() => {\n if (!isActive() || handle !== nextHandle) {\n if (handle === nextHandle) handle = undefined;\n nextHandle.dispose();\n }\n })\n .finally(() => {\n if (mountPromise === pending) mountPromise = undefined;\n });\n mountPromise = pending;\n return pending;\n };\n const unmount = (): void => {\n const mounted = handle;\n handle = undefined;\n mountPromise = undefined;\n if (mounted) {\n mounted.dispose();\n }\n };\n const setScale = (nextScale: number): void => {\n effectiveScale = nextScale;\n handle?.setScale(nextScale);\n };\n return { item, mount, unmount, isMounted: () => Boolean(handle), setScale };\n }\n\n async renderList(options: RenderListOptions = {}): Promise<void> {\n const windowingEnabled = options.enabled !== false;\n const normalizedOptions = { ...options, enabled: windowingEnabled };\n this.renderState = { mode: 'continuous', options: normalizedOptions };\n const generation = this.beginRender();\n if (generation === undefined) return;\n this.disposeContainerSlides();\n this.container.replaceChildren();\n if (!options.scrollElement) {\n this.container.scrollTop = 0;\n this.container.scrollLeft = 0;\n }\n if (this.slideCount === 0) {\n this.current = 0;\n this.listState = { generation, options: normalizedOptions, placeholders: [] };\n return;\n }\n\n const initialIndex = Math.max(\n 0,\n Math.min(this.slideCount - 1, options.initialSlideIndex ?? this.current),\n );\n const scroller = options.scrollElement ?? this.container;\n this.observeViewport(scroller);\n let effectiveScale = this.scaleForViewport(scroller);\n let slideHeight = this.naturalSlideHeight * effectiveScale;\n let itemStride = slideHeight + LIST_ITEM_GAP;\n\n if (!windowingEnabled) {\n // Non-windowed continuous mode: every slide mounts in normal flow.\n const placeholders = this.presentation.slides.map((_, index) => {\n const item = document.createElement('div');\n item.dataset.rpvListItem = String(index);\n item.style.minHeight = `${slideHeight}px`;\n item.style.margin = `0 auto ${LIST_ITEM_GAP}px`;\n this.container.append(item);\n return this.createListPlaceholder(index, item, generation, effectiveScale);\n });\n const state: ActiveListState = { generation, options: normalizedOptions, placeholders };\n state.updateScale = () => {\n if (!this.isRenderActive(generation) || this.listState !== state) return;\n const previousScale = effectiveScale;\n const previousScrollLeft = scroller.scrollLeft;\n const previousStride = itemStride;\n const previousSlideHeight = slideHeight;\n const listStart =\n scroller === this.container\n ? 0\n : this.container.getBoundingClientRect().top -\n scroller.getBoundingClientRect().top +\n scroller.scrollTop;\n const listOffset = scroller.scrollTop - listStart;\n const anchorIndex = Math.max(\n 0,\n Math.min(this.slideCount - 1, Math.floor(listOffset / previousStride)),\n );\n const anchorOffset = listOffset - anchorIndex * previousStride;\n effectiveScale = this.scaleForViewport(scroller);\n slideHeight = this.naturalSlideHeight * effectiveScale;\n itemStride = slideHeight + LIST_ITEM_GAP;\n placeholders.forEach((placeholder) => {\n placeholder.item.style.minHeight = `${slideHeight}px`;\n placeholder.setScale(effectiveScale);\n });\n if (previousScale > 0 && previousScrollLeft > 0) {\n scroller.scrollLeft = previousScrollLeft * (effectiveScale / previousScale);\n }\n this.publishZoom(effectiveScale * 100);\n // Resizing content that is entirely below an external viewport must\n // not move that viewport toward or away from the list.\n if (listOffset < 0) return;\n const nextAnchorOffset = scaleListAnchorOffset(\n anchorOffset,\n previousSlideHeight,\n slideHeight,\n );\n scroller.scrollTop = Math.max(0, listStart + anchorIndex * itemStride + nextAnchorOffset);\n };\n this.listState = state;\n await this.mountInBatches(\n placeholders,\n this.presentation.slides.map((_, index) => index),\n options.batchSize ?? 3,\n generation,\n );\n if (!this.isRenderActive(generation) || this.listState !== state) return;\n if (!options.scrollElement) {\n this.container.scrollTop = 0;\n this.container.scrollLeft = 0;\n }\n const initialItem = placeholders[initialIndex]?.item;\n if (initialItem && initialIndex !== 0) {\n initialItem.scrollIntoView?.({ behavior: 'instant', block: 'start' });\n }\n this.current = initialIndex;\n this.publishZoom(effectiveScale * 100);\n this.notifySlideChange(initialIndex);\n return;\n }\n\n // Windowed continuous mode driven by TanStack Virtual: slides live at\n // fixed absolute offsets inside a full-height sizer, so mounting and\n // unmounting content never shifts layout and scrolling stays smooth.\n const sizer = document.createElement('div');\n sizer.dataset.rpvVirtualSizer = '';\n sizer.style.position = 'relative';\n sizer.style.width = '100%';\n sizer.style.height = `${this.slideCount * itemStride - LIST_ITEM_GAP}px`;\n this.container.append(sizer);\n\n const placeholders = this.presentation.slides.map((_, index) => {\n const item = document.createElement('div');\n item.dataset.rpvListItem = String(index);\n item.style.position = 'absolute';\n item.style.top = '0';\n item.style.left = '0';\n item.style.width = '100%';\n item.style.height = `${slideHeight}px`;\n item.style.transform = `translateY(${index * itemStride}px)`;\n sizer.append(item);\n // Mount with the exact scale the shell geometry was computed from so\n // content and window heights always agree, even if the container is\n // still settling its layout.\n return this.createListPlaceholder(index, item, generation, effectiveScale);\n });\n\n const state: ActiveListState = { generation, options: normalizedOptions, placeholders };\n this.listState = state;\n const isActive = () => this.isRenderActive(generation) && this.listState === state;\n const deferredMounts = new Map<number, number>();\n let virtualWindow = new Set<number>();\n state.deferMount = (index) => {\n deferredMounts.set(index, (deferredMounts.get(index) ?? 0) + 1);\n };\n state.resumeMount = (index) => {\n const remaining = (deferredMounts.get(index) ?? 0) - 1;\n if (remaining > 0) {\n deferredMounts.set(index, remaining);\n return;\n }\n deferredMounts.delete(index);\n if (virtualWindow.has(index)) void placeholders[index]?.mount();\n };\n\n const measureViewportRect = () => {\n const rect = scroller.getBoundingClientRect();\n if (rect.width > 0 && rect.height > 0) return { width: rect.width, height: rect.height };\n if (scroller.clientHeight > 0) {\n return { width: scroller.clientWidth, height: scroller.clientHeight };\n }\n return { ...FALLBACK_VIEWPORT_RECT };\n };\n const initialRect = measureViewportRect();\n const requestedOverscan = options.overscanViewport ?? 1.5;\n const overscanViewports =\n Number.isFinite(requestedOverscan) && requestedOverscan >= 0 ? requestedOverscan : 1.5;\n let overscan = Math.max(1, Math.ceil((overscanViewports * initialRect.height) / itemStride));\n // Content rendered above the slide list (inside the same scroller) offsets\n // every virtual position; re-measured whenever the layout settles.\n const measureScrollMargin = () =>\n sizer.getBoundingClientRect().top - scroller.getBoundingClientRect().top + scroller.scrollTop;\n let scrollMargin = measureScrollMargin();\n // When the container is still collapsed while the document loads, the\n // initial alignment lands wrong; repeat it once real layout arrives as\n // long as the user has not scrolled yet.\n let needsSettleAlignment = initialIndex > 0;\n let lastProgrammaticTop: number | undefined;\n const writeScrollTop = (top: number, behavior?: ScrollBehavior): void => {\n lastProgrammaticTop = top;\n if (typeof scroller.scrollTo === 'function') {\n scroller.scrollTo(behavior ? { top, behavior } : { top });\n } else {\n scroller.scrollTop = top;\n }\n };\n\n const reconcile = (instance: Virtualizer<HTMLElement, HTMLElement>): void => {\n if (!isActive()) return;\n const windowed = new Set(instance.getVirtualItems().map((item) => item.index));\n virtualWindow = windowed;\n placeholders.forEach((placeholder, index) => {\n if (windowed.has(index) && !deferredMounts.has(index)) void placeholder.mount();\n else placeholder.unmount();\n });\n // Report the slide with the largest visible overlap, matching how\n // PowerPoint's own thumbnail rail tracks the reading position.\n const offset = (instance.scrollOffset ?? 0) - scrollMargin;\n const viewportHeight = instance.scrollRect?.height ?? initialRect.height;\n const firstCandidate = Math.max(0, Math.floor(offset / itemStride));\n const lastCandidate = Math.min(\n this.slideCount - 1,\n Math.max(firstCandidate, Math.floor((offset + viewportHeight) / itemStride)),\n );\n let best = firstCandidate;\n let bestOverlap = Number.NEGATIVE_INFINITY;\n for (let index = firstCandidate; index <= lastCandidate; index += 1) {\n const start = index * itemStride;\n const overlap =\n Math.min(offset + viewportHeight, start + slideHeight) - Math.max(offset, start);\n if (overlap > bestOverlap + 0.5) {\n bestOverlap = overlap;\n best = index;\n }\n }\n if (best !== this.current) {\n this.current = best;\n this.notifySlideChange(best);\n }\n };\n\n const virtualizer = new Virtualizer<HTMLElement, HTMLElement>({\n count: this.slideCount,\n getScrollElement: () => scroller,\n estimateSize: () => slideHeight,\n gap: LIST_ITEM_GAP,\n overscan,\n scrollMargin,\n initialRect,\n initialOffset: initialIndex > 0 ? scrollMargin + initialIndex * itemStride : 0,\n observeElementRect: (instance, callback) => {\n const publish = () => {\n callback(measureViewportRect());\n const nextMargin = measureScrollMargin();\n if (Math.abs(nextMargin - scrollMargin) > 1) {\n scrollMargin = nextMargin;\n instance.setOptions({ ...instance.options, scrollMargin: nextMargin });\n instance.measure();\n }\n if (needsSettleAlignment && scroller.clientHeight > 0) {\n needsSettleAlignment = false;\n const undisturbed =\n scroller.scrollTop === 0 ||\n (lastProgrammaticTop !== undefined &&\n Math.abs(scroller.scrollTop - lastProgrammaticTop) <= 2);\n if (undisturbed) state.scrollToIndex?.(initialIndex);\n }\n };\n publish();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(publish);\n observer.observe(scroller);\n return () => observer.disconnect();\n },\n observeElementOffset: (_instance, callback) => {\n const onScroll = () => callback(scroller.scrollTop, true);\n callback(scroller.scrollTop, false);\n scroller.addEventListener('scroll', onScroll, { passive: true });\n return () => scroller.removeEventListener('scroll', onScroll);\n },\n scrollToFn: (offset, { adjustments, behavior }) => {\n const top = offset + (adjustments ?? 0);\n writeScrollTop(top, behavior);\n },\n onChange: (instance) => reconcile(instance),\n });\n state.scrollToIndex = (index, scrollOptions) => {\n if (!isActive()) return;\n virtualizer.scrollToIndex(index, {\n align:\n scrollOptions?.block === 'center'\n ? 'center'\n : scrollOptions?.block === 'end'\n ? 'end'\n : scrollOptions?.block === 'nearest'\n ? 'auto'\n : 'start',\n behavior: scrollOptions?.behavior === 'smooth' ? 'smooth' : 'auto',\n });\n };\n state.updateScale = () => {\n if (!isActive()) return;\n const previousScale = effectiveScale;\n const previousScrollLeft = scroller.scrollLeft;\n const previousStride = itemStride;\n const previousSlideHeight = slideHeight;\n const anchorIndex = this.current;\n const observedScrollTop = virtualizer.scrollOffset ?? scroller.scrollTop;\n const observedIndex = Math.floor((observedScrollTop - scrollMargin) / previousStride);\n const intendedIndex =\n lastProgrammaticTop === undefined\n ? undefined\n : Math.floor((lastProgrammaticTop - scrollMargin) / previousStride);\n // A programmatic scroll can be followed immediately by zoom before the\n // browser emits its scroll event. In that gap, TanStack still exposes\n // the old offset even though the target shell has already been chosen.\n const previousScrollTop =\n Math.abs(observedIndex - anchorIndex) > 1 &&\n intendedIndex !== undefined &&\n Math.abs(intendedIndex - anchorIndex) <= 1\n ? lastProgrammaticTop!\n : observedScrollTop;\n const previousOffset = previousScrollTop - scrollMargin;\n const anchorOffset = previousOffset - anchorIndex * previousStride;\n\n effectiveScale = this.scaleForViewport(scroller);\n slideHeight = this.naturalSlideHeight * effectiveScale;\n itemStride = slideHeight + LIST_ITEM_GAP;\n sizer.style.height = `${this.slideCount * itemStride - LIST_ITEM_GAP}px`;\n placeholders.forEach((placeholder, index) => {\n placeholder.item.style.height = `${slideHeight}px`;\n placeholder.item.style.transform = `translateY(${index * itemStride}px)`;\n placeholder.setScale(effectiveScale);\n });\n if (previousScale > 0 && previousScrollLeft > 0) {\n scroller.scrollLeft = previousScrollLeft * (effectiveScale / previousScale);\n }\n\n const nextAnchorOffset = scaleListAnchorOffset(\n anchorOffset,\n previousSlideHeight,\n slideHeight,\n );\n const nextScrollTop =\n previousOffset < 0\n ? previousScrollTop\n : Math.max(0, scrollMargin + anchorIndex * itemStride + nextAnchorOffset);\n const viewportRect = measureViewportRect();\n overscan = Math.max(1, Math.ceil((overscanViewports * viewportRect.height) / itemStride));\n virtualizer.scrollOffset = nextScrollTop;\n writeScrollTop(nextScrollTop);\n virtualizer.setOptions({ ...virtualizer.options, overscan });\n virtualizer.measure();\n this.publishZoom(effectiveScale * 100);\n };\n const teardown = virtualizer._didMount();\n this.listCleanup = teardown;\n virtualizer._willUpdate();\n\n const initialWindow = virtualizer.getVirtualItems().map((item) => item.index);\n await this.mountInBatches(\n placeholders,\n [...initialWindow, initialIndex],\n options.batchSize ?? 3,\n generation,\n );\n if (!isActive()) return;\n if (initialIndex > 0) state.scrollToIndex(initialIndex);\n else if (!options.scrollElement) {\n this.container.scrollTop = 0;\n this.container.scrollLeft = 0;\n }\n this.current = initialIndex;\n this.publishZoom(effectiveScale * 100);\n this.notifySlideChange(initialIndex);\n }\n\n async goToSlide(index: number, scrollOptions?: ScrollIntoViewOptions): Promise<void> {\n if (this.destroyed || this.slideCount === 0) return;\n const next = Math.max(0, Math.min(this.slideCount - 1, index));\n const changed = next !== this.current;\n const state = this.listState;\n if (state && this.isRenderActive(state.generation)) {\n const navigation = ++this.navigationGeneration;\n const placeholder = state.placeholders[next];\n let mountDeferred = Boolean(state.deferMount && placeholder && !placeholder.isMounted());\n if (mountDeferred) state.deferMount?.(next);\n // Publish and move to the fixed target shell before constructing the\n // potentially expensive slide DOM or awaiting its resources.\n try {\n if (changed) {\n if (state.scrollToIndex) state.scrollToIndex(next, scrollOptions);\n else placeholder?.item.scrollIntoView?.(scrollOptions);\n this.current = next;\n this.notifySlideChange(next);\n }\n if (mountDeferred) await this.yieldNavigationPaint();\n if (\n this.destroyed ||\n navigation !== this.navigationGeneration ||\n !this.isRenderActive(state.generation) ||\n this.listState !== state\n ) {\n return;\n }\n if (mountDeferred) {\n state.resumeMount?.(next);\n mountDeferred = false;\n }\n await placeholder?.mount();\n } finally {\n if (mountDeferred) state.resumeMount?.(next);\n }\n return;\n }\n if (!changed && this.container.querySelector(`[data-rpv-slide-index=\"${next}\"]`)) return;\n await this.renderSlide(next);\n }\n\n private async updateRenderedScale(): Promise<void> {\n if (this.renderState?.mode === 'continuous') {\n const state = this.listState;\n if (state && this.isRenderActive(state.generation) && state.updateScale) {\n state.updateScale();\n } else {\n await this.renderList({ ...this.renderState.options, initialSlideIndex: this.current });\n }\n } else if (this.renderState) {\n const handle = this.handlesByTarget.get(this.container);\n if (handle) {\n const viewport = this.activeViewport ?? this.container;\n const previousScale = this.resolvedZoom / 100;\n const previousScrollTop = viewport.scrollTop;\n const previousScrollLeft = viewport.scrollLeft;\n const nextScale = this.scaleForViewport(viewport);\n handle.setScale(nextScale);\n if (previousScale > 0) {\n viewport.scrollTop = previousScrollTop * (nextScale / previousScale);\n viewport.scrollLeft = previousScrollLeft * (nextScale / previousScale);\n }\n this.publishZoom(nextScale * 100);\n } else await this.renderSlide(this.current);\n } else {\n this.publishZoom(this.resolveZoom(this.zoomLevel));\n }\n }\n\n async setZoom(level: ViewerZoomLevel): Promise<void> {\n const next = normalizeViewerZoomLevel(level);\n if (this.zoomLevel === next) {\n if (typeof next !== 'number') await this.updateRenderedScale();\n return;\n }\n this.zoomLevel = next;\n await this.updateRenderedScale();\n }\n\n async setFitMode(mode: FitMode): Promise<void> {\n await this.setZoom(mode === 'contain' ? 'automatic' : 100);\n }\n searchText(query: string | RegExp, options?: ViewerSearchOptions): PresentationSearchResult[] {\n return searchDocument(this.presentation, query, options);\n }\n renderThumbnailToContainer(\n index: number,\n target: HTMLElement,\n options: { width?: number } = {},\n ): DisposableHandle {\n if (this.destroyed || index < 0 || index >= this.slideCount) return this.emptyHandle(target);\n return this.mount(index, target, (options.width ?? 144) / this.naturalSlideWidth);\n }\n async highlightSearchResult(\n result: PresentationSearchResult,\n options: SearchHighlightOptions = {},\n ): Promise<void> {\n if (this.destroyed || result.slideIndex < 0 || result.slideIndex >= this.slideCount) return;\n if (options.scrollIntoView !== false) {\n await this.goToSlide(\n result.slideIndex,\n typeof options.scrollIntoView === 'object' ? options.scrollIntoView : undefined,\n );\n } else if (this.listState) {\n const state = this.listState;\n await state.placeholders[result.slideIndex]?.mount();\n if (!this.isRenderActive(state.generation) || this.listState !== state) return;\n } else if (!this.container.querySelector(`[data-rpv-slide-index=\"${result.slideIndex}\"]`)) {\n await this.renderSlide(result.slideIndex);\n }\n if (this.destroyed) return;\n this.clearSearchHighlights();\n const slide = this.container.querySelector<HTMLElement>(\n `[data-rpv-slide-index=\"${result.slideIndex}\"]`,\n );\n const node = [...(slide?.querySelectorAll<HTMLElement>('[data-rpv-node-id]') ?? [])].find(\n (candidate) => candidate.dataset.rpvNodeId === result.nodeId,\n );\n const parent = node?.parentElement;\n if (!node || !parent) return;\n const highlight = document.createElement('div');\n highlight.className = ['rpv-search-highlight', options.className].filter(Boolean).join(' ');\n highlight.style.position = 'absolute';\n highlight.style.left = node.style.left;\n highlight.style.top = node.style.top;\n highlight.style.width = node.style.width;\n highlight.style.height = node.style.height;\n highlight.style.boxSizing = 'border-box';\n highlight.style.transform = node.style.transform;\n highlight.style.transformOrigin = node.style.transformOrigin;\n const padding = options.padding ?? 3;\n const width =\n typeof options.borderWidth === 'number'\n ? `${options.borderWidth}px`\n : (options.borderWidth ?? '3px');\n highlight.style.outline = `${width} solid ${options.borderColor ?? '#ef8b2c'}`;\n highlight.style.outlineOffset = `${padding}px`;\n highlight.style.background = options.backgroundColor ?? 'transparent';\n highlight.style.boxShadow =\n options.boxShadow ?? '0 0 0 2px color-mix(in srgb, #ef8b2c 30%, transparent)';\n if (options.borderRadius !== undefined) {\n highlight.style.borderRadius =\n typeof options.borderRadius === 'number'\n ? `${options.borderRadius}px`\n : options.borderRadius;\n }\n highlight.style.zIndex = String(options.zIndex ?? 2_147_483_646);\n for (const [property, value] of Object.entries(options.style ?? {})) {\n if (value === undefined) continue;\n if (property.startsWith('--') || property.includes('-')) {\n highlight.style.setProperty(property, String(value));\n } else {\n (highlight.style as unknown as Record<string, string>)[property] = String(value);\n }\n }\n highlight.style.pointerEvents = 'none';\n parent.append(highlight);\n this.highlight = highlight;\n }\n clearSearchHighlights(): void {\n this.highlight?.remove();\n this.highlight = undefined;\n }\n destroy(): void {\n if (this.destroyed) return;\n this.destroyed = true;\n this.renderGeneration += 1;\n this.navigationGeneration += 1;\n this.listCleanup?.();\n this.listCleanup = undefined;\n this.resizeObserver?.disconnect();\n this.resizeObserver = undefined;\n this.activeViewport = undefined;\n this.listState = undefined;\n this.clearSearchHighlights();\n this.assetCache.release();\n this.activeMountResources = undefined;\n for (const handle of [...this.mountedHandles]) handle.dispose();\n this.handlesByTarget.clear();\n this.renderState = undefined;\n this.container.replaceChildren();\n }\n}\n","import type { PresentationDocument } from '@extend-ai/react-pptx-model';\nimport { PptxViewerError } from './errors';\n\nexport type WasmSource =\n | string\n | URL\n | Request\n | Response\n | BufferSource\n | WebAssembly.Module;\n\nexport type WorkerWasmSource = string | ArrayBuffer | WebAssembly.Module;\n\ninterface WasmRuntimeModule {\n default?: (source?: unknown) => Promise<unknown> | unknown;\n initWasm?: (source?: unknown) => Promise<unknown> | unknown;\n init?: (source?: unknown) => Promise<unknown> | unknown;\n setWasmSource?: (source: unknown) => void;\n parsePresentation?: (bytes: Uint8Array, options?: unknown) => Promise<unknown> | unknown;\n parse_presentation?: (bytes: Uint8Array, options?: unknown) => Promise<unknown> | unknown;\n}\n\nlet configuredSource: WasmSource | undefined;\nlet hasConfiguredSource = false;\nlet configuredWorkerSource: WorkerWasmSource | undefined;\nlet runtimePromise: Promise<WasmRuntimeModule> | undefined;\nlet initialized = false;\n\nasync function loadRuntime(): Promise<WasmRuntimeModule> {\n runtimePromise ??= import('@extend-ai/react-pptx-wasm') as unknown as Promise<WasmRuntimeModule>;\n return runtimePromise;\n}\n\nexport function setWasmSource(source: WasmSource): void {\n hasConfiguredSource = true;\n configuredSource = source;\n configuredWorkerSource = sourceToWorkerSource(source);\n initialized = false;\n void runtimePromise?.then((runtime) => runtime.setWasmSource?.(source));\n}\n\nfunction bufferSourceToArrayBuffer(\n source: ArrayBuffer | ArrayBufferView<ArrayBufferLike>,\n): ArrayBuffer {\n if (source instanceof ArrayBuffer) return source.slice(0);\n const bytes = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n return new Uint8Array(bytes).buffer;\n}\n\nfunction sourceToWorkerSource(source: WasmSource): WorkerWasmSource | undefined {\n if (typeof source === 'string') return source;\n if (typeof URL !== 'undefined' && source instanceof URL) return source.href;\n if (typeof Request !== 'undefined' && source instanceof Request) return source.url;\n if (source instanceof ArrayBuffer || ArrayBuffer.isView(source)) {\n return bufferSourceToArrayBuffer(source);\n }\n if (typeof WebAssembly !== 'undefined' && source instanceof WebAssembly.Module) return source;\n return undefined;\n}\n\nfunction canUseConfiguredSourceInWorker(): boolean {\n return !hasConfiguredSource || configuredWorkerSource !== undefined;\n}\n\nexport async function initWasm(source?: WasmSource): Promise<void> {\n if (source !== undefined) setWasmSource(source);\n if (initialized) return;\n\n try {\n const runtime = await loadRuntime();\n if (configuredSource !== undefined) runtime.setWasmSource?.(configuredSource);\n const initialize = runtime.initWasm ?? runtime.init ?? runtime.default;\n if (initialize) await initialize(configuredSource);\n initialized = true;\n } catch (error) {\n runtimePromise = undefined;\n throw new PptxViewerError('parse-failed', 'Could not initialize the PowerPoint parser.', {\n cause: error,\n });\n }\n}\n\nfunction isPresentationDocument(value: unknown): value is PresentationDocument {\n if (!value || typeof value !== 'object') return false;\n const candidate = value as Partial<PresentationDocument>;\n return (\n (candidate.format === 'ppt' || candidate.format === 'pptx') &&\n !!candidate.size &&\n Array.isArray(candidate.slides) &&\n Array.isArray(candidate.warnings)\n );\n}\n\nfunction parserFailure(error: unknown): PptxViewerError | null {\n if (error instanceof PptxViewerError) return error;\n const message = error instanceof Error ? error.message : String(error);\n const normalized = message.toLowerCase();\n if (normalized.includes('encrypted presentation')) {\n return new PptxViewerError(\n 'encrypted-document',\n 'Encrypted PowerPoint presentations are not supported.',\n { cause: error },\n );\n }\n if (\n normalized.includes('resource limit exceeded') ||\n normalized.includes('input exceeds the configured')\n ) {\n return new PptxViewerError('resource-limit', message, { cause: error });\n }\n return null;\n}\n\nexport async function parseWithWasm(\n bytes: Uint8Array,\n options?: { signal?: AbortSignal; formatHint?: 'ppt' | 'pptx' },\n): Promise<PresentationDocument | null> {\n try {\n if (\n canUseConfiguredSourceInWorker() &&\n typeof window !== 'undefined' &&\n typeof Worker !== 'undefined'\n ) {\n const result = await parseInWorker(bytes, options?.signal, configuredWorkerSource);\n return isPresentationDocument(result) ? result : null;\n }\n await initWasm();\n const runtime = await loadRuntime();\n const parse = runtime.parsePresentation ?? runtime.parse_presentation;\n if (!parse) return null;\n const result = await parse(bytes, {\n formatHint: options?.formatHint,\n signal: options?.signal,\n });\n const value = typeof result === 'string' ? (JSON.parse(result) as unknown) : result;\n return isPresentationDocument(value) ? value : null;\n } catch (error) {\n if (options?.signal?.aborted) throw error;\n const failure = parserFailure(error);\n if (failure) throw failure;\n return null;\n }\n}\n\nlet workerRequestId = 0;\n\nasync function parseInWorker(\n bytes: Uint8Array,\n signal?: AbortSignal,\n wasmSource?: WorkerWasmSource,\n): Promise<unknown> {\n if (signal?.aborted) throw new DOMException('Parsing was aborted.', 'AbortError');\n\n const worker = new Worker(new URL('./native-parser-worker.js', import.meta.url), {\n type: 'module',\n name: 'react-pptx-parser',\n });\n const id = ++workerRequestId;\n const owned = bytes.slice().buffer as ArrayBuffer;\n return await new Promise((resolve, reject) => {\n let settled = false;\n const cleanup = () => {\n signal?.removeEventListener('abort', abort);\n worker.removeEventListener('message', handleMessage);\n worker.removeEventListener('error', handleError);\n worker.removeEventListener('messageerror', handleMessageError);\n worker.terminate();\n };\n const settle = (callback: () => void) => {\n if (settled) return;\n settled = true;\n cleanup();\n callback();\n };\n const abort = () => {\n settle(() => reject(new DOMException('Parsing was aborted.', 'AbortError')));\n };\n const handleMessage = (\n event: MessageEvent<{ id: number; result?: unknown; error?: string }>,\n ) => {\n if (event.data.id !== id) return;\n settle(() => {\n if (event.data.error) reject(new Error(event.data.error));\n else resolve(event.data.result);\n });\n };\n const handleError = (event: ErrorEvent) => {\n settle(() => reject(event.error ?? new Error(event.message)));\n };\n const handleMessageError = () => {\n settle(() => reject(new Error('The parser worker returned an unreadable response.')));\n };\n\n signal?.addEventListener('abort', abort, { once: true });\n worker.addEventListener('message', handleMessage);\n worker.addEventListener('error', handleError);\n worker.addEventListener('messageerror', handleMessageError);\n\n if (signal?.aborted) {\n abort();\n return;\n }\n\n try {\n worker.postMessage({ id, bytes: owned, wasmSource }, [owned]);\n } catch (error) {\n settle(() => reject(error));\n }\n });\n}\n","import type { PptxPerformanceMeasurement, PptxPerformancePhase } from './types';\n\nexport function performanceNow(): number {\n return globalThis.performance?.now?.() ?? Date.now();\n}\n\nexport function performanceMeasurement(\n phase: PptxPerformancePhase,\n startedAt: number,\n slideIndex?: number,\n): PptxPerformanceMeasurement {\n return {\n durationMs: Math.max(0, performanceNow() - startedAt),\n phase,\n ...(slideIndex === undefined ? {} : { slideIndex }),\n };\n}\n","import type { PresentationDocument, PresentationFormat } from '@extend-ai/react-pptx-model';\nimport { PptxViewerError, throwIfAborted, toPptxViewerError } from './errors';\nimport type {\n BinaryPresentationSource,\n ParsePresentationOptions,\n ParsedPresentation,\n PresentationSource,\n} from './types';\nimport { parseWithWasm } from './wasm';\nimport { performanceMeasurement, performanceNow } from './performance';\n\nconst DEFAULT_MAX_INPUT_BYTES = 100 * 1024 * 1024;\n\nfunction isParsedPresentation(source: PresentationSource): source is ParsedPresentation {\n return (\n !!source &&\n typeof source === 'object' &&\n 'kind' in source &&\n source.kind === 'parsed-presentation' &&\n 'document' in source\n );\n}\n\nfunction isPresentationDocument(source: PresentationSource): source is PresentationDocument {\n return (\n !!source &&\n typeof source === 'object' &&\n 'format' in source &&\n (source.format === 'ppt' || source.format === 'pptx') &&\n 'slides' in source &&\n Array.isArray(source.slides)\n );\n}\n\nasync function readSource(\n source: BinaryPresentationSource,\n options: ParsePresentationOptions,\n): Promise<ArrayBuffer> {\n throwIfAborted(options.signal);\n\n let buffer: ArrayBuffer;\n if (source instanceof ArrayBuffer) {\n buffer = source.slice(0);\n } else if (source instanceof Uint8Array) {\n buffer = source.buffer.slice(\n source.byteOffset,\n source.byteOffset + source.byteLength,\n ) as ArrayBuffer;\n } else if (typeof Blob !== 'undefined' && source instanceof Blob) {\n buffer = await source.arrayBuffer();\n } else if (typeof source === 'string' || source instanceof URL) {\n let response: Response;\n try {\n const requestInit: RequestInit = { ...options.fetchInit };\n if (options.signal) requestInit.signal = options.signal;\n response = await fetch(source, requestInit);\n } catch (error) {\n throw toPptxViewerError(error, 'fetch-failed', 'Could not fetch the presentation.');\n }\n if (!response.ok) {\n throw new PptxViewerError(\n 'fetch-failed',\n `Could not fetch the presentation (${response.status} ${response.statusText}).`,\n { details: { status: response.status, url: response.url } },\n );\n }\n const declaredLength = Number(response.headers.get('content-length'));\n const maximum = options.maxInputBytes ?? DEFAULT_MAX_INPUT_BYTES;\n if (Number.isFinite(declaredLength) && declaredLength > maximum) {\n throw new PptxViewerError(\n 'resource-limit',\n `The presentation exceeds the ${Math.round(maximum / 1024 / 1024)} MB input limit.`,\n { details: { byteLength: declaredLength, maximum } },\n );\n }\n buffer = await response.arrayBuffer();\n } else {\n throw new PptxViewerError('invalid-source', 'Unsupported presentation source.');\n }\n\n throwIfAborted(options.signal);\n const maximum = options.maxInputBytes ?? DEFAULT_MAX_INPUT_BYTES;\n if (buffer.byteLength > maximum) {\n throw new PptxViewerError(\n 'resource-limit',\n `The presentation exceeds the ${Math.round(maximum / 1024 / 1024)} MB input limit.`,\n { details: { byteLength: buffer.byteLength, maximum } },\n );\n }\n if (buffer.byteLength === 0) {\n throw new PptxViewerError('invalid-source', 'The presentation is empty.');\n }\n return buffer;\n}\n\nfunction detectFormat(buffer: ArrayBuffer, hint?: PresentationFormat): PresentationFormat {\n if (hint) return hint;\n const bytes = new Uint8Array(buffer, 0, Math.min(8, buffer.byteLength));\n if (bytes[0] === 0x50 && bytes[1] === 0x4b) return 'pptx';\n if (\n bytes[0] === 0xd0 &&\n bytes[1] === 0xcf &&\n bytes[2] === 0x11 &&\n bytes[3] === 0xe0 &&\n bytes[4] === 0xa1 &&\n bytes[5] === 0xb1 &&\n bytes[6] === 0x1a &&\n bytes[7] === 0xe1\n ) {\n return 'ppt';\n }\n throw new PptxViewerError(\n 'unsupported-format',\n 'The file is neither an OOXML PowerPoint presentation (.pptx) nor a legacy PowerPoint compound document (.ppt).',\n );\n}\n\n/**\n * Parse a PowerPoint source into the format-neutral public model used by the\n * package-owned renderer.\n */\nexport async function parsePresentation(\n source: PresentationSource,\n options: ParsePresentationOptions = {},\n): Promise<ParsedPresentation> {\n if (isParsedPresentation(source)) return source;\n if (isPresentationDocument(source)) {\n return {\n kind: 'parsed-presentation',\n document: source,\n warnings: source.warnings,\n };\n }\n\n const downloadStartedAt = performanceNow();\n const buffer = await readSource(source, options);\n if (typeof source === 'string' || source instanceof URL) {\n options.onPerformanceMeasurement?.(performanceMeasurement('download', downloadStartedAt));\n }\n const format = detectFormat(buffer, options.formatHint);\n const bytes = new Uint8Array(buffer);\n throwIfAborted(options.signal);\n\n const parsingStartedAt = performanceNow();\n const nativeDocument = await parseWithWasm(bytes, {\n formatHint: format,\n ...(options.signal ? { signal: options.signal } : {}),\n });\n options.onPerformanceMeasurement?.(performanceMeasurement('wasm-parsing', parsingStartedAt));\n throwIfAborted(options.signal);\n\n if (!nativeDocument) {\n throw new PptxViewerError(\n format === 'ppt' ? 'unsupported-format' : 'parse-failed',\n format === 'ppt'\n ? 'This legacy .ppt file could not be decoded by the native parser.'\n : 'The PowerPoint presentation could not be decoded by the native parser.',\n );\n }\n return {\n kind: 'parsed-presentation',\n document: nativeDocument,\n warnings: nativeDocument.warnings,\n };\n}\n\nexport const presentationParsingDefaults = Object.freeze({\n maxInputBytes: DEFAULT_MAX_INPUT_BYTES,\n});\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n} from 'react';\nimport { useVirtualizer, type VirtualizerOptions } from '@tanstack/react-virtual';\nimport type { PresentationSearchResult } from '@extend-ai/react-pptx-model';\nimport { PptxViewerError, toPptxViewerError } from './errors';\nimport { PptxFontManager } from './fonts';\nimport { NormalizedPresentationViewer } from './normalized-viewer';\nimport { parsePresentation } from './parse';\nimport { performanceMeasurement, performanceNow } from './performance';\nimport type {\n ParsedPresentation,\n PptxViewerController,\n ReactPptxViewerProps,\n SearchHighlightOptions,\n ViewerMode,\n ViewerZoomLevel,\n ViewerZoomState,\n ViewerSearchOptions,\n} from './types';\nimport { normalizeViewerZoomLevel } from './zoom';\n\ninterface ViewerAdapter {\n render(mode: ViewerMode, slideIndex: number): Promise<void>;\n goToSlide(index: number, options?: ScrollIntoViewOptions): Promise<void>;\n setZoom(level: ViewerZoomLevel): Promise<void>;\n resolveZoom(level: ViewerZoomLevel): number;\n search(query: string | RegExp, options?: ViewerSearchOptions): PresentationSearchResult[];\n highlight(result: PresentationSearchResult, options?: SearchHighlightOptions): Promise<void>;\n clearHighlights(): void;\n renderThumbnail(index: number, target: HTMLElement, width: number): Promise<() => void>;\n destroy(): void;\n}\n\ninterface AdapterState {\n adapter: ViewerAdapter;\n generation: number;\n}\n\nconst THUMBNAIL_ROW_ESTIMATE = 123;\nconst THUMBNAIL_OVERSCAN = 1;\nconst THUMBNAIL_INITIAL_RECT = { height: 780, width: 184 };\nconst observeThumbnailFilmstripRect: NonNullable<\n VirtualizerOptions<HTMLElement, HTMLElement>['observeElementRect']\n> = (instance, callback) => {\n const element = instance.scrollElement;\n if (!element) return;\n const publish = () => {\n const rect = element.getBoundingClientRect();\n callback({\n height: rect.height || element.clientHeight || THUMBNAIL_INITIAL_RECT.height,\n width: rect.width || element.clientWidth || THUMBNAIL_INITIAL_RECT.width,\n });\n };\n publish();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(publish);\n observer.observe(element);\n return () => observer.disconnect();\n};\n\nconst clampSlide = (index: number, count: number): number =>\n Math.max(0, Math.min(Math.max(0, count - 1), Math.floor(index)));\n\nfunction viewerShellStyle(height: number | string | undefined): CSSProperties {\n return {\n '--rpv-height': typeof height === 'number' ? `${height}px` : (height ?? 'min(76vh, 780px)'),\n } as CSSProperties;\n}\n\nfunction stableRequestValue(value: unknown, seen = new WeakSet<object>()): unknown {\n if (value === null || typeof value !== 'object') return value;\n if (typeof Headers !== 'undefined' && value instanceof Headers) {\n return [...value.entries()].sort(([first], [second]) => first.localeCompare(second));\n }\n if (typeof URLSearchParams !== 'undefined' && value instanceof URLSearchParams) {\n return [...value.entries()];\n }\n if (value instanceof Date) return value.toISOString();\n if (value instanceof ArrayBuffer) return [...new Uint8Array(value)];\n if (ArrayBuffer.isView(value)) {\n return [...new Uint8Array(value.buffer, value.byteOffset, value.byteLength)];\n }\n if (typeof Blob !== 'undefined' && value instanceof Blob) {\n return { type: value.type, size: value.size };\n }\n if (seen.has(value)) return '[circular]';\n seen.add(value);\n if (Array.isArray(value)) return value.map((item) => stableRequestValue(item, seen));\n return Object.fromEntries(\n Object.entries(value)\n .sort(([first], [second]) => first.localeCompare(second))\n .map(([key, entry]) => [key, stableRequestValue(entry, seen)]),\n );\n}\n\nfunction requestInitKey(value: Omit<RequestInit, 'signal'> | undefined): string {\n if (!value) return '';\n try {\n return JSON.stringify(stableRequestValue(value)) ?? '';\n } catch {\n return String(value);\n }\n}\n\nasync function createAdapter(\n target: HTMLElement,\n parsed: ParsedPresentation,\n props: ReactPptxViewerProps,\n getCurrentProps: () => ReactPptxViewerProps,\n onCurrentSlideChange: (index: number) => void,\n onZoomChange: (state: ViewerZoomState) => void,\n reportWarning: (warning: import('@extend-ai/react-pptx-model').PresentationWarning) => void,\n isCurrent: () => boolean,\n): Promise<ViewerAdapter> {\n const fontManager = new PptxFontManager(props.fonts, (warning) => {\n if (isCurrent()) reportWarning(warning);\n });\n const fontStartedAt = performanceNow();\n await fontManager.prepare(parsed.document);\n getCurrentProps().onPerformanceMeasurement?.(\n performanceMeasurement('embedded-font-preparation', fontStartedAt),\n );\n if (!isCurrent()) {\n fontManager.destroy();\n throw new Error('Viewer adapter creation was superseded.');\n }\n let destroyed = false;\n const active = () => !destroyed && isCurrent();\n const callbacks = {\n onSlideChange: (index: number) => {\n if (active()) onCurrentSlideChange(index);\n },\n onZoomChange: (state: ViewerZoomState) => {\n if (active()) onZoomChange(state);\n },\n onSlideRendered: (index: number, element: HTMLElement) => {\n if (!active()) return;\n fontManager.applyTo(element, index);\n getCurrentProps().onSlideRendered?.(index, element);\n },\n onSlideUnmounted: (index: number) => {\n if (active()) getCurrentProps().onSlideUnmounted?.(index);\n },\n onNodeError: (nodeId: string, error: unknown) => {\n if (!active()) return;\n reportWarning({\n code: 'degraded-rendering',\n severity: 'warning',\n nodeId,\n feature: 'normalized-renderer',\n message: `A slide element could not be rendered: ${\n error instanceof Error ? error.message : String(error)\n }`,\n });\n },\n };\n\n const normalized = new NormalizedPresentationViewer(target, parsed.document, callbacks);\n return {\n async render(mode, slideIndex) {\n const startedAt = performanceNow();\n if (mode === 'continuous') {\n const virtualization = typeof props.virtualization === 'object' ? props.virtualization : {};\n await normalized.renderList({\n enabled: props.virtualization !== false,\n initialSlides: virtualization.initialSlides ?? 3,\n overscanViewport: virtualization.overscanViewport ?? 1.5,\n batchSize: virtualization.batchSize ?? 3,\n ...(virtualization.scrollElement ? { scrollElement: virtualization.scrollElement } : {}),\n initialSlideIndex: slideIndex,\n });\n } else {\n await normalized.renderSlide(slideIndex);\n }\n getCurrentProps().onPerformanceMeasurement?.(\n performanceMeasurement('slide-dom-svg-rendering', startedAt, slideIndex),\n );\n },\n goToSlide: (index, options) => normalized.goToSlide(index, options),\n setZoom: (level) => normalized.setZoom(level),\n resolveZoom: (level) => normalized.resolveZoom(level),\n search: (query, options) => normalized.searchText(query, options),\n highlight: (result, options) => normalized.highlightSearchResult(result, options),\n clearHighlights: () => normalized.clearSearchHighlights(),\n async renderThumbnail(index, thumbnailTarget, width) {\n if (!active()) return () => {};\n const handle = normalized.renderThumbnailToContainer(index, thumbnailTarget, { width });\n await handle.ready;\n if (!active()) {\n handle.dispose();\n return () => {};\n }\n fontManager.applyTo(thumbnailTarget, index);\n return () => handle.dispose();\n },\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n normalized.destroy();\n fontManager.destroy();\n },\n };\n}\n\ninterface ThumbnailProps {\n adapter: ViewerAdapter;\n index: number;\n active: boolean;\n width: number;\n onSelect: () => void;\n onRendered?: (index: number, element: HTMLElement) => void;\n}\n\nfunction Thumbnail({ adapter, index, active, width, onSelect, onRendered }: ThumbnailProps) {\n const targetRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n const target = targetRef.current;\n if (!target) return;\n let disposed = false;\n let cleanup: (() => void) | undefined;\n void adapter\n .renderThumbnail(index, target, width)\n .then((nextCleanup) => {\n if (disposed) nextCleanup();\n else {\n cleanup = nextCleanup;\n onRendered?.(index, target);\n }\n })\n .catch(() => undefined);\n return () => {\n disposed = true;\n cleanup?.();\n };\n }, [adapter, index, onRendered, width]);\n return (\n <button\n type=\"button\"\n className=\"rpv-thumbnail\"\n data-active={active || undefined}\n aria-label={`Go to slide ${index + 1}`}\n aria-current={active ? 'page' : undefined}\n onClick={onSelect}\n >\n <span className=\"rpv-thumbnail__number\">{String(index + 1).padStart(2, '0')}</span>\n <span className=\"rpv-thumbnail__canvas\" ref={targetRef} />\n </button>\n );\n}\n\nexport const ReactPptxViewer = forwardRef<PptxViewerController, ReactPptxViewerProps>(\n function ReactPptxViewer(props, forwardedRef) {\n const {\n source,\n mode = 'continuous',\n slideIndex: controlledSlide,\n initialSlide = 0,\n zoom: controlledZoom,\n defaultZoom,\n fitMode = 'contain',\n showToolbar = false,\n showThumbnails = false,\n showNotes = false,\n showDiagnostics = false,\n showSlideLabels = false,\n searchQuery,\n searchOptions,\n activeSearchResult,\n searchHighlightOptions,\n className,\n style,\n width,\n height,\n virtualization,\n fonts,\n parseOptions,\n renderLoading,\n renderError,\n renderThumbnail,\n emptyState,\n toolbarClassName,\n viewportClassName,\n toolbarStyle,\n viewportStyle,\n onReady,\n onLoad,\n onError,\n onWarning,\n onSlideChange: _onSlideChange,\n onZoomChange: _onZoomChange,\n onSlideRendered: _onSlideRendered,\n onSlideUnmounted: _onSlideUnmounted,\n onSearchResults,\n onThumbnailRendered,\n onViewportReady,\n ...divProps\n } = props;\n const viewportRef = useRef<HTMLDivElement>(null);\n const filmstripRef = useRef<HTMLElement>(null);\n const adapterRef = useRef<ViewerAdapter | undefined>(undefined);\n const adapterGenerationRef = useRef(0);\n const latestPropsRef = useRef(props);\n latestPropsRef.current = props;\n const [adapterState, setAdapterState] = useState<AdapterState | null>(null);\n const [parsed, setParsed] = useState<ParsedPresentation | null>(null);\n const [error, setError] = useState<PptxViewerError | null>(null);\n const [loading, setLoading] = useState(true);\n const [internalSlide, setInternalSlide] = useState(initialSlide);\n const [internalZoom, setInternalZoom] = useState<ViewerZoomLevel>(() =>\n normalizeViewerZoomLevel(defaultZoom ?? (fitMode === 'contain' ? 'automatic' : 100)),\n );\n const [resolvedZoom, setResolvedZoom] = useState<number>(() =>\n typeof defaultZoom === 'number' ? (normalizeViewerZoomLevel(defaultZoom) as number) : 100,\n );\n const [results, setResults] = useState<PresentationSearchResult[]>([]);\n const [runtimeWarnings, setRuntimeWarnings] = useState<\n import('@extend-ai/react-pptx-model').PresentationWarning[]\n >([]);\n const virtualizationOptions = typeof virtualization === 'object' ? virtualization : {};\n const virtualizationEnabled =\n virtualization !== false && virtualizationOptions.enabled !== false;\n const initialSlides = virtualizationOptions.initialSlides ?? 3;\n const overscanViewport = virtualizationOptions.overscanViewport ?? 1.5;\n const batchSize = virtualizationOptions.batchSize ?? 3;\n const scrollElement = virtualizationOptions.scrollElement ?? null;\n const parseFormatHint = parseOptions?.formatHint;\n const parseMaxInputBytes = parseOptions?.maxInputBytes;\n const parseFetchInit = parseOptions?.fetchInit;\n const parseFetchInitKey = requestInitKey(parseFetchInit);\n const slide = clampSlide(controlledSlide ?? internalSlide, parsed?.document.slides.length ?? 0);\n const zoom = normalizeViewerZoomLevel(controlledZoom ?? internalZoom);\n const latestSlideRef = useRef(slide);\n const latestZoomRef = useRef(zoom);\n const latestResolvedZoomRef = useRef(resolvedZoom);\n const latestControlledZoomRef = useRef(controlledZoom);\n const lastPublishedZoomRef = useRef<ViewerZoomState | undefined>(undefined);\n /** Last slide index the viewer itself reported through onSlideChange. */\n const lastViewerSlideRef = useRef<number | undefined>(undefined);\n latestSlideRef.current = slide;\n latestZoomRef.current = zoom;\n latestResolvedZoomRef.current = resolvedZoom;\n latestControlledZoomRef.current = controlledZoom;\n const notifyZoomChange = useCallback((state: ViewerZoomState) => {\n const previous = lastPublishedZoomRef.current;\n if (\n previous?.level === state.level &&\n Math.abs(previous.resolvedZoom - state.resolvedZoom) <= 0.01\n ) {\n return;\n }\n lastPublishedZoomRef.current = state;\n latestPropsRef.current.onZoomChange?.(state);\n }, []);\n const publishZoomChange = useCallback(\n (state: ViewerZoomState) => {\n setResolvedZoom(state.resolvedZoom);\n latestResolvedZoomRef.current = state.resolvedZoom;\n notifyZoomChange(state);\n },\n [notifyZoomChange],\n );\n const thumbnailCount = showThumbnails ? (parsed?.document.slides.length ?? 0) : 0;\n const getThumbnailKey = useCallback(\n (index: number) => parsed?.document.slides[index]?.id ?? index,\n [parsed],\n );\n const thumbnailVirtualizer = useVirtualizer({\n count: thumbnailCount,\n enabled: thumbnailCount > 0,\n estimateSize: () => THUMBNAIL_ROW_ESTIMATE,\n getItemKey: getThumbnailKey,\n getScrollElement: () => filmstripRef.current,\n initialRect: THUMBNAIL_INITIAL_RECT,\n observeElementRect: observeThumbnailFilmstripRect,\n overscan: THUMBNAIL_OVERSCAN,\n useFlushSync: false,\n });\n const virtualThumbnails = thumbnailVirtualizer.getVirtualItems();\n\n useEffect(() => {\n if (!showThumbnails || thumbnailCount === 0) return;\n thumbnailVirtualizer.scrollToIndex(slide, { align: 'auto' });\n }, [showThumbnails, slide, thumbnailCount, thumbnailVirtualizer]);\n\n const controller = useMemo<PptxViewerController>(\n () => ({\n async goToSlide(index, options) {\n const next = clampSlide(index, parsed?.document.slides.length ?? 0);\n setInternalSlide(next);\n await adapterRef.current?.goToSlide(next, options);\n },\n async next() {\n await this.goToSlide(latestSlideRef.current + 1, {\n behavior: 'smooth',\n block: 'center',\n });\n },\n async previous() {\n await this.goToSlide(latestSlideRef.current - 1, {\n behavior: 'smooth',\n block: 'center',\n });\n },\n async setZoom(level) {\n const next = normalizeViewerZoomLevel(level);\n const adapter = adapterRef.current;\n if (latestControlledZoomRef.current !== undefined) {\n notifyZoomChange({\n level: next,\n resolvedZoom:\n adapter?.resolveZoom(next) ??\n (typeof next === 'number' ? next : latestResolvedZoomRef.current),\n });\n return;\n }\n setInternalZoom(next);\n latestZoomRef.current = next;\n if (adapter) await adapter.setZoom(next);\n else {\n publishZoomChange({\n level: next,\n resolvedZoom: typeof next === 'number' ? next : latestResolvedZoomRef.current,\n });\n }\n },\n async setFitMode(nextMode) {\n await this.setZoom(nextMode === 'contain' ? 'automatic' : 100);\n },\n search(query, options) {\n return adapterRef.current?.search(query, options) ?? [];\n },\n async highlightSearchResult(result, options) {\n setInternalSlide(result.slideIndex);\n await adapterRef.current?.highlight(result, options);\n },\n clearSearchHighlights() {\n adapterRef.current?.clearHighlights();\n },\n isReady: () => Boolean(adapterRef.current),\n async renderThumbnail(index, target, options) {\n const adapter = adapterRef.current;\n if (!adapter) throw new Error('The PowerPoint viewer is not ready to render thumbnails.');\n const count = parsed?.document.slides.length ?? 0;\n if (!Number.isInteger(index) || index < 0 || index >= count) {\n throw new RangeError(`Slide ${index} does not exist.`);\n }\n return adapter.renderThumbnail(index, target, options?.width ?? 144);\n },\n getDocument: () => parsed?.document ?? null,\n getSlideIndex: () => latestSlideRef.current,\n getZoom: () => latestZoomRef.current,\n getResolvedZoom: () => latestResolvedZoomRef.current,\n }),\n [adapterState?.generation, notifyZoomChange, parsed, publishZoomChange],\n );\n useImperativeHandle(forwardedRef, () => controller, [controller]);\n\n useEffect(() => {\n const abort = new AbortController();\n adapterGenerationRef.current += 1;\n const previousAdapter = adapterRef.current;\n adapterRef.current = undefined;\n previousAdapter?.destroy();\n setAdapterState(null);\n setLoading(true);\n setError(null);\n setParsed(null);\n setRuntimeWarnings([]);\n void parsePresentation(source, {\n signal: abort.signal,\n ...(parseFormatHint ? { formatHint: parseFormatHint } : {}),\n ...(parseMaxInputBytes !== undefined ? { maxInputBytes: parseMaxInputBytes } : {}),\n ...(parseFetchInit ? { fetchInit: parseFetchInit } : {}),\n onPerformanceMeasurement: (measurement) =>\n latestPropsRef.current.onPerformanceMeasurement?.(measurement),\n })\n .then((next) => {\n if (abort.signal.aborted) return;\n setParsed(next);\n latestPropsRef.current.onLoad?.(next);\n for (const warning of next.warnings) latestPropsRef.current.onWarning?.(warning);\n })\n .catch((reason: unknown) => {\n if (abort.signal.aborted) return;\n const nextError = toPptxViewerError(\n reason,\n 'parse-failed',\n 'Could not open the presentation.',\n );\n setError(nextError);\n latestPropsRef.current.onError?.(nextError);\n })\n .finally(() => {\n if (!abort.signal.aborted) setLoading(false);\n });\n return () => abort.abort();\n }, [source, parseFormatHint, parseMaxInputBytes, parseFetchInitKey]);\n\n useEffect(() => {\n const viewport = viewportRef.current;\n if (viewport) onViewportReady?.(viewport);\n }, [onViewportReady]);\n\n useEffect(() => {\n const target = viewportRef.current;\n if (!parsed || !target || error) return;\n const generation = ++adapterGenerationRef.current;\n let disposed = false;\n let createdAdapter: ViewerAdapter | undefined;\n const isCurrent = () => !disposed && adapterGenerationRef.current === generation && !error;\n const adapterProps: ReactPptxViewerProps = {\n ...props,\n virtualization: !virtualizationEnabled\n ? false\n : {\n enabled: virtualizationEnabled,\n initialSlides,\n overscanViewport,\n batchSize,\n ...(scrollElement ? { scrollElement } : {}),\n },\n };\n setAdapterState(null);\n void (async () => {\n try {\n const adapter = await createAdapter(\n target,\n parsed,\n adapterProps,\n () => latestPropsRef.current,\n (index) => {\n if (!isCurrent()) return;\n lastViewerSlideRef.current = index;\n setInternalSlide(index);\n latestPropsRef.current.onSlideChange?.(index);\n },\n publishZoomChange,\n (warning) => {\n if (!isCurrent()) return;\n setRuntimeWarnings((current) =>\n current.some(\n (item) => item.code === warning.code && item.feature === warning.feature,\n )\n ? current\n : [...current, warning],\n );\n latestPropsRef.current.onWarning?.(warning);\n },\n isCurrent,\n );\n createdAdapter = adapter;\n if (!isCurrent()) {\n adapter.destroy();\n return;\n }\n await adapter.setZoom(latestZoomRef.current);\n if (!isCurrent()) {\n adapter.destroy();\n return;\n }\n await adapter.render(mode, latestSlideRef.current);\n if (!isCurrent()) {\n adapter.destroy();\n return;\n }\n adapterRef.current = adapter;\n setAdapterState({ adapter, generation });\n if (!isCurrent()) return;\n latestPropsRef.current.onReady?.(controller);\n } catch (reason: unknown) {\n if (!isCurrent()) return;\n const nextError = toPptxViewerError(\n reason,\n 'render-failed',\n 'Could not render the presentation.',\n );\n setError(nextError);\n latestPropsRef.current.onError?.(nextError);\n }\n })();\n return () => {\n disposed = true;\n if (adapterGenerationRef.current === generation) adapterGenerationRef.current += 1;\n if (adapterRef.current === createdAdapter) adapterRef.current = undefined;\n createdAdapter?.destroy();\n setAdapterState((current) => (current?.generation === generation ? null : current));\n };\n }, [\n parsed,\n error,\n mode,\n fonts,\n virtualizationEnabled,\n initialSlides,\n overscanViewport,\n batchSize,\n scrollElement,\n publishZoomChange,\n ]);\n\n useEffect(() => {\n // Skip echoes: controlled hosts feed onSlideChange back into slideIndex\n // while the user scrolls, and navigating to the already-visible slide\n // would snap the scroll position.\n if (adapterState && controlledSlide !== undefined && slide !== lastViewerSlideRef.current) {\n void adapterState.adapter.goToSlide(slide, { behavior: 'instant' });\n }\n }, [adapterState, controlledSlide, slide]);\n useEffect(() => {\n if (adapterState) void adapterState.adapter.setZoom(zoom);\n }, [adapterState, zoom]);\n useEffect(() => {\n if (controlledZoom !== undefined || defaultZoom !== undefined) return;\n setInternalZoom(fitMode === 'contain' ? 'automatic' : 100);\n }, [controlledZoom, defaultZoom, fitMode]);\n useEffect(() => {\n const adapter = adapterState?.adapter;\n if (!adapter || searchQuery === undefined || searchQuery === '') {\n setResults([]);\n onSearchResults?.([]);\n adapter?.clearHighlights();\n return;\n }\n const next = adapter.search(searchQuery, searchOptions);\n setResults(next);\n onSearchResults?.(next);\n }, [adapterState, searchQuery, searchOptions, onSearchResults]);\n useEffect(() => {\n const adapter = adapterState?.adapter;\n if (!adapter) return;\n if (activeSearchResult === null || activeSearchResult === undefined) {\n adapter.clearHighlights();\n return;\n }\n const result =\n typeof activeSearchResult === 'number' ? results[activeSearchResult] : activeSearchResult;\n if (result) void controller.highlightSearchResult(result, searchHighlightOptions);\n }, [adapterState, activeSearchResult, results, searchHighlightOptions, controller]);\n\n const go = useCallback(\n (index: number) => {\n setInternalSlide(index);\n void controller.goToSlide(index, { behavior: 'smooth', block: 'center' });\n },\n [controller],\n );\n const notes = parsed?.document.slides[slide]?.notes ?? [];\n return (\n <div\n {...divProps}\n className={['rpv-root', className].filter(Boolean).join(' ')}\n style={{ ...viewerShellStyle(height), ...(width !== undefined ? { width } : {}), ...style }}\n data-rpv-scroll-owner={scrollElement ? 'external' : 'internal'}\n >\n {showToolbar && parsed ? (\n <div\n className={['rpv-toolbar', toolbarClassName].filter(Boolean).join(' ')}\n style={toolbarStyle}\n >\n <div className=\"rpv-toolbar__cluster\">\n <button\n type=\"button\"\n onClick={() => void controller.previous()}\n disabled={slide === 0}\n aria-label=\"Previous slide\"\n >\n ←\n </button>\n <span className=\"rpv-toolbar__count\">\n {slide + 1} / {parsed.document.slides.length}\n </span>\n <button\n type=\"button\"\n onClick={() => void controller.next()}\n disabled={slide >= parsed.document.slides.length - 1}\n aria-label=\"Next slide\"\n >\n →\n </button>\n </div>\n <div className=\"rpv-toolbar__cluster\">\n <button\n type=\"button\"\n onClick={() => void controller.setZoom(resolvedZoom - 10)}\n aria-label=\"Zoom out\"\n >\n −\n </button>\n <span className=\"rpv-toolbar__count\">{Math.round(resolvedZoom)}%</span>\n <button\n type=\"button\"\n onClick={() => void controller.setZoom(resolvedZoom + 10)}\n aria-label=\"Zoom in\"\n >\n +\n </button>\n </div>\n </div>\n ) : null}\n <div className=\"rpv-workspace\">\n {showThumbnails && parsed ? (\n <nav ref={filmstripRef} className=\"rpv-filmstrip\" aria-label=\"Slide thumbnails\">\n <div\n className=\"rpv-filmstrip__sizer\"\n style={{ height: thumbnailVirtualizer.getTotalSize() }}\n >\n {virtualThumbnails.map((virtualThumbnail) => {\n const item = parsed.document.slides[virtualThumbnail.index];\n if (!item) return null;\n const index = virtualThumbnail.index;\n return (\n <div\n key={virtualThumbnail.key}\n ref={thumbnailVirtualizer.measureElement}\n className=\"rpv-filmstrip__item\"\n data-index={index}\n style={{ transform: `translateY(${virtualThumbnail.start}px)` }}\n >\n {renderThumbnail ? (\n renderThumbnail({\n slideIndex: index,\n slideCount: parsed.document.slides.length,\n isCurrent: index === slide,\n goToSlide: () => go(index),\n })\n ) : adapterState ? (\n <Thumbnail\n adapter={adapterState.adapter}\n index={index}\n active={index === slide}\n width={144}\n onSelect={() => go(index)}\n {...(onThumbnailRendered ? { onRendered: onThumbnailRendered } : {})}\n />\n ) : null}\n </div>\n );\n })}\n </div>\n </nav>\n ) : null}\n <main className=\"rpv-stage\">\n {loading ? (\n <div className=\"rpv-status\">\n {renderLoading?.() ?? (\n <>\n <span className=\"rpv-spinner\" />\n Opening presentation…\n </>\n )}\n </div>\n ) : null}\n {error ? (\n <div className=\"rpv-status rpv-status--error\">\n {renderError?.(error) ?? (\n <>\n <strong>Couldn’t open this deck.</strong>\n <span>{error.message}</span>\n </>\n )}\n </div>\n ) : null}\n {!loading && !error && parsed?.document.slides.length === 0 ? (\n <div className=\"rpv-status\">{emptyState ?? 'This presentation has no slides.'}</div>\n ) : null}\n <div\n ref={viewportRef}\n className={['rpv-viewport', viewportClassName].filter(Boolean).join(' ')}\n style={viewportStyle}\n data-testid=\"pptx-viewport\"\n data-rpv-scroll-owner={scrollElement ? 'external' : 'internal'}\n aria-live=\"polite\"\n />\n {showSlideLabels && parsed ? (\n <div className=\"rpv-slide-label\">Slide {slide + 1}</div>\n ) : null}\n </main>\n {showDiagnostics && parsed ? (\n <aside className=\"rpv-diagnostics\" aria-label=\"Rendering diagnostics\">\n <h2>Diagnostics</h2>\n <dl>\n <div>\n <dt>Format</dt>\n <dd>{parsed.document.format.toUpperCase()}</dd>\n </div>\n <div>\n <dt>Slides</dt>\n <dd>{parsed.document.slides.length}</dd>\n </div>\n <div>\n <dt>Warnings</dt>\n <dd>{parsed.warnings.length + runtimeWarnings.length}</dd>\n </div>\n </dl>\n {parsed.warnings.map((warning, index) => (\n <p key={`${warning.code}-${index}`} data-severity={warning.severity}>\n <strong>{warning.code}</strong>\n {warning.message}\n </p>\n ))}\n {runtimeWarnings.map((warning, index) => (\n <p\n key={`runtime-${warning.code}-${warning.feature ?? index}`}\n data-severity={warning.severity}\n >\n <strong>{warning.code}</strong>\n {warning.message}\n </p>\n ))}\n </aside>\n ) : null}\n </div>\n {showNotes && notes.length ? (\n <section className=\"rpv-notes\">\n <h2>Speaker notes</h2>\n {notes.map((note, index) => (\n <p key={index}>{note.text}</p>\n ))}\n </section>\n ) : null}\n </div>\n );\n },\n);\n","import { useCallback, useEffect, useState, type RefCallback } from 'react';\nimport { toPptxViewerError, type PptxViewerError } from './errors';\nimport { parsePresentation } from './parse';\nimport type {\n ParsePresentationOptions,\n ParsedPresentation,\n PptxViewerController,\n PresentationSource,\n} from './types';\n\nexport interface UsePptxPresentationState {\n presentation: ParsedPresentation | null;\n document: ParsedPresentation['document'] | null;\n isLoading: boolean;\n error: PptxViewerError | null;\n}\n\nconst EMPTY_PARSE_OPTIONS: ParsePresentationOptions = Object.freeze({});\n\n/** Parse a presentation independently from the viewer, mirroring `useDocxModel`. */\nexport function usePptxPresentation(\n source?: PresentationSource | null,\n options: ParsePresentationOptions = EMPTY_PARSE_OPTIONS,\n): UsePptxPresentationState {\n const [state, setState] = useState<UsePptxPresentationState>({\n presentation: null,\n document: null,\n isLoading: Boolean(source),\n error: null,\n });\n\n useEffect(() => {\n if (!source) {\n setState({ presentation: null, document: null, isLoading: false, error: null });\n return;\n }\n const abort = new AbortController();\n setState((current) => ({ ...current, isLoading: true, error: null }));\n void parsePresentation(source, { ...options, signal: abort.signal })\n .then((presentation) => {\n if (!abort.signal.aborted) {\n setState({\n presentation,\n document: presentation.document,\n isLoading: false,\n error: null,\n });\n }\n })\n .catch((reason: unknown) => {\n if (!abort.signal.aborted) {\n setState({\n presentation: null,\n document: null,\n isLoading: false,\n error: toPptxViewerError(reason, 'parse-failed', 'Could not open the presentation.'),\n });\n }\n });\n return () => abort.abort();\n }, [source, options.fetchInit, options.formatHint, options.maxInputBytes]);\n\n return state;\n}\n\n/** Backwards-friendly model-oriented alias. */\nexport const usePptxModel = usePptxPresentation;\n\nexport interface UsePptxViewerResult {\n controller: PptxViewerController | null;\n ref: RefCallback<PptxViewerController>;\n}\n\n/** Reactive access to the imperative viewer controller. */\nexport function usePptxViewer(): UsePptxViewerResult {\n const [controller, setController] = useState<PptxViewerController | null>(null);\n const ref = useCallback<RefCallback<PptxViewerController>>((value) => setController(value), []);\n return { controller, ref };\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type {\n PptxSlideThumbnailItem,\n PptxSlideThumbnailResolution,\n PptxSlideThumbnailStatus,\n PptxViewerController,\n PptxViewerThumbnails,\n UsePptxViewerThumbnailsOptions,\n} from './types';\n\nconst EMU_PER_CSS_PIXEL = 9_525;\nconst DEFAULT_MAX_DIMENSION = 160;\n\ninterface ThumbnailState {\n error?: Error;\n status: PptxSlideThumbnailStatus;\n}\n\ninterface PrefetchedThumbnail {\n cleanup: () => void;\n element: HTMLElement;\n width: number;\n}\n\nfunction normalizeSlideIndexes(\n indexes: readonly number[] | undefined,\n slideCount: number,\n sort = true,\n): number[] {\n if (!indexes?.length || slideCount <= 0) return [];\n const normalized = [...new Set(indexes)].filter(\n (index) => Number.isInteger(index) && index >= 0 && index < slideCount,\n );\n return sort ? normalized.sort((left, right) => left - right) : normalized;\n}\n\nfunction finitePositive(value: number | undefined): number | undefined {\n return value !== undefined && Number.isFinite(value) && value > 0 ? value : undefined;\n}\n\nfunction thumbnailBounds(resolution?: PptxSlideThumbnailResolution): {\n maxHeight: number;\n maxWidth: number;\n} {\n if (typeof resolution === 'number') {\n const maximum = finitePositive(resolution) ?? DEFAULT_MAX_DIMENSION;\n return { maxHeight: maximum, maxWidth: maximum };\n }\n const maxHeight = finitePositive(resolution?.maxHeight);\n const maxWidth = finitePositive(resolution?.maxWidth);\n if (maxHeight === undefined && maxWidth === undefined) {\n return { maxHeight: DEFAULT_MAX_DIMENSION, maxWidth: DEFAULT_MAX_DIMENSION };\n }\n return {\n maxHeight: maxHeight ?? Number.POSITIVE_INFINITY,\n maxWidth: maxWidth ?? Number.POSITIVE_INFINITY,\n };\n}\n\nfunction thumbnailSize(\n sourceWidth: number,\n sourceHeight: number,\n resolution?: PptxSlideThumbnailResolution,\n): { height: number; width: number } {\n const { maxHeight, maxWidth } = thumbnailBounds(resolution);\n const scale = Math.min(maxWidth / sourceWidth, maxHeight / sourceHeight);\n return {\n height: Math.max(1, sourceHeight * scale),\n width: Math.max(1, sourceWidth * scale),\n };\n}\n\nfunction asError(reason: unknown): Error {\n return reason instanceof Error ? reason : new Error(String(reason));\n}\n\n/**\n * Exposes detached slide previews for consumer-owned thumbnail rails.\n *\n * PPTX slides remain live DOM/SVG surfaces to preserve the main viewer's\n * rendering fidelity. Attach `thumbnail.containerRef` to a sized element.\n */\nexport function usePptxViewerThumbnails(\n controller: PptxViewerController | null | undefined,\n options: UsePptxViewerThumbnailsOptions = {},\n): PptxViewerThumbnails {\n const presentation = controller?.getDocument() ?? null;\n const disabled = options.disabled ?? false;\n const resolution = options.resolution;\n const attachedElementsRef = useRef(new Map<number, HTMLElement>());\n const cleanupsRef = useRef(new Map<number, () => void>());\n const prefetchedRef = useRef(new Map<number, PrefetchedThumbnail>());\n const prefetchInFlightRef = useRef(new Map<number, Promise<void>>());\n const renderGenerationRef = useRef(new Map<number, number>());\n const refCallbacksRef = useRef(new Map<number, (element: HTMLElement | null) => void>());\n const attachRef = useRef<(index: number, element: HTMLElement | null) => void>(() => {});\n const mountedRef = useRef(true);\n const [states, setStates] = useState<Record<number, ThumbnailState>>({});\n\n const slideCount = presentation?.slides.length ?? 0;\n const visibleSlideIndexes = useMemo(\n () => normalizeSlideIndexes(options.renderWindow?.visibleSlideIndexes, slideCount),\n [options.renderWindow?.visibleSlideIndexes, slideCount],\n );\n const prefetchSlideIndexes = useMemo(\n () => normalizeSlideIndexes(options.renderWindow?.prefetchSlideIndexes, slideCount, false),\n [options.renderWindow?.prefetchSlideIndexes, slideCount],\n );\n const visibleSlideIndexesKey = visibleSlideIndexes.join(',');\n const prefetchSlideIndexesKey = prefetchSlideIndexes.join(',');\n const visibleSlideIndexSet = useMemo(\n () => new Set(visibleSlideIndexes),\n [visibleSlideIndexesKey],\n );\n const visibleSlideIndexSetRef = useRef(visibleSlideIndexSet);\n visibleSlideIndexSetRef.current = visibleSlideIndexSet;\n const requestedPrefetchSlideIndexSetRef = useRef(new Set(prefetchSlideIndexes));\n requestedPrefetchSlideIndexSetRef.current = new Set(prefetchSlideIndexes);\n\n const sourceWidth = Math.max(1, (presentation?.size.widthEmu ?? 1) / EMU_PER_CSS_PIXEL);\n const sourceHeight = Math.max(1, (presentation?.size.heightEmu ?? 1) / EMU_PER_CSS_PIXEL);\n const size = thumbnailSize(sourceWidth, sourceHeight, resolution);\n\n const setThumbnailState = useCallback((index: number, state: ThumbnailState) => {\n if (!mountedRef.current) return;\n setStates((current) => {\n const previous = current[index];\n if (previous?.status === state.status && previous.error === state.error) return current;\n return { ...current, [index]: state };\n });\n }, []);\n\n const invalidateThumbnail = useCallback((index: number) => {\n renderGenerationRef.current.set(index, (renderGenerationRef.current.get(index) ?? 0) + 1);\n }, []);\n\n const disposeAttachedThumbnail = useCallback((index: number) => {\n cleanupsRef.current.get(index)?.();\n cleanupsRef.current.delete(index);\n }, []);\n\n const disposePrefetchedThumbnail = useCallback((index: number) => {\n prefetchedRef.current.get(index)?.cleanup();\n prefetchedRef.current.delete(index);\n }, []);\n\n const disposeThumbnail = useCallback(\n (index: number) => {\n invalidateThumbnail(index);\n disposeAttachedThumbnail(index);\n disposePrefetchedThumbnail(index);\n },\n [disposeAttachedThumbnail, disposePrefetchedThumbnail, invalidateThumbnail],\n );\n\n const renderThumbnail = useCallback(\n async (slideIndex: number, element: HTMLElement): Promise<void> => {\n disposeThumbnail(slideIndex);\n attachedElementsRef.current.set(slideIndex, element);\n if (disabled || !controller?.isReady()) {\n setThumbnailState(slideIndex, { status: 'idle' });\n return;\n }\n const generation = (renderGenerationRef.current.get(slideIndex) ?? 0) + 1;\n renderGenerationRef.current.set(slideIndex, generation);\n setThumbnailState(slideIndex, { status: 'rendering' });\n try {\n const cleanup = await controller.renderThumbnail(slideIndex, element, {\n width: size.width,\n });\n if (\n !mountedRef.current ||\n renderGenerationRef.current.get(slideIndex) !== generation ||\n attachedElementsRef.current.get(slideIndex) !== element\n ) {\n cleanup();\n return;\n }\n cleanupsRef.current.set(slideIndex, cleanup);\n setThumbnailState(slideIndex, { status: 'ready' });\n } catch (reason: unknown) {\n if (!mountedRef.current || renderGenerationRef.current.get(slideIndex) !== generation) {\n return;\n }\n setThumbnailState(slideIndex, { error: asError(reason), status: 'error' });\n }\n },\n [controller, disabled, disposeThumbnail, setThumbnailState, size.width],\n );\n\n attachRef.current = (index, element) => {\n const previous = attachedElementsRef.current.get(index);\n if (previous === element) return;\n if (!element) {\n invalidateThumbnail(index);\n disposeAttachedThumbnail(index);\n attachedElementsRef.current.delete(index);\n setThumbnailState(index, { status: 'idle' });\n return;\n }\n\n invalidateThumbnail(index);\n disposeAttachedThumbnail(index);\n attachedElementsRef.current.set(index, element);\n const prefetched = prefetchedRef.current.get(index);\n if (prefetched && !disabled && controller?.isReady() && prefetched.width === size.width) {\n prefetchedRef.current.delete(index);\n element.replaceChildren(...Array.from(prefetched.element.childNodes));\n cleanupsRef.current.set(index, prefetched.cleanup);\n setThumbnailState(index, { status: 'ready' });\n return;\n }\n disposePrefetchedThumbnail(index);\n void renderThumbnail(index, element);\n };\n\n const refForIndex = useCallback((index: number) => {\n let callback = refCallbacksRef.current.get(index);\n if (!callback) {\n callback = (element) => attachRef.current(index, element);\n refCallbacksRef.current.set(index, callback);\n }\n return callback;\n }, []);\n\n const rerenderAttachedThumbnails = useCallback(async (): Promise<void> => {\n const attached = [...attachedElementsRef.current].sort(([leftIndex], [rightIndex]) => {\n const leftPriority = visibleSlideIndexSetRef.current.has(leftIndex) ? 0 : 1;\n const rightPriority = visibleSlideIndexSetRef.current.has(rightIndex) ? 0 : 1;\n return leftPriority - rightPriority || leftIndex - rightIndex;\n });\n await Promise.all(attached.map(([index, element]) => renderThumbnail(index, element)));\n }, [renderThumbnail]);\n\n const prefetchThumbnail = useCallback(\n async (slideIndex: number): Promise<void> => {\n while (true) {\n const existing = prefetchInFlightRef.current.get(slideIndex);\n if (existing) {\n await existing;\n continue;\n }\n if (\n disabled ||\n !controller?.isReady() ||\n attachedElementsRef.current.has(slideIndex) ||\n prefetchedRef.current.has(slideIndex) ||\n !requestedPrefetchSlideIndexSetRef.current.has(slideIndex)\n ) {\n return;\n }\n\n const generation = (renderGenerationRef.current.get(slideIndex) ?? 0) + 1;\n renderGenerationRef.current.set(slideIndex, generation);\n const element = globalThis.document.createElement('div');\n setThumbnailState(slideIndex, { status: 'rendering' });\n const pending = (async () => {\n try {\n const cleanup = await controller.renderThumbnail(slideIndex, element, {\n width: size.width,\n });\n if (\n !mountedRef.current ||\n renderGenerationRef.current.get(slideIndex) !== generation ||\n attachedElementsRef.current.has(slideIndex) ||\n !requestedPrefetchSlideIndexSetRef.current.has(slideIndex)\n ) {\n cleanup();\n return;\n }\n prefetchedRef.current.set(slideIndex, { cleanup, element, width: size.width });\n setThumbnailState(slideIndex, { status: 'ready' });\n } catch (reason: unknown) {\n if (!mountedRef.current || renderGenerationRef.current.get(slideIndex) !== generation) {\n return;\n }\n setThumbnailState(slideIndex, { error: asError(reason), status: 'error' });\n }\n })();\n prefetchInFlightRef.current.set(slideIndex, pending);\n try {\n await pending;\n } finally {\n if (prefetchInFlightRef.current.get(slideIndex) === pending) {\n prefetchInFlightRef.current.delete(slideIndex);\n }\n }\n return;\n }\n },\n [controller, disabled, setThumbnailState, size.width],\n );\n\n useEffect(() => {\n mountedRef.current = true;\n return () => {\n mountedRef.current = false;\n for (const index of renderGenerationRef.current.keys()) {\n renderGenerationRef.current.set(index, (renderGenerationRef.current.get(index) ?? 0) + 1);\n }\n for (const cleanup of cleanupsRef.current.values()) cleanup();\n cleanupsRef.current.clear();\n for (const prefetched of prefetchedRef.current.values()) prefetched.cleanup();\n prefetchedRef.current.clear();\n prefetchInFlightRef.current.clear();\n };\n }, []);\n\n useEffect(\n () => () => {\n for (const index of prefetchInFlightRef.current.keys()) invalidateThumbnail(index);\n // The invalidated promises may belong to a previous controller or\n // resolution and must not gate replacement work for the same slide.\n prefetchInFlightRef.current.clear();\n for (const prefetched of prefetchedRef.current.values()) prefetched.cleanup();\n prefetchedRef.current.clear();\n },\n [controller, invalidateThumbnail, size.width],\n );\n\n useEffect(() => {\n void rerenderAttachedThumbnails();\n }, [rerenderAttachedThumbnails]);\n\n useEffect(() => {\n for (const index of [...prefetchedRef.current.keys()]) {\n if (disabled || !requestedPrefetchSlideIndexSetRef.current.has(index)) {\n disposePrefetchedThumbnail(index);\n if (!attachedElementsRef.current.has(index)) setThumbnailState(index, { status: 'idle' });\n }\n }\n for (const index of prefetchInFlightRef.current.keys()) {\n if (\n disabled ||\n attachedElementsRef.current.has(index) ||\n !requestedPrefetchSlideIndexSetRef.current.has(index)\n ) {\n invalidateThumbnail(index);\n prefetchInFlightRef.current.delete(index);\n if (!attachedElementsRef.current.has(index)) setThumbnailState(index, { status: 'idle' });\n }\n }\n if (disabled) return;\n\n let cancelled = false;\n void (async () => {\n for (const index of prefetchSlideIndexes) {\n if (cancelled) return;\n await prefetchThumbnail(index);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [\n disabled,\n disposePrefetchedThumbnail,\n invalidateThumbnail,\n prefetchSlideIndexesKey,\n prefetchThumbnail,\n setThumbnailState,\n ]);\n\n const thumbnails = useMemo<PptxSlideThumbnailItem[]>(\n () =>\n (presentation?.slides ?? []).map((slide, slideIndex) => {\n const state = states[slideIndex] ?? { status: 'idle' as const };\n return {\n aspectRatio: sourceWidth / sourceHeight,\n contentHeight: sourceHeight,\n contentWidth: sourceWidth,\n containerRef: refForIndex(slideIndex),\n ...(state.error ? { error: state.error } : {}),\n height: size.height,\n slide,\n slideIndex,\n slideNumber: slideIndex + 1,\n status: state.status,\n renderToContainer: (element: HTMLElement) => renderThumbnail(slideIndex, element),\n width: size.width,\n };\n }),\n [\n presentation,\n refForIndex,\n renderThumbnail,\n size.height,\n size.width,\n sourceHeight,\n sourceWidth,\n states,\n ],\n );\n\n return useMemo(\n () => ({ renderThumbnail, rerenderAttachedThumbnails, thumbnails }),\n [renderThumbnail, rerenderAttachedThumbnails, thumbnails],\n );\n}\n","import { PptxViewerError, throwIfAborted } from './errors';\nimport { PptxFontManager } from './fonts';\nimport { NormalizedPresentationViewer } from './normalized-viewer';\nimport { performanceMeasurement, performanceNow } from './performance';\nimport type {\n ParsedPresentation,\n PptxPerformanceMeasurement,\n PptxThumbnailRenderOptions,\n PptxThumbnailRenderer,\n PptxThumbnailRendererOptions,\n PptxThumbnailRenderResult,\n} from './types';\n\nconst EMU_PER_CSS_PIXEL = 9_525;\nconst DEFAULT_MAX_DIMENSION = 160;\n\ntype ThumbnailData = Blob | HTMLCanvasElement | ImageBitmap | string;\n\ninterface QueueWaiter {\n reject: (reason: unknown) => void;\n resolve: (release: () => void) => void;\n signal?: AbortSignal;\n abort?: () => void;\n}\n\nclass RenderQueue {\n private active = 0;\n private destroyed = false;\n private readonly waiters: QueueWaiter[] = [];\n\n constructor(private readonly limit: number) {}\n\n acquire(signal?: AbortSignal): Promise<() => void> {\n throwIfAborted(signal);\n if (this.destroyed) return Promise.reject(abortedError());\n return new Promise((resolve, reject) => {\n const waiter: QueueWaiter = { resolve, reject, ...(signal ? { signal } : {}) };\n if (signal) {\n waiter.abort = () => {\n const index = this.waiters.indexOf(waiter);\n if (index >= 0) this.waiters.splice(index, 1);\n reject(abortedError(signal.reason));\n };\n signal.addEventListener('abort', waiter.abort, { once: true });\n }\n this.waiters.push(waiter);\n this.drain();\n });\n }\n\n destroy(): void {\n this.destroyed = true;\n for (const waiter of this.waiters.splice(0)) {\n if (waiter.abort && waiter.signal) {\n waiter.signal.removeEventListener('abort', waiter.abort);\n }\n waiter.reject(abortedError());\n }\n }\n\n private drain(): void {\n while (!this.destroyed && this.active < this.limit && this.waiters.length) {\n const waiter = this.waiters.shift()!;\n if (waiter.abort && waiter.signal) {\n waiter.signal.removeEventListener('abort', waiter.abort);\n }\n if (waiter.signal?.aborted) {\n waiter.reject(abortedError(waiter.signal.reason));\n continue;\n }\n this.active += 1;\n let released = false;\n waiter.resolve(() => {\n if (released) return;\n released = true;\n this.active -= 1;\n this.drain();\n });\n }\n }\n}\n\nfunction abortedError(reason?: unknown): PptxViewerError {\n return new PptxViewerError('aborted', 'Thumbnail rendering was cancelled.', { cause: reason });\n}\n\nfunction finitePositive(value: number | undefined, fallback: number): number {\n return value !== undefined && Number.isFinite(value) && value > 0 ? value : fallback;\n}\n\nfunction outputSize(\n presentation: ParsedPresentation,\n options: PptxThumbnailRenderOptions,\n): { height: number; naturalHeight: number; naturalWidth: number; width: number } {\n const naturalWidth = Math.max(1, presentation.document.size.widthEmu / EMU_PER_CSS_PIXEL);\n const naturalHeight = Math.max(1, presentation.document.size.heightEmu / EMU_PER_CSS_PIXEL);\n const hasWidth =\n options.maxWidth !== undefined && Number.isFinite(options.maxWidth) && options.maxWidth > 0;\n const hasHeight =\n options.maxHeight !== undefined && Number.isFinite(options.maxHeight) && options.maxHeight > 0;\n const maxWidth = hasWidth\n ? options.maxWidth!\n : hasHeight\n ? Number.POSITIVE_INFINITY\n : DEFAULT_MAX_DIMENSION;\n const maxHeight = hasHeight\n ? options.maxHeight!\n : hasWidth\n ? Number.POSITIVE_INFINITY\n : DEFAULT_MAX_DIMENSION;\n const scale = Math.min(maxWidth / naturalWidth, maxHeight / naturalHeight);\n return {\n height: Math.max(1, Math.round(naturalHeight * scale)),\n naturalHeight,\n naturalWidth,\n width: Math.max(1, Math.round(naturalWidth * scale)),\n };\n}\n\nfunction blobToDataUrl(blob: Blob, signal?: AbortSignal): Promise<string> {\n return abortable(\n new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(String(reader.result));\n reader.onerror = () => reject(reader.error ?? new Error('Could not read a slide asset.'));\n reader.readAsDataURL(blob);\n }),\n signal,\n );\n}\n\nasync function inlineResourceUrl(url: string, signal?: AbortSignal): Promise<string> {\n if (!/^(?:blob:|https?:)/i.test(url)) return url;\n try {\n const response = await fetch(url, signal ? { signal } : undefined);\n if (!response.ok) return url;\n return await blobToDataUrl(await response.blob(), signal);\n } catch {\n throwIfAborted(signal);\n return url;\n }\n}\n\nasync function inlineResources(root: HTMLElement, signal?: AbortSignal): Promise<void> {\n const cache = new Map<string, Promise<string>>();\n const inline = (url: string): Promise<string> => {\n let pending = cache.get(url);\n if (!pending) {\n pending = inlineResourceUrl(url, signal);\n cache.set(url, pending);\n }\n return pending;\n };\n const elements = [root, ...root.querySelectorAll<HTMLElement | SVGElement>('*')];\n await Promise.all(\n elements.flatMap((element) => {\n const attributeNames = ['src', 'poster', ...(element.localName === 'image' ? ['href'] : [])];\n const attributes = attributeNames\n .map((name) => ({ name, value: element.getAttribute(name) }))\n .filter((entry): entry is { name: string; value: string } => Boolean(entry.value));\n const attributeTasks = attributes.map(async ({ name, value }) => {\n element.setAttribute(name, await inline(value));\n });\n const styleTasks = Array.from({ length: element.style.length }, (_, index) =>\n element.style.item(index),\n )\n .map((property) => ({ property, value: element.style.getPropertyValue(property) }))\n .filter(({ value }) => value.includes('url('))\n .map(async ({ property, value }) => {\n const urls = [...value.matchAll(/url\\([\"']?([^\"')]+)[\"']?\\)/g)].map((match) => match[1]!);\n let next = value;\n for (const url of urls) next = next.replace(url, await inline(url));\n element.style.setProperty(property, next);\n });\n return [...attributeTasks, ...styleTasks];\n }),\n );\n}\n\nasync function serializeSlide(\n slide: HTMLElement,\n naturalWidth: number,\n naturalHeight: number,\n width: number,\n height: number,\n signal?: AbortSignal,\n): Promise<string> {\n const clone = slide.cloneNode(true) as HTMLElement;\n clone.style.transform = 'none';\n clone.style.transformOrigin = 'top left';\n clone.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml');\n\n const sourceCanvases = slide.querySelectorAll('canvas');\n const clonedCanvases = clone.querySelectorAll('canvas');\n sourceCanvases.forEach((canvas, index) => {\n const cloned = clonedCanvases[index];\n if (!cloned) return;\n try {\n const image = document.createElement('img');\n image.src = canvas.toDataURL('image/png');\n image.setAttribute('style', cloned.getAttribute('style') ?? '');\n cloned.replaceWith(image);\n } catch {\n cloned.remove();\n }\n });\n\n await inlineResources(clone, signal);\n\n const content = new XMLSerializer().serializeToString(clone);\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\" viewBox=\"0 0 ${naturalWidth} ${naturalHeight}\"><foreignObject width=\"${naturalWidth}\" height=\"${naturalHeight}\">${content}</foreignObject></svg>`;\n}\n\nasync function abortable<T>(promise: Promise<T>, signal?: AbortSignal): Promise<T> {\n throwIfAborted(signal);\n if (!signal) return promise;\n return new Promise<T>((resolve, reject) => {\n const abort = () => reject(abortedError(signal.reason));\n signal.addEventListener('abort', abort, { once: true });\n void promise.then(\n (value) => {\n signal.removeEventListener('abort', abort);\n resolve(value);\n },\n (error: unknown) => {\n signal.removeEventListener('abort', abort);\n reject(error);\n },\n );\n });\n}\n\nasync function decodeElementImages(root: HTMLElement, signal?: AbortSignal): Promise<void> {\n const images = [...root.querySelectorAll<HTMLImageElement>('img')];\n const svgImages = [...root.querySelectorAll<SVGImageElement>('image')]\n .map((image) => image.href.baseVal || image.getAttribute('href') || '')\n .filter(Boolean);\n await abortable(\n Promise.all([\n ...images.map(async (image) => {\n if (typeof image.decode === 'function') await image.decode().catch(() => undefined);\n }),\n ...svgImages.map(\n (source) =>\n new Promise<void>((resolve) => {\n const image = new Image();\n image.onload = () => resolve();\n image.onerror = () => resolve();\n image.src = source;\n }),\n ),\n ]).then(() => undefined),\n signal,\n );\n}\n\nasync function decodeSvg(svg: string, signal?: AbortSignal): Promise<HTMLImageElement> {\n return abortable(\n new Promise<HTMLImageElement>((resolve, reject) => {\n const image = new Image();\n image.onload = () => resolve(image);\n image.onerror = () => reject(new Error('The rendered slide SVG could not be decoded.'));\n image.src = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`;\n }),\n signal,\n );\n}\n\nfunction canvasToBlob(canvas: HTMLCanvasElement, quality?: number): Promise<Blob> {\n return new Promise((resolve, reject) => {\n canvas.toBlob(\n (blob) => {\n if (blob) resolve(blob);\n else reject(new Error('The browser could not encode the thumbnail.'));\n },\n 'image/png',\n quality,\n );\n });\n}\n\nclass ThumbnailRenderer implements PptxThumbnailRenderer {\n readonly ready: Promise<void>;\n private readonly fontManager: PptxFontManager;\n private readonly queue: RenderQueue;\n private readonly root: HTMLDivElement;\n private readonly viewer: NormalizedPresentationViewer;\n private destroyed = false;\n\n constructor(\n readonly presentation: ParsedPresentation,\n private readonly options: PptxThumbnailRendererOptions,\n ) {\n if (typeof document === 'undefined') {\n throw new PptxViewerError(\n 'unsupported-environment',\n 'Thumbnail rendering requires a browser DOM.',\n );\n }\n const concurrency = Math.max(1, Math.floor(finitePositive(options.concurrency, 2)));\n this.queue = new RenderQueue(concurrency);\n this.root = document.createElement('div');\n this.root.setAttribute('aria-hidden', 'true');\n this.root.style.position = 'fixed';\n this.root.style.left = '-100000px';\n this.root.style.top = '0';\n this.root.style.pointerEvents = 'none';\n this.root.style.opacity = '0';\n document.body.append(this.root);\n this.fontManager = new PptxFontManager(\n {\n loadEmbeddedFonts: false,\n reportMissingFonts: false,\n waitForFonts: false,\n ...options.fonts,\n },\n (warning) => options.onWarning?.(warning),\n );\n this.viewer = new NormalizedPresentationViewer(this.root, presentation.document, {\n onNodeError: (nodeId, error) =>\n options.onWarning?.({\n code: 'degraded-rendering',\n severity: 'warning',\n nodeId,\n feature: 'thumbnail-renderer',\n message: `A slide element could not be rendered: ${\n error instanceof Error ? error.message : String(error)\n }`,\n }),\n });\n const startedAt = performanceNow();\n this.ready = this.fontManager.prepare(presentation.document).then(() => {\n this.report(performanceMeasurement('embedded-font-preparation', startedAt));\n });\n }\n\n renderSlide(\n slideIndex: number,\n options: PptxThumbnailRenderOptions & { output: 'canvas' },\n ): Promise<PptxThumbnailRenderResult<HTMLCanvasElement>>;\n renderSlide(\n slideIndex: number,\n options: PptxThumbnailRenderOptions & { output: 'imageBitmap' },\n ): Promise<PptxThumbnailRenderResult<ImageBitmap>>;\n renderSlide(\n slideIndex: number,\n options: PptxThumbnailRenderOptions & { output: 'svg' },\n ): Promise<PptxThumbnailRenderResult<string>>;\n renderSlide(\n slideIndex: number,\n options?: PptxThumbnailRenderOptions & { output?: 'blob' },\n ): Promise<PptxThumbnailRenderResult<Blob>>;\n renderSlide(\n slideIndex: number,\n options: PptxThumbnailRenderOptions,\n ): Promise<PptxThumbnailRenderResult<ThumbnailData>>;\n async renderSlide(\n slideIndex: number,\n options: PptxThumbnailRenderOptions = {},\n ): Promise<PptxThumbnailRenderResult<ThumbnailData>> {\n const release = await this.queue.acquire(options.signal);\n try {\n this.assertAvailable(options.signal);\n await abortable(this.ready, options.signal);\n this.assertAvailable(options.signal);\n if (\n !Number.isInteger(slideIndex) ||\n slideIndex < 0 ||\n slideIndex >= this.presentation.document.slides.length\n ) {\n throw new RangeError(`Slide ${slideIndex} does not exist.`);\n }\n\n const measurements: PptxPerformanceMeasurement[] = [];\n const size = outputSize(this.presentation, options);\n const target = document.createElement('div');\n this.root.append(target);\n const domStartedAt = performanceNow();\n const handle = this.viewer.renderThumbnailToContainer(slideIndex, target, {\n width: size.naturalWidth,\n });\n try {\n await abortable(handle.ready, options.signal);\n this.fontManager.applyTo(handle.element, slideIndex);\n const domDurationMs = performanceNow() - domStartedAt;\n\n const decodeStartedAt = performanceNow();\n await decodeElementImages(handle.element, options.signal);\n let decodeDurationMs = performanceNow() - decodeStartedAt;\n const serializationStartedAt = performanceNow();\n const svg = await serializeSlide(\n handle.element,\n size.naturalWidth,\n size.naturalHeight,\n size.width,\n size.height,\n options.signal,\n );\n this.record(\n {\n durationMs: Math.max(0, domDurationMs + performanceNow() - serializationStartedAt),\n phase: 'slide-dom-svg-rendering',\n slideIndex,\n },\n measurements,\n );\n const output = options.output ?? 'blob';\n if (output === 'svg') {\n this.record(\n { durationMs: Math.max(0, decodeDurationMs), phase: 'image-decoding', slideIndex },\n measurements,\n );\n return this.result(svg, output, slideIndex, size, measurements);\n }\n\n const svgDecodeStartedAt = performanceNow();\n const image = await decodeSvg(svg, options.signal);\n decodeDurationMs += performanceNow() - svgDecodeStartedAt;\n this.record(\n { durationMs: Math.max(0, decodeDurationMs), phase: 'image-decoding', slideIndex },\n measurements,\n );\n this.assertAvailable(options.signal);\n const encodeStartedAt = performanceNow();\n const pixelRatio = finitePositive(options.pixelRatio, 1);\n const canvas = document.createElement('canvas');\n canvas.width = Math.max(1, Math.round(size.width * pixelRatio));\n canvas.height = Math.max(1, Math.round(size.height * pixelRatio));\n canvas.style.width = `${size.width}px`;\n canvas.style.height = `${size.height}px`;\n const context = canvas.getContext('2d');\n if (!context) throw new Error('The browser does not provide a 2D canvas renderer.');\n context.drawImage(image, 0, 0, canvas.width, canvas.height);\n\n let data: Blob | HTMLCanvasElement | ImageBitmap;\n if (output === 'canvas') data = canvas;\n else if (output === 'imageBitmap') {\n if (typeof createImageBitmap !== 'function') {\n throw new PptxViewerError(\n 'unsupported-environment',\n 'ImageBitmap output is not supported by this browser.',\n );\n }\n data = await abortable(createImageBitmap(canvas), options.signal);\n } else data = await abortable(canvasToBlob(canvas, options.quality), options.signal);\n this.measure('raster-encoding', encodeStartedAt, slideIndex, measurements);\n return this.result(data, output, slideIndex, size, measurements);\n } finally {\n handle.dispose();\n target.remove();\n }\n } finally {\n release();\n }\n }\n\n renderSlides(\n slideIndexes: readonly number[],\n options: PptxThumbnailRenderOptions = {},\n ): Promise<PptxThumbnailRenderResult<ThumbnailData>[]> {\n return Promise.all(slideIndexes.map((slideIndex) => this.renderDynamic(slideIndex, options)));\n }\n\n destroy(): void {\n if (this.destroyed) return;\n this.destroyed = true;\n this.queue.destroy();\n this.viewer.destroy();\n this.fontManager.destroy();\n this.root.remove();\n }\n\n private renderDynamic(\n slideIndex: number,\n options: PptxThumbnailRenderOptions,\n ): Promise<PptxThumbnailRenderResult<ThumbnailData>> {\n return this.renderSlide(slideIndex, options);\n }\n\n private assertAvailable(signal?: AbortSignal): void {\n throwIfAborted(signal);\n if (this.destroyed) throw abortedError();\n }\n\n private measure(\n phase: PptxPerformanceMeasurement['phase'],\n startedAt: number,\n slideIndex: number,\n measurements: PptxPerformanceMeasurement[],\n ): void {\n this.record(performanceMeasurement(phase, startedAt, slideIndex), measurements);\n }\n\n private record(\n measurement: PptxPerformanceMeasurement,\n measurements: PptxPerformanceMeasurement[],\n ): void {\n measurements.push(measurement);\n this.report(measurement);\n }\n\n private report(measurement: PptxPerformanceMeasurement): void {\n this.options.onPerformanceMeasurement?.(measurement);\n }\n\n private result<T extends ThumbnailData>(\n data: T,\n output: PptxThumbnailRenderResult<T>['output'],\n slideIndex: number,\n size: { height: number; width: number },\n measurements: PptxPerformanceMeasurement[],\n ): PptxThumbnailRenderResult<T> {\n return {\n data,\n height: size.height,\n measurements,\n output,\n slideIndex,\n width: size.width,\n };\n }\n}\n\nexport function createPptxThumbnailRenderer(\n presentation: ParsedPresentation,\n options: PptxThumbnailRendererOptions = {},\n): PptxThumbnailRenderer {\n return new ThumbnailRenderer(presentation, options);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/@tanstack+virtual-core@3.17.4/node_modules/@tanstack/virtual-core/src/lazy-measurements.ts","../../../node_modules/.pnpm/@tanstack+virtual-core@3.17.4/node_modules/@tanstack/virtual-core/src/utils.ts","../../../node_modules/.pnpm/@tanstack+virtual-core@3.17.4/node_modules/@tanstack/virtual-core/src/index.ts","../../../node_modules/.pnpm/@tanstack+react-virtual@3.14.6_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-virtual/src/index.tsx","../src/errors.ts","../../../node_modules/.pnpm/@extend-ai+office-fonts@https+++github.com+extend-hq+rust-office+releases+download+office-fon_7r4y6vimjxvcmpreabk5ezevri/node_modules/@extend-ai/office-fonts/families.js","../../../node_modules/.pnpm/@extend-ai+office-fonts@https+++github.com+extend-hq+rust-office+releases+download+office-fon_7r4y6vimjxvcmpreabk5ezevri/node_modules/@extend-ai/office-fonts/runtime.js","../src/fonts.ts","../src/chart-svg.ts","../src/metafile-renderer.ts","../src/zoom.ts","../src/normalized-viewer.ts","../src/wasm.ts","../src/performance.ts","../src/parse.ts","../src/ReactPptxViewer.tsx","../src/hooks.ts","../src/thumbnails.ts","../src/thumbnail-renderer.ts"],"names":["opts","key","startIndex","endIndex","instance","face","families","fontFamily","primary","document","pending","timeout","placeholders","state","result","isPresentationDocument","maximum","useRef","useEffect","ReactPptxViewer","useState","useCallback","EMU_PER_CSS_PIXEL","DEFAULT_MAX_DIMENSION","finitePositive","useMemo"],"mappings":"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","file":"index.js","sourcesContent":["// Lazy materialization for the lanes===1 fast path. Backed by a\n// Float64Array (stride 2: start, size, …); VirtualItems are constructed on\n// first indexed read and cached. Saves the per-item object allocation at\n// large list counts where most items are never visible.\n\nimport type { VirtualItem } from './index'\n\ntype Key = number | string | bigint\n\nexport function createLazyMeasurementsView(\n count: number,\n flat: Float64Array,\n getItemKey: (i: number) => Key,\n): Array<VirtualItem> {\n const cache: Array<VirtualItem | undefined> = new Array(count)\n return new Proxy(cache as any, {\n get(target, prop, receiver) {\n if (typeof prop === 'string') {\n // Cheap digit-prefix sniff before number coerce.\n const c = prop.charCodeAt(0)\n if (c >= 48 && c <= 57) {\n const i = +prop\n if (Number.isInteger(i) && i >= 0 && i < count) {\n let v = target[i]\n if (!v) {\n const s = flat[i * 2]!\n v = target[i] = {\n index: i,\n key: getItemKey(i),\n start: s,\n size: flat[i * 2 + 1]!,\n end: s + flat[i * 2 + 1]!,\n lane: 0,\n }\n }\n return v\n }\n }\n if (prop === 'length') return count\n }\n return Reflect.get(target, prop, receiver)\n },\n }) as Array<VirtualItem>\n}\n","export type NoInfer<A extends any> = [A][A extends any ? 0 : never]\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport function memo<TDeps extends ReadonlyArray<any>, TResult>(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: false | string\n debug?: () => boolean\n onChange?: (result: TResult) => void\n initialDeps?: TDeps\n skipInitialOnChange?: boolean\n },\n) {\n let deps = opts.initialDeps ?? []\n let result: TResult | undefined\n let isInitial = true\n\n function memoizedFunction(): TResult {\n // Debug-only timing. In production builds, `process.env.NODE_ENV !==\n // 'production'` is constant-folded to `false` by downstream minifiers\n // (Terser/esbuild/swc with `define`), which DCEs the entire block.\n const debugEnabled =\n process.env.NODE_ENV !== 'production' && !!opts.key && !!opts.debug?.()\n let depTime = 0\n if (debugEnabled) depTime = Date.now()\n\n const newDeps = getDeps()\n\n const depsChanged =\n newDeps.length !== deps.length ||\n newDeps.some((dep: any, index: number) => deps[index] !== dep)\n\n if (!depsChanged) {\n return result!\n }\n\n deps = newDeps\n\n let resultTime = 0\n if (debugEnabled) resultTime = Date.now()\n\n result = fn(...newDeps)\n\n if (debugEnabled) {\n const depEndTime = Math.round((Date.now() - depTime) * 100) / 100\n const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100\n const resultFpsPercentage = resultEndTime / 16\n\n const pad = (str: number | string, num: number) => {\n str = String(str)\n while (str.length < num) {\n str = ' ' + str\n }\n return str\n }\n\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120),\n )}deg 100% 31%);`,\n opts?.key,\n )\n }\n\n if (opts?.onChange && !(isInitial && opts.skipInitialOnChange)) {\n opts.onChange(result)\n }\n\n isInitial = false\n\n return result\n }\n\n // Attach updateDeps to the function itself\n memoizedFunction.updateDeps = (newDeps: [...TDeps]) => {\n deps = newDeps\n }\n\n return memoizedFunction\n}\n\nexport function notUndefined<T>(value: T | undefined, msg?: string): T {\n if (value === undefined) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : ''}`)\n } else {\n return value\n }\n}\n\nexport const approxEqual = (a: number, b: number) => Math.abs(a - b) < 1.01\n\nexport const debounce = (\n targetWindow: Window & typeof globalThis,\n fn: Function,\n ms: number,\n) => {\n let timeoutId: number\n return function (this: any, ...args: Array<any>) {\n targetWindow.clearTimeout(timeoutId)\n timeoutId = targetWindow.setTimeout(() => fn.apply(this, args), ms)\n }\n}\n","import { createLazyMeasurementsView } from './lazy-measurements'\nimport { approxEqual, debounce, memo, notUndefined } from './utils'\n\n// Browser-aware iOS detection. Programmatic `scrollTo`/`scrollTop` writes\n// during a momentum-scroll cancel the momentum on iOS WebKit, so we defer\n// scroll-position adjustments triggered by mid-scroll resizes until the\n// scroll settles. SSR-safe (returns false when navigator is unavailable).\nlet _isIOSResult: boolean | undefined\nconst isIOSWebKit = (): boolean => {\n if (_isIOSResult !== undefined) return _isIOSResult\n if (typeof navigator === 'undefined') return (_isIOSResult = false)\n if (/iP(hone|od|ad)/.test(navigator.userAgent)) return (_isIOSResult = true)\n // iPadOS 13+ reports as MacIntel; touch-points distinguishes it from desktop.\n const mtp = (navigator as Navigator & { maxTouchPoints?: number })\n .maxTouchPoints\n return (_isIOSResult =\n navigator.platform === 'MacIntel' && mtp !== undefined && mtp > 0)\n}\n\n// Test hook: reset the iOS detection cache. Not exported.\nexport const _resetIOSDetectionForTests = () => {\n _isIOSResult = undefined\n}\n\nexport { approxEqual, debounce, memo, notUndefined } from './utils'\nexport type { NoInfer, PartialKeys } from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth' | 'instant'\n\ntype ScrollAnchor = 'start' | 'end'\n\ntype FollowOnAppend = boolean | ScrollBehavior\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\ntype ScrollToEndOptions = Pick<ScrollToOptions, 'behavior'>\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string | bigint\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n lane: number\n}\n\nexport interface Rect {\n width: number\n height: number\n}\n\n//\n\nconst getRect = (element: HTMLElement): Rect => {\n const { offsetWidth, offsetHeight } = element\n return { width: offsetWidth, height: offsetHeight }\n}\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n const len = end - start + 1\n\n const arr = new Array<number>(len)\n for (let i = 0; i < len; i++) {\n arr[i] = start + i\n }\n return arr\n}\n\nexport const observeElementRect = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n const targetWindow = instance.targetWindow\n if (!targetWindow) {\n return\n }\n\n const handler = (rect: Rect) => {\n const { width, height } = rect\n cb({ width: Math.round(width), height: Math.round(height) })\n }\n\n handler(getRect(element as unknown as HTMLElement))\n\n if (!targetWindow.ResizeObserver) {\n return () => {}\n }\n\n const observer = new targetWindow.ResizeObserver((entries) => {\n const run = () => {\n const entry = entries[0]\n if (entry?.borderBoxSize) {\n const box = entry.borderBoxSize[0]\n if (box) {\n handler({ width: box.inlineSize, height: box.blockSize })\n return\n }\n }\n handler(getRect(element as unknown as HTMLElement))\n }\n\n instance.options.useAnimationFrameWithResizeObserver\n ? requestAnimationFrame(run)\n : run()\n })\n\n observer.observe(element, { box: 'border-box' })\n\n return () => {\n observer.unobserve(element)\n }\n}\n\nconst addEventListenerOptions = {\n passive: true,\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<Window, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight })\n }\n handler()\n\n element.addEventListener('resize', handler, addEventListenerOptions)\n\n return () => {\n element.removeEventListener('resize', handler)\n }\n}\n\nconst supportsScrollend =\n typeof window == 'undefined' ? true : 'onscrollend' in window\n\ntype ObserveOffsetCallBack = (offset: number, isScrolling: boolean) => void\n\n// Shared core: both element and window variants attach scroll/scrollend\n// listeners with the same lifecycle; they only differ in how to read the\n// current offset from the scroll target.\nconst observeOffset = <T extends Element | Window>(\n instance: Virtualizer<T, any>,\n cb: ObserveOffsetCallBack,\n readOffset: (target: T) => number,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n const targetWindow = instance.targetWindow\n if (!targetWindow) {\n return\n }\n\n const registerScrollendEvent =\n instance.options.useScrollendEvent && supportsScrollend\n\n let offset = 0\n const fallback = registerScrollendEvent\n ? null\n : debounce(\n targetWindow,\n () => cb(offset, false),\n instance.options.isScrollingResetDelay,\n )\n\n const createHandler = (isScrolling: boolean) => () => {\n offset = readOffset(element)\n fallback?.()\n cb(offset, isScrolling)\n }\n const handler = createHandler(true)\n const endHandler = createHandler(false)\n\n element.addEventListener('scroll', handler, addEventListenerOptions)\n if (registerScrollendEvent) {\n element.addEventListener('scrollend', endHandler, addEventListenerOptions)\n }\n return () => {\n element.removeEventListener('scroll', handler)\n if (registerScrollendEvent) {\n element.removeEventListener('scrollend', endHandler)\n }\n }\n}\n\nexport const observeElementOffset = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: ObserveOffsetCallBack,\n) =>\n observeOffset(instance, cb, (el) => {\n const { horizontal, isRtl } = instance.options\n return horizontal ? el.scrollLeft * ((isRtl && -1) || 1) : el.scrollTop\n })\n\nexport const observeWindowOffset = (\n instance: Virtualizer<Window, any>,\n cb: ObserveOffsetCallBack,\n) =>\n observeOffset(instance, cb, (win) =>\n instance.options.horizontal ? win.scrollX : win.scrollY,\n )\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<any, TItemElement>,\n) => {\n // When useCachedMeasurements is enabled, return the cached size\n // (or estimateSize as fallback) instead of measuring the DOM.\n if (instance.options.useCachedMeasurements) {\n const index = instance.indexFromElement(element)\n const key = instance.options.getItemKey(index)\n return (\n instance.itemSizeCache.get(key) ?? instance.options.estimateSize(index)\n )\n }\n\n if (entry?.borderBoxSize) {\n const box = entry.borderBoxSize[0]\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? 'inlineSize' : 'blockSize'],\n )\n return size\n }\n }\n\n // When called without a ResizeObserverEntry (sync measurement path),\n // return the previously measured size if available. This avoids a\n // synchronous layout read (offsetWidth/offsetHeight) on re-renders.\n // The ResizeObserver is already observing the element and will deliver\n // the accurate size asynchronously if it changed.\n // Users who need synchronous DOM reads can provide a custom measureElement.\n if (!entry) {\n const index = instance.indexFromElement(element)\n const key = instance.options.getItemKey(index)\n const cachedSize = instance.itemSizeCache.get(key)\n if (cachedSize !== undefined) {\n return cachedSize\n }\n }\n\n return (element as unknown as HTMLElement)[\n instance.options.horizontal ? 'offsetWidth' : 'offsetHeight'\n ]\n}\n\nconst scrollWithAdjustments = (\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<any, any>,\n) => {\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: offset + adjustments,\n behavior,\n })\n}\n\nexport const windowScroll: <T extends Window>(\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => void = scrollWithAdjustments\n\nexport const elementScroll: <T extends Element>(\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => void = scrollWithAdjustments\n\ntype LaneAssignmentMode = 'estimate' | 'measured'\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: ObserveOffsetCallBack,\n ) => void | (() => void)\n // Optional\n debug?: boolean\n initialRect?: Rect\n onChange?: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n sync: boolean,\n ) => void\n measureElement?: (\n element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number | (() => number)\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => Array<number>\n scrollMargin?: number\n gap?: number\n indexAttribute?: string\n initialMeasurementsCache?: Array<VirtualItem>\n lanes?: number\n anchorTo?: ScrollAnchor\n followOnAppend?: FollowOnAppend\n scrollEndThreshold?: number\n isScrollingResetDelay?: number\n useScrollendEvent?: boolean\n enabled?: boolean\n isRtl?: boolean\n useAnimationFrameWithResizeObserver?: boolean\n laneAssignmentMode?: LaneAssignmentMode\n useCachedMeasurements?: boolean\n}\n\ntype ScrollState = {\n // what we want\n index: number | null\n align: ScrollAlignment\n behavior: ScrollBehavior\n\n // lifecycle\n startedAt: number\n\n // target tracking\n lastTargetOffset: number\n\n // settling\n stableFrames: number\n}\n\ntype PendingScrollAnchor = [\n key: Key | null,\n offset: number,\n followOnAppend: ScrollBehavior | null,\n anchorDelta: number,\n]\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: Array<void | (() => void)> = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n targetWindow: (Window & typeof globalThis) | null = null\n isScrolling = false\n private scrollState: ScrollState | null = null\n measurementsCache: Array<VirtualItem> = []\n // Flat backing store for the lanes===1 fast path: [start_0, size_0, start_1, size_1, ...].\n // null until the first single-lane build; reused (and grown) across rebuilds.\n private _flatMeasurements: Float64Array | null = null\n itemSizeCache = new Map<Key, number>()\n private itemSizeCacheVersion = 0\n private laneAssignments = new Map<number, number>() // index → lane cache\n // Earliest index dirtied since last getMeasurements() rebuild, or null.\n private pendingMin: number | null = null\n private prevLanes: number | undefined = undefined\n private lanesChangedFlag = false\n private lanesSettling = false\n private pendingScrollAnchor: PendingScrollAnchor | null = null\n scrollRect: Rect | null = null\n scrollOffset: number | null = null\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments = 0\n // Sum of size-change deltas above-viewport that were skipped during\n // iOS momentum scroll (writing scrollTop mid-momentum cancels it).\n // Flushed in a single scrollTo when iOS is fully settled.\n private _iosDeferredAdjustment = 0\n // Touch state. iOS WebKit cancels momentum when scrollTop is written, so\n // we defer adjustments not only during `isScrolling` but also through the\n // touchstart→touchend window (active drag) and a short tail after\n // touchend (early-momentum window — iOS only fires touch events once at\n // the start of momentum, so we use a timer rather than another event).\n private _iosTouching = false\n private _iosJustTouchEnded = false\n private _iosTouchEndTimerId: number | null = null\n // Subpixel reconciliation. Safari (and Chrome/Firefox under certain DPRs)\n // round scrollTop/scrollLeft writes to integer pixels. If we wrote 12345.5\n // but the browser reports back 12346, the next reconcileScroll sees a\n // \"target changed\" and re-fires scrollTo — a feedback loop that the\n // approxEqual(<1.01) tolerance otherwise absorbs as a workaround.\n // By remembering the intended value of our most-recent self-driven\n // scrollTo, we can match the browser's rounded read back to the intended\n // value when the diff is < 1.5 px, distinguishing it from a real user\n // scroll. The +0.5 over Math.abs lets us also absorb the +1 / -1 cases.\n private _intendedScrollOffset: number | null = null\n shouldAdjustScrollPositionOnItemSizeChange:\n | undefined\n | ((\n item: VirtualItem,\n delta: number,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => boolean)\n elementsCache = new Map<Key, TItemElement>()\n private now = () => this.targetWindow?.performance?.now?.() ?? Date.now()\n private observer = (() => {\n let _ro: ResizeObserver | null = null\n\n const get = () => {\n if (_ro) {\n return _ro\n }\n\n if (!this.targetWindow || !this.targetWindow.ResizeObserver) {\n return null\n }\n\n return (_ro = new this.targetWindow.ResizeObserver((entries) => {\n entries.forEach((entry) => {\n const run = () => {\n const node = entry.target as TItemElement\n const index = this.indexFromElement(node)\n\n if (!node.isConnected) {\n this.observer.unobserve(node)\n // Find the cache entry pointing to this exact node and remove\n // it. We can't call getItemKey(index) here because items may\n // have been removed since this node was rendered — the index\n // could be stale and out-of-bounds in the user's data array\n // (regression test in e2e/.../stale-index.spec.ts, fix #1148).\n // The === comparison naturally handles the React-replaced-\n // a-node-for-the-same-key case: that entry now points to a\n // different node, so this loop won't match.\n for (const [cacheKey, cachedNode] of this.elementsCache) {\n if (cachedNode === node) {\n this.elementsCache.delete(cacheKey)\n break\n }\n }\n return\n }\n\n if (this.shouldMeasureDuringScroll(index)) {\n this.resizeItem(\n index,\n this.options.measureElement(node, entry, this),\n )\n }\n }\n this.options.useAnimationFrameWithResizeObserver\n ? requestAnimationFrame(run)\n : run()\n })\n }))\n }\n\n return {\n disconnect: () => {\n get()?.disconnect()\n _ro = null\n },\n observe: (target: Element) =>\n get()?.observe(target, { box: 'border-box' }),\n unobserve: (target: Element) => get()?.unobserve(target),\n }\n })()\n range: { startIndex: number; endIndex: number } | null = null\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n // Skip `{...defaults, ...opts}` because explicit `undefined` values in\n // opts would override defaults with `undefined`.\n const merged = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n gap: 0,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\n lanes: 1,\n anchorTo: 'start',\n followOnAppend: false,\n scrollEndThreshold: 1,\n isScrollingResetDelay: 150,\n enabled: true,\n isRtl: false,\n useScrollendEvent: false,\n useAnimationFrameWithResizeObserver: false,\n laneAssignmentMode: 'estimate',\n useCachedMeasurements: false,\n } as unknown as Required<VirtualizerOptions<TScrollElement, TItemElement>>\n\n for (const key in opts) {\n const v = (opts as any)[key]\n if (v !== undefined) (merged as any)[key] = v\n }\n\n const prevOptions = this.options as\n | Required<VirtualizerOptions<TScrollElement, TItemElement>>\n | undefined\n let anchor: [Key, number] | null = null\n let followOnAppend: ScrollBehavior | null = null\n let edgeKeysChanged = false\n\n if (\n prevOptions !== undefined &&\n prevOptions.enabled &&\n merged.enabled &&\n merged.anchorTo === 'end' &&\n this.scrollElement !== null\n ) {\n const prevCount = prevOptions.count\n const nextCount = merged.count\n const measurements = this.getMeasurements()\n const prevFirstKey =\n prevCount > 0\n ? (measurements[0]?.key ?? prevOptions.getItemKey(0))\n : null\n const prevLastKey =\n prevCount > 0\n ? (measurements[prevCount - 1]?.key ??\n prevOptions.getItemKey(prevCount - 1))\n : null\n const didCountChange = nextCount !== prevCount\n const didEdgeKeysChange =\n didCountChange ||\n (prevCount > 0 &&\n nextCount > 0 &&\n (merged.getItemKey(0) !== prevFirstKey ||\n merged.getItemKey(nextCount - 1) !== prevLastKey))\n\n if (didEdgeKeysChange) {\n edgeKeysChanged = true\n const item =\n prevCount > 0\n ? (this.getVirtualItemForOffset(this.getScrollOffset()) ??\n measurements[0])\n : null\n\n if (item) {\n anchor = [item.key, this.getScrollOffset() - item.start]\n }\n\n const behavior =\n merged.followOnAppend === true\n ? 'auto'\n : merged.followOnAppend || null\n\n if (\n behavior &&\n nextCount > prevCount &&\n this.isAtEnd(prevOptions.scrollEndThreshold) &&\n (prevCount === 0 || merged.getItemKey(nextCount - 1) !== prevLastKey)\n ) {\n followOnAppend = behavior\n }\n }\n }\n\n this.options = merged\n\n // When edge keys changed (prepend, trim, reorder, etc.) the key→index\n // mapping has shifted. Force a full measurement rebuild so the anchor\n // resolution below reads positions from the new layout, not the stale\n // memoised cache. Without this, a stable `getItemKey` reference +\n // unchanged `count` would let getMeasurements() return the old layout.\n if (edgeKeysChanged) {\n this.pendingMin = 0\n this.itemSizeCacheVersion++\n }\n\n // Eagerly adjust scrollOffset so the virtualizer computes the correct\n // visible range during the current render pass — before _willUpdate\n // syncs the DOM scroll position in a layout effect. Without this,\n // the virtualizer would render the wrong items for one frame (the\n // estimate-based positions are stale) and then correct in the next\n // frame, producing a visible \"jump\" on prepend with dynamic sizes.\n let anchorResolved = false\n let anchorDelta = 0\n if (anchor && this.scrollOffset !== null) {\n const [anchorKey, anchorOffset] = anchor\n const newMeasurements = this.getMeasurements()\n const { count, getItemKey } = this.options\n let idx = 0\n while (idx < count && getItemKey(idx) !== anchorKey) {\n idx++\n }\n if (idx < count) {\n const anchorItem = newMeasurements[idx]\n if (anchorItem) {\n const newOffset = anchorItem.start + anchorOffset\n if (newOffset !== this.scrollOffset) {\n anchorDelta = newOffset - this.scrollOffset\n this.scrollOffset = newOffset\n anchorResolved = true\n }\n }\n }\n }\n\n if (anchorResolved || followOnAppend) {\n this.pendingScrollAnchor = [\n anchorResolved ? anchor![0] : null,\n anchorResolved ? anchor![1] : 0,\n followOnAppend,\n anchorDelta,\n ]\n }\n }\n\n private notify = (sync: boolean) => {\n this.options.onChange?.(this, sync)\n }\n\n private applyScrollAdjustment(delta: number, behavior?: ScrollBehavior) {\n if (delta === 0) return\n\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n if (\n isIOSWebKit() &&\n (this.isScrolling || this._iosTouching || this._iosJustTouchEnded)\n ) {\n this._iosDeferredAdjustment += delta\n } else {\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: (this.scrollAdjustments += delta),\n behavior,\n })\n // Eagerly carry the intended target in `scrollOffset` so callers that\n // read it before the next scroll event — notably the next `resizeItem`\n // tick's `getVirtualDistanceFromEnd()` / `wasAtEnd` check — see the\n // post-adjustment position even when the DOM `scrollTop` write was\n // clamped because the consumer hasn't grown the sizer yet (`notify()`\n // runs after this in `resizeItem`). Same idea as the eager\n // `scrollOffset` adjustment for prepend in `setOptions` (#1176). The\n // adjustment is now baked into `scrollOffset`, so zero\n // `scrollAdjustments` to keep their sum invariant.\n if (this.scrollOffset !== null) {\n this.scrollOffset += this.scrollAdjustments\n this.scrollAdjustments = 0\n }\n }\n }\n\n private maybeNotify = memo(\n () => {\n this.calculateRange()\n\n return [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null,\n ]\n },\n (isScrolling) => {\n this.notify(isScrolling)\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'maybeNotify',\n debug: () => this.options.debug,\n initialDeps: [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null,\n ] as [boolean, number | null, number | null],\n },\n )\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.observer.disconnect()\n if (this.rafId != null && this.targetWindow) {\n this.targetWindow.cancelAnimationFrame(this.rafId)\n this.rafId = null\n }\n this.scrollState = null\n // The iOS gesture/deferral state is scoped to the current scroll\n // element: the touch listeners that maintain it were just removed, and\n // an in-flight touch keeps targeting the old element (implicit touch\n // capture), so the new element never reports it. Carrying the state\n // over would replay a stale deferred delta on the new element's first\n // flush, and a cleanup that lands mid-touch or inside the post-touchend\n // grace window would strand _iosTouching / _iosJustTouchEnded as true\n // (the listener unsub clears the grace timer, and with it the only\n // pending reset of the flag), deferring every adjustment on the new\n // element until its next touch cycle.\n this._iosDeferredAdjustment = 0\n this._iosTouching = false\n this._iosJustTouchEnded = false\n this.scrollElement = null\n this.targetWindow = null\n }\n\n _didMount = () => {\n return () => {\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n const scrollElement = this.options.enabled\n ? this.options.getScrollElement()\n : null\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n if (!scrollElement) {\n this.maybeNotify()\n return\n }\n\n this.scrollElement = scrollElement\n\n if (this.scrollElement && 'ownerDocument' in this.scrollElement) {\n this.targetWindow = this.scrollElement.ownerDocument.defaultView\n } else {\n this.targetWindow = this.scrollElement?.window ?? null\n }\n\n this.elementsCache.forEach((cached) => {\n this.observer.observe(cached)\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.maybeNotify()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset, isScrolling) => {\n // A scroll event that reports movement but lands on the offset we\n // already hold — and isn't a self-write read-back — is a spurious\n // no-op re-emit that Safari/Firefox fire after a re-render's layout\n // (Chrome doesn't). Treating it as scrolling re-arms `isScrolling`,\n // which forces a render that triggers another such event: an\n // infinite re-render loop. Ignore it. (Self-writes are handled by\n // the `_intendedScrollOffset` reconciliation just below.)\n if (\n isScrolling &&\n this._intendedScrollOffset === null &&\n offset === this.scrollOffset\n ) {\n return\n }\n\n // If this scroll event looks like the browser's read-back of a\n // value we just wrote, prefer our intended (sub-pixel-accurate)\n // value over the browser's rounded one. The 1.5 px tolerance is\n // tight enough to avoid mistaking a real user scroll for a\n // self-write — by the time the user has moved 1.5 px, the\n // intended value will already have been consumed by a prior\n // scroll event and cleared.\n if (\n this._intendedScrollOffset !== null &&\n Math.abs(offset - this._intendedScrollOffset) < 1.5\n ) {\n offset = this._intendedScrollOffset\n }\n this._intendedScrollOffset = null\n\n this.scrollAdjustments = 0\n // If the offset hasn't moved, this is the echo of our own\n // adjustment write — `applyScrollAdjustment` already folded it\n // into `scrollOffset`. There's no direction to infer, so leave\n // it alone; a real gesture always moves the offset.\n const prevOffset = this.getScrollOffset()\n this.scrollDirection = isScrolling\n ? prevOffset === offset\n ? this.scrollDirection\n : prevOffset < offset\n ? 'forward'\n : 'backward'\n : null\n this.scrollOffset = offset\n this.isScrolling = isScrolling\n\n // Flush deferred iOS adjustments if we're now fully settled.\n // \"Fully settled\" means: not actively scrolling, no finger on\n // screen, and the post-touchend grace window has expired.\n this._flushIosDeferredIfReady()\n\n if (this.scrollState) {\n this.scheduleScrollReconcile()\n }\n this.maybeNotify()\n }),\n )\n\n // Touch event listeners (iOS-aware deferral). We attach unconditionally\n // — the listeners are passive and cheap; on non-touch devices they\n // simply never fire. The gating by isIOSWebKit() lives in resizeItem\n // and _flushIosDeferredIfReady so we only burn the path on iOS.\n if ('addEventListener' in this.scrollElement) {\n const scrollEl = this.scrollElement as unknown as EventTarget\n const onTouchStart = () => {\n this._iosTouching = true\n this._iosJustTouchEnded = false\n if (this._iosTouchEndTimerId !== null && this.targetWindow != null) {\n this.targetWindow.clearTimeout(this._iosTouchEndTimerId)\n this._iosTouchEndTimerId = null\n }\n }\n const onTouchEnd = () => {\n this._iosTouching = false\n if (!isIOSWebKit() || this.targetWindow == null) {\n // Non-iOS: nothing more to track. Just clear the touching flag.\n return\n }\n this._iosJustTouchEnded = true\n // After ~150 ms with no scroll/touch events, momentum is done.\n this._iosTouchEndTimerId = this.targetWindow.setTimeout(() => {\n this._iosJustTouchEnded = false\n this._iosTouchEndTimerId = null\n // After the grace window, attempt to flush. The scroll event\n // for momentum decay may have already fired before our timer.\n this._flushIosDeferredIfReady()\n }, 150)\n }\n scrollEl.addEventListener(\n 'touchstart',\n onTouchStart,\n addEventListenerOptions,\n )\n scrollEl.addEventListener(\n 'touchend',\n onTouchEnd,\n addEventListenerOptions,\n )\n this.unsubs.push(() => {\n scrollEl.removeEventListener('touchstart', onTouchStart)\n scrollEl.removeEventListener('touchend', onTouchEnd)\n if (this._iosTouchEndTimerId !== null && this.targetWindow != null) {\n this.targetWindow.clearTimeout(this._iosTouchEndTimerId)\n this._iosTouchEndTimerId = null\n }\n })\n }\n\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: undefined,\n behavior: undefined,\n })\n }\n\n const anchor = this.pendingScrollAnchor\n this.pendingScrollAnchor = null\n\n if (anchor && this.scrollElement && this.options.enabled) {\n const [key, _offset, followOnAppend, anchorDelta] = anchor\n\n if (key !== null && !followOnAppend) {\n // scrollOffset was eagerly adjusted in setOptions so the\n // virtualizer already computed the correct range during render.\n // Now sync the browser's actual scroll position to match.\n // Skip when followOnAppend is set — scrollToEnd will handle it.\n //\n // On iOS WebKit, writing scrollTop during touch/momentum cancels\n // the in-flight scroll. Defer the DOM sync the same way\n // applyScrollAdjustment does — accumulate the delta and let\n // _flushIosDeferredIfReady handle it once the scroll settles.\n if (\n isIOSWebKit() &&\n (this.isScrolling || this._iosTouching || this._iosJustTouchEnded)\n ) {\n if (anchorDelta !== 0) {\n this._iosDeferredAdjustment += anchorDelta\n }\n } else {\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: undefined,\n behavior: undefined,\n })\n }\n }\n\n if (followOnAppend) {\n this.scrollToEnd({ behavior: followOnAppend })\n }\n }\n }\n\n // Apply any accumulated iOS-deferred scroll adjustment, but only when we're\n // truly settled — not actively scrolling, not under an active touch, and\n // past the post-touchend grace window. Called from the scroll callback\n // and the touchend grace-timer.\n private _flushIosDeferredIfReady = () => {\n if (this._iosDeferredAdjustment === 0) return\n if (this.isScrolling) return\n if (this._iosTouching) return\n if (this._iosJustTouchEnded) return\n // Phase 2b: Safari elastic-overscroll (rubber-band) lets scrollTop go\n // negative or beyond scrollHeight - clientHeight. Writing scrollTop\n // while in that zone snaps the page back to the clamped value at the\n // end of the bounce, often discarding the user's intent. Skip the\n // flush; the next in-bounds scroll event will retry.\n const cur = this.getScrollOffset()\n const max = this.getMaxScrollOffset()\n if (cur < 0 || cur > max) return\n const delta = this._iosDeferredAdjustment\n this._iosDeferredAdjustment = 0\n // Roll the deferred delta into the running accumulator so any resize\n // landing between now and the resulting scroll event computes from the\n // post-flush offset rather than the stale one.\n this._scrollToOffset(cur, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n private rafId: number | null = null\n private scheduleScrollReconcile() {\n if (!this.targetWindow) {\n this.scrollState = null\n return\n }\n if (this.rafId != null) return\n this.rafId = this.targetWindow.requestAnimationFrame(() => {\n this.rafId = null\n this.reconcileScroll()\n })\n }\n private reconcileScroll() {\n if (!this.scrollState) return\n\n const el = this.scrollElement\n if (!el) return\n\n // Safety valve: bail out if reconciliation has been running too long\n const MAX_RECONCILE_MS = 5000\n if (this.now() - this.scrollState.startedAt > MAX_RECONCILE_MS) {\n this.scrollState = null\n return\n }\n\n const offsetInfo =\n this.scrollState.index != null\n ? this.getOffsetForIndex(this.scrollState.index, this.scrollState.align)\n : undefined\n const targetOffset = offsetInfo\n ? offsetInfo[0]\n : this.scrollState.lastTargetOffset\n\n // Require one stable frame where target matches scroll offset.\n // approxEqual() already tolerates minor fluctuations, so one frame is sufficient\n // to confirm scroll has reached its target without premature cleanup.\n const STABLE_FRAMES = 1\n\n const targetChanged = targetOffset !== this.scrollState.lastTargetOffset\n\n if (!targetChanged && approxEqual(targetOffset, this.getScrollOffset())) {\n this.scrollState.stableFrames++\n if (this.scrollState.stableFrames >= STABLE_FRAMES) {\n // Final-pass exact landing. The reconcile-stable check uses a 1.01px\n // tolerance (approxEqual) so we don't fight subpixel browser rounding\n // during the converging phase. Once we're definitively settled,\n // commit the exact target so consumers calling scrollToIndex(N)\n // end up at the EXACT computed position of item N — matching\n // virtuoso's 0px landing accuracy rather than our prior 0.5-1px.\n if (this.getScrollOffset() !== targetOffset) {\n this._scrollToOffset(targetOffset, {\n adjustments: undefined,\n behavior: 'auto',\n })\n }\n this.scrollState = null\n return\n }\n } else {\n this.scrollState.stableFrames = 0\n\n if (targetChanged) {\n // When the target moves during smooth scroll (because items came into\n // view and got measured, shifting positions), the original logic was\n // to immediately snap to 'auto' — visibly jarring on long\n // scroll-to-index calls. Now: keep smooth while we're still far\n // (more than a viewport) from the new target. Only fall back to\n // 'auto' for the final approach, so the user sees one continuous\n // motion that smoothly adjusts its endpoint as measurements arrive.\n const viewport = this.getSize() || 600\n const distance = Math.abs(targetOffset - this.getScrollOffset())\n const keepSmooth =\n this.scrollState.behavior === 'smooth' && distance > viewport\n\n this.scrollState.lastTargetOffset = targetOffset\n if (!keepSmooth) {\n this.scrollState.behavior = 'auto'\n }\n\n this._scrollToOffset(targetOffset, {\n adjustments: undefined,\n behavior: keepSmooth ? 'smooth' : 'auto',\n })\n }\n }\n\n // Always reschedule while scrollState is active to guarantee\n // the safety valve timeout runs even if no scroll events fire\n // (e.g. no-op scrollToFn, detached element)\n this.scheduleScrollReconcile()\n }\n\n private getSize = () => {\n if (!this.options.enabled) {\n this.scrollRect = null\n return 0\n }\n\n this.scrollRect = this.scrollRect ?? this.options.initialRect\n\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getScrollOffset = () => {\n if (!this.options.enabled) {\n this.scrollOffset = null\n return 0\n }\n\n this.scrollOffset =\n this.scrollOffset ??\n (typeof this.options.initialOffset === 'function'\n ? this.options.initialOffset()\n : this.options.initialOffset)\n\n return this.scrollOffset\n }\n\n private getMeasurementOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.options.enabled,\n this.options.lanes,\n this.options.laneAssignmentMode,\n this.options.gap,\n ],\n (\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n enabled,\n lanes,\n laneAssignmentMode,\n gap,\n ) => {\n const lanesChanged =\n this.prevLanes !== undefined && this.prevLanes !== lanes\n\n if (lanesChanged) {\n // Set flag for getMeasurements to handle\n this.lanesChangedFlag = true\n }\n\n this.prevLanes = lanes\n this.pendingMin = null\n\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n enabled,\n lanes,\n laneAssignmentMode,\n gap,\n }\n },\n {\n key: false,\n },\n )\n\n private getMeasurements = memo(\n () => [this.getMeasurementOptions(), this.itemSizeCacheVersion],\n (\n {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n enabled,\n lanes,\n laneAssignmentMode,\n gap,\n },\n _itemSizeCacheVersion,\n ) => {\n const itemSizeCache = this.itemSizeCache\n if (!enabled) {\n this.measurementsCache = []\n this.itemSizeCache.clear()\n this.laneAssignments.clear()\n return []\n }\n\n // Clean up stale lane cache entries when count decreases\n if (this.laneAssignments.size > count) {\n for (const index of this.laneAssignments.keys()) {\n if (index >= count) {\n this.laneAssignments.delete(index)\n }\n }\n }\n\n // ✅ Force complete recalculation when lanes change\n if (this.lanesChangedFlag) {\n this.lanesChangedFlag = false // Reset immediately\n this.lanesSettling = true // Start settling period\n this.measurementsCache = []\n this.itemSizeCache.clear()\n this.laneAssignments.clear() // Clear lane cache for new lane count\n // Force min = 0 on the rebuild\n this.pendingMin = null\n }\n\n // Don't restore from initialMeasurementsCache during lane changes\n // as it contains stale lane assignments from the previous lane count\n if (this.measurementsCache.length === 0 && !this.lanesSettling) {\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache.set(item.key, item.size)\n })\n }\n\n // During lanes settling, ignore pendingMin to prevent repositioning\n const min = this.lanesSettling ? 0 : (this.pendingMin ?? 0)\n this.pendingMin = null\n\n // ✅ End settling period when cache is fully built\n if (this.lanesSettling && this.measurementsCache.length === count) {\n this.lanesSettling = false\n }\n\n // ─── Fast path: single-lane lazy materialization ────────────────────\n // For lanes === 1 (the default and most common case), skip the\n // per-item VirtualItem object allocation. We write start/size pairs\n // into a Float64Array and return a Proxy that builds VirtualItem\n // objects on demand (only the indices a consumer actually reads).\n //\n // At n=100k this drops cold-mount cost from ~2.5ms (eager object\n // allocation) to roughly the cost of a single typed-array fill.\n if (lanes === 1) {\n // Reuse flat backing if large enough; else grow (preserving data\n // before `min` to mirror the slice-and-rebuild contract).\n const need = count * 2\n let flat = this._flatMeasurements\n if (!flat || flat.length < need) {\n const next = new Float64Array(need)\n if (flat && min > 0) next.set(flat.subarray(0, min * 2))\n flat = next\n this._flatMeasurements = flat\n }\n\n let runningStart: number\n if (min === 0) {\n runningStart = paddingStart + scrollMargin\n } else {\n // Continue from where we left off\n const prevIdx = min - 1\n runningStart = flat[prevIdx * 2]! + flat[prevIdx * 2 + 1]! + gap\n }\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n const measuredSize = itemSizeCache.get(key)\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n flat[i * 2] = runningStart\n flat[i * 2 + 1] = size\n runningStart += size + gap\n }\n\n const view = createLazyMeasurementsView(count, flat, getItemKey)\n this.measurementsCache = view\n return view\n }\n\n const measurements = this.measurementsCache.slice(0, min)\n\n // ✅ Performance: Track last item index per lane for O(1) lookup\n const laneLastIndex: Array<number | undefined> = new Array(lanes).fill(\n undefined,\n )\n // Running end position of each lane's last item, so the shortest lane\n // can be found with an O(lanes) argmin instead of the old backward walk\n // through `measurements` (getFurthestMeasurement). `filledLanes` tracks\n // how many lanes have at least one item, mirroring the previous\n // \"all lanes seen → shortest lane, else i % lanes\" branch.\n const laneEnds = new Float64Array(lanes)\n let filledLanes = 0\n\n // Initialize from existing measurements (before min)\n for (let m = 0; m < min; m++) {\n const item = measurements[m]\n if (item) {\n if (laneLastIndex[item.lane] === undefined) filledLanes++\n laneLastIndex[item.lane] = m\n laneEnds[item.lane] = item.end\n }\n }\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n\n // Check for cached lane assignment\n const cachedLane = this.laneAssignments.get(i)\n let lane: number\n let start: number\n\n const shouldCacheLane =\n laneAssignmentMode === 'estimate' || itemSizeCache.has(key)\n\n if (cachedLane !== undefined && this.options.lanes > 1) {\n // Use cached lane - O(1) lookup for previous item in same lane\n lane = cachedLane\n const prevIndex = laneLastIndex[lane]\n const prevInLane =\n prevIndex !== undefined ? measurements[prevIndex] : undefined\n start = prevInLane\n ? prevInLane.end + gap\n : paddingStart + scrollMargin\n } else if (filledLanes === lanes) {\n // No cache, every lane seeded: place in the shortest lane.\n // Read the running per-lane ends (O(lanes) argmin) instead of the\n // old backward scan. Tie-break on the lane's last-item index to\n // preserve the previous sort-by-(end, index) placement exactly.\n let bestLane = 0\n let bestEnd = laneEnds[0]!\n let bestIdx = laneLastIndex[0]!\n for (let l = 1; l < lanes; l++) {\n const e = laneEnds[l]!\n if (e < bestEnd || (e === bestEnd && laneLastIndex[l]! < bestIdx)) {\n bestLane = l\n bestEnd = e\n bestIdx = laneLastIndex[l]!\n }\n }\n lane = bestLane\n start = bestEnd + gap\n\n if (shouldCacheLane) {\n this.laneAssignments.set(i, lane)\n }\n } else {\n // No cache and not every lane seeded yet — seed lanes in order,\n // matching the previous `i % lanes` fallback for the first row.\n lane = i % this.options.lanes\n start = paddingStart + scrollMargin\n\n if (shouldCacheLane) {\n this.laneAssignments.set(i, lane)\n }\n }\n\n const measuredSize = itemSizeCache.get(key)\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n\n const end = start + size\n\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key,\n lane,\n }\n\n // ✅ Performance: Update lane's last item index + running end\n if (laneLastIndex[lane] === undefined) filledLanes++\n laneLastIndex[lane] = i\n laneEnds[lane] = end\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [\n this.getMeasurements(),\n this.getSize(),\n this.getScrollOffset(),\n this.options.lanes,\n ],\n (measurements, outerSize, scrollOffset, lanes) => {\n if (measurements.length === 0 || outerSize === 0) {\n this.range = null\n return null\n }\n this.range = calculateRangeImpl(\n measurements,\n outerSize,\n scrollOffset,\n lanes,\n // Pass the typed array so binary search + forward-walk can read\n // start/end directly from Float64Array, skipping the Proxy traps.\n lanes === 1 && this._flatMeasurements != null\n ? this._flatMeasurements\n : null,\n )\n return this.range\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n getVirtualIndexes = memo(\n () => {\n let startIndex: number | null = null\n let endIndex: number | null = null\n const range = this.calculateRange()\n if (range) {\n startIndex = range.startIndex\n endIndex = range.endIndex\n }\n this.maybeNotify.updateDeps([this.isScrolling, startIndex, endIndex])\n return [\n this.options.rangeExtractor,\n this.options.overscan,\n this.options.count,\n startIndex,\n endIndex,\n ]\n },\n (rangeExtractor, overscan, count, startIndex, endIndex) => {\n return startIndex === null || endIndex === null\n ? []\n : rangeExtractor({\n startIndex,\n endIndex,\n overscan,\n count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getVirtualIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n /**\n * Determines if an item at the given index should be measured during smooth scroll.\n * During smooth scroll, only items within a buffer range around the target are measured\n * to prevent items far from the target from pushing it away.\n */\n private shouldMeasureDuringScroll = (index: number): boolean => {\n // No scroll state or not smooth scroll - always allow measurements\n if (!this.scrollState || this.scrollState.behavior !== 'smooth') {\n return true\n }\n\n const scrollIndex =\n this.scrollState.index ??\n this.getVirtualItemForOffset(this.scrollState.lastTargetOffset)?.index\n\n if (scrollIndex !== undefined && this.range) {\n // Allow measurements within a buffer range around the scroll target\n const bufferSize = Math.max(\n this.options.overscan,\n Math.ceil((this.range.endIndex - this.range.startIndex) / 2),\n )\n const minIndex = Math.max(0, scrollIndex - bufferSize)\n const maxIndex = Math.min(\n this.options.count - 1,\n scrollIndex + bufferSize,\n )\n return index >= minIndex && index <= maxIndex\n }\n\n return true\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n this.elementsCache.forEach((cached, key) => {\n if (!cached.isConnected) {\n this.observer.unobserve(cached)\n this.elementsCache.delete(key)\n }\n })\n return\n }\n\n const index = this.indexFromElement(node)\n const key = this.options.getItemKey(index)\n const prevNode = this.elementsCache.get(key)\n\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode)\n }\n this.observer.observe(node)\n this.elementsCache.set(key, node)\n }\n\n // Sync-measure when idle (initial render) or during programmatic scrolling\n // (scrollToIndex/scrollToOffset) where reconcileScroll needs sizes in the same frame.\n // During normal user scrolling, skip sync measurement — the RO callback handles it async.\n if (\n (!this.isScrolling || this.scrollState) &&\n this.shouldMeasureDuringScroll(index)\n ) {\n this.resizeItem(index, this.options.measureElement(node, undefined, this))\n }\n }\n\n resizeItem = (index: number, size: number) => {\n if (index < 0 || index >= this.options.count) return\n\n // Fast field reads. For lanes===1 we read raw start/size from the flat\n // typed array, avoiding a Proxy.get + VirtualItem allocation per call.\n // For lanes>1 we fall back to the cached VirtualItem array.\n let cachedSize: number\n let itemStart: number\n let key: Key\n const flat = this._flatMeasurements\n if (this.options.lanes === 1 && flat !== null) {\n key = this.options.getItemKey(index)\n itemStart = flat[index * 2]!\n cachedSize = flat[index * 2 + 1]!\n } else {\n const item = this.measurementsCache[index]\n if (!item) return\n key = item.key\n itemStart = item.start\n cachedSize = item.size\n }\n\n const itemSize = this.itemSizeCache.get(key) ?? cachedSize\n const delta = size - itemSize\n\n if (delta !== 0) {\n const wasAtEnd =\n this.options.anchorTo === 'end' &&\n this.scrollState?.behavior !== 'smooth' &&\n this.getVirtualDistanceFromEnd() <= this.options.scrollEndThreshold\n const prevTotalSize = wasAtEnd ? this.getTotalSize() : 0\n const shouldAdjustScroll =\n this.scrollState?.behavior !== 'smooth' &&\n (this.shouldAdjustScrollPositionOnItemSizeChange !== undefined\n ? this.shouldAdjustScrollPositionOnItemSizeChange(\n // The callback expects a VirtualItem; build one lazily only\n // when the consumer actually supplied a custom predicate.\n this.measurementsCache[index] ?? {\n index,\n key,\n start: itemStart,\n size: cachedSize,\n end: itemStart + cachedSize,\n lane: 0,\n },\n delta,\n this,\n )\n : // Default: adjust when the resize is an above-viewport item.\n // First measurement (!has(key)): always adjust — the item\n // has never been sized, so the estimate→actual delta must\n // be compensated regardless of scroll direction.\n // Re-measurement (has(key)): skip during backward scroll\n // to avoid the \"items jump while scrolling up\" cascade.\n itemStart < this.getScrollOffset() + this.scrollAdjustments &&\n (!this.itemSizeCache.has(key) ||\n this.scrollDirection !== 'backward'))\n\n if (this.pendingMin === null || index < this.pendingMin) {\n this.pendingMin = index\n }\n this.itemSizeCache.set(key, size)\n this.itemSizeCacheVersion++\n\n if (wasAtEnd) {\n this.applyScrollAdjustment(this.getTotalSize() - prevTotalSize)\n } else if (shouldAdjustScroll) {\n this.applyScrollAdjustment(delta)\n }\n\n this.notify(false)\n }\n }\n\n getVirtualItems = memo(\n () => [this.getVirtualIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: Array<VirtualItem> = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getVirtualItems',\n debug: () => this.options.debug,\n },\n )\n\n getVirtualItemForOffset = (offset: number) => {\n const measurements = this.getMeasurements()\n if (measurements.length === 0) {\n return undefined\n }\n // Same fast-path as calculateRange: read start values directly from the\n // typed array during binary search to skip the Proxy.get materialization\n // per probe.\n const flat = this._flatMeasurements\n const useFlat = this.options.lanes === 1 && flat != null\n const idx = findNearestBinarySearch(\n 0,\n measurements.length - 1,\n useFlat\n ? (i: number) => flat[i * 2]!\n : (i: number) => notUndefined(measurements[i]).start,\n offset,\n )\n return notUndefined(measurements[idx])\n }\n\n private getMaxScrollOffset = () => {\n if (!this.scrollElement) return 0\n\n if ('scrollHeight' in this.scrollElement) {\n // Element\n return this.options.horizontal\n ? this.scrollElement.scrollWidth - this.scrollElement.clientWidth\n : this.scrollElement.scrollHeight - this.scrollElement.clientHeight\n } else {\n // Window\n const doc = this.scrollElement.document.documentElement\n return this.options.horizontal\n ? doc.scrollWidth - this.scrollElement.innerWidth\n : doc.scrollHeight - this.scrollElement.innerHeight\n }\n }\n\n private getVirtualDistanceFromEnd = () => {\n return Math.max(\n this.getTotalSize() - this.getSize() - this.getScrollOffset(),\n 0,\n )\n }\n\n getDistanceFromEnd = () => {\n return Math.max(this.getMaxScrollOffset() - this.getScrollOffset(), 0)\n }\n\n isAtEnd = (threshold = this.options.scrollEndThreshold) => {\n return this.getDistanceFromEnd() <= threshold\n }\n\n getOffsetForAlignment = (\n toOffset: number,\n align: ScrollAlignment,\n itemSize = 0,\n ) => {\n if (!this.scrollElement) return 0\n\n const size = this.getSize()\n const scrollOffset = this.getScrollOffset()\n\n if (align === 'auto') {\n align = toOffset >= scrollOffset + size ? 'end' : 'start'\n }\n\n if (align === 'center') {\n // When aligning to a particular item (e.g. with scrollToIndex),\n // adjust offset by the size of the item to center on the item\n toOffset += (itemSize - size) / 2\n } else if (align === 'end') {\n toOffset -= size\n }\n\n const maxOffset = this.getMaxScrollOffset()\n\n return Math.max(Math.min(maxOffset, toOffset), 0)\n }\n\n getOffsetForIndex = (index: number, align: ScrollAlignment = 'auto') => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n const size = this.getSize()\n const scrollOffset = this.getScrollOffset()\n\n const item = this.measurementsCache[index]\n if (!item) return\n\n if (align === 'auto') {\n if (item.end >= scrollOffset + size - this.options.scrollPaddingEnd) {\n align = 'end'\n } else if (item.start <= scrollOffset + this.options.scrollPaddingStart) {\n align = 'start'\n } else {\n return [scrollOffset, align] as const\n }\n }\n\n // For the last item with 'end' alignment, use browser's actual max scroll\n // to account for borders/padding that aren't in our measurements\n if (align === 'end' && index === this.options.count - 1) {\n return [this.getMaxScrollOffset(), align] as const\n }\n\n const toOffset =\n align === 'end'\n ? item.end + this.options.scrollPaddingEnd\n : item.start - this.options.scrollPaddingStart\n\n return [\n this.getOffsetForAlignment(toOffset, align, item.size),\n align,\n ] as const\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior = 'auto' }: ScrollToOffsetOptions = {},\n ) => {\n const offset = this.getOffsetForAlignment(toOffset, align)\n\n const now = this.now()\n this.scrollState = {\n index: null,\n align,\n behavior,\n startedAt: now,\n lastTargetOffset: offset,\n stableFrames: 0,\n }\n\n this._scrollToOffset(offset, { adjustments: undefined, behavior })\n\n this.scheduleScrollReconcile()\n }\n\n scrollToIndex = (\n index: number,\n {\n align: initialAlign = 'auto',\n behavior = 'auto',\n }: ScrollToIndexOptions = {},\n ) => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n const offsetInfo = this.getOffsetForIndex(index, initialAlign)\n if (!offsetInfo) {\n return\n }\n const [offset, align] = offsetInfo\n\n const now = this.now()\n this.scrollState = {\n index,\n align,\n behavior,\n startedAt: now,\n lastTargetOffset: offset,\n stableFrames: 0,\n }\n\n this._scrollToOffset(offset, { adjustments: undefined, behavior })\n\n this.scheduleScrollReconcile()\n }\n\n scrollBy = (\n delta: number,\n { behavior = 'auto' }: ScrollToOffsetOptions = {},\n ) => {\n const offset = this.getScrollOffset() + delta\n const now = this.now()\n\n this.scrollState = {\n index: null,\n align: 'start',\n behavior,\n startedAt: now,\n lastTargetOffset: offset,\n stableFrames: 0,\n }\n\n this._scrollToOffset(offset, { adjustments: undefined, behavior })\n\n this.scheduleScrollReconcile()\n }\n\n scrollToEnd = ({ behavior = 'auto' }: ScrollToEndOptions = {}) => {\n if (this.options.count > 0) {\n this.scrollToIndex(this.options.count - 1, {\n align: 'end',\n behavior,\n })\n return\n }\n\n this.scrollToOffset(Math.max(this.getTotalSize() - this.getSize(), 0), {\n behavior,\n })\n }\n\n getTotalSize = () => {\n const measurements = this.getMeasurements()\n\n let end: number\n // If there are no measurements, set the end to paddingStart\n // If there is only one lane, use the last measurement's end\n // Otherwise find the maximum end value among all measurements\n if (measurements.length === 0) {\n end = this.options.paddingStart\n } else if (this.options.lanes === 1) {\n // Fast path: read last item's end directly from the flat typed array\n // when available; avoids a Proxy.get + VirtualItem materialization\n // just to call getTotalSize (which React renders trigger every commit).\n const lastIdx = measurements.length - 1\n const flat = this._flatMeasurements\n if (flat != null) {\n end = flat[lastIdx * 2]! + flat[lastIdx * 2 + 1]!\n } else {\n end = measurements[lastIdx]?.end ?? 0\n }\n } else {\n const endByLane = Array<number | null>(this.options.lanes).fill(null)\n let endIndex = measurements.length - 1\n while (endIndex >= 0 && endByLane.some((val) => val === null)) {\n const item = measurements[endIndex]!\n if (endByLane[item.lane] === null) {\n endByLane[item.lane] = item.end\n }\n\n endIndex--\n }\n\n end = Math.max(...endByLane.filter((val): val is number => val !== null))\n }\n\n return Math.max(\n end - this.options.scrollMargin + this.options.paddingEnd,\n 0,\n )\n }\n\n /**\n * Returns a snapshot of currently-measured items suitable for round-\n * tripping through state storage (sessionStorage, history, etc.) and\n * passing back as `initialMeasurementsCache` on remount. Pair with the\n * current `scrollOffset` to restore exact scroll position after navigation.\n *\n * Only items the consumer has actually rendered (and thus measured) appear\n * in the snapshot; unmeasured items will fall back to `estimateSize` on\n * restore. Returns an empty array if no items have been measured.\n */\n takeSnapshot = (): Array<VirtualItem> => {\n const snapshot: Array<VirtualItem> = []\n if (this.itemSizeCache.size === 0) return snapshot\n // Iterate measurementsCache only for indices whose key is in itemSizeCache\n // (i.e., have been measured). We build VirtualItem objects with the\n // current start/size/end so they can be persisted as plain data.\n const m = this.getMeasurements()\n for (const item of m) {\n if (item && this.itemSizeCache.has(item.key)) {\n // Force materialization (lazy path) and copy plain fields.\n snapshot.push({\n index: item.index,\n key: item.key,\n start: item.start,\n size: item.size,\n end: item.end,\n lane: item.lane,\n })\n }\n }\n return snapshot\n }\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n // Record the intended logical scroll target so the next scroll event\n // can reconcile against subpixel rounding by the browser.\n this._intendedScrollOffset = offset + (adjustments ?? 0)\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n // Reset pendingMin so the next getMeasurements rebuilds from index 0.\n // Without this, a prior resizeItem() that left pendingMin > 0 would\n // cause the rebuild to preserve stale items before that index.\n this.pendingMin = null\n this.itemSizeCache.clear()\n this.laneAssignments.clear() // Clear lane cache for full re-layout\n this.itemSizeCacheVersion++\n this.notify(false)\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\n// Monomorphic Float64Array variant — reads start values directly at stride\n// 2 instead of through a getter closure. JITs the inner load to a typed-\n// array bounds-check + load with no indirect call.\nfunction findNearestBinarySearchFlat(\n flat: Float64Array,\n high: number,\n value: number,\n) {\n let low = 0\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = flat[middle * 2]!\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n return low > 0 ? low - 1 : 0\n}\n\nfunction calculateRangeImpl(\n measurements: Array<VirtualItem>,\n outerSize: number,\n scrollOffset: number,\n lanes: number,\n flat: Float64Array | null,\n) {\n const lastIndex = measurements.length - 1\n\n // handle case when item count is less than or equal to lanes\n if (measurements.length <= lanes) {\n return { startIndex: 0, endIndex: lastIndex }\n }\n\n if (lanes === 1 && flat !== null) {\n // Hot single-lane path: typed-array reads, no closures, no Proxy traps.\n const startIndex = findNearestBinarySearchFlat(\n flat,\n lastIndex,\n scrollOffset,\n )\n let endIndex = startIndex\n const limit = scrollOffset + outerSize\n while (\n endIndex < lastIndex &&\n flat[endIndex * 2]! + flat[endIndex * 2 + 1]! < limit\n ) {\n endIndex++\n }\n return { startIndex, endIndex }\n }\n\n // Fallback (lanes > 1 or no flat array): closure-based reads.\n const getStart = (index: number) => measurements[index]!.start\n let startIndex = findNearestBinarySearch(0, lastIndex, getStart, scrollOffset)\n let endIndex = startIndex\n\n if (lanes === 1) {\n while (\n endIndex < lastIndex &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n } else if (lanes > 1) {\n // Expand forward until we include the visible items from all lanes\n // which are closer to the end of the virtualizer window\n const endPerLane = Array(lanes).fill(0)\n while (\n endIndex < lastIndex &&\n endPerLane.some((pos) => pos < scrollOffset + outerSize)\n ) {\n const item = measurements[endIndex]!\n endPerLane[item.lane] = item.end\n endIndex++\n }\n\n // Expand backward until we include all lanes' visible items\n // closer to the top\n const startPerLane = Array(lanes).fill(scrollOffset + outerSize)\n while (startIndex >= 0 && startPerLane.some((pos) => pos >= scrollOffset)) {\n const item = measurements[startIndex]!\n startPerLane[item.lane] = item.start\n startIndex--\n }\n\n // Align startIndex to the beginning of its lane\n startIndex = Math.max(0, startIndex - (startIndex % lanes))\n // Align endIndex to the end of its lane\n endIndex = Math.min(lastIndex, endIndex + (lanes - 1 - (endIndex % lanes)))\n }\n\n return { startIndex, endIndex }\n}\n","import * as React from 'react'\nimport { flushSync } from 'react-dom'\nimport {\n Virtualizer,\n elementScroll,\n observeElementOffset,\n observeElementRect,\n observeWindowOffset,\n observeWindowRect,\n windowScroll,\n} from '@tanstack/virtual-core'\nimport type { PartialKeys, VirtualizerOptions } from '@tanstack/virtual-core'\n\nexport * from '@tanstack/virtual-core'\n\nconst useIsomorphicLayoutEffect =\n typeof document !== 'undefined' ? React.useLayoutEffect : React.useEffect\n\nexport type ReactVirtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> = Virtualizer<TScrollElement, TItemElement> & {\n /**\n * Ref callback for the inner size container element. Only meaningful when\n * `directDomUpdates: true` — the virtualizer writes the container's\n * main-axis size (`height` or `width`) directly to skip React re-renders.\n */\n containerRef: (node: HTMLElement | null) => void\n}\n\nexport type ReactVirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> = VirtualizerOptions<TScrollElement, TItemElement> & {\n useFlushSync?: boolean\n /**\n * Skip React re-renders for scroll-only updates. The virtualizer writes\n * item positions (`top`/`left`) and the container size (`height`/`width`)\n * directly to the DOM, and only re-renders when the visible index range\n * or `isScrolling` changes.\n *\n * Requirements when enabled:\n * - Item elements must be `position: absolute`; in `'transform'` mode they\n * must also be anchored with `top: 0` / `left: 0`.\n * - Item elements must NOT set the main-axis position in their style — the\n * virtualizer owns `top` / `left` in `'position'` mode and `transform` in\n * `'transform'` mode.\n * - The inner size container must receive `virtualizer.containerRef` and\n * must NOT set `height` / `width` in its style.\n * - For multi-lane layouts (grids / masonry), the cross-axis position\n * (e.g. `left: ${(item.lane * 100) / lanes}%`) is stable per item and\n * must still be set in your JSX — only the main axis is automated.\n *\n * This flag is intended to be set once at mount. Toggling it (or\n * `directDomUpdatesMode`) at runtime can leave stale inline styles on\n * items and the container.\n */\n directDomUpdates?: boolean\n /**\n * How `directDomUpdates` positions item elements.\n * - `'transform'` (default): writes `transform: translate3d(...)`.\n * Promotes items to their own compositor layer — usually smoother on long\n * lists, but creates a stacking context and can interfere with\n * `position: fixed` descendants. Item elements must still be anchored with\n * `position: absolute`, `top: 0`, and `left: 0`.\n * - `'position'`: writes `top` / `left`. Item elements must be\n * `position: absolute`.\n */\n directDomUpdatesMode?: 'position' | 'transform'\n}\n\nfunction useVirtualizerBase<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n>({\n useFlushSync = true,\n directDomUpdates = false,\n directDomUpdatesMode = 'transform',\n ...options\n}: ReactVirtualizerOptions<TScrollElement, TItemElement>): ReactVirtualizer<\n TScrollElement,\n TItemElement\n> {\n const rerender = React.useReducer((x: number) => x + 1, 0)[1]\n\n // Mutable across renders so the onChange closure captured by setOptions\n // always reads the latest values without us having to re-create it.\n const directRef = React.useRef({\n enabled: directDomUpdates,\n mode: directDomUpdatesMode,\n container: null as HTMLElement | null,\n lastSize: null as number | null,\n // Keyed by the element itself so a remounted node (same key, new DOM\n // node — e.g. when `enabled` is toggled off then on) is treated as fresh\n // and gets its style written.\n lastPositions: new WeakMap<HTMLElement, number>(),\n prevRange: null as {\n startIndex: number\n endIndex: number\n isScrolling: boolean\n } | null,\n })\n directRef.current.enabled = directDomUpdates\n directRef.current.mode = directDomUpdatesMode\n\n // Writes container size + item positions to the DOM. Idempotent — guarded\n // by lastSize / lastPositions. Called from onChange (covers scroll-driven\n // updates) and from a layout effect (covers post-render commits when refs\n // have just registered new items in elementsCache).\n const applyDirectStyles = (\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => {\n const state = directRef.current\n if (!state.enabled || !state.container) return\n\n const totalSize = instance.getTotalSize()\n if (totalSize !== state.lastSize) {\n state.lastSize = totalSize\n const sizeAxis = instance.options.horizontal ? 'width' : 'height'\n state.container.style[sizeAxis] = `${totalSize}px`\n }\n\n const horizontal = !!instance.options.horizontal\n const useTransform = state.mode === 'transform'\n const posAxis = horizontal ? 'left' : 'top'\n const scrollMargin = instance.options.scrollMargin\n const items = instance.getVirtualItems()\n for (const item of items) {\n const next = item.start - scrollMargin\n const el = instance.elementsCache.get(item.key) as HTMLElement | undefined\n if (!el) continue\n if (state.lastPositions.get(el) === next) continue\n state.lastPositions.set(el, next)\n if (useTransform) {\n el.style.transform = horizontal\n ? `translate3d(${next}px, 0, 0)`\n : `translate3d(0, ${next}px, 0)`\n } else {\n el.style[posAxis] = `${next}px`\n }\n }\n }\n\n const resolvedOptions: VirtualizerOptions<TScrollElement, TItemElement> = {\n ...options,\n onChange: (instance, sync) => {\n const state = directRef.current\n let shouldRerender = true\n\n if (state.enabled) {\n applyDirectStyles(instance)\n\n // Only re-render on range / isScrolling changes\n const range = instance.range\n const prev = state.prevRange\n shouldRerender =\n !prev ||\n prev.isScrolling !== instance.isScrolling ||\n prev.startIndex !== range?.startIndex ||\n prev.endIndex !== range?.endIndex\n if (shouldRerender) {\n state.prevRange = range\n ? {\n startIndex: range.startIndex,\n endIndex: range.endIndex,\n isScrolling: instance.isScrolling,\n }\n : null\n }\n }\n\n if (shouldRerender) {\n if (useFlushSync && sync) {\n flushSync(rerender)\n } else {\n rerender()\n }\n }\n\n options.onChange?.(instance, sync)\n },\n }\n\n const [instance] = React.useState(() => {\n const v = new Virtualizer<TScrollElement, TItemElement>(resolvedOptions)\n return Object.assign(v, {\n containerRef: (node: HTMLElement | null) => {\n const state = directRef.current\n state.container = node\n state.lastSize = null\n if (node && state.enabled) {\n const total = v.getTotalSize()\n state.lastSize = total\n const axis = v.options.horizontal ? 'width' : 'height'\n node.style[axis] = `${total}px`\n }\n },\n })\n })\n\n instance.setOptions(resolvedOptions)\n\n useIsomorphicLayoutEffect(() => {\n return instance._didMount()\n }, [])\n\n useIsomorphicLayoutEffect(() => {\n return instance._willUpdate()\n })\n\n // After every render commit, newly mounted item refs have registered in\n // elementsCache; write their positions to the DOM so the user doesn't see\n // them at (0, 0) until the next onChange.\n useIsomorphicLayoutEffect(() => {\n applyDirectStyles(instance)\n })\n\n return instance\n}\n\nexport function useVirtualizer<\n TScrollElement extends Element,\n TItemElement extends Element,\n>(\n options: PartialKeys<\n ReactVirtualizerOptions<TScrollElement, TItemElement>,\n 'observeElementRect' | 'observeElementOffset' | 'scrollToFn'\n >,\n): ReactVirtualizer<TScrollElement, TItemElement> {\n return useVirtualizerBase<TScrollElement, TItemElement>({\n observeElementRect: observeElementRect,\n observeElementOffset: observeElementOffset,\n scrollToFn: elementScroll,\n ...options,\n })\n}\n\nexport function useWindowVirtualizer<TItemElement extends Element>(\n options: PartialKeys<\n ReactVirtualizerOptions<Window, TItemElement>,\n | 'getScrollElement'\n | 'observeElementRect'\n | 'observeElementOffset'\n | 'scrollToFn'\n >,\n): ReactVirtualizer<Window, TItemElement> {\n return useVirtualizerBase<Window, TItemElement>({\n getScrollElement: () => (typeof document !== 'undefined' ? window : null),\n observeElementRect: observeWindowRect,\n observeElementOffset: observeWindowOffset,\n scrollToFn: windowScroll,\n initialOffset: () => (typeof document !== 'undefined' ? window.scrollY : 0),\n ...options,\n })\n}\n","export type PptxViewerErrorCode =\n | 'aborted'\n | 'fetch-failed'\n | 'invalid-source'\n | 'unsupported-environment'\n | 'unsupported-format'\n | 'encrypted-document'\n | 'resource-limit'\n | 'parse-failed'\n | 'render-failed';\n\nexport class PptxViewerError extends Error {\n readonly code: PptxViewerErrorCode;\n readonly cause?: unknown;\n readonly details?: Readonly<Record<string, unknown>>;\n\n constructor(\n code: PptxViewerErrorCode,\n message: string,\n options: { cause?: unknown; details?: Readonly<Record<string, unknown>> } = {},\n ) {\n super(message);\n this.name = 'PptxViewerError';\n this.code = code;\n if (options.cause !== undefined) this.cause = options.cause;\n if (options.details !== undefined) this.details = options.details;\n }\n}\n\nexport function toPptxViewerError(\n error: unknown,\n fallbackCode: PptxViewerErrorCode,\n fallbackMessage: string,\n): PptxViewerError {\n if (error instanceof PptxViewerError) return error;\n if (error instanceof DOMException && error.name === 'AbortError') {\n return new PptxViewerError('aborted', 'Presentation loading was cancelled.', { cause: error });\n }\n if (error instanceof Error && error.name === 'AbortError') {\n return new PptxViewerError('aborted', 'Presentation loading was cancelled.', { cause: error });\n }\n return new PptxViewerError(fallbackCode, fallbackMessage, { cause: error });\n}\n\nexport function throwIfAborted(signal?: AbortSignal): void {\n if (signal?.aborted) {\n throw new PptxViewerError('aborted', 'Presentation loading was cancelled.', {\n cause: signal.reason,\n });\n }\n}\n","export const families = [\n { id: \"carlito\", family: \"Carlito\", original: \"Calibri\", load: () => import(\"./carlito-data.js\") },\n { id: \"arimo\", family: \"Arimo\", original: \"Arial\", load: () => import(\"./arimo-data.js\") },\n { id: \"tinos\", family: \"Tinos\", original: \"Times New Roman\", load: () => import(\"./tinos-data.js\") },\n { id: \"cousine\", family: \"Cousine\", original: \"Courier New\", load: () => import(\"./cousine-data.js\") },\n { id: \"intos\", family: \"Intos\", original: \"Aptos\", load: () => import(\"./intos-data.js\") },\n { id: \"intos-narrow\", family: \"Intos Narrow\", original: \"Aptos Narrow\", load: () => import(\"./intos-narrow-data.js\") }\n];\n","import { families } from \"./families.js\";\n\nconst registry = Symbol.for(\"@extend-ai/office-fonts/loads/v2\");\nconst loads = globalThis[registry] ??= new WeakMap();\nconst normalize = (family) => family.trim().replace(/^[\"']|[\"']$/g, \"\").toLowerCase();\nconst primary = (family) => family.split(\",\")[0];\nconst lookup = new Map(families.flatMap((family) =>\n [family.original, family.family].map((name) => [normalize(name), family])));\nconst variants = [\n { style: \"normal\", weight: \"400\", suffix: \"\" },\n { style: \"normal\", weight: \"700\", suffix: \" Bold\" },\n { style: \"italic\", weight: \"400\", suffix: \" Italic\" },\n { style: \"italic\", weight: \"700\", suffix: \" Bold Italic\" },\n];\n\nexport function officeFontFallback(family) {\n return lookup.get(normalize(primary(family)))?.family;\n}\n\nfunction matches(face, family, variant) {\n const weight = face.weight === \"normal\" ? \"400\" : face.weight === \"bold\" ? \"700\" : face.weight;\n const range = weight.split(/\\s+/).map(Number);\n return normalize(face.family) === normalize(family) && face.style === variant.style\n && Number(variant.weight) >= range[0] && Number(variant.weight) <= (range[1] ?? range[0]);\n}\n\nexport async function loadOfficeFonts(target = globalThis.document, requestedFamilies = [\"Calibri\"]) {\n const FontFaceClass = target?.defaultView?.FontFace ?? globalThis.FontFace;\n if (!target?.fonts || !FontFaceClass) return;\n const fonts = target.fonts;\n let entries = loads.get(fonts);\n if (!entries) loads.set(fonts, entries = new Map());\n const selected = new Set([...requestedFamilies].map((name) => normalize(primary(name))));\n await Promise.all([...selected].map(async (key) => {\n const definition = lookup.get(key);\n if (!definition) return;\n const previous = entries.get(key);\n if (previous && (!previous.ready || previous.faces.every((face) => fonts.has(face)))) return previous.promise;\n const family = key === normalize(definition.original) ? definition.original : definition.family;\n const state = { ready: false, faces: [], promise: undefined };\n state.promise = (async () => {\n const added = [];\n try {\n const results = await Promise.allSettled(variants.map(async (variant, index) => {\n const existing = [...fonts].filter((face) => matches(face, family, variant) && face.status !== \"error\");\n if (existing.length) {\n const loaded = await Promise.allSettled(existing.map((face) => face.load()));\n const available = loaded.flatMap((result) => result.status === \"fulfilled\" ? [result.value] : []);\n if (available.length) return available;\n }\n let face;\n if (family === definition.original) {\n try {\n face = await new FontFaceClass(family, `local(\"${family}${variant.suffix}\")`, variant).load();\n } catch {\n face = undefined;\n }\n }\n if (!face) {\n const { faces: assets } = await definition.load();\n face = new FontFaceClass(family, `url(\"${assets[index].source}\")`, variant);\n fonts.add(face);\n added.push(face);\n await face.load();\n } else {\n fonts.add(face);\n added.push(face);\n }\n return [face];\n }));\n const failure = results.find((result) => result.status === \"rejected\");\n if (failure) throw failure.reason;\n state.faces = results.flatMap((result) => result.value);\n state.ready = true;\n } catch (error) {\n for (const face of added) fonts.delete(face);\n entries.delete(key);\n throw error;\n }\n })();\n entries.set(key, state);\n return state.promise;\n }));\n}\n\nexport async function embedOfficeFonts(svg) {\n const opening = /^\\s*(?:<\\?xml[^?]*\\?>\\s*)?<svg\\b[^>]*>/i.exec(svg);\n if (!opening || /data-office-fonts=/.test(svg)) return svg;\n const names = new Set();\n for (const match of svg.matchAll(/\\bfont-family\\s*(?:=\\s*\"([^\"]*)\"|=\\s*'([^']*)'|:\\s*([^;}]+))/gi)) {\n const name = primary((match[1] ?? match[2] ?? match[3]).replace(/"|'/g, \"\"));\n const definition = lookup.get(normalize(name));\n if (definition) names.add(normalize(name));\n }\n if (!names.size) return svg;\n const bold = /font-weight\\s*(?:=\\s*[\"']|:\\s*)(?:bold|[5-9]00)/i.test(svg);\n const italic = /font-style\\s*(?:=\\s*[\"']|:\\s*)(?:italic|oblique)/i.test(svg);\n const rules = await Promise.all([...names].map(async (name) => {\n const definition = lookup.get(name);\n const family = name === normalize(definition.original) ? definition.original : definition.family;\n const { faces } = await definition.load();\n return faces.flatMap(({ source, style, weight }, index) => {\n if ((!bold && weight === \"700\") || (!italic && style === \"italic\")) return [];\n const local = family === definition.original ? `local(\"${family}${variants[index].suffix}\"),` : \"\";\n return [`@font-face{font-family:\"${family}\";src:${local}url(\"${source}\") format(\"woff2\");font-style:${style};font-weight:${weight}}`];\n }).join(\"\");\n }));\n return svg.slice(0, opening[0].length) + `<defs data-office-fonts=\"v2\"><style>${rules.join(\"\")}</style></defs>` + svg.slice(opening[0].length);\n}\n\nexport const OFFICE_FALLBACK_FONT = \"Carlito\";\n","import { loadOfficeFonts } from '@extend-ai/office-fonts';\nimport type {\n PresentationDocument,\n PresentationEmbeddedFont,\n PresentationWarning,\n} from '@extend-ai/react-pptx-model';\nimport type { PptxFontOptions, PptxFontSource } from './types';\n\nconst GENERIC_FAMILIES = new Set([\n 'serif',\n 'sans-serif',\n 'monospace',\n 'cursive',\n 'fantasy',\n 'system-ui',\n 'ui-serif',\n 'ui-sans-serif',\n 'ui-monospace',\n 'emoji',\n 'math',\n 'fangsong',\n]);\n\n/** Cross-platform, metrically similar substitutions for common Office typefaces. */\nexport const OFFICE_FONT_FALLBACKS: Readonly<Record<string, readonly string[]>> = {\n aptos: ['Aptos', 'Intos', 'Segoe UI', 'Arial', 'sans-serif'],\n 'aptos narrow': ['Aptos Narrow', 'Intos Narrow', 'Arial', 'sans-serif'],\n 'aptos display': ['Aptos Display', 'Segoe UI', 'Arial', 'sans-serif'],\n calibri: ['Calibri', 'Carlito', 'Arial', 'sans-serif'],\n 'calibri light': ['Calibri Light', 'Carlito', 'Arial', 'sans-serif'],\n cambria: ['Cambria', 'Caladea', 'Georgia', 'serif'],\n 'cambria math': ['Cambria Math', 'STIX Two Math', 'STIXGeneral', 'math'],\n arial: ['Arial', 'Arimo', 'Liberation Sans', 'Helvetica', 'sans-serif'],\n 'arial narrow': ['Arial Narrow', 'Liberation Sans Narrow', 'Arial', 'sans-serif'],\n 'arial unicode ms': ['Arial Unicode MS', 'Noto Sans', 'Segoe UI Symbol', 'sans-serif'],\n 'times new roman': ['Times New Roman', 'Tinos', 'Liberation Serif', 'Times', 'serif'],\n 'courier new': ['Courier New', 'Cousine', 'Liberation Mono', 'Courier', 'monospace'],\n consolas: ['Consolas', 'Cascadia Mono', 'Liberation Mono', 'monospace'],\n 'century gothic': ['Century Gothic', 'Avenir Next', 'Futura', 'Arial', 'sans-serif'],\n 'franklin gothic medium': ['Franklin Gothic Medium', 'Arial', 'sans-serif'],\n 'segoe ui': ['Segoe UI', 'Inter', 'Arial', 'sans-serif'],\n 'sitka heading': ['Sitka Heading', 'Georgia', 'Times New Roman', 'serif'],\n sitka: ['Sitka', 'Georgia', 'Times New Roman', 'serif'],\n 'source sans pro': ['Source Sans Pro', 'Helvetica Neue', 'Arial', 'sans-serif'],\n candara: ['Candara', 'Noto Sans', 'Arial', 'sans-serif'],\n constantia: ['Constantia', 'Georgia', 'serif'],\n corbel: ['Corbel', 'Noto Sans', 'Arial', 'sans-serif'],\n garamond: ['Garamond', 'EB Garamond', 'Georgia', 'serif'],\n 'book antiqua': ['Book Antiqua', 'Palatino Linotype', 'Palatino', 'serif'],\n 'palatino linotype': ['Palatino Linotype', 'Palatino', 'Georgia', 'serif'],\n 'ms gothic': ['MS Gothic', 'Yu Gothic', 'Meiryo', 'Noto Sans CJK JP', 'sans-serif'],\n 'ms pgothic': ['MS PGothic', 'Yu Gothic', 'Meiryo', 'Noto Sans CJK JP', 'sans-serif'],\n 'ms mincho': ['MS Mincho', 'Yu Mincho', 'Noto Serif CJK JP', 'serif'],\n 'ms pmincho': ['MS PMincho', 'Yu Mincho', 'Noto Serif CJK JP', 'serif'],\n meiryo: ['Meiryo', 'Yu Gothic', 'Noto Sans CJK JP', 'sans-serif'],\n 'yu gothic': ['Yu Gothic', 'Meiryo', 'Noto Sans CJK JP', 'sans-serif'],\n 'yu mincho': ['Yu Mincho', 'Noto Serif CJK JP', 'serif'],\n simsun: ['SimSun', 'Songti SC', 'Noto Serif CJK SC', 'serif'],\n simhei: ['SimHei', 'Heiti SC', 'Microsoft YaHei', 'Noto Sans CJK SC', 'sans-serif'],\n 'microsoft yahei': ['Microsoft YaHei', 'PingFang SC', 'Noto Sans CJK SC', 'sans-serif'],\n dengxian: ['DengXian', 'Microsoft YaHei', 'Noto Sans CJK SC', 'sans-serif'],\n fangsong: ['FangSong', 'STFangsong', 'Noto Serif CJK SC', 'serif'],\n kaiti: ['KaiTi', 'STKaiti', 'Noto Serif CJK SC', 'serif'],\n mingliu: ['MingLiU', 'PingFang TC', 'Noto Serif CJK TC', 'serif'],\n pmingliu: ['PMingLiU', 'PingFang TC', 'Noto Serif CJK TC', 'serif'],\n 'microsoft jhenghei': ['Microsoft JhengHei', 'PingFang TC', 'Noto Sans CJK TC', 'sans-serif'],\n 'malgun gothic': ['Malgun Gothic', 'Apple SD Gothic Neo', 'Noto Sans CJK KR', 'sans-serif'],\n batang: ['Batang', 'AppleMyungjo', 'Noto Serif CJK KR', 'serif'],\n gulim: ['Gulim', 'Apple SD Gothic Neo', 'Noto Sans CJK KR', 'sans-serif'],\n 'nirmala ui': ['Nirmala UI', 'Noto Sans Devanagari', 'Noto Sans', 'sans-serif'],\n mangal: ['Mangal', 'Noto Sans Devanagari', 'Nirmala UI', 'sans-serif'],\n 'traditional arabic': ['Traditional Arabic', 'Noto Naskh Arabic', 'Arial', 'serif'],\n 'simplified arabic': ['Simplified Arabic', 'Noto Naskh Arabic', 'Arial', 'sans-serif'],\n 'sakkal majalla': ['Sakkal Majalla', 'Noto Naskh Arabic', 'serif'],\n gisha: ['Gisha', 'Noto Sans Hebrew', 'Arial Hebrew', 'sans-serif'],\n david: ['David', 'Noto Serif Hebrew', 'Times New Roman', 'serif'],\n};\n\nconst UNIVERSAL_SANS_FALLBACKS = [\n 'Noto Sans',\n 'Noto Sans CJK SC',\n 'Noto Sans CJK JP',\n 'Noto Sans CJK KR',\n 'Noto Sans Arabic',\n 'Noto Sans Hebrew',\n 'Segoe UI Symbol',\n 'sans-serif',\n] as const;\n\nfunction normalizeFamily(value: string): string {\n return value.trim().replace(/^['\"]|['\"]$/g, '');\n}\n\nfunction parseFamilyList(value: string): string[] {\n const result: string[] = [];\n let token = '';\n let quote = '';\n for (const character of value) {\n if ((character === '\"' || character === \"'\") && (!quote || quote === character)) {\n quote = quote ? '' : character;\n token += character;\n } else if (character === ',' && !quote) {\n if (normalizeFamily(token)) result.push(normalizeFamily(token));\n token = '';\n } else token += character;\n }\n if (normalizeFamily(token)) result.push(normalizeFamily(token));\n return result;\n}\n\nfunction serializeFamily(family: string): string {\n if (GENERIC_FAMILIES.has(family.toLowerCase())) return family;\n return `\"${family.replaceAll('\"', '\\\\\"')}\"`;\n}\n\nfunction uniqueFamilies(families: readonly string[]): string[] {\n const seen = new Set<string>();\n return families.filter((family) => {\n const key = normalizeFamily(family).toLowerCase();\n if (!key || seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n}\n\nexport function resolvePptxFontFamily(\n fontFamily: string,\n options: Pick<PptxFontOptions, 'fallbacks' | 'fallbackFamilies' | 'useOfficeFallbacks'> = {},\n): string {\n const requested = parseFamilyList(fontFamily);\n const primary = requested[0] ?? '';\n const configured = options.fallbacks?.[primary] ?? options.fallbacks?.[primary.toLowerCase()];\n const configuredList = typeof configured === 'string' ? [configured] : (configured ?? []);\n const office =\n options.useOfficeFallbacks === false\n ? []\n : (OFFICE_FONT_FALLBACKS[primary.toLowerCase()] ?? []);\n const lower = primary.toLowerCase();\n const generic = /serif|times|cambria|mincho|ming|song|batang|david|garamond|palatino/.test(lower)\n ? ['Noto Serif', 'Noto Serif CJK SC', 'serif']\n : [...UNIVERSAL_SANS_FALLBACKS];\n return uniqueFamilies([\n ...(primary ? [primary] : []),\n ...configuredList,\n ...office,\n ...requested.slice(1),\n ...(options.fallbackFamilies ?? []),\n ...generic,\n ])\n .map(serializeFamily)\n .join(', ');\n}\n\nfunction fontSourceValue(source: string): string {\n if (/^(?:url|local)\\(/i.test(source.trim())) return source;\n return `url(${JSON.stringify(source)})`;\n}\n\nfunction browserHasFont(family: string): boolean {\n if (\n typeof document.fonts?.check === 'function' &&\n !document.fonts.check(`12px ${serializeFamily(family)}`)\n ) {\n return false;\n }\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n if (!context) return true;\n const sample = 'mmmmmmmmmmlliWWW0123456789';\n return ['monospace', 'serif', 'sans-serif'].some((baseline) => {\n context.font = `72px ${baseline}`;\n const baselineWidth = context.measureText(sample).width;\n context.font = `72px ${serializeFamily(family)}, ${baseline}`;\n return Math.abs(context.measureText(sample).width - baselineWidth) > 0.01;\n });\n}\n\nfunction timeout<T>(promise: Promise<T>, milliseconds: number): Promise<T> {\n if (!Number.isFinite(milliseconds) || milliseconds <= 0) return promise;\n return new Promise<T>((resolve, reject) => {\n const timer = globalThis.setTimeout(\n () => reject(new Error('Font loading timed out.')),\n milliseconds,\n );\n void promise.then(\n (value) => {\n globalThis.clearTimeout(timer);\n resolve(value);\n },\n (error: unknown) => {\n globalThis.clearTimeout(timer);\n reject(error);\n },\n );\n });\n}\n\nexport class PptxFontManager {\n private readonly faces: FontFace[] = [];\n private readonly objectUrls = new Set<string>();\n private readonly warned = new Set<string>();\n private readonly loadedFamilies = new Set<string>();\n\n constructor(\n private readonly options: PptxFontOptions = {},\n private readonly reportWarning: (warning: PresentationWarning) => void = () => {},\n ) {}\n\n private warn(warning: PresentationWarning): void {\n const key = `${warning.code}:${warning.feature ?? warning.message}`;\n if (this.warned.has(key)) return;\n this.warned.add(key);\n this.reportWarning(warning);\n }\n\n private embeddedSources(presentation: PresentationDocument): PptxFontSource[] {\n if (this.options.loadEmbeddedFonts === false) return [];\n return (presentation.embeddedFonts ?? []).flatMap((font: PresentationEmbeddedFont) => {\n const asset = presentation.assets[font.assetId];\n if (!asset?.data) return [];\n return [\n {\n family: font.family,\n source: asset.data,\n descriptors: { style: font.style, weight: font.weight },\n },\n ];\n });\n }\n\n private async loadSource(source: PptxFontSource): Promise<void> {\n if (typeof FontFace === 'undefined' || !document.fonts) return;\n let data: string | BufferSource;\n if (typeof source.source === 'string') data = fontSourceValue(source.source);\n else if (source.source instanceof Blob) {\n const url = URL.createObjectURL(source.source);\n this.objectUrls.add(url);\n data = `url(${JSON.stringify(url)})`;\n } else if (source.source instanceof Uint8Array) {\n data = source.source.slice().buffer as ArrayBuffer;\n } else data = source.source;\n const face = new FontFace(source.family, data, source.descriptors);\n document.fonts.add(face);\n this.faces.push(face);\n await timeout(face.load(), this.options.loadTimeoutMs ?? 5_000);\n this.loadedFamilies.add(source.family.toLowerCase());\n this.options.onFontLoaded?.(source.family, face);\n }\n\n async prepare(presentation: PresentationDocument): Promise<void> {\n const sources = [...this.embeddedSources(presentation), ...(this.options.sources ?? [])];\n const results = await Promise.allSettled(sources.map((source) => this.loadSource(source)));\n results.forEach((result, index) => {\n if (result.status === 'fulfilled') return;\n const family = sources[index]?.family ?? 'unknown';\n this.warn({\n code: 'missing-font',\n severity: 'warning',\n feature: family,\n message: `The supplied font “${family}” could not be loaded; a compatible fallback will be used.`,\n });\n });\n if (this.options.useOfficeFallbacks !== false) {\n const families = new Set<string>(['Calibri']);\n const seen = new Set<object>();\n const collect = (value: unknown): void => {\n if (!value || typeof value !== 'object' || seen.has(value)) return;\n seen.add(value);\n for (const [key, child] of Object.entries(value)) {\n if (/fontFamily$/i.test(key) && typeof child === 'string') families.add(child);\n else if (child && typeof child === 'object') collect(child);\n }\n };\n collect(presentation.slides);\n collect(presentation.masters);\n collect(presentation.layouts);\n for (const theme of presentation.themes) {\n for (const family of [...Object.values(theme.majorFonts ?? {}), ...Object.values(theme.minorFonts ?? {})]) {\n if (family) families.add(family);\n }\n }\n await loadOfficeFonts(document, families).catch(() => undefined);\n }\n if (document.fonts && this.options.waitForFonts !== false) {\n await timeout(\n Promise.resolve(document.fonts.ready).then(() => undefined),\n this.options.loadTimeoutMs ?? 5_000,\n ).catch(() => undefined);\n }\n this.options.onFontsReady?.();\n }\n\n applyTo(root: HTMLElement, slideIndex?: number): void {\n const elements: Element[] = [\n root,\n ...root.querySelectorAll('[style*=\"font-family\"], [font-family]'),\n ];\n for (const element of elements) {\n const raw =\n (element instanceof HTMLElement || element instanceof SVGElement\n ? element.style.fontFamily\n : '') || element.getAttribute('font-family');\n if (!raw) continue;\n const primary = parseFamilyList(raw)[0];\n if (!primary || primary.startsWith('+') || GENERIC_FAMILIES.has(primary.toLowerCase()))\n continue;\n if (element instanceof HTMLElement || element instanceof SVGElement) {\n element.style.fontFamily = resolvePptxFontFamily(raw, this.options);\n }\n if (\n this.options.reportMissingFonts === false ||\n this.loadedFamilies.has(primary.toLowerCase()) ||\n browserHasFont(primary)\n ) {\n continue;\n }\n this.warn({\n code: 'missing-font',\n severity: 'warning',\n feature: primary,\n ...(slideIndex === undefined ? {} : { slideIndex }),\n message: `Font “${primary}” is not available in this browser; the configured fallback stack is being used.`,\n });\n }\n }\n\n destroy(): void {\n if (document.fonts) for (const face of this.faces) document.fonts.delete(face);\n this.faces.length = 0;\n for (const url of this.objectUrls) URL.revokeObjectURL(url);\n this.objectUrls.clear();\n }\n}\n","/**\n * Mounts the chart artwork that the Rust parser renders with\n * `rust-office-charts` into a slide. The markup is parsed as XML and copied\n * into the host document through an allow-list, so only local paint servers,\n * inert geometry, text, and data-URI images reach the DOM. Ids are prefixed so\n * several charts on one page never collide.\n */\nimport type { ChartNode } from '@extend-ai/react-pptx-model';\n\nconst svgNamespace = 'http://www.w3.org/2000/svg';\nconst xlinkNamespace = 'http://www.w3.org/1999/xlink';\nconst maxMarkupBytes = 128 * 1024 * 1024;\nconst maxNestedDepth = 3;\n\nconst allowedElements = new Set([\n 'svg', 'g', 'defs', 'clipPath', 'rect', 'circle', 'ellipse', 'path', 'line', 'polyline', 'polygon',\n 'title', 'desc', 'text', 'tspan', 'linearGradient', 'radialGradient', 'stop', 'pattern', 'image',\n 'filter', 'feGaussianBlur', 'feFlood', 'feComposite', 'feMorphology', 'feDiffuseLighting',\n 'feSpecularLighting', 'feDistantLight', 'feDropShadow', 'feOffset', 'feBlend', 'feColorMatrix',\n 'feComponentTransfer', 'feFuncR', 'feFuncG', 'feFuncB', 'feFuncA', 'use', 'mask', 'marker', 'symbol',\n]);\n\nconst plainAttributes = new Set([\n 'x', 'y', 'width', 'height', 'x1', 'x2', 'y1', 'y2', 'cx', 'cy', 'fx', 'fy', 'r', 'rx', 'ry', 'fr',\n 'viewBox', 'preserveAspectRatio', 'transform', 'd', 'points', 'dx', 'dy', 'textLength', 'lengthAdjust',\n 'font-family', 'font-weight', 'font-style', 'font-size', 'text-decoration', 'text-anchor',\n 'dominant-baseline', 'letter-spacing', 'xml:space',\n 'stroke-linecap', 'stroke-linejoin', 'stroke-width', 'stroke-dasharray', 'stroke-miterlimit',\n 'opacity', 'fill-opacity', 'stroke-opacity', 'fill-rule', 'clip-rule', 'shape-rendering', 'overflow',\n 'offset', 'stop-opacity', 'gradientUnits', 'gradientTransform', 'patternUnits', 'patternContentUnits',\n 'patternTransform', 'maskUnits', 'maskContentUnits', 'markerUnits', 'markerWidth', 'markerHeight',\n 'refX', 'refY', 'orient', 'color-interpolation', 'color-interpolation-filters',\n 'type', 'mode', 'values', 'slope', 'intercept', 'tableValues', 'amplitude', 'exponent',\n 'filterUnits', 'primitiveUnits', 'in', 'in2', 'result', 'stdDeviation', 'flood-opacity', 'operator',\n 'radius', 'surfaceScale', 'diffuseConstant', 'specularConstant', 'specularExponent', 'azimuth',\n 'elevation', 'k1', 'k2', 'k3', 'k4', 'pointer-events',\n 'data-chart-kind', 'data-chart-series', 'data-chart-point', 'data-chart-x', 'data-chart-y',\n 'data-chart-effect', 'data-chart-drawing', 'data-chart-overflow',\n]);\n\nconst paintAttributes = new Set([\n 'fill', 'stroke', 'stop-color', 'flood-color', 'lighting-color', 'clip-path', 'filter', 'mask',\n 'marker-start', 'marker-mid', 'marker-end',\n]);\n\nconst colorPattern = /^(?:#[\\da-fA-F]{3,8}|[a-zA-Z]+|rgba?\\(\\s*[\\d.%]+(?:\\s*[, ]\\s*[\\d.%]+){2,3}\\s*\\))$/;\nconst rasterDataUrl = /^data:image\\/(?:png|jpeg|gif|webp);base64,[A-Za-z0-9+/]+={0,2}$/;\nconst svgDataUrlPrefix = 'data:image/svg+xml;base64,';\n\nlet sequence = 0;\n\nfunction isHref(name: string): boolean {\n return name === 'href' || name === 'xlink:href';\n}\n\nfunction decodeBase64(value: string): string {\n const bytes = Uint8Array.from(atob(value), (character) => character.charCodeAt(0));\n return new TextDecoder().decode(bytes);\n}\n\nfunction encodeBase64(value: string): string {\n const bytes = new TextEncoder().encode(value);\n const chunks: string[] = [];\n for (let offset = 0; offset < bytes.length; offset += 0x8000) {\n chunks.push(String.fromCharCode(...bytes.subarray(offset, offset + 0x8000)));\n }\n return btoa(chunks.join(''));\n}\n\n/**\n * Parses chart SVG markup and returns a detached, sanitized `<svg>` element,\n * or null when the markup is not an SVG document or uses a disallowed element.\n */\nexport function sanitizeChartSvg(markup: string, prefix: string, depth = 0): SVGSVGElement | null {\n if (depth > maxNestedDepth || markup.length > maxMarkupBytes) return null;\n const root = new DOMParser().parseFromString(markup, 'image/svg+xml').documentElement;\n if (root.localName !== 'svg' || root.namespaceURI !== svgNamespace) return null;\n const svg = root as unknown as SVGSVGElement;\n const ids = new Set(Array.from(svg.querySelectorAll('[id]'), (node) => node.id));\n let imageIndex = 0;\n\n for (const node of [svg, ...Array.from(svg.querySelectorAll('*'))]) {\n if (node.namespaceURI !== svgNamespace || !allowedElements.has(node.localName)) return null;\n for (const attribute of Array.from(node.attributes)) {\n const { name, value } = attribute;\n if (name === 'xmlns' || name === 'xmlns:xlink') continue;\n if (attribute.namespaceURI && attribute.namespaceURI !== xlinkNamespace && name !== 'xml:space') {\n node.removeAttributeNode(attribute);\n continue;\n }\n if (plainAttributes.has(name)) continue;\n if (name === 'id') {\n if (/^[\\w.-]+$/.test(value)) node.setAttribute('id', prefix + value);\n else node.removeAttribute('id');\n continue;\n }\n if (isHref(name) && node.localName === 'image') {\n if (rasterDataUrl.test(value)) {\n if (name !== 'href') {\n node.removeAttributeNode(attribute);\n node.setAttribute('href', value);\n }\n continue;\n }\n if (value.startsWith(svgDataUrlPrefix)) {\n try {\n const nested = sanitizeChartSvg(\n decodeBase64(value.slice(svgDataUrlPrefix.length)),\n `${prefix}image${imageIndex++}-`,\n depth + 1,\n );\n if (!nested) return null;\n node.removeAttributeNode(attribute);\n node.setAttribute(\n 'href',\n svgDataUrlPrefix + encodeBase64(new XMLSerializer().serializeToString(nested)),\n );\n continue;\n } catch {\n return null;\n }\n }\n node.removeAttributeNode(attribute);\n continue;\n }\n if (isHref(name) && /^(?:linearGradient|radialGradient|pattern|use)$/.test(node.localName)) {\n if (/^#[\\w.-]+$/.test(value) && ids.has(value.slice(1))) {\n node.removeAttributeNode(attribute);\n node.setAttribute('href', `#${prefix}${value.slice(1)}`);\n } else {\n node.removeAttributeNode(attribute);\n }\n continue;\n }\n if (paintAttributes.has(name)) {\n const reference = /^url\\(#([\\w.-]+)\\)$/.exec(value);\n if (reference && ids.has(reference[1]!)) {\n node.setAttribute(name, `url(#${prefix}${reference[1]})`);\n continue;\n }\n if (colorPattern.test(value)) continue;\n }\n node.removeAttributeNode(attribute);\n }\n }\n return svg;\n}\n\n/**\n * Marks the series and point geometry the renderer tagged so hosts can style\n * or select them, and gives tiny markers a hit area. Geometry inside `defs`,\n * effect groups, and drawing overlays stays inert.\n */\nfunction annotateInteractiveGeometry(svg: SVGSVGElement): void {\n for (const element of Array.from(svg.querySelectorAll('[data-chart-series]'))) {\n if (element.closest('defs,[data-chart-effect],[data-chart-drawing]')) {\n element.removeAttribute('data-chart-series');\n element.removeAttribute('data-chart-point');\n element.removeAttribute('data-chart-kind');\n continue;\n }\n const series = element.getAttribute('data-chart-series');\n if (series === null) continue;\n element.setAttribute('data-xlsx-chart-series-index', series);\n const point = element.getAttribute('data-chart-point');\n if (point !== null) element.setAttribute('data-xlsx-chart-point-index', point);\n const kind = element.getAttribute('data-chart-kind');\n if (kind === 'bar') element.setAttribute('data-xlsx-chart-selection-mode', 'seriesFirst');\n if (kind === 'legendEntry') element.setAttribute('data-xlsx-chart-element-kind', 'legendEntry');\n if (kind === 'point') {\n const hit = svg.ownerDocument.createElementNS(svgNamespace, 'circle');\n hit.setAttribute('cx', element.getAttribute('data-chart-x') ?? '0');\n hit.setAttribute('cy', element.getAttribute('data-chart-y') ?? '0');\n hit.setAttribute('r', '5');\n hit.setAttribute('fill', 'transparent');\n element.append(hit);\n }\n element.setAttribute('cursor', 'pointer');\n }\n}\n\n/**\n * Replaces the contents of `container` with the sanitized chart SVG.\n * Returns false when the markup cannot be mounted safely.\n */\nexport function mountChartSvg(container: HTMLElement, markup: string, label: string): boolean {\n const svg = sanitizeChartSvg(markup, `rpv-chart-${++sequence}-`);\n if (!svg) return false;\n annotateInteractiveGeometry(svg);\n const view = container.ownerDocument.importNode(svg, true) as unknown as SVGSVGElement;\n view.style.cssText = 'width:100%;height:100%;display:block;';\n view.setAttribute('role', 'img');\n view.setAttribute('aria-label', label);\n container.replaceChildren(view);\n return true;\n}\n\n/**\n * Renders a chart node's parser-produced artwork into `container`. Returns\n * false when the parser produced no SVG for this chart (callers then fall back\n * to a plain placeholder built from the cached series summary).\n */\nexport function renderChartInto(container: HTMLElement, node: ChartNode): boolean {\n if (!node.chartSvg) return false;\n try {\n return mountChartSvg(container, node.chartSvg, node.title ?? node.name ?? 'Chart');\n } catch {\n return false;\n }\n}\n","/**\n * Bounded browser renderer for the GDI records commonly embedded in PowerPoint\n * EMF and WMF preview images. The parser is intentionally local to the viewer:\n * metafile bytes never leave the browser and malformed records fail closed.\n */\n\nexport interface MetafileRenderOptions {\n maxWidth?: number;\n maxHeight?: number;\n dpiScale?: number;\n maxCanvasDimension?: number;\n maxRecords?: number;\n fontFamilyMap?: Readonly<Record<string, string>>;\n}\n\ntype RenderCanvas = HTMLCanvasElement | OffscreenCanvas;\n\ninterface Point {\n x: number;\n y: number;\n}\n\ninterface Bounds {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\ninterface Matrix {\n a: number;\n b: number;\n c: number;\n d: number;\n e: number;\n f: number;\n}\n\ninterface Pen {\n kind: 'pen';\n color: string;\n width: number;\n style: number;\n null: boolean;\n}\n\ninterface Brush {\n kind: 'brush';\n color: string;\n style: number;\n null: boolean;\n}\n\ninterface Font {\n kind: 'font';\n family: string;\n height: number;\n weight: number;\n italic: boolean;\n underline: boolean;\n strike: boolean;\n escapement: number;\n}\n\ntype GdiObject = Pen | Brush | Font;\n\ninterface DrawingState {\n pen: Pen;\n brush: Brush;\n font: Font;\n textColor: string;\n backgroundColor: string;\n backgroundMode: number;\n textAlign: number;\n fillMode: CanvasFillRule;\n current: Point;\n windowOrigin: Point;\n windowExtent: Point;\n viewportOrigin: Point;\n viewportExtent: Point;\n mappingEnabled: boolean;\n world: Matrix;\n}\n\ninterface Surface {\n canvas: RenderCanvas;\n context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D;\n scaleX: number;\n scaleY: number;\n}\n\nconst DEFAULT_MAX_DIMENSION = 4_096;\nconst DEFAULT_MAX_RECORDS = 200_000;\nconst DEFAULT_FONT: Font = {\n kind: 'font',\n family: 'sans-serif',\n height: 12,\n weight: 400,\n italic: false,\n underline: false,\n strike: false,\n escapement: 0,\n};\nconst DEFAULT_PEN: Pen = { kind: 'pen', color: '#000000', width: 1, style: 0, null: false };\nconst DEFAULT_BRUSH: Brush = {\n kind: 'brush',\n color: '#ffffff',\n style: 0,\n null: false,\n};\n\nfunction finitePositive(value: number | undefined, fallback: number): number {\n return value !== undefined && Number.isFinite(value) && value > 0 ? value : fallback;\n}\n\nfunction readOptions(\n maxWidth: number | undefined,\n maxHeight: number | undefined,\n optionsOrScale: MetafileRenderOptions | number | undefined,\n): Required<Omit<MetafileRenderOptions, 'fontFamilyMap'>> & {\n fontFamilyMap: Readonly<Record<string, string>>;\n} {\n const options =\n typeof optionsOrScale === 'number' ? { dpiScale: optionsOrScale } : optionsOrScale;\n return {\n maxWidth: finitePositive(options?.maxWidth ?? maxWidth, Number.POSITIVE_INFINITY),\n maxHeight: finitePositive(options?.maxHeight ?? maxHeight, Number.POSITIVE_INFINITY),\n dpiScale: Math.min(4, finitePositive(options?.dpiScale, 1)),\n maxCanvasDimension: Math.floor(\n finitePositive(options?.maxCanvasDimension, DEFAULT_MAX_DIMENSION),\n ),\n maxRecords: Math.floor(finitePositive(options?.maxRecords, DEFAULT_MAX_RECORDS)),\n fontFamilyMap: options?.fontFamilyMap ?? {},\n };\n}\n\nfunction createSurface(\n logicalWidth: number,\n logicalHeight: number,\n options: ReturnType<typeof readOptions>,\n): Surface | undefined {\n if (!(logicalWidth > 0) || !(logicalHeight > 0)) return undefined;\n const fit = Math.min(\n 1,\n options.maxWidth / logicalWidth,\n options.maxHeight / logicalHeight,\n options.maxCanvasDimension / (logicalWidth * options.dpiScale),\n options.maxCanvasDimension / (logicalHeight * options.dpiScale),\n );\n const width = Math.max(1, Math.round(logicalWidth * fit * options.dpiScale));\n const height = Math.max(1, Math.round(logicalHeight * fit * options.dpiScale));\n let canvas: RenderCanvas;\n if (typeof OffscreenCanvas !== 'undefined') canvas = new OffscreenCanvas(width, height);\n else if (typeof document !== 'undefined') {\n canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n } else return undefined;\n const context = canvas.getContext('2d');\n if (!context) return undefined;\n return {\n canvas,\n context: context as CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\n scaleX: width / logicalWidth,\n scaleY: height / logicalHeight,\n };\n}\n\nasync function exportPng(canvas: RenderCanvas): Promise<string | null> {\n if ('convertToBlob' in canvas) {\n const blob = await canvas.convertToBlob({ type: 'image/png' });\n if (typeof FileReader !== 'undefined') {\n return await new Promise<string | null>((resolve) => {\n const reader = new FileReader();\n reader.onerror = () => resolve(null);\n reader.onload = () => resolve(typeof reader.result === 'string' ? reader.result : null);\n reader.readAsDataURL(blob);\n });\n }\n const bytes = new Uint8Array(await blob.arrayBuffer());\n let binary = '';\n for (const byte of bytes) binary += String.fromCharCode(byte);\n return typeof btoa === 'function' ? `data:image/png;base64,${btoa(binary)}` : null;\n }\n return canvas.toDataURL('image/png');\n}\n\nfunction colorRef(view: DataView, offset: number): string {\n const hex = (value: number) => value.toString(16).padStart(2, '0');\n return `#${hex(view.getUint8(offset))}${hex(view.getUint8(offset + 1))}${hex(view.getUint8(offset + 2))}`;\n}\n\nfunction readUtf16(view: DataView, offset: number, characters: number): string {\n const end = Math.min(view.byteLength, offset + characters * 2);\n let value = '';\n for (let cursor = offset; cursor + 1 < end; cursor += 2) {\n const code = view.getUint16(cursor, true);\n if (code === 0) break;\n value += String.fromCharCode(code);\n }\n return value;\n}\n\nfunction readAnsi(view: DataView, offset: number, length: number): string {\n const end = Math.min(view.byteLength, offset + length);\n let value = '';\n for (let cursor = offset; cursor < end; cursor += 1) {\n const code = view.getUint8(cursor);\n if (code === 0) break;\n value += String.fromCharCode(code);\n }\n return value;\n}\n\nfunction fontFamily(face: string, map: Readonly<Record<string, string>>): string {\n const clean = face.trim() || 'sans-serif';\n const mapped = map[clean] ?? map[clean.toLowerCase()] ?? clean;\n return /^(?:serif|sans-serif|monospace|system-ui)$/i.test(mapped)\n ? mapped\n : `\"${mapped.replaceAll('\"', '\\\\\"')}\"`;\n}\n\nfunction cloneState(state: DrawingState): DrawingState {\n return {\n ...state,\n pen: { ...state.pen },\n brush: { ...state.brush },\n font: { ...state.font },\n current: { ...state.current },\n windowOrigin: { ...state.windowOrigin },\n windowExtent: { ...state.windowExtent },\n viewportOrigin: { ...state.viewportOrigin },\n viewportExtent: { ...state.viewportExtent },\n world: { ...state.world },\n };\n}\n\nfunction initialState(bounds: Bounds): DrawingState {\n return {\n pen: { ...DEFAULT_PEN },\n brush: { ...DEFAULT_BRUSH },\n font: { ...DEFAULT_FONT },\n textColor: '#000000',\n backgroundColor: '#ffffff',\n backgroundMode: 2,\n textAlign: 0,\n fillMode: 'nonzero',\n current: { x: 0, y: 0 },\n windowOrigin: { x: bounds.left, y: bounds.top },\n windowExtent: { x: bounds.right - bounds.left, y: bounds.bottom - bounds.top },\n viewportOrigin: { x: 0, y: 0 },\n viewportExtent: { x: bounds.right - bounds.left, y: bounds.bottom - bounds.top },\n mappingEnabled: false,\n world: { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0 },\n };\n}\n\nclass GdiRenderer {\n readonly objects = new Map<number, GdiObject>();\n readonly stack: DrawingState[] = [];\n state: DrawingState;\n\n constructor(\n readonly context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\n readonly bounds: Bounds,\n readonly scaleX: number,\n readonly scaleY: number,\n readonly familyMap: Readonly<Record<string, string>>,\n ) {\n this.state = initialState(bounds);\n }\n\n point(x: number, y: number): Point {\n const matrix = this.state.world;\n const transformed = {\n x: matrix.a * x + matrix.c * y + matrix.e,\n y: matrix.b * x + matrix.d * y + matrix.f,\n };\n const deviceX = this.state.mappingEnabled\n ? ((transformed.x - this.state.windowOrigin.x) / (this.state.windowExtent.x || 1)) *\n (this.state.viewportExtent.x || 1) +\n this.state.viewportOrigin.x\n : transformed.x;\n const deviceY = this.state.mappingEnabled\n ? ((transformed.y - this.state.windowOrigin.y) / (this.state.windowExtent.y || 1)) *\n (this.state.viewportExtent.y || 1) +\n this.state.viewportOrigin.y\n : transformed.y;\n return {\n x: (deviceX - this.bounds.left) * this.scaleX,\n y: (deviceY - this.bounds.top) * this.scaleY,\n };\n }\n\n lengthX(value: number): number {\n return (\n Math.abs(\n this.state.mappingEnabled\n ? (value / (this.state.windowExtent.x || 1)) * (this.state.viewportExtent.x || 1)\n : value,\n ) * this.scaleX\n );\n }\n\n lengthY(value: number): number {\n return (\n Math.abs(\n this.state.mappingEnabled\n ? (value / (this.state.windowExtent.y || 1)) * (this.state.viewportExtent.y || 1)\n : value,\n ) * this.scaleY\n );\n }\n\n applyPen(): boolean {\n const pen = this.state.pen;\n if (pen.null) return false;\n this.context.strokeStyle = pen.color;\n this.context.lineWidth = Math.max(1, this.lengthX(pen.width || 1));\n const dash = pen.style & 0x0f;\n this.context.setLineDash?.(\n dash === 1 ? [8, 4] : dash === 2 ? [2, 3] : dash === 3 ? [8, 3, 2, 3] : [],\n );\n return true;\n }\n\n applyBrush(): boolean {\n if (this.state.brush.null) return false;\n this.context.fillStyle = this.state.brush.color;\n return true;\n }\n\n paintPath(close = false): void {\n if (close) this.context.closePath();\n if (this.applyBrush() && close) this.context.fill(this.state.fillMode);\n if (this.applyPen()) this.context.stroke();\n }\n\n selectObject(index: number): void {\n const object = index >= 0x80000000 ? stockObject(index & 0x7fffffff) : this.objects.get(index);\n if (!object) return;\n if (object.kind === 'pen') this.state.pen = { ...object };\n else if (object.kind === 'brush') this.state.brush = { ...object };\n else this.state.font = { ...object };\n }\n\n drawText(text: string, x: number, y: number): void {\n if (!text) return;\n const position = this.point(x, y);\n const size = Math.max(8, this.lengthY(this.state.font.height));\n const weight = Math.max(100, Math.min(900, Math.round(this.state.font.weight / 100) * 100));\n const weightPart = weight === 400 ? '' : `${weight} `;\n this.context.font = `${this.state.font.italic ? 'italic ' : ''}${weightPart}${size}px ${fontFamily(this.state.font.family, this.familyMap)}`;\n this.context.fillStyle = this.state.textColor;\n this.context.textAlign =\n (this.state.textAlign & 6) === 6\n ? 'center'\n : (this.state.textAlign & 2) === 2\n ? 'right'\n : 'left';\n this.context.textBaseline =\n (this.state.textAlign & 24) === 24\n ? 'alphabetic'\n : (this.state.textAlign & 8) === 8\n ? 'bottom'\n : 'top';\n const angle = (-this.state.font.escapement / 10) * (Math.PI / 180);\n if (angle) {\n this.context.save();\n this.context.translate(position.x, position.y);\n this.context.rotate(angle);\n this.context.fillText(text, 0, 0);\n this.context.restore();\n } else this.context.fillText(text, position.x, position.y);\n }\n}\n\nfunction stockObject(index: number): GdiObject | undefined {\n if (index === 0) return { ...DEFAULT_BRUSH };\n if (index === 4) return { ...DEFAULT_BRUSH, color: '#000000' };\n if (index === 5) return { ...DEFAULT_BRUSH, null: true };\n if (index === 6) return { ...DEFAULT_PEN, color: '#ffffff' };\n if (index === 7) return { ...DEFAULT_PEN };\n if (index === 8) return { ...DEFAULT_PEN, null: true };\n if (index >= 10 && index <= 17) return { ...DEFAULT_FONT };\n return undefined;\n}\n\nfunction validRange(view: DataView, offset: number, length: number): boolean {\n return offset >= 0 && length >= 0 && offset <= view.byteLength - length;\n}\n\nfunction drawRectangle(renderer: GdiRenderer, bounds: Bounds, radius?: Point): void {\n const first = renderer.point(bounds.left, bounds.top);\n const second = renderer.point(bounds.right, bounds.bottom);\n const x = Math.min(first.x, second.x);\n const y = Math.min(first.y, second.y);\n const width = Math.abs(second.x - first.x);\n const height = Math.abs(second.y - first.y);\n renderer.context.beginPath();\n if (radius && 'roundRect' in renderer.context) {\n renderer.context.roundRect(x, y, width, height, [\n renderer.lengthX(radius.x) / 2,\n renderer.lengthY(radius.y) / 2,\n ]);\n } else renderer.context.rect(x, y, width, height);\n renderer.paintPath(true);\n}\n\nfunction drawEllipse(renderer: GdiRenderer, bounds: Bounds): void {\n const first = renderer.point(bounds.left, bounds.top);\n const second = renderer.point(bounds.right, bounds.bottom);\n const centerX = (first.x + second.x) / 2;\n const centerY = (first.y + second.y) / 2;\n renderer.context.beginPath();\n renderer.context.ellipse(\n centerX,\n centerY,\n Math.abs(second.x - first.x) / 2,\n Math.abs(second.y - first.y) / 2,\n 0,\n 0,\n Math.PI * 2,\n );\n renderer.paintPath(true);\n}\n\nfunction drawPoints(renderer: GdiRenderer, points: Point[], close: boolean): void {\n const first = points[0];\n if (!first) return;\n const start = renderer.point(first.x, first.y);\n renderer.context.beginPath();\n renderer.context.moveTo(start.x, start.y);\n for (const point of points.slice(1)) {\n const next = renderer.point(point.x, point.y);\n renderer.context.lineTo(next.x, next.y);\n }\n renderer.paintPath(close);\n}\n\nfunction readBounds32(view: DataView, offset: number): Bounds {\n return {\n left: view.getInt32(offset, true),\n top: view.getInt32(offset + 4, true),\n right: view.getInt32(offset + 8, true),\n bottom: view.getInt32(offset + 12, true),\n };\n}\n\nfunction replayEmfRecord(\n renderer: GdiRenderer,\n view: DataView,\n recordOffset: number,\n type: number,\n size: number,\n): boolean {\n const data = recordOffset + 8;\n switch (type) {\n case 9:\n renderer.state.windowExtent = {\n x: view.getInt32(data, true),\n y: view.getInt32(data + 4, true),\n };\n renderer.state.mappingEnabled = true;\n break;\n case 10:\n renderer.state.windowOrigin = {\n x: view.getInt32(data, true),\n y: view.getInt32(data + 4, true),\n };\n renderer.state.mappingEnabled = true;\n break;\n case 11:\n renderer.state.viewportExtent = {\n x: view.getInt32(data, true),\n y: view.getInt32(data + 4, true),\n };\n renderer.state.mappingEnabled = true;\n break;\n case 12:\n renderer.state.viewportOrigin = {\n x: view.getInt32(data, true),\n y: view.getInt32(data + 4, true),\n };\n renderer.state.mappingEnabled = true;\n break;\n case 14:\n return false;\n case 15: {\n const point = renderer.point(view.getInt32(data, true), view.getInt32(data + 4, true));\n renderer.context.fillStyle = colorRef(view, data + 8);\n renderer.context.fillRect(point.x, point.y, 1, 1);\n break;\n }\n case 17:\n renderer.state.mappingEnabled = view.getInt32(data, true) !== 1;\n break;\n case 18:\n renderer.state.backgroundMode = view.getInt32(data, true);\n break;\n case 19:\n renderer.state.fillMode = view.getInt32(data, true) === 1 ? 'evenodd' : 'nonzero';\n break;\n case 22:\n renderer.state.textAlign = view.getInt32(data, true);\n break;\n case 24:\n renderer.state.textColor = colorRef(view, data);\n break;\n case 25:\n renderer.state.backgroundColor = colorRef(view, data);\n break;\n case 27:\n renderer.state.current = {\n x: view.getInt32(data, true),\n y: view.getInt32(data + 4, true),\n };\n break;\n case 30: {\n const bounds = readBounds32(view, data);\n const first = renderer.point(bounds.left, bounds.top);\n const second = renderer.point(bounds.right, bounds.bottom);\n renderer.context.beginPath();\n renderer.context.rect(first.x, first.y, second.x - first.x, second.y - first.y);\n renderer.context.clip();\n break;\n }\n case 33:\n renderer.stack.push(cloneState(renderer.state));\n renderer.context.save();\n break;\n case 34: {\n const restored = renderer.stack.pop();\n if (restored) {\n renderer.state = restored;\n renderer.context.restore();\n }\n break;\n }\n case 35:\n renderer.state.world = {\n a: view.getFloat32(data, true),\n b: view.getFloat32(data + 4, true),\n c: view.getFloat32(data + 8, true),\n d: view.getFloat32(data + 12, true),\n e: view.getFloat32(data + 16, true),\n f: view.getFloat32(data + 20, true),\n };\n break;\n case 37:\n renderer.selectObject(view.getUint32(data, true));\n break;\n case 38:\n renderer.objects.set(view.getUint32(data, true), {\n kind: 'pen',\n style: view.getUint32(data + 4, true),\n width: Math.abs(view.getInt32(data + 8, true)) || 1,\n color: colorRef(view, data + 16),\n null: false,\n });\n break;\n case 39: {\n const style = view.getUint32(data + 4, true);\n renderer.objects.set(view.getUint32(data, true), {\n kind: 'brush',\n style,\n color: colorRef(view, data + 8),\n null: style === 1,\n });\n break;\n }\n case 40:\n renderer.objects.delete(view.getUint32(data, true));\n break;\n case 42:\n drawEllipse(renderer, readBounds32(view, data));\n break;\n case 43:\n drawRectangle(renderer, readBounds32(view, data));\n break;\n case 44:\n drawRectangle(renderer, readBounds32(view, data), {\n x: view.getInt32(data + 16, true),\n y: view.getInt32(data + 20, true),\n });\n break;\n case 54: {\n const end = { x: view.getInt32(data, true), y: view.getInt32(data + 4, true) };\n drawPoints(renderer, [renderer.state.current, end], false);\n renderer.state.current = end;\n break;\n }\n case 82:\n renderer.objects.set(view.getUint32(data, true), {\n kind: 'font',\n height: Math.abs(view.getInt32(data + 4, true)) || 12,\n escapement: view.getInt32(data + 12, true),\n weight: view.getInt32(data + 20, true) || 400,\n italic: view.getUint8(data + 24) !== 0,\n underline: view.getUint8(data + 25) !== 0,\n strike: view.getUint8(data + 26) !== 0,\n family: readUtf16(view, data + 32, 32) || 'sans-serif',\n });\n break;\n case 84: {\n const count = view.getUint32(data + 36, true);\n const stringOffset = view.getUint32(data + 40, true);\n if (count <= 1_000_000 && stringOffset >= 8 && stringOffset + count * 2 <= size) {\n renderer.drawText(\n readUtf16(view, recordOffset + stringOffset, count),\n view.getInt32(data + 28, true),\n view.getInt32(data + 32, true),\n );\n }\n break;\n }\n case 3:\n case 4:\n case 85:\n case 86:\n case 87: {\n const count = view.getUint32(data + 16, true);\n const short = type >= 85;\n const stride = short ? 4 : 8;\n if (count > 1_000_000 || 20 + count * stride > size - 8) break;\n const points: Point[] = [];\n for (let index = 0; index < count; index += 1) {\n const offset = data + 20 + index * stride;\n points.push({\n x: short ? view.getInt16(offset, true) : view.getInt32(offset, true),\n y: short ? view.getInt16(offset + 2, true) : view.getInt32(offset + 4, true),\n });\n }\n drawPoints(renderer, points, type === 3 || type === 86);\n break;\n }\n }\n return true;\n}\n\nfunction emfBounds(view: DataView): Bounds | undefined {\n if (view.byteLength < 88 || view.getUint32(0, true) !== 1) return undefined;\n const bounds = readBounds32(view, 8);\n if (bounds.right > bounds.left && bounds.bottom > bounds.top) return bounds;\n return undefined;\n}\n\nexport async function renderEmfToDataUrl(\n buffer: ArrayBuffer,\n maxWidth?: number,\n maxHeight?: number,\n optionsOrScale?: MetafileRenderOptions | number,\n): Promise<string | null> {\n try {\n const view = new DataView(buffer);\n const bounds = emfBounds(view);\n if (!bounds) return null;\n const options = readOptions(maxWidth, maxHeight, optionsOrScale);\n const surface = createSurface(bounds.right - bounds.left, bounds.bottom - bounds.top, options);\n if (!surface) return null;\n const renderer = new GdiRenderer(\n surface.context,\n bounds,\n surface.scaleX,\n surface.scaleY,\n options.fontFamilyMap,\n );\n let offset = 0;\n let records = 0;\n while (offset + 8 <= view.byteLength && records < options.maxRecords) {\n const type = view.getUint32(offset, true);\n const size = view.getUint32(offset + 4, true);\n if (size < 8 || size % 4 !== 0 || !validRange(view, offset, size)) return null;\n records += 1;\n const keepGoing = replayEmfRecord(renderer, view, offset, type, size);\n offset += size;\n if (!keepGoing) break;\n }\n return await exportPng(surface.canvas);\n } catch {\n return null;\n }\n}\n\nconst PLACEABLE_WMF_KEY = 0x9ac6cdd7;\n\ninterface WmfHeader {\n recordsOffset: number;\n bounds: Bounds;\n}\n\nfunction wmfHeader(view: DataView): WmfHeader | undefined {\n if (view.byteLength < 18) return undefined;\n if (view.getUint32(0, true) === PLACEABLE_WMF_KEY) {\n if (view.byteLength < 40) return undefined;\n const bounds = {\n left: view.getInt16(6, true),\n top: view.getInt16(8, true),\n right: view.getInt16(10, true),\n bottom: view.getInt16(12, true),\n };\n if (bounds.right <= bounds.left || bounds.bottom <= bounds.top) return undefined;\n return { recordsOffset: 40, bounds };\n }\n // A non-placeable WMF has no physical bounds. Start with its logical default;\n // SETWINDOWORG/SETWINDOWEXT records refine the mapping during replay.\n return { recordsOffset: 18, bounds: { left: 0, top: 0, right: 1_024, bottom: 768 } };\n}\n\nfunction addWmfObject(renderer: GdiRenderer, object: GdiObject): void {\n let index = 0;\n while (renderer.objects.has(index)) index += 1;\n renderer.objects.set(index, object);\n}\n\nfunction wmfPoint(view: DataView, offset: number): Point {\n return { x: view.getInt16(offset, true), y: view.getInt16(offset + 2, true) };\n}\n\nfunction replayWmfRecord(\n renderer: GdiRenderer,\n view: DataView,\n data: number,\n functionId: number,\n dataLength: number,\n): boolean {\n switch (functionId) {\n case 0x0000:\n return false;\n case 0x001e:\n renderer.stack.push(cloneState(renderer.state));\n renderer.context.save();\n break;\n case 0x0102:\n renderer.state.backgroundMode = view.getUint16(data, true);\n break;\n case 0x0106:\n renderer.state.fillMode = view.getUint16(data, true) === 1 ? 'evenodd' : 'nonzero';\n break;\n case 0x012d:\n renderer.selectObject(view.getUint16(data, true));\n break;\n case 0x012e:\n renderer.state.textAlign = view.getUint16(data, true);\n break;\n case 0x0127: {\n const restored = renderer.stack.pop();\n if (restored) {\n renderer.state = restored;\n renderer.context.restore();\n }\n break;\n }\n case 0x01f0:\n renderer.objects.delete(view.getUint16(data, true));\n break;\n case 0x0201:\n renderer.state.backgroundColor = colorRef(view, data);\n break;\n case 0x0209:\n renderer.state.textColor = colorRef(view, data);\n break;\n case 0x020b:\n renderer.state.windowOrigin = {\n x: view.getInt16(data + 2, true),\n y: view.getInt16(data, true),\n };\n renderer.state.mappingEnabled = true;\n break;\n case 0x020c:\n renderer.state.windowExtent = {\n x: view.getInt16(data + 2, true),\n y: view.getInt16(data, true),\n };\n renderer.state.mappingEnabled = true;\n break;\n case 0x0214:\n renderer.state.current = {\n x: view.getInt16(data + 2, true),\n y: view.getInt16(data, true),\n };\n break;\n case 0x0213: {\n const end = { x: view.getInt16(data + 2, true), y: view.getInt16(data, true) };\n drawPoints(renderer, [renderer.state.current, end], false);\n renderer.state.current = end;\n break;\n }\n case 0x02fa:\n addWmfObject(renderer, {\n kind: 'pen',\n style: view.getUint16(data, true),\n width: Math.abs(view.getInt16(data + 2, true)) || 1,\n color: colorRef(view, data + 6),\n null: false,\n });\n break;\n case 0x02fc: {\n const style = view.getUint16(data, true);\n addWmfObject(renderer, {\n kind: 'brush',\n style,\n color: colorRef(view, data + 2),\n null: style === 1,\n });\n break;\n }\n case 0x02fb:\n addWmfObject(renderer, {\n kind: 'font',\n height: Math.abs(view.getInt16(data, true)) || 12,\n escapement: view.getInt16(data + 4, true),\n weight: view.getInt16(data + 8, true) || 400,\n italic: view.getUint8(data + 10) !== 0,\n underline: view.getUint8(data + 11) !== 0,\n strike: view.getUint8(data + 12) !== 0,\n family: readAnsi(view, data + 18, Math.max(0, dataLength - 18)) || 'sans-serif',\n });\n break;\n case 0x0324:\n case 0x0325: {\n const count = view.getUint16(data, true);\n if (2 + count * 4 > dataLength) break;\n const points: Point[] = [];\n for (let index = 0; index < count; index += 1) {\n points.push(wmfPoint(view, data + 2 + index * 4));\n }\n drawPoints(renderer, points, functionId === 0x0324);\n break;\n }\n case 0x0418: {\n const bottom = view.getInt16(data, true);\n const right = view.getInt16(data + 2, true);\n const top = view.getInt16(data + 4, true);\n const left = view.getInt16(data + 6, true);\n drawEllipse(renderer, { left, top, right, bottom });\n break;\n }\n case 0x041b: {\n const bottom = view.getInt16(data, true);\n const right = view.getInt16(data + 2, true);\n const top = view.getInt16(data + 4, true);\n const left = view.getInt16(data + 6, true);\n drawRectangle(renderer, { left, top, right, bottom });\n break;\n }\n case 0x061c: {\n const bottom = view.getInt16(data + 4, true);\n const right = view.getInt16(data + 6, true);\n const top = view.getInt16(data + 8, true);\n const left = view.getInt16(data + 10, true);\n drawRectangle(\n renderer,\n { left, top, right, bottom },\n {\n x: view.getInt16(data + 2, true),\n y: view.getInt16(data, true),\n },\n );\n break;\n }\n case 0x0521: {\n const count = view.getUint16(data, true);\n const padded = (count + 1) & ~1;\n if (2 + padded + 4 > dataLength) break;\n renderer.drawText(\n readAnsi(view, data + 2, count),\n view.getInt16(data + 2 + padded + 2, true),\n view.getInt16(data + 2 + padded, true),\n );\n break;\n }\n case 0x0a32: {\n const count = view.getUint16(data + 4, true);\n const options = view.getUint16(data + 6, true);\n const stringOffset = data + ((options & 6) !== 0 ? 16 : 8);\n if (stringOffset + count > data + dataLength) break;\n renderer.drawText(\n readAnsi(view, stringOffset, count),\n view.getInt16(data + 2, true),\n view.getInt16(data, true),\n );\n break;\n }\n }\n return true;\n}\n\nexport async function renderWmfToDataUrl(\n buffer: ArrayBuffer,\n maxWidth?: number,\n maxHeight?: number,\n optionsOrScale?: MetafileRenderOptions | number,\n): Promise<string | null> {\n try {\n const view = new DataView(buffer);\n const header = wmfHeader(view);\n if (!header) return null;\n const options = readOptions(maxWidth, maxHeight, optionsOrScale);\n const surface = createSurface(\n header.bounds.right - header.bounds.left,\n header.bounds.bottom - header.bounds.top,\n options,\n );\n if (!surface) return null;\n const renderer = new GdiRenderer(\n surface.context,\n header.bounds,\n surface.scaleX,\n surface.scaleY,\n options.fontFamilyMap,\n );\n renderer.state.mappingEnabled = true;\n let offset = header.recordsOffset;\n let records = 0;\n while (offset + 6 <= view.byteLength && records < options.maxRecords) {\n const words = view.getUint32(offset, true);\n const size = words * 2;\n if (words < 3 || !validRange(view, offset, size)) return null;\n const functionId = view.getUint16(offset + 4, true);\n records += 1;\n const keepGoing = replayWmfRecord(renderer, view, offset + 6, functionId, size - 6);\n offset += size;\n if (!keepGoing) break;\n }\n return await exportPng(surface.canvas);\n } catch {\n return null;\n }\n}\n","import type { ViewerZoomLevel } from './types';\n\nexport const MIN_VIEWER_ZOOM = 10;\nexport const MAX_VIEWER_ZOOM = 400;\n\nexport function normalizeViewerZoomLevel(level: ViewerZoomLevel): ViewerZoomLevel {\n if (typeof level !== 'number') return level;\n if (Number.isNaN(level)) return 100;\n return Math.max(MIN_VIEWER_ZOOM, Math.min(MAX_VIEWER_ZOOM, level));\n}\n\nexport function resolveViewerZoom(\n level: ViewerZoomLevel,\n viewportWidth: number,\n viewportHeight: number,\n contentWidth: number,\n contentHeight: number,\n): number {\n const normalized = normalizeViewerZoomLevel(level);\n if (typeof normalized === 'number') return normalized;\n\n const safeContentWidth = Number.isFinite(contentWidth) && contentWidth > 0 ? contentWidth : 1;\n const safeContentHeight = Number.isFinite(contentHeight) && contentHeight > 0 ? contentHeight : 1;\n const fitWidth =\n ((Number.isFinite(viewportWidth) && viewportWidth > 0 ? viewportWidth : safeContentWidth) /\n safeContentWidth) *\n 100;\n const fitHeight =\n ((Number.isFinite(viewportHeight) && viewportHeight > 0 ? viewportHeight : safeContentHeight) /\n safeContentHeight) *\n 100;\n\n const resolved =\n normalized === 'fit-width'\n ? fitWidth\n : normalized === 'fit-page'\n ? Math.min(fitWidth, fitHeight)\n : Math.min(fitWidth, 100);\n return Math.max(MIN_VIEWER_ZOOM, Math.min(MAX_VIEWER_ZOOM, resolved));\n}\n","import type {\n FillStyle,\n ImageEffects,\n LineStyle,\n PresentationAsset,\n PicturePaintBounds,\n PresentationDocument,\n PresentationSearchResult,\n SlideNode,\n TextParagraph,\n TextRun,\n} from '@extend-ai/react-pptx-model';\nimport { renderChartInto } from './chart-svg';\nimport type {\n FitMode,\n SearchHighlightOptions,\n ViewerZoomLevel,\n ViewerZoomState,\n ViewerSearchOptions,\n VirtualizationOptions,\n} from './types';\nimport { Virtualizer } from '@tanstack/virtual-core';\nimport { OFFICE_FONT_FALLBACKS } from './fonts';\nimport { renderEmfToDataUrl, renderWmfToDataUrl } from './metafile-renderer';\nimport {\n MAX_VIEWER_ZOOM,\n MIN_VIEWER_ZOOM,\n normalizeViewerZoomLevel,\n resolveViewerZoom,\n} from './zoom';\n\nconst EMU_PER_CSS_PIXEL = 9_525;\nconst DEFAULT_TEXT_HORIZONTAL_INSET_EMU = 91_440;\nconst DEFAULT_TEXT_VERTICAL_INSET_EMU = 45_720;\nconst POWERPOINT_SINGLE_LINE_HEIGHT = 1.15;\n\ninterface TextRenderOptions {\n fontScale?: number;\n lineSpacingReduction?: number;\n textWrap?: string;\n spaceFirstLastParagraph?: boolean;\n}\n\ntype TextSpacingValue = number | { value: number; unit: 'points' | 'percent' };\n\ninterface NormalizedViewerCallbacks {\n onSlideChange?: (index: number) => void;\n onZoomChange?: (state: ViewerZoomState) => void;\n onSlideRendered?: (index: number, element: HTMLElement) => void;\n onSlideUnmounted?: (index: number) => void;\n onNodeError?: (nodeId: string, error: unknown) => void;\n}\n\ninterface DisposableHandle {\n element: HTMLElement;\n target: HTMLElement;\n ready: Promise<void>;\n setScale(scale: number): void;\n dispose(): void;\n}\n\ntype RenderListOptions = VirtualizationOptions & {\n showSlideLabels?: boolean;\n initialSlideIndex?: number;\n};\n\ninterface ListPlaceholder {\n item: HTMLElement;\n mount(): Promise<void>;\n unmount(): void;\n isMounted(): boolean;\n setScale(scale: number): void;\n}\n\ninterface ActiveListState {\n generation: number;\n options: RenderListOptions;\n placeholders: ListPlaceholder[];\n /** Deterministic offset navigation provided by the TanStack virtualizer. */\n scrollToIndex?: (index: number, options?: ScrollIntoViewOptions) => void;\n /** Recomputes list geometry without rebuilding slide DOM. */\n updateScale?: () => void;\n /** Temporarily leaves a navigation target as an empty shell so scrolling can paint first. */\n deferMount?: (index: number) => void;\n resumeMount?: (index: number) => void;\n}\n\nclass PresentationAssetCache {\n private references = 0;\n private readonly objectUrls = new Set<string>();\n private readonly assetUrls = new Map<string, string>();\n private readonly metafileUrls = new Map<string, Promise<string | undefined>>();\n private readonly pendingPictureUrls = new Map<string, Promise<string>>();\n private readonly imageDecodeWaiters: Array<() => void> = [];\n private activeImageDecodes = 0;\n private generation = 0;\n\n acquire(): this {\n this.references += 1;\n return this;\n }\n\n metafileUrl(assetId: string, contentType: string, data: Uint8Array): Promise<string | undefined> {\n const cached = this.metafileUrls.get(assetId);\n if (cached) return cached;\n const convert = contentType.includes('wmf') ? renderWmfToDataUrl : renderEmfToDataUrl;\n const ownedBytes = data.slice();\n const pending = convert(ownedBytes.buffer as ArrayBuffer, 2_048, 2_048, {\n dpiScale: 2,\n maxCanvasDimension: 4_096,\n maxRecords: 200_000,\n fontFamilyMap: METAFILE_FONT_MAP,\n }).then((url) => url || undefined);\n this.metafileUrls.set(assetId, pending);\n return pending;\n }\n\n assetUrl(asset: PresentationAsset): Promise<string | undefined> {\n if (asset.url) return Promise.resolve(asset.url);\n if (!asset.data) return Promise.resolve(undefined);\n const contentType = asset.contentType.toLowerCase();\n if (contentType.includes('emf') || contentType.includes('wmf')) {\n return this.metafileUrl(asset.id, contentType, asset.data);\n }\n const cached = this.assetUrls.get(asset.id);\n if (cached) return Promise.resolve(cached);\n const ownedBytes = asset.data.slice();\n const url = URL.createObjectURL(\n new Blob([ownedBytes.buffer as ArrayBuffer], { type: asset.contentType }),\n );\n this.objectUrls.add(url);\n this.assetUrls.set(asset.id, url);\n return Promise.resolve(url);\n }\n\n private async decodeImageUrl(url: string, generation: number): Promise<void> {\n await new Promise<void>((resolve) => {\n if (this.activeImageDecodes < 4) {\n this.activeImageDecodes += 1;\n resolve();\n } else {\n this.imageDecodeWaiters.push(resolve);\n }\n });\n try {\n if (!this.references || generation !== this.generation) throw new Error('Picture render is no longer active.');\n const image = new Image();\n image.src = url;\n await image.decode();\n } finally {\n const next = this.imageDecodeWaiters.shift();\n if (next) next();\n else this.activeImageDecodes -= 1;\n }\n }\n\n pictureUrl(svg: string): Promise<string> {\n const cached = this.pendingPictureUrls.get(svg);\n if (cached) return cached;\n const generation = this.generation;\n const operation = async (): Promise<string> => {\n const resources = new Set<string>();\n const remaining = [{ svg, depth: 0 }];\n while (remaining.length) {\n if (!this.references || generation !== this.generation) throw new Error('Picture render is no longer active.');\n const current = remaining.pop()!;\n if (current.depth > 32) throw new Error('Embedded picture nesting is too deep.');\n const document = new DOMParser().parseFromString(current.svg, 'image/svg+xml');\n const root = document.documentElement;\n if (root.namespaceURI !== 'http://www.w3.org/2000/svg' || root.localName !== 'svg' || document.getElementsByTagName('parsererror').length) {\n throw new Error('Picture artwork could not be decoded.');\n }\n for (const name of ['image', 'feImage']) {\n for (const element of document.getElementsByTagNameNS('http://www.w3.org/2000/svg', name)) {\n const source = element.getAttribute('href') ?? element.getAttributeNS('http://www.w3.org/1999/xlink', 'href');\n if (!source || source.startsWith('#') || resources.has(source)) continue;\n if (!/^data:/i.test(source)) throw new Error('Picture artwork contains an unavailable embedded resource.');\n resources.add(source);\n if (/^data:image\\/svg\\+xml[;,]/i.test(source)) {\n const separator = source.indexOf(',');\n if (separator < 0) throw new Error('Embedded picture data is invalid.');\n const fragment = source.indexOf('#', separator + 1);\n const payload = source.slice(separator + 1, fragment < 0 ? undefined : fragment);\n let bytes: Uint8Array;\n if (/;base64\\s*$/i.test(source.slice(0, separator))) {\n const binary = atob(payload.replace(/%([\\da-f]{2})/gi, (_, value: string) => String.fromCharCode(parseInt(value, 16))));\n bytes = Uint8Array.from(binary, (value) => value.charCodeAt(0));\n } else {\n const encoded = new TextEncoder().encode(payload);\n const decoded = new Uint8Array(encoded.length);\n let length = 0;\n for (let index = 0; index < encoded.length; index++) {\n const value = encoded[index]!;\n if (value === 37) {\n const hex = String.fromCharCode(encoded[index + 1] ?? 0, encoded[index + 2] ?? 0);\n if (/^[\\da-f]{2}$/i.test(hex)) {\n decoded[length++] = parseInt(hex, 16);\n index += 2;\n continue;\n }\n }\n decoded[length++] = value;\n }\n bytes = decoded.subarray(0, length);\n }\n const prefix = String.fromCharCode(...bytes.subarray(0, 256));\n const encoding = bytes[0] === 0xff && bytes[1] === 0xfe || bytes[0] === 0x3c && bytes[1] === 0\n ? 'utf-16le' : bytes[0] === 0xfe && bytes[1] === 0xff || bytes[0] === 0 && bytes[1] === 0x3c\n ? 'utf-16be' : prefix.match(/^\\uFEFF?<\\?xml[^>]*\\bencoding\\s*=\\s*[\"']([^\"']+)[\"']/i)?.[1] ?? 'utf-8';\n remaining.push({ svg: new TextDecoder(encoding, { fatal: true }).decode(bytes), depth: current.depth + 1 });\n }\n }\n }\n }\n const url = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`;\n await Promise.all([...resources, url].map((source) => this.decodeImageUrl(source, generation)));\n return url;\n };\n const pending = operation().then(\n (url) => {\n if (this.pendingPictureUrls.get(svg) === pending) this.pendingPictureUrls.delete(svg);\n return url;\n },\n (error: unknown) => {\n if (this.pendingPictureUrls.get(svg) === pending) this.pendingPictureUrls.delete(svg);\n throw error;\n },\n );\n this.pendingPictureUrls.set(svg, pending);\n return pending;\n }\n\n release(): void {\n this.references = Math.max(0, this.references - 1);\n if (this.references > 0) return;\n this.generation += 1;\n this.pendingPictureUrls.clear();\n for (const url of this.objectUrls) URL.revokeObjectURL(url);\n this.objectUrls.clear();\n this.assetUrls.clear();\n this.metafileUrls.clear();\n }\n}\n\nconst presentationAssetCaches = new WeakMap<PresentationDocument, PresentationAssetCache>();\n\nfunction acquirePresentationAssetCache(presentation: PresentationDocument): PresentationAssetCache {\n let cache = presentationAssetCaches.get(presentation);\n if (!cache) {\n cache = new PresentationAssetCache();\n presentationAssetCaches.set(presentation, cache);\n }\n return cache.acquire();\n}\n\n/** Vertical spacing between slides in continuous mode, in CSS pixels. */\nconst LIST_ITEM_GAP = 24;\n\n/**\n * Viewport rect used when layout measurements are unavailable (jsdom, SSR,\n * display: none) so the virtualizer still mounts an initial window.\n */\nconst FALLBACK_VIEWPORT_RECT = { width: 800, height: 600 };\n\nfunction pixelValue(value: string): number {\n const parsed = Number.parseFloat(value);\n return Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction scaleListAnchorOffset(\n offset: number,\n previousSlideHeight: number,\n nextSlideHeight: number,\n): number {\n if (previousSlideHeight <= 0) return offset;\n if (offset <= previousSlideHeight) return offset * (nextSlideHeight / previousSlideHeight);\n // The inter-slide gap is fixed CSS geometry and should not grow with zoom.\n return nextSlideHeight + (offset - previousSlideHeight);\n}\n\nconst METAFILE_FONT_MAP = Object.fromEntries(\n Object.entries(OFFICE_FONT_FALLBACKS).map(([family, fallbacks]) => [\n family,\n fallbacks.find(\n (candidate) => candidate.toLowerCase() !== family && !candidate.endsWith('serif'),\n ) ??\n fallbacks[0] ??\n family,\n ]),\n);\n\nfunction safeCssColorToken(raw: string): string | undefined {\n const value = raw.trim();\n if (!value || /[\\u0000-\\u001f\\u007f;{}'\"\\\\]/.test(value)) return undefined;\n if (/^(?:url|var|image|element|cross-fade)\\s*\\(/i.test(value)) return undefined;\n if (/^#(?:[\\da-f]{3,4}|[\\da-f]{6}|[\\da-f]{8})$/i.test(value)) return value;\n if (/^(?:[\\da-f]{3,4}|[\\da-f]{6}|[\\da-f]{8})$/i.test(value)) return `#${value}`;\n if (/^(?:rgb|rgba|hsl|hsla)\\([\\d\\s.,%+/-]+\\)$/i.test(value)) return value;\n if (/^[a-z]+$/i.test(value)) {\n if (/^(?:inherit|initial|unset|revert|currentcolor)$/i.test(value)) return undefined;\n const probe = document.createElement('span');\n probe.style.color = value;\n return probe.style.color ? value : undefined;\n }\n return undefined;\n}\n\nfunction color(value?: { value: string; alpha?: number }): string | undefined {\n if (!value) return undefined;\n const safe = safeCssColorToken(value.value);\n if (!safe) return undefined;\n if (value.alpha === undefined || value.alpha >= 1) return safe;\n const alpha = Math.max(0, Math.min(1, value.alpha));\n return `color-mix(in srgb, ${safe} ${Math.round(alpha * 100)}%, transparent)`;\n}\n\nfunction fill(fillStyle?: FillStyle): string | undefined {\n if (!fillStyle || fillStyle.type === 'none') return undefined;\n if (fillStyle.type === 'solid') return color(fillStyle.color);\n if (fillStyle.type === 'gradient') {\n const stops = [...fillStyle.stops]\n .sort((first, second) => first.position - second.position)\n .map((stop) => {\n const stopColor = color(stop.color);\n const position = Math.max(0, Math.min(1, stop.position));\n return stopColor ? `${stopColor} ${position * 100}%` : undefined;\n });\n if (stops.some((stop) => !stop)) return undefined;\n // DrawingML's 0-degree vector points left-to-right; CSS 90deg does the\n // same. Both increase clockwise, so the coordinate-system offset is +90.\n const cssAngle = ((((fillStyle.angle ?? 0) + 90) % 360) + 360) % 360;\n return `linear-gradient(${cssAngle}deg, ${stops.join(', ')})`;\n }\n if (fillStyle.type === 'pattern') {\n const foreground = color(fillStyle.foreground) ?? 'currentColor';\n const background = color(fillStyle.background) ?? 'transparent';\n const angle = /(?:vert|vertical)/i.test(fillStyle.preset)\n ? 90\n : /(?:diag|cross)/i.test(fillStyle.preset)\n ? 45\n : 0;\n return `repeating-linear-gradient(${angle}deg, ${foreground} 0 1px, ${background} 1px 5px)`;\n }\n return undefined;\n}\n\nfunction safeHyperlink(raw: string | undefined): string | undefined {\n if (!raw) return undefined;\n const value = raw.trim();\n if (!value || /[\\u0000-\\u001f\\u007f\\\\]/.test(value)) return undefined;\n if (value.startsWith('//')) return undefined;\n const scheme = /^([a-z][a-z\\d+.-]*):/i.exec(value)?.[1]?.toLowerCase();\n if (scheme && !['http', 'https', 'mailto', 'tel'].includes(scheme)) return undefined;\n return value;\n}\n\nfunction boundedScale(value: number | undefined): number {\n return value === undefined || !Number.isFinite(value) ? 1 : Math.max(0.01, Math.min(1, value));\n}\n\nfunction lineSpacingValue(value: TextSpacingValue, reduction: number): string {\n if (typeof value === 'object') {\n if (value.unit === 'points') return `${value.value}pt`;\n return String(value.value * POWERPOINT_SINGLE_LINE_HEIGHT * (1 - reduction));\n }\n // The public model currently carries both OOXML point and percentage spacing\n // as numbers. Percentage spacing is conventionally 50 or greater; smaller\n // values are fixed point sizes.\n return value >= 50 ? `${value * POWERPOINT_SINGLE_LINE_HEIGHT * (1 - reduction)}%` : `${value}pt`;\n}\n\nfunction paragraphSpacingValue(value: TextSpacingValue): string {\n if (typeof value === 'object') {\n return value.unit === 'points'\n ? `${value.value}pt`\n : `${value.value * POWERPOINT_SINGLE_LINE_HEIGHT}em`;\n }\n // Percentage paragraph spacing is relative to the current line height. CSS\n // vertical percentage margins are relative to width, so express it in em.\n return value >= 50 ? `${(value / 100) * POWERPOINT_SINGLE_LINE_HEIGHT}em` : `${value}pt`;\n}\n\nfunction bulletCharacter(paragraph: TextParagraph, counters: Map<number, number>): string {\n const bullet = paragraph.bullet;\n if (!bullet) return '';\n if (bullet.kind === 'number') {\n const level = paragraph.level ?? 0;\n const next = counters.get(level) ?? bullet.startAt ?? 1;\n counters.set(level, next + 1);\n for (const key of counters.keys()) if (key > level) counters.delete(key);\n return `${next}.`;\n }\n if (bullet.kind === 'picture') return '•';\n const value = bullet.value ?? '•';\n // Wingdings/Symbol private-use bullets have no useful glyph when their\n // original font is unavailable in a browser. Preserve ordinary Unicode\n // bullets and use a stable round bullet for private-use code points.\n return /[\\uE000-\\uF8FF]/u.test(value) ? '•' : value;\n}\n\nfunction isEastAsianLanguage(language: string): boolean {\n return /^(?:ja|ko|zh)(?:-|$)/i.test(language);\n}\n\nfunction isComplexScriptLanguage(language: string): boolean {\n return /^(?:ar|dv|fa|he|ku|ps|syr|ug|ur|yi)(?:-|$)/i.test(language);\n}\n\nfunction runFontFamily(run: TextRun): string | undefined {\n const language = run.language ?? run.alternativeLanguage ?? '';\n const symbolFirst = /^[\\u2000-\\u206f\\u2190-\\u2bff\\ue000-\\uf8ff\\s]+$/u.test(run.text);\n const ordered = symbolFirst\n ? [run.symbolFontFamily, run.fontFamily, run.eastAsianFontFamily, run.complexScriptFontFamily]\n : isEastAsianLanguage(language)\n ? [run.eastAsianFontFamily, run.fontFamily, run.complexScriptFontFamily, run.symbolFontFamily]\n : isComplexScriptLanguage(language) || run.rightToLeft\n ? [\n run.complexScriptFontFamily,\n run.fontFamily,\n run.eastAsianFontFamily,\n run.symbolFontFamily,\n ]\n : [\n run.fontFamily,\n run.eastAsianFontFamily,\n run.complexScriptFontFamily,\n run.symbolFontFamily,\n ];\n const families = ordered.filter(\n (family, index): family is string => Boolean(family) && ordered.indexOf(family) === index,\n );\n return families.length > 0 ? families.join(', ') : undefined;\n}\n\nfunction createMathElement(markup: string): Element | undefined {\n if (markup.length > 1024 * 1024) return undefined;\n const namespace = 'http://www.w3.org/1998/Math/MathML';\n const root = new DOMParser().parseFromString(markup, 'application/xml').documentElement;\n if (root.localName !== 'math' || root.namespaceURI !== namespace) return undefined;\n const tags = new Set(['math', 'mrow', 'mi', 'mn', 'mo', 'mtext', 'mfrac', 'msub', 'msup',\n 'msubsup', 'mmultiscripts', 'mprescripts', 'none', 'msqrt', 'mroot', 'munder', 'mover',\n 'munderover', 'mtable', 'mtr', 'mtd', 'mstyle', 'mphantom', 'mpadded']);\n const attributes = new Set(['display', 'mathvariant', 'mathsize', 'mathcolor', 'fence',\n 'stretchy', 'separator', 'largeop', 'accent', 'accentunder', 'linethickness', 'bevelled', 'width', 'height', 'depth']);\n let remaining = 16384;\n const clone = (source: Element, depth: number): Element | undefined => {\n if (--remaining < 0 || depth > 64 || source.namespaceURI !== namespace || !tags.has(source.localName)) return undefined;\n const target = document.createElementNS(namespace, source.localName);\n for (const attribute of source.attributes) {\n if (!attribute.namespaceURI && attributes.has(attribute.name)) target.setAttribute(attribute.name, attribute.value);\n }\n for (const child of source.childNodes) {\n if (child.nodeType === Node.TEXT_NODE) target.append(document.createTextNode(child.textContent ?? ''));\n else if (child instanceof Element) {\n const parsed = clone(child, depth + 1);\n if (!parsed) return undefined;\n target.append(parsed);\n }\n }\n return target;\n };\n return clone(root, 0);\n}\n\nfunction createTextRunElement(\n run: TextRun,\n paragraph: TextParagraph,\n fontScale: number,\n): HTMLElement {\n const href = safeHyperlink(run.hyperlink);\n const span = document.createElement(href ? 'a' : 'span');\n const math = run.math ? createMathElement(run.math.mathMl) : undefined;\n if (math) {\n span.append(math);\n span.dataset.rpvMath = '';\n span.style.display = 'inline-block';\n span.style.fontStyle = 'normal';\n } else span.textContent = run.text;\n const fontFamily = runFontFamily(run);\n if (fontFamily) span.style.fontFamily = fontFamily;\n if (run.fontSizePt !== undefined) span.style.fontSize = `${run.fontSizePt * fontScale}pt`;\n if (run.characterSpacingPt !== undefined)\n span.style.letterSpacing = `${run.characterSpacingPt}pt`;\n if (run.kerningThresholdPt !== undefined) {\n const effectiveFontSize = run.fontSizePt === undefined ? undefined : run.fontSizePt * fontScale;\n span.style.fontKerning =\n effectiveFontSize === undefined || effectiveFontSize >= run.kerningThresholdPt\n ? 'normal'\n : 'none';\n }\n if (run.bold) span.style.fontWeight = '700';\n if (run.italic && !math) span.style.fontStyle = 'italic';\n const decorations = [run.underline ? 'underline' : '', run.strike ? 'line-through' : ''].filter(\n Boolean,\n );\n if (decorations.length) span.style.textDecoration = decorations.join(' ');\n if (run.color) span.style.color = color(run.color) ?? '';\n if (run.baseline) {\n span.style.verticalAlign = run.baseline > 0 ? 'super' : 'sub';\n span.style.fontSize = span.style.fontSize || '0.75em';\n }\n const language = run.language ?? run.alternativeLanguage;\n if (language) span.lang = language;\n if (run.rightToLeft !== undefined) {\n span.dir = run.rightToLeft ? 'rtl' : 'ltr';\n span.style.unicodeBidi = 'embed';\n }\n if (paragraph.latinLineBreak && !isEastAsianLanguage(language ?? '')) {\n span.style.overflowWrap = 'anywhere';\n }\n if (paragraph.eastAsianLineBreak === false && isEastAsianLanguage(language ?? '')) {\n span.style.wordBreak = 'keep-all';\n }\n if (href && span instanceof HTMLAnchorElement) {\n span.href = href;\n span.target = '_blank';\n span.rel = 'noreferrer noopener';\n // Browser link defaults are not part of DrawingML. PowerPoint stores\n // hyperlink color and underline explicitly in the run properties.\n if (!run.color) span.style.color = 'inherit';\n if (!decorations.length) span.style.textDecoration = 'none';\n }\n return span;\n}\n\nfunction splitRunsIntoTabRows(runs: TextRun[]): TextRun[][][] {\n const rows: TextRun[][][] = [[[]]];\n for (const run of runs) {\n if (run.math) { rows.at(-1)!.at(-1)!.push(run); continue; }\n for (const token of run.text.split(/([\\t\\n])/u)) {\n if (!token) continue;\n if (token === '\\t') {\n rows.at(-1)!.push([]);\n } else if (token === '\\n') {\n rows.push([[]]);\n } else {\n rows\n .at(-1)!\n .at(-1)!\n .push({ ...run, text: token });\n }\n }\n }\n return rows;\n}\n\nfunction appendExplicitTabLayout(\n line: HTMLElement,\n paragraph: TextParagraph,\n fontScale: number,\n): boolean {\n const stops = [...(paragraph.tabStops ?? [])]\n .filter((stop) => Number.isFinite(stop.positionEmu) && stop.positionEmu >= 0)\n .sort((first, second) => first.positionEmu - second.positionEmu);\n if (stops.length === 0 || !paragraph.runs.some((run) => run.text.includes('\\t'))) return false;\n\n const widths: number[] = [];\n let previous = 0;\n for (const stop of stops) {\n widths.push(Math.max(0, (stop.positionEmu - previous) / EMU_PER_CSS_PIXEL));\n previous = stop.positionEmu;\n }\n const template = `${widths.map((width) => `${width}px`).join(' ')} minmax(0, 1fr)`;\n for (const cells of splitRunsIntoTabRows(paragraph.runs)) {\n const row = document.createElement('span');\n row.dataset.rpvTabRow = '';\n row.style.display = 'grid';\n row.style.position = 'relative';\n row.style.gridTemplateColumns = template;\n row.style.minWidth = '0';\n row.style.minHeight = '1em';\n cells.forEach((runs, cellIndex) => {\n const cell = document.createElement('span');\n cell.dataset.rpvTabCell = String(cellIndex);\n cell.style.minWidth = '0';\n if (cellIndex === 0) {\n cell.style.gridColumn = '1';\n } else {\n const stopIndex = Math.min(cellIndex - 1, stops.length - 1);\n const stop = stops[stopIndex]!;\n if (stop.alignment === 'left') {\n cell.style.gridColumn = String(Math.min(stopIndex + 2, stops.length + 1));\n } else if (stop.alignment === 'center') {\n cell.style.position = 'absolute';\n cell.style.left = `${stop.positionEmu / EMU_PER_CSS_PIXEL}px`;\n cell.style.transform = 'translateX(-50%)';\n } else {\n cell.style.gridColumn = String(Math.max(1, stopIndex + 1));\n cell.style.justifySelf = 'end';\n }\n }\n for (const run of runs) cell.append(createTextRunElement(run, paragraph, fontScale));\n row.append(cell);\n });\n line.append(row);\n }\n return true;\n}\n\nfunction applyText(\n container: HTMLElement,\n paragraphs: TextParagraph[],\n options: TextRenderOptions = {},\n): void {\n const fontScale = boundedScale(options.fontScale);\n const lineSpacingReduction = Math.max(0, Math.min(1, options.lineSpacingReduction ?? 0));\n const counters = new Map<number, number>();\n const wraps = !/^(?:none|nowrap)$/i.test(options.textWrap ?? 'square');\n container.style.whiteSpace = wraps ? 'pre-wrap' : 'pre';\n container.style.overflowWrap = 'normal';\n for (const [paragraphIndex, paragraph] of paragraphs.entries()) {\n const line = document.createElement('div');\n line.dataset.rpvTextParagraph = '';\n line.style.minWidth = '0';\n line.style.fontWeight = '400';\n line.style.lineHeight = String(POWERPOINT_SINGLE_LINE_HEIGHT * (1 - lineSpacingReduction));\n line.style.textAlign =\n paragraph.alignment === 'distributed' ? 'justify' : (paragraph.alignment ?? 'left');\n if (paragraph.alignment === 'distributed') {\n line.style.textAlignLast = 'justify';\n line.style.setProperty('text-justify', 'inter-character');\n } else if (paragraph.alignment === 'justify') {\n line.style.setProperty('text-justify', 'inter-word');\n }\n line.style.direction = paragraph.rtl ? 'rtl' : 'ltr';\n line.style.overflowWrap = wraps && paragraph.latinLineBreak ? 'anywhere' : 'normal';\n if (paragraph.eastAsianLineBreak !== undefined) {\n line.style.wordBreak = paragraph.eastAsianLineBreak ? 'normal' : 'keep-all';\n line.style.setProperty('line-break', paragraph.eastAsianLineBreak ? 'strict' : 'auto');\n }\n if (paragraph.hangingPunctuation) {\n line.style.setProperty('hanging-punctuation', 'first allow-end last');\n }\n if (paragraph.defaultTabSizeEmu !== undefined) {\n line.style.tabSize = `${paragraph.defaultTabSizeEmu / EMU_PER_CSS_PIXEL}px`;\n }\n line.style.marginLeft =\n paragraph.marginLeftEmu !== undefined\n ? `${paragraph.marginLeftEmu / EMU_PER_CSS_PIXEL}px`\n : paragraph.level\n ? `${paragraph.level * 1.25}em`\n : '0';\n if (paragraph.indentEmu !== undefined) {\n line.style.textIndent = `${paragraph.indentEmu / EMU_PER_CSS_PIXEL}px`;\n }\n if (\n paragraph.spaceBefore !== undefined &&\n (options.spaceFirstLastParagraph !== false || paragraphIndex !== 0)\n ) {\n line.style.marginTop = paragraphSpacingValue(paragraph.spaceBefore);\n }\n if (\n paragraph.spaceAfter !== undefined &&\n (options.spaceFirstLastParagraph !== false || paragraphIndex !== paragraphs.length - 1)\n ) {\n line.style.marginBottom = paragraphSpacingValue(paragraph.spaceAfter);\n }\n if (paragraph.lineSpacing !== undefined) {\n line.style.lineHeight = lineSpacingValue(paragraph.lineSpacing, lineSpacingReduction);\n }\n if (paragraph.bullet) {\n const marker = document.createElement('span');\n marker.dataset.rpvBullet = '';\n marker.textContent = `${bulletCharacter(paragraph, counters)}\\u00a0`;\n if (!paragraph.rtl && paragraph.indentEmu !== undefined && paragraph.indentEmu < 0) {\n marker.style.display = 'inline-block';\n marker.style.width = `${-paragraph.indentEmu / EMU_PER_CSS_PIXEL}px`;\n }\n if (paragraph.bullet.fontFamily) marker.style.fontFamily = paragraph.bullet.fontFamily;\n if (paragraph.bullet.fontSizePt !== undefined) {\n marker.style.fontSize = `${paragraph.bullet.fontSizePt * fontScale}pt`;\n } else if (paragraph.bullet.sizePercent !== undefined) {\n const surroundingSize = paragraph.runs.find(\n (run) => run.fontSizePt !== undefined,\n )?.fontSizePt;\n marker.style.fontSize =\n surroundingSize !== undefined\n ? `${surroundingSize * fontScale * paragraph.bullet.sizePercent}pt`\n : `${paragraph.bullet.sizePercent * 100}%`;\n }\n marker.setAttribute('aria-hidden', 'true');\n line.append(marker);\n }\n const usedExplicitTabs =\n !paragraph.bullet && appendExplicitTabLayout(line, paragraph, fontScale);\n if (!usedExplicitTabs) {\n for (const run of paragraph.runs)\n line.append(createTextRunElement(run, paragraph, fontScale));\n }\n container.append(line);\n }\n}\n\nfunction applyLine(element: HTMLElement, line?: LineStyle): void {\n if (!line) return;\n const width = Math.max(0, line.width ?? 1);\n const lineColor = color(line.color) ?? 'currentColor';\n const style = /dash|dot/i.test(line.dash ?? '') ? 'dashed' : 'solid';\n element.style.border = `${width}px ${style} ${lineColor}`;\n}\n\nfunction normalizedPresetGeometryPath(preset?: string): string | undefined {\n switch (preset) {\n case 'straightConnector1':\n return 'M 0 0 L 1 1';\n case 'heart':\n // ECMA-376 preset geometry, normalized from w/h coordinates to 0..1.\n return 'M 0.5 0.25 C 0.7083333333 -0.3333333333 1.5208333333 0.25 0.5 1 C -0.5208333333 0.25 0.2916666667 -0.3333333333 0.5 0.25 Z';\n default:\n return undefined;\n }\n}\n\nfunction applyGeometry(element: HTMLElement, preset?: string): void {\n switch (preset) {\n case 'ellipse':\n element.style.borderRadius = '50%';\n break;\n case 'roundRect':\n element.style.borderRadius = '10%';\n break;\n case 'triangle':\n element.style.clipPath = 'polygon(50% 0, 100% 100%, 0 100%)';\n break;\n case 'rtTriangle':\n element.style.clipPath = 'polygon(0 0, 100% 100%, 0 100%)';\n break;\n case 'diamond':\n element.style.clipPath = 'polygon(50% 0, 100% 50%, 50% 100%, 0 50%)';\n break;\n case 'parallelogram':\n element.style.clipPath = 'polygon(20% 0, 100% 0, 80% 100%, 0 100%)';\n break;\n case 'diagStripe':\n element.style.clipPath = 'polygon(0 50%, 50% 0, 100% 0, 0 100%)';\n break;\n case 'hexagon':\n element.style.clipPath = 'polygon(25% 0, 75% 0, 100% 50%, 75% 100%, 25% 100%, 0 50%)';\n break;\n case 'chevron':\n element.style.clipPath = 'polygon(0 0, 70% 0, 100% 50%, 70% 100%, 0 100%, 30% 50%)';\n break;\n case 'rightArrow':\n element.style.clipPath = 'polygon(0 25%, 75% 25%, 75% 0, 100% 50%, 75% 100%, 75% 75%, 0 75%)';\n break;\n case 'leftArrow':\n element.style.clipPath =\n 'polygon(25% 0, 25% 25%, 100% 25%, 100% 75%, 25% 75%, 25% 100%, 0 50%)';\n break;\n case 'upArrow':\n element.style.clipPath =\n 'polygon(50% 0, 100% 25%, 75% 25%, 75% 100%, 25% 100%, 25% 25%, 0 25%)';\n break;\n case 'downArrow':\n element.style.clipPath = 'polygon(25% 0, 75% 0, 75% 75%, 100% 75%, 50% 100%, 0 75%, 25% 75%)';\n break;\n case 'pentagon':\n element.style.clipPath = 'polygon(50% 0, 100% 38%, 82% 100%, 18% 100%, 0 38%)';\n break;\n case 'star5':\n element.style.clipPath =\n 'polygon(50% 0, 61% 35%, 98% 35%, 68% 57%, 79% 94%, 50% 72%, 21% 94%, 32% 57%, 2% 35%, 39% 35%)';\n break;\n }\n}\n\nfunction applyTextInsets(\n element: HTMLElement,\n insets: { top: number; right: number; bottom: number; left: number } | undefined,\n useBodyDefaults: boolean,\n): void {\n const resolved =\n insets ??\n (useBodyDefaults\n ? {\n top: DEFAULT_TEXT_VERTICAL_INSET_EMU,\n right: DEFAULT_TEXT_HORIZONTAL_INSET_EMU,\n bottom: DEFAULT_TEXT_VERTICAL_INSET_EMU,\n left: DEFAULT_TEXT_HORIZONTAL_INSET_EMU,\n }\n : undefined);\n if (!resolved) return;\n element.style.padding = `${resolved.top / EMU_PER_CSS_PIXEL}px ${resolved.right / EMU_PER_CSS_PIXEL}px ${resolved.bottom / EMU_PER_CSS_PIXEL}px ${resolved.left / EMU_PER_CSS_PIXEL}px`;\n}\n\nfunction applyTextOrientation(\n element: HTMLElement,\n textRotation?: number,\n verticalText?: string,\n rotationAsVerticalFlow = false,\n): void {\n const vertical = verticalText?.toLowerCase();\n if (vertical && vertical !== 'horz') {\n element.style.writingMode = vertical.includes('mongolian') ? 'vertical-lr' : 'vertical-rl';\n element.style.textOrientation = vertical.includes('wordartvert') ? 'upright' : 'mixed';\n }\n if (textRotation === undefined || !Number.isFinite(textRotation) || textRotation === 0) return;\n const normalized = ((textRotation % 360) + 360) % 360;\n if (rotationAsVerticalFlow && (normalized === 90 || normalized === 270)) {\n element.style.writingMode = 'vertical-rl';\n element.style.textOrientation = 'mixed';\n if (normalized === 270) element.style.transform = 'rotate(180deg)';\n return;\n }\n element.style.transform = `rotate(${textRotation}deg)`;\n element.style.transformOrigin = 'center';\n}\n\nfunction allowsTextOverflow(value: string | undefined): boolean {\n return value === undefined || /overflow/i.test(value);\n}\n\nfunction applyPicturePaintBounds(\n image: HTMLImageElement,\n bounds?: PicturePaintBounds,\n allowZeroLayout = false,\n): void {\n if (\n !bounds ||\n ![\n bounds.xPx,\n bounds.yPx,\n bounds.widthPx,\n bounds.heightPx,\n bounds.layoutWidthPx,\n bounds.layoutHeightPx,\n ].every(Number.isFinite) ||\n bounds.widthPx <= 0 ||\n bounds.heightPx <= 0 ||\n (allowZeroLayout ? bounds.layoutWidthPx < 0 : bounds.layoutWidthPx <= 0) ||\n (allowZeroLayout ? bounds.layoutHeightPx < 0 : bounds.layoutHeightPx <= 0)\n )\n return;\n const width = bounds.layoutWidthPx || 1;\n const height = bounds.layoutHeightPx || 1;\n image.style.position = 'absolute';\n image.style.left = `${(bounds.xPx / width) * 100}%`;\n image.style.top = `${(bounds.yPx / height) * 100}%`;\n image.style.width = `${(bounds.widthPx / width) * 100}%`;\n image.style.height = `${(bounds.heightPx / height) * 100}%`;\n image.style.maxWidth = 'none';\n image.style.maxHeight = 'none';\n}\n\nfunction applyCroppedImage(\n image: HTMLImageElement,\n crop: { top: number; right: number; bottom: number; left: number },\n): void {\n const horizontal = Math.max(0.000_001, 1 - crop.left - crop.right);\n const vertical = Math.max(0.000_001, 1 - crop.top - crop.bottom);\n image.style.position = 'absolute';\n image.style.maxWidth = 'none';\n image.style.maxHeight = 'none';\n image.style.width = `${100 / horizontal}%`;\n image.style.height = `${100 / vertical}%`;\n image.style.left = `${(-crop.left / horizontal) * 100}%`;\n image.style.top = `${(-crop.top / vertical) * 100}%`;\n image.style.objectFit = 'fill';\n}\n\nfunction isWordCharacter(value: string | undefined): boolean {\n return Boolean(value && /[\\p{L}\\p{N}_]/u.test(value));\n}\n\nfunction rgbChannels(value: string | undefined): [number, number, number] | undefined {\n const hex = value?.trim().replace(/^#/, '');\n if (!hex || hex.length !== 6 || !/^[\\da-f]{6}$/i.test(hex)) return undefined;\n return [\n Number.parseInt(hex.slice(0, 2), 16),\n Number.parseInt(hex.slice(2, 4), 16),\n Number.parseInt(hex.slice(4, 6), 16),\n ];\n}\n\n/**\n * Builds a hidden SVG carrying a DrawingML duotone filter: the picture is\n * reduced to luminance, then mapped from the dark color to the light color.\n */\nfunction createDuotoneFilter(\n id: string,\n dark: [number, number, number],\n light: [number, number, number],\n): SVGSVGElement {\n const namespace = 'http://www.w3.org/2000/svg';\n const svg = document.createElementNS(namespace, 'svg');\n svg.setAttribute('width', '0');\n svg.setAttribute('height', '0');\n svg.style.position = 'absolute';\n svg.setAttribute('aria-hidden', 'true');\n const filter = document.createElementNS(namespace, 'filter');\n filter.id = id;\n filter.setAttribute('color-interpolation-filters', 'sRGB');\n const luminance = document.createElementNS(namespace, 'feColorMatrix');\n luminance.setAttribute('type', 'matrix');\n luminance.setAttribute(\n 'values',\n '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 const transfer = document.createElementNS(namespace, 'feComponentTransfer');\n const channels: Array<['feFuncR' | 'feFuncG' | 'feFuncB', 0 | 1 | 2]> = [\n ['feFuncR', 0],\n ['feFuncG', 1],\n ['feFuncB', 2],\n ];\n for (const [name, channel] of channels) {\n const func = document.createElementNS(namespace, name);\n func.setAttribute('type', 'table');\n func.setAttribute('tableValues', `${dark[channel] / 255} ${light[channel] / 255}`);\n transfer.append(func);\n }\n filter.append(luminance, transfer);\n svg.append(filter);\n return svg;\n}\n\n/**\n * Builds a deterministic sRGB threshold filter for DrawingML `a:biLevel`.\n * A discrete 256-entry transfer avoids the browser-dependent rounding of a\n * very large CSS contrast filter around the threshold boundary.\n */\nfunction createBiLevelFilter(id: string, threshold: number): SVGSVGElement {\n const namespace = 'http://www.w3.org/2000/svg';\n const svg = document.createElementNS(namespace, 'svg');\n svg.setAttribute('width', '0');\n svg.setAttribute('height', '0');\n svg.style.position = 'absolute';\n svg.setAttribute('aria-hidden', 'true');\n const filter = document.createElementNS(namespace, 'filter');\n filter.id = id;\n filter.setAttribute('color-interpolation-filters', 'sRGB');\n const luminance = document.createElementNS(namespace, 'feColorMatrix');\n luminance.setAttribute('type', 'matrix');\n luminance.setAttribute(\n 'values',\n '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 const transfer = document.createElementNS(namespace, 'feComponentTransfer');\n const tableValues = Array.from({ length: 256 }, (_, index) =>\n index / 255 < threshold ? '0' : '1',\n ).join(' ');\n for (const name of ['feFuncR', 'feFuncG', 'feFuncB'] as const) {\n const func = document.createElementNS(namespace, name);\n func.setAttribute('type', 'discrete');\n func.setAttribute('tableValues', tableValues);\n transfer.append(func);\n }\n filter.append(luminance, transfer);\n svg.append(filter);\n return svg;\n}\n\nfunction searchDocument(\n presentation: PresentationDocument,\n query: string | RegExp,\n options: ViewerSearchOptions = {},\n): PresentationSearchResult[] {\n if (typeof query === 'string' && !query) return [];\n const results: PresentationSearchResult[] = [];\n const expression =\n query instanceof RegExp\n ? new RegExp(query.source, query.flags.includes('g') ? query.flags : `${query.flags}g`)\n : new RegExp(\n options.useRegex ? query : query.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'),\n options.matchCase ? 'g' : 'gi',\n );\n const visit = (slideIndex: number, nodes: SlideNode[]): void => {\n for (const node of nodes) {\n const texts: string[] = [];\n if (node.type === 'shape' && options.includeShapes !== false) {\n texts.push(...(node.paragraphs ?? []).map((p) => p.runs.map((run) => run.text).join('')));\n } else if (node.type === 'table' && options.includeTables !== false) {\n for (const row of node.rows)\n for (const cell of row) {\n if (cell.merge?.horizontal || cell.merge?.vertical) continue;\n texts.push(...cell.paragraphs.map((p) => p.runs.map((run) => run.text).join('')));\n }\n } else if (node.type === 'chart') {\n if (node.title) texts.push(node.title);\n for (const series of node.series) if (series.name) texts.push(series.name);\n } else if (node.type === 'group' && options.includeGroups !== false) {\n visit(slideIndex, node.children);\n }\n const text = texts.join('\\n');\n expression.lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = expression.exec(text))) {\n const matchedText = match[0];\n if (\n !options.wholeWord ||\n (!isWordCharacter(text[match.index - 1]) &&\n !isWordCharacter(text[match.index + matchedText.length]))\n ) {\n const radius = options.snippetRadius ?? 32;\n results.push({\n slideIndex,\n nodeId: node.id,\n nodeType: node.type,\n text,\n matchStart: match.index,\n matchEnd: match.index + matchedText.length,\n snippet: text.slice(\n Math.max(0, match.index - radius),\n match.index + matchedText.length + radius,\n ),\n bounds: node.transform,\n });\n }\n if (!matchedText) expression.lastIndex += 1;\n }\n }\n };\n for (const slide of presentation.slides) visit(slide.index, slide.nodes);\n return results;\n}\n\nexport class NormalizedPresentationViewer {\n private current = 0;\n private zoomLevel: ViewerZoomLevel = 'automatic';\n private resolvedZoom = 100;\n private readonly assetCache: PresentationAssetCache;\n private resizeObserver: ResizeObserver | undefined;\n private activeViewport: HTMLElement | undefined;\n private listCleanup: (() => void) | undefined;\n private highlight: HTMLElement | undefined;\n private activeMountResources: Set<Promise<void>> | undefined;\n private activeMountLifetime: { disposed: boolean } | undefined;\n private mountedHandles = new Set<DisposableHandle>();\n private handlesByTarget = new Map<HTMLElement, DisposableHandle>();\n private destroyed = false;\n private renderingSlideIndex: number | undefined;\n private customGeometrySequence = 0;\n private renderGeneration = 0;\n private navigationGeneration = 0;\n private lastNotifiedSlide: number | undefined;\n private lastZoomNotification: ViewerZoomState | undefined;\n private listState: ActiveListState | undefined;\n private renderState:\n { mode: 'single' } | { mode: 'continuous'; options: RenderListOptions } | undefined;\n\n constructor(\n private readonly container: HTMLElement,\n readonly presentation: PresentationDocument,\n private readonly callbacks: NormalizedViewerCallbacks = {},\n ) {\n this.assetCache = acquirePresentationAssetCache(presentation);\n }\n\n get slideCount(): number {\n return this.presentation.slides.length;\n }\n get currentSlideIndex(): number {\n return this.current;\n }\n get zoom(): ViewerZoomLevel {\n return this.zoomLevel;\n }\n get zoomPercent(): number {\n return this.resolvedZoom;\n }\n get resolvedZoomPercent(): number {\n return this.resolvedZoom;\n }\n get fitMode(): FitMode {\n return typeof this.zoomLevel === 'number' ? 'none' : 'contain';\n }\n\n private get naturalSlideWidth(): number {\n const width = this.presentation.size.widthEmu / EMU_PER_CSS_PIXEL;\n return Number.isFinite(width) && width > 0 ? width : 1;\n }\n\n private get naturalSlideHeight(): number {\n const height = this.presentation.size.heightEmu / EMU_PER_CSS_PIXEL;\n return Number.isFinite(height) && height > 0 ? height : 1;\n }\n\n private viewportSize(viewport: HTMLElement): { width: number; height: number } {\n const rect = viewport.getBoundingClientRect();\n let width = viewport.clientWidth || rect.width;\n let height = viewport.clientHeight || rect.height;\n if (typeof getComputedStyle === 'function') {\n const viewportStyle = getComputedStyle(viewport);\n width -= pixelValue(viewportStyle.paddingLeft) + pixelValue(viewportStyle.paddingRight);\n height -= pixelValue(viewportStyle.paddingTop) + pixelValue(viewportStyle.paddingBottom);\n if (viewport !== this.container) {\n const containerStyle = getComputedStyle(this.container);\n width -= pixelValue(containerStyle.paddingLeft) + pixelValue(containerStyle.paddingRight);\n height -= pixelValue(containerStyle.paddingTop) + pixelValue(containerStyle.paddingBottom);\n }\n }\n return { width: Math.max(0, width), height: Math.max(0, height) };\n }\n\n resolveZoom(level: ViewerZoomLevel, viewport = this.activeViewport ?? this.container): number {\n const size = this.viewportSize(viewport);\n return resolveViewerZoom(\n level,\n size.width,\n size.height,\n this.naturalSlideWidth,\n this.naturalSlideHeight,\n );\n }\n\n private scaleForViewport(viewport: HTMLElement): number {\n return this.resolveZoom(this.zoomLevel, viewport) / 100;\n }\n\n private publishZoom(resolvedZoom: number): void {\n const normalized = Math.max(MIN_VIEWER_ZOOM, Math.min(MAX_VIEWER_ZOOM, resolvedZoom));\n const levelChanged = this.lastZoomNotification?.level !== this.zoomLevel;\n const resolutionChanged =\n this.lastZoomNotification === undefined ||\n Math.abs(this.lastZoomNotification.resolvedZoom - normalized) > 0.01;\n this.resolvedZoom = normalized;\n if (!levelChanged && !resolutionChanged) return;\n const state = { level: this.zoomLevel, resolvedZoom: normalized } satisfies ViewerZoomState;\n this.lastZoomNotification = state;\n this.callbacks.onZoomChange?.(state);\n }\n\n private observeViewport(viewport: HTMLElement): void {\n if (this.activeViewport === viewport && this.resizeObserver) return;\n this.resizeObserver?.disconnect();\n this.resizeObserver = undefined;\n this.activeViewport = viewport;\n if (typeof ResizeObserver === 'undefined') return;\n this.resizeObserver = new ResizeObserver(() => {\n if (this.destroyed || typeof this.zoomLevel === 'number') return;\n void this.updateRenderedScale();\n });\n this.resizeObserver.observe(viewport);\n if (viewport !== this.container) this.resizeObserver.observe(this.container);\n }\n\n private isRenderActive(generation: number): boolean {\n return !this.destroyed && generation === this.renderGeneration;\n }\n\n private beginRender(): number | undefined {\n if (this.destroyed) return undefined;\n const generation = ++this.renderGeneration;\n this.navigationGeneration += 1;\n this.listCleanup?.();\n this.listCleanup = undefined;\n this.resizeObserver?.disconnect();\n this.resizeObserver = undefined;\n this.activeViewport = undefined;\n this.listState = undefined;\n this.clearSearchHighlights();\n return generation;\n }\n\n private notifySlideChange(index: number): void {\n if (this.destroyed || this.lastNotifiedSlide === index) return;\n this.lastNotifiedSlide = index;\n this.callbacks.onSlideChange?.(index);\n }\n\n private assetUrl(asset: PresentationAsset): Promise<string | undefined> {\n return this.assetCache.assetUrl(asset);\n }\n\n private applyAsset(assetId: string, apply: (url: string) => void, nodeId: string): void {\n const asset = this.presentation.assets[assetId];\n if (!asset) return;\n const resources = this.activeMountResources;\n const pending = this.assetUrl(asset)\n .then((url) => {\n if (url && !this.destroyed) apply(url);\n })\n .catch((error: unknown) => {\n if (!this.destroyed) this.callbacks.onNodeError?.(nodeId, error);\n });\n resources?.add(pending);\n }\n\n private applyImageAsset(\n image: HTMLImageElement,\n assetId: string,\n fallbackAssetId: string | undefined,\n nodeId: string,\n ): void {\n if (!fallbackAssetId || fallbackAssetId === assetId) {\n this.applyAsset(assetId, (url) => (image.src = url), nodeId);\n return;\n }\n const resources = this.activeMountResources;\n const generation = this.renderGeneration;\n const candidates = [assetId, fallbackAssetId];\n let index = 0;\n let lastError: unknown;\n const lifetime = this.activeMountLifetime;\n const active = () => this.isRenderActive(generation) && !lifetime?.disposed;\n const next = async (): Promise<void> => {\n while (active() && index < candidates.length) {\n const candidate = candidates[index++];\n if (!candidate) continue;\n const asset = this.presentation.assets[candidate];\n try {\n const url = asset ? await this.assetUrl(asset) : undefined;\n if (!active()) return;\n if (url) {\n image.src = url;\n return;\n }\n lastError = new Error('Image asset is unavailable.');\n } catch (error: unknown) {\n lastError = error;\n }\n }\n image.onerror = null;\n if (active()) this.callbacks.onNodeError?.(nodeId, lastError);\n };\n image.onerror = () => {\n lastError = new Error('Image asset could not be decoded.');\n const pending = next();\n resources?.add(pending);\n };\n image.onload = () => {\n image.onerror = null;\n image.onload = null;\n };\n const pending = next();\n resources?.add(pending);\n }\n\n private applyPictureArtwork(image: HTMLImageElement, node: Extract<SlideNode, { type: 'image' }>): void {\n const generation = this.renderGeneration;\n const resources = this.activeMountResources;\n const lifetime = this.activeMountLifetime;\n const active = () => this.isRenderActive(generation) && !lifetime?.disposed;\n const candidates = [\n node.pictureSvg ? { svg: node.pictureSvg, paintBounds: node.paintBounds } : undefined,\n node.fallbackPicture,\n ];\n const pending = (async () => {\n let lastError: unknown;\n for (const candidate of candidates) {\n if (!candidate || !active()) continue;\n try {\n const url = await this.assetCache.pictureUrl(candidate.svg);\n if (!active()) return;\n applyPicturePaintBounds(image, candidate.paintBounds ?? undefined, !!node.ink);\n image.src = url;\n return;\n } catch (error: unknown) {\n lastError = error;\n }\n }\n if (active()) this.callbacks.onNodeError?.(node.id, lastError);\n })();\n resources?.add(pending);\n }\n\n /**\n * Applies DrawingML picture recolor effects (`a:biLevel`, `a:grayscl`,\n * `a:duotone`, `a:lum`) to the element that paints the picture, matching\n * PowerPoint's rendering as closely as CSS/SVG filters allow.\n */\n private applyImageEffects(\n target: HTMLElement | SVGElement,\n effects: ImageEffects | undefined,\n filterHost: HTMLElement,\n ): void {\n if (!effects) return;\n const filters: string[] = [];\n if (effects.duotone && effects.duotone.length >= 2) {\n const dark = rgbChannels(effects.duotone[0]?.value);\n const light = rgbChannels(effects.duotone[1]?.value);\n if (dark && light) {\n const id = `rpv-duotone-${++this.customGeometrySequence}`;\n filterHost.append(createDuotoneFilter(id, dark, light));\n filters.push(`url(#${id})`);\n }\n }\n if (effects.biLevelThreshold !== undefined) {\n const threshold = Math.min(0.98, Math.max(0.02, effects.biLevelThreshold));\n const id = `rpv-bilevel-${++this.customGeometrySequence}`;\n filterHost.append(createBiLevelFilter(id, threshold));\n filters.push(`url(#${id})`);\n } else if (effects.grayscale) {\n filters.push('grayscale(1)');\n }\n if (effects.brightness) {\n filters.push(`brightness(${1 + Math.max(-1, Math.min(1, effects.brightness))})`);\n }\n if (effects.contrast) {\n filters.push(`contrast(${1 + Math.max(-1, Math.min(1, effects.contrast))})`);\n }\n if (filters.length > 0) target.style.filter = filters.join(' ');\n }\n\n private applyFill(element: HTMLElement, fillStyle: FillStyle | undefined, nodeId: string): void {\n if (fillStyle?.type === 'image') {\n const opacity = Math.max(0, Math.min(1, fillStyle.opacity ?? 1));\n const target =\n opacity < 1 || fillStyle.effects\n ? (() => {\n const layer = document.createElement('div');\n layer.dataset.rpvImageFill = '';\n layer.style.position = 'absolute';\n layer.style.inset = '0';\n layer.style.pointerEvents = 'none';\n layer.style.opacity = String(opacity);\n layer.style.zIndex = '0';\n if (!element.style.position) element.style.position = 'relative';\n element.prepend(layer);\n return layer;\n })()\n : element;\n target.style.backgroundRepeat = fillStyle.mode === 'tile' ? 'repeat' : 'no-repeat';\n if (fillStyle.mode === 'tile') target.style.backgroundSize = 'auto';\n else if (fillStyle.crop) {\n const horizontal = Math.max(0.000_001, 1 - fillStyle.crop.left - fillStyle.crop.right);\n const vertical = Math.max(0.000_001, 1 - fillStyle.crop.top - fillStyle.crop.bottom);\n target.style.backgroundSize = `${100 / horizontal}% ${100 / vertical}%`;\n const horizontalCrop = fillStyle.crop.left + fillStyle.crop.right;\n const verticalCrop = fillStyle.crop.top + fillStyle.crop.bottom;\n target.style.backgroundPosition = `${\n Math.abs(horizontalCrop) > 0.000_001 ? (fillStyle.crop.left / horizontalCrop) * 100 : 50\n }% ${Math.abs(verticalCrop) > 0.000_001 ? (fillStyle.crop.top / verticalCrop) * 100 : 50}%`;\n } else {\n target.style.backgroundSize = '100% 100%';\n }\n this.applyImageEffects(target, fillStyle.effects, element);\n this.applyAsset(\n fillStyle.assetId,\n (url) => {\n target.style.backgroundImage = `url(${JSON.stringify(url)})`;\n },\n nodeId,\n );\n return;\n }\n element.style.background = fill(fillStyle) ?? 'transparent';\n }\n\n private createCustomGeometry(\n node: Extract<SlideNode, { type: 'shape' }>,\n pathData = node.geometry.path ?? '',\n ): SVGSVGElement {\n const namespace = 'http://www.w3.org/2000/svg';\n const svg = document.createElementNS(namespace, 'svg');\n svg.dataset.rpvCustomGeometry = '';\n svg.setAttribute('viewBox', '0 0 1 1');\n svg.setAttribute('preserveAspectRatio', 'none');\n svg.style.position = 'absolute';\n svg.style.inset = '0';\n svg.style.width = '100%';\n svg.style.height = '100%';\n svg.style.overflow = 'visible';\n svg.style.pointerEvents = 'none';\n\n let renderedPathData = pathData;\n if (node.geometry.preset === 'straightConnector1') {\n if (node.transform.width === 0 && node.transform.height !== 0) {\n svg.style.left = '-0.5px';\n svg.style.width = '1px';\n renderedPathData = 'M 0.5 0 L 0.5 1';\n } else if (node.transform.height === 0 && node.transform.width !== 0) {\n svg.style.top = '-0.5px';\n svg.style.height = '1px';\n renderedPathData = 'M 0 0.5 L 1 0.5';\n }\n }\n\n const path = document.createElementNS(namespace, 'path');\n path.setAttribute('d', renderedPathData);\n path.setAttribute('vector-effect', 'non-scaling-stroke');\n path.style.fill = 'none';\n\n const fillStyle = node.fill;\n if (fillStyle?.type === 'solid') {\n path.style.fill = color(fillStyle.color) ?? 'none';\n } else if (fillStyle?.type === 'gradient' && fillStyle.stops.length) {\n const definitions = document.createElementNS(namespace, 'defs');\n const gradient = document.createElementNS(namespace, 'linearGradient');\n const gradientId = `rpv-gradient-${++this.customGeometrySequence}`;\n gradient.id = gradientId;\n const radians = ((fillStyle.angle ?? 0) * Math.PI) / 180;\n const horizontal = Math.cos(radians) / 2;\n const vertical = Math.sin(radians) / 2;\n gradient.setAttribute('x1', String(0.5 - horizontal));\n gradient.setAttribute('y1', String(0.5 - vertical));\n gradient.setAttribute('x2', String(0.5 + horizontal));\n gradient.setAttribute('y2', String(0.5 + vertical));\n for (const stopStyle of [...fillStyle.stops].sort(\n (first, second) => first.position - second.position,\n )) {\n const stop = document.createElementNS(namespace, 'stop');\n stop.setAttribute('offset', String(Math.max(0, Math.min(1, stopStyle.position))));\n stop.style.stopColor = color(stopStyle.color) ?? 'transparent';\n gradient.append(stop);\n }\n definitions.append(gradient);\n svg.append(definitions);\n path.style.fill = `url(#${gradientId})`;\n } else if (fillStyle?.type === 'pattern') {\n path.style.fill = color(fillStyle.foreground) ?? 'none';\n } else if (fillStyle?.type === 'image') {\n const definitions = document.createElementNS(namespace, 'defs');\n const clipPath = document.createElementNS(namespace, 'clipPath');\n const clipId = `rpv-clip-${++this.customGeometrySequence}`;\n clipPath.id = clipId;\n const clipShape = path.cloneNode() as SVGPathElement;\n clipShape.removeAttribute('style');\n clipPath.append(clipShape);\n definitions.append(clipPath);\n svg.append(definitions);\n\n const image = document.createElementNS(namespace, 'image');\n const horizontal = Math.max(\n 0.000_001,\n 1 - (fillStyle.crop?.left ?? 0) - (fillStyle.crop?.right ?? 0),\n );\n const vertical = Math.max(\n 0.000_001,\n 1 - (fillStyle.crop?.top ?? 0) - (fillStyle.crop?.bottom ?? 0),\n );\n image.setAttribute('x', String(-(fillStyle.crop?.left ?? 0) / horizontal));\n image.setAttribute('y', String(-(fillStyle.crop?.top ?? 0) / vertical));\n image.setAttribute('width', String(1 / horizontal));\n image.setAttribute('height', String(1 / vertical));\n image.setAttribute('preserveAspectRatio', 'none');\n image.setAttribute('clip-path', `url(#${clipId})`);\n image.style.opacity = String(Math.max(0, Math.min(1, fillStyle.opacity ?? 1)));\n this.applyAsset(fillStyle.assetId, (url) => image.setAttribute('href', url), node.id);\n svg.append(image);\n }\n\n if (node.line) {\n path.style.stroke = color(node.line.color) ?? 'currentColor';\n path.style.strokeWidth = `${Math.max(0, node.line.width ?? 1)}px`;\n if (/dash/i.test(node.line.dash ?? '')) path.style.strokeDasharray = '6 4';\n else if (/dot/i.test(node.line.dash ?? '')) path.style.strokeDasharray = '1 3';\n }\n svg.append(path);\n return svg;\n }\n\n private createChart(node: Extract<SlideNode, { type: 'chart' }>): HTMLElement {\n const container = document.createElement('div');\n container.style.width = '100%';\n container.style.height = '100%';\n container.setAttribute('role', 'img');\n container.setAttribute('aria-label', node.title ?? `${node.chartType} chart`);\n if (renderChartInto(container, node)) {\n return container;\n }\n return this.createChartFallback(node);\n }\n\n private createChartFallback(node: Extract<SlideNode, { type: 'chart' }>): HTMLElement {\n const chart = document.createElement('div');\n chart.style.width = '100%';\n chart.style.height = '100%';\n chart.style.display = 'flex';\n chart.style.flexDirection = 'column';\n chart.style.boxSizing = 'border-box';\n chart.style.padding = '4%';\n chart.setAttribute('role', 'img');\n chart.setAttribute('aria-label', node.title ?? `${node.chartType} chart`);\n if (node.title) {\n const title = document.createElement('div');\n title.textContent = node.title;\n title.style.textAlign = 'center';\n title.style.fontWeight = '600';\n title.style.flex = '0 0 auto';\n chart.append(title);\n }\n const values = node.series\n .flatMap((series) => series.values)\n .filter((value): value is number => typeof value === 'number' && Number.isFinite(value));\n if (!values.length) {\n const empty = document.createElement('div');\n empty.textContent = node.title ?? 'Chart';\n empty.style.margin = 'auto';\n chart.append(empty);\n return chart;\n }\n const palette = ['#4472c4', '#ed7d31', '#a5a5a5', '#ffc000', '#5b9bd5', '#70ad47'];\n if (/pie|doughnut/i.test(node.chartType)) {\n const total = values.reduce((sum, value) => sum + Math.max(0, value), 0) || 1;\n let cursor = 0;\n const stops = values.map((value, index) => {\n const start = (cursor / total) * 360;\n cursor += Math.max(0, value);\n const end = (cursor / total) * 360;\n return `${palette[index % palette.length]} ${start}deg ${end}deg`;\n });\n const pie = document.createElement('div');\n pie.style.margin = 'auto';\n pie.style.width = 'min(78%, 220px)';\n pie.style.aspectRatio = '1';\n pie.style.borderRadius = '50%';\n pie.style.background = `conic-gradient(${stops.join(', ')})`;\n if (/doughnut/i.test(node.chartType)) {\n pie.style.mask = 'radial-gradient(circle, transparent 0 42%, #000 43%)';\n }\n chart.append(pie);\n return chart;\n }\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('viewBox', '0 0 1000 600');\n svg.setAttribute('preserveAspectRatio', 'none');\n svg.style.width = '100%';\n svg.style.flex = '1 1 auto';\n const hasNegativeValues = values.some((value) => value < 0);\n const minimum = hasNegativeValues ? Math.min(0, ...values) : 0;\n // Keep the original PowerPoint-oracle geometry for positive-only charts.\n // Mixed-sign charts need a real zero baseline, but scaling sub-unit\n // positive values to the full plot made many existing charts enormous.\n const maximum = hasNegativeValues ? Math.max(0, ...values) : Math.max(1, ...values);\n const range = maximum - minimum || 1;\n const plotTop = hasNegativeValues ? 60 : 80;\n const plotHeight = hasNegativeValues ? 480 : 460;\n const yPosition = (value: number) => plotTop + ((maximum - value) / range) * plotHeight;\n const zeroY = yPosition(0);\n const pointCount = Math.max(1, ...node.series.map((series) => series.values.length));\n if (/line|scatter|area/i.test(node.chartType)) {\n node.series.forEach((series, seriesIndex) => {\n const points = series.values\n .map((value, index) =>\n typeof value !== 'number' || !Number.isFinite(value)\n ? null\n : `${80 + (index / Math.max(1, pointCount - 1)) * 840},${yPosition(value)}`,\n )\n .filter((point): point is string => point !== null)\n .join(' ');\n const line = document.createElementNS('http://www.w3.org/2000/svg', 'polyline');\n line.setAttribute('points', points);\n line.setAttribute('fill', 'none');\n line.setAttribute('stroke', color(series.color) ?? palette[seriesIndex % palette.length]!);\n line.setAttribute('stroke-width', '8');\n line.setAttribute('data-rpv-chart-series', String(seriesIndex));\n svg.append(line);\n });\n } else {\n const seriesCount = Math.max(1, node.series.length);\n const slot = 840 / pointCount;\n const barWidth = Math.max(4, (slot * 0.72) / seriesCount);\n node.series.forEach((series, seriesIndex) => {\n series.values.forEach((value, index) => {\n if (typeof value !== 'number' || !Number.isFinite(value)) return;\n const valueY = yPosition(value);\n const height = Math.abs(zeroY - valueY);\n const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n rect.setAttribute('x', String(80 + index * slot + seriesIndex * barWidth));\n rect.setAttribute('y', String(Math.min(zeroY, valueY)));\n rect.setAttribute('width', String(barWidth * 0.9));\n rect.setAttribute('height', String(height));\n rect.setAttribute('fill', color(series.color) ?? palette[seriesIndex % palette.length]!);\n rect.setAttribute('data-rpv-chart-series', String(seriesIndex));\n rect.setAttribute('data-rpv-chart-point', String(index));\n svg.append(rect);\n });\n });\n }\n chart.append(svg);\n return chart;\n }\n\n private createNode(\n node: SlideNode,\n coordinate: {\n x: number;\n y: number;\n width: number;\n height: number;\n scaleX?: number;\n scaleY?: number;\n },\n ): HTMLElement {\n const paintedPicture = node.type === 'image' && !!(node.pictureSvg || node.fallbackPicture);\n const paintedShape = node.type === 'shape' && !!node.shapeSvg;\n const paintedInk = node.type === 'image' && !!node.ink && !!node.pictureSvg;\n const sourceSlide = this.renderingSlideIndex ?? this.currentSlideIndex;\n const action = node.clickAction;\n const internalSlide = action?.external === false && action.target\n ? this.presentation.slides.findIndex((slide) => slide.sourcePart === action.target)\n : -1;\n const jump = action?.action?.match(/^ppaction:\\/\\/hlinkshowjump\\?jump=(firstslide|lastslide|nextslide|previousslide)$/)?.[1];\n const jumpSlide = jump === 'firstslide' ? 0\n : jump === 'lastslide' ? this.slideCount - 1\n : jump === 'nextslide' ? Math.min(this.slideCount - 1, sourceSlide + 1)\n : jump === 'previousslide' ? Math.max(0, sourceSlide - 1) : undefined;\n const slideTarget = internalSlide >= 0 ? internalSlide : jumpSlide;\n const href = action?.external === false || node.type === 'media' ? undefined : safeHyperlink(node.hyperlink);\n const element = document.createElement(href ? 'a' : 'div');\n element.dataset.rpvNodeId = node.id;\n element.style.position = 'absolute';\n element.style.left = `${((node.transform.x - coordinate.x) / coordinate.width) * 100}%`;\n element.style.top = `${((node.transform.y - coordinate.y) / coordinate.height) * 100}%`;\n element.style.width = `${(((paintedShape || paintedInk) && node.transform.width === 0 ? EMU_PER_CSS_PIXEL / (coordinate.scaleX || 1) : node.transform.width) / coordinate.width) * 100}%`;\n element.style.height = `${(((paintedShape || paintedInk) && node.transform.height === 0 ? EMU_PER_CSS_PIXEL / (coordinate.scaleY || 1) : node.transform.height) / coordinate.height) * 100}%`;\n element.style.boxSizing = 'border-box';\n const transforms = [`rotate(${node.transform.rotation ?? 0}deg)`];\n if (node.transform.flipHorizontal) transforms.push('scaleX(-1)');\n if (node.transform.flipVertical) transforms.push('scaleY(-1)');\n element.style.transform = (paintedPicture && !paintedInk) || paintedShape ? '' : transforms.join(' ');\n element.style.transformOrigin = 'center';\n if (node.hidden) element.hidden = true;\n if (!paintedPicture && node.opacity !== undefined) element.style.opacity = String(node.opacity);\n if (node.altText) element.setAttribute('aria-label', node.altText);\n if (node.accessibilityTitle) element.title = node.accessibilityTitle;\n if (node.decorative && !href && slideTarget === undefined) element.setAttribute('aria-hidden', 'true');\n if (slideTarget !== undefined) {\n element.tabIndex = 0;\n element.setAttribute('role', 'link');\n element.style.cursor = 'pointer';\n const navigate = () => { void this.goToSlide(slideTarget); };\n element.addEventListener('click', (event) => { event.preventDefault(); navigate(); });\n element.addEventListener('keydown', (event) => {\n if (event instanceof KeyboardEvent && event.key === 'Enter') { event.preventDefault(); navigate(); }\n });\n }\n if (href && element instanceof HTMLAnchorElement) {\n element.href = href;\n element.target = '_blank';\n element.rel = 'noreferrer noopener';\n element.style.color = 'inherit';\n element.style.textDecoration = 'none';\n }\n\n if (node.type === 'shape') {\n const presetPath = normalizedPresetGeometryPath(node.geometry.preset);\n if (node.shapeSvg) {\n const paint = document.createElement('img');\n paint.src = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(node.shapeSvg)}`;\n paint.alt = '';\n paint.setAttribute('aria-hidden', 'true');\n paint.style.position = 'absolute';\n paint.style.left = '0';\n paint.style.top = '0';\n paint.style.width = '100%';\n paint.style.height = '100%';\n paint.style.objectFit = 'fill';\n paint.style.pointerEvents = 'none';\n applyPicturePaintBounds(paint, node.paintBounds, true);\n element.append(paint);\n } else if (node.geometry.path || presetPath) {\n element.append(this.createCustomGeometry(node, node.geometry.path ?? presetPath));\n } else {\n this.applyFill(element, node.fill, node.id);\n applyGeometry(element, node.geometry.preset);\n applyLine(element, node.line);\n }\n const shapeAutofit = node.autofit?.mode === 'shape';\n const verticalText = Boolean(node.verticalText && node.verticalText.toLowerCase() !== 'horz');\n const growsToFitText = shapeAutofit && !verticalText && !node.textTransform;\n if (growsToFitText) {\n const minimumHeight = element.style.height;\n element.style.height = 'auto';\n element.style.minHeight = minimumHeight;\n element.style.display = 'flex';\n element.style.flexDirection = 'column';\n }\n const horizontalOverflow =\n shapeAutofit || allowsTextOverflow(node.horizontalOverflow) ? 'visible' : 'clip';\n const verticalOverflow =\n shapeAutofit || allowsTextOverflow(node.verticalOverflow) ? 'visible' : 'clip';\n element.style.overflowX = paintedShape ? 'visible' : horizontalOverflow;\n element.style.overflowY = paintedShape ? 'visible' : verticalOverflow;\n if (node.paragraphs) {\n const textBody = document.createElement('div');\n textBody.dataset.rpvTextBody = '';\n textBody.style.position = growsToFitText ? 'relative' : 'absolute';\n if (!growsToFitText) textBody.style.inset = '0';\n textBody.style.width = '100%';\n textBody.style.height = growsToFitText ? 'auto' : '100%';\n if (growsToFitText) textBody.style.flex = '1 0 auto';\n textBody.style.boxSizing = 'border-box';\n textBody.style.display = 'flex';\n textBody.style.flexDirection = 'column';\n textBody.style.justifyContent =\n node.verticalAlignment === 'middle'\n ? 'center'\n : node.verticalAlignment === 'bottom'\n ? 'flex-end'\n : 'flex-start';\n applyTextInsets(textBody, node.textInsets, true);\n applyTextOrientation(textBody, node.textRotation, node.verticalText);\n\n const textContent = document.createElement('div');\n textContent.dataset.rpvTextContent = '';\n textContent.style.minWidth = '0';\n textContent.style.maxHeight = '100%';\n if (node.columnCount && node.columnCount > 1) {\n textContent.style.width = '100%';\n textContent.style.height = '100%';\n textContent.style.columnCount = String(Math.floor(node.columnCount));\n textContent.style.columnFill = 'auto';\n if (node.columnSpacing !== undefined) {\n textContent.style.columnGap = `${node.columnSpacing / EMU_PER_CSS_PIXEL}px`;\n }\n if (node.rightToLeftColumns) textContent.style.direction = 'rtl';\n }\n applyText(textContent, node.paragraphs, {\n ...(node.autofit?.mode === 'normal'\n ? {\n fontScale: node.autofit.fontScale,\n lineSpacingReduction: node.autofit.lineSpacingReduction,\n }\n : {}),\n ...(node.textWrap !== undefined ? { textWrap: node.textWrap } : {}),\n ...(node.spaceFirstLastParagraph !== undefined\n ? { spaceFirstLastParagraph: node.spaceFirstLastParagraph }\n : {}),\n });\n textBody.append(textContent);\n if (paintedShape || node.textTransform) {\n const textFrame = document.createElement('div');\n textFrame.style.position = growsToFitText ? 'relative' : 'absolute';\n if (!growsToFitText) textFrame.style.inset = '0';\n textFrame.style.width = '100%';\n textFrame.style.height = growsToFitText ? 'auto' : '100%';\n if (growsToFitText) textFrame.style.flex = '1 0 auto';\n textFrame.style.transform = paintedShape ? transforms.join(' ') : '';\n textFrame.style.transformOrigin = 'center';\n textFrame.style.overflowX = node.textTransform ? 'visible' : horizontalOverflow;\n textFrame.style.overflowY = node.textTransform ? 'visible' : verticalOverflow;\n if (node.textTransform && node.transform.width > 0 && node.transform.height > 0) {\n const saved = node.textTransform;\n const savedFrame = document.createElement('div');\n savedFrame.dataset.rpvIndependentTextFrame = '';\n savedFrame.style.position = 'absolute';\n savedFrame.style.left = `${((saved.x - node.transform.x) / node.transform.width) * 100}%`;\n savedFrame.style.top = `${((saved.y - node.transform.y) / node.transform.height) * 100}%`;\n savedFrame.style.width = `${(saved.width / node.transform.width) * 100}%`;\n savedFrame.style.height = `${(saved.height / node.transform.height) * 100}%`;\n savedFrame.style.transformOrigin = 'center';\n savedFrame.style.transform = `rotate(${saved.rotation ?? 0}deg) scale(${saved.flipHorizontal ? -1 : 1}, ${saved.flipVertical ? -1 : 1})`;\n savedFrame.style.overflowX = horizontalOverflow;\n savedFrame.style.overflowY = verticalOverflow;\n savedFrame.append(textBody);\n textFrame.append(savedFrame);\n } else {\n textFrame.append(textBody);\n }\n element.append(textFrame);\n } else {\n element.append(textBody);\n }\n }\n } else if (node.type === 'image') {\n const image = document.createElement('img');\n image.alt = node.altText ?? node.name ?? '';\n image.style.display = 'block';\n image.style.width = '100%';\n image.style.height = '100%';\n if (node.pictureSvg || node.fallbackPicture) {\n if (node.fallbackPicture) {\n this.applyPictureArtwork(image, node);\n } else {\n image.src = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(node.pictureSvg!)}`;\n applyPicturePaintBounds(image, node.paintBounds, !!node.ink);\n }\n image.style.objectFit = 'fill';\n element.style.overflow = 'visible';\n } else {\n this.applyImageAsset(image, node.assetId, node.fallbackAssetId, node.id);\n image.style.objectFit = node.preserveAspectRatio === false ? 'fill' : 'contain';\n element.style.overflow = 'hidden';\n if (node.crop) applyCroppedImage(image, node.crop);\n this.applyImageEffects(image, node.effects, element);\n }\n element.append(image);\n } else if (node.type === 'group') {\n const childCoordinate = node.childTransform ?? {\n x: 0,\n y: 0,\n width: node.transform.width,\n height: node.transform.height,\n };\n const scaleX = ((coordinate.scaleX ?? 1) * node.transform.width) / childCoordinate.width;\n const scaleY = ((coordinate.scaleY ?? 1) * node.transform.height) / childCoordinate.height;\n for (const child of node.children)\n element.append(\n this.createNode(child, {\n ...childCoordinate,\n scaleX: Number.isFinite(scaleX) && scaleX > 0 ? scaleX : (coordinate.scaleX ?? 1),\n scaleY: Number.isFinite(scaleY) && scaleY > 0 ? scaleY : (coordinate.scaleY ?? 1),\n }),\n );\n } else if (node.type === 'table') {\n const table = document.createElement('table');\n table.style.width = '100%';\n table.style.height = '100%';\n table.style.borderCollapse = 'collapse';\n table.style.tableLayout = 'fixed';\n if (node.columnWidths?.length) {\n const total = node.columnWidths.reduce((sum, width) => sum + width, 0) || 1;\n const columns = document.createElement('colgroup');\n for (const width of node.columnWidths) {\n const column = document.createElement('col');\n column.style.width = `${(width / total) * 100}%`;\n columns.append(column);\n }\n table.append(columns);\n }\n const totalRowHeight = node.rowHeights?.reduce((sum, height) => sum + height, 0) || 0;\n const hasFixedRowHeights = totalRowHeight > 0;\n node.rows.forEach((row, rowIndex) => {\n const tr = table.insertRow();\n if (totalRowHeight && node.rowHeights?.[rowIndex] !== undefined) {\n tr.style.height = `${(node.rowHeights[rowIndex]! / totalRowHeight) * 100}%`;\n }\n for (const cell of row) {\n if (cell.merge?.horizontal || cell.merge?.vertical) continue;\n const td = tr.insertCell();\n td.colSpan = cell.colSpan ?? 1;\n td.rowSpan = cell.rowSpan ?? 1;\n if (hasFixedRowHeights) {\n td.style.position = 'relative';\n td.style.padding = '0';\n } else if (cell.textInsets) applyTextInsets(td, cell.textInsets, false);\n else td.style.padding = '0.25em';\n td.style.overflow = 'hidden';\n td.style.verticalAlign = cell.verticalAlignment ?? 'middle';\n this.applyFill(td, cell.fill, node.id);\n for (const [side, border] of Object.entries(cell.borders ?? {})) {\n if (!border) continue;\n const width = Math.max(0, border.width ?? 1);\n const style = /dash|dot/i.test(border.dash ?? '') ? 'dashed' : 'solid';\n td.style.setProperty(\n `border-${side}`,\n `${width}px ${style} ${color(border.color) ?? 'currentColor'}`,\n );\n }\n const textBody = document.createElement('div');\n textBody.dataset.rpvTableTextBody = '';\n textBody.style.width = '100%';\n textBody.style.boxSizing = 'border-box';\n if (hasFixedRowHeights) {\n textBody.style.position = 'absolute';\n textBody.style.inset = '0';\n textBody.style.height = '100%';\n textBody.style.display = 'flex';\n textBody.style.flexDirection = 'column';\n textBody.style.justifyContent =\n cell.verticalAlignment === 'top'\n ? 'flex-start'\n : cell.verticalAlignment === 'bottom'\n ? 'flex-end'\n : 'center';\n if (cell.textInsets) applyTextInsets(textBody, cell.textInsets, false);\n else textBody.style.padding = '0.25em';\n }\n applyTextOrientation(textBody, cell.textRotation, undefined, true);\n applyText(textBody, cell.paragraphs);\n td.append(textBody);\n }\n });\n element.append(table);\n } else if (node.type === 'chart') {\n element.append(this.createChart(node));\n } else if (node.type === 'media') {\n const poster = node.poster ? this.createNode(node.poster, {\n ...node.transform, scaleX: coordinate.scaleX ?? 1, scaleY: coordinate.scaleY ?? 1,\n }) : undefined;\n if (poster) {\n element.style.transform = '';\n element.append(poster);\n }\n const externalSource = node.sourceUrl && /^https?:\\/\\//i.test(node.sourceUrl)\n ? safeHyperlink(node.sourceUrl) : undefined;\n if (node.mediaType === 'audio' || node.mediaType === 'video') {\n const media = document.createElement(node.mediaType);\n media.controls = true;\n media.preload = 'none';\n media.style.width = '100%';\n media.style.height = '100%';\n if (poster) media.style.transform = transforms.join(' ');\n if (node.assetId) this.applyAsset(node.assetId, (url) => (media.src = url), node.id);\n else if (externalSource) media.src = externalSource;\n if (node.posterAssetId && media instanceof HTMLVideoElement) {\n this.applyAsset(node.posterAssetId, (url) => (media.poster = url), node.id);\n }\n const start = Math.max(0, (node.playback?.trimStartMs ?? 0) / 1000);\n const trimEnd = Math.max(0, (node.playback?.trimEndMs ?? 0) / 1000);\n media.addEventListener('loadedmetadata', () => {\n if (Number.isFinite(media.duration) && start < media.duration) media.currentTime = start;\n });\n media.addEventListener('play', () => {\n if (!Number.isFinite(media.duration)) return;\n const end = Math.max(0, media.duration - trimEnd);\n if (end <= start) media.pause();\n else if (media.currentTime < start || media.currentTime >= end) media.currentTime = start;\n });\n media.addEventListener('seeking', () => {\n if (!Number.isFinite(media.duration)) return;\n const end = Math.max(0, media.duration - trimEnd);\n if (start < end && media.currentTime < start) media.currentTime = start;\n else if (media.currentTime > end) media.currentTime = end;\n });\n media.addEventListener('timeupdate', () => {\n if (Number.isFinite(media.duration) && trimEnd > 0 && media.currentTime >= media.duration - trimEnd) media.pause();\n });\n element.append(media);\n if (poster) {\n media.hidden = true;\n const play = document.createElement('button');\n play.type = 'button';\n play.textContent = 'Play';\n play.setAttribute('aria-label', `Play ${node.altText || node.name || node.mediaType}`);\n play.style.cssText = 'position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);cursor:pointer';\n play.addEventListener('click', (event) => {\n event.stopPropagation();\n poster.hidden = true;\n play.remove();\n media.hidden = false;\n void Promise.resolve(media.play()).catch(() => { media.setAttribute('aria-label', 'Media playback unavailable'); });\n });\n element.append(play);\n }\n } else {\n element.dataset.rpvEmbeddedObject = node.embeddedObject?.programId ?? node.mediaType;\n const download = document.createElement('a');\n download.textContent = 'Download embedded object';\n download.style.cssText = 'position:absolute;left:0;bottom:0;background:white;color:#174ea6;padding:4px';\n download.addEventListener('click', (event) => event.stopPropagation());\n if (node.assetId) {\n download.download = this.presentation.assets[node.assetId]?.fileName ?? 'embedded-object';\n this.applyAsset(node.assetId, (url) => (download.href = url), node.id);\n element.append(download);\n } else if (externalSource) {\n download.textContent = 'Open linked object';\n download.href = externalSource;\n download.target = '_blank';\n download.rel = 'noreferrer noopener';\n element.append(download);\n } else if (!poster) {\n element.textContent = 'Embedded object preview unavailable';\n }\n }\n } else if (node.type === 'unknown') {\n element.dataset.rpvUnsupportedFeature = node.feature;\n if (node.fallbackAssetId) {\n const image = document.createElement('img');\n image.alt = node.altText ?? node.name ?? '';\n image.style.width = '100%';\n image.style.height = '100%';\n image.style.objectFit = 'contain';\n this.applyAsset(node.fallbackAssetId, (url) => (image.src = url), node.id);\n element.append(image);\n }\n }\n return element;\n }\n\n private createSlide(index: number): HTMLElement {\n const slide = this.presentation.slides[index];\n if (!slide) throw new RangeError(`Slide ${index} does not exist.`);\n this.renderingSlideIndex = index;\n const element = document.createElement('section');\n element.className = 'rpv-normalized-slide';\n element.dataset.rpvSlideIndex = String(index);\n element.dataset.rpvSlideHidden = String(Boolean(slide.hidden));\n element.setAttribute('aria-label', `Slide ${index + 1} of ${this.slideCount}`);\n element.style.position = 'relative';\n element.style.width = `${this.naturalSlideWidth}px`;\n element.style.height = `${this.naturalSlideHeight}px`;\n element.style.overflow = 'hidden';\n element.style.background = '#fff';\n element.style.color = '#000';\n element.style.fontFamily = 'Arial, sans-serif';\n element.style.fontWeight = '400';\n element.style.lineHeight = String(POWERPOINT_SINGLE_LINE_HEIGHT);\n if (slide.background && slide.background.type !== 'none') {\n this.applyFill(element, slide.background, slide.id);\n }\n for (const node of slide.nodes) {\n try {\n element.append(\n this.createNode(node, {\n x: 0,\n y: 0,\n width: this.presentation.size.widthEmu,\n height: this.presentation.size.heightEmu,\n }),\n );\n } catch (error) {\n this.callbacks.onNodeError?.(node.id, error);\n }\n }\n this.renderingSlideIndex = undefined;\n return element;\n }\n\n private emptyHandle(target: HTMLElement): DisposableHandle {\n const element = document.createElement('section');\n return {\n element,\n target,\n ready: Promise.resolve(),\n setScale: () => {},\n dispose: () => element.remove(),\n };\n }\n\n private mount(index: number, target: HTMLElement, scale?: number): DisposableHandle {\n if (this.destroyed) return this.emptyHandle(target);\n this.handlesByTarget.get(target)?.dispose();\n const resources = new Set<Promise<void>>();\n const previousResources = this.activeMountResources;\n const lifetime = { disposed: false };\n const previousLifetime = this.activeMountLifetime;\n this.activeMountResources = resources;\n this.activeMountLifetime = lifetime;\n let slide: HTMLElement;\n try {\n slide = this.createSlide(index);\n } finally {\n this.activeMountResources = previousResources;\n this.activeMountLifetime = previousLifetime;\n }\n const effectiveScale = scale ?? this.scaleForViewport(target);\n const wrapper = document.createElement('div');\n wrapper.dataset.rpvSlideWrapper = String(index);\n wrapper.style.position = 'relative';\n wrapper.style.margin = '0 auto';\n slide.style.transformOrigin = 'top left';\n const setScale = (nextScale: number): void => {\n wrapper.style.width = `${this.naturalSlideWidth * nextScale}px`;\n wrapper.style.height = `${this.naturalSlideHeight * nextScale}px`;\n slide.style.transform = `scale(${nextScale})`;\n };\n setScale(effectiveScale);\n wrapper.append(slide);\n target.replaceChildren(wrapper);\n this.callbacks.onSlideRendered?.(index, slide);\n const handle: DisposableHandle = {\n element: slide,\n target,\n ready: Promise.all([...resources]).then(() => undefined),\n setScale,\n dispose: () => {\n if (lifetime.disposed) return;\n lifetime.disposed = true;\n wrapper.remove();\n this.mountedHandles.delete(handle);\n if (this.handlesByTarget.get(target) === handle) this.handlesByTarget.delete(target);\n this.callbacks.onSlideUnmounted?.(index);\n },\n };\n this.mountedHandles.add(handle);\n this.handlesByTarget.set(target, handle);\n return handle;\n }\n\n private disposeContainerSlides(): void {\n for (const handle of [...this.mountedHandles]) {\n if (handle.target === this.container || this.container.contains(handle.target)) {\n handle.dispose();\n }\n }\n }\n\n private async yieldRenderBatch(): Promise<void> {\n if (typeof requestAnimationFrame !== 'undefined') {\n await new Promise<void>((resolve) => requestAnimationFrame(() => resolve()));\n } else {\n await Promise.resolve();\n }\n }\n\n private async yieldNavigationPaint(): Promise<void> {\n if (typeof requestAnimationFrame !== 'undefined') {\n await new Promise<void>((resolve) => {\n let settled = false;\n let firstFrame: number | undefined;\n let secondFrame: number | undefined;\n const complete = () => {\n if (settled) return;\n settled = true;\n clearTimeout(timeout);\n if (typeof cancelAnimationFrame !== 'undefined') {\n if (firstFrame !== undefined) cancelAnimationFrame(firstFrame);\n if (secondFrame !== undefined) cancelAnimationFrame(secondFrame);\n }\n resolve();\n };\n // Animation frames can be suspended in a hidden document. Preserve the\n // foreground paint opportunity without leaving navigation unresolved.\n const timeout = setTimeout(complete, 100);\n firstFrame = requestAnimationFrame(() => {\n if (settled) return;\n secondFrame = requestAnimationFrame(complete);\n });\n });\n } else {\n await new Promise<void>((resolve) => setTimeout(resolve, 0));\n }\n }\n\n private async mountInBatches(\n placeholders: ListPlaceholder[],\n indices: number[],\n batchSize: number,\n generation: number,\n ): Promise<void> {\n const uniqueIndices = [...new Set(indices)].filter(\n (index) => index >= 0 && index < placeholders.length,\n );\n const size =\n Number.isFinite(batchSize) && batchSize > 0 ? Math.max(1, Math.floor(batchSize)) : 3;\n for (let offset = 0; offset < uniqueIndices.length; offset += size) {\n if (!this.isRenderActive(generation)) return;\n await Promise.all(\n uniqueIndices.slice(offset, offset + size).map((index) => placeholders[index]!.mount()),\n );\n if (!this.isRenderActive(generation)) return;\n if (offset + size < uniqueIndices.length) await this.yieldRenderBatch();\n }\n }\n\n async renderSlide(index = this.current): Promise<void> {\n this.renderState = { mode: 'single' };\n const generation = this.beginRender();\n if (generation === undefined) return;\n this.observeViewport(this.container);\n this.current = Math.max(0, Math.min(this.slideCount - 1, index));\n this.disposeContainerSlides();\n this.container.replaceChildren();\n if (this.slideCount === 0) return;\n const handle = this.mount(this.current, this.container);\n await handle.ready;\n if (!this.isRenderActive(generation) || this.handlesByTarget.get(this.container) !== handle) {\n return;\n }\n this.publishZoom(this.scaleForViewport(this.container) * 100);\n this.notifySlideChange(this.current);\n }\n\n private createListPlaceholder(\n index: number,\n item: HTMLElement,\n generation: number,\n scale?: number,\n ): ListPlaceholder {\n let handle: DisposableHandle | undefined;\n let mountPromise: Promise<void> | undefined;\n let effectiveScale = scale;\n const isActive = () =>\n this.isRenderActive(generation) && this.listState?.generation === generation;\n const mount = (): Promise<void> => {\n if (!isActive()) return Promise.resolve();\n if (handle) return handle.ready;\n if (mountPromise) return mountPromise;\n const nextHandle = this.mount(index, item, effectiveScale);\n handle = nextHandle;\n const pending = nextHandle.ready\n .then(() => {\n if (!isActive() || handle !== nextHandle) {\n if (handle === nextHandle) handle = undefined;\n nextHandle.dispose();\n }\n })\n .finally(() => {\n if (mountPromise === pending) mountPromise = undefined;\n });\n mountPromise = pending;\n return pending;\n };\n const unmount = (): void => {\n const mounted = handle;\n handle = undefined;\n mountPromise = undefined;\n if (mounted) {\n mounted.dispose();\n }\n };\n const setScale = (nextScale: number): void => {\n effectiveScale = nextScale;\n handle?.setScale(nextScale);\n };\n return { item, mount, unmount, isMounted: () => Boolean(handle), setScale };\n }\n\n async renderList(options: RenderListOptions = {}): Promise<void> {\n const windowingEnabled = options.enabled !== false;\n const normalizedOptions = { ...options, enabled: windowingEnabled };\n this.renderState = { mode: 'continuous', options: normalizedOptions };\n const generation = this.beginRender();\n if (generation === undefined) return;\n this.disposeContainerSlides();\n this.container.replaceChildren();\n if (!options.scrollElement) {\n this.container.scrollTop = 0;\n this.container.scrollLeft = 0;\n }\n if (this.slideCount === 0) {\n this.current = 0;\n this.listState = { generation, options: normalizedOptions, placeholders: [] };\n return;\n }\n\n const initialIndex = Math.max(\n 0,\n Math.min(this.slideCount - 1, options.initialSlideIndex ?? this.current),\n );\n const scroller = options.scrollElement ?? this.container;\n this.observeViewport(scroller);\n let effectiveScale = this.scaleForViewport(scroller);\n let slideHeight = this.naturalSlideHeight * effectiveScale;\n let itemStride = slideHeight + LIST_ITEM_GAP;\n\n if (!windowingEnabled) {\n // Non-windowed continuous mode: every slide mounts in normal flow.\n const placeholders = this.presentation.slides.map((_, index) => {\n const item = document.createElement('div');\n item.dataset.rpvListItem = String(index);\n item.style.minHeight = `${slideHeight}px`;\n item.style.margin = `0 auto ${LIST_ITEM_GAP}px`;\n this.container.append(item);\n return this.createListPlaceholder(index, item, generation, effectiveScale);\n });\n const state: ActiveListState = { generation, options: normalizedOptions, placeholders };\n state.updateScale = () => {\n if (!this.isRenderActive(generation) || this.listState !== state) return;\n const previousScale = effectiveScale;\n const previousScrollLeft = scroller.scrollLeft;\n const previousStride = itemStride;\n const previousSlideHeight = slideHeight;\n const listStart =\n scroller === this.container\n ? 0\n : this.container.getBoundingClientRect().top -\n scroller.getBoundingClientRect().top +\n scroller.scrollTop;\n const listOffset = scroller.scrollTop - listStart;\n const anchorIndex = Math.max(\n 0,\n Math.min(this.slideCount - 1, Math.floor(listOffset / previousStride)),\n );\n const anchorOffset = listOffset - anchorIndex * previousStride;\n effectiveScale = this.scaleForViewport(scroller);\n slideHeight = this.naturalSlideHeight * effectiveScale;\n itemStride = slideHeight + LIST_ITEM_GAP;\n placeholders.forEach((placeholder) => {\n placeholder.item.style.minHeight = `${slideHeight}px`;\n placeholder.setScale(effectiveScale);\n });\n if (previousScale > 0 && previousScrollLeft > 0) {\n scroller.scrollLeft = previousScrollLeft * (effectiveScale / previousScale);\n }\n this.publishZoom(effectiveScale * 100);\n // Resizing content that is entirely below an external viewport must\n // not move that viewport toward or away from the list.\n if (listOffset < 0) return;\n const nextAnchorOffset = scaleListAnchorOffset(\n anchorOffset,\n previousSlideHeight,\n slideHeight,\n );\n scroller.scrollTop = Math.max(0, listStart + anchorIndex * itemStride + nextAnchorOffset);\n };\n this.listState = state;\n await this.mountInBatches(\n placeholders,\n this.presentation.slides.map((_, index) => index),\n options.batchSize ?? 3,\n generation,\n );\n if (!this.isRenderActive(generation) || this.listState !== state) return;\n if (!options.scrollElement) {\n this.container.scrollTop = 0;\n this.container.scrollLeft = 0;\n }\n const initialItem = placeholders[initialIndex]?.item;\n if (initialItem && initialIndex !== 0) {\n initialItem.scrollIntoView?.({ behavior: 'instant', block: 'start' });\n }\n this.current = initialIndex;\n this.publishZoom(effectiveScale * 100);\n this.notifySlideChange(initialIndex);\n return;\n }\n\n // Windowed continuous mode driven by TanStack Virtual: slides live at\n // fixed absolute offsets inside a full-height sizer, so mounting and\n // unmounting content never shifts layout and scrolling stays smooth.\n const sizer = document.createElement('div');\n sizer.dataset.rpvVirtualSizer = '';\n sizer.style.position = 'relative';\n sizer.style.width = '100%';\n sizer.style.height = `${this.slideCount * itemStride - LIST_ITEM_GAP}px`;\n this.container.append(sizer);\n\n const placeholders = this.presentation.slides.map((_, index) => {\n const item = document.createElement('div');\n item.dataset.rpvListItem = String(index);\n item.style.position = 'absolute';\n item.style.top = '0';\n item.style.left = '0';\n item.style.width = '100%';\n item.style.height = `${slideHeight}px`;\n item.style.transform = `translateY(${index * itemStride}px)`;\n sizer.append(item);\n // Mount with the exact scale the shell geometry was computed from so\n // content and window heights always agree, even if the container is\n // still settling its layout.\n return this.createListPlaceholder(index, item, generation, effectiveScale);\n });\n\n const state: ActiveListState = { generation, options: normalizedOptions, placeholders };\n this.listState = state;\n const isActive = () => this.isRenderActive(generation) && this.listState === state;\n const deferredMounts = new Map<number, number>();\n let virtualWindow = new Set<number>();\n state.deferMount = (index) => {\n deferredMounts.set(index, (deferredMounts.get(index) ?? 0) + 1);\n };\n state.resumeMount = (index) => {\n const remaining = (deferredMounts.get(index) ?? 0) - 1;\n if (remaining > 0) {\n deferredMounts.set(index, remaining);\n return;\n }\n deferredMounts.delete(index);\n if (virtualWindow.has(index)) void placeholders[index]?.mount();\n };\n\n const measureViewportRect = () => {\n const rect = scroller.getBoundingClientRect();\n if (rect.width > 0 && rect.height > 0) return { width: rect.width, height: rect.height };\n if (scroller.clientHeight > 0) {\n return { width: scroller.clientWidth, height: scroller.clientHeight };\n }\n return { ...FALLBACK_VIEWPORT_RECT };\n };\n const initialRect = measureViewportRect();\n const requestedOverscan = options.overscanViewport ?? 1.5;\n const overscanViewports =\n Number.isFinite(requestedOverscan) && requestedOverscan >= 0 ? requestedOverscan : 1.5;\n let overscan = Math.max(1, Math.ceil((overscanViewports * initialRect.height) / itemStride));\n // Content rendered above the slide list (inside the same scroller) offsets\n // every virtual position; re-measured whenever the layout settles.\n const measureScrollMargin = () =>\n sizer.getBoundingClientRect().top - scroller.getBoundingClientRect().top + scroller.scrollTop;\n let scrollMargin = measureScrollMargin();\n // When the container is still collapsed while the document loads, the\n // initial alignment lands wrong; repeat it once real layout arrives as\n // long as the user has not scrolled yet.\n let needsSettleAlignment = initialIndex > 0;\n let lastProgrammaticTop: number | undefined;\n const writeScrollTop = (top: number, behavior?: ScrollBehavior): void => {\n lastProgrammaticTop = top;\n if (typeof scroller.scrollTo === 'function') {\n scroller.scrollTo(behavior ? { top, behavior } : { top });\n } else {\n scroller.scrollTop = top;\n }\n };\n\n const reconcile = (instance: Virtualizer<HTMLElement, HTMLElement>): void => {\n if (!isActive()) return;\n const windowed = new Set(instance.getVirtualItems().map((item) => item.index));\n virtualWindow = windowed;\n placeholders.forEach((placeholder, index) => {\n if (windowed.has(index) && !deferredMounts.has(index)) void placeholder.mount();\n else placeholder.unmount();\n });\n // Report the slide with the largest visible overlap, matching how\n // PowerPoint's own thumbnail rail tracks the reading position.\n const offset = (instance.scrollOffset ?? 0) - scrollMargin;\n const viewportHeight = instance.scrollRect?.height ?? initialRect.height;\n const firstCandidate = Math.max(0, Math.floor(offset / itemStride));\n const lastCandidate = Math.min(\n this.slideCount - 1,\n Math.max(firstCandidate, Math.floor((offset + viewportHeight) / itemStride)),\n );\n let best = firstCandidate;\n let bestOverlap = Number.NEGATIVE_INFINITY;\n for (let index = firstCandidate; index <= lastCandidate; index += 1) {\n const start = index * itemStride;\n const overlap =\n Math.min(offset + viewportHeight, start + slideHeight) - Math.max(offset, start);\n if (overlap > bestOverlap + 0.5) {\n bestOverlap = overlap;\n best = index;\n }\n }\n if (best !== this.current) {\n this.current = best;\n this.notifySlideChange(best);\n }\n };\n\n const virtualizer = new Virtualizer<HTMLElement, HTMLElement>({\n count: this.slideCount,\n getScrollElement: () => scroller,\n estimateSize: () => slideHeight,\n gap: LIST_ITEM_GAP,\n overscan,\n scrollMargin,\n initialRect,\n initialOffset: initialIndex > 0 ? scrollMargin + initialIndex * itemStride : 0,\n observeElementRect: (instance, callback) => {\n const publish = () => {\n callback(measureViewportRect());\n const nextMargin = measureScrollMargin();\n if (Math.abs(nextMargin - scrollMargin) > 1) {\n scrollMargin = nextMargin;\n instance.setOptions({ ...instance.options, scrollMargin: nextMargin });\n instance.measure();\n }\n if (needsSettleAlignment && scroller.clientHeight > 0) {\n needsSettleAlignment = false;\n const undisturbed =\n scroller.scrollTop === 0 ||\n (lastProgrammaticTop !== undefined &&\n Math.abs(scroller.scrollTop - lastProgrammaticTop) <= 2);\n if (undisturbed) state.scrollToIndex?.(initialIndex);\n }\n };\n publish();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(publish);\n observer.observe(scroller);\n return () => observer.disconnect();\n },\n observeElementOffset: (_instance, callback) => {\n const onScroll = () => callback(scroller.scrollTop, true);\n callback(scroller.scrollTop, false);\n scroller.addEventListener('scroll', onScroll, { passive: true });\n return () => scroller.removeEventListener('scroll', onScroll);\n },\n scrollToFn: (offset, { adjustments, behavior }) => {\n const top = offset + (adjustments ?? 0);\n writeScrollTop(top, behavior);\n },\n onChange: (instance) => reconcile(instance),\n });\n state.scrollToIndex = (index, scrollOptions) => {\n if (!isActive()) return;\n virtualizer.scrollToIndex(index, {\n align:\n scrollOptions?.block === 'center'\n ? 'center'\n : scrollOptions?.block === 'end'\n ? 'end'\n : scrollOptions?.block === 'nearest'\n ? 'auto'\n : 'start',\n behavior: scrollOptions?.behavior === 'smooth' ? 'smooth' : 'auto',\n });\n };\n state.updateScale = () => {\n if (!isActive()) return;\n const previousScale = effectiveScale;\n const previousScrollLeft = scroller.scrollLeft;\n const previousStride = itemStride;\n const previousSlideHeight = slideHeight;\n const anchorIndex = this.current;\n const observedScrollTop = virtualizer.scrollOffset ?? scroller.scrollTop;\n const observedIndex = Math.floor((observedScrollTop - scrollMargin) / previousStride);\n const intendedIndex =\n lastProgrammaticTop === undefined\n ? undefined\n : Math.floor((lastProgrammaticTop - scrollMargin) / previousStride);\n // A programmatic scroll can be followed immediately by zoom before the\n // browser emits its scroll event. In that gap, TanStack still exposes\n // the old offset even though the target shell has already been chosen.\n const previousScrollTop =\n Math.abs(observedIndex - anchorIndex) > 1 &&\n intendedIndex !== undefined &&\n Math.abs(intendedIndex - anchorIndex) <= 1\n ? lastProgrammaticTop!\n : observedScrollTop;\n const previousOffset = previousScrollTop - scrollMargin;\n const anchorOffset = previousOffset - anchorIndex * previousStride;\n\n effectiveScale = this.scaleForViewport(scroller);\n slideHeight = this.naturalSlideHeight * effectiveScale;\n itemStride = slideHeight + LIST_ITEM_GAP;\n sizer.style.height = `${this.slideCount * itemStride - LIST_ITEM_GAP}px`;\n placeholders.forEach((placeholder, index) => {\n placeholder.item.style.height = `${slideHeight}px`;\n placeholder.item.style.transform = `translateY(${index * itemStride}px)`;\n placeholder.setScale(effectiveScale);\n });\n if (previousScale > 0 && previousScrollLeft > 0) {\n scroller.scrollLeft = previousScrollLeft * (effectiveScale / previousScale);\n }\n\n const nextAnchorOffset = scaleListAnchorOffset(\n anchorOffset,\n previousSlideHeight,\n slideHeight,\n );\n const nextScrollTop =\n previousOffset < 0\n ? previousScrollTop\n : Math.max(0, scrollMargin + anchorIndex * itemStride + nextAnchorOffset);\n const viewportRect = measureViewportRect();\n overscan = Math.max(1, Math.ceil((overscanViewports * viewportRect.height) / itemStride));\n virtualizer.scrollOffset = nextScrollTop;\n writeScrollTop(nextScrollTop);\n virtualizer.setOptions({ ...virtualizer.options, overscan });\n virtualizer.measure();\n this.publishZoom(effectiveScale * 100);\n };\n const teardown = virtualizer._didMount();\n this.listCleanup = teardown;\n virtualizer._willUpdate();\n\n const initialWindow = virtualizer.getVirtualItems().map((item) => item.index);\n await this.mountInBatches(\n placeholders,\n [...initialWindow, initialIndex],\n options.batchSize ?? 3,\n generation,\n );\n if (!isActive()) return;\n if (initialIndex > 0) state.scrollToIndex(initialIndex);\n else if (!options.scrollElement) {\n this.container.scrollTop = 0;\n this.container.scrollLeft = 0;\n }\n this.current = initialIndex;\n this.publishZoom(effectiveScale * 100);\n this.notifySlideChange(initialIndex);\n }\n\n async goToSlide(index: number, scrollOptions?: ScrollIntoViewOptions): Promise<void> {\n if (this.destroyed || this.slideCount === 0) return;\n const next = Math.max(0, Math.min(this.slideCount - 1, index));\n const changed = next !== this.current;\n const state = this.listState;\n if (state && this.isRenderActive(state.generation)) {\n const navigation = ++this.navigationGeneration;\n const placeholder = state.placeholders[next];\n let mountDeferred = Boolean(state.deferMount && placeholder && !placeholder.isMounted());\n if (mountDeferred) state.deferMount?.(next);\n // Publish and move to the fixed target shell before constructing the\n // potentially expensive slide DOM or awaiting its resources.\n try {\n if (changed) {\n if (state.scrollToIndex) state.scrollToIndex(next, scrollOptions);\n else placeholder?.item.scrollIntoView?.(scrollOptions);\n this.current = next;\n this.notifySlideChange(next);\n }\n if (mountDeferred) await this.yieldNavigationPaint();\n if (\n this.destroyed ||\n navigation !== this.navigationGeneration ||\n !this.isRenderActive(state.generation) ||\n this.listState !== state\n ) {\n return;\n }\n if (mountDeferred) {\n state.resumeMount?.(next);\n mountDeferred = false;\n }\n await placeholder?.mount();\n } finally {\n if (mountDeferred) state.resumeMount?.(next);\n }\n return;\n }\n if (!changed && this.container.querySelector(`[data-rpv-slide-index=\"${next}\"]`)) return;\n await this.renderSlide(next);\n }\n\n private async updateRenderedScale(): Promise<void> {\n if (this.renderState?.mode === 'continuous') {\n const state = this.listState;\n if (state && this.isRenderActive(state.generation) && state.updateScale) {\n state.updateScale();\n } else {\n await this.renderList({ ...this.renderState.options, initialSlideIndex: this.current });\n }\n } else if (this.renderState) {\n const handle = this.handlesByTarget.get(this.container);\n if (handle) {\n const viewport = this.activeViewport ?? this.container;\n const previousScale = this.resolvedZoom / 100;\n const previousScrollTop = viewport.scrollTop;\n const previousScrollLeft = viewport.scrollLeft;\n const nextScale = this.scaleForViewport(viewport);\n handle.setScale(nextScale);\n if (previousScale > 0) {\n viewport.scrollTop = previousScrollTop * (nextScale / previousScale);\n viewport.scrollLeft = previousScrollLeft * (nextScale / previousScale);\n }\n this.publishZoom(nextScale * 100);\n } else await this.renderSlide(this.current);\n } else {\n this.publishZoom(this.resolveZoom(this.zoomLevel));\n }\n }\n\n async setZoom(level: ViewerZoomLevel): Promise<void> {\n const next = normalizeViewerZoomLevel(level);\n if (this.zoomLevel === next) {\n if (typeof next !== 'number') await this.updateRenderedScale();\n return;\n }\n this.zoomLevel = next;\n await this.updateRenderedScale();\n }\n\n async setFitMode(mode: FitMode): Promise<void> {\n await this.setZoom(mode === 'contain' ? 'automatic' : 100);\n }\n searchText(query: string | RegExp, options?: ViewerSearchOptions): PresentationSearchResult[] {\n return searchDocument(this.presentation, query, options);\n }\n renderThumbnailToContainer(\n index: number,\n target: HTMLElement,\n options: { width?: number } = {},\n ): DisposableHandle {\n if (this.destroyed || index < 0 || index >= this.slideCount) return this.emptyHandle(target);\n return this.mount(index, target, (options.width ?? 144) / this.naturalSlideWidth);\n }\n async highlightSearchResult(\n result: PresentationSearchResult,\n options: SearchHighlightOptions = {},\n ): Promise<void> {\n if (this.destroyed || result.slideIndex < 0 || result.slideIndex >= this.slideCount) return;\n if (options.scrollIntoView !== false) {\n await this.goToSlide(\n result.slideIndex,\n typeof options.scrollIntoView === 'object' ? options.scrollIntoView : undefined,\n );\n } else if (this.listState) {\n const state = this.listState;\n await state.placeholders[result.slideIndex]?.mount();\n if (!this.isRenderActive(state.generation) || this.listState !== state) return;\n } else if (!this.container.querySelector(`[data-rpv-slide-index=\"${result.slideIndex}\"]`)) {\n await this.renderSlide(result.slideIndex);\n }\n if (this.destroyed) return;\n this.clearSearchHighlights();\n const slide = this.container.querySelector<HTMLElement>(\n `[data-rpv-slide-index=\"${result.slideIndex}\"]`,\n );\n const node = [...(slide?.querySelectorAll<HTMLElement>('[data-rpv-node-id]') ?? [])].find(\n (candidate) => candidate.dataset.rpvNodeId === result.nodeId,\n );\n const parent = node?.parentElement;\n if (!node || !parent) return;\n const highlight = document.createElement('div');\n highlight.className = ['rpv-search-highlight', options.className].filter(Boolean).join(' ');\n highlight.style.position = 'absolute';\n highlight.style.left = node.style.left;\n highlight.style.top = node.style.top;\n highlight.style.width = node.style.width;\n highlight.style.height = node.style.height;\n highlight.style.boxSizing = 'border-box';\n highlight.style.transform = node.style.transform;\n highlight.style.transformOrigin = node.style.transformOrigin;\n const padding = options.padding ?? 3;\n const width =\n typeof options.borderWidth === 'number'\n ? `${options.borderWidth}px`\n : (options.borderWidth ?? '3px');\n highlight.style.outline = `${width} solid ${options.borderColor ?? '#ef8b2c'}`;\n highlight.style.outlineOffset = `${padding}px`;\n highlight.style.background = options.backgroundColor ?? 'transparent';\n highlight.style.boxShadow =\n options.boxShadow ?? '0 0 0 2px color-mix(in srgb, #ef8b2c 30%, transparent)';\n if (options.borderRadius !== undefined) {\n highlight.style.borderRadius =\n typeof options.borderRadius === 'number'\n ? `${options.borderRadius}px`\n : options.borderRadius;\n }\n highlight.style.zIndex = String(options.zIndex ?? 2_147_483_646);\n for (const [property, value] of Object.entries(options.style ?? {})) {\n if (value === undefined) continue;\n if (property.startsWith('--') || property.includes('-')) {\n highlight.style.setProperty(property, String(value));\n } else {\n (highlight.style as unknown as Record<string, string>)[property] = String(value);\n }\n }\n highlight.style.pointerEvents = 'none';\n parent.append(highlight);\n this.highlight = highlight;\n }\n clearSearchHighlights(): void {\n this.highlight?.remove();\n this.highlight = undefined;\n }\n destroy(): void {\n if (this.destroyed) return;\n this.destroyed = true;\n this.renderGeneration += 1;\n this.navigationGeneration += 1;\n this.listCleanup?.();\n this.listCleanup = undefined;\n this.resizeObserver?.disconnect();\n this.resizeObserver = undefined;\n this.activeViewport = undefined;\n this.listState = undefined;\n this.clearSearchHighlights();\n this.assetCache.release();\n this.activeMountResources = undefined;\n for (const handle of [...this.mountedHandles]) handle.dispose();\n this.handlesByTarget.clear();\n this.renderState = undefined;\n this.container.replaceChildren();\n }\n}\n","import type { WasmParseOptions } from '@extend-ai/react-pptx-wasm';\nimport type { PresentationDocument } from '@extend-ai/react-pptx-model';\nimport { PptxViewerError } from './errors';\n\nexport type WasmSource =\n | string\n | URL\n | Request\n | Response\n | BufferSource\n | WebAssembly.Module;\n\nexport type WorkerWasmSource = string | ArrayBuffer | WebAssembly.Module;\n\ninterface WasmRuntimeModule {\n default?: (source?: unknown) => Promise<unknown> | unknown;\n initWasm?: (source?: unknown) => Promise<unknown> | unknown;\n init?: (source?: unknown) => Promise<unknown> | unknown;\n setWasmSource?: (source: unknown) => void;\n parsePresentation?: (bytes: Uint8Array, options?: unknown) => Promise<unknown> | unknown;\n parse_presentation?: (bytes: Uint8Array, options?: unknown) => Promise<unknown> | unknown;\n}\n\nlet configuredSource: WasmSource | undefined;\nlet hasConfiguredSource = false;\nlet configuredWorkerSource: WorkerWasmSource | undefined;\nlet runtimePromise: Promise<WasmRuntimeModule> | undefined;\nlet initialized = false;\n\nasync function loadRuntime(): Promise<WasmRuntimeModule> {\n runtimePromise ??= import('@extend-ai/react-pptx-wasm') as unknown as Promise<WasmRuntimeModule>;\n return runtimePromise;\n}\n\nexport function setWasmSource(source: WasmSource): void {\n hasConfiguredSource = true;\n configuredSource = source;\n configuredWorkerSource = sourceToWorkerSource(source);\n initialized = false;\n void runtimePromise?.then((runtime) => runtime.setWasmSource?.(source));\n}\n\nfunction bufferSourceToArrayBuffer(\n source: ArrayBuffer | ArrayBufferView<ArrayBufferLike>,\n): ArrayBuffer {\n if (source instanceof ArrayBuffer) return source.slice(0);\n const bytes = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n return new Uint8Array(bytes).buffer;\n}\n\nfunction sourceToWorkerSource(source: WasmSource): WorkerWasmSource | undefined {\n if (typeof source === 'string') return source;\n if (typeof URL !== 'undefined' && source instanceof URL) return source.href;\n if (typeof Request !== 'undefined' && source instanceof Request) return source.url;\n if (source instanceof ArrayBuffer || ArrayBuffer.isView(source)) {\n return bufferSourceToArrayBuffer(source);\n }\n if (typeof WebAssembly !== 'undefined' && source instanceof WebAssembly.Module) return source;\n return undefined;\n}\n\nfunction canUseConfiguredSourceInWorker(): boolean {\n return !hasConfiguredSource || configuredWorkerSource !== undefined;\n}\n\nexport async function initWasm(source?: WasmSource): Promise<void> {\n if (source !== undefined) setWasmSource(source);\n if (initialized) return;\n\n try {\n const runtime = await loadRuntime();\n if (configuredSource !== undefined) runtime.setWasmSource?.(configuredSource);\n const initialize = runtime.initWasm ?? runtime.init ?? runtime.default;\n if (initialize) await initialize(configuredSource);\n initialized = true;\n } catch (error) {\n runtimePromise = undefined;\n throw new PptxViewerError('parse-failed', 'Could not initialize the PowerPoint parser.', {\n cause: error,\n });\n }\n}\n\nfunction isPresentationDocument(value: unknown): value is PresentationDocument {\n if (!value || typeof value !== 'object') return false;\n const candidate = value as Partial<PresentationDocument>;\n return (\n (candidate.format === 'ppt' || candidate.format === 'pptx') &&\n !!candidate.size &&\n Array.isArray(candidate.slides) &&\n Array.isArray(candidate.warnings)\n );\n}\n\nfunction parserFailure(error: unknown): PptxViewerError | null {\n if (error instanceof PptxViewerError) return error;\n const message = error instanceof Error ? error.message : String(error);\n const normalized = message.toLowerCase();\n if (normalized.includes('encrypted presentation')) {\n return new PptxViewerError(\n 'encrypted-document',\n 'Encrypted PowerPoint presentations are not supported.',\n { cause: error },\n );\n }\n if (\n normalized.includes('resource limit exceeded') ||\n normalized.includes('input exceeds the configured')\n ) {\n return new PptxViewerError('resource-limit', message, { cause: error });\n }\n return null;\n}\n\nexport async function parseWithWasm(\n bytes: Uint8Array,\n options?: { signal?: AbortSignal; formatHint?: 'ppt' | 'pptx'; include3dModels?: boolean },\n): Promise<PresentationDocument | null> {\n try {\n if (\n canUseConfiguredSourceInWorker() &&\n typeof window !== 'undefined' &&\n typeof Worker !== 'undefined'\n ) {\n const result = await parseInWorker(bytes, options?.signal, configuredWorkerSource, { include3dModels: options?.include3dModels ?? false });\n return isPresentationDocument(result) ? result : null;\n }\n await initWasm();\n const runtime = await loadRuntime();\n const parse = runtime.parsePresentation ?? runtime.parse_presentation;\n if (!parse) return null;\n const result = await parse(bytes, {\n include3dModels: options?.include3dModels,\n });\n const value = typeof result === 'string' ? (JSON.parse(result) as unknown) : result;\n return isPresentationDocument(value) ? value : null;\n } catch (error) {\n if (options?.signal?.aborted) throw error;\n const failure = parserFailure(error);\n if (failure) throw failure;\n return null;\n }\n}\n\nlet workerRequestId = 0;\n\nasync function parseInWorker(\n bytes: Uint8Array,\n signal?: AbortSignal,\n wasmSource?: WorkerWasmSource,\n parserOptions?: WasmParseOptions,\n): Promise<unknown> {\n if (signal?.aborted) throw new DOMException('Parsing was aborted.', 'AbortError');\n\n const worker = new Worker(new URL('./native-parser-worker.js', import.meta.url), {\n type: 'module',\n name: 'react-pptx-parser',\n });\n const id = ++workerRequestId;\n const owned = bytes.slice().buffer as ArrayBuffer;\n return await new Promise((resolve, reject) => {\n let settled = false;\n const cleanup = () => {\n signal?.removeEventListener('abort', abort);\n worker.removeEventListener('message', handleMessage);\n worker.removeEventListener('error', handleError);\n worker.removeEventListener('messageerror', handleMessageError);\n worker.terminate();\n };\n const settle = (callback: () => void) => {\n if (settled) return;\n settled = true;\n cleanup();\n callback();\n };\n const abort = () => {\n settle(() => reject(new DOMException('Parsing was aborted.', 'AbortError')));\n };\n const handleMessage = (\n event: MessageEvent<{ id: number; result?: unknown; error?: string }>,\n ) => {\n if (event.data.id !== id) return;\n settle(() => {\n if (event.data.error) reject(new Error(event.data.error));\n else resolve(event.data.result);\n });\n };\n const handleError = (event: ErrorEvent) => {\n settle(() => reject(event.error ?? new Error(event.message)));\n };\n const handleMessageError = () => {\n settle(() => reject(new Error('The parser worker returned an unreadable response.')));\n };\n\n signal?.addEventListener('abort', abort, { once: true });\n worker.addEventListener('message', handleMessage);\n worker.addEventListener('error', handleError);\n worker.addEventListener('messageerror', handleMessageError);\n\n if (signal?.aborted) {\n abort();\n return;\n }\n\n try {\n worker.postMessage({ id, bytes: owned, wasmSource, parserOptions }, [owned]);\n } catch (error) {\n settle(() => reject(error));\n }\n });\n}\n","import type { PptxPerformanceMeasurement, PptxPerformancePhase } from './types';\n\nexport function performanceNow(): number {\n return globalThis.performance?.now?.() ?? Date.now();\n}\n\nexport function performanceMeasurement(\n phase: PptxPerformancePhase,\n startedAt: number,\n slideIndex?: number,\n): PptxPerformanceMeasurement {\n return {\n durationMs: Math.max(0, performanceNow() - startedAt),\n phase,\n ...(slideIndex === undefined ? {} : { slideIndex }),\n };\n}\n","import type { PresentationDocument, PresentationFormat } from '@extend-ai/react-pptx-model';\nimport { PptxViewerError, throwIfAborted, toPptxViewerError } from './errors';\nimport type {\n BinaryPresentationSource,\n ParsePresentationOptions,\n ParsedPresentation,\n PresentationSource,\n} from './types';\nimport { parseWithWasm } from './wasm';\nimport { performanceMeasurement, performanceNow } from './performance';\n\nconst DEFAULT_MAX_INPUT_BYTES = 100 * 1024 * 1024;\n\nfunction isParsedPresentation(source: PresentationSource): source is ParsedPresentation {\n return (\n !!source &&\n typeof source === 'object' &&\n 'kind' in source &&\n source.kind === 'parsed-presentation' &&\n 'document' in source\n );\n}\n\nfunction isPresentationDocument(source: PresentationSource): source is PresentationDocument {\n return (\n !!source &&\n typeof source === 'object' &&\n 'format' in source &&\n (source.format === 'ppt' || source.format === 'pptx') &&\n 'slides' in source &&\n Array.isArray(source.slides)\n );\n}\n\nasync function readSource(\n source: BinaryPresentationSource,\n options: ParsePresentationOptions,\n): Promise<ArrayBuffer> {\n throwIfAborted(options.signal);\n\n let buffer: ArrayBuffer;\n if (source instanceof ArrayBuffer) {\n buffer = source.slice(0);\n } else if (source instanceof Uint8Array) {\n buffer = source.buffer.slice(\n source.byteOffset,\n source.byteOffset + source.byteLength,\n ) as ArrayBuffer;\n } else if (typeof Blob !== 'undefined' && source instanceof Blob) {\n buffer = await source.arrayBuffer();\n } else if (typeof source === 'string' || source instanceof URL) {\n let response: Response;\n try {\n const requestInit: RequestInit = { ...options.fetchInit };\n if (options.signal) requestInit.signal = options.signal;\n response = await fetch(source, requestInit);\n } catch (error) {\n throw toPptxViewerError(error, 'fetch-failed', 'Could not fetch the presentation.');\n }\n if (!response.ok) {\n throw new PptxViewerError(\n 'fetch-failed',\n `Could not fetch the presentation (${response.status} ${response.statusText}).`,\n { details: { status: response.status, url: response.url } },\n );\n }\n const declaredLength = Number(response.headers.get('content-length'));\n const maximum = options.maxInputBytes ?? DEFAULT_MAX_INPUT_BYTES;\n if (Number.isFinite(declaredLength) && declaredLength > maximum) {\n throw new PptxViewerError(\n 'resource-limit',\n `The presentation exceeds the ${Math.round(maximum / 1024 / 1024)} MB input limit.`,\n { details: { byteLength: declaredLength, maximum } },\n );\n }\n buffer = await response.arrayBuffer();\n } else {\n throw new PptxViewerError('invalid-source', 'Unsupported presentation source.');\n }\n\n throwIfAborted(options.signal);\n const maximum = options.maxInputBytes ?? DEFAULT_MAX_INPUT_BYTES;\n if (buffer.byteLength > maximum) {\n throw new PptxViewerError(\n 'resource-limit',\n `The presentation exceeds the ${Math.round(maximum / 1024 / 1024)} MB input limit.`,\n { details: { byteLength: buffer.byteLength, maximum } },\n );\n }\n if (buffer.byteLength === 0) {\n throw new PptxViewerError('invalid-source', 'The presentation is empty.');\n }\n return buffer;\n}\n\nfunction detectFormat(buffer: ArrayBuffer, hint?: PresentationFormat): PresentationFormat {\n if (hint) return hint;\n const bytes = new Uint8Array(buffer, 0, Math.min(8, buffer.byteLength));\n if (bytes[0] === 0x50 && bytes[1] === 0x4b) return 'pptx';\n if (\n bytes[0] === 0xd0 &&\n bytes[1] === 0xcf &&\n bytes[2] === 0x11 &&\n bytes[3] === 0xe0 &&\n bytes[4] === 0xa1 &&\n bytes[5] === 0xb1 &&\n bytes[6] === 0x1a &&\n bytes[7] === 0xe1\n ) {\n return 'ppt';\n }\n throw new PptxViewerError(\n 'unsupported-format',\n 'The file is neither an OOXML PowerPoint presentation (.pptx) nor a legacy PowerPoint compound document (.ppt).',\n );\n}\n\n/**\n * Parse a PowerPoint source into the format-neutral public model used by the\n * package-owned renderer.\n */\nexport async function parsePresentation(\n source: PresentationSource,\n options: ParsePresentationOptions = {},\n): Promise<ParsedPresentation> {\n if (isParsedPresentation(source)) return source;\n if (isPresentationDocument(source)) {\n return {\n kind: 'parsed-presentation',\n document: source,\n warnings: source.warnings,\n };\n }\n\n const downloadStartedAt = performanceNow();\n const buffer = await readSource(source, options);\n if (typeof source === 'string' || source instanceof URL) {\n options.onPerformanceMeasurement?.(performanceMeasurement('download', downloadStartedAt));\n }\n const format = detectFormat(buffer, options.formatHint);\n const bytes = new Uint8Array(buffer);\n throwIfAborted(options.signal);\n\n const parsingStartedAt = performanceNow();\n const nativeDocument = await parseWithWasm(bytes, {\n formatHint: format,\n ...(options.include3dModels !== undefined ? { include3dModels: options.include3dModels } : {}),\n ...(options.signal ? { signal: options.signal } : {}),\n });\n options.onPerformanceMeasurement?.(performanceMeasurement('wasm-parsing', parsingStartedAt));\n throwIfAborted(options.signal);\n\n if (!nativeDocument) {\n throw new PptxViewerError(\n format === 'ppt' ? 'unsupported-format' : 'parse-failed',\n format === 'ppt'\n ? 'This legacy .ppt file could not be decoded by the native parser.'\n : 'The PowerPoint presentation could not be decoded by the native parser.',\n );\n }\n return {\n kind: 'parsed-presentation',\n document: nativeDocument,\n warnings: nativeDocument.warnings,\n };\n}\n\nexport const presentationParsingDefaults = Object.freeze({\n maxInputBytes: DEFAULT_MAX_INPUT_BYTES,\n include3dModels: false,\n});\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n} from 'react';\nimport { useVirtualizer, type VirtualizerOptions } from '@tanstack/react-virtual';\nimport type { PresentationSearchResult } from '@extend-ai/react-pptx-model';\nimport { PptxViewerError, toPptxViewerError } from './errors';\nimport { PptxFontManager } from './fonts';\nimport { NormalizedPresentationViewer } from './normalized-viewer';\nimport { parsePresentation } from './parse';\nimport { performanceMeasurement, performanceNow } from './performance';\nimport type {\n ParsedPresentation,\n PptxViewerController,\n ReactPptxViewerProps,\n SearchHighlightOptions,\n ViewerMode,\n ViewerZoomLevel,\n ViewerZoomState,\n ViewerSearchOptions,\n} from './types';\nimport { normalizeViewerZoomLevel } from './zoom';\n\ninterface ViewerAdapter {\n render(mode: ViewerMode, slideIndex: number): Promise<void>;\n goToSlide(index: number, options?: ScrollIntoViewOptions): Promise<void>;\n setZoom(level: ViewerZoomLevel): Promise<void>;\n resolveZoom(level: ViewerZoomLevel): number;\n search(query: string | RegExp, options?: ViewerSearchOptions): PresentationSearchResult[];\n highlight(result: PresentationSearchResult, options?: SearchHighlightOptions): Promise<void>;\n clearHighlights(): void;\n renderThumbnail(index: number, target: HTMLElement, width: number): Promise<() => void>;\n destroy(): void;\n}\n\ninterface AdapterState {\n adapter: ViewerAdapter;\n generation: number;\n}\n\nconst THUMBNAIL_ROW_ESTIMATE = 123;\nconst THUMBNAIL_OVERSCAN = 1;\nconst THUMBNAIL_INITIAL_RECT = { height: 780, width: 184 };\nconst observeThumbnailFilmstripRect: NonNullable<\n VirtualizerOptions<HTMLElement, HTMLElement>['observeElementRect']\n> = (instance, callback) => {\n const element = instance.scrollElement;\n if (!element) return;\n const publish = () => {\n const rect = element.getBoundingClientRect();\n callback({\n height: rect.height || element.clientHeight || THUMBNAIL_INITIAL_RECT.height,\n width: rect.width || element.clientWidth || THUMBNAIL_INITIAL_RECT.width,\n });\n };\n publish();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(publish);\n observer.observe(element);\n return () => observer.disconnect();\n};\n\nconst clampSlide = (index: number, count: number): number =>\n Math.max(0, Math.min(Math.max(0, count - 1), Math.floor(index)));\n\nfunction viewerShellStyle(height: number | string | undefined): CSSProperties {\n return {\n '--rpv-height': typeof height === 'number' ? `${height}px` : (height ?? 'min(76vh, 780px)'),\n } as CSSProperties;\n}\n\nfunction stableRequestValue(value: unknown, seen = new WeakSet<object>()): unknown {\n if (value === null || typeof value !== 'object') return value;\n if (typeof Headers !== 'undefined' && value instanceof Headers) {\n return [...value.entries()].sort(([first], [second]) => first.localeCompare(second));\n }\n if (typeof URLSearchParams !== 'undefined' && value instanceof URLSearchParams) {\n return [...value.entries()];\n }\n if (value instanceof Date) return value.toISOString();\n if (value instanceof ArrayBuffer) return [...new Uint8Array(value)];\n if (ArrayBuffer.isView(value)) {\n return [...new Uint8Array(value.buffer, value.byteOffset, value.byteLength)];\n }\n if (typeof Blob !== 'undefined' && value instanceof Blob) {\n return { type: value.type, size: value.size };\n }\n if (seen.has(value)) return '[circular]';\n seen.add(value);\n if (Array.isArray(value)) return value.map((item) => stableRequestValue(item, seen));\n return Object.fromEntries(\n Object.entries(value)\n .sort(([first], [second]) => first.localeCompare(second))\n .map(([key, entry]) => [key, stableRequestValue(entry, seen)]),\n );\n}\n\nfunction requestInitKey(value: Omit<RequestInit, 'signal'> | undefined): string {\n if (!value) return '';\n try {\n return JSON.stringify(stableRequestValue(value)) ?? '';\n } catch {\n return String(value);\n }\n}\n\nasync function createAdapter(\n target: HTMLElement,\n parsed: ParsedPresentation,\n props: ReactPptxViewerProps,\n getCurrentProps: () => ReactPptxViewerProps,\n onCurrentSlideChange: (index: number) => void,\n onZoomChange: (state: ViewerZoomState) => void,\n reportWarning: (warning: import('@extend-ai/react-pptx-model').PresentationWarning) => void,\n isCurrent: () => boolean,\n): Promise<ViewerAdapter> {\n const fontManager = new PptxFontManager(props.fonts, (warning) => {\n if (isCurrent()) reportWarning(warning);\n });\n const fontStartedAt = performanceNow();\n await fontManager.prepare(parsed.document);\n getCurrentProps().onPerformanceMeasurement?.(\n performanceMeasurement('embedded-font-preparation', fontStartedAt),\n );\n if (!isCurrent()) {\n fontManager.destroy();\n throw new Error('Viewer adapter creation was superseded.');\n }\n let destroyed = false;\n const active = () => !destroyed && isCurrent();\n const callbacks = {\n onSlideChange: (index: number) => {\n if (active()) onCurrentSlideChange(index);\n },\n onZoomChange: (state: ViewerZoomState) => {\n if (active()) onZoomChange(state);\n },\n onSlideRendered: (index: number, element: HTMLElement) => {\n if (!active()) return;\n fontManager.applyTo(element, index);\n getCurrentProps().onSlideRendered?.(index, element);\n },\n onSlideUnmounted: (index: number) => {\n if (active()) getCurrentProps().onSlideUnmounted?.(index);\n },\n onNodeError: (nodeId: string, error: unknown) => {\n if (!active()) return;\n reportWarning({\n code: 'degraded-rendering',\n severity: 'warning',\n nodeId,\n feature: 'normalized-renderer',\n message: `A slide element could not be rendered: ${\n error instanceof Error ? error.message : String(error)\n }`,\n });\n },\n };\n\n const normalized = new NormalizedPresentationViewer(target, parsed.document, callbacks);\n return {\n async render(mode, slideIndex) {\n const startedAt = performanceNow();\n if (mode === 'continuous') {\n const virtualization = typeof props.virtualization === 'object' ? props.virtualization : {};\n await normalized.renderList({\n enabled: props.virtualization !== false,\n initialSlides: virtualization.initialSlides ?? 3,\n overscanViewport: virtualization.overscanViewport ?? 1.5,\n batchSize: virtualization.batchSize ?? 3,\n ...(virtualization.scrollElement ? { scrollElement: virtualization.scrollElement } : {}),\n initialSlideIndex: slideIndex,\n });\n } else {\n await normalized.renderSlide(slideIndex);\n }\n getCurrentProps().onPerformanceMeasurement?.(\n performanceMeasurement('slide-dom-svg-rendering', startedAt, slideIndex),\n );\n },\n goToSlide: (index, options) => normalized.goToSlide(index, options),\n setZoom: (level) => normalized.setZoom(level),\n resolveZoom: (level) => normalized.resolveZoom(level),\n search: (query, options) => normalized.searchText(query, options),\n highlight: (result, options) => normalized.highlightSearchResult(result, options),\n clearHighlights: () => normalized.clearSearchHighlights(),\n async renderThumbnail(index, thumbnailTarget, width) {\n if (!active()) return () => {};\n const handle = normalized.renderThumbnailToContainer(index, thumbnailTarget, { width });\n await handle.ready;\n if (!active()) {\n handle.dispose();\n return () => {};\n }\n fontManager.applyTo(thumbnailTarget, index);\n return () => handle.dispose();\n },\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n normalized.destroy();\n fontManager.destroy();\n },\n };\n}\n\ninterface ThumbnailProps {\n adapter: ViewerAdapter;\n index: number;\n active: boolean;\n width: number;\n onSelect: () => void;\n onRendered?: (index: number, element: HTMLElement) => void;\n}\n\nfunction Thumbnail({ adapter, index, active, width, onSelect, onRendered }: ThumbnailProps) {\n const targetRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n const target = targetRef.current;\n if (!target) return;\n let disposed = false;\n let cleanup: (() => void) | undefined;\n void adapter\n .renderThumbnail(index, target, width)\n .then((nextCleanup) => {\n if (disposed) nextCleanup();\n else {\n cleanup = nextCleanup;\n onRendered?.(index, target);\n }\n })\n .catch(() => undefined);\n return () => {\n disposed = true;\n cleanup?.();\n };\n }, [adapter, index, onRendered, width]);\n return (\n <button\n type=\"button\"\n className=\"rpv-thumbnail\"\n data-active={active || undefined}\n aria-label={`Go to slide ${index + 1}`}\n aria-current={active ? 'page' : undefined}\n onClick={onSelect}\n >\n <span className=\"rpv-thumbnail__number\">{String(index + 1).padStart(2, '0')}</span>\n <span className=\"rpv-thumbnail__canvas\" ref={targetRef} />\n </button>\n );\n}\n\nexport const ReactPptxViewer = forwardRef<PptxViewerController, ReactPptxViewerProps>(\n function ReactPptxViewer(props, forwardedRef) {\n const {\n source,\n mode = 'continuous',\n slideIndex: controlledSlide,\n initialSlide = 0,\n zoom: controlledZoom,\n defaultZoom,\n fitMode = 'contain',\n showToolbar = false,\n showThumbnails = false,\n showNotes = false,\n showDiagnostics = false,\n showSlideLabels = false,\n searchQuery,\n searchOptions,\n activeSearchResult,\n searchHighlightOptions,\n className,\n style,\n width,\n height,\n virtualization,\n fonts,\n parseOptions,\n renderLoading,\n renderError,\n renderThumbnail,\n emptyState,\n toolbarClassName,\n viewportClassName,\n toolbarStyle,\n viewportStyle,\n onReady,\n onLoad,\n onError,\n onWarning,\n onSlideChange: _onSlideChange,\n onZoomChange: _onZoomChange,\n onSlideRendered: _onSlideRendered,\n onSlideUnmounted: _onSlideUnmounted,\n onSearchResults,\n onThumbnailRendered,\n onViewportReady,\n ...divProps\n } = props;\n const viewportRef = useRef<HTMLDivElement>(null);\n const filmstripRef = useRef<HTMLElement>(null);\n const adapterRef = useRef<ViewerAdapter | undefined>(undefined);\n const adapterGenerationRef = useRef(0);\n const latestPropsRef = useRef(props);\n latestPropsRef.current = props;\n const [adapterState, setAdapterState] = useState<AdapterState | null>(null);\n const [parsed, setParsed] = useState<ParsedPresentation | null>(null);\n const [error, setError] = useState<PptxViewerError | null>(null);\n const [loading, setLoading] = useState(true);\n const [internalSlide, setInternalSlide] = useState(initialSlide);\n const [internalZoom, setInternalZoom] = useState<ViewerZoomLevel>(() =>\n normalizeViewerZoomLevel(defaultZoom ?? (fitMode === 'contain' ? 'automatic' : 100)),\n );\n const [resolvedZoom, setResolvedZoom] = useState<number>(() =>\n typeof defaultZoom === 'number' ? (normalizeViewerZoomLevel(defaultZoom) as number) : 100,\n );\n const [results, setResults] = useState<PresentationSearchResult[]>([]);\n const [runtimeWarnings, setRuntimeWarnings] = useState<\n import('@extend-ai/react-pptx-model').PresentationWarning[]\n >([]);\n const virtualizationOptions = typeof virtualization === 'object' ? virtualization : {};\n const virtualizationEnabled =\n virtualization !== false && virtualizationOptions.enabled !== false;\n const initialSlides = virtualizationOptions.initialSlides ?? 3;\n const overscanViewport = virtualizationOptions.overscanViewport ?? 1.5;\n const batchSize = virtualizationOptions.batchSize ?? 3;\n const scrollElement = virtualizationOptions.scrollElement ?? null;\n const parseFormatHint = parseOptions?.formatHint;\n const parseInclude3dModels = parseOptions?.include3dModels;\n const parseMaxInputBytes = parseOptions?.maxInputBytes;\n const parseFetchInit = parseOptions?.fetchInit;\n const parseFetchInitKey = requestInitKey(parseFetchInit);\n const slide = clampSlide(controlledSlide ?? internalSlide, parsed?.document.slides.length ?? 0);\n const zoom = normalizeViewerZoomLevel(controlledZoom ?? internalZoom);\n const latestSlideRef = useRef(slide);\n const latestZoomRef = useRef(zoom);\n const latestResolvedZoomRef = useRef(resolvedZoom);\n const latestControlledZoomRef = useRef(controlledZoom);\n const lastPublishedZoomRef = useRef<ViewerZoomState | undefined>(undefined);\n /** Last slide index the viewer itself reported through onSlideChange. */\n const lastViewerSlideRef = useRef<number | undefined>(undefined);\n latestSlideRef.current = slide;\n latestZoomRef.current = zoom;\n latestResolvedZoomRef.current = resolvedZoom;\n latestControlledZoomRef.current = controlledZoom;\n const notifyZoomChange = useCallback((state: ViewerZoomState) => {\n const previous = lastPublishedZoomRef.current;\n if (\n previous?.level === state.level &&\n Math.abs(previous.resolvedZoom - state.resolvedZoom) <= 0.01\n ) {\n return;\n }\n lastPublishedZoomRef.current = state;\n latestPropsRef.current.onZoomChange?.(state);\n }, []);\n const publishZoomChange = useCallback(\n (state: ViewerZoomState) => {\n setResolvedZoom(state.resolvedZoom);\n latestResolvedZoomRef.current = state.resolvedZoom;\n notifyZoomChange(state);\n },\n [notifyZoomChange],\n );\n const thumbnailCount = showThumbnails ? (parsed?.document.slides.length ?? 0) : 0;\n const getThumbnailKey = useCallback(\n (index: number) => parsed?.document.slides[index]?.id ?? index,\n [parsed],\n );\n const thumbnailVirtualizer = useVirtualizer({\n count: thumbnailCount,\n enabled: thumbnailCount > 0,\n estimateSize: () => THUMBNAIL_ROW_ESTIMATE,\n getItemKey: getThumbnailKey,\n getScrollElement: () => filmstripRef.current,\n initialRect: THUMBNAIL_INITIAL_RECT,\n observeElementRect: observeThumbnailFilmstripRect,\n overscan: THUMBNAIL_OVERSCAN,\n useFlushSync: false,\n });\n const virtualThumbnails = thumbnailVirtualizer.getVirtualItems();\n\n useEffect(() => {\n if (!showThumbnails || thumbnailCount === 0) return;\n thumbnailVirtualizer.scrollToIndex(slide, { align: 'auto' });\n }, [showThumbnails, slide, thumbnailCount, thumbnailVirtualizer]);\n\n const controller = useMemo<PptxViewerController>(\n () => ({\n async goToSlide(index, options) {\n const next = clampSlide(index, parsed?.document.slides.length ?? 0);\n setInternalSlide(next);\n await adapterRef.current?.goToSlide(next, options);\n },\n async next() {\n await this.goToSlide(latestSlideRef.current + 1, {\n behavior: 'smooth',\n block: 'center',\n });\n },\n async previous() {\n await this.goToSlide(latestSlideRef.current - 1, {\n behavior: 'smooth',\n block: 'center',\n });\n },\n async setZoom(level) {\n const next = normalizeViewerZoomLevel(level);\n const adapter = adapterRef.current;\n if (latestControlledZoomRef.current !== undefined) {\n notifyZoomChange({\n level: next,\n resolvedZoom:\n adapter?.resolveZoom(next) ??\n (typeof next === 'number' ? next : latestResolvedZoomRef.current),\n });\n return;\n }\n setInternalZoom(next);\n latestZoomRef.current = next;\n if (adapter) await adapter.setZoom(next);\n else {\n publishZoomChange({\n level: next,\n resolvedZoom: typeof next === 'number' ? next : latestResolvedZoomRef.current,\n });\n }\n },\n async setFitMode(nextMode) {\n await this.setZoom(nextMode === 'contain' ? 'automatic' : 100);\n },\n search(query, options) {\n return adapterRef.current?.search(query, options) ?? [];\n },\n async highlightSearchResult(result, options) {\n setInternalSlide(result.slideIndex);\n await adapterRef.current?.highlight(result, options);\n },\n clearSearchHighlights() {\n adapterRef.current?.clearHighlights();\n },\n isReady: () => Boolean(adapterRef.current),\n async renderThumbnail(index, target, options) {\n const adapter = adapterRef.current;\n if (!adapter) throw new Error('The PowerPoint viewer is not ready to render thumbnails.');\n const count = parsed?.document.slides.length ?? 0;\n if (!Number.isInteger(index) || index < 0 || index >= count) {\n throw new RangeError(`Slide ${index} does not exist.`);\n }\n return adapter.renderThumbnail(index, target, options?.width ?? 144);\n },\n getDocument: () => parsed?.document ?? null,\n getSlideIndex: () => latestSlideRef.current,\n getZoom: () => latestZoomRef.current,\n getResolvedZoom: () => latestResolvedZoomRef.current,\n }),\n [adapterState?.generation, notifyZoomChange, parsed, publishZoomChange],\n );\n useImperativeHandle(forwardedRef, () => controller, [controller]);\n\n useEffect(() => {\n const abort = new AbortController();\n adapterGenerationRef.current += 1;\n const previousAdapter = adapterRef.current;\n adapterRef.current = undefined;\n previousAdapter?.destroy();\n setAdapterState(null);\n setLoading(true);\n setError(null);\n setParsed(null);\n setRuntimeWarnings([]);\n void parsePresentation(source, {\n signal: abort.signal,\n ...(parseFormatHint ? { formatHint: parseFormatHint } : {}),\n ...(parseInclude3dModels !== undefined ? { include3dModels: parseInclude3dModels } : {}),\n ...(parseMaxInputBytes !== undefined ? { maxInputBytes: parseMaxInputBytes } : {}),\n ...(parseFetchInit ? { fetchInit: parseFetchInit } : {}),\n onPerformanceMeasurement: (measurement) =>\n latestPropsRef.current.onPerformanceMeasurement?.(measurement),\n })\n .then((next) => {\n if (abort.signal.aborted) return;\n setParsed(next);\n latestPropsRef.current.onLoad?.(next);\n for (const warning of next.warnings) latestPropsRef.current.onWarning?.(warning);\n })\n .catch((reason: unknown) => {\n if (abort.signal.aborted) return;\n const nextError = toPptxViewerError(\n reason,\n 'parse-failed',\n 'Could not open the presentation.',\n );\n setError(nextError);\n latestPropsRef.current.onError?.(nextError);\n })\n .finally(() => {\n if (!abort.signal.aborted) setLoading(false);\n });\n return () => abort.abort();\n }, [source, parseFormatHint, parseInclude3dModels, parseMaxInputBytes, parseFetchInitKey]);\n\n useEffect(() => {\n const viewport = viewportRef.current;\n if (viewport) onViewportReady?.(viewport);\n }, [onViewportReady]);\n\n useEffect(() => {\n const target = viewportRef.current;\n if (!parsed || !target || error) return;\n const generation = ++adapterGenerationRef.current;\n let disposed = false;\n let createdAdapter: ViewerAdapter | undefined;\n const isCurrent = () => !disposed && adapterGenerationRef.current === generation && !error;\n const adapterProps: ReactPptxViewerProps = {\n ...props,\n virtualization: !virtualizationEnabled\n ? false\n : {\n enabled: virtualizationEnabled,\n initialSlides,\n overscanViewport,\n batchSize,\n ...(scrollElement ? { scrollElement } : {}),\n },\n };\n setAdapterState(null);\n void (async () => {\n try {\n const adapter = await createAdapter(\n target,\n parsed,\n adapterProps,\n () => latestPropsRef.current,\n (index) => {\n if (!isCurrent()) return;\n lastViewerSlideRef.current = index;\n setInternalSlide(index);\n latestPropsRef.current.onSlideChange?.(index);\n },\n publishZoomChange,\n (warning) => {\n if (!isCurrent()) return;\n setRuntimeWarnings((current) =>\n current.some(\n (item) => item.code === warning.code && item.feature === warning.feature,\n )\n ? current\n : [...current, warning],\n );\n latestPropsRef.current.onWarning?.(warning);\n },\n isCurrent,\n );\n createdAdapter = adapter;\n if (!isCurrent()) {\n adapter.destroy();\n return;\n }\n await adapter.setZoom(latestZoomRef.current);\n if (!isCurrent()) {\n adapter.destroy();\n return;\n }\n await adapter.render(mode, latestSlideRef.current);\n if (!isCurrent()) {\n adapter.destroy();\n return;\n }\n adapterRef.current = adapter;\n setAdapterState({ adapter, generation });\n if (!isCurrent()) return;\n latestPropsRef.current.onReady?.(controller);\n } catch (reason: unknown) {\n if (!isCurrent()) return;\n const nextError = toPptxViewerError(\n reason,\n 'render-failed',\n 'Could not render the presentation.',\n );\n setError(nextError);\n latestPropsRef.current.onError?.(nextError);\n }\n })();\n return () => {\n disposed = true;\n if (adapterGenerationRef.current === generation) adapterGenerationRef.current += 1;\n if (adapterRef.current === createdAdapter) adapterRef.current = undefined;\n createdAdapter?.destroy();\n setAdapterState((current) => (current?.generation === generation ? null : current));\n };\n }, [\n parsed,\n error,\n mode,\n fonts,\n virtualizationEnabled,\n initialSlides,\n overscanViewport,\n batchSize,\n scrollElement,\n publishZoomChange,\n ]);\n\n useEffect(() => {\n // Skip echoes: controlled hosts feed onSlideChange back into slideIndex\n // while the user scrolls, and navigating to the already-visible slide\n // would snap the scroll position.\n if (adapterState && controlledSlide !== undefined && slide !== lastViewerSlideRef.current) {\n void adapterState.adapter.goToSlide(slide, { behavior: 'instant' });\n }\n }, [adapterState, controlledSlide, slide]);\n useEffect(() => {\n if (adapterState) void adapterState.adapter.setZoom(zoom);\n }, [adapterState, zoom]);\n useEffect(() => {\n if (controlledZoom !== undefined || defaultZoom !== undefined) return;\n setInternalZoom(fitMode === 'contain' ? 'automatic' : 100);\n }, [controlledZoom, defaultZoom, fitMode]);\n useEffect(() => {\n const adapter = adapterState?.adapter;\n if (!adapter || searchQuery === undefined || searchQuery === '') {\n setResults([]);\n onSearchResults?.([]);\n adapter?.clearHighlights();\n return;\n }\n const next = adapter.search(searchQuery, searchOptions);\n setResults(next);\n onSearchResults?.(next);\n }, [adapterState, searchQuery, searchOptions, onSearchResults]);\n useEffect(() => {\n const adapter = adapterState?.adapter;\n if (!adapter) return;\n if (activeSearchResult === null || activeSearchResult === undefined) {\n adapter.clearHighlights();\n return;\n }\n const result =\n typeof activeSearchResult === 'number' ? results[activeSearchResult] : activeSearchResult;\n if (result) void controller.highlightSearchResult(result, searchHighlightOptions);\n }, [adapterState, activeSearchResult, results, searchHighlightOptions, controller]);\n\n const go = useCallback(\n (index: number) => {\n setInternalSlide(index);\n void controller.goToSlide(index, { behavior: 'smooth', block: 'center' });\n },\n [controller],\n );\n const notes = parsed?.document.slides[slide]?.notes ?? [];\n return (\n <div\n {...divProps}\n className={['rpv-root', className].filter(Boolean).join(' ')}\n style={{ ...viewerShellStyle(height), ...(width !== undefined ? { width } : {}), ...style }}\n data-rpv-scroll-owner={scrollElement ? 'external' : 'internal'}\n >\n {showToolbar && parsed ? (\n <div\n className={['rpv-toolbar', toolbarClassName].filter(Boolean).join(' ')}\n style={toolbarStyle}\n >\n <div className=\"rpv-toolbar__cluster\">\n <button\n type=\"button\"\n onClick={() => void controller.previous()}\n disabled={slide === 0}\n aria-label=\"Previous slide\"\n >\n ←\n </button>\n <span className=\"rpv-toolbar__count\">\n {slide + 1} / {parsed.document.slides.length}\n </span>\n <button\n type=\"button\"\n onClick={() => void controller.next()}\n disabled={slide >= parsed.document.slides.length - 1}\n aria-label=\"Next slide\"\n >\n →\n </button>\n </div>\n <div className=\"rpv-toolbar__cluster\">\n <button\n type=\"button\"\n onClick={() => void controller.setZoom(resolvedZoom - 10)}\n aria-label=\"Zoom out\"\n >\n −\n </button>\n <span className=\"rpv-toolbar__count\">{Math.round(resolvedZoom)}%</span>\n <button\n type=\"button\"\n onClick={() => void controller.setZoom(resolvedZoom + 10)}\n aria-label=\"Zoom in\"\n >\n +\n </button>\n </div>\n </div>\n ) : null}\n <div className=\"rpv-workspace\">\n {showThumbnails && parsed ? (\n <nav ref={filmstripRef} className=\"rpv-filmstrip\" aria-label=\"Slide thumbnails\">\n <div\n className=\"rpv-filmstrip__sizer\"\n style={{ height: thumbnailVirtualizer.getTotalSize() }}\n >\n {virtualThumbnails.map((virtualThumbnail) => {\n const item = parsed.document.slides[virtualThumbnail.index];\n if (!item) return null;\n const index = virtualThumbnail.index;\n return (\n <div\n key={virtualThumbnail.key}\n ref={thumbnailVirtualizer.measureElement}\n className=\"rpv-filmstrip__item\"\n data-index={index}\n style={{ transform: `translateY(${virtualThumbnail.start}px)` }}\n >\n {renderThumbnail ? (\n renderThumbnail({\n slideIndex: index,\n slideCount: parsed.document.slides.length,\n isCurrent: index === slide,\n goToSlide: () => go(index),\n })\n ) : adapterState ? (\n <Thumbnail\n adapter={adapterState.adapter}\n index={index}\n active={index === slide}\n width={144}\n onSelect={() => go(index)}\n {...(onThumbnailRendered ? { onRendered: onThumbnailRendered } : {})}\n />\n ) : null}\n </div>\n );\n })}\n </div>\n </nav>\n ) : null}\n <main className=\"rpv-stage\">\n {loading ? (\n <div className=\"rpv-status\">\n {renderLoading?.() ?? (\n <>\n <span className=\"rpv-spinner\" />\n Opening presentation…\n </>\n )}\n </div>\n ) : null}\n {error ? (\n <div className=\"rpv-status rpv-status--error\">\n {renderError?.(error) ?? (\n <>\n <strong>Couldn’t open this deck.</strong>\n <span>{error.message}</span>\n </>\n )}\n </div>\n ) : null}\n {!loading && !error && parsed?.document.slides.length === 0 ? (\n <div className=\"rpv-status\">{emptyState ?? 'This presentation has no slides.'}</div>\n ) : null}\n <div\n ref={viewportRef}\n className={['rpv-viewport', viewportClassName].filter(Boolean).join(' ')}\n style={viewportStyle}\n data-testid=\"pptx-viewport\"\n data-rpv-scroll-owner={scrollElement ? 'external' : 'internal'}\n aria-live=\"polite\"\n />\n {showSlideLabels && parsed ? (\n <div className=\"rpv-slide-label\">Slide {slide + 1}</div>\n ) : null}\n </main>\n {showDiagnostics && parsed ? (\n <aside className=\"rpv-diagnostics\" aria-label=\"Rendering diagnostics\">\n <h2>Diagnostics</h2>\n <dl>\n <div>\n <dt>Format</dt>\n <dd>{parsed.document.format.toUpperCase()}</dd>\n </div>\n <div>\n <dt>Slides</dt>\n <dd>{parsed.document.slides.length}</dd>\n </div>\n <div>\n <dt>Warnings</dt>\n <dd>{parsed.warnings.length + runtimeWarnings.length}</dd>\n </div>\n </dl>\n {parsed.warnings.map((warning, index) => (\n <p key={`${warning.code}-${index}`} data-severity={warning.severity}>\n <strong>{warning.code}</strong>\n {warning.message}\n </p>\n ))}\n {runtimeWarnings.map((warning, index) => (\n <p\n key={`runtime-${warning.code}-${warning.feature ?? index}`}\n data-severity={warning.severity}\n >\n <strong>{warning.code}</strong>\n {warning.message}\n </p>\n ))}\n </aside>\n ) : null}\n </div>\n {showNotes && notes.length ? (\n <section className=\"rpv-notes\">\n <h2>Speaker notes</h2>\n {notes.map((note, index) => (\n <p key={index}>{note.text}</p>\n ))}\n </section>\n ) : null}\n </div>\n );\n },\n);\n","import { useCallback, useEffect, useState, type RefCallback } from 'react';\nimport { toPptxViewerError, type PptxViewerError } from './errors';\nimport { parsePresentation } from './parse';\nimport type {\n ParsePresentationOptions,\n ParsedPresentation,\n PptxViewerController,\n PresentationSource,\n} from './types';\n\nexport interface UsePptxPresentationState {\n presentation: ParsedPresentation | null;\n document: ParsedPresentation['document'] | null;\n isLoading: boolean;\n error: PptxViewerError | null;\n}\n\nconst EMPTY_PARSE_OPTIONS: ParsePresentationOptions = Object.freeze({});\n\n/** Parse a presentation independently from the viewer, mirroring `useDocxModel`. */\nexport function usePptxPresentation(\n source?: PresentationSource | null,\n options: ParsePresentationOptions = EMPTY_PARSE_OPTIONS,\n): UsePptxPresentationState {\n const [state, setState] = useState<UsePptxPresentationState>({\n presentation: null,\n document: null,\n isLoading: Boolean(source),\n error: null,\n });\n\n useEffect(() => {\n if (!source) {\n setState({ presentation: null, document: null, isLoading: false, error: null });\n return;\n }\n const abort = new AbortController();\n setState((current) => ({ ...current, isLoading: true, error: null }));\n void parsePresentation(source, { ...options, signal: abort.signal })\n .then((presentation) => {\n if (!abort.signal.aborted) {\n setState({\n presentation,\n document: presentation.document,\n isLoading: false,\n error: null,\n });\n }\n })\n .catch((reason: unknown) => {\n if (!abort.signal.aborted) {\n setState({\n presentation: null,\n document: null,\n isLoading: false,\n error: toPptxViewerError(reason, 'parse-failed', 'Could not open the presentation.'),\n });\n }\n });\n return () => abort.abort();\n }, [source, options.fetchInit, options.formatHint, options.maxInputBytes, options.include3dModels]);\n\n return state;\n}\n\n/** Backwards-friendly model-oriented alias. */\nexport const usePptxModel = usePptxPresentation;\n\nexport interface UsePptxViewerResult {\n controller: PptxViewerController | null;\n ref: RefCallback<PptxViewerController>;\n}\n\n/** Reactive access to the imperative viewer controller. */\nexport function usePptxViewer(): UsePptxViewerResult {\n const [controller, setController] = useState<PptxViewerController | null>(null);\n const ref = useCallback<RefCallback<PptxViewerController>>((value) => setController(value), []);\n return { controller, ref };\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type {\n PptxSlideThumbnailItem,\n PptxSlideThumbnailResolution,\n PptxSlideThumbnailStatus,\n PptxViewerController,\n PptxViewerThumbnails,\n UsePptxViewerThumbnailsOptions,\n} from './types';\n\nconst EMU_PER_CSS_PIXEL = 9_525;\nconst DEFAULT_MAX_DIMENSION = 160;\n\ninterface ThumbnailState {\n error?: Error;\n status: PptxSlideThumbnailStatus;\n}\n\ninterface PrefetchedThumbnail {\n cleanup: () => void;\n element: HTMLElement;\n width: number;\n}\n\nfunction normalizeSlideIndexes(\n indexes: readonly number[] | undefined,\n slideCount: number,\n sort = true,\n): number[] {\n if (!indexes?.length || slideCount <= 0) return [];\n const normalized = [...new Set(indexes)].filter(\n (index) => Number.isInteger(index) && index >= 0 && index < slideCount,\n );\n return sort ? normalized.sort((left, right) => left - right) : normalized;\n}\n\nfunction finitePositive(value: number | undefined): number | undefined {\n return value !== undefined && Number.isFinite(value) && value > 0 ? value : undefined;\n}\n\nfunction thumbnailBounds(resolution?: PptxSlideThumbnailResolution): {\n maxHeight: number;\n maxWidth: number;\n} {\n if (typeof resolution === 'number') {\n const maximum = finitePositive(resolution) ?? DEFAULT_MAX_DIMENSION;\n return { maxHeight: maximum, maxWidth: maximum };\n }\n const maxHeight = finitePositive(resolution?.maxHeight);\n const maxWidth = finitePositive(resolution?.maxWidth);\n if (maxHeight === undefined && maxWidth === undefined) {\n return { maxHeight: DEFAULT_MAX_DIMENSION, maxWidth: DEFAULT_MAX_DIMENSION };\n }\n return {\n maxHeight: maxHeight ?? Number.POSITIVE_INFINITY,\n maxWidth: maxWidth ?? Number.POSITIVE_INFINITY,\n };\n}\n\nfunction thumbnailSize(\n sourceWidth: number,\n sourceHeight: number,\n resolution?: PptxSlideThumbnailResolution,\n): { height: number; width: number } {\n const { maxHeight, maxWidth } = thumbnailBounds(resolution);\n const scale = Math.min(maxWidth / sourceWidth, maxHeight / sourceHeight);\n return {\n height: Math.max(1, sourceHeight * scale),\n width: Math.max(1, sourceWidth * scale),\n };\n}\n\nfunction asError(reason: unknown): Error {\n return reason instanceof Error ? reason : new Error(String(reason));\n}\n\n/**\n * Exposes detached slide previews for consumer-owned thumbnail rails.\n *\n * PPTX slides remain live DOM/SVG surfaces to preserve the main viewer's\n * rendering fidelity. Attach `thumbnail.containerRef` to a sized element.\n */\nexport function usePptxViewerThumbnails(\n controller: PptxViewerController | null | undefined,\n options: UsePptxViewerThumbnailsOptions = {},\n): PptxViewerThumbnails {\n const presentation = controller?.getDocument() ?? null;\n const disabled = options.disabled ?? false;\n const resolution = options.resolution;\n const attachedElementsRef = useRef(new Map<number, HTMLElement>());\n const cleanupsRef = useRef(new Map<number, () => void>());\n const prefetchedRef = useRef(new Map<number, PrefetchedThumbnail>());\n const prefetchInFlightRef = useRef(new Map<number, Promise<void>>());\n const renderGenerationRef = useRef(new Map<number, number>());\n const refCallbacksRef = useRef(new Map<number, (element: HTMLElement | null) => void>());\n const attachRef = useRef<(index: number, element: HTMLElement | null) => void>(() => {});\n const mountedRef = useRef(true);\n const [states, setStates] = useState<Record<number, ThumbnailState>>({});\n\n const slideCount = presentation?.slides.length ?? 0;\n const visibleSlideIndexes = useMemo(\n () => normalizeSlideIndexes(options.renderWindow?.visibleSlideIndexes, slideCount),\n [options.renderWindow?.visibleSlideIndexes, slideCount],\n );\n const prefetchSlideIndexes = useMemo(\n () => normalizeSlideIndexes(options.renderWindow?.prefetchSlideIndexes, slideCount, false),\n [options.renderWindow?.prefetchSlideIndexes, slideCount],\n );\n const visibleSlideIndexesKey = visibleSlideIndexes.join(',');\n const prefetchSlideIndexesKey = prefetchSlideIndexes.join(',');\n const visibleSlideIndexSet = useMemo(\n () => new Set(visibleSlideIndexes),\n [visibleSlideIndexesKey],\n );\n const visibleSlideIndexSetRef = useRef(visibleSlideIndexSet);\n visibleSlideIndexSetRef.current = visibleSlideIndexSet;\n const requestedPrefetchSlideIndexSetRef = useRef(new Set(prefetchSlideIndexes));\n requestedPrefetchSlideIndexSetRef.current = new Set(prefetchSlideIndexes);\n\n const sourceWidth = Math.max(1, (presentation?.size.widthEmu ?? 1) / EMU_PER_CSS_PIXEL);\n const sourceHeight = Math.max(1, (presentation?.size.heightEmu ?? 1) / EMU_PER_CSS_PIXEL);\n const size = thumbnailSize(sourceWidth, sourceHeight, resolution);\n\n const setThumbnailState = useCallback((index: number, state: ThumbnailState) => {\n if (!mountedRef.current) return;\n setStates((current) => {\n const previous = current[index];\n if (previous?.status === state.status && previous.error === state.error) return current;\n return { ...current, [index]: state };\n });\n }, []);\n\n const invalidateThumbnail = useCallback((index: number) => {\n renderGenerationRef.current.set(index, (renderGenerationRef.current.get(index) ?? 0) + 1);\n }, []);\n\n const disposeAttachedThumbnail = useCallback((index: number) => {\n cleanupsRef.current.get(index)?.();\n cleanupsRef.current.delete(index);\n }, []);\n\n const disposePrefetchedThumbnail = useCallback((index: number) => {\n prefetchedRef.current.get(index)?.cleanup();\n prefetchedRef.current.delete(index);\n }, []);\n\n const disposeThumbnail = useCallback(\n (index: number) => {\n invalidateThumbnail(index);\n disposeAttachedThumbnail(index);\n disposePrefetchedThumbnail(index);\n },\n [disposeAttachedThumbnail, disposePrefetchedThumbnail, invalidateThumbnail],\n );\n\n const renderThumbnail = useCallback(\n async (slideIndex: number, element: HTMLElement): Promise<void> => {\n disposeThumbnail(slideIndex);\n attachedElementsRef.current.set(slideIndex, element);\n if (disabled || !controller?.isReady()) {\n setThumbnailState(slideIndex, { status: 'idle' });\n return;\n }\n const generation = (renderGenerationRef.current.get(slideIndex) ?? 0) + 1;\n renderGenerationRef.current.set(slideIndex, generation);\n setThumbnailState(slideIndex, { status: 'rendering' });\n try {\n const cleanup = await controller.renderThumbnail(slideIndex, element, {\n width: size.width,\n });\n if (\n !mountedRef.current ||\n renderGenerationRef.current.get(slideIndex) !== generation ||\n attachedElementsRef.current.get(slideIndex) !== element\n ) {\n cleanup();\n return;\n }\n cleanupsRef.current.set(slideIndex, cleanup);\n setThumbnailState(slideIndex, { status: 'ready' });\n } catch (reason: unknown) {\n if (!mountedRef.current || renderGenerationRef.current.get(slideIndex) !== generation) {\n return;\n }\n setThumbnailState(slideIndex, { error: asError(reason), status: 'error' });\n }\n },\n [controller, disabled, disposeThumbnail, setThumbnailState, size.width],\n );\n\n attachRef.current = (index, element) => {\n const previous = attachedElementsRef.current.get(index);\n if (previous === element) return;\n if (!element) {\n invalidateThumbnail(index);\n disposeAttachedThumbnail(index);\n attachedElementsRef.current.delete(index);\n setThumbnailState(index, { status: 'idle' });\n return;\n }\n\n invalidateThumbnail(index);\n disposeAttachedThumbnail(index);\n attachedElementsRef.current.set(index, element);\n const prefetched = prefetchedRef.current.get(index);\n if (prefetched && !disabled && controller?.isReady() && prefetched.width === size.width) {\n prefetchedRef.current.delete(index);\n element.replaceChildren(...Array.from(prefetched.element.childNodes));\n cleanupsRef.current.set(index, prefetched.cleanup);\n setThumbnailState(index, { status: 'ready' });\n return;\n }\n disposePrefetchedThumbnail(index);\n void renderThumbnail(index, element);\n };\n\n const refForIndex = useCallback((index: number) => {\n let callback = refCallbacksRef.current.get(index);\n if (!callback) {\n callback = (element) => attachRef.current(index, element);\n refCallbacksRef.current.set(index, callback);\n }\n return callback;\n }, []);\n\n const rerenderAttachedThumbnails = useCallback(async (): Promise<void> => {\n const attached = [...attachedElementsRef.current].sort(([leftIndex], [rightIndex]) => {\n const leftPriority = visibleSlideIndexSetRef.current.has(leftIndex) ? 0 : 1;\n const rightPriority = visibleSlideIndexSetRef.current.has(rightIndex) ? 0 : 1;\n return leftPriority - rightPriority || leftIndex - rightIndex;\n });\n await Promise.all(attached.map(([index, element]) => renderThumbnail(index, element)));\n }, [renderThumbnail]);\n\n const prefetchThumbnail = useCallback(\n async (slideIndex: number): Promise<void> => {\n while (true) {\n const existing = prefetchInFlightRef.current.get(slideIndex);\n if (existing) {\n await existing;\n continue;\n }\n if (\n disabled ||\n !controller?.isReady() ||\n attachedElementsRef.current.has(slideIndex) ||\n prefetchedRef.current.has(slideIndex) ||\n !requestedPrefetchSlideIndexSetRef.current.has(slideIndex)\n ) {\n return;\n }\n\n const generation = (renderGenerationRef.current.get(slideIndex) ?? 0) + 1;\n renderGenerationRef.current.set(slideIndex, generation);\n const element = globalThis.document.createElement('div');\n setThumbnailState(slideIndex, { status: 'rendering' });\n const pending = (async () => {\n try {\n const cleanup = await controller.renderThumbnail(slideIndex, element, {\n width: size.width,\n });\n if (\n !mountedRef.current ||\n renderGenerationRef.current.get(slideIndex) !== generation ||\n attachedElementsRef.current.has(slideIndex) ||\n !requestedPrefetchSlideIndexSetRef.current.has(slideIndex)\n ) {\n cleanup();\n return;\n }\n prefetchedRef.current.set(slideIndex, { cleanup, element, width: size.width });\n setThumbnailState(slideIndex, { status: 'ready' });\n } catch (reason: unknown) {\n if (!mountedRef.current || renderGenerationRef.current.get(slideIndex) !== generation) {\n return;\n }\n setThumbnailState(slideIndex, { error: asError(reason), status: 'error' });\n }\n })();\n prefetchInFlightRef.current.set(slideIndex, pending);\n try {\n await pending;\n } finally {\n if (prefetchInFlightRef.current.get(slideIndex) === pending) {\n prefetchInFlightRef.current.delete(slideIndex);\n }\n }\n return;\n }\n },\n [controller, disabled, setThumbnailState, size.width],\n );\n\n useEffect(() => {\n mountedRef.current = true;\n return () => {\n mountedRef.current = false;\n for (const index of renderGenerationRef.current.keys()) {\n renderGenerationRef.current.set(index, (renderGenerationRef.current.get(index) ?? 0) + 1);\n }\n for (const cleanup of cleanupsRef.current.values()) cleanup();\n cleanupsRef.current.clear();\n for (const prefetched of prefetchedRef.current.values()) prefetched.cleanup();\n prefetchedRef.current.clear();\n prefetchInFlightRef.current.clear();\n };\n }, []);\n\n useEffect(\n () => () => {\n for (const index of prefetchInFlightRef.current.keys()) invalidateThumbnail(index);\n // The invalidated promises may belong to a previous controller or\n // resolution and must not gate replacement work for the same slide.\n prefetchInFlightRef.current.clear();\n for (const prefetched of prefetchedRef.current.values()) prefetched.cleanup();\n prefetchedRef.current.clear();\n },\n [controller, invalidateThumbnail, size.width],\n );\n\n useEffect(() => {\n void rerenderAttachedThumbnails();\n }, [rerenderAttachedThumbnails]);\n\n useEffect(() => {\n for (const index of [...prefetchedRef.current.keys()]) {\n if (disabled || !requestedPrefetchSlideIndexSetRef.current.has(index)) {\n disposePrefetchedThumbnail(index);\n if (!attachedElementsRef.current.has(index)) setThumbnailState(index, { status: 'idle' });\n }\n }\n for (const index of prefetchInFlightRef.current.keys()) {\n if (\n disabled ||\n attachedElementsRef.current.has(index) ||\n !requestedPrefetchSlideIndexSetRef.current.has(index)\n ) {\n invalidateThumbnail(index);\n prefetchInFlightRef.current.delete(index);\n if (!attachedElementsRef.current.has(index)) setThumbnailState(index, { status: 'idle' });\n }\n }\n if (disabled) return;\n\n let cancelled = false;\n void (async () => {\n for (const index of prefetchSlideIndexes) {\n if (cancelled) return;\n await prefetchThumbnail(index);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [\n disabled,\n disposePrefetchedThumbnail,\n invalidateThumbnail,\n prefetchSlideIndexesKey,\n prefetchThumbnail,\n setThumbnailState,\n ]);\n\n const thumbnails = useMemo<PptxSlideThumbnailItem[]>(\n () =>\n (presentation?.slides ?? []).map((slide, slideIndex) => {\n const state = states[slideIndex] ?? { status: 'idle' as const };\n return {\n aspectRatio: sourceWidth / sourceHeight,\n contentHeight: sourceHeight,\n contentWidth: sourceWidth,\n containerRef: refForIndex(slideIndex),\n ...(state.error ? { error: state.error } : {}),\n height: size.height,\n slide,\n slideIndex,\n slideNumber: slideIndex + 1,\n status: state.status,\n renderToContainer: (element: HTMLElement) => renderThumbnail(slideIndex, element),\n width: size.width,\n };\n }),\n [\n presentation,\n refForIndex,\n renderThumbnail,\n size.height,\n size.width,\n sourceHeight,\n sourceWidth,\n states,\n ],\n );\n\n return useMemo(\n () => ({ renderThumbnail, rerenderAttachedThumbnails, thumbnails }),\n [renderThumbnail, rerenderAttachedThumbnails, thumbnails],\n );\n}\n","import { PptxViewerError, throwIfAborted } from './errors';\nimport { PptxFontManager } from './fonts';\nimport { NormalizedPresentationViewer } from './normalized-viewer';\nimport { performanceMeasurement, performanceNow } from './performance';\nimport type {\n ParsedPresentation,\n PptxPerformanceMeasurement,\n PptxThumbnailRenderOptions,\n PptxThumbnailRenderer,\n PptxThumbnailRendererOptions,\n PptxThumbnailRenderResult,\n} from './types';\n\nconst EMU_PER_CSS_PIXEL = 9_525;\nconst DEFAULT_MAX_DIMENSION = 160;\n\ntype ThumbnailData = Blob | HTMLCanvasElement | ImageBitmap | string;\n\ninterface QueueWaiter {\n reject: (reason: unknown) => void;\n resolve: (release: () => void) => void;\n signal?: AbortSignal;\n abort?: () => void;\n}\n\nclass RenderQueue {\n private active = 0;\n private destroyed = false;\n private readonly waiters: QueueWaiter[] = [];\n\n constructor(private readonly limit: number) {}\n\n acquire(signal?: AbortSignal): Promise<() => void> {\n throwIfAborted(signal);\n if (this.destroyed) return Promise.reject(abortedError());\n return new Promise((resolve, reject) => {\n const waiter: QueueWaiter = { resolve, reject, ...(signal ? { signal } : {}) };\n if (signal) {\n waiter.abort = () => {\n const index = this.waiters.indexOf(waiter);\n if (index >= 0) this.waiters.splice(index, 1);\n reject(abortedError(signal.reason));\n };\n signal.addEventListener('abort', waiter.abort, { once: true });\n }\n this.waiters.push(waiter);\n this.drain();\n });\n }\n\n destroy(): void {\n this.destroyed = true;\n for (const waiter of this.waiters.splice(0)) {\n if (waiter.abort && waiter.signal) {\n waiter.signal.removeEventListener('abort', waiter.abort);\n }\n waiter.reject(abortedError());\n }\n }\n\n private drain(): void {\n while (!this.destroyed && this.active < this.limit && this.waiters.length) {\n const waiter = this.waiters.shift()!;\n if (waiter.abort && waiter.signal) {\n waiter.signal.removeEventListener('abort', waiter.abort);\n }\n if (waiter.signal?.aborted) {\n waiter.reject(abortedError(waiter.signal.reason));\n continue;\n }\n this.active += 1;\n let released = false;\n waiter.resolve(() => {\n if (released) return;\n released = true;\n this.active -= 1;\n this.drain();\n });\n }\n }\n}\n\nfunction abortedError(reason?: unknown): PptxViewerError {\n return new PptxViewerError('aborted', 'Thumbnail rendering was cancelled.', { cause: reason });\n}\n\nfunction finitePositive(value: number | undefined, fallback: number): number {\n return value !== undefined && Number.isFinite(value) && value > 0 ? value : fallback;\n}\n\nfunction outputSize(\n presentation: ParsedPresentation,\n options: PptxThumbnailRenderOptions,\n): { height: number; naturalHeight: number; naturalWidth: number; width: number } {\n const naturalWidth = Math.max(1, presentation.document.size.widthEmu / EMU_PER_CSS_PIXEL);\n const naturalHeight = Math.max(1, presentation.document.size.heightEmu / EMU_PER_CSS_PIXEL);\n const hasWidth =\n options.maxWidth !== undefined && Number.isFinite(options.maxWidth) && options.maxWidth > 0;\n const hasHeight =\n options.maxHeight !== undefined && Number.isFinite(options.maxHeight) && options.maxHeight > 0;\n const maxWidth = hasWidth\n ? options.maxWidth!\n : hasHeight\n ? Number.POSITIVE_INFINITY\n : DEFAULT_MAX_DIMENSION;\n const maxHeight = hasHeight\n ? options.maxHeight!\n : hasWidth\n ? Number.POSITIVE_INFINITY\n : DEFAULT_MAX_DIMENSION;\n const scale = Math.min(maxWidth / naturalWidth, maxHeight / naturalHeight);\n return {\n height: Math.max(1, Math.round(naturalHeight * scale)),\n naturalHeight,\n naturalWidth,\n width: Math.max(1, Math.round(naturalWidth * scale)),\n };\n}\n\nfunction blobToDataUrl(blob: Blob, signal?: AbortSignal): Promise<string> {\n return abortable(\n new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(String(reader.result));\n reader.onerror = () => reject(reader.error ?? new Error('Could not read a slide asset.'));\n reader.readAsDataURL(blob);\n }),\n signal,\n );\n}\n\nasync function inlineResourceUrl(url: string, signal?: AbortSignal): Promise<string> {\n if (!/^(?:blob:|https?:)/i.test(url)) return url;\n try {\n const response = await fetch(url, signal ? { signal } : undefined);\n if (!response.ok) return url;\n return await blobToDataUrl(await response.blob(), signal);\n } catch {\n throwIfAborted(signal);\n return url;\n }\n}\n\nasync function inlineResources(root: HTMLElement, signal?: AbortSignal): Promise<void> {\n const cache = new Map<string, Promise<string>>();\n const inline = (url: string): Promise<string> => {\n let pending = cache.get(url);\n if (!pending) {\n pending = inlineResourceUrl(url, signal);\n cache.set(url, pending);\n }\n return pending;\n };\n const elements = [root, ...root.querySelectorAll<HTMLElement | SVGElement>('*')];\n await Promise.all(\n elements.flatMap((element) => {\n const attributeNames = ['src', 'poster', ...(element.localName === 'image' ? ['href'] : [])];\n const attributes = attributeNames\n .map((name) => ({ name, value: element.getAttribute(name) }))\n .filter((entry): entry is { name: string; value: string } => Boolean(entry.value));\n const attributeTasks = attributes.map(async ({ name, value }) => {\n element.setAttribute(name, await inline(value));\n });\n const styleTasks = Array.from({ length: element.style.length }, (_, index) =>\n element.style.item(index),\n )\n .map((property) => ({ property, value: element.style.getPropertyValue(property) }))\n .filter(({ value }) => value.includes('url('))\n .map(async ({ property, value }) => {\n const urls = [...value.matchAll(/url\\([\"']?([^\"')]+)[\"']?\\)/g)].map((match) => match[1]!);\n let next = value;\n for (const url of urls) next = next.replace(url, await inline(url));\n element.style.setProperty(property, next);\n });\n return [...attributeTasks, ...styleTasks];\n }),\n );\n}\n\nasync function serializeSlide(\n slide: HTMLElement,\n naturalWidth: number,\n naturalHeight: number,\n width: number,\n height: number,\n signal?: AbortSignal,\n): Promise<string> {\n const clone = slide.cloneNode(true) as HTMLElement;\n clone.style.transform = 'none';\n clone.style.transformOrigin = 'top left';\n clone.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml');\n\n const sourceCanvases = slide.querySelectorAll('canvas');\n const clonedCanvases = clone.querySelectorAll('canvas');\n sourceCanvases.forEach((canvas, index) => {\n const cloned = clonedCanvases[index];\n if (!cloned) return;\n try {\n const image = document.createElement('img');\n image.src = canvas.toDataURL('image/png');\n image.setAttribute('style', cloned.getAttribute('style') ?? '');\n cloned.replaceWith(image);\n } catch {\n cloned.remove();\n }\n });\n\n await inlineResources(clone, signal);\n\n const content = new XMLSerializer().serializeToString(clone);\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\" viewBox=\"0 0 ${naturalWidth} ${naturalHeight}\"><foreignObject width=\"${naturalWidth}\" height=\"${naturalHeight}\">${content}</foreignObject></svg>`;\n}\n\nasync function abortable<T>(promise: Promise<T>, signal?: AbortSignal): Promise<T> {\n throwIfAborted(signal);\n if (!signal) return promise;\n return new Promise<T>((resolve, reject) => {\n const abort = () => reject(abortedError(signal.reason));\n signal.addEventListener('abort', abort, { once: true });\n void promise.then(\n (value) => {\n signal.removeEventListener('abort', abort);\n resolve(value);\n },\n (error: unknown) => {\n signal.removeEventListener('abort', abort);\n reject(error);\n },\n );\n });\n}\n\nasync function decodeElementImages(root: HTMLElement, signal?: AbortSignal): Promise<void> {\n const images = [...root.querySelectorAll<HTMLImageElement>('img')];\n const svgImages = [...root.querySelectorAll<SVGImageElement>('image')]\n .map((image) => image.href.baseVal || image.getAttribute('href') || '')\n .filter(Boolean);\n await abortable(\n Promise.all([\n ...images.map(async (image) => {\n if (typeof image.decode === 'function') await image.decode().catch(() => undefined);\n }),\n ...svgImages.map(\n (source) =>\n new Promise<void>((resolve) => {\n const image = new Image();\n image.onload = () => resolve();\n image.onerror = () => resolve();\n image.src = source;\n }),\n ),\n ]).then(() => undefined),\n signal,\n );\n}\n\nasync function decodeSvg(svg: string, signal?: AbortSignal): Promise<HTMLImageElement> {\n return abortable(\n new Promise<HTMLImageElement>((resolve, reject) => {\n const image = new Image();\n image.onload = () => resolve(image);\n image.onerror = () => reject(new Error('The rendered slide SVG could not be decoded.'));\n image.src = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`;\n }),\n signal,\n );\n}\n\nfunction canvasToBlob(canvas: HTMLCanvasElement, quality?: number): Promise<Blob> {\n return new Promise((resolve, reject) => {\n canvas.toBlob(\n (blob) => {\n if (blob) resolve(blob);\n else reject(new Error('The browser could not encode the thumbnail.'));\n },\n 'image/png',\n quality,\n );\n });\n}\n\nclass ThumbnailRenderer implements PptxThumbnailRenderer {\n readonly ready: Promise<void>;\n private readonly fontManager: PptxFontManager;\n private readonly queue: RenderQueue;\n private readonly root: HTMLDivElement;\n private readonly viewer: NormalizedPresentationViewer;\n private destroyed = false;\n\n constructor(\n readonly presentation: ParsedPresentation,\n private readonly options: PptxThumbnailRendererOptions,\n ) {\n if (typeof document === 'undefined') {\n throw new PptxViewerError(\n 'unsupported-environment',\n 'Thumbnail rendering requires a browser DOM.',\n );\n }\n const concurrency = Math.max(1, Math.floor(finitePositive(options.concurrency, 2)));\n this.queue = new RenderQueue(concurrency);\n this.root = document.createElement('div');\n this.root.setAttribute('aria-hidden', 'true');\n this.root.style.position = 'fixed';\n this.root.style.left = '-100000px';\n this.root.style.top = '0';\n this.root.style.pointerEvents = 'none';\n this.root.style.opacity = '0';\n document.body.append(this.root);\n this.fontManager = new PptxFontManager(\n {\n loadEmbeddedFonts: false,\n reportMissingFonts: false,\n waitForFonts: false,\n ...options.fonts,\n },\n (warning) => options.onWarning?.(warning),\n );\n this.viewer = new NormalizedPresentationViewer(this.root, presentation.document, {\n onNodeError: (nodeId, error) =>\n options.onWarning?.({\n code: 'degraded-rendering',\n severity: 'warning',\n nodeId,\n feature: 'thumbnail-renderer',\n message: `A slide element could not be rendered: ${\n error instanceof Error ? error.message : String(error)\n }`,\n }),\n });\n const startedAt = performanceNow();\n this.ready = this.fontManager.prepare(presentation.document).then(() => {\n this.report(performanceMeasurement('embedded-font-preparation', startedAt));\n });\n }\n\n renderSlide(\n slideIndex: number,\n options: PptxThumbnailRenderOptions & { output: 'canvas' },\n ): Promise<PptxThumbnailRenderResult<HTMLCanvasElement>>;\n renderSlide(\n slideIndex: number,\n options: PptxThumbnailRenderOptions & { output: 'imageBitmap' },\n ): Promise<PptxThumbnailRenderResult<ImageBitmap>>;\n renderSlide(\n slideIndex: number,\n options: PptxThumbnailRenderOptions & { output: 'svg' },\n ): Promise<PptxThumbnailRenderResult<string>>;\n renderSlide(\n slideIndex: number,\n options?: PptxThumbnailRenderOptions & { output?: 'blob' },\n ): Promise<PptxThumbnailRenderResult<Blob>>;\n renderSlide(\n slideIndex: number,\n options: PptxThumbnailRenderOptions,\n ): Promise<PptxThumbnailRenderResult<ThumbnailData>>;\n async renderSlide(\n slideIndex: number,\n options: PptxThumbnailRenderOptions = {},\n ): Promise<PptxThumbnailRenderResult<ThumbnailData>> {\n const release = await this.queue.acquire(options.signal);\n try {\n this.assertAvailable(options.signal);\n await abortable(this.ready, options.signal);\n this.assertAvailable(options.signal);\n if (\n !Number.isInteger(slideIndex) ||\n slideIndex < 0 ||\n slideIndex >= this.presentation.document.slides.length\n ) {\n throw new RangeError(`Slide ${slideIndex} does not exist.`);\n }\n\n const measurements: PptxPerformanceMeasurement[] = [];\n const size = outputSize(this.presentation, options);\n const target = document.createElement('div');\n this.root.append(target);\n const domStartedAt = performanceNow();\n const handle = this.viewer.renderThumbnailToContainer(slideIndex, target, {\n width: size.naturalWidth,\n });\n try {\n await abortable(handle.ready, options.signal);\n this.fontManager.applyTo(handle.element, slideIndex);\n const domDurationMs = performanceNow() - domStartedAt;\n\n const decodeStartedAt = performanceNow();\n await decodeElementImages(handle.element, options.signal);\n let decodeDurationMs = performanceNow() - decodeStartedAt;\n const serializationStartedAt = performanceNow();\n const svg = await serializeSlide(\n handle.element,\n size.naturalWidth,\n size.naturalHeight,\n size.width,\n size.height,\n options.signal,\n );\n this.record(\n {\n durationMs: Math.max(0, domDurationMs + performanceNow() - serializationStartedAt),\n phase: 'slide-dom-svg-rendering',\n slideIndex,\n },\n measurements,\n );\n const output = options.output ?? 'blob';\n if (output === 'svg') {\n this.record(\n { durationMs: Math.max(0, decodeDurationMs), phase: 'image-decoding', slideIndex },\n measurements,\n );\n return this.result(svg, output, slideIndex, size, measurements);\n }\n\n const svgDecodeStartedAt = performanceNow();\n const image = await decodeSvg(svg, options.signal);\n decodeDurationMs += performanceNow() - svgDecodeStartedAt;\n this.record(\n { durationMs: Math.max(0, decodeDurationMs), phase: 'image-decoding', slideIndex },\n measurements,\n );\n this.assertAvailable(options.signal);\n const encodeStartedAt = performanceNow();\n const pixelRatio = finitePositive(options.pixelRatio, 1);\n const canvas = document.createElement('canvas');\n canvas.width = Math.max(1, Math.round(size.width * pixelRatio));\n canvas.height = Math.max(1, Math.round(size.height * pixelRatio));\n canvas.style.width = `${size.width}px`;\n canvas.style.height = `${size.height}px`;\n const context = canvas.getContext('2d');\n if (!context) throw new Error('The browser does not provide a 2D canvas renderer.');\n context.drawImage(image, 0, 0, canvas.width, canvas.height);\n\n let data: Blob | HTMLCanvasElement | ImageBitmap;\n if (output === 'canvas') data = canvas;\n else if (output === 'imageBitmap') {\n if (typeof createImageBitmap !== 'function') {\n throw new PptxViewerError(\n 'unsupported-environment',\n 'ImageBitmap output is not supported by this browser.',\n );\n }\n data = await abortable(createImageBitmap(canvas), options.signal);\n } else data = await abortable(canvasToBlob(canvas, options.quality), options.signal);\n this.measure('raster-encoding', encodeStartedAt, slideIndex, measurements);\n return this.result(data, output, slideIndex, size, measurements);\n } finally {\n handle.dispose();\n target.remove();\n }\n } finally {\n release();\n }\n }\n\n renderSlides(\n slideIndexes: readonly number[],\n options: PptxThumbnailRenderOptions = {},\n ): Promise<PptxThumbnailRenderResult<ThumbnailData>[]> {\n return Promise.all(slideIndexes.map((slideIndex) => this.renderDynamic(slideIndex, options)));\n }\n\n destroy(): void {\n if (this.destroyed) return;\n this.destroyed = true;\n this.queue.destroy();\n this.viewer.destroy();\n this.fontManager.destroy();\n this.root.remove();\n }\n\n private renderDynamic(\n slideIndex: number,\n options: PptxThumbnailRenderOptions,\n ): Promise<PptxThumbnailRenderResult<ThumbnailData>> {\n return this.renderSlide(slideIndex, options);\n }\n\n private assertAvailable(signal?: AbortSignal): void {\n throwIfAborted(signal);\n if (this.destroyed) throw abortedError();\n }\n\n private measure(\n phase: PptxPerformanceMeasurement['phase'],\n startedAt: number,\n slideIndex: number,\n measurements: PptxPerformanceMeasurement[],\n ): void {\n this.record(performanceMeasurement(phase, startedAt, slideIndex), measurements);\n }\n\n private record(\n measurement: PptxPerformanceMeasurement,\n measurements: PptxPerformanceMeasurement[],\n ): void {\n measurements.push(measurement);\n this.report(measurement);\n }\n\n private report(measurement: PptxPerformanceMeasurement): void {\n this.options.onPerformanceMeasurement?.(measurement);\n }\n\n private result<T extends ThumbnailData>(\n data: T,\n output: PptxThumbnailRenderResult<T>['output'],\n slideIndex: number,\n size: { height: number; width: number },\n measurements: PptxPerformanceMeasurement[],\n ): PptxThumbnailRenderResult<T> {\n return {\n data,\n height: size.height,\n measurements,\n output,\n slideIndex,\n width: size.width,\n };\n }\n}\n\nexport function createPptxThumbnailRenderer(\n presentation: ParsedPresentation,\n options: PptxThumbnailRendererOptions = {},\n): PptxThumbnailRenderer {\n return new ThumbnailRenderer(presentation, options);\n}\n"]}
|