reamkit 1.32.1 → 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 (153) 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 +8 -7
  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 +24 -6
  16. package/dist/esm/core/drawingml/chart-geometry.js +905 -208
  17. package/dist/esm/core/drawingml/chart-parser.d.ts +5 -1
  18. package/dist/esm/core/drawingml/chart-parser.js +275 -19
  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.js +4 -6
  51. package/dist/esm/core/numbering/index.js +3 -2
  52. package/dist/esm/core/ole/cfb.js +4 -4
  53. package/dist/esm/core/ole/escher-blip.js +1 -1
  54. package/dist/esm/core/opc/index.js +5 -4
  55. package/dist/esm/core/opc/package.js +3 -1
  56. package/dist/esm/core/opc/xml-entities.js +1 -1
  57. package/dist/esm/core/outline.js +1 -1
  58. package/dist/esm/core/png-encode.js +3 -3
  59. package/dist/esm/core/po-helpers.js +1 -1
  60. package/dist/esm/core/spreadsheet-model/types.d.ts +6 -0
  61. package/dist/esm/core/style-cascade/index.js +4 -3
  62. package/dist/esm/core/tiff.js +3 -1
  63. package/dist/esm/excel/activex-parser.js +1 -1
  64. package/dist/esm/excel/conditional-format.js +7 -7
  65. package/dist/esm/excel/formula/functions.js +8 -4
  66. package/dist/esm/excel/formula/index.js +3 -3
  67. package/dist/esm/excel/formula/lexer.js +2 -2
  68. package/dist/esm/excel/formula/parser.js +4 -3
  69. package/dist/esm/excel/formula/value.js +1 -1
  70. package/dist/esm/excel/index.js +7 -6
  71. package/dist/esm/excel/print-model.js +4 -4
  72. package/dist/esm/excel/printer-settings.js +6 -7
  73. package/dist/esm/excel/rich-value.js +1 -1
  74. package/dist/esm/excel/sheet-shape-parser.js +4 -2
  75. package/dist/esm/excel/sheet-to-flow.js +13 -11
  76. package/dist/esm/excel/styles-parser.js +5 -3
  77. package/dist/esm/excel/tint.js +5 -5
  78. package/dist/esm/excel/vml-drawing.js +2 -2
  79. package/dist/esm/excel/worksheet-parser.js +5 -5
  80. package/dist/esm/excel/xls/biff-chart.js +1 -3
  81. package/dist/esm/excel/xls/biff-reader.js +10 -11
  82. package/dist/esm/excel/xls/xls-reader.js +1 -1
  83. package/dist/esm/excel/xlsx-reader.js +17 -4
  84. package/dist/esm/excel/xlsx-to-pdf.js +1 -1
  85. package/dist/esm/excel/xlsx-writer.js +2 -2
  86. package/dist/esm/html/html-writer.js +18 -10
  87. package/dist/esm/layout/line-paint.js +1 -1
  88. package/dist/esm/layout/math-layout.js +5 -8
  89. package/dist/esm/layout/styled-layout.js +103 -31
  90. package/dist/esm/layout/turned-section.js +2 -2
  91. package/dist/esm/markdown/markdown-writer.js +1 -1
  92. package/dist/esm/pdf/encryption.js +9 -9
  93. package/dist/esm/pdf/icc-profile.js +2 -2
  94. package/dist/esm/pdf/index.js +3 -2
  95. package/dist/esm/pdf/objects.js +7 -0
  96. package/dist/esm/pdf/serialize.js +1 -1
  97. package/dist/esm/pdf/struct-tree.js +3 -1
  98. package/dist/esm/pdf/styled-page-emitter.js +23 -15
  99. package/dist/esm/pdf/styled-page-renderer.js +9 -5
  100. package/dist/esm/pdf-reader/annot-draw.js +3 -3
  101. package/dist/esm/pdf-reader/ccitt.js +2 -1
  102. package/dist/esm/pdf-reader/cff-outline.js +1 -4
  103. package/dist/esm/pdf-reader/content.js +13 -15
  104. package/dist/esm/pdf-reader/decrypt.js +5 -4
  105. package/dist/esm/pdf-reader/document.js +6 -2
  106. package/dist/esm/pdf-reader/encodings.js +1 -1
  107. package/dist/esm/pdf-reader/flow-build.js +4 -6
  108. package/dist/esm/pdf-reader/font.js +3 -3
  109. package/dist/esm/pdf-reader/function.js +8 -7
  110. package/dist/esm/pdf-reader/icc.js +1 -1
  111. package/dist/esm/pdf-reader/images.js +1 -1
  112. package/dist/esm/pdf-reader/jbig2.js +36 -38
  113. package/dist/esm/pdf-reader/jpeg.js +14 -13
  114. package/dist/esm/pdf-reader/layout.js +12 -9
  115. package/dist/esm/pdf-reader/lexer.js +2 -1
  116. package/dist/esm/pdf-reader/math-rows.js +2 -2
  117. package/dist/esm/pdf-reader/optional-content.js +1 -1
  118. package/dist/esm/pdf-reader/page-numbers.js +1 -1
  119. package/dist/esm/pdf-reader/pattern-tint.js +1 -2
  120. package/dist/esm/pdf-reader/reader.js +2 -2
  121. package/dist/esm/pdf-reader/struct-tree.js +1 -1
  122. package/dist/esm/pdf-reader/tagged.js +3 -2
  123. package/dist/esm/pdf-reader/text.js +2 -2
  124. package/dist/esm/pdf-reader/type1-outline.js +1 -3
  125. package/dist/esm/pptx/embedded-fonts.js +3 -5
  126. package/dist/esm/pptx/placeholder-cascade.js +1 -1
  127. package/dist/esm/pptx/ppt/ppt-reader.js +5 -4
  128. package/dist/esm/pptx/ppt/ppt-text.js +9 -10
  129. package/dist/esm/pptx/pptx-reader.js +6 -5
  130. package/dist/esm/pptx/preset-table-styles.js +1 -1
  131. package/dist/esm/pptx/slide-parser.js +6 -4
  132. package/dist/esm/pptx/sp-helpers.js +1 -1
  133. package/dist/esm/pptx/table-style.js +2 -1
  134. package/dist/esm/svg/svg-writer.js +1 -1
  135. package/dist/esm/word/doc/doc-reader.js +2 -2
  136. package/dist/esm/word/doc/doc-text.js +20 -22
  137. package/dist/esm/word/document-parser.js +26 -21
  138. package/dist/esm/word/docx-reader.js +2 -2
  139. package/dist/esm/word/docx-to-pdf.js +3 -3
  140. package/dist/esm/word/docx-writer.js +10 -6
  141. package/dist/esm/word/drawing-parser.js +18 -18
  142. package/dist/esm/word/font-table.js +1 -1
  143. package/dist/esm/word/index.js +6 -5
  144. package/dist/esm/word/numbering-parser.js +4 -3
  145. package/dist/esm/word/omml-parser.js +1 -1
  146. package/dist/esm/word/paragraph-properties.js +11 -10
  147. package/dist/esm/word/run-properties.js +4 -4
  148. package/dist/esm/word/settings-parser.js +2 -1
  149. package/dist/esm/word/shading.js +1 -1
  150. package/dist/esm/word/styles-parser.js +5 -4
  151. package/dist/esm/word/table-parser.js +4 -4
  152. package/dist/esm/word/theme-fonts.js +1 -1
  153. package/package.json +8 -2
@@ -1,6 +1,6 @@
1
1
  import { INDEXED_COLORS } from "./indexed-colors.js";
2
2
  //#region src/core/number-format.ts
3
- var BUILTIN = new Map([
3
+ var BUILTIN = /* @__PURE__ */ new Map([
4
4
  [0, "General"],
5
5
  [1, "0"],
6
6
  [2, "0.00"],
@@ -22,7 +22,7 @@ var BUILTIN = new Map([
22
22
  [48, "##0.0E+0"],
23
23
  [49, "@"]
24
24
  ]);
25
- var BUILTIN_DATE_FORMATS = new Map([
25
+ var BUILTIN_DATE_FORMATS = /* @__PURE__ */ new Map([
26
26
  [14, "m/d/yyyy"],
27
27
  [15, "d-mmm-yy"],
28
28
  [16, "d-mmm"],
@@ -85,7 +85,7 @@ function numberFormatColorHex(rawValue, numFmtId, customFormats) {
85
85
  if (idx < 0) return void 0;
86
86
  return colorOfSection(sections[idx] ?? sections[0]);
87
87
  }
88
- var FORMAT_COLORS = new Map([
88
+ var FORMAT_COLORS = /* @__PURE__ */ new Map([
89
89
  ["black", "000000"],
90
90
  ["blue", "0000FF"],
91
91
  ["cyan", "00FFFF"],
@@ -463,9 +463,7 @@ function formatExcelDate(rawValue, format, date1904) {
463
463
  case "s":
464
464
  out += t.text.length >= 2 ? pad2(second) : String(second);
465
465
  break;
466
- case "ampm":
467
- out += ampmLabel(t.text);
468
- break;
466
+ case "ampm": out += ampmLabel(t.text);
469
467
  }
470
468
  return out;
471
469
  }
@@ -1,2 +1,3 @@
1
- import "./state.js";
2
- import "./apply.js";
1
+ import { formatCounter } from "./state.js";
2
+ import { applyNumbering, applyNumberingToHeadersFooters } from "./apply.js";
3
+ export { applyNumbering, applyNumberingToHeadersFooters, formatCounter };
@@ -13,7 +13,7 @@ var ENDOFCHAIN = 4294967294;
13
13
  var FREESECT = 4294967295;
14
14
  var HEADER_SIZE = 512;
15
15
  var DIR_ENTRY_SIZE = 128;
16
- var MAX_TOTAL_BYTES = 512 * 1024 * 1024;
16
+ var MAX_TOTAL_BYTES = 536870912;
17
17
  /** Error thrown for a malformed or unsupported compound file. */
18
18
  var CfbError = class extends Error {};
19
19
  /**
@@ -134,7 +134,7 @@ function openCfb(bytes) {
134
134
  const ensureMini = () => {
135
135
  if (miniStream && miniFat) return;
136
136
  miniStream = readChainBytes(root.startSector, MAX_TOTAL_BYTES).subarray(0, root.size);
137
- const mfBytes = firstMiniFatSector === ENDOFCHAIN ? new Uint8Array(0) : readChainBytes(firstMiniFatSector, MAX_TOTAL_BYTES);
137
+ const mfBytes = firstMiniFatSector === ENDOFCHAIN ? /* @__PURE__ */ new Uint8Array(0) : readChainBytes(firstMiniFatSector, MAX_TOTAL_BYTES);
138
138
  const mfView = new DataView(mfBytes.buffer, mfBytes.byteOffset, mfBytes.byteLength);
139
139
  miniFat = new Uint32Array(Math.floor(mfBytes.length / 4));
140
140
  for (let i = 0; i < miniFat.length; i++) miniFat[i] = mfView.getUint32(i * 4, true);
@@ -159,7 +159,7 @@ function openCfb(bytes) {
159
159
  return out;
160
160
  };
161
161
  const readEntry = (entry) => {
162
- if (entry.size === 0) return new Uint8Array(0);
162
+ if (entry.size === 0) return /* @__PURE__ */ new Uint8Array(0);
163
163
  if (entry.size > MAX_TOTAL_BYTES) throw new CfbError("stream exceeds size limit");
164
164
  if (entry.size >= miniCutoff) return readChainBytes(entry.startSector, MAX_TOTAL_BYTES).subarray(0, entry.size);
165
165
  return readMiniStream(entry);
@@ -201,4 +201,4 @@ function decodeName(dir, base, nameLen) {
201
201
  return out;
202
202
  }
203
203
  //#endregion
204
- export { isCfb, openCfb };
204
+ export { CfbError, isCfb, openCfb };
@@ -11,7 +11,7 @@ var BLIP_TIFF = 61481;
11
11
  var BLIP_JPEG_CMYK = 61482;
12
12
  var METAFILE_HEADER_BYTES = 34;
13
13
  var COMPRESSION_DEFLATE = 0;
14
- var TWO_UID_INSTANCES = new Set([
14
+ var TWO_UID_INSTANCES = /* @__PURE__ */ new Set([
15
15
  981,
16
16
  535,
17
17
  1347,
@@ -1,4 +1,5 @@
1
- import "./relationship-types.js";
2
- import "./package.js";
3
- import "./core-properties.js";
4
- import "./opc-writer.js";
1
+ import { isOoxmlRel } from "./relationship-types.js";
2
+ import { OpcPackage } from "./package.js";
3
+ import { parseCoreProperties } from "./core-properties.js";
4
+ import { buildOpcPackage } from "./opc-writer.js";
5
+ export { OpcPackage, buildOpcPackage, isOoxmlRel, parseCoreProperties };
@@ -3,13 +3,15 @@ import { isOoxmlRel } from "./relationship-types.js";
3
3
  import { unzipSync } from "fflate";
4
4
  //#region src/core/opc/package.ts
5
5
  var ROOT_RELS_PATH = "_rels/.rels";
6
- var MIB = 1024 * 1024;
6
+ var MIB = 1048576;
7
7
  /**
8
8
  * An opened OPC package (ECMA-376 Part 2): a ZIP archive's parts plus its
9
9
  * package-level relationships, with helpers to look up parts, resolve part
10
10
  * relationships, and find the main document part.
11
11
  */
12
12
  var OpcPackage = class OpcPackage {
13
+ parts;
14
+ rootRelationships;
13
15
  /**
14
16
  * @param parts The package parts keyed by ZIP-convention path (no leading slash).
15
17
  * @param rootRelationships The package-level relationships from `_rels/.rels`.
@@ -7,7 +7,7 @@ var DOCTYPE = /<!DOCTYPE\s[^[>]*(?:\[[\s\S]*?\]\s*)?>/y;
7
7
  var ENTITY_DECL = /<!ENTITY\s+([^\s%<>&;]+)\s+(?:"([^"]*)"|'([^']*)')\s*>/g;
8
8
  var REFERENCE = /&([^\s;&<>]+);/g;
9
9
  /** The five entities XML predefines; a declaration never overrides them. */
10
- var PREDEFINED = new Set([
10
+ var PREDEFINED = /* @__PURE__ */ new Set([
11
11
  "lt",
12
12
  "gt",
13
13
  "amp",
@@ -27,4 +27,4 @@ function headingLevelFromStyleId(styleId) {
27
27
  if (/^(Title|Subtitle)$/i.test(styleId)) return 1;
28
28
  }
29
29
  //#endregion
30
- export { headingLevelOf };
30
+ export { headingLevelFromStyleId, headingLevelOf };
@@ -39,7 +39,7 @@ function encodePng(width, height, color, samples) {
39
39
  raw.set(samples.subarray(y * stride, y * stride + stride), dst + 1);
40
40
  }
41
41
  const idat = zlibSync(raw);
42
- const ihdr = new Uint8Array(13);
42
+ const ihdr = /* @__PURE__ */ new Uint8Array(13);
43
43
  writeU32(ihdr, 0, width);
44
44
  writeU32(ihdr, 4, height);
45
45
  ihdr[8] = 8;
@@ -51,7 +51,7 @@ function encodePng(width, height, color, samples) {
51
51
  SIGNATURE,
52
52
  chunk("IHDR", ihdr),
53
53
  chunk("IDAT", idat),
54
- chunk("IEND", new Uint8Array(0))
54
+ chunk("IEND", /* @__PURE__ */ new Uint8Array(0))
55
55
  ]);
56
56
  }
57
57
  function chunk(type, data) {
@@ -91,7 +91,7 @@ function concat(parts) {
91
91
  var crcTable;
92
92
  function crc32(bytes) {
93
93
  if (!crcTable) {
94
- crcTable = new Uint32Array(256);
94
+ crcTable = /* @__PURE__ */ new Uint32Array(256);
95
95
  for (let n = 0; n < 256; n++) {
96
96
  let c = n;
97
97
  for (let k = 0; k < 8; k++) c = c & 1 ? 3988292384 ^ c >>> 1 : c >>> 1;
@@ -68,7 +68,7 @@ function poIntAttr(node, name) {
68
68
  if (Number.isFinite(n)) return n;
69
69
  return universalMeasureTwips(v);
70
70
  }
71
- var MEASURE_TWIPS = new Map([
71
+ var MEASURE_TWIPS = /* @__PURE__ */ new Map([
72
72
  ["pt", 20],
73
73
  ["pc", 240],
74
74
  ["pi", 240],
@@ -380,6 +380,12 @@ export interface XlsxFont {
380
380
  */
381
381
  readonly colorRef?: string;
382
382
  readonly name?: string;
383
+ /**
384
+ * §18.8.35 `<scheme>` — the theme font this font stands for, whatever its
385
+ * `name` says. Excel draws such a font in the theme's: a workbook without a
386
+ * theme part writes Calibri this way and is set in Office 2023's Aptos Narrow.
387
+ */
388
+ readonly scheme?: 'major' | 'minor';
383
389
  }
384
390
  /** §18.8.20 `<fill>` — one fill record: pattern type plus foreground/background colours. */
385
391
  export interface XlsxFill {
@@ -1,3 +1,4 @@
1
- import "./types.js";
2
- import "./resolver.js";
3
- import "./table.js";
1
+ import { DEFAULT_RESOLVED_PARAGRAPH, DEFAULT_RESOLVED_RUN } from "./types.js";
2
+ import { EMPTY_STYLE_SHEET, resolveBodyStyles, resolveHeadersFootersStyles, resolveParagraphProperties, resolveRunProperties } from "./resolver.js";
3
+ import { resolveTableStyles } from "./table.js";
4
+ export { DEFAULT_RESOLVED_PARAGRAPH, DEFAULT_RESOLVED_RUN, EMPTY_STYLE_SHEET, resolveBodyStyles, resolveHeadersFootersStyles, resolveParagraphProperties, resolveRunProperties, resolveTableStyles };
@@ -91,7 +91,7 @@ function decodeTiff(bytes) {
91
91
  extra: list(ifd, TAG.extraSamples, [])
92
92
  });
93
93
  }
94
- var TYPE_SIZE = new Map([
94
+ var TYPE_SIZE = /* @__PURE__ */ new Map([
95
95
  [1, 1],
96
96
  [2, 1],
97
97
  [3, 2],
@@ -106,6 +106,8 @@ var TYPE_SIZE = new Map([
106
106
  [12, 8]
107
107
  ]);
108
108
  var Reader = class {
109
+ b;
110
+ le;
109
111
  constructor(b, le) {
110
112
  this.b = b;
111
113
  this.le = le;
@@ -63,7 +63,7 @@ function strAttr(obj, key) {
63
63
  const v = obj[`@_${key}`];
64
64
  return typeof v === "string" ? v : void 0;
65
65
  }
66
- var ACTIVEX_CLASS_TYPES = new Map([["8BD21D40-EC42-11CE-9E0D-00AA006002F3", "checkbox"], ["8BD21D50-EC42-11CE-9E0D-00AA006002F3", "option"]]);
66
+ var ACTIVEX_CLASS_TYPES = /* @__PURE__ */ new Map([["8BD21D40-EC42-11CE-9E0D-00AA006002F3", "checkbox"], ["8BD21D50-EC42-11CE-9E0D-00AA006002F3", "option"]]);
67
67
  /**
68
68
  * The affordance key for an `<ax:ocx ax:classid>`, for controls reached through
69
69
  * §18.3.1.19 `<control>` rather than `<oleObject progId>` — the `<control>`
@@ -152,17 +152,16 @@ function buildConditionalFormatter(conditionalFormats, styles, cells, resolveTex
152
152
  break;
153
153
  case "expression":
154
154
  if (!textClaimed && compiled && ctx && origin) {
155
- if (evaluateToBool(compiled, ctx, {
155
+ const shift = {
156
156
  dRow: row - origin.row,
157
157
  dCol: col - origin.col,
158
158
  curRow: row,
159
159
  curCol: col
160
- })) claim(rule);
160
+ };
161
+ if (evaluateToBool(compiled, ctx, shift)) claim(rule);
161
162
  }
162
163
  break;
163
- case "timePeriod":
164
- if (!textClaimed && value !== void 0 && nowSerial !== void 0 && timePeriodMatches(rule.timePeriod, value, nowSerial, date1904)) claim(rule);
165
- break;
164
+ case "timePeriod": if (!textClaimed && value !== void 0 && nowSerial !== void 0 && timePeriodMatches(rule.timePeriod, value, nowSerial, date1904)) claim(rule);
166
165
  }
167
166
  }
168
167
  if (!bar && !icon) return textFmt;
@@ -248,7 +247,8 @@ function buildEvalContext(cells, resolveText, nowSerial, date1904, cross) {
248
247
  const key = rawName.toLowerCase();
249
248
  const dn = nameMap.get(key);
250
249
  if (!dn || resolving.has(key)) return void 0;
251
- const compiled = compileFormula(dn.value.startsWith("=") ? dn.value.slice(1) : dn.value);
250
+ const value = dn.value.startsWith("=") ? dn.value.slice(1) : dn.value;
251
+ const compiled = compileFormula(value);
252
252
  if (!compiled) return void 0;
253
253
  const ast = compiled.ast;
254
254
  if (ast.k === "num") return num(ast.v);
@@ -278,7 +278,7 @@ function cellToScalar(cell, resolveText) {
278
278
  default: return cell.rawValue.length > 0 ? str(cell.rawValue) : BLANK;
279
279
  }
280
280
  }
281
- var FERRS = new Set([
281
+ var FERRS = /* @__PURE__ */ new Set([
282
282
  "#NULL!",
283
283
  "#DIV/0!",
284
284
  "#VALUE!",
@@ -463,7 +463,8 @@ function edate(args, ev, ctx, endOfMonth) {
463
463
  const ty = Math.floor(idx / 12);
464
464
  const tm = idx % 12 + 1;
465
465
  const dim = daysInMonth(ty, tm);
466
- const serial = serialFromYmd(ty, tm, endOfMonth ? dim : Math.min(p.day, dim), ctx.date1904);
466
+ const day = endOfMonth ? dim : Math.min(p.day, dim);
467
+ const serial = serialFromYmd(ty, tm, day, ctx.date1904);
467
468
  return serial < 0 ? err("#NUM!") : num(serial);
468
469
  }
469
470
  function daysInMonth(year, month1) {
@@ -762,7 +763,8 @@ function largeSmall(args, ev, ctx, large) {
762
763
  if (typeof k !== "number") return err(k.e);
763
764
  const ki = Math.trunc(k);
764
765
  if (ki < 1 || ki > ns.length) return err("#NUM!");
765
- return num([...ns].sort((a, b) => large ? b - a : a - b)[ki - 1]);
766
+ const s = [...ns].sort((a, b) => large ? b - a : a - b);
767
+ return num(s[ki - 1]);
766
768
  }
767
769
  function countBlank(args, ev, ctx) {
768
770
  if (args.length !== 1) return err("#VALUE!");
@@ -1042,7 +1044,8 @@ function timeFn(args, ev, ctx) {
1042
1044
  if (typeof m !== "number") return err(m.e);
1043
1045
  const s = numArg(args, ev, ctx, 2);
1044
1046
  if (typeof s !== "number") return err(s.e);
1045
- return num(((Math.trunc(h) * 3600 + Math.trunc(m) * 60 + Math.trunc(s)) % 86400 + 86400) % 86400 / 86400);
1047
+ const total = Math.trunc(h) * 3600 + Math.trunc(m) * 60 + Math.trunc(s);
1048
+ return num((total % 86400 + 86400) % 86400 / 86400);
1046
1049
  }
1047
1050
  function weekStartDow(type) {
1048
1051
  switch (type) {
@@ -1074,7 +1077,8 @@ function weekNum(args, ev, ctx, iso) {
1074
1077
  if (type === 21) return num(isoWeek(serial, ctx.date1904));
1075
1078
  const firstDow = weekStartDow(type);
1076
1079
  if (firstDow === void 0) return err("#NUM!");
1077
- const jan1 = serialFromYmd(serialToParts(serial, ctx.date1904).year, 1, 1, ctx.date1904);
1080
+ const parts = serialToParts(serial, ctx.date1904);
1081
+ const jan1 = serialFromYmd(parts.year, 1, 1, ctx.date1904);
1078
1082
  const offset = (serialToParts(jan1, ctx.date1904).dow - firstDow + 7) % 7;
1079
1083
  const dayOfYear = serial - jan1 + 1;
1080
1084
  return num(Math.floor((dayOfYear + offset - 1) / 7) + 1);
@@ -1,6 +1,6 @@
1
1
  import { parse } from "./parser.js";
2
- import "./dates.js";
3
- import { toBool } from "./value.js";
2
+ import { serialFromDate, timePeriodMatches } from "./dates.js";
3
+ import { BLANK, bool, err, num, str, toBool, toNumber } from "./value.js";
4
4
  import { NO_SHIFT, evaluate } from "./eval.js";
5
5
  //#region src/excel/formula/index.ts
6
6
  /**
@@ -30,4 +30,4 @@ function evaluateToBool(compiled, ctx, shift = NO_SHIFT) {
30
30
  return toBool(evaluate(compiled.ast, ctx, shift), ctx) === true;
31
31
  }
32
32
  //#endregion
33
- export { compileFormula, evaluateToBool };
33
+ export { BLANK, NO_SHIFT, bool, compileFormula, err, evaluate, evaluateToBool, num, serialFromDate, str, timePeriodMatches, toNumber };
@@ -1,6 +1,6 @@
1
1
  //#region src/excel/formula/lexer.ts
2
2
  var MAX_SOURCE = 8192;
3
- var KNOWN_ERRORS = new Set([
3
+ var KNOWN_ERRORS = /* @__PURE__ */ new Set([
4
4
  "#NULL!",
5
5
  "#DIV/0!",
6
6
  "#VALUE!",
@@ -211,4 +211,4 @@ function tokenize(src) {
211
211
  return out;
212
212
  }
213
213
  //#endregion
214
- export { tokenize };
214
+ export { LexError, tokenize };
@@ -16,7 +16,7 @@ var PREC = {
16
16
  "/": 4,
17
17
  "^": 5
18
18
  };
19
- var RIGHT_ASSOC = new Set(["^"]);
19
+ var RIGHT_ASSOC = /* @__PURE__ */ new Set(["^"]);
20
20
  var MAX_DEPTH = 64;
21
21
  var MAX_ARGS = 255;
22
22
  var CELL_RE = /^(\$?)([A-Za-z]{1,3})(\$?)([0-9]{1,7})$/;
@@ -39,6 +39,7 @@ function parse(src) {
39
39
  }
40
40
  /** A precedence-climbing (Pratt) parser over a {@link tokenize} token stream. */
41
41
  var Parser = class {
42
+ toks;
42
43
  pos = 0;
43
44
  depth = 0;
44
45
  /** @param toks The token stream to parse (must end with an `eof` token). */
@@ -327,7 +328,7 @@ function columnToIndex(letters) {
327
328
  for (let i = 0; i < up.length; i++) idx = idx * 26 + (up.charCodeAt(i) - 64);
328
329
  return idx - 1;
329
330
  }
330
- var AREAS = new Map([
331
+ var AREAS = /* @__PURE__ */ new Map([
331
332
  ["#all", "#All"],
332
333
  ["#data", "#Data"],
333
334
  ["#headers", "#Headers"],
@@ -419,4 +420,4 @@ function unescapeName(name) {
419
420
  return name.trim().replace(/'(.)/g, "$1");
420
421
  }
421
422
  //#endregion
422
- export { parse };
423
+ export { ParseError, parse, parseStructuredRef };
@@ -129,4 +129,4 @@ function numToText(n) {
129
129
  return String(n);
130
130
  }
131
131
  //#endregion
132
- export { BLANK, arrEach, bool, deref, err, isErr, num, refEach, refGet, str, toBool, toNumber, toText };
132
+ export { BLANK, FALSE, TRUE, arrEach, bool, deref, err, isErr, num, refEach, refGet, str, toBool, toNumber, toText };
@@ -1,7 +1,8 @@
1
- import "../core/number-format.js";
1
+ import { applyNumberFormat, generalToWidth, numberFormatColorHex } from "../core/number-format.js";
2
2
  import "./cell-reference.js";
3
- import "./defined-name-ref.js";
4
- import "./shared-strings-parser.js";
5
- import "./workbook-parser.js";
6
- import "./styles-parser.js";
7
- import "./worksheet-parser.js";
3
+ import { parseAreaRef, parseTitleRowRange } from "./defined-name-ref.js";
4
+ import { parseSharedStrings } from "./shared-strings-parser.js";
5
+ import { parseWorkbook } from "./workbook-parser.js";
6
+ import { EMPTY_XLSX_STYLES, parseXlsxStyles } from "./styles-parser.js";
7
+ import { parseWorksheet } from "./worksheet-parser.js";
8
+ export { EMPTY_XLSX_STYLES, applyNumberFormat, generalToWidth, numberFormatColorHex, parseAreaRef, parseSharedStrings, parseTitleRowRange, parseWorkbook, parseWorksheet, parseXlsxStyles };
@@ -233,7 +233,7 @@ var EXCEL_DEFAULT_ROW_HEIGHT_PT = 15;
233
233
  * and every one of its rows is 12.75pt: tdf100709.xlsx fits twenty of them on
234
234
  * the page where our 15pt fitted fourteen and pushed the rest onto a second.
235
235
  */
236
- var EXCEL_ROW_HEIGHT_BY_FONT_PT = new Map([
236
+ var EXCEL_ROW_HEIGHT_BY_FONT_PT = /* @__PURE__ */ new Map([
237
237
  [8, 11],
238
238
  [9, 12],
239
239
  [10, 12.75],
@@ -257,7 +257,7 @@ function defaultRowHeightPtFor(fontPt) {
257
257
  }
258
258
  var TWIPS_PER_POINT = 20;
259
259
  var TWIPS_PER_INCH = 1440;
260
- var PAPER_SIZES_TWIPS = new Map([
260
+ var PAPER_SIZES_TWIPS = /* @__PURE__ */ new Map([
261
261
  [1, [12240, 15840]],
262
262
  [3, [15840, 24480]],
263
263
  [5, [12240, 20160]],
@@ -886,7 +886,7 @@ function gridBody(worksheet, sharedStrings, styles, date1904, print) {
886
886
  if (over) {
887
887
  if (over.fillHex) shading = { colorHex: over.fillHex };
888
888
  if (over.dataBar) dataBar = over.dataBar;
889
- if (over.numberFormat !== void 0 && ws.type === "n" && ws.rawValue.length > 0) text = applyNumberFormat(ws.rawValue, CF_NUMBER_FORMAT_ID, new Map([[CF_NUMBER_FORMAT_ID, over.numberFormat]]), date1904);
889
+ if (over.numberFormat !== void 0 && ws.type === "n" && ws.rawValue.length > 0) text = applyNumberFormat(ws.rawValue, CF_NUMBER_FORMAT_ID, /* @__PURE__ */ new Map([[CF_NUMBER_FORMAT_ID, over.numberFormat]]), date1904);
890
890
  if (over.hideValue) text = "";
891
891
  if (over.icon) icon = over.icon;
892
892
  if (over.border) borders = {
@@ -2258,4 +2258,4 @@ function slicerParagraph(text, runProps) {
2258
2258
  };
2259
2259
  }
2260
2260
  //#endregion
2261
- export { cellPaintsVisibly, columnTwips, columnUnitTwips, defaultColumnTwips, noteKey, printableHeightPt, printableWidthPt, resolveCellText, resolvePrintArea, resolvePrintTitleRows, sectionFromWorksheet, slicerTable, worksheetToBody };
2261
+ export { cellPaintsSomething, cellPaintsVisibly, columnTwips, columnUnitTwips, defaultColumnTwips, defaultRowHeightPtFor, noteKey, printableHeightPt, printableWidthPt, resolveCellText, resolvePrintArea, resolvePrintTitleRows, sectionFromWorksheet, slicerTable, worksheetToBody };
@@ -1,8 +1,7 @@
1
1
  //#region src/excel/printer-settings.ts
2
- var DEVICE_NAME_BYTES = 64;
3
- var OFFSET_SIZE = DEVICE_NAME_BYTES + 4;
4
- var OFFSET_ORIENTATION = DEVICE_NAME_BYTES + 12;
5
- var OFFSET_PAPER_SIZE = DEVICE_NAME_BYTES + 14;
2
+ var OFFSET_SIZE = 68;
3
+ var OFFSET_ORIENTATION = 76;
4
+ var OFFSET_PAPER_SIZE = 78;
6
5
  var DM_ORIENTATION = 1;
7
6
  var DM_PAPERSIZE = 2;
8
7
  /**
@@ -15,11 +14,11 @@ var DM_PAPERSIZE = 2;
15
14
  * @param data The raw part bytes.
16
15
  */
17
16
  function parsePrinterSettings(data) {
18
- if (data.byteLength < OFFSET_PAPER_SIZE + 2) return {};
17
+ if (data.byteLength < 80) return {};
19
18
  const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
20
19
  const dmSize = view.getUint16(OFFSET_SIZE, true);
21
- if (dmSize < OFFSET_PAPER_SIZE + 2 || dmSize > data.byteLength) return {};
22
- const fields = view.getUint32(DEVICE_NAME_BYTES + 8, true);
20
+ if (dmSize < 80 || dmSize > data.byteLength) return {};
21
+ const fields = view.getUint32(72, true);
23
22
  const out = {};
24
23
  if (fields & DM_PAPERSIZE) {
25
24
  const paper = view.getInt16(OFFSET_PAPER_SIZE, true);
@@ -21,7 +21,7 @@ var RICH_VALUE_TYPE = "XLRICHVALUE";
21
21
  * error is worse than the stand-in the file already provides, so an unmapped
22
22
  * code resolves to nothing.
23
23
  */
24
- var ERROR_TYPES = new Map([[8, "#SPILL!"]]);
24
+ var ERROR_TYPES = /* @__PURE__ */ new Map([[8, "#SPILL!"]]);
25
25
  function nodes(parent, name) {
26
26
  if (typeof parent !== "object" || parent === null) return [];
27
27
  const child = parent[name];
@@ -148,7 +148,8 @@ function parseDiagramFrames(drawingXml, worksheet, colUnitTwips) {
148
148
  if (!ANCHOR_KINDS.some((k) => poIs(anchor, k))) continue;
149
149
  const frame = poChildren(anchor).find((c) => poIs(c, "xdr:graphicFrame"));
150
150
  if (!frame) continue;
151
- if (!poFirstChild(poFirstChild(poFirstChild(frame, "a:graphic"), "a:graphicData"), "dgm:relIds")) continue;
151
+ const data = poFirstChild(poFirstChild(frame, "a:graphic"), "a:graphicData");
152
+ if (!poFirstChild(data, "dgm:relIds")) continue;
152
153
  const box = anchorBox(anchor, colWidthPt, rowHeightPt);
153
154
  if (box) out.push(box);
154
155
  }
@@ -340,9 +341,10 @@ function styleLine(sp, ns, colors, themeLineWidths) {
340
341
  const colorHex = child ? resolveColorNode(child, colors) : void 0;
341
342
  if (colorHex === void 0) return void 0;
342
343
  const idx = Number(poAttr(lnRef, "idx") ?? "");
344
+ const width = Number.isFinite(idx) ? themeLineWidths[idx - 1] : void 0;
343
345
  return {
344
346
  colorHex,
345
- width: pt((Number.isFinite(idx) ? themeLineWidths[idx - 1] : void 0) ?? .75)
347
+ width: pt(width ?? .75)
346
348
  };
347
349
  }
348
350
  /**
@@ -193,21 +193,23 @@ function projectSheetDoc(sheet, options = {}) {
193
193
  table: slicerTable(slicer)
194
194
  });
195
195
  const listComments = !screen && ws.grid.pageSetup?.cellComments === "atEnd";
196
- if (ws.comments && ws.comments.length > 0) if (listComments) body.push(...commentBlocks(ws.comments));
197
- else if (!notesShown) options.losses?.push({
198
- severity: "dropped",
199
- feature: "comments",
200
- detail: `${ws.comments.length} cell note(s) not printed — <pageSetup cellComments> is "${ws.grid.pageSetup?.cellComments ?? "none"}"`,
201
- where: `sheet "${ws.name}"`
202
- });
203
- else {
204
- const hidden = ws.comments.filter((c) => c.shown === void 0).length;
205
- if (hidden > 0) options.losses?.push({
196
+ if (ws.comments && ws.comments.length > 0) {
197
+ if (listComments) body.push(...commentBlocks(ws.comments));
198
+ else if (!notesShown) options.losses?.push({
206
199
  severity: "dropped",
207
200
  feature: "comments",
208
- detail: screen ? `${hidden} cell note(s) not shown — a hidden note shows only while its cell is pointed at` : `${hidden} cell note(s) not printed — "asDisplayed" prints the notes the sheet shows`,
201
+ detail: `${ws.comments.length} cell note(s) not printed — <pageSetup cellComments> is "${ws.grid.pageSetup?.cellComments ?? "none"}"`,
209
202
  where: `sheet "${ws.name}"`
210
203
  });
204
+ else {
205
+ const hidden = ws.comments.filter((c) => c.shown === void 0).length;
206
+ if (hidden > 0) options.losses?.push({
207
+ severity: "dropped",
208
+ feature: "comments",
209
+ detail: screen ? `${hidden} cell note(s) not shown — a hidden note shows only while its cell is pointed at` : `${hidden} cell note(s) not printed — "asDisplayed" prints the notes the sheet shows`,
210
+ where: `sheet "${ws.name}"`
211
+ });
212
+ }
211
213
  }
212
214
  if (ws.formControls && ws.formControls.length > 0) body.push(...formControlBlocks(ws.formControls));
213
215
  if (ws.activeXControls && ws.activeXControls.length > 0) body.push(...activeXBlocks(ws.activeXControls));
@@ -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",