@extend-ai/react-xlsx 0.20.3 → 0.20.4

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.
Files changed (107) hide show
  1. package/dist/{browser-KWIEUO2X.js → browser-IQ4UDS5M.js} +8 -27
  2. package/dist/{browser-KWIEUO2X.js.map → browser-IQ4UDS5M.js.map} +1 -1
  3. package/dist/{browser-B73UAN6E.cjs → browser-S6E2BS5S.cjs} +8 -28
  4. package/dist/browser-S6E2BS5S.cjs.map +1 -0
  5. package/dist/{chart-renderer-XBF7EPUS.js → chart-renderer-4HTNG3SX.js} +94 -180
  6. package/dist/chart-renderer-4HTNG3SX.js.map +1 -0
  7. package/dist/{chart-renderer-ZLJVPLGN.js → chart-renderer-5IN2B3YS.js} +86 -172
  8. package/dist/chart-renderer-5IN2B3YS.js.map +1 -0
  9. package/dist/{chart-renderer-2EKXNHUD.cjs → chart-renderer-6CWSXOSC.cjs} +324 -410
  10. package/dist/chart-renderer-6CWSXOSC.cjs.map +1 -0
  11. package/dist/{chart-renderer-W7XW24JI.cjs → chart-renderer-H4BLRO5P.cjs} +321 -407
  12. package/dist/chart-renderer-H4BLRO5P.cjs.map +1 -0
  13. package/dist/chunk-GX5LAENE.cjs +108 -0
  14. package/dist/chunk-GX5LAENE.cjs.map +1 -0
  15. package/dist/{chunk-HEEFCVWS.js → chunk-H62SZBEY.js} +401 -132
  16. package/dist/chunk-H62SZBEY.js.map +1 -0
  17. package/dist/{chunk-VG4JELEQ.js → chunk-IISMO3AX.js} +30 -15
  18. package/dist/chunk-IISMO3AX.js.map +1 -0
  19. package/dist/{chunk-XISBYOD5.cjs → chunk-KQSUAIZD.cjs} +1168 -899
  20. package/dist/chunk-KQSUAIZD.cjs.map +1 -0
  21. package/dist/{chunk-HKMFMIKE.js → chunk-LZXL5E4W.js} +16 -7
  22. package/dist/chunk-LZXL5E4W.js.map +1 -0
  23. package/dist/chunk-MYN475JP.cjs +32 -0
  24. package/dist/chunk-MYN475JP.cjs.map +1 -0
  25. package/dist/{chunk-WGRRI25I.cjs → chunk-NAYVSTCX.cjs} +22 -9
  26. package/dist/chunk-NAYVSTCX.cjs.map +1 -0
  27. package/dist/chunk-PK3MCNDK.js +32 -0
  28. package/dist/chunk-PK3MCNDK.js.map +1 -0
  29. package/dist/full-3FSPB3R6.cjs +212 -0
  30. package/dist/full-3FSPB3R6.cjs.map +1 -0
  31. package/dist/full-GPY27HZY.js +209 -0
  32. package/dist/full-GPY27HZY.js.map +1 -0
  33. package/dist/index.cjs +834 -602
  34. package/dist/index.cjs.map +1 -1
  35. package/dist/index.d.cts +57 -1
  36. package/dist/index.d.ts +57 -1
  37. package/dist/index.js +347 -115
  38. package/dist/index.js.map +1 -1
  39. package/dist/{internal-BJsg5os3.d.cts → internal-Cks9H21d.d.cts} +56 -1
  40. package/dist/{internal-BJsg5os3.d.ts → internal-Cks9H21d.d.ts} +56 -1
  41. package/dist/internal.cjs +3 -3
  42. package/dist/internal.d.cts +1 -1
  43. package/dist/internal.d.ts +1 -1
  44. package/dist/internal.js +2 -2
  45. package/dist/office_charts_bg.wasm +0 -0
  46. package/dist/office_charts_full_bg.wasm +0 -0
  47. package/dist/payload-B55ZKNYO.js +6 -0
  48. package/dist/payload-B55ZKNYO.js.map +1 -0
  49. package/dist/payload-E2KM77DZ.js +6 -0
  50. package/dist/payload-E2KM77DZ.js.map +1 -0
  51. package/dist/payload-K4S5RLJN.cjs +8 -0
  52. package/dist/payload-K4S5RLJN.cjs.map +1 -0
  53. package/dist/payload-PL4646XV.cjs +8 -0
  54. package/dist/payload-PL4646XV.cjs.map +1 -0
  55. package/dist/{shared-chart-3STFRVWT.js → shared-chart-5KTGZEZ5.js} +38 -20
  56. package/dist/shared-chart-5KTGZEZ5.js.map +1 -0
  57. package/dist/{shared-chart-DVC5S2P6.cjs → shared-chart-ACR4M7BP.cjs} +37 -20
  58. package/dist/shared-chart-ACR4M7BP.cjs.map +1 -0
  59. package/dist/{shared-chart-BFQNYOIQ.js → shared-chart-EGN5JTKT.js} +37 -20
  60. package/dist/shared-chart-EGN5JTKT.js.map +1 -0
  61. package/dist/{shared-chart-MFQSQG4K.cjs → shared-chart-XAV7VA45.cjs} +37 -19
  62. package/dist/shared-chart-XAV7VA45.cjs.map +1 -0
  63. package/dist/{surface-regl-R2N54JT2.js → surface-webgl-2ZZ6JQR2.js} +87 -151
  64. package/dist/surface-webgl-2ZZ6JQR2.js.map +1 -0
  65. package/dist/{surface-regl-BBJ6OIKK.cjs → surface-webgl-3HS6VBCK.cjs} +88 -152
  66. package/dist/surface-webgl-3HS6VBCK.cjs.map +1 -0
  67. package/dist/{surface-regl-7CDGGVDG.js → surface-webgl-4DQXDDXU.js} +87 -151
  68. package/dist/surface-webgl-4DQXDDXU.js.map +1 -0
  69. package/dist/{surface-regl-SUJ2TFZA.cjs → surface-webgl-SVYD564V.cjs} +88 -152
  70. package/dist/surface-webgl-SVYD564V.cjs.map +1 -0
  71. package/dist/vanilla.cjs +3 -3
  72. package/dist/vanilla.d.cts +2 -2
  73. package/dist/vanilla.d.ts +2 -2
  74. package/dist/vanilla.js +2 -2
  75. package/dist/xlsx-worker.js +298 -92
  76. package/dist/xlsx-worker.js.map +1 -1
  77. package/package.json +6 -15
  78. package/dist/browser-B73UAN6E.cjs.map +0 -1
  79. package/dist/chart-renderer-2EKXNHUD.cjs.map +0 -1
  80. package/dist/chart-renderer-W7XW24JI.cjs.map +0 -1
  81. package/dist/chart-renderer-XBF7EPUS.js.map +0 -1
  82. package/dist/chart-renderer-ZLJVPLGN.js.map +0 -1
  83. package/dist/chunk-6IGWCJU5.cjs +0 -90
  84. package/dist/chunk-6IGWCJU5.cjs.map +0 -1
  85. package/dist/chunk-HEEFCVWS.js.map +0 -1
  86. package/dist/chunk-HKMFMIKE.js.map +0 -1
  87. package/dist/chunk-VG4JELEQ.js.map +0 -1
  88. package/dist/chunk-WGRRI25I.cjs.map +0 -1
  89. package/dist/chunk-XISBYOD5.cjs.map +0 -1
  90. package/dist/payload-JBPE7GEG.cjs +0 -8
  91. package/dist/payload-JBPE7GEG.cjs.map +0 -1
  92. package/dist/payload-KYNCVJT5.js +0 -6
  93. package/dist/payload-KYNCVJT5.js.map +0 -1
  94. package/dist/region-map-geography-24TXETDP.cjs +0 -184
  95. package/dist/region-map-geography-24TXETDP.cjs.map +0 -1
  96. package/dist/region-map-geography-OR6DHAF7.js +0 -182
  97. package/dist/region-map-geography-OR6DHAF7.js.map +0 -1
  98. package/dist/shared-chart-3STFRVWT.js.map +0 -1
  99. package/dist/shared-chart-BFQNYOIQ.js.map +0 -1
  100. package/dist/shared-chart-DVC5S2P6.cjs.map +0 -1
  101. package/dist/shared-chart-MFQSQG4K.cjs.map +0 -1
  102. package/dist/surface-regl-7CDGGVDG.js.map +0 -1
  103. package/dist/surface-regl-BBJ6OIKK.cjs.map +0 -1
  104. package/dist/surface-regl-R2N54JT2.js.map +0 -1
  105. package/dist/surface-regl-SUJ2TFZA.cjs.map +0 -1
  106. package/dist/world-atlas-LICENSE.txt +0 -13
  107. /package/dist/{us-atlas-LICENSE.txt → rust-office-charts-MAP-DATA-LICENSE.txt} +0 -0
@@ -1,10 +1,11 @@
1
1
  import {
2
2
  chartRenderer,
3
3
  officeChartRenderer,
4
+ officeExtendedChartRenderer,
4
5
  preloadChartRenderers,
5
- regionMapResources,
6
+ suppliedOfficeChartRenderer,
6
7
  useChartModule
7
- } from "./chunk-VG4JELEQ.js";
8
+ } from "./chunk-IISMO3AX.js";
8
9
  import {
9
10
  getBuiltinChartColor,
10
11
  getBuiltinChartSurfaceStyle,
@@ -312,10 +313,81 @@ function loadSpreadsheetFonts() {
312
313
  }
313
314
 
314
315
  // src/controller.tsx
315
- import { strFromU8 as strFromU83, strToU8 as strToU83, unzipSync as unzipSync2, zipSync as zipSync2 } from "fflate";
316
+ import { strFromU8 as strFromU84, strToU8 as strToU83, unzipSync as unzipSync2, zipSync as zipSync2 } from "fflate";
317
+
318
+ // src/chartsheet-payload.ts
319
+ import { strFromU8 } from "fflate";
320
+ var REL_NS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
321
+ function readXml(archive, path) {
322
+ const bytes = archive[path];
323
+ if (!bytes || typeof DOMParser === "undefined") return null;
324
+ const document2 = new DOMParser().parseFromString(strFromU8(bytes), "application/xml");
325
+ return document2.getElementsByTagName("parsererror").length > 0 ? null : document2;
326
+ }
327
+ function relationshipPath(partPath) {
328
+ const separator = partPath.lastIndexOf("/");
329
+ return `${partPath.slice(0, separator + 1)}_rels/${partPath.slice(separator + 1)}.rels`;
330
+ }
331
+ function resolveTarget(partPath, target) {
332
+ if (/^[a-z][a-z0-9+.-]*:/i.test(target) || target.startsWith("//")) return null;
333
+ const segments = target.startsWith("/") ? [] : partPath.split("/").slice(0, -1);
334
+ for (const segment of target.replace(/\\/g, "/").split("/")) {
335
+ if (!segment || segment === ".") continue;
336
+ if (segment === "..") {
337
+ if (segments.length === 0) return null;
338
+ segments.pop();
339
+ } else {
340
+ segments.push(segment);
341
+ }
342
+ }
343
+ return segments.join("/");
344
+ }
345
+ function readRelationships(archive, partPath) {
346
+ const relationships = /* @__PURE__ */ new Map();
347
+ const document2 = readXml(archive, relationshipPath(partPath));
348
+ for (const element of Array.from(document2?.getElementsByTagNameNS("*", "Relationship") ?? [])) {
349
+ if (element.getAttribute("TargetMode") === "External") continue;
350
+ const id = element.getAttribute("Id");
351
+ const rawTarget = element.getAttribute("Target");
352
+ const type = element.getAttribute("Type");
353
+ const target = rawTarget ? resolveTarget(partPath, rawTarget) : null;
354
+ if (id && type && target && archive[target]) relationships.set(id, { target, type });
355
+ }
356
+ return relationships;
357
+ }
358
+ function collectChartsheetDrawingOrigins(archive, chartsheets) {
359
+ const origins = /* @__PURE__ */ new Map();
360
+ if (chartsheets.length === 0) return origins;
361
+ const workbookPath = "xl/workbook.xml";
362
+ const workbookDocument = readXml(archive, workbookPath);
363
+ const workbookRelationships = readRelationships(archive, workbookPath);
364
+ for (const sheet of Array.from(workbookDocument?.getElementsByTagNameNS("*", "sheet") ?? [])) {
365
+ const relationshipId = sheet.getAttributeNS(REL_NS, "id") ?? sheet.getAttribute("r:id");
366
+ const relationship = relationshipId ? workbookRelationships.get(relationshipId) : null;
367
+ if (!relationship?.type.endsWith("/chartsheet")) continue;
368
+ const chartsheet = chartsheets.find((entry) => entry.name === sheet.getAttribute("name"));
369
+ if (!chartsheet || chartsheet.workbookSheetIndex == null) continue;
370
+ const sheetDocument = readXml(archive, relationship.target);
371
+ const sheetRelationships = readRelationships(archive, relationship.target);
372
+ const attachments = [];
373
+ for (const drawing of Array.from(sheetDocument?.getElementsByTagNameNS("*", "drawing") ?? [])) {
374
+ const drawingId = drawing.getAttributeNS(REL_NS, "id") ?? drawing.getAttribute("r:id");
375
+ const drawingRelationship = drawingId ? sheetRelationships.get(drawingId) : null;
376
+ if (!drawingRelationship?.type.endsWith("/drawing")) continue;
377
+ const drawingRelsPath = relationshipPath(drawingRelationship.target);
378
+ attachments.push({
379
+ drawingPath: drawingRelationship.target,
380
+ drawingRelsPath: archive[drawingRelsPath] ? drawingRelsPath : null,
381
+ mediaPaths: []
382
+ });
383
+ }
384
+ origins.set(chartsheet.index, { attachments, workbookSheetIndex: chartsheet.workbookSheetIndex });
385
+ }
386
+ return origins;
387
+ }
316
388
 
317
389
  // src/charts.ts
318
- import { strFromU8, strToU8 } from "fflate";
390
+ import { strFromU8 as strFromU82, strToU8 } from "fflate";
319
391
  var CHART_NS = "http://schemas.openxmlformats.org/drawingml/2006/chart";
320
392
  var DRAWINGML_NS = "http://schemas.openxmlformats.org/drawingml/2006/main";
321
393
  var CHART_REL_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart";
@@ -464,18 +536,33 @@ function applyChartSeriesFormula(chart, seriesIndex, formula, workbook) {
464
536
  }
465
537
  const categoriesRef = {
466
538
  ...currentSeries.categoriesRef ?? {},
467
- formula: parsed.categoryFormula
539
+ formula: parsed.categoryFormula,
540
+ values: parsed.categoryFormula === currentSeries.categoriesRef?.formula ? currentSeries.categoriesRef.values : void 0
468
541
  };
469
542
  const valuesRef = {
470
543
  ...currentSeries.valuesRef ?? {},
471
- formula: parsed.valueFormula
544
+ formula: parsed.valueFormula,
545
+ values: parsed.valueFormula === currentSeries.valuesRef?.formula ? currentSeries.valuesRef.values : void 0
472
546
  };
473
547
  const bubbleSizeRef = chart.chartType === "Bubble" || parsed.bubbleSizeFormula ? {
474
548
  ...currentSeries.bubbleSizeRef ?? {},
475
- formula: parsed.bubbleSizeFormula
549
+ formula: parsed.bubbleSizeFormula,
550
+ values: parsed.bubbleSizeFormula === currentSeries.bubbleSizeRef?.formula ? currentSeries.bubbleSizeRef?.values : void 0
476
551
  } : currentSeries.bubbleSizeRef ?? null;
552
+ const isUnresolved = (formula2) => Boolean(
553
+ workbook && formula2 && !resolveReferenceSheet(workbook, chart.workbookSheetIndex, formula2).sheet
554
+ );
555
+ const resolveEditedReference = (reference, currentReference, currentValues, mode) => {
556
+ if (!workbook) return currentValues;
557
+ if (reference?.formula === currentReference?.formula && isUnresolved(reference?.formula)) return currentValues;
558
+ return resolveReferenceValues(workbook, chart.workbookSheetIndex, reference, mode);
559
+ };
477
560
  const raw = {
478
- ...currentSeries.raw ?? {}
561
+ ...currentSeries.raw ?? {},
562
+ unresolvedCategoriesReference: isUnresolved(categoriesRef.formula),
563
+ unresolvedValuesReference: isUnresolved(valuesRef.formula),
564
+ unresolvedBubbleSizeReference: isUnresolved(bubbleSizeRef?.formula),
565
+ unresolvedNameReference: isUnresolved(parsed.nameFormula)
479
566
  };
480
567
  if (parsed.nameFormula) {
481
568
  raw.name = parsed.nameFormula;
@@ -485,17 +572,21 @@ function applyChartSeriesFormula(chart, seriesIndex, formula, workbook) {
485
572
  const nextSeries = {
486
573
  ...currentSeries,
487
574
  bubbleSizeRef,
488
- bubbleSizes: workbook && bubbleSizeRef?.formula ? resolveReferenceValues(workbook, chart.workbookSheetIndex, bubbleSizeRef, "value").map((value) => typeof value === "number" && Number.isFinite(value) ? value : null) : currentSeries.bubbleSizes,
489
- categories: workbook ? resolveReferenceValues(workbook, chart.workbookSheetIndex, categoriesRef, "category") : currentSeries.categories,
575
+ bubbleSizes: resolveEditedReference(bubbleSizeRef, currentSeries.bubbleSizeRef, currentSeries.bubbleSizes ?? [], "value").map((value) => typeof value === "number" && Number.isFinite(value) ? value : null),
576
+ categories: resolveEditedReference(categoriesRef, currentSeries.categoriesRef, currentSeries.categories, "category"),
490
577
  categoriesRef,
491
- name: parsed.nameLiteral ?? (parsed.nameFormula && workbook ? resolveSeriesName(workbook, chart.workbookSheetIndex, parsed.nameFormula) : parsed.nameFormula ?? currentSeries.name),
578
+ 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
579
  raw,
493
- values: workbook ? resolveReferenceValues(workbook, chart.workbookSheetIndex, valuesRef, "value").map((value) => typeof value === "number" && Number.isFinite(value) ? value : null) : currentSeries.values,
580
+ values: resolveEditedReference(valuesRef, currentSeries.valuesRef, currentSeries.values, "value").map((value) => typeof value === "number" && Number.isFinite(value) ? value : null),
494
581
  valuesRef
495
582
  };
496
583
  return {
497
584
  ...chart,
498
- series: chart.series.map((series, index) => index === seriesIndex ? nextSeries : series)
585
+ series: chart.series.map((series, index) => index === seriesIndex ? nextSeries : series),
586
+ typeGroups: chart.typeGroups?.map((group) => ({
587
+ ...group,
588
+ series: group.series.map((series) => series.id === currentSeries.id ? nextSeries : series)
589
+ }))
499
590
  };
500
591
  }
501
592
  function normalizeWorksheetVisibility(value) {
@@ -1201,9 +1292,10 @@ function applyBuiltinChartDefaults(chart, themePalette) {
1201
1292
  };
1202
1293
  };
1203
1294
  chart.series = chart.series.map(applySeriesDefaults);
1295
+ const canonicalSeries = chart.id.startsWith("chart-ex-") ? null : new Map(chart.series.map((series) => [series.id, series]));
1204
1296
  let groupSeriesOffset = 0;
1205
1297
  chart.typeGroups = chart.typeGroups?.map((group) => {
1206
- const series = group.series.map((entry, index) => applySeriesDefaults(entry, groupSeriesOffset + index));
1298
+ const series = group.series.map((entry, index) => canonicalSeries?.get(entry.id) ?? applySeriesDefaults(entry, groupSeriesOffset + index));
1207
1299
  groupSeriesOffset += group.series.length;
1208
1300
  return { ...group, series };
1209
1301
  });
@@ -1347,11 +1439,12 @@ function applyChartSeriesStyleFromXml(chart, chartTypeNode, themePalette) {
1347
1439
  const rawFillColor = typeof existingShapeProperties?.solidFillHex === "string" ? normalizeHexColor(existingShapeProperties.solidFillHex) : null;
1348
1440
  const rawLineColor = typeof existingShapeProperties?.lineColorHex === "string" ? normalizeHexColor(existingShapeProperties.lineColorHex) : null;
1349
1441
  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;
1442
+ const hasCategoryReference = typeof series.categoriesRef?.formula === "string" && series.categoriesRef.formula.length > 0 && !series.raw?.unresolvedCategoriesReference;
1443
+ const hasValueReference = typeof series.valuesRef?.formula === "string" && series.valuesRef.formula.length > 0 && !series.raw?.unresolvedValuesReference;
1444
+ const hasBubbleSizeReference = typeof series.bubbleSizeRef?.formula === "string" && series.bubbleSizeRef.formula.length > 0 && !series.raw?.unresolvedBubbleSizeReference;
1353
1445
  return {
1354
1446
  ...series,
1447
+ name: series.raw?.unresolvedNameReference ? parseChartCacheValues(getFirstLocalChild(seriesNode, "tx"), "strCache", "category")?.[0]?.toString() ?? series.name : series.name,
1355
1448
  bubbleSizes: !hasBubbleSizeReference && cachedBubbleSizes ? cachedBubbleSizes.map((value) => typeof value === "number" && Number.isFinite(value) ? value : null) : series.bubbleSizes,
1356
1449
  categories: !hasCategoryReference && cachedCategories ? cachedCategories : series.categories,
1357
1450
  color: rawFillColor ?? rawLineColor ?? fillColor ?? lineStyle.color ?? series.color,
@@ -1611,6 +1704,23 @@ function applyChartStyleFromXml(chart, chartPath, archive, themePalette) {
1611
1704
  if (typeof fallbackStyleId === "number" && Number.isFinite(fallbackStyleId)) {
1612
1705
  chart.chartStyleId = fallbackStyleId;
1613
1706
  }
1707
+ const sourceSeries = chart.raw?.officeSourceSeries;
1708
+ if (sourceSeries && chartDocument?.documentElement.namespaceURI === "http://schemas.microsoft.com/office/drawing/2014/chartex") {
1709
+ chart.renderSource = {
1710
+ kind: chart.chartExLayout ?? "",
1711
+ seriesTypes: getLocalDescendants(chartNode, "series").map((node) => node.getAttribute("layoutId") ?? ""),
1712
+ sourceSeries,
1713
+ experimental: true,
1714
+ xml: chartXml,
1715
+ themeColors: themePalette ? Object.fromEntries(Object.entries(THEME_COLOR_INDEX_BY_NAME).flatMap(([key, index]) => {
1716
+ const color = themePalette.colorsByIndex[index];
1717
+ return color ? [[key, color]] : [];
1718
+ })) : void 0,
1719
+ themeOverrideXml: readArchiveText(archive, relationships.get("http://schemas.openxmlformats.org/officeDocument/2006/relationships/themeOverride")) ?? void 0,
1720
+ styleXml: readArchiveText(archive, relationships.get(CHART_STYLE_REL_TYPE)) ?? void 0,
1721
+ colorStyleXml: readArchiveText(archive, relationships.get(CHART_COLOR_STYLE_REL_TYPE)) ?? void 0
1722
+ };
1723
+ }
1614
1724
  applyModernChartExStyles();
1615
1725
  applyFallbackSeriesStyles();
1616
1726
  applyBuiltinChartDefaults(chart, themePalette);
@@ -1852,11 +1962,22 @@ function applyChartStyleFromXml(chart, chartPath, archive, themePalette) {
1852
1962
  chart.axes = [...chart.axes, seriesAxis];
1853
1963
  }
1854
1964
  }
1855
- const kind = chartTypeNode.localName === "lineChart" && chart.chartType === "Line" ? "line" : chartTypeNode.localName === "barChart" && chart.chartType === "ColumnClustered" ? "bar" : null;
1856
- const groupCount = Array.from(plotArea.children).filter((entry) => entry.localName.endsWith("Chart")).length;
1857
- if (kind && groupCount === 1 && !chart.is3d && !plotArea.querySelector("trendline, errBars, dropLines, hiLowLines, upDownBars, dateAx, multiLvlStrRef, pictureOptions") && getLocalChildren(chartTypeNode, "ser").length === chart.series.length) {
1965
+ const groups = Array.from(plotArea.children).filter((entry) => entry.localName.endsWith("Chart"));
1966
+ const seriesTypes = groups.flatMap((group) => getLocalChildren(group, "ser").map(() => group.localName.slice(0, -5)));
1967
+ const seriesNodes = groups.flatMap((group) => getLocalChildren(group, "ser"));
1968
+ const indexedXSeries = seriesNodes.map((series) => {
1969
+ const x2 = getFirstLocalChild(series, "xVal");
1970
+ return Boolean(x2 && (getFirstLocalChild(x2, "multiLvlStrRef") || getFirstLocalChild(x2, "strRef") || getFirstLocalChild(x2, "strLit")));
1971
+ });
1972
+ const unsupportedHierarchy = getLocalDescendants(plotArea, "multiLvlStrRef").some((node) => node.parentElement?.localName !== "xVal");
1973
+ const kind = chartTypeNode.localName.slice(0, -5);
1974
+ 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");
1975
+ if (seriesTypes.length === chart.series.length && !unsupportedHierarchy && !plotArea.querySelector("pictureOptions")) {
1858
1976
  chart.renderSource = {
1859
1977
  kind,
1978
+ seriesTypes,
1979
+ indexedXSeries,
1980
+ experimental: !stable,
1860
1981
  xml: chartXml,
1861
1982
  themeColors: themePalette ? Object.fromEntries(Object.entries(THEME_COLOR_INDEX_BY_NAME).flatMap(([key, index]) => {
1862
1983
  const color = themePalette.colorsByIndex[index];
@@ -1867,7 +1988,21 @@ function applyChartStyleFromXml(chart, chartPath, archive, themePalette) {
1867
1988
  colorStyleXml: readArchiveText(archive, relationships.get(CHART_COLOR_STYLE_REL_TYPE)) ?? void 0
1868
1989
  };
1869
1990
  }
1870
- applyChartSeriesStyleFromXml(chart, chartTypeNode, themePalette);
1991
+ if (groups.length > 1 && chart.typeGroups?.length === groups.length) {
1992
+ let seriesOffset = 0;
1993
+ const hydratedSeries = [];
1994
+ chart.typeGroups = chart.typeGroups.map((group, index) => {
1995
+ const count = getLocalChildren(groups[index], "ser").length;
1996
+ const groupChart = { ...chart, chartType: group.chartType, series: chart.series.slice(seriesOffset, seriesOffset + count) };
1997
+ applyChartSeriesStyleFromXml(groupChart, groups[index], themePalette);
1998
+ seriesOffset += count;
1999
+ hydratedSeries.push(...groupChart.series);
2000
+ return { ...group, series: groupChart.series };
2001
+ });
2002
+ chart.series = [...hydratedSeries, ...chart.series.slice(seriesOffset)];
2003
+ } else {
2004
+ applyChartSeriesStyleFromXml(chart, chartTypeNode, themePalette);
2005
+ }
1871
2006
  applyFallbackSeriesStyles();
1872
2007
  applyBuiltinChartDefaults(chart, themePalette);
1873
2008
  }
@@ -1918,7 +2053,7 @@ function readArchiveText(archive, path) {
1918
2053
  return null;
1919
2054
  }
1920
2055
  const entry = archive[normalizeArchivePath(path)];
1921
- return entry ? strFromU8(entry) : null;
2056
+ return entry ? strFromU82(entry) : null;
1922
2057
  }
1923
2058
  function parseXml(xml) {
1924
2059
  if (typeof DOMParser === "undefined") {
@@ -2054,8 +2189,8 @@ function resolveReferenceSheet(workbook, fallbackSheetIndex, formula) {
2054
2189
  if (!formula) {
2055
2190
  return {
2056
2191
  range: null,
2057
- sheet: workbook.getSheet(fallbackSheetIndex),
2058
- sheetName: workbook.getSheet(fallbackSheetIndex)?.name ?? ""
2192
+ sheet: fallbackSheetIndex < workbook.sheetCount ? workbook.getSheet(fallbackSheetIndex) : null,
2193
+ sheetName: fallbackSheetIndex < workbook.sheetCount ? workbook.getSheet(fallbackSheetIndex)?.name ?? "" : ""
2059
2194
  };
2060
2195
  }
2061
2196
  const trimmedFormula = formula.trim();
@@ -2072,8 +2207,8 @@ function resolveReferenceSheet(workbook, fallbackSheetIndex, formula) {
2072
2207
  if (!split) {
2073
2208
  return {
2074
2209
  range: parseA1Range(trimmedFormula),
2075
- sheet: workbook.getSheet(fallbackSheetIndex),
2076
- sheetName: workbook.getSheet(fallbackSheetIndex)?.name ?? ""
2210
+ sheet: fallbackSheetIndex < workbook.sheetCount ? workbook.getSheet(fallbackSheetIndex) : null,
2211
+ sheetName: fallbackSheetIndex < workbook.sheetCount ? workbook.getSheet(fallbackSheetIndex)?.name ?? "" : ""
2077
2212
  };
2078
2213
  }
2079
2214
  try {
@@ -2085,8 +2220,8 @@ function resolveReferenceSheet(workbook, fallbackSheetIndex, formula) {
2085
2220
  } catch {
2086
2221
  return {
2087
2222
  range: parseA1Range(split.range),
2088
- sheet: workbook.getSheet(fallbackSheetIndex),
2089
- sheetName: workbook.getSheet(fallbackSheetIndex)?.name ?? ""
2223
+ sheet: null,
2224
+ sheetName: split.sheetName
2090
2225
  };
2091
2226
  }
2092
2227
  }
@@ -2355,6 +2490,7 @@ function buildChartExParetoLineSeries(series, sourceRaw, index) {
2355
2490
  });
2356
2491
  return {
2357
2492
  ...series,
2493
+ id: series.id.replace(/-series-\d+$/, `-series-${index}`),
2358
2494
  color: void 0,
2359
2495
  lineColor: void 0,
2360
2496
  markerColor: void 0,
@@ -2617,7 +2753,7 @@ function normalizeChartExChart(workbook, workbookSheetIndex, visibleSheetIndex,
2617
2753
  name: typeof drawing.name === "string" ? drawing.name : chartTitle,
2618
2754
  overlap: void 0,
2619
2755
  plotVisibleOnly: void 0,
2620
- raw: chart,
2756
+ raw: { ...chart, officeSourceSeries: normalizedSeries },
2621
2757
  radarStyle: void 0,
2622
2758
  scatterStyle: void 0,
2623
2759
  roundedCorners: void 0,
@@ -3085,7 +3221,13 @@ function normalizeChartSeries(workbook, workbookSheetIndex, chartId, raw, index)
3085
3221
  name: resolveSeriesName(workbook, workbookSheetIndex, series.name),
3086
3222
  negativeColor: void 0,
3087
3223
  negativeLineColor: void 0,
3088
- raw: series,
3224
+ raw: {
3225
+ ...series,
3226
+ unresolvedCategoriesReference: Boolean(categoriesRef?.formula && !resolveReferenceSheet(workbook, workbookSheetIndex, categoriesRef.formula).sheet),
3227
+ unresolvedValuesReference: Boolean(valuesRef?.formula && !resolveReferenceSheet(workbook, workbookSheetIndex, valuesRef.formula).sheet),
3228
+ unresolvedBubbleSizeReference: Boolean(bubbleSizeRef?.formula && !resolveReferenceSheet(workbook, workbookSheetIndex, bubbleSizeRef.formula).sheet),
3229
+ unresolvedNameReference: typeof series.name === "string" && series.name.includes("!") && !resolveReferenceSheet(workbook, workbookSheetIndex, series.name).sheet
3230
+ },
3089
3231
  shapeProperties,
3090
3232
  smooth: typeof series.smooth === "boolean" ? series.smooth : void 0,
3091
3233
  values: resolveReferenceValues(workbook, workbookSheetIndex, valuesRef, "value").map((value) => typeof value === "number" && Number.isFinite(value) ? value : null),
@@ -3147,12 +3289,15 @@ function buildTabs(workbook, chartsheets, visibleSheetIndexByWorkbookSheetIndex,
3147
3289
  const slotIndex = typeof entry.index === "number" ? entry.index : index;
3148
3290
  if (slotType === "chartsheet") {
3149
3291
  const chartsheet = chartsheets[slotIndex];
3292
+ const visibility2 = normalizeWorksheetVisibility(chartsheet?.raw?.visibility);
3293
+ if (!showHiddenSheets && visibility2 !== "visible") return [];
3150
3294
  return chartsheet ? [{
3151
3295
  chartsheetIndex: slotIndex,
3152
3296
  id: `chartsheet-${slotIndex}`,
3153
3297
  index,
3154
3298
  kind: "chartsheet",
3155
- name: chartsheet.name
3299
+ name: chartsheet.name,
3300
+ visibility: visibility2
3156
3301
  }] : [];
3157
3302
  }
3158
3303
  const worksheet = workbook.getSheet(slotIndex);
@@ -3256,9 +3401,24 @@ function applyChartOrigins(chartsByWorkbookSheetIndex, chartOriginsById, archive
3256
3401
  });
3257
3402
  }
3258
3403
  }
3259
- function hydrateWorkbookChartStyles(chartsByWorkbookSheetIndex, imageAssets) {
3404
+ function hydrateWorkbookChartStyles(chartsByWorkbookSheetIndex, imageAssets, chartsheets = []) {
3260
3405
  const chartOriginsById = /* @__PURE__ */ new Map();
3261
3406
  applyChartOrigins(chartsByWorkbookSheetIndex, chartOriginsById, imageAssets.archive, imageAssets.sheetOrigins);
3407
+ const chartsheetOrigins = collectChartsheetDrawingOrigins(imageAssets.archive, chartsheets);
3408
+ for (const chartsheet of chartsheets) {
3409
+ if (chartsheet.workbookSheetIndex == null) continue;
3410
+ const charts = chartsByWorkbookSheetIndex[chartsheet.workbookSheetIndex] ?? [];
3411
+ const origins = collectChartOriginsForSheet(imageAssets.archive, chartsheetOrigins.get(chartsheet.index) ?? null);
3412
+ for (const chart of charts) {
3413
+ const kind = chart.id.startsWith("chart-ex-") ? "modern" : "classic";
3414
+ const origin = origins.find((entry) => entry.chartKind === kind);
3415
+ if (!origin) continue;
3416
+ if (origin.anchor) chart.anchor = origin.anchor;
3417
+ chart.chartPath = origin.chartPath ?? void 0;
3418
+ chartsheet.chartPath = chart.chartPath;
3419
+ chartOriginsById.set(chart.id, origin);
3420
+ }
3421
+ }
3262
3422
  for (const charts of chartsByWorkbookSheetIndex) {
3263
3423
  for (const chart of charts) {
3264
3424
  applyChartStyleFromXml(chart, chart.chartPath, imageAssets.archive, imageAssets.themePalette);
@@ -3267,6 +3427,84 @@ function hydrateWorkbookChartStyles(chartsByWorkbookSheetIndex, imageAssets) {
3267
3427
  }
3268
3428
  return chartOriginsById;
3269
3429
  }
3430
+ function normalizeClassicChartDrawing(workbook, workbookSheetIndex, visibleSheetIndex, rawChart, chartIndex, chartId = `chart-${workbookSheetIndex}-${chartIndex}`) {
3431
+ const drawing = rawChart && typeof rawChart === "object" ? rawChart : {};
3432
+ const chart = drawing.chart && typeof drawing.chart === "object" ? drawing.chart : {};
3433
+ const rawView3d = chart.view3D && typeof chart.view3D === "object" ? chart.view3D : null;
3434
+ const rawSeries = Array.isArray(chart.series) ? chart.series : [];
3435
+ const typeGroups = Array.isArray(chart.typeGroups) ? chart.typeGroups.map((entry, groupIndex) => normalizeChartTypeGroup(workbook, workbookSheetIndex, chartId, entry, groupIndex)).filter((value) => value != null) : [];
3436
+ let seriesOrdinal = 0;
3437
+ const series = typeGroups.some((group) => group.series.length > 0) ? typeGroups.flatMap((group) => {
3438
+ group.series = group.series.map((entry) => ({ ...entry, id: `${chartId}-series-${seriesOrdinal++}` }));
3439
+ return group.series;
3440
+ }) : rawSeries.map((entry, seriesIndex) => normalizeChartSeries(workbook, workbookSheetIndex, chartId, entry, seriesIndex));
3441
+ const chartLevelDataLabels = normalizeChartDataLabels(chart.dataLabels);
3442
+ const firstSeriesDataLabels = rawSeries.length > 0 && rawSeries[0] && typeof rawSeries[0] === "object" ? normalizeChartDataLabels(rawSeries[0].dataLabels) : null;
3443
+ return {
3444
+ anchor: normalizeChartAnchor(drawing.anchor),
3445
+ autoTitleDeleted: typeof chart.autoTitleDeleted === "boolean" ? chart.autoTitleDeleted : void 0,
3446
+ axes: Array.isArray(chart.axes) ? chart.axes.map(normalizeChartAxis).filter((value) => Boolean(value)) : [],
3447
+ axisLabelColor: void 0,
3448
+ axisLineColor: void 0,
3449
+ categoryAxis: normalizeChartAxis(chart.categoryAxis),
3450
+ chartAreaBorderColor: void 0,
3451
+ chartAreaFillColor: void 0,
3452
+ chartColorPalette: void 0,
3453
+ chartColorPaletteOffset: void 0,
3454
+ chartPath: void 0,
3455
+ chartStyleId: void 0,
3456
+ chartType: typeof chart.chartType === "string" ? chart.chartType : "ColumnClustered",
3457
+ dataLabels: chartLevelDataLabels ?? firstSeriesDataLabels,
3458
+ displayBlanksAs: typeof chart.displayBlanksAs === "string" ? chart.displayBlanksAs : void 0,
3459
+ editable: true,
3460
+ firstSliceAngle: typeof chart.firstSliceAngle === "number" ? chart.firstSliceAngle : void 0,
3461
+ fontFamily: void 0,
3462
+ gapWidth: typeof chart.gapWidth === "number" ? chart.gapWidth : void 0,
3463
+ holeSize: typeof chart.holeSize === "number" ? chart.holeSize : void 0,
3464
+ id: chartId,
3465
+ is3d: typeof chart.is3D === "boolean" ? chart.is3D : typeof chart.is3d === "boolean" ? chart.is3d : void 0,
3466
+ legend: normalizeLegend(chart.legend) ? {
3467
+ ...normalizeLegend(chart.legend),
3468
+ position: normalizeLegendPosition(normalizeLegend(chart.legend)?.position)
3469
+ } : null,
3470
+ name: typeof drawing.name === "string" ? drawing.name : void 0,
3471
+ overlap: typeof chart.overlap === "number" ? chart.overlap : void 0,
3472
+ plotVisibleOnly: typeof chart.plotVisibleOnly === "boolean" ? chart.plotVisibleOnly : void 0,
3473
+ raw: chart,
3474
+ radarStyle: typeof chart.radarStyle === "string" ? chart.radarStyle : void 0,
3475
+ scatterStyle: typeof chart.scatterStyle === "string" ? chart.scatterStyle : void 0,
3476
+ roundedCorners: typeof chart.roundedCorners === "boolean" ? chart.roundedCorners : void 0,
3477
+ shape3d: typeof chart.shape === "string" ? chart.shape : typeof chart.shape3d === "string" ? chart.shape3d : void 0,
3478
+ seriesAxis: null,
3479
+ series,
3480
+ sheetIndex: visibleSheetIndex,
3481
+ showDlblsOverMax: typeof chart.showDlblsOverMax === "boolean" ? chart.showDlblsOverMax : void 0,
3482
+ sideWall: null,
3483
+ backWall: null,
3484
+ bubbleScale: typeof chart.bubbleScale === "number" ? chart.bubbleScale : void 0,
3485
+ bubble3d: typeof chart.bubble3d === "boolean" ? chart.bubble3d : void 0,
3486
+ floor: null,
3487
+ surfaceMaterial: void 0,
3488
+ textColor: void 0,
3489
+ title: typeof chart.title === "string" ? chart.title : void 0,
3490
+ titleColor: void 0,
3491
+ titleFontFamily: void 0,
3492
+ typeGroups,
3493
+ valueAxis: normalizeChartAxis(chart.valueAxis),
3494
+ varyColors: typeof chart.varyColors === "boolean" ? chart.varyColors : void 0,
3495
+ view3d: rawView3d ? {
3496
+ depthPercent: typeof rawView3d.depthPercent === "number" ? rawView3d.depthPercent : void 0,
3497
+ heightPercent: typeof rawView3d.heightPercent === "number" ? rawView3d.heightPercent : void 0,
3498
+ perspective: typeof rawView3d.perspective === "number" ? rawView3d.perspective : void 0,
3499
+ rAngAx: typeof rawView3d.rAngAx === "boolean" ? rawView3d.rAngAx : typeof rawView3d.rightAngleAxes === "boolean" ? rawView3d.rightAngleAxes : void 0,
3500
+ rotX: typeof rawView3d.rotX === "number" ? rawView3d.rotX : typeof rawView3d.rotateX === "number" ? rawView3d.rotateX : void 0,
3501
+ rotY: typeof rawView3d.rotY === "number" ? rawView3d.rotY : typeof rawView3d.rotateY === "number" ? rawView3d.rotateY : void 0
3502
+ } : void 0,
3503
+ wireframe: typeof chart.wireframe === "boolean" ? chart.wireframe : void 0,
3504
+ workbookSheetIndex,
3505
+ zIndex: Array.isArray(drawing.drawingPath) && typeof drawing.drawingPath[0] === "number" ? drawing.drawingPath[0] + 1 : chartIndex + 1
3506
+ };
3507
+ }
3270
3508
  function loadWorkbookChartAssets(workbook, imageAssets, visibleSheetIndexByWorkbookSheetIndex, showHiddenSheets = false) {
3271
3509
  const excludedChartIds = /* @__PURE__ */ new Set();
3272
3510
  const chartsByWorkbookSheetIndex = Array.from({ length: workbook.sheetCount }, (_2, workbookSheetIndex) => {
@@ -3279,76 +3517,7 @@ function loadWorkbookChartAssets(workbook, imageAssets, visibleSheetIndexByWorkb
3279
3517
  if (rawChart.hidden || !rawChart.anchor) {
3280
3518
  excludedChartIds.add(chartId);
3281
3519
  }
3282
- const drawing = rawChart && typeof rawChart === "object" ? rawChart : {};
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
- };
3520
+ return normalizeClassicChartDrawing(workbook, workbookSheetIndex, visibleSheetIndex, rawChart, chartIndex, chartId);
3352
3521
  });
3353
3522
  const modernCharts = rawChartsEx.map((rawChartEx, chartExIndex) => {
3354
3523
  const chartId = `chart-ex-${workbookSheetIndex}-${chartExIndex}`;
@@ -3367,8 +3536,36 @@ function loadWorkbookChartAssets(workbook, imageAssets, visibleSheetIndexByWorkb
3367
3536
  return [...classicCharts, ...modernCharts];
3368
3537
  });
3369
3538
  const chartsheets = Array.isArray(workbook.chartsheets) ? workbook.chartsheets.map((entry, index) => normalizeChartsheet(entry, index)) : [];
3539
+ for (const chartsheet of chartsheets) {
3540
+ const workbookSheetIndex = workbook.sheetCount + chartsheet.index;
3541
+ const raw = chartsheet.raw;
3542
+ const charts = [];
3543
+ if (raw?.chart && typeof raw.chart === "object") {
3544
+ charts.push(normalizeClassicChartDrawing(
3545
+ workbook,
3546
+ workbookSheetIndex,
3547
+ workbookSheetIndex,
3548
+ raw,
3549
+ 0,
3550
+ `${chartsheet.id}-chart-0`
3551
+ ));
3552
+ }
3553
+ if (raw?.chartEx && typeof raw.chartEx === "object") {
3554
+ charts.push(normalizeChartExChart(
3555
+ workbook,
3556
+ workbookSheetIndex,
3557
+ workbookSheetIndex,
3558
+ raw,
3559
+ 0,
3560
+ imageAssets?.themePalette ?? null
3561
+ ));
3562
+ }
3563
+ chartsByWorkbookSheetIndex[workbookSheetIndex] = charts;
3564
+ chartsheet.chartIds = charts.map((chart) => chart.id);
3565
+ chartsheet.workbookSheetIndex = workbookSheetIndex;
3566
+ }
3370
3567
  const tabs = buildTabs(workbook, chartsheets, visibleSheetIndexByWorkbookSheetIndex, showHiddenSheets);
3371
- const chartOriginsById = imageAssets ? hydrateWorkbookChartStyles(chartsByWorkbookSheetIndex, imageAssets) : /* @__PURE__ */ new Map();
3568
+ const chartOriginsById = imageAssets ? hydrateWorkbookChartStyles(chartsByWorkbookSheetIndex, imageAssets, chartsheets) : /* @__PURE__ */ new Map();
3372
3569
  if (imageAssets) {
3373
3570
  for (let index = 0; index < chartsByWorkbookSheetIndex.length; index += 1) {
3374
3571
  chartsByWorkbookSheetIndex[index] = (chartsByWorkbookSheetIndex[index] ?? []).filter((chart) => !excludedChartIds.has(chart.id));
@@ -3839,8 +4036,8 @@ function resolveWorkbookFillStyle(fill, themePalette) {
3839
4036
  }
3840
4037
 
3841
4038
  // src/images.ts
3842
- import { strFromU8 as strFromU82, strToU8 as strToU82, unzipSync, zipSync } from "fflate";
3843
- var REL_NS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
4039
+ import { strFromU8 as strFromU83, strToU8 as strToU82, unzipSync, zipSync } from "fflate";
4040
+ var REL_NS2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
3844
4041
  var PKG_REL_NS = "http://schemas.openxmlformats.org/package/2006/relationships";
3845
4042
  var SPREADSHEET_NS = "http://schemas.openxmlformats.org/spreadsheetml/2006/main";
3846
4043
  var CONTENT_TYPES_NS = "http://schemas.openxmlformats.org/package/2006/content-types";
@@ -3889,6 +4086,19 @@ function measureColumnCharacterWidthPx(fontFamily, fontSizePt) {
3889
4086
  columnCharacterWidthCache.set(cacheKey, width);
3890
4087
  return width;
3891
4088
  }
4089
+ function measureOfficeDigitWidthPt(fontFamily, fontSizePt) {
4090
+ const family = fontFamily?.trim() || "Calibri";
4091
+ const size = typeof fontSizePt === "number" && fontSizePt > 0 ? fontSizePt : 11;
4092
+ const key = `office|${family}|${size}`;
4093
+ const cached = columnCharacterWidthCache.get(key);
4094
+ if (cached !== void 0) return cached;
4095
+ const context = typeof document !== "undefined" ? document.createElement("canvas").getContext("2d") : null;
4096
+ if (!context) return 6;
4097
+ context.font = `${size}px ${JSON.stringify(family)}, "React XLSX Carlito"`;
4098
+ const width = Math.max(1, Math.round(Math.max(...Array.from("0123456789", (digit) => context.measureText(digit).width))));
4099
+ columnCharacterWidthCache.set(key, width);
4100
+ return width;
4101
+ }
3892
4102
  function sheetColumnWidthToPixels(width, columnCharacterWidthPx = DEFAULT_COLUMN_CHARACTER_WIDTH_PX) {
3893
4103
  if (!Number.isFinite(width) || width <= 0) {
3894
4104
  return MIN_COL_WIDTH_PX;
@@ -4061,7 +4271,7 @@ function serializeXml2(document2) {
4061
4271
  }
4062
4272
  function readArchiveText2(archive, path) {
4063
4273
  const entry = archive[path];
4064
- return entry ? strFromU82(entry) : null;
4274
+ return entry ? strFromU83(entry) : null;
4065
4275
  }
4066
4276
  function parseColumnReference(reference) {
4067
4277
  let value = 0;
@@ -4156,10 +4366,10 @@ function readFeaturePropertyBagCheckboxComplements(archive) {
4156
4366
  return checkboxComplementIndices;
4157
4367
  }
4158
4368
  function getRelationshipId(element) {
4159
- return element.getAttributeNS(REL_NS, "id") ?? element.getAttribute("r:id") ?? element.getAttribute("id");
4369
+ return element.getAttributeNS(REL_NS2, "id") ?? element.getAttribute("r:id") ?? element.getAttribute("id");
4160
4370
  }
4161
4371
  function getEmbeddedRelationshipId(element) {
4162
- return element.getAttributeNS(REL_NS, "embed") ?? element.getAttribute("r:embed") ?? element.getAttribute("embed");
4372
+ return element.getAttributeNS(REL_NS2, "embed") ?? element.getAttribute("r:embed") ?? element.getAttribute("embed");
4163
4373
  }
4164
4374
  function setChildText(parent, localName, value) {
4165
4375
  const child = getFirstChild(parent, localName);
@@ -5027,6 +5237,18 @@ function parseSheetState(archive, path, options) {
5027
5237
  options?.defaultFont?.sizePt
5028
5238
  );
5029
5239
  const defaultRowHeight = Number(sheetFormatNode?.getAttribute("defaultRowHeight") ?? 15);
5240
+ const digitWidthPt = measureOfficeDigitWidthPt(options?.defaultFont?.family, options?.defaultFont?.sizePt);
5241
+ const storedColumnPixels = (width) => Math.max(0, Math.floor(
5242
+ (256 * width + Math.floor(128 / digitWidthPt)) / 256 * digitWidthPt
5243
+ ) * (4 / 3));
5244
+ const explicitDefaultWidth = Number(sheetFormatNode?.getAttribute("defaultColWidth") ?? Number.NaN);
5245
+ const baseWidth = Number(sheetFormatNode?.getAttribute("baseColWidth") ?? 8);
5246
+ const officeLayout = {
5247
+ defaultColumnPx: Number.isFinite(explicitDefaultWidth) && explicitDefaultWidth > 0 ? storedColumnPixels(explicitDefaultWidth) : ((Number.isFinite(baseWidth) && baseWidth > 0 ? baseWidth : 8) * digitWidthPt + 5) * (4 / 3),
5248
+ defaultRowPx: (Number.isFinite(defaultRowHeight) && defaultRowHeight > 0 ? defaultRowHeight : 15) * (4 / 3),
5249
+ columns: {},
5250
+ rows: {}
5251
+ };
5030
5252
  const defaultColWidth = Number(
5031
5253
  sheetFormatNode?.getAttribute("defaultColWidth") ?? sheetFormatNode?.getAttribute("baseColWidth") ?? 8.43
5032
5254
  );
@@ -5060,6 +5282,7 @@ function parseSheetState(archive, path, options) {
5060
5282
  const styleId = Number(rowNode.getAttribute("s") ?? Number.NaN);
5061
5283
  if (rowIndex >= 0 && Number.isFinite(height)) {
5062
5284
  rowHeightOverridesPx[rowIndex] = Math.max(MIN_ROW_HEIGHT_PX, Math.round(height * 1.33));
5285
+ officeLayout.rows[rowIndex] = { sourcePx: rowHeightOverridesPx[rowIndex], sizePx: Math.max(0, height * (4 / 3)) };
5063
5286
  }
5064
5287
  if (rowIndex >= 0 && Number.isFinite(styleId)) {
5065
5288
  rowStyleIds[rowIndex] = styleId;
@@ -5098,6 +5321,7 @@ function parseSheetState(archive, path, options) {
5098
5321
  if (Number.isFinite(width)) {
5099
5322
  const widthPx = sheetColumnWidthToPixels(width, columnWidthCharacterWidthPx);
5100
5323
  colWidthOverridesPx[col] = widthPx;
5324
+ officeLayout.columns[col] = { sourcePx: widthPx, sizePx: storedColumnPixels(width) };
5101
5325
  }
5102
5326
  if (Number.isFinite(styleId)) {
5103
5327
  colStyleIds[col] = styleId;
@@ -5114,6 +5338,7 @@ function parseSheetState(archive, path, options) {
5114
5338
  colStyleIds,
5115
5339
  conditionalFormatRules,
5116
5340
  defaultColWidthPx: sheetColumnWidthToPixels(defaultColWidth, columnWidthCharacterWidthPx),
5341
+ officeLayout,
5117
5342
  defaultRowHeightPx: Math.max(MIN_ROW_HEIGHT_PX, Math.round(defaultRowHeight * 1.33)),
5118
5343
  hasHorizontalMerges: false,
5119
5344
  hasVerticalMerges: false,
@@ -6568,7 +6793,7 @@ function appendSheetDrawingReference(sheetDocument, relationshipId) {
6568
6793
  return;
6569
6794
  }
6570
6795
  const drawingNode = sheetDocument.createElementNS(SPREADSHEET_NS, "drawing");
6571
- drawingNode.setAttributeNS(REL_NS, "r:id", relationshipId);
6796
+ drawingNode.setAttributeNS(REL_NS2, "r:id", relationshipId);
6572
6797
  const successorNames = /* @__PURE__ */ new Set([
6573
6798
  "legacyDrawing",
6574
6799
  "legacyDrawingHF",
@@ -7551,6 +7776,7 @@ function buildSheetList(workbook, sheetStatesByWorkbookSheetIndex, themePalette,
7551
7776
  colStyleIds: sheetState?.colStyleIds ?? {},
7552
7777
  conditionalFormatRules: sheetState?.conditionalFormatRules ?? [],
7553
7778
  dataValidations: parseWorksheetDataValidations(worksheet),
7779
+ officeLayout: sheetState?.officeLayout,
7554
7780
  defaultColWidthPx,
7555
7781
  defaultRowHeightPx,
7556
7782
  freezePanes: parseWorksheetFreezePanes(worksheet),
@@ -7640,6 +7866,7 @@ function buildSheetList(workbook, sheetStatesByWorkbookSheetIndex, themePalette,
7640
7866
  colStyleIds: sheetState?.colStyleIds ?? {},
7641
7867
  conditionalFormatRules: sheetState?.conditionalFormatRules ?? [],
7642
7868
  dataValidations: parseWorksheetDataValidations(worksheet),
7869
+ officeLayout: sheetState?.officeLayout,
7643
7870
  defaultColWidthPx,
7644
7871
  defaultRowHeightPx,
7645
7872
  freezePanes: parseWorksheetFreezePanes(worksheet),
@@ -8165,7 +8392,7 @@ function sanitizeSavedWorkbookBytes(bytes) {
8165
8392
  const archive = unzipSync2(bytes);
8166
8393
  const stylesEntry = archive["xl/styles.xml"];
8167
8394
  if (stylesEntry) {
8168
- const stylesXml = strFromU83(stylesEntry).replace(/&amp;quot;/g, "&quot;").replace(/&amp;apos;/g, "&apos;");
8395
+ const stylesXml = strFromU84(stylesEntry).replace(/&amp;quot;/g, "&quot;").replace(/&amp;apos;/g, "&apos;");
8169
8396
  archive["xl/styles.xml"] = strToU83(stylesXml);
8170
8397
  }
8171
8398
  return zipSync2(archive, { level: 6 });
@@ -8808,7 +9035,7 @@ function useXlsxViewerController(options) {
8808
9035
  return;
8809
9036
  }
8810
9037
  if (imageAssetsRef.current && !effectiveSkipXmlParsing) {
8811
- const chartOriginsById = hydrateWorkbookChartStyles(result.chartsByWorkbookSheetIndex, imageAssetsRef.current);
9038
+ const chartOriginsById = hydrateWorkbookChartStyles(result.chartsByWorkbookSheetIndex, imageAssetsRef.current, result.chartsheets);
8812
9039
  chartAssetsRef.current = { ...result, chartOriginsById };
8813
9040
  }
8814
9041
  setChartsByWorkbookSheetIndex(result.chartsByWorkbookSheetIndex);
@@ -9033,10 +9260,10 @@ function useXlsxViewerController(options) {
9033
9260
  return;
9034
9261
  }
9035
9262
  setImageAssets(workerImageAssets);
9036
- const chartOriginsById = workerImageAssets ? hydrateWorkbookChartStyles(snapshot.chartsByWorkbookSheetIndex, workerImageAssets) : /* @__PURE__ */ new Map();
9263
+ const chartOriginsById = workerImageAssets ? hydrateWorkbookChartStyles(snapshot.chartsByWorkbookSheetIndex, workerImageAssets, snapshot.chartsheets) : /* @__PURE__ */ new Map();
9037
9264
  setFormControlsByWorkbookSheetIndex(snapshot.formControlsByWorkbookSheetIndex);
9038
9265
  setWorkbook(null);
9039
- setSheets(snapshot.sheets);
9266
+ setSheets(snapshot.sheets.map((sheet) => ({ ...sheet, officeLayout: workerImageAssets?.sheetStatesByWorkbookSheetIndex[sheet.workbookSheetIndex]?.officeLayout })));
9040
9267
  setChartsByWorkbookSheetIndex(snapshot.chartsByWorkbookSheetIndex);
9041
9268
  setChartsheets(snapshot.chartsheets);
9042
9269
  setTabs(snapshot.tabs);
@@ -9289,11 +9516,11 @@ function useXlsxViewerController(options) {
9289
9516
  }
9290
9517
  const workerImageAssets = effectiveSkipXmlParsing ? null : parseWorkbookImageAssets(new Uint8Array(deferredBuffer));
9291
9518
  setImageAssets(workerImageAssets);
9292
- const chartOriginsById = workerImageAssets ? hydrateWorkbookChartStyles(snapshot.chartsByWorkbookSheetIndex, workerImageAssets) : /* @__PURE__ */ new Map();
9519
+ const chartOriginsById = workerImageAssets ? hydrateWorkbookChartStyles(snapshot.chartsByWorkbookSheetIndex, workerImageAssets, snapshot.chartsheets) : /* @__PURE__ */ new Map();
9293
9520
  deferredBufferRef.current = null;
9294
9521
  setDeferredLoadFileSize(null);
9295
9522
  setWorkbook(null);
9296
- setSheets(snapshot.sheets);
9523
+ setSheets(snapshot.sheets.map((sheet) => ({ ...sheet, officeLayout: workerImageAssets?.sheetStatesByWorkbookSheetIndex[sheet.workbookSheetIndex]?.officeLayout })));
9297
9524
  setChartsByWorkbookSheetIndex(snapshot.chartsByWorkbookSheetIndex);
9298
9525
  setChartsheets(snapshot.chartsheets);
9299
9526
  setTabs(snapshot.tabs);
@@ -10616,7 +10843,13 @@ function useXlsxViewerController(options) {
10616
10843
  if (!nextChart) {
10617
10844
  return false;
10618
10845
  }
10619
- updateChart(chartId, { series: nextChart.series, renderSource: chart.renderSource });
10846
+ const source = chart.renderSource;
10847
+ const indexedCategoryFormulaChanged = source?.indexedXSeries?.[seriesIndex] && chart.series[seriesIndex]?.categoriesRef?.formula !== nextChart.series[seriesIndex]?.categoriesRef?.formula;
10848
+ updateChart(chartId, {
10849
+ series: nextChart.series,
10850
+ typeGroups: nextChart.typeGroups,
10851
+ renderSource: source?.sourceSeries || indexedCategoryFormulaChanged ? void 0 : source
10852
+ });
10620
10853
  const selectedSeries = nextChart.series[seriesIndex];
10621
10854
  if (selectedSeries) {
10622
10855
  setSelectedChartElement((current) => current && current.chartId === chartId && current.kind !== "chart" ? {
@@ -13560,20 +13793,16 @@ var ChartLoadBoundary = class extends C {
13560
13793
  return this.props.children;
13561
13794
  }
13562
13795
  };
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
13796
  function LegacyChartSvg({ loadingFallback, ...props }) {
13568
13797
  const renderer = useChartModule(chartRenderer);
13569
- if (!renderer) return /* @__PURE__ */ u(S, { children: loadingFallback("renderer") });
13570
- return props.chart.chartType === "RegionMap" ? /* @__PURE__ */ u(MapChartSvg, { ...props, renderer, loadingFallback }) : /* @__PURE__ */ u(renderer.MemoChartSvg, { ...props });
13798
+ return renderer ? /* @__PURE__ */ u(renderer.MemoChartSvg, { ...props }) : /* @__PURE__ */ u(S, { children: loadingFallback("renderer") });
13571
13799
  }
13572
13800
  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
- return module.renderer ? /* @__PURE__ */ u(module.SharedChartSvg, { ...props, renderer: module.renderer, fallback }) : fallback;
13801
+ const module = useChartModule(props.experimentalOfficeCharts ? suppliedOfficeChartRenderer : props.source.experimental ? officeExtendedChartRenderer : officeChartRenderer);
13802
+ if (!module) return /* @__PURE__ */ u(S, { children: props.loadingFallback(props.chart.chartType === "RegionMap" ? "map" : "renderer") });
13803
+ const fallback = props.chart.chartType === "RegionMap" ? /* @__PURE__ */ u("div", { role: "status", children: "Map data is unavailable." }) : /* @__PURE__ */ u(LegacyChartSvg, { ...props });
13804
+ const renderer = props.experimentalOfficeCharts ?? module.renderer;
13805
+ return renderer && module.SharedChartSvg ? /* @__PURE__ */ u(module.SharedChartSvg, { ...props, renderer, fallback }) : fallback;
13577
13806
  }
13578
13807
  function MemoChartSvg(props) {
13579
13808
  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 +18976,7 @@ function XlsxGrid({
18747
18976
  renderScroller,
18748
18977
  enableGestureZoom = true,
18749
18978
  experimentalCanvas = true,
18979
+ experimentalOfficeCharts,
18750
18980
  selectionColor,
18751
18981
  selectionFillColor,
18752
18982
  selectionHeaderColor,
@@ -18821,8 +19051,8 @@ function XlsxGrid({
18821
19051
  zoomScale
18822
19052
  } = controller;
18823
19053
  h(() => {
18824
- if (showImages && !isChartsLoading) preloadChartRenderers([charts]);
18825
- }, [charts, isChartsLoading, showImages]);
19054
+ if (showImages && !isChartsLoading) preloadChartRenderers([charts], experimentalOfficeCharts);
19055
+ }, [charts, isChartsLoading, showImages, experimentalOfficeCharts]);
18826
19056
  const formControlItemsById = T(() => new Map(
18827
19057
  formControls.flatMap((control) => control.controlIndex !== void 0 && (control.kind === "dropdown" || control.kind === "listbox") ? [[control.id, getFormControlItems(control.controlIndex, control.sheetIndex)]] : [])
18828
19058
  ), [formControls, getFormControlItems]);
@@ -19478,6 +19708,15 @@ function XlsxGrid({
19478
19708
  }, [activeSheet?.freezePanes?.col, visibleCols]);
19479
19709
  const actualColWidths = T(
19480
19710
  () => {
19711
+ const office = experimentalOfficeCharts ? activeSheet?.officeLayout : void 0;
19712
+ if (office) {
19713
+ return Array.from({ length: displayColLimit }, (_2, index) => {
19714
+ if (hiddenColSet.has(index)) return 0;
19715
+ const original = office.columns[index];
19716
+ const override = activeSheet?.colWidthOverridesPx[index];
19717
+ return override !== void 0 && override !== original?.sourcePx ? override : original?.sizePx ?? office.defaultColumnPx;
19718
+ });
19719
+ }
19481
19720
  const widths = new Array(displayColLimit).fill(0);
19482
19721
  const showGridLines = activeSheet?.showGridLines ?? true;
19483
19722
  const fallbackWidth = Math.max(
@@ -19532,6 +19771,8 @@ function XlsxGrid({
19532
19771
  return widths;
19533
19772
  },
19534
19773
  [
19774
+ experimentalOfficeCharts,
19775
+ activeSheet?.officeLayout,
19535
19776
  activeSheet?.colWidthOverridesPx,
19536
19777
  activeSheet?.colWidths,
19537
19778
  activeSheet?.defaultColWidthPx,
@@ -19546,6 +19787,15 @@ function XlsxGrid({
19546
19787
  );
19547
19788
  const actualRowHeights = T(
19548
19789
  () => {
19790
+ const office = experimentalOfficeCharts ? activeSheet?.officeLayout : void 0;
19791
+ if (office) {
19792
+ return Array.from({ length: displayRowLimit }, (_2, index) => {
19793
+ if (hiddenRowSet.has(index)) return 0;
19794
+ const original = office.rows[index];
19795
+ const override = activeSheet?.rowHeightOverridesPx[index];
19796
+ return override !== void 0 && override !== original?.sourcePx ? override : original?.sizePx ?? office.defaultRowPx;
19797
+ });
19798
+ }
19549
19799
  const heights = new Array(displayRowLimit).fill(0);
19550
19800
  const showGridLines = activeSheet?.showGridLines ?? true;
19551
19801
  const fallbackHeight = Math.max(
@@ -19634,6 +19884,8 @@ function XlsxGrid({
19634
19884
  return heights;
19635
19885
  },
19636
19886
  [
19887
+ experimentalOfficeCharts,
19888
+ activeSheet?.officeLayout,
19637
19889
  activeSheet?.defaultRowHeightPx,
19638
19890
  activeSheet?.maxUsedRow,
19639
19891
  activeSheet?.maxUsedCol,
@@ -24327,10 +24579,23 @@ function XlsxGrid({
24327
24579
  width: "100%"
24328
24580
  },
24329
24581
  children: charts.length > 0 ? charts.map((chart) => {
24330
- const chartsheetRect = { height: 320, left: 0, top: 0, width: 640 };
24331
- return /* @__PURE__ */ u("div", { style: { minHeight: 320, position: "relative" }, children: isChartsLoading ? renderChartLoadingNode(renderChartLoading, chart, chartsheetRect) : /* @__PURE__ */ u(
24582
+ const sourceSize = experimentalOfficeCharts && chart.anchor.kind !== "two-cell" ? chart.anchor.sizeEmu : void 0;
24583
+ const chartsheetRect = {
24584
+ height: sourceSize?.cy ? emuToPixels(sourceSize.cy) : 320,
24585
+ left: 0,
24586
+ top: 0,
24587
+ width: sourceSize?.cx ? emuToPixels(sourceSize.cx) : 640
24588
+ };
24589
+ return /* @__PURE__ */ u("div", { style: {
24590
+ minHeight: sourceSize ? void 0 : 320,
24591
+ width: sourceSize ? chartsheetRect.width : void 0,
24592
+ maxWidth: "100%",
24593
+ aspectRatio: sourceSize ? `${chartsheetRect.width}/${chartsheetRect.height}` : void 0,
24594
+ position: "relative"
24595
+ }, children: isChartsLoading ? renderChartLoadingNode(renderChartLoading, chart, chartsheetRect) : /* @__PURE__ */ u(
24332
24596
  MemoChartSvg,
24333
24597
  {
24598
+ experimentalOfficeCharts,
24334
24599
  chart,
24335
24600
  loadingFallback: (stage) => renderChartLoadingNode(renderChartLoading, chart, chartsheetRect, stage),
24336
24601
  onChartElementDoubleClick: handleChartElementDoubleClick,
@@ -25286,6 +25551,7 @@ function XlsxGrid({
25286
25551
  children: isChartsLoading ? renderChartLoadingNode(renderChartLoading, chart, rect) : /* @__PURE__ */ u(
25287
25552
  MemoChartSvg,
25288
25553
  {
25554
+ experimentalOfficeCharts,
25289
25555
  chart,
25290
25556
  loadingFallback: (stage) => renderChartLoadingNode(renderChartLoading, chart, rect, stage),
25291
25557
  onChartElementDoubleClick: handleChartElementDoubleClick,
@@ -25377,7 +25643,7 @@ function XlsxGrid({
25377
25643
  };
25378
25644
  const drawingViewportCacheSignature = `${Math.floor(drawingViewport.left / CANVAS_VIEWPORT_OVERSCAN_PX)}:${Math.floor(drawingViewport.top / CANVAS_VIEWPORT_OVERSCAN_PX)}:${drawingViewport.width}:${drawingViewport.height}`;
25379
25645
  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;
25646
+ 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
25647
  const paneDrawingNodes = canReusePaneDrawingNodes ? previousPaneDrawingNodes.value : !showImages ? {
25382
25648
  corner: null,
25383
25649
  left: null,
@@ -25422,6 +25688,7 @@ function XlsxGrid({
25422
25688
  palette,
25423
25689
  readOnly,
25424
25690
  renderChartLoading,
25691
+ experimentalOfficeCharts,
25425
25692
  renderFormControl,
25426
25693
  renderImage,
25427
25694
  renderImageSelection,
@@ -26754,6 +27021,7 @@ function XlsxViewerInner({
26754
27021
  enableGestureZoom = true,
26755
27022
  errorState,
26756
27023
  experimentalCanvas = true,
27024
+ experimentalOfficeCharts,
26757
27025
  fileTooLargeState,
26758
27026
  getCellStyle,
26759
27027
  headerBackgroundColor,
@@ -26851,6 +27119,7 @@ function XlsxViewerInner({
26851
27119
  enableGestureZoom,
26852
27120
  errorState,
26853
27121
  experimentalCanvas,
27122
+ experimentalOfficeCharts,
26854
27123
  fileTooLargeState,
26855
27124
  getCellStyle,
26856
27125
  highlightClassName,
@@ -27097,4 +27366,4 @@ export {
27097
27366
  __createContentNode,
27098
27367
  __createContentRoot
27099
27368
  };
27100
- //# sourceMappingURL=chunk-HEEFCVWS.js.map
27369
+ //# sourceMappingURL=chunk-H62SZBEY.js.map