ooxml-core 1.17.0 → 1.18.0

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 (112) hide show
  1. package/dist/{PptxHandler-U6EFO73T.cjs → PptxHandler-4AHDZDA5.cjs} +2 -2
  2. package/dist/{PptxHandler-L3JPWOBN.mjs → PptxHandler-5X4VOWAO.mjs} +1 -1
  3. package/dist/{PptxHandler-K7GMS2ST.mjs → PptxHandler-X6AO6LKJ.mjs} +2 -2
  4. package/dist/{PresentationBuilder-OK526SZ4.mjs → PresentationBuilder-LRX55PXA.mjs} +2 -2
  5. package/dist/{PresentationBuilder-LUR6LGHU.cjs → PresentationBuilder-MJB4LIFS.cjs} +4 -4
  6. package/dist/{PresentationBuilder-XC3F3OPY.mjs → PresentationBuilder-UY3S4YE2.mjs} +1 -1
  7. package/dist/automation/index.cjs +4710 -3016
  8. package/dist/automation/index.mjs +4710 -3016
  9. package/dist/chart/data-label-text.d.ts +70 -0
  10. package/dist/chart/data-label-text.d.ts.map +1 -0
  11. package/dist/chart/formatting-nodes.d.ts +6 -0
  12. package/dist/chart/formatting-nodes.d.ts.map +1 -1
  13. package/dist/chart/index.cjs +690 -375
  14. package/dist/chart/index.d.ts +1 -0
  15. package/dist/chart/index.d.ts.map +1 -1
  16. package/dist/chart/index.mjs +687 -376
  17. package/dist/chart/read-formatting.d.ts.map +1 -1
  18. package/dist/chart/render/chart-svg-bars.d.ts.map +1 -1
  19. package/dist/chart/render/chart-svg-cartesian.d.ts.map +1 -1
  20. package/dist/chart/render/chart-svg-labels.d.ts +42 -0
  21. package/dist/chart/render/chart-svg-labels.d.ts.map +1 -0
  22. package/dist/chart/render/chart-svg-radial.d.ts.map +1 -1
  23. package/dist/chart/render/chart-svg-xy.d.ts.map +1 -1
  24. package/dist/chart/render/chart-view-labels.d.ts +16 -0
  25. package/dist/chart/render/chart-view-labels.d.ts.map +1 -0
  26. package/dist/chart/render/chart-view.d.ts +3 -0
  27. package/dist/chart/render/chart-view.d.ts.map +1 -1
  28. package/dist/chart/render/summary-from-space.d.ts +2 -2
  29. package/dist/chart/render/summary-from-space.d.ts.map +1 -1
  30. package/dist/chart/render/summary-labels.d.ts +9 -0
  31. package/dist/chart/render/summary-labels.d.ts.map +1 -0
  32. package/dist/chart/render/summary.d.ts +23 -0
  33. package/dist/chart/render/summary.d.ts.map +1 -1
  34. package/dist/{chunk-IM5LFEA2.mjs → chunk-7NWQUCGX.mjs} +1 -1
  35. package/dist/{chunk-UFGJNXRG.mjs → chunk-I5ZE3VLI.mjs} +1 -1
  36. package/dist/{chunk-A7S2NYAU.mjs → chunk-LT7RCEHY.mjs} +1 -1
  37. package/dist/{chunk-HLZIALC5.mjs → chunk-U7IDT6VT.mjs} +1 -1
  38. package/dist/{chunk-YS43OMM3.mjs → chunk-Z5Y53IZD.mjs} +4 -4
  39. package/dist/docx/embedded.cjs +15 -0
  40. package/dist/docx/embedded.mjs +15 -0
  41. package/dist/docx/index.cjs +1261 -656
  42. package/dist/docx/index.mjs +1261 -656
  43. package/dist/docx/layout/index.cjs +1129 -539
  44. package/dist/docx/layout/index.mjs +1129 -539
  45. package/dist/docx/load/index.cjs +15 -0
  46. package/dist/docx/load/index.mjs +15 -0
  47. package/dist/docx/ui/index.cjs +1119 -529
  48. package/dist/docx/ui/index.mjs +1119 -529
  49. package/dist/index.cjs +757 -442
  50. package/dist/index.mjs +757 -442
  51. package/dist/pptx/automation/index.cjs +7 -0
  52. package/dist/pptx/automation/index.mjs +5 -5
  53. package/dist/pptx/cli/index.cjs +7 -0
  54. package/dist/pptx/cli/index.mjs +4 -4
  55. package/dist/pptx/converter/index.mjs +2 -2
  56. package/dist/pptx/editor/render/slide-operations.cjs +1 -1
  57. package/dist/pptx/editor/render/slide-operations.mjs +1 -1
  58. package/dist/pptx/index.cjs +7 -0
  59. package/dist/pptx/index.mjs +5 -5
  60. package/dist/teams/index.cjs +145 -49
  61. package/dist/teams/index.mjs +145 -49
  62. package/dist/visio/edit-chart-object-commands.d.ts +36 -0
  63. package/dist/visio/edit-chart-object-commands.d.ts.map +1 -0
  64. package/dist/visio/edit-chart-object.d.ts +7 -0
  65. package/dist/visio/edit-chart-object.d.ts.map +1 -0
  66. package/dist/visio/edit-commands.d.ts +2 -1
  67. package/dist/visio/edit-commands.d.ts.map +1 -1
  68. package/dist/visio/edit-foreign-frame.d.ts +8 -0
  69. package/dist/visio/edit-foreign-frame.d.ts.map +1 -0
  70. package/dist/visio/edit-metadata-commands.d.ts +7 -0
  71. package/dist/visio/edit-metadata-commands.d.ts.map +1 -1
  72. package/dist/visio/edit-picture.d.ts +8 -0
  73. package/dist/visio/edit-picture.d.ts.map +1 -1
  74. package/dist/visio/edit.d.ts.map +1 -1
  75. package/dist/visio/emf-bitmap.d.ts +8 -0
  76. package/dist/visio/emf-bitmap.d.ts.map +1 -0
  77. package/dist/visio/index.cjs +17093 -6136
  78. package/dist/visio/index.d.ts +2 -0
  79. package/dist/visio/index.d.ts.map +1 -1
  80. package/dist/visio/index.mjs +17091 -6137
  81. package/dist/visio/model.d.ts +18 -0
  82. package/dist/visio/model.d.ts.map +1 -1
  83. package/dist/visio/prepare-embedded.d.ts +10 -0
  84. package/dist/visio/prepare-embedded.d.ts.map +1 -0
  85. package/dist/visio/prepare-images.d.ts.map +1 -1
  86. package/dist/visio/shapes.d.ts.map +1 -1
  87. package/dist/visio/sheet.d.ts +2 -1
  88. package/dist/visio/sheet.d.ts.map +1 -1
  89. package/dist/visio/ui/edit-commands.d.ts.map +1 -1
  90. package/dist/visio/ui/index.cjs +33320 -22884
  91. package/dist/visio/ui/index.mjs +33318 -22884
  92. package/dist/visio/ui/insert.d.ts +11 -0
  93. package/dist/visio/ui/insert.d.ts.map +1 -1
  94. package/dist/xlsx/index.cjs +1175 -564
  95. package/dist/xlsx/index.mjs +1175 -564
  96. package/dist/xlsx/load/index.cjs +136 -50
  97. package/dist/xlsx/load/index.mjs +136 -50
  98. package/dist/xlsx/model.d.ts +5 -0
  99. package/dist/xlsx/model.d.ts.map +1 -1
  100. package/dist/xlsx/read/load.d.ts.map +1 -1
  101. package/dist/xlsx/read/workbook-part.d.ts +2 -0
  102. package/dist/xlsx/read/workbook-part.d.ts.map +1 -1
  103. package/dist/xlsx/ui/dialogs/grid-chart.d.ts +22 -1
  104. package/dist/xlsx/ui/dialogs/grid-chart.d.ts.map +1 -1
  105. package/dist/xlsx/ui/index.cjs +16820 -4239
  106. package/dist/xlsx/ui/index.mjs +16810 -4237
  107. package/dist/xlsx/write/workbook-part.d.ts.map +1 -1
  108. package/package.json +1 -1
  109. package/dist/visio/edit-foreign-bitmap.d.ts +0 -7
  110. package/dist/visio/edit-foreign-bitmap.d.ts.map +0 -1
  111. /package/dist/{chunk-KU3SMBFU.mjs → chunk-C363NN2C.mjs} +0 -0
  112. /package/dist/{chunk-UWWS6VVJ.cjs → chunk-R4BCOQHB.cjs} +0 -0
@@ -2680,14 +2680,14 @@ function buildDirectoryTree(entryCount) {
2680
2680
  let redLevel = 0;
2681
2681
  for (let remaining = entryCount - 2; remaining >= 0; remaining = Math.floor(remaining / 2) - 1)
2682
2682
  redLevel++;
2683
- const build = (low, high, level) => {
2683
+ const build = (low, high, level2) => {
2684
2684
  if (low > high)
2685
2685
  return 4294967295;
2686
2686
  const id = Math.floor((low + high) / 2);
2687
2687
  links.set(id, {
2688
- left: build(low, id - 1, level + 1),
2689
- right: build(id + 1, high, level + 1),
2690
- color: level === redLevel ? 0 : 1
2688
+ left: build(low, id - 1, level2 + 1),
2689
+ right: build(id + 1, high, level2 + 1),
2690
+ color: level2 === redLevel ? 0 : 1
2691
2691
  });
2692
2692
  return id;
2693
2693
  };
@@ -3301,8 +3301,8 @@ function parseXml(xml, options = {}) {
3301
3301
  let parsed;
3302
3302
  try {
3303
3303
  parsed = new xmldom.DOMParser({
3304
- onError: (level, message) => {
3305
- if (level !== "warning") parseError = message;
3304
+ onError: (level2, message) => {
3305
+ if (level2 !== "warning") parseError = message;
3306
3306
  }
3307
3307
  }).parseFromString(xml, "application/xml");
3308
3308
  } catch (error) {
@@ -7531,18 +7531,18 @@ function pivotColumnEntries(pivot) {
7531
7531
  const root = { children: /* @__PURE__ */ new Map() };
7532
7532
  for (const record of pivot.records) {
7533
7533
  let current = root;
7534
- indices.forEach((field, level) => {
7534
+ indices.forEach((field, level2) => {
7535
7535
  const value2 = record[field] ?? null;
7536
7536
  const key = pivotValueKey(value2);
7537
7537
  let child4 = current.children.get(key);
7538
7538
  if (!child4) {
7539
- child4 = { index: order[level].get(key), value: value2, children: /* @__PURE__ */ new Map() };
7539
+ child4 = { index: order[level2].get(key), value: value2, children: /* @__PURE__ */ new Map() };
7540
7540
  current.children.set(key, child4);
7541
7541
  }
7542
7542
  current = child4;
7543
7543
  });
7544
7544
  }
7545
- const visit = (node2, level, path2, values2, keys) => {
7545
+ const visit = (node2, level2, path2, values2, keys) => {
7546
7546
  for (const child4 of [...node2.children.entries()].sort((a2, b) => a2[1].index - b[1].index)) {
7547
7547
  const here = {
7548
7548
  path: [...path2, child4[1].index],
@@ -7554,10 +7554,10 @@ function pivotColumnEntries(pivot) {
7554
7554
  key: columnKey(here.keys, here.keys.length),
7555
7555
  values: here.values
7556
7556
  };
7557
- if (level === names.length - 1) entries.push({ kind: "leaf", ...entry3 });
7557
+ if (level2 === names.length - 1) entries.push({ kind: "leaf", ...entry3 });
7558
7558
  else {
7559
- visit(child4[1], level + 1, here.path, here.values, here.keys);
7560
- const own = functions[level];
7559
+ visit(child4[1], level2 + 1, here.path, here.values, here.keys);
7560
+ const own = functions[level2];
7561
7561
  if (own === "auto") entries.push({ kind: "subtotal", ...entry3 });
7562
7562
  else for (const fn of own) entries.push({ kind: "subtotal", ...entry3, fn });
7563
7563
  }
@@ -7603,9 +7603,9 @@ function pivotColumnHeaders(pivot, columns, rowLabels, valuesOnRows = false) {
7603
7603
  columns.entries.forEach((entry3, j) => {
7604
7604
  const at = labelColumns + j * count2;
7605
7605
  if (entry3.kind === "leaf") {
7606
- entry3.path.forEach((_index, level) => {
7607
- const continued = entry3.path.slice(0, level + 1).every((p, i2) => p === previous[i2]);
7608
- if (!continued) grid[1 + level][at] = labelOf(columns.names[level], entry3.values[level]);
7606
+ entry3.path.forEach((_index, level2) => {
7607
+ const continued = entry3.path.slice(0, level2 + 1).every((p, i2) => p === previous[i2]);
7608
+ if (!continued) grid[1 + level2][at] = labelOf(columns.names[level2], entry3.values[level2]);
7609
7609
  });
7610
7610
  previous = entry3.path;
7611
7611
  if (count2 > 1) measures.forEach((measure, m) => grid[rows - 1][at + m] = measure.caption);
@@ -7635,7 +7635,7 @@ function pivotColumnItemsXml(entries, measures, remap) {
7635
7635
  previous = [];
7636
7636
  continue;
7637
7637
  }
7638
- const group = entry3.path.map((index3, level) => remap(level, index3));
7638
+ const group = entry3.path.map((index3, level2) => remap(level2, index3));
7639
7639
  const path2 = entry3.kind === "leaf" && measures > 1 ? [...group, m] : group;
7640
7640
  const prefix = sharedPrefix(path2, previous);
7641
7641
  const xs = path2.slice(prefix).map((index3) => `<x${attrs({ v: index3 || void 0 })}/>`);
@@ -7662,7 +7662,7 @@ function nestedPivotGrid(pivot) {
7662
7662
  const valuesAt = pivotValuesIndex(pivot);
7663
7663
  const onRows = valuesAt >= 0;
7664
7664
  const levels = depth + (onRows ? 1 : 0);
7665
- const fieldOf = (level) => !onRows || level < valuesAt ? level : level === valuesAt ? -1 : level - 1;
7665
+ const fieldOf = (level2) => !onRows || level2 < valuesAt ? level2 : level2 === valuesAt ? -1 : level2 - 1;
7666
7666
  const axisItems = names.map((name) => pivotItems(pivot, name));
7667
7667
  const itemIndices = axisItems.map(
7668
7668
  (items) => new Map(items.map((item, index3) => [pivotValueKey(item), index3]))
@@ -7722,13 +7722,13 @@ function nestedPivotGrid(pivot) {
7722
7722
  (one2) => fn ? aggregateValues(records, pivot.fields.indexOf(one2.field), fn) : pivotMeasureNumber(pivot, records, one2)
7723
7723
  );
7724
7724
  });
7725
- const labelCells = (path2, shown, level, text2) => {
7725
+ const labelCells = (path2, shown, level2, text2) => {
7726
7726
  if (compact) return [text2];
7727
7727
  const row2 = Array(levels).fill(null);
7728
7728
  path2.labels.forEach((value2, at) => {
7729
7729
  if (shown[at]) row2[at] = value2;
7730
7730
  });
7731
- row2[level] = text2;
7731
+ row2[level2] = text2;
7732
7732
  return row2;
7733
7733
  };
7734
7734
  const push = (indent, build2) => {
@@ -7747,11 +7747,11 @@ function nestedPivotGrid(pivot) {
7747
7747
  ...measure !== void 0 ? { measure } : {},
7748
7748
  ...type ? { type } : {}
7749
7749
  });
7750
- const walk = (level, group, measure, path2) => {
7751
- const field = fieldOf(level);
7752
- const last = level === levels - 1;
7750
+ const walk = (level2, group, measure, path2) => {
7751
+ const field = fieldOf(level2);
7752
+ const last = level2 === levels - 1;
7753
7753
  const repeated = Array.from(
7754
- { length: level },
7754
+ { length: level2 },
7755
7755
  (_v, k) => !!pivot.repeatLabels && fieldOf(k) >= 0
7756
7756
  );
7757
7757
  const leafShown = (firsts) => repeated.map((repeat, k) => repeat || tabular && firsts.slice(k + 1).every(Boolean));
@@ -7763,23 +7763,23 @@ function nestedPivotGrid(pivot) {
7763
7763
  firsts: [...path2.firsts, m === 0]
7764
7764
  };
7765
7765
  if (last)
7766
- return push(level, () => [
7767
- labelCells(path2, leafShown(here.firsts), level, one2.caption),
7766
+ return push(level2, () => [
7767
+ labelCells(path2, leafShown(here.firsts), level2, one2.caption),
7768
7768
  cells(group, void 0, m),
7769
7769
  entryOf(here.indices, m)
7770
7770
  ]);
7771
7771
  if (!tabular)
7772
- push(level, () => [
7773
- labelCells(path2, repeated, level, one2.caption),
7772
+ push(level2, () => [
7773
+ labelCells(path2, repeated, level2, one2.caption),
7774
7774
  blanks(),
7775
7775
  entryOf(here.indices, m)
7776
7776
  ]);
7777
- walk(level + 1, group, m, here);
7777
+ walk(level2 + 1, group, m, here);
7778
7778
  });
7779
7779
  return;
7780
7780
  }
7781
7781
  const own = functions[field];
7782
- const valuesAbove = !onRows || valuesAt < level;
7782
+ const valuesAbove = !onRows || valuesAt < level2;
7783
7783
  const showsValue = above && own === "auto" && valuesAbove;
7784
7784
  const children2 = [...group.children.values()].sort((a2, b) => a2.index - b.index);
7785
7785
  children2.forEach((child4, position) => {
@@ -7790,22 +7790,22 @@ function nestedPivotGrid(pivot) {
7790
7790
  };
7791
7791
  const text2 = labelOf(names[field], child4.value);
7792
7792
  if (last)
7793
- return push(level, () => [
7794
- labelCells(path2, leafShown(here.firsts), level, text2),
7793
+ return push(level2, () => [
7794
+ labelCells(path2, leafShown(here.firsts), level2, text2),
7795
7795
  cells(child4, void 0, measure),
7796
7796
  entryOf(here.indices, measure)
7797
7797
  ]);
7798
7798
  if (!tabular)
7799
- push(level, () => [
7800
- labelCells(path2, repeated, level, text2),
7799
+ push(level2, () => [
7800
+ labelCells(path2, repeated, level2, text2),
7801
7801
  showsValue ? cells(child4, void 0, measure) : blanks(),
7802
7802
  entryOf(here.indices, measure)
7803
7803
  ]);
7804
- walk(level + 1, child4, measure, here);
7804
+ walk(level2 + 1, child4, measure, here);
7805
7805
  if (field === depth - 1) return;
7806
7806
  const caption = String(text2);
7807
- const subtotal = (title, fn, one2) => push(level, () => [
7808
- labelCells(path2, repeated, level, title),
7807
+ const subtotal = (title, fn, one2) => push(level2, () => [
7808
+ labelCells(path2, repeated, level2, title),
7809
7809
  cells(child4, fn, one2),
7810
7810
  entryOf(here.indices, one2, fn ?? "default")
7811
7811
  ]);
@@ -8131,8 +8131,8 @@ function parseSlicer(node2, sheet, partName) {
8131
8131
  if (start !== void 0) slicer.startItem = start;
8132
8132
  const locked = boolAttr(node2, "lockedPosition");
8133
8133
  if (locked !== void 0) slicer.lockedPosition = locked;
8134
- const level = numAttr(node2, "level");
8135
- if (level !== void 0) slicer.level = level;
8134
+ const level2 = numAttr(node2, "level");
8135
+ if (level2 !== void 0) slicer.level = level2;
8136
8136
  if (extLst) slicer.extLstXml = selfContainedXml(extLst);
8137
8137
  return slicer;
8138
8138
  }
@@ -10303,7 +10303,9 @@ function parseWorkbookPart(xml) {
10303
10303
  count: numAttr(calcPr, "iterateCount") ?? 100,
10304
10304
  delta: numAttr(calcPr, "iterateDelta") ?? 1e-3
10305
10305
  } : void 0;
10306
+ const oleSize = att(xFirst(root, "oleSize"), "ref");
10306
10307
  return {
10308
+ ...oleSize ? { oleSize } : {},
10307
10309
  ...iterate ? { iterate } : {},
10308
10310
  ...password ? { workbookPasswordHash: password } : {},
10309
10311
  ...modernHash ? { workbookModernHash: modernHash } : {},
@@ -11877,6 +11879,19 @@ function readChartAppearance(text2, properties2) {
11877
11879
  }
11878
11880
 
11879
11881
  // chart/formatting-nodes.ts
11882
+ function chartDataLabelNode(root) {
11883
+ const plot2 = first(first(root, "chart", NS.c), "plotArea", NS.c);
11884
+ const groups = plot2 ? elements(plot2).filter((node2) => node2.localName.endsWith("Chart")) : [];
11885
+ const candidates = groups.flatMap((group) => [
11886
+ ...children(group, "ser", NS.c).map((ser) => first(ser, "dLbls", NS.c)),
11887
+ first(group, "dLbls", NS.c)
11888
+ ]);
11889
+ return candidates.find(
11890
+ (node2) => node2 !== void 0 && (first(node2, "txPr", NS.c) !== void 0 || elements(node2).some(
11891
+ (child4) => child4.localName.startsWith("show") && child4.getAttribute("val") === "1"
11892
+ ))
11893
+ );
11894
+ }
11880
11895
  function chartFormattingNodes(root) {
11881
11896
  const chart = first(root, "chart", NS.c);
11882
11897
  const plot2 = first(chart, "plotArea", NS.c);
@@ -11989,6 +12004,8 @@ function readChartFormatting(root) {
11989
12004
  const entries = Object.fromEntries(
11990
12005
  Object.entries(nodes).flatMap(([name, node2]) => node2 ? [[name, entry(node2)]] : [])
11991
12006
  );
12007
+ const labels = chartDataLabelNode(root);
12008
+ if (labels) entries["dataLabel"] = entry(labels);
11992
12009
  const builtInStyle = readBuiltInChartStyle(root);
11993
12010
  const textBody = c(root, "txPr");
11994
12011
  const textDefaults = textBody ? {
@@ -12977,6 +12994,66 @@ function summaryAnalysis(series) {
12977
12994
  };
12978
12995
  }
12979
12996
 
12997
+ // chart/data-label-text.ts
12998
+ var DATA_LABEL_SEPARATOR = ", ";
12999
+ var DATA_LABEL_CATEGORY_PERCENT_SEPARATOR = "\n";
13000
+ var FLAG_KEYS = [
13001
+ "showValue",
13002
+ "showCategory",
13003
+ "showSeriesName",
13004
+ "showPercent",
13005
+ "showBubbleSize"
13006
+ ];
13007
+ function resolveDataLabelFlags(levels) {
13008
+ const { point, series, chart } = levels;
13009
+ const picked = {};
13010
+ for (const key of FLAG_KEYS) picked[key] = point?.[key] ?? series?.[key] ?? chart?.[key];
13011
+ const anyDeclared = FLAG_KEYS.some((key) => picked[key] !== void 0);
13012
+ return {
13013
+ showValue: anyDeclared ? picked.showValue === true : levels.siblingOwnsLabels !== true,
13014
+ showCategory: picked.showCategory === true,
13015
+ showSeriesName: picked.showSeriesName === true,
13016
+ showPercent: picked.showPercent === true,
13017
+ showBubbleSize: picked.showBubbleSize === true,
13018
+ separator: point?.separator ?? series?.separator ?? chart?.separator ?? (picked.showCategory === true && picked.showPercent === true ? DATA_LABEL_CATEGORY_PERCENT_SEPARATOR : DATA_LABEL_SEPARATOR)
13019
+ };
13020
+ }
13021
+
13022
+ // chart/render/summary-labels.ts
13023
+ function level(options, custom) {
13024
+ const out = {};
13025
+ if (options.deleted !== void 0) out.deleted = options.deleted;
13026
+ if (options.showValue !== void 0) out.showValue = options.showValue;
13027
+ if (options.showCategoryName !== void 0) out.showCategory = options.showCategoryName;
13028
+ if (options.showSeriesName !== void 0) out.showSeriesName = options.showSeriesName;
13029
+ if (options.showPercent !== void 0) out.showPercent = options.showPercent;
13030
+ if (options.showBubbleSize !== void 0) out.showBubbleSize = options.showBubbleSize;
13031
+ if (options.separator !== void 0) out.separator = options.separator;
13032
+ if (options.position) out.position = options.position;
13033
+ if (options.numberFormat?.formatCode) out.numberFormat = options.numberFormat.formatCode;
13034
+ if (custom?.text !== void 0) out.text = custom.text;
13035
+ return out;
13036
+ }
13037
+ function shows(levels, point) {
13038
+ const flags = resolveDataLabelFlags({ ...levels, ...point ? { point } : {} });
13039
+ return point?.text !== void 0 || Object.values(flags).some((value2) => value2 === true);
13040
+ }
13041
+ function summaryDataLabels(series, group) {
13042
+ const own = series.dataLabels;
13043
+ if (!own && !group) return void 0;
13044
+ const out = {};
13045
+ if (group) out.chart = level(group);
13046
+ if (own) out.series = level(own);
13047
+ const points = {};
13048
+ for (const labels of [group, own])
13049
+ for (const label2 of labels?.labels ?? [])
13050
+ if (label2.index !== void 0)
13051
+ points[label2.index] = { ...points[label2.index], ...level(label2, label2.tx) };
13052
+ if (Object.keys(points).length) out.points = points;
13053
+ if (!shows(out) && !Object.values(points).some((point) => shows(out, point))) return void 0;
13054
+ return out;
13055
+ }
13056
+
12980
13057
  // chart/render/summary-from-space.ts
12981
13058
  var solidColor = (fill) => fill?.kind === "solid" ? fill.color : void 0;
12982
13059
  var isSolidFill = (fill) => fill?.kind === "solid" || fill?.kind === "unsupported" && fill.element === "solidFill";
@@ -12994,7 +13071,7 @@ var GROUP_TYPES = {
12994
13071
  surface: "surface"
12995
13072
  };
12996
13073
  var GROUPINGS = /* @__PURE__ */ new Set(["clustered", "stacked", "percentStacked", "standard"]);
12997
- function chartSummarySeries(source2, chartType) {
13074
+ function chartSummarySeries(source2, chartType, groupLabels) {
12998
13075
  const categories = source2.categories ?? source2.xValues;
12999
13076
  const values2 = source2.values ?? source2.yValues;
13000
13077
  const numeric2 = (v) => typeof v === "number" ? v : v === "" ? null : Number.isFinite(Number(v)) ? Number(v) : null;
@@ -13002,6 +13079,7 @@ function chartSummarySeries(source2, chartType) {
13002
13079
  categories: chartSourceValues(categories),
13003
13080
  values: chartSourceValues(values2).map(numeric2)
13004
13081
  };
13082
+ if (values2?.cache?.formatCode !== void 0) out.numberFormat = values2.cache.formatCode;
13005
13083
  if (source2.bubbleSizes) {
13006
13084
  out.bubbleSizes = chartSourceValues(source2.bubbleSizes).map(numeric2);
13007
13085
  if (source2.bubbleSizes.formula) out.bubbleSizesRef = source2.bubbleSizes.formula;
@@ -13030,6 +13108,8 @@ function chartSummarySeries(source2, chartType) {
13030
13108
  }
13031
13109
  if (Object.keys(points).length) out.pointColors = points;
13032
13110
  if (Object.keys(pointFills).length) out.pointFills = pointFills;
13111
+ const dataLabels = summaryDataLabels(source2, groupLabels);
13112
+ if (dataLabels) out.dataLabels = dataLabels;
13033
13113
  Object.assign(out, summaryAnalysis(source2));
13034
13114
  return out;
13035
13115
  }
@@ -13057,7 +13137,7 @@ function extraGroups(chartSpace, firstType) {
13057
13137
  const type = group.kind === "bar" ? "column" : group.kind;
13058
13138
  const entry3 = {
13059
13139
  chartType: type,
13060
- series: group.series.map((source2) => chartSummarySeries(source2, type)),
13140
+ series: group.series.map((source2) => chartSummarySeries(source2, type, group.dataLabels)),
13061
13141
  secondary: valueAxisId(chartSpace, group.axisIds) !== primary
13062
13142
  };
13063
13143
  if (group.grouping && GROUPINGS.has(group.grouping))
@@ -13075,7 +13155,9 @@ function chartSummaryFromSpace(chartSpace, extras = {}) {
13075
13155
  const group = chartSpace.plotArea.groups[0];
13076
13156
  let chartType = group ? GROUP_TYPES[group.kind] : "column";
13077
13157
  if (chartType === "bar" && group?.barDirection !== "bar") chartType = "column";
13078
- const series = (group?.series ?? []).map((source2) => chartSummarySeries(source2, chartType));
13158
+ const series = (group?.series ?? []).map(
13159
+ (source2) => chartSummarySeries(source2, chartType, group?.dataLabels)
13160
+ );
13079
13161
  const summary = {
13080
13162
  chartType,
13081
13163
  series,
@@ -13198,9 +13280,9 @@ function dimension(data, kind, type) {
13198
13280
  const out = { points: [] };
13199
13281
  const formula = text(cx(element2, "f"));
13200
13282
  if (formula) out.formula = formula;
13201
- const level = cx(element2, "lvl");
13202
- const count2 = Number(level?.getAttribute("ptCount") ?? 0);
13203
- for (const point of level ? children(level, "pt", NS.cx) : []) {
13283
+ const level2 = cx(element2, "lvl");
13284
+ const count2 = Number(level2?.getAttribute("ptCount") ?? 0);
13285
+ for (const point of level2 ? children(level2, "pt", NS.cx) : []) {
13204
13286
  const index3 = Number(point.getAttribute("idx") ?? out.points.length);
13205
13287
  if (Number.isInteger(index3) && index3 >= 0) out.points[index3] = text(point);
13206
13288
  }
@@ -13209,10 +13291,10 @@ function dimension(data, kind, type) {
13209
13291
  }
13210
13292
  function categoryLevels(data) {
13211
13293
  const element2 = data ? children(data, "strDim", NS.cx).find((d) => (d.getAttribute("type") ?? "") === "cat") : void 0;
13212
- return (element2 ? children(element2, "lvl", NS.cx) : []).map((level) => {
13294
+ return (element2 ? children(element2, "lvl", NS.cx) : []).map((level2) => {
13213
13295
  const points = [];
13214
- const count2 = Number(level.getAttribute("ptCount") ?? 0);
13215
- for (const point of children(level, "pt", NS.cx)) {
13296
+ const count2 = Number(level2.getAttribute("ptCount") ?? 0);
13297
+ for (const point of children(level2, "pt", NS.cx)) {
13216
13298
  const index3 = Number(point.getAttribute("idx") ?? points.length);
13217
13299
  if (Number.isInteger(index3) && index3 >= 0) points[index3] = text(point);
13218
13300
  }
@@ -14244,6 +14326,7 @@ async function loadXlsx(input) {
14244
14326
  if (book.structureLocked) workbook.structureLocked = true;
14245
14327
  if (book.workbookPasswordHash) workbook.workbookPasswordHash = book.workbookPasswordHash;
14246
14328
  if (book.workbookModernHash) workbook.workbookModernHash = book.workbookModernHash;
14329
+ if (book.oleSize) workbook.oleSize = book.oleSize;
14247
14330
  if (book.calcMode) workbook.calcMode = book.calcMode;
14248
14331
  if (book.iterate) workbook.iterate = book.iterate;
14249
14332
  if (signatures.hasSignatures)
@@ -14796,7 +14879,7 @@ function dataSourceInner(source2) {
14796
14879
  case "multiLvlStrRef": {
14797
14880
  const levels = source2.levels ? elementXml(
14798
14881
  "multiLvlStrCache",
14799
- valXml("ptCount", source2.levelPointCount) + source2.levels.map((level) => elementXml("lvl", cachePoints(level))).join("")
14882
+ valXml("ptCount", source2.levelPointCount) + source2.levels.map((level2) => elementXml("lvl", cachePoints(level2))).join("")
14800
14883
  ) : "";
14801
14884
  return `<c:multiLvlStrRef>${formula}${levels}</c:multiLvlStrRef>`;
14802
14885
  }
@@ -25967,7 +26050,10 @@ function workbookXml(workbook, sheets, activeTab, sourceXml, pivotCachesXml) {
25967
26050
  const iterate = workbook.iterate ? ` iterate="1" iterateCount="${workbook.iterate.count}" iterateDelta="${workbook.iterate.delta}"` : "";
25968
26051
  const owned = ["fullCalcOnLoad", "calcId", "calcMode", "iterate", "iterateCount", "iterateDelta"];
25969
26052
  out += `<calcPr${copyAttrs(calc, owned)} calcId="191029"${mode}${iterate} fullCalcOnLoad="1"/>`;
25970
- out += pivotCachesXml === void 0 ? raw2(KEPT_TAIL) : raw2(KEPT_TAIL.slice(0, 2)) + pivotCachesXml + raw2(KEPT_TAIL.slice(3));
26053
+ const tailOf = (names2) => names2.map(
26054
+ (name) => name === "oleSize" && workbook.oleSize ? `<oleSize ref="${escapeAttr3(workbook.oleSize)}"/>` : raw2([name])
26055
+ ).join("");
26056
+ out += pivotCachesXml === void 0 ? tailOf(KEPT_TAIL) : tailOf(KEPT_TAIL.slice(0, 2)) + pivotCachesXml + tailOf(KEPT_TAIL.slice(3));
25971
26057
  return `${out}</workbook>`;
25972
26058
  }
25973
26059
 
@@ -27454,7 +27540,7 @@ function pivotTableXml(source2, cacheId, cache2) {
27454
27540
  let body = `<location${attrs({ ref: formatRange({ ...pivot.location, start: { ...pivot.location.start, row: pivot.location.start.row + pageOffset } }), firstHeaderRow: header, firstDataRow: grid.firstDataRow - pageOffset, rowPageCount: page >= 0 ? 1 : void 0, colPageCount: page >= 0 ? 1 : void 0, firstDataCol: grid.rowLabelColumns ?? 1 })}/><pivotFields count="${pivot.fields.length}">${fields}</pivotFields><rowFields count="${rowIndices.length}">${rowIndices.map((index3) => `<field x="${index3}"/>`).join("")}</rowFields><rowItems count="${grid.rowEntries?.length ?? grid.rowItems.length + 1}">${rowItems}</rowItems>`;
27455
27541
  if (col >= 0 && grid.columnEntries) {
27456
27542
  const fieldsOnColumns = [...columnIdx, ...multiple && !rowsAxis ? [-2] : []];
27457
- body += `<colFields count="${fieldsOnColumns.length}">${fieldsOnColumns.map((index3) => `<field x="${index3}"/>`).join("")}</colFields>${pivotColumnItemsXml(grid.columnEntries, rowsAxis ? 1 : measures.length, (level, index3) => columnIndicesFull[level][index3])}`;
27543
+ body += `<colFields count="${fieldsOnColumns.length}">${fieldsOnColumns.map((index3) => `<field x="${index3}"/>`).join("")}</colFields>${pivotColumnItemsXml(grid.columnEntries, rowsAxis ? 1 : measures.length, (level2, index3) => columnIndicesFull[level2][index3])}`;
27458
27544
  } else if (multiple && !rowsAxis)
27459
27545
  body += `<colFields count="1"><field x="-2"/></colFields>${pivotValueAxisItems(measures.length)}`;
27460
27546
  else body += '<colItems count="1"><i/></colItems>';