@office-kit/xlsx 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +319 -0
- package/THIRD_PARTY_NOTICES.md +56 -0
- package/dist/cell/cell.d.ts +234 -0
- package/dist/cell/index.d.ts +4 -0
- package/dist/cell/rich-text.d.ts +37 -0
- package/dist/cell-D9CaNKnU.mjs +320 -0
- package/dist/cell-D9CaNKnU.mjs.map +1 -0
- package/dist/cell-style-BEDjMX1y.mjs +1579 -0
- package/dist/cell-style-BEDjMX1y.mjs.map +1 -0
- package/dist/cell.mjs +2 -0
- package/dist/chart/chart-xml.d.ts +16 -0
- package/dist/chart/chart.d.ts +735 -0
- package/dist/chart/cx/chartex-xml.d.ts +6 -0
- package/dist/chart/cx/chartex.d.ts +279 -0
- package/dist/chart/index.d.ts +6 -0
- package/dist/chart/user-shapes-xml.d.ts +4 -0
- package/dist/chart/user-shapes.d.ts +61 -0
- package/dist/chart.mjs +232 -0
- package/dist/chart.mjs.map +1 -0
- package/dist/chartsheet/chartsheet-xml.d.ts +17 -0
- package/dist/chartsheet/chartsheet.d.ts +121 -0
- package/dist/chartsheet/index.d.ts +2 -0
- package/dist/chartsheet-C3-tqkPy.mjs +23 -0
- package/dist/chartsheet-C3-tqkPy.mjs.map +1 -0
- package/dist/chartsheet.mjs +2 -0
- package/dist/colors-ovWAwnZI.mjs +67 -0
- package/dist/colors-ovWAwnZI.mjs.map +1 -0
- package/dist/compat/numbers.d.ts +14 -0
- package/dist/coordinate-96Ecci4d.mjs +276 -0
- package/dist/coordinate-96Ecci4d.mjs.map +1 -0
- package/dist/datetime-B2ySVlXt.mjs +71 -0
- package/dist/datetime-B2ySVlXt.mjs.map +1 -0
- package/dist/defined-names-CviWmtQg.mjs +89 -0
- package/dist/defined-names-CviWmtQg.mjs.map +1 -0
- package/dist/differential-D4dg-qtZ.mjs +37 -0
- package/dist/differential-D4dg-qtZ.mjs.map +1 -0
- package/dist/drawing/anchor.d.ts +63 -0
- package/dist/drawing/dml/colors.d.ts +109 -0
- package/dist/drawing/dml/dml-xml.d.ts +35 -0
- package/dist/drawing/dml/effect.d.ts +92 -0
- package/dist/drawing/dml/fill.d.ts +115 -0
- package/dist/drawing/dml/geometry.d.ts +113 -0
- package/dist/drawing/dml/line.d.ts +41 -0
- package/dist/drawing/dml/shape-properties.d.ts +33 -0
- package/dist/drawing/dml/text.d.ts +218 -0
- package/dist/drawing/drawing-xml.d.ts +5 -0
- package/dist/drawing/drawing.d.ts +117 -0
- package/dist/drawing/image.d.ts +40 -0
- package/dist/drawing/index.d.ts +14 -0
- package/dist/drawing-BxzLuryn.mjs +415 -0
- package/dist/drawing-BxzLuryn.mjs.map +1 -0
- package/dist/drawing.mjs +119 -0
- package/dist/drawing.mjs.map +1 -0
- package/dist/escape-DFTE7ZJc.mjs +51 -0
- package/dist/escape-DFTE7ZJc.mjs.map +1 -0
- package/dist/exceptions-D-CFwxgm.mjs +37 -0
- package/dist/exceptions-D-CFwxgm.mjs.map +1 -0
- package/dist/formula/tokenizer.d.ts +61 -0
- package/dist/formula/translate.d.ts +67 -0
- package/dist/inference-B3ES3KEJ.mjs +42 -0
- package/dist/inference-B3ES3KEJ.mjs.map +1 -0
- package/dist/io/browser.d.ts +41 -0
- package/dist/io/index.d.ts +7 -0
- package/dist/io/load.d.ts +46 -0
- package/dist/io/node-fs.d.ts +62 -0
- package/dist/io/node-save.d.ts +3 -0
- package/dist/io/node.d.ts +17 -0
- package/dist/io/save.d.ts +14 -0
- package/dist/io/sink.d.ts +54 -0
- package/dist/io/source.d.ts +14 -0
- package/dist/io.mjs +212 -0
- package/dist/io.mjs.map +1 -0
- package/dist/load-D5cbhoGx.mjs +1069 -0
- package/dist/load-D5cbhoGx.mjs.map +1 -0
- package/dist/manifest-Dps1-OpP.mjs +801 -0
- package/dist/manifest-Dps1-OpP.mjs.map +1 -0
- package/dist/node.d.ts +3 -0
- package/dist/node.mjs +308 -0
- package/dist/node.mjs.map +1 -0
- package/dist/packaging/core.d.ts +45 -0
- package/dist/packaging/custom.d.ts +62 -0
- package/dist/packaging/extended.d.ts +45 -0
- package/dist/packaging/index.d.ts +10 -0
- package/dist/packaging/manifest.d.ts +24 -0
- package/dist/packaging/relationships.d.ts +30 -0
- package/dist/packaging.mjs +2 -0
- package/dist/parser-DuLejQy1.mjs +156 -0
- package/dist/parser-DuLejQy1.mjs.map +1 -0
- package/dist/reader-D1fNW9k1.mjs +534 -0
- package/dist/reader-D1fNW9k1.mjs.map +1 -0
- package/dist/save-RohQtgEZ.mjs +745 -0
- package/dist/save-RohQtgEZ.mjs.map +1 -0
- package/dist/schema/core.d.ts +133 -0
- package/dist/schema/index.d.ts +3 -0
- package/dist/schema/serialize.d.ts +6 -0
- package/dist/schema.mjs +2 -0
- package/dist/serialize-55EnT30e.mjs +254 -0
- package/dist/serialize-55EnT30e.mjs.map +1 -0
- package/dist/serializer-BwbgHYJV.mjs +116 -0
- package/dist/serializer-BwbgHYJV.mjs.map +1 -0
- package/dist/streaming/index.d.ts +2 -0
- package/dist/streaming/read-only.d.ts +38 -0
- package/dist/streaming/write-only.d.ts +47 -0
- package/dist/streaming.mjs +612 -0
- package/dist/streaming.mjs.map +1 -0
- package/dist/styles/alignment.d.ts +33 -0
- package/dist/styles/alignment.schema.d.ts +3 -0
- package/dist/styles/borders.d.ts +40 -0
- package/dist/styles/borders.schema.d.ts +4 -0
- package/dist/styles/cell-style.d.ts +270 -0
- package/dist/styles/colors.d.ts +128 -0
- package/dist/styles/colors.schema.d.ts +3 -0
- package/dist/styles/differential.d.ts +41 -0
- package/dist/styles/fills.d.ts +54 -0
- package/dist/styles/fills.schema.d.ts +6 -0
- package/dist/styles/fonts.d.ts +44 -0
- package/dist/styles/fonts.schema.d.ts +3 -0
- package/dist/styles/index.d.ts +21 -0
- package/dist/styles/named-styles.d.ts +52 -0
- package/dist/styles/numbers.d.ts +39 -0
- package/dist/styles/numbers.schema.d.ts +3 -0
- package/dist/styles/protection.d.ts +9 -0
- package/dist/styles/protection.schema.d.ts +3 -0
- package/dist/styles/stylesheet-reader.d.ts +7 -0
- package/dist/styles/stylesheet-writer.d.ts +3 -0
- package/dist/styles/stylesheet.d.ts +95 -0
- package/dist/styles.mjs +4 -0
- package/dist/stylesheet-writer-C2eRmn22.mjs +8624 -0
- package/dist/stylesheet-writer-C2eRmn22.mjs.map +1 -0
- package/dist/table-DkX6UniA.mjs +113 -0
- package/dist/table-DkX6UniA.mjs.map +1 -0
- package/dist/tree-Bbs1C8Rc.mjs +192 -0
- package/dist/tree-Bbs1C8Rc.mjs.map +1 -0
- package/dist/units-rOMQqXh2.mjs +41 -0
- package/dist/units-rOMQqXh2.mjs.map +1 -0
- package/dist/user-shapes-DfmCGKB0.mjs +252 -0
- package/dist/user-shapes-DfmCGKB0.mjs.map +1 -0
- package/dist/utf8-D91g1XTG.mjs +143 -0
- package/dist/utf8-D91g1XTG.mjs.map +1 -0
- package/dist/utils/coordinate.d.ts +103 -0
- package/dist/utils/css.d.ts +18 -0
- package/dist/utils/datetime.d.ts +38 -0
- package/dist/utils/escape.d.ts +34 -0
- package/dist/utils/exceptions.d.ts +34 -0
- package/dist/utils/index.d.ts +11 -0
- package/dist/utils/inference.d.ts +24 -0
- package/dist/utils/stable-stringify.d.ts +7 -0
- package/dist/utils/units.d.ts +14 -0
- package/dist/utils/utf8.d.ts +1 -0
- package/dist/utils.mjs +39 -0
- package/dist/utils.mjs.map +1 -0
- package/dist/workbook/calc-properties.d.ts +47 -0
- package/dist/workbook/defined-names.d.ts +121 -0
- package/dist/workbook/file-recovery.d.ts +11 -0
- package/dist/workbook/file-sharing.d.ts +14 -0
- package/dist/workbook/file-version.d.ts +13 -0
- package/dist/workbook/function-groups.d.ts +10 -0
- package/dist/workbook/index.d.ts +24 -0
- package/dist/workbook/protection.d.ts +35 -0
- package/dist/workbook/shared-strings.d.ts +57 -0
- package/dist/workbook/smart-tags.d.ts +13 -0
- package/dist/workbook/views.d.ts +89 -0
- package/dist/workbook/workbook-properties.d.ts +57 -0
- package/dist/workbook/workbook.d.ts +643 -0
- package/dist/workbook-HGYNRBlV.mjs +636 -0
- package/dist/workbook-HGYNRBlV.mjs.map +1 -0
- package/dist/workbook.mjs +58 -0
- package/dist/workbook.mjs.map +1 -0
- package/dist/worksheet/auto-filter.d.ts +34 -0
- package/dist/worksheet/cell-range.d.ts +121 -0
- package/dist/worksheet/comments-xml.d.ts +24 -0
- package/dist/worksheet/comments.d.ts +13 -0
- package/dist/worksheet/conditional-formatting.d.ts +150 -0
- package/dist/worksheet/custom-sheet-views.d.ts +43 -0
- package/dist/worksheet/data-consolidate.d.ts +29 -0
- package/dist/worksheet/data-validations.d.ts +72 -0
- package/dist/worksheet/dimensions.d.ts +40 -0
- package/dist/worksheet/errors.d.ts +40 -0
- package/dist/worksheet/hyperlinks.d.ts +42 -0
- package/dist/worksheet/index.d.ts +46 -0
- package/dist/worksheet/ole-objects.d.ts +37 -0
- package/dist/worksheet/page-setup.d.ts +173 -0
- package/dist/worksheet/phonetic.d.ts +11 -0
- package/dist/worksheet/properties.d.ts +34 -0
- package/dist/worksheet/protected-ranges.d.ts +19 -0
- package/dist/worksheet/protection.d.ts +44 -0
- package/dist/worksheet/reader.d.ts +38 -0
- package/dist/worksheet/scenarios.d.ts +36 -0
- package/dist/worksheet/smart-tags.d.ts +23 -0
- package/dist/worksheet/sort-state.d.ts +28 -0
- package/dist/worksheet/table-xml.d.ts +5 -0
- package/dist/worksheet/table.d.ts +80 -0
- package/dist/worksheet/views.d.ts +47 -0
- package/dist/worksheet/web-publish.d.ts +21 -0
- package/dist/worksheet/worksheet.d.ts +935 -0
- package/dist/worksheet/writer.d.ts +72 -0
- package/dist/worksheet-CmCNoIgD.mjs +1726 -0
- package/dist/worksheet-CmCNoIgD.mjs.map +1 -0
- package/dist/worksheet.mjs +247 -0
- package/dist/worksheet.mjs.map +1 -0
- package/dist/writer-DspzfkNA.mjs +221 -0
- package/dist/writer-DspzfkNA.mjs.map +1 -0
- package/dist/xml/index.d.ts +10 -0
- package/dist/xml/iterparse.d.ts +22 -0
- package/dist/xml/namespaces.d.ts +91 -0
- package/dist/xml/parser.d.ts +7 -0
- package/dist/xml/serializer.d.ts +14 -0
- package/dist/xml/stream-writer.d.ts +39 -0
- package/dist/xml/tree.d.ts +37 -0
- package/dist/xml.mjs +140 -0
- package/dist/xml.mjs.map +1 -0
- package/dist/zip/decompression-guard.d.ts +70 -0
- package/dist/zip/index.d.ts +6 -0
- package/dist/zip/random-access-reader.d.ts +16 -0
- package/dist/zip/reader.d.ts +45 -0
- package/dist/zip/writer.d.ts +65 -0
- package/dist/zip/zip64-patch.d.ts +12 -0
- package/dist/zip.mjs +3 -0
- package/package.json +147 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stylesheet-writer-C2eRmn22.mjs","names":["A","escapeText","escapeXmlText","escapeAttr","escapeXmlAttr","valAttr","intAttr","boolAttr","parseExt","F_TAG","V_TAG","X_TAG","Y_TAG","USER_SHAPES_TAG","XML_HEADER","escapeText","escapeXmlText","valAttr","parseSpPrSlot","parseTxPrSlot","parseMarker","serializeMarker","parseSeries","serializeSeries","serializeAxis","serializeLegend","SP_PR","XML_HEADER","escapeText","escapeXmlText","escapeAttr","escapeXmlAttr","boolAttr","XML_HEADER","escapeAttr","escapeXmlAttr","parseAnchor","serializeMarker","serializeAnchor","ROW_TAG","T_TAG","SHEET_VIEWS_TAG","SHEET_VIEW_TAG","COL_TAG","AUTOFILTER_TAG","FILTER_COLUMN_TAG","FILTERS_TAG","FILTER_TAG","SHEET_PR_TAG","TAB_COLOR_TAG","SHEET_PROTECTION_TAG","PICTURE_TAG","LEGACY_DRAWING_HF_TAG","CUSTOM_SHEET_VIEWS_TAG","CUSTOM_SHEET_VIEW_TAG","PAGE_MARGINS_TAG","PAGE_SETUP_TAG","HEADER_FOOTER_TAG","WEB_PUBLISH_ITEMS_TAG","WEB_PUBLISH_ITEM_TAG","parseSheetProtection","parseSheetView","ERROR_CODES","XML_HEADER","serializeSheetProtection","escapeXmlTextShared","escapeXmlAttrShared","serializeSheetView","XML_HEADER","escapeAttr","escapeXmlAttr","parseBool","XML_HEADER","escapeAttr","escapeXmlAttr","XML_HEADER","escapeXmlText","escapeAttr","escapeXmlAttr","escapeXmlAttr"],"sources":["../src/drawing/dml/effect.ts","../src/drawing/dml/dml-xml.ts","../src/chart/chart-xml.ts","../src/chart/cx/chartex-xml.ts","../src/chart/user-shapes-xml.ts","../src/formula/tokenizer.ts","../src/formula/translate.ts","../src/worksheet/reader.ts","../src/worksheet/writer.ts","../src/chartsheet/chartsheet-xml.ts","../src/drawing/drawing-xml.ts","../src/styles/alignment.schema.ts","../src/styles/colors.schema.ts","../src/styles/borders.schema.ts","../src/styles/fills.schema.ts","../src/styles/fonts.schema.ts","../src/styles/numbers.schema.ts","../src/styles/protection.schema.ts","../src/worksheet/comments-xml.ts","../src/worksheet/table-xml.ts","../src/styles/stylesheet-writer.ts"],"sourcesContent":["// DrawingML effects.\n//\n// Effects come in two containers: `<a:effectLst>` (a sequential list of effect\n// elements) and `<a:effectDag>` (a tree of effect-containers, each composing\n// children with type=`tree` or `sib`). The Effect union covers the eight\n// ECMA-376 §20.1.8 effect leaf kinds.\n\nimport type { DmlColorWithMods } from './colors';\nimport type { Fill } from './fill';\n\nexport type FillBlendMode = 'over' | 'mult' | 'screen' | 'darken' | 'lighten';\n\nexport type ShadowAlign = 'tl' | 't' | 'tr' | 'l' | 'ctr' | 'r' | 'bl' | 'b' | 'br';\n\n/** Preset-shadow names (`<a:prstShdw prst=\"shdwN\"/>`, 20 entries). */\nexport type PresetShadowName =\n | 'shdw1'\n | 'shdw2'\n | 'shdw3'\n | 'shdw4'\n | 'shdw5'\n | 'shdw6'\n | 'shdw7'\n | 'shdw8'\n | 'shdw9'\n | 'shdw10'\n | 'shdw11'\n | 'shdw12'\n | 'shdw13'\n | 'shdw14'\n | 'shdw15'\n | 'shdw16'\n | 'shdw17'\n | 'shdw18'\n | 'shdw19'\n | 'shdw20';\n\nexport const PRESET_SHADOW_NAMES: ReadonlyArray<PresetShadowName> = [\n 'shdw1',\n 'shdw2',\n 'shdw3',\n 'shdw4',\n 'shdw5',\n 'shdw6',\n 'shdw7',\n 'shdw8',\n 'shdw9',\n 'shdw10',\n 'shdw11',\n 'shdw12',\n 'shdw13',\n 'shdw14',\n 'shdw15',\n 'shdw16',\n 'shdw17',\n 'shdw18',\n 'shdw19',\n 'shdw20',\n];\n\nexport type Effect =\n | { kind: 'blur'; rad: number; grow?: boolean }\n | { kind: 'fillOverlay'; blend: FillBlendMode; fill: Fill }\n | { kind: 'glow'; rad: number; color: DmlColorWithMods }\n | { kind: 'innerShdw'; blurRad?: number; dist?: number; dir?: number; color: DmlColorWithMods }\n | {\n kind: 'outerShdw';\n blurRad?: number;\n dist?: number;\n dir?: number;\n sx?: number;\n sy?: number;\n kx?: number;\n ky?: number;\n algn?: ShadowAlign;\n rotWithShape?: boolean;\n color: DmlColorWithMods;\n }\n | { kind: 'prstShdw'; prst: PresetShadowName; dist?: number; dir?: number; color: DmlColorWithMods }\n | {\n kind: 'reflection';\n blurRad?: number;\n stA?: number;\n stPos?: number;\n endA?: number;\n endPos?: number;\n dist?: number;\n dir?: number;\n fadeDir?: number;\n sx?: number;\n sy?: number;\n kx?: number;\n ky?: number;\n algn?: ShadowAlign;\n rotWithShape?: boolean;\n }\n | { kind: 'softEdge'; rad: number };\n\n/** `<a:effectLst>` — ordered list of effect leaves. */\nexport interface EffectList {\n list: Effect[];\n}\n\n/**\n * Inner `<a:cont type=\"tree|sib\">` node. Lives inside `<a:effectDag>` or inside\n * another `<a:cont>`. Children may be effect leaves or further containers.\n */\nexport interface EffectContainer {\n /** Compose children sequentially (`sib`) or as a tree (`tree`). */\n type: 'tree' | 'sib';\n /** Optional name for cross-referencing other DAG nodes. */\n name?: string;\n children: Array<Effect | EffectContainer>;\n}\n\n/**\n * Either `<a:effectLst>` or `<a:effectDag>`. The dag root has no `type`\n * attribute in ECMA-376; only its `<a:cont>` children do, hence we model the\n * dag as a flat list of children rather than a single EffectContainer.\n */\nexport type EffectsRef = { kind: 'lst'; list: EffectList } | { kind: 'dag'; children: Array<Effect | EffectContainer> };\n\nexport const makeEffectList = (list: Effect[]): EffectList => ({ list });\n\nexport const makeEffectContainer = (\n type: 'tree' | 'sib',\n children: Array<Effect | EffectContainer>,\n name?: string,\n): EffectContainer => ({\n type,\n ...(name !== undefined ? { name } : {}),\n children,\n});\n","// DrawingML primitive parse / serialize.\n\nimport { escapeXmlAttr, escapeXmlText } from '../../utils/escape';\nimport { OpenXmlSchemaError } from '../../utils/exceptions';\nimport { DRAWING_NS, REL_NS } from '../../xml/namespaces';\nimport { findChild, findChildren, type XmlNode } from '../../xml/tree';\nimport {\n type ColorMod,\n type DmlColor,\n type DmlColorWithMods,\n SCHEME_COLOR_NAMES,\n type SchemeColorName,\n VALUED_COLOR_MOD_KINDS,\n VALUELESS_COLOR_MOD_KINDS,\n} from './colors';\nimport type {\n Effect,\n EffectContainer,\n EffectList,\n EffectsRef,\n FillBlendMode,\n PresetShadowName,\n ShadowAlign,\n} from './effect';\nimport { PRESET_SHADOW_NAMES } from './effect';\nimport type { Blip, BlipEffect, Fill, GradientLineDir, GradientStop, RelativeRect, TileFill, TileFlip } from './fill';\nimport type {\n AdjPoint2D,\n AdjustHandle,\n ConnectionSite,\n CustomGeometry,\n Geometry,\n GeometryPath,\n GuideRect,\n PathCommand,\n PathFill,\n PresetGeometry,\n ShapeGuide,\n} from './geometry';\nimport type { LineCap, LineCompound, LineEnd, LineEndSize, LineEndType, LineProperties, PresetDash } from './line';\nimport type { BlackWhiteMode, Point2D, PositiveSize2D, ShapeProperties, Transform2D } from './shape-properties';\nimport type {\n AutoFit,\n BulletProperties,\n FontAlign,\n HyperlinkInfo,\n ParagraphAlign,\n ParagraphProperties,\n RunProperties,\n TabStop,\n TextAnchor,\n TextBody,\n TextBodyProperties,\n TextCap,\n TextFont,\n TextHorzOverflow,\n TextListStyle,\n TextOverflow,\n TextParagraph,\n TextRun,\n TextSpacing,\n TextStrike,\n TextUnderline,\n TextVertical,\n TextWrap,\n} from './text';\n\nconst A = (local: string): string => `{${DRAWING_NS}}${local}`;\n\nconst escapeText = escapeXmlText;\nconst escapeAttr = escapeXmlAttr;\n\nconst valAttr = (n: XmlNode | undefined): string | undefined => n?.attrs['val'];\nconst intAttr = (n: XmlNode, name: string): number | undefined => {\n const v = n.attrs[name];\n if (v === undefined) return undefined;\n const x = Number.parseInt(v, 10);\n return Number.isInteger(x) ? x : undefined;\n};\nconst boolAttr = (n: XmlNode, name: string): boolean | undefined => {\n const v = n.attrs[name];\n if (v === undefined) return undefined;\n if (v === '1' || v === 'true') return true;\n if (v === '0' || v === 'false') return false;\n return undefined;\n};\n\n// ---- Colors ----------------------------------------------------------------\n\nconst VALUED_MOD_SET = new Set<string>(VALUED_COLOR_MOD_KINDS);\nconst VALUELESS_MOD_SET = new Set<string>(VALUELESS_COLOR_MOD_KINDS);\nconst SCHEME_NAME_SET = new Set<string>(SCHEME_COLOR_NAMES);\n\nconst colorBaseFromNode = (el: XmlNode): DmlColor | undefined => {\n const local = el.name.split('}').pop() ?? el.name;\n switch (local) {\n case 'srgbClr': {\n const v = el.attrs['val'];\n if (!v) return undefined;\n return { kind: 'srgb', value: v.toUpperCase() };\n }\n case 'sysClr': {\n const v = el.attrs['val'];\n if (!v) return undefined;\n const lastClr = el.attrs['lastClr'];\n return { kind: 'sysClr', value: v, ...(lastClr ? { lastClr: lastClr.toUpperCase() } : {}) };\n }\n case 'schemeClr': {\n const v = el.attrs['val'];\n if (!v || !SCHEME_NAME_SET.has(v)) return undefined;\n return { kind: 'schemeClr', value: v as SchemeColorName };\n }\n case 'prstClr': {\n const v = el.attrs['val'];\n if (!v) return undefined;\n return { kind: 'prstClr', value: v };\n }\n case 'hslClr': {\n const hue = intAttr(el, 'hue') ?? 0;\n const sat = intAttr(el, 'sat') ?? 0;\n const lum = intAttr(el, 'lum') ?? 0;\n return { kind: 'hslClr', hue, sat, lum };\n }\n case 'scrgbClr': {\n const r = intAttr(el, 'r') ?? 0;\n const g = intAttr(el, 'g') ?? 0;\n const b = intAttr(el, 'b') ?? 0;\n return { kind: 'scrgbClr', r, g, b };\n }\n default:\n return undefined;\n }\n};\n\nconst colorModsFromNode = (baseEl: XmlNode): ColorMod[] => {\n const mods: ColorMod[] = [];\n for (const c of baseEl.children) {\n if (typeof c === 'string') continue;\n const local = c.name.split('}').pop() ?? c.name;\n if (VALUELESS_MOD_SET.has(local)) {\n mods.push({ kind: local } as ColorMod);\n } else if (VALUED_MOD_SET.has(local)) {\n const val = intAttr(c, 'val');\n if (val !== undefined) mods.push({ kind: local, val } as ColorMod);\n }\n }\n return mods;\n};\n\n/** Parse the first known color base element (with its mods) found inside `parent`. */\nexport const parseDmlColor = (parent: XmlNode): DmlColorWithMods | undefined => {\n for (const c of parent.children) {\n if (typeof c === 'string') continue;\n const base = colorBaseFromNode(c);\n if (!base) continue;\n return { base, mods: colorModsFromNode(c) };\n }\n return undefined;\n};\n\nconst serializeColorMod = (m: ColorMod): string => {\n if (VALUELESS_MOD_SET.has(m.kind)) return `<a:${m.kind}/>`;\n // VALUED_MOD_SET — every entry has `val`.\n return `<a:${m.kind} val=\"${(m as { val: number }).val}\"/>`;\n};\n\nconst serializeColorBase = (c: DmlColorWithMods): string => {\n const inner = c.mods?.map(serializeColorMod).join('') ?? '';\n switch (c.base.kind) {\n case 'srgb':\n return `<a:srgbClr val=\"${c.base.value}\">${inner}</a:srgbClr>`;\n case 'sysClr': {\n const last = c.base.lastClr ? ` lastClr=\"${c.base.lastClr}\"` : '';\n return `<a:sysClr val=\"${c.base.value}\"${last}>${inner}</a:sysClr>`;\n }\n case 'schemeClr':\n return `<a:schemeClr val=\"${c.base.value}\">${inner}</a:schemeClr>`;\n case 'prstClr':\n return `<a:prstClr val=\"${c.base.value}\">${inner}</a:prstClr>`;\n case 'hslClr':\n return `<a:hslClr hue=\"${c.base.hue}\" sat=\"${c.base.sat}\" lum=\"${c.base.lum}\">${inner}</a:hslClr>`;\n case 'scrgbClr':\n return `<a:scrgbClr r=\"${c.base.r}\" g=\"${c.base.g}\" b=\"${c.base.b}\">${inner}</a:scrgbClr>`;\n }\n};\n\n/** Serialize a color directly (without an enclosing wrapper). */\nexport const serializeDmlColor = (c: DmlColorWithMods): string => serializeColorBase(c);\n\n// ---- Fills -----------------------------------------------------------------\n\nconst FILL_LOCAL_NAMES = new Set(['noFill', 'solidFill', 'gradFill', 'blipFill', 'pattFill', 'grpFill']);\n\nconst parseRelativeRect = (el: XmlNode): RelativeRect => {\n const out: RelativeRect = {};\n const l = intAttr(el, 'l');\n const t = intAttr(el, 't');\n const r = intAttr(el, 'r');\n const b = intAttr(el, 'b');\n if (l !== undefined) out.l = l;\n if (t !== undefined) out.t = t;\n if (r !== undefined) out.r = r;\n if (b !== undefined) out.b = b;\n return out;\n};\n\nconst serializeRelativeRect = (tag: string, r: RelativeRect): string => {\n const a: string[] = [];\n if (r.l !== undefined) a.push(`l=\"${r.l}\"`);\n if (r.t !== undefined) a.push(`t=\"${r.t}\"`);\n if (r.r !== undefined) a.push(`r=\"${r.r}\"`);\n if (r.b !== undefined) a.push(`b=\"${r.b}\"`);\n return `<${tag}${a.length > 0 ? ` ${a.join(' ')}` : ''}/>`;\n};\n\nconst parseGradientStops = (gsLstEl: XmlNode): GradientStop[] => {\n const stops: GradientStop[] = [];\n for (const gs of findChildren(gsLstEl, A('gs'))) {\n const pos = intAttr(gs, 'pos');\n const color = parseDmlColor(gs);\n if (pos === undefined || !color) continue;\n stops.push({ pos, color });\n }\n return stops;\n};\n\nconst parseGradientLineDir = (gradEl: XmlNode): GradientLineDir | undefined => {\n const lin = findChild(gradEl, A('lin'));\n if (lin) {\n const ang = intAttr(lin, 'ang') ?? 0;\n const scaled = boolAttr(lin, 'scaled');\n return { kind: 'lin', ang, ...(scaled !== undefined ? { scaled } : {}) };\n }\n const path = findChild(gradEl, A('path'));\n if (path) {\n const pathTypeRaw = path.attrs['path'];\n const pathType =\n pathTypeRaw === 'shape' || pathTypeRaw === 'circle' || pathTypeRaw === 'rect' ? pathTypeRaw : 'shape';\n const tileRectEl = findChild(path, A('fillToRect'));\n return {\n kind: 'path',\n pathType,\n ...(tileRectEl ? { tileRect: parseRelativeRect(tileRectEl) } : {}),\n };\n }\n return undefined;\n};\n\nconst parseBlipEffectChild = (c: XmlNode): BlipEffect | undefined => {\n const local = c.name.split('}').pop() ?? c.name;\n switch (local) {\n case 'biLevel':\n return { kind: 'biLevel', thresh: intAttr(c, 'thresh') ?? 0 };\n case 'blur': {\n const rad = intAttr(c, 'rad') ?? 0;\n const grow = boolAttr(c, 'grow');\n return { kind: 'blur', rad, ...(grow !== undefined ? { grow } : {}) };\n }\n case 'clrChange': {\n const useA = boolAttr(c, 'useA');\n const fromEl = findChild(c, A('clrFrom'));\n const toEl = findChild(c, A('clrTo'));\n if (!fromEl || !toEl) return undefined;\n const from = parseDmlColor(fromEl)?.base;\n const to = parseDmlColor(toEl)?.base;\n if (!from || !to) return undefined;\n return { kind: 'clrChange', clrFrom: from, clrTo: to, ...(useA !== undefined ? { useA } : {}) };\n }\n case 'clrRepl': {\n const cw = parseDmlColor(c);\n if (!cw) return undefined;\n return { kind: 'clrRepl', color: cw.base };\n }\n case 'duotone': {\n const colors: DmlColor[] = [];\n for (const child of c.children) {\n if (typeof child === 'string') continue;\n const base = colorBaseFromNode(child);\n if (base) colors.push(base);\n if (colors.length === 2) break;\n }\n if (colors.length !== 2) return undefined;\n return { kind: 'duotone', colors: [colors[0] as DmlColor, colors[1] as DmlColor] };\n }\n case 'grayscl':\n return { kind: 'grayscl' };\n case 'lum': {\n const bright = intAttr(c, 'bright');\n const contrast = intAttr(c, 'contrast');\n return {\n kind: 'lum',\n ...(bright !== undefined ? { bright } : {}),\n ...(contrast !== undefined ? { contrast } : {}),\n };\n }\n case 'tint': {\n const hue = intAttr(c, 'hue');\n const amt = intAttr(c, 'amt');\n return {\n kind: 'tint',\n ...(hue !== undefined ? { hue } : {}),\n ...(amt !== undefined ? { amt } : {}),\n };\n }\n case 'alphaModFix':\n return { kind: 'alphaModFix', amt: intAttr(c, 'amt') ?? 0 };\n default:\n return undefined;\n }\n};\n\nconst parseBlip = (blipEl: XmlNode): Blip => {\n const out: Blip = {};\n const embed = blipEl.attrs[`{${REL_NS}}embed`];\n const link = blipEl.attrs[`{${REL_NS}}link`];\n const cstateRaw = blipEl.attrs['cstate'];\n if (embed) out.embedRId = embed;\n if (link) out.linkRId = link;\n if (cstateRaw === 'email' || cstateRaw === 'screen' || cstateRaw === 'print' || cstateRaw === 'hqprint') {\n out.cstate = cstateRaw;\n }\n const effects: BlipEffect[] = [];\n for (const c of blipEl.children) {\n if (typeof c === 'string') continue;\n const eff = parseBlipEffectChild(c);\n if (eff) effects.push(eff);\n }\n if (effects.length > 0) out.effects = effects;\n return out;\n};\n\nconst parseTileFill = (tileEl: XmlNode): TileFill => {\n const out: TileFill = {};\n const tx = intAttr(tileEl, 'tx');\n const ty = intAttr(tileEl, 'ty');\n const sx = intAttr(tileEl, 'sx');\n const sy = intAttr(tileEl, 'sy');\n const flipRaw = tileEl.attrs['flip'];\n const algnRaw = tileEl.attrs['algn'];\n if (tx !== undefined) out.tx = tx;\n if (ty !== undefined) out.ty = ty;\n if (sx !== undefined) out.sx = sx;\n if (sy !== undefined) out.sy = sy;\n if (flipRaw === 'x' || flipRaw === 'y' || flipRaw === 'xy' || flipRaw === 'none') out.flip = flipRaw;\n const validAlgn: ReadonlyArray<string> = ['tl', 't', 'tr', 'l', 'ctr', 'r', 'bl', 'b', 'br'];\n if (algnRaw && validAlgn.includes(algnRaw)) out.algn = algnRaw as NonNullable<TileFill['algn']>;\n return out;\n};\n\nconst parseFillNode = (el: XmlNode): Fill | undefined => {\n const local = el.name.split('}').pop() ?? el.name;\n switch (local) {\n case 'noFill':\n return { kind: 'noFill' };\n case 'grpFill':\n return { kind: 'grpFill' };\n case 'solidFill': {\n const color = parseDmlColor(el);\n if (!color) return undefined;\n return { kind: 'solidFill', color };\n }\n case 'gradFill': {\n const flipRaw = el.attrs['flip'];\n const flip: TileFlip | undefined =\n flipRaw === 'x' || flipRaw === 'y' || flipRaw === 'xy' || flipRaw === 'none' ? flipRaw : undefined;\n const rotWithShape = boolAttr(el, 'rotWithShape');\n const gsLstEl = findChild(el, A('gsLst'));\n const stops = gsLstEl ? parseGradientStops(gsLstEl) : [];\n const lineDir = parseGradientLineDir(el);\n return {\n kind: 'gradFill',\n stops,\n ...(flip ? { flip } : {}),\n ...(rotWithShape !== undefined ? { rotWithShape } : {}),\n ...(lineDir ? { lineDir } : {}),\n };\n }\n case 'blipFill': {\n const dpi = intAttr(el, 'dpi');\n const rotWithShape = boolAttr(el, 'rotWithShape');\n const blipEl = findChild(el, A('blip'));\n const blip = blipEl ? parseBlip(blipEl) : {};\n const tileEl = findChild(el, A('tile'));\n const stretchEl = findChild(el, A('stretch'));\n const srcRectEl = findChild(el, A('srcRect'));\n const out: Fill = {\n kind: 'blipFill',\n blip,\n ...(dpi !== undefined ? { dpi } : {}),\n ...(rotWithShape !== undefined ? { rotWithShape } : {}),\n ...(tileEl ? { tile: parseTileFill(tileEl) } : {}),\n ...(stretchEl\n ? {\n stretch: (() => {\n const fr = findChild(stretchEl, A('fillRect'));\n return fr ? { fillRect: parseRelativeRect(fr) } : {};\n })(),\n }\n : {}),\n ...(srcRectEl ? { srcRect: parseRelativeRect(srcRectEl) } : {}),\n };\n return out;\n }\n case 'pattFill': {\n const preset = el.attrs['prst'] ?? '';\n const fgEl = findChild(el, A('fgClr'));\n const bgEl = findChild(el, A('bgClr'));\n const out: Fill = {\n kind: 'pattFill',\n preset,\n ...(fgEl ? { fgClr: parseDmlColor(fgEl) ?? { base: { kind: 'srgb', value: '000000' }, mods: [] } } : {}),\n ...(bgEl ? { bgClr: parseDmlColor(bgEl) ?? { base: { kind: 'srgb', value: 'FFFFFF' }, mods: [] } } : {}),\n };\n return out;\n }\n default:\n return undefined;\n }\n};\n\n/** Parse the first fill element under `parent` (any of the 6 kinds). */\nexport const parseFill = (parent: XmlNode): Fill | undefined => {\n for (const c of parent.children) {\n if (typeof c === 'string') continue;\n const local = c.name.split('}').pop() ?? c.name;\n if (FILL_LOCAL_NAMES.has(local)) return parseFillNode(c);\n }\n return undefined;\n};\n\nconst serializeBlipEffect = (e: BlipEffect): string => {\n switch (e.kind) {\n case 'biLevel':\n return `<a:biLevel thresh=\"${e.thresh}\"/>`;\n case 'blur':\n return `<a:blur rad=\"${e.rad}\"${e.grow !== undefined ? ` grow=\"${e.grow ? '1' : '0'}\"` : ''}/>`;\n case 'clrChange': {\n const useA = e.useA !== undefined ? ` useA=\"${e.useA ? '1' : '0'}\"` : '';\n const from = serializeColorBase({ base: e.clrFrom, mods: [] });\n const to = serializeColorBase({ base: e.clrTo, mods: [] });\n return `<a:clrChange${useA}><a:clrFrom>${from}</a:clrFrom><a:clrTo>${to}</a:clrTo></a:clrChange>`;\n }\n case 'clrRepl':\n return `<a:clrRepl>${serializeColorBase({ base: e.color, mods: [] })}</a:clrRepl>`;\n case 'duotone':\n return `<a:duotone>${serializeColorBase({ base: e.colors[0], mods: [] })}${serializeColorBase({ base: e.colors[1], mods: [] })}</a:duotone>`;\n case 'grayscl':\n return '<a:grayscl/>';\n case 'lum': {\n const a: string[] = [];\n if (e.bright !== undefined) a.push(`bright=\"${e.bright}\"`);\n if (e.contrast !== undefined) a.push(`contrast=\"${e.contrast}\"`);\n return `<a:lum${a.length > 0 ? ` ${a.join(' ')}` : ''}/>`;\n }\n case 'tint': {\n const a: string[] = [];\n if (e.hue !== undefined) a.push(`hue=\"${e.hue}\"`);\n if (e.amt !== undefined) a.push(`amt=\"${e.amt}\"`);\n return `<a:tint${a.length > 0 ? ` ${a.join(' ')}` : ''}/>`;\n }\n case 'alphaModFix':\n return `<a:alphaModFix amt=\"${e.amt}\"/>`;\n }\n};\n\nconst serializeBlip = (b: Blip): string => {\n const a: string[] = [];\n if (b.embedRId) a.push(`r:embed=\"${escapeAttr(b.embedRId)}\"`);\n if (b.linkRId) a.push(`r:link=\"${escapeAttr(b.linkRId)}\"`);\n if (b.cstate) a.push(`cstate=\"${b.cstate}\"`);\n const inner = (b.effects ?? []).map(serializeBlipEffect).join('');\n return inner === ''\n ? `<a:blip${a.length > 0 ? ` ${a.join(' ')}` : ''}/>`\n : `<a:blip${a.length > 0 ? ` ${a.join(' ')}` : ''}>${inner}</a:blip>`;\n};\n\nconst serializeTileFill = (t: TileFill): string => {\n const a: string[] = [];\n if (t.tx !== undefined) a.push(`tx=\"${t.tx}\"`);\n if (t.ty !== undefined) a.push(`ty=\"${t.ty}\"`);\n if (t.sx !== undefined) a.push(`sx=\"${t.sx}\"`);\n if (t.sy !== undefined) a.push(`sy=\"${t.sy}\"`);\n if (t.flip) a.push(`flip=\"${t.flip}\"`);\n if (t.algn) a.push(`algn=\"${t.algn}\"`);\n return `<a:tile${a.length > 0 ? ` ${a.join(' ')}` : ''}/>`;\n};\n\nconst serializeGradientLineDir = (d: GradientLineDir): string => {\n if (d.kind === 'lin') {\n const scaled = d.scaled !== undefined ? ` scaled=\"${d.scaled ? '1' : '0'}\"` : '';\n return `<a:lin ang=\"${d.ang}\"${scaled}/>`;\n }\n const inner = d.tileRect ? serializeRelativeRect('a:fillToRect', d.tileRect) : '';\n return `<a:path path=\"${d.pathType}\">${inner}</a:path>`;\n};\n\nexport const serializeFill = (f: Fill): string => {\n switch (f.kind) {\n case 'noFill':\n return '<a:noFill/>';\n case 'grpFill':\n return '<a:grpFill/>';\n case 'solidFill':\n return `<a:solidFill>${serializeColorBase(f.color)}</a:solidFill>`;\n case 'gradFill': {\n const a: string[] = [];\n if (f.flip) a.push(`flip=\"${f.flip}\"`);\n if (f.rotWithShape !== undefined) a.push(`rotWithShape=\"${f.rotWithShape ? '1' : '0'}\"`);\n const stops = `<a:gsLst>${f.stops\n .map((s) => `<a:gs pos=\"${s.pos}\">${serializeColorBase(s.color)}</a:gs>`)\n .join('')}</a:gsLst>`;\n const dir = f.lineDir ? serializeGradientLineDir(f.lineDir) : '';\n return `<a:gradFill${a.length > 0 ? ` ${a.join(' ')}` : ''}>${stops}${dir}</a:gradFill>`;\n }\n case 'blipFill': {\n const a: string[] = [];\n if (f.dpi !== undefined) a.push(`dpi=\"${f.dpi}\"`);\n if (f.rotWithShape !== undefined) a.push(`rotWithShape=\"${f.rotWithShape ? '1' : '0'}\"`);\n const blip = serializeBlip(f.blip);\n const src = f.srcRect ? serializeRelativeRect('a:srcRect', f.srcRect) : '';\n const tile = f.tile ? serializeTileFill(f.tile) : '';\n let stretch = '';\n if (f.stretch) {\n const inner = f.stretch.fillRect ? serializeRelativeRect('a:fillRect', f.stretch.fillRect) : '';\n stretch = `<a:stretch>${inner}</a:stretch>`;\n }\n return `<a:blipFill${a.length > 0 ? ` ${a.join(' ')}` : ''}>${blip}${src}${tile}${stretch}</a:blipFill>`;\n }\n case 'pattFill': {\n const fg = f.fgClr ? `<a:fgClr>${serializeColorBase(f.fgClr)}</a:fgClr>` : '';\n const bg = f.bgClr ? `<a:bgClr>${serializeColorBase(f.bgClr)}</a:bgClr>` : '';\n return `<a:pattFill prst=\"${escapeAttr(f.preset)}\">${fg}${bg}</a:pattFill>`;\n }\n default: {\n // Reject a misconstructed Fill at the throw site rather than emitting an\n // empty wrapper element. Excel happens to accept empty <c:spPr/>, but the\n // caller's intent is silently dropped and the failure is invisible.\n const kind = (f as { kind?: unknown }).kind;\n throw new OpenXmlSchemaError(`serializeFill: unknown Fill.kind ${JSON.stringify(kind)}`);\n }\n }\n};\n\n// ---- Lines -----------------------------------------------------------------\n\nconst VALID_LINE_END_TYPES: ReadonlyArray<string> = ['none', 'triangle', 'stealth', 'diamond', 'oval', 'arrow'];\nconst VALID_LINE_END_SIZES: ReadonlyArray<string> = ['sm', 'med', 'lg'];\n\nconst parseLineEnd = (el: XmlNode): LineEnd => {\n const out: LineEnd = {};\n const t = el.attrs['type'];\n const w = el.attrs['w'];\n const len = el.attrs['len'];\n if (t && VALID_LINE_END_TYPES.includes(t)) out.type = t as LineEndType;\n if (w && VALID_LINE_END_SIZES.includes(w)) out.w = w as LineEndSize;\n if (len && VALID_LINE_END_SIZES.includes(len)) out.len = len as LineEndSize;\n return out;\n};\n\nconst PRESET_DASHES: ReadonlyArray<string> = [\n 'solid',\n 'dot',\n 'dash',\n 'lgDash',\n 'dashDot',\n 'lgDashDot',\n 'lgDashDotDot',\n 'sysDash',\n 'sysDot',\n 'sysDashDot',\n 'sysDashDotDot',\n];\n\nexport const parseLine = (el: XmlNode): LineProperties => {\n const out: LineProperties = {};\n const w = intAttr(el, 'w');\n if (w !== undefined) out.w = w;\n const cap = el.attrs['cap'];\n if (cap === 'rnd' || cap === 'sq' || cap === 'flat') out.cap = cap as LineCap;\n const cmpd = el.attrs['cmpd'];\n if (cmpd === 'sng' || cmpd === 'dbl' || cmpd === 'thickThin' || cmpd === 'thinThick' || cmpd === 'tri')\n out.cmpd = cmpd as LineCompound;\n const algn = el.attrs['algn'];\n if (algn === 'ctr' || algn === 'in') out.algn = algn;\n const fill = parseFill(el);\n if (fill) out.fill = fill;\n const prstDashEl = findChild(el, A('prstDash'));\n const custDashEl = findChild(el, A('custDash'));\n if (prstDashEl) {\n const v = valAttr(prstDashEl);\n if (v && PRESET_DASHES.includes(v)) out.dash = { kind: 'preset', val: v as PresetDash };\n } else if (custDashEl) {\n const pattern: number[] = [];\n for (const ds of findChildren(custDashEl, A('ds'))) {\n const d = intAttr(ds, 'd');\n const sp = intAttr(ds, 'sp');\n if (d !== undefined) pattern.push(d);\n if (sp !== undefined) pattern.push(sp);\n }\n out.dash = { kind: 'custDash', pattern };\n }\n const roundEl = findChild(el, A('round'));\n const bevelEl = findChild(el, A('bevel'));\n const miterEl = findChild(el, A('miter'));\n if (roundEl) out.join = { kind: 'round' };\n else if (bevelEl) out.join = { kind: 'bevel' };\n else if (miterEl) {\n const lim = intAttr(miterEl, 'lim');\n out.join = { kind: 'miter', ...(lim !== undefined ? { lim } : {}) };\n }\n const headEnd = findChild(el, A('headEnd'));\n const tailEnd = findChild(el, A('tailEnd'));\n if (headEnd) out.headEnd = parseLineEnd(headEnd);\n if (tailEnd) out.tailEnd = parseLineEnd(tailEnd);\n return out;\n};\n\nconst serializeLineEnd = (tag: string, e: LineEnd): string => {\n const a: string[] = [];\n if (e.type) a.push(`type=\"${e.type}\"`);\n if (e.w) a.push(`w=\"${e.w}\"`);\n if (e.len) a.push(`len=\"${e.len}\"`);\n return `<${tag}${a.length > 0 ? ` ${a.join(' ')}` : ''}/>`;\n};\n\nexport const serializeLine = (ln: LineProperties): string => {\n const a: string[] = [];\n if (ln.w !== undefined) a.push(`w=\"${ln.w}\"`);\n if (ln.cap) a.push(`cap=\"${ln.cap}\"`);\n if (ln.cmpd) a.push(`cmpd=\"${ln.cmpd}\"`);\n if (ln.algn) a.push(`algn=\"${ln.algn}\"`);\n const parts: string[] = [`<a:ln${a.length > 0 ? ` ${a.join(' ')}` : ''}>`];\n if (ln.fill) parts.push(serializeFill(ln.fill));\n if (ln.dash) {\n if (ln.dash.kind === 'preset') {\n parts.push(`<a:prstDash val=\"${ln.dash.val}\"/>`);\n } else {\n const dsParts: string[] = [];\n for (let i = 0; i + 1 < ln.dash.pattern.length; i += 2) {\n dsParts.push(`<a:ds d=\"${ln.dash.pattern[i]}\" sp=\"${ln.dash.pattern[i + 1]}\"/>`);\n }\n parts.push(`<a:custDash>${dsParts.join('')}</a:custDash>`);\n }\n }\n if (ln.join) {\n if (ln.join.kind === 'round') parts.push('<a:round/>');\n else if (ln.join.kind === 'bevel') parts.push('<a:bevel/>');\n else parts.push(`<a:miter${ln.join.lim !== undefined ? ` lim=\"${ln.join.lim}\"` : ''}/>`);\n }\n if (ln.headEnd) parts.push(serializeLineEnd('a:headEnd', ln.headEnd));\n if (ln.tailEnd) parts.push(serializeLineEnd('a:tailEnd', ln.tailEnd));\n parts.push('</a:ln>');\n return parts.join('');\n};\n\n// ---- Geometry --------------------------------------------------------------\n\nconst parseShapeGuides = (lstEl: XmlNode): ShapeGuide[] => {\n const out: ShapeGuide[] = [];\n for (const gd of findChildren(lstEl, A('gd'))) {\n const name = gd.attrs['name'];\n const fmla = gd.attrs['fmla'];\n if (name === undefined || fmla === undefined) continue;\n out.push({ name, fmla });\n }\n return out;\n};\n\nconst serializeShapeGuides = (tag: string, guides: ShapeGuide[]): string => {\n if (guides.length === 0) return `<${tag}/>`;\n const inner = guides.map((g) => `<a:gd name=\"${escapeAttr(g.name)}\" fmla=\"${escapeAttr(g.fmla)}\"/>`).join('');\n return `<${tag}>${inner}</${tag}>`;\n};\n\nconst parseAdjPoint = (el: XmlNode): AdjPoint2D => ({\n x: el.attrs['x'] ?? '0',\n y: el.attrs['y'] ?? '0',\n});\n\nconst parseConnectionSites = (lstEl: XmlNode): ConnectionSite[] => {\n const out: ConnectionSite[] = [];\n for (const cxn of findChildren(lstEl, A('cxn'))) {\n const ang = cxn.attrs['ang'] ?? '0';\n const posEl = findChild(cxn, A('pos'));\n if (!posEl) continue;\n out.push({ ang, pos: parseAdjPoint(posEl) });\n }\n return out;\n};\n\nconst serializeConnectionSites = (sites: ConnectionSite[]): string => {\n if (sites.length === 0) return '<a:cxnLst/>';\n const inner = sites\n .map(\n (s) => `<a:cxn ang=\"${escapeAttr(s.ang)}\"><a:pos x=\"${escapeAttr(s.pos.x)}\" y=\"${escapeAttr(s.pos.y)}\"/></a:cxn>`,\n )\n .join('');\n return `<a:cxnLst>${inner}</a:cxnLst>`;\n};\n\nconst parseAdjustHandles = (lstEl: XmlNode): AdjustHandle[] => {\n const out: AdjustHandle[] = [];\n for (const child of lstEl.children) {\n if (typeof child === 'string') continue;\n const local = child.name.split('}').pop() ?? child.name;\n if (local !== 'ahXY' && local !== 'ahPolar') continue;\n const posEl = findChild(child, A('pos'));\n if (!posEl) continue;\n const handle: AdjustHandle = {\n kind: local === 'ahXY' ? 'xy' : 'polar',\n pos: parseAdjPoint(posEl),\n };\n const a = child.attrs;\n if (a['gdRefX'] !== undefined) handle.gdRefX = a['gdRefX'];\n if (a['minX'] !== undefined) handle.minX = a['minX'];\n if (a['maxX'] !== undefined) handle.maxX = a['maxX'];\n if (a['gdRefY'] !== undefined) handle.gdRefY = a['gdRefY'];\n if (a['minY'] !== undefined) handle.minY = a['minY'];\n if (a['maxY'] !== undefined) handle.maxY = a['maxY'];\n if (a['gdRefR'] !== undefined) handle.gdRefR = a['gdRefR'];\n if (a['minR'] !== undefined) handle.minR = a['minR'];\n if (a['maxR'] !== undefined) handle.maxR = a['maxR'];\n if (a['gdRefAng'] !== undefined) handle.gdRefAng = a['gdRefAng'];\n if (a['minAng'] !== undefined) handle.minAng = a['minAng'];\n if (a['maxAng'] !== undefined) handle.maxAng = a['maxAng'];\n out.push(handle);\n }\n return out;\n};\n\nconst serializeAdjustHandles = (handles: AdjustHandle[]): string => {\n if (handles.length === 0) return '<a:ahLst/>';\n const inner = handles\n .map((h) => {\n const tag = h.kind === 'xy' ? 'a:ahXY' : 'a:ahPolar';\n const attrs: string[] = [];\n const push = (k: string, v: string | undefined): void => {\n if (v !== undefined) attrs.push(`${k}=\"${escapeAttr(v)}\"`);\n };\n push('gdRefX', h.gdRefX);\n push('minX', h.minX);\n push('maxX', h.maxX);\n push('gdRefY', h.gdRefY);\n push('minY', h.minY);\n push('maxY', h.maxY);\n push('gdRefR', h.gdRefR);\n push('minR', h.minR);\n push('maxR', h.maxR);\n push('gdRefAng', h.gdRefAng);\n push('minAng', h.minAng);\n push('maxAng', h.maxAng);\n return `<${tag}${attrs.length > 0 ? ` ${attrs.join(' ')}` : ''}><a:pos x=\"${escapeAttr(h.pos.x)}\" y=\"${escapeAttr(h.pos.y)}\"/></${tag}>`;\n })\n .join('');\n return `<a:ahLst>${inner}</a:ahLst>`;\n};\n\nconst parseRectGuide = (el: XmlNode): GuideRect => ({\n l: el.attrs['l'] ?? '0',\n t: el.attrs['t'] ?? '0',\n r: el.attrs['r'] ?? '0',\n b: el.attrs['b'] ?? '0',\n});\n\nconst VALID_PATH_FILLS: ReadonlyArray<string> = ['none', 'norm', 'lighten', 'lightenLess', 'darken', 'darkenLess'];\n\nconst parsePathPt = (el: XmlNode): Point2D => ({\n x: intAttr(el, 'x') ?? 0,\n y: intAttr(el, 'y') ?? 0,\n});\n\nconst parsePathCommand = (el: XmlNode): PathCommand | undefined => {\n const local = el.name.split('}').pop() ?? el.name;\n switch (local) {\n case 'moveTo':\n case 'lnTo': {\n const ptEl = findChild(el, A('pt'));\n if (!ptEl) return undefined;\n return { kind: local, pt: parsePathPt(ptEl) };\n }\n case 'arcTo':\n return {\n kind: 'arcTo',\n wR: el.attrs['wR'] ?? '0',\n hR: el.attrs['hR'] ?? '0',\n stAng: el.attrs['stAng'] ?? '0',\n swAng: el.attrs['swAng'] ?? '0',\n };\n case 'quadBezTo': {\n const pts: Point2D[] = [];\n for (const pt of findChildren(el, A('pt'))) pts.push(parsePathPt(pt));\n if (pts.length < 2) return undefined;\n return { kind: 'quadBezTo', pts: [pts[0] as Point2D, pts[1] as Point2D] };\n }\n case 'cubicBezTo': {\n const pts: Point2D[] = [];\n for (const pt of findChildren(el, A('pt'))) pts.push(parsePathPt(pt));\n if (pts.length < 3) return undefined;\n return {\n kind: 'cubicBezTo',\n pts: [pts[0] as Point2D, pts[1] as Point2D, pts[2] as Point2D],\n };\n }\n case 'close':\n return { kind: 'close' };\n default:\n return undefined;\n }\n};\n\nconst parsePath = (el: XmlNode): GeometryPath => {\n const out: GeometryPath = { commands: [] };\n const w = intAttr(el, 'w');\n const h = intAttr(el, 'h');\n if (w !== undefined) out.w = w;\n if (h !== undefined) out.h = h;\n const fillRaw = el.attrs['fill'];\n if (fillRaw && VALID_PATH_FILLS.includes(fillRaw)) out.fill = fillRaw as PathFill;\n const stroke = boolAttr(el, 'stroke');\n if (stroke !== undefined) out.stroke = stroke;\n const extrusionOk = boolAttr(el, 'extrusionOk');\n if (extrusionOk !== undefined) out.extrusionOk = extrusionOk;\n for (const c of el.children) {\n if (typeof c === 'string') continue;\n const cmd = parsePathCommand(c);\n if (cmd) out.commands.push(cmd);\n }\n return out;\n};\n\nconst serializePathCommand = (cmd: PathCommand): string => {\n switch (cmd.kind) {\n case 'moveTo':\n return `<a:moveTo><a:pt x=\"${cmd.pt.x}\" y=\"${cmd.pt.y}\"/></a:moveTo>`;\n case 'lnTo':\n return `<a:lnTo><a:pt x=\"${cmd.pt.x}\" y=\"${cmd.pt.y}\"/></a:lnTo>`;\n case 'arcTo':\n return `<a:arcTo wR=\"${escapeAttr(cmd.wR)}\" hR=\"${escapeAttr(cmd.hR)}\" stAng=\"${escapeAttr(cmd.stAng)}\" swAng=\"${escapeAttr(cmd.swAng)}\"/>`;\n case 'quadBezTo':\n return `<a:quadBezTo><a:pt x=\"${cmd.pts[0].x}\" y=\"${cmd.pts[0].y}\"/><a:pt x=\"${cmd.pts[1].x}\" y=\"${cmd.pts[1].y}\"/></a:quadBezTo>`;\n case 'cubicBezTo':\n return `<a:cubicBezTo><a:pt x=\"${cmd.pts[0].x}\" y=\"${cmd.pts[0].y}\"/><a:pt x=\"${cmd.pts[1].x}\" y=\"${cmd.pts[1].y}\"/><a:pt x=\"${cmd.pts[2].x}\" y=\"${cmd.pts[2].y}\"/></a:cubicBezTo>`;\n case 'close':\n return '<a:close/>';\n }\n};\n\nconst serializePath = (p: GeometryPath): string => {\n const a: string[] = [];\n if (p.w !== undefined) a.push(`w=\"${p.w}\"`);\n if (p.h !== undefined) a.push(`h=\"${p.h}\"`);\n if (p.fill) a.push(`fill=\"${p.fill}\"`);\n if (p.stroke !== undefined) a.push(`stroke=\"${p.stroke ? '1' : '0'}\"`);\n if (p.extrusionOk !== undefined) a.push(`extrusionOk=\"${p.extrusionOk ? '1' : '0'}\"`);\n const inner = p.commands.map(serializePathCommand).join('');\n return `<a:path${a.length > 0 ? ` ${a.join(' ')}` : ''}>${inner}</a:path>`;\n};\n\nexport const parseGeometry = (parent: XmlNode): Geometry | undefined => {\n const prstEl = findChild(parent, A('prstGeom'));\n if (prstEl) {\n const prst = prstEl.attrs['prst'] ?? '';\n const avLstEl = findChild(prstEl, A('avLst'));\n const out: PresetGeometry = { kind: 'preset', prst };\n if (avLstEl) {\n const guides = parseShapeGuides(avLstEl);\n if (guides.length > 0) out.avLst = guides;\n }\n return out;\n }\n const custEl = findChild(parent, A('custGeom'));\n if (custEl) {\n const out: CustomGeometry = { kind: 'custom', pathLst: [] };\n const avLstEl = findChild(custEl, A('avLst'));\n if (avLstEl) {\n const g = parseShapeGuides(avLstEl);\n if (g.length > 0) out.avLst = g;\n }\n const gdLstEl = findChild(custEl, A('gdLst'));\n if (gdLstEl) {\n const g = parseShapeGuides(gdLstEl);\n if (g.length > 0) out.gdLst = g;\n }\n const ahLstEl = findChild(custEl, A('ahLst'));\n if (ahLstEl) {\n const ah = parseAdjustHandles(ahLstEl);\n if (ah.length > 0) out.ahLst = ah;\n }\n const cxnLstEl = findChild(custEl, A('cxnLst'));\n if (cxnLstEl) {\n const cxn = parseConnectionSites(cxnLstEl);\n if (cxn.length > 0) out.cxnLst = cxn;\n }\n const rectEl = findChild(custEl, A('rect'));\n if (rectEl) out.rect = parseRectGuide(rectEl);\n const pathLstEl = findChild(custEl, A('pathLst'));\n if (pathLstEl) {\n for (const p of findChildren(pathLstEl, A('path'))) out.pathLst.push(parsePath(p));\n }\n return out;\n }\n return undefined;\n};\n\nexport const serializeGeometry = (g: Geometry): string => {\n if (g.kind === 'preset') {\n const av = g.avLst ? serializeShapeGuides('a:avLst', g.avLst) : '';\n return av === ''\n ? `<a:prstGeom prst=\"${escapeAttr(g.prst)}\"/>`\n : `<a:prstGeom prst=\"${escapeAttr(g.prst)}\">${av}</a:prstGeom>`;\n }\n const parts: string[] = ['<a:custGeom>'];\n parts.push(g.avLst ? serializeShapeGuides('a:avLst', g.avLst) : '<a:avLst/>');\n parts.push(g.gdLst ? serializeShapeGuides('a:gdLst', g.gdLst) : '<a:gdLst/>');\n parts.push(g.ahLst ? serializeAdjustHandles(g.ahLst) : '<a:ahLst/>');\n parts.push(g.cxnLst ? serializeConnectionSites(g.cxnLst) : '<a:cxnLst/>');\n if (g.rect) {\n parts.push(\n `<a:rect l=\"${escapeAttr(g.rect.l)}\" t=\"${escapeAttr(g.rect.t)}\" r=\"${escapeAttr(g.rect.r)}\" b=\"${escapeAttr(g.rect.b)}\"/>`,\n );\n }\n parts.push(`<a:pathLst>${g.pathLst.map(serializePath).join('')}</a:pathLst>`);\n parts.push('</a:custGeom>');\n return parts.join('');\n};\n\n// ---- Effects ---------------------------------------------------------------\n\nconst VALID_BLEND: ReadonlyArray<string> = ['over', 'mult', 'screen', 'darken', 'lighten'];\nconst VALID_SHADOW_ALIGN: ReadonlyArray<string> = ['tl', 't', 'tr', 'l', 'ctr', 'r', 'bl', 'b', 'br'];\nconst PRESET_SHADOW_SET: ReadonlySet<string> = new Set(PRESET_SHADOW_NAMES);\n\nconst EFFECT_LEAF_NAMES = new Set([\n 'blur',\n 'fillOverlay',\n 'glow',\n 'innerShdw',\n 'outerShdw',\n 'prstShdw',\n 'reflection',\n 'softEdge',\n]);\n\nconst parseEffectLeaf = (el: XmlNode): Effect | undefined => {\n const local = el.name.split('}').pop() ?? el.name;\n switch (local) {\n case 'blur': {\n const rad = intAttr(el, 'rad') ?? 0;\n const grow = boolAttr(el, 'grow');\n return { kind: 'blur', rad, ...(grow !== undefined ? { grow } : {}) };\n }\n case 'fillOverlay': {\n const blendRaw = el.attrs['blend'];\n const blend: FillBlendMode = VALID_BLEND.includes(blendRaw ?? '') ? (blendRaw as FillBlendMode) : 'over';\n const fill = parseFill(el);\n if (!fill) return undefined;\n return { kind: 'fillOverlay', blend, fill };\n }\n case 'glow': {\n const rad = intAttr(el, 'rad') ?? 0;\n const color = parseDmlColor(el);\n if (!color) return undefined;\n return { kind: 'glow', rad, color };\n }\n case 'innerShdw': {\n const color = parseDmlColor(el);\n if (!color) return undefined;\n const blurRad = intAttr(el, 'blurRad');\n const dist = intAttr(el, 'dist');\n const dir = intAttr(el, 'dir');\n return {\n kind: 'innerShdw',\n color,\n ...(blurRad !== undefined ? { blurRad } : {}),\n ...(dist !== undefined ? { dist } : {}),\n ...(dir !== undefined ? { dir } : {}),\n };\n }\n case 'outerShdw': {\n const color = parseDmlColor(el);\n if (!color) return undefined;\n const blurRad = intAttr(el, 'blurRad');\n const dist = intAttr(el, 'dist');\n const dir = intAttr(el, 'dir');\n const sx = intAttr(el, 'sx');\n const sy = intAttr(el, 'sy');\n const kx = intAttr(el, 'kx');\n const ky = intAttr(el, 'ky');\n const algnRaw = el.attrs['algn'];\n const algn: ShadowAlign | undefined =\n algnRaw && VALID_SHADOW_ALIGN.includes(algnRaw) ? (algnRaw as ShadowAlign) : undefined;\n const rotWithShape = boolAttr(el, 'rotWithShape');\n return {\n kind: 'outerShdw',\n color,\n ...(blurRad !== undefined ? { blurRad } : {}),\n ...(dist !== undefined ? { dist } : {}),\n ...(dir !== undefined ? { dir } : {}),\n ...(sx !== undefined ? { sx } : {}),\n ...(sy !== undefined ? { sy } : {}),\n ...(kx !== undefined ? { kx } : {}),\n ...(ky !== undefined ? { ky } : {}),\n ...(algn ? { algn } : {}),\n ...(rotWithShape !== undefined ? { rotWithShape } : {}),\n };\n }\n case 'prstShdw': {\n const color = parseDmlColor(el);\n if (!color) return undefined;\n const prstRaw = el.attrs['prst'];\n if (!prstRaw || !PRESET_SHADOW_SET.has(prstRaw)) return undefined;\n const dist = intAttr(el, 'dist');\n const dir = intAttr(el, 'dir');\n return {\n kind: 'prstShdw',\n prst: prstRaw as PresetShadowName,\n color,\n ...(dist !== undefined ? { dist } : {}),\n ...(dir !== undefined ? { dir } : {}),\n };\n }\n case 'reflection': {\n const blurRad = intAttr(el, 'blurRad');\n const stA = intAttr(el, 'stA');\n const stPos = intAttr(el, 'stPos');\n const endA = intAttr(el, 'endA');\n const endPos = intAttr(el, 'endPos');\n const dist = intAttr(el, 'dist');\n const dir = intAttr(el, 'dir');\n const fadeDir = intAttr(el, 'fadeDir');\n const sx = intAttr(el, 'sx');\n const sy = intAttr(el, 'sy');\n const kx = intAttr(el, 'kx');\n const ky = intAttr(el, 'ky');\n const algnRaw = el.attrs['algn'];\n const algn: ShadowAlign | undefined =\n algnRaw && VALID_SHADOW_ALIGN.includes(algnRaw) ? (algnRaw as ShadowAlign) : undefined;\n const rotWithShape = boolAttr(el, 'rotWithShape');\n return {\n kind: 'reflection',\n ...(blurRad !== undefined ? { blurRad } : {}),\n ...(stA !== undefined ? { stA } : {}),\n ...(stPos !== undefined ? { stPos } : {}),\n ...(endA !== undefined ? { endA } : {}),\n ...(endPos !== undefined ? { endPos } : {}),\n ...(dist !== undefined ? { dist } : {}),\n ...(dir !== undefined ? { dir } : {}),\n ...(fadeDir !== undefined ? { fadeDir } : {}),\n ...(sx !== undefined ? { sx } : {}),\n ...(sy !== undefined ? { sy } : {}),\n ...(kx !== undefined ? { kx } : {}),\n ...(ky !== undefined ? { ky } : {}),\n ...(algn ? { algn } : {}),\n ...(rotWithShape !== undefined ? { rotWithShape } : {}),\n };\n }\n case 'softEdge':\n return { kind: 'softEdge', rad: intAttr(el, 'rad') ?? 0 };\n default:\n return undefined;\n }\n};\n\nconst parseEffectContainerChildren = (parent: XmlNode): Array<Effect | EffectContainer> => {\n const out: Array<Effect | EffectContainer> = [];\n for (const c of parent.children) {\n if (typeof c === 'string') continue;\n const local = c.name.split('}').pop() ?? c.name;\n if (local === 'cont') {\n out.push(parseEffectContainer(c));\n } else if (EFFECT_LEAF_NAMES.has(local)) {\n const leaf = parseEffectLeaf(c);\n if (leaf) out.push(leaf);\n }\n }\n return out;\n};\n\nconst parseEffectContainer = (el: XmlNode): EffectContainer => {\n const typeRaw = el.attrs['type'];\n const type: 'tree' | 'sib' = typeRaw === 'tree' ? 'tree' : 'sib';\n const name = el.attrs['name'];\n return {\n type,\n ...(name !== undefined ? { name } : {}),\n children: parseEffectContainerChildren(el),\n };\n};\n\nconst parseEffectList = (el: XmlNode): EffectList => {\n const list: Effect[] = [];\n for (const c of el.children) {\n if (typeof c === 'string') continue;\n const leaf = parseEffectLeaf(c);\n if (leaf) list.push(leaf);\n }\n return { list };\n};\n\nexport const parseEffects = (parent: XmlNode): EffectsRef | undefined => {\n const lstEl = findChild(parent, A('effectLst'));\n if (lstEl) return { kind: 'lst', list: parseEffectList(lstEl) };\n const dagEl = findChild(parent, A('effectDag'));\n if (dagEl) return { kind: 'dag', children: parseEffectContainerChildren(dagEl) };\n return undefined;\n};\n\nconst serializeEffectLeaf = (e: Effect): string => {\n switch (e.kind) {\n case 'blur': {\n const grow = e.grow !== undefined ? ` grow=\"${e.grow ? '1' : '0'}\"` : '';\n return `<a:blur rad=\"${e.rad}\"${grow}/>`;\n }\n case 'fillOverlay':\n return `<a:fillOverlay blend=\"${e.blend}\">${serializeFill(e.fill)}</a:fillOverlay>`;\n case 'glow':\n return `<a:glow rad=\"${e.rad}\">${serializeDmlColor(e.color)}</a:glow>`;\n case 'innerShdw': {\n const a: string[] = [];\n if (e.blurRad !== undefined) a.push(`blurRad=\"${e.blurRad}\"`);\n if (e.dist !== undefined) a.push(`dist=\"${e.dist}\"`);\n if (e.dir !== undefined) a.push(`dir=\"${e.dir}\"`);\n return `<a:innerShdw${a.length > 0 ? ` ${a.join(' ')}` : ''}>${serializeDmlColor(e.color)}</a:innerShdw>`;\n }\n case 'outerShdw': {\n const a: string[] = [];\n if (e.blurRad !== undefined) a.push(`blurRad=\"${e.blurRad}\"`);\n if (e.dist !== undefined) a.push(`dist=\"${e.dist}\"`);\n if (e.dir !== undefined) a.push(`dir=\"${e.dir}\"`);\n if (e.sx !== undefined) a.push(`sx=\"${e.sx}\"`);\n if (e.sy !== undefined) a.push(`sy=\"${e.sy}\"`);\n if (e.kx !== undefined) a.push(`kx=\"${e.kx}\"`);\n if (e.ky !== undefined) a.push(`ky=\"${e.ky}\"`);\n if (e.algn) a.push(`algn=\"${e.algn}\"`);\n if (e.rotWithShape !== undefined) a.push(`rotWithShape=\"${e.rotWithShape ? '1' : '0'}\"`);\n return `<a:outerShdw${a.length > 0 ? ` ${a.join(' ')}` : ''}>${serializeDmlColor(e.color)}</a:outerShdw>`;\n }\n case 'prstShdw': {\n const a: string[] = [`prst=\"${e.prst}\"`];\n if (e.dist !== undefined) a.push(`dist=\"${e.dist}\"`);\n if (e.dir !== undefined) a.push(`dir=\"${e.dir}\"`);\n return `<a:prstShdw ${a.join(' ')}>${serializeDmlColor(e.color)}</a:prstShdw>`;\n }\n case 'reflection': {\n const a: string[] = [];\n if (e.blurRad !== undefined) a.push(`blurRad=\"${e.blurRad}\"`);\n if (e.stA !== undefined) a.push(`stA=\"${e.stA}\"`);\n if (e.stPos !== undefined) a.push(`stPos=\"${e.stPos}\"`);\n if (e.endA !== undefined) a.push(`endA=\"${e.endA}\"`);\n if (e.endPos !== undefined) a.push(`endPos=\"${e.endPos}\"`);\n if (e.dist !== undefined) a.push(`dist=\"${e.dist}\"`);\n if (e.dir !== undefined) a.push(`dir=\"${e.dir}\"`);\n if (e.fadeDir !== undefined) a.push(`fadeDir=\"${e.fadeDir}\"`);\n if (e.sx !== undefined) a.push(`sx=\"${e.sx}\"`);\n if (e.sy !== undefined) a.push(`sy=\"${e.sy}\"`);\n if (e.kx !== undefined) a.push(`kx=\"${e.kx}\"`);\n if (e.ky !== undefined) a.push(`ky=\"${e.ky}\"`);\n if (e.algn) a.push(`algn=\"${e.algn}\"`);\n if (e.rotWithShape !== undefined) a.push(`rotWithShape=\"${e.rotWithShape ? '1' : '0'}\"`);\n return `<a:reflection${a.length > 0 ? ` ${a.join(' ')}` : ''}/>`;\n }\n case 'softEdge':\n return `<a:softEdge rad=\"${e.rad}\"/>`;\n }\n};\n\nconst serializeEffectContainer = (c: EffectContainer): string => {\n const a: string[] = [`type=\"${c.type}\"`];\n if (c.name !== undefined) a.push(`name=\"${escapeAttr(c.name)}\"`);\n const inner = c.children\n .map((child) =>\n 'kind' in child ? serializeEffectLeaf(child as Effect) : serializeEffectContainer(child as EffectContainer),\n )\n .join('');\n return `<a:cont ${a.join(' ')}>${inner}</a:cont>`;\n};\n\nexport const serializeEffects = (e: EffectsRef): string => {\n if (e.kind === 'lst') {\n if (e.list.list.length === 0) return '<a:effectLst/>';\n return `<a:effectLst>${e.list.list.map(serializeEffectLeaf).join('')}</a:effectLst>`;\n }\n if (e.children.length === 0) return '<a:effectDag/>';\n const inner = e.children\n .map((child) =>\n 'kind' in child ? serializeEffectLeaf(child as Effect) : serializeEffectContainer(child as EffectContainer),\n )\n .join('');\n return `<a:effectDag>${inner}</a:effectDag>`;\n};\n\n// ---- Text ------------------------------------------------------------------\n\nconst VALID_UNDERLINE: ReadonlyArray<string> = [\n 'none',\n 'words',\n 'sng',\n 'dbl',\n 'heavy',\n 'dotted',\n 'dottedHeavy',\n 'dash',\n 'dashHeavy',\n 'dashLong',\n 'dashLongHeavy',\n 'dotDash',\n 'dotDashHeavy',\n 'dotDotDash',\n 'dotDotDashHeavy',\n 'wavy',\n 'wavyHeavy',\n 'wavyDbl',\n];\nconst VALID_STRIKE: ReadonlyArray<string> = ['noStrike', 'sngStrike', 'dblStrike'];\nconst VALID_TEXT_CAP: ReadonlyArray<string> = ['none', 'small', 'all'];\nconst VALID_PARA_ALIGN: ReadonlyArray<string> = ['l', 'ctr', 'r', 'just', 'justLow', 'dist', 'thaiDist'];\nconst VALID_FONT_ALIGN: ReadonlyArray<string> = ['auto', 't', 'ctr', 'base', 'b'];\nconst VALID_TEXT_OVERFLOW: ReadonlyArray<string> = ['overflow', 'ellipsis', 'clip'];\nconst VALID_HORZ_OVERFLOW: ReadonlyArray<string> = ['overflow', 'clip'];\nconst VALID_VERTICAL: ReadonlyArray<string> = [\n 'horz',\n 'vert',\n 'vert270',\n 'wordArtVert',\n 'eaVert',\n 'mongolianVert',\n 'wordArtVertRtl',\n];\nconst VALID_WRAP: ReadonlyArray<string> = ['none', 'square'];\nconst VALID_ANCHOR: ReadonlyArray<string> = ['t', 'ctr', 'b', 'just', 'dist'];\nconst VALID_TAB_ALGN: ReadonlyArray<string> = ['l', 'ctr', 'r', 'dec'];\n\nconst parseTextFont = (el: XmlNode): TextFont => {\n const out: TextFont = { typeface: el.attrs['typeface'] ?? '' };\n if (el.attrs['panose'] !== undefined) out.panose = el.attrs['panose'];\n const pf = intAttr(el, 'pitchFamily');\n if (pf !== undefined) out.pitchFamily = pf;\n const cs = intAttr(el, 'charset');\n if (cs !== undefined) out.charset = cs;\n return out;\n};\n\nconst serializeTextFont = (tag: string, f: TextFont): string => {\n const a: string[] = [`typeface=\"${escapeAttr(f.typeface)}\"`];\n if (f.panose !== undefined) a.push(`panose=\"${escapeAttr(f.panose)}\"`);\n if (f.pitchFamily !== undefined) a.push(`pitchFamily=\"${f.pitchFamily}\"`);\n if (f.charset !== undefined) a.push(`charset=\"${f.charset}\"`);\n return `<${tag} ${a.join(' ')}/>`;\n};\n\nconst parseHyperlinkInfo = (el: XmlNode): HyperlinkInfo => {\n const out: HyperlinkInfo = {};\n const r = el.attrs[`{${REL_NS}}id`];\n if (r !== undefined) out.rId = r;\n if (el.attrs['invalidUrl'] !== undefined) out.invalidUrl = el.attrs['invalidUrl'];\n if (el.attrs['action'] !== undefined) out.action = el.attrs['action'];\n if (el.attrs['tgtFrame'] !== undefined) out.tgtFrame = el.attrs['tgtFrame'];\n if (el.attrs['tooltip'] !== undefined) out.tooltip = el.attrs['tooltip'];\n const history = boolAttr(el, 'history');\n const highlightClick = boolAttr(el, 'highlightClick');\n const endSnd = boolAttr(el, 'endSnd');\n if (history !== undefined) out.history = history;\n if (highlightClick !== undefined) out.highlightClick = highlightClick;\n if (endSnd !== undefined) out.endSnd = endSnd;\n return out;\n};\n\nconst serializeHyperlinkInfo = (tag: string, h: HyperlinkInfo): string => {\n const a: string[] = [];\n if (h.rId !== undefined) a.push(`r:id=\"${escapeAttr(h.rId)}\"`);\n if (h.invalidUrl !== undefined) a.push(`invalidUrl=\"${escapeAttr(h.invalidUrl)}\"`);\n if (h.action !== undefined) a.push(`action=\"${escapeAttr(h.action)}\"`);\n if (h.tgtFrame !== undefined) a.push(`tgtFrame=\"${escapeAttr(h.tgtFrame)}\"`);\n if (h.tooltip !== undefined) a.push(`tooltip=\"${escapeAttr(h.tooltip)}\"`);\n if (h.history !== undefined) a.push(`history=\"${h.history ? '1' : '0'}\"`);\n if (h.highlightClick !== undefined) a.push(`highlightClick=\"${h.highlightClick ? '1' : '0'}\"`);\n if (h.endSnd !== undefined) a.push(`endSnd=\"${h.endSnd ? '1' : '0'}\"`);\n return `<${tag}${a.length > 0 ? ` ${a.join(' ')}` : ''}/>`;\n};\n\nconst parseTextSpacing = (el: XmlNode): TextSpacing | undefined => {\n const pct = findChild(el, A('spcPct'));\n if (pct) {\n const v = intAttr(pct, 'val');\n if (v !== undefined) return { kind: 'pct', val: v };\n }\n const pts = findChild(el, A('spcPts'));\n if (pts) {\n const v = intAttr(pts, 'val');\n if (v !== undefined) return { kind: 'pts', val: v };\n }\n return undefined;\n};\n\nconst serializeTextSpacing = (tag: string, s: TextSpacing): string =>\n s.kind === 'pct' ? `<${tag}><a:spcPct val=\"${s.val}\"/></${tag}>` : `<${tag}><a:spcPts val=\"${s.val}\"/></${tag}>`;\n\nconst parseRunProperties = (el: XmlNode): RunProperties => {\n const out: RunProperties = {};\n const a = el.attrs;\n const kumimoji = boolAttr(el, 'kumimoji');\n if (kumimoji !== undefined) out.kumimoji = kumimoji;\n if (a['lang'] !== undefined) out.lang = a['lang'];\n if (a['altLang'] !== undefined) out.altLang = a['altLang'];\n const sz = intAttr(el, 'sz');\n if (sz !== undefined) out.sz = sz;\n const b = boolAttr(el, 'b');\n if (b !== undefined) out.b = b;\n const i = boolAttr(el, 'i');\n if (i !== undefined) out.i = i;\n const u = a['u'];\n if (u && VALID_UNDERLINE.includes(u)) out.u = u as TextUnderline;\n const strike = a['strike'];\n if (strike && VALID_STRIKE.includes(strike)) out.strike = strike as TextStrike;\n const kern = intAttr(el, 'kern');\n if (kern !== undefined) out.kern = kern;\n const cap = a['cap'];\n if (cap && VALID_TEXT_CAP.includes(cap)) out.cap = cap as TextCap;\n const spc = intAttr(el, 'spc');\n if (spc !== undefined) out.spc = spc;\n const normalizeH = boolAttr(el, 'normalizeH');\n if (normalizeH !== undefined) out.normalizeH = normalizeH;\n const baseline = intAttr(el, 'baseline');\n if (baseline !== undefined) out.baseline = baseline;\n const noProof = boolAttr(el, 'noProof');\n if (noProof !== undefined) out.noProof = noProof;\n const dirty = boolAttr(el, 'dirty');\n if (dirty !== undefined) out.dirty = dirty;\n const err = boolAttr(el, 'err');\n if (err !== undefined) out.err = err;\n const smtClean = boolAttr(el, 'smtClean');\n if (smtClean !== undefined) out.smtClean = smtClean;\n const smtId = intAttr(el, 'smtId');\n if (smtId !== undefined) out.smtId = smtId;\n if (a['bmk'] !== undefined) out.bmk = a['bmk'];\n // The `rtl` attribute is on rPr per ECMA-376. Some files keep rtl on pPr; we\n // accept both.\n const rtl = boolAttr(el, 'rtl');\n if (rtl !== undefined) out.rtl = rtl;\n // Nested elements.\n const lnEl = findChild(el, A('ln'));\n if (lnEl) out.ln = parseLine(lnEl);\n const fill = parseFill(el);\n if (fill) out.fill = fill;\n const effects = parseEffects(el);\n if (effects) out.effects = effects;\n const highlight = findChild(el, A('highlight'));\n if (highlight) {\n const c = parseDmlColor(highlight);\n if (c) out.highlight = c;\n }\n // uLn / uLnTx\n if (findChild(el, A('uLnTx'))) out.uLn = 'follow';\n else {\n const uLn = findChild(el, A('uLn'));\n if (uLn) out.uLn = parseLine(uLn);\n }\n // uFill / uFillTx\n if (findChild(el, A('uFillTx'))) out.uFill = 'follow';\n else {\n const uFill = findChild(el, A('uFill'));\n if (uFill) {\n const f = parseFill(uFill);\n if (f) out.uFill = f;\n }\n }\n const latin = findChild(el, A('latin'));\n if (latin) out.latin = parseTextFont(latin);\n const ea = findChild(el, A('ea'));\n if (ea) out.ea = parseTextFont(ea);\n const cs = findChild(el, A('cs'));\n if (cs) out.cs = parseTextFont(cs);\n const sym = findChild(el, A('sym'));\n if (sym) out.sym = parseTextFont(sym);\n const hlinkClick = findChild(el, A('hlinkClick'));\n if (hlinkClick) out.hlinkClick = parseHyperlinkInfo(hlinkClick);\n const hlinkMouseOver = findChild(el, A('hlinkMouseOver'));\n if (hlinkMouseOver) out.hlinkMouseOver = parseHyperlinkInfo(hlinkMouseOver);\n return out;\n};\n\nconst serializeRunProperties = (tag: string, p: RunProperties): string => {\n const a: string[] = [];\n if (p.kumimoji !== undefined) a.push(`kumimoji=\"${p.kumimoji ? '1' : '0'}\"`);\n if (p.lang !== undefined) a.push(`lang=\"${escapeAttr(p.lang)}\"`);\n if (p.altLang !== undefined) a.push(`altLang=\"${escapeAttr(p.altLang)}\"`);\n if (p.sz !== undefined) a.push(`sz=\"${p.sz}\"`);\n if (p.b !== undefined) a.push(`b=\"${p.b ? '1' : '0'}\"`);\n if (p.i !== undefined) a.push(`i=\"${p.i ? '1' : '0'}\"`);\n if (p.u) a.push(`u=\"${p.u}\"`);\n if (p.strike) a.push(`strike=\"${p.strike}\"`);\n if (p.kern !== undefined) a.push(`kern=\"${p.kern}\"`);\n if (p.cap) a.push(`cap=\"${p.cap}\"`);\n if (p.spc !== undefined) a.push(`spc=\"${p.spc}\"`);\n if (p.normalizeH !== undefined) a.push(`normalizeH=\"${p.normalizeH ? '1' : '0'}\"`);\n if (p.baseline !== undefined) a.push(`baseline=\"${p.baseline}\"`);\n if (p.noProof !== undefined) a.push(`noProof=\"${p.noProof ? '1' : '0'}\"`);\n if (p.dirty !== undefined) a.push(`dirty=\"${p.dirty ? '1' : '0'}\"`);\n if (p.err !== undefined) a.push(`err=\"${p.err ? '1' : '0'}\"`);\n if (p.smtClean !== undefined) a.push(`smtClean=\"${p.smtClean ? '1' : '0'}\"`);\n if (p.smtId !== undefined) a.push(`smtId=\"${p.smtId}\"`);\n if (p.bmk !== undefined) a.push(`bmk=\"${escapeAttr(p.bmk)}\"`);\n if (p.rtl !== undefined) a.push(`rtl=\"${p.rtl ? '1' : '0'}\"`);\n const inner: string[] = [];\n if (p.ln) inner.push(serializeLine(p.ln));\n if (p.fill) inner.push(serializeFill(p.fill));\n if (p.effects) inner.push(serializeEffects(p.effects));\n if (p.highlight) inner.push(`<a:highlight>${serializeDmlColor(p.highlight)}</a:highlight>`);\n if (p.uLn === 'follow') inner.push('<a:uLnTx/>');\n else if (p.uLn) {\n // uLn re-uses the line schema with <a:uLn> wrapper. The serializeLine\n // helper emits <a:ln>; substitute the tag for uLn.\n inner.push(\n serializeLine(p.uLn)\n .replace(/^<a:ln/, '<a:uLn')\n .replace(/<\\/a:ln>$/, '</a:uLn>'),\n );\n }\n if (p.uFill === 'follow') inner.push('<a:uFillTx/>');\n else if (p.uFill) inner.push(`<a:uFill>${serializeFill(p.uFill)}</a:uFill>`);\n if (p.latin) inner.push(serializeTextFont('a:latin', p.latin));\n if (p.ea) inner.push(serializeTextFont('a:ea', p.ea));\n if (p.cs) inner.push(serializeTextFont('a:cs', p.cs));\n if (p.sym) inner.push(serializeTextFont('a:sym', p.sym));\n if (p.hlinkClick) inner.push(serializeHyperlinkInfo('a:hlinkClick', p.hlinkClick));\n if (p.hlinkMouseOver) inner.push(serializeHyperlinkInfo('a:hlinkMouseOver', p.hlinkMouseOver));\n const open = `<${tag}${a.length > 0 ? ` ${a.join(' ')}` : ''}`;\n return inner.length === 0 ? `${open}/>` : `${open}>${inner.join('')}</${tag}>`;\n};\n\nconst parseBullet = (el: XmlNode): BulletProperties | undefined => {\n if (findChild(el, A('buNone'))) return { kind: 'none' };\n const buChar = findChild(el, A('buChar'));\n if (buChar) return { kind: 'char', char: buChar.attrs['char'] ?? '' };\n const buAuto = findChild(el, A('buAutoNum'));\n if (buAuto) {\n const t = buAuto.attrs['type'] ?? 'arabicPlain';\n const startAt = intAttr(buAuto, 'startAt');\n return { kind: 'autoNum', type: t, ...(startAt !== undefined ? { startAt } : {}) };\n }\n const buBlip = findChild(el, A('buBlip'));\n if (buBlip) {\n const blip = findChild(buBlip, A('blip'));\n const out: BulletProperties = { kind: 'blip' };\n if (blip) {\n const e = blip.attrs[`{${REL_NS}}embed`];\n const l = blip.attrs[`{${REL_NS}}link`];\n if (e) (out as { embedRId?: string }).embedRId = e;\n if (l) (out as { linkRId?: string }).linkRId = l;\n }\n return out;\n }\n return undefined;\n};\n\nconst serializeBullet = (b: BulletProperties): string => {\n switch (b.kind) {\n case 'none':\n return '<a:buNone/>';\n case 'char':\n return `<a:buChar char=\"${escapeAttr(b.char)}\"/>`;\n case 'autoNum': {\n const sa = b.startAt !== undefined ? ` startAt=\"${b.startAt}\"` : '';\n return `<a:buAutoNum type=\"${b.type}\"${sa}/>`;\n }\n case 'blip': {\n const a: string[] = [];\n if (b.embedRId) a.push(`r:embed=\"${escapeAttr(b.embedRId)}\"`);\n if (b.linkRId) a.push(`r:link=\"${escapeAttr(b.linkRId)}\"`);\n return `<a:buBlip><a:blip${a.length > 0 ? ` ${a.join(' ')}` : ''}/></a:buBlip>`;\n }\n }\n};\n\nconst parseTabStops = (el: XmlNode): TabStop[] => {\n const out: TabStop[] = [];\n for (const t of findChildren(el, A('tab'))) {\n const pos = intAttr(t, 'pos');\n if (pos === undefined) continue;\n const algnRaw = t.attrs['algn'];\n const algn = algnRaw && VALID_TAB_ALGN.includes(algnRaw) ? (algnRaw as TabStop['algn']) : undefined;\n out.push({ pos, ...(algn ? { algn } : {}) });\n }\n return out;\n};\n\nconst parseParagraphProperties = (el: XmlNode): ParagraphProperties => {\n const out: ParagraphProperties = {};\n const marL = intAttr(el, 'marL');\n const marR = intAttr(el, 'marR');\n const lvl = intAttr(el, 'lvl');\n const indent = intAttr(el, 'indent');\n const algn = el.attrs['algn'];\n const defTabSz = intAttr(el, 'defTabSz');\n const rtl = boolAttr(el, 'rtl');\n const eaLnBrk = boolAttr(el, 'eaLnBrk');\n const fontAlgn = el.attrs['fontAlgn'];\n const latinLnBrk = boolAttr(el, 'latinLnBrk');\n const hangingPunct = boolAttr(el, 'hangingPunct');\n if (marL !== undefined) out.marL = marL;\n if (marR !== undefined) out.marR = marR;\n if (lvl !== undefined) out.lvl = lvl;\n if (indent !== undefined) out.indent = indent;\n if (algn && VALID_PARA_ALIGN.includes(algn)) out.algn = algn as ParagraphAlign;\n if (defTabSz !== undefined) out.defTabSz = defTabSz;\n if (rtl !== undefined) out.rtl = rtl;\n if (eaLnBrk !== undefined) out.eaLnBrk = eaLnBrk;\n if (fontAlgn && VALID_FONT_ALIGN.includes(fontAlgn)) out.fontAlgn = fontAlgn as FontAlign;\n if (latinLnBrk !== undefined) out.latinLnBrk = latinLnBrk;\n if (hangingPunct !== undefined) out.hangingPunct = hangingPunct;\n const lnSpc = findChild(el, A('lnSpc'));\n if (lnSpc) {\n const s = parseTextSpacing(lnSpc);\n if (s) out.lnSpc = s;\n }\n const spcBef = findChild(el, A('spcBef'));\n if (spcBef) {\n const s = parseTextSpacing(spcBef);\n if (s) out.spcBef = s;\n }\n const spcAft = findChild(el, A('spcAft'));\n if (spcAft) {\n const s = parseTextSpacing(spcAft);\n if (s) out.spcAft = s;\n }\n const tabLst = findChild(el, A('tabLst'));\n if (tabLst) {\n const tabs = parseTabStops(tabLst);\n if (tabs.length > 0) out.tabLst = tabs;\n }\n const defRPr = findChild(el, A('defRPr'));\n if (defRPr) out.defRPr = parseRunProperties(defRPr);\n const bullet = parseBullet(el);\n if (bullet) out.bullet = bullet;\n // buFont / buFontTx\n if (findChild(el, A('buFontTx'))) out.buFont = 'follow';\n else {\n const buFont = findChild(el, A('buFont'));\n if (buFont) out.buFont = parseTextFont(buFont);\n }\n // buClr / buClrTx\n if (findChild(el, A('buClrTx'))) out.buClr = 'follow';\n else {\n const buClr = findChild(el, A('buClr'));\n if (buClr) {\n const c = parseDmlColor(buClr);\n if (c) out.buClr = c;\n }\n }\n // buSzTx / buSzPct / buSzPts\n if (findChild(el, A('buSzTx'))) out.buSz = 'follow';\n else {\n const buSzPct = findChild(el, A('buSzPct'));\n const buSzPts = findChild(el, A('buSzPts'));\n if (buSzPct) {\n const v = intAttr(buSzPct, 'val');\n if (v !== undefined) out.buSz = { kind: 'pct', val: v };\n } else if (buSzPts) {\n const v = intAttr(buSzPts, 'val');\n if (v !== undefined) out.buSz = { kind: 'pts', val: v };\n }\n }\n return out;\n};\n\nconst serializeTabStops = (tabs: TabStop[]): string => {\n const inner = tabs.map((t) => `<a:tab pos=\"${t.pos}\"${t.algn ? ` algn=\"${t.algn}\"` : ''}/>`).join('');\n return `<a:tabLst>${inner}</a:tabLst>`;\n};\n\nconst serializeParagraphProperties = (tag: string, p: ParagraphProperties): string => {\n const a: string[] = [];\n if (p.marL !== undefined) a.push(`marL=\"${p.marL}\"`);\n if (p.marR !== undefined) a.push(`marR=\"${p.marR}\"`);\n if (p.lvl !== undefined) a.push(`lvl=\"${p.lvl}\"`);\n if (p.indent !== undefined) a.push(`indent=\"${p.indent}\"`);\n if (p.algn) a.push(`algn=\"${p.algn}\"`);\n if (p.defTabSz !== undefined) a.push(`defTabSz=\"${p.defTabSz}\"`);\n if (p.rtl !== undefined) a.push(`rtl=\"${p.rtl ? '1' : '0'}\"`);\n if (p.eaLnBrk !== undefined) a.push(`eaLnBrk=\"${p.eaLnBrk ? '1' : '0'}\"`);\n if (p.fontAlgn) a.push(`fontAlgn=\"${p.fontAlgn}\"`);\n if (p.latinLnBrk !== undefined) a.push(`latinLnBrk=\"${p.latinLnBrk ? '1' : '0'}\"`);\n if (p.hangingPunct !== undefined) a.push(`hangingPunct=\"${p.hangingPunct ? '1' : '0'}\"`);\n const inner: string[] = [];\n if (p.lnSpc) inner.push(serializeTextSpacing('a:lnSpc', p.lnSpc));\n if (p.spcBef) inner.push(serializeTextSpacing('a:spcBef', p.spcBef));\n if (p.spcAft) inner.push(serializeTextSpacing('a:spcAft', p.spcAft));\n if (p.buClr === 'follow') inner.push('<a:buClrTx/>');\n else if (p.buClr) inner.push(`<a:buClr>${serializeDmlColor(p.buClr)}</a:buClr>`);\n if (p.buSz === 'follow') inner.push('<a:buSzTx/>');\n else if (p.buSz?.kind === 'pct') inner.push(`<a:buSzPct val=\"${p.buSz.val}\"/>`);\n else if (p.buSz?.kind === 'pts') inner.push(`<a:buSzPts val=\"${p.buSz.val}\"/>`);\n if (p.buFont === 'follow') inner.push('<a:buFontTx/>');\n else if (p.buFont) inner.push(serializeTextFont('a:buFont', p.buFont));\n if (p.bullet) inner.push(serializeBullet(p.bullet));\n if (p.tabLst && p.tabLst.length > 0) inner.push(serializeTabStops(p.tabLst));\n if (p.defRPr) inner.push(serializeRunProperties('a:defRPr', p.defRPr));\n const open = `<${tag}${a.length > 0 ? ` ${a.join(' ')}` : ''}`;\n return inner.length === 0 ? `${open}/>` : `${open}>${inner.join('')}</${tag}>`;\n};\n\nconst parseTextRun = (el: XmlNode): TextRun | undefined => {\n const local = el.name.split('}').pop() ?? el.name;\n if (local === 'r') {\n const rPrEl = findChild(el, A('rPr'));\n const tEl = findChild(el, A('t'));\n return {\n kind: 'r',\n ...(rPrEl ? { rPr: parseRunProperties(rPrEl) } : {}),\n t: tEl?.text ?? '',\n };\n }\n if (local === 'br') {\n const rPrEl = findChild(el, A('rPr'));\n return { kind: 'br', ...(rPrEl ? { rPr: parseRunProperties(rPrEl) } : {}) };\n }\n if (local === 'fld') {\n const id = el.attrs['id'] ?? '';\n const t = el.attrs['type'];\n const rPrEl = findChild(el, A('rPr'));\n const pPrEl = findChild(el, A('pPr'));\n const tEl = findChild(el, A('t'));\n return {\n kind: 'fld',\n id,\n ...(t !== undefined ? { type: t } : {}),\n ...(rPrEl ? { rPr: parseRunProperties(rPrEl) } : {}),\n ...(pPrEl ? { pPr: parseParagraphProperties(pPrEl) } : {}),\n ...(tEl?.text !== undefined ? { t: tEl.text } : {}),\n };\n }\n return undefined;\n};\n\nconst serializeTextRun = (r: TextRun): string => {\n switch (r.kind) {\n case 'r': {\n const rPr = r.rPr ? serializeRunProperties('a:rPr', r.rPr) : '';\n return `<a:r>${rPr}<a:t>${escapeText(r.t)}</a:t></a:r>`;\n }\n case 'br': {\n const rPr = r.rPr ? serializeRunProperties('a:rPr', r.rPr) : '';\n return rPr === '' ? '<a:br/>' : `<a:br>${rPr}</a:br>`;\n }\n case 'fld': {\n const a: string[] = [`id=\"${escapeAttr(r.id)}\"`];\n if (r.type !== undefined) a.push(`type=\"${escapeAttr(r.type)}\"`);\n const rPr = r.rPr ? serializeRunProperties('a:rPr', r.rPr) : '';\n const pPr = r.pPr ? serializeParagraphProperties('a:pPr', r.pPr) : '';\n const t = r.t !== undefined ? `<a:t>${escapeText(r.t)}</a:t>` : '';\n return `<a:fld ${a.join(' ')}>${rPr}${pPr}${t}</a:fld>`;\n }\n }\n};\n\nconst parseTextParagraph = (el: XmlNode): TextParagraph => {\n const out: TextParagraph = { runs: [] };\n const pPrEl = findChild(el, A('pPr'));\n if (pPrEl) out.pPr = parseParagraphProperties(pPrEl);\n for (const c of el.children) {\n if (typeof c === 'string') continue;\n const local = c.name.split('}').pop() ?? c.name;\n if (local === 'r' || local === 'br' || local === 'fld') {\n const run = parseTextRun(c);\n if (run) out.runs.push(run);\n }\n }\n const endEl = findChild(el, A('endParaRPr'));\n if (endEl) out.endParaRPr = parseRunProperties(endEl);\n return out;\n};\n\nconst serializeTextParagraph = (p: TextParagraph): string => {\n const parts: string[] = ['<a:p>'];\n if (p.pPr) parts.push(serializeParagraphProperties('a:pPr', p.pPr));\n for (const r of p.runs) parts.push(serializeTextRun(r));\n if (p.endParaRPr) parts.push(serializeRunProperties('a:endParaRPr', p.endParaRPr));\n parts.push('</a:p>');\n return parts.join('');\n};\n\nconst parseAutoFit = (el: XmlNode): AutoFit | undefined => {\n if (findChild(el, A('noAutofit'))) return { kind: 'noAutofit' };\n const norm = findChild(el, A('normAutofit'));\n if (norm) {\n const fontScale = intAttr(norm, 'fontScale');\n const lnSpcReduction = intAttr(norm, 'lnSpcReduction');\n return {\n kind: 'normAutofit',\n ...(fontScale !== undefined ? { fontScale } : {}),\n ...(lnSpcReduction !== undefined ? { lnSpcReduction } : {}),\n };\n }\n if (findChild(el, A('spAutoFit'))) return { kind: 'spAutoFit' };\n return undefined;\n};\n\nconst serializeAutoFit = (a: AutoFit): string => {\n switch (a.kind) {\n case 'noAutofit':\n return '<a:noAutofit/>';\n case 'spAutoFit':\n return '<a:spAutoFit/>';\n case 'normAutofit': {\n const attrs: string[] = [];\n if (a.fontScale !== undefined) attrs.push(`fontScale=\"${a.fontScale}\"`);\n if (a.lnSpcReduction !== undefined) attrs.push(`lnSpcReduction=\"${a.lnSpcReduction}\"`);\n return `<a:normAutofit${attrs.length > 0 ? ` ${attrs.join(' ')}` : ''}/>`;\n }\n }\n};\n\nexport const parseTextBodyProperties = (el: XmlNode): TextBodyProperties => {\n const out: TextBodyProperties = {};\n const rot = intAttr(el, 'rot');\n if (rot !== undefined) out.rot = rot;\n const spcFirstLastPara = boolAttr(el, 'spcFirstLastPara');\n if (spcFirstLastPara !== undefined) out.spcFirstLastPara = spcFirstLastPara;\n const vo = el.attrs['vertOverflow'];\n if (vo && VALID_TEXT_OVERFLOW.includes(vo)) out.vertOverflow = vo as TextOverflow;\n const ho = el.attrs['horzOverflow'];\n if (ho && VALID_HORZ_OVERFLOW.includes(ho)) out.horzOverflow = ho as TextHorzOverflow;\n const v = el.attrs['vert'];\n if (v && VALID_VERTICAL.includes(v)) out.vert = v as TextVertical;\n const w = el.attrs['wrap'];\n if (w && VALID_WRAP.includes(w)) out.wrap = w as TextWrap;\n const lIns = intAttr(el, 'lIns');\n const tIns = intAttr(el, 'tIns');\n const rIns = intAttr(el, 'rIns');\n const bIns = intAttr(el, 'bIns');\n const numCol = intAttr(el, 'numCol');\n const spcCol = intAttr(el, 'spcCol');\n if (lIns !== undefined) out.lIns = lIns;\n if (tIns !== undefined) out.tIns = tIns;\n if (rIns !== undefined) out.rIns = rIns;\n if (bIns !== undefined) out.bIns = bIns;\n if (numCol !== undefined) out.numCol = numCol;\n if (spcCol !== undefined) out.spcCol = spcCol;\n const rtlCol = boolAttr(el, 'rtlCol');\n const fromWordArt = boolAttr(el, 'fromWordArt');\n if (rtlCol !== undefined) out.rtlCol = rtlCol;\n if (fromWordArt !== undefined) out.fromWordArt = fromWordArt;\n const anchor = el.attrs['anchor'];\n if (anchor && VALID_ANCHOR.includes(anchor)) out.anchor = anchor as TextAnchor;\n const anchorCtr = boolAttr(el, 'anchorCtr');\n const forceAA = boolAttr(el, 'forceAA');\n const upright = boolAttr(el, 'upright');\n const compatLnSpc = boolAttr(el, 'compatLnSpc');\n if (anchorCtr !== undefined) out.anchorCtr = anchorCtr;\n if (forceAA !== undefined) out.forceAA = forceAA;\n if (upright !== undefined) out.upright = upright;\n if (compatLnSpc !== undefined) out.compatLnSpc = compatLnSpc;\n const af = parseAutoFit(el);\n if (af) out.autoFit = af;\n const flatTx = findChild(el, A('flatTx'));\n if (flatTx) {\n const z = intAttr(flatTx, 'z');\n if (z !== undefined) out.flatTxZ = z;\n }\n return out;\n};\n\nexport const serializeTextBodyProperties = (tag: string, p: TextBodyProperties): string => {\n const a: string[] = [];\n if (p.rot !== undefined) a.push(`rot=\"${p.rot}\"`);\n if (p.spcFirstLastPara !== undefined) a.push(`spcFirstLastPara=\"${p.spcFirstLastPara ? '1' : '0'}\"`);\n if (p.vertOverflow) a.push(`vertOverflow=\"${p.vertOverflow}\"`);\n if (p.horzOverflow) a.push(`horzOverflow=\"${p.horzOverflow}\"`);\n if (p.vert) a.push(`vert=\"${p.vert}\"`);\n if (p.wrap) a.push(`wrap=\"${p.wrap}\"`);\n if (p.lIns !== undefined) a.push(`lIns=\"${p.lIns}\"`);\n if (p.tIns !== undefined) a.push(`tIns=\"${p.tIns}\"`);\n if (p.rIns !== undefined) a.push(`rIns=\"${p.rIns}\"`);\n if (p.bIns !== undefined) a.push(`bIns=\"${p.bIns}\"`);\n if (p.numCol !== undefined) a.push(`numCol=\"${p.numCol}\"`);\n if (p.spcCol !== undefined) a.push(`spcCol=\"${p.spcCol}\"`);\n if (p.rtlCol !== undefined) a.push(`rtlCol=\"${p.rtlCol ? '1' : '0'}\"`);\n if (p.fromWordArt !== undefined) a.push(`fromWordArt=\"${p.fromWordArt ? '1' : '0'}\"`);\n if (p.anchor) a.push(`anchor=\"${p.anchor}\"`);\n if (p.anchorCtr !== undefined) a.push(`anchorCtr=\"${p.anchorCtr ? '1' : '0'}\"`);\n if (p.forceAA !== undefined) a.push(`forceAA=\"${p.forceAA ? '1' : '0'}\"`);\n if (p.upright !== undefined) a.push(`upright=\"${p.upright ? '1' : '0'}\"`);\n if (p.compatLnSpc !== undefined) a.push(`compatLnSpc=\"${p.compatLnSpc ? '1' : '0'}\"`);\n const inner: string[] = [];\n if (p.autoFit) inner.push(serializeAutoFit(p.autoFit));\n if (p.flatTxZ !== undefined) inner.push(`<a:flatTx z=\"${p.flatTxZ}\"/>`);\n const open = `<${tag}${a.length > 0 ? ` ${a.join(' ')}` : ''}`;\n return inner.length === 0 ? `${open}/>` : `${open}>${inner.join('')}</${tag}>`;\n};\n\nconst LIST_STYLE_LEVELS: ReadonlyArray<keyof TextListStyle> = [\n 'defPPr',\n 'lvl1pPr',\n 'lvl2pPr',\n 'lvl3pPr',\n 'lvl4pPr',\n 'lvl5pPr',\n 'lvl6pPr',\n 'lvl7pPr',\n 'lvl8pPr',\n 'lvl9pPr',\n];\n\nconst parseListStyle = (el: XmlNode): TextListStyle => {\n const out: TextListStyle = {};\n for (const lvl of LIST_STYLE_LEVELS) {\n const child = findChild(el, A(lvl));\n if (child) out[lvl] = parseParagraphProperties(child);\n }\n return out;\n};\n\nconst serializeListStyle = (l: TextListStyle): string => {\n const parts: string[] = ['<a:lstStyle>'];\n for (const lvl of LIST_STYLE_LEVELS) {\n const pp = l[lvl];\n if (pp) parts.push(serializeParagraphProperties(`a:${lvl}`, pp));\n }\n parts.push('</a:lstStyle>');\n return parts.join('');\n};\n\n/** Parse an `<a:txBody>` (or `<c:txPr>` / `<cdr:txBody>`) element. */\nexport const parseTextBody = (el: XmlNode): TextBody => {\n const bodyPrEl = findChild(el, A('bodyPr'));\n const bodyPr = bodyPrEl ? parseTextBodyProperties(bodyPrEl) : {};\n const lstStyleEl = findChild(el, A('lstStyle'));\n const lstStyle = lstStyleEl ? parseListStyle(lstStyleEl) : undefined;\n // Excel emits a bare `<a:lstStyle/>` even when no level overrides are set;\n // treat that as absent so round-trip equality holds for `lstStyle:\n // undefined`.\n const lstStyleHasContent = lstStyle && Object.keys(lstStyle).length > 0;\n const paragraphs: TextParagraph[] = [];\n for (const p of findChildren(el, A('p'))) paragraphs.push(parseTextParagraph(p));\n return { bodyPr, ...(lstStyleHasContent ? { lstStyle } : {}), paragraphs };\n};\n\n/** Serialise a TextBody. Wrapper defaults to `<c:txPr>` to match chart usage. */\nexport const serializeTextBody = (body: TextBody, wrapperTag = 'c:txPr'): string => {\n const parts: string[] = [`<${wrapperTag}>`];\n parts.push(serializeTextBodyProperties('a:bodyPr', body.bodyPr));\n if (body.lstStyle) parts.push(serializeListStyle(body.lstStyle));\n else parts.push('<a:lstStyle/>');\n for (const p of body.paragraphs) parts.push(serializeTextParagraph(p));\n parts.push(`</${wrapperTag}>`);\n return parts.join('');\n};\n\n// ---- ShapeProperties -------------------------------------------------------\n\nconst VALID_BWMODE: ReadonlyArray<string> = [\n 'clr',\n 'auto',\n 'gray',\n 'ltGray',\n 'invGray',\n 'grayWhite',\n 'blackGray',\n 'blackWhite',\n 'black',\n 'white',\n 'hidden',\n];\n\nconst parsePoint = (el: XmlNode): Point2D => ({\n x: intAttr(el, 'x') ?? 0,\n y: intAttr(el, 'y') ?? 0,\n});\n\nconst parseExt = (el: XmlNode): PositiveSize2D => ({\n cx: intAttr(el, 'cx') ?? 0,\n cy: intAttr(el, 'cy') ?? 0,\n});\n\nconst parseTransform2D = (el: XmlNode): Transform2D => {\n const out: Transform2D = {};\n const off = findChild(el, A('off'));\n const ext = findChild(el, A('ext'));\n const chOff = findChild(el, A('chOff'));\n const chExt = findChild(el, A('chExt'));\n if (off) out.off = parsePoint(off);\n if (ext) out.ext = parseExt(ext);\n if (chOff) out.chOff = parsePoint(chOff);\n if (chExt) out.chExt = parseExt(chExt);\n const rot = intAttr(el, 'rot');\n const flipH = boolAttr(el, 'flipH');\n const flipV = boolAttr(el, 'flipV');\n if (rot !== undefined) out.rot = rot;\n if (flipH !== undefined) out.flipH = flipH;\n if (flipV !== undefined) out.flipV = flipV;\n return out;\n};\n\nconst serializeTransform2D = (x: Transform2D): string => {\n const a: string[] = [];\n if (x.rot !== undefined) a.push(`rot=\"${x.rot}\"`);\n if (x.flipH !== undefined) a.push(`flipH=\"${x.flipH ? '1' : '0'}\"`);\n if (x.flipV !== undefined) a.push(`flipV=\"${x.flipV ? '1' : '0'}\"`);\n const parts: string[] = [`<a:xfrm${a.length > 0 ? ` ${a.join(' ')}` : ''}>`];\n if (x.off) parts.push(`<a:off x=\"${x.off.x}\" y=\"${x.off.y}\"/>`);\n if (x.ext) parts.push(`<a:ext cx=\"${x.ext.cx}\" cy=\"${x.ext.cy}\"/>`);\n if (x.chOff) parts.push(`<a:chOff x=\"${x.chOff.x}\" y=\"${x.chOff.y}\"/>`);\n if (x.chExt) parts.push(`<a:chExt cx=\"${x.chExt.cx}\" cy=\"${x.chExt.cy}\"/>`);\n parts.push('</a:xfrm>');\n return parts.join('');\n};\n\n/**\n * Parse a `<spPr>` (or `<c:spPr>` / `<cdr:spPr>`) element. Caller provides the\n * element directly — we don't filter by tag name so the helper works for any\n * namespace prefix.\n */\nexport const parseShapeProperties = (el: XmlNode): ShapeProperties => {\n const out: ShapeProperties = {};\n const bwModeRaw = el.attrs['bwMode'];\n if (bwModeRaw && VALID_BWMODE.includes(bwModeRaw)) out.bwMode = bwModeRaw as BlackWhiteMode;\n const xfrm = findChild(el, A('xfrm'));\n if (xfrm) out.xfrm = parseTransform2D(xfrm);\n const geom = parseGeometry(el);\n if (geom) out.geometry = geom;\n const fill = parseFill(el);\n if (fill) out.fill = fill;\n const ln = findChild(el, A('ln'));\n if (ln) out.ln = parseLine(ln);\n const effects = parseEffects(el);\n if (effects) out.effects = effects;\n return out;\n};\n\n/** Serialize a ShapeProperties as `<wrapper>...</wrapper>`. Wrapper defaults to `<c:spPr>`. */\nexport const serializeShapeProperties = (sp: ShapeProperties, wrapperTag = 'c:spPr'): string => {\n const a: string[] = [];\n if (sp.bwMode) a.push(`bwMode=\"${sp.bwMode}\"`);\n const parts: string[] = [`<${wrapperTag}${a.length > 0 ? ` ${a.join(' ')}` : ''}>`];\n if (sp.xfrm) parts.push(serializeTransform2D(sp.xfrm));\n if (sp.geometry) parts.push(serializeGeometry(sp.geometry));\n if (sp.fill) parts.push(serializeFill(sp.fill));\n if (sp.ln) parts.push(serializeLine(sp.ln));\n if (sp.effects) parts.push(serializeEffects(sp.effects));\n parts.push(`</${wrapperTag}>`);\n return parts.join('');\n};\n\n","// xl/charts/chartN.xml read/write.\n//\n// Stage-1 covers BarChart end-to-end: parse + serialize with title / legend /\n// catAx / valAx / series (cat + val refs + numCache / strCache). Other chart\n// kinds slot in alongside as their own `<c:lineChart>` / `<c:pieChart>` / etc.\n// parsers.\n\nimport {\n parseShapeProperties,\n parseTextBody,\n serializeShapeProperties,\n serializeTextBody,\n} from '../drawing/dml/dml-xml';\nimport type { ShapeProperties } from '../drawing/dml/shape-properties';\nimport type { TextBody } from '../drawing/dml/text';\nimport { escapeXmlText } from '../utils/escape';\nimport { OpenXmlSchemaError } from '../utils/exceptions';\nimport { CHART_NS, REL_NS, SHEET_DRAWING_NS } from '../xml/namespaces';\nimport { parseXml } from '../xml/parser';\nimport { findChild, findChildren, type XmlNode } from '../xml/tree';\nimport {\n type Area3DChart,\n type AreaChart,\n type Bar3DChart,\n type BarChart,\n type BarDirection,\n type BarSeries,\n type BubbleChart,\n type BubbleSeries,\n type BubbleSizeRepresents,\n type AxisCrossBetween,\n type AxisCrosses,\n type AxisOrientation,\n type AxisScaling,\n type CategoryAxis,\n type CategoryLabelAlignment,\n type DateAxis,\n type SeriesAxis,\n type TimeUnit,\n type CategoryRef,\n type ChartKind,\n type ChartSpace,\n type ChartTitle,\n type DataLabel,\n type DataLabelList,\n type DataLabelPosition,\n type DoughnutChart,\n type ErrorBarDirection,\n type ErrorBars,\n type ErrorBarType,\n type ErrorValType,\n type Gridlines,\n type GroupingType,\n type Legend,\n type LegendPosition,\n type Line3DChart,\n type LineChart,\n type LineSeries,\n type Marker,\n type MarkerSymbol,\n type DataPoint,\n type HiLowLines,\n type Layout,\n type LayoutMode,\n type LayoutTarget,\n type ManualLayout,\n type UpDownBars,\n makeArea3DChart,\n makeAreaChart,\n makeBar3DChart,\n makeBarChart,\n makeBarSeries,\n makeBubbleChart,\n makeBubbleSeries,\n makeChartSpace,\n makeDoughnutChart,\n makeLine3DChart,\n makeLineChart,\n makeOfPieChart,\n makePie3DChart,\n makePieChart,\n makeRadarChart,\n makeScatterChart,\n makeScatterSeries,\n makeStockChart,\n makeSurface3DChart,\n makeSurfaceChart,\n type ChartNumberFormat,\n type NumericRef,\n type OfPieChart,\n type OfPieType,\n type Pie3DChart,\n type PieChart,\n type PlotArea,\n type RadarChart,\n type RadarStyle,\n type ScatterChart,\n type ScatterSeries,\n type ScatterStyle,\n type SplitType,\n type StockChart,\n type Surface3DChart,\n type SurfaceChart,\n type SurfaceFrame,\n type TickLabelPosition,\n type TickMark,\n type Trendline,\n type TrendlineType,\n type ValueAxis,\n type View3D,\n} from './chart';\n\nconst CHART_SPACE_TAG = `{${CHART_NS}}chartSpace`;\nconst CHART_TAG = `{${CHART_NS}}chart`;\nconst TITLE_TAG = `{${CHART_NS}}title`;\nconst TX_TAG = `{${CHART_NS}}tx`;\nconst RICH_TAG = `{${CHART_NS}}rich`;\nconst PLOT_AREA_TAG = `{${CHART_NS}}plotArea`;\nconst BAR_CHART_TAG = `{${CHART_NS}}barChart`;\nconst CAT_AX_TAG = `{${CHART_NS}}catAx`;\nconst VAL_AX_TAG = `{${CHART_NS}}valAx`;\nconst DATE_AX_TAG = `{${CHART_NS}}dateAx`;\nconst SER_AX_TAG = `{${CHART_NS}}serAx`;\nconst SER_TAG = `{${CHART_NS}}ser`;\nconst IDX_TAG = `{${CHART_NS}}idx`;\nconst ORDER_TAG = `{${CHART_NS}}order`;\nconst CAT_TAG = `{${CHART_NS}}cat`;\nconst VAL_TAG = `{${CHART_NS}}val`;\nconst NUM_REF_TAG = `{${CHART_NS}}numRef`;\nconst STR_REF_TAG = `{${CHART_NS}}strRef`;\nconst NUM_CACHE_TAG = `{${CHART_NS}}numCache`;\nconst STR_CACHE_TAG = `{${CHART_NS}}strCache`;\nconst F_TAG = `{${CHART_NS}}f`;\nconst PT_TAG = `{${CHART_NS}}pt`;\nconst V_TAG = `{${CHART_NS}}v`;\nconst FORMAT_CODE_TAG = `{${CHART_NS}}formatCode`;\nconst BAR_DIR_TAG = `{${CHART_NS}}barDir`;\nconst GROUPING_TAG = `{${CHART_NS}}grouping`;\nconst VARY_COLORS_TAG = `{${CHART_NS}}varyColors`;\nconst GAP_WIDTH_TAG = `{${CHART_NS}}gapWidth`;\nconst OVERLAP_TAG = `{${CHART_NS}}overlap`;\nconst STYLE_TAG = `{${CHART_NS}}style`;\nconst AX_ID_TAG = `{${CHART_NS}}axId`;\nconst DELETE_TAG = `{${CHART_NS}}delete`;\nconst LINE_CHART_TAG = `{${CHART_NS}}lineChart`;\nconst AREA_CHART_TAG = `{${CHART_NS}}areaChart`;\nconst PIE_CHART_TAG = `{${CHART_NS}}pieChart`;\nconst DOUGHNUT_CHART_TAG = `{${CHART_NS}}doughnutChart`;\nconst SCATTER_CHART_TAG = `{${CHART_NS}}scatterChart`;\nconst RADAR_CHART_TAG = `{${CHART_NS}}radarChart`;\nconst SMOOTH_TAG = `{${CHART_NS}}smooth`;\nconst MARKER_TAG = `{${CHART_NS}}marker`;\nconst SYMBOL_TAG = `{${CHART_NS}}symbol`;\nconst SIZE_TAG = `{${CHART_NS}}size`;\nconst D_PT_TAG = `{${CHART_NS}}dPt`;\nconst INVERT_IF_NEGATIVE_TAG = `{${CHART_NS}}invertIfNegative`;\nconst EXPLOSION_TAG = `{${CHART_NS}}explosion`;\nconst HOLE_SIZE_TAG = `{${CHART_NS}}holeSize`;\nconst FIRST_SLICE_ANG_TAG = `{${CHART_NS}}firstSliceAng`;\nconst SCATTER_STYLE_TAG = `{${CHART_NS}}scatterStyle`;\nconst RADAR_STYLE_TAG = `{${CHART_NS}}radarStyle`;\nconst X_VAL_TAG = `{${CHART_NS}}xVal`;\nconst Y_VAL_TAG = `{${CHART_NS}}yVal`;\nconst BUBBLE_CHART_TAG = `{${CHART_NS}}bubbleChart`;\nconst STOCK_CHART_TAG = `{${CHART_NS}}stockChart`;\nconst SURFACE_CHART_TAG = `{${CHART_NS}}surfaceChart`;\nconst BUBBLE_SIZE_TAG = `{${CHART_NS}}bubbleSize`;\nconst BUBBLE_3D_TAG = `{${CHART_NS}}bubble3D`;\nconst BUBBLE_SCALE_TAG = `{${CHART_NS}}bubbleScale`;\nconst SHOW_NEG_BUBBLES_TAG = `{${CHART_NS}}showNegBubbles`;\nconst SIZE_REPRESENTS_TAG = `{${CHART_NS}}sizeRepresents`;\nconst HI_LOW_LINES_TAG = `{${CHART_NS}}hiLowLines`;\nconst UP_DOWN_BARS_TAG = `{${CHART_NS}}upDownBars`;\nconst WIREFRAME_TAG = `{${CHART_NS}}wireframe`;\nconst OF_PIE_CHART_TAG = `{${CHART_NS}}ofPieChart`;\nconst OF_PIE_TYPE_TAG = `{${CHART_NS}}ofPieType`;\nconst SPLIT_TYPE_TAG = `{${CHART_NS}}splitType`;\nconst SPLIT_POS_TAG = `{${CHART_NS}}splitPos`;\nconst CUST_SPLIT_TAG = `{${CHART_NS}}custSplit`;\nconst SECOND_PIE_SIZE_TAG = `{${CHART_NS}}secondPieSize`;\nconst SEC_BLOCK_PT_TAG = `{${CHART_NS}}secondaryPt`;\nconst BAR3D_CHART_TAG = `{${CHART_NS}}bar3DChart`;\nconst LINE3D_CHART_TAG = `{${CHART_NS}}line3DChart`;\nconst PIE3D_CHART_TAG = `{${CHART_NS}}pie3DChart`;\nconst AREA3D_CHART_TAG = `{${CHART_NS}}area3DChart`;\nconst SURFACE3D_CHART_TAG = `{${CHART_NS}}surface3DChart`;\nconst GAP_DEPTH_TAG = `{${CHART_NS}}gapDepth`;\nconst SHAPE_TAG = `{${CHART_NS}}shape`;\nconst AX_POS_TAG = `{${CHART_NS}}axPos`;\nconst CROSS_AX_TAG = `{${CHART_NS}}crossAx`;\nconst MAJOR_GRIDLINES_TAG = `{${CHART_NS}}majorGridlines`;\nconst MINOR_GRIDLINES_TAG = `{${CHART_NS}}minorGridlines`;\nconst SCALING_TAG = `{${CHART_NS}}scaling`;\nconst ORIENTATION_TAG = `{${CHART_NS}}orientation`;\nconst MIN_TAG = `{${CHART_NS}}min`;\nconst MAX_TAG = `{${CHART_NS}}max`;\nconst LOG_BASE_TAG = `{${CHART_NS}}logBase`;\nconst CROSSES_TAG = `{${CHART_NS}}crosses`;\nconst CROSSES_AT_TAG = `{${CHART_NS}}crossesAt`;\nconst CROSS_BETWEEN_TAG = `{${CHART_NS}}crossBetween`;\nconst MAJOR_UNIT_TAG = `{${CHART_NS}}majorUnit`;\nconst MINOR_UNIT_TAG = `{${CHART_NS}}minorUnit`;\nconst MAJOR_TICK_MARK_TAG = `{${CHART_NS}}majorTickMark`;\nconst MINOR_TICK_MARK_TAG = `{${CHART_NS}}minorTickMark`;\nconst TICK_LBL_POS_TAG = `{${CHART_NS}}tickLblPos`;\nconst AUTO_TAG = `{${CHART_NS}}auto`;\nconst LBL_ALGN_TAG = `{${CHART_NS}}lblAlgn`;\nconst LBL_OFFSET_TAG = `{${CHART_NS}}lblOffset`;\nconst NO_MULTI_LVL_LBL_TAG = `{${CHART_NS}}noMultiLvlLbl`;\nconst VIEW3D_TAG = `{${CHART_NS}}view3D`;\nconst ROT_X_TAG = `{${CHART_NS}}rotX`;\nconst ROT_Y_TAG = `{${CHART_NS}}rotY`;\nconst H_PERCENT_TAG = `{${CHART_NS}}hPercent`;\nconst DEPTH_PERCENT_TAG = `{${CHART_NS}}depthPercent`;\nconst R_ANG_AX_TAG = `{${CHART_NS}}rAngAx`;\nconst PERSPECTIVE_TAG = `{${CHART_NS}}perspective`;\nconst FLOOR_TAG = `{${CHART_NS}}floor`;\nconst SIDE_WALL_TAG = `{${CHART_NS}}sideWall`;\nconst BACK_WALL_TAG = `{${CHART_NS}}backWall`;\nconst THICKNESS_TAG = `{${CHART_NS}}thickness`;\nconst LAYOUT_TAG = `{${CHART_NS}}layout`;\nconst MANUAL_LAYOUT_TAG = `{${CHART_NS}}manualLayout`;\nconst LAYOUT_TARGET_TAG = `{${CHART_NS}}layoutTarget`;\nconst X_MODE_TAG = `{${CHART_NS}}xMode`;\nconst Y_MODE_TAG = `{${CHART_NS}}yMode`;\nconst W_MODE_TAG = `{${CHART_NS}}wMode`;\nconst H_MODE_TAG = `{${CHART_NS}}hMode`;\nconst X_TAG = `{${CHART_NS}}x`;\nconst Y_TAG = `{${CHART_NS}}y`;\nconst W_TAG = `{${CHART_NS}}w`;\nconst H_TAG = `{${CHART_NS}}h`;\nconst LEGEND_TAG = `{${CHART_NS}}legend`;\nconst LEGEND_POS_TAG = `{${CHART_NS}}legendPos`;\nconst PLOT_VIS_ONLY_TAG = `{${CHART_NS}}plotVisOnly`;\nconst DISP_BLANKS_AS_TAG = `{${CHART_NS}}dispBlanksAs`;\nconst SP_PR_TAG = `{${CHART_NS}}spPr`;\nconst TX_PR_TAG = `{${CHART_NS}}txPr`;\nconst OVERLAY_TAG = `{${CHART_NS}}overlay`;\nconst USER_SHAPES_TAG = `{${CHART_NS}}userShapes`;\nconst D_LBLS_TAG = `{${CHART_NS}}dLbls`;\nconst D_LBL_TAG = `{${CHART_NS}}dLbl`;\nconst NUM_FMT_TAG = `{${CHART_NS}}numFmt`;\nconst D_LBL_POS_TAG = `{${CHART_NS}}dLblPos`;\nconst SHOW_LEGEND_KEY_TAG = `{${CHART_NS}}showLegendKey`;\nconst SHOW_VAL_TAG = `{${CHART_NS}}showVal`;\nconst SHOW_CAT_NAME_TAG = `{${CHART_NS}}showCatName`;\nconst SHOW_SER_NAME_TAG = `{${CHART_NS}}showSerName`;\nconst SHOW_PERCENT_TAG = `{${CHART_NS}}showPercent`;\nconst SHOW_BUBBLE_SIZE_TAG = `{${CHART_NS}}showBubbleSize`;\nconst SHOW_LEADER_LINES_TAG = `{${CHART_NS}}showLeaderLines`;\nconst SEPARATOR_TAG = `{${CHART_NS}}separator`;\nconst DELETE_LBL_TAG = `{${CHART_NS}}delete`;\nconst TRENDLINE_TAG = `{${CHART_NS}}trendline`;\nconst TRENDLINE_TYPE_TAG = `{${CHART_NS}}trendlineType`;\nconst TRENDLINE_NAME_TAG = `{${CHART_NS}}name`;\nconst TRENDLINE_ORDER_TAG = `{${CHART_NS}}order`;\nconst TRENDLINE_PERIOD_TAG = `{${CHART_NS}}period`;\nconst TRENDLINE_FORWARD_TAG = `{${CHART_NS}}forward`;\nconst TRENDLINE_BACKWARD_TAG = `{${CHART_NS}}backward`;\nconst TRENDLINE_INTERCEPT_TAG = `{${CHART_NS}}intercept`;\nconst TRENDLINE_DISP_RSQR_TAG = `{${CHART_NS}}dispRSqr`;\nconst TRENDLINE_DISP_EQ_TAG = `{${CHART_NS}}dispEq`;\nconst ERR_BARS_TAG = `{${CHART_NS}}errBars`;\nconst ERR_DIR_TAG = `{${CHART_NS}}errDir`;\nconst ERR_BAR_TYPE_TAG = `{${CHART_NS}}errBarType`;\nconst ERR_VAL_TYPE_TAG = `{${CHART_NS}}errValType`;\nconst NO_END_CAP_TAG = `{${CHART_NS}}noEndCap`;\nconst PLUS_TAG = `{${CHART_NS}}plus`;\nconst MINUS_TAG = `{${CHART_NS}}minus`;\nconst A_R_TAG = '{http://schemas.openxmlformats.org/drawingml/2006/main}r';\nconst A_T_TAG = '{http://schemas.openxmlformats.org/drawingml/2006/main}t';\n\nconst XML_HEADER = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n\nconst escapeText = escapeXmlText;\n\nconst valAttr = (n: XmlNode | undefined): string | undefined => n?.attrs['val'];\nconst intVal = (n: XmlNode | undefined): number | undefined => {\n const v = valAttr(n);\n if (v === undefined) return undefined;\n const x = Number.parseInt(v, 10);\n return Number.isInteger(x) ? x : undefined;\n};\nconst boolVal = (n: XmlNode | undefined): boolean | undefined => {\n const v = valAttr(n);\n if (v === undefined) return undefined;\n if (v === '1' || v === 'true') return true;\n if (v === '0' || v === 'false') return false;\n return undefined;\n};\n\nconst parseRichTextString = (richEl: XmlNode): string | undefined => {\n let out = '';\n for (const p of richEl.children) {\n if (typeof p === 'string') continue;\n for (const r of findChildren(p, A_R_TAG)) {\n const t = findChild(r, A_T_TAG);\n if (t?.text) out += t.text;\n }\n }\n return out.length > 0 ? out : undefined;\n};\n\nconst parseChartTitle = (titleEl: XmlNode): ChartTitle => {\n const out: ChartTitle = {};\n const tx = findChild(titleEl, TX_TAG);\n if (tx) {\n const rich = findChild(tx, RICH_TAG);\n if (rich) {\n // Parse the rich text body fully so callers see the formatted content.\n // For the convenience plain-text shortcut we also run a simple scrape\n // when the body has only literal runs.\n const body = parseTextBody(rich);\n out.tx = body;\n const flat = parseRichTextString(rich);\n if (flat !== undefined) out.text = flat;\n }\n }\n const overlay = boolVal(findChild(titleEl, OVERLAY_TAG));\n if (overlay !== undefined) out.overlay = overlay;\n const layoutEl = findChild(titleEl, LAYOUT_TAG);\n if (layoutEl) {\n const layout = parseLayout(layoutEl);\n if (layout) out.layout = layout;\n }\n const spPrEl = findChild(titleEl, SP_PR_TAG);\n if (spPrEl) out.spPr = parseShapeProperties(spPrEl);\n const txPrEl = findChild(titleEl, TX_PR_TAG);\n if (txPrEl) out.txPr = parseTextBody(txPrEl);\n return out;\n};\n\nconst parseSpPrSlot = (parent: XmlNode): ShapeProperties | undefined => {\n const el = findChild(parent, SP_PR_TAG);\n return el ? parseShapeProperties(el) : undefined;\n};\n\nconst parseTxPrSlot = (parent: XmlNode): TextBody | undefined => {\n const el = findChild(parent, TX_PR_TAG);\n return el ? parseTextBody(el) : undefined;\n};\n\n// ---- Series decorations (dLbls, trendlines, error bars) -------------------\n\nconst VALID_D_LBL_POS: ReadonlyArray<string> = ['bestFit', 'b', 'ctr', 'inBase', 'inEnd', 'l', 'outEnd', 'r', 't'];\n\nconst parseNumberFormat = (el: XmlNode | undefined): ChartNumberFormat | undefined => {\n if (!el) return undefined;\n const formatCode = el.attrs['formatCode'];\n if (formatCode === undefined) return undefined;\n const sourceLinkedRaw = el.attrs['sourceLinked'];\n const sourceLinked =\n sourceLinkedRaw === '1' || sourceLinkedRaw === 'true'\n ? true\n : sourceLinkedRaw === '0' || sourceLinkedRaw === 'false'\n ? false\n : undefined;\n return { formatCode, ...(sourceLinked !== undefined ? { sourceLinked } : {}) };\n};\n\nconst serializeNumberFormat = (n: ChartNumberFormat): string => {\n const sl = n.sourceLinked !== undefined ? ` sourceLinked=\"${n.sourceLinked ? '1' : '0'}\"` : '';\n return `<c:numFmt formatCode=\"${escapeText(n.formatCode)}\"${sl}/>`;\n};\n\ninterface DataLabelCommon {\n delete?: boolean;\n numFmt?: ChartNumberFormat;\n spPr?: ShapeProperties;\n txPr?: TextBody;\n dLblPos?: DataLabelPosition;\n showLegendKey?: boolean;\n showVal?: boolean;\n showCatName?: boolean;\n showSerName?: boolean;\n showPercent?: boolean;\n showBubbleSize?: boolean;\n separator?: string;\n}\n\nconst parseDataLabelCommon = (el: XmlNode): DataLabelCommon => {\n const out: DataLabelCommon = {};\n const del = boolVal(findChild(el, DELETE_LBL_TAG));\n if (del !== undefined) out.delete = del;\n const numFmt = parseNumberFormat(findChild(el, NUM_FMT_TAG));\n if (numFmt) out.numFmt = numFmt;\n const spPr = parseSpPrSlot(el);\n if (spPr) out.spPr = spPr;\n const txPr = parseTxPrSlot(el);\n if (txPr) out.txPr = txPr;\n const posRaw = valAttr(findChild(el, D_LBL_POS_TAG));\n if (posRaw && VALID_D_LBL_POS.includes(posRaw)) out.dLblPos = posRaw as DataLabelPosition;\n const showLegendKey = boolVal(findChild(el, SHOW_LEGEND_KEY_TAG));\n if (showLegendKey !== undefined) out.showLegendKey = showLegendKey;\n const showVal = boolVal(findChild(el, SHOW_VAL_TAG));\n if (showVal !== undefined) out.showVal = showVal;\n const showCatName = boolVal(findChild(el, SHOW_CAT_NAME_TAG));\n if (showCatName !== undefined) out.showCatName = showCatName;\n const showSerName = boolVal(findChild(el, SHOW_SER_NAME_TAG));\n if (showSerName !== undefined) out.showSerName = showSerName;\n const showPercent = boolVal(findChild(el, SHOW_PERCENT_TAG));\n if (showPercent !== undefined) out.showPercent = showPercent;\n const showBubbleSize = boolVal(findChild(el, SHOW_BUBBLE_SIZE_TAG));\n if (showBubbleSize !== undefined) out.showBubbleSize = showBubbleSize;\n const sep = findChild(el, SEPARATOR_TAG);\n if (sep?.text !== undefined) out.separator = sep.text;\n return out;\n};\n\nconst serializeDataLabelCommon = (d: DataLabelCommon): string => {\n // ECMA-376 element ordering inside <c:dLbl>/<c:dLbls>: numFmt → spPr → txPr →\n // dLblPos → showLegendKey → showVal → showCatName → showSerName → showPercent\n // → showBubbleSize → separator → showLeaderLines (delete is exclusive — when\n // true the label has no other children).\n if (d.delete) return '<c:delete val=\"1\"/>';\n const parts: string[] = [];\n if (d.numFmt) parts.push(serializeNumberFormat(d.numFmt));\n if (d.spPr) parts.push(serializeShapeProperties(d.spPr));\n if (d.txPr) parts.push(serializeTextBody(d.txPr, 'c:txPr'));\n if (d.dLblPos) parts.push(`<c:dLblPos val=\"${d.dLblPos}\"/>`);\n if (d.showLegendKey !== undefined) parts.push(`<c:showLegendKey val=\"${d.showLegendKey ? '1' : '0'}\"/>`);\n if (d.showVal !== undefined) parts.push(`<c:showVal val=\"${d.showVal ? '1' : '0'}\"/>`);\n if (d.showCatName !== undefined) parts.push(`<c:showCatName val=\"${d.showCatName ? '1' : '0'}\"/>`);\n if (d.showSerName !== undefined) parts.push(`<c:showSerName val=\"${d.showSerName ? '1' : '0'}\"/>`);\n if (d.showPercent !== undefined) parts.push(`<c:showPercent val=\"${d.showPercent ? '1' : '0'}\"/>`);\n if (d.showBubbleSize !== undefined) parts.push(`<c:showBubbleSize val=\"${d.showBubbleSize ? '1' : '0'}\"/>`);\n if (d.separator !== undefined) parts.push(`<c:separator>${escapeText(d.separator)}</c:separator>`);\n return parts.join('');\n};\n\nconst parseDataLabel = (el: XmlNode): DataLabel | undefined => {\n const idx = intVal(findChild(el, IDX_TAG));\n if (idx === undefined) return undefined;\n const out: DataLabel = { idx, ...parseDataLabelCommon(el) };\n // <c:tx>: either <c:rich> (TextBody) or <c:strRef><c:f>.\n const txEl = findChild(el, TX_TAG);\n if (txEl) {\n const richEl = findChild(txEl, RICH_TAG);\n if (richEl) {\n out.tx = { kind: 'rich', body: parseTextBody(richEl) };\n } else {\n const strRef = findChild(txEl, STR_REF_TAG);\n if (strRef) {\n const ref = findChild(strRef, F_TAG)?.text ?? '';\n out.tx = { kind: 'strRef', ref };\n }\n }\n }\n return out;\n};\n\nconst serializeDataLabel = (d: DataLabel): string => {\n if (d.delete) return `<c:dLbl><c:idx val=\"${d.idx}\"/><c:delete val=\"1\"/></c:dLbl>`;\n const parts: string[] = [`<c:dLbl><c:idx val=\"${d.idx}\"/>`];\n if (d.tx) {\n if (d.tx.kind === 'rich') {\n parts.push(`<c:tx>${serializeTextBody(d.tx.body, 'c:rich')}</c:tx>`);\n } else {\n parts.push(`<c:tx><c:strRef><c:f>${escapeText(d.tx.ref)}</c:f></c:strRef></c:tx>`);\n }\n }\n parts.push(serializeDataLabelCommon(d));\n parts.push('</c:dLbl>');\n return parts.join('');\n};\n\nconst parseDataLabelList = (el: XmlNode): DataLabelList => {\n const common = parseDataLabelCommon(el);\n const out: DataLabelList = { ...common };\n const showLeader = boolVal(findChild(el, SHOW_LEADER_LINES_TAG));\n if (showLeader !== undefined) out.showLeaderLines = showLeader;\n const dLbls: DataLabel[] = [];\n for (const child of findChildren(el, D_LBL_TAG)) {\n const dl = parseDataLabel(child);\n if (dl) dLbls.push(dl);\n }\n if (dLbls.length > 0) out.dLbl = dLbls;\n return out;\n};\n\nconst serializeDataLabelList = (d: DataLabelList): string => {\n if (d.delete) return '<c:dLbls><c:delete val=\"1\"/></c:dLbls>';\n const parts: string[] = ['<c:dLbls>'];\n if (d.dLbl) for (const dl of d.dLbl) parts.push(serializeDataLabel(dl));\n parts.push(serializeDataLabelCommon(d));\n if (d.showLeaderLines !== undefined) {\n parts.push(`<c:showLeaderLines val=\"${d.showLeaderLines ? '1' : '0'}\"/>`);\n }\n parts.push('</c:dLbls>');\n return parts.join('');\n};\n\nconst VALID_MARKER_SYMBOLS: ReadonlyArray<string> = [\n 'auto',\n 'circle',\n 'dash',\n 'diamond',\n 'dot',\n 'none',\n 'picture',\n 'plus',\n 'square',\n 'star',\n 'triangle',\n 'x',\n];\n\nconst parseMarker = (el: XmlNode): Marker | undefined => {\n const symbolRaw = valAttr(findChild(el, SYMBOL_TAG));\n const size = intVal(findChild(el, SIZE_TAG));\n const spPr = parseSpPrSlot(el);\n const out: Marker = {};\n if (symbolRaw && VALID_MARKER_SYMBOLS.includes(symbolRaw)) out.symbol = symbolRaw as MarkerSymbol;\n if (size !== undefined) out.size = size;\n if (spPr) out.spPr = spPr;\n return Object.keys(out).length > 0 ? out : undefined;\n};\n\nconst serializeMarker = (m: Marker): string => {\n const parts: string[] = ['<c:marker>'];\n if (m.symbol !== undefined) parts.push(`<c:symbol val=\"${m.symbol}\"/>`);\n if (m.size !== undefined) parts.push(`<c:size val=\"${m.size}\"/>`);\n if (m.spPr) parts.push(serializeShapeProperties(m.spPr));\n parts.push('</c:marker>');\n return parts.join('');\n};\n\nconst parseDataPoint = (el: XmlNode): DataPoint | undefined => {\n const idx = intVal(findChild(el, IDX_TAG));\n if (idx === undefined) return undefined;\n const invertIfNegative = boolVal(findChild(el, INVERT_IF_NEGATIVE_TAG));\n const bubble3D = boolVal(findChild(el, BUBBLE_3D_TAG));\n const explosion = intVal(findChild(el, EXPLOSION_TAG));\n const markerEl = findChild(el, MARKER_TAG);\n const marker = markerEl ? parseMarker(markerEl) : undefined;\n const spPr = parseSpPrSlot(el);\n const out: DataPoint = { idx };\n if (invertIfNegative !== undefined) out.invertIfNegative = invertIfNegative;\n if (marker) out.marker = marker;\n if (bubble3D !== undefined) out.bubble3D = bubble3D;\n if (explosion !== undefined) out.explosion = explosion;\n if (spPr) out.spPr = spPr;\n return out;\n};\n\nconst serializeDataPoint = (p: DataPoint): string => {\n // ECMA-376 order inside <c:dPt>: idx → invertIfNegative? → marker? → bubble3D?\n // → explosion? → spPr? → pictureOptions?\n const parts: string[] = ['<c:dPt>', `<c:idx val=\"${p.idx}\"/>`];\n if (p.invertIfNegative !== undefined) {\n parts.push(`<c:invertIfNegative val=\"${p.invertIfNegative ? '1' : '0'}\"/>`);\n }\n if (p.marker) parts.push(serializeMarker(p.marker));\n if (p.bubble3D !== undefined) parts.push(`<c:bubble3D val=\"${p.bubble3D ? '1' : '0'}\"/>`);\n if (p.explosion !== undefined) parts.push(`<c:explosion val=\"${p.explosion}\"/>`);\n if (p.spPr) parts.push(serializeShapeProperties(p.spPr));\n parts.push('</c:dPt>');\n return parts.join('');\n};\n\nconst parseDataPointList = (serEl: XmlNode): DataPoint[] | undefined => {\n const out: DataPoint[] = [];\n for (const el of findChildren(serEl, D_PT_TAG)) {\n const p = parseDataPoint(el);\n if (p) out.push(p);\n }\n return out.length > 0 ? out : undefined;\n};\n\nconst VALID_TRENDLINE_TYPES: ReadonlyArray<string> = ['exp', 'linear', 'log', 'movingAvg', 'poly', 'power'];\n\nconst parseTrendline = (el: XmlNode): Trendline | undefined => {\n const typeRaw = valAttr(findChild(el, TRENDLINE_TYPE_TAG));\n if (!typeRaw || !VALID_TRENDLINE_TYPES.includes(typeRaw)) return undefined;\n const out: Trendline = { trendlineType: typeRaw as TrendlineType };\n const nameEl = findChild(el, TRENDLINE_NAME_TAG);\n if (nameEl?.text !== undefined) out.name = nameEl.text;\n const spPr = parseSpPrSlot(el);\n if (spPr) out.spPr = spPr;\n const order = intVal(findChild(el, TRENDLINE_ORDER_TAG));\n if (order !== undefined) out.order = order;\n const period = intVal(findChild(el, TRENDLINE_PERIOD_TAG));\n if (period !== undefined) out.period = period;\n // forward / backward / intercept can be floats.\n const fwdEl = findChild(el, TRENDLINE_FORWARD_TAG);\n if (fwdEl) {\n const v = valAttr(fwdEl);\n if (v !== undefined) {\n const n = Number.parseFloat(v);\n if (Number.isFinite(n)) out.forward = n;\n }\n }\n const bwdEl = findChild(el, TRENDLINE_BACKWARD_TAG);\n if (bwdEl) {\n const v = valAttr(bwdEl);\n if (v !== undefined) {\n const n = Number.parseFloat(v);\n if (Number.isFinite(n)) out.backward = n;\n }\n }\n const intEl = findChild(el, TRENDLINE_INTERCEPT_TAG);\n if (intEl) {\n const v = valAttr(intEl);\n if (v !== undefined) {\n const n = Number.parseFloat(v);\n if (Number.isFinite(n)) out.intercept = n;\n }\n }\n const dispRSqr = boolVal(findChild(el, TRENDLINE_DISP_RSQR_TAG));\n if (dispRSqr !== undefined) out.dispRSqr = dispRSqr;\n const dispEq = boolVal(findChild(el, TRENDLINE_DISP_EQ_TAG));\n if (dispEq !== undefined) out.dispEq = dispEq;\n return out;\n};\n\nconst serializeTrendline = (t: Trendline): string => {\n // ECMA-376: name → spPr → trendlineType → order → period → forward → backward\n // → intercept → dispRSqr → dispEq → trendlineLbl.\n const parts: string[] = ['<c:trendline>'];\n if (t.name !== undefined) parts.push(`<c:name>${escapeText(t.name)}</c:name>`);\n if (t.spPr) parts.push(serializeShapeProperties(t.spPr));\n parts.push(`<c:trendlineType val=\"${t.trendlineType}\"/>`);\n if (t.order !== undefined) parts.push(`<c:order val=\"${t.order}\"/>`);\n if (t.period !== undefined) parts.push(`<c:period val=\"${t.period}\"/>`);\n if (t.forward !== undefined) parts.push(`<c:forward val=\"${t.forward}\"/>`);\n if (t.backward !== undefined) parts.push(`<c:backward val=\"${t.backward}\"/>`);\n if (t.intercept !== undefined) parts.push(`<c:intercept val=\"${t.intercept}\"/>`);\n if (t.dispRSqr !== undefined) parts.push(`<c:dispRSqr val=\"${t.dispRSqr ? '1' : '0'}\"/>`);\n if (t.dispEq !== undefined) parts.push(`<c:dispEq val=\"${t.dispEq ? '1' : '0'}\"/>`);\n parts.push('</c:trendline>');\n return parts.join('');\n};\n\nconst VALID_ERR_DIR: ReadonlyArray<string> = ['x', 'y'];\nconst VALID_ERR_BAR_TYPE: ReadonlyArray<string> = ['both', 'minus', 'plus'];\nconst VALID_ERR_VAL_TYPE: ReadonlyArray<string> = ['cust', 'fixedVal', 'percentage', 'stdDev', 'stdErr'];\n\nconst parseErrBars = (el: XmlNode): ErrorBars | undefined => {\n const typeRaw = valAttr(findChild(el, ERR_BAR_TYPE_TAG));\n const valRaw = valAttr(findChild(el, ERR_VAL_TYPE_TAG));\n if (!typeRaw || !valRaw || !VALID_ERR_BAR_TYPE.includes(typeRaw) || !VALID_ERR_VAL_TYPE.includes(valRaw)) {\n return undefined;\n }\n const out: ErrorBars = {\n errBarType: typeRaw as ErrorBarType,\n errValType: valRaw as ErrorValType,\n };\n const dirRaw = valAttr(findChild(el, ERR_DIR_TAG));\n if (dirRaw && VALID_ERR_DIR.includes(dirRaw)) out.errDir = dirRaw as ErrorBarDirection;\n const noEnd = boolVal(findChild(el, NO_END_CAP_TAG));\n if (noEnd !== undefined) out.noEndCap = noEnd;\n const valEl = findChild(el, VAL_TAG);\n if (valEl) {\n const v = valAttr(valEl);\n if (v !== undefined) {\n const n = Number.parseFloat(v);\n if (Number.isFinite(n)) out.val = n;\n }\n }\n const plus = parseNumericRef(el, PLUS_TAG);\n if (plus) out.plus = plus;\n const minus = parseNumericRef(el, MINUS_TAG);\n if (minus) out.minus = minus;\n const spPr = parseSpPrSlot(el);\n if (spPr) out.spPr = spPr;\n return out;\n};\n\nconst serializeErrBars = (e: ErrorBars): string => {\n // ECMA-376: errDir? → errBarType → errValType → noEndCap? → plus? → minus? →\n // val? → spPr?.\n const parts: string[] = ['<c:errBars>'];\n if (e.errDir) parts.push(`<c:errDir val=\"${e.errDir}\"/>`);\n parts.push(`<c:errBarType val=\"${e.errBarType}\"/>`);\n parts.push(`<c:errValType val=\"${e.errValType}\"/>`);\n if (e.noEndCap !== undefined) parts.push(`<c:noEndCap val=\"${e.noEndCap ? '1' : '0'}\"/>`);\n if (e.plus) parts.push(serializeNumericRef('plus', e.plus));\n if (e.minus) parts.push(serializeNumericRef('minus', e.minus));\n if (e.val !== undefined) parts.push(`<c:val val=\"${e.val}\"/>`);\n if (e.spPr) parts.push(serializeShapeProperties(e.spPr));\n parts.push('</c:errBars>');\n return parts.join('');\n};\n\n/** Pull dLbls / trendline[] / errBars[] off a `<c:ser>` element. */\nconst parseSeriesDecorations = (\n serEl: XmlNode,\n): { dLbls?: DataLabelList; trendline?: Trendline[]; errBars?: ErrorBars[] } => {\n const out: { dLbls?: DataLabelList; trendline?: Trendline[]; errBars?: ErrorBars[] } = {};\n const dLblsEl = findChild(serEl, D_LBLS_TAG);\n if (dLblsEl) out.dLbls = parseDataLabelList(dLblsEl);\n const trends: Trendline[] = [];\n for (const t of findChildren(serEl, TRENDLINE_TAG)) {\n const tl = parseTrendline(t);\n if (tl) trends.push(tl);\n }\n if (trends.length > 0) out.trendline = trends;\n const ebs: ErrorBars[] = [];\n for (const eb of findChildren(serEl, ERR_BARS_TAG)) {\n const e = parseErrBars(eb);\n if (e) ebs.push(e);\n }\n if (ebs.length > 0) out.errBars = ebs;\n return out;\n};\n\nconst parseNumCache = (cacheEl: XmlNode): { values: number[]; formatCode?: string } => {\n const values: number[] = [];\n const fmt = findChild(cacheEl, FORMAT_CODE_TAG)?.text;\n for (const pt of findChildren(cacheEl, PT_TAG)) {\n const v = findChild(pt, V_TAG)?.text;\n if (v !== undefined) values.push(Number.parseFloat(v));\n }\n return fmt !== undefined ? { values, formatCode: fmt } : { values };\n};\n\nconst parseStrCache = (cacheEl: XmlNode): string[] => {\n const values: string[] = [];\n for (const pt of findChildren(cacheEl, PT_TAG)) {\n const v = findChild(pt, V_TAG)?.text;\n if (v !== undefined) values.push(v);\n }\n return values;\n};\n\nconst parseNumericRef = (parent: XmlNode, tag: string): NumericRef | undefined => {\n const wrap = findChild(parent, tag);\n if (!wrap) return undefined;\n const numRef = findChild(wrap, NUM_REF_TAG);\n if (!numRef) return undefined;\n const ref = findChild(numRef, F_TAG)?.text ?? '';\n const cacheEl = findChild(numRef, NUM_CACHE_TAG);\n if (!cacheEl) return { ref };\n const { values, formatCode } = parseNumCache(cacheEl);\n return {\n ref,\n cache: values,\n ...(formatCode !== undefined ? { formatCode } : {}),\n };\n};\n\nconst parseCategoryRef = (parent: XmlNode): CategoryRef | undefined => {\n const cat = findChild(parent, CAT_TAG);\n if (!cat) return undefined;\n const numRef = findChild(cat, NUM_REF_TAG);\n if (numRef) {\n const ref = findChild(numRef, F_TAG)?.text ?? '';\n const cacheEl = findChild(numRef, NUM_CACHE_TAG);\n if (!cacheEl) return { ref, cacheKind: 'num' };\n const { values, formatCode } = parseNumCache(cacheEl);\n return {\n ref,\n cacheKind: 'num',\n cache: values,\n ...(formatCode !== undefined ? { formatCode } : {}),\n };\n }\n const strRef = findChild(cat, STR_REF_TAG);\n if (strRef) {\n const ref = findChild(strRef, F_TAG)?.text ?? '';\n const cacheEl = findChild(strRef, STR_CACHE_TAG);\n if (!cacheEl) return { ref, cacheKind: 'str' };\n return { ref, cacheKind: 'str', cache: parseStrCache(cacheEl) };\n }\n return undefined;\n};\n\nconst parseSeries = (serEl: XmlNode): BarSeries | undefined => {\n const idx = intVal(findChild(serEl, IDX_TAG));\n const order = intVal(findChild(serEl, ORDER_TAG));\n if (idx === undefined) return undefined;\n const val = parseNumericRef(serEl, VAL_TAG);\n if (!val) return undefined;\n const opts: Parameters<typeof makeBarSeries>[0] = {\n idx,\n val,\n };\n if (order !== undefined) opts.order = order;\n const cat = parseCategoryRef(serEl);\n if (cat) opts.cat = cat;\n const base = makeBarSeries(opts);\n const spPr = parseSpPrSlot(serEl);\n const invertIfNegative = boolVal(findChild(serEl, INVERT_IF_NEGATIVE_TAG));\n const explosion = intVal(findChild(serEl, EXPLOSION_TAG));\n const dPt = parseDataPointList(serEl);\n const deco = parseSeriesDecorations(serEl);\n return {\n ...base,\n ...(spPr ? { spPr } : {}),\n ...(invertIfNegative !== undefined ? { invertIfNegative } : {}),\n ...(explosion !== undefined ? { explosion } : {}),\n ...(dPt ? { dPt } : {}),\n ...deco,\n };\n};\n\nconst parseAxIds = (chartEl: XmlNode): [number, number] => {\n const axIdNodes = findChildren(chartEl, AX_ID_TAG);\n return [intVal(axIdNodes[0]) ?? 1, intVal(axIdNodes[1]) ?? 2];\n};\n\nconst parseBarSeriesList = (chartEl: XmlNode): BarSeries[] => {\n const series: BarSeries[] = [];\n for (const ser of findChildren(chartEl, SER_TAG)) {\n const s = parseSeries(ser);\n if (s) series.push(s);\n }\n return series;\n};\n\nconst parseBarChart = (barEl: XmlNode): BarChart => {\n const barDir = (valAttr(findChild(barEl, BAR_DIR_TAG)) ?? 'col') as BarDirection;\n const grouping = (valAttr(findChild(barEl, GROUPING_TAG)) ?? 'clustered') as GroupingType;\n const varyColors = boolVal(findChild(barEl, VARY_COLORS_TAG));\n const gapWidth = intVal(findChild(barEl, GAP_WIDTH_TAG));\n const overlap = intVal(findChild(barEl, OVERLAP_TAG));\n return makeBarChart({\n barDir,\n grouping,\n series: parseBarSeriesList(barEl),\n axIds: parseAxIds(barEl),\n ...(varyColors !== undefined ? { varyColors } : {}),\n ...(gapWidth !== undefined ? { gapWidth } : {}),\n ...(overlap !== undefined ? { overlap } : {}),\n });\n};\n\nconst parseLineSeries = (serEl: XmlNode): LineSeries | undefined => {\n const base = parseSeries(serEl);\n if (!base) return undefined;\n const smooth = boolVal(findChild(serEl, SMOOTH_TAG));\n const markerEl = findChild(serEl, MARKER_TAG);\n const marker = markerEl ? parseMarker(markerEl) : undefined;\n return {\n ...base,\n ...(smooth !== undefined ? { smooth } : {}),\n ...(marker ? { marker } : {}),\n };\n};\n\nconst parseLineChart = (lineEl: XmlNode): LineChart => {\n const grouping = (valAttr(findChild(lineEl, GROUPING_TAG)) ?? 'standard') as GroupingType;\n const varyColors = boolVal(findChild(lineEl, VARY_COLORS_TAG));\n const smooth = boolVal(findChild(lineEl, SMOOTH_TAG));\n const series: LineSeries[] = [];\n for (const ser of findChildren(lineEl, SER_TAG)) {\n const s = parseLineSeries(ser);\n if (s) series.push(s);\n }\n return makeLineChart({\n grouping,\n series,\n axIds: parseAxIds(lineEl),\n ...(varyColors !== undefined ? { varyColors } : {}),\n ...(smooth !== undefined ? { smooth } : {}),\n });\n};\n\nconst parseAreaChart = (areaEl: XmlNode): AreaChart => {\n const grouping = (valAttr(findChild(areaEl, GROUPING_TAG)) ?? 'standard') as GroupingType;\n const varyColors = boolVal(findChild(areaEl, VARY_COLORS_TAG));\n return makeAreaChart({\n grouping,\n series: parseBarSeriesList(areaEl),\n axIds: parseAxIds(areaEl),\n ...(varyColors !== undefined ? { varyColors } : {}),\n });\n};\n\nconst parsePieChart = (pieEl: XmlNode): PieChart => {\n const varyColors = boolVal(findChild(pieEl, VARY_COLORS_TAG));\n return makePieChart({\n series: parseBarSeriesList(pieEl),\n ...(varyColors !== undefined ? { varyColors } : {}),\n });\n};\n\nconst parseDoughnutChart = (donutEl: XmlNode): DoughnutChart => {\n const varyColors = boolVal(findChild(donutEl, VARY_COLORS_TAG));\n const holeSize = intVal(findChild(donutEl, HOLE_SIZE_TAG));\n const firstSliceAng = intVal(findChild(donutEl, FIRST_SLICE_ANG_TAG));\n return makeDoughnutChart({\n series: parseBarSeriesList(donutEl),\n ...(varyColors !== undefined ? { varyColors } : {}),\n ...(holeSize !== undefined ? { holeSize } : {}),\n ...(firstSliceAng !== undefined ? { firstSliceAng } : {}),\n });\n};\n\nconst parseScatterSeries = (serEl: XmlNode): ScatterSeries | undefined => {\n const idx = intVal(findChild(serEl, IDX_TAG));\n const order = intVal(findChild(serEl, ORDER_TAG));\n if (idx === undefined) return undefined;\n const yVal = parseNumericRef(serEl, Y_VAL_TAG);\n if (!yVal) return undefined;\n const xVal = parseNumericRef(serEl, X_VAL_TAG);\n const smooth = boolVal(findChild(serEl, SMOOTH_TAG));\n const opts: Parameters<typeof makeScatterSeries>[0] = { idx, yVal };\n if (order !== undefined) opts.order = order;\n if (xVal) opts.xVal = xVal;\n if (smooth !== undefined) opts.smooth = smooth;\n const markerEl = findChild(serEl, MARKER_TAG);\n const marker = markerEl ? parseMarker(markerEl) : undefined;\n if (marker) opts.marker = marker;\n const base = makeScatterSeries(opts);\n const spPr = parseSpPrSlot(serEl);\n const dPt = parseDataPointList(serEl);\n const deco = parseSeriesDecorations(serEl);\n return {\n ...base,\n ...(spPr ? { spPr } : {}),\n ...(dPt ? { dPt } : {}),\n ...deco,\n };\n};\n\nconst parseScatterChart = (scatterEl: XmlNode): ScatterChart => {\n const scatterStyle = (valAttr(findChild(scatterEl, SCATTER_STYLE_TAG)) ?? 'lineMarker') as ScatterStyle;\n const varyColors = boolVal(findChild(scatterEl, VARY_COLORS_TAG));\n const series: ScatterSeries[] = [];\n for (const ser of findChildren(scatterEl, SER_TAG)) {\n const s = parseScatterSeries(ser);\n if (s) series.push(s);\n }\n return makeScatterChart({\n scatterStyle,\n series,\n axIds: parseAxIds(scatterEl),\n ...(varyColors !== undefined ? { varyColors } : {}),\n });\n};\n\nconst parseRadarChart = (radarEl: XmlNode): RadarChart => {\n const radarStyle = (valAttr(findChild(radarEl, RADAR_STYLE_TAG)) ?? 'standard') as RadarStyle;\n const varyColors = boolVal(findChild(radarEl, VARY_COLORS_TAG));\n return makeRadarChart({\n radarStyle,\n series: parseBarSeriesList(radarEl),\n axIds: parseAxIds(radarEl),\n ...(varyColors !== undefined ? { varyColors } : {}),\n });\n};\n\nconst parseBubbleSeries = (serEl: XmlNode): BubbleSeries | undefined => {\n const idx = intVal(findChild(serEl, IDX_TAG));\n const order = intVal(findChild(serEl, ORDER_TAG));\n if (idx === undefined) return undefined;\n const yVal = parseNumericRef(serEl, Y_VAL_TAG);\n const bubbleSize = parseNumericRef(serEl, BUBBLE_SIZE_TAG);\n if (!yVal || !bubbleSize) return undefined;\n const xVal = parseNumericRef(serEl, X_VAL_TAG);\n const bubble3D = boolVal(findChild(serEl, BUBBLE_3D_TAG));\n const opts: Parameters<typeof makeBubbleSeries>[0] = { idx, yVal, bubbleSize };\n if (order !== undefined) opts.order = order;\n if (xVal) opts.xVal = xVal;\n if (bubble3D !== undefined) opts.bubble3D = bubble3D;\n const base = makeBubbleSeries(opts);\n const spPr = parseSpPrSlot(serEl);\n const invertIfNegative = boolVal(findChild(serEl, INVERT_IF_NEGATIVE_TAG));\n const dPt = parseDataPointList(serEl);\n const deco = parseSeriesDecorations(serEl);\n return {\n ...base,\n ...(spPr ? { spPr } : {}),\n ...(invertIfNegative !== undefined ? { invertIfNegative } : {}),\n ...(dPt ? { dPt } : {}),\n ...deco,\n };\n};\n\nconst parseBubbleChart = (bubbleEl: XmlNode): BubbleChart => {\n const varyColors = boolVal(findChild(bubbleEl, VARY_COLORS_TAG));\n const bubble3D = boolVal(findChild(bubbleEl, BUBBLE_3D_TAG));\n const bubbleScale = intVal(findChild(bubbleEl, BUBBLE_SCALE_TAG));\n const showNegBubbles = boolVal(findChild(bubbleEl, SHOW_NEG_BUBBLES_TAG));\n const sizeRepresentsRaw = valAttr(findChild(bubbleEl, SIZE_REPRESENTS_TAG));\n const sizeRepresents: BubbleSizeRepresents | undefined =\n sizeRepresentsRaw === 'area' || sizeRepresentsRaw === 'w' ? sizeRepresentsRaw : undefined;\n const series: BubbleSeries[] = [];\n for (const ser of findChildren(bubbleEl, SER_TAG)) {\n const s = parseBubbleSeries(ser);\n if (s) series.push(s);\n }\n return makeBubbleChart({\n series,\n axIds: parseAxIds(bubbleEl),\n ...(varyColors !== undefined ? { varyColors } : {}),\n ...(bubble3D !== undefined ? { bubble3D } : {}),\n ...(bubbleScale !== undefined ? { bubbleScale } : {}),\n ...(showNegBubbles !== undefined ? { showNegBubbles } : {}),\n ...(sizeRepresents !== undefined ? { sizeRepresents } : {}),\n });\n};\n\nconst UP_BARS_TAG = `{${CHART_NS}}upBars`;\nconst DOWN_BARS_TAG = `{${CHART_NS}}downBars`;\n\nconst parseHiLowLines = (el: XmlNode): boolean | HiLowLines => {\n const spPr = parseSpPrSlot(el);\n return spPr ? { spPr } : true;\n};\n\nconst parseUpDownBars = (el: XmlNode): boolean | UpDownBars => {\n const gapWidth = intVal(findChild(el, GAP_WIDTH_TAG));\n const upBarsEl = findChild(el, UP_BARS_TAG);\n const downBarsEl = findChild(el, DOWN_BARS_TAG);\n const upBarsSpPr = upBarsEl ? parseSpPrSlot(upBarsEl) : undefined;\n const downBarsSpPr = downBarsEl ? parseSpPrSlot(downBarsEl) : undefined;\n const out: UpDownBars = {};\n // Treat the default gapWidth = 150 as \"unset\" to keep round-trip output minimal.\n if (gapWidth !== undefined && gapWidth !== 150) out.gapWidth = gapWidth;\n if (upBarsEl) out.upBars = upBarsSpPr ? { spPr: upBarsSpPr } : {};\n if (downBarsEl) out.downBars = downBarsSpPr ? { spPr: downBarsSpPr } : {};\n return Object.keys(out).length > 0 ? out : true;\n};\n\nconst parseStockChart = (stockEl: XmlNode): StockChart => {\n const hiLowLinesEl = findChild(stockEl, HI_LOW_LINES_TAG);\n const hiLowLines = hiLowLinesEl ? parseHiLowLines(hiLowLinesEl) : undefined;\n const upDownBarsEl = findChild(stockEl, UP_DOWN_BARS_TAG);\n const upDownBars = upDownBarsEl ? parseUpDownBars(upDownBarsEl) : undefined;\n return makeStockChart({\n series: parseBarSeriesList(stockEl),\n axIds: parseAxIds(stockEl),\n ...(hiLowLines !== undefined ? { hiLowLines } : {}),\n ...(upDownBars !== undefined ? { upDownBars } : {}),\n });\n};\n\nconst parseSurfaceChart = (surfaceEl: XmlNode): SurfaceChart => {\n const wireframe = boolVal(findChild(surfaceEl, WIREFRAME_TAG));\n const axIds3 = parseAxIds3(surfaceEl);\n return makeSurfaceChart({\n series: parseBarSeriesList(surfaceEl),\n axIds: axIds3,\n ...(wireframe !== undefined ? { wireframe } : {}),\n });\n};\n\nconst parseAxIds3 = (chartEl: XmlNode): [number, number, number] => {\n const axIdNodes = findChildren(chartEl, AX_ID_TAG);\n return [intVal(axIdNodes[0]) ?? 1, intVal(axIdNodes[1]) ?? 2, intVal(axIdNodes[2]) ?? 3];\n};\n\nconst SPLIT_TYPES: ReadonlyArray<SplitType> = ['auto', 'cust', 'percent', 'pos', 'val'];\n\nconst parseOfPieChart = (ofPieEl: XmlNode): OfPieChart => {\n const ofPieType = (valAttr(findChild(ofPieEl, OF_PIE_TYPE_TAG)) ?? 'pie') as OfPieType;\n const varyColors = boolVal(findChild(ofPieEl, VARY_COLORS_TAG));\n const gapWidth = intVal(findChild(ofPieEl, GAP_WIDTH_TAG));\n const splitTypeRaw = valAttr(findChild(ofPieEl, SPLIT_TYPE_TAG));\n const splitType =\n splitTypeRaw && (SPLIT_TYPES as ReadonlyArray<string>).includes(splitTypeRaw)\n ? (splitTypeRaw as SplitType)\n : undefined;\n const splitPos = intVal(findChild(ofPieEl, SPLIT_POS_TAG));\n const secondPieSize = intVal(findChild(ofPieEl, SECOND_PIE_SIZE_TAG));\n // <c:custSplit> contains <c:secondaryPt idx=N/> entries.\n let custSplit: number[] | undefined;\n const custSplitEl = findChild(ofPieEl, CUST_SPLIT_TAG);\n if (custSplitEl) {\n const points: number[] = [];\n for (const pt of findChildren(custSplitEl, SEC_BLOCK_PT_TAG)) {\n const idx = Number.parseInt(pt.attrs['idx'] ?? '', 10);\n if (Number.isInteger(idx)) points.push(idx);\n }\n custSplit = points;\n }\n return makeOfPieChart({\n ofPieType,\n series: parseBarSeriesList(ofPieEl),\n ...(varyColors !== undefined ? { varyColors } : {}),\n ...(gapWidth !== undefined ? { gapWidth } : {}),\n ...(splitType !== undefined ? { splitType } : {}),\n ...(splitPos !== undefined ? { splitPos } : {}),\n ...(custSplit !== undefined ? { custSplit } : {}),\n ...(secondPieSize !== undefined ? { secondPieSize } : {}),\n });\n};\n\n// 3-D parsers — reuse 2-D helpers where the shape matches.\n\nconst parseBar3DChart = (barEl: XmlNode): Bar3DChart => {\n const barDir = (valAttr(findChild(barEl, BAR_DIR_TAG)) ?? 'col') as BarDirection;\n const grouping = (valAttr(findChild(barEl, GROUPING_TAG)) ?? 'clustered') as GroupingType;\n const varyColors = boolVal(findChild(barEl, VARY_COLORS_TAG));\n const gapWidth = intVal(findChild(barEl, GAP_WIDTH_TAG));\n const gapDepth = intVal(findChild(barEl, GAP_DEPTH_TAG));\n const shape = valAttr(findChild(barEl, SHAPE_TAG)) as Bar3DChart['shape'] | undefined;\n return makeBar3DChart({\n barDir,\n grouping,\n series: parseBarSeriesList(barEl),\n axIds: parseAxIds3(barEl),\n ...(varyColors !== undefined ? { varyColors } : {}),\n ...(gapWidth !== undefined ? { gapWidth } : {}),\n ...(gapDepth !== undefined ? { gapDepth } : {}),\n ...(shape !== undefined ? { shape } : {}),\n });\n};\n\nconst parseLine3DChart = (lineEl: XmlNode): Line3DChart => {\n const grouping = (valAttr(findChild(lineEl, GROUPING_TAG)) ?? 'standard') as GroupingType;\n const varyColors = boolVal(findChild(lineEl, VARY_COLORS_TAG));\n const gapDepth = intVal(findChild(lineEl, GAP_DEPTH_TAG));\n const series: LineSeries[] = [];\n for (const ser of findChildren(lineEl, SER_TAG)) {\n const s = parseLineSeries(ser);\n if (s) series.push(s);\n }\n return makeLine3DChart({\n grouping,\n series,\n axIds: parseAxIds3(lineEl),\n ...(varyColors !== undefined ? { varyColors } : {}),\n ...(gapDepth !== undefined ? { gapDepth } : {}),\n });\n};\n\nconst parsePie3DChart = (pieEl: XmlNode): Pie3DChart => {\n const varyColors = boolVal(findChild(pieEl, VARY_COLORS_TAG));\n return makePie3DChart({\n series: parseBarSeriesList(pieEl),\n ...(varyColors !== undefined ? { varyColors } : {}),\n });\n};\n\nconst parseArea3DChart = (areaEl: XmlNode): Area3DChart => {\n const grouping = (valAttr(findChild(areaEl, GROUPING_TAG)) ?? 'standard') as GroupingType;\n const varyColors = boolVal(findChild(areaEl, VARY_COLORS_TAG));\n const gapDepth = intVal(findChild(areaEl, GAP_DEPTH_TAG));\n return makeArea3DChart({\n grouping,\n series: parseBarSeriesList(areaEl),\n axIds: parseAxIds3(areaEl),\n ...(varyColors !== undefined ? { varyColors } : {}),\n ...(gapDepth !== undefined ? { gapDepth } : {}),\n });\n};\n\nconst parseSurface3DChart = (surfaceEl: XmlNode): Surface3DChart => {\n const wireframe = boolVal(findChild(surfaceEl, WIREFRAME_TAG));\n return makeSurface3DChart({\n series: parseBarSeriesList(surfaceEl),\n axIds: parseAxIds3(surfaceEl),\n ...(wireframe !== undefined ? { wireframe } : {}),\n });\n};\n\nconst parsePlotChart = (plotAreaEl: XmlNode): ChartKind => {\n const bar = findChild(plotAreaEl, BAR_CHART_TAG);\n if (bar) return parseBarChart(bar);\n const line = findChild(plotAreaEl, LINE_CHART_TAG);\n if (line) return parseLineChart(line);\n const area = findChild(plotAreaEl, AREA_CHART_TAG);\n if (area) return parseAreaChart(area);\n const pie = findChild(plotAreaEl, PIE_CHART_TAG);\n if (pie) return parsePieChart(pie);\n const donut = findChild(plotAreaEl, DOUGHNUT_CHART_TAG);\n if (donut) return parseDoughnutChart(donut);\n const scatter = findChild(plotAreaEl, SCATTER_CHART_TAG);\n if (scatter) return parseScatterChart(scatter);\n const radar = findChild(plotAreaEl, RADAR_CHART_TAG);\n if (radar) return parseRadarChart(radar);\n const bubble = findChild(plotAreaEl, BUBBLE_CHART_TAG);\n if (bubble) return parseBubbleChart(bubble);\n const stock = findChild(plotAreaEl, STOCK_CHART_TAG);\n if (stock) return parseStockChart(stock);\n const surface = findChild(plotAreaEl, SURFACE_CHART_TAG);\n if (surface) return parseSurfaceChart(surface);\n const ofPie = findChild(plotAreaEl, OF_PIE_CHART_TAG);\n if (ofPie) return parseOfPieChart(ofPie);\n const bar3D = findChild(plotAreaEl, BAR3D_CHART_TAG);\n if (bar3D) return parseBar3DChart(bar3D);\n const line3D = findChild(plotAreaEl, LINE3D_CHART_TAG);\n if (line3D) return parseLine3DChart(line3D);\n const pie3D = findChild(plotAreaEl, PIE3D_CHART_TAG);\n if (pie3D) return parsePie3DChart(pie3D);\n const area3D = findChild(plotAreaEl, AREA3D_CHART_TAG);\n if (area3D) return parseArea3DChart(area3D);\n const surface3D = findChild(plotAreaEl, SURFACE3D_CHART_TAG);\n if (surface3D) return parseSurface3DChart(surface3D);\n throw new OpenXmlSchemaError('parseChartXml: no supported chart kind found inside <plotArea>');\n};\n\nconst VALID_LAYOUT_MODES: ReadonlyArray<string> = ['edge', 'factor'];\nconst VALID_LAYOUT_TARGETS: ReadonlyArray<string> = ['inner', 'outer'];\n\nconst parseLayout = (el: XmlNode): Layout | undefined => {\n const manualEl = findChild(el, MANUAL_LAYOUT_TAG);\n if (!manualEl) return undefined;\n const targetRaw = valAttr(findChild(manualEl, LAYOUT_TARGET_TAG));\n const layoutTarget = targetRaw && VALID_LAYOUT_TARGETS.includes(targetRaw)\n ? (targetRaw as LayoutTarget)\n : undefined;\n const xMode = valAttr(findChild(manualEl, X_MODE_TAG));\n const yMode = valAttr(findChild(manualEl, Y_MODE_TAG));\n const wMode = valAttr(findChild(manualEl, W_MODE_TAG));\n const hMode = valAttr(findChild(manualEl, H_MODE_TAG));\n const x = numberVal(findChild(manualEl, X_TAG));\n const y = numberVal(findChild(manualEl, Y_TAG));\n const w = numberVal(findChild(manualEl, W_TAG));\n const h = numberVal(findChild(manualEl, H_TAG));\n const ml: ManualLayout = {};\n if (layoutTarget) ml.layoutTarget = layoutTarget;\n if (xMode && VALID_LAYOUT_MODES.includes(xMode)) ml.xMode = xMode as LayoutMode;\n if (yMode && VALID_LAYOUT_MODES.includes(yMode)) ml.yMode = yMode as LayoutMode;\n if (wMode && VALID_LAYOUT_MODES.includes(wMode)) ml.wMode = wMode as LayoutMode;\n if (hMode && VALID_LAYOUT_MODES.includes(hMode)) ml.hMode = hMode as LayoutMode;\n if (x !== undefined) ml.x = x;\n if (y !== undefined) ml.y = y;\n if (w !== undefined) ml.w = w;\n if (h !== undefined) ml.h = h;\n return Object.keys(ml).length > 0 ? { manualLayout: ml } : undefined;\n};\n\nconst serializeLayout = (layout: Layout | undefined): string => {\n const ml = layout?.manualLayout;\n if (!ml || Object.keys(ml).length === 0) return '<c:layout/>';\n const parts: string[] = ['<c:layout><c:manualLayout>'];\n if (ml.layoutTarget) parts.push(`<c:layoutTarget val=\"${ml.layoutTarget}\"/>`);\n if (ml.xMode) parts.push(`<c:xMode val=\"${ml.xMode}\"/>`);\n if (ml.yMode) parts.push(`<c:yMode val=\"${ml.yMode}\"/>`);\n if (ml.wMode) parts.push(`<c:wMode val=\"${ml.wMode}\"/>`);\n if (ml.hMode) parts.push(`<c:hMode val=\"${ml.hMode}\"/>`);\n if (ml.x !== undefined) parts.push(`<c:x val=\"${ml.x}\"/>`);\n if (ml.y !== undefined) parts.push(`<c:y val=\"${ml.y}\"/>`);\n if (ml.w !== undefined) parts.push(`<c:w val=\"${ml.w}\"/>`);\n if (ml.h !== undefined) parts.push(`<c:h val=\"${ml.h}\"/>`);\n parts.push('</c:manualLayout></c:layout>');\n return parts.join('');\n};\n\nconst parseView3D = (el: XmlNode): View3D | undefined => {\n const rotX = intVal(findChild(el, ROT_X_TAG));\n const rotY = intVal(findChild(el, ROT_Y_TAG));\n const hPercent = intVal(findChild(el, H_PERCENT_TAG));\n const depthPercent = intVal(findChild(el, DEPTH_PERCENT_TAG));\n const rAngAx = boolVal(findChild(el, R_ANG_AX_TAG));\n const perspective = intVal(findChild(el, PERSPECTIVE_TAG));\n const out: View3D = {};\n if (rotX !== undefined) out.rotX = rotX;\n if (rotY !== undefined) out.rotY = rotY;\n if (depthPercent !== undefined) out.depthPercent = depthPercent;\n if (hPercent !== undefined) out.hPercent = hPercent;\n if (rAngAx !== undefined) out.rAngAx = rAngAx;\n if (perspective !== undefined) out.perspective = perspective;\n return Object.keys(out).length > 0 ? out : undefined;\n};\n\nconst serializeView3D = (v: View3D): string => {\n // ECMA-376 order: rotX, hPercent, rotY, depthPercent, rAngAx, perspective.\n const parts: string[] = ['<c:view3D>'];\n if (v.rotX !== undefined) parts.push(`<c:rotX val=\"${v.rotX}\"/>`);\n if (v.hPercent !== undefined) parts.push(`<c:hPercent val=\"${v.hPercent}\"/>`);\n if (v.rotY !== undefined) parts.push(`<c:rotY val=\"${v.rotY}\"/>`);\n if (v.depthPercent !== undefined) parts.push(`<c:depthPercent val=\"${v.depthPercent}\"/>`);\n if (v.rAngAx !== undefined) parts.push(`<c:rAngAx val=\"${v.rAngAx ? '1' : '0'}\"/>`);\n if (v.perspective !== undefined) parts.push(`<c:perspective val=\"${v.perspective}\"/>`);\n parts.push('</c:view3D>');\n return parts.join('');\n};\n\nconst parseSurfaceFrame = (el: XmlNode): SurfaceFrame | undefined => {\n const thickness = intVal(findChild(el, THICKNESS_TAG));\n const spPr = parseSpPrSlot(el);\n const out: SurfaceFrame = {};\n if (thickness !== undefined) out.thickness = thickness;\n if (spPr) out.spPr = spPr;\n return Object.keys(out).length > 0 ? out : undefined;\n};\n\nconst serializeSurfaceFrame = (tag: 'floor' | 'sideWall' | 'backWall', f: SurfaceFrame): string => {\n const parts: string[] = [`<c:${tag}>`];\n if (f.thickness !== undefined) parts.push(`<c:thickness val=\"${f.thickness}\"/>`);\n if (f.spPr) parts.push(serializeShapeProperties(f.spPr));\n parts.push(`</c:${tag}>`);\n return parts.join('');\n};\n\nconst VALID_TICK_MARKS: ReadonlyArray<string> = ['cross', 'in', 'none', 'out'];\nconst VALID_TICK_LBL_POS: ReadonlyArray<string> = ['high', 'low', 'nextTo', 'none'];\nconst VALID_AXIS_CROSSES: ReadonlyArray<string> = ['autoZero', 'max', 'min'];\nconst VALID_ORIENTATIONS: ReadonlyArray<string> = ['maxMin', 'minMax'];\nconst VALID_CROSS_BETWEEN: ReadonlyArray<string> = ['between', 'midCat'];\nconst VALID_CAT_LABEL_ALIGN: ReadonlyArray<string> = ['ctr', 'l', 'r'];\n\nconst numberVal = (el: XmlNode | undefined): number | undefined => {\n if (!el) return undefined;\n const raw = valAttr(el);\n if (raw === undefined) return undefined;\n const n = Number(raw);\n return Number.isFinite(n) ? n : undefined;\n};\n\nconst parseScaling = (axEl: XmlNode): AxisScaling | undefined => {\n const sc = findChild(axEl, SCALING_TAG);\n if (!sc) return undefined;\n const orientationRaw = valAttr(findChild(sc, ORIENTATION_TAG));\n // `minMax` is the implicit ECMA-376 default and the value the serializer\n // emits when scaling is unset, so treat it as \"no user override\".\n const orientation = orientationRaw && VALID_ORIENTATIONS.includes(orientationRaw) && orientationRaw !== 'minMax'\n ? (orientationRaw as AxisOrientation)\n : undefined;\n const min = numberVal(findChild(sc, MIN_TAG));\n const max = numberVal(findChild(sc, MAX_TAG));\n const logBase = numberVal(findChild(sc, LOG_BASE_TAG));\n const out: AxisScaling = {};\n if (orientation !== undefined) out.orientation = orientation;\n if (min !== undefined) out.min = min;\n if (max !== undefined) out.max = max;\n if (logBase !== undefined) out.logBase = logBase;\n return Object.keys(out).length > 0 ? out : undefined;\n};\n\nconst serializeScaling = (s: AxisScaling | undefined): string => {\n const parts: string[] = ['<c:scaling>'];\n parts.push(`<c:orientation val=\"${s?.orientation ?? 'minMax'}\"/>`);\n if (s?.logBase !== undefined) parts.push(`<c:logBase val=\"${s.logBase}\"/>`);\n if (s?.max !== undefined) parts.push(`<c:max val=\"${s.max}\"/>`);\n if (s?.min !== undefined) parts.push(`<c:min val=\"${s.min}\"/>`);\n parts.push('</c:scaling>');\n return parts.join('');\n};\n\nconst parseAxisCommon = (\n axEl: XmlNode,\n): {\n axId: number;\n crossAx: number;\n position?: 'b' | 't' | 'l' | 'r';\n delete?: boolean;\n majorGridlines?: boolean | Gridlines;\n minorGridlines?: boolean | Gridlines;\n spPr?: ShapeProperties;\n txPr?: TextBody;\n title?: ChartTitle;\n numFmt?: ChartNumberFormat;\n majorTickMark?: TickMark;\n minorTickMark?: TickMark;\n tickLblPos?: TickLabelPosition;\n scaling?: AxisScaling;\n crosses?: AxisCrosses;\n crossesAt?: number;\n} => {\n const axId = intVal(findChild(axEl, AX_ID_TAG)) ?? 0;\n const crossAx = intVal(findChild(axEl, CROSS_AX_TAG)) ?? 0;\n const positionRaw = valAttr(findChild(axEl, AX_POS_TAG));\n const validPos = positionRaw === 'b' || positionRaw === 't' || positionRaw === 'l' || positionRaw === 'r';\n const del = boolVal(findChild(axEl, DELETE_TAG));\n const majorGridlines = parseGridlines(axEl, MAJOR_GRIDLINES_TAG);\n const minorGridlines = parseGridlines(axEl, MINOR_GRIDLINES_TAG);\n const spPr = parseSpPrSlot(axEl);\n const txPr = parseTxPrSlot(axEl);\n const titleEl = findChild(axEl, TITLE_TAG);\n const title = titleEl ? parseChartTitle(titleEl) : undefined;\n const numFmt = parseNumberFormat(findChild(axEl, NUM_FMT_TAG));\n // Excel inserts `<c:numFmt formatCode=\"General\" sourceLinked=\"1\"/>` as a default,\n // so we treat that exact pair as \"no user-provided override\" to keep round-trip\n // output minimal for callers who didn't set numFmt.\n const userNumFmt = numFmt && (numFmt.formatCode !== 'General' || numFmt.sourceLinked !== true) ? numFmt : undefined;\n const majorRaw = valAttr(findChild(axEl, MAJOR_TICK_MARK_TAG));\n const majorTickMark = majorRaw && VALID_TICK_MARKS.includes(majorRaw) && majorRaw !== 'out'\n ? (majorRaw as TickMark)\n : undefined;\n const minorRaw = valAttr(findChild(axEl, MINOR_TICK_MARK_TAG));\n const minorTickMark = minorRaw && VALID_TICK_MARKS.includes(minorRaw) && minorRaw !== 'none'\n ? (minorRaw as TickMark)\n : undefined;\n const tickLblPosRaw = valAttr(findChild(axEl, TICK_LBL_POS_TAG));\n const tickLblPos = tickLblPosRaw && VALID_TICK_LBL_POS.includes(tickLblPosRaw) && tickLblPosRaw !== 'nextTo'\n ? (tickLblPosRaw as TickLabelPosition)\n : undefined;\n const crossesRaw = valAttr(findChild(axEl, CROSSES_TAG));\n const crosses = crossesRaw && VALID_AXIS_CROSSES.includes(crossesRaw) && crossesRaw !== 'autoZero'\n ? (crossesRaw as AxisCrosses)\n : undefined;\n const crossesAt = numberVal(findChild(axEl, CROSSES_AT_TAG));\n const scaling = parseScaling(axEl);\n return {\n axId,\n crossAx,\n ...(validPos ? { position: positionRaw as 'b' | 't' | 'l' | 'r' } : {}),\n ...(del !== undefined ? { delete: del } : {}),\n ...(majorGridlines !== undefined ? { majorGridlines } : {}),\n ...(minorGridlines !== undefined ? { minorGridlines } : {}),\n ...(spPr ? { spPr } : {}),\n ...(txPr ? { txPr } : {}),\n ...(title ? { title } : {}),\n ...(userNumFmt ? { numFmt: userNumFmt } : {}),\n ...(majorTickMark ? { majorTickMark } : {}),\n ...(minorTickMark ? { minorTickMark } : {}),\n ...(tickLblPos ? { tickLblPos } : {}),\n ...(scaling ? { scaling } : {}),\n ...(crosses ? { crosses } : {}),\n ...(crossesAt !== undefined ? { crossesAt } : {}),\n };\n};\n\nconst parseCategoryAxis = (axEl: XmlNode): CategoryAxis => {\n const base = parseAxisCommon(axEl);\n const auto = boolVal(findChild(axEl, AUTO_TAG));\n // <c:auto val=\"1\"/> is the default Excel emits, so treat the literal \"1\" as\n // \"no user override\" to keep round-trip output minimal.\n const userAuto = auto === false ? false : undefined;\n const lblAlgnRaw = valAttr(findChild(axEl, LBL_ALGN_TAG));\n const lblAlgn = lblAlgnRaw && VALID_CAT_LABEL_ALIGN.includes(lblAlgnRaw) && lblAlgnRaw !== 'ctr'\n ? (lblAlgnRaw as CategoryLabelAlignment)\n : undefined;\n const lblOffsetRaw = intVal(findChild(axEl, LBL_OFFSET_TAG));\n const lblOffset = lblOffsetRaw !== undefined && lblOffsetRaw !== 100 ? lblOffsetRaw : undefined;\n const noMultiLvlLbl = boolVal(findChild(axEl, NO_MULTI_LVL_LBL_TAG));\n const userNoMultiLvlLbl = noMultiLvlLbl === true ? true : undefined;\n return {\n ...base,\n ...(userAuto !== undefined ? { auto: userAuto } : {}),\n ...(lblAlgn ? { lblAlgn } : {}),\n ...(lblOffset !== undefined ? { lblOffset } : {}),\n ...(userNoMultiLvlLbl !== undefined ? { noMultiLvlLbl: userNoMultiLvlLbl } : {}),\n };\n};\n\nconst VALID_TIME_UNITS: ReadonlyArray<string> = ['days', 'months', 'years'];\n\nconst BASE_TIME_UNIT_TAG = `{${CHART_NS}}baseTimeUnit`;\nconst MAJOR_TIME_UNIT_TAG = `{${CHART_NS}}majorTimeUnit`;\nconst MINOR_TIME_UNIT_TAG = `{${CHART_NS}}minorTimeUnit`;\nconst TICK_LBL_SKIP_TAG = `{${CHART_NS}}tickLblSkip`;\nconst TICK_MARK_SKIP_TAG = `{${CHART_NS}}tickMarkSkip`;\n\nconst parseDateAxis = (axEl: XmlNode): DateAxis => {\n const base = parseAxisCommon(axEl);\n const auto = boolVal(findChild(axEl, AUTO_TAG));\n const userAuto = auto === false ? false : undefined;\n const lblOffsetRaw = intVal(findChild(axEl, LBL_OFFSET_TAG));\n const lblOffset = lblOffsetRaw !== undefined && lblOffsetRaw !== 100 ? lblOffsetRaw : undefined;\n const baseTimeUnitRaw = valAttr(findChild(axEl, BASE_TIME_UNIT_TAG));\n const baseTimeUnit = baseTimeUnitRaw && VALID_TIME_UNITS.includes(baseTimeUnitRaw)\n ? (baseTimeUnitRaw as TimeUnit)\n : undefined;\n const majorUnit = numberVal(findChild(axEl, MAJOR_UNIT_TAG));\n const majorTimeUnitRaw = valAttr(findChild(axEl, MAJOR_TIME_UNIT_TAG));\n const majorTimeUnit = majorTimeUnitRaw && VALID_TIME_UNITS.includes(majorTimeUnitRaw)\n ? (majorTimeUnitRaw as TimeUnit)\n : undefined;\n const minorUnit = numberVal(findChild(axEl, MINOR_UNIT_TAG));\n const minorTimeUnitRaw = valAttr(findChild(axEl, MINOR_TIME_UNIT_TAG));\n const minorTimeUnit = minorTimeUnitRaw && VALID_TIME_UNITS.includes(minorTimeUnitRaw)\n ? (minorTimeUnitRaw as TimeUnit)\n : undefined;\n return {\n ...base,\n ...(userAuto !== undefined ? { auto: userAuto } : {}),\n ...(lblOffset !== undefined ? { lblOffset } : {}),\n ...(baseTimeUnit ? { baseTimeUnit } : {}),\n ...(majorUnit !== undefined ? { majorUnit } : {}),\n ...(majorTimeUnit ? { majorTimeUnit } : {}),\n ...(minorUnit !== undefined ? { minorUnit } : {}),\n ...(minorTimeUnit ? { minorTimeUnit } : {}),\n };\n};\n\nconst parseSeriesAxis = (axEl: XmlNode): SeriesAxis => {\n const base = parseAxisCommon(axEl);\n const tickLblSkip = intVal(findChild(axEl, TICK_LBL_SKIP_TAG));\n const tickMarkSkip = intVal(findChild(axEl, TICK_MARK_SKIP_TAG));\n return {\n ...base,\n ...(tickLblSkip !== undefined ? { tickLblSkip } : {}),\n ...(tickMarkSkip !== undefined ? { tickMarkSkip } : {}),\n };\n};\n\nconst parseValueAxis = (axEl: XmlNode): ValueAxis => {\n const base = parseAxisCommon(axEl);\n const crossBetweenRaw = valAttr(findChild(axEl, CROSS_BETWEEN_TAG));\n const crossBetween = crossBetweenRaw && VALID_CROSS_BETWEEN.includes(crossBetweenRaw) && crossBetweenRaw !== 'between'\n ? (crossBetweenRaw as AxisCrossBetween)\n : undefined;\n const majorUnit = numberVal(findChild(axEl, MAJOR_UNIT_TAG));\n const minorUnit = numberVal(findChild(axEl, MINOR_UNIT_TAG));\n return {\n ...base,\n ...(crossBetween ? { crossBetween } : {}),\n ...(majorUnit !== undefined ? { majorUnit } : {}),\n ...(minorUnit !== undefined ? { minorUnit } : {}),\n };\n};\n\n/** Parse a `xl/charts/chartN.xml` payload. */\nexport function parseChartXml(bytes: Uint8Array | string): ChartSpace {\n const root = parseXml(bytes);\n if (root.name !== CHART_SPACE_TAG) {\n throw new OpenXmlSchemaError(`parseChartXml: root is \"${root.name}\", expected chartSpace`);\n }\n const chartEl = findChild(root, CHART_TAG);\n if (!chartEl) throw new OpenXmlSchemaError('parseChartXml: <chartSpace> missing <chart>');\n const plotAreaEl = findChild(chartEl, PLOT_AREA_TAG);\n if (!plotAreaEl) throw new OpenXmlSchemaError('parseChartXml: <chart> missing <plotArea>');\n const chart = parsePlotChart(plotAreaEl);\n const catAxEl = findChild(plotAreaEl, CAT_AX_TAG);\n const valAxEl = findChild(plotAreaEl, VAL_AX_TAG);\n const plotAreaSpPr = parseSpPrSlot(plotAreaEl);\n const plotArea: PlotArea = {\n chart,\n ...(catAxEl ? { catAx: parseCategoryAxis(catAxEl) } : {}),\n ...(valAxEl ? { valAx: parseValueAxis(valAxEl) } : {}),\n ...((): { dateAx?: DateAxis; serAx?: SeriesAxis; layout?: Layout } => {\n const out: { dateAx?: DateAxis; serAx?: SeriesAxis; layout?: Layout } = {};\n const dateAxEl = findChild(plotAreaEl, DATE_AX_TAG);\n if (dateAxEl) out.dateAx = parseDateAxis(dateAxEl);\n const serAxEl = findChild(plotAreaEl, SER_AX_TAG);\n if (serAxEl) out.serAx = parseSeriesAxis(serAxEl);\n const layoutEl = findChild(plotAreaEl, LAYOUT_TAG);\n if (layoutEl) {\n const layout = parseLayout(layoutEl);\n if (layout) out.layout = layout;\n }\n return out;\n })(),\n ...(plotAreaSpPr ? { spPr: plotAreaSpPr } : {}),\n };\n const titleEl = findChild(chartEl, TITLE_TAG);\n const title = titleEl ? parseChartTitle(titleEl) : undefined;\n const legendEl = findChild(chartEl, LEGEND_TAG);\n let legend: Legend | undefined;\n if (legendEl) {\n const posRaw = valAttr(findChild(legendEl, LEGEND_POS_TAG)) as LegendPosition | undefined;\n const overlay = boolVal(findChild(legendEl, OVERLAY_TAG));\n const legendSpPr = parseSpPrSlot(legendEl);\n const legendTxPr = parseTxPrSlot(legendEl);\n const legendLayoutEl = findChild(legendEl, LAYOUT_TAG);\n const legendLayout = legendLayoutEl ? parseLayout(legendLayoutEl) : undefined;\n legend = {\n position: posRaw ?? 'r',\n ...(overlay !== undefined ? { overlay } : {}),\n ...(legendLayout ? { layout: legendLayout } : {}),\n ...(legendSpPr ? { spPr: legendSpPr } : {}),\n ...(legendTxPr ? { txPr: legendTxPr } : {}),\n };\n }\n const plotVisOnly = boolVal(findChild(chartEl, PLOT_VIS_ONLY_TAG));\n const dispBlanksAs = valAttr(findChild(chartEl, DISP_BLANKS_AS_TAG)) as ChartSpace['dispBlanksAs'];\n const style = intVal(findChild(root, STYLE_TAG));\n const view3DEl = findChild(chartEl, VIEW3D_TAG);\n const view3D = view3DEl ? parseView3D(view3DEl) : undefined;\n const floorEl = findChild(chartEl, FLOOR_TAG);\n const floor = floorEl ? parseSurfaceFrame(floorEl) : undefined;\n const sideWallEl = findChild(chartEl, SIDE_WALL_TAG);\n const sideWall = sideWallEl ? parseSurfaceFrame(sideWallEl) : undefined;\n const backWallEl = findChild(chartEl, BACK_WALL_TAG);\n const backWall = backWallEl ? parseSurfaceFrame(backWallEl) : undefined;\n // Top-level spPr / txPr live on chartSpace (sibling of <c:chart>), not inside\n // <c:chart>.\n const spaceSpPr = parseSpPrSlot(root);\n const spaceTxPr = parseTxPrSlot(root);\n return makeChartSpace({\n plotArea,\n ...(title !== undefined ? { title } : {}),\n ...(legend ? { legend } : {}),\n ...(style !== undefined ? { style } : {}),\n ...(view3D ? { view3D } : {}),\n ...(floor ? { floor } : {}),\n ...(sideWall ? { sideWall } : {}),\n ...(backWall ? { backWall } : {}),\n ...(plotVisOnly !== undefined ? { plotVisOnly } : {}),\n ...(dispBlanksAs ? { dispBlanksAs } : {}),\n ...(spaceSpPr ? { spPr: spaceSpPr } : {}),\n ...(spaceTxPr ? { txPr: spaceTxPr } : {}),\n });\n}\n\nconst serializeNumCache = (cache: ReadonlyArray<number>, formatCode?: string): string => {\n const parts: string[] = ['<c:numCache>'];\n if (formatCode) parts.push(`<c:formatCode>${escapeText(formatCode)}</c:formatCode>`);\n parts.push(`<c:ptCount val=\"${cache.length}\"/>`);\n for (let i = 0; i < cache.length; i++) {\n const v = cache[i] as number;\n parts.push(`<c:pt idx=\"${i}\"><c:v>${escapeText(String(v))}</c:v></c:pt>`);\n }\n parts.push('</c:numCache>');\n return parts.join('');\n};\n\nconst serializeStrCache = (cache: ReadonlyArray<string | number>): string => {\n const parts: string[] = ['<c:strCache>', `<c:ptCount val=\"${cache.length}\"/>`];\n for (let i = 0; i < cache.length; i++) {\n const v = cache[i] as string | number;\n parts.push(`<c:pt idx=\"${i}\"><c:v>${escapeText(String(v))}</c:v></c:pt>`);\n }\n parts.push('</c:strCache>');\n return parts.join('');\n};\n\nconst serializeNumericRef = (tag: string, ref: NumericRef): string => {\n const inner = ref.cache !== undefined ? serializeNumCache(ref.cache, ref.formatCode) : '';\n return `<c:${tag}><c:numRef><c:f>${escapeText(ref.ref)}</c:f>${inner}</c:numRef></c:${tag}>`;\n};\n\nconst serializeCategoryRef = (cat: CategoryRef): string => {\n if (\n cat.cacheKind === 'str' ||\n (cat.cacheKind !== 'num' && cat.cache && cat.cache.some((v) => typeof v === 'string'))\n ) {\n const inner = cat.cache !== undefined ? serializeStrCache(cat.cache) : '';\n return `<c:cat><c:strRef><c:f>${escapeText(cat.ref)}</c:f>${inner}</c:strRef></c:cat>`;\n }\n const numericCache = cat.cache as number[] | undefined;\n const inner = numericCache !== undefined ? serializeNumCache(numericCache, cat.formatCode) : '';\n return `<c:cat><c:numRef><c:f>${escapeText(cat.ref)}</c:f>${inner}</c:numRef></c:cat>`;\n};\n\nconst serializeSeries = (s: BarSeries, marker?: Marker): string => {\n const parts: string[] = ['<c:ser>', `<c:idx val=\"${s.idx}\"/>`, `<c:order val=\"${s.order}\"/>`];\n if (s.tx) {\n if (s.tx.kind === 'literal') {\n parts.push(`<c:tx><c:strRef><c:f></c:f>${serializeStrCache([s.tx.value])}</c:strRef></c:tx>`);\n } else {\n parts.push(`<c:tx><c:strRef><c:f>${escapeText(s.tx.ref)}</c:f></c:strRef></c:tx>`);\n }\n }\n if (s.spPr) parts.push(serializeShapeProperties(s.spPr));\n // ECMA-376 places per-chart-kind elements after <c:spPr> and before <c:dPt>.\n // Each chart kind only sets the relevant one of marker / invertIfNegative /\n // explosion, so the merged order below produces a schema-valid sequence for\n // every kind that shares this helper (bar / line / area / pie / doughnut /\n // radar / stock / surface).\n if (marker) parts.push(serializeMarker(marker));\n if (s.invertIfNegative !== undefined) {\n parts.push(`<c:invertIfNegative val=\"${s.invertIfNegative ? '1' : '0'}\"/>`);\n }\n if (s.explosion !== undefined) parts.push(`<c:explosion val=\"${s.explosion}\"/>`);\n if (s.dPt) for (const p of s.dPt) parts.push(serializeDataPoint(p));\n if (s.dLbls) parts.push(serializeDataLabelList(s.dLbls));\n if (s.trendline) for (const t of s.trendline) parts.push(serializeTrendline(t));\n if (s.errBars) for (const e of s.errBars) parts.push(serializeErrBars(e));\n if (s.cat) parts.push(serializeCategoryRef(s.cat));\n parts.push(serializeNumericRef('val', s.val));\n parts.push('</c:ser>');\n return parts.join('');\n};\n\nconst serializeBarChart = (chart: BarChart): string => {\n const parts: string[] = [\n '<c:barChart>',\n `<c:barDir val=\"${chart.barDir}\"/>`,\n `<c:grouping val=\"${chart.grouping}\"/>`,\n `<c:varyColors val=\"${chart.varyColors ? '1' : '0'}\"/>`,\n ];\n for (const s of chart.series) parts.push(serializeSeries(s));\n parts.push(`<c:gapWidth val=\"${chart.gapWidth ?? 150}\"/>`);\n if (chart.overlap !== undefined) {\n parts.push(`<c:overlap val=\"${chart.overlap}\"/>`);\n } else if (chart.grouping === 'stacked' || chart.grouping === 'percentStacked') {\n parts.push('<c:overlap val=\"100\"/>');\n }\n parts.push(`<c:axId val=\"${chart.axIds[0]}\"/>`);\n parts.push(`<c:axId val=\"${chart.axIds[1]}\"/>`);\n parts.push('</c:barChart>');\n return parts.join('');\n};\n\nconst serializeLineSeries = (s: LineSeries): string => {\n const base = serializeSeries(s, s.marker);\n if (s.smooth === undefined) return base;\n // Inject smooth before </c:ser> (cheap inline patch).\n return base.replace('</c:ser>', `<c:smooth val=\"${s.smooth ? '1' : '0'}\"/></c:ser>`);\n};\n\nconst serializeLineChart = (chart: LineChart): string => {\n const parts: string[] = [\n '<c:lineChart>',\n `<c:grouping val=\"${chart.grouping}\"/>`,\n `<c:varyColors val=\"${chart.varyColors ? '1' : '0'}\"/>`,\n ];\n for (const s of chart.series) parts.push(serializeLineSeries(s));\n if (chart.smooth !== undefined) parts.push(`<c:smooth val=\"${chart.smooth ? '1' : '0'}\"/>`);\n parts.push(`<c:axId val=\"${chart.axIds[0]}\"/>`);\n parts.push(`<c:axId val=\"${chart.axIds[1]}\"/>`);\n parts.push('</c:lineChart>');\n return parts.join('');\n};\n\nconst serializeAreaChart = (chart: AreaChart): string => {\n const parts: string[] = [\n '<c:areaChart>',\n `<c:grouping val=\"${chart.grouping}\"/>`,\n `<c:varyColors val=\"${chart.varyColors ? '1' : '0'}\"/>`,\n ];\n for (const s of chart.series) parts.push(serializeSeries(s));\n parts.push(`<c:axId val=\"${chart.axIds[0]}\"/>`);\n parts.push(`<c:axId val=\"${chart.axIds[1]}\"/>`);\n parts.push('</c:areaChart>');\n return parts.join('');\n};\n\nconst serializePieChart = (chart: PieChart): string => {\n const parts: string[] = ['<c:pieChart>', `<c:varyColors val=\"${(chart.varyColors ?? true) ? '1' : '0'}\"/>`];\n for (const s of chart.series) parts.push(serializeSeries(s));\n parts.push('</c:pieChart>');\n return parts.join('');\n};\n\nconst serializeDoughnutChart = (chart: DoughnutChart): string => {\n const parts: string[] = ['<c:doughnutChart>', `<c:varyColors val=\"${(chart.varyColors ?? true) ? '1' : '0'}\"/>`];\n for (const s of chart.series) parts.push(serializeSeries(s));\n parts.push(`<c:firstSliceAng val=\"${chart.firstSliceAng ?? 0}\"/>`);\n parts.push(`<c:holeSize val=\"${chart.holeSize ?? 50}\"/>`);\n parts.push('</c:doughnutChart>');\n return parts.join('');\n};\n\nconst serializeScatterSeries = (s: ScatterSeries): string => {\n const parts: string[] = ['<c:ser>', `<c:idx val=\"${s.idx}\"/>`, `<c:order val=\"${s.order}\"/>`];\n if (s.tx) {\n if (s.tx.kind === 'literal') {\n parts.push(`<c:tx><c:strRef><c:f></c:f>${serializeStrCache([s.tx.value])}</c:strRef></c:tx>`);\n } else {\n parts.push(`<c:tx><c:strRef><c:f>${escapeText(s.tx.ref)}</c:f></c:strRef></c:tx>`);\n }\n }\n if (s.spPr) parts.push(serializeShapeProperties(s.spPr));\n if (s.marker) parts.push(serializeMarker(s.marker));\n if (s.dPt) for (const p of s.dPt) parts.push(serializeDataPoint(p));\n if (s.dLbls) parts.push(serializeDataLabelList(s.dLbls));\n if (s.trendline) for (const t of s.trendline) parts.push(serializeTrendline(t));\n if (s.errBars) for (const e of s.errBars) parts.push(serializeErrBars(e));\n if (s.xVal) parts.push(serializeNumericRef('xVal', s.xVal));\n parts.push(serializeNumericRef('yVal', s.yVal));\n if (s.smooth !== undefined) parts.push(`<c:smooth val=\"${s.smooth ? '1' : '0'}\"/>`);\n parts.push('</c:ser>');\n return parts.join('');\n};\n\nconst serializeScatterChart = (chart: ScatterChart): string => {\n const parts: string[] = [\n '<c:scatterChart>',\n `<c:scatterStyle val=\"${chart.scatterStyle}\"/>`,\n `<c:varyColors val=\"${chart.varyColors ? '1' : '0'}\"/>`,\n ];\n for (const s of chart.series) parts.push(serializeScatterSeries(s));\n parts.push(`<c:axId val=\"${chart.axIds[0]}\"/>`);\n parts.push(`<c:axId val=\"${chart.axIds[1]}\"/>`);\n parts.push('</c:scatterChart>');\n return parts.join('');\n};\n\nconst serializeRadarChart = (chart: RadarChart): string => {\n const parts: string[] = [\n '<c:radarChart>',\n `<c:radarStyle val=\"${chart.radarStyle}\"/>`,\n `<c:varyColors val=\"${chart.varyColors ? '1' : '0'}\"/>`,\n ];\n for (const s of chart.series) parts.push(serializeSeries(s));\n parts.push(`<c:axId val=\"${chart.axIds[0]}\"/>`);\n parts.push(`<c:axId val=\"${chart.axIds[1]}\"/>`);\n parts.push('</c:radarChart>');\n return parts.join('');\n};\n\nconst serializeBubbleSeries = (s: BubbleSeries): string => {\n const parts: string[] = ['<c:ser>', `<c:idx val=\"${s.idx}\"/>`, `<c:order val=\"${s.order}\"/>`];\n if (s.tx) {\n if (s.tx.kind === 'literal') {\n parts.push(`<c:tx><c:strRef><c:f></c:f>${serializeStrCache([s.tx.value])}</c:strRef></c:tx>`);\n } else {\n parts.push(`<c:tx><c:strRef><c:f>${escapeText(s.tx.ref)}</c:f></c:strRef></c:tx>`);\n }\n }\n if (s.spPr) parts.push(serializeShapeProperties(s.spPr));\n if (s.invertIfNegative !== undefined) {\n parts.push(`<c:invertIfNegative val=\"${s.invertIfNegative ? '1' : '0'}\"/>`);\n }\n if (s.dPt) for (const p of s.dPt) parts.push(serializeDataPoint(p));\n if (s.dLbls) parts.push(serializeDataLabelList(s.dLbls));\n if (s.trendline) for (const t of s.trendline) parts.push(serializeTrendline(t));\n if (s.errBars) for (const e of s.errBars) parts.push(serializeErrBars(e));\n if (s.xVal) parts.push(serializeNumericRef('xVal', s.xVal));\n parts.push(serializeNumericRef('yVal', s.yVal));\n parts.push(serializeNumericRef('bubbleSize', s.bubbleSize));\n if (s.bubble3D !== undefined) parts.push(`<c:bubble3D val=\"${s.bubble3D ? '1' : '0'}\"/>`);\n parts.push('</c:ser>');\n return parts.join('');\n};\n\nconst serializeBubbleChart = (chart: BubbleChart): string => {\n const parts: string[] = ['<c:bubbleChart>'];\n if (chart.varyColors !== undefined) parts.push(`<c:varyColors val=\"${chart.varyColors ? '1' : '0'}\"/>`);\n for (const s of chart.series) parts.push(serializeBubbleSeries(s));\n if (chart.bubble3D !== undefined) parts.push(`<c:bubble3D val=\"${chart.bubble3D ? '1' : '0'}\"/>`);\n if (chart.bubbleScale !== undefined) parts.push(`<c:bubbleScale val=\"${chart.bubbleScale}\"/>`);\n if (chart.showNegBubbles !== undefined) parts.push(`<c:showNegBubbles val=\"${chart.showNegBubbles ? '1' : '0'}\"/>`);\n if (chart.sizeRepresents !== undefined) parts.push(`<c:sizeRepresents val=\"${chart.sizeRepresents}\"/>`);\n parts.push(`<c:axId val=\"${chart.axIds[0]}\"/>`);\n parts.push(`<c:axId val=\"${chart.axIds[1]}\"/>`);\n parts.push('</c:bubbleChart>');\n return parts.join('');\n};\n\nconst serializeHiLowLines = (h: boolean | HiLowLines): string => {\n if (h === true) return '<c:hiLowLines/>';\n if (h === false) return '';\n if (!h.spPr) return '<c:hiLowLines/>';\n return `<c:hiLowLines>${serializeShapeProperties(h.spPr)}</c:hiLowLines>`;\n};\n\nconst serializeUpDownBars = (u: boolean | UpDownBars): string => {\n if (u === true) return '<c:upDownBars><c:gapWidth val=\"150\"/></c:upDownBars>';\n if (u === false) return '';\n const parts: string[] = ['<c:upDownBars>'];\n parts.push(`<c:gapWidth val=\"${u.gapWidth ?? 150}\"/>`);\n if (u.upBars) {\n parts.push(u.upBars.spPr ? `<c:upBars>${serializeShapeProperties(u.upBars.spPr)}</c:upBars>` : '<c:upBars/>');\n }\n if (u.downBars) {\n parts.push(\n u.downBars.spPr ? `<c:downBars>${serializeShapeProperties(u.downBars.spPr)}</c:downBars>` : '<c:downBars/>',\n );\n }\n parts.push('</c:upDownBars>');\n return parts.join('');\n};\n\nconst serializeStockChart = (chart: StockChart): string => {\n const parts: string[] = ['<c:stockChart>'];\n for (const s of chart.series) parts.push(serializeSeries(s));\n if (chart.hiLowLines !== undefined) parts.push(serializeHiLowLines(chart.hiLowLines));\n if (chart.upDownBars !== undefined) parts.push(serializeUpDownBars(chart.upDownBars));\n parts.push(`<c:axId val=\"${chart.axIds[0]}\"/>`);\n parts.push(`<c:axId val=\"${chart.axIds[1]}\"/>`);\n parts.push('</c:stockChart>');\n return parts.join('');\n};\n\nconst serializeSurfaceChart = (chart: SurfaceChart): string => {\n const parts: string[] = ['<c:surfaceChart>'];\n if (chart.wireframe !== undefined) parts.push(`<c:wireframe val=\"${chart.wireframe ? '1' : '0'}\"/>`);\n for (const s of chart.series) parts.push(serializeSeries(s));\n parts.push(`<c:axId val=\"${chart.axIds[0]}\"/>`);\n parts.push(`<c:axId val=\"${chart.axIds[1]}\"/>`);\n parts.push(`<c:axId val=\"${chart.axIds[2]}\"/>`);\n parts.push('</c:surfaceChart>');\n return parts.join('');\n};\n\nconst serializeOfPieChart = (chart: OfPieChart): string => {\n const parts: string[] = ['<c:ofPieChart>', `<c:ofPieType val=\"${chart.ofPieType}\"/>`];\n if (chart.varyColors !== undefined) parts.push(`<c:varyColors val=\"${chart.varyColors ? '1' : '0'}\"/>`);\n for (const s of chart.series) parts.push(serializeSeries(s));\n if (chart.gapWidth !== undefined) parts.push(`<c:gapWidth val=\"${chart.gapWidth}\"/>`);\n if (chart.splitType !== undefined) parts.push(`<c:splitType val=\"${chart.splitType}\"/>`);\n if (chart.splitPos !== undefined) parts.push(`<c:splitPos val=\"${chart.splitPos}\"/>`);\n if (chart.custSplit !== undefined) {\n parts.push('<c:custSplit>');\n for (const idx of chart.custSplit) parts.push(`<c:secondaryPt idx=\"${idx}\"/>`);\n parts.push('</c:custSplit>');\n }\n if (chart.secondPieSize !== undefined) parts.push(`<c:secondPieSize val=\"${chart.secondPieSize}\"/>`);\n parts.push('</c:ofPieChart>');\n return parts.join('');\n};\n\nconst serializeBar3DChart = (chart: Bar3DChart): string => {\n const parts: string[] = [\n '<c:bar3DChart>',\n `<c:barDir val=\"${chart.barDir}\"/>`,\n `<c:grouping val=\"${chart.grouping}\"/>`,\n ];\n if (chart.varyColors !== undefined) parts.push(`<c:varyColors val=\"${chart.varyColors ? '1' : '0'}\"/>`);\n for (const s of chart.series) parts.push(serializeSeries(s));\n if (chart.gapWidth !== undefined) parts.push(`<c:gapWidth val=\"${chart.gapWidth}\"/>`);\n if (chart.gapDepth !== undefined) parts.push(`<c:gapDepth val=\"${chart.gapDepth}\"/>`);\n if (chart.shape !== undefined) parts.push(`<c:shape val=\"${chart.shape}\"/>`);\n parts.push(`<c:axId val=\"${chart.axIds[0]}\"/>`);\n parts.push(`<c:axId val=\"${chart.axIds[1]}\"/>`);\n parts.push(`<c:axId val=\"${chart.axIds[2]}\"/>`);\n parts.push('</c:bar3DChart>');\n return parts.join('');\n};\n\nconst serializeLine3DChart = (chart: Line3DChart): string => {\n const parts: string[] = ['<c:line3DChart>', `<c:grouping val=\"${chart.grouping}\"/>`];\n if (chart.varyColors !== undefined) parts.push(`<c:varyColors val=\"${chart.varyColors ? '1' : '0'}\"/>`);\n for (const s of chart.series) parts.push(serializeLineSeries(s));\n if (chart.gapDepth !== undefined) parts.push(`<c:gapDepth val=\"${chart.gapDepth}\"/>`);\n parts.push(`<c:axId val=\"${chart.axIds[0]}\"/>`);\n parts.push(`<c:axId val=\"${chart.axIds[1]}\"/>`);\n parts.push(`<c:axId val=\"${chart.axIds[2]}\"/>`);\n parts.push('</c:line3DChart>');\n return parts.join('');\n};\n\nconst serializePie3DChart = (chart: Pie3DChart): string => {\n const parts: string[] = ['<c:pie3DChart>'];\n if (chart.varyColors !== undefined) parts.push(`<c:varyColors val=\"${chart.varyColors ? '1' : '0'}\"/>`);\n for (const s of chart.series) parts.push(serializeSeries(s));\n parts.push('</c:pie3DChart>');\n return parts.join('');\n};\n\nconst serializeArea3DChart = (chart: Area3DChart): string => {\n const parts: string[] = ['<c:area3DChart>', `<c:grouping val=\"${chart.grouping}\"/>`];\n if (chart.varyColors !== undefined) parts.push(`<c:varyColors val=\"${chart.varyColors ? '1' : '0'}\"/>`);\n for (const s of chart.series) parts.push(serializeSeries(s));\n if (chart.gapDepth !== undefined) parts.push(`<c:gapDepth val=\"${chart.gapDepth}\"/>`);\n parts.push(`<c:axId val=\"${chart.axIds[0]}\"/>`);\n parts.push(`<c:axId val=\"${chart.axIds[1]}\"/>`);\n parts.push(`<c:axId val=\"${chart.axIds[2]}\"/>`);\n parts.push('</c:area3DChart>');\n return parts.join('');\n};\n\nconst serializeSurface3DChart = (chart: Surface3DChart): string => {\n const parts: string[] = ['<c:surface3DChart>'];\n if (chart.wireframe !== undefined) parts.push(`<c:wireframe val=\"${chart.wireframe ? '1' : '0'}\"/>`);\n for (const s of chart.series) parts.push(serializeSeries(s));\n parts.push(`<c:axId val=\"${chart.axIds[0]}\"/>`);\n parts.push(`<c:axId val=\"${chart.axIds[1]}\"/>`);\n parts.push(`<c:axId val=\"${chart.axIds[2]}\"/>`);\n parts.push('</c:surface3DChart>');\n return parts.join('');\n};\n\ntype AxisTag = 'catAx' | 'valAx' | 'dateAx' | 'serAx';\ntype AxisLike = CategoryAxis | ValueAxis | DateAxis | SeriesAxis;\n\nconst serializeGridlines = (tag: 'c:majorGridlines' | 'c:minorGridlines', g: boolean | Gridlines): string => {\n // `true` -> self-closing element (Excel default rendering).\n // Object form with `spPr` -> wrapped element so the line can be styled.\n if (g === true || g === false || !g.spPr) return `<${tag}/>`;\n return `<${tag}>${serializeShapeProperties(g.spPr)}</${tag}>`;\n};\n\nconst parseGridlines = (parent: XmlNode, tagName: string): boolean | Gridlines | undefined => {\n const el = findChild(parent, tagName);\n if (!el) return undefined;\n const spPr = parseSpPrSlot(el);\n return spPr ? { spPr } : true;\n};\n\nconst serializeAxis = (tag: AxisTag, ax: AxisLike): string => {\n // ECMA-376 sequence inside <c:catAx>/<c:valAx>:\n // axId, scaling, delete, axPos, majorGridlines?, minorGridlines?, title?,\n // numFmt, majorTickMark, minorTickMark, tickLblPos, spPr?, txPr?, crossAx,\n // crosses | crossesAt, [catAx: auto, lblAlgn, lblOffset, tickLblSkip,\n // tickMarkSkip, noMultiLvlLbl] | [valAx: crossBetween, majorUnit, minorUnit,\n // dispUnits]\n const parts: string[] = [\n `<c:${tag}>`,\n `<c:axId val=\"${ax.axId}\"/>`,\n serializeScaling(ax.scaling),\n `<c:delete val=\"${ax.delete ? '1' : '0'}\"/>`,\n `<c:axPos val=\"${ax.position ?? (tag === 'catAx' ? 'b' : 'l')}\"/>`,\n ];\n if (ax.majorGridlines) parts.push(serializeGridlines('c:majorGridlines', ax.majorGridlines));\n if (ax.minorGridlines) parts.push(serializeGridlines('c:minorGridlines', ax.minorGridlines));\n if (ax.title) parts.push(serializeChartTitle(ax.title));\n parts.push(\n ax.numFmt\n ? serializeNumberFormat(ax.numFmt)\n : '<c:numFmt formatCode=\"General\" sourceLinked=\"1\"/>',\n );\n parts.push(`<c:majorTickMark val=\"${ax.majorTickMark ?? 'out'}\"/>`);\n parts.push(`<c:minorTickMark val=\"${ax.minorTickMark ?? 'none'}\"/>`);\n parts.push(`<c:tickLblPos val=\"${ax.tickLblPos ?? 'nextTo'}\"/>`);\n if (ax.spPr) parts.push(serializeShapeProperties(ax.spPr));\n if (ax.txPr) parts.push(serializeTextBody(ax.txPr, 'c:txPr'));\n parts.push(`<c:crossAx val=\"${ax.crossAx}\"/>`);\n // crossesAt overrides crosses when both are present (mutually exclusive in\n // ECMA-376 — Excel ignores <c:crosses> when <c:crossesAt> is set).\n if (ax.crossesAt !== undefined) {\n parts.push(`<c:crossesAt val=\"${ax.crossesAt}\"/>`);\n } else {\n parts.push(`<c:crosses val=\"${ax.crosses ?? 'autoZero'}\"/>`);\n }\n if (tag === 'catAx') {\n const cat = ax as CategoryAxis;\n parts.push(`<c:auto val=\"${cat.auto === false ? '0' : '1'}\"/>`);\n parts.push(`<c:lblAlgn val=\"${cat.lblAlgn ?? 'ctr'}\"/>`);\n parts.push(`<c:lblOffset val=\"${cat.lblOffset ?? 100}\"/>`);\n parts.push(`<c:noMultiLvlLbl val=\"${cat.noMultiLvlLbl ? '1' : '0'}\"/>`);\n } else if (tag === 'valAx') {\n const val = ax as ValueAxis;\n parts.push(`<c:crossBetween val=\"${val.crossBetween ?? 'between'}\"/>`);\n if (val.majorUnit !== undefined) parts.push(`<c:majorUnit val=\"${val.majorUnit}\"/>`);\n if (val.minorUnit !== undefined) parts.push(`<c:minorUnit val=\"${val.minorUnit}\"/>`);\n } else if (tag === 'dateAx') {\n const date = ax as DateAxis;\n parts.push(`<c:auto val=\"${date.auto === false ? '0' : '1'}\"/>`);\n if (date.lblOffset !== undefined) parts.push(`<c:lblOffset val=\"${date.lblOffset}\"/>`);\n if (date.baseTimeUnit !== undefined) parts.push(`<c:baseTimeUnit val=\"${date.baseTimeUnit}\"/>`);\n if (date.majorUnit !== undefined) parts.push(`<c:majorUnit val=\"${date.majorUnit}\"/>`);\n if (date.majorTimeUnit !== undefined) parts.push(`<c:majorTimeUnit val=\"${date.majorTimeUnit}\"/>`);\n if (date.minorUnit !== undefined) parts.push(`<c:minorUnit val=\"${date.minorUnit}\"/>`);\n if (date.minorTimeUnit !== undefined) parts.push(`<c:minorTimeUnit val=\"${date.minorTimeUnit}\"/>`);\n } else {\n const ser = ax as SeriesAxis;\n if (ser.tickLblSkip !== undefined) parts.push(`<c:tickLblSkip val=\"${ser.tickLblSkip}\"/>`);\n if (ser.tickMarkSkip !== undefined) parts.push(`<c:tickMarkSkip val=\"${ser.tickMarkSkip}\"/>`);\n }\n parts.push(`</c:${tag}>`);\n return parts.join('');\n};\n\nconst serializeChartTitle = (title: ChartTitle): string => {\n const parts: string[] = ['<c:title>'];\n if (title.tx) {\n // Wrap a TextBody as <c:tx><c:rich>...</c:rich></c:tx>.\n parts.push('<c:tx>');\n parts.push(serializeTextBody(title.tx, 'c:rich'));\n parts.push('</c:tx>');\n } else if (title.text !== undefined) {\n parts.push(\n '<c:tx>',\n '<c:rich>',\n '<a:bodyPr rot=\"0\" spcFirstLastPara=\"1\" vertOverflow=\"ellipsis\" vert=\"horz\" wrap=\"square\" anchor=\"ctr\" anchorCtr=\"1\"/>',\n '<a:lstStyle/>',\n '<a:p><a:pPr><a:defRPr sz=\"1400\" b=\"0\" i=\"0\" u=\"none\" strike=\"noStrike\" kern=\"1200\" baseline=\"0\">',\n '<a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>',\n '<a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/>',\n '</a:defRPr></a:pPr>',\n `<a:r><a:rPr lang=\"en-US\"/><a:t>${escapeText(title.text)}</a:t></a:r>`,\n '</a:p>',\n '</c:rich>',\n '</c:tx>',\n );\n }\n // <c:layout/> + <c:overlay> match the order Excel emits.\n parts.push(serializeLayout(title.layout));\n if (title.overlay !== undefined) {\n parts.push(`<c:overlay val=\"${title.overlay ? '1' : '0'}\"/>`);\n } else {\n parts.push('<c:overlay val=\"0\"/>');\n }\n if (title.spPr) parts.push(serializeShapeProperties(title.spPr));\n if (title.txPr) parts.push(serializeTextBody(title.txPr, 'c:txPr'));\n parts.push('</c:title>');\n return parts.join('');\n};\n\nconst serializeChartKind = (chart: ChartKind): string => {\n switch (chart.kind) {\n case 'bar':\n return serializeBarChart(chart);\n case 'line':\n return serializeLineChart(chart);\n case 'area':\n return serializeAreaChart(chart);\n case 'pie':\n return serializePieChart(chart);\n case 'doughnut':\n return serializeDoughnutChart(chart);\n case 'scatter':\n return serializeScatterChart(chart);\n case 'radar':\n return serializeRadarChart(chart);\n case 'bubble':\n return serializeBubbleChart(chart);\n case 'stock':\n return serializeStockChart(chart);\n case 'surface':\n return serializeSurfaceChart(chart);\n case 'ofPie':\n return serializeOfPieChart(chart);\n case 'bar3D':\n return serializeBar3DChart(chart);\n case 'line3D':\n return serializeLine3DChart(chart);\n case 'pie3D':\n return serializePie3DChart(chart);\n case 'area3D':\n return serializeArea3DChart(chart);\n case 'surface3D':\n return serializeSurface3DChart(chart);\n }\n};\n\nconst serializePlotArea = (plotArea: PlotArea): string => {\n const parts: string[] = ['<c:plotArea>', serializeLayout(plotArea.layout)];\n parts.push(serializeChartKind(plotArea.chart));\n // Excel rejects charts that reference axIds in a chart-kind element but don't\n // define matching catAx/valAx siblings under plotArea. Fill in sensible\n // defaults when callers omit them.\n const axes = inferAxesForChart(plotArea);\n for (const ax of axes) parts.push(ax);\n if (plotArea.dateAx) parts.push(serializeAxis('dateAx', plotArea.dateAx));\n if (plotArea.serAx) parts.push(serializeAxis('serAx', plotArea.serAx));\n if (plotArea.spPr) parts.push(serializeShapeProperties(plotArea.spPr));\n parts.push('</c:plotArea>');\n return parts.join('');\n};\n\nconst inferAxesForChart = (plotArea: PlotArea): string[] => {\n const chart = plotArea.chart;\n if (!('axIds' in chart)) return [];\n const ids = chart.axIds;\n if (!ids || ids.length < 2) return [];\n // Scatter / bubble have two value axes (x and y are both numeric).\n const isXValueAxis = chart.kind === 'scatter' || chart.kind === 'bubble';\n const cat = plotArea.catAx ?? { axId: ids[0], crossAx: ids[1], position: isXValueAxis ? ('b' as const) : ('b' as const) };\n const val = plotArea.valAx ?? { axId: ids[1], crossAx: ids[0], position: 'l' as const };\n const out: string[] = [];\n out.push(serializeAxis(isXValueAxis ? 'valAx' : 'catAx', cat));\n out.push(serializeAxis('valAx', val));\n return out;\n};\n\nconst serializeLegend = (legend: Legend): string => {\n // ECMA-376 sequence inside <c:legend>: legendPos, legendEntry*, layout?,\n // overlay?, spPr?, txPr?.\n const parts: string[] = ['<c:legend>', `<c:legendPos val=\"${legend.position}\"/>`];\n if (legend.layout) parts.push(serializeLayout(legend.layout));\n if (legend.overlay !== undefined) parts.push(`<c:overlay val=\"${legend.overlay ? '1' : '0'}\"/>`);\n if (legend.spPr) parts.push(serializeShapeProperties(legend.spPr));\n if (legend.txPr) parts.push(serializeTextBody(legend.txPr, 'c:txPr'));\n parts.push('</c:legend>');\n return parts.join('');\n};\n\n/**\n * Inspect a parsed chart-space root and return the rId referenced by\n * `<c:userShapes r:id=\"...\">` if any. The loader calls this after parsing the\n * chart so it can resolve the chartDrawing part via the chart's rels.\n */\nexport function findUserShapesRId(bytes: Uint8Array | string): string | undefined {\n const root = parseXml(bytes);\n if (root.name !== CHART_SPACE_TAG) return undefined;\n const us = findChild(root, USER_SHAPES_TAG);\n return us?.attrs[`{${REL_NS}}id`];\n}\n\n/** Optional rels rIds the writer resolves before bytes are emitted. */\nexport interface ChartSerializeOptions {\n /** Drawing-rels id for the `<c:userShapes r:id=\"...\">` reference. */\n userShapesRId?: string;\n}\n\n/** Serialise a ChartSpace to its `xl/charts/chartN.xml` bytes. */\nexport function chartToBytes(space: ChartSpace, opts: ChartSerializeOptions = {}): Uint8Array {\n return new TextEncoder().encode(serializeChartSpace(space, opts));\n}\n\nfunction serializeChartSpace(space: ChartSpace, opts: ChartSerializeOptions = {}): string {\n const parts: string[] = [\n XML_HEADER,\n `<c:chartSpace xmlns:c=\"${CHART_NS}\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"${REL_NS}\">`,\n // chartSpace prelude — `date1904`, `lang`, `roundedCorners` mirror what\n // real Excel emits and a few Excel versions reject the file entirely\n // without them.\n '<c:date1904 val=\"0\"/>',\n '<c:lang val=\"en-US\"/>',\n '<c:roundedCorners val=\"0\"/>',\n ];\n if (space.style !== undefined) {\n parts.push(`<c:style val=\"${space.style}\"/>`);\n }\n parts.push('<c:chart>');\n if (space.title !== undefined) parts.push(serializeChartTitle(space.title));\n // <c:autoTitleDeleted> follows <c:title> when present, and is required by\n // some Excel versions when a title is set; emit `0` when we have a title and\n // `1` (= no auto-title) otherwise.\n parts.push(`<c:autoTitleDeleted val=\"${space.title === undefined ? '1' : '0'}\"/>`);\n if (space.view3D) parts.push(serializeView3D(space.view3D));\n if (space.floor) parts.push(serializeSurfaceFrame('floor', space.floor));\n if (space.sideWall) parts.push(serializeSurfaceFrame('sideWall', space.sideWall));\n if (space.backWall) parts.push(serializeSurfaceFrame('backWall', space.backWall));\n parts.push(serializePlotArea(space.plotArea));\n if (space.legend) parts.push(serializeLegend(space.legend));\n parts.push(`<c:plotVisOnly val=\"${space.plotVisOnly === false ? '0' : '1'}\"/>`);\n parts.push(`<c:dispBlanksAs val=\"${space.dispBlanksAs ?? 'gap'}\"/>`);\n parts.push('</c:chart>');\n // chartSpace-level spPr / txPr are siblings of <c:chart>, emitted after.\n if (space.spPr) parts.push(serializeShapeProperties(space.spPr));\n if (space.txPr) parts.push(serializeTextBody(space.txPr, 'c:txPr'));\n // <c:userShapes r:id=\"...\"> sits at the very end of <c:chartSpace>.\n if (opts.userShapesRId !== undefined) {\n parts.push(`<c:userShapes r:id=\"${opts.userShapesRId}\"/>`);\n }\n parts.push('</c:chartSpace>');\n return parts.join('');\n}\n\n// SHEET_DRAWING_NS is imported only to keep import surface stable; the chart\n// serialiser doesn't need it directly.\nvoid SHEET_DRAWING_NS;\n","// xl/charts/chartN.xml read/write for the chartex (cx:) namespace.\n\nimport {\n parseShapeProperties,\n parseTextBody,\n serializeShapeProperties,\n serializeTextBody,\n} from '../../drawing/dml/dml-xml';\nimport type { ShapeProperties } from '../../drawing/dml/shape-properties';\nimport type { TextBody } from '../../drawing/dml/text';\nimport { escapeXmlAttr, escapeXmlText } from '../../utils/escape';\nimport { OpenXmlSchemaError } from '../../utils/exceptions';\nimport { CX_NS, REL_NS } from '../../xml/namespaces';\nimport { parseXml } from '../../xml/parser';\nimport { findChild, findChildren, type XmlNode } from '../../xml/tree';\nimport type {\n CxAxis,\n CxChart,\n CxChartData,\n CxChartSpace,\n CxData,\n CxDataLabels,\n CxDim,\n CxLayoutId,\n CxLayoutPr,\n CxLegend,\n CxNumDim,\n CxPoint,\n CxSeries,\n CxStrDim,\n CxTitle,\n} from './chartex';\n\nconst T = (local: string): string => `{${CX_NS}}${local}`;\nconst CHART_SPACE = T('chartSpace');\nconst CHART_DATA = T('chartData');\nconst EXTERNAL_DATA = T('externalData');\nconst DATA = T('data');\nconst NUM_DIM = T('numDim');\nconst STR_DIM = T('strDim');\nconst F = T('f');\nconst FORMAT_CODE = T('formatCode');\nconst LVL = T('lvl');\nconst PT = T('pt');\nconst CHART = T('chart');\nconst TITLE = T('title');\nconst TX = T('tx');\nconst TX_DATA = T('txData');\nconst V = T('v');\nconst PLOT_AREA = T('plotArea');\nconst PLOT_AREA_REGION = T('plotAreaRegion');\nconst SERIES = T('series');\nconst DATA_ID = T('dataId');\nconst LAYOUT_PR = T('layoutPr');\nconst SUBTOTALS = T('subtotals');\nconst SUBTOTAL = T('subtotal');\nconst BINNING = T('binning');\nconst PARENT_LABEL_LAYOUT = T('parentLabelLayout');\nconst VISIBILITY = T('visibility');\nconst QUARTILE_METHOD = T('quartileMethod');\nconst GEOGRAPHY = T('geography');\nconst REGION_LABEL_LAYOUT = T('regionLabelLayout');\nconst AXIS = T('axis');\nconst AXIS_ID = T('axisId');\nconst VAL_SCALING = T('valScaling');\nconst CAT_SCALING = T('catScaling');\nconst MAJOR_GRIDLINES = T('majorGridlines');\nconst DATA_LABELS = T('dataLabels');\nconst VISIBILITY_DL = T('visibility');\nconst LEGEND = T('legend');\nconst PLOT_VIS_ONLY = T('plotVisOnly');\nconst DISP_BLANKS_AS = T('dispBlanksAs');\nconst SP_PR = T('spPr');\nconst TX_PR = T('txPr');\nconst PLOT_SURFACE = T('plotSurface');\nconst A_T = '{http://schemas.openxmlformats.org/drawingml/2006/main}t';\n\nconst parseSpPrSlot = (parent: XmlNode): ShapeProperties | undefined => {\n const el = findChild(parent, SP_PR);\n return el ? parseShapeProperties(el) : undefined;\n};\n\nconst parseTxPrSlot = (parent: XmlNode): TextBody | undefined => {\n const el = findChild(parent, TX_PR);\n return el ? parseTextBody(el) : undefined;\n};\n\nconst XML_HEADER = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n\nconst escapeText = escapeXmlText;\nconst escapeAttr = escapeXmlAttr;\n\nconst valAttr = (n: XmlNode | undefined): string | undefined => n?.attrs['val'];\nconst intAttr = (n: XmlNode, name: string): number | undefined => {\n const v = n.attrs[name];\n if (v === undefined) return undefined;\n const x = Number.parseInt(v, 10);\n return Number.isInteger(x) ? x : undefined;\n};\nconst floatAttr = (n: XmlNode, name: string): number | undefined => {\n const v = n.attrs[name];\n if (v === undefined) return undefined;\n const x = Number.parseFloat(v);\n return Number.isFinite(x) ? x : undefined;\n};\nconst boolAttr = (n: XmlNode, name: string): boolean | undefined => {\n const v = n.attrs[name];\n if (v === undefined) return undefined;\n if (v === '1' || v === 'true') return true;\n if (v === '0' || v === 'false') return false;\n return undefined;\n};\n\n/** Best-effort sniff: returns true if `bytes` starts with a `cx:chartSpace` root. */\nexport function isChartExBytes(bytes: Uint8Array | string): boolean {\n const head = typeof bytes === 'string' ? bytes.slice(0, 4096) : new TextDecoder().decode(bytes.subarray(0, 4096));\n // Match an opening <cx:chartSpace ...> or <chartSpace xmlns=\"...chartex\">.\n return /<\\s*[A-Za-z][\\w-]*:?chartSpace\\b[^>]*chartex/.test(head);\n}\n\n// ---- parser ----------------------------------------------------------------\n\nconst parsePoints = (lvlEl: XmlNode | undefined): { ptCount?: number; pts: CxPoint[] } => {\n if (!lvlEl) return { pts: [] };\n const ptCount = intAttr(lvlEl, 'ptCount');\n const pts: CxPoint[] = [];\n for (const ptEl of findChildren(lvlEl, PT)) {\n const idx = intAttr(ptEl, 'idx');\n if (idx === undefined) continue;\n pts.push({ idx, v: ptEl.text ?? '' });\n }\n return { ...(ptCount !== undefined ? { ptCount } : {}), pts };\n};\n\nconst parseDim = (el: XmlNode): CxDim => {\n const isNum = el.name === NUM_DIM;\n const type = el.attrs['type'] ?? (isNum ? 'val' : 'cat');\n const fEl = findChild(el, F);\n const fc = findChild(el, FORMAT_CODE);\n const dirRaw = fEl?.attrs['dir'];\n const dir = dirRaw === 'col' || dirRaw === 'row' ? dirRaw : undefined;\n const lvlEl = findChild(el, LVL);\n const { ptCount, pts } = parsePoints(lvlEl);\n const base = {\n type,\n ...(fEl ? { f: fEl.text ?? '' } : {}),\n ...(dir ? { dir } : {}),\n ...(ptCount !== undefined ? { ptCount } : {}),\n pts,\n ...(fc?.text ? { formatCode: fc.text } : {}),\n };\n return isNum ? ({ kind: 'num', ...base } as CxNumDim) : ({ kind: 'str', ...base } as CxStrDim);\n};\n\nconst parseDataBlock = (el: XmlNode): CxData => {\n const id = intAttr(el, 'id') ?? 0;\n const dims: CxDim[] = [];\n for (const child of el.children) {\n if (typeof child === 'string') continue;\n if (child.name === NUM_DIM || child.name === STR_DIM) dims.push(parseDim(child));\n }\n return { id, dims };\n};\n\nconst parseChartData = (el: XmlNode): CxChartData => {\n const data: CxData[] = [];\n for (const dEl of findChildren(el, DATA)) data.push(parseDataBlock(dEl));\n const ext = findChild(el, EXTERNAL_DATA);\n let externalData: CxChartData['externalData'];\n if (ext) {\n const rId = ext.attrs[`{${REL_NS}}id`];\n if (rId !== undefined) {\n const auto = ext.attrs['autoUpdate'];\n const autoUpdate = auto === '1' || auto === 'true' ? true : auto === '0' || auto === 'false' ? false : undefined;\n externalData = { rId, ...(autoUpdate !== undefined ? { autoUpdate } : {}) };\n }\n }\n return { ...(externalData ? { externalData } : {}), data };\n};\n\nconst parseTitle = (el: XmlNode): CxTitle => {\n const posRaw = el.attrs['pos'];\n const pos = posRaw === 't' || posRaw === 'b' || posRaw === 'l' || posRaw === 'r' ? posRaw : undefined;\n const alignRaw = el.attrs['align'];\n const align = alignRaw === 'ctr' || alignRaw === 'l' || alignRaw === 'r' ? alignRaw : undefined;\n const overlay = boolAttr(el, 'overlay');\n // Plain text body inside <cx:tx><cx:rich>... <a:r><a:t>text</a:t></a:r>\n // </cx:rich></cx:tx>\n let text: string | undefined;\n let txDataRef: string | undefined;\n const tx = findChild(el, TX);\n if (tx) {\n const txData = findChild(tx, TX_DATA);\n if (txData) {\n const fEl = findChild(txData, F);\n const vEl = findChild(txData, V);\n if (fEl?.text) txDataRef = fEl.text;\n if (vEl?.text !== undefined) text = vEl.text;\n } else {\n // Walk into <cx:rich><a:p><a:r><a:t> if present.\n const rich = tx.children.find((c): c is XmlNode => typeof c !== 'string' && c.name === T('rich'));\n if (rich) {\n const collected: string[] = [];\n const walk = (n: XmlNode): void => {\n if (n.name === A_T && n.text) collected.push(n.text);\n for (const c of n.children) if (typeof c !== 'string') walk(c);\n };\n walk(rich);\n if (collected.length > 0) text = collected.join('');\n }\n }\n }\n const spPr = parseSpPrSlot(el);\n const txPr = parseTxPrSlot(el);\n return {\n ...(pos ? { pos } : {}),\n ...(align ? { align } : {}),\n ...(overlay !== undefined ? { overlay } : {}),\n ...(text !== undefined ? { text } : {}),\n ...(txDataRef !== undefined ? { txDataRef } : {}),\n ...(spPr ? { spPr } : {}),\n ...(txPr ? { txPr } : {}),\n };\n};\n\nconst parseLegend = (el: XmlNode): CxLegend => {\n const posRaw = el.attrs['pos'];\n const pos =\n posRaw === 't' || posRaw === 'b' || posRaw === 'l' || posRaw === 'r' || posRaw === 'tr' ? posRaw : undefined;\n const alignRaw = el.attrs['align'];\n const align = alignRaw === 'ctr' || alignRaw === 'l' || alignRaw === 'r' ? alignRaw : undefined;\n const overlay = boolAttr(el, 'overlay');\n const spPr = parseSpPrSlot(el);\n const txPr = parseTxPrSlot(el);\n return {\n ...(pos ? { pos } : {}),\n ...(align ? { align } : {}),\n ...(overlay !== undefined ? { overlay } : {}),\n ...(spPr ? { spPr } : {}),\n ...(txPr ? { txPr } : {}),\n };\n};\n\nconst parseLayoutPr = (el: XmlNode): CxLayoutPr | undefined => {\n const subEl = findChild(el, SUBTOTALS);\n if (subEl) {\n const idxs: number[] = [];\n for (const s of findChildren(subEl, SUBTOTAL)) {\n const i = intAttr(s, 'idx');\n if (i !== undefined) idxs.push(i);\n }\n return { kind: 'waterfall', subtotalIdx: idxs };\n }\n const binEl = findChild(el, BINNING);\n if (binEl) {\n const intervalRaw = binEl.attrs['intervalClosed'];\n const intervalClosed = intervalRaw === 'r' || intervalRaw === 'l' ? intervalRaw : undefined;\n return {\n kind: 'binning',\n ...(boolAttr(binEl, 'binCountAuto') !== undefined\n ? { binCountAuto: boolAttr(binEl, 'binCountAuto') as boolean }\n : {}),\n ...(intAttr(binEl, 'binCount') !== undefined ? { binCount: intAttr(binEl, 'binCount') as number } : {}),\n ...(floatAttr(binEl, 'binSize') !== undefined ? { binSize: floatAttr(binEl, 'binSize') as number } : {}),\n ...(intervalClosed ? { intervalClosed } : {}),\n ...(floatAttr(binEl, 'underflow') !== undefined ? { underflow: floatAttr(binEl, 'underflow') as number } : {}),\n ...(floatAttr(binEl, 'overflow') !== undefined ? { overflow: floatAttr(binEl, 'overflow') as number } : {}),\n };\n }\n const plEl = findChild(el, PARENT_LABEL_LAYOUT);\n if (plEl) {\n const v = valAttr(plEl);\n const layout = v === 'banner' || v === 'none' ? v : 'overlapping';\n return { kind: 'parentLabel', layout };\n }\n const visEl = findChild(el, VISIBILITY);\n const qmEl = findChild(el, QUARTILE_METHOD);\n if (visEl || qmEl) {\n const meanLine = visEl ? boolAttr(visEl, 'meanLine') : undefined;\n const meanMarker = visEl ? boolAttr(visEl, 'meanMarker') : undefined;\n const nonoutliers = visEl ? boolAttr(visEl, 'nonoutliers') : undefined;\n const outliers = visEl ? boolAttr(visEl, 'outliers') : undefined;\n const qmRaw = qmEl ? valAttr(qmEl) : undefined;\n const quartileMethod = qmRaw === 'exclusive' || qmRaw === 'inclusive' ? qmRaw : undefined;\n return {\n kind: 'visibility',\n ...(meanLine !== undefined ? { meanLine } : {}),\n ...(meanMarker !== undefined ? { meanMarker } : {}),\n ...(nonoutliers !== undefined ? { nonoutliers } : {}),\n ...(outliers !== undefined ? { outliers } : {}),\n ...(quartileMethod ? { quartileMethod } : {}),\n };\n }\n const geoEl = findChild(el, GEOGRAPHY);\n if (geoEl) {\n const projRaw = geoEl.attrs['projectionType'];\n const proj =\n projRaw === 'automatic' || projRaw === 'mercator' || projRaw === 'miller' || projRaw === 'albers'\n ? projRaw\n : undefined;\n const rllEl = findChild(geoEl, REGION_LABEL_LAYOUT);\n const rllRaw = rllEl ? valAttr(rllEl) : undefined;\n const rll = rllRaw === 'none' || rllRaw === 'bestFit' || rllRaw === 'showAll' ? rllRaw : undefined;\n return {\n kind: 'region',\n ...(geoEl.attrs['cultureLanguage'] !== undefined\n ? { cultureLanguage: geoEl.attrs['cultureLanguage'] as string }\n : {}),\n ...(geoEl.attrs['cultureRegion'] !== undefined ? { cultureRegion: geoEl.attrs['cultureRegion'] as string } : {}),\n ...(proj ? { projectionType: proj } : {}),\n ...(rll ? { regionLabelLayout: rll } : {}),\n };\n }\n return undefined;\n};\n\nconst parseDataLabels = (el: XmlNode): CxDataLabels => {\n const posRaw = el.attrs['pos'];\n const allowed: ReadonlyArray<string> = ['ctr', 'b', 'l', 'r', 't', 'inEnd', 'outEnd', 'inBase'];\n const pos = posRaw && allowed.includes(posRaw) ? (posRaw as CxDataLabels['pos']) : undefined;\n const visEl = findChild(el, VISIBILITY_DL);\n const out: CxDataLabels = { ...(pos ? { pos } : {}) };\n if (visEl) {\n const seriesName = boolAttr(visEl, 'seriesName');\n const categoryName = boolAttr(visEl, 'categoryName');\n const value = boolAttr(visEl, 'value');\n if (seriesName !== undefined || categoryName !== undefined || value !== undefined) {\n out.visibility = {\n ...(seriesName !== undefined ? { seriesName } : {}),\n ...(categoryName !== undefined ? { categoryName } : {}),\n ...(value !== undefined ? { value } : {}),\n };\n }\n }\n return out;\n};\n\nconst parseSeries = (el: XmlNode): CxSeries => {\n const layoutIdRaw = el.attrs['layoutId'];\n if (!layoutIdRaw) {\n throw new OpenXmlSchemaError('parseChartExXml: <cx:series> missing layoutId');\n }\n const layoutId = layoutIdRaw as CxLayoutId;\n const hidden = boolAttr(el, 'hidden');\n const ownerIdx = intAttr(el, 'ownerIdx');\n const formatIdx = intAttr(el, 'formatIdx');\n const axisIds: number[] = [];\n for (const aEl of findChildren(el, AXIS_ID)) {\n const v = intAttr(aEl, 'val');\n if (v !== undefined) axisIds.push(v);\n }\n const dataIdEl = findChild(el, DATA_ID);\n const dataId = dataIdEl ? intAttr(dataIdEl, 'val') : undefined;\n const layoutPrEl = findChild(el, LAYOUT_PR);\n const layoutPr = layoutPrEl ? parseLayoutPr(layoutPrEl) : undefined;\n let tx: CxSeries['tx'];\n const txEl = findChild(el, TX);\n if (txEl) {\n const txData = findChild(txEl, TX_DATA);\n if (txData) {\n const fEl = findChild(txData, F);\n const vEl = findChild(txData, V);\n const f = fEl?.text;\n const v = vEl?.text;\n if (f !== undefined || v !== undefined) {\n tx = { ...(f !== undefined ? { f } : {}), ...(v !== undefined ? { v } : {}) };\n }\n }\n }\n const dlEl = findChild(el, DATA_LABELS);\n const dataLabels = dlEl ? parseDataLabels(dlEl) : undefined;\n const spPr = parseSpPrSlot(el);\n const txPr = parseTxPrSlot(el);\n return {\n layoutId,\n ...(hidden !== undefined ? { hidden } : {}),\n ...(ownerIdx !== undefined ? { ownerIdx } : {}),\n ...(formatIdx !== undefined ? { formatIdx } : {}),\n ...(axisIds.length > 0 ? { axisIds } : {}),\n ...(tx ? { tx } : {}),\n ...(dataLabels ? { dataLabels } : {}),\n ...(dataId !== undefined ? { dataId } : {}),\n ...(layoutPr ? { layoutPr } : {}),\n ...(spPr ? { spPr } : {}),\n ...(txPr ? { txPr } : {}),\n };\n};\n\nconst parseAxis = (el: XmlNode): CxAxis => {\n const id = intAttr(el, 'id') ?? 0;\n const hidden = boolAttr(el, 'hidden');\n const valScalingEl = findChild(el, VAL_SCALING);\n let valScaling: CxAxis['valScaling'];\n if (valScalingEl) {\n const min = floatAttr(valScalingEl, 'min');\n const max = floatAttr(valScalingEl, 'max');\n if (min !== undefined || max !== undefined) {\n valScaling = {\n ...(min !== undefined ? { min } : {}),\n ...(max !== undefined ? { max } : {}),\n };\n }\n }\n const catScalingEl = findChild(el, CAT_SCALING);\n const catGap = catScalingEl ? floatAttr(catScalingEl, 'gapWidth') : undefined;\n const majorGridlines = findChild(el, MAJOR_GRIDLINES) !== undefined ? true : undefined;\n const titleEl = findChild(el, TITLE);\n const title = titleEl ? parseTitle(titleEl) : undefined;\n const spPr = parseSpPrSlot(el);\n const txPr = parseTxPrSlot(el);\n return {\n id,\n ...(hidden !== undefined ? { hidden } : {}),\n ...(valScaling ? { valScaling } : {}),\n ...(catGap !== undefined ? { catScalingGapWidth: catGap } : {}),\n ...(majorGridlines !== undefined ? { majorGridlines } : {}),\n ...(title ? { title } : {}),\n ...(spPr ? { spPr } : {}),\n ...(txPr ? { txPr } : {}),\n };\n};\n\nconst parseChart = (el: XmlNode): CxChart => {\n const titleEl = findChild(el, TITLE);\n const title = titleEl ? parseTitle(titleEl) : undefined;\n const plotAreaEl = findChild(el, PLOT_AREA);\n if (!plotAreaEl) throw new OpenXmlSchemaError('parseChartExXml: <cx:chart> missing <cx:plotArea>');\n const region = findChild(plotAreaEl, PLOT_AREA_REGION);\n if (!region) throw new OpenXmlSchemaError('parseChartExXml: <cx:plotArea> missing <cx:plotAreaRegion>');\n const series: CxSeries[] = [];\n for (const sEl of findChildren(region, SERIES)) series.push(parseSeries(sEl));\n const axes: CxAxis[] = [];\n // Axes live as siblings of <cx:plotAreaRegion> under <cx:plotArea>, but\n // tolerate writers (including older revisions of this library) that nest them\n // inside the region.\n for (const aEl of findChildren(plotAreaEl, AXIS)) axes.push(parseAxis(aEl));\n for (const aEl of findChildren(region, AXIS)) axes.push(parseAxis(aEl));\n // <cx:plotSurface> sits inside plotAreaRegion and carries the plot background\n // spPr.\n const plotSurfaceEl = findChild(region, PLOT_SURFACE);\n const plotSurfaceSpPr = plotSurfaceEl ? parseShapeProperties(plotSurfaceEl) : undefined;\n const legendEl = findChild(el, LEGEND);\n const legend = legendEl ? parseLegend(legendEl) : undefined;\n const plotVisOnlyEl = findChild(el, PLOT_VIS_ONLY);\n const plotVisOnly = plotVisOnlyEl ? boolAttr(plotVisOnlyEl, 'val') : undefined;\n const dispRaw = valAttr(findChild(el, DISP_BLANKS_AS));\n const dispBlanksAs = dispRaw === 'gap' || dispRaw === 'zero' || dispRaw === 'span' ? dispRaw : undefined;\n return {\n plotArea: { series, axes, ...(plotSurfaceSpPr ? { spPr: plotSurfaceSpPr } : {}) },\n ...(title ? { title } : {}),\n ...(legend ? { legend } : {}),\n ...(plotVisOnly !== undefined ? { plotVisOnly } : {}),\n ...(dispBlanksAs ? { dispBlanksAs } : {}),\n };\n};\n\nexport function parseChartExXml(bytes: Uint8Array | string): CxChartSpace {\n const root = parseXml(bytes);\n if (root.name !== CHART_SPACE) {\n throw new OpenXmlSchemaError(`parseChartExXml: root is \"${root.name}\", expected cx:chartSpace`);\n }\n const chartDataEl = findChild(root, CHART_DATA);\n if (!chartDataEl) throw new OpenXmlSchemaError('parseChartExXml: <cx:chartSpace> missing <cx:chartData>');\n const chartEl = findChild(root, CHART);\n if (!chartEl) throw new OpenXmlSchemaError('parseChartExXml: <cx:chartSpace> missing <cx:chart>');\n const spPr = parseSpPrSlot(root);\n const txPr = parseTxPrSlot(root);\n return {\n kind: 'cxChartSpace',\n chartData: parseChartData(chartDataEl),\n chart: parseChart(chartEl),\n ...(spPr ? { spPr } : {}),\n ...(txPr ? { txPr } : {}),\n };\n}\n\n// ---- serializer ------------------------------------------------------------\n\nconst serializePoint = (p: CxPoint): string => `<cx:pt idx=\"${p.idx}\">${escapeText(p.v)}</cx:pt>`;\n\nconst serializeDim = (d: CxDim): string => {\n const tag = d.kind === 'num' ? 'cx:numDim' : 'cx:strDim';\n const parts: string[] = [`<${tag} type=\"${escapeAttr(d.type)}\">`];\n if (d.f !== undefined) {\n const dirAttr = d.dir ? ` dir=\"${d.dir}\"` : '';\n parts.push(`<cx:f${dirAttr}>${escapeText(d.f)}</cx:f>`);\n }\n if (d.formatCode !== undefined) parts.push(`<cx:formatCode>${escapeText(d.formatCode)}</cx:formatCode>`);\n const ptCount = d.ptCount ?? d.pts.length;\n if (d.pts.length > 0 || d.ptCount !== undefined) {\n parts.push(`<cx:lvl ptCount=\"${ptCount}\">`);\n for (const p of d.pts) parts.push(serializePoint(p));\n parts.push('</cx:lvl>');\n }\n parts.push(`</${tag}>`);\n return parts.join('');\n};\n\nconst serializeData = (d: CxData): string => {\n const parts: string[] = [`<cx:data id=\"${d.id}\">`];\n for (const dim of d.dims) parts.push(serializeDim(dim));\n parts.push('</cx:data>');\n return parts.join('');\n};\n\nconst serializeChartData = (cd: CxChartData): string => {\n const parts: string[] = ['<cx:chartData>'];\n if (cd.externalData) {\n const auto =\n cd.externalData.autoUpdate !== undefined ? ` cx:autoUpdate=\"${cd.externalData.autoUpdate ? '1' : '0'}\"` : '';\n parts.push(`<cx:externalData r:id=\"${escapeAttr(cd.externalData.rId)}\"${auto}/>`);\n }\n for (const d of cd.data) parts.push(serializeData(d));\n parts.push('</cx:chartData>');\n return parts.join('');\n};\n\nconst serializeTitle = (t: CxTitle, tag: 'cx:title' = 'cx:title'): string => {\n const attrs: string[] = [];\n if (t.pos) attrs.push(`pos=\"${t.pos}\"`);\n if (t.align) attrs.push(`align=\"${t.align}\"`);\n if (t.overlay !== undefined) attrs.push(`overlay=\"${t.overlay ? '1' : '0'}\"`);\n const open = `<${tag}${attrs.length > 0 ? ` ${attrs.join(' ')}` : ''}`;\n const innerParts: string[] = [];\n if (t.text !== undefined || t.txDataRef !== undefined) {\n const f = t.txDataRef !== undefined ? `<cx:f>${escapeText(t.txDataRef)}</cx:f>` : '';\n const v = t.text !== undefined ? `<cx:v>${escapeText(t.text)}</cx:v>` : '';\n innerParts.push(`<cx:tx><cx:txData>${f}${v}</cx:txData></cx:tx>`);\n }\n if (t.spPr) innerParts.push(serializeShapeProperties(t.spPr, 'cx:spPr'));\n if (t.txPr) innerParts.push(serializeTextBody(t.txPr, 'cx:txPr'));\n return innerParts.length === 0 ? `${open}/>` : `${open}>${innerParts.join('')}</${tag}>`;\n};\n\nconst serializeLegend = (l: CxLegend): string => {\n const attrs: string[] = [];\n if (l.pos) attrs.push(`pos=\"${l.pos}\"`);\n if (l.align) attrs.push(`align=\"${l.align}\"`);\n if (l.overlay !== undefined) attrs.push(`overlay=\"${l.overlay ? '1' : '0'}\"`);\n const open = `<cx:legend${attrs.length > 0 ? ` ${attrs.join(' ')}` : ''}`;\n const innerParts: string[] = [];\n if (l.spPr) innerParts.push(serializeShapeProperties(l.spPr, 'cx:spPr'));\n if (l.txPr) innerParts.push(serializeTextBody(l.txPr, 'cx:txPr'));\n return innerParts.length === 0 ? `${open}/>` : `${open}>${innerParts.join('')}</cx:legend>`;\n};\n\nconst serializeLayoutPr = (lp: CxLayoutPr): string => {\n switch (lp.kind) {\n case 'waterfall': {\n if (lp.subtotalIdx.length === 0) return '<cx:layoutPr><cx:subtotals/></cx:layoutPr>';\n const parts = ['<cx:layoutPr><cx:subtotals>'];\n for (const i of lp.subtotalIdx) parts.push(`<cx:subtotal idx=\"${i}\"/>`);\n parts.push('</cx:subtotals></cx:layoutPr>');\n return parts.join('');\n }\n case 'binning': {\n const a: string[] = [];\n if (lp.binCountAuto !== undefined) a.push(`binCountAuto=\"${lp.binCountAuto ? '1' : '0'}\"`);\n if (lp.binCount !== undefined) a.push(`binCount=\"${lp.binCount}\"`);\n if (lp.binSize !== undefined) a.push(`binSize=\"${lp.binSize}\"`);\n if (lp.intervalClosed !== undefined) a.push(`intervalClosed=\"${lp.intervalClosed}\"`);\n if (lp.underflow !== undefined) a.push(`underflow=\"${lp.underflow}\"`);\n if (lp.overflow !== undefined) a.push(`overflow=\"${lp.overflow}\"`);\n return `<cx:layoutPr><cx:binning${a.length > 0 ? ` ${a.join(' ')}` : ''}/></cx:layoutPr>`;\n }\n case 'parentLabel':\n return `<cx:layoutPr><cx:parentLabelLayout val=\"${lp.layout}\"/></cx:layoutPr>`;\n case 'visibility': {\n const va: string[] = [];\n if (lp.meanLine !== undefined) va.push(`meanLine=\"${lp.meanLine ? '1' : '0'}\"`);\n if (lp.meanMarker !== undefined) va.push(`meanMarker=\"${lp.meanMarker ? '1' : '0'}\"`);\n if (lp.nonoutliers !== undefined) va.push(`nonoutliers=\"${lp.nonoutliers ? '1' : '0'}\"`);\n if (lp.outliers !== undefined) va.push(`outliers=\"${lp.outliers ? '1' : '0'}\"`);\n const visTag = `<cx:visibility${va.length > 0 ? ` ${va.join(' ')}` : ''}/>`;\n const qmTag = lp.quartileMethod !== undefined ? `<cx:quartileMethod val=\"${lp.quartileMethod}\"/>` : '';\n return `<cx:layoutPr>${visTag}${qmTag}</cx:layoutPr>`;\n }\n case 'region': {\n const a: string[] = [];\n if (lp.cultureLanguage !== undefined) a.push(`cultureLanguage=\"${escapeAttr(lp.cultureLanguage)}\"`);\n if (lp.cultureRegion !== undefined) a.push(`cultureRegion=\"${escapeAttr(lp.cultureRegion)}\"`);\n if (lp.projectionType !== undefined) a.push(`projectionType=\"${lp.projectionType}\"`);\n const rll = lp.regionLabelLayout !== undefined ? `<cx:regionLabelLayout val=\"${lp.regionLabelLayout}\"/>` : '';\n return `<cx:layoutPr><cx:geography${a.length > 0 ? ` ${a.join(' ')}` : ''}>${rll}</cx:geography></cx:layoutPr>`;\n }\n }\n};\n\nconst serializeDataLabels = (dl: CxDataLabels): string => {\n const attrs: string[] = [];\n if (dl.pos) attrs.push(`pos=\"${dl.pos}\"`);\n let inner = '';\n if (dl.visibility) {\n const va: string[] = [];\n if (dl.visibility.seriesName !== undefined) va.push(`seriesName=\"${dl.visibility.seriesName ? '1' : '0'}\"`);\n if (dl.visibility.categoryName !== undefined) va.push(`categoryName=\"${dl.visibility.categoryName ? '1' : '0'}\"`);\n if (dl.visibility.value !== undefined) va.push(`value=\"${dl.visibility.value ? '1' : '0'}\"`);\n inner = `<cx:visibility${va.length > 0 ? ` ${va.join(' ')}` : ''}/>`;\n }\n const open = `<cx:dataLabels${attrs.length > 0 ? ` ${attrs.join(' ')}` : ''}`;\n return inner === '' ? `${open}/>` : `${open}>${inner}</cx:dataLabels>`;\n};\n\nconst serializeSeries = (s: CxSeries): string => {\n const attrs: string[] = [`layoutId=\"${s.layoutId}\"`];\n if (s.hidden !== undefined) attrs.push(`hidden=\"${s.hidden ? '1' : '0'}\"`);\n if (s.ownerIdx !== undefined) attrs.push(`ownerIdx=\"${s.ownerIdx}\"`);\n if (s.formatIdx !== undefined) attrs.push(`formatIdx=\"${s.formatIdx}\"`);\n const parts: string[] = [`<cx:series ${attrs.join(' ')}>`];\n if (s.tx) {\n const f = s.tx.f !== undefined ? `<cx:f>${escapeText(s.tx.f)}</cx:f>` : '';\n const v = s.tx.v !== undefined ? `<cx:v>${escapeText(s.tx.v)}</cx:v>` : '';\n parts.push(`<cx:tx><cx:txData>${f}${v}</cx:txData></cx:tx>`);\n }\n if (s.spPr) parts.push(serializeShapeProperties(s.spPr, 'cx:spPr'));\n if (s.txPr) parts.push(serializeTextBody(s.txPr, 'cx:txPr'));\n if (s.dataLabels) parts.push(serializeDataLabels(s.dataLabels));\n if (s.dataId !== undefined) parts.push(`<cx:dataId val=\"${s.dataId}\"/>`);\n if (s.layoutPr) parts.push(serializeLayoutPr(s.layoutPr));\n if (s.axisIds) for (const a of s.axisIds) parts.push(`<cx:axisId val=\"${a}\"/>`);\n parts.push('</cx:series>');\n return parts.join('');\n};\n\nconst serializeAxis = (a: CxAxis): string => {\n const attrs: string[] = [`id=\"${a.id}\"`];\n if (a.hidden !== undefined) attrs.push(`hidden=\"${a.hidden ? '1' : '0'}\"`);\n const parts: string[] = [`<cx:axis ${attrs.join(' ')}>`];\n // Excel rejects an empty `<cx:axis>` — every axis needs at least a scaling\n // child. Default to `<cx:valScaling/>` when the caller didn't pick one, which\n // is the safer fallback (numeric axes are far more common than category axes\n // in chartex layouts).\n let scalingEmitted = false;\n if (a.valScaling) {\n const va: string[] = [];\n if (a.valScaling.min !== undefined) va.push(`min=\"${a.valScaling.min}\"`);\n if (a.valScaling.max !== undefined) va.push(`max=\"${a.valScaling.max}\"`);\n parts.push(`<cx:valScaling${va.length > 0 ? ` ${va.join(' ')}` : ''}/>`);\n scalingEmitted = true;\n }\n if (a.catScalingGapWidth !== undefined) {\n parts.push(`<cx:catScaling gapWidth=\"${a.catScalingGapWidth}\"/>`);\n scalingEmitted = true;\n }\n if (!scalingEmitted) parts.push('<cx:valScaling/>');\n if (a.majorGridlines) parts.push('<cx:majorGridlines/>');\n if (a.title) parts.push(serializeTitle(a.title));\n if (a.spPr) parts.push(serializeShapeProperties(a.spPr, 'cx:spPr'));\n if (a.txPr) parts.push(serializeTextBody(a.txPr, 'cx:txPr'));\n parts.push('</cx:axis>');\n return parts.join('');\n};\n\nconst serializeChart = (c: CxChart): string => {\n const parts: string[] = ['<cx:chart>'];\n if (c.title) parts.push(serializeTitle(c.title));\n parts.push('<cx:plotArea><cx:plotAreaRegion>');\n // <cx:plotSurface> sits at the start of <cx:plotAreaRegion> and carries the\n // plot background spPr.\n if (c.plotArea.spPr) parts.push(serializeShapeProperties(c.plotArea.spPr, 'cx:plotSurface'));\n for (const s of c.plotArea.series) parts.push(serializeSeries(s));\n parts.push('</cx:plotAreaRegion>');\n // Axes are siblings of <cx:plotAreaRegion> under <cx:plotArea>.\n for (const a of c.plotArea.axes) parts.push(serializeAxis(a));\n parts.push('</cx:plotArea>');\n if (c.legend) parts.push(serializeLegend(c.legend));\n if (c.plotVisOnly !== undefined) parts.push(`<cx:plotVisOnly val=\"${c.plotVisOnly ? '1' : '0'}\"/>`);\n if (c.dispBlanksAs !== undefined) parts.push(`<cx:dispBlanksAs val=\"${c.dispBlanksAs}\"/>`);\n parts.push('</cx:chart>');\n return parts.join('');\n};\n\nexport function serializeChartExSpace(space: CxChartSpace): string {\n const parts: string[] = [\n XML_HEADER,\n `<cx:chartSpace xmlns:cx=\"${CX_NS}\" xmlns:r=\"${REL_NS}\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">`,\n serializeChartData(space.chartData),\n serializeChart(space.chart),\n ];\n // chartSpace-level spPr / txPr are siblings of <cx:chart>, emitted after.\n if (space.spPr) parts.push(serializeShapeProperties(space.spPr, 'cx:spPr'));\n if (space.txPr) parts.push(serializeTextBody(space.txPr, 'cx:txPr'));\n parts.push('</cx:chartSpace>');\n return parts.join('');\n}\n\nexport function chartExToBytes(space: CxChartSpace): Uint8Array {\n return new TextEncoder().encode(serializeChartExSpace(space));\n}\n","// `xl/drawings/chartDrawingN.xml` reader/writer.\n\nimport {\n parseShapeProperties,\n parseTextBody,\n serializeShapeProperties,\n serializeTextBody,\n} from '../drawing/dml/dml-xml';\nimport type { PositiveSize2D } from '../drawing/dml/shape-properties';\nimport { escapeXmlAttr } from '../utils/escape';\nimport { OpenXmlSchemaError } from '../utils/exceptions';\nimport { CHART_DRAWING_NS, DRAWING_NS, REL_NS } from '../xml/namespaces';\nimport { parseXml } from '../xml/parser';\nimport { findChild, type XmlNode } from '../xml/tree';\nimport {\n type ChartDrawing,\n type ChartDrawingPicture,\n type ChartDrawingShape,\n type ChartRelativeMarker,\n makeChartDrawing,\n type UserShapeAnchor,\n type UserShapeContent,\n} from './user-shapes';\n\nconst C = (local: string): string => `{${CHART_DRAWING_NS}}${local}`;\nconst A = (local: string): string => `{${DRAWING_NS}}${local}`;\n\nconst USER_SHAPES_TAG = C('userShapes');\nconst REL_SIZE_ANCHOR = C('relSizeAnchor');\nconst ABS_SIZE_ANCHOR = C('absSizeAnchor');\nconst FROM = C('from');\nconst TO = C('to');\nconst EXT = C('ext');\nconst X_TAG = C('x');\nconst Y_TAG = C('y');\nconst SP = C('sp');\nconst NV_SP_PR = C('nvSpPr');\nconst C_NV_PR = C('cNvPr');\nconst C_NV_SP_PR = C('cNvSpPr');\nconst SP_PR = C('spPr');\nconst TX_BODY = C('txBody');\nconst PIC = C('pic');\nconst NV_PIC_PR = C('nvPicPr');\nconst BLIP_FILL = C('blipFill');\nconst A_BLIP = A('blip');\n\nconst XML_HEADER = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n\nconst escapeAttr = escapeXmlAttr;\n\nconst parseFloatText = (text: string | undefined): number | undefined => {\n if (text === undefined) return undefined;\n const n = Number.parseFloat(text);\n return Number.isFinite(n) ? n : undefined;\n};\n\nconst parseMarker = (el: XmlNode): ChartRelativeMarker => ({\n x: parseFloatText(findChild(el, X_TAG)?.text) ?? 0,\n y: parseFloatText(findChild(el, Y_TAG)?.text) ?? 0,\n});\n\nconst parseExt = (el: XmlNode): PositiveSize2D => {\n const cx = Number.parseInt(el.attrs['cx'] ?? '0', 10);\n const cy = Number.parseInt(el.attrs['cy'] ?? '0', 10);\n return { cx: Number.isFinite(cx) ? cx : 0, cy: Number.isFinite(cy) ? cy : 0 };\n};\n\nconst parseCNvPr = (\n cNvPr: XmlNode | undefined,\n): { id: number; name?: string; descr?: string; hidden?: boolean } => {\n if (!cNvPr) return { id: 0 };\n const id = Number.parseInt(cNvPr.attrs['id'] ?? '0', 10);\n const out: { id: number; name?: string; descr?: string; hidden?: boolean } = {\n id: Number.isFinite(id) ? id : 0,\n };\n if (cNvPr.attrs['name'] !== undefined) out.name = cNvPr.attrs['name'];\n if (cNvPr.attrs['descr'] !== undefined) out.descr = cNvPr.attrs['descr'];\n const hiddenRaw = cNvPr.attrs['hidden'];\n if (hiddenRaw === '1' || hiddenRaw === 'true') out.hidden = true;\n return out;\n};\n\nconst parseShape = (el: XmlNode): ChartDrawingShape => {\n const nvSpPr = findChild(el, NV_SP_PR);\n const cNvPr = nvSpPr ? findChild(nvSpPr, C_NV_PR) : undefined;\n const cNvSpPr = nvSpPr ? findChild(nvSpPr, C_NV_SP_PR) : undefined;\n const txBoxRaw = cNvSpPr?.attrs['txBox'];\n const out: ChartDrawingShape = parseCNvPr(cNvPr);\n if (txBoxRaw === '1' || txBoxRaw === 'true') out.txBox = true;\n const spPrEl = findChild(el, SP_PR);\n if (spPrEl) out.spPr = parseShapeProperties(spPrEl);\n const txBodyEl = findChild(el, TX_BODY);\n if (txBodyEl) out.txBody = parseTextBody(txBodyEl);\n return out;\n};\n\nconst parsePicture = (el: XmlNode): ChartDrawingPicture => {\n const nvPicPr = findChild(el, NV_PIC_PR);\n const cNvPr = nvPicPr ? findChild(nvPicPr, C_NV_PR) : undefined;\n const out: ChartDrawingPicture = parseCNvPr(cNvPr);\n const blipFill = findChild(el, BLIP_FILL);\n if (blipFill) {\n const blip = findChild(blipFill, A_BLIP);\n const embed = blip?.attrs[`{${REL_NS}}embed`];\n if (embed) out.embedRId = embed;\n }\n const spPrEl = findChild(el, SP_PR);\n if (spPrEl) out.spPr = parseShapeProperties(spPrEl);\n return out;\n};\n\nconst parseContent = (el: XmlNode): UserShapeContent | undefined => {\n const sp = findChild(el, SP);\n if (sp) return { kind: 'shape', shape: parseShape(sp) };\n const pic = findChild(el, PIC);\n if (pic) return { kind: 'picture', picture: parsePicture(pic) };\n return undefined;\n};\n\nconst parseAnchor = (el: XmlNode): UserShapeAnchor | undefined => {\n const fromEl = findChild(el, FROM);\n if (!fromEl) return undefined;\n const from = parseMarker(fromEl);\n const content = parseContent(el);\n if (!content) return undefined;\n if (el.name === REL_SIZE_ANCHOR) {\n const toEl = findChild(el, TO);\n if (!toEl) return undefined;\n return { kind: 'relSize', from, to: parseMarker(toEl), content };\n }\n if (el.name === ABS_SIZE_ANCHOR) {\n const extEl = findChild(el, EXT);\n if (!extEl) return undefined;\n return { kind: 'absSize', from, ext: parseExt(extEl), content };\n }\n return undefined;\n};\n\nexport function parseUserShapesXml(bytes: Uint8Array | string): ChartDrawing {\n const root = parseXml(bytes);\n if (root.name !== USER_SHAPES_TAG) {\n throw new OpenXmlSchemaError(`parseUserShapesXml: root is \"${root.name}\", expected ${USER_SHAPES_TAG}`);\n }\n const shapes: UserShapeAnchor[] = [];\n for (const child of root.children) {\n if (typeof child === 'string') continue;\n if (child.name !== REL_SIZE_ANCHOR && child.name !== ABS_SIZE_ANCHOR) continue;\n const anchor = parseAnchor(child);\n if (anchor) shapes.push(anchor);\n }\n return makeChartDrawing(shapes);\n}\n\nconst serializeMarker = (tag: string, m: ChartRelativeMarker): string =>\n `<cdr:${tag}><cdr:x>${m.x}</cdr:x><cdr:y>${m.y}</cdr:y></cdr:${tag}>`;\n\nconst serializeShape = (s: ChartDrawingShape): string => {\n const cNvPrAttrs: string[] = [`id=\"${s.id}\"`, `name=\"${escapeAttr(s.name ?? `Shape ${s.id}`)}\"`];\n if (s.descr !== undefined) cNvPrAttrs.push(`descr=\"${escapeAttr(s.descr)}\"`);\n if (s.hidden) cNvPrAttrs.push('hidden=\"1\"');\n const cNvSpPr = s.txBox ? '<cdr:cNvSpPr txBox=\"1\"/>' : '<cdr:cNvSpPr/>';\n const spPr = s.spPr\n ? serializeShapeProperties(s.spPr, 'cdr:spPr')\n : '<cdr:spPr><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></cdr:spPr>';\n const txBody = s.txBody ? serializeTextBody(s.txBody, 'cdr:txBody') : '';\n return [\n '<cdr:sp macro=\"\" textlink=\"\">',\n `<cdr:nvSpPr><cdr:cNvPr ${cNvPrAttrs.join(' ')}/>${cNvSpPr}</cdr:nvSpPr>`,\n spPr,\n txBody,\n '</cdr:sp>',\n ].join('');\n};\n\nconst serializePicture = (p: ChartDrawingPicture): string => {\n const cNvPrAttrs: string[] = [`id=\"${p.id}\"`, `name=\"${escapeAttr(p.name ?? `Picture ${p.id}`)}\"`];\n if (p.descr !== undefined) cNvPrAttrs.push(`descr=\"${escapeAttr(p.descr)}\"`);\n const blip = p.embedRId\n ? `<a:blip xmlns:r=\"${REL_NS}\" r:embed=\"${escapeAttr(p.embedRId)}\"/>`\n : '<a:blip/>';\n const spPr = p.spPr\n ? serializeShapeProperties(p.spPr, 'cdr:spPr')\n : '<cdr:spPr><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></cdr:spPr>';\n return [\n '<cdr:pic>',\n `<cdr:nvPicPr><cdr:cNvPr ${cNvPrAttrs.join(' ')}/><cdr:cNvPicPr/></cdr:nvPicPr>`,\n `<cdr:blipFill>${blip}<a:stretch><a:fillRect/></a:stretch></cdr:blipFill>`,\n spPr,\n '</cdr:pic>',\n ].join('');\n};\n\nconst serializeContent = (c: UserShapeContent): string =>\n c.kind === 'shape' ? serializeShape(c.shape) : serializePicture(c.picture);\n\nconst serializeAnchor = (a: UserShapeAnchor): string => {\n if (a.kind === 'relSize') {\n return [\n '<cdr:relSizeAnchor>',\n serializeMarker('from', a.from),\n serializeMarker('to', a.to),\n serializeContent(a.content),\n '</cdr:relSizeAnchor>',\n ].join('');\n }\n return [\n '<cdr:absSizeAnchor>',\n serializeMarker('from', a.from),\n `<cdr:ext cx=\"${a.ext.cx}\" cy=\"${a.ext.cy}\"/>`,\n serializeContent(a.content),\n '</cdr:absSizeAnchor>',\n ].join('');\n};\n\nexport function serializeUserShapes(d: ChartDrawing): string {\n const parts: string[] = [\n XML_HEADER,\n `<cdr:userShapes xmlns:cdr=\"${CHART_DRAWING_NS}\" xmlns:a=\"${DRAWING_NS}\" xmlns:r=\"${REL_NS}\">`,\n ];\n for (const a of d.shapes) parts.push(serializeAnchor(a));\n parts.push('</cdr:userShapes>');\n return parts.join('');\n}\n\nexport function userShapesToBytes(d: ChartDrawing): Uint8Array {\n return new TextEncoder().encode(serializeUserShapes(d));\n}\n","// Excel formula tokenizer. TS port of openpyxl/openpyxl/formula/tokenizer.py\n// (which itself is a port of Eric Bachtal's JavaScript reference impl). The\n// tokenizer is **not** an evaluator — it splits a formula string into a flat\n// list of typed tokens that the writer / shared-formula translator consume.\n//\n// Per the project no-classes rule, the state is kept in a `TokenizerState`\n// struct and the parsing rules are free functions that mutate it. The public\n// surface is `tokenize(formula)` which returns the resulting token array, plus\n// `renderTokens(items)` for the `Tokenizer.render()` equivalent (used by tests\n// + array-formula round-trip).\n\nimport { OpenXmlError } from '../utils/exceptions';\n\nexport class TokenizerError extends OpenXmlError {\n override readonly name = 'TokenizerError';\n}\n\n// ---- Token type / subtype constants (mirror openpyxl Token attrs) -----------\n\nexport const LITERAL = 'LITERAL';\nexport const OPERAND = 'OPERAND';\nexport const FUNC = 'FUNC';\nexport const ARRAY = 'ARRAY';\nexport const PAREN = 'PAREN';\nexport const SEP = 'SEP';\nexport const OP_PRE = 'OPERATOR-PREFIX';\nexport const OP_IN = 'OPERATOR-INFIX';\nexport const OP_POST = 'OPERATOR-POSTFIX';\nexport const WSPACE = 'WHITE-SPACE';\n\ntype TokenType =\n | typeof LITERAL\n | typeof OPERAND\n | typeof FUNC\n | typeof ARRAY\n | typeof PAREN\n | typeof SEP\n | typeof OP_PRE\n | typeof OP_IN\n | typeof OP_POST\n | typeof WSPACE;\n\nexport const TEXT = 'TEXT';\nexport const NUMBER = 'NUMBER';\nexport const LOGICAL = 'LOGICAL';\nexport const ERROR = 'ERROR';\nexport const RANGE = 'RANGE';\nexport const OPEN = 'OPEN';\nexport const CLOSE = 'CLOSE';\nexport const ARG = 'ARG';\nexport const ROW = 'ROW';\n\ntype TokenSubtype =\n | ''\n | typeof TEXT\n | typeof NUMBER\n | typeof LOGICAL\n | typeof ERROR\n | typeof RANGE\n | typeof OPEN\n | typeof CLOSE\n | typeof ARG\n | typeof ROW;\n\nexport interface Token {\n value: string;\n type: TokenType;\n subtype: TokenSubtype;\n}\n\n// ---- Token factories --------------------------------------------------------\n\nconst NUMBER_RE = /^[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:[Ee][+-]?\\d+)?$/;\n\n/** Build an OPERAND token, deriving the subtype from the value's shape. */\nexport function makeOperand(value: string): Token {\n let subtype: TokenSubtype;\n if (value.startsWith('\"')) {\n subtype = TEXT;\n } else if (value.startsWith('#')) {\n subtype = ERROR;\n } else if (value === 'TRUE' || value === 'FALSE') {\n subtype = LOGICAL;\n } else if (NUMBER_RE.test(value)) {\n subtype = NUMBER;\n } else {\n subtype = RANGE;\n }\n return { value, type: OPERAND, subtype };\n}\n\n/**\n * Build a \"subexpression\" token (FUNC / PAREN / ARRAY, OPEN or CLOSE).\n *\n * `value` must end with one of `{ } ( )`. If `func` is true, the type is forced\n * to FUNC regardless of the bare-bracket heuristic — mirrors the `func=True`\n * overload in openpyxl `Token.make_subexp`.\n */\nexport function makeSubexp(value: string, func = false): Token {\n const last = value[value.length - 1];\n if (last !== '{' && last !== '}' && last !== '(' && last !== ')') {\n throw new TokenizerError(`makeSubexp: value must end with { } ( ); got \"${value}\"`);\n }\n let type: TokenType;\n if (func) {\n type = FUNC;\n } else if (value === '{' || value === '}') {\n type = ARRAY;\n } else if (value === '(' || value === ')') {\n type = PAREN;\n } else {\n type = FUNC;\n }\n const subtype: TokenSubtype = value === ')' || value === '}' ? CLOSE : OPEN;\n return { value, type, subtype };\n}\n\n/** Returns a CLOSE token that matches the given OPEN subexpression. */\nfunction getCloser(open: Token): Token {\n if (open.type !== FUNC && open.type !== ARRAY && open.type !== PAREN) {\n throw new TokenizerError(`getCloser: expected FUNC/ARRAY/PAREN OPEN; got ${open.type}`);\n }\n if (open.subtype !== OPEN) {\n throw new TokenizerError(`getCloser: expected OPEN subtype; got ${open.subtype}`);\n }\n const value = open.type === ARRAY ? '}' : ')';\n return makeSubexp(value, open.type === FUNC);\n}\n\n/** Build a SEP token (',' → ARG, ';' → ROW). */\nexport function makeSeparator(value: ',' | ';'): Token {\n return { value, type: SEP, subtype: value === ',' ? ARG : ROW };\n}\n\n// ---- Public regex constants (mirrors the openpyxl class attrs) --------------\n\n/** Scientific-notation guard: matches a coefficient ending in `[Ee]`. */\nexport const SN_RE = /^[1-9](?:\\.[0-9]+)?[Ee]$/;\n\n/** Whitespace run (space + LF, per Excel formula whitespace rules). */\nexport const WSPACE_RE = /^[ \\n]+/;\n\n/** \"...\"-delimited string literal. Internal `\"\"` is an escaped quote. */\nexport const STRING_DOUBLE_RE = /^\"(?:[^\"]*\"\")*[^\"]*\"(?!\")/;\n/** '...'-delimited link / sheet name. Internal `''` is an escaped apostrophe. */\nexport const STRING_SINGLE_RE = /^'(?:[^']*'')*[^']*'(?!')/;\n\nconst ERROR_CODES: readonly string[] = [\n '#NULL!',\n '#DIV/0!',\n '#VALUE!',\n '#REF!',\n '#NAME?',\n '#NUM!',\n '#N/A',\n '#GETTING_DATA',\n];\n\n/** Each of these characters terminates the operand token currently being built. */\nconst TOKEN_ENDERS = new Set(',;}) +-*/^&=><%'.split(''));\n\n// ---- Tokenizer state --------------------------------------------------------\n\ninterface TokenizerState {\n formula: string;\n items: Token[];\n /** Stack of OPEN tokens for ARRAY / FUNC / PAREN balance tracking. */\n tokenStack: Token[];\n /** How many chars consumed so far. */\n offset: number;\n /** In-progress operand text, char by char. */\n token: string[];\n}\n\nfunction createState(formula: string): TokenizerState {\n return { formula, items: [], tokenStack: [], offset: 0, token: [] };\n}\n\nfunction saveToken(s: TokenizerState): void {\n if (s.token.length > 0) {\n s.items.push(makeOperand(s.token.join('')));\n s.token.length = 0;\n }\n}\n\nfunction assertEmptyToken(s: TokenizerState, canFollow = ''): void {\n if (s.token.length === 0) return;\n const last = s.token[s.token.length - 1] as string;\n if (canFollow.indexOf(last) === -1) {\n throw new TokenizerError(`Unexpected character at position ${s.offset} in '${s.formula}'`);\n }\n}\n\n// ---- Per-rule consumers (return # chars consumed, do not mutate offset) -----\n\nfunction parseStringLiteral(s: TokenizerState): number {\n assertEmptyToken(s, ':');\n const delim = s.formula[s.offset];\n const regex = delim === '\"' ? STRING_DOUBLE_RE : STRING_SINGLE_RE;\n const tail = s.formula.slice(s.offset);\n const m = regex.exec(tail);\n if (m === null) {\n const subtype = delim === '\"' ? 'string' : 'link';\n throw new TokenizerError(`Reached end of formula while parsing ${subtype} in ${s.formula}`);\n }\n const match = m[0];\n if (delim === '\"') {\n s.items.push(makeOperand(match));\n } else {\n s.token.push(match);\n }\n return match.length;\n}\n\nfunction parseBrackets(s: TokenizerState): number {\n // Walks the bracketed run starting at offset, balancing nested `[`/`]`.\n // Tokens inside brackets are kept verbatim and stitched onto the in-progress\n // operand (e.g. structured table refs `Table1[[#Data],[Col]]`).\n const tail = s.formula.slice(s.offset);\n let openCount = 0;\n for (let i = 0; i < tail.length; i++) {\n const ch = tail[i];\n if (ch === '[') openCount += 1;\n else if (ch === ']') {\n openCount -= 1;\n if (openCount === 0) {\n const outerRight = i + 1;\n s.token.push(tail.slice(0, outerRight));\n return outerRight;\n }\n }\n }\n throw new TokenizerError(`Encountered unmatched '[' in ${s.formula}`);\n}\n\nfunction parseError(s: TokenizerState): number {\n assertEmptyToken(s, '!');\n const sub = s.formula.slice(s.offset);\n for (const err of ERROR_CODES) {\n if (sub.startsWith(err)) {\n s.items.push(makeOperand(s.token.join('') + err));\n s.token.length = 0;\n return err.length;\n }\n }\n throw new TokenizerError(`Invalid error code at position ${s.offset} in '${s.formula}'`);\n}\n\nfunction parseWhitespace(s: TokenizerState): number {\n const ch = s.formula[s.offset] as string;\n s.items.push({ value: ch, type: WSPACE, subtype: '' });\n const tail = s.formula.slice(s.offset);\n const m = WSPACE_RE.exec(tail);\n return m ? m[0].length : 1;\n}\n\nfunction parseOperator(s: TokenizerState): number {\n const two = s.formula.slice(s.offset, s.offset + 2);\n if (two === '>=' || two === '<=' || two === '<>') {\n s.items.push({ value: two, type: OP_IN, subtype: '' });\n return 2;\n }\n const ch = s.formula[s.offset] as string;\n let token: Token;\n if (ch === '%') {\n token = { value: '%', type: OP_POST, subtype: '' };\n } else if ('*/^&=><'.indexOf(ch) !== -1) {\n token = { value: ch, type: OP_IN, subtype: '' };\n } else {\n // ch is in '+-' from here on\n if (s.items.length === 0) {\n token = { value: ch, type: OP_PRE, subtype: '' };\n } else {\n // Find the most recent non-whitespace token to decide infix vs prefix.\n let prev: Token | null = null;\n for (let i = s.items.length - 1; i >= 0; i--) {\n const t = s.items[i] as Token;\n if (t.type !== WSPACE) {\n prev = t;\n break;\n }\n }\n const isInfix = prev !== null && (prev.subtype === CLOSE || prev.type === OP_POST || prev.type === OPERAND);\n token = { value: ch, type: isInfix ? OP_IN : OP_PRE, subtype: '' };\n }\n }\n s.items.push(token);\n return 1;\n}\n\nfunction parseOpener(s: TokenizerState): number {\n const ch = s.formula[s.offset] as string;\n let token: Token;\n if (ch === '{') {\n assertEmptyToken(s);\n token = makeSubexp('{');\n } else if (s.token.length > 0) {\n const value = `${s.token.join('')}(`;\n s.token.length = 0;\n token = makeSubexp(value);\n } else {\n token = makeSubexp('(');\n }\n s.items.push(token);\n s.tokenStack.push(token);\n return 1;\n}\n\nfunction parseCloser(s: TokenizerState): number {\n const opener = s.tokenStack.pop();\n if (!opener) {\n throw new TokenizerError(`Unmatched closer in '${s.formula}'`);\n }\n const closer = getCloser(opener);\n if (closer.value !== s.formula[s.offset]) {\n throw new TokenizerError(`Mismatched ( and { pair in '${s.formula}'`);\n }\n s.items.push(closer);\n return 1;\n}\n\nfunction parseSeparator(s: TokenizerState): number {\n const ch = s.formula[s.offset] as string;\n let token: Token;\n if (ch === ';') {\n token = makeSeparator(';');\n } else {\n // ','. Range-union if the enclosing context is a PAREN or there is none\n // (top-level), otherwise an arg separator.\n const top = s.tokenStack[s.tokenStack.length - 1];\n if (!top || top.type === PAREN) {\n token = { value: ',', type: OP_IN, subtype: '' };\n } else {\n token = makeSeparator(',');\n }\n }\n s.items.push(token);\n return 1;\n}\n\nfunction checkScientificNotation(s: TokenizerState): boolean {\n const ch = s.formula[s.offset];\n if ((ch === '+' || ch === '-') && s.token.length >= 1 && SN_RE.test(s.token.join(''))) {\n s.token.push(ch);\n s.offset += 1;\n return true;\n }\n return false;\n}\n\n// ---- Public API -------------------------------------------------------------\n\n/**\n * Tokenize a formula string into a flat list of `Token`s.\n *\n * Mirrors `openpyxl.formula.tokenizer.Tokenizer(formula).items`. A formula that\n * does not start with `=` becomes a single LITERAL token. Empty input yields\n * the empty array.\n */\nexport function tokenize(formula: string): Token[] {\n const s = createState(formula);\n if (formula.length === 0) return s.items;\n if (formula[0] !== '=') {\n s.items.push({ value: formula, type: LITERAL, subtype: '' });\n return s.items;\n }\n s.offset = 1;\n const len = formula.length;\n while (s.offset < len) {\n if (checkScientificNotation(s)) continue;\n const ch = formula[s.offset] as string;\n if (TOKEN_ENDERS.has(ch)) saveToken(s);\n let consumed: number | null = null;\n switch (ch) {\n case '\"':\n case \"'\":\n consumed = parseStringLiteral(s);\n break;\n case '[':\n consumed = parseBrackets(s);\n break;\n case '#':\n consumed = parseError(s);\n break;\n case ' ':\n case '\\n':\n consumed = parseWhitespace(s);\n break;\n case '+':\n case '-':\n case '*':\n case '/':\n case '^':\n case '&':\n case '=':\n case '>':\n case '<':\n case '%':\n consumed = parseOperator(s);\n break;\n case '{':\n case '(':\n consumed = parseOpener(s);\n break;\n case ')':\n case '}':\n consumed = parseCloser(s);\n break;\n case ';':\n case ',':\n consumed = parseSeparator(s);\n break;\n default:\n s.token.push(ch);\n consumed = 1;\n }\n s.offset += consumed;\n }\n saveToken(s);\n return s.items;\n}\n\n/** Render a token list back into the original formula string. */\nexport function renderTokens(items: ReadonlyArray<Token>): string {\n if (items.length === 0) return '';\n const first = items[0] as Token;\n if (first.type === LITERAL) return first.value;\n let out = '=';\n for (const t of items) out += t.value;\n return out;\n}\n","// Shared / array formula translator. TS port of openpyxl\n// `formula/translate.py`. Walks the tokens produced by `tokenize`, shifts\n// the OPERAND-RANGE cell refs by `(row_delta, col_delta)`, and re-renders\n// the formula. Absolute (`$`-prefixed) anchors stay put; falling off the\n// top or left of the grid raises `TranslatorError`. **Never evaluates.**\n\nimport { columnIndexFromLetter, columnLetterFromIndex, coordinateToTuple } from '../utils/coordinate';\nimport { OpenXmlError } from '../utils/exceptions';\nimport { LITERAL, OPERAND, RANGE, renderTokens, type Token, tokenize } from './tokenizer';\n\nexport class TranslatorError extends OpenXmlError {\n override readonly name = 'TranslatorError';\n}\n\n/** `1:1`, `$1234:78910`, etc. — pure-row range. */\nexport const ROW_RANGE_RE = /^(\\$?[1-9][0-9]{0,6}):(\\$?[1-9][0-9]{0,6})$/;\n/** `A:A`, `$ABC:AZZ` — pure-column range. */\nexport const COL_RANGE_RE = /^(\\$?[A-Za-z]{1,3}):(\\$?[A-Za-z]{1,3})$/;\n/** `A1`, `$AB$15` — single cell ref. */\nexport const CELL_REF_RE = /^(\\$?[A-Za-z]{1,3})(\\$?[1-9][0-9]{0,6})$/;\n\n/**\n * Shift a row-snippet (`\"3\"` or `\"$3\"`) by `rdelta` rows. Absolute\n * anchors return verbatim; falling below row 1 raises `TranslatorError`.\n */\nexport function translateRow(rowStr: string, rdelta: number): string {\n if (rowStr.startsWith('$')) return rowStr;\n const newRow = Number.parseInt(rowStr, 10) + rdelta;\n if (newRow <= 0) {\n throw new TranslatorError('Formula out of range');\n }\n return String(newRow);\n}\n\n/**\n * Shift a column-snippet (`\"A\"` or `\"$A\"`) by `cdelta` columns. Absolute\n * anchors return verbatim; out-of-range raises `TranslatorError`.\n */\nexport function translateCol(colStr: string, cdelta: number): string {\n if (colStr.startsWith('$')) return colStr;\n let idx: number;\n try {\n idx = columnIndexFromLetter(colStr);\n } catch {\n throw new TranslatorError('Formula out of range');\n }\n const newIdx = idx + cdelta;\n try {\n return columnLetterFromIndex(newIdx);\n } catch {\n throw new TranslatorError('Formula out of range');\n }\n}\n\n/**\n * Split `Sheet!A1` into `[\"Sheet!\", \"A1\"]`. Multi-`!` sheet names are not\n * supported by Excel itself, so we just `rsplit('!', 1)`.\n */\nexport function stripWsName(rangeStr: string): [string, string] {\n const idx = rangeStr.lastIndexOf('!');\n if (idx === -1) return ['', rangeStr];\n return [`${rangeStr.slice(0, idx + 1)}`, rangeStr.slice(idx + 1)];\n}\n\n/**\n * Translate an A1-style range reference (potentially worksheet-prefixed,\n * potentially a named range) by `(rdelta, cdelta)`. Mirrors openpyxl\n * `Translator.translate_range` exactly:\n *\n * - `1:1` / `$1234:78910` → row-range, only rows shift\n * - `A:A` / `$ABC:AZZ` → col-range, only cols shift\n * - `A1:B2` (with `:`) → recurse on each side, allowing named-range endpoints\n * - `A1` → cell ref\n * - anything else → assumed named range, returned verbatim\n */\nexport function translateRange(rangeStr: string, rdelta: number, cdelta: number): string {\n const [wsPart, rest] = stripWsName(rangeStr);\n const rowMatch = ROW_RANGE_RE.exec(rest);\n if (rowMatch !== null) {\n return `${wsPart}${translateRow(rowMatch[1] as string, rdelta)}:${translateRow(rowMatch[2] as string, rdelta)}`;\n }\n const colMatch = COL_RANGE_RE.exec(rest);\n if (colMatch !== null) {\n return `${wsPart}${translateCol(colMatch[1] as string, cdelta)}:${translateCol(colMatch[2] as string, cdelta)}`;\n }\n if (rest.indexOf(':') !== -1) {\n const pieces = rest.split(':').map((p) => translateRange(p, rdelta, cdelta));\n return wsPart + pieces.join(':');\n }\n const cellMatch = CELL_REF_RE.exec(rest);\n if (cellMatch === null) return rest; // assume named range\n return `${wsPart}${translateCol(cellMatch[1] as string, cdelta)}${translateRow(cellMatch[2] as string, rdelta)}`;\n}\n\nexport interface TranslateOptions {\n /** Destination cell address (\"B2\"). When set, derives `rowDelta`/`colDelta` from `origin`. */\n dest?: string;\n /** Explicit row delta. Ignored if `dest` is provided. */\n rowDelta?: number;\n /** Explicit col delta. Ignored if `dest` is provided. */\n colDelta?: number;\n}\n\n/**\n * Translate `formula` (defined at `origin`, e.g. \"A1\") to its destination\n * cell. Pass either `{ dest }` or `{ rowDelta, colDelta }`. LITERAL\n * formulas (input that does not start with `=`) and empty input pass\n * through untouched.\n */\nexport function translateFormula(formula: string, origin: string, opts: TranslateOptions = {}): string {\n const { col: originCol, row: originRow } = coordinateToTuple(origin);\n let rowDelta = opts.rowDelta ?? 0;\n let colDelta = opts.colDelta ?? 0;\n if (opts.dest !== undefined) {\n const { col: destCol, row: destRow } = coordinateToTuple(opts.dest);\n rowDelta = destRow - originRow;\n colDelta = destCol - originCol;\n }\n const tokens = tokenize(formula);\n if (tokens.length === 0) return '';\n const first = tokens[0] as Token;\n if (first.type === LITERAL) return first.value;\n let out = '=';\n for (const t of tokens) {\n if (t.type === OPERAND && t.subtype === RANGE) {\n out += translateRange(t.value, rowDelta, colDelta);\n } else {\n out += t.value;\n }\n }\n return out;\n}\n\n/**\n * Convenience: tokenize once, expose the parsed list + the same translate\n * helpers bound to a fixed origin. Mirrors openpyxl's `Translator` object.\n */\nexport interface Translator {\n formula: string;\n origin: string;\n row: number;\n col: number;\n tokens: Token[];\n}\n\nexport function makeTranslator(formula: string, origin: string): Translator {\n const { row, col } = coordinateToTuple(origin);\n return { formula, origin, row, col, tokens: tokenize(formula) };\n}\n\n/** Render the translator's tokens back to the source string (sanity check). */\nexport function translatorRender(t: Translator): string {\n return renderTokens(t.tokens);\n}\n","// Worksheet XML reader.\n//\n// **Stage 1**: DOM-based reader for `<sheetData>/<row>/<c>` covering the common\n// cell-value shapes — number / shared-string / boolean / error / inline string\n// / formula. SAX iterparse + dimension / sheetView / mergeCells / hyperlinks\n// etc. land in later iterations of the loop. The function signature is stable\n// so the SAX swap won't break downstream callers.\n\nimport {\n type Cell,\n type ExcelErrorCode,\n type FormulaKind,\n setArrayFormula,\n setDataTableFormula,\n setFormula,\n setSharedFormula,\n} from '../cell/cell';\nimport type { Drawing } from '../drawing/drawing';\nimport { translateFormula } from '../formula/translate';\nimport type { Relationships } from '../packaging/relationships';\nimport { findById } from '../packaging/relationships';\nimport { coordinateToTuple, tupleToCoordinate } from '../utils/coordinate';\nimport { OpenXmlSchemaError } from '../utils/exceptions';\nimport { ERROR_CODES } from '../utils/inference';\nimport { REL_NS, SHEET_MAIN_NS } from '../xml/namespaces';\nimport { parseXml } from '../xml/parser';\nimport { serializeXml } from '../xml/serializer';\nimport { findChild, findChildren, type XmlNode } from '../xml/tree';\nimport type { AutoFilter, FilterColumn } from './auto-filter';\nimport { parseMultiCellRange, parseRange } from './cell-range';\nimport type { LegacyComment } from './comments';\nimport type {\n ConditionalFormatting,\n ConditionalFormattingRule,\n ConditionalFormattingRuleType,\n TimePeriod,\n} from './conditional-formatting';\nimport { makeCfRule, makeConditionalFormatting } from './conditional-formatting';\nimport type {\n DataValidation,\n DataValidationErrorStyle,\n DataValidationOperator,\n DataValidationType,\n} from './data-validations';\nimport { makeDataValidation } from './data-validations';\nimport type { ColumnDimension, RowDimension } from './dimensions';\nimport type { IgnoredError } from './errors';\nimport type {\n CellCommentMode,\n HeaderFooter,\n PageBreak,\n PageMargins,\n PageOrder,\n PageOrientation,\n PageSetup,\n PrintErrorMode,\n PrintOptions,\n} from './page-setup';\nimport type {\n PhoneticAlignment,\n PhoneticType,\n WorksheetPhoneticProperties,\n} from './phonetic';\nimport type {\n DataConsolidate,\n DataConsolidateFunction,\n DataReference,\n} from './data-consolidate';\nimport type { Scenario, ScenarioInputCell, ScenarioList } from './scenarios';\nimport type { OutlineProperties, PageSetupProperties, SheetProperties } from './properties';\nimport type { SheetProtection } from './protection';\nimport type { ProtectedRange } from './protected-ranges';\nimport type { SortBy, SortCondition, SortIconSet, SortMethod, SortState } from './sort-state';\nimport type { FormControl, OleDvAspect, OleObject, OleUpdateMode } from './ole-objects';\nimport type { CustomSheetView, CustomSheetViewState } from './custom-sheet-views';\nimport type { WebPublishItem, WorksheetCustomProperty } from './web-publish';\nimport { makeColor } from '../styles/colors';\nimport { makeColumnDimension, makeRowDimension } from './dimensions';\nimport type { Hyperlink } from './hyperlinks';\nimport { makeHyperlink } from './hyperlinks';\nimport type { TableDefinition } from './table';\nimport type { Pane, PaneState, PaneType, Selection, SheetView, SheetViewMode } from './views';\nimport { makeSheetView } from './views';\nimport { makeWorksheet, setCell, type Worksheet } from './worksheet';\n\nconst WORKSHEET_TAG = `{${SHEET_MAIN_NS}}worksheet`;\nconst SHEETDATA_TAG = `{${SHEET_MAIN_NS}}sheetData`;\nconst ROW_TAG = `{${SHEET_MAIN_NS}}row`;\nconst C_TAG = `{${SHEET_MAIN_NS}}c`;\nconst V_TAG = `{${SHEET_MAIN_NS}}v`;\nconst F_TAG = `{${SHEET_MAIN_NS}}f`;\nconst IS_TAG = `{${SHEET_MAIN_NS}}is`;\nconst T_TAG = `{${SHEET_MAIN_NS}}t`;\nconst MERGE_CELLS_TAG = `{${SHEET_MAIN_NS}}mergeCells`;\nconst MERGE_CELL_TAG = `{${SHEET_MAIN_NS}}mergeCell`;\nconst SHEET_VIEWS_TAG = `{${SHEET_MAIN_NS}}sheetViews`;\nconst SHEET_VIEW_TAG = `{${SHEET_MAIN_NS}}sheetView`;\nconst PANE_TAG = `{${SHEET_MAIN_NS}}pane`;\nconst SELECTION_TAG = `{${SHEET_MAIN_NS}}selection`;\nconst COLS_TAG = `{${SHEET_MAIN_NS}}cols`;\nconst COL_TAG = `{${SHEET_MAIN_NS}}col`;\nconst SHEET_FORMAT_PR_TAG = `{${SHEET_MAIN_NS}}sheetFormatPr`;\nconst HYPERLINKS_TAG = `{${SHEET_MAIN_NS}}hyperlinks`;\nconst HYPERLINK_TAG = `{${SHEET_MAIN_NS}}hyperlink`;\nconst DATA_VALIDATIONS_TAG = `{${SHEET_MAIN_NS}}dataValidations`;\nconst DATA_VALIDATION_TAG = `{${SHEET_MAIN_NS}}dataValidation`;\nconst FORMULA1_TAG = `{${SHEET_MAIN_NS}}formula1`;\nconst FORMULA2_TAG = `{${SHEET_MAIN_NS}}formula2`;\nconst AUTOFILTER_TAG = `{${SHEET_MAIN_NS}}autoFilter`;\nconst FILTER_COLUMN_TAG = `{${SHEET_MAIN_NS}}filterColumn`;\nconst FILTERS_TAG = `{${SHEET_MAIN_NS}}filters`;\nconst FILTER_TAG = `{${SHEET_MAIN_NS}}filter`;\nconst TABLE_PARTS_TAG = `{${SHEET_MAIN_NS}}tableParts`;\nconst TABLE_PART_TAG = `{${SHEET_MAIN_NS}}tablePart`;\nconst CONDITIONAL_FORMATTING_TAG = `{${SHEET_MAIN_NS}}conditionalFormatting`;\nconst CF_RULE_TAG = `{${SHEET_MAIN_NS}}cfRule`;\nconst FORMULA_TAG = `{${SHEET_MAIN_NS}}formula`;\nconst DRAWING_TAG = `{${SHEET_MAIN_NS}}drawing`;\nconst CELL_WATCHES_TAG = `{${SHEET_MAIN_NS}}cellWatches`;\nconst CELL_WATCH_TAG = `{${SHEET_MAIN_NS}}cellWatch`;\nconst IGNORED_ERRORS_TAG = `{${SHEET_MAIN_NS}}ignoredErrors`;\nconst IGNORED_ERROR_TAG = `{${SHEET_MAIN_NS}}ignoredError`;\nconst SHEET_PR_TAG = `{${SHEET_MAIN_NS}}sheetPr`;\nconst TAB_COLOR_TAG = `{${SHEET_MAIN_NS}}tabColor`;\nconst OUTLINE_PR_TAG = `{${SHEET_MAIN_NS}}outlinePr`;\nconst PAGE_SETUP_PR_TAG = `{${SHEET_MAIN_NS}}pageSetUpPr`;\nconst SHEET_PROTECTION_TAG = `{${SHEET_MAIN_NS}}sheetProtection`;\nconst PROTECTED_RANGES_TAG = `{${SHEET_MAIN_NS}}protectedRanges`;\nconst PROTECTED_RANGE_TAG = `{${SHEET_MAIN_NS}}protectedRange`;\nconst SORT_STATE_TAG = `{${SHEET_MAIN_NS}}sortState`;\nconst SORT_CONDITION_TAG = `{${SHEET_MAIN_NS}}sortCondition`;\nconst PICTURE_TAG = `{${SHEET_MAIN_NS}}picture`;\nconst LEGACY_DRAWING_HF_TAG = `{${SHEET_MAIN_NS}}legacyDrawingHF`;\nconst CUSTOM_SHEET_VIEWS_TAG = `{${SHEET_MAIN_NS}}customSheetViews`;\nconst CUSTOM_SHEET_VIEW_TAG = `{${SHEET_MAIN_NS}}customSheetView`;\nconst OLE_OBJECTS_TAG = `{${SHEET_MAIN_NS}}oleObjects`;\nconst OLE_OBJECT_TAG = `{${SHEET_MAIN_NS}}oleObject`;\nconst OBJECT_PR_TAG = `{${SHEET_MAIN_NS}}objectPr`;\nconst CONTROLS_TAG = `{${SHEET_MAIN_NS}}controls`;\nconst CONTROL_TAG = `{${SHEET_MAIN_NS}}control`;\nconst CONTROL_PR_TAG = `{${SHEET_MAIN_NS}}controlPr`;\nconst SMART_TAGS_TAG = `{${SHEET_MAIN_NS}}smartTags`;\nconst CELL_SMART_TAGS_TAG = `{${SHEET_MAIN_NS}}cellSmartTags`;\nconst CELL_SMART_TAG_TAG = `{${SHEET_MAIN_NS}}cellSmartTag`;\nconst CELL_SMART_TAG_PR_TAG = `{${SHEET_MAIN_NS}}cellSmartTagPr`;\nconst PRINT_OPTIONS_TAG = `{${SHEET_MAIN_NS}}printOptions`;\nconst PAGE_MARGINS_TAG = `{${SHEET_MAIN_NS}}pageMargins`;\nconst PAGE_SETUP_TAG = `{${SHEET_MAIN_NS}}pageSetup`;\nconst HEADER_FOOTER_TAG = `{${SHEET_MAIN_NS}}headerFooter`;\nconst ROW_BREAKS_TAG = `{${SHEET_MAIN_NS}}rowBreaks`;\nconst COL_BREAKS_TAG = `{${SHEET_MAIN_NS}}colBreaks`;\nconst BRK_TAG = `{${SHEET_MAIN_NS}}brk`;\nconst CUSTOM_PROPERTIES_TAG = `{${SHEET_MAIN_NS}}customProperties`;\nconst CUSTOM_PROPERTY_TAG = `{${SHEET_MAIN_NS}}customProperty`;\nconst WEB_PUBLISH_ITEMS_TAG = `{${SHEET_MAIN_NS}}webPublishItems`;\nconst WEB_PUBLISH_ITEM_TAG = `{${SHEET_MAIN_NS}}webPublishItem`;\nconst PHONETIC_PR_TAG = `{${SHEET_MAIN_NS}}phoneticPr`;\nconst DATA_CONSOLIDATE_TAG = `{${SHEET_MAIN_NS}}dataConsolidate`;\nconst DATA_REFS_TAG = `{${SHEET_MAIN_NS}}dataRefs`;\nconst DATA_REF_TAG = `{${SHEET_MAIN_NS}}dataRef`;\nconst SCENARIOS_TAG = `{${SHEET_MAIN_NS}}scenarios`;\nconst SCENARIO_TAG = `{${SHEET_MAIN_NS}}scenario`;\nconst INPUT_CELLS_TAG = `{${SHEET_MAIN_NS}}inputCells`;\nconst ODD_HEADER_TAG = `{${SHEET_MAIN_NS}}oddHeader`;\nconst ODD_FOOTER_TAG = `{${SHEET_MAIN_NS}}oddFooter`;\nconst EVEN_HEADER_TAG = `{${SHEET_MAIN_NS}}evenHeader`;\nconst EVEN_FOOTER_TAG = `{${SHEET_MAIN_NS}}evenFooter`;\nconst FIRST_HEADER_TAG = `{${SHEET_MAIN_NS}}firstHeader`;\nconst FIRST_FOOTER_TAG = `{${SHEET_MAIN_NS}}firstFooter`;\n\n/** Inputs the worksheet reader needs from the surrounding workbook context. */\nexport interface WorksheetReadContext {\n /** Resolved shared-strings table. Pass `[]` when no sst is present. */\n sharedStrings: ReadonlyArray<string>;\n /** This worksheet's `_rels/sheetN.xml.rels`. Used to resolve external hyperlink targets and table parts. */\n rels?: Relationships;\n /** Resolves a worksheet-rels rId pointing at xl/tables/tableN.xml into a parsed TableDefinition. */\n loadTable?: (relId: string) => TableDefinition | undefined;\n /**\n * Loader for comments parts (rels Type=…/comments). Called once per matching\n * rel; the reader appends every returned LegacyComment onto\n * `ws.legacyComments`.\n */\n loadComments?: (relId: string) => ReadonlyArray<LegacyComment> | undefined;\n /**\n * Loader for the worksheet's drawing part. Called once when the worksheet\n * inline carries `<drawing r:id=\"...\">`.\n */\n loadDrawing?: (relId: string) => Drawing | undefined;\n}\n\n/** Per-worksheet state for shared-formula expansion. */\ninterface SharedFormulaCache {\n origin: string;\n formula: string;\n}\n\n/**\n * Parse a `xl/worksheets/sheetN.xml` payload into a fully-populated Worksheet.\n * The returned worksheet's `title` matches the `title` argument; the XML\n * doesn't carry the sheet name (it lives in `workbook.xml`).\n */\nexport function parseWorksheetXml(bytes: Uint8Array | string, title: string, ctx: WorksheetReadContext): Worksheet {\n const root = parseXml(bytes);\n if (root.name !== WORKSHEET_TAG) {\n throw new OpenXmlSchemaError(`parseWorksheetXml: root is \"${root.name}\", expected worksheet`);\n }\n const ws = makeWorksheet(title);\n\n // <sheetPr codeName=\"…\" filterMode=\"0\" ...> <tabColor rgb=\"FF0070C0\"/>\n // <outlinePr summaryBelow=\"1\" .../> <pageSetUpPr fitToPage=\"1\"/> </sheetPr>\n const sheetPrEl = findChild(root, SHEET_PR_TAG);\n if (sheetPrEl) {\n const props = parseSheetProperties(sheetPrEl);\n if (props) ws.sheetProperties = props;\n }\n\n // <sheetFormatPr> defaults — recorded so dimension-less sheets still reflect\n // any non-default workbook-wide row height / column width.\n const sheetFormatEl = findChild(root, SHEET_FORMAT_PR_TAG);\n if (sheetFormatEl) {\n const defaultColumnWidth = parseFloatAttr(sheetFormatEl.attrs['defaultColWidth']);\n if (defaultColumnWidth !== undefined) ws.defaultColumnWidth = defaultColumnWidth;\n const defaultRowHeight = parseFloatAttr(sheetFormatEl.attrs['defaultRowHeight']);\n if (defaultRowHeight !== undefined) ws.defaultRowHeight = defaultRowHeight;\n const outlineLevelRow = parseIntegerAttr(sheetFormatEl.attrs['outlineLevelRow']);\n if (outlineLevelRow !== undefined) ws.outlineLevelRow = outlineLevelRow;\n const outlineLevelCol = parseIntegerAttr(sheetFormatEl.attrs['outlineLevelCol']);\n if (outlineLevelCol !== undefined) ws.outlineLevelCol = outlineLevelCol;\n const customHeight = parseBoolXmlAttr(sheetFormatEl.attrs['customHeight']);\n if (customHeight !== undefined) ws.customHeight = customHeight;\n const zeroHeight = parseBoolXmlAttr(sheetFormatEl.attrs['zeroHeight']);\n if (zeroHeight !== undefined) ws.zeroHeight = zeroHeight;\n const thickTop = parseBoolXmlAttr(sheetFormatEl.attrs['thickTop']);\n if (thickTop !== undefined) ws.thickTop = thickTop;\n const thickBottom = parseBoolXmlAttr(sheetFormatEl.attrs['thickBottom']);\n if (thickBottom !== undefined) ws.thickBottom = thickBottom;\n const baseColWidth = parseIntegerAttr(sheetFormatEl.attrs['baseColWidth']);\n if (baseColWidth !== undefined) ws.baseColWidth = baseColWidth;\n }\n\n // <cols> column dimensions — preserve runs verbatim (one entry per <col>).\n const colsEl = findChild(root, COLS_TAG);\n if (colsEl) {\n for (const c of findChildren(colsEl, COL_TAG)) {\n const dim = parseColumnDimension(c);\n ws.columnDimensions.set(dim.min, dim);\n }\n }\n\n const sheetData = findChild(root, SHEETDATA_TAG);\n if (sheetData) {\n const sharedFormulas = new Map<number, SharedFormulaCache>();\n for (const rowNode of findChildren(sheetData, ROW_TAG)) {\n const rowIdx = parseRowIndex(rowNode);\n maybeRecordRowDimension(ws, rowNode, rowIdx);\n let nextCol = 1;\n for (const cNode of findChildren(rowNode, C_TAG)) {\n const coord = parseCellCoord(cNode, rowIdx, nextCol);\n readCell(ws, cNode, coord, ctx, sharedFormulas);\n nextCol = coord.col + 1;\n }\n }\n }\n\n // <sheetProtection> sits between sheetData and mergeCells per ECMA-376\n // §18.3.1.85. Parse all 16 boolean lock flags + optional password hash\n // fields.\n const protectionEl = findChild(root, SHEET_PROTECTION_TAG);\n if (protectionEl) {\n ws.sheetProtection = parseSheetProtection(protectionEl);\n }\n\n // <sortState ref=… columnSort=… caseSensitive=… sortMethod=…> <sortCondition\n // ref=… descending=… sortBy=… .../> </sortState>\n const ssEl = findChild(root, SORT_STATE_TAG);\n if (ssEl) {\n const ss = parseSortState(ssEl);\n if (ss) ws.sortState = ss;\n }\n\n // <protectedRanges><protectedRange sqref=… name=… [hash\n // quad]/></protectedRanges>\n const prsEl = findChild(root, PROTECTED_RANGES_TAG);\n if (prsEl) {\n for (const pr of findChildren(prsEl, PROTECTED_RANGE_TAG)) {\n const sqref = pr.attrs['sqref'];\n const name = pr.attrs['name'];\n if (!sqref || !name) continue;\n const out: ProtectedRange = { sqref: parseMultiCellRange(sqref), name };\n if (pr.attrs['password'] !== undefined) out.password = pr.attrs['password'];\n if (pr.attrs['securityDescriptor'] !== undefined)\n out.securityDescriptor = pr.attrs['securityDescriptor'];\n if (pr.attrs['algorithmName'] !== undefined) out.algorithmName = pr.attrs['algorithmName'];\n if (pr.attrs['hashValue'] !== undefined) out.hashValue = pr.attrs['hashValue'];\n if (pr.attrs['saltValue'] !== undefined) out.saltValue = pr.attrs['saltValue'];\n if (pr.attrs['spinCount'] !== undefined) {\n const n = Number.parseInt(pr.attrs['spinCount'], 10);\n if (Number.isInteger(n)) out.spinCount = n;\n }\n ws.protectedRanges.push(out);\n }\n }\n\n // <mergeCells> sits as a sibling of <sheetData>; pull each <mergeCell\n // ref=\"…\"/> straight onto the worksheet's mergedCells list. We don't go\n // through mergeCells() here because its overlap check is for *new* merges;\n // the source xlsx is assumed valid.\n const mergeCellsEl = findChild(root, MERGE_CELLS_TAG);\n if (mergeCellsEl) {\n for (const m of findChildren(mergeCellsEl, MERGE_CELL_TAG)) {\n const ref = m.attrs['ref'];\n if (!ref) throw new OpenXmlSchemaError('worksheet: <mergeCell> missing @ref');\n ws.mergedCells.push(parseRange(ref));\n }\n }\n\n // <sheetViews> sits early in the worksheet but our load order doesn't matter\n // — reading it after sheetData keeps the loops separable.\n const sheetViewsEl = findChild(root, SHEET_VIEWS_TAG);\n if (sheetViewsEl) {\n for (const v of findChildren(sheetViewsEl, SHEET_VIEW_TAG)) {\n ws.views.push(parseSheetView(v));\n }\n }\n\n // <hyperlinks> — relations to external URLs come from the worksheet rels.\n const hyperlinksEl = findChild(root, HYPERLINKS_TAG);\n if (hyperlinksEl) {\n for (const h of findChildren(hyperlinksEl, HYPERLINK_TAG)) {\n ws.hyperlinks.push(parseHyperlink(h, ctx.rels));\n }\n }\n\n // <dataValidations> — list / range / formula constraints, sqref-scoped.\n const dvWrap = findChild(root, DATA_VALIDATIONS_TAG);\n if (dvWrap) {\n for (const d of findChildren(dvWrap, DATA_VALIDATION_TAG)) {\n ws.dataValidations.push(parseDataValidation(d));\n }\n }\n\n // <autoFilter ref=\"...\"> with optional <filterColumn> children.\n const autoFilterEl = findChild(root, AUTOFILTER_TAG);\n if (autoFilterEl) {\n const filter = parseAutoFilter(autoFilterEl);\n if (filter) ws.autoFilter = filter;\n }\n\n // <conditionalFormatting sqref=\"…\"><cfRule .../></conditionalFormatting> —\n // multiple per sheet, each with its own sqref + rules array.\n for (const cfEl of findChildren(root, CONDITIONAL_FORMATTING_TAG)) {\n const cf = parseConditionalFormatting(cfEl);\n if (cf) ws.conditionalFormatting.push(cf);\n }\n\n // <tableParts><tablePart r:id=\"rIdN\"/></tableParts> — resolved through the\n // ctx.loadTable callback (load.ts threads the archive in).\n const tablePartsEl = findChild(root, TABLE_PARTS_TAG);\n if (tablePartsEl && ctx.loadTable) {\n for (const tp of findChildren(tablePartsEl, TABLE_PART_TAG)) {\n const rId = tp.attrs[`{${REL_NS}}id`];\n if (!rId) continue;\n const table = ctx.loadTable(rId);\n if (table) {\n table.rId = rId;\n ws.tables.push(table);\n }\n }\n }\n\n // Comments don't have a sheet-inline anchor — they're discovered via the rels\n // file (Type ending in /comments). Walk those and let load.ts read each\n // commentsN.xml part.\n if (ctx.rels && ctx.loadComments) {\n for (const rel of ctx.rels.rels) {\n if (rel.type === `${REL_NS}/comments`) {\n const list = ctx.loadComments(rel.id);\n if (list) ws.legacyComments.push(...list);\n }\n }\n }\n\n // <picture r:id=\"rIdN\"/> — sheet background image.\n const pictureEl = findChild(root, PICTURE_TAG);\n if (pictureEl) {\n const rId = pictureEl.attrs[`{${REL_NS}}id`];\n if (rId) ws.backgroundPictureRId = rId;\n }\n\n // <legacyDrawingHF r:id=\"rIdN\"/> — header/footer background VML.\n const lhfEl = findChild(root, LEGACY_DRAWING_HF_TAG);\n if (lhfEl) {\n const rId = lhfEl.attrs[`{${REL_NS}}id`];\n if (rId) ws.legacyDrawingHFRId = rId;\n }\n\n // <customSheetViews><customSheetView guid=\"…\" scale=\"…\"\n // …>...</customSheetView></customSheetViews>\n const csvWrap = findChild(root, CUSTOM_SHEET_VIEWS_TAG);\n if (csvWrap) {\n for (const v of findChildren(csvWrap, CUSTOM_SHEET_VIEW_TAG)) {\n const view = parseCustomSheetView(v);\n if (view) ws.customSheetViews.push(view);\n }\n }\n\n // <oleObjects><oleObject ...><objectPr.../></oleObject></oleObjects>\n const ooWrap = findChild(root, OLE_OBJECTS_TAG);\n if (ooWrap) {\n for (const oo of findChildren(ooWrap, OLE_OBJECT_TAG)) {\n const parsed = parseOleObject(oo);\n if (parsed) ws.oleObjects.push(parsed);\n }\n }\n\n // <controls><control ...><controlPr.../></control></controls>\n const cWrap = findChild(root, CONTROLS_TAG);\n if (cWrap) {\n for (const c of findChildren(cWrap, CONTROL_TAG)) {\n const parsed = parseFormControl(c);\n if (parsed) ws.controls.push(parsed);\n }\n }\n\n // <smartTags><cellSmartTags r=\"A1\"><cellSmartTag\n // type=…><cellSmartTagPr/>…</cellSmartTag></cellSmartTags></smartTags>\n const stEl = findChild(root, SMART_TAGS_TAG);\n if (stEl) {\n for (const cstNode of findChildren(stEl, CELL_SMART_TAGS_TAG)) {\n const ref = cstNode.attrs['r'];\n if (!ref) continue;\n const tags: import('./smart-tags').CellSmartTag[] = [];\n for (const tagNode of findChildren(cstNode, CELL_SMART_TAG_TAG)) {\n const typeRaw = tagNode.attrs['type'];\n if (typeRaw === undefined) continue;\n const type = Number.parseInt(typeRaw, 10);\n if (!Number.isInteger(type)) continue;\n const tag: import('./smart-tags').CellSmartTag = { type, properties: [] };\n const deleted = parseBoolXmlAttr(tagNode.attrs['deleted']);\n if (deleted !== undefined) tag.deleted = deleted;\n const xmlBased = parseBoolXmlAttr(tagNode.attrs['xmlBased']);\n if (xmlBased !== undefined) tag.xmlBased = xmlBased;\n for (const prop of findChildren(tagNode, CELL_SMART_TAG_PR_TAG)) {\n const key = prop.attrs['key'];\n const val = prop.attrs['val'];\n if (key !== undefined && val !== undefined) tag.properties.push({ key, val });\n }\n tags.push(tag);\n }\n ws.smartTags.push({ ref, tags });\n }\n }\n\n // <drawing r:id=\"rIdN\"/> — at most one per sheet. Resolve via loadDrawing.\n const drawingEl = findChild(root, DRAWING_TAG);\n if (drawingEl && ctx.loadDrawing) {\n const rId = drawingEl.attrs[`{${REL_NS}}id`];\n if (rId) {\n const d = ctx.loadDrawing(rId);\n if (d) ws.drawing = d;\n }\n }\n\n // <printOptions> / <pageMargins> / <pageSetup> / <headerFooter> — page-setup\n // typed model (B6). Sit between <hyperlinks> and the legacy drawing block per\n // ECMA-376.\n const poEl = findChild(root, PRINT_OPTIONS_TAG);\n if (poEl) {\n const po = parsePrintOptions(poEl);\n if (po) ws.printOptions = po;\n }\n const pmEl = findChild(root, PAGE_MARGINS_TAG);\n if (pmEl) {\n const pm = parsePageMargins(pmEl);\n if (pm) ws.pageMargins = pm;\n }\n const psEl = findChild(root, PAGE_SETUP_TAG);\n if (psEl) {\n const ps = parsePageSetup(psEl);\n if (ps) ws.pageSetup = ps;\n }\n const hfEl = findChild(root, HEADER_FOOTER_TAG);\n if (hfEl) {\n const hf = parseHeaderFooter(hfEl);\n if (hf) ws.headerFooter = hf;\n }\n\n // <rowBreaks count=\"…\"><brk id=\"…\" man=\"1\"/></rowBreaks> + <colBreaks…>\n const rbEl = findChild(root, ROW_BREAKS_TAG);\n if (rbEl) {\n for (const brk of findChildren(rbEl, BRK_TAG)) ws.rowBreaks.push(parsePageBreak(brk));\n }\n const cbEl = findChild(root, COL_BREAKS_TAG);\n if (cbEl) {\n for (const brk of findChildren(cbEl, BRK_TAG)) ws.colBreaks.push(parsePageBreak(brk));\n }\n\n // <customProperties><customProperty name=\"…\" r:id=\"rIdN\"/></customProperties>\n const cpEl = findChild(root, CUSTOM_PROPERTIES_TAG);\n if (cpEl) {\n for (const cp of findChildren(cpEl, CUSTOM_PROPERTY_TAG)) {\n const name = cp.attrs['name'];\n if (!name) continue;\n const entry: WorksheetCustomProperty = { name };\n const rId = cp.attrs[`{${REL_NS}}id`];\n if (rId) entry.rId = rId;\n ws.customProperties.push(entry);\n }\n }\n\n // <webPublishItems><webPublishItem .../></webPublishItems>\n const wpEl = findChild(root, WEB_PUBLISH_ITEMS_TAG);\n if (wpEl) {\n for (const wp of findChildren(wpEl, WEB_PUBLISH_ITEM_TAG)) {\n const item = parseWebPublishItem(wp);\n if (item) ws.webPublishItems.push(item);\n }\n }\n\n // <phoneticPr fontId=\"…\" type=\"…\" alignment=\"…\"/>\n const ppEl = findChild(root, PHONETIC_PR_TAG);\n if (ppEl) {\n const pp = parsePhoneticPr(ppEl);\n if (pp) ws.phoneticPr = pp;\n }\n\n // <dataConsolidate function=\"sum\"\n // topLabels=\"1\"…><dataRefs>…</dataRefs></dataConsolidate>\n const dcEl = findChild(root, DATA_CONSOLIDATE_TAG);\n if (dcEl) {\n const dc = parseDataConsolidate(dcEl);\n if (dc) ws.dataConsolidate = dc;\n }\n\n // <scenarios current=\"…\" show=\"…\" sqref=\"…\"><scenario name=\"…\"> <inputCells\n // r=\"…\" val=\"…\"/> </scenario></scenarios>\n const scEl = findChild(root, SCENARIOS_TAG);\n if (scEl) {\n const sl = parseScenarioList(scEl);\n if (sl) ws.scenarios = sl;\n }\n\n // <cellWatches><cellWatch r=\"…\"/></cellWatches>\n const cwWrap = findChild(root, CELL_WATCHES_TAG);\n if (cwWrap) {\n for (const w of findChildren(cwWrap, CELL_WATCH_TAG)) {\n const ref = w.attrs['r'];\n if (ref) ws.cellWatches.push({ ref });\n }\n }\n\n // <ignoredErrors><ignoredError sqref=\"…\" evalError=\"1\" .../></ignoredErrors>\n const ieWrap = findChild(root, IGNORED_ERRORS_TAG);\n if (ieWrap) {\n for (const ie of findChildren(ieWrap, IGNORED_ERROR_TAG)) {\n ws.ignoredErrors.push(parseIgnoredError(ie));\n }\n }\n\n captureWorksheetBodyExtras(root, ws);\n return ws;\n}\n\nconst SORT_BY_VALUES: ReadonlyArray<SortBy> = ['value', 'cellColor', 'fontColor', 'icon'];\nconst SORT_METHODS: ReadonlyArray<SortMethod> = ['stroke', 'pinYin'];\nconst SORT_ICON_SETS: ReadonlyArray<SortIconSet> = [\n '3Arrows',\n '3ArrowsGray',\n '3Flags',\n '3TrafficLights1',\n '3TrafficLights2',\n '3Signs',\n '3Symbols',\n '3Symbols2',\n '4Arrows',\n '4ArrowsGray',\n '4RedToBlack',\n '4Rating',\n '4TrafficLights',\n '5Arrows',\n '5ArrowsGray',\n '5Rating',\n '5Quarters',\n];\n\nconst parseSortState = (node: XmlNode): SortState | undefined => {\n const ref = node.attrs['ref'];\n if (!ref) return undefined;\n const out: SortState = { ref, conditions: [] };\n const cs = parseBoolXmlAttr(node.attrs['columnSort']);\n if (cs !== undefined) out.columnSort = cs;\n const cse = parseBoolXmlAttr(node.attrs['caseSensitive']);\n if (cse !== undefined) out.caseSensitive = cse;\n const sm = node.attrs['sortMethod'];\n if (sm && SORT_METHODS.includes(sm as SortMethod)) out.sortMethod = sm as SortMethod;\n\n for (const sc of findChildren(node, SORT_CONDITION_TAG)) {\n const cRef = sc.attrs['ref'];\n if (!cRef) continue;\n const c: SortCondition = { ref: cRef };\n const desc = parseBoolXmlAttr(sc.attrs['descending']);\n if (desc !== undefined) c.descending = desc;\n const sb = sc.attrs['sortBy'];\n if (sb && SORT_BY_VALUES.includes(sb as SortBy)) c.sortBy = sb as SortBy;\n if (sc.attrs['customList'] !== undefined) c.customList = sc.attrs['customList'];\n if (sc.attrs['dxfId'] !== undefined) {\n const n = Number.parseInt(sc.attrs['dxfId'], 10);\n if (Number.isInteger(n)) c.dxfId = n;\n }\n const is = sc.attrs['iconSet'];\n if (is && SORT_ICON_SETS.includes(is as SortIconSet)) c.iconSet = is as SortIconSet;\n if (sc.attrs['iconId'] !== undefined) {\n const n = Number.parseInt(sc.attrs['iconId'], 10);\n if (Number.isInteger(n)) c.iconId = n;\n }\n out.conditions.push(c);\n }\n return out;\n};\n\nconst parseScenarioList = (node: XmlNode): ScenarioList | undefined => {\n const out: ScenarioList = { scenarios: [] };\n const current = parseIntegerAttr(node.attrs['current']);\n if (current !== undefined) out.current = current;\n const show = parseIntegerAttr(node.attrs['show']);\n if (show !== undefined) out.show = show;\n const sqref = node.attrs['sqref'];\n if (sqref) out.sqref = parseMultiCellRange(sqref);\n\n for (const sNode of findChildren(node, SCENARIO_TAG)) {\n const s = parseScenario(sNode);\n if (s) out.scenarios.push(s);\n }\n return out.scenarios.length > 0 || out.current !== undefined || out.show !== undefined || out.sqref !== undefined\n ? out\n : undefined;\n};\n\nconst parseScenario = (node: XmlNode): Scenario | undefined => {\n const name = node.attrs['name'];\n if (!name) return undefined;\n const out: Scenario = { name, inputCells: [] };\n const locked = parseBoolXmlAttr(node.attrs['locked']);\n if (locked !== undefined) out.locked = locked;\n const hidden = parseBoolXmlAttr(node.attrs['hidden']);\n if (hidden !== undefined) out.hidden = hidden;\n if (node.attrs['user'] !== undefined) out.user = node.attrs['user'];\n if (node.attrs['comment'] !== undefined) out.comment = node.attrs['comment'];\n\n for (const ic of findChildren(node, INPUT_CELLS_TAG)) {\n const cell = parseScenarioInputCell(ic);\n if (cell) out.inputCells.push(cell);\n }\n return out;\n};\n\nconst parseScenarioInputCell = (node: XmlNode): ScenarioInputCell | undefined => {\n const ref = node.attrs['r'];\n const val = node.attrs['val'];\n if (!ref || val === undefined) return undefined;\n const out: ScenarioInputCell = { ref, val };\n const deleted = parseBoolXmlAttr(node.attrs['deleted']);\n if (deleted !== undefined) out.deleted = deleted;\n const undone = parseBoolXmlAttr(node.attrs['undone']);\n if (undone !== undefined) out.undone = undone;\n const numFmtId = parseIntegerAttr(node.attrs['numFmtId']);\n if (numFmtId !== undefined) out.numFmtId = numFmtId;\n return out;\n};\n\nconst DATA_CONSOLIDATE_FUNCTIONS: ReadonlyArray<DataConsolidateFunction> = [\n 'average',\n 'count',\n 'countNums',\n 'max',\n 'min',\n 'product',\n 'stdDev',\n 'stdDevp',\n 'sum',\n 'var',\n 'varp',\n];\n\nconst parseDataConsolidate = (node: XmlNode): DataConsolidate | undefined => {\n const out: DataConsolidate = {};\n const f = node.attrs['function'];\n if (f && DATA_CONSOLIDATE_FUNCTIONS.includes(f as DataConsolidateFunction)) {\n out.function = f as DataConsolidateFunction;\n }\n const topLabels = parseBoolXmlAttr(node.attrs['topLabels']);\n if (topLabels !== undefined) out.topLabels = topLabels;\n const leftLabels = parseBoolXmlAttr(node.attrs['leftLabels']);\n if (leftLabels !== undefined) out.leftLabels = leftLabels;\n const link = parseBoolXmlAttr(node.attrs['link']);\n if (link !== undefined) out.link = link;\n if (node.attrs['startLabels'] !== undefined) out.startLabels = node.attrs['startLabels'];\n\n const refsEl = findChild(node, DATA_REFS_TAG);\n if (refsEl) {\n const refs: DataReference[] = [];\n for (const ref of findChildren(refsEl, DATA_REF_TAG)) {\n const entry: DataReference = {};\n if (ref.attrs['name'] !== undefined) entry.name = ref.attrs['name'];\n if (ref.attrs['ref'] !== undefined) entry.ref = ref.attrs['ref'];\n if (ref.attrs['sheet'] !== undefined) entry.sheet = ref.attrs['sheet'];\n const rId = ref.attrs[`{${REL_NS}}id`];\n if (rId) entry.rId = rId;\n refs.push(entry);\n }\n if (refs.length > 0) out.dataRefs = refs;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n};\n\nconst PHONETIC_TYPES: ReadonlyArray<PhoneticType> = [\n 'halfwidthKatakana',\n 'fullwidthKatakana',\n 'Hiragana',\n 'noConversion',\n];\nconst PHONETIC_ALIGNMENTS: ReadonlyArray<PhoneticAlignment> = [\n 'noControl',\n 'left',\n 'center',\n 'distributed',\n];\n\nconst parsePhoneticPr = (node: XmlNode): WorksheetPhoneticProperties | undefined => {\n const out: WorksheetPhoneticProperties = {};\n const fontId = parseIntegerAttr(node.attrs['fontId']);\n if (fontId !== undefined) out.fontId = fontId;\n const t = node.attrs['type'];\n if (t && PHONETIC_TYPES.includes(t as PhoneticType)) out.type = t as PhoneticType;\n const a = node.attrs['alignment'];\n if (a && PHONETIC_ALIGNMENTS.includes(a as PhoneticAlignment)) out.alignment = a as PhoneticAlignment;\n return Object.keys(out).length > 0 ? out : undefined;\n};\n\nconst VALID_WP_SOURCE_TYPES: ReadonlySet<WebPublishItem['sourceType']> = new Set([\n 'sheet',\n 'printArea',\n 'autoFilter',\n 'range',\n 'chart',\n 'pivotTable',\n 'query',\n 'label',\n]);\n\nexport const parseWebPublishItem = (node: XmlNode): WebPublishItem | undefined => {\n const idRaw = node.attrs['id'];\n if (!idRaw) return undefined;\n const id = Number.parseInt(idRaw, 10);\n if (!Number.isInteger(id)) return undefined;\n const divId = node.attrs['divId'];\n const sourceType = node.attrs['sourceType'] as WebPublishItem['sourceType'] | undefined;\n const destinationFile = node.attrs['destinationFile'];\n if (!divId || !sourceType || !VALID_WP_SOURCE_TYPES.has(sourceType) || !destinationFile) return undefined;\n const out: WebPublishItem = { id, divId, sourceType, destinationFile };\n if (node.attrs['sourceRef'] !== undefined) out.sourceRef = node.attrs['sourceRef'];\n if (node.attrs['sourceObject'] !== undefined) out.sourceObject = node.attrs['sourceObject'];\n if (node.attrs['title'] !== undefined) out.title = node.attrs['title'];\n const auto = parseBoolXmlAttr(node.attrs['autoRepublish']);\n if (auto !== undefined) out.autoRepublish = auto;\n return out;\n};\n\nconst CUSTOM_SHEET_VIEW_STATES: ReadonlyArray<CustomSheetViewState> = [\n 'visible',\n 'hidden',\n 'veryHidden',\n];\n\nconst parseCustomSheetView = (node: XmlNode): CustomSheetView | undefined => {\n const guid = node.attrs['guid'];\n if (!guid) return undefined;\n const out: CustomSheetView = { guid };\n const intAttr = (k: string): number | undefined => {\n const raw = node.attrs[k];\n if (raw === undefined) return undefined;\n const n = Number.parseInt(raw, 10);\n return Number.isInteger(n) ? n : undefined;\n };\n const scale = intAttr('scale');\n if (scale !== undefined) out.scale = scale;\n const colorId = intAttr('colorId');\n if (colorId !== undefined) out.colorId = colorId;\n\n const boolKeys = [\n 'showPageBreaks',\n 'showFormulas',\n 'showGridLines',\n 'showRowCol',\n 'outlineSymbols',\n 'zeroValues',\n 'fitToPage',\n 'printArea',\n 'filter',\n 'showAutoFilter',\n 'hiddenRows',\n 'hiddenColumns',\n 'filterUnique',\n 'showRuler',\n ] as const satisfies ReadonlyArray<keyof CustomSheetView>;\n for (const k of boolKeys) {\n const v = parseBoolXmlAttr(node.attrs[k]);\n if (v !== undefined) out[k] = v;\n }\n const stateRaw = node.attrs['state'];\n if (stateRaw && CUSTOM_SHEET_VIEW_STATES.includes(stateRaw as CustomSheetViewState)) {\n out.state = stateRaw as CustomSheetViewState;\n }\n const viewRaw = node.attrs['view'];\n if (viewRaw && SHEET_VIEW_MODES.includes(viewRaw as SheetViewMode)) {\n out.view = viewRaw as SheetViewMode;\n }\n if (node.attrs['topLeftCell'] !== undefined) out.topLeftCell = node.attrs['topLeftCell'];\n\n // Children — reuse existing parsers.\n const paneEl = findChild(node, PANE_TAG);\n if (paneEl) out.pane = parsePane(paneEl);\n const selections: Selection[] = [];\n for (const s of findChildren(node, SELECTION_TAG)) selections.push(parseSelection(s));\n if (selections.length > 0) out.selections = selections;\n\n const rbEl = findChild(node, ROW_BREAKS_TAG);\n if (rbEl) {\n const arr: PageBreak[] = [];\n for (const brk of findChildren(rbEl, BRK_TAG)) arr.push(parsePageBreak(brk));\n if (arr.length > 0) out.rowBreaks = arr;\n }\n const cbEl = findChild(node, COL_BREAKS_TAG);\n if (cbEl) {\n const arr: PageBreak[] = [];\n for (const brk of findChildren(cbEl, BRK_TAG)) arr.push(parsePageBreak(brk));\n if (arr.length > 0) out.colBreaks = arr;\n }\n\n const pmEl = findChild(node, PAGE_MARGINS_TAG);\n if (pmEl) {\n const pm = parsePageMargins(pmEl);\n if (pm) out.pageMargins = pm;\n }\n const poEl = findChild(node, PRINT_OPTIONS_TAG);\n if (poEl) {\n const po = parsePrintOptions(poEl);\n if (po) out.printOptions = po;\n }\n const psEl = findChild(node, PAGE_SETUP_TAG);\n if (psEl) {\n const ps = parsePageSetup(psEl);\n if (ps) out.pageSetup = ps;\n }\n const hfEl = findChild(node, HEADER_FOOTER_TAG);\n if (hfEl) {\n const hf = parseHeaderFooter(hfEl);\n if (hf) out.headerFooter = hf;\n }\n return out;\n};\n\nconst OLE_DV_ASPECTS: ReadonlyArray<OleDvAspect> = ['DVASPECT_CONTENT', 'DVASPECT_ICON'];\nconst OLE_UPDATE_MODES: ReadonlyArray<OleUpdateMode> = ['OLEUPDATE_ALWAYS', 'OLEUPDATE_ONCALL'];\n\nconst parseOleObject = (node: XmlNode): OleObject | undefined => {\n const shapeIdRaw = node.attrs['shapeId'];\n if (shapeIdRaw === undefined) return undefined;\n const shapeId = Number.parseInt(shapeIdRaw, 10);\n if (!Number.isInteger(shapeId)) return undefined;\n const out: OleObject = { shapeId };\n const rId = node.attrs[`{${REL_NS}}id`];\n if (rId) out.rId = rId;\n if (node.attrs['progId'] !== undefined) out.progId = node.attrs['progId'];\n const dvAspect = node.attrs['dvAspect'];\n if (dvAspect && OLE_DV_ASPECTS.includes(dvAspect as OleDvAspect)) out.dvAspect = dvAspect as OleDvAspect;\n if (node.attrs['link'] !== undefined) out.link = node.attrs['link'];\n const oleUpdate = node.attrs['oleUpdate'];\n if (oleUpdate && OLE_UPDATE_MODES.includes(oleUpdate as OleUpdateMode))\n out.oleUpdate = oleUpdate as OleUpdateMode;\n const autoLoad = parseBoolXmlAttr(node.attrs['autoLoad']);\n if (autoLoad !== undefined) out.autoLoad = autoLoad;\n const objectPr = findChild(node, OBJECT_PR_TAG);\n if (objectPr) out.objectPr = objectPr;\n return out;\n};\n\nconst parseFormControl = (node: XmlNode): FormControl | undefined => {\n const shapeIdRaw = node.attrs['shapeId'];\n if (shapeIdRaw === undefined) return undefined;\n const shapeId = Number.parseInt(shapeIdRaw, 10);\n if (!Number.isInteger(shapeId)) return undefined;\n const out: FormControl = { shapeId };\n const rId = node.attrs[`{${REL_NS}}id`];\n if (rId) out.rId = rId;\n if (node.attrs['name'] !== undefined) out.name = node.attrs['name'];\n const controlPr = findChild(node, CONTROL_PR_TAG);\n if (controlPr) out.controlPr = controlPr;\n return out;\n};\n\nconst parsePageBreak = (node: XmlNode): PageBreak => {\n const out: PageBreak = {};\n const id = parseIntegerAttr(node.attrs['id']);\n if (id !== undefined) out.id = id;\n const min = parseIntegerAttr(node.attrs['min']);\n if (min !== undefined) out.min = min;\n const max = parseIntegerAttr(node.attrs['max']);\n if (max !== undefined) out.max = max;\n const man = parseBoolXmlAttr(node.attrs['man']);\n if (man !== undefined) out.man = man;\n const pt = parseBoolXmlAttr(node.attrs['pt']);\n if (pt !== undefined) out.pt = pt;\n return out;\n};\n\nconst parseBoolFlag = (raw: string | undefined): boolean | undefined => {\n if (raw === '1' || raw === 'true') return true;\n if (raw === '0' || raw === 'false') return false;\n return undefined;\n};\n\nconst parsePrintOptions = (node: XmlNode): PrintOptions | undefined => {\n const out: PrintOptions = {};\n const hc = parseBoolFlag(node.attrs['horizontalCentered']);\n if (hc !== undefined) out.horizontalCentered = hc;\n const vc = parseBoolFlag(node.attrs['verticalCentered']);\n if (vc !== undefined) out.verticalCentered = vc;\n const headings = parseBoolFlag(node.attrs['headings']);\n if (headings !== undefined) out.headings = headings;\n const gl = parseBoolFlag(node.attrs['gridLines']);\n if (gl !== undefined) out.gridLines = gl;\n const gls = parseBoolFlag(node.attrs['gridLinesSet']);\n if (gls !== undefined) out.gridLinesSet = gls;\n return Object.keys(out).length > 0 ? out : undefined;\n};\n\nexport const parsePageMargins = (node: XmlNode): PageMargins | undefined => {\n const left = parseFloatAttr(node.attrs['left']);\n const right = parseFloatAttr(node.attrs['right']);\n const top = parseFloatAttr(node.attrs['top']);\n const bottom = parseFloatAttr(node.attrs['bottom']);\n const header = parseFloatAttr(node.attrs['header']);\n const footer = parseFloatAttr(node.attrs['footer']);\n if (\n left === undefined ||\n right === undefined ||\n top === undefined ||\n bottom === undefined ||\n header === undefined ||\n footer === undefined\n ) {\n return undefined;\n }\n return { left, right, top, bottom, header, footer };\n};\n\nconst PAGE_ORIENTATIONS: ReadonlyArray<PageOrientation> = ['default', 'portrait', 'landscape'];\nconst PAGE_ORDERS: ReadonlyArray<PageOrder> = ['downThenOver', 'overThenDown'];\nconst CELL_COMMENT_MODES: ReadonlyArray<CellCommentMode> = ['none', 'asDisplayed', 'atEnd'];\nconst PRINT_ERROR_MODES: ReadonlyArray<PrintErrorMode> = ['displayed', 'blank', 'dash', 'NA'];\n\nexport const parsePageSetup = (node: XmlNode): PageSetup | undefined => {\n const out: PageSetup = {};\n const intAttr = (k: string): void => {\n const v = parseIntegerAttr(node.attrs[k]);\n if (v !== undefined) (out as Record<string, unknown>)[k] = v;\n };\n intAttr('paperSize');\n intAttr('scale');\n intAttr('firstPageNumber');\n intAttr('fitToWidth');\n intAttr('fitToHeight');\n intAttr('horizontalDpi');\n intAttr('verticalDpi');\n intAttr('copies');\n\n const ord = node.attrs['pageOrder'];\n if (ord && PAGE_ORDERS.includes(ord as PageOrder)) out.pageOrder = ord as PageOrder;\n const ori = node.attrs['orientation'];\n if (ori && PAGE_ORIENTATIONS.includes(ori as PageOrientation)) out.orientation = ori as PageOrientation;\n const cc = node.attrs['cellComments'];\n if (cc && CELL_COMMENT_MODES.includes(cc as CellCommentMode)) out.cellComments = cc as CellCommentMode;\n const errs = node.attrs['errors'];\n if (errs && PRINT_ERROR_MODES.includes(errs as PrintErrorMode)) out.errors = errs as PrintErrorMode;\n\n const upd = parseBoolFlag(node.attrs['usePrinterDefaults']);\n if (upd !== undefined) out.usePrinterDefaults = upd;\n const bw = parseBoolFlag(node.attrs['blackAndWhite']);\n if (bw !== undefined) out.blackAndWhite = bw;\n const draft = parseBoolFlag(node.attrs['draft']);\n if (draft !== undefined) out.draft = draft;\n const ufpn = parseBoolFlag(node.attrs['useFirstPageNumber']);\n if (ufpn !== undefined) out.useFirstPageNumber = ufpn;\n\n if (node.attrs['paperWidth']) out.paperWidth = node.attrs['paperWidth'];\n if (node.attrs['paperHeight']) out.paperHeight = node.attrs['paperHeight'];\n const rId = node.attrs[`{${REL_NS}}id`];\n if (rId) out.rId = rId;\n\n return Object.keys(out).length > 0 ? out : undefined;\n};\n\nexport const parseHeaderFooter = (node: XmlNode): HeaderFooter | undefined => {\n const out: HeaderFooter = {};\n const df = parseBoolFlag(node.attrs['differentFirst']);\n if (df !== undefined) out.differentFirst = df;\n const doe = parseBoolFlag(node.attrs['differentOddEven']);\n if (doe !== undefined) out.differentOddEven = doe;\n const swd = parseBoolFlag(node.attrs['scaleWithDoc']);\n if (swd !== undefined) out.scaleWithDoc = swd;\n const awm = parseBoolFlag(node.attrs['alignWithMargins']);\n if (awm !== undefined) out.alignWithMargins = awm;\n\n const text = (tag: string): string | undefined => {\n const child = findChild(node, tag);\n if (!child) return undefined;\n return child.text;\n };\n const oh = text(ODD_HEADER_TAG);\n if (oh !== undefined) out.oddHeader = oh;\n const of = text(ODD_FOOTER_TAG);\n if (of !== undefined) out.oddFooter = of;\n const eh = text(EVEN_HEADER_TAG);\n if (eh !== undefined) out.evenHeader = eh;\n const ef = text(EVEN_FOOTER_TAG);\n if (ef !== undefined) out.evenFooter = ef;\n const fh = text(FIRST_HEADER_TAG);\n if (fh !== undefined) out.firstHeader = fh;\n const ff = text(FIRST_FOOTER_TAG);\n if (ff !== undefined) out.firstFooter = ff;\n\n return Object.keys(out).length > 0 ? out : undefined;\n};\n\nconst parseSheetProtection = (node: XmlNode): SheetProtection => {\n const out: SheetProtection = {};\n const flag = (k: string): void => {\n const raw = node.attrs[k];\n if (raw === '1' || raw === 'true') (out as Record<string, unknown>)[k] = true;\n else if (raw === '0' || raw === 'false') (out as Record<string, unknown>)[k] = false;\n };\n for (const k of [\n 'sheet',\n 'objects',\n 'scenarios',\n 'formatCells',\n 'formatColumns',\n 'formatRows',\n 'insertColumns',\n 'insertRows',\n 'insertHyperlinks',\n 'deleteColumns',\n 'deleteRows',\n 'selectLockedCells',\n 'selectUnlockedCells',\n 'sort',\n 'autoFilter',\n 'pivotTables',\n ]) {\n flag(k);\n }\n if (node.attrs['saltValue'] !== undefined) out.saltValue = node.attrs['saltValue'];\n if (node.attrs['spinCount'] !== undefined) {\n const n = Number.parseInt(node.attrs['spinCount'], 10);\n if (Number.isInteger(n)) out.spinCount = n;\n }\n if (node.attrs['algorithmName'] !== undefined) out.algorithmName = node.attrs['algorithmName'];\n if (node.attrs['hashValue'] !== undefined) out.hashValue = node.attrs['hashValue'];\n return out;\n};\n\nconst parseSheetProperties = (node: XmlNode): SheetProperties | undefined => {\n const out: SheetProperties = {};\n const flag = (raw: string | undefined): boolean | undefined => {\n if (raw === undefined) return undefined;\n if (raw === '1' || raw === 'true') return true;\n if (raw === '0' || raw === 'false') return false;\n return undefined;\n };\n\n if (node.attrs['codeName'] !== undefined) out.codeName = node.attrs['codeName'];\n const efcc = flag(node.attrs['enableFormatConditionsCalculation']);\n if (efcc !== undefined) out.enableFormatConditionsCalculation = efcc;\n const fm = flag(node.attrs['filterMode']);\n if (fm !== undefined) out.filterMode = fm;\n const pub = flag(node.attrs['published']);\n if (pub !== undefined) out.published = pub;\n const sh = flag(node.attrs['syncHorizontal']);\n if (sh !== undefined) out.syncHorizontal = sh;\n if (node.attrs['syncRef'] !== undefined) out.syncRef = node.attrs['syncRef'];\n const sv = flag(node.attrs['syncVertical']);\n if (sv !== undefined) out.syncVertical = sv;\n const te = flag(node.attrs['transitionEvaluation']);\n if (te !== undefined) out.transitionEvaluation = te;\n const tre = flag(node.attrs['transitionEntry']);\n if (tre !== undefined) out.transitionEntry = tre;\n\n const tabColorEl = findChild(node, TAB_COLOR_TAG);\n if (tabColorEl) {\n const tcOpts: { rgb?: string; indexed?: number; theme?: number; auto?: boolean; tint?: number } = {};\n if (tabColorEl.attrs['rgb'] !== undefined) tcOpts.rgb = tabColorEl.attrs['rgb'];\n if (tabColorEl.attrs['indexed'] !== undefined) {\n const n = Number.parseInt(tabColorEl.attrs['indexed'], 10);\n if (Number.isInteger(n)) tcOpts.indexed = n;\n }\n if (tabColorEl.attrs['theme'] !== undefined) {\n const n = Number.parseInt(tabColorEl.attrs['theme'], 10);\n if (Number.isInteger(n)) tcOpts.theme = n;\n }\n const auto = flag(tabColorEl.attrs['auto']);\n if (auto !== undefined) tcOpts.auto = auto;\n if (tabColorEl.attrs['tint'] !== undefined) {\n const n = Number.parseFloat(tabColorEl.attrs['tint']);\n if (Number.isFinite(n)) tcOpts.tint = n;\n }\n out.tabColor = makeColor(tcOpts);\n }\n\n const outlineEl = findChild(node, OUTLINE_PR_TAG);\n if (outlineEl) {\n const op: OutlineProperties = {};\n const aS = flag(outlineEl.attrs['applyStyles']);\n if (aS !== undefined) op.applyStyles = aS;\n const sB = flag(outlineEl.attrs['summaryBelow']);\n if (sB !== undefined) op.summaryBelow = sB;\n const sR = flag(outlineEl.attrs['summaryRight']);\n if (sR !== undefined) op.summaryRight = sR;\n const sOS = flag(outlineEl.attrs['showOutlineSymbols']);\n if (sOS !== undefined) op.showOutlineSymbols = sOS;\n out.outlinePr = op;\n }\n\n const psEl = findChild(node, PAGE_SETUP_PR_TAG);\n if (psEl) {\n const ps: PageSetupProperties = {};\n const apb = flag(psEl.attrs['autoPageBreaks']);\n if (apb !== undefined) ps.autoPageBreaks = apb;\n const ftp = flag(psEl.attrs['fitToPage']);\n if (ftp !== undefined) ps.fitToPage = ftp;\n out.pageSetUpPr = ps;\n }\n\n return Object.keys(out).length > 0 ? out : undefined;\n};\n\nconst parseIgnoredError = (node: XmlNode): IgnoredError => {\n const sqref = node.attrs['sqref'];\n if (!sqref) throw new OpenXmlSchemaError('worksheet: <ignoredError> missing @sqref');\n const out: IgnoredError = { sqref: parseMultiCellRange(sqref) };\n const flag = (raw: string | undefined): boolean | undefined => {\n if (raw === undefined) return undefined;\n if (raw === '1' || raw === 'true') return true;\n if (raw === '0' || raw === 'false') return false;\n return undefined;\n };\n const evalError = flag(node.attrs['evalError']);\n if (evalError !== undefined) out.evalError = evalError;\n const twoDigitTextYear = flag(node.attrs['twoDigitTextYear']);\n if (twoDigitTextYear !== undefined) out.twoDigitTextYear = twoDigitTextYear;\n const numberStoredAsText = flag(node.attrs['numberStoredAsText']);\n if (numberStoredAsText !== undefined) out.numberStoredAsText = numberStoredAsText;\n const formula = flag(node.attrs['formula']);\n if (formula !== undefined) out.formula = formula;\n const formulaRange = flag(node.attrs['formulaRange']);\n if (formulaRange !== undefined) out.formulaRange = formulaRange;\n const unlockedFormula = flag(node.attrs['unlockedFormula']);\n if (unlockedFormula !== undefined) out.unlockedFormula = unlockedFormula;\n const emptyCellReference = flag(node.attrs['emptyCellReference']);\n if (emptyCellReference !== undefined) out.emptyCellReference = emptyCellReference;\n const listDataValidation = flag(node.attrs['listDataValidation']);\n if (listDataValidation !== undefined) out.listDataValidation = listDataValidation;\n const calculatedColumn = flag(node.attrs['calculatedColumn']);\n if (calculatedColumn !== undefined) out.calculatedColumn = calculatedColumn;\n return out;\n};\n\n/**\n * Pick up every top-level `<worksheet>` child we don't model (e.g. `<sheetPr>`,\n * `<printOptions>`, `<pageMargins>`, `<pageSetup>`, `<headerFooter>`,\n * `<rowBreaks>`, `<colBreaks>`, `<oleObjects>`, `<controls>`, `<picture>`,\n * `<legacyDrawingHF>`, `<extLst>`) so the writer can re-emit them around the\n * modeled blocks. Anything before `<sheetData>` (in document order) goes into\n * the early bucket; the rest goes into the late bucket.\n */\nfunction captureWorksheetBodyExtras(root: XmlNode, ws: Worksheet): void {\n const beforeSheetData: XmlNode[] = [];\n const afterSheetData: XmlNode[] = [];\n let seenSheetData = false;\n for (const child of root.children) {\n if (MODELED_WORKSHEET_TAGS.has(child.name)) {\n if (child.name === SHEETDATA_TAG) seenSheetData = true;\n continue;\n }\n if (seenSheetData) afterSheetData.push(child);\n else beforeSheetData.push(child);\n }\n if (beforeSheetData.length > 0 || afterSheetData.length > 0) {\n ws.bodyExtras = { beforeSheetData, afterSheetData };\n }\n}\n\nconst MODELED_WORKSHEET_TAGS: ReadonlySet<string> = new Set([\n `{${SHEET_MAIN_NS}}dimension`,\n SHEETDATA_TAG,\n MERGE_CELLS_TAG,\n SHEET_VIEWS_TAG,\n SHEET_FORMAT_PR_TAG,\n COLS_TAG,\n HYPERLINKS_TAG,\n DATA_VALIDATIONS_TAG,\n AUTOFILTER_TAG,\n TABLE_PARTS_TAG,\n CONDITIONAL_FORMATTING_TAG,\n DRAWING_TAG,\n CELL_WATCHES_TAG,\n IGNORED_ERRORS_TAG,\n SHEET_PR_TAG,\n SHEET_PROTECTION_TAG,\n PROTECTED_RANGES_TAG,\n SORT_STATE_TAG,\n PICTURE_TAG,\n LEGACY_DRAWING_HF_TAG,\n OLE_OBJECTS_TAG,\n CONTROLS_TAG,\n SMART_TAGS_TAG,\n CUSTOM_SHEET_VIEWS_TAG,\n PRINT_OPTIONS_TAG,\n PAGE_MARGINS_TAG,\n PAGE_SETUP_TAG,\n HEADER_FOOTER_TAG,\n ROW_BREAKS_TAG,\n COL_BREAKS_TAG,\n CUSTOM_PROPERTIES_TAG,\n WEB_PUBLISH_ITEMS_TAG,\n PHONETIC_PR_TAG,\n DATA_CONSOLIDATE_TAG,\n SCENARIOS_TAG,\n // <legacyDrawing r:id> for VML comments — we regenerate it from\n // ws.legacyComments + ctx.registerComments.\n `{${SHEET_MAIN_NS}}legacyDrawing`,\n]);\n\nconst PANE_TYPES: ReadonlyArray<PaneType> = ['bottomRight', 'topRight', 'bottomLeft', 'topLeft'];\nconst PANE_STATES: ReadonlyArray<PaneState> = ['split', 'frozen', 'frozenSplit'];\nconst SHEET_VIEW_MODES: ReadonlyArray<SheetViewMode> = ['normal', 'pageBreakPreview', 'pageLayout'];\n\nconst parseFloatAttr = (raw: string | undefined): number | undefined => {\n if (raw === undefined) return undefined;\n const n = Number.parseFloat(raw);\n return Number.isFinite(n) ? n : undefined;\n};\n\nconst parseIntegerAttr = (raw: string | undefined): number | undefined => {\n if (raw === undefined) return undefined;\n const n = Number.parseInt(raw, 10);\n return Number.isInteger(n) ? n : undefined;\n};\n\nconst parseBoolXmlAttr = (raw: string | undefined): boolean | undefined => {\n if (raw === undefined) return undefined;\n if (raw === '1' || raw === 'true') return true;\n if (raw === '0' || raw === 'false') return false;\n return undefined;\n};\n\nconst parseSheetView = (node: XmlNode): SheetView => {\n const opts: Partial<SheetView> = {\n workbookViewId: parseIntegerAttr(node.attrs['workbookViewId']) ?? 0,\n };\n const tabSelected = parseBoolXmlAttr(node.attrs['tabSelected']);\n if (tabSelected !== undefined) opts.tabSelected = tabSelected;\n const showGridLines = parseBoolXmlAttr(node.attrs['showGridLines']);\n if (showGridLines !== undefined) opts.showGridLines = showGridLines;\n const showRowColHeaders = parseBoolXmlAttr(node.attrs['showRowColHeaders']);\n if (showRowColHeaders !== undefined) opts.showRowColHeaders = showRowColHeaders;\n const showFormulas = parseBoolXmlAttr(node.attrs['showFormulas']);\n if (showFormulas !== undefined) opts.showFormulas = showFormulas;\n const showZeros = parseBoolXmlAttr(node.attrs['showZeros']);\n if (showZeros !== undefined) opts.showZeros = showZeros;\n const rightToLeft = parseBoolXmlAttr(node.attrs['rightToLeft']);\n if (rightToLeft !== undefined) opts.rightToLeft = rightToLeft;\n const view = node.attrs['view'];\n if (view !== undefined && (SHEET_VIEW_MODES as ReadonlyArray<string>).includes(view)) {\n opts.view = view as SheetViewMode;\n }\n if (node.attrs['topLeftCell']) opts.topLeftCell = node.attrs['topLeftCell'];\n const zoomScale = parseIntegerAttr(node.attrs['zoomScale']);\n if (zoomScale !== undefined) opts.zoomScale = zoomScale;\n const zoomScaleNormal = parseIntegerAttr(node.attrs['zoomScaleNormal']);\n if (zoomScaleNormal !== undefined) opts.zoomScaleNormal = zoomScaleNormal;\n\n const paneEl = findChild(node, PANE_TAG);\n if (paneEl) opts.pane = parsePane(paneEl);\n const selectionEl = findChild(node, SELECTION_TAG);\n if (selectionEl) opts.selection = parseSelection(selectionEl);\n return makeSheetView(opts);\n};\n\nconst parsePane = (node: XmlNode): Pane => {\n const stateRaw = node.attrs['state'];\n const state: PaneState =\n stateRaw && (PANE_STATES as ReadonlyArray<string>).includes(stateRaw) ? (stateRaw as PaneState) : 'split';\n const pane: Pane = { state };\n const xSplit = parseFloatAttr(node.attrs['xSplit']);\n if (xSplit !== undefined) pane.xSplit = xSplit;\n const ySplit = parseFloatAttr(node.attrs['ySplit']);\n if (ySplit !== undefined) pane.ySplit = ySplit;\n if (node.attrs['topLeftCell']) pane.topLeftCell = node.attrs['topLeftCell'];\n const activePaneRaw = node.attrs['activePane'];\n if (activePaneRaw && (PANE_TYPES as ReadonlyArray<string>).includes(activePaneRaw)) {\n pane.activePane = activePaneRaw as PaneType;\n }\n return pane;\n};\n\nconst parseSelection = (node: XmlNode): Selection => {\n const sel: Selection = {};\n const paneRaw = node.attrs['pane'];\n if (paneRaw && (PANE_TYPES as ReadonlyArray<string>).includes(paneRaw)) sel.pane = paneRaw as PaneType;\n if (node.attrs['activeCell']) sel.activeCell = node.attrs['activeCell'];\n if (node.attrs['sqref']) sel.sqref = node.attrs['sqref'];\n return sel;\n};\n\nconst parseRowIndex = (rowNode: XmlNode): number => {\n const rAttr = rowNode.attrs['r'];\n if (rAttr === undefined) {\n throw new OpenXmlSchemaError('worksheet: <row> missing required @r');\n }\n const r = Number.parseInt(rAttr, 10);\n if (!Number.isInteger(r) || r < 1) {\n throw new OpenXmlSchemaError(`worksheet: <row r=\"${rAttr}\"> is not a positive integer`);\n }\n return r;\n};\n\nconst parseCellCoord = (cNode: XmlNode, rowIdx: number, fallbackCol: number): { row: number; col: number } => {\n const rAttr = cNode.attrs['r'];\n if (rAttr === undefined) {\n // Cells without @r take the next column slot in the current row.\n return { row: rowIdx, col: fallbackCol };\n }\n const t = coordinateToTuple(rAttr);\n if (t.row !== rowIdx) {\n throw new OpenXmlSchemaError(`worksheet: <c r=\"${rAttr}\"> row ${t.row} disagrees with <row r=\"${rowIdx}\">`);\n }\n return { row: t.row, col: t.col };\n};\n\nconst readCell = (\n ws: Worksheet,\n cNode: XmlNode,\n coord: { row: number; col: number },\n ctx: WorksheetReadContext,\n sharedFormulas: Map<number, SharedFormulaCache>,\n): void => {\n const t = cNode.attrs['t'] ?? 'n';\n const styleAttr = cNode.attrs['s'];\n const styleId = styleAttr === undefined ? 0 : parseStyleId(styleAttr);\n\n const fNode = findChild(cNode, F_TAG);\n const vNode = findChild(cNode, V_TAG);\n const isNode = findChild(cNode, IS_TAG);\n\n // ---- formula path ------------------------------------------------------\n if (fNode) {\n const cell = setCell(ws, coord.row, coord.col, null, styleId);\n const cachedRaw = vNode?.text;\n const cached = decodeCachedValue(cachedRaw, t);\n handleFormula(cell, fNode, coord, cached, sharedFormulas);\n return;\n }\n\n // ---- non-formula values ------------------------------------------------\n let value: number | string | boolean | { kind: 'error'; code: ExcelErrorCode } | null = null;\n switch (t) {\n case 'n':\n value = vNode?.text !== undefined && vNode.text !== '' ? Number.parseFloat(vNode.text) : null;\n break;\n case 's': {\n if (vNode?.text === undefined) {\n throw new OpenXmlSchemaError('worksheet: <c t=\"s\"> missing <v>');\n }\n const idx = Number.parseInt(vNode.text, 10);\n if (!Number.isInteger(idx) || idx < 0) {\n throw new OpenXmlSchemaError(`worksheet: <c t=\"s\"><v>${vNode.text}</v> is not a valid index`);\n }\n const sst = ctx.sharedStrings[idx];\n if (sst === undefined) {\n throw new OpenXmlSchemaError(\n `worksheet: shared-string index ${idx} out of range [0, ${ctx.sharedStrings.length})`,\n );\n }\n value = sst;\n break;\n }\n case 'b':\n value = vNode?.text === '1';\n break;\n case 'e': {\n const code = vNode?.text;\n if (code === undefined || !ERROR_CODES.has(code)) {\n throw new OpenXmlSchemaError(`worksheet: unknown error code \"${code}\" in <c t=\"e\">`);\n }\n value = { kind: 'error', code: code as ExcelErrorCode };\n break;\n }\n case 'str':\n value = vNode?.text ?? '';\n break;\n case 'inlineStr':\n value = readInlineString(isNode);\n break;\n default:\n throw new OpenXmlSchemaError(`worksheet: unknown cell type t=\"${t}\"`);\n }\n setCell(ws, coord.row, coord.col, value, styleId);\n};\n\nconst parseStyleId = (raw: string): number => {\n const n = Number.parseInt(raw, 10);\n if (!Number.isInteger(n) || n < 0) {\n throw new OpenXmlSchemaError(`worksheet: <c s=\"${raw}\"> is not a non-negative integer`);\n }\n return n;\n};\n\n/** Inline-string body — concatenates `<is>/<t>` text runs. Rich runs lose formatting in stage-1. */\nconst readInlineString = (isNode: XmlNode | undefined): string => {\n if (!isNode) return '';\n const direct = findChild(isNode, T_TAG);\n if (direct) return direct.text ?? '';\n // Rich inline string — concatenate every <r>/<t>.\n let out = '';\n for (const child of isNode.children) {\n const t = findChild(child, T_TAG);\n if (t?.text) out += t.text;\n }\n return out;\n};\n\nconst decodeCachedValue = (raw: string | undefined, t: string): number | string | boolean | undefined => {\n if (raw === undefined || raw === '') return undefined;\n switch (t) {\n case 'n':\n return Number.parseFloat(raw);\n case 'b':\n return raw === '1';\n case 'str':\n return raw;\n case 'e':\n return raw;\n case 's':\n // Cached value of a formula resolving to a shared string is rare; keep\n // as-is.\n return raw;\n default:\n return raw;\n }\n};\n\n// Strip the `_xlfn.` / `_xlfn._xlws.` prefixes Excel writes to disk for\n// future-functions on read. The writer side leaves formula text as-is, but\n// loaded files (typically from real Excel) ship the prefix and we surface a\n// clean bare-name formula to consumers.\nconst FUTURE_FUNCTION_PREFIX_RE = /\\b_xlfn\\.(?:_xlws\\.)?([A-Z][A-Z0-9.]*)/g;\nconst stripFutureFunctionPrefix = (s: string): string =>\n s.length > 0 && s.includes('_xlfn.') ? s.replace(FUTURE_FUNCTION_PREFIX_RE, '$1') : s;\n\nconst handleFormula = (\n cell: Cell,\n fNode: XmlNode,\n coord: { row: number; col: number },\n cached: number | string | boolean | undefined,\n sharedFormulas: Map<number, SharedFormulaCache>,\n): void => {\n const tAttr = fNode.attrs['t'] ?? 'normal';\n const formula = stripFutureFunctionPrefix(fNode.text ?? '');\n const opts = cached !== undefined ? { cachedValue: cached } : undefined;\n switch (tAttr as FormulaKind) {\n case 'normal':\n setFormula(cell, formula, opts);\n return;\n case 'array': {\n const ref = fNode.attrs['ref'];\n if (!ref) {\n throw new OpenXmlSchemaError('worksheet: <f t=\"array\"> missing @ref');\n }\n setArrayFormula(cell, ref, formula, opts);\n return;\n }\n case 'shared': {\n const siRaw = fNode.attrs['si'];\n if (siRaw === undefined) {\n throw new OpenXmlSchemaError('worksheet: <f t=\"shared\"> missing @si');\n }\n const si = Number.parseInt(siRaw, 10);\n if (!Number.isInteger(si) || si < 0) {\n throw new OpenXmlSchemaError(`worksheet: <f t=\"shared\" si=\"${siRaw}\"> is not a valid index`);\n }\n const ref = fNode.attrs['ref'];\n if (formula.length > 0) {\n // Origin / first occurrence of the shared formula. The ref is required\n // by Excel but we accept its absence for resilience.\n sharedFormulas.set(si, { origin: tupleToCoordinate(coord.col, coord.row), formula });\n setSharedFormula(cell, si, formula, ref, opts);\n return;\n }\n // Subsequent reference — translate the cached origin formula.\n const cache = sharedFormulas.get(si);\n if (!cache) {\n throw new OpenXmlSchemaError(`worksheet: <f t=\"shared\" si=\"${si}\"/> with no preceding origin formula`);\n }\n const dest = tupleToCoordinate(coord.col, coord.row);\n // OOXML shared-formula text omits the leading '='; the translator treats\n // unprefixed input as a LITERAL and skips ref shifting, so we re-prefix\n // before translating and strip again on the way out.\n const translated = translateFormula(`=${cache.formula}`, cache.origin, { dest });\n const stripped = translated.startsWith('=') ? translated.slice(1) : translated;\n setSharedFormula(cell, si, stripped, undefined, opts);\n return;\n }\n case 'dataTable': {\n // Data-Table formula (What-if Analysis output). Preserve every\n // dt-specific attribute so the writer re-emits the exact same <f\n // t=\"dataTable\" r1=\"…\" /> shape and Excel keeps treating the cell as a\n // Data Table cell.\n const ref = fNode.attrs['ref'];\n if (!ref) {\n throw new OpenXmlSchemaError('worksheet: <f t=\"dataTable\"> missing @ref');\n }\n const dtOpts: import('../cell/cell').DataTableFormulaOpts = {\n ref,\n ...(cached !== undefined ? { cachedValue: cached } : {}),\n ...(fNode.attrs['r1'] !== undefined ? { r1: fNode.attrs['r1'] } : {}),\n ...(fNode.attrs['r2'] !== undefined ? { r2: fNode.attrs['r2'] } : {}),\n ...(parseDataTableBool(fNode.attrs['dt2D']) ? { dt2D: true } : {}),\n ...(parseDataTableBool(fNode.attrs['dtr']) ? { dtr: true } : {}),\n ...(parseDataTableBool(fNode.attrs['del1']) ? { del1: true } : {}),\n ...(parseDataTableBool(fNode.attrs['del2']) ? { del2: true } : {}),\n ...(parseDataTableBool(fNode.attrs['aca']) ? { aca: true } : {}),\n ...(parseDataTableBool(fNode.attrs['ca']) ? { ca: true } : {}),\n };\n setDataTableFormula(cell, formula, dtOpts);\n return;\n }\n default:\n throw new OpenXmlSchemaError(`worksheet: <f t=\"${tAttr}\"> unknown formula kind`);\n }\n};\n\nconst parseDataTableBool = (raw: string | undefined): boolean => {\n // Excel emits these as the OOXML truthy values \"1\" or \"true\".\n if (raw === undefined) return false;\n return raw === '1' || raw === 'true';\n};\n\nconst parseColumnDimension = (node: XmlNode): ColumnDimension => {\n const minRaw = node.attrs['min'];\n const maxRaw = node.attrs['max'];\n if (minRaw === undefined || maxRaw === undefined) {\n throw new OpenXmlSchemaError('worksheet: <col> missing required @min/@max');\n }\n const min = Number.parseInt(minRaw, 10);\n const max = Number.parseInt(maxRaw, 10);\n if (!Number.isInteger(min) || !Number.isInteger(max) || min < 1 || max < min) {\n throw new OpenXmlSchemaError(`worksheet: <col min=\"${minRaw}\" max=\"${maxRaw}\"> not a valid column run`);\n }\n const opts: Partial<Omit<ColumnDimension, 'min' | 'max'>> = {};\n const width = parseFloatAttr(node.attrs['width']);\n if (width !== undefined) opts.width = width;\n const customWidth = parseBoolXmlAttr(node.attrs['customWidth']);\n if (customWidth !== undefined) opts.customWidth = customWidth;\n const hidden = parseBoolXmlAttr(node.attrs['hidden']);\n if (hidden !== undefined) opts.hidden = hidden;\n const bestFit = parseBoolXmlAttr(node.attrs['bestFit']);\n if (bestFit !== undefined) opts.bestFit = bestFit;\n const outlineLevel = parseIntegerAttr(node.attrs['outlineLevel']);\n if (outlineLevel !== undefined) opts.outlineLevel = outlineLevel;\n const style = parseIntegerAttr(node.attrs['style']);\n if (style !== undefined) opts.style = style;\n const collapsed = parseBoolXmlAttr(node.attrs['collapsed']);\n if (collapsed !== undefined) opts.collapsed = collapsed;\n // makeColumnDimension fills min=col=max; rebuild with both range ends.\n return { ...makeColumnDimension(min, opts), max };\n};\n\nconst DV_TYPES: ReadonlyArray<DataValidationType> = [\n 'whole',\n 'decimal',\n 'list',\n 'date',\n 'time',\n 'textLength',\n 'custom',\n];\nconst DV_OPERATORS: ReadonlyArray<DataValidationOperator> = [\n 'between',\n 'notBetween',\n 'equal',\n 'notEqual',\n 'greaterThan',\n 'greaterThanOrEqual',\n 'lessThan',\n 'lessThanOrEqual',\n];\nconst DV_ERROR_STYLES: ReadonlyArray<DataValidationErrorStyle> = ['stop', 'warning', 'information'];\n\nconst parseDataValidation = (node: XmlNode): DataValidation => {\n const typeRaw = node.attrs['type'];\n const type: DataValidationType =\n typeRaw && (DV_TYPES as ReadonlyArray<string>).includes(typeRaw) ? (typeRaw as DataValidationType) : 'custom';\n const sqrefRaw = node.attrs['sqref'];\n if (!sqrefRaw) throw new OpenXmlSchemaError('worksheet: <dataValidation> missing @sqref');\n const opts: Partial<DataValidation> & { type: DataValidationType; sqref: ReturnType<typeof parseMultiCellRange> } = {\n type,\n sqref: parseMultiCellRange(sqrefRaw),\n };\n const operator = node.attrs['operator'];\n if (operator && (DV_OPERATORS as ReadonlyArray<string>).includes(operator)) {\n opts.operator = operator as DataValidationOperator;\n }\n const allowBlank = parseBoolXmlAttr(node.attrs['allowBlank']);\n if (allowBlank !== undefined) opts.allowBlank = allowBlank;\n const showInputMessage = parseBoolXmlAttr(node.attrs['showInputMessage']);\n if (showInputMessage !== undefined) opts.showInputMessage = showInputMessage;\n const showErrorMessage = parseBoolXmlAttr(node.attrs['showErrorMessage']);\n if (showErrorMessage !== undefined) opts.showErrorMessage = showErrorMessage;\n const showDropDown = parseBoolXmlAttr(node.attrs['showDropDown']);\n if (showDropDown !== undefined) opts.showDropDown = showDropDown;\n const errorTitle = node.attrs['errorTitle'];\n if (errorTitle !== undefined) opts.errorTitle = errorTitle;\n const error = node.attrs['error'];\n if (error !== undefined) opts.error = error;\n const errorStyle = node.attrs['errorStyle'];\n if (errorStyle && (DV_ERROR_STYLES as ReadonlyArray<string>).includes(errorStyle)) {\n opts.errorStyle = errorStyle as DataValidationErrorStyle;\n }\n const promptTitle = node.attrs['promptTitle'];\n if (promptTitle !== undefined) opts.promptTitle = promptTitle;\n const prompt = node.attrs['prompt'];\n if (prompt !== undefined) opts.prompt = prompt;\n const f1 = findChild(node, FORMULA1_TAG);\n if (f1?.text !== undefined) opts.formula1 = f1.text;\n const f2 = findChild(node, FORMULA2_TAG);\n if (f2?.text !== undefined) opts.formula2 = f2.text;\n return makeDataValidation(opts);\n};\n\nconst CF_RULE_TYPES: ReadonlyArray<ConditionalFormattingRuleType> = [\n 'expression',\n 'cellIs',\n 'colorScale',\n 'dataBar',\n 'iconSet',\n 'top10',\n 'aboveAverage',\n 'uniqueValues',\n 'duplicateValues',\n 'containsText',\n 'notContainsText',\n 'beginsWith',\n 'endsWith',\n 'containsBlanks',\n 'notContainsBlanks',\n 'containsErrors',\n 'notContainsErrors',\n 'timePeriod',\n];\nconst VISUAL_RULE_TYPES = new Set<ConditionalFormattingRuleType>(['colorScale', 'dataBar', 'iconSet']);\n\nconst parseConditionalFormatting = (node: XmlNode): ConditionalFormatting | undefined => {\n const sqrefRaw = node.attrs['sqref'];\n if (!sqrefRaw) return undefined;\n const rules: ConditionalFormattingRule[] = [];\n for (const r of findChildren(node, CF_RULE_TAG)) {\n const rule = parseCfRule(r);\n if (rule) rules.push(rule);\n }\n const opts: Parameters<typeof makeConditionalFormatting>[0] = {\n sqref: parseMultiCellRange(sqrefRaw),\n rules,\n };\n const pivot = parseBoolXmlAttr(node.attrs['pivot']);\n if (pivot !== undefined) opts.pivot = pivot;\n return makeConditionalFormatting(opts);\n};\n\nconst parseCfRule = (node: XmlNode): ConditionalFormattingRule | undefined => {\n const typeRaw = node.attrs['type'];\n const priorityRaw = node.attrs['priority'];\n if (!typeRaw || priorityRaw === undefined) return undefined;\n if (!(CF_RULE_TYPES as ReadonlyArray<string>).includes(typeRaw)) return undefined;\n const priority = Number.parseInt(priorityRaw, 10);\n if (!Number.isInteger(priority)) return undefined;\n const type = typeRaw as ConditionalFormattingRuleType;\n const opts: Parameters<typeof makeCfRule>[0] = { type, priority };\n const dxf = parseIntegerAttr(node.attrs['dxfId']);\n if (dxf !== undefined) opts.dxfId = dxf;\n const stop = parseBoolXmlAttr(node.attrs['stopIfTrue']);\n if (stop !== undefined) opts.stopIfTrue = stop;\n if (node.attrs['operator']) opts.operator = node.attrs['operator'];\n if (node.attrs['text'] !== undefined) opts.text = node.attrs['text'];\n const percent = parseBoolXmlAttr(node.attrs['percent']);\n if (percent !== undefined) opts.percent = percent;\n const bottom = parseBoolXmlAttr(node.attrs['bottom']);\n if (bottom !== undefined) opts.bottom = bottom;\n const rank = parseIntegerAttr(node.attrs['rank']);\n if (rank !== undefined) opts.rank = rank;\n const aboveAverage = parseBoolXmlAttr(node.attrs['aboveAverage']);\n if (aboveAverage !== undefined) opts.aboveAverage = aboveAverage;\n const equalAverage = parseBoolXmlAttr(node.attrs['equalAverage']);\n if (equalAverage !== undefined) opts.equalAverage = equalAverage;\n const stdDev = parseIntegerAttr(node.attrs['stdDev']);\n if (stdDev !== undefined) opts.stdDev = stdDev;\n if (node.attrs['timePeriod']) opts.timePeriod = node.attrs['timePeriod'] as TimePeriod;\n\n const formulas: string[] = [];\n for (const f of findChildren(node, FORMULA_TAG)) formulas.push(f.text ?? '');\n if (formulas.length > 0) opts.formulas = formulas;\n\n if (VISUAL_RULE_TYPES.has(type)) {\n // Round-trip every non-formula child verbatim. Re-serialise to bytes then\n // back to a string so the writer can emit the same markup.\n const inner: string[] = [];\n for (const child of node.children) {\n if (child.name === FORMULA_TAG) continue;\n inner.push(new TextDecoder().decode(serializeXml(child, { xmlDeclaration: false })));\n }\n if (inner.length > 0) opts.innerXml = inner.join('');\n }\n return makeCfRule(opts);\n};\n\nconst parseAutoFilter = (node: XmlNode): AutoFilter | undefined => {\n const ref = node.attrs['ref'];\n if (!ref) return undefined;\n const filterColumns: FilterColumn[] = [];\n for (const fc of findChildren(node, FILTER_COLUMN_TAG)) {\n const colIdRaw = fc.attrs['colId'];\n const colId = colIdRaw !== undefined ? Number.parseInt(colIdRaw, 10) : -1;\n if (!Number.isInteger(colId) || colId < 0) continue;\n const filtersEl = findChild(fc, FILTERS_TAG);\n if (!filtersEl) continue;\n const values: string[] = [];\n for (const f of findChildren(filtersEl, FILTER_TAG)) {\n const v = f.attrs['val'];\n if (v !== undefined) values.push(v);\n }\n const blank = parseBoolXmlAttr(filtersEl.attrs['blank']);\n const fc2: FilterColumn = { kind: 'filters', colId, values };\n if (blank !== undefined) fc2.blank = blank;\n filterColumns.push(fc2);\n }\n return { ref, filterColumns };\n};\n\nconst parseHyperlink = (node: XmlNode, rels: Relationships | undefined): Hyperlink => {\n const ref = node.attrs['ref'];\n if (!ref) throw new OpenXmlSchemaError('worksheet: <hyperlink> missing @ref');\n const ridAttr = node.attrs[`{${REL_NS}}id`];\n const opts: Partial<Hyperlink> = { ref };\n if (ridAttr) {\n opts.rId = ridAttr;\n const rel = rels ? findById(rels, ridAttr) : undefined;\n if (rel) opts.target = rel.target;\n }\n if (node.attrs['location']) opts.location = node.attrs['location'];\n if (node.attrs['tooltip']) opts.tooltip = node.attrs['tooltip'];\n if (node.attrs['display']) opts.display = node.attrs['display'];\n return makeHyperlink(opts as Hyperlink);\n};\n\nconst maybeRecordRowDimension = (ws: Worksheet, node: XmlNode, rowIdx: number): void => {\n const opts: Partial<RowDimension> = {};\n const ht = parseFloatAttr(node.attrs['ht']);\n if (ht !== undefined) opts.height = ht;\n const customHeight = parseBoolXmlAttr(node.attrs['customHeight']);\n if (customHeight !== undefined) opts.customHeight = customHeight;\n const hidden = parseBoolXmlAttr(node.attrs['hidden']);\n if (hidden !== undefined) opts.hidden = hidden;\n const outlineLevel = parseIntegerAttr(node.attrs['outlineLevel']);\n if (outlineLevel !== undefined) opts.outlineLevel = outlineLevel;\n const collapsed = parseBoolXmlAttr(node.attrs['collapsed']);\n if (collapsed !== undefined) opts.collapsed = collapsed;\n const style = parseIntegerAttr(node.attrs['s']);\n if (style !== undefined) opts.style = style;\n if (Object.keys(opts).length === 0) return;\n ws.rowDimensions.set(rowIdx, makeRowDimension(opts));\n};\n","// Worksheet XML writer.\n//\n// **Stage 1**: hand-rolled serialiser for `<sheetData>/<row>/<c>` covering the\n// common cell-value shapes — number / string (via shared strings) / boolean /\n// error / formula. Streaming through XmlStreamWriter + dimension / sheetView /\n// cols / mergeCells lands in later iterations of the loop.\n//\n// The acceptance criterion (1M cell write in ~5s on M1) needs SAX, but stage-1\n// prioritises correctness — once loadWorkbook → saveWorkbook round-trips, we\n// can swap the body for a streaming writer without callers noticing.\n\nimport { type Cell, type CellValue, type ExcelErrorCode, type FormulaValue, getCoordinate } from '../cell/cell';\nimport type { Relationships } from '../packaging/relationships';\nimport { dateToExcel, durationToExcel } from '../utils/datetime';\nimport { escapeCellString, escapeXmlAttr as escapeXmlAttrShared, escapeXmlText as escapeXmlTextShared } from '../utils/escape';\nimport { OpenXmlSchemaError } from '../utils/exceptions';\nimport type { SharedStringsTable } from '../workbook/shared-strings';\nimport { addSharedString, serializeRichTextRuns } from '../workbook/shared-strings';\nimport { SHEET_MAIN_NS } from '../xml/namespaces';\nimport { serializeXml } from '../xml/serializer';\nimport type { XmlNode } from '../xml/tree';\nimport type { AutoFilter } from './auto-filter';\nimport { multiCellRangeToString, rangeToString } from './cell-range';\nimport type { ConditionalFormatting, ConditionalFormattingRule } from './conditional-formatting';\nimport type { DataValidation } from './data-validations';\nimport type { ColumnDimension, RowDimension } from './dimensions';\nimport type { CellWatch, IgnoredError } from './errors';\nimport type { Hyperlink } from './hyperlinks';\nimport type { DataConsolidate, DataReference } from './data-consolidate';\nimport type { Scenario, ScenarioInputCell, ScenarioList } from './scenarios';\nimport type { HeaderFooter, PageBreak, PageMargins, PageSetup, PrintOptions } from './page-setup';\nimport type { WorksheetPhoneticProperties } from './phonetic';\nimport type { WebPublishItem, WorksheetCustomProperty } from './web-publish';\nimport type { SheetProperties } from './properties';\nimport type { SheetProtection } from './protection';\nimport type { ProtectedRange } from './protected-ranges';\nimport type { SortCondition, SortState } from './sort-state';\nimport type { FormControl, OleObject } from './ole-objects';\nimport type { CustomSheetView } from './custom-sheet-views';\nimport type { Pane, Selection, SheetView } from './views';\nimport type { Worksheet } from './worksheet';\n\nconst HYPERLINK_REL_TYPE = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink';\n\nexport interface WorksheetWriteContext {\n /** Accumulator the writer mutates as it emits string cells. */\n sharedStrings: SharedStringsTable;\n /**\n * Workbook epoch for `Date` / `{kind:'duration'}` cell serialisation. `true`\n * = Mac 1904 epoch; `false` (default) = Windows 1900 epoch. Modern Excel\n * emits 1900-based serials; 1904 only appears in legacy Mac workbooks but the\n * round-trip respects the workbook setting.\n */\n date1904?: boolean;\n /**\n * Worksheet rels collector. The writer pushes a rel per external hyperlink\n * and per Table, allocating ids `rId1..rIdN`. Caller emits the resulting\n * relationships file alongside the worksheet part.\n */\n rels?: Relationships;\n /**\n * Table rel allocator. saveWorkbook hands in a callback that registers a\n * table part under a workbook-global tableN counter and returns the relPath\n * (\"../tables/tableN.xml\") + the worksheet-rels rId. Called once per\n * `ws.tables` entry while serialising.\n */\n registerTable?: (table: import('./table').TableDefinition) => { rId: string };\n /**\n * Comments / VML drawing allocator. saveWorkbook emits the comments part + a\n * placeholder VML drawing for all comments on the sheet, and returns the\n * worksheet-rels rId for the VML — which the writer splats into\n * `<legacyDrawing r:id>`. Called once per worksheet that carries any\n * comments.\n */\n registerComments?: (comments: ReadonlyArray<import('./comments').LegacyComment>) => { vmlRelId: string };\n /**\n * Drawing allocator. saveWorkbook emits xl/drawings/drawingN.xml under a\n * workbook-global counter, registers a `${REL_NS}/drawing` rel on the\n * worksheet rels, and returns the worksheet-rels rId — splatted into\n * `<drawing r:id>` by the writer. Called once when ws.drawing is set.\n */\n registerDrawing?: (drawing: import('../drawing/drawing').Drawing) => { rId: string };\n}\n\nconst XML_HEADER = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n\n/**\n * Serialise a worksheet to its `xl/worksheets/sheetN.xml` payload. The function\n * mutates `ctx.sharedStrings` — every plain-string cell adds (or dedupes) into\n * the table; the caller is responsible for emitting the resulting sst at the\n * end of the package write.\n */\nexport function worksheetToBytes(ws: Worksheet, ctx: WorksheetWriteContext): Uint8Array {\n return new TextEncoder().encode(serializeWorksheet(ws, ctx));\n}\n\nfunction serializeWorksheet(ws: Worksheet, ctx: WorksheetWriteContext): string {\n const parts: string[] = [\n XML_HEADER,\n `<worksheet xmlns=\"${SHEET_MAIN_NS}\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">`,\n ];\n if (ws.sheetProperties) {\n const sp = serializeSheetProperties(ws.sheetProperties);\n if (sp) parts.push(sp);\n }\n if (ws.bodyExtras?.beforeSheetData) {\n for (const node of ws.bodyExtras.beforeSheetData) parts.push(serializeBodyExtraNode(node));\n }\n parts.push(serializeDimension(ws));\n if (ws.views.length > 0) parts.push(serializeSheetViews(ws.views));\n const sheetFormatPr = serializeSheetFormatPr(ws);\n if (sheetFormatPr) parts.push(sheetFormatPr);\n if (ws.columnDimensions.size > 0) parts.push(serializeCols(ws.columnDimensions));\n parts.push('<sheetData>');\n // Iterate rows in numeric order so writer output is deterministic.\n const rowKeys = [...ws.rows.keys()].sort((a, b) => a - b);\n // Walk the union of populated rows + rowDimension entries so dimension-only\n // rows (e.g. an empty row with custom height) still emit.\n const rowKeyUnion = new Set<number>(rowKeys);\n for (const k of ws.rowDimensions.keys()) rowKeyUnion.add(k);\n const sortedRowKeys = [...rowKeyUnion].sort((a, b) => a - b);\n for (const rowIdx of sortedRowKeys) {\n const row = ws.rows.get(rowIdx);\n const dim = ws.rowDimensions.get(rowIdx);\n if ((!row || row.size === 0) && !dim) continue;\n const dimAttrs = dim ? serializeRowDimensionAttrs(dim) : '';\n if (!row || row.size === 0) {\n parts.push(`<row r=\"${rowIdx}\"${dimAttrs}/>`);\n continue;\n }\n const colKeys = [...row.keys()].sort((a, b) => a - b);\n parts.push(`<row r=\"${rowIdx}\"${dimAttrs}>`);\n for (const colIdx of colKeys) {\n const cell = row.get(colIdx);\n if (cell) parts.push(serializeCell(cell, ctx));\n }\n parts.push('</row>');\n }\n parts.push('</sheetData>');\n // sheetProtection sits between sheetData and mergeCells per ECMA-376\n // §18.3.1.85.\n if (ws.sheetProtection) {\n const sp = serializeSheetProtection(ws.sheetProtection);\n if (sp) parts.push(sp);\n }\n if (ws.protectedRanges.length > 0) parts.push(serializeProtectedRanges(ws.protectedRanges));\n if (ws.scenarios) {\n const sc = serializeScenarioList(ws.scenarios);\n if (sc) parts.push(sc);\n }\n // Excel's element order: autoFilter sits between sheetData and mergeCells.\n if (ws.autoFilter) parts.push(serializeAutoFilter(ws.autoFilter));\n if (ws.sortState) parts.push(serializeSortState(ws.sortState));\n if (ws.dataConsolidate) {\n const dc = serializeDataConsolidate(ws.dataConsolidate);\n if (dc) parts.push(dc);\n }\n if (ws.mergedCells.length > 0) {\n parts.push(`<mergeCells count=\"${ws.mergedCells.length}\">`);\n for (const range of ws.mergedCells) {\n parts.push(`<mergeCell ref=\"${rangeToString(range)}\"/>`);\n }\n parts.push('</mergeCells>');\n }\n if (ws.customSheetViews.length > 0) parts.push(serializeCustomSheetViews(ws.customSheetViews));\n if (ws.phoneticPr) {\n const pp = serializePhoneticPr(ws.phoneticPr);\n if (pp) parts.push(pp);\n }\n for (const cf of ws.conditionalFormatting) {\n parts.push(serializeConditionalFormatting(cf));\n }\n if (ws.dataValidations.length > 0) {\n parts.push(serializeDataValidations(ws.dataValidations));\n }\n if (ws.hyperlinks.length > 0) {\n parts.push(serializeHyperlinks(ws.hyperlinks, ctx.rels));\n }\n // afterSheetData extras live between hyperlinks and the drawing/\n // legacyDrawing/tableParts tail. ECMA-376 puts printOptions / pageMargins /\n // pageSetup / headerFooter / rowBreaks / colBreaks here; oleObjects /\n // controls / picture / legacyDrawingHF technically belong AFTER drawing and\n // BEFORE tableParts, but Excel reads them in either spot. extLst is strictly\n // the last child per ECMA, but landing it before tableParts keeps round-trip\n // Excel-compatible without requiring fine-grained positional tracking.\n if (ws.printOptions) {\n const po = serializePrintOptions(ws.printOptions);\n if (po) parts.push(po);\n }\n if (ws.pageMargins) parts.push(serializePageMargins(ws.pageMargins));\n if (ws.pageSetup) {\n const ps = serializePageSetup(ws.pageSetup);\n if (ps) parts.push(ps);\n }\n if (ws.headerFooter) {\n const hf = serializeHeaderFooter(ws.headerFooter);\n if (hf) parts.push(hf);\n }\n if (ws.rowBreaks.length > 0) parts.push(serializePageBreaks(ws.rowBreaks, 'rowBreaks'));\n if (ws.colBreaks.length > 0) parts.push(serializePageBreaks(ws.colBreaks, 'colBreaks'));\n if (ws.customProperties.length > 0) parts.push(serializeWorksheetCustomProperties(ws.customProperties));\n if (ws.bodyExtras?.afterSheetData) {\n for (const node of ws.bodyExtras.afterSheetData) parts.push(serializeBodyExtraNode(node));\n }\n if (ws.cellWatches.length > 0) {\n parts.push(serializeCellWatches(ws.cellWatches));\n }\n if (ws.ignoredErrors.length > 0) {\n parts.push(serializeIgnoredErrors(ws.ignoredErrors));\n }\n if (ws.smartTags.length > 0) parts.push(serializeSmartTags(ws.smartTags));\n if (ws.drawing && ctx.registerDrawing) {\n const { rId } = ctx.registerDrawing(ws.drawing);\n parts.push(`<drawing r:id=\"${escapeXmlAttr(rId)}\"/>`);\n }\n if (ws.legacyComments.length > 0 && ctx.registerComments) {\n const { vmlRelId } = ctx.registerComments(ws.legacyComments);\n parts.push(`<legacyDrawing r:id=\"${escapeXmlAttr(vmlRelId)}\"/>`);\n }\n if (ws.legacyDrawingHFRId !== undefined) {\n parts.push(`<legacyDrawingHF r:id=\"${escapeXmlAttr(ws.legacyDrawingHFRId)}\"/>`);\n }\n if (ws.oleObjects.length > 0) parts.push(serializeOleObjects(ws.oleObjects));\n if (ws.controls.length > 0) parts.push(serializeControls(ws.controls));\n if (ws.backgroundPictureRId !== undefined) {\n parts.push(`<picture r:id=\"${escapeXmlAttr(ws.backgroundPictureRId)}\"/>`);\n }\n if (ws.webPublishItems.length > 0) parts.push(serializeWebPublishItems(ws.webPublishItems));\n if (ws.tables.length > 0 && ctx.registerTable) {\n parts.push(`<tableParts count=\"${ws.tables.length}\">`);\n for (const t of ws.tables) {\n const { rId } = ctx.registerTable(t);\n parts.push(`<tablePart r:id=\"${escapeXmlAttr(rId)}\"/>`);\n }\n parts.push('</tableParts>');\n }\n parts.push('</worksheet>');\n return parts.join('');\n}\n\nconst escapeXmlText = escapeXmlTextShared;\nconst escapeXmlAttr = escapeXmlAttrShared;\n\nconst serializeDimension = (ws: Worksheet): string => {\n let minRow = Infinity;\n let maxRow = -Infinity;\n let minCol = Infinity;\n let maxCol = -Infinity;\n for (const [rowIdx, row] of ws.rows) {\n if (row.size === 0) continue;\n for (const colIdx of row.keys()) {\n if (rowIdx < minRow) minRow = rowIdx;\n if (rowIdx > maxRow) maxRow = rowIdx;\n if (colIdx < minCol) minCol = colIdx;\n if (colIdx > maxCol) maxCol = colIdx;\n }\n }\n if (!Number.isFinite(minRow)) return '<dimension ref=\"A1\"/>';\n // Compose the ref using a temporary Cell-like to share the column-letter\n // logic.\n const col1 = colLetters(minCol);\n const col2 = colLetters(maxCol);\n const ref = minRow === maxRow && minCol === maxCol ? `${col1}${minRow}` : `${col1}${minRow}:${col2}${maxRow}`;\n return `<dimension ref=\"${ref}\"/>`;\n};\n\nconst colLetters = (n: number): string => {\n let m = n;\n let out = '';\n while (m > 0) {\n m -= 1;\n out = String.fromCharCode(65 + (m % 26)) + out;\n m = Math.floor(m / 26);\n }\n return out;\n};\n\n/**\n * Serialise a single cell into its `<c .../>` element. Exported so the\n * streaming write-only path can emit cells row-by-row without going through the\n * full Worksheet model — see src/streaming/write-only.ts.\n *\n * Only `ctx.sharedStrings` is consulted for plain-string cells; the other\n * context fields are used by the worksheet-level serializer that wraps this\n * helper.\n */\nexport const serializeCell = (cell: Cell, ctx: WorksheetWriteContext): string => {\n const ref = getCoordinate(cell);\n const styleAttr = cell.styleId === 0 ? '' : ` s=\"${cell.styleId}\"`;\n const value = cell.value;\n\n if (value === null) {\n // Empty-but-styled cells still need to emit so styleId survives the\n // round-trip.\n if (cell.styleId === 0) return '';\n return `<c r=\"${ref}\"${styleAttr}/>`;\n }\n\n // Formula values come first since the discriminated union check is cheap.\n if (typeof value === 'object' && value !== null && (value as { kind?: string }).kind === 'formula') {\n return serializeFormulaCell(ref, styleAttr, value as FormulaValue);\n }\n if (typeof value === 'object' && value !== null && (value as { kind?: string }).kind === 'error') {\n const code = (value as { kind: 'error'; code: ExcelErrorCode }).code;\n return `<c r=\"${ref}\"${styleAttr} t=\"e\"><v>${code}</v></c>`;\n }\n if (typeof value === 'object' && value !== null && (value as { kind?: string }).kind === 'rich-text') {\n // Emit rich text inline (t=\"inlineStr\") rather than via the shared-strings\n // table. Excel only honours per-run formatting for inline strings;\n // rich-text entries inside `xl/sharedStrings.xml` get collapsed back to\n // plain text on render. This mirrors openpyxl's writer (`cell.write` →\n // `t=\"inlineStr\"` for CellRichText values).\n const runs = (value as { kind: 'rich-text'; runs: import('../cell/rich-text').RichText }).runs;\n return `<c r=\"${ref}\"${styleAttr} t=\"inlineStr\"><is>${serializeRichTextRuns(runs)}</is></c>`;\n }\n\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) {\n throw new OpenXmlSchemaError(`worksheet: cannot serialise non-finite number at ${ref}`);\n }\n return `<c r=\"${ref}\"${styleAttr}><v>${serializeNumber(value)}</v></c>`;\n }\n if (typeof value === 'boolean') {\n return `<c r=\"${ref}\"${styleAttr} t=\"b\"><v>${value ? '1' : '0'}</v></c>`;\n }\n if (typeof value === 'string') {\n const id = addSharedString(ctx.sharedStrings, value);\n return `<c r=\"${ref}\"${styleAttr} t=\"s\"><v>${id}</v></c>`;\n }\n if (value instanceof Date) {\n // Excel stores dates as serial numbers under the workbook epoch. The cell\n // shows as a date only if the styleId points at a number-format with a date\n // code — caller-managed; openpyxl behaves the same way. We just emit the\n // serial.\n const serial = dateToExcel(value, { epoch: ctx.date1904 ? 'mac' : 'windows' });\n return `<c r=\"${ref}\"${styleAttr}><v>${serializeNumber(serial)}</v></c>`;\n }\n if (typeof value === 'object' && value !== null && (value as { kind?: string }).kind === 'duration') {\n const ms = (value as { kind: 'duration'; ms: number }).ms;\n const serial = durationToExcel(ms);\n return `<c r=\"${ref}\"${styleAttr}><v>${serializeNumber(serial)}</v></c>`;\n }\n throw new OpenXmlSchemaError(`worksheet: unsupported cell value kind at ${ref}: ${describeValue(value)}`);\n};\n\nconst serializeNumber = (n: number): string => {\n // Match Excel's round-trip preference: integers stay as integers, doubles use\n // the JS default representation. We don't need scientific-notation tweaking\n // here — Excel reads either form fine.\n return Number.isInteger(n) ? n.toFixed(0) : String(n);\n};\n\nconst serializeFormulaCell = (ref: string, styleAttr: string, f: FormulaValue): string => {\n const fAttrs: string[] = [];\n if (f.t !== 'normal') fAttrs.push(`t=\"${f.t}\"`);\n if (f.ref !== undefined) fAttrs.push(`ref=\"${escapeXmlAttr(f.ref)}\"`);\n if (f.si !== undefined) fAttrs.push(`si=\"${f.si}\"`);\n // Data-table formula attrs — only relevant when t === 'dataTable'.\n if (f.r1 !== undefined) fAttrs.push(`r1=\"${escapeXmlAttr(f.r1)}\"`);\n if (f.r2 !== undefined) fAttrs.push(`r2=\"${escapeXmlAttr(f.r2)}\"`);\n if (f.dt2D) fAttrs.push('dt2D=\"1\"');\n if (f.dtr) fAttrs.push('dtr=\"1\"');\n if (f.del1) fAttrs.push('del1=\"1\"');\n if (f.del2) fAttrs.push('del2=\"1\"');\n if (f.aca) fAttrs.push('aca=\"1\"');\n if (f.ca) fAttrs.push('ca=\"1\"');\n // Pass the formula text through verbatim. Auto-prefixing future-functions\n // with `_xlfn.` matches what Excel writes on save, but Excel itself only\n // accepts that form in tandem with `cm=\"N\"` cell metadata + an\n // `xl/metadata.xml` part — otherwise it raises the \"We found a problem\"\n // recovery dialog. Until we emit metadata, ship bare names: Excel 365 / 2021\n // still resolves them; older Excel renders #NAME? but the workbook opens.\n const fAttrStr = fAttrs.length > 0 ? ` ${fAttrs.join(' ')}` : '';\n const formulaText = escapeXmlText(escapeCellString(f.formula));\n const fEl = formulaText.length > 0 ? `<f${fAttrStr}>${formulaText}</f>` : `<f${fAttrStr}/>`;\n\n let valueAttr = '';\n let vEl = '';\n const cached = f.cachedValue;\n if (cached !== undefined) {\n if (typeof cached === 'number') {\n vEl = `<v>${serializeNumber(cached)}</v>`;\n } else if (typeof cached === 'boolean') {\n valueAttr = ' t=\"b\"';\n vEl = `<v>${cached ? '1' : '0'}</v>`;\n } else {\n // String result of a formula — use t=\"str\", not the sst path.\n valueAttr = ' t=\"str\"';\n vEl = `<v>${escapeXmlText(escapeCellString(cached))}</v>`;\n }\n }\n return `<c r=\"${ref}\"${styleAttr}${valueAttr}>${fEl}${vEl}</c>`;\n};\n\nconst describeValue = (value: CellValue): string => {\n if (value === null) return 'null';\n if (typeof value === 'object' && value !== null) {\n const kind = (value as { kind?: string }).kind;\n return kind ? `{ kind: \"${kind}\" }` : 'object';\n }\n return typeof value;\n};\n\nconst xmlBoolAttr = (key: string, v: boolean | undefined): string =>\n v === undefined ? '' : ` ${key}=\"${v ? '1' : '0'}\"`;\n\nconst serializeSheetViews = (views: ReadonlyArray<SheetView>): string => {\n const parts: string[] = ['<sheetViews>'];\n for (const v of views) parts.push(serializeSheetView(v));\n parts.push('</sheetViews>');\n return parts.join('');\n};\n\nconst serializeSheetView = (v: SheetView): string => {\n let attrs = '';\n attrs += xmlBoolAttr('tabSelected', v.tabSelected);\n attrs += xmlBoolAttr('showGridLines', v.showGridLines);\n attrs += xmlBoolAttr('showRowColHeaders', v.showRowColHeaders);\n attrs += xmlBoolAttr('showFormulas', v.showFormulas);\n attrs += xmlBoolAttr('showZeros', v.showZeros);\n attrs += xmlBoolAttr('rightToLeft', v.rightToLeft);\n if (v.view) attrs += ` view=\"${v.view}\"`;\n if (v.topLeftCell) attrs += ` topLeftCell=\"${escapeXmlAttr(v.topLeftCell)}\"`;\n if (v.zoomScale !== undefined) attrs += ` zoomScale=\"${v.zoomScale}\"`;\n if (v.zoomScaleNormal !== undefined) attrs += ` zoomScaleNormal=\"${v.zoomScaleNormal}\"`;\n attrs += ` workbookViewId=\"${v.workbookViewId}\"`;\n\n const inner: string[] = [];\n if (v.pane) inner.push(serializePane(v.pane));\n if (v.selection) inner.push(serializeSelection(v.selection));\n\n if (inner.length === 0) return `<sheetView${attrs}/>`;\n return `<sheetView${attrs}>${inner.join('')}</sheetView>`;\n};\n\nconst serializePane = (p: Pane): string => {\n let attrs = '';\n if (p.xSplit !== undefined) attrs += ` xSplit=\"${p.xSplit}\"`;\n if (p.ySplit !== undefined) attrs += ` ySplit=\"${p.ySplit}\"`;\n if (p.topLeftCell) attrs += ` topLeftCell=\"${escapeXmlAttr(p.topLeftCell)}\"`;\n if (p.activePane) attrs += ` activePane=\"${p.activePane}\"`;\n attrs += ` state=\"${p.state}\"`;\n return `<pane${attrs}/>`;\n};\n\nconst serializeSelection = (s: Selection): string => {\n let attrs = '';\n if (s.pane) attrs += ` pane=\"${s.pane}\"`;\n if (s.activeCell) attrs += ` activeCell=\"${escapeXmlAttr(s.activeCell)}\"`;\n if (s.sqref) attrs += ` sqref=\"${escapeXmlAttr(s.sqref)}\"`;\n return `<selection${attrs}/>`;\n};\n\nconst serializeSheetFormatPr = (ws: Worksheet): string => {\n let attrs = '';\n if (ws.baseColWidth !== undefined) attrs += ` baseColWidth=\"${ws.baseColWidth}\"`;\n if (ws.defaultColumnWidth !== undefined) attrs += ` defaultColWidth=\"${ws.defaultColumnWidth}\"`;\n // Excel requires `defaultRowHeight` on <sheetFormatPr>; default to 15 (the\n // body-font row height for Calibri 11pt) when the caller hasn't specified\n // one.\n attrs += ` defaultRowHeight=\"${ws.defaultRowHeight ?? 15}\"`;\n if (ws.customHeight !== undefined) attrs += ` customHeight=\"${ws.customHeight ? '1' : '0'}\"`;\n if (ws.zeroHeight !== undefined) attrs += ` zeroHeight=\"${ws.zeroHeight ? '1' : '0'}\"`;\n if (ws.thickTop !== undefined) attrs += ` thickTop=\"${ws.thickTop ? '1' : '0'}\"`;\n if (ws.thickBottom !== undefined) attrs += ` thickBottom=\"${ws.thickBottom ? '1' : '0'}\"`;\n\n // outlineLevelRow / outlineLevelCol — emit explicit if set, else auto-compute\n // the max from row/column dimensions so Excel renders the outline button\n // strip with the right depth.\n const olRow = ws.outlineLevelRow ?? maxOutlineLevel(ws.rowDimensions);\n if (olRow > 0) attrs += ` outlineLevelRow=\"${olRow}\"`;\n const olCol = ws.outlineLevelCol ?? maxOutlineLevel(ws.columnDimensions);\n if (olCol > 0) attrs += ` outlineLevelCol=\"${olCol}\"`;\n\n return `<sheetFormatPr${attrs}/>`;\n};\n\nconst maxOutlineLevel = (\n dims: ReadonlyMap<number, { outlineLevel?: number }>,\n): number => {\n let max = 0;\n for (const d of dims.values()) {\n if (d.outlineLevel !== undefined && d.outlineLevel > max) max = d.outlineLevel;\n }\n return max;\n};\n\nconst serializeCols = (cols: ReadonlyMap<number, ColumnDimension>): string => {\n const sorted = [...cols.values()].sort((a, b) => a.min - b.min);\n const parts: string[] = ['<cols>'];\n for (const dim of sorted) parts.push(serializeColumnDimension(dim));\n parts.push('</cols>');\n return parts.join('');\n};\n\nconst serializeColumnDimension = (dim: ColumnDimension): string => {\n let attrs = ` min=\"${dim.min}\" max=\"${dim.max}\"`;\n // Excel rejects `<col>` without `width` — even hidden columns need it.\n // Default to the workbook's stock 9.140625 (Calibri 11pt) so the viewport\n // width stays consistent with what Excel itself emits.\n const width = dim.width ?? 9.140625;\n attrs += ` width=\"${width}\"`;\n if (dim.style !== undefined) attrs += ` style=\"${dim.style}\"`;\n if (dim.hidden) attrs += ' hidden=\"1\"';\n if (dim.bestFit) attrs += ' bestFit=\"1\"';\n // Excel only honours `width` when paired with `customWidth=\"1\"`. Auto-emit\n // when the user supplied a width even if they didn't set the flag (the flag\n // is OOXML plumbing, not something most callers think to set).\n if (dim.customWidth || dim.width !== undefined) attrs += ' customWidth=\"1\"';\n if (dim.outlineLevel !== undefined) attrs += ` outlineLevel=\"${dim.outlineLevel}\"`;\n if (dim.collapsed) attrs += ' collapsed=\"1\"';\n return `<col${attrs}/>`;\n};\n\nconst serializeAutoFilter = (filter: AutoFilter): string => {\n const refAttr = ` ref=\"${escapeXmlAttr(filter.ref)}\"`;\n if (filter.filterColumns.length === 0) return `<autoFilter${refAttr}/>`;\n const parts: string[] = [`<autoFilter${refAttr}>`];\n for (const fc of filter.filterColumns) {\n parts.push(`<filterColumn colId=\"${fc.colId}\">`);\n let filtersAttrs = '';\n if (fc.blank !== undefined) filtersAttrs += ` blank=\"${fc.blank ? '1' : '0'}\"`;\n if (fc.values.length === 0) {\n parts.push(`<filters${filtersAttrs}/>`);\n } else {\n parts.push(`<filters${filtersAttrs}>`);\n for (const v of fc.values) parts.push(`<filter val=\"${escapeXmlAttr(v)}\"/>`);\n parts.push('</filters>');\n }\n parts.push('</filterColumn>');\n }\n parts.push('</autoFilter>');\n return parts.join('');\n};\n\nconst serializeConditionalFormatting = (cf: ConditionalFormatting): string => {\n const sqref = escapeXmlAttr(multiCellRangeToString(cf.sqref));\n let attrs = ` sqref=\"${sqref}\"`;\n if (cf.pivot !== undefined) attrs += ` pivot=\"${cf.pivot ? '1' : '0'}\"`;\n if (cf.rules.length === 0) return `<conditionalFormatting${attrs}/>`;\n const parts: string[] = [`<conditionalFormatting${attrs}>`];\n for (const rule of cf.rules) parts.push(serializeCfRule(rule));\n parts.push('</conditionalFormatting>');\n return parts.join('');\n};\n\nconst serializeCfRule = (rule: ConditionalFormattingRule): string => {\n let attrs = ` type=\"${rule.type}\" priority=\"${rule.priority}\"`;\n if (rule.dxfId !== undefined) attrs += ` dxfId=\"${rule.dxfId}\"`;\n if (rule.stopIfTrue) attrs += ' stopIfTrue=\"1\"';\n if (rule.operator) attrs += ` operator=\"${escapeXmlAttr(rule.operator)}\"`;\n if (rule.text !== undefined) attrs += ` text=\"${escapeXmlAttr(rule.text)}\"`;\n if (rule.percent !== undefined) attrs += ` percent=\"${rule.percent ? '1' : '0'}\"`;\n if (rule.bottom !== undefined) attrs += ` bottom=\"${rule.bottom ? '1' : '0'}\"`;\n if (rule.rank !== undefined) attrs += ` rank=\"${rule.rank}\"`;\n if (rule.aboveAverage !== undefined) attrs += ` aboveAverage=\"${rule.aboveAverage ? '1' : '0'}\"`;\n if (rule.equalAverage !== undefined) attrs += ` equalAverage=\"${rule.equalAverage ? '1' : '0'}\"`;\n if (rule.stdDev !== undefined) attrs += ` stdDev=\"${rule.stdDev}\"`;\n if (rule.timePeriod !== undefined) attrs += ` timePeriod=\"${rule.timePeriod}\"`;\n\n const inner: string[] = [];\n for (const f of rule.formulas) inner.push(`<formula>${escapeXmlText(f)}</formula>`);\n if (rule.innerXml) inner.push(rule.innerXml);\n if (inner.length === 0) return `<cfRule${attrs}/>`;\n return `<cfRule${attrs}>${inner.join('')}</cfRule>`;\n};\n\nconst serializeDataValidations = (dvs: ReadonlyArray<DataValidation>): string => {\n const parts: string[] = [`<dataValidations count=\"${dvs.length}\">`];\n for (const dv of dvs) parts.push(serializeDataValidation(dv));\n parts.push('</dataValidations>');\n return parts.join('');\n};\n\nconst serializeDataValidation = (dv: DataValidation): string => {\n let attrs = ` type=\"${dv.type}\"`;\n if (dv.errorStyle) attrs += ` errorStyle=\"${dv.errorStyle}\"`;\n if (dv.operator) attrs += ` operator=\"${dv.operator}\"`;\n if (dv.allowBlank) attrs += ' allowBlank=\"1\"';\n if (dv.showDropDown) attrs += ' showDropDown=\"1\"';\n if (dv.showInputMessage) attrs += ' showInputMessage=\"1\"';\n if (dv.showErrorMessage) attrs += ' showErrorMessage=\"1\"';\n if (dv.errorTitle !== undefined) attrs += ` errorTitle=\"${escapeXmlAttr(dv.errorTitle)}\"`;\n if (dv.error !== undefined) attrs += ` error=\"${escapeXmlAttr(dv.error)}\"`;\n if (dv.promptTitle !== undefined) attrs += ` promptTitle=\"${escapeXmlAttr(dv.promptTitle)}\"`;\n if (dv.prompt !== undefined) attrs += ` prompt=\"${escapeXmlAttr(dv.prompt)}\"`;\n attrs += ` sqref=\"${escapeXmlAttr(multiCellRangeToString(dv.sqref))}\"`;\n\n const formulas: string[] = [];\n if (dv.formula1 !== undefined) formulas.push(`<formula1>${escapeXmlText(dv.formula1)}</formula1>`);\n if (dv.formula2 !== undefined) formulas.push(`<formula2>${escapeXmlText(dv.formula2)}</formula2>`);\n if (formulas.length === 0) return `<dataValidation${attrs}/>`;\n return `<dataValidation${attrs}>${formulas.join('')}</dataValidation>`;\n};\n\nconst boolAttr = (v: boolean | undefined, name: string): string =>\n v === undefined ? '' : ` ${name}=\"${v ? '1' : '0'}\"`;\n\nconst serializePrintOptions = (po: PrintOptions): string | undefined => {\n let attrs = '';\n attrs += boolAttr(po.horizontalCentered, 'horizontalCentered');\n attrs += boolAttr(po.verticalCentered, 'verticalCentered');\n attrs += boolAttr(po.headings, 'headings');\n attrs += boolAttr(po.gridLines, 'gridLines');\n attrs += boolAttr(po.gridLinesSet, 'gridLinesSet');\n if (attrs.length === 0) return undefined;\n return `<printOptions${attrs}/>`;\n};\n\nexport const serializePageMargins = (pm: PageMargins): string => {\n return (\n `<pageMargins left=\"${pm.left}\" right=\"${pm.right}\"` +\n ` top=\"${pm.top}\" bottom=\"${pm.bottom}\"` +\n ` header=\"${pm.header}\" footer=\"${pm.footer}\"/>`\n );\n};\n\nexport const serializePageSetup = (ps: PageSetup): string | undefined => {\n let attrs = '';\n if (ps.paperSize !== undefined) attrs += ` paperSize=\"${ps.paperSize}\"`;\n if (ps.scale !== undefined) attrs += ` scale=\"${ps.scale}\"`;\n if (ps.firstPageNumber !== undefined) attrs += ` firstPageNumber=\"${ps.firstPageNumber}\"`;\n if (ps.fitToWidth !== undefined) attrs += ` fitToWidth=\"${ps.fitToWidth}\"`;\n if (ps.fitToHeight !== undefined) attrs += ` fitToHeight=\"${ps.fitToHeight}\"`;\n if (ps.pageOrder !== undefined) attrs += ` pageOrder=\"${ps.pageOrder}\"`;\n if (ps.orientation !== undefined) attrs += ` orientation=\"${ps.orientation}\"`;\n attrs += boolAttr(ps.usePrinterDefaults, 'usePrinterDefaults');\n attrs += boolAttr(ps.blackAndWhite, 'blackAndWhite');\n attrs += boolAttr(ps.draft, 'draft');\n if (ps.cellComments !== undefined) attrs += ` cellComments=\"${ps.cellComments}\"`;\n attrs += boolAttr(ps.useFirstPageNumber, 'useFirstPageNumber');\n if (ps.errors !== undefined) attrs += ` errors=\"${ps.errors}\"`;\n if (ps.horizontalDpi !== undefined) attrs += ` horizontalDpi=\"${ps.horizontalDpi}\"`;\n if (ps.verticalDpi !== undefined) attrs += ` verticalDpi=\"${ps.verticalDpi}\"`;\n if (ps.copies !== undefined) attrs += ` copies=\"${ps.copies}\"`;\n if (ps.paperHeight !== undefined) attrs += ` paperHeight=\"${escapeXmlAttr(ps.paperHeight)}\"`;\n if (ps.paperWidth !== undefined) attrs += ` paperWidth=\"${escapeXmlAttr(ps.paperWidth)}\"`;\n if (ps.rId !== undefined) attrs += ` r:id=\"${escapeXmlAttr(ps.rId)}\"`;\n if (attrs.length === 0) return undefined;\n return `<pageSetup${attrs}/>`;\n};\n\nconst serializeSmartTags = (\n st: ReadonlyArray<import('./smart-tags').CellSmartTags>,\n): string => {\n const parts: string[] = ['<smartTags>'];\n for (const cst of st) {\n parts.push(`<cellSmartTags r=\"${escapeXmlAttr(cst.ref)}\">`);\n for (const tag of cst.tags) {\n let attrs = ` type=\"${tag.type}\"`;\n if (tag.deleted !== undefined) attrs += ` deleted=\"${tag.deleted ? '1' : '0'}\"`;\n if (tag.xmlBased !== undefined) attrs += ` xmlBased=\"${tag.xmlBased ? '1' : '0'}\"`;\n if (tag.properties.length === 0) {\n parts.push(`<cellSmartTag${attrs}/>`);\n continue;\n }\n parts.push(`<cellSmartTag${attrs}>`);\n for (const p of tag.properties) {\n parts.push(`<cellSmartTagPr key=\"${escapeXmlAttr(p.key)}\" val=\"${escapeXmlAttr(p.val)}\"/>`);\n }\n parts.push('</cellSmartTag>');\n }\n parts.push('</cellSmartTags>');\n }\n parts.push('</smartTags>');\n return parts.join('');\n};\n\nconst serializeSortState = (ss: SortState): string => {\n let attrs = ` ref=\"${escapeXmlAttr(ss.ref)}\"`;\n if (ss.columnSort !== undefined) attrs += ` columnSort=\"${ss.columnSort ? '1' : '0'}\"`;\n if (ss.caseSensitive !== undefined) attrs += ` caseSensitive=\"${ss.caseSensitive ? '1' : '0'}\"`;\n if (ss.sortMethod !== undefined) attrs += ` sortMethod=\"${ss.sortMethod}\"`;\n if (ss.conditions.length === 0) return `<sortState${attrs}/>`;\n const inner: string[] = [`<sortState${attrs}>`];\n for (const c of ss.conditions) inner.push(serializeSortCondition(c));\n inner.push('</sortState>');\n return inner.join('');\n};\n\nconst serializeSortCondition = (c: SortCondition): string => {\n let attrs = '';\n if (c.descending !== undefined) attrs += ` descending=\"${c.descending ? '1' : '0'}\"`;\n if (c.sortBy !== undefined) attrs += ` sortBy=\"${c.sortBy}\"`;\n attrs += ` ref=\"${escapeXmlAttr(c.ref)}\"`;\n if (c.customList !== undefined) attrs += ` customList=\"${escapeXmlAttr(c.customList)}\"`;\n if (c.dxfId !== undefined) attrs += ` dxfId=\"${c.dxfId}\"`;\n if (c.iconSet !== undefined) attrs += ` iconSet=\"${c.iconSet}\"`;\n if (c.iconId !== undefined) attrs += ` iconId=\"${c.iconId}\"`;\n return `<sortCondition${attrs}/>`;\n};\n\nconst serializeProtectedRanges = (ranges: ReadonlyArray<ProtectedRange>): string => {\n const parts: string[] = ['<protectedRanges>'];\n for (const r of ranges) {\n let attrs = '';\n if (r.password !== undefined) attrs += ` password=\"${escapeXmlAttr(r.password)}\"`;\n attrs += ` sqref=\"${escapeXmlAttr(multiCellRangeToString(r.sqref))}\"`;\n attrs += ` name=\"${escapeXmlAttr(r.name)}\"`;\n if (r.securityDescriptor !== undefined) attrs += ` securityDescriptor=\"${escapeXmlAttr(r.securityDescriptor)}\"`;\n if (r.algorithmName !== undefined) attrs += ` algorithmName=\"${escapeXmlAttr(r.algorithmName)}\"`;\n if (r.hashValue !== undefined) attrs += ` hashValue=\"${escapeXmlAttr(r.hashValue)}\"`;\n if (r.saltValue !== undefined) attrs += ` saltValue=\"${escapeXmlAttr(r.saltValue)}\"`;\n if (r.spinCount !== undefined) attrs += ` spinCount=\"${r.spinCount}\"`;\n parts.push(`<protectedRange${attrs}/>`);\n }\n parts.push('</protectedRanges>');\n return parts.join('');\n};\n\nconst serializeScenarioList = (sl: ScenarioList): string | undefined => {\n if (sl.scenarios.length === 0 && sl.current === undefined && sl.show === undefined && sl.sqref === undefined) {\n return undefined;\n }\n let attrs = '';\n if (sl.current !== undefined) attrs += ` current=\"${sl.current}\"`;\n if (sl.show !== undefined) attrs += ` show=\"${sl.show}\"`;\n if (sl.sqref !== undefined) attrs += ` sqref=\"${escapeXmlAttr(multiCellRangeToString(sl.sqref))}\"`;\n if (sl.scenarios.length === 0) return `<scenarios${attrs}/>`;\n const inner: string[] = [];\n for (const s of sl.scenarios) inner.push(serializeScenario(s));\n return `<scenarios${attrs}>${inner.join('')}</scenarios>`;\n};\n\nconst serializeScenario = (s: Scenario): string => {\n let attrs = ` name=\"${escapeXmlAttr(s.name)}\"`;\n if (s.locked !== undefined) attrs += ` locked=\"${s.locked ? '1' : '0'}\"`;\n if (s.hidden !== undefined) attrs += ` hidden=\"${s.hidden ? '1' : '0'}\"`;\n attrs += ` count=\"${s.inputCells.length}\"`;\n if (s.user !== undefined) attrs += ` user=\"${escapeXmlAttr(s.user)}\"`;\n if (s.comment !== undefined) attrs += ` comment=\"${escapeXmlAttr(s.comment)}\"`;\n if (s.inputCells.length === 0) return `<scenario${attrs}/>`;\n const inner: string[] = [];\n for (const ic of s.inputCells) inner.push(serializeScenarioInputCell(ic));\n return `<scenario${attrs}>${inner.join('')}</scenario>`;\n};\n\nconst serializeScenarioInputCell = (ic: ScenarioInputCell): string => {\n let attrs = ` r=\"${escapeXmlAttr(ic.ref)}\"`;\n if (ic.deleted !== undefined) attrs += ` deleted=\"${ic.deleted ? '1' : '0'}\"`;\n if (ic.undone !== undefined) attrs += ` undone=\"${ic.undone ? '1' : '0'}\"`;\n attrs += ` val=\"${escapeXmlAttr(ic.val)}\"`;\n if (ic.numFmtId !== undefined) attrs += ` numFmtId=\"${ic.numFmtId}\"`;\n return `<inputCells${attrs}/>`;\n};\n\nconst serializeDataConsolidate = (dc: DataConsolidate): string | undefined => {\n let attrs = '';\n if (dc.function !== undefined) attrs += ` function=\"${dc.function}\"`;\n if (dc.topLabels !== undefined) attrs += ` topLabels=\"${dc.topLabels ? '1' : '0'}\"`;\n if (dc.leftLabels !== undefined) attrs += ` leftLabels=\"${dc.leftLabels ? '1' : '0'}\"`;\n if (dc.link !== undefined) attrs += ` link=\"${dc.link ? '1' : '0'}\"`;\n if (dc.startLabels !== undefined) attrs += ` startLabels=\"${escapeXmlAttr(dc.startLabels)}\"`;\n\n const refs = dc.dataRefs ?? [];\n if (attrs.length === 0 && refs.length === 0) return undefined;\n if (refs.length === 0) return `<dataConsolidate${attrs}/>`;\n\n const inner: string[] = [`<dataRefs count=\"${refs.length}\">`];\n for (const r of refs) inner.push(serializeDataReference(r));\n inner.push('</dataRefs>');\n return `<dataConsolidate${attrs}>${inner.join('')}</dataConsolidate>`;\n};\n\nconst serializeDataReference = (r: DataReference): string => {\n let attrs = '';\n if (r.name !== undefined) attrs += ` name=\"${escapeXmlAttr(r.name)}\"`;\n if (r.ref !== undefined) attrs += ` ref=\"${escapeXmlAttr(r.ref)}\"`;\n if (r.sheet !== undefined) attrs += ` sheet=\"${escapeXmlAttr(r.sheet)}\"`;\n if (r.rId !== undefined) attrs += ` r:id=\"${escapeXmlAttr(r.rId)}\"`;\n return `<dataRef${attrs}/>`;\n};\n\nconst serializePhoneticPr = (pp: WorksheetPhoneticProperties): string | undefined => {\n let attrs = '';\n if (pp.fontId !== undefined) attrs += ` fontId=\"${pp.fontId}\"`;\n if (pp.type !== undefined) attrs += ` type=\"${pp.type}\"`;\n if (pp.alignment !== undefined) attrs += ` alignment=\"${pp.alignment}\"`;\n if (attrs.length === 0) return undefined;\n return `<phoneticPr${attrs}/>`;\n};\n\nconst serializeWorksheetCustomProperties = (\n cps: ReadonlyArray<WorksheetCustomProperty>,\n): string => {\n const parts: string[] = ['<customProperties>'];\n for (const cp of cps) {\n let attrs = ` name=\"${escapeXmlAttr(cp.name)}\"`;\n if (cp.rId !== undefined) attrs += ` r:id=\"${escapeXmlAttr(cp.rId)}\"`;\n parts.push(`<customProperty${attrs}/>`);\n }\n parts.push('</customProperties>');\n return parts.join('');\n};\n\nexport const serializeWebPublishItems = (items: ReadonlyArray<WebPublishItem>): string => {\n const parts: string[] = [`<webPublishItems count=\"${items.length}\">`];\n for (const w of items) {\n let attrs =\n ` id=\"${w.id}\" divId=\"${escapeXmlAttr(w.divId)}\"` +\n ` sourceType=\"${w.sourceType}\" destinationFile=\"${escapeXmlAttr(w.destinationFile)}\"`;\n if (w.sourceRef !== undefined) attrs += ` sourceRef=\"${escapeXmlAttr(w.sourceRef)}\"`;\n if (w.sourceObject !== undefined) attrs += ` sourceObject=\"${escapeXmlAttr(w.sourceObject)}\"`;\n if (w.title !== undefined) attrs += ` title=\"${escapeXmlAttr(w.title)}\"`;\n if (w.autoRepublish !== undefined) attrs += ` autoRepublish=\"${w.autoRepublish ? '1' : '0'}\"`;\n parts.push(`<webPublishItem${attrs}/>`);\n }\n parts.push('</webPublishItems>');\n return parts.join('');\n};\n\nconst serializePageBreaks = (breaks: ReadonlyArray<PageBreak>, kind: 'rowBreaks' | 'colBreaks'): string => {\n const manualCount = breaks.reduce((acc, b) => acc + (b.man === false ? 0 : 1), 0);\n const parts: string[] = [`<${kind} count=\"${breaks.length}\" manualBreakCount=\"${manualCount}\">`];\n for (const b of breaks) {\n let attrs = '';\n if (b.id !== undefined) attrs += ` id=\"${b.id}\"`;\n if (b.min !== undefined) attrs += ` min=\"${b.min}\"`;\n if (b.max !== undefined) attrs += ` max=\"${b.max}\"`;\n if (b.man !== undefined) attrs += ` man=\"${b.man ? '1' : '0'}\"`;\n if (b.pt !== undefined) attrs += ` pt=\"${b.pt ? '1' : '0'}\"`;\n parts.push(`<brk${attrs}/>`);\n }\n parts.push(`</${kind}>`);\n return parts.join('');\n};\n\nexport const serializeHeaderFooter = (hf: HeaderFooter): string | undefined => {\n let attrs = '';\n attrs += boolAttr(hf.differentFirst, 'differentFirst');\n attrs += boolAttr(hf.differentOddEven, 'differentOddEven');\n attrs += boolAttr(hf.scaleWithDoc, 'scaleWithDoc');\n attrs += boolAttr(hf.alignWithMargins, 'alignWithMargins');\n const children: string[] = [];\n const tag = (key: string, text: string | undefined): void => {\n if (text === undefined) return;\n children.push(`<${key}>${escapeXmlText(text)}</${key}>`);\n };\n tag('oddHeader', hf.oddHeader);\n tag('oddFooter', hf.oddFooter);\n tag('evenHeader', hf.evenHeader);\n tag('evenFooter', hf.evenFooter);\n tag('firstHeader', hf.firstHeader);\n tag('firstFooter', hf.firstFooter);\n if (attrs.length === 0 && children.length === 0) return undefined;\n if (children.length === 0) return `<headerFooter${attrs}/>`;\n return `<headerFooter${attrs}>${children.join('')}</headerFooter>`;\n};\n\nconst serializeSheetProtection = (sp: SheetProtection): string | undefined => {\n const flagKeys = [\n 'sheet',\n 'objects',\n 'scenarios',\n 'formatCells',\n 'formatColumns',\n 'formatRows',\n 'insertColumns',\n 'insertRows',\n 'insertHyperlinks',\n 'deleteColumns',\n 'deleteRows',\n 'selectLockedCells',\n 'selectUnlockedCells',\n 'sort',\n 'autoFilter',\n 'pivotTables',\n ] as const;\n let attrs = '';\n for (const k of flagKeys) {\n const v = sp[k];\n if (v !== undefined) attrs += ` ${k}=\"${v ? '1' : '0'}\"`;\n }\n if (sp.algorithmName !== undefined) attrs += ` algorithmName=\"${escapeXmlAttr(sp.algorithmName)}\"`;\n if (sp.hashValue !== undefined) attrs += ` hashValue=\"${escapeXmlAttr(sp.hashValue)}\"`;\n if (sp.saltValue !== undefined) attrs += ` saltValue=\"${escapeXmlAttr(sp.saltValue)}\"`;\n if (sp.spinCount !== undefined) attrs += ` spinCount=\"${sp.spinCount}\"`;\n if (attrs.length === 0) return undefined;\n return `<sheetProtection${attrs}/>`;\n};\n\nconst serializeSheetProperties = (sp: SheetProperties): string | undefined => {\n let attrs = '';\n if (sp.codeName !== undefined) attrs += ` codeName=\"${escapeXmlAttr(sp.codeName)}\"`;\n if (sp.enableFormatConditionsCalculation === false) attrs += ' enableFormatConditionsCalculation=\"0\"';\n if (sp.enableFormatConditionsCalculation === true) attrs += ' enableFormatConditionsCalculation=\"1\"';\n if (sp.filterMode !== undefined) attrs += ` filterMode=\"${sp.filterMode ? '1' : '0'}\"`;\n if (sp.published !== undefined) attrs += ` published=\"${sp.published ? '1' : '0'}\"`;\n if (sp.syncHorizontal !== undefined) attrs += ` syncHorizontal=\"${sp.syncHorizontal ? '1' : '0'}\"`;\n if (sp.syncRef !== undefined) attrs += ` syncRef=\"${escapeXmlAttr(sp.syncRef)}\"`;\n if (sp.syncVertical !== undefined) attrs += ` syncVertical=\"${sp.syncVertical ? '1' : '0'}\"`;\n if (sp.transitionEvaluation !== undefined) attrs += ` transitionEvaluation=\"${sp.transitionEvaluation ? '1' : '0'}\"`;\n if (sp.transitionEntry !== undefined) attrs += ` transitionEntry=\"${sp.transitionEntry ? '1' : '0'}\"`;\n\n const children: string[] = [];\n if (sp.tabColor) {\n let tcAttrs = '';\n if (sp.tabColor.rgb !== undefined) tcAttrs += ` rgb=\"${escapeXmlAttr(sp.tabColor.rgb)}\"`;\n if (sp.tabColor.indexed !== undefined) tcAttrs += ` indexed=\"${sp.tabColor.indexed}\"`;\n if (sp.tabColor.theme !== undefined) tcAttrs += ` theme=\"${sp.tabColor.theme}\"`;\n if (sp.tabColor.auto !== undefined) tcAttrs += ` auto=\"${sp.tabColor.auto ? '1' : '0'}\"`;\n if (sp.tabColor.tint !== undefined) tcAttrs += ` tint=\"${sp.tabColor.tint}\"`;\n children.push(`<tabColor${tcAttrs}/>`);\n }\n if (sp.outlinePr) {\n let opAttrs = '';\n if (sp.outlinePr.applyStyles !== undefined) opAttrs += ` applyStyles=\"${sp.outlinePr.applyStyles ? '1' : '0'}\"`;\n if (sp.outlinePr.summaryBelow !== undefined) opAttrs += ` summaryBelow=\"${sp.outlinePr.summaryBelow ? '1' : '0'}\"`;\n if (sp.outlinePr.summaryRight !== undefined) opAttrs += ` summaryRight=\"${sp.outlinePr.summaryRight ? '1' : '0'}\"`;\n if (sp.outlinePr.showOutlineSymbols !== undefined)\n opAttrs += ` showOutlineSymbols=\"${sp.outlinePr.showOutlineSymbols ? '1' : '0'}\"`;\n children.push(`<outlinePr${opAttrs}/>`);\n }\n if (sp.pageSetUpPr) {\n let psAttrs = '';\n if (sp.pageSetUpPr.autoPageBreaks !== undefined)\n psAttrs += ` autoPageBreaks=\"${sp.pageSetUpPr.autoPageBreaks ? '1' : '0'}\"`;\n if (sp.pageSetUpPr.fitToPage !== undefined) psAttrs += ` fitToPage=\"${sp.pageSetUpPr.fitToPage ? '1' : '0'}\"`;\n children.push(`<pageSetUpPr${psAttrs}/>`);\n }\n\n if (attrs.length === 0 && children.length === 0) return undefined;\n if (children.length === 0) return `<sheetPr${attrs}/>`;\n return `<sheetPr${attrs}>${children.join('')}</sheetPr>`;\n};\n\nconst serializeCellWatches = (watches: ReadonlyArray<CellWatch>): string => {\n const parts: string[] = ['<cellWatches>'];\n for (const w of watches) parts.push(`<cellWatch r=\"${escapeXmlAttr(w.ref)}\"/>`);\n parts.push('</cellWatches>');\n return parts.join('');\n};\n\nconst serializeIgnoredErrors = (errs: ReadonlyArray<IgnoredError>): string => {\n const parts: string[] = ['<ignoredErrors>'];\n for (const ie of errs) {\n let attrs = ` sqref=\"${escapeXmlAttr(multiCellRangeToString(ie.sqref))}\"`;\n if (ie.evalError) attrs += ' evalError=\"1\"';\n if (ie.twoDigitTextYear) attrs += ' twoDigitTextYear=\"1\"';\n if (ie.numberStoredAsText) attrs += ' numberStoredAsText=\"1\"';\n if (ie.formula) attrs += ' formula=\"1\"';\n if (ie.formulaRange) attrs += ' formulaRange=\"1\"';\n if (ie.unlockedFormula) attrs += ' unlockedFormula=\"1\"';\n if (ie.emptyCellReference) attrs += ' emptyCellReference=\"1\"';\n if (ie.listDataValidation) attrs += ' listDataValidation=\"1\"';\n if (ie.calculatedColumn) attrs += ' calculatedColumn=\"1\"';\n parts.push(`<ignoredError${attrs}/>`);\n }\n parts.push('</ignoredErrors>');\n return parts.join('');\n};\n\nconst serializeHyperlinks = (links: ReadonlyArray<Hyperlink>, rels: Relationships | undefined): string => {\n const parts: string[] = ['<hyperlinks>'];\n // Index existing rels once so the per-hyperlink rId allocation + dedup checks\n // don't degrade to O(N²) on worksheets with many hyperlinks (dashboard /\n // index sheets routinely carry hundreds).\n const claimedIds = rels ? new Set<string>(rels.rels.map((r) => r.id)) : undefined;\n let rIdCursor = rels ? rels.rels.length + 1 : 1;\n for (const link of links) {\n let attrs = ` ref=\"${escapeXmlAttr(link.ref)}\"`;\n if (link.target !== undefined) {\n // Allocate or reuse a rels entry. We need rels to host external URLs;\n // when ctx.rels is missing we fall back to inlining via location only.\n if (rels && claimedIds) {\n let rId = link.rId;\n if (!rId) {\n // Find the next free rIdN. Pre-loaded relsExtras can occupy\n // low-numbered ids; advance the cursor past anything already in use.\n rId = `rId${rIdCursor}`;\n while (claimedIds.has(rId)) {\n rIdCursor++;\n rId = `rId${rIdCursor}`;\n }\n rIdCursor++;\n }\n // Add rel only if no entry already targets this URL (conservative).\n if (!claimedIds.has(rId)) {\n rels.rels.push({\n id: rId,\n type: HYPERLINK_REL_TYPE,\n target: link.target,\n targetMode: 'External',\n });\n claimedIds.add(rId);\n }\n attrs += ` r:id=\"${escapeXmlAttr(rId)}\"`;\n }\n }\n if (link.location !== undefined) attrs += ` location=\"${escapeXmlAttr(link.location)}\"`;\n if (link.tooltip !== undefined) attrs += ` tooltip=\"${escapeXmlAttr(link.tooltip)}\"`;\n if (link.display !== undefined) attrs += ` display=\"${escapeXmlAttr(link.display)}\"`;\n parts.push(`<hyperlink${attrs}/>`);\n }\n parts.push('</hyperlinks>');\n return parts.join('');\n};\n\nconst serializeRowDimensionAttrs = (dim: RowDimension): string => {\n let attrs = '';\n if (dim.height !== undefined) attrs += ` ht=\"${dim.height}\"`;\n if (dim.customHeight) attrs += ' customHeight=\"1\"';\n if (dim.hidden) attrs += ' hidden=\"1\"';\n if (dim.outlineLevel !== undefined) attrs += ` outlineLevel=\"${dim.outlineLevel}\"`;\n if (dim.collapsed) attrs += ' collapsed=\"1\"';\n if (dim.style !== undefined) attrs += ` s=\"${dim.style}\" customFormat=\"1\"`;\n return attrs;\n};\n\n/**\n * Serialise a captured worksheet body extra (XmlNode) for inline emit. Reuses\n * the namespace-aware serializer then strips the XML declaration. Excel\n * tolerates the redundant per-element `xmlns=\"…\"` declarations that arise from\n * emitting each child as its own root.\n */\nconst serializeBodyExtraNode = (node: XmlNode): string =>\n new TextDecoder().decode(serializeXml(node, { xmlDeclaration: false }));\n\nconst serializeCustomSheetViews = (views: ReadonlyArray<CustomSheetView>): string => {\n const parts: string[] = ['<customSheetViews>'];\n for (const v of views) {\n let attrs = ` guid=\"${escapeXmlAttr(v.guid)}\"`;\n if (v.scale !== undefined) attrs += ` scale=\"${v.scale}\"`;\n if (v.colorId !== undefined) attrs += ` colorId=\"${v.colorId}\"`;\n const flag = (val: boolean | undefined, name: string): void => {\n if (val !== undefined) attrs += ` ${name}=\"${val ? '1' : '0'}\"`;\n };\n flag(v.showPageBreaks, 'showPageBreaks');\n flag(v.showFormulas, 'showFormulas');\n flag(v.showGridLines, 'showGridLines');\n flag(v.showRowCol, 'showRowCol');\n flag(v.outlineSymbols, 'outlineSymbols');\n flag(v.zeroValues, 'zeroValues');\n flag(v.fitToPage, 'fitToPage');\n flag(v.printArea, 'printArea');\n flag(v.filter, 'filter');\n flag(v.showAutoFilter, 'showAutoFilter');\n flag(v.hiddenRows, 'hiddenRows');\n flag(v.hiddenColumns, 'hiddenColumns');\n if (v.state !== undefined) attrs += ` state=\"${v.state}\"`;\n flag(v.filterUnique, 'filterUnique');\n if (v.view !== undefined) attrs += ` view=\"${v.view}\"`;\n flag(v.showRuler, 'showRuler');\n if (v.topLeftCell !== undefined) attrs += ` topLeftCell=\"${escapeXmlAttr(v.topLeftCell)}\"`;\n\n const inner: string[] = [];\n if (v.pane) inner.push(serializePane(v.pane));\n if (v.selections) for (const s of v.selections) inner.push(serializeSelection(s));\n if (v.rowBreaks && v.rowBreaks.length > 0) inner.push(serializePageBreaks(v.rowBreaks, 'rowBreaks'));\n if (v.colBreaks && v.colBreaks.length > 0) inner.push(serializePageBreaks(v.colBreaks, 'colBreaks'));\n if (v.pageMargins) inner.push(serializePageMargins(v.pageMargins));\n if (v.printOptions) {\n const po = serializePrintOptions(v.printOptions);\n if (po) inner.push(po);\n }\n if (v.pageSetup) {\n const ps = serializePageSetup(v.pageSetup);\n if (ps) inner.push(ps);\n }\n if (v.headerFooter) {\n const hf = serializeHeaderFooter(v.headerFooter);\n if (hf) inner.push(hf);\n }\n if (inner.length === 0) parts.push(`<customSheetView${attrs}/>`);\n else parts.push(`<customSheetView${attrs}>${inner.join('')}</customSheetView>`);\n }\n parts.push('</customSheetViews>');\n return parts.join('');\n};\n\nconst serializeOleObjects = (objs: ReadonlyArray<OleObject>): string => {\n const parts: string[] = ['<oleObjects>'];\n for (const o of objs) {\n let attrs = '';\n if (o.progId !== undefined) attrs += ` progId=\"${escapeXmlAttr(o.progId)}\"`;\n if (o.dvAspect !== undefined) attrs += ` dvAspect=\"${o.dvAspect}\"`;\n if (o.link !== undefined) attrs += ` link=\"${escapeXmlAttr(o.link)}\"`;\n if (o.oleUpdate !== undefined) attrs += ` oleUpdate=\"${o.oleUpdate}\"`;\n if (o.autoLoad !== undefined) attrs += ` autoLoad=\"${o.autoLoad ? '1' : '0'}\"`;\n attrs += ` shapeId=\"${o.shapeId}\"`;\n if (o.rId !== undefined) attrs += ` r:id=\"${escapeXmlAttr(o.rId)}\"`;\n if (!o.objectPr) {\n parts.push(`<oleObject${attrs}/>`);\n } else {\n parts.push(`<oleObject${attrs}>${serializeBodyExtraNode(o.objectPr)}</oleObject>`);\n }\n }\n parts.push('</oleObjects>');\n return parts.join('');\n};\n\nconst serializeControls = (ctrls: ReadonlyArray<FormControl>): string => {\n const parts: string[] = ['<controls>'];\n for (const c of ctrls) {\n let attrs = ` shapeId=\"${c.shapeId}\"`;\n if (c.rId !== undefined) attrs += ` r:id=\"${escapeXmlAttr(c.rId)}\"`;\n if (c.name !== undefined) attrs += ` name=\"${escapeXmlAttr(c.name)}\"`;\n if (!c.controlPr) {\n parts.push(`<control${attrs}/>`);\n } else {\n parts.push(`<control${attrs}>${serializeBodyExtraNode(c.controlPr)}</control>`);\n }\n }\n parts.push('</controls>');\n return parts.join('');\n};\n","// `xl/chartsheets/sheetN.xml` reader / writer.\n\nimport type { Color } from '../styles/colors';\nimport { escapeXmlAttr } from '../utils/escape';\nimport { OpenXmlSchemaError } from '../utils/exceptions';\nimport { REL_NS, SHEET_MAIN_NS } from '../xml/namespaces';\nimport { parseXml } from '../xml/parser';\nimport { findChild, findChildren, type XmlNode } from '../xml/tree';\nimport {\n parseHeaderFooter,\n parsePageMargins,\n parsePageSetup,\n parseWebPublishItem,\n} from '../worksheet/reader';\nimport {\n serializeHeaderFooter,\n serializePageMargins,\n serializePageSetup,\n serializeWebPublishItems,\n} from '../worksheet/writer';\nimport {\n type Chartsheet,\n type ChartsheetCustomSheetView,\n type ChartsheetDrawingHF,\n type ChartsheetProperties,\n type ChartsheetProtection,\n type ChartsheetView,\n makeChartsheet,\n} from './chartsheet';\n\nconst CHARTSHEET_TAG = `{${SHEET_MAIN_NS}}chartsheet`;\nconst SHEET_PR_TAG = `{${SHEET_MAIN_NS}}sheetPr`;\nconst SHEET_VIEWS_TAG = `{${SHEET_MAIN_NS}}sheetViews`;\nconst SHEET_VIEW_TAG = `{${SHEET_MAIN_NS}}sheetView`;\nconst SHEET_PROTECTION_TAG = `{${SHEET_MAIN_NS}}sheetProtection`;\nconst TAB_COLOR_TAG = `{${SHEET_MAIN_NS}}tabColor`;\nconst DRAWING_TAG = `{${SHEET_MAIN_NS}}drawing`;\nconst PAGE_MARGINS_TAG = `{${SHEET_MAIN_NS}}pageMargins`;\nconst PAGE_SETUP_TAG = `{${SHEET_MAIN_NS}}pageSetup`;\nconst HEADER_FOOTER_TAG = `{${SHEET_MAIN_NS}}headerFooter`;\nconst LEGACY_DRAWING_TAG = `{${SHEET_MAIN_NS}}legacyDrawing`;\nconst LEGACY_DRAWING_HF_TAG = `{${SHEET_MAIN_NS}}legacyDrawingHF`;\nconst DRAWING_HF_TAG = `{${SHEET_MAIN_NS}}drawingHF`;\nconst PICTURE_TAG = `{${SHEET_MAIN_NS}}picture`;\nconst WEB_PUBLISH_ITEMS_TAG = `{${SHEET_MAIN_NS}}webPublishItems`;\nconst WEB_PUBLISH_ITEM_TAG = `{${SHEET_MAIN_NS}}webPublishItem`;\nconst CUSTOM_SHEET_VIEWS_TAG = `{${SHEET_MAIN_NS}}customSheetViews`;\nconst CUSTOM_SHEET_VIEW_TAG = `{${SHEET_MAIN_NS}}customSheetView`;\n\nconst XML_HEADER = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n\nconst escapeAttr = escapeXmlAttr;\n\nconst parseBool = (v: string | undefined): boolean | undefined => {\n if (v === undefined) return undefined;\n if (v === '1' || v === 'true') return true;\n if (v === '0' || v === 'false') return false;\n return undefined;\n};\n\nconst parseInt10 = (v: string | undefined): number | undefined => {\n if (v === undefined) return undefined;\n const n = Number.parseInt(v, 10);\n return Number.isInteger(n) ? n : undefined;\n};\n\nconst parseSheetPr = (el: XmlNode): ChartsheetProperties | undefined => {\n const out: ChartsheetProperties = {};\n const published = parseBool(el.attrs['published']);\n if (published !== undefined) out.published = published;\n if (el.attrs['codeName'] !== undefined) out.codeName = el.attrs['codeName'];\n const tab = findChild(el, TAB_COLOR_TAG);\n if (tab) {\n const rgbRaw = tab.attrs['rgb'];\n const indexed = parseInt10(tab.attrs['indexed']);\n const theme = parseInt10(tab.attrs['theme']);\n const auto = parseBool(tab.attrs['auto']);\n const tintRaw = tab.attrs['tint'];\n const tintNum = tintRaw !== undefined ? Number.parseFloat(tintRaw) : undefined;\n const tint = tintNum !== undefined && Number.isFinite(tintNum) ? tintNum : undefined;\n const color: Color = {\n ...(rgbRaw !== undefined ? { rgb: rgbRaw.toUpperCase() } : {}),\n ...(indexed !== undefined ? { indexed } : {}),\n ...(theme !== undefined ? { theme } : {}),\n ...(auto !== undefined ? { auto } : {}),\n ...(tint !== undefined ? { tint } : {}),\n };\n if (Object.keys(color).length > 0) out.tabColor = color;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n};\n\nconst parseSheetView = (el: XmlNode): ChartsheetView => {\n const workbookViewId = parseInt10(el.attrs['workbookViewId']) ?? 0;\n const out: ChartsheetView = { workbookViewId };\n const tabSelected = parseBool(el.attrs['tabSelected']);\n if (tabSelected !== undefined) out.tabSelected = tabSelected;\n const zoomScale = parseInt10(el.attrs['zoomScale']);\n if (zoomScale !== undefined) out.zoomScale = zoomScale;\n const zoomToFit = parseBool(el.attrs['zoomToFit']);\n if (zoomToFit !== undefined) out.zoomToFit = zoomToFit;\n return out;\n};\n\nconst parseSheetProtection = (el: XmlNode): ChartsheetProtection => {\n const out: ChartsheetProtection = {};\n const content = parseBool(el.attrs['content']);\n if (content !== undefined) out.content = content;\n const objects = parseBool(el.attrs['objects']);\n if (objects !== undefined) out.objects = objects;\n if (el.attrs['algorithmName'] !== undefined) out.algorithmName = el.attrs['algorithmName'];\n if (el.attrs['hashValue'] !== undefined) out.hashValue = el.attrs['hashValue'];\n if (el.attrs['saltValue'] !== undefined) out.saltValue = el.attrs['saltValue'];\n const spinCount = parseInt10(el.attrs['spinCount']);\n if (spinCount !== undefined) out.spinCount = spinCount;\n return out;\n};\n\n/**\n * Parse a chartsheet part. Returns a Chartsheet with `title` set to the\n * provided fallback (Excel doesn't store the display name inside the chartsheet\n * part itself — it lives in workbook.xml's `<sheet name>`).\n */\nexport function parseChartsheetXml(bytes: Uint8Array | string, title: string): Chartsheet {\n const root = parseXml(bytes);\n if (root.name !== CHARTSHEET_TAG) {\n throw new OpenXmlSchemaError(`parseChartsheetXml: root is \"${root.name}\", expected ${CHARTSHEET_TAG}`);\n }\n const cs = makeChartsheet(title);\n const sheetPr = findChild(root, SHEET_PR_TAG);\n if (sheetPr) {\n const props = parseSheetPr(sheetPr);\n if (props) cs.properties = props;\n }\n const sheetViews = findChild(root, SHEET_VIEWS_TAG);\n if (sheetViews) {\n const views: ChartsheetView[] = [];\n for (const v of findChildren(sheetViews, SHEET_VIEW_TAG)) views.push(parseSheetView(v));\n if (views.length > 0) cs.views = views;\n }\n const protectionEl = findChild(root, SHEET_PROTECTION_TAG);\n if (protectionEl) cs.protection = parseSheetProtection(protectionEl);\n\n const csvEl = findChild(root, CUSTOM_SHEET_VIEWS_TAG);\n if (csvEl) {\n for (const v of findChildren(csvEl, CUSTOM_SHEET_VIEW_TAG)) {\n const view = parseChartsheetCustomSheetView(v);\n if (view) cs.customSheetViews.push(view);\n }\n }\n\n const pmEl = findChild(root, PAGE_MARGINS_TAG);\n if (pmEl) {\n const pm = parsePageMargins(pmEl);\n if (pm) cs.pageMargins = pm;\n }\n const psEl = findChild(root, PAGE_SETUP_TAG);\n if (psEl) {\n const ps = parsePageSetup(psEl);\n if (ps) cs.pageSetup = ps;\n }\n const hfEl = findChild(root, HEADER_FOOTER_TAG);\n if (hfEl) {\n const hf = parseHeaderFooter(hfEl);\n if (hf) cs.headerFooter = hf;\n }\n\n const ldEl = findChild(root, LEGACY_DRAWING_TAG);\n if (ldEl) {\n const rId = ldEl.attrs[`{${REL_NS}}id`];\n if (rId) cs.legacyDrawingRId = rId;\n }\n const ldhfEl = findChild(root, LEGACY_DRAWING_HF_TAG);\n if (ldhfEl) {\n const rId = ldhfEl.attrs[`{${REL_NS}}id`];\n if (rId) cs.legacyDrawingHFRId = rId;\n }\n const dhfEl = findChild(root, DRAWING_HF_TAG);\n if (dhfEl) {\n const dhf = parseDrawingHF(dhfEl);\n if (dhf) cs.drawingHF = dhf;\n }\n const picEl = findChild(root, PICTURE_TAG);\n if (picEl) {\n const rId = picEl.attrs[`{${REL_NS}}id`];\n if (rId) cs.backgroundPictureRId = rId;\n }\n const wpEl = findChild(root, WEB_PUBLISH_ITEMS_TAG);\n if (wpEl) {\n for (const wp of findChildren(wpEl, WEB_PUBLISH_ITEM_TAG)) {\n const item = parseWebPublishItem(wp);\n if (item) cs.webPublishItems.push(item);\n }\n }\n\n // Drawing reference — the actual rId / drawing payload is resolved by the\n // loader.\n return cs;\n}\n\nconst CSV_STATE_VALUES: ReadonlyArray<NonNullable<ChartsheetCustomSheetView['state']>> = [\n 'visible',\n 'hidden',\n 'veryHidden',\n];\n\nconst parseChartsheetCustomSheetView = (\n el: XmlNode,\n): ChartsheetCustomSheetView | undefined => {\n const guid = el.attrs['guid'];\n if (!guid) return undefined;\n const out: ChartsheetCustomSheetView = { guid };\n const scale = parseInt10(el.attrs['scale']);\n if (scale !== undefined) out.scale = scale;\n const stateRaw = el.attrs['state'];\n if (\n stateRaw &&\n CSV_STATE_VALUES.includes(stateRaw as NonNullable<ChartsheetCustomSheetView['state']>)\n ) {\n out.state = stateRaw as NonNullable<ChartsheetCustomSheetView['state']>;\n }\n const ztf = parseBool(el.attrs['zoomToFit']);\n if (ztf !== undefined) out.zoomToFit = ztf;\n const pmEl = findChild(el, PAGE_MARGINS_TAG);\n if (pmEl) {\n const pm = parsePageMargins(pmEl);\n if (pm) out.pageMargins = pm;\n }\n const psEl = findChild(el, PAGE_SETUP_TAG);\n if (psEl) {\n const ps = parsePageSetup(psEl);\n if (ps) out.pageSetup = ps;\n }\n const hfEl = findChild(el, HEADER_FOOTER_TAG);\n if (hfEl) {\n const hf = parseHeaderFooter(hfEl);\n if (hf) out.headerFooter = hf;\n }\n return out;\n};\n\nconst DRAWING_HF_INT_KEYS = [\n 'lho',\n 'cho',\n 'rho',\n 'lhe',\n 'che',\n 'rhe',\n 'lhf',\n 'chf',\n 'rhf',\n 'lfo',\n 'cfo',\n 'rfo',\n 'lfe',\n 'cfe',\n 'rfe',\n 'lff',\n 'cff',\n 'rff',\n] as const satisfies ReadonlyArray<keyof ChartsheetDrawingHF>;\n\nconst parseDrawingHF = (el: XmlNode): ChartsheetDrawingHF | undefined => {\n const rId = el.attrs[`{${REL_NS}}id`];\n if (!rId) return undefined;\n const out: ChartsheetDrawingHF = { rId };\n for (const k of DRAWING_HF_INT_KEYS) {\n const raw = el.attrs[k];\n if (raw === undefined) continue;\n const n = Number.parseInt(raw, 10);\n if (Number.isInteger(n)) out[k] = n;\n }\n return out;\n};\n\n/**\n * Optional drawing rId injected by the writer. The chartsheet part itself only\n * references the drawing by relationship id; the writer supplies the id once it\n * has registered the drawing.\n */\nexport interface ChartsheetSerializeOptions {\n drawingRId?: string;\n}\n\nconst serializeSheetPr = (p: ChartsheetProperties): string => {\n const attrs: string[] = [];\n if (p.published !== undefined) attrs.push(`published=\"${p.published ? '1' : '0'}\"`);\n if (p.codeName !== undefined) attrs.push(`codeName=\"${escapeAttr(p.codeName)}\"`);\n let tab = '';\n if (p.tabColor) {\n const c = p.tabColor;\n let tcAttrs = '';\n if (c.rgb !== undefined) tcAttrs += ` rgb=\"${escapeAttr(c.rgb)}\"`;\n if (c.indexed !== undefined) tcAttrs += ` indexed=\"${c.indexed}\"`;\n if (c.theme !== undefined) tcAttrs += ` theme=\"${c.theme}\"`;\n if (c.auto !== undefined) tcAttrs += ` auto=\"${c.auto ? '1' : '0'}\"`;\n if (c.tint !== undefined) tcAttrs += ` tint=\"${c.tint}\"`;\n tab = `<tabColor${tcAttrs}/>`;\n }\n return tab === ''\n ? `<sheetPr${attrs.length > 0 ? ` ${attrs.join(' ')}` : ''}/>`\n : `<sheetPr${attrs.length > 0 ? ` ${attrs.join(' ')}` : ''}>${tab}</sheetPr>`;\n};\n\nconst serializeSheetView = (v: ChartsheetView): string => {\n const a: string[] = [`workbookViewId=\"${v.workbookViewId}\"`];\n if (v.tabSelected !== undefined) a.push(`tabSelected=\"${v.tabSelected ? '1' : '0'}\"`);\n if (v.zoomScale !== undefined) a.push(`zoomScale=\"${v.zoomScale}\"`);\n if (v.zoomToFit !== undefined) a.push(`zoomToFit=\"${v.zoomToFit ? '1' : '0'}\"`);\n return `<sheetView ${a.join(' ')}/>`;\n};\n\nconst serializeSheetProtection = (p: ChartsheetProtection): string => {\n const a: string[] = [];\n if (p.content !== undefined) a.push(`content=\"${p.content ? '1' : '0'}\"`);\n if (p.objects !== undefined) a.push(`objects=\"${p.objects ? '1' : '0'}\"`);\n if (p.algorithmName !== undefined) a.push(`algorithmName=\"${escapeAttr(p.algorithmName)}\"`);\n if (p.hashValue !== undefined) a.push(`hashValue=\"${escapeAttr(p.hashValue)}\"`);\n if (p.saltValue !== undefined) a.push(`saltValue=\"${escapeAttr(p.saltValue)}\"`);\n if (p.spinCount !== undefined) a.push(`spinCount=\"${p.spinCount}\"`);\n return `<sheetProtection${a.length > 0 ? ` ${a.join(' ')}` : ''}/>`;\n};\n\nexport function serializeChartsheet(cs: Chartsheet, opts: ChartsheetSerializeOptions = {}): string {\n const parts: string[] = [XML_HEADER, `<chartsheet xmlns=\"${SHEET_MAIN_NS}\" xmlns:r=\"${REL_NS}\">`];\n if (cs.properties) parts.push(serializeSheetPr(cs.properties));\n parts.push('<sheetViews>');\n for (const v of cs.views) parts.push(serializeSheetView(v));\n parts.push('</sheetViews>');\n if (cs.protection) parts.push(serializeSheetProtection(cs.protection));\n if (cs.customSheetViews.length > 0) parts.push(serializeChartsheetCustomSheetViews(cs.customSheetViews));\n if (cs.pageMargins) parts.push(serializePageMargins(cs.pageMargins));\n if (cs.pageSetup) {\n const ps = serializePageSetup(cs.pageSetup);\n if (ps) parts.push(ps);\n }\n if (cs.headerFooter) {\n const hf = serializeHeaderFooter(cs.headerFooter);\n if (hf) parts.push(hf);\n }\n if (opts.drawingRId !== undefined) {\n parts.push(`<drawing r:id=\"${escapeAttr(opts.drawingRId)}\"/>`);\n }\n if (cs.legacyDrawingRId !== undefined) {\n parts.push(`<legacyDrawing r:id=\"${escapeAttr(cs.legacyDrawingRId)}\"/>`);\n }\n if (cs.legacyDrawingHFRId !== undefined) {\n parts.push(`<legacyDrawingHF r:id=\"${escapeAttr(cs.legacyDrawingHFRId)}\"/>`);\n }\n if (cs.drawingHF) {\n parts.push(serializeDrawingHF(cs.drawingHF));\n }\n if (cs.backgroundPictureRId !== undefined) {\n parts.push(`<picture r:id=\"${escapeAttr(cs.backgroundPictureRId)}\"/>`);\n }\n if (cs.webPublishItems.length > 0) parts.push(serializeWebPublishItems(cs.webPublishItems));\n parts.push('</chartsheet>');\n return parts.join('');\n}\n\nconst serializeChartsheetCustomSheetViews = (\n views: ReadonlyArray<ChartsheetCustomSheetView>,\n): string => {\n const parts: string[] = ['<customSheetViews>'];\n for (const v of views) {\n let attrs = ` guid=\"${escapeAttr(v.guid)}\"`;\n if (v.scale !== undefined) attrs += ` scale=\"${v.scale}\"`;\n if (v.state !== undefined) attrs += ` state=\"${v.state}\"`;\n if (v.zoomToFit !== undefined) attrs += ` zoomToFit=\"${v.zoomToFit ? '1' : '0'}\"`;\n\n const inner: string[] = [];\n if (v.pageMargins) inner.push(serializePageMargins(v.pageMargins));\n if (v.pageSetup) {\n const ps = serializePageSetup(v.pageSetup);\n if (ps) inner.push(ps);\n }\n if (v.headerFooter) {\n const hf = serializeHeaderFooter(v.headerFooter);\n if (hf) inner.push(hf);\n }\n if (inner.length === 0) parts.push(`<customSheetView${attrs}/>`);\n else parts.push(`<customSheetView${attrs}>${inner.join('')}</customSheetView>`);\n }\n parts.push('</customSheetViews>');\n return parts.join('');\n};\n\nconst serializeDrawingHF = (dhf: ChartsheetDrawingHF): string => {\n let attrs = ` r:id=\"${escapeAttr(dhf.rId)}\"`;\n for (const k of DRAWING_HF_INT_KEYS) {\n const v = dhf[k];\n if (v !== undefined) attrs += ` ${k}=\"${v}\"`;\n }\n return `<drawingHF${attrs}/>`;\n};\n\nexport function chartsheetToBytes(cs: Chartsheet, opts: ChartsheetSerializeOptions = {}): Uint8Array {\n return new TextEncoder().encode(serializeChartsheet(cs, opts));\n}\n\nvoid DRAWING_TAG;\n","// `xl/drawings/drawingN.xml` reader/writer. Stage-1 supports anchor\n// envelope round-trip for the chart variant; picture / shape / connector /\n// group remain unsupported placeholders for later iterations.\n\nimport { escapeXmlAttr } from '../utils/escape';\nimport { OpenXmlSchemaError } from '../utils/exceptions';\nimport { DRAWING_NS, REL_NS, SHEET_DRAWING_NS } from '../xml/namespaces';\nimport { parseXml } from '../xml/parser';\nimport { findChild, type XmlNode } from '../xml/tree';\nimport type { AnchorMarker, DrawingAnchor, Point2D, PositiveSize2D } from './anchor';\nimport { parseShapeProperties, serializeShapeProperties } from './dml/dml-xml';\nimport { type ChartReference, type Drawing, type DrawingItem, makeDrawing, type PictureReference } from './drawing';\n\nconst WS_DRAWING_TAG = `{${SHEET_DRAWING_NS}}wsDr`;\nconst ABSOLUTE_ANCHOR_TAG = `{${SHEET_DRAWING_NS}}absoluteAnchor`;\nconst ONE_CELL_ANCHOR_TAG = `{${SHEET_DRAWING_NS}}oneCellAnchor`;\nconst TWO_CELL_ANCHOR_TAG = `{${SHEET_DRAWING_NS}}twoCellAnchor`;\nconst FROM_TAG = `{${SHEET_DRAWING_NS}}from`;\nconst TO_TAG = `{${SHEET_DRAWING_NS}}to`;\nconst POS_TAG = `{${SHEET_DRAWING_NS}}pos`;\nconst EXT_TAG = `{${SHEET_DRAWING_NS}}ext`;\nconst COL_TAG = `{${SHEET_DRAWING_NS}}col`;\nconst COLOFF_TAG = `{${SHEET_DRAWING_NS}}colOff`;\nconst ROW_TAG = `{${SHEET_DRAWING_NS}}row`;\nconst ROWOFF_TAG = `{${SHEET_DRAWING_NS}}rowOff`;\nconst GRAPHIC_FRAME_TAG = `{${SHEET_DRAWING_NS}}graphicFrame`;\nconst CLIENT_DATA_TAG = `{${SHEET_DRAWING_NS}}clientData`;\n\nconst A_GRAPHIC_TAG = '{http://schemas.openxmlformats.org/drawingml/2006/main}graphic';\nconst A_GRAPHIC_DATA_TAG = '{http://schemas.openxmlformats.org/drawingml/2006/main}graphicData';\nconst C_CHART_TAG = '{http://schemas.openxmlformats.org/drawingml/2006/chart}chart';\nconst CX_CHART_TAG = '{http://schemas.microsoft.com/office/drawing/2014/chartex}chart';\nconst PIC_TAG = `{${SHEET_DRAWING_NS}}pic`;\nconst PIC_NV_PR_TAG = `{${SHEET_DRAWING_NS}}nvPicPr`;\nconst C_NV_PR_TAG = `{${SHEET_DRAWING_NS}}cNvPr`;\nconst BLIP_FILL_TAG = `{${SHEET_DRAWING_NS}}blipFill`;\nconst PIC_SP_PR_TAG = `{${SHEET_DRAWING_NS}}spPr`;\nconst A_BLIP_TAG = `{${DRAWING_NS}}blip`;\n\nconst XML_HEADER = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\nconst escapeAttr = escapeXmlAttr;\n\nconst parseIntChild = (parent: XmlNode, tag: string): number | undefined => {\n const child = findChild(parent, tag);\n if (!child) return undefined;\n const n = Number.parseInt(child.text ?? '', 10);\n return Number.isInteger(n) ? n : undefined;\n};\n\nconst parseAnchorMarker = (node: XmlNode): AnchorMarker | undefined => {\n const col = parseIntChild(node, COL_TAG);\n const colOff = parseIntChild(node, COLOFF_TAG);\n const row = parseIntChild(node, ROW_TAG);\n const rowOff = parseIntChild(node, ROWOFF_TAG);\n if (col === undefined || row === undefined) return undefined;\n return { col, colOff: colOff ?? 0, row, rowOff: rowOff ?? 0 };\n};\n\nconst parsePoint2D = (node: XmlNode): Point2D | undefined => {\n const x = node.attrs['x'];\n const y = node.attrs['y'];\n if (!x || !y) return undefined;\n const xn = Number.parseInt(x, 10);\n const yn = Number.parseInt(y, 10);\n if (!Number.isFinite(xn) || !Number.isFinite(yn)) return undefined;\n return { x: xn, y: yn };\n};\n\nconst parsePositiveSize2D = (node: XmlNode): PositiveSize2D | undefined => {\n const cx = node.attrs['cx'];\n const cy = node.attrs['cy'];\n if (!cx || !cy) return undefined;\n const cxn = Number.parseInt(cx, 10);\n const cyn = Number.parseInt(cy, 10);\n if (!Number.isFinite(cxn) || !Number.isFinite(cyn)) return undefined;\n return { cx: cxn, cy: cyn };\n};\n\nconst parsePictureReference = (node: XmlNode): PictureReference | undefined => {\n const pic = findChild(node, PIC_TAG);\n if (!pic) return undefined;\n const out: PictureReference = {};\n const nvPicPr = findChild(pic, PIC_NV_PR_TAG);\n if (nvPicPr) {\n const cNvPr = findChild(nvPicPr, C_NV_PR_TAG);\n if (cNvPr) {\n if (cNvPr.attrs['name'] !== undefined) out.name = cNvPr.attrs['name'];\n if (cNvPr.attrs['descr'] !== undefined) out.descr = cNvPr.attrs['descr'];\n const hiddenRaw = cNvPr.attrs['hidden'];\n if (hiddenRaw === '1' || hiddenRaw === 'true') out.hidden = true;\n }\n }\n const blipFill = findChild(pic, BLIP_FILL_TAG);\n if (blipFill) {\n const blip = findChild(blipFill, A_BLIP_TAG);\n const embed = blip?.attrs[`{${REL_NS}}embed`];\n if (embed) out.rId = embed;\n }\n const spPrEl = findChild(pic, PIC_SP_PR_TAG);\n if (spPrEl) out.spPr = parseShapeProperties(spPrEl);\n return out;\n};\n\nconst parseChartReference = (node: XmlNode): ChartReference | undefined => {\n const graphic = findChild(node, GRAPHIC_FRAME_TAG);\n if (!graphic) return undefined;\n const aGraphic = findChild(graphic, A_GRAPHIC_TAG);\n const aGraphicData = aGraphic ? findChild(aGraphic, A_GRAPHIC_DATA_TAG) : undefined;\n if (!aGraphicData) return undefined;\n // Chart references use either `<c:chart>` (legacy) or `<cx:chart>`\n // (chartex). Both carry the rels rId on the element.\n const cChart = findChild(aGraphicData, C_CHART_TAG);\n if (cChart) {\n const rId = cChart.attrs[`{${REL_NS}}id`];\n return rId !== undefined ? { rId } : {};\n }\n const cxChart = findChild(aGraphicData, CX_CHART_TAG);\n if (cxChart) {\n const rId = cxChart.attrs[`{${REL_NS}}id`];\n return rId !== undefined ? { rId, isCx: true } : { isCx: true };\n }\n return undefined;\n};\n\nconst parseAnchor = (node: XmlNode): DrawingItem | undefined => {\n let anchor: DrawingAnchor | undefined;\n if (node.name === ABSOLUTE_ANCHOR_TAG) {\n const pos = findChild(node, POS_TAG);\n const ext = findChild(node, EXT_TAG);\n if (!pos || !ext) return undefined;\n const p = parsePoint2D(pos);\n const e = parsePositiveSize2D(ext);\n if (!p || !e) return undefined;\n anchor = { kind: 'absolute', pos: p, ext: e };\n } else if (node.name === ONE_CELL_ANCHOR_TAG) {\n const fromEl = findChild(node, FROM_TAG);\n const ext = findChild(node, EXT_TAG);\n const from = fromEl ? parseAnchorMarker(fromEl) : undefined;\n const e = ext ? parsePositiveSize2D(ext) : undefined;\n if (!from || !e) return undefined;\n anchor = { kind: 'oneCell', from, ext: e };\n } else if (node.name === TWO_CELL_ANCHOR_TAG) {\n const fromEl = findChild(node, FROM_TAG);\n const toEl = findChild(node, TO_TAG);\n const from = fromEl ? parseAnchorMarker(fromEl) : undefined;\n const to = toEl ? parseAnchorMarker(toEl) : undefined;\n if (!from || !to) return undefined;\n const editAsRaw = node.attrs['editAs'];\n const validEditAs = editAsRaw === 'twoCell' || editAsRaw === 'oneCell' || editAsRaw === 'absolute';\n anchor = {\n kind: 'twoCell',\n from,\n to,\n ...(validEditAs ? { editAs: editAsRaw as 'twoCell' | 'oneCell' | 'absolute' } : {}),\n };\n } else {\n return undefined;\n }\n\n // Detect content kind in priority order: chart graphic frame first,\n // then picture; everything else is tagged \"unsupported\".\n const chart = parseChartReference(node);\n if (chart) {\n return { anchor, content: { kind: 'chart', chart } };\n }\n const picture = parsePictureReference(node);\n if (picture) {\n return { anchor, content: { kind: 'picture', picture } };\n }\n // Find the first child that isn't a marker/pos/ext/clientData.\n const skip = new Set([FROM_TAG, TO_TAG, POS_TAG, EXT_TAG, CLIENT_DATA_TAG]);\n for (const child of node.children) {\n if (skip.has(child.name)) continue;\n return { anchor, content: { kind: 'unsupported', rawTag: child.name } };\n }\n // Bare anchor with no content — record as unsupported with empty tag.\n return { anchor, content: { kind: 'unsupported', rawTag: '' } };\n};\n\n/** Parse a `xl/drawings/drawingN.xml` payload into a Drawing object. */\nexport function parseDrawingXml(bytes: Uint8Array | string): Drawing {\n const root = parseXml(bytes);\n if (root.name !== WS_DRAWING_TAG) {\n throw new OpenXmlSchemaError(`parseDrawingXml: root is \"${root.name}\", expected wsDr`);\n }\n const items: DrawingItem[] = [];\n // Document order matters — anchors must round-trip in their source\n // sequence regardless of their kind.\n for (const child of root.children) {\n if (child.name !== ABSOLUTE_ANCHOR_TAG && child.name !== ONE_CELL_ANCHOR_TAG && child.name !== TWO_CELL_ANCHOR_TAG)\n continue;\n const item = parseAnchor(child);\n if (item) items.push(item);\n }\n return makeDrawing(items);\n}\n\nconst serializeMarker = (tag: string, m: AnchorMarker): string =>\n `<xdr:${tag}><xdr:col>${m.col}</xdr:col><xdr:colOff>${m.colOff}</xdr:colOff><xdr:row>${m.row}</xdr:row><xdr:rowOff>${m.rowOff}</xdr:rowOff></xdr:${tag}>`;\n\nconst serializePictureFrame = (picture: PictureReference, anchorIdx: number): string => {\n const rId = picture.rId ?? '';\n const idAttr = `id=\"${anchorIdx + 2}\"`;\n const nameAttr = `name=\"${escapeAttr(picture.name ?? `Picture ${anchorIdx + 1}`)}\"`;\n const descrAttr = picture.descr !== undefined ? ` descr=\"${escapeAttr(picture.descr)}\"` : '';\n const hiddenAttr = picture.hidden ? ' hidden=\"1\"' : '';\n const spPr = picture.spPr\n ? serializeShapeProperties(picture.spPr, 'xdr:spPr')\n : '<xdr:spPr><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></xdr:spPr>';\n return [\n '<xdr:pic>',\n '<xdr:nvPicPr>',\n `<xdr:cNvPr ${idAttr} ${nameAttr}${descrAttr}${hiddenAttr}/>`,\n '<xdr:cNvPicPr/>',\n '</xdr:nvPicPr>',\n '<xdr:blipFill>',\n `<a:blip xmlns:r=\"${REL_NS}\" r:embed=\"${escapeAttr(rId)}\"/>`,\n '<a:stretch><a:fillRect/></a:stretch>',\n '</xdr:blipFill>',\n spPr,\n '</xdr:pic>',\n ].join('');\n};\n\nconst serializeChartGraphicFrame = (\n chart: ChartReference,\n anchorIdx: number,\n ext: { cx: number; cy: number },\n): string => {\n const rId = chart.rId ?? '';\n const isCx = chart.isCx === true;\n // chartex (`cx:`) and the legacy ECMA-376 (`c:`) chart kinds use\n // different `<a:graphicData uri>` values *and* different inline\n // chart-reference element namespaces. Mismatched URIs make Excel\n // reject the workbook on open.\n const uri = isCx\n ? 'http://schemas.microsoft.com/office/drawing/2014/chartex'\n : 'http://schemas.openxmlformats.org/drawingml/2006/chart';\n const chartEl = isCx\n ? `<cx:chart xmlns:cx=\"http://schemas.microsoft.com/office/drawing/2014/chartex\" xmlns:r=\"${REL_NS}\" r:id=\"${escapeAttr(rId)}\"/>`\n : `<c:chart xmlns:c=\"http://schemas.openxmlformats.org/drawingml/2006/chart\" xmlns:r=\"${REL_NS}\" r:id=\"${escapeAttr(rId)}\"/>`;\n return [\n '<xdr:graphicFrame>',\n `<xdr:nvGraphicFramePr><xdr:cNvPr id=\"${anchorIdx + 2}\" name=\"Chart ${anchorIdx + 1}\"/><xdr:cNvGraphicFramePr/></xdr:nvGraphicFramePr>`,\n // The graphicFrame's xfrm carries the chart's actual on-sheet size.\n // Some Excel versions render a zero-size frame as a hidden / 0-pixel\n // element, which is why earlier outputs showed a chart-less workbook.\n `<xdr:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"${ext.cx}\" cy=\"${ext.cy}\"/></xdr:xfrm>`,\n `<a:graphic><a:graphicData uri=\"${uri}\">`,\n chartEl,\n '</a:graphicData></a:graphic>',\n '</xdr:graphicFrame>',\n ].join('');\n};\n\nconst serializeAnchor = (item: DrawingItem, idx: number): string => {\n const a = item.anchor;\n let body = '';\n // Default size for twoCellAnchor where the from→to delta is unknown at this\n // layer: Excel auto-resizes graphicFrames to the cell range so any non-zero\n // value is fine. 6\"×4\" matches openpyxl's default chart frame.\n let chartExt: { cx: number; cy: number } = { cx: 5486400, cy: 3200400 };\n if (a.kind === 'absolute') {\n body = `<xdr:pos x=\"${a.pos.x}\" y=\"${a.pos.y}\"/><xdr:ext cx=\"${a.ext.cx}\" cy=\"${a.ext.cy}\"/>`;\n chartExt = a.ext;\n } else if (a.kind === 'oneCell') {\n body = `${serializeMarker('from', a.from)}<xdr:ext cx=\"${a.ext.cx}\" cy=\"${a.ext.cy}\"/>`;\n chartExt = a.ext;\n } else {\n body = `${serializeMarker('from', a.from)}${serializeMarker('to', a.to)}`;\n }\n let content = '';\n if (item.content.kind === 'chart') {\n content = serializeChartGraphicFrame(item.content.chart, idx, chartExt);\n } else if (item.content.kind === 'picture') {\n content = serializePictureFrame(item.content.picture, idx);\n } else {\n // Unsupported content: emit a graphicFrame with an empty chart ref so\n // Excel doesn't choke. Re-emitting unknown content verbatim is the\n // job of a later iteration (we don't carry the original XmlNode tree\n // through the data model in stage-1).\n content = serializeChartGraphicFrame({}, idx, chartExt);\n }\n const editAs = a.kind === 'twoCell' && a.editAs ? ` editAs=\"${a.editAs}\"` : '';\n const tag = a.kind === 'absolute' ? 'absoluteAnchor' : a.kind === 'oneCell' ? 'oneCellAnchor' : 'twoCellAnchor';\n return `<xdr:${tag}${editAs}>${body}${content}<xdr:clientData/></xdr:${tag}>`;\n};\n\n/** Serialise a Drawing to its `xl/drawings/drawingN.xml` payload. */\nexport function drawingToBytes(drawing: Drawing): Uint8Array {\n return new TextEncoder().encode(serializeDrawing(drawing));\n}\n\nfunction serializeDrawing(drawing: Drawing): string {\n const parts: string[] = [\n XML_HEADER,\n `<xdr:wsDr xmlns:xdr=\"${SHEET_DRAWING_NS}\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">`,\n ];\n for (let i = 0; i < drawing.items.length; i++) {\n const item = drawing.items[i];\n if (item) parts.push(serializeAnchor(item, i));\n }\n parts.push('</xdr:wsDr>');\n return parts.join('');\n}\n","// XML mapping for Alignment.\n\nimport { defineSchema, type Schema } from '../schema/core';\nimport { SHEET_MAIN_NS } from '../xml/namespaces';\nimport type { Alignment } from './alignment';\nimport { HORIZONTAL_ALIGNMENTS, VERTICAL_ALIGNMENTS } from './alignment';\n\nconst HORIZONTAL_VALUES: readonly string[] = HORIZONTAL_ALIGNMENTS;\nconst VERTICAL_VALUES: readonly string[] = VERTICAL_ALIGNMENTS;\n\nexport const AlignmentSchema: Schema<Alignment> = defineSchema<Alignment>({\n tagname: 'alignment',\n xmlNs: SHEET_MAIN_NS,\n attrs: {\n horizontal: { kind: 'enum', values: HORIZONTAL_VALUES, optional: true },\n vertical: { kind: 'enum', values: VERTICAL_VALUES, optional: true },\n // The makeAlignment constructor enforces the 0..180 ∪ {255} gap; the\n // schema's range check stays loose to avoid rejecting writers that\n // emit 255 for vertical-stacked text.\n textRotation: { kind: 'int', optional: true, min: 0, max: 255 },\n wrapText: { kind: 'bool', optional: true },\n shrinkToFit: { kind: 'bool', optional: true },\n indent: { kind: 'float', optional: true, min: 0, max: 255 },\n relativeIndent: { kind: 'float', optional: true, min: -255, max: 255 },\n justifyLastLine: { kind: 'bool', optional: true },\n readingOrder: { kind: 'float', optional: true, min: 0 },\n },\n elements: [],\n});\n","// XML mapping for Color. Lives in a sibling file so a build path that only\n// reads / mutates colour values without serialising them can drop the schema\n// entirely.\n\nimport { defineSchema, type Schema } from '../schema/core';\nimport { SHEET_MAIN_NS } from '../xml/namespaces';\nimport type { Color } from './colors';\n\nexport const ColorSchema: Schema<Color> = defineSchema<Color>({\n tagname: 'color',\n xmlNs: SHEET_MAIN_NS,\n attrs: {\n rgb: { kind: 'string', optional: true },\n // ECMA-376 §18.8.27 documents indices 0..63 + 64 (system fg) + 65 (system\n // bg), but Excel emits higher indices (81 = light text on dark background\n // among others) — keep the lower bound and stay permissive on the upper\n // end.\n indexed: { kind: 'int', optional: true, min: 0 },\n theme: { kind: 'int', optional: true, min: 0 },\n auto: { kind: 'bool', optional: true },\n tint: { kind: 'float', optional: true, min: -1, max: 1 },\n },\n elements: [],\n});\n","// XML mapping for Border + Side. Sibling file so non-serialising\n// callers can avoid pulling in the schema layer.\n\nimport { defineSchema, type Schema } from '../schema/core';\nimport { SHEET_MAIN_NS } from '../xml/namespaces';\nimport type { Border, Side } from './borders';\nimport { SIDE_STYLES } from './borders';\nimport { ColorSchema } from './colors.schema';\n\n// Schema enums require `readonly string[]`; SideStyle is a string-literal\n// subset, so a single widening cast gets us through TS' invariance check\n// without leaking any new type machinery into call sites.\nconst SIDE_STYLE_VALUES: readonly string[] = SIDE_STYLES;\n\nexport const SideSchema: Schema<Side> = defineSchema<Side>({\n tagname: 'side',\n xmlNs: SHEET_MAIN_NS,\n attrs: {\n style: { kind: 'enum', values: SIDE_STYLE_VALUES, optional: true },\n },\n elements: [{ kind: 'object', key: 'color', schema: () => ColorSchema, optional: true }],\n});\n\nexport const BorderSchema: Schema<Border> = defineSchema<Border>({\n tagname: 'border',\n xmlNs: SHEET_MAIN_NS,\n attrs: {\n diagonalUp: { kind: 'bool', optional: true },\n diagonalDown: { kind: 'bool', optional: true },\n outline: { kind: 'bool', optional: true },\n },\n elements: [\n { kind: 'object', key: 'left', schema: () => SideSchema, optional: true },\n { kind: 'object', key: 'right', schema: () => SideSchema, optional: true },\n { kind: 'object', key: 'top', schema: () => SideSchema, optional: true },\n { kind: 'object', key: 'bottom', schema: () => SideSchema, optional: true },\n { kind: 'object', key: 'diagonal', schema: () => SideSchema, optional: true },\n { kind: 'object', key: 'vertical', schema: () => SideSchema, optional: true },\n { kind: 'object', key: 'horizontal', schema: () => SideSchema, optional: true },\n ],\n});\n","// XML mapping for Fill. Pattern and gradient variants have their own\n// Schema; the wrapper `<fill>` element hand-rolls the\n// discriminated-union read/write since the schema layer doesn't yet\n// have a tagname-discriminated union element kind.\n\nimport { defineSchema, type Schema } from '../schema/core';\nimport { fromTree, toTree } from '../schema/serialize';\nimport { OpenXmlSchemaError } from '../utils/exceptions';\nimport { qname, SHEET_MAIN_NS } from '../xml/namespaces';\nimport { el, type XmlNode } from '../xml/tree';\nimport { ColorSchema } from './colors.schema';\nimport { type Fill, type GradientFill, type GradientStop, PATTERN_TYPES, type PatternFill } from './fills';\n\nconst PATTERN_TYPE_VALUES: readonly string[] = PATTERN_TYPES;\n\nconst StopSchema: Schema<GradientStop> = defineSchema<GradientStop>({\n tagname: 'stop',\n xmlNs: SHEET_MAIN_NS,\n attrs: {\n position: { kind: 'float', min: 0, max: 1 },\n },\n elements: [{ kind: 'object', key: 'color', schema: () => ColorSchema }],\n});\n\nconst PatternFillSchema: Schema<PatternFill> = defineSchema<PatternFill>({\n tagname: 'patternFill',\n xmlNs: SHEET_MAIN_NS,\n // `kind` is internal-only and never emitted; postParse re-adds it on read.\n attrs: {\n patternType: { kind: 'enum', values: PATTERN_TYPE_VALUES, optional: true },\n },\n elements: [\n { kind: 'object', key: 'fgColor', schema: () => ColorSchema, optional: true },\n { kind: 'object', key: 'bgColor', schema: () => ColorSchema, optional: true },\n ],\n postParse: (v) => ({ ...v, kind: 'pattern' }),\n});\n\nconst GradientFillSchema: Schema<GradientFill> = defineSchema<GradientFill>({\n tagname: 'gradientFill',\n xmlNs: SHEET_MAIN_NS,\n attrs: {\n type: { kind: 'enum', values: ['linear', 'path'], optional: true, default: 'linear' },\n degree: { kind: 'float', optional: true },\n left: { kind: 'float', optional: true },\n right: { kind: 'float', optional: true },\n top: { kind: 'float', optional: true },\n bottom: { kind: 'float', optional: true },\n },\n elements: [\n {\n kind: 'sequence',\n key: 'stops',\n itemName: 'stop',\n itemNs: SHEET_MAIN_NS,\n itemSchema: () => StopSchema,\n },\n ],\n postParse: (v) => ({ ...v, kind: 'gradient' }),\n});\n\n// ---- <fill> wrapper round-trip --------------------------------------------\n\nconst FILL_TAG = qname(SHEET_MAIN_NS, 'fill');\nconst PATTERN_FILL_TAG = qname(SHEET_MAIN_NS, 'patternFill');\nconst GRADIENT_FILL_TAG = qname(SHEET_MAIN_NS, 'gradientFill');\n\n/** Build the `<fill>…</fill>` envelope around either variant. */\nexport function fillToTree(fill: Fill): XmlNode {\n const inner = fill.kind === 'gradient' ? toTree(fill, GradientFillSchema) : toTree(fill, PatternFillSchema);\n return el(FILL_TAG, {}, [inner]);\n}\n\n/** Inverse of {@link fillToTree}. Reads `<fill>` and dispatches on the child tag. */\nexport function fillFromTree(node: XmlNode): Fill {\n if (node.name !== FILL_TAG) {\n throw new OpenXmlSchemaError(`fillFromTree: expected <fill>, got \"${node.name}\"`);\n }\n const child = node.children[0];\n if (child === undefined) {\n throw new OpenXmlSchemaError('fillFromTree: <fill> has no child element');\n }\n if (child.name === PATTERN_FILL_TAG) return fromTree(child, PatternFillSchema);\n if (child.name === GRADIENT_FILL_TAG) return fromTree(child, GradientFillSchema);\n throw new OpenXmlSchemaError(`fillFromTree: unknown Fill variant \"${child.name}\"`);\n}\n","// XML mapping for Font.\n\nimport { defineSchema, type Schema } from '../schema/core';\nimport { SHEET_MAIN_NS } from '../xml/namespaces';\nimport { ColorSchema } from './colors.schema';\nimport type { Font } from './fonts';\nimport { FONT_SCHEMES, UNDERLINE_STYLES, VERT_ALIGNS } from './fonts';\n\nconst UNDERLINE_VALUES: readonly string[] = UNDERLINE_STYLES;\nconst VERT_VALUES: readonly string[] = VERT_ALIGNS;\nconst SCHEME_VALUES: readonly string[] = FONT_SCHEMES;\n\nexport const FontSchema: Schema<Font> = defineSchema<Font>({\n tagname: 'font',\n xmlNs: SHEET_MAIN_NS,\n attrs: {},\n // Element order matches openpyxl's __elements__ tuple for byte-level\n // parity with the typical Excel emit order.\n elements: [\n { kind: 'nested', key: 'name', xmlNs: SHEET_MAIN_NS, primitive: 'string', optional: true },\n { kind: 'nested', key: 'charset', xmlNs: SHEET_MAIN_NS, primitive: 'int', optional: true },\n { kind: 'nested', key: 'family', xmlNs: SHEET_MAIN_NS, primitive: 'int', min: 0, max: 14, optional: true },\n { kind: 'empty', key: 'bold', name: 'b', xmlNs: SHEET_MAIN_NS },\n { kind: 'empty', key: 'italic', name: 'i', xmlNs: SHEET_MAIN_NS },\n { kind: 'empty', key: 'strike', xmlNs: SHEET_MAIN_NS },\n { kind: 'empty', key: 'outline', xmlNs: SHEET_MAIN_NS },\n { kind: 'empty', key: 'shadow', xmlNs: SHEET_MAIN_NS },\n { kind: 'empty', key: 'condense', xmlNs: SHEET_MAIN_NS },\n { kind: 'empty', key: 'extend', xmlNs: SHEET_MAIN_NS },\n { kind: 'object', key: 'color', schema: () => ColorSchema, optional: true },\n { kind: 'nested', key: 'size', name: 'sz', xmlNs: SHEET_MAIN_NS, primitive: 'float', optional: true },\n {\n // ECMA-376 §18.4.13: bare `<u/>` (no @val) means underline=single.\n // Real Excel emits this for hyperlink fonts.\n kind: 'nested',\n key: 'underline',\n name: 'u',\n xmlNs: SHEET_MAIN_NS,\n primitive: 'enum',\n values: UNDERLINE_VALUES,\n optional: true,\n default: 'single',\n },\n {\n kind: 'nested',\n key: 'vertAlign',\n xmlNs: SHEET_MAIN_NS,\n primitive: 'enum',\n values: VERT_VALUES,\n optional: true,\n },\n {\n kind: 'nested',\n key: 'scheme',\n xmlNs: SHEET_MAIN_NS,\n primitive: 'enum',\n values: SCHEME_VALUES,\n optional: true,\n },\n ],\n});\n","// XML mapping for NumberFormat (the per-style <numFmt> element under\n// the stylesheet's <numFmts> sequence).\n\nimport { defineSchema, type Schema } from '../schema/core';\nimport { SHEET_MAIN_NS } from '../xml/namespaces';\nimport type { NumberFormat } from './numbers';\n\nexport const NumberFormatSchema: Schema<NumberFormat> = defineSchema<NumberFormat>({\n tagname: 'numFmt',\n xmlNs: SHEET_MAIN_NS,\n attrs: {\n numFmtId: { kind: 'int', min: 0 },\n formatCode: { kind: 'string' },\n },\n elements: [],\n});\n","// XML mapping for Protection.\n\nimport { defineSchema, type Schema } from '../schema/core';\nimport { SHEET_MAIN_NS } from '../xml/namespaces';\nimport type { Protection } from './protection';\n\nexport const ProtectionSchema: Schema<Protection> = defineSchema<Protection>({\n tagname: 'protection',\n xmlNs: SHEET_MAIN_NS,\n attrs: {\n locked: { kind: 'bool', optional: true },\n hidden: { kind: 'bool', optional: true },\n },\n elements: [],\n});\n","// xl/commentsN.xml read/write.\n\nimport { escapeXmlAttr, escapeXmlText } from '../utils/escape';\nimport { OpenXmlSchemaError } from '../utils/exceptions';\nimport { SHEET_MAIN_NS } from '../xml/namespaces';\nimport { parseXml } from '../xml/parser';\nimport { findChild, findChildren, type XmlNode } from '../xml/tree';\nimport { coordinateToTuple } from '../utils/coordinate';\nimport type { LegacyComment } from './comments';\nimport { makeLegacyComment } from './comments';\n\nconst COMMENTS_TAG = `{${SHEET_MAIN_NS}}comments`;\nconst AUTHORS_TAG = `{${SHEET_MAIN_NS}}authors`;\nconst AUTHOR_TAG = `{${SHEET_MAIN_NS}}author`;\nconst COMMENT_LIST_TAG = `{${SHEET_MAIN_NS}}commentList`;\nconst COMMENT_TAG = `{${SHEET_MAIN_NS}}comment`;\nconst TEXT_TAG = `{${SHEET_MAIN_NS}}text`;\nconst T_TAG = `{${SHEET_MAIN_NS}}t`;\nconst R_TAG = `{${SHEET_MAIN_NS}}r`;\n\nconst XML_HEADER = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n\nconst escapeText = escapeXmlText;\nconst escapeAttr = escapeXmlAttr;\n\n/** Concatenate every `<t>` text node found inside a `<text>` body. */\nconst collectText = (textEl: XmlNode): string => {\n const direct = findChild(textEl, T_TAG);\n if (direct) return direct.text ?? '';\n let out = '';\n for (const child of textEl.children) {\n if (child.name === R_TAG) {\n const t = findChild(child, T_TAG);\n if (t?.text) out += t.text;\n } else if (child.name === T_TAG && child.text) {\n out += child.text;\n }\n }\n return out;\n};\n\n/** Parse a `xl/commentsN.xml` payload into a flat LegacyComment list. */\nexport function parseCommentsXml(bytes: Uint8Array | string): LegacyComment[] {\n const root = parseXml(bytes);\n if (root.name !== COMMENTS_TAG) {\n throw new OpenXmlSchemaError(`parseCommentsXml: root is \"${root.name}\", expected comments`);\n }\n const authors: string[] = [];\n const authorsEl = findChild(root, AUTHORS_TAG);\n if (authorsEl) {\n for (const a of findChildren(authorsEl, AUTHOR_TAG)) authors.push(a.text ?? '');\n }\n const out: LegacyComment[] = [];\n const listEl = findChild(root, COMMENT_LIST_TAG);\n if (!listEl) return out;\n for (const c of findChildren(listEl, COMMENT_TAG)) {\n const ref = c.attrs['ref'];\n const authorIdRaw = c.attrs['authorId'];\n if (!ref) throw new OpenXmlSchemaError('parseCommentsXml: <comment> missing @ref');\n const authorId = authorIdRaw !== undefined ? Number.parseInt(authorIdRaw, 10) : 0;\n const author = authors[authorId] ?? '';\n const textEl = findChild(c, TEXT_TAG);\n const text = textEl ? collectText(textEl) : '';\n out.push(makeLegacyComment({ ref, author, text }));\n }\n return out;\n}\n\n/**\n * Serialise a LegacyComment array to a `xl/commentsN.xml` payload. Authors are\n * deduped: each unique `author` becomes one `<author>` entry, and comments\n * reference it by index.\n */\nexport function commentsToBytes(comments: ReadonlyArray<LegacyComment>): Uint8Array {\n return new TextEncoder().encode(serializeComments(comments));\n}\n\nexport function serializeComments(comments: ReadonlyArray<LegacyComment>): string {\n const authorIndex = new Map<string, number>();\n const authors: string[] = [];\n for (const c of comments) {\n if (!authorIndex.has(c.author)) {\n authorIndex.set(c.author, authors.length);\n authors.push(c.author);\n }\n }\n const parts: string[] = [XML_HEADER, `<comments xmlns=\"${SHEET_MAIN_NS}\"><authors>`];\n for (const a of authors) parts.push(`<author>${escapeText(a)}</author>`);\n parts.push('</authors><commentList>');\n for (const c of comments) {\n const id = authorIndex.get(c.author) ?? 0;\n parts.push(\n `<comment ref=\"${escapeAttr(c.ref)}\" authorId=\"${id}\"><text><t>${escapeText(c.text)}</t></text></comment>`,\n );\n }\n parts.push('</commentList></comments>');\n return parts.join('');\n}\n\n/**\n * Bare-bones VML drawing payload Excel tolerates as a comment-shape\n * placeholder. We don't preserve the original VML shapes (stage-1 trade-off);\n * this stub guarantees the worksheet rels stay consistent.\n *\n * Excel won't open the file unless every legacy comment is paired with a\n * `<v:shape>` carrying `<x:ClientData ObjectType=\"Note\">` plus the cell anchor\n * row/column — without those, Excel reports \"removed Records: Comment from\n * /xl/comments1.xml\" and silently drops them.\n *\n * The `<v:shapetype id=\"_x0000_t202\">` / `<v:shape type=\"#_x0000_t202\">` pair\n * mirrors what openpyxl's ShapeWriter emits.\n */\nexport function placeholderVmlDrawing(comments: ReadonlyArray<LegacyComment> = []): Uint8Array {\n const parts: string[] = [\n '<xml xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\">',\n '<o:shapelayout v:ext=\"edit\"><o:idmap v:ext=\"edit\" data=\"1\"/></o:shapelayout>',\n '<v:shapetype id=\"_x0000_t202\" coordsize=\"21600,21600\" o:spt=\"202\" path=\"m,l,21600r21600,l21600,xe\">',\n '<v:stroke joinstyle=\"miter\"/>',\n '<v:path gradientshapeok=\"t\" o:connecttype=\"rect\"/>',\n '</v:shapetype>',\n ];\n // Comment shape ids start at 1026 (matches openpyxl/Excel convention).\n let shapeId = 1026;\n if (comments.length === 0) {\n parts.push('<v:shape type=\"#_x0000_t202\" style=\"visibility:hidden\"><x:ClientData ObjectType=\"Note\"/></v:shape>');\n } else {\n for (const c of comments) {\n // The ref may be a single cell or a range; anchor at the top-left.\n const firstRef = c.ref.split(':')[0] ?? c.ref;\n let row = 0;\n let col = 0;\n try {\n const t = coordinateToTuple(firstRef);\n row = t.row - 1; // VML uses 0-based row/column.\n col = t.col - 1;\n } catch {\n // Leave at 0,0 if the ref can't be parsed.\n }\n const idAttr = `_x0000_s${String(shapeId).padStart(4, '0')}`;\n shapeId++;\n parts.push(\n `<v:shape id=\"${idAttr}\" type=\"#_x0000_t202\" style=\"position:absolute;margin-left:59.25pt;margin-top:1.5pt;width:108pt;height:59.25pt;z-index:1;visibility:hidden\" fillcolor=\"#ffffe1\" o:insetmode=\"auto\">`,\n '<v:fill color2=\"#ffffe1\"/>',\n '<v:shadow color=\"black\" obscured=\"t\"/>',\n '<v:path o:connecttype=\"none\"/>',\n '<v:textbox style=\"mso-direction-alt:auto\"><div style=\"text-align:left\"/></v:textbox>',\n '<x:ClientData ObjectType=\"Note\">',\n '<x:MoveWithCells/>',\n '<x:SizeWithCells/>',\n '<x:AutoFill>False</x:AutoFill>',\n `<x:Row>${row}</x:Row>`,\n `<x:Column>${col}</x:Column>`,\n '</x:ClientData>',\n '</v:shape>',\n );\n }\n }\n parts.push('</xml>');\n return new TextEncoder().encode(parts.join(''));\n}\n","// xl/tables/tableN.xml read/write.\n//\n// Hand-rolled (no schema) because the table element's attribute set is large\n// and conditional, and we want minimum bundle weight. Pairs with the\n// loader/writer wiring in src/public/{load,save}.ts.\n\nimport { escapeXmlAttr } from '../utils/escape';\nimport { OpenXmlSchemaError } from '../utils/exceptions';\nimport { SHEET_MAIN_NS } from '../xml/namespaces';\nimport { parseXml } from '../xml/parser';\nimport { findChild, findChildren, type XmlNode } from '../xml/tree';\nimport type { AutoFilter, FilterColumn } from './auto-filter';\nimport type { TableColumn, TableDefinition, TableStyleInfo } from './table';\nimport { makeTableColumn, makeTableDefinition } from './table';\n\nconst TABLE_TAG = `{${SHEET_MAIN_NS}}table`;\nconst TABLE_COLUMNS_TAG = `{${SHEET_MAIN_NS}}tableColumns`;\nconst TABLE_COLUMN_TAG = `{${SHEET_MAIN_NS}}tableColumn`;\nconst TABLE_STYLE_INFO_TAG = `{${SHEET_MAIN_NS}}tableStyleInfo`;\nconst AUTOFILTER_TAG = `{${SHEET_MAIN_NS}}autoFilter`;\nconst FILTER_COLUMN_TAG = `{${SHEET_MAIN_NS}}filterColumn`;\nconst FILTERS_TAG = `{${SHEET_MAIN_NS}}filters`;\nconst FILTER_TAG = `{${SHEET_MAIN_NS}}filter`;\n\nconst XML_HEADER = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n\nconst escapeAttr = escapeXmlAttr;\n\nconst parseBool = (v: string | undefined): boolean | undefined => {\n if (v === undefined) return undefined;\n if (v === '1' || v === 'true') return true;\n if (v === '0' || v === 'false') return false;\n return undefined;\n};\n\nconst parseInteger = (v: string | undefined): number | undefined => {\n if (v === undefined) return undefined;\n const n = Number.parseInt(v, 10);\n return Number.isInteger(n) ? n : undefined;\n};\n\n/** Parse a `xl/tables/tableN.xml` payload. */\nexport function parseTableXml(bytes: Uint8Array | string): TableDefinition {\n const root = parseXml(bytes);\n if (root.name !== TABLE_TAG) {\n throw new OpenXmlSchemaError(`parseTableXml: root is \"${root.name}\", expected table`);\n }\n const idRaw = root.attrs['id'];\n const displayName = root.attrs['displayName'];\n const ref = root.attrs['ref'];\n if (!idRaw || !displayName || !ref) {\n throw new OpenXmlSchemaError('parseTableXml: <table> missing required @id / @displayName / @ref');\n }\n const id = Number.parseInt(idRaw, 10);\n if (!Number.isInteger(id) || id < 1) {\n throw new OpenXmlSchemaError(`parseTableXml: <table id=\"${idRaw}\"> is not a positive integer`);\n }\n\n const columns: TableColumn[] = [];\n const colsEl = findChild(root, TABLE_COLUMNS_TAG);\n if (colsEl) {\n for (const c of findChildren(colsEl, TABLE_COLUMN_TAG)) columns.push(parseTableColumn(c));\n }\n\n const styleEl = findChild(root, TABLE_STYLE_INFO_TAG);\n const autoFilterEl = findChild(root, AUTOFILTER_TAG);\n\n const totalsRowCount = parseInteger(root.attrs['totalsRowCount']);\n const headerRowCount = parseInteger(root.attrs['headerRowCount']);\n const totalsRowShown = parseBool(root.attrs['totalsRowShown']);\n\n const opts: Parameters<typeof makeTableDefinition>[0] = {\n id,\n displayName,\n ref,\n columns,\n };\n if (root.attrs['name']) opts.name = root.attrs['name'];\n if (headerRowCount !== undefined) opts.headerRowCount = headerRowCount;\n if (totalsRowCount !== undefined) opts.totalsRowCount = totalsRowCount;\n if (totalsRowShown !== undefined) opts.totalsRowShown = totalsRowShown;\n if (styleEl) {\n const style = parseTableStyleInfo(styleEl);\n if (style) opts.styleInfo = style;\n }\n if (autoFilterEl) {\n const af = parseTableAutoFilter(autoFilterEl);\n if (af) opts.autoFilter = af;\n }\n return makeTableDefinition(opts);\n}\n\nconst parseTableColumn = (node: XmlNode): TableColumn => {\n const id = parseInteger(node.attrs['id']);\n const name = node.attrs['name'];\n if (id === undefined || !name) {\n throw new OpenXmlSchemaError('parseTableXml: <tableColumn> missing @id / @name');\n }\n const col: TableColumn = makeTableColumn({ id, name });\n const fn = node.attrs['totalsRowFunction'];\n if (fn) col.totalsRowFunction = fn as NonNullable<TableColumn['totalsRowFunction']>;\n if (node.attrs['totalsRowLabel']) col.totalsRowLabel = node.attrs['totalsRowLabel'];\n return col;\n};\n\nconst parseTableStyleInfo = (node: XmlNode): TableStyleInfo | undefined => {\n const info: TableStyleInfo = {};\n if (node.attrs['name']) info.name = node.attrs['name'];\n const sFirst = parseBool(node.attrs['showFirstColumn']);\n if (sFirst !== undefined) info.showFirstColumn = sFirst;\n const sLast = parseBool(node.attrs['showLastColumn']);\n if (sLast !== undefined) info.showLastColumn = sLast;\n const sRow = parseBool(node.attrs['showRowStripes']);\n if (sRow !== undefined) info.showRowStripes = sRow;\n const sCol = parseBool(node.attrs['showColumnStripes']);\n if (sCol !== undefined) info.showColumnStripes = sCol;\n // Empty styleInfo is meaningless on the wire; collapse it.\n return Object.keys(info).length > 0 ? info : undefined;\n};\n\nconst parseTableAutoFilter = (node: XmlNode): AutoFilter | undefined => {\n const ref = node.attrs['ref'];\n if (!ref) return undefined;\n const filterColumns: FilterColumn[] = [];\n for (const fc of findChildren(node, FILTER_COLUMN_TAG)) {\n const colId = parseInteger(fc.attrs['colId']);\n if (colId === undefined) continue;\n const filtersEl = findChild(fc, FILTERS_TAG);\n if (!filtersEl) continue;\n const values: string[] = [];\n for (const f of findChildren(filtersEl, FILTER_TAG)) {\n if (f.attrs['val'] !== undefined) values.push(f.attrs['val']);\n }\n const blank = parseBool(filtersEl.attrs['blank']);\n const out: FilterColumn = { kind: 'filters', colId, values };\n if (blank !== undefined) out.blank = blank;\n filterColumns.push(out);\n }\n return { ref, filterColumns };\n};\n\n/** Serialise a TableDefinition to its `xl/tables/tableN.xml` bytes. */\nexport function tableToBytes(table: TableDefinition): Uint8Array {\n return new TextEncoder().encode(serializeTable(table));\n}\n\nfunction serializeTable(table: TableDefinition): string {\n let attrs = ` id=\"${table.id}\"`;\n if (table.name !== undefined) attrs += ` name=\"${escapeAttr(table.name)}\"`;\n attrs += ` displayName=\"${escapeAttr(table.displayName)}\"`;\n attrs += ` ref=\"${escapeAttr(table.ref)}\"`;\n if (table.headerRowCount !== undefined) attrs += ` headerRowCount=\"${table.headerRowCount}\"`;\n if (table.totalsRowCount !== undefined) attrs += ` totalsRowCount=\"${table.totalsRowCount}\"`;\n if (table.totalsRowShown !== undefined) attrs += ` totalsRowShown=\"${table.totalsRowShown ? '1' : '0'}\"`;\n\n const parts: string[] = [XML_HEADER, `<table xmlns=\"${SHEET_MAIN_NS}\"${attrs}>`];\n if (table.autoFilter) parts.push(serializeTableAutoFilter(table.autoFilter));\n parts.push(`<tableColumns count=\"${table.columns.length}\">`);\n for (const col of table.columns) parts.push(serializeTableColumn(col));\n parts.push('</tableColumns>');\n if (table.styleInfo) parts.push(serializeTableStyleInfo(table.styleInfo));\n parts.push('</table>');\n return parts.join('');\n}\n\nconst serializeTableColumn = (col: TableColumn): string => {\n let attrs = ` id=\"${col.id}\" name=\"${escapeAttr(col.name)}\"`;\n if (col.totalsRowFunction) attrs += ` totalsRowFunction=\"${col.totalsRowFunction}\"`;\n if (col.totalsRowLabel !== undefined) attrs += ` totalsRowLabel=\"${escapeAttr(col.totalsRowLabel)}\"`;\n return `<tableColumn${attrs}/>`;\n};\n\nconst serializeTableStyleInfo = (info: TableStyleInfo): string => {\n let attrs = '';\n if (info.name !== undefined) attrs += ` name=\"${escapeAttr(info.name)}\"`;\n if (info.showFirstColumn !== undefined) attrs += ` showFirstColumn=\"${info.showFirstColumn ? '1' : '0'}\"`;\n if (info.showLastColumn !== undefined) attrs += ` showLastColumn=\"${info.showLastColumn ? '1' : '0'}\"`;\n if (info.showRowStripes !== undefined) attrs += ` showRowStripes=\"${info.showRowStripes ? '1' : '0'}\"`;\n if (info.showColumnStripes !== undefined) attrs += ` showColumnStripes=\"${info.showColumnStripes ? '1' : '0'}\"`;\n return `<tableStyleInfo${attrs}/>`;\n};\n\nconst serializeTableAutoFilter = (filter: AutoFilter): string => {\n if (filter.filterColumns.length === 0) return `<autoFilter ref=\"${escapeAttr(filter.ref)}\"/>`;\n const parts: string[] = [`<autoFilter ref=\"${escapeAttr(filter.ref)}\">`];\n for (const fc of filter.filterColumns) {\n parts.push(`<filterColumn colId=\"${fc.colId}\">`);\n let filtersAttrs = '';\n if (fc.blank !== undefined) filtersAttrs += ` blank=\"${fc.blank ? '1' : '0'}\"`;\n if (fc.values.length === 0) {\n parts.push(`<filters${filtersAttrs}/>`);\n } else {\n parts.push(`<filters${filtersAttrs}>`);\n for (const v of fc.values) parts.push(`<filter val=\"${escapeAttr(v)}\"/>`);\n parts.push('</filters>');\n }\n parts.push('</filterColumn>');\n }\n parts.push('</autoFilter>');\n return parts.join('');\n};\n","// Stylesheet → xl/styles.xml writer.\n//\n// Pairs with parseStylesheetXml. The order of sections matches what Excel emits\n// and what openpyxl writes — readers tolerate any order but Excel's\n// diff-friendly layout helps when comparing fixtures.\n\nimport { toTree } from '../schema/serialize';\nimport { qname, SHEET_MAIN_NS } from '../xml/namespaces';\nimport { serializeXml } from '../xml/serializer';\nimport { el, type XmlNode } from '../xml/tree';\nimport { AlignmentSchema } from './alignment.schema';\nimport { BorderSchema } from './borders.schema';\nimport { getDxfs, type StylesheetWithDxfs } from './differential';\nimport { fillToTree } from './fills.schema';\nimport { FontSchema } from './fonts.schema';\nimport { NumberFormatSchema } from './numbers.schema';\nimport { ProtectionSchema } from './protection.schema';\nimport type { CellXf, Stylesheet } from './stylesheet';\n\nconst STYLESHEET_TAG = qname(SHEET_MAIN_NS, 'styleSheet');\nconst FONTS_TAG = qname(SHEET_MAIN_NS, 'fonts');\nconst FILLS_TAG = qname(SHEET_MAIN_NS, 'fills');\nconst BORDERS_TAG = qname(SHEET_MAIN_NS, 'borders');\nconst NUMFMTS_TAG = qname(SHEET_MAIN_NS, 'numFmts');\nconst NUMFMT_TAG = qname(SHEET_MAIN_NS, 'numFmt');\nconst CELLSTYLEXFS_TAG = qname(SHEET_MAIN_NS, 'cellStyleXfs');\nconst CELLXFS_TAG = qname(SHEET_MAIN_NS, 'cellXfs');\nconst CELLSTYLES_TAG = qname(SHEET_MAIN_NS, 'cellStyles');\nconst CELLSTYLE_TAG = qname(SHEET_MAIN_NS, 'cellStyle');\nconst DXFS_TAG = qname(SHEET_MAIN_NS, 'dxfs');\nconst DXF_TAG = qname(SHEET_MAIN_NS, 'dxf');\nconst XF_TAG = qname(SHEET_MAIN_NS, 'xf');\n\n/** Serialise a Stylesheet to its `xl/styles.xml` payload. */\nexport function stylesheetToBytes(ss: Stylesheet): Uint8Array {\n return serializeXml(buildStylesheetTree(ss));\n}\n\nfunction buildStylesheetTree(ss: Stylesheet): XmlNode {\n const root = el(STYLESHEET_TAG);\n\n // numFmts (custom only — built-ins are implicit).\n if (ss.numFmts.size > 0) {\n const numFmtsEl = el(NUMFMTS_TAG, { count: String(ss.numFmts.size) });\n const ids = [...ss.numFmts.keys()].sort((a, b) => a - b);\n for (const id of ids) {\n const code = ss.numFmts.get(id);\n if (code === undefined) continue;\n numFmtsEl.children.push(el(NUMFMT_TAG, { numFmtId: String(id), formatCode: code }));\n }\n root.children.push(numFmtsEl);\n }\n\n // fonts\n const fontsEl = el(FONTS_TAG, { count: String(ss.fonts.length) });\n for (const f of ss.fonts) fontsEl.children.push(toTree(f, FontSchema));\n root.children.push(fontsEl);\n\n // fills (use fillToTree — fillFromTree's symmetric writer)\n const fillsEl = el(FILLS_TAG, { count: String(ss.fills.length) });\n for (const fill of ss.fills) fillsEl.children.push(fillToTree(fill));\n root.children.push(fillsEl);\n\n // borders\n const bordersEl = el(BORDERS_TAG, { count: String(ss.borders.length) });\n for (const b of ss.borders) bordersEl.children.push(toTree(b, BorderSchema));\n root.children.push(bordersEl);\n\n // cellStyleXfs (always emitted — Excel rejects styles.xml that omits it when\n // cellXfs reference an xfId).\n const cellStyleXfsEl = el(CELLSTYLEXFS_TAG, {\n count: String(Math.max(ss.cellStyleXfs.length, 1)),\n });\n if (ss.cellStyleXfs.length === 0) {\n cellStyleXfsEl.children.push(el(XF_TAG, { numFmtId: '0', fontId: '0', fillId: '0', borderId: '0' }));\n } else {\n for (const xf of ss.cellStyleXfs) cellStyleXfsEl.children.push(cellXfToTree(xf));\n }\n root.children.push(cellStyleXfsEl);\n\n // cellXfs — same fallback for empty pools.\n const cellXfsEl = el(CELLXFS_TAG, {\n count: String(Math.max(ss.cellXfs.length, 1)),\n });\n if (ss.cellXfs.length === 0) {\n cellXfsEl.children.push(el(XF_TAG, { numFmtId: '0', fontId: '0', fillId: '0', borderId: '0', xfId: '0' }));\n } else {\n for (const xf of ss.cellXfs) cellXfsEl.children.push(cellXfToTree(xf));\n }\n root.children.push(cellXfsEl);\n\n // cellStyles — named styles entries pointing at cellStyleXfs.\n if (ss.namedStyles && ss.namedStyles.length > 0) {\n const cellStylesEl = el(CELLSTYLES_TAG, { count: String(ss.namedStyles.length) });\n for (const ns of ss.namedStyles) {\n const attrs: Record<string, string> = { name: ns.name, xfId: String(ns.xfId) };\n if (ns.builtinId !== undefined) attrs['builtinId'] = String(ns.builtinId);\n if (ns.iLevel !== undefined) attrs['iLevel'] = String(ns.iLevel);\n if (ns.hidden) attrs['hidden'] = '1';\n if (ns.customBuiltin) attrs['customBuiltin'] = '1';\n cellStylesEl.children.push(el(CELLSTYLE_TAG, attrs));\n }\n root.children.push(cellStylesEl);\n }\n\n // dxfs — differential styles referenced by conditional formatting and tables.\n const dxfs = getDxfs(ss as StylesheetWithDxfs);\n if (dxfs.length > 0) {\n const dxfsEl = el(DXFS_TAG, { count: String(dxfs.length) });\n for (const dxf of dxfs) {\n const dxfEl = el(DXF_TAG);\n // Order matches openpyxl: font, numFmt, fill, alignment, border,\n // protection.\n if (dxf.font) dxfEl.children.push(toTree(dxf.font, FontSchema));\n if (dxf.numFmt) dxfEl.children.push(toTree(dxf.numFmt, NumberFormatSchema));\n if (dxf.fill) dxfEl.children.push(fillToTree(dxf.fill));\n if (dxf.alignment) dxfEl.children.push(toTree(dxf.alignment, AlignmentSchema));\n if (dxf.border) dxfEl.children.push(toTree(dxf.border, BorderSchema));\n if (dxf.protection) dxfEl.children.push(toTree(dxf.protection, ProtectionSchema));\n dxfsEl.children.push(dxfEl);\n }\n root.children.push(dxfsEl);\n }\n\n return root;\n}\n\nconst cellXfToTree = (xf: CellXf): XmlNode => {\n const attrs: Record<string, string> = {\n numFmtId: String(xf.numFmtId),\n fontId: String(xf.fontId),\n fillId: String(xf.fillId),\n borderId: String(xf.borderId),\n };\n if (xf.xfId !== undefined) attrs['xfId'] = String(xf.xfId);\n if (xf.applyFont) attrs['applyFont'] = '1';\n if (xf.applyFill) attrs['applyFill'] = '1';\n if (xf.applyBorder) attrs['applyBorder'] = '1';\n if (xf.applyNumberFormat) attrs['applyNumberFormat'] = '1';\n if (xf.applyAlignment) attrs['applyAlignment'] = '1';\n if (xf.applyProtection) attrs['applyProtection'] = '1';\n if (xf.pivotButton) attrs['pivotButton'] = '1';\n if (xf.quotePrefix) attrs['quotePrefix'] = '1';\n const node = el(XF_TAG, attrs);\n if (xf.alignment) node.children.push(toTree(xf.alignment, AlignmentSchema));\n if (xf.protection) node.children.push(toTree(xf.protection, ProtectionSchema));\n return node;\n};\n"],"mappings":"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"}
|