reamkit 1.32.0 → 1.33.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 (157) hide show
  1. package/README.md +5 -4
  2. package/dist/esm/core/bidi/algorithm.js +2 -2
  3. package/dist/esm/core/bidi/char-types.js +1 -1
  4. package/dist/esm/core/bidi/index.js +3 -3
  5. package/dist/esm/core/bytes.js +1 -1
  6. package/dist/esm/core/converter/facade.js +3 -2
  7. package/dist/esm/core/converter/ream.js +12 -5
  8. package/dist/esm/core/crypto/asn1.js +2 -2
  9. package/dist/esm/core/crypto/cms.js +5 -3
  10. package/dist/esm/core/crypto/index.js +2 -1
  11. package/dist/esm/core/crypto/offcrypto.js +64 -19
  12. package/dist/esm/core/crypto/primitives.js +16 -16
  13. package/dist/esm/core/document-model/index.d.ts +1 -1
  14. package/dist/esm/core/document-model/types.d.ts +174 -2
  15. package/dist/esm/core/drawingml/chart-geometry.d.ts +45 -17
  16. package/dist/esm/core/drawingml/chart-geometry.js +1090 -257
  17. package/dist/esm/core/drawingml/chart-parser.d.ts +24 -1
  18. package/dist/esm/core/drawingml/chart-parser.js +334 -41
  19. package/dist/esm/core/drawingml/chart-text.d.ts +41 -0
  20. package/dist/esm/core/drawingml/chart-text.js +93 -0
  21. package/dist/esm/core/drawingml/colors.js +5 -5
  22. package/dist/esm/core/drawingml/diagram/layout-engine.js +1 -4
  23. package/dist/esm/core/drawingml/diagram/run.js +2 -1
  24. package/dist/esm/core/drawingml/preset-geometry.js +4 -6
  25. package/dist/esm/core/drawingml/shape-render.js +1 -1
  26. package/dist/esm/core/drawingml/text-warp.js +4 -16
  27. package/dist/esm/core/drawingml/theme-parser.js +14 -8
  28. package/dist/esm/core/font/arabic-joining.js +2 -2
  29. package/dist/esm/core/font/binary-reader.js +2 -0
  30. package/dist/esm/core/font/font-registry.js +1 -0
  31. package/dist/esm/core/font/ligatures.js +1 -1
  32. package/dist/esm/core/font/opentype-layout.js +11 -5
  33. package/dist/esm/core/font/ttf-build.js +6 -10
  34. package/dist/esm/core/font/ttf-parser.js +2 -1
  35. package/dist/esm/core/font/ttf-subset.js +8 -8
  36. package/dist/esm/core/fonts/families.js +1 -1
  37. package/dist/esm/core/fonts/remote-fonts.js +4 -4
  38. package/dist/esm/core/hyphenation/index.js +1 -1
  39. package/dist/esm/core/images.js +8 -8
  40. package/dist/esm/core/ir/loss.js +1 -0
  41. package/dist/esm/core/line-breaker/cjk.js +1 -1
  42. package/dist/esm/core/line-breaker/index.js +4 -3
  43. package/dist/esm/core/links.js +1 -1
  44. package/dist/esm/core/lzw.js +1 -1
  45. package/dist/esm/core/metafile/blit.js +1 -1
  46. package/dist/esm/core/metafile/emf.js +5 -7
  47. package/dist/esm/core/metafile/picture.js +1 -1
  48. package/dist/esm/core/metafile/symbol-fonts.js +7 -7
  49. package/dist/esm/core/metafile/wmf.js +5 -7
  50. package/dist/esm/core/number-format.d.ts +40 -15
  51. package/dist/esm/core/number-format.js +284 -79
  52. package/dist/esm/core/numbering/index.js +3 -2
  53. package/dist/esm/core/ole/cfb.js +4 -4
  54. package/dist/esm/core/ole/escher-blip.js +1 -1
  55. package/dist/esm/core/opc/index.js +5 -4
  56. package/dist/esm/core/opc/package.js +3 -1
  57. package/dist/esm/core/opc/tag-scan.d.ts +15 -0
  58. package/dist/esm/core/opc/tag-scan.js +41 -0
  59. package/dist/esm/core/opc/xml-entities.js +40 -3
  60. package/dist/esm/core/outline.js +1 -1
  61. package/dist/esm/core/png-encode.js +3 -3
  62. package/dist/esm/core/po-helpers.js +1 -1
  63. package/dist/esm/core/spreadsheet-model/types.d.ts +6 -0
  64. package/dist/esm/core/style-cascade/index.js +4 -3
  65. package/dist/esm/core/tiff.js +3 -1
  66. package/dist/esm/excel/activex-parser.js +1 -1
  67. package/dist/esm/excel/conditional-format.js +7 -7
  68. package/dist/esm/excel/formula/functions.js +45 -18
  69. package/dist/esm/excel/formula/index.js +3 -3
  70. package/dist/esm/excel/formula/lexer.js +2 -2
  71. package/dist/esm/excel/formula/parser.js +4 -3
  72. package/dist/esm/excel/formula/value.js +1 -1
  73. package/dist/esm/excel/index.js +7 -6
  74. package/dist/esm/excel/print-model.js +18 -7
  75. package/dist/esm/excel/printer-settings.js +6 -7
  76. package/dist/esm/excel/rich-value.js +1 -1
  77. package/dist/esm/excel/sheet-shape-parser.js +4 -2
  78. package/dist/esm/excel/sheet-to-flow.js +13 -11
  79. package/dist/esm/excel/styles-parser.js +5 -3
  80. package/dist/esm/excel/tint.js +5 -5
  81. package/dist/esm/excel/vml-drawing.js +3 -3
  82. package/dist/esm/excel/worksheet-parser.js +5 -5
  83. package/dist/esm/excel/xls/biff-chart.js +1 -3
  84. package/dist/esm/excel/xls/biff-reader.js +10 -11
  85. package/dist/esm/excel/xls/xls-reader.js +1 -1
  86. package/dist/esm/excel/xlsx-reader.js +56 -9
  87. package/dist/esm/excel/xlsx-to-pdf.js +1 -1
  88. package/dist/esm/excel/xlsx-writer.js +2 -2
  89. package/dist/esm/html/html-writer.js +18 -10
  90. package/dist/esm/layout/line-paint.js +1 -1
  91. package/dist/esm/layout/math-layout.js +5 -8
  92. package/dist/esm/layout/styled-layout.js +104 -32
  93. package/dist/esm/layout/turned-section.js +2 -2
  94. package/dist/esm/markdown/markdown-writer.js +59 -8
  95. package/dist/esm/pdf/encryption.js +9 -9
  96. package/dist/esm/pdf/icc-profile.js +2 -2
  97. package/dist/esm/pdf/index.js +3 -2
  98. package/dist/esm/pdf/objects.js +7 -0
  99. package/dist/esm/pdf/serialize.js +1 -1
  100. package/dist/esm/pdf/struct-tree.js +3 -1
  101. package/dist/esm/pdf/styled-page-emitter.js +23 -15
  102. package/dist/esm/pdf/styled-page-renderer.js +9 -5
  103. package/dist/esm/pdf-reader/annot-draw.js +5 -5
  104. package/dist/esm/pdf-reader/annots.js +3 -1
  105. package/dist/esm/pdf-reader/ccitt.js +2 -1
  106. package/dist/esm/pdf-reader/cff-outline.js +1 -4
  107. package/dist/esm/pdf-reader/content.js +13 -15
  108. package/dist/esm/pdf-reader/decrypt.js +5 -4
  109. package/dist/esm/pdf-reader/document.js +6 -2
  110. package/dist/esm/pdf-reader/encodings.js +1 -1
  111. package/dist/esm/pdf-reader/flow-build.js +4 -6
  112. package/dist/esm/pdf-reader/font.js +4 -4
  113. package/dist/esm/pdf-reader/function.js +8 -7
  114. package/dist/esm/pdf-reader/icc.js +1 -1
  115. package/dist/esm/pdf-reader/images.js +1 -1
  116. package/dist/esm/pdf-reader/jbig2.js +36 -38
  117. package/dist/esm/pdf-reader/jpeg.js +14 -13
  118. package/dist/esm/pdf-reader/layout.js +13 -10
  119. package/dist/esm/pdf-reader/lexer.js +2 -1
  120. package/dist/esm/pdf-reader/math-rows.js +2 -2
  121. package/dist/esm/pdf-reader/optional-content.js +1 -1
  122. package/dist/esm/pdf-reader/page-numbers.js +1 -1
  123. package/dist/esm/pdf-reader/pattern-tint.js +1 -2
  124. package/dist/esm/pdf-reader/reader.js +2 -2
  125. package/dist/esm/pdf-reader/struct-tree.js +1 -1
  126. package/dist/esm/pdf-reader/tagged.js +3 -2
  127. package/dist/esm/pdf-reader/text.js +2 -2
  128. package/dist/esm/pdf-reader/type1-outline.js +1 -3
  129. package/dist/esm/pptx/embedded-fonts.js +3 -5
  130. package/dist/esm/pptx/placeholder-cascade.js +1 -1
  131. package/dist/esm/pptx/ppt/ppt-reader.js +5 -4
  132. package/dist/esm/pptx/ppt/ppt-text.js +9 -10
  133. package/dist/esm/pptx/pptx-reader.js +6 -5
  134. package/dist/esm/pptx/preset-table-styles.js +1 -1
  135. package/dist/esm/pptx/slide-parser.js +6 -4
  136. package/dist/esm/pptx/sp-helpers.js +1 -1
  137. package/dist/esm/pptx/table-style.js +2 -1
  138. package/dist/esm/svg/svg-writer.js +1 -1
  139. package/dist/esm/word/doc/doc-reader.js +2 -2
  140. package/dist/esm/word/doc/doc-text.js +20 -22
  141. package/dist/esm/word/document-parser.js +27 -22
  142. package/dist/esm/word/docx-reader.js +15 -10
  143. package/dist/esm/word/docx-to-pdf.js +6 -6
  144. package/dist/esm/word/docx-writer.js +10 -6
  145. package/dist/esm/word/drawing-parser.js +18 -18
  146. package/dist/esm/word/font-table.js +90 -11
  147. package/dist/esm/word/index.js +6 -5
  148. package/dist/esm/word/numbering-parser.js +5 -4
  149. package/dist/esm/word/omml-parser.js +1 -1
  150. package/dist/esm/word/paragraph-properties.js +11 -10
  151. package/dist/esm/word/run-properties.js +4 -4
  152. package/dist/esm/word/settings-parser.js +2 -1
  153. package/dist/esm/word/shading.js +1 -1
  154. package/dist/esm/word/styles-parser.js +5 -4
  155. package/dist/esm/word/table-parser.js +4 -4
  156. package/dist/esm/word/theme-fonts.js +1 -1
  157. package/package.json +10 -4
@@ -19,7 +19,7 @@ var SPID_PREFIX = /^_x0000_s/;
19
19
  * Taking the element's presence as the test listed every comment in the
20
20
  * document as a form control.
21
21
  */
22
- var CONTROL_TYPES = new Set([
22
+ var CONTROL_TYPES = /* @__PURE__ */ new Set([
23
23
  "Button",
24
24
  "Checkbox",
25
25
  "CheckBox",
@@ -143,7 +143,7 @@ function vmlColorHex(value) {
143
143
  if (v.startsWith("white")) return "FFFFFF";
144
144
  }
145
145
  /** CSS length → points. A bare number is pixels, VML's implicit unit. */
146
- var CSS_UNITS = new Map([
146
+ var CSS_UNITS = /* @__PURE__ */ new Map([
147
147
  ["pt", 1],
148
148
  ["px", .75],
149
149
  ["in", 72],
@@ -153,7 +153,7 @@ var CSS_UNITS = new Map([
153
153
  ]);
154
154
  function cssLengthPt(value) {
155
155
  if (value === void 0) return void 0;
156
- const m = /^\s*(-?[\d.]+)\s*([a-z]*)\s*$/i.exec(value);
156
+ const m = /^(-?[\d.]+)\s*([a-z]*)$/i.exec(value.trim());
157
157
  if (!m) return void 0;
158
158
  const n = Number(m[1]);
159
159
  if (!Number.isFinite(n)) return void 0;
@@ -459,7 +459,7 @@ function parseConditionalFormatting(ws, colors, x14Bars) {
459
459
  return out;
460
460
  }
461
461
  /** The rule types the extension states as a formula rather than a literal. */
462
- var TEXT_RULES = new Set([
462
+ var TEXT_RULES = /* @__PURE__ */ new Set([
463
463
  "containsText",
464
464
  "notContainsText",
465
465
  "beginsWith",
@@ -514,7 +514,7 @@ function asBaseCfRule(node) {
514
514
  }
515
515
  return out;
516
516
  }
517
- var DV_TYPES = new Set([
517
+ var DV_TYPES = /* @__PURE__ */ new Set([
518
518
  "none",
519
519
  "whole",
520
520
  "decimal",
@@ -617,7 +617,7 @@ function parseSqref(sqref) {
617
617
  }
618
618
  return out;
619
619
  }
620
- var CF_OPERATORS = new Set([
620
+ var CF_OPERATORS = /* @__PURE__ */ new Set([
621
621
  "lessThan",
622
622
  "lessThanOrEqual",
623
623
  "equal",
@@ -656,7 +656,7 @@ function parseCfRule(obj, colors, x14Bars) {
656
656
  default: return;
657
657
  }
658
658
  }
659
- var TIME_PERIODS = new Set([
659
+ var TIME_PERIODS = /* @__PURE__ */ new Set([
660
660
  "today",
661
661
  "yesterday",
662
662
  "tomorrow",
@@ -807,7 +807,7 @@ function parseCellIsRule(obj, priority) {
807
807
  dxfId
808
808
  };
809
809
  }
810
- var CFVO_TYPES = new Set([
810
+ var CFVO_TYPES = /* @__PURE__ */ new Set([
811
811
  "num",
812
812
  "percent",
813
813
  "max",
@@ -56,9 +56,7 @@ function parseBiffChart(records, cells, sharedStrings) {
56
56
  }
57
57
  break;
58
58
  }
59
- case REC_SERIESTEXT:
60
- if (current) current.nameText = parseSeriesText(rec.data);
61
- break;
59
+ case REC_SERIESTEXT: if (current) current.nameText = parseSeriesText(rec.data);
62
60
  }
63
61
  if (accs.length === 0) return void 0;
64
62
  const byKey = /* @__PURE__ */ new Map();
@@ -541,9 +541,7 @@ function parsePrintModel(records) {
541
541
  case REC.HPAGEBREAK:
542
542
  rowBreaks = parseBreaks(d);
543
543
  break;
544
- case REC.VPAGEBREAK:
545
- colBreaks = parseBreaks(d);
546
- break;
544
+ case REC.VPAGEBREAK: colBreaks = parseBreaks(d);
547
545
  }
548
546
  }
549
547
  const pageSetup = {
@@ -586,7 +584,7 @@ function parseBreaks(d) {
586
584
  for (let k = 0; k < count && 2 + k * 6 + 2 <= d.length; k++) out.push(readU16(d, 2 + k * 6));
587
585
  return out;
588
586
  }
589
- var BUILTIN_NAMES = new Map([[6, "_xlnm.Print_Area"], [7, "_xlnm.Print_Titles"]]);
587
+ var BUILTIN_NAMES = /* @__PURE__ */ new Map([[6, "_xlnm.Print_Area"], [7, "_xlnm.Print_Titles"]]);
590
588
  function buildDefinedNames(lblRecords, boundSheets) {
591
589
  const wsIndex = [];
592
590
  let ws = 0;
@@ -722,7 +720,7 @@ var DV_OPERATORS = [
722
720
  "greaterThanOrEqual",
723
721
  "lessThanOrEqual"
724
722
  ];
725
- var DV_OPERATOR_TYPES = new Set([
723
+ var DV_OPERATOR_TYPES = /* @__PURE__ */ new Set([
726
724
  "whole",
727
725
  "decimal",
728
726
  "date",
@@ -1080,7 +1078,7 @@ function readIconSet(c, priority) {
1080
1078
  };
1081
1079
  }
1082
1080
  function parseCf12Rule(d, color) {
1083
- if (d.length < FTR_HEADER + 16) return void 0;
1081
+ if (d.length < 28) return void 0;
1084
1082
  const c = {
1085
1083
  d,
1086
1084
  p: FTR_HEADER
@@ -1109,12 +1107,12 @@ function parseConditionalFormats12(records, color) {
1109
1107
  for (let i = 0; i < records.length; i++) {
1110
1108
  if (records[i].type !== REC.CONDFMT12) continue;
1111
1109
  const head = records[i].data;
1112
- if (head.length < FTR_HEADER + 14) continue;
1110
+ if (head.length < 26) continue;
1113
1111
  const numcf = readU16(head, FTR_HEADER);
1114
- const cref = readU16(head, FTR_HEADER + 12);
1112
+ const cref = readU16(head, 24);
1115
1113
  const ranges = [];
1116
- for (let k = 0; k < cref && FTR_HEADER + 14 + k * 8 + 8 <= head.length; k++) {
1117
- const o = FTR_HEADER + 14 + k * 8;
1114
+ for (let k = 0; k < cref && 26 + k * 8 + 8 <= head.length; k++) {
1115
+ const o = 26 + k * 8;
1118
1116
  ranges.push({
1119
1117
  startRow: readU16(head, o),
1120
1118
  endRow: readU16(head, o + 2),
@@ -1414,6 +1412,7 @@ function readSst(blocks) {
1414
1412
  * each crossing re-reads the `fHighByte` flag.
1415
1413
  */
1416
1414
  var SstReader = class {
1415
+ blocks;
1417
1416
  bi = 0;
1418
1417
  off = 0;
1419
1418
  /** @param blocks The SST record's data followed by each CONTINUE record's data. */
@@ -1502,4 +1501,4 @@ function readF64(d, off) {
1502
1501
  return new DataView(d.buffer, d.byteOffset + off, 8).getFloat64(0, true);
1503
1502
  }
1504
1503
  //#endregion
1505
- export { readXlsToSheetDoc };
1504
+ export { decodeRk, readSst, readXlsToSheetDoc };
@@ -25,7 +25,7 @@ var XLS_LOSSES = [{
25
25
  var xlsReader = {
26
26
  id: "xls",
27
27
  produces: "sheet",
28
- supports: new Set([FEATURES.text, FEATURES.tables]),
28
+ supports: /* @__PURE__ */ new Set([FEATURES.text, FEATURES.tables]),
29
29
  sniff: looksLikeXls,
30
30
  read: (bytes) => ({
31
31
  doc: readXlsToSheetDoc(bytes),
@@ -3,9 +3,9 @@ import { FEATURES } from "../core/ir/features.js";
3
3
  import { detectImageFormat } from "../core/images.js";
4
4
  import { INDEXED_COLORS } from "../core/indexed-colors.js";
5
5
  import { bytesInclude, packageHasPart } from "../core/bytes.js";
6
+ import { parseTheme, parseThemeEffectStyles, parseThemeFillStyles, parseThemeFonts, parseThemeLineWidths } from "../core/drawingml/theme-parser.js";
6
7
  import { OFFICE_2023_THEME_PALETTE, makeColorResolver } from "../core/drawingml/colors.js";
7
- import { parseChart, withChartColorStyle } from "../core/drawingml/chart-parser.js";
8
- import { parseTheme, parseThemeEffectStyles, parseThemeFillStyles, parseThemeLineWidths } from "../core/drawingml/theme-parser.js";
8
+ import { parseChart, pointsPerSeries, withChartColorStyle } from "../core/drawingml/chart-parser.js";
9
9
  import { isOoxmlRel } from "../core/opc/relationship-types.js";
10
10
  import { OpcPackage } from "../core/opc/package.js";
11
11
  import { parseCoreProperties } from "../core/opc/core-properties.js";
@@ -109,6 +109,12 @@ function readXlsxToSheetDoc(xlsx) {
109
109
  const themeLineWidths = buildThemeLineWidths(pkg, workbookRels);
110
110
  const themeFillStyles = buildThemeFillStyles(pkg, workbookRels);
111
111
  const themeEffectStyles = buildThemeEffectStyles(pkg, workbookRels);
112
+ const themeFonts = buildThemeFonts(pkg, workbookRels);
113
+ const normalFont = styles.fonts[0];
114
+ const chartText = themeFonts ? {
115
+ themeFonts,
116
+ ...themeFonts.minor.latin ? { family: themeFonts.minor.latin } : {}
117
+ } : { family: normalFont?.name?.trim().toLowerCase() === "calibri" && normalFont.scheme === void 0 ? "Calibri" : "Aptos Narrow" };
112
118
  const sheetsOut = [];
113
119
  let embeddedObjects = 0;
114
120
  let metafilePictures = 0;
@@ -142,7 +148,7 @@ function readXlsxToSheetDoc(xlsx) {
142
148
  for (const ref of chartRefs) {
143
149
  if (!chartData.has(ref.chartPartPath)) {
144
150
  const chartXml = pkg.getPart(ref.chartPartPath);
145
- const parsed = chartXml ? parseChart(chartXml, resolveColor) : null;
151
+ const parsed = chartXml ? parseChart(chartXml, resolveColor, void 0, chartText) : null;
146
152
  if (!parsed) continue;
147
153
  chartData.set(ref.chartPartPath, withChartColorStyle(parsed, pkg, ref.chartPartPath, resolveColor));
148
154
  }
@@ -409,6 +415,11 @@ function readXlsxToSheetDoc(xlsx) {
409
415
  * them, and a reference naming a sheet this workbook does not have resolves to
410
416
  * nothing rather than to zeros.
411
417
  *
418
+ * A reference reads no more cells than the series' share of the chart's points
419
+ * ({@link pointsPerSeries}), and finds each in an index of its sheet. The range
420
+ * is the file's to name and unbounded — `B2:B99999999999` — and every cell of
421
+ * it was searched for through the whole sheet.
422
+ *
412
423
  * @param chart The parsed chart.
413
424
  * @param sheets Every sheet in the workbook, by tab order.
414
425
  * @param styles The style table (for a referenced cell's number format).
@@ -417,13 +428,27 @@ function readXlsxToSheetDoc(xlsx) {
417
428
  * @returns The chart, unchanged when nothing needed resolving.
418
429
  */
419
430
  function withWorkbookData(chart, sheets, styles, sharedStrings, date1904) {
431
+ const most = pointsPerSeries(chart.series.length);
432
+ const indexes = /* @__PURE__ */ new Map();
433
+ const cellAt = (grid, row, column) => {
434
+ let index = indexes.get(grid);
435
+ if (!index) {
436
+ index = /* @__PURE__ */ new Map();
437
+ for (const cell of grid.cells) {
438
+ const key = `${String(cell.row)}:${String(cell.column)}`;
439
+ if (!index.has(key)) index.set(key, cell);
440
+ }
441
+ indexes.set(grid, index);
442
+ }
443
+ return index.get(`${String(row)}:${String(column)}`);
444
+ };
420
445
  const cellsOf = (ref) => {
421
446
  if (ref === void 0) return void 0;
422
447
  const area = resolveChartRef(ref, sheets);
423
448
  if (!area) return void 0;
424
449
  const out = [];
425
- for (let row = area.startRow; row <= area.endRow; row++) for (let col = area.startColumn; col <= area.endColumn; col++) {
426
- const cell = area.grid.cells.find((c) => c.row === row && c.column === col);
450
+ for (let row = area.startRow; row <= area.endRow && out.length < most; row++) for (let col = area.startColumn; col <= area.endColumn && out.length < most; col++) {
451
+ const cell = cellAt(area.grid, row, col);
427
452
  out.push(cell ? resolveCellText(cell, sharedStrings, styles, date1904) : "");
428
453
  }
429
454
  return out;
@@ -702,6 +727,13 @@ function buildThemePalette(pkg, workbookRels) {
702
727
  }
703
728
  return palette;
704
729
  }
730
+ function buildThemeFonts(pkg, workbookRels) {
731
+ for (const rel of workbookRels) {
732
+ if (!isOoxmlRel(rel.type, "theme")) continue;
733
+ const resolved = pkg.resolveRelatedPart(WORKBOOK_PART, rel);
734
+ if (resolved) return parseThemeFonts(resolved.data);
735
+ }
736
+ }
705
737
  function buildThemeLineWidths(pkg, workbookRels) {
706
738
  for (const rel of workbookRels) {
707
739
  if (!isOoxmlRel(rel.type, "theme")) continue;
@@ -810,9 +842,24 @@ function resolveTableSlicerItems(cache, tableIndex, styles, sharedStrings, date1
810
842
  }
811
843
  return out;
812
844
  }
845
+ function slicerStyleNumber(name) {
846
+ const prefix = /SlicerStyle/gi;
847
+ const isLetter = (i) => /[A-Za-z]/.test(name[i] ?? "");
848
+ const isDigit = (i) => /\d/.test(name[i] ?? "");
849
+ for (let found = prefix.exec(name); found; found = prefix.exec(name)) {
850
+ let end = prefix.lastIndex;
851
+ while (isLetter(end)) end++;
852
+ if (isDigit(end)) {
853
+ let digits = end;
854
+ while (isDigit(digits)) digits++;
855
+ return name.slice(end, digits);
856
+ }
857
+ prefix.lastIndex = end;
858
+ }
859
+ }
813
860
  function resolveSlicerStyle(styleName, palette) {
814
- const m = styleName ? /SlicerStyle[A-Za-z]*?(\d+)/i.exec(styleName) : null;
815
- const column = m ? (Number(m[1]) - 1) % 7 : 1;
861
+ const number = styleName ? slicerStyleNumber(styleName) : void 0;
862
+ const column = number !== void 0 ? (Number(number) - 1) % 7 : 1;
816
863
  const base = column === 0 ? "7F7F7F" : palette.get(`accent${column}`) ?? "4472C4";
817
864
  return {
818
865
  headerHex: base,
@@ -840,7 +887,7 @@ function lighten(hex, amount) {
840
887
  var xlsxReader = {
841
888
  id: "xlsx",
842
889
  produces: "sheet",
843
- supports: new Set([FEATURES.text, FEATURES.tables]),
890
+ supports: /* @__PURE__ */ new Set([FEATURES.text, FEATURES.tables]),
844
891
  sniff: (bytes) => bytes[0] === 80 && bytes[1] === 75 && packageHasPart(bytes, "xl/workbook.xml"),
845
892
  read: (bytes) => ({
846
893
  doc: readXlsxToSheetDoc(bytes),
@@ -859,4 +906,4 @@ function infoFromCore(core) {
859
906
  };
860
907
  }
861
908
  //#endregion
862
- export { readXlsx, xlsxReader };
909
+ export { readXlsx, readXlsxToSheetDoc, xlsxReader };
@@ -84,4 +84,4 @@ function prepareXlsxStyledRender(xlsx, options) {
84
84
  };
85
85
  }
86
86
  //#endregion
87
- export { convertXlsxToPdf };
87
+ export { convertXlsxToPdf, convertXlsxToPdfSync };
@@ -129,7 +129,7 @@ function writeXlsx(sheet) {
129
129
  losses
130
130
  };
131
131
  }
132
- new Set([FEATURES.text, FEATURES.tables]);
132
+ FEATURES.text, FEATURES.tables;
133
133
  function rel(id, type, target) {
134
134
  return {
135
135
  id,
@@ -206,7 +206,7 @@ function worksheetXml(grid, tableRelIds = [], drawingRelId) {
206
206
  }
207
207
  row.push(cell);
208
208
  }
209
- const rowsXml = [...new Set([...cellsByRow.keys(), ...heightByRow.keys()])].sort((a, b) => a - b).map((r) => {
209
+ const rowsXml = [.../* @__PURE__ */ new Set([...cellsByRow.keys(), ...heightByRow.keys()])].sort((a, b) => a - b).map((r) => {
210
210
  const cells = (cellsByRow.get(r) ?? []).slice().sort((a, b) => a.column - b.column);
211
211
  const h = heightByRow.get(r);
212
212
  const heightAttrs = h ? ` ht="${h.heightPt}"${h.customHeight ? " customHeight=\"1\"" : ""}` : "";
@@ -75,7 +75,7 @@ function writeHtml(flow) {
75
75
  var htmlWriter = {
76
76
  id: "html",
77
77
  consumes: "flow",
78
- supports: new Set([
78
+ supports: /* @__PURE__ */ new Set([
79
79
  FEATURES.text,
80
80
  FEATURES.tables,
81
81
  FEATURES.tablesNested,
@@ -320,6 +320,10 @@ function emitChartBlock(out, block, ctx) {
320
320
  }
321
321
  const svg = [figure, svgOpen(w, h, label)];
322
322
  svg.push(`<g transform="matrix(1 0 0 -1 0 ${fmt(h)})">`);
323
+ if (scene.background) svg.push(rectSvg(scene.background));
324
+ if (scene.plotBackground) svg.push(rectSvg(scene.plotBackground));
325
+ for (const w of scene.walls ?? []) svg.push(polygonSvg(w));
326
+ for (const g of scene.gridlines ?? []) svg.push(polylineSvg(g));
323
327
  for (const pg of scene.polygons ?? []) svg.push(polygonSvg(pg));
324
328
  for (const r of scene.rects) svg.push(rectSvg(r));
325
329
  for (const pl of scene.polylines) svg.push(polylineSvg(pl));
@@ -345,7 +349,8 @@ function polylineSvg(p) {
345
349
  }
346
350
  function polygonSvg(p) {
347
351
  const stroke = p.strokeHex ? ` stroke="#${p.strokeHex}" stroke-width="${fmt(p.widthPt ?? 1)}"` : "";
348
- return `<polygon points="${pointsAttr(p.points)}" fill="#${p.fillHex}"${stroke}/>`;
352
+ const fill = p.fillHex ? `#${p.fillHex}` : "none";
353
+ return `<polygon points="${pointsAttr(p.points)}" fill="${fill}"${stroke}/>`;
349
354
  }
350
355
  function wedgeSvg(w) {
351
356
  const start = arcPoint(w.cx, w.cy, w.r, w.r, w.startRad);
@@ -355,7 +360,10 @@ function wedgeSvg(w) {
355
360
  }
356
361
  function labelSvg(l, sceneH, anchor) {
357
362
  const rot = l.rotationDeg ? ` transform="rotate(${fmt(-l.rotationDeg)} ${fmt(l.x)} ${fmt(sceneH - l.y)})"` : "";
358
- return `<text x="${fmt(l.x)}" y="${fmt(sceneH - l.y)}"${rot} font-size="${fmt(l.sizePt)}" font-family="sans-serif" fill="#${l.colorHex}" text-anchor="${anchor}">${escapeText(l.text)}</text>`;
363
+ const family = l.family ? escapeAttr(fontStack(l.family)) : "sans-serif";
364
+ const weight = l.bold ? " font-weight=\"bold\"" : "";
365
+ const slant = l.italic ? " font-style=\"italic\"" : "";
366
+ return `<text x="${fmt(l.x)}" y="${fmt(sceneH - l.y)}"${rot} font-size="${fmt(l.sizePt)}" font-family="${family}"${weight}${slant} fill="#${l.colorHex}" text-anchor="${anchor}">${escapeText(l.text)}</text>`;
359
367
  }
360
368
  /** `RRGGBB` as the `r,g,b` triple a CSS `rgba()` takes. */
361
369
  function hexToRgbCss(hex) {
@@ -430,8 +438,10 @@ function paragraphCss(r) {
430
438
  if (indentLeft !== 0) css.push(`margin-left:${fmt(indentLeft)}pt`);
431
439
  if (indentRight !== 0) css.push(`margin-right:${fmt(indentRight)}pt`);
432
440
  if (r.indentFirstLine !== 0) css.push(`text-indent:${fmt(r.indentFirstLine)}pt`);
433
- if (r.spacingLine > 0) if (r.spacingLineRule === "auto") css.push(`line-height:${fmt(r.spacingLine / 12)}`);
434
- else css.push(`line-height:${fmt(r.spacingLine)}pt`);
441
+ if (r.spacingLine > 0) {
442
+ if (r.spacingLineRule === "auto") css.push(`line-height:${fmt(r.spacingLine / 12)}`);
443
+ else css.push(`line-height:${fmt(r.spacingLine)}pt`);
444
+ }
435
445
  if (r.pageBreakBefore) css.push("break-before:page");
436
446
  return css.join(";");
437
447
  }
@@ -776,9 +786,7 @@ function cellIconSvg(icon) {
776
786
  case "pie":
777
787
  body = pieIconSvg(icon.fill, fill, `#${ICON_EMPTY_HEX}`);
778
788
  break;
779
- case "circle":
780
- body = `<circle cx="5" cy="5" r="4" fill="${fill}"/>`;
781
- break;
789
+ case "circle": body = `<circle cx="5" cy="5" r="4" fill="${fill}"/>`;
782
790
  }
783
791
  return `<svg width="10" height="10" viewBox="0 0 10 10" style="float:left;margin:2px 3px 0 0">${body}</svg>`;
784
792
  }
@@ -786,7 +794,7 @@ var round2 = (n) => (Math.round(n * 100) / 100).toString();
786
794
  function barsIconSvg(fill, color, empty) {
787
795
  const n = Math.max(1, fill?.levels ?? 4);
788
796
  const filled = fill?.filled ?? 0;
789
- const gap = 10 * .12;
797
+ const gap = 1.2;
790
798
  const bw = (10 - gap * (n - 1)) / n;
791
799
  let out = "";
792
800
  for (let i = 0; i < n; i++) {
@@ -809,7 +817,7 @@ function pieIconSvg(fill, color, empty) {
809
817
  const ex = cx + r * Math.cos(ang);
810
818
  const ey = cy + r * Math.sin(ang);
811
819
  const large = frac > .5 ? 1 : 0;
812
- out += `<path d="M${cx} ${cy} L${cx} ${round2(cy - r)} A${r} ${r} 0 ${large} 1 ${round2(ex)} ${round2(ey)} Z" fill="${color}"/>`;
820
+ out += `<path d="M${cx} ${cy} L${cx} ${round2(.5999999999999996)} A${r} ${r} 0 ${large} 1 ${round2(ex)} ${round2(ey)} Z" fill="${color}"/>`;
813
821
  }
814
822
  return out;
815
823
  }
@@ -8,7 +8,7 @@ var FAUX_ITALIC_SHEAR = .2126;
8
8
  * §18.18.3 — the dash pattern of a rule that is not solid, in points: dashes
9
9
  * and gaps alternating, from a dash.
10
10
  */
11
- var BORDER_DASHES = new Map([
11
+ var BORDER_DASHES = /* @__PURE__ */ new Map([
12
12
  ["dashed", [8, 2.5]],
13
13
  ["dashSmallGap", [3, 1]],
14
14
  ["dotted", [.5, 1]],
@@ -58,7 +58,7 @@ var emptyBox = () => ({
58
58
  descent: 0,
59
59
  items: []
60
60
  });
61
- var MATH_BINARY = new Set([
61
+ var MATH_BINARY = /* @__PURE__ */ new Set([
62
62
  "+",
63
63
  "−",
64
64
  "-",
@@ -72,7 +72,7 @@ var MATH_BINARY = new Set([
72
72
  "⊗",
73
73
  "∘"
74
74
  ]);
75
- var MATH_RELATION = new Set([
75
+ var MATH_RELATION = /* @__PURE__ */ new Set([
76
76
  "=",
77
77
  "≠",
78
78
  "<",
@@ -281,7 +281,7 @@ function layoutRadical(node, ctx, measure) {
281
281
  };
282
282
  }
283
283
  var NARY_AXIS = .28;
284
- var SUM_LIKE = new Set([
284
+ var SUM_LIKE = /* @__PURE__ */ new Set([
285
285
  "∑",
286
286
  "∏",
287
287
  "∐",
@@ -1143,14 +1143,11 @@ function mathGlyphSegments(node) {
1143
1143
  break;
1144
1144
  case "accent":
1145
1145
  case "bar":
1146
- case "groupChr":
1147
- visit(n.base);
1148
- break;
1149
- default: break;
1146
+ case "groupChr": visit(n.base);
1150
1147
  }
1151
1148
  };
1152
1149
  visit(node);
1153
1150
  return out;
1154
1151
  }
1155
1152
  //#endregion
1156
- export { layoutMath, mathGlyphSegments, variantStyle };
1153
+ export { layoutMath, mathGlyphSegments, shiftItems, variantStyle };