@office-open/xlsx 0.8.1 → 0.9.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/README.md +18 -21
- package/dist/context-a1lzscdy.mjs +2251 -0
- package/dist/context-a1lzscdy.mjs.map +1 -0
- package/dist/generate-BLESQtfS.d.mts +26 -0
- package/dist/generate-BLESQtfS.d.mts.map +1 -0
- package/dist/generate-CmgPdwPP.mjs +2786 -0
- package/dist/generate-CmgPdwPP.mjs.map +1 -0
- package/dist/generate.d.mts +2 -0
- package/dist/generate.mjs +2 -0
- package/dist/index.d.mts +537 -2115
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +7 -5424
- package/dist/index.mjs.map +1 -1
- package/dist/parse-CZQQuAH5.d.mts +42 -0
- package/dist/parse-CZQQuAH5.d.mts.map +1 -0
- package/dist/parse.d.mts +2 -0
- package/dist/parse.mjs +131 -0
- package/dist/parse.mjs.map +1 -0
- package/dist/patch.d.mts +31 -0
- package/dist/patch.d.mts.map +1 -0
- package/dist/patch.mjs +101 -0
- package/dist/patch.mjs.map +1 -0
- package/dist/worksheet-BbJpRvw2.d.mts +1691 -0
- package/dist/worksheet-BbJpRvw2.d.mts.map +1 -0
- package/package.json +18 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-CmgPdwPP.mjs","names":["colIndexToLetter","buildWorksheetXml"],"sources":["../src/parts/calc-chain.ts","../src/parts/chartsheet.ts","../src/parts/comments.ts","../src/parts/drawing.ts","../src/parts/external-link.ts","../src/parts/pivot/pivot-utils.ts","../src/parts/pivot-table.ts","../src/parts/pivot-cache.ts","../src/parts/table.ts","../src/parts/workbook.ts","../src/compiler.ts","../src/generate.ts"],"sourcesContent":["/**\n * Calculation Chain types and descriptor.\n *\n * Reference: OOXML transitional, sml.xsd, CT_CalcChain / CT_CalcCell\n *\n * @module\n */\n\nimport type { CustomDescriptor } from \"@office-open/core/descriptor\";\nimport { attrs } from \"@office-open/xml\";\n\n// ── Types ──\n\nexport interface CalcCell {\n /** Cell reference, e.g. \"A1\" */\n reference: string;\n /** Sheet index (1-based) */\n sheetIndex: number;\n /** Array formula */\n array?: boolean;\n}\n\nexport interface CalcChainOptions {\n cells: CalcCell[];\n}\n\n// ── Descriptor ──\n\nexport const calcChainDesc: CustomDescriptor<CalcChainOptions> = {\n kind: \"custom\",\n\n stringify(opts, _ctx) {\n const parts: string[] = [\n '<calcChain xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">',\n ];\n for (const cell of opts.cells) {\n const cellAttrs: Record<string, string | number | boolean> = {\n r: cell.reference,\n i: cell.sheetIndex,\n };\n if (cell.array) cellAttrs.a = true;\n parts.push(`<c${attrs(cellAttrs)}/>`);\n }\n parts.push(\"</calcChain>\");\n return parts.join(\"\");\n },\n\n parse(el, _ctx) {\n const result: Record<string, unknown> = {};\n const cells: CalcCell[] = [];\n for (const child of el.elements ?? []) {\n if (child.name !== \"c\") continue;\n const r = child.attributes?.[\"r\"];\n const i = child.attributes?.[\"i\"];\n if (r && i) {\n const cell: CalcCell = {\n reference: String(r),\n sheetIndex: Number(i),\n };\n if (child.attributes?.[\"a\"]) cell.array = true;\n cells.push(cell);\n }\n }\n result.cells = cells;\n return result as unknown as CalcChainOptions;\n },\n};\n","/**\n * Chartsheet types and descriptor for SpreadsheetML documents.\n *\n * A chartsheet is a worksheet that contains only a chart (no cells).\n *\n * Reference: OOXML transitional, sml.xsd, CT_Chartsheet\n *\n * @module\n */\n\nimport type { CustomDescriptor } from \"@office-open/core/descriptor\";\nimport { attrs, escapeXml, findChild } from \"@office-open/xml\";\n\n// ── Types ──\n\nexport interface ChartsheetPageMargins {\n left?: number;\n right?: number;\n top?: number;\n bottom?: number;\n header?: number;\n footer?: number;\n}\n\nexport interface ChartsheetPageSetup {\n /** Paper size (1=Letter, 9=A4, etc.) */\n paperSize?: number;\n /** Orientation (\"default\" | \"portrait\" | \"landscape\") */\n orientation?: string;\n /** Horizontal DPI */\n horizontalDpi?: number;\n /** Vertical DPI */\n verticalDpi?: number;\n /** Copies to print */\n copies?: number;\n}\n\nexport interface ChartsheetProtectionOptions {\n /** Content is protected */\n content?: boolean;\n /** Objects are protected */\n objects?: boolean;\n}\n\nexport interface ChartsheetHeaderFooterOptions {\n /** Different first page header/footer */\n differentFirst?: boolean;\n /** Different odd/even page headers/footers */\n differentOddEven?: boolean;\n /** Odd page header */\n oddHeader?: string;\n /** Odd page footer */\n oddFooter?: string;\n}\n\nexport interface ChartsheetOptions {\n /** Sheet name */\n name?: string;\n /** Tab color (hex ARGB, e.g. \"FF4472C4\") */\n tabColor?: string;\n /** Page margins */\n pageMargins?: ChartsheetPageMargins;\n /** Page setup */\n pageSetup?: ChartsheetPageSetup;\n /** Header/footer */\n headerFooter?: ChartsheetHeaderFooterOptions;\n /** Sheet protection */\n sheetProtection?: ChartsheetProtectionOptions;\n /** Published to server (CT_ChartsheetPr @published) */\n published?: boolean;\n /** Zoom to fit (CT_ChartsheetView @zoomToFit) */\n zoomToFit?: boolean;\n /** Chart definition (type, title, series, etc.) */\n chart: {\n type: string;\n title?: string;\n categories?: string[];\n series: {\n name: string;\n values: number[];\n }[];\n };\n}\n\n// ── Descriptor Types ──\n\nexport interface ChartsheetDescriptorOptions extends ChartsheetOptions {\n /** Relationship ID for the drawing (set by compiler) */\n drawingRId: string;\n}\n\n// ── Descriptor ──\n\nexport const chartsheetDesc: CustomDescriptor<ChartsheetDescriptorOptions> = {\n kind: \"custom\",\n\n stringify(opts, _ctx) {\n const p: string[] = [\n '<chartsheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"' +\n ' xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">',\n ];\n\n // sheetPr (optional)\n if (opts.tabColor || opts.published) {\n const prAttrs: string[] = [];\n if (opts.tabColor) prAttrs.push(`<tabColor${attrs({ rgb: opts.tabColor })}/>`);\n const spAttr = opts.published ? ' published=\"1\"' : \"\";\n p.push(`<sheetPr${spAttr}>${prAttrs.join(\"\")}</sheetPr>`);\n }\n\n // sheetViews (required)\n const svAttrs: string[] = ['workbookViewId=\"0\"'];\n if (opts.zoomToFit) svAttrs.push('zoomToFit=\"1\"');\n p.push(`<sheetViews><sheetView ${svAttrs.join(\" \")}/></sheetViews>`);\n\n // sheetProtection (optional)\n if (opts.sheetProtection) {\n const sp = opts.sheetProtection;\n const spAttrs: string[] = [];\n if (sp.content) spAttrs.push(` content=\"1\"`);\n if (sp.objects) spAttrs.push(` objects=\"1\"`);\n if (spAttrs.length > 0) {\n p.push(`<sheetProtection${spAttrs.join(\"\")}/>`);\n }\n }\n\n // pageMargins (optional)\n if (opts.pageMargins) {\n const pm = opts.pageMargins;\n p.push(\n `<pageMargins${attrs({\n left: pm.left ?? 0.7,\n right: pm.right ?? 0.7,\n top: pm.top ?? 0.75,\n bottom: pm.bottom ?? 0.75,\n header: pm.header ?? 0.3,\n footer: pm.footer ?? 0.3,\n })}/>`,\n );\n }\n\n // pageSetup (optional)\n if (opts.pageSetup) {\n const ps = opts.pageSetup;\n p.push(\n `<pageSetup${attrs({\n paperSize: ps.paperSize,\n orientation: ps.orientation,\n horizontalDpi: ps.horizontalDpi,\n verticalDpi: ps.verticalDpi,\n copies: ps.copies,\n })}/>`,\n );\n }\n\n // headerFooter (optional)\n if (opts.headerFooter) {\n const hf = opts.headerFooter;\n const hfParts: string[] = [];\n if (hf.differentFirst) hfParts.push(` differentFirst=\"1\"`);\n if (hf.differentOddEven) hfParts.push(` differentOddEven=\"1\"`);\n const hfContent: string[] = [];\n if (hf.oddHeader) hfContent.push(`<oddHeader>${escapeXml(hf.oddHeader)}</oddHeader>`);\n if (hf.oddFooter) hfContent.push(`<oddFooter>${escapeXml(hf.oddFooter)}</oddFooter>`);\n p.push(`<headerFooter${hfParts.join(\"\")}>${hfContent.join(\"\")}</headerFooter>`);\n }\n\n // drawing (required)\n p.push(`<drawing r:id=\"${escapeXml(opts.drawingRId)}\"/>`);\n\n p.push(\"</chartsheet>\");\n return p.join(\"\");\n },\n\n parse(el, _ctx) {\n const result: Record<string, unknown> = {};\n\n // sheetPr\n const sheetPr = findChild(el, \"sheetPr\");\n if (sheetPr) {\n if (sheetPr.attributes?.[\"published\"] === \"1\") result.published = true;\n const tabColor = findChild(sheetPr, \"tabColor\");\n if (tabColor?.attributes?.[\"rgb\"]) result.tabColor = tabColor.attributes[\"rgb\"];\n }\n\n // sheetView\n const sheetViews = findChild(el, \"sheetViews\");\n if (sheetViews) {\n const sv = findChild(sheetViews, \"sheetView\");\n if (sv?.attributes?.[\"zoomToFit\"] === \"1\") result.zoomToFit = true;\n }\n\n return result as Record<string, unknown>;\n },\n};\n","/**\n * Comments + VML notes descriptor for XLSX.\n *\n * Generates both xl/comments{n}.xml and xl/drawings/vmlDrawing{n}.vml\n * from the same CommentOptions array. Follows PPTX CustomDescriptor pattern.\n *\n * @module\n */\n\nimport type { CustomDescriptor } from \"@office-open/core/descriptor\";\nimport { findChild, attr, textOf } from \"@office-open/xml\";\nimport type { Element as XmlElement } from \"@office-open/xml\";\nimport { escapeXml } from \"@office-open/xml\";\n\nimport type { CommentOptions, RichTextOptions } from \"./worksheet\";\n\n// ── Comments descriptor (xl/comments{n}.xml) ──\n\nexport interface CommentsDocOptions {\n comments: CommentOptions[];\n}\n\nexport const commentsDesc: CustomDescriptor<CommentsDocOptions> = {\n kind: \"custom\",\n\n stringify(opts, _ctx) {\n if (opts.comments.length === 0) return undefined;\n const authors = collectAuthors(opts.comments);\n const p: string[] = [\n `<comments xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">`,\n `<authors>`,\n ];\n\n for (const author of authors) {\n p.push(`<author>${escapeXml(author)}</author>`);\n }\n\n p.push(\"</authors><commentList>\");\n\n for (const entry of opts.comments) {\n const authorId = authors.indexOf(entry.author);\n const textXml =\n typeof entry.text === \"string\"\n ? `<t>${escapeXml(entry.text)}</t>`\n : buildRstXml(entry.text);\n p.push(\n `<comment ref=\"${entry.cell}\" authorId=\"${authorId}\"><text>${textXml}</text></comment>`,\n );\n }\n\n p.push(\"</commentList></comments>\");\n return p.join(\"\");\n },\n\n parse(el, _ctx) {\n const comments: CommentOptions[] = [];\n const authors: string[] = [];\n\n const authorsEl = findChild(el, \"authors\");\n if (authorsEl) {\n for (const a of authorsEl.elements ?? []) {\n if (a.name === \"author\") authors.push(textOf(a) ?? \"\");\n }\n }\n\n const listEl = findChild(el, \"commentList\");\n if (listEl) {\n for (const c of listEl.elements ?? []) {\n if (c.name !== \"comment\") continue;\n const ref = attr(c, \"ref\") ?? \"\";\n const authorId = Number(attr(c, \"authorId\") ?? 0);\n const textEl = findChild(c, \"text\");\n const text = textEl ? parseRst(textEl) : \"\";\n comments.push({\n cell: ref,\n author: authors[authorId] ?? \"\",\n text,\n });\n }\n }\n\n return { comments } as Record<string, unknown>;\n },\n};\n\n// ── VML notes descriptor (xl/drawings/vmlDrawing{n}.vml) ──\n\nexport const vmlNotesDesc: CustomDescriptor<CommentsDocOptions> = {\n kind: \"custom\",\n\n stringify(opts, _ctx) {\n if (opts.comments.length === 0) return undefined;\n\n const p: string[] = [\n '<xml xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\">',\n '<o:shapelayout v:ext=\"edit\"><o:idmap v:ext=\"edit\" data=\"1\"/></o:shapelayout>',\n '<v:shapetype id=\"_x0000_t202\" coordsize=\"21600,21600\" o:spt=\"202\" path=\"m,l,21600r21600,l21600,xe\">',\n '<v:stroke joinstyle=\"miter\"/>',\n '<v:path gradientshapeok=\"t\" o:connecttype=\"rect\"/>',\n \"</v:shapetype>\",\n ];\n\n for (let i = 0; i < opts.comments.length; i++) {\n const c = opts.comments[i];\n const col = c.cell.charCodeAt(0) - 65;\n const row = parseInt(c.cell.slice(1), 10) - 1;\n const anchor = `${col}, 0, ${row}, 0, ${col + 2}, 0, ${row + 2}, 0`;\n p.push(\n `<v:shape id=\"_x0000_s${1025 + i}\" type=\"#_x0000_t202\" ` +\n `style=\"position:absolute;margin-left:59.25pt;margin-top:1.5pt;width:108pt;height:59.25pt;` +\n `z-index:1;visibility:hidden\" fillcolor=\"infoBackground [80]\" strokecolor=\"none [81]\" o:insetmode=\"auto\">`,\n `<v:fill color2=\"infoBackground [80]\"/>`,\n `<v:shadow color=\"none [81]\" obscured=\"t\"/>`,\n `<v:path o:connecttype=\"none\"/>`,\n `<v:textbox style=\"mso-direction-alt:auto\"><div style=\"text-align:left\"></div></v:textbox>`,\n `<x:ClientData ObjectType=\"Note\"><x:MoveWithCells/><x:SizeWithCells/>`,\n `<x:Anchor>${anchor}</x:Anchor>`,\n `<x:AutoFill>False</x:AutoFill>`,\n `<x:Row>${row}</x:Row>`,\n `<x:Column>${col}</x:Column>`,\n `</x:ClientData>`,\n `</v:shape>`,\n );\n }\n\n p.push(\"</xml>\");\n return p.join(\"\");\n },\n\n parse(_el, _ctx) {\n // VML parsing is not commonly needed — return empty\n return { comments: [] } as Record<string, unknown>;\n },\n};\n\n// ── Helpers ──\n\nfunction collectAuthors(comments: CommentOptions[]): string[] {\n const seen = new Set<string>();\n const result: string[] = [];\n for (const entry of comments) {\n if (!seen.has(entry.author)) {\n seen.add(entry.author);\n result.push(entry.author);\n }\n }\n return result.length > 0 ? result : [\"\"];\n}\n\n/** Build rich text (CT_Rst) XML from runs. */\nfunction buildRstXml(rst: RichTextOptions): string {\n const runs = rst.runs ?? [];\n const parts: string[] = [];\n for (const run of runs) {\n const props = run.properties;\n if (!props) {\n parts.push(`<r><t>${escapeXml(run.text)}</t></r>`);\n continue;\n }\n const rPr: string[] = [];\n if (props.bold) rPr.push(\"<b/>\");\n if (props.italic) rPr.push(\"<i/>\");\n if (props.underline) rPr.push(`<u val=\"${props.underline}\"/>`);\n if (props.strike) rPr.push(\"<strike/>\");\n if (props.size) rPr.push(`<sz val=\"${props.size}\"/>`);\n if (props.color) rPr.push(`<color rgb=\"${props.color}\"/>`);\n if (props.font) rPr.push(`<rFont val=\"${props.font}\"/>`);\n const rPrXml = rPr.length ? `<rPr>${rPr.join(\"\")}</rPr>` : \"\";\n parts.push(`<r>${rPrXml}<t>${escapeXml(run.text)}</t></r>`);\n }\n return parts.join(\"\");\n}\n\n/** Parse rich text element into a simple string. */\nfunction parseRst(textEl: XmlElement): string {\n const parts: string[] = [];\n for (const child of textEl.elements ?? []) {\n if (child.name === \"t\") {\n parts.push(textOf(child) ?? \"\");\n } else if (child.name === \"r\") {\n const t = findChild(child, \"t\");\n if (t) parts.push(textOf(t) ?? \"\");\n }\n }\n return parts.join(\"\");\n}\n","/**\n * XLSX Drawing — image and chart anchor types and descriptor.\n *\n * Generates xl/drawings/drawing{n}.xml using the spreadsheetDrawing\n * namespace for anchoring images and charts to worksheet cells.\n *\n * @module\n */\n\nimport type { CustomDescriptor } from \"@office-open/core/descriptor\";\nimport { findChild } from \"@office-open/xml\";\nimport type { Element as XmlElement } from \"@office-open/xml\";\n\n// ── Types (used by compiler) ──\n\nexport interface ImageOptions {\n /** 1-based column */\n col: number;\n /** Column offset in EMU (default 0) */\n colOffset?: number;\n /** 1-based row */\n row: number;\n /** Row offset in EMU (default 0) */\n rowOffset?: number;\n /** Relationship ID for the image */\n rId: string;\n /** Lock anchor with sheet (default true) */\n locksWithSheet?: boolean;\n /** Print with sheet (default true) */\n printsWithSheet?: boolean;\n}\n\nexport interface ChartAnchorOptions {\n /** 1-based column */\n col: number;\n /** Column offset in EMU (default 0) */\n colOffset?: number;\n /** 1-based row */\n row: number;\n /** Row offset in EMU (default 0) */\n rowOffset?: number;\n /** Relationship ID for the chart */\n rId: string;\n /** Lock anchor with sheet (default true) */\n locksWithSheet?: boolean;\n /** Print with sheet (default true) */\n printsWithSheet?: boolean;\n}\n\n// ── Descriptor Types ──\n\nexport interface DrawingImageOptions {\n /** 1-based column */\n col: number;\n /** Column offset in EMU (default 0) */\n colOffset?: number;\n /** 1-based row */\n row: number;\n /** Row offset in EMU (default 0) */\n rowOffset?: number;\n /** Relationship ID for the image */\n rId: string;\n /** Lock anchor with sheet (default true) */\n locksWithSheet?: boolean;\n /** Print with sheet (default true) */\n printsWithSheet?: boolean;\n}\n\nexport interface DrawingChartOptions {\n /** 1-based column */\n col: number;\n /** Column offset in EMU (default 0) */\n colOffset?: number;\n /** 1-based row */\n row: number;\n /** Row offset in EMU (default 0) */\n rowOffset?: number;\n /** Relationship ID for the chart */\n rId: string;\n /** Lock anchor with sheet (default true) */\n locksWithSheet?: boolean;\n /** Print with sheet (default true) */\n printsWithSheet?: boolean;\n}\n\nexport interface DrawingOptions {\n images?: DrawingImageOptions[];\n charts?: DrawingChartOptions[];\n}\n\n// ── Constants ──\n\nconst XDR_NS = \"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing\";\nconst A_NS = \"http://schemas.openxmlformats.org/drawingml/2006/main\";\nconst R_NS = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\";\nconst C_URI = \"http://schemas.openxmlformats.org/drawingml/2006/chart\";\n\n// ── Descriptor ──\n\nexport const drawingDesc: CustomDescriptor<DrawingOptions> = {\n kind: \"custom\",\n\n stringify(opts, _ctx) {\n const images = opts.images ?? [];\n const charts = opts.charts ?? [];\n if (images.length === 0 && charts.length === 0) return undefined;\n\n const p: string[] = [`<wsDr xmlns=\"${XDR_NS}\" xmlns:a=\"${A_NS}\" xmlns:r=\"${R_NS}\">`];\n let id = 1;\n\n for (const img of images) {\n p.push(\n `<twoCellAnchor editAs=\"oneCell\"><from><col>${img.col - 1}</col><colOff>${img.colOffset ?? 0}</colOff><row>${img.row - 1}</row><rowOff>${img.rowOffset ?? 0}</rowOff></from>`,\n `<to><col>${img.col}</col><colOff>0</colOff><row>${img.row}</row><rowOff>0</rowOff></to>`,\n `<pic><nvPicPr><cNvPr id=\"${id}\" name=\"Picture ${id}\"/><cNvPicPr preferRelativeResize=\"1\"/></nvPicPr>`,\n `<blipFill><a:blip r:embed=\"${img.rId}\"/><a:stretch><a:fillRect/></a:stretch></blipFill>`,\n `<spPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"400000\" cy=\"300000\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></spPr></pic>`,\n `<clientData fLocksWithSheet=\"${img.locksWithSheet !== false ? 1 : 0}\" fPrintsWithSheet=\"${img.printsWithSheet !== false ? 1 : 0}\"/></twoCellAnchor>`,\n );\n id++;\n }\n\n for (const chart of charts) {\n p.push(\n `<twoCellAnchor editAs=\"oneCell\"><from><col>${chart.col - 1}</col><colOff>${chart.colOffset ?? 0}</colOff><row>${chart.row - 1}</row><rowOff>${chart.rowOffset ?? 0}</rowOff></from>`,\n `<to><col>${chart.col + 8}</col><colOff>0</colOff><row>${chart.row + 15}</row><rowOff>0</rowOff></to>`,\n `<graphicFrame><nvGraphicFramePr><cNvPr id=\"${id}\" name=\"Chart ${id}\"/><cNvGraphicFramePr><a:graphicFrameLocks noGrp=\"1\"/></cNvGraphicFramePr></nvGraphicFramePr>`,\n `<xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/></xfrm>`,\n `<a:graphic><a:graphicData uri=\"${C_URI}\"><c:chart xmlns:c=\"http://schemas.openxmlformats.org/drawingml/2006/chart\" xmlns:r=\"${R_NS}\" r:id=\"${chart.rId}\"/></a:graphicData></a:graphic></graphicFrame>`,\n `<clientData fLocksWithSheet=\"${chart.locksWithSheet !== false ? 1 : 0}\" fPrintsWithSheet=\"${chart.printsWithSheet !== false ? 1 : 0}\"/></twoCellAnchor>`,\n );\n id++;\n }\n\n p.push(\"</wsDr>\");\n return p.join(\"\");\n },\n\n parse(el, _ctx) {\n const result: Record<string, unknown> = {};\n const images: DrawingImageOptions[] = [];\n const charts: DrawingChartOptions[] = [];\n\n for (const anchor of el.elements ?? []) {\n if (anchor.name !== \"twoCellAnchor\") continue;\n const from = findChild(anchor, \"from\");\n findChild(anchor, \"to\"); // consumed but not used\n if (!from) continue;\n\n const col = readNumChild(from, \"col\") + 1;\n const colOffset = readNumChild(from, \"colOff\") || undefined;\n const row = readNumChild(from, \"row\") + 1;\n const rowOffset = readNumChild(from, \"rowOff\") || undefined;\n\n // Check if this is a picture or graphicFrame\n const pic = findChild(anchor, \"pic\");\n if (pic) {\n const blip = findChild(findChild(pic, \"blipFill\") ?? pic, \"a:blip\");\n const rId = blip?.attributes?.[\"r:embed\"] as string | undefined;\n if (rId) {\n const clientData = findChild(anchor, \"clientData\");\n images.push({\n col,\n colOffset,\n row,\n rowOffset,\n rId,\n locksWithSheet: clientData?.attributes?.[\"fLocksWithSheet\"] !== \"0\",\n printsWithSheet: clientData?.attributes?.[\"fPrintsWithSheet\"] !== \"0\",\n });\n }\n continue;\n }\n\n const graphicFrame = findChild(anchor, \"graphicFrame\");\n if (graphicFrame) {\n const graphicData = findChild(\n findChild(graphicFrame, \"a:graphic\") ?? graphicFrame,\n \"a:graphicData\",\n );\n const chartEl = graphicData ? findChild(graphicData, \"c:chart\") : undefined;\n const rId = chartEl?.attributes?.[\"r:id\"] as string | undefined;\n if (rId) {\n const clientData = findChild(anchor, \"clientData\");\n charts.push({\n col,\n colOffset,\n row,\n rowOffset,\n rId,\n locksWithSheet: clientData?.attributes?.[\"fLocksWithSheet\"] !== \"0\",\n printsWithSheet: clientData?.attributes?.[\"fPrintsWithSheet\"] !== \"0\",\n });\n }\n }\n }\n\n if (images.length > 0) result.images = images;\n if (charts.length > 0) result.charts = charts;\n return result as Record<string, unknown>;\n },\n};\n\n// ── Helpers ──\n\nfunction readNumChild(el: XmlElement, tag: string): number {\n const child = findChild(el, tag);\n if (!child?.elements?.length) return 0;\n const n = Number(child.elements[0]?.text ?? \"\");\n return Number.isNaN(n) ? 0 : n;\n}\n","/**\n * External Link types and descriptor for SpreadsheetML documents.\n *\n * Reference: OOXML transitional, sml.xsd, CT_ExternalLink\n *\n * @module\n */\n\nimport type { CustomDescriptor } from \"@office-open/core/descriptor\";\nimport { attrs, escapeXml, findChild } from \"@office-open/xml\";\n\n// ── Types ──\n\nexport interface ExternalDefinedNameOptions {\n name: string;\n refersTo?: string;\n sheetId?: number;\n /** Publish to server (CT_DefinedName @publishToServer) */\n publishToServer?: boolean;\n /** VBA procedure (CT_DefinedName @vbProcedure) */\n vbProcedure?: boolean;\n /** Workbook parameter (CT_DefinedName @workbookParameter) */\n workbookParameter?: boolean;\n /** XLM macro (CT_DefinedName @xlm) */\n xlm?: boolean;\n}\n\nexport interface ExternalCellOptions {\n /** Cell reference, e.g. \"A1\" */\n reference: string;\n /** Cell data type */\n type?: string;\n /** Cell value */\n value?: string;\n}\n\nexport interface ExternalBookOptions {\n /** Target path of the external workbook */\n target?: string;\n /** Sheet names from the external workbook */\n sheetNames?: string[];\n /** Defined names from the external workbook */\n definedNames?: ExternalDefinedNameOptions[];\n /** Cached sheet data from the external workbook */\n sheetDataSet?: ExternalSheetDataOptions[];\n}\n\nexport interface ExternalRowOptions {\n /** Row number (1-based) */\n rowNumber: number;\n cells?: ExternalCellOptions[];\n}\n\nexport interface ExternalSheetDataOptions {\n sheetId: number;\n refreshError?: boolean;\n rows?: ExternalRowOptions[];\n}\n\nexport interface ExternalLinkOptions {\n /** External book configuration */\n externalBook?: ExternalBookOptions;\n /** Relationship ID for the external book (set by compiler) */\n bookRId?: string;\n /** OLE link configuration (CT_OleLink) */\n oleLink?: OleLinkOptions;\n /** Relationship ID for the OLE link (set by compiler) */\n oleRId?: string;\n}\n\nexport interface OleItemOptions {\n /** OLE item name (required) */\n name: string;\n /** Whether to advise events */\n advise?: boolean;\n /** Whether preferred */\n prefer?: boolean;\n}\n\nexport interface OleLinkOptions {\n /** OLE items */\n oleItems?: OleItemOptions[];\n}\n\n// ── Descriptor ──\n\nexport const externalLinkDesc: CustomDescriptor<ExternalLinkOptions> = {\n kind: \"custom\",\n\n stringify(opts, _ctx) {\n const p: string[] = [\n '<externalLink xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"' +\n ' xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">',\n ];\n\n if (opts.externalBook) {\n const book = opts.externalBook;\n const bookParts: string[] = [];\n\n if (book.sheetNames && book.sheetNames.length > 0) {\n bookParts.push(\"<sheetNames>\");\n for (const name of book.sheetNames) {\n bookParts.push(`<sheetName val=\"${escapeXml(name)}\"/>`);\n }\n bookParts.push(\"</sheetNames>\");\n }\n\n if (book.definedNames && book.definedNames.length > 0) {\n bookParts.push(\"<definedNames>\");\n for (const dn of book.definedNames) {\n const dnAttrs: Record<string, string | number | boolean | undefined> = { name: dn.name };\n if (dn.refersTo !== undefined) dnAttrs.refersTo = dn.refersTo;\n if (dn.sheetId !== undefined) dnAttrs.sheetId = dn.sheetId;\n if (dn.publishToServer) dnAttrs.publishToServer = 1;\n if (dn.vbProcedure) dnAttrs.vbProcedure = 1;\n if (dn.workbookParameter) dnAttrs.workbookParameter = 1;\n if (dn.xlm) dnAttrs.xlm = 1;\n bookParts.push(`<definedName${attrs(dnAttrs)}/>`);\n }\n bookParts.push(\"</definedNames>\");\n }\n\n if (book.sheetDataSet && book.sheetDataSet.length > 0) {\n bookParts.push(\"<sheetDataSet>\");\n for (const sd of book.sheetDataSet) {\n const sdAttrs: Record<string, string | number | boolean | undefined> = {\n sheetId: sd.sheetId,\n };\n if (sd.refreshError) sdAttrs.refreshError = 1;\n bookParts.push(`<sheetData${attrs(sdAttrs)}>`);\n\n if (sd.rows) {\n for (const row of sd.rows) {\n bookParts.push(`<row r=\"${row.rowNumber}\">`);\n if (row.cells) {\n for (const cell of row.cells) {\n const cellAttrs: Record<string, string | number | undefined> = {\n r: cell.reference,\n };\n if (cell.type !== undefined) cellAttrs.t = cell.type;\n if (cell.value !== undefined) {\n bookParts.push(\n `<cell${attrs(cellAttrs)}><v>${escapeXml(cell.value)}</v></cell>`,\n );\n } else {\n bookParts.push(`<cell${attrs(cellAttrs)}/>`);\n }\n }\n }\n bookParts.push(\"</row>\");\n }\n }\n bookParts.push(\"</sheetData>\");\n }\n bookParts.push(\"</sheetDataSet>\");\n }\n\n const ridAttr = opts.bookRId ? ` r:id=\"${opts.bookRId}\"` : \"\";\n p.push(\n `<externalBook${ridAttr}${bookParts.length > 0 ? `>${bookParts.join(\"\")}</externalBook>` : \"/>\"}`,\n );\n }\n\n // oleLink (CT_OleLink)\n if (opts.oleLink) {\n const oleRId = opts.oleRId ? ` r:id=\"${escapeXml(opts.oleRId)}\"` : \"\";\n const oleChildren: string[] = [];\n if (opts.oleLink.oleItems && opts.oleLink.oleItems.length > 0) {\n const itemParts: string[] = [`<oleItems>`];\n for (const item of opts.oleLink.oleItems) {\n const itemAttrs: string[] = [`name=\"${escapeXml(item.name)}\"`];\n if (item.advise) itemAttrs.push('advise=\"1\"');\n if (item.prefer) itemAttrs.push('prefer=\"1\"');\n itemParts.push(`<oleItem ${itemAttrs.join(\" \")}/>`);\n }\n itemParts.push(\"</oleItems>\");\n oleChildren.push(itemParts.join(\"\"));\n }\n if (oleChildren.length > 0) {\n p.push(`<oleLink${oleRId}>${oleChildren.join(\"\")}</oleLink>`);\n } else {\n p.push(`<oleLink${oleRId}/>`);\n }\n }\n\n p.push(\"</externalLink>\");\n return p.join(\"\");\n },\n\n parse(el, _ctx) {\n const result: Record<string, unknown> = {};\n\n const bookEl = findChild(el, \"externalBook\");\n if (bookEl) {\n const book: Record<string, unknown> = {};\n if (bookEl.attributes?.[\"r:id\"]) result.bookRId = bookEl.attributes[\"r:id\"];\n\n // sheetNames\n const sheetNamesEl = findChild(bookEl, \"sheetNames\");\n if (sheetNamesEl) {\n const names: string[] = [];\n for (const child of sheetNamesEl.elements ?? []) {\n if (child.name === \"sheetName\" && child.attributes?.[\"val\"]) {\n names.push(String(child.attributes[\"val\"]));\n }\n }\n if (names.length > 0) book.sheetNames = names;\n }\n\n result.externalBook = book;\n }\n\n return result as Record<string, unknown>;\n },\n};\n","/**\n * Pivot table utility types and helper functions.\n *\n * @module\n */\n\n/** Aggregation function for data fields (maps to ST_DataConsolidateFunction). */\nexport const ConsolidateFunction = {\n SUM: \"sum\",\n COUNT: \"count\",\n AVERAGE: \"average\",\n MAX: \"max\",\n MIN: \"min\",\n PRODUCT: \"product\",\n COUNT_NUMS: \"countNums\",\n STD_DEV: \"stdDev\",\n STD_DEV_P: \"stdDevp\",\n VAR: \"var\",\n VAR_P: \"varp\",\n} as const;\n\nexport type ConsolidateFunction = (typeof ConsolidateFunction)[keyof typeof ConsolidateFunction];\n\n/** A data field definition for pivot table aggregation. */\nexport interface PivotDataField {\n /** Source column name to aggregate */\n field: string;\n /** Aggregation function (default: \"sum\") */\n summarize?: ConsolidateFunction;\n /** Custom name for the data field (default: \"Sum of {field}\") */\n name?: string;\n /** Show data as (CT_DataField @showDataAs) */\n showDataAs?: string;\n /** Base field index for \"show data as\" calculations */\n baseField?: number;\n /** Base item index for \"show data as\" calculations */\n baseItem?: number;\n /** Sort by tuple items (CT_Tuples in sortByTuple) */\n sortByTupleItems?: number[];\n}\n\n/** Per-field overrides for pivotField XML attributes (CT_PivotField). */\nexport interface PivotFieldOverrideOptions {\n /** Field name to match (required) */\n field: string;\n /** All drilled (CT_PivotField @allDrilled) */\n allDrilled?: boolean;\n /** Auto show (CT_PivotField @autoShow) */\n autoShow?: boolean;\n /** Count subtotal (CT_PivotField @countSubtotal) */\n countSubtotal?: boolean;\n /** Data source sort (CT_PivotField @dataSourceSort) */\n dataSourceSort?: boolean;\n /** Default attribute drill state (CT_PivotField @defaultAttributeDrillState) */\n defaultAttributeDrillState?: boolean;\n /** Hidden level (CT_PivotField @hiddenLevel) */\n hiddenLevel?: boolean;\n /** Hide new items (CT_PivotField @hideNewItems) */\n hideNewItems?: boolean;\n /** Insert blank row (CT_PivotField @insertBlankRow) */\n insertBlankRow?: boolean;\n /** Insert page break (CT_PivotField @insertPageBreak) */\n insertPageBreak?: boolean;\n /** Item page count (CT_PivotField @itemPageCount) */\n itemPageCount?: boolean;\n /** Measure filter (CT_PivotField @measureFilter) */\n measureFilter?: boolean;\n /** Non auto sort default (CT_PivotField @nonAutoSortDefault) */\n nonAutoSortDefault?: boolean;\n /** Product subtotal (CT_PivotField @productSubtotal) */\n productSubtotal?: boolean;\n /** Rank by (CT_PivotField @rankBy) */\n rankBy?: number;\n /** Server field (CT_PivotField @serverField) */\n serverField?: boolean;\n /** Show drop downs (CT_PivotField @showDropDowns) */\n showDropDowns?: boolean;\n /** Show property as caption (CT_PivotField @showPropAsCaption) */\n showPropAsCaption?: boolean;\n /** Show property cell (CT_PivotField @showPropCell) */\n showPropCell?: boolean;\n /** Show property tip (CT_PivotField @showPropTip) */\n showPropTip?: boolean;\n /** StdDevP subtotal (CT_PivotField @stdDevPSubtotal) */\n stdDevPSubtotal?: boolean;\n /** StdDev subtotal (CT_PivotField @stdDevSubtotal) */\n stdDevSubtotal?: boolean;\n /** Subtotal caption (CT_PivotField @subtotalCaption) */\n subtotalCaption?: string;\n /** Top auto show (CT_PivotField @topAutoShow) */\n topAutoShow?: boolean;\n /** Unique member property (CT_PivotField @uniqueMemberProperty) */\n uniqueMemberProperty?: boolean;\n /** VarP subtotal (CT_PivotField @varPSubtotal) */\n varPSubtotal?: boolean;\n /** Var subtotal (CT_PivotField @varSubtotal) */\n varSubtotal?: boolean;\n /** Show detail for default item (CT_Item @sd) */\n defaultItemSd?: boolean;\n}\n\n/** Pivot filter type (ST_PivotFilterType) */\nexport const PivotFilterType = {\n UNKNOWN: \"unknown\",\n COUNT: \"count\",\n PERCENT: \"percent\",\n SUM: \"sum\",\n CAPTION_EQUAL: \"captionEqual\",\n CAPTION_NOT_EQUAL: \"captionNotEqual\",\n CAPTION_BEGINS_WITH: \"captionBeginsWith\",\n CAPTION_NOT_BEGINS_WITH: \"captionNotBeginsWith\",\n CAPTION_ENDS_WITH: \"captionEndsWith\",\n CAPTION_NOT_ENDS_WITH: \"captionNotEndsWith\",\n CAPTION_CONTAINS: \"captionContains\",\n CAPTION_NOT_CONTAINS: \"captionNotContains\",\n CAPTION_GREATER_THAN: \"captionGreaterThan\",\n CAPTION_GREATER_THAN_OR_EQUAL: \"captionGreaterThanOrEqual\",\n CAPTION_LESS_THAN: \"captionLessThan\",\n CAPTION_LESS_THAN_OR_EQUAL: \"captionLessThanOrEqual\",\n CAPTION_BETWEEN: \"captionBetween\",\n CAPTION_NOT_BETWEEN: \"captionNotBetween\",\n VALUE_EQUAL: \"valueEqual\",\n VALUE_NOT_EQUAL: \"valueNotEqual\",\n VALUE_GREATER_THAN: \"valueGreaterThan\",\n VALUE_GREATER_THAN_OR_EQUAL: \"valueGreaterThanOrEqual\",\n VALUE_LESS_THAN: \"valueLessThan\",\n VALUE_LESS_THAN_OR_EQUAL: \"valueLessThanOrEqual\",\n VALUE_BETWEEN: \"valueBetween\",\n VALUE_NOT_BETWEEN: \"valueNotBetween\",\n DATE_EQUAL: \"dateEqual\",\n DATE_NOT_EQUAL: \"dateNotEqual\",\n DATE_OLDER_THAN: \"dateOlderThan\",\n DATE_OLDER_THAN_OR_EQUAL: \"dateOlderThanOrEqual\",\n DATE_NEWER_THAN: \"dateNewerThan\",\n DATE_NEWER_THAN_OR_EQUAL: \"dateNewerThanOrEqual\",\n DATE_BETWEEN: \"dateBetween\",\n DATE_NOT_BETWEEN: \"dateNotBetween\",\n TOMORROW: \"tomorrow\",\n TODAY: \"today\",\n YESTERDAY: \"yesterday\",\n NEXT_WEEK: \"nextWeek\",\n THIS_WEEK: \"thisWeek\",\n LAST_WEEK: \"lastWeek\",\n NEXT_MONTH: \"nextMonth\",\n THIS_MONTH: \"thisMonth\",\n LAST_MONTH: \"lastMonth\",\n NEXT_QUARTER: \"nextQuarter\",\n THIS_QUARTER: \"thisQuarter\",\n LAST_QUARTER: \"lastQuarter\",\n NEXT_YEAR: \"nextYear\",\n THIS_YEAR: \"thisYear\",\n LAST_YEAR: \"lastYear\",\n YEAR_TO_DATE: \"yearToDate\",\n Q1: \"Q1\",\n Q2: \"Q2\",\n Q3: \"Q3\",\n Q4: \"Q4\",\n M1: \"M1\",\n M2: \"M2\",\n M3: \"M3\",\n M4: \"M4\",\n M5: \"M5\",\n M6: \"M6\",\n M7: \"M7\",\n M8: \"M8\",\n M9: \"M9\",\n M10: \"M10\",\n M11: \"M11\",\n M12: \"M12\",\n} as const;\n\nexport type PivotFilterType = (typeof PivotFilterType)[keyof typeof PivotFilterType];\n\n/** A single pivot filter (CT_PivotFilter) */\nexport interface PivotFilterOptions {\n /** Field index to filter on (required) */\n fld: number;\n /** Filter type (required) */\n type: PivotFilterType;\n /** Filter ID — unique within this pivot table (required) */\n id: number;\n /** Measure field index for OLAP filters */\n mpFld?: number;\n /** Evaluation order */\n evalOrder?: number;\n /** Measure hierarchy */\n iMeasureHier?: number;\n /** Measure field */\n iMeasureFld?: number;\n /** Filter name */\n name?: string;\n /** Filter description */\n description?: string;\n /** First string value for caption/date filters */\n stringValue1?: string;\n /** Second string value for between filters */\n stringValue2?: string;\n}\n\n/** Options for a single pivot table on a worksheet. */\nexport interface PivotTableOptions {\n /** Pivot table name (default: \"PivotTable{N}\") */\n name?: string;\n /** Source data range, e.g. \"A1:D11\" — must be on the same or a different sheet */\n source: string;\n /** Source sheet name (default: current sheet) */\n sourceSheet?: string;\n /** Target cell for the pivot table output (default: \"A3\") */\n location?: string;\n /** Field names to use as row labels */\n rows: string[];\n /** Field names to use as column labels */\n columns?: string[];\n /** Data fields with aggregation settings */\n data: PivotDataField[];\n /** Pivot style name (default: \"PivotStyleLight16\") */\n style?: string;\n /** Pivot filters (CT_PivotFilters) */\n filters?: PivotFilterOptions[];\n /** Field names to use as page/report filters */\n pages?: string[];\n /** Page field captions (maps by index to pages array) */\n pageCaptions?: string[];\n /** Data fields on rows instead of columns (CT_PivotTableDefinition @dataOnRows) */\n dataOnRows?: boolean;\n /** Grand total caption text */\n grandTotalCaption?: string;\n /** Error caption text */\n errorCaption?: string;\n /** Show error messages */\n showError?: boolean;\n /** Missing caption text */\n missingCaption?: string;\n /** Show missing items */\n showMissing?: boolean;\n /** Custom page style name */\n pageStyle?: string;\n /** Custom pivot table style name */\n pivotTableStyle?: string;\n /** Tag string */\n tag?: string;\n /** Show items with no data */\n showItems?: boolean;\n /** Edit data in-place */\n editData?: boolean;\n /** Disable field list */\n disableFieldList?: boolean;\n /** Show calculated members */\n showCalcMbrs?: boolean;\n /** Visual totals */\n visualTotals?: boolean;\n /** Show multiple labels */\n showMultipleLabel?: boolean;\n /** Show data drop-down */\n showDataDropDown?: boolean;\n /** Show drill indicators */\n showDrill?: boolean;\n /** Print drill indicators */\n printDrill?: boolean;\n /** Show member property tips */\n showMemberPropertyTips?: boolean;\n /** Show data tips */\n showDataTips?: boolean;\n /** Enable layout wizard */\n enableWizard?: boolean;\n /** Enable drill-down */\n enableDrill?: boolean;\n /** Enable field properties */\n enableFieldProperties?: boolean;\n /** Number of page fields per row/column */\n pageWrap?: number;\n /** Page layout over then down */\n pageOverThenDown?: boolean;\n /** Subtotal hidden items */\n subtotalHiddenItems?: boolean;\n /** Field print titles */\n fieldPrintTitles?: boolean;\n /** Merge item labels */\n mergeItem?: boolean;\n /** Show drop zones */\n showDropZones?: boolean;\n /** Show empty row */\n showEmptyRow?: boolean;\n /** Show empty column */\n showEmptyCol?: boolean;\n /** Show headers */\n showHeaders?: boolean;\n /** Published to server */\n published?: boolean;\n /** Grid drop zones */\n gridDropZones?: boolean;\n /** Multiple field filters */\n multipleFieldFilters?: boolean;\n /** Row header caption */\n rowHeaderCaption?: string;\n /** Column header caption */\n colHeaderCaption?: string;\n /** Sort field list ascending */\n fieldListSortAscending?: boolean;\n /** MDX subqueries enabled */\n mdxSubqueries?: boolean;\n /** Custom list sort */\n customListSort?: boolean;\n /** Asterisk totals (CT_PivotTableDefinition @asteriskTotals) */\n asteriskTotals?: boolean;\n /** Data position (CT_PivotTableDefinition @dataPosition) */\n dataPosition?: number;\n /** Immersive (CT_PivotTableDefinition @immersive) */\n immersive?: boolean;\n /** Vacated style (CT_PivotTableDefinition @vacatedStyle) */\n vacatedStyle?: string;\n /** Calculated items (CT_CalculatedItems) */\n calculatedItems?: CalculatedItemOptions[];\n /** Calculated members (CT_CalculatedMembers) */\n calculatedMembers?: CalculatedMemberOptions[];\n /** Pivot hierarchies (CT_PivotHierarchies) */\n pivotHierarchies?: PivotHierarchyOptions[];\n /** Conditional formats (CT_ConditionalFormats for pivot) */\n pivotConditionalFormats?: PivotConditionalFormatOptions[];\n /** Chart formats (CT_ChartFormats) */\n chartFormats?: ChartFormatOptions[];\n /** Auto sort scope (CT_AutoSortScope) */\n autoSortScope?: PivotAreaOptions;\n /** Member properties per field (CT_MemberProperties → mps/mp) */\n memberProperties?: MemberPropertyOptions[];\n /** Pivot format areas (CT_Formats → format) */\n formats?: PivotFormatOptions[];\n /** Row hierarchy usage (CT_RowHierarchiesUsage) */\n rowHierarchiesUsage?: HierarchyUsageOptions[];\n /** Column hierarchy usage (CT_ColHierarchiesUsage) */\n colHierarchiesUsage?: HierarchyUsageOptions[];\n /** Location column page count (CT_Location @colPageCount) */\n locationColPageCount?: number;\n /** Location row page count (CT_Location @rowPageCount) */\n locationRowPageCount?: number;\n /** Per-field overrides for pivotField (CT_PivotField attributes) */\n fieldOverrides?: PivotFieldOverrideOptions[];\n}\n\n/** Pivot format (CT_Format). */\nexport interface PivotFormatOptions {\n /** Action type (default: \"formatting\") */\n action?: \"formatting\" | \"drill\" | \"formula\" | \"blank\" | \"subtotal\" | \"report\";\n /** Differential format index */\n dxfId?: number;\n /** Pivot area */\n pivotArea: PivotAreaOptions;\n}\n\n/** Calculated item in a pivot table (CT_CalculatedItem) */\nexport interface CalculatedItemOptions {\n /** Field index */\n field?: number;\n /** Formula */\n formula?: string;\n /** Pivot area reference */\n pivotArea?: PivotAreaOptions;\n}\n\n/** Calculated member in a pivot table (CT_CalculatedMember) */\nexport interface CalculatedMemberOptions {\n /** Name (required) */\n name: string;\n /** MDX expression (required) */\n mdx: string;\n /** Member name */\n memberName?: string;\n /** Hierarchy */\n hierarchy?: string;\n /** Parent member */\n parent?: string;\n /** Solve order (default: 0) */\n solveOrder?: number;\n /** Is a set (default: false) */\n set?: boolean;\n}\n\n/** Pivot hierarchy (CT_PivotHierarchy) */\nexport interface PivotHierarchyOptions {\n /** Outline mode (default: false) */\n outline?: boolean;\n /** Allow multiple item selection (default: false) */\n multipleItemSelectionAllowed?: boolean;\n /** Subtotal on top (default: false) */\n subtotalTop?: boolean;\n /** Show in field list (default: true) */\n showInFieldList?: boolean;\n /** Drag to row (default: true) */\n dragToRow?: boolean;\n /** Drag to column (default: true) */\n dragToCol?: boolean;\n /** Drag to page (default: true) */\n dragToPage?: boolean;\n /** Drag to data (default: false) */\n dragToData?: boolean;\n /** Drag off (default: true) */\n dragOff?: boolean;\n /** Include new items in filter (default: false) */\n includeNewItemsInFilter?: boolean;\n /** Caption */\n caption?: string;\n /** Members */\n members?: MemberOptions[];\n /** Member properties (CT_MemberProperties → mps/mp) */\n memberProperties?: MemberPropertyOptions[];\n}\n\n/** Member in pivot hierarchy (CT_Member) */\nexport interface MemberOptions {\n /** Member name (required) */\n name: string;\n /** Level (CT_Member @level) */\n level?: number;\n}\n\n/** Member property (CT_MemberProperty) */\nexport interface MemberPropertyOptions {\n /** Field index */\n field: number;\n /** Property name */\n name?: string;\n /** Show cell? */\n showCell?: boolean;\n /** Show tip? */\n showTip?: boolean;\n /** Show as caption (CT_MemberProperty @showAsCaption) */\n showAsCaption?: boolean;\n /** Name length (CT_MemberProperty @nameLen) */\n nameLen?: number;\n /** Property position (CT_MemberProperty @pPos) */\n pPos?: number;\n /** Property length (CT_MemberProperty @pLen) */\n pLen?: number;\n}\n\n/** Pivot area for conditional formats, chart formats, etc. (CT_PivotArea) */\nexport interface PivotAreaOptions {\n /** Field index */\n field?: number;\n /** Area type (default: \"normal\") */\n type?: \"none\" | \"normal\" | \"data\" | \"all\" | \"origin\" | \"button\" | \"topEnd\" | \"topRight\";\n /** Data only (default: true) */\n dataOnly?: boolean;\n /** Label only (default: false) */\n labelOnly?: boolean;\n /** Grand row (default: false) */\n grandRow?: boolean;\n /** Grand column (default: false) */\n grandCol?: boolean;\n /** Cache index (default: false) */\n cacheIndex?: boolean;\n /** Outline (default: true) */\n outline?: boolean;\n /** Offset reference */\n offset?: string;\n /** Collapsed levels are subtotals (default: false) */\n collapsedLevelsAreSubtotals?: boolean;\n /** Axis */\n axis?: \"axisRow\" | \"axisCol\" | \"axisPage\" | \"axisValues\";\n /** Field position */\n fieldPosition?: number;\n /** References */\n references?: PivotAreaReferenceOptions[];\n}\n\n/** Pivot area reference (CT_PivotAreaReference) */\nexport interface PivotAreaReferenceOptions {\n /** Field index */\n field?: number;\n /** Count */\n count?: number;\n /** Selected (default: true) */\n selected?: boolean;\n /** By position (default: false) */\n byPosition?: boolean;\n /** Relative (default: false) */\n relative?: boolean;\n /** Default subtotal */\n defaultSubtotal?: boolean;\n /** Sum subtotal */\n sumSubtotal?: boolean;\n /** CountA subtotal */\n countASubtotal?: boolean;\n /** Average subtotal */\n avgSubtotal?: boolean;\n /** Max subtotal */\n maxSubtotal?: boolean;\n /** Min subtotal */\n minSubtotal?: boolean;\n /** Count subtotal (CT_Reference @countSubtotal) */\n countSubtotal?: boolean;\n /** Product subtotal (CT_Reference @productSubtotal) */\n productSubtotal?: boolean;\n /** StdDevP subtotal (CT_Reference @stdDevPSubtotal) */\n stdDevPSubtotal?: boolean;\n /** StdDev subtotal (CT_Reference @stdDevSubtotal) */\n stdDevSubtotal?: boolean;\n /** VarP subtotal (CT_Reference @varPSubtotal) */\n varPSubtotal?: boolean;\n /** Var subtotal (CT_Reference @varSubtotal) */\n varSubtotal?: boolean;\n /** X indices */\n x?: number[];\n}\n\n/** Pivot conditional format (CT_ConditionalFormat for pivot) */\nexport interface PivotConditionalFormatOptions {\n /** Scope (default: \"selection\") */\n scope?: \"selection\" | \"data\" | \"field\";\n /** Type (default: \"none\") */\n type?: \"none\" | \"all\" | \"row\" | \"column\";\n /** Priority (required) */\n priority: number;\n /** Pivot areas */\n pivotAreas?: PivotAreaOptions[];\n}\n\n/** Chart format for pivot table (CT_ChartFormat) */\nexport interface ChartFormatOptions {\n /** Chart index (required) */\n chart: number;\n /** Format index (required) */\n format: number;\n /** Is series (default: false) */\n series?: boolean;\n /** Pivot area */\n pivotArea?: PivotAreaOptions;\n}\n\n/** Cache hierarchy for OLAP pivot caches (CT_CacheHierarchy) */\nexport interface CacheHierarchyOptions {\n /** Unique name (required) */\n uniqueName: string;\n /** Caption */\n caption?: string;\n /** Is measure (default: false) */\n measure?: boolean;\n /** Is set (default: false) */\n set?: boolean;\n /** Parent set index */\n parentSet?: number;\n /** Icon set (default: 0) */\n iconSet?: number;\n /** Is attribute (default: false) */\n attribute?: boolean;\n /** Is time dimension (default: false) */\n time?: boolean;\n /** Key attribute (default: false) */\n keyAttribute?: boolean;\n /** Default member unique name */\n defaultMemberUniqueName?: string;\n /** All unique name */\n allUniqueName?: string;\n /** All caption */\n allCaption?: string;\n /** Dimension unique name */\n dimensionUniqueName?: string;\n /** Display folder */\n displayFolder?: string;\n /** Measure group */\n measureGroup?: string;\n /** Is measures (default: false) */\n measures?: boolean;\n /** Count (required) */\n count: number;\n /** One field (default: false) */\n oneField?: boolean;\n /** Hidden (default: false) */\n hidden?: boolean;\n /** Member value datatype (CT_CacheHierarchy @memberValueDatatype) */\n memberValueDatatype?: \"string\" | \"number\" | \"integer\" | \"boolean\" | \"error\";\n /** Unbalanced (CT_CacheHierarchy @unbalanced) */\n unbalanced?: boolean;\n /** Unbalanced group (CT_CacheHierarchy @unbalancedGroup) */\n unbalancedGroup?: boolean;\n /** Group levels (CT_GroupLevels) */\n groupLevels?: GroupLevelOptions[];\n /** Fields usage (CT_FieldsUsage) */\n fieldsUsage?: FieldUsageOptions[];\n}\n\n/** KPI definition for pivot cache (CT_PCDKPI) */\nexport interface KpiOptions {\n /** Unique name (required) */\n uniqueName: string;\n /** Caption */\n caption?: string;\n /** Display folder */\n displayFolder?: string;\n /** Measure group */\n measureGroup?: string;\n /** Parent */\n parent?: string;\n /** Value expression (required) */\n value: string;\n /** Goal expression */\n goal?: string;\n /** Status expression */\n status?: string;\n /** Trend expression */\n trend?: string;\n /** Weight expression */\n weight?: string;\n /** Time expression */\n time?: string;\n}\n\n/** Measure group (CT_MeasureGroup) */\nexport interface MeasureGroupOptions {\n /** Name (required) */\n name: string;\n /** Caption (required) */\n caption: string;\n}\n\n/** Set definition (CT_Set) */\nexport interface SetOptions {\n /** Count */\n count?: number;\n /** Max rank (required) */\n maxRank: number;\n /** Set definition MDX (required) */\n setDefinition: string;\n /** Sort type (default: \"none\") */\n sortType?:\n | \"none\"\n | \"ascending\"\n | \"descending\"\n | \"ascendingAlpha\"\n | \"descendingAlpha\"\n | \"ascendingNatural\"\n | \"descendingNatural\";\n /** Query failed (default: false) */\n queryFailed?: boolean;\n}\n\n/** Server format (CT_ServerFormat) */\nexport interface ServerFormatOptions {\n /** Culture */\n culture?: string;\n /** Format string */\n format?: string;\n}\n\n/** Field group for pivot cache (CT_FieldGroup) */\nexport interface FieldGroupOptions {\n /** Parent field index */\n parent?: number;\n /** Base field index */\n base?: number;\n /** Range properties */\n rangePr?: RangePrOptions;\n /** Discrete properties */\n discretePr?: number[];\n /** Group items names */\n groupItems?: string[];\n}\n\n/** Range properties for field grouping (CT_RangePr) */\nexport interface RangePrOptions {\n /** Auto start (default: true) */\n autoStart?: boolean;\n /** Auto end (default: true) */\n autoEnd?: boolean;\n /** Group by (default: \"range\") */\n groupBy?: \"range\" | \"seconds\" | \"minutes\" | \"hours\" | \"days\" | \"months\" | \"quarters\" | \"years\";\n /** Start number */\n startNum?: number;\n /** End number */\n endNum?: number;\n /** Start date ISO string */\n startDate?: string;\n /** End date ISO string */\n endDate?: string;\n /** Group interval (default: 1) */\n groupInterval?: number;\n}\n\n/** Pivot dimension (CT_PivotDimension) */\nexport interface PivotDimensionOptions {\n /** Is measure (default: false) */\n measure?: boolean;\n /** Name (required) */\n name: string;\n /** Unique name (required) */\n uniqueName: string;\n /** Caption (required) */\n caption: string;\n}\n\n/** Range set for consolidation source (CT_RangeSet) */\nexport interface RangeSetOptions {\n /** Index for page field 1 */\n i1?: number;\n /** Index for page field 2 */\n i2?: number;\n /** Index for page field 3 */\n i3?: number;\n /** Index for page field 4 */\n i4?: number;\n /** Cell reference */\n ref?: string;\n /** Named range */\n name?: string;\n /** Sheet name */\n sheet?: string;\n /** Relationship ID to external workbook */\n rId?: string;\n}\n\n/** Page item for consolidation (CT_PageItem) */\nexport interface ConsolidationPageItemOptions {\n /** Page item name */\n name: string;\n}\n\n/** Page for consolidation (CT_PCDSCPage) */\nexport interface ConsolidationPageOptions {\n /** Page items */\n items?: ConsolidationPageItemOptions[];\n}\n\n/** Consolidation source (CT_Consolidation) */\nexport interface ConsolidationOptions {\n /** Auto page (default: true) */\n autoPage?: boolean;\n /** Pages (max 4) */\n pages?: ConsolidationPageOptions[];\n /** Range sets (required) */\n rangeSets: RangeSetOptions[];\n}\n\n/** Tuple cache entry (CT_PCDSDTCEntries choice: m/n/e/s) */\nexport interface TupleCacheEntryOptions {\n /** Entry type */\n type: \"m\" | \"n\" | \"e\" | \"s\";\n /** Value (required for n/s, optional for e) */\n value?: number | string;\n}\n\n/** Deleted field (CT_DeletedField) */\nexport interface DeletedFieldOptions {\n /** Field name */\n name: string;\n}\n\n/** Group member (CT_GroupMember) */\nexport interface GroupMemberOptions {\n /** Unique name (required) */\n uniqueName: string;\n /** Is group */\n group?: boolean;\n}\n\n/** Level group (CT_LevelGroup) */\nexport interface LevelGroupOptions {\n /** Name (required) */\n name: string;\n /** Unique name (required) */\n uniqueName: string;\n /** Caption (required) */\n caption: string;\n /** Unique parent */\n uniqueParent?: string;\n /** Group ID */\n id?: number;\n /** Members */\n members: GroupMemberOptions[];\n}\n\n/** Group level (CT_GroupLevel) */\nexport interface GroupLevelOptions {\n /** Unique name (required) */\n uniqueName: string;\n /** Caption (required) */\n caption: string;\n /** User-defined */\n user?: boolean;\n /** Custom roll-up */\n customRollUp?: boolean;\n /** Groups */\n groups?: LevelGroupOptions[];\n}\n\n/** Field usage (CT_FieldUsage) */\nexport interface FieldUsageOptions {\n /** Field index */\n value: number;\n}\n\n/** Hierarchy usage (CT_HierarchyUsage) */\nexport interface HierarchyUsageOptions {\n /** Hierarchy usage value (required) */\n hierarchyUsage: number;\n}\n\n/** Query cache entry (CT_Query) */\nexport interface QueryCacheEntryOptions {\n /** MDX query string (required) */\n mdx: string;\n /** Tuples */\n tpls?: TupleOptions[];\n}\n\n/** Tuple (CT_Tuple) */\nexport interface TupleOptions {\n /** Tuple items (field indices) */\n items?: number[];\n}\n\n/** Member property map (CT_X, used as mpMap child) */\nexport interface MpMapOptions {\n /** Field index */\n x: number;\n}\n\n/** Measure dimension map (CT_MeasureDimensionMap) */\nexport interface MeasureDimensionMapOptions {\n /** Measure group index */\n measureGroup?: number;\n /** Dimension index */\n dimension?: number;\n}\n\n/** OLAP properties for pivot cache (CT_OlapPr) */\nexport interface OlapPrOptions {\n /** Local cube connection string */\n local?: string;\n /** Local connection string */\n localConnection?: string;\n /** Send locale info to OLAP server */\n sendLocale?: boolean;\n /** Row dimensions */\n rowDrillCount?: number;\n /** Column dimensions */\n colDrillCount?: number;\n /** Local refresh (CT_OlapPr @localRefresh) */\n localRefresh?: boolean;\n /** Use server fill formatting */\n serverFill?: boolean;\n /** Use server number formatting */\n serverNumberFormat?: boolean;\n /** Use server font formatting */\n serverFont?: boolean;\n /** Use server font color */\n serverFontColor?: boolean;\n}\n\n/** Parsed source data for pivot cache generation. */\nexport interface PivotSourceData {\n fieldNames: string[];\n records: (string | number | null | Date)[][];\n}\n\n/**\n * Extract unique values from source data for a given field index.\n */\nexport function collectUniqueValues(\n records: (string | number | null | Date)[][],\n fieldIdx: number,\n): (string | number | null | Date)[] {\n const seen = new Set<string>();\n const result: (string | number | null | Date)[] = [];\n for (const row of records) {\n const val = row[fieldIdx];\n const key = val instanceof Date ? val.toISOString() : String(val);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(val);\n }\n }\n return result;\n}\n\n/**\n * Check if a field is numeric (all non-empty values are numbers).\n */\nexport function isNumericField(\n records: (string | number | null | Date)[][],\n fieldIdx: number,\n): boolean {\n for (const row of records) {\n const val = row[fieldIdx];\n if (typeof val === \"string\" && val !== \"\") return false;\n }\n return true;\n}\n\n/**\n * Aggregate values using the specified function.\n */\nexport function aggregate(values: number[], func: ConsolidateFunction): number {\n if (values.length === 0) return 0;\n switch (func) {\n case \"sum\":\n return values.reduce((a, b) => a + b, 0);\n case \"count\":\n case \"countNums\":\n return values.length;\n case \"average\":\n return values.reduce((a, b) => a + b, 0) / values.length;\n case \"max\":\n return Math.max(...values);\n case \"min\":\n return Math.min(...values);\n case \"product\":\n return values.reduce((a, b) => a * b, 1);\n case \"var\":\n return sampleVariance(values);\n case \"varp\":\n return populationVariance(values);\n case \"stdDev\":\n return Math.sqrt(sampleVariance(values));\n case \"stdDevp\":\n return Math.sqrt(populationVariance(values));\n default:\n return values.reduce((a, b) => a + b, 0);\n }\n}\n\nfunction populationVariance(values: number[]): number {\n const mean = values.reduce((a, b) => a + b, 0) / values.length;\n return values.reduce((sum, v) => sum + (v - mean) ** 2, 0) / values.length;\n}\n\nfunction sampleVariance(values: number[]): number {\n if (values.length < 2) return 0;\n const mean = values.reduce((a, b) => a + b, 0) / values.length;\n return values.reduce((sum, v) => sum + (v - mean) ** 2, 0) / (values.length - 1);\n}\n\n// ── PivotCacheDefinition types (extracted from pivot-cache-definition-xml) ──\n\nexport interface CacheFieldExtraAttrs {\n /** Database field (CT_CacheField @databaseField) */\n databaseField?: boolean;\n /** Level (CT_CacheField @level) */\n level?: number;\n /** Mapping count (CT_CacheField @mappingCount) */\n mappingCount?: number;\n /** Member property field (CT_CacheField @memberPropertyField) */\n memberPropertyField?: number;\n /** Property name (CT_CacheField @propertyName) */\n propertyName?: string;\n /** Server field (CT_CacheField @serverField) */\n serverField?: boolean;\n /** Unique list (CT_CacheField @uniqueList) */\n uniqueList?: boolean;\n /** Shared items contains mixed types (CT_SharedItems @containsMixedTypes) */\n containsMixedTypes?: boolean;\n /** Shared items contains non-date (CT_SharedItems @containsNonDate) */\n containsNonDate?: boolean;\n /** Shared items long text (CT_SharedItems @longText) */\n longText?: boolean;\n /** Shared items max date (CT_SharedItems @maxDate) */\n maxDate?: string;\n /** Shared items min date (CT_SharedItems @minDate) */\n minDate?: string;\n}\n\nexport interface PivotCacheDefinitionOptions {\n /** Cache is invalid (CT_PivotCacheDefinition @invalid) */\n invalid?: boolean;\n /** Save data with cache (CT_PivotCacheDefinition @saveData) */\n saveData?: boolean;\n /** Optimize memory usage (CT_PivotCacheDefinition @optimizeMemory) */\n optimizeMemory?: boolean;\n /** Enable refresh (CT_PivotCacheDefinition @enableRefresh) */\n enableRefresh?: boolean;\n /** User who last refreshed */\n refreshedBy?: string;\n /** Date of last refresh (decimal) */\n refreshedDate?: number;\n /** Date of last refresh (ISO 8601) */\n refreshedDateIso?: string;\n /** Background query (CT_PivotCacheDefinition @backgroundQuery) */\n backgroundQuery?: boolean;\n /** Missing items limit */\n missingItemsLimit?: number;\n /** Upgrade on refresh */\n upgradeOnRefresh?: boolean;\n /** Support subquery */\n supportSubquery?: boolean;\n /** Support advanced drill */\n supportAdvancedDrill?: boolean;\n /** Cache hierarchies (CT_CacheHierarchies) */\n cacheHierarchies?: CacheHierarchyOptions[];\n /** KPIs (CT_PCDKPIs) */\n kpis?: KpiOptions[];\n /** Measure groups (CT_MeasureGroups) */\n measureGroups?: MeasureGroupOptions[];\n /** Dimensions (CT_Dimensions) */\n dimensions?: PivotDimensionOptions[];\n /** Sets (CT_Sets in tupleCache) */\n sets?: SetOptions[];\n /** Server formats (CT_ServerFormats) */\n serverFormats?: ServerFormatOptions[];\n /** Field groups per field index (CT_FieldGroup inside cacheField) */\n fieldGroups?: ReadonlyMap<number, FieldGroupOptions>;\n /** Consolidation source (alternative to worksheetSource) */\n consolidation?: ConsolidationOptions;\n /** Tuple cache entries (CT_PCDSDTCEntries) */\n entries?: TupleCacheEntryOptions[];\n /** Query cache (CT_QueryCache in tupleCache) */\n queryCache?: QueryCacheEntryOptions[];\n /** Member property map per cache field (mpMap) */\n mpMaps?: MpMapOptions[];\n /** Measure dimension maps (CT_MeasureDimensionMaps) */\n measureDimensionMaps?: MeasureDimensionMapOptions[];\n /** Per-field cache field overrides (mapped by field index) */\n cacheFieldOverrides?: ReadonlyMap<number, CacheFieldExtraAttrs>;\n /** OLAP properties (CT_OlapPr) */\n olapPr?: OlapPrOptions;\n}\n","/**\n * PivotTable descriptor for XLSX — generates xl/pivotTables/pivotTable{N}.xml.\n *\n * Implements CT_pivotTableDefinition from sml.xsd.\n * Direct stringify/parse — no intermediate class.\n *\n * @module\n */\n\nimport type { CustomDescriptor } from \"@office-open/core/descriptor\";\nimport { attrs, escapeXml } from \"@office-open/xml\";\nimport { findChild, attr, attrNum } from \"@office-open/xml\";\n\nimport type {\n PivotTableOptions,\n PivotSourceData,\n PivotDataField,\n PivotHierarchyOptions,\n PivotAreaOptions,\n PivotFieldOverrideOptions,\n} from \"./pivot/pivot-utils\";\nimport { collectUniqueValues } from \"./pivot/pivot-utils\";\n\n// ── Types ──\n\nexport interface PivotTableDescriptorOptions {\n options: PivotTableOptions;\n sourceData: PivotSourceData;\n cacheId: number;\n}\n\n// ── Descriptor ──\n\nexport const pivotTableDesc: CustomDescriptor<PivotTableDescriptorOptions> = {\n kind: \"custom\",\n\n stringify(opts, _ctx) {\n return stringifyPivotTable(opts.options, opts.sourceData, opts.cacheId);\n },\n\n parse(el, _ctx) {\n const result: Record<string, unknown> = {};\n\n if (attr(el, \"name\")) result.name = attr(el, \"name\");\n if (attr(el, \"cacheId\") !== undefined) result.cacheId = attrNum(el, \"cacheId\") ?? 0;\n\n const locEl = findChild(el, \"location\");\n if (locEl) result.location = attr(locEl, \"ref\") ?? \"\";\n\n const pfEl = findChild(el, \"pivotFields\");\n if (pfEl) {\n const fields: Record<string, unknown>[] = [];\n for (const fEl of pfEl.elements ?? []) {\n if (fEl.name !== \"pivotField\") continue;\n const field: Record<string, unknown> = {};\n const axis = attr(fEl, \"axis\");\n if (axis) field.axis = axis;\n fields.push(field);\n }\n result.pivotFields = fields;\n }\n\n // DataFields\n const dfEl = findChild(el, \"dataFields\");\n if (dfEl) {\n const dataFields: Record<string, unknown>[] = [];\n for (const dEl of dfEl.elements ?? []) {\n if (dEl.name !== \"dataField\") continue;\n const df: Record<string, unknown> = {};\n if (attr(dEl, \"name\")) df.name = attr(dEl, \"name\");\n const fld = attrNum(dEl, \"fld\");\n if (fld !== undefined) df.fld = fld;\n if (attr(dEl, \"subtotal\")) df.subtotal = attr(dEl, \"subtotal\");\n dataFields.push(df);\n }\n result.dataFields = dataFields;\n }\n\n if (attr(el, \"styleName\")) result.style = attr(el, \"styleName\");\n\n return result as Record<string, unknown>;\n },\n};\n\n// ── Stringify implementation ──\n\nfunction stringifyPivotTable(o: PivotTableOptions, sd: PivotSourceData, cacheId: number): string {\n const fields = sd.fieldNames;\n const rowFieldNames = o.rows;\n const colFieldNames = o.columns ?? [];\n const dataFields = o.data;\n const style = o.style ?? \"PivotStyleLight16\";\n const location = o.location ?? \"A3\";\n const name = o.name ?? \"PivotTable1\";\n\n const rowFieldIndices = rowFieldNames.map((n) => fields.indexOf(n));\n const colFieldIndices = colFieldNames.map((n) => fields.indexOf(n));\n const dataFieldIndices = dataFields.map((df) => fields.indexOf(df.field));\n const pageFieldNames = o.pages ?? [];\n const pageFieldIndices = pageFieldNames.map((n) => fields.indexOf(n));\n\n const pivotFieldsXml = buildPivotFields(\n o,\n sd,\n rowFieldIndices,\n colFieldIndices,\n dataFieldIndices,\n pageFieldIndices,\n );\n const pageFieldsXml = buildPageFields(o, pageFieldIndices);\n const rowFieldsXml = buildRowFields(rowFieldIndices);\n const rowItemsXml = buildRowItems(sd, rowFieldIndices);\n const colFieldsXml = buildColFields(colFieldIndices);\n const colItemsXml = buildColItems(sd, colFieldIndices, dataFields);\n const dataFieldsXml = buildDataFields(dataFields, dataFieldIndices);\n\n const locationRef = computeLocationRef(\n sd,\n location,\n rowFieldIndices,\n colFieldIndices,\n dataFields,\n );\n\n const p: string[] = [];\n const defAttrs: string[] = [\n `name=\"${escapeXml(name)}\"`,\n `cacheId=\"${cacheId}\"`,\n 'dataCaption=\"Values\"',\n 'updatedVersion=\"6\"',\n 'minRefreshableVersion=\"3\"',\n 'createdVersion=\"6\"',\n 'applyNumberFormats=\"0\"',\n 'applyBorderFormats=\"0\"',\n 'applyFontFormats=\"0\"',\n 'applyPatternFormats=\"0\"',\n 'applyAlignmentFormats=\"0\"',\n 'applyWidthHeightFormats=\"1\"',\n 'autoFormatId=\"0\"',\n 'useAutoFormatting=\"1\"',\n 'itemPrintTitles=\"1\"',\n 'indent=\"0\"',\n 'outline=\"1\"',\n 'outlineData=\"1\"',\n 'compact=\"1\"',\n 'compactData=\"1\"',\n 'rowGrandTotals=\"1\"',\n 'colGrandTotals=\"1\"',\n ];\n if (o.dataOnRows) defAttrs.push('dataOnRows=\"1\"');\n if (o.grandTotalCaption) defAttrs.push(`grandTotalCaption=\"${escapeXml(o.grandTotalCaption)}\"`);\n if (o.errorCaption) defAttrs.push(`errorCaption=\"${escapeXml(o.errorCaption)}\"`);\n if (o.showError) defAttrs.push('showError=\"1\"');\n if (o.missingCaption) defAttrs.push(`missingCaption=\"${escapeXml(o.missingCaption)}\"`);\n if (o.showMissing === false) defAttrs.push('showMissing=\"0\"');\n if (o.pageStyle) defAttrs.push(`pageStyle=\"${escapeXml(o.pageStyle)}\"`);\n if (o.pivotTableStyle) defAttrs.push(`pivotTableStyle=\"${escapeXml(o.pivotTableStyle)}\"`);\n if (o.tag) defAttrs.push(`tag=\"${escapeXml(o.tag)}\"`);\n if (o.showItems === false) defAttrs.push('showItems=\"0\"');\n if (o.editData) defAttrs.push('editData=\"1\"');\n if (o.disableFieldList) defAttrs.push('disableFieldList=\"1\"');\n if (o.showCalcMbrs === false) defAttrs.push('showCalcMbrs=\"0\"');\n if (o.visualTotals) defAttrs.push('visualTotals=\"1\"');\n if (o.showMultipleLabel === false) defAttrs.push('showMultipleLabel=\"0\"');\n if (o.showDataDropDown === false) defAttrs.push('showDataDropDown=\"0\"');\n if (o.showDrill === false) defAttrs.push('showDrill=\"0\"');\n if (o.printDrill) defAttrs.push('printDrill=\"1\"');\n if (o.showMemberPropertyTips) defAttrs.push('showMemberPropertyTips=\"1\"');\n if (o.showDataTips === false) defAttrs.push('showDataTips=\"0\"');\n if (o.enableWizard === false) defAttrs.push('enableWizard=\"0\"');\n if (o.enableDrill === false) defAttrs.push('enableDrill=\"0\"');\n if (o.enableFieldProperties === false) defAttrs.push('enableFieldProperties=\"0\"');\n if (o.pageWrap !== undefined) defAttrs.push(`pageWrap=\"${o.pageWrap}\"`);\n if (o.pageOverThenDown) defAttrs.push('pageOverThenDown=\"1\"');\n if (o.subtotalHiddenItems) defAttrs.push('subtotalHiddenItems=\"1\"');\n if (o.fieldPrintTitles) defAttrs.push('fieldPrintTitles=\"1\"');\n if (o.mergeItem) defAttrs.push('mergeItem=\"1\"');\n if (o.showDropZones === false) defAttrs.push('showDropZones=\"0\"');\n if (o.showEmptyRow) defAttrs.push('showEmptyRow=\"1\"');\n if (o.showEmptyCol) defAttrs.push('showEmptyCol=\"1\"');\n if (o.showHeaders === false) defAttrs.push('showHeaders=\"0\"');\n if (o.published) defAttrs.push('published=\"1\"');\n if (o.gridDropZones === false) defAttrs.push('gridDropZones=\"0\"');\n if (o.multipleFieldFilters === false) defAttrs.push('multipleFieldFilters=\"0\"');\n if (o.rowHeaderCaption) defAttrs.push(`rowHeaderCaption=\"${escapeXml(o.rowHeaderCaption)}\"`);\n if (o.colHeaderCaption) defAttrs.push(`colHeaderCaption=\"${escapeXml(o.colHeaderCaption)}\"`);\n if (o.fieldListSortAscending) defAttrs.push('fieldListSortAscending=\"1\"');\n if (o.mdxSubqueries) defAttrs.push('mdxSubqueries=\"1\"');\n if (o.customListSort === false) defAttrs.push('customListSort=\"0\"');\n if (o.asteriskTotals) defAttrs.push('asteriskTotals=\"1\"');\n if (o.dataPosition !== undefined) defAttrs.push(`dataPosition=\"${o.dataPosition}\"`);\n if (o.immersive) defAttrs.push('immersive=\"1\"');\n if (o.vacatedStyle) defAttrs.push(`vacatedStyle=\"${escapeXml(o.vacatedStyle)}\"`);\n\n p.push(\n `<pivotTableDefinition xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" ${defAttrs.join(\" \")}>`,\n );\n\n // location\n const locAttrs: string[] = [\n `ref=\"${escapeXml(locationRef)}\"`,\n `firstHeaderRow=\"1\"`,\n `firstDataRow=\"${colFieldIndices.length + 1}\"`,\n `firstDataCol=\"${rowFieldIndices.length}\"`,\n ];\n if (o.locationColPageCount !== undefined)\n locAttrs.push(`colPageCount=\"${o.locationColPageCount}\"`);\n if (o.locationRowPageCount !== undefined)\n locAttrs.push(`rowPageCount=\"${o.locationRowPageCount}\"`);\n p.push(`<location ${locAttrs.join(\" \")}/>`);\n\n p.push(pivotFieldsXml);\n p.push(rowFieldsXml);\n p.push(rowItemsXml);\n if (colFieldIndices.length > 0) p.push(colFieldsXml);\n p.push(colItemsXml);\n if (pageFieldIndices.length > 0) p.push(pageFieldsXml);\n if (dataFields.length > 0) p.push(dataFieldsXml);\n\n // formats\n if (o.formats && o.formats.length > 0) {\n const fmtParts: string[] = [`<formats count=\"${o.formats.length}\">`];\n for (const fmt of o.formats) {\n const fmtAttrs: string[] = [];\n if (fmt.action && fmt.action !== \"formatting\") fmtAttrs.push(`action=\"${fmt.action}\"`);\n if (fmt.dxfId !== undefined) fmtAttrs.push(`dxfId=\"${fmt.dxfId}\"`);\n fmtParts.push(\n `<format${fmtAttrs.length ? \" \" + fmtAttrs.join(\" \") : \"\"}>${buildPivotAreaXml(fmt.pivotArea)}</format>`,\n );\n }\n fmtParts.push(\"</formats>\");\n p.push(fmtParts.join(\"\"));\n }\n\n // chartFormats\n if (o.chartFormats && o.chartFormats.length > 0) {\n const cfParts: string[] = [`<chartFormats count=\"${o.chartFormats.length}\">`];\n for (const cf of o.chartFormats) {\n const cfAttrs: string[] = [`chart=\"${cf.chart}\"`, `format=\"${cf.format}\"`];\n if (cf.series) cfAttrs.push('series=\"1\"');\n const areaXml = cf.pivotArea ? buildPivotAreaXml(cf.pivotArea) : \"\";\n cfParts.push(`<chartFormat ${cfAttrs.join(\" \")}>${areaXml}</chartFormat>`);\n }\n cfParts.push(\"</chartFormats>\");\n p.push(cfParts.join(\"\"));\n }\n\n // pivotHierarchies\n if (o.pivotHierarchies && o.pivotHierarchies.length > 0) {\n p.push(buildPivotHierarchies(o.pivotHierarchies));\n }\n\n // pivotTableStyleInfo\n p.push(\n `<pivotTableStyleInfo name=\"${escapeXml(style)}\" showRowHeaders=\"1\" showColHeaders=\"1\" showRowStripes=\"0\" showColStripes=\"0\" showLastColumn=\"1\"/>`,\n );\n\n // filters\n if (o.filters && o.filters.length > 0) {\n const fParts: string[] = [`<filters count=\"${o.filters.length}\">`];\n for (const f of o.filters) {\n const fAttrs: Record<string, string | number | boolean | undefined> = {\n fld: f.fld,\n type: f.type,\n id: f.id,\n };\n if (f.mpFld !== undefined) fAttrs.mpFld = f.mpFld;\n if (f.evalOrder !== undefined) fAttrs.evalOrder = f.evalOrder;\n fParts.push(`<filter${attrs(fAttrs)}><autoFilter></autoFilter></filter>`);\n }\n fParts.push(\"</filters>\");\n p.push(fParts.join(\"\"));\n }\n\n // rowHierarchiesUsage\n if (o.rowHierarchiesUsage && o.rowHierarchiesUsage.length > 0) {\n const rhu = o.rowHierarchiesUsage;\n p.push(\n `<rowHierarchiesUsage count=\"${rhu.length}\">${rhu.map((h) => `<rowHierarchyUsage hierarchyUsage=\"${h.hierarchyUsage}\"/>`).join(\"\")}</rowHierarchiesUsage>`,\n );\n }\n\n // colHierarchiesUsage\n if (o.colHierarchiesUsage && o.colHierarchiesUsage.length > 0) {\n const chu = o.colHierarchiesUsage;\n p.push(\n `<colHierarchiesUsage count=\"${chu.length}\">${chu.map((h) => `<colHierarchyUsage hierarchyUsage=\"${h.hierarchyUsage}\"/>`).join(\"\")}</colHierarchiesUsage>`,\n );\n }\n\n p.push(\"</pivotTableDefinition>\");\n return p.join(\"\");\n}\n\n// ── Stringify helpers ──\n\nfunction buildFieldOverrideAttrs(fo: PivotFieldOverrideOptions): string {\n const a: string[] = [];\n if (fo.allDrilled) a.push('allDrilled=\"1\"');\n if (fo.autoShow) a.push('autoShow=\"1\"');\n if (fo.countSubtotal) a.push('countSubtotal=\"1\"');\n if (fo.dataSourceSort) a.push('dataSourceSort=\"1\"');\n if (fo.defaultAttributeDrillState) a.push('defaultAttributeDrillState=\"1\"');\n if (fo.hiddenLevel) a.push('hiddenLevel=\"1\"');\n if (fo.hideNewItems) a.push('hideNewItems=\"1\"');\n if (fo.insertBlankRow) a.push('insertBlankRow=\"1\"');\n if (fo.insertPageBreak) a.push('insertPageBreak=\"1\"');\n if (fo.itemPageCount) a.push('itemPageCount=\"1\"');\n if (fo.measureFilter) a.push('measureFilter=\"1\"');\n if (fo.nonAutoSortDefault) a.push('nonAutoSortDefault=\"1\"');\n if (fo.productSubtotal) a.push('productSubtotal=\"1\"');\n if (fo.rankBy !== undefined) a.push(`rankBy=\"${fo.rankBy}\"`);\n if (fo.serverField) a.push('serverField=\"1\"');\n if (fo.showDropDowns) a.push('showDropDowns=\"1\"');\n if (fo.showPropAsCaption) a.push('showPropAsCaption=\"1\"');\n if (fo.showPropCell) a.push('showPropCell=\"1\"');\n if (fo.showPropTip) a.push('showPropTip=\"1\"');\n if (fo.stdDevPSubtotal) a.push('stdDevPSubtotal=\"1\"');\n if (fo.stdDevSubtotal) a.push('stdDevSubtotal=\"1\"');\n if (fo.subtotalCaption) a.push(`subtotalCaption=\"${escapeXml(fo.subtotalCaption)}\"`);\n if (fo.topAutoShow) a.push('topAutoShow=\"1\"');\n if (fo.uniqueMemberProperty) a.push('uniqueMemberProperty=\"1\"');\n if (fo.varPSubtotal) a.push('varPSubtotal=\"1\"');\n if (fo.varSubtotal) a.push('varSubtotal=\"1\"');\n return a.join(\" \");\n}\n\nfunction buildPivotFields(\n o: PivotTableOptions,\n sd: PivotSourceData,\n rowIndices: number[],\n colIndices: number[],\n dataIndices: number[],\n pageIndices: number[],\n): string {\n const fieldNames = sd.fieldNames;\n const parts: string[] = [`<pivotFields count=\"${fieldNames.length}\">`];\n\n for (let i = 0; i < fieldNames.length; i++) {\n const isRow = rowIndices.includes(i);\n const isCol = colIndices.includes(i);\n const isData = dataIndices.includes(i);\n const isPage = pageIndices.includes(i);\n const override = o.fieldOverrides?.find((fo) => fo.field === fieldNames[i]);\n const extraAttrs = override ? buildFieldOverrideAttrs(override) : \"\";\n\n if (isData) {\n const dataFieldIdx = dataIndices.indexOf(i);\n const df = o.data[dataFieldIdx];\n const dfAttrs: string[] = ['dataField=\"1\"', 'showAll=\"0\"'];\n if (extraAttrs) dfAttrs.push(extraAttrs);\n if (df?.showDataAs) dfAttrs.push(`showDataAs=\"${df.showDataAs}\"`);\n if (df?.baseField !== undefined) dfAttrs.push(`baseField=\"${df.baseField}\"`);\n if (df?.baseItem !== undefined) dfAttrs.push(`baseItem=\"${df.baseItem}\"`);\n if (o.autoSortScope) {\n parts.push(\n `<pivotField ${dfAttrs.join(\" \")}><autoSortScope>${buildPivotAreaXml(o.autoSortScope)}</autoSortScope></pivotField>`,\n );\n } else {\n parts.push(`<pivotField ${dfAttrs.join(\" \")}/>`);\n }\n } else if (isRow) {\n const uniqueVals = collectUniqueValues(sd.records, i);\n const rAttrs = extraAttrs\n ? ` axis=\"axisRow\" showAll=\"0\" ${extraAttrs}`\n : ' axis=\"axisRow\" showAll=\"0\"';\n parts.push(`<pivotField${rAttrs}>`);\n parts.push(`<items count=\"${uniqueVals.length + 1}\">`);\n for (let j = 0; j < uniqueVals.length; j++) parts.push(`<item x=\"${j}\"/>`);\n parts.push(`<item t=\"default\"${override?.defaultItemSd === false ? ' sd=\"0\"' : \"\"}/>`);\n parts.push(\"</items></pivotField>\");\n } else if (isCol) {\n const uniqueVals = collectUniqueValues(sd.records, i);\n const cAttrs = extraAttrs\n ? ` axis=\"axisCol\" showAll=\"0\" ${extraAttrs}`\n : ' axis=\"axisCol\" showAll=\"0\"';\n parts.push(`<pivotField${cAttrs}>`);\n parts.push(`<items count=\"${uniqueVals.length + 1}\">`);\n for (let j = 0; j < uniqueVals.length; j++) parts.push(`<item x=\"${j}\"/>`);\n parts.push(`<item t=\"default\"${override?.defaultItemSd === false ? ' sd=\"0\"' : \"\"}/>`);\n parts.push(\"</items></pivotField>\");\n } else if (isPage) {\n const uniqueVals = collectUniqueValues(sd.records, i);\n const pAttrs = extraAttrs\n ? ` axis=\"axisPage\" showAll=\"0\" ${extraAttrs}`\n : ' axis=\"axisPage\" showAll=\"0\"';\n parts.push(`<pivotField${pAttrs}>`);\n parts.push(`<items count=\"${uniqueVals.length + 1}\">`);\n for (let j = 0; j < uniqueVals.length; j++) parts.push(`<item x=\"${j}\"/>`);\n parts.push(`<item t=\"default\"${override?.defaultItemSd === false ? ' sd=\"0\"' : \"\"}/>`);\n parts.push(\"</items></pivotField>\");\n } else {\n const nAttrs = extraAttrs ? ` showAll=\"0\" ${extraAttrs}` : ' showAll=\"0\"';\n parts.push(`<pivotField${nAttrs}/>`);\n }\n }\n\n parts.push(\"</pivotFields>\");\n return parts.join(\"\");\n}\n\nfunction buildPageFields(o: PivotTableOptions, pageIndices: number[]): string {\n if (pageIndices.length === 0) return \"\";\n const parts: string[] = [`<pageFields count=\"${pageIndices.length}\">`];\n for (let i = 0; i < pageIndices.length; i++) {\n const cap = o.pageCaptions?.[i];\n const capAttr = cap ? ` cap=\"${escapeXml(cap)}\"` : \"\";\n parts.push(`<pageField fld=\"${pageIndices[i]}\" hier=\"${i}\"${capAttr}/>`);\n }\n parts.push(\"</pageFields>\");\n return parts.join(\"\");\n}\n\nfunction buildRowFields(rowIndices: number[]): string {\n if (rowIndices.length === 0) return '<rowFields count=\"0\"/>';\n const parts: string[] = [`<rowFields count=\"${rowIndices.length}\">`];\n for (const idx of rowIndices) parts.push(`<field x=\"${idx}\"/>`);\n parts.push(\"</rowFields>\");\n return parts.join(\"\");\n}\n\nfunction buildRowItems(sd: PivotSourceData, rowIndices: number[]): string {\n if (rowIndices.length === 0) return '<rowItems count=\"1\"><i/></rowItems>';\n\n const allUniqueCounts: number[] = [];\n for (const idx of rowIndices) {\n allUniqueCounts.push(collectUniqueValues(sd.records, idx).length);\n }\n\n if (rowIndices.length === 1) {\n const count = allUniqueCounts[0];\n const parts: string[] = [`<rowItems count=\"${count + 1}\">`];\n for (let i = 0; i < count; i++) parts.push(`<i><x v=\"${i}\"/></i>`);\n parts.push(`<i t=\"grand\"><x/></i>`);\n parts.push(\"</rowItems>\");\n return parts.join(\"\");\n }\n\n const combos = cartesianOfCounts(allUniqueCounts);\n const rowItems: string[] = [];\n for (const combo of combos) {\n rowItems.push(`<i>${combo.map((v) => `<x v=\"${v}\"/>`).join(\"\")}</i>`);\n }\n rowItems.push(`<i t=\"grand\">${rowIndices.map(() => \"<x/>\").join(\"\")}</i>`);\n return `<rowItems count=\"${rowItems.length}\">${rowItems.join(\"\")}</rowItems>`;\n}\n\nfunction buildColFields(colIndices: number[]): string {\n if (colIndices.length === 0) return '<colFields count=\"0\"/>';\n const parts: string[] = [`<colFields count=\"${colIndices.length}\">`];\n for (const idx of colIndices) parts.push(`<field x=\"${idx}\"/>`);\n parts.push(\"</colFields>\");\n return parts.join(\"\");\n}\n\nfunction buildColItems(\n sd: PivotSourceData,\n colIndices: number[],\n dataFields: PivotDataField[],\n): string {\n if (colIndices.length > 0) {\n const allUniqueCounts: number[] = [];\n for (const idx of colIndices) {\n allUniqueCounts.push(collectUniqueValues(sd.records, idx).length);\n }\n const combos = cartesianOfCounts(allUniqueCounts);\n const items: string[] = [];\n for (const combo of combos) {\n items.push(`<i>${combo.map((v) => `<x v=\"${v}\"/>`).join(\"\")}</i>`);\n }\n items.push(`<i t=\"grand\">${colIndices.map(() => \"<x/>\").join(\"\")}</i>`);\n return `<colItems count=\"${items.length}\">${items.join(\"\")}</colItems>`;\n }\n if (dataFields.length > 1) {\n const items = dataFields.map((_, i) => `<i><x v=\"${i}\"/></i>`);\n return `<colItems count=\"${items.length}\">${items.join(\"\")}</colItems>`;\n }\n return '<colItems count=\"1\"><i/></colItems>';\n}\n\nfunction buildDataFields(dataFields: PivotDataField[], dataFieldIndices: number[]): string {\n if (dataFields.length === 0) return '<dataFields count=\"0\"/>';\n const parts: string[] = [`<dataFields count=\"${dataFields.length}\">`];\n for (let i = 0; i < dataFields.length; i++) {\n const df = dataFields[i];\n const subtotal = df.summarize ?? \"sum\";\n const name = df.name ?? `${subtotal === \"sum\" ? \"Sum\" : subtotal} of ${df.field}`;\n const dfAttrs: string[] = [\n `name=\"${escapeXml(name)}\"`,\n `fld=\"${dataFieldIndices[i]}\"`,\n `subtotal=\"${subtotal}\"`,\n ];\n if (df.showDataAs) dfAttrs.push(`showDataAs=\"${df.showDataAs}\"`);\n if (df.baseField !== undefined) dfAttrs.push(`baseField=\"${df.baseField}\"`);\n if (df.baseItem !== undefined) dfAttrs.push(`baseItem=\"${df.baseItem}\"`);\n parts.push(`<dataField ${dfAttrs.join(\" \")}/>`);\n }\n parts.push(\"</dataFields>\");\n return parts.join(\"\");\n}\n\nfunction computeLocationRef(\n sd: PivotSourceData,\n location: string,\n rowFieldIndices: number[],\n colFieldIndices: number[],\n dataFields: PivotDataField[],\n): string {\n const startCell = location.split(\":\")[0];\n const match = startCell.match(/^([A-Z]+)(\\d+)$/);\n if (!match) return location;\n const startCol = match[1];\n const startRow = parseInt(match[2], 10);\n\n let rowCount = 1;\n if (rowFieldIndices.length > 0) {\n rowCount += collectUniqueValues(sd.records, rowFieldIndices[0]).length;\n }\n rowCount += 1;\n\n let colCount = Math.max(rowFieldIndices.length, 1);\n if (colFieldIndices.length > 0) {\n colCount += collectUniqueValues(sd.records, colFieldIndices[0]).length;\n } else if (dataFields.length > 1) {\n colCount += dataFields.length - 1;\n }\n colCount += 1;\n\n const endCol = colIndexToLetter(letterToColIndex(startCol) + colCount - 1);\n const endRow = startRow + rowCount - 1;\n return `${startCol}${startRow}:${endCol}${endRow}`;\n}\n\nfunction buildPivotHierarchies(hierarchies: PivotHierarchyOptions[]): string {\n const parts: string[] = [`<pivotHierarchies count=\"${hierarchies.length}\">`];\n for (const h of hierarchies) {\n const hAttrs: string[] = [];\n if (h.outline) hAttrs.push('outline=\"1\"');\n if (h.multipleItemSelectionAllowed) hAttrs.push('multipleItemSelectionAllowed=\"1\"');\n if (h.subtotalTop) hAttrs.push('subtotalTop=\"1\"');\n if (h.showInFieldList === false) hAttrs.push('showInFieldList=\"0\"');\n if (h.dragToRow === false) hAttrs.push('dragToRow=\"0\"');\n if (h.dragToCol === false) hAttrs.push('dragToCol=\"0\"');\n if (h.dragToPage === false) hAttrs.push('dragToPage=\"0\"');\n if (h.dragToData) hAttrs.push('dragToData=\"1\"');\n if (h.dragOff === false) hAttrs.push('dragOff=\"0\"');\n if (h.includeNewItemsInFilter) hAttrs.push('includeNewItemsInFilter=\"1\"');\n if (h.caption) hAttrs.push(`caption=\"${escapeXml(h.caption)}\"`);\n const inner =\n (h.memberProperties\n ? `<mps count=\"${h.memberProperties.length}\">${h.memberProperties\n .map((mp) => {\n const mpAttrs: string[] = [`field=\"${mp.field}\"`];\n if (mp.name !== undefined) mpAttrs.push(`name=\"${escapeXml(mp.name)}\"`);\n if (mp.showCell) mpAttrs.push('showCell=\"1\"');\n if (mp.showTip) mpAttrs.push('showTip=\"1\"');\n if (mp.showAsCaption) mpAttrs.push('showAsCaption=\"1\"');\n return `<mp ${mpAttrs.join(\" \")}/>`;\n })\n .join(\"\")}</mps>`\n : \"\") +\n (h.members\n ? `<members count=\"${h.members.length}\">${h.members.map((m) => `<member name=\"${escapeXml(m.name)}\"${m.level !== undefined ? ` level=\"${m.level}\"` : \"\"}/>`).join(\"\")}</members>`\n : \"\");\n if (inner) {\n parts.push(`<pivotHierarchy ${hAttrs.join(\" \")}>${inner}</pivotHierarchy>`);\n } else {\n parts.push(`<pivotHierarchy ${hAttrs.join(\" \")}/>`);\n }\n }\n parts.push(\"</pivotHierarchies>\");\n return parts.join(\"\");\n}\n\nfunction buildPivotAreaXml(area: PivotAreaOptions): string {\n const aAttrs: string[] = [];\n if (area.field !== undefined) aAttrs.push(`field=\"${area.field}\"`);\n if (area.type) aAttrs.push(`type=\"${area.type}\"`);\n if (area.dataOnly === false) aAttrs.push('dataOnly=\"0\"');\n if (area.labelOnly) aAttrs.push('labelOnly=\"1\"');\n if (area.grandRow) aAttrs.push('grandRow=\"1\"');\n if (area.grandCol) aAttrs.push('grandCol=\"1\"');\n if (area.cacheIndex) aAttrs.push('cacheIndex=\"1\"');\n if (area.outline === false) aAttrs.push('outline=\"0\"');\n if (area.offset) aAttrs.push(`offset=\"${escapeXml(area.offset)}\"`);\n if (area.collapsedLevelsAreSubtotals) aAttrs.push('collapsedLevelsAreSubtotals=\"1\"');\n if (area.axis) aAttrs.push(`axis=\"${area.axis}\"`);\n if (area.fieldPosition !== undefined) aAttrs.push(`fieldPosition=\"${area.fieldPosition}\"`);\n const refsXml = area.references ? buildPivotAreaReferences(area.references) : \"\";\n if (refsXml) return `<pivotArea ${aAttrs.join(\" \")}>${refsXml}</pivotArea>`;\n return `<pivotArea ${aAttrs.join(\" \")}/>`;\n}\n\nfunction buildPivotAreaReferences(\n refs: import(\"./pivot/pivot-utils\").PivotAreaReferenceOptions[],\n): string {\n const parts: string[] = [`<references count=\"${refs.length}\">`];\n for (const ref of refs) {\n const rAttrs: string[] = [];\n if (ref.field !== undefined) rAttrs.push(`field=\"${ref.field}\"`);\n if (ref.count !== undefined) rAttrs.push(`count=\"${ref.count}\"`);\n if (ref.selected === false) rAttrs.push('selected=\"0\"');\n if (ref.byPosition) rAttrs.push('byPosition=\"1\"');\n if (ref.relative) rAttrs.push('relative=\"1\"');\n if (ref.defaultSubtotal) rAttrs.push('defaultSubtotal=\"1\"');\n const xXml = ref.x ? ref.x.map((v) => `<x v=\"${v}\"/>`).join(\"\") : \"\";\n if (xXml) {\n parts.push(`<reference ${rAttrs.join(\" \")}>${xXml}</reference>`);\n } else {\n parts.push(`<reference ${rAttrs.join(\" \")}/>`);\n }\n }\n parts.push(\"</references>\");\n return parts.join(\"\");\n}\n\nfunction letterToColIndex(letters: string): number {\n let col = 0;\n for (let i = 0; i < letters.length; i++) col = col * 26 + (letters.charCodeAt(i) - 64);\n return col;\n}\n\nfunction colIndexToLetter(col: number): string {\n let result = \"\";\n let n = col;\n while (n > 0) {\n n--;\n result = String.fromCharCode(65 + (n % 26)) + result;\n n = Math.floor(n / 26);\n }\n return result;\n}\n\nfunction cartesianOfCounts(counts: number[]): number[][] {\n if (counts.length === 0) return [[]];\n let result: number[][] = [[]];\n for (const count of counts) {\n const next: number[][] = [];\n for (const prefix of result) {\n for (let i = 0; i < count; i++) next.push([...prefix, i]);\n }\n result = next;\n }\n return result;\n}\n","/**\n * PivotCache descriptors for XLSX — generates xl/pivotCache/pivotCacheDefinition{N}.xml\n * and xl/pivotCache/pivotCacheRecords{N}.xml.\n *\n * Direct stringify/parse — no intermediate class.\n *\n * @module\n */\n\nimport type { CustomDescriptor } from \"@office-open/core/descriptor\";\nimport { escapeXml, findChild, attr, attrNum } from \"@office-open/xml\";\n\nimport type { PivotCacheDefinitionOptions } from \"./pivot/pivot-utils\";\nimport type { PivotSourceData } from \"./pivot/pivot-utils\";\nimport { collectUniqueValues, isNumericField } from \"./pivot/pivot-utils\";\n\n// ── Types ──\n\nexport interface PivotCacheRecordsDescriptorOptions {\n sourceData: PivotSourceData;\n /** Parsed records (from parse path) */\n records?: Record<string, unknown>[][];\n}\n\nexport interface PivotCacheDefDescriptorOptions {\n sourceRef: string;\n sourceSheet: string;\n sourceData: PivotSourceData;\n recordsRid: string;\n cacheDefOpts?: PivotCacheDefinitionOptions;\n}\n\n// ── Descriptors ──\n\nexport const pivotCacheDefDesc: CustomDescriptor<PivotCacheDefDescriptorOptions> = {\n kind: \"custom\",\n\n stringify(opts, _ctx) {\n return stringifyPivotCacheDef(\n opts.sourceRef,\n opts.sourceSheet,\n opts.sourceData,\n opts.recordsRid,\n opts.cacheDefOpts,\n );\n },\n\n parse(el, _ctx) {\n const result: Record<string, unknown> = {};\n const csEl = findChild(el, \"cacheSource\");\n if (csEl) {\n result.sourceType = attr(csEl, \"type\");\n const wssEl = findChild(csEl, \"worksheetSource\");\n if (wssEl) {\n const wss: Record<string, unknown> = {};\n if (attr(wssEl, \"ref\")) wss.ref = attr(wssEl, \"ref\");\n if (attr(wssEl, \"sheet\")) wss.sheet = attr(wssEl, \"sheet\");\n result.worksheetSource = wss;\n }\n }\n const cfEl = findChild(el, \"cacheFields\");\n if (cfEl) {\n const fields: Record<string, unknown>[] = [];\n for (const fEl of cfEl.elements ?? []) {\n if (fEl.name !== \"cacheField\") continue;\n const field: Record<string, unknown> = {};\n if (attr(fEl, \"name\")) field.name = attr(fEl, \"name\");\n if (attrNum(fEl, \"numFmtId\") !== undefined) field.numFmtId = attrNum(fEl, \"numFmtId\");\n const siEl = findChild(fEl, \"sharedItems\");\n if (siEl) {\n const items: (string | number)[] = [];\n for (const siChild of siEl.elements ?? []) {\n const v = attr(siChild, \"v\");\n if (v !== undefined) items.push(isNaN(Number(v)) ? v : Number(v));\n }\n field.sharedItems = items;\n }\n fields.push(field);\n }\n result.cacheFields = fields;\n }\n return result as Record<string, unknown>;\n },\n};\n\nexport const pivotCacheRecordsDesc: CustomDescriptor<PivotCacheRecordsDescriptorOptions> = {\n kind: \"custom\",\n\n stringify(opts, _ctx) {\n return stringifyPivotCacheRecords(opts.sourceData);\n },\n\n parse(el, _ctx) {\n const records: Record<string, unknown>[][] = [];\n for (const rEl of el.elements ?? []) {\n if (rEl.name !== \"r\") continue;\n const record: Record<string, unknown>[] = [];\n for (const fEl of rEl.elements ?? []) {\n const entry: Record<string, unknown> = {};\n if (fEl.name === \"x\") {\n entry.type = \"string\";\n entry.v = attrNum(fEl, \"v\") ?? 0;\n } else if (fEl.name === \"n\") {\n entry.type = \"number\";\n const v = attr(fEl, \"v\");\n entry.v = v !== undefined ? Number(v) : 0;\n } else if (fEl.name === \"d\") {\n entry.type = \"date\";\n entry.v = attr(fEl, \"v\") ?? \"\";\n } else if (fEl.name === \"m\") {\n entry.type = \"missing\";\n }\n record.push(entry);\n }\n records.push(record);\n }\n return { records } as Record<string, unknown>;\n },\n};\n\n// ── Stringify: pivotCacheDefinition ──\n\nfunction stringifyPivotCacheDef(\n sourceRef: string,\n sourceSheet: string,\n sourceData: PivotSourceData,\n recordsRid: string,\n cacheDefOpts?: PivotCacheDefinitionOptions,\n): string {\n const p: string[] = [];\n const rootAttrs: string[] = [\n 'xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"',\n 'xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"',\n `r:id=\"${escapeXml(recordsRid)}\"`,\n `recordCount=\"${sourceData.records.length}\"`,\n 'createdVersion=\"6\"',\n 'refreshedVersion=\"6\"',\n 'minRefreshableVersion=\"3\"',\n ];\n\n if (cacheDefOpts) {\n const cd = cacheDefOpts;\n if (cd.invalid) rootAttrs.push('invalid=\"1\"');\n if (cd.saveData === false) rootAttrs.push('saveData=\"0\"');\n if (cd.optimizeMemory) rootAttrs.push('optimizeMemory=\"1\"');\n if (cd.enableRefresh === false) rootAttrs.push('enableRefresh=\"0\"');\n if (cd.refreshedBy) rootAttrs.push(`refreshedBy=\"${escapeXml(cd.refreshedBy)}\"`);\n if (cd.refreshedDate !== undefined) rootAttrs.push(`refreshedDate=\"${cd.refreshedDate}\"`);\n if (cd.refreshedDateIso) rootAttrs.push(`refreshedDateIso=\"${escapeXml(cd.refreshedDateIso)}\"`);\n if (cd.backgroundQuery) rootAttrs.push('backgroundQuery=\"1\"');\n if (cd.missingItemsLimit !== undefined)\n rootAttrs.push(`missingItemsLimit=\"${cd.missingItemsLimit}\"`);\n if (cd.upgradeOnRefresh) rootAttrs.push('upgradeOnRefresh=\"1\"');\n if (cd.supportSubquery) rootAttrs.push('supportSubquery=\"1\"');\n if (cd.supportAdvancedDrill) rootAttrs.push('supportAdvancedDrill=\"1\"');\n }\n\n p.push(`<pivotCacheDefinition ${rootAttrs.join(\" \")}>`);\n\n // cacheSource\n if (cacheDefOpts?.consolidation) {\n const con = cacheDefOpts.consolidation;\n const conParts: string[] = ['<cacheSource type=\"consolidation\"><consolidation'];\n if (con.autoPage === false) conParts.push(' autoPage=\"0\"');\n conParts.push(\">\");\n if (con.pages && con.pages.length > 0) {\n conParts.push(`<pages count=\"${con.pages.length}\">`);\n for (const pg of con.pages) {\n const pgItems = pg.items ?? [];\n conParts.push(`<page${pgItems.length ? ` count=\"${pgItems.length}\"` : \"\"}>`);\n for (const pi of pgItems) conParts.push(`<pageItem name=\"${escapeXml(pi.name)}\"/>`);\n conParts.push(\"</page>\");\n }\n conParts.push(\"</pages>\");\n }\n conParts.push(`<rangeSets count=\"${con.rangeSets.length}\">`);\n for (const rs of con.rangeSets) {\n const rsAttrs: string[] = [];\n if (rs.i1 !== undefined) rsAttrs.push(`i1=\"${rs.i1}\"`);\n if (rs.i2 !== undefined) rsAttrs.push(`i2=\"${rs.i2}\"`);\n if (rs.i3 !== undefined) rsAttrs.push(`i3=\"${rs.i3}\"`);\n if (rs.i4 !== undefined) rsAttrs.push(`i4=\"${rs.i4}\"`);\n if (rs.ref) rsAttrs.push(`ref=\"${escapeXml(rs.ref)}\"`);\n if (rs.name) rsAttrs.push(`name=\"${escapeXml(rs.name)}\"`);\n if (rs.sheet) rsAttrs.push(`sheet=\"${escapeXml(rs.sheet)}\"`);\n if (rs.rId) rsAttrs.push(`r:id=\"${escapeXml(rs.rId)}\"`);\n conParts.push(`<rangeSet ${rsAttrs.join(\" \")}/>`);\n }\n conParts.push(\"</rangeSets></consolidation></cacheSource>\");\n p.push(conParts.join(\"\"));\n } else {\n p.push(\n `<cacheSource type=\"worksheet\">` +\n `<worksheetSource ref=\"${escapeXml(sourceRef)}\" sheet=\"${escapeXml(sourceSheet)}\"/>` +\n `</cacheSource>`,\n );\n }\n\n // cacheFields\n const fieldNames = sourceData.fieldNames;\n p.push(`<cacheFields count=\"${fieldNames.length}\">`);\n\n for (let i = 0; i < fieldNames.length; i++) {\n const fieldName = fieldNames[i];\n const numeric = isNumericField(sourceData.records, i);\n const uniqueVals = collectUniqueValues(sourceData.records, i);\n\n if (numeric) {\n let min = Infinity,\n max = -Infinity;\n for (const row of sourceData.records) {\n const v = row[i];\n if (typeof v === \"number\") {\n if (v < min) min = v;\n if (v > max) max = v;\n }\n }\n if (!isFinite(min)) {\n min = 0;\n max = 0;\n }\n const allInteger = sourceData.records.every(\n (row) => typeof row[i] === \"number\" && Number.isInteger(row[i]),\n );\n\n const cfOverride = cacheDefOpts?.cacheFieldOverrides?.get(i);\n const cfExtraAttrs: string[] = [];\n const siExtraAttrs: string[] = [];\n if (cfOverride) {\n if (cfOverride.databaseField) cfExtraAttrs.push('databaseField=\"1\"');\n if (cfOverride.level !== undefined) cfExtraAttrs.push(`level=\"${cfOverride.level}\"`);\n if (cfOverride.mappingCount !== undefined)\n cfExtraAttrs.push(`mappingCount=\"${cfOverride.mappingCount}\"`);\n if (cfOverride.memberPropertyField !== undefined)\n cfExtraAttrs.push(`memberPropertyField=\"${cfOverride.memberPropertyField}\"`);\n if (cfOverride.propertyName)\n cfExtraAttrs.push(`propertyName=\"${escapeXml(cfOverride.propertyName)}\"`);\n if (cfOverride.serverField) cfExtraAttrs.push('serverField=\"1\"');\n if (cfOverride.uniqueList) cfExtraAttrs.push('uniqueList=\"1\"');\n if (cfOverride.containsMixedTypes) siExtraAttrs.push('containsMixedTypes=\"1\"');\n if (cfOverride.containsNonDate) siExtraAttrs.push('containsNonDate=\"1\"');\n if (cfOverride.longText) siExtraAttrs.push('longText=\"1\"');\n }\n\n p.push(\n `<cacheField name=\"${escapeXml(fieldName)}\" ${cfExtraAttrs.length ? cfExtraAttrs.join(\" \") + \" \" : \"\"}numFmtId=\"0\">` +\n `<sharedItems containsSemiMixedTypes=\"0\" containsString=\"0\"` +\n ` containsNumber=\"1\" containsInteger=\"${allInteger ? \"1\" : \"0\"}\"` +\n ` minValue=\"${min}\" maxValue=\"${max}\" count=\"${uniqueVals.length}\"${siExtraAttrs.length ? \" \" + siExtraAttrs.join(\" \") : \"\"}/>` +\n `</cacheField>`,\n );\n } else {\n let hasDate = false,\n hasMissing = false;\n for (const v of uniqueVals) {\n if (v instanceof Date) hasDate = true;\n if (v === null) hasMissing = true;\n }\n const siAttrs: string[] = [`count=\"${uniqueVals.length}\"`];\n if (hasDate) siAttrs.push('containsDate=\"1\"');\n if (hasMissing) siAttrs.push('containsBlank=\"1\"');\n\n const cfOverride = cacheDefOpts?.cacheFieldOverrides?.get(i);\n const cfExtraAttrs: string[] = [];\n if (cfOverride) {\n if (cfOverride.databaseField) cfExtraAttrs.push('databaseField=\"1\"');\n if (cfOverride.level !== undefined) cfExtraAttrs.push(`level=\"${cfOverride.level}\"`);\n if (cfOverride.mappingCount !== undefined)\n cfExtraAttrs.push(`mappingCount=\"${cfOverride.mappingCount}\"`);\n if (cfOverride.memberPropertyField !== undefined)\n cfExtraAttrs.push(`memberPropertyField=\"${cfOverride.memberPropertyField}\"`);\n if (cfOverride.propertyName)\n cfExtraAttrs.push(`propertyName=\"${escapeXml(cfOverride.propertyName)}\"`);\n if (cfOverride.serverField) cfExtraAttrs.push('serverField=\"1\"');\n if (cfOverride.uniqueList) cfExtraAttrs.push('uniqueList=\"1\"');\n if (cfOverride.containsMixedTypes) siAttrs.push('containsMixedTypes=\"1\"');\n if (cfOverride.containsNonDate) siAttrs.push('containsNonDate=\"1\"');\n if (cfOverride.longText) siAttrs.push('longText=\"1\"');\n }\n\n p.push(\n `<cacheField name=\"${escapeXml(fieldName)}\" ${cfExtraAttrs.length ? cfExtraAttrs.join(\" \") + \" \" : \"\"}numFmtId=\"0\"><sharedItems ${siAttrs.join(\" \")}>`,\n );\n\n for (const v of uniqueVals) {\n if (v === null) p.push(\"<m/>\");\n else if (v instanceof Date) p.push(`<d v=\"${v.toISOString().replace(/\\.\\d{3}Z$/, \"Z\")}\"/>`);\n else p.push(`<s v=\"${escapeXml(String(v))}\"/>`);\n }\n p.push(\"</sharedItems>\");\n\n // fieldGroup\n const fg = cacheDefOpts?.fieldGroups?.get(i);\n if (fg) {\n const fgParts: string[] = [\"<fieldGroup\"];\n if (fg.parent !== undefined) fgParts.push(` par=\"${fg.parent}\"`);\n if (fg.base !== undefined) fgParts.push(` base=\"${fg.base}\"`);\n fgParts.push(\">\");\n if (fg.rangePr) {\n const rp = fg.rangePr;\n const rpAttrs: string[] = [];\n if (rp.autoStart === false) rpAttrs.push('autoStart=\"0\"');\n if (rp.autoEnd === false) rpAttrs.push('autoEnd=\"0\"');\n if (rp.groupBy && rp.groupBy !== \"range\") rpAttrs.push(`groupBy=\"${rp.groupBy}\"`);\n if (rp.startNum !== undefined) rpAttrs.push(`startNum=\"${rp.startNum}\"`);\n if (rp.endNum !== undefined) rpAttrs.push(`endNum=\"${rp.endNum}\"`);\n if (rp.startDate) rpAttrs.push(`startDate=\"${escapeXml(rp.startDate)}\"`);\n if (rp.endDate) rpAttrs.push(`endDate=\"${escapeXml(rp.endDate)}\"`);\n if (rp.groupInterval !== undefined) rpAttrs.push(`groupInterval=\"${rp.groupInterval}\"`);\n fgParts.push(`<rangePr${rpAttrs.length ? \" \" + rpAttrs.join(\" \") : \"\"}/>`);\n }\n if (fg.discretePr && fg.discretePr.length > 0) {\n fgParts.push(`<discretePr count=\"${fg.discretePr.length}\">`);\n for (const idx of fg.discretePr) fgParts.push(`<x v=\"${idx}\"/>`);\n fgParts.push(\"</discretePr>\");\n }\n if (fg.groupItems && fg.groupItems.length > 0) {\n fgParts.push(`<groupItems count=\"${fg.groupItems.length}\">`);\n for (const gi of fg.groupItems) fgParts.push(`<s v=\"${escapeXml(gi)}\"/>`);\n fgParts.push(\"</groupItems>\");\n }\n fgParts.push(\"</fieldGroup>\");\n p.push(fgParts.join(\"\"));\n }\n\n p.push(\"</cacheField>\");\n }\n }\n p.push(\"</cacheFields>\");\n\n // mpMap\n if (cacheDefOpts?.mpMaps) {\n for (const mp of cacheDefOpts.mpMaps) p.push(`<mpMap x=\"${mp.x}\"/>`);\n }\n\n // olapPr\n if (cacheDefOpts?.olapPr) {\n const ol = cacheDefOpts.olapPr;\n const olAttrs: string[] = [];\n if (ol.local) olAttrs.push(` local=\"${escapeXml(ol.local)}\"`);\n if (ol.localConnection) olAttrs.push(` localConnection=\"${escapeXml(ol.localConnection)}\"`);\n if (ol.sendLocale) olAttrs.push(' sendLocale=\"1\"');\n if (ol.rowDrillCount !== undefined) olAttrs.push(` rowDrillCount=\"${ol.rowDrillCount}\"`);\n if (ol.colDrillCount !== undefined) olAttrs.push(` colDrillCount=\"${ol.colDrillCount}\"`);\n if (ol.localRefresh) olAttrs.push(' localRefresh=\"1\"');\n if (ol.serverFill === false) olAttrs.push(' serverFill=\"0\"');\n if (ol.serverNumberFormat === false) olAttrs.push(' serverNumberFormat=\"0\"');\n if (ol.serverFont === false) olAttrs.push(' serverFont=\"0\"');\n if (ol.serverFontColor === false) olAttrs.push(' serverFontColor=\"0\"');\n if (olAttrs.length > 0) p.push(`<olapPr${olAttrs.join(\"\")}/>`);\n }\n\n // cacheHierarchies\n if (cacheDefOpts?.cacheHierarchies && cacheDefOpts.cacheHierarchies.length > 0) {\n const chs = cacheDefOpts.cacheHierarchies;\n p.push(`<cacheHierarchies count=\"${chs.length}\">`);\n for (const ch of chs) {\n const chAttrs: string[] = [`uniqueName=\"${escapeXml(ch.uniqueName)}\"`, `count=\"${ch.count}\"`];\n if (ch.caption) chAttrs.push(`caption=\"${escapeXml(ch.caption)}\"`);\n if (ch.measure) chAttrs.push('measure=\"1\"');\n if (ch.set) chAttrs.push('set=\"1\"');\n if (ch.parentSet !== undefined) chAttrs.push(`parentSet=\"${ch.parentSet}\"`);\n if (ch.iconSet !== undefined && ch.iconSet !== 0) chAttrs.push(`iconSet=\"${ch.iconSet}\"`);\n if (ch.attribute) chAttrs.push('attribute=\"1\"');\n if (ch.time) chAttrs.push('time=\"1\"');\n if (ch.keyAttribute) chAttrs.push('keyAttribute=\"1\"');\n if (ch.defaultMemberUniqueName)\n chAttrs.push(`defaultMemberUniqueName=\"${escapeXml(ch.defaultMemberUniqueName)}\"`);\n if (ch.allUniqueName) chAttrs.push(`allUniqueName=\"${escapeXml(ch.allUniqueName)}\"`);\n if (ch.allCaption) chAttrs.push(`allCaption=\"${escapeXml(ch.allCaption)}\"`);\n if (ch.dimensionUniqueName)\n chAttrs.push(`dimensionUniqueName=\"${escapeXml(ch.dimensionUniqueName)}\"`);\n if (ch.displayFolder) chAttrs.push(`displayFolder=\"${escapeXml(ch.displayFolder)}\"`);\n if (ch.measureGroup) chAttrs.push(`measureGroup=\"${escapeXml(ch.measureGroup)}\"`);\n if (ch.measures) chAttrs.push('measures=\"1\"');\n if (ch.oneField) chAttrs.push('oneField=\"1\"');\n if (ch.hidden) chAttrs.push('hidden=\"1\"');\n if (ch.memberValueDatatype) chAttrs.push(`memberValueDatatype=\"${ch.memberValueDatatype}\"`);\n if (ch.unbalanced) chAttrs.push('unbalanced=\"1\"');\n if (ch.unbalancedGroup) chAttrs.push('unbalancedGroup=\"1\"');\n\n const hasGL = ch.groupLevels && ch.groupLevels.length > 0;\n const hasFU = ch.fieldsUsage && ch.fieldsUsage.length > 0;\n if (hasGL || hasFU) {\n p.push(`<cacheHierarchy ${chAttrs.join(\" \")}>`);\n if (hasFU) {\n const fuParts = [`<fieldsUsage count=\"${ch.fieldsUsage!.length}\">`];\n for (const fu of ch.fieldsUsage!) fuParts.push(`<fieldUsage v=\"${fu.value}\"/>`);\n fuParts.push(\"</fieldsUsage>\");\n p.push(fuParts.join(\"\"));\n }\n if (hasGL) {\n const glParts = [`<groupLevels count=\"${ch.groupLevels!.length}\">`];\n for (const gl of ch.groupLevels!) {\n const glAttrs = [\n `uniqueName=\"${escapeXml(gl.uniqueName)}\"`,\n `caption=\"${escapeXml(gl.caption)}\"`,\n ];\n if (gl.user) glAttrs.push('user=\"1\"');\n if (gl.customRollUp) glAttrs.push('customRollUp=\"1\"');\n if (gl.groups && gl.groups.length > 0) {\n glParts.push(`<groupLevel ${glAttrs.join(\" \")}><groups count=\"${gl.groups.length}\">`);\n for (const lg of gl.groups) {\n const lgAttrs = [\n `name=\"${escapeXml(lg.name)}\"`,\n `uniqueName=\"${escapeXml(lg.uniqueName)}\"`,\n `caption=\"${escapeXml(lg.caption)}\"`,\n ];\n if (lg.uniqueParent) lgAttrs.push(`uniqueParent=\"${escapeXml(lg.uniqueParent)}\"`);\n if (lg.id !== undefined) lgAttrs.push(`id=\"${lg.id}\"`);\n glParts.push(\n `<group ${lgAttrs.join(\" \")}><groupMembers count=\"${lg.members.length}\">`,\n );\n for (const gm of lg.members) {\n const gmAttrs = [`uniqueName=\"${escapeXml(gm.uniqueName)}\"`];\n if (gm.group) gmAttrs.push('group=\"1\"');\n glParts.push(`<groupMember ${gmAttrs.join(\" \")}/>`);\n }\n glParts.push(\"</groupMembers></group>\");\n }\n glParts.push(\"</groups></groupLevel>\");\n } else {\n glParts.push(`<groupLevel ${glAttrs.join(\" \")}/>`);\n }\n }\n glParts.push(\"</groupLevels>\");\n p.push(glParts.join(\"\"));\n }\n p.push(\"</cacheHierarchy>\");\n } else {\n p.push(`<cacheHierarchy ${chAttrs.join(\" \")}/>`);\n }\n }\n p.push(\"</cacheHierarchies>\");\n }\n\n // kpis\n if (cacheDefOpts?.kpis && cacheDefOpts.kpis.length > 0) {\n p.push(`<kpis count=\"${cacheDefOpts.kpis.length}\">`);\n for (const k of cacheDefOpts.kpis) {\n const kAttrs: string[] = [\n `uniqueName=\"${escapeXml(k.uniqueName)}\"`,\n `value=\"${escapeXml(k.value)}\"`,\n ];\n if (k.caption) kAttrs.push(`caption=\"${escapeXml(k.caption)}\"`);\n if (k.displayFolder) kAttrs.push(`displayFolder=\"${escapeXml(k.displayFolder)}\"`);\n if (k.measureGroup) kAttrs.push(`measureGroup=\"${escapeXml(k.measureGroup)}\"`);\n if (k.parent) kAttrs.push(`parent=\"${escapeXml(k.parent)}\"`);\n if (k.goal) kAttrs.push(`goal=\"${escapeXml(k.goal)}\"`);\n if (k.status) kAttrs.push(`status=\"${escapeXml(k.status)}\"`);\n if (k.trend) kAttrs.push(`trend=\"${escapeXml(k.trend)}\"`);\n if (k.weight) kAttrs.push(`weight=\"${escapeXml(k.weight)}\"`);\n if (k.time) kAttrs.push(`time=\"${escapeXml(k.time)}\"`);\n p.push(`<kpi ${kAttrs.join(\" \")}/>`);\n }\n p.push(\"</kpis>\");\n }\n\n // measureGroups\n if (cacheDefOpts?.measureGroups && cacheDefOpts.measureGroups.length > 0) {\n p.push(`<measureGroups count=\"${cacheDefOpts.measureGroups.length}\">`);\n for (const mg of cacheDefOpts.measureGroups) {\n p.push(`<measureGroup name=\"${escapeXml(mg.name)}\" caption=\"${escapeXml(mg.caption)}\"/>`);\n }\n p.push(\"</measureGroups>\");\n }\n\n // maps\n if (cacheDefOpts?.measureDimensionMaps && cacheDefOpts.measureDimensionMaps.length > 0) {\n p.push(`<maps count=\"${cacheDefOpts.measureDimensionMaps.length}\">`);\n for (const m of cacheDefOpts.measureDimensionMaps) {\n const mAttrs: string[] = [];\n if (m.measureGroup !== undefined) mAttrs.push(`measureGroup=\"${m.measureGroup}\"`);\n if (m.dimension !== undefined) mAttrs.push(`dimension=\"${m.dimension}\"`);\n p.push(`<map ${mAttrs.join(\" \")}/>`);\n }\n p.push(\"</maps>\");\n }\n\n // dimensions\n if (cacheDefOpts?.dimensions && cacheDefOpts.dimensions.length > 0) {\n p.push(`<dimensions count=\"${cacheDefOpts.dimensions.length}\">`);\n for (const d of cacheDefOpts.dimensions) {\n const dAttrs: string[] = [\n `name=\"${escapeXml(d.name)}\"`,\n `uniqueName=\"${escapeXml(d.uniqueName)}\"`,\n `caption=\"${escapeXml(d.caption)}\"`,\n ];\n if (d.measure) dAttrs.push('measure=\"1\"');\n p.push(`<dimension ${dAttrs.join(\" \")}/>`);\n }\n p.push(\"</dimensions>\");\n }\n\n // tupleCache\n const cd = cacheDefOpts;\n const hasEntries = cd?.entries && cd.entries.length > 0;\n const hasSets = cd?.sets && cd.sets.length > 0;\n const hasSF = cd?.serverFormats && cd.serverFormats.length > 0;\n const hasQC = cd?.queryCache && cd.queryCache.length > 0;\n if (hasEntries || hasSets || hasSF || hasQC) {\n p.push(\"<tupleCache>\");\n if (hasEntries) {\n const entParts: string[] = [`<entries count=\"${cd!.entries!.length}\">`];\n for (const ent of cd!.entries!) {\n if (ent.type === \"m\") entParts.push(\"<m/>\");\n else if (ent.value !== undefined) entParts.push(`<${ent.type} v=\"${ent.value}\"/>`);\n }\n entParts.push(\"</entries>\");\n p.push(entParts.join(\"\"));\n }\n if (hasSets) {\n p.push(`<sets count=\"${cd!.sets!.length}\">`);\n for (const s of cd!.sets!) {\n const sAttrs: string[] = [\n `maxRank=\"${s.maxRank}\"`,\n `setDefinition=\"${escapeXml(s.setDefinition)}\"`,\n ];\n if (s.count !== undefined) sAttrs.push(`count=\"${s.count}\"`);\n if (s.sortType && s.sortType !== \"none\") sAttrs.push(`sortType=\"${s.sortType}\"`);\n if (s.queryFailed) sAttrs.push('queryFailed=\"1\"');\n p.push(`<set ${sAttrs.join(\" \")}/>`);\n }\n p.push(\"</sets>\");\n }\n if (hasSF) {\n p.push(`<serverFormats count=\"${cd!.serverFormats!.length}\">`);\n for (const sf of cd!.serverFormats!) {\n const sfAttrs: string[] = [];\n if (sf.culture) sfAttrs.push(`culture=\"${escapeXml(sf.culture)}\"`);\n if (sf.format) sfAttrs.push(`format=\"${escapeXml(sf.format)}\"`);\n p.push(`<serverFormat ${sfAttrs.join(\" \")}/>`);\n }\n p.push(\"</serverFormats>\");\n }\n if (hasQC) {\n p.push(`<queryCache count=\"${cd!.queryCache!.length}\">`);\n for (const q of cd!.queryCache!) {\n const qInner =\n q.tpls && q.tpls.length > 0\n ? `<tpls count=\"${q.tpls.length}\">${q.tpls.map((tpl: { items?: number[] }) => (tpl.items && tpl.items.length > 0 ? `<tpl>${tpl.items.map((x: number) => `<x v=\"${x}\"/>`).join(\"\")}</tpl>` : \"<tpl/>\")).join(\"\")}</tpls>`\n : \"\";\n if (qInner) p.push(`<query mdx=\"${escapeXml(q.mdx)}\">${qInner}</query>`);\n else p.push(`<query mdx=\"${escapeXml(q.mdx)}\"/>`);\n }\n p.push(\"</queryCache>\");\n }\n p.push(\"</tupleCache>\");\n }\n\n p.push(\"</pivotCacheDefinition>\");\n return p.join(\"\");\n}\n\n// ── Stringify: pivotCacheRecords ──\n\nfunction stringifyPivotCacheRecords(sourceData: PivotSourceData): string {\n const numericFields = sourceData.fieldNames.map((_, i) => isNumericField(sourceData.records, i));\n const fieldIndexMaps: Map<string, number>[] = sourceData.fieldNames.map((_, i) => {\n if (numericFields[i]) return new Map<string, number>();\n const unique = collectUniqueValues(sourceData.records, i);\n const map = new Map<string, number>();\n for (let j = 0; j < unique.length; j++) map.set(String(unique[j]), j);\n return map;\n });\n\n const p: string[] = [];\n p.push(\n `<pivotCacheRecords xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"${sourceData.records.length}\">`,\n );\n\n for (const row of sourceData.records) {\n p.push(\"<r>\");\n for (let i = 0; i < row.length; i++) {\n const val = row[i];\n if (val === null) {\n p.push(\"<m/>\");\n } else if (val instanceof Date) {\n p.push(`<d v=\"${val.toISOString().replace(/\\.\\d{3}Z$/, \"Z\")}\"/>`);\n } else if (numericFields[i]) {\n p.push(`<n v=\"${val}\"/>`);\n } else {\n p.push(`<x v=\"${fieldIndexMaps[i].get(String(val)) ?? 0}\"/>`);\n }\n }\n p.push(\"</r>\");\n }\n\n p.push(\"</pivotCacheRecords>\");\n return p.join(\"\");\n}\n","/**\n * Table types and descriptor for SpreadsheetML documents.\n *\n * Implements CT_Table from sml.xsd (transitional schema).\n *\n * @module\n */\n\nimport type { CustomDescriptor } from \"@office-open/core/descriptor\";\nimport { findChild, attr, attrNum, textOf, escapeXml } from \"@office-open/xml\";\n\n// ── Totals row function (ST_TotalsRowFunction) ──\n\nexport const TotalsRowFunction = {\n NONE: \"none\",\n SUM: \"sum\",\n MIN: \"min\",\n MAX: \"max\",\n AVERAGE: \"average\",\n COUNT: \"count\",\n COUNT_NUMS: \"countNums\",\n STD_DEV: \"stdDev\",\n VAR: \"var\",\n CUSTOM: \"custom\",\n} as const;\n\nexport type TotalsRowFunction = (typeof TotalsRowFunction)[keyof typeof TotalsRowFunction];\n\n// ── Table type (ST_TableType) ──\n\nexport const TableType = {\n WORKSHEET: \"worksheet\",\n XML: \"xml\",\n QUERY_TABLE: \"queryTable\",\n} as const;\n\nexport type TableType = (typeof TableType)[keyof typeof TableType];\n\n// ── Options interfaces ──\n\nexport interface TableStyleInfoOptions {\n /** Table style name, e.g. \"TableStyleMedium9\" */\n name?: string;\n showFirstColumn?: boolean;\n showLastColumn?: boolean;\n showRowStripes?: boolean;\n showColumnStripes?: boolean;\n}\n\nexport interface TableColumnOptions {\n /** Column name (used in header row) */\n name: string;\n /** Totals row function */\n totalsRowFunction?: TotalsRowFunction;\n /** Totals row label (used when totalsRowFunction is \"none\" or \"custom\") */\n totalsRowLabel?: string;\n /** Calculated column formula */\n calculatedColumnFormula?: string;\n /** Totals row formula (CT_TableColumn/totalsRowFormula, used when totalsRowFunction is \"custom\") */\n totalsRowFormula?: string;\n /** Whether totals row formula is array (CT_TableFormula @array) */\n totalsRowFormulaArray?: boolean;\n /** Whether calculated column formula is array (CT_TableFormula @array) */\n calculatedColumnFormulaArray?: boolean;\n /** Unique column name for structured references (CT_TableColumn @uniqueName) */\n uniqueName?: string;\n /** Query table field ID (CT_TableColumn @queryTableFieldId) */\n queryTableFieldId?: number;\n /** Header row differential format index */\n headerRowDxfId?: number;\n /** Data differential format index */\n dataDxfId?: number;\n /** Totals row differential format index */\n totalsRowDxfId?: number;\n /** Header row cell style name */\n headerRowCellStyle?: string;\n /** Data cell style name */\n dataCellStyle?: string;\n /** Totals row cell style name */\n totalsRowCellStyle?: string;\n}\n\nexport interface TableOptions {\n /** Unique table id (1-based, must be unique across the workbook) */\n id: number;\n /** Table name (used in structured references) */\n name?: string;\n /** Display name (required by XSD, defaults to name if not set) */\n displayName: string;\n /** Data range, e.g. \"A1:D10\" */\n ref: string;\n /** Column definitions */\n columns: TableColumnOptions[];\n /** Number of header rows (default: 1) */\n headerRowCount?: number;\n /** Number of totals rows (default: 0) */\n totalsRowCount?: number;\n /** Whether to show totals row (default: true when totalsRowCount > 0) */\n totalsRowShown?: boolean;\n /** Table type (default: \"worksheet\") */\n tableType?: TableType;\n /** Table style */\n style?: TableStyleInfoOptions;\n /** Auto-filter reference (defaults to ref) */\n autoFilter?: string;\n /** Insert row shifts existing rows (CT_Table @insertRowShift) */\n insertRowShift?: boolean;\n /** Published to server (CT_Table @published) */\n published?: boolean;\n /** Header row differential format index */\n headerRowDxfId?: number;\n /** Data differential format index */\n dataDxfId?: number;\n /** Totals row differential format index */\n totalsRowDxfId?: number;\n /** Header row border differential format index */\n headerRowBorderDxfId?: number;\n /** Table border differential format index */\n tableBorderDxfId?: number;\n /** Totals row border differential format index */\n totalsRowBorderDxfId?: number;\n /** Header row cell style name */\n headerRowCellStyle?: string;\n /** Data cell style name */\n dataCellStyle?: string;\n /** Totals row cell style name */\n totalsRowCellStyle?: string;\n}\n\n// ── Helper ──\n\nfunction buildAttrs(attrsMap: Record<string, string | number | boolean | undefined>): string {\n const parts: string[] = [];\n for (const [k, v] of Object.entries(attrsMap)) {\n if (v === undefined) continue;\n parts.push(` ${k}=\"${typeof v === \"string\" ? escapeXml(v) : String(v)}\"`);\n }\n return parts.join(\"\");\n}\n\n// ── Descriptor ──\n\nexport const tableDesc: CustomDescriptor<TableOptions> = {\n kind: \"custom\",\n\n stringify(o, _ctx) {\n const p: string[] = [];\n\n // Root element with attributes\n const rootAttrs: Record<string, string | number | boolean | undefined> = {\n id: o.id,\n name: o.name ?? o.displayName,\n displayName: o.displayName,\n ref: o.ref,\n };\n if (o.tableType && o.tableType !== \"worksheet\") {\n rootAttrs.tableType = o.tableType;\n }\n if (o.headerRowCount !== undefined && o.headerRowCount !== 1) {\n rootAttrs.headerRowCount = o.headerRowCount;\n }\n if (o.totalsRowCount !== undefined && o.totalsRowCount > 0) {\n rootAttrs.totalsRowCount = o.totalsRowCount;\n }\n if (o.totalsRowShown === false) {\n rootAttrs.totalsRowShown = 0;\n }\n if (o.insertRowShift) rootAttrs.insertRowShift = 1;\n if (o.published) rootAttrs.published = 1;\n if (o.headerRowDxfId !== undefined) rootAttrs.headerRowDxfId = o.headerRowDxfId;\n if (o.dataDxfId !== undefined) rootAttrs.dataDxfId = o.dataDxfId;\n if (o.totalsRowDxfId !== undefined) rootAttrs.totalsRowDxfId = o.totalsRowDxfId;\n if (o.headerRowBorderDxfId !== undefined)\n rootAttrs.headerRowBorderDxfId = o.headerRowBorderDxfId;\n if (o.tableBorderDxfId !== undefined) rootAttrs.tableBorderDxfId = o.tableBorderDxfId;\n if (o.totalsRowBorderDxfId !== undefined)\n rootAttrs.totalsRowBorderDxfId = o.totalsRowBorderDxfId;\n if (o.headerRowCellStyle) rootAttrs.headerRowCellStyle = o.headerRowCellStyle;\n if (o.dataCellStyle) rootAttrs.dataCellStyle = o.dataCellStyle;\n if (o.totalsRowCellStyle) rootAttrs.totalsRowCellStyle = o.totalsRowCellStyle;\n\n p.push(\n `<table xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"` +\n ` xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"` +\n ` mc:Ignorable=\"xr xr2\"` +\n ` xmlns:xr=\"http://schemas.microsoft.com/office/spreadsheetml/2014/revision\"` +\n ` xmlns:xr2=\"http://schemas.microsoft.com/office/spreadsheetml/2015/revision2\"${buildAttrs(rootAttrs)}>`,\n );\n\n // autoFilter (optional, before tableColumns per XSD sequence)\n if (o.autoFilter !== undefined) {\n p.push(`<autoFilter ref=\"${escapeXml(o.autoFilter)}\"/>`);\n }\n\n // tableColumns (required)\n p.push(`<tableColumns count=\"${o.columns.length}\">`);\n for (let i = 0; i < o.columns.length; i++) {\n const col = o.columns[i];\n const colAttrs: Record<string, string | number | boolean | undefined> = {\n id: i + 1,\n name: col.name,\n };\n\n const inner: string[] = [];\n\n // calculatedColumnFormula\n if (col.calculatedColumnFormula !== undefined) {\n const fAttrs = col.calculatedColumnFormulaArray ? ' array=\"1\"' : \"\";\n inner.push(\n `<calculatedColumnFormula${fAttrs}>${escapeXml(col.calculatedColumnFormula)}</calculatedColumnFormula>`,\n );\n }\n\n // totalsRowFormula (when totalsRowFunction is \"custom\")\n if (col.totalsRowFormula !== undefined) {\n const fAttrs = col.totalsRowFormulaArray ? ' array=\"1\"' : \"\";\n inner.push(\n `<totalsRowFormula${fAttrs}>${escapeXml(col.totalsRowFormula)}</totalsRowFormula>`,\n );\n }\n\n if (col.totalsRowFunction !== undefined && col.totalsRowFunction !== TotalsRowFunction.NONE) {\n colAttrs.totalsRowFunction = col.totalsRowFunction;\n }\n if (col.totalsRowLabel !== undefined) {\n colAttrs.totalsRowLabel = col.totalsRowLabel;\n }\n if (col.uniqueName) colAttrs.uniqueName = col.uniqueName;\n if (col.queryTableFieldId !== undefined) colAttrs.queryTableFieldId = col.queryTableFieldId;\n if (col.headerRowDxfId !== undefined) colAttrs.headerRowDxfId = col.headerRowDxfId;\n if (col.dataDxfId !== undefined) colAttrs.dataDxfId = col.dataDxfId;\n if (col.totalsRowDxfId !== undefined) colAttrs.totalsRowDxfId = col.totalsRowDxfId;\n if (col.headerRowCellStyle) colAttrs.headerRowCellStyle = col.headerRowCellStyle;\n if (col.dataCellStyle) colAttrs.dataCellStyle = col.dataCellStyle;\n if (col.totalsRowCellStyle) colAttrs.totalsRowCellStyle = col.totalsRowCellStyle;\n\n if (inner.length > 0) {\n p.push(`<tableColumn${buildAttrs(colAttrs)}>${inner.join(\"\")}</tableColumn>`);\n } else {\n p.push(`<tableColumn${buildAttrs(colAttrs)}/>`);\n }\n }\n p.push(\"</tableColumns>\");\n\n // tableStyleInfo (optional)\n if (o.style) {\n const s = o.style;\n const styleAttrs: Record<string, string | number | boolean | undefined> = {};\n if (s.name !== undefined) styleAttrs.name = s.name;\n if (s.showFirstColumn) styleAttrs.showFirstColumn = 1;\n if (s.showLastColumn) styleAttrs.showLastColumn = 1;\n if (s.showRowStripes !== false) styleAttrs.showRowStripes = 1;\n if (s.showColumnStripes) styleAttrs.showColumnStripes = 1;\n p.push(`<tableStyleInfo${buildAttrs(styleAttrs)}/>`);\n } else {\n // Default style\n p.push(\n '<tableStyleInfo name=\"TableStyleMedium9\" showFirstColumn=\"0\" showLastColumn=\"0\" showRowStripes=\"1\" showColumnStripes=\"0\"/>',\n );\n }\n\n p.push(\"</table>\");\n return p.join(\"\");\n },\n\n parse(el, _ctx) {\n const result: Record<string, unknown> = {};\n\n // Root attributes\n const id = attrNum(el, \"id\");\n if (id !== undefined) result.id = id;\n if (attr(el, \"name\")) result.name = attr(el, \"name\");\n if (attr(el, \"displayName\")) result.displayName = attr(el, \"displayName\");\n if (attr(el, \"ref\")) result.ref = attr(el, \"ref\");\n const headerRowCount = attrNum(el, \"headerRowCount\");\n if (headerRowCount !== undefined) result.headerRowCount = headerRowCount;\n const totalsRowCount = attrNum(el, \"totalsRowCount\");\n if (totalsRowCount !== undefined) result.totalsRowCount = totalsRowCount;\n if (attr(el, \"totalsRowShown\") === \"0\") result.totalsRowShown = false;\n if (attr(el, \"tableType\")) result.tableType = attr(el, \"tableType\");\n if (attr(el, \"insertRowShift\") === \"1\") result.insertRowShift = true;\n if (attr(el, \"published\") === \"1\") result.published = true;\n\n // Auto filter\n const afEl = findChild(el, \"autoFilter\");\n if (afEl) result.autoFilter = attr(afEl, \"ref\") ?? \"\";\n\n // Table columns\n const colsEl = findChild(el, \"tableColumns\");\n if (colsEl) {\n const columns: Record<string, unknown>[] = [];\n for (const colEl of colsEl.elements ?? []) {\n if (colEl.name !== \"tableColumn\") continue;\n const col: Record<string, unknown> = {};\n const colId = attrNum(colEl, \"id\");\n if (colId !== undefined) col.id = colId;\n col.name = attr(colEl, \"name\") ?? \"\";\n if (attr(colEl, \"totalsRowFunction\"))\n col.totalsRowFunction = attr(colEl, \"totalsRowFunction\");\n if (attr(colEl, \"totalsRowLabel\")) col.totalsRowLabel = attr(colEl, \"totalsRowLabel\");\n const trfEl = findChild(colEl, \"calculatedColumnFormula\");\n if (trfEl) col.calculatedColumnFormula = textOf(trfEl);\n if (attr(colEl, \"uniqueName\")) col.uniqueName = attr(colEl, \"uniqueName\");\n const qtfId = attrNum(colEl, \"queryTableFieldId\");\n if (qtfId !== undefined) col.queryTableFieldId = qtfId;\n const hrDxfId = attrNum(colEl, \"headerRowDxfId\");\n if (hrDxfId !== undefined) col.headerRowDxfId = hrDxfId;\n const dDxfId = attrNum(colEl, \"dataDxfId\");\n if (dDxfId !== undefined) col.dataDxfId = dDxfId;\n const trDxfId = attrNum(colEl, \"totalsRowDxfId\");\n if (trDxfId !== undefined) col.totalsRowDxfId = trDxfId;\n if (attr(colEl, \"headerRowCellStyle\"))\n col.headerRowCellStyle = attr(colEl, \"headerRowCellStyle\");\n if (attr(colEl, \"dataCellStyle\")) col.dataCellStyle = attr(colEl, \"dataCellStyle\");\n if (attr(colEl, \"totalsRowCellStyle\"))\n col.totalsRowCellStyle = attr(colEl, \"totalsRowCellStyle\");\n columns.push(col);\n }\n result.columns = columns;\n }\n\n // Table style info\n const siEl = findChild(el, \"tableStyleInfo\");\n if (siEl) {\n const style: Record<string, unknown> = {};\n if (attr(siEl, \"name\")) style.name = attr(siEl, \"name\");\n if (attr(siEl, \"showFirstColumn\") === \"1\") style.showFirstColumn = true;\n if (attr(siEl, \"showLastColumn\") === \"1\") style.showLastColumn = true;\n if (attr(siEl, \"showRowStripes\") === \"1\") style.showRowStripes = true;\n if (attr(siEl, \"showColumnStripes\") === \"1\") style.showColumnStripes = true;\n result.style = style;\n }\n\n // Differential format IDs\n const hrDxfId = attrNum(el, \"headerRowDxfId\");\n if (hrDxfId !== undefined) result.headerRowDxfId = hrDxfId;\n const dDxfId = attrNum(el, \"dataDxfId\");\n if (dDxfId !== undefined) result.dataDxfId = dDxfId;\n const trDxfId = attrNum(el, \"totalsRowDxfId\");\n if (trDxfId !== undefined) result.totalsRowDxfId = trDxfId;\n const hrbDxfId = attrNum(el, \"headerRowBorderDxfId\");\n if (hrbDxfId !== undefined) result.headerRowBorderDxfId = hrbDxfId;\n const tbDxfId = attrNum(el, \"tableBorderDxfId\");\n if (tbDxfId !== undefined) result.tableBorderDxfId = tbDxfId;\n const trbDxfId = attrNum(el, \"totalsRowBorderDxfId\");\n if (trbDxfId !== undefined) result.totalsRowBorderDxfId = trbDxfId;\n if (attr(el, \"headerRowCellStyle\")) result.headerRowCellStyle = attr(el, \"headerRowCellStyle\");\n if (attr(el, \"dataCellStyle\")) result.dataCellStyle = attr(el, \"dataCellStyle\");\n if (attr(el, \"totalsRowCellStyle\")) result.totalsRowCellStyle = attr(el, \"totalsRowCellStyle\");\n\n return result as Record<string, unknown>;\n },\n};\n","/**\n * Workbook types and descriptor for SpreadsheetML documents.\n *\n * @module\n */\n\nimport { derivePasswordHash } from \"@office-open/core\";\nimport type { CustomDescriptor } from \"@office-open/core/descriptor\";\nimport { findChild, attr, attrNum, escapeXml } from \"@office-open/xml\";\n\nexport interface SheetDefinition {\n name: string;\n sheetId: number;\n rId: string;\n state?: \"visible\" | \"hidden\" | \"veryHidden\";\n}\n\nexport interface PivotCacheReference {\n cacheId: number;\n rId: string;\n}\n\nexport interface TablePartReference {\n rId: string;\n}\n\n/** Custom workbook view for storing display preferences. */\nexport interface CustomWorkbookViewOptions {\n /** View name */\n name: string;\n /** GUID (e.g. \"{00000000-0000-0000-0000-000000000000}\") */\n guid: string;\n /** Window width in twips */\n windowWidth: number;\n /** Window height in twips */\n windowHeight: number;\n /** Active sheet ID (1-based sheetId) */\n activeSheetId: number;\n /** X position of the window */\n xWindow?: number;\n /** Y position of the window */\n yWindow?: number;\n /** Show formula bar (default true) */\n showFormulaBar?: boolean;\n /** Show status bar (default true) */\n showStatusbar?: boolean;\n /** Show horizontal scroll (default true) */\n showHorizontalScroll?: boolean;\n /** Show vertical scroll (default true) */\n showVerticalScroll?: boolean;\n /** Show sheet tabs (default true) */\n showSheetTabs?: boolean;\n /** Tab ratio (default 600) */\n tabRatio?: number;\n /** Include hidden rows/columns (default true) */\n includeHiddenRowCol?: boolean;\n /** Include print settings (default true) */\n includePrintSettings?: boolean;\n /** Personal view (default false) */\n personalView?: boolean;\n /** Maximized (default false) */\n maximized?: boolean;\n /** Minimized (default false) */\n minimized?: boolean;\n /** Auto update (CT_CustomWorkbookView @autoUpdate) */\n autoUpdate?: boolean;\n /** Merge interval (CT_CustomWorkbookView @mergeInterval) */\n mergeInterval?: number;\n /** Changes saved in window (CT_CustomWorkbookView @changesSavedWin) */\n changesSavedWin?: boolean;\n /** Only sync (CT_CustomWorkbookView @onlySync) */\n onlySync?: boolean;\n /** Show comments (CT_CustomWorkbookView @showComments) */\n showComments?: string;\n}\n\nexport interface WorkbookProtectionOptions {\n /** Lock workbook structure (add/delete/rename/move sheets) */\n lockStructure?: boolean;\n /** Lock workbook windows */\n lockWindows?: boolean;\n /** Lock revisions */\n lockRevision?: boolean;\n /** Plain-text password — legacy Excel hash computed automatically */\n workbookPassword?: string;\n /** Modern encryption: algorithm name (e.g. \"SHA-512\") */\n workbookAlgorithmName?: string;\n /** Modern encryption: base64-encoded hash value */\n workbookHashValue?: string;\n /** Modern encryption: base64-encoded salt value */\n workbookSaltValue?: string;\n /** Modern encryption: spin count */\n workbookSpinCount?: number;\n /** Revisions password (legacy) */\n revisionsPassword?: string;\n /** Revisions modern encryption: algorithm name */\n revisionsAlgorithmName?: string;\n /** Revisions modern encryption: base64-encoded hash value */\n revisionsHashValue?: string;\n /** Revisions modern encryption: base64-encoded salt value */\n revisionsSaltValue?: string;\n /** Revisions modern encryption: spin count */\n revisionsSpinCount?: number;\n /** Workbook password character set (CT_WorkbookProtection @workbookPasswordCharacterSet) */\n workbookPasswordCharacterSet?: string;\n /** Revisions password character set (CT_WorkbookProtection @revisionsPasswordCharacterSet) */\n revisionsPasswordCharacterSet?: string;\n}\n\n/** Workbook conformance level (CT_Workbook @conformance) */\nexport type WorkbookConformance = \"strict\" | \"transitional\";\n\n/** File recovery properties (CT_FileRecoveryPr) */\nexport interface FileRecoveryPrOptions {\n /** Enable auto-recover (default true) */\n autoRecover?: boolean;\n /** Crash save (default false) */\n crashSave?: boolean;\n /** Data extract load (default false) */\n dataExtractLoad?: boolean;\n /** Repair load (default false) */\n repairLoad?: boolean;\n}\n\n/** Web publishing properties (CT_WebPublishing) */\nexport interface WebPublishingOptions {\n /** Use CSS (default true) */\n css?: boolean;\n /** Use thicket format (default true) */\n thicket?: boolean;\n /** Use long file names (default true) */\n longFileNames?: boolean;\n /** Use VML (default false) */\n vml?: boolean;\n /** Allow PNG (default false) */\n allowPng?: boolean;\n /** Target screen size (default \"800x600\") */\n targetScreenSize?: string;\n /** DPI (default 96) */\n dpi?: number;\n /** Code page */\n codePage?: number;\n /** Character set */\n characterSet?: string;\n}\n\n/** File sharing properties (CT_FileSharing) */\nexport interface FileSharingOptions {\n /** Recommend read-only mode (default false) */\n readOnlyRecommended?: boolean;\n /** User name who has the file locked */\n userName?: string;\n /** Legacy reservation password (hex) */\n reservationPassword?: string;\n /** Modern encryption: algorithm name */\n algorithmName?: string;\n /** Modern encryption: base64 hash value */\n hashValue?: string;\n /** Modern encryption: base64 salt value */\n saltValue?: string;\n /** Modern encryption: spin count */\n spinCount?: number;\n}\n\n/** Workbook properties (CT_WorkbookPr) */\nexport interface WorkbookPrOptions {\n /** Use 1904 date system (default false) */\n date1904?: boolean;\n /** Default theme version */\n defaultThemeVersion?: number;\n /** Show objects: \"all\" | \"placeholders\" | \"none\" */\n showObjects?: string;\n /** Hide pivot field list (default false) */\n hidePivotFieldList?: boolean;\n /** Allow refresh queries (default false) */\n allowRefreshQuery?: boolean;\n /** Filter privacy (default false) */\n filterPrivacy?: boolean;\n /** Backup file (default false) */\n backupFile?: boolean;\n /** Code name */\n codeName?: string;\n /** Show border unselected tables (CT_WorkbookPr @showBorderUnselectedTables) */\n showBorderUnselectedTables?: boolean;\n /** Prompted solutions (CT_WorkbookPr @promptedSolutions) */\n promptedSolutions?: boolean;\n /** Show ink annotation (CT_WorkbookPr @showInkAnnotation) */\n showInkAnnotation?: boolean;\n /** Save external link values (CT_WorkbookPr @saveExternalLinkValues) */\n saveExternalLinkValues?: boolean;\n /** Update links mode (CT_WorkbookPr @updateLinks) */\n updateLinks?: string;\n /** Show pivot chart filter (CT_WorkbookPr @showPivotChartFilter) */\n showPivotChartFilter?: boolean;\n /** Publish items (CT_WorkbookPr @publishItems) */\n publishItems?: boolean;\n /** Check compatibility (CT_WorkbookPr @checkCompatibility) */\n checkCompatibility?: boolean;\n /** Auto compress pictures (CT_WorkbookPr @autoCompressPictures) */\n autoCompressPictures?: boolean;\n /** Refresh all connections (CT_WorkbookPr @refreshAllConnections) */\n refreshAllConnections?: boolean;\n}\n\n/** Volatile type entry (CT_VolType) */\nexport interface VolTypeOptions {\n /** Type of volatile dependency (default: \"realTimeData\") */\n type?: \"realTimeData\" | \"olapFunctions\";\n /** Main volatile dependencies (CT_VolMain, required) */\n mains?: VolMainOptions[];\n}\n\n/** Main volatile dependency (CT_VolMain) */\nexport interface VolMainOptions {\n /** First reference (required) */\n first: string;\n /** Volatile topics (CT_VolTopic) */\n topics?: VolTopicOptions[];\n}\n\n/** Volatile topic (CT_VolTopic) */\nexport interface VolTopicOptions {\n /** Topic value (required) */\n value: string;\n /** Value type (default: \"n\") */\n valueType?: string;\n /** String topics (stp elements) */\n stringTopics?: string[];\n /** Topic references (CT_VolTopicRef) */\n refs?: VolTopicRefOptions[];\n}\n\n/** Volatile topic reference (CT_VolTopicRef) */\nexport interface VolTopicRefOptions {\n /** Cell reference (required) */\n reference: string;\n /** Sheet index (required) */\n sheetIndex: number;\n}\n\n/** Web publish object (CT_WebPublishObject) */\nexport interface WebPublishObjectOptions {\n /** Relationship ID to the published item */\n rId: string;\n /** Destination file name */\n destinationFile?: string;\n /** Auto republish (default: false) */\n autoRepublish?: boolean;\n /** Title of the published item */\n title?: string;\n /** Source object reference */\n sourceObject?: string;\n /** App name (default: \"Excel\") */\n appName?: string;\n}\n\n/** Calculation properties (CT_CalcPr) */\nexport interface CalcPrOptions {\n /** Calculation mode: \"manual\" | \"auto\" | \"autoNoTable\" */\n calcMode?: string;\n /** Calc ID (default 162913) */\n calcId?: number;\n /** Full calc on load (default false) */\n fullCalcOnLoad?: boolean;\n /** Calc on save (default true) */\n calcOnSave?: boolean;\n /** Force full calc */\n forceFullCalc?: boolean;\n /** Concurrent calc (default true) */\n concurrentCalc?: boolean;\n /** Concurrent manual count */\n concurrentManualCount?: number;\n /** Iterate (default false) */\n iterate?: boolean;\n /** Iterate count (default 100) */\n iterateCount?: number;\n /** Iterate delta (default 0.001) */\n iterateDelta?: number;\n /** Reference mode: \"A1\" | \"R1C1\" */\n refMode?: string;\n /** Full precision (default true) */\n fullPrecision?: boolean;\n /** Calc completed (CT_CalcPr @calcCompleted) */\n calcCompleted?: boolean;\n}\n\n/** Workbook view options (CT_BookView) */\nexport interface WorkbookViewOptions {\n /** Active tab index (0-based) */\n activeTab?: number;\n /** Auto filter date grouping (default true) */\n autoFilterDateGrouping?: boolean;\n /** First sheet tab */\n firstSheet?: number;\n /** Show horizontal scroll (default true) */\n showHorizontalScroll?: boolean;\n /** Show sheet tabs (default true) */\n showSheetTabs?: boolean;\n /** Show vertical scroll (default true) */\n showVerticalScroll?: boolean;\n /** Tab ratio (default 600) */\n tabRatio?: number;\n /** Window width in twips */\n windowWidth?: number;\n /** Window height in twips */\n windowHeight?: number;\n /** X position of the window */\n xWindow?: number;\n /** Y position of the window */\n yWindow?: number;\n}\n\n// ── Descriptor Types ──\n\nexport interface WorkbookDescriptorOptions {\n sheets: SheetDefinition[];\n pivotCaches?: PivotCacheReference[];\n protection?: WorkbookProtectionOptions;\n customViews?: CustomWorkbookViewOptions[];\n fileRecoveryPr?: FileRecoveryPrOptions;\n functionGroups?: string[];\n webPublishing?: WebPublishingOptions;\n fileSharing?: FileSharingOptions;\n workbookPr?: WorkbookPrOptions;\n calcPr?: CalcPrOptions;\n bookView?: WorkbookViewOptions;\n volTypes?: VolTypeOptions[];\n webPublishObjects?: WebPublishObjectOptions[];\n conformance?: WorkbookConformance;\n}\n\n// ── Descriptor ──\n\nexport const workbookDesc: CustomDescriptor<WorkbookDescriptorOptions> = {\n kind: \"custom\",\n\n stringify(opts, _ctx) {\n return stringifyWorkbook(opts);\n },\n\n parse(el, _ctx) {\n const result: Record<string, unknown> = {};\n\n // Sheets\n const sheetsEl = findChild(el, \"sheets\");\n if (sheetsEl) {\n const sheets: SheetDefinition[] = [];\n for (const s of sheetsEl.elements ?? []) {\n if (s.name !== \"sheet\") continue;\n const name = attr(s, \"name\") ?? \"\";\n const sheetId = attrNum(s, \"sheetId\") ?? 0;\n const rId = (s.attributes?.[\"r:id\"] as string | undefined) ?? \"\";\n const state = attr(s, \"state\") as SheetDefinition[\"state\"];\n sheets.push({ name, sheetId, rId, state });\n }\n result.sheets = sheets;\n }\n\n // Pivot caches\n const pivotCachesEl = findChild(el, \"pivotCaches\");\n if (pivotCachesEl) {\n const caches: PivotCacheReference[] = [];\n for (const pc of pivotCachesEl.elements ?? []) {\n if (pc.name !== \"pivotCache\") continue;\n caches.push({\n cacheId: attrNum(pc, \"cacheId\") ?? 0,\n rId: (pc.attributes?.[\"r:id\"] as string) ?? \"\",\n });\n }\n result.pivotCaches = caches;\n }\n\n // Workbook protection\n const protEl = findChild(el, \"workbookProtection\");\n if (protEl?.attributes) {\n const prot: Record<string, unknown> = {};\n if (attr(protEl, \"lockStructure\") === \"1\") prot.lockStructure = true;\n if (attr(protEl, \"lockWindows\") === \"1\") prot.lockWindows = true;\n if (attr(protEl, \"lockRevision\") === \"1\") prot.lockRevision = true;\n if (attr(protEl, \"workbookPassword\"))\n prot.workbookPassword = attr(protEl, \"workbookPassword\");\n if (attr(protEl, \"workbookAlgorithmName\"))\n prot.workbookAlgorithmName = attr(protEl, \"workbookAlgorithmName\");\n if (attr(protEl, \"workbookHashValue\"))\n prot.workbookHashValue = attr(protEl, \"workbookHashValue\");\n if (attr(protEl, \"workbookSaltValue\"))\n prot.workbookSaltValue = attr(protEl, \"workbookSaltValue\");\n if (attr(protEl, \"workbookSpinCount\"))\n prot.workbookSpinCount = attrNum(protEl, \"workbookSpinCount\");\n result.protection = prot;\n }\n\n // Book views\n const bookViewsEl = findChild(el, \"bookViews\");\n if (bookViewsEl) {\n const bvEl = findChild(bookViewsEl, \"workbookView\");\n if (bvEl?.attributes) {\n const bv: Record<string, unknown> = {};\n const xw = attrNum(bvEl, \"xWindow\");\n if (xw !== undefined) bv.xWindow = xw;\n const yw = attrNum(bvEl, \"yWindow\");\n if (yw !== undefined) bv.yWindow = yw;\n const ww = attrNum(bvEl, \"windowWidth\");\n if (ww !== undefined) bv.windowWidth = ww;\n const wh = attrNum(bvEl, \"windowHeight\");\n if (wh !== undefined) bv.windowHeight = wh;\n const at = attrNum(bvEl, \"activeTab\");\n if (at !== undefined) bv.activeTab = at;\n if (attr(bvEl, \"showHorizontalScroll\") === \"0\") bv.showHorizontalScroll = false;\n if (attr(bvEl, \"showVerticalScroll\") === \"0\") bv.showVerticalScroll = false;\n if (attr(bvEl, \"showSheetTabs\") === \"0\") bv.showSheetTabs = false;\n result.bookView = bv;\n }\n }\n\n // Calc properties\n const calcPrEl = findChild(el, \"calcPr\");\n if (calcPrEl?.attributes) {\n const calc: Record<string, unknown> = {};\n const calcId = attrNum(calcPrEl, \"calcId\");\n if (calcId !== undefined) calc.calcId = calcId;\n if (attr(calcPrEl, \"calcMode\")) calc.calcMode = attr(calcPrEl, \"calcMode\");\n if (attr(calcPrEl, \"fullCalcOnLoad\") === \"1\") calc.fullCalcOnLoad = true;\n if (attr(calcPrEl, \"concurrentCalc\") === \"0\") calc.concurrentCalc = false;\n if (attr(calcPrEl, \"refMode\")) calc.refMode = attr(calcPrEl, \"refMode\");\n result.calcPr = calc;\n }\n\n // Custom workbook views\n const customViewsEl = findChild(el, \"customWorkbookViews\");\n if (customViewsEl) {\n const views: CustomWorkbookViewOptions[] = [];\n for (const v of customViewsEl.elements ?? []) {\n if (v.name !== \"customWorkbookView\") continue;\n views.push({\n name: attr(v, \"name\") ?? \"\",\n guid: attr(v, \"guid\") ?? \"\",\n windowWidth: attrNum(v, \"windowWidth\") ?? 0,\n windowHeight: attrNum(v, \"windowHeight\") ?? 0,\n activeSheetId: attrNum(v, \"activeSheetId\") ?? 1,\n });\n }\n if (views.length > 0) result.customViews = views;\n }\n\n // File sharing\n const fileSharingEl = findChild(el, \"fileSharing\");\n if (fileSharingEl?.attributes) {\n const fs: Record<string, unknown> = {};\n if (attr(fileSharingEl, \"readOnlyRecommended\") === \"1\") fs.readOnlyRecommended = true;\n if (attr(fileSharingEl, \"userName\")) fs.userName = attr(fileSharingEl, \"userName\");\n if (attr(fileSharingEl, \"reservationPassword\"))\n fs.reservationPassword = attr(fileSharingEl, \"reservationPassword\");\n result.fileSharing = fs;\n }\n\n // Web publishing\n const webPublishingEl = findChild(el, \"webPublishing\");\n if (webPublishingEl?.attributes) {\n const wp: Record<string, unknown> = {};\n if (attr(webPublishingEl, \"css\") === \"0\") wp.css = false;\n if (attr(webPublishingEl, \"thicket\") === \"0\") wp.thicket = false;\n if (attr(webPublishingEl, \"vml\") === \"1\") wp.vml = true;\n if (attr(webPublishingEl, \"targetScreenSize\"))\n wp.targetScreenSize = attr(webPublishingEl, \"targetScreenSize\");\n if (attrNum(webPublishingEl, \"dpi\") !== undefined) wp.dpi = attrNum(webPublishingEl, \"dpi\");\n if (attrNum(webPublishingEl, \"codePage\") !== undefined)\n wp.codePage = attrNum(webPublishingEl, \"codePage\");\n result.webPublishing = wp;\n }\n\n // File recovery\n const fileRecoveryEl = findChild(el, \"fileRecoveryPr\");\n if (fileRecoveryEl?.attributes) {\n const frp: Record<string, unknown> = {};\n if (attr(fileRecoveryEl, \"autoRecover\") === \"0\") frp.autoRecover = false;\n if (attr(fileRecoveryEl, \"crashSave\") === \"1\") frp.crashSave = true;\n if (attr(fileRecoveryEl, \"dataExtractLoad\") === \"1\") frp.dataExtractLoad = true;\n if (attr(fileRecoveryEl, \"repairLoad\") === \"1\") frp.repairLoad = true;\n result.fileRecoveryPr = frp;\n }\n\n // Conformance\n if (el.attributes?.[\"conformance\"]) {\n result.conformance = attr(el, \"conformance\") as WorkbookConformance;\n }\n\n return result as Record<string, unknown>;\n },\n};\n\n// ── Stringify helpers ──\n\nfunction stringifyWorkbook(opts: WorkbookDescriptorOptions): string {\n const confAttr = opts.conformance ? ` conformance=\"${opts.conformance}\"` : \"\";\n const parts: string[] = [\n '<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"' +\n ' xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"' +\n ' xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"' +\n ' mc:Ignorable=\"x15 xr xr6 xr10 xr2\"' +\n ' xmlns:x15=\"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main\"' +\n ' xmlns:xr=\"http://schemas.microsoft.com/office/spreadsheetml/2014/revision\"' +\n ' xmlns:xr6=\"http://schemas.microsoft.com/office/spreadsheetml/2016/revision6\"' +\n ' xmlns:xr10=\"http://schemas.microsoft.com/office/spreadsheetml/2016/revision10\"' +\n ` xmlns:xr2=\"http://schemas.microsoft.com/office/spreadsheetml/2015/revision2\"${confAttr}>`,\n '<fileVersion appName=\"xl\" lastEdited=\"7\" lowestEdited=\"6\" rupBuild=\"29929\"/>',\n ];\n\n // File sharing (after fileVersion, before workbookPr per XSD sequence)\n if (opts.fileSharing) {\n const fs = opts.fileSharing;\n const fsAttrs: string[] = [];\n if (fs.readOnlyRecommended) fsAttrs.push('readOnlyRecommended=\"1\"');\n if (fs.userName) fsAttrs.push(`userName=\"${escapeXml(fs.userName)}\"`);\n if (fs.reservationPassword) {\n fsAttrs.push(`reservationPassword=\"${escapeXml(fs.reservationPassword)}\"`);\n if (fs.hashValue === undefined) {\n const derived = derivePasswordHash(fs.reservationPassword);\n fsAttrs.push(`algorithmName=\"${escapeXml(derived.algorithmName)}\"`);\n fsAttrs.push(`hashValue=\"${escapeXml(derived.hashValue)}\"`);\n fsAttrs.push(`saltValue=\"${escapeXml(derived.saltValue)}\"`);\n fsAttrs.push(`spinCount=\"${derived.spinCount}\"`);\n }\n }\n if (fs.algorithmName) fsAttrs.push(`algorithmName=\"${escapeXml(fs.algorithmName)}\"`);\n if (fs.hashValue) fsAttrs.push(`hashValue=\"${escapeXml(fs.hashValue)}\"`);\n if (fs.saltValue) fsAttrs.push(`saltValue=\"${escapeXml(fs.saltValue)}\"`);\n if (fs.spinCount !== undefined) fsAttrs.push(`spinCount=\"${fs.spinCount}\"`);\n if (fsAttrs.length > 0) {\n parts.push(`<fileSharing ${fsAttrs.join(\" \")}/>`);\n }\n }\n\n // Workbook properties\n if (opts.workbookPr) {\n const wbPr = opts.workbookPr;\n const wbPrAttrs: string[] = [];\n if (wbPr.date1904) wbPrAttrs.push('date1904=\"1\"');\n if (wbPr.defaultThemeVersion !== undefined)\n wbPrAttrs.push(`defaultThemeVersion=\"${wbPr.defaultThemeVersion}\"`);\n if (wbPr.showObjects) wbPrAttrs.push(`showObjects=\"${escapeXml(wbPr.showObjects)}\"`);\n if (wbPr.hidePivotFieldList) wbPrAttrs.push('hidePivotFieldList=\"1\"');\n if (wbPr.allowRefreshQuery) wbPrAttrs.push('allowRefreshQuery=\"1\"');\n if (wbPr.filterPrivacy) wbPrAttrs.push('filterPrivacy=\"1\"');\n if (wbPr.backupFile) wbPrAttrs.push('backupFile=\"1\"');\n if (wbPr.codeName) wbPrAttrs.push(`codeName=\"${escapeXml(wbPr.codeName)}\"`);\n if (wbPr.showBorderUnselectedTables) wbPrAttrs.push('showBorderUnselectedTables=\"1\"');\n if (wbPr.promptedSolutions) wbPrAttrs.push('promptedSolutions=\"1\"');\n if (wbPr.showInkAnnotation === false) wbPrAttrs.push('showInkAnnotation=\"0\"');\n if (wbPr.saveExternalLinkValues === false) wbPrAttrs.push('saveExternalLinkValues=\"0\"');\n if (wbPr.updateLinks) wbPrAttrs.push(`updateLinks=\"${escapeXml(wbPr.updateLinks)}\"`);\n if (wbPr.showPivotChartFilter) wbPrAttrs.push('showPivotChartFilter=\"1\"');\n if (wbPr.publishItems) wbPrAttrs.push('publishItems=\"1\"');\n if (wbPr.checkCompatibility) wbPrAttrs.push('checkCompatibility=\"1\"');\n if (wbPr.autoCompressPictures === false) wbPrAttrs.push('autoCompressPictures=\"0\"');\n if (wbPr.refreshAllConnections) wbPrAttrs.push('refreshAllConnections=\"1\"');\n parts.push(`<workbookPr${wbPrAttrs.length > 0 ? ` ${wbPrAttrs.join(\" \")}` : \"\"}/>`);\n } else {\n parts.push(\"<workbookPr/>\");\n }\n\n // Workbook protection (after workbookPr, before bookViews per XSD sequence)\n if (opts.protection) {\n const prot = opts.protection;\n const protAttrs: string[] = [];\n if (prot.lockStructure) protAttrs.push('lockStructure=\"1\"');\n if (prot.lockWindows) protAttrs.push('lockWindows=\"1\"');\n if (prot.lockRevision) protAttrs.push('lockRevision=\"1\"');\n if (prot.workbookPassword) {\n protAttrs.push(`workbookPassword=\"${hashPassword(prot.workbookPassword)}\"`);\n if (prot.workbookHashValue === undefined) {\n const wbDerived = derivePasswordHash(prot.workbookPassword);\n protAttrs.push(`workbookAlgorithmName=\"${escapeXml(wbDerived.algorithmName)}\"`);\n protAttrs.push(`workbookHashValue=\"${escapeXml(wbDerived.hashValue)}\"`);\n protAttrs.push(`workbookSaltValue=\"${escapeXml(wbDerived.saltValue)}\"`);\n protAttrs.push(`workbookSpinCount=\"${wbDerived.spinCount}\"`);\n }\n }\n if (prot.workbookAlgorithmName)\n protAttrs.push(`workbookAlgorithmName=\"${escapeXml(prot.workbookAlgorithmName)}\"`);\n if (prot.workbookHashValue)\n protAttrs.push(`workbookHashValue=\"${escapeXml(prot.workbookHashValue)}\"`);\n if (prot.workbookSaltValue)\n protAttrs.push(`workbookSaltValue=\"${escapeXml(prot.workbookSaltValue)}\"`);\n if (prot.workbookSpinCount !== undefined)\n protAttrs.push(`workbookSpinCount=\"${prot.workbookSpinCount}\"`);\n if (prot.revisionsPassword) {\n protAttrs.push(`revisionsPassword=\"${hashPassword(prot.revisionsPassword)}\"`);\n if (prot.revisionsHashValue === undefined) {\n const revDerived = derivePasswordHash(prot.revisionsPassword);\n protAttrs.push(`revisionsAlgorithmName=\"${escapeXml(revDerived.algorithmName)}\"`);\n protAttrs.push(`revisionsHashValue=\"${escapeXml(revDerived.hashValue)}\"`);\n protAttrs.push(`revisionsSaltValue=\"${escapeXml(revDerived.saltValue)}\"`);\n protAttrs.push(`revisionsSpinCount=\"${revDerived.spinCount}\"`);\n }\n }\n if (prot.revisionsAlgorithmName)\n protAttrs.push(`revisionsAlgorithmName=\"${escapeXml(prot.revisionsAlgorithmName)}\"`);\n if (prot.revisionsHashValue)\n protAttrs.push(`revisionsHashValue=\"${escapeXml(prot.revisionsHashValue)}\"`);\n if (prot.revisionsSaltValue)\n protAttrs.push(`revisionsSaltValue=\"${escapeXml(prot.revisionsSaltValue)}\"`);\n if (prot.revisionsSpinCount !== undefined)\n protAttrs.push(`revisionsSpinCount=\"${prot.revisionsSpinCount}\"`);\n if (prot.workbookPasswordCharacterSet)\n protAttrs.push(\n `workbookPasswordCharacterSet=\"${escapeXml(prot.workbookPasswordCharacterSet)}\"`,\n );\n if (prot.revisionsPasswordCharacterSet)\n protAttrs.push(\n `revisionsPasswordCharacterSet=\"${escapeXml(prot.revisionsPasswordCharacterSet)}\"`,\n );\n if (protAttrs.length > 0) {\n parts.push(`<workbookProtection ${protAttrs.join(\" \")}/>`);\n }\n }\n\n // Book views\n if (opts.bookView) {\n const bv = opts.bookView;\n const bvAttrs: string[] = [];\n if (bv.xWindow !== undefined) bvAttrs.push(`xWindow=\"${bv.xWindow}\"`);\n else bvAttrs.push('xWindow=\"0\"');\n if (bv.yWindow !== undefined) bvAttrs.push(`yWindow=\"${bv.yWindow}\"`);\n else bvAttrs.push('yWindow=\"0\"');\n if (bv.windowWidth !== undefined) bvAttrs.push(`windowWidth=\"${bv.windowWidth}\"`);\n else bvAttrs.push('windowWidth=\"28800\"');\n if (bv.windowHeight !== undefined) bvAttrs.push(`windowHeight=\"${bv.windowHeight}\"`);\n else bvAttrs.push('windowHeight=\"12300\"');\n if (bv.activeTab !== undefined) bvAttrs.push(`activeTab=\"${bv.activeTab}\"`);\n if (bv.autoFilterDateGrouping === false) bvAttrs.push('autoFilterDateGrouping=\"0\"');\n if (bv.firstSheet !== undefined) bvAttrs.push(`firstSheet=\"${bv.firstSheet}\"`);\n if (bv.showHorizontalScroll === false) bvAttrs.push('showHorizontalScroll=\"0\"');\n if (bv.showSheetTabs === false) bvAttrs.push('showSheetTabs=\"0\"');\n if (bv.showVerticalScroll === false) bvAttrs.push('showVerticalScroll=\"0\"');\n if (bv.tabRatio !== undefined) bvAttrs.push(`tabRatio=\"${bv.tabRatio}\"`);\n parts.push(`<bookViews><workbookView ${bvAttrs.join(\" \")}/></bookViews>`);\n } else {\n parts.push(\n '<bookViews><workbookView xWindow=\"0\" yWindow=\"0\" windowWidth=\"28800\" windowHeight=\"12300\"/></bookViews>',\n );\n }\n\n parts.push(\"<sheets>\");\n for (const s of opts.sheets) {\n const stateAttr = s.state && s.state !== \"visible\" ? ` state=\"${s.state}\"` : \"\";\n parts.push(\n `<sheet name=\"${escapeXml(s.name)}\" sheetId=\"${s.sheetId}\" r:id=\"${s.rId}\"${stateAttr}/>`,\n );\n }\n parts.push(\"</sheets>\");\n\n // Function groups (after sheets, before externalReferences per XSD)\n const functionGroups = opts.functionGroups ?? [];\n if (functionGroups.length > 0) {\n const fgParts: string[] = [`<functionGroups builtInGroupCount=\"16\">`];\n for (const name of functionGroups) {\n fgParts.push(`<functionGroup name=\"${escapeXml(name)}\"/>`);\n }\n fgParts.push(\"</functionGroups>\");\n parts.push(fgParts.join(\"\"));\n }\n\n // externalReferences placeholder — compiler injects the XML here if needed\n parts.push(\"<!--EXTERNAL_REFS-->\");\n\n // Calculation properties\n if (opts.calcPr) {\n const cp = opts.calcPr;\n const cpAttrs: string[] = [];\n cpAttrs.push(`calcId=\"${cp.calcId ?? 162913}\"`);\n if (cp.calcMode) cpAttrs.push(`calcMode=\"${escapeXml(cp.calcMode)}\"`);\n if (cp.fullCalcOnLoad) cpAttrs.push('fullCalcOnLoad=\"1\"');\n if (cp.calcOnSave === false) cpAttrs.push('calcOnSave=\"0\"');\n if (cp.forceFullCalc) cpAttrs.push('forceFullCalc=\"1\"');\n if (cp.concurrentCalc === false) cpAttrs.push('concurrentCalc=\"0\"');\n if (cp.concurrentManualCount !== undefined)\n cpAttrs.push(`concurrentManualCount=\"${cp.concurrentManualCount}\"`);\n if (cp.iterate) cpAttrs.push('iterate=\"1\"');\n if (cp.iterateCount !== undefined) cpAttrs.push(`iterateCount=\"${cp.iterateCount}\"`);\n if (cp.iterateDelta !== undefined) cpAttrs.push(`iterateDelta=\"${cp.iterateDelta}\"`);\n if (cp.refMode) cpAttrs.push(`refMode=\"${escapeXml(cp.refMode)}\"`);\n if (cp.fullPrecision === false) cpAttrs.push('fullPrecision=\"0\"');\n if (cp.calcCompleted) cpAttrs.push('calcCompleted=\"1\"');\n parts.push(`<calcPr ${cpAttrs.join(\" \")}/>`);\n } else {\n parts.push('<calcPr calcId=\"162913\"/>');\n }\n\n // Custom workbook views (after calcPr, before pivotCaches per XSD)\n if (opts.customViews && opts.customViews.length > 0) {\n parts.push(\"<customWorkbookViews>\");\n for (const v of opts.customViews) {\n const vAttrs: string[] = [\n `name=\"${escapeXml(v.name)}\"`,\n `guid=\"${escapeXml(v.guid)}\"`,\n `windowWidth=\"${v.windowWidth}\"`,\n `windowHeight=\"${v.windowHeight}\"`,\n `activeSheetId=\"${v.activeSheetId}\"`,\n ];\n if (v.xWindow !== undefined) vAttrs.push(`xWindow=\"${v.xWindow}\"`);\n if (v.yWindow !== undefined) vAttrs.push(`yWindow=\"${v.yWindow}\"`);\n if (v.showFormulaBar === false) vAttrs.push('showFormulaBar=\"0\"');\n if (v.showStatusbar === false) vAttrs.push('showStatusbar=\"0\"');\n if (v.showHorizontalScroll === false) vAttrs.push('showHorizontalScroll=\"0\"');\n if (v.showVerticalScroll === false) vAttrs.push('showVerticalScroll=\"0\"');\n if (v.showSheetTabs === false) vAttrs.push('showSheetTabs=\"0\"');\n if (v.tabRatio !== undefined) vAttrs.push(`tabRatio=\"${v.tabRatio}\"`);\n if (v.includeHiddenRowCol === false) vAttrs.push('includeHiddenRowCol=\"0\"');\n if (v.includePrintSettings === false) vAttrs.push('includePrintSettings=\"0\"');\n if (v.personalView) vAttrs.push('personalView=\"1\"');\n if (v.maximized) vAttrs.push('maximized=\"1\"');\n if (v.minimized) vAttrs.push('minimized=\"1\"');\n if (v.autoUpdate) vAttrs.push('autoUpdate=\"1\"');\n if (v.mergeInterval !== undefined) vAttrs.push(`mergeInterval=\"${v.mergeInterval}\"`);\n if (v.changesSavedWin) vAttrs.push('changesSavedWin=\"1\"');\n if (v.onlySync) vAttrs.push('onlySync=\"1\"');\n if (v.showComments) vAttrs.push(`showComments=\"${escapeXml(v.showComments)}\"`);\n parts.push(`<customWorkbookView ${vAttrs.join(\" \")}/>`);\n }\n parts.push(\"</customWorkbookViews>\");\n }\n\n const pivotCaches = opts.pivotCaches ?? [];\n if (pivotCaches.length > 0) {\n parts.push(\"<pivotCaches>\");\n for (const pc of pivotCaches) {\n parts.push(`<pivotCache cacheId=\"${pc.cacheId}\" r:id=\"${pc.rId}\"/>`);\n }\n parts.push(\"</pivotCaches>\");\n }\n\n // Web publishing (after pivotCaches, before fileRecoveryPr per XSD sequence)\n if (opts.webPublishing) {\n const wp = opts.webPublishing;\n const wpAttrs: string[] = [];\n if (wp.css === false) wpAttrs.push('css=\"0\"');\n if (wp.thicket === false) wpAttrs.push('thicket=\"0\"');\n if (wp.longFileNames === false) wpAttrs.push('longFileNames=\"0\"');\n if (wp.vml) wpAttrs.push('vml=\"1\"');\n if (wp.allowPng) wpAttrs.push('allowPng=\"1\"');\n if (wp.targetScreenSize && wp.targetScreenSize !== \"800x600\")\n wpAttrs.push(`targetScreenSize=\"${wp.targetScreenSize}\"`);\n if (wp.dpi !== undefined && wp.dpi !== 96) wpAttrs.push(`dpi=\"${wp.dpi}\"`);\n if (wp.codePage !== undefined) wpAttrs.push(`codePage=\"${wp.codePage}\"`);\n if (wp.characterSet) wpAttrs.push(`characterSet=\"${escapeXml(wp.characterSet)}\"`);\n parts.push(`<webPublishing ${wpAttrs.join(\" \")}/>`);\n }\n\n // File recovery properties (after webPublishing per XSD sequence)\n if (opts.fileRecoveryPr) {\n const frp = opts.fileRecoveryPr;\n const frpAttrs: string[] = [];\n if (frp.autoRecover === false) frpAttrs.push('autoRecover=\"0\"');\n if (frp.crashSave) frpAttrs.push('crashSave=\"1\"');\n if (frp.dataExtractLoad) frpAttrs.push('dataExtractLoad=\"1\"');\n if (frp.repairLoad) frpAttrs.push('repairLoad=\"1\"');\n if (frpAttrs.length > 0) {\n parts.push(`<fileRecoveryPr ${frpAttrs.join(\" \")}/>`);\n }\n }\n\n // Web publish objects (after fileRecoveryPr per XSD sequence)\n if (opts.webPublishObjects && opts.webPublishObjects.length > 0) {\n const wpoParts: string[] = [`<webPublishObjects count=\"${opts.webPublishObjects.length}\">`];\n for (const wpo of opts.webPublishObjects) {\n const wpoAttrs: string[] = [`r:id=\"${escapeXml(wpo.rId)}\"`];\n if (wpo.destinationFile) wpoAttrs.push(`destinationFile=\"${escapeXml(wpo.destinationFile)}\"`);\n if (wpo.autoRepublish) wpoAttrs.push('autoRepublish=\"1\"');\n if (wpo.title) wpoAttrs.push(`title=\"${escapeXml(wpo.title)}\"`);\n if (wpo.sourceObject) wpoAttrs.push(`sourceObject=\"${escapeXml(wpo.sourceObject)}\"`);\n wpoParts.push(`<webPublishObject ${wpoAttrs.join(\" \")}/>`);\n }\n wpoParts.push(\"</webPublishObjects>\");\n parts.push(wpoParts.join(\"\"));\n }\n\n // Volatile dependencies (volTypes)\n if (opts.volTypes && opts.volTypes.length > 0) {\n const vtParts: string[] = [`<volTypes count=\"${opts.volTypes.length}\">`];\n for (const vt of opts.volTypes) {\n const vtType = vt.type ?? \"realTimeData\";\n const mains = vt.mains ?? [];\n if (mains.length > 0) {\n const mainParts: string[] = [];\n for (const m of mains) {\n const tpParts: string[] = [];\n for (const topic of m.topics ?? []) {\n const tpInner: string[] = [`<v>${escapeXml(topic.value)}</v>`];\n for (const stp of topic.stringTopics ?? []) {\n tpInner.push(`<stp>${escapeXml(stp)}</stp>`);\n }\n for (const tr of topic.refs ?? []) {\n tpInner.push(`<tr r=\"${escapeXml(tr.reference)}\" s=\"${tr.sheetIndex}\"/>`);\n }\n const tpAttr =\n topic.valueType && topic.valueType !== \"n\"\n ? ` t=\"${escapeXml(topic.valueType)}\"`\n : \"\";\n tpParts.push(`<tp${tpAttr}>${tpInner.join(\"\")}</tp>`);\n }\n mainParts.push(`<main first=\"${escapeXml(m.first)}\">${tpParts.join(\"\")}</main>`);\n }\n vtParts.push(`<volType type=\"${vtType}\">${mainParts.join(\"\")}</volType>`);\n } else {\n vtParts.push(`<volType type=\"${vtType}\"/>`);\n }\n }\n vtParts.push(\"</volTypes>\");\n parts.push(vtParts.join(\"\"));\n }\n\n parts.push(\"</workbook>\");\n return parts.join(\"\");\n}\n\n// ── Exported helper functions ──\n\n/** Generate tableParts XML fragment for embedding in a worksheet. */\nexport function buildTablePartsXml(tableParts: TablePartReference[]): string {\n if (tableParts.length === 0) return \"\";\n const p: string[] = [`<tableParts count=\"${tableParts.length}\">`];\n for (const tp of tableParts) {\n p.push(`<tablePart r:id=\"${tp.rId}\"/>`);\n }\n p.push(\"</tableParts>\");\n return p.join(\"\");\n}\n\n/** Generate externalReferences XML fragment for embedding in the workbook. */\nexport function buildExternalReferencesXml(refs: { rId: string }[]): string {\n if (refs.length === 0) return \"\";\n const p: string[] = [\"<externalReferences>\"];\n for (const ref of refs) {\n p.push(`<externalReference r:id=\"${ref.rId}\"/>`);\n }\n p.push(\"</externalReferences>\");\n return p.join(\"\");\n}\n\n/** Legacy Excel password hash (XOR-based) */\nfunction hashPassword(password: string): string {\n let hash = 0;\n for (let i = 0; i < password.length; i++) {\n const c = password.charCodeAt(i);\n hash = ((hash >> 14) & 1) + ((hash << 1) & 0x7fff);\n hash ^= c;\n hash = hash & 0x4000 ? hash ^ 0x1 : hash;\n }\n hash = ((hash >> 14) & 1) + ((hash << 1) & 0x7fff);\n hash = ((hash >> 14) & 1) + ((hash << 1) & 0x7fff);\n hash ^= password.length;\n return hash.toString(16).toUpperCase().padStart(4, \"0\");\n}\n","/**\n * XLSX Compiler — compiles WorkbookOptions into a Zippable structure.\n *\n * Accepts pure JSON WorkbookOptions — no intermediate File class needed.\n * Uses XlsxWriteContext for shared state (strings, styles, media, charts).\n *\n * @module\n */\n\nimport {\n APP_PROPS_XML,\n Relationships,\n TargetModeType,\n buildCorePropertiesXmlString,\n compileMapping,\n type XmlifyedFile,\n type Zippable,\n} from \"@office-open/core\";\nimport { chartSpaceDesc } from \"@office-open/core/chart\";\nimport type { CalcCell } from \"@parts/calc-chain\";\nimport { calcChainDesc } from \"@parts/calc-chain\";\nimport { chartsheetDesc } from \"@parts/chartsheet\";\nimport { commentsDesc, vmlNotesDesc } from \"@parts/comments\";\nimport type { ImageOptions, ChartAnchorOptions } from \"@parts/drawing\";\nimport { drawingDesc } from \"@parts/drawing\";\nimport { externalLinkDesc } from \"@parts/external-link\";\nimport type { WorkbookOptions } from \"@parts/file\";\nimport { aggregate, collectUniqueValues } from \"@parts/pivot\";\nimport type { PivotSourceData, PivotTableOptions } from \"@parts/pivot\";\nimport { pivotCacheDefDesc, pivotCacheRecordsDesc } from \"@parts/pivot-cache\";\nimport { pivotTableDesc } from \"@parts/pivot-table\";\nimport { sharedStringsDesc } from \"@parts/shared-strings\";\nimport { stylesDesc } from \"@parts/styles\";\nimport { tableDesc } from \"@parts/table\";\nimport { createThemeXml } from \"@parts/theme\";\nimport type { TablePartReference } from \"@parts/workbook\";\nimport { workbookDesc, buildTablePartsXml, buildExternalReferencesXml } from \"@parts/workbook\";\nimport { buildWorksheetXml, type WorksheetContext } from \"@parts/worksheet\";\n\nimport { XlsxWriteContext } from \"./context\";\n\nconst XML_DECL = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n\n/**\n * Compile workbook options into a Zippable structure.\n */\nexport function compileWorkbook(\n options: WorkbookOptions,\n overrides: XmlifyedFile[] = [],\n mediaLevel: number = 0,\n): Zippable {\n const ctx = new XlsxWriteContext();\n const mapping: Record<string, { data: string; path: string }> = {};\n\n const worksheetConfigs = options.worksheets ?? [];\n const chartsheetConfigs = options.chartsheets ?? [];\n\n // Core properties\n mapping[\"Properties\"] = {\n data: XML_DECL + buildCorePropertiesXmlString(options),\n path: \"docProps/core.xml\",\n };\n\n // App properties\n mapping[\"AppProperties\"] = {\n data: XML_DECL + APP_PROPS_XML,\n path: \"docProps/app.xml\",\n };\n\n // File-level relationships (_rels/.rels)\n const fileRels = buildFileRelationships();\n mapping[\"FileRelationships\"] = {\n data: XML_DECL + fileRels.serialize(),\n path: \"_rels/.rels\",\n };\n\n // Register base content types\n for (let i = 0; i < worksheetConfigs.length; i++) {\n ctx.contentTypes.addWorksheet(i + 1);\n }\n ctx.contentTypes.addStyles();\n ctx.contentTypes.addSharedStrings();\n ctx.contentTypes.addTheme();\n\n // Register predefined DXFs before worksheets use styles\n for (const dxf of options.dxfs ?? []) {\n ctx.registerDxf(dxf);\n }\n\n // Build workbook relationships\n buildWorkbookRelationships(ctx.workbookRels, worksheetConfigs.length, chartsheetConfigs.length);\n\n // Build sheet definitions for workbook XML\n const sheets: import(\"@parts/workbook\").SheetDefinition[] = [];\n let sheetId = 1;\n let rId = 1;\n for (const ws of worksheetConfigs) {\n sheets.push({\n name: ws.name ?? `Sheet${sheetId}`,\n sheetId: sheetId++,\n rId: `rId${rId++}`,\n });\n }\n for (const cs of chartsheetConfigs) {\n sheets.push({\n name: cs.name ?? `Chart${sheetId}`,\n sheetId: sheetId++,\n rId: `rId${rId++}`,\n });\n }\n\n // Worksheets — formatted BEFORE SharedStrings so strings are registered\n let globalMediaIdx = 0;\n let globalChartIdx = 0;\n let globalPivotIdx = 0;\n let globalPivotCacheIdx = 0;\n let globalTableIdx = 0;\n const pivotCacheDataMap = new Map<string, { cacheId: number; cacheIdx: number }>();\n const calcCells: CalcCell[] = [];\n const allTableParts: TablePartReference[] = [];\n\n const wsContext: WorksheetContext = { sharedStrings: ctx.sharedStrings, styles: ctx.styles };\n\n for (let i = 0; i < worksheetConfigs.length; i++) {\n const wsOpts = worksheetConfigs[i];\n const imgOpts = wsOpts.images ?? [];\n const chartOpts = wsOpts.charts ?? [];\n const hlOpts = wsOpts.hyperlinks ?? [];\n const sheetName = wsOpts.name ?? `Sheet${i + 1}`;\n\n // Worksheet uses buildWorksheetXml fast path (zero-allocation string concat)\n let sheetXml = buildWorksheetXml(wsOpts, wsContext);\n\n // Collect formula cells for calcChain\n const sheetIdx = i + 1;\n const wsRows = wsOpts.rows ?? [];\n for (let ri = 0; ri < wsRows.length; ri++) {\n const rowOpts = wsRows[ri];\n const rowNumber = rowOpts.rowNumber ?? ri + 1;\n if (!rowOpts.cells) continue;\n for (let ci = 0; ci < rowOpts.cells.length; ci++) {\n const cell = rowOpts.cells[ci];\n if (!cell.formula) continue;\n const ref = cell.reference ?? columnToLetter(ci + 1) + rowNumber;\n calcCells.push({\n reference: ref,\n sheetIndex: sheetIdx,\n array: cell.formula.type === \"array\",\n });\n }\n }\n\n const hasMedia = imgOpts.length > 0 || chartOpts.length > 0;\n const hasExternalHyperlinks = hlOpts.some((h) => h.target.type === \"external\");\n const commentOpts = wsOpts.comments ?? [];\n const hasComments = commentOpts.length > 0;\n const pivotOpts = wsOpts.pivotTables ?? [];\n const hasPivots = pivotOpts.length > 0;\n const tableOpts = wsOpts.tables ?? [];\n const hasTables = tableOpts.length > 0;\n const bgImg = wsOpts.backgroundImage;\n\n // Worksheet-level relationships\n let wsRels: Relationships | undefined;\n let nextRid = 0;\n\n if (hasMedia || hasExternalHyperlinks || hasComments || hasPivots || hasTables || bgImg) {\n wsRels = new Relationships();\n }\n\n if (hasExternalHyperlinks) {\n for (const hl of hlOpts) {\n if (hl.target.type !== \"external\") continue;\n const rid = ++nextRid;\n wsRels!.addRelationship(\n rid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",\n hl.target.url,\n \"External\",\n );\n }\n }\n\n if (hasMedia) {\n const drawingImages: ImageOptions[] = [];\n const drawingCharts: ChartAnchorOptions[] = [];\n const drawingRels = new Relationships();\n let rid = 1;\n\n // Process images\n for (const img of imgOpts) {\n const mediaKey = `image_${globalMediaIdx}`;\n const ext = img.type === \"jpeg\" || img.type === \"jpg\" ? \"jpeg\" : \"png\";\n ctx.media.addImage(mediaKey, {\n fileName: `image${globalMediaIdx + 1}.${ext}`,\n type: ext,\n data: img.data,\n width: 0,\n height: 0,\n });\n\n drawingRels.addRelationship(\n rid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n `../media/image${globalMediaIdx + 1}.${ext}`,\n );\n\n drawingImages.push({\n col: img.col,\n row: img.row,\n rId: `rId${rid}`,\n });\n rid++;\n globalMediaIdx++;\n }\n\n // Process charts\n for (const chart of chartOpts) {\n const chartKey = `chart_${globalChartIdx}`;\n ctx.charts.addChart(chartKey, {\n key: chartKey,\n chartSpaceXml: chartSpaceDesc.stringify(chart, ctx) ?? \"\",\n });\n\n drawingRels.addRelationship(\n rid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\",\n `../charts/chart${globalChartIdx + 1}.xml`,\n );\n\n drawingCharts.push({\n col: chart.col,\n row: chart.row,\n rId: `rId${rid}`,\n });\n rid++;\n globalChartIdx++;\n }\n\n // Generate drawing XML (via descriptor)\n const drawingXml = drawingDesc.stringify(\n { images: drawingImages, charts: drawingCharts },\n ctx,\n );\n const drawingIdx = i + 1;\n mapping[`Drawing${i}`] = {\n data: `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${drawingXml}`,\n path: `xl/drawings/drawing${drawingIdx}.xml`,\n };\n\n // Drawing relationships\n mapping[`DrawingRels${i}`] = {\n data: XML_DECL + drawingRels.serialize(),\n path: `xl/drawings/_rels/drawing${drawingIdx}.xml.rels`,\n };\n\n // Insert drawing reference before the closing </worksheet> tag.\n const drawingRid = ++nextRid;\n const closingTag = \"</worksheet>\";\n sheetXml =\n sheetXml.slice(0, -closingTag.length) + `<drawing r:id=\"rId${drawingRid}\"/>` + closingTag;\n\n // Add drawing relationship to worksheet rels\n wsRels!.addRelationship(\n drawingRid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\",\n `../drawings/drawing${drawingIdx}.xml`,\n );\n\n ctx.contentTypes.addDrawing(drawingIdx);\n }\n\n // Comments\n if (hasComments) {\n const commentsIdx = i + 1;\n\n // Comments XML (via descriptor)\n const commentsXml = commentsDesc.stringify({ comments: commentOpts }, ctx);\n mapping[`Comments${i}`] = {\n data: `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${commentsXml}`,\n path: `xl/comments${commentsIdx}.xml`,\n };\n\n // VML drawing (via descriptor)\n const vmlXml = vmlNotesDesc.stringify({ comments: commentOpts }, ctx);\n mapping[`VmlDrawing${i}`] = {\n data: `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${vmlXml}`,\n path: `xl/drawings/vmlDrawing${commentsIdx}.vml`,\n };\n\n // Worksheet rels: comments → comments XML, legacyDrawing → VML file\n const commentsRid = ++nextRid;\n wsRels!.addRelationship(\n commentsRid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\",\n `../comments${commentsIdx}.xml`,\n );\n\n const vmlRid = ++nextRid;\n wsRels!.addRelationship(\n vmlRid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing\",\n `../drawings/vmlDrawing${commentsIdx}.vml`,\n );\n\n // Insert legacyDrawing reference before closing </worksheet>\n const closingTag = \"</worksheet>\";\n sheetXml =\n sheetXml.slice(0, -closingTag.length) + `<legacyDrawing r:id=\"rId${vmlRid}\"/>` + closingTag;\n\n // Register content types\n ctx.contentTypes.addComments(commentsIdx);\n ctx.contentTypes.addVmlDrawing();\n }\n\n // Background picture\n if (bgImg) {\n const ext = bgImg.type === \"jpg\" ? \"jpeg\" : bgImg.type;\n const mediaKey = `bg_${i}`;\n const mediaIdx = globalMediaIdx + 1;\n ctx.media.addImage(mediaKey, {\n fileName: `image${mediaIdx}.${ext}`,\n type: ext,\n data: bgImg.data,\n width: 0,\n height: 0,\n });\n globalMediaIdx++;\n const bgRid = ++nextRid;\n wsRels!.addRelationship(\n bgRid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n `../media/image${mediaIdx}.${ext}`,\n );\n sheetXml = sheetXml.replace(\"<!--BACKGROUND_PICTURE-->\", `<picture r:id=\"rId${bgRid}\"/>`);\n }\n\n // Pivot tables\n if (hasPivots) {\n for (const pt of pivotOpts) {\n globalPivotIdx++;\n const pivotIdx = globalPivotIdx;\n\n // Extract source data from source sheet\n const sourceSheet = pt.sourceSheet ?? sheetName;\n const sourceWsIdx = worksheetConfigs.findIndex(\n (ws) => (ws.name ?? `Sheet${worksheetConfigs.indexOf(ws) + 1}`) === sourceSheet,\n );\n if (sourceWsIdx === -1) continue;\n\n const sourceRows = worksheetConfigs[sourceWsIdx].rows ?? [];\n const sourceData = extractPivotSourceData(sourceRows, pt.source);\n\n // Deduplicate pivot caches by source reference\n const cacheKey = `${sourceSheet}:${pt.source}`;\n let cacheId: number;\n let cacheIdx: number;\n const existing = pivotCacheDataMap.get(cacheKey);\n if (existing) {\n cacheId = existing.cacheId;\n cacheIdx = existing.cacheIdx;\n } else {\n globalPivotCacheIdx++;\n cacheIdx = globalPivotCacheIdx;\n cacheId = cacheIdx;\n pivotCacheDataMap.set(cacheKey, { cacheId, cacheIdx });\n\n // Generate pivotCacheDefinition\n const cacheDefRels = new Relationships();\n cacheDefRels.addRelationship(\n 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheRecords\",\n \"pivotCacheRecords1.xml\",\n );\n\n const cacheDefXml =\n '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n pivotCacheDefDesc.stringify(\n {\n sourceRef: pt.source.split(\":\")[0] ? pt.source : \"A1\",\n sourceSheet,\n sourceData,\n recordsRid: \"rId1\",\n },\n ctx,\n );\n\n mapping[`PivotCacheDef${cacheIdx}`] = {\n data: cacheDefXml,\n path: `xl/pivotCache/pivotCacheDefinition${cacheIdx}.xml`,\n };\n mapping[`PivotCacheDefRels${cacheIdx}`] = {\n data: XML_DECL + cacheDefRels.serialize(),\n path: `xl/pivotCache/_rels/pivotCacheDefinition${cacheIdx}.xml.rels`,\n };\n\n // Generate pivotCacheRecords\n const cacheRecordsXml =\n '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n pivotCacheRecordsDesc.stringify({ sourceData }, ctx);\n mapping[`PivotCacheRecords${cacheIdx}`] = {\n data: cacheRecordsXml,\n path: `xl/pivotCache/pivotCacheRecords${cacheIdx}.xml`,\n };\n\n // Content types\n ctx.contentTypes.addPivotCacheDefinition(cacheIdx);\n ctx.contentTypes.addPivotCacheRecords(cacheIdx);\n\n // Register in workbook\n const wbPivotRid = ctx.workbookRels.relationshipCount + 1;\n ctx.workbookRels.addRelationship(\n wbPivotRid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheDefinition\",\n `pivotCache/pivotCacheDefinition${cacheIdx}.xml`,\n );\n ctx.pivotCacheRefs.push({ cacheId, rId: `rId${wbPivotRid}` });\n }\n\n // Generate pivotTable\n const pivotTableXml =\n XML_DECL + pivotTableDesc.stringify({ options: pt, sourceData, cacheId }, ctx);\n mapping[`PivotTable${pivotIdx}`] = {\n data: pivotTableXml,\n path: `xl/pivotTables/pivotTable${pivotIdx}.xml`,\n };\n\n // pivotTable rels → cacheDefinition\n const ptRels = new Relationships();\n ptRels.addRelationship(\n 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheDefinition\",\n `../pivotCache/pivotCacheDefinition${cacheIdx}.xml`,\n );\n mapping[`PivotTableRels${pivotIdx}`] = {\n data: XML_DECL + ptRels.serialize(),\n path: `xl/pivotTables/_rels/pivotTable${pivotIdx}.xml.rels`,\n };\n\n // Worksheet rels → pivotTable\n const ptRid = ++nextRid;\n wsRels!.addRelationship(\n ptRid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotTable\",\n `../pivotTables/pivotTable${pivotIdx}.xml`,\n );\n\n ctx.contentTypes.addPivotTable(pivotIdx);\n }\n }\n\n // Tables (list objects)\n const wsTableParts: TablePartReference[] = [];\n if (hasTables) {\n for (const tbl of tableOpts) {\n globalTableIdx++;\n const tableIdx = globalTableIdx;\n\n // Generate table XML\n const tableXmlStr =\n '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n tableDesc.stringify({ ...tbl, id: tbl.id ?? tableIdx }, ctx);\n mapping[`Table${tableIdx}`] = {\n data: tableXmlStr,\n path: `xl/tables/table${tableIdx}.xml`,\n };\n\n // Worksheet rels → table\n const tblRid = ++nextRid;\n wsRels!.addRelationship(\n tblRid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/table\",\n `../tables/table${tableIdx}.xml`,\n );\n\n wsTableParts.push({ rId: `rId${tblRid}` });\n allTableParts.push({ rId: `rId${tblRid}` });\n\n ctx.contentTypes.addTable(tableIdx);\n }\n }\n\n // Pre-render pivot table data into sheetData\n if (hasPivots) {\n const rendered = renderPivotSheetData(\n pivotOpts,\n worksheetConfigs,\n ctx.sharedStrings,\n sheetName,\n );\n if (rendered.sheetData.length > 0) {\n // Replace empty <sheetData/> or <sheetData></sheetData> with rendered data\n sheetXml = sheetXml.replace(/<sheetData\\/>|<sheetData><\\/sheetData>/, rendered.sheetData);\n // Inject <dimension> before <sheetViews> (XSD sequence order: dimension before sheetViews)\n if (!sheetXml.includes(\"<dimension\")) {\n sheetXml = sheetXml.replace(\n \"<sheetViews\",\n `<dimension ref=\"${rendered.dimensionRef}\"/><sheetViews`,\n );\n }\n }\n }\n\n // Insert tableParts before closing </worksheet> tag\n if (wsTableParts.length > 0) {\n const tablePartsXml = buildTablePartsXml(wsTableParts);\n const closingTag = \"</worksheet>\";\n sheetXml = sheetXml.slice(0, -closingTag.length) + tablePartsXml + closingTag;\n }\n\n // Write worksheet rels if needed\n if (wsRels) {\n mapping[`WorksheetRels${i}`] = {\n data: XML_DECL + wsRels.serialize(),\n path: `xl/worksheets/_rels/sheet${i + 1}.xml.rels`,\n };\n }\n\n mapping[`Worksheet${i}`] = {\n data: sheetXml,\n path: `xl/worksheets/sheet${i + 1}.xml`,\n };\n }\n\n // Chartsheets — chart-only sheets\n for (let i = 0; i < chartsheetConfigs.length; i++) {\n const csOpts = chartsheetConfigs[i];\n\n // Register chart in the charts collection\n const chartDef = csOpts.chart;\n const csChartGlobalIdx = ctx.charts.array.length;\n const csChartKey = `cs_chart_${csChartGlobalIdx}`;\n ctx.charts.addChart(csChartKey, {\n key: csChartKey,\n chartSpaceXml:\n chartSpaceDesc.stringify(\n {\n type: chartDef.type as\n | \"column\"\n | \"bar\"\n | \"line\"\n | \"pie\"\n | \"doughnut\"\n | \"area\"\n | \"scatter\"\n | \"bubble\",\n title: chartDef.title,\n categories: chartDef.categories,\n series: chartDef.series,\n },\n ctx,\n ) ?? \"\",\n });\n\n // Chartsheet relationships: drawing (required)\n const csRels = new Relationships();\n const csDrawingIdx = i + 1;\n csRels.addRelationship(\n 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\",\n `../drawings/drawing${csDrawingIdx}.xml`,\n );\n\n // Drawing rels: chart reference\n const csDrawingRels = new Relationships();\n csDrawingRels.addRelationship(\n 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\",\n `../charts/chart${csChartGlobalIdx + 1}.xml`,\n );\n\n // Minimal drawing XML with chart anchor\n const csDrawingXml =\n `<xdr:wsDr xmlns:xdr=\"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">` +\n `<xdr:absoluteAnchor>` +\n `<xdr:pos x=\"0\" y=\"0\"/>` +\n `<xdr:ext cx=\"9308969\" cy=\"6096000\"/>` +\n `<xdr:graphicFrame>` +\n `<xdr:nvGraphicFramePr><xdr:cNvPr id=\"1\" name=\"Chart ${i + 1}\"/><xdr:cNvGraphicFramePr><a:graphicFrameLocks noGrp=\"1\"/></xdr:cNvGraphicFramePr></xdr:nvGraphicFramePr>` +\n `<xdr:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"9308969\" cy=\"6096000\"/></xdr:xfrm>` +\n `<a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/chart\"><c:chart xmlns:c=\"http://schemas.openxmlformats.org/drawingml/2006/chart\" r:id=\"rId1\"/></a:graphicData></a:graphic>` +\n `</xdr:graphicFrame>` +\n `<xdr:clientData/>` +\n `</xdr:absoluteAnchor>` +\n `</xdr:wsDr>`;\n\n mapping[`ChartsheetDrawing${i}`] = {\n data: csDrawingXml,\n path: `xl/drawings/drawing${csDrawingIdx}.xml`,\n };\n mapping[`ChartsheetDrawingRels${i}`] = {\n data: XML_DECL + csDrawingRels.serialize(),\n path: `xl/drawings/_rels/drawing${csDrawingIdx}.xml.rels`,\n };\n ctx.contentTypes.addDrawing(csDrawingIdx);\n\n mapping[`ChartsheetRels${i}`] = {\n data: XML_DECL + csRels.serialize(),\n path: `xl/chartsheets/_rels/sheet${i + 1}.xml.rels`,\n };\n mapping[`Chartsheet${i}`] = {\n data: XML_DECL + chartsheetDesc.stringify({ ...csOpts, drawingRId: \"rId1\" }, ctx),\n path: `xl/chartsheets/sheet${i + 1}.xml`,\n };\n ctx.contentTypes.addChartsheet(i + 1);\n }\n\n // Workbook XML (via descriptor)\n let wbXml =\n workbookDesc.stringify(\n {\n sheets,\n pivotCaches: ctx.pivotCacheRefs,\n protection: options.workbookProtection,\n customViews: options.customWorkbookViews,\n fileRecoveryPr: options.fileRecoveryPr,\n functionGroups: options.functionGroups,\n webPublishing: options.webPublishing,\n fileSharing: options.fileSharing,\n volTypes: options.volTypes,\n webPublishObjects: options.webPublishObjects,\n },\n ctx,\n ) ?? \"\";\n\n // External links — generate XML files and inject externalReferences into workbook\n const extLinks = options.externalLinks ?? [];\n if (extLinks.length > 0) {\n const extRefs: { rId: string }[] = [];\n for (let ei = 0; ei < extLinks.length; ei++) {\n const elIdx = ei + 1;\n const elRid = ctx.workbookRels.relationshipCount + 1;\n ctx.workbookRels.addRelationship(\n elRid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink\",\n `externalLinks/externalLink${elIdx}.xml`,\n );\n\n // Create the rels file for this external link\n const elOpts = extLinks[ei];\n let bookRId: string | undefined;\n if (elOpts.externalBook?.target) {\n const elRels = new Relationships();\n elRels.addRelationship(\n 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath\",\n elOpts.externalBook.target,\n TargetModeType.EXTERNAL,\n );\n bookRId = \"rId1\";\n mapping[`ExternalLinkRels${elIdx}`] = {\n data: XML_DECL + elRels.serialize(),\n path: `xl/externalLinks/_rels/externalLink${elIdx}.xml.rels`,\n };\n }\n\n // Generate the external link XML\n mapping[`ExternalLink${elIdx}`] = {\n data: XML_DECL + externalLinkDesc.stringify({ ...elOpts, bookRId }, ctx),\n path: `xl/externalLinks/externalLink${elIdx}.xml`,\n };\n\n extRefs.push({ rId: `rId${elRid}` });\n ctx.contentTypes.addExternalLink(elIdx);\n }\n\n // Inject externalReferences into workbook XML\n const extRefsXml = buildExternalReferencesXml(extRefs);\n wbXml = wbXml.replace(\"<!--EXTERNAL_REFS-->\", extRefsXml);\n } else {\n wbXml = wbXml.replace(\"<!--EXTERNAL_REFS-->\", \"\");\n }\n\n mapping[\"Workbook\"] = {\n data: `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${wbXml}`,\n path: \"xl/workbook.xml\",\n };\n\n // Workbook relationships\n mapping[\"WorkbookRelationships\"] = {\n data: XML_DECL + ctx.workbookRels.serialize(),\n path: \"xl/_rels/workbook.xml.rels\",\n };\n\n // Shared Strings — AFTER worksheets so all strings are collected\n if (ctx.sharedStrings.count > 0) {\n const ssXml = sharedStringsDesc.stringify(ctx.sharedStrings.toDescriptorOptions(), ctx);\n mapping[\"SharedStrings\"] = {\n data: `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${ssXml}`,\n path: \"xl/sharedStrings.xml\",\n };\n }\n\n // Styles (via descriptor — delegates to Styles.toXml internally)\n const stylesXml = stylesDesc.stringify({ styles: ctx.styles }, ctx);\n mapping[\"Styles\"] = {\n data: `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${stylesXml}`,\n path: \"xl/styles.xml\",\n };\n\n // Theme\n mapping[\"Theme\"] = {\n data: XML_DECL + createThemeXml(),\n path: \"xl/theme/theme1.xml\",\n };\n\n // Charts — AFTER worksheets so charts are registered\n for (let i = 0; i < ctx.charts.array.length; i++) {\n const chartData = ctx.charts.array[i];\n mapping[`Chart${i}`] = {\n data: XML_DECL + chartData.chartSpaceXml,\n path: `xl/charts/chart${i + 1}.xml`,\n };\n ctx.contentTypes.addChart(i + 1);\n }\n\n // Calculation chain — auto-generated from formula cells\n if (calcCells.length > 0) {\n mapping[\"CalcChain\"] = {\n data: calcChainDesc.stringify({ cells: calcCells }, ctx) ?? \"\",\n path: \"xl/calcChain.xml\",\n };\n ctx.contentTypes.addCalcChain();\n const calcChainRid = ctx.workbookRels.relationshipCount + 1;\n ctx.workbookRels.addRelationship(\n calcChainRid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain\",\n \"calcChain.xml\",\n );\n }\n\n // Register image content types\n const imageExts = new Set<string>();\n for (const img of ctx.media.array) {\n const ext = img.fileName.endsWith(\".png\") ? \"png\" : \"jpeg\";\n if (!imageExts.has(ext)) {\n imageExts.add(ext);\n ctx.contentTypes.addImageType(ext as \"png\" | \"jpeg\");\n }\n }\n\n // Content Types — must be last\n mapping[\"ContentTypes\"] = {\n data: XML_DECL + ctx.contentTypes.serialize(),\n path: \"[Content_Types].xml\",\n };\n\n // Convert mapping to Zippable\n const mediaFiles: Array<{ data: Uint8Array; path: string }> = [];\n for (const img of ctx.media.array) {\n mediaFiles.push({ data: img.data, path: `xl/media/${img.fileName}` });\n }\n\n return compileMapping(mapping, overrides, mediaFiles, mediaLevel);\n}\n\n// ── Pure helper functions ──\n\nfunction buildFileRelationships(): Relationships {\n const rels = new Relationships();\n rels.addRelationship(\n 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n \"xl/workbook.xml\",\n );\n rels.addRelationship(\n 2,\n \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\",\n \"docProps/core.xml\",\n );\n rels.addRelationship(\n 3,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\",\n \"docProps/app.xml\",\n );\n return rels;\n}\n\nfunction buildWorkbookRelationships(rels: Relationships, wsCount: number, csCount: number): void {\n let rid = 1;\n for (let i = 0; i < wsCount; i++) {\n rels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\",\n `worksheets/sheet${i + 1}.xml`,\n );\n }\n for (let i = 0; i < csCount; i++) {\n rels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet\",\n `chartsheets/sheet${i + 1}.xml`,\n );\n }\n rels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\",\n \"styles.xml\",\n );\n rels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n \"theme/theme1.xml\",\n );\n rels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\",\n \"sharedStrings.xml\",\n );\n}\n\nfunction extractPivotSourceData(\n rows: import(\"@parts/worksheet\").RowOptions[],\n sourceRef: string,\n): PivotSourceData {\n const parts = sourceRef.split(\":\");\n const startMatch = parts[0]?.match(/^([A-Z]+)(\\d+)$/);\n const endMatch = parts[1]?.match(/^([A-Z]+)(\\d+)$/);\n if (!startMatch) {\n return { fieldNames: [], records: [] };\n }\n\n const startRow = parseInt(startMatch[2], 10) - 1;\n const endRow = endMatch ? parseInt(endMatch[2], 10) - 1 : startRow;\n const startCol = colLetterToIndex(startMatch[1]);\n const endCol = endMatch ? colLetterToIndex(endMatch[1]) : startCol;\n const colCount = endCol - startCol + 1;\n\n // First row is headers\n const headerRow = rows[startRow];\n const fieldNames: string[] = [];\n if (headerRow?.cells) {\n for (let c = startCol; c <= endCol && c < headerRow.cells.length; c++) {\n const hv = headerRow.cells[c]?.value;\n fieldNames.push(\n typeof hv === \"string\"\n ? hv\n : typeof hv === \"number\" || typeof hv === \"boolean\"\n ? String(hv)\n : `Col${c}`,\n );\n }\n }\n\n // Remaining rows are data\n const records: (string | number)[][] = [];\n for (let r = startRow + 1; r <= endRow; r++) {\n const row = rows[r];\n if (!row?.cells) continue;\n const record: (string | number)[] = [];\n for (let c = startCol; c <= endCol; c++) {\n const val = row.cells[c]?.value;\n if (typeof val === \"number\") {\n record.push(val);\n } else if (val instanceof Date) {\n record.push(val.getTime());\n } else {\n record.push(typeof val === \"string\" ? val : typeof val === \"boolean\" ? String(val) : \"\");\n }\n }\n if (record.length === colCount) {\n records.push(record);\n }\n }\n\n return { fieldNames, records };\n}\n\nfunction colLetterToIndex(letters: string): number {\n let col = 0;\n for (let i = 0; i < letters.length; i++) {\n col = col * 26 + (letters.charCodeAt(i) - 64);\n }\n return col - 1;\n}\n\nfunction renderPivotSheetData(\n pivotOpts: PivotTableOptions[],\n worksheetConfigs: import(\"@parts/worksheet\").WorksheetOptions[],\n sharedStrings: import(\"@parts/shared-strings\").SharedStrings,\n currentSheetName: string,\n): { sheetData: string; dimensionRef: string } {\n const rowCells = new Map<number, string[]>();\n let maxRow = 0;\n let maxCol = 0;\n let minRow = Infinity;\n let minCol = Infinity;\n\n for (const pt of pivotOpts) {\n const location = pt.location ?? \"A3\";\n const locMatch = location.match(/^([A-Z]+)(\\d+)$/);\n if (!locMatch) continue;\n\n const startCol = colLetterToIndex(locMatch[1]);\n const startRow = parseInt(locMatch[2], 10);\n const rowFieldNames = pt.rows;\n const dataFields = pt.data;\n\n const sourceSheetName = pt.sourceSheet ?? currentSheetName;\n const sourceWsIdx = worksheetConfigs.findIndex(\n (ws) => (ws.name ?? `Sheet${worksheetConfigs.indexOf(ws) + 1}`) === sourceSheetName,\n );\n if (sourceWsIdx === -1) continue;\n\n const sourceRows = worksheetConfigs[sourceWsIdx]?.rows ?? [];\n const sourceData = extractPivotSourceData(sourceRows, pt.source);\n if (sourceData.fieldNames.length === 0) continue;\n\n const fields = sourceData.fieldNames;\n const rowFieldIndices = rowFieldNames.map((n) => fields.indexOf(n));\n const dataFieldIndices = dataFields.map((df) => fields.indexOf(df.field));\n\n if (rowFieldIndices.some((idx) => idx === -1)) continue;\n if (dataFieldIndices.some((idx) => idx === -1)) continue;\n\n // Group records by row field values\n const groupMap = new Map<string, { keys: (string | number)[]; values: number[][] }>();\n for (const record of sourceData.records) {\n const groupKey = rowFieldIndices.map((fi) => String(record[fi])).join(\"|\");\n let group = groupMap.get(groupKey);\n if (!group) {\n group = {\n keys: rowFieldIndices.map((fi) => {\n const v = record[fi];\n return typeof v === \"string\" || typeof v === \"number\" ? v : String(v ?? \"\");\n }),\n values: dataFieldIndices.map(() => []),\n };\n groupMap.set(groupKey, group);\n }\n for (let di = 0; di < dataFieldIndices.length; di++) {\n const val = record[dataFieldIndices[di]];\n if (typeof val === \"number\") {\n group.values[di].push(val);\n }\n }\n }\n\n // Column field info for cross-tab layout\n const colFieldNames = pt.columns ?? [];\n const colFieldIndices = colFieldNames.map((n) => fields.indexOf(n));\n\n const addCells = (rowIdx: number, cells: string[]) => {\n let arr = rowCells.get(rowIdx);\n if (!arr) {\n arr = [];\n rowCells.set(rowIdx, arr);\n }\n arr.push(...cells);\n minRow = Math.min(minRow, rowIdx);\n maxRow = Math.max(maxRow, rowIdx);\n };\n\n if (colFieldIndices.length > 0 && !colFieldIndices.some((idx) => idx === -1)) {\n // --- Cross-tab layout (with column fields) ---\n // Unique column values for the first column field\n const colUniqueVals = collectUniqueValues(sourceData.records, colFieldIndices[0]).map((v) =>\n typeof v === \"string\" || typeof v === \"number\" ? String(v) : String(v ?? \"\"),\n );\n\n // Build cross-tab map: rowKey → colKey → aggregated values per data field\n const crossTabMap = new Map<\n string,\n { rowKeys: (string | number)[]; colData: Map<string, number[][]>; rowTotals: number[][] }\n >();\n for (const record of sourceData.records) {\n const rowKey = rowFieldIndices.map((fi) => String(record[fi])).join(\"|\");\n const colKey = colFieldIndices.map((fi) => String(record[fi])).join(\"|\");\n let entry = crossTabMap.get(rowKey);\n if (!entry) {\n entry = {\n rowKeys: rowFieldIndices.map((fi) => {\n const v = record[fi];\n return typeof v === \"string\" || typeof v === \"number\" ? v : String(v ?? \"\");\n }),\n colData: new Map(),\n rowTotals: dataFieldIndices.map(() => []),\n };\n crossTabMap.set(rowKey, entry);\n }\n let colValues = entry.colData.get(colKey);\n if (!colValues) {\n colValues = dataFieldIndices.map(() => []);\n entry.colData.set(colKey, colValues);\n }\n for (let di = 0; di < dataFieldIndices.length; di++) {\n const val = record[dataFieldIndices[di]];\n if (typeof val === \"number\") {\n colValues[di].push(val);\n entry.rowTotals[di].push(val);\n }\n }\n }\n\n // Column count: row fields + column unique values + 1 (grand total column)\n const numColVals = colUniqueVals.length;\n const totalCols = rowFieldNames.length + numColVals + 1;\n const endCol = startCol + totalCols - 1;\n minCol = Math.min(minCol, startCol);\n maxCol = Math.max(maxCol, endCol);\n\n // Header row: [rowFieldName(s), ...colUniqueVals, dataFieldName or \"Grand Total\"]\n const headerCells: string[] = [];\n for (const rfName of rowFieldNames) {\n const cellRef = colIndexToLetter(startCol + headerCells.length) + startRow;\n const strIdx = sharedStrings.register(rfName);\n headerCells.push(`<c r=\"${cellRef}\" t=\"s\"><v>${strIdx}</v></c>`);\n }\n for (const cv of colUniqueVals) {\n const cellRef = colIndexToLetter(startCol + headerCells.length) + startRow;\n const strIdx = sharedStrings.register(cv);\n headerCells.push(`<c r=\"${cellRef}\" t=\"s\"><v>${strIdx}</v></c>`);\n }\n // Last header cell: data field name (e.g., \"Total Revenue\")\n {\n const cellRef = colIndexToLetter(startCol + headerCells.length) + startRow;\n const df0 = dataFields[0];\n const subtotal = df0.summarize ?? \"sum\";\n const dfName = df0.name ?? `${subtotal === \"sum\" ? \"Sum\" : subtotal} of ${df0.field}`;\n const strIdx = sharedStrings.register(dfName);\n headerCells.push(`<c r=\"${cellRef}\" t=\"s\"><v>${strIdx}</v></c>`);\n }\n addCells(startRow, headerCells);\n\n // Data rows\n let currentRow = startRow + 1;\n for (const [, entry] of crossTabMap) {\n const cells: string[] = [];\n // Row label\n for (let ri = 0; ri < entry.rowKeys.length; ri++) {\n const cellRef = colIndexToLetter(startCol + ri) + currentRow;\n const strIdx = sharedStrings.register(String(entry.rowKeys[ri]));\n cells.push(`<c r=\"${cellRef}\" t=\"s\"><v>${strIdx}</v></c>`);\n }\n // Column values for each unique column value\n for (let ci = 0; ci < numColVals; ci++) {\n const colKey = colUniqueVals[ci];\n const colValues = entry.colData.get(colKey);\n const colOffset = rowFieldNames.length + ci;\n const cellRef = colIndexToLetter(startCol + colOffset) + currentRow;\n const subtotal = dataFields[0].summarize ?? \"sum\";\n const result = colValues ? aggregate(colValues[0], subtotal) : 0;\n cells.push(`<c r=\"${cellRef}\"><v>${result}</v></c>`);\n }\n // Row total (last column)\n {\n const colOffset = rowFieldNames.length + numColVals;\n const cellRef = colIndexToLetter(startCol + colOffset) + currentRow;\n const subtotal = dataFields[0].summarize ?? \"sum\";\n const result = aggregate(entry.rowTotals[0], subtotal);\n cells.push(`<c r=\"${cellRef}\"><v>${result}</v></c>`);\n }\n addCells(currentRow, cells);\n currentRow++;\n }\n\n // Grand total row\n const gtCells: string[] = [];\n const gtStrIdx = sharedStrings.register(\"Grand Total\");\n gtCells.push(\n `<c r=\"${colIndexToLetter(startCol)}${currentRow}\" t=\"s\"><v>${gtStrIdx}</v></c>`,\n );\n for (let ci = 0; ci < numColVals; ci++) {\n const colKey = colUniqueVals[ci];\n const subtotal = dataFields[0].summarize ?? \"sum\";\n const colAllValues: number[] = [];\n for (const record of sourceData.records) {\n const recColKey = colFieldIndices.map((fi) => String(record[fi])).join(\"|\");\n if (recColKey === colKey) {\n const val = record[dataFieldIndices[0]];\n if (typeof val === \"number\") colAllValues.push(val);\n }\n }\n const colOffset = rowFieldNames.length + ci;\n const cellRef = colIndexToLetter(startCol + colOffset) + currentRow;\n const result = aggregate(colAllValues, subtotal);\n gtCells.push(`<c r=\"${cellRef}\"><v>${result}</v></c>`);\n }\n // Grand total (bottom-right)\n {\n const subtotal = dataFields[0].summarize ?? \"sum\";\n const allValues = sourceData.records\n .map((r) => r[dataFieldIndices[0]])\n .filter((v): v is number => typeof v === \"number\");\n const colOffset = rowFieldNames.length + numColVals;\n const cellRef = colIndexToLetter(startCol + colOffset) + currentRow;\n const result = aggregate(allValues, subtotal);\n gtCells.push(`<c r=\"${cellRef}\"><v>${result}</v></c>`);\n }\n addCells(currentRow, gtCells);\n } else {\n // --- Simple layout (no column fields) ---\n const endCol = startCol + rowFieldNames.length + dataFields.length - 1;\n minCol = Math.min(minCol, startCol);\n maxCol = Math.max(maxCol, endCol);\n\n // Header row\n const headerCells: string[] = [];\n for (const rfName of rowFieldNames) {\n const cellRef = colIndexToLetter(startCol + headerCells.length) + startRow;\n const strIdx = sharedStrings.register(rfName);\n headerCells.push(`<c r=\"${cellRef}\" t=\"s\"><v>${strIdx}</v></c>`);\n }\n for (const df of dataFields) {\n const cellRef = colIndexToLetter(startCol + headerCells.length) + startRow;\n const subtotal = df.summarize ?? \"sum\";\n const dfName = df.name ?? `${subtotal === \"sum\" ? \"Sum\" : subtotal} of ${df.field}`;\n const strIdx = sharedStrings.register(dfName);\n headerCells.push(`<c r=\"${cellRef}\" t=\"s\"><v>${strIdx}</v></c>`);\n }\n addCells(startRow, headerCells);\n\n // Data rows\n let currentRow = startRow + 1;\n for (const [, group] of groupMap) {\n const cells: string[] = [];\n for (let ri = 0; ri < group.keys.length; ri++) {\n const cellRef = colIndexToLetter(startCol + ri) + currentRow;\n const strIdx = sharedStrings.register(String(group.keys[ri]));\n cells.push(`<c r=\"${cellRef}\" t=\"s\"><v>${strIdx}</v></c>`);\n }\n for (let di = 0; di < dataFields.length; di++) {\n const colOffset = rowFieldNames.length + di;\n const cellRef = colIndexToLetter(startCol + colOffset) + currentRow;\n const subtotal = dataFields[di].summarize ?? \"sum\";\n const result = aggregate(group.values[di], subtotal);\n cells.push(`<c r=\"${cellRef}\"><v>${result}</v></c>`);\n }\n addCells(currentRow, cells);\n currentRow++;\n }\n\n // Grand total row\n const gtCells: string[] = [];\n const gtStrIdx = sharedStrings.register(\"Grand Total\");\n gtCells.push(\n `<c r=\"${colIndexToLetter(startCol)}${currentRow}\" t=\"s\"><v>${gtStrIdx}</v></c>`,\n );\n for (let di = 0; di < dataFields.length; di++) {\n const colOffset = rowFieldNames.length + di;\n const cellRef = colIndexToLetter(startCol + colOffset) + currentRow;\n const subtotal = dataFields[di].summarize ?? \"sum\";\n const allValues = sourceData.records\n .map((r) => r[dataFieldIndices[di]])\n .filter((v): v is number => typeof v === \"number\");\n const result = aggregate(allValues, subtotal);\n gtCells.push(`<c r=\"${cellRef}\"><v>${result}</v></c>`);\n }\n addCells(currentRow, gtCells);\n }\n }\n\n if (rowCells.size === 0) return { sheetData: \"\", dimensionRef: \"\" };\n\n // Build sheetData\n const parts: string[] = [\"<sheetData>\"];\n const sortedRows = [...rowCells.entries()].sort((a, b) => a[0] - b[0]);\n for (const [rowIdx, cells] of sortedRows) {\n parts.push(`<row r=\"${rowIdx}\" x14ac:dyDescent=\"0.25\">`);\n parts.push(...cells);\n parts.push(\"</row>\");\n }\n parts.push(\"</sheetData>\");\n\n const dimStartCol = colIndexToLetter(minCol === Infinity ? 0 : minCol);\n const dimStartRow = minRow === Infinity ? 1 : minRow;\n const dimensionRef = `${dimStartCol}${dimStartRow}:${colIndexToLetter(maxCol)}${maxRow}`;\n return { sheetData: parts.join(\"\"), dimensionRef };\n}\n\nfunction colIndexToLetter(col: number): string {\n let result = \"\";\n let n = col + 1;\n while (n > 0) {\n n--;\n result = String.fromCharCode(65 + (n % 26)) + result;\n n = Math.floor(n / 26);\n }\n return result;\n}\n\nfunction columnToLetter(col: number): string {\n let result = \"\";\n let n = col;\n while (n > 0) {\n const remainder = (n - 1) % 26;\n result = String.fromCharCode(65 + remainder) + result;\n n = Math.floor((n - 1) / 26);\n }\n return result;\n}\n","/**\n * Pure function API for generating XLSX files.\n *\n * @module\n */\n\nimport { createPacker, OoxmlMimeType } from \"@office-open/core\";\nimport type { OutputByType, OutputType, PackerOptions } from \"@office-open/core\";\nimport type { WorkbookOptions } from \"@parts/file\";\n\nimport { compileWorkbook } from \"./compiler\";\n\n/** @internal Packer instance for XLSX generation. */\nconst Packer = createPacker<WorkbookOptions>({\n compile: (options, overrides, mediaLevel) => compileWorkbook(options, overrides, mediaLevel),\n mimeType: OoxmlMimeType.XLSX,\n});\n\n/**\n * Generate an XLSX file from pure JSON options.\n *\n * The output format is controlled by `packerOptions.type` (default: `\"nodebuffer\"` → Buffer).\n * For synchronous generation, use {@link generateWorkbookSync}. For streaming, use {@link generateWorkbookStream}.\n *\n * @param options - Workbook options (worksheets, styles, etc.)\n * @param packerOptions - Optional packer configuration (type, compression, overrides, etc.)\n *\n * @example\n * ```typescript\n * import { generateWorkbook } from \"@office-open/xlsx\";\n *\n * const buffer = await generateWorkbook({ worksheets: [...] });\n * const bytes = await generateWorkbook({ worksheets: [...] }, { type: \"uint8array\" });\n * const blob = await generateWorkbook({ worksheets: [...] }, { type: \"blob\" });\n * ```\n */\nexport function generateWorkbook<T extends OutputType = \"nodebuffer\">(\n options: WorkbookOptions,\n packerOptions?: PackerOptions<T>,\n): Promise<OutputByType[T]> {\n return Packer.pack(options, packerOptions) as Promise<OutputByType[T]>;\n}\n\n/**\n * Synchronously generate an XLSX file from pure JSON options.\n */\nexport function generateWorkbookSync<T extends OutputType = \"nodebuffer\">(\n options: WorkbookOptions,\n packerOptions?: PackerOptions<T>,\n): OutputByType[T] {\n return Packer.packSync(options, packerOptions) as OutputByType[T];\n}\n\n/**\n * Generate an XLSX file as a `ReadableStream<Uint8Array>`.\n */\nexport function generateWorkbookStream(\n options: WorkbookOptions,\n packerOptions?: PackerOptions,\n): ReadableStream<Uint8Array> {\n return Packer.toStream(options, packerOptions);\n}\n"],"mappings":"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"}
|