@devmm/puredocs-excel-charts 1.1.2 → 1.1.3
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/index.cjs +144 -168
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +144 -168
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/chart-enums.ts","../src/excel-chart.ts"],"names":["ExcelChartType","TrendlineType","ChartLegendPosition","escapeXml","parseCellRef","NS","CONTENT_TYPES","REL_TYPES","smooth"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Chart enumerations.\n * Port of TVE.PureDocs.Excel.Charts enums (C#).\n */\n\n/** Supported chart types. */\nexport enum ExcelChartType {\n // Column / bar\n ColumnClustered = 'columnClustered',\n ColumnStacked = 'columnStacked',\n BarClustered = 'barClustered',\n BarStacked = 'barStacked',\n // Line\n Line = 'line',\n LineMarkers = 'lineMarkers',\n // Area\n Area = 'area',\n // Pie family\n Pie = 'pie',\n Doughnut = 'doughnut',\n // Radar\n Radar = 'radar',\n RadarMarkers = 'radarMarkers',\n RadarFilled = 'radarFilled',\n // XY (scatter) / bubble\n Scatter = 'scatter',\n ScatterLines = 'scatterLines',\n ScatterSmooth = 'scatterSmooth',\n Bubble = 'bubble',\n}\n\n/** Trendline regression types (values map to OOXML `c:trendlineType`). */\nexport enum TrendlineType {\n Linear = 'linear',\n Exponential = 'exp',\n Logarithmic = 'log',\n MovingAverage = 'movingAvg',\n Polynomial = 'poly',\n Power = 'power',\n}\n\n/** Legend placement (values map directly to OOXML `c:legendPos`). */\nexport enum ChartLegendPosition {\n Right = 'r',\n Left = 'l',\n Top = 't',\n Bottom = 'b',\n TopRight = 'tr',\n /** Hides the legend entirely. */\n None = 'none',\n}\n","/**\n * ExcelChart — builds an OOXML chart part and its drawing anchor.\n * Port of TVE.PureDocs.Excel.Charts.ExcelChart (C#).\n *\n * Implements the core `DrawingProvider` contract so the chart can be attached to\n * a worksheet and serialised by `Workbook.saveAsBuffer()` without the core library\n * knowing anything about charts.\n */\nimport {\n parseCellRef,\n escapeXml,\n NS,\n REL_TYPES,\n CONTENT_TYPES,\n ExcelColor,\n type Worksheet,\n type DrawingProvider,\n type DrawingDependentPart,\n} from '@devmm/puredocs-excel';\nimport { ExcelChartType, ChartLegendPosition, TrendlineType } from './chart-enums.js';\n\nconst CHART_NS = 'http://schemas.openxmlformats.org/drawingml/2006/chart';\nconst CAT_AX_ID = 111111111;\nconst VAL_AX_ID = 222222222;\nconst SEC_VAL_AX_ID = 333333333;\nconst SEC_CAT_AX_ID = 444444444;\n\n/** Anchor by A1-style cell refs, or by 0-based row/col indices. */\nexport type ChartAnchor =\n | { from: string; to: string }\n | { fromRow: number; fromCol: number; toRow: number; toCol: number };\n\n/** Series trendline configuration. */\nexport interface ChartTrendline {\n type: TrendlineType;\n /** Polynomial order (poly only, 2–6). */\n order?: number;\n /** Moving-average period (movingAvg only). */\n period?: number;\n displayEquation?: boolean;\n displayRSquared?: boolean;\n}\n\n/**\n * A single data series. Ranges must be absolute, sheet-qualified\n * (e.g. `Sheet1!$B$2:$B$5`).\n *\n * For category charts (column/bar/line/area/pie/doughnut/radar): `values` is the Y\n * range and `categories` the X labels. For XY (scatter): `categories` is the X range\n * and `values` the Y range. For bubble: additionally set `bubbleSize`.\n */\nexport interface ChartSeries {\n /** Series name — a formula ref (contains `!`) or a literal string. */\n name?: string;\n /** Values range (Y for category/scatter). */\n values: string;\n /** Categories/X range. */\n categories?: string;\n /** Bubble size range (bubble charts only). */\n bubbleSize?: string;\n /** Optional series fill/line colour. */\n color?: ExcelColor | string;\n /** Plot this series against the secondary value axis (cartesian combos only). */\n secondaryAxis?: boolean;\n /** Optional trendline. */\n trendline?: ChartTrendline;\n /** Per-data-point colours (e.g. pie slices, individual bars). */\n pointColors?: (ExcelColor | string)[];\n}\n\n/** Mutable axis configuration. */\nexport interface ChartAxisConfig {\n title?: string;\n numberFormat?: string;\n min?: number;\n max?: number;\n majorGridlines?: boolean;\n}\n\n/** Mutable legend configuration. */\nexport interface ChartLegendConfig {\n position: ChartLegendPosition;\n}\n\n/** Data-label toggles. */\nexport interface ChartDataLabelConfig {\n value?: boolean;\n category?: boolean;\n series?: boolean;\n percent?: boolean;\n}\n\ntype SeriesKind = 'category' | 'xy' | 'bubble';\n\ninterface ChartFamily {\n element:\n | 'barChart' | 'lineChart' | 'areaChart'\n | 'pieChart' | 'doughnutChart' | 'radarChart'\n | 'scatterChart' | 'bubbleChart';\n seriesKind: SeriesKind;\n barDir?: 'col' | 'bar';\n grouping?: 'clustered' | 'stacked' | 'standard';\n overlap?: number;\n scatterStyle?: 'lineMarker' | 'marker' | 'smoothMarker';\n radarStyle?: 'standard' | 'marker' | 'filled';\n isPieLike: boolean;\n hasAxes: boolean;\n markers: boolean;\n smooth: boolean;\n colorAsLine: boolean;\n holeSize?: number;\n catAxPos: 'b' | 'l';\n valAxPos: 'b' | 'l';\n}\n\nconst CARTESIAN = new Set(['barChart', 'lineChart', 'areaChart']);\n\nfunction resolveFamily(type: ExcelChartType): ChartFamily {\n const base = {\n seriesKind: 'category' as SeriesKind,\n isPieLike: false, hasAxes: true, markers: false, smooth: false,\n colorAsLine: false, catAxPos: 'b' as const, valAxPos: 'l' as const,\n };\n switch (type) {\n case ExcelChartType.ColumnClustered:\n return { ...base, element: 'barChart', barDir: 'col', grouping: 'clustered', overlap: -27 };\n case ExcelChartType.ColumnStacked:\n return { ...base, element: 'barChart', barDir: 'col', grouping: 'stacked', overlap: 100 };\n case ExcelChartType.BarClustered:\n return { ...base, element: 'barChart', barDir: 'bar', grouping: 'clustered', overlap: -27, catAxPos: 'l', valAxPos: 'b' };\n case ExcelChartType.BarStacked:\n return { ...base, element: 'barChart', barDir: 'bar', grouping: 'stacked', overlap: 100, catAxPos: 'l', valAxPos: 'b' };\n case ExcelChartType.Line:\n return { ...base, element: 'lineChart', grouping: 'standard', colorAsLine: true };\n case ExcelChartType.LineMarkers:\n return { ...base, element: 'lineChart', grouping: 'standard', markers: true, colorAsLine: true };\n case ExcelChartType.Area:\n return { ...base, element: 'areaChart', grouping: 'standard' };\n case ExcelChartType.Pie:\n return { ...base, element: 'pieChart', isPieLike: true, hasAxes: false };\n case ExcelChartType.Doughnut:\n return { ...base, element: 'doughnutChart', isPieLike: true, hasAxes: false, holeSize: 50 };\n case ExcelChartType.Radar:\n return { ...base, element: 'radarChart', radarStyle: 'standard', colorAsLine: true };\n case ExcelChartType.RadarMarkers:\n return { ...base, element: 'radarChart', radarStyle: 'marker', markers: true, colorAsLine: true };\n case ExcelChartType.RadarFilled:\n return { ...base, element: 'radarChart', radarStyle: 'filled' };\n case ExcelChartType.Scatter:\n return { ...base, element: 'scatterChart', seriesKind: 'xy', scatterStyle: 'marker', markers: true, colorAsLine: true };\n case ExcelChartType.ScatterLines:\n return { ...base, element: 'scatterChart', seriesKind: 'xy', scatterStyle: 'lineMarker', markers: true, colorAsLine: true };\n case ExcelChartType.ScatterSmooth:\n return { ...base, element: 'scatterChart', seriesKind: 'xy', scatterStyle: 'smoothMarker', markers: true, smooth: true, colorAsLine: true };\n case ExcelChartType.Bubble:\n return { ...base, element: 'bubbleChart', seriesKind: 'bubble' };\n }\n}\n\nfunction toSrgb(color: ExcelColor | string): string {\n const raw = typeof color === 'string' ? color : (color.toXmlAttrs().rgb ?? 'FF000000');\n const hex = raw.replace(/[^0-9a-fA-F]/g, '');\n return (hex.length >= 6 ? hex.slice(-6) : hex.padStart(6, '0')).toUpperCase();\n}\n\nfunction numRef(ref: string): string { return `<c:numRef><c:f>${escapeXml(ref)}</c:f></c:numRef>`; }\nfunction strRef(ref: string): string { return `<c:strRef><c:f>${escapeXml(ref)}</c:f></c:strRef>`; }\n\ninterface IndexedSeries { s: ChartSeries; idx: number; }\n\nexport class ExcelChart implements DrawingProvider {\n #type: ExcelChartType;\n #family: ChartFamily;\n #secondaryType: ExcelChartType = ExcelChartType.Line;\n #anchor: { fromCol: number; fromRow: number; toCol: number; toRow: number } =\n { fromCol: 0, fromRow: 0, toCol: 8, toRow: 15 };\n #title?: string;\n #series: ChartSeries[] = [];\n #legend: ChartLegendConfig = { position: ChartLegendPosition.Right };\n #categoryAxis: ChartAxisConfig = {};\n #valueAxis: ChartAxisConfig = { majorGridlines: true };\n #secondaryValueAxis: ChartAxisConfig = {};\n #dataLabels?: ChartDataLabelConfig;\n #gapWidth = 150;\n #holeSize?: number;\n\n private constructor(type: ExcelChartType) {\n this.#type = type;\n this.#family = resolveFamily(type);\n this.#holeSize = this.#family.holeSize;\n }\n\n /** Creates a chart of the given type. */\n static create(type: ExcelChartType): ExcelChart {\n return new ExcelChart(type);\n }\n\n /** The chart type. */\n get type(): ExcelChartType { return this.#type; }\n\n // ── Fluent configuration ──────────────────────────────────────────────────\n\n setAnchor(anchor: ChartAnchor): this {\n if ('from' in anchor) {\n const f = parseCellRef(anchor.from);\n const t = parseCellRef(anchor.to);\n this.#anchor = { fromCol: f.column - 1, fromRow: f.row - 1, toCol: t.column - 1, toRow: t.row - 1 };\n } else {\n this.#anchor = { fromCol: anchor.fromCol, fromRow: anchor.fromRow, toCol: anchor.toCol, toRow: anchor.toRow };\n }\n return this;\n }\n\n setTitle(title: string): this { this.#title = title; return this; }\n\n addSeries(series: ChartSeries): this { this.#series.push(series); return this; }\n\n configureLegend(fn: (legend: ChartLegendConfig) => void): this { fn(this.#legend); return this; }\n\n configureCategoryAxis(fn: (axis: ChartAxisConfig) => void): this { fn(this.#categoryAxis); return this; }\n\n configureValueAxis(fn: (axis: ChartAxisConfig) => void): this { fn(this.#valueAxis); return this; }\n\n configureSecondaryValueAxis(fn: (axis: ChartAxisConfig) => void): this { fn(this.#secondaryValueAxis); return this; }\n\n /** Chart type used for series flagged `secondaryAxis` (default `Line`). */\n setSecondaryType(type: ExcelChartType): this { this.#secondaryType = type; return this; }\n\n showDataLabels(config: ChartDataLabelConfig = { value: true }): this { this.#dataLabels = config; return this; }\n\n setGapWidth(gapWidth: number): this { this.#gapWidth = gapWidth; return this; }\n\n /** Doughnut hole size as a percentage (10–90). Ignored by non-doughnut charts. */\n setHoleSize(percent: number): this { this.#holeSize = percent; return this; }\n\n /** Attaches this chart to a worksheet. */\n addTo(sheet: Worksheet): this {\n sheet.addDrawingProvider(this);\n return this;\n }\n\n // ── DrawingProvider contract ──────────────────────────────────────────────\n\n buildAnchorXml(relationshipId: string): string {\n const a = this.#anchor;\n const frameId = parseInt(relationshipId.slice(3), 10) + 1;\n return (\n `<xdr:twoCellAnchor>` +\n `<xdr:from><xdr:col>${a.fromCol}</xdr:col><xdr:colOff>0</xdr:colOff>` +\n `<xdr:row>${a.fromRow}</xdr:row><xdr:rowOff>0</xdr:rowOff></xdr:from>` +\n `<xdr:to><xdr:col>${a.toCol}</xdr:col><xdr:colOff>0</xdr:colOff>` +\n `<xdr:row>${a.toRow}</xdr:row><xdr:rowOff>0</xdr:rowOff></xdr:to>` +\n `<xdr:graphicFrame macro=\"\">` +\n `<xdr:nvGraphicFramePr>` +\n `<xdr:cNvPr id=\"${frameId}\" name=\"Chart ${frameId}\"/>` +\n `<xdr:cNvGraphicFramePr/>` +\n `</xdr:nvGraphicFramePr>` +\n `<xdr:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/></xdr:xfrm>` +\n `<a:graphic><a:graphicData uri=\"${CHART_NS}\">` +\n `<c:chart xmlns:c=\"${CHART_NS}\" xmlns:r=\"${NS.relationships}\" r:id=\"${relationshipId}\"/>` +\n `</a:graphicData></a:graphic>` +\n `</xdr:graphicFrame>` +\n `<xdr:clientData/>` +\n `</xdr:twoCellAnchor>`\n );\n }\n\n buildPart(partIndex: number): DrawingDependentPart {\n return {\n path: `xl/charts/chart${partIndex}.xml`,\n content: this.toChartXml(),\n contentType: CONTENT_TYPES.chart,\n relType: REL_TYPES.chart,\n };\n }\n\n // ── Chart XML ─────────────────────────────────────────────────────────────\n\n /** True when a secondary-axis combo should be emitted. */\n #hasSecondary(): boolean {\n return CARTESIAN.has(this.#family.element) && this.#series.some(s => s.secondaryAxis);\n }\n\n /** Builds the full `xl/charts/chartN.xml` content. */\n toChartXml(): string {\n const titleXml = this.#title\n ? `${this.#buildTitleXml(this.#title)}<c:autoTitleDeleted val=\"0\"/>`\n : `<c:autoTitleDeleted val=\"1\"/>`;\n\n const plot = this.#buildPlotElement();\n const axes = this.#family.hasAxes ? this.#buildAxesXml() : '';\n const legend = this.#legend.position === ChartLegendPosition.None\n ? ''\n : `<c:legend><c:legendPos val=\"${this.#legend.position}\"/><c:overlay val=\"0\"/></c:legend>`;\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>` +\n `<c:chartSpace xmlns:c=\"${CHART_NS}\" xmlns:a=\"${NS.drawingml}\" xmlns:r=\"${NS.relationships}\">` +\n `<c:chart>` +\n titleXml +\n `<c:plotArea><c:layout/>` +\n plot +\n axes +\n `</c:plotArea>` +\n legend +\n `<c:plotVisOnly val=\"1\"/>` +\n `<c:dispBlanksAs val=\"gap\"/>` +\n `</c:chart>` +\n `</c:chartSpace>`;\n }\n\n #buildPlotElement(): string {\n const fam = this.#family;\n const el = fam.element;\n const indexed: IndexedSeries[] = this.#series.map((s, idx) => ({ s, idx }));\n const dLbls = this.#buildDataLabelsXml();\n\n if (el === 'pieChart') {\n return `<c:pieChart><c:varyColors val=\"1\"/>${this.#seriesGroupXml(indexed, fam)}${dLbls}<c:firstSliceAng val=\"0\"/></c:pieChart>`;\n }\n if (el === 'doughnutChart') {\n return `<c:doughnutChart><c:varyColors val=\"1\"/>${this.#seriesGroupXml(indexed, fam)}${dLbls}<c:firstSliceAng val=\"0\"/><c:holeSize val=\"${this.#holeSize ?? 50}\"/></c:doughnutChart>`;\n }\n if (el === 'radarChart') {\n return `<c:radarChart><c:radarStyle val=\"${fam.radarStyle}\"/><c:varyColors val=\"0\"/>${this.#seriesGroupXml(indexed, fam)}${dLbls}<c:axId val=\"${CAT_AX_ID}\"/><c:axId val=\"${VAL_AX_ID}\"/></c:radarChart>`;\n }\n if (el === 'scatterChart') {\n return `<c:scatterChart><c:scatterStyle val=\"${fam.scatterStyle}\"/><c:varyColors val=\"0\"/>${this.#seriesGroupXml(indexed, fam)}${dLbls}<c:axId val=\"${CAT_AX_ID}\"/><c:axId val=\"${VAL_AX_ID}\"/></c:scatterChart>`;\n }\n if (el === 'bubbleChart') {\n return `<c:bubbleChart><c:varyColors val=\"0\"/>${this.#seriesGroupXml(indexed, fam)}${dLbls}<c:bubbleScale val=\"100\"/><c:showNegBubbles val=\"0\"/><c:axId val=\"${CAT_AX_ID}\"/><c:axId val=\"${VAL_AX_ID}\"/></c:bubbleChart>`;\n }\n\n // Cartesian (bar/line/area) — may split into a secondary-axis group.\n if (!this.#hasSecondary()) {\n return this.#cartesianGroupXml(indexed, fam, CAT_AX_ID, VAL_AX_ID);\n }\n const primary = indexed.filter(e => !e.s.secondaryAxis);\n const secondary = indexed.filter(e => e.s.secondaryAxis);\n const secFam = resolveFamily(this.#secondaryType);\n return this.#cartesianGroupXml(primary, fam, CAT_AX_ID, VAL_AX_ID) +\n this.#cartesianGroupXml(secondary, secFam, SEC_CAT_AX_ID, SEC_VAL_AX_ID);\n }\n\n #cartesianGroupXml(entries: IndexedSeries[], fam: ChartFamily, catId: number, valId: number): string {\n const el = fam.element;\n const barDir = fam.barDir ? `<c:barDir val=\"${fam.barDir}\"/>` : '';\n const grouping = fam.grouping ? `<c:grouping val=\"${fam.grouping}\"/>` : '';\n const marker = el === 'lineChart' ? `<c:marker val=\"${fam.markers ? 1 : 0}\"/>` : '';\n const barExtras = el === 'barChart'\n ? `<c:gapWidth val=\"${this.#gapWidth}\"/>${fam.overlap !== undefined ? `<c:overlap val=\"${fam.overlap}\"/>` : ''}`\n : '';\n return `<c:${el}>${barDir}${grouping}<c:varyColors val=\"0\"/>${this.#seriesGroupXml(entries, fam)}${this.#buildDataLabelsXml()}${barExtras}${marker}<c:axId val=\"${catId}\"/><c:axId val=\"${valId}\"/></c:${el}>`;\n }\n\n #seriesGroupXml(entries: IndexedSeries[], fam: ChartFamily): string {\n return entries.map(e => this.#buildSeriesXml(e.s, e.idx, fam)).join('');\n }\n\n #buildSeriesXml(s: ChartSeries, idx: number, fam: ChartFamily): string {\n const tx = s.name ? `<c:tx>${this.#refOrLiteral(s.name)}</c:tx>` : '';\n const spPr = s.color ? this.#seriesColorXml(s.color, fam) : '';\n const dPt = s.pointColors && s.pointColors.length ? this.#buildDataPointsXml(s.pointColors, fam) : '';\n const trend = s.trendline ? this.#buildTrendlineXml(s.trendline) : '';\n const marker = fam.markers ? `<c:marker><c:symbol val=\"circle\"/><c:size val=\"5\"/></c:marker>` : '';\n\n if (fam.seriesKind === 'xy') {\n const xVal = s.categories ? `<c:xVal>${numRef(s.categories)}</c:xVal>` : '';\n const yVal = `<c:yVal>${numRef(s.values)}</c:yVal>`;\n const smooth = `<c:smooth val=\"${fam.smooth ? 1 : 0}\"/>`;\n // idx, order, tx, spPr, marker, dPt, trendline, xVal, yVal, smooth\n return `<c:ser><c:idx val=\"${idx}\"/><c:order val=\"${idx}\"/>${tx}${spPr}${marker}${dPt}${trend}${xVal}${yVal}${smooth}</c:ser>`;\n }\n\n if (fam.seriesKind === 'bubble') {\n const xVal = s.categories ? `<c:xVal>${numRef(s.categories)}</c:xVal>` : '';\n const yVal = `<c:yVal>${numRef(s.values)}</c:yVal>`;\n const bub = s.bubbleSize\n ? `<c:bubbleSize>${numRef(s.bubbleSize)}</c:bubbleSize>`\n : `<c:bubbleSize><c:numLit><c:formatCode>General</c:formatCode><c:ptCount val=\"0\"/></c:numLit></c:bubbleSize>`;\n // idx, order, tx, spPr, dPt, trendline, xVal, yVal, bubbleSize, bubble3D\n return `<c:ser><c:idx val=\"${idx}\"/><c:order val=\"${idx}\"/>${tx}${spPr}${dPt}${trend}${xVal}${yVal}${bub}<c:bubble3D val=\"0\"/></c:ser>`;\n }\n\n // Category: idx, order, tx, spPr, [marker], dPt, trendline, cat, val, [smooth]\n const catMarker = fam.element === 'lineChart' || fam.element === 'radarChart' ? marker : '';\n const cat = s.categories ? `<c:cat>${strRef(s.categories)}</c:cat>` : '';\n const val = `<c:val>${numRef(s.values)}</c:val>`;\n const smooth = fam.element === 'lineChart' ? `<c:smooth val=\"0\"/>` : '';\n return `<c:ser><c:idx val=\"${idx}\"/><c:order val=\"${idx}\"/>${tx}${spPr}${catMarker}${dPt}${trend}${cat}${val}${smooth}</c:ser>`;\n }\n\n #buildDataPointsXml(colors: (ExcelColor | string)[], fam: ChartFamily): string {\n return colors\n .map((c, i) => `<c:dPt><c:idx val=\"${i}\"/><c:bubble3D val=\"0\"/>${this.#seriesColorXml(c, fam)}</c:dPt>`)\n .join('');\n }\n\n #buildTrendlineXml(t: ChartTrendline): string {\n const order = t.type === TrendlineType.Polynomial ? `<c:order val=\"${t.order ?? 2}\"/>` : '';\n const period = t.type === TrendlineType.MovingAverage ? `<c:period val=\"${t.period ?? 2}\"/>` : '';\n // Order per CT_Trendline: trendlineType, order, period, forward, backward, intercept, dispRSqr, dispEq.\n return `<c:trendline>` +\n `<c:trendlineType val=\"${t.type}\"/>` +\n order + period +\n `<c:dispRSqr val=\"${t.displayRSquared ? 1 : 0}\"/>` +\n `<c:dispEq val=\"${t.displayEquation ? 1 : 0}\"/>` +\n `</c:trendline>`;\n }\n\n #seriesColorXml(color: ExcelColor | string, fam: ChartFamily): string {\n const fill = `<a:solidFill><a:srgbClr val=\"${toSrgb(color)}\"/></a:solidFill>`;\n return fam.colorAsLine\n ? `<c:spPr><a:ln w=\"28575\">${fill}</a:ln></c:spPr>`\n : `<c:spPr>${fill}</c:spPr>`;\n }\n\n #refOrLiteral(name: string): string {\n return name.includes('!') ? strRef(name) : `<c:v>${escapeXml(name)}</c:v>`;\n }\n\n #buildDataLabelsXml(): string {\n const d = this.#dataLabels;\n if (!d) return '';\n const flag = (b: boolean | undefined) => (b ? 1 : 0);\n return `<c:dLbls>` +\n `<c:showLegendKey val=\"0\"/>` +\n `<c:showVal val=\"${flag(d.value)}\"/>` +\n `<c:showCatName val=\"${flag(d.category)}\"/>` +\n `<c:showSerName val=\"${flag(d.series)}\"/>` +\n `<c:showPercent val=\"${flag(d.percent)}\"/>` +\n `<c:showBubbleSize val=\"0\"/>` +\n `</c:dLbls>`;\n }\n\n #buildAxesXml(): string {\n const fam = this.#family;\n if (fam.seriesKind !== 'category') {\n // XY (scatter / bubble): both axes are value axes.\n return this.#buildValAx(CAT_AX_ID, 'b', VAL_AX_ID, this.#categoryAxis, {}) +\n this.#buildValAx(VAL_AX_ID, 'l', CAT_AX_ID, this.#valueAxis, {});\n }\n\n let out =\n this.#buildCatAx(CAT_AX_ID, fam.catAxPos, VAL_AX_ID, this.#categoryAxis, {}) +\n this.#buildValAx(VAL_AX_ID, fam.valAxPos, CAT_AX_ID, this.#valueAxis, { crossBetween: 'between' });\n\n if (this.#hasSecondary()) {\n out +=\n this.#buildValAx(SEC_VAL_AX_ID, 'r', SEC_CAT_AX_ID, this.#secondaryValueAxis, { crossBetween: 'between', crosses: 'max' }) +\n this.#buildCatAx(SEC_CAT_AX_ID, fam.catAxPos, SEC_VAL_AX_ID, {}, { deleted: true });\n }\n return out;\n }\n\n #buildCatAx(id: number, pos: 'b' | 'l', crossId: number, cfg: ChartAxisConfig, opts: { deleted?: boolean }): string {\n const title = cfg.title ? this.#buildTitleXml(cfg.title) : '';\n const numFmt = cfg.numberFormat ? `<c:numFmt formatCode=\"${escapeXml(cfg.numberFormat)}\" sourceLinked=\"0\"/>` : '';\n return `<c:catAx>` +\n `<c:axId val=\"${id}\"/>` +\n `<c:scaling><c:orientation val=\"minMax\"/></c:scaling>` +\n `<c:delete val=\"${opts.deleted ? 1 : 0}\"/>` +\n `<c:axPos val=\"${pos}\"/>` +\n title + numFmt +\n `<c:majorTickMark val=\"out\"/><c:minorTickMark val=\"none\"/><c:tickLblPos val=\"nextTo\"/>` +\n `<c:crossAx val=\"${crossId}\"/><c:crosses val=\"autoZero\"/>` +\n `<c:auto val=\"1\"/><c:lblAlgn val=\"ctr\"/><c:lblOffset val=\"100\"/><c:noMultiLvlLbl val=\"0\"/>` +\n `</c:catAx>`;\n }\n\n #buildValAx(id: number, pos: 'b' | 'l' | 'r', crossId: number, cfg: ChartAxisConfig, opts: { crossBetween?: string; crosses?: string }): string {\n const grid = cfg.majorGridlines ? `<c:majorGridlines/>` : '';\n const title = cfg.title ? this.#buildTitleXml(cfg.title) : '';\n const numFmt = cfg.numberFormat ? `<c:numFmt formatCode=\"${escapeXml(cfg.numberFormat)}\" sourceLinked=\"0\"/>` : '';\n const scaling = `<c:scaling><c:orientation val=\"minMax\"/>` +\n `${cfg.max !== undefined ? `<c:max val=\"${cfg.max}\"/>` : ''}` +\n `${cfg.min !== undefined ? `<c:min val=\"${cfg.min}\"/>` : ''}` +\n `</c:scaling>`;\n const cb = opts.crossBetween ? `<c:crossBetween val=\"${opts.crossBetween}\"/>` : '';\n return `<c:valAx>` +\n `<c:axId val=\"${id}\"/>` +\n scaling +\n `<c:delete val=\"0\"/>` +\n `<c:axPos val=\"${pos}\"/>` +\n grid + title + numFmt +\n `<c:majorTickMark val=\"out\"/><c:minorTickMark val=\"none\"/><c:tickLblPos val=\"nextTo\"/>` +\n `<c:crossAx val=\"${crossId}\"/><c:crosses val=\"${opts.crosses ?? 'autoZero'}\"/>` + cb +\n `</c:valAx>`;\n }\n\n #buildTitleXml(text: string): string {\n return `<c:title><c:tx><c:rich>` +\n `<a:bodyPr rot=\"0\" spcFirstLastPara=\"1\" vertOverflow=\"ellipsis\" vert=\"horz\" wrap=\"square\" anchor=\"ctr\" anchorCtr=\"1\"/>` +\n `<a:lstStyle/>` +\n `<a:p><a:r><a:t>${escapeXml(text)}</a:t></a:r></a:p>` +\n `</c:rich></c:tx><c:overlay val=\"0\"/></c:title>`;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/chart-enums.ts","../src/excel-chart.ts"],"names":["ExcelChartType","TrendlineType","ChartLegendPosition","escapeXml","parseCellRef","NS","CONTENT_TYPES","REL_TYPES","smooth"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Chart enumerations.\n * Port of TVE.PureDocs.Excel.Charts enums (C#).\n */\n\n/** Supported chart types. */\nexport enum ExcelChartType {\n // Column / bar\n ColumnClustered = 'columnClustered',\n ColumnStacked = 'columnStacked',\n BarClustered = 'barClustered',\n BarStacked = 'barStacked',\n // Line\n Line = 'line',\n LineMarkers = 'lineMarkers',\n // Area\n Area = 'area',\n // Pie family\n Pie = 'pie',\n Doughnut = 'doughnut',\n // Radar\n Radar = 'radar',\n RadarMarkers = 'radarMarkers',\n RadarFilled = 'radarFilled',\n // XY (scatter) / bubble\n Scatter = 'scatter',\n ScatterLines = 'scatterLines',\n ScatterSmooth = 'scatterSmooth',\n Bubble = 'bubble',\n}\n\n/** Trendline regression types (values map to OOXML `c:trendlineType`). */\nexport enum TrendlineType {\n Linear = 'linear',\n Exponential = 'exp',\n Logarithmic = 'log',\n MovingAverage = 'movingAvg',\n Polynomial = 'poly',\n Power = 'power',\n}\n\n/** Legend placement (values map directly to OOXML `c:legendPos`). */\nexport enum ChartLegendPosition {\n Right = 'r',\n Left = 'l',\n Top = 't',\n Bottom = 'b',\n TopRight = 'tr',\n /** Hides the legend entirely. */\n None = 'none',\n}\n","/**\n * ExcelChart — builds an OOXML chart part and its drawing anchor.\n * Port of TVE.PureDocs.Excel.Charts.ExcelChart (C#).\n *\n * Implements the core `DrawingProvider` contract so the chart can be attached to\n * a worksheet and serialised by `Workbook.saveAsBuffer()` without the core library\n * knowing anything about charts.\n */\nimport {\n parseCellRef,\n escapeXml,\n NS,\n REL_TYPES,\n CONTENT_TYPES,\n ExcelColor,\n type Worksheet,\n type DrawingProvider,\n type DrawingDependentPart,\n} from '@devmm/puredocs-excel';\nimport { ExcelChartType, ChartLegendPosition, TrendlineType } from './chart-enums.js';\n\nconst CHART_NS = 'http://schemas.openxmlformats.org/drawingml/2006/chart';\nconst CAT_AX_ID = 111111111;\nconst VAL_AX_ID = 222222222;\nconst SEC_VAL_AX_ID = 333333333;\nconst SEC_CAT_AX_ID = 444444444;\n\n/** Anchor by A1-style cell refs, or by 0-based row/col indices. */\nexport type ChartAnchor =\n | { from: string; to: string }\n | { fromRow: number; fromCol: number; toRow: number; toCol: number };\n\n/** Series trendline configuration. */\nexport interface ChartTrendline {\n type: TrendlineType;\n /** Polynomial order (poly only, 2–6). */\n order?: number;\n /** Moving-average period (movingAvg only). */\n period?: number;\n displayEquation?: boolean;\n displayRSquared?: boolean;\n}\n\n/**\n * A single data series. Ranges must be absolute, sheet-qualified\n * (e.g. `Sheet1!$B$2:$B$5`).\n *\n * For category charts (column/bar/line/area/pie/doughnut/radar): `values` is the Y\n * range and `categories` the X labels. For XY (scatter): `categories` is the X range\n * and `values` the Y range. For bubble: additionally set `bubbleSize`.\n */\nexport interface ChartSeries {\n /** Series name — a formula ref (contains `!`) or a literal string. */\n name?: string;\n /** Values range (Y for category/scatter). */\n values: string;\n /** Categories/X range. */\n categories?: string;\n /** Bubble size range (bubble charts only). */\n bubbleSize?: string;\n /** Optional series fill/line colour. */\n color?: ExcelColor | string;\n /** Plot this series against the secondary value axis (cartesian combos only). */\n secondaryAxis?: boolean;\n /** Optional trendline. */\n trendline?: ChartTrendline;\n /** Per-data-point colours (e.g. pie slices, individual bars). */\n pointColors?: (ExcelColor | string)[];\n}\n\n/** Mutable axis configuration. */\nexport interface ChartAxisConfig {\n title?: string;\n numberFormat?: string;\n min?: number;\n max?: number;\n majorGridlines?: boolean;\n}\n\n/** Mutable legend configuration. */\nexport interface ChartLegendConfig {\n position: ChartLegendPosition;\n}\n\n/** Data-label toggles. */\nexport interface ChartDataLabelConfig {\n value?: boolean;\n category?: boolean;\n series?: boolean;\n percent?: boolean;\n}\n\ntype SeriesKind = 'category' | 'xy' | 'bubble';\n\ninterface ChartFamily {\n element:\n | 'barChart' | 'lineChart' | 'areaChart'\n | 'pieChart' | 'doughnutChart' | 'radarChart'\n | 'scatterChart' | 'bubbleChart';\n seriesKind: SeriesKind;\n barDir?: 'col' | 'bar';\n grouping?: 'clustered' | 'stacked' | 'standard';\n overlap?: number;\n scatterStyle?: 'lineMarker' | 'marker' | 'smoothMarker';\n radarStyle?: 'standard' | 'marker' | 'filled';\n isPieLike: boolean;\n hasAxes: boolean;\n markers: boolean;\n smooth: boolean;\n colorAsLine: boolean;\n holeSize?: number;\n catAxPos: 'b' | 'l';\n valAxPos: 'b' | 'l';\n}\n\nconst CARTESIAN = new Set(['barChart', 'lineChart', 'areaChart']);\n\nfunction resolveFamily(type: ExcelChartType): ChartFamily {\n const base = {\n seriesKind: 'category' as SeriesKind,\n isPieLike: false, hasAxes: true, markers: false, smooth: false,\n colorAsLine: false, catAxPos: 'b' as const, valAxPos: 'l' as const,\n };\n switch (type) {\n case ExcelChartType.ColumnClustered:\n return { ...base, element: 'barChart', barDir: 'col', grouping: 'clustered', overlap: -27 };\n case ExcelChartType.ColumnStacked:\n return { ...base, element: 'barChart', barDir: 'col', grouping: 'stacked', overlap: 100 };\n case ExcelChartType.BarClustered:\n return { ...base, element: 'barChart', barDir: 'bar', grouping: 'clustered', overlap: -27, catAxPos: 'l', valAxPos: 'b' };\n case ExcelChartType.BarStacked:\n return { ...base, element: 'barChart', barDir: 'bar', grouping: 'stacked', overlap: 100, catAxPos: 'l', valAxPos: 'b' };\n case ExcelChartType.Line:\n return { ...base, element: 'lineChart', grouping: 'standard', colorAsLine: true };\n case ExcelChartType.LineMarkers:\n return { ...base, element: 'lineChart', grouping: 'standard', markers: true, colorAsLine: true };\n case ExcelChartType.Area:\n return { ...base, element: 'areaChart', grouping: 'standard' };\n case ExcelChartType.Pie:\n return { ...base, element: 'pieChart', isPieLike: true, hasAxes: false };\n case ExcelChartType.Doughnut:\n return { ...base, element: 'doughnutChart', isPieLike: true, hasAxes: false, holeSize: 50 };\n case ExcelChartType.Radar:\n return { ...base, element: 'radarChart', radarStyle: 'standard', colorAsLine: true };\n case ExcelChartType.RadarMarkers:\n return { ...base, element: 'radarChart', radarStyle: 'marker', markers: true, colorAsLine: true };\n case ExcelChartType.RadarFilled:\n return { ...base, element: 'radarChart', radarStyle: 'filled' };\n case ExcelChartType.Scatter:\n return { ...base, element: 'scatterChart', seriesKind: 'xy', scatterStyle: 'marker', markers: true, colorAsLine: true };\n case ExcelChartType.ScatterLines:\n return { ...base, element: 'scatterChart', seriesKind: 'xy', scatterStyle: 'lineMarker', markers: true, colorAsLine: true };\n case ExcelChartType.ScatterSmooth:\n return { ...base, element: 'scatterChart', seriesKind: 'xy', scatterStyle: 'smoothMarker', markers: true, smooth: true, colorAsLine: true };\n case ExcelChartType.Bubble:\n return { ...base, element: 'bubbleChart', seriesKind: 'bubble' };\n }\n}\n\nfunction toSrgb(color: ExcelColor | string): string {\n const raw = typeof color === 'string' ? color : (color.toXmlAttrs().rgb ?? 'FF000000');\n const hex = raw.replace(/[^0-9a-fA-F]/g, '');\n return (hex.length >= 6 ? hex.slice(-6) : hex.padStart(6, '0')).toUpperCase();\n}\n\nfunction numRef(ref: string): string { return `<c:numRef><c:f>${escapeXml(ref)}</c:f></c:numRef>`; }\nfunction strRef(ref: string): string { return `<c:strRef><c:f>${escapeXml(ref)}</c:f></c:strRef>`; }\n\ninterface IndexedSeries { s: ChartSeries; idx: number; }\n\nexport class ExcelChart implements DrawingProvider {\n #type: ExcelChartType;\n #family: ChartFamily;\n #secondaryType: ExcelChartType = ExcelChartType.Line;\n #anchor: { fromCol: number; fromRow: number; toCol: number; toRow: number } =\n { fromCol: 0, fromRow: 0, toCol: 8, toRow: 15 };\n #title?: string;\n #series: ChartSeries[] = [];\n #legend: ChartLegendConfig = { position: ChartLegendPosition.Right };\n #categoryAxis: ChartAxisConfig = {};\n #valueAxis: ChartAxisConfig = { majorGridlines: true };\n #secondaryValueAxis: ChartAxisConfig = {};\n #dataLabels?: ChartDataLabelConfig;\n #gapWidth = 150;\n #holeSize?: number;\n\n private constructor(type: ExcelChartType) {\n this.#type = type;\n this.#family = resolveFamily(type);\n this.#holeSize = this.#family.holeSize;\n }\n\n /** Creates a chart of the given type. */\n static create(type: ExcelChartType): ExcelChart {\n return new ExcelChart(type);\n }\n\n /** The chart type. */\n get type(): ExcelChartType { return this.#type; }\n\n // ── Fluent configuration ──────────────────────────────────────────────────\n\n setAnchor(anchor: ChartAnchor): this {\n if ('from' in anchor) {\n const f = parseCellRef(anchor.from);\n const t = parseCellRef(anchor.to);\n this.#anchor = { fromCol: f.column - 1, fromRow: f.row - 1, toCol: t.column - 1, toRow: t.row - 1 };\n } else {\n this.#anchor = { fromCol: anchor.fromCol, fromRow: anchor.fromRow, toCol: anchor.toCol, toRow: anchor.toRow };\n }\n return this;\n }\n\n setTitle(title: string): this { this.#title = title; return this; }\n\n addSeries(series: ChartSeries): this { this.#series.push(series); return this; }\n\n configureLegend(fn: (legend: ChartLegendConfig) => void): this { fn(this.#legend); return this; }\n\n configureCategoryAxis(fn: (axis: ChartAxisConfig) => void): this { fn(this.#categoryAxis); return this; }\n\n configureValueAxis(fn: (axis: ChartAxisConfig) => void): this { fn(this.#valueAxis); return this; }\n\n configureSecondaryValueAxis(fn: (axis: ChartAxisConfig) => void): this { fn(this.#secondaryValueAxis); return this; }\n\n /** Chart type used for series flagged `secondaryAxis` (default `Line`). */\n setSecondaryType(type: ExcelChartType): this { this.#secondaryType = type; return this; }\n\n showDataLabels(config: ChartDataLabelConfig = { value: true }): this { this.#dataLabels = config; return this; }\n\n setGapWidth(gapWidth: number): this { this.#gapWidth = gapWidth; return this; }\n\n /** Doughnut hole size as a percentage (10–90). Ignored by non-doughnut charts. */\n setHoleSize(percent: number): this { this.#holeSize = percent; return this; }\n\n /** Attaches this chart to a worksheet. */\n addTo(sheet: Worksheet): this {\n sheet.addDrawingProvider(this);\n return this;\n }\n\n // ── DrawingProvider contract ──────────────────────────────────────────────\n\n buildAnchorXml(relationshipId: string): string {\n const a = this.#anchor;\n const frameId = parseInt(relationshipId.slice(3), 10) + 1;\n return (\n `<xdr:twoCellAnchor>` +\n `<xdr:from><xdr:col>${a.fromCol}</xdr:col><xdr:colOff>0</xdr:colOff>` +\n `<xdr:row>${a.fromRow}</xdr:row><xdr:rowOff>0</xdr:rowOff></xdr:from>` +\n `<xdr:to><xdr:col>${a.toCol}</xdr:col><xdr:colOff>0</xdr:colOff>` +\n `<xdr:row>${a.toRow}</xdr:row><xdr:rowOff>0</xdr:rowOff></xdr:to>` +\n `<xdr:graphicFrame macro=\"\">` +\n `<xdr:nvGraphicFramePr>` +\n `<xdr:cNvPr id=\"${frameId}\" name=\"Chart ${frameId}\"/>` +\n `<xdr:cNvGraphicFramePr/>` +\n `</xdr:nvGraphicFramePr>` +\n `<xdr:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/></xdr:xfrm>` +\n `<a:graphic><a:graphicData uri=\"${CHART_NS}\">` +\n `<c:chart xmlns:c=\"${CHART_NS}\" xmlns:r=\"${NS.relationships}\" r:id=\"${relationshipId}\"/>` +\n `</a:graphicData></a:graphic>` +\n `</xdr:graphicFrame>` +\n `<xdr:clientData/>` +\n `</xdr:twoCellAnchor>`\n );\n }\n\n buildPart(partIndex: number): DrawingDependentPart {\n return {\n path: `xl/charts/chart${partIndex}.xml`,\n content: this.toChartXml(),\n contentType: CONTENT_TYPES.chart,\n relType: REL_TYPES.chart,\n };\n }\n\n // ── Chart XML ─────────────────────────────────────────────────────────────\n\n /** True when a secondary-axis combo should be emitted. */\n #hasSecondary(): boolean {\n return CARTESIAN.has(this.#family.element) && this.#series.some(s => s.secondaryAxis);\n }\n\n /** Builds the full `xl/charts/chartN.xml` content. */\n toChartXml(): string {\n const titleXml = this.#title\n ? `${this.#buildTitleXml(this.#title)}<c:autoTitleDeleted val=\"0\"/>`\n : `<c:autoTitleDeleted val=\"1\"/>`;\n\n const plot = this.#buildPlotElement();\n const axes = this.#family.hasAxes ? this.#buildAxesXml() : '';\n const legend = this.#legend.position === ChartLegendPosition.None\n ? ''\n : `<c:legend><c:legendPos val=\"${this.#legend.position}\"/><c:overlay val=\"0\"/></c:legend>`;\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>` +\n `<c:chartSpace xmlns:c=\"${CHART_NS}\" xmlns:a=\"${NS.drawingml}\" xmlns:r=\"${NS.relationships}\">` +\n `<c:chart>` +\n titleXml +\n `<c:plotArea><c:layout/>` +\n plot +\n axes +\n `</c:plotArea>` +\n legend +\n `<c:plotVisOnly val=\"1\"/>` +\n `<c:dispBlanksAs val=\"gap\"/>` +\n `</c:chart>` +\n `</c:chartSpace>`;\n }\n\n #buildPlotElement(): string {\n const fam = this.#family;\n const el = fam.element;\n const indexed: IndexedSeries[] = this.#series.map((s, idx) => ({ s, idx }));\n const dLbls = this.#buildDataLabelsXml();\n\n if (el === 'pieChart') {\n return `<c:pieChart><c:varyColors val=\"1\"/>${this.#seriesGroupXml(indexed, fam)}${dLbls}<c:firstSliceAng val=\"0\"/></c:pieChart>`;\n }\n if (el === 'doughnutChart') {\n return `<c:doughnutChart><c:varyColors val=\"1\"/>${this.#seriesGroupXml(indexed, fam)}${dLbls}<c:firstSliceAng val=\"0\"/><c:holeSize val=\"${this.#holeSize ?? 50}\"/></c:doughnutChart>`;\n }\n if (el === 'radarChart') {\n return `<c:radarChart><c:radarStyle val=\"${fam.radarStyle}\"/><c:varyColors val=\"0\"/>${this.#seriesGroupXml(indexed, fam)}${dLbls}<c:axId val=\"${CAT_AX_ID}\"/><c:axId val=\"${VAL_AX_ID}\"/></c:radarChart>`;\n }\n if (el === 'scatterChart') {\n return `<c:scatterChart><c:scatterStyle val=\"${fam.scatterStyle}\"/><c:varyColors val=\"0\"/>${this.#seriesGroupXml(indexed, fam)}${dLbls}<c:axId val=\"${CAT_AX_ID}\"/><c:axId val=\"${VAL_AX_ID}\"/></c:scatterChart>`;\n }\n if (el === 'bubbleChart') {\n return `<c:bubbleChart><c:varyColors val=\"0\"/>${this.#seriesGroupXml(indexed, fam)}${dLbls}<c:bubbleScale val=\"100\"/><c:showNegBubbles val=\"0\"/><c:axId val=\"${CAT_AX_ID}\"/><c:axId val=\"${VAL_AX_ID}\"/></c:bubbleChart>`;\n }\n\n // Cartesian (bar/line/area) — may split into a secondary-axis group.\n if (!this.#hasSecondary()) {\n return this.#cartesianGroupXml(indexed, fam, CAT_AX_ID, VAL_AX_ID);\n }\n const primary = indexed.filter(e => !e.s.secondaryAxis);\n const secondary = indexed.filter(e => e.s.secondaryAxis);\n const secFam = resolveFamily(this.#secondaryType);\n return this.#cartesianGroupXml(primary, fam, CAT_AX_ID, VAL_AX_ID) +\n this.#cartesianGroupXml(secondary, secFam, SEC_CAT_AX_ID, SEC_VAL_AX_ID);\n }\n\n #cartesianGroupXml(entries: IndexedSeries[], fam: ChartFamily, catId: number, valId: number): string {\n const el = fam.element;\n const barDir = fam.barDir ? `<c:barDir val=\"${fam.barDir}\"/>` : '';\n const grouping = fam.grouping ? `<c:grouping val=\"${fam.grouping}\"/>` : '';\n const marker = el === 'lineChart' ? `<c:marker val=\"${fam.markers ? 1 : 0}\"/>` : '';\n const barExtras = el === 'barChart'\n ? `<c:gapWidth val=\"${this.#gapWidth}\"/>${fam.overlap !== undefined ? `<c:overlap val=\"${fam.overlap}\"/>` : ''}`\n : '';\n return `<c:${el}>${barDir}${grouping}<c:varyColors val=\"0\"/>${this.#seriesGroupXml(entries, fam)}${this.#buildDataLabelsXml()}${barExtras}${marker}<c:axId val=\"${catId}\"/><c:axId val=\"${valId}\"/></c:${el}>`;\n }\n\n #seriesGroupXml(entries: IndexedSeries[], fam: ChartFamily): string {\n return entries.map(e => this.#buildSeriesXml(e.s, e.idx, fam)).join('');\n }\n\n #buildSeriesXml(s: ChartSeries, idx: number, fam: ChartFamily): string {\n const tx = s.name ? `<c:tx>${this.#refOrLiteral(s.name)}</c:tx>` : '';\n const spPr = s.color ? this.#seriesColorXml(s.color, fam) : '';\n const dPt = s.pointColors && s.pointColors.length ? this.#buildDataPointsXml(s.pointColors, fam) : '';\n const trend = s.trendline ? this.#buildTrendlineXml(s.trendline) : '';\n const marker = fam.markers ? `<c:marker><c:symbol val=\"circle\"/><c:size val=\"5\"/></c:marker>` : '';\n\n if (fam.seriesKind === 'xy') {\n const xVal = s.categories ? `<c:xVal>${numRef(s.categories)}</c:xVal>` : '';\n const yVal = `<c:yVal>${numRef(s.values)}</c:yVal>`;\n const smooth = `<c:smooth val=\"${fam.smooth ? 1 : 0}\"/>`;\n // idx, order, tx, spPr, marker, dPt, trendline, xVal, yVal, smooth\n return `<c:ser><c:idx val=\"${idx}\"/><c:order val=\"${idx}\"/>${tx}${spPr}${marker}${dPt}${trend}${xVal}${yVal}${smooth}</c:ser>`;\n }\n\n if (fam.seriesKind === 'bubble') {\n const xVal = s.categories ? `<c:xVal>${numRef(s.categories)}</c:xVal>` : '';\n const yVal = `<c:yVal>${numRef(s.values)}</c:yVal>`;\n const bub = s.bubbleSize\n ? `<c:bubbleSize>${numRef(s.bubbleSize)}</c:bubbleSize>`\n : `<c:bubbleSize><c:numLit><c:formatCode>General</c:formatCode><c:ptCount val=\"0\"/></c:numLit></c:bubbleSize>`;\n // idx, order, tx, spPr, dPt, trendline, xVal, yVal, bubbleSize, bubble3D\n return `<c:ser><c:idx val=\"${idx}\"/><c:order val=\"${idx}\"/>${tx}${spPr}${dPt}${trend}${xVal}${yVal}${bub}<c:bubble3D val=\"0\"/></c:ser>`;\n }\n\n // Category: idx, order, tx, spPr, [marker], dPt, trendline, cat, val, [smooth]\n const catMarker = fam.element === 'lineChart' || fam.element === 'radarChart' ? marker : '';\n const cat = s.categories ? `<c:cat>${strRef(s.categories)}</c:cat>` : '';\n const val = `<c:val>${numRef(s.values)}</c:val>`;\n const smooth = fam.element === 'lineChart' ? `<c:smooth val=\"0\"/>` : '';\n return `<c:ser><c:idx val=\"${idx}\"/><c:order val=\"${idx}\"/>${tx}${spPr}${catMarker}${dPt}${trend}${cat}${val}${smooth}</c:ser>`;\n }\n\n #buildDataPointsXml(colors: (ExcelColor | string)[], fam: ChartFamily): string {\n return colors\n .map((c, i) => `<c:dPt><c:idx val=\"${i}\"/><c:bubble3D val=\"0\"/>${this.#seriesColorXml(c, fam)}</c:dPt>`)\n .join('');\n }\n\n #buildTrendlineXml(t: ChartTrendline): string {\n const order = t.type === TrendlineType.Polynomial ? `<c:order val=\"${t.order ?? 2}\"/>` : '';\n const period = t.type === TrendlineType.MovingAverage ? `<c:period val=\"${t.period ?? 2}\"/>` : '';\n // Order per CT_Trendline: trendlineType, order, period, forward, backward, intercept, dispRSqr, dispEq.\n return `<c:trendline>` +\n `<c:trendlineType val=\"${t.type}\"/>` +\n order + period +\n `<c:dispRSqr val=\"${t.displayRSquared ? 1 : 0}\"/>` +\n `<c:dispEq val=\"${t.displayEquation ? 1 : 0}\"/>` +\n `</c:trendline>`;\n }\n\n #seriesColorXml(color: ExcelColor | string, fam: ChartFamily): string {\n const fill = `<a:solidFill><a:srgbClr val=\"${toSrgb(color)}\"/></a:solidFill>`;\n return fam.colorAsLine\n ? `<c:spPr><a:ln w=\"28575\">${fill}</a:ln></c:spPr>`\n : `<c:spPr>${fill}</c:spPr>`;\n }\n\n #refOrLiteral(name: string): string {\n return name.includes('!') ? strRef(name) : `<c:v>${escapeXml(name)}</c:v>`;\n }\n\n #buildDataLabelsXml(): string {\n const d = this.#dataLabels;\n if (!d) return '';\n const flag = (b: boolean | undefined) => (b ? 1 : 0);\n return `<c:dLbls>` +\n `<c:showLegendKey val=\"0\"/>` +\n `<c:showVal val=\"${flag(d.value)}\"/>` +\n `<c:showCatName val=\"${flag(d.category)}\"/>` +\n `<c:showSerName val=\"${flag(d.series)}\"/>` +\n `<c:showPercent val=\"${flag(d.percent)}\"/>` +\n `<c:showBubbleSize val=\"0\"/>` +\n `</c:dLbls>`;\n }\n\n #buildAxesXml(): string {\n const fam = this.#family;\n if (fam.seriesKind !== 'category') {\n // XY (scatter / bubble): both axes are value axes.\n return this.#buildValAx(CAT_AX_ID, 'b', VAL_AX_ID, this.#categoryAxis, {}) +\n this.#buildValAx(VAL_AX_ID, 'l', CAT_AX_ID, this.#valueAxis, {});\n }\n\n let out =\n this.#buildCatAx(CAT_AX_ID, fam.catAxPos, VAL_AX_ID, this.#categoryAxis, {}) +\n this.#buildValAx(VAL_AX_ID, fam.valAxPos, CAT_AX_ID, this.#valueAxis, { crossBetween: 'between' });\n\n if (this.#hasSecondary()) {\n out +=\n this.#buildValAx(SEC_VAL_AX_ID, 'r', SEC_CAT_AX_ID, this.#secondaryValueAxis, { crossBetween: 'between', crosses: 'max' }) +\n this.#buildCatAx(SEC_CAT_AX_ID, fam.catAxPos, SEC_VAL_AX_ID, {}, { deleted: true });\n }\n return out;\n }\n\n #buildCatAx(id: number, pos: 'b' | 'l', crossId: number, cfg: ChartAxisConfig, opts: { deleted?: boolean }): string {\n const title = cfg.title ? this.#buildTitleXml(cfg.title) : '';\n const numFmt = cfg.numberFormat ? `<c:numFmt formatCode=\"${escapeXml(cfg.numberFormat)}\" sourceLinked=\"0\"/>` : '';\n return `<c:catAx>` +\n `<c:axId val=\"${id}\"/>` +\n `<c:scaling><c:orientation val=\"minMax\"/></c:scaling>` +\n `<c:delete val=\"${opts.deleted ? 1 : 0}\"/>` +\n `<c:axPos val=\"${pos}\"/>` +\n title + numFmt +\n `<c:majorTickMark val=\"out\"/><c:minorTickMark val=\"none\"/><c:tickLblPos val=\"nextTo\"/>` +\n `<c:crossAx val=\"${crossId}\"/><c:crosses val=\"autoZero\"/>` +\n `<c:auto val=\"1\"/><c:lblAlgn val=\"ctr\"/><c:lblOffset val=\"100\"/><c:noMultiLvlLbl val=\"0\"/>` +\n `</c:catAx>`;\n }\n\n #buildValAx(id: number, pos: 'b' | 'l' | 'r', crossId: number, cfg: ChartAxisConfig, opts: { crossBetween?: string; crosses?: string }): string {\n const grid = cfg.majorGridlines ? `<c:majorGridlines/>` : '';\n const title = cfg.title ? this.#buildTitleXml(cfg.title) : '';\n const numFmt = cfg.numberFormat ? `<c:numFmt formatCode=\"${escapeXml(cfg.numberFormat)}\" sourceLinked=\"0\"/>` : '';\n const scaling = `<c:scaling><c:orientation val=\"minMax\"/>` +\n `${cfg.max !== undefined ? `<c:max val=\"${cfg.max}\"/>` : ''}` +\n `${cfg.min !== undefined ? `<c:min val=\"${cfg.min}\"/>` : ''}` +\n `</c:scaling>`;\n const cb = opts.crossBetween ? `<c:crossBetween val=\"${opts.crossBetween}\"/>` : '';\n return `<c:valAx>` +\n `<c:axId val=\"${id}\"/>` +\n scaling +\n `<c:delete val=\"0\"/>` +\n `<c:axPos val=\"${pos}\"/>` +\n grid + title + numFmt +\n `<c:majorTickMark val=\"out\"/><c:minorTickMark val=\"none\"/><c:tickLblPos val=\"nextTo\"/>` +\n `<c:crossAx val=\"${crossId}\"/><c:crosses val=\"${opts.crosses ?? 'autoZero'}\"/>` + cb +\n `</c:valAx>`;\n }\n\n #buildTitleXml(text: string): string {\n return `<c:title><c:tx><c:rich>` +\n `<a:bodyPr rot=\"0\" spcFirstLastPara=\"1\" vertOverflow=\"ellipsis\" vert=\"horz\" wrap=\"square\" anchor=\"ctr\" anchorCtr=\"1\"/>` +\n `<a:lstStyle/>` +\n `<a:p><a:r><a:t>${escapeXml(text)}</a:t></a:r></a:p>` +\n `</c:rich></c:tx><c:overlay val=\"0\"/></c:title>`;\n }\n}\n"]}
|