ooxml-core 1.2.0 → 1.3.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 (206) hide show
  1. package/dist/{PptxHandler-SJTINPU4.mjs → PptxHandler-ZPJNHEZZ.mjs} +2 -2
  2. package/dist/automation/index.cjs +3294 -661
  3. package/dist/automation/index.mjs +3294 -661
  4. package/dist/chart/bar-cluster-geometry.d.ts +6 -0
  5. package/dist/chart/bar-cluster-geometry.d.ts.map +1 -1
  6. package/dist/chart/index.cjs +5 -2
  7. package/dist/chart/index.mjs +5 -3
  8. package/dist/chart/render/chart-spacing.d.ts.map +1 -1
  9. package/dist/{chunk-TEOAOAIF.mjs → chunk-BB55ASTX.mjs} +3 -3
  10. package/dist/{chunk-CQQAPUAG.mjs → chunk-H4TPDZV4.mjs} +11 -9
  11. package/dist/{chunk-VYTA2OUN.mjs → chunk-IVDC75E5.mjs} +1 -1
  12. package/dist/{chunk-FI4RSJ24.mjs → chunk-QPQDLSJQ.mjs} +1 -1
  13. package/dist/{chunk-XCZ7U3GZ.mjs → chunk-XGLKW3JJ.mjs} +13 -9
  14. package/dist/docx/index.cjs +4 -2
  15. package/dist/docx/index.mjs +4 -2
  16. package/dist/docx/layout/index.cjs +4 -2
  17. package/dist/docx/layout/index.mjs +4 -2
  18. package/dist/docx/ui/index.cjs +4 -2
  19. package/dist/docx/ui/index.mjs +4 -2
  20. package/dist/index.cjs +5 -2
  21. package/dist/index.mjs +5 -2
  22. package/dist/pptx/automation/index.cjs +29 -17
  23. package/dist/pptx/automation/index.mjs +5 -5
  24. package/dist/pptx/chunks/index-EZJZ7USt.d.ts.map +1 -1
  25. package/dist/pptx/cli/index.cjs +29 -17
  26. package/dist/pptx/cli/index.mjs +4 -4
  27. package/dist/pptx/converter/index.mjs +2 -2
  28. package/dist/pptx/index.cjs +29 -17
  29. package/dist/pptx/index.mjs +5 -5
  30. package/dist/teams/index.cjs +176 -92
  31. package/dist/teams/index.mjs +176 -92
  32. package/dist/visio/clipboard-resources.d.ts +11 -0
  33. package/dist/visio/clipboard-resources.d.ts.map +1 -0
  34. package/dist/visio/clipboard-types.d.ts +26 -0
  35. package/dist/visio/clipboard-types.d.ts.map +1 -0
  36. package/dist/visio/clipboard-xml.d.ts +8 -0
  37. package/dist/visio/clipboard-xml.d.ts.map +1 -0
  38. package/dist/visio/clipboard.d.ts +7 -0
  39. package/dist/visio/clipboard.d.ts.map +1 -0
  40. package/dist/visio/create-document.d.ts +8 -0
  41. package/dist/visio/create-document.d.ts.map +1 -0
  42. package/dist/visio/edit-commands.d.ts +19 -2
  43. package/dist/visio/edit-commands.d.ts.map +1 -1
  44. package/dist/visio/edit-delete.d.ts +9 -0
  45. package/dist/visio/edit-delete.d.ts.map +1 -0
  46. package/dist/visio/edit-duplicate-commands.d.ts +14 -0
  47. package/dist/visio/edit-duplicate-commands.d.ts.map +1 -0
  48. package/dist/visio/edit-duplicate-scope.d.ts +4 -0
  49. package/dist/visio/edit-duplicate-scope.d.ts.map +1 -0
  50. package/dist/visio/edit-duplicate.d.ts +10 -0
  51. package/dist/visio/edit-duplicate.d.ts.map +1 -0
  52. package/dist/visio/edit-formatting-cell-admission.d.ts +3 -0
  53. package/dist/visio/edit-formatting-cell-admission.d.ts.map +1 -0
  54. package/dist/visio/edit-formatting-commands.d.ts +46 -0
  55. package/dist/visio/edit-formatting-commands.d.ts.map +1 -0
  56. package/dist/visio/edit-formatting-font.d.ts +6 -0
  57. package/dist/visio/edit-formatting-font.d.ts.map +1 -0
  58. package/dist/visio/edit-formatting-paint-scope.d.ts +6 -0
  59. package/dist/visio/edit-formatting-paint-scope.d.ts.map +1 -0
  60. package/dist/visio/edit-formatting-paint.d.ts +6 -0
  61. package/dist/visio/edit-formatting-paint.d.ts.map +1 -0
  62. package/dist/visio/edit-formatting-rows.d.ts +14 -0
  63. package/dist/visio/edit-formatting-rows.d.ts.map +1 -0
  64. package/dist/visio/edit-formatting-scope.d.ts +6 -0
  65. package/dist/visio/edit-formatting-scope.d.ts.map +1 -0
  66. package/dist/visio/edit-formatting-text.d.ts +8 -0
  67. package/dist/visio/edit-formatting-text.d.ts.map +1 -0
  68. package/dist/visio/edit-formatting.d.ts +12 -0
  69. package/dist/visio/edit-formatting.d.ts.map +1 -0
  70. package/dist/visio/edit-geometry.d.ts.map +1 -1
  71. package/dist/visio/edit-paste-commands.d.ts +15 -0
  72. package/dist/visio/edit-paste-commands.d.ts.map +1 -0
  73. package/dist/visio/edit-paste.d.ts +5 -0
  74. package/dist/visio/edit-paste.d.ts.map +1 -0
  75. package/dist/visio/edit-recalculate.d.ts +3 -1
  76. package/dist/visio/edit-recalculate.d.ts.map +1 -1
  77. package/dist/visio/edit-resize-anchor.d.ts +8 -0
  78. package/dist/visio/edit-resize-anchor.d.ts.map +1 -0
  79. package/dist/visio/edit-scope.d.ts.map +1 -1
  80. package/dist/visio/edit-shape-create.d.ts +1 -1
  81. package/dist/visio/edit-shape-create.d.ts.map +1 -1
  82. package/dist/visio/edit-shape-order.d.ts +7 -0
  83. package/dist/visio/edit-shape-order.d.ts.map +1 -0
  84. package/dist/visio/edit-style-admission.d.ts +17 -0
  85. package/dist/visio/edit-style-admission.d.ts.map +1 -0
  86. package/dist/visio/edit-text-scope.d.ts +7 -0
  87. package/dist/visio/edit-text-scope.d.ts.map +1 -0
  88. package/dist/visio/edit-text.d.ts +1 -1
  89. package/dist/visio/edit-text.d.ts.map +1 -1
  90. package/dist/visio/edit.d.ts +1 -1
  91. package/dist/visio/edit.d.ts.map +1 -1
  92. package/dist/visio/index.cjs +3245 -1077
  93. package/dist/visio/index.d.ts +3 -1
  94. package/dist/visio/index.d.ts.map +1 -1
  95. package/dist/visio/index.mjs +3241 -1079
  96. package/dist/visio/line-pattern.d.ts +1 -1
  97. package/dist/visio/line-pattern.d.ts.map +1 -1
  98. package/dist/visio/line-style.d.ts.map +1 -1
  99. package/dist/visio/model.d.ts +23 -3
  100. package/dist/visio/model.d.ts.map +1 -1
  101. package/dist/visio/parser.d.ts.map +1 -1
  102. package/dist/visio/plain-text.d.ts +5 -0
  103. package/dist/visio/plain-text.d.ts.map +1 -0
  104. package/dist/visio/resize-anchor.d.ts +27 -0
  105. package/dist/visio/resize-anchor.d.ts.map +1 -0
  106. package/dist/visio/source-paint.d.ts +5 -0
  107. package/dist/visio/source-paint.d.ts.map +1 -0
  108. package/dist/visio/style.d.ts.map +1 -1
  109. package/dist/visio/theme-root.d.ts.map +1 -1
  110. package/dist/visio/ui/contract.d.ts +10 -6
  111. package/dist/visio/ui/contract.d.ts.map +1 -1
  112. package/dist/visio/ui/draw-plan.d.ts +32 -0
  113. package/dist/visio/ui/draw-plan.d.ts.map +1 -0
  114. package/dist/visio/ui/edit-commands.d.ts.map +1 -1
  115. package/dist/visio/ui/formatting.d.ts +28 -0
  116. package/dist/visio/ui/formatting.d.ts.map +1 -0
  117. package/dist/visio/ui/index.cjs +1305 -15
  118. package/dist/visio/ui/index.d.ts +15 -0
  119. package/dist/visio/ui/index.d.ts.map +1 -1
  120. package/dist/visio/ui/index.mjs +1261 -16
  121. package/dist/visio/ui/line-dash.d.ts +4 -0
  122. package/dist/visio/ui/line-dash.d.ts.map +1 -0
  123. package/dist/visio/ui/marquee.d.ts +15 -0
  124. package/dist/visio/ui/marquee.d.ts.map +1 -0
  125. package/dist/visio/ui/page-edit.d.ts.map +1 -1
  126. package/dist/visio/ui/scene-validation.d.ts.map +1 -1
  127. package/dist/visio/ui/selection.d.ts +12 -0
  128. package/dist/visio/ui/selection.d.ts.map +1 -0
  129. package/dist/visio/ui/shape-arrange.d.ts +17 -0
  130. package/dist/visio/ui/shape-arrange.d.ts.map +1 -0
  131. package/dist/visio/ui/shape-clipboard.d.ts +10 -0
  132. package/dist/visio/ui/shape-clipboard.d.ts.map +1 -0
  133. package/dist/visio/ui/shape-duplicate.d.ts +5 -0
  134. package/dist/visio/ui/shape-duplicate.d.ts.map +1 -0
  135. package/dist/visio/ui/shape-formatting.d.ts +14 -0
  136. package/dist/visio/ui/shape-formatting.d.ts.map +1 -0
  137. package/dist/visio/ui/shape-move.d.ts +14 -0
  138. package/dist/visio/ui/shape-move.d.ts.map +1 -0
  139. package/dist/visio/ui/shape-order.d.ts +4 -0
  140. package/dist/visio/ui/shape-order.d.ts.map +1 -0
  141. package/dist/visio/ui/shape-resize.d.ts +61 -0
  142. package/dist/visio/ui/shape-resize.d.ts.map +1 -0
  143. package/dist/visio/ui/size-position.d.ts +19 -0
  144. package/dist/visio/ui/size-position.d.ts.map +1 -0
  145. package/dist/visio/ui/snapshot-scene.d.ts.map +1 -1
  146. package/dist/visio/ui/svg-stroke.d.ts +8 -0
  147. package/dist/visio/ui/svg-stroke.d.ts.map +1 -0
  148. package/dist/visio/ui/text-replace-selection.d.ts +9 -0
  149. package/dist/visio/ui/text-replace-selection.d.ts.map +1 -0
  150. package/dist/visio/ui/text-replace-snapshot.d.ts +14 -0
  151. package/dist/visio/ui/text-replace-snapshot.d.ts.map +1 -0
  152. package/dist/visio/ui/text-replace-types.d.ts +48 -0
  153. package/dist/visio/ui/text-replace-types.d.ts.map +1 -0
  154. package/dist/visio/ui/text-replace.d.ts +18 -0
  155. package/dist/visio/ui/text-replace.d.ts.map +1 -0
  156. package/dist/xlsx/edit/context.d.ts +3 -1
  157. package/dist/xlsx/edit/context.d.ts.map +1 -1
  158. package/dist/xlsx/edit/history.d.ts +18 -0
  159. package/dist/xlsx/edit/history.d.ts.map +1 -1
  160. package/dist/xlsx/edit/session-calc.d.ts +30 -8
  161. package/dist/xlsx/edit/session-calc.d.ts.map +1 -1
  162. package/dist/xlsx/edit/session.d.ts.map +1 -1
  163. package/dist/xlsx/edit/sheets.d.ts.map +1 -1
  164. package/dist/xlsx/edit/types.d.ts +23 -3
  165. package/dist/xlsx/edit/types.d.ts.map +1 -1
  166. package/dist/xlsx/formula/engine-core.d.ts.map +1 -1
  167. package/dist/xlsx/formula/engine-host.d.ts +6 -2
  168. package/dist/xlsx/formula/engine-host.d.ts.map +1 -1
  169. package/dist/xlsx/formula/engine-prepare.d.ts +33 -0
  170. package/dist/xlsx/formula/engine-prepare.d.ts.map +1 -0
  171. package/dist/xlsx/formula/engine-structure.d.ts +40 -0
  172. package/dist/xlsx/formula/engine-structure.d.ts.map +1 -0
  173. package/dist/xlsx/formula/engine-types.d.ts +26 -0
  174. package/dist/xlsx/formula/engine-types.d.ts.map +1 -1
  175. package/dist/xlsx/formula/engine.d.ts.map +1 -1
  176. package/dist/xlsx/formula/formula-shape.d.ts +28 -0
  177. package/dist/xlsx/formula/formula-shape.d.ts.map +1 -0
  178. package/dist/xlsx/formula/graph-index.d.ts +3 -1
  179. package/dist/xlsx/formula/graph-index.d.ts.map +1 -1
  180. package/dist/xlsx/formula/graph.d.ts +5 -0
  181. package/dist/xlsx/formula/graph.d.ts.map +1 -1
  182. package/dist/xlsx/formula/lexemes.d.ts.map +1 -1
  183. package/dist/xlsx/formula/parse-cache.d.ts +9 -0
  184. package/dist/xlsx/formula/parse-cache.d.ts.map +1 -0
  185. package/dist/xlsx/formula/parser.d.ts +3 -0
  186. package/dist/xlsx/formula/parser.d.ts.map +1 -1
  187. package/dist/xlsx/formula/ref-text.d.ts +14 -0
  188. package/dist/xlsx/formula/ref-text.d.ts.map +1 -0
  189. package/dist/xlsx/formula/references.d.ts.map +1 -1
  190. package/dist/xlsx/formula/shift-formula.d.ts +19 -0
  191. package/dist/xlsx/formula/shift-formula.d.ts.map +1 -0
  192. package/dist/xlsx/formula/shift-graph.d.ts +42 -0
  193. package/dist/xlsx/formula/shift-graph.d.ts.map +1 -0
  194. package/dist/xlsx/formula/transform.d.ts +2 -23
  195. package/dist/xlsx/formula/transform.d.ts.map +1 -1
  196. package/dist/xlsx/index.cjs +1087 -338
  197. package/dist/xlsx/index.mjs +1087 -339
  198. package/dist/xlsx/layout/index.d.ts +1 -1
  199. package/dist/xlsx/layout/index.d.ts.map +1 -1
  200. package/dist/xlsx/layout/sheet-queries.d.ts +7 -0
  201. package/dist/xlsx/layout/sheet-queries.d.ts.map +1 -1
  202. package/dist/xlsx/load/index.cjs +170 -99
  203. package/dist/xlsx/load/index.mjs +170 -99
  204. package/dist/xlsx/ui/index.cjs +1072 -332
  205. package/dist/xlsx/ui/index.mjs +1072 -332
  206. package/package.json +1 -1
@@ -5033,7 +5033,7 @@ var NAME_RE = /^[A-Za-z_\\\u00A1-\uFFFF][A-Za-z0-9_.?\\\u00A1-\uFFFF]*/;
5033
5033
  var CELL_RE = /^(\$?)([A-Za-z]{1,3})(\$?)(\d{1,7})/;
5034
5034
  var COLS_RE = /^(\$?)([A-Za-z]{1,3}):(\$?)([A-Za-z]{1,3})/;
5035
5035
  var ROWS_RE = /^(\$?)(\d{1,7}):(\$?)(\d{1,7})/;
5036
- var NUMBER_RE = /^(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/;
5036
+ var NUMBER_RE = /^(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?/;
5037
5037
  var sticky = (re) => new RegExp(re.source.replace(/^\^/, ""), "y");
5038
5038
  var CELL_AT = sticky(CELL_RE);
5039
5039
  var COLS_AT = sticky(COLS_RE);
@@ -5193,14 +5193,13 @@ function splitSheets(text) {
5193
5193
  if (book !== void 0) out.book = book;
5194
5194
  return out;
5195
5195
  }
5196
- var PREFIX_AT = /(\[\d+\])?([A-Za-z0-9_.\u00A1-\uFFFF]+)(?::([A-Za-z0-9_.\u00A1-\uFFFF]+))?!/y;
5197
5196
  function readPrefix(source2, at) {
5198
5197
  const ch = source2[at];
5199
5198
  if (ch === "'") {
5200
5199
  const quoted = readQuoted(source2, at);
5201
5200
  if (source2[at + quoted.length] !== "!") return void 0;
5202
- const length = quoted.length + 1;
5203
- return { prefix: { text: source2.slice(at, at + length), ...splitSheets(quoted.name) }, length };
5201
+ const length2 = quoted.length + 1;
5202
+ return { prefix: { text: source2.slice(at, at + length2), ...splitSheets(quoted.name) }, length: length2 };
5204
5203
  }
5205
5204
  let i2 = at;
5206
5205
  if (ch === "[") {
@@ -5209,13 +5208,23 @@ function readPrefix(source2, at) {
5209
5208
  if (i2 === at + 1 || source2[i2] !== "]") return void 0;
5210
5209
  i2++;
5211
5210
  }
5211
+ const sheetFrom = i2;
5212
5212
  while (i2 < source2.length && isSheetCharCode(source2.charCodeAt(i2))) i2++;
5213
- if (source2[i2] !== "!" && source2[i2] !== ":") return void 0;
5214
- const m = matchAt(PREFIX_AT, source2, at);
5215
- if (!m) return void 0;
5216
- if (!m[1] && /^\d/.test(m[2] ?? "") && !m[3]) return void 0;
5217
- const raw2 = m[0].slice(0, -1);
5218
- return { prefix: { text: m[0], ...splitSheets(raw2) }, length: m[0].length };
5213
+ if (i2 === sheetFrom) return void 0;
5214
+ let lastFrom = -1;
5215
+ if (source2[i2] === ":") {
5216
+ lastFrom = i2 + 1;
5217
+ i2 = lastFrom;
5218
+ while (i2 < source2.length && isSheetCharCode(source2.charCodeAt(i2))) i2++;
5219
+ if (i2 === lastFrom) return void 0;
5220
+ }
5221
+ if (source2[i2] !== "!") return void 0;
5222
+ if (ch !== "[" && lastFrom < 0 && isDigitCode(source2.charCodeAt(sheetFrom))) return void 0;
5223
+ const length = i2 + 1 - at;
5224
+ return {
5225
+ prefix: { text: source2.slice(at, at + length), ...splitSheets(source2.slice(at, i2)) },
5226
+ length
5227
+ };
5219
5228
  }
5220
5229
  function numberLiteral(text) {
5221
5230
  if (text.length <= 15) return Number(text);
@@ -5380,7 +5389,7 @@ function readName(source2, at, start, prefix) {
5380
5389
  }
5381
5390
  var joinTokens = (tokens2) => tokens2.map((t) => t.text).join("");
5382
5391
 
5383
- // xlsx/formula/transform.ts
5392
+ // xlsx/formula/ref-text.ts
5384
5393
  function safeTokens(formula) {
5385
5394
  try {
5386
5395
  return tokenize(formula);
@@ -5399,50 +5408,26 @@ function formatRefSpec(spec2) {
5399
5408
  if (spec2.kind === "cell") return a2;
5400
5409
  return `${a2}:${cornerText(spec2.end, spec2.kind)}`;
5401
5410
  }
5402
- function rewrite(token, ref) {
5411
+ function rewriteRef(token, ref) {
5403
5412
  const prefix = token.prefix?.text ?? "";
5404
5413
  if (!ref) return `${prefix}#REF!`;
5405
5414
  return `${prefix}${formatRefSpec(ref)}${token.spill ? "#" : ""}`;
5406
5415
  }
5407
5416
  var sameSpec = (a2, b) => a2.kind === b.kind && a2.start.row === b.start.row && a2.start.col === b.start.col && a2.end.row === b.end.row && a2.end.col === b.end.col;
5408
- function translateFormula(formula, dRow, dCol) {
5409
- const tokens2 = safeTokens(formula);
5410
- if (!tokens2) return formula;
5411
- for (const token of tokens2) {
5412
- if (token.kind !== "ref" || !token.ref) continue;
5413
- const spec2 = token.ref;
5414
- const move = (c2) => {
5415
- const row2 = spec2.kind === "cols" || c2.rowAbs ? c2.row : c2.row + dRow;
5416
- const col = spec2.kind === "rows" || c2.colAbs ? c2.col : c2.col + dCol;
5417
- if (row2 < 0 || row2 > MAX_ROW || col < 0 || col > MAX_COL) return void 0;
5418
- return { ...c2, row: row2, col };
5419
- };
5420
- const start = move(spec2.start);
5421
- const end = move(spec2.end);
5422
- const next = start && end ? { kind: spec2.kind, start, end } : void 0;
5423
- if (next && sameSpec(next, spec2)) continue;
5424
- token.text = rewrite(token, next);
5425
- }
5426
- return joinTokens(tokens2);
5417
+ var needsQuote = (name) => !/^[A-Za-z_¡-￿][A-Za-z0-9_.¡-￿]*$/.test(name) || /^[A-Za-z]{1,3}\d+$/.test(name) || /^(?:R\d*C?\d*|C\d*)$/i.test(name) || /^(?:TRUE|FALSE)$/i.test(name);
5418
+ function prefixText(prefix) {
5419
+ const sheets = prefix.sheet2 !== void 0 ? `${prefix.sheet}:${prefix.sheet2}` : prefix.sheet;
5420
+ const book = prefix.book !== void 0 ? `[${prefix.book}]` : "";
5421
+ const quote2 = needsQuote(prefix.sheet) || prefix.sheet2 !== void 0 && needsQuote(prefix.sheet2);
5422
+ return quote2 ? `'${(book + sheets).replace(/'/g, "''")}'!` : `${book}${sheets}!`;
5427
5423
  }
5428
- var sheetMatches = (prefix, formulaSheet, sheet) => {
5429
- if (prefix?.book !== void 0) return false;
5430
- const name = prefix ? prefix.sheet : formulaSheet;
5431
- return name.toLowerCase() === sheet.toLowerCase();
5432
- };
5433
- function shiftInterval(a2, b, at, count2, max) {
5434
- if (count2 > 0) {
5435
- const na2 = a2 >= at ? a2 + count2 : a2;
5436
- const nb2 = b >= at ? b + count2 : b;
5437
- if (nb2 > max) return na2 > max ? void 0 : [na2, max];
5438
- return [na2, nb2];
5439
- }
5440
- const n = -count2;
5441
- const last = at + n - 1;
5442
- if (a2 >= at && b <= last) return void 0;
5443
- const na = a2 < at ? a2 : a2 <= last ? at : a2 - n;
5444
- const nb = b < at ? b : b <= last ? at - 1 : b - n;
5445
- return [na, nb];
5424
+
5425
+ // xlsx/formula/shift-formula.ts
5426
+ var templates = /* @__PURE__ */ new Map();
5427
+ var MAX_TEMPLATES = 2e5;
5428
+ function remember(text, template) {
5429
+ if (templates.size >= MAX_TEMPLATES) templates.clear();
5430
+ templates.set(text, template);
5446
5431
  }
5447
5432
  function mergeSpacedAreas(tokens2) {
5448
5433
  const out = [];
@@ -5469,63 +5454,145 @@ function mergeSpacedAreas(tokens2) {
5469
5454
  }
5470
5455
  return out;
5471
5456
  }
5472
- function shiftFormula(formula, formulaSheet, spec2) {
5473
- if (spec2.count === 0) return formula;
5457
+ function templateOf(formula) {
5458
+ const cached = templates.get(formula);
5459
+ if (cached !== void 0) return cached;
5474
5460
  const raw2 = safeTokens(formula);
5475
- if (!raw2) return formula;
5476
- const tokens2 = mergeSpacedAreas(raw2);
5477
- const isRow = spec2.axis === "row";
5478
- for (const token of tokens2) {
5479
- if (token.kind !== "ref" || !token.ref || !sheetMatches(token.prefix, formulaSheet, spec2.sheet))
5480
- continue;
5481
- const ref = token.ref;
5482
- if (isRow && ref.kind === "cols" || !isRow && ref.kind === "rows") continue;
5483
- const startFirst = isRow ? ref.start.row <= ref.end.row : ref.start.col <= ref.end.col;
5484
- const lo = startFirst ? ref.start : ref.end;
5485
- const hi = startFirst ? ref.end : ref.start;
5486
- const shifted = shiftInterval(
5487
- isRow ? lo.row : lo.col,
5488
- isRow ? hi.row : hi.col,
5489
- spec2.at,
5490
- spec2.count,
5491
- isRow ? MAX_ROW : MAX_COL
5492
- );
5493
- let next;
5494
- if (shifted) {
5495
- const [a2, b] = shifted;
5496
- const nlo = isRow ? { ...lo, row: a2 } : { ...lo, col: a2 };
5497
- const nhi = isRow ? { ...hi, row: b } : { ...hi, col: b };
5498
- next = { kind: ref.kind, start: startFirst ? nlo : nhi, end: startFirst ? nhi : nlo };
5499
- if (ref.kind === "cell") next.end = next.start;
5461
+ let template = null;
5462
+ if (raw2) {
5463
+ template = [];
5464
+ let literal = "";
5465
+ for (const token of mergeSpacedAreas(raw2)) {
5466
+ if (token.kind !== "ref" && !(token.kind === "name" && token.prefix)) {
5467
+ literal += token.text;
5468
+ continue;
5469
+ }
5470
+ if (literal) template.push(literal);
5471
+ literal = "";
5472
+ const part = { kind: token.kind, text: token.text };
5473
+ if (token.prefix) {
5474
+ part.prefix = token.prefix;
5475
+ if (token.prefix.book === void 0) part.sheet = token.prefix.sheet.toLowerCase();
5476
+ }
5477
+ if (token.ref) part.ref = token.ref;
5478
+ if (token.spill) part.spill = true;
5479
+ template.push(part);
5500
5480
  }
5501
- if (next && sameSpec(next, ref)) continue;
5502
- token.text = rewrite(token, next);
5481
+ if (literal) template.push(literal);
5503
5482
  }
5504
- return joinTokens(tokens2);
5483
+ remember(formula, template);
5484
+ return template;
5505
5485
  }
5506
- var needsQuote = (name) => !/^[A-Za-z_\u00A1-\uFFFF][A-Za-z0-9_.\u00A1-\uFFFF]*$/.test(name) || /^[A-Za-z]{1,3}\d+$/.test(name) || /^(?:R\d*C?\d*|C\d*)$/i.test(name) || /^(?:TRUE|FALSE)$/i.test(name);
5507
- function prefixText(prefix) {
5508
- const sheets = prefix.sheet2 !== void 0 ? `${prefix.sheet}:${prefix.sheet2}` : prefix.sheet;
5509
- const book = prefix.book !== void 0 ? `[${prefix.book}]` : "";
5510
- const quote2 = needsQuote(prefix.sheet) || prefix.sheet2 !== void 0 && needsQuote(prefix.sheet2);
5511
- return quote2 ? `'${(book + sheets).replace(/'/g, "''")}'!` : `${book}${sheets}!`;
5486
+ function rewriteTemplate(formula, rewrite2) {
5487
+ const template = templateOf(formula);
5488
+ if (!template) return formula;
5489
+ let next;
5490
+ for (let i2 = 0; i2 < template.length; i2++) {
5491
+ const part = template[i2];
5492
+ if (typeof part === "string") continue;
5493
+ const changed = rewrite2(part);
5494
+ if (!changed) continue;
5495
+ next ??= template.slice();
5496
+ next[i2] = changed;
5497
+ }
5498
+ if (!next) return formula;
5499
+ const text = next.map((part) => typeof part === "string" ? part : part.text).join("");
5500
+ remember(text, next);
5501
+ return text;
5502
+ }
5503
+ function shiftInterval(a2, b, at, count2, max) {
5504
+ if (count2 > 0) {
5505
+ const na2 = a2 >= at ? a2 + count2 : a2;
5506
+ const nb2 = b >= at ? b + count2 : b;
5507
+ if (nb2 > max) return na2 > max ? void 0 : [na2, max];
5508
+ return [na2, nb2];
5509
+ }
5510
+ const n = -count2;
5511
+ const last = at + n - 1;
5512
+ if (a2 >= at && b <= last) return void 0;
5513
+ const na = a2 < at ? a2 : a2 <= last ? at : a2 - n;
5514
+ const nb = b < at ? b : b <= last ? at - 1 : b - n;
5515
+ return [na, nb];
5516
+ }
5517
+ function shiftRef(ref, spec2) {
5518
+ const isRow = spec2.axis === "row";
5519
+ if (isRow && ref.kind === "cols" || !isRow && ref.kind === "rows") return ref;
5520
+ const startFirst = isRow ? ref.start.row <= ref.end.row : ref.start.col <= ref.end.col;
5521
+ const lo = startFirst ? ref.start : ref.end;
5522
+ const hi = startFirst ? ref.end : ref.start;
5523
+ const shifted = shiftInterval(
5524
+ isRow ? lo.row : lo.col,
5525
+ isRow ? hi.row : hi.col,
5526
+ spec2.at,
5527
+ spec2.count,
5528
+ isRow ? MAX_ROW : MAX_COL
5529
+ );
5530
+ if (!shifted) return void 0;
5531
+ const [a2, b] = shifted;
5532
+ const nlo = isRow ? { ...lo, row: a2 } : { ...lo, col: a2 };
5533
+ const nhi = isRow ? { ...hi, row: b } : { ...hi, col: b };
5534
+ const next = {
5535
+ kind: ref.kind,
5536
+ start: startFirst ? nlo : nhi,
5537
+ end: startFirst ? nhi : nlo
5538
+ };
5539
+ if (ref.kind === "cell") next.end = next.start;
5540
+ return sameSpec(next, ref) ? ref : next;
5541
+ }
5542
+ function shiftFormula(formula, formulaSheet, spec2) {
5543
+ if (spec2.count === 0) return formula;
5544
+ const sheet = spec2.sheet.toLowerCase();
5545
+ const own = formulaSheet.toLowerCase() === sheet;
5546
+ return rewriteTemplate(formula, (part) => {
5547
+ if (part.kind !== "ref" || !part.ref || (part.prefix ? part.sheet !== sheet : !own))
5548
+ return void 0;
5549
+ const next = shiftRef(part.ref, spec2);
5550
+ if (next === part.ref) return void 0;
5551
+ const out = { kind: "ref", text: rewriteRef(part, next) };
5552
+ if (part.prefix) out.prefix = part.prefix;
5553
+ if (part.sheet !== void 0) out.sheet = part.sheet;
5554
+ if (next) out.ref = next;
5555
+ if (part.spill) out.spill = true;
5556
+ return out;
5557
+ });
5512
5558
  }
5513
5559
  function renameSheetInFormula(formula, oldName, newName) {
5514
- const tokens2 = safeTokens(formula);
5515
- if (!tokens2) return formula;
5516
5560
  const lower2 = oldName.toLowerCase();
5517
- for (const token of tokens2) {
5518
- const prefix = token.prefix;
5519
- if (!prefix || prefix.book !== void 0) continue;
5520
- const first2 = prefix.sheet.toLowerCase() === lower2;
5561
+ return rewriteTemplate(formula, (part) => {
5562
+ const prefix = part.prefix;
5563
+ if (!prefix || part.sheet === void 0) return void 0;
5564
+ const first2 = part.sheet === lower2;
5521
5565
  const second = prefix.sheet2?.toLowerCase() === lower2;
5522
- if (!first2 && !second) continue;
5566
+ if (!first2 && !second) return void 0;
5523
5567
  const renamed = { ...prefix, sheet: first2 ? newName : prefix.sheet };
5524
5568
  if (prefix.sheet2 !== void 0) renamed.sheet2 = second ? newName : prefix.sheet2;
5525
5569
  const text = prefixText(renamed);
5526
- token.text = text + token.text.slice(prefix.text.length);
5527
5570
  renamed.text = text;
5528
- token.prefix = renamed;
5571
+ const out = { ...part, text: text + part.text.slice(prefix.text.length) };
5572
+ out.prefix = renamed;
5573
+ out.sheet = renamed.sheet.toLowerCase();
5574
+ return out;
5575
+ });
5576
+ }
5577
+
5578
+ // xlsx/formula/transform.ts
5579
+ function translateFormula(formula, dRow, dCol) {
5580
+ const tokens2 = safeTokens(formula);
5581
+ if (!tokens2) return formula;
5582
+ for (const token of tokens2) {
5583
+ if (token.kind !== "ref" || !token.ref) continue;
5584
+ const spec2 = token.ref;
5585
+ const move = (c2) => {
5586
+ const row2 = spec2.kind === "cols" || c2.rowAbs ? c2.row : c2.row + dRow;
5587
+ const col = spec2.kind === "rows" || c2.colAbs ? c2.col : c2.col + dCol;
5588
+ if (row2 < 0 || row2 > MAX_ROW || col < 0 || col > MAX_COL) return void 0;
5589
+ return { ...c2, row: row2, col };
5590
+ };
5591
+ const start = move(spec2.start);
5592
+ const end = move(spec2.end);
5593
+ const next = start && end ? { kind: spec2.kind, start, end } : void 0;
5594
+ if (next && sameSpec(next, spec2)) continue;
5595
+ token.text = rewriteRef(token, next);
5529
5596
  }
5530
5597
  return joinTokens(tokens2);
5531
5598
  }
@@ -5614,7 +5681,7 @@ var FUTURE_FUNCTIONS = new Set(
5614
5681
  "AGGREGATE BETA.DIST BETA.INV BINOM.DIST BINOM.INV CEILING.PRECISE CHISQ.DIST CHISQ.DIST.RT CHISQ.INV CHISQ.INV.RT CHISQ.TEST CONFIDENCE.NORM CONFIDENCE.T COVARIANCE.P COVARIANCE.S ERF.PRECISE ERFC.PRECISE EXPON.DIST F.DIST F.DIST.RT F.INV F.INV.RT F.TEST FLOOR.PRECISE GAMMA.DIST GAMMA.INV GAMMALN.PRECISE HYPGEOM.DIST LOGNORM.DIST LOGNORM.INV MODE.MULT MODE.SNGL NEGBINOM.DIST NETWORKDAYS.INTL NORM.DIST NORM.INV NORM.S.DIST NORM.S.INV PERCENTILE.EXC PERCENTILE.INC PERCENTRANK.EXC PERCENTRANK.INC POISSON.DIST QUARTILE.EXC QUARTILE.INC RANK.AVG RANK.EQ STDEV.P STDEV.S T.DIST T.DIST.2T T.DIST.RT T.INV T.INV.2T T.TEST VAR.P VAR.S WEIBULL.DIST WORKDAY.INTL ACOT ACOTH ARABIC BASE BINOM.DIST.RANGE BITAND BITLSHIFT BITOR BITRSHIFT BITXOR CEILING.MATH COMBINA COT COTH CSC CSCH DAYS DECIMAL ENCODEURL FILTERXML FLOOR.MATH FORMULATEXT GAMMA GAUSS IFNA IMCOSH IMCOT IMCSC IMCSCH IMSEC IMSECH IMSINH IMTAN ISFORMULA ISOWEEKNUM MUNIT NUMBERVALUE PDURATION PERMUTATIONA PHI RRI SEC SECH SHEET SHEETS SKEW.P UNICHAR UNICODE WEBSERVICE XOR CONCAT FORECAST.ETS FORECAST.ETS.CONFINT FORECAST.ETS.SEASONALITY FORECAST.ETS.STAT FORECAST.LINEAR IFS MAXIFS MINIFS SWITCH TEXTJOIN XLOOKUP XMATCH FILTER SORT SORTBY UNIQUE SEQUENCE RANDARRAY LET LAMBDA TEXTBEFORE TEXTAFTER TEXTSPLIT VSTACK HSTACK TAKE DROP CHOOSEROWS CHOOSECOLS TOCOL TOROW WRAPROWS WRAPCOLS EXPAND ARRAYTOTEXT VALUETOTEXT ISOMITTED BYROW BYCOL MAP REDUCE SCAN MAKEARRAY IMAGE GROUPBY PIVOTBY PERCENTOF REGEXTEST REGEXEXTRACT REGEXREPLACE TRIMRANGE ANCHORARRAY SINGLE STOCKHISTORY FIELDVALUE".split(" ")
5615
5682
  );
5616
5683
  var WORKSHEET_PREFIXED = /* @__PURE__ */ new Set(["FILTER", "SORT"]);
5617
- function rewrite2(formula, visit) {
5684
+ function rewrite(formula, visit) {
5618
5685
  const out = [];
5619
5686
  let i2 = 0;
5620
5687
  while (i2 < formula.length) {
@@ -5657,7 +5724,7 @@ function rewrite2(formula, visit) {
5657
5724
  }
5658
5725
  function stripFuturePrefixes(formula) {
5659
5726
  if (!formula.includes("_xl")) return formula;
5660
- const plain2 = rewrite2(formula, (token, next, out) => {
5727
+ const plain2 = rewrite(formula, (token, next, out) => {
5661
5728
  if (!next.startsWith("(")) return false;
5662
5729
  const stripped = token.replace(/^(_xlfn\.)?(_xlws\.)?/i, "");
5663
5730
  if (stripped === token) return false;
@@ -5667,7 +5734,7 @@ function stripFuturePrefixes(formula) {
5667
5734
  return fromStoredSyntax(plain2);
5668
5735
  }
5669
5736
  function addFuturePrefixes(formula) {
5670
- return rewrite2(toStoredSyntax(formula), (token, next, out) => {
5737
+ return rewrite(toStoredSyntax(formula), (token, next, out) => {
5671
5738
  if (!next.startsWith("(")) return false;
5672
5739
  const upper2 = token.toUpperCase();
5673
5740
  if (!FUTURE_FUNCTIONS.has(upper2)) return false;
@@ -12195,7 +12262,9 @@ var PREC_INTERSECT = 9;
12195
12262
  var PREC_RANGE = 10;
12196
12263
  var OPERAND_START = /* @__PURE__ */ new Set(["ref", "name", "func", "open", "structured"]);
12197
12264
  function parseFormula(formula) {
12198
- const all2 = tokenize(formula);
12265
+ return parseTokens(tokenize(formula));
12266
+ }
12267
+ function parseTokens(all2) {
12199
12268
  const tokens2 = [];
12200
12269
  const wsBefore = [];
12201
12270
  let sawWs = false;
@@ -15624,8 +15693,10 @@ var FINANCIAL_FUNCTIONS = [
15624
15693
 
15625
15694
  // xlsx/formula/references.ts
15626
15695
  function sheetIndex(host, name) {
15696
+ const sheets = host.workbook.sheets;
15697
+ for (let i2 = 0; i2 < sheets.length; i2++) if (sheets[i2]?.name === name) return i2;
15627
15698
  const lower2 = name.toLowerCase();
15628
- return host.workbook.sheets.findIndex((sheet) => sheet.name.toLowerCase() === lower2);
15699
+ return sheets.findIndex((sheet) => sheet.name.toLowerCase() === lower2);
15629
15700
  }
15630
15701
 
15631
15702
  // xlsx/formula/functions/info.ts