@office-open/core 0.10.15 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/dist/chart/index.d.mts +2 -2
- package/dist/chart/index.mjs +2 -2
- package/dist/chart-DED4tXC9.mjs +2325 -0
- package/dist/chart-DED4tXC9.mjs.map +1 -0
- package/dist/color-mapping-CFF0vRSe.mjs +117 -0
- package/dist/color-mapping-CFF0vRSe.mjs.map +1 -0
- package/dist/data-type-CZMKVaaT.d.mts.map +1 -1
- package/dist/descriptor/index.d.mts +2 -2
- package/dist/descriptor/index.mjs +1 -1
- package/dist/{descriptor-BjNkn5jo.mjs → descriptor-BqaNZrrZ.mjs} +43 -11
- package/dist/{descriptor-BjNkn5jo.mjs.map → descriptor-BqaNZrrZ.mjs.map} +1 -1
- package/dist/drawing/index.d.mts +2 -0
- package/dist/drawing/index.mjs +2 -0
- package/dist/{drawingml-sj1J3lb0.mjs → drawing-BCAyrCCw.mjs} +4456 -3452
- package/dist/drawing-BCAyrCCw.mjs.map +1 -0
- package/dist/{converters-C_Y2QX1w.mjs → ext-uri-BHBcIrW7.mjs} +742 -45
- package/dist/ext-uri-BHBcIrW7.mjs.map +1 -0
- package/dist/index-BAxlDUQ1.d.mts +590 -0
- package/dist/index-BAxlDUQ1.d.mts.map +1 -0
- package/dist/index-BP541uS-.d.mts +489 -0
- package/dist/index-BP541uS-.d.mts.map +1 -0
- package/dist/{index-BVK2dv6C.d.mts → index-BQLIofaF.d.mts} +10 -4
- package/dist/index-BQLIofaF.d.mts.map +1 -0
- package/dist/{index-k8WKLXnA.d.mts → index-CaNwM5_e.d.mts} +19 -20
- package/dist/index-CaNwM5_e.d.mts.map +1 -0
- package/dist/index-DPkf_CtG.d.mts +1578 -0
- package/dist/index-DPkf_CtG.d.mts.map +1 -0
- package/dist/index-DcukVskh.d.mts +31 -0
- package/dist/index-DcukVskh.d.mts.map +1 -0
- package/dist/index-Di6XPdGl.d.mts +322 -0
- package/dist/index-Di6XPdGl.d.mts.map +1 -0
- package/dist/index-L6AXewfV.d.mts +872 -0
- package/dist/index-L6AXewfV.d.mts.map +1 -0
- package/dist/index.d.mts +294 -30
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1327 -112
- package/dist/index.mjs.map +1 -1
- package/dist/{output-D_G_JR_8.d.mts → output-yyxdkG0C.d.mts} +2 -3
- package/dist/output-yyxdkG0C.d.mts.map +1 -0
- package/dist/patch/index.d.mts +2 -2
- package/dist/patch/index.mjs +2 -2
- package/dist/{patch-BmRfghOo.mjs → patch-AkQY17CD.mjs} +73 -28
- package/dist/patch-AkQY17CD.mjs.map +1 -0
- package/dist/smartart/index.d.mts +2 -2
- package/dist/smartart/index.mjs +2 -2
- package/dist/smartart-n1kYJ6Jg.mjs +1650 -0
- package/dist/smartart-n1kYJ6Jg.mjs.map +1 -0
- package/dist/style-matrix-B6jhPAT3.mjs +123 -0
- package/dist/style-matrix-B6jhPAT3.mjs.map +1 -0
- package/dist/theme/index.d.mts +4 -2
- package/dist/theme/index.mjs +4 -2
- package/dist/theme-BKnXRmvn.mjs +426 -0
- package/dist/theme-BKnXRmvn.mjs.map +1 -0
- package/dist/theme-options-kO89NUEX.d.mts +109 -0
- package/dist/theme-options-kO89NUEX.d.mts.map +1 -0
- package/dist/util/index.d.mts +3 -3
- package/dist/util/index.mjs +3 -3
- package/dist/{util-Tq9PSjK0.mjs → util-ptE16MEk.mjs} +237 -459
- package/dist/util-ptE16MEk.mjs.map +1 -0
- package/dist/{values-8di32lIe.d.mts → values-BECDm4zr.d.mts} +17 -31
- package/dist/values-BECDm4zr.d.mts.map +1 -0
- package/dist/vector/index.d.mts +2 -0
- package/dist/vector/index.mjs +2 -0
- package/dist/vector-DhLGZjP5.mjs +3049 -0
- package/dist/vector-DhLGZjP5.mjs.map +1 -0
- package/package.json +16 -8
- package/dist/chart-DIGJna_6.mjs +0 -582
- package/dist/chart-DIGJna_6.mjs.map +0 -1
- package/dist/converters-C_Y2QX1w.mjs.map +0 -1
- package/dist/drawingml/index.d.mts +0 -2
- package/dist/drawingml/index.mjs +0 -2
- package/dist/drawingml-sj1J3lb0.mjs.map +0 -1
- package/dist/index-BVK2dv6C.d.mts.map +0 -1
- package/dist/index-BfHfKuKy.d.mts +0 -275
- package/dist/index-BfHfKuKy.d.mts.map +0 -1
- package/dist/index-CE53SwpZ.d.mts +0 -1463
- package/dist/index-CE53SwpZ.d.mts.map +0 -1
- package/dist/index-D6VE-MnJ.d.mts +0 -43
- package/dist/index-D6VE-MnJ.d.mts.map +0 -1
- package/dist/index-DE4CLElr.d.mts +0 -145
- package/dist/index-DE4CLElr.d.mts.map +0 -1
- package/dist/index-DlPA26cw.d.mts +0 -91
- package/dist/index-DlPA26cw.d.mts.map +0 -1
- package/dist/index-k8WKLXnA.d.mts.map +0 -1
- package/dist/output-D_G_JR_8.d.mts.map +0 -1
- package/dist/patch-BmRfghOo.mjs.map +0 -1
- package/dist/smartart-B7ukZ-Tw.mjs +0 -305
- package/dist/smartart-B7ukZ-Tw.mjs.map +0 -1
- package/dist/theme-CiNzdl-9.mjs +0 -177
- package/dist/theme-CiNzdl-9.mjs.map +0 -1
- package/dist/util-Tq9PSjK0.mjs.map +0 -1
- package/dist/values-8di32lIe.d.mts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-DED4tXC9.mjs","names":["stringifyMarker","readMarker","stringifyXml","stringify","parse"],"sources":["../src/chart/chart-collection.ts","../src/chart/chart-descriptors.ts","../src/chart/user-shapes/user-shapes.ts"],"sourcesContent":["/**\n * Chart data and collection for document generation.\n *\n * @module\n */\nimport type { DataType } from \"../util/data-type\";\n\nexport interface ChartData {\n key: string;\n chartSpaceXml: string;\n /**\n * Embedded workbook for c:externalData (round-trip). The compiler emits the\n * chart part's own rels plus the word/embeddings part so the rId resolves.\n */\n embedding?: {\n relationshipId: string;\n fileName: string;\n data: DataType;\n };\n}\n\nexport class ChartCollection {\n private map: Map<string, ChartData>;\n\n public constructor() {\n this.map = new Map<string, ChartData>();\n }\n\n public addChart(key: string, chartData: ChartData): void {\n this.map.set(key, chartData);\n }\n\n public get array(): ChartData[] {\n return [...this.map.values()];\n }\n}\n","/**\n * Chart descriptors — CustomDescriptor for c:chartSpace serialization.\n *\n * @module\n */\n\nimport { escapeXml, stringify as stringifyXml, stringifyElement } from \"@office-open/xml\";\nimport type { Element as XmlElement } from \"@office-open/xml\";\nimport { attr, findChild, findFirst, children, textOf } from \"@office-open/xml\";\n\nimport type { CustomDescriptor, ReadContext, WriteContext } from \"../descriptor\";\nimport { shapePropertiesDesc } from \"../drawing/shape-properties-desc\";\nimport type { ShapePropertiesOptions } from \"../drawing/shape-properties-desc\";\nimport { textBodyDesc } from \"../drawing/text/text-body\";\nimport type { TextBodyOptions } from \"../drawing/text/text-body\";\nimport { parseColorMapping, stringifyColorMapping } from \"../theme/color-mapping\";\nimport {\n xsdAxisCrossBetween,\n xsdAxisCrosses,\n xsdAxisLabelAlignment,\n xsdAxisOrientation,\n xsdAxisPosition,\n xsdDataLabelPosition,\n xsdErrorValueType,\n xsdLegendPosition,\n xsdSizeRepresents,\n xsdSplitType,\n xsdTrendlineType,\n} from \"../util/mappings\";\nimport { parseOnOff } from \"../util/values\";\nimport type {\n ChartSpaceOptions,\n BubbleSeriesData,\n ChartSeriesData,\n ChartLinesOptions,\n ChartGrouping,\n SecondaryChartGroupOptions,\n ChartType,\n DataLabelOptions,\n DataLabelsOptions,\n ErrorBarOptions,\n TrendlineLabelOptions,\n TrendlineOptions,\n View3DOptions,\n AxisOptions,\n AxisKind,\n AxisScalingOptions,\n AxisPosition,\n AxisTickMark,\n AxisTickLabelPosition,\n AxisCrosses,\n AxisCrossBetween,\n AxisOrientation,\n AxisLabelAlignment,\n BuiltInDisplayUnit,\n DisplayUnitsOptions,\n TimeUnit,\n MarkerOptions,\n MarkerSymbol,\n DataPointOptions,\n PictureOptionsOptions,\n PictureFormat,\n BarShape,\n ChartSeriesCommon,\n ScatterSeriesData,\n ChartTitleOptions,\n ManualLayoutOptions,\n SurfaceOptions,\n LayoutTarget,\n LayoutMode,\n DisplayBlanksAs,\n SizeRepresents,\n DataTableOptions,\n OfPieType,\n SplitType,\n ProtectionOptions,\n ExternalDataOptions,\n ChartHeaderFooterOptions,\n ChartPageMarginsOptions,\n ChartPageSetupOptions,\n PrintSettingsOptions,\n PageSetupOrientation,\n PivotSourceOptions,\n ChartPivotFormatOptions,\n BandFormatOptions,\n LegendEntryOptions,\n RadarStyle,\n LegendPosition,\n} from \"./types\";\n\n// ── Mutable build type for read results (readonly properties not assignable) ──\n\ntype MutableChartSpaceResult = {\n -readonly [K in keyof ChartSpaceOptions]?: ChartSpaceOptions[K];\n};\n\n// ── Chart type → XML element tag mapping ──\n\nconst CHART_TYPE_TAGS: Record<string, string> = {\n column: \"c:barChart\",\n bar: \"c:barChart\",\n line: \"c:lineChart\",\n pie: \"c:pieChart\",\n area: \"c:areaChart\",\n scatter: \"c:scatterChart\",\n bubble: \"c:bubbleChart\",\n doughnut: \"c:doughnutChart\",\n radar: \"c:radarChart\",\n stock: \"c:stockChart\",\n surface: \"c:surfaceChart\",\n ofPie: \"c:ofPieChart\",\n};\n\nconst CHART_TYPE_TAGS_3D: Record<string, string> = {\n column: \"c:bar3DChart\",\n bar: \"c:bar3DChart\",\n line: \"c:line3DChart\",\n pie: \"c:pie3DChart\",\n area: \"c:area3DChart\",\n};\n\nconst NO_AXES_TYPES = new Set([\"pie\", \"doughnut\", \"ofPie\"]);\n\n// ── XML tag → chart type reverse mapping (for read) ──\n\nconst TAG_TO_CHART_TYPE: Record<string, { type: ChartType; threeD?: boolean }> = {\n \"c:barChart\": { type: \"column\" },\n \"c:bar3DChart\": { type: \"column\", threeD: true },\n \"c:lineChart\": { type: \"line\" },\n \"c:line3DChart\": { type: \"line\", threeD: true },\n \"c:pieChart\": { type: \"pie\" },\n \"c:pie3DChart\": { type: \"pie\", threeD: true },\n \"c:areaChart\": { type: \"area\" },\n \"c:area3DChart\": { type: \"area\", threeD: true },\n \"c:scatterChart\": { type: \"scatter\" },\n \"c:bubbleChart\": { type: \"bubble\" },\n \"c:doughnutChart\": { type: \"doughnut\" },\n \"c:radarChart\": { type: \"radar\" },\n \"c:stockChart\": { type: \"stock\" },\n \"c:surfaceChart\": { type: \"surface\" },\n \"c:surface3DChart\": { type: \"surface\", threeD: true },\n \"c:ofPieChart\": { type: \"ofPie\" },\n};\n\n// ── String helpers ──\n\nfunction attrVal(name: string, value: string | number): string {\n return `${name}=\"${escapeXml(String(value))}\"`;\n}\n\nfunction emptyEl(tag: string): string {\n return `<${tag}/>`;\n}\n\nfunction valEl(tag: string, value: string | number): string {\n return `<${tag} ${attrVal(\"val\", value)}/>`;\n}\n\n// ── Boolean helper (CT_OnOff) ──\n\nfunction boolVal(value: boolean | undefined): string {\n // Office chart writers always emit the explicit val attribute (val=\"1\"/\"0\");\n // the XSD allows omitting val for true, but the corpus never does.\n return ` val=\"${value === false ? 0 : 1}\"`;\n}\n\n// ── Numeric literal (c:numLit) ──\n\nfunction stringifyNumLit(value: number): string {\n return `<c:numLit><c:formatCode>General</c:formatCode><c:ptCount val=\"1\"/><c:pt idx=\"0\"><c:v>${value}</c:v></c:pt></c:numLit>`;\n}\n\n// ── Trendline XML (CT_Trendline) ──\n\nfunction stringifyTrendline(opts: TrendlineOptions): string {\n const parts: string[] = [];\n if (opts.name !== undefined) {\n parts.push(`<c:name>${escapeXml(opts.name)}</c:name>`);\n }\n parts.push(valEl(\"c:trendlineType\", xsdTrendlineType.to(opts.type ?? \"linear\")));\n if (opts.order !== undefined) parts.push(valEl(\"c:order\", opts.order));\n if (opts.period !== undefined) parts.push(valEl(\"c:period\", opts.period));\n if (opts.forward !== undefined) parts.push(valEl(\"c:forward\", opts.forward));\n if (opts.backward !== undefined) parts.push(valEl(\"c:backward\", opts.backward));\n if (opts.intercept !== undefined) parts.push(valEl(\"c:intercept\", opts.intercept));\n if (opts.dispRSqr !== undefined) parts.push(`<c:dispRSqr${boolVal(opts.dispRSqr)}/>`);\n if (opts.dispEq !== undefined) parts.push(`<c:dispEq${boolVal(opts.dispEq)}/>`);\n // XSD CT_Trendline: trendlineLbl follows dispEq; CT_TrendlineLbl's children are all optional.\n const labelFmt = opts.label?.numberFormat;\n if (labelFmt !== undefined) {\n parts.push(\n `<c:trendlineLbl><c:numFmt formatCode=\"${escapeXml(labelFmt)}\" sourceLinked=\"0\"/></c:trendlineLbl>`,\n );\n }\n return `<c:trendline>${parts.join(\"\")}</c:trendline>`;\n}\n\n// ── Error bars XML (CT_ErrBars) ──\n\nfunction stringifyErrBars(opts: ErrorBarOptions): string {\n const parts: string[] = [];\n // ST_ErrDir is x|y — skip values outside the enum (a legacy \"both\" belongs\n // to errBarType, not errDir)\n if (opts.direction === \"x\" || opts.direction === \"y\") {\n parts.push(valEl(\"c:errDir\", opts.direction));\n }\n parts.push(valEl(\"c:errBarType\", opts.barType ?? \"both\"));\n parts.push(valEl(\"c:errValType\", xsdErrorValueType.to(opts.valueType ?? \"fixedValue\")));\n if (opts.noEndCap !== undefined) parts.push(`<c:noEndCap${boolVal(opts.noEndCap)}/>`);\n if (opts.plusValue !== undefined)\n parts.push(`<c:plus>${stringifyNumLit(opts.plusValue)}</c:plus>`);\n if (opts.minusValue !== undefined)\n parts.push(`<c:minus>${stringifyNumLit(opts.minusValue)}</c:minus>`);\n if (opts.value !== undefined) parts.push(valEl(\"c:val\", opts.value));\n return `<c:errBars>${parts.join(\"\")}</c:errBars>`;\n}\n\n// ── Data labels XML (CT_DLbls) ──\n\nfunction stringifyDataLabel(opts: DataLabelOptions, ctx: WriteContext): string {\n // CT_DLbl: idx (required) → choice(delete | Group_DLbl needing ≥1 EG_DLblShared child).\n if (opts.delete) {\n return `<c:dLbl><c:idx val=\"${opts.index}\"/><c:delete val=\"1\"/></c:dLbl>`;\n }\n const inner: string[] = [];\n // Group_DLbl: layout → tx → EG_DLblShared (numFmt…dLblPos…show*…separator).\n if (opts.layout === true) inner.push(\"<c:layout/>\");\n else if (opts.layout) inner.push(stringifyLayout(opts.layout));\n if (opts.text)\n inner.push(`<c:tx><c:rich>${textBodyDesc.stringify(opts.text, ctx) ?? \"\"}</c:rich></c:tx>`);\n if (opts.numberFormat !== undefined)\n inner.push(`<c:numFmt formatCode=\"${escapeXml(opts.numberFormat)}\" sourceLinked=\"0\"/>`);\n inner.push(chartSpPr(opts.shapeProperties, ctx));\n if (opts.textProperties)\n inner.push(`<c:txPr>${textBodyDesc.stringify(opts.textProperties, ctx) ?? \"\"}</c:txPr>`);\n if (opts.position !== undefined)\n inner.push(valEl(\"c:dLblPos\", xsdDataLabelPosition.to(opts.position)));\n if (opts.showLegendKey !== undefined)\n inner.push(`<c:showLegendKey${boolVal(opts.showLegendKey)}/>`);\n if (opts.showVal !== undefined) inner.push(`<c:showVal${boolVal(opts.showVal)}/>`);\n if (opts.showCatName !== undefined) inner.push(`<c:showCatName${boolVal(opts.showCatName)}/>`);\n if (opts.showSerName !== undefined) inner.push(`<c:showSerName${boolVal(opts.showSerName)}/>`);\n if (opts.showPercent !== undefined) inner.push(`<c:showPercent${boolVal(opts.showPercent)}/>`);\n if (opts.showBubbleSize !== undefined)\n inner.push(`<c:showBubbleSize${boolVal(opts.showBubbleSize)}/>`);\n if (opts.separator !== undefined)\n inner.push(`<c:separator>${escapeXml(opts.separator)}</c:separator>`);\n return `<c:dLbl><c:idx val=\"${opts.index}\"/>${inner.join(\"\")}</c:dLbl>`;\n}\n\nfunction stringifyDataLabels(opts: DataLabelsOptions, ctx: WriteContext): string {\n const parts: string[] = [];\n // CT_DLbls: per-point overrides (c:dLbl) precede the shared Group_DLbls settings.\n if (opts.labels) {\n for (const lbl of opts.labels) parts.push(stringifyDataLabel(lbl, ctx));\n }\n if (opts.delete !== undefined) parts.push(`<c:delete${boolVal(opts.delete)}/>`);\n if (opts.numberFormat !== undefined)\n parts.push(`<c:numFmt formatCode=\"${escapeXml(opts.numberFormat)}\" sourceLinked=\"0\"/>`);\n parts.push(chartSpPr(opts.shapeProperties, ctx));\n if (opts.textProperties)\n parts.push(`<c:txPr>${textBodyDesc.stringify(opts.textProperties, ctx) ?? \"\"}</c:txPr>`);\n if (opts.position !== undefined)\n parts.push(valEl(\"c:dLblPos\", xsdDataLabelPosition.to(opts.position)));\n if (opts.showLegendKey !== undefined)\n parts.push(`<c:showLegendKey${boolVal(opts.showLegendKey)}/>`);\n if (opts.showVal !== undefined) parts.push(`<c:showVal${boolVal(opts.showVal)}/>`);\n if (opts.showCatName !== undefined) parts.push(`<c:showCatName${boolVal(opts.showCatName)}/>`);\n if (opts.showSerName !== undefined) parts.push(`<c:showSerName${boolVal(opts.showSerName)}/>`);\n if (opts.showPercent !== undefined) parts.push(`<c:showPercent${boolVal(opts.showPercent)}/>`);\n if (opts.showBubbleSize !== undefined)\n parts.push(`<c:showBubbleSize${boolVal(opts.showBubbleSize)}/>`);\n if (opts.separator !== undefined)\n parts.push(`<c:separator>${escapeXml(opts.separator)}</c:separator>`);\n // CT_DLbls is a choice: delete OR the shared-settings group (which carries\n // showLeaderLines/leaderLines). The tail pair only rides along with the group.\n if (opts.delete === undefined) {\n if (opts.showLeaderLines !== undefined)\n parts.push(`<c:showLeaderLines${boolVal(opts.showLeaderLines)}/>`);\n // CT_ChartLines (leaderLines); an empty element is XSD-valid.\n if (opts.leaderLines) parts.push(emptyEl(\"c:leaderLines\"));\n }\n return `<c:dLbls>${parts.join(\"\")}</c:dLbls>`;\n}\n\n// ── 3D view XML (CT_View3D) ──\n\nfunction stringifyView3D(opts: View3DOptions): string {\n const parts: string[] = [];\n if (opts.rotX !== undefined) parts.push(valEl(\"c:rotX\", opts.rotX));\n if (opts.hPercent !== undefined) parts.push(valEl(\"c:hPercent\", opts.hPercent));\n if (opts.rotY !== undefined) parts.push(valEl(\"c:rotY\", opts.rotY));\n if (opts.depthPercent !== undefined) parts.push(valEl(\"c:depthPercent\", opts.depthPercent));\n if (opts.rAngAx !== undefined) parts.push(`<c:rAngAx${boolVal(opts.rAngAx)}/>`);\n if (opts.perspective !== undefined) parts.push(valEl(\"c:perspective\", opts.perspective));\n return `<c:view3D>${parts.join(\"\")}</c:view3D>`;\n}\n\n// ── Plot-area layout XML (CT_Layout > CT_ManualLayout) ──\n\nfunction stringifyLayout(manualLayout: ManualLayoutOptions | undefined): string {\n if (!manualLayout) return emptyEl(\"c:layout\");\n const parts: string[] = [];\n if (manualLayout.layoutTarget !== undefined)\n parts.push(valEl(\"c:layoutTarget\", manualLayout.layoutTarget));\n if (manualLayout.xMode !== undefined) parts.push(valEl(\"c:xMode\", manualLayout.xMode));\n if (manualLayout.yMode !== undefined) parts.push(valEl(\"c:yMode\", manualLayout.yMode));\n if (manualLayout.wMode !== undefined) parts.push(valEl(\"c:wMode\", manualLayout.wMode));\n if (manualLayout.hMode !== undefined) parts.push(valEl(\"c:hMode\", manualLayout.hMode));\n if (manualLayout.x !== undefined) parts.push(valEl(\"c:x\", manualLayout.x));\n if (manualLayout.y !== undefined) parts.push(valEl(\"c:y\", manualLayout.y));\n if (manualLayout.w !== undefined) parts.push(valEl(\"c:w\", manualLayout.w));\n if (manualLayout.h !== undefined) parts.push(valEl(\"c:h\", manualLayout.h));\n return `<c:layout><c:manualLayout>${parts.join(\"\")}</c:manualLayout></c:layout>`;\n}\n\n// ── 3D wall/floor surface XML (CT_Surface) ──\n\nfunction stringifySurface(\n tag: \"c:floor\" | \"c:sideWall\" | \"c:backWall\",\n opts: SurfaceOptions | undefined,\n ctx: WriteContext,\n): string {\n if (!opts) return \"\";\n const parts: string[] = [];\n // ST_Thickness is a union of a percentage pattern and unsignedInt, but MS\n // Office rejects the \"N%\" spelling on open — normalize to the bare number.\n if (opts.thickness !== undefined)\n parts.push(\n valEl(\n \"c:thickness\",\n typeof opts.thickness === \"string\"\n ? Number(opts.thickness.replace(\"%\", \"\"))\n : opts.thickness,\n ),\n );\n if (opts.shapeProperties) parts.push(chartSpPr(opts.shapeProperties, ctx));\n return parts.length ? `<${tag}>${parts.join(\"\")}</${tag}>` : `<${tag}/>`;\n}\n\n// ── Axis XML (EG_AxShared + CT_CatAx/CT_ValAx/CT_DateAx/CT_SerAx) ──\n\nconst AXIS_TAG: Record<AxisKind, string> = {\n category: \"c:catAx\",\n value: \"c:valAx\",\n date: \"c:dateAx\",\n series: \"c:serAx\",\n};\n\nfunction stringifyScaling(opts: AxisScalingOptions | undefined): string {\n if (!opts) return emptyEl(\"c:scaling\");\n const parts: string[] = [];\n if (opts.logBase !== undefined) parts.push(valEl(\"c:logBase\", opts.logBase));\n if (opts.orientation !== undefined)\n parts.push(valEl(\"c:orientation\", xsdAxisOrientation.to(opts.orientation)));\n if (opts.max !== undefined) parts.push(valEl(\"c:max\", opts.max));\n if (opts.min !== undefined) parts.push(valEl(\"c:min\", opts.min));\n return `<c:scaling>${parts.join(\"\")}</c:scaling>`;\n}\n\nfunction stringifyDisplayUnits(opts: DisplayUnitsOptions): string {\n const parts: string[] = [];\n if (opts.customUnit !== undefined) parts.push(valEl(\"c:custUnit\", opts.customUnit));\n else if (opts.builtInUnit !== undefined) parts.push(valEl(\"c:builtInUnit\", opts.builtInUnit));\n if (opts.label) parts.push(emptyEl(\"c:dispUnitsLbl\"));\n return `<c:dispUnits>${parts.join(\"\")}</c:dispUnits>`;\n}\n\n/**\n * Serialize an axis. Field order follows the XSD content model exactly:\n * EG_AxShared (axId…crosses/crossesAt), then the kind-specific tail from\n * CT_CatAx / CT_DateAx / CT_SerAx / CT_ValAx.\n */\nfunction stringifyAxis(opts: WiredAxisOptions, ctx: WriteContext): string {\n const parts: string[] = [];\n parts.push(valEl(\"c:axId\", opts.id));\n parts.push(stringifyScaling(opts.scaling));\n if (opts.delete !== undefined) parts.push(`<c:delete${boolVal(opts.delete)}/>`);\n // axPos is required (EG_AxShared); default by axis role when unset —\n // category-style axes sit at the bottom, value/secondary axes on the left\n const axPos = opts.position ?? (opts.kind === \"value\" ? \"left\" : \"bottom\");\n parts.push(valEl(\"c:axPos\", xsdAxisPosition.to(axPos)));\n parts.push(stringifyChartLines(\"c:majorGridlines\", opts.majorGridlines, ctx));\n parts.push(stringifyChartLines(\"c:minorGridlines\", opts.minorGridlines, ctx));\n if (opts.title !== undefined) {\n // \"\" is the text-less title placeholder (bare <c:title/>), like the chart title.\n parts.push(\n typeof opts.title === \"string\" && opts.title === \"\"\n ? emptyEl(\"c:title\")\n : stringifyTitle(opts.title, ctx),\n );\n }\n if (opts.numberFormat !== undefined) {\n // A plain string keeps the default sourceLinked=1; the object form\n // round-trips an explicit decoupling from the source data.\n const fmt =\n typeof opts.numberFormat === \"string\" ? { formatCode: opts.numberFormat } : opts.numberFormat;\n const linked = fmt.sourceLinked === undefined || fmt.sourceLinked ? 1 : 0;\n parts.push(`<c:numFmt formatCode=\"${escapeXml(fmt.formatCode)}\" sourceLinked=\"${linked}\"/>`);\n }\n if (opts.majorTickMark !== undefined) parts.push(valEl(\"c:majorTickMark\", opts.majorTickMark));\n if (opts.minorTickMark !== undefined) parts.push(valEl(\"c:minorTickMark\", opts.minorTickMark));\n if (opts.tickLabelPosition !== undefined)\n parts.push(valEl(\"c:tickLblPos\", opts.tickLabelPosition));\n // EG_AxShared: spPr sits between tickLblPos and crossAx; txPr follows spPr.\n parts.push(chartSpPr(opts.shapeProperties, ctx));\n if (opts.textProperties) {\n parts.push(`<c:txPr>${textBodyDesc.stringify(opts.textProperties, ctx) ?? \"\"}</c:txPr>`);\n }\n parts.push(valEl(\"c:crossAx\", opts.crossAxisId));\n // XSD choice: crosses XOR crossesAt\n if (opts.crossesAt !== undefined) parts.push(valEl(\"c:crossesAt\", opts.crossesAt));\n else if (opts.crosses !== undefined)\n parts.push(valEl(\"c:crosses\", xsdAxisCrosses.to(opts.crosses)));\n\n switch (opts.kind) {\n case \"category\":\n if (opts.auto !== undefined) parts.push(`<c:auto${boolVal(opts.auto)}/>`);\n if (opts.labelAlignment !== undefined)\n parts.push(valEl(\"c:lblAlgn\", xsdAxisLabelAlignment.to(opts.labelAlignment)));\n if (opts.labelOffset !== undefined) parts.push(valEl(\"c:lblOffset\", opts.labelOffset));\n if (opts.tickLabelSkip !== undefined) parts.push(valEl(\"c:tickLblSkip\", opts.tickLabelSkip));\n if (opts.tickMarkSkip !== undefined) parts.push(valEl(\"c:tickMarkSkip\", opts.tickMarkSkip));\n if (opts.noMultiLevelLabel !== undefined)\n parts.push(`<c:noMultiLvlLbl${boolVal(opts.noMultiLevelLabel)}/>`);\n break;\n case \"date\":\n if (opts.auto !== undefined) parts.push(`<c:auto${boolVal(opts.auto)}/>`);\n if (opts.labelOffset !== undefined) parts.push(valEl(\"c:lblOffset\", opts.labelOffset));\n if (opts.baseTimeUnit !== undefined) parts.push(valEl(\"c:baseTimeUnit\", opts.baseTimeUnit));\n if (opts.majorUnit !== undefined) parts.push(valEl(\"c:majorUnit\", opts.majorUnit));\n if (opts.majorTimeUnit !== undefined)\n parts.push(valEl(\"c:majorTimeUnit\", opts.majorTimeUnit));\n if (opts.minorUnit !== undefined) parts.push(valEl(\"c:minorUnit\", opts.minorUnit));\n if (opts.minorTimeUnit !== undefined)\n parts.push(valEl(\"c:minorTimeUnit\", opts.minorTimeUnit));\n break;\n case \"series\":\n if (opts.tickLabelSkip !== undefined) parts.push(valEl(\"c:tickLblSkip\", opts.tickLabelSkip));\n if (opts.tickMarkSkip !== undefined) parts.push(valEl(\"c:tickMarkSkip\", opts.tickMarkSkip));\n break;\n case \"value\":\n if (opts.crossBetween !== undefined)\n parts.push(valEl(\"c:crossBetween\", xsdAxisCrossBetween.to(opts.crossBetween)));\n if (opts.majorUnit !== undefined) parts.push(valEl(\"c:majorUnit\", opts.majorUnit));\n if (opts.minorUnit !== undefined) parts.push(valEl(\"c:minorUnit\", opts.minorUnit));\n if (opts.displayUnits) parts.push(stringifyDisplayUnits(opts.displayUnits));\n break;\n }\n const tag = AXIS_TAG[opts.kind];\n return `<${tag}>${parts.join(\"\")}</${tag}>`;\n}\n\n// ── Series data XML builders ──\n\n/** Worksheet reference formula (c:f); empty element when not round-tripped. */\nfunction refFormula(formula: string | undefined): string {\n return `<c:f>${escapeXml(formula ?? \"\")}</c:f>`;\n}\n\nfunction stringifyStrRef(values: readonly (string | undefined)[], formula?: string): string {\n const pts = values\n .map((v, i) => `<c:pt idx=\"${i}\"><c:v>${escapeXml(v ?? \"\")}</c:v></c:pt>`)\n .join(\"\");\n return `<c:strRef>${refFormula(formula)}<c:strCache><c:ptCount ${attrVal(\"val\", values.length)}/>${pts}</c:strCache></c:strRef>`;\n}\n\nfunction stringifyStrLit(values: readonly string[]): string {\n const pts = values.map((v, i) => `<c:pt idx=\"${i}\"><c:v>${escapeXml(v)}</c:v></c:pt>`).join(\"\");\n return `<c:strLit><c:ptCount ${attrVal(\"val\", values.length)}/>${pts}</c:strLit>`;\n}\n\nfunction stringifyMultiLvlStrRef(levels: readonly (readonly string[])[], formula?: string): string {\n const ptCount = levels.reduce((max, lvl) => Math.max(max, lvl.length), 0);\n const lvls = levels\n .map((lvl) => {\n const pts = lvl.map((v, i) => `<c:pt idx=\"${i}\"><c:v>${escapeXml(v)}</c:v></c:pt>`).join(\"\");\n return `<c:lvl>${pts}</c:lvl>`;\n })\n .join(\"\");\n return `<c:multiLvlStrRef>${refFormula(formula)}<c:multiLvlStrCache><c:ptCount ${attrVal(\"val\", ptCount)}/>${lvls}</c:multiLvlStrCache></c:multiLvlStrRef>`;\n}\n\n// Numeric categories keep their literal text so formats survive verbatim.\nfunction stringifyNumCatRef(\n values: readonly string[],\n formula?: string,\n formatCode?: string,\n): string {\n const pts = values.map((v, i) => `<c:pt idx=\"${i}\"><c:v>${escapeXml(v)}</c:v></c:pt>`).join(\"\");\n return `<c:numRef>${refFormula(formula)}<c:numCache><c:formatCode>${escapeXml(formatCode ?? \"General\")}</c:formatCode><c:ptCount ${attrVal(\"val\", values.length)}/>${pts}</c:numCache></c:numRef>`;\n}\n\n/** Whether the chart carries category-source data (c:cat is optional in CT_Ser). */\nfunction hasCategoryData(opts: ChartSpaceOptions): boolean {\n return (\n opts.categories !== undefined ||\n opts.categoryLabels !== undefined ||\n opts.multiLevelCategories !== undefined ||\n opts.numericCategories === true\n );\n}\n\n// CT_AxDataSource choice (c:cat / c:xVal slot): exactly one of multi-level/literal/reference.\nfunction stringifyCategorySource(opts: ChartSpaceOptions): string {\n if (opts.multiLevelCategories)\n return stringifyMultiLvlStrRef(opts.multiLevelCategories, opts.categoryFormula);\n if (opts.categoryLabels) return stringifyStrLit(opts.categoryLabels);\n if (opts.numericCategories) {\n return stringifyNumCatRef(opts.categories ?? [], opts.categoryFormula, opts.categoryFormatCode);\n }\n return stringifyStrRef(opts.categories ?? [], opts.categoryFormula);\n}\n\nfunction stringifyNumRef(values: readonly number[], formula?: string, formatCode?: string): string {\n const pts = values.map((v, i) => `<c:pt idx=\"${i}\"><c:v>${v}</c:v></c:pt>`).join(\"\");\n return `<c:numRef>${refFormula(formula)}<c:numCache><c:formatCode>${escapeXml(formatCode ?? \"General\")}</c:formatCode><c:ptCount ${attrVal(\"val\", values.length)}/>${pts}</c:numCache></c:numRef>`;\n}\n\n// CT_NumData literal form (c:val > c:numLit) — Excel writes this for\n// hand-entered series with no worksheet reference.\nfunction stringifyNumLitList(values: readonly number[], formatCode?: string): string {\n const pts = values.map((v, i) => `<c:pt idx=\"${i}\"><c:v>${v}</c:v></c:pt>`).join(\"\");\n return `<c:numLit><c:formatCode>${escapeXml(formatCode ?? \"General\")}</c:formatCode><c:ptCount ${attrVal(\"val\", values.length)}/>${pts}</c:numLit>`;\n}\n\n// ── Chart type header XML ──\n\nfunction stringifyUpDownBars(gapWidth: number | undefined): string {\n // CT_UpDownBars: gapWidth? → upBars → downBars (CT_ChartLines, presence-only)\n const inner: string[] = [];\n if (gapWidth !== undefined) inner.push(valEl(\"c:gapWidth\", gapWidth));\n inner.push(emptyEl(\"c:upBars\"));\n inner.push(emptyEl(\"c:downBars\"));\n return `<c:upDownBars>${inner.join(\"\")}</c:upDownBars>`;\n}\n\nfunction stringifyDataTable(opts: DataTableOptions, ctx: WriteContext): string {\n // CT_DTable: showHorzBorder → showVertBorder → showOutline → showKeys → spPr → txPr\n const parts: string[] = [];\n if (opts.showHorizontalBorder !== undefined)\n parts.push(`<c:showHorzBorder${boolVal(opts.showHorizontalBorder)}/>`);\n if (opts.showVerticalBorder !== undefined)\n parts.push(`<c:showVertBorder${boolVal(opts.showVerticalBorder)}/>`);\n if (opts.showOutline !== undefined) parts.push(`<c:showOutline${boolVal(opts.showOutline)}/>`);\n if (opts.showLegendKeys !== undefined) parts.push(`<c:showKeys${boolVal(opts.showLegendKeys)}/>`);\n if (opts.shapeProperties) parts.push(chartSpPr(opts.shapeProperties, ctx));\n if (opts.textProperties) {\n parts.push(`<c:txPr>${textBodyDesc.stringify(opts.textProperties, ctx) ?? \"\"}</c:txPr>`);\n }\n return `<c:dTable>${parts.join(\"\")}</c:dTable>`;\n}\n\nfunction stringifyProtection(opts: ProtectionOptions): string {\n const parts: string[] = [];\n if (opts.chartObject !== undefined)\n parts.push(`<c:chartObject val=\"${opts.chartObject ? 1 : 0}\"/>`);\n if (opts.data !== undefined) parts.push(`<c:data val=\"${opts.data ? 1 : 0}\"/>`);\n if (opts.formatting !== undefined) parts.push(`<c:formatting val=\"${opts.formatting ? 1 : 0}\"/>`);\n if (opts.selection !== undefined) parts.push(`<c:selection val=\"${opts.selection ? 1 : 0}\"/>`);\n if (opts.userInterface !== undefined)\n parts.push(`<c:userInterface val=\"${opts.userInterface ? 1 : 0}\"/>`);\n return `<c:protection>${parts.join(\"\")}</c:protection>`;\n}\n\nfunction stringifyExternalData(opts: ExternalDataOptions): string | undefined {\n // r:id must resolve to a relationship the chart part owns — an unresolvable\n // id (fresh authoring, junk reference) would dangle, so skip the element\n if (!opts.relationshipId || /^r?Id?(0|undefined)?$/i.test(opts.relationshipId)) return undefined;\n const auto =\n opts.autoUpdate !== undefined ? `<c:autoUpdate val=\"${opts.autoUpdate ? 1 : 0}\"/>` : \"\";\n return `<c:externalData r:id=\"${escapeXml(opts.relationshipId)}\">${auto}</c:externalData>`;\n}\n\nfunction stringifyHeaderFooter(opts: ChartHeaderFooterOptions): string {\n const parts: string[] = [];\n if (opts.oddHeader !== undefined)\n parts.push(`<c:oddHeader>${escapeXml(opts.oddHeader)}</c:oddHeader>`);\n if (opts.oddFooter !== undefined)\n parts.push(`<c:oddFooter>${escapeXml(opts.oddFooter)}</c:oddFooter>`);\n if (opts.evenHeader !== undefined)\n parts.push(`<c:evenHeader>${escapeXml(opts.evenHeader)}</c:evenHeader>`);\n if (opts.evenFooter !== undefined)\n parts.push(`<c:evenFooter>${escapeXml(opts.evenFooter)}</c:evenFooter>`);\n if (opts.firstHeader !== undefined)\n parts.push(`<c:firstHeader>${escapeXml(opts.firstHeader)}</c:firstHeader>`);\n if (opts.firstFooter !== undefined)\n parts.push(`<c:firstFooter>${escapeXml(opts.firstFooter)}</c:firstFooter>`);\n const attrs: string[] = [];\n if (opts.alignWithMargins !== undefined)\n attrs.push(`alignWithMargins=\"${opts.alignWithMargins ? 1 : 0}\"`);\n if (opts.differentOddEven !== undefined)\n attrs.push(`differentOddEven=\"${opts.differentOddEven ? 1 : 0}\"`);\n if (opts.differentFirst !== undefined)\n attrs.push(`differentFirst=\"${opts.differentFirst ? 1 : 0}\"`);\n const attrStr = attrs.length ? \" \" + attrs.join(\" \") : \"\";\n if (parts.length === 0) return `<c:headerFooter${attrStr}/>`;\n return `<c:headerFooter${attrStr}>${parts.join(\"\")}</c:headerFooter>`;\n}\n\nfunction stringifyPageMargins(opts: ChartPageMarginsOptions): string {\n // CT_PageMargins attributes are all XSD use=\"required\". Fill Office default\n // margins (inches) for any the caller omits so emission is always schema-valid.\n const l = opts.left ?? 0.7;\n const r = opts.right ?? 0.7;\n const t = opts.top ?? 0.75;\n const b = opts.bottom ?? 0.75;\n const header = opts.header ?? 0.3;\n const footer = opts.footer ?? 0.3;\n return `<c:pageMargins l=\"${l}\" r=\"${r}\" t=\"${t}\" b=\"${b}\" header=\"${header}\" footer=\"${footer}\"/>`;\n}\n\nfunction stringifyPageSetup(opts: ChartPageSetupOptions): string {\n const attrs: string[] = [];\n if (opts.paperSize !== undefined) attrs.push(`paperSize=\"${opts.paperSize}\"`);\n if (opts.paperHeight !== undefined) attrs.push(`paperHeight=\"${escapeXml(opts.paperHeight)}\"`);\n if (opts.paperWidth !== undefined) attrs.push(`paperWidth=\"${escapeXml(opts.paperWidth)}\"`);\n if (opts.firstPageNumber !== undefined) attrs.push(`firstPageNumber=\"${opts.firstPageNumber}\"`);\n if (opts.orientation !== undefined) attrs.push(`orientation=\"${opts.orientation}\"`);\n if (opts.blackAndWhite !== undefined) attrs.push(`blackAndWhite=\"${opts.blackAndWhite ? 1 : 0}\"`);\n if (opts.draft !== undefined) attrs.push(`draft=\"${opts.draft ? 1 : 0}\"`);\n if (opts.useFirstPageNumber !== undefined)\n attrs.push(`useFirstPageNumber=\"${opts.useFirstPageNumber ? 1 : 0}\"`);\n if (opts.horizontalDpi !== undefined) attrs.push(`horizontalDpi=\"${opts.horizontalDpi}\"`);\n if (opts.verticalDpi !== undefined) attrs.push(`verticalDpi=\"${opts.verticalDpi}\"`);\n if (opts.copies !== undefined) attrs.push(`copies=\"${opts.copies}\"`);\n if (attrs.length === 0) return `<c:pageSetup/>`;\n return `<c:pageSetup ${attrs.join(\" \")}/>`;\n}\n\nfunction stringifyPrintSettings(opts: PrintSettingsOptions): string {\n const parts: string[] = [];\n if (opts.headerFooter) parts.push(stringifyHeaderFooter(opts.headerFooter));\n if (opts.pageMargins) parts.push(stringifyPageMargins(opts.pageMargins));\n if (opts.pageSetup) parts.push(stringifyPageSetup(opts.pageSetup));\n if (opts.legacyDrawingId !== undefined)\n parts.push(`<c:legacyDrawingHF r:id=\"${escapeXml(opts.legacyDrawingId)}\"/>`);\n return `<c:printSettings>${parts.join(\"\")}</c:printSettings>`;\n}\n\n// Header fields shared by the main group and combo secondary groups.\ninterface ChartGroupHeaderFields {\n type: ChartType;\n grouping?: ChartGrouping;\n radarStyle?: RadarStyle;\n ofPieType?: OfPieType;\n wireframe?: boolean;\n varyColors?: boolean;\n}\n\nfunction chartTypeHeader(opts: ChartGroupHeaderFields & { threeD?: boolean }): string {\n const tag = opts.threeD ? CHART_TYPE_TAGS_3D[opts.type] : CHART_TYPE_TAGS[opts.type];\n if (!tag) throw new Error(`Unsupported chart type: ${opts.type}`);\n\n const headerParts: string[] = [];\n\n switch (opts.type) {\n case \"column\":\n case \"bar\":\n headerParts.push(valEl(\"c:barDir\", opts.type === \"column\" ? \"col\" : \"bar\"));\n headerParts.push(valEl(\"c:grouping\", opts.grouping ?? \"clustered\"));\n break;\n case \"line\":\n case \"area\":\n headerParts.push(valEl(\"c:grouping\", opts.grouping ?? \"standard\"));\n break;\n case \"scatter\":\n headerParts.push(valEl(\"c:scatterStyle\", \"line\"));\n break;\n case \"radar\":\n headerParts.push(valEl(\"c:radarStyle\", opts.radarStyle ?? \"standard\"));\n break;\n case \"ofPie\":\n headerParts.push(valEl(\"c:ofPieType\", opts.ofPieType ?? \"pie\"));\n break;\n case \"surface\":\n // EG_SurfaceChartShared head: wireframe precedes ser.\n if (opts.wireframe !== undefined)\n headerParts.push(`<c:wireframe${boolVal(opts.wireframe)}/>`);\n break;\n }\n\n // c:varyColors sits right before ser in every chart-group content model;\n // emitted only when the source carried it (corpus is mixed).\n if (opts.varyColors !== undefined) headerParts.push(`<c:varyColors${boolVal(opts.varyColors)}/>`);\n\n return `<${tag}>${headerParts.join(\"\")}`;\n}\n\nfunction chartTypeFooter(opts: ChartSpaceOptions, ctx: WriteContext): string {\n const tag = opts.threeD ? CHART_TYPE_TAGS_3D[opts.type] : CHART_TYPE_TAGS[opts.type];\n const parts: string[] = [];\n\n // Type-specific children between ser and axId, in XSD document order.\n // Group-tail elements (dropLines for line/area) lead because they sit inside\n // EG_*ChartShared right after ser/dLbls, before the outer-type decorations.\n switch (opts.type) {\n case \"column\":\n case \"bar\":\n if (opts.gapWidth !== undefined) parts.push(valEl(\"c:gapWidth\", opts.gapWidth));\n if (opts.threeD) {\n // CT_Bar3DChart: gapWidth → gapDepth → shape\n if (opts.gapDepth !== undefined) parts.push(valEl(\"c:gapDepth\", opts.gapDepth));\n if (opts.shape !== undefined) parts.push(valEl(\"c:shape\", opts.shape));\n } else {\n // CT_BarChart: gapWidth → overlap → serLines\n if (opts.overlap !== undefined) parts.push(valEl(\"c:overlap\", opts.overlap));\n parts.push(stringifyChartLines(\"c:serLines\", opts.seriesLines, ctx));\n }\n break;\n case \"line\":\n // EG_LineChartShared tail: dropLines (after ser/dLbls)\n parts.push(stringifyChartLines(\"c:dropLines\", opts.dropLines, ctx));\n if (!opts.threeD) {\n // CT_LineChart: dropLines → hiLowLines → upDownBars → marker → smooth\n parts.push(stringifyChartLines(\"c:hiLowLines\", opts.highLowLines, ctx));\n if (opts.upDownBars) parts.push(stringifyUpDownBars(opts.upDownBarsGapWidth));\n if (opts.markers !== undefined) parts.push(`<c:marker${boolVal(opts.markers)}/>`);\n if (opts.smooth !== undefined) parts.push(`<c:smooth${boolVal(opts.smooth)}/>`);\n } else if (opts.gapDepth !== undefined) {\n // CT_Line3DChart: dropLines → gapDepth\n parts.push(valEl(\"c:gapDepth\", opts.gapDepth));\n }\n break;\n case \"area\":\n // EG_AreaChartShared tail: dropLines\n parts.push(stringifyChartLines(\"c:dropLines\", opts.dropLines, ctx));\n if (opts.threeD && opts.gapDepth !== undefined)\n parts.push(valEl(\"c:gapDepth\", opts.gapDepth));\n break;\n case \"stock\":\n // CT_StockChart: dropLines → hiLowLines → upDownBars\n parts.push(stringifyChartLines(\"c:dropLines\", opts.dropLines, ctx));\n parts.push(stringifyChartLines(\"c:hiLowLines\", opts.highLowLines, ctx));\n if (opts.upDownBars) parts.push(stringifyUpDownBars(opts.upDownBarsGapWidth));\n break;\n case \"pie\":\n // CT_PieChart: firstSliceAng (absent on CT_Pie3DChart).\n if (!opts.threeD && opts.firstSliceAngle !== undefined)\n parts.push(valEl(\"c:firstSliceAng\", opts.firstSliceAngle));\n break;\n case \"doughnut\":\n // CT_DoughnutChart: firstSliceAng → holeSize. holeSize is XSD-optional\n // (default 10) but the Open XML SDK's stricter schema requires it —\n // always emit so both validators pass with identical rendering.\n if (opts.firstSliceAngle !== undefined)\n parts.push(valEl(\"c:firstSliceAng\", opts.firstSliceAngle));\n parts.push(valEl(\"c:holeSize\", opts.holeSize ?? 10));\n break;\n case \"bubble\":\n // CT_BubbleChart: bubbleScale → showNegBubbles → sizeRepresents\n if (opts.bubbleScale !== undefined) parts.push(valEl(\"c:bubbleScale\", opts.bubbleScale));\n if (opts.showNegativeBubbles !== undefined)\n parts.push(`<c:showNegBubbles${boolVal(opts.showNegativeBubbles)}/>`);\n if (opts.sizeRepresents !== undefined)\n parts.push(valEl(\"c:sizeRepresents\", xsdSizeRepresents.to(opts.sizeRepresents)));\n break;\n case \"ofPie\":\n // CT_OfPieChart: gapWidth → splitType → splitPos → custSplit → secondPieSize → serLines\n if (opts.gapWidth !== undefined) parts.push(valEl(\"c:gapWidth\", opts.gapWidth));\n if (opts.splitType !== undefined)\n parts.push(valEl(\"c:splitType\", xsdSplitType.to(opts.splitType)));\n if (opts.splitPosition !== undefined) parts.push(valEl(\"c:splitPos\", opts.splitPosition));\n if (opts.customSplitPoints?.length) {\n const pts = opts.customSplitPoints.map((p) => valEl(\"c:secondPiePt\", p)).join(\"\");\n parts.push(`<c:custSplit>${pts}</c:custSplit>`);\n }\n if (opts.secondPieSize !== undefined)\n parts.push(valEl(\"c:secondPieSize\", opts.secondPieSize));\n parts.push(stringifyChartLines(\"c:serLines\", opts.seriesLines, ctx));\n break;\n case \"surface\":\n // EG_SurfaceChartShared tail: bandFmts (after ser, before axId)\n if (opts.bandFormats?.length) parts.push(stringifyBandFormats(opts.bandFormats));\n break;\n }\n\n // Axes (pie/doughnut have none). The axId sequence must reference the axes\n // actually emitted below — use the round-tripped sequence when present\n // (legacy files may carry dangling axId val=\"0\"), else derive it from the\n // effective axis list, never hardcode. axisIds only applies alongside an\n // explicit axes list; without axes the default axes carry their own ids.\n if (!NO_AXES_TYPES.has(opts.type)) {\n const ids = opts.axes && opts.axisIds ? opts.axisIds : axesFor(opts).map((axis) => axis.id);\n for (const id of ids) parts.push(valEl(\"c:axId\", id));\n }\n\n return `${parts.join(\"\")}</${tag}>`;\n}\n\n// ── Series sub-elements (CT_Marker / CT_DPt / CT_PictureOptions) ──\n\nfunction stringifyMarker(opts: MarkerOptions, ctx: WriteContext): string {\n const parts: string[] = [];\n if (opts.symbol !== undefined) parts.push(valEl(\"c:symbol\", opts.symbol));\n if (opts.size !== undefined) parts.push(valEl(\"c:size\", opts.size));\n parts.push(chartSpPr(opts.shapeProperties, ctx));\n return `<c:marker>${parts.join(\"\")}</c:marker>`;\n}\n\nfunction stringifyPictureOptions(opts: PictureOptionsOptions): string {\n const parts: string[] = [];\n if (opts.applyToFront !== undefined) parts.push(`<c:applyToFront${boolVal(opts.applyToFront)}/>`);\n if (opts.applyToSides !== undefined) parts.push(`<c:applyToSides${boolVal(opts.applyToSides)}/>`);\n if (opts.applyToEnd !== undefined) parts.push(`<c:applyToEnd${boolVal(opts.applyToEnd)}/>`);\n if (opts.pictureFormat !== undefined) parts.push(valEl(\"c:pictureFormat\", opts.pictureFormat));\n if (opts.pictureStackUnit !== undefined)\n parts.push(valEl(\"c:pictureStackUnit\", opts.pictureStackUnit));\n return `<c:pictureOptions>${parts.join(\"\")}</c:pictureOptions>`;\n}\n\nfunction stringifyDataPoint(opts: DataPointOptions, ctx: WriteContext): string {\n // CT_DPt: idx → invertIfNegative → marker → bubble3D → explosion → spPr → pictureOptions\n const parts: string[] = [valEl(\"c:idx\", opts.index)];\n if (opts.invertIfNegative !== undefined)\n parts.push(`<c:invertIfNegative${boolVal(opts.invertIfNegative)}/>`);\n if (opts.marker) parts.push(stringifyMarker(opts.marker, ctx));\n if (opts.bubble3D !== undefined) parts.push(`<c:bubble3D${boolVal(opts.bubble3D)}/>`);\n if (opts.explosion !== undefined) parts.push(valEl(\"c:explosion\", opts.explosion));\n parts.push(chartSpPr(opts.shapeProperties, ctx));\n if (opts.pictureOptions) parts.push(stringifyPictureOptions(opts.pictureOptions));\n return `<c:dPt>${parts.join(\"\")}</c:dPt>`;\n}\n\n// ── Series XML ──\n\nfunction stringifySeries(\n index: number,\n series: ChartSeriesData | ScatterSeriesData,\n opts: ChartSpaceOptions,\n ctx: WriteContext,\n groupType?: ChartType,\n): string {\n // A combo chart's second group keeps its own type for the per-series\n // branches below (marker on line, invertIfNegative on bar, …).\n const chartType = groupType ?? opts.type;\n const parts: string[] = [];\n const s = series as ChartSeriesData;\n\n // EG_SerShared: idx, order, tx, spPr. Round-tripped series keep their\n // chart-wide idx/order (combo groups interleave them); fresh series number\n // by position.\n parts.push(valEl(\"c:idx\", s.index ?? index));\n parts.push(valEl(\"c:order\", s.order ?? index));\n if (series.nameLiteral && series.name !== undefined) {\n parts.push(`<c:tx><c:v>${escapeXml(series.name)}</c:v></c:tx>`);\n } else if (series.name !== undefined || series.nameFormula !== undefined)\n parts.push(`<c:tx>${stringifyStrRef([series.name], series.nameFormula)}</c:tx>`);\n // Series spPr is optional in CT_Ser — emit only when the source carried one\n // (round-trip); fresh series keep the bare form like legacy Word files.\n parts.push(chartSpPr(s.shapeProperties, ctx));\n\n // type-specific head before dPt (per CT_xxxSer content model)\n if (chartType === \"line\" || chartType === \"scatter\" || chartType === \"radar\") {\n if (s.marker) parts.push(stringifyMarker(s.marker, ctx));\n } else if (chartType === \"column\" || chartType === \"bar\") {\n if (s.invertIfNegative !== undefined)\n parts.push(`<c:invertIfNegative${boolVal(s.invertIfNegative)}/>`);\n if (s.pictureOptions) parts.push(stringifyPictureOptions(s.pictureOptions));\n } else if (chartType === \"area\") {\n if (s.pictureOptions) parts.push(stringifyPictureOptions(s.pictureOptions));\n } else if (chartType === \"bubble\") {\n if (s.invertIfNegative !== undefined)\n parts.push(`<c:invertIfNegative${boolVal(s.invertIfNegative)}/>`);\n } else if (chartType === \"pie\" || chartType === \"doughnut\" || chartType === \"ofPie\") {\n if (s.explosion !== undefined) parts.push(valEl(\"c:explosion\", s.explosion));\n }\n\n // shared decorations (XSD order: dPt → dLbls → trendline → errBars)\n if (s.dataPoints) {\n for (const dp of s.dataPoints) parts.push(stringifyDataPoint(dp, ctx));\n }\n if (s.dataLabels) parts.push(stringifyDataLabels(s.dataLabels, ctx));\n if (s.trendlines) {\n for (const tl of s.trendlines) parts.push(stringifyTrendline(tl));\n }\n if (s.errorBars) parts.push(stringifyErrBars(s.errorBars));\n\n // data references (type-specific element names)\n if (chartType === \"bubble\") {\n const bs = series as BubbleSeriesData;\n parts.push(`<c:xVal>${stringifyNumRef(bs.xValues)}</c:xVal>`);\n parts.push(`<c:yVal>${stringifyNumRef(bs.yValues)}</c:yVal>`);\n parts.push(`<c:bubbleSize>${stringifyNumRef(bs.bubbleSize)}</c:bubbleSize>`);\n } else if (chartType === \"scatter\") {\n if (\"xValues\" in series) {\n // True numeric axes: c:xVal/c:yVal are CT_NumDataSource references.\n parts.push(`<c:xVal>${stringifyNumRef(series.xValues)}</c:xVal>`);\n parts.push(\n `<c:yVal>${stringifyNumRef(series.yValues, series.valueFormula, series.formatCode)}</c:yVal>`,\n );\n } else {\n // Label-x shape: x values share the category source model — string\n // labels round-trip through c:strRef like regular categories.\n parts.push(`<c:xVal>${stringifyCategorySource(opts)}</c:xVal>`);\n parts.push(`<c:yVal>${stringifyNumRef(s.values, s.valueFormula, s.formatCode)}</c:yVal>`);\n }\n } else if (hasCategoryData(opts)) {\n parts.push(`<c:cat>${stringifyCategorySource(opts)}</c:cat>`);\n parts.push(\n `<c:val>${s.valueLiteral ? stringifyNumLitList(s.values, s.formatCode) : stringifyNumRef(s.values, s.valueFormula, s.formatCode)}</c:val>`,\n );\n } else {\n parts.push(\n `<c:val>${s.valueLiteral ? stringifyNumLitList(s.values, s.formatCode) : stringifyNumRef(s.values, s.valueFormula, s.formatCode)}</c:val>`,\n );\n }\n\n // type-specific tail after data references\n if ((chartType === \"line\" || chartType === \"scatter\") && s.smooth !== undefined) {\n parts.push(`<c:smooth${boolVal(s.smooth)}/>`);\n }\n if ((chartType === \"column\" || chartType === \"bar\") && s.shape !== undefined) {\n parts.push(valEl(\"c:shape\", s.shape));\n }\n if (chartType === \"bubble\" && s.bubble3D !== undefined) {\n parts.push(`<c:bubble3D${boolVal(s.bubble3D)}/>`);\n }\n\n // CT_xxxSer tail — verbatim series extLst (c16:uniqueId's home).\n if (s.ext) parts.push(`<c:extLst>${s.ext}</c:extLst>`);\n\n return `<c:ser>${parts.join(\"\")}</c:ser>`;\n}\n\n// CT_ChartLines: a bare element or an spPr carrier (true keeps the bare form)\nfunction stringifyChartLines(\n tag: string,\n opts: boolean | ChartLinesOptions | undefined,\n ctx: WriteContext,\n): string {\n if (opts === undefined || opts === false) return \"\";\n if (opts === true) return emptyEl(tag);\n return `<${tag}>${chartSpPr(opts.shapeProperties, ctx)}</${tag}>`;\n}\n\n/** Read any CT_ChartLines element: true when bare, decorations when carried. */\nfunction readChartLines(\n parent: XmlElement,\n tag: string,\n ctx: ReadContext,\n): boolean | ChartLinesOptions | undefined {\n const el = findChild(parent, tag);\n if (!el) return undefined;\n const spPrEl = findChild(el, \"c:spPr\");\n if (!spPrEl) return true;\n const lines: ChartLinesOptions = {};\n const shapeProperties = shapePropertiesDesc.parse(spPrEl, ctx);\n if (shapeProperties) lines.shapeProperties = shapeProperties;\n return lines;\n}\n\n/** Read one secondary chart group (combo): own series, flags, and 2D group tail. */\nfunction readSecondaryGroup(\n secondaryEl: XmlElement,\n ctx: ReadContext,\n): SecondaryChartGroupOptions | undefined {\n const mapping = TAG_TO_CHART_TYPE[secondaryEl.name ?? \"\"];\n if (!mapping) return undefined;\n let secType: ChartType = mapping.type;\n const isBarTag = secondaryEl.name === \"c:barChart\" || secondaryEl.name === \"c:bar3DChart\";\n if (isBarTag) {\n const barDir = findChild(secondaryEl, \"c:barDir\");\n const barDirVal = barDir ? attr(barDir, \"val\") : undefined;\n if (barDirVal === \"bar\") secType = \"bar\";\n else if (barDirVal === \"col\") secType = \"column\";\n }\n const g: SecondaryChartGroupOptions = { type: secType, series: [] };\n const grouping = readValStr(secondaryEl, \"c:grouping\");\n if (grouping) g.grouping = grouping as ChartGrouping;\n const varyColors = readBoolAttr(secondaryEl, \"c:varyColors\");\n if (varyColors !== undefined) g.varyColors = varyColors;\n const groupLabels = readDataLabels(secondaryEl, ctx);\n if (groupLabels) g.dataLabels = groupLabels;\n // Group tails in XSD document order — same elements the main group reads.\n if (secType === \"bar\" || secType === \"column\") {\n const gapWidth = readValNum(secondaryEl, \"c:gapWidth\");\n if (gapWidth !== undefined) g.gapWidth = gapWidth;\n if (!mapping.threeD) {\n const overlap = readValNum(secondaryEl, \"c:overlap\");\n if (overlap !== undefined) g.overlap = overlap;\n } else {\n const gapDepth = readValNum(secondaryEl, \"c:gapDepth\");\n if (gapDepth !== undefined) g.gapDepth = gapDepth;\n }\n const seriesLines = readChartLines(secondaryEl, \"c:serLines\", ctx);\n if (seriesLines !== undefined) g.seriesLines = seriesLines;\n } else if (secType === \"line\") {\n const dropLines = readChartLines(secondaryEl, \"c:dropLines\", ctx);\n if (dropLines !== undefined) g.dropLines = dropLines;\n const highLowLines = readChartLines(secondaryEl, \"c:hiLowLines\", ctx);\n if (highLowLines !== undefined) g.highLowLines = highLowLines;\n const upDownBars = findChild(secondaryEl, \"c:upDownBars\");\n if (upDownBars) {\n g.upDownBars = true;\n const gw = readValNum(upDownBars, \"c:gapWidth\");\n if (gw !== undefined) g.upDownBarsGapWidth = gw;\n }\n const markers = readBoolAttr(secondaryEl, \"c:marker\");\n if (markers !== undefined) g.markers = markers;\n const smooth = readBoolAttr(secondaryEl, \"c:smooth\");\n if (smooth !== undefined) g.smooth = smooth;\n } else if (secType === \"area\") {\n const dropLines = readChartLines(secondaryEl, \"c:dropLines\", ctx);\n if (dropLines !== undefined) g.dropLines = dropLines;\n }\n const secAxIds = children(secondaryEl, \"c:axId\");\n if (secAxIds.length > 0) {\n const ids = secAxIds.map((e) => Number(attr(e, \"val\"))).filter((n) => !isNaN(n));\n if (ids.length > 0) g.axisIds = ids;\n }\n const secSeries: ChartSeriesData[] = [];\n for (const serEl of children(secondaryEl, \"c:ser\")) {\n const { name, literal: nameLiteral } = readSeriesName(serEl);\n const txEl = findChild(serEl, \"c:tx\");\n const nameFormula = txEl ? readRefMeta(txEl).formula : undefined;\n const valueEl = findChild(serEl, \"c:val\") ?? findChild(serEl, \"c:yVal\");\n const valueLiteral = valueEl ? findChild(valueEl, \"c:numLit\") !== undefined : false;\n const values = valueEl ? readNumCache(valueEl) : [];\n const valMeta = valueEl ? readRefMeta(valueEl) : {};\n secSeries.push({\n name,\n ...(nameLiteral ? { nameLiteral } : {}),\n ...(nameFormula ? { nameFormula } : {}),\n ...(valueLiteral ? { valueLiteral } : {}),\n ...(valMeta.formula ? { valueFormula: valMeta.formula } : {}),\n ...(valMeta.formatCode ? { formatCode: valMeta.formatCode } : {}),\n values,\n ...readSeriesCommon(serEl, ctx),\n });\n }\n g.series = secSeries;\n return g;\n}\n\n// ── Secondary chart group (combo charts) ──\n\nfunction stringifySecondaryGroup(\n g: SecondaryChartGroupOptions,\n opts: ChartSpaceOptions,\n ctx: WriteContext,\n): string {\n const parts: string[] = [chartTypeHeader(g)];\n for (const [i, series] of (g.series ?? []).entries()) {\n parts.push(stringifySeries(i, series, opts, ctx, g.type));\n }\n if (g.dataLabels) parts.push(stringifyDataLabels(g.dataLabels, ctx));\n // Group tails in XSD document order (2D secondary groups only — same order\n // chartTypeFooter emits for the main group).\n switch (g.type) {\n case \"bar\":\n case \"column\":\n // CT_BarChart: gapWidth → overlap → serLines\n if (g.gapWidth !== undefined) parts.push(valEl(\"c:gapWidth\", g.gapWidth));\n if (g.overlap !== undefined) parts.push(valEl(\"c:overlap\", g.overlap));\n parts.push(stringifyChartLines(\"c:serLines\", g.seriesLines, ctx));\n break;\n case \"line\":\n // CT_LineChart: dropLines → hiLowLines → upDownBars → marker → smooth\n parts.push(stringifyChartLines(\"c:dropLines\", g.dropLines, ctx));\n parts.push(stringifyChartLines(\"c:hiLowLines\", g.highLowLines, ctx));\n if (g.upDownBars) parts.push(stringifyUpDownBars(g.upDownBarsGapWidth));\n if (g.markers !== undefined) parts.push(`<c:marker${boolVal(g.markers)}/>`);\n if (g.smooth !== undefined) parts.push(`<c:smooth${boolVal(g.smooth)}/>`);\n break;\n case \"area\":\n // EG_AreaChartShared tail: dropLines\n parts.push(stringifyChartLines(\"c:dropLines\", g.dropLines, ctx));\n break;\n case \"scatter\":\n // CT_ScatterChart tail is nothing beyond axId.\n break;\n }\n for (const id of g.axisIds ?? []) parts.push(valEl(\"c:axId\", id));\n // Secondary groups are 2D-only; the header emitted the opening tag, so the\n // group element must close here or the chart part is not well-formed.\n return `${parts.join(\"\")}</${CHART_TYPE_TAGS[g.type]}>`;\n}\n\n// ── Title XML ──\n\n// Same c:rich run shape for chart and axis titles so parse reuses readTitleText.\nfunction stringifyTitle(title: string | ChartTitleOptions, ctx: WriteContext): string {\n if (typeof title !== \"string\") {\n const parts: string[] = [];\n if (title.text !== undefined) {\n parts.push(\n typeof title.text === \"string\"\n ? `<c:tx><c:rich><a:bodyPr/><a:lstStyle/><a:p><a:r><a:t>${escapeXml(title.text)}</a:t></a:r></a:p></c:rich></c:tx>`\n : `<c:tx><c:rich>${textBodyDesc.stringify(title.text, ctx) ?? \"\"}</c:rich></c:tx>`,\n );\n }\n if (title.layout !== undefined) {\n parts.push(\n title.layout === true\n ? \"<c:layout/>\"\n : stringifyLayout(title.layout as ManualLayoutOptions),\n );\n }\n if (title.overlay !== undefined) parts.push(`<c:overlay${boolVal(title.overlay)}/>`);\n if (title.shapeProperties) parts.push(chartSpPr(title.shapeProperties, ctx));\n if (title.textProperties) {\n parts.push(`<c:txPr>${textBodyDesc.stringify(title.textProperties, ctx) ?? \"\"}</c:txPr>`);\n }\n return `<c:title>${parts.join(\"\")}</c:title>`;\n }\n return `<c:title><c:tx><c:rich><a:bodyPr/><a:lstStyle/><a:p><a:r><a:t>${escapeXml(title)}</a:t></a:r></a:p></c:rich></c:tx></c:title>`;\n}\n\n// ── Legend XML ──\n\nfunction stringifyLegendEntry(entry: LegendEntryOptions, ctx: WriteContext): string {\n // CT_LegendEntry: idx → choice(delete | EG_LegendEntryData[txPr]).\n if (entry.delete) {\n return `<c:legendEntry><c:idx val=\"${entry.index}\"/><c:delete val=\"1\"/></c:legendEntry>`;\n }\n if (entry.textProperties) {\n const txPr = textBodyDesc.stringify(entry.textProperties, ctx) ?? \"\";\n return `<c:legendEntry><c:idx val=\"${entry.index}\"/><c:txPr>${txPr}</c:txPr></c:legendEntry>`;\n }\n return \"\";\n}\n\nfunction stringifyLegend(opts: ChartSpaceOptions, ctx: WriteContext): string {\n // A parsed legend that carried no c:legendPos must stay without one\n // (showLegend===true marks the round-trip path); fresh charts keep the\n // default bottom-position emission.\n const pos =\n opts.legendPosition !== undefined\n ? `<c:legendPos val=\"${xsdLegendPosition.to(opts.legendPosition)}\"/>`\n : opts.showLegend === true\n ? \"\"\n : `<c:legendPos val=\"b\"/>`;\n const entries = (opts.legendEntries ?? []).map((e) => stringifyLegendEntry(e, ctx)).join(\"\");\n const layout =\n opts.legendLayout === true\n ? \"<c:layout/>\"\n : opts.legendLayout\n ? stringifyLayout(opts.legendLayout)\n : \"\";\n const overlay =\n opts.legendOverlay !== undefined ? `<c:overlay${boolVal(opts.legendOverlay)}/>` : \"\";\n const spPr = chartSpPr(opts.legendShapeProperties, ctx);\n const txPr = opts.legendTextProperties\n ? `<c:txPr>${textBodyDesc.stringify(opts.legendTextProperties, ctx) ?? \"\"}</c:txPr>`\n : \"\";\n return `<c:legend>${pos}${entries}${layout}${overlay}${spPr}${txPr}</c:legend>`;\n}\n\nfunction stringifyPivotSource(opts: PivotSourceOptions): string {\n return `<c:pivotSource><c:name>${escapeXml(opts.name)}</c:name><c:fmtId val=\"${opts.formatId}\"/></c:pivotSource>`;\n}\n\nfunction stringifyPivotFormats(\n formats: readonly ChartPivotFormatOptions[],\n ctx: WriteContext,\n): string {\n const inner = formats\n .map((f) => {\n let entry = `<c:idx val=\"${f.index}\"/>`;\n if (f.marker) entry += stringifyMarker(f.marker, ctx);\n return `<c:pivotFmt>${entry}</c:pivotFmt>`;\n })\n .join(\"\");\n return `<c:pivotFmts>${inner}</c:pivotFmts>`;\n}\n\nfunction stringifyBandFormats(formats: readonly BandFormatOptions[]): string {\n const inner = formats.map((f) => `<c:bandFmt><c:idx val=\"${f.index}\"/></c:bandFmt>`).join(\"\");\n return `<c:bandFmts>${inner}</c:bandFmts>`;\n}\n\n// ── Shared boilerplate ──\n\n/**\n * Wrap c:spPr inner content. An empty shape-properties object is a real\n * `<c:spPr/>` placeholder (presence itself is the content), so undefined\n * inner still emits the bare element.\n */\nfunction chartSpPr(opts: ShapePropertiesOptions | undefined, ctx: WriteContext): string {\n if (!opts) return \"\";\n const inner = shapePropertiesDesc.stringify(opts, ctx);\n return `<c:spPr>${inner ?? \"\"}</c:spPr>`;\n}\n\n// ── Axes XML ──\n\n/** AxisOptions with the internal wiring ids guaranteed present. */\ntype WiredAxisOptions = AxisOptions & { id: number; crossAxisId: number };\n\n/** Default bottom category axis (c:catAx) for generated charts. */\nfunction categoryAxis(id: number, crossAxisId: number): WiredAxisOptions {\n return {\n kind: \"category\",\n id,\n crossAxisId,\n scaling: { orientation: \"ascending\" },\n delete: false,\n position: \"bottom\",\n crosses: \"zero\",\n auto: true,\n labelOffset: 100,\n noMultiLevelLabel: false,\n };\n}\n\n/** Default left value axis (c:valAx). */\nfunction valueAxis(id: number, crossAxisId: number): WiredAxisOptions {\n return {\n kind: \"value\",\n id,\n crossAxisId,\n scaling: { orientation: \"ascending\" },\n delete: false,\n position: \"left\",\n numberFormat: \"General\",\n crosses: \"zero\",\n };\n}\n\n/** Default series axis (c:serAx) for surface charts. */\nfunction seriesAxis(id: number, crossAxisId: number): WiredAxisOptions {\n return {\n kind: \"series\",\n id,\n crossAxisId,\n scaling: { orientation: \"ascending\" },\n delete: false,\n position: \"bottom\",\n numberFormat: \"General\",\n crosses: \"zero\",\n tickLabelSkip: 1,\n };\n}\n\n/** Sensible default axes derived from chart type, matching prior hardcoded output. */\nfunction defaultAxesFor(chartType: ChartType, threeD?: boolean): readonly WiredAxisOptions[] {\n if (NO_AXES_TYPES.has(chartType)) return [];\n if (chartType === \"scatter\" || chartType === \"bubble\") {\n return [valueAxis(10, 20), valueAxis(20, 10)];\n }\n if (chartType === \"surface\") {\n return [categoryAxis(10, 20), valueAxis(20, 10), seriesAxis(30, 10)];\n }\n if (chartType === \"stock\") {\n return [categoryAxis(10, 20), valueAxis(20, 10)];\n }\n if (threeD) {\n // 3D bar/line groups take cat + val + series axes (the third axis of a\n // 3-axis group is c:serAx — emitting a second c:catAx breaks MS Office).\n return [categoryAxis(10, 20), valueAxis(20, 10), seriesAxis(30, 10)];\n }\n return [categoryAxis(10, 20), valueAxis(20, 10)];\n}\n\n/** Provided axes override defaults; otherwise defaults are derived from chart type. */\nfunction axesFor(opts: ChartSpaceOptions): readonly WiredAxisOptions[] {\n if (!opts.axes) return defaultAxesFor(opts.type, opts.threeD);\n // Fresh axes may omit their ids (nothing outside the axis pair references\n // them) — fill from the same id slots the default factories use so a\n // partial customization keeps consistent cat/val/ser wiring.\n const slots = defaultAxesFor(opts.type, opts.threeD);\n return opts.axes.map((axis, i) => {\n const slot = slots[i] ?? slots[slots.length - 1]!;\n return {\n ...axis,\n id: axis.id ?? slot.id,\n crossAxisId: axis.crossAxisId ?? slot.crossAxisId,\n };\n });\n}\n\nfunction stringifyAxes(opts: ChartSpaceOptions, ctx: WriteContext): string {\n return axesFor(opts)\n .map((axis) => stringifyAxis(axis, ctx))\n .join(\"\");\n}\n\n// ── Read helpers ──\n\nfunction readStrCache(el: XmlElement): string[] {\n const strRef = findChild(el, \"c:strRef\");\n if (!strRef) return [];\n const strCache = findChild(strRef, \"c:strCache\");\n if (!strCache?.elements) return [];\n const result: string[] = [];\n for (const pt of strCache.elements) {\n if (pt.name === \"c:pt\") {\n const v = findChild(pt, \"c:v\");\n const text = v ? textOf(v) : \"\";\n if (text !== \"\") result.push(text);\n }\n }\n return result;\n}\n\n/** Numeric category labels read as literal text (c:cat > c:numRef > c:numCache). */\nfunction readNumCacheText(el: XmlElement): string[] {\n const numRef = findChild(el, \"c:numRef\");\n if (!numRef) return [];\n const numCache = findChild(numRef, \"c:numCache\");\n if (!numCache?.elements) return [];\n const result: string[] = [];\n for (const pt of numCache.elements) {\n if (pt.name === \"c:pt\") {\n const v = findChild(pt, \"c:v\");\n const text = v ? (textOf(v) ?? \"\") : \"\";\n result.push(text);\n }\n }\n return result;\n}\n\n/** Reference metadata on a data-source slot: the c:f formula and, for numRef,\n * the cached c:formatCode — both round-trip only. */\nfunction readRefMeta(el: XmlElement): { formula?: string; formatCode?: string } {\n const strRef = findChild(el, \"c:strRef\");\n const numRef = strRef ? undefined : findChild(el, \"c:numRef\");\n const ref = strRef ?? numRef;\n const meta: { formula?: string; formatCode?: string } = {};\n if (ref) {\n const f = findChild(ref, \"c:f\");\n const text = f ? textOf(f) : \"\";\n if (text) meta.formula = text;\n }\n if (numRef) {\n const cache = findChild(numRef, \"c:numCache\");\n const fc = cache ? findChild(cache, \"c:formatCode\") : undefined;\n const text = fc ? textOf(fc) : \"\";\n if (text) meta.formatCode = text;\n }\n // c:numLit carries its formatCode as a direct child\n const numLit = strRef || numRef ? undefined : findChild(el, \"c:numLit\");\n if (numLit) {\n const fc = findChild(numLit, \"c:formatCode\");\n const text = fc ? textOf(fc) : \"\";\n if (text) meta.formatCode = text;\n }\n return meta;\n}\n\nfunction readStrLit(el: XmlElement): string[] | undefined {\n const strLit = findChild(el, \"c:strLit\");\n if (!strLit) return undefined;\n const result: string[] = [];\n for (const pt of strLit.elements ?? []) {\n if (pt.name === \"c:pt\") {\n const v = findChild(pt, \"c:v\");\n const text = v ? textOf(v) : \"\";\n if (text !== \"\") result.push(text);\n }\n }\n return result;\n}\n\nfunction readMultiLvlStrCache(el: XmlElement): string[][] | undefined {\n const ref = findChild(el, \"c:multiLvlStrRef\");\n if (!ref) return undefined;\n const cache = findChild(ref, \"c:multiLvlStrCache\");\n if (!cache) return [];\n const levels: string[][] = [];\n for (const lvl of cache.elements ?? []) {\n if (lvl.name !== \"c:lvl\") continue;\n const level: string[] = [];\n for (const pt of lvl.elements ?? []) {\n if (pt.name === \"c:pt\") {\n const v = findChild(pt, \"c:v\");\n const text = v ? textOf(v) : \"\";\n if (text !== \"\") level.push(text);\n }\n }\n levels.push(level);\n }\n return levels;\n}\n\nfunction readNumLitPoints(numLit: XmlElement): number[] {\n const result: number[] = [];\n for (const pt of numLit.elements ?? []) {\n if (pt.name === \"c:pt\") {\n const v = findChild(pt, \"c:v\");\n const text = v ? textOf(v) : \"\";\n if (text !== \"\") result.push(Number(text));\n }\n }\n return result;\n}\n\n/** A scatter series carries numeric x values when c:xVal holds the\n * CT_NumDataSource choice (numRef/numLit); the label-x shape stringifies\n * x as a strRef category source instead. */\nfunction hasNumericXRef(serEl: XmlElement): boolean {\n const xVal = findChild(serEl, \"c:xVal\");\n return (\n xVal !== undefined &&\n (findChild(xVal, \"c:numRef\") !== undefined || findChild(xVal, \"c:numLit\") !== undefined)\n );\n}\n\nfunction readNumCache(el: XmlElement): number[] {\n // c:numLit literal points (CT_NumDataSource choice: numRef | numLit)\n const numLit = findChild(el, \"c:numLit\");\n if (numLit) return readNumLitPoints(numLit);\n const numRef = findChild(el, \"c:numRef\");\n if (!numRef) return [];\n const numCache = findChild(numRef, \"c:numCache\");\n if (!numCache?.elements) return [];\n const result: number[] = [];\n for (const pt of numCache.elements) {\n if (pt.name === \"c:pt\") {\n const v = findChild(pt, \"c:v\");\n const text = v ? textOf(v) : \"\";\n if (text !== \"\") result.push(Number(text));\n }\n }\n return result;\n}\n\nfunction readSeriesName(serEl: XmlElement): { name: string | undefined; literal: boolean } {\n const tx = findChild(serEl, \"c:tx\");\n if (!tx) return { name: undefined, literal: false };\n // CT_SerTx choice: c:strRef (reference) or bare c:v (inline literal).\n const v = findChild(tx, \"c:v\");\n if (v && !findChild(tx, \"c:strRef\")) {\n const text = textOf(v);\n return { name: text !== \"\" ? text : undefined, literal: true };\n }\n const values = readStrCache(tx);\n return { name: values[0] ?? \"\", literal: false };\n}\n\n/** Read a c:title. Plain text stays a string; layout/overlay/spPr/txPr\n * decorations promote it to the ChartTitleOptions object form. */\n/** Read the title's c:tx > c:rich body; undefined when absent or strRef-linked. */\nfunction readTitleBody(\n titleEl: XmlElement,\n ctx: ReadContext,\n): string | TextBodyOptions | undefined {\n const rich = findChild(findChild(titleEl, \"c:tx\") ?? titleEl, \"c:rich\");\n if (!rich) return undefined;\n const body = textBodyDesc.parse(rich, ctx);\n return collapseTitleBody(body);\n}\n\n/**\n * Collapse a parsed title body to its plain text when it is exactly what the\n * string form emits (empty bodyPr/listStyle, one bare run), keeping simple\n * titles readable in the Options JSON.\n */\nfunction collapseTitleBody(body: TextBodyOptions): string | TextBodyOptions {\n if (body.listStyle !== undefined) return body;\n if (body.bodyProperties !== undefined && Object.keys(body.bodyProperties).length > 0) return body;\n const ps = body.paragraphs ?? [];\n if (ps.length !== 1) return body;\n const p = ps[0];\n if (p === undefined) return body;\n if (typeof p === \"string\") return p;\n if (p.properties !== undefined || p.children !== undefined) return body;\n if (p.endParagraphProperties !== undefined && p.endParagraphProperties !== false) return body;\n return p.text ?? \"\";\n}\n\nfunction readTitle(titleEl: XmlElement, ctx: ReadContext): string | ChartTitleOptions {\n const body = readTitleBody(titleEl, ctx);\n const text = body === undefined ? readTitleText(titleEl) : undefined;\n const layoutEl = findChild(titleEl, \"c:layout\");\n const overlayEl = findChild(titleEl, \"c:overlay\");\n const spPrEl = findChild(titleEl, \"c:spPr\");\n const txPrEl = findChild(titleEl, \"c:txPr\");\n // A structured body must wrap as { text } — returning it bare would land a\n // TextBodyOptions where stringify expects ChartTitleOptions and drop c:tx.\n if (!layoutEl && !overlayEl && !spPrEl && !txPrEl) {\n if (typeof body === \"string\" || body === undefined) return body ?? text ?? \"\";\n return { text: body };\n }\n const title: ChartTitleOptions = {};\n if (body !== undefined) title.text = body;\n else if (text !== undefined) title.text = text;\n if (layoutEl) {\n const manual = readManualLayout(layoutEl);\n title.layout = manual ?? true;\n }\n if (overlayEl) title.overlay = parseOnOff(attr(overlayEl, \"val\")) ?? false;\n if (spPrEl)\n title.shapeProperties = shapePropertiesDesc.parse(spPrEl, ctx) as ShapePropertiesOptions;\n if (txPrEl) title.textProperties = textBodyDesc.parse(txPrEl, ctx);\n return title;\n}\n\nfunction readTitleText(titleEl: XmlElement): string | undefined {\n const tx = findChild(titleEl, \"c:tx\");\n if (!tx?.elements) return undefined;\n for (const child of tx.elements) {\n if (child.name !== \"c:rich\") continue;\n for (const sub of child.elements ?? []) {\n if (sub.name !== \"a:p\") continue;\n for (const r of sub.elements ?? []) {\n if (r.name !== \"a:r\") continue;\n const t = findChild(r, \"a:t\");\n if (t) {\n const text = textOf(t);\n if (text) return text;\n }\n }\n }\n }\n return undefined;\n}\n\n// ── Read helpers: series enhancements ──\n\nfunction readBoolAttr(el: XmlElement, childName: string): boolean | undefined {\n const child = findChild(el, childName);\n if (!child) return undefined;\n const v = attr(child, \"val\");\n // CT_OnOff: absent val or val=\"1\"/\"true\" → true; val=\"0\"/\"false\" → false\n if (v === undefined) return true;\n return parseOnOff(v) ?? true;\n}\n\nfunction readValNum(el: XmlElement, childName: string): number | undefined {\n const child = findChild(el, childName);\n if (!child) return undefined;\n const v = attr(child, \"val\");\n return v !== undefined ? Number(v) : undefined;\n}\n\nfunction readValStr(el: XmlElement, childName: string): string | undefined {\n const child = findChild(el, childName);\n if (!child) return undefined;\n return attr(child, \"val\") ?? undefined;\n}\n\nfunction readNumLit(el: XmlElement, childName: string): number | undefined {\n const child = findChild(el, childName);\n if (!child) return undefined;\n const numLit = findChild(child, \"c:numLit\");\n if (!numLit?.elements) return undefined;\n for (const pt of numLit.elements) {\n if (pt.name === \"c:pt\") {\n const v = findChild(pt, \"c:v\");\n if (v) {\n const text = textOf(v);\n if (text) return Number(text);\n }\n }\n }\n return undefined;\n}\n\nfunction readTrendlines(serEl: XmlElement): TrendlineOptions[] | undefined {\n const tlEls = children(serEl, \"c:trendline\");\n if (tlEls.length === 0) return undefined;\n return tlEls.map((tl) => {\n const opts: TrendlineOptions = {};\n const type = readValStr(tl, \"c:trendlineType\");\n if (type) opts.type = xsdTrendlineType.from(type) as TrendlineOptions[\"type\"];\n const order = readValNum(tl, \"c:order\");\n if (order !== undefined) opts.order = order;\n const period = readValNum(tl, \"c:period\");\n if (period !== undefined) opts.period = period;\n const forward = readValNum(tl, \"c:forward\");\n if (forward !== undefined) opts.forward = forward;\n const backward = readValNum(tl, \"c:backward\");\n if (backward !== undefined) opts.backward = backward;\n const intercept = readValNum(tl, \"c:intercept\");\n if (intercept !== undefined) opts.intercept = intercept;\n const dispRSqr = readBoolAttr(tl, \"c:dispRSqr\");\n if (dispRSqr !== undefined) opts.dispRSqr = dispRSqr;\n const dispEq = readBoolAttr(tl, \"c:dispEq\");\n if (dispEq !== undefined) opts.dispEq = dispEq;\n const nameEl = findChild(tl, \"c:name\");\n const nameText = textOf(nameEl);\n if (nameText) opts.name = nameText;\n const labelFmt = attr(findChild(findChild(tl, \"c:trendlineLbl\"), \"c:numFmt\"), \"formatCode\");\n if (labelFmt) opts.label = { numberFormat: labelFmt } satisfies TrendlineLabelOptions;\n return opts;\n });\n}\n\nfunction readErrBars(serEl: XmlElement): ErrorBarOptions | undefined {\n const ebEl = findChild(serEl, \"c:errBars\");\n if (!ebEl) return undefined;\n const opts: ErrorBarOptions = {};\n const direction = readValStr(ebEl, \"c:errDir\");\n if (direction) opts.direction = direction as ErrorBarOptions[\"direction\"];\n const barType = readValStr(ebEl, \"c:errBarType\");\n if (barType) opts.barType = barType as ErrorBarOptions[\"barType\"];\n const valueType = readValStr(ebEl, \"c:errValType\");\n if (valueType) opts.valueType = xsdErrorValueType.from(valueType) as ErrorBarOptions[\"valueType\"];\n const noEndCap = readBoolAttr(ebEl, \"c:noEndCap\");\n if (noEndCap !== undefined) opts.noEndCap = noEndCap;\n const plusValue = readNumLit(ebEl, \"c:plus\");\n if (plusValue !== undefined) opts.plusValue = plusValue;\n const minusValue = readNumLit(ebEl, \"c:minus\");\n if (minusValue !== undefined) opts.minusValue = minusValue;\n const value = readValNum(ebEl, \"c:val\");\n if (value !== undefined) opts.value = value;\n return opts;\n}\n\nfunction readDataLabels(serEl: XmlElement, ctx: ReadContext): DataLabelsOptions | undefined {\n const dlEl = findChild(serEl, \"c:dLbls\");\n if (!dlEl) return undefined;\n const opts: DataLabelsOptions = {};\n const groupDelete = readBoolAttr(dlEl, \"c:delete\");\n if (groupDelete !== undefined) opts.delete = groupDelete;\n const numFmt = attr(findChild(dlEl, \"c:numFmt\"), \"formatCode\");\n if (numFmt) opts.numberFormat = numFmt;\n const dlSpPr = findChild(dlEl, \"c:spPr\");\n if (dlSpPr) {\n const shapeProperties = shapePropertiesDesc.parse(dlSpPr, ctx);\n if (shapeProperties) opts.shapeProperties = shapeProperties;\n }\n const dlTxPr = findChild(dlEl, \"c:txPr\");\n if (dlTxPr) {\n const textProperties = textBodyDesc.parse(dlTxPr, ctx);\n if (textProperties) opts.textProperties = textProperties;\n }\n const position = readValStr(dlEl, \"c:dLblPos\");\n if (position)\n opts.position = xsdDataLabelPosition.from(position) as DataLabelsOptions[\"position\"];\n const showLegendKey = readBoolAttr(dlEl, \"c:showLegendKey\");\n if (showLegendKey !== undefined) opts.showLegendKey = showLegendKey;\n const showVal = readBoolAttr(dlEl, \"c:showVal\");\n if (showVal !== undefined) opts.showVal = showVal;\n const showCatName = readBoolAttr(dlEl, \"c:showCatName\");\n if (showCatName !== undefined) opts.showCatName = showCatName;\n const showSerName = readBoolAttr(dlEl, \"c:showSerName\");\n if (showSerName !== undefined) opts.showSerName = showSerName;\n const showPercent = readBoolAttr(dlEl, \"c:showPercent\");\n if (showPercent !== undefined) opts.showPercent = showPercent;\n const showBubbleSize = readBoolAttr(dlEl, \"c:showBubbleSize\");\n if (showBubbleSize !== undefined) opts.showBubbleSize = showBubbleSize;\n const showLeaderLines = readBoolAttr(dlEl, \"c:showLeaderLines\");\n if (showLeaderLines !== undefined) opts.showLeaderLines = showLeaderLines;\n const sepEl = findChild(dlEl, \"c:separator\");\n const sepText = textOf(sepEl);\n if (sepText) opts.separator = sepText;\n const lblEls = children(dlEl, \"c:dLbl\");\n if (lblEls.length > 0) {\n opts.labels = lblEls.map((el): DataLabelOptions => {\n const result: DataLabelOptions = { index: readValNum(el, \"c:idx\") ?? 0 };\n if (findChild(el, \"c:delete\")) result.delete = true;\n const layoutEl = findChild(el, \"c:layout\");\n if (layoutEl) result.layout = readManualLayout(layoutEl) ?? true;\n const richEl = findChild(findChild(el, \"c:tx\"), \"c:rich\");\n if (richEl) {\n const text = textBodyDesc.parse(richEl, ctx);\n if (text) result.text = text;\n }\n const numFmt = attr(findChild(el, \"c:numFmt\"), \"formatCode\");\n if (numFmt) result.numberFormat = numFmt;\n const lblSpPr = findChild(el, \"c:spPr\");\n if (lblSpPr) {\n const shapeProperties = shapePropertiesDesc.parse(lblSpPr, ctx);\n if (shapeProperties) result.shapeProperties = shapeProperties;\n }\n const lblTxPr = findChild(el, \"c:txPr\");\n if (lblTxPr) {\n const textProperties = textBodyDesc.parse(lblTxPr, ctx);\n if (textProperties) result.textProperties = textProperties;\n }\n const pos = readValStr(el, \"c:dLblPos\");\n if (pos) result.position = xsdDataLabelPosition.from(pos) as DataLabelOptions[\"position\"];\n for (const flag of [\n \"showLegendKey\",\n \"showVal\",\n \"showCatName\",\n \"showSerName\",\n \"showPercent\",\n \"showBubbleSize\",\n ] as const) {\n const v = readBoolAttr(el, `c:${flag}`);\n if (v !== undefined) result[flag] = v;\n }\n const sep = textOf(findChild(el, \"c:separator\"));\n if (sep) result.separator = sep;\n return result;\n });\n }\n if (findChild(dlEl, \"c:leaderLines\")) opts.leaderLines = true;\n return opts;\n}\n\nfunction readMarker(parent: XmlElement, ctx: ReadContext): MarkerOptions | undefined {\n const el = findChild(parent, \"c:marker\");\n if (!el) return undefined;\n const opts: MarkerOptions = {};\n const symbol = readValStr(el, \"c:symbol\");\n if (symbol) opts.symbol = symbol as MarkerSymbol;\n const size = readValNum(el, \"c:size\");\n if (size !== undefined) opts.size = size;\n const spPr = findChild(el, \"c:spPr\");\n if (spPr) {\n const shapeProperties = shapePropertiesDesc.parse(spPr, ctx);\n if (shapeProperties) opts.shapeProperties = shapeProperties;\n }\n return Object.keys(opts).length ? opts : undefined;\n}\n\nfunction readPictureOptions(parent: XmlElement): PictureOptionsOptions | undefined {\n const el = findChild(parent, \"c:pictureOptions\");\n if (!el) return undefined;\n const opts: PictureOptionsOptions = {};\n const front = readBoolAttr(el, \"c:applyToFront\");\n if (front !== undefined) opts.applyToFront = front;\n const sides = readBoolAttr(el, \"c:applyToSides\");\n if (sides !== undefined) opts.applyToSides = sides;\n const end = readBoolAttr(el, \"c:applyToEnd\");\n if (end !== undefined) opts.applyToEnd = end;\n const fmt = readValStr(el, \"c:pictureFormat\");\n if (fmt) opts.pictureFormat = fmt as PictureFormat;\n const stack = readValNum(el, \"c:pictureStackUnit\");\n if (stack !== undefined) opts.pictureStackUnit = stack;\n return Object.keys(opts).length ? opts : undefined;\n}\n\nfunction readDataPoints(serEl: XmlElement, ctx: ReadContext): DataPointOptions[] | undefined {\n const els = children(serEl, \"c:dPt\");\n if (els.length === 0) return undefined;\n return els.map((el): DataPointOptions => {\n const dp: DataPointOptions = { index: readValNum(el, \"c:idx\") ?? 0 };\n const invertIfNegative = readBoolAttr(el, \"c:invertIfNegative\");\n if (invertIfNegative !== undefined) dp.invertIfNegative = invertIfNegative;\n const marker = readMarker(el, ctx);\n if (marker) dp.marker = marker;\n const bubble3D = readBoolAttr(el, \"c:bubble3D\");\n if (bubble3D !== undefined) dp.bubble3D = bubble3D;\n const explosion = readValNum(el, \"c:explosion\");\n if (explosion !== undefined) dp.explosion = explosion;\n const spPr = findChild(el, \"c:spPr\");\n if (spPr) {\n const shapeProperties = shapePropertiesDesc.parse(spPr, ctx);\n if (shapeProperties) dp.shapeProperties = shapeProperties;\n }\n const pictureOptions = readPictureOptions(el);\n if (pictureOptions) dp.pictureOptions = pictureOptions;\n return dp;\n });\n}\n\n/** Read shared ser enhancement fields (CT_Ser children beyond EG_SerShared). */\nfunction readSeriesCommon(serEl: XmlElement, ctx: ReadContext): Partial<ChartSeriesCommon> {\n const common: Partial<ChartSeriesCommon> = {};\n // EG_SerShared head: idx/order are unique chart-wide, not array positions —\n // combo charts interleave them across groups, so renumbering by position\n // would produce duplicates Excel treats as corruption.\n const idx = readValNum(serEl, \"c:idx\");\n if (idx !== undefined) common.index = idx;\n const order = readValNum(serEl, \"c:order\");\n if (order !== undefined) common.order = order;\n const spPrEl = findChild(serEl, \"c:spPr\");\n // Presence round-trips: a bare <c:spPr/> placeholder stays an empty object\n // (an XSD-valid form legacy Word writes), not dropped.\n if (spPrEl)\n common.shapeProperties = shapePropertiesDesc.parse(spPrEl, ctx) as ShapePropertiesOptions;\n const trendlines = readTrendlines(serEl);\n if (trendlines) common.trendlines = trendlines;\n const errorBars = readErrBars(serEl);\n if (errorBars) common.errorBars = errorBars;\n const dataLabels = readDataLabels(serEl, ctx);\n if (dataLabels) common.dataLabels = dataLabels;\n const dataPoints = readDataPoints(serEl, ctx);\n if (dataPoints) common.dataPoints = dataPoints;\n const marker = readMarker(serEl, ctx);\n if (marker) common.marker = marker;\n const invertIfNegative = readBoolAttr(serEl, \"c:invertIfNegative\");\n if (invertIfNegative !== undefined) common.invertIfNegative = invertIfNegative;\n const smooth = readBoolAttr(serEl, \"c:smooth\");\n if (smooth !== undefined) common.smooth = smooth;\n const explosion = readValNum(serEl, \"c:explosion\");\n if (explosion !== undefined) common.explosion = explosion;\n const pictureOptions = readPictureOptions(serEl);\n if (pictureOptions) common.pictureOptions = pictureOptions;\n const shape = readValStr(serEl, \"c:shape\");\n if (shape) common.shape = shape as BarShape;\n const bubble3D = readBoolAttr(serEl, \"c:bubble3D\");\n if (bubble3D !== undefined) common.bubble3D = bubble3D;\n const extLst = findChild(serEl, \"c:extLst\");\n if (extLst) {\n const inner = stringifyXml(extLst);\n if (inner) common.ext = inner;\n }\n return common;\n}\n\nfunction readView3D(chartEl: XmlElement): View3DOptions | undefined {\n const v3d = findChild(chartEl, \"c:view3D\");\n if (!v3d) return undefined;\n const opts: View3DOptions = {};\n const rotX = readValNum(v3d, \"c:rotX\");\n if (rotX !== undefined) opts.rotX = rotX;\n const hPercent = readValNum(v3d, \"c:hPercent\");\n if (hPercent !== undefined) opts.hPercent = hPercent;\n const rotY = readValNum(v3d, \"c:rotY\");\n if (rotY !== undefined) opts.rotY = rotY;\n const depthPercent = readValNum(v3d, \"c:depthPercent\");\n if (depthPercent !== undefined) opts.depthPercent = depthPercent;\n const rAngAx = readBoolAttr(v3d, \"c:rAngAx\");\n if (rAngAx !== undefined) opts.rAngAx = rAngAx;\n const perspective = readValNum(v3d, \"c:perspective\");\n if (perspective !== undefined) opts.perspective = perspective;\n return opts;\n}\n\n// ── Plot-area layout read (CT_Layout > CT_ManualLayout) ──\n\nfunction readManualLayout(layoutEl: XmlElement | undefined): ManualLayoutOptions | undefined {\n if (!layoutEl) return undefined;\n const ml = findChild(layoutEl, \"c:manualLayout\");\n if (!ml) return undefined;\n const opts: ManualLayoutOptions = {};\n const layoutTarget = readValStr(ml, \"c:layoutTarget\");\n if (layoutTarget) opts.layoutTarget = layoutTarget as LayoutTarget;\n const xMode = readValStr(ml, \"c:xMode\");\n if (xMode) opts.xMode = xMode as LayoutMode;\n const yMode = readValStr(ml, \"c:yMode\");\n if (yMode) opts.yMode = yMode as LayoutMode;\n const wMode = readValStr(ml, \"c:wMode\");\n if (wMode) opts.wMode = wMode as LayoutMode;\n const hMode = readValStr(ml, \"c:hMode\");\n if (hMode) opts.hMode = hMode as LayoutMode;\n const x = readValNum(ml, \"c:x\");\n if (x !== undefined) opts.x = x;\n const y = readValNum(ml, \"c:y\");\n if (y !== undefined) opts.y = y;\n const w = readValNum(ml, \"c:w\");\n if (w !== undefined) opts.w = w;\n const h = readValNum(ml, \"c:h\");\n if (h !== undefined) opts.h = h;\n return Object.keys(opts).length ? opts : undefined;\n}\n\n// ── 3D wall/floor surface read (CT_Surface) ──\n\nfunction readSurface(\n chartEl: XmlElement,\n tag: \"c:floor\" | \"c:sideWall\" | \"c:backWall\",\n ctx: ReadContext,\n): SurfaceOptions | undefined {\n const el = findChild(chartEl, tag);\n if (!el) return undefined;\n const opts: SurfaceOptions = {};\n const thickness = readValStr(el, \"c:thickness\");\n if (thickness !== undefined)\n opts.thickness = thickness.endsWith(\"%\") ? thickness : Number(thickness);\n const spPr = findChild(el, \"c:spPr\");\n if (spPr) opts.shapeProperties = shapePropertiesDesc.parse(spPr, ctx) as ShapePropertiesOptions;\n return opts;\n}\n\n// ── Chart-type scalar read (CT_xxxChart fields between ser and axId) ──\n\nfunction readChartTypeScalars(\n chartTypeEl: XmlElement | undefined,\n type: ChartType,\n threeD: boolean,\n result: MutableChartSpaceResult,\n ctx: ReadContext,\n): void {\n if (!chartTypeEl) return;\n // Group-level varyColors precedes ser in every chart-group content model —\n // except CT_Surface*/CT_Stock, which have no varyColors slot; reading it\n // there would round-trip schema-invalid input into schema-invalid output.\n if (type !== \"surface\" && type !== \"stock\") {\n const varyColors = readBoolAttr(chartTypeEl, \"c:varyColors\");\n if (varyColors !== undefined) result.varyColors = varyColors;\n }\n // c:grouping sits in the header (before ser) of bar/column/line/area groups;\n // only store a non-default value so fresh output keeps the per-type default.\n if (type === \"column\" || type === \"bar\" || type === \"line\" || type === \"area\") {\n const grouping = readValStr(chartTypeEl, \"c:grouping\");\n if (grouping) {\n const fallback = type === \"column\" || type === \"bar\" ? \"clustered\" : \"standard\";\n if (grouping !== fallback) result.grouping = grouping as ChartSpaceOptions[\"grouping\"];\n }\n }\n if (type === \"column\" || type === \"bar\") {\n const gapWidth = readValNum(chartTypeEl, \"c:gapWidth\");\n if (gapWidth !== undefined) result.gapWidth = gapWidth;\n if (threeD) {\n const gapDepth = readValNum(chartTypeEl, \"c:gapDepth\");\n if (gapDepth !== undefined) result.gapDepth = gapDepth;\n const shape = readValStr(chartTypeEl, \"c:shape\");\n if (shape) result.shape = shape as BarShape;\n } else {\n const overlap = readValNum(chartTypeEl, \"c:overlap\");\n if (overlap !== undefined) result.overlap = overlap;\n }\n } else if (type === \"area\" && threeD) {\n // CT_Area3DChart tail: dropLines → gapDepth\n const gapDepth = readValNum(chartTypeEl, \"c:gapDepth\");\n if (gapDepth !== undefined) result.gapDepth = gapDepth;\n } else if (type === \"pie\" || type === \"doughnut\") {\n const firstSliceAng = readValNum(chartTypeEl, \"c:firstSliceAng\");\n if (firstSliceAng !== undefined) result.firstSliceAngle = firstSliceAng;\n const holeSize = readValNum(chartTypeEl, \"c:holeSize\");\n if (holeSize !== undefined) result.holeSize = holeSize;\n } else if (type === \"bubble\") {\n const bubbleScale = readValNum(chartTypeEl, \"c:bubbleScale\");\n if (bubbleScale !== undefined) result.bubbleScale = bubbleScale;\n const showNeg = readBoolAttr(chartTypeEl, \"c:showNegBubbles\");\n if (showNeg !== undefined) result.showNegativeBubbles = showNeg;\n const sizeRep = readValStr(chartTypeEl, \"c:sizeRepresents\");\n if (sizeRep) result.sizeRepresents = xsdSizeRepresents.from(sizeRep) as SizeRepresents;\n } else if (type === \"surface\") {\n const wireframe = readBoolAttr(chartTypeEl, \"c:wireframe\");\n if (wireframe !== undefined) result.wireframe = wireframe;\n const bandFormats = readBandFormats(chartTypeEl);\n if (bandFormats) result.bandFormats = bandFormats;\n } else if (type === \"radar\") {\n const radarStyle = readValStr(chartTypeEl, \"c:radarStyle\");\n if (radarStyle) result.radarStyle = radarStyle as RadarStyle;\n } else if (type === \"ofPie\") {\n const ofPieType = readValStr(chartTypeEl, \"c:ofPieType\");\n if (ofPieType) result.ofPieType = ofPieType as OfPieType;\n const gapWidth = readValNum(chartTypeEl, \"c:gapWidth\");\n if (gapWidth !== undefined) result.gapWidth = gapWidth;\n const splitType = readValStr(chartTypeEl, \"c:splitType\");\n if (splitType) result.splitType = xsdSplitType.from(splitType) as SplitType;\n const splitPos = readValNum(chartTypeEl, \"c:splitPos\");\n if (splitPos !== undefined) result.splitPosition = splitPos;\n const custSplit = findChild(chartTypeEl, \"c:custSplit\");\n if (custSplit) {\n const pts = children(custSplit, \"c:secondPiePt\")\n .map((el) => attr(el, \"val\"))\n .filter((v): v is string => v !== undefined)\n .map(Number);\n if (pts.length) result.customSplitPoints = pts;\n }\n const secondPieSize = readValStr(chartTypeEl, \"c:secondPieSize\");\n if (secondPieSize !== undefined)\n result.secondPieSize = secondPieSize.endsWith(\"%\") ? secondPieSize : Number(secondPieSize);\n const seriesLines = readChartLines(chartTypeEl, \"c:serLines\", ctx);\n if (seriesLines !== undefined) result.seriesLines = seriesLines;\n }\n}\n\n// ── Chart-type decoration read (CT_ChartLines containers) ──\n\nfunction readChartTypeDecorations(\n chartTypeEl: XmlElement | undefined,\n type: ChartType,\n threeD: boolean,\n result: MutableChartSpaceResult,\n ctx: ReadContext,\n): void {\n if (!chartTypeEl) return;\n const readUpDownBars = (el: XmlElement) => {\n result.upDownBars = true;\n const gw = readValNum(el, \"c:gapWidth\");\n if (gw !== undefined) result.upDownBarsGapWidth = gw;\n };\n if (type === \"line\") {\n if (threeD) {\n const dropLinesV = readChartLines(chartTypeEl, \"c:dropLines\", ctx);\n if (dropLinesV !== undefined) result.dropLines = dropLinesV;\n } else {\n const highLowLinesV = readChartLines(chartTypeEl, \"c:hiLowLines\", ctx);\n if (highLowLinesV !== undefined) result.highLowLines = highLowLinesV;\n const upDownBars = findChild(chartTypeEl, \"c:upDownBars\");\n if (upDownBars) readUpDownBars(upDownBars);\n const dropLinesV = readChartLines(chartTypeEl, \"c:dropLines\", ctx);\n if (dropLinesV !== undefined) result.dropLines = dropLinesV;\n const markers = readBoolAttr(chartTypeEl, \"c:marker\");\n if (markers !== undefined) result.markers = markers;\n const smooth = readBoolAttr(chartTypeEl, \"c:smooth\");\n if (smooth !== undefined) result.smooth = smooth;\n }\n } else if (type === \"area\") {\n const dropLinesV = readChartLines(chartTypeEl, \"c:dropLines\", ctx);\n if (dropLinesV !== undefined) result.dropLines = dropLinesV;\n const threeDSeriesLines = readChartLines(chartTypeEl, \"c:serLines\", ctx);\n if (threeD && threeDSeriesLines !== undefined) result.seriesLines = threeDSeriesLines;\n } else if (type === \"stock\") {\n const dropLinesV = readChartLines(chartTypeEl, \"c:dropLines\", ctx);\n if (dropLinesV !== undefined) result.dropLines = dropLinesV;\n const highLowLinesV = readChartLines(chartTypeEl, \"c:hiLowLines\", ctx);\n if (highLowLinesV !== undefined) result.highLowLines = highLowLinesV;\n const upDownBars = findChild(chartTypeEl, \"c:upDownBars\");\n if (upDownBars) readUpDownBars(upDownBars);\n const seriesLines = readChartLines(chartTypeEl, \"c:serLines\", ctx);\n if (seriesLines !== undefined) result.seriesLines = seriesLines;\n } else if ((type === \"column\" || type === \"bar\") && !threeD) {\n const seriesLines = readChartLines(chartTypeEl, \"c:serLines\", ctx);\n if (seriesLines !== undefined) result.seriesLines = seriesLines;\n }\n}\n\n// ── Plot-area data table read (CT_DTable) ──\n\nfunction readDataTable(\n plotArea: XmlElement | undefined,\n ctx: ReadContext,\n): DataTableOptions | undefined {\n if (!plotArea) return undefined;\n const dTable = findChild(plotArea, \"c:dTable\");\n if (!dTable) return undefined;\n const opts: DataTableOptions = {};\n const horz = readBoolAttr(dTable, \"c:showHorzBorder\");\n if (horz !== undefined) opts.showHorizontalBorder = horz;\n const vert = readBoolAttr(dTable, \"c:showVertBorder\");\n if (vert !== undefined) opts.showVerticalBorder = vert;\n const outline = readBoolAttr(dTable, \"c:showOutline\");\n if (outline !== undefined) opts.showOutline = outline;\n const keys = readBoolAttr(dTable, \"c:showKeys\");\n if (keys !== undefined) opts.showLegendKeys = keys;\n const spPrEl = findChild(dTable, \"c:spPr\");\n if (spPrEl)\n opts.shapeProperties = shapePropertiesDesc.parse(spPrEl, ctx) as ShapePropertiesOptions;\n const txPrEl = findChild(dTable, \"c:txPr\");\n if (txPrEl) opts.textProperties = textBodyDesc.parse(txPrEl, ctx);\n // Presence round-trips: a bare <c:dTable/> stays an empty object.\n return opts;\n}\n\n// ── ChartSpace-level read (CT_ChartSpace children) ──\n\nfunction readProtection(el: XmlElement): ProtectionOptions | undefined {\n const protection = findChild(el, \"c:protection\");\n if (!protection) return undefined;\n const opts: ProtectionOptions = {};\n const readFlag = (tag: string): boolean | undefined => {\n const child = findChild(protection, tag);\n if (!child) return undefined;\n const v = attr(child, \"val\");\n return v === undefined ? undefined : (parseOnOff(v) ?? true);\n };\n const chartObject = readFlag(\"c:chartObject\");\n if (chartObject !== undefined) opts.chartObject = chartObject;\n const data = readFlag(\"c:data\");\n if (data !== undefined) opts.data = data;\n const formatting = readFlag(\"c:formatting\");\n if (formatting !== undefined) opts.formatting = formatting;\n const selection = readFlag(\"c:selection\");\n if (selection !== undefined) opts.selection = selection;\n const userInterface = readFlag(\"c:userInterface\");\n if (userInterface !== undefined) opts.userInterface = userInterface;\n return Object.keys(opts).length ? opts : undefined;\n}\n\nfunction readExternalData(el: XmlElement): ExternalDataOptions | undefined {\n const externalData = findChild(el, \"c:externalData\");\n if (!externalData) return undefined;\n const relationshipId = attr(externalData, \"r:id\");\n if (relationshipId === undefined) return undefined;\n const opts: ExternalDataOptions = { relationshipId };\n const autoUpdateEl = findChild(externalData, \"c:autoUpdate\");\n if (autoUpdateEl) {\n const v = attr(autoUpdateEl, \"val\");\n if (v !== undefined) opts.autoUpdate = parseOnOff(v) ?? true;\n }\n return opts;\n}\n\nfunction readPivotSource(el: XmlElement): PivotSourceOptions | undefined {\n const ps = findChild(el, \"c:pivotSource\");\n if (!ps) return undefined;\n const nameEl = findChild(ps, \"c:name\");\n const fmtIdEl = findChild(ps, \"c:fmtId\");\n if (!nameEl || !fmtIdEl) return undefined;\n return { name: textOf(nameEl) ?? \"\", formatId: Number(attr(fmtIdEl, \"val\")) };\n}\n\nfunction readPivotFormats(\n chart: XmlElement,\n ctx: ReadContext,\n): ChartPivotFormatOptions[] | undefined {\n const pf = findChild(chart, \"c:pivotFmts\");\n if (!pf) return undefined;\n const result: ChartPivotFormatOptions[] = [];\n for (const fmt of children(pf, \"c:pivotFmt\")) {\n const idxEl = findChild(fmt, \"c:idx\");\n if (!idxEl) continue;\n const opt: ChartPivotFormatOptions = { index: Number(attr(idxEl, \"val\")) };\n const marker = readMarker(fmt, ctx);\n if (marker) opt.marker = marker;\n result.push(opt);\n }\n return result.length ? result : undefined;\n}\n\nfunction readBandFormats(chartTypeEl: XmlElement): BandFormatOptions[] | undefined {\n const bf = findChild(chartTypeEl, \"c:bandFmts\");\n if (!bf) return undefined;\n const result: BandFormatOptions[] = [];\n for (const fmt of children(bf, \"c:bandFmt\")) {\n const idxEl = findChild(fmt, \"c:idx\");\n if (idxEl) result.push({ index: Number(attr(idxEl, \"val\")) });\n }\n return result.length ? result : undefined;\n}\n\nfunction readLegendEntries(legend: XmlElement, ctx: ReadContext): LegendEntryOptions[] | undefined {\n const entries = children(legend, \"c:legendEntry\");\n if (!entries.length) return undefined;\n const result: LegendEntryOptions[] = [];\n for (const entry of entries) {\n const idxEl = findChild(entry, \"c:idx\");\n if (!idxEl) continue;\n const deleteEl = findChild(entry, \"c:delete\");\n if (deleteEl) {\n const v = attr(deleteEl, \"val\");\n result.push({\n index: Number(attr(idxEl, \"val\")),\n delete: parseOnOff(v) ?? true,\n });\n continue;\n }\n const txPrEl = findChild(entry, \"c:txPr\");\n if (txPrEl) {\n result.push({\n index: Number(attr(idxEl, \"val\")),\n textProperties: textBodyDesc.parse(txPrEl, ctx) as TextBodyOptions,\n });\n }\n }\n return result.length ? result : undefined;\n}\n\nfunction readLegend(\n chart: XmlElement,\n ctx: ReadContext,\n):\n | {\n position?: LegendPosition;\n entries?: LegendEntryOptions[];\n layout?: boolean | ManualLayoutOptions;\n overlay?: boolean;\n shapeProperties?: ShapePropertiesOptions;\n textProperties?: TextBodyOptions;\n }\n | undefined {\n const legend = findChild(chart, \"c:legend\");\n if (!legend) return undefined;\n const result: {\n position?: LegendPosition;\n entries?: LegendEntryOptions[];\n layout?: boolean | ManualLayoutOptions;\n overlay?: boolean;\n shapeProperties?: ShapePropertiesOptions;\n textProperties?: TextBodyOptions;\n } = {};\n const posEl = findChild(legend, \"c:legendPos\");\n if (posEl) {\n const v = attr(posEl, \"val\");\n if (v) result.position = xsdLegendPosition.from(v) as LegendPosition;\n }\n const entries = readLegendEntries(legend, ctx);\n if (entries) result.entries = entries;\n const layoutEl = findChild(legend, \"c:layout\");\n if (layoutEl) result.layout = readManualLayout(layoutEl) ?? true;\n const overlayEl = findChild(legend, \"c:overlay\");\n if (overlayEl) result.overlay = parseOnOff(attr(overlayEl, \"val\")) ?? false;\n const spPrEl = findChild(legend, \"c:spPr\");\n if (spPrEl)\n result.shapeProperties = shapePropertiesDesc.parse(spPrEl, ctx) as ShapePropertiesOptions;\n const txPr = findChild(legend, \"c:txPr\");\n if (txPr) result.textProperties = textBodyDesc.parse(txPr, ctx);\n return Object.keys(result).length ? result : undefined;\n}\n\n// ── Print settings read (CT_PrintSettings) ──\n\nfunction readHeaderFooter(ps: XmlElement): ChartHeaderFooterOptions | undefined {\n const hf = findChild(ps, \"c:headerFooter\");\n if (!hf) return undefined;\n const opts: ChartHeaderFooterOptions = {};\n const readStr = (tag: string): string | undefined => {\n const child = findChild(hf, tag);\n return child ? textOf(child) : undefined;\n };\n const oh = readStr(\"c:oddHeader\");\n if (oh !== undefined) opts.oddHeader = oh;\n const of = readStr(\"c:oddFooter\");\n if (of !== undefined) opts.oddFooter = of;\n const eh = readStr(\"c:evenHeader\");\n if (eh !== undefined) opts.evenHeader = eh;\n const ef = readStr(\"c:evenFooter\");\n if (ef !== undefined) opts.evenFooter = ef;\n const fh = readStr(\"c:firstHeader\");\n if (fh !== undefined) opts.firstHeader = fh;\n const ff = readStr(\"c:firstFooter\");\n if (ff !== undefined) opts.firstFooter = ff;\n const readFlag = (name: string): boolean | undefined => {\n const v = attr(hf, name);\n return v === undefined ? undefined : (parseOnOff(v) ?? true);\n };\n const alignWithMargins = readFlag(\"alignWithMargins\");\n if (alignWithMargins !== undefined) opts.alignWithMargins = alignWithMargins;\n const differentOddEven = readFlag(\"differentOddEven\");\n if (differentOddEven !== undefined) opts.differentOddEven = differentOddEven;\n const differentFirst = readFlag(\"differentFirst\");\n if (differentFirst !== undefined) opts.differentFirst = differentFirst;\n // An empty <c:headerFooter/> round-trips as {} — presence is the payload.\n return opts;\n}\n\nfunction readPageMargins(ps: XmlElement): ChartPageMarginsOptions | undefined {\n const pm = findChild(ps, \"c:pageMargins\");\n if (!pm) return undefined;\n const opts: ChartPageMarginsOptions = {};\n const readNum = (name: string): number | undefined => {\n const v = attr(pm, name);\n return v === undefined ? undefined : Number(v);\n };\n const left = readNum(\"l\");\n if (left !== undefined) opts.left = left;\n const right = readNum(\"r\");\n if (right !== undefined) opts.right = right;\n const top = readNum(\"t\");\n if (top !== undefined) opts.top = top;\n const bottom = readNum(\"b\");\n if (bottom !== undefined) opts.bottom = bottom;\n const header = readNum(\"header\");\n if (header !== undefined) opts.header = header;\n const footer = readNum(\"footer\");\n if (footer !== undefined) opts.footer = footer;\n return Object.keys(opts).length ? opts : undefined;\n}\n\nfunction readPageSetup(ps: XmlElement): ChartPageSetupOptions | undefined {\n const pg = findChild(ps, \"c:pageSetup\");\n if (!pg) return undefined;\n const opts: ChartPageSetupOptions = {};\n const readNum = (name: string): number | undefined => {\n const v = attr(pg, name);\n return v === undefined ? undefined : Number(v);\n };\n const readFlag = (name: string): boolean | undefined => {\n const v = attr(pg, name);\n return v === undefined ? undefined : (parseOnOff(v) ?? true);\n };\n const paperSize = readNum(\"paperSize\");\n if (paperSize !== undefined) opts.paperSize = paperSize;\n const paperHeight = attr(pg, \"paperHeight\");\n if (paperHeight !== undefined) opts.paperHeight = paperHeight;\n const paperWidth = attr(pg, \"paperWidth\");\n if (paperWidth !== undefined) opts.paperWidth = paperWidth;\n const firstPageNumber = readNum(\"firstPageNumber\");\n if (firstPageNumber !== undefined) opts.firstPageNumber = firstPageNumber;\n const orientation = attr(pg, \"orientation\");\n if (orientation !== undefined) opts.orientation = orientation as PageSetupOrientation;\n const blackAndWhite = readFlag(\"blackAndWhite\");\n if (blackAndWhite !== undefined) opts.blackAndWhite = blackAndWhite;\n const draft = readFlag(\"draft\");\n if (draft !== undefined) opts.draft = draft;\n const useFirstPageNumber = readFlag(\"useFirstPageNumber\");\n if (useFirstPageNumber !== undefined) opts.useFirstPageNumber = useFirstPageNumber;\n const horizontalDpi = readNum(\"horizontalDpi\");\n if (horizontalDpi !== undefined) opts.horizontalDpi = horizontalDpi;\n const verticalDpi = readNum(\"verticalDpi\");\n if (verticalDpi !== undefined) opts.verticalDpi = verticalDpi;\n const copies = readNum(\"copies\");\n if (copies !== undefined) opts.copies = copies;\n // An empty <c:pageSetup/> round-trips as {} — presence is the payload.\n return opts;\n}\n\nfunction readPrintSettings(el: XmlElement): PrintSettingsOptions | undefined {\n const ps = findChild(el, \"c:printSettings\");\n if (!ps) return undefined;\n const opts: PrintSettingsOptions = {};\n const headerFooter = readHeaderFooter(ps);\n if (headerFooter) opts.headerFooter = headerFooter;\n const pageMargins = readPageMargins(ps);\n if (pageMargins) opts.pageMargins = pageMargins;\n const pageSetup = readPageSetup(ps);\n if (pageSetup) opts.pageSetup = pageSetup;\n const legacyDrawingHF = findChild(ps, \"c:legacyDrawingHF\");\n if (legacyDrawingHF) {\n const rId = attr(legacyDrawingHF, \"r:id\");\n if (rId !== undefined) opts.legacyDrawingId = rId;\n }\n return Object.keys(opts).length ? opts : undefined;\n}\n\n// ── Axis read (CT_CatAx / CT_ValAx / CT_DateAx / CT_SerAx) ──\n\nconst AXIS_KIND_BY_TAG: Record<string, AxisKind> = {\n \"c:catAx\": \"category\",\n \"c:valAx\": \"value\",\n \"c:dateAx\": \"date\",\n \"c:serAx\": \"series\",\n};\n\nfunction readAxis(el: XmlElement, kind: AxisKind, ctx: ReadContext): AxisOptions {\n const result: AxisOptions = {\n kind,\n id: readValNum(el, \"c:axId\") ?? 0,\n crossAxisId: readValNum(el, \"c:crossAx\") ?? 0,\n };\n\n const scalingEl = findChild(el, \"c:scaling\");\n if (scalingEl) {\n const scaling: AxisScalingOptions = {};\n const logBase = readValNum(scalingEl, \"c:logBase\");\n if (logBase !== undefined) scaling.logBase = logBase;\n const orientation = readValStr(scalingEl, \"c:orientation\");\n if (orientation) scaling.orientation = xsdAxisOrientation.from(orientation) as AxisOrientation;\n const max = readValNum(scalingEl, \"c:max\");\n if (max !== undefined) scaling.max = max;\n const min = readValNum(scalingEl, \"c:min\");\n if (min !== undefined) scaling.min = min;\n if (logBase !== undefined || orientation || max !== undefined || min !== undefined) {\n result.scaling = scaling;\n }\n }\n\n const del = readBoolAttr(el, \"c:delete\");\n if (del !== undefined) result.delete = del;\n const pos = readValStr(el, \"c:axPos\");\n if (pos) result.position = xsdAxisPosition.from(pos) as AxisPosition;\n result.majorGridlines = readChartLines(el, \"c:majorGridlines\", ctx);\n result.minorGridlines = readChartLines(el, \"c:minorGridlines\", ctx);\n const titleEl = findChild(el, \"c:title\");\n if (titleEl) {\n // \"\" keeps a text-less title placeholder (bare <c:title/>) round-tripping.\n result.title = readTitle(titleEl, ctx);\n }\n const numFmtEl = findChild(el, \"c:numFmt\");\n if (numFmtEl) {\n const formatCode = attr(numFmtEl, \"formatCode\");\n if (formatCode) {\n const sourceLinked = attr(numFmtEl, \"sourceLinked\");\n // Only a decoupled sourceLinked (0) needs the object form; the default\n // 1 round-trips through the plain-string shorthand.\n result.numberFormat = sourceLinked === \"0\" ? { formatCode, sourceLinked: false } : formatCode;\n }\n }\n const majorTickMark = readValStr(el, \"c:majorTickMark\");\n if (majorTickMark) result.majorTickMark = majorTickMark as AxisTickMark;\n const minorTickMark = readValStr(el, \"c:minorTickMark\");\n if (minorTickMark) result.minorTickMark = minorTickMark as AxisTickMark;\n const tickLblPos = readValStr(el, \"c:tickLblPos\");\n if (tickLblPos) result.tickLabelPosition = tickLblPos as AxisTickLabelPosition;\n // EG_AxShared: spPr sits between tickLblPos and crossAx; txPr follows spPr.\n const spPrEl = findChild(el, \"c:spPr\");\n if (spPrEl) {\n result.shapeProperties = shapePropertiesDesc.parse(spPrEl, ctx) as ShapePropertiesOptions;\n }\n const axisTxPr = findChild(el, \"c:txPr\");\n if (axisTxPr) result.textProperties = textBodyDesc.parse(axisTxPr, ctx);\n const crossesAt = readValNum(el, \"c:crossesAt\");\n if (crossesAt !== undefined) result.crossesAt = crossesAt;\n else {\n const crosses = readValStr(el, \"c:crosses\");\n if (crosses) result.crosses = xsdAxisCrosses.from(crosses) as AxisCrosses;\n }\n\n // kind-specific tail (mirrors stringifyAxis switch order)\n if (kind === \"category\" || kind === \"date\") {\n const auto = readBoolAttr(el, \"c:auto\");\n if (auto !== undefined) result.auto = auto;\n }\n if (kind === \"category\") {\n const lblAlgn = readValStr(el, \"c:lblAlgn\");\n if (lblAlgn) result.labelAlignment = xsdAxisLabelAlignment.from(lblAlgn) as AxisLabelAlignment;\n }\n if (kind === \"category\" || kind === \"date\") {\n const lblOffsetEl = findChild(el, \"c:lblOffset\");\n if (lblOffsetEl) {\n const v = attr(lblOffsetEl, \"val\");\n if (v !== undefined) result.labelOffset = v.endsWith(\"%\") ? v : Number(v);\n }\n }\n if (kind === \"category\" || kind === \"series\") {\n const tickLblSkip = readValNum(el, \"c:tickLblSkip\");\n if (tickLblSkip !== undefined) result.tickLabelSkip = tickLblSkip;\n const tickMarkSkip = readValNum(el, \"c:tickMarkSkip\");\n if (tickMarkSkip !== undefined) result.tickMarkSkip = tickMarkSkip;\n }\n if (kind === \"category\") {\n const noMulti = readBoolAttr(el, \"c:noMultiLvlLbl\");\n if (noMulti !== undefined) result.noMultiLevelLabel = noMulti;\n }\n if (kind === \"date\") {\n const baseTimeUnit = readValStr(el, \"c:baseTimeUnit\");\n if (baseTimeUnit) result.baseTimeUnit = baseTimeUnit as TimeUnit;\n const majorTimeUnit = readValStr(el, \"c:majorTimeUnit\");\n if (majorTimeUnit) result.majorTimeUnit = majorTimeUnit as TimeUnit;\n const minorTimeUnit = readValStr(el, \"c:minorTimeUnit\");\n if (minorTimeUnit) result.minorTimeUnit = minorTimeUnit as TimeUnit;\n }\n if (kind === \"date\" || kind === \"value\") {\n const majorUnit = readValNum(el, \"c:majorUnit\");\n if (majorUnit !== undefined) result.majorUnit = majorUnit;\n const minorUnit = readValNum(el, \"c:minorUnit\");\n if (minorUnit !== undefined) result.minorUnit = minorUnit;\n }\n if (kind === \"value\") {\n const crossBetween = readValStr(el, \"c:crossBetween\");\n if (crossBetween)\n result.crossBetween = xsdAxisCrossBetween.from(crossBetween) as AxisCrossBetween;\n const dispUnitsEl = findChild(el, \"c:dispUnits\");\n if (dispUnitsEl) {\n const displayUnits: DisplayUnitsOptions = {};\n const customUnit = readValNum(dispUnitsEl, \"c:custUnit\");\n if (customUnit !== undefined) displayUnits.customUnit = customUnit;\n const builtInUnit = readValStr(dispUnitsEl, \"c:builtInUnit\");\n if (builtInUnit) displayUnits.builtInUnit = builtInUnit as BuiltInDisplayUnit;\n if (findChild(dispUnitsEl, \"c:dispUnitsLbl\")) displayUnits.label = true;\n if (customUnit !== undefined || builtInUnit || displayUnits.label) {\n result.displayUnits = displayUnits;\n }\n }\n }\n return result;\n}\n\n/** Read all axis elements (c:catAx/c:valAx/c:dateAx/c:serAx) under plotArea. */\nfunction readAxes(plotArea: XmlElement | undefined, ctx: ReadContext): AxisOptions[] | undefined {\n if (!plotArea?.elements) return undefined;\n const axes: AxisOptions[] = [];\n for (const child of plotArea.elements) {\n if (!child.name) continue;\n const kind = AXIS_KIND_BY_TAG[child.name];\n if (kind) axes.push(readAxis(child, kind, ctx));\n }\n return axes.length > 0 ? axes : undefined;\n}\n\n// ── Main descriptor ──\n\nexport const chartSpaceDesc: CustomDescriptor<ChartSpaceOptions> = {\n kind: \"custom\",\n\n stringify(opts: ChartSpaceOptions, ctx: WriteContext): string {\n const parts: string[] = [];\n\n // Opening tag with namespaces — the strict dialect re-declares the\n // purl.oclc.org set a strict source package requires.\n const ns =\n opts.dialect === \"strict\"\n ? `xmlns:c=\"http://purl.oclc.org/ooxml/drawingml/chart\" xmlns:a=\"http://purl.oclc.org/ooxml/drawingml/main\" xmlns:r=\"http://purl.oclc.org/ooxml/officeDocument/relationships\"`\n : `xmlns:c=\"http://schemas.openxmlformats.org/drawingml/2006/chart\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"`;\n parts.push(`<c:chartSpace ${ns}>`);\n\n // Optional header elements — emitted only when set (round-trip from a\n // source that carried them). Fresh output omits them, matching the\n // legacy-Word corpus form.\n if (opts.date1904 !== undefined) parts.push(`<c:date1904${boolVal(opts.date1904)}/>`);\n if (opts.lang !== undefined) parts.push(valEl(\"c:lang\", opts.lang));\n if (opts.roundedCorners !== undefined)\n parts.push(`<c:roundedCorners${boolVal(opts.roundedCorners)}/>`);\n\n // Style — plain c:style, or the Word 2010+ mc:AlternateContent form\n // whose mc:Fallback carries the equivalent c:style.\n if (opts.style2010) {\n const fallback =\n opts.style2010.fallbackStyle !== undefined\n ? `<mc:Fallback>${valEl(\"c:style\", opts.style2010.fallbackStyle)}</mc:Fallback>`\n : \"\";\n parts.push(\n `<mc:AlternateContent xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\">` +\n `<mc:Choice xmlns:c14=\"http://schemas.microsoft.com/office/drawing/2007/8/2/chart\" Requires=\"c14\">` +\n `<c14:style val=\"${opts.style2010.style}\"/></mc:Choice>` +\n `${fallback}</mc:AlternateContent>`,\n );\n } else if (opts.style !== undefined) {\n parts.push(valEl(\"c:style\", opts.style));\n }\n\n // CT_ChartSpace: style → clrMapOvr → pivotSource → protection → chart\n if (opts.colorMappingOverride) {\n parts.push(stringifyColorMapping(opts.colorMappingOverride, \"c:clrMapOvr\"));\n }\n if (opts.pivotSource) parts.push(stringifyPivotSource(opts.pivotSource));\n if (opts.protection) parts.push(stringifyProtection(opts.protection));\n\n // c:chart container\n parts.push(\"<c:chart>\");\n\n // Title — a non-empty string emits the c:rich form; \"\" emits the bare\n // auto-title placeholder legacy Word writes.\n if (opts.title !== undefined) {\n parts.push(\n typeof opts.title === \"string\" && opts.title === \"\"\n ? emptyEl(\"c:title\")\n : stringifyTitle(opts.title, ctx),\n );\n }\n if (opts.autoTitleDeleted !== undefined)\n parts.push(`<c:autoTitleDeleted${boolVal(opts.autoTitleDeleted)}/>`);\n // CT_Chart: autoTitleDeleted → pivotFmts → view3D\n if (opts.pivotFormats?.length) parts.push(stringifyPivotFormats(opts.pivotFormats, ctx));\n\n // 3D view (before plotArea per CT_Chart sequence)\n if (opts.view3D) {\n parts.push(stringifyView3D(opts.view3D));\n }\n\n // 3D walls and floor (CT_Chart: view3D → floor → sideWall → backWall → plotArea)\n parts.push(stringifySurface(\"c:floor\", opts.floor, ctx));\n parts.push(stringifySurface(\"c:sideWall\", opts.sideWall, ctx));\n parts.push(stringifySurface(\"c:backWall\", opts.backWall, ctx));\n\n // c:plotArea\n parts.push(`<c:plotArea>${stringifyLayout(opts.plotAreaLayout)}`);\n\n // Chart type element (header + series + footer)\n parts.push(chartTypeHeader(opts));\n\n // A parsed empty chart shell carries no series (parse omits the field\n // when the source had no c:ser) — emit none instead of crashing.\n for (const [i, series] of (opts.series ?? []).entries()) {\n parts.push(stringifySeries(i, series, opts, ctx));\n }\n\n // Chart-group-level data labels follow the ser elements (EG_*ChartShared).\n if (opts.dataLabels) parts.push(stringifyDataLabels(opts.dataLabels, ctx));\n\n parts.push(chartTypeFooter(opts, ctx));\n\n // Combo chart: a second group (e.g. lines over bars) shares the plot\n // area, the category source, and the axes list.\n for (const g of opts.secondaryGroups ?? []) parts.push(stringifySecondaryGroup(g, opts, ctx));\n\n // Axes\n parts.push(stringifyAxes(opts, ctx));\n\n // Data table (CT_PlotArea: axes → dTable → spPr)\n if (opts.dataTable) parts.push(stringifyDataTable(opts.dataTable, ctx));\n parts.push(chartSpPr(opts.plotAreaShapeProperties, ctx));\n\n parts.push(\"</c:plotArea>\");\n\n // Legend\n if (opts.showLegend !== false) {\n parts.push(stringifyLegend(opts, ctx));\n }\n\n // CT_Chart tail: plotVisOnly → dispBlanksAs → showDLblsOverMax\n parts.push(`<c:plotVisOnly${boolVal(opts.plotVisOnly ?? true)}/>`);\n if (opts.displayBlanksAs !== undefined)\n parts.push(valEl(\"c:dispBlanksAs\", opts.displayBlanksAs));\n if (opts.showDataLabelsOverMax !== undefined)\n parts.push(`<c:showDLblsOverMax${boolVal(opts.showDataLabelsOverMax)}/>`);\n\n parts.push(\"</c:chart>\");\n\n // Chart-area spPr — optional, emitted only when the source carried one.\n parts.push(chartSpPr(opts.shapeProperties, ctx));\n\n // CT_ChartSpace: txPr → externalData → printSettings → (userShapes)\n if (opts.textProperties) {\n parts.push(`<c:txPr>${textBodyDesc.stringify(opts.textProperties, ctx) ?? \"\"}</c:txPr>`);\n }\n if (opts.externalData) {\n const ext = stringifyExternalData(opts.externalData);\n if (ext) parts.push(ext);\n }\n if (opts.printSettings) parts.push(stringifyPrintSettings(opts.printSettings));\n // CT_ChartSpace: printSettings → userShapes → extLst\n if (opts.userShapes !== undefined)\n parts.push(`<c:userShapes r:id=\"${escapeXml(opts.userShapes)}\"/>`);\n if (opts.ext) parts.push(`<c:extLst>${opts.ext}</c:extLst>`);\n\n parts.push(\"</c:chartSpace>\");\n\n return parts.join(\"\");\n },\n\n parse(el: XmlElement, ctx: ReadContext) {\n const result: MutableChartSpaceResult = {};\n\n // Namespace dialect — a strict root declares the purl.oclc.org chart\n // namespace; everything else reads as transitional.\n if (el.attributes?.[\"xmlns:c\"] === \"http://purl.oclc.org/ooxml/drawingml/chart\") {\n result.dialect = \"strict\";\n }\n\n // Optional header elements — recorded only when present so stringify\n // re-emits exactly what the source carried.\n const date1904 = readBoolAttr(el, \"c:date1904\");\n if (date1904 !== undefined) result.date1904 = date1904;\n const langVal = readValStr(el, \"c:lang\");\n if (langVal) result.lang = langVal;\n const roundedCorners = readBoolAttr(el, \"c:roundedCorners\");\n if (roundedCorners !== undefined) result.roundedCorners = roundedCorners;\n\n // Style — bare c:style, or the Word 2010+ mc:AlternateContent form whose\n // mc:Choice holds c14:style and mc:Fallback the equivalent c:style.\n const mcStyleEl = findChild(el, \"mc:AlternateContent\");\n const c14StyleEl =\n mcStyleEl && findChild(findChild(mcStyleEl, \"mc:Choice\") ?? mcStyleEl, \"c14:style\");\n if (c14StyleEl?.attributes?.[\"val\"] !== undefined) {\n const fallbackEl = findFirst(mcStyleEl, \"c:style\");\n result.style2010 = {\n style: Number(c14StyleEl.attributes[\"val\"]),\n ...(fallbackEl?.attributes?.[\"val\"] !== undefined\n ? { fallbackStyle: Number(fallbackEl.attributes[\"val\"]) }\n : {}),\n };\n } else {\n const styleEl = findChild(el, \"c:style\");\n if (styleEl?.attributes?.[\"val\"] !== undefined) {\n result.style = Number(styleEl.attributes[\"val\"]);\n }\n }\n\n // CT_ChartSpace: clrMapOvr + protection (before c:chart)\n const colorMappingOverride = parseColorMapping(findChild(el, \"c:clrMapOvr\"));\n if (colorMappingOverride) result.colorMappingOverride = colorMappingOverride;\n const protection = readProtection(el);\n if (protection) result.protection = protection;\n const pivotSource = readPivotSource(el);\n if (pivotSource) result.pivotSource = pivotSource;\n\n // Chart container\n const chart = findChild(el, \"c:chart\");\n if (!chart) return result as ChartSpaceOptions;\n\n // Title — \"\" records a text-less title placeholder (bare <c:title/>) so\n // presence round-trips; autoTitleDeleted follows the same rule.\n const titleEl = findChild(chart, \"c:title\");\n if (titleEl) {\n result.title = readTitle(titleEl, ctx);\n }\n const autoTitleDeleted = readBoolAttr(chart, \"c:autoTitleDeleted\");\n if (autoTitleDeleted !== undefined) result.autoTitleDeleted = autoTitleDeleted;\n\n // 3D view (before plotArea per CT_Chart sequence)\n const pivotFormats = readPivotFormats(chart, ctx);\n if (pivotFormats) result.pivotFormats = pivotFormats;\n const view3D = readView3D(chart);\n if (view3D) result.view3D = view3D;\n\n // 3D walls and floor\n const floor = readSurface(chart, \"c:floor\", ctx);\n if (floor) result.floor = floor;\n const sideWall = readSurface(chart, \"c:sideWall\", ctx);\n if (sideWall) result.sideWall = sideWall;\n const backWall = readSurface(chart, \"c:backWall\", ctx);\n if (backWall) result.backWall = backWall;\n\n // Plot area — detect chart type\n const plotArea = findChild(chart, \"c:plotArea\");\n if (plotArea?.elements) {\n // plot-area manual layout (CT_Layout > CT_ManualLayout)\n const manualLayout = readManualLayout(findChild(plotArea, \"c:layout\"));\n if (manualLayout) result.plotAreaLayout = manualLayout;\n // plot-area data table (CT_PlotArea tail)\n const dataTable = readDataTable(plotArea, ctx);\n if (dataTable) result.dataTable = dataTable;\n let detectedType: ChartType | undefined;\n let threeD = false;\n let chartTypeEl: XmlElement | undefined;\n // Combo charts carry further chart groups in the same plot area\n // (CT_PlotArea allows any number of them).\n const secondaryEls: XmlElement[] = [];\n\n for (const child of plotArea.elements) {\n if (!child.name) continue;\n const mapping = TAG_TO_CHART_TYPE[child.name];\n if (mapping) {\n if (chartTypeEl) {\n secondaryEls.push(child);\n continue;\n }\n detectedType = mapping.type;\n threeD = mapping.threeD ?? false;\n chartTypeEl = child;\n // bar/column share the c:barChart tag; distinguish via c:barDir\n if (child.name === \"c:barChart\" || child.name === \"c:bar3DChart\") {\n const barDir = findChild(child, \"c:barDir\");\n const barDirVal = barDir ? attr(barDir, \"val\") : undefined;\n if (barDirVal === \"bar\") detectedType = \"bar\";\n else if (barDirVal === \"col\") detectedType = \"column\";\n }\n }\n }\n\n if (detectedType && chartTypeEl) {\n result.type = detectedType;\n if (threeD) result.threeD = true;\n readChartTypeScalars(chartTypeEl, detectedType, threeD, result, ctx);\n readChartTypeDecorations(chartTypeEl, detectedType, threeD, result, ctx);\n // Chart-group-level data labels (after the ser elements).\n const groupLabels = readDataLabels(chartTypeEl, ctx);\n if (groupLabels) result.dataLabels = groupLabels;\n // The axId reference sequence is data in its own right (legacy files\n // carry dangling val=\"0\" entries) — record it verbatim.\n const axIdEls = children(chartTypeEl, \"c:axId\");\n if (axIdEls.length > 0) {\n result.axisIds = axIdEls.map((e) => Number(attr(e, \"val\"))).filter((n) => !isNaN(n));\n }\n }\n\n // Extract series data (c:ser are children of the chart-type element, not plotArea)\n const seriesEls = chartTypeEl ? children(chartTypeEl, \"c:ser\") : [];\n if (seriesEls.length > 0) {\n if (detectedType === \"bubble\") {\n const bubbleSeries: BubbleSeriesData[] = [];\n for (const serEl of seriesEls) {\n const { name } = readSeriesName(serEl);\n const xVal = findChild(serEl, \"c:xVal\");\n const yVal = findChild(serEl, \"c:yVal\");\n const bubbleSize = findChild(serEl, \"c:bubbleSize\");\n bubbleSeries.push({\n name,\n xValues: xVal ? readNumCache(xVal) : [],\n yValues: yVal ? readNumCache(yVal) : [],\n bubbleSize: bubbleSize ? readNumCache(bubbleSize) : [],\n ...readSeriesCommon(serEl, ctx),\n });\n }\n result.series = bubbleSeries as BubbleSeriesData[];\n } else if (detectedType === \"scatter\" && hasNumericXRef(seriesEls[0]!)) {\n // Numeric-axis scatter (c:xVal/c:yVal as CT_NumDataSource) — per-series\n // xy arrays; the label-x shape falls through to the category path.\n const xySeries: ScatterSeriesData[] = [];\n for (const serEl of seriesEls) {\n const { name, literal: nameLiteral } = readSeriesName(serEl);\n const txEl = findChild(serEl, \"c:tx\");\n const nameFormula = txEl ? readRefMeta(txEl).formula : undefined;\n const xVal = findChild(serEl, \"c:xVal\");\n const yVal = findChild(serEl, \"c:yVal\");\n const valueLiteral = yVal ? findChild(yVal, \"c:numLit\") !== undefined : false;\n const yMeta = yVal ? readRefMeta(yVal) : {};\n xySeries.push({\n name,\n ...(nameLiteral ? { nameLiteral } : {}),\n ...(nameFormula ? { nameFormula } : {}),\n ...(valueLiteral ? { valueLiteral } : {}),\n ...(yMeta.formula ? { valueFormula: yMeta.formula } : {}),\n ...(yMeta.formatCode ? { formatCode: yMeta.formatCode } : {}),\n xValues: xVal ? readNumCache(xVal) : [],\n yValues: yVal ? readNumCache(yVal) : [],\n ...readSeriesCommon(serEl, ctx),\n });\n }\n result.series = xySeries;\n } else {\n const chartSeries: ChartSeriesData[] = [];\n let categories: string[] | undefined;\n\n for (const serEl of seriesEls) {\n const { name, literal: nameLiteral } = readSeriesName(serEl);\n const txEl = findChild(serEl, \"c:tx\");\n const nameFormula = txEl ? readRefMeta(txEl).formula : undefined;\n\n // Read categories from first series (c:cat may be strRef/strLit/\n // multiLvlStrRef/numRef — numeric categories keep their literal text)\n if (!categories && !result.multiLevelCategories && !result.categoryLabels) {\n const catEl = findChild(serEl, \"c:cat\") ?? findChild(serEl, \"c:xVal\");\n if (catEl) {\n const multi = readMultiLvlStrCache(catEl);\n if (multi) {\n result.multiLevelCategories = multi;\n const multiRef = findChild(catEl, \"c:multiLvlStrRef\");\n const multiF = multiRef ? findChild(multiRef, \"c:f\") : undefined;\n const multiText = multiF ? textOf(multiF) : \"\";\n if (multiText) result.categoryFormula = multiText;\n } else {\n const lit = readStrLit(catEl);\n if (lit) {\n result.categoryLabels = lit;\n categories = lit;\n } else if (findChild(catEl, \"c:numRef\")) {\n // A numRef source is numeric even when the cache is empty\n // (ptCount=0) — the axis kind is the reference form, not\n // the cached points.\n result.numericCategories = true;\n categories = readNumCacheText(catEl);\n } else {\n categories = readStrCache(catEl);\n }\n const catMeta = readRefMeta(catEl);\n if (catMeta.formula) result.categoryFormula = catMeta.formula;\n if (catMeta.formatCode) result.categoryFormatCode = catMeta.formatCode;\n }\n }\n }\n\n // Read values\n const valueEl = findChild(serEl, \"c:val\") ?? findChild(serEl, \"c:yVal\");\n const valueLiteral = valueEl ? findChild(valueEl, \"c:numLit\") !== undefined : false;\n const values = valueEl ? readNumCache(valueEl) : [];\n const valMeta = valueEl ? readRefMeta(valueEl) : {};\n\n chartSeries.push({\n name,\n ...(nameLiteral ? { nameLiteral } : {}),\n ...(nameFormula ? { nameFormula } : {}),\n ...(valueLiteral ? { valueLiteral } : {}),\n ...(valMeta.formula ? { valueFormula: valMeta.formula } : {}),\n ...(valMeta.formatCode ? { formatCode: valMeta.formatCode } : {}),\n values,\n ...readSeriesCommon(serEl, ctx),\n });\n }\n\n result.series = chartSeries as ChartSeriesData[];\n if (categories) result.categories = categories;\n }\n }\n\n // Further chart groups (combo charts) — own series and group flags,\n // sharing the category source and the axes list with the main group.\n if (secondaryEls.length > 0) {\n const groups: SecondaryChartGroupOptions[] = [];\n for (const secondaryEl of secondaryEls) {\n const g = readSecondaryGroup(secondaryEl, ctx);\n if (g) groups.push(g);\n }\n if (groups.length > 0) result.secondaryGroups = groups;\n }\n }\n\n // Axes\n const axes = readAxes(plotArea, ctx);\n if (axes) result.axes = axes;\n\n // CT_PlotArea tail: dTable → spPr\n const plotSpPr = plotArea && findChild(plotArea, \"c:spPr\");\n if (plotSpPr)\n result.plotAreaShapeProperties = shapePropertiesDesc.parse(\n plotSpPr,\n ctx,\n ) as ShapePropertiesOptions;\n\n // Legend — default is true; parse records true explicitly so stringify\n // can tell a round-trip legend from a fresh default one.\n const legend = findChild(chart, \"c:legend\");\n if (!legend) {\n result.showLegend = false;\n } else {\n result.showLegend = true;\n const legendData = readLegend(chart, ctx);\n if (legendData?.position) result.legendPosition = legendData.position;\n if (legendData?.layout !== undefined) result.legendLayout = legendData.layout;\n if (legendData?.overlay !== undefined) result.legendOverlay = legendData.overlay;\n if (legendData?.shapeProperties) result.legendShapeProperties = legendData.shapeProperties;\n if (legendData?.textProperties) result.legendTextProperties = legendData.textProperties;\n if (legendData?.entries) result.legendEntries = legendData.entries;\n }\n\n // CT_Chart tail: plotVisOnly, dispBlanksAs, showDLblsOverMax\n const plotVisOnly = readBoolAttr(chart, \"c:plotVisOnly\");\n if (plotVisOnly !== undefined) result.plotVisOnly = plotVisOnly;\n const dispBlanksAs = readValStr(chart, \"c:dispBlanksAs\");\n if (dispBlanksAs) result.displayBlanksAs = dispBlanksAs as DisplayBlanksAs;\n const showDLblsOverMax = readBoolAttr(chart, \"c:showDLblsOverMax\");\n if (showDLblsOverMax !== undefined) result.showDataLabelsOverMax = showDLblsOverMax;\n\n // CT_ChartSpace tail: spPr (chart-area shape properties), txPr, then externalData\n const spPrEl = findChild(el, \"c:spPr\");\n if (spPrEl) {\n result.shapeProperties = shapePropertiesDesc.parse(spPrEl, ctx) as ShapePropertiesOptions;\n }\n const spaceTxPr = findChild(el, \"c:txPr\");\n if (spaceTxPr) result.textProperties = textBodyDesc.parse(spaceTxPr, ctx);\n const externalData = readExternalData(el);\n if (externalData) result.externalData = externalData;\n const printSettings = readPrintSettings(el);\n if (printSettings) result.printSettings = printSettings;\n const userShapesEl = findChild(el, \"c:userShapes\");\n if (userShapesEl) {\n const rid = attr(userShapesEl, \"r:id\");\n if (rid !== undefined) result.userShapes = rid;\n }\n const spaceExtLst = findChild(el, \"c:extLst\");\n if (spaceExtLst) {\n result.ext = (spaceExtLst.elements ?? []).map((e) => stringifyElement(e)).join(\"\");\n }\n\n return result as ChartSpaceOptions;\n },\n};\n","/**\n * Chart user shapes part (cdr:userShapes / CT_Drawing in dml-chartDrawing).\n *\n * Freeform shapes layered over a chart, anchored relatively (from/to markers,\n * 0.0–1.0 of the chart area) or absolutely (from marker + EMU extent). The\n * part hangs off the chart part via `c:userShapes r:id` — that reference is\n * produced and parsed by chartSpaceDesc; this module is the part body.\n *\n * The shape payload reuses the core drawingml descriptors: shapeProperties /\n * textBody / blipFill / groupShapeProperties / style-matrix / cNvPr.\n *\n * Reference: ISO/IEC 29500-4, dml-chartDrawing.xsd, CT_Drawing\n *\n * @module\n */\n\nimport { escapeXml, findChild, stringifyElement } from \"@office-open/xml\";\nimport type { Element as XmlElement } from \"@office-open/xml\";\n\nimport type { CustomDescriptor, ReadContext, WriteContext } from \"../../descriptor\";\nimport { stringify, parse } from \"../../descriptor\";\nimport { blipFillDesc } from \"../../drawing/blip/blip-descriptors\";\nimport type { BlipFillOptions } from \"../../drawing/blip/blip-fill\";\nimport { groupShapePropertiesDesc } from \"../../drawing/group-shape-properties-desc\";\nimport type { GroupShapePropertiesOptions } from \"../../drawing/group-shape-properties-desc\";\nimport type { GraphicFrameLockingOptions } from \"../../drawing/locking/locking\";\nimport { stringifyNonVisualDrawingProperties } from \"../../drawing/non-visual\";\nimport type { NonVisualDrawingPropertiesOptions } from \"../../drawing/non-visual\";\nimport { shapePropertiesDesc } from \"../../drawing/shape-properties-desc\";\nimport type { ShapePropertiesOptions } from \"../../drawing/shape-properties-desc\";\nimport type { TextBodyOptions } from \"../../drawing/text/text-body\";\nimport { textBodyDesc } from \"../../drawing/text/text-body\";\nimport type { Transform2DOptions } from \"../../drawing/transform\";\nimport { transform2DDesc } from \"../../drawing/transform-descriptors\";\nimport { stringifyShapeStyle, parseShapeStyle } from \"../../theme/style-matrix\";\nimport type { DefaultShapeStyleOptions } from \"../../theme/theme-options\";\nimport { parseOnOff } from \"../../util/values\";\n\nconst CDR_NS = \"http://schemas.openxmlformats.org/drawingml/2006/chartDrawing\";\nconst A_NS = \"http://schemas.openxmlformats.org/drawingml/2006/main\";\nconst R_NS = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\";\n\n// Noop context for descriptors that don't touch relationships (style matrix\n// colors never register media here; blip fills reference via referenceId).\nconst DIRECT_CTX: WriteContext = {\n addRelationship: () => \"\",\n addMedia: () => \"\",\n addHyperlink: () => {},\n};\n\n// ── Anchors ──\n\n/** Anchor marker (CT_Marker): x/y as 0.0–1.0 fractions of the chart area. */\nexport interface UserShapeMarkerOptions {\n x: number;\n y: number;\n}\n\n/** Anchor extent (a:ext): width/height in EMU. */\nexport interface UserShapeExtentOptions {\n width: number;\n height: number;\n}\n\n/** Relative anchor (cdr:relSizeAnchor): the object spans from `from` to `to`. */\nexport interface RelativeSizeAnchorOptions {\n from: UserShapeMarkerOptions;\n to: UserShapeMarkerOptions;\n object: UserShapeObjectOptions;\n}\n\n/** Absolute anchor (cdr:absSizeAnchor): fixed EMU size at the `from` marker. */\nexport interface AbsoluteSizeAnchorOptions {\n from: UserShapeMarkerOptions;\n extent: UserShapeExtentOptions;\n object: UserShapeObjectOptions;\n}\n\n// ── Object choices (EG_ObjectChoices) ──\n\n/** Fields shared by every user-shape object (cNvPr `@id` + `@macro`/`@fPublished`). */\ninterface ObjectCommonAttributes {\n /** cNvPr drawing id (schema-required) */\n id: number;\n /** Macro reference (`@macro`) */\n macro?: string;\n /** Published as a server-side shape (`@fPublished`, default false) */\n published?: boolean;\n}\n\nexport interface UserShapeShapeOptions extends ObjectCommonAttributes {\n type: \"shape\";\n /** cNvPr — id is required by the schema */\n nonVisualProperties?: NonVisualDrawingPropertiesOptions;\n /** Text-box marker (cdr:cNvSpPr `@txBox`) */\n textBox?: boolean;\n shapeProperties: ShapePropertiesOptions;\n style?: DefaultShapeStyleOptions;\n textBody?: TextBodyOptions;\n /** Formula linking the text to a cell (`@textlink`) */\n textLink?: string;\n /** Text locking (`@fLocksText`, default true) */\n locksText?: boolean;\n}\n\nexport interface UserShapeConnectorOptions extends ObjectCommonAttributes {\n type: \"connector\";\n nonVisualProperties?: NonVisualDrawingPropertiesOptions;\n shapeProperties: ShapePropertiesOptions;\n style?: DefaultShapeStyleOptions;\n}\n\nexport interface UserShapePictureOptions extends ObjectCommonAttributes {\n type: \"picture\";\n nonVisualProperties?: NonVisualDrawingPropertiesOptions;\n /** Image reference key (a:blip r:embed via the relationship placeholder) */\n referenceId: string;\n blipFill?: BlipFillOptions;\n shapeProperties: ShapePropertiesOptions;\n style?: DefaultShapeStyleOptions;\n}\n\nexport interface UserShapeGraphicFrameOptions extends ObjectCommonAttributes {\n type: \"graphicFrame\";\n nonVisualProperties?: NonVisualDrawingPropertiesOptions;\n /** Frame locking flags (cdr:cNvGraphicFramePr) */\n graphicFrameLocks?: GraphicFrameLockingOptions | null;\n /** Placement transform (cdr:xfrm) */\n transform: Transform2DOptions;\n /**\n * Verbatim a:graphic XML payload. The graphic contents (chart/table\n * references) are package-wired; the part body carries them unchanged.\n */\n graphic: string;\n}\n\nexport interface UserShapeGroupOptions extends ObjectCommonAttributes {\n type: \"group\";\n nonVisualProperties?: NonVisualDrawingPropertiesOptions;\n groupShapeProperties: GroupShapePropertiesOptions;\n children: UserShapeObjectOptions[];\n}\n\nexport type UserShapeObjectOptions =\n | UserShapeShapeOptions\n | UserShapeConnectorOptions\n | UserShapePictureOptions\n | UserShapeGraphicFrameOptions\n | UserShapeGroupOptions;\n\n/** cdr:userShapes part options (CT_Drawing). */\nexport interface UserShapesOptions {\n anchors: (RelativeSizeAnchorOptions | AbsoluteSizeAnchorOptions)[];\n}\n\n// ── Stringify ──\n\nfunction stringifyMarker(marker: UserShapeMarkerOptions): string {\n return `<cdr:x>${marker.x}</cdr:x><cdr:y>${marker.y}</cdr:y>`;\n}\n\nfunction stringifyCnvPr(id: number, nvp: NonVisualDrawingPropertiesOptions | undefined): string {\n return stringifyNonVisualDrawingProperties(\"cdr:cNvPr\", id, nvp, \"User Shape\");\n}\n\nfunction commonAttrs(opts: ObjectCommonAttributes): string {\n let attrs = \"\";\n if (opts.macro !== undefined) attrs += ` macro=\"${escapeXml(opts.macro)}\"`;\n if (opts.published) attrs += ' fPublished=\"1\"';\n return attrs;\n}\n\nfunction isRelative(\n anchor: RelativeSizeAnchorOptions | AbsoluteSizeAnchorOptions,\n): anchor is RelativeSizeAnchorOptions {\n return \"to\" in anchor;\n}\n\nfunction stringifyObject(obj: UserShapeObjectOptions): string {\n switch (obj.type) {\n case \"shape\": {\n const textLinkAttr =\n obj.textLink !== undefined ? ` textlink=\"${escapeXml(obj.textLink)}\"` : \"\";\n const locksTextAttr =\n obj.locksText !== undefined ? ` fLocksText=\"${obj.locksText ? 1 : 0}\"` : \"\";\n const nvSpPr =\n `<cdr:nvSpPr>${stringifyCnvPr(obj.id, obj.nonVisualProperties)}` +\n `<cdr:cNvSpPr${obj.textBox ? ' txBox=\"1\"' : \"\"}/></cdr:nvSpPr>`;\n const spPrXml = stringify(shapePropertiesDesc, obj.shapeProperties, DIRECT_CTX) ?? \"\";\n const styleXml = obj.style ? stringifyShapeStyle(obj.style, DIRECT_CTX) : \"\";\n const txBodyXml = obj.textBody\n ? (stringify(textBodyDesc, obj.textBody, DIRECT_CTX) ?? \"\")\n : \"\";\n return (\n `<cdr:sp${commonAttrs(obj)}${textLinkAttr}${locksTextAttr}>` +\n nvSpPr +\n `<cdr:spPr>${spPrXml}</cdr:spPr>` +\n styleXml +\n txBodyXml +\n \"</cdr:sp>\"\n );\n }\n case \"connector\": {\n const nvCxnSpPr = `<cdr:nvCxnSpPr>${stringifyCnvPr(obj.id, obj.nonVisualProperties)}<cdr:cNvCxnSpPr/></cdr:nvCxnSpPr>`;\n const spPrXml = stringify(shapePropertiesDesc, obj.shapeProperties, DIRECT_CTX) ?? \"\";\n const styleXml = obj.style ? stringifyShapeStyle(obj.style, DIRECT_CTX) : \"\";\n return (\n `<cdr:cxnSp${commonAttrs(obj)}>` +\n nvCxnSpPr +\n `<cdr:spPr>${spPrXml}</cdr:spPr>` +\n styleXml +\n \"</cdr:cxnSp>\"\n );\n }\n case \"picture\": {\n const nvPicPr = `<cdr:nvPicPr>${stringifyCnvPr(obj.id, obj.nonVisualProperties)}<cdr:cNvPicPr/></cdr:nvPicPr>`;\n const fillOpts = { ...obj.blipFill, referenceId: obj.referenceId };\n // blipFill is a local element of CT_Picture → cdr-prefixed root; the\n // blip/srcRect/tile children belong to a: either way.\n const blipFillXml = (stringify(blipFillDesc, fillOpts, DIRECT_CTX) ?? \"\").replace(\n /pic:blipFill/g,\n \"cdr:blipFill\",\n );\n const spPrXml = stringify(shapePropertiesDesc, obj.shapeProperties, DIRECT_CTX) ?? \"\";\n const styleXml = obj.style ? stringifyShapeStyle(obj.style, DIRECT_CTX) : \"\";\n return (\n `<cdr:pic${commonAttrs(obj)}>` +\n nvPicPr +\n blipFillXml +\n `<cdr:spPr>${spPrXml}</cdr:spPr>` +\n styleXml +\n \"</cdr:pic>\"\n );\n }\n case \"graphicFrame\": {\n const locks = obj.graphicFrameLocks;\n const locksXml = locks\n ? `<a:graphicFrameLocks${Object.entries(locks)\n .filter(([, v]) => v)\n .map(([k]) => ` ${k}=\"1\"`)\n .join(\"\")}/>`\n : \"\";\n const nvGraphicFramePr = `<cdr:nvGraphicFramePr>${stringifyCnvPr(\n obj.id,\n obj.nonVisualProperties,\n )}<cdr:cNvGraphicFramePr>${locksXml}</cdr:cNvGraphicFramePr></cdr:nvGraphicFramePr>`;\n // xfrm is a local element of CT_GraphicFrame → cdr-prefixed root; the\n // off/ext children belong to a: either way, so re-tag the root only.\n const xfrmXml = (stringify(transform2DDesc, obj.transform, DIRECT_CTX) ?? \"\").replace(\n /a:xfrm/g,\n \"cdr:xfrm\",\n );\n return (\n `<cdr:graphicFrame${commonAttrs(obj)}>` +\n nvGraphicFramePr +\n xfrmXml +\n obj.graphic +\n \"</cdr:graphicFrame>\"\n );\n }\n case \"group\": {\n const nvGrpSpPr = `<cdr:nvGrpSpPr>${stringifyCnvPr(obj.id, obj.nonVisualProperties)}<cdr:cNvGrpSpPr/></cdr:nvGrpSpPr>`;\n const grpSpPrXml =\n stringify(groupShapePropertiesDesc, obj.groupShapeProperties, DIRECT_CTX) ?? \"\";\n return (\n \"<cdr:grpSp>\" +\n nvGrpSpPr +\n `<cdr:grpSpPr>${grpSpPrXml}</cdr:grpSpPr>` +\n obj.children.map(stringifyObject).join(\"\") +\n \"</cdr:grpSp>\"\n );\n }\n }\n}\n\n// ── Parse ──\n\nfunction readMarker(el: XmlElement | undefined): UserShapeMarkerOptions | undefined {\n if (!el) return undefined;\n const x = findChild(el, \"cdr:x\");\n const y = findChild(el, \"cdr:y\");\n if (!x || !y) return undefined;\n return {\n x: Number(x.elements?.[0]?.text ?? 0),\n y: Number(y.elements?.[0]?.text ?? 0),\n };\n}\n\ninterface ParsedCnvPr {\n id: number;\n nvp: NonVisualDrawingPropertiesOptions;\n}\n\nfunction readCnvPr(el: XmlElement | undefined): ParsedCnvPr | undefined {\n if (!el) return undefined;\n const attrs = el.attributes ?? {};\n if (attrs[\"id\"] === undefined) return undefined;\n const nvp: Partial<NonVisualDrawingPropertiesOptions> = {};\n if (attrs[\"name\"] !== undefined) nvp.name = String(attrs[\"name\"]);\n if (attrs[\"descr\"] !== undefined) nvp.description = String(attrs[\"descr\"]);\n if (attrs[\"hidden\"] !== undefined) nvp.hidden = parseOnOff(attrs[\"hidden\"]) ?? false;\n return { id: Number(attrs[\"id\"]), nvp: nvp as NonVisualDrawingPropertiesOptions };\n}\n\n/** macro/fPublished attributes shared by every non-group user-shape object. */\nfunction readCommonAttrs(el: XmlElement): { macro?: string; published?: boolean } {\n const out: { macro?: string; published?: boolean } = {};\n if (el.attributes?.[\"macro\"] !== undefined) out.macro = String(el.attributes[\"macro\"]);\n if (el.attributes?.[\"fPublished\"] !== undefined)\n out.published = parseOnOff(el.attributes[\"fPublished\"]) ?? false;\n return out;\n}\n\nfunction readObject(el: XmlElement, ctx: ReadContext): UserShapeObjectOptions | undefined {\n switch (el.name) {\n case \"cdr:sp\": {\n const nvSpPr = findChild(el, \"cdr:nvSpPr\");\n const spPr = findChild(el, \"cdr:spPr\");\n if (!nvSpPr || !spPr) return undefined;\n const cnvPr = readCnvPr(findChild(nvSpPr, \"cdr:cNvPr\"));\n if (!cnvPr) return undefined;\n const cNvSpPr = findChild(nvSpPr, \"cdr:cNvSpPr\");\n const result: UserShapeShapeOptions = {\n type: \"shape\",\n id: cnvPr.id,\n nonVisualProperties: cnvPr.nvp,\n shapeProperties: parse(shapePropertiesDesc, spPr, ctx),\n };\n if (cNvSpPr && cNvSpPr.attributes?.[\"txBox\"] !== undefined)\n result.textBox = parseOnOff(cNvSpPr.attributes[\"txBox\"]) ?? false;\n const styleEl = findChild(el, \"a:style\");\n if (styleEl) result.style = parseShapeStyle(styleEl, ctx);\n const txBody = findChild(el, \"cdr:txBody\");\n if (txBody) result.textBody = parse(textBodyDesc, txBody, ctx);\n Object.assign(result, readCommonAttrs(el));\n if (el.attributes?.[\"textlink\"] !== undefined)\n result.textLink = String(el.attributes[\"textlink\"]);\n if (el.attributes?.[\"fLocksText\"] !== undefined)\n result.locksText = parseOnOff(el.attributes[\"fLocksText\"]) ?? true;\n return result;\n }\n case \"cdr:cxnSp\": {\n const nvCxnSpPr = findChild(el, \"cdr:nvCxnSpPr\");\n const spPr = findChild(el, \"cdr:spPr\");\n if (!nvCxnSpPr || !spPr) return undefined;\n const cnvPr = readCnvPr(findChild(nvCxnSpPr, \"cdr:cNvPr\"));\n if (!cnvPr) return undefined;\n const result: UserShapeConnectorOptions = {\n type: \"connector\",\n id: cnvPr.id,\n nonVisualProperties: cnvPr.nvp,\n shapeProperties: parse(shapePropertiesDesc, spPr, ctx),\n };\n const styleEl = findChild(el, \"a:style\");\n if (styleEl) result.style = parseShapeStyle(styleEl, ctx);\n Object.assign(result, readCommonAttrs(el));\n return result;\n }\n case \"cdr:pic\": {\n const nvPicPr = findChild(el, \"cdr:nvPicPr\");\n const blipFill = findChild(el, \"cdr:blipFill\");\n const spPr = findChild(el, \"cdr:spPr\");\n if (!nvPicPr || !blipFill || !spPr) return undefined;\n const cnvPr = readCnvPr(findChild(nvPicPr, \"cdr:cNvPr\"));\n if (!cnvPr) return undefined;\n const fill = parse(blipFillDesc, blipFill, ctx);\n const { referenceId, ...blipFillOpts } = fill;\n const result: UserShapePictureOptions = {\n type: \"picture\",\n id: cnvPr.id,\n nonVisualProperties: cnvPr.nvp,\n referenceId: referenceId ?? \"\",\n shapeProperties: parse(shapePropertiesDesc, spPr, ctx),\n };\n if (Object.keys(blipFillOpts).length > 0) result.blipFill = blipFillOpts;\n const styleEl = findChild(el, \"a:style\");\n if (styleEl) result.style = parseShapeStyle(styleEl, ctx);\n Object.assign(result, readCommonAttrs(el));\n return result;\n }\n case \"cdr:graphicFrame\": {\n const nvGraphicFramePr = findChild(el, \"cdr:nvGraphicFramePr\");\n const xfrm = findChild(el, \"cdr:xfrm\");\n const graphic = findChild(el, \"a:graphic\");\n if (!nvGraphicFramePr || !xfrm || !graphic) return undefined;\n const cnvPr = readCnvPr(findChild(nvGraphicFramePr, \"cdr:cNvPr\"));\n if (!cnvPr) return undefined;\n const result: UserShapeGraphicFrameOptions = {\n type: \"graphicFrame\",\n id: cnvPr.id,\n nonVisualProperties: cnvPr.nvp,\n transform: parse(transform2DDesc, xfrm, ctx),\n graphic: stringifyElement(graphic),\n };\n const cNvGraphicFramePr = findChild(nvGraphicFramePr, \"cdr:cNvGraphicFramePr\");\n if (cNvGraphicFramePr) {\n const locks = findChild(cNvGraphicFramePr, \"a:graphicFrameLocks\");\n if (locks) {\n const flags: Record<string, boolean> = {};\n for (const key of [\n \"noGrp\",\n \"noDrilldown\",\n \"noSelect\",\n \"noChangeAspect\",\n \"noMove\",\n \"noResize\",\n ]) {\n const raw = locks.attributes?.[key];\n if (raw !== undefined) flags[key] = parseOnOff(raw) ?? false;\n }\n if (Object.keys(flags).length > 0)\n result.graphicFrameLocks = flags as GraphicFrameLockingOptions;\n } else {\n result.graphicFrameLocks = {};\n }\n }\n Object.assign(result, readCommonAttrs(el));\n return result;\n }\n case \"cdr:grpSp\": {\n const nvGrpSpPr = findChild(el, \"cdr:nvGrpSpPr\");\n const grpSpPr = findChild(el, \"cdr:grpSpPr\");\n if (!nvGrpSpPr || !grpSpPr) return undefined;\n const cnvPr = readCnvPr(findChild(nvGrpSpPr, \"cdr:cNvPr\"));\n if (!cnvPr) return undefined;\n const children: UserShapeObjectOptions[] = [];\n for (const child of el.elements ?? []) {\n const parsed = readObject(child, ctx);\n if (parsed) children.push(parsed);\n }\n return {\n type: \"group\",\n id: cnvPr.id,\n nonVisualProperties: cnvPr.nvp,\n groupShapeProperties: parse(groupShapePropertiesDesc, grpSpPr, ctx),\n children,\n };\n }\n default:\n return undefined;\n }\n}\n\n// ── Descriptor ──\n\nexport const userShapesDesc: CustomDescriptor<UserShapesOptions> = {\n kind: \"custom\",\n\n stringify(opts, _ctx) {\n const anchors = opts.anchors\n .map((anchor) => {\n const objectXml = stringifyObject(anchor.object);\n if (isRelative(anchor)) {\n return (\n `<cdr:relSizeAnchor>` +\n `<cdr:from>${stringifyMarker(anchor.from)}</cdr:from>` +\n `<cdr:to>${stringifyMarker(anchor.to)}</cdr:to>` +\n objectXml +\n `</cdr:relSizeAnchor>`\n );\n }\n return (\n `<cdr:absSizeAnchor>` +\n `<cdr:from>${stringifyMarker(anchor.from)}</cdr:from>` +\n `<cdr:ext cx=\"${anchor.extent.width}\" cy=\"${anchor.extent.height}\"/>` +\n objectXml +\n `</cdr:absSizeAnchor>`\n );\n })\n .join(\"\");\n\n return (\n `<cdr:userShapes xmlns:cdr=\"${CDR_NS}\" xmlns:a=\"${A_NS}\" xmlns:r=\"${R_NS}\">` +\n anchors +\n `</cdr:userShapes>`\n );\n },\n\n parse(el, ctx) {\n const anchors: (RelativeSizeAnchorOptions | AbsoluteSizeAnchorOptions)[] = [];\n for (const anchorEl of el.elements ?? []) {\n if (anchorEl.name === \"cdr:relSizeAnchor\") {\n const from = readMarker(findChild(anchorEl, \"cdr:from\"));\n const to = readMarker(findChild(anchorEl, \"cdr:to\"));\n const object = readAnchorObject(anchorEl, ctx);\n if (from && to && object) anchors.push({ from, to, object });\n } else if (anchorEl.name === \"cdr:absSizeAnchor\") {\n const from = readMarker(findChild(anchorEl, \"cdr:from\"));\n const ext = findChild(anchorEl, \"cdr:ext\");\n const object = readAnchorObject(anchorEl, ctx);\n if (from && ext && object) {\n anchors.push({\n from,\n extent: {\n width: Number(ext.attributes?.[\"cx\"] ?? 0),\n height: Number(ext.attributes?.[\"cy\"] ?? 0),\n },\n object,\n });\n }\n }\n }\n return { anchors } as UserShapesOptions;\n },\n};\n\n/** Read the EG_ObjectChoices payload of an anchor element. */\nfunction readAnchorObject(\n anchorEl: XmlElement,\n ctx: ReadContext,\n): UserShapeObjectOptions | undefined {\n for (const child of anchorEl.elements ?? []) {\n const object = readObject(child, ctx);\n if (object) return object;\n }\n return undefined;\n}\n"],"mappings":"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"}
|