@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.
Files changed (113) hide show
  1. package/dist/{browser-B73UAN6E.cjs → browser-6MKX73CJ.cjs} +8 -28
  2. package/dist/browser-6MKX73CJ.cjs.map +1 -0
  3. package/dist/{browser-KWIEUO2X.js → browser-KJ6EVWLG.js} +8 -27
  4. package/dist/{browser-KWIEUO2X.js.map → browser-KJ6EVWLG.js.map} +1 -1
  5. package/dist/{chart-renderer-XBF7EPUS.js → chart-renderer-2BLFC2BD.js} +94 -180
  6. package/dist/chart-renderer-2BLFC2BD.js.map +1 -0
  7. package/dist/{chart-renderer-W7XW24JI.cjs → chart-renderer-2K7XSPVG.cjs} +321 -407
  8. package/dist/chart-renderer-2K7XSPVG.cjs.map +1 -0
  9. package/dist/{chart-renderer-2EKXNHUD.cjs → chart-renderer-2UJZRUSN.cjs} +324 -410
  10. package/dist/chart-renderer-2UJZRUSN.cjs.map +1 -0
  11. package/dist/{chart-renderer-ZLJVPLGN.js → chart-renderer-IYKCQENY.js} +86 -172
  12. package/dist/chart-renderer-IYKCQENY.js.map +1 -0
  13. package/dist/{chunk-WGRRI25I.cjs → chunk-5PBSOOA7.cjs} +22 -9
  14. package/dist/chunk-5PBSOOA7.cjs.map +1 -0
  15. package/dist/{chunk-VG4JELEQ.js → chunk-BFSDKYQU.js} +30 -15
  16. package/dist/chunk-BFSDKYQU.js.map +1 -0
  17. package/dist/chunk-IN7OU5PF.js +32 -0
  18. package/dist/chunk-IN7OU5PF.js.map +1 -0
  19. package/dist/{chunk-HKMFMIKE.js → chunk-KSXNNWAY.js} +16 -7
  20. package/dist/chunk-KSXNNWAY.js.map +1 -0
  21. package/dist/chunk-LY4EWUKF.js +22 -0
  22. package/dist/chunk-LY4EWUKF.js.map +1 -0
  23. package/dist/chunk-N6MMMGLF.cjs +32 -0
  24. package/dist/chunk-N6MMMGLF.cjs.map +1 -0
  25. package/dist/{chunk-HEEFCVWS.js → chunk-R5ERJ3BT.js} +404 -149
  26. package/dist/chunk-R5ERJ3BT.js.map +1 -0
  27. package/dist/chunk-RN27VSTN.cjs +108 -0
  28. package/dist/chunk-RN27VSTN.cjs.map +1 -0
  29. package/dist/{chunk-XISBYOD5.cjs → chunk-YPTGD7GK.cjs} +1172 -917
  30. package/dist/chunk-YPTGD7GK.cjs.map +1 -0
  31. package/dist/chunk-ZAUUKER4.cjs +22 -0
  32. package/dist/chunk-ZAUUKER4.cjs.map +1 -0
  33. package/dist/full-C7H4X2EX.cjs +212 -0
  34. package/dist/full-C7H4X2EX.cjs.map +1 -0
  35. package/dist/full-YT626I57.js +209 -0
  36. package/dist/full-YT626I57.js.map +1 -0
  37. package/dist/index.cjs +838 -620
  38. package/dist/index.cjs.map +1 -1
  39. package/dist/index.d.cts +57 -1
  40. package/dist/index.d.ts +57 -1
  41. package/dist/index.js +350 -132
  42. package/dist/index.js.map +1 -1
  43. package/dist/{internal-BJsg5os3.d.cts → internal-Cks9H21d.d.cts} +56 -1
  44. package/dist/{internal-BJsg5os3.d.ts → internal-Cks9H21d.d.ts} +56 -1
  45. package/dist/internal.cjs +4 -3
  46. package/dist/internal.cjs.map +1 -1
  47. package/dist/internal.d.cts +1 -1
  48. package/dist/internal.d.ts +1 -1
  49. package/dist/internal.js +3 -2
  50. package/dist/office_charts_bg.wasm +0 -0
  51. package/dist/office_charts_full_bg.wasm +0 -0
  52. package/dist/payload-7QT6NY6S.js +6 -0
  53. package/dist/payload-7QT6NY6S.js.map +1 -0
  54. package/dist/payload-BZGBW73P.cjs +8 -0
  55. package/dist/payload-BZGBW73P.cjs.map +1 -0
  56. package/dist/payload-H55PON66.js +6 -0
  57. package/dist/payload-H55PON66.js.map +1 -0
  58. package/dist/payload-RNKEYTQ4.cjs +8 -0
  59. package/dist/payload-RNKEYTQ4.cjs.map +1 -0
  60. package/dist/{shared-chart-DVC5S2P6.cjs → shared-chart-GCUFIUQL.cjs} +49 -20
  61. package/dist/shared-chart-GCUFIUQL.cjs.map +1 -0
  62. package/dist/{shared-chart-3STFRVWT.js → shared-chart-JV4MGKXX.js} +50 -20
  63. package/dist/shared-chart-JV4MGKXX.js.map +1 -0
  64. package/dist/{shared-chart-MFQSQG4K.cjs → shared-chart-OUC7EHFC.cjs} +49 -19
  65. package/dist/shared-chart-OUC7EHFC.cjs.map +1 -0
  66. package/dist/{shared-chart-BFQNYOIQ.js → shared-chart-PY47ED4I.js} +49 -20
  67. package/dist/shared-chart-PY47ED4I.js.map +1 -0
  68. package/dist/{surface-regl-R2N54JT2.js → surface-webgl-2ZZ6JQR2.js} +87 -151
  69. package/dist/surface-webgl-2ZZ6JQR2.js.map +1 -0
  70. package/dist/{surface-regl-BBJ6OIKK.cjs → surface-webgl-3HS6VBCK.cjs} +88 -152
  71. package/dist/surface-webgl-3HS6VBCK.cjs.map +1 -0
  72. package/dist/{surface-regl-7CDGGVDG.js → surface-webgl-4DQXDDXU.js} +87 -151
  73. package/dist/surface-webgl-4DQXDDXU.js.map +1 -0
  74. package/dist/{surface-regl-SUJ2TFZA.cjs → surface-webgl-SVYD564V.cjs} +88 -152
  75. package/dist/surface-webgl-SVYD564V.cjs.map +1 -0
  76. package/dist/vanilla.cjs +4 -3
  77. package/dist/vanilla.cjs.map +1 -1
  78. package/dist/vanilla.d.cts +2 -2
  79. package/dist/vanilla.d.ts +2 -2
  80. package/dist/vanilla.js +3 -2
  81. package/dist/xlsx-worker.js +298 -92
  82. package/dist/xlsx-worker.js.map +1 -1
  83. package/package.json +6 -15
  84. package/dist/browser-B73UAN6E.cjs.map +0 -1
  85. package/dist/chart-renderer-2EKXNHUD.cjs.map +0 -1
  86. package/dist/chart-renderer-W7XW24JI.cjs.map +0 -1
  87. package/dist/chart-renderer-XBF7EPUS.js.map +0 -1
  88. package/dist/chart-renderer-ZLJVPLGN.js.map +0 -1
  89. package/dist/chunk-6IGWCJU5.cjs +0 -90
  90. package/dist/chunk-6IGWCJU5.cjs.map +0 -1
  91. package/dist/chunk-HEEFCVWS.js.map +0 -1
  92. package/dist/chunk-HKMFMIKE.js.map +0 -1
  93. package/dist/chunk-VG4JELEQ.js.map +0 -1
  94. package/dist/chunk-WGRRI25I.cjs.map +0 -1
  95. package/dist/chunk-XISBYOD5.cjs.map +0 -1
  96. package/dist/payload-JBPE7GEG.cjs +0 -8
  97. package/dist/payload-JBPE7GEG.cjs.map +0 -1
  98. package/dist/payload-KYNCVJT5.js +0 -6
  99. package/dist/payload-KYNCVJT5.js.map +0 -1
  100. package/dist/region-map-geography-24TXETDP.cjs +0 -184
  101. package/dist/region-map-geography-24TXETDP.cjs.map +0 -1
  102. package/dist/region-map-geography-OR6DHAF7.js +0 -182
  103. package/dist/region-map-geography-OR6DHAF7.js.map +0 -1
  104. package/dist/shared-chart-3STFRVWT.js.map +0 -1
  105. package/dist/shared-chart-BFQNYOIQ.js.map +0 -1
  106. package/dist/shared-chart-DVC5S2P6.cjs.map +0 -1
  107. package/dist/shared-chart-MFQSQG4K.cjs.map +0 -1
  108. package/dist/surface-regl-7CDGGVDG.js.map +0 -1
  109. package/dist/surface-regl-BBJ6OIKK.cjs.map +0 -1
  110. package/dist/surface-regl-R2N54JT2.js.map +0 -1
  111. package/dist/surface-regl-SUJ2TFZA.cjs.map +0 -1
  112. package/dist/world-atlas-LICENSE.txt +0 -13
  113. /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
- regionMapResources,
9
+ suppliedOfficeChartRenderer,
6
10
  useChartModule
7
- } from "./chunk-VG4JELEQ.js";
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 strFromU83, strToU8 as strToU83, unzipSync as unzipSync2, zipSync as zipSync2 } from "fflate";
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: 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,
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: workbook ? resolveReferenceValues(workbook, chart.workbookSheetIndex, valuesRef, "value").map((value) => typeof value === "number" && Number.isFinite(value) ? value : null) : currentSeries.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 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) {
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
- applyChartSeriesStyleFromXml(chart, chartTypeNode, themePalette);
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 ? strFromU8(entry) : null;
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: workbook.getSheet(fallbackSheetIndex),
2089
- sheetName: workbook.getSheet(fallbackSheetIndex)?.name ?? ""
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: series,
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
- 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
- };
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 strFromU82, strToU8 as strToU82, unzipSync, zipSync } from "fflate";
3843
- var REL_NS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
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 ? strFromU82(entry) : null;
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(REL_NS, "id") ?? element.getAttribute("r:id") ?? element.getAttribute("id");
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(REL_NS, "embed") ?? element.getAttribute("r:embed") ?? element.getAttribute("embed");
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(REL_NS, "r:id", relationshipId);
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 = strFromU83(stylesEntry).replace(/&amp;quot;/g, "&quot;").replace(/&amp;apos;/g, "&apos;");
8381
+ const stylesXml = strFromU84(stylesEntry).replace(/&amp;quot;/g, "&quot;").replace(/&amp;apos;/g, "&apos;");
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
- updateChart(chartId, { series: nextChart.series, renderSource: chart.renderSource });
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
- 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 });
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
- return module.renderer ? /* @__PURE__ */ u(module.SharedChartSvg, { ...props, renderer: module.renderer, fallback }) : fallback;
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 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(
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-HEEFCVWS.js.map
27355
+ //# sourceMappingURL=chunk-R5ERJ3BT.js.map