@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
|
@@ -1,10 +1,14 @@
|
|
|
1
|
+
import {
|
|
2
|
+
loadSpreadsheetFonts
|
|
3
|
+
} from "./chunk-LY4EWUKF.js";
|
|
1
4
|
import {
|
|
2
5
|
chartRenderer,
|
|
3
6
|
officeChartRenderer,
|
|
7
|
+
officeExtendedChartRenderer,
|
|
4
8
|
preloadChartRenderers,
|
|
5
|
-
|
|
9
|
+
suppliedOfficeChartRenderer,
|
|
6
10
|
useChartModule
|
|
7
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-BFSDKYQU.js";
|
|
8
12
|
import {
|
|
9
13
|
getBuiltinChartColor,
|
|
10
14
|
getBuiltinChartSurfaceStyle,
|
|
@@ -294,28 +298,82 @@ function localizeRows(worksheet, rows, locale = "en-US") {
|
|
|
294
298
|
}
|
|
295
299
|
}
|
|
296
300
|
|
|
297
|
-
// src/spreadsheet-fonts.ts
|
|
298
|
-
var fontLoadPromise;
|
|
299
|
-
var SPREADSHEET_FALLBACK_FONT = "React XLSX Carlito";
|
|
300
|
-
function loadSpreadsheetFonts() {
|
|
301
|
-
if (typeof document === "undefined" || typeof FontFace === "undefined") {
|
|
302
|
-
return Promise.resolve();
|
|
303
|
-
}
|
|
304
|
-
return fontLoadPromise ??= import("./spreadsheet-font-assets-V366MXRM.js").then(async ({ spreadsheetFontFaces }) => {
|
|
305
|
-
await Promise.allSettled(spreadsheetFontFaces.map(async ({ source, ...descriptors }) => {
|
|
306
|
-
const face = new FontFace(SPREADSHEET_FALLBACK_FONT, `url(${JSON.stringify(source)})`, descriptors);
|
|
307
|
-
await face.load();
|
|
308
|
-
document.fonts.add(face);
|
|
309
|
-
}));
|
|
310
|
-
}).catch(() => {
|
|
311
|
-
});
|
|
312
|
-
}
|
|
313
|
-
|
|
314
301
|
// src/controller.tsx
|
|
315
|
-
import { strFromU8 as
|
|
302
|
+
import { strFromU8 as strFromU84, strToU8 as strToU83, unzipSync as unzipSync2, zipSync as zipSync2 } from "fflate";
|
|
303
|
+
|
|
304
|
+
// src/chartsheet-payload.ts
|
|
305
|
+
import { strFromU8 } from "fflate";
|
|
306
|
+
var REL_NS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
|
|
307
|
+
function readXml(archive, path) {
|
|
308
|
+
const bytes = archive[path];
|
|
309
|
+
if (!bytes || typeof DOMParser === "undefined") return null;
|
|
310
|
+
const document2 = new DOMParser().parseFromString(strFromU8(bytes), "application/xml");
|
|
311
|
+
return document2.getElementsByTagName("parsererror").length > 0 ? null : document2;
|
|
312
|
+
}
|
|
313
|
+
function relationshipPath(partPath) {
|
|
314
|
+
const separator = partPath.lastIndexOf("/");
|
|
315
|
+
return `${partPath.slice(0, separator + 1)}_rels/${partPath.slice(separator + 1)}.rels`;
|
|
316
|
+
}
|
|
317
|
+
function resolveTarget(partPath, target) {
|
|
318
|
+
if (/^[a-z][a-z0-9+.-]*:/i.test(target) || target.startsWith("//")) return null;
|
|
319
|
+
const segments = target.startsWith("/") ? [] : partPath.split("/").slice(0, -1);
|
|
320
|
+
for (const segment of target.replace(/\\/g, "/").split("/")) {
|
|
321
|
+
if (!segment || segment === ".") continue;
|
|
322
|
+
if (segment === "..") {
|
|
323
|
+
if (segments.length === 0) return null;
|
|
324
|
+
segments.pop();
|
|
325
|
+
} else {
|
|
326
|
+
segments.push(segment);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
return segments.join("/");
|
|
330
|
+
}
|
|
331
|
+
function readRelationships(archive, partPath) {
|
|
332
|
+
const relationships = /* @__PURE__ */ new Map();
|
|
333
|
+
const document2 = readXml(archive, relationshipPath(partPath));
|
|
334
|
+
for (const element of Array.from(document2?.getElementsByTagNameNS("*", "Relationship") ?? [])) {
|
|
335
|
+
if (element.getAttribute("TargetMode") === "External") continue;
|
|
336
|
+
const id = element.getAttribute("Id");
|
|
337
|
+
const rawTarget = element.getAttribute("Target");
|
|
338
|
+
const type = element.getAttribute("Type");
|
|
339
|
+
const target = rawTarget ? resolveTarget(partPath, rawTarget) : null;
|
|
340
|
+
if (id && type && target && archive[target]) relationships.set(id, { target, type });
|
|
341
|
+
}
|
|
342
|
+
return relationships;
|
|
343
|
+
}
|
|
344
|
+
function collectChartsheetDrawingOrigins(archive, chartsheets) {
|
|
345
|
+
const origins = /* @__PURE__ */ new Map();
|
|
346
|
+
if (chartsheets.length === 0) return origins;
|
|
347
|
+
const workbookPath = "xl/workbook.xml";
|
|
348
|
+
const workbookDocument = readXml(archive, workbookPath);
|
|
349
|
+
const workbookRelationships = readRelationships(archive, workbookPath);
|
|
350
|
+
for (const sheet of Array.from(workbookDocument?.getElementsByTagNameNS("*", "sheet") ?? [])) {
|
|
351
|
+
const relationshipId = sheet.getAttributeNS(REL_NS, "id") ?? sheet.getAttribute("r:id");
|
|
352
|
+
const relationship = relationshipId ? workbookRelationships.get(relationshipId) : null;
|
|
353
|
+
if (!relationship?.type.endsWith("/chartsheet")) continue;
|
|
354
|
+
const chartsheet = chartsheets.find((entry) => entry.name === sheet.getAttribute("name"));
|
|
355
|
+
if (!chartsheet || chartsheet.workbookSheetIndex == null) continue;
|
|
356
|
+
const sheetDocument = readXml(archive, relationship.target);
|
|
357
|
+
const sheetRelationships = readRelationships(archive, relationship.target);
|
|
358
|
+
const attachments = [];
|
|
359
|
+
for (const drawing of Array.from(sheetDocument?.getElementsByTagNameNS("*", "drawing") ?? [])) {
|
|
360
|
+
const drawingId = drawing.getAttributeNS(REL_NS, "id") ?? drawing.getAttribute("r:id");
|
|
361
|
+
const drawingRelationship = drawingId ? sheetRelationships.get(drawingId) : null;
|
|
362
|
+
if (!drawingRelationship?.type.endsWith("/drawing")) continue;
|
|
363
|
+
const drawingRelsPath = relationshipPath(drawingRelationship.target);
|
|
364
|
+
attachments.push({
|
|
365
|
+
drawingPath: drawingRelationship.target,
|
|
366
|
+
drawingRelsPath: archive[drawingRelsPath] ? drawingRelsPath : null,
|
|
367
|
+
mediaPaths: []
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
origins.set(chartsheet.index, { attachments, workbookSheetIndex: chartsheet.workbookSheetIndex });
|
|
371
|
+
}
|
|
372
|
+
return origins;
|
|
373
|
+
}
|
|
316
374
|
|
|
317
375
|
// src/charts.ts
|
|
318
|
-
import { strFromU8, strToU8 } from "fflate";
|
|
376
|
+
import { strFromU8 as strFromU82, strToU8 } from "fflate";
|
|
319
377
|
var CHART_NS = "http://schemas.openxmlformats.org/drawingml/2006/chart";
|
|
320
378
|
var DRAWINGML_NS = "http://schemas.openxmlformats.org/drawingml/2006/main";
|
|
321
379
|
var CHART_REL_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart";
|
|
@@ -464,18 +522,33 @@ function applyChartSeriesFormula(chart, seriesIndex, formula, workbook) {
|
|
|
464
522
|
}
|
|
465
523
|
const categoriesRef = {
|
|
466
524
|
...currentSeries.categoriesRef ?? {},
|
|
467
|
-
formula: parsed.categoryFormula
|
|
525
|
+
formula: parsed.categoryFormula,
|
|
526
|
+
values: parsed.categoryFormula === currentSeries.categoriesRef?.formula ? currentSeries.categoriesRef.values : void 0
|
|
468
527
|
};
|
|
469
528
|
const valuesRef = {
|
|
470
529
|
...currentSeries.valuesRef ?? {},
|
|
471
|
-
formula: parsed.valueFormula
|
|
530
|
+
formula: parsed.valueFormula,
|
|
531
|
+
values: parsed.valueFormula === currentSeries.valuesRef?.formula ? currentSeries.valuesRef.values : void 0
|
|
472
532
|
};
|
|
473
533
|
const bubbleSizeRef = chart.chartType === "Bubble" || parsed.bubbleSizeFormula ? {
|
|
474
534
|
...currentSeries.bubbleSizeRef ?? {},
|
|
475
|
-
formula: parsed.bubbleSizeFormula
|
|
535
|
+
formula: parsed.bubbleSizeFormula,
|
|
536
|
+
values: parsed.bubbleSizeFormula === currentSeries.bubbleSizeRef?.formula ? currentSeries.bubbleSizeRef?.values : void 0
|
|
476
537
|
} : currentSeries.bubbleSizeRef ?? null;
|
|
538
|
+
const isUnresolved = (formula2) => Boolean(
|
|
539
|
+
workbook && formula2 && !resolveReferenceSheet(workbook, chart.workbookSheetIndex, formula2).sheet
|
|
540
|
+
);
|
|
541
|
+
const resolveEditedReference = (reference, currentReference, currentValues, mode) => {
|
|
542
|
+
if (!workbook) return currentValues;
|
|
543
|
+
if (reference?.formula === currentReference?.formula && isUnresolved(reference?.formula)) return currentValues;
|
|
544
|
+
return resolveReferenceValues(workbook, chart.workbookSheetIndex, reference, mode);
|
|
545
|
+
};
|
|
477
546
|
const raw = {
|
|
478
|
-
...currentSeries.raw ?? {}
|
|
547
|
+
...currentSeries.raw ?? {},
|
|
548
|
+
unresolvedCategoriesReference: isUnresolved(categoriesRef.formula),
|
|
549
|
+
unresolvedValuesReference: isUnresolved(valuesRef.formula),
|
|
550
|
+
unresolvedBubbleSizeReference: isUnresolved(bubbleSizeRef?.formula),
|
|
551
|
+
unresolvedNameReference: isUnresolved(parsed.nameFormula)
|
|
479
552
|
};
|
|
480
553
|
if (parsed.nameFormula) {
|
|
481
554
|
raw.name = parsed.nameFormula;
|
|
@@ -485,17 +558,21 @@ function applyChartSeriesFormula(chart, seriesIndex, formula, workbook) {
|
|
|
485
558
|
const nextSeries = {
|
|
486
559
|
...currentSeries,
|
|
487
560
|
bubbleSizeRef,
|
|
488
|
-
bubbleSizes:
|
|
489
|
-
categories:
|
|
561
|
+
bubbleSizes: resolveEditedReference(bubbleSizeRef, currentSeries.bubbleSizeRef, currentSeries.bubbleSizes ?? [], "value").map((value) => typeof value === "number" && Number.isFinite(value) ? value : null),
|
|
562
|
+
categories: resolveEditedReference(categoriesRef, currentSeries.categoriesRef, currentSeries.categories, "category"),
|
|
490
563
|
categoriesRef,
|
|
491
|
-
name: parsed.nameLiteral ?? (parsed.nameFormula && workbook ? resolveSeriesName(workbook, chart.workbookSheetIndex, parsed.nameFormula) : parsed.nameFormula ?? currentSeries.name),
|
|
564
|
+
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),
|
|
492
565
|
raw,
|
|
493
|
-
values:
|
|
566
|
+
values: resolveEditedReference(valuesRef, currentSeries.valuesRef, currentSeries.values, "value").map((value) => typeof value === "number" && Number.isFinite(value) ? value : null),
|
|
494
567
|
valuesRef
|
|
495
568
|
};
|
|
496
569
|
return {
|
|
497
570
|
...chart,
|
|
498
|
-
series: chart.series.map((series, index) => index === seriesIndex ? nextSeries : series)
|
|
571
|
+
series: chart.series.map((series, index) => index === seriesIndex ? nextSeries : series),
|
|
572
|
+
typeGroups: chart.typeGroups?.map((group) => ({
|
|
573
|
+
...group,
|
|
574
|
+
series: group.series.map((series) => series.id === currentSeries.id ? nextSeries : series)
|
|
575
|
+
}))
|
|
499
576
|
};
|
|
500
577
|
}
|
|
501
578
|
function normalizeWorksheetVisibility(value) {
|
|
@@ -1201,9 +1278,10 @@ function applyBuiltinChartDefaults(chart, themePalette) {
|
|
|
1201
1278
|
};
|
|
1202
1279
|
};
|
|
1203
1280
|
chart.series = chart.series.map(applySeriesDefaults);
|
|
1281
|
+
const canonicalSeries = chart.id.startsWith("chart-ex-") ? null : new Map(chart.series.map((series) => [series.id, series]));
|
|
1204
1282
|
let groupSeriesOffset = 0;
|
|
1205
1283
|
chart.typeGroups = chart.typeGroups?.map((group) => {
|
|
1206
|
-
const series = group.series.map((entry, index) => applySeriesDefaults(entry, groupSeriesOffset + index));
|
|
1284
|
+
const series = group.series.map((entry, index) => canonicalSeries?.get(entry.id) ?? applySeriesDefaults(entry, groupSeriesOffset + index));
|
|
1207
1285
|
groupSeriesOffset += group.series.length;
|
|
1208
1286
|
return { ...group, series };
|
|
1209
1287
|
});
|
|
@@ -1347,11 +1425,12 @@ function applyChartSeriesStyleFromXml(chart, chartTypeNode, themePalette) {
|
|
|
1347
1425
|
const rawFillColor = typeof existingShapeProperties?.solidFillHex === "string" ? normalizeHexColor(existingShapeProperties.solidFillHex) : null;
|
|
1348
1426
|
const rawLineColor = typeof existingShapeProperties?.lineColorHex === "string" ? normalizeHexColor(existingShapeProperties.lineColorHex) : null;
|
|
1349
1427
|
const resolvedLineColor = lineStyle.hidden ? void 0 : rawLineColor ?? lineStyle.color ?? rawFillColor ?? fillColor ?? series.lineColor ?? series.color;
|
|
1350
|
-
const hasCategoryReference = typeof series.categoriesRef?.formula === "string" && series.categoriesRef.formula.length > 0;
|
|
1351
|
-
const hasValueReference = typeof series.valuesRef?.formula === "string" && series.valuesRef.formula.length > 0;
|
|
1352
|
-
const hasBubbleSizeReference = typeof series.bubbleSizeRef?.formula === "string" && series.bubbleSizeRef.formula.length > 0;
|
|
1428
|
+
const hasCategoryReference = typeof series.categoriesRef?.formula === "string" && series.categoriesRef.formula.length > 0 && !series.raw?.unresolvedCategoriesReference;
|
|
1429
|
+
const hasValueReference = typeof series.valuesRef?.formula === "string" && series.valuesRef.formula.length > 0 && !series.raw?.unresolvedValuesReference;
|
|
1430
|
+
const hasBubbleSizeReference = typeof series.bubbleSizeRef?.formula === "string" && series.bubbleSizeRef.formula.length > 0 && !series.raw?.unresolvedBubbleSizeReference;
|
|
1353
1431
|
return {
|
|
1354
1432
|
...series,
|
|
1433
|
+
name: series.raw?.unresolvedNameReference ? parseChartCacheValues(getFirstLocalChild(seriesNode, "tx"), "strCache", "category")?.[0]?.toString() ?? series.name : series.name,
|
|
1355
1434
|
bubbleSizes: !hasBubbleSizeReference && cachedBubbleSizes ? cachedBubbleSizes.map((value) => typeof value === "number" && Number.isFinite(value) ? value : null) : series.bubbleSizes,
|
|
1356
1435
|
categories: !hasCategoryReference && cachedCategories ? cachedCategories : series.categories,
|
|
1357
1436
|
color: rawFillColor ?? rawLineColor ?? fillColor ?? lineStyle.color ?? series.color,
|
|
@@ -1611,6 +1690,23 @@ function applyChartStyleFromXml(chart, chartPath, archive, themePalette) {
|
|
|
1611
1690
|
if (typeof fallbackStyleId === "number" && Number.isFinite(fallbackStyleId)) {
|
|
1612
1691
|
chart.chartStyleId = fallbackStyleId;
|
|
1613
1692
|
}
|
|
1693
|
+
const sourceSeries = chart.raw?.officeSourceSeries;
|
|
1694
|
+
if (sourceSeries && chartDocument?.documentElement.namespaceURI === "http://schemas.microsoft.com/office/drawing/2014/chartex") {
|
|
1695
|
+
chart.renderSource = {
|
|
1696
|
+
kind: chart.chartExLayout ?? "",
|
|
1697
|
+
seriesTypes: getLocalDescendants(chartNode, "series").map((node) => node.getAttribute("layoutId") ?? ""),
|
|
1698
|
+
sourceSeries,
|
|
1699
|
+
experimental: true,
|
|
1700
|
+
xml: chartXml,
|
|
1701
|
+
themeColors: themePalette ? Object.fromEntries(Object.entries(THEME_COLOR_INDEX_BY_NAME).flatMap(([key, index]) => {
|
|
1702
|
+
const color = themePalette.colorsByIndex[index];
|
|
1703
|
+
return color ? [[key, color]] : [];
|
|
1704
|
+
})) : void 0,
|
|
1705
|
+
themeOverrideXml: readArchiveText(archive, relationships.get("http://schemas.openxmlformats.org/officeDocument/2006/relationships/themeOverride")) ?? void 0,
|
|
1706
|
+
styleXml: readArchiveText(archive, relationships.get(CHART_STYLE_REL_TYPE)) ?? void 0,
|
|
1707
|
+
colorStyleXml: readArchiveText(archive, relationships.get(CHART_COLOR_STYLE_REL_TYPE)) ?? void 0
|
|
1708
|
+
};
|
|
1709
|
+
}
|
|
1614
1710
|
applyModernChartExStyles();
|
|
1615
1711
|
applyFallbackSeriesStyles();
|
|
1616
1712
|
applyBuiltinChartDefaults(chart, themePalette);
|
|
@@ -1852,11 +1948,22 @@ function applyChartStyleFromXml(chart, chartPath, archive, themePalette) {
|
|
|
1852
1948
|
chart.axes = [...chart.axes, seriesAxis];
|
|
1853
1949
|
}
|
|
1854
1950
|
}
|
|
1855
|
-
const
|
|
1856
|
-
const
|
|
1857
|
-
|
|
1951
|
+
const groups = Array.from(plotArea.children).filter((entry) => entry.localName.endsWith("Chart"));
|
|
1952
|
+
const seriesTypes = groups.flatMap((group) => getLocalChildren(group, "ser").map(() => group.localName.slice(0, -5)));
|
|
1953
|
+
const seriesNodes = groups.flatMap((group) => getLocalChildren(group, "ser"));
|
|
1954
|
+
const indexedXSeries = seriesNodes.map((series) => {
|
|
1955
|
+
const x2 = getFirstLocalChild(series, "xVal");
|
|
1956
|
+
return Boolean(x2 && (getFirstLocalChild(x2, "multiLvlStrRef") || getFirstLocalChild(x2, "strRef") || getFirstLocalChild(x2, "strLit")));
|
|
1957
|
+
});
|
|
1958
|
+
const unsupportedHierarchy = getLocalDescendants(plotArea, "multiLvlStrRef").some((node) => node.parentElement?.localName !== "xVal");
|
|
1959
|
+
const kind = chartTypeNode.localName.slice(0, -5);
|
|
1960
|
+
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");
|
|
1961
|
+
if (seriesTypes.length === chart.series.length && !unsupportedHierarchy && !plotArea.querySelector("pictureOptions")) {
|
|
1858
1962
|
chart.renderSource = {
|
|
1859
1963
|
kind,
|
|
1964
|
+
seriesTypes,
|
|
1965
|
+
indexedXSeries,
|
|
1966
|
+
experimental: !stable,
|
|
1860
1967
|
xml: chartXml,
|
|
1861
1968
|
themeColors: themePalette ? Object.fromEntries(Object.entries(THEME_COLOR_INDEX_BY_NAME).flatMap(([key, index]) => {
|
|
1862
1969
|
const color = themePalette.colorsByIndex[index];
|
|
@@ -1867,7 +1974,21 @@ function applyChartStyleFromXml(chart, chartPath, archive, themePalette) {
|
|
|
1867
1974
|
colorStyleXml: readArchiveText(archive, relationships.get(CHART_COLOR_STYLE_REL_TYPE)) ?? void 0
|
|
1868
1975
|
};
|
|
1869
1976
|
}
|
|
1870
|
-
|
|
1977
|
+
if (groups.length > 1 && chart.typeGroups?.length === groups.length) {
|
|
1978
|
+
let seriesOffset = 0;
|
|
1979
|
+
const hydratedSeries = [];
|
|
1980
|
+
chart.typeGroups = chart.typeGroups.map((group, index) => {
|
|
1981
|
+
const count = getLocalChildren(groups[index], "ser").length;
|
|
1982
|
+
const groupChart = { ...chart, chartType: group.chartType, series: chart.series.slice(seriesOffset, seriesOffset + count) };
|
|
1983
|
+
applyChartSeriesStyleFromXml(groupChart, groups[index], themePalette);
|
|
1984
|
+
seriesOffset += count;
|
|
1985
|
+
hydratedSeries.push(...groupChart.series);
|
|
1986
|
+
return { ...group, series: groupChart.series };
|
|
1987
|
+
});
|
|
1988
|
+
chart.series = [...hydratedSeries, ...chart.series.slice(seriesOffset)];
|
|
1989
|
+
} else {
|
|
1990
|
+
applyChartSeriesStyleFromXml(chart, chartTypeNode, themePalette);
|
|
1991
|
+
}
|
|
1871
1992
|
applyFallbackSeriesStyles();
|
|
1872
1993
|
applyBuiltinChartDefaults(chart, themePalette);
|
|
1873
1994
|
}
|
|
@@ -1918,7 +2039,7 @@ function readArchiveText(archive, path) {
|
|
|
1918
2039
|
return null;
|
|
1919
2040
|
}
|
|
1920
2041
|
const entry = archive[normalizeArchivePath(path)];
|
|
1921
|
-
return entry ?
|
|
2042
|
+
return entry ? strFromU82(entry) : null;
|
|
1922
2043
|
}
|
|
1923
2044
|
function parseXml(xml) {
|
|
1924
2045
|
if (typeof DOMParser === "undefined") {
|
|
@@ -2054,8 +2175,8 @@ function resolveReferenceSheet(workbook, fallbackSheetIndex, formula) {
|
|
|
2054
2175
|
if (!formula) {
|
|
2055
2176
|
return {
|
|
2056
2177
|
range: null,
|
|
2057
|
-
sheet: workbook.getSheet(fallbackSheetIndex),
|
|
2058
|
-
sheetName: workbook.getSheet(fallbackSheetIndex)?.name ?? ""
|
|
2178
|
+
sheet: fallbackSheetIndex < workbook.sheetCount ? workbook.getSheet(fallbackSheetIndex) : null,
|
|
2179
|
+
sheetName: fallbackSheetIndex < workbook.sheetCount ? workbook.getSheet(fallbackSheetIndex)?.name ?? "" : ""
|
|
2059
2180
|
};
|
|
2060
2181
|
}
|
|
2061
2182
|
const trimmedFormula = formula.trim();
|
|
@@ -2072,8 +2193,8 @@ function resolveReferenceSheet(workbook, fallbackSheetIndex, formula) {
|
|
|
2072
2193
|
if (!split) {
|
|
2073
2194
|
return {
|
|
2074
2195
|
range: parseA1Range(trimmedFormula),
|
|
2075
|
-
sheet: workbook.getSheet(fallbackSheetIndex),
|
|
2076
|
-
sheetName: workbook.getSheet(fallbackSheetIndex)?.name ?? ""
|
|
2196
|
+
sheet: fallbackSheetIndex < workbook.sheetCount ? workbook.getSheet(fallbackSheetIndex) : null,
|
|
2197
|
+
sheetName: fallbackSheetIndex < workbook.sheetCount ? workbook.getSheet(fallbackSheetIndex)?.name ?? "" : ""
|
|
2077
2198
|
};
|
|
2078
2199
|
}
|
|
2079
2200
|
try {
|
|
@@ -2085,8 +2206,8 @@ function resolveReferenceSheet(workbook, fallbackSheetIndex, formula) {
|
|
|
2085
2206
|
} catch {
|
|
2086
2207
|
return {
|
|
2087
2208
|
range: parseA1Range(split.range),
|
|
2088
|
-
sheet:
|
|
2089
|
-
sheetName:
|
|
2209
|
+
sheet: null,
|
|
2210
|
+
sheetName: split.sheetName
|
|
2090
2211
|
};
|
|
2091
2212
|
}
|
|
2092
2213
|
}
|
|
@@ -2355,6 +2476,7 @@ function buildChartExParetoLineSeries(series, sourceRaw, index) {
|
|
|
2355
2476
|
});
|
|
2356
2477
|
return {
|
|
2357
2478
|
...series,
|
|
2479
|
+
id: series.id.replace(/-series-\d+$/, `-series-${index}`),
|
|
2358
2480
|
color: void 0,
|
|
2359
2481
|
lineColor: void 0,
|
|
2360
2482
|
markerColor: void 0,
|
|
@@ -2617,7 +2739,7 @@ function normalizeChartExChart(workbook, workbookSheetIndex, visibleSheetIndex,
|
|
|
2617
2739
|
name: typeof drawing.name === "string" ? drawing.name : chartTitle,
|
|
2618
2740
|
overlap: void 0,
|
|
2619
2741
|
plotVisibleOnly: void 0,
|
|
2620
|
-
raw: chart,
|
|
2742
|
+
raw: { ...chart, officeSourceSeries: normalizedSeries },
|
|
2621
2743
|
radarStyle: void 0,
|
|
2622
2744
|
scatterStyle: void 0,
|
|
2623
2745
|
roundedCorners: void 0,
|
|
@@ -3085,7 +3207,13 @@ function normalizeChartSeries(workbook, workbookSheetIndex, chartId, raw, index)
|
|
|
3085
3207
|
name: resolveSeriesName(workbook, workbookSheetIndex, series.name),
|
|
3086
3208
|
negativeColor: void 0,
|
|
3087
3209
|
negativeLineColor: void 0,
|
|
3088
|
-
raw:
|
|
3210
|
+
raw: {
|
|
3211
|
+
...series,
|
|
3212
|
+
unresolvedCategoriesReference: Boolean(categoriesRef?.formula && !resolveReferenceSheet(workbook, workbookSheetIndex, categoriesRef.formula).sheet),
|
|
3213
|
+
unresolvedValuesReference: Boolean(valuesRef?.formula && !resolveReferenceSheet(workbook, workbookSheetIndex, valuesRef.formula).sheet),
|
|
3214
|
+
unresolvedBubbleSizeReference: Boolean(bubbleSizeRef?.formula && !resolveReferenceSheet(workbook, workbookSheetIndex, bubbleSizeRef.formula).sheet),
|
|
3215
|
+
unresolvedNameReference: typeof series.name === "string" && series.name.includes("!") && !resolveReferenceSheet(workbook, workbookSheetIndex, series.name).sheet
|
|
3216
|
+
},
|
|
3089
3217
|
shapeProperties,
|
|
3090
3218
|
smooth: typeof series.smooth === "boolean" ? series.smooth : void 0,
|
|
3091
3219
|
values: resolveReferenceValues(workbook, workbookSheetIndex, valuesRef, "value").map((value) => typeof value === "number" && Number.isFinite(value) ? value : null),
|
|
@@ -3147,12 +3275,15 @@ function buildTabs(workbook, chartsheets, visibleSheetIndexByWorkbookSheetIndex,
|
|
|
3147
3275
|
const slotIndex = typeof entry.index === "number" ? entry.index : index;
|
|
3148
3276
|
if (slotType === "chartsheet") {
|
|
3149
3277
|
const chartsheet = chartsheets[slotIndex];
|
|
3278
|
+
const visibility2 = normalizeWorksheetVisibility(chartsheet?.raw?.visibility);
|
|
3279
|
+
if (!showHiddenSheets && visibility2 !== "visible") return [];
|
|
3150
3280
|
return chartsheet ? [{
|
|
3151
3281
|
chartsheetIndex: slotIndex,
|
|
3152
3282
|
id: `chartsheet-${slotIndex}`,
|
|
3153
3283
|
index,
|
|
3154
3284
|
kind: "chartsheet",
|
|
3155
|
-
name: chartsheet.name
|
|
3285
|
+
name: chartsheet.name,
|
|
3286
|
+
visibility: visibility2
|
|
3156
3287
|
}] : [];
|
|
3157
3288
|
}
|
|
3158
3289
|
const worksheet = workbook.getSheet(slotIndex);
|
|
@@ -3256,9 +3387,24 @@ function applyChartOrigins(chartsByWorkbookSheetIndex, chartOriginsById, archive
|
|
|
3256
3387
|
});
|
|
3257
3388
|
}
|
|
3258
3389
|
}
|
|
3259
|
-
function hydrateWorkbookChartStyles(chartsByWorkbookSheetIndex, imageAssets) {
|
|
3390
|
+
function hydrateWorkbookChartStyles(chartsByWorkbookSheetIndex, imageAssets, chartsheets = []) {
|
|
3260
3391
|
const chartOriginsById = /* @__PURE__ */ new Map();
|
|
3261
3392
|
applyChartOrigins(chartsByWorkbookSheetIndex, chartOriginsById, imageAssets.archive, imageAssets.sheetOrigins);
|
|
3393
|
+
const chartsheetOrigins = collectChartsheetDrawingOrigins(imageAssets.archive, chartsheets);
|
|
3394
|
+
for (const chartsheet of chartsheets) {
|
|
3395
|
+
if (chartsheet.workbookSheetIndex == null) continue;
|
|
3396
|
+
const charts = chartsByWorkbookSheetIndex[chartsheet.workbookSheetIndex] ?? [];
|
|
3397
|
+
const origins = collectChartOriginsForSheet(imageAssets.archive, chartsheetOrigins.get(chartsheet.index) ?? null);
|
|
3398
|
+
for (const chart of charts) {
|
|
3399
|
+
const kind = chart.id.startsWith("chart-ex-") ? "modern" : "classic";
|
|
3400
|
+
const origin = origins.find((entry) => entry.chartKind === kind);
|
|
3401
|
+
if (!origin) continue;
|
|
3402
|
+
if (origin.anchor) chart.anchor = origin.anchor;
|
|
3403
|
+
chart.chartPath = origin.chartPath ?? void 0;
|
|
3404
|
+
chartsheet.chartPath = chart.chartPath;
|
|
3405
|
+
chartOriginsById.set(chart.id, origin);
|
|
3406
|
+
}
|
|
3407
|
+
}
|
|
3262
3408
|
for (const charts of chartsByWorkbookSheetIndex) {
|
|
3263
3409
|
for (const chart of charts) {
|
|
3264
3410
|
applyChartStyleFromXml(chart, chart.chartPath, imageAssets.archive, imageAssets.themePalette);
|
|
@@ -3267,6 +3413,84 @@ function hydrateWorkbookChartStyles(chartsByWorkbookSheetIndex, imageAssets) {
|
|
|
3267
3413
|
}
|
|
3268
3414
|
return chartOriginsById;
|
|
3269
3415
|
}
|
|
3416
|
+
function normalizeClassicChartDrawing(workbook, workbookSheetIndex, visibleSheetIndex, rawChart, chartIndex, chartId = `chart-${workbookSheetIndex}-${chartIndex}`) {
|
|
3417
|
+
const drawing = rawChart && typeof rawChart === "object" ? rawChart : {};
|
|
3418
|
+
const chart = drawing.chart && typeof drawing.chart === "object" ? drawing.chart : {};
|
|
3419
|
+
const rawView3d = chart.view3D && typeof chart.view3D === "object" ? chart.view3D : null;
|
|
3420
|
+
const rawSeries = Array.isArray(chart.series) ? chart.series : [];
|
|
3421
|
+
const typeGroups = Array.isArray(chart.typeGroups) ? chart.typeGroups.map((entry, groupIndex) => normalizeChartTypeGroup(workbook, workbookSheetIndex, chartId, entry, groupIndex)).filter((value) => value != null) : [];
|
|
3422
|
+
let seriesOrdinal = 0;
|
|
3423
|
+
const series = typeGroups.some((group) => group.series.length > 0) ? typeGroups.flatMap((group) => {
|
|
3424
|
+
group.series = group.series.map((entry) => ({ ...entry, id: `${chartId}-series-${seriesOrdinal++}` }));
|
|
3425
|
+
return group.series;
|
|
3426
|
+
}) : rawSeries.map((entry, seriesIndex) => normalizeChartSeries(workbook, workbookSheetIndex, chartId, entry, seriesIndex));
|
|
3427
|
+
const chartLevelDataLabels = normalizeChartDataLabels(chart.dataLabels);
|
|
3428
|
+
const firstSeriesDataLabels = rawSeries.length > 0 && rawSeries[0] && typeof rawSeries[0] === "object" ? normalizeChartDataLabels(rawSeries[0].dataLabels) : null;
|
|
3429
|
+
return {
|
|
3430
|
+
anchor: normalizeChartAnchor(drawing.anchor),
|
|
3431
|
+
autoTitleDeleted: typeof chart.autoTitleDeleted === "boolean" ? chart.autoTitleDeleted : void 0,
|
|
3432
|
+
axes: Array.isArray(chart.axes) ? chart.axes.map(normalizeChartAxis).filter((value) => Boolean(value)) : [],
|
|
3433
|
+
axisLabelColor: void 0,
|
|
3434
|
+
axisLineColor: void 0,
|
|
3435
|
+
categoryAxis: normalizeChartAxis(chart.categoryAxis),
|
|
3436
|
+
chartAreaBorderColor: void 0,
|
|
3437
|
+
chartAreaFillColor: void 0,
|
|
3438
|
+
chartColorPalette: void 0,
|
|
3439
|
+
chartColorPaletteOffset: void 0,
|
|
3440
|
+
chartPath: void 0,
|
|
3441
|
+
chartStyleId: void 0,
|
|
3442
|
+
chartType: typeof chart.chartType === "string" ? chart.chartType : "ColumnClustered",
|
|
3443
|
+
dataLabels: chartLevelDataLabels ?? firstSeriesDataLabels,
|
|
3444
|
+
displayBlanksAs: typeof chart.displayBlanksAs === "string" ? chart.displayBlanksAs : void 0,
|
|
3445
|
+
editable: true,
|
|
3446
|
+
firstSliceAngle: typeof chart.firstSliceAngle === "number" ? chart.firstSliceAngle : void 0,
|
|
3447
|
+
fontFamily: void 0,
|
|
3448
|
+
gapWidth: typeof chart.gapWidth === "number" ? chart.gapWidth : void 0,
|
|
3449
|
+
holeSize: typeof chart.holeSize === "number" ? chart.holeSize : void 0,
|
|
3450
|
+
id: chartId,
|
|
3451
|
+
is3d: typeof chart.is3D === "boolean" ? chart.is3D : typeof chart.is3d === "boolean" ? chart.is3d : void 0,
|
|
3452
|
+
legend: normalizeLegend(chart.legend) ? {
|
|
3453
|
+
...normalizeLegend(chart.legend),
|
|
3454
|
+
position: normalizeLegendPosition(normalizeLegend(chart.legend)?.position)
|
|
3455
|
+
} : null,
|
|
3456
|
+
name: typeof drawing.name === "string" ? drawing.name : void 0,
|
|
3457
|
+
overlap: typeof chart.overlap === "number" ? chart.overlap : void 0,
|
|
3458
|
+
plotVisibleOnly: typeof chart.plotVisibleOnly === "boolean" ? chart.plotVisibleOnly : void 0,
|
|
3459
|
+
raw: chart,
|
|
3460
|
+
radarStyle: typeof chart.radarStyle === "string" ? chart.radarStyle : void 0,
|
|
3461
|
+
scatterStyle: typeof chart.scatterStyle === "string" ? chart.scatterStyle : void 0,
|
|
3462
|
+
roundedCorners: typeof chart.roundedCorners === "boolean" ? chart.roundedCorners : void 0,
|
|
3463
|
+
shape3d: typeof chart.shape === "string" ? chart.shape : typeof chart.shape3d === "string" ? chart.shape3d : void 0,
|
|
3464
|
+
seriesAxis: null,
|
|
3465
|
+
series,
|
|
3466
|
+
sheetIndex: visibleSheetIndex,
|
|
3467
|
+
showDlblsOverMax: typeof chart.showDlblsOverMax === "boolean" ? chart.showDlblsOverMax : void 0,
|
|
3468
|
+
sideWall: null,
|
|
3469
|
+
backWall: null,
|
|
3470
|
+
bubbleScale: typeof chart.bubbleScale === "number" ? chart.bubbleScale : void 0,
|
|
3471
|
+
bubble3d: typeof chart.bubble3d === "boolean" ? chart.bubble3d : void 0,
|
|
3472
|
+
floor: null,
|
|
3473
|
+
surfaceMaterial: void 0,
|
|
3474
|
+
textColor: void 0,
|
|
3475
|
+
title: typeof chart.title === "string" ? chart.title : void 0,
|
|
3476
|
+
titleColor: void 0,
|
|
3477
|
+
titleFontFamily: void 0,
|
|
3478
|
+
typeGroups,
|
|
3479
|
+
valueAxis: normalizeChartAxis(chart.valueAxis),
|
|
3480
|
+
varyColors: typeof chart.varyColors === "boolean" ? chart.varyColors : void 0,
|
|
3481
|
+
view3d: rawView3d ? {
|
|
3482
|
+
depthPercent: typeof rawView3d.depthPercent === "number" ? rawView3d.depthPercent : void 0,
|
|
3483
|
+
heightPercent: typeof rawView3d.heightPercent === "number" ? rawView3d.heightPercent : void 0,
|
|
3484
|
+
perspective: typeof rawView3d.perspective === "number" ? rawView3d.perspective : void 0,
|
|
3485
|
+
rAngAx: typeof rawView3d.rAngAx === "boolean" ? rawView3d.rAngAx : typeof rawView3d.rightAngleAxes === "boolean" ? rawView3d.rightAngleAxes : void 0,
|
|
3486
|
+
rotX: typeof rawView3d.rotX === "number" ? rawView3d.rotX : typeof rawView3d.rotateX === "number" ? rawView3d.rotateX : void 0,
|
|
3487
|
+
rotY: typeof rawView3d.rotY === "number" ? rawView3d.rotY : typeof rawView3d.rotateY === "number" ? rawView3d.rotateY : void 0
|
|
3488
|
+
} : void 0,
|
|
3489
|
+
wireframe: typeof chart.wireframe === "boolean" ? chart.wireframe : void 0,
|
|
3490
|
+
workbookSheetIndex,
|
|
3491
|
+
zIndex: Array.isArray(drawing.drawingPath) && typeof drawing.drawingPath[0] === "number" ? drawing.drawingPath[0] + 1 : chartIndex + 1
|
|
3492
|
+
};
|
|
3493
|
+
}
|
|
3270
3494
|
function loadWorkbookChartAssets(workbook, imageAssets, visibleSheetIndexByWorkbookSheetIndex, showHiddenSheets = false) {
|
|
3271
3495
|
const excludedChartIds = /* @__PURE__ */ new Set();
|
|
3272
3496
|
const chartsByWorkbookSheetIndex = Array.from({ length: workbook.sheetCount }, (_2, workbookSheetIndex) => {
|
|
@@ -3279,76 +3503,7 @@ function loadWorkbookChartAssets(workbook, imageAssets, visibleSheetIndexByWorkb
|
|
|
3279
3503
|
if (rawChart.hidden || !rawChart.anchor) {
|
|
3280
3504
|
excludedChartIds.add(chartId);
|
|
3281
3505
|
}
|
|
3282
|
-
|
|
3283
|
-
const chart = drawing.chart && typeof drawing.chart === "object" ? drawing.chart : {};
|
|
3284
|
-
const rawView3d = chart.view3D && typeof chart.view3D === "object" ? chart.view3D : null;
|
|
3285
|
-
const rawSeries = Array.isArray(chart.series) ? chart.series : [];
|
|
3286
|
-
const chartLevelDataLabels = normalizeChartDataLabels(chart.dataLabels);
|
|
3287
|
-
const firstSeriesDataLabels = rawSeries.length > 0 && rawSeries[0] && typeof rawSeries[0] === "object" ? normalizeChartDataLabels(rawSeries[0].dataLabels) : null;
|
|
3288
|
-
return {
|
|
3289
|
-
anchor: normalizeChartAnchor(drawing.anchor),
|
|
3290
|
-
autoTitleDeleted: typeof chart.autoTitleDeleted === "boolean" ? chart.autoTitleDeleted : void 0,
|
|
3291
|
-
axes: Array.isArray(chart.axes) ? chart.axes.map(normalizeChartAxis).filter((value) => Boolean(value)) : [],
|
|
3292
|
-
axisLabelColor: void 0,
|
|
3293
|
-
axisLineColor: void 0,
|
|
3294
|
-
categoryAxis: normalizeChartAxis(chart.categoryAxis),
|
|
3295
|
-
chartAreaBorderColor: void 0,
|
|
3296
|
-
chartAreaFillColor: void 0,
|
|
3297
|
-
chartColorPalette: void 0,
|
|
3298
|
-
chartColorPaletteOffset: void 0,
|
|
3299
|
-
chartPath: void 0,
|
|
3300
|
-
chartStyleId: void 0,
|
|
3301
|
-
chartType: typeof chart.chartType === "string" ? chart.chartType : "ColumnClustered",
|
|
3302
|
-
dataLabels: chartLevelDataLabels ?? firstSeriesDataLabels,
|
|
3303
|
-
displayBlanksAs: typeof chart.displayBlanksAs === "string" ? chart.displayBlanksAs : void 0,
|
|
3304
|
-
editable: true,
|
|
3305
|
-
firstSliceAngle: typeof chart.firstSliceAngle === "number" ? chart.firstSliceAngle : void 0,
|
|
3306
|
-
fontFamily: void 0,
|
|
3307
|
-
gapWidth: typeof chart.gapWidth === "number" ? chart.gapWidth : void 0,
|
|
3308
|
-
holeSize: typeof chart.holeSize === "number" ? chart.holeSize : void 0,
|
|
3309
|
-
id: chartId,
|
|
3310
|
-
is3d: typeof chart.is3D === "boolean" ? chart.is3D : void 0,
|
|
3311
|
-
legend: normalizeLegend(chart.legend) ? {
|
|
3312
|
-
...normalizeLegend(chart.legend),
|
|
3313
|
-
position: normalizeLegendPosition(normalizeLegend(chart.legend)?.position)
|
|
3314
|
-
} : null,
|
|
3315
|
-
name: typeof drawing.name === "string" ? drawing.name : void 0,
|
|
3316
|
-
overlap: typeof chart.overlap === "number" ? chart.overlap : void 0,
|
|
3317
|
-
plotVisibleOnly: typeof chart.plotVisibleOnly === "boolean" ? chart.plotVisibleOnly : void 0,
|
|
3318
|
-
raw: chart,
|
|
3319
|
-
radarStyle: typeof chart.radarStyle === "string" ? chart.radarStyle : void 0,
|
|
3320
|
-
scatterStyle: typeof chart.scatterStyle === "string" ? chart.scatterStyle : void 0,
|
|
3321
|
-
roundedCorners: typeof chart.roundedCorners === "boolean" ? chart.roundedCorners : void 0,
|
|
3322
|
-
shape3d: typeof chart.shape === "string" ? chart.shape : typeof chart.shape3d === "string" ? chart.shape3d : void 0,
|
|
3323
|
-
seriesAxis: null,
|
|
3324
|
-
series: rawSeries.map((entry, seriesIndex) => normalizeChartSeries(workbook, workbookSheetIndex, chartId, entry, seriesIndex)),
|
|
3325
|
-
sheetIndex: visibleSheetIndex,
|
|
3326
|
-
showDlblsOverMax: typeof chart.showDlblsOverMax === "boolean" ? chart.showDlblsOverMax : void 0,
|
|
3327
|
-
sideWall: null,
|
|
3328
|
-
backWall: null,
|
|
3329
|
-
bubbleScale: typeof chart.bubbleScale === "number" ? chart.bubbleScale : void 0,
|
|
3330
|
-
bubble3d: typeof chart.bubble3d === "boolean" ? chart.bubble3d : void 0,
|
|
3331
|
-
floor: null,
|
|
3332
|
-
surfaceMaterial: void 0,
|
|
3333
|
-
textColor: void 0,
|
|
3334
|
-
title: typeof chart.title === "string" ? chart.title : void 0,
|
|
3335
|
-
titleColor: void 0,
|
|
3336
|
-
titleFontFamily: void 0,
|
|
3337
|
-
typeGroups: Array.isArray(chart.typeGroups) ? chart.typeGroups.map((entry, groupIndex) => normalizeChartTypeGroup(workbook, workbookSheetIndex, chartId, entry, groupIndex)).filter((value) => value != null) : [],
|
|
3338
|
-
valueAxis: normalizeChartAxis(chart.valueAxis),
|
|
3339
|
-
varyColors: typeof chart.varyColors === "boolean" ? chart.varyColors : void 0,
|
|
3340
|
-
view3d: rawView3d ? {
|
|
3341
|
-
depthPercent: typeof rawView3d.depthPercent === "number" ? rawView3d.depthPercent : void 0,
|
|
3342
|
-
heightPercent: typeof rawView3d.heightPercent === "number" ? rawView3d.heightPercent : void 0,
|
|
3343
|
-
perspective: typeof rawView3d.perspective === "number" ? rawView3d.perspective : void 0,
|
|
3344
|
-
rAngAx: typeof rawView3d.rAngAx === "boolean" ? rawView3d.rAngAx : typeof rawView3d.rightAngleAxes === "boolean" ? rawView3d.rightAngleAxes : void 0,
|
|
3345
|
-
rotX: typeof rawView3d.rotX === "number" ? rawView3d.rotX : typeof rawView3d.rotateX === "number" ? rawView3d.rotateX : void 0,
|
|
3346
|
-
rotY: typeof rawView3d.rotY === "number" ? rawView3d.rotY : typeof rawView3d.rotateY === "number" ? rawView3d.rotateY : void 0
|
|
3347
|
-
} : void 0,
|
|
3348
|
-
wireframe: typeof chart.wireframe === "boolean" ? chart.wireframe : void 0,
|
|
3349
|
-
workbookSheetIndex,
|
|
3350
|
-
zIndex: Array.isArray(drawing.drawingPath) && typeof drawing.drawingPath[0] === "number" ? drawing.drawingPath[0] + 1 : chartIndex + 1
|
|
3351
|
-
};
|
|
3506
|
+
return normalizeClassicChartDrawing(workbook, workbookSheetIndex, visibleSheetIndex, rawChart, chartIndex, chartId);
|
|
3352
3507
|
});
|
|
3353
3508
|
const modernCharts = rawChartsEx.map((rawChartEx, chartExIndex) => {
|
|
3354
3509
|
const chartId = `chart-ex-${workbookSheetIndex}-${chartExIndex}`;
|
|
@@ -3367,8 +3522,36 @@ function loadWorkbookChartAssets(workbook, imageAssets, visibleSheetIndexByWorkb
|
|
|
3367
3522
|
return [...classicCharts, ...modernCharts];
|
|
3368
3523
|
});
|
|
3369
3524
|
const chartsheets = Array.isArray(workbook.chartsheets) ? workbook.chartsheets.map((entry, index) => normalizeChartsheet(entry, index)) : [];
|
|
3525
|
+
for (const chartsheet of chartsheets) {
|
|
3526
|
+
const workbookSheetIndex = workbook.sheetCount + chartsheet.index;
|
|
3527
|
+
const raw = chartsheet.raw;
|
|
3528
|
+
const charts = [];
|
|
3529
|
+
if (raw?.chart && typeof raw.chart === "object") {
|
|
3530
|
+
charts.push(normalizeClassicChartDrawing(
|
|
3531
|
+
workbook,
|
|
3532
|
+
workbookSheetIndex,
|
|
3533
|
+
workbookSheetIndex,
|
|
3534
|
+
raw,
|
|
3535
|
+
0,
|
|
3536
|
+
`${chartsheet.id}-chart-0`
|
|
3537
|
+
));
|
|
3538
|
+
}
|
|
3539
|
+
if (raw?.chartEx && typeof raw.chartEx === "object") {
|
|
3540
|
+
charts.push(normalizeChartExChart(
|
|
3541
|
+
workbook,
|
|
3542
|
+
workbookSheetIndex,
|
|
3543
|
+
workbookSheetIndex,
|
|
3544
|
+
raw,
|
|
3545
|
+
0,
|
|
3546
|
+
imageAssets?.themePalette ?? null
|
|
3547
|
+
));
|
|
3548
|
+
}
|
|
3549
|
+
chartsByWorkbookSheetIndex[workbookSheetIndex] = charts;
|
|
3550
|
+
chartsheet.chartIds = charts.map((chart) => chart.id);
|
|
3551
|
+
chartsheet.workbookSheetIndex = workbookSheetIndex;
|
|
3552
|
+
}
|
|
3370
3553
|
const tabs = buildTabs(workbook, chartsheets, visibleSheetIndexByWorkbookSheetIndex, showHiddenSheets);
|
|
3371
|
-
const chartOriginsById = imageAssets ? hydrateWorkbookChartStyles(chartsByWorkbookSheetIndex, imageAssets) : /* @__PURE__ */ new Map();
|
|
3554
|
+
const chartOriginsById = imageAssets ? hydrateWorkbookChartStyles(chartsByWorkbookSheetIndex, imageAssets, chartsheets) : /* @__PURE__ */ new Map();
|
|
3372
3555
|
if (imageAssets) {
|
|
3373
3556
|
for (let index = 0; index < chartsByWorkbookSheetIndex.length; index += 1) {
|
|
3374
3557
|
chartsByWorkbookSheetIndex[index] = (chartsByWorkbookSheetIndex[index] ?? []).filter((chart) => !excludedChartIds.has(chart.id));
|
|
@@ -3839,8 +4022,8 @@ function resolveWorkbookFillStyle(fill, themePalette) {
|
|
|
3839
4022
|
}
|
|
3840
4023
|
|
|
3841
4024
|
// src/images.ts
|
|
3842
|
-
import { strFromU8 as
|
|
3843
|
-
var
|
|
4025
|
+
import { strFromU8 as strFromU83, strToU8 as strToU82, unzipSync, zipSync } from "fflate";
|
|
4026
|
+
var REL_NS2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
|
|
3844
4027
|
var PKG_REL_NS = "http://schemas.openxmlformats.org/package/2006/relationships";
|
|
3845
4028
|
var SPREADSHEET_NS = "http://schemas.openxmlformats.org/spreadsheetml/2006/main";
|
|
3846
4029
|
var CONTENT_TYPES_NS = "http://schemas.openxmlformats.org/package/2006/content-types";
|
|
@@ -3889,6 +4072,19 @@ function measureColumnCharacterWidthPx(fontFamily, fontSizePt) {
|
|
|
3889
4072
|
columnCharacterWidthCache.set(cacheKey, width);
|
|
3890
4073
|
return width;
|
|
3891
4074
|
}
|
|
4075
|
+
function measureOfficeDigitWidthPt(fontFamily, fontSizePt) {
|
|
4076
|
+
const family = fontFamily?.trim() || "Calibri";
|
|
4077
|
+
const size = typeof fontSizePt === "number" && fontSizePt > 0 ? fontSizePt : 11;
|
|
4078
|
+
const key = `office|${family}|${size}`;
|
|
4079
|
+
const cached = columnCharacterWidthCache.get(key);
|
|
4080
|
+
if (cached !== void 0) return cached;
|
|
4081
|
+
const context = typeof document !== "undefined" ? document.createElement("canvas").getContext("2d") : null;
|
|
4082
|
+
if (!context) return 6;
|
|
4083
|
+
context.font = `${size}px ${JSON.stringify(family)}, "React XLSX Carlito"`;
|
|
4084
|
+
const width = Math.max(1, Math.round(Math.max(...Array.from("0123456789", (digit) => context.measureText(digit).width))));
|
|
4085
|
+
columnCharacterWidthCache.set(key, width);
|
|
4086
|
+
return width;
|
|
4087
|
+
}
|
|
3892
4088
|
function sheetColumnWidthToPixels(width, columnCharacterWidthPx = DEFAULT_COLUMN_CHARACTER_WIDTH_PX) {
|
|
3893
4089
|
if (!Number.isFinite(width) || width <= 0) {
|
|
3894
4090
|
return MIN_COL_WIDTH_PX;
|
|
@@ -4061,7 +4257,7 @@ function serializeXml2(document2) {
|
|
|
4061
4257
|
}
|
|
4062
4258
|
function readArchiveText2(archive, path) {
|
|
4063
4259
|
const entry = archive[path];
|
|
4064
|
-
return entry ?
|
|
4260
|
+
return entry ? strFromU83(entry) : null;
|
|
4065
4261
|
}
|
|
4066
4262
|
function parseColumnReference(reference) {
|
|
4067
4263
|
let value = 0;
|
|
@@ -4156,10 +4352,10 @@ function readFeaturePropertyBagCheckboxComplements(archive) {
|
|
|
4156
4352
|
return checkboxComplementIndices;
|
|
4157
4353
|
}
|
|
4158
4354
|
function getRelationshipId(element) {
|
|
4159
|
-
return element.getAttributeNS(
|
|
4355
|
+
return element.getAttributeNS(REL_NS2, "id") ?? element.getAttribute("r:id") ?? element.getAttribute("id");
|
|
4160
4356
|
}
|
|
4161
4357
|
function getEmbeddedRelationshipId(element) {
|
|
4162
|
-
return element.getAttributeNS(
|
|
4358
|
+
return element.getAttributeNS(REL_NS2, "embed") ?? element.getAttribute("r:embed") ?? element.getAttribute("embed");
|
|
4163
4359
|
}
|
|
4164
4360
|
function setChildText(parent, localName, value) {
|
|
4165
4361
|
const child = getFirstChild(parent, localName);
|
|
@@ -5027,6 +5223,18 @@ function parseSheetState(archive, path, options) {
|
|
|
5027
5223
|
options?.defaultFont?.sizePt
|
|
5028
5224
|
);
|
|
5029
5225
|
const defaultRowHeight = Number(sheetFormatNode?.getAttribute("defaultRowHeight") ?? 15);
|
|
5226
|
+
const digitWidthPt = measureOfficeDigitWidthPt(options?.defaultFont?.family, options?.defaultFont?.sizePt);
|
|
5227
|
+
const storedColumnPixels = (width) => Math.max(0, Math.floor(
|
|
5228
|
+
(256 * width + Math.floor(128 / digitWidthPt)) / 256 * digitWidthPt
|
|
5229
|
+
) * (4 / 3));
|
|
5230
|
+
const explicitDefaultWidth = Number(sheetFormatNode?.getAttribute("defaultColWidth") ?? Number.NaN);
|
|
5231
|
+
const baseWidth = Number(sheetFormatNode?.getAttribute("baseColWidth") ?? 8);
|
|
5232
|
+
const officeLayout = {
|
|
5233
|
+
defaultColumnPx: Number.isFinite(explicitDefaultWidth) && explicitDefaultWidth > 0 ? storedColumnPixels(explicitDefaultWidth) : ((Number.isFinite(baseWidth) && baseWidth > 0 ? baseWidth : 8) * digitWidthPt + 5) * (4 / 3),
|
|
5234
|
+
defaultRowPx: (Number.isFinite(defaultRowHeight) && defaultRowHeight > 0 ? defaultRowHeight : 15) * (4 / 3),
|
|
5235
|
+
columns: {},
|
|
5236
|
+
rows: {}
|
|
5237
|
+
};
|
|
5030
5238
|
const defaultColWidth = Number(
|
|
5031
5239
|
sheetFormatNode?.getAttribute("defaultColWidth") ?? sheetFormatNode?.getAttribute("baseColWidth") ?? 8.43
|
|
5032
5240
|
);
|
|
@@ -5060,6 +5268,7 @@ function parseSheetState(archive, path, options) {
|
|
|
5060
5268
|
const styleId = Number(rowNode.getAttribute("s") ?? Number.NaN);
|
|
5061
5269
|
if (rowIndex >= 0 && Number.isFinite(height)) {
|
|
5062
5270
|
rowHeightOverridesPx[rowIndex] = Math.max(MIN_ROW_HEIGHT_PX, Math.round(height * 1.33));
|
|
5271
|
+
officeLayout.rows[rowIndex] = { sourcePx: rowHeightOverridesPx[rowIndex], sizePx: Math.max(0, height * (4 / 3)) };
|
|
5063
5272
|
}
|
|
5064
5273
|
if (rowIndex >= 0 && Number.isFinite(styleId)) {
|
|
5065
5274
|
rowStyleIds[rowIndex] = styleId;
|
|
@@ -5098,6 +5307,7 @@ function parseSheetState(archive, path, options) {
|
|
|
5098
5307
|
if (Number.isFinite(width)) {
|
|
5099
5308
|
const widthPx = sheetColumnWidthToPixels(width, columnWidthCharacterWidthPx);
|
|
5100
5309
|
colWidthOverridesPx[col] = widthPx;
|
|
5310
|
+
officeLayout.columns[col] = { sourcePx: widthPx, sizePx: storedColumnPixels(width) };
|
|
5101
5311
|
}
|
|
5102
5312
|
if (Number.isFinite(styleId)) {
|
|
5103
5313
|
colStyleIds[col] = styleId;
|
|
@@ -5114,6 +5324,7 @@ function parseSheetState(archive, path, options) {
|
|
|
5114
5324
|
colStyleIds,
|
|
5115
5325
|
conditionalFormatRules,
|
|
5116
5326
|
defaultColWidthPx: sheetColumnWidthToPixels(defaultColWidth, columnWidthCharacterWidthPx),
|
|
5327
|
+
officeLayout,
|
|
5117
5328
|
defaultRowHeightPx: Math.max(MIN_ROW_HEIGHT_PX, Math.round(defaultRowHeight * 1.33)),
|
|
5118
5329
|
hasHorizontalMerges: false,
|
|
5119
5330
|
hasVerticalMerges: false,
|
|
@@ -6568,7 +6779,7 @@ function appendSheetDrawingReference(sheetDocument, relationshipId) {
|
|
|
6568
6779
|
return;
|
|
6569
6780
|
}
|
|
6570
6781
|
const drawingNode = sheetDocument.createElementNS(SPREADSHEET_NS, "drawing");
|
|
6571
|
-
drawingNode.setAttributeNS(
|
|
6782
|
+
drawingNode.setAttributeNS(REL_NS2, "r:id", relationshipId);
|
|
6572
6783
|
const successorNames = /* @__PURE__ */ new Set([
|
|
6573
6784
|
"legacyDrawing",
|
|
6574
6785
|
"legacyDrawingHF",
|
|
@@ -7551,6 +7762,7 @@ function buildSheetList(workbook, sheetStatesByWorkbookSheetIndex, themePalette,
|
|
|
7551
7762
|
colStyleIds: sheetState?.colStyleIds ?? {},
|
|
7552
7763
|
conditionalFormatRules: sheetState?.conditionalFormatRules ?? [],
|
|
7553
7764
|
dataValidations: parseWorksheetDataValidations(worksheet),
|
|
7765
|
+
officeLayout: sheetState?.officeLayout,
|
|
7554
7766
|
defaultColWidthPx,
|
|
7555
7767
|
defaultRowHeightPx,
|
|
7556
7768
|
freezePanes: parseWorksheetFreezePanes(worksheet),
|
|
@@ -7640,6 +7852,7 @@ function buildSheetList(workbook, sheetStatesByWorkbookSheetIndex, themePalette,
|
|
|
7640
7852
|
colStyleIds: sheetState?.colStyleIds ?? {},
|
|
7641
7853
|
conditionalFormatRules: sheetState?.conditionalFormatRules ?? [],
|
|
7642
7854
|
dataValidations: parseWorksheetDataValidations(worksheet),
|
|
7855
|
+
officeLayout: sheetState?.officeLayout,
|
|
7643
7856
|
defaultColWidthPx,
|
|
7644
7857
|
defaultRowHeightPx,
|
|
7645
7858
|
freezePanes: parseWorksheetFreezePanes(worksheet),
|
|
@@ -8165,7 +8378,7 @@ function sanitizeSavedWorkbookBytes(bytes) {
|
|
|
8165
8378
|
const archive = unzipSync2(bytes);
|
|
8166
8379
|
const stylesEntry = archive["xl/styles.xml"];
|
|
8167
8380
|
if (stylesEntry) {
|
|
8168
|
-
const stylesXml =
|
|
8381
|
+
const stylesXml = strFromU84(stylesEntry).replace(/&quot;/g, """).replace(/&apos;/g, "'");
|
|
8169
8382
|
archive["xl/styles.xml"] = strToU83(stylesXml);
|
|
8170
8383
|
}
|
|
8171
8384
|
return zipSync2(archive, { level: 6 });
|
|
@@ -8808,7 +9021,7 @@ function useXlsxViewerController(options) {
|
|
|
8808
9021
|
return;
|
|
8809
9022
|
}
|
|
8810
9023
|
if (imageAssetsRef.current && !effectiveSkipXmlParsing) {
|
|
8811
|
-
const chartOriginsById = hydrateWorkbookChartStyles(result.chartsByWorkbookSheetIndex, imageAssetsRef.current);
|
|
9024
|
+
const chartOriginsById = hydrateWorkbookChartStyles(result.chartsByWorkbookSheetIndex, imageAssetsRef.current, result.chartsheets);
|
|
8812
9025
|
chartAssetsRef.current = { ...result, chartOriginsById };
|
|
8813
9026
|
}
|
|
8814
9027
|
setChartsByWorkbookSheetIndex(result.chartsByWorkbookSheetIndex);
|
|
@@ -9033,10 +9246,10 @@ function useXlsxViewerController(options) {
|
|
|
9033
9246
|
return;
|
|
9034
9247
|
}
|
|
9035
9248
|
setImageAssets(workerImageAssets);
|
|
9036
|
-
const chartOriginsById = workerImageAssets ? hydrateWorkbookChartStyles(snapshot.chartsByWorkbookSheetIndex, workerImageAssets) : /* @__PURE__ */ new Map();
|
|
9249
|
+
const chartOriginsById = workerImageAssets ? hydrateWorkbookChartStyles(snapshot.chartsByWorkbookSheetIndex, workerImageAssets, snapshot.chartsheets) : /* @__PURE__ */ new Map();
|
|
9037
9250
|
setFormControlsByWorkbookSheetIndex(snapshot.formControlsByWorkbookSheetIndex);
|
|
9038
9251
|
setWorkbook(null);
|
|
9039
|
-
setSheets(snapshot.sheets);
|
|
9252
|
+
setSheets(snapshot.sheets.map((sheet) => ({ ...sheet, officeLayout: workerImageAssets?.sheetStatesByWorkbookSheetIndex[sheet.workbookSheetIndex]?.officeLayout })));
|
|
9040
9253
|
setChartsByWorkbookSheetIndex(snapshot.chartsByWorkbookSheetIndex);
|
|
9041
9254
|
setChartsheets(snapshot.chartsheets);
|
|
9042
9255
|
setTabs(snapshot.tabs);
|
|
@@ -9289,11 +9502,11 @@ function useXlsxViewerController(options) {
|
|
|
9289
9502
|
}
|
|
9290
9503
|
const workerImageAssets = effectiveSkipXmlParsing ? null : parseWorkbookImageAssets(new Uint8Array(deferredBuffer));
|
|
9291
9504
|
setImageAssets(workerImageAssets);
|
|
9292
|
-
const chartOriginsById = workerImageAssets ? hydrateWorkbookChartStyles(snapshot.chartsByWorkbookSheetIndex, workerImageAssets) : /* @__PURE__ */ new Map();
|
|
9505
|
+
const chartOriginsById = workerImageAssets ? hydrateWorkbookChartStyles(snapshot.chartsByWorkbookSheetIndex, workerImageAssets, snapshot.chartsheets) : /* @__PURE__ */ new Map();
|
|
9293
9506
|
deferredBufferRef.current = null;
|
|
9294
9507
|
setDeferredLoadFileSize(null);
|
|
9295
9508
|
setWorkbook(null);
|
|
9296
|
-
setSheets(snapshot.sheets);
|
|
9509
|
+
setSheets(snapshot.sheets.map((sheet) => ({ ...sheet, officeLayout: workerImageAssets?.sheetStatesByWorkbookSheetIndex[sheet.workbookSheetIndex]?.officeLayout })));
|
|
9297
9510
|
setChartsByWorkbookSheetIndex(snapshot.chartsByWorkbookSheetIndex);
|
|
9298
9511
|
setChartsheets(snapshot.chartsheets);
|
|
9299
9512
|
setTabs(snapshot.tabs);
|
|
@@ -10616,7 +10829,13 @@ function useXlsxViewerController(options) {
|
|
|
10616
10829
|
if (!nextChart) {
|
|
10617
10830
|
return false;
|
|
10618
10831
|
}
|
|
10619
|
-
|
|
10832
|
+
const source = chart.renderSource;
|
|
10833
|
+
const indexedCategoryFormulaChanged = source?.indexedXSeries?.[seriesIndex] && chart.series[seriesIndex]?.categoriesRef?.formula !== nextChart.series[seriesIndex]?.categoriesRef?.formula;
|
|
10834
|
+
updateChart(chartId, {
|
|
10835
|
+
series: nextChart.series,
|
|
10836
|
+
typeGroups: nextChart.typeGroups,
|
|
10837
|
+
renderSource: source?.sourceSeries || indexedCategoryFormulaChanged ? void 0 : source
|
|
10838
|
+
});
|
|
10620
10839
|
const selectedSeries = nextChart.series[seriesIndex];
|
|
10621
10840
|
if (selectedSeries) {
|
|
10622
10841
|
setSelectedChartElement((current) => current && current.chartId === chartId && current.kind !== "chart" ? {
|
|
@@ -13560,20 +13779,16 @@ var ChartLoadBoundary = class extends C {
|
|
|
13560
13779
|
return this.props.children;
|
|
13561
13780
|
}
|
|
13562
13781
|
};
|
|
13563
|
-
function MapChartSvg({ renderer, loadingFallback, ...props }) {
|
|
13564
|
-
const resources = useChartModule(regionMapResources);
|
|
13565
|
-
return resources ? /* @__PURE__ */ u(renderer.MemoChartSvg, { ...props }) : /* @__PURE__ */ u(S, { children: loadingFallback("map") });
|
|
13566
|
-
}
|
|
13567
13782
|
function LegacyChartSvg({ loadingFallback, ...props }) {
|
|
13568
13783
|
const renderer = useChartModule(chartRenderer);
|
|
13569
|
-
|
|
13570
|
-
return props.chart.chartType === "RegionMap" ? /* @__PURE__ */ u(MapChartSvg, { ...props, renderer, loadingFallback }) : /* @__PURE__ */ u(renderer.MemoChartSvg, { ...props });
|
|
13784
|
+
return renderer ? /* @__PURE__ */ u(renderer.MemoChartSvg, { ...props }) : /* @__PURE__ */ u(S, { children: loadingFallback("renderer") });
|
|
13571
13785
|
}
|
|
13572
13786
|
function SharedChart(props) {
|
|
13573
|
-
const module = useChartModule(officeChartRenderer);
|
|
13574
|
-
if (!module) return /* @__PURE__ */ u(S, { children: props.loadingFallback("renderer") });
|
|
13575
|
-
const fallback = /* @__PURE__ */ u(LegacyChartSvg, { ...props });
|
|
13576
|
-
|
|
13787
|
+
const module = useChartModule(props.experimentalOfficeCharts ? suppliedOfficeChartRenderer : props.source.experimental ? officeExtendedChartRenderer : officeChartRenderer);
|
|
13788
|
+
if (!module) return /* @__PURE__ */ u(S, { children: props.loadingFallback(props.chart.chartType === "RegionMap" ? "map" : "renderer") });
|
|
13789
|
+
const fallback = props.chart.chartType === "RegionMap" ? /* @__PURE__ */ u("div", { role: "status", children: "Map data is unavailable." }) : /* @__PURE__ */ u(LegacyChartSvg, { ...props });
|
|
13790
|
+
const renderer = props.experimentalOfficeCharts ?? module.renderer;
|
|
13791
|
+
return renderer && module.SharedChartSvg ? /* @__PURE__ */ u(module.SharedChartSvg, { ...props, renderer, fallback }) : fallback;
|
|
13577
13792
|
}
|
|
13578
13793
|
function MemoChartSvg(props) {
|
|
13579
13794
|
return /* @__PURE__ */ u(ChartLoadBoundary, { children: props.chart.renderSource ? /* @__PURE__ */ u(SharedChart, { ...props, source: props.chart.renderSource }) : /* @__PURE__ */ u(LegacyChartSvg, { ...props }) }, props.chart.id);
|
|
@@ -18747,6 +18962,7 @@ function XlsxGrid({
|
|
|
18747
18962
|
renderScroller,
|
|
18748
18963
|
enableGestureZoom = true,
|
|
18749
18964
|
experimentalCanvas = true,
|
|
18965
|
+
experimentalOfficeCharts,
|
|
18750
18966
|
selectionColor,
|
|
18751
18967
|
selectionFillColor,
|
|
18752
18968
|
selectionHeaderColor,
|
|
@@ -18821,8 +19037,8 @@ function XlsxGrid({
|
|
|
18821
19037
|
zoomScale
|
|
18822
19038
|
} = controller;
|
|
18823
19039
|
h(() => {
|
|
18824
|
-
if (showImages && !isChartsLoading) preloadChartRenderers([charts]);
|
|
18825
|
-
}, [charts, isChartsLoading, showImages]);
|
|
19040
|
+
if (showImages && !isChartsLoading) preloadChartRenderers([charts], experimentalOfficeCharts);
|
|
19041
|
+
}, [charts, isChartsLoading, showImages, experimentalOfficeCharts]);
|
|
18826
19042
|
const formControlItemsById = T(() => new Map(
|
|
18827
19043
|
formControls.flatMap((control) => control.controlIndex !== void 0 && (control.kind === "dropdown" || control.kind === "listbox") ? [[control.id, getFormControlItems(control.controlIndex, control.sheetIndex)]] : [])
|
|
18828
19044
|
), [formControls, getFormControlItems]);
|
|
@@ -19478,6 +19694,15 @@ function XlsxGrid({
|
|
|
19478
19694
|
}, [activeSheet?.freezePanes?.col, visibleCols]);
|
|
19479
19695
|
const actualColWidths = T(
|
|
19480
19696
|
() => {
|
|
19697
|
+
const office = experimentalOfficeCharts ? activeSheet?.officeLayout : void 0;
|
|
19698
|
+
if (office) {
|
|
19699
|
+
return Array.from({ length: displayColLimit }, (_2, index) => {
|
|
19700
|
+
if (hiddenColSet.has(index)) return 0;
|
|
19701
|
+
const original = office.columns[index];
|
|
19702
|
+
const override = activeSheet?.colWidthOverridesPx[index];
|
|
19703
|
+
return override !== void 0 && override !== original?.sourcePx ? override : original?.sizePx ?? office.defaultColumnPx;
|
|
19704
|
+
});
|
|
19705
|
+
}
|
|
19481
19706
|
const widths = new Array(displayColLimit).fill(0);
|
|
19482
19707
|
const showGridLines = activeSheet?.showGridLines ?? true;
|
|
19483
19708
|
const fallbackWidth = Math.max(
|
|
@@ -19532,6 +19757,8 @@ function XlsxGrid({
|
|
|
19532
19757
|
return widths;
|
|
19533
19758
|
},
|
|
19534
19759
|
[
|
|
19760
|
+
experimentalOfficeCharts,
|
|
19761
|
+
activeSheet?.officeLayout,
|
|
19535
19762
|
activeSheet?.colWidthOverridesPx,
|
|
19536
19763
|
activeSheet?.colWidths,
|
|
19537
19764
|
activeSheet?.defaultColWidthPx,
|
|
@@ -19546,6 +19773,15 @@ function XlsxGrid({
|
|
|
19546
19773
|
);
|
|
19547
19774
|
const actualRowHeights = T(
|
|
19548
19775
|
() => {
|
|
19776
|
+
const office = experimentalOfficeCharts ? activeSheet?.officeLayout : void 0;
|
|
19777
|
+
if (office) {
|
|
19778
|
+
return Array.from({ length: displayRowLimit }, (_2, index) => {
|
|
19779
|
+
if (hiddenRowSet.has(index)) return 0;
|
|
19780
|
+
const original = office.rows[index];
|
|
19781
|
+
const override = activeSheet?.rowHeightOverridesPx[index];
|
|
19782
|
+
return override !== void 0 && override !== original?.sourcePx ? override : original?.sizePx ?? office.defaultRowPx;
|
|
19783
|
+
});
|
|
19784
|
+
}
|
|
19549
19785
|
const heights = new Array(displayRowLimit).fill(0);
|
|
19550
19786
|
const showGridLines = activeSheet?.showGridLines ?? true;
|
|
19551
19787
|
const fallbackHeight = Math.max(
|
|
@@ -19634,6 +19870,8 @@ function XlsxGrid({
|
|
|
19634
19870
|
return heights;
|
|
19635
19871
|
},
|
|
19636
19872
|
[
|
|
19873
|
+
experimentalOfficeCharts,
|
|
19874
|
+
activeSheet?.officeLayout,
|
|
19637
19875
|
activeSheet?.defaultRowHeightPx,
|
|
19638
19876
|
activeSheet?.maxUsedRow,
|
|
19639
19877
|
activeSheet?.maxUsedCol,
|
|
@@ -24327,10 +24565,23 @@ function XlsxGrid({
|
|
|
24327
24565
|
width: "100%"
|
|
24328
24566
|
},
|
|
24329
24567
|
children: charts.length > 0 ? charts.map((chart) => {
|
|
24330
|
-
const
|
|
24331
|
-
|
|
24568
|
+
const sourceSize = experimentalOfficeCharts && chart.anchor.kind !== "two-cell" ? chart.anchor.sizeEmu : void 0;
|
|
24569
|
+
const chartsheetRect = {
|
|
24570
|
+
height: sourceSize?.cy ? emuToPixels(sourceSize.cy) : 320,
|
|
24571
|
+
left: 0,
|
|
24572
|
+
top: 0,
|
|
24573
|
+
width: sourceSize?.cx ? emuToPixels(sourceSize.cx) : 640
|
|
24574
|
+
};
|
|
24575
|
+
return /* @__PURE__ */ u("div", { style: {
|
|
24576
|
+
minHeight: sourceSize ? void 0 : 320,
|
|
24577
|
+
width: sourceSize ? chartsheetRect.width : void 0,
|
|
24578
|
+
maxWidth: "100%",
|
|
24579
|
+
aspectRatio: sourceSize ? `${chartsheetRect.width}/${chartsheetRect.height}` : void 0,
|
|
24580
|
+
position: "relative"
|
|
24581
|
+
}, children: isChartsLoading ? renderChartLoadingNode(renderChartLoading, chart, chartsheetRect) : /* @__PURE__ */ u(
|
|
24332
24582
|
MemoChartSvg,
|
|
24333
24583
|
{
|
|
24584
|
+
experimentalOfficeCharts,
|
|
24334
24585
|
chart,
|
|
24335
24586
|
loadingFallback: (stage) => renderChartLoadingNode(renderChartLoading, chart, chartsheetRect, stage),
|
|
24336
24587
|
onChartElementDoubleClick: handleChartElementDoubleClick,
|
|
@@ -25286,6 +25537,7 @@ function XlsxGrid({
|
|
|
25286
25537
|
children: isChartsLoading ? renderChartLoadingNode(renderChartLoading, chart, rect) : /* @__PURE__ */ u(
|
|
25287
25538
|
MemoChartSvg,
|
|
25288
25539
|
{
|
|
25540
|
+
experimentalOfficeCharts,
|
|
25289
25541
|
chart,
|
|
25290
25542
|
loadingFallback: (stage) => renderChartLoadingNode(renderChartLoading, chart, rect, stage),
|
|
25291
25543
|
onChartElementDoubleClick: handleChartElementDoubleClick,
|
|
@@ -25377,7 +25629,7 @@ function XlsxGrid({
|
|
|
25377
25629
|
};
|
|
25378
25630
|
const drawingViewportCacheSignature = `${Math.floor(drawingViewport.left / CANVAS_VIEWPORT_OVERSCAN_PX)}:${Math.floor(drawingViewport.top / CANVAS_VIEWPORT_OVERSCAN_PX)}:${drawingViewport.width}:${drawingViewport.height}`;
|
|
25379
25631
|
const previousPaneDrawingNodes = paneDrawingNodesCacheRef.current;
|
|
25380
|
-
const canReusePaneDrawingNodes = previousPaneDrawingNodes !== null && previousPaneDrawingNodes.showImages === showImages && previousPaneDrawingNodes.updateFormControl === updateFormControl && previousPaneDrawingNodes.chartRects === chartRects && previousPaneDrawingNodes.formControlRects === domFormControlRects && previousPaneDrawingNodes.formControlItemsById === formControlItemsById && previousPaneDrawingNodes.shapeRects === domShapeRects && previousPaneDrawingNodes.imageRects === domImageRects && previousPaneDrawingNodes.selectedChartId === selectedChartId && previousPaneDrawingNodes.selectedImageId === selectedImageId && previousPaneDrawingNodes.readOnly === readOnly && previousPaneDrawingNodes.onFormControlAction === onFormControlAction && previousPaneDrawingNodes.onFormControlChange === onFormControlChange && previousPaneDrawingNodes.selectionStroke === selectionStroke && previousPaneDrawingNodes.renderChartLoading === renderChartLoading && previousPaneDrawingNodes.renderFormControl === renderFormControl && previousPaneDrawingNodes.renderImage === renderImage && previousPaneDrawingNodes.renderImageSelection === renderImageSelection && previousPaneDrawingNodes.isChartsLoading === isChartsLoading && previousPaneDrawingNodes.selectedChartElement === selectedChartElement && previousPaneDrawingNodes.palette === palette && previousPaneDrawingNodes.drawingViewportSignature === drawingViewportCacheSignature;
|
|
25632
|
+
const canReusePaneDrawingNodes = previousPaneDrawingNodes !== null && previousPaneDrawingNodes.experimentalOfficeCharts === experimentalOfficeCharts && previousPaneDrawingNodes.showImages === showImages && previousPaneDrawingNodes.updateFormControl === updateFormControl && previousPaneDrawingNodes.chartRects === chartRects && previousPaneDrawingNodes.formControlRects === domFormControlRects && previousPaneDrawingNodes.formControlItemsById === formControlItemsById && previousPaneDrawingNodes.shapeRects === domShapeRects && previousPaneDrawingNodes.imageRects === domImageRects && previousPaneDrawingNodes.selectedChartId === selectedChartId && previousPaneDrawingNodes.selectedImageId === selectedImageId && previousPaneDrawingNodes.readOnly === readOnly && previousPaneDrawingNodes.onFormControlAction === onFormControlAction && previousPaneDrawingNodes.onFormControlChange === onFormControlChange && previousPaneDrawingNodes.selectionStroke === selectionStroke && previousPaneDrawingNodes.renderChartLoading === renderChartLoading && previousPaneDrawingNodes.renderFormControl === renderFormControl && previousPaneDrawingNodes.renderImage === renderImage && previousPaneDrawingNodes.renderImageSelection === renderImageSelection && previousPaneDrawingNodes.isChartsLoading === isChartsLoading && previousPaneDrawingNodes.selectedChartElement === selectedChartElement && previousPaneDrawingNodes.palette === palette && previousPaneDrawingNodes.drawingViewportSignature === drawingViewportCacheSignature;
|
|
25381
25633
|
const paneDrawingNodes = canReusePaneDrawingNodes ? previousPaneDrawingNodes.value : !showImages ? {
|
|
25382
25634
|
corner: null,
|
|
25383
25635
|
left: null,
|
|
@@ -25422,6 +25674,7 @@ function XlsxGrid({
|
|
|
25422
25674
|
palette,
|
|
25423
25675
|
readOnly,
|
|
25424
25676
|
renderChartLoading,
|
|
25677
|
+
experimentalOfficeCharts,
|
|
25425
25678
|
renderFormControl,
|
|
25426
25679
|
renderImage,
|
|
25427
25680
|
renderImageSelection,
|
|
@@ -26754,6 +27007,7 @@ function XlsxViewerInner({
|
|
|
26754
27007
|
enableGestureZoom = true,
|
|
26755
27008
|
errorState,
|
|
26756
27009
|
experimentalCanvas = true,
|
|
27010
|
+
experimentalOfficeCharts,
|
|
26757
27011
|
fileTooLargeState,
|
|
26758
27012
|
getCellStyle,
|
|
26759
27013
|
headerBackgroundColor,
|
|
@@ -26851,6 +27105,7 @@ function XlsxViewerInner({
|
|
|
26851
27105
|
enableGestureZoom,
|
|
26852
27106
|
errorState,
|
|
26853
27107
|
experimentalCanvas,
|
|
27108
|
+
experimentalOfficeCharts,
|
|
26854
27109
|
fileTooLargeState,
|
|
26855
27110
|
getCellStyle,
|
|
26856
27111
|
highlightClassName,
|
|
@@ -27097,4 +27352,4 @@ export {
|
|
|
27097
27352
|
__createContentNode,
|
|
27098
27353
|
__createContentRoot
|
|
27099
27354
|
};
|
|
27100
|
-
//# sourceMappingURL=chunk-
|
|
27355
|
+
//# sourceMappingURL=chunk-R5ERJ3BT.js.map
|