@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.
- package/dist/cjs/excel-parser/plugins/xlsx/charts.d.ts.map +1 -1
- package/dist/cjs/excel-parser/plugins/xlsx/charts.js +33 -7
- package/dist/cjs/exporter/xlsx/chart-builder.d.ts.map +1 -1
- package/dist/cjs/exporter/xlsx/chart-builder.js +65 -11
- package/dist/esm/excel-parser/plugins/xlsx/charts.d.ts.map +1 -1
- package/dist/esm/excel-parser/plugins/xlsx/charts.js +35 -1
- package/dist/esm/exporter/xlsx/chart-builder.d.ts.map +1 -1
- package/dist/esm/exporter/xlsx/chart-builder.js +37 -4
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"charts.d.ts","sourceRoot":"","sources":["../../../../../excel-parser/plugins/xlsx/charts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,SAAS,EAGT,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,gBAAgB,EAEhB,UAAU,EACV,UAAU,EACX,MAAM,2BAA2B,CAAC;AAKnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAGrE;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,GAAG,SAAS,CAAC;AAkDnF,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,GAAG,EACX,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,kBAAkB,EAC7B,SAAS,EAAE,GAAG,EACd,eAAe,CAAC,EAAE,eAAe,EACjC,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,
|
|
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((
|
|
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 = (
|
|
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,
|
|
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
|
-
|
|
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"] = {
|
|
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"] = {
|
|
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
|
-
|
|
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
|
|
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 (
|
|
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 (
|
|
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
|
|
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 (
|
|
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 (
|
|
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":"AAAA,OAAO,KAAK,EAEV,SAAS,EAGT,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,gBAAgB,EAEhB,UAAU,EACV,UAAU,EACX,MAAM,2BAA2B,CAAC;AAKnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAGrE;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,GAAG,SAAS,CAAC;AAkDnF,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,GAAG,EACX,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,kBAAkB,EAC7B,SAAS,EAAE,GAAG,EACd,eAAe,CAAC,EAAE,eAAe,EACjC,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,
|
|
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,
|
|
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
|
-
|
|
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"] = {
|
|
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"] = {
|
|
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
|
-
|
|
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) => {
|