@datalayer/cells 0.0.0-stage → 0.0.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.
Files changed (96) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +55 -2
  3. package/lib/chrome/index.d.ts +7 -0
  4. package/lib/chrome/index.d.ts.map +1 -0
  5. package/lib/chrome/index.js +7 -0
  6. package/lib/chrome/index.js.map +1 -0
  7. package/lib/collab/index.d.ts +7 -0
  8. package/lib/collab/index.d.ts.map +1 -0
  9. package/lib/collab/index.js +7 -0
  10. package/lib/collab/index.js.map +1 -0
  11. package/lib/core/axis.d.ts +103 -0
  12. package/lib/core/axis.d.ts.map +1 -0
  13. package/lib/core/axis.js +470 -0
  14. package/lib/core/axis.js.map +1 -0
  15. package/lib/core/cells.d.ts +71 -0
  16. package/lib/core/cells.d.ts.map +1 -0
  17. package/lib/core/cells.js +285 -0
  18. package/lib/core/cells.js.map +1 -0
  19. package/lib/core/commands.d.ts +157 -0
  20. package/lib/core/commands.d.ts.map +1 -0
  21. package/lib/core/commands.js +620 -0
  22. package/lib/core/commands.js.map +1 -0
  23. package/lib/core/format.d.ts +52 -0
  24. package/lib/core/format.d.ts.map +1 -0
  25. package/lib/core/format.js +264 -0
  26. package/lib/core/format.js.map +1 -0
  27. package/lib/core/history.d.ts +42 -0
  28. package/lib/core/history.d.ts.map +1 -0
  29. package/lib/core/history.js +63 -0
  30. package/lib/core/history.js.map +1 -0
  31. package/lib/core/index.d.ts +23 -0
  32. package/lib/core/index.d.ts.map +1 -0
  33. package/lib/core/index.js +28 -0
  34. package/lib/core/index.js.map +1 -0
  35. package/lib/core/model.d.ts +116 -0
  36. package/lib/core/model.d.ts.map +1 -0
  37. package/lib/core/model.js +330 -0
  38. package/lib/core/model.js.map +1 -0
  39. package/lib/core/patches.d.ts +140 -0
  40. package/lib/core/patches.d.ts.map +1 -0
  41. package/lib/core/patches.js +272 -0
  42. package/lib/core/patches.js.map +1 -0
  43. package/lib/core/reactor.d.ts +24 -0
  44. package/lib/core/reactor.d.ts.map +1 -0
  45. package/lib/core/reactor.js +48 -0
  46. package/lib/core/reactor.js.map +1 -0
  47. package/lib/core/selection.d.ts +81 -0
  48. package/lib/core/selection.d.ts.map +1 -0
  49. package/lib/core/selection.js +175 -0
  50. package/lib/core/selection.js.map +1 -0
  51. package/lib/core/strings.d.ts +19 -0
  52. package/lib/core/strings.d.ts.map +1 -0
  53. package/lib/core/strings.js +61 -0
  54. package/lib/core/strings.js.map +1 -0
  55. package/lib/core/styles.d.ts +48 -0
  56. package/lib/core/styles.d.ts.map +1 -0
  57. package/lib/core/styles.js +102 -0
  58. package/lib/core/styles.js.map +1 -0
  59. package/lib/core/values.d.ts +20 -0
  60. package/lib/core/values.d.ts.map +1 -0
  61. package/lib/core/values.js +39 -0
  62. package/lib/core/values.js.map +1 -0
  63. package/lib/core/workbook.d.ts +59 -0
  64. package/lib/core/workbook.d.ts.map +1 -0
  65. package/lib/core/workbook.js +101 -0
  66. package/lib/core/workbook.js.map +1 -0
  67. package/lib/core/zone.d.ts +48 -0
  68. package/lib/core/zone.d.ts.map +1 -0
  69. package/lib/core/zone.js +89 -0
  70. package/lib/core/zone.js.map +1 -0
  71. package/lib/csv/index.d.ts +7 -0
  72. package/lib/csv/index.d.ts.map +1 -0
  73. package/lib/csv/index.js +7 -0
  74. package/lib/csv/index.js.map +1 -0
  75. package/lib/index.d.ts +8 -0
  76. package/lib/index.d.ts.map +1 -0
  77. package/lib/index.js +13 -0
  78. package/lib/index.js.map +1 -0
  79. package/lib/plugin/index.d.ts +7 -0
  80. package/lib/plugin/index.d.ts.map +1 -0
  81. package/lib/plugin/index.js +7 -0
  82. package/lib/plugin/index.js.map +1 -0
  83. package/lib/points/index.d.ts +154 -0
  84. package/lib/points/index.d.ts.map +1 -0
  85. package/lib/points/index.js +50 -0
  86. package/lib/points/index.js.map +1 -0
  87. package/lib/points/resolve.d.ts +56 -0
  88. package/lib/points/resolve.d.ts.map +1 -0
  89. package/lib/points/resolve.js +106 -0
  90. package/lib/points/resolve.js.map +1 -0
  91. package/lib/xlsx/index.d.ts +7 -0
  92. package/lib/xlsx/index.d.ts.map +1 -0
  93. package/lib/xlsx/index.js +7 -0
  94. package/lib/xlsx/index.js.map +1 -0
  95. package/package.json +116 -4
  96. package/style/cells.css +7 -0
@@ -0,0 +1,620 @@
1
+ /*
2
+ * Copyright (c) 2022-2026 Datalayer, Inc.
3
+ *
4
+ * MIT License
5
+ */
6
+ import { EMPTY_SNAPSHOT, snapshot, snapshotEntries, snapshotOf, } from './patches.js';
7
+ import { checkStyle } from './styles.js';
8
+ import { isCellError } from './values.js';
9
+ import { zoneContains, zonesOverlap } from './zone.js';
10
+ export const OK = { ok: true };
11
+ export function refuse(reason, message) {
12
+ return { ok: false, refusals: [{ reason, message }] };
13
+ }
14
+ /**
15
+ * What typing `text` into a cell means: a formula for `=…`, a number, a
16
+ * boolean (`TRUE`, `FALSE`), else the text itself. A leading `'` forces text.
17
+ */
18
+ export function parseInput(text) {
19
+ if (text.startsWith("'"))
20
+ return text.slice(1);
21
+ if (text.startsWith('=') && text.length > 1)
22
+ return { formula: text.slice(1) };
23
+ const trimmed = text.trim();
24
+ if (trimmed !== '' && /^[+-]?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?$/.test(trimmed))
25
+ return Number(trimmed);
26
+ if (/^true$/i.test(trimmed))
27
+ return true;
28
+ if (/^false$/i.test(trimmed))
29
+ return false;
30
+ return text === '' ? null : text;
31
+ }
32
+ // ------------------------------------------------------------------ helpers
33
+ function sheetOrRefusal(wb, id) {
34
+ return wb.hasSheet(id) ? wb.sheet(id) : refuse('UnknownSheet', `No sheet '${id}'.`);
35
+ }
36
+ const isResult = (x) => typeof x === 'object' &&
37
+ x !== null &&
38
+ 'ok' in x &&
39
+ typeof x.ok === 'boolean';
40
+ function zoneInSheet(sheet, z) {
41
+ const ints = [z.top, z.left, z.bottom, z.right].every(Number.isInteger);
42
+ if (!ints || z.top < 0 || z.left < 0 || z.top > z.bottom || z.left > z.right) {
43
+ return refuse('InvalidArgument', `The zone ${JSON.stringify(z)} is not a zone.`);
44
+ }
45
+ if (z.bottom >= sheet.rows.count || z.right >= sheet.cols.count) {
46
+ return refuse('OutOfBounds', `The zone reaches past the sheet's ${sheet.rows.count} rows or ${sheet.cols.count} columns.`);
47
+ }
48
+ return OK;
49
+ }
50
+ function spanInAxis(sheet, axis, at, n) {
51
+ const count = axis === 'rows' ? sheet.rows.count : sheet.cols.count;
52
+ if (!Number.isInteger(at) || !Number.isInteger(n) || n < 1 || at < 0) {
53
+ return refuse('InvalidArgument', `${n} ${axis} at ${at} is not a span.`);
54
+ }
55
+ if (at + n > count)
56
+ return refuse('OutOfBounds', `${n} ${axis} at ${at} reach past the sheet's ${count}.`);
57
+ return OK;
58
+ }
59
+ function all(...results) {
60
+ const refusals = results.flatMap((r) => (r.ok ? [] : r.refusals));
61
+ return refusals.length === 0 ? OK : { ok: false, refusals };
62
+ }
63
+ function contentOf(wb, input, previous) {
64
+ if (input === null || typeof input !== 'object' || isCellError(input)) {
65
+ return { value: input, style: previous?.style ?? 0 };
66
+ }
67
+ const style = input.style === undefined
68
+ ? (previous?.style ?? 0)
69
+ : input.style === null
70
+ ? 0
71
+ : wb.styles.intern(input.style);
72
+ if (input.formula !== undefined) {
73
+ if (input.value !== undefined && input.value !== null) {
74
+ // A cached value travels with a formula only through loading and paste.
75
+ return { value: input.value, formula: input.formula, style };
76
+ }
77
+ return { value: null, formula: input.formula, style };
78
+ }
79
+ return { value: input.value ?? null, style };
80
+ }
81
+ function checkInput(input) {
82
+ if (input === null || typeof input === 'string' || typeof input === 'boolean')
83
+ return undefined;
84
+ if (typeof input === 'number')
85
+ return Number.isFinite(input) ? undefined : `${input} is not a cell value`;
86
+ if (isCellError(input))
87
+ return undefined;
88
+ if (typeof input !== 'object')
89
+ return `${String(input)} is not a cell input`;
90
+ if (input.formula !== undefined && (typeof input.formula !== 'string' || input.formula === '')) {
91
+ return 'a formula is a non-empty string, without the =';
92
+ }
93
+ if (input.style !== undefined && input.style !== null) {
94
+ try {
95
+ checkStyle(input.style);
96
+ }
97
+ catch (error) {
98
+ return error.message;
99
+ }
100
+ }
101
+ const v = input.value;
102
+ if (v !== undefined && v !== null && typeof v === 'number' && !Number.isFinite(v))
103
+ return `${v} is not a cell value`;
104
+ return undefined;
105
+ }
106
+ /** A cells patch writing `contents` (by position) over `zone`, from the current state. */
107
+ export function cellsPatch(sheet, zone, contents) {
108
+ const before = snapshot(sheet, zone);
109
+ const after = new Map();
110
+ for (const e of snapshotEntries(before))
111
+ after.set(`${e[0]},${e[1]}`, e);
112
+ for (const [row, col, c] of contents) {
113
+ const key = `${row},${col}`;
114
+ if (c === null || (c.value === null && c.formula === undefined && c.style === 0))
115
+ after.delete(key);
116
+ else
117
+ after.set(key, [row, col, c]);
118
+ }
119
+ return { op: 'cells', sheet: sheet.id, zone, before, after: snapshotOf([...after.values()]) };
120
+ }
121
+ function mergedStyle(wb, current, style) {
122
+ if (style === null)
123
+ return 0;
124
+ return wb.styles.intern({ ...wb.styles.get(current), ...style });
125
+ }
126
+ function sizesPatch(sheet, axis, at, n, change) {
127
+ const a = axis === 'rows' ? sheet.rows : sheet.cols;
128
+ const before = { sizes: new Float64Array(n), hidden: new Uint8Array(n) };
129
+ const after = { sizes: new Float64Array(n), hidden: new Uint8Array(n) };
130
+ for (let k = 0; k < n; k += 1) {
131
+ const size = a.sizeOf(at + k);
132
+ const hidden = a.isHidden(at + k);
133
+ before.sizes[k] = size;
134
+ before.hidden[k] = hidden ? 1 : 0;
135
+ const [s, h] = change(k, size, hidden);
136
+ after.sizes[k] = s;
137
+ after.hidden[k] = h ? 1 : 0;
138
+ }
139
+ return { op: 'axis-sizes', sheet: sheet.id, axis, at, n, before, after };
140
+ }
141
+ /** Merges after an axis edit: shifted, shrunk, or dropped when they vanish or become one cell. */
142
+ function mergesAfterAxis(merges, axis, at, n, count) {
143
+ const out = [];
144
+ for (const m of merges) {
145
+ const lo = axis === 'rows' ? m.top : m.left;
146
+ const hi = axis === 'rows' ? m.bottom : m.right;
147
+ let nlo = lo;
148
+ let nhi = hi;
149
+ if (n > 0) {
150
+ if (lo >= at)
151
+ nlo += n;
152
+ if (hi >= at)
153
+ nhi += n;
154
+ if (nhi >= count)
155
+ continue;
156
+ }
157
+ else {
158
+ const d = -n;
159
+ const end = at + d;
160
+ const shift = (i) => (i >= end ? i - d : i >= at ? at : i);
161
+ nlo = shift(lo);
162
+ nhi = hi >= end ? hi - d : hi >= at ? at - 1 : hi;
163
+ if (nhi < nlo)
164
+ continue;
165
+ }
166
+ const z = axis === 'rows' ? { ...m, top: nlo, bottom: nhi } : { ...m, left: nlo, right: nhi };
167
+ if (z.top === z.bottom && z.left === z.right)
168
+ continue;
169
+ out.push(z);
170
+ }
171
+ return out;
172
+ }
173
+ const sameMerges = (a, b) => JSON.stringify(a) === JSON.stringify(b);
174
+ // ------------------------------------------------------------------ handlers
175
+ const setCells = {
176
+ type: 'SET_CELLS',
177
+ allow({ workbook }, c) {
178
+ const sheet = sheetOrRefusal(workbook, c.sheet);
179
+ if (isResult(sheet))
180
+ return sheet;
181
+ if (!Array.isArray(c.cells) ||
182
+ c.cells.length === 0 ||
183
+ !c.cells.every((r) => Array.isArray(r))) {
184
+ return refuse('InvalidArgument', 'SET_CELLS takes a non-empty block of rows.');
185
+ }
186
+ const width = Math.max(...c.cells.map((r) => r.length));
187
+ if (width === 0)
188
+ return refuse('InvalidArgument', 'SET_CELLS takes at least one cell.');
189
+ for (const row of c.cells) {
190
+ for (const input of row) {
191
+ const wrong = checkInput(input);
192
+ if (wrong)
193
+ return refuse('InvalidArgument', `SET_CELLS: ${wrong}.`);
194
+ }
195
+ }
196
+ return zoneInSheet(sheet, {
197
+ top: c.at.row,
198
+ left: c.at.col,
199
+ bottom: c.at.row + c.cells.length - 1,
200
+ right: c.at.col + width - 1,
201
+ });
202
+ },
203
+ apply({ workbook }, c) {
204
+ const sheet = workbook.sheet(c.sheet);
205
+ const width = Math.max(...c.cells.map((r) => r.length));
206
+ const zone = {
207
+ top: c.at.row,
208
+ left: c.at.col,
209
+ bottom: c.at.row + c.cells.length - 1,
210
+ right: c.at.col + width - 1,
211
+ };
212
+ const contents = [];
213
+ c.cells.forEach((cells, dr) => cells.forEach((input, dc) => {
214
+ const row = c.at.row + dr;
215
+ const col = c.at.col + dc;
216
+ contents.push([row, col, contentOf(workbook, input, sheet.cells.get(row, col))]);
217
+ }));
218
+ return [cellsPatch(sheet, zone, contents)];
219
+ },
220
+ };
221
+ const setStyle = {
222
+ type: 'SET_STYLE',
223
+ allow({ workbook }, c) {
224
+ const sheet = sheetOrRefusal(workbook, c.sheet);
225
+ if (isResult(sheet))
226
+ return sheet;
227
+ if (c.style !== null) {
228
+ try {
229
+ checkStyle(c.style);
230
+ }
231
+ catch (error) {
232
+ return refuse('InvalidArgument', error.message);
233
+ }
234
+ }
235
+ return zoneInSheet(sheet, c.zone);
236
+ },
237
+ apply({ workbook }, c) {
238
+ const sheet = workbook.sheet(c.sheet);
239
+ const contents = [];
240
+ const { top, left, bottom, right } = c.zone;
241
+ const cellCount = (bottom - top + 1) * (right - left + 1);
242
+ if (cellCount > 1_000_000) {
243
+ // Whole columns or rows: style the populated cells only (row and column styles come later).
244
+ for (const [row, col, content] of sheet.cells.entries(c.zone)) {
245
+ contents.push([
246
+ row,
247
+ col,
248
+ { ...content, style: mergedStyle(workbook, content.style, c.style) },
249
+ ]);
250
+ }
251
+ }
252
+ else {
253
+ for (let row = top; row <= bottom; row += 1) {
254
+ for (let col = left; col <= right; col += 1) {
255
+ const content = sheet.cells.get(row, col) ?? { value: null, style: 0 };
256
+ contents.push([
257
+ row,
258
+ col,
259
+ { ...content, style: mergedStyle(workbook, content.style, c.style) },
260
+ ]);
261
+ }
262
+ }
263
+ }
264
+ return [cellsPatch(sheet, c.zone, contents)];
265
+ },
266
+ };
267
+ const clear = {
268
+ type: 'CLEAR',
269
+ allow({ workbook }, c) {
270
+ const sheet = sheetOrRefusal(workbook, c.sheet);
271
+ if (isResult(sheet))
272
+ return sheet;
273
+ if (c.what !== undefined && !['all', 'contents', 'styles'].includes(c.what)) {
274
+ return refuse('InvalidArgument', `CLEAR clears all, contents or styles, not '${c.what}'.`);
275
+ }
276
+ return zoneInSheet(sheet, c.zone);
277
+ },
278
+ apply({ workbook }, c) {
279
+ const sheet = workbook.sheet(c.sheet);
280
+ const what = c.what ?? 'all';
281
+ const contents = [];
282
+ for (const [row, col, content] of sheet.cells.entries(c.zone)) {
283
+ if (what === 'all')
284
+ contents.push([row, col, null]);
285
+ else if (what === 'contents')
286
+ contents.push([row, col, { value: null, style: content.style }]);
287
+ else
288
+ contents.push([row, col, { ...content, style: 0 }]);
289
+ }
290
+ return [cellsPatch(sheet, c.zone, contents)];
291
+ },
292
+ };
293
+ const insertAxis = {
294
+ type: 'INSERT_AXIS',
295
+ allow({ workbook }, c) {
296
+ const sheet = sheetOrRefusal(workbook, c.sheet);
297
+ if (isResult(sheet))
298
+ return sheet;
299
+ if (c.axis !== 'rows' && c.axis !== 'cols')
300
+ return refuse('InvalidArgument', `No axis '${String(c.axis)}'.`);
301
+ const span = spanInAxis(sheet, c.axis, c.at, c.n);
302
+ if (!span.ok)
303
+ return span;
304
+ const count = c.axis === 'rows' ? sheet.rows.count : sheet.cols.count;
305
+ const tail = c.axis === 'rows'
306
+ ? { top: count - c.n, left: 0, bottom: count - 1, right: sheet.cols.count - 1 }
307
+ : { top: 0, left: count - c.n, bottom: sheet.rows.count - 1, right: count - 1 };
308
+ if (!sheet.cells.isEmpty(tail) || sheet.mergesIn(tail).length > 0) {
309
+ return refuse('NotEmptyAtEnd', `Inserting ${c.n} ${c.axis} would push content off the end of the sheet.`);
310
+ }
311
+ return OK;
312
+ },
313
+ apply({ workbook }, c) {
314
+ const sheet = workbook.sheet(c.sheet);
315
+ const axis = c.axis === 'rows' ? sheet.rows : sheet.cols;
316
+ const count = axis.count;
317
+ const tail = axis.segment(count - c.n, c.n);
318
+ const patch = {
319
+ op: 'axis-insert',
320
+ sheet: sheet.id,
321
+ axis: c.axis,
322
+ at: c.at,
323
+ n: c.n,
324
+ inserted: { ids: axis.freshIds(c.n), sizes: null, hidden: null },
325
+ dropped: tail,
326
+ };
327
+ const merges = mergesAfterAxis(sheet.merges, c.axis, c.at, c.n, count);
328
+ const out = [patch];
329
+ if (!sameMerges(merges, sheet.merges))
330
+ out.push({ op: 'merges', sheet: sheet.id, before: sheet.merges, after: merges });
331
+ return out;
332
+ },
333
+ };
334
+ const deleteAxis = {
335
+ type: 'DELETE_AXIS',
336
+ allow({ workbook }, c) {
337
+ const sheet = sheetOrRefusal(workbook, c.sheet);
338
+ if (isResult(sheet))
339
+ return sheet;
340
+ if (c.axis !== 'rows' && c.axis !== 'cols')
341
+ return refuse('InvalidArgument', `No axis '${String(c.axis)}'.`);
342
+ return spanInAxis(sheet, c.axis, c.at, c.n);
343
+ },
344
+ apply({ workbook }, c) {
345
+ const sheet = workbook.sheet(c.sheet);
346
+ const axis = c.axis === 'rows' ? sheet.rows : sheet.cols;
347
+ const zone = c.axis === 'rows'
348
+ ? { top: c.at, left: 0, bottom: c.at + c.n - 1, right: sheet.cols.count - 1 }
349
+ : { top: 0, left: c.at, bottom: sheet.rows.count - 1, right: c.at + c.n - 1 };
350
+ const out = [];
351
+ const before = snapshot(sheet, zone);
352
+ if (before.rows.length > 0)
353
+ out.push({ op: 'cells', sheet: sheet.id, zone, before, after: EMPTY_SNAPSHOT });
354
+ const merges = mergesAfterAxis(sheet.merges, c.axis, c.at, -c.n, axis.count);
355
+ if (!sameMerges(merges, sheet.merges))
356
+ out.push({ op: 'merges', sheet: sheet.id, before: sheet.merges, after: merges });
357
+ out.push({
358
+ op: 'axis-delete',
359
+ sheet: sheet.id,
360
+ axis: c.axis,
361
+ at: c.at,
362
+ n: c.n,
363
+ removed: axis.segment(c.at, c.n),
364
+ });
365
+ return out;
366
+ },
367
+ };
368
+ const moveAxis = {
369
+ type: 'MOVE_AXIS',
370
+ allow({ workbook }, c) {
371
+ const sheet = sheetOrRefusal(workbook, c.sheet);
372
+ if (isResult(sheet))
373
+ return sheet;
374
+ const span = spanInAxis(sheet, c.axis, c.at, c.n);
375
+ if (!span.ok)
376
+ return span;
377
+ const count = c.axis === 'rows' ? sheet.rows.count : sheet.cols.count;
378
+ if (!Number.isInteger(c.to) ||
379
+ c.to < 0 ||
380
+ c.to > count ||
381
+ (c.to >= c.at && c.to <= c.at + c.n)) {
382
+ return refuse('InvalidArgument', `Cannot move ${c.n} ${c.axis} at ${c.at} to ${c.to}.`);
383
+ }
384
+ const lo = Math.min(c.at, c.to);
385
+ const hi = Math.max(c.at + c.n, c.to) - 1;
386
+ const zone = c.axis === 'rows'
387
+ ? { top: lo, left: 0, bottom: hi, right: sheet.cols.count - 1 }
388
+ : { top: 0, left: lo, bottom: sheet.rows.count - 1, right: hi };
389
+ if (sheet.mergesIn(zone).length > 0)
390
+ return refuse('MergeOverlap', 'Moving across merged cells is not supported yet; unmerge first.');
391
+ return OK;
392
+ },
393
+ apply({ workbook }, c) {
394
+ const sheet = workbook.sheet(c.sheet);
395
+ const lo = Math.min(c.at, c.to);
396
+ const hi = Math.max(c.at + c.n, c.to) - 1;
397
+ const zone = c.axis === 'rows'
398
+ ? { top: lo, left: 0, bottom: hi, right: sheet.cols.count - 1 }
399
+ : { top: 0, left: lo, bottom: sheet.rows.count - 1, right: hi };
400
+ const map = (i) => {
401
+ if (i >= c.at && i < c.at + c.n)
402
+ return c.to < c.at ? c.to + (i - c.at) : c.to - c.n + (i - c.at);
403
+ if (c.to < c.at && i >= c.to && i < c.at)
404
+ return i + c.n;
405
+ if (c.to > c.at && i >= c.at + c.n && i < c.to)
406
+ return i - c.n;
407
+ return i;
408
+ };
409
+ const before = snapshot(sheet, zone);
410
+ const moved = snapshotEntries(before).map(([row, col, content]) => c.axis === 'rows' ? [map(row), col, content] : [row, map(col), content]);
411
+ return [
412
+ { op: 'cells', sheet: sheet.id, zone, before, after: snapshotOf(moved) },
413
+ { op: 'axis-move', sheet: sheet.id, axis: c.axis, at: c.at, n: c.n, to: c.to },
414
+ ];
415
+ },
416
+ };
417
+ const resizeAxis = {
418
+ type: 'RESIZE_AXIS',
419
+ allow({ workbook }, c) {
420
+ const sheet = sheetOrRefusal(workbook, c.sheet);
421
+ if (isResult(sheet))
422
+ return sheet;
423
+ if (!(c.size > 0) || !Number.isFinite(c.size))
424
+ return refuse('InvalidArgument', `A size must be positive; ${c.size} was given.`);
425
+ return spanInAxis(sheet, c.axis, c.from, c.to - c.from + 1);
426
+ },
427
+ apply({ workbook }, c) {
428
+ const sheet = workbook.sheet(c.sheet);
429
+ return [
430
+ sizesPatch(sheet, c.axis, c.from, c.to - c.from + 1, (_k, _s, hidden) => [c.size, hidden]),
431
+ ];
432
+ },
433
+ };
434
+ const hideAxis = {
435
+ type: 'HIDE_AXIS',
436
+ allow({ workbook }, c) {
437
+ const sheet = sheetOrRefusal(workbook, c.sheet);
438
+ if (isResult(sheet))
439
+ return sheet;
440
+ return spanInAxis(sheet, c.axis, c.from, c.to - c.from + 1);
441
+ },
442
+ apply({ workbook }, c) {
443
+ const sheet = workbook.sheet(c.sheet);
444
+ return [sizesPatch(sheet, c.axis, c.from, c.to - c.from + 1, (_k, size) => [size, c.hidden])];
445
+ },
446
+ };
447
+ const merge = {
448
+ type: 'MERGE',
449
+ allow({ workbook }, c) {
450
+ const sheet = sheetOrRefusal(workbook, c.sheet);
451
+ if (isResult(sheet))
452
+ return sheet;
453
+ const inSheet = zoneInSheet(sheet, c.zone);
454
+ if (!inSheet.ok)
455
+ return inSheet;
456
+ if (c.zone.top === c.zone.bottom && c.zone.left === c.zone.right) {
457
+ return refuse('InvalidArgument', 'A merge spans more than one cell.');
458
+ }
459
+ const overlapping = sheet.mergesIn(c.zone);
460
+ if (overlapping.length > 0)
461
+ return refuse('MergeOverlap', 'The zone overlaps a merge; unmerge it first.');
462
+ return OK;
463
+ },
464
+ apply({ workbook }, c) {
465
+ const sheet = workbook.sheet(c.sheet);
466
+ // As Excel: the top-left cell's content stays, the others are cleared.
467
+ const contents = [];
468
+ for (const [row, col] of sheet.cells.entries(c.zone)) {
469
+ if (row !== c.zone.top || col !== c.zone.left)
470
+ contents.push([row, col, null]);
471
+ }
472
+ const out = [];
473
+ if (contents.length > 0)
474
+ out.push(cellsPatch(sheet, c.zone, contents));
475
+ out.push({
476
+ op: 'merges',
477
+ sheet: sheet.id,
478
+ before: sheet.merges,
479
+ after: [...sheet.merges, c.zone],
480
+ });
481
+ return out;
482
+ },
483
+ };
484
+ const unmerge = {
485
+ type: 'UNMERGE',
486
+ allow({ workbook }, c) {
487
+ const sheet = sheetOrRefusal(workbook, c.sheet);
488
+ if (isResult(sheet))
489
+ return sheet;
490
+ const inSheet = zoneInSheet(sheet, c.zone);
491
+ if (!inSheet.ok)
492
+ return inSheet;
493
+ return sheet.mergesIn(c.zone).length === 0 ? refuse('NoMerge', 'Nothing is merged there.') : OK;
494
+ },
495
+ apply({ workbook }, c) {
496
+ const sheet = workbook.sheet(c.sheet);
497
+ const after = sheet.merges.filter((m) => !zonesOverlap(m, c.zone));
498
+ return [{ op: 'merges', sheet: sheet.id, before: sheet.merges, after }];
499
+ },
500
+ };
501
+ function checkName(wb, name, except) {
502
+ if (typeof name !== 'string' ||
503
+ name.trim() === '' ||
504
+ name.length > 31 ||
505
+ /[\\/?*[\]:]/.test(name) ||
506
+ /^'|'$/.test(name)) {
507
+ return refuse('InvalidSheetName', `'${String(name)}' is not a sheet name: 1 to 31 characters, none of \\ / ? * [ ] :, no leading or trailing '.`);
508
+ }
509
+ const other = wb.sheetByName(name);
510
+ if (other !== undefined && other.id !== except)
511
+ return refuse('DuplicateSheetName', `A sheet is called '${name}' already.`);
512
+ return OK;
513
+ }
514
+ const addSheet = {
515
+ type: 'ADD_SHEET',
516
+ allow({ workbook }, c) {
517
+ if (c.at !== undefined &&
518
+ (!Number.isInteger(c.at) || c.at < 0 || c.at > workbook.sheets.length)) {
519
+ return refuse('OutOfBounds', `No tab position ${c.at}.`);
520
+ }
521
+ if (c.id !== undefined && workbook.hasSheet(c.id))
522
+ return refuse('InvalidArgument', `A sheet has the id '${c.id}' already.`);
523
+ return c.name === undefined ? OK : checkName(workbook, c.name);
524
+ },
525
+ apply({ workbook }, c) {
526
+ const sheet = workbook.createSheet(c.name ?? workbook.freshSheetName(), c.id);
527
+ return [{ op: 'sheet-add', index: c.at ?? workbook.sheets.length, sheet }];
528
+ },
529
+ };
530
+ const deleteSheet = {
531
+ type: 'DELETE_SHEET',
532
+ allow({ workbook }, c) {
533
+ const sheet = sheetOrRefusal(workbook, c.sheet);
534
+ if (isResult(sheet))
535
+ return sheet;
536
+ return workbook.sheets.length === 1
537
+ ? refuse('LastSheet', 'A workbook keeps at least one sheet.')
538
+ : OK;
539
+ },
540
+ apply({ workbook }, c) {
541
+ const sheet = workbook.sheet(c.sheet);
542
+ return [{ op: 'sheet-delete', index: workbook.sheets.indexOf(sheet), sheet }];
543
+ },
544
+ };
545
+ const renameSheet = {
546
+ type: 'RENAME_SHEET',
547
+ allow({ workbook }, c) {
548
+ const sheet = sheetOrRefusal(workbook, c.sheet);
549
+ if (isResult(sheet))
550
+ return sheet;
551
+ return checkName(workbook, c.name, c.sheet);
552
+ },
553
+ apply({ workbook }, c) {
554
+ const sheet = workbook.sheet(c.sheet);
555
+ return [{ op: 'sheet-rename', sheet: sheet.id, before: sheet.name, after: c.name }];
556
+ },
557
+ };
558
+ const moveSheet = {
559
+ type: 'MOVE_SHEET',
560
+ allow({ workbook }, c) {
561
+ const sheet = sheetOrRefusal(workbook, c.sheet);
562
+ if (isResult(sheet))
563
+ return sheet;
564
+ if (!Number.isInteger(c.to) || c.to < 0 || c.to >= workbook.sheets.length)
565
+ return refuse('OutOfBounds', `No tab position ${c.to}.`);
566
+ return OK;
567
+ },
568
+ apply({ workbook }, c) {
569
+ const from = workbook.sheets.indexOf(workbook.sheet(c.sheet));
570
+ return from === c.to ? [] : [{ op: 'sheet-move', from, to: c.to }];
571
+ },
572
+ };
573
+ const freeze = {
574
+ type: 'FREEZE',
575
+ allow({ workbook }, c) {
576
+ const sheet = sheetOrRefusal(workbook, c.sheet);
577
+ if (isResult(sheet))
578
+ return sheet;
579
+ const ok = (n, max) => Number.isInteger(n) && n >= 0 && n < max;
580
+ if (!ok(c.rows, sheet.rows.count) || !ok(c.cols, sheet.cols.count)) {
581
+ return refuse('OutOfBounds', `Cannot freeze ${c.rows} rows and ${c.cols} columns.`);
582
+ }
583
+ const frozenZone = (m) => (c.rows > 0 && m.top < c.rows && m.bottom >= c.rows) ||
584
+ (c.cols > 0 && m.left < c.cols && m.right >= c.cols);
585
+ if (sheet.merges.some(frozenZone))
586
+ return refuse('MergeOverlap', 'A merge crosses the frozen edge.');
587
+ return OK;
588
+ },
589
+ apply({ workbook }, c) {
590
+ const sheet = workbook.sheet(c.sheet);
591
+ return [
592
+ {
593
+ op: 'frozen',
594
+ sheet: sheet.id,
595
+ before: sheet.frozen,
596
+ after: { rows: c.rows, cols: c.cols },
597
+ },
598
+ ];
599
+ },
600
+ };
601
+ /** The core command handlers, contributed by `CellsCorePlugin`. */
602
+ export const CORE_COMMANDS = [
603
+ setCells,
604
+ setStyle,
605
+ clear,
606
+ insertAxis,
607
+ deleteAxis,
608
+ moveAxis,
609
+ resizeAxis,
610
+ hideAxis,
611
+ merge,
612
+ unmerge,
613
+ addSheet,
614
+ deleteSheet,
615
+ renameSheet,
616
+ moveSheet,
617
+ freeze,
618
+ ];
619
+ export { all as allResults, zoneContains };
620
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/core/commands.ts"],"names":[],"mappings":"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"}