@gui-chat-plugin/spreadsheet 4.2.2 → 4.2.3

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.
@@ -102,105 +102,105 @@ function u(e, t) {
102
102
  }
103
103
  //#endregion
104
104
  //#region src/core/paths.ts
105
- var d = "spreadsheets", f = ".json", p = 16, ee = 2, m = (e) => `${e.getUTCFullYear()}/${String(e.getUTCMonth() + 1).padStart(ee, "0")}`, te = () => globalThis.crypto.randomUUID().split("-").join("").slice(0, p);
106
- function h(t = /* @__PURE__ */ new Date(), n = te()) {
107
- let r = `${d}/${m(t)}/${n}${f}`;
105
+ var d = "spreadsheets", f = ".json", p = 16, m = 2, h = (e) => `${e.getUTCFullYear()}/${String(e.getUTCMonth() + 1).padStart(m, "0")}`, g = () => globalThis.crypto.randomUUID().split("-").join("").slice(0, p);
106
+ function _(t = /* @__PURE__ */ new Date(), n = g()) {
107
+ let r = `${d}/${h(t)}/${n}${f}`;
108
108
  return {
109
109
  relPath: r,
110
110
  filePath: `${e}/${r}`
111
111
  };
112
112
  }
113
- var ne = /* @__PURE__ */ new Set([
113
+ var ee = /* @__PURE__ */ new Set([
114
114
  "",
115
115
  ".",
116
116
  ".."
117
117
  ]);
118
- function re(t) {
119
- return typeof t != "string" || !t.startsWith(`${e}/${d}/`) || !t.endsWith(f) || t.includes("\\") ? !1 : !t.split("/").some((e) => ne.has(e));
118
+ function te(t) {
119
+ return typeof t != "string" || !t.startsWith(`${e}/${d}/`) || !t.endsWith(f) || t.includes("\\") ? !1 : !t.split("/").some((e) => ee.has(e));
120
120
  }
121
- var g = (t) => t.slice(e.length + 1), ie = (e) => typeof e == "string" || typeof e == "number" || typeof e == "boolean", ae = (e) => e === null || ie(e) || s(e) && (e.v === void 0 || e.v === null || ie(e.v)) && (e.f === void 0 || typeof e.f == "string"), oe = (e) => Array.isArray(e) && e.every(ae), se = (e) => s(e) && typeof e.name == "string" && Array.isArray(e.data) && e.data.every(oe);
122
- function ce(e) {
123
- return Array.isArray(e) && e.every(se) ? e : null;
121
+ var ne = (t) => t.slice(e.length + 1), re = (e) => typeof e == "string" || typeof e == "number" || typeof e == "boolean", ie = (e) => e === null || re(e) || s(e) && (e.v === void 0 || e.v === null || re(e.v)) && (e.f === void 0 || typeof e.f == "string"), ae = (e) => Array.isArray(e) && e.every(ie), oe = (e) => s(e) && typeof e.name == "string" && Array.isArray(e.data) && e.data.every(ae);
122
+ function se(e) {
123
+ return Array.isArray(e) && e.every(oe) ? e : null;
124
124
  }
125
125
  //#endregion
126
126
  //#region src/core/contentVersion.ts
127
- var le = "SHA-256", ue = 16, de = 2;
128
- async function fe(e) {
129
- let t = await crypto.subtle.digest(le, new TextEncoder().encode(e));
130
- return Array.from(new Uint8Array(t), (e) => e.toString(ue).padStart(de, "0")).join("");
127
+ var ce = "SHA-256", le = 16, ue = 2;
128
+ async function de(e) {
129
+ let t = await crypto.subtle.digest(ce, new TextEncoder().encode(e));
130
+ return Array.from(new Uint8Array(t), (e) => e.toString(le).padStart(ue, "0")).join("");
131
131
  }
132
- var pe = (e, t) => e !== void 0 && t !== null && e !== t;
132
+ var fe = (e, t) => e !== void 0 && t !== null && e !== t;
133
133
  //#endregion
134
134
  //#region src/core/dispatch.ts
135
- function me(e) {
135
+ function pe(e) {
136
136
  if (!s(e) || typeof e.path != "string") return !1;
137
137
  if (e.kind === "loadSpreadsheet") return !0;
138
138
  let t = e.baseVersion;
139
- return e.kind === "saveSpreadsheet" && Array.isArray(e.sheets) && e.sheets.every(se) && (t === void 0 || typeof t == "string");
139
+ return e.kind === "saveSpreadsheet" && Array.isArray(e.sheets) && e.sheets.every(oe) && (t === void 0 || typeof t == "string");
140
140
  }
141
- var he = (e) => s(e) && typeof e.read == "function" && typeof e.write == "function";
142
- function ge(e) {
141
+ var me = (e) => s(e) && typeof e.read == "function" && typeof e.write == "function";
142
+ function he(e) {
143
143
  if (!s(e) || !s(e.files)) return null;
144
144
  let t = e.files.artifacts;
145
- return he(t) ? t : null;
145
+ return me(t) ? t : null;
146
146
  }
147
- function _e(e, t) {
148
- let n = ce(JSON.parse(e));
147
+ function ge(e, t) {
148
+ let n = se(JSON.parse(e));
149
149
  if (!n) throw Error(`${t} does not hold an array of sheets`);
150
150
  return n;
151
151
  }
152
- async function ve(e, t) {
153
- let n = await e.read(g(t));
152
+ async function _e(e, t) {
153
+ let n = await e.read(ne(t));
154
154
  return {
155
155
  message: `Loaded spreadsheet ${t}`,
156
156
  data: {
157
- sheets: _e(n, t),
158
- version: await fe(n)
157
+ sheets: ge(n, t),
158
+ version: await de(n)
159
159
  }
160
160
  };
161
161
  }
162
- var ye = /* @__PURE__ */ new Map();
163
- function be(e) {
164
- let n = ye.get(e);
162
+ var ve = /* @__PURE__ */ new Map();
163
+ function ye(e) {
164
+ let n = ve.get(e);
165
165
  if (n) return n;
166
166
  let r = t();
167
- return ye.set(e, r), r;
167
+ return ve.set(e, r), r;
168
168
  }
169
- async function xe(e, t) {
169
+ async function be(e, t) {
170
170
  return await e.exists(t) ? e.read(t) : null;
171
171
  }
172
- function Se(e, t, n) {
172
+ function xe(e, t, n) {
173
173
  return {
174
174
  message: `Did not save spreadsheet ${e}: it changed since it was read`,
175
175
  data: {
176
- sheets: _e(t, e),
176
+ sheets: ge(t, e),
177
177
  version: n,
178
178
  conflict: !0
179
179
  }
180
180
  };
181
181
  }
182
- async function Ce(e, t, n, r) {
183
- let i = g(t);
184
- return be(i)(async () => {
185
- let a = r === void 0 ? null : await xe(e, i), o = a === null ? null : await fe(a);
186
- if (a !== null && o !== null && pe(r, o)) return Se(t, a, o);
182
+ async function Se(e, t, n, r) {
183
+ let i = ne(t);
184
+ return ye(i)(async () => {
185
+ let a = r === void 0 ? null : await be(e, i), o = a === null ? null : await de(a);
186
+ if (a !== null && o !== null && fe(r, o)) return xe(t, a, o);
187
187
  let s = JSON.stringify(n);
188
188
  return await e.write(i, s), {
189
189
  message: `Saved spreadsheet ${t}`,
190
190
  data: {
191
191
  sheets: t,
192
- version: await fe(s)
192
+ version: await de(s)
193
193
  }
194
194
  };
195
195
  });
196
196
  }
197
- async function we(e, t) {
198
- if (!re(t.path)) throw Error("path must be a .json file under artifacts/spreadsheets/");
199
- return t.kind === "loadSpreadsheet" ? ve(e, t.path) : Ce(e, t.path, t.sheets, t.baseVersion);
197
+ async function Ce(e, t) {
198
+ if (!te(t.path)) throw Error("path must be a .json file under artifacts/spreadsheets/");
199
+ return t.kind === "loadSpreadsheet" ? _e(e, t.path) : Se(e, t.path, t.sheets, t.baseVersion);
200
200
  }
201
201
  //#endregion
202
202
  //#region src/engine/spreadsheet-errors.ts
203
- var Te = [
203
+ var we = [
204
204
  "#NULL!",
205
205
  "#DIV/0!",
206
206
  "#VALUE!",
@@ -209,7 +209,7 @@ var Te = [
209
209
  "#NUM!",
210
210
  "#N/A",
211
211
  "#ERROR!"
212
- ], _ = class {
212
+ ], v = class {
213
213
  code;
214
214
  constructor(e) {
215
215
  this.code = e;
@@ -220,53 +220,59 @@ var Te = [
220
220
  toJSON() {
221
221
  return this.code;
222
222
  }
223
- }, Ee = new _("#NULL!"), v = new _("#DIV/0!"), y = new _("#VALUE!"), De = new _("#REF!"), Oe = new _("#NAME?"), b = new _("#NUM!"), x = new _("#N/A"), ke = {
224
- "#NULL!": Ee,
225
- "#DIV/0!": v,
226
- "#VALUE!": y,
227
- "#REF!": De,
228
- "#NAME?": Oe,
229
- "#NUM!": b,
230
- "#N/A": x,
231
- "#ERROR!": new _("#ERROR!")
232
- }, Ae = (e) => ke[e], je = new Set(Te);
233
- function Me(e) {
234
- return typeof e == "string" && je.has(e);
223
+ }, Te = new v("#NULL!"), y = new v("#DIV/0!"), b = new v("#VALUE!"), Ee = new v("#REF!"), De = new v("#NAME?"), x = new v("#NUM!"), S = new v("#N/A"), Oe = {
224
+ "#NULL!": Te,
225
+ "#DIV/0!": y,
226
+ "#VALUE!": b,
227
+ "#REF!": Ee,
228
+ "#NAME?": De,
229
+ "#NUM!": x,
230
+ "#N/A": S,
231
+ "#ERROR!": new v("#ERROR!")
232
+ }, ke = (e) => Oe[e], Ae = new Set(we);
233
+ function je(e) {
234
+ return typeof e == "string" && Ae.has(e);
235
235
  }
236
- function S(e) {
237
- return e instanceof _;
236
+ function C(e) {
237
+ return e instanceof v;
238
238
  }
239
- function Ne(e) {
240
- return S(e) ? e.code : Me(e) ? e : null;
239
+ function Me(e) {
240
+ return C(e) ? e.code : je(e) ? e : null;
241
241
  }
242
- function Pe(e) {
243
- return e == null ? !0 : typeof e == "number" ? Number.isNaN(e) || !Number.isFinite(e) : S(e);
242
+ function Ne(e) {
243
+ return e == null ? !0 : typeof e == "number" ? Number.isNaN(e) || !Number.isFinite(e) : C(e);
244
244
  }
245
245
  //#endregion
246
246
  //#region src/engine/numericCoercion.ts
247
- var Fe = (e) => isNaN(e) ? null : e;
248
- function Ie(e) {
249
- if (e.includes("%")) {
250
- let t = Fe(parseFloat(e.replace("%", "").trim()));
251
- return t === null ? null : t / 100;
247
+ var Pe = /^[-+]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?$/, Fe = /^[-+]?\d{1,3}(?:,\d{3})+(?:\.\d*)?$/, Ie = /^(.*?)\s*%$/, Le = /^([-+]?)\$(.*)$/, Re = (e) => Number.isFinite(e) ? e : null, ze = (e) => Pe.test(e) ? Re(Number(e)) : Fe.test(e) ? Re(Number(e.replace(/,/g, ""))) : null;
248
+ function w(e) {
249
+ let t = e.trim(), [, n] = t.match(Ie) ?? [];
250
+ if (n !== void 0) {
251
+ let e = ze(n);
252
+ return e === null ? null : e / 100;
252
253
  }
253
- return e.includes("$") ? Fe(parseFloat(e.replace(/[$,]/g, "").trim())) : e.includes(",") ? Fe(parseFloat(e.replace(/,/g, "").trim())) : Fe(parseFloat(e));
254
+ let [, r, i] = t.match(Le) ?? [];
255
+ if (i !== void 0) {
256
+ let e = r !== "" && /^[-+]/.test(i) ? null : ze(i.trim());
257
+ return e === null ? null : r === "-" ? -e : e;
258
+ }
259
+ return ze(t);
254
260
  }
255
- function C(e) {
256
- return typeof e == "number" ? !isNaN(e) : typeof e == "string" && Ie(e) !== null;
261
+ function T(e) {
262
+ return typeof e == "number" ? !isNaN(e) : typeof e == "string" && w(e) !== null;
257
263
  }
258
- function w(e) {
259
- return typeof e == "number" ? e : typeof e == "boolean" ? +!!e : typeof e == "string" ? Ie(e) ?? y : e;
264
+ function E(e) {
265
+ return typeof e == "number" ? e : typeof e == "boolean" ? +!!e : typeof e == "string" ? w(e) ?? b : e;
260
266
  }
261
- function Le(e) {
262
- return typeof e == "number" ? !isNaN(e) : typeof e == "string" && e.trim() !== "" && !isNaN(Number(e));
267
+ function Be(e) {
268
+ return typeof e == "number" ? !isNaN(e) : typeof e == "string" && w(e) !== null;
263
269
  }
264
270
  //#endregion
265
271
  //#region src/engine/date-utils.ts
266
- var Re = 864e5, ze = new Date(Date.UTC(1899, 11, 30)), T = (e) => (e.getTime() - ze.getTime()) / Re, E = (e) => {
267
- let t = Math.floor(e), n = e - t, r = new Date(ze.getTime() + t * Re), i = Math.round(n * 24 * 60 * 60);
272
+ var Ve = 864e5, He = new Date(Date.UTC(1899, 11, 30)), Ue = (e) => (e.getTime() - He.getTime()) / Ve, D = (e) => {
273
+ let t = Math.floor(e), n = e - t, r = new Date(He.getTime() + t * Ve), i = Math.round(n * 24 * 60 * 60);
268
274
  return r.setSeconds(r.getSeconds() + i), r;
269
- }, Be = [
275
+ }, We = [
270
276
  "Jan",
271
277
  "Feb",
272
278
  "Mar",
@@ -279,7 +285,7 @@ var Re = 864e5, ze = new Date(Date.UTC(1899, 11, 30)), T = (e) => (e.getTime() -
279
285
  "Oct",
280
286
  "Nov",
281
287
  "Dec"
282
- ], Ve = [
288
+ ], Ge = [
283
289
  "January",
284
290
  "February",
285
291
  "March",
@@ -292,7 +298,7 @@ var Re = 864e5, ze = new Date(Date.UTC(1899, 11, 30)), T = (e) => (e.getTime() -
292
298
  "October",
293
299
  "November",
294
300
  "December"
295
- ], He = [
301
+ ], Ke = [
296
302
  "Sun",
297
303
  "Mon",
298
304
  "Tue",
@@ -300,7 +306,7 @@ var Re = 864e5, ze = new Date(Date.UTC(1899, 11, 30)), T = (e) => (e.getTime() -
300
306
  "Thu",
301
307
  "Fri",
302
308
  "Sat"
303
- ], Ue = [
309
+ ], qe = [
304
310
  "Sunday",
305
311
  "Monday",
306
312
  "Tuesday",
@@ -311,7 +317,7 @@ var Re = 864e5, ze = new Date(Date.UTC(1899, 11, 30)), T = (e) => (e.getTime() -
311
317
  ];
312
318
  //#endregion
313
319
  //#region src/engine/date-parser.ts
314
- function We(e) {
320
+ function Je(e) {
315
321
  if (typeof e != "string" || e.length < 6 || e.length > 30) return !1;
316
322
  let t = /\d/.test(e), n = /[/\-\s,]/.test(e);
317
323
  return !t || !n ? !1 : [
@@ -323,10 +329,10 @@ function We(e) {
323
329
  /^\d{1,2}\s+[A-Za-z]{3,9}\s+\d{4}$/
324
330
  ].some((t) => t.test(e.trim()));
325
331
  }
326
- function Ge(e, t, n) {
327
- return tt(e, t, n) ? T(new Date(Date.UTC(e, t - 1, n))) : null;
332
+ function Ye(e, t, n) {
333
+ return ot(e, t, n) ? Ue(new Date(Date.UTC(e, t - 1, n))) : null;
328
334
  }
329
- function D(e, t) {
335
+ function Xe(e, t) {
330
336
  let [, n, r, i] = e.match(t) ?? [];
331
337
  return n === void 0 || r === void 0 || i === void 0 ? null : [
332
338
  n,
@@ -334,76 +340,76 @@ function D(e, t) {
334
340
  i
335
341
  ];
336
342
  }
337
- var Ke = /^(\d{1,2})\/(\d{1,2})\/(\d{2,4})$/, qe = 12, Je = (e, t, n) => e > qe || t <= qe && e <= qe && n;
338
- function Ye(e) {
339
- let t = e.toLowerCase(), n = Be.findIndex((e) => e.toLowerCase() === t);
343
+ var Ze = /^(\d{1,2})\/(\d{1,2})\/(\d{2,4})$/, Qe = 12, $e = (e, t, n) => e > Qe || t <= Qe && e <= Qe && n;
344
+ function et(e) {
345
+ let t = e.toLowerCase(), n = We.findIndex((e) => e.toLowerCase() === t);
340
346
  if (n !== -1) return n + 1;
341
- let r = Ve.findIndex((e) => e.toLowerCase() === t);
347
+ let r = Ge.findIndex((e) => e.toLowerCase() === t);
342
348
  return r === -1 ? null : r + 1;
343
349
  }
344
- function Xe(e, t = !1) {
345
- if (!We(e)) return null;
346
- let n = e.trim(), r = D(n, /^(\d{4})[-/](\d{1,2})[-/](\d{1,2})$/);
350
+ function tt(e, t = !1) {
351
+ if (!Je(e)) return null;
352
+ let n = e.trim(), r = Xe(n, /^(\d{4})[-/](\d{1,2})[-/](\d{1,2})$/);
347
353
  if (r) {
348
354
  let [e, t, n] = r;
349
- return Ge(parseInt(e), parseInt(t), parseInt(n));
355
+ return Ye(parseInt(e), parseInt(t), parseInt(n));
350
356
  }
351
- let i = D(n, /^(\d{1,2})-([A-Za-z]{3})-(\d{2,4})$/);
357
+ let i = Xe(n, /^(\d{1,2})-([A-Za-z]{3})-(\d{2,4})$/);
352
358
  if (i) {
353
359
  let [e, t, n] = i;
354
- return et($e(parseInt(n)), t, parseInt(e));
360
+ return at(it(parseInt(n)), t, parseInt(e));
355
361
  }
356
- let a = D(n, /^([A-Za-z]{3,9})\s+(\d{1,2}),?\s+(\d{4})$/);
362
+ let a = Xe(n, /^([A-Za-z]{3,9})\s+(\d{1,2}),?\s+(\d{4})$/);
357
363
  if (a) {
358
364
  let [e, t, n] = a;
359
- return et(parseInt(n), e, parseInt(t));
365
+ return at(parseInt(n), e, parseInt(t));
360
366
  }
361
- let o = D(n, /^(\d{1,2})\s+([A-Za-z]{3,9})\s+(\d{4})$/);
367
+ let o = Xe(n, /^(\d{1,2})\s+([A-Za-z]{3,9})\s+(\d{4})$/);
362
368
  if (o) {
363
369
  let [e, t, n] = o;
364
- return et(parseInt(n), t, parseInt(e));
370
+ return at(parseInt(n), t, parseInt(e));
365
371
  }
366
- let s = D(n, Ke);
372
+ let s = Xe(n, Ze);
367
373
  if (s) {
368
- let [e, n, r] = s, i = Je(parseInt(e), parseInt(n), t), a = parseInt(i ? n : e), o = parseInt(i ? e : n);
369
- return Ge($e(parseInt(r)), a, o);
374
+ let [e, n, r] = s, i = $e(parseInt(e), parseInt(n), t), a = parseInt(i ? n : e), o = parseInt(i ? e : n);
375
+ return Ye(it(parseInt(r)), a, o);
370
376
  }
371
377
  return null;
372
378
  }
373
- var Ze = 100, Qe = 30;
374
- function $e(e) {
375
- return e >= Ze ? e : e < Qe ? 2e3 + e : 1900 + e;
379
+ var nt = 100, rt = 30;
380
+ function it(e) {
381
+ return e >= nt ? e : e < rt ? 2e3 + e : 1900 + e;
376
382
  }
377
- function et(e, t, n) {
378
- let r = Ye(t);
379
- return r === null ? null : Ge(e, r, n);
383
+ function at(e, t, n) {
384
+ let r = et(t);
385
+ return r === null ? null : Ye(e, r, n);
380
386
  }
381
- function tt(e, t, n) {
387
+ function ot(e, t, n) {
382
388
  if (e < 1900 || e > 2100 || t < 1 || t > 12 || n < 1 || n > 31) return !1;
383
389
  let r = new Date(Date.UTC(e, t - 1, n));
384
390
  return r.getUTCFullYear() === e && r.getUTCMonth() === t - 1 && r.getUTCDate() === n;
385
391
  }
386
- function nt(e, t = !1) {
392
+ function st(e, t = !1) {
387
393
  let n = e.trim();
388
394
  if (/^\d{4}-\d{1,2}-\d{1,2}$/.test(n)) return "YYYY-MM-DD";
389
395
  if (/^\d{4}\/\d{1,2}\/\d{1,2}$/.test(n)) return "YYYY/MM/DD";
390
396
  if (/^\d{1,2}-[A-Za-z]{3}-\d{2,4}$/.test(n)) return "DD-MMM-YYYY";
391
397
  if (/^[A-Za-z]{3}\s+\d{1,2},?\s+\d{4}$/.test(n)) return "MMM D, YYYY";
392
398
  if (/^[A-Za-z]{4,9}\s+\d{1,2},?\s+\d{4}$/.test(n)) return "MMMM D, YYYY";
393
- let r = D(n, Ke);
399
+ let r = Xe(n, Ze);
394
400
  if (r) {
395
401
  let [e, n] = r;
396
- return Je(parseInt(e), parseInt(n), t) ? "DD/MM/YYYY" : "MM/DD/YYYY";
402
+ return $e(parseInt(e), parseInt(n), t) ? "DD/MM/YYYY" : "MM/DD/YYYY";
397
403
  }
398
404
  return t ? "DD/MM/YYYY" : "MM/DD/YYYY";
399
405
  }
400
406
  //#endregion
401
407
  //#region src/engine/registry.ts
402
- var rt = (e, t) => /* @__PURE__ */ Error(`${e} requires at least ${t} argument${t === 1 ? "" : "s"}`), O = (e, t, n) => {
408
+ var ct = (e, t) => /* @__PURE__ */ Error(`${e} requires at least ${t} argument${t === 1 ? "" : "s"}`), O = (e, t, n) => {
403
409
  let r = t[n];
404
- if (r === void 0) throw rt(e.functionName, n + 1);
410
+ if (r === void 0) throw ct(e.functionName, n + 1);
405
411
  return r;
406
- }, it = (e) => e.getRangeValuesRaw ?? e.getRangeValues, k = (e) => e.getRangeValuesKeepingBlanks ?? it(e), A = new class {
412
+ }, lt = (e) => e.getRangeValuesRaw ?? e.getRangeValues, k = (e) => e.getRangeValuesKeepingBlanks ?? lt(e), A = new class {
407
413
  functions = /* @__PURE__ */ new Map();
408
414
  overlay = null;
409
415
  register(e) {
@@ -440,25 +446,25 @@ var rt = (e, t) => /* @__PURE__ */ Error(`${e} requires at least ${t} argument${
440
446
  }
441
447
  return e;
442
448
  }
443
- }(), at = "[A-Z][A-Z0-9]*(?:\\.[A-Z0-9]+)*", ot = (e) => /^[A-Z]+(?:\.[A-Z]+)*$/i.test(e) || A.hasFunction(e);
449
+ }(), ut = "[A-Z][A-Z0-9]*(?:\\.[A-Z0-9]+)*", dt = (e) => /^[A-Z]+(?:\.[A-Z]+)*$/i.test(e) || A.hasFunction(e);
444
450
  function j(e) {
445
- return typeof e == "number" ? e : Ie(String(e)) ?? 0;
451
+ return typeof e == "number" ? e : w(String(e)) ?? 0;
446
452
  }
447
- function st(e) {
453
+ function ft(e) {
448
454
  return typeof e == "boolean" ? e ? "TRUE" : "FALSE" : String(e);
449
455
  }
450
- var ct = /[.*+?^${}()|[\]\\]/, lt = (e) => ct.test(e) ? `\\${e}` : e, ut = /~([\s\S])|[\s\S]/g, dt = (e) => e.replace(ut, (e, t) => t === void 0 ? e === "*" ? ".*" : e === "?" ? "." : lt(e) : lt(t));
451
- function ft(e) {
452
- let t = RegExp(`^${dt(e)}$`, "iu");
456
+ var pt = /[.*+?^${}()|[\]\\]/, mt = (e) => pt.test(e) ? `\\${e}` : e, ht = /~([\s\S])|[\s\S]/g, gt = (e) => e.replace(ht, (e, t) => t === void 0 ? e === "*" ? ".*" : e === "?" ? "." : mt(e) : mt(t));
457
+ function _t(e) {
458
+ let t = RegExp(`^${gt(e)}$`, "iu");
453
459
  return (e) => t.test(e);
454
460
  }
455
- function pt(e, t = !1) {
461
+ function vt(e, t = !1) {
456
462
  let n = e.trim().replace(/^["']|["']$/g, "");
457
463
  if (n === "=") return (e) => String(e).trim() === "";
458
464
  if (n === "<>") return (e) => String(e).trim() !== "";
459
465
  let [, r, i] = n.match(/^([><=!]+)(.+)$/) ?? [];
460
466
  if (r !== void 0 && i !== void 0) {
461
- let e = mt(i, t), n = ht(i, t), a = (e) => (t) => C(t) && e(j(t));
467
+ let e = yt(i, t), n = bt(i, t), a = (e) => (t) => T(t) && e(j(t));
462
468
  switch (r) {
463
469
  case ">": return a((t) => t > e);
464
470
  case ">=": return a((t) => t >= e);
@@ -471,60 +477,60 @@ function pt(e, t = !1) {
471
477
  default: return () => !1;
472
478
  }
473
479
  }
474
- return ht(n, t);
480
+ return bt(n, t);
475
481
  }
476
- function mt(e, t) {
477
- return Xe(e, t) ?? Ie(e) ?? NaN;
482
+ function yt(e, t) {
483
+ return tt(e, t) ?? w(e) ?? NaN;
478
484
  }
479
- function ht(e, t) {
480
- let n = ft(e), r = mt(e, t), i = !isNaN(r);
481
- return (e) => typeof e != "number" && n(String(e)) || i && C(e) && j(e) === r;
485
+ function bt(e, t) {
486
+ let n = _t(e), r = yt(e, t), i = !isNaN(r);
487
+ return (e) => typeof e != "number" && n(String(e)) || i && T(e) && j(e) === r;
482
488
  }
483
- function gt(e, t, n) {
489
+ function xt(e, t, n) {
484
490
  let r = e.evaluateFormula(O(e, t, n));
485
- return S(r) ? r : typeof r == "boolean" ? (e) => e === r : pt(String(r), e.preferDDMMYYYY);
491
+ return C(r) ? r : typeof r == "boolean" ? (e) => e === r : vt(String(r), e.preferDDMMYYYY);
486
492
  }
487
493
  //#endregion
488
494
  //#region src/engine/functions/statistical-math.ts
489
- var _t = (e) => e.reduce((e, t) => e + t, 0) / e.length;
490
- function vt(e) {
491
- return e.length === 0 ? v : _t(e);
495
+ var St = (e) => e.reduce((e, t) => e + t, 0) / e.length;
496
+ function Ct(e) {
497
+ return e.length === 0 ? y : St(e);
492
498
  }
493
- function yt(e) {
494
- return e.length === 0 ? b : _t(bt([...e].sort((e, t) => e - t)));
499
+ function wt(e) {
500
+ return e.length === 0 ? x : St(Tt([...e].sort((e, t) => e - t)));
495
501
  }
496
- function bt(e) {
502
+ function Tt(e) {
497
503
  let t = Math.floor(e.length / 2);
498
504
  return e.slice(e.length % 2 == 0 ? t - 1 : t, t + 1);
499
505
  }
500
- function xt(e) {
506
+ function Et(e) {
501
507
  let t = /* @__PURE__ */ new Map();
502
508
  for (let n of e) t.set(n, (t.get(n) ?? 0) + 1);
503
- let n = 0, r = x;
509
+ let n = 0, r = S;
504
510
  for (let [e, i] of t.entries()) i > n && (n = i, r = e);
505
- return n >= 2 ? r : x;
511
+ return n >= 2 ? r : S;
506
512
  }
507
- var St = 2;
508
- function Ct(e) {
509
- if (e.length < St) return v;
510
- let t = _t(e);
513
+ var Dt = 2;
514
+ function Ot(e) {
515
+ if (e.length < Dt) return y;
516
+ let t = St(e);
511
517
  return e.reduce((e, n) => e + (n - t) ** 2, 0) / (e.length - 1);
512
518
  }
513
- function wt(e) {
514
- let t = Ct(e);
519
+ function kt(e) {
520
+ let t = Ot(e);
515
521
  return typeof t == "number" ? Math.sqrt(t) : t;
516
522
  }
517
523
  //#endregion
518
524
  //#region src/engine/functions/statistical.ts
519
- var M = 255, Tt = /^\$?[A-Z]+\$?\d+$/i, Et = (e) => Tt.test(e), Dt = (e) => e.slice(e.lastIndexOf("!") + 1), Ot = (e) => {
525
+ var M = 255, At = /^\$?[A-Z]+\$?\d+$/i, jt = (e) => At.test(e), Mt = (e) => e.slice(e.lastIndexOf("!") + 1), Nt = (e) => {
520
526
  if (!e) return !1;
521
- let [t, n] = Dt(e).split(":");
522
- return !t || !n ? !1 : Et(t) && Et(n);
523
- }, kt = (e) => Ot(e) || Et(Dt(e)), At = (e, t, n) => {
527
+ let [t, n] = Mt(e).split(":");
528
+ return !t || !n ? !1 : jt(t) && jt(n);
529
+ }, Pt = (e) => Nt(e) || jt(Mt(e)), Ft = (e, t, n) => {
524
530
  let r = [];
525
531
  for (let i of e) {
526
532
  let e = i?.trim();
527
- e && (kt(e) ? n(e).forEach((e) => r.push({
533
+ e && (Pt(e) ? n(e).forEach((e) => r.push({
528
534
  value: e,
529
535
  isScalar: !1
530
536
  })) : r.push({
@@ -533,18 +539,18 @@ var M = 255, Tt = /^\$?[A-Z]+\$?\d+$/i, Et = (e) => Tt.test(e), Dt = (e) => e.sl
533
539
  }));
534
540
  }
535
541
  return r;
536
- }, jt = (e, t) => {
537
- if (!t.getRangeValuesKeepingBlanks) return Nt(e, t);
538
- let n = At(e, t, t.getRangeValuesKeepingBlanks).flatMap(Mt);
539
- return n.find(S) ?? n.filter((e) => typeof e == "number");
540
- }, Mt = ({ value: e, isScalar: t }) => S(e) ? [e] : t ? [w(e)] : Le(e) ? [j(e)] : [];
541
- function Nt(e, t) {
542
+ }, It = (e, t) => {
543
+ if (!t.getRangeValuesKeepingBlanks) return Rt(e, t);
544
+ let n = Ft(e, t, t.getRangeValuesKeepingBlanks).flatMap(Lt);
545
+ return n.find(C) ?? n.filter((e) => typeof e == "number");
546
+ }, Lt = ({ value: e, isScalar: t }) => C(e) ? [e] : t ? [E(e)] : Be(e) ? [j(e)] : [];
547
+ function Rt(e, t) {
542
548
  let n = e.map((e) => e?.trim() ?? "").filter((e) => e !== "").map((e) => {
543
- if (kt(e)) return {
544
- error: t.getRangeValuesRaw?.(e).find(S),
549
+ if (Pt(e)) return {
550
+ error: t.getRangeValuesRaw?.(e).find(C),
545
551
  numbers: t.getRangeValues(e).map(j)
546
552
  };
547
- let n = w(t.evaluateFormula(e));
553
+ let n = E(t.evaluateFormula(e));
548
554
  return typeof n == "number" ? { numbers: [n] } : {
549
555
  error: n,
550
556
  numbers: []
@@ -552,32 +558,32 @@ function Nt(e, t) {
552
558
  });
553
559
  return n.find(({ error: e }) => e)?.error ?? n.flatMap(({ numbers: e }) => e);
554
560
  }
555
- var Pt = (e) => e.filter(Le).map(j), N = (e) => (t, n) => {
556
- let r = jt(t, n);
561
+ var zt = (e) => e.filter(Be).map(j), N = (e) => (t, n) => {
562
+ let r = It(t, n);
557
563
  return Array.isArray(r) ? e(r) : r;
558
- }, Ft = (e, t) => At(e, t, k(t)).map(({ value: e }) => e), It = N((e) => e.reduce((e, t) => e + t, 0)), Lt = N(vt), Rt = N((e) => e.length > 0 ? Math.max(...e) : 0), zt = N((e) => e.length > 0 ? Math.min(...e) : 0), Bt = ({ value: e, isScalar: t }) => !t || typeof w(e) == "number", Vt = (e, t) => At(e, t, t.getRangeValues).filter(Bt).length, Ht = N(yt), Ut = N(xt), Wt = N(wt), Gt = N(Ct), Kt = (e) => e != null && e !== "", qt = (e, t) => kt(e) && t.countFilledCells ? t.countFilledCells(e) : Ft([e], t).filter(Kt).length, Jt = (e, t) => e.reduce((e, n) => {
564
+ }, Bt = (e, t) => Ft(e, t, k(t)).map(({ value: e }) => e), Vt = N((e) => e.reduce((e, t) => e + t, 0)), Ht = N(Ct), Ut = N((e) => e.length > 0 ? Math.max(...e) : 0), Wt = N((e) => e.length > 0 ? Math.min(...e) : 0), Gt = ({ value: e, isScalar: t }) => !t || typeof E(e) == "number", Kt = (e, t) => Ft(e, t, t.getRangeValues).filter(Gt).length, qt = N(wt), Jt = N(Et), Yt = N(kt), Xt = N(Ot), Zt = (e) => e != null && e !== "", Qt = (e, t) => Pt(e) && t.countFilledCells ? t.countFilledCells(e) : Bt([e], t).filter(Zt).length, $t = (e, t) => e.reduce((e, n) => {
559
565
  let r = n?.trim();
560
- return r ? e + qt(r, t) : e;
561
- }, 0), Yt = (e, t) => {
562
- let n = k(t)(O(t, e, 0)), r = gt(t, e, 1);
566
+ return r ? e + Qt(r, t) : e;
567
+ }, 0), en = (e, t) => {
568
+ let n = k(t)(O(t, e, 0)), r = xt(t, e, 1);
563
569
  return typeof r == "function" ? n.filter(r).length : r;
564
- }, Xt = (e, t) => {
570
+ }, tn = (e, t) => {
565
571
  let n = O(t, e, 0), r = k(t), i = e.length === 3 ? O(t, e, 2) : n;
566
572
  return {
567
573
  criteriaRange: r(n),
568
574
  valueRange: r(i),
569
- matches: gt(t, e, 1)
575
+ matches: xt(t, e, 1)
570
576
  };
571
- }, Zt = (e, t, n) => e.reduce((e, r, i) => {
577
+ }, nn = (e, t, n) => e.reduce((e, r, i) => {
572
578
  if (!n(r)) return e;
573
579
  let a = t[i] ?? "";
574
- return S(a) ? {
580
+ return C(a) ? {
575
581
  ...e,
576
582
  error: e.error ?? a
577
583
  } : {
578
584
  ...e,
579
585
  sum: e.sum + j(a),
580
- count: e.count + +!!C(a)
586
+ count: e.count + +!!T(a)
581
587
  };
582
588
  }, {
583
589
  sum: 0,
@@ -585,7 +591,7 @@ var Pt = (e) => e.filter(Le).map(j), N = (e) => (t, n) => {
585
591
  });
586
592
  A.register({
587
593
  name: "SUM",
588
- handler: It,
594
+ handler: Vt,
589
595
  minArgs: 1,
590
596
  maxArgs: M,
591
597
  description: "Returns the sum of all numbers in a range",
@@ -593,7 +599,7 @@ A.register({
593
599
  category: "Statistical"
594
600
  }), A.register({
595
601
  name: "AVERAGE",
596
- handler: Lt,
602
+ handler: Ht,
597
603
  minArgs: 1,
598
604
  maxArgs: M,
599
605
  description: "Returns the average (arithmetic mean) of numbers in a range",
@@ -601,21 +607,21 @@ A.register({
601
607
  category: "Statistical"
602
608
  }), A.register({
603
609
  name: "MAX",
604
- handler: Rt,
610
+ handler: Ut,
605
611
  minArgs: 1,
606
612
  description: "Returns the largest value in a range",
607
613
  examples: ["MAX(A1:A10)", "MAX(B2:B20)"],
608
614
  category: "Statistical"
609
615
  }), A.register({
610
616
  name: "MIN",
611
- handler: zt,
617
+ handler: Wt,
612
618
  minArgs: 1,
613
619
  description: "Returns the smallest value in a range",
614
620
  examples: ["MIN(A1:A10)", "MIN(B2:B20)"],
615
621
  category: "Statistical"
616
622
  }), A.register({
617
623
  name: "COUNT",
618
- handler: Vt,
624
+ handler: Kt,
619
625
  minArgs: 1,
620
626
  maxArgs: M,
621
627
  description: "Counts the number of cells in a range",
@@ -623,7 +629,7 @@ A.register({
623
629
  category: "Statistical"
624
630
  }), A.register({
625
631
  name: "MEDIAN",
626
- handler: Ht,
632
+ handler: qt,
627
633
  minArgs: 1,
628
634
  maxArgs: M,
629
635
  description: "Returns the median (middle) value in a range",
@@ -631,7 +637,7 @@ A.register({
631
637
  category: "Statistical"
632
638
  }), A.register({
633
639
  name: "MODE",
634
- handler: Ut,
640
+ handler: Jt,
635
641
  minArgs: 1,
636
642
  maxArgs: M,
637
643
  description: "Returns the most frequently occurring value in a range",
@@ -639,7 +645,7 @@ A.register({
639
645
  category: "Statistical"
640
646
  }), A.register({
641
647
  name: "STDEV",
642
- handler: Wt,
648
+ handler: Yt,
643
649
  minArgs: 1,
644
650
  maxArgs: M,
645
651
  description: "Returns the standard deviation of numbers in a range",
@@ -647,7 +653,7 @@ A.register({
647
653
  category: "Statistical"
648
654
  }), A.register({
649
655
  name: "VAR",
650
- handler: Gt,
656
+ handler: Xt,
651
657
  minArgs: 1,
652
658
  maxArgs: M,
653
659
  description: "Returns the variance of numbers in a range",
@@ -655,7 +661,7 @@ A.register({
655
661
  category: "Statistical"
656
662
  }), A.register({
657
663
  name: "COUNTA",
658
- handler: Jt,
664
+ handler: $t,
659
665
  minArgs: 1,
660
666
  maxArgs: M,
661
667
  description: "Counts the number of non-empty cells in a range",
@@ -663,7 +669,7 @@ A.register({
663
669
  category: "Statistical"
664
670
  }), A.register({
665
671
  name: "COUNTIF",
666
- handler: Yt,
672
+ handler: en,
667
673
  minArgs: 2,
668
674
  maxArgs: 2,
669
675
  description: "Counts cells in a range that match a criteria",
@@ -672,9 +678,9 @@ A.register({
672
678
  }), A.register({
673
679
  name: "SUMIF",
674
680
  handler: (e, t) => {
675
- let { criteriaRange: n, valueRange: r, matches: i } = Xt(e, t);
681
+ let { criteriaRange: n, valueRange: r, matches: i } = tn(e, t);
676
682
  if (typeof i != "function") return i;
677
- let { sum: a, error: o } = Zt(n, r, i);
683
+ let { sum: a, error: o } = nn(n, r, i);
678
684
  return o ?? a;
679
685
  },
680
686
  minArgs: 2,
@@ -685,10 +691,10 @@ A.register({
685
691
  }), A.register({
686
692
  name: "AVERAGEIF",
687
693
  handler: (e, t) => {
688
- let { criteriaRange: n, valueRange: r, matches: i } = Xt(e, t);
694
+ let { criteriaRange: n, valueRange: r, matches: i } = tn(e, t);
689
695
  if (typeof i != "function") return i;
690
- let { sum: a, count: o, error: s } = Zt(n, r, i);
691
- return s || (o > 0 ? a / o : v);
696
+ let { sum: a, count: o, error: s } = nn(n, r, i);
697
+ return s || (o > 0 ? a / o : y);
692
698
  },
693
699
  minArgs: 2,
694
700
  maxArgs: 3,
@@ -698,15 +704,15 @@ A.register({
698
704
  });
699
705
  //#endregion
700
706
  //#region src/engine/functions/analysis-math.ts
701
- var Qt = 2, $t = 1, en = 4, P = (e) => e.reduce((e, t) => e + t, 0) / e.length, F = (e) => {
707
+ var rn = 2, an = 1, on = 4, P = (e) => e.reduce((e, t) => e + t, 0) / e.length, F = (e) => {
702
708
  let t = P(e);
703
709
  return e.reduce((e, n) => e + (n - t) ** 2, 0);
704
710
  };
705
- function tn(e, t) {
706
- if (e.length !== t.length) return x;
711
+ function sn(e, t) {
712
+ if (e.length !== t.length) return S;
707
713
  let n = e.flatMap((e, n) => {
708
714
  let r = t[n];
709
- return C(e) && r !== void 0 && C(r) ? [{
715
+ return T(e) && r !== void 0 && T(r) ? [{
710
716
  y: j(e),
711
717
  x: j(r)
712
718
  }] : [];
@@ -720,108 +726,108 @@ var I = ({ ys: e, xs: t }) => {
720
726
  let n = P(e), r = P(t);
721
727
  return e.reduce((e, i, a) => e + (i - n) * ((t[a] ?? r) - r), 0);
722
728
  };
723
- function nn(e) {
724
- if (e.ys.length < Qt) return v;
729
+ function cn(e) {
730
+ if (e.ys.length < rn) return y;
725
731
  let t = Math.sqrt(F(e.ys) * F(e.xs));
726
- return t === 0 ? v : I(e) / t;
732
+ return t === 0 ? y : I(e) / t;
727
733
  }
728
- function rn(e) {
729
- if (e.ys.length < Qt) return v;
734
+ function ln(e) {
735
+ if (e.ys.length < rn) return y;
730
736
  let t = F(e.xs);
731
- return t === 0 ? v : I(e) / t;
737
+ return t === 0 ? y : I(e) / t;
732
738
  }
733
- function an(e) {
734
- let t = rn(e);
739
+ function un(e) {
740
+ let t = ln(e);
735
741
  return typeof t == "number" ? P(e.ys) - t * P(e.xs) : t;
736
742
  }
737
- function on(e) {
738
- let t = nn(e);
743
+ function dn(e) {
744
+ let t = cn(e);
739
745
  return typeof t == "number" ? t * t : t;
740
746
  }
741
- function sn(e, t) {
742
- if (e.length === 0 || t < 0 || t > $t) return b;
747
+ function fn(e, t) {
748
+ if (e.length === 0 || t < 0 || t > an) return x;
743
749
  let n = [...e].sort((e, t) => e - t), r = t * (n.length - 1), i = n[Math.floor(r)] ?? 0, a = n[Math.ceil(r)] ?? i;
744
750
  return i + (r - Math.floor(r)) * (a - i);
745
751
  }
746
- function cn(e, t) {
752
+ function pn(e, t) {
747
753
  let n = Math.trunc(t);
748
- return n < 0 || n > en ? b : sn(e, n / en);
754
+ return n < 0 || n > on ? x : fn(e, n / on);
749
755
  }
750
- function ln(e, t) {
756
+ function mn(e, t) {
751
757
  let n = Math.ceil(t);
752
- return n < 1 || n > e.length ? b : [...e].sort((e, t) => t - e)[n - 1] ?? b;
758
+ return n < 1 || n > e.length ? x : [...e].sort((e, t) => t - e)[n - 1] ?? x;
753
759
  }
754
- function un(e, t) {
760
+ function hn(e, t) {
755
761
  let n = Math.ceil(t);
756
- return n < 1 || n > e.length ? b : [...e].sort((e, t) => e - t)[n - 1] ?? b;
762
+ return n < 1 || n > e.length ? x : [...e].sort((e, t) => e - t)[n - 1] ?? x;
757
763
  }
758
- function dn(e, t, n) {
759
- return t.includes(e) ? t.filter((t) => n ? t < e : t > e).length + 1 : x;
764
+ function gn(e, t, n) {
765
+ return t.includes(e) ? t.filter((t) => n ? t < e : t > e).length + 1 : S;
760
766
  }
761
- function fn(e) {
762
- return e.length === 0 ? v : F(e) / e.length;
767
+ function _n(e) {
768
+ return e.length === 0 ? y : F(e) / e.length;
763
769
  }
764
- function pn(e) {
765
- let t = fn(e);
770
+ function vn(e) {
771
+ let t = _n(e);
766
772
  return typeof t == "number" ? Math.sqrt(t) : t;
767
773
  }
768
- function mn(e, t) {
769
- return t.some(({ range: t }) => t.length !== e) ? y : Array.from({ length: e }, (e, n) => t.every(({ range: e, matches: t }) => t(e[n] ?? "")));
774
+ function yn(e, t) {
775
+ return t.some(({ range: t }) => t.length !== e) ? b : Array.from({ length: e }, (e, n) => t.every(({ range: e, matches: t }) => t(e[n] ?? "")));
770
776
  }
771
777
  //#endregion
772
778
  //#region src/engine/functions/statistical-analysis.ts
773
- var L = 255, hn = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), gn = (e, t, n = 0) => {
779
+ var L = 255, bn = (e, t, n) => E(t.evaluateFormula(O(t, e, n))), xn = (e, t, n = 0) => {
774
780
  let r = k(t), [i, a] = [r(O(t, e, n)), r(O(t, e, n + 1))];
775
- return [...i, ...a].find(S) ?? tn(i, a);
781
+ return [...i, ...a].find(C) ?? sn(i, a);
776
782
  }, R = (e) => (t, n) => {
777
- let r = gn(t, n);
783
+ let r = xn(t, n);
778
784
  return "ys" in r ? e(r) : r;
779
- }, _n = (e) => (t, n) => {
780
- let r = jt([O(n, t, 0)], n);
785
+ }, Sn = (e) => (t, n) => {
786
+ let r = It([O(n, t, 0)], n);
781
787
  if (!Array.isArray(r)) return r;
782
- let i = hn(t, n, 1);
788
+ let i = bn(t, n, 1);
783
789
  return typeof i == "number" ? e(r, i) : i;
784
- }, vn = (e, t) => {
785
- let n = hn(e, t, 0);
790
+ }, Cn = (e, t) => {
791
+ let n = bn(e, t, 0);
786
792
  if (typeof n != "number") return n;
787
- let r = jt([O(t, e, 1)], t);
793
+ let r = It([O(t, e, 1)], t);
788
794
  if (!Array.isArray(r)) return r;
789
- let i = e.length > 2 ? hn(e, t, 2) : 0;
790
- return typeof i == "number" ? dn(n, r, i !== 0) : i;
791
- }, yn = (e, t, n) => {
795
+ let i = e.length > 2 ? bn(e, t, 2) : 0;
796
+ return typeof i == "number" ? gn(n, r, i !== 0) : i;
797
+ }, wn = (e, t, n) => {
792
798
  let r = k(t), i = Array.from({ length: Math.ceil((e.length - n) / 2) }, (e, t) => n + t * 2).map((n) => ({
793
799
  range: r(O(t, e, n)),
794
- matches: gt(t, e, n + 1)
800
+ matches: xt(t, e, n + 1)
795
801
  }));
796
- return i.map(({ matches: e }) => e).find(S) || i.flatMap(({ range: e, matches: t }) => typeof t == "function" ? [{
802
+ return i.map(({ matches: e }) => e).find(C) || i.flatMap(({ range: e, matches: t }) => typeof t == "function" ? [{
797
803
  range: e,
798
804
  matches: t
799
805
  }] : []);
800
- }, bn = (e, t) => {
801
- let n = k(t)(O(t, e, 0)), r = yn(e, t, 1);
806
+ }, Tn = (e, t) => {
807
+ let n = k(t)(O(t, e, 0)), r = wn(e, t, 1);
802
808
  if (!Array.isArray(r)) return r;
803
- let i = mn(n.length, r);
809
+ let i = yn(n.length, r);
804
810
  if (!Array.isArray(i)) return i;
805
811
  let a = n.filter((e, t) => i[t]);
806
- return a.find(S) ?? a;
807
- }, xn = (e, t) => {
808
- let n = bn(e, t);
812
+ return a.find(C) ?? a;
813
+ }, En = (e, t) => {
814
+ let n = Tn(e, t);
809
815
  return Array.isArray(n) ? n.reduce((e, t) => e + j(t), 0) : n;
810
- }, Sn = (e, t) => {
811
- let n = bn(e, t);
816
+ }, Dn = (e, t) => {
817
+ let n = Tn(e, t);
812
818
  if (!Array.isArray(n)) return n;
813
- let r = n.filter(C).map(j);
814
- return r.length > 0 ? r.reduce((e, t) => e + t, 0) / r.length : v;
815
- }, Cn = (e) => (t, n) => {
816
- let r = bn(t, n);
819
+ let r = n.filter(T).map(j);
820
+ return r.length > 0 ? r.reduce((e, t) => e + t, 0) / r.length : y;
821
+ }, On = (e) => (t, n) => {
822
+ let r = Tn(t, n);
817
823
  if (!Array.isArray(r)) return r;
818
- let i = r.filter(C).map(j);
824
+ let i = r.filter(T).map(j);
819
825
  return i.length > 0 ? i.reduce((t, n) => e(t, n)) : 0;
820
826
  };
821
827
  [
822
828
  {
823
829
  name: "CORREL",
824
- handler: R(nn),
830
+ handler: R(cn),
825
831
  minArgs: 2,
826
832
  maxArgs: 2,
827
833
  description: "Returns the correlation coefficient of two ranges",
@@ -829,7 +835,7 @@ var L = 255, hn = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), gn = (e, t, n =
829
835
  },
830
836
  {
831
837
  name: "SLOPE",
832
- handler: R(rn),
838
+ handler: R(ln),
833
839
  minArgs: 2,
834
840
  maxArgs: 2,
835
841
  description: "Returns the slope of the least-squares line through known_y and known_x",
@@ -837,7 +843,7 @@ var L = 255, hn = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), gn = (e, t, n =
837
843
  },
838
844
  {
839
845
  name: "INTERCEPT",
840
- handler: R(an),
846
+ handler: R(un),
841
847
  minArgs: 2,
842
848
  maxArgs: 2,
843
849
  description: "Returns where the least-squares line crosses the y axis",
@@ -845,7 +851,7 @@ var L = 255, hn = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), gn = (e, t, n =
845
851
  },
846
852
  {
847
853
  name: "RSQ",
848
- handler: R(on),
854
+ handler: R(dn),
849
855
  minArgs: 2,
850
856
  maxArgs: 2,
851
857
  description: "Returns the square of the correlation coefficient",
@@ -853,7 +859,7 @@ var L = 255, hn = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), gn = (e, t, n =
853
859
  },
854
860
  {
855
861
  name: "PERCENTILE",
856
- handler: _n(sn),
862
+ handler: Sn(fn),
857
863
  minArgs: 2,
858
864
  maxArgs: 2,
859
865
  description: "Returns the k-th percentile (k from 0 to 1), interpolated like PERCENTILE.INC",
@@ -861,7 +867,7 @@ var L = 255, hn = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), gn = (e, t, n =
861
867
  },
862
868
  {
863
869
  name: "QUARTILE",
864
- handler: _n(cn),
870
+ handler: Sn(pn),
865
871
  minArgs: 2,
866
872
  maxArgs: 2,
867
873
  description: "Returns a quartile (0 to 4), interpolated like QUARTILE.INC",
@@ -869,7 +875,7 @@ var L = 255, hn = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), gn = (e, t, n =
869
875
  },
870
876
  {
871
877
  name: "LARGE",
872
- handler: _n(ln),
878
+ handler: Sn(mn),
873
879
  minArgs: 2,
874
880
  maxArgs: 2,
875
881
  description: "Returns the k-th largest value",
@@ -877,7 +883,7 @@ var L = 255, hn = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), gn = (e, t, n =
877
883
  },
878
884
  {
879
885
  name: "SMALL",
880
- handler: _n(un),
886
+ handler: Sn(hn),
881
887
  minArgs: 2,
882
888
  maxArgs: 2,
883
889
  description: "Returns the k-th smallest value",
@@ -885,7 +891,7 @@ var L = 255, hn = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), gn = (e, t, n =
885
891
  },
886
892
  {
887
893
  name: "RANK",
888
- handler: vn,
894
+ handler: Cn,
889
895
  minArgs: 2,
890
896
  maxArgs: 3,
891
897
  description: "Returns the rank of a number in a range (largest first unless order is non-zero)",
@@ -893,7 +899,7 @@ var L = 255, hn = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), gn = (e, t, n =
893
899
  },
894
900
  {
895
901
  name: "STDEVP",
896
- handler: N(pn),
902
+ handler: N(vn),
897
903
  minArgs: 1,
898
904
  maxArgs: L,
899
905
  description: "Returns the population standard deviation",
@@ -901,7 +907,7 @@ var L = 255, hn = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), gn = (e, t, n =
901
907
  },
902
908
  {
903
909
  name: "VARP",
904
- handler: N(fn),
910
+ handler: N(_n),
905
911
  minArgs: 1,
906
912
  maxArgs: L,
907
913
  description: "Returns the population variance",
@@ -909,7 +915,7 @@ var L = 255, hn = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), gn = (e, t, n =
909
915
  },
910
916
  {
911
917
  name: "SUMIFS",
912
- handler: xn,
918
+ handler: En,
913
919
  minArgs: 3,
914
920
  maxArgs: L,
915
921
  description: "Sums the cells whose rows meet every condition",
@@ -918,9 +924,9 @@ var L = 255, hn = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), gn = (e, t, n =
918
924
  {
919
925
  name: "COUNTIFS",
920
926
  handler: (e, t) => {
921
- let n = yn(e, t, 0);
927
+ let n = wn(e, t, 0);
922
928
  if (!Array.isArray(n)) return n;
923
- let r = mn(n[0]?.range.length ?? 0, n);
929
+ let r = yn(n[0]?.range.length ?? 0, n);
924
930
  return Array.isArray(r) ? r.filter(Boolean).length : r;
925
931
  },
926
932
  minArgs: 2,
@@ -930,7 +936,7 @@ var L = 255, hn = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), gn = (e, t, n =
930
936
  },
931
937
  {
932
938
  name: "MAXIFS",
933
- handler: Cn(Math.max),
939
+ handler: On(Math.max),
934
940
  minArgs: 3,
935
941
  maxArgs: L,
936
942
  description: "Returns the largest value whose row meets every condition (0 when none does)",
@@ -938,7 +944,7 @@ var L = 255, hn = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), gn = (e, t, n =
938
944
  },
939
945
  {
940
946
  name: "MINIFS",
941
- handler: Cn(Math.min),
947
+ handler: On(Math.min),
942
948
  minArgs: 3,
943
949
  maxArgs: L,
944
950
  description: "Returns the smallest value whose row meets every condition (0 when none does)",
@@ -946,7 +952,7 @@ var L = 255, hn = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), gn = (e, t, n =
946
952
  },
947
953
  {
948
954
  name: "AVERAGEIFS",
949
- handler: Sn,
955
+ handler: Dn,
950
956
  minArgs: 3,
951
957
  maxArgs: L,
952
958
  description: "Averages the cells whose rows meet every condition",
@@ -958,43 +964,43 @@ var L = 255, hn = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), gn = (e, t, n =
958
964
  }));
959
965
  //#endregion
960
966
  //#region src/engine/functions/regression-math.ts
961
- var wn = 3, Tn = 2;
962
- function En(e, t) {
963
- if (e.ys.length === 0) return x;
964
- let n = rn(e);
967
+ var kn = 3, An = 2;
968
+ function jn(e, t) {
969
+ if (e.ys.length === 0) return S;
970
+ let n = ln(e);
965
971
  return typeof n == "number" ? P(e.ys) + n * (t - P(e.xs)) : n;
966
972
  }
967
- function Dn(e) {
973
+ function Mn(e) {
968
974
  let t = e.ys.length;
969
- if (t === 0) return x;
975
+ if (t === 0) return S;
970
976
  let n = F(e.xs);
971
- if (t < wn || n === 0) return v;
977
+ if (t < kn || n === 0) return y;
972
978
  let r = I(e) / n, [i, a] = [P(e.ys), P(e.xs)], o = e.ys.reduce((t, n, o) => t + (n - i - r * ((e.xs[o] ?? a) - a)) ** 2, 0);
973
979
  return Math.sqrt(o / (t - 2));
974
980
  }
975
- function On(e) {
976
- return e.ys.length === 0 ? v : I(e) / e.ys.length;
981
+ function Nn(e) {
982
+ return e.ys.length === 0 ? y : I(e) / e.ys.length;
977
983
  }
978
- function kn(e) {
979
- return e.ys.length < Tn ? v : I(e) / (e.ys.length - 1);
984
+ function Pn(e) {
985
+ return e.ys.length < An ? y : I(e) / (e.ys.length - 1);
980
986
  }
981
- var An = (e) => Array.from({ length: e }, (e, t) => t + 1);
982
- function jn(e, t, n, r) {
983
- if (e.length !== t.length) return De;
984
- let i = [...e, ...t], a = i.find(S);
987
+ var Fn = (e) => Array.from({ length: e }, (e, t) => t + 1);
988
+ function In(e, t, n, r) {
989
+ if (e.length !== t.length) return Ee;
990
+ let i = [...e, ...t], a = i.find(C);
985
991
  if (a) return a;
986
- if (e.length === 0 || !i.every(C)) return y;
992
+ if (e.length === 0 || !i.every(T)) return b;
987
993
  let o = {
988
994
  ys: e.map(j),
989
995
  xs: t.map(j)
990
996
  };
991
- return r ? Mn(o, n) : Nn(o, n);
997
+ return r ? Ln(o, n) : Rn(o, n);
992
998
  }
993
- function Mn(e, t) {
999
+ function Ln(e, t) {
994
1000
  let n = F(e.xs), r = P(e.ys);
995
1001
  return n === 0 ? r : r + I(e) / n * (t - P(e.xs));
996
1002
  }
997
- function Nn({ ys: e, xs: t }, n) {
1003
+ function Rn({ ys: e, xs: t }, n) {
998
1004
  let r = t.reduce((e, t) => e + t * t, 0), i = e.reduce((e, n, r) => e + n * (t[r] ?? 0), 0);
999
1005
  return r === 0 ? 0 : i / r * n;
1000
1006
  }
@@ -1004,7 +1010,7 @@ function z(e) {
1004
1010
  if (typeof e == "boolean") return e;
1005
1011
  if (e == null) return !1;
1006
1012
  if (typeof e == "number") return e !== 0;
1007
- if (S(e)) return !0;
1013
+ if (C(e)) return !0;
1008
1014
  let t = e.trim();
1009
1015
  if (t === "") return !1;
1010
1016
  let n = t.toLowerCase();
@@ -1015,26 +1021,26 @@ function z(e) {
1015
1021
  }
1016
1022
  //#endregion
1017
1023
  //#region src/engine/functions/regression.ts
1018
- var Pn = (e, t) => {
1019
- let n = hn(e, t, 0);
1024
+ var zn = (e, t) => {
1025
+ let n = bn(e, t, 0);
1020
1026
  if (typeof n != "number") return n;
1021
- let r = gn(e, t, 1);
1022
- return "ys" in r ? En(r, n) : r;
1027
+ let r = xn(e, t, 1);
1028
+ return "ys" in r ? jn(r, n) : r;
1023
1029
  };
1024
- function Fn(e, t) {
1025
- let [n, ...r] = At([e], t, k(t));
1026
- return n === void 0 || r.length > 0 ? y : n.isScalar ? w(n.value) : S(n.value) ? n.value : C(n.value) ? j(n.value) : y;
1030
+ function Bn(e, t) {
1031
+ let [n, ...r] = Ft([e], t, k(t));
1032
+ return n === void 0 || r.length > 0 ? b : n.isScalar ? E(n.value) : C(n.value) ? n.value : T(n.value) ? j(n.value) : b;
1027
1033
  }
1028
- function In(e, t) {
1034
+ function Vn(e, t) {
1029
1035
  let n = e[3]?.trim();
1030
1036
  if (!n) return !0;
1031
1037
  let r = t.evaluateFormula(n);
1032
- return S(r) ? r : z(r);
1038
+ return C(r) ? r : z(r);
1033
1039
  }
1034
1040
  [
1035
1041
  {
1036
1042
  name: "FORECAST.LINEAR",
1037
- handler: Pn,
1043
+ handler: zn,
1038
1044
  minArgs: 3,
1039
1045
  maxArgs: 3,
1040
1046
  description: "Returns the value of the least-squares line through known_y and known_x at x",
@@ -1043,10 +1049,10 @@ function In(e, t) {
1043
1049
  {
1044
1050
  name: "TREND",
1045
1051
  handler: (e, t) => {
1046
- let n = k(t), r = n(O(t, e, 0)), i = e[1]?.trim(), a = i ? n(i) : An(r.length), o = Fn(O(t, e, 2), t);
1052
+ let n = k(t), r = n(O(t, e, 0)), i = e[1]?.trim(), a = i ? n(i) : Fn(r.length), o = Bn(O(t, e, 2), t);
1047
1053
  if (typeof o != "number") return o;
1048
- let s = In(e, t);
1049
- return typeof s == "boolean" ? jn(r, a, o, s) : s;
1054
+ let s = Vn(e, t);
1055
+ return typeof s == "boolean" ? In(r, a, o, s) : s;
1050
1056
  },
1051
1057
  minArgs: 3,
1052
1058
  maxArgs: 4,
@@ -1055,7 +1061,7 @@ function In(e, t) {
1055
1061
  },
1056
1062
  {
1057
1063
  name: "STEYX",
1058
- handler: R(Dn),
1064
+ handler: R(Mn),
1059
1065
  minArgs: 2,
1060
1066
  maxArgs: 2,
1061
1067
  description: "Returns the standard error of the y predicted by the least-squares line",
@@ -1063,7 +1069,7 @@ function In(e, t) {
1063
1069
  },
1064
1070
  {
1065
1071
  name: "COVARIANCE.P",
1066
- handler: R(On),
1072
+ handler: R(Nn),
1067
1073
  minArgs: 2,
1068
1074
  maxArgs: 2,
1069
1075
  description: "Returns the population covariance of two ranges",
@@ -1071,7 +1077,7 @@ function In(e, t) {
1071
1077
  },
1072
1078
  {
1073
1079
  name: "COVARIANCE.S",
1074
- handler: R(kn),
1080
+ handler: R(Pn),
1075
1081
  minArgs: 2,
1076
1082
  maxArgs: 2,
1077
1083
  description: "Returns the sample covariance of two ranges",
@@ -1083,7 +1089,7 @@ function In(e, t) {
1083
1089
  }));
1084
1090
  //#endregion
1085
1091
  //#region src/engine/functions/special-functions.ts
1086
- var Ln = .5 * Math.log(2 * Math.PI), Rn = 1e-16, zn = 1e-300, Bn = 2e3, B = (e) => Math.abs(e) < zn ? zn : e, Vn = 10, Hn = 7, Un = [
1092
+ var Hn = .5 * Math.log(2 * Math.PI), Un = 1e-16, Wn = 1e-300, Gn = 2e3, B = (e) => Math.abs(e) < Wn ? Wn : e, Kn = 10, qn = 7, Jn = [
1087
1093
  .9999999999998099,
1088
1094
  676.5203681218851,
1089
1095
  -1259.1392167224028,
@@ -1093,7 +1099,7 @@ var Ln = .5 * Math.log(2 * Math.PI), Rn = 1e-16, zn = 1e-300, Bn = 2e3, B = (e)
1093
1099
  -.13857109526572012,
1094
1100
  9984369578019572e-21,
1095
1101
  1.5056327351493116e-7
1096
- ], Wn = [
1102
+ ], Yn = [
1097
1103
  1 / 12,
1098
1104
  -1 / 360,
1099
1105
  1 / 1260,
@@ -1103,141 +1109,141 @@ var Ln = .5 * Math.log(2 * Math.PI), Rn = 1e-16, zn = 1e-300, Bn = 2e3, B = (e)
1103
1109
  1 / 156,
1104
1110
  -3617 / 122400
1105
1111
  ];
1106
- function Gn(e) {
1112
+ function Xn(e) {
1107
1113
  let t = 1 / (e * e);
1108
- return Wn.reduceRight((e, n) => e * t + n, 0) / e;
1114
+ return Yn.reduceRight((e, n) => e * t + n, 0) / e;
1109
1115
  }
1110
- function Kn(e) {
1111
- let t = e - 1, n = Un.slice(1).reduce((e, n, r) => e + n / (t + r + 1), Un[0] ?? 1), r = t + Hn + .5;
1112
- return Ln + (t + .5) * Math.log(r) - r + Math.log(n);
1116
+ function Zn(e) {
1117
+ let t = e - 1, n = Jn.slice(1).reduce((e, n, r) => e + n / (t + r + 1), Jn[0] ?? 1), r = t + qn + .5;
1118
+ return Hn + (t + .5) * Math.log(r) - r + Math.log(n);
1113
1119
  }
1114
1120
  function V(e) {
1115
- return e >= Vn ? Ln + (e - .5) * Math.log(e) - e + Gn(e) : Kn(e);
1121
+ return e >= Kn ? Hn + (e - .5) * Math.log(e) - e + Xn(e) : Zn(e);
1116
1122
  }
1117
- function qn(e, t) {
1123
+ function Qn(e, t) {
1118
1124
  let n = Math.min(e, t), r = Math.max(e, t);
1119
- if (r >= Vn) {
1120
- let e = Gn(r) - Gn(n + r);
1125
+ if (r >= Kn) {
1126
+ let e = Xn(r) - Xn(n + r);
1121
1127
  return V(n) + e + n - n * Math.log(n + r) + (r - .5) * Math.log1p(-n / (n + r));
1122
1128
  }
1123
1129
  return V(n) + V(r) - V(n + r);
1124
1130
  }
1125
- function Jn(e, t, n) {
1131
+ function $n(e, t, n) {
1126
1132
  let r = {
1127
1133
  c: 1,
1128
1134
  d: 1 / B(1 - (t + n) * e / (t + 1)),
1129
1135
  result: 0
1130
1136
  };
1131
1137
  r.result = r.d;
1132
- for (let i = 1; i <= Bn; i += 1) {
1138
+ for (let i = 1; i <= Gn; i += 1) {
1133
1139
  let a = i * (n - i) * e / ((t + 2 * i - 1) * (t + 2 * i));
1134
1140
  r.d = 1 / B(1 + a * r.d), r.c = B(1 + a / r.c), r.result *= r.d * r.c;
1135
1141
  let o = -(t + i) * (t + n + i) * e / ((t + 2 * i) * (t + 2 * i + 1));
1136
1142
  r.d = 1 / B(1 + o * r.d), r.c = B(1 + o / r.c);
1137
1143
  let s = r.d * r.c;
1138
- if (r.result *= s, Math.abs(s - 1) < Rn) return r.result;
1144
+ if (r.result *= s, Math.abs(s - 1) < Un) return r.result;
1139
1145
  }
1140
1146
  return r.result;
1141
1147
  }
1142
- var Yn = 1e4, Xn = 8;
1143
- function Zn(e, t, n, r, i) {
1148
+ var er = 1e4, tr = 8;
1149
+ function nr(e, t, n, r, i) {
1144
1150
  let a = {
1145
1151
  term: 1,
1146
1152
  sum: 1
1147
1153
  };
1148
- for (let t = 0; t < Bn && a.term > a.sum * Rn; t += 1) a.term *= (r + i + t) / (r + 1 + t) * e, a.sum += a.term;
1149
- return Math.exp(r * t + i * n - qn(r, i)) / r * a.sum;
1154
+ for (let t = 0; t < Gn && a.term > a.sum * Un; t += 1) a.term *= (r + i + t) / (r + 1 + t) * e, a.sum += a.term;
1155
+ return Math.exp(r * t + i * n - Qn(r, i)) / r * a.sum;
1150
1156
  }
1151
- function Qn(e, t, n, r) {
1157
+ function rr(e, t, n, r) {
1152
1158
  if (e === -Infinity) return 0;
1153
1159
  if (t === -Infinity) return 1;
1154
1160
  let i = Math.exp(e), a = Math.exp(t);
1155
- if (Math.max(n, r) >= Yn && a * (n + r) <= Xn) return 1 - Zn(a, t, e, r, n);
1156
- let o = Math.exp(n * e + r * t - qn(n, r));
1157
- return i < (n + 1) / (n + r + 2) ? o * Jn(i, n, r) / n : 1 - o * Jn(a, r, n) / r;
1161
+ if (Math.max(n, r) >= er && a * (n + r) <= tr) return 1 - nr(a, t, e, r, n);
1162
+ let o = Math.exp(n * e + r * t - Qn(n, r));
1163
+ return i < (n + 1) / (n + r + 2) ? o * $n(i, n, r) / n : 1 - o * $n(a, r, n) / r;
1158
1164
  }
1159
- function $n(e, t) {
1165
+ function ir(e, t) {
1160
1166
  let n = {
1161
1167
  term: 1 / e,
1162
1168
  sum: 1 / e
1163
1169
  };
1164
- for (let r = 1; r <= Bn && Math.abs(n.term) >= Math.abs(n.sum) * Rn; r += 1) n.term *= t / (e + r), n.sum += n.term;
1170
+ for (let r = 1; r <= Gn && Math.abs(n.term) >= Math.abs(n.sum) * Un; r += 1) n.term *= t / (e + r), n.sum += n.term;
1165
1171
  return n.sum * Math.exp(-t + e * Math.log(t) - V(e));
1166
1172
  }
1167
- function er(e, t) {
1173
+ function ar(e, t) {
1168
1174
  let n = {
1169
1175
  b: t + 1 - e,
1170
- c: 1 / zn,
1176
+ c: 1 / Wn,
1171
1177
  d: 0,
1172
1178
  result: 0
1173
1179
  };
1174
1180
  n.d = 1 / B(n.b), n.result = n.d;
1175
- for (let t = 1; t <= Bn; t += 1) {
1181
+ for (let t = 1; t <= Gn; t += 1) {
1176
1182
  let r = -t * (t - e);
1177
1183
  n.b += 2, n.d = 1 / B(r * n.d + n.b), n.c = B(n.b + r / n.c);
1178
1184
  let i = n.d * n.c;
1179
- if (n.result *= i, Math.abs(i - 1) < Rn) break;
1185
+ if (n.result *= i, Math.abs(i - 1) < Un) break;
1180
1186
  }
1181
1187
  return Math.exp(-t + e * Math.log(t) - V(e)) * n.result;
1182
1188
  }
1183
- function tr(e, t) {
1184
- return t <= 0 ? 1 : t < e + 1 ? 1 - $n(e, t) : er(e, t);
1189
+ function or(e, t) {
1190
+ return t <= 0 ? 1 : t < e + 1 ? 1 - ir(e, t) : ar(e, t);
1185
1191
  }
1186
1192
  //#endregion
1187
1193
  //#region src/engine/functions/distribution-math.ts
1188
- var nr = Math.sqrt(2 * Math.PI), rr = (e) => e === 0 ? 0 : -e, ir = 1e-15, ar = 200, or = (e) => Math.exp(-.5 * e * e) / nr;
1189
- function sr(e) {
1190
- let t = .5 * tr(.5, .5 * e * e);
1194
+ var sr = Math.sqrt(2 * Math.PI), cr = (e) => e === 0 ? 0 : -e, lr = 1e-15, ur = 200, dr = (e) => Math.exp(-.5 * e * e) / sr;
1195
+ function fr(e) {
1196
+ let t = .5 * or(.5, .5 * e * e);
1191
1197
  return e >= 0 ? t : 1 - t;
1192
1198
  }
1193
- var cr = (e) => sr(-e), lr = [
1199
+ var pr = (e) => fr(-e), mr = [
1194
1200
  -39.69683028665376,
1195
1201
  220.9460984245205,
1196
1202
  -275.9285104469687,
1197
1203
  138.357751867269,
1198
1204
  -30.66479806614716,
1199
1205
  2.506628277459239
1200
- ], ur = [
1206
+ ], hr = [
1201
1207
  -54.47609879822406,
1202
1208
  161.5858368580409,
1203
1209
  -155.6989798598866,
1204
1210
  66.80131188771972,
1205
1211
  -13.28068155288572
1206
- ], dr = [
1212
+ ], gr = [
1207
1213
  -.007784894002430293,
1208
1214
  -.3223964580411365,
1209
1215
  -2.400758277161838,
1210
1216
  -2.549732539343734,
1211
1217
  4.374664141464968,
1212
1218
  2.938163982698783
1213
- ], fr = [
1219
+ ], _r = [
1214
1220
  .007784695709041462,
1215
1221
  .3224671290700398,
1216
1222
  2.445134137142996,
1217
1223
  3.754408661907416
1218
- ], pr = .02425, mr = (e, t) => e.reduce((e, n) => e * t + n, 0);
1219
- function hr(e) {
1220
- if (e < pr) {
1224
+ ], vr = .02425, yr = (e, t) => e.reduce((e, n) => e * t + n, 0);
1225
+ function br(e) {
1226
+ if (e < vr) {
1221
1227
  let t = Math.sqrt(-2 * Math.log(e));
1222
- return mr(dr, t) / (mr(fr, t) * t + 1);
1228
+ return yr(gr, t) / (yr(_r, t) * t + 1);
1223
1229
  }
1224
1230
  let t = e - .5, n = t * t;
1225
- return mr(lr, n) * t / (mr(ur, n) * n + 1);
1231
+ return yr(mr, n) * t / (yr(hr, n) * n + 1);
1226
1232
  }
1227
- function gr(e) {
1228
- if (e > .5) return rr(gr(1 - e));
1229
- let t = { z: hr(e) };
1233
+ function xr(e) {
1234
+ if (e > .5) return cr(xr(1 - e));
1235
+ let t = { z: br(e) };
1230
1236
  for (let n = 0; n < 3; n += 1) {
1231
- let n = (cr(t.z) - e) / or(t.z);
1237
+ let n = (pr(t.z) - e) / dr(t.z);
1232
1238
  t.z -= n / (1 + t.z * n / 2);
1233
1239
  }
1234
1240
  return t.z;
1235
1241
  }
1236
- var _r = (e) => rr(gr(e));
1237
- function vr(e, t) {
1238
- return Math.exp(-qn(t / 2, .5) - .5 * Math.log(t) - (t + 1) / 2 * Math.log1p(e * e / t));
1242
+ var Sr = (e) => cr(xr(e));
1243
+ function Cr(e, t) {
1244
+ return Math.exp(-Qn(t / 2, .5) - .5 * Math.log(t) - (t + 1) / 2 * Math.log1p(e * e / t));
1239
1245
  }
1240
- function yr(e) {
1246
+ function wr(e) {
1241
1247
  if (e > 0) {
1242
1248
  let t = Math.log1p(Math.exp(-e));
1243
1249
  return {
@@ -1253,38 +1259,38 @@ function yr(e) {
1253
1259
  }
1254
1260
  function H(e, t) {
1255
1261
  if (e === 0) return .5;
1256
- let { logX: n, logComplement: r } = yr(Math.log(t) - 2 * Math.log(Math.abs(e))), i = .5 * Qn(n, r, t / 2, .5);
1262
+ let { logX: n, logComplement: r } = wr(Math.log(t) - 2 * Math.log(Math.abs(e))), i = .5 * rr(n, r, t / 2, .5);
1257
1263
  return e >= 0 ? i : 1 - i;
1258
1264
  }
1259
- var br = (e, t) => H(-e, t);
1260
- function xr(e, t) {
1265
+ var Tr = (e, t) => H(-e, t);
1266
+ function Er(e, t) {
1261
1267
  let n = { high: 1 };
1262
1268
  for (; H(n.high, t) > e && n.high < Number.MAX_VALUE / 2;) n.high *= 2;
1263
1269
  return n.high;
1264
1270
  }
1265
- function Sr(e, t, n, r) {
1271
+ function Dr(e, t, n, r) {
1266
1272
  let i = H(e, n);
1267
1273
  i > t ? r.low = e : r.high = e;
1268
- let a = e + (Math.log(i) - Math.log(t)) * i / vr(e, n);
1274
+ let a = e + (Math.log(i) - Math.log(t)) * i / Cr(e, n);
1269
1275
  return a > r.low && a < r.high && Number.isFinite(a) ? a : (r.low + r.high) / 2;
1270
1276
  }
1271
- function Cr(e, t) {
1277
+ function Or(e, t) {
1272
1278
  if (e === .5) return 0;
1273
1279
  let n = {
1274
1280
  low: 0,
1275
- high: xr(e, t)
1276
- }, r = { t: Math.min(Math.max(_r(e), 0), n.high) };
1277
- for (let i = 0; i < ar; i += 1) {
1278
- let i = Sr(r.t, e, t, n), a = Math.abs(i - r.t) <= ir * Math.abs(i);
1281
+ high: Er(e, t)
1282
+ }, r = { t: Math.min(Math.max(Sr(e), 0), n.high) };
1283
+ for (let i = 0; i < ur; i += 1) {
1284
+ let i = Dr(r.t, e, t, n), a = Math.abs(i - r.t) <= lr * Math.abs(i);
1279
1285
  if (r.t = i, a) break;
1280
1286
  }
1281
1287
  return r.t;
1282
1288
  }
1283
- function wr(e, t) {
1284
- return e > .5 ? rr(Cr(1 - e, t)) : Cr(e, t);
1289
+ function kr(e, t) {
1290
+ return e > .5 ? cr(Or(1 - e, t)) : Or(e, t);
1285
1291
  }
1286
- var Tr = (e, t) => rr(wr(e, t));
1287
- function Er(e) {
1292
+ var Ar = (e, t) => cr(kr(e, t));
1293
+ function jr(e) {
1288
1294
  let t = e.length, n = e.reduce((e, t) => e + t, 0) / t;
1289
1295
  return {
1290
1296
  count: t,
@@ -1292,96 +1298,96 @@ function Er(e) {
1292
1298
  variance: e.reduce((e, t) => e + (t - n) ** 2, 0) / (t - 1)
1293
1299
  };
1294
1300
  }
1295
- function Dr(e) {
1296
- let { count: t, mean: n, variance: r } = Er(e);
1301
+ function Mr(e) {
1302
+ let { count: t, mean: n, variance: r } = jr(e);
1297
1303
  return {
1298
1304
  t: n / Math.sqrt(r / t),
1299
1305
  df: t - 1
1300
1306
  };
1301
1307
  }
1302
- function Or(e, t) {
1308
+ function Nr(e, t) {
1303
1309
  let n = e.count + t.count - 2, r = ((e.count - 1) * e.variance + (t.count - 1) * t.variance) / n;
1304
1310
  return {
1305
1311
  t: (e.mean - t.mean) / Math.sqrt(r * (1 / e.count + 1 / t.count)),
1306
1312
  df: n
1307
1313
  };
1308
1314
  }
1309
- function kr(e, t) {
1315
+ function Pr(e, t) {
1310
1316
  let n = e.variance / e.count, r = t.variance / t.count, i = (n + r) ** 2 / (n ** 2 / (e.count - 1) + r ** 2 / (t.count - 1));
1311
1317
  return {
1312
1318
  t: (e.mean - t.mean) / Math.sqrt(n + r),
1313
1319
  df: i
1314
1320
  };
1315
1321
  }
1316
- var Ar = ({ t: e, df: t }, n) => n * H(Math.abs(e), t), jr = (e, t, n) => w(t.evaluateFormula(O(t, e, n)));
1317
- function Mr(e, t, n) {
1322
+ var Fr = ({ t: e, df: t }, n) => n * H(Math.abs(e), t), Ir = (e, t, n) => E(t.evaluateFormula(O(t, e, n)));
1323
+ function Lr(e, t, n) {
1318
1324
  let r = t.evaluateFormula(O(t, e, n));
1319
- return S(r) ? r : z(r);
1325
+ return C(r) ? r : z(r);
1320
1326
  }
1321
- function Nr(e, t, n) {
1322
- let r = Array.from({ length: n }, (n, r) => jr(e, t, r));
1327
+ function Rr(e, t, n) {
1328
+ let r = Array.from({ length: n }, (n, r) => Ir(e, t, r));
1323
1329
  return r.find((e) => typeof e != "number") ?? r.filter((e) => typeof e == "number");
1324
1330
  }
1325
1331
  var U = (e, t) => (n, r) => {
1326
- let i = Nr(n, r, e);
1332
+ let i = Rr(n, r, e);
1327
1333
  return Array.isArray(i) ? t(i) : i;
1328
- }, Pr = (e) => {
1334
+ }, zr = (e) => {
1329
1335
  let t = Math.trunc(e);
1330
1336
  return t >= 1 ? t : null;
1331
- }, Fr = (e) => e > 0 && e < 1, Ir = (e, t) => {
1332
- let n = Nr(e, t, 2);
1337
+ }, Br = (e) => e > 0 && e < 1, Vr = (e, t) => {
1338
+ let n = Rr(e, t, 2);
1333
1339
  if (!Array.isArray(n)) return n;
1334
- let [r = 0, i = 0] = n, a = Mr(e, t, 2);
1340
+ let [r = 0, i = 0] = n, a = Lr(e, t, 2);
1335
1341
  if (typeof a != "boolean") return a;
1336
- let o = Pr(i);
1337
- return o === null ? b : a ? br(r, o) : vr(r, o);
1338
- }, Lr = ([e = 0, t = 0]) => {
1339
- let n = Pr(t);
1340
- return n === null || e < 0 ? b : 2 * H(e, n);
1341
- }, Rr = ([e = 0, t = 0]) => {
1342
- let n = Pr(t);
1343
- return n === null ? b : H(e, n);
1344
- }, zr = ([e = 0, t = 0]) => {
1345
- let n = Pr(t);
1346
- return n === null || !Fr(e) ? b : Tr(e, n);
1347
- }, Br = ([e = 0, t = 0]) => {
1348
- let n = Pr(t);
1349
- return n === null || e <= 0 || e > 1 ? b : wr(e / 2, n);
1350
- }, Vr = 1, Hr = 2, Ur = 3;
1351
- function Wr([e, t]) {
1352
- let n = tn(e, t);
1353
- return "ys" in n ? Dr(n.ys.map((e, t) => e - (n.xs[t] ?? 0))) : n;
1354
- }
1355
- function Gr([e, t], n) {
1356
- let [r, i] = [Er(Pt(e)), Er(Pt(t))];
1357
- return n === Hr ? Or(r, i) : kr(r, i);
1358
- }
1359
- var Kr = (e) => "t" in e && !(Number.isFinite(e.t) && Number.isFinite(e.df)) ? v : e, qr = (e, t) => {
1360
- let n = k(t), r = [n(O(t, e, 0)), n(O(t, e, 1))], i = r.flat().find(S);
1342
+ let o = zr(i);
1343
+ return o === null ? x : a ? Tr(r, o) : Cr(r, o);
1344
+ }, Hr = ([e = 0, t = 0]) => {
1345
+ let n = zr(t);
1346
+ return n === null || e < 0 ? x : 2 * H(e, n);
1347
+ }, Ur = ([e = 0, t = 0]) => {
1348
+ let n = zr(t);
1349
+ return n === null ? x : H(e, n);
1350
+ }, Wr = ([e = 0, t = 0]) => {
1351
+ let n = zr(t);
1352
+ return n === null || !Br(e) ? x : Ar(e, n);
1353
+ }, Gr = ([e = 0, t = 0]) => {
1354
+ let n = zr(t);
1355
+ return n === null || e <= 0 || e > 1 ? x : kr(e / 2, n);
1356
+ }, Kr = 1, qr = 2, Jr = 3;
1357
+ function Yr([e, t]) {
1358
+ let n = sn(e, t);
1359
+ return "ys" in n ? Mr(n.ys.map((e, t) => e - (n.xs[t] ?? 0))) : n;
1360
+ }
1361
+ function Xr([e, t], n) {
1362
+ let [r, i] = [jr(zt(e)), jr(zt(t))];
1363
+ return n === qr ? Nr(r, i) : Pr(r, i);
1364
+ }
1365
+ var Zr = (e) => "t" in e && !(Number.isFinite(e.t) && Number.isFinite(e.df)) ? y : e, Qr = (e, t) => {
1366
+ let n = k(t), r = [n(O(t, e, 0)), n(O(t, e, 1))], i = r.flat().find(C);
1361
1367
  if (i) return i;
1362
- let a = [jr(e, t, 2), jr(e, t, 3)], o = a.find((e) => typeof e != "number");
1368
+ let a = [Ir(e, t, 2), Ir(e, t, 3)], o = a.find((e) => typeof e != "number");
1363
1369
  if (o) return o;
1364
1370
  let [s, c] = a.map((e) => Math.trunc(Number(e)));
1365
- if (s !== 1 && s !== 2 || c === void 0 || c < Vr || c > Ur) return b;
1366
- let l = Kr(c === Vr ? Wr(r) : Gr(r, c));
1367
- return "t" in l ? Ar(l, s === 1 ? 1 : 2) : l;
1368
- }, Jr = (e, t) => {
1369
- let n = Nr(e, t, 3);
1371
+ if (s !== 1 && s !== 2 || c === void 0 || c < Kr || c > Jr) return x;
1372
+ let l = Zr(c === Kr ? Yr(r) : Xr(r, c));
1373
+ return "t" in l ? Fr(l, s === 1 ? 1 : 2) : l;
1374
+ }, $r = (e, t) => {
1375
+ let n = Rr(e, t, 3);
1370
1376
  if (!Array.isArray(n)) return n;
1371
- let [r = 0, i = 0, a = 0] = n, o = Mr(e, t, 3);
1377
+ let [r = 0, i = 0, a = 0] = n, o = Lr(e, t, 3);
1372
1378
  if (typeof o != "boolean") return o;
1373
- if (a <= 0) return b;
1379
+ if (a <= 0) return x;
1374
1380
  let s = (r - i) / a;
1375
- return o ? cr(s) : or(s) / a;
1376
- }, Yr = (e, t) => {
1377
- let n = jr(e, t, 0);
1381
+ return o ? pr(s) : dr(s) / a;
1382
+ }, ei = (e, t) => {
1383
+ let n = Ir(e, t, 0);
1378
1384
  if (typeof n != "number") return n;
1379
- let r = Mr(e, t, 1);
1380
- return typeof r == "boolean" ? r ? cr(n) : or(n) : r;
1381
- }, Xr = ([e = 0, t = 0, n = 0]) => !Fr(e) || n <= 0 ? b : t + n * gr(e), Zr = ([e = 0]) => Fr(e) ? gr(e) : b;
1382
- function Qr([e = 0, t = 0, n = 0]) {
1385
+ let r = Lr(e, t, 1);
1386
+ return typeof r == "boolean" ? r ? pr(n) : dr(n) : r;
1387
+ }, ti = ([e = 0, t = 0, n = 0]) => !Br(e) || n <= 0 ? x : t + n * xr(e), ni = ([e = 0]) => Br(e) ? xr(e) : x;
1388
+ function ri([e = 0, t = 0, n = 0]) {
1383
1389
  let r = Math.trunc(n);
1384
- return !Fr(e) || t <= 0 || r < 1 ? b : {
1390
+ return !Br(e) || t <= 0 || r < 1 ? x : {
1385
1391
  alpha: e,
1386
1392
  sd: t,
1387
1393
  size: r
@@ -1390,7 +1396,7 @@ function Qr([e = 0, t = 0, n = 0]) {
1390
1396
  [
1391
1397
  {
1392
1398
  name: "T.TEST",
1393
- handler: qr,
1399
+ handler: Qr,
1394
1400
  minArgs: 4,
1395
1401
  maxArgs: 4,
1396
1402
  description: "Returns the p-value of a t-test: tails 1 or 2; type 1 paired, 2 equal variance, 3 unequal variance (Welch)",
@@ -1398,7 +1404,7 @@ function Qr([e = 0, t = 0, n = 0]) {
1398
1404
  },
1399
1405
  {
1400
1406
  name: "T.DIST",
1401
- handler: Ir,
1407
+ handler: Vr,
1402
1408
  minArgs: 3,
1403
1409
  maxArgs: 3,
1404
1410
  description: "Returns the left-tailed Student's t distribution (cumulative TRUE) or its density",
@@ -1406,7 +1412,7 @@ function Qr([e = 0, t = 0, n = 0]) {
1406
1412
  },
1407
1413
  {
1408
1414
  name: "T.DIST.2T",
1409
- handler: U(2, Lr),
1415
+ handler: U(2, Hr),
1410
1416
  minArgs: 2,
1411
1417
  maxArgs: 2,
1412
1418
  description: "Returns the two-tailed Student's t distribution for x >= 0",
@@ -1414,7 +1420,7 @@ function Qr([e = 0, t = 0, n = 0]) {
1414
1420
  },
1415
1421
  {
1416
1422
  name: "T.DIST.RT",
1417
- handler: U(2, Rr),
1423
+ handler: U(2, Ur),
1418
1424
  minArgs: 2,
1419
1425
  maxArgs: 2,
1420
1426
  description: "Returns the right-tailed Student's t distribution",
@@ -1422,7 +1428,7 @@ function Qr([e = 0, t = 0, n = 0]) {
1422
1428
  },
1423
1429
  {
1424
1430
  name: "T.INV",
1425
- handler: U(2, zr),
1431
+ handler: U(2, Wr),
1426
1432
  minArgs: 2,
1427
1433
  maxArgs: 2,
1428
1434
  description: "Returns the t value with the given left-tailed probability",
@@ -1430,7 +1436,7 @@ function Qr([e = 0, t = 0, n = 0]) {
1430
1436
  },
1431
1437
  {
1432
1438
  name: "T.INV.2T",
1433
- handler: U(2, Br),
1439
+ handler: U(2, Gr),
1434
1440
  minArgs: 2,
1435
1441
  maxArgs: 2,
1436
1442
  description: "Returns the t value whose two tails hold the given probability",
@@ -1438,7 +1444,7 @@ function Qr([e = 0, t = 0, n = 0]) {
1438
1444
  },
1439
1445
  {
1440
1446
  name: "NORM.DIST",
1441
- handler: Jr,
1447
+ handler: $r,
1442
1448
  minArgs: 4,
1443
1449
  maxArgs: 4,
1444
1450
  description: "Returns the normal distribution (cumulative TRUE) or its density",
@@ -1446,7 +1452,7 @@ function Qr([e = 0, t = 0, n = 0]) {
1446
1452
  },
1447
1453
  {
1448
1454
  name: "NORM.S.DIST",
1449
- handler: Yr,
1455
+ handler: ei,
1450
1456
  minArgs: 2,
1451
1457
  maxArgs: 2,
1452
1458
  description: "Returns the standard normal distribution (cumulative TRUE) or its density",
@@ -1454,7 +1460,7 @@ function Qr([e = 0, t = 0, n = 0]) {
1454
1460
  },
1455
1461
  {
1456
1462
  name: "NORM.INV",
1457
- handler: U(3, Xr),
1463
+ handler: U(3, ti),
1458
1464
  minArgs: 3,
1459
1465
  maxArgs: 3,
1460
1466
  description: "Returns the value with the given cumulative normal probability",
@@ -1462,7 +1468,7 @@ function Qr([e = 0, t = 0, n = 0]) {
1462
1468
  },
1463
1469
  {
1464
1470
  name: "NORM.S.INV",
1465
- handler: U(1, Zr),
1471
+ handler: U(1, ni),
1466
1472
  minArgs: 1,
1467
1473
  maxArgs: 1,
1468
1474
  description: "Returns the z with the given cumulative standard normal probability",
@@ -1471,8 +1477,8 @@ function Qr([e = 0, t = 0, n = 0]) {
1471
1477
  {
1472
1478
  name: "CONFIDENCE.NORM",
1473
1479
  handler: U(3, (e) => {
1474
- let t = Qr(e);
1475
- return "size" in t ? _r(t.alpha / 2) * t.sd / Math.sqrt(t.size) : t;
1480
+ let t = ri(e);
1481
+ return "size" in t ? Sr(t.alpha / 2) * t.sd / Math.sqrt(t.size) : t;
1476
1482
  }),
1477
1483
  minArgs: 3,
1478
1484
  maxArgs: 3,
@@ -1482,8 +1488,8 @@ function Qr([e = 0, t = 0, n = 0]) {
1482
1488
  {
1483
1489
  name: "CONFIDENCE.T",
1484
1490
  handler: U(3, (e) => {
1485
- let t = Qr(e);
1486
- return "size" in t ? t.size === 1 ? v : wr(t.alpha / 2, t.size - 1) * t.sd / Math.sqrt(t.size) : t;
1491
+ let t = ri(e);
1492
+ return "size" in t ? t.size === 1 ? y : kr(t.alpha / 2, t.size - 1) * t.sd / Math.sqrt(t.size) : t;
1487
1493
  }),
1488
1494
  minArgs: 3,
1489
1495
  maxArgs: 3,
@@ -1496,61 +1502,61 @@ function Qr([e = 0, t = 0, n = 0]) {
1496
1502
  }));
1497
1503
  //#endregion
1498
1504
  //#region src/engine/functions/shape-math.ts
1499
- var $r = 3, ei = 4, ti = (e) => e.reduce((e, t) => e + t, 0) / e.length;
1500
- function ni(e, t) {
1501
- let n = ti(e), r = e.map((e) => e - n), i = Math.sqrt(r.reduce((e, t) => e + t * t, 0) / (e.length - 1));
1505
+ var ii = 3, ai = 4, oi = (e) => e.reduce((e, t) => e + t, 0) / e.length;
1506
+ function si(e, t) {
1507
+ let n = oi(e), r = e.map((e) => e - n), i = Math.sqrt(r.reduce((e, t) => e + t * t, 0) / (e.length - 1));
1502
1508
  return i === 0 ? null : r.reduce((e, n) => e + (n / i) ** t, 0);
1503
1509
  }
1504
- function ri(e) {
1505
- let t = e.length, n = t < $r ? null : ni(e, 3);
1506
- return n === null ? v : t / ((t - 1) * (t - 2)) * n;
1510
+ function ci(e) {
1511
+ let t = e.length, n = t < ii ? null : si(e, 3);
1512
+ return n === null ? y : t / ((t - 1) * (t - 2)) * n;
1507
1513
  }
1508
- function ii(e) {
1509
- let t = e.length, n = t < ei ? null : ni(e, 4);
1510
- return n === null ? v : t * (t + 1) / ((t - 1) * (t - 2) * (t - 3)) * n - 3 * (t - 1) ** 2 / ((t - 2) * (t - 3));
1514
+ function li(e) {
1515
+ let t = e.length, n = t < ai ? null : si(e, 4);
1516
+ return n === null ? y : t * (t + 1) / ((t - 1) * (t - 2) * (t - 3)) * n - 3 * (t - 1) ** 2 / ((t - 2) * (t - 3));
1511
1517
  }
1512
- var ai = (e, t, n) => n > 0 ? (e - t) / n : b;
1513
- function oi(e) {
1514
- return e.length === 0 || e.some((e) => e <= 0) ? b : Math.exp(ti(e.map(Math.log)));
1518
+ var ui = (e, t, n) => n > 0 ? (e - t) / n : x;
1519
+ function di(e) {
1520
+ return e.length === 0 || e.some((e) => e <= 0) ? x : Math.exp(oi(e.map(Math.log)));
1515
1521
  }
1516
- function si(e) {
1517
- return e.length === 0 || e.some((e) => e <= 0) ? b : e.length / e.reduce((e, t) => e + 1 / t, 0);
1522
+ function fi(e) {
1523
+ return e.length === 0 || e.some((e) => e <= 0) ? x : e.length / e.reduce((e, t) => e + 1 / t, 0);
1518
1524
  }
1519
- function ci(e, t) {
1525
+ function pi(e, t) {
1520
1526
  let n = e.length - 1, r = e.filter((e) => e < t).length;
1521
1527
  if (e[r] === t) return r / n;
1522
1528
  let i = e[r - 1] ?? t, a = e[r] ?? t;
1523
1529
  return (r - 1 + (t - i) / (a - i)) / n;
1524
1530
  }
1525
- function li(e, t, n) {
1531
+ function mi(e, t, n) {
1526
1532
  let r = Math.trunc(n);
1527
- if (r < 1 || e.length === 0) return b;
1533
+ if (r < 1 || e.length === 0) return x;
1528
1534
  let i = Array.from(Float64Array.from(e).sort()), [a, o] = [i[0], i.at(-1)];
1529
- if (a === void 0 || o === void 0 || t < a || t > o) return x;
1535
+ if (a === void 0 || o === void 0 || t < a || t > o) return S;
1530
1536
  if (i.length === 1) return 1;
1531
1537
  let s = 10 ** r;
1532
- return Math.floor(ci(i, t) * s * (1 + 2 ** -52 * 4)) / s;
1538
+ return Math.floor(pi(i, t) * s * (1 + 2 ** -52 * 4)) / s;
1533
1539
  }
1534
1540
  //#endregion
1535
1541
  //#region src/engine/functions/shape.ts
1536
- var ui = 255, di = 3, fi = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), pi = (e) => (t, n) => {
1537
- let r = jt(t, n);
1542
+ var hi = 255, gi = 3, _i = (e, t, n) => E(t.evaluateFormula(O(t, e, n))), vi = (e) => (t, n) => {
1543
+ let r = It(t, n);
1538
1544
  return Array.isArray(r) ? e(r) : r;
1539
1545
  };
1540
1546
  [
1541
1547
  {
1542
1548
  name: "SKEW",
1543
- handler: pi(ri),
1549
+ handler: vi(ci),
1544
1550
  minArgs: 1,
1545
- maxArgs: ui,
1551
+ maxArgs: hi,
1546
1552
  description: "Returns the skewness of a sample",
1547
1553
  examples: ["SKEW(A2:A100)"]
1548
1554
  },
1549
1555
  {
1550
1556
  name: "KURT",
1551
- handler: pi(ii),
1557
+ handler: vi(li),
1552
1558
  minArgs: 1,
1553
- maxArgs: ui,
1559
+ maxArgs: hi,
1554
1560
  description: "Returns the excess kurtosis of a sample",
1555
1561
  examples: ["KURT(A2:A100)"]
1556
1562
  },
@@ -1561,10 +1567,10 @@ var ui = 255, di = 3, fi = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), pi = (
1561
1567
  0,
1562
1568
  1,
1563
1569
  2
1564
- ].map((n) => fi(e, t, n)), r = n.find((e) => typeof e != "number");
1570
+ ].map((n) => _i(e, t, n)), r = n.find((e) => typeof e != "number");
1565
1571
  if (r) return r;
1566
1572
  let [i = 0, a = 0, o = 0] = n.map(Number);
1567
- return ai(i, a, o);
1573
+ return ui(i, a, o);
1568
1574
  },
1569
1575
  minArgs: 3,
1570
1576
  maxArgs: 3,
@@ -1574,12 +1580,12 @@ var ui = 255, di = 3, fi = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), pi = (
1574
1580
  {
1575
1581
  name: "PERCENTRANK.INC",
1576
1582
  handler: (e, t) => {
1577
- let n = fi(e, t, 1);
1583
+ let n = _i(e, t, 1);
1578
1584
  if (typeof n != "number") return n;
1579
- let r = e.length > 2 ? fi(e, t, 2) : di;
1585
+ let r = e.length > 2 ? _i(e, t, 2) : gi;
1580
1586
  if (typeof r != "number") return r;
1581
- let i = jt([O(t, e, 0)], t);
1582
- return Array.isArray(i) ? li(i, n, r) : i;
1587
+ let i = It([O(t, e, 0)], t);
1588
+ return Array.isArray(i) ? mi(i, n, r) : i;
1583
1589
  },
1584
1590
  minArgs: 2,
1585
1591
  maxArgs: 3,
@@ -1588,17 +1594,17 @@ var ui = 255, di = 3, fi = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), pi = (
1588
1594
  },
1589
1595
  {
1590
1596
  name: "GEOMEAN",
1591
- handler: pi(oi),
1597
+ handler: vi(di),
1592
1598
  minArgs: 1,
1593
- maxArgs: ui,
1599
+ maxArgs: hi,
1594
1600
  description: "Returns the geometric mean of positive numbers",
1595
1601
  examples: ["GEOMEAN(A2:A20)"]
1596
1602
  },
1597
1603
  {
1598
1604
  name: "HARMEAN",
1599
- handler: pi(si),
1605
+ handler: vi(fi),
1600
1606
  minArgs: 1,
1601
- maxArgs: ui,
1607
+ maxArgs: hi,
1602
1608
  description: "Returns the harmonic mean of positive numbers",
1603
1609
  examples: ["HARMEAN(A2:A20)"]
1604
1610
  }
@@ -1608,56 +1614,56 @@ var ui = 255, di = 3, fi = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), pi = (
1608
1614
  }));
1609
1615
  //#endregion
1610
1616
  //#region src/engine/math-ops.ts
1611
- var mi = 10, hi = (e) => mi ** +e, gi = 15, _i = (e) => Number(e.toPrecision(gi)), vi = (e, t, n) => {
1612
- if (hi(t) === 0) return 0;
1613
- let r = Math.abs(e) * hi(t);
1614
- return !Number.isFinite(r) || Number.isInteger(r) && r !== 0 ? e : Math.sign(e) * n(_i(r)) / hi(t);
1615
- }, yi = (e, t, n) => {
1617
+ var yi = 10, bi = (e) => yi ** +e, xi = 15, Si = (e) => Number(e.toPrecision(xi)), Ci = (e, t, n) => {
1618
+ if (bi(t) === 0) return 0;
1619
+ let r = Math.abs(e) * bi(t);
1620
+ return !Number.isFinite(r) || Number.isInteger(r) && r !== 0 ? e : Math.sign(e) * n(Si(r)) / bi(t);
1621
+ }, wi = (e, t, n) => {
1616
1622
  let r = e / t;
1617
- return !Number.isFinite(r) || Number.isInteger(r) ? e : _i(n(_i(r)) * t);
1623
+ return !Number.isFinite(r) || Number.isInteger(r) ? e : Si(n(Si(r)) * t);
1618
1624
  };
1619
- function bi(e, t) {
1620
- return vi(e, t, Math.round);
1625
+ function Ti(e, t) {
1626
+ return Ci(e, t, Math.round);
1621
1627
  }
1622
- function xi(e, t) {
1623
- return hi(t) === 0 && e !== 0 ? b : vi(e, t, Math.ceil);
1628
+ function Ei(e, t) {
1629
+ return bi(t) === 0 && e !== 0 ? x : Ci(e, t, Math.ceil);
1624
1630
  }
1625
- function Si(e, t) {
1626
- return vi(e, t, Math.floor);
1631
+ function Di(e, t) {
1632
+ return Ci(e, t, Math.floor);
1627
1633
  }
1628
- var Ci = (e, t) => e === 0 || Math.sign(e) === Math.sign(t);
1629
- function wi(e, t) {
1630
- return t === 0 ? v : Ci(e, t) ? yi(e, t, Math.floor) : b;
1634
+ var Oi = (e, t) => e === 0 || Math.sign(e) === Math.sign(t);
1635
+ function ki(e, t) {
1636
+ return t === 0 ? y : Oi(e, t) ? wi(e, t, Math.floor) : x;
1631
1637
  }
1632
- function Ti(e, t) {
1633
- return t === 0 ? 0 : Ci(e, t) ? yi(e, t, Math.ceil) : b;
1638
+ function Ai(e, t) {
1639
+ return t === 0 ? 0 : Oi(e, t) ? wi(e, t, Math.ceil) : x;
1634
1640
  }
1635
- function Ei(e, t) {
1636
- return t === 0 ? v : e - t * Math.floor(e / t);
1641
+ function ji(e, t) {
1642
+ return t === 0 ? y : e - t * Math.floor(e / t);
1637
1643
  }
1638
- function Di(e, t) {
1639
- if (e < 0 && !Number.isInteger(t)) return b;
1640
- if (e === 0 && t < 0) return v;
1641
- if (e === 0 && t === 0) return b;
1644
+ function Mi(e, t) {
1645
+ if (e < 0 && !Number.isInteger(t)) return x;
1646
+ if (e === 0 && t < 0) return y;
1647
+ if (e === 0 && t === 0) return x;
1642
1648
  let n = e ** +t;
1643
- return Number.isFinite(n) ? n : b;
1649
+ return Number.isFinite(n) ? n : x;
1644
1650
  }
1645
- function Oi(e) {
1646
- return e <= 0 ? b : Math.log(e);
1651
+ function Ni(e) {
1652
+ return e <= 0 ? x : Math.log(e);
1647
1653
  }
1648
- function ki(e, t) {
1649
- let n = Oi(e);
1650
- return S(n) ? n : t <= 0 || t === 1 ? b : n / Math.log(t);
1654
+ function Pi(e, t) {
1655
+ let n = Ni(e);
1656
+ return C(n) ? n : t <= 0 || t === 1 ? x : n / Math.log(t);
1651
1657
  }
1652
- function Ai(e) {
1653
- return e <= 0 ? b : Math.log10(e);
1658
+ function Fi(e) {
1659
+ return e <= 0 ? x : Math.log10(e);
1654
1660
  }
1655
- function ji(e) {
1656
- return e < 0 ? b : Math.sqrt(e);
1661
+ function Ii(e) {
1662
+ return e < 0 ? x : Math.sqrt(e);
1657
1663
  }
1658
1664
  A.register({
1659
1665
  name: "ROUND",
1660
- handler: (e, t) => bi(j(t.evaluateFormula(O(t, e, 0))), j(t.evaluateFormula(O(t, e, 1)))),
1666
+ handler: (e, t) => Ti(j(t.evaluateFormula(O(t, e, 0))), j(t.evaluateFormula(O(t, e, 1)))),
1661
1667
  minArgs: 2,
1662
1668
  maxArgs: 2,
1663
1669
  description: "Rounds a number to a specified number of digits",
@@ -1665,7 +1671,7 @@ A.register({
1665
1671
  category: "Mathematical"
1666
1672
  }), A.register({
1667
1673
  name: "ROUNDUP",
1668
- handler: (e, t) => xi(j(t.evaluateFormula(O(t, e, 0))), j(t.evaluateFormula(O(t, e, 1)))),
1674
+ handler: (e, t) => Ei(j(t.evaluateFormula(O(t, e, 0))), j(t.evaluateFormula(O(t, e, 1)))),
1669
1675
  minArgs: 2,
1670
1676
  maxArgs: 2,
1671
1677
  description: "Rounds a number up, away from zero",
@@ -1673,7 +1679,7 @@ A.register({
1673
1679
  category: "Mathematical"
1674
1680
  }), A.register({
1675
1681
  name: "ROUNDDOWN",
1676
- handler: (e, t) => Si(j(t.evaluateFormula(O(t, e, 0))), j(t.evaluateFormula(O(t, e, 1)))),
1682
+ handler: (e, t) => Di(j(t.evaluateFormula(O(t, e, 0))), j(t.evaluateFormula(O(t, e, 1)))),
1677
1683
  minArgs: 2,
1678
1684
  maxArgs: 2,
1679
1685
  description: "Rounds a number down, toward zero",
@@ -1681,7 +1687,7 @@ A.register({
1681
1687
  category: "Mathematical"
1682
1688
  }), A.register({
1683
1689
  name: "FLOOR",
1684
- handler: (e, t) => wi(j(t.evaluateFormula(O(t, e, 0))), j(t.evaluateFormula(O(t, e, 1)))),
1690
+ handler: (e, t) => ki(j(t.evaluateFormula(O(t, e, 0))), j(t.evaluateFormula(O(t, e, 1)))),
1685
1691
  minArgs: 2,
1686
1692
  maxArgs: 2,
1687
1693
  description: "Rounds a number down to the nearest multiple of significance",
@@ -1689,7 +1695,7 @@ A.register({
1689
1695
  category: "Mathematical"
1690
1696
  }), A.register({
1691
1697
  name: "CEILING",
1692
- handler: (e, t) => Ti(j(t.evaluateFormula(O(t, e, 0))), j(t.evaluateFormula(O(t, e, 1)))),
1698
+ handler: (e, t) => Ai(j(t.evaluateFormula(O(t, e, 0))), j(t.evaluateFormula(O(t, e, 1)))),
1693
1699
  minArgs: 2,
1694
1700
  maxArgs: 2,
1695
1701
  description: "Rounds a number up to the nearest multiple of significance",
@@ -1698,8 +1704,8 @@ A.register({
1698
1704
  }), A.register({
1699
1705
  name: "ABS",
1700
1706
  handler: (e, t) => {
1701
- let n = w(t.evaluateFormula(O(t, e, 0)));
1702
- return S(n) ? n : Math.abs(n);
1707
+ let n = E(t.evaluateFormula(O(t, e, 0)));
1708
+ return C(n) ? n : Math.abs(n);
1703
1709
  },
1704
1710
  minArgs: 1,
1705
1711
  maxArgs: 1,
@@ -1708,7 +1714,7 @@ A.register({
1708
1714
  category: "Mathematical"
1709
1715
  }), A.register({
1710
1716
  name: "POWER",
1711
- handler: (e, t) => Di(j(t.evaluateFormula(O(t, e, 0))), j(t.evaluateFormula(O(t, e, 1)))),
1717
+ handler: (e, t) => Mi(j(t.evaluateFormula(O(t, e, 0))), j(t.evaluateFormula(O(t, e, 1)))),
1712
1718
  minArgs: 2,
1713
1719
  maxArgs: 2,
1714
1720
  description: "Returns the result of a number raised to a power",
@@ -1716,7 +1722,7 @@ A.register({
1716
1722
  category: "Mathematical"
1717
1723
  }), A.register({
1718
1724
  name: "SQRT",
1719
- handler: (e, t) => ji(j(t.evaluateFormula(O(t, e, 0)))),
1725
+ handler: (e, t) => Ii(j(t.evaluateFormula(O(t, e, 0)))),
1720
1726
  minArgs: 1,
1721
1727
  maxArgs: 1,
1722
1728
  description: "Returns the square root of a number",
@@ -1724,7 +1730,7 @@ A.register({
1724
1730
  category: "Mathematical"
1725
1731
  }), A.register({
1726
1732
  name: "MOD",
1727
- handler: (e, t) => Ei(j(t.evaluateFormula(O(t, e, 0))), j(t.evaluateFormula(O(t, e, 1)))),
1733
+ handler: (e, t) => ji(j(t.evaluateFormula(O(t, e, 0))), j(t.evaluateFormula(O(t, e, 1)))),
1728
1734
  minArgs: 2,
1729
1735
  maxArgs: 2,
1730
1736
  description: "Returns the remainder after division",
@@ -1743,7 +1749,7 @@ A.register({
1743
1749
  category: "Mathematical"
1744
1750
  }), A.register({
1745
1751
  name: "TRUNC",
1746
- handler: (e, t) => Si(j(t.evaluateFormula(O(t, e, 0))), e.length === 2 ? j(t.evaluateFormula(O(t, e, 1))) : 0),
1752
+ handler: (e, t) => Di(j(t.evaluateFormula(O(t, e, 0))), e.length === 2 ? j(t.evaluateFormula(O(t, e, 1))) : 0),
1747
1753
  minArgs: 1,
1748
1754
  maxArgs: 2,
1749
1755
  description: "Truncates a number to a specified number of decimal places",
@@ -1752,8 +1758,8 @@ A.register({
1752
1758
  }), A.register({
1753
1759
  name: "SIGN",
1754
1760
  handler: (e, t) => {
1755
- let n = w(t.evaluateFormula(O(t, e, 0)));
1756
- return S(n) ? n : Math.sign(n);
1761
+ let n = E(t.evaluateFormula(O(t, e, 0)));
1762
+ return C(n) ? n : Math.sign(n);
1757
1763
  },
1758
1764
  minArgs: 1,
1759
1765
  maxArgs: 1,
@@ -1781,7 +1787,7 @@ A.register({
1781
1787
  category: "Mathematical"
1782
1788
  }), A.register({
1783
1789
  name: "LN",
1784
- handler: (e, t) => Oi(j(t.evaluateFormula(O(t, e, 0)))),
1790
+ handler: (e, t) => Ni(j(t.evaluateFormula(O(t, e, 0)))),
1785
1791
  minArgs: 1,
1786
1792
  maxArgs: 1,
1787
1793
  description: "Returns the natural logarithm of a number",
@@ -1789,7 +1795,7 @@ A.register({
1789
1795
  category: "Mathematical"
1790
1796
  }), A.register({
1791
1797
  name: "LOG",
1792
- handler: (e, t) => ki(j(t.evaluateFormula(O(t, e, 0))), e.length === 2 ? j(t.evaluateFormula(O(t, e, 1))) : 10),
1798
+ handler: (e, t) => Pi(j(t.evaluateFormula(O(t, e, 0))), e.length === 2 ? j(t.evaluateFormula(O(t, e, 1))) : 10),
1793
1799
  minArgs: 1,
1794
1800
  maxArgs: 2,
1795
1801
  description: "Returns the logarithm of a number to a specified base",
@@ -1797,7 +1803,7 @@ A.register({
1797
1803
  category: "Mathematical"
1798
1804
  }), A.register({
1799
1805
  name: "LOG10",
1800
- handler: (e, t) => Ai(j(t.evaluateFormula(O(t, e, 0)))),
1806
+ handler: (e, t) => Fi(j(t.evaluateFormula(O(t, e, 0)))),
1801
1807
  minArgs: 1,
1802
1808
  maxArgs: 1,
1803
1809
  description: "Returns the base-10 logarithm of a number",
@@ -1813,90 +1819,90 @@ function W(e, t) {
1813
1819
  }
1814
1820
  //#endregion
1815
1821
  //#region src/engine/translateFormula.ts
1816
- function Mi(e) {
1817
- return na(Ki(e));
1822
+ function Li(e) {
1823
+ return sa(Zi(e));
1818
1824
  }
1819
- function Ni(e, t) {
1825
+ function Ri(e, t) {
1820
1826
  return e === "" ? t : t === e ? "" : e;
1821
1827
  }
1822
- function Pi(e) {
1828
+ function zi(e) {
1823
1829
  let t = e.split(""), n = [], r = "";
1824
1830
  return t.forEach((t, i) => {
1825
- (t === "\"" || t === "'") && !W(e, i) && (r = Ni(r, t)), n.push(t === "&" && r === "" ? "+" : t);
1831
+ (t === "\"" || t === "'") && !W(e, i) && (r = Ri(r, t)), n.push(t === "&" && r === "" ? "+" : t);
1826
1832
  }), n.join("");
1827
1833
  }
1828
- function Fi(e) {
1834
+ function Bi(e) {
1829
1835
  let t = [], n = { openQuote: "" };
1830
1836
  return e.split("").forEach((r, i) => {
1831
- (r === "\"" || r === "'") && !W(e, i) && (n.openQuote = Ni(n.openQuote, r));
1837
+ (r === "\"" || r === "'") && !W(e, i) && (n.openQuote = Ri(n.openQuote, r));
1832
1838
  let a = t.at(-1);
1833
1839
  n.openQuote === "" && (r === "-" || r === "+") && a === r && t.push(" "), t.push(r);
1834
1840
  }), t.join("");
1835
1841
  }
1836
- function Ii(e) {
1842
+ function Vi(e) {
1837
1843
  return e.replace(/([^<>!])=([^=])/g, "$1==$2");
1838
1844
  }
1839
- function Li(e) {
1845
+ function Hi(e) {
1840
1846
  return /^[\d+\-*/(). ]+$/.test(e);
1841
1847
  }
1842
- function Ri(e) {
1848
+ function Ui(e) {
1843
1849
  return /^[\d+\-*/(). <>!=]+$/.test(e);
1844
1850
  }
1845
- var zi = /^(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/, Bi = /^[A-Za-z_$][\w$]*/, Vi = /^\s+/;
1846
- function Hi(e, t) {
1851
+ var Wi = /^(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/, Gi = /^[A-Za-z_$][\w$]*/, Ki = /^\s+/;
1852
+ function qi(e, t) {
1847
1853
  let n = e[t], r = Array.from(e.slice(t + 1)).findIndex((r, i) => r === n && !W(e, t + 1 + i));
1848
1854
  return r === -1 ? e.length : t + r + 2;
1849
1855
  }
1850
- var Ui = {
1856
+ var Ji = {
1851
1857
  "(": "open",
1852
1858
  ")": "close",
1853
1859
  "^": "caret"
1854
- }, Wi = [
1860
+ }, Yi = [
1855
1861
  {
1856
1862
  kind: "number",
1857
- pattern: zi
1863
+ pattern: Wi
1858
1864
  },
1859
1865
  {
1860
1866
  kind: "word",
1861
- pattern: Bi
1867
+ pattern: Gi
1862
1868
  },
1863
1869
  {
1864
1870
  kind: "space",
1865
- pattern: Vi
1871
+ pattern: Ki
1866
1872
  }
1867
1873
  ];
1868
- function Gi(e, t) {
1874
+ function Xi(e, t) {
1869
1875
  let n = e[t];
1870
1876
  if (n === "\"" || n === "'") return {
1871
1877
  kind: "literal",
1872
- text: e.slice(t, Hi(e, t))
1878
+ text: e.slice(t, qi(e, t))
1873
1879
  };
1874
- let r = e.slice(t), i = Wi.map(({ kind: e, pattern: t }) => ({
1880
+ let r = e.slice(t), i = Yi.map(({ kind: e, pattern: t }) => ({
1875
1881
  kind: e,
1876
1882
  text: t.exec(r)?.[0]
1877
1883
  })).find((e) => e.text !== void 0);
1878
1884
  return i?.text === void 0 ? {
1879
- kind: Ui[n] ?? "symbol",
1885
+ kind: Ji[n] ?? "symbol",
1880
1886
  text: n
1881
1887
  } : {
1882
1888
  kind: i.kind,
1883
1889
  text: i.text
1884
1890
  };
1885
1891
  }
1886
- function Ki(e) {
1892
+ function Zi(e) {
1887
1893
  let t = [], n = { position: 0 };
1888
1894
  for (; n.position < e.length;) {
1889
- let r = Gi(e, n.position);
1895
+ let r = Xi(e, n.position);
1890
1896
  t.push(r), n.position += r.text.length;
1891
1897
  }
1892
1898
  return t;
1893
1899
  }
1894
- var qi = (e) => e?.kind === "symbol" && (e.text === "-" || e.text === "+");
1895
- function Ji(e, t) {
1900
+ var Qi = (e) => e?.kind === "symbol" && (e.text === "-" || e.text === "+");
1901
+ function $i(e, t) {
1896
1902
  let n = { depth: 0 };
1897
1903
  return e.findIndex((e, r) => r < t ? !1 : (e.kind === "open" && (n.depth += 1), e.kind === "close" && --n.depth, n.depth === 0));
1898
1904
  }
1899
- function Yi(e, t) {
1905
+ function ea(e, t) {
1900
1906
  let n = e[t];
1901
1907
  if (n === void 0) return null;
1902
1908
  if (n.kind === "number" || n.kind === "literal" || n.kind === "word") return {
@@ -1904,16 +1910,16 @@ function Yi(e, t) {
1904
1910
  end: t + 1
1905
1911
  };
1906
1912
  if (n.kind !== "open") return null;
1907
- let r = Ji(e, t);
1913
+ let r = $i(e, t);
1908
1914
  return r === -1 ? null : {
1909
- text: `(${na(e.slice(t + 1, r))})`,
1915
+ text: `(${sa(e.slice(t + 1, r))})`,
1910
1916
  end: r + 1
1911
1917
  };
1912
1918
  }
1913
- function Xi(e, t) {
1919
+ function ta(e, t) {
1914
1920
  let n = { index: t };
1915
- for (; qi(e[n.index]) || e[n.index]?.kind === "space";) n.index += 1;
1916
- let r = Yi(e, n.index);
1921
+ for (; Qi(e[n.index]) || e[n.index]?.kind === "space";) n.index += 1;
1922
+ let r = ea(e, n.index);
1917
1923
  if (r === null) return null;
1918
1924
  let i = e.slice(t, n.index), a = i.filter((e) => e.kind === "symbol").map((e) => e.text), o = i.map((e) => e.text).join("");
1919
1925
  return {
@@ -1923,24 +1929,24 @@ function Xi(e, t) {
1923
1929
  end: r.end
1924
1930
  };
1925
1931
  }
1926
- function Zi(e, t) {
1932
+ function na(e, t) {
1927
1933
  let n = { index: t };
1928
1934
  for (; e[n.index]?.kind === "space";) n.index += 1;
1929
1935
  return e[n.index]?.kind === "caret" ? n.index : -1;
1930
1936
  }
1931
- var Qi = (e) => e.signed ? `(${e.text})` : e.text;
1932
- function $i(e, t) {
1937
+ var ra = (e) => e.signed ? `(${e.text})` : e.text;
1938
+ function ia(e, t) {
1933
1939
  let n = {
1934
- text: Qi(t),
1940
+ text: ra(t),
1935
1941
  end: t.end,
1936
1942
  links: 0
1937
1943
  };
1938
- for (let t = Zi(e, n.end); t !== -1; t = Zi(e, n.end)) {
1939
- let r = Xi(e, t + 1);
1944
+ for (let t = na(e, n.end); t !== -1; t = na(e, n.end)) {
1945
+ let r = ta(e, t + 1);
1940
1946
  if (r === null) break;
1941
1947
  let i = n.links === 0 ? n.text : `(${n.text})`;
1942
1948
  Object.assign(n, {
1943
- text: `${i}**${Qi(r)}`,
1949
+ text: `${i}**${ra(r)}`,
1944
1950
  end: r.end,
1945
1951
  links: n.links + 1
1946
1952
  });
@@ -1950,14 +1956,14 @@ function $i(e, t) {
1950
1956
  end: t.end
1951
1957
  } : n;
1952
1958
  }
1953
- var ea = (e) => e === void 0 || e.kind === "open" || e.kind === "symbol" || e.kind === "caret", ta = (e, t) => e.kind !== "space" && (!qi(e) || ea(t));
1954
- function na(e) {
1959
+ var aa = (e) => e === void 0 || e.kind === "open" || e.kind === "symbol" || e.kind === "caret", oa = (e, t) => e.kind !== "space" && (!Qi(e) || aa(t));
1960
+ function sa(e) {
1955
1961
  let t = [], n = {
1956
1962
  index: 0,
1957
1963
  previous: void 0
1958
1964
  };
1959
1965
  for (; n.index < e.length;) {
1960
- let r = e[n.index], i = ta(r, n.previous) ? Xi(e, n.index) : null, a = i === null ? null : $i(e, i);
1966
+ let r = e[n.index], i = oa(r, n.previous) ? ta(e, n.index) : null, a = i === null ? null : ia(e, i);
1961
1967
  t.push(a === null ? r.kind === "caret" ? "**" : r.text : a.text);
1962
1968
  let o = a === null ? n.index + 1 : a.end;
1963
1969
  r.kind !== "space" && (n.previous = e[o - 1]), n.index = o;
@@ -1966,14 +1972,14 @@ function na(e) {
1966
1972
  }
1967
1973
  //#endregion
1968
1974
  //#region src/engine/concatPrecedence.ts
1969
- var ra = (e) => e === "\"" || e === "'";
1970
- function ia(e) {
1975
+ var ca = (e) => e === "\"" || e === "'";
1976
+ function la(e) {
1971
1977
  let t = {
1972
1978
  quote: "",
1973
1979
  depth: 0
1974
1980
  };
1975
1981
  return e.split("").map((n, r) => {
1976
- let i = ra(n) && !W(e, r) && (t.quote === "" || t.quote === n), a = t.quote !== "" || i;
1982
+ let i = ca(n) && !W(e, r) && (t.quote === "" || t.quote === n), a = t.quote !== "" || i;
1977
1983
  i && (t.quote = t.quote === "" ? n : ""), !a && n === ")" && --t.depth;
1978
1984
  let o = {
1979
1985
  char: n,
@@ -1983,24 +1989,24 @@ function ia(e) {
1983
1989
  return !a && n === "(" && (t.depth += 1), o;
1984
1990
  });
1985
1991
  }
1986
- var aa = (e, t) => !e.inLiteral && t.includes(e.char);
1987
- function oa(e) {
1988
- let t = ia(e).flatMap((e, t) => e.depth === 0 && aa(e, "&") ? [t] : []);
1992
+ var ua = (e, t) => !e.inLiteral && t.includes(e.char);
1993
+ function da(e) {
1994
+ let t = la(e).flatMap((e, t) => e.depth === 0 && ua(e, "&") ? [t] : []);
1989
1995
  return [-1, ...t].map((n, r) => e.slice(n + 1, t[r] ?? e.length));
1990
1996
  }
1991
- function sa(e) {
1992
- let t = ia(e), n = t.flatMap((e, t) => e.depth === 0 && aa(e, "(") ? [t] : []), r = (e) => t.findIndex((t, n) => n > e && t.depth === 0 && aa(t, ")"));
1997
+ function fa(e) {
1998
+ let t = la(e), n = t.flatMap((e, t) => e.depth === 0 && ua(e, "(") ? [t] : []), r = (e) => t.findIndex((t, n) => n > e && t.depth === 0 && ua(t, ")"));
1993
1999
  return n.map((e) => ({
1994
2000
  open: e,
1995
2001
  close: r(e)
1996
2002
  })).filter(({ close: e }) => e > 0);
1997
2003
  }
1998
- function ca(e) {
1999
- let { pieces: t, cursor: n } = sa(e).reduce((t, { open: n, close: r }) => ({
2004
+ function pa(e) {
2005
+ let { pieces: t, cursor: n } = fa(e).reduce((t, { open: n, close: r }) => ({
2000
2006
  pieces: [
2001
2007
  ...t.pieces,
2002
2008
  e.slice(t.cursor, n + 1),
2003
- fa(e.slice(n + 1, r))
2009
+ _a(e.slice(n + 1, r))
2004
2010
  ],
2005
2011
  cursor: r
2006
2012
  }), {
@@ -2009,54 +2015,54 @@ function ca(e) {
2009
2015
  });
2010
2016
  return [...t, e.slice(n)].join("");
2011
2017
  }
2012
- var la = {
2018
+ var ma = {
2013
2019
  true: "\"TRUE\"",
2014
2020
  false: "\"FALSE\""
2015
2021
  };
2016
- function ua(e) {
2017
- let t = e.trim(), n = ia(t);
2018
- return t.startsWith("(") && n.findIndex((e, t) => t > 0 && e.depth === 0 && aa(e, ")")) === t.length - 1 ? ua(t.slice(1, -1)) : t;
2019
- }
2020
- var da = (e) => la[ua(e)] ?? e;
2021
- function fa(e) {
2022
- let t = oa(e).map(ca);
2023
- return t.length === 1 ? t[0] ?? "" : `(""+${t.map((e) => `(${da(e)})`).join("+")})`;
2024
- }
2025
- function pa(e) {
2026
- if (ia(e).some((e) => aa(e, "=<>"))) return Pi(e);
2027
- let t = oa(e);
2028
- return t.length > 1 && t.some((e) => e.trim() === "") ? Pi(e) : fa(e);
2029
- }
2030
- function ma(e) {
2031
- let t = oa(e), n = t.flatMap((e) => sa(e).flatMap(({ open: t, close: n }) => ma(e.slice(t + 1, n))));
2022
+ function ha(e) {
2023
+ let t = e.trim(), n = la(t);
2024
+ return t.startsWith("(") && n.findIndex((e, t) => t > 0 && e.depth === 0 && ua(e, ")")) === t.length - 1 ? ha(t.slice(1, -1)) : t;
2025
+ }
2026
+ var ga = (e) => ma[ha(e)] ?? e;
2027
+ function _a(e) {
2028
+ let t = da(e).map(pa);
2029
+ return t.length === 1 ? t[0] ?? "" : `(""+${t.map((e) => `(${ga(e)})`).join("+")})`;
2030
+ }
2031
+ function va(e) {
2032
+ if (la(e).some((e) => ua(e, "=<>"))) return zi(e);
2033
+ let t = da(e);
2034
+ return t.length > 1 && t.some((e) => e.trim() === "") ? zi(e) : _a(e);
2035
+ }
2036
+ function ya(e) {
2037
+ let t = da(e), n = t.flatMap((e) => fa(e).flatMap(({ open: t, close: n }) => ya(e.slice(t + 1, n))));
2032
2038
  return t.length > 1 ? [...t, ...n] : n;
2033
2039
  }
2034
2040
  //#endregion
2035
2041
  //#region src/engine/textCollation.ts
2036
- var ha = " \n\v\f\r _-,;:!?.'\"()[]{}@*/\\&#%`^+<=>|~$0123456789abcdefghijklmnopqrstuvwxyz", ga = 74, _a = 8, va = 14, ya = 31, ba = 127;
2037
- function xa(e) {
2042
+ var ba = " \n\v\f\r _-,;:!?.'\"()[]{}@*/\\&#%`^+<=>|~$0123456789abcdefghijklmnopqrstuvwxyz", xa = 74, Sa = 8, Ca = 14, wa = 31, Ta = 127;
2043
+ function Ea(e) {
2038
2044
  let t = e.codePointAt(0) ?? 0;
2039
- return t <= _a || t >= va && t <= ya || t === ba;
2045
+ return t <= Sa || t >= Ca && t <= wa || t === Ta;
2040
2046
  }
2041
- var Sa = /^[\u0300-\u036f]$/u, Ca = /* @__PURE__ */ "34f.332.313 343.314.301 341.300 340.306.302.30c.30a.342.308.344.30b.303.307.338.327.328.304.30d 30e 312 315 31a 33d 33e 33f 346 34a 34b 34c 350 351 352 357 35b 35d 35e.316 317 318 319 31c 31d 31e 31f 320 329 32a 32b 32c 32f 333 33a 33b 33c 347 348 349 34d 34e 353 354 355 356 359 35a 35c 35f 362.336 337.335.305.309.30f.310.311.31b.321.322.323.324.325.326.32d.32e.330.331.334.339.345.358.360.361".split("."), wa = 0, Ta = "aeioucdhmrtvx", Ea = 867, Da = (e) => Ta.charAt((e.codePointAt(0) ?? 0) - Ea) || e, Oa = new Map(Ca.flatMap((e, t) => e.split(" ").map((e) => [String.fromCodePoint(Number.parseInt(e, 16)), t])));
2042
- function ka(e) {
2043
- let t = ha.indexOf(e);
2044
- return t >= 0 ? t : ga + (e.codePointAt(0) ?? 0);
2047
+ var Da = /^[\u0300-\u036f]$/u, Oa = /* @__PURE__ */ "34f.332.313 343.314.301 341.300 340.306.302.30c.30a.342.308.344.30b.303.307.338.327.328.304.30d 30e 312 315 31a 33d 33e 33f 346 34a 34b 34c 350 351 352 357 35b 35d 35e.316 317 318 319 31c 31d 31e 31f 320 329 32a 32b 32c 32f 333 33a 33b 33c 347 348 349 34d 34e 353 354 355 356 359 35a 35c 35f 362.336 337.335.305.309.30f.310.311.31b.321.322.323.324.325.326.32d.32e.330.331.334.339.345.358.360.361".split("."), ka = 0, Aa = "aeioucdhmrtvx", ja = 867, Ma = (e) => Aa.charAt((e.codePointAt(0) ?? 0) - ja) || e, Na = new Map(Oa.flatMap((e, t) => e.split(" ").map((e) => [String.fromCodePoint(Number.parseInt(e, 16)), t])));
2048
+ function Pa(e) {
2049
+ let t = ba.indexOf(e);
2050
+ return t >= 0 ? t : xa + (e.codePointAt(0) ?? 0);
2045
2051
  }
2046
- function Aa(e) {
2052
+ function Fa(e) {
2047
2053
  let t = {
2048
2054
  primary: [],
2049
2055
  accents: []
2050
2056
  };
2051
- return Array.from(e.normalize("NFD")).filter((e) => !xa(e)).map(Da).forEach((e) => {
2057
+ return Array.from(e.normalize("NFD")).filter((e) => !Ea(e)).map(Ma).forEach((e) => {
2052
2058
  let n = t.accents.at(-1);
2053
- if (Sa.test(e) && n !== void 0) {
2054
- let t = Oa.get(e) ?? wa;
2055
- t !== wa && n.push(t);
2056
- } else t.primary.push(ka(e.toLowerCase())), t.accents.push([]);
2059
+ if (Da.test(e) && n !== void 0) {
2060
+ let t = Na.get(e) ?? ka;
2061
+ t !== ka && n.push(t);
2062
+ } else t.primary.push(Pa(e.toLowerCase())), t.accents.push([]);
2057
2063
  }), t;
2058
2064
  }
2059
- function ja(e, t) {
2065
+ function Ia(e, t) {
2060
2066
  let n = Math.min(e.length, t.length);
2061
2067
  for (let r = 0; r < n; r += 1) {
2062
2068
  let [n, i] = [e[r], t[r]];
@@ -2064,27 +2070,27 @@ function ja(e, t) {
2064
2070
  }
2065
2071
  return e.length - t.length;
2066
2072
  }
2067
- function Ma(e, t) {
2068
- return e.reduce((e, n, r) => e || ja(n, t[r] ?? []), 0);
2073
+ function La(e, t) {
2074
+ return e.reduce((e, n, r) => e || Ia(n, t[r] ?? []), 0);
2069
2075
  }
2070
- function Na(e, t) {
2071
- let [n, r] = [Aa(e), Aa(t)];
2072
- return ja(n.primary, r.primary) || Ma(n.accents, r.accents);
2076
+ function Ra(e, t) {
2077
+ let [n, r] = [Fa(e), Fa(t)];
2078
+ return Ia(n.primary, r.primary) || La(n.accents, r.accents);
2073
2079
  }
2074
2080
  //#endregion
2075
2081
  //#region src/engine/textComparison.ts
2076
- var Pa = [
2082
+ var za = [
2077
2083
  "<>",
2078
2084
  "<=",
2079
2085
  ">=",
2080
2086
  "=",
2081
2087
  "<",
2082
2088
  ">"
2083
- ], Fa = "=<>!";
2084
- function Ia(e) {
2089
+ ], Ba = "=<>!";
2090
+ function Va(e) {
2085
2091
  let t = [];
2086
- return ia(e).forEach((e, n) => {
2087
- if (e.inLiteral || e.depth !== 0 || !Fa.includes(e.char)) return;
2092
+ return la(e).forEach((e, n) => {
2093
+ if (e.inLiteral || e.depth !== 0 || !Ba.includes(e.char)) return;
2088
2094
  let r = t.at(-1);
2089
2095
  r !== void 0 && r.start + r.text.length === n ? r.text += e.char : t.push({
2090
2096
  start: n,
@@ -2092,12 +2098,12 @@ function Ia(e) {
2092
2098
  });
2093
2099
  }), t;
2094
2100
  }
2095
- var La = (e) => Pa.some((t) => t === e);
2096
- function Ra(e) {
2097
- let t = Ia(e);
2101
+ var Ha = (e) => za.some((t) => t === e);
2102
+ function Ua(e) {
2103
+ let t = Va(e);
2098
2104
  if (t.length === 0) return null;
2099
2105
  let n = t.map((e) => e.text);
2100
- if (!n.every(La)) return null;
2106
+ if (!n.every(Ha)) return null;
2101
2107
  let r = [{
2102
2108
  start: 0,
2103
2109
  text: ""
@@ -2107,15 +2113,15 @@ function Ra(e) {
2107
2113
  })).map(({ from: t, to: n }) => e.slice(t, n).trim());
2108
2114
  return r.some((e) => e === "") ? null : {
2109
2115
  operands: r,
2110
- operators: n.filter(La)
2116
+ operators: n.filter(Ha)
2111
2117
  };
2112
2118
  }
2113
- var za = 0, Ba = 1, Va = 2, Ha = (e) => typeof e == "number" ? za : typeof e == "boolean" ? Va : Ba;
2114
- function Ua(e, t) {
2115
- let n = Ha(e) - Ha(t);
2116
- return n === 0 ? typeof e == "number" && typeof t == "number" ? e - t : typeof e == "boolean" && typeof t == "boolean" ? Number(e) - Number(t) : Na(String(e), String(t)) : n;
2119
+ var Wa = 0, Ga = 1, Ka = 2, qa = (e) => typeof e == "number" ? Wa : typeof e == "boolean" ? Ka : Ga;
2120
+ function Ja(e, t) {
2121
+ let n = qa(e) - qa(t);
2122
+ return n === 0 ? typeof e == "number" && typeof t == "number" ? e - t : typeof e == "boolean" && typeof t == "boolean" ? Number(e) - Number(t) : Ra(String(e), String(t)) : n;
2117
2123
  }
2118
- var Wa = {
2124
+ var Ya = {
2119
2125
  "=": (e) => e === 0,
2120
2126
  "<>": (e) => e !== 0,
2121
2127
  "<": (e) => e < 0,
@@ -2123,21 +2129,21 @@ var Wa = {
2123
2129
  "<=": (e) => e <= 0,
2124
2130
  ">=": (e) => e >= 0
2125
2131
  };
2126
- function Ga(e, t, n) {
2127
- return Wa[e](Ua(t, n));
2132
+ function Xa(e, t, n) {
2133
+ return Ya[e](Ja(t, n));
2128
2134
  }
2129
- function Ka(e, t) {
2130
- return t.reduce((t, n, r) => Ga(n, t, e[r + 1] ?? ""), e[0] ?? "");
2135
+ function Za(e, t) {
2136
+ return t.reduce((t, n, r) => Xa(n, t, e[r + 1] ?? ""), e[0] ?? "");
2131
2137
  }
2132
2138
  //#endregion
2133
2139
  //#region src/engine/blankOperands.ts
2134
- var qa = (e) => typeof e == "number" ? 0 : typeof e != "boolean" && "";
2135
- function Ja(e, t) {
2136
- return e.map((n, r) => t[r] ? r === 0 ? qa(e[1] ?? 0) : r === 1 && qa(e[0] ?? 0) : n);
2140
+ var Qa = (e) => typeof e == "number" ? 0 : typeof e != "boolean" && "";
2141
+ function $a(e, t) {
2142
+ return e.map((n, r) => t[r] ? r === 0 ? Qa(e[1] ?? 0) : r === 1 && Qa(e[0] ?? 0) : n);
2137
2143
  }
2138
2144
  //#endregion
2139
2145
  //#region src/engine/condition.ts
2140
- var Ya = [
2146
+ var eo = [
2141
2147
  ">=",
2142
2148
  "<=",
2143
2149
  "<>",
@@ -2147,18 +2153,18 @@ var Ya = [
2147
2153
  ">",
2148
2154
  "<"
2149
2155
  ];
2150
- function* Xa(e) {
2156
+ function* to(e) {
2151
2157
  let t = null;
2152
2158
  for (let n = 0; n < e.length; n++) {
2153
2159
  let r = e[n];
2154
2160
  t === null ? r === "\"" || r === "'" ? t = r : yield n : r === "\\" ? n++ : r === t && (t = null);
2155
2161
  }
2156
2162
  }
2157
- function Za(e) {
2163
+ function no(e) {
2158
2164
  let t = e.trim();
2159
2165
  for (; t.startsWith("(") && t.endsWith(")");) {
2160
2166
  let e = 0, n = !0;
2161
- for (let r of Xa(t)) {
2167
+ for (let r of to(t)) {
2162
2168
  let i = t[r];
2163
2169
  if (i === "(") e++;
2164
2170
  else if (i === ")") {
@@ -2174,16 +2180,16 @@ function Za(e) {
2174
2180
  }
2175
2181
  return t;
2176
2182
  }
2177
- function Qa(e) {
2178
- let t = Za(e);
2179
- for (let e of Xa(t)) for (let n of Ya) if (t.startsWith(n, e)) return {
2183
+ function ro(e) {
2184
+ let t = no(e);
2185
+ for (let e of to(t)) for (let n of eo) if (t.startsWith(n, e)) return {
2180
2186
  left: t.slice(0, e).trim(),
2181
2187
  operator: n,
2182
2188
  right: t.slice(e + n.length).trim()
2183
2189
  };
2184
2190
  return null;
2185
2191
  }
2186
- function $a(e) {
2192
+ function io(e) {
2187
2193
  return e.length >= 2 && (e.startsWith("\"") && e.endsWith("\"") || e.startsWith("'") && e.endsWith("'")) ? {
2188
2194
  value: e.slice(1, -1).replace(/\\(["'\\])/g, "$1"),
2189
2195
  quoted: !0
@@ -2192,8 +2198,8 @@ function $a(e) {
2192
2198
  quoted: !1
2193
2199
  };
2194
2200
  }
2195
- function eo(e) {
2196
- let { value: t, quoted: n } = $a(e.trim());
2201
+ function ao(e) {
2202
+ let { value: t, quoted: n } = io(e.trim());
2197
2203
  if (n) return t;
2198
2204
  if (t === "") return "";
2199
2205
  let r = t.toUpperCase();
@@ -2202,7 +2208,7 @@ function eo(e) {
2202
2208
  let i = Number(t);
2203
2209
  return Number.isNaN(i) ? t : i;
2204
2210
  }
2205
- var to = {
2211
+ var oo = {
2206
2212
  ">=": ">=",
2207
2213
  "<=": "<=",
2208
2214
  "<>": "<>",
@@ -2212,53 +2218,53 @@ var to = {
2212
2218
  ">": ">",
2213
2219
  "<": "<"
2214
2220
  };
2215
- function no(e, t) {
2216
- let [n, r] = [t(e.left), t(e.right)], i = e.left === "" ? qa(r) : n, a = e.right === "" ? qa(n) : r;
2217
- return Ga(to[e.operator], i, a);
2221
+ function so(e, t) {
2222
+ let [n, r] = [t(e.left), t(e.right)], i = e.left === "" ? Qa(r) : n, a = e.right === "" ? Qa(n) : r;
2223
+ return Xa(oo[e.operator], i, a);
2218
2224
  }
2219
- function ro(e) {
2225
+ function co(e) {
2220
2226
  return typeof e == "boolean" ? e : typeof e == "number" ? e !== 0 : e !== "";
2221
2227
  }
2222
- function io(e, t) {
2223
- let n = Qa(e);
2224
- return n ? no(n, t) : ro(t(Za(e)));
2228
+ function lo(e, t) {
2229
+ let n = ro(e);
2230
+ return n ? so(n, t) : co(t(no(e)));
2225
2231
  }
2226
- function ao(e) {
2232
+ function uo(e) {
2227
2233
  if (e == null) return "\"\"";
2228
- let t = S(e) ? e.code : e;
2234
+ let t = C(e) ? e.code : e;
2229
2235
  return typeof t == "string" ? `"${t.replace(/\\/g, "\\\\").replace(/"/g, "\\\"")}"` : t.toString();
2230
2236
  }
2231
2237
  //#endregion
2232
2238
  //#region src/engine/sheetReference.ts
2233
- var oo = /^(?:'((?:[^']|'')+)'|([^!]+))!(.+)$/;
2234
- function so(e) {
2235
- let [, t, n, r] = e.match(oo) ?? [], i = t === void 0 ? n : t.replace(/''/g, "'");
2239
+ var fo = String.raw`[\p{L}_][\p{L}\p{N}_.]*`, po = String.raw`[\p{L}\p{N}_]`, mo = /^(?:'((?:[^']|'')+)'|([^!]+))!(.+)$/;
2240
+ function ho(e) {
2241
+ let [, t, n, r] = e.match(mo) ?? [], i = t === void 0 ? n : t.replace(/''/g, "'");
2236
2242
  return i === void 0 || r === void 0 ? null : {
2237
2243
  sheetName: i,
2238
2244
  ref: r
2239
2245
  };
2240
2246
  }
2241
- function co(e, t) {
2247
+ function go(e, t) {
2242
2248
  let n = e.indexOf("'", t + 1);
2243
- return n === -1 ? -1 : e[n + 1] === "'" ? co(e, n + 1) : n + 1;
2249
+ return n === -1 ? -1 : e[n + 1] === "'" ? go(e, n + 1) : n + 1;
2244
2250
  }
2245
2251
  //#endregion
2246
2252
  //#region src/engine/concatOperand.ts
2247
- var lo = (e) => e.trim() === "";
2248
- function uo(e, t) {
2253
+ var _o = (e) => e.trim() === "";
2254
+ function vo(e, t) {
2249
2255
  let n = { at: t - 1 };
2250
- for (; n.at >= 0 && (lo(e[n.at] ?? "") || e[n.at] === "(");) --n.at;
2256
+ for (; n.at >= 0 && (_o(e[n.at] ?? "") || e[n.at] === "(");) --n.at;
2251
2257
  return n.at < 0 ? "" : e[n.at] ?? "";
2252
2258
  }
2253
- function fo(e, t) {
2259
+ function yo(e, t) {
2254
2260
  let n = { at: t };
2255
- for (; n.at < e.length && (lo(e[n.at] ?? "") || e[n.at] === ")");) n.at += 1;
2261
+ for (; n.at < e.length && (_o(e[n.at] ?? "") || e[n.at] === ")");) n.at += 1;
2256
2262
  return n.at >= e.length ? "" : e[n.at] ?? "";
2257
2263
  }
2258
- var po = (e) => e === "" || e === "&";
2259
- function mo(e, t, n) {
2260
- let r = uo(e, t), i = fo(e, n);
2261
- return po(r) && po(i) && (r === "&" || i === "&");
2264
+ var bo = (e) => e === "" || e === "&";
2265
+ function xo(e, t, n) {
2266
+ let r = vo(e, t), i = yo(e, n);
2267
+ return bo(r) && bo(i) && (r === "&" || i === "&");
2262
2268
  }
2263
2269
  //#endregion
2264
2270
  //#region src/engine/formulaError.ts
@@ -2267,7 +2273,7 @@ var G = {
2267
2273
  invalid_ref: "#REF!",
2268
2274
  syntax: "#NAME?",
2269
2275
  unknown: "#ERROR!"
2270
- }, ho = {
2276
+ }, So = {
2271
2277
  [G.div_zero]: "div_zero",
2272
2278
  [G.invalid_ref]: "invalid_ref",
2273
2279
  [G.syntax]: "syntax"
@@ -2277,39 +2283,39 @@ var G = {
2277
2283
  constructor(e, t, n) {
2278
2284
  super(n ?? t), this.errorType = e, this.display = t, this.name = "FormulaError";
2279
2285
  }
2280
- }, go = (e) => e instanceof K, _o = () => new K("div_zero", G.div_zero, "Division by zero"), vo = (e) => new K("invalid_ref", G.invalid_ref, `Invalid reference: ${e}`), yo = (e) => new K("syntax", G.syntax, `Unknown function: ${e}`), bo = (e) => new K("unknown", G.unknown, e), xo = (e) => new K(ho[e] ?? "unknown", e, `Propagated error: ${e}`), So = (e) => go(e) ? {
2286
+ }, Co = (e) => e instanceof K, wo = () => new K("div_zero", G.div_zero, "Division by zero"), To = (e) => new K("invalid_ref", G.invalid_ref, `Invalid reference: ${e}`), Eo = (e) => new K("syntax", G.syntax, `Unknown function: ${e}`), Do = (e) => new K("unknown", G.unknown, e), Oo = (e) => new K(So[e] ?? "unknown", e, `Propagated error: ${e}`), ko = (e) => Co(e) ? {
2281
2287
  type: e.errorType,
2282
2288
  display: e.display
2283
2289
  } : {
2284
2290
  type: "unknown",
2285
2291
  display: G.unknown
2286
- }, Co = /("(?:[^"\\]|\\.|"")*"?|'(?:[^']|'')*'?)/, wo = /(?<![\w$.!])(TRUE|FALSE)(?![\w$.]|\s*[(!])/gi;
2287
- function To(e) {
2288
- return e.split(Co).map((e, t) => t % 2 == 1 ? e : e.replace(wo, (e) => e.toLowerCase())).join("");
2292
+ }, Ao = /("(?:[^"\\]|\\.|"")*"?|'(?:[^']|'')*'?)/, jo = new RegExp(String.raw`(?<!${po}|[$.!])(TRUE|FALSE)(?!${po}|[$.]|\s*[(!])`, "giu");
2293
+ function Mo(e) {
2294
+ return e.split(Ao).map((e, t) => t % 2 == 1 ? e : e.replace(jo, (e) => e.toLowerCase())).join("");
2289
2295
  }
2290
- var Eo = /^\(*\s*(true|false)\s*\)*$/;
2291
- function Do(e) {
2292
- let [, t] = e.trim().match(Eo) ?? [];
2296
+ var No = /^\(*\s*(true|false)\s*\)*$/;
2297
+ function Po(e) {
2298
+ let [, t] = e.trim().match(No) ?? [];
2293
2299
  return t === void 0 ? null : t === "true";
2294
2300
  }
2295
- function Oo(e) {
2301
+ function Fo(e) {
2296
2302
  return /["']/.test(e) ? e : e.replace(/\btrue\b/g, "1").replace(/\bfalse\b/g, "0");
2297
2303
  }
2298
2304
  //#endregion
2299
2305
  //#region src/engine/textArithmetic.ts
2300
- var ko = "+-*/^";
2301
- function Ao(e, t) {
2302
- let n = e.slice(t + 1).split("").findIndex((e, t, n) => e === "\"" && !jo(n, t));
2306
+ var Io = "+-*/^";
2307
+ function Lo(e, t) {
2308
+ let n = e.slice(t + 1).split("").findIndex((e, t, n) => e === "\"" && !Ro(n, t));
2303
2309
  return n === -1 ? e.length : t + 1 + n + 1;
2304
2310
  }
2305
- function jo(e, t) {
2311
+ function Ro(e, t) {
2306
2312
  let n = e.slice(0, t).reverse().findIndex((e) => e !== "\\");
2307
2313
  return (n === -1 ? t : n) % 2 == 1;
2308
2314
  }
2309
- function Mo(e) {
2315
+ function zo(e) {
2310
2316
  let t = [], n = { index: 0 };
2311
2317
  for (; n.index < e.length;) if (e[n.index] === "\"") {
2312
- let r = Ao(e, n.index);
2318
+ let r = Lo(e, n.index);
2313
2319
  t.push({
2314
2320
  start: n.index,
2315
2321
  end: r
@@ -2317,27 +2323,27 @@ function Mo(e) {
2317
2323
  } else n.index += 1;
2318
2324
  return t;
2319
2325
  }
2320
- var No = (e) => e !== void 0 && ko.includes(e);
2321
- function Po(e) {
2322
- let t = Mo(e), n = [], r = { at: 0 };
2326
+ var Bo = (e) => e !== void 0 && Io.includes(e);
2327
+ function Vo(e) {
2328
+ let t = zo(e), n = [], r = { at: 0 };
2323
2329
  for (let { start: i, end: a } of t) {
2324
2330
  let t = e.slice(0, i).trimEnd().at(-1), o = e.slice(a).trimStart()[0];
2325
- if (!No(t) && !No(o)) continue;
2326
- let s = Ie(e.slice(i + 1, a - 1).replace(/\\(.)/g, "$1"));
2327
- if (s === null) return y;
2331
+ if (!Bo(t) && !Bo(o)) continue;
2332
+ let s = w(e.slice(i + 1, a - 1).replace(/\\(.)/g, "$1"));
2333
+ if (s === null) return b;
2328
2334
  n.push(e.slice(r.at, i), `(${s})`), r.at = a;
2329
2335
  }
2330
2336
  return n.push(e.slice(r.at)), n.join("");
2331
2337
  }
2332
2338
  //#endregion
2333
2339
  //#region src/engine/evaluator.ts
2334
- var Fo = RegExp(`^(${at})\\((.*)\\)$`, "i"), Io = RegExp(`^(${at})\\(`, "i");
2335
- function Lo(e) {
2340
+ var Ho = RegExp(`^(${ut})\\((.*)\\)$`, "i"), Uo = RegExp(`^(${ut})\\(`, "i");
2341
+ function Wo(e) {
2336
2342
  if (e == null) return "0";
2337
- let t = S(e) ? e.code : e;
2343
+ let t = C(e) ? e.code : e;
2338
2344
  return typeof t == "string" ? `"${t.replace(/\\/g, "\\\\").replace(/"/g, "\\\"")}"` : t.toString();
2339
2345
  }
2340
- function Ro(e) {
2346
+ function Go(e) {
2341
2347
  let t = "", n = null;
2342
2348
  for (let r = 0; r < e.length; r++) {
2343
2349
  let i = e[r];
@@ -2351,11 +2357,11 @@ function Ro(e) {
2351
2357
  }
2352
2358
  return t;
2353
2359
  }
2354
- function zo(e) {
2355
- let t = Ro(e).replace(/\b(?:true|false)\b/g, "");
2360
+ function Ko(e) {
2361
+ let t = Go(e).replace(/\b(?:true|false)\b/g, "");
2356
2362
  return /^[\d+\-*/(). "']*$/.test(t);
2357
2363
  }
2358
- function Bo(e, t) {
2364
+ function qo(e, t) {
2359
2365
  let n = e[t], r = t + 1;
2360
2366
  for (; r < e.length;) if (e[r] === "\\") r += 2;
2361
2367
  else {
@@ -2364,14 +2370,15 @@ function Bo(e, t) {
2364
2370
  }
2365
2371
  return e.length;
2366
2372
  }
2367
- function Vo(e, t) {
2368
- let n = co(e, t);
2373
+ function Jo(e, t) {
2374
+ let n = go(e, t);
2369
2375
  if (n === -1 || e[n] !== "!") return null;
2370
2376
  let r = e.substring(n + 1).match(/^(\$?[A-Z]+\$?\d+)/);
2371
2377
  return r ? e.substring(t, n + 1 + r[0].length) : null;
2372
2378
  }
2373
- function Ho(e, t) {
2374
- let n = e.substring(t), r = n.match(/^([A-Z][A-Z0-9]*)!/i);
2379
+ var Yo = new RegExp(String.raw`^(${fo})!`, "u");
2380
+ function Xo(e, t) {
2381
+ let n = e.substring(t), r = n.match(Yo);
2375
2382
  if (r) {
2376
2383
  let e = n.substring(r[0].length).match(/^(\$?[A-Z]+\$?\d+)/);
2377
2384
  if (e) return r[0] + e[0];
@@ -2379,23 +2386,23 @@ function Ho(e, t) {
2379
2386
  let i = n.match(/^(\$?[A-Z]+\$?\d+)/);
2380
2387
  return i ? i[0] : null;
2381
2388
  }
2382
- function Uo(e) {
2389
+ function Zo(e) {
2383
2390
  let t = [], n = 0;
2384
2391
  for (; n < e.length;) {
2385
2392
  let r = e[n];
2386
2393
  if (r === "\"") {
2387
- n = Bo(e, n);
2394
+ n = qo(e, n);
2388
2395
  continue;
2389
2396
  }
2390
2397
  if (r === "'") {
2391
- let r = Vo(e, n);
2398
+ let r = Jo(e, n);
2392
2399
  r ? (t.push({
2393
2400
  ref: r,
2394
2401
  start: n
2395
- }), n += r.length) : n = Bo(e, n);
2402
+ }), n += r.length) : n = qo(e, n);
2396
2403
  continue;
2397
2404
  }
2398
- let i = Ho(e, n);
2405
+ let i = Xo(e, n);
2399
2406
  i ? (t.push({
2400
2407
  ref: i,
2401
2408
  start: n
@@ -2403,10 +2410,10 @@ function Uo(e) {
2403
2410
  }
2404
2411
  return t;
2405
2412
  }
2406
- function Wo(e, t, n) {
2413
+ function Qo(e, t, n) {
2407
2414
  return [...t].reverse().reduce((e, { ref: t, start: r }) => e.slice(0, r) + n(t, r) + e.slice(r + t.length), e);
2408
2415
  }
2409
- function Go(e) {
2416
+ function $o(e) {
2410
2417
  let t = [], n = "", r = 0, i = !1, a = "";
2411
2418
  for (let o = 0; o < e.length; o++) {
2412
2419
  let s = e[o];
@@ -2414,62 +2421,62 @@ function Go(e) {
2414
2421
  }
2415
2422
  return n.trim() && t.push(n.trim()), t;
2416
2423
  }
2417
- function Ko(e) {
2424
+ function es(e) {
2418
2425
  let t;
2419
2426
  try {
2420
- t = Function(`return (${Fi(e)})`)();
2427
+ t = Function(`return (${Bi(e)})`)();
2421
2428
  } catch {
2422
- throw bo();
2429
+ throw Do();
2423
2430
  }
2424
2431
  if (typeof t == "number") {
2425
- if (!Number.isFinite(t)) throw _o();
2432
+ if (!Number.isFinite(t)) throw wo();
2426
2433
  return t;
2427
2434
  }
2428
2435
  if (typeof t == "string" || typeof t == "boolean") return t;
2429
- throw bo();
2436
+ throw Do();
2430
2437
  }
2431
- function qo(e) {
2438
+ function ts(e) {
2432
2439
  if (!e.includes("&")) return null;
2433
- let t = pa(e);
2434
- return zo(t) ? (ma(e).filter(Li).forEach(Ko), Ko(t)) : null;
2440
+ let t = va(e);
2441
+ return Ko(t) ? (ya(e).filter(Hi).forEach(es), es(t)) : null;
2435
2442
  }
2436
- var Jo = /^\(*\s*(true|false)\s*\)*$/i, Yo = (e) => (e.startsWith("\"") || e.startsWith("'")) && e.endsWith(e[0] ?? "") && Bo(e, 0) === e.length;
2437
- function Xo(e) {
2438
- let t = Jo.exec(e)?.[1];
2443
+ var ns = /^\(*\s*(true|false)\s*\)*$/i, rs = (e) => (e.startsWith("\"") || e.startsWith("'")) && e.endsWith(e[0] ?? "") && qo(e, 0) === e.length;
2444
+ function is(e) {
2445
+ let t = ns.exec(e)?.[1];
2439
2446
  if (t !== void 0) return t.toLowerCase() === "true";
2440
- let n = qo(e);
2441
- return n === null ? Li(e) || Yo(Za(e)) ? Ko(e) : null : n;
2447
+ let n = ts(e);
2448
+ return n === null ? Hi(e) || rs(no(e)) ? es(e) : null : n;
2442
2449
  }
2443
- var Zo = (e) => e !== null;
2444
- function Qo(e, t) {
2445
- let n = Ra(e), r = t.isCellEmpty;
2450
+ var as = (e) => e !== null;
2451
+ function os(e, t) {
2452
+ let n = Ua(e), r = t.isCellEmpty;
2446
2453
  return !n || !r ? null : n.operands.map((e) => {
2447
- let t = $o(e);
2454
+ let t = ss(e);
2448
2455
  return t !== null && r(t);
2449
2456
  });
2450
2457
  }
2451
- function $o(e) {
2452
- let t = Za(e).trim(), [n, ...r] = Uo(t);
2458
+ function ss(e) {
2459
+ let t = no(e).trim(), [n, ...r] = Zo(t);
2453
2460
  return n && r.length === 0 && n.start === 0 && n.ref.length === t.length ? n.ref : null;
2454
2461
  }
2455
- function es(e, t) {
2456
- return sa(e).filter(({ open: t, close: n }) => {
2462
+ function cs(e, t) {
2463
+ return fa(e).filter(({ open: t, close: n }) => {
2457
2464
  let r = e.slice(t + 1, n).trim();
2458
- return !/[\w.$]$/.test(e.slice(0, t)) && r !== "" && !r.includes(":") && $o(r) === null;
2465
+ return !/[\w.$]$/.test(e.slice(0, t)) && r !== "" && !r.includes(":") && ss(r) === null;
2459
2466
  }).reduceRight((n, { open: r, close: i }) => {
2460
2467
  let a = t.evaluateFormula(e.slice(r + 1, i));
2461
- if (S(a)) throw xo(a.code);
2462
- return n.slice(0, r) + Lo(a) + n.slice(i + 1);
2468
+ if (C(a)) throw Oo(a.code);
2469
+ return n.slice(0, r) + Wo(a) + n.slice(i + 1);
2463
2470
  }, e);
2464
2471
  }
2465
- function ts(e, t) {
2466
- let n = To(e), r = n.trim();
2467
- if (Yo(r)) {
2468
- let e = r.slice(1, -1), n = Xe(e, t.preferDDMMYYYY);
2472
+ function ls(e, t) {
2473
+ let n = Mo(e), r = n.trim();
2474
+ if (rs(r)) {
2475
+ let e = r.slice(1, -1), n = tt(e, t.preferDDMMYYYY);
2469
2476
  return n === null ? e : n;
2470
2477
  }
2471
- let [, i, a] = n.match(Fo) ?? [];
2472
- if (i !== void 0 && a !== void 0 && ot(i)) {
2478
+ let [, i, a] = n.match(Ho) ?? [];
2479
+ if (i !== void 0 && a !== void 0 && dt(i)) {
2473
2480
  let e = 0, n = !0;
2474
2481
  for (let t of a) if (t === "(") e++;
2475
2482
  else if (t === ")" && (e--, e < 0)) {
@@ -2478,8 +2485,8 @@ function ts(e, t) {
2478
2485
  }
2479
2486
  let r = i.toUpperCase(), o = A.get(r);
2480
2487
  if (o && n) {
2481
- let e = Go(a);
2482
- if (o.minArgs !== void 0 && e.length < o.minArgs) throw rt(r, o.minArgs);
2488
+ let e = $o(a);
2489
+ if (o.minArgs !== void 0 && e.length < o.minArgs) throw ct(r, o.minArgs);
2483
2490
  if (o.maxArgs !== void 0 && e.length > o.maxArgs) throw Error(`${r} accepts at most ${o.maxArgs} argument${o.maxArgs === 1 ? "" : "s"}`);
2484
2491
  return o.handler(e, {
2485
2492
  functionName: r,
@@ -2490,22 +2497,23 @@ function ts(e, t) {
2490
2497
  countFilledCells: t.countFilledCells,
2491
2498
  evaluateFormula: t.evaluateFormula,
2492
2499
  isBlankReference: (e) => {
2493
- let n = $o(e);
2500
+ let n = ss(e);
2494
2501
  return n !== null && t.isCellEmpty?.(n) === !0;
2495
2502
  },
2496
- preferDDMMYYYY: t.preferDDMMYYYY
2503
+ preferDDMMYYYY: t.preferDDMMYYYY,
2504
+ currentCell: t.currentCell
2497
2505
  });
2498
2506
  }
2499
- if (n && !o) throw yo(r);
2507
+ if (n && !o) throw Eo(r);
2500
2508
  }
2501
2509
  let o = n, s = 0, c = 0;
2502
2510
  for (; s < o.length && c < 100;) {
2503
2511
  if (c++, o[s] === "\"" || o[s] === "'") {
2504
- s = Bo(o, s);
2512
+ s = qo(o, s);
2505
2513
  continue;
2506
2514
  }
2507
- let [, e] = o.substring(s).match(Io) ?? [];
2508
- if (e === void 0 || !ot(e)) {
2515
+ let [, e] = o.substring(s).match(Uo) ?? [];
2516
+ if (e === void 0 || !dt(e)) {
2509
2517
  if (s++, s >= o.length) break;
2510
2518
  continue;
2511
2519
  }
@@ -2516,43 +2524,43 @@ function ts(e, t) {
2516
2524
  }
2517
2525
  if (i === 0) {
2518
2526
  let e = o.substring(n, a), r = t.evaluateFormula(e);
2519
- if (S(r)) throw xo(r.code);
2520
- let i = typeof r == "string" ? Lo(r) : `(${r})`;
2527
+ if (C(r)) throw Oo(r.code);
2528
+ let i = typeof r == "string" ? Wo(r) : `(${r})`;
2521
2529
  o = o.substring(0, n) + i + o.substring(a), s = n + i.length;
2522
2530
  } else s++;
2523
2531
  }
2524
- o = es(o, t);
2525
- let l = Uo(o), u = l.length === 1 ? l[0] : void 0;
2532
+ o = cs(o, t);
2533
+ let l = Zo(o), u = l.length === 1 ? l[0] : void 0;
2526
2534
  if (u) {
2527
2535
  let e = o.slice(0, u.start), n = o.slice(u.start + u.ref.length);
2528
2536
  if (e.trim() === "" && n.trim() === "") return t.getCellValue(u.ref);
2529
2537
  }
2530
- let d = o, f = Qo(d, t);
2531
- o = Wo(o, l, (e, n) => {
2532
- if (mo(d, n, n + e.length) && t.isCellEmpty?.(e)) return "\"\"";
2533
- let r = t.getCellValue(e), i = Ne(r);
2534
- if (i !== null) throw xo(i);
2535
- return Lo(r);
2538
+ let d = o, f = os(d, t);
2539
+ o = Qo(o, l, (e, n) => {
2540
+ if (xo(d, n, n + e.length) && t.isCellEmpty?.(e)) return "\"\"";
2541
+ let r = t.getCellValue(e), i = Me(r);
2542
+ if (i !== null) throw Oo(i);
2543
+ return Wo(r);
2536
2544
  }), o = o.replace(/"([^"]+)"/g, (e, n) => {
2537
- let r = Xe(n, t.preferDDMMYYYY);
2545
+ let r = tt(n, t.preferDDMMYYYY);
2538
2546
  return r === null ? e : r.toString();
2539
2547
  });
2540
- let p = Po(o);
2541
- if (S(p)) throw xo(p.code);
2542
- o = p, o = Mi(o);
2543
- let ee = Ra(o);
2544
- if (ee) {
2545
- let e = ee.operands.map(Xo), t = f?.length === e.length;
2546
- if (e.every(Zo)) return Ka(t ? Ja(e, f) : e, ee.operators);
2548
+ let p = Vo(o);
2549
+ if (C(p)) throw Oo(p.code);
2550
+ o = p, o = Li(o);
2551
+ let m = Ua(o);
2552
+ if (m) {
2553
+ let e = m.operands.map(is), t = f?.length === e.length;
2554
+ if (e.every(as)) return Za(t ? $a(e, f) : e, m.operators);
2547
2555
  }
2548
- let m = qo(o);
2549
- if (m !== null) return m;
2550
- let te = Do(o);
2551
- if (te !== null) return te;
2552
- if (o = Oo(o), Ri(o)) return Ko(Ii(o));
2553
- if (Li(o)) return Ko(o);
2554
- let h = o.trim();
2555
- return h.startsWith("\"") && h.endsWith("\"") || h.startsWith("'") && h.endsWith("'") ? h.slice(1, -1) : o;
2556
+ let h = ts(o);
2557
+ if (h !== null) return h;
2558
+ let g = Po(o);
2559
+ if (g !== null) return g;
2560
+ if (o = Fo(o), Ui(o)) return es(Vi(o));
2561
+ if (Hi(o)) return es(o);
2562
+ let _ = o.trim();
2563
+ return _.startsWith("\"") && _.endsWith("\"") || _.startsWith("'") && _.endsWith("'") ? _.slice(1, -1) : o;
2556
2564
  }
2557
2565
  A.register({
2558
2566
  name: "IF",
@@ -2598,7 +2606,7 @@ A.register({
2598
2606
  handler: (e, t) => {
2599
2607
  try {
2600
2608
  let n = t.evaluateFormula(O(t, e, 0));
2601
- return Pe(n) ? t.evaluateFormula(O(t, e, 1)) : n;
2609
+ return Ne(n) ? t.evaluateFormula(O(t, e, 1)) : n;
2602
2610
  } catch {
2603
2611
  return t.evaluateFormula(O(t, e, 1));
2604
2612
  }
@@ -2611,7 +2619,7 @@ A.register({
2611
2619
  }), A.register({
2612
2620
  name: "IFNA",
2613
2621
  handler: (e, t) => {
2614
- let n = t.evaluateFormula(O(t, e, 0)), r = S(n) && n.code === x.code;
2622
+ let n = t.evaluateFormula(O(t, e, 0)), r = C(n) && n.code === S.code;
2615
2623
  return n == null || r ? t.evaluateFormula(O(t, e, 1)) : n;
2616
2624
  },
2617
2625
  minArgs: 2,
@@ -2625,12 +2633,12 @@ A.register({
2625
2633
  if (e.length < 2 || e.length % 2 != 0) throw Error("IFS requires an even number of arguments (condition-value pairs)");
2626
2634
  for (let n = 0; n < e.length; n += 2) {
2627
2635
  let r = O(t, e, n), i = O(t, e, n + 1);
2628
- if (io(Wo(r, Uo(r), (e) => ao(t.getCellValue(e))), (e) => {
2629
- let n = eo(e);
2636
+ if (lo(Qo(r, Zo(r), (e) => uo(t.getCellValue(e))), (e) => {
2637
+ let n = ao(e);
2630
2638
  return typeof n == "string" && n === e.trim() ? t.evaluateFormula(e) : n;
2631
2639
  })) return /^["'](.*)["']$/.test(i) ? i.slice(1, -1) : t.evaluateFormula(i);
2632
2640
  }
2633
- return x;
2641
+ return S;
2634
2642
  },
2635
2643
  minArgs: 2,
2636
2644
  description: "Checks multiple conditions and returns the first true result",
@@ -2655,20 +2663,20 @@ A.register({
2655
2663
  });
2656
2664
  //#endregion
2657
2665
  //#region src/engine/formatter.ts
2658
- function ns(e) {
2666
+ function us(e) {
2659
2667
  return /[YMD]|MMM|DD|YYYY|h:mm|AM\/PM/i.test(e);
2660
2668
  }
2661
- var rs = /YYYY|YY|MMMM|MMM|MM|M|dddd|ddd|DD|D|AM\/PM|am\/pm|HH|H|hh|h|mm|ss/g;
2662
- function is(e, t) {
2663
- let n = E(e), r = n.getUTCFullYear(), i = n.getUTCMonth(), a = n.getUTCDate(), o = n.getUTCHours(), s = n.getUTCMinutes(), c = n.getUTCSeconds(), l = n.getUTCDay(), u = /AM\/PM|am\/pm/.test(t), d = o % 12 || 12, f = o >= 12, p = {
2669
+ var ds = /YYYY|YY|MMMM|MMM|MM|M|dddd|ddd|DD|D|AM\/PM|am\/pm|HH|H|hh|h|mm|ss/g;
2670
+ function fs(e, t) {
2671
+ let n = D(e), r = n.getUTCFullYear(), i = n.getUTCMonth(), a = n.getUTCDate(), o = n.getUTCHours(), s = n.getUTCMinutes(), c = n.getUTCSeconds(), l = n.getUTCDay(), u = /AM\/PM|am\/pm/.test(t), d = o % 12 || 12, f = o >= 12, p = {
2664
2672
  YYYY: r.toString(),
2665
2673
  YY: (r % 100).toString().padStart(2, "0"),
2666
- MMMM: Ve[i] ?? Ve[0],
2667
- MMM: Be[i] ?? Be[0],
2674
+ MMMM: Ge[i] ?? Ge[0],
2675
+ MMM: We[i] ?? We[0],
2668
2676
  MM: (i + 1).toString().padStart(2, "0"),
2669
2677
  M: (i + 1).toString(),
2670
- dddd: Ue[l] ?? Ue[0],
2671
- ddd: He[l] ?? He[0],
2678
+ dddd: qe[l] ?? qe[0],
2679
+ ddd: Ke[l] ?? Ke[0],
2672
2680
  DD: a.toString().padStart(2, "0"),
2673
2681
  D: a.toString(),
2674
2682
  "AM/PM": f ? "PM" : "AM",
@@ -2680,18 +2688,18 @@ function is(e, t) {
2680
2688
  mm: s.toString().padStart(2, "0"),
2681
2689
  ss: c.toString().padStart(2, "0")
2682
2690
  };
2683
- return t.replace(rs, (e) => p[e] ?? e);
2691
+ return t.replace(ds, (e) => p[e] ?? e);
2684
2692
  }
2685
- var as = 3, os = (e) => Array.from(e).reduce((t, n, r) => r > 0 && (e.length - r) % as === 0 ? `${t},${n}` : `${t}${n}`, ""), ss = (e) => {
2693
+ var ps = 3, ms = (e) => Array.from(e).reduce((t, n, r) => r > 0 && (e.length - r) % ps === 0 ? `${t},${n}` : `${t}${n}`, ""), hs = (e) => {
2686
2694
  let [t, ...n] = e.split(".");
2687
- return t === void 0 ? e : [os(t), ...n].join(".");
2695
+ return t === void 0 ? e : [ms(t), ...n].join(".");
2688
2696
  };
2689
- function cs(e, t) {
2697
+ function gs(e, t) {
2690
2698
  if (!t) return e.toString();
2691
2699
  try {
2692
- if (ns(t)) return is(e, t);
2700
+ if (us(t)) return fs(e, t);
2693
2701
  if (t.includes("$")) {
2694
- let n = (t.match(/\.0+/) || [""])[0].length - 1, r = Math.abs(e).toFixed(n >= 0 ? n : 0), i = "$" + (t.includes(",") ? ss(r) : r);
2702
+ let n = (t.match(/\.0+/) || [""])[0].length - 1, r = Math.abs(e).toFixed(n >= 0 ? n : 0), i = "$" + (t.includes(",") ? hs(r) : r);
2695
2703
  return e < 0 ? "-" + i : i;
2696
2704
  }
2697
2705
  if (t.includes("%")) {
@@ -2699,7 +2707,7 @@ function cs(e, t) {
2699
2707
  return (e * 100).toFixed(n >= 0 ? n : 2) + "%";
2700
2708
  }
2701
2709
  if (t.includes(",")) {
2702
- let n = (t.match(/\.0+/) || [""])[0].length - 1, r = ss(Math.abs(e).toFixed(n >= 0 ? n : 0));
2710
+ let n = (t.match(/\.0+/) || [""])[0].length - 1, r = hs(Math.abs(e).toFixed(n >= 0 ? n : 0));
2703
2711
  return e < 0 ? "-" + r : r;
2704
2712
  }
2705
2713
  let n = (t.match(/\.0+/) || [""])[0].length - 1;
@@ -2710,98 +2718,98 @@ function cs(e, t) {
2710
2718
  }
2711
2719
  //#endregion
2712
2720
  //#region src/engine/textFormat.ts
2713
- var ls = 100, us = "?\\*_[]\"@;/", ds = /[#0][#0,.]*/, fs = /[#0]/, ps = /0+$/, ms = (e, t) => Array.from(e).filter((e) => t.includes(e)).length, hs = (e) => Array.from(e).some((e) => us.includes(e)), gs = (e) => {
2714
- let t = ds.exec(e);
2721
+ var _s = 100, vs = "?\\*_[]\"@;/", ys = /[#0][#0,.]*/, bs = /[#0]/, xs = /0+$/, Ss = (e, t) => Array.from(e).filter((e) => t.includes(e)).length, Cs = (e) => Array.from(e).some((e) => vs.includes(e)), ws = (e) => {
2722
+ let t = ys.exec(e);
2715
2723
  if (!t || t[0].endsWith(",")) return null;
2716
2724
  let n = e.slice(0, t.index), r = e.slice(t.index + t[0].length);
2717
- if (fs.test(r) || hs(n) || hs(r)) return null;
2725
+ if (bs.test(r) || Cs(n) || Cs(r)) return null;
2718
2726
  let [i, a = "", ...o] = t[0].split(".");
2719
2727
  return i === void 0 || o.length > 0 ? null : {
2720
2728
  prefix: n,
2721
2729
  suffix: r,
2722
2730
  useGrouping: i.includes(","),
2723
- integerMinDigits: ms(i, "0"),
2724
- minDecimals: ms(a, "0"),
2725
- maxDecimals: ms(a, "#0"),
2731
+ integerMinDigits: Ss(i, "0"),
2732
+ minDecimals: Ss(a, "0"),
2733
+ maxDecimals: Ss(a, "#0"),
2726
2734
  isPercent: n.includes("%") || r.includes("%")
2727
2735
  };
2728
- }, _s = (e, t) => {
2729
- let n = e.replace(ps, "");
2736
+ }, Ts = (e, t) => {
2737
+ let n = e.replace(xs, "");
2730
2738
  return n.length >= t ? n : e.slice(0, t);
2731
- }, vs = (e, t) => {
2732
- let n = e.toFixed(t.maxDecimals), r = n.indexOf("."), i = r === -1 ? n : n.slice(0, r), a = r === -1 ? "" : n.slice(r + 1), o = i.padStart(t.integerMinDigits, "0"), s = t.useGrouping ? os(o) : o, c = _s(a, t.minDecimals);
2739
+ }, Es = (e, t) => {
2740
+ let n = e.toFixed(t.maxDecimals), r = n.indexOf("."), i = r === -1 ? n : n.slice(0, r), a = r === -1 ? "" : n.slice(r + 1), o = i.padStart(t.integerMinDigits, "0"), s = t.useGrouping ? ms(o) : o, c = Ts(a, t.minDecimals);
2733
2741
  return c ? `${s}.${c}` : s;
2734
- }, ys = (e) => Array.from(e).every((e) => e === "0" || e === "," || e === "."), bs = (e, t) => {
2742
+ }, Ds = (e) => Array.from(e).every((e) => e === "0" || e === "," || e === "."), Os = (e, t) => {
2735
2743
  if (!Number.isFinite(e)) return null;
2736
- let n = gs(t);
2744
+ let n = ws(t);
2737
2745
  if (!n) return null;
2738
- let r = n.isPercent ? e * ls : e, i = vs(Math.abs(r), n);
2739
- return `${r < 0 && !ys(i) ? "-" : ""}${n.prefix}${i}${n.suffix}`;
2740
- }, xs = (e) => /[\p{L}\p{M}]/u.test(e), Ss = (e) => {
2746
+ let r = n.isPercent ? e * _s : e, i = Es(Math.abs(r), n);
2747
+ return `${r < 0 && !Ds(i) ? "-" : ""}${n.prefix}${i}${n.suffix}`;
2748
+ }, ks = (e) => /[\p{L}\p{M}]/u.test(e), As = (e) => {
2741
2749
  let t = Array.from(e);
2742
2750
  return t.map((e, n) => {
2743
2751
  let r = t[n - 1];
2744
- return r === void 0 || !xs(r) ? e.toUpperCase() : e.toLowerCase();
2752
+ return r === void 0 || !ks(r) ? e.toUpperCase() : e.toLowerCase();
2745
2753
  }).join("");
2746
- }, Cs = (e) => !Number.isFinite(e) || e < 0 ? y : Math.trunc(e), ws = (e, t) => {
2747
- let n = Cs(t);
2748
- return S(n) ? n : e.substring(0, n);
2749
- }, Ts = (e, t) => {
2750
- let n = Cs(t);
2751
- return S(n) ? n : e.substring(e.length - n);
2752
- }, Es = (e, t, n, r) => {
2754
+ }, js = (e) => !Number.isFinite(e) || e < 0 ? b : Math.trunc(e), Ms = (e, t) => {
2755
+ let n = js(t);
2756
+ return C(n) ? n : e.substring(0, n);
2757
+ }, Ns = (e, t) => {
2758
+ let n = js(t);
2759
+ return C(n) ? n : e.substring(e.length - n);
2760
+ }, Ps = (e, t, n, r) => {
2753
2761
  let i = e.split(t);
2754
2762
  return r > i.length - 1 ? e : i.slice(0, r).join(t) + n + i.slice(r).join(t);
2755
- }, Ds = (e, t, n, r) => {
2763
+ }, Fs = (e, t, n, r) => {
2756
2764
  if (t === "") return e;
2757
2765
  if (r === void 0) return e.split(t).join(n);
2758
2766
  let i = Math.trunc(r);
2759
- return !Number.isFinite(i) || i <= 0 ? y : Es(e, t, n, i);
2760
- }, Os = (e, t) => e.isBlankReference?.(t) ? "" : st(e.evaluateFormula(t)), q = (e, t, n) => Os(e, O(e, t, n)), ks = (e, t) => e.map((e) => Os(t, e.trim())).join(""), As = ks, js = (e, t) => ws(q(t, e, 0), e.length === 2 ? Number(t.evaluateFormula(O(t, e, 1))) : 1), Ms = (e, t) => Ts(q(t, e, 0), e.length === 2 ? Number(t.evaluateFormula(O(t, e, 1))) : 1), Ns = (e, t, n) => {
2761
- let r = Cs(n);
2762
- if (S(r)) return r;
2763
- if (!Number.isFinite(t) || t < 1) return y;
2767
+ return !Number.isFinite(i) || i <= 0 ? b : Ps(e, t, n, i);
2768
+ }, Is = (e, t) => e.isBlankReference?.(t) ? "" : ft(e.evaluateFormula(t)), q = (e, t, n) => Is(e, O(e, t, n)), Ls = (e, t) => e.map((e) => Is(t, e.trim())).join(""), Rs = Ls, zs = (e, t) => Ms(q(t, e, 0), e.length === 2 ? Number(t.evaluateFormula(O(t, e, 1))) : 1), Bs = (e, t) => Ns(q(t, e, 0), e.length === 2 ? Number(t.evaluateFormula(O(t, e, 1))) : 1), Vs = (e, t, n) => {
2769
+ let r = js(n);
2770
+ if (C(r)) return r;
2771
+ if (!Number.isFinite(t) || t < 1) return b;
2764
2772
  let i = Math.trunc(t) - 1;
2765
2773
  return e.substring(i, i + r);
2766
- }, Ps = (e, t) => Ns(q(t, e, 0), Number(t.evaluateFormula(O(t, e, 1))), Number(t.evaluateFormula(O(t, e, 2)))), Fs = (e, t) => q(t, e, 0).length, Is = (e, t) => q(t, e, 0).toUpperCase(), Ls = (e, t) => q(t, e, 0).toLowerCase(), Rs = (e, t) => Ss(q(t, e, 0)), zs = (e, t) => q(t, e, 0).trim().replace(/\s+/g, " "), Bs = (e, t) => Ds(q(t, e, 0), q(t, e, 1), q(t, e, 2), e.length === 4 ? Number(t.evaluateFormula(O(t, e, 3))) : void 0), Vs = (e, t) => {
2774
+ }, Hs = (e, t) => Vs(q(t, e, 0), Number(t.evaluateFormula(O(t, e, 1))), Number(t.evaluateFormula(O(t, e, 2)))), Us = (e, t) => q(t, e, 0).length, Ws = (e, t) => q(t, e, 0).toUpperCase(), Gs = (e, t) => q(t, e, 0).toLowerCase(), Ks = (e, t) => As(q(t, e, 0)), qs = (e, t) => q(t, e, 0).trim().replace(/\s+/g, " "), Js = (e, t) => Fs(q(t, e, 0), q(t, e, 1), q(t, e, 2), e.length === 4 ? Number(t.evaluateFormula(O(t, e, 3))) : void 0), Ys = (e, t) => {
2767
2775
  let n = q(t, e, 0), r = Number(t.evaluateFormula(O(t, e, 1))) - 1, i = Number(t.evaluateFormula(O(t, e, 2))), a = q(t, e, 3);
2768
2776
  return n.substring(0, r) + a + n.substring(r + i);
2769
- }, Hs = (e, t, n, r) => {
2777
+ }, Xs = (e, t, n, r) => {
2770
2778
  let i = r.caseInsensitive ? e.toLowerCase() : e, a = (r.caseInsensitive ? t.toLowerCase() : t).indexOf(i, n);
2771
- return a === -1 ? y : a + 1;
2772
- }, Us = (e) => (t, n) => Hs(q(n, t, 0), q(n, t, 1), t.length === 3 ? Number(n.evaluateFormula(O(n, t, 2))) - 1 : 0, { caseInsensitive: e }), Ws = Us(!1), Gs = Us(!0), Ks = (e) => e.replace(/^["']/, "").replace(/["']$/, ""), qs = (e, t) => {
2773
- let n = t.evaluateFormula(O(t, e, 0)), r = Ks(q(t, e, 1));
2774
- return typeof n == "number" ? bs(n, r) ?? st(n) : st(n);
2775
- }, Js = /^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/, Ys = (e) => {
2776
- if (!Js.test(e)) return null;
2779
+ return a === -1 ? b : a + 1;
2780
+ }, Zs = (e) => (t, n) => Xs(q(n, t, 0), q(n, t, 1), t.length === 3 ? Number(n.evaluateFormula(O(n, t, 2))) - 1 : 0, { caseInsensitive: e }), Qs = Zs(!1), $s = Zs(!0), ec = (e) => e.replace(/^["']/, "").replace(/["']$/, ""), tc = (e, t) => {
2781
+ let n = t.evaluateFormula(O(t, e, 0)), r = ec(q(t, e, 1));
2782
+ return typeof n == "number" ? Os(n, r) ?? ft(n) : ft(n);
2783
+ }, nc = /^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/, rc = (e) => {
2784
+ if (!nc.test(e)) return null;
2777
2785
  let t = Number(e);
2778
2786
  return Number.isFinite(t) ? t : null;
2779
- }, Xs = (e) => {
2787
+ }, ic = (e) => {
2780
2788
  let t = e.replace(/[$,]/g, "").trim();
2781
2789
  if (t.endsWith("%")) {
2782
- let e = Ys(t.slice(0, -1).trim());
2783
- return e === null ? y : e / 100;
2790
+ let e = rc(t.slice(0, -1).trim());
2791
+ return e === null ? b : e / 100;
2784
2792
  }
2785
- let n = Ys(t);
2786
- return n === null ? y : n;
2793
+ let n = rc(t);
2794
+ return n === null ? b : n;
2787
2795
  };
2788
2796
  A.register({
2789
2797
  name: "CONCATENATE",
2790
- handler: ks,
2798
+ handler: Ls,
2791
2799
  minArgs: 1,
2792
2800
  description: "Joins several text strings into one string",
2793
2801
  examples: ["CONCATENATE(\"Hello\", \" \", \"World\")", "CONCATENATE(A1, B1)"],
2794
2802
  category: "Text"
2795
2803
  }), A.register({
2796
2804
  name: "CONCAT",
2797
- handler: As,
2805
+ handler: Rs,
2798
2806
  minArgs: 1,
2799
2807
  description: "Joins several text strings into one string (same as CONCATENATE)",
2800
2808
  examples: ["CONCAT(\"Hello\", \" \", \"World\")", "CONCAT(A1, B1)"],
2801
2809
  category: "Text"
2802
2810
  }), A.register({
2803
2811
  name: "LEFT",
2804
- handler: js,
2812
+ handler: zs,
2805
2813
  minArgs: 1,
2806
2814
  maxArgs: 2,
2807
2815
  description: "Returns the leftmost characters from a text string",
@@ -2809,7 +2817,7 @@ A.register({
2809
2817
  category: "Text"
2810
2818
  }), A.register({
2811
2819
  name: "RIGHT",
2812
- handler: Ms,
2820
+ handler: Bs,
2813
2821
  minArgs: 1,
2814
2822
  maxArgs: 2,
2815
2823
  description: "Returns the rightmost characters from a text string",
@@ -2817,7 +2825,7 @@ A.register({
2817
2825
  category: "Text"
2818
2826
  }), A.register({
2819
2827
  name: "MID",
2820
- handler: Ps,
2828
+ handler: Hs,
2821
2829
  minArgs: 3,
2822
2830
  maxArgs: 3,
2823
2831
  description: "Returns characters from the middle of a text string",
@@ -2825,7 +2833,7 @@ A.register({
2825
2833
  category: "Text"
2826
2834
  }), A.register({
2827
2835
  name: "LEN",
2828
- handler: Fs,
2836
+ handler: Us,
2829
2837
  minArgs: 1,
2830
2838
  maxArgs: 1,
2831
2839
  description: "Returns the number of characters in a text string",
@@ -2833,7 +2841,7 @@ A.register({
2833
2841
  category: "Text"
2834
2842
  }), A.register({
2835
2843
  name: "UPPER",
2836
- handler: Is,
2844
+ handler: Ws,
2837
2845
  minArgs: 1,
2838
2846
  maxArgs: 1,
2839
2847
  description: "Converts text to uppercase",
@@ -2841,7 +2849,7 @@ A.register({
2841
2849
  category: "Text"
2842
2850
  }), A.register({
2843
2851
  name: "LOWER",
2844
- handler: Ls,
2852
+ handler: Gs,
2845
2853
  minArgs: 1,
2846
2854
  maxArgs: 1,
2847
2855
  description: "Converts text to lowercase",
@@ -2849,7 +2857,7 @@ A.register({
2849
2857
  category: "Text"
2850
2858
  }), A.register({
2851
2859
  name: "PROPER",
2852
- handler: Rs,
2860
+ handler: Ks,
2853
2861
  minArgs: 1,
2854
2862
  maxArgs: 1,
2855
2863
  description: "Capitalizes the first letter of each word",
@@ -2857,7 +2865,7 @@ A.register({
2857
2865
  category: "Text"
2858
2866
  }), A.register({
2859
2867
  name: "TRIM",
2860
- handler: zs,
2868
+ handler: qs,
2861
2869
  minArgs: 1,
2862
2870
  maxArgs: 1,
2863
2871
  description: "Removes extra spaces from text",
@@ -2865,7 +2873,7 @@ A.register({
2865
2873
  category: "Text"
2866
2874
  }), A.register({
2867
2875
  name: "SUBSTITUTE",
2868
- handler: Bs,
2876
+ handler: Js,
2869
2877
  minArgs: 3,
2870
2878
  maxArgs: 4,
2871
2879
  description: "Replaces old text with new text in a string",
@@ -2873,7 +2881,7 @@ A.register({
2873
2881
  category: "Text"
2874
2882
  }), A.register({
2875
2883
  name: "REPLACE",
2876
- handler: Vs,
2884
+ handler: Ys,
2877
2885
  minArgs: 4,
2878
2886
  maxArgs: 4,
2879
2887
  description: "Replaces part of a text string with a different text string",
@@ -2881,7 +2889,7 @@ A.register({
2881
2889
  category: "Text"
2882
2890
  }), A.register({
2883
2891
  name: "FIND",
2884
- handler: Ws,
2892
+ handler: Qs,
2885
2893
  minArgs: 2,
2886
2894
  maxArgs: 3,
2887
2895
  description: "Finds one text string within another (case-sensitive)",
@@ -2889,7 +2897,7 @@ A.register({
2889
2897
  category: "Text"
2890
2898
  }), A.register({
2891
2899
  name: "SEARCH",
2892
- handler: Gs,
2900
+ handler: $s,
2893
2901
  minArgs: 2,
2894
2902
  maxArgs: 3,
2895
2903
  description: "Finds one text string within another (case-insensitive)",
@@ -2897,7 +2905,7 @@ A.register({
2897
2905
  category: "Text"
2898
2906
  }), A.register({
2899
2907
  name: "TEXT",
2900
- handler: qs,
2908
+ handler: tc,
2901
2909
  minArgs: 2,
2902
2910
  maxArgs: 2,
2903
2911
  description: "Formats a number and converts it to text",
@@ -2905,7 +2913,7 @@ A.register({
2905
2913
  category: "Text"
2906
2914
  }), A.register({
2907
2915
  name: "VALUE",
2908
- handler: (e, t) => Xs(st(t.evaluateFormula(O(t, e, 0)))),
2916
+ handler: (e, t) => ic(ft(t.evaluateFormula(O(t, e, 0)))),
2909
2917
  minArgs: 1,
2910
2918
  maxArgs: 1,
2911
2919
  description: "Converts a text string to a number",
@@ -2922,50 +2930,50 @@ A.register({
2922
2930
  });
2923
2931
  //#endregion
2924
2932
  //#region src/engine/financial-math.ts
2925
- function Zs(e, t, n, r, i) {
2933
+ function ac(e, t, n, r, i) {
2926
2934
  if (e === 0) return -(r + n * t);
2927
2935
  let a = (1 + e) ** +t;
2928
2936
  return -r * a - n * (a - 1) * (1 + e * i) / e;
2929
2937
  }
2930
- function Qs(e, t, n, r, i) {
2938
+ function oc(e, t, n, r, i) {
2931
2939
  if (e === 0) return -(r + n) / t;
2932
2940
  let a = (1 + e) ** +t;
2933
2941
  return -e * (r + n * a) / ((a - 1) * (1 + e * i));
2934
2942
  }
2935
- function $s(e, t, n, r, i, a) {
2936
- let o = Qs(e, n, r, i, a);
2943
+ function sc(e, t, n, r, i, a) {
2944
+ let o = oc(e, n, r, i, a);
2937
2945
  if (t === 1 && a === 1) return 0;
2938
- let s = Zs(e, a === 1 ? t - 2 : t - 1, o, r, a) * e;
2946
+ let s = ac(e, a === 1 ? t - 2 : t - 1, o, r, a) * e;
2939
2947
  return a === 1 ? s / (1 + e) : s;
2940
2948
  }
2941
- function ec(e, t, n, r, i, a) {
2942
- return Qs(e, n, r, i, a) - $s(e, t, n, r, i, a);
2949
+ function cc(e, t, n, r, i, a) {
2950
+ return oc(e, n, r, i, a) - sc(e, t, n, r, i, a);
2943
2951
  }
2944
- function tc(e, t, n, r, i) {
2952
+ function lc(e, t, n, r, i) {
2945
2953
  if (e === 0) return -(r + n * t);
2946
2954
  let a = (1 + e) ** +t;
2947
2955
  return (-r - n * (a - 1) * (1 + e * i) / e) / a;
2948
2956
  }
2949
- function nc(e, t, n, r, i) {
2957
+ function uc(e, t, n, r, i) {
2950
2958
  if (e === 0) return -(r + n) / t;
2951
2959
  let a = t * (1 + e * i);
2952
2960
  return Math.log((a - r * e) / (a + n * e)) / Math.log(1 + e);
2953
2961
  }
2954
- var rc = 100, ic = 1e-7;
2955
- function ac(e, t, n, r, i, a) {
2962
+ var dc = 100, fc = 1e-7;
2963
+ function pc(e, t, n, r, i, a) {
2956
2964
  let o = a;
2957
- for (let a = 0; a < rc; a++) {
2958
- Math.abs(o) < ic && (o = ic);
2965
+ for (let a = 0; a < dc; a++) {
2966
+ Math.abs(o) < fc && (o = fc);
2959
2967
  let a = (1 + o) ** +e, s = n * a + t * ((a - 1) / o) * (1 + o * i) + r, c = e * n * (1 + o) ** (e - 1) + t * (1 + o * i) * (e * (1 + o) ** (e - 1) * o - (a - 1)) / (o * o) + t * i * ((a - 1) / o), l = o - s / c;
2960
- if (Math.abs(l - o) < ic) return Number.isFinite(l) ? l : b;
2968
+ if (Math.abs(l - o) < fc) return Number.isFinite(l) ? l : x;
2961
2969
  o = l;
2962
2970
  }
2963
- return b;
2971
+ return x;
2964
2972
  }
2965
- function oc(e, t) {
2973
+ function mc(e, t) {
2966
2974
  return t.reduce((t, n, r) => t + n / (1 + e) ** +(r + 1), 0);
2967
2975
  }
2968
- function sc(e, t) {
2976
+ function hc(e, t) {
2969
2977
  return e.reduce((e, n, r) => {
2970
2978
  let i = (1 + t) ** +r;
2971
2979
  return {
@@ -2977,49 +2985,49 @@ function sc(e, t) {
2977
2985
  dnpv: 0
2978
2986
  });
2979
2987
  }
2980
- function cc(e, t) {
2988
+ function gc(e, t) {
2981
2989
  let n = t;
2982
- for (let t = 0; t < rc; t++) {
2983
- let { npv: t, dnpv: r } = sc(e, n);
2984
- if (Math.abs(t) < ic) return n;
2985
- if (Math.abs(r) < ic) return b;
2990
+ for (let t = 0; t < dc; t++) {
2991
+ let { npv: t, dnpv: r } = hc(e, n);
2992
+ if (Math.abs(t) < fc) return n;
2993
+ if (Math.abs(r) < fc) return x;
2986
2994
  let i = n - t / r;
2987
- if (Math.abs(i - n) < ic) return Number.isFinite(i) ? i : b;
2995
+ if (Math.abs(i - n) < fc) return Number.isFinite(i) ? i : x;
2988
2996
  n = i;
2989
2997
  }
2990
- return b;
2998
+ return x;
2991
2999
  }
2992
3000
  //#endregion
2993
3001
  //#region src/engine/functions/financial.ts
2994
- var lc = (e, t, n, r) => {
3002
+ var _c = (e, t, n, r) => {
2995
3003
  let i = (n) => j(t.evaluateFormula(O(t, e, n))), a = Array.from({ length: n }, (e, t) => i(t)), o = r.map((t, r) => e.length > n + r ? i(n + r) : t);
2996
3004
  return [...a, ...o];
2997
- }, uc = (e, t) => {
2998
- let [n, r, i, a, o] = lc(e, t, 3, [0, 0]);
2999
- return Zs(n, r, i, a, o);
3000
- }, dc = (e, t) => {
3001
- let [n, r, i, a, o] = lc(e, t, 3, [0, 0]);
3002
- return tc(n, r, i, a, o);
3003
- }, fc = (e, t) => {
3004
- let [n, r, i, a, o] = lc(e, t, 3, [0, 0]);
3005
- return Qs(n, r, i, a, o);
3006
- }, pc = (e, t) => {
3007
- let [n, r, i, a, o] = lc(e, t, 3, [0, 0]);
3008
- return nc(n, r, i, a, o);
3009
- }, mc = (e, t) => {
3010
- let [n, r, i, a, o, s] = lc(e, t, 3, [
3005
+ }, vc = (e, t) => {
3006
+ let [n, r, i, a, o] = _c(e, t, 3, [0, 0]);
3007
+ return ac(n, r, i, a, o);
3008
+ }, yc = (e, t) => {
3009
+ let [n, r, i, a, o] = _c(e, t, 3, [0, 0]);
3010
+ return lc(n, r, i, a, o);
3011
+ }, bc = (e, t) => {
3012
+ let [n, r, i, a, o] = _c(e, t, 3, [0, 0]);
3013
+ return oc(n, r, i, a, o);
3014
+ }, xc = (e, t) => {
3015
+ let [n, r, i, a, o] = _c(e, t, 3, [0, 0]);
3016
+ return uc(n, r, i, a, o);
3017
+ }, Sc = (e, t) => {
3018
+ let [n, r, i, a, o, s] = _c(e, t, 3, [
3011
3019
  0,
3012
3020
  0,
3013
3021
  .1
3014
3022
  ]);
3015
- return ac(n, r, i, a, o, s);
3016
- }, hc = (e) => (t, n) => {
3017
- let [r, i, a, o, s, c] = lc(t, n, 4, [0, 0]);
3023
+ return pc(n, r, i, a, o, s);
3024
+ }, Cc = (e) => (t, n) => {
3025
+ let [r, i, a, o, s, c] = _c(t, n, 4, [0, 0]);
3018
3026
  return e(r, i, a, o, s, c);
3019
- }, gc = hc($s), _c = hc(ec), vc = (e, t) => e.flatMap((e) => (e.includes(":") ? t.getRangeValues(e) : [t.evaluateFormula(e)]).map(j));
3027
+ }, wc = Cc(sc), Tc = Cc(cc), Ec = (e, t) => e.flatMap((e) => (e.includes(":") ? t.getRangeValues(e) : [t.evaluateFormula(e)]).map(j));
3020
3028
  A.register({
3021
3029
  name: "FV",
3022
- handler: uc,
3030
+ handler: vc,
3023
3031
  minArgs: 3,
3024
3032
  maxArgs: 5,
3025
3033
  description: "Calculates the future value of an investment based on periodic, constant payments and a constant interest rate",
@@ -3027,7 +3035,7 @@ A.register({
3027
3035
  category: "Financial"
3028
3036
  }), A.register({
3029
3037
  name: "PV",
3030
- handler: dc,
3038
+ handler: yc,
3031
3039
  minArgs: 3,
3032
3040
  maxArgs: 5,
3033
3041
  description: "Calculates the present value of an investment based on periodic, constant payments and a constant interest rate",
@@ -3035,7 +3043,7 @@ A.register({
3035
3043
  category: "Financial"
3036
3044
  }), A.register({
3037
3045
  name: "PMT",
3038
- handler: fc,
3046
+ handler: bc,
3039
3047
  minArgs: 3,
3040
3048
  maxArgs: 5,
3041
3049
  description: "Calculates the payment for a loan based on constant payments and a constant interest rate",
@@ -3043,7 +3051,7 @@ A.register({
3043
3051
  category: "Financial"
3044
3052
  }), A.register({
3045
3053
  name: "NPER",
3046
- handler: pc,
3054
+ handler: xc,
3047
3055
  minArgs: 3,
3048
3056
  maxArgs: 5,
3049
3057
  description: "Calculates the number of periods for an investment based on periodic, constant payments and a constant interest rate",
@@ -3051,7 +3059,7 @@ A.register({
3051
3059
  category: "Financial"
3052
3060
  }), A.register({
3053
3061
  name: "RATE",
3054
- handler: mc,
3062
+ handler: Sc,
3055
3063
  minArgs: 3,
3056
3064
  maxArgs: 6,
3057
3065
  description: "Calculates the interest rate per period of an annuity using iteration",
@@ -3059,7 +3067,7 @@ A.register({
3059
3067
  category: "Financial"
3060
3068
  }), A.register({
3061
3069
  name: "IPMT",
3062
- handler: gc,
3070
+ handler: wc,
3063
3071
  minArgs: 4,
3064
3072
  maxArgs: 6,
3065
3073
  description: "Calculates the interest payment for a given period for an investment",
@@ -3067,7 +3075,7 @@ A.register({
3067
3075
  category: "Financial"
3068
3076
  }), A.register({
3069
3077
  name: "PPMT",
3070
- handler: _c,
3078
+ handler: Tc,
3071
3079
  minArgs: 4,
3072
3080
  maxArgs: 6,
3073
3081
  description: "Calculates the payment on the principal for a given period for an investment",
@@ -3075,7 +3083,7 @@ A.register({
3075
3083
  category: "Financial"
3076
3084
  }), A.register({
3077
3085
  name: "NPV",
3078
- handler: (e, t) => oc(j(t.evaluateFormula(O(t, e, 0))), vc(e.slice(1), t)),
3086
+ handler: (e, t) => mc(j(t.evaluateFormula(O(t, e, 0))), Ec(e.slice(1), t)),
3079
3087
  minArgs: 2,
3080
3088
  description: "Calculates the net present value of an investment based on a discount rate and a series of future cash flows",
3081
3089
  examples: ["NPV(0.1, -10000, 3000, 4200, 6800)", "NPV(A1, B1:B10)"],
@@ -3085,7 +3093,7 @@ A.register({
3085
3093
  handler: (e, t) => {
3086
3094
  let n = t.getRangeValues(O(t, e, 0)).map(j), r = e.length === 2 ? j(t.evaluateFormula(O(t, e, 1))) : .1;
3087
3095
  if (n.length === 0) throw Error("IRR requires at least one value");
3088
- return cc(n, r);
3096
+ return gc(n, r);
3089
3097
  },
3090
3098
  minArgs: 1,
3091
3099
  maxArgs: 2,
@@ -3095,7 +3103,7 @@ A.register({
3095
3103
  });
3096
3104
  //#endregion
3097
3105
  //#region src/engine/parser.ts
3098
- function yc(e) {
3106
+ function Dc(e) {
3099
3107
  let t = 0;
3100
3108
  for (let n = 0; n < e.length; n++) t = t * 26 + (e.charCodeAt(n) - 64);
3101
3109
  return t - 1;
@@ -3110,29 +3118,29 @@ function J(e) {
3110
3118
  }
3111
3119
  //#endregion
3112
3120
  //#region src/engine/formulaRefs.ts
3113
- var bc = /\$?[A-Z]+\$?\d+:\$?[A-Z]+\$?\d+/g, xc = /\$?[A-Z]+\$?\d+/g;
3114
- function Sc(e) {
3121
+ var Oc = /\$?[A-Z]+\$?\d+:\$?[A-Z]+\$?\d+/g, kc = /\$?[A-Z]+\$?\d+/g;
3122
+ function Ac(e) {
3115
3123
  return e.startsWith("=") ? e.slice(1) : e;
3116
3124
  }
3117
- var Cc = /^([A-Z]+)(\d+)$/;
3118
- function wc(e) {
3119
- let [, t, n] = e.match(Cc) ?? [];
3125
+ var jc = /^([A-Z]+)(\d+)$/;
3126
+ function Mc(e) {
3127
+ let [, t, n] = e.match(jc) ?? [];
3120
3128
  return t === void 0 || n === void 0 ? null : {
3121
- col: yc(t),
3129
+ col: Dc(t),
3122
3130
  rowNumber: parseInt(n, 10)
3123
3131
  };
3124
3132
  }
3125
- function Tc(e) {
3133
+ function Nc(e) {
3126
3134
  let [t, n, ...r] = e.split(":");
3127
3135
  if (t === void 0 || n === void 0 || r.length > 0) return null;
3128
- let i = wc(t), a = wc(n);
3136
+ let i = Mc(t), a = Mc(n);
3129
3137
  return i && a ? {
3130
3138
  start: i,
3131
3139
  end: a
3132
3140
  } : null;
3133
3141
  }
3134
- function Ec(e) {
3135
- let t = Tc(e.replace(/\$/g, ""));
3142
+ function Pc(e) {
3143
+ let t = Nc(e.replace(/\$/g, ""));
3136
3144
  if (!t) return [];
3137
3145
  let { start: n, end: r } = t, i = [];
3138
3146
  for (let e = n.rowNumber - 1; e <= r.rowNumber - 1; e++) for (let t = n.col; t <= r.col; t++) i.push({
@@ -3141,25 +3149,25 @@ function Ec(e) {
3141
3149
  });
3142
3150
  return i;
3143
3151
  }
3144
- function Dc(e) {
3152
+ function Fc(e) {
3145
3153
  let t = e.trim().toUpperCase();
3146
3154
  if (t.includes(":")) {
3147
- let e = Ec(t);
3155
+ let e = Pc(t);
3148
3156
  return e.length > 0 ? e : null;
3149
3157
  }
3150
- let n = Oc(t);
3158
+ let n = Ic(t);
3151
3159
  return n ? [n] : null;
3152
3160
  }
3153
- function Oc(e) {
3154
- let t = wc(e.replace(/\$/g, ""));
3161
+ function Ic(e) {
3162
+ let t = Mc(e.replace(/\$/g, ""));
3155
3163
  return t ? {
3156
3164
  col: t.col,
3157
3165
  row: t.rowNumber - 1
3158
3166
  } : null;
3159
3167
  }
3160
- var kc = /^\$?[A-Za-z]+\$?\d+$/;
3161
- function Ac(e) {
3162
- let t = e.lastIndexOf("!"), n = t >= 0 ? e.slice(0, t + 1) : "", r = t >= 0 ? e.slice(t + 1) : e, i = r.split(":").every((e) => kc.test(e)) ? Tc(r.replace(/\$/g, "").toUpperCase()) : null;
3168
+ var Lc = /^\$?[A-Za-z]+\$?\d+$/;
3169
+ function Rc(e) {
3170
+ let t = e.lastIndexOf("!"), n = t >= 0 ? e.slice(0, t + 1) : "", r = t >= 0 ? e.slice(t + 1) : e, i = r.split(":").every((e) => Lc.test(e)) ? Nc(r.replace(/\$/g, "").toUpperCase()) : null;
3163
3171
  if (!i) return null;
3164
3172
  let { start: a, end: o } = i;
3165
3173
  return {
@@ -3170,68 +3178,121 @@ function Ac(e) {
3170
3178
  endRow: o.rowNumber
3171
3179
  };
3172
3180
  }
3173
- var jc = 0, Mc = 1;
3174
- function Nc(e, t) {
3181
+ var zc = 0, Bc = 1;
3182
+ function Vc(e, t) {
3175
3183
  let n = Math.trunc(e);
3176
- return Number.isFinite(n) ? n === jc ? t === 1 ? 0 : null : n < Mc || n > t ? null : n - Mc : null;
3184
+ return Number.isFinite(n) ? n === zc ? t === 1 ? 0 : null : n < Bc || n > t ? null : n - Bc : null;
3177
3185
  }
3178
- function Pc(e, t, n) {
3179
- let r = Nc(t, e.endRow - e.startRow + 1), i = Nc(n, e.endCol - e.startCol + 1);
3186
+ function Hc(e, t, n) {
3187
+ let r = Vc(t, e.endRow - e.startRow + 1), i = Vc(n, e.endCol - e.startCol + 1);
3180
3188
  return r === null || i === null ? null : {
3181
3189
  colIndex: e.startCol + i,
3182
3190
  row: e.startRow + r
3183
3191
  };
3184
3192
  }
3185
- function Fc(e, t) {
3193
+ function Uc(e, t) {
3186
3194
  let n = Math.trunc(e);
3187
- return !Number.isFinite(n) || n < Mc || n > t ? null : n - Mc;
3195
+ return !Number.isFinite(n) || n < Bc || n > t ? null : n - Bc;
3188
3196
  }
3189
- function Ic(e) {
3190
- let t = Sc(e), n = [], r = /* @__PURE__ */ new Set(), i = (e) => {
3197
+ function Wc(e) {
3198
+ let t = Ac(e), n = [], r = /* @__PURE__ */ new Set(), i = (e) => {
3191
3199
  let t = `${e.row},${e.col}`;
3192
3200
  r.has(t) || (r.add(t), n.push(e));
3193
3201
  };
3194
- for (let e of t.match(bc) ?? []) for (let t of Ec(e)) i(t);
3195
- let a = t.replace(bc, "");
3196
- for (let e of a.match(xc) ?? []) {
3197
- let t = Oc(e);
3202
+ for (let e of t.match(Oc) ?? []) for (let t of Pc(e)) i(t);
3203
+ let a = t.replace(Oc, "");
3204
+ for (let e of a.match(kc) ?? []) {
3205
+ let t = Ic(e);
3198
3206
  t && i(t);
3199
3207
  }
3200
3208
  return n;
3201
3209
  }
3202
3210
  //#endregion
3203
3211
  //#region src/engine/functions/lookup-math.ts
3204
- function Lc(e) {
3212
+ function Gc(e) {
3205
3213
  if (typeof e == "boolean") return e;
3206
3214
  if (typeof e == "number") return e !== 0;
3207
- if (S(e)) return !1;
3215
+ if (C(e)) return !1;
3208
3216
  let t = e.trim().toUpperCase();
3209
3217
  return t === "TRUE" || t === "1";
3210
3218
  }
3211
3219
  //#endregion
3220
+ //#region src/engine/functions/reference-math.ts
3221
+ function Kc(e) {
3222
+ let t = e.trim();
3223
+ return t.includes(":") ? Rc(t) : Rc(`${t}:${t.slice(t.lastIndexOf("!") + 1)}`);
3224
+ }
3225
+ //#endregion
3212
3226
  //#region src/engine/functions/lookup.ts
3213
- var Rc = (e, t) => Array.from({ length: Math.max(0, t - e + 1) }, (t, n) => e + n), zc = (e, t, n, r, i) => Rc(r, i).map((r) => e.getCellValue(`${t}${n}${r}`)), Bc = (e, t, n, r, i) => Rc(r, i).map((r) => e.getCellValue(`${t}${J(r)}${n}`)), Vc = (e, t) => e.reduce((e, n, r) => t(n) ? r : e, -1), Hc = (e, t) => {
3227
+ var qc = (e, t) => Array.from({ length: Math.max(0, t - e + 1) }, (t, n) => e + n), Jc = (e, t, n, r, i) => qc(r, i).map((r) => e.getCellValue(`${t}${n}${r}`)), Yc = (e, t, n, r, i) => qc(r, i).map((r) => e.getCellValue(`${t}${J(r)}${n}`)), Xc = (e, t) => e.reduce((e, n, r) => t(n) ? r : e, -1), Zc = (e, t) => {
3214
3228
  let n = e.findIndex((e) => !t(e));
3215
3229
  return (n === -1 ? e.length : n) - 1;
3216
- }, Uc = (e, t) => typeof e == "number" && typeof t == "number" ? e - t : String(e).localeCompare(String(t)), Wc = (e, t, n = 1, r = 1) => {
3230
+ }, Qc = (e, t) => typeof e == "number" && typeof t == "number" ? e - t : String(e).localeCompare(String(t)), $c = (e, t, n = 1, r = 1) => {
3217
3231
  if (n === 0) {
3218
- let n = typeof e == "string" && (e.includes("*") || e.includes("?")) ? pt(e) : (t) => t == e;
3219
- return r === 1 ? t.findIndex(n) : Vc(t, n);
3232
+ let n = typeof e == "string" && (e.includes("*") || e.includes("?")) ? vt(e) : (t) => t == e;
3233
+ return r === 1 ? t.findIndex(n) : Xc(t, n);
3220
3234
  }
3221
- return n === 1 ? Hc(t, (t) => Uc(t, e) <= 0) : n === -1 ? Hc(t, (t) => Uc(t, e) >= 0) : -1;
3235
+ return n === 1 ? Zc(t, (t) => Qc(t, e) <= 0) : n === -1 ? Zc(t, (t) => Qc(t, e) >= 0) : -1;
3236
+ }, el = (e, t) => {
3237
+ let n = t.evaluateFormula(O(t, e, 0)), r = Rc(O(t, e, 1));
3238
+ if (!r) throw Error("Invalid table array range");
3239
+ let i = j(t.evaluateFormula(O(t, e, 2))), a = +!!Gc(e.length !== 4 || t.evaluateFormula(O(t, e, 3))), o = Uc(i, r.endCol - r.startCol + 1);
3240
+ if (o === null) return Ee;
3241
+ let s = J(r.startCol), c = $c(n, Jc(t, r.sheetPrefix, s, r.startRow, r.endRow), a);
3242
+ if (c === -1) return S;
3243
+ let l = J(r.startCol + o), u = r.startRow + c;
3244
+ return t.getCellValue(`${r.sheetPrefix}${l}${u}`);
3245
+ }, tl = (e, t) => {
3246
+ let n = t.evaluateFormula(O(t, e, 0)), r = Rc(O(t, e, 1));
3247
+ if (!r) throw Error("Invalid range format");
3248
+ let i = j(t.evaluateFormula(O(t, e, 2))), a = +!!Gc(e.length !== 4 || t.evaluateFormula(O(t, e, 3))), o = Uc(i, r.endRow - r.startRow + 1);
3249
+ if (o === null) return Ee;
3250
+ let s = $c(n, Yc(t, r.sheetPrefix, r.startRow, r.startCol, r.endCol), a);
3251
+ if (s === -1) return S;
3252
+ let c = J(r.startCol + s), l = r.startRow + o;
3253
+ return t.getCellValue(`${r.sheetPrefix}${c}${l}`);
3254
+ }, nl = (e, t) => {
3255
+ let n = t.evaluateFormula(O(t, e, 0)), r = O(t, e, 1), i = e.length === 3 ? j(t.evaluateFormula(O(t, e, 2))) : 1, a = $c(n, lt(t)(r), i);
3256
+ return a === -1 ? S : a + 1;
3257
+ }, rl = (e, t) => {
3258
+ let n = Rc(O(t, e, 0));
3259
+ if (!n) throw Error("Invalid range format");
3260
+ let r = Hc(n, j(t.evaluateFormula(O(t, e, 1))), e.length >= 3 ? j(t.evaluateFormula(O(t, e, 2))) : 1);
3261
+ return r ? t.getCellValue(`${n.sheetPrefix}${J(r.colIndex)}${r.row}`) : Ee;
3262
+ }, il = (e, t) => {
3263
+ let n = t.evaluateFormula(O(t, e, 0)), r = O(t, e, 1), i = O(t, e, 2), a = e.length >= 4 ? t.evaluateFormula(O(t, e, 3)) : S, o = e.length >= 5 ? j(t.evaluateFormula(O(t, e, 4))) : 0, s = e.length >= 6 ? j(t.evaluateFormula(O(t, e, 5))) : 1, c = lt(t), l = c(r), u = c(i), d = -1;
3264
+ if (o === 0 || o === 2) d = $c(n, l, 0, s);
3265
+ else {
3266
+ let e = Infinity;
3267
+ for (let t = 0; t < l.length; t++) {
3268
+ let r = s === 1 ? t : l.length - 1 - t, i = l[r];
3269
+ if (i == n) {
3270
+ d = r;
3271
+ break;
3272
+ }
3273
+ if (typeof i == "number" && typeof n == "number") {
3274
+ let t = i - n;
3275
+ o === -1 && t < 0 && Math.abs(t) < e ? (e = Math.abs(t), d = r) : o === 1 && t > 0 && t < e && (e = t, d = r);
3276
+ }
3277
+ }
3278
+ }
3279
+ if (d === -1) return a;
3280
+ let f = u[d];
3281
+ return f === void 0 ? S : f;
3282
+ }, al = (e) => (t, n) => {
3283
+ if (t.length === 0) return n.currentCell ? e(n.currentCell) : b;
3284
+ let r = Kc(O(n, t, 0));
3285
+ return r ? e({
3286
+ row: r.startRow - 1,
3287
+ col: r.startCol
3288
+ }) : b;
3289
+ }, ol = (e) => (t, n) => {
3290
+ let r = Kc(O(n, t, 0));
3291
+ return r ? e(r) : b;
3222
3292
  };
3223
3293
  A.register({
3224
3294
  name: "VLOOKUP",
3225
- handler: (e, t) => {
3226
- let n = t.evaluateFormula(O(t, e, 0)), r = Ac(O(t, e, 1));
3227
- if (!r) throw Error("Invalid table array range");
3228
- let i = j(t.evaluateFormula(O(t, e, 2))), a = +!!Lc(e.length !== 4 || t.evaluateFormula(O(t, e, 3))), o = Fc(i, r.endCol - r.startCol + 1);
3229
- if (o === null) return De;
3230
- let s = J(r.startCol), c = Wc(n, zc(t, r.sheetPrefix, s, r.startRow, r.endRow), a);
3231
- if (c === -1) return x;
3232
- let l = J(r.startCol + o), u = r.startRow + c;
3233
- return t.getCellValue(`${r.sheetPrefix}${l}${u}`);
3234
- },
3295
+ handler: el,
3235
3296
  minArgs: 3,
3236
3297
  maxArgs: 4,
3237
3298
  description: "Looks for a value in the leftmost column of a table, and then returns a value in the same row from a column you specify",
@@ -3239,16 +3300,7 @@ A.register({
3239
3300
  category: "Lookup & Reference"
3240
3301
  }), A.register({
3241
3302
  name: "HLOOKUP",
3242
- handler: (e, t) => {
3243
- let n = t.evaluateFormula(O(t, e, 0)), r = Ac(O(t, e, 1));
3244
- if (!r) throw Error("Invalid range format");
3245
- let i = j(t.evaluateFormula(O(t, e, 2))), a = +!!Lc(e.length !== 4 || t.evaluateFormula(O(t, e, 3))), o = Fc(i, r.endRow - r.startRow + 1);
3246
- if (o === null) return De;
3247
- let s = Wc(n, Bc(t, r.sheetPrefix, r.startRow, r.startCol, r.endCol), a);
3248
- if (s === -1) return x;
3249
- let c = J(r.startCol + s), l = r.startRow + o;
3250
- return t.getCellValue(`${r.sheetPrefix}${c}${l}`);
3251
- },
3303
+ handler: tl,
3252
3304
  minArgs: 3,
3253
3305
  maxArgs: 4,
3254
3306
  description: "Looks for a value in the top row of a table, and then returns a value in the same column from a row you specify",
@@ -3256,10 +3308,7 @@ A.register({
3256
3308
  category: "Lookup & Reference"
3257
3309
  }), A.register({
3258
3310
  name: "MATCH",
3259
- handler: (e, t) => {
3260
- let n = t.evaluateFormula(O(t, e, 0)), r = O(t, e, 1), i = e.length === 3 ? j(t.evaluateFormula(O(t, e, 2))) : 1, a = Wc(n, it(t)(r), i);
3261
- return a === -1 ? x : a + 1;
3262
- },
3311
+ handler: nl,
3263
3312
  minArgs: 2,
3264
3313
  maxArgs: 3,
3265
3314
  description: "Returns the relative position of an item in an array that matches a specified value",
@@ -3267,12 +3316,7 @@ A.register({
3267
3316
  category: "Lookup & Reference"
3268
3317
  }), A.register({
3269
3318
  name: "INDEX",
3270
- handler: (e, t) => {
3271
- let n = Ac(O(t, e, 0));
3272
- if (!n) throw Error("Invalid range format");
3273
- let r = Pc(n, j(t.evaluateFormula(O(t, e, 1))), e.length >= 3 ? j(t.evaluateFormula(O(t, e, 2))) : 1);
3274
- return r ? t.getCellValue(`${n.sheetPrefix}${J(r.colIndex)}${r.row}`) : De;
3275
- },
3319
+ handler: rl,
3276
3320
  minArgs: 2,
3277
3321
  maxArgs: 4,
3278
3322
  description: "Returns the value of an element in a table or an array, selected by the row and column number indexes",
@@ -3280,43 +3324,59 @@ A.register({
3280
3324
  category: "Lookup & Reference"
3281
3325
  }), A.register({
3282
3326
  name: "XLOOKUP",
3283
- handler: (e, t) => {
3284
- let n = t.evaluateFormula(O(t, e, 0)), r = O(t, e, 1), i = O(t, e, 2), a = e.length >= 4 ? t.evaluateFormula(O(t, e, 3)) : x, o = e.length >= 5 ? j(t.evaluateFormula(O(t, e, 4))) : 0, s = e.length >= 6 ? j(t.evaluateFormula(O(t, e, 5))) : 1, c = it(t), l = c(r), u = c(i), d = -1;
3285
- if (o === 0 || o === 2) d = Wc(n, l, 0, s);
3286
- else {
3287
- let e = Infinity;
3288
- for (let t = 0; t < l.length; t++) {
3289
- let r = s === 1 ? t : l.length - 1 - t, i = l[r];
3290
- if (i == n) {
3291
- d = r;
3292
- break;
3293
- }
3294
- if (typeof i == "number" && typeof n == "number") {
3295
- let t = i - n;
3296
- o === -1 && t < 0 && Math.abs(t) < e ? (e = Math.abs(t), d = r) : o === 1 && t > 0 && t < e && (e = t, d = r);
3297
- }
3298
- }
3299
- }
3300
- if (d === -1) return a;
3301
- let f = u[d];
3302
- return f === void 0 ? x : f;
3303
- },
3327
+ handler: il,
3304
3328
  minArgs: 3,
3305
3329
  maxArgs: 6,
3306
3330
  description: "Searches a range or an array, and returns an item corresponding to the first match it finds",
3307
3331
  examples: ["XLOOKUP(A1, B1:B10, C1:C10)", "XLOOKUP(\"USA\", Countries, Populations)"],
3308
3332
  category: "Lookup & Reference"
3333
+ }), A.register({
3334
+ name: "ROW",
3335
+ handler: al((e) => e.row + 1),
3336
+ minArgs: 0,
3337
+ maxArgs: 1,
3338
+ description: "Returns the row number of a reference, or of the cell the formula is in",
3339
+ examples: [
3340
+ "ROW()",
3341
+ "ROW(C10)",
3342
+ "ROW()-1"
3343
+ ],
3344
+ category: "Lookup & Reference"
3345
+ }), A.register({
3346
+ name: "COLUMN",
3347
+ handler: al((e) => e.col + 1),
3348
+ minArgs: 0,
3349
+ maxArgs: 1,
3350
+ description: "Returns the column number of a reference, or of the cell the formula is in",
3351
+ examples: ["COLUMN()", "COLUMN(D3)"],
3352
+ category: "Lookup & Reference"
3353
+ }), A.register({
3354
+ name: "ROWS",
3355
+ handler: ol((e) => e.endRow - e.startRow + 1),
3356
+ minArgs: 1,
3357
+ maxArgs: 1,
3358
+ description: "Returns the number of rows in a reference",
3359
+ examples: ["ROWS(A2:C10)"],
3360
+ category: "Lookup & Reference"
3361
+ }), A.register({
3362
+ name: "COLUMNS",
3363
+ handler: ol((e) => e.endCol - e.startCol + 1),
3364
+ minArgs: 1,
3365
+ maxArgs: 1,
3366
+ description: "Returns the number of columns in a reference",
3367
+ examples: ["COLUMNS(A2:C10)"],
3368
+ category: "Lookup & Reference"
3309
3369
  });
3310
3370
  //#endregion
3311
3371
  //#region src/engine/datedif.ts
3312
- var Gc = 864e5, Y = 12;
3313
- function Kc(e, t) {
3372
+ var sl = 864e5, Y = 12;
3373
+ function cl(e, t) {
3314
3374
  let n = e.getUTCMonth() + t, r = e.getUTCFullYear() + Math.floor(n / Y), i = (n % Y + Y) % Y, a = new Date(Date.UTC(r, i + 1, 0)).getUTCDate(), o = Math.min(e.getUTCDate(), a);
3315
3375
  return new Date(Date.UTC(r, i, o));
3316
3376
  }
3317
- function qc(e, t, n) {
3318
- if (e > t) return b;
3319
- let r = E(e), i = E(t), a = i.getUTCFullYear() - r.getUTCFullYear(), o = i.getUTCMonth() - r.getUTCMonth(), s = i.getUTCDate() - r.getUTCDate();
3377
+ function ll(e, t, n) {
3378
+ if (e > t) return x;
3379
+ let r = D(e), i = D(t), a = i.getUTCFullYear() - r.getUTCFullYear(), o = i.getUTCMonth() - r.getUTCMonth(), s = i.getUTCDate() - r.getUTCDate();
3320
3380
  switch (n.toUpperCase()) {
3321
3381
  case "Y": {
3322
3382
  let e = a;
@@ -3328,8 +3388,8 @@ function qc(e, t, n) {
3328
3388
  }
3329
3389
  case "D": return Math.floor(t - e);
3330
3390
  case "MD": {
3331
- let e = Kc(r, a * Y + o - +(s < 0)), t = Date.UTC(i.getUTCFullYear(), i.getUTCMonth(), i.getUTCDate());
3332
- return Math.round((t - e.getTime()) / Gc);
3391
+ let e = cl(r, a * Y + o - +(s < 0)), t = Date.UTC(i.getUTCFullYear(), i.getUTCMonth(), i.getUTCDate());
3392
+ return Math.round((t - e.getTime()) / sl);
3333
3393
  }
3334
3394
  case "YM": {
3335
3395
  let e = s < 0 ? o - 1 : o;
@@ -3337,17 +3397,32 @@ function qc(e, t, n) {
3337
3397
  }
3338
3398
  case "YD": {
3339
3399
  let e = new Date(r);
3340
- return e.setUTCFullYear(i.getUTCFullYear()), e.getTime() - i.getTime() > 0 && e.setUTCFullYear(i.getUTCFullYear() - 1), Math.floor((i.getTime() - e.getTime()) / Gc);
3400
+ return e.setUTCFullYear(i.getUTCFullYear()), e.getTime() - i.getTime() > 0 && e.setUTCFullYear(i.getUTCFullYear() - 1), Math.floor((i.getTime() - e.getTime()) / sl);
3341
3401
  }
3342
- default: return b;
3402
+ default: return x;
3343
3403
  }
3344
3404
  }
3405
+ //#endregion
3406
+ //#region src/engine/functions/date.ts
3407
+ var ul = () => {
3408
+ let e = /* @__PURE__ */ new Date();
3409
+ return Ue(new Date(Date.UTC(e.getFullYear(), e.getMonth(), e.getDate(), e.getHours(), e.getMinutes(), e.getSeconds())));
3410
+ }, dl = () => {
3411
+ let e = /* @__PURE__ */ new Date();
3412
+ return Ue(new Date(Date.UTC(e.getFullYear(), e.getMonth(), e.getDate())));
3413
+ }, fl = (e, t) => {
3414
+ let n = j(t.evaluateFormula(O(t, e, 0))), r = j(t.evaluateFormula(O(t, e, 1))), i = j(t.evaluateFormula(O(t, e, 2)));
3415
+ return Ue(new Date(Date.UTC(n, r - 1, i)));
3416
+ }, pl = (e, t) => {
3417
+ let n = j(t.evaluateFormula(O(t, e, 0))), r = j(t.evaluateFormula(O(t, e, 1))), i = j(t.evaluateFormula(O(t, e, 2))), a = n * 3600 + r * 60 + i, o = 86400;
3418
+ return a % o / o;
3419
+ }, ml = (e, t, n) => E(t.evaluateFormula(O(t, e, n))), hl = (e) => (t, n) => {
3420
+ let r = ml(t, n, 0);
3421
+ return C(r) ? r : e(r);
3422
+ }, gl = 86400, _l = (e) => Math.round((e - Math.floor(e)) * gl), vl = hl((e) => D(e).getUTCFullYear()), yl = hl((e) => D(e).getUTCMonth() + 1), bl = hl((e) => D(e).getUTCDate()), xl = hl((e) => Math.floor(_l(e) / 3600)), Sl = hl((e) => Math.floor(_l(e) % 3600 / 60)), Cl = hl((e) => _l(e) % 60);
3345
3423
  A.register({
3346
3424
  name: "NOW",
3347
- handler: () => {
3348
- let e = /* @__PURE__ */ new Date();
3349
- return T(new Date(Date.UTC(e.getFullYear(), e.getMonth(), e.getDate(), e.getHours(), e.getMinutes(), e.getSeconds())));
3350
- },
3425
+ handler: ul,
3351
3426
  minArgs: 0,
3352
3427
  maxArgs: 0,
3353
3428
  description: "Returns the serial number of the current date and time",
@@ -3355,10 +3430,7 @@ A.register({
3355
3430
  category: "Date & Time"
3356
3431
  }), A.register({
3357
3432
  name: "TODAY",
3358
- handler: () => {
3359
- let e = /* @__PURE__ */ new Date();
3360
- return T(new Date(Date.UTC(e.getFullYear(), e.getMonth(), e.getDate())));
3361
- },
3433
+ handler: dl,
3362
3434
  minArgs: 0,
3363
3435
  maxArgs: 0,
3364
3436
  description: "Returns the serial number of today's date",
@@ -3366,10 +3438,7 @@ A.register({
3366
3438
  category: "Date & Time"
3367
3439
  }), A.register({
3368
3440
  name: "DATE",
3369
- handler: (e, t) => {
3370
- let n = j(t.evaluateFormula(O(t, e, 0))), r = j(t.evaluateFormula(O(t, e, 1))), i = j(t.evaluateFormula(O(t, e, 2)));
3371
- return T(new Date(Date.UTC(n, r - 1, i)));
3372
- },
3441
+ handler: fl,
3373
3442
  minArgs: 3,
3374
3443
  maxArgs: 3,
3375
3444
  description: "Returns the serial number that represents a particular date",
@@ -3377,10 +3446,7 @@ A.register({
3377
3446
  category: "Date & Time"
3378
3447
  }), A.register({
3379
3448
  name: "TIME",
3380
- handler: (e, t) => {
3381
- let n = j(t.evaluateFormula(O(t, e, 0))), r = j(t.evaluateFormula(O(t, e, 1))), i = j(t.evaluateFormula(O(t, e, 2))), a = n * 3600 + r * 60 + i, o = 86400;
3382
- return a % o / o;
3383
- },
3449
+ handler: pl,
3384
3450
  minArgs: 3,
3385
3451
  maxArgs: 3,
3386
3452
  description: "Returns the serial number of a particular time",
@@ -3388,7 +3454,7 @@ A.register({
3388
3454
  category: "Date & Time"
3389
3455
  }), A.register({
3390
3456
  name: "YEAR",
3391
- handler: (e, t) => E(j(t.evaluateFormula(O(t, e, 0)))).getUTCFullYear(),
3457
+ handler: vl,
3392
3458
  minArgs: 1,
3393
3459
  maxArgs: 1,
3394
3460
  description: "Converts a serial number to a year",
@@ -3396,7 +3462,7 @@ A.register({
3396
3462
  category: "Date & Time"
3397
3463
  }), A.register({
3398
3464
  name: "MONTH",
3399
- handler: (e, t) => E(j(t.evaluateFormula(O(t, e, 0)))).getUTCMonth() + 1,
3465
+ handler: yl,
3400
3466
  minArgs: 1,
3401
3467
  maxArgs: 1,
3402
3468
  description: "Converts a serial number to a month",
@@ -3404,7 +3470,7 @@ A.register({
3404
3470
  category: "Date & Time"
3405
3471
  }), A.register({
3406
3472
  name: "DAY",
3407
- handler: (e, t) => E(j(t.evaluateFormula(O(t, e, 0)))).getUTCDate(),
3473
+ handler: bl,
3408
3474
  minArgs: 1,
3409
3475
  maxArgs: 1,
3410
3476
  description: "Converts a serial number to a day of the month",
@@ -3412,10 +3478,7 @@ A.register({
3412
3478
  category: "Date & Time"
3413
3479
  }), A.register({
3414
3480
  name: "HOUR",
3415
- handler: (e, t) => {
3416
- let n = j(t.evaluateFormula(O(t, e, 0))), r = n - Math.floor(n), i = Math.round(r * 86400);
3417
- return Math.floor(i / 3600);
3418
- },
3481
+ handler: xl,
3419
3482
  minArgs: 1,
3420
3483
  maxArgs: 1,
3421
3484
  description: "Converts a serial number to an hour",
@@ -3423,10 +3486,7 @@ A.register({
3423
3486
  category: "Date & Time"
3424
3487
  }), A.register({
3425
3488
  name: "MINUTE",
3426
- handler: (e, t) => {
3427
- let n = j(t.evaluateFormula(O(t, e, 0))), r = n - Math.floor(n), i = Math.round(r * 86400);
3428
- return Math.floor(i % 3600 / 60);
3429
- },
3489
+ handler: Sl,
3430
3490
  minArgs: 1,
3431
3491
  maxArgs: 1,
3432
3492
  description: "Converts a serial number to a minute",
@@ -3434,10 +3494,7 @@ A.register({
3434
3494
  category: "Date & Time"
3435
3495
  }), A.register({
3436
3496
  name: "SECOND",
3437
- handler: (e, t) => {
3438
- let n = j(t.evaluateFormula(O(t, e, 0))), r = n - Math.floor(n);
3439
- return Math.round(r * 86400) % 60;
3440
- },
3497
+ handler: Cl,
3441
3498
  minArgs: 1,
3442
3499
  maxArgs: 1,
3443
3500
  description: "Converts a serial number to a second",
@@ -3445,7 +3502,12 @@ A.register({
3445
3502
  category: "Date & Time"
3446
3503
  }), A.register({
3447
3504
  name: "DATEDIF",
3448
- handler: (e, t) => qc(j(t.evaluateFormula(O(t, e, 0))), j(t.evaluateFormula(O(t, e, 1))), st(t.evaluateFormula(O(t, e, 2)))),
3505
+ handler: (e, t) => {
3506
+ let n = ml(e, t, 0);
3507
+ if (C(n)) return n;
3508
+ let r = ml(e, t, 1);
3509
+ return C(r) ? r : ll(n, r, ft(t.evaluateFormula(O(t, e, 2))));
3510
+ },
3449
3511
  minArgs: 3,
3450
3512
  maxArgs: 3,
3451
3513
  description: "Calculates the number of days, months, or years between two dates",
@@ -3454,7 +3516,7 @@ A.register({
3454
3516
  });
3455
3517
  //#endregion
3456
3518
  //#region src/engine/date-calendar.ts
3457
- var X = 7, Jc = 5, Yc = 0, Xc = 6, Zc = Xc, Z = (e) => Math.floor(e), Q = (e) => Number.isFinite(e) && e >= 0 && e <= 2958465, Qc = (e) => ((Z(e) + Zc) % X + X) % X, $c = {
3519
+ var X = 7, wl = 5, Tl = 0, El = 6, Dl = El, Z = (e) => Math.floor(e), Q = (e) => Number.isFinite(e) && e >= 0 && e <= 2958465, Ol = (e) => ((Z(e) + Dl) % X + X) % X, kl = {
3458
3520
  1: 0,
3459
3521
  2: 1,
3460
3522
  11: 1,
@@ -3464,76 +3526,76 @@ var X = 7, Jc = 5, Yc = 0, Xc = 6, Zc = Xc, Z = (e) => Math.floor(e), Q = (e) =>
3464
3526
  15: 5,
3465
3527
  16: 6,
3466
3528
  17: 0
3467
- }, el = 3;
3468
- function tl(e, t = 1) {
3469
- if (!Q(e)) return b;
3470
- let n = Qc(e);
3471
- if (t === el) return (n + X - 1) % X;
3472
- let r = $c[t];
3473
- return r === void 0 ? b : (n - r + X) % X + 1;
3474
- }
3475
- function nl(e, t) {
3476
- return !Q(e) || !Q(t) ? b : Z(e) - Z(t);
3477
- }
3478
- var rl = (e, t) => new Date(Date.UTC(e, t + 1, 0)).getUTCDate(), il = (e) => Q(e) ? e : b;
3479
- function al(e, t) {
3480
- if (!Q(e) || !Number.isFinite(t)) return b;
3481
- let n = E(Z(e)), r = n.getUTCFullYear(), i = n.getUTCMonth() + Math.trunc(t), a = Math.min(n.getUTCDate(), rl(r, i));
3482
- return il(T(new Date(Date.UTC(r, i, a))));
3483
- }
3484
- function ol(e, t) {
3485
- if (!Q(e) || !Number.isFinite(t)) return b;
3486
- let n = E(Z(e));
3487
- return il(T(new Date(Date.UTC(n.getUTCFullYear(), n.getUTCMonth() + Math.trunc(t) + 1, 0))));
3488
- }
3489
- var sl = (e) => {
3490
- let t = Qc(e);
3491
- return t !== Yc && t !== Xc;
3492
- }, cl = (e) => new Set(e.map(Z));
3493
- function ll(e, t, n = []) {
3494
- if (!Q(e) || !Number.isFinite(t)) return b;
3495
- let r = cl(n), i = Math.sign(t), a = {
3529
+ }, Al = 3;
3530
+ function jl(e, t = 1) {
3531
+ if (!Q(e)) return x;
3532
+ let n = Ol(e);
3533
+ if (t === Al) return (n + X - 1) % X;
3534
+ let r = kl[t];
3535
+ return r === void 0 ? x : (n - r + X) % X + 1;
3536
+ }
3537
+ function Ml(e, t) {
3538
+ return !Q(e) || !Q(t) ? x : Z(e) - Z(t);
3539
+ }
3540
+ var Nl = (e, t) => new Date(Date.UTC(e, t + 1, 0)).getUTCDate(), Pl = (e) => Q(e) ? e : x;
3541
+ function Fl(e, t) {
3542
+ if (!Q(e) || !Number.isFinite(t)) return x;
3543
+ let n = D(Z(e)), r = n.getUTCFullYear(), i = n.getUTCMonth() + Math.trunc(t), a = Math.min(n.getUTCDate(), Nl(r, i));
3544
+ return Pl(Ue(new Date(Date.UTC(r, i, a))));
3545
+ }
3546
+ function Il(e, t) {
3547
+ if (!Q(e) || !Number.isFinite(t)) return x;
3548
+ let n = D(Z(e));
3549
+ return Pl(Ue(new Date(Date.UTC(n.getUTCFullYear(), n.getUTCMonth() + Math.trunc(t) + 1, 0))));
3550
+ }
3551
+ var Ll = (e) => {
3552
+ let t = Ol(e);
3553
+ return t !== Tl && t !== El;
3554
+ }, Rl = (e) => new Set(e.map(Z));
3555
+ function zl(e, t, n = []) {
3556
+ if (!Q(e) || !Number.isFinite(t)) return x;
3557
+ let r = Rl(n), i = Math.sign(t), a = {
3496
3558
  date: Z(e),
3497
3559
  left: Math.abs(Math.trunc(t))
3498
3560
  };
3499
3561
  for (; a.left > 0;) {
3500
- if (a.date += i, !Q(a.date)) return b;
3501
- sl(a.date) && !r.has(a.date) && --a.left;
3562
+ if (a.date += i, !Q(a.date)) return x;
3563
+ Ll(a.date) && !r.has(a.date) && --a.left;
3502
3564
  }
3503
3565
  return a.date;
3504
3566
  }
3505
- function ul(e, t) {
3567
+ function Bl(e, t) {
3506
3568
  let n = t - e + 1, r = Math.floor(n / X), i = Array.from({ length: n % X }, (t, n) => e + r * X + n);
3507
- return r * Jc + i.filter(sl).length;
3569
+ return r * wl + i.filter(Ll).length;
3508
3570
  }
3509
- function dl(e, t, n = []) {
3510
- if (!Q(e) || !Q(t)) return b;
3511
- let [r, i] = [Z(e), Z(t)], [a, o] = r <= i ? [r, i] : [i, r], s = [...cl(n)].filter((e) => e >= a && e <= o && sl(e)).length, c = ul(a, o) - s;
3571
+ function Vl(e, t, n = []) {
3572
+ if (!Q(e) || !Q(t)) return x;
3573
+ let [r, i] = [Z(e), Z(t)], [a, o] = r <= i ? [r, i] : [i, r], s = [...Rl(n)].filter((e) => e >= a && e <= o && Ll(e)).length, c = Bl(a, o) - s;
3512
3574
  return r <= i ? c : -c;
3513
3575
  }
3514
3576
  //#endregion
3515
3577
  //#region src/engine/functions/calendar.ts
3516
- var $ = (e, t, n) => w(t.evaluateFormula(O(t, e, n))), fl = (e) => e.find(S) ?? e.filter((e) => typeof e == "number");
3517
- function pl(e, t, n) {
3578
+ var $ = (e, t, n) => E(t.evaluateFormula(O(t, e, n))), Hl = (e) => e.find(C) ?? e.filter((e) => typeof e == "number");
3579
+ function Ul(e, t, n) {
3518
3580
  if (e.length <= n) return [];
3519
- let r = it(t)(O(t, e, n));
3520
- return r.length === 0 ? fl([$(e, t, n)]) : r.find(S) ?? r.filter(C).map(j);
3581
+ let r = lt(t)(O(t, e, n));
3582
+ return r.length === 0 ? Hl([$(e, t, n)]) : r.find(C) ?? r.filter(T).map(j);
3521
3583
  }
3522
- var ml = (e, t) => {
3523
- let n = fl([$(e, t, 0), e.length > 1 ? $(e, t, 1) : 1]);
3524
- if (S(n)) return n;
3584
+ var Wl = (e, t) => {
3585
+ let n = Hl([$(e, t, 0), e.length > 1 ? $(e, t, 1) : 1]);
3586
+ if (C(n)) return n;
3525
3587
  let [r = 0, i = 1] = n;
3526
- return tl(r, i);
3527
- }, hl = (e) => (t, n) => {
3528
- let r = fl([$(t, n, 0), $(t, n, 1)]);
3529
- if (S(r)) return r;
3588
+ return jl(r, i);
3589
+ }, Gl = (e) => (t, n) => {
3590
+ let r = Hl([$(t, n, 0), $(t, n, 1)]);
3591
+ if (C(r)) return r;
3530
3592
  let [i = 0, a = 0] = r;
3531
3593
  return e(i, a);
3532
- }, gl = (e) => (t, n) => {
3533
- let r = fl([$(t, n, 0), $(t, n, 1)]);
3534
- if (S(r)) return r;
3535
- let i = pl(t, n, 2);
3536
- if (S(i)) return i;
3594
+ }, Kl = (e) => (t, n) => {
3595
+ let r = Hl([$(t, n, 0), $(t, n, 1)]);
3596
+ if (C(r)) return r;
3597
+ let i = Ul(t, n, 2);
3598
+ if (C(i)) return i;
3537
3599
  let [a = 0, o = 0] = r;
3538
3600
  return e(a, o, i);
3539
3601
  };
@@ -3542,7 +3604,7 @@ var ml = (e, t) => {
3542
3604
  [
3543
3605
  {
3544
3606
  name: "WEEKDAY",
3545
- handler: ml,
3607
+ handler: Wl,
3546
3608
  minArgs: 1,
3547
3609
  maxArgs: 2,
3548
3610
  description: "Returns the day of the week (1 = Sunday by default)",
@@ -3550,7 +3612,7 @@ var ml = (e, t) => {
3550
3612
  },
3551
3613
  {
3552
3614
  name: "DAYS",
3553
- handler: hl(nl),
3615
+ handler: Gl(Ml),
3554
3616
  minArgs: 2,
3555
3617
  maxArgs: 2,
3556
3618
  description: "Returns the number of days between two dates",
@@ -3558,7 +3620,7 @@ var ml = (e, t) => {
3558
3620
  },
3559
3621
  {
3560
3622
  name: "EDATE",
3561
- handler: hl(al),
3623
+ handler: Gl(Fl),
3562
3624
  minArgs: 2,
3563
3625
  maxArgs: 2,
3564
3626
  description: "Returns the date a number of months before or after a date",
@@ -3566,7 +3628,7 @@ var ml = (e, t) => {
3566
3628
  },
3567
3629
  {
3568
3630
  name: "EOMONTH",
3569
- handler: hl(ol),
3631
+ handler: Gl(Il),
3570
3632
  minArgs: 2,
3571
3633
  maxArgs: 2,
3572
3634
  description: "Returns the last day of the month a number of months away",
@@ -3574,7 +3636,7 @@ var ml = (e, t) => {
3574
3636
  },
3575
3637
  {
3576
3638
  name: "WORKDAY",
3577
- handler: gl(ll),
3639
+ handler: Kl(zl),
3578
3640
  minArgs: 2,
3579
3641
  maxArgs: 3,
3580
3642
  description: "Returns the date a number of working days away, skipping weekends and holidays",
@@ -3582,7 +3644,7 @@ var ml = (e, t) => {
3582
3644
  },
3583
3645
  {
3584
3646
  name: "NETWORKDAYS",
3585
- handler: gl(dl),
3647
+ handler: Kl(Vl),
3586
3648
  minArgs: 2,
3587
3649
  maxArgs: 3,
3588
3650
  description: "Returns the number of working days between two dates, both included",
@@ -3615,21 +3677,21 @@ var ml = (e, t) => {
3615
3677
  });
3616
3678
  //#endregion
3617
3679
  //#region src/engine/customFunctionSpecs.ts
3618
- var _l = RegExp(`^${at}$`, "i"), vl = /^[A-Za-z_$][\w$]*$/, yl = 32, bl = (e) => typeof e == "object" && !!e && !Array.isArray(e), xl = (e) => Array.isArray(e) && e.every((e) => typeof e == "string"), Sl = (e) => bl(e) && typeof e.name == "string" && typeof e.body == "string" && xl(e.params) && (e.description === void 0 || typeof e.description == "string");
3619
- function Cl(e) {
3620
- return Array.isArray(e) ? e.filter(Sl) : [];
3680
+ var ql = RegExp(`^${ut}$`, "i"), Jl = /^[A-Za-z_$][\w$]*$/, Yl = 32, Xl = (e) => typeof e == "object" && !!e && !Array.isArray(e), Zl = (e) => Array.isArray(e) && e.every((e) => typeof e == "string"), Ql = (e) => Xl(e) && typeof e.name == "string" && typeof e.body == "string" && Zl(e.params) && (e.description === void 0 || typeof e.description == "string");
3681
+ function $l(e) {
3682
+ return Array.isArray(e) ? e.filter(Ql) : [];
3621
3683
  }
3622
- function wl(e, t) {
3623
- if (!_l.test(e.name)) return "a name is letters and digits, parts joined by dots (MOVING.AVG)";
3684
+ function eu(e, t) {
3685
+ if (!ql.test(e.name)) return "a name is letters and digits, parts joined by dots (MOVING.AVG)";
3624
3686
  if (t(e.name)) return `${e.name.toUpperCase()} is a built-in function`;
3625
- if (e.params.length > yl) return `at most ${yl} parameters`;
3626
- let n = e.params.find((e) => !vl.test(e));
3687
+ if (e.params.length > Yl) return `at most ${Yl} parameters`;
3688
+ let n = e.params.find((e) => !Jl.test(e));
3627
3689
  return n === void 0 ? new Set(e.params).size === e.params.length ? null : "a parameter is named twice" : `"${n}" is not a parameter name`;
3628
3690
  }
3629
- function Tl(e, t) {
3691
+ function tu(e, t) {
3630
3692
  let n = /* @__PURE__ */ new Map(), r = [];
3631
3693
  return e.forEach((e) => {
3632
- let i = e.name.toUpperCase(), a = n.has(i) ? `${i} is defined twice` : wl(e, t);
3694
+ let i = e.name.toUpperCase(), a = n.has(i) ? `${i} is defined twice` : eu(e, t);
3633
3695
  a ? r.push({
3634
3696
  name: e.name,
3635
3697
  reason: a
@@ -3639,27 +3701,27 @@ function Tl(e, t) {
3639
3701
  problems: r
3640
3702
  };
3641
3703
  }
3642
- var El = (e) => `Function(${[...e.params, `"use strict";\n${e.body}`].map((e) => JSON.stringify(e)).join(", ")})`, Dl = 50, Ol = 2e3, kl = 16777216, Al = 1048576, jl = 1e5, Ml = "(fn, args) => fn(...JSON.parse(args))", Nl = "(?:(?:'(?:[^']|'')+'|[^!'\"(),]+)!)?", Pl = RegExp(`^${Nl}\\$?[A-Z]+\\$?\\d+:\\$?[A-Z]+\\$?\\d+$`, "i"), Fl = RegExp(`^${Nl}\\$?[A-Z]+\\$?\\d+$`, "i"), Il = null, Ll = async () => (Il ??= import("@jitl/quickjs-singlefile-mjs-release-sync").then((e) => e.default, (e) => {
3643
- throw Il = null, e;
3644
- }), n(await Il)), Rl = () => void 0, zl = {
3704
+ var nu = (e) => `Function(${[...e.params, `"use strict";\n${e.body}`].map((e) => JSON.stringify(e)).join(", ")})`, ru = 50, iu = 2e3, au = 16777216, ou = 1048576, su = 1e5, cu = "(fn, args) => fn(...JSON.parse(args))", lu = "(?:(?:'(?:[^']|'')+'|[^!'\"(),]+)!)?", uu = RegExp(`^${lu}\\$?[A-Z]+\\$?\\d+:\\$?[A-Z]+\\$?\\d+$`, "i"), du = RegExp(`^${lu}\\$?[A-Z]+\\$?\\d+$`, "i"), fu = null, pu = async () => (fu ??= import("@jitl/quickjs-singlefile-mjs-release-sync").then((e) => e.default, (e) => {
3705
+ throw fu = null, e;
3706
+ }), n(await fu)), mu = () => void 0, hu = {
3645
3707
  definitions: /* @__PURE__ */ new Map(),
3646
3708
  problems: [],
3647
- startCalculation: Rl,
3648
- dispose: Rl
3709
+ startCalculation: mu,
3710
+ dispose: mu
3649
3711
  };
3650
- function Bl(e, t) {
3712
+ function gu(e, t) {
3651
3713
  return e.startCalculation(), A.withOverlay(e.definitions, t);
3652
3714
  }
3653
- async function Vl(e) {
3654
- let { usable: t, problems: n } = Tl(e.flatMap((e) => Cl(e.functions)), (e) => A.isBuiltIn(e));
3715
+ async function _u(e) {
3716
+ let { usable: t, problems: n } = tu(e.flatMap((e) => $l(e.functions)), (e) => A.isBuiltIn(e));
3655
3717
  return t.size === 0 ? {
3656
- ...zl,
3718
+ ...hu,
3657
3719
  problems: n
3658
- } : Hl(await Ll(), t, n);
3720
+ } : vu(await pu(), t, n);
3659
3721
  }
3660
- function Hl(e, t, n) {
3722
+ function vu(e, t, n) {
3661
3723
  let r = e.newRuntime();
3662
- r.setMemoryLimit(kl), r.setMaxStackSize(Al);
3724
+ r.setMemoryLimit(au), r.setMaxStackSize(ou);
3663
3725
  let i = { calculationStart: Date.now() }, a = [], o = /* @__PURE__ */ new Map();
3664
3726
  return t.forEach((e, t) => {
3665
3727
  let s = r.newContext(), c = [];
@@ -3667,9 +3729,9 @@ function Hl(e, t, n) {
3667
3729
  vm: s,
3668
3730
  handles: c
3669
3731
  });
3670
- let l = Kl(r, Date.now() + Dl, () => {
3671
- let t = s.evalCode(El(e));
3672
- return t.error ? { error: Ul(s, t.error) || "it stopped while loading" } : { fn: t.value };
3732
+ let l = Su(r, Date.now() + ru, () => {
3733
+ let t = s.evalCode(nu(e));
3734
+ return t.error ? { error: yu(s, t.error) || "it stopped while loading" } : { fn: t.value };
3673
3735
  });
3674
3736
  if ("error" in l) {
3675
3737
  n.push({
@@ -3678,7 +3740,7 @@ function Hl(e, t, n) {
3678
3740
  });
3679
3741
  return;
3680
3742
  }
3681
- let u = s.unwrapResult(s.evalCode(Ml));
3743
+ let u = s.unwrapResult(s.evalCode(cu));
3682
3744
  c.push(l.fn, u);
3683
3745
  let d = {
3684
3746
  vm: s,
@@ -3686,7 +3748,7 @@ function Hl(e, t, n) {
3686
3748
  caller: u,
3687
3749
  fn: l.fn
3688
3750
  };
3689
- o.set(t, Yl(e, (e) => Wl(d, e, i.calculationStart)));
3751
+ o.set(t, Tu(e, (e) => bu(d, e, i.calculationStart)));
3690
3752
  }), {
3691
3753
  definitions: o,
3692
3754
  problems: n,
@@ -3700,7 +3762,7 @@ function Hl(e, t, n) {
3700
3762
  }
3701
3763
  };
3702
3764
  }
3703
- function Ul(e, t) {
3765
+ function yu(e, t) {
3704
3766
  try {
3705
3767
  let n = e.getProp(t, "message"), r = e.typeof(n) === "string" ? e.getString(n) : "";
3706
3768
  return n.dispose(), r;
@@ -3710,17 +3772,17 @@ function Ul(e, t) {
3710
3772
  t.dispose();
3711
3773
  }
3712
3774
  }
3713
- function Wl({ vm: e, runtime: t, caller: n, fn: r }, i, a) {
3714
- let o = Math.min(Date.now() + Dl, a + Ol);
3715
- return Date.now() >= o ? b : Kl(t, o, () => {
3775
+ function bu({ vm: e, runtime: t, caller: n, fn: r }, i, a) {
3776
+ let o = Math.min(Date.now() + ru, a + iu);
3777
+ return Date.now() >= o ? x : Su(t, o, () => {
3716
3778
  let t = e.newString(i), a = e.callFunction(n, e.undefined, r, t);
3717
- if (t.dispose(), a.error) return Ul(e, a.error) === Gl ? b : y;
3718
- let o = ql(e, a.value);
3779
+ if (t.dispose(), a.error) return yu(e, a.error) === xu ? x : b;
3780
+ let o = Cu(e, a.value);
3719
3781
  return a.value.dispose(), o;
3720
3782
  });
3721
3783
  }
3722
- var Gl = "interrupted";
3723
- function Kl(e, t, n) {
3784
+ var xu = "interrupted";
3785
+ function Su(e, t, n) {
3724
3786
  e.setInterruptHandler(r(t));
3725
3787
  try {
3726
3788
  return n();
@@ -3728,14 +3790,14 @@ function Kl(e, t, n) {
3728
3790
  e.removeInterruptHandler();
3729
3791
  }
3730
3792
  }
3731
- function ql(e, t) {
3793
+ function Cu(e, t) {
3732
3794
  let n = e.typeof(t);
3733
- return n === "number" ? Jl(e.getNumber(t)) : n === "string" ? e.getString(t) : n === "boolean" ? Jl(e.dump(t)) : y;
3795
+ return n === "number" ? wu(e.getNumber(t)) : n === "string" ? e.getString(t) : n === "boolean" ? wu(e.dump(t)) : b;
3734
3796
  }
3735
- function Jl(e) {
3736
- return typeof e == "number" ? Number.isFinite(e) ? e : b : typeof e == "string" || typeof e == "boolean" ? e : y;
3797
+ function wu(e) {
3798
+ return typeof e == "number" ? Number.isFinite(e) ? e : x : typeof e == "string" || typeof e == "boolean" ? e : b;
3737
3799
  }
3738
- function Yl(e, t) {
3800
+ function Tu(e, t) {
3739
3801
  let n = e.description ?? `Defined in this workbook (${e.params.join(", ")})`;
3740
3802
  return {
3741
3803
  name: e.name.toUpperCase(),
@@ -3744,30 +3806,30 @@ function Yl(e, t) {
3744
3806
  description: n,
3745
3807
  category: "Workbook",
3746
3808
  handler: (e, n) => {
3747
- let r = e.map((e) => Zl(e.trim(), n));
3748
- return r.find(S) ?? t(JSON.stringify(r));
3809
+ let r = e.map((e) => Du(e.trim(), n));
3810
+ return r.find(C) ?? t(JSON.stringify(r));
3749
3811
  }
3750
3812
  };
3751
3813
  }
3752
- var Xl = (e) => S(e) ? e : e === "" ? null : e;
3753
- function Zl(e, t) {
3754
- return Pl.test(e) ? $l(e, t) : Fl.test(e) ? Xl(Ql(t)(e)[0] ?? "") : Xl(t.evaluateFormula(e));
3814
+ var Eu = (e) => C(e) ? e : e === "" ? null : e;
3815
+ function Du(e, t) {
3816
+ return uu.test(e) ? ku(e, t) : du.test(e) ? Eu(Ou(t)(e)[0] ?? "") : Eu(t.evaluateFormula(e));
3755
3817
  }
3756
- var Ql = (e) => e.getRangeValuesKeepingBlanks ?? e.getRangeValuesRaw ?? e.getRangeValues;
3757
- function $l(e, t) {
3758
- let n = e.lastIndexOf("!"), r = n >= 0 ? e.slice(0, n + 1) : "", i = Dc(e.slice(n + 1)) ?? [];
3759
- if (i.length > jl) return y;
3760
- let a = Ql(t), o = /* @__PURE__ */ new Map();
3818
+ var Ou = (e) => e.getRangeValuesKeepingBlanks ?? e.getRangeValuesRaw ?? e.getRangeValues;
3819
+ function ku(e, t) {
3820
+ let n = e.lastIndexOf("!"), r = n >= 0 ? e.slice(0, n + 1) : "", i = Fc(e.slice(n + 1)) ?? [];
3821
+ if (i.length > su) return b;
3822
+ let a = Ou(t), o = /* @__PURE__ */ new Map();
3761
3823
  for (let { row: e, col: t } of i) {
3762
- let n = Xl(a(`${r}${J(t)}${e + 1}`)[0] ?? "");
3763
- if (S(n)) return n;
3824
+ let n = Eu(a(`${r}${J(t)}${e + 1}`)[0] ?? "");
3825
+ if (C(n)) return n;
3764
3826
  o.set(e, [...o.get(e) ?? [], n]);
3765
3827
  }
3766
3828
  return Array.from(o.values());
3767
3829
  }
3768
3830
  //#endregion
3769
3831
  //#region src/engine/cellEmpty.ts
3770
- function eu(e) {
3832
+ function Au(e) {
3771
3833
  if (e == null) return !0;
3772
3834
  if (typeof e == "string") return e.trim() === "";
3773
3835
  if (c(e)) {
@@ -3777,69 +3839,69 @@ function eu(e) {
3777
3839
  }
3778
3840
  return !1;
3779
3841
  }
3780
- function tu(e) {
3781
- return !S(e) && eu(e);
3842
+ function ju(e) {
3843
+ return !C(e) && Au(e);
3782
3844
  }
3783
3845
  //#endregion
3784
3846
  //#region src/engine/cellFormatting.ts
3785
- var nu = 36e3, ru = 63499, iu = (e) => s(e) && "v" in e, au = (e) => typeof e == "number" && Number.isInteger(e) && e >= nu && e <= ru, ou = (e, t, n, r) => {
3786
- if (S(t)) return t.code;
3787
- if (!iu(e) || typeof t != "number") return t;
3847
+ var Mu = 36e3, Nu = 63499, Pu = (e) => s(e) && "v" in e, Fu = (e) => typeof e == "number" && Number.isInteger(e) && e >= Mu && e <= Nu, Iu = (e, t, n, r) => {
3848
+ if (C(t)) return t.code;
3849
+ if (!Pu(e) || typeof t != "number") return t;
3788
3850
  let i = typeof e.f == "string" ? e.f : "";
3789
- return i ? cs(t, i) : typeof e.v == "string" && e.v.startsWith("=") && r && au(t) ? cs(t, n ? "DD/MM/YYYY" : "MM/DD/YYYY") : t;
3790
- }, su = /* @__PURE__ */ new Set([
3851
+ return i ? gs(t, i) : typeof e.v == "string" && e.v.startsWith("=") && r && Fu(t) ? gs(t, n ? "DD/MM/YYYY" : "MM/DD/YYYY") : t;
3852
+ }, Lu = /* @__PURE__ */ new Set([
3791
3853
  "DATE",
3792
3854
  "TODAY",
3793
3855
  "EDATE",
3794
3856
  "EOMONTH",
3795
3857
  "WORKDAY"
3796
- ]), cu = /^[\s(+-]*([A-Z][A-Z0-9]*(?:\.[A-Z0-9]+)*)\s*\(/i;
3797
- function lu(e) {
3798
- let t = cu.exec(e)?.[1];
3858
+ ]), Ru = /^[\s(+-]*([A-Z][A-Z0-9]*(?:\.[A-Z0-9]+)*)\s*\(/i;
3859
+ function zu(e) {
3860
+ let t = Ru.exec(e)?.[1];
3799
3861
  return t === void 0 ? null : t.toUpperCase();
3800
3862
  }
3801
- function uu(e, t, n, r = /* @__PURE__ */ new Set()) {
3802
- let i = e.replace(/^=/, ""), a = lu(i);
3803
- if (a !== null && su.has(a)) return !0;
3804
- let o = Uo(i)[0]?.ref, s = o === void 0 ? null : n(o, t);
3863
+ function Bu(e, t, n, r = /* @__PURE__ */ new Set()) {
3864
+ let i = e.replace(/^=/, ""), a = zu(i);
3865
+ if (a !== null && Lu.has(a)) return !0;
3866
+ let o = Zo(i)[0]?.ref, s = o === void 0 ? null : n(o, t);
3805
3867
  if (s === null || o === void 0) return !1;
3806
- if (ns(s.format)) return !0;
3868
+ if (us(s.format)) return !0;
3807
3869
  let c = `${s.sheet}!${o.replace(/^.*!/, "").replace(/\$/g, "").toUpperCase()}`;
3808
- return s.formula === null || r.has(c) ? !1 : uu(s.formula, s.sheet, n, /* @__PURE__ */ new Set([...r, c]));
3870
+ return s.formula === null || r.has(c) ? !1 : Bu(s.formula, s.sheet, n, /* @__PURE__ */ new Set([...r, c]));
3809
3871
  }
3810
3872
  //#endregion
3811
3873
  //#region src/engine/wholeReferences.ts
3812
- var du = String.raw`(?:'((?:[^']|'')+)'|([A-Za-z_][\w.]*))!`, fu = String.raw`[(,+\-*/^&=<>\s]`, pu = String.raw`[),+\-*/^&=<>\s]`, mu = new RegExp(String.raw`(?<=^|${fu})(?:${du})?(?:(\$?[A-Za-z]{1,3}):(\$?[A-Za-z]{1,3})|(\$?\d+):(\$?\d+))(?=$|${pu})`, "g"), hu = (e) => e.replace("$", "").toUpperCase(), gu = ([e, t], n) => {
3813
- let r = [hu(e), hu(t)];
3874
+ var Vu = String.raw`(?:'((?:[^']|'')+)'|(${fo}))!`, Hu = String.raw`[(,+\-*/^&=<>\s]`, Uu = String.raw`[),+\-*/^&=<>\s]`, Wu = new RegExp(String.raw`(?<=^|${Hu})(?:${Vu})?(?:(\$?[A-Za-z]{1,3}):(\$?[A-Za-z]{1,3})|(\$?\d+):(\$?\d+))(?=$|${Uu})`, "gu"), Gu = (e) => e.replace("$", "").toUpperCase(), Ku = ([e, t], n) => {
3875
+ let r = [Gu(e), Gu(t)];
3814
3876
  return n(r[0]) <= n(r[1]) ? r : [r[1], r[0]];
3815
3877
  };
3816
- function _u({ whole: e, sheetName: t, columns: n, rows: r }, i) {
3878
+ function qu({ whole: e, sheetName: t, columns: n, rows: r }, i) {
3817
3879
  let a = i(t);
3818
3880
  if (!a) return null;
3819
3881
  let o = e.slice(0, e.lastIndexOf("!") + 1), s = Math.max(a.rows, 1);
3820
3882
  if (n) {
3821
- let [e, t] = gu(n, yc);
3883
+ let [e, t] = Ku(n, Dc);
3822
3884
  return `${o}${e}1:${t}${s}`;
3823
3885
  }
3824
- let c = J(Math.max(a.columns, 1) - 1), [l, u] = gu(r ?? ["1", "1"], Number);
3886
+ let c = J(Math.max(a.columns, 1) - 1), [l, u] = Ku(r ?? ["1", "1"], Number);
3825
3887
  return `${o}A${l}:${c}${u}`;
3826
3888
  }
3827
- function vu(e, t) {
3828
- return e.replace(mu, (e, n, r, i, a, o, s) => _u({
3889
+ function Ju(e, t) {
3890
+ return e.replace(Wu, (e, n, r, i, a, o, s) => qu({
3829
3891
  whole: e,
3830
3892
  sheetName: n?.replace(/''/g, "'") ?? r ?? null,
3831
3893
  columns: i && a ? [i, a] : void 0,
3832
3894
  rows: o && s ? [o, s] : void 0
3833
3895
  }, t) ?? e);
3834
3896
  }
3835
- function yu(e, t) {
3836
- return e.split(/("(?:[^"]|"")*(?:"|$))/).map((e, n) => n % 2 == 1 ? e : vu(e, t)).join("");
3897
+ function Yu(e, t) {
3898
+ return e.split(/("(?:[^"]|"")*(?:"|$))/).map((e, n) => n % 2 == 1 ? e : Ju(e, t)).join("");
3837
3899
  }
3838
3900
  //#endregion
3839
3901
  //#region src/engine/calculator.ts
3840
- function bu(e) {
3902
+ function Xu(e) {
3841
3903
  return (t, n) => {
3842
- let r = so(t), i = r?.sheetName ?? n, a = Oc(r?.ref ?? t), o = a ? e.find((e) => e.name === i)?.data[a.row]?.[a.col] : void 0;
3904
+ let r = ho(t), i = r?.sheetName ?? n, a = Ic(r?.ref ?? t), o = a ? e.find((e) => e.name === i)?.data[a.row]?.[a.col] : void 0;
3843
3905
  if (!c(o)) return null;
3844
3906
  let s = typeof o.v == "string" && o.v.startsWith("=") ? o.v : null;
3845
3907
  return {
@@ -3849,7 +3911,7 @@ function bu(e) {
3849
3911
  };
3850
3912
  };
3851
3913
  }
3852
- function xu(e) {
3914
+ function Zu(e) {
3853
3915
  if (!e || !Array.isArray(e) || e.length === 0) return [];
3854
3916
  if (Array.isArray(e[0])) return e;
3855
3917
  if (c(e[0])) {
@@ -3862,36 +3924,36 @@ function xu(e) {
3862
3924
  }
3863
3925
  return console.warn("Unknown data structure in spreadsheet, returning empty:", e), [];
3864
3926
  }
3865
- function Su(e, t) {
3927
+ function Qu(e, t) {
3866
3928
  return e.map((e) => e.map((e) => {
3867
3929
  if (!c(e) || !("v" in e)) return e;
3868
3930
  let n = e.v;
3869
3931
  if (typeof n == "string" && !n.startsWith("=")) {
3870
- let r = Xe(n, t);
3932
+ let r = tt(n, t);
3871
3933
  if (r !== null) return {
3872
3934
  v: r,
3873
- f: e.f || nt(n, t)
3935
+ f: e.f || st(n, t)
3874
3936
  };
3875
3937
  }
3876
3938
  return e;
3877
3939
  }));
3878
3940
  }
3879
- function Cu(e, t, n = {}) {
3880
- return wu(e, t, n, /* @__PURE__ */ new Map()).finish();
3941
+ function $u(e, t, n = {}) {
3942
+ return ed(e, t, n, /* @__PURE__ */ new Map()).finish();
3881
3943
  }
3882
- function wu(e, t, n, r) {
3883
- let i = n.preferDDMMYYYY ?? !1, a = n.skipFormatting ?? !1, o = Su(xu(e.data), i), l = t?.map((e) => ({
3944
+ function ed(e, t, n, r) {
3945
+ let i = n.preferDDMMYYYY ?? !1, a = n.skipFormatting ?? !1, o = Qu(Zu(e.data), i), l = t?.map((e) => ({
3884
3946
  ...e,
3885
- data: Su(xu(e.data), i)
3886
- })), d = o, f = e.name, p = [], ee = [], m = d.map((e) => [...e]), te = /* @__PURE__ */ new Set(), h = /* @__PURE__ */ new Set(), ne = (e) => {
3947
+ data: Qu(Zu(e.data), i)
3948
+ })), d = o, f = e.name, p = [], m = [], h = d.map((e) => [...e]), g = /* @__PURE__ */ new Set(), _ = /* @__PURE__ */ new Set(), ee = [], te = (e) => {
3887
3949
  let t = e === null || e === f ? d : l?.find((t) => t.name === e)?.data;
3888
3950
  return t ? {
3889
3951
  rows: t.length,
3890
3952
  columns: t.reduce((e, t) => Math.max(e, t.length), 0)
3891
3953
  } : null;
3892
- }, re = (e, { cells: t, row: n, col: r }) => {
3954
+ }, ne = (e, { cells: t, row: n, col: r }) => {
3893
3955
  let i = `${n},${r}`;
3894
- if (te.has(i)) return p.push({
3956
+ if (g.has(i)) return p.push({
3895
3957
  cell: {
3896
3958
  row: n,
3897
3959
  col: r
@@ -3900,13 +3962,16 @@ function wu(e, t, n, r) {
3900
3962
  error: "Circular reference detected",
3901
3963
  type: "circular"
3902
3964
  }), 0;
3903
- if (h.has(i)) return t[r];
3904
- te.add(i);
3965
+ if (_.has(i)) return t[r];
3966
+ g.add(i), ee.push({
3967
+ row: n,
3968
+ col: r
3969
+ });
3905
3970
  try {
3906
- let n = me(yu(e.substring(1), ne));
3971
+ let n = me(Yu(e.substring(1), te));
3907
3972
  return t[r] = n, n;
3908
3973
  } catch (i) {
3909
- let { type: a, display: o } = So(i);
3974
+ let { type: a, display: o } = ko(i);
3910
3975
  p.push({
3911
3976
  cell: {
3912
3977
  row: n,
@@ -3916,43 +3981,27 @@ function wu(e, t, n, r) {
3916
3981
  error: u(i),
3917
3982
  type: a
3918
3983
  });
3919
- let s = Ae(o);
3984
+ let s = ke(o);
3920
3985
  return t[r] = s, s;
3921
3986
  } finally {
3922
- te.delete(i), h.add(i);
3987
+ ee.pop(), g.delete(i), _.add(i);
3923
3988
  }
3924
- }, g = (e, t) => {
3989
+ }, re = (e, t) => {
3925
3990
  if (e == null) return 0;
3926
- if (S(e) || typeof e == "number") return e;
3927
- if (typeof e == "string") {
3928
- if (e.trim() === "") return 0;
3929
- if (e.includes("%")) {
3930
- let t = e.replace("%", "").trim(), n = parseFloat(t);
3931
- return isNaN(n) ? 0 : n / 100;
3932
- }
3933
- if (e.includes("$")) {
3934
- let t = e.replace(/[$,]/g, "").trim(), n = parseFloat(t);
3935
- return isNaN(n) ? 0 : n;
3936
- }
3937
- if (e.includes(",")) {
3938
- let t = e.replace(/,/g, "").trim(), n = parseFloat(t);
3939
- return isNaN(n) ? 0 : n;
3940
- }
3941
- let t = parseFloat(e);
3942
- return isNaN(t) ? e : t;
3943
- }
3991
+ if (C(e) || typeof e == "number") return e;
3992
+ if (typeof e == "string") return e.trim() === "" ? 0 : w(e) ?? e;
3944
3993
  if (c(e)) {
3945
3994
  let n = "v" in e ? e.v : void 0;
3946
- return typeof n == "string" && n.startsWith("=") ? t ? re(n, t) : 0 : g(n);
3995
+ return typeof n == "string" && n.startsWith("=") ? t ? ne(n, t) : 0 : re(n);
3947
3996
  }
3948
3997
  let n = parseFloat(e);
3949
3998
  return isNaN(n) ? e : n;
3950
3999
  }, ie = (e) => {
3951
- let t = so(e);
4000
+ let t = ho(e);
3952
4001
  if (!t) return {
3953
- sheetData: m,
4002
+ sheetData: h,
3954
4003
  ref: e,
3955
- read: g
4004
+ read: re
3956
4005
  };
3957
4006
  let n = r.get(t.sheetName) ?? ae(t.sheetName);
3958
4007
  return n ? {
@@ -3962,14 +4011,14 @@ function wu(e, t, n, r) {
3962
4011
  } : null;
3963
4012
  }, ae = (e) => {
3964
4013
  let t = l?.find((t) => t.name === e);
3965
- return !t || !t.data ? null : (wu(t, l, {
4014
+ return !t || !t.data ? null : (ed(t, l, {
3966
4015
  preferDDMMYYYY: i,
3967
4016
  skipFormatting: !0
3968
4017
  }, r), r.get(e) ?? null);
3969
4018
  }, oe = (e) => {
3970
4019
  let t = ie(e);
3971
- if (!t) throw vo(e);
3972
- let { sheetData: n, ref: r, read: i } = t, a = Oc(r);
4020
+ if (!t) throw To(e);
4021
+ let { sheetData: n, ref: r, read: i } = t, a = Ic(r);
3973
4022
  if (!a) return null;
3974
4023
  let { row: o, col: s } = a, c = o >= 0 ? n[o] : void 0;
3975
4024
  return !c || s < 0 || s >= c.length ? null : {
@@ -3988,11 +4037,11 @@ function wu(e, t, n, r) {
3988
4037
  let t = oe(e);
3989
4038
  if (t === null) return !0;
3990
4039
  let { cell: n, position: r, read: i } = t, a = s(n) ? n.v : void 0;
3991
- return tu(typeof a == "string" && a.startsWith("=") ? i(n, r) : n);
4040
+ return ju(typeof a == "string" && a.startsWith("=") ? i(n, r) : n);
3992
4041
  }, le = (e, t) => {
3993
4042
  let n = ie(e);
3994
4043
  if (!n) return [];
3995
- let { sheetData: r, ref: i, read: a } = n, o = Dc(i);
4044
+ let { sheetData: r, ref: i, read: a } = n, o = Fc(i);
3996
4045
  if (!o) return [];
3997
4046
  let s = [];
3998
4047
  for (let { row: e, col: n } of o) {
@@ -4001,9 +4050,9 @@ function wu(e, t, n, r) {
4001
4050
  row: e,
4002
4051
  col: n
4003
4052
  } : void 0);
4004
- if (t.numericOnly) !eu(o) && Le(c) && s.push(c);
4053
+ if (t.numericOnly) !Au(o) && Be(c) && s.push(c);
4005
4054
  else {
4006
- let e = eu(o) && !S(o);
4055
+ let e = Au(o) && !C(o);
4007
4056
  s.push(t.keepBlanks && e ? "" : c);
4008
4057
  }
4009
4058
  }
@@ -4012,14 +4061,14 @@ function wu(e, t, n, r) {
4012
4061
  numericOnly: !1,
4013
4062
  keepBlanks: !0
4014
4063
  }), pe = (e) => {
4015
- let t = ie(e), n = t ? Dc(t.ref) : null;
4064
+ let t = ie(e), n = t ? Fc(t.ref) : null;
4016
4065
  if (!t || !n) return 0;
4017
- let r = so(e)?.sheetName ?? f, i = r === f ? d : l?.find((e) => e.name === r)?.data;
4066
+ let r = ho(e)?.sheetName ?? f, i = r === f ? d : l?.find((e) => e.name === r)?.data;
4018
4067
  return i ? n.filter(({ row: e, col: t }) => {
4019
4068
  let n = i[e]?.[t];
4020
- return n !== void 0 && !eu(n);
4069
+ return n !== void 0 && !Au(n);
4021
4070
  }).length : 0;
4022
- }, me = (e) => ts(e, {
4071
+ }, me = (e) => ls(e, {
4023
4072
  getCellValue: se,
4024
4073
  getRangeValues: ue,
4025
4074
  getRangeValuesRaw: de,
@@ -4027,7 +4076,8 @@ function wu(e, t, n, r) {
4027
4076
  countFilledCells: pe,
4028
4077
  evaluateFormula: me,
4029
4078
  preferDDMMYYYY: i,
4030
- isCellEmpty: ce
4079
+ isCellEmpty: ce,
4080
+ currentCell: ee.at(-1)
4031
4081
  }), he = (e, t) => {
4032
4082
  if (!c(e) || !("v" in e)) return;
4033
4083
  let n = e.v;
@@ -4044,10 +4094,10 @@ function wu(e, t, n, r) {
4044
4094
  dependencies: [],
4045
4095
  result: 0
4046
4096
  };
4047
- ee.push(r), r.result = re(n, t), t.cells[t.col] = r.result;
4097
+ m.push(r), r.result = ne(n, t), t.cells[t.col] = r.result;
4048
4098
  }, ge = (e) => {
4049
4099
  d.forEach((t, n) => {
4050
- let r = m[n];
4100
+ let r = h[n];
4051
4101
  r && t.forEach((t, i) => e(t, {
4052
4102
  cells: r,
4053
4103
  row: n,
@@ -4056,51 +4106,51 @@ function wu(e, t, n, r) {
4056
4106
  });
4057
4107
  };
4058
4108
  return r.set(f, {
4059
- calculated: m,
4060
- read: g
4109
+ calculated: h,
4110
+ read: re
4061
4111
  }), { finish: () => {
4062
4112
  if (ge(he), !a) {
4063
- let e = bu([{
4113
+ let e = Xu([{
4064
4114
  name: f,
4065
4115
  data: d
4066
4116
  }, ...(l ?? []).filter((e) => e.name !== f)]);
4067
4117
  ge((t, { cells: n, col: r }) => {
4068
- let a = c(t) && typeof t.v == "string" ? t.v : "", o = a.startsWith("=") && uu(a, f, e);
4069
- n[r] = ou(t, n[r], i, o);
4118
+ let a = c(t) && typeof t.v == "string" ? t.v : "", o = a.startsWith("=") && Bu(a, f, e);
4119
+ n[r] = Iu(t, n[r], i, o);
4070
4120
  });
4071
4121
  }
4072
4122
  return {
4073
4123
  name: f,
4074
- data: m,
4075
- formulas: ee,
4124
+ data: h,
4125
+ formulas: m,
4076
4126
  errors: p
4077
4127
  };
4078
4128
  } };
4079
4129
  }
4080
- function Tu(e, t = {}) {
4081
- return e.map((n) => Cu(n, e, t));
4130
+ function td(e, t = {}) {
4131
+ return e.map((n) => $u(n, e, t));
4082
4132
  }
4083
4133
  //#endregion
4084
4134
  //#region src/engine/cellBuilder.ts
4085
- var Eu = RegExp(`^[-+]?\\s*(${at})\\s*\\(`, "i"), Du = (e) => {
4086
- let t = e.match(Eu)?.[1];
4087
- return t !== void 0 && ot(t);
4088
- }, Ou = /[A-Z]+\d+\s*[+\-*/^]/, ku = /\d+\s*[+\-*/^]\s*\d+/, Au = /^[-+]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?$/;
4089
- function ju(e) {
4090
- return Du(e) || Ou.test(e) || ku.test(e);
4091
- }
4092
- function Mu(e) {
4135
+ var nd = RegExp(`^[-+]?\\s*(${ut})\\s*\\(`, "i"), rd = (e) => {
4136
+ let t = e.match(nd)?.[1];
4137
+ return t !== void 0 && dt(t);
4138
+ }, id = /[A-Z]+\d+\s*[+\-*/^]/, ad = /\d+\s*[+\-*/^]\s*\d+/, od = /^[-+]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?$/;
4139
+ function sd(e) {
4140
+ return rd(e) || id.test(e) || ad.test(e);
4141
+ }
4142
+ function cd(e) {
4093
4143
  let t = e.trim();
4094
- return t === "" ? "" : ju(t) ? `=${t}` : Au.test(t) ? Number(t) : t;
4144
+ return t === "" ? "" : sd(t) ? `=${t}` : od.test(t) ? Number(t) : t;
4095
4145
  }
4096
- function Nu(e) {
4146
+ function ld(e) {
4097
4147
  if (e.type === "string") return { v: String(e.value) };
4098
- let t = { v: Mu(e.formula ?? "") };
4148
+ let t = { v: cd(e.formula ?? "") };
4099
4149
  return e.format && e.format.length > 0 && (t.f = e.format), t;
4100
4150
  }
4101
4151
  //#endregion
4102
4152
  //#region src/engine/engine.ts
4103
- var Pu = class {
4153
+ var ud = class {
4104
4154
  options;
4105
4155
  constructor(e = {}) {
4106
4156
  this.options = {
@@ -4111,10 +4161,10 @@ var Pu = class {
4111
4161
  };
4112
4162
  }
4113
4163
  calculate(e, t) {
4114
- return Cu(e, t, { preferDDMMYYYY: this.options.preferDDMMYYYY });
4164
+ return $u(e, t, { preferDDMMYYYY: this.options.preferDDMMYYYY });
4115
4165
  }
4116
4166
  calculateWorkbook(e) {
4117
- return Tu(e, { preferDDMMYYYY: this.options.preferDDMMYYYY });
4167
+ return td(e, { preferDDMMYYYY: this.options.preferDDMMYYYY });
4118
4168
  }
4119
4169
  getOptions() {
4120
4170
  return { ...this.options };
@@ -4134,31 +4184,31 @@ var Pu = class {
4134
4184
  toStringArray(e) {
4135
4185
  return e.data.map((e) => e.map((e) => String(e ?? "")));
4136
4186
  }
4137
- }, Fu = (e) => e.length > 80 ? `${e.slice(0, 80)}…` : e, Iu = (e) => {
4187
+ }, dd = (e) => e.length > 80 ? `${e.slice(0, 80)}…` : e, fd = (e) => {
4138
4188
  let t = typeof e == "object" && e && "v" in e ? e.v : e;
4139
4189
  return typeof t == "string" && t.startsWith("=") ? t : null;
4140
4190
  };
4141
- function Lu(e, t = zl) {
4191
+ function pd(e, t = hu) {
4142
4192
  let n = e.map((e) => ({
4143
4193
  name: e.name,
4144
- data: xu(e.data)
4145
- })), r = Bl(t, () => n.map((e) => Cu(e, n, { skipFormatting: !0 }))).flatMap((t, n) => t.data.flatMap((t, r) => t.flatMap((t, i) => {
4146
- let a = Iu(e[n]?.data[r]?.[i]);
4147
- return a === null || !S(t) ? [] : [`${e[n]?.name ?? ""}!${J(i)}${r + 1} = ${t.code} (${Fu(a)})`];
4194
+ data: Zu(e.data)
4195
+ })), r = gu(t, () => n.map((e) => $u(e, n, { skipFormatting: !0 }))).flatMap((t, n) => t.data.flatMap((t, r) => t.flatMap((t, i) => {
4196
+ let a = fd(e[n]?.data[r]?.[i]);
4197
+ return a === null || !C(t) ? [] : [`${e[n]?.name ?? ""}!${J(i)}${r + 1} = ${t.code} (${dd(a)})`];
4148
4198
  })));
4149
4199
  return {
4150
4200
  count: r.length,
4151
4201
  samples: r.slice(0, 5)
4152
4202
  };
4153
4203
  }
4154
- function Ru({ count: e, samples: t }) {
4204
+ function md({ count: e, samples: t }) {
4155
4205
  if (e === 0) return "";
4156
4206
  let n = e > t.length ? `, and ${e - t.length} more` : "";
4157
4207
  return ` ${e} formula cell(s) calculate to an error; fix any that are not meant to be errors before telling the user the spreadsheet is ready: ${t.join("; ")}${n}.`;
4158
4208
  }
4159
4209
  //#endregion
4160
4210
  //#region src/core/plugin.ts
4161
- function zu(e) {
4211
+ function hd(e) {
4162
4212
  if (typeof e != "string") return e;
4163
4213
  try {
4164
4214
  let t = JSON.parse(e);
@@ -4167,31 +4217,31 @@ function zu(e) {
4167
4217
  throw Error(`Invalid sheets format: sheets must be an array, not a string. Parse error: ${e instanceof Error ? e.message : String(e)}`, { cause: e });
4168
4218
  }
4169
4219
  }
4170
- function Bu(e) {
4220
+ function gd(e) {
4171
4221
  if (!Array.isArray(e) || e.length === 0) throw Error("At least one sheet is required. Sheets must be an array of sheet objects.");
4172
4222
  e.forEach((e) => {
4173
4223
  if (!e.name || !e.data || e.data.length === 0) throw Error(`Invalid sheet: ${e.name || "unnamed"}. Each sheet must have a name and data array.`);
4174
4224
  });
4175
4225
  }
4176
- async function Vu(e) {
4177
- let t = await Vl(e);
4226
+ async function _d(e) {
4227
+ let t = await _u(e);
4178
4228
  try {
4179
- return (t.problems.length === 0 ? "" : ` These functions could not be used and calls to them show #NAME?: ${t.problems.slice(0, 5).map(({ name: e, reason: t }) => `${e} (${t})`).join("; ")}.`) + Ru(Lu(e, t));
4229
+ return (t.problems.length === 0 ? "" : ` These functions could not be used and calls to them show #NAME?: ${t.problems.slice(0, 5).map(({ name: e, reason: t }) => `${e} (${t})`).join("; ")}.`) + md(pd(e, t));
4180
4230
  } finally {
4181
4231
  t.dispose();
4182
4232
  }
4183
4233
  }
4184
- var Hu = async (e, t) => {
4185
- let { title: n } = t, r = zu(t.sheets);
4186
- Bu(r);
4187
- let i = "Acknowledge that the spreadsheet has been created and is displayed to the user.", a = await Vu(r), o = ge(e);
4234
+ var vd = async (e, t) => {
4235
+ let { title: n } = t, r = hd(t.sheets);
4236
+ gd(r);
4237
+ let i = "Acknowledge that the spreadsheet has been created and is displayed to the user.", a = await _d(r), o = he(e);
4188
4238
  if (!o) return {
4189
4239
  message: `Created spreadsheet: ${n}${a}`,
4190
4240
  title: n,
4191
4241
  data: { sheets: r },
4192
4242
  instructions: i
4193
4243
  };
4194
- let { relPath: s, filePath: c } = h();
4244
+ let { relPath: s, filePath: c } = _();
4195
4245
  return await o.write(s, JSON.stringify(r)), {
4196
4246
  message: `Created spreadsheet: ${n}. Saved to ${c}; the user can edit cells there, so read that file for the current values.${a}`,
4197
4247
  title: n,
@@ -4199,21 +4249,21 @@ var Hu = async (e, t) => {
4199
4249
  instructions: i
4200
4250
  };
4201
4251
  };
4202
- async function Uu(e, t) {
4203
- if (!("kind" in t)) return Hu(e, t);
4204
- let n = ge(e);
4252
+ async function yd(e, t) {
4253
+ if (!("kind" in t)) return vd(e, t);
4254
+ let n = he(e);
4205
4255
  if (!n) throw Error("This host does not provide files.artifacts, so spreadsheets cannot be loaded or saved");
4206
- if (!me(t)) throw Error("Invalid spreadsheet dispatch");
4207
- return we(n, t);
4256
+ if (!pe(t)) throw Error("Invalid spreadsheet dispatch");
4257
+ return Ce(n, t);
4208
4258
  }
4209
- var Wu = {
4259
+ var bd = {
4210
4260
  toolDefinition: a,
4211
- execute: Uu,
4261
+ execute: yd,
4212
4262
  generatingMessage: "Creating spreadsheet...",
4213
4263
  waitingMessage: "Tell the user that the spreadsheet was created and will be presented shortly.",
4214
4264
  isEnabled: () => !0,
4215
4265
  systemPrompt: o
4216
- }, Gu = [
4266
+ }, xd = [
4217
4267
  {
4218
4268
  name: "Simple Budget",
4219
4269
  args: {
@@ -4558,4 +4608,4 @@ var Wu = {
4558
4608
  }
4559
4609
  ];
4560
4610
  //#endregion
4561
- export { s as C, i as E, c as S, a as T, me as _, Nu as a, g as b, zl as c, Ic as d, Ac as f, we as g, W as h, Pu as i, Bl as l, J as m, Hu as n, Cu as o, Oc as p, Wu as r, xu as s, Gu as t, Vl as u, ce as v, o as w, u as x, re as y };
4611
+ export { s as C, i as E, c as S, a as T, pe as _, ld as a, ne as b, hu as c, Wc as d, Rc as f, Ce as g, W as h, ud as i, gu as l, J as m, vd as n, $u as o, Ic as p, bd as r, Zu as s, xd as t, _u as u, se as v, o as w, u as x, te as y };