@extend-ai/react-xlsx 0.20.3 → 0.20.5
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/{browser-B73UAN6E.cjs → browser-6MKX73CJ.cjs} +8 -28
- package/dist/browser-6MKX73CJ.cjs.map +1 -0
- package/dist/{browser-KWIEUO2X.js → browser-KJ6EVWLG.js} +8 -27
- package/dist/{browser-KWIEUO2X.js.map → browser-KJ6EVWLG.js.map} +1 -1
- package/dist/{chart-renderer-XBF7EPUS.js → chart-renderer-2BLFC2BD.js} +94 -180
- package/dist/chart-renderer-2BLFC2BD.js.map +1 -0
- package/dist/{chart-renderer-W7XW24JI.cjs → chart-renderer-2K7XSPVG.cjs} +321 -407
- package/dist/chart-renderer-2K7XSPVG.cjs.map +1 -0
- package/dist/{chart-renderer-2EKXNHUD.cjs → chart-renderer-2UJZRUSN.cjs} +324 -410
- package/dist/chart-renderer-2UJZRUSN.cjs.map +1 -0
- package/dist/{chart-renderer-ZLJVPLGN.js → chart-renderer-IYKCQENY.js} +86 -172
- package/dist/chart-renderer-IYKCQENY.js.map +1 -0
- package/dist/{chunk-WGRRI25I.cjs → chunk-5PBSOOA7.cjs} +22 -9
- package/dist/chunk-5PBSOOA7.cjs.map +1 -0
- package/dist/{chunk-VG4JELEQ.js → chunk-BFSDKYQU.js} +30 -15
- package/dist/chunk-BFSDKYQU.js.map +1 -0
- package/dist/chunk-IN7OU5PF.js +32 -0
- package/dist/chunk-IN7OU5PF.js.map +1 -0
- package/dist/{chunk-HKMFMIKE.js → chunk-KSXNNWAY.js} +16 -7
- package/dist/chunk-KSXNNWAY.js.map +1 -0
- package/dist/chunk-LY4EWUKF.js +22 -0
- package/dist/chunk-LY4EWUKF.js.map +1 -0
- package/dist/chunk-N6MMMGLF.cjs +32 -0
- package/dist/chunk-N6MMMGLF.cjs.map +1 -0
- package/dist/{chunk-HEEFCVWS.js → chunk-R5ERJ3BT.js} +404 -149
- package/dist/chunk-R5ERJ3BT.js.map +1 -0
- package/dist/chunk-RN27VSTN.cjs +108 -0
- package/dist/chunk-RN27VSTN.cjs.map +1 -0
- package/dist/{chunk-XISBYOD5.cjs → chunk-YPTGD7GK.cjs} +1172 -917
- package/dist/chunk-YPTGD7GK.cjs.map +1 -0
- package/dist/chunk-ZAUUKER4.cjs +22 -0
- package/dist/chunk-ZAUUKER4.cjs.map +1 -0
- package/dist/full-C7H4X2EX.cjs +212 -0
- package/dist/full-C7H4X2EX.cjs.map +1 -0
- package/dist/full-YT626I57.js +209 -0
- package/dist/full-YT626I57.js.map +1 -0
- package/dist/index.cjs +838 -620
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +57 -1
- package/dist/index.d.ts +57 -1
- package/dist/index.js +350 -132
- package/dist/index.js.map +1 -1
- package/dist/{internal-BJsg5os3.d.cts → internal-Cks9H21d.d.cts} +56 -1
- package/dist/{internal-BJsg5os3.d.ts → internal-Cks9H21d.d.ts} +56 -1
- package/dist/internal.cjs +4 -3
- package/dist/internal.cjs.map +1 -1
- package/dist/internal.d.cts +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/internal.js +3 -2
- package/dist/office_charts_bg.wasm +0 -0
- package/dist/office_charts_full_bg.wasm +0 -0
- package/dist/payload-7QT6NY6S.js +6 -0
- package/dist/payload-7QT6NY6S.js.map +1 -0
- package/dist/payload-BZGBW73P.cjs +8 -0
- package/dist/payload-BZGBW73P.cjs.map +1 -0
- package/dist/payload-H55PON66.js +6 -0
- package/dist/payload-H55PON66.js.map +1 -0
- package/dist/payload-RNKEYTQ4.cjs +8 -0
- package/dist/payload-RNKEYTQ4.cjs.map +1 -0
- package/dist/{shared-chart-DVC5S2P6.cjs → shared-chart-GCUFIUQL.cjs} +49 -20
- package/dist/shared-chart-GCUFIUQL.cjs.map +1 -0
- package/dist/{shared-chart-3STFRVWT.js → shared-chart-JV4MGKXX.js} +50 -20
- package/dist/shared-chart-JV4MGKXX.js.map +1 -0
- package/dist/{shared-chart-MFQSQG4K.cjs → shared-chart-OUC7EHFC.cjs} +49 -19
- package/dist/shared-chart-OUC7EHFC.cjs.map +1 -0
- package/dist/{shared-chart-BFQNYOIQ.js → shared-chart-PY47ED4I.js} +49 -20
- package/dist/shared-chart-PY47ED4I.js.map +1 -0
- package/dist/{surface-regl-R2N54JT2.js → surface-webgl-2ZZ6JQR2.js} +87 -151
- package/dist/surface-webgl-2ZZ6JQR2.js.map +1 -0
- package/dist/{surface-regl-BBJ6OIKK.cjs → surface-webgl-3HS6VBCK.cjs} +88 -152
- package/dist/surface-webgl-3HS6VBCK.cjs.map +1 -0
- package/dist/{surface-regl-7CDGGVDG.js → surface-webgl-4DQXDDXU.js} +87 -151
- package/dist/surface-webgl-4DQXDDXU.js.map +1 -0
- package/dist/{surface-regl-SUJ2TFZA.cjs → surface-webgl-SVYD564V.cjs} +88 -152
- package/dist/surface-webgl-SVYD564V.cjs.map +1 -0
- package/dist/vanilla.cjs +4 -3
- package/dist/vanilla.cjs.map +1 -1
- package/dist/vanilla.d.cts +2 -2
- package/dist/vanilla.d.ts +2 -2
- package/dist/vanilla.js +3 -2
- package/dist/xlsx-worker.js +298 -92
- package/dist/xlsx-worker.js.map +1 -1
- package/package.json +6 -15
- package/dist/browser-B73UAN6E.cjs.map +0 -1
- package/dist/chart-renderer-2EKXNHUD.cjs.map +0 -1
- package/dist/chart-renderer-W7XW24JI.cjs.map +0 -1
- package/dist/chart-renderer-XBF7EPUS.js.map +0 -1
- package/dist/chart-renderer-ZLJVPLGN.js.map +0 -1
- package/dist/chunk-6IGWCJU5.cjs +0 -90
- package/dist/chunk-6IGWCJU5.cjs.map +0 -1
- package/dist/chunk-HEEFCVWS.js.map +0 -1
- package/dist/chunk-HKMFMIKE.js.map +0 -1
- package/dist/chunk-VG4JELEQ.js.map +0 -1
- package/dist/chunk-WGRRI25I.cjs.map +0 -1
- package/dist/chunk-XISBYOD5.cjs.map +0 -1
- package/dist/payload-JBPE7GEG.cjs +0 -8
- package/dist/payload-JBPE7GEG.cjs.map +0 -1
- package/dist/payload-KYNCVJT5.js +0 -6
- package/dist/payload-KYNCVJT5.js.map +0 -1
- package/dist/region-map-geography-24TXETDP.cjs +0 -184
- package/dist/region-map-geography-24TXETDP.cjs.map +0 -1
- package/dist/region-map-geography-OR6DHAF7.js +0 -182
- package/dist/region-map-geography-OR6DHAF7.js.map +0 -1
- package/dist/shared-chart-3STFRVWT.js.map +0 -1
- package/dist/shared-chart-BFQNYOIQ.js.map +0 -1
- package/dist/shared-chart-DVC5S2P6.cjs.map +0 -1
- package/dist/shared-chart-MFQSQG4K.cjs.map +0 -1
- package/dist/surface-regl-7CDGGVDG.js.map +0 -1
- package/dist/surface-regl-BBJ6OIKK.cjs.map +0 -1
- package/dist/surface-regl-R2N54JT2.js.map +0 -1
- package/dist/surface-regl-SUJ2TFZA.cjs.map +0 -1
- package/dist/world-atlas-LICENSE.txt +0 -13
- /package/dist/{us-atlas-LICENSE.txt → rust-office-charts-MAP-DATA-LICENSE.txt} +0 -0
package/dist/index.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {
|
|
2
|
+
loadSpreadsheetFonts
|
|
3
|
+
} from "./chunk-LY4EWUKF.js";
|
|
4
|
+
import "./chunk-KSXNNWAY.js";
|
|
2
5
|
import {
|
|
3
6
|
getBuiltinChartColor,
|
|
4
7
|
getBuiltinChartSurfaceStyle,
|
|
@@ -68,31 +71,85 @@ function localizeCellNumber(worksheet, row, col, text, locale = "en-US") {
|
|
|
68
71
|
);
|
|
69
72
|
}
|
|
70
73
|
|
|
71
|
-
// src/spreadsheet-fonts.ts
|
|
72
|
-
var fontLoadPromise;
|
|
73
|
-
var SPREADSHEET_FALLBACK_FONT = "React XLSX Carlito";
|
|
74
|
-
function loadSpreadsheetFonts() {
|
|
75
|
-
if (typeof document === "undefined" || typeof FontFace === "undefined") {
|
|
76
|
-
return Promise.resolve();
|
|
77
|
-
}
|
|
78
|
-
return fontLoadPromise ??= import("./spreadsheet-font-assets-V366MXRM.js").then(async ({ spreadsheetFontFaces }) => {
|
|
79
|
-
await Promise.allSettled(spreadsheetFontFaces.map(async ({ source, ...descriptors }) => {
|
|
80
|
-
const face = new FontFace(SPREADSHEET_FALLBACK_FONT, `url(${JSON.stringify(source)})`, descriptors);
|
|
81
|
-
await face.load();
|
|
82
|
-
document.fonts.add(face);
|
|
83
|
-
}));
|
|
84
|
-
}).catch(() => {
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
|
|
88
74
|
// src/controller.tsx
|
|
89
75
|
import * as React from "react";
|
|
90
76
|
import { formatBinaryBytes, XlsxFileSizeLimitExceededError } from "@extend-ai/react-xlsx/internal";
|
|
91
77
|
import { XlsxFileSizeLimitExceededError as XlsxFileSizeLimitExceededError2 } from "@extend-ai/react-xlsx/internal";
|
|
92
|
-
import { strFromU8 as
|
|
78
|
+
import { strFromU8 as strFromU84, strToU8 as strToU83, unzipSync as unzipSync2, zipSync as zipSync2 } from "fflate";
|
|
79
|
+
|
|
80
|
+
// src/chartsheet-payload.ts
|
|
81
|
+
import { strFromU8 } from "fflate";
|
|
82
|
+
var REL_NS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
|
|
83
|
+
function readXml(archive, path) {
|
|
84
|
+
const bytes = archive[path];
|
|
85
|
+
if (!bytes || typeof DOMParser === "undefined") return null;
|
|
86
|
+
const document2 = new DOMParser().parseFromString(strFromU8(bytes), "application/xml");
|
|
87
|
+
return document2.getElementsByTagName("parsererror").length > 0 ? null : document2;
|
|
88
|
+
}
|
|
89
|
+
function relationshipPath(partPath) {
|
|
90
|
+
const separator = partPath.lastIndexOf("/");
|
|
91
|
+
return `${partPath.slice(0, separator + 1)}_rels/${partPath.slice(separator + 1)}.rels`;
|
|
92
|
+
}
|
|
93
|
+
function resolveTarget(partPath, target) {
|
|
94
|
+
if (/^[a-z][a-z0-9+.-]*:/i.test(target) || target.startsWith("//")) return null;
|
|
95
|
+
const segments = target.startsWith("/") ? [] : partPath.split("/").slice(0, -1);
|
|
96
|
+
for (const segment of target.replace(/\\/g, "/").split("/")) {
|
|
97
|
+
if (!segment || segment === ".") continue;
|
|
98
|
+
if (segment === "..") {
|
|
99
|
+
if (segments.length === 0) return null;
|
|
100
|
+
segments.pop();
|
|
101
|
+
} else {
|
|
102
|
+
segments.push(segment);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return segments.join("/");
|
|
106
|
+
}
|
|
107
|
+
function readRelationships(archive, partPath) {
|
|
108
|
+
const relationships = /* @__PURE__ */ new Map();
|
|
109
|
+
const document2 = readXml(archive, relationshipPath(partPath));
|
|
110
|
+
for (const element of Array.from(document2?.getElementsByTagNameNS("*", "Relationship") ?? [])) {
|
|
111
|
+
if (element.getAttribute("TargetMode") === "External") continue;
|
|
112
|
+
const id = element.getAttribute("Id");
|
|
113
|
+
const rawTarget = element.getAttribute("Target");
|
|
114
|
+
const type = element.getAttribute("Type");
|
|
115
|
+
const target = rawTarget ? resolveTarget(partPath, rawTarget) : null;
|
|
116
|
+
if (id && type && target && archive[target]) relationships.set(id, { target, type });
|
|
117
|
+
}
|
|
118
|
+
return relationships;
|
|
119
|
+
}
|
|
120
|
+
function collectChartsheetDrawingOrigins(archive, chartsheets) {
|
|
121
|
+
const origins = /* @__PURE__ */ new Map();
|
|
122
|
+
if (chartsheets.length === 0) return origins;
|
|
123
|
+
const workbookPath = "xl/workbook.xml";
|
|
124
|
+
const workbookDocument = readXml(archive, workbookPath);
|
|
125
|
+
const workbookRelationships = readRelationships(archive, workbookPath);
|
|
126
|
+
for (const sheet of Array.from(workbookDocument?.getElementsByTagNameNS("*", "sheet") ?? [])) {
|
|
127
|
+
const relationshipId = sheet.getAttributeNS(REL_NS, "id") ?? sheet.getAttribute("r:id");
|
|
128
|
+
const relationship = relationshipId ? workbookRelationships.get(relationshipId) : null;
|
|
129
|
+
if (!relationship?.type.endsWith("/chartsheet")) continue;
|
|
130
|
+
const chartsheet = chartsheets.find((entry) => entry.name === sheet.getAttribute("name"));
|
|
131
|
+
if (!chartsheet || chartsheet.workbookSheetIndex == null) continue;
|
|
132
|
+
const sheetDocument = readXml(archive, relationship.target);
|
|
133
|
+
const sheetRelationships = readRelationships(archive, relationship.target);
|
|
134
|
+
const attachments = [];
|
|
135
|
+
for (const drawing of Array.from(sheetDocument?.getElementsByTagNameNS("*", "drawing") ?? [])) {
|
|
136
|
+
const drawingId = drawing.getAttributeNS(REL_NS, "id") ?? drawing.getAttribute("r:id");
|
|
137
|
+
const drawingRelationship = drawingId ? sheetRelationships.get(drawingId) : null;
|
|
138
|
+
if (!drawingRelationship?.type.endsWith("/drawing")) continue;
|
|
139
|
+
const drawingRelsPath = relationshipPath(drawingRelationship.target);
|
|
140
|
+
attachments.push({
|
|
141
|
+
drawingPath: drawingRelationship.target,
|
|
142
|
+
drawingRelsPath: archive[drawingRelsPath] ? drawingRelsPath : null,
|
|
143
|
+
mediaPaths: []
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
origins.set(chartsheet.index, { attachments, workbookSheetIndex: chartsheet.workbookSheetIndex });
|
|
147
|
+
}
|
|
148
|
+
return origins;
|
|
149
|
+
}
|
|
93
150
|
|
|
94
151
|
// src/charts.ts
|
|
95
|
-
import { strFromU8, strToU8 } from "fflate";
|
|
152
|
+
import { strFromU8 as strFromU82, strToU8 } from "fflate";
|
|
96
153
|
var CHART_NS = "http://schemas.openxmlformats.org/drawingml/2006/chart";
|
|
97
154
|
var DRAWINGML_NS = "http://schemas.openxmlformats.org/drawingml/2006/main";
|
|
98
155
|
var CHART_REL_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart";
|
|
@@ -241,18 +298,33 @@ function applyChartSeriesFormula(chart, seriesIndex, formula, workbook) {
|
|
|
241
298
|
}
|
|
242
299
|
const categoriesRef = {
|
|
243
300
|
...currentSeries.categoriesRef ?? {},
|
|
244
|
-
formula: parsed.categoryFormula
|
|
301
|
+
formula: parsed.categoryFormula,
|
|
302
|
+
values: parsed.categoryFormula === currentSeries.categoriesRef?.formula ? currentSeries.categoriesRef.values : void 0
|
|
245
303
|
};
|
|
246
304
|
const valuesRef = {
|
|
247
305
|
...currentSeries.valuesRef ?? {},
|
|
248
|
-
formula: parsed.valueFormula
|
|
306
|
+
formula: parsed.valueFormula,
|
|
307
|
+
values: parsed.valueFormula === currentSeries.valuesRef?.formula ? currentSeries.valuesRef.values : void 0
|
|
249
308
|
};
|
|
250
309
|
const bubbleSizeRef = chart.chartType === "Bubble" || parsed.bubbleSizeFormula ? {
|
|
251
310
|
...currentSeries.bubbleSizeRef ?? {},
|
|
252
|
-
formula: parsed.bubbleSizeFormula
|
|
311
|
+
formula: parsed.bubbleSizeFormula,
|
|
312
|
+
values: parsed.bubbleSizeFormula === currentSeries.bubbleSizeRef?.formula ? currentSeries.bubbleSizeRef?.values : void 0
|
|
253
313
|
} : currentSeries.bubbleSizeRef ?? null;
|
|
314
|
+
const isUnresolved = (formula2) => Boolean(
|
|
315
|
+
workbook && formula2 && !resolveReferenceSheet(workbook, chart.workbookSheetIndex, formula2).sheet
|
|
316
|
+
);
|
|
317
|
+
const resolveEditedReference = (reference, currentReference, currentValues, mode) => {
|
|
318
|
+
if (!workbook) return currentValues;
|
|
319
|
+
if (reference?.formula === currentReference?.formula && isUnresolved(reference?.formula)) return currentValues;
|
|
320
|
+
return resolveReferenceValues(workbook, chart.workbookSheetIndex, reference, mode);
|
|
321
|
+
};
|
|
254
322
|
const raw = {
|
|
255
|
-
...currentSeries.raw ?? {}
|
|
323
|
+
...currentSeries.raw ?? {},
|
|
324
|
+
unresolvedCategoriesReference: isUnresolved(categoriesRef.formula),
|
|
325
|
+
unresolvedValuesReference: isUnresolved(valuesRef.formula),
|
|
326
|
+
unresolvedBubbleSizeReference: isUnresolved(bubbleSizeRef?.formula),
|
|
327
|
+
unresolvedNameReference: isUnresolved(parsed.nameFormula)
|
|
256
328
|
};
|
|
257
329
|
if (parsed.nameFormula) {
|
|
258
330
|
raw.name = parsed.nameFormula;
|
|
@@ -262,17 +334,21 @@ function applyChartSeriesFormula(chart, seriesIndex, formula, workbook) {
|
|
|
262
334
|
const nextSeries = {
|
|
263
335
|
...currentSeries,
|
|
264
336
|
bubbleSizeRef,
|
|
265
|
-
bubbleSizes:
|
|
266
|
-
categories:
|
|
337
|
+
bubbleSizes: resolveEditedReference(bubbleSizeRef, currentSeries.bubbleSizeRef, currentSeries.bubbleSizes ?? [], "value").map((value) => typeof value === "number" && Number.isFinite(value) ? value : null),
|
|
338
|
+
categories: resolveEditedReference(categoriesRef, currentSeries.categoriesRef, currentSeries.categories, "category"),
|
|
267
339
|
categoriesRef,
|
|
268
|
-
name: parsed.nameLiteral ?? (parsed.nameFormula && workbook ? resolveSeriesName(workbook, chart.workbookSheetIndex, parsed.nameFormula) : parsed.nameFormula ?? currentSeries.name),
|
|
340
|
+
name: parsed.nameLiteral ?? (parsed.nameFormula === currentSeries.raw?.name && isUnresolved(parsed.nameFormula) ? currentSeries.name : parsed.nameFormula && workbook ? resolveSeriesName(workbook, chart.workbookSheetIndex, parsed.nameFormula) : parsed.nameFormula ?? currentSeries.name),
|
|
269
341
|
raw,
|
|
270
|
-
values:
|
|
342
|
+
values: resolveEditedReference(valuesRef, currentSeries.valuesRef, currentSeries.values, "value").map((value) => typeof value === "number" && Number.isFinite(value) ? value : null),
|
|
271
343
|
valuesRef
|
|
272
344
|
};
|
|
273
345
|
return {
|
|
274
346
|
...chart,
|
|
275
|
-
series: chart.series.map((series, index) => index === seriesIndex ? nextSeries : series)
|
|
347
|
+
series: chart.series.map((series, index) => index === seriesIndex ? nextSeries : series),
|
|
348
|
+
typeGroups: chart.typeGroups?.map((group) => ({
|
|
349
|
+
...group,
|
|
350
|
+
series: group.series.map((series) => series.id === currentSeries.id ? nextSeries : series)
|
|
351
|
+
}))
|
|
276
352
|
};
|
|
277
353
|
}
|
|
278
354
|
function normalizeWorksheetVisibility(value) {
|
|
@@ -978,9 +1054,10 @@ function applyBuiltinChartDefaults(chart, themePalette) {
|
|
|
978
1054
|
};
|
|
979
1055
|
};
|
|
980
1056
|
chart.series = chart.series.map(applySeriesDefaults);
|
|
1057
|
+
const canonicalSeries = chart.id.startsWith("chart-ex-") ? null : new Map(chart.series.map((series) => [series.id, series]));
|
|
981
1058
|
let groupSeriesOffset = 0;
|
|
982
1059
|
chart.typeGroups = chart.typeGroups?.map((group) => {
|
|
983
|
-
const series = group.series.map((entry, index) => applySeriesDefaults(entry, groupSeriesOffset + index));
|
|
1060
|
+
const series = group.series.map((entry, index) => canonicalSeries?.get(entry.id) ?? applySeriesDefaults(entry, groupSeriesOffset + index));
|
|
984
1061
|
groupSeriesOffset += group.series.length;
|
|
985
1062
|
return { ...group, series };
|
|
986
1063
|
});
|
|
@@ -1124,11 +1201,12 @@ function applyChartSeriesStyleFromXml(chart, chartTypeNode, themePalette) {
|
|
|
1124
1201
|
const rawFillColor = typeof existingShapeProperties?.solidFillHex === "string" ? normalizeHexColor(existingShapeProperties.solidFillHex) : null;
|
|
1125
1202
|
const rawLineColor = typeof existingShapeProperties?.lineColorHex === "string" ? normalizeHexColor(existingShapeProperties.lineColorHex) : null;
|
|
1126
1203
|
const resolvedLineColor = lineStyle.hidden ? void 0 : rawLineColor ?? lineStyle.color ?? rawFillColor ?? fillColor ?? series.lineColor ?? series.color;
|
|
1127
|
-
const hasCategoryReference = typeof series.categoriesRef?.formula === "string" && series.categoriesRef.formula.length > 0;
|
|
1128
|
-
const hasValueReference = typeof series.valuesRef?.formula === "string" && series.valuesRef.formula.length > 0;
|
|
1129
|
-
const hasBubbleSizeReference = typeof series.bubbleSizeRef?.formula === "string" && series.bubbleSizeRef.formula.length > 0;
|
|
1204
|
+
const hasCategoryReference = typeof series.categoriesRef?.formula === "string" && series.categoriesRef.formula.length > 0 && !series.raw?.unresolvedCategoriesReference;
|
|
1205
|
+
const hasValueReference = typeof series.valuesRef?.formula === "string" && series.valuesRef.formula.length > 0 && !series.raw?.unresolvedValuesReference;
|
|
1206
|
+
const hasBubbleSizeReference = typeof series.bubbleSizeRef?.formula === "string" && series.bubbleSizeRef.formula.length > 0 && !series.raw?.unresolvedBubbleSizeReference;
|
|
1130
1207
|
return {
|
|
1131
1208
|
...series,
|
|
1209
|
+
name: series.raw?.unresolvedNameReference ? parseChartCacheValues(getFirstLocalChild(seriesNode, "tx"), "strCache", "category")?.[0]?.toString() ?? series.name : series.name,
|
|
1132
1210
|
bubbleSizes: !hasBubbleSizeReference && cachedBubbleSizes ? cachedBubbleSizes.map((value) => typeof value === "number" && Number.isFinite(value) ? value : null) : series.bubbleSizes,
|
|
1133
1211
|
categories: !hasCategoryReference && cachedCategories ? cachedCategories : series.categories,
|
|
1134
1212
|
color: rawFillColor ?? rawLineColor ?? fillColor ?? lineStyle.color ?? series.color,
|
|
@@ -1388,6 +1466,23 @@ function applyChartStyleFromXml(chart, chartPath, archive, themePalette) {
|
|
|
1388
1466
|
if (typeof fallbackStyleId === "number" && Number.isFinite(fallbackStyleId)) {
|
|
1389
1467
|
chart.chartStyleId = fallbackStyleId;
|
|
1390
1468
|
}
|
|
1469
|
+
const sourceSeries = chart.raw?.officeSourceSeries;
|
|
1470
|
+
if (sourceSeries && chartDocument?.documentElement.namespaceURI === "http://schemas.microsoft.com/office/drawing/2014/chartex") {
|
|
1471
|
+
chart.renderSource = {
|
|
1472
|
+
kind: chart.chartExLayout ?? "",
|
|
1473
|
+
seriesTypes: getLocalDescendants(chartNode, "series").map((node) => node.getAttribute("layoutId") ?? ""),
|
|
1474
|
+
sourceSeries,
|
|
1475
|
+
experimental: true,
|
|
1476
|
+
xml: chartXml,
|
|
1477
|
+
themeColors: themePalette ? Object.fromEntries(Object.entries(THEME_COLOR_INDEX_BY_NAME).flatMap(([key, index]) => {
|
|
1478
|
+
const color = themePalette.colorsByIndex[index];
|
|
1479
|
+
return color ? [[key, color]] : [];
|
|
1480
|
+
})) : void 0,
|
|
1481
|
+
themeOverrideXml: readArchiveText(archive, relationships.get("http://schemas.openxmlformats.org/officeDocument/2006/relationships/themeOverride")) ?? void 0,
|
|
1482
|
+
styleXml: readArchiveText(archive, relationships.get(CHART_STYLE_REL_TYPE)) ?? void 0,
|
|
1483
|
+
colorStyleXml: readArchiveText(archive, relationships.get(CHART_COLOR_STYLE_REL_TYPE)) ?? void 0
|
|
1484
|
+
};
|
|
1485
|
+
}
|
|
1391
1486
|
applyModernChartExStyles();
|
|
1392
1487
|
applyFallbackSeriesStyles();
|
|
1393
1488
|
applyBuiltinChartDefaults(chart, themePalette);
|
|
@@ -1629,11 +1724,22 @@ function applyChartStyleFromXml(chart, chartPath, archive, themePalette) {
|
|
|
1629
1724
|
chart.axes = [...chart.axes, seriesAxis];
|
|
1630
1725
|
}
|
|
1631
1726
|
}
|
|
1632
|
-
const
|
|
1633
|
-
const
|
|
1634
|
-
|
|
1727
|
+
const groups = Array.from(plotArea.children).filter((entry) => entry.localName.endsWith("Chart"));
|
|
1728
|
+
const seriesTypes = groups.flatMap((group) => getLocalChildren(group, "ser").map(() => group.localName.slice(0, -5)));
|
|
1729
|
+
const seriesNodes = groups.flatMap((group) => getLocalChildren(group, "ser"));
|
|
1730
|
+
const indexedXSeries = seriesNodes.map((series) => {
|
|
1731
|
+
const x = getFirstLocalChild(series, "xVal");
|
|
1732
|
+
return Boolean(x && (getFirstLocalChild(x, "multiLvlStrRef") || getFirstLocalChild(x, "strRef") || getFirstLocalChild(x, "strLit")));
|
|
1733
|
+
});
|
|
1734
|
+
const unsupportedHierarchy = getLocalDescendants(plotArea, "multiLvlStrRef").some((node) => node.parentElement?.localName !== "xVal");
|
|
1735
|
+
const kind = chartTypeNode.localName.slice(0, -5);
|
|
1736
|
+
const stable = groups.length === 1 && !chart.is3d && (kind === "line" && chart.chartType === "Line" || kind === "bar" && chart.chartType === "ColumnClustered") && !plotArea.querySelector("trendline, errBars, dropLines, hiLowLines, upDownBars, dateAx, multiLvlStrRef, pictureOptions");
|
|
1737
|
+
if (seriesTypes.length === chart.series.length && !unsupportedHierarchy && !plotArea.querySelector("pictureOptions")) {
|
|
1635
1738
|
chart.renderSource = {
|
|
1636
1739
|
kind,
|
|
1740
|
+
seriesTypes,
|
|
1741
|
+
indexedXSeries,
|
|
1742
|
+
experimental: !stable,
|
|
1637
1743
|
xml: chartXml,
|
|
1638
1744
|
themeColors: themePalette ? Object.fromEntries(Object.entries(THEME_COLOR_INDEX_BY_NAME).flatMap(([key, index]) => {
|
|
1639
1745
|
const color = themePalette.colorsByIndex[index];
|
|
@@ -1644,7 +1750,21 @@ function applyChartStyleFromXml(chart, chartPath, archive, themePalette) {
|
|
|
1644
1750
|
colorStyleXml: readArchiveText(archive, relationships.get(CHART_COLOR_STYLE_REL_TYPE)) ?? void 0
|
|
1645
1751
|
};
|
|
1646
1752
|
}
|
|
1647
|
-
|
|
1753
|
+
if (groups.length > 1 && chart.typeGroups?.length === groups.length) {
|
|
1754
|
+
let seriesOffset = 0;
|
|
1755
|
+
const hydratedSeries = [];
|
|
1756
|
+
chart.typeGroups = chart.typeGroups.map((group, index) => {
|
|
1757
|
+
const count = getLocalChildren(groups[index], "ser").length;
|
|
1758
|
+
const groupChart = { ...chart, chartType: group.chartType, series: chart.series.slice(seriesOffset, seriesOffset + count) };
|
|
1759
|
+
applyChartSeriesStyleFromXml(groupChart, groups[index], themePalette);
|
|
1760
|
+
seriesOffset += count;
|
|
1761
|
+
hydratedSeries.push(...groupChart.series);
|
|
1762
|
+
return { ...group, series: groupChart.series };
|
|
1763
|
+
});
|
|
1764
|
+
chart.series = [...hydratedSeries, ...chart.series.slice(seriesOffset)];
|
|
1765
|
+
} else {
|
|
1766
|
+
applyChartSeriesStyleFromXml(chart, chartTypeNode, themePalette);
|
|
1767
|
+
}
|
|
1648
1768
|
applyFallbackSeriesStyles();
|
|
1649
1769
|
applyBuiltinChartDefaults(chart, themePalette);
|
|
1650
1770
|
}
|
|
@@ -1695,7 +1815,7 @@ function readArchiveText(archive, path) {
|
|
|
1695
1815
|
return null;
|
|
1696
1816
|
}
|
|
1697
1817
|
const entry = archive[normalizeArchivePath(path)];
|
|
1698
|
-
return entry ?
|
|
1818
|
+
return entry ? strFromU82(entry) : null;
|
|
1699
1819
|
}
|
|
1700
1820
|
function parseXml(xml) {
|
|
1701
1821
|
if (typeof DOMParser === "undefined") {
|
|
@@ -1831,8 +1951,8 @@ function resolveReferenceSheet(workbook, fallbackSheetIndex, formula) {
|
|
|
1831
1951
|
if (!formula) {
|
|
1832
1952
|
return {
|
|
1833
1953
|
range: null,
|
|
1834
|
-
sheet: workbook.getSheet(fallbackSheetIndex),
|
|
1835
|
-
sheetName: workbook.getSheet(fallbackSheetIndex)?.name ?? ""
|
|
1954
|
+
sheet: fallbackSheetIndex < workbook.sheetCount ? workbook.getSheet(fallbackSheetIndex) : null,
|
|
1955
|
+
sheetName: fallbackSheetIndex < workbook.sheetCount ? workbook.getSheet(fallbackSheetIndex)?.name ?? "" : ""
|
|
1836
1956
|
};
|
|
1837
1957
|
}
|
|
1838
1958
|
const trimmedFormula = formula.trim();
|
|
@@ -1849,8 +1969,8 @@ function resolveReferenceSheet(workbook, fallbackSheetIndex, formula) {
|
|
|
1849
1969
|
if (!split) {
|
|
1850
1970
|
return {
|
|
1851
1971
|
range: parseA1Range(trimmedFormula),
|
|
1852
|
-
sheet: workbook.getSheet(fallbackSheetIndex),
|
|
1853
|
-
sheetName: workbook.getSheet(fallbackSheetIndex)?.name ?? ""
|
|
1972
|
+
sheet: fallbackSheetIndex < workbook.sheetCount ? workbook.getSheet(fallbackSheetIndex) : null,
|
|
1973
|
+
sheetName: fallbackSheetIndex < workbook.sheetCount ? workbook.getSheet(fallbackSheetIndex)?.name ?? "" : ""
|
|
1854
1974
|
};
|
|
1855
1975
|
}
|
|
1856
1976
|
try {
|
|
@@ -1862,8 +1982,8 @@ function resolveReferenceSheet(workbook, fallbackSheetIndex, formula) {
|
|
|
1862
1982
|
} catch {
|
|
1863
1983
|
return {
|
|
1864
1984
|
range: parseA1Range(split.range),
|
|
1865
|
-
sheet:
|
|
1866
|
-
sheetName:
|
|
1985
|
+
sheet: null,
|
|
1986
|
+
sheetName: split.sheetName
|
|
1867
1987
|
};
|
|
1868
1988
|
}
|
|
1869
1989
|
}
|
|
@@ -2132,6 +2252,7 @@ function buildChartExParetoLineSeries(series, sourceRaw, index) {
|
|
|
2132
2252
|
});
|
|
2133
2253
|
return {
|
|
2134
2254
|
...series,
|
|
2255
|
+
id: series.id.replace(/-series-\d+$/, `-series-${index}`),
|
|
2135
2256
|
color: void 0,
|
|
2136
2257
|
lineColor: void 0,
|
|
2137
2258
|
markerColor: void 0,
|
|
@@ -2394,7 +2515,7 @@ function normalizeChartExChart(workbook, workbookSheetIndex, visibleSheetIndex,
|
|
|
2394
2515
|
name: typeof drawing.name === "string" ? drawing.name : chartTitle,
|
|
2395
2516
|
overlap: void 0,
|
|
2396
2517
|
plotVisibleOnly: void 0,
|
|
2397
|
-
raw: chart,
|
|
2518
|
+
raw: { ...chart, officeSourceSeries: normalizedSeries },
|
|
2398
2519
|
radarStyle: void 0,
|
|
2399
2520
|
scatterStyle: void 0,
|
|
2400
2521
|
roundedCorners: void 0,
|
|
@@ -2862,7 +2983,13 @@ function normalizeChartSeries(workbook, workbookSheetIndex, chartId, raw, index)
|
|
|
2862
2983
|
name: resolveSeriesName(workbook, workbookSheetIndex, series.name),
|
|
2863
2984
|
negativeColor: void 0,
|
|
2864
2985
|
negativeLineColor: void 0,
|
|
2865
|
-
raw:
|
|
2986
|
+
raw: {
|
|
2987
|
+
...series,
|
|
2988
|
+
unresolvedCategoriesReference: Boolean(categoriesRef?.formula && !resolveReferenceSheet(workbook, workbookSheetIndex, categoriesRef.formula).sheet),
|
|
2989
|
+
unresolvedValuesReference: Boolean(valuesRef?.formula && !resolveReferenceSheet(workbook, workbookSheetIndex, valuesRef.formula).sheet),
|
|
2990
|
+
unresolvedBubbleSizeReference: Boolean(bubbleSizeRef?.formula && !resolveReferenceSheet(workbook, workbookSheetIndex, bubbleSizeRef.formula).sheet),
|
|
2991
|
+
unresolvedNameReference: typeof series.name === "string" && series.name.includes("!") && !resolveReferenceSheet(workbook, workbookSheetIndex, series.name).sheet
|
|
2992
|
+
},
|
|
2866
2993
|
shapeProperties,
|
|
2867
2994
|
smooth: typeof series.smooth === "boolean" ? series.smooth : void 0,
|
|
2868
2995
|
values: resolveReferenceValues(workbook, workbookSheetIndex, valuesRef, "value").map((value) => typeof value === "number" && Number.isFinite(value) ? value : null),
|
|
@@ -2924,12 +3051,15 @@ function buildTabs(workbook, chartsheets, visibleSheetIndexByWorkbookSheetIndex,
|
|
|
2924
3051
|
const slotIndex = typeof entry.index === "number" ? entry.index : index;
|
|
2925
3052
|
if (slotType === "chartsheet") {
|
|
2926
3053
|
const chartsheet = chartsheets[slotIndex];
|
|
3054
|
+
const visibility2 = normalizeWorksheetVisibility(chartsheet?.raw?.visibility);
|
|
3055
|
+
if (!showHiddenSheets && visibility2 !== "visible") return [];
|
|
2927
3056
|
return chartsheet ? [{
|
|
2928
3057
|
chartsheetIndex: slotIndex,
|
|
2929
3058
|
id: `chartsheet-${slotIndex}`,
|
|
2930
3059
|
index,
|
|
2931
3060
|
kind: "chartsheet",
|
|
2932
|
-
name: chartsheet.name
|
|
3061
|
+
name: chartsheet.name,
|
|
3062
|
+
visibility: visibility2
|
|
2933
3063
|
}] : [];
|
|
2934
3064
|
}
|
|
2935
3065
|
const worksheet = workbook.getSheet(slotIndex);
|
|
@@ -3033,9 +3163,24 @@ function applyChartOrigins(chartsByWorkbookSheetIndex, chartOriginsById, archive
|
|
|
3033
3163
|
});
|
|
3034
3164
|
}
|
|
3035
3165
|
}
|
|
3036
|
-
function hydrateWorkbookChartStyles(chartsByWorkbookSheetIndex, imageAssets) {
|
|
3166
|
+
function hydrateWorkbookChartStyles(chartsByWorkbookSheetIndex, imageAssets, chartsheets = []) {
|
|
3037
3167
|
const chartOriginsById = /* @__PURE__ */ new Map();
|
|
3038
3168
|
applyChartOrigins(chartsByWorkbookSheetIndex, chartOriginsById, imageAssets.archive, imageAssets.sheetOrigins);
|
|
3169
|
+
const chartsheetOrigins = collectChartsheetDrawingOrigins(imageAssets.archive, chartsheets);
|
|
3170
|
+
for (const chartsheet of chartsheets) {
|
|
3171
|
+
if (chartsheet.workbookSheetIndex == null) continue;
|
|
3172
|
+
const charts = chartsByWorkbookSheetIndex[chartsheet.workbookSheetIndex] ?? [];
|
|
3173
|
+
const origins = collectChartOriginsForSheet(imageAssets.archive, chartsheetOrigins.get(chartsheet.index) ?? null);
|
|
3174
|
+
for (const chart of charts) {
|
|
3175
|
+
const kind = chart.id.startsWith("chart-ex-") ? "modern" : "classic";
|
|
3176
|
+
const origin = origins.find((entry) => entry.chartKind === kind);
|
|
3177
|
+
if (!origin) continue;
|
|
3178
|
+
if (origin.anchor) chart.anchor = origin.anchor;
|
|
3179
|
+
chart.chartPath = origin.chartPath ?? void 0;
|
|
3180
|
+
chartsheet.chartPath = chart.chartPath;
|
|
3181
|
+
chartOriginsById.set(chart.id, origin);
|
|
3182
|
+
}
|
|
3183
|
+
}
|
|
3039
3184
|
for (const charts of chartsByWorkbookSheetIndex) {
|
|
3040
3185
|
for (const chart of charts) {
|
|
3041
3186
|
applyChartStyleFromXml(chart, chart.chartPath, imageAssets.archive, imageAssets.themePalette);
|
|
@@ -3044,6 +3189,84 @@ function hydrateWorkbookChartStyles(chartsByWorkbookSheetIndex, imageAssets) {
|
|
|
3044
3189
|
}
|
|
3045
3190
|
return chartOriginsById;
|
|
3046
3191
|
}
|
|
3192
|
+
function normalizeClassicChartDrawing(workbook, workbookSheetIndex, visibleSheetIndex, rawChart, chartIndex, chartId = `chart-${workbookSheetIndex}-${chartIndex}`) {
|
|
3193
|
+
const drawing = rawChart && typeof rawChart === "object" ? rawChart : {};
|
|
3194
|
+
const chart = drawing.chart && typeof drawing.chart === "object" ? drawing.chart : {};
|
|
3195
|
+
const rawView3d = chart.view3D && typeof chart.view3D === "object" ? chart.view3D : null;
|
|
3196
|
+
const rawSeries = Array.isArray(chart.series) ? chart.series : [];
|
|
3197
|
+
const typeGroups = Array.isArray(chart.typeGroups) ? chart.typeGroups.map((entry, groupIndex) => normalizeChartTypeGroup(workbook, workbookSheetIndex, chartId, entry, groupIndex)).filter((value) => value != null) : [];
|
|
3198
|
+
let seriesOrdinal = 0;
|
|
3199
|
+
const series = typeGroups.some((group) => group.series.length > 0) ? typeGroups.flatMap((group) => {
|
|
3200
|
+
group.series = group.series.map((entry) => ({ ...entry, id: `${chartId}-series-${seriesOrdinal++}` }));
|
|
3201
|
+
return group.series;
|
|
3202
|
+
}) : rawSeries.map((entry, seriesIndex) => normalizeChartSeries(workbook, workbookSheetIndex, chartId, entry, seriesIndex));
|
|
3203
|
+
const chartLevelDataLabels = normalizeChartDataLabels(chart.dataLabels);
|
|
3204
|
+
const firstSeriesDataLabels = rawSeries.length > 0 && rawSeries[0] && typeof rawSeries[0] === "object" ? normalizeChartDataLabels(rawSeries[0].dataLabels) : null;
|
|
3205
|
+
return {
|
|
3206
|
+
anchor: normalizeChartAnchor(drawing.anchor),
|
|
3207
|
+
autoTitleDeleted: typeof chart.autoTitleDeleted === "boolean" ? chart.autoTitleDeleted : void 0,
|
|
3208
|
+
axes: Array.isArray(chart.axes) ? chart.axes.map(normalizeChartAxis).filter((value) => Boolean(value)) : [],
|
|
3209
|
+
axisLabelColor: void 0,
|
|
3210
|
+
axisLineColor: void 0,
|
|
3211
|
+
categoryAxis: normalizeChartAxis(chart.categoryAxis),
|
|
3212
|
+
chartAreaBorderColor: void 0,
|
|
3213
|
+
chartAreaFillColor: void 0,
|
|
3214
|
+
chartColorPalette: void 0,
|
|
3215
|
+
chartColorPaletteOffset: void 0,
|
|
3216
|
+
chartPath: void 0,
|
|
3217
|
+
chartStyleId: void 0,
|
|
3218
|
+
chartType: typeof chart.chartType === "string" ? chart.chartType : "ColumnClustered",
|
|
3219
|
+
dataLabels: chartLevelDataLabels ?? firstSeriesDataLabels,
|
|
3220
|
+
displayBlanksAs: typeof chart.displayBlanksAs === "string" ? chart.displayBlanksAs : void 0,
|
|
3221
|
+
editable: true,
|
|
3222
|
+
firstSliceAngle: typeof chart.firstSliceAngle === "number" ? chart.firstSliceAngle : void 0,
|
|
3223
|
+
fontFamily: void 0,
|
|
3224
|
+
gapWidth: typeof chart.gapWidth === "number" ? chart.gapWidth : void 0,
|
|
3225
|
+
holeSize: typeof chart.holeSize === "number" ? chart.holeSize : void 0,
|
|
3226
|
+
id: chartId,
|
|
3227
|
+
is3d: typeof chart.is3D === "boolean" ? chart.is3D : typeof chart.is3d === "boolean" ? chart.is3d : void 0,
|
|
3228
|
+
legend: normalizeLegend(chart.legend) ? {
|
|
3229
|
+
...normalizeLegend(chart.legend),
|
|
3230
|
+
position: normalizeLegendPosition(normalizeLegend(chart.legend)?.position)
|
|
3231
|
+
} : null,
|
|
3232
|
+
name: typeof drawing.name === "string" ? drawing.name : void 0,
|
|
3233
|
+
overlap: typeof chart.overlap === "number" ? chart.overlap : void 0,
|
|
3234
|
+
plotVisibleOnly: typeof chart.plotVisibleOnly === "boolean" ? chart.plotVisibleOnly : void 0,
|
|
3235
|
+
raw: chart,
|
|
3236
|
+
radarStyle: typeof chart.radarStyle === "string" ? chart.radarStyle : void 0,
|
|
3237
|
+
scatterStyle: typeof chart.scatterStyle === "string" ? chart.scatterStyle : void 0,
|
|
3238
|
+
roundedCorners: typeof chart.roundedCorners === "boolean" ? chart.roundedCorners : void 0,
|
|
3239
|
+
shape3d: typeof chart.shape === "string" ? chart.shape : typeof chart.shape3d === "string" ? chart.shape3d : void 0,
|
|
3240
|
+
seriesAxis: null,
|
|
3241
|
+
series,
|
|
3242
|
+
sheetIndex: visibleSheetIndex,
|
|
3243
|
+
showDlblsOverMax: typeof chart.showDlblsOverMax === "boolean" ? chart.showDlblsOverMax : void 0,
|
|
3244
|
+
sideWall: null,
|
|
3245
|
+
backWall: null,
|
|
3246
|
+
bubbleScale: typeof chart.bubbleScale === "number" ? chart.bubbleScale : void 0,
|
|
3247
|
+
bubble3d: typeof chart.bubble3d === "boolean" ? chart.bubble3d : void 0,
|
|
3248
|
+
floor: null,
|
|
3249
|
+
surfaceMaterial: void 0,
|
|
3250
|
+
textColor: void 0,
|
|
3251
|
+
title: typeof chart.title === "string" ? chart.title : void 0,
|
|
3252
|
+
titleColor: void 0,
|
|
3253
|
+
titleFontFamily: void 0,
|
|
3254
|
+
typeGroups,
|
|
3255
|
+
valueAxis: normalizeChartAxis(chart.valueAxis),
|
|
3256
|
+
varyColors: typeof chart.varyColors === "boolean" ? chart.varyColors : void 0,
|
|
3257
|
+
view3d: rawView3d ? {
|
|
3258
|
+
depthPercent: typeof rawView3d.depthPercent === "number" ? rawView3d.depthPercent : void 0,
|
|
3259
|
+
heightPercent: typeof rawView3d.heightPercent === "number" ? rawView3d.heightPercent : void 0,
|
|
3260
|
+
perspective: typeof rawView3d.perspective === "number" ? rawView3d.perspective : void 0,
|
|
3261
|
+
rAngAx: typeof rawView3d.rAngAx === "boolean" ? rawView3d.rAngAx : typeof rawView3d.rightAngleAxes === "boolean" ? rawView3d.rightAngleAxes : void 0,
|
|
3262
|
+
rotX: typeof rawView3d.rotX === "number" ? rawView3d.rotX : typeof rawView3d.rotateX === "number" ? rawView3d.rotateX : void 0,
|
|
3263
|
+
rotY: typeof rawView3d.rotY === "number" ? rawView3d.rotY : typeof rawView3d.rotateY === "number" ? rawView3d.rotateY : void 0
|
|
3264
|
+
} : void 0,
|
|
3265
|
+
wireframe: typeof chart.wireframe === "boolean" ? chart.wireframe : void 0,
|
|
3266
|
+
workbookSheetIndex,
|
|
3267
|
+
zIndex: Array.isArray(drawing.drawingPath) && typeof drawing.drawingPath[0] === "number" ? drawing.drawingPath[0] + 1 : chartIndex + 1
|
|
3268
|
+
};
|
|
3269
|
+
}
|
|
3047
3270
|
function loadWorkbookChartAssets(workbook, imageAssets, visibleSheetIndexByWorkbookSheetIndex, showHiddenSheets = false) {
|
|
3048
3271
|
const excludedChartIds = /* @__PURE__ */ new Set();
|
|
3049
3272
|
const chartsByWorkbookSheetIndex = Array.from({ length: workbook.sheetCount }, (_, workbookSheetIndex) => {
|
|
@@ -3056,76 +3279,7 @@ function loadWorkbookChartAssets(workbook, imageAssets, visibleSheetIndexByWorkb
|
|
|
3056
3279
|
if (rawChart.hidden || !rawChart.anchor) {
|
|
3057
3280
|
excludedChartIds.add(chartId);
|
|
3058
3281
|
}
|
|
3059
|
-
|
|
3060
|
-
const chart = drawing.chart && typeof drawing.chart === "object" ? drawing.chart : {};
|
|
3061
|
-
const rawView3d = chart.view3D && typeof chart.view3D === "object" ? chart.view3D : null;
|
|
3062
|
-
const rawSeries = Array.isArray(chart.series) ? chart.series : [];
|
|
3063
|
-
const chartLevelDataLabels = normalizeChartDataLabels(chart.dataLabels);
|
|
3064
|
-
const firstSeriesDataLabels = rawSeries.length > 0 && rawSeries[0] && typeof rawSeries[0] === "object" ? normalizeChartDataLabels(rawSeries[0].dataLabels) : null;
|
|
3065
|
-
return {
|
|
3066
|
-
anchor: normalizeChartAnchor(drawing.anchor),
|
|
3067
|
-
autoTitleDeleted: typeof chart.autoTitleDeleted === "boolean" ? chart.autoTitleDeleted : void 0,
|
|
3068
|
-
axes: Array.isArray(chart.axes) ? chart.axes.map(normalizeChartAxis).filter((value) => Boolean(value)) : [],
|
|
3069
|
-
axisLabelColor: void 0,
|
|
3070
|
-
axisLineColor: void 0,
|
|
3071
|
-
categoryAxis: normalizeChartAxis(chart.categoryAxis),
|
|
3072
|
-
chartAreaBorderColor: void 0,
|
|
3073
|
-
chartAreaFillColor: void 0,
|
|
3074
|
-
chartColorPalette: void 0,
|
|
3075
|
-
chartColorPaletteOffset: void 0,
|
|
3076
|
-
chartPath: void 0,
|
|
3077
|
-
chartStyleId: void 0,
|
|
3078
|
-
chartType: typeof chart.chartType === "string" ? chart.chartType : "ColumnClustered",
|
|
3079
|
-
dataLabels: chartLevelDataLabels ?? firstSeriesDataLabels,
|
|
3080
|
-
displayBlanksAs: typeof chart.displayBlanksAs === "string" ? chart.displayBlanksAs : void 0,
|
|
3081
|
-
editable: true,
|
|
3082
|
-
firstSliceAngle: typeof chart.firstSliceAngle === "number" ? chart.firstSliceAngle : void 0,
|
|
3083
|
-
fontFamily: void 0,
|
|
3084
|
-
gapWidth: typeof chart.gapWidth === "number" ? chart.gapWidth : void 0,
|
|
3085
|
-
holeSize: typeof chart.holeSize === "number" ? chart.holeSize : void 0,
|
|
3086
|
-
id: chartId,
|
|
3087
|
-
is3d: typeof chart.is3D === "boolean" ? chart.is3D : void 0,
|
|
3088
|
-
legend: normalizeLegend(chart.legend) ? {
|
|
3089
|
-
...normalizeLegend(chart.legend),
|
|
3090
|
-
position: normalizeLegendPosition(normalizeLegend(chart.legend)?.position)
|
|
3091
|
-
} : null,
|
|
3092
|
-
name: typeof drawing.name === "string" ? drawing.name : void 0,
|
|
3093
|
-
overlap: typeof chart.overlap === "number" ? chart.overlap : void 0,
|
|
3094
|
-
plotVisibleOnly: typeof chart.plotVisibleOnly === "boolean" ? chart.plotVisibleOnly : void 0,
|
|
3095
|
-
raw: chart,
|
|
3096
|
-
radarStyle: typeof chart.radarStyle === "string" ? chart.radarStyle : void 0,
|
|
3097
|
-
scatterStyle: typeof chart.scatterStyle === "string" ? chart.scatterStyle : void 0,
|
|
3098
|
-
roundedCorners: typeof chart.roundedCorners === "boolean" ? chart.roundedCorners : void 0,
|
|
3099
|
-
shape3d: typeof chart.shape === "string" ? chart.shape : typeof chart.shape3d === "string" ? chart.shape3d : void 0,
|
|
3100
|
-
seriesAxis: null,
|
|
3101
|
-
series: rawSeries.map((entry, seriesIndex) => normalizeChartSeries(workbook, workbookSheetIndex, chartId, entry, seriesIndex)),
|
|
3102
|
-
sheetIndex: visibleSheetIndex,
|
|
3103
|
-
showDlblsOverMax: typeof chart.showDlblsOverMax === "boolean" ? chart.showDlblsOverMax : void 0,
|
|
3104
|
-
sideWall: null,
|
|
3105
|
-
backWall: null,
|
|
3106
|
-
bubbleScale: typeof chart.bubbleScale === "number" ? chart.bubbleScale : void 0,
|
|
3107
|
-
bubble3d: typeof chart.bubble3d === "boolean" ? chart.bubble3d : void 0,
|
|
3108
|
-
floor: null,
|
|
3109
|
-
surfaceMaterial: void 0,
|
|
3110
|
-
textColor: void 0,
|
|
3111
|
-
title: typeof chart.title === "string" ? chart.title : void 0,
|
|
3112
|
-
titleColor: void 0,
|
|
3113
|
-
titleFontFamily: void 0,
|
|
3114
|
-
typeGroups: Array.isArray(chart.typeGroups) ? chart.typeGroups.map((entry, groupIndex) => normalizeChartTypeGroup(workbook, workbookSheetIndex, chartId, entry, groupIndex)).filter((value) => value != null) : [],
|
|
3115
|
-
valueAxis: normalizeChartAxis(chart.valueAxis),
|
|
3116
|
-
varyColors: typeof chart.varyColors === "boolean" ? chart.varyColors : void 0,
|
|
3117
|
-
view3d: rawView3d ? {
|
|
3118
|
-
depthPercent: typeof rawView3d.depthPercent === "number" ? rawView3d.depthPercent : void 0,
|
|
3119
|
-
heightPercent: typeof rawView3d.heightPercent === "number" ? rawView3d.heightPercent : void 0,
|
|
3120
|
-
perspective: typeof rawView3d.perspective === "number" ? rawView3d.perspective : void 0,
|
|
3121
|
-
rAngAx: typeof rawView3d.rAngAx === "boolean" ? rawView3d.rAngAx : typeof rawView3d.rightAngleAxes === "boolean" ? rawView3d.rightAngleAxes : void 0,
|
|
3122
|
-
rotX: typeof rawView3d.rotX === "number" ? rawView3d.rotX : typeof rawView3d.rotateX === "number" ? rawView3d.rotateX : void 0,
|
|
3123
|
-
rotY: typeof rawView3d.rotY === "number" ? rawView3d.rotY : typeof rawView3d.rotateY === "number" ? rawView3d.rotateY : void 0
|
|
3124
|
-
} : void 0,
|
|
3125
|
-
wireframe: typeof chart.wireframe === "boolean" ? chart.wireframe : void 0,
|
|
3126
|
-
workbookSheetIndex,
|
|
3127
|
-
zIndex: Array.isArray(drawing.drawingPath) && typeof drawing.drawingPath[0] === "number" ? drawing.drawingPath[0] + 1 : chartIndex + 1
|
|
3128
|
-
};
|
|
3282
|
+
return normalizeClassicChartDrawing(workbook, workbookSheetIndex, visibleSheetIndex, rawChart, chartIndex, chartId);
|
|
3129
3283
|
});
|
|
3130
3284
|
const modernCharts = rawChartsEx.map((rawChartEx, chartExIndex) => {
|
|
3131
3285
|
const chartId = `chart-ex-${workbookSheetIndex}-${chartExIndex}`;
|
|
@@ -3144,8 +3298,36 @@ function loadWorkbookChartAssets(workbook, imageAssets, visibleSheetIndexByWorkb
|
|
|
3144
3298
|
return [...classicCharts, ...modernCharts];
|
|
3145
3299
|
});
|
|
3146
3300
|
const chartsheets = Array.isArray(workbook.chartsheets) ? workbook.chartsheets.map((entry, index) => normalizeChartsheet(entry, index)) : [];
|
|
3301
|
+
for (const chartsheet of chartsheets) {
|
|
3302
|
+
const workbookSheetIndex = workbook.sheetCount + chartsheet.index;
|
|
3303
|
+
const raw = chartsheet.raw;
|
|
3304
|
+
const charts = [];
|
|
3305
|
+
if (raw?.chart && typeof raw.chart === "object") {
|
|
3306
|
+
charts.push(normalizeClassicChartDrawing(
|
|
3307
|
+
workbook,
|
|
3308
|
+
workbookSheetIndex,
|
|
3309
|
+
workbookSheetIndex,
|
|
3310
|
+
raw,
|
|
3311
|
+
0,
|
|
3312
|
+
`${chartsheet.id}-chart-0`
|
|
3313
|
+
));
|
|
3314
|
+
}
|
|
3315
|
+
if (raw?.chartEx && typeof raw.chartEx === "object") {
|
|
3316
|
+
charts.push(normalizeChartExChart(
|
|
3317
|
+
workbook,
|
|
3318
|
+
workbookSheetIndex,
|
|
3319
|
+
workbookSheetIndex,
|
|
3320
|
+
raw,
|
|
3321
|
+
0,
|
|
3322
|
+
imageAssets?.themePalette ?? null
|
|
3323
|
+
));
|
|
3324
|
+
}
|
|
3325
|
+
chartsByWorkbookSheetIndex[workbookSheetIndex] = charts;
|
|
3326
|
+
chartsheet.chartIds = charts.map((chart) => chart.id);
|
|
3327
|
+
chartsheet.workbookSheetIndex = workbookSheetIndex;
|
|
3328
|
+
}
|
|
3147
3329
|
const tabs = buildTabs(workbook, chartsheets, visibleSheetIndexByWorkbookSheetIndex, showHiddenSheets);
|
|
3148
|
-
const chartOriginsById = imageAssets ? hydrateWorkbookChartStyles(chartsByWorkbookSheetIndex, imageAssets) : /* @__PURE__ */ new Map();
|
|
3330
|
+
const chartOriginsById = imageAssets ? hydrateWorkbookChartStyles(chartsByWorkbookSheetIndex, imageAssets, chartsheets) : /* @__PURE__ */ new Map();
|
|
3149
3331
|
if (imageAssets) {
|
|
3150
3332
|
for (let index = 0; index < chartsByWorkbookSheetIndex.length; index += 1) {
|
|
3151
3333
|
chartsByWorkbookSheetIndex[index] = (chartsByWorkbookSheetIndex[index] ?? []).filter((chart) => !excludedChartIds.has(chart.id));
|
|
@@ -3616,8 +3798,8 @@ function resolveWorkbookFillStyle(fill, themePalette) {
|
|
|
3616
3798
|
}
|
|
3617
3799
|
|
|
3618
3800
|
// src/images.ts
|
|
3619
|
-
import { strFromU8 as
|
|
3620
|
-
var
|
|
3801
|
+
import { strFromU8 as strFromU83, strToU8 as strToU82, unzipSync, zipSync } from "fflate";
|
|
3802
|
+
var REL_NS2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
|
|
3621
3803
|
var PKG_REL_NS = "http://schemas.openxmlformats.org/package/2006/relationships";
|
|
3622
3804
|
var SPREADSHEET_NS = "http://schemas.openxmlformats.org/spreadsheetml/2006/main";
|
|
3623
3805
|
var CONTENT_TYPES_NS = "http://schemas.openxmlformats.org/package/2006/content-types";
|
|
@@ -3666,6 +3848,19 @@ function measureColumnCharacterWidthPx(fontFamily, fontSizePt) {
|
|
|
3666
3848
|
columnCharacterWidthCache.set(cacheKey, width);
|
|
3667
3849
|
return width;
|
|
3668
3850
|
}
|
|
3851
|
+
function measureOfficeDigitWidthPt(fontFamily, fontSizePt) {
|
|
3852
|
+
const family = fontFamily?.trim() || "Calibri";
|
|
3853
|
+
const size = typeof fontSizePt === "number" && fontSizePt > 0 ? fontSizePt : 11;
|
|
3854
|
+
const key = `office|${family}|${size}`;
|
|
3855
|
+
const cached = columnCharacterWidthCache.get(key);
|
|
3856
|
+
if (cached !== void 0) return cached;
|
|
3857
|
+
const context = typeof document !== "undefined" ? document.createElement("canvas").getContext("2d") : null;
|
|
3858
|
+
if (!context) return 6;
|
|
3859
|
+
context.font = `${size}px ${JSON.stringify(family)}, "React XLSX Carlito"`;
|
|
3860
|
+
const width = Math.max(1, Math.round(Math.max(...Array.from("0123456789", (digit) => context.measureText(digit).width))));
|
|
3861
|
+
columnCharacterWidthCache.set(key, width);
|
|
3862
|
+
return width;
|
|
3863
|
+
}
|
|
3669
3864
|
function sheetColumnWidthToPixels(width, columnCharacterWidthPx = DEFAULT_COLUMN_CHARACTER_WIDTH_PX) {
|
|
3670
3865
|
if (!Number.isFinite(width) || width <= 0) {
|
|
3671
3866
|
return MIN_COL_WIDTH_PX;
|
|
@@ -3838,7 +4033,7 @@ function serializeXml2(document2) {
|
|
|
3838
4033
|
}
|
|
3839
4034
|
function readArchiveText2(archive, path) {
|
|
3840
4035
|
const entry = archive[path];
|
|
3841
|
-
return entry ?
|
|
4036
|
+
return entry ? strFromU83(entry) : null;
|
|
3842
4037
|
}
|
|
3843
4038
|
function parseColumnReference(reference) {
|
|
3844
4039
|
let value = 0;
|
|
@@ -3933,10 +4128,10 @@ function readFeaturePropertyBagCheckboxComplements(archive) {
|
|
|
3933
4128
|
return checkboxComplementIndices;
|
|
3934
4129
|
}
|
|
3935
4130
|
function getRelationshipId(element) {
|
|
3936
|
-
return element.getAttributeNS(
|
|
4131
|
+
return element.getAttributeNS(REL_NS2, "id") ?? element.getAttribute("r:id") ?? element.getAttribute("id");
|
|
3937
4132
|
}
|
|
3938
4133
|
function getEmbeddedRelationshipId(element) {
|
|
3939
|
-
return element.getAttributeNS(
|
|
4134
|
+
return element.getAttributeNS(REL_NS2, "embed") ?? element.getAttribute("r:embed") ?? element.getAttribute("embed");
|
|
3940
4135
|
}
|
|
3941
4136
|
function setChildText(parent, localName, value) {
|
|
3942
4137
|
const child = getFirstChild(parent, localName);
|
|
@@ -4804,6 +4999,18 @@ function parseSheetState(archive, path, options) {
|
|
|
4804
4999
|
options?.defaultFont?.sizePt
|
|
4805
5000
|
);
|
|
4806
5001
|
const defaultRowHeight = Number(sheetFormatNode?.getAttribute("defaultRowHeight") ?? 15);
|
|
5002
|
+
const digitWidthPt = measureOfficeDigitWidthPt(options?.defaultFont?.family, options?.defaultFont?.sizePt);
|
|
5003
|
+
const storedColumnPixels = (width) => Math.max(0, Math.floor(
|
|
5004
|
+
(256 * width + Math.floor(128 / digitWidthPt)) / 256 * digitWidthPt
|
|
5005
|
+
) * (4 / 3));
|
|
5006
|
+
const explicitDefaultWidth = Number(sheetFormatNode?.getAttribute("defaultColWidth") ?? Number.NaN);
|
|
5007
|
+
const baseWidth = Number(sheetFormatNode?.getAttribute("baseColWidth") ?? 8);
|
|
5008
|
+
const officeLayout = {
|
|
5009
|
+
defaultColumnPx: Number.isFinite(explicitDefaultWidth) && explicitDefaultWidth > 0 ? storedColumnPixels(explicitDefaultWidth) : ((Number.isFinite(baseWidth) && baseWidth > 0 ? baseWidth : 8) * digitWidthPt + 5) * (4 / 3),
|
|
5010
|
+
defaultRowPx: (Number.isFinite(defaultRowHeight) && defaultRowHeight > 0 ? defaultRowHeight : 15) * (4 / 3),
|
|
5011
|
+
columns: {},
|
|
5012
|
+
rows: {}
|
|
5013
|
+
};
|
|
4807
5014
|
const defaultColWidth = Number(
|
|
4808
5015
|
sheetFormatNode?.getAttribute("defaultColWidth") ?? sheetFormatNode?.getAttribute("baseColWidth") ?? 8.43
|
|
4809
5016
|
);
|
|
@@ -4837,6 +5044,7 @@ function parseSheetState(archive, path, options) {
|
|
|
4837
5044
|
const styleId = Number(rowNode.getAttribute("s") ?? Number.NaN);
|
|
4838
5045
|
if (rowIndex >= 0 && Number.isFinite(height)) {
|
|
4839
5046
|
rowHeightOverridesPx[rowIndex] = Math.max(MIN_ROW_HEIGHT_PX, Math.round(height * 1.33));
|
|
5047
|
+
officeLayout.rows[rowIndex] = { sourcePx: rowHeightOverridesPx[rowIndex], sizePx: Math.max(0, height * (4 / 3)) };
|
|
4840
5048
|
}
|
|
4841
5049
|
if (rowIndex >= 0 && Number.isFinite(styleId)) {
|
|
4842
5050
|
rowStyleIds[rowIndex] = styleId;
|
|
@@ -4875,6 +5083,7 @@ function parseSheetState(archive, path, options) {
|
|
|
4875
5083
|
if (Number.isFinite(width)) {
|
|
4876
5084
|
const widthPx = sheetColumnWidthToPixels(width, columnWidthCharacterWidthPx);
|
|
4877
5085
|
colWidthOverridesPx[col] = widthPx;
|
|
5086
|
+
officeLayout.columns[col] = { sourcePx: widthPx, sizePx: storedColumnPixels(width) };
|
|
4878
5087
|
}
|
|
4879
5088
|
if (Number.isFinite(styleId)) {
|
|
4880
5089
|
colStyleIds[col] = styleId;
|
|
@@ -4891,6 +5100,7 @@ function parseSheetState(archive, path, options) {
|
|
|
4891
5100
|
colStyleIds,
|
|
4892
5101
|
conditionalFormatRules,
|
|
4893
5102
|
defaultColWidthPx: sheetColumnWidthToPixels(defaultColWidth, columnWidthCharacterWidthPx),
|
|
5103
|
+
officeLayout,
|
|
4894
5104
|
defaultRowHeightPx: Math.max(MIN_ROW_HEIGHT_PX, Math.round(defaultRowHeight * 1.33)),
|
|
4895
5105
|
hasHorizontalMerges: false,
|
|
4896
5106
|
hasVerticalMerges: false,
|
|
@@ -6345,7 +6555,7 @@ function appendSheetDrawingReference(sheetDocument, relationshipId) {
|
|
|
6345
6555
|
return;
|
|
6346
6556
|
}
|
|
6347
6557
|
const drawingNode = sheetDocument.createElementNS(SPREADSHEET_NS, "drawing");
|
|
6348
|
-
drawingNode.setAttributeNS(
|
|
6558
|
+
drawingNode.setAttributeNS(REL_NS2, "r:id", relationshipId);
|
|
6349
6559
|
const successorNames = /* @__PURE__ */ new Set([
|
|
6350
6560
|
"legacyDrawing",
|
|
6351
6561
|
"legacyDrawingHF",
|
|
@@ -7396,6 +7606,7 @@ function buildSheetList(workbook, sheetStatesByWorkbookSheetIndex, themePalette,
|
|
|
7396
7606
|
colStyleIds: sheetState?.colStyleIds ?? {},
|
|
7397
7607
|
conditionalFormatRules: sheetState?.conditionalFormatRules ?? [],
|
|
7398
7608
|
dataValidations: parseWorksheetDataValidations(worksheet),
|
|
7609
|
+
officeLayout: sheetState?.officeLayout,
|
|
7399
7610
|
defaultColWidthPx,
|
|
7400
7611
|
defaultRowHeightPx,
|
|
7401
7612
|
freezePanes: parseWorksheetFreezePanes(worksheet),
|
|
@@ -7485,6 +7696,7 @@ function buildSheetList(workbook, sheetStatesByWorkbookSheetIndex, themePalette,
|
|
|
7485
7696
|
colStyleIds: sheetState?.colStyleIds ?? {},
|
|
7486
7697
|
conditionalFormatRules: sheetState?.conditionalFormatRules ?? [],
|
|
7487
7698
|
dataValidations: parseWorksheetDataValidations(worksheet),
|
|
7699
|
+
officeLayout: sheetState?.officeLayout,
|
|
7488
7700
|
defaultColWidthPx,
|
|
7489
7701
|
defaultRowHeightPx,
|
|
7490
7702
|
freezePanes: parseWorksheetFreezePanes(worksheet),
|
|
@@ -8010,7 +8222,7 @@ function sanitizeSavedWorkbookBytes(bytes) {
|
|
|
8010
8222
|
const archive = unzipSync2(bytes);
|
|
8011
8223
|
const stylesEntry = archive["xl/styles.xml"];
|
|
8012
8224
|
if (stylesEntry) {
|
|
8013
|
-
const stylesXml =
|
|
8225
|
+
const stylesXml = strFromU84(stylesEntry).replace(/&quot;/g, """).replace(/&apos;/g, "'");
|
|
8014
8226
|
archive["xl/styles.xml"] = strToU83(stylesXml);
|
|
8015
8227
|
}
|
|
8016
8228
|
return zipSync2(archive, { level: 6 });
|
|
@@ -8653,7 +8865,7 @@ function useXlsxViewerController(options) {
|
|
|
8653
8865
|
return;
|
|
8654
8866
|
}
|
|
8655
8867
|
if (imageAssetsRef.current && !effectiveSkipXmlParsing) {
|
|
8656
|
-
const chartOriginsById = hydrateWorkbookChartStyles(result.chartsByWorkbookSheetIndex, imageAssetsRef.current);
|
|
8868
|
+
const chartOriginsById = hydrateWorkbookChartStyles(result.chartsByWorkbookSheetIndex, imageAssetsRef.current, result.chartsheets);
|
|
8657
8869
|
chartAssetsRef.current = { ...result, chartOriginsById };
|
|
8658
8870
|
}
|
|
8659
8871
|
setChartsByWorkbookSheetIndex(result.chartsByWorkbookSheetIndex);
|
|
@@ -8878,10 +9090,10 @@ function useXlsxViewerController(options) {
|
|
|
8878
9090
|
return;
|
|
8879
9091
|
}
|
|
8880
9092
|
setImageAssets(workerImageAssets);
|
|
8881
|
-
const chartOriginsById = workerImageAssets ? hydrateWorkbookChartStyles(snapshot.chartsByWorkbookSheetIndex, workerImageAssets) : /* @__PURE__ */ new Map();
|
|
9093
|
+
const chartOriginsById = workerImageAssets ? hydrateWorkbookChartStyles(snapshot.chartsByWorkbookSheetIndex, workerImageAssets, snapshot.chartsheets) : /* @__PURE__ */ new Map();
|
|
8882
9094
|
setFormControlsByWorkbookSheetIndex(snapshot.formControlsByWorkbookSheetIndex);
|
|
8883
9095
|
setWorkbook(null);
|
|
8884
|
-
setSheets(snapshot.sheets);
|
|
9096
|
+
setSheets(snapshot.sheets.map((sheet) => ({ ...sheet, officeLayout: workerImageAssets?.sheetStatesByWorkbookSheetIndex[sheet.workbookSheetIndex]?.officeLayout })));
|
|
8885
9097
|
setChartsByWorkbookSheetIndex(snapshot.chartsByWorkbookSheetIndex);
|
|
8886
9098
|
setChartsheets(snapshot.chartsheets);
|
|
8887
9099
|
setTabs(snapshot.tabs);
|
|
@@ -9134,11 +9346,11 @@ function useXlsxViewerController(options) {
|
|
|
9134
9346
|
}
|
|
9135
9347
|
const workerImageAssets = effectiveSkipXmlParsing ? null : parseWorkbookImageAssets(new Uint8Array(deferredBuffer));
|
|
9136
9348
|
setImageAssets(workerImageAssets);
|
|
9137
|
-
const chartOriginsById = workerImageAssets ? hydrateWorkbookChartStyles(snapshot.chartsByWorkbookSheetIndex, workerImageAssets) : /* @__PURE__ */ new Map();
|
|
9349
|
+
const chartOriginsById = workerImageAssets ? hydrateWorkbookChartStyles(snapshot.chartsByWorkbookSheetIndex, workerImageAssets, snapshot.chartsheets) : /* @__PURE__ */ new Map();
|
|
9138
9350
|
deferredBufferRef.current = null;
|
|
9139
9351
|
setDeferredLoadFileSize(null);
|
|
9140
9352
|
setWorkbook(null);
|
|
9141
|
-
setSheets(snapshot.sheets);
|
|
9353
|
+
setSheets(snapshot.sheets.map((sheet) => ({ ...sheet, officeLayout: workerImageAssets?.sheetStatesByWorkbookSheetIndex[sheet.workbookSheetIndex]?.officeLayout })));
|
|
9142
9354
|
setChartsByWorkbookSheetIndex(snapshot.chartsByWorkbookSheetIndex);
|
|
9143
9355
|
setChartsheets(snapshot.chartsheets);
|
|
9144
9356
|
setTabs(snapshot.tabs);
|
|
@@ -10461,7 +10673,13 @@ function useXlsxViewerController(options) {
|
|
|
10461
10673
|
if (!nextChart) {
|
|
10462
10674
|
return false;
|
|
10463
10675
|
}
|
|
10464
|
-
|
|
10676
|
+
const source = chart.renderSource;
|
|
10677
|
+
const indexedCategoryFormulaChanged = source?.indexedXSeries?.[seriesIndex] && chart.series[seriesIndex]?.categoriesRef?.formula !== nextChart.series[seriesIndex]?.categoriesRef?.formula;
|
|
10678
|
+
updateChart(chartId, {
|
|
10679
|
+
series: nextChart.series,
|
|
10680
|
+
typeGroups: nextChart.typeGroups,
|
|
10681
|
+
renderSource: source?.sourceSeries || indexedCategoryFormulaChanged ? void 0 : source
|
|
10682
|
+
});
|
|
10465
10683
|
const selectedSeries = nextChart.series[seriesIndex];
|
|
10466
10684
|
if (selectedSeries) {
|
|
10467
10685
|
setSelectedChartElement((current) => current && current.chartId === chartId && current.kind !== "chart" ? {
|