@office-open/core 0.10.11 → 0.10.13

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.
Files changed (62) hide show
  1. package/README.md +10 -9
  2. package/dist/chart/index.d.mts +1 -1
  3. package/dist/chart/index.mjs +1 -1
  4. package/dist/{chart-DwE8FCFk.mjs → chart-DOO1st0K.mjs} +3 -1
  5. package/dist/chart-DOO1st0K.mjs.map +1 -0
  6. package/dist/converters-C_Y2QX1w.mjs +1789 -0
  7. package/dist/converters-C_Y2QX1w.mjs.map +1 -0
  8. package/dist/data-type-CZMKVaaT.d.mts +10 -0
  9. package/dist/data-type-CZMKVaaT.d.mts.map +1 -0
  10. package/dist/descriptor/index.d.mts +2 -2
  11. package/dist/descriptor/index.mjs +2 -2
  12. package/dist/{descriptor-DAER86Rt.mjs → descriptor-BjNkn5jo.mjs} +3 -33
  13. package/dist/descriptor-BjNkn5jo.mjs.map +1 -0
  14. package/dist/drawingml/index.d.mts +2 -2
  15. package/dist/drawingml/index.mjs +2 -2
  16. package/dist/{src-zBJYrHrv.mjs → drawingml-sj1J3lb0.mjs} +22 -3728
  17. package/dist/drawingml-sj1J3lb0.mjs.map +1 -0
  18. package/dist/index-BVK2dv6C.d.mts +63 -0
  19. package/dist/index-BVK2dv6C.d.mts.map +1 -0
  20. package/dist/index-BfHfKuKy.d.mts +275 -0
  21. package/dist/index-BfHfKuKy.d.mts.map +1 -0
  22. package/dist/index-CE53SwpZ.d.mts +1463 -0
  23. package/dist/index-CE53SwpZ.d.mts.map +1 -0
  24. package/dist/{index-3STznXzZ.d.mts → index-D6VE-MnJ.d.mts} +3 -15
  25. package/dist/index-D6VE-MnJ.d.mts.map +1 -0
  26. package/dist/{index-CN0YjNSx.d.mts → index-DDyd2ErZ.d.mts} +3 -15
  27. package/dist/index-DDyd2ErZ.d.mts.map +1 -0
  28. package/dist/{index-CsQP7Cl4.d.mts → index-DlPA26cw.d.mts} +2 -47
  29. package/dist/index-DlPA26cw.d.mts.map +1 -0
  30. package/dist/index-k8WKLXnA.d.mts +150 -0
  31. package/dist/index-k8WKLXnA.d.mts.map +1 -0
  32. package/dist/index.d.mts +650 -8
  33. package/dist/index.d.mts.map +1 -0
  34. package/dist/index.mjs +1271 -7
  35. package/dist/index.mjs.map +1 -0
  36. package/dist/output-D_G_JR_8.d.mts +24 -0
  37. package/dist/output-D_G_JR_8.d.mts.map +1 -0
  38. package/dist/patch/index.d.mts +2 -2
  39. package/dist/patch/index.mjs +1 -1
  40. package/dist/{patch-DEPPafeB.mjs → patch-BmRfghOo.mjs} +67 -86
  41. package/dist/patch-BmRfghOo.mjs.map +1 -0
  42. package/dist/smartart/index.d.mts +1 -1
  43. package/dist/smartart/index.mjs +1 -1
  44. package/dist/{smartart-DCY-Vdv7.mjs → smartart-B7ukZ-Tw.mjs} +5 -3
  45. package/dist/smartart-B7ukZ-Tw.mjs.map +1 -0
  46. package/dist/theme/index.d.mts +1 -1
  47. package/dist/theme-CiNzdl-9.mjs +2 -0
  48. package/dist/theme-CiNzdl-9.mjs.map +1 -0
  49. package/dist/util/index.d.mts +4 -0
  50. package/dist/util/index.mjs +3 -0
  51. package/dist/util-Tq9PSjK0.mjs +1113 -0
  52. package/dist/util-Tq9PSjK0.mjs.map +1 -0
  53. package/dist/values-8di32lIe.d.mts +56 -0
  54. package/dist/values-8di32lIe.d.mts.map +1 -0
  55. package/package.json +7 -6
  56. package/dist/index-CHGFwCCQ.d.mts +0 -266
  57. package/dist/index-CpNwAcem.d.mts +0 -169
  58. package/dist/index-DdXU1_sq.d.mts +0 -5029
  59. package/dist/util/values.d.mts +0 -2
  60. package/dist/util/values.mjs +0 -2
  61. package/dist/values-CVIZcTRw.mjs +0 -371
  62. package/dist/values-DQfI1FSg.d.mts +0 -426
package/README.md CHANGED
@@ -77,15 +77,16 @@ gen(); // → 1, 2, 3, ...
77
77
 
78
78
  ## Exports
79
79
 
80
- | Path | Contents |
81
- | ----------------------------- | ------------------------------------------------------------------------- |
82
- | `@office-open/core` | Descriptors, validators, converters, ID generators, OPC, password hashing |
83
- | `@office-open/core/values` | Validators + ThemeColor/ThemeFont only |
84
- | `@office-open/core/chart` | Chart types, series data, chart collection, title |
85
- | `@office-open/core/smartart` | SmartArt data model, tree-to-model, definitions |
86
- | `@office-open/core/drawingml` | DrawingML fills, outlines, effects, geometry, text body |
87
- | `@office-open/core/patch` | Template patching utilities (replacer, traverser, token replacer) |
88
- | `@office-open/core/theme` | Theme definitions and color schemes |
80
+ | Path | Contents |
81
+ | ------------------------------ | ------------------------------------------------------------------------- |
82
+ | `@office-open/core` | Descriptors, validators, converters, ID generators, OPC, password hashing |
83
+ | `@office-open/core/descriptor` | Descriptor runtime (`CustomDescriptor`, `stringify`, `parse`, contexts) |
84
+ | `@office-open/core/util` | Validators, converters, ID generators, mappings, crypto, base64 |
85
+ | `@office-open/core/chart` | Chart types, series data, chart collection, title |
86
+ | `@office-open/core/smartart` | SmartArt data model, tree-to-model, definitions |
87
+ | `@office-open/core/drawingml` | DrawingML fills, outlines, effects, geometry, text body |
88
+ | `@office-open/core/patch` | Template patching utilities (replacer, traverser, token replacer) |
89
+ | `@office-open/core/theme` | Theme definitions and color schemes |
89
90
 
90
91
  ## License
91
92
 
@@ -1,2 +1,2 @@
1
- import { _ as ChartCollection, a as ChartSpaceOptions, c as DataLabelsOptions, d as ErrorBarType, f as ErrorValueType, g as View3DOptions, h as TrendlineType, i as ChartSeriesData, l as ErrorBarDirection, m as TrendlineOptions, n as AxisChartType, o as ChartType, p as TimeUnit, r as BubbleSeriesData, s as DataLabelPosition, t as chartSpaceDesc, u as ErrorBarOptions, v as ChartData } from "../index-CN0YjNSx.mjs";
1
+ import { _ as ChartCollection, a as ChartSpaceOptions, c as DataLabelsOptions, d as ErrorBarType, f as ErrorValueType, g as View3DOptions, h as TrendlineType, i as ChartSeriesData, l as ErrorBarDirection, m as TrendlineOptions, n as AxisChartType, o as ChartType, p as TimeUnit, r as BubbleSeriesData, s as DataLabelPosition, t as chartSpaceDesc, u as ErrorBarOptions, v as ChartData } from "../index-DDyd2ErZ.mjs";
2
2
  export { AxisChartType, BubbleSeriesData, ChartCollection, ChartData, ChartSeriesData, ChartSpaceOptions, ChartType, DataLabelPosition, DataLabelsOptions, ErrorBarDirection, ErrorBarOptions, ErrorBarType, ErrorValueType, TimeUnit, TrendlineOptions, TrendlineType, View3DOptions, chartSpaceDesc };
@@ -1,2 +1,2 @@
1
- import { a as TimeUnit, c as ChartCollection, i as ErrorValueType, n as ErrorBarDirection, o as TrendlineType, r as ErrorBarType, s as chartSpaceDesc, t as DataLabelPosition } from "../chart-DwE8FCFk.mjs";
1
+ import { a as TimeUnit, c as ChartCollection, i as ErrorValueType, n as ErrorBarDirection, o as TrendlineType, r as ErrorBarType, s as chartSpaceDesc, t as DataLabelPosition } from "../chart-DOO1st0K.mjs";
2
2
  export { ChartCollection, DataLabelPosition, ErrorBarDirection, ErrorBarType, ErrorValueType, TimeUnit, TrendlineType, chartSpaceDesc };
@@ -239,7 +239,7 @@ const chartSpaceDesc = {
239
239
  parts.push("<c:plotArea><c:layout/>");
240
240
  parts.push(chartTypeHeader(opts));
241
241
  const categories = opts.categories ?? [];
242
- for (let i = 0; i < opts.series.length; i++) parts.push(stringifySeries(i, opts.series[i], categories, opts.type));
242
+ for (const [i, series] of opts.series.entries()) parts.push(stringifySeries(i, series, categories, opts.type));
243
243
  parts.push(chartTypeFooter(opts));
244
244
  parts.push(stringifyAxes(opts.type, opts.threeD));
245
245
  parts.push("</c:plotArea>");
@@ -369,3 +369,5 @@ const TimeUnit = {
369
369
  };
370
370
  //#endregion
371
371
  export { TimeUnit as a, ChartCollection as c, ErrorValueType as i, ErrorBarDirection as n, TrendlineType as o, ErrorBarType as r, chartSpaceDesc as s, DataLabelPosition as t };
372
+
373
+ //# sourceMappingURL=chart-DOO1st0K.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-DOO1st0K.mjs","names":[],"sources":["../src/chart/chart-collection.ts","../src/chart/chart-descriptors.ts","../src/chart/types.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 } from \"@office-open/xml\";\n\nimport type { CustomDescriptor, ReadContext, WriteContext } from \"../descriptor\";\nimport type { ChartSpaceOptions, BubbleSeriesData, ChartSeriesData, ChartType } 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};\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\"]);\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};\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// ── 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 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 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 \"pie\":\n case \"doughnut\":\n case \"bubble\":\n headerParts.push(valEl(\"c:varyColors\", 1));\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 // Pie and doughnut have no axId\n if (NO_AXES_TYPES.has(opts.type)) return `</${tag}>`;\n const axIds: string[] = [valEl(\"c:axId\", 10), valEl(\"c:axId\", 20)];\n // 3D charts and surface charts need a third axis\n if (opts.threeD || opts.type === \"surface\") axIds.push(valEl(\"c:axId\", 30));\n return `${axIds.join(\"\")}</${tag}>`;\n}\n\n// ── Series XML ──\n\nfunction stringifySeries(\n index: number,\n series: ChartSeriesData | BubbleSeriesData,\n categories: readonly string[],\n chartType: ChartType,\n): string {\n const parts: string[] = [];\n\n parts.push(valEl(\"c:idx\", index));\n parts.push(valEl(\"c:order\", index));\n\n // Series name (c:tx -> c:strRef)\n parts.push(`<c:tx>${stringifyStrRef([series.name])}</c:tx>`);\n parts.push(emptyEl(\"c:spPr\"));\n\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 const s = series as ChartSeriesData;\n parts.push(`<c:xVal>${stringifyStrRef(categories)}</c:xVal>`);\n parts.push(`<c:yVal>${stringifyNumRef(s.values)}</c:yVal>`);\n } else {\n const s = series as ChartSeriesData;\n parts.push(`<c:cat>${stringifyStrRef(categories)}</c:cat>`);\n parts.push(`<c:val>${stringifyNumRef(s.values)}</c:val>`);\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\nfunction stringifyLegend(): string {\n return `<c:legend><c:legendPos val=\"b\"/><c:layout/><c:overlay val=\"0\"/><c:spPr><a:noFill/><a:ln><a:noFill/></a:ln><a:effectLst/></c:spPr><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></c:legend>`;\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\nfunction stringifyAxes(chartType: ChartType, threeD?: boolean): string {\n if (NO_AXES_TYPES.has(chartType)) return \"\";\n\n const parts: string[] = [];\n\n if (chartType === \"scatter\" || chartType === \"bubble\") {\n parts.push(valAxXml(10, 20));\n parts.push(valAxXml(20, 10));\n } else if (chartType === \"stock\" || chartType === \"surface\") {\n parts.push(catAxXml(10, 20));\n parts.push(valAxXml(20, 10));\n if (chartType === \"surface\") {\n parts.push(serAxXml(30, 10));\n }\n } else {\n parts.push(catAxXml(10, 20));\n parts.push(valAxXml(20, 10));\n if (threeD) {\n parts.push(catAxXml(30, 10));\n }\n }\n\n return parts.join(\"\");\n}\n\nfunction catAxXml(axId: number, crossAx: number): string {\n return `<c:catAx><c:axId ${attrVal(\"val\", axId)}/><c:scaling><c:orientation val=\"minMax\"/></c:scaling><c:delete val=\"0\"/><c:axPos val=\"b\"/><c:crossAx ${attrVal(\"val\", crossAx)}/><c:crosses val=\"autoZero\"/><c:auto val=\"1\"/><c:lblOffset val=\"100\"/><c:noMultiLvlLbl val=\"0\"/></c:catAx>`;\n}\n\nfunction valAxXml(axId: number, crossAx: number): string {\n return `<c:valAx><c:axId ${attrVal(\"val\", axId)}/><c:scaling><c:orientation val=\"minMax\"/></c:scaling><c:delete val=\"0\"/><c:axPos val=\"l\"/><c:numFmt formatCode=\"General\" sourceLinked=\"1\"/><c:spPr/><c:crossAx ${attrVal(\"val\", crossAx)}/><c:crosses val=\"autoZero\"/></c:valAx>`;\n}\n\nfunction serAxXml(axId: number, crossAx: number): string {\n return `<c:serAx><c:axId ${attrVal(\"val\", axId)}/><c:scaling><c:orientation val=\"minMax\"/></c:scaling><c:delete val=\"0\"/><c:axPos val=\"b\"/><c:numFmt formatCode=\"General\" sourceLinked=\"1\"/><c:spPr/><c:crossAx ${attrVal(\"val\", crossAx)}/><c:crosses val=\"autoZero\"/><c:tickLblSkip val=\"1\"/></c:serAx>`;\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 if (v?.text !== undefined) result.push(String(v.text));\n }\n }\n return result;\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 if (v?.text !== undefined) result.push(Number(v.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\" && t.text !== undefined) {\n return String(t.text);\n }\n }\n }\n }\n }\n }\n }\n }\n return 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 // 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\n // c:plotArea\n parts.push(\"<c:plotArea><c:layout/>\");\n\n // Chart type element (header + series + footer)\n parts.push(chartTypeHeader(opts));\n\n const categories = opts.categories ?? [];\n for (const [i, series] of opts.series.entries()) {\n parts.push(stringifySeries(i, series, categories, opts.type));\n }\n\n parts.push(chartTypeFooter(opts));\n\n // Axes\n parts.push(stringifyAxes(opts.type, opts.threeD));\n\n parts.push(\"</c:plotArea>\");\n\n // Legend\n if (opts.showLegend !== false) {\n parts.push(stringifyLegend());\n }\n\n parts.push(\"</c:chart>\");\n\n // SpPr and txPr\n parts.push(noFillSpPr());\n parts.push(chartTxPr());\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 // 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 // Plot area — detect chart type\n const plotArea = findChild(chart, \"c:plotArea\");\n if (plotArea?.elements) {\n let detectedType: ChartType | undefined;\n let threeD = false;\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 // 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 }\n\n // Extract series data\n const seriesEls = children(plotArea, \"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 });\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\n if (!categories) {\n const catEl = findChild(serEl, \"c:cat\") ?? findChild(serEl, \"c:xVal\");\n if (catEl) categories = readStrCache(catEl);\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 });\n }\n\n result.series = chartSeries as ChartSeriesData[];\n if (categories?.length) result.categories = categories;\n }\n }\n }\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 }\n\n return result as ChartSpaceOptions;\n },\n};\n","/**\n * Chart type definitions — interfaces and constants.\n *\n * Class implementations have been removed; all chart XML generation\n * goes through chart-descriptors.ts (stringify/parse path).\n *\n * @module\n */\n\n// ── BubbleSeriesData ──\n\nexport interface BubbleSeriesData {\n name: string;\n xValues: readonly number[];\n yValues: readonly number[];\n bubbleSize: readonly number[];\n}\n\n// ── Trendline ──\n\nexport const TrendlineType = {\n EXP: \"exp\",\n LINEAR: \"linear\",\n LOG: \"log\",\n MOVING_AVG: \"movingAvg\",\n POLY: \"poly\",\n POWER: \"power\",\n} as const;\n\nexport type TrendlineType = (typeof TrendlineType)[keyof typeof TrendlineType];\n\nexport interface TrendlineOptions {\n type?: TrendlineType;\n name?: string;\n order?: number;\n period?: number;\n forward?: number;\n backward?: number;\n intercept?: number;\n dispRSqr?: boolean;\n dispEq?: boolean;\n}\n\n// ── Error bars ──\n\nexport const ErrorBarDirection = {\n BOTH: \"both\",\n X: \"x\",\n Y: \"y\",\n} as const;\n\nexport type ErrorBarDirection = (typeof ErrorBarDirection)[keyof typeof ErrorBarDirection];\n\nexport const ErrorBarType = {\n BOTH: \"both\",\n MINUS: \"minus\",\n PLUS: \"plus\",\n} as const;\n\nexport type ErrorBarType = (typeof ErrorBarType)[keyof typeof ErrorBarType];\n\nexport const ErrorValueType = {\n CUST: \"cust\",\n FIXED: \"fixedVal\",\n PERCENTAGE: \"percentage\",\n STD_DEV: \"stdDev\",\n STD_ERR: \"stdErr\",\n} as const;\n\nexport type ErrorValueType = (typeof ErrorValueType)[keyof typeof ErrorValueType];\n\nexport interface ErrorBarOptions {\n direction?: ErrorBarDirection;\n barType?: ErrorBarType;\n valueType?: ErrorValueType;\n value?: number;\n}\n\n// ── Data labels ──\n\nexport const DataLabelPosition = {\n BEST_FIT: \"bestFit\",\n B: \"b\",\n CTRL: \"ctr\",\n IN_BASE: \"inBase\",\n IN_END: \"inEnd\",\n L: \"l\",\n OUT_END: \"outEnd\",\n R: \"r\",\n T: \"t\",\n} as const;\n\nexport type DataLabelPosition = (typeof DataLabelPosition)[keyof typeof DataLabelPosition];\n\nexport interface DataLabelsOptions {\n position?: DataLabelPosition;\n showVal?: boolean;\n showCatName?: boolean;\n showSerName?: boolean;\n showPercent?: boolean;\n showBubbleSize?: boolean;\n showLeaderLines?: boolean;\n}\n\n// ── Chart series ──\n\nexport interface ChartSeriesData {\n name: string;\n values: readonly number[];\n trendlines?: readonly TrendlineOptions[];\n errorBars?: ErrorBarOptions;\n dataLabels?: DataLabelsOptions;\n}\n\n// ── Chart types ──\n\nexport type ChartType =\n | \"column\"\n | \"bar\"\n | \"line\"\n | \"pie\"\n | \"area\"\n | \"scatter\"\n | \"bubble\"\n | \"doughnut\"\n | \"radar\"\n | \"stock\"\n | \"surface\";\n\nexport type AxisChartType = Exclude<ChartType, \"bubble\">;\n\n// ── ChartSpace options ──\n\nexport interface ChartSpaceOptions {\n title?: string;\n type: ChartType;\n categories?: readonly string[];\n series: readonly ChartSeriesData[] | readonly BubbleSeriesData[];\n showLegend?: boolean;\n style?: number;\n threeD?: boolean;\n}\n\n// ── 3D view ──\n\nexport const TimeUnit = {\n DAYS: \"days\",\n MONTHS: \"months\",\n YEARS: \"years\",\n} as const;\n\nexport type TimeUnit = (typeof TimeUnit)[keyof typeof TimeUnit];\n\nexport interface View3DOptions {\n rotX?: number;\n rotY?: number;\n depthPercent?: number;\n rAngAx?: boolean;\n perspective?: number;\n}\n"],"mappings":"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"}