@rowsncolumns/toolkit 24.5.9 → 24.5.11

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.
@@ -1 +1 @@
1
- {"version":3,"file":"charts.d.ts","sourceRoot":"","sources":["../../../../../excel-parser/plugins/xlsx/charts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"charts.d.ts","sourceRoot":"","sources":["../../../../../excel-parser/plugins/xlsx/charts.ts"],"names":[],"mappings":"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"}
@@ -52,7 +52,7 @@ function toInt(value) {
52
52
  }
53
53
  export function processChart(chartTarget, drawingPath, anchor, sheetId, zipParser, xmlParser, sheetDimensions, resolveSheetId) {
54
54
  return __awaiter(this, void 0, void 0, function () {
55
- var chartPath, drawingDir, chartContent, chartXml, chart, chartSpaceRoot, roundedCornersRaw, roundedCornersVal, roundedCorners, chartStyle, pivotSourceName, pivotSourceFormatId, pivotFormats, pivotFieldButtons, chartSpacePr, chartAreaFill, chartAreaBorder, chartId, title, titleTextFormat, chartType, plotArea, series, domains, dataRange, bubbleSizes, scatterStyle, hiddenDimensionStrategy, emptyCells, showNaAsEmpty, position, legend, dataLabels, _a, valueAxisOptions, secondaryValueAxisOptions, categoryAxisOptions, doughnutHoleSize, explosion, ofPieOptions, threeDSourceChartType, radarStyle, binCount, barLayout, lineLayout, stockVariant, err_1;
55
+ var chartPath, drawingDir, chartContent, chartXml, chart, chartSpaceRoot, roundedCornersRaw, roundedCornersVal, roundedCorners, chartStyle, pivotSourceName, pivotSourceFormatId, pivotFormats, pivotFieldButtons, chartSpacePr, chartAreaFill, chartAreaBorder, chartId, title, titleTextFormat, chartType, plotArea, series, domains, dataRange, bubbleSizes, scatterStyle, bubbleSizing, hiddenDimensionStrategy, emptyCells, showNaAsEmpty, position, legend, dataLabels, _a, valueAxisOptions, secondaryValueAxisOptions, categoryAxisOptions, doughnutHoleSize, explosion, ofPieOptions, threeDSourceChartType, radarStyle, binCount, barLayout, lineLayout, stockVariant, err_1;
56
56
  var _b, _c;
57
57
  var _d, _e, _f, _g;
58
58
  return __generator(this, function (_h) {
@@ -121,6 +121,7 @@ export function processChart(chartTarget, drawingPath, anchor, sheetId, zipParse
121
121
  ? extractChartBubbleSizes(plotArea, sheetId, resolveSheetId)
122
122
  : undefined;
123
123
  scatterStyle = chartType === "scatter" ? extractScatterStyle(plotArea) : undefined;
124
+ bubbleSizing = chartType === "bubble" ? extractBubbleSizing(plotArea) : undefined;
124
125
  hiddenDimensionStrategy = extractHiddenDimensionStrategy(chart);
125
126
  emptyCells = extractEmptyCellsPolicy(chart);
126
127
  showNaAsEmpty = extractShowNaAsEmpty(chart);
@@ -147,11 +148,11 @@ export function processChart(chartTarget, drawingPath, anchor, sheetId, zipParse
147
148
  : undefined;
148
149
  lineLayout = chartType === "line" ? extractLineChartOptions(plotArea, series) : undefined;
149
150
  stockVariant = chartType === "stock" ? extractStockVariant(plotArea) : undefined;
150
- return [2 /*return*/, __assign(__assign({ chartId: chartId, spec: __assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign({ title: title }, (titleTextFormat ? { titleTextFormat: titleTextFormat } : {})), { chartType: chartType, domains: domains, series: series, dataRange: dataRange, hiddenDimensionStrategy: hiddenDimensionStrategy }), (emptyCells && emptyCells !== "gaps" ? { emptyCells: emptyCells } : {})), (showNaAsEmpty === false ? { showNaAsEmpty: showNaAsEmpty } : {})), (chartType === "scatter" || chartType === "bubble"
151
- ? { bubbleLabels: [] }
151
+ return [2 /*return*/, __assign(__assign({ chartId: chartId, spec: __assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign({ title: title }, (titleTextFormat ? { titleTextFormat: titleTextFormat } : {})), { chartType: chartType, domains: domains, series: series, dataRange: dataRange, hiddenDimensionStrategy: hiddenDimensionStrategy }), (emptyCells && emptyCells !== "gaps" ? { emptyCells: emptyCells } : {})), (showNaAsEmpty === false ? { showNaAsEmpty: showNaAsEmpty } : {})), (chartType === "scatter" || chartType === "bubble"
152
+ ? { bubbleLabels: [], useFirstRowAsHeaders: false }
152
153
  : {})), (bubbleSizes && bubbleSizes.length ? { bubbleSizes: bubbleSizes } : {})), (scatterStyle
153
154
  ? { scatterStyle: scatterStyle }
154
- : {})), (legend ? { legend: legend } : {})), (dataLabels ? { dataLabels: dataLabels } : {})), (valueAxisOptions ? { valueAxisOptions: valueAxisOptions } : {})), (secondaryValueAxisOptions
155
+ : {})), (bubbleSizing !== null && bubbleSizing !== void 0 ? bubbleSizing : {})), (legend ? { legend: legend } : {})), (dataLabels ? { dataLabels: dataLabels } : {})), (valueAxisOptions ? { valueAxisOptions: valueAxisOptions } : {})), (secondaryValueAxisOptions
155
156
  ? { secondaryValueAxisOptions: secondaryValueAxisOptions }
156
157
  : {})), (categoryAxisOptions ? { categoryAxisOptions: categoryAxisOptions } : {})), (typeof doughnutHoleSize === "number"
157
158
  ? { doughnutHoleSize: doughnutHoleSize }
@@ -2021,6 +2022,24 @@ function extractScatterStyle(plotArea) {
2021
2022
  var val = (_c = (_b = (_a = get(plotArea, "c:scatterChart.c:scatterStyle.a$.val")) !== null && _a !== void 0 ? _a : get(plotArea, "scatterChart.scatterStyle.a$.val")) !== null && _b !== void 0 ? _b : get(plotArea, "c:scatterChart.c:scatterStyle.a$.t$")) !== null && _c !== void 0 ? _c : get(plotArea, "scatterChart.scatterStyle.a$.t$");
2022
2023
  return typeof val === "string" && val ? val : undefined;
2023
2024
  }
2025
+ /**
2026
+ * Bubble-chart sizing: `<c:bubbleScale val="0..300">` and
2027
+ * `<c:sizeRepresents val="area|w">` under `<c:bubbleChart>`. Only the
2028
+ * non-default values are recorded (Excel's defaults are 100 and area).
2029
+ */
2030
+ function extractBubbleSizing(plotArea) {
2031
+ var _a, _b;
2032
+ var result = {};
2033
+ var scale = Number((_a = get(plotArea, "c:bubbleChart.c:bubbleScale.a$.val")) !== null && _a !== void 0 ? _a : get(plotArea, "bubbleChart.bubbleScale.a$.val"));
2034
+ if (Number.isFinite(scale) && scale !== 100) {
2035
+ result.bubbleScale = scale;
2036
+ }
2037
+ var represents = (_b = get(plotArea, "c:bubbleChart.c:sizeRepresents.a$.val")) !== null && _b !== void 0 ? _b : get(plotArea, "bubbleChart.sizeRepresents.a$.val");
2038
+ if (represents === "w") {
2039
+ result.sizeRepresents = "width";
2040
+ }
2041
+ return Object.keys(result).length ? result : undefined;
2042
+ }
2024
2043
  function extractSeriesTitleFromSeries(ser) {
2025
2044
  var e_25, _a;
2026
2045
  // Prefer cached textual value if present
@@ -2729,6 +2748,8 @@ function extractDataLabelsOptions(plotArea, chartType) {
2729
2748
  ],
2730
2749
  doughnut: ["c:doughnutChart", "doughnutChart"],
2731
2750
  area: ["c:areaChart", "areaChart", "c:area3DChart", "area3DChart"],
2751
+ scatter: ["c:scatterChart", "scatterChart"],
2752
+ bubble: ["c:bubbleChart", "bubbleChart"],
2732
2753
  };
2733
2754
  var keys = (_b = containerKeys[chartType]) !== null && _b !== void 0 ? _b : [];
2734
2755
  var container;
@@ -2768,7 +2789,7 @@ function extractSeriesDataLabels(ser) {
2768
2789
  }
2769
2790
  /** The `ChartDataLabelsOptions` a `<c:dLbls>` node describes. */
2770
2791
  function readDataLabelsNode(dLbls) {
2771
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
2792
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
2772
2793
  var result = {};
2773
2794
  var pos = (_a = get(dLbls, "c:dLblPos.a$.val")) !== null && _a !== void 0 ? _a : get(dLbls, "dLblPos.a$.val");
2774
2795
  var position = mapDataLabelPosition(pos);
@@ -2794,18 +2815,23 @@ function readDataLabelsNode(dLbls) {
2794
2815
  result.show = true;
2795
2816
  result.showSeriesName = true;
2796
2817
  }
2818
+ var showBubbleSize = readBoolean((_f = get(dLbls, "c:showBubbleSize.a$.val")) !== null && _f !== void 0 ? _f : get(dLbls, "showBubbleSize.a$.val"));
2819
+ if (showBubbleSize) {
2820
+ result.show = true;
2821
+ result.showBubbleSize = true;
2822
+ }
2797
2823
  // If only `position` was set with no `show*` flags, treat as "show".
2798
2824
  if (position && result.show === undefined)
2799
2825
  result.show = true;
2800
2826
  // <c:txPr> on the dLbls block — affects every label in the chart.
2801
- var textFormat = extractTextProperties((_f = get(dLbls, "c:txPr")) !== null && _f !== void 0 ? _f : get(dLbls, "txPr"));
2827
+ var textFormat = extractTextProperties((_g = get(dLbls, "c:txPr")) !== null && _g !== void 0 ? _g : get(dLbls, "txPr"));
2802
2828
  if (textFormat)
2803
2829
  result.textFormat = textFormat;
2804
2830
  // <c:numFmt formatCode="…"/> — Excel uses this to render labels as
2805
2831
  // currency / percent / etc. (`"$"#,##0`, `0.00%`). Without parsing
2806
2832
  // this, the renderer falls back to raw numbers (e.g. `1831` instead
2807
2833
  // of `$1,831`).
2808
- var numFmt = (_j = (_h = (_g = get(dLbls, "c:numFmt.a$.formatCode")) !== null && _g !== void 0 ? _g : get(dLbls, "numFmt.a$.formatCode")) !== null && _h !== void 0 ? _h : get(dLbls, "c:numFmt.a$.t$")) !== null && _j !== void 0 ? _j : get(dLbls, "numFmt.a$.t$");
2834
+ var numFmt = (_k = (_j = (_h = get(dLbls, "c:numFmt.a$.formatCode")) !== null && _h !== void 0 ? _h : get(dLbls, "numFmt.a$.formatCode")) !== null && _j !== void 0 ? _j : get(dLbls, "c:numFmt.a$.t$")) !== null && _k !== void 0 ? _k : get(dLbls, "numFmt.a$.t$");
2809
2835
  if (typeof numFmt === "string" && numFmt) {
2810
2836
  result.numberFormatPattern = numFmt;
2811
2837
  }
@@ -1 +1 @@
1
- {"version":3,"file":"chart-builder.d.ts","sourceRoot":"","sources":["../../../../exporter/xlsx/chart-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,aAAa,EAEd,MAAM,2BAA2B,CAAC;AAi4CnC;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,CACnC,YAAY,EAAE,MAAM,GAAG,MAAM,KAC1B,MAAM,GAAG,SAAS,CAAC;AAExB,eAAO,MAAM,aAAa,GACxB,OAAO,aAAa,EACpB,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,yBAAyB,sBAAsB,KAC9C,MAAM,GAAG,SAwqBX,CAAC"}
1
+ {"version":3,"file":"chart-builder.d.ts","sourceRoot":"","sources":["../../../../exporter/xlsx/chart-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,aAAa,EAEd,MAAM,2BAA2B,CAAC;AAi4CnC;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,CACnC,YAAY,EAAE,MAAM,GAAG,MAAM,KAC1B,MAAM,GAAG,SAAS,CAAC;AAExB,eAAO,MAAM,aAAa,GACxB,OAAO,aAAa,EACpB,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,yBAAyB,sBAAsB,KAC9C,MAAM,GAAG,SAqrBX,CAAC"}
@@ -1723,9 +1723,20 @@ export var buildChartXml = function (input, sheetNameById, resolvePivotSourceNam
1723
1723
  var scatterChart = plotArea["c:scatterChart"];
1724
1724
  if (chartType === "bubble") {
1725
1725
  removeProp(scatterChart, "c:scatterStyle");
1726
- scatterChart["c:bubbleScale"] = { a$: { val: "100" } };
1726
+ // `bubbleScale` / `sizeRepresents` round-trip from the spec; Excel's
1727
+ // defaults (100 / area) fill in when the spec is silent.
1728
+ var bubbleScale = chart.spec.bubbleScale;
1729
+ scatterChart["c:bubbleScale"] = {
1730
+ a$: {
1731
+ val: String(typeof bubbleScale === "number" && Number.isFinite(bubbleScale)
1732
+ ? Math.min(300, Math.max(0, Math.round(bubbleScale)))
1733
+ : 100),
1734
+ },
1735
+ };
1727
1736
  scatterChart["c:showNegBubbles"] = { a$: { val: "0" } };
1728
- scatterChart["c:sizeRepresents"] = { a$: { val: "area" } };
1737
+ scatterChart["c:sizeRepresents"] = {
1738
+ a$: { val: chart.spec.sizeRepresents === "width" ? "w" : "area" },
1739
+ };
1729
1740
  replacePlotAreaChartGroups(plotArea, [["c:bubbleChart", scatterChart]], "c:scatterChart");
1730
1741
  }
1731
1742
  else {
@@ -2763,11 +2774,13 @@ var buildDataLabelsNode = function (dataLabels) {
2763
2774
  dLbls["c:showPercent"] = {
2764
2775
  a$: { val: dataLabels.showPercent ? "1" : "0" },
2765
2776
  };
2766
- dLbls["c:showBubbleSize"] = { a$: { val: "0" } };
2777
+ dLbls["c:showBubbleSize"] = {
2778
+ a$: { val: dataLabels.showBubbleSize ? "1" : "0" },
2779
+ };
2767
2780
  return dLbls;
2768
2781
  };
2769
2782
  var applyDataLabels = function (plotArea, dataLabels) {
2770
- var e_27, _a;
2783
+ var e_27, _a, e_28, _b, e_29, _c;
2771
2784
  if (!(dataLabels === null || dataLabels === void 0 ? void 0 : dataLabels.show))
2772
2785
  return;
2773
2786
  // Find the chart-type container inside <c:plotArea>. We attach <c:dLbls>
@@ -2780,6 +2793,8 @@ var applyDataLabels = function (plotArea, dataLabels) {
2780
2793
  "c:pieChart",
2781
2794
  "c:doughnutChart",
2782
2795
  "c:areaChart",
2796
+ "c:scatterChart",
2797
+ "c:bubbleChart",
2783
2798
  ]
2784
2799
  .flatMap(function (k) { return (Array.isArray(plotArea[k]) ? plotArea[k] : [plotArea[k]]); })
2785
2800
  .filter(Boolean);
@@ -2789,7 +2804,46 @@ var applyDataLabels = function (plotArea, dataLabels) {
2789
2804
  try {
2790
2805
  for (var containers_1 = __values(containers), containers_1_1 = containers_1.next(); !containers_1_1.done; containers_1_1 = containers_1.next()) {
2791
2806
  var container = containers_1_1.value;
2792
- container["c:dLbls"] = cloneTemplate(dLbls);
2807
+ // Every chart group's schema puts <c:dLbls> right after its series
2808
+ // (before gapWidth / bubbleScale / axId …): splice it in there so the
2809
+ // serialised child order stays valid.
2810
+ var next = {};
2811
+ var placed = false;
2812
+ try {
2813
+ for (var _d = (e_28 = void 0, __values(Object.entries(container))), _e = _d.next(); !_e.done; _e = _d.next()) {
2814
+ var _f = __read(_e.value, 2), key = _f[0], value = _f[1];
2815
+ if (key === "c:dLbls")
2816
+ continue;
2817
+ next[key] = value;
2818
+ if (key === "c:ser") {
2819
+ next["c:dLbls"] = cloneTemplate(dLbls);
2820
+ placed = true;
2821
+ }
2822
+ }
2823
+ }
2824
+ catch (e_28_1) { e_28 = { error: e_28_1 }; }
2825
+ finally {
2826
+ try {
2827
+ if (_e && !_e.done && (_b = _d.return)) _b.call(_d);
2828
+ }
2829
+ finally { if (e_28) throw e_28.error; }
2830
+ }
2831
+ if (!placed)
2832
+ next["c:dLbls"] = cloneTemplate(dLbls);
2833
+ try {
2834
+ for (var _g = (e_29 = void 0, __values(Object.keys(container))), _h = _g.next(); !_h.done; _h = _g.next()) {
2835
+ var key = _h.value;
2836
+ delete container[key];
2837
+ }
2838
+ }
2839
+ catch (e_29_1) { e_29 = { error: e_29_1 }; }
2840
+ finally {
2841
+ try {
2842
+ if (_h && !_h.done && (_c = _g.return)) _c.call(_g);
2843
+ }
2844
+ finally { if (e_29) throw e_29.error; }
2845
+ }
2846
+ Object.assign(container, next);
2793
2847
  }
2794
2848
  }
2795
2849
  catch (e_27_1) { e_27 = { error: e_27_1 }; }
@@ -2871,7 +2925,7 @@ var applyExplosion = function (plotArea, explosion) {
2871
2925
  : [];
2872
2926
  var explosionNode = { a$: { val: String(Math.round(explosion)) } };
2873
2927
  var rebuiltSers = sers.map(function (ser) {
2874
- var e_28, _a;
2928
+ var e_30, _a;
2875
2929
  var rebuilt = {};
2876
2930
  var placed = false;
2877
2931
  try {
@@ -2886,12 +2940,12 @@ var applyExplosion = function (plotArea, explosion) {
2886
2940
  rebuilt[key] = value;
2887
2941
  }
2888
2942
  }
2889
- catch (e_28_1) { e_28 = { error: e_28_1 }; }
2943
+ catch (e_30_1) { e_30 = { error: e_30_1 }; }
2890
2944
  finally {
2891
2945
  try {
2892
2946
  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
2893
2947
  }
2894
- finally { if (e_28) throw e_28.error; }
2948
+ finally { if (e_30) throw e_30.error; }
2895
2949
  }
2896
2950
  if (!placed)
2897
2951
  rebuilt["c:explosion"] = explosionNode;
@@ -2943,7 +2997,7 @@ var applySliceColors = function (plotArea, spec) {
2943
2997
  var palette = spec === null || spec === void 0 ? void 0 : spec.palette;
2944
2998
  var series = ((_b = spec === null || spec === void 0 ? void 0 : spec.series) !== null && _b !== void 0 ? _b : []);
2945
2999
  var rebuiltSers = sers.map(function (ser, index) {
2946
- var e_29, _a;
3000
+ var e_31, _a;
2947
3001
  var _b;
2948
3002
  var entry = series[index];
2949
3003
  var authored = entry === null || entry === void 0 ? void 0 : entry.dataPointColors;
@@ -2967,12 +3021,12 @@ var applySliceColors = function (plotArea, spec) {
2967
3021
  rebuilt[key] = value;
2968
3022
  }
2969
3023
  }
2970
- catch (e_29_1) { e_29 = { error: e_29_1 }; }
3024
+ catch (e_31_1) { e_31 = { error: e_31_1 }; }
2971
3025
  finally {
2972
3026
  try {
2973
3027
  if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
2974
3028
  }
2975
- finally { if (e_29) throw e_29.error; }
3029
+ finally { if (e_31) throw e_31.error; }
2976
3030
  }
2977
3031
  if (dPtNodes && !placed)
2978
3032
  rebuilt["c:dPt"] = dPtNodes;
@@ -1 +1 @@
1
- {"version":3,"file":"charts.d.ts","sourceRoot":"","sources":["../../../../../excel-parser/plugins/xlsx/charts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"charts.d.ts","sourceRoot":"","sources":["../../../../../excel-parser/plugins/xlsx/charts.ts"],"names":[],"mappings":"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"}
@@ -126,6 +126,10 @@ export async function processChart(chartTarget, drawingPath, anchor, sheetId, zi
126
126
  // whether points are connected and whether markers are drawn.
127
127
  // Excel's default when omitted is "lineMarker".
128
128
  const scatterStyle = chartType === "scatter" ? extractScatterStyle(plotArea) : undefined;
129
+ // Bubble only — `<c:bubbleScale>` (percent of the default size) and
130
+ // `<c:sizeRepresents val="area|w">`; Excel's defaults (100 / area) are
131
+ // left implicit.
132
+ const bubbleSizing = chartType === "bubble" ? extractBubbleSizing(plotArea) : undefined;
129
133
  // Extract hidden dimension strategy from plotVisOnly
130
134
  const hiddenDimensionStrategy = extractHiddenDimensionStrategy(chart);
131
135
  // "Hidden and Empty Cells": only the non-default choices are recorded
@@ -187,13 +191,16 @@ export async function processChart(chartTarget, drawingPath, anchor, sheetId, zi
187
191
  // from OOXML (rare in real files); set an empty array so the
188
192
  // renderer's `flattenChartDataValues(spec.bubbleLabels, …)`
189
193
  // call gets a well-formed input.
194
+ // XY refs are data rows only (the series name is `<c:tx>`), so the
195
+ // renderer must not drop the first row as a header.
190
196
  ...(chartType === "scatter" || chartType === "bubble"
191
- ? { bubbleLabels: [] }
197
+ ? { bubbleLabels: [], useFirstRowAsHeaders: false }
192
198
  : {}),
193
199
  ...(bubbleSizes && bubbleSizes.length ? { bubbleSizes } : {}),
194
200
  ...(scatterStyle
195
201
  ? { scatterStyle: scatterStyle }
196
202
  : {}),
203
+ ...(bubbleSizing ?? {}),
197
204
  ...(legend ? { legend } : {}),
198
205
  ...(dataLabels ? { dataLabels } : {}),
199
206
  ...(valueAxisOptions ? { valueAxisOptions } : {}),
@@ -1903,6 +1910,25 @@ function extractScatterStyle(plotArea) {
1903
1910
  get(plotArea, "scatterChart.scatterStyle.a$.t$");
1904
1911
  return typeof val === "string" && val ? val : undefined;
1905
1912
  }
1913
+ /**
1914
+ * Bubble-chart sizing: `<c:bubbleScale val="0..300">` and
1915
+ * `<c:sizeRepresents val="area|w">` under `<c:bubbleChart>`. Only the
1916
+ * non-default values are recorded (Excel's defaults are 100 and area).
1917
+ */
1918
+ function extractBubbleSizing(plotArea) {
1919
+ const result = {};
1920
+ const scale = Number(get(plotArea, "c:bubbleChart.c:bubbleScale.a$.val") ??
1921
+ get(plotArea, "bubbleChart.bubbleScale.a$.val"));
1922
+ if (Number.isFinite(scale) && scale !== 100) {
1923
+ result.bubbleScale = scale;
1924
+ }
1925
+ const represents = get(plotArea, "c:bubbleChart.c:sizeRepresents.a$.val") ??
1926
+ get(plotArea, "bubbleChart.sizeRepresents.a$.val");
1927
+ if (represents === "w") {
1928
+ result.sizeRepresents = "width";
1929
+ }
1930
+ return Object.keys(result).length ? result : undefined;
1931
+ }
1906
1932
  function extractSeriesTitleFromSeries(ser) {
1907
1933
  // Prefer cached textual value if present
1908
1934
  const cacheEntries = get(ser, "c:tx.c:strRef.c:strCache.c:pt");
@@ -2510,6 +2536,8 @@ function extractDataLabelsOptions(plotArea, chartType) {
2510
2536
  ],
2511
2537
  doughnut: ["c:doughnutChart", "doughnutChart"],
2512
2538
  area: ["c:areaChart", "areaChart", "c:area3DChart", "area3DChart"],
2539
+ scatter: ["c:scatterChart", "scatterChart"],
2540
+ bubble: ["c:bubbleChart", "bubbleChart"],
2513
2541
  };
2514
2542
  const keys = containerKeys[chartType] ?? [];
2515
2543
  let container;
@@ -2566,6 +2594,12 @@ function readDataLabelsNode(dLbls) {
2566
2594
  result.show = true;
2567
2595
  result.showSeriesName = true;
2568
2596
  }
2597
+ const showBubbleSize = readBoolean(get(dLbls, "c:showBubbleSize.a$.val") ??
2598
+ get(dLbls, "showBubbleSize.a$.val"));
2599
+ if (showBubbleSize) {
2600
+ result.show = true;
2601
+ result.showBubbleSize = true;
2602
+ }
2569
2603
  // If only `position` was set with no `show*` flags, treat as "show".
2570
2604
  if (position && result.show === undefined)
2571
2605
  result.show = true;
@@ -1 +1 @@
1
- {"version":3,"file":"chart-builder.d.ts","sourceRoot":"","sources":["../../../../exporter/xlsx/chart-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,aAAa,EAEd,MAAM,2BAA2B,CAAC;AAi4CnC;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,CACnC,YAAY,EAAE,MAAM,GAAG,MAAM,KAC1B,MAAM,GAAG,SAAS,CAAC;AAExB,eAAO,MAAM,aAAa,GACxB,OAAO,aAAa,EACpB,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,yBAAyB,sBAAsB,KAC9C,MAAM,GAAG,SAwqBX,CAAC"}
1
+ {"version":3,"file":"chart-builder.d.ts","sourceRoot":"","sources":["../../../../exporter/xlsx/chart-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,aAAa,EAEd,MAAM,2BAA2B,CAAC;AAi4CnC;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,CACnC,YAAY,EAAE,MAAM,GAAG,MAAM,KAC1B,MAAM,GAAG,SAAS,CAAC;AAExB,eAAO,MAAM,aAAa,GACxB,OAAO,aAAa,EACpB,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,yBAAyB,sBAAsB,KAC9C,MAAM,GAAG,SAqrBX,CAAC"}
@@ -1594,9 +1594,20 @@ export const buildChartXml = (input, sheetNameById, resolvePivotSourceName) => {
1594
1594
  const scatterChart = plotArea["c:scatterChart"];
1595
1595
  if (chartType === "bubble") {
1596
1596
  removeProp(scatterChart, "c:scatterStyle");
1597
- scatterChart["c:bubbleScale"] = { a$: { val: "100" } };
1597
+ // `bubbleScale` / `sizeRepresents` round-trip from the spec; Excel's
1598
+ // defaults (100 / area) fill in when the spec is silent.
1599
+ const bubbleScale = chart.spec.bubbleScale;
1600
+ scatterChart["c:bubbleScale"] = {
1601
+ a$: {
1602
+ val: String(typeof bubbleScale === "number" && Number.isFinite(bubbleScale)
1603
+ ? Math.min(300, Math.max(0, Math.round(bubbleScale)))
1604
+ : 100),
1605
+ },
1606
+ };
1598
1607
  scatterChart["c:showNegBubbles"] = { a$: { val: "0" } };
1599
- scatterChart["c:sizeRepresents"] = { a$: { val: "area" } };
1608
+ scatterChart["c:sizeRepresents"] = {
1609
+ a$: { val: chart.spec.sizeRepresents === "width" ? "w" : "area" },
1610
+ };
1600
1611
  replacePlotAreaChartGroups(plotArea, [["c:bubbleChart", scatterChart]], "c:scatterChart");
1601
1612
  }
1602
1613
  else {
@@ -2462,7 +2473,9 @@ const buildDataLabelsNode = (dataLabels) => {
2462
2473
  dLbls["c:showPercent"] = {
2463
2474
  a$: { val: dataLabels.showPercent ? "1" : "0" },
2464
2475
  };
2465
- dLbls["c:showBubbleSize"] = { a$: { val: "0" } };
2476
+ dLbls["c:showBubbleSize"] = {
2477
+ a$: { val: dataLabels.showBubbleSize ? "1" : "0" },
2478
+ };
2466
2479
  return dLbls;
2467
2480
  };
2468
2481
  const applyDataLabels = (plotArea, dataLabels) => {
@@ -2478,6 +2491,8 @@ const applyDataLabels = (plotArea, dataLabels) => {
2478
2491
  "c:pieChart",
2479
2492
  "c:doughnutChart",
2480
2493
  "c:areaChart",
2494
+ "c:scatterChart",
2495
+ "c:bubbleChart",
2481
2496
  ]
2482
2497
  .flatMap((k) => (Array.isArray(plotArea[k]) ? plotArea[k] : [plotArea[k]]))
2483
2498
  .filter(Boolean);
@@ -2485,7 +2500,25 @@ const applyDataLabels = (plotArea, dataLabels) => {
2485
2500
  return;
2486
2501
  const dLbls = buildDataLabelsNode(dataLabels);
2487
2502
  for (const container of containers) {
2488
- container["c:dLbls"] = cloneTemplate(dLbls);
2503
+ // Every chart group's schema puts <c:dLbls> right after its series
2504
+ // (before gapWidth / bubbleScale / axId …): splice it in there so the
2505
+ // serialised child order stays valid.
2506
+ const next = {};
2507
+ let placed = false;
2508
+ for (const [key, value] of Object.entries(container)) {
2509
+ if (key === "c:dLbls")
2510
+ continue;
2511
+ next[key] = value;
2512
+ if (key === "c:ser") {
2513
+ next["c:dLbls"] = cloneTemplate(dLbls);
2514
+ placed = true;
2515
+ }
2516
+ }
2517
+ if (!placed)
2518
+ next["c:dLbls"] = cloneTemplate(dLbls);
2519
+ for (const key of Object.keys(container))
2520
+ delete container[key];
2521
+ Object.assign(container, next);
2489
2522
  }
2490
2523
  };
2491
2524
  const applyAxisOptions = (plotArea, options, kind) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rowsncolumns/toolkit",
3
- "version": "24.5.9",
3
+ "version": "24.5.11",
4
4
  "author": "Vinay M",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "main": "./dist/cjs/index.js",