@pixerate/editor 0.47.0 → 0.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/agent/index.cjs +246 -29
  2. package/dist/agent/index.cjs.map +1 -1
  3. package/dist/agent/index.d.cts +18 -6
  4. package/dist/agent/index.d.ts +18 -6
  5. package/dist/agent/index.js +226 -9
  6. package/dist/agent/index.js.map +1 -1
  7. package/dist/{builtins-xs7rK6ys.d.cts → builtins-1kqwLUnb.d.cts} +1 -1
  8. package/dist/{builtins-D2nMtw2W.d.ts → builtins-BKYlHH1s.d.ts} +1 -1
  9. package/dist/chart/index.cjs +214 -3541
  10. package/dist/chart/index.cjs.map +1 -1
  11. package/dist/chart/index.d.cts +4 -494
  12. package/dist/chart/index.d.ts +4 -494
  13. package/dist/chart/index.js +135 -3462
  14. package/dist/chart/index.js.map +1 -1
  15. package/dist/{chunk-5VXI5GED.js → chunk-2CJ3LPYQ.js} +3 -3
  16. package/dist/{chunk-ZFBBVGCI.js → chunk-EKYHKQPG.js} +243 -243
  17. package/dist/{chunk-ZFBBVGCI.js.map → chunk-EKYHKQPG.js.map} +1 -1
  18. package/dist/chunk-HXUL3LS7.js +113 -0
  19. package/dist/chunk-HXUL3LS7.js.map +1 -0
  20. package/dist/{chunk-REAGGLXS.js → chunk-JQ3BB3E6.js} +2 -2
  21. package/dist/chunk-LTUM52X6.js +4074 -0
  22. package/dist/chunk-LTUM52X6.js.map +1 -0
  23. package/dist/{chunk-J3R2OWOE.cjs → chunk-MUCYWI6W.cjs} +608 -15
  24. package/dist/chunk-MUCYWI6W.cjs.map +1 -0
  25. package/dist/chunk-PIMCHMZE.cjs +521 -0
  26. package/dist/chunk-PIMCHMZE.cjs.map +1 -0
  27. package/dist/{chunk-TK2XZK6Z.js → chunk-PKBWLEL7.js} +594 -1
  28. package/dist/chunk-PKBWLEL7.js.map +1 -0
  29. package/dist/chunk-PRSJJZBS.cjs +4074 -0
  30. package/dist/chunk-PRSJJZBS.cjs.map +1 -0
  31. package/dist/chunk-U6IZKC7B.cjs +113 -0
  32. package/dist/chunk-U6IZKC7B.cjs.map +1 -0
  33. package/dist/{chunk-SQC26VQV.cjs → chunk-UN33YOXW.cjs} +191 -191
  34. package/dist/{chunk-SQC26VQV.cjs.map → chunk-UN33YOXW.cjs.map} +1 -1
  35. package/dist/{chunk-PQFAHT5O.js → chunk-VKPEPWKZ.js} +27 -94
  36. package/dist/chunk-VKPEPWKZ.js.map +1 -0
  37. package/dist/{chunk-H4PICYNL.cjs → chunk-WXEHCVJQ.cjs} +113 -180
  38. package/dist/chunk-WXEHCVJQ.cjs.map +1 -0
  39. package/dist/{chunk-LYGEEDNR.cjs → chunk-XP5IUZUO.cjs} +242 -242
  40. package/dist/chunk-XP5IUZUO.cjs.map +1 -0
  41. package/dist/{chunk-C3NWJE3K.js → chunk-XUUD43OV.js} +11 -672
  42. package/dist/chunk-XUUD43OV.js.map +1 -0
  43. package/dist/{chunk-BBRK6MOI.cjs → chunk-YU4WQE5M.cjs} +100 -100
  44. package/dist/{chunk-BBRK6MOI.cjs.map → chunk-YU4WQE5M.cjs.map} +1 -1
  45. package/dist/commands/index.d.cts +1 -1
  46. package/dist/commands/index.d.ts +1 -1
  47. package/dist/controller-ChjCCMLl.d.cts +822 -0
  48. package/dist/controller-DtbEo3om.d.ts +822 -0
  49. package/dist/extensions/index.cjs +32 -4
  50. package/dist/extensions/index.cjs.map +1 -1
  51. package/dist/extensions/index.d.cts +4 -2
  52. package/dist/extensions/index.d.ts +4 -2
  53. package/dist/extensions/index.js +31 -3
  54. package/dist/{index-QrqMmZ75.d.cts → index-DoHqT1mq.d.cts} +203 -7
  55. package/dist/{index-CSUCQYAH.d.ts → index-YLZ0fKqE.d.ts} +203 -7
  56. package/dist/index.cjs +37 -12
  57. package/dist/index.cjs.map +1 -1
  58. package/dist/index.d.cts +9 -7
  59. package/dist/index.d.ts +9 -7
  60. package/dist/index.js +31 -6
  61. package/dist/index.js.map +1 -1
  62. package/dist/spreadsheet/index.cjs +4 -4
  63. package/dist/spreadsheet/index.js +3 -3
  64. package/package.json +1 -1
  65. package/dist/chunk-C3NWJE3K.js.map +0 -1
  66. package/dist/chunk-H4PICYNL.cjs.map +0 -1
  67. package/dist/chunk-J3R2OWOE.cjs.map +0 -1
  68. package/dist/chunk-LYGEEDNR.cjs.map +0 -1
  69. package/dist/chunk-NEOO6QJD.cjs +0 -1182
  70. package/dist/chunk-NEOO6QJD.cjs.map +0 -1
  71. package/dist/chunk-PQFAHT5O.js.map +0 -1
  72. package/dist/chunk-TK2XZK6Z.js.map +0 -1
  73. package/dist/types-BVqWm3d1.d.cts +0 -320
  74. package/dist/types-BVqWm3d1.d.ts +0 -320
  75. /package/dist/{chunk-5VXI5GED.js.map → chunk-2CJ3LPYQ.js.map} +0 -0
  76. /package/dist/{chunk-REAGGLXS.js.map → chunk-JQ3BB3E6.js.map} +0 -0
@@ -1,240 +1,4 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;// src/spreadsheet/formula/values.ts
2
- var FORMULA_ERRORS = /* @__PURE__ */ new Set([
3
- "#DIV/0!",
4
- "#VALUE!",
5
- "#REF!",
6
- "#NAME?",
7
- "#N/A",
8
- "#NUM!",
9
- "#CYCLE!",
10
- "#ERROR!",
11
- "#SPILL!",
12
- "#CALC!"
13
- ]);
14
- function isFormulaError(value) {
15
- return typeof value === "string" && FORMULA_ERRORS.has(value);
16
- }
17
- var isBlank = (value) => value === "" || value === null || value === void 0;
18
- function toNumber(value) {
19
- if (isFormulaError(value)) return value;
20
- if (isBlank(value)) return 0;
21
- if (typeof value === "boolean") return value ? 1 : 0;
22
- if (typeof value === "number") return value;
23
- return _nullishCoalesce(parseNumberText(String(value)), () => ( "#VALUE!"));
24
- }
25
- function toBoolean(value) {
26
- if (isFormulaError(value)) return value;
27
- if (isBlank(value)) return false;
28
- if (typeof value === "boolean") return value;
29
- if (typeof value === "number") return value !== 0;
30
- const upper = String(value).trim().toUpperCase();
31
- if (upper === "TRUE") return true;
32
- if (upper === "FALSE") return false;
33
- return "#VALUE!";
34
- }
35
- var toText = (value) => isBlank(value) ? "" : typeof value === "boolean" ? value ? "TRUE" : "FALSE" : typeof value === "number" ? numberToText(value) : String(value);
36
- function numberToText(n) {
37
- if (n === 0 || !Number.isFinite(n)) return "0";
38
- const a = Math.abs(n);
39
- if ((a < 1e-9 || a >= 1e15) && Math.round(a) !== a || a >= 1e15) return sciText(n, 15);
40
- let mag = Math.floor(Math.log10(a));
41
- if (a >= Math.pow(10, mag + 1)) mag++;
42
- const decimals = Math.min(Math.max(14 - mag, 0), 30);
43
- return trimDecimal(n.toFixed(decimals));
44
- }
45
- function trimDecimal(s) {
46
- if (!s.includes(".")) return s;
47
- const t = s.replace(/0+$/, "").replace(/\.$/, "");
48
- return t === "-0" ? "0" : t;
49
- }
50
- function sciText(n, sig) {
51
- const [mantissa, exp] = n.toExponential(Math.max(sig - 1, 0)).split("e");
52
- const e = Number(exp);
53
- return `${trimDecimal(mantissa)}E${e < 0 ? "-" : "+"}${String(Math.abs(e)).padStart(2, "0")}`;
54
- }
55
- function numericValue(value) {
56
- if (typeof value === "number") return Number.isFinite(value) ? value : null;
57
- if (typeof value !== "string" || FORMULA_ERRORS.has(value)) return null;
58
- const trimmed = value.trim();
59
- if (trimmed === "") return null;
60
- const num = Number(trimmed);
61
- return Number.isFinite(num) ? num : null;
62
- }
63
- function normalizeValue(value) {
64
- const num = typeof value === "string" ? numericValue(value) : null;
65
- return num === null ? value : num;
66
- }
67
- var ERROR_ORDER = ["#NULL!", "#DIV/0!", "#VALUE!", "#REF!", "#NAME?", "#NUM!", "#N/A", "#SPILL!", "#CALC!", "#CYCLE!", "#ERROR!"];
68
- function valueRank(value) {
69
- if (isBlank(value)) return 4;
70
- if (typeof value === "number") return 0;
71
- if (typeof value === "boolean") return 2;
72
- if (typeof value === "string" && FORMULA_ERRORS.has(value)) return 3;
73
- return 1;
74
- }
75
- function compareNumbers(a, b) {
76
- if (a === b) return 0;
77
- if (Math.abs(a - b) > Math.max(Math.abs(a), Math.abs(b)) * 1e-13) return a < b ? -1 : 1;
78
- const round15 = (x2) => !Number.isFinite(x2) || x2 === 0 ? x2 : Number(x2.toExponential(14));
79
- const x = round15(a);
80
- const y = round15(b);
81
- return x < y ? -1 : x > y ? 1 : 0;
82
- }
83
- function compareText(a, b) {
84
- const x = a.toLowerCase();
85
- const y = b.toLowerCase();
86
- return x < y ? -1 : x > y ? 1 : 0;
87
- }
88
- function compareValues(left, right) {
89
- const lRank = valueRank(left);
90
- const rRank = valueRank(right);
91
- if (lRank === 4 || rRank === 4) {
92
- if (lRank === rRank) return 0;
93
- const blankFirst = lRank === 4;
94
- const other = blankFirst ? right : left;
95
- const otherRank = blankFirst ? rRank : lRank;
96
- let cmp;
97
- if (otherRank === 0) cmp = compareNumbers(0, other);
98
- else if (otherRank === 1) cmp = String(other) === "" ? 0 : -1;
99
- else if (otherRank === 2) cmp = other ? -1 : 0;
100
- else return lRank - rRank;
101
- return blankFirst ? cmp : -cmp;
102
- }
103
- if (lRank === 1 && rRank === 1) {
104
- const a = String(left);
105
- const b = String(right);
106
- const ta = isoDateTime(a);
107
- const tb = ta === null ? null : isoDateTime(b);
108
- if (ta !== null && tb !== null) return Math.sign(ta - tb);
109
- return compareText(a, b);
110
- }
111
- if (lRank === 0 && rRank === 1 || lRank === 1 && rRank === 0) {
112
- const date = parseIsoDate(lRank === 1 ? left : right);
113
- if (date) {
114
- const serial = dateToSerial(date);
115
- return lRank === 0 ? compareNumbers(left, serial) : compareNumbers(serial, right);
116
- }
117
- }
118
- if (lRank !== rRank) return lRank - rRank;
119
- if (lRank === 0) return compareNumbers(left, right);
120
- if (lRank === 2) return Number(left) - Number(right);
121
- return Math.sign(ERROR_ORDER.indexOf(left) - ERROR_ORDER.indexOf(right));
122
- }
123
- function sortCompareValues(left, right) {
124
- const lBlank = isBlank(left);
125
- const rBlank = isBlank(right);
126
- if (lBlank || rBlank) return lBlank === rBlank ? 0 : lBlank ? 1 : -1;
127
- if (isFormulaError(left) && isFormulaError(right)) return 0;
128
- return compareValues(left, right);
129
- }
130
- function roundHalfAwayFromZero(value, decimals) {
131
- const factor = Math.pow(10, decimals);
132
- const scaled = Number((Math.abs(value) * factor).toPrecision(15));
133
- return Math.sign(value) * Math.round(scaled) / factor;
134
- }
135
- var cleanFloat = (value) => Number(value.toPrecision(15));
136
- function colNameToIndex(col) {
137
- let index = 0;
138
- const upper = col.toUpperCase();
139
- for (let i = 0; i < upper.length; i++) {
140
- index = index * 26 + (upper.charCodeAt(i) - 65 + 1);
141
- }
142
- return index - 1;
143
- }
144
- function indexToColName(index) {
145
- let num = index + 1;
146
- let name = "";
147
- while (num > 0) {
148
- const mod = (num - 1) % 26;
149
- name = String.fromCharCode(65 + mod) + name;
150
- num = Math.floor((num - mod) / 26);
151
- }
152
- return name;
153
- }
154
- var rangeShapes = /* @__PURE__ */ new WeakMap();
155
- function withRangeShape(values, rows, cols) {
156
- rangeShapes.set(values, { rows, cols });
157
- return values;
158
- }
159
- function toFormulaRange(values) {
160
- const shape = rangeShapes.get(values);
161
- if (shape && shape.rows * shape.cols === values.length) return { ...shape, values };
162
- return { rows: values.length, cols: 1, values };
163
- }
164
- var rangeGet = (range, row, col) => row < range.rows && col < range.cols ? range.values[col * range.rows + row] : "";
165
- function sliceRange(range, rowStart, rowCount, colStart, colCount) {
166
- const out = [];
167
- for (let c = colStart; c < colStart + colCount; c++) {
168
- for (let r = rowStart; r < rowStart + rowCount; r++) out.push(rangeGet(range, r, c));
169
- }
170
- return withRangeShape(out, rowCount, colCount);
171
- }
172
- var MS_PER_DAY = 24 * 60 * 60 * 1e3;
173
- var pad = (n, width = 2) => String(n).padStart(width, "0");
174
- function toDate(value) {
175
- if (value instanceof Date) return isNaN(value.getTime()) ? null : value;
176
- if (typeof value === "number") return serialToDate(value);
177
- if (typeof value !== "string" || FORMULA_ERRORS.has(value)) return null;
178
- const text = value.trim();
179
- if (text === "") return null;
180
- const iso = /^(\d{4})-(\d{1,2})-(\d{1,2})(?:[ T](\d{1,2}):(\d{2})(?::(\d{2}))?)?$/.exec(text);
181
- if (iso) {
182
- const [, y, m, d, hh = "0", mm = "0", ss = "0"] = iso;
183
- const date = new Date(Number(y), Number(m) - 1, Number(d), Number(hh), Number(mm), Number(ss));
184
- return date.getMonth() === Number(m) - 1 ? date : null;
185
- }
186
- const serial = numericValue(text);
187
- if (serial !== null) return serialToDate(serial);
188
- if (/[a-z/]/i.test(text)) {
189
- const parsed = Date.parse(text);
190
- return isNaN(parsed) ? null : new Date(parsed);
191
- }
192
- return null;
193
- }
194
- var ISO_DATE = /^(\d{4})-(\d{1,2})-(\d{1,2})(?:[ T](\d{1,2}):(\d{2})(?::(\d{2}))?)?$/;
195
- function parseIsoDate(value) {
196
- if (typeof value !== "string" || value.length < 8 || value.length > 19) return null;
197
- const iso = ISO_DATE.exec(value.trim());
198
- if (!iso) return null;
199
- const [, y, m, d, hh = "0", mm = "0", ss = "0"] = iso;
200
- const date = new Date(Number(y), Number(m) - 1, Number(d), Number(hh), Number(mm), Number(ss));
201
- return date.getMonth() === Number(m) - 1 && date.getDate() === Number(d) ? date : null;
202
- }
203
- var isoDateHasTime = (value) => /[ T]\d/.test(value.trim());
204
- function isoDateTime(value) {
205
- if (value.length < 8 || value.charCodeAt(4) !== 45) return null;
206
- return _nullishCoalesce(_optionalChain([parseIsoDate, 'call', _ => _(value), 'optionalAccess', _2 => _2.getTime, 'call', _3 => _3()]), () => ( null));
207
- }
208
- function dateToSerial(date) {
209
- const utc = Date.UTC(
210
- date.getFullYear(),
211
- date.getMonth(),
212
- date.getDate(),
213
- date.getHours(),
214
- date.getMinutes(),
215
- date.getSeconds()
216
- );
217
- return cleanFloat((utc - Date.UTC(1899, 11, 30)) / MS_PER_DAY);
218
- }
219
- function serialToDate(serial) {
220
- if (!Number.isFinite(serial)) return null;
221
- const utc = new Date(Date.UTC(1899, 11, 30) + Math.round(serial * MS_PER_DAY));
222
- return new Date(
223
- utc.getUTCFullYear(),
224
- utc.getUTCMonth(),
225
- utc.getUTCDate(),
226
- utc.getUTCHours(),
227
- utc.getUTCMinutes(),
228
- utc.getUTCSeconds()
229
- );
230
- }
231
- var formatIsoDate = (date) => `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;
232
- var formatIsoDateTime = (date) => `${formatIsoDate(date)} ${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`;
233
- var daysBetween = (start, end) => Math.round(
234
- (Date.UTC(end.getFullYear(), end.getMonth(), end.getDate()) - Date.UTC(start.getFullYear(), start.getMonth(), start.getDate())) / MS_PER_DAY
235
- );
236
-
237
- // src/spreadsheet/formula/parse-input.ts
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;// src/spreadsheet/formula/parse-input.ts
238
2
  var MONTH_NAMES = [
239
3
  "January",
240
4
  "February",
@@ -322,14 +86,14 @@ function formatKindOf(format) {
322
86
  if (format.includes("%")) return "percentage";
323
87
  return "number";
324
88
  }
325
- var pad2 = (n, width = 2) => String(n).padStart(width, "0");
89
+ var pad = (n, width = 2) => String(n).padStart(width, "0");
326
90
  function isoText({ year, month, day, time }) {
327
91
  if (day > daysInMonth(year, month)) return null;
328
- const date = `${pad2(year, 4)}-${pad2(month)}-${pad2(day)}`;
92
+ const date = `${pad(year, 4)}-${pad(month)}-${pad(day)}`;
329
93
  if (time === void 0) return date;
330
94
  let seconds = Math.round(time * 86400);
331
95
  if (seconds >= 86400) seconds = 86399;
332
- return `${date} ${pad2(Math.floor(seconds / 3600))}:${pad2(Math.floor(seconds / 60) % 60)}:${pad2(seconds % 60)}`;
96
+ return `${date} ${pad(Math.floor(seconds / 3600))}:${pad(Math.floor(seconds / 60) % 60)}:${pad(seconds % 60)}`;
333
97
  }
334
98
  function parseNumeric(t) {
335
99
  if (t === "") return null;
@@ -510,6 +274,242 @@ function parseDateTime(t) {
510
274
  return null;
511
275
  }
512
276
 
277
+ // src/spreadsheet/formula/values.ts
278
+ var FORMULA_ERRORS = /* @__PURE__ */ new Set([
279
+ "#DIV/0!",
280
+ "#VALUE!",
281
+ "#REF!",
282
+ "#NAME?",
283
+ "#N/A",
284
+ "#NUM!",
285
+ "#CYCLE!",
286
+ "#ERROR!",
287
+ "#SPILL!",
288
+ "#CALC!"
289
+ ]);
290
+ function isFormulaError(value) {
291
+ return typeof value === "string" && FORMULA_ERRORS.has(value);
292
+ }
293
+ var isBlank = (value) => value === "" || value === null || value === void 0;
294
+ function toNumber(value) {
295
+ if (isFormulaError(value)) return value;
296
+ if (isBlank(value)) return 0;
297
+ if (typeof value === "boolean") return value ? 1 : 0;
298
+ if (typeof value === "number") return value;
299
+ return _nullishCoalesce(parseNumberText(String(value)), () => ( "#VALUE!"));
300
+ }
301
+ function toBoolean(value) {
302
+ if (isFormulaError(value)) return value;
303
+ if (isBlank(value)) return false;
304
+ if (typeof value === "boolean") return value;
305
+ if (typeof value === "number") return value !== 0;
306
+ const upper = String(value).trim().toUpperCase();
307
+ if (upper === "TRUE") return true;
308
+ if (upper === "FALSE") return false;
309
+ return "#VALUE!";
310
+ }
311
+ var toText = (value) => isBlank(value) ? "" : typeof value === "boolean" ? value ? "TRUE" : "FALSE" : typeof value === "number" ? numberToText(value) : String(value);
312
+ function numberToText(n) {
313
+ if (n === 0 || !Number.isFinite(n)) return "0";
314
+ const a = Math.abs(n);
315
+ if ((a < 1e-9 || a >= 1e15) && Math.round(a) !== a || a >= 1e15) return sciText(n, 15);
316
+ let mag = Math.floor(Math.log10(a));
317
+ if (a >= Math.pow(10, mag + 1)) mag++;
318
+ const decimals = Math.min(Math.max(14 - mag, 0), 30);
319
+ return trimDecimal(n.toFixed(decimals));
320
+ }
321
+ function trimDecimal(s) {
322
+ if (!s.includes(".")) return s;
323
+ const t = s.replace(/0+$/, "").replace(/\.$/, "");
324
+ return t === "-0" ? "0" : t;
325
+ }
326
+ function sciText(n, sig) {
327
+ const [mantissa, exp] = n.toExponential(Math.max(sig - 1, 0)).split("e");
328
+ const e = Number(exp);
329
+ return `${trimDecimal(mantissa)}E${e < 0 ? "-" : "+"}${String(Math.abs(e)).padStart(2, "0")}`;
330
+ }
331
+ function numericValue(value) {
332
+ if (typeof value === "number") return Number.isFinite(value) ? value : null;
333
+ if (typeof value !== "string" || FORMULA_ERRORS.has(value)) return null;
334
+ const trimmed = value.trim();
335
+ if (trimmed === "") return null;
336
+ const num = Number(trimmed);
337
+ return Number.isFinite(num) ? num : null;
338
+ }
339
+ function normalizeValue(value) {
340
+ const num = typeof value === "string" ? numericValue(value) : null;
341
+ return num === null ? value : num;
342
+ }
343
+ var ERROR_ORDER = ["#NULL!", "#DIV/0!", "#VALUE!", "#REF!", "#NAME?", "#NUM!", "#N/A", "#SPILL!", "#CALC!", "#CYCLE!", "#ERROR!"];
344
+ function valueRank(value) {
345
+ if (isBlank(value)) return 4;
346
+ if (typeof value === "number") return 0;
347
+ if (typeof value === "boolean") return 2;
348
+ if (typeof value === "string" && FORMULA_ERRORS.has(value)) return 3;
349
+ return 1;
350
+ }
351
+ function compareNumbers(a, b) {
352
+ if (a === b) return 0;
353
+ if (Math.abs(a - b) > Math.max(Math.abs(a), Math.abs(b)) * 1e-13) return a < b ? -1 : 1;
354
+ const round15 = (x2) => !Number.isFinite(x2) || x2 === 0 ? x2 : Number(x2.toExponential(14));
355
+ const x = round15(a);
356
+ const y = round15(b);
357
+ return x < y ? -1 : x > y ? 1 : 0;
358
+ }
359
+ function compareText(a, b) {
360
+ const x = a.toLowerCase();
361
+ const y = b.toLowerCase();
362
+ return x < y ? -1 : x > y ? 1 : 0;
363
+ }
364
+ function compareValues(left, right) {
365
+ const lRank = valueRank(left);
366
+ const rRank = valueRank(right);
367
+ if (lRank === 4 || rRank === 4) {
368
+ if (lRank === rRank) return 0;
369
+ const blankFirst = lRank === 4;
370
+ const other = blankFirst ? right : left;
371
+ const otherRank = blankFirst ? rRank : lRank;
372
+ let cmp;
373
+ if (otherRank === 0) cmp = compareNumbers(0, other);
374
+ else if (otherRank === 1) cmp = String(other) === "" ? 0 : -1;
375
+ else if (otherRank === 2) cmp = other ? -1 : 0;
376
+ else return lRank - rRank;
377
+ return blankFirst ? cmp : -cmp;
378
+ }
379
+ if (lRank === 1 && rRank === 1) {
380
+ const a = String(left);
381
+ const b = String(right);
382
+ const ta = isoDateTime(a);
383
+ const tb = ta === null ? null : isoDateTime(b);
384
+ if (ta !== null && tb !== null) return Math.sign(ta - tb);
385
+ return compareText(a, b);
386
+ }
387
+ if (lRank === 0 && rRank === 1 || lRank === 1 && rRank === 0) {
388
+ const date = parseIsoDate(lRank === 1 ? left : right);
389
+ if (date) {
390
+ const serial = dateToSerial(date);
391
+ return lRank === 0 ? compareNumbers(left, serial) : compareNumbers(serial, right);
392
+ }
393
+ }
394
+ if (lRank !== rRank) return lRank - rRank;
395
+ if (lRank === 0) return compareNumbers(left, right);
396
+ if (lRank === 2) return Number(left) - Number(right);
397
+ return Math.sign(ERROR_ORDER.indexOf(left) - ERROR_ORDER.indexOf(right));
398
+ }
399
+ function sortCompareValues(left, right) {
400
+ const lBlank = isBlank(left);
401
+ const rBlank = isBlank(right);
402
+ if (lBlank || rBlank) return lBlank === rBlank ? 0 : lBlank ? 1 : -1;
403
+ if (isFormulaError(left) && isFormulaError(right)) return 0;
404
+ return compareValues(left, right);
405
+ }
406
+ function roundHalfAwayFromZero(value, decimals) {
407
+ const factor = Math.pow(10, decimals);
408
+ const scaled = Number((Math.abs(value) * factor).toPrecision(15));
409
+ return Math.sign(value) * Math.round(scaled) / factor;
410
+ }
411
+ var cleanFloat = (value) => Number(value.toPrecision(15));
412
+ function colNameToIndex(col) {
413
+ let index = 0;
414
+ const upper = col.toUpperCase();
415
+ for (let i = 0; i < upper.length; i++) {
416
+ index = index * 26 + (upper.charCodeAt(i) - 65 + 1);
417
+ }
418
+ return index - 1;
419
+ }
420
+ function indexToColName(index) {
421
+ let num = index + 1;
422
+ let name = "";
423
+ while (num > 0) {
424
+ const mod = (num - 1) % 26;
425
+ name = String.fromCharCode(65 + mod) + name;
426
+ num = Math.floor((num - mod) / 26);
427
+ }
428
+ return name;
429
+ }
430
+ var rangeShapes = /* @__PURE__ */ new WeakMap();
431
+ function withRangeShape(values, rows, cols) {
432
+ rangeShapes.set(values, { rows, cols });
433
+ return values;
434
+ }
435
+ function toFormulaRange(values) {
436
+ const shape = rangeShapes.get(values);
437
+ if (shape && shape.rows * shape.cols === values.length) return { ...shape, values };
438
+ return { rows: values.length, cols: 1, values };
439
+ }
440
+ var rangeGet = (range, row, col) => row < range.rows && col < range.cols ? range.values[col * range.rows + row] : "";
441
+ function sliceRange(range, rowStart, rowCount, colStart, colCount) {
442
+ const out = [];
443
+ for (let c = colStart; c < colStart + colCount; c++) {
444
+ for (let r = rowStart; r < rowStart + rowCount; r++) out.push(rangeGet(range, r, c));
445
+ }
446
+ return withRangeShape(out, rowCount, colCount);
447
+ }
448
+ var MS_PER_DAY = 24 * 60 * 60 * 1e3;
449
+ var pad2 = (n, width = 2) => String(n).padStart(width, "0");
450
+ function toDate(value) {
451
+ if (value instanceof Date) return isNaN(value.getTime()) ? null : value;
452
+ if (typeof value === "number") return serialToDate(value);
453
+ if (typeof value !== "string" || FORMULA_ERRORS.has(value)) return null;
454
+ const text = value.trim();
455
+ if (text === "") return null;
456
+ const iso = /^(\d{4})-(\d{1,2})-(\d{1,2})(?:[ T](\d{1,2}):(\d{2})(?::(\d{2}))?)?$/.exec(text);
457
+ if (iso) {
458
+ const [, y, m, d, hh = "0", mm = "0", ss = "0"] = iso;
459
+ const date = new Date(Number(y), Number(m) - 1, Number(d), Number(hh), Number(mm), Number(ss));
460
+ return date.getMonth() === Number(m) - 1 ? date : null;
461
+ }
462
+ const serial = numericValue(text);
463
+ if (serial !== null) return serialToDate(serial);
464
+ if (/[a-z/]/i.test(text)) {
465
+ const parsed = Date.parse(text);
466
+ return isNaN(parsed) ? null : new Date(parsed);
467
+ }
468
+ return null;
469
+ }
470
+ var ISO_DATE = /^(\d{4})-(\d{1,2})-(\d{1,2})(?:[ T](\d{1,2}):(\d{2})(?::(\d{2}))?)?$/;
471
+ function parseIsoDate(value) {
472
+ if (typeof value !== "string" || value.length < 8 || value.length > 19) return null;
473
+ const iso = ISO_DATE.exec(value.trim());
474
+ if (!iso) return null;
475
+ const [, y, m, d, hh = "0", mm = "0", ss = "0"] = iso;
476
+ const date = new Date(Number(y), Number(m) - 1, Number(d), Number(hh), Number(mm), Number(ss));
477
+ return date.getMonth() === Number(m) - 1 && date.getDate() === Number(d) ? date : null;
478
+ }
479
+ var isoDateHasTime = (value) => /[ T]\d/.test(value.trim());
480
+ function isoDateTime(value) {
481
+ if (value.length < 8 || value.charCodeAt(4) !== 45) return null;
482
+ return _nullishCoalesce(_optionalChain([parseIsoDate, 'call', _ => _(value), 'optionalAccess', _2 => _2.getTime, 'call', _3 => _3()]), () => ( null));
483
+ }
484
+ function dateToSerial(date) {
485
+ const utc = Date.UTC(
486
+ date.getFullYear(),
487
+ date.getMonth(),
488
+ date.getDate(),
489
+ date.getHours(),
490
+ date.getMinutes(),
491
+ date.getSeconds()
492
+ );
493
+ return cleanFloat((utc - Date.UTC(1899, 11, 30)) / MS_PER_DAY);
494
+ }
495
+ function serialToDate(serial) {
496
+ if (!Number.isFinite(serial)) return null;
497
+ const utc = new Date(Date.UTC(1899, 11, 30) + Math.round(serial * MS_PER_DAY));
498
+ return new Date(
499
+ utc.getUTCFullYear(),
500
+ utc.getUTCMonth(),
501
+ utc.getUTCDate(),
502
+ utc.getUTCHours(),
503
+ utc.getUTCMinutes(),
504
+ utc.getUTCSeconds()
505
+ );
506
+ }
507
+ var formatIsoDate = (date) => `${date.getFullYear()}-${pad2(date.getMonth() + 1)}-${pad2(date.getDate())}`;
508
+ var formatIsoDateTime = (date) => `${formatIsoDate(date)} ${pad2(date.getHours())}:${pad2(date.getMinutes())}:${pad2(date.getSeconds())}`;
509
+ var daysBetween = (start, end) => Math.round(
510
+ (Date.UTC(end.getFullYear(), end.getMonth(), end.getDate()) - Date.UTC(start.getFullYear(), start.getMonth(), start.getDate())) / MS_PER_DAY
511
+ );
512
+
513
513
  // src/spreadsheet/numfmt/decimal.ts
514
514
  var MAX_DECIMALS = 400;
515
515
  function significantDigits(a, n) {
@@ -1891,5 +1891,5 @@ function numberFormatColorToCss(color) {
1891
1891
 
1892
1892
 
1893
1893
 
1894
- exports.serialFromYmd = serialFromYmd; exports.parseCellInput = parseCellInput; exports.parseNumberText = parseNumberText; exports.FORMULA_ERRORS = FORMULA_ERRORS; exports.isFormulaError = isFormulaError; exports.isBlank = isBlank; exports.toNumber = toNumber; exports.toBoolean = toBoolean; exports.toText = toText; exports.numberToText = numberToText; exports.numericValue = numericValue; exports.normalizeValue = normalizeValue; exports.compareNumbers = compareNumbers; exports.compareValues = compareValues; exports.sortCompareValues = sortCompareValues; exports.roundHalfAwayFromZero = roundHalfAwayFromZero; exports.cleanFloat = cleanFloat; exports.colNameToIndex = colNameToIndex; exports.indexToColName = indexToColName; exports.withRangeShape = withRangeShape; exports.toFormulaRange = toFormulaRange; exports.rangeGet = rangeGet; exports.sliceRange = sliceRange; exports.toDate = toDate; exports.parseIsoDate = parseIsoDate; exports.isoDateHasTime = isoDateHasTime; exports.dateToSerial = dateToSerial; exports.serialToDate = serialToDate; exports.formatIsoDate = formatIsoDate; exports.formatIsoDateTime = formatIsoDateTime; exports.daysBetween = daysBetween; exports.formatGeneralFit = formatGeneralFit; exports.builtinNumberFormat = builtinNumberFormat; exports.builtinNumberFormatId = builtinNumberFormatId; exports.MAX_NUMBER_FORMAT_CODE_CHARS = MAX_NUMBER_FORMAT_CODE_CHARS; exports.NumberFormat = NumberFormat; exports.clearNumberFormatCache = clearNumberFormatCache; exports.dateValueToSerial = dateValueToSerial; exports.formatNumberFormatValue = formatNumberFormatValue; exports.formatTextFunction = formatTextFunction; exports.numberFormatColorToCss = numberFormatColorToCss;
1895
- //# sourceMappingURL=chunk-LYGEEDNR.cjs.map
1894
+ exports.FORMULA_ERRORS = FORMULA_ERRORS; exports.isFormulaError = isFormulaError; exports.isBlank = isBlank; exports.toNumber = toNumber; exports.toBoolean = toBoolean; exports.toText = toText; exports.numberToText = numberToText; exports.numericValue = numericValue; exports.normalizeValue = normalizeValue; exports.compareNumbers = compareNumbers; exports.compareValues = compareValues; exports.sortCompareValues = sortCompareValues; exports.roundHalfAwayFromZero = roundHalfAwayFromZero; exports.cleanFloat = cleanFloat; exports.colNameToIndex = colNameToIndex; exports.indexToColName = indexToColName; exports.withRangeShape = withRangeShape; exports.toFormulaRange = toFormulaRange; exports.rangeGet = rangeGet; exports.sliceRange = sliceRange; exports.toDate = toDate; exports.parseIsoDate = parseIsoDate; exports.isoDateHasTime = isoDateHasTime; exports.dateToSerial = dateToSerial; exports.serialToDate = serialToDate; exports.formatIsoDate = formatIsoDate; exports.formatIsoDateTime = formatIsoDateTime; exports.daysBetween = daysBetween; exports.serialFromYmd = serialFromYmd; exports.parseCellInput = parseCellInput; exports.parseNumberText = parseNumberText; exports.formatGeneralFit = formatGeneralFit; exports.builtinNumberFormat = builtinNumberFormat; exports.builtinNumberFormatId = builtinNumberFormatId; exports.MAX_NUMBER_FORMAT_CODE_CHARS = MAX_NUMBER_FORMAT_CODE_CHARS; exports.NumberFormat = NumberFormat; exports.clearNumberFormatCache = clearNumberFormatCache; exports.dateValueToSerial = dateValueToSerial; exports.formatNumberFormatValue = formatNumberFormatValue; exports.formatTextFunction = formatTextFunction; exports.numberFormatColorToCss = numberFormatColorToCss;
1895
+ //# sourceMappingURL=chunk-XP5IUZUO.cjs.map