@office-open/xlsx 0.10.12 → 0.10.14

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.
@@ -1 +0,0 @@
1
- {"version":3,"file":"context-D_9UIEwJ.mjs","names":["R_NS"],"sources":["../src/parts/styles.ts","../src/parts/calc-chain.ts","../src/parts/chartsheet.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/parts/revision-log.ts","../src/parts/content-types.ts","../src/context.ts"],"sourcesContent":["/**\n * Styles component — generates xl/styles.xml.\n *\n * XLSX uses an index-based style system: cells reference style entries\n * via the `s` attribute, which is an index into `cellXfs`.\n *\n * @module\n */\nimport type { CustomDescriptor, WriteContext } from \"@office-open/core/descriptor\";\nimport { attrs, escapeXml, findChild, attr, attrNum, stringify } from \"@office-open/xml\";\nimport type { Element as XmlElement } from \"@office-open/xml\";\n\n// ── Sub-style option interfaces ──\n\nexport interface FontOptions {\n bold?: boolean;\n italic?: boolean;\n underline?: boolean;\n strike?: boolean;\n size?: number;\n color?: string;\n font?: string;\n /** Character set (CT_Font/charset @val) */\n charset?: number;\n /** Font family (CT_Font/family @val) */\n family?: number;\n /** Condense (macOS, CT_Font/condense) */\n condense?: boolean;\n /** Extend (macOS, CT_Font/extend) */\n extend?: boolean;\n /** Vertical alignment: superscript/subscript (CT_Font/vertAlign @val) */\n vertAlign?: \"superscript\" | \"subscript\" | \"baseline\";\n /** Font scheme (CT_Font/scheme @val) */\n scheme?: \"major\" | \"minor\" | \"none\";\n /** Font shadow (CT_Font/shadow) */\n shadow?: boolean;\n /** Font outline (CT_Font/outline) */\n outline?: boolean;\n}\n\n/** Gradient stop (CT_GradientStop) */\nexport interface GradientStopOptions {\n /** Position (0.0–1.0) */\n position: number;\n /** RGB color hex without alpha, e.g. \"FF0000\" */\n color: string;\n}\n\nexport interface FillOptions {\n type?: \"solid\" | \"pattern\" | \"gradient\";\n color?: string;\n patternType?: string;\n /** Background color for pattern fill (CT_PatternFill/bgColor) */\n bgColor?: string;\n /** Background color indexed (CT_Color @indexed) */\n colorIndexed?: number;\n /** Gradient stops (CT_GradientFill/stop) */\n stops?: GradientStopOptions[];\n /** Gradient type (CT_GradientFill @type) */\n gradientType?: \"linear\" | \"path\";\n /** Gradient degree for linear (CT_GradientFill @degree) */\n gradientDegree?: number;\n /** Gradient left position for path (CT_GradientFill @left) */\n gradientLeft?: number;\n /** Gradient right position for path (CT_GradientFill @right) */\n gradientRight?: number;\n /** Gradient top position for path (CT_GradientFill @top) */\n gradientTop?: number;\n /** Gradient bottom position for path (CT_GradientFill @bottom) */\n gradientBottom?: number;\n}\n\nexport interface BorderOptions {\n style?: \"thin\" | \"medium\" | \"thick\" | \"dotted\" | \"dashed\" | \"hair\" | \"none\";\n color?: string;\n}\n\nexport interface BorderSideOptions {\n top?: BorderOptions;\n bottom?: BorderOptions;\n left?: BorderOptions;\n right?: BorderOptions;\n diagonal?: BorderOptions;\n /** Diagonal up (CT_Border @diagonalUp) — on the parent border element */\n diagonalUp?: boolean;\n /** Diagonal down (CT_Border @diagonalDown) — on the parent border element */\n diagonalDown?: boolean;\n /** Leading edge border (CT_Border/start, for RTL support) */\n start?: BorderOptions;\n /** Trailing edge border (CT_Border/end, for RTL support) */\n end?: BorderOptions;\n /** Vertical inner border (CT_Border/vertical, for cell range borders) */\n vertical?: BorderOptions;\n /** Horizontal inner border (CT_Border/horizontal, for cell range borders) */\n horizontal?: BorderOptions;\n}\n\nexport interface AlignmentOptions {\n horizontal?: \"left\" | \"center\" | \"right\" | \"fill\" | \"justify\";\n vertical?: \"top\" | \"center\" | \"bottom\";\n wrapText?: boolean;\n textRotation?: number;\n indent?: number;\n /** Relative indent (CT_CellAlignment @relativeIndent) */\n relativeIndent?: number;\n /** Justify last line (CT_CellAlignment @justifyLastLine) */\n justifyLastLine?: boolean;\n /** Shrink to fit (CT_CellAlignment @shrinkToFit) */\n shrinkToFit?: boolean;\n /** Reading order (CT_CellAlignment @readingOrder) */\n readingOrder?: number;\n}\n\nexport interface StyleOptions {\n font?: FontOptions;\n fill?: FillOptions;\n border?: BorderSideOptions;\n numFmt?: string;\n alignment?: AlignmentOptions;\n /** Quote prefix (CT_Xf @quotePrefix) */\n quotePrefix?: boolean;\n /** Pivot button (CT_Xf @pivotButton) */\n pivotButton?: boolean;\n /** Apply protection (CT_Xf @applyProtection) */\n applyProtection?: boolean;\n /** Cell protection (CT_CellProtection) */\n protection?: CellProtectionOptions;\n}\n\n/** Cell-level protection settings (CT_CellProtection) */\nexport interface CellProtectionOptions {\n /** Cell is locked (CT_CellProtection @locked) */\n locked?: boolean;\n /** Cell formula is hidden (CT_CellProtection @hidden) */\n hidden?: boolean;\n}\n\n/** Indexed color entry (CT_RgbColor) */\nexport interface IndexedColorOptions {\n /** RGB hex value, e.g. \"FF000000\" */\n rgb: string;\n}\n\n/** Colors palette (CT_Colors) */\nexport interface ColorsOptions {\n /** Indexed color palette (CT_IndexedColors) */\n indexedColors?: IndexedColorOptions[];\n /** Most recently used colors (CT_MRUColors) */\n mruColors?: string[];\n}\n\n/** Differential format — used by conditional formatting to specify what changes. */\nexport interface DxfOptions {\n font?: FontOptions;\n fill?: FillOptions;\n border?: BorderSideOptions;\n numFmt?: string;\n}\n\n// ── Style key helpers for deduplication ──\n\nfunction fontKey(f: FontOptions): string {\n return `b${f.bold ? 1 : 0}i${f.italic ? 1 : 0}u${f.underline ? 1 : 0}s${f.strike ? 1 : 0}z${f.size ?? 0}c${f.color ?? \"\"}n${f.font ?? \"\"}cs${f.charset ?? \"\"}fm${f.family ?? \"\"}co${f.condense ? 1 : 0}ex${f.extend ? 1 : 0}va${f.vertAlign ?? \"\"}sc${f.scheme ?? \"\"}sh${f.shadow ? 1 : 0}ol${f.outline ? 1 : 0}`;\n}\n\nfunction fillKey(f: FillOptions): string {\n return `t${f.type ?? \"\"}c${f.color ?? \"\"}p${f.patternType ?? \"\"}bg${f.bgColor ?? \"\"}g${f.stops?.map((s) => `${s.position}_${s.color}`).join(\"|\") ?? \"\"}`;\n}\n\nfunction borderKey(b: BorderSideOptions): string {\n const sk = (o?: BorderOptions) => `${o?.style ?? \"\"}_${o?.color ?? \"\"}`;\n return `t${sk(b.top)}b${sk(b.bottom)}l${sk(b.left)}r${sk(b.right)}d${sk(b.diagonal)}du${b.diagonalUp ? 1 : 0}dd${b.diagonalDown ? 1 : 0}st${sk(b.start)}en${sk(b.end)}v${sk(b.vertical)}h${sk(b.horizontal)}`;\n}\n\n// ── Built-in number format IDs ──\n\nconst BUILTIN_NUMFMTS: Record<string, number> = {\n General: 0,\n \"0\": 1,\n \"0.00\": 2,\n \"#,##0\": 3,\n \"#,##0.00\": 4,\n \"0%\": 9,\n \"0.00%\": 10,\n \"0.00E+00\": 11,\n \"mm-dd-yy\": 14,\n \"d-mmm-yy\": 15,\n \"d-mmm\": 16,\n \"mmm-yy\": 17,\n \"h:mm AM/PM\": 18,\n \"h:mm:ss AM/PM\": 19,\n \"h:mm\": 20,\n \"h:mm:ss\": 21,\n \"m/d/yy h:mm\": 22,\n \"#,##0 ;(#,##0)\": 37,\n \"#,##0 ;[Red](#,##0)\": 38,\n \"#,##0.00;(#,##0.00)\": 39,\n \"#,##0.00;[Red](#,##0.00)\": 40,\n \"mm:ss\": 45,\n \"[h]:mm:ss\": 46,\n \"mmss.0\": 47,\n \"##0.0E+0\": 48,\n \"@\": 49,\n};\n\n/** Table style element type (ST_TableStyleType). */\nexport type TableStyleElementType =\n | \"wholeTable\"\n | \"headerRow\"\n | \"totalRow\"\n | \"firstColumn\"\n | \"lastColumn\"\n | \"firstRowStripe\"\n | \"secondRowStripe\"\n | \"firstColumnStripe\"\n | \"secondColumnStripe\"\n | \"firstHeaderCell\"\n | \"lastHeaderCell\"\n | \"firstTotalCell\"\n | \"lastTotalCell\"\n | \"subtotalRow1\"\n | \"subtotalRow2\"\n | \"subtotalRow3\"\n | \"subtotalColumn1\"\n | \"subtotalColumn2\"\n | \"subtotalColumn3\"\n | \"blankRow\"\n | \"firstColumnSubheading\"\n | \"secondColumnSubheading\"\n | \"thirdColumnSubheading\"\n | \"firstRowSubheading\"\n | \"secondRowSubheading\"\n | \"thirdRowSubheading\"\n | \"pageFieldLabels\"\n | \"pageFieldValues\";\n\n/** Table style element (CT_TableStyleElement). */\nexport interface TableStyleElementOptions {\n /** Element type */\n type: TableStyleElementType;\n /** Differential format index (dxf) */\n dxfId?: number;\n /** Button style (for pivot tables) */\n button?: boolean;\n}\n\n/** Custom table/pivot table style (CT_TableStyle). */\n/** Style sheet extension (CT_Extension) */\nexport interface StyleExtensionOptions {\n /** Extension URI (required) */\n uri: string;\n /** Extension content (raw XML fragment) */\n content?: string;\n}\n\nexport interface CustomTableStyleOptions {\n /** Style name (must be unique) */\n name: string;\n /** Pivot style (vs table style) */\n pivot?: boolean;\n /** Table style elements */\n elements?: TableStyleElementOptions[];\n}\n\n/** Custom cell style (CT_CellStyle) */\nexport interface CustomCellStyleOptions {\n /** Style name */\n name: string;\n /** XF index to apply */\n xfId: number;\n /** Built-in ID */\n builtinId?: number;\n /** Custom built-in (CT_CellStyle @customBuiltin) */\n customBuiltin?: boolean;\n /** Outline level (CT_CellStyle @iLevel) */\n iLevel?: number;\n /** Hidden style (CT_CellStyle @hidden) */\n hidden?: boolean;\n}\n\n/** Cell XF entry exposed by Styles.toDescriptorOptions(). */\nexport interface CellXfEntry {\n fontId: number;\n fillId: number;\n borderId: number;\n numFmtId: number;\n alignment?: AlignmentOptions;\n quotePrefix?: boolean;\n pivotButton?: boolean;\n applyProtection?: boolean;\n protection?: CellProtectionOptions;\n}\n\n/** Snapshot of Styles internal state for descriptor-based XML generation. */\nexport interface StylesState {\n customNumFmts: ReadonlyMap<string, number>;\n fonts: FontOptions[];\n fills: FillOptions[];\n borders: BorderSideOptions[];\n cellXfs: CellXfEntry[];\n dxfs: DxfOptions[];\n colors?: ColorsOptions;\n tableStyles?: CustomTableStyleOptions[];\n customCellStyles?: CustomCellStyleOptions[];\n styleExtensions?: StyleExtensionOptions[];\n}\n\n/**\n * Indexed XF reference produced by {@link stylesDesc}.parse — index-based\n * (fontId/fillId/…) rather than resolved objects, consumed by callers that\n * resolve indices into fonts/fills/borders arrays.\n */\nexport interface IndexedXfEntry {\n fontId?: number;\n fillId?: number;\n borderId?: number;\n numFmtId?: number;\n alignment?: AlignmentOptions;\n protection?: CellProtectionOptions;\n quotePrefix?: boolean;\n pivotButton?: boolean;\n}\n\n/** Table styles block (CT_TableStyles) produced by {@link stylesDesc}.parse. */\nexport interface TableStylesInfo {\n count?: number;\n defaultTableStyle?: string;\n defaultPivotStyle?: string;\n tableStyles?: CustomTableStyleOptions[];\n}\n\n/** Result of {@link stylesDesc}.parse (xl/styles.xml → structured data). */\nexport interface StylesParseResult {\n /** Reverse map numFmtId → formatCode, for O(1) lookup in resolveStyle. */\n customNumFmtById?: Map<number, string>;\n fonts?: FontOptions[];\n fills?: FillOptions[];\n borders?: BorderSideOptions[];\n cellStyleXfs?: IndexedXfEntry[];\n cellXfs?: IndexedXfEntry[];\n customCellStyles?: CustomCellStyleOptions[];\n dxfs?: DxfOptions[];\n tableStylesInfo?: TableStylesInfo;\n colors?: ColorsOptions;\n styleExtensions?: StyleExtensionOptions[];\n}\n\nexport class Styles {\n private fonts: FontOptions[] = [\n { size: 11, font: \"Calibri\" }, // default font (index 0)\n ];\n private fontKeys = new Map<string, number>();\n\n private fills: FillOptions[] = [\n { patternType: \"none\" }, // default fill (index 0)\n { patternType: \"gray125\" }, // required fill (index 1)\n ];\n private fillKeys = new Map<string, number>();\n\n private borders: BorderSideOptions[] = [\n {}, // default empty border (index 0)\n ];\n private borderKeys = new Map<string, number>();\n\n private customNumFmts = new Map<string, number>();\n private nextCustomNumFmtId = 164; // custom numFmts start at 164\n\n private cellXfs: Array<{\n fontId: number;\n fillId: number;\n borderId: number;\n numFmtId: number;\n alignment?: AlignmentOptions;\n quotePrefix?: boolean;\n pivotButton?: boolean;\n applyProtection?: boolean;\n protection?: CellProtectionOptions;\n }> = [\n { fontId: 0, fillId: 0, borderId: 0, numFmtId: 0 }, // default xf (index 0)\n ];\n private cellXfKeys = new Map<string, number>();\n\n private dxfs: DxfOptions[] = [];\n\n private colors?: ColorsOptions;\n private tableStyles?: CustomTableStyleOptions[];\n /** Custom cell styles (CT_CellStyles) */\n private customCellStyles?: CustomCellStyleOptions[];\n /** Style sheet extensions (CT_ExtensionList) */\n private styleExtensions?: StyleExtensionOptions[];\n\n public constructor() {\n // Pre-register default font/fill/border keys\n this.fontKeys.set(fontKey(this.fonts[0]), 0);\n this.fillKeys.set(fillKey(this.fills[0]), 0);\n this.fillKeys.set(fillKey(this.fills[1]), 1);\n this.borderKeys.set(borderKey(this.borders[0]), 0);\n this.cellXfKeys.set(this.cellXfKey(this.cellXfs[0]), 0);\n }\n\n /**\n * Register a style and return its index (for the cell `s` attribute).\n * Deduplicates across fonts, fills, borders, numFmts, and cellXfs.\n */\n public register(opts: StyleOptions): number {\n const fontId = this.registerFont(opts.font);\n const fillId = this.registerFill(opts.fill);\n const borderId = this.registerBorder(opts.border);\n const numFmtId = this.registerNumFmt(opts.numFmt);\n\n const xf = {\n fontId,\n fillId,\n borderId,\n numFmtId,\n alignment: opts.alignment,\n quotePrefix: opts.quotePrefix,\n pivotButton: opts.pivotButton,\n applyProtection: opts.applyProtection,\n protection: opts.protection,\n };\n\n const key = this.cellXfKey(xf);\n const existing = this.cellXfKeys.get(key);\n if (existing !== undefined) return existing;\n\n const idx = this.cellXfs.length;\n this.cellXfs.push(xf);\n this.cellXfKeys.set(key, idx);\n return idx;\n }\n\n /**\n * Register a differential format and return its index (dxfId).\n * Used by conditional formatting rules.\n */\n public registerDxf(opts: DxfOptions): number {\n const idx = this.dxfs.length;\n this.dxfs.push(opts);\n return idx;\n }\n\n /**\n * Set color palette (indexed colors and MRU colors).\n */\n public setColors(opts: ColorsOptions): void {\n this.colors = opts;\n }\n\n public setTableStyles(styles: CustomTableStyleOptions[]): void {\n this.tableStyles = styles;\n }\n\n public setExtensions(extensions: StyleExtensionOptions[]): void {\n this.styleExtensions = extensions;\n }\n\n public setCustomCellStyles(styles: CustomCellStyleOptions[]): void {\n this.customCellStyles = styles;\n }\n\n /**\n * Expose internal state for descriptor-based XML generation.\n * The descriptor reads this snapshot to produce xl/styles.xml.\n */\n public toDescriptorOptions(): StylesState {\n return {\n customNumFmts: new Map(this.customNumFmts),\n fonts: [...this.fonts],\n fills: [...this.fills],\n borders: [...this.borders],\n cellXfs: [...this.cellXfs],\n dxfs: [...this.dxfs],\n colors: this.colors,\n tableStyles: this.tableStyles,\n customCellStyles: this.customCellStyles,\n styleExtensions: this.styleExtensions,\n };\n }\n\n private registerFont(opts?: FontOptions): number {\n if (!opts) return 0;\n const key = fontKey(opts);\n const existing = this.fontKeys.get(key);\n if (existing !== undefined) return existing;\n\n const idx = this.fonts.length;\n this.fonts.push(opts);\n this.fontKeys.set(key, idx);\n return idx;\n }\n\n private registerFill(opts?: FillOptions): number {\n if (!opts) return 0;\n const key = fillKey(opts);\n const existing = this.fillKeys.get(key);\n if (existing !== undefined) return existing;\n\n const idx = this.fills.length;\n this.fills.push(opts);\n this.fillKeys.set(key, idx);\n return idx;\n }\n\n private registerBorder(opts?: BorderSideOptions): number {\n if (!opts) return 0;\n const key = borderKey(opts);\n const existing = this.borderKeys.get(key);\n if (existing !== undefined) return existing;\n\n const idx = this.borders.length;\n this.borders.push(opts);\n this.borderKeys.set(key, idx);\n return idx;\n }\n\n private registerNumFmt(fmt?: string): number {\n if (!fmt) return 0;\n const builtin = BUILTIN_NUMFMTS[fmt];\n if (builtin !== undefined) return builtin;\n\n const existing = this.customNumFmts.get(fmt);\n if (existing !== undefined) return existing;\n\n const id = this.nextCustomNumFmtId++;\n this.customNumFmts.set(fmt, id);\n return id;\n }\n\n private cellXfKey(xf: {\n fontId: number;\n fillId: number;\n borderId: number;\n numFmtId: number;\n alignment?: AlignmentOptions;\n quotePrefix?: boolean;\n pivotButton?: boolean;\n applyProtection?: boolean;\n protection?: CellProtectionOptions;\n }): string {\n const a = xf.alignment;\n const ak = a\n ? `h${a.horizontal ?? \"\"}v${a.vertical ?? \"\"}w${a.wrapText ? 1 : 0}r${a.textRotation ?? \"\"}i${a.indent ?? \"\"}ri${a.relativeIndent ?? \"\"}jl${a.justifyLastLine ? 1 : 0}st${a.shrinkToFit ? 1 : 0}ro${a.readingOrder ?? \"\"}`\n : \"\";\n const pr = xf.protection;\n const pk = pr ? `l${pr.locked ?? \"\"}h${pr.hidden ?? \"\"}` : \"\";\n return `${xf.fontId}|${xf.fillId}|${xf.borderId}|${xf.numFmtId}|${ak}|qp${xf.quotePrefix ? 1 : 0}|pb${xf.pivotButton ? 1 : 0}|${pk}`;\n }\n\n // ── XML generation ──\n\n /**\n * Zero-allocation fast path: directly concatenate XML string.\n * Bypasses the IXmlableObject intermediate tree entirely.\n */\n /** Serialize to xl/styles.xml content (without XML declaration). */\n public serialize(): string {\n const p: string[] = [\n '<styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">',\n ];\n\n // numFmts\n if (this.customNumFmts.size > 0) {\n p.push(`<numFmts count=\"${this.customNumFmts.size}\">`);\n for (const [fmt, id] of this.customNumFmts) {\n p.push(`<numFmt numFmtId=\"${id}\" formatCode=\"${escapeXml(fmt)}\"/>`);\n }\n p.push(\"</numFmts>\");\n }\n\n // fonts\n p.push(`<fonts count=\"${this.fonts.length}\">`);\n for (const f of this.fonts) {\n p.push(`<font>${this.fontXmlStr(f)}</font>`);\n }\n p.push(\"</fonts>\");\n\n // fills\n p.push(`<fills count=\"${this.fills.length}\">`);\n for (const f of this.fills) {\n if (f.type === \"gradient\" && f.stops && f.stops.length > 0) {\n const gfAttrs: Record<string, string | number | boolean | undefined> = {};\n if (f.gradientType && f.gradientType !== \"linear\") gfAttrs.type = f.gradientType;\n if (f.gradientDegree !== undefined) gfAttrs.degree = f.gradientDegree;\n if (f.gradientLeft !== undefined) gfAttrs.left = f.gradientLeft;\n if (f.gradientRight !== undefined) gfAttrs.right = f.gradientRight;\n if (f.gradientTop !== undefined) gfAttrs.top = f.gradientTop;\n if (f.gradientBottom !== undefined) gfAttrs.bottom = f.gradientBottom;\n const stopParts = f.stops\n .map((s) => `<stop position=\"${s.position}\"><color rgb=\"FF${s.color}\"/></stop>`)\n .join(\"\");\n p.push(`<fill><gradientFill${attrs(gfAttrs)}>${stopParts}</gradientFill></fill>`);\n } else {\n const patternAttrs = attrs({ patternType: f.patternType ?? \"solid\" });\n const fgColor = f.color\n ? `<fgColor rgb=\"FF${f.color}\"/>`\n : f.colorIndexed !== undefined\n ? `<fgColor indexed=\"${f.colorIndexed}\"/>`\n : \"\";\n const bgColor = f.bgColor ? `<bgColor rgb=\"FF${f.bgColor}\"/>` : \"\";\n const colorContent = fgColor + bgColor;\n p.push(\n colorContent\n ? `<fill><patternFill${patternAttrs}>${colorContent}</patternFill></fill>`\n : `<fill><patternFill${patternAttrs}/></fill>`,\n );\n }\n }\n p.push(\"</fills>\");\n\n // borders\n p.push(`<borders count=\"${this.borders.length}\">`);\n for (const b of this.borders) {\n const bAttrs: string[] = [];\n if (b.diagonalUp) bAttrs.push('diagonalUp=\"1\"');\n if (b.diagonalDown) bAttrs.push('diagonalDown=\"1\"');\n const bAttr = bAttrs.length ? ` ${bAttrs.join(\" \")}` : \"\";\n p.push(`<border${bAttr}>${this.borderXmlStr(b)}</border>`);\n }\n p.push(\"</borders>\");\n\n // cellStyleXfs\n p.push(\n '<cellStyleXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/></cellStyleXfs>',\n );\n\n // cellXfs\n p.push(`<cellXfs count=\"${this.cellXfs.length}\">`);\n for (const xf of this.cellXfs) {\n const xAttrs: Record<string, string | number | boolean | undefined> = {\n numFmtId: xf.numFmtId,\n fontId: xf.fontId,\n fillId: xf.fillId,\n borderId: xf.borderId,\n xfId: 0,\n };\n if (xf.alignment) xAttrs.applyAlignment = 1;\n if (xf.fontId > 0) xAttrs.applyFont = 1;\n if (xf.fillId > 0) xAttrs.applyFill = 1;\n if (xf.borderId > 0) xAttrs.applyBorder = 1;\n if (xf.numFmtId > 0) xAttrs.applyNumberFormat = 1;\n if (xf.quotePrefix) xAttrs.quotePrefix = 1;\n if (xf.pivotButton) xAttrs.pivotButton = 1;\n if (xf.applyProtection) xAttrs.applyProtection = 1;\n if (xf.protection) xAttrs.applyProtection = xAttrs.applyProtection ?? 1;\n\n const alignStr = xf.alignment ? this.alignmentXmlStr(xf.alignment) : \"\";\n const protStr = xf.protection ? this.protectionXmlStr(xf.protection) : \"\";\n const inner = alignStr + protStr;\n p.push(inner ? `<xf${attrs(xAttrs)}>${inner}</xf>` : `<xf${attrs(xAttrs)}/>`);\n }\n p.push(\"</cellXfs>\");\n\n // cellStyles\n if (this.customCellStyles && this.customCellStyles.length > 0) {\n // Normal (builtinId=0) is the implicit default; only auto-add it when the\n // caller's list doesn't already include it, so a parsed list containing\n // Normal round-trips instead of producing a duplicate.\n const hasNormal = this.customCellStyles.some(\n (cs) => cs.builtinId === 0 && cs.name === \"Normal\",\n );\n const csAttrs: string[] = [`count=\"${this.customCellStyles.length + (hasNormal ? 0 : 1)}\"`];\n const csParts: string[] = [`<cellStyles ${csAttrs.join(\" \")}>`];\n if (!hasNormal) csParts.push('<cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\"/>');\n for (const cs of this.customCellStyles) {\n const attrs: string[] = [`name=\"${escapeXml(cs.name)}\"`, `xfId=\"${cs.xfId}\"`];\n if (cs.builtinId !== undefined) attrs.push(`builtinId=\"${cs.builtinId}\"`);\n if (cs.customBuiltin) attrs.push('customBuiltin=\"1\"');\n if (cs.iLevel !== undefined) attrs.push(`iLevel=\"${cs.iLevel}\"`);\n if (cs.hidden) attrs.push('hidden=\"1\"');\n csParts.push(`<cellStyle ${attrs.join(\" \")}/>`);\n }\n csParts.push(\"</cellStyles>\");\n p.push(csParts.join(\"\"));\n } else {\n p.push(\n '<cellStyles count=\"1\"><cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\"/></cellStyles>',\n );\n }\n\n // dxfs\n if (this.dxfs.length > 0) {\n p.push(`<dxfs count=\"${this.dxfs.length}\">`);\n for (const dxf of this.dxfs) {\n const dParts: string[] = [];\n if (dxf.font) dParts.push(`<font>${this.fontXmlStr(dxf.font)}</font>`);\n if (dxf.fill) {\n const bgColor = dxf.fill.color ? `<bgColor rgb=\"FF${dxf.fill.color}\"/>` : \"\";\n const patAttrs = attrs({ patternType: dxf.fill.patternType ?? \"solid\" });\n dParts.push(`<fill><patternFill${patAttrs}>${bgColor}</patternFill></fill>`);\n }\n if (dxf.numFmt) dParts.push(`<numFmt formatCode=\"${escapeXml(dxf.numFmt)}\"/>`);\n if (dxf.border) dParts.push(`<border>${this.borderXmlStr(dxf.border)}</border>`);\n if (dParts.length > 0) {\n p.push(`<dxf>${dParts.join(\"\")}</dxf>`);\n } else {\n p.push(\"<dxf/>\");\n }\n }\n p.push(\"</dxfs>\");\n } else {\n p.push('<dxfs count=\"0\"/>');\n }\n // tableStyles (CT_TableStyles)\n if (this.tableStyles && this.tableStyles.length > 0) {\n const tsParts: string[] = [\n `<tableStyles count=\"${this.tableStyles.length}\" defaultTableStyle=\"TableStyleMedium2\" defaultPivotStyle=\"PivotStyleLight16\">`,\n ];\n for (const ts of this.tableStyles) {\n const tsAttrs: string[] = [`name=\"${escapeXml(ts.name)}\"`];\n if (ts.pivot) tsAttrs.push('pivot=\"1\"');\n if (ts.elements && ts.elements.length > 0) {\n tsParts.push(`<tableStyle ${tsAttrs.join(\" \")}>`);\n for (const el of ts.elements) {\n const elAttrs: string[] = [`type=\"${el.type}\"`];\n if (el.dxfId !== undefined) elAttrs.push(`dxfId=\"${el.dxfId}\"`);\n if (el.button) elAttrs.push('button=\"1\"');\n tsParts.push(`<tableStyleElement ${elAttrs.join(\" \")}/>`);\n }\n tsParts.push(\"</tableStyle>\");\n } else {\n tsParts.push(`<tableStyle ${tsAttrs.join(\" \")}/>`);\n }\n }\n tsParts.push(\"</tableStyles>\");\n p.push(tsParts.join(\"\"));\n } else {\n p.push(\n '<tableStyles count=\"0\" defaultTableStyle=\"TableStyleMedium2\" defaultPivotStyle=\"PivotStyleLight16\"/>',\n );\n }\n\n // colors (optional color palette)\n if (this.colors) {\n const c = this.colors;\n const colorParts: string[] = [\"<colors>\"];\n if (c.indexedColors && c.indexedColors.length > 0) {\n colorParts.push(\"<indexedColors>\");\n for (const ic of c.indexedColors) {\n colorParts.push(`<rgbColor rgb=\"${ic.rgb}\"/>`);\n }\n colorParts.push(\"</indexedColors>\");\n }\n if (c.mruColors && c.mruColors.length > 0) {\n colorParts.push(\"<mruColors>\");\n for (const mc of c.mruColors) {\n colorParts.push(`<color rgb=\"FF${mc}\"/>`);\n }\n colorParts.push(\"</mruColors>\");\n }\n colorParts.push(\"</colors>\");\n p.push(colorParts.join(\"\"));\n }\n\n // extLst — style sheet extensions\n if (this.styleExtensions && this.styleExtensions.length > 0) {\n const extParts: string[] = [\"<extLst>\"];\n for (const ext of this.styleExtensions) {\n if (ext.content) {\n extParts.push(`<ext uri=\"${ext.uri}\">${ext.content}</ext>`);\n } else {\n extParts.push(`<ext uri=\"${ext.uri}\"/>`);\n }\n }\n extParts.push(\"</extLst>\");\n p.push(extParts.join(\"\"));\n } else {\n p.push(\"<extLst/>\");\n }\n\n p.push(\"</styleSheet>\");\n return p.join(\"\");\n }\n\n private fontXmlStr(f: FontOptions): string {\n const parts: string[] = [];\n if (f.bold) parts.push(\"<b/>\");\n if (f.italic) parts.push(\"<i/>\");\n if (f.underline) parts.push(\"<u/>\");\n if (f.strike) parts.push(\"<strike/>\");\n if (f.outline) parts.push(\"<outline/>\");\n if (f.shadow) parts.push(\"<shadow/>\");\n if (f.condense) parts.push(\"<condense/>\");\n if (f.extend) parts.push(\"<extend/>\");\n if (f.size) parts.push(`<sz val=\"${f.size}\"/>`);\n if (f.color) parts.push(`<color rgb=\"FF${f.color}\"/>`);\n if (f.font) parts.push(`<name val=\"${escapeXml(f.font)}\"/>`);\n if (f.charset !== undefined) parts.push(`<charset val=\"${f.charset}\"/>`);\n if (f.family !== undefined) parts.push(`<family val=\"${f.family}\"/>`);\n if (f.vertAlign) parts.push(`<vertAlign val=\"${f.vertAlign}\"/>`);\n if (f.scheme) parts.push(`<scheme val=\"${f.scheme}\"/>`);\n return parts.join(\"\");\n }\n\n private borderXmlStr(b: BorderSideOptions): string {\n const parts: string[] = [];\n const renderSide = (name: string, opts: BorderOptions | undefined, required = true) => {\n if (opts && opts.style && opts.style !== \"none\") {\n const colorStr = opts.color ? `<color rgb=\"FF${opts.color}\"/>` : \"\";\n parts.push(`<${name} style=\"${opts.style}\">${colorStr}</${name}>`);\n } else if (required) {\n parts.push(`<${name}/>`);\n }\n };\n for (const side of [\n \"left\",\n \"right\",\n \"top\",\n \"bottom\",\n \"diagonal\",\n \"vertical\",\n \"horizontal\",\n ] as const) {\n renderSide(side, b[side] as BorderOptions | undefined);\n }\n // start/end not in transitional XSD — only emit when styled\n renderSide(\"start\", b.start, false);\n renderSide(\"end\", b.end, false);\n return parts.join(\"\");\n }\n\n private alignmentXmlStr(a: AlignmentOptions): string {\n const aAttrs: Record<string, string | number | boolean | undefined> = {};\n if (a.horizontal) aAttrs.horizontal = a.horizontal;\n if (a.vertical) aAttrs.vertical = a.vertical;\n if (a.wrapText) aAttrs.wrapText = 1;\n if (a.textRotation !== undefined) aAttrs.textRotation = a.textRotation;\n if (a.indent !== undefined) aAttrs.indent = a.indent;\n if (a.relativeIndent !== undefined) aAttrs.relativeIndent = a.relativeIndent;\n if (a.justifyLastLine) aAttrs.justifyLastLine = 1;\n if (a.shrinkToFit) aAttrs.shrinkToFit = 1;\n if (a.readingOrder !== undefined) aAttrs.readingOrder = a.readingOrder;\n return `<alignment${attrs(aAttrs)}/>`;\n }\n\n private protectionXmlStr(pr: CellProtectionOptions): string {\n const prAttrs: Record<string, string | number | boolean | undefined> = {};\n if (pr.locked !== undefined) prAttrs.locked = pr.locked ? 1 : 0;\n if (pr.hidden !== undefined) prAttrs.hidden = pr.hidden ? 1 : 0;\n return `<protection${attrs(prAttrs)}/>`;\n }\n}\n\n// ── Descriptor Types ──\n\nexport interface StylesDocOptions {\n /** The Styles accumulator instance (for stringify). */\n styles: Styles;\n}\n\n// ── Descriptor ──\n\nexport const stylesDesc: CustomDescriptor<StylesDocOptions, WriteContext, StylesParseResult> = {\n kind: \"custom\",\n\n stringify(opts, _ctx) {\n return opts.styles.serialize();\n },\n\n parse(el, _ctx) {\n const result: StylesParseResult = {};\n\n // numFmts\n const numFmtsEl = findChild(el, \"numFmts\");\n if (numFmtsEl) {\n const numFmtById = new Map<number, string>();\n for (const nf of numFmtsEl.elements ?? []) {\n if (nf.name !== \"numFmt\") continue;\n const id = attrNum(nf, \"numFmtId\");\n const code = attr(nf, \"formatCode\");\n if (id !== undefined && code) numFmtById.set(id, code);\n }\n result.customNumFmtById = numFmtById;\n }\n\n // fonts\n const fontsEl = findChild(el, \"fonts\");\n if (fontsEl) {\n const fonts: FontOptions[] = [];\n for (const f of fontsEl.elements ?? []) {\n if (f.name !== \"font\") continue;\n fonts.push(parseFont(f));\n }\n result.fonts = fonts;\n }\n\n // fills\n const fillsEl = findChild(el, \"fills\");\n if (fillsEl) {\n const fills: FillOptions[] = [];\n for (const f of fillsEl.elements ?? []) {\n if (f.name !== \"fill\") continue;\n fills.push(parseFill(f));\n }\n result.fills = fills;\n }\n\n // borders\n const bordersEl = findChild(el, \"borders\");\n if (bordersEl) {\n const borders: BorderSideOptions[] = [];\n for (const b of bordersEl.elements ?? []) {\n if (b.name !== \"border\") continue;\n borders.push(parseBorder(b));\n }\n result.borders = borders;\n }\n\n // cellStyleXfs\n const cellStyleXfsEl = findChild(el, \"cellStyleXfs\");\n if (cellStyleXfsEl) {\n const xfs: IndexedXfEntry[] = [];\n for (const xf of cellStyleXfsEl.elements ?? []) {\n if (xf.name !== \"xf\") continue;\n const style: IndexedXfEntry = {};\n const fontId = attrNum(xf, \"fontId\");\n const fillId = attrNum(xf, \"fillId\");\n const borderId = attrNum(xf, \"borderId\");\n const numFmtId = attrNum(xf, \"numFmtId\");\n if (fontId !== undefined) style.fontId = fontId;\n if (fillId !== undefined) style.fillId = fillId;\n if (borderId !== undefined) style.borderId = borderId;\n if (numFmtId !== undefined) style.numFmtId = numFmtId;\n xfs.push(style);\n }\n result.cellStyleXfs = xfs;\n }\n\n // cellXfs\n const cellXfsEl = findChild(el, \"cellXfs\");\n if (cellXfsEl) {\n const xfs: IndexedXfEntry[] = [];\n for (const xf of cellXfsEl.elements ?? []) {\n if (xf.name !== \"xf\") continue;\n const fontId = attrNum(xf, \"fontId\") ?? 0;\n const fillId = attrNum(xf, \"fillId\") ?? 0;\n const borderId = attrNum(xf, \"borderId\") ?? 0;\n const numFmtId = attrNum(xf, \"numFmtId\") ?? 0;\n\n const alignmentEl = findChild(xf, \"alignment\");\n const alignment = alignmentEl ? parseAlignment(alignmentEl) : undefined;\n\n const protectionEl = findChild(xf, \"protection\");\n const protection = protectionEl ? parseProtection(protectionEl) : undefined;\n\n const style: IndexedXfEntry = {};\n if (fontId > 0) style.fontId = fontId;\n if (fillId > 0) style.fillId = fillId;\n if (borderId > 0) style.borderId = borderId;\n if (numFmtId > 0) style.numFmtId = numFmtId;\n if (alignment) style.alignment = alignment;\n if (protection) style.protection = protection;\n if (attr(xf, \"quotePrefix\") === \"1\") style.quotePrefix = true;\n if (attr(xf, \"pivotButton\") === \"1\") style.pivotButton = true;\n\n xfs.push(style);\n }\n result.cellXfs = xfs;\n }\n\n // cellStyles\n const cellStylesEl = findChild(el, \"cellStyles\");\n if (cellStylesEl) {\n const styles: CustomCellStyleOptions[] = [];\n for (const cs of cellStylesEl.elements ?? []) {\n if (cs.name !== \"cellStyle\") continue;\n const style: Partial<CustomCellStyleOptions> = {};\n if (attr(cs, \"name\")) style.name = attr(cs, \"name\");\n const xfId = attrNum(cs, \"xfId\");\n if (xfId !== undefined) style.xfId = xfId;\n const builtinId = attrNum(cs, \"builtinId\");\n if (builtinId !== undefined) style.builtinId = builtinId;\n if (attr(cs, \"customBuiltin\") === \"1\") style.customBuiltin = true;\n if (attr(cs, \"hidden\") === \"1\") style.hidden = true;\n const iLevel = attrNum(cs, \"iLevel\");\n if (iLevel !== undefined) style.iLevel = iLevel;\n styles.push(style as CustomCellStyleOptions);\n }\n result.customCellStyles = styles;\n }\n\n // dxfs\n const dxfsEl = findChild(el, \"dxfs\");\n if (dxfsEl) {\n const dxfs: DxfOptions[] = [];\n for (const dxf of dxfsEl.elements ?? []) {\n if (dxf.name !== \"dxf\") continue;\n const d: DxfOptions = {};\n const fontEl = findChild(dxf, \"font\");\n if (fontEl) d.font = parseFont(fontEl);\n const fillEl = findChild(dxf, \"fill\");\n if (fillEl) d.fill = parseFill(fillEl);\n const borderEl = findChild(dxf, \"border\");\n if (borderEl) d.border = parseBorder(borderEl);\n const numFmtEl = findChild(dxf, \"numFmt\");\n if (numFmtEl && attr(numFmtEl, \"formatCode\")) d.numFmt = attr(numFmtEl, \"formatCode\");\n dxfs.push(d);\n }\n result.dxfs = dxfs;\n }\n\n // tableStyles\n const tableStylesEl = findChild(el, \"tableStyles\");\n if (tableStylesEl?.attributes) {\n const ts: TableStylesInfo = {};\n if (attr(tableStylesEl, \"count\") !== undefined)\n ts.count = attrNum(tableStylesEl, \"count\") ?? 0;\n if (attr(tableStylesEl, \"defaultTableStyle\"))\n ts.defaultTableStyle = attr(tableStylesEl, \"defaultTableStyle\");\n if (attr(tableStylesEl, \"defaultPivotStyle\"))\n ts.defaultPivotStyle = attr(tableStylesEl, \"defaultPivotStyle\");\n const customStyles: CustomTableStyleOptions[] = [];\n for (const tse of tableStylesEl.elements ?? []) {\n if (tse.name !== \"tableStyle\") continue;\n const style: Partial<CustomTableStyleOptions> = {};\n if (attr(tse, \"name\")) style.name = attr(tse, \"name\");\n if (attr(tse, \"pivot\") === \"1\") style.pivot = true;\n const elements: TableStyleElementOptions[] = [];\n for (const tsee of tse.elements ?? []) {\n if (tsee.name !== \"tableStyleElement\") continue;\n const elOpts: Partial<TableStyleElementOptions> = {};\n if (attr(tsee, \"type\")) elOpts.type = attr(tsee, \"type\") as TableStyleElementType;\n const dxfId = attrNum(tsee, \"dxfId\");\n if (dxfId !== undefined) elOpts.dxfId = dxfId;\n if (attr(tsee, \"button\") === \"1\") elOpts.button = true;\n elements.push(elOpts as TableStyleElementOptions);\n }\n if (elements.length > 0) style.elements = elements;\n customStyles.push(style as CustomTableStyleOptions);\n }\n if (customStyles.length > 0) ts.tableStyles = customStyles;\n result.tableStylesInfo = ts;\n }\n\n // colors\n const colorsEl = findChild(el, \"colors\");\n if (colorsEl) {\n const colors: ColorsOptions = {};\n const icEl = findChild(colorsEl, \"indexedColors\");\n if (icEl) {\n const indexed: IndexedColorOptions[] = [];\n for (const rgb of icEl.elements ?? []) {\n if (rgb.name === \"rgbColor\" && attr(rgb, \"rgb\")) {\n indexed.push({ rgb: attr(rgb, \"rgb\")! });\n }\n }\n colors.indexedColors = indexed;\n }\n const mruEl = findChild(colorsEl, \"mruColors\");\n if (mruEl) {\n const mru: string[] = [];\n for (const c of mruEl.elements ?? []) {\n if (c.name === \"color\") {\n const rgb = attr(c, \"rgb\");\n if (rgb) mru.push(rgb.length === 8 ? rgb.slice(2) : rgb);\n }\n }\n colors.mruColors = mru;\n }\n result.colors = colors;\n }\n\n // styleExtensions (extLst)\n const extLstEl = findChild(el, \"extLst\");\n if (extLstEl) {\n const exts: StyleExtensionOptions[] = [];\n for (const ext of extLstEl.elements ?? []) {\n if (ext.name !== \"ext\") continue;\n const uri = attr(ext, \"uri\");\n if (uri) {\n // Reconstruct the inner XML of the <ext> element verbatim\n const content = (ext.elements ?? []).map((e) => stringify(e)).join(\"\");\n exts.push({ uri, content: content || undefined });\n }\n }\n result.styleExtensions = exts;\n }\n\n return result;\n },\n};\n\n// ── Parse helpers ──\n\nfunction parseFont(el: XmlElement): FontOptions {\n const result: Partial<FontOptions> = {};\n for (const child of el.elements ?? []) {\n switch (child.name) {\n case \"b\":\n result.bold = true;\n break;\n case \"i\":\n result.italic = true;\n break;\n case \"u\":\n result.underline = true;\n break;\n case \"strike\":\n result.strike = true;\n break;\n case \"outline\":\n result.outline = true;\n break;\n case \"shadow\":\n result.shadow = true;\n break;\n case \"condense\":\n result.condense = true;\n break;\n case \"extend\":\n result.extend = true;\n break;\n case \"sz\":\n result.size = attrNum(child, \"val\");\n break;\n case \"color\":\n result.color = parseColorHex(child);\n break;\n case \"name\":\n result.font = attr(child, \"val\") ?? undefined;\n break;\n case \"charset\":\n result.charset = attrNum(child, \"val\");\n break;\n case \"family\":\n result.family = attrNum(child, \"val\");\n break;\n case \"vertAlign\":\n result.vertAlign = (attr(child, \"val\") as FontOptions[\"vertAlign\"]) ?? undefined;\n break;\n case \"scheme\":\n result.scheme = (attr(child, \"val\") as FontOptions[\"scheme\"]) ?? undefined;\n break;\n }\n }\n return result as FontOptions;\n}\n\nfunction parseFill(el: XmlElement): FillOptions {\n const patternFill = findChild(el, \"patternFill\");\n if (patternFill) {\n const result: FillOptions = {};\n const patternType = attr(patternFill, \"patternType\");\n if (patternType) result.patternType = patternType;\n const fg = findChild(patternFill, \"fgColor\");\n if (fg) result.color = parseColorHex(fg);\n const bg = findChild(patternFill, \"bgColor\");\n if (bg) result.bgColor = parseColorHex(bg);\n const indexed = fg ? attrNum(fg, \"indexed\") : undefined;\n if (indexed !== undefined) result.colorIndexed = indexed;\n return result;\n }\n\n const gradientFill = findChild(el, \"gradientFill\");\n if (gradientFill) {\n const result: FillOptions = { type: \"gradient\" };\n const gType = attr(gradientFill, \"type\");\n if (gType) result.gradientType = gType as FillOptions[\"gradientType\"];\n const degree = attrNum(gradientFill, \"degree\");\n if (degree !== undefined) result.gradientDegree = degree;\n const left = attrNum(gradientFill, \"left\");\n if (left !== undefined) result.gradientLeft = left;\n const right = attrNum(gradientFill, \"right\");\n if (right !== undefined) result.gradientRight = right;\n const top = attrNum(gradientFill, \"top\");\n if (top !== undefined) result.gradientTop = top;\n const bottom = attrNum(gradientFill, \"bottom\");\n if (bottom !== undefined) result.gradientBottom = bottom;\n const stops: GradientStopOptions[] = [];\n for (const s of gradientFill.elements ?? []) {\n if (s.name !== \"stop\") continue;\n const pos = attrNum(s, \"position\");\n const color = findChild(s, \"color\");\n if (pos !== undefined && color) {\n stops.push({ position: pos, color: parseColorHex(color) ?? \"\" });\n }\n }\n if (stops.length > 0) result.stops = stops;\n return result;\n }\n\n return {};\n}\n\nfunction parseBorder(el: XmlElement): BorderSideOptions {\n const result: BorderSideOptions = {};\n if (attr(el, \"diagonalUp\") === \"1\") result.diagonalUp = true;\n if (attr(el, \"diagonalDown\") === \"1\") result.diagonalDown = true;\n\n for (const side of [\n \"left\",\n \"right\",\n \"top\",\n \"bottom\",\n \"diagonal\",\n \"start\",\n \"end\",\n \"vertical\",\n \"horizontal\",\n ] as const) {\n const sideEl = findChild(el, side);\n if (sideEl) {\n const opts: BorderOptions = {};\n const style = attr(sideEl, \"style\");\n if (style) opts.style = style as BorderOptions[\"style\"];\n const color = findChild(sideEl, \"color\");\n if (color) opts.color = parseColorHex(color);\n if (Object.keys(opts).length > 0) result[side] = opts;\n }\n }\n\n return result;\n}\n\nfunction parseAlignment(el: XmlElement): AlignmentOptions {\n const result: AlignmentOptions = {};\n const h = attr(el, \"horizontal\");\n if (h) result.horizontal = h as AlignmentOptions[\"horizontal\"];\n const v = attr(el, \"vertical\");\n if (v) result.vertical = v as AlignmentOptions[\"vertical\"];\n if (attr(el, \"wrapText\") === \"1\") result.wrapText = true;\n const rotation = attrNum(el, \"textRotation\");\n if (rotation !== undefined) result.textRotation = rotation;\n const indent = attrNum(el, \"indent\");\n if (indent !== undefined) result.indent = indent;\n const relativeIndent = attrNum(el, \"relativeIndent\");\n if (relativeIndent !== undefined) result.relativeIndent = relativeIndent;\n if (attr(el, \"justifyLastLine\") === \"1\") result.justifyLastLine = true;\n if (attr(el, \"shrinkToFit\") === \"1\") result.shrinkToFit = true;\n const readingOrder = attrNum(el, \"readingOrder\");\n if (readingOrder !== undefined) result.readingOrder = readingOrder;\n return result;\n}\n\nfunction parseProtection(el: XmlElement): CellProtectionOptions {\n const result: Partial<CellProtectionOptions> = {};\n const locked = attr(el, \"locked\");\n if (locked !== undefined) result.locked = locked !== \"0\";\n const hidden = attr(el, \"hidden\");\n if (hidden !== undefined) result.hidden = hidden !== \"0\";\n return result as CellProtectionOptions;\n}\n\nfunction parseColorHex(el: XmlElement): string | undefined {\n const rgb = attr(el, \"rgb\");\n if (rgb) {\n // Strip alpha prefix if present (FF000000 → 000000)\n return rgb.length === 8 ? rgb.slice(2) : rgb;\n }\n return undefined;\n}\n","/**\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: Partial<CalcChainOptions> = {};\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 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 { UniversalMeasure } from \"@office-open/core\";\nimport { convertToInch } from \"@office-open/core\";\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 | UniversalMeasure;\n right?: number | UniversalMeasure;\n top?: number | UniversalMeasure;\n bottom?: number | UniversalMeasure;\n header?: number | UniversalMeasure;\n footer?: number | UniversalMeasure;\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: convertToInch(pm.left ?? 0.7),\n right: convertToInch(pm.right ?? 0.7),\n top: convertToInch(pm.top ?? 0.75),\n bottom: convertToInch(pm.bottom ?? 0.75),\n header: convertToInch(pm.header ?? 0.3),\n footer: convertToInch(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: Partial<ChartsheetDescriptorOptions> = {};\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 = String(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 ChartsheetDescriptorOptions;\n },\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 { convertToEmu } from \"@office-open/core\";\nimport type { UniversalMeasure } from \"@office-open/core\";\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 | UniversalMeasure;\n /** 1-based row */\n row: number;\n /** Row offset in EMU (default 0) */\n rowOffset?: number | UniversalMeasure;\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 | UniversalMeasure;\n /** 1-based row */\n row: number;\n /** Row offset in EMU (default 0) */\n rowOffset?: number | UniversalMeasure;\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\n/** How a drawing is anchored to the worksheet (xdr:*Anchor element). */\nexport const ANCHOR_TYPES = {\n twoCell: \"twoCell\",\n oneCell: \"oneCell\",\n absolute: \"absolute\",\n} as const;\nexport type AnchorType = (typeof ANCHOR_TYPES)[keyof typeof ANCHOR_TYPES];\n\n/** editAs behavior for twoCellAnchor (ST_EditAs). */\nexport const EDIT_AS_TYPES = {\n twoCell: \"twoCell\",\n oneCell: \"oneCell\",\n absolute: \"absolute\",\n} as const;\nexport type EditAsType = (typeof EDIT_AS_TYPES)[keyof typeof EDIT_AS_TYPES];\n\nexport interface DrawingImageOptions {\n /** 1-based column (from marker) */\n col: number;\n /** Column offset in EMU (default 0) */\n colOffset?: number | UniversalMeasure;\n /** 1-based row (from marker) */\n row: number;\n /** Row offset in EMU (default 0) */\n rowOffset?: number | UniversalMeasure;\n /** To cell column (1-based) for twoCellAnchor. Defaults to col + 1. */\n toCol?: number;\n /** To cell row (1-based) for twoCellAnchor. Defaults to row + 1. */\n toRow?: number;\n /** To cell column offset in EMU. */\n toColOffset?: number | UniversalMeasure;\n /** To cell row offset in EMU. */\n toRowOffset?: number | UniversalMeasure;\n /** Relationship ID for the image */\n rId: string;\n /** Anchor type (default \"twoCell\"). */\n anchorType?: AnchorType;\n /** editAs for twoCellAnchor (default \"oneCell\"). */\n editAs?: EditAsType;\n /** Absolute X in EMU (absoluteAnchor). */\n absoluteX?: number | UniversalMeasure;\n /** Absolute Y in EMU (absoluteAnchor). */\n absoluteY?: number | UniversalMeasure;\n /** Image width in EMU (a:ext cx, default 400000). */\n extentCx?: number | UniversalMeasure;\n /** Image height in EMU (a:ext cy, default 300000). */\n extentCy?: number | UniversalMeasure;\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 | UniversalMeasure;\n /** 1-based row */\n row: number;\n /** Row offset in EMU (default 0) */\n rowOffset?: number | UniversalMeasure;\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\nconst DEFAULT_EXTENT_CX = 400000;\nconst DEFAULT_EXTENT_CY = 300000;\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(stringifyImage(img, id));\n id++;\n }\n\n for (const chart of charts) {\n p.push(stringifyChart(chart, id));\n id++;\n }\n\n p.push(\"</wsDr>\");\n return p.join(\"\");\n },\n\n parse(el, _ctx) {\n const result: Partial<DrawingOptions> = {};\n const images: DrawingImageOptions[] = [];\n const charts: DrawingChartOptions[] = [];\n\n for (const anchor of el.elements ?? []) {\n const name = anchor.name;\n if (name !== \"twoCellAnchor\" && name !== \"oneCellAnchor\" && name !== \"absoluteAnchor\") {\n continue;\n }\n\n const pic = findChild(anchor, \"pic\");\n if (pic) {\n images.push(parseImageAnchor(anchor, pic, name));\n continue;\n }\n\n const graphicFrame = findChild(anchor, \"graphicFrame\");\n if (graphicFrame) {\n const chart = parseChartAnchor(anchor, graphicFrame);\n if (chart) charts.push(chart);\n }\n }\n\n if (images.length > 0) result.images = images;\n if (charts.length > 0) result.charts = charts;\n return result as DrawingOptions;\n },\n};\n\n// ── Stringify helpers ──\n\n/** Marker cell (0-based col/row + EMU offsets). */\nfunction markerXml(\n col: number,\n colOff: number | UniversalMeasure,\n row: number,\n rowOff: number | UniversalMeasure,\n): string {\n return `<col>${col - 1}</col><colOff>${convertToEmu(colOff)}</colOff><row>${row - 1}</row><rowOff>${convertToEmu(rowOff)}</rowOff>`;\n}\n\nfunction clientDataXml(img: { locksWithSheet?: boolean; printsWithSheet?: boolean }): string {\n const locks = img.locksWithSheet !== false ? 1 : 0;\n const prints = img.printsWithSheet !== false ? 1 : 0;\n return `<clientData fLocksWithSheet=\"${locks}\" fPrintsWithSheet=\"${prints}\"/>`;\n}\n\nfunction picXml(rId: string, id: number, cx: number, cy: number): string {\n return (\n `<pic><nvPicPr><cNvPr id=\"${id}\" name=\"Picture ${id}\"/><cNvPicPr preferRelativeResize=\"1\"/></nvPicPr>` +\n `<blipFill><a:blip r:embed=\"${rId}\"/><a:stretch><a:fillRect/></a:stretch></blipFill>` +\n `<spPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm>` +\n `<a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></spPr></pic>`\n );\n}\n\nfunction stringifyImage(img: DrawingImageOptions, id: number): string {\n const anchorType = img.anchorType ?? ANCHOR_TYPES.twoCell;\n const cx = convertToEmu(img.extentCx ?? DEFAULT_EXTENT_CX);\n const cy = convertToEmu(img.extentCy ?? DEFAULT_EXTENT_CY);\n const pic = picXml(img.rId, id, cx, cy);\n const clientData = clientDataXml(img);\n\n if (anchorType === ANCHOR_TYPES.absolute) {\n const x = convertToEmu(img.absoluteX ?? 0);\n const y = convertToEmu(img.absoluteY ?? 0);\n return (\n `<absoluteAnchor><pos x=\"${x}\" y=\"${y}\"/><ext cx=\"${cx}\" cy=\"${cy}\"/>` +\n `${pic}${clientData}</absoluteAnchor>`\n );\n }\n\n const from = markerXml(img.col, img.colOffset ?? 0, img.row, img.rowOffset ?? 0);\n\n if (anchorType === ANCHOR_TYPES.oneCell) {\n return (\n `<oneCellAnchor><from>${from}</from><ext cx=\"${cx}\" cy=\"${cy}\"/>` +\n `${pic}${clientData}</oneCellAnchor>`\n );\n }\n\n // twoCell\n const editAs = img.editAs ?? EDIT_AS_TYPES.oneCell;\n const to = markerXml(\n img.toCol ?? img.col + 1,\n img.toColOffset ?? 0,\n img.toRow ?? img.row + 1,\n img.toRowOffset ?? 0,\n );\n return (\n `<twoCellAnchor editAs=\"${editAs}\"><from>${from}</from><to>${to}</to>` +\n `${pic}${clientData}</twoCellAnchor>`\n );\n}\n\nfunction stringifyChart(chart: DrawingChartOptions, id: number): string {\n // Charts default to twoCellAnchor (existing behavior).\n const from = markerXml(chart.col, chart.colOffset ?? 0, chart.row, chart.rowOffset ?? 0);\n const to = markerXml(chart.col + 9, 0, chart.row + 16, 0);\n const clientData = clientDataXml(chart);\n return (\n `<twoCellAnchor editAs=\"oneCell\"><from>${from}</from><to>${to}</to>` +\n `<graphicFrame><nvGraphicFramePr><cNvPr id=\"${id}\" name=\"Chart ${id}\"/>` +\n `<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}\">` +\n `<c:chart xmlns:c=\"http://schemas.openxmlformats.org/drawingml/2006/chart\" xmlns:r=\"${R_NS}\" r:id=\"${chart.rId}\"/>` +\n `</a:graphicData></a:graphic></graphicFrame>${clientData}</twoCellAnchor>`\n );\n}\n\n// ── Parse 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\ninterface Marker {\n col: number;\n colOffset?: number | UniversalMeasure;\n row: number;\n rowOffset?: number | UniversalMeasure;\n}\n\nfunction readMarker(el: XmlElement): Marker {\n return {\n col: readNumChild(el, \"col\") + 1,\n colOffset: readNumChild(el, \"colOff\") || undefined,\n row: readNumChild(el, \"row\") + 1,\n rowOffset: readNumChild(el, \"rowOff\") || undefined,\n };\n}\n\nfunction readPicRId(pic: XmlElement): string | undefined {\n const blipFill = findChild(pic, \"blipFill\") ?? pic;\n const blip = findChild(blipFill, \"a:blip\");\n return blip?.attributes?.[\"r:embed\"] as string | undefined;\n}\n\n/** Picture extent from pic/spPr/a:xfrm/a:ext (actual image size in EMU). */\nfunction readPicExtent(pic: XmlElement): { cx?: number; cy?: number } {\n const spPr = findChild(pic, \"spPr\");\n const xfrm = spPr ? findChild(spPr, \"a:xfrm\") : undefined;\n const ext = xfrm ? findChild(xfrm, \"a:ext\") : undefined;\n if (!ext?.attributes) return {};\n const cx = Number(ext.attributes[\"cx\"]);\n const cy = Number(ext.attributes[\"cy\"]);\n return {\n cx: Number.isNaN(cx) ? undefined : cx,\n cy: Number.isNaN(cy) ? undefined : cy,\n };\n}\n\nfunction parseImageAnchor(anchor: XmlElement, pic: XmlElement, name: string): DrawingImageOptions {\n const result: DrawingImageOptions = {\n col: 1,\n row: 1,\n rId: readPicRId(pic) ?? \"\",\n };\n\n // Actual image size (applies to all anchor types).\n const ext = readPicExtent(pic);\n if (ext.cx !== undefined) result.extentCx = ext.cx;\n if (ext.cy !== undefined) result.extentCy = ext.cy;\n\n // Client data (lock/print flags) — applies to all anchor types.\n const clientData = findChild(anchor, \"clientData\");\n if (clientData?.attributes) {\n if (clientData.attributes[\"fLocksWithSheet\"] !== undefined) {\n result.locksWithSheet = clientData.attributes[\"fLocksWithSheet\"] !== \"0\";\n }\n if (clientData.attributes[\"fPrintsWithSheet\"] !== undefined) {\n result.printsWithSheet = clientData.attributes[\"fPrintsWithSheet\"] !== \"0\";\n }\n }\n\n if (name === \"absoluteAnchor\") {\n result.anchorType = ANCHOR_TYPES.absolute;\n const pos = findChild(anchor, \"pos\");\n if (pos?.attributes) {\n const x = Number(pos.attributes[\"x\"]);\n const y = Number(pos.attributes[\"y\"]);\n if (!Number.isNaN(x)) result.absoluteX = x;\n if (!Number.isNaN(y)) result.absoluteY = y;\n }\n return result;\n }\n\n const from = findChild(anchor, \"from\");\n if (from) {\n const m = readMarker(from);\n result.col = m.col;\n result.row = m.row;\n if (m.colOffset !== undefined) result.colOffset = m.colOffset;\n if (m.rowOffset !== undefined) result.rowOffset = m.rowOffset;\n }\n\n if (name === \"oneCellAnchor\") {\n result.anchorType = ANCHOR_TYPES.oneCell;\n return result;\n }\n\n // twoCellAnchor\n result.anchorType = ANCHOR_TYPES.twoCell;\n const to = findChild(anchor, \"to\");\n if (to) {\n const m = readMarker(to);\n result.toCol = m.col;\n result.toRow = m.row;\n if (m.colOffset !== undefined) result.toColOffset = m.colOffset;\n if (m.rowOffset !== undefined) result.toRowOffset = m.rowOffset;\n }\n const editAs = anchor.attributes?.[\"editAs\"] as EditAsType | undefined;\n if (editAs) result.editAs = editAs;\n\n return result;\n}\n\nfunction parseChartAnchor(\n anchor: XmlElement,\n graphicFrame: XmlElement,\n): DrawingChartOptions | undefined {\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) return undefined;\n\n const result: DrawingChartOptions = { col: 1, row: 1, rId };\n const from = findChild(anchor, \"from\");\n if (from) {\n const m = readMarker(from);\n result.col = m.col;\n result.row = m.row;\n if (m.colOffset !== undefined) result.colOffset = m.colOffset;\n if (m.rowOffset !== undefined) result.rowOffset = m.rowOffset;\n }\n const clientData = findChild(anchor, \"clientData\");\n if (clientData?.attributes) {\n if (clientData.attributes[\"fLocksWithSheet\"] !== undefined) {\n result.locksWithSheet = clientData.attributes[\"fLocksWithSheet\"] !== \"0\";\n }\n if (clientData.attributes[\"fPrintsWithSheet\"] !== undefined) {\n result.printsWithSheet = clientData.attributes[\"fPrintsWithSheet\"] !== \"0\";\n }\n }\n return result;\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: Partial<ExternalLinkOptions> = {};\n\n const bookEl = findChild(el, \"externalBook\");\n if (bookEl) {\n const book: ExternalBookOptions = {};\n if (bookEl.attributes?.[\"r:id\"]) result.bookRId = String(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 // definedNames\n const definedNamesEl = findChild(bookEl, \"definedNames\");\n if (definedNamesEl) {\n const dns: ExternalDefinedNameOptions[] = [];\n for (const child of definedNamesEl.elements ?? []) {\n if (child.name !== \"definedName\") continue;\n const dn: ExternalDefinedNameOptions = { name: String(child.attributes?.[\"name\"] ?? \"\") };\n if (child.attributes?.[\"refersTo\"]) dn.refersTo = String(child.attributes[\"refersTo\"]);\n if (child.attributes?.[\"sheetId\"] !== undefined)\n dn.sheetId = Number(child.attributes[\"sheetId\"]);\n if (child.attributes?.[\"publishToServer\"]) dn.publishToServer = true;\n if (child.attributes?.[\"vbProcedure\"]) dn.vbProcedure = true;\n if (child.attributes?.[\"workbookParameter\"]) dn.workbookParameter = true;\n if (child.attributes?.[\"xlm\"]) dn.xlm = true;\n dns.push(dn);\n }\n if (dns.length > 0) book.definedNames = dns;\n }\n\n // sheetDataSet\n const sheetDataSetEl = findChild(bookEl, \"sheetDataSet\");\n if (sheetDataSetEl) {\n const sds: ExternalSheetDataOptions[] = [];\n for (const sdChild of sheetDataSetEl.elements ?? []) {\n if (sdChild.name !== \"sheetData\") continue;\n const sd: ExternalSheetDataOptions = {\n sheetId: Number(sdChild.attributes?.[\"sheetId\"] ?? 0),\n };\n if (sdChild.attributes?.[\"refreshError\"]) sd.refreshError = true;\n\n const rows: ExternalRowOptions[] = [];\n for (const rowChild of sdChild.elements ?? []) {\n if (rowChild.name !== \"row\") continue;\n const row: ExternalRowOptions = {\n rowNumber: Number(rowChild.attributes?.[\"r\"] ?? 0),\n };\n\n const cells: ExternalCellOptions[] = [];\n for (const cellChild of rowChild.elements ?? []) {\n if (cellChild.name !== \"cell\") continue;\n const cell: ExternalCellOptions = {\n reference: String(cellChild.attributes?.[\"r\"] ?? \"\"),\n };\n if (cellChild.attributes?.[\"t\"]) cell.type = String(cellChild.attributes[\"t\"]);\n const vEl = findChild(cellChild, \"v\");\n if (vEl && vEl.elements?.[0]?.text !== undefined) {\n cell.value = String(vEl.elements[0].text);\n }\n cells.push(cell);\n }\n if (cells.length > 0) row.cells = cells;\n rows.push(row);\n }\n if (rows.length > 0) sd.rows = rows;\n sds.push(sd);\n }\n if (sds.length > 0) book.sheetDataSet = sds;\n }\n\n result.externalBook = book;\n }\n\n // oleLink\n const oleEl = findChild(el, \"oleLink\");\n if (oleEl) {\n const ole: OleLinkOptions = {};\n if (oleEl.attributes?.[\"r:id\"]) result.oleRId = String(oleEl.attributes[\"r:id\"]);\n\n const oleItemsEl = findChild(oleEl, \"oleItems\");\n if (oleItemsEl) {\n const items: OleItemOptions[] = [];\n for (const child of oleItemsEl.elements ?? []) {\n if (child.name !== \"oleItem\") continue;\n const item: OleItemOptions = { name: String(child.attributes?.[\"name\"] ?? \"\") };\n if (child.attributes?.[\"advise\"]) item.advise = true;\n if (child.attributes?.[\"prefer\"]) item.prefer = true;\n items.push(item);\n }\n if (items.length > 0) ole.oleItems = items;\n }\n\n result.oleLink = ole;\n }\n\n return result as ExternalLinkOptions;\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?: RangePropertiesOptions;\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 RangePropertiesOptions {\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 OLAPPropertiesOptions {\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 // Two-arg reduce: Math.max is associative, so Math.max(a,b,c) ===\n // Math.max(Math.max(a,b),c) for all values incl. NaN/Infinity — fully\n // equivalent to Math.max(...values) without spreading onto the stack.\n return values.reduce((a, b) => Math.max(a, b));\n case \"min\":\n return values.reduce((a, b) => Math.min(a, b));\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?: OLAPPropertiesOptions;\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, WriteContext } from \"@office-open/core/descriptor\";\nimport { attrs, escapeXml, textOf } from \"@office-open/xml\";\nimport type { Element as XmlElement } 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 PivotAreaReferenceOptions,\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/** Parsed pivotField (CT_PivotField) — index-based, inspect-only. */\nexport interface PivotFieldParseResult {\n axis?: string;\n showAll?: boolean;\n dataField?: boolean;\n hierarchy?: string;\n dragToRow?: boolean;\n dragToCol?: boolean;\n dragToPage?: boolean;\n dragToData?: boolean;\n dragOff?: boolean;\n showDropDowns?: boolean;\n insertBlankRow?: boolean;\n showPropCell?: boolean;\n showPropTip?: boolean;\n showPropAsCaption?: boolean;\n compact?: boolean;\n outline?: boolean;\n subtotalTop?: boolean;\n includeNewItemsInFilter?: boolean;\n}\n\n/** Parsed dataField (CT_DataField). */\nexport interface DataFieldParseResult {\n name?: string;\n fld?: number;\n subtotal?: string;\n showDataAs?: string;\n baseField?: number;\n baseItem?: number;\n numFmtId?: string;\n}\n\n/** Parsed pageField (CT_PageField). */\nexport interface PageFieldParseResult {\n fld?: number;\n hier?: number;\n cap?: string;\n}\n\n/** Parsed format entry (CT_Format). */\nexport interface PivotFormatParseResult {\n action?: string;\n dxfId?: number;\n pivotArea?: Partial<PivotAreaOptions>;\n}\n\n/** Parsed chartFormat (CT_ChartFormat). */\nexport interface ChartFormatParseResult {\n chart?: number;\n format?: number;\n series?: boolean;\n pivotArea?: Partial<PivotAreaOptions>;\n}\n\n/** Parsed pivotHierarchy (CT_PivotHierarchy). */\nexport interface PivotHierarchyParseResult {\n outline?: boolean;\n multipleItemSelectionAllowed?: boolean;\n subtotalTop?: boolean;\n showInFieldList?: boolean;\n dragToRow?: boolean;\n dragToCol?: boolean;\n dragToPage?: boolean;\n dragToData?: boolean;\n dragOff?: boolean;\n includeNewItemsInFilter?: boolean;\n caption?: string;\n}\n\n/** Parsed pivotFilter (CT_PivotFilter). */\nexport interface PivotFilterParseResult {\n fld?: number;\n type?: string;\n id?: number;\n mpFld?: number;\n evalOrder?: number;\n}\n\n/** Parsed row/col hierarchyUsage entry (CT_RowColHierarchyUsage). */\nexport interface HierarchyUsageParseResult {\n hierarchyUsage: number;\n}\n\n/** Parsed calculatedItem (CT_CalculatedItem). */\nexport interface CalculatedItemParseResult {\n field?: number;\n formula?: string;\n pivotArea?: Partial<PivotAreaOptions>;\n}\n\n/** Parsed calculatedMember (CT_CalculatedMember). */\nexport interface CalculatedMemberParseResult {\n name?: string;\n mdx?: string;\n memberName?: string;\n hierarchy?: string;\n parent?: string;\n solveOrder?: number;\n set?: boolean;\n}\n\n/**\n * Structured output of {@link pivotTableDesc}.parse — CT_pivotTableDefinition as\n * parsed (index-based pivotFields/dataFields, flat attributes). This is the\n * CT-layer shape, NOT {@link PivotTableOptions} (the name-based user shape),\n * so it cannot be fed straight back into stringify; the compiler regenerates a\n * pivot table from `sourceData` + user `PivotTableOptions` instead.\n */\nexport interface PivotTableParseResult {\n name?: string;\n cacheId?: number;\n dataOnRows?: boolean;\n showHeaders?: boolean;\n showEmptyRow?: boolean;\n showEmptyCol?: boolean;\n grandTotalCaption?: string;\n errorCaption?: string;\n showError?: boolean;\n missingCaption?: string;\n showMissing?: boolean;\n pageStyle?: string;\n pivotTableStyle?: string;\n tag?: string;\n showItems?: boolean;\n editData?: boolean;\n disableFieldList?: boolean;\n showCalcMbrs?: boolean;\n visualTotals?: boolean;\n showMultipleLabel?: boolean;\n showDataDropDown?: boolean;\n showDrill?: boolean;\n printDrill?: boolean;\n showMemberPropertyTips?: boolean;\n showDataTips?: boolean;\n enableWizard?: boolean;\n enableDrill?: boolean;\n enableFieldProperties?: boolean;\n pageWrap?: number;\n pageOverThenDown?: boolean;\n subtotalHiddenItems?: boolean;\n fieldPrintTitles?: boolean;\n mergeItem?: boolean;\n showDropZones?: boolean;\n published?: boolean;\n gridDropZones?: boolean;\n multipleFieldFilters?: boolean;\n rowHeaderCaption?: string;\n colHeaderCaption?: string;\n fieldListSortAscending?: boolean;\n mdxSubqueries?: boolean;\n customListSort?: boolean;\n asteriskTotals?: boolean;\n dataPosition?: number;\n immersive?: boolean;\n vacatedStyle?: string;\n dataCaption?: string;\n location?: string;\n locationRowPageCount?: number;\n locationColPageCount?: number;\n pivotFields?: PivotFieldParseResult[];\n dataFields?: DataFieldParseResult[];\n rowFields?: number[];\n colFields?: number[];\n pageFields?: PageFieldParseResult[];\n formats?: PivotFormatParseResult[];\n chartFormats?: ChartFormatParseResult[];\n pivotHierarchies?: PivotHierarchyParseResult[];\n filters?: PivotFilterParseResult[];\n rowHierarchiesUsage?: HierarchyUsageParseResult[];\n colHierarchiesUsage?: HierarchyUsageParseResult[];\n calculatedItems?: CalculatedItemParseResult[];\n calculatedMembers?: CalculatedMemberParseResult[];\n style?: string;\n}\n\n// ── Descriptor ──\n\nexport const pivotTableDesc: CustomDescriptor<\n PivotTableDescriptorOptions,\n WriteContext,\n PivotTableParseResult\n> = {\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: Partial<PivotTableParseResult> = {};\n\n // Root element attributes\n if (attr(el, \"name\")) result.name = attr(el, \"name\");\n if (attr(el, \"cacheId\") !== undefined) result.cacheId = attrNum(el, \"cacheId\") ?? 0;\n if (attr(el, \"dataOnRows\") === \"1\") result.dataOnRows = true;\n if (attr(el, \"showHeaders\") === \"0\") result.showHeaders = false;\n if (attr(el, \"showEmptyRow\") === \"1\") result.showEmptyRow = true;\n if (attr(el, \"showEmptyCol\") === \"1\") result.showEmptyCol = true;\n if (attr(el, \"grandTotalCaption\")) result.grandTotalCaption = attr(el, \"grandTotalCaption\");\n if (attr(el, \"errorCaption\")) result.errorCaption = attr(el, \"errorCaption\");\n if (attr(el, \"showError\") === \"1\") result.showError = true;\n if (attr(el, \"missingCaption\")) result.missingCaption = attr(el, \"missingCaption\");\n if (attr(el, \"showMissing\") === \"0\") result.showMissing = false;\n if (attr(el, \"pageStyle\")) result.pageStyle = attr(el, \"pageStyle\");\n if (attr(el, \"pivotTableStyle\")) result.pivotTableStyle = attr(el, \"pivotTableStyle\");\n if (attr(el, \"tag\")) result.tag = attr(el, \"tag\");\n if (attr(el, \"showItems\") === \"0\") result.showItems = false;\n if (attr(el, \"editData\") === \"1\") result.editData = true;\n if (attr(el, \"disableFieldList\") === \"1\") result.disableFieldList = true;\n if (attr(el, \"showCalcMbrs\") === \"0\") result.showCalcMbrs = false;\n if (attr(el, \"visualTotals\") === \"1\") result.visualTotals = true;\n if (attr(el, \"showMultipleLabel\") === \"0\") result.showMultipleLabel = false;\n if (attr(el, \"showDataDropDown\") === \"0\") result.showDataDropDown = false;\n if (attr(el, \"showDrill\") === \"0\") result.showDrill = false;\n if (attr(el, \"printDrill\") === \"1\") result.printDrill = true;\n if (attr(el, \"showMemberPropertyTips\") === \"1\") result.showMemberPropertyTips = true;\n if (attr(el, \"showDataTips\") === \"0\") result.showDataTips = false;\n if (attr(el, \"enableWizard\") === \"0\") result.enableWizard = false;\n if (attr(el, \"enableDrill\") === \"0\") result.enableDrill = false;\n if (attr(el, \"enableFieldProperties\") === \"0\") result.enableFieldProperties = false;\n const pageWrap = attrNum(el, \"pageWrap\");\n if (pageWrap !== undefined) result.pageWrap = pageWrap;\n if (attr(el, \"pageOverThenDown\") === \"1\") result.pageOverThenDown = true;\n if (attr(el, \"subtotalHiddenItems\") === \"1\") result.subtotalHiddenItems = true;\n if (attr(el, \"fieldPrintTitles\") === \"1\") result.fieldPrintTitles = true;\n if (attr(el, \"mergeItem\") === \"1\") result.mergeItem = true;\n if (attr(el, \"showDropZones\") === \"0\") result.showDropZones = false;\n if (attr(el, \"published\") === \"1\") result.published = true;\n if (attr(el, \"gridDropZones\") === \"0\") result.gridDropZones = false;\n if (attr(el, \"multipleFieldFilters\") === \"0\") result.multipleFieldFilters = false;\n if (attr(el, \"rowHeaderCaption\")) result.rowHeaderCaption = attr(el, \"rowHeaderCaption\");\n if (attr(el, \"colHeaderCaption\")) result.colHeaderCaption = attr(el, \"colHeaderCaption\");\n if (attr(el, \"fieldListSortAscending\") === \"1\") result.fieldListSortAscending = true;\n if (attr(el, \"mdxSubqueries\") === \"1\") result.mdxSubqueries = true;\n if (attr(el, \"customListSort\") === \"0\") result.customListSort = false;\n if (attr(el, \"asteriskTotals\") === \"1\") result.asteriskTotals = true;\n const dataPosition = attrNum(el, \"dataPosition\");\n if (dataPosition !== undefined) result.dataPosition = dataPosition;\n if (attr(el, \"immersive\") === \"1\") result.immersive = true;\n if (attr(el, \"vacatedStyle\")) result.vacatedStyle = attr(el, \"vacatedStyle\");\n if (attr(el, \"dataCaption\")) result.dataCaption = attr(el, \"dataCaption\");\n\n // Location — store ref as string, plus extended counts\n const locEl = findChild(el, \"location\");\n if (locEl) {\n if (attr(locEl, \"ref\")) result.location = attr(locEl, \"ref\");\n const rpc = attrNum(locEl, \"rowPageCount\");\n if (rpc !== undefined) result.locationRowPageCount = rpc;\n const cpc = attrNum(locEl, \"colPageCount\");\n if (cpc !== undefined) result.locationColPageCount = cpc;\n }\n\n // PivotFields\n const pfEl = findChild(el, \"pivotFields\");\n if (pfEl) {\n const fields: PivotFieldParseResult[] = [];\n for (const fEl of pfEl.elements ?? []) {\n if (fEl.name !== \"pivotField\") continue;\n const field: PivotFieldParseResult = {};\n const axis = attr(fEl, \"axis\");\n if (axis) field.axis = axis;\n if (attr(fEl, \"showAll\") === \"0\") field.showAll = false;\n else if (attr(fEl, \"showAll\") === \"1\") field.showAll = true;\n if (attr(fEl, \"dataField\") === \"1\") field.dataField = true;\n if (attr(fEl, \"hierarchy\")) field.hierarchy = attr(fEl, \"hierarchy\");\n if (attr(fEl, \"dragToRow\") === \"0\") field.dragToRow = false;\n if (attr(fEl, \"dragToCol\") === \"0\") field.dragToCol = false;\n if (attr(fEl, \"dragToPage\") === \"0\") field.dragToPage = false;\n if (attr(fEl, \"dragToData\") === \"1\") field.dragToData = true;\n if (attr(fEl, \"dragOff\") === \"0\") field.dragOff = false;\n if (attr(fEl, \"showDropDowns\") === \"0\") field.showDropDowns = false;\n if (attr(fEl, \"insertBlankRow\") === \"1\") field.insertBlankRow = true;\n if (attr(fEl, \"showPropCell\") === \"1\") field.showPropCell = true;\n if (attr(fEl, \"showPropTip\") === \"1\") field.showPropTip = true;\n if (attr(fEl, \"showPropAsCaption\") === \"1\") field.showPropAsCaption = true;\n if (attr(fEl, \"compact\") === \"0\") field.compact = false;\n if (attr(fEl, \"outline\") === \"1\") field.outline = true;\n if (attr(fEl, \"subtotalTop\") === \"0\") field.subtotalTop = false;\n if (attr(fEl, \"includeNewItemsInFilter\") === \"1\") field.includeNewItemsInFilter = true;\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: DataFieldParseResult[] = [];\n for (const dEl of dfEl.elements ?? []) {\n if (dEl.name !== \"dataField\") continue;\n const df: DataFieldParseResult = {};\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 if (attr(dEl, \"showDataAs\")) df.showDataAs = attr(dEl, \"showDataAs\");\n const baseField = attrNum(dEl, \"baseField\");\n if (baseField !== undefined) df.baseField = baseField;\n const baseItem = attrNum(dEl, \"baseItem\");\n if (baseItem !== undefined) df.baseItem = baseItem;\n if (attr(dEl, \"numFmtId\")) df.numFmtId = attr(dEl, \"numFmtId\");\n dataFields.push(df);\n }\n result.dataFields = dataFields;\n }\n\n // Row fields\n const rowFieldsEl = findChild(el, \"rowFields\");\n if (rowFieldsEl) {\n const rowFields: number[] = [];\n for (const f of rowFieldsEl.elements ?? []) {\n if (f.name === \"field\") {\n const x = attrNum(f, \"x\");\n if (x !== undefined) rowFields.push(x);\n }\n }\n result.rowFields = rowFields;\n }\n\n // Col fields\n const colFieldsEl = findChild(el, \"colFields\");\n if (colFieldsEl) {\n const colFields: number[] = [];\n for (const f of colFieldsEl.elements ?? []) {\n if (f.name === \"field\") {\n const x = attrNum(f, \"x\");\n if (x !== undefined) colFields.push(x);\n }\n }\n result.colFields = colFields;\n }\n\n // Page fields\n const pageFieldsEl = findChild(el, \"pageFields\");\n if (pageFieldsEl) {\n const pageFields: PageFieldParseResult[] = [];\n for (const pf of pageFieldsEl.elements ?? []) {\n if (pf.name !== \"pageField\") continue;\n const pfResult: PageFieldParseResult = {};\n const fld = attrNum(pf, \"fld\");\n if (fld !== undefined) pfResult.fld = fld;\n const hier = attrNum(pf, \"hier\");\n if (hier !== undefined) pfResult.hier = hier;\n if (attr(pf, \"cap\")) pfResult.cap = attr(pf, \"cap\");\n pageFields.push(pfResult);\n }\n result.pageFields = pageFields;\n }\n\n // Formats\n const formatsEl = findChild(el, \"formats\");\n if (formatsEl) {\n const formats: PivotFormatParseResult[] = [];\n for (const fmtEl of formatsEl.elements ?? []) {\n if (fmtEl.name !== \"format\") continue;\n const fmt: PivotFormatParseResult = {};\n if (attr(fmtEl, \"action\")) fmt.action = attr(fmtEl, \"action\");\n const dxfId = attrNum(fmtEl, \"dxfId\");\n if (dxfId !== undefined) fmt.dxfId = dxfId;\n const paEl = findChild(fmtEl, \"pivotArea\");\n if (paEl) fmt.pivotArea = parsePivotArea(paEl);\n formats.push(fmt);\n }\n result.formats = formats;\n }\n\n // ChartFormats\n const chartFormatsEl = findChild(el, \"chartFormats\");\n if (chartFormatsEl) {\n const chartFormats: ChartFormatParseResult[] = [];\n for (const cfEl of chartFormatsEl.elements ?? []) {\n if (cfEl.name !== \"chartFormat\") continue;\n const cf: ChartFormatParseResult = {};\n const chart = attrNum(cfEl, \"chart\");\n if (chart !== undefined) cf.chart = chart;\n const format = attrNum(cfEl, \"format\");\n if (format !== undefined) cf.format = format;\n if (attr(cfEl, \"series\") === \"1\") cf.series = true;\n const paEl = findChild(cfEl, \"pivotArea\");\n if (paEl) cf.pivotArea = parsePivotArea(paEl);\n chartFormats.push(cf);\n }\n result.chartFormats = chartFormats;\n }\n\n // PivotHierarchies\n const hierarchiesEl = findChild(el, \"pivotHierarchies\");\n if (hierarchiesEl) {\n const hierarchies: PivotHierarchyParseResult[] = [];\n for (const hEl of hierarchiesEl.elements ?? []) {\n if (hEl.name !== \"pivotHierarchy\") continue;\n const h: PivotHierarchyParseResult = {};\n if (attr(hEl, \"outline\") === \"1\") h.outline = true;\n if (attr(hEl, \"multipleItemSelectionAllowed\") === \"1\")\n h.multipleItemSelectionAllowed = true;\n if (attr(hEl, \"subtotalTop\") === \"1\") h.subtotalTop = true;\n if (attr(hEl, \"showInFieldList\") === \"0\") h.showInFieldList = false;\n if (attr(hEl, \"dragToRow\") === \"0\") h.dragToRow = false;\n if (attr(hEl, \"dragToCol\") === \"0\") h.dragToCol = false;\n if (attr(hEl, \"dragToPage\") === \"0\") h.dragToPage = false;\n if (attr(hEl, \"dragToData\") === \"1\") h.dragToData = true;\n if (attr(hEl, \"dragOff\") === \"0\") h.dragOff = false;\n if (attr(hEl, \"includeNewItemsInFilter\") === \"1\") h.includeNewItemsInFilter = true;\n if (attr(hEl, \"caption\")) h.caption = attr(hEl, \"caption\");\n hierarchies.push(h);\n }\n result.pivotHierarchies = hierarchies;\n }\n\n // Filters\n const filtersEl = findChild(el, \"filters\");\n if (filtersEl) {\n const filters: PivotFilterParseResult[] = [];\n for (const fEl of filtersEl.elements ?? []) {\n if (fEl.name !== \"filter\") continue;\n const f: PivotFilterParseResult = {};\n const fld = attrNum(fEl, \"fld\");\n if (fld !== undefined) f.fld = fld;\n if (attr(fEl, \"type\")) f.type = attr(fEl, \"type\");\n const id = attrNum(fEl, \"id\");\n if (id !== undefined) f.id = id;\n const mpFld = attrNum(fEl, \"mpFld\");\n if (mpFld !== undefined) f.mpFld = mpFld;\n const evalOrder = attrNum(fEl, \"evalOrder\");\n if (evalOrder !== undefined) f.evalOrder = evalOrder;\n filters.push(f);\n }\n result.filters = filters;\n }\n\n // RowHierarchiesUsage\n const rhuEl = findChild(el, \"rowHierarchiesUsage\");\n if (rhuEl) {\n const usage: HierarchyUsageParseResult[] = [];\n for (const u of rhuEl.elements ?? []) {\n if (u.name === \"rowHierarchyUsage\") {\n usage.push({ hierarchyUsage: attrNum(u, \"hierarchyUsage\") ?? 0 });\n }\n }\n result.rowHierarchiesUsage = usage;\n }\n\n // ColHierarchiesUsage\n const chuEl = findChild(el, \"colHierarchiesUsage\");\n if (chuEl) {\n const usage: HierarchyUsageParseResult[] = [];\n for (const u of chuEl.elements ?? []) {\n if (u.name === \"colHierarchyUsage\") {\n usage.push({ hierarchyUsage: attrNum(u, \"hierarchyUsage\") ?? 0 });\n }\n }\n result.colHierarchiesUsage = usage;\n }\n\n // CalculatedItems\n const ciEl = findChild(el, \"calculatedItems\");\n if (ciEl) {\n const items: CalculatedItemParseResult[] = [];\n for (const iEl of ciEl.elements ?? []) {\n if (iEl.name !== \"calculatedItem\") continue;\n const item: CalculatedItemParseResult = {};\n const field = attrNum(iEl, \"field\");\n if (field !== undefined) item.field = field;\n const formulaEl = findChild(iEl, \"formula\");\n if (formulaEl) item.formula = textOf(formulaEl);\n const paEl = findChild(iEl, \"pivotArea\");\n if (paEl) item.pivotArea = parsePivotArea(paEl);\n items.push(item);\n }\n result.calculatedItems = items;\n }\n\n // CalculatedMembers\n const cmEl = findChild(el, \"calculatedMembers\");\n if (cmEl) {\n const members: CalculatedMemberParseResult[] = [];\n for (const mEl of cmEl.elements ?? []) {\n if (mEl.name !== \"calculatedMember\") continue;\n const m: CalculatedMemberParseResult = {};\n if (attr(mEl, \"name\")) m.name = attr(mEl, \"name\");\n const mdxEl = findChild(mEl, \"mdx\");\n if (mdxEl) m.mdx = textOf(mdxEl) ?? \"\";\n if (attr(mEl, \"memberName\")) m.memberName = attr(mEl, \"memberName\");\n if (attr(mEl, \"hierarchy\")) m.hierarchy = attr(mEl, \"hierarchy\");\n if (attr(mEl, \"parent\")) m.parent = attr(mEl, \"parent\");\n const solveOrder = attrNum(mEl, \"solveOrder\");\n if (solveOrder !== undefined) m.solveOrder = solveOrder;\n if (attr(mEl, \"set\") === \"1\") m.set = true;\n members.push(m);\n }\n result.calculatedMembers = members;\n }\n\n // Style from pivotTableStyleInfo/@name (the standard location)\n const styleInfoEl = findChild(el, \"pivotTableStyleInfo\");\n if (styleInfoEl) {\n const styleName = attr(styleInfoEl, \"name\");\n if (styleName) result.style = styleName;\n } else if (attr(el, \"styleName\")) {\n result.style = attr(el, \"styleName\");\n }\n\n return result as PivotTableParseResult;\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(refs: PivotAreaReferenceOptions[]): 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// ── Parse helpers ──\n\nfunction parsePivotArea(el: XmlElement): Partial<PivotAreaOptions> {\n const result: Partial<PivotAreaOptions> = {};\n const field = attrNum(el, \"field\");\n if (field !== undefined) result.field = field;\n const typeVal = attr(el, \"type\");\n if (typeVal) result.type = typeVal as PivotAreaOptions[\"type\"];\n if (attr(el, \"dataOnly\") === \"0\") result.dataOnly = false;\n if (attr(el, \"labelOnly\") === \"1\") result.labelOnly = true;\n if (attr(el, \"grandRow\") === \"1\") result.grandRow = true;\n if (attr(el, \"grandCol\") === \"1\") result.grandCol = true;\n if (attr(el, \"cacheIndex\") === \"1\") result.cacheIndex = true;\n if (attr(el, \"outline\") === \"0\") result.outline = false;\n if (attr(el, \"offset\")) result.offset = attr(el, \"offset\");\n if (attr(el, \"collapsedLevelsAreSubtotals\") === \"1\") result.collapsedLevelsAreSubtotals = true;\n const axisVal = attr(el, \"axis\");\n if (axisVal) result.axis = axisVal as PivotAreaOptions[\"axis\"];\n const fp = attrNum(el, \"fieldPosition\");\n if (fp !== undefined) result.fieldPosition = fp;\n const refsEl = findChild(el, \"references\");\n if (refsEl) {\n const refs: Partial<PivotAreaReferenceOptions>[] = [];\n for (const rEl of refsEl.elements ?? []) {\n if (rEl.name !== \"reference\") continue;\n const ref: Partial<PivotAreaReferenceOptions> = {};\n const rField = attrNum(rEl, \"field\");\n if (rField !== undefined) ref.field = rField;\n const rCount = attrNum(rEl, \"count\");\n if (rCount !== undefined) ref.count = rCount;\n if (attr(rEl, \"selected\") === \"0\") ref.selected = false;\n if (attr(rEl, \"byPosition\") === \"1\") ref.byPosition = true;\n if (attr(rEl, \"relative\") === \"1\") ref.relative = true;\n if (attr(rEl, \"defaultSubtotal\") === \"1\") ref.defaultSubtotal = true;\n const xArr: number[] = [];\n for (const xEl of rEl.elements ?? []) {\n if (xEl.name === \"x\") {\n const v = attrNum(xEl, \"v\");\n if (v !== undefined) xArr.push(v);\n }\n }\n if (xArr.length > 0) ref.x = xArr;\n refs.push(ref);\n }\n result.references = refs;\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, WriteContext } 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\n/** One parsed cell from a pivotCacheRecords row (CT_Record). */\nexport type PivotCacheRecordEntry =\n | { type: \"string\"; v: number } // <x v=\"idx\"/> — shared-items index\n | { type: \"number\"; v: number } // <n v=\"num\"/>\n | { type: \"date\"; v: string } // <d v=\"date\"/>\n | { type: \"missing\" }; // <m/>\n\nexport interface PivotCacheRecordsDescriptorOptions {\n sourceData: PivotSourceData;\n /** Parsed records (from parse path) */\n records?: PivotCacheRecordEntry[][];\n}\n\nexport interface PivotCacheDefDescriptorOptions {\n sourceRef: string;\n sourceSheet: string;\n sourceData: PivotSourceData;\n recordsRid: string;\n cacheDefOpts?: PivotCacheDefinitionOptions;\n}\n\n/** Worksheet source (CT_WorksheetSource) parsed from a pivotCacheDefinition. */\nexport interface PivotCacheDefWorksheetSource {\n ref?: string;\n sheet?: string;\n}\n\n/** Cache field (CT_CacheField) parsed from a pivotCacheDefinition. */\nexport interface PivotCacheDefCacheField {\n name?: string;\n numFmtId?: number;\n sharedItems?: (string | number)[];\n}\n\n/** Structured output of {@link pivotCacheDefDesc}.parse — flat attributes + source + fields. */\nexport interface PivotCacheDefParseResult {\n invalid?: boolean;\n saveData?: boolean;\n optimizeMemory?: boolean;\n enableRefresh?: boolean;\n refreshedBy?: string;\n refreshedDate?: number;\n refreshedDateIso?: string;\n backgroundQuery?: boolean;\n missingItemsLimit?: number;\n upgradeOnRefresh?: boolean;\n supportSubquery?: boolean;\n supportAdvancedDrill?: boolean;\n recordCount?: number;\n sourceType?: string;\n worksheetSource?: PivotCacheDefWorksheetSource;\n cacheFields?: PivotCacheDefCacheField[];\n}\n\n/** Structured output of {@link pivotCacheRecordsDesc}.parse. */\nexport interface PivotCacheRecordsParseResult {\n records: PivotCacheRecordEntry[][];\n}\n\n// ── Descriptors ──\n\nexport const pivotCacheDefDesc: CustomDescriptor<\n PivotCacheDefDescriptorOptions,\n WriteContext,\n PivotCacheDefParseResult\n> = {\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: Partial<PivotCacheDefParseResult> = {};\n\n // Root element attributes\n if (attr(el, \"invalid\") === \"1\") result.invalid = true;\n if (attr(el, \"saveData\") === \"0\") result.saveData = false;\n if (attr(el, \"optimizeMemory\") === \"1\") result.optimizeMemory = true;\n if (attr(el, \"enableRefresh\") === \"0\") result.enableRefresh = false;\n if (attr(el, \"refreshedBy\")) result.refreshedBy = attr(el, \"refreshedBy\");\n const rd = attrNum(el, \"refreshedDate\");\n if (rd !== undefined) result.refreshedDate = rd;\n if (attr(el, \"refreshedDateIso\")) result.refreshedDateIso = attr(el, \"refreshedDateIso\");\n if (attr(el, \"backgroundQuery\") === \"1\") result.backgroundQuery = true;\n const mil = attrNum(el, \"missingItemsLimit\");\n if (mil !== undefined) result.missingItemsLimit = mil;\n if (attr(el, \"upgradeOnRefresh\") === \"1\") result.upgradeOnRefresh = true;\n if (attr(el, \"supportSubquery\") === \"1\") result.supportSubquery = true;\n if (attr(el, \"supportAdvancedDrill\") === \"1\") result.supportAdvancedDrill = true;\n const recordCount = attrNum(el, \"recordCount\");\n if (recordCount !== undefined) result.recordCount = recordCount;\n\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: PivotCacheDefWorksheetSource = {};\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: PivotCacheDefCacheField[] = [];\n for (const fEl of cfEl.elements ?? []) {\n if (fEl.name !== \"cacheField\") continue;\n const field: PivotCacheDefCacheField = {};\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 PivotCacheDefParseResult;\n },\n};\n\nexport const pivotCacheRecordsDesc: CustomDescriptor<\n PivotCacheRecordsDescriptorOptions,\n WriteContext,\n PivotCacheRecordsParseResult\n> = {\n kind: \"custom\",\n\n stringify(opts, _ctx) {\n return stringifyPivotCacheRecords(opts.sourceData);\n },\n\n parse(el, _ctx) {\n const records: PivotCacheRecordEntry[][] = [];\n for (const rEl of el.elements ?? []) {\n if (rEl.name !== \"r\") continue;\n const record: PivotCacheRecordEntry[] = [];\n for (const fEl of rEl.elements ?? []) {\n let entry: PivotCacheRecordEntry;\n if (fEl.name === \"x\") {\n entry = { type: \"string\", v: attrNum(fEl, \"v\") ?? 0 };\n } else if (fEl.name === \"n\") {\n const v = attr(fEl, \"v\");\n entry = { type: \"number\", v: v !== undefined ? Number(v) : 0 };\n } else if (fEl.name === \"d\") {\n entry = { type: \"date\", v: attr(fEl, \"v\") ?? \"\" };\n } else if (fEl.name === \"m\") {\n entry = { type: \"missing\" };\n } else {\n continue; // skip unrecognized cell elements\n }\n record.push(entry);\n }\n records.push(record);\n }\n return { records };\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 );\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(`<n v=\"${v}\"/>`);\n }\n p.push(\"</sharedItems></cacheField>\");\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 }\n\n p.push(\"</table>\");\n return p.join(\"\");\n },\n\n parse(el, _ctx) {\n const result: Partial<TableOptions> = {};\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\") as 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: TableColumnOptions[] = [];\n for (const colEl of colsEl.elements ?? []) {\n if (colEl.name !== \"tableColumn\") continue;\n // Column id is derived from position at stringify (i+1); not stored.\n const col: Partial<TableColumnOptions> = {};\n col.name = attr(colEl, \"name\") ?? \"\";\n if (attr(colEl, \"totalsRowFunction\"))\n col.totalsRowFunction = attr(colEl, \"totalsRowFunction\") as TotalsRowFunction;\n if (attr(colEl, \"totalsRowLabel\")) col.totalsRowLabel = attr(colEl, \"totalsRowLabel\");\n const ccfEl = findChild(colEl, \"calculatedColumnFormula\");\n if (ccfEl) {\n col.calculatedColumnFormula = textOf(ccfEl);\n if (attr(ccfEl, \"array\") === \"1\") col.calculatedColumnFormulaArray = true;\n }\n const trfEl = findChild(colEl, \"totalsRowFormula\");\n if (trfEl) {\n col.totalsRowFormula = textOf(trfEl);\n if (attr(trfEl, \"array\") === \"1\") col.totalsRowFormulaArray = true;\n }\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 as TableColumnOptions);\n }\n result.columns = columns;\n }\n\n // Table style info\n const siEl = findChild(el, \"tableStyleInfo\");\n if (siEl) {\n const style: Partial<TableStyleInfoOptions> = {};\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 TableOptions;\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 FileRecoveryPropertiesOptions {\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 WorkbookPropertiesOptions {\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 CalculationPropertiesOptions {\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?: FileRecoveryPropertiesOptions;\n functionGroups?: string[];\n webPublishing?: WebPublishingOptions;\n fileSharing?: FileSharingOptions;\n workbookPr?: WorkbookPropertiesOptions;\n calcPr?: CalculationPropertiesOptions;\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: Partial<WorkbookDescriptorOptions> = {};\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: WorkbookProtectionOptions = {};\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: WorkbookViewOptions = {};\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, \"autoFilterDateGrouping\") === \"0\") bv.autoFilterDateGrouping = false;\n const fs = attrNum(bvEl, \"firstSheet\");\n if (fs !== undefined) bv.firstSheet = fs;\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 const tr = attrNum(bvEl, \"tabRatio\");\n if (tr !== undefined) bv.tabRatio = tr;\n result.bookView = bv;\n }\n }\n\n // Calc properties\n const calcPrEl = findChild(el, \"calcPr\");\n if (calcPrEl?.attributes) {\n const calc: CalculationPropertiesOptions = {};\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 if (attr(calcPrEl, \"calcOnSave\") === \"0\") calc.calcOnSave = false;\n if (attr(calcPrEl, \"forceFullCalc\") === \"1\") calc.forceFullCalc = true;\n const cmc = attrNum(calcPrEl, \"concurrentManualCount\");\n if (cmc !== undefined) calc.concurrentManualCount = cmc;\n if (attr(calcPrEl, \"iterate\") === \"1\") calc.iterate = true;\n const ic = attrNum(calcPrEl, \"iterateCount\");\n if (ic !== undefined) calc.iterateCount = ic;\n const id = attrNum(calcPrEl, \"iterateDelta\");\n if (id !== undefined) calc.iterateDelta = id;\n if (attr(calcPrEl, \"fullPrecision\") === \"0\") calc.fullPrecision = false;\n if (attr(calcPrEl, \"calcCompleted\") === \"1\") calc.calcCompleted = true;\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 const view: CustomWorkbookViewOptions = {\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 const xw = attrNum(v, \"xWindow\");\n if (xw !== undefined) view.xWindow = xw;\n const yw = attrNum(v, \"yWindow\");\n if (yw !== undefined) view.yWindow = yw;\n if (attr(v, \"showFormulaBar\") === \"0\") view.showFormulaBar = false;\n if (attr(v, \"showStatusbar\") === \"0\") view.showStatusbar = false;\n if (attr(v, \"showHorizontalScroll\") === \"0\") view.showHorizontalScroll = false;\n if (attr(v, \"showVerticalScroll\") === \"0\") view.showVerticalScroll = false;\n if (attr(v, \"showSheetTabs\") === \"0\") view.showSheetTabs = false;\n const tabRatio = attrNum(v, \"tabRatio\");\n if (tabRatio !== undefined) view.tabRatio = tabRatio;\n if (attr(v, \"includeHiddenRowCol\") === \"0\") view.includeHiddenRowCol = false;\n if (attr(v, \"includePrintSettings\") === \"0\") view.includePrintSettings = false;\n if (attr(v, \"personalView\") === \"1\") view.personalView = true;\n if (attr(v, \"maximized\") === \"1\") view.maximized = true;\n if (attr(v, \"minimized\") === \"1\") view.minimized = true;\n if (attr(v, \"autoUpdate\") === \"1\") view.autoUpdate = true;\n const mi = attrNum(v, \"mergeInterval\");\n if (mi !== undefined) view.mergeInterval = mi;\n if (attr(v, \"changesSavedWin\") === \"1\") view.changesSavedWin = true;\n if (attr(v, \"onlySync\") === \"1\") view.onlySync = true;\n if (attr(v, \"showComments\")) view.showComments = attr(v, \"showComments\");\n views.push(view);\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: FileSharingOptions = {};\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 if (attr(fileSharingEl, \"algorithmName\"))\n fs.algorithmName = attr(fileSharingEl, \"algorithmName\");\n if (attr(fileSharingEl, \"hashValue\")) fs.hashValue = attr(fileSharingEl, \"hashValue\");\n if (attr(fileSharingEl, \"saltValue\")) fs.saltValue = attr(fileSharingEl, \"saltValue\");\n const sc = attrNum(fileSharingEl, \"spinCount\");\n if (sc !== undefined) fs.spinCount = sc;\n result.fileSharing = fs;\n }\n\n // Web publishing\n const webPublishingEl = findChild(el, \"webPublishing\");\n if (webPublishingEl?.attributes) {\n const wp: WebPublishingOptions = {};\n if (attr(webPublishingEl, \"css\") === \"0\") wp.css = false;\n if (attr(webPublishingEl, \"thicket\") === \"0\") wp.thicket = false;\n if (attr(webPublishingEl, \"longFileNames\") === \"0\") wp.longFileNames = false;\n if (attr(webPublishingEl, \"vml\") === \"1\") wp.vml = true;\n if (attr(webPublishingEl, \"allowPng\") === \"1\") wp.allowPng = true;\n if (attr(webPublishingEl, \"targetScreenSize\"))\n wp.targetScreenSize = attr(webPublishingEl, \"targetScreenSize\");\n const dpi = attrNum(webPublishingEl, \"dpi\");\n if (dpi !== undefined) wp.dpi = dpi;\n const codePage = attrNum(webPublishingEl, \"codePage\");\n if (codePage !== undefined) wp.codePage = codePage;\n if (attr(webPublishingEl, \"characterSet\"))\n wp.characterSet = attr(webPublishingEl, \"characterSet\");\n result.webPublishing = wp;\n }\n\n // File recovery\n const fileRecoveryEl = findChild(el, \"fileRecoveryPr\");\n if (fileRecoveryEl?.attributes) {\n const frp: FileRecoveryPropertiesOptions = {};\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 // Workbook properties\n const wbPrEl = findChild(el, \"workbookPr\");\n if (wbPrEl?.attributes) {\n const wbPr: WorkbookPropertiesOptions = {};\n if (attr(wbPrEl, \"date1904\") === \"1\") wbPr.date1904 = true;\n const dtv = attrNum(wbPrEl, \"defaultThemeVersion\");\n if (dtv !== undefined) wbPr.defaultThemeVersion = dtv;\n if (attr(wbPrEl, \"showObjects\")) wbPr.showObjects = attr(wbPrEl, \"showObjects\");\n if (attr(wbPrEl, \"hidePivotFieldList\") === \"1\") wbPr.hidePivotFieldList = true;\n if (attr(wbPrEl, \"allowRefreshQuery\") === \"1\") wbPr.allowRefreshQuery = true;\n if (attr(wbPrEl, \"filterPrivacy\") === \"1\") wbPr.filterPrivacy = true;\n if (attr(wbPrEl, \"backupFile\") === \"1\") wbPr.backupFile = true;\n if (attr(wbPrEl, \"codeName\")) wbPr.codeName = attr(wbPrEl, \"codeName\");\n if (attr(wbPrEl, \"showBorderUnselectedTables\") === \"1\")\n wbPr.showBorderUnselectedTables = true;\n if (attr(wbPrEl, \"promptedSolutions\") === \"1\") wbPr.promptedSolutions = true;\n if (attr(wbPrEl, \"showInkAnnotation\") === \"0\") wbPr.showInkAnnotation = false;\n if (attr(wbPrEl, \"saveExternalLinkValues\") === \"0\") wbPr.saveExternalLinkValues = false;\n if (attr(wbPrEl, \"updateLinks\")) wbPr.updateLinks = attr(wbPrEl, \"updateLinks\");\n if (attr(wbPrEl, \"showPivotChartFilter\") === \"1\") wbPr.showPivotChartFilter = true;\n if (attr(wbPrEl, \"publishItems\") === \"1\") wbPr.publishItems = true;\n if (attr(wbPrEl, \"checkCompatibility\") === \"1\") wbPr.checkCompatibility = true;\n if (attr(wbPrEl, \"autoCompressPictures\") === \"0\") wbPr.autoCompressPictures = false;\n if (attr(wbPrEl, \"refreshAllConnections\") === \"1\") wbPr.refreshAllConnections = true;\n result.workbookPr = wbPr;\n }\n\n // Function groups\n const fgEl = findChild(el, \"functionGroups\");\n if (fgEl) {\n const names: string[] = [];\n for (const fg of fgEl.elements ?? []) {\n if (fg.name === \"functionGroup\" && attr(fg, \"name\")) {\n names.push(attr(fg, \"name\")!);\n }\n }\n if (names.length > 0) result.functionGroups = names;\n }\n\n // Web publish objects\n const wpoEl = findChild(el, \"webPublishObjects\");\n if (wpoEl) {\n const objs: WebPublishObjectOptions[] = [];\n for (const wo of wpoEl.elements ?? []) {\n if (wo.name !== \"webPublishObject\") continue;\n const obj: WebPublishObjectOptions = {\n rId: (wo.attributes?.[\"r:id\"] as string) ?? \"\",\n };\n if (attr(wo, \"destinationFile\")) obj.destinationFile = attr(wo, \"destinationFile\");\n if (attr(wo, \"autoRepublish\") === \"1\") obj.autoRepublish = true;\n if (attr(wo, \"title\")) obj.title = attr(wo, \"title\");\n if (attr(wo, \"sourceObject\")) obj.sourceObject = attr(wo, \"sourceObject\");\n if (attr(wo, \"appName\")) obj.appName = attr(wo, \"appName\");\n objs.push(obj);\n }\n if (objs.length > 0) result.webPublishObjects = objs;\n }\n\n // Volatile types (volTypes)\n const vtEl = findChild(el, \"volTypes\");\n if (vtEl) {\n const volTypes: VolTypeOptions[] = [];\n for (const vt of vtEl.elements ?? []) {\n if (vt.name !== \"volType\") continue;\n const volType: VolTypeOptions = {};\n const typeVal = attr(vt, \"type\");\n if (typeVal) volType.type = typeVal as VolTypeOptions[\"type\"];\n const mains: VolMainOptions[] = [];\n for (const m of vt.elements ?? []) {\n if (m.name !== \"main\") continue;\n const main: VolMainOptions = { first: attr(m, \"first\") ?? \"\" };\n const topics: VolTopicOptions[] = [];\n for (const tp of m.elements ?? []) {\n if (tp.name !== \"tp\") continue;\n const vEl = findChild(tp, \"v\");\n const topic: VolTopicOptions = { value: String(vEl?.elements?.[0]?.text ?? \"\") };\n const tVal = attr(tp, \"t\");\n if (tVal) topic.valueType = tVal;\n const stps: string[] = [];\n const refs: VolTopicRefOptions[] = [];\n for (const inner of tp.elements ?? []) {\n if (inner.name === \"stp\") stps.push(String(inner.elements?.[0]?.text ?? \"\"));\n if (inner.name === \"tr\") {\n const ref: VolTopicRefOptions = {\n reference: attr(inner, \"r\") ?? \"\",\n sheetIndex: attrNum(inner, \"s\") ?? 0,\n };\n refs.push(ref);\n }\n }\n if (stps.length > 0) topic.stringTopics = stps;\n if (refs.length > 0) topic.refs = refs;\n topics.push(topic);\n }\n if (topics.length > 0) main.topics = topics;\n mains.push(main);\n }\n if (mains.length > 0) volType.mains = mains;\n volTypes.push(volType);\n }\n if (volTypes.length > 0) result.volTypes = volTypes;\n }\n\n // Conformance\n if (el.attributes?.[\"conformance\"]) {\n result.conformance = attr(el, \"conformance\") as WorkbookConformance;\n }\n\n return result as WorkbookDescriptorOptions;\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 * Revision log descriptors for shared-workbook change tracking.\n *\n * Three parts:\n * - xl/revisionHeaders.xml (CT_RevisionHeaders) — index of revision logs\n * - xl/revisions/revisionN.xml (CT_Revisions) — one log per header entry\n * - xl/users.xml (CT_Users) — shared-workbook users\n *\n * Reference: OOXML transitional, sml.xsd — CT_RevisionHeaders (:1860),\n * CT_RevisionHeader (:1898), CT_Revisions (:1877, 12 revision elements),\n * CT_Users (:2100), AG_RevData (:1893).\n *\n * Nested CT_Cell (oc/nc) and CT_Dxf (odxf/ndxf/dxf) carry through verbatim as\n * `*Xml` strings — their full content model is large and revision round-trip only\n * needs lossless preservation, not a re-authored abstraction.\n *\n * @module\n */\n\nimport type { CustomDescriptor } from \"@office-open/core/descriptor\";\nimport { attr, escapeXml, findChild, children, textOf } from \"@office-open/xml\";\nimport type { Element as XmlElement } from \"@office-open/xml\";\n\nconst S_NS = \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\";\nconst R_NS = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\";\n\n// ── Revision row/column action (ST_rwColActionType, sml.xsd:2076) ──\n\nexport type RowColumnAction = \"insertRow\" | \"deleteRow\" | \"insertCol\" | \"deleteCol\";\n\n/** Revision action for comments / custom views (ST_RevisionAction, sml.xsd:2084). */\nexport type RevisionAction = \"add\" | \"delete\";\n\n// ════════════════════════════════════════════════════════════════════════════\n// Revision Headers — xl/revisionHeaders.xml (CT_RevisionHeaders)\n// ════════════════════════════════════════════════════════════════════════════\n\n/** One header entry (CT_RevisionHeader, sml.xsd:1898). */\nexport interface RevisionHeaderEntry {\n /** Unique GUID for this revision (required, ST_Guid). */\n guid: string;\n /** Date/time of the revision (required, xsd:dateTime). */\n dateTime: string;\n /** User who made the revision (required, ST_Xstring). */\n userName: string;\n /** Relationship ID pointing to the revision log file (required, r:id). */\n rId: string;\n /** Max sheet ID at the time of revision (required). */\n maxSheetId: number;\n /** Sheet ID map entries (required, ≥1). */\n sheetIds: number[];\n /** Reviewed revision IDs (reviewedList.reviewed[].rId, optional). */\n reviewed?: number[];\n /** Minimum revision ID (optional). */\n minRId?: number;\n /** Maximum revision ID (optional). */\n maxRId?: number;\n}\n\n/** Options for xl/revisionHeaders.xml (CT_RevisionHeaders, sml.xsd:1860). */\nexport interface RevisionHeadersOptions {\n /** Unique GUID for the headers collection (required). */\n guid: string;\n /** Revision header entries (required, ≥1). */\n headers: RevisionHeaderEntry[];\n /** Last GUID (optional). */\n lastGuid?: string;\n /** Shared workbook (default true). */\n shared?: boolean;\n /** Disk revisions (default false). */\n diskRevisions?: boolean;\n /** History kept (default true). */\n history?: boolean;\n /** Track revisions (default true). */\n trackRevisions?: boolean;\n /** Exclusive (default false). */\n exclusive?: boolean;\n /** Revision ID counter (default 0). */\n revisionId?: number;\n /** Version (default 1). */\n version?: number;\n /** Keep change history (default true). */\n keepChangeHistory?: boolean;\n /** Protected (default false). */\n protected?: boolean;\n /** Preserve history days (default 30). */\n preserveHistory?: number;\n}\n\nfunction stringifyHeader(h: RevisionHeaderEntry): string {\n const sheetIds = h.sheetIds.map((id) => `<sheetId val=\"${id}\"/>`).join(\"\");\n const reviewedXml =\n h.reviewed && h.reviewed.length > 0\n ? `<reviewedList count=\"${h.reviewed.length}\">${h.reviewed\n .map((r) => `<reviewed rId=\"${r}\"/>`)\n .join(\"\")}</reviewedList>`\n : \"\";\n let attrs =\n ` guid=\"${escapeXml(h.guid)}\" dateTime=\"${escapeXml(h.dateTime)}\"` +\n ` maxSheetId=\"${h.maxSheetId}\" userName=\"${escapeXml(h.userName)}\"` +\n ` r:id=\"${escapeXml(h.rId)}\"`;\n if (h.minRId !== undefined) attrs += ` minRId=\"${h.minRId}\"`;\n if (h.maxRId !== undefined) attrs += ` maxRId=\"${h.maxRId}\"`;\n return `<header${attrs}><sheetIdMap count=\"${h.sheetIds.length}\">${sheetIds}</sheetIdMap>${reviewedXml}</header>`;\n}\n\nfunction parseHeader(el: XmlElement): RevisionHeaderEntry {\n const guid = attr(el, \"guid\") ?? \"\";\n const dateTime = attr(el, \"dateTime\") ?? \"\";\n const userName = attr(el, \"userName\") ?? \"\";\n // r:id lives in the relationships namespace\n const rId = String(el.attributes?.[\"r:id\"] ?? el.attributes?.[\"id\"] ?? \"\");\n const maxSheetId = Number(attr(el, \"maxSheetId\") ?? \"0\");\n const sheetIdMap = findChild(el, \"sheetIdMap\");\n const sheetIds = children(sheetIdMap, \"sheetId\").map((s) => Number(attr(s, \"val\") ?? \"0\"));\n const result: RevisionHeaderEntry = { guid, dateTime, userName, rId, maxSheetId, sheetIds };\n const reviewedList = findChild(el, \"reviewedList\");\n if (reviewedList) {\n const reviewed = children(reviewedList, \"reviewed\").map((r) => Number(attr(r, \"rId\") ?? \"0\"));\n if (reviewed.length > 0) result.reviewed = reviewed;\n }\n const minRId = attr(el, \"minRId\");\n if (minRId !== undefined) result.minRId = Number(minRId);\n const maxRId = attr(el, \"maxRId\");\n if (maxRId !== undefined) result.maxRId = Number(maxRId);\n return result;\n}\n\nexport const revisionHeadersDesc: CustomDescriptor<RevisionHeadersOptions> = {\n kind: \"custom\",\n\n stringify(opts, _ctx) {\n if (opts.headers.length === 0) return undefined;\n let attrs = ` xmlns=\"${S_NS}\" xmlns:r=\"${R_NS}\" guid=\"${escapeXml(opts.guid)}\"`;\n if (opts.lastGuid) attrs += ` lastGuid=\"${escapeXml(opts.lastGuid)}\"`;\n if (opts.shared !== undefined) attrs += ` shared=\"${opts.shared ? 1 : 0}\"`;\n if (opts.diskRevisions !== undefined) attrs += ` diskRevisions=\"${opts.diskRevisions ? 1 : 0}\"`;\n if (opts.history !== undefined) attrs += ` history=\"${opts.history ? 1 : 0}\"`;\n if (opts.trackRevisions !== undefined)\n attrs += ` trackRevisions=\"${opts.trackRevisions ? 1 : 0}\"`;\n if (opts.exclusive !== undefined) attrs += ` exclusive=\"${opts.exclusive ? 1 : 0}\"`;\n if (opts.revisionId !== undefined) attrs += ` revisionId=\"${opts.revisionId}\"`;\n if (opts.version !== undefined) attrs += ` version=\"${opts.version}\"`;\n if (opts.keepChangeHistory !== undefined)\n attrs += ` keepChangeHistory=\"${opts.keepChangeHistory ? 1 : 0}\"`;\n if (opts.protected !== undefined) attrs += ` protected=\"${opts.protected ? 1 : 0}\"`;\n if (opts.preserveHistory !== undefined) attrs += ` preserveHistory=\"${opts.preserveHistory}\"`;\n return `<headers${attrs}>${opts.headers.map(stringifyHeader).join(\"\")}</headers>`;\n },\n\n parse(el, _ctx) {\n const guid = attr(el, \"guid\") ?? \"\";\n const headers = children(el, \"header\").map(parseHeader);\n const result: Partial<RevisionHeadersOptions> = { guid, headers };\n const lastGuid = attr(el, \"lastGuid\");\n if (lastGuid !== undefined) result.lastGuid = lastGuid;\n readBool(el, \"shared\", (v) => (result.shared = v));\n readBool(el, \"diskRevisions\", (v) => (result.diskRevisions = v));\n readBool(el, \"history\", (v) => (result.history = v));\n readBool(el, \"trackRevisions\", (v) => (result.trackRevisions = v));\n readBool(el, \"exclusive\", (v) => (result.exclusive = v));\n readNum(el, \"revisionId\", (v) => (result.revisionId = v));\n readNum(el, \"version\", (v) => (result.version = v));\n readBool(el, \"keepChangeHistory\", (v) => (result.keepChangeHistory = v));\n readBool(el, \"protected\", (v) => (result.protected = v));\n readNum(el, \"preserveHistory\", (v) => (result.preserveHistory = v));\n return result as RevisionHeadersOptions;\n },\n};\n\n// ════════════════════════════════════════════════════════════════════════════\n// Users — xl/users.xml (CT_Users, sml.xsd:2100)\n// ════════════════════════════════════════════════════════════════════════════\n\n/** One shared-workbook user (CT_SharedUser, sml.xsd:2106). */\nexport interface SharedUserOptions {\n /** GUID (required, ST_Guid). */\n guid: string;\n /** User name (required, ST_Xstring). */\n name: string;\n /** User ID (required). */\n id: number;\n /** Date/time of last edit (required, xsd:dateTime). */\n dateTime: string;\n}\n\n/** Options for xl/users.xml (CT_Users, sml.xsd:2100). */\nexport interface UsersOptions {\n /** Shared-user entries (optional, ≤256). */\n users?: SharedUserOptions[];\n}\n\nexport const usersDesc: CustomDescriptor<UsersOptions> = {\n kind: \"custom\",\n\n stringify(opts, _ctx) {\n if (!opts.users || opts.users.length === 0) return undefined;\n const users = opts.users\n .map(\n (u) =>\n `<userInfo guid=\"${escapeXml(u.guid)}\" name=\"${escapeXml(u.name)}\" id=\"${u.id}\"` +\n ` dateTime=\"${escapeXml(u.dateTime)}\"/>`,\n )\n .join(\"\");\n return `<users xmlns=\"${S_NS}\" count=\"${opts.users.length}\">${users}</users>`;\n },\n\n parse(el, _ctx) {\n const users = children(el, \"userInfo\").map((u) => ({\n guid: attr(u, \"guid\") ?? \"\",\n name: attr(u, \"name\") ?? \"\",\n id: Number(attr(u, \"id\") ?? \"0\"),\n dateTime: attr(u, \"dateTime\") ?? \"\",\n }));\n const result: Partial<UsersOptions> = {};\n if (users.length > 0) result.users = users;\n return result as UsersOptions;\n },\n};\n\n// ════════════════════════════════════════════════════════════════════════════\n// Revision Log — xl/revisions/revisionN.xml (CT_Revisions, sml.xsd:1877)\n// ════════════════════════════════════════════════════════════════════════════\n\n// AG_RevData (sml.xsd:1893): rId required, ua (undo), ra (rejected).\n// Present on: rrc, rm, rsnm, ris, rcc, rdn, rcft. Absent on: rcv, rfmt, raf, rcmt, rqt.\n\n/** Row/column insert/delete (CT_RevisionRowColumn, sml.xsd:1943). */\nexport interface RevisionRowColumnOptions {\n /** Revision ID (AG_RevData rId, required). */\n rId: number;\n /** Sheet ID (sId, required). */\n sheetId: number;\n /** Affected range (required, ST_Ref). */\n ref: string;\n /** Insertion/deletion action (required). */\n action: RowColumnAction;\n /** End of list (eol, default false). */\n endOfList?: boolean;\n /** Edge tracking (default false). */\n edge?: boolean;\n /** Revision was performed by an undo (ua). */\n undo?: boolean;\n /** Revision was rejected (ra). */\n rejected?: boolean;\n /** Nested undo/rcc/rfmt children verbatim (optional). */\n childrenXml?: string;\n}\n\n/** Cell move (CT_RevisionMove, sml.xsd:1956). */\nexport interface RevisionMoveOptions {\n /** Revision ID (AG_RevData rId, required). */\n rId: number;\n /** Sheet ID (required). */\n sheetId: number;\n /** Source range (required, ST_Ref). */\n source: string;\n /** Destination range (required, ST_Ref). */\n destination: string;\n /** Source sheet ID (default 0). */\n sourceSheetId?: number;\n /** Revision was performed by an undo (ua). */\n undo?: boolean;\n /** Revision was rejected (ra). */\n rejected?: boolean;\n /** Nested undo/rcc/rfmt children verbatim (optional). */\n childrenXml?: string;\n}\n\n/** Custom view add/delete (CT_RevisionCustomView, sml.xsd:1968 — no AG_RevData). */\nexport interface RevisionCustomViewOptions {\n /** GUID (required, ST_Guid). */\n guid: string;\n /** Action (required). */\n action: RevisionAction;\n}\n\n/** Sheet rename (CT_RevisionSheetRename, sml.xsd:1972). */\nexport interface RevisionSheetRenameOptions {\n /** Revision ID (AG_RevData rId, required). */\n rId: number;\n /** Sheet ID (required). */\n sheetId: number;\n /** Old sheet name (required, ST_Xstring). */\n oldName: string;\n /** New sheet name (required, ST_Xstring). */\n newName: string;\n /** Revision was performed by an undo (ua). */\n undo?: boolean;\n /** Revision was rejected (ra). */\n rejected?: boolean;\n}\n\n/** Sheet insertion (CT_RevisionInsertSheet, sml.xsd:1981). */\nexport interface RevisionInsertSheetOptions {\n /** Revision ID (AG_RevData rId, required). */\n rId: number;\n /** Sheet ID (required). */\n sheetId: number;\n /** Sheet name (required, ST_Xstring). */\n name: string;\n /** Sheet position (required). */\n sheetPosition: number;\n /** Revision was performed by an undo (ua). */\n undo?: boolean;\n /** Revision was rejected (ra). */\n rejected?: boolean;\n}\n\n/** Cell value change (CT_RevisionCellChange, sml.xsd:1987). */\nexport interface RevisionCellChangeOptions {\n /** Revision ID (AG_RevData rId, required). */\n rId: number;\n /** Sheet ID (sId, required). */\n sheetId: number;\n /** Has old differential format (odxf attr, default false). */\n hasOldDxf?: boolean;\n /** XF differential format (xfDxf, default false). */\n xfDxf?: boolean;\n /** Has style (s, default false). */\n style?: boolean;\n /** Has differential format (dxf attr, default false). */\n hasDxf?: boolean;\n /** Number format ID (optional). */\n numFmtId?: number;\n /** Quote prefix (default false). */\n quotePrefix?: boolean;\n /** Old quote prefix (default false). */\n oldQuotePrefix?: boolean;\n /** Phonetic (ph, default false). */\n phonetic?: boolean;\n /** Old phonetic (default false). */\n oldPhonetic?: boolean;\n /** End of list formula update (default false). */\n endOfListFormulaUpdate?: boolean;\n /** Revision was performed by an undo (ua). */\n undo?: boolean;\n /** Revision was rejected (ra). */\n rejected?: boolean;\n /** Old cell (oc) verbatim CT_Cell XML (optional). */\n oldCellXml?: string;\n /** New cell (nc) verbatim CT_Cell XML (required). */\n newCellXml: string;\n /** Old differential format (odxf) verbatim CT_Dxf XML (optional). */\n oldDxfXml?: string;\n /** New differential format (ndxf) verbatim CT_Dxf XML (optional). */\n newDxfXml?: string;\n}\n\n/** Formatting change (CT_RevisionFormatting, sml.xsd:2008 — no AG_RevData). */\nexport interface RevisionFormattingOptions {\n /** Sheet ID (required). */\n sheetId: number;\n /** Sequence of cell refs (sqref, required). */\n sqref: string;\n /** XF differential format (default false). */\n xfDxf?: boolean;\n /** Has style (s, default false). */\n style?: boolean;\n /** Start index (optional). */\n start?: number;\n /** Length (optional). */\n length?: number;\n /** Differential format (dxf) verbatim CT_Dxf XML (optional). */\n dxfXml?: string;\n}\n\n/** Auto formatting (CT_RevisionAutoFormatting, sml.xsd:2020 — no AG_RevData). */\nexport interface RevisionAutoFormattingOptions {\n /** Sheet ID (required). */\n sheetId: number;\n /** Affected range (required, ST_Ref). */\n ref: string;\n /** AG_AutoFormat attributes verbatim (optional, e.g. format/align/...). */\n autoFormatXml?: string;\n}\n\n/** Defined name change (CT_RevisionDefinedName, sml.xsd:2038). */\nexport interface RevisionDefinedNameOptions {\n /** Revision ID (AG_RevData rId, required). */\n rId: number;\n /** Defined name (required, ST_Xstring). */\n name: string;\n /** Local sheet ID (optional; -1 or omitted = workbook-global). */\n localSheetId?: number;\n /** Custom view (default false). */\n customView?: boolean;\n /** New formula expression (optional). */\n formula?: string;\n /** Old formula expression (optional). */\n oldFormula?: string;\n /** Is function (default false). */\n function?: boolean;\n /** Old function flag (default false). */\n oldFunction?: boolean;\n /** Function group ID (optional). */\n functionGroupId?: number;\n /** Old function group ID (optional). */\n oldFunctionGroupId?: number;\n /** Shortcut key (optional, unsignedByte). */\n shortcutKey?: number;\n /** Old shortcut key (optional, unsignedByte). */\n oldShortcutKey?: number;\n /** Hidden (default false). */\n hidden?: boolean;\n /** Old hidden flag (default false). */\n oldHidden?: boolean;\n /** Custom menu (optional). */\n customMenu?: string;\n /** Old custom menu (optional). */\n oldCustomMenu?: string;\n /** Description (optional). */\n description?: string;\n /** Old description (optional). */\n oldDescription?: string;\n /** Help text (optional). */\n help?: string;\n /** Old help text (optional). */\n oldHelp?: string;\n /** Status bar text (optional). */\n statusBar?: string;\n /** Old status bar text (optional). */\n oldStatusBar?: string;\n /** Comment (optional). */\n comment?: string;\n /** Old comment (optional). */\n oldComment?: string;\n /** Revision was performed by an undo (ua). */\n undo?: boolean;\n /** Revision was rejected (ra). */\n rejected?: boolean;\n}\n\n/** Comment revision (CT_RevisionComment, sml.xsd:2025 — no AG_RevData). */\nexport interface RevisionCommentOptions {\n /** Sheet ID (required). */\n sheetId: number;\n /** Cell reference (required, ST_CellRef). */\n cell: string;\n /** GUID (required, ST_Guid). */\n guid: string;\n /** Action (default add). */\n action?: RevisionAction;\n /** Always show (default false). */\n alwaysShow?: boolean;\n /** Old comment flag (default false). */\n old?: boolean;\n /** Hidden row (default false). */\n hiddenRow?: boolean;\n /** Hidden column (default false). */\n hiddenColumn?: boolean;\n /** Author (required, ST_Xstring). */\n author: string;\n /** Old text length (default 0). */\n oldLength?: number;\n /** New text length (default 0). */\n newLength?: number;\n}\n\n/** Query table field change (CT_RevisionQueryTableField, sml.xsd:2071 — no AG_RevData). */\nexport interface RevisionQueryTableFieldOptions {\n /** Sheet ID (required). */\n sheetId: number;\n /** Affected range (required, ST_Ref). */\n ref: string;\n /** Field ID (required). */\n fieldId: number;\n}\n\n/** Conflict (CT_RevisionConflict, sml.xsd:2067). */\nexport interface RevisionConflictOptions {\n /** Revision ID (AG_RevData rId, required). */\n rId: number;\n /** Revision was performed by an undo (ua). */\n undo?: boolean;\n /** Revision was rejected (ra). */\n rejected?: boolean;\n /** Sheet ID (optional). */\n sheetId?: number;\n}\n\n/** Discriminated union of all CT_Revisions choice elements (sml.xsd:1877-1891). */\nexport type RevisionEntry =\n | { type: \"rowColumn\"; data: RevisionRowColumnOptions }\n | { type: \"move\"; data: RevisionMoveOptions }\n | { type: \"customView\"; data: RevisionCustomViewOptions }\n | { type: \"sheetRename\"; data: RevisionSheetRenameOptions }\n | { type: \"insertSheet\"; data: RevisionInsertSheetOptions }\n | { type: \"cellChange\"; data: RevisionCellChangeOptions }\n | { type: \"formatting\"; data: RevisionFormattingOptions }\n | { type: \"autoFormatting\"; data: RevisionAutoFormattingOptions }\n | { type: \"definedName\"; data: RevisionDefinedNameOptions }\n | { type: \"comment\"; data: RevisionCommentOptions }\n | { type: \"queryTableField\"; data: RevisionQueryTableFieldOptions }\n | { type: \"conflict\"; data: RevisionConflictOptions };\n\n/** Options for xl/revisions/revisionN.xml (CT_Revisions, sml.xsd:1877). */\nexport interface RevisionLogOptions {\n /** Revision entries (the CT_Revisions choice sequence). */\n revisions: RevisionEntry[];\n}\n\n// ── Per-revision stringify ──\n\nfunction agRevData(data: { rId: number; undo?: boolean; rejected?: boolean }): string {\n let s = ` rId=\"${data.rId}\"`;\n if (data.undo) s += ` ua=\"1\"`;\n if (data.rejected) s += ` ra=\"1\"`;\n return s;\n}\n\nfunction stringifyEntry(entry: RevisionEntry): string {\n switch (entry.type) {\n case \"rowColumn\": {\n const d = entry.data;\n let a = agRevData(d) + ` sId=\"${d.sheetId}\" ref=\"${escapeXml(d.ref)}\" action=\"${d.action}\"`;\n if (d.endOfList) a += ` eol=\"1\"`;\n if (d.edge) a += ` edge=\"1\"`;\n return `<rrc${a}>${d.childrenXml ?? \"\"}</rrc>`;\n }\n case \"move\": {\n const d = entry.data;\n let a =\n agRevData(d) +\n ` sheetId=\"${d.sheetId}\" source=\"${escapeXml(d.source)}\" destination=\"${escapeXml(d.destination)}\"`;\n if (d.sourceSheetId !== undefined) a += ` sourceSheetId=\"${d.sourceSheetId}\"`;\n return `<rm${a}>${d.childrenXml ?? \"\"}</rm>`;\n }\n case \"customView\": {\n const d = entry.data;\n return `<rcv guid=\"${escapeXml(d.guid)}\" action=\"${d.action}\"/>`;\n }\n case \"sheetRename\": {\n const d = entry.data;\n return `<rsnm${agRevData(d)} sheetId=\"${d.sheetId}\" oldName=\"${escapeXml(\n d.oldName,\n )}\" newName=\"${escapeXml(d.newName)}\"/>`;\n }\n case \"insertSheet\": {\n const d = entry.data;\n return `<ris${agRevData(d)} sheetId=\"${d.sheetId}\" name=\"${escapeXml(\n d.name,\n )}\" sheetPosition=\"${d.sheetPosition}\"/>`;\n }\n case \"cellChange\": {\n const d = entry.data;\n let a = agRevData(d) + ` sId=\"${d.sheetId}\"`;\n if (d.hasOldDxf) a += ` odxf=\"1\"`;\n if (d.xfDxf) a += ` xfDxf=\"1\"`;\n if (d.style) a += ` s=\"1\"`;\n if (d.hasDxf) a += ` dxf=\"1\"`;\n if (d.numFmtId !== undefined) a += ` numFmtId=\"${d.numFmtId}\"`;\n if (d.quotePrefix) a += ` quotePrefix=\"1\"`;\n if (d.oldQuotePrefix) a += ` oldQuotePrefix=\"1\"`;\n if (d.phonetic) a += ` ph=\"1\"`;\n if (d.oldPhonetic) a += ` oldPh=\"1\"`;\n if (d.endOfListFormulaUpdate) a += ` endOfListFormulaUpdate=\"1\"`;\n const children = [d.oldCellXml ?? \"\", d.newCellXml, d.oldDxfXml ?? \"\", d.newDxfXml ?? \"\"]\n .filter(Boolean)\n .join(\"\");\n return `<rcc${a}>${children}</rcc>`;\n }\n case \"formatting\": {\n const d = entry.data;\n let a = ` sheetId=\"${d.sheetId}\" sqref=\"${escapeXml(d.sqref)}\"`;\n if (d.xfDxf) a += ` xfDxf=\"1\"`;\n if (d.style) a += ` s=\"1\"`;\n if (d.start !== undefined) a += ` start=\"${d.start}\"`;\n if (d.length !== undefined) a += ` length=\"${d.length}\"`;\n return `<rfmt${a}>${d.dxfXml ?? \"\"}</rfmt>`;\n }\n case \"autoFormatting\": {\n const d = entry.data;\n return `<raf sheetId=\"${d.sheetId}\" ref=\"${escapeXml(d.ref)}\"${d.autoFormatXml ?? \"\"}/>`;\n }\n case \"definedName\": {\n const d = entry.data;\n let a = agRevData(d) + ` name=\"${escapeXml(d.name)}\"`;\n if (d.localSheetId !== undefined) a += ` localSheetId=\"${d.localSheetId}\"`;\n if (d.customView) a += ` customView=\"1\"`;\n if (d.function) a += ` function=\"1\"`;\n if (d.oldFunction) a += ` oldFunction=\"1\"`;\n if (d.functionGroupId !== undefined) a += ` functionGroupId=\"${d.functionGroupId}\"`;\n if (d.oldFunctionGroupId !== undefined) a += ` oldFunctionGroupId=\"${d.oldFunctionGroupId}\"`;\n if (d.shortcutKey !== undefined) a += ` shortcutKey=\"${d.shortcutKey}\"`;\n if (d.oldShortcutKey !== undefined) a += ` oldShortcutKey=\"${d.oldShortcutKey}\"`;\n if (d.hidden) a += ` hidden=\"1\"`;\n if (d.oldHidden) a += ` oldHidden=\"1\"`;\n const xstring = (v: string | undefined, attr: string) =>\n v !== undefined ? ` ${attr}=\"${escapeXml(v)}\"` : \"\";\n a += xstring(d.customMenu, \"customMenu\") + xstring(d.oldCustomMenu, \"oldCustomMenu\");\n a += xstring(d.description, \"description\") + xstring(d.oldDescription, \"oldDescription\");\n a += xstring(d.help, \"help\") + xstring(d.oldHelp, \"oldHelp\");\n a += xstring(d.statusBar, \"statusBar\") + xstring(d.oldStatusBar, \"oldStatusBar\");\n a += xstring(d.comment, \"comment\") + xstring(d.oldComment, \"oldComment\");\n const children = [\n d.formula !== undefined ? `<formula>${escapeXml(d.formula)}</formula>` : \"\",\n d.oldFormula !== undefined ? `<oldFormula>${escapeXml(d.oldFormula)}</oldFormula>` : \"\",\n ]\n .filter(Boolean)\n .join(\"\");\n return `<rdn${a}>${children}</rdn>`;\n }\n case \"comment\": {\n const d = entry.data;\n let a = ` sheetId=\"${d.sheetId}\" cell=\"${escapeXml(d.cell)}\" guid=\"${escapeXml(\n d.guid,\n )}\" action=\"${d.action ?? \"add\"}\" author=\"${escapeXml(d.author)}\"`;\n if (d.alwaysShow) a += ` alwaysShow=\"1\"`;\n if (d.old) a += ` old=\"1\"`;\n if (d.hiddenRow) a += ` hiddenRow=\"1\"`;\n if (d.hiddenColumn) a += ` hiddenColumn=\"1\"`;\n if (d.oldLength !== undefined) a += ` oldLength=\"${d.oldLength}\"`;\n if (d.newLength !== undefined) a += ` newLength=\"${d.newLength}\"`;\n return `<rcmt${a}/>`;\n }\n case \"queryTableField\": {\n const d = entry.data;\n return `<rqt sheetId=\"${d.sheetId}\" ref=\"${escapeXml(d.ref)}\" fieldId=\"${d.fieldId}\"/>`;\n }\n case \"conflict\": {\n const d = entry.data;\n let a = agRevData(d);\n if (d.sheetId !== undefined) a += ` sheetId=\"${d.sheetId}\"`;\n return `<rcft${a}/>`;\n }\n }\n}\n\n// ── Per-revision parse ──\n\n/** Serializes an element's children back to a raw XML string (for rawXml passthrough). */\nfunction childrenToXml(el: XmlElement | null): string {\n if (!el || !el.elements) return \"\";\n // Re-emit element children verbatim via their name + attributes + text + nested.\n return el.elements\n .filter((c) => c.type === \"element\")\n .map((c) => elementToXml(c as XmlElement))\n .join(\"\");\n}\n\nfunction elementToXml(el: XmlElement): string {\n const attrStr = Object.entries(el.attributes ?? {})\n .map(([k, v]) => ` ${k}=\"${escapeXml(String(v))}\"`)\n .join(\"\");\n const inner = el.elements\n ? el.elements\n .map((c) => {\n if (c.type === \"text\") return escapeXml(textOf({ elements: [c] } as XmlElement) ?? \"\");\n if (c.type === \"element\") return elementToXml(c as XmlElement);\n return \"\";\n })\n .join(\"\")\n : \"\";\n return `<${el.name}${attrStr}>${inner}</${el.name}>`;\n}\n\n/** Returns the first element child of a node as raw XML string. */\nfunction firstChildXml(el: XmlElement | null, name: string): string | undefined {\n const child = findChild(el ?? undefined, name);\n return child ? elementToXml(child) : undefined;\n}\n\nfunction parseBool(el: XmlElement, name: string): boolean | undefined {\n const v = attr(el, name);\n if (v === undefined) return undefined;\n return v === \"1\" || v === \"true\";\n}\n\nfunction parseEntry(el: XmlElement): RevisionEntry | undefined {\n switch (el.name) {\n case \"rrc\": {\n const d: Partial<RevisionRowColumnOptions> = {\n rId: Number(attr(el, \"rId\") ?? \"0\"),\n sheetId: Number(attr(el, \"sId\") ?? \"0\"),\n ref: attr(el, \"ref\") ?? \"\",\n action: (attr(el, \"action\") ?? \"insertRow\") as RowColumnAction,\n };\n const endOfList = parseBool(el, \"eol\");\n if (endOfList) d.endOfList = endOfList;\n const edge = parseBool(el, \"edge\");\n if (edge) d.edge = edge;\n const undo = parseBool(el, \"ua\");\n if (undo) d.undo = undo;\n const rejected = parseBool(el, \"ra\");\n if (rejected) d.rejected = rejected;\n const childrenXml = childrenToXml(el);\n if (childrenXml) d.childrenXml = childrenXml;\n return { type: \"rowColumn\", data: d as RevisionRowColumnOptions };\n }\n case \"rm\": {\n const d: Partial<RevisionMoveOptions> = {\n rId: Number(attr(el, \"rId\") ?? \"0\"),\n sheetId: Number(attr(el, \"sheetId\") ?? \"0\"),\n source: attr(el, \"source\") ?? \"\",\n destination: attr(el, \"destination\") ?? \"\",\n };\n const sourceSheetId = attr(el, \"sourceSheetId\");\n if (sourceSheetId !== undefined) d.sourceSheetId = Number(sourceSheetId);\n const undo = parseBool(el, \"ua\");\n if (undo) d.undo = undo;\n const rejected = parseBool(el, \"ra\");\n if (rejected) d.rejected = rejected;\n const childrenXml = childrenToXml(el);\n if (childrenXml) d.childrenXml = childrenXml;\n return { type: \"move\", data: d as RevisionMoveOptions };\n }\n case \"rcv\":\n return {\n type: \"customView\",\n data: {\n guid: attr(el, \"guid\") ?? \"\",\n action: (attr(el, \"action\") ?? \"add\") as RevisionAction,\n },\n };\n case \"rsnm\": {\n const d: Partial<RevisionSheetRenameOptions> = {\n rId: Number(attr(el, \"rId\") ?? \"0\"),\n sheetId: Number(attr(el, \"sheetId\") ?? \"0\"),\n oldName: attr(el, \"oldName\") ?? \"\",\n newName: attr(el, \"newName\") ?? \"\",\n };\n const undo = parseBool(el, \"ua\");\n if (undo) d.undo = undo;\n const rejected = parseBool(el, \"ra\");\n if (rejected) d.rejected = rejected;\n return { type: \"sheetRename\", data: d as RevisionSheetRenameOptions };\n }\n case \"ris\": {\n const d: Partial<RevisionInsertSheetOptions> = {\n rId: Number(attr(el, \"rId\") ?? \"0\"),\n sheetId: Number(attr(el, \"sheetId\") ?? \"0\"),\n name: attr(el, \"name\") ?? \"\",\n sheetPosition: Number(attr(el, \"sheetPosition\") ?? \"0\"),\n };\n const undo = parseBool(el, \"ua\");\n if (undo) d.undo = undo;\n const rejected = parseBool(el, \"ra\");\n if (rejected) d.rejected = rejected;\n return { type: \"insertSheet\", data: d as RevisionInsertSheetOptions };\n }\n case \"rcc\": {\n const d: Partial<RevisionCellChangeOptions> = {\n rId: Number(attr(el, \"rId\") ?? \"0\"),\n sheetId: Number(attr(el, \"sId\") ?? \"0\"),\n newCellXml: firstChildXml(el, \"nc\") ?? \"\",\n };\n const hasOldDxf = parseBool(el, \"odxf\");\n if (hasOldDxf) d.hasOldDxf = hasOldDxf;\n const xfDxf = parseBool(el, \"xfDxf\");\n if (xfDxf) d.xfDxf = xfDxf;\n const style = parseBool(el, \"s\");\n if (style) d.style = style;\n const hasDxf = parseBool(el, \"dxf\");\n if (hasDxf) d.hasDxf = hasDxf;\n const numFmtId = attr(el, \"numFmtId\");\n if (numFmtId !== undefined) d.numFmtId = Number(numFmtId);\n const quotePrefix = parseBool(el, \"quotePrefix\");\n if (quotePrefix) d.quotePrefix = quotePrefix;\n const oldQuotePrefix = parseBool(el, \"oldQuotePrefix\");\n if (oldQuotePrefix) d.oldQuotePrefix = oldQuotePrefix;\n const phonetic = parseBool(el, \"ph\");\n if (phonetic) d.phonetic = phonetic;\n const oldPhonetic = parseBool(el, \"oldPh\");\n if (oldPhonetic) d.oldPhonetic = oldPhonetic;\n const endOfList = parseBool(el, \"endOfListFormulaUpdate\");\n if (endOfList) d.endOfListFormulaUpdate = endOfList;\n const undo = parseBool(el, \"ua\");\n if (undo) d.undo = undo;\n const rejected = parseBool(el, \"ra\");\n if (rejected) d.rejected = rejected;\n const oc = firstChildXml(el, \"oc\");\n if (oc) d.oldCellXml = oc;\n const odxf = firstChildXml(el, \"odxf\");\n if (odxf) d.oldDxfXml = odxf;\n const ndxf = firstChildXml(el, \"ndxf\");\n if (ndxf) d.newDxfXml = ndxf;\n return { type: \"cellChange\", data: d as RevisionCellChangeOptions };\n }\n case \"rfmt\": {\n const d: Partial<RevisionFormattingOptions> = {\n sheetId: Number(attr(el, \"sheetId\") ?? \"0\"),\n sqref: attr(el, \"sqref\") ?? \"\",\n };\n const xfDxf = parseBool(el, \"xfDxf\");\n if (xfDxf) d.xfDxf = xfDxf;\n const style = parseBool(el, \"s\");\n if (style) d.style = style;\n const start = attr(el, \"start\");\n if (start !== undefined) d.start = Number(start);\n const length = attr(el, \"length\");\n if (length !== undefined) d.length = Number(length);\n const dxfXml = firstChildXml(el, \"dxf\");\n if (dxfXml) d.dxfXml = dxfXml;\n return { type: \"formatting\", data: d as RevisionFormattingOptions };\n }\n case \"raf\": {\n const d: Partial<RevisionAutoFormattingOptions> = {\n sheetId: Number(attr(el, \"sheetId\") ?? \"0\"),\n ref: attr(el, \"ref\") ?? \"\",\n };\n // AG_AutoFormat is a fixed set of optional attributes; capture verbatim.\n const autoAttrs = Object.entries(el.attributes ?? {})\n .filter(([k]) => k !== \"sheetId\" && k !== \"ref\")\n .map(([k, v]) => ` ${k}=\"${escapeXml(String(v))}\"`)\n .join(\"\");\n if (autoAttrs) d.autoFormatXml = autoAttrs;\n return { type: \"autoFormatting\", data: d as RevisionAutoFormattingOptions };\n }\n case \"rdn\": {\n const d: Partial<RevisionDefinedNameOptions> = {\n rId: Number(attr(el, \"rId\") ?? \"0\"),\n name: attr(el, \"name\") ?? \"\",\n };\n const localSheetId = attr(el, \"localSheetId\");\n if (localSheetId !== undefined) d.localSheetId = Number(localSheetId);\n readBool(el, \"customView\", (v) => (d.customView = v));\n readBool(el, \"function\", (v) => (d.function = v));\n readBool(el, \"oldFunction\", (v) => (d.oldFunction = v));\n readNum(el, \"functionGroupId\", (v) => (d.functionGroupId = v));\n readNum(el, \"oldFunctionGroupId\", (v) => (d.oldFunctionGroupId = v));\n readNum(el, \"shortcutKey\", (v) => (d.shortcutKey = v));\n readNum(el, \"oldShortcutKey\", (v) => (d.oldShortcutKey = v));\n readBool(el, \"hidden\", (v) => (d.hidden = v));\n readBool(el, \"oldHidden\", (v) => (d.oldHidden = v));\n readStr(el, \"customMenu\", (v) => (d.customMenu = v));\n readStr(el, \"oldCustomMenu\", (v) => (d.oldCustomMenu = v));\n readStr(el, \"description\", (v) => (d.description = v));\n readStr(el, \"oldDescription\", (v) => (d.oldDescription = v));\n readStr(el, \"help\", (v) => (d.help = v));\n readStr(el, \"oldHelp\", (v) => (d.oldHelp = v));\n readStr(el, \"statusBar\", (v) => (d.statusBar = v));\n readStr(el, \"oldStatusBar\", (v) => (d.oldStatusBar = v));\n readStr(el, \"comment\", (v) => (d.comment = v));\n readStr(el, \"oldComment\", (v) => (d.oldComment = v));\n const undo = parseBool(el, \"ua\");\n if (undo) d.undo = undo;\n const rejected = parseBool(el, \"ra\");\n if (rejected) d.rejected = rejected;\n const formula = findChild(el, \"formula\");\n if (formula) d.formula = textOf(formula) ?? \"\";\n const oldFormula = findChild(el, \"oldFormula\");\n if (oldFormula) d.oldFormula = textOf(oldFormula) ?? \"\";\n return { type: \"definedName\", data: d as RevisionDefinedNameOptions };\n }\n case \"rcmt\": {\n const d: Partial<RevisionCommentOptions> = {\n sheetId: Number(attr(el, \"sheetId\") ?? \"0\"),\n cell: attr(el, \"cell\") ?? \"\",\n guid: attr(el, \"guid\") ?? \"\",\n author: attr(el, \"author\") ?? \"\",\n };\n const action = attr(el, \"action\");\n if (action) d.action = action as RevisionAction;\n readBool(el, \"alwaysShow\", (v) => (d.alwaysShow = v));\n readBool(el, \"old\", (v) => (d.old = v));\n readBool(el, \"hiddenRow\", (v) => (d.hiddenRow = v));\n readBool(el, \"hiddenColumn\", (v) => (d.hiddenColumn = v));\n readNum(el, \"oldLength\", (v) => (d.oldLength = v));\n readNum(el, \"newLength\", (v) => (d.newLength = v));\n return { type: \"comment\", data: d as RevisionCommentOptions };\n }\n case \"rqt\":\n return {\n type: \"queryTableField\",\n data: {\n sheetId: Number(attr(el, \"sheetId\") ?? \"0\"),\n ref: attr(el, \"ref\") ?? \"\",\n fieldId: Number(attr(el, \"fieldId\") ?? \"0\"),\n },\n };\n case \"rcft\": {\n const d: Partial<RevisionConflictOptions> = { rId: Number(attr(el, \"rId\") ?? \"0\") };\n const undo = parseBool(el, \"ua\");\n if (undo) d.undo = undo;\n const rejected = parseBool(el, \"ra\");\n if (rejected) d.rejected = rejected;\n const sheetId = attr(el, \"sheetId\");\n if (sheetId !== undefined) d.sheetId = Number(sheetId);\n return { type: \"conflict\", data: d as RevisionConflictOptions };\n }\n default:\n return undefined;\n }\n}\n\nexport const revisionLogDesc: CustomDescriptor<RevisionLogOptions> = {\n kind: \"custom\",\n\n stringify(opts, _ctx) {\n if (opts.revisions.length === 0) return undefined;\n return `<revisions xmlns=\"${S_NS}\">${opts.revisions.map(stringifyEntry).join(\"\")}</revisions>`;\n },\n\n parse(el, _ctx) {\n const revisions: RevisionEntry[] = [];\n for (const child of el.elements ?? []) {\n if (child.type !== \"element\") continue;\n const entry = parseEntry(child as XmlElement);\n if (entry) revisions.push(entry);\n }\n return { revisions } as RevisionLogOptions;\n },\n};\n\n// ── Attribute readers (set-callback style keeps parse paths on concrete types) ──\n\nfunction readBool(el: XmlElement, name: string, set: (v: boolean) => void): void {\n const raw = attr(el, name);\n if (raw === \"1\" || raw === \"true\") set(true);\n}\n\nfunction readNum(el: XmlElement, name: string, set: (v: number) => void): void {\n const raw = attr(el, name);\n if (raw !== undefined) set(Number(raw));\n}\n\nfunction readStr(el: XmlElement, name: string, set: (v: string) => void): void {\n const raw = attr(el, name);\n if (raw !== undefined) set(raw);\n}\n","/**\n * Content Types module for XLSX packages.\n *\n * @module\n */\n\nconst XLSX_MAIN = \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\";\nconst XLSX_WORKSHEET = \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\";\nconst XLSX_CHARTSHEET =\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\";\nconst XLSX_STYLES = \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\";\nconst XLSX_SHARED_STRINGS =\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\";\nconst XLSX_THEME = \"application/vnd.openxmlformats-officedocument.theme+xml\";\nconst XLSX_CHART = \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\";\nconst CUSTOM_PROPS = \"application/vnd.openxmlformats-officedocument.custom-properties+xml\";\n\ntype EntryType = \"Default\" | \"Override\";\n\ninterface ContentEntry {\n type: EntryType;\n contentType: string;\n key: string;\n}\n\nconst STATIC_ENTRIES: ContentEntry[] = [\n {\n type: \"Default\",\n contentType: \"application/vnd.openxmlformats-package.relationships+xml\",\n key: \"rels\",\n },\n { type: \"Default\", contentType: \"application/xml\", key: \"xml\" },\n { type: \"Override\", contentType: XLSX_MAIN, key: \"/xl/workbook.xml\" },\n {\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-package.core-properties+xml\",\n key: \"/docProps/core.xml\",\n },\n {\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.extended-properties+xml\",\n key: \"/docProps/app.xml\",\n },\n];\n\n// Pre-compiled static XML fragment (module-level constant)\nconst STATIC_XML = STATIC_ENTRIES.map((e) =>\n e.type === \"Default\"\n ? `<Default ContentType=\"${e.contentType}\" Extension=\"${e.key}\"/>`\n : `<Override ContentType=\"${e.contentType}\" PartName=\"${e.key}\"/>`,\n).join(\"\");\n\nexport class ContentTypes {\n private dynamicEntries: ContentEntry[] = [];\n\n public addWorksheet(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: XLSX_WORKSHEET,\n key: `/xl/worksheets/sheet${index}.xml`,\n });\n }\n\n public addChartsheet(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: XLSX_CHARTSHEET,\n key: `/xl/chartsheets/sheet${index}.xml`,\n });\n }\n\n public addStyles(): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: XLSX_STYLES,\n key: \"/xl/styles.xml\",\n });\n }\n\n public addSharedStrings(): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: XLSX_SHARED_STRINGS,\n key: \"/xl/sharedStrings.xml\",\n });\n }\n\n public addTheme(index: number = 1): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: XLSX_THEME,\n key: `/xl/theme/theme${index}.xml`,\n });\n }\n\n public addCustomProperties(): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: CUSTOM_PROPS,\n key: \"/docProps/custom.xml\",\n });\n }\n\n public addChart(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: XLSX_CHART,\n key: `/xl/charts/chart${index}.xml`,\n });\n }\n\n public addDrawing(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.drawing+xml\",\n key: `/xl/drawings/drawing${index}.xml`,\n });\n }\n\n public addComments(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\",\n key: `/xl/comments${index}.xml`,\n });\n }\n\n public addVmlDrawing(): void {\n if (this.dynamicEntries.some((e) => e.type === \"Default\" && e.key === \"vml\")) return;\n this.dynamicEntries.push({\n type: \"Default\",\n contentType: \"application/vnd.openxmlformats-officedocument.vmlDrawing\",\n key: \"vml\",\n });\n }\n\n public addImageType(extension: \"png\" | \"jpeg\"): void {\n const contentType = extension === \"png\" ? \"image/png\" : \"image/jpeg\";\n if (this.dynamicEntries.some((e) => e.type === \"Default\" && e.key === extension)) return;\n this.dynamicEntries.push({ type: \"Default\", contentType, key: extension });\n }\n\n public addPivotTable(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml\",\n key: `/xl/pivotTables/pivotTable${index}.xml`,\n });\n }\n\n public addPivotCacheDefinition(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType:\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml\",\n key: `/xl/pivotCache/pivotCacheDefinition${index}.xml`,\n });\n }\n\n public addPivotCacheRecords(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType:\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml\",\n key: `/xl/pivotCache/pivotCacheRecords${index}.xml`,\n });\n }\n\n public addTable(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\",\n key: `/xl/tables/table${index}.xml`,\n });\n }\n\n public addExternalLink(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml\",\n key: `/xl/externalLinks/externalLink${index}.xml`,\n });\n }\n\n public addCalcChain(): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml\",\n key: \"/xl/calcChain.xml\",\n });\n }\n\n public addDialogsheet(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\",\n key: `/xl/dialogsheets/sheet${index}.xml`,\n });\n }\n\n public addRevisionHeaders(): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType:\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml\",\n key: \"/xl/revisionHeaders.xml\",\n });\n }\n\n public addRevisionLog(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml\",\n key: `/xl/revisions/revision${index}.xml`,\n });\n }\n\n public addUsers(): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.spreadsheetml.users+xml\",\n key: \"/xl/users.xml\",\n });\n }\n\n public addQueryTable(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml\",\n key: `/xl/queryTables/queryTable${index}.xml`,\n });\n }\n\n public addMetadata(): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\",\n key: \"/xl/metadata.xml\",\n });\n }\n\n public serialize(): string {\n const p: string[] = [\n '<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">',\n STATIC_XML,\n ];\n for (const e of this.dynamicEntries) {\n if (e.type === \"Default\") {\n p.push(`<Default ContentType=\"${e.contentType}\" Extension=\"${e.key}\"/>`);\n } else {\n p.push(`<Override ContentType=\"${e.contentType}\" PartName=\"${e.key}\"/>`);\n }\n }\n p.push(\"</Types>\");\n return p.join(\"\");\n }\n}\n","/**\n * XLSX compile context — write and read contexts for the descriptor pipeline.\n *\n * @module\n */\n\nimport { ChartCollection, Relationships, type RelationshipType } from \"@office-open/core\";\nimport type { ReadContext, WriteContext } from \"@office-open/core/descriptor\";\nimport type { Element } from \"@office-open/xml\";\nimport { ContentTypes } from \"@parts/content-types\";\nimport { SharedStrings } from \"@parts/shared-strings\";\nimport { Styles } from \"@parts/styles\";\nimport type { DxfOptions, StyleOptions, StylesParseResult } from \"@parts/styles\";\nimport type { PivotCacheReference } from \"@parts/workbook\";\nimport { Media, type MediaData } from \"@shared/media\";\n\nimport type { XlsxDocument } from \"./parse\";\n\n// ── Write Context ──\n\n/**\n * XLSX-specific write context.\n *\n * Holds mutable state that accumulates during the compile phase:\n * shared strings, styles, media, charts, content types, and relationships.\n */\nexport class XlsxWriteContext implements WriteContext {\n sharedStrings = new SharedStrings();\n styles = new Styles();\n media = new Media<MediaData>();\n charts = new ChartCollection();\n contentTypes = new ContentTypes();\n workbookRels = new Relationships();\n pivotCacheRefs: PivotCacheReference[] = [];\n\n // ── WriteContext stubs (core interface) ──\n\n public addRelationship(type: RelationshipType, target: string, _mode?: string): string {\n const id = this.workbookRels.relationshipCount + 1;\n this.workbookRels.addRelationship(id, type, target);\n return `rId${id}`;\n }\n\n public addMedia(_data: Uint8Array, _type: string): string {\n // Stub — XLSX media registration goes through Media.addMedia() in compiler.\n return \"\";\n }\n\n /**\n * Register a differential format and return its dxfId.\n */\n public registerDxf(opts: DxfOptions): number {\n return this.styles.registerDxf(opts);\n }\n}\n\n// ── Read Context ──\n\n/**\n * XLSX-specific read context.\n *\n * Wraps an {@link XlsxDocument} to implement the core {@link ReadContext}\n * interface used by the descriptor parse pipeline.\n */\nexport class XlsxReadContext implements ReadContext {\n /** Parsed shared strings for resolving cell values. */\n public readonly sharedStrings: string[];\n /** Parsed styles (fonts, fills, borders, cellXfs). Set by parseWorkbook(). */\n public parsedStyles?: StylesParseResult;\n\n constructor(\n private xlsx: XlsxDocument,\n sharedStrings?: string[],\n ) {\n this.sharedStrings = sharedStrings ?? [];\n }\n\n public resolveRelationship(rId: string): string | undefined {\n const wbRels = this.xlsx.doc.get(\"xl/_rels/workbook.xml.rels\");\n if (!wbRels?.elements) return undefined;\n for (const child of wbRels.elements) {\n if (child.name !== \"Relationship\") continue;\n if (child.attributes?.[\"Id\"] === rId) {\n const target = child.attributes[\"Target\"] as string | undefined;\n if (!target) return undefined;\n return target.startsWith(\"/\") ? target.slice(1) : `xl/${target}`;\n }\n }\n return undefined;\n }\n\n /**\n * Resolve a relationship rId from a worksheet-level rels file.\n * Worksheet rels paths: `xl/worksheets/sheet1.xml` → `xl/worksheets/_rels/sheet1.xml.rels`\n */\n public resolveWorksheetRel(wsPath: string, rId: string): string | undefined {\n const relsPath = wsPathToRelsPath(wsPath);\n const rels = this.xlsx.doc.get(relsPath);\n if (!rels?.elements) return undefined;\n for (const child of rels.elements) {\n if (child.name !== \"Relationship\") continue;\n if (child.attributes?.[\"Id\"] === rId) {\n const target = child.attributes[\"Target\"] as string | undefined;\n if (!target) return undefined;\n return resolveWsTarget(wsPath, target);\n }\n }\n return undefined;\n }\n\n /**\n * Get all relationships from a worksheet rels file matching a type fragment.\n * e.g. `getWorksheetRelsByType(path, \"/comments\")` returns all comment relationships.\n */\n public getWorksheetRelsByType(\n wsPath: string,\n typeFragment: string,\n ): Array<{ rId: string; target: string }> {\n const relsPath = wsPathToRelsPath(wsPath);\n const rels = this.xlsx.doc.get(relsPath);\n if (!rels?.elements) return [];\n const result: Array<{ rId: string; target: string }> = [];\n for (const child of rels.elements) {\n if (child.name !== \"Relationship\") continue;\n const type = child.attributes?.[\"Type\"] as string | undefined;\n if (!type || !type.includes(typeFragment)) continue;\n const rId = child.attributes?.[\"Id\"] as string | undefined;\n const target = child.attributes?.[\"Target\"] as string | undefined;\n if (rId && target) {\n result.push({ rId, target: resolveWsTarget(wsPath, target) });\n }\n }\n return result;\n }\n\n public getPart(path: string): Element | undefined {\n return this.xlsx.doc.get(path);\n }\n\n public getRaw(path: string): Uint8Array | undefined {\n return this.xlsx.doc.getRaw(path);\n }\n\n /**\n * Resolve a cell style index to a StyleOptions object by looking up\n * the parsed cellXfs table and substituting font/fill/border/numFmt indices\n * with their resolved values.\n */\n public resolveStyle(styleIndex: number): StyleOptions | undefined {\n const ps = this.parsedStyles;\n if (!ps) return undefined;\n const { cellXfs, fonts, fills, borders, customNumFmtById } = ps;\n if (!cellXfs || styleIndex >= cellXfs.length) return undefined;\n const xf = cellXfs[styleIndex];\n const result: StyleOptions = {};\n\n const fontId = xf.fontId;\n if (fontId !== undefined && fonts && fontId < fonts.length) result.font = fonts[fontId];\n const fillId = xf.fillId;\n if (fillId !== undefined && fills && fillId < fills.length) result.fill = fills[fillId];\n const borderId = xf.borderId;\n if (borderId !== undefined && borders && borderId < borders.length)\n result.border = borders[borderId];\n const numFmtId = xf.numFmtId;\n if (numFmtId !== undefined && customNumFmtById) {\n const code = customNumFmtById.get(numFmtId);\n if (code !== undefined) result.numFmt = code;\n }\n if (xf.alignment) result.alignment = xf.alignment;\n if (xf.protection) result.protection = xf.protection;\n if (xf.quotePrefix) result.quotePrefix = xf.quotePrefix;\n if (xf.pivotButton) result.pivotButton = xf.pivotButton;\n\n return result as StyleOptions;\n }\n}\n\n// ── Worksheet rels helpers ──\n\n/** Derive rels path from worksheet path. */\nfunction wsPathToRelsPath(wsPath: string): string {\n // \"xl/worksheets/sheet1.xml\" → \"xl/worksheets/_rels/sheet1.xml.rels\"\n const idx = wsPath.lastIndexOf(\"/\");\n const dir = wsPath.substring(0, idx);\n const file = wsPath.substring(idx + 1);\n return `${dir}/_rels/${file}.rels`;\n}\n\n/** Resolve a relative target from a worksheet rels file to an absolute archive path. */\nfunction resolveWsTarget(wsPath: string, target: string): string {\n if (target.startsWith(\"/\")) return target.slice(1);\n // Target is relative to the worksheet's directory, e.g. \"../comments1.xml\" from \"xl/worksheets/\"\n const wsDir = wsPath.substring(0, wsPath.lastIndexOf(\"/\"));\n const parts = target.split(\"/\");\n const dirParts = wsDir.split(\"/\");\n for (const part of parts) {\n if (part === \"..\") {\n dirParts.pop();\n } else {\n dirParts.push(part);\n }\n }\n return dirParts.join(\"/\");\n}\n"],"mappings":"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"}