@gui-chat-plugin/spreadsheet 4.2.1 → 4.2.2

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