@office-open/core 0.11.0 → 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/dist/chart/index.d.mts +2 -2
- package/dist/chart/index.mjs +1 -1
- package/dist/{chart-Kf_utasF.mjs → chart-DED4tXC9.mjs} +828 -283
- package/dist/chart-DED4tXC9.mjs.map +1 -0
- package/dist/data-type-CZMKVaaT.d.mts.map +1 -1
- package/dist/descriptor/index.d.mts +1 -1
- package/dist/descriptor/index.mjs +1 -1
- package/dist/{descriptor-BX8xW8na.mjs → descriptor-BqaNZrrZ.mjs} +38 -10
- package/dist/{descriptor-BX8xW8na.mjs.map → descriptor-BqaNZrrZ.mjs.map} +1 -1
- package/dist/drawing/index.d.mts +2 -2
- package/dist/drawing/index.mjs +2 -2
- package/dist/{drawing-FBzd2I0m.mjs → drawing-BCAyrCCw.mjs} +3056 -3130
- package/dist/drawing-BCAyrCCw.mjs.map +1 -0
- package/dist/{generators-CElPsAhd.mjs → ext-uri-BHBcIrW7.mjs} +599 -343
- 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-DxwLMnBF.d.mts → index-BP541uS-.d.mts} +136 -31
- package/dist/index-BP541uS-.d.mts.map +1 -0
- package/dist/{index-CLX7gU9J.d.mts → index-BQLIofaF.d.mts} +3 -2
- 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-CnjCK-lF.d.mts → index-DPkf_CtG.d.mts} +566 -597
- package/dist/index-DPkf_CtG.d.mts.map +1 -0
- package/dist/{index-BsTUn4K1.d.mts → index-DcukVskh.d.mts} +9 -6
- package/dist/index-DcukVskh.d.mts.map +1 -0
- package/dist/{index-Cgz88FU0.d.mts → index-Di6XPdGl.d.mts} +26 -12
- package/dist/index-Di6XPdGl.d.mts.map +1 -0
- package/dist/{index-C0ClOhmZ.d.mts → index-L6AXewfV.d.mts} +11 -8
- package/dist/index-L6AXewfV.d.mts.map +1 -0
- package/dist/index.d.mts +140 -29
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +849 -87
- 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-3KLx2yEP.mjs → patch-AkQY17CD.mjs} +71 -26
- package/dist/patch-AkQY17CD.mjs.map +1 -0
- package/dist/smartart/index.d.mts +2 -2
- package/dist/smartart/index.mjs +1 -1
- package/dist/{smartart-BxnkROOp.mjs → smartart-n1kYJ6Jg.mjs} +27 -26
- package/dist/smartart-n1kYJ6Jg.mjs.map +1 -0
- package/dist/{style-matrix-DAP6XrLv.mjs → style-matrix-B6jhPAT3.mjs} +4 -4
- package/dist/style-matrix-B6jhPAT3.mjs.map +1 -0
- package/dist/theme/index.d.mts +4 -4
- package/dist/theme/index.mjs +3 -2
- package/dist/{theme-OAuRcA9_.mjs → theme-BKnXRmvn.mjs} +37 -71
- package/dist/theme-BKnXRmvn.mjs.map +1 -0
- package/dist/{theme-options-BbWccl85.d.mts → theme-options-kO89NUEX.d.mts} +17 -17
- 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-C94-JKtp.mjs → util-ptE16MEk.mjs} +69 -37
- package/dist/util-ptE16MEk.mjs.map +1 -0
- package/dist/{values-aVoirbWB.d.mts → values-BECDm4zr.d.mts} +15 -31
- package/dist/values-BECDm4zr.d.mts.map +1 -0
- package/dist/vector/index.d.mts +2 -2
- package/dist/vector/index.mjs +2 -2
- package/dist/{vector-TpjW6ZSc.mjs → vector-DhLGZjP5.mjs} +104 -147
- package/dist/vector-DhLGZjP5.mjs.map +1 -0
- package/package.json +3 -3
- package/dist/chart-Kf_utasF.mjs.map +0 -1
- package/dist/drawing-FBzd2I0m.mjs.map +0 -1
- package/dist/generators-CElPsAhd.mjs.map +0 -1
- package/dist/index-BsTUn4K1.d.mts.map +0 -1
- package/dist/index-C0ClOhmZ.d.mts.map +0 -1
- package/dist/index-CLX7gU9J.d.mts.map +0 -1
- package/dist/index-Cgz88FU0.d.mts.map +0 -1
- package/dist/index-CnjCK-lF.d.mts.map +0 -1
- package/dist/index-DpPeyf5f.d.mts +0 -316
- package/dist/index-DpPeyf5f.d.mts.map +0 -1
- package/dist/index-DxwLMnBF.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-3KLx2yEP.mjs.map +0 -1
- package/dist/smartart-BxnkROOp.mjs.map +0 -1
- package/dist/style-matrix-DAP6XrLv.mjs.map +0 -1
- package/dist/theme-OAuRcA9_.mjs.map +0 -1
- package/dist/theme-options-BbWccl85.d.mts.map +0 -1
- package/dist/util-C94-JKtp.mjs.map +0 -1
- package/dist/values-aVoirbWB.d.mts.map +0 -1
- package/dist/vector-TpjW6ZSc.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chart-Kf_utasF.mjs","names":["stringifyMarker","readMarker","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 */\n\nexport interface ChartData {\n key: string;\n chartSpaceXml: string;\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 } from \"@office-open/xml\";\nimport type { Element as XmlElement } from \"@office-open/xml\";\nimport { attr, findChild, children, textOf } from \"@office-open/xml\";\n\nimport type { CustomDescriptor, ReadContext, WriteContext } from \"../descriptor\";\nimport { parseColorMapping, stringifyColorMapping } from \"../theme/color-mapping\";\nimport { parseOnOff } from \"../util/values\";\nimport type {\n ChartSpaceOptions,\n BubbleSeriesData,\n ChartSeriesData,\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 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 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: true → omit val, false → \"0\") ──\n\nfunction boolVal(value: boolean | undefined): string {\n // XSD CT_OnOff: omit val for true, val=\"0\" for false\n return value === false ? ` val=\"0\"` : \"\";\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\", 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 if (opts.direction !== undefined) parts.push(valEl(\"c:errDir\", opts.direction));\n parts.push(valEl(\"c:errBarType\", opts.barType ?? \"both\"));\n parts.push(valEl(\"c:errValType\", opts.valueType ?? \"fixedVal\"));\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): 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 if (opts.numberFormat !== undefined)\n inner.push(`<c:numFmt formatCode=\"${escapeXml(opts.numberFormat)}\" sourceLinked=\"0\"/>`);\n if (opts.position !== undefined) inner.push(valEl(\"c:dLblPos\", opts.position));\n return `<c:dLbl><c:idx val=\"${opts.index}\"/>${inner.join(\"\")}</c:dLbl>`;\n}\n\nfunction stringifyDataLabels(opts: DataLabelsOptions): 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));\n }\n if (opts.position !== undefined) parts.push(valEl(\"c:dLblPos\", 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 if (opts.showLeaderLines !== undefined)\n parts.push(`<c:showLeaderLines${boolVal(opts.showLeaderLines)}/>`);\n // CT_ChartLines (leaderLines) closes Group_DLbls; an empty element is XSD-valid.\n if (opts.leaderLines) parts.push(emptyEl(\"c:leaderLines\"));\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): 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 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) parts.push(valEl(\"c:orientation\", 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 stringifyAxisTitle(title: string): string {\n // Same c:rich run shape as the chart title so parse reuses readTitleText.\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:overlay val=\"0\"/></c:title>`;\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: AxisOptions): 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 if (opts.position !== undefined) parts.push(valEl(\"c:axPos\", opts.position));\n if (opts.majorGridlines) parts.push(emptyEl(\"c:majorGridlines\"));\n if (opts.minorGridlines) parts.push(emptyEl(\"c:minorGridlines\"));\n if (opts.title !== undefined) parts.push(stringifyAxisTitle(opts.title));\n if (opts.numberFormat !== undefined)\n parts.push(`<c:numFmt formatCode=\"${escapeXml(opts.numberFormat)}\" sourceLinked=\"1\"/>`);\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 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) parts.push(valEl(\"c:crosses\", 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) parts.push(valEl(\"c:lblAlgn\", 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) parts.push(valEl(\"c:crossBetween\", 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\nfunction stringifyStrRef(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:strRef><c:f/><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[])[]): 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><c:f/><c:multiLvlStrCache><c:ptCount ${attrVal(\"val\", ptCount)}/>${lvls}</c:multiLvlStrCache></c:multiLvlStrRef>`;\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) return stringifyMultiLvlStrRef(opts.multiLevelCategories);\n if (opts.categoryLabels) return stringifyStrLit(opts.categoryLabels);\n return stringifyStrRef(opts.categories ?? []);\n}\n\nfunction stringifyNumRef(values: readonly number[]): string {\n const pts = values.map((v, i) => `<c:pt idx=\"${i}\"><c:v>${v}</c:v></c:pt>`).join(\"\");\n return `<c:numRef><c:f/><c:numCache><c:formatCode>General</c:formatCode><c:ptCount ${attrVal(\"val\", values.length)}/>${pts}</c:numCache></c:numRef>`;\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): string {\n // CT_DTable: showHorzBorder → showVertBorder → showOutline → showKeys\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 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 {\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 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 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\nfunction chartTypeHeader(opts: ChartSpaceOptions): 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\", \"clustered\"));\n break;\n case \"line\":\n case \"area\":\n headerParts.push(valEl(\"c: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\", \"standard\"));\n break;\n case \"ofPie\":\n headerParts.push(valEl(\"c:ofPieType\", opts.ofPieType ?? \"pie\"));\n headerParts.push(valEl(\"c:varyColors\", 1));\n break;\n case \"pie\":\n case \"doughnut\":\n case \"bubble\":\n headerParts.push(valEl(\"c:varyColors\", 1));\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 return `<${tag}>${headerParts.join(\"\")}`;\n}\n\nfunction chartTypeFooter(opts: ChartSpaceOptions): 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 } else {\n // CT_BarChart: gapWidth → overlap → serLines\n if (opts.overlap !== undefined) parts.push(valEl(\"c:overlap\", opts.overlap));\n if (opts.seriesLines) parts.push(emptyEl(\"c:serLines\"));\n }\n break;\n case \"line\":\n // EG_LineChartShared tail: dropLines (after ser/dLbls)\n if (opts.dropLines) parts.push(emptyEl(\"c:dropLines\"));\n if (!opts.threeD) {\n // CT_LineChart: dropLines → hiLowLines → upDownBars → marker → smooth\n if (opts.highLowLines) parts.push(emptyEl(\"c:hiLowLines\"));\n if (opts.upDownBars) parts.push(stringifyUpDownBars(opts.upDownBarsGapWidth));\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 if (opts.dropLines) parts.push(emptyEl(\"c:dropLines\"));\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 if (opts.dropLines) parts.push(emptyEl(\"c:dropLines\"));\n if (opts.highLowLines) parts.push(emptyEl(\"c:hiLowLines\"));\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\n if (opts.firstSliceAngle !== undefined)\n parts.push(valEl(\"c:firstSliceAng\", opts.firstSliceAngle));\n if (opts.holeSize !== undefined) parts.push(valEl(\"c:holeSize\", opts.holeSize));\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\", 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) parts.push(valEl(\"c:splitType\", 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 if (opts.seriesLines) parts.push(emptyEl(\"c:serLines\"));\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 — derive it from the effective axis list, never\n // hardcode, or custom axis ids detach the chart group from its axes.\n if (!NO_AXES_TYPES.has(opts.type)) {\n for (const axis of axesFor(opts)) parts.push(valEl(\"c:axId\", axis.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): 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 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): 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));\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 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 | BubbleSeriesData,\n opts: ChartSpaceOptions,\n): string {\n const chartType = opts.type;\n const categories = opts.categories ?? [];\n const parts: string[] = [];\n const s = series as ChartSeriesData;\n\n // EG_SerShared: idx, order, tx, spPr\n parts.push(valEl(\"c:idx\", index));\n parts.push(valEl(\"c:order\", index));\n parts.push(`<c:tx>${stringifyStrRef([series.name])}</c:tx>`);\n parts.push(emptyEl(\"c:spPr\"));\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));\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));\n }\n if (s.dataLabels) parts.push(stringifyDataLabels(s.dataLabels));\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 parts.push(`<c:xVal>${stringifyStrRef(categories)}</c:xVal>`);\n parts.push(`<c:yVal>${stringifyNumRef(s.values)}</c:yVal>`);\n } else {\n parts.push(`<c:cat>${stringifyCategorySource(opts)}</c:cat>`);\n parts.push(`<c:val>${stringifyNumRef(s.values)}</c:val>`);\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 return `<c:ser>${parts.join(\"\")}</c:ser>`;\n}\n\n// ── Title XML ──\n\nfunction stringifyTitle(title: string): string {\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:overlay val=\"0\"/></c:title>`;\n}\n\n// ── Legend XML ──\n\nconst LEGEND_TXPR =\n '<c:txPr><a:bodyPr rot=\"0\" spcFirstLastPara=\"1\" vertOverflow=\"ellipsis\" vert=\"horz\" wrap=\"square\" anchor=\"ctr\" anchorCtr=\"1\"/><a:lstStyle/><a:p><a:pPr><a:defRPr/></a:pPr><a:endParaRPr lang=\"en-US\"/></a:p></c:txPr>';\n\nfunction stringifyLegendEntry(entry: LegendEntryOptions): string {\n // CT_LegendEntry: idx → choice(delete | EG_LegendEntryData[txPr]). Non-delete\n // entries require a txPr model (chart txPr wiring is a follow-up), so only\n // delete entries are emitted here.\n if (!entry.delete) return \"\";\n return `<c:legendEntry><c:idx val=\"${entry.index}\"/><c:delete val=\"1\"/></c:legendEntry>`;\n}\n\nfunction stringifyLegend(opts: ChartSpaceOptions): string {\n const pos = opts.legendPosition ?? \"b\";\n const entries = (opts.legendEntries ?? []).map(stringifyLegendEntry).join(\"\");\n return `<c:legend><c:legendPos val=\"${pos}\"/>${entries}<c:layout/><c:overlay val=\"0\"/><c:spPr><a:noFill/><a:ln><a:noFill/></a:ln><a:effectLst/></c:spPr>${LEGEND_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(formats: readonly ChartPivotFormatOptions[]): string {\n const inner = formats\n .map((f) => {\n let entry = `<c:idx val=\"${f.index}\"/>`;\n if (f.marker) entry += stringifyMarker(f.marker);\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\nfunction noFillSpPr(): string {\n return `<c:spPr><a:noFill/><a:ln><a:noFill/></a:ln><a:effectLst/></c:spPr>`;\n}\n\nfunction chartTxPr(): string {\n return `<c:txPr><a:bodyPr/><a:lstStyle/><a:p><a:pPr><a:defRPr/></a:pPr><a:endParaRPr lang=\"en-US\"/></a:p></c:txPr>`;\n}\n\n// ── Axes XML ──\n\n/** Default bottom category axis (c:catAx) for generated charts. */\nfunction categoryAxis(id: number, crossAxisId: number): AxisOptions {\n return {\n kind: \"category\",\n id,\n crossAxisId,\n scaling: { orientation: \"minMax\" },\n delete: false,\n position: \"b\",\n crosses: \"autoZero\",\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): AxisOptions {\n return {\n kind: \"value\",\n id,\n crossAxisId,\n scaling: { orientation: \"minMax\" },\n delete: false,\n position: \"l\",\n numberFormat: \"General\",\n crosses: \"autoZero\",\n };\n}\n\n/** Default series axis (c:serAx) for surface charts. */\nfunction seriesAxis(id: number, crossAxisId: number): AxisOptions {\n return {\n kind: \"series\",\n id,\n crossAxisId,\n scaling: { orientation: \"minMax\" },\n delete: false,\n position: \"b\",\n numberFormat: \"General\",\n crosses: \"autoZero\",\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 AxisOptions[] {\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 AxisOptions[] {\n return opts.axes ?? defaultAxesFor(opts.type, opts.threeD);\n}\n\nfunction stringifyAxes(opts: ChartSpaceOptions): string {\n return axesFor(opts).map(stringifyAxis).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\" && pt.elements) {\n const v = pt.elements.find((c) => c.name === \"c:v\");\n const text = v ? textOf(v) : \"\";\n if (text !== \"\") result.push(text);\n }\n }\n return result;\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 readNumCache(el: XmlElement): number[] {\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\" && pt.elements) {\n const v = pt.elements.find((c) => c.name === \"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): string {\n const tx = findChild(serEl, \"c:tx\");\n if (!tx) return \"\";\n const values = readStrCache(tx);\n return values[0] ?? \"\";\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\" && child.elements) {\n for (const sub of child.elements) {\n if (sub.name === \"a:p\" && sub.elements) {\n for (const r of sub.elements) {\n if (r.name === \"a:r\" && r.elements) {\n for (const t of r.elements) {\n if (t.name === \"a:t\") {\n const text = textOf(t);\n if (text) return text;\n }\n }\n }\n }\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\" && pt.elements) {\n const v = pt.elements.find((c) => c.name === \"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 = 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 = 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): DataLabelsOptions | undefined {\n const dlEl = findChild(serEl, \"c:dLbls\");\n if (!dlEl) return undefined;\n const opts: DataLabelsOptions = {};\n const position = readValStr(dlEl, \"c:dLblPos\");\n if (position) opts.position = 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 numFmt = attr(findChild(el, \"c:numFmt\"), \"formatCode\");\n if (numFmt) result.numberFormat = numFmt;\n const pos = readValStr(el, \"c:dLblPos\");\n if (pos) result.position = pos as DataLabelOptions[\"position\"];\n return result;\n });\n }\n if (findChild(dlEl, \"c:leaderLines\")) opts.leaderLines = true;\n return opts;\n}\n\nfunction readMarker(parent: XmlElement): 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 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): 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);\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 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): Partial<ChartSeriesCommon> {\n const common: Partial<ChartSeriesCommon> = {};\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);\n if (dataLabels) common.dataLabels = dataLabels;\n const dataPoints = readDataPoints(serEl);\n if (dataPoints) common.dataPoints = dataPoints;\n const marker = readMarker(serEl);\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 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): SurfaceOptions | undefined {\n const el = findChild(chartEl, tag);\n if (!el) return undefined;\n const thickness = readValStr(el, \"c:thickness\");\n if (thickness === undefined) return undefined;\n return { thickness: thickness.endsWith(\"%\") ? thickness : Number(thickness) };\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): void {\n if (!chartTypeEl) return;\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 } else {\n const overlap = readValNum(chartTypeEl, \"c:overlap\");\n if (overlap !== undefined) result.overlap = overlap;\n }\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 = 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 === \"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 = 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 if (findChild(chartTypeEl, \"c:serLines\")) result.seriesLines = true;\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): 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 if (findChild(chartTypeEl, \"c:dropLines\")) result.dropLines = true;\n } else {\n if (findChild(chartTypeEl, \"c:hiLowLines\")) result.highLowLines = true;\n const upDownBars = findChild(chartTypeEl, \"c:upDownBars\");\n if (upDownBars) readUpDownBars(upDownBars);\n if (findChild(chartTypeEl, \"c:dropLines\")) result.dropLines = true;\n }\n } else if (type === \"area\") {\n if (findChild(chartTypeEl, \"c:dropLines\")) result.dropLines = true;\n if (threeD && findChild(chartTypeEl, \"c:serLines\")) result.seriesLines = true;\n } else if (type === \"stock\") {\n if (findChild(chartTypeEl, \"c:dropLines\")) result.dropLines = true;\n if (findChild(chartTypeEl, \"c:hiLowLines\")) result.highLowLines = true;\n const upDownBars = findChild(chartTypeEl, \"c:upDownBars\");\n if (upDownBars) readUpDownBars(upDownBars);\n if (findChild(chartTypeEl, \"c:serLines\")) result.seriesLines = true;\n } else if ((type === \"column\" || type === \"bar\") && !threeD) {\n if (findChild(chartTypeEl, \"c:serLines\")) result.seriesLines = true;\n }\n}\n\n// ── Plot-area data table read (CT_DTable) ──\n\nfunction readDataTable(plotArea: XmlElement | undefined): 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 return Object.keys(opts).length ? opts : undefined;\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(chart: XmlElement): 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);\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): 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) continue; // non-delete entries (txPr) need chart txPr wiring\n const v = attr(deleteEl, \"val\");\n result.push({\n index: Number(attr(idxEl, \"val\")),\n delete: parseOnOff(v) ?? true,\n });\n }\n return result.length ? result : undefined;\n}\n\nfunction readLegend(\n chart: XmlElement,\n): { position?: LegendPosition; entries?: LegendEntryOptions[] } | undefined {\n const legend = findChild(chart, \"c:legend\");\n if (!legend) return undefined;\n const result: { position?: LegendPosition; entries?: LegendEntryOptions[] } = {};\n const posEl = findChild(legend, \"c:legendPos\");\n if (posEl) {\n const v = attr(posEl, \"val\");\n if (v) result.position = v as LegendPosition;\n }\n const entries = readLegendEntries(legend);\n if (entries) result.entries = entries;\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 return Object.keys(opts).length ? opts : undefined;\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 return Object.keys(opts).length ? opts : undefined;\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): 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 = 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 = pos as AxisPosition;\n if (findChild(el, \"c:majorGridlines\")) result.majorGridlines = true;\n if (findChild(el, \"c:minorGridlines\")) result.minorGridlines = true;\n const titleEl = findChild(el, \"c:title\");\n if (titleEl) {\n const titleText = readTitleText(titleEl);\n if (titleText !== undefined) result.title = titleText;\n }\n const numFmtEl = findChild(el, \"c:numFmt\");\n if (numFmtEl) {\n const formatCode = attr(numFmtEl, \"formatCode\");\n if (formatCode) result.numberFormat = formatCode;\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 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 = 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 = 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) result.crossBetween = 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): 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));\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\n parts.push(\n `<c:chartSpace 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 );\n\n // Fixed header elements\n parts.push(valEl(\"c:date1904\", 0));\n parts.push(valEl(\"c:lang\", \"en-US\"));\n parts.push(valEl(\"c:roundedCorners\", 0));\n\n // Style\n 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\n if (opts.title) {\n parts.push(stringifyTitle(opts.title));\n }\n\n parts.push(valEl(\"c:autoTitleDeleted\", 0));\n // CT_Chart: autoTitleDeleted → pivotFmts → view3D\n if (opts.pivotFormats?.length) parts.push(stringifyPivotFormats(opts.pivotFormats));\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));\n parts.push(stringifySurface(\"c:sideWall\", opts.sideWall));\n parts.push(stringifySurface(\"c:backWall\", opts.backWall));\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 for (const [i, series] of opts.series.entries()) {\n parts.push(stringifySeries(i, series, opts));\n }\n\n parts.push(chartTypeFooter(opts));\n\n // Axes\n parts.push(stringifyAxes(opts));\n\n // Data table (CT_PlotArea: axes → dTable → spPr)\n if (opts.dataTable) parts.push(stringifyDataTable(opts.dataTable));\n\n parts.push(\"</c:plotArea>\");\n\n // Legend\n if (opts.showLegend !== false) {\n parts.push(stringifyLegend(opts));\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 // SpPr and txPr\n parts.push(noFillSpPr());\n parts.push(chartTxPr());\n\n // CT_ChartSpace: txPr → externalData → printSettings → (userShapes)\n if (opts.externalData) parts.push(stringifyExternalData(opts.externalData));\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\n parts.push(\"</c:chartSpace>\");\n\n return parts.join(\"\");\n },\n\n parse(el: XmlElement, _ctx: ReadContext) {\n const result: MutableChartSpaceResult = {};\n\n // Style\n const styleEl = findChild(el, \"c:style\");\n if (styleEl?.attributes?.[\"val\"] !== undefined) {\n result.style = Number(styleEl.attributes[\"val\"]);\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\n const titleEl = findChild(chart, \"c:title\");\n if (titleEl) {\n const title = readTitleText(titleEl);\n if (title !== undefined) result.title = title;\n }\n\n // 3D view (before plotArea per CT_Chart sequence)\n const pivotFormats = readPivotFormats(chart);\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\");\n if (floor) result.floor = floor;\n const sideWall = readSurface(chart, \"c:sideWall\");\n if (sideWall) result.sideWall = sideWall;\n const backWall = readSurface(chart, \"c:backWall\");\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);\n if (dataTable) result.dataTable = dataTable;\n let detectedType: ChartType | undefined;\n let threeD = false;\n let chartTypeEl: XmlElement | undefined;\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 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 break;\n }\n }\n\n if (detectedType) {\n result.type = detectedType;\n if (threeD) result.threeD = true;\n readChartTypeScalars(chartTypeEl, detectedType, threeD, result);\n readChartTypeDecorations(chartTypeEl, detectedType, threeD, result);\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),\n });\n }\n result.series = bubbleSeries as BubbleSeriesData[];\n } else {\n const chartSeries: ChartSeriesData[] = [];\n let categories: string[] | undefined;\n\n for (const serEl of seriesEls) {\n const name = readSeriesName(serEl);\n\n // Read categories from first series (c:cat may be strRef/strLit/multiLvlStrRef)\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 } else {\n const lit = readStrLit(catEl);\n if (lit) {\n result.categoryLabels = lit;\n categories = lit;\n } else {\n categories = readStrCache(catEl);\n }\n }\n }\n }\n\n // Read values\n const valEl = findChild(serEl, \"c:val\") ?? findChild(serEl, \"c:yVal\");\n const values = valEl ? readNumCache(valEl) : [];\n\n chartSeries.push({ name, values, ...readSeriesCommon(serEl) });\n }\n\n result.series = chartSeries as ChartSeriesData[];\n if (categories?.length) result.categories = categories;\n }\n }\n }\n\n // Axes\n const axes = readAxes(plotArea);\n if (axes) result.axes = axes;\n\n // Legend — default is true, only set if explicitly absent\n const legend = findChild(chart, \"c:legend\");\n if (!legend) {\n result.showLegend = false;\n } else {\n const legendData = readLegend(chart);\n if (legendData?.position) result.legendPosition = legendData.position;\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: externalData (after c:txPr)\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\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\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 if (el.attributes?.[\"macro\"] !== undefined) result.macro = String(el.attributes[\"macro\"]);\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 if (el.attributes?.[\"fPublished\"] !== undefined)\n result.published = parseOnOff(el.attributes[\"fPublished\"]) ?? false;\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 if (el.attributes?.[\"macro\"] !== undefined) result.macro = String(el.attributes[\"macro\"]);\n if (el.attributes?.[\"fPublished\"] !== undefined)\n result.published = parseOnOff(el.attributes[\"fPublished\"]) ?? false;\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 if (el.attributes?.[\"macro\"] !== undefined) result.macro = String(el.attributes[\"macro\"]);\n if (el.attributes?.[\"fPublished\"] !== undefined)\n result.published = parseOnOff(el.attributes[\"fPublished\"]) ?? false;\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 if (el.attributes?.[\"macro\"] !== undefined) result.macro = String(el.attributes[\"macro\"]);\n if (el.attributes?.[\"fPublished\"] !== undefined)\n result.published = parseOnOff(el.attributes[\"fPublished\"]) ?? false;\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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"}
|