reamkit 1.32.1 → 1.33.1

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 (165) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +16 -11
  3. package/dist/esm/core/bidi/algorithm.js +2 -2
  4. package/dist/esm/core/bidi/char-types.js +1 -1
  5. package/dist/esm/core/bidi/index.js +3 -3
  6. package/dist/esm/core/bytes.js +1 -1
  7. package/dist/esm/core/converter/facade.js +10 -5
  8. package/dist/esm/core/converter/ream.d.ts +9 -0
  9. package/dist/esm/core/converter/ream.js +40 -10
  10. package/dist/esm/core/crypto/asn1.js +2 -2
  11. package/dist/esm/core/crypto/cms.js +5 -3
  12. package/dist/esm/core/crypto/index.js +2 -1
  13. package/dist/esm/core/crypto/offcrypto.d.ts +2 -5
  14. package/dist/esm/core/crypto/offcrypto.js +9 -15
  15. package/dist/esm/core/crypto/password-error.d.ts +8 -0
  16. package/dist/esm/core/crypto/password-error.js +14 -0
  17. package/dist/esm/core/crypto/primitives.js +16 -16
  18. package/dist/esm/core/document-model/index.d.ts +1 -1
  19. package/dist/esm/core/document-model/types.d.ts +174 -2
  20. package/dist/esm/core/drawingml/chart-geometry.d.ts +24 -6
  21. package/dist/esm/core/drawingml/chart-geometry.js +905 -208
  22. package/dist/esm/core/drawingml/chart-parser.d.ts +5 -1
  23. package/dist/esm/core/drawingml/chart-parser.js +275 -19
  24. package/dist/esm/core/drawingml/chart-text.d.ts +41 -0
  25. package/dist/esm/core/drawingml/chart-text.js +93 -0
  26. package/dist/esm/core/drawingml/colors.js +5 -5
  27. package/dist/esm/core/drawingml/diagram/layout-engine.js +1 -4
  28. package/dist/esm/core/drawingml/diagram/run.js +2 -1
  29. package/dist/esm/core/drawingml/preset-geometry.js +4 -6
  30. package/dist/esm/core/drawingml/shape-render.js +1 -1
  31. package/dist/esm/core/drawingml/text-warp.js +4 -16
  32. package/dist/esm/core/drawingml/theme-parser.js +14 -8
  33. package/dist/esm/core/font/arabic-joining.js +2 -2
  34. package/dist/esm/core/font/binary-reader.js +2 -0
  35. package/dist/esm/core/font/font-registry.js +1 -0
  36. package/dist/esm/core/font/ligatures.js +1 -1
  37. package/dist/esm/core/font/opentype-layout.js +11 -5
  38. package/dist/esm/core/font/ttf-build.js +6 -10
  39. package/dist/esm/core/font/ttf-parser.js +2 -1
  40. package/dist/esm/core/font/ttf-subset.js +8 -8
  41. package/dist/esm/core/fonts/families.js +1 -1
  42. package/dist/esm/core/fonts/remote-fonts.js +4 -4
  43. package/dist/esm/core/hyphenation/index.js +1 -1
  44. package/dist/esm/core/images.js +8 -8
  45. package/dist/esm/core/ir/adapters.d.ts +9 -0
  46. package/dist/esm/core/ir/loss.js +1 -0
  47. package/dist/esm/core/line-breaker/cjk.js +1 -1
  48. package/dist/esm/core/line-breaker/index.js +4 -3
  49. package/dist/esm/core/links.js +1 -1
  50. package/dist/esm/core/lzw.js +1 -1
  51. package/dist/esm/core/metafile/blit.js +1 -1
  52. package/dist/esm/core/metafile/emf.js +5 -7
  53. package/dist/esm/core/metafile/picture.js +1 -1
  54. package/dist/esm/core/metafile/symbol-fonts.js +7 -7
  55. package/dist/esm/core/metafile/wmf.js +5 -7
  56. package/dist/esm/core/number-format.js +4 -6
  57. package/dist/esm/core/numbering/index.js +3 -2
  58. package/dist/esm/core/ole/cfb.js +4 -4
  59. package/dist/esm/core/ole/escher-blip.js +1 -1
  60. package/dist/esm/core/opc/index.js +5 -4
  61. package/dist/esm/core/opc/package.js +3 -1
  62. package/dist/esm/core/opc/xml-entities.js +1 -1
  63. package/dist/esm/core/outline.js +1 -1
  64. package/dist/esm/core/png-encode.js +3 -3
  65. package/dist/esm/core/po-helpers.js +1 -1
  66. package/dist/esm/core/spreadsheet-model/types.d.ts +6 -0
  67. package/dist/esm/core/style-cascade/index.js +4 -3
  68. package/dist/esm/core/tiff.js +3 -1
  69. package/dist/esm/excel/activex-parser.js +1 -1
  70. package/dist/esm/excel/conditional-format.js +7 -7
  71. package/dist/esm/excel/formula/functions.js +8 -4
  72. package/dist/esm/excel/formula/index.js +3 -3
  73. package/dist/esm/excel/formula/lexer.js +2 -2
  74. package/dist/esm/excel/formula/parser.js +4 -3
  75. package/dist/esm/excel/formula/value.js +1 -1
  76. package/dist/esm/excel/index.js +7 -6
  77. package/dist/esm/excel/print-model.d.ts +1 -0
  78. package/dist/esm/excel/print-model.js +7 -32
  79. package/dist/esm/excel/printer-settings.js +6 -7
  80. package/dist/esm/excel/rich-value.js +1 -1
  81. package/dist/esm/excel/sheet-shape-parser.js +4 -2
  82. package/dist/esm/excel/sheet-to-flow.d.ts +8 -0
  83. package/dist/esm/excel/sheet-to-flow.js +14 -11
  84. package/dist/esm/excel/styles-parser.js +5 -3
  85. package/dist/esm/excel/tint.js +5 -5
  86. package/dist/esm/excel/vml-drawing.js +2 -2
  87. package/dist/esm/excel/worksheet-parser.js +5 -5
  88. package/dist/esm/excel/xls/biff-chart.js +1 -3
  89. package/dist/esm/excel/xls/biff-reader.js +10 -11
  90. package/dist/esm/excel/xls/xls-reader.js +1 -1
  91. package/dist/esm/excel/xlsx-reader.js +17 -4
  92. package/dist/esm/excel/xlsx-to-pdf.js +1 -1
  93. package/dist/esm/excel/xlsx-writer.js +2 -2
  94. package/dist/esm/html/html-writer.js +18 -10
  95. package/dist/esm/index.js +2 -1
  96. package/dist/esm/layout/line-paint.js +1 -1
  97. package/dist/esm/layout/math-layout.js +5 -8
  98. package/dist/esm/layout/styled-layout.js +133 -75
  99. package/dist/esm/layout/turned-section.js +2 -2
  100. package/dist/esm/markdown/markdown-writer.js +50 -9
  101. package/dist/esm/pdf/encryption.js +9 -9
  102. package/dist/esm/pdf/icc-profile.js +2 -2
  103. package/dist/esm/pdf/index.js +3 -2
  104. package/dist/esm/pdf/objects.js +7 -0
  105. package/dist/esm/pdf/serialize.js +1 -1
  106. package/dist/esm/pdf/struct-tree.js +3 -1
  107. package/dist/esm/pdf/styled-page-emitter.js +23 -15
  108. package/dist/esm/pdf/styled-page-renderer.js +9 -5
  109. package/dist/esm/pdf-reader/annot-draw.js +3 -3
  110. package/dist/esm/pdf-reader/ccitt.js +2 -1
  111. package/dist/esm/pdf-reader/cff-outline.js +1 -4
  112. package/dist/esm/pdf-reader/content.js +13 -15
  113. package/dist/esm/pdf-reader/decrypt.d.ts +18 -6
  114. package/dist/esm/pdf-reader/decrypt.js +90 -45
  115. package/dist/esm/pdf-reader/document.d.ts +7 -1
  116. package/dist/esm/pdf-reader/document.js +18 -4
  117. package/dist/esm/pdf-reader/encodings.js +1 -1
  118. package/dist/esm/pdf-reader/flow-build.js +4 -6
  119. package/dist/esm/pdf-reader/font.js +3 -3
  120. package/dist/esm/pdf-reader/function.js +8 -7
  121. package/dist/esm/pdf-reader/icc.js +1 -1
  122. package/dist/esm/pdf-reader/images.js +1 -1
  123. package/dist/esm/pdf-reader/jbig2.js +36 -38
  124. package/dist/esm/pdf-reader/jpeg.js +14 -13
  125. package/dist/esm/pdf-reader/layout.js +12 -9
  126. package/dist/esm/pdf-reader/lexer.js +2 -1
  127. package/dist/esm/pdf-reader/math-rows.js +2 -2
  128. package/dist/esm/pdf-reader/optional-content.js +1 -1
  129. package/dist/esm/pdf-reader/page-numbers.js +1 -1
  130. package/dist/esm/pdf-reader/pattern-tint.js +1 -2
  131. package/dist/esm/pdf-reader/reader.d.ts +5 -1
  132. package/dist/esm/pdf-reader/reader.js +83 -16
  133. package/dist/esm/pdf-reader/struct-tree.js +1 -1
  134. package/dist/esm/pdf-reader/tagged.js +3 -2
  135. package/dist/esm/pdf-reader/text.js +2 -2
  136. package/dist/esm/pdf-reader/type1-outline.js +1 -3
  137. package/dist/esm/pptx/embedded-fonts.js +3 -5
  138. package/dist/esm/pptx/placeholder-cascade.js +1 -1
  139. package/dist/esm/pptx/ppt/ppt-reader.js +5 -4
  140. package/dist/esm/pptx/ppt/ppt-text.js +9 -10
  141. package/dist/esm/pptx/pptx-reader.js +6 -5
  142. package/dist/esm/pptx/preset-table-styles.js +1 -1
  143. package/dist/esm/pptx/slide-parser.js +6 -4
  144. package/dist/esm/pptx/sp-helpers.js +1 -1
  145. package/dist/esm/pptx/table-style.js +2 -1
  146. package/dist/esm/svg/svg-writer.js +1 -1
  147. package/dist/esm/word/doc/doc-reader.js +2 -2
  148. package/dist/esm/word/doc/doc-text.js +20 -22
  149. package/dist/esm/word/document-parser.js +26 -21
  150. package/dist/esm/word/docx-reader.js +2 -2
  151. package/dist/esm/word/docx-to-pdf.js +3 -3
  152. package/dist/esm/word/docx-writer.js +10 -6
  153. package/dist/esm/word/drawing-parser.js +18 -18
  154. package/dist/esm/word/font-table.js +1 -1
  155. package/dist/esm/word/index.js +6 -5
  156. package/dist/esm/word/numbering-parser.js +4 -3
  157. package/dist/esm/word/omml-parser.js +1 -1
  158. package/dist/esm/word/paragraph-properties.js +11 -10
  159. package/dist/esm/word/run-properties.js +4 -4
  160. package/dist/esm/word/settings-parser.js +2 -1
  161. package/dist/esm/word/shading.js +1 -1
  162. package/dist/esm/word/styles-parser.js +5 -4
  163. package/dist/esm/word/table-parser.js +4 -4
  164. package/dist/esm/word/theme-fonts.js +1 -1
  165. package/package.json +9 -3
@@ -54,7 +54,7 @@ function parseXlsxStyles(data, theme) {
54
54
  ...tableStyles.size > 0 ? { tableStyles } : {}
55
55
  };
56
56
  }
57
- var TABLE_STYLE_TYPES = new Set([
57
+ var TABLE_STYLE_TYPES = /* @__PURE__ */ new Set([
58
58
  "wholeTable",
59
59
  "firstColumnStripe",
60
60
  "secondColumnStripe",
@@ -155,7 +155,7 @@ function parseDxf(item, colors) {
155
155
  return dxf;
156
156
  }
157
157
  }
158
- var VALID_BORDER_STYLES = new Set([
158
+ var VALID_BORDER_STYLES = /* @__PURE__ */ new Set([
159
159
  "none",
160
160
  "thin",
161
161
  "medium",
@@ -250,6 +250,8 @@ function parseFonts(root, colors) {
250
250
  if (colorRef !== void 0) font.colorRef = colorRef;
251
251
  const nameVal = childValAttr(obj, "name");
252
252
  if (nameVal) font.name = nameVal;
253
+ const scheme = childValAttr(obj, "scheme");
254
+ if (scheme === "minor" || scheme === "major") font.scheme = scheme;
253
255
  out.push(font);
254
256
  }
255
257
  return out;
@@ -495,4 +497,4 @@ var THEME_SLOTS = [
495
497
  "folHlink"
496
498
  ];
497
499
  //#endregion
498
- export { EMPTY_XLSX_STYLES, parseDxf, parseXlsxStyles, workbookColorHex };
500
+ export { EMPTY_XLSX_STYLES, INDEXED_COLORS, parseDxf, parseXlsxStyles, workbookColorHex };
@@ -10,16 +10,16 @@ function toHls(r, g, b) {
10
10
  const max = Math.max(r, g, b);
11
11
  const min = Math.min(r, g, b);
12
12
  const sum = max + min;
13
- const l = div(sum * HLS_MAX + RGB_MAX, 2 * RGB_MAX);
13
+ const l = div(sum * HLS_MAX + RGB_MAX, 510);
14
14
  if (max === min) return [
15
- HLS_MAX * 2 / 3,
15
+ 160,
16
16
  l,
17
17
  0
18
18
  ];
19
19
  const range = max - min;
20
- const s = l <= HLS_MAX / 2 ? div(range * HLS_MAX + div(sum, 2), sum) : div(range * HLS_MAX + div(2 * RGB_MAX - sum, 2), 2 * RGB_MAX - sum);
20
+ const s = l <= HLS_MAX / 2 ? div(range * HLS_MAX + div(sum, 2), sum) : div(range * HLS_MAX + div(510 - sum, 2), 510 - sum);
21
21
  const away = (c) => div((max - c) * (HLS_MAX / 6) + div(range, 2), range);
22
- let h = r === max ? away(b) - away(g) : g === max ? HLS_MAX / 3 + away(r) - away(b) : HLS_MAX * 2 / 3 + away(g) - away(r);
22
+ let h = r === max ? away(b) - away(g) : g === max ? HLS_MAX / 3 + away(r) - away(b) : 160 + away(g) - away(r);
23
23
  if (h < 0) h += HLS_MAX;
24
24
  if (h > HLS_MAX) h -= HLS_MAX;
25
25
  return [
@@ -45,7 +45,7 @@ function toRgb(h, l, s) {
45
45
  const x = hue < 0 ? hue + HLS_MAX : hue > HLS_MAX ? hue - HLS_MAX : hue;
46
46
  if (x < HLS_MAX / 6) return lo + div((hi - lo) * x + HLS_MAX / 12, HLS_MAX / 6);
47
47
  if (x < HLS_MAX / 2) return hi;
48
- if (x < HLS_MAX * 2 / 3) return lo + div((hi - lo) * (HLS_MAX * 2 / 3 - x) + HLS_MAX / 12, HLS_MAX / 6);
48
+ if (x < 160) return lo + div((hi - lo) * (160 - x) + HLS_MAX / 12, HLS_MAX / 6);
49
49
  return lo;
50
50
  };
51
51
  return [
@@ -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],
@@ -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
8
  import { parseChart, pointsPerSeries, withChartColorStyle } from "../core/drawingml/chart-parser.js";
8
- import { parseTheme, parseThemeEffectStyles, parseThemeFillStyles, parseThemeLineWidths } from "../core/drawingml/theme-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
  }
@@ -721,6 +727,13 @@ function buildThemePalette(pkg, workbookRels) {
721
727
  }
722
728
  return palette;
723
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
+ }
724
737
  function buildThemeLineWidths(pkg, workbookRels) {
725
738
  for (const rel of workbookRels) {
726
739
  if (!isOoxmlRel(rel.type, "theme")) continue;
@@ -874,7 +887,7 @@ function lighten(hex, amount) {
874
887
  var xlsxReader = {
875
888
  id: "xlsx",
876
889
  produces: "sheet",
877
- supports: new Set([FEATURES.text, FEATURES.tables]),
890
+ supports: /* @__PURE__ */ new Set([FEATURES.text, FEATURES.tables]),
878
891
  sniff: (bytes) => bytes[0] === 80 && bytes[1] === 75 && packageHasPart(bytes, "xl/workbook.xml"),
879
892
  read: (bytes) => ({
880
893
  doc: readXlsxToSheetDoc(bytes),
@@ -893,4 +906,4 @@ function infoFromCore(core) {
893
906
  };
894
907
  }
895
908
  //#endregion
896
- 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
  }
package/dist/esm/index.js CHANGED
@@ -19,7 +19,8 @@ import { docxWriter, writeDocx } from "./word/docx-writer.js";
19
19
  import { htmlWriter, writeHtml } from "./html/html-writer.js";
20
20
  import { markdownWriter, writeMarkdown } from "./markdown/markdown-writer.js";
21
21
  import { svgWriter, writeSvg } from "./svg/svg-writer.js";
22
+ import { WrongPasswordError } from "./core/crypto/password-error.js";
22
23
  import { createConverter } from "./core/converter/facade.js";
23
- import { WrongPasswordError, isEncryptedPackage } from "./core/crypto/offcrypto.js";
24
+ import { isEncryptedPackage } from "./core/crypto/offcrypto.js";
24
25
  import { Ream } from "./core/converter/ream.js";
25
26
  export { ConversionLossError, FEATURES, FontRegistry, NO_FONT, Ream, ResourceStore, WrongPasswordError, callerFontProvider, chainProviders, createConverter, createHyphenator, createLanguageHyphenator, docxReader, docxWriter, eighthPtToPt, embeddedDocFontProvider, emuToPt, fetchFontSet, formatLoss, getHyphenator, halfPtToPt, htmlWriter, inchToPt, isEmbeddingRestricted, isEncryptedPackage, layoutStyledDocument, localFontProvider, markdownWriter, mmToPt, parseTtf, pt, pxToPt, readDocx, readOs2FsType, readXlsx, remoteFontProvider, renderStyledPdf, resolveFamilyKey, signPdf, splitPatternBundle, subsetTtf, svgWriter, twipsToPt, writeDocx, writeHtml, writeMarkdown, writeSvg, xlsxReader };
@@ -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 };