@rowsncolumns/rnc-engine 0.10.132

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 (37) hide show
  1. package/LICENSE.md +100 -0
  2. package/README.md +83 -0
  3. package/dist/esm/command-handlers.d.ts +169 -0
  4. package/dist/esm/command-handlers.d.ts.map +1 -0
  5. package/dist/esm/command-handlers.js +404 -0
  6. package/dist/esm/fold.d.ts +140 -0
  7. package/dist/esm/fold.d.ts.map +1 -0
  8. package/dist/esm/fold.js +539 -0
  9. package/dist/esm/index.d.ts +620 -0
  10. package/dist/esm/index.d.ts.map +1 -0
  11. package/dist/esm/index.js +425 -0
  12. package/dist/esm/io.d.ts +119 -0
  13. package/dist/esm/io.d.ts.map +1 -0
  14. package/dist/esm/io.js +318 -0
  15. package/dist/esm/keys.d.ts +20 -0
  16. package/dist/esm/keys.d.ts.map +1 -0
  17. package/dist/esm/keys.js +41 -0
  18. package/dist/esm/move-rescope.d.ts +18 -0
  19. package/dist/esm/move-rescope.d.ts.map +1 -0
  20. package/dist/esm/move-rescope.js +38 -0
  21. package/dist/esm/use-engine-core.d.ts +293 -0
  22. package/dist/esm/use-engine-core.d.ts.map +1 -0
  23. package/dist/esm/use-engine-core.js +2279 -0
  24. package/dist/esm/use-engine-pivot-editor.d.ts +78 -0
  25. package/dist/esm/use-engine-pivot-editor.d.ts.map +1 -0
  26. package/dist/esm/use-engine-pivot-editor.js +252 -0
  27. package/dist/esm/use-spreadsheet-engine.d.ts +7 -0
  28. package/dist/esm/use-spreadsheet-engine.d.ts.map +1 -0
  29. package/dist/esm/use-spreadsheet-engine.js +23 -0
  30. package/dist/esm/use-spreadsheet-ui.d.ts +39 -0
  31. package/dist/esm/use-spreadsheet-ui.d.ts.map +1 -0
  32. package/dist/esm/use-spreadsheet-ui.js +78 -0
  33. package/dist/esm/wasm/rnc_wasm.d.ts +394 -0
  34. package/dist/esm/wasm/rnc_wasm.js +1455 -0
  35. package/dist/esm/wasm/rnc_wasm_bg.wasm +0 -0
  36. package/dist/esm/wasm/rnc_wasm_bg.wasm.d.ts +81 -0
  37. package/package.json +51 -0
@@ -0,0 +1,1455 @@
1
+ /* @ts-self-types="./rnc_wasm.d.ts" */
2
+
3
+ /**
4
+ * A collaborative spreadsheet engine backed by a Yjs CRDT document.
5
+ *
6
+ * Same command / read surface as `SpreadsheetEngine`, plus sync methods for exchanging Yrs
7
+ * updates between peers.
8
+ */
9
+ export class CollabSpreadsheetEngine {
10
+ static __wrap(ptr) {
11
+ const obj = Object.create(CollabSpreadsheetEngine.prototype);
12
+ obj.__wbg_ptr = ptr;
13
+ CollabSpreadsheetEngineFinalization.register(obj, obj.__wbg_ptr, obj);
14
+ return obj;
15
+ }
16
+ __destroy_into_raw() {
17
+ const ptr = this.__wbg_ptr;
18
+ this.__wbg_ptr = 0;
19
+ CollabSpreadsheetEngineFinalization.unregister(this);
20
+ return ptr;
21
+ }
22
+ free() {
23
+ const ptr = this.__destroy_into_raw();
24
+ wasm.__wbg_collabspreadsheetengine_free(ptr, 0);
25
+ }
26
+ /**
27
+ * @param {number} sheet_id
28
+ * @param {string} name
29
+ */
30
+ addSheet(sheet_id, name) {
31
+ const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
32
+ const len0 = WASM_VECTOR_LEN;
33
+ wasm.collabspreadsheetengine_addSheet(this.__wbg_ptr, sheet_id, ptr0, len0);
34
+ }
35
+ /**
36
+ * @param {string} command_json
37
+ * @returns {string}
38
+ */
39
+ applyCommand(command_json) {
40
+ let deferred3_0;
41
+ let deferred3_1;
42
+ try {
43
+ const ptr0 = passStringToWasm0(command_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
44
+ const len0 = WASM_VECTOR_LEN;
45
+ const ret = wasm.collabspreadsheetengine_applyCommand(this.__wbg_ptr, ptr0, len0);
46
+ var ptr2 = ret[0];
47
+ var len2 = ret[1];
48
+ if (ret[3]) {
49
+ ptr2 = 0; len2 = 0;
50
+ throw takeFromExternrefTable0(ret[2]);
51
+ }
52
+ deferred3_0 = ptr2;
53
+ deferred3_1 = len2;
54
+ return getStringFromWasm0(ptr2, len2);
55
+ } finally {
56
+ wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
57
+ }
58
+ }
59
+ /**
60
+ * Apply a remote Yjs V1 update into this peer's document. After calling this, call
61
+ * `syncRemote()` to rebuild the engine and get a `CommitResult` for the UI.
62
+ * @param {Uint8Array} update
63
+ */
64
+ applyUpdate(update) {
65
+ const ptr0 = passArray8ToWasm0(update, wasm.__wbindgen_malloc);
66
+ const len0 = WASM_VECTOR_LEN;
67
+ const ret = wasm.collabspreadsheetengine_applyUpdate(this.__wbg_ptr, ptr0, len0);
68
+ if (ret[1]) {
69
+ throw takeFromExternrefTable0(ret[0]);
70
+ }
71
+ }
72
+ /**
73
+ * @returns {boolean}
74
+ */
75
+ canRedo() {
76
+ const ret = wasm.collabspreadsheetengine_canRedo(this.__wbg_ptr);
77
+ return ret !== 0;
78
+ }
79
+ /**
80
+ * @returns {boolean}
81
+ */
82
+ canUndo() {
83
+ const ret = wasm.collabspreadsheetengine_canUndo(this.__wbg_ptr);
84
+ return ret !== 0;
85
+ }
86
+ clearHistory() {
87
+ wasm.collabspreadsheetengine_clearHistory(this.__wbg_ptr);
88
+ }
89
+ /**
90
+ * @param {number} sheet_id
91
+ * @param {number} row
92
+ * @param {number} col
93
+ * @returns {string}
94
+ */
95
+ dependents(sheet_id, row, col) {
96
+ let deferred2_0;
97
+ let deferred2_1;
98
+ try {
99
+ const ret = wasm.collabspreadsheetengine_dependents(this.__wbg_ptr, sheet_id, row, col);
100
+ var ptr1 = ret[0];
101
+ var len1 = ret[1];
102
+ if (ret[3]) {
103
+ ptr1 = 0; len1 = 0;
104
+ throw takeFromExternrefTable0(ret[2]);
105
+ }
106
+ deferred2_0 = ptr1;
107
+ deferred2_1 = len1;
108
+ return getStringFromWasm0(ptr1, len1);
109
+ } finally {
110
+ wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
111
+ }
112
+ }
113
+ /**
114
+ * @returns {string}
115
+ */
116
+ documentFacets() {
117
+ let deferred1_0;
118
+ let deferred1_1;
119
+ try {
120
+ const ret = wasm.collabspreadsheetengine_documentFacets(this.__wbg_ptr);
121
+ deferred1_0 = ret[0];
122
+ deferred1_1 = ret[1];
123
+ return getStringFromWasm0(ret[0], ret[1]);
124
+ } finally {
125
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
126
+ }
127
+ }
128
+ /**
129
+ * Encode a diff: everything this peer has that the remote (identified by its state vector)
130
+ * doesn't. Send the result to the remote via `applyUpdate`.
131
+ * @param {Uint8Array} remote_sv
132
+ * @returns {Uint8Array}
133
+ */
134
+ encodeDiffV1(remote_sv) {
135
+ const ptr0 = passArray8ToWasm0(remote_sv, wasm.__wbindgen_malloc);
136
+ const len0 = WASM_VECTOR_LEN;
137
+ const ret = wasm.collabspreadsheetengine_encodeDiffV1(this.__wbg_ptr, ptr0, len0);
138
+ if (ret[3]) {
139
+ throw takeFromExternrefTable0(ret[2]);
140
+ }
141
+ var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
142
+ wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
143
+ return v2;
144
+ }
145
+ /**
146
+ * Encode the full document state as a Yjs V1 update (for persistence or initial sync).
147
+ * @returns {Uint8Array}
148
+ */
149
+ encodeStateAsUpdate() {
150
+ const ret = wasm.collabspreadsheetengine_encodeStateAsUpdate(this.__wbg_ptr);
151
+ var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
152
+ wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
153
+ return v1;
154
+ }
155
+ /**
156
+ * Encode the current state vector (compact summary of what this peer has seen).
157
+ * @returns {Uint8Array}
158
+ */
159
+ encodeStateVector() {
160
+ const ret = wasm.collabspreadsheetengine_encodeStateVector(this.__wbg_ptr);
161
+ var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
162
+ wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
163
+ return v1;
164
+ }
165
+ /**
166
+ * Export a sheet's display values as RFC-4180 CSV.
167
+ * @param {number} sheet_id
168
+ * @returns {string}
169
+ */
170
+ exportCsv(sheet_id) {
171
+ let deferred1_0;
172
+ let deferred1_1;
173
+ try {
174
+ const ret = wasm.collabspreadsheetengine_exportCsv(this.__wbg_ptr, sheet_id);
175
+ deferred1_0 = ret[0];
176
+ deferred1_1 = ret[1];
177
+ return getStringFromWasm0(ret[0], ret[1]);
178
+ } finally {
179
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
180
+ }
181
+ }
182
+ /**
183
+ * Export the whole workbook to in-memory XLSX bytes (a JS `Uint8Array`) via `rnc-export`.
184
+ * @returns {Uint8Array}
185
+ */
186
+ exportXlsx() {
187
+ const ret = wasm.collabspreadsheetengine_exportXlsx(this.__wbg_ptr);
188
+ if (ret[3]) {
189
+ throw takeFromExternrefTable0(ret[2]);
190
+ }
191
+ var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
192
+ wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
193
+ return v1;
194
+ }
195
+ /**
196
+ * Pre-allocate rows and columns for a sheet. YrsStore addresses cells by positional index
197
+ * within CRDT arrays, so the grid dimensions must be established before cells can be written.
198
+ * Call this once per sheet after `addSheet`.
199
+ * @param {number} sheet_id
200
+ * @param {number} rows
201
+ * @param {number} cols
202
+ */
203
+ initGrid(sheet_id, rows, cols) {
204
+ wasm.collabspreadsheetengine_initGrid(this.__wbg_ptr, sheet_id, rows, cols);
205
+ }
206
+ /**
207
+ * @param {string} document_json
208
+ * @returns {string}
209
+ */
210
+ loadDocument(document_json) {
211
+ let deferred3_0;
212
+ let deferred3_1;
213
+ try {
214
+ const ptr0 = passStringToWasm0(document_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
215
+ const len0 = WASM_VECTOR_LEN;
216
+ const ret = wasm.collabspreadsheetengine_loadDocument(this.__wbg_ptr, ptr0, len0);
217
+ var ptr2 = ret[0];
218
+ var len2 = ret[1];
219
+ if (ret[3]) {
220
+ ptr2 = 0; len2 = 0;
221
+ throw takeFromExternrefTable0(ret[2]);
222
+ }
223
+ deferred3_0 = ptr2;
224
+ deferred3_1 = len2;
225
+ return getStringFromWasm0(ptr2, len2);
226
+ } finally {
227
+ wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
228
+ }
229
+ }
230
+ /**
231
+ * Create a new collaborative engine with a random client ID.
232
+ */
233
+ constructor() {
234
+ const ret = wasm.collabspreadsheetengine_new();
235
+ this.__wbg_ptr = ret;
236
+ CollabSpreadsheetEngineFinalization.register(this, this.__wbg_ptr, this);
237
+ return this;
238
+ }
239
+ /**
240
+ * Create a new collaborative engine with a specific client ID (important when running two
241
+ * instances on the same page — they must have distinct IDs for CRDT correctness).
242
+ * @param {number} client_id
243
+ * @returns {CollabSpreadsheetEngine}
244
+ */
245
+ static newWithClientId(client_id) {
246
+ const ret = wasm.collabspreadsheetengine_newWithClientId(client_id);
247
+ return CollabSpreadsheetEngine.__wrap(ret);
248
+ }
249
+ /**
250
+ * @param {number} sheet_id
251
+ * @param {number} row
252
+ * @param {number} col
253
+ * @returns {string}
254
+ */
255
+ precedents(sheet_id, row, col) {
256
+ let deferred2_0;
257
+ let deferred2_1;
258
+ try {
259
+ const ret = wasm.collabspreadsheetengine_precedents(this.__wbg_ptr, sheet_id, row, col);
260
+ var ptr1 = ret[0];
261
+ var len1 = ret[1];
262
+ if (ret[3]) {
263
+ ptr1 = 0; len1 = 0;
264
+ throw takeFromExternrefTable0(ret[2]);
265
+ }
266
+ deferred2_0 = ptr1;
267
+ deferred2_1 = len1;
268
+ return getStringFromWasm0(ptr1, len1);
269
+ } finally {
270
+ wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
271
+ }
272
+ }
273
+ /**
274
+ * Selection statistics over a 1-indexed inclusive range, computed in Rust; returns `RangeStats`
275
+ * JSON (`{ sum, count, average, min, max, numericalCount }`). See `SpreadsheetEngine::rangeStats`.
276
+ * @param {number} sheet_id
277
+ * @param {number} start_row
278
+ * @param {number} start_col
279
+ * @param {number} end_row
280
+ * @param {number} end_col
281
+ * @returns {string}
282
+ */
283
+ rangeStats(sheet_id, start_row, start_col, end_row, end_col) {
284
+ let deferred2_0;
285
+ let deferred2_1;
286
+ try {
287
+ const ret = wasm.collabspreadsheetengine_rangeStats(this.__wbg_ptr, sheet_id, start_row, start_col, end_row, end_col);
288
+ var ptr1 = ret[0];
289
+ var len1 = ret[1];
290
+ if (ret[3]) {
291
+ ptr1 = 0; len1 = 0;
292
+ throw takeFromExternrefTable0(ret[2]);
293
+ }
294
+ deferred2_0 = ptr1;
295
+ deferred2_1 = len1;
296
+ return getStringFromWasm0(ptr1, len1);
297
+ } finally {
298
+ wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
299
+ }
300
+ }
301
+ /**
302
+ * @param {number} sheet_id
303
+ * @param {number} start_row
304
+ * @param {number} start_col
305
+ * @param {number} end_row
306
+ * @param {number} end_col
307
+ * @returns {string}
308
+ */
309
+ readWindow(sheet_id, start_row, start_col, end_row, end_col) {
310
+ let deferred2_0;
311
+ let deferred2_1;
312
+ try {
313
+ const ret = wasm.collabspreadsheetengine_readWindow(this.__wbg_ptr, sheet_id, start_row, start_col, end_row, end_col);
314
+ var ptr1 = ret[0];
315
+ var len1 = ret[1];
316
+ if (ret[3]) {
317
+ ptr1 = 0; len1 = 0;
318
+ throw takeFromExternrefTable0(ret[2]);
319
+ }
320
+ deferred2_0 = ptr1;
321
+ deferred2_1 = len1;
322
+ return getStringFromWasm0(ptr1, len1);
323
+ } finally {
324
+ wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
325
+ }
326
+ }
327
+ /**
328
+ * @returns {string}
329
+ */
330
+ redo() {
331
+ let deferred2_0;
332
+ let deferred2_1;
333
+ try {
334
+ const ret = wasm.collabspreadsheetengine_redo(this.__wbg_ptr);
335
+ var ptr1 = ret[0];
336
+ var len1 = ret[1];
337
+ if (ret[3]) {
338
+ ptr1 = 0; len1 = 0;
339
+ throw takeFromExternrefTable0(ret[2]);
340
+ }
341
+ deferred2_0 = ptr1;
342
+ deferred2_1 = len1;
343
+ return getStringFromWasm0(ptr1, len1);
344
+ } finally {
345
+ wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
346
+ }
347
+ }
348
+ /**
349
+ * @returns {number}
350
+ */
351
+ redoDepth() {
352
+ const ret = wasm.collabspreadsheetengine_redoDepth(this.__wbg_ptr);
353
+ return ret >>> 0;
354
+ }
355
+ /**
356
+ * @param {string} name
357
+ */
358
+ registerCustomFunction(name) {
359
+ const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
360
+ const len0 = WASM_VECTOR_LEN;
361
+ wasm.collabspreadsheetengine_registerCustomFunction(this.__wbg_ptr, ptr0, len0);
362
+ }
363
+ /**
364
+ * See [`SpreadsheetEngine::set_windowed`](super::SpreadsheetEngine). When on, commits serialized
365
+ * by this engine omit the per-cell channels the windowed host re-reads from the window. Idempotent.
366
+ * @param {boolean} on
367
+ */
368
+ setWindowed(on) {
369
+ wasm.collabspreadsheetengine_setWindowed(this.__wbg_ptr, on);
370
+ }
371
+ /**
372
+ * Per-sheet used extent as JSON `[[sheetId, rowCount, colCount], …]` (nav + windowing bounds).
373
+ * @returns {string}
374
+ */
375
+ sheetExtents() {
376
+ let deferred2_0;
377
+ let deferred2_1;
378
+ try {
379
+ const ret = wasm.collabspreadsheetengine_sheetExtents(this.__wbg_ptr);
380
+ var ptr1 = ret[0];
381
+ var len1 = ret[1];
382
+ if (ret[3]) {
383
+ ptr1 = 0; len1 = 0;
384
+ throw takeFromExternrefTable0(ret[2]);
385
+ }
386
+ deferred2_0 = ptr1;
387
+ deferred2_1 = len1;
388
+ return getStringFromWasm0(ptr1, len1);
389
+ } finally {
390
+ wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
391
+ }
392
+ }
393
+ /**
394
+ * @returns {Int32Array}
395
+ */
396
+ sheetIds() {
397
+ const ret = wasm.collabspreadsheetengine_sheetIds(this.__wbg_ptr);
398
+ var v1 = getArrayI32FromWasm0(ret[0], ret[1]).slice();
399
+ wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
400
+ return v1;
401
+ }
402
+ /**
403
+ * The workbook's sheets in tab order as JSON `[{sheetId, title, index, hidden?, tabColor?}]` —
404
+ * the engine's authoritative sheet identity/order. A thin UI reconciles its tab list from this.
405
+ * @returns {string}
406
+ */
407
+ sheets() {
408
+ let deferred1_0;
409
+ let deferred1_1;
410
+ try {
411
+ const ret = wasm.collabspreadsheetengine_sheets(this.__wbg_ptr);
412
+ deferred1_0 = ret[0];
413
+ deferred1_1 = ret[1];
414
+ return getStringFromWasm0(ret[0], ret[1]);
415
+ } finally {
416
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
417
+ }
418
+ }
419
+ /**
420
+ * Begin a streaming NDJSON hydration (huge workbooks). Feed chunks with `streamWrite`, then
421
+ * `streamEnd`. Read the viewport with `readWindow` afterward.
422
+ */
423
+ streamBegin() {
424
+ wasm.collabspreadsheetengine_streamBegin(this.__wbg_ptr);
425
+ }
426
+ /**
427
+ * Finish the streaming hydration (ingest the trailing line + recompute once).
428
+ */
429
+ streamEnd() {
430
+ wasm.collabspreadsheetengine_streamEnd(this.__wbg_ptr);
431
+ }
432
+ /**
433
+ * Ingest one NDJSON byte chunk of the hydration stream (partial lines are buffered).
434
+ * @param {Uint8Array} chunk
435
+ */
436
+ streamWrite(chunk) {
437
+ const ptr0 = passArray8ToWasm0(chunk, wasm.__wbindgen_malloc);
438
+ const len0 = WASM_VECTOR_LEN;
439
+ wasm.collabspreadsheetengine_streamWrite(this.__wbg_ptr, ptr0, len0);
440
+ }
441
+ /**
442
+ * Rebuild the calc engine from the (now-mutated) CRDT store and return a full `CommitResult`
443
+ * JSON so the UI can repaint after a remote update.
444
+ * @returns {string}
445
+ */
446
+ syncRemote() {
447
+ let deferred2_0;
448
+ let deferred2_1;
449
+ try {
450
+ const ret = wasm.collabspreadsheetengine_syncRemote(this.__wbg_ptr);
451
+ var ptr1 = ret[0];
452
+ var len1 = ret[1];
453
+ if (ret[3]) {
454
+ ptr1 = 0; len1 = 0;
455
+ throw takeFromExternrefTable0(ret[2]);
456
+ }
457
+ deferred2_0 = ptr1;
458
+ deferred2_1 = len1;
459
+ return getStringFromWasm0(ptr1, len1);
460
+ } finally {
461
+ wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
462
+ }
463
+ }
464
+ /**
465
+ * @returns {string}
466
+ */
467
+ undo() {
468
+ let deferred2_0;
469
+ let deferred2_1;
470
+ try {
471
+ const ret = wasm.collabspreadsheetengine_undo(this.__wbg_ptr);
472
+ var ptr1 = ret[0];
473
+ var len1 = ret[1];
474
+ if (ret[3]) {
475
+ ptr1 = 0; len1 = 0;
476
+ throw takeFromExternrefTable0(ret[2]);
477
+ }
478
+ deferred2_0 = ptr1;
479
+ deferred2_1 = len1;
480
+ return getStringFromWasm0(ptr1, len1);
481
+ } finally {
482
+ wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
483
+ }
484
+ }
485
+ /**
486
+ * @returns {number}
487
+ */
488
+ undoDepth() {
489
+ const ret = wasm.collabspreadsheetengine_undoDepth(this.__wbg_ptr);
490
+ return ret >>> 0;
491
+ }
492
+ }
493
+ if (Symbol.dispose) CollabSpreadsheetEngine.prototype[Symbol.dispose] = CollabSpreadsheetEngine.prototype.free;
494
+
495
+ /**
496
+ * The spreadsheet engine instance the UI holds (standalone, in-memory document).
497
+ */
498
+ export class SpreadsheetEngine {
499
+ __destroy_into_raw() {
500
+ const ptr = this.__wbg_ptr;
501
+ this.__wbg_ptr = 0;
502
+ SpreadsheetEngineFinalization.unregister(this);
503
+ return ptr;
504
+ }
505
+ free() {
506
+ const ptr = this.__destroy_into_raw();
507
+ wasm.__wbg_spreadsheetengine_free(ptr, 0);
508
+ }
509
+ /**
510
+ * Register a sheet (id → display name).
511
+ * @param {number} sheet_id
512
+ * @param {string} name
513
+ */
514
+ addSheet(sheet_id, name) {
515
+ const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
516
+ const len0 = WASM_VECTOR_LEN;
517
+ wasm.spreadsheetengine_addSheet(this.__wbg_ptr, sheet_id, ptr0, len0);
518
+ }
519
+ /**
520
+ * Apply a `commands.ts` JSON command; returns `CommitResult` JSON.
521
+ * @param {string} command_json
522
+ * @returns {string}
523
+ */
524
+ applyCommand(command_json) {
525
+ let deferred3_0;
526
+ let deferred3_1;
527
+ try {
528
+ const ptr0 = passStringToWasm0(command_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
529
+ const len0 = WASM_VECTOR_LEN;
530
+ const ret = wasm.spreadsheetengine_applyCommand(this.__wbg_ptr, ptr0, len0);
531
+ var ptr2 = ret[0];
532
+ var len2 = ret[1];
533
+ if (ret[3]) {
534
+ ptr2 = 0; len2 = 0;
535
+ throw takeFromExternrefTable0(ret[2]);
536
+ }
537
+ deferred3_0 = ptr2;
538
+ deferred3_1 = len2;
539
+ return getStringFromWasm0(ptr2, len2);
540
+ } finally {
541
+ wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
542
+ }
543
+ }
544
+ /**
545
+ * @returns {boolean}
546
+ */
547
+ canRedo() {
548
+ const ret = wasm.spreadsheetengine_canRedo(this.__wbg_ptr);
549
+ return ret !== 0;
550
+ }
551
+ /**
552
+ * Whether an undo / redo is currently available (for enabling toolbar buttons).
553
+ * @returns {boolean}
554
+ */
555
+ canUndo() {
556
+ const ret = wasm.spreadsheetengine_canUndo(this.__wbg_ptr);
557
+ return ret !== 0;
558
+ }
559
+ /**
560
+ * Drop the entire undo/redo history (the document is unchanged). Backs `onClearHistory`.
561
+ */
562
+ clearHistory() {
563
+ wasm.spreadsheetengine_clearHistory(this.__wbg_ptr);
564
+ }
565
+ /**
566
+ * The DEPENDENTS of a cell — every formula cell that references it (directly or within a range) —
567
+ * as `[{sheetId,rowIndex,columnIndex}]`. Powers `getDependents`.
568
+ * @param {number} sheet_id
569
+ * @param {number} row
570
+ * @param {number} col
571
+ * @returns {string}
572
+ */
573
+ dependents(sheet_id, row, col) {
574
+ let deferred2_0;
575
+ let deferred2_1;
576
+ try {
577
+ const ret = wasm.spreadsheetengine_dependents(this.__wbg_ptr, sheet_id, row, col);
578
+ var ptr1 = ret[0];
579
+ var len1 = ret[1];
580
+ if (ret[3]) {
581
+ ptr1 = 0; len1 = 0;
582
+ throw takeFromExternrefTable0(ret[2]);
583
+ }
584
+ deferred2_0 = ptr1;
585
+ deferred2_1 = len1;
586
+ return getStringFromWasm0(ptr1, len1);
587
+ } finally {
588
+ wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
589
+ }
590
+ }
591
+ /**
592
+ * Document-level facets the renderer draws (CF rules, tables, named/protected ranges, embeds,
593
+ * slicers, banded ranges, basic filters, DV rules) as canonical JSON — the thin hook re-reads
594
+ * this once per commit (they're small and change rarely, so they ride a getter, not a diff).
595
+ * @returns {string}
596
+ */
597
+ documentFacets() {
598
+ let deferred1_0;
599
+ let deferred1_1;
600
+ try {
601
+ const ret = wasm.spreadsheetengine_documentFacets(this.__wbg_ptr);
602
+ deferred1_0 = ret[0];
603
+ deferred1_1 = ret[1];
604
+ return getStringFromWasm0(ret[0], ret[1]);
605
+ } finally {
606
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
607
+ }
608
+ }
609
+ /**
610
+ * Scratch-evaluate a formula at a cell — `ExtendedValue` JSON or `"null"`. Read-only; powers
611
+ * the cell editor's live result preview (`onRequestCalculate`).
612
+ * @param {number} sheet_id
613
+ * @param {number} row
614
+ * @param {number} col
615
+ * @param {string} formula
616
+ * @returns {string}
617
+ */
618
+ evalFormula(sheet_id, row, col, formula) {
619
+ let deferred2_0;
620
+ let deferred2_1;
621
+ try {
622
+ const ptr0 = passStringToWasm0(formula, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
623
+ const len0 = WASM_VECTOR_LEN;
624
+ const ret = wasm.spreadsheetengine_evalFormula(this.__wbg_ptr, sheet_id, row, col, ptr0, len0);
625
+ deferred2_0 = ret[0];
626
+ deferred2_1 = ret[1];
627
+ return getStringFromWasm0(ret[0], ret[1]);
628
+ } finally {
629
+ wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
630
+ }
631
+ }
632
+ /**
633
+ * Export a sheet's display values as RFC-4180 CSV.
634
+ * @param {number} sheet_id
635
+ * @returns {string}
636
+ */
637
+ exportCsv(sheet_id) {
638
+ let deferred1_0;
639
+ let deferred1_1;
640
+ try {
641
+ const ret = wasm.spreadsheetengine_exportCsv(this.__wbg_ptr, sheet_id);
642
+ deferred1_0 = ret[0];
643
+ deferred1_1 = ret[1];
644
+ return getStringFromWasm0(ret[0], ret[1]);
645
+ } finally {
646
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
647
+ }
648
+ }
649
+ /**
650
+ * Export the whole workbook to in-memory XLSX bytes (a JS `Uint8Array`). Reads the full document
651
+ * from the store (all sheets, values, formats, merges, frozen panes, dims, tables, named ranges)
652
+ * and runs the `rnc-export` writer; formulas are inserted, not recalculated.
653
+ * @returns {Uint8Array}
654
+ */
655
+ exportXlsx() {
656
+ const ret = wasm.spreadsheetengine_exportXlsx(this.__wbg_ptr);
657
+ if (ret[3]) {
658
+ throw takeFromExternrefTable0(ret[2]);
659
+ }
660
+ var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
661
+ wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
662
+ return v1;
663
+ }
664
+ /**
665
+ * [`SpreadsheetEngine::export_xlsx`] with client export options — `options_json` is
666
+ * `{"includeNotes":bool,"citationsAsNotes":bool}` (camelCase, fields optional).
667
+ * `includeNotes:false` omits every cell-note comment part; `citationsAsNotes:true`
668
+ * additionally writes each citation's string as a note on its anchor (top-left) cell.
669
+ * @param {string} options_json
670
+ * @returns {Uint8Array}
671
+ */
672
+ exportXlsxWithOptions(options_json) {
673
+ const ptr0 = passStringToWasm0(options_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
674
+ const len0 = WASM_VECTOR_LEN;
675
+ const ret = wasm.spreadsheetengine_exportXlsxWithOptions(this.__wbg_ptr, ptr0, len0);
676
+ if (ret[3]) {
677
+ throw takeFromExternrefTable0(ret[2]);
678
+ }
679
+ var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
680
+ wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
681
+ return v2;
682
+ }
683
+ /**
684
+ * Find every cell on `sheet_id` matching `find`, returned as a JSON array of `SheetCoordinate`
685
+ * (row-major). Read-only — the windowed UI calls this for off-window matches the JS search can't
686
+ * see (it only holds the loaded viewport). `ranges_json` is a JSON array of `SheetRange`
687
+ * (empty/`""` = whole sheet). Matching mirrors the UI: `match_case` / `whole_word` / `use_regex`.
688
+ * Distinct fill/font colors + CF icons in one column's body rows — JSON
689
+ * `{cellColors, fontColors, icons}`. Powers the "Filter by color" picker on windowed hosts.
690
+ * @param {number} sheet_id
691
+ * @param {number} col
692
+ * @param {number} start_row
693
+ * @param {number} end_row
694
+ * @returns {string}
695
+ */
696
+ filterColors(sheet_id, col, start_row, end_row) {
697
+ let deferred1_0;
698
+ let deferred1_1;
699
+ try {
700
+ const ret = wasm.spreadsheetengine_filterColors(this.__wbg_ptr, sheet_id, col, start_row, end_row);
701
+ deferred1_0 = ret[0];
702
+ deferred1_1 = ret[1];
703
+ return getStringFromWasm0(ret[0], ret[1]);
704
+ } finally {
705
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
706
+ }
707
+ }
708
+ /**
709
+ * @param {number} sheet_id
710
+ * @param {string} ranges_json
711
+ * @param {string} find
712
+ * @param {boolean} match_case
713
+ * @param {boolean} whole_word
714
+ * @param {boolean} use_regex
715
+ * @returns {string}
716
+ */
717
+ findAll(sheet_id, ranges_json, find, match_case, whole_word, use_regex) {
718
+ let deferred4_0;
719
+ let deferred4_1;
720
+ try {
721
+ const ptr0 = passStringToWasm0(ranges_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
722
+ const len0 = WASM_VECTOR_LEN;
723
+ const ptr1 = passStringToWasm0(find, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
724
+ const len1 = WASM_VECTOR_LEN;
725
+ const ret = wasm.spreadsheetengine_findAll(this.__wbg_ptr, sheet_id, ptr0, len0, ptr1, len1, match_case, whole_word, use_regex);
726
+ var ptr3 = ret[0];
727
+ var len3 = ret[1];
728
+ if (ret[3]) {
729
+ ptr3 = 0; len3 = 0;
730
+ throw takeFromExternrefTable0(ret[2]);
731
+ }
732
+ deferred4_0 = ptr3;
733
+ deferred4_1 = len3;
734
+ return getStringFromWasm0(ptr3, len3);
735
+ } finally {
736
+ wasm.__wbindgen_free(deferred4_0, deferred4_1, 1);
737
+ }
738
+ }
739
+ /**
740
+ * Import an `.xlsx` workbook with the native `rnc-import` reader (the symmetric inverse of
741
+ * [`SpreadsheetEngine::export_xlsx`]) and hydrate the engine from it. Returns the full
742
+ * `CommitResult` (every cell + style) so the UI repaints in one shot — the same path and shape as
743
+ * [`SpreadsheetEngine::load_document`]. The imported sheets are loaded into the current store
744
+ * (by sheet id); start from a fresh engine for a clean replace.
745
+ * @param {Uint8Array} bytes
746
+ * @returns {string}
747
+ */
748
+ importXlsx(bytes) {
749
+ let deferred3_0;
750
+ let deferred3_1;
751
+ try {
752
+ const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);
753
+ const len0 = WASM_VECTOR_LEN;
754
+ const ret = wasm.spreadsheetengine_importXlsx(this.__wbg_ptr, ptr0, len0);
755
+ var ptr2 = ret[0];
756
+ var len2 = ret[1];
757
+ if (ret[3]) {
758
+ ptr2 = 0; len2 = 0;
759
+ throw takeFromExternrefTable0(ret[2]);
760
+ }
761
+ deferred3_0 = ptr2;
762
+ deferred3_1 = len2;
763
+ return getStringFromWasm0(ptr2, len2);
764
+ } finally {
765
+ wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
766
+ }
767
+ }
768
+ /**
769
+ * Like [`SpreadsheetEngine::import_xlsx`] but for password-protected workbooks (ECMA-376 agile,
770
+ * standard AES, or RC4 CryptoAPI): decrypts with `password` first. A non-encrypted file imports
771
+ * directly (password ignored), so a host can route every import here. A wrong password returns an
772
+ * error the UI can re-prompt on.
773
+ * @param {Uint8Array} bytes
774
+ * @param {string} password
775
+ * @returns {string}
776
+ */
777
+ importXlsxWithPassword(bytes, password) {
778
+ let deferred4_0;
779
+ let deferred4_1;
780
+ try {
781
+ const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);
782
+ const len0 = WASM_VECTOR_LEN;
783
+ const ptr1 = passStringToWasm0(password, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
784
+ const len1 = WASM_VECTOR_LEN;
785
+ const ret = wasm.spreadsheetengine_importXlsxWithPassword(this.__wbg_ptr, ptr0, len0, ptr1, len1);
786
+ var ptr3 = ret[0];
787
+ var len3 = ret[1];
788
+ if (ret[3]) {
789
+ ptr3 = 0; len3 = 0;
790
+ throw takeFromExternrefTable0(ret[2]);
791
+ }
792
+ deferred4_0 = ptr3;
793
+ deferred4_1 = len3;
794
+ return getStringFromWasm0(ptr3, len3);
795
+ } finally {
796
+ wasm.__wbindgen_free(deferred4_0, deferred4_1, 1);
797
+ }
798
+ }
799
+ /**
800
+ * Whether the bytes are an encrypted (CFB) workbook needing a password (vs a plain `.xlsx`).
801
+ * @param {Uint8Array} bytes
802
+ * @returns {boolean}
803
+ */
804
+ isEncryptedXlsx(bytes) {
805
+ const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);
806
+ const len0 = WASM_VECTOR_LEN;
807
+ const ret = wasm.spreadsheetengine_isEncryptedXlsx(this.__wbg_ptr, ptr0, len0);
808
+ return ret !== 0;
809
+ }
810
+ /**
811
+ * Hydrate the engine from an initial document (`{ sheets, sheetData, styles }` JSON, the
812
+ * `rnc-model` shape an API returns). Loads cells + styles, recomputes formulas, and returns the
813
+ * full `CommitResult` (every cell + style) so the UI can populate in one shot.
814
+ * @param {string} document_json
815
+ * @returns {string}
816
+ */
817
+ loadDocument(document_json) {
818
+ let deferred3_0;
819
+ let deferred3_1;
820
+ try {
821
+ const ptr0 = passStringToWasm0(document_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
822
+ const len0 = WASM_VECTOR_LEN;
823
+ const ret = wasm.spreadsheetengine_loadDocument(this.__wbg_ptr, ptr0, len0);
824
+ var ptr2 = ret[0];
825
+ var len2 = ret[1];
826
+ if (ret[3]) {
827
+ ptr2 = 0; len2 = 0;
828
+ throw takeFromExternrefTable0(ret[2]);
829
+ }
830
+ deferred3_0 = ptr2;
831
+ deferred3_1 = len2;
832
+ return getStringFromWasm0(ptr2, len2);
833
+ } finally {
834
+ wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
835
+ }
836
+ }
837
+ constructor() {
838
+ const ret = wasm.spreadsheetengine_new();
839
+ this.__wbg_ptr = ret;
840
+ SpreadsheetEngineFinalization.register(this, this.__wbg_ptr, this);
841
+ return this;
842
+ }
843
+ /**
844
+ * The PRECEDENTS of a cell — the cells + ranges its formula references — as
845
+ * `{cells:[{sheetId,rowIndex,columnIndex}], ranges:[{sheetId,startRowIndex,…}]}`. The engine
846
+ * parses the formula with the grammar it evaluates, so this is exact. Powers `getPrecedents`.
847
+ * @param {number} sheet_id
848
+ * @param {number} row
849
+ * @param {number} col
850
+ * @returns {string}
851
+ */
852
+ precedents(sheet_id, row, col) {
853
+ let deferred2_0;
854
+ let deferred2_1;
855
+ try {
856
+ const ret = wasm.spreadsheetengine_precedents(this.__wbg_ptr, sheet_id, row, col);
857
+ var ptr1 = ret[0];
858
+ var len1 = ret[1];
859
+ if (ret[3]) {
860
+ ptr1 = 0; len1 = 0;
861
+ throw takeFromExternrefTable0(ret[2]);
862
+ }
863
+ deferred2_0 = ptr1;
864
+ deferred2_1 = len1;
865
+ return getStringFromWasm0(ptr1, len1);
866
+ } finally {
867
+ wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
868
+ }
869
+ }
870
+ /**
871
+ * Selection statistics over a 1-indexed inclusive range, computed in Rust; returns `RangeStats`
872
+ * JSON (`{ sum, count, average, min, max, numericalCount }`, numeric fields `null` when the
873
+ * range holds no numbers). Cheap even at a million cells — the status bar can show stats for
874
+ * any selection without iterating it on the JS main thread.
875
+ * @param {number} sheet_id
876
+ * @param {number} start_row
877
+ * @param {number} start_col
878
+ * @param {number} end_row
879
+ * @param {number} end_col
880
+ * @returns {string}
881
+ */
882
+ rangeStats(sheet_id, start_row, start_col, end_row, end_col) {
883
+ let deferred2_0;
884
+ let deferred2_1;
885
+ try {
886
+ const ret = wasm.spreadsheetengine_rangeStats(this.__wbg_ptr, sheet_id, start_row, start_col, end_row, end_col);
887
+ var ptr1 = ret[0];
888
+ var len1 = ret[1];
889
+ if (ret[3]) {
890
+ ptr1 = 0; len1 = 0;
891
+ throw takeFromExternrefTable0(ret[2]);
892
+ }
893
+ deferred2_0 = ptr1;
894
+ deferred2_1 = len1;
895
+ return getStringFromWasm0(ptr1, len1);
896
+ } finally {
897
+ wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
898
+ }
899
+ }
900
+ /**
901
+ * Read a 1-indexed inclusive window; returns `WindowSnapshot` JSON.
902
+ * @param {number} sheet_id
903
+ * @param {number} start_row
904
+ * @param {number} start_col
905
+ * @param {number} end_row
906
+ * @param {number} end_col
907
+ * @returns {string}
908
+ */
909
+ readWindow(sheet_id, start_row, start_col, end_row, end_col) {
910
+ let deferred2_0;
911
+ let deferred2_1;
912
+ try {
913
+ const ret = wasm.spreadsheetengine_readWindow(this.__wbg_ptr, sheet_id, start_row, start_col, end_row, end_col);
914
+ var ptr1 = ret[0];
915
+ var len1 = ret[1];
916
+ if (ret[3]) {
917
+ ptr1 = 0; len1 = 0;
918
+ throw takeFromExternrefTable0(ret[2]);
919
+ }
920
+ deferred2_0 = ptr1;
921
+ deferred2_1 = len1;
922
+ return getStringFromWasm0(ptr1, len1);
923
+ } finally {
924
+ wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
925
+ }
926
+ }
927
+ /**
928
+ * Redo the last undone mutation; returns the `CommitResult` JSON.
929
+ * @returns {string}
930
+ */
931
+ redo() {
932
+ let deferred2_0;
933
+ let deferred2_1;
934
+ try {
935
+ const ret = wasm.spreadsheetengine_redo(this.__wbg_ptr);
936
+ var ptr1 = ret[0];
937
+ var len1 = ret[1];
938
+ if (ret[3]) {
939
+ ptr1 = 0; len1 = 0;
940
+ throw takeFromExternrefTable0(ret[2]);
941
+ }
942
+ deferred2_0 = ptr1;
943
+ deferred2_1 = len1;
944
+ return getStringFromWasm0(ptr1, len1);
945
+ } finally {
946
+ wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
947
+ }
948
+ }
949
+ /**
950
+ * @returns {number}
951
+ */
952
+ redoDepth() {
953
+ const ret = wasm.spreadsheetengine_redoDepth(this.__wbg_ptr);
954
+ return ret >>> 0;
955
+ }
956
+ /**
957
+ * Register a host (JS) custom-function NAME so `=NAME(…)` resolves (and its arg cell refs are
958
+ * tracked as dependencies) instead of `#NAME?`. The body runs in JS: on recalc the engine streams
959
+ * a `customEvals` request (cell + resolved args) the host answers via `set-effective-value`.
960
+ * @param {string} name
961
+ */
962
+ registerCustomFunction(name) {
963
+ const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
964
+ const len0 = WASM_VECTOR_LEN;
965
+ wasm.spreadsheetengine_registerCustomFunction(this.__wbg_ptr, ptr0, len0);
966
+ }
967
+ /**
968
+ * Declare whether the host renders WINDOWED. When on, every commit serialized by this engine
969
+ * (`applyCommand` / `undo` / `redo` / `loadDocument`) omits the per-cell channels the windowed
970
+ * host re-reads via `readWindow` anyway — see [`SpreadsheetEngine::serialize_commit`]. Idempotent.
971
+ * @param {boolean} on
972
+ */
973
+ setWindowed(on) {
974
+ wasm.spreadsheetengine_setWindowed(this.__wbg_ptr, on);
975
+ }
976
+ /**
977
+ * Per-sheet used extent as JSON `[[sheetId, rowCount, colCount], …]` (1-based data extents).
978
+ * A windowed renderer reads this to size the grid's scroll extent to the engine's data — so it
979
+ * can hold only the visible viewport in JS yet scroll the full sheet.
980
+ * @returns {string}
981
+ */
982
+ sheetExtents() {
983
+ let deferred2_0;
984
+ let deferred2_1;
985
+ try {
986
+ const ret = wasm.spreadsheetengine_sheetExtents(this.__wbg_ptr);
987
+ var ptr1 = ret[0];
988
+ var len1 = ret[1];
989
+ if (ret[3]) {
990
+ ptr1 = 0; len1 = 0;
991
+ throw takeFromExternrefTable0(ret[2]);
992
+ }
993
+ deferred2_0 = ptr1;
994
+ deferred2_1 = len1;
995
+ return getStringFromWasm0(ptr1, len1);
996
+ } finally {
997
+ wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
998
+ }
999
+ }
1000
+ /**
1001
+ * Sheet ids in order.
1002
+ * @returns {Int32Array}
1003
+ */
1004
+ sheetIds() {
1005
+ const ret = wasm.spreadsheetengine_sheetIds(this.__wbg_ptr);
1006
+ var v1 = getArrayI32FromWasm0(ret[0], ret[1]).slice();
1007
+ wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
1008
+ return v1;
1009
+ }
1010
+ /**
1011
+ * The workbook's sheets in tab order as JSON `[{sheetId, title, index, hidden?, tabColor?}]` —
1012
+ * the engine's authoritative sheet identity/order (it owns `create`/`rename`/`move`/`delete`).
1013
+ * A thin UI reconciles its tab list from this after each commit.
1014
+ * @returns {string}
1015
+ */
1016
+ sheets() {
1017
+ let deferred1_0;
1018
+ let deferred1_1;
1019
+ try {
1020
+ const ret = wasm.spreadsheetengine_sheets(this.__wbg_ptr);
1021
+ deferred1_0 = ret[0];
1022
+ deferred1_1 = ret[1];
1023
+ return getStringFromWasm0(ret[0], ret[1]);
1024
+ } finally {
1025
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
1026
+ }
1027
+ }
1028
+ /**
1029
+ * Begin a streaming hydration (for huge workbooks). Then feed NDJSON bytes via
1030
+ * `streamWrite(chunk)` as they arrive (e.g. from `fetch(url).body`) and finish with
1031
+ * `streamEnd()`. Nothing is streamed back — read the viewport with `readWindow` afterward.
1032
+ */
1033
+ streamBegin() {
1034
+ wasm.spreadsheetengine_streamBegin(this.__wbg_ptr);
1035
+ }
1036
+ /**
1037
+ * Finish the streaming hydration: ingest the trailing line and recompute once.
1038
+ */
1039
+ streamEnd() {
1040
+ wasm.spreadsheetengine_streamEnd(this.__wbg_ptr);
1041
+ }
1042
+ /**
1043
+ * Ingest one byte chunk of the NDJSON hydration stream (a `Uint8Array`). Chunk boundaries may
1044
+ * fall anywhere — partial lines are buffered until complete.
1045
+ * @param {Uint8Array} chunk
1046
+ */
1047
+ streamWrite(chunk) {
1048
+ const ptr0 = passArray8ToWasm0(chunk, wasm.__wbindgen_malloc);
1049
+ const len0 = WASM_VECTOR_LEN;
1050
+ wasm.spreadsheetengine_streamWrite(this.__wbg_ptr, ptr0, len0);
1051
+ }
1052
+ /**
1053
+ * Every function name the calc engine resolves by registration (formualizer builtins + rnc
1054
+ * overrides), as a JSON string array — uppercase, sorted. Alias spellings are not listed;
1055
+ * probe `evalFormula` for `#NAME?` to cover them. Feeds the cross-engine function-catalog
1056
+ * parity harness (`libs/functions/__tests__/engine-function-parity.spec.ts`).
1057
+ * @returns {string}
1058
+ */
1059
+ supportedFunctionNames() {
1060
+ let deferred1_0;
1061
+ let deferred1_1;
1062
+ try {
1063
+ const ret = wasm.spreadsheetengine_supportedFunctionNames(this.__wbg_ptr);
1064
+ deferred1_0 = ret[0];
1065
+ deferred1_1 = ret[1];
1066
+ return getStringFromWasm0(ret[0], ret[1]);
1067
+ } finally {
1068
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
1069
+ }
1070
+ }
1071
+ /**
1072
+ * Undo the last document mutation; returns the `CommitResult` JSON to stream back.
1073
+ * @returns {string}
1074
+ */
1075
+ undo() {
1076
+ let deferred2_0;
1077
+ let deferred2_1;
1078
+ try {
1079
+ const ret = wasm.spreadsheetengine_undo(this.__wbg_ptr);
1080
+ var ptr1 = ret[0];
1081
+ var len1 = ret[1];
1082
+ if (ret[3]) {
1083
+ ptr1 = 0; len1 = 0;
1084
+ throw takeFromExternrefTable0(ret[2]);
1085
+ }
1086
+ deferred2_0 = ptr1;
1087
+ deferred2_1 = len1;
1088
+ return getStringFromWasm0(ptr1, len1);
1089
+ } finally {
1090
+ wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
1091
+ }
1092
+ }
1093
+ /**
1094
+ * Undo / redo stack depth — a UI keeping parallel per-edit state (cursor/selection) watches these
1095
+ * to push/pop its own snapshots in lockstep with the engine.
1096
+ * @returns {number}
1097
+ */
1098
+ undoDepth() {
1099
+ const ret = wasm.spreadsheetengine_undoDepth(this.__wbg_ptr);
1100
+ return ret >>> 0;
1101
+ }
1102
+ /**
1103
+ * The engine's WASM linear-memory size in bytes — the VM's committed heap (`memory.size` × 64 KiB
1104
+ * page). It never shrinks, so read it after a workload for the high-water mark. Returns 0 on a
1105
+ * non-wasm (native test) target.
1106
+ * @returns {number}
1107
+ */
1108
+ wasmMemoryBytes() {
1109
+ const ret = wasm.spreadsheetengine_wasmMemoryBytes(this.__wbg_ptr);
1110
+ return ret;
1111
+ }
1112
+ }
1113
+ if (Symbol.dispose) SpreadsheetEngine.prototype[Symbol.dispose] = SpreadsheetEngine.prototype.free;
1114
+ function __wbg_get_imports() {
1115
+ const import0 = {
1116
+ __proto__: null,
1117
+ __wbg___wbindgen_is_undefined_67b456be8673d3d7: function(arg0) {
1118
+ const ret = arg0 === undefined;
1119
+ return ret;
1120
+ },
1121
+ __wbg___wbindgen_throw_1506f2235d1bdba0: function(arg0, arg1) {
1122
+ throw new Error(getStringFromWasm0(arg0, arg1));
1123
+ },
1124
+ __wbg_error_a6fa202b58aa1cd3: function(arg0, arg1) {
1125
+ let deferred0_0;
1126
+ let deferred0_1;
1127
+ try {
1128
+ deferred0_0 = arg0;
1129
+ deferred0_1 = arg1;
1130
+ console.error(getStringFromWasm0(arg0, arg1));
1131
+ } finally {
1132
+ wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);
1133
+ }
1134
+ },
1135
+ __wbg_getRandomValues_3f44b700395062e5: function() { return handleError(function (arg0, arg1) {
1136
+ globalThis.crypto.getRandomValues(getArrayU8FromWasm0(arg0, arg1));
1137
+ }, arguments); },
1138
+ __wbg_getTime_00b3f7db575e4ef5: function(arg0) {
1139
+ const ret = arg0.getTime();
1140
+ return ret;
1141
+ },
1142
+ __wbg_getTimezoneOffset_08e2892156231088: function(arg0) {
1143
+ const ret = arg0.getTimezoneOffset();
1144
+ return ret;
1145
+ },
1146
+ __wbg_new_0_445c13a750296eb6: function() {
1147
+ const ret = new Date();
1148
+ return ret;
1149
+ },
1150
+ __wbg_new_227d7c05414eb861: function() {
1151
+ const ret = new Error();
1152
+ return ret;
1153
+ },
1154
+ __wbg_new_6d75fd236f920a62: function(arg0) {
1155
+ const ret = new Date(arg0);
1156
+ return ret;
1157
+ },
1158
+ __wbg_now_190933fa139cc119: function() {
1159
+ const ret = Date.now();
1160
+ return ret;
1161
+ },
1162
+ __wbg_now_e7c6795a7f81e10f: function(arg0) {
1163
+ const ret = arg0.now();
1164
+ return ret;
1165
+ },
1166
+ __wbg_performance_3fcf6e32a7e1ed0a: function(arg0) {
1167
+ const ret = arg0.performance;
1168
+ return ret;
1169
+ },
1170
+ __wbg_stack_3b0d974bbf31e44f: function(arg0, arg1) {
1171
+ const ret = arg1.stack;
1172
+ const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
1173
+ const len1 = WASM_VECTOR_LEN;
1174
+ getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
1175
+ getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
1176
+ },
1177
+ __wbg_static_accessor_GLOBAL_9d53f2689e622ca1: function() {
1178
+ const ret = typeof global === 'undefined' ? null : global;
1179
+ return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
1180
+ },
1181
+ __wbg_static_accessor_GLOBAL_THIS_a1a35cec07001a8a: function() {
1182
+ const ret = typeof globalThis === 'undefined' ? null : globalThis;
1183
+ return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
1184
+ },
1185
+ __wbg_static_accessor_SELF_4c59f6c7ea29a144: function() {
1186
+ const ret = typeof self === 'undefined' ? null : self;
1187
+ return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
1188
+ },
1189
+ __wbg_static_accessor_WINDOW_e70ae9f2eb052253: function() {
1190
+ const ret = typeof window === 'undefined' ? null : window;
1191
+ return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
1192
+ },
1193
+ __wbindgen_cast_0000000000000001: function(arg0) {
1194
+ // Cast intrinsic for `F64 -> Externref`.
1195
+ const ret = arg0;
1196
+ return ret;
1197
+ },
1198
+ __wbindgen_cast_0000000000000002: function(arg0, arg1) {
1199
+ // Cast intrinsic for `Ref(String) -> Externref`.
1200
+ const ret = getStringFromWasm0(arg0, arg1);
1201
+ return ret;
1202
+ },
1203
+ __wbindgen_init_externref_table: function() {
1204
+ const table = wasm.__wbindgen_externrefs;
1205
+ const offset = table.grow(4);
1206
+ table.set(0, undefined);
1207
+ table.set(offset + 0, undefined);
1208
+ table.set(offset + 1, null);
1209
+ table.set(offset + 2, true);
1210
+ table.set(offset + 3, false);
1211
+ },
1212
+ };
1213
+ return {
1214
+ __proto__: null,
1215
+ "./rnc_wasm_bg.js": import0,
1216
+ };
1217
+ }
1218
+
1219
+ const CollabSpreadsheetEngineFinalization = (typeof FinalizationRegistry === 'undefined')
1220
+ ? { register: () => {}, unregister: () => {} }
1221
+ : new FinalizationRegistry(ptr => wasm.__wbg_collabspreadsheetengine_free(ptr, 1));
1222
+ const SpreadsheetEngineFinalization = (typeof FinalizationRegistry === 'undefined')
1223
+ ? { register: () => {}, unregister: () => {} }
1224
+ : new FinalizationRegistry(ptr => wasm.__wbg_spreadsheetengine_free(ptr, 1));
1225
+
1226
+ function addToExternrefTable0(obj) {
1227
+ const idx = wasm.__externref_table_alloc();
1228
+ wasm.__wbindgen_externrefs.set(idx, obj);
1229
+ return idx;
1230
+ }
1231
+
1232
+ function getArrayI32FromWasm0(ptr, len) {
1233
+ ptr = ptr >>> 0;
1234
+ return getInt32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);
1235
+ }
1236
+
1237
+ function getArrayU8FromWasm0(ptr, len) {
1238
+ ptr = ptr >>> 0;
1239
+ return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);
1240
+ }
1241
+
1242
+ let cachedDataViewMemory0 = null;
1243
+ function getDataViewMemory0() {
1244
+ if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {
1245
+ cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
1246
+ }
1247
+ return cachedDataViewMemory0;
1248
+ }
1249
+
1250
+ let cachedInt32ArrayMemory0 = null;
1251
+ function getInt32ArrayMemory0() {
1252
+ if (cachedInt32ArrayMemory0 === null || cachedInt32ArrayMemory0.byteLength === 0) {
1253
+ cachedInt32ArrayMemory0 = new Int32Array(wasm.memory.buffer);
1254
+ }
1255
+ return cachedInt32ArrayMemory0;
1256
+ }
1257
+
1258
+ function getStringFromWasm0(ptr, len) {
1259
+ return decodeText(ptr >>> 0, len);
1260
+ }
1261
+
1262
+ let cachedUint8ArrayMemory0 = null;
1263
+ function getUint8ArrayMemory0() {
1264
+ if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
1265
+ cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
1266
+ }
1267
+ return cachedUint8ArrayMemory0;
1268
+ }
1269
+
1270
+ function handleError(f, args) {
1271
+ try {
1272
+ return f.apply(this, args);
1273
+ } catch (e) {
1274
+ const idx = addToExternrefTable0(e);
1275
+ wasm.__wbindgen_exn_store(idx);
1276
+ }
1277
+ }
1278
+
1279
+ function isLikeNone(x) {
1280
+ return x === undefined || x === null;
1281
+ }
1282
+
1283
+ function passArray8ToWasm0(arg, malloc) {
1284
+ const ptr = malloc(arg.length * 1, 1) >>> 0;
1285
+ getUint8ArrayMemory0().set(arg, ptr / 1);
1286
+ WASM_VECTOR_LEN = arg.length;
1287
+ return ptr;
1288
+ }
1289
+
1290
+ function passStringToWasm0(arg, malloc, realloc) {
1291
+ if (realloc === undefined) {
1292
+ const buf = cachedTextEncoder.encode(arg);
1293
+ const ptr = malloc(buf.length, 1) >>> 0;
1294
+ getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);
1295
+ WASM_VECTOR_LEN = buf.length;
1296
+ return ptr;
1297
+ }
1298
+
1299
+ let len = arg.length;
1300
+ let ptr = malloc(len, 1) >>> 0;
1301
+
1302
+ const mem = getUint8ArrayMemory0();
1303
+
1304
+ let offset = 0;
1305
+
1306
+ for (; offset < len; offset++) {
1307
+ const code = arg.charCodeAt(offset);
1308
+ if (code > 0x7F) break;
1309
+ mem[ptr + offset] = code;
1310
+ }
1311
+ if (offset !== len) {
1312
+ if (offset !== 0) {
1313
+ arg = arg.slice(offset);
1314
+ }
1315
+ ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
1316
+ const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);
1317
+ const ret = cachedTextEncoder.encodeInto(arg, view);
1318
+
1319
+ offset += ret.written;
1320
+ ptr = realloc(ptr, len, offset, 1) >>> 0;
1321
+ }
1322
+
1323
+ WASM_VECTOR_LEN = offset;
1324
+ return ptr;
1325
+ }
1326
+
1327
+ function takeFromExternrefTable0(idx) {
1328
+ const value = wasm.__wbindgen_externrefs.get(idx);
1329
+ wasm.__externref_table_dealloc(idx);
1330
+ return value;
1331
+ }
1332
+
1333
+ let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
1334
+ cachedTextDecoder.decode();
1335
+ const MAX_SAFARI_DECODE_BYTES = 2146435072;
1336
+ let numBytesDecoded = 0;
1337
+ function decodeText(ptr, len) {
1338
+ numBytesDecoded += len;
1339
+ if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {
1340
+ cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
1341
+ cachedTextDecoder.decode();
1342
+ numBytesDecoded = len;
1343
+ }
1344
+ return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
1345
+ }
1346
+
1347
+ const cachedTextEncoder = new TextEncoder();
1348
+
1349
+ if (!('encodeInto' in cachedTextEncoder)) {
1350
+ cachedTextEncoder.encodeInto = function (arg, view) {
1351
+ const buf = cachedTextEncoder.encode(arg);
1352
+ view.set(buf);
1353
+ return {
1354
+ read: arg.length,
1355
+ written: buf.length
1356
+ };
1357
+ };
1358
+ }
1359
+
1360
+ let WASM_VECTOR_LEN = 0;
1361
+
1362
+ let wasmModule, wasmInstance, wasm;
1363
+ function __wbg_finalize_init(instance, module) {
1364
+ wasmInstance = instance;
1365
+ wasm = instance.exports;
1366
+ wasmModule = module;
1367
+ cachedDataViewMemory0 = null;
1368
+ cachedInt32ArrayMemory0 = null;
1369
+ cachedUint8ArrayMemory0 = null;
1370
+ wasm.__wbindgen_start();
1371
+ return wasm;
1372
+ }
1373
+
1374
+ async function __wbg_load(module, imports) {
1375
+ if (typeof Response === 'function' && module instanceof Response) {
1376
+ if (typeof WebAssembly.instantiateStreaming === 'function') {
1377
+ try {
1378
+ return await WebAssembly.instantiateStreaming(module, imports);
1379
+ } catch (e) {
1380
+ const validResponse = module.ok && expectedResponseType(module.type);
1381
+
1382
+ if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {
1383
+ console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
1384
+
1385
+ } else { throw e; }
1386
+ }
1387
+ }
1388
+
1389
+ const bytes = await module.arrayBuffer();
1390
+ return await WebAssembly.instantiate(bytes, imports);
1391
+ } else {
1392
+ const instance = await WebAssembly.instantiate(module, imports);
1393
+
1394
+ if (instance instanceof WebAssembly.Instance) {
1395
+ return { instance, module };
1396
+ } else {
1397
+ return instance;
1398
+ }
1399
+ }
1400
+
1401
+ function expectedResponseType(type) {
1402
+ switch (type) {
1403
+ case 'basic': case 'cors': case 'default': return true;
1404
+ }
1405
+ return false;
1406
+ }
1407
+ }
1408
+
1409
+ function initSync(module) {
1410
+ if (wasm !== undefined) return wasm;
1411
+
1412
+
1413
+ if (module !== undefined) {
1414
+ if (Object.getPrototypeOf(module) === Object.prototype) {
1415
+ ({module} = module)
1416
+ } else {
1417
+ console.warn('using deprecated parameters for `initSync()`; pass a single object instead')
1418
+ }
1419
+ }
1420
+
1421
+ const imports = __wbg_get_imports();
1422
+ if (!(module instanceof WebAssembly.Module)) {
1423
+ module = new WebAssembly.Module(module);
1424
+ }
1425
+ const instance = new WebAssembly.Instance(module, imports);
1426
+ return __wbg_finalize_init(instance, module);
1427
+ }
1428
+
1429
+ async function __wbg_init(module_or_path) {
1430
+ if (wasm !== undefined) return wasm;
1431
+
1432
+
1433
+ if (module_or_path !== undefined) {
1434
+ if (Object.getPrototypeOf(module_or_path) === Object.prototype) {
1435
+ ({module_or_path} = module_or_path)
1436
+ } else {
1437
+ console.warn('using deprecated parameters for the initialization function; pass a single object instead')
1438
+ }
1439
+ }
1440
+
1441
+ if (module_or_path === undefined) {
1442
+ module_or_path = new URL('rnc_wasm_bg.wasm', import.meta.url);
1443
+ }
1444
+ const imports = __wbg_get_imports();
1445
+
1446
+ if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {
1447
+ module_or_path = fetch(module_or_path);
1448
+ }
1449
+
1450
+ const { instance, module } = await __wbg_load(await module_or_path, imports);
1451
+
1452
+ return __wbg_finalize_init(instance, module);
1453
+ }
1454
+
1455
+ export { initSync, __wbg_init as default };