@sheetwrite/wasm 0.2.0 → 0.3.1

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sheetwrite/wasm",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "type": "module",
5
5
  "description": "Sheetwrite columnar store and data engine (Rust/WASM).",
6
6
  "license": "MIT",
@@ -20,10 +20,11 @@ export class CellOut {
20
20
  export class CellStore {
21
21
  free(): void;
22
22
  [Symbol.dispose](): void;
23
+ acknowledgeRevision(revision: bigint): void;
23
24
  /**
24
25
  * Allocate a logical sheet whose cell chunks materialize on page load or edit.
25
26
  */
26
- addPagedSheet(n_cols: number, row_count: number, chunk_rows: number, byte_budget: number): number;
27
+ addPagedSheet(n_cols: number, row_count: number, chunk_rows: number, byte_budget: number, max_dirty_cells: number): number;
27
28
  addRows(sheet: number, at: number, count: number): void;
28
29
  /**
29
30
  * Allocate a sheet grid and return its numeric handle.
@@ -33,11 +34,29 @@ export class CellStore {
33
34
  * Column aggregate over numeric cells. op: 0 sum, 1 avg, 2 min, 3 max, 4 count.
34
35
  */
35
36
  aggregate(sheet: number, col: number, op: number): number;
37
+ beginMutation(): bigint;
36
38
  beginPageLoad(): void;
39
+ canDirtyCell(sheet: number, row: number, col: number): boolean;
37
40
  /**
38
41
  * Capture a dense rectangle into an opaque store-local history resource.
39
42
  */
40
43
  captureRange(sheet: number, r0: number, c0: number, rows: number, cols: number): RangeSnapshot | undefined;
44
+ /**
45
+ * Capture only persisted references for one sheet. The explicit entry cap
46
+ * bounds allocation for host-side structural admission simulation.
47
+ */
48
+ captureReferences(sheet: number, max_entries: number): SourceSnapshot | undefined;
49
+ /**
50
+ * Capture only persisted formula/reference sources in a rectangle. The
51
+ * returned opaque object is compact in source cardinality, not cell count.
52
+ */
53
+ captureSources(sheet: number, r0: number, c0: number, rows: number, cols: number): SourceSnapshot | undefined;
54
+ /**
55
+ * Capture persisted formula/reference sources and derived-spill identity
56
+ * for arbitrary row/column coordinates in one boundary crossing. Offsets
57
+ * follow the caller's row-major coordinate order.
58
+ */
59
+ captureSourcesForRows(sheet: number, rows: Uint32Array, cols: Uint32Array): SourceSnapshot | undefined;
41
60
  /**
42
61
  * 0 unloaded, 1 loaded-empty, 2 loaded-value, 3 dirty local edit.
43
62
  */
@@ -48,6 +67,11 @@ export class CellStore {
48
67
  */
49
68
  clearRange(sheet: number, r0: number, c0: number, r1: number, c1: number, contents: boolean, style: boolean): boolean;
50
69
  colCount(sheet: number): number;
70
+ columnsFullyLoaded(sheet: number, start_row: number, end_row: number, cols: Uint32Array): boolean;
71
+ /**
72
+ * Release geometric growth slack after a bounded bulk ingest.
73
+ */
74
+ compactStringStorage(): void;
51
75
  /**
52
76
  * Ctrl+Arrow destination: from `(row, col)` stepping by `(d_row, d_col)`
53
77
  * (exactly one of them ±1), return the destination row (vertical moves) or
@@ -60,13 +84,19 @@ export class CellStore {
60
84
  */
61
85
  dataEdge(sheet: number, row: number, col: number, d_row: number, d_col: number): number;
62
86
  dataEdgeOrdered(sheet: number, order: Uint32Array, row: number, col: number, d_row: number, d_col: number): number;
87
+ dirtyRevision(sheet: number, row: number, col: number): bigint;
63
88
  distinctValues(sheet: number, col: number, limit: number): DistinctColumn;
89
+ endMutation(): void;
64
90
  endPageLoad(): void;
65
91
  /**
66
92
  * Data-row indices whose column text contains `needle` (case-insensitive).
67
93
  */
68
94
  filterRows(sheet: number, col: number, needle: string): Uint32Array;
69
95
  filterRowsMulti(sheet: number, cols: Uint32Array, kinds: Uint8Array, flags: Uint8Array, nums: Float64Array, num_counts: Uint32Array, text_counts: Uint32Array, value_nums: Float64Array, value_texts: string[]): Uint32Array;
96
+ /**
97
+ * Benchmark diagnostic: `[current matrix bytes, peak matrix bytes, allocations]`.
98
+ */
99
+ formulaMatrixResourceStats(): Float64Array;
70
100
  formulaSource(sheet: number, row: number, col: number): string | undefined;
71
101
  /**
72
102
  * Single-cell read for interactions/tests — never the render hot path.
@@ -98,12 +128,23 @@ export class CellStore {
98
128
  isFullyLoaded(sheet: number): boolean;
99
129
  isPaged(sheet: number): boolean;
100
130
  isSheetAlive(sheet: number): boolean;
131
+ markCellCleanRevision(sheet: number, row: number, col: number, revision: bigint): boolean;
101
132
  markRangeClean(sheet: number, start_row: number, end_row: number, start_col: number, end_col: number): void;
133
+ memoryStats(): Float64Array;
102
134
  constructor();
135
+ pagedDirtyCoordinates(sheet: number): Float64Array;
103
136
  /**
104
- * `[chunks, loaded cells, dirty cells, allocated bytes, fully loaded]`.
137
+ * `[chunks, loaded cells, dirty cells, clean chunk bytes, fully loaded, dirty bytes]`.
105
138
  */
106
139
  pagedStats(sheet: number): Float64Array;
140
+ /**
141
+ * Sparse persisted-cell records. Each record starts with
142
+ * `[row, col, kind, number, style, string_id, source_kind, source_length]`.
143
+ * Formula UTF-8 is packed into little-endian u32 words; references append
144
+ * one `[sheet, row, col]` triple. The allocation scales with serialized
145
+ * cells and source bytes, never the logical sheet rectangle.
146
+ */
147
+ persistedCellData(sheet: number): Float64Array;
107
148
  pinRange(sheet: number, start_row: number, end_row: number, cols: Uint32Array): void;
108
149
  poolStrings(ids: Uint32Array): string[];
109
150
  /**
@@ -124,11 +165,22 @@ export class CellStore {
124
165
  * when many downstream formulas reference it.
125
166
  */
126
167
  recompute(sheet: number): void;
168
+ /**
169
+ * Recompute the union of every dirty sheet once at the host transaction
170
+ * barrier, including cross-sheet formula and plain-reference dependents.
171
+ */
172
+ recomputeChanged(): void;
127
173
  /**
128
174
  * Explicit volatile barrier. `serial` is a UTC spreadsheet serial using
129
175
  * the 1899-12-30 epoch; only TODAY/NOW formulas and their dependents dirty.
130
176
  */
131
177
  recomputeVolatile(serial: number): boolean;
178
+ referenceTarget(sheet: number, row: number, col: number): Uint32Array | undefined;
179
+ /**
180
+ * Return packed `[source_sheet, source_row, source_col, ...]` references
181
+ * targeting one sheet, bounded before crossing into the host.
182
+ */
183
+ referencesTargeting(target_sheet: number, max_entries: number): Uint32Array | undefined;
132
184
  /**
133
185
  * Remap styles over a rectangle using parallel old/new id tables.
134
186
  */
@@ -140,10 +192,12 @@ export class CellStore {
140
192
  * Tombstone a stable sheet handle and invalidate every formula reference to it.
141
193
  */
142
194
  removeSheet(sheet: number): boolean;
195
+ removeTable(id: string): boolean;
143
196
  /**
144
197
  * Rename a live stable sheet handle and rewrite every resolved formula AST reference.
145
198
  */
146
199
  renameSheet(sheet: number, id: string, name: string): boolean;
200
+ resetFormulaMatrixResourceStats(): void;
147
201
  resetQueryResourceStats(): void;
148
202
  /**
149
203
  * Restore a captured block at a destination of the same dimensions.
@@ -157,11 +211,13 @@ export class CellStore {
157
211
  */
158
212
  search(sheet: number, cols: Uint32Array, query: string, case_insensitive: boolean, whole_cell: boolean): Uint32Array;
159
213
  /**
160
- * Write one row-major typed block in a single boundary call. `kinds` uses
161
- * 0 empty / 1 number / 2 string; formulas and references are sparse host
162
- * exceptions applied after this literal bulk write.
214
+ * Atomically write one row-major mixed literal/formula/reference block.
215
+ * Formula/reference offsets are sparse row-major exceptions. Reference
216
+ * targets are packed `[sheet_handle, row, col]` triples. The compact
217
+ * status is `0` success, `1` invalid shape/bounds, `2` invalid or duplicate
218
+ * source metadata, and `3` paged dirty-capacity rejection.
163
219
  */
164
- setBlock(sheet: number, start_row: number, start_col: number, rows: number, cols: number, kinds: Uint8Array, numbers: Float64Array, texts: string[], styles: Uint32Array): boolean;
220
+ setBlock(sheet: number, start_row: number, start_col: number, rows: number, cols: number, kinds: Uint8Array, numbers: Float64Array, texts: string[], styles: Uint32Array, formula_offsets: Uint32Array, formula_sources: string[], reference_offsets: Uint32Array, reference_targets: Uint32Array): number;
165
221
  setBool(sheet: number, row: number, col: number, value: boolean, style: number): void;
166
222
  /**
167
223
  * Bulk-load one column with numbers starting at `start_row`.
@@ -181,10 +237,10 @@ export class CellStore {
181
237
  /**
182
238
  * Replace a sheet's conditional-format rules. Packed columnar encoding,
183
239
  * one entry per rule: `kinds` 0 gt / 1 lt / 2 eqNum / 3 eqStr / 4 eqEmpty /
184
- * 5 contains; `bounds` = normalized `[r0, c0, r1, c1]` per rule; `nums`
185
- * carries the numeric operand; `strs` the text operand; `flags` bit 0 =
186
- * match-case for `contains`. Case-insensitive needles are lowercased here
187
- * once so the per-cell match never allocates.
240
+ * 5 contains / 6 boolean formula; `bounds` = normalized `[r0, c0, r1, c1]`
241
+ * per rule; `nums` carries the numeric operand; `strs` the text/formula
242
+ * operand; `flags` bit 0 = match-case for `contains`, bit 1 = stop-if-true.
243
+ * Formula strings are parsed once here, never once per visible cell.
188
244
  */
189
245
  setConditionalRules(sheet: number, kinds: Uint8Array, bounds: Uint32Array, nums: Float64Array, strs: string[], flags: Uint8Array): void;
190
246
  /**
@@ -200,7 +256,20 @@ export class CellStore {
200
256
  setNamedRange(name: string, scope: number, sheet: number, row_start: number, col_start: number, row_end: number, col_end: number): boolean;
201
257
  setNumber(sheet: number, row: number, col: number, value: number, style: number): void;
202
258
  setSheetName(sheet: number, id: string, name: string): void;
259
+ /**
260
+ * Write one sparse mixed transaction/page/snapshot block without
261
+ * allocating by logical rectangle size. Inside `beginPageLoad`, dirty
262
+ * paged cells are skipped; otherwise the whole sparse write is preflighted.
263
+ */
264
+ setSparseBlock(sheet: number, start_row: number, start_col: number, rows: number, cols: number, offsets: Uint32Array, kinds: Uint8Array, numbers: Float64Array, texts: string[], styles: Uint32Array, formula_offsets: Uint32Array, formula_sources: string[], reference_offsets: Uint32Array, reference_targets: Uint32Array): number;
265
+ /**
266
+ * Replace the host-owned merge/protection collision ranges. Packed as
267
+ * `[row_start, col_start, row_end, col_end, ...]`; invalid input fails
268
+ * without weakening the old gate.
269
+ */
270
+ setSpillBlockers(sheet: number, bounds: Uint32Array): boolean;
203
271
  setString(sheet: number, row: number, col: number, value: string, style: number): void;
272
+ setTable(id: string, name: string, sheet: number, row_start: number, col_start: number, row_end: number, col_end: number, header_row: boolean, totals_row: boolean, column_ids: string[], column_names: string[]): boolean;
204
273
  snapshotNumbers(snapshot: RangeSnapshot): Float64Array;
205
274
  snapshotTexts(snapshot: RangeSnapshot): string[];
206
275
  /**
@@ -208,12 +277,28 @@ export class CellStore {
208
277
  */
209
278
  sortRows(sheet: number, col: number, ascending: boolean): Uint32Array;
210
279
  sortRowsMulti(sheet: number, cols: Uint32Array, ascending: Uint8Array, candidates: Uint32Array): Uint32Array;
280
+ spillAnchorCol(sheet: number, row: number, col: number): number;
281
+ /**
282
+ * Stable spill owner coordinate, or `u32::MAX` when `cell` is not part of
283
+ * a materialized spill.
284
+ */
285
+ spillAnchorRow(sheet: number, row: number, col: number): number;
286
+ /**
287
+ * Row-major mask aligned with render-window layout; `1` marks a derived
288
+ * spill cell and deliberately excludes the anchor.
289
+ */
290
+ spillDerivedMask(sheet: number, row_start: number, row_end: number, cols: Uint32Array): Uint8Array;
291
+ /**
292
+ * Packed row-major `[anchor_row, anchor_col, ...]` owner coordinates.
293
+ */
294
+ spillOwnerCoordinates(sheet: number, row_start: number, row_end: number, cols: Uint32Array): Uint32Array;
211
295
  /**
212
296
  * Current style-dictionary id at a cell; `0` when out of bounds. Used by
213
297
  * the host to write derived (reference-shadow) values without disturbing
214
298
  * the cell's style.
215
299
  */
216
300
  styleIdAt(sheet: number, row: number, col: number): number;
301
+ wasmCommittedBytes(): number;
217
302
  }
218
303
 
219
304
  /**
@@ -254,9 +339,28 @@ export class RangeSnapshot {
254
339
  formulaOffsets(): Uint32Array;
255
340
  formulaSources(): string[];
256
341
  kinds(): Uint8Array;
342
+ referenceOffsets(): Uint32Array;
343
+ referenceTargets(): Uint32Array;
257
344
  styleIds(): Uint32Array;
258
345
  }
259
346
 
347
+ /**
348
+ * Compact serializable projection of persisted derived-cell sources and spill
349
+ * identity in one range. Offsets are row-major and sorted; reference targets
350
+ * are packed `[sheet_handle, row, col]` triples.
351
+ */
352
+ export class SourceSnapshot {
353
+ private constructor();
354
+ free(): void;
355
+ [Symbol.dispose](): void;
356
+ byteLength(): number;
357
+ formulaOffsets(): Uint32Array;
358
+ formulaSources(): string[];
359
+ referenceOffsets(): Uint32Array;
360
+ referenceTargets(): Uint32Array;
361
+ spillDerived(): Uint8Array;
362
+ }
363
+
260
364
  /**
261
365
  * A bulk window of resolved cells, row-major over `n_rows x n_cols`.
262
366
  */
@@ -310,27 +414,39 @@ export interface InitOutput {
310
414
  readonly __wbg_cellstore_free: (a: number, b: number) => void;
311
415
  readonly __wbg_distinctcolumn_free: (a: number, b: number) => void;
312
416
  readonly __wbg_rangesnapshot_free: (a: number, b: number) => void;
417
+ readonly __wbg_sourcesnapshot_free: (a: number, b: number) => void;
313
418
  readonly __wbg_windowview_free: (a: number, b: number) => void;
314
419
  readonly cellout_kind: (a: number) => number;
315
420
  readonly cellout_num: (a: number) => number;
316
421
  readonly cellout_string: (a: number) => [number, number];
317
422
  readonly cellout_style: (a: number) => number;
318
- readonly cellstore_addPagedSheet: (a: number, b: number, c: number, d: number, e: number) => number;
423
+ readonly cellstore_acknowledgeRevision: (a: number, b: bigint) => void;
424
+ readonly cellstore_addPagedSheet: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
319
425
  readonly cellstore_addRows: (a: number, b: number, c: number, d: number) => void;
320
426
  readonly cellstore_addSheet: (a: number, b: number, c: number) => number;
321
427
  readonly cellstore_aggregate: (a: number, b: number, c: number, d: number) => number;
428
+ readonly cellstore_beginMutation: (a: number) => bigint;
322
429
  readonly cellstore_beginPageLoad: (a: number) => void;
430
+ readonly cellstore_canDirtyCell: (a: number, b: number, c: number, d: number) => number;
323
431
  readonly cellstore_captureRange: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
432
+ readonly cellstore_captureReferences: (a: number, b: number, c: number) => number;
433
+ readonly cellstore_captureSources: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
434
+ readonly cellstore_captureSourcesForRows: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
324
435
  readonly cellstore_cellState: (a: number, b: number, c: number, d: number) => number;
325
436
  readonly cellstore_clearCell: (a: number, b: number, c: number, d: number, e: number) => void;
326
437
  readonly cellstore_clearRange: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => number;
327
438
  readonly cellstore_colCount: (a: number, b: number) => number;
439
+ readonly cellstore_columnsFullyLoaded: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
440
+ readonly cellstore_compactStringStorage: (a: number) => void;
328
441
  readonly cellstore_dataEdge: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
329
442
  readonly cellstore_dataEdgeOrdered: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => number;
443
+ readonly cellstore_dirtyRevision: (a: number, b: number, c: number, d: number) => bigint;
330
444
  readonly cellstore_distinctValues: (a: number, b: number, c: number, d: number) => number;
445
+ readonly cellstore_endMutation: (a: number) => void;
331
446
  readonly cellstore_endPageLoad: (a: number) => void;
332
447
  readonly cellstore_filterRows: (a: number, b: number, c: number, d: number, e: number) => [number, number];
333
448
  readonly cellstore_filterRowsMulti: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number) => [number, number];
449
+ readonly cellstore_formulaMatrixResourceStats: (a: number) => [number, number];
334
450
  readonly cellstore_formulaSource: (a: number, b: number, c: number, d: number) => [number, number];
335
451
  readonly cellstore_getCell: (a: number, b: number, c: number, d: number) => number;
336
452
  readonly cellstore_getWindow: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
@@ -341,27 +457,36 @@ export interface InitOutput {
341
457
  readonly cellstore_isFullyLoaded: (a: number, b: number) => number;
342
458
  readonly cellstore_isPaged: (a: number, b: number) => number;
343
459
  readonly cellstore_isSheetAlive: (a: number, b: number) => number;
460
+ readonly cellstore_markCellCleanRevision: (a: number, b: number, c: number, d: number, e: bigint) => number;
344
461
  readonly cellstore_markRangeClean: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
462
+ readonly cellstore_memoryStats: (a: number) => [number, number];
345
463
  readonly cellstore_new: () => number;
464
+ readonly cellstore_pagedDirtyCoordinates: (a: number, b: number) => [number, number];
346
465
  readonly cellstore_pagedStats: (a: number, b: number) => [number, number];
466
+ readonly cellstore_persistedCellData: (a: number, b: number) => [number, number];
347
467
  readonly cellstore_pinRange: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
348
468
  readonly cellstore_poolStrings: (a: number, b: number, c: number) => [number, number];
349
469
  readonly cellstore_queryResourceStats: (a: number) => [number, number];
350
470
  readonly cellstore_rangeFullyLoaded: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
351
471
  readonly cellstore_rangeStyleIds: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
352
472
  readonly cellstore_recompute: (a: number, b: number) => void;
473
+ readonly cellstore_recomputeChanged: (a: number) => void;
353
474
  readonly cellstore_recomputeVolatile: (a: number, b: number) => number;
475
+ readonly cellstore_referenceTarget: (a: number, b: number, c: number, d: number) => [number, number];
476
+ readonly cellstore_referencesTargeting: (a: number, b: number, c: number) => [number, number];
354
477
  readonly cellstore_remapRangeStyles: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => number;
355
478
  readonly cellstore_removeCols: (a: number, b: number, c: number, d: number) => void;
356
479
  readonly cellstore_removeNamedRange: (a: number, b: number, c: number, d: number) => number;
357
480
  readonly cellstore_removeRows: (a: number, b: number, c: number, d: number) => void;
358
481
  readonly cellstore_removeSheet: (a: number, b: number) => number;
482
+ readonly cellstore_removeTable: (a: number, b: number, c: number) => number;
359
483
  readonly cellstore_renameSheet: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
484
+ readonly cellstore_resetFormulaMatrixResourceStats: (a: number) => void;
360
485
  readonly cellstore_resetQueryResourceStats: (a: number) => void;
361
486
  readonly cellstore_restoreRange: (a: number, b: number, c: number, d: number, e: number) => number;
362
487
  readonly cellstore_rowCount: (a: number, b: number) => number;
363
488
  readonly cellstore_search: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
364
- readonly cellstore_setBlock: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number) => number;
489
+ readonly cellstore_setBlock: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number) => number;
365
490
  readonly cellstore_setBool: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
366
491
  readonly cellstore_setColumnNumbers: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
367
492
  readonly cellstore_setColumnStrings: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
@@ -371,12 +496,20 @@ export interface InitOutput {
371
496
  readonly cellstore_setNamedRange: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => number;
372
497
  readonly cellstore_setNumber: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
373
498
  readonly cellstore_setSheetName: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
499
+ readonly cellstore_setSparseBlock: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number) => number;
500
+ readonly cellstore_setSpillBlockers: (a: number, b: number, c: number, d: number) => number;
374
501
  readonly cellstore_setString: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
502
+ readonly cellstore_setTable: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number) => number;
375
503
  readonly cellstore_snapshotNumbers: (a: number, b: number) => [number, number];
376
504
  readonly cellstore_snapshotTexts: (a: number, b: number) => [number, number];
377
505
  readonly cellstore_sortRows: (a: number, b: number, c: number, d: number) => [number, number];
378
506
  readonly cellstore_sortRowsMulti: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
507
+ readonly cellstore_spillAnchorCol: (a: number, b: number, c: number, d: number) => number;
508
+ readonly cellstore_spillAnchorRow: (a: number, b: number, c: number, d: number) => number;
509
+ readonly cellstore_spillDerivedMask: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
510
+ readonly cellstore_spillOwnerCoordinates: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
379
511
  readonly cellstore_styleIdAt: (a: number, b: number, c: number, d: number) => number;
512
+ readonly cellstore_wasmCommittedBytes: (a: number) => number;
380
513
  readonly distinctcolumn_takeKinds: (a: number) => [number, number];
381
514
  readonly distinctcolumn_takeNumbers: (a: number) => [number, number];
382
515
  readonly distinctcolumn_takeTexts: (a: number) => [number, number];
@@ -384,7 +517,15 @@ export interface InitOutput {
384
517
  readonly rangesnapshot_formulaOffsets: (a: number) => [number, number];
385
518
  readonly rangesnapshot_formulaSources: (a: number) => [number, number];
386
519
  readonly rangesnapshot_kinds: (a: number) => [number, number];
520
+ readonly rangesnapshot_referenceOffsets: (a: number) => [number, number];
521
+ readonly rangesnapshot_referenceTargets: (a: number) => [number, number];
387
522
  readonly rangesnapshot_styleIds: (a: number) => [number, number];
523
+ readonly sourcesnapshot_byteLength: (a: number) => number;
524
+ readonly sourcesnapshot_formulaOffsets: (a: number) => [number, number];
525
+ readonly sourcesnapshot_formulaSources: (a: number) => [number, number];
526
+ readonly sourcesnapshot_referenceOffsets: (a: number) => [number, number];
527
+ readonly sourcesnapshot_referenceTargets: (a: number) => [number, number];
528
+ readonly sourcesnapshot_spillDerived: (a: number) => [number, number];
388
529
  readonly windowview_nCols: (a: number) => number;
389
530
  readonly windowview_nRows: (a: number) => number;
390
531
  readonly windowview_takeCondMatches: (a: number) => [number, number];
@@ -70,16 +70,23 @@ export class CellStore {
70
70
  const ptr = this.__destroy_into_raw();
71
71
  wasm.__wbg_cellstore_free(ptr, 0);
72
72
  }
73
+ /**
74
+ * @param {bigint} revision
75
+ */
76
+ acknowledgeRevision(revision) {
77
+ wasm.cellstore_acknowledgeRevision(this.__wbg_ptr, revision);
78
+ }
73
79
  /**
74
80
  * Allocate a logical sheet whose cell chunks materialize on page load or edit.
75
81
  * @param {number} n_cols
76
82
  * @param {number} row_count
77
83
  * @param {number} chunk_rows
78
84
  * @param {number} byte_budget
85
+ * @param {number} max_dirty_cells
79
86
  * @returns {number}
80
87
  */
81
- addPagedSheet(n_cols, row_count, chunk_rows, byte_budget) {
82
- const ret = wasm.cellstore_addPagedSheet(this.__wbg_ptr, n_cols, row_count, chunk_rows, byte_budget);
88
+ addPagedSheet(n_cols, row_count, chunk_rows, byte_budget, max_dirty_cells) {
89
+ const ret = wasm.cellstore_addPagedSheet(this.__wbg_ptr, n_cols, row_count, chunk_rows, byte_budget, max_dirty_cells);
83
90
  return ret >>> 0;
84
91
  }
85
92
  /**
@@ -111,9 +118,26 @@ export class CellStore {
111
118
  const ret = wasm.cellstore_aggregate(this.__wbg_ptr, sheet, col, op);
112
119
  return ret;
113
120
  }
121
+ /**
122
+ * @returns {bigint}
123
+ */
124
+ beginMutation() {
125
+ const ret = wasm.cellstore_beginMutation(this.__wbg_ptr);
126
+ return BigInt.asUintN(64, ret);
127
+ }
114
128
  beginPageLoad() {
115
129
  wasm.cellstore_beginPageLoad(this.__wbg_ptr);
116
130
  }
131
+ /**
132
+ * @param {number} sheet
133
+ * @param {number} row
134
+ * @param {number} col
135
+ * @returns {boolean}
136
+ */
137
+ canDirtyCell(sheet, row, col) {
138
+ const ret = wasm.cellstore_canDirtyCell(this.__wbg_ptr, sheet, row, col);
139
+ return ret !== 0;
140
+ }
117
141
  /**
118
142
  * Capture a dense rectangle into an opaque store-local history resource.
119
143
  * @param {number} sheet
@@ -127,6 +151,48 @@ export class CellStore {
127
151
  const ret = wasm.cellstore_captureRange(this.__wbg_ptr, sheet, r0, c0, rows, cols);
128
152
  return ret === 0 ? undefined : RangeSnapshot.__wrap(ret);
129
153
  }
154
+ /**
155
+ * Capture only persisted references for one sheet. The explicit entry cap
156
+ * bounds allocation for host-side structural admission simulation.
157
+ * @param {number} sheet
158
+ * @param {number} max_entries
159
+ * @returns {SourceSnapshot | undefined}
160
+ */
161
+ captureReferences(sheet, max_entries) {
162
+ const ret = wasm.cellstore_captureReferences(this.__wbg_ptr, sheet, max_entries);
163
+ return ret === 0 ? undefined : SourceSnapshot.__wrap(ret);
164
+ }
165
+ /**
166
+ * Capture only persisted formula/reference sources in a rectangle. The
167
+ * returned opaque object is compact in source cardinality, not cell count.
168
+ * @param {number} sheet
169
+ * @param {number} r0
170
+ * @param {number} c0
171
+ * @param {number} rows
172
+ * @param {number} cols
173
+ * @returns {SourceSnapshot | undefined}
174
+ */
175
+ captureSources(sheet, r0, c0, rows, cols) {
176
+ const ret = wasm.cellstore_captureSources(this.__wbg_ptr, sheet, r0, c0, rows, cols);
177
+ return ret === 0 ? undefined : SourceSnapshot.__wrap(ret);
178
+ }
179
+ /**
180
+ * Capture persisted formula/reference sources and derived-spill identity
181
+ * for arbitrary row/column coordinates in one boundary crossing. Offsets
182
+ * follow the caller's row-major coordinate order.
183
+ * @param {number} sheet
184
+ * @param {Uint32Array} rows
185
+ * @param {Uint32Array} cols
186
+ * @returns {SourceSnapshot | undefined}
187
+ */
188
+ captureSourcesForRows(sheet, rows, cols) {
189
+ const ptr0 = passArray32ToWasm0(rows, wasm.__wbindgen_malloc);
190
+ const len0 = WASM_VECTOR_LEN;
191
+ const ptr1 = passArray32ToWasm0(cols, wasm.__wbindgen_malloc);
192
+ const len1 = WASM_VECTOR_LEN;
193
+ const ret = wasm.cellstore_captureSourcesForRows(this.__wbg_ptr, sheet, ptr0, len0, ptr1, len1);
194
+ return ret === 0 ? undefined : SourceSnapshot.__wrap(ret);
195
+ }
130
196
  /**
131
197
  * 0 unloaded, 1 loaded-empty, 2 loaded-value, 3 dirty local edit.
132
198
  * @param {number} sheet
@@ -170,6 +236,25 @@ export class CellStore {
170
236
  const ret = wasm.cellstore_colCount(this.__wbg_ptr, sheet);
171
237
  return ret >>> 0;
172
238
  }
239
+ /**
240
+ * @param {number} sheet
241
+ * @param {number} start_row
242
+ * @param {number} end_row
243
+ * @param {Uint32Array} cols
244
+ * @returns {boolean}
245
+ */
246
+ columnsFullyLoaded(sheet, start_row, end_row, cols) {
247
+ const ptr0 = passArray32ToWasm0(cols, wasm.__wbindgen_malloc);
248
+ const len0 = WASM_VECTOR_LEN;
249
+ const ret = wasm.cellstore_columnsFullyLoaded(this.__wbg_ptr, sheet, start_row, end_row, ptr0, len0);
250
+ return ret !== 0;
251
+ }
252
+ /**
253
+ * Release geometric growth slack after a bounded bulk ingest.
254
+ */
255
+ compactStringStorage() {
256
+ wasm.cellstore_compactStringStorage(this.__wbg_ptr);
257
+ }
173
258
  /**
174
259
  * Ctrl+Arrow destination: from `(row, col)` stepping by `(d_row, d_col)`
175
260
  * (exactly one of them ±1), return the destination row (vertical moves) or
@@ -205,6 +290,16 @@ export class CellStore {
205
290
  const ret = wasm.cellstore_dataEdgeOrdered(this.__wbg_ptr, sheet, ptr0, len0, row, col, d_row, d_col);
206
291
  return ret >>> 0;
207
292
  }
293
+ /**
294
+ * @param {number} sheet
295
+ * @param {number} row
296
+ * @param {number} col
297
+ * @returns {bigint}
298
+ */
299
+ dirtyRevision(sheet, row, col) {
300
+ const ret = wasm.cellstore_dirtyRevision(this.__wbg_ptr, sheet, row, col);
301
+ return BigInt.asUintN(64, ret);
302
+ }
208
303
  /**
209
304
  * @param {number} sheet
210
305
  * @param {number} col
@@ -215,6 +310,9 @@ export class CellStore {
215
310
  const ret = wasm.cellstore_distinctValues(this.__wbg_ptr, sheet, col, limit);
216
311
  return DistinctColumn.__wrap(ret);
217
312
  }
313
+ endMutation() {
314
+ wasm.cellstore_endMutation(this.__wbg_ptr);
315
+ }
218
316
  endPageLoad() {
219
317
  wasm.cellstore_endPageLoad(this.__wbg_ptr);
220
318
  }
@@ -267,6 +365,16 @@ export class CellStore {
267
365
  wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
268
366
  return v9;
269
367
  }
368
+ /**
369
+ * Benchmark diagnostic: `[current matrix bytes, peak matrix bytes, allocations]`.
370
+ * @returns {Float64Array}
371
+ */
372
+ formulaMatrixResourceStats() {
373
+ const ret = wasm.cellstore_formulaMatrixResourceStats(this.__wbg_ptr);
374
+ var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
375
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
376
+ return v1;
377
+ }
270
378
  /**
271
379
  * @param {number} sheet
272
380
  * @param {number} row
@@ -395,6 +503,17 @@ export class CellStore {
395
503
  const ret = wasm.cellstore_isSheetAlive(this.__wbg_ptr, sheet);
396
504
  return ret !== 0;
397
505
  }
506
+ /**
507
+ * @param {number} sheet
508
+ * @param {number} row
509
+ * @param {number} col
510
+ * @param {bigint} revision
511
+ * @returns {boolean}
512
+ */
513
+ markCellCleanRevision(sheet, row, col, revision) {
514
+ const ret = wasm.cellstore_markCellCleanRevision(this.__wbg_ptr, sheet, row, col, revision);
515
+ return ret !== 0;
516
+ }
398
517
  /**
399
518
  * @param {number} sheet
400
519
  * @param {number} start_row
@@ -405,6 +524,15 @@ export class CellStore {
405
524
  markRangeClean(sheet, start_row, end_row, start_col, end_col) {
406
525
  wasm.cellstore_markRangeClean(this.__wbg_ptr, sheet, start_row, end_row, start_col, end_col);
407
526
  }
527
+ /**
528
+ * @returns {Float64Array}
529
+ */
530
+ memoryStats() {
531
+ const ret = wasm.cellstore_memoryStats(this.__wbg_ptr);
532
+ var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
533
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
534
+ return v1;
535
+ }
408
536
  constructor() {
409
537
  const ret = wasm.cellstore_new();
410
538
  this.__wbg_ptr = ret;
@@ -412,7 +540,17 @@ export class CellStore {
412
540
  return this;
413
541
  }
414
542
  /**
415
- * `[chunks, loaded cells, dirty cells, allocated bytes, fully loaded]`.
543
+ * @param {number} sheet
544
+ * @returns {Float64Array}
545
+ */
546
+ pagedDirtyCoordinates(sheet) {
547
+ const ret = wasm.cellstore_pagedDirtyCoordinates(this.__wbg_ptr, sheet);
548
+ var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
549
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
550
+ return v1;
551
+ }
552
+ /**
553
+ * `[chunks, loaded cells, dirty cells, clean chunk bytes, fully loaded, dirty bytes]`.
416
554
  * @param {number} sheet
417
555
  * @returns {Float64Array}
418
556
  */
@@ -422,6 +560,21 @@ export class CellStore {
422
560
  wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
423
561
  return v1;
424
562
  }
563
+ /**
564
+ * Sparse persisted-cell records. Each record starts with
565
+ * `[row, col, kind, number, style, string_id, source_kind, source_length]`.
566
+ * Formula UTF-8 is packed into little-endian u32 words; references append
567
+ * one `[sheet, row, col]` triple. The allocation scales with serialized
568
+ * cells and source bytes, never the logical sheet rectangle.
569
+ * @param {number} sheet
570
+ * @returns {Float64Array}
571
+ */
572
+ persistedCellData(sheet) {
573
+ const ret = wasm.cellstore_persistedCellData(this.__wbg_ptr, sheet);
574
+ var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
575
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
576
+ return v1;
577
+ }
425
578
  /**
426
579
  * @param {number} sheet
427
580
  * @param {number} start_row
@@ -494,6 +647,13 @@ export class CellStore {
494
647
  recompute(sheet) {
495
648
  wasm.cellstore_recompute(this.__wbg_ptr, sheet);
496
649
  }
650
+ /**
651
+ * Recompute the union of every dirty sheet once at the host transaction
652
+ * barrier, including cross-sheet formula and plain-reference dependents.
653
+ */
654
+ recomputeChanged() {
655
+ wasm.cellstore_recomputeChanged(this.__wbg_ptr);
656
+ }
497
657
  /**
498
658
  * Explicit volatile barrier. `serial` is a UTC spreadsheet serial using
499
659
  * the 1899-12-30 epoch; only TODAY/NOW formulas and their dependents dirty.
@@ -504,6 +664,37 @@ export class CellStore {
504
664
  const ret = wasm.cellstore_recomputeVolatile(this.__wbg_ptr, serial);
505
665
  return ret !== 0;
506
666
  }
667
+ /**
668
+ * @param {number} sheet
669
+ * @param {number} row
670
+ * @param {number} col
671
+ * @returns {Uint32Array | undefined}
672
+ */
673
+ referenceTarget(sheet, row, col) {
674
+ const ret = wasm.cellstore_referenceTarget(this.__wbg_ptr, sheet, row, col);
675
+ let v1;
676
+ if (ret[0] !== 0) {
677
+ v1 = getArrayU32FromWasm0(ret[0], ret[1]).slice();
678
+ wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
679
+ }
680
+ return v1;
681
+ }
682
+ /**
683
+ * Return packed `[source_sheet, source_row, source_col, ...]` references
684
+ * targeting one sheet, bounded before crossing into the host.
685
+ * @param {number} target_sheet
686
+ * @param {number} max_entries
687
+ * @returns {Uint32Array | undefined}
688
+ */
689
+ referencesTargeting(target_sheet, max_entries) {
690
+ const ret = wasm.cellstore_referencesTargeting(this.__wbg_ptr, target_sheet, max_entries);
691
+ let v1;
692
+ if (ret[0] !== 0) {
693
+ v1 = getArrayU32FromWasm0(ret[0], ret[1]).slice();
694
+ wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
695
+ }
696
+ return v1;
697
+ }
507
698
  /**
508
699
  * Remap styles over a rectangle using parallel old/new id tables.
509
700
  * @param {number} sheet
@@ -559,6 +750,16 @@ export class CellStore {
559
750
  const ret = wasm.cellstore_removeSheet(this.__wbg_ptr, sheet);
560
751
  return ret !== 0;
561
752
  }
753
+ /**
754
+ * @param {string} id
755
+ * @returns {boolean}
756
+ */
757
+ removeTable(id) {
758
+ const ptr0 = passStringToWasm0(id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
759
+ const len0 = WASM_VECTOR_LEN;
760
+ const ret = wasm.cellstore_removeTable(this.__wbg_ptr, ptr0, len0);
761
+ return ret !== 0;
762
+ }
562
763
  /**
563
764
  * Rename a live stable sheet handle and rewrite every resolved formula AST reference.
564
765
  * @param {number} sheet
@@ -574,6 +775,9 @@ export class CellStore {
574
775
  const ret = wasm.cellstore_renameSheet(this.__wbg_ptr, sheet, ptr0, len0, ptr1, len1);
575
776
  return ret !== 0;
576
777
  }
778
+ resetFormulaMatrixResourceStats() {
779
+ wasm.cellstore_resetFormulaMatrixResourceStats(this.__wbg_ptr);
780
+ }
577
781
  resetQueryResourceStats() {
578
782
  wasm.cellstore_resetQueryResourceStats(this.__wbg_ptr);
579
783
  }
@@ -620,9 +824,11 @@ export class CellStore {
620
824
  return v3;
621
825
  }
622
826
  /**
623
- * Write one row-major typed block in a single boundary call. `kinds` uses
624
- * 0 empty / 1 number / 2 string; formulas and references are sparse host
625
- * exceptions applied after this literal bulk write.
827
+ * Atomically write one row-major mixed literal/formula/reference block.
828
+ * Formula/reference offsets are sparse row-major exceptions. Reference
829
+ * targets are packed `[sheet_handle, row, col]` triples. The compact
830
+ * status is `0` success, `1` invalid shape/bounds, `2` invalid or duplicate
831
+ * source metadata, and `3` paged dirty-capacity rejection.
626
832
  * @param {number} sheet
627
833
  * @param {number} start_row
628
834
  * @param {number} start_col
@@ -632,9 +838,13 @@ export class CellStore {
632
838
  * @param {Float64Array} numbers
633
839
  * @param {string[]} texts
634
840
  * @param {Uint32Array} styles
635
- * @returns {boolean}
841
+ * @param {Uint32Array} formula_offsets
842
+ * @param {string[]} formula_sources
843
+ * @param {Uint32Array} reference_offsets
844
+ * @param {Uint32Array} reference_targets
845
+ * @returns {number}
636
846
  */
637
- setBlock(sheet, start_row, start_col, rows, cols, kinds, numbers, texts, styles) {
847
+ setBlock(sheet, start_row, start_col, rows, cols, kinds, numbers, texts, styles, formula_offsets, formula_sources, reference_offsets, reference_targets) {
638
848
  const ptr0 = passArray8ToWasm0(kinds, wasm.__wbindgen_malloc);
639
849
  const len0 = WASM_VECTOR_LEN;
640
850
  const ptr1 = passArrayF64ToWasm0(numbers, wasm.__wbindgen_malloc);
@@ -643,8 +853,16 @@ export class CellStore {
643
853
  const len2 = WASM_VECTOR_LEN;
644
854
  const ptr3 = passArray32ToWasm0(styles, wasm.__wbindgen_malloc);
645
855
  const len3 = WASM_VECTOR_LEN;
646
- const ret = wasm.cellstore_setBlock(this.__wbg_ptr, sheet, start_row, start_col, rows, cols, ptr0, len0, ptr1, len1, ptr2, len2, ptr3, len3);
647
- return ret !== 0;
856
+ const ptr4 = passArray32ToWasm0(formula_offsets, wasm.__wbindgen_malloc);
857
+ const len4 = WASM_VECTOR_LEN;
858
+ const ptr5 = passArrayJsValueToWasm0(formula_sources, wasm.__wbindgen_malloc);
859
+ const len5 = WASM_VECTOR_LEN;
860
+ const ptr6 = passArray32ToWasm0(reference_offsets, wasm.__wbindgen_malloc);
861
+ const len6 = WASM_VECTOR_LEN;
862
+ const ptr7 = passArray32ToWasm0(reference_targets, wasm.__wbindgen_malloc);
863
+ const len7 = WASM_VECTOR_LEN;
864
+ const ret = wasm.cellstore_setBlock(this.__wbg_ptr, sheet, start_row, start_col, rows, cols, ptr0, len0, ptr1, len1, ptr2, len2, ptr3, len3, ptr4, len4, ptr5, len5, ptr6, len6, ptr7, len7);
865
+ return ret >>> 0;
648
866
  }
649
867
  /**
650
868
  * @param {number} sheet
@@ -704,10 +922,10 @@ export class CellStore {
704
922
  /**
705
923
  * Replace a sheet's conditional-format rules. Packed columnar encoding,
706
924
  * one entry per rule: `kinds` 0 gt / 1 lt / 2 eqNum / 3 eqStr / 4 eqEmpty /
707
- * 5 contains; `bounds` = normalized `[r0, c0, r1, c1]` per rule; `nums`
708
- * carries the numeric operand; `strs` the text operand; `flags` bit 0 =
709
- * match-case for `contains`. Case-insensitive needles are lowercased here
710
- * once so the per-cell match never allocates.
925
+ * 5 contains / 6 boolean formula; `bounds` = normalized `[r0, c0, r1, c1]`
926
+ * per rule; `nums` carries the numeric operand; `strs` the text/formula
927
+ * operand; `flags` bit 0 = match-case for `contains`, bit 1 = stop-if-true.
928
+ * Formula strings are parsed once here, never once per visible cell.
711
929
  * @param {number} sheet
712
930
  * @param {Uint8Array} kinds
713
931
  * @param {Uint32Array} bounds
@@ -787,6 +1005,62 @@ export class CellStore {
787
1005
  const len1 = WASM_VECTOR_LEN;
788
1006
  wasm.cellstore_setSheetName(this.__wbg_ptr, sheet, ptr0, len0, ptr1, len1);
789
1007
  }
1008
+ /**
1009
+ * Write one sparse mixed transaction/page/snapshot block without
1010
+ * allocating by logical rectangle size. Inside `beginPageLoad`, dirty
1011
+ * paged cells are skipped; otherwise the whole sparse write is preflighted.
1012
+ * @param {number} sheet
1013
+ * @param {number} start_row
1014
+ * @param {number} start_col
1015
+ * @param {number} rows
1016
+ * @param {number} cols
1017
+ * @param {Uint32Array} offsets
1018
+ * @param {Uint8Array} kinds
1019
+ * @param {Float64Array} numbers
1020
+ * @param {string[]} texts
1021
+ * @param {Uint32Array} styles
1022
+ * @param {Uint32Array} formula_offsets
1023
+ * @param {string[]} formula_sources
1024
+ * @param {Uint32Array} reference_offsets
1025
+ * @param {Uint32Array} reference_targets
1026
+ * @returns {number}
1027
+ */
1028
+ setSparseBlock(sheet, start_row, start_col, rows, cols, offsets, kinds, numbers, texts, styles, formula_offsets, formula_sources, reference_offsets, reference_targets) {
1029
+ const ptr0 = passArray32ToWasm0(offsets, wasm.__wbindgen_malloc);
1030
+ const len0 = WASM_VECTOR_LEN;
1031
+ const ptr1 = passArray8ToWasm0(kinds, wasm.__wbindgen_malloc);
1032
+ const len1 = WASM_VECTOR_LEN;
1033
+ const ptr2 = passArrayF64ToWasm0(numbers, wasm.__wbindgen_malloc);
1034
+ const len2 = WASM_VECTOR_LEN;
1035
+ const ptr3 = passArrayJsValueToWasm0(texts, wasm.__wbindgen_malloc);
1036
+ const len3 = WASM_VECTOR_LEN;
1037
+ const ptr4 = passArray32ToWasm0(styles, wasm.__wbindgen_malloc);
1038
+ const len4 = WASM_VECTOR_LEN;
1039
+ const ptr5 = passArray32ToWasm0(formula_offsets, wasm.__wbindgen_malloc);
1040
+ const len5 = WASM_VECTOR_LEN;
1041
+ const ptr6 = passArrayJsValueToWasm0(formula_sources, wasm.__wbindgen_malloc);
1042
+ const len6 = WASM_VECTOR_LEN;
1043
+ const ptr7 = passArray32ToWasm0(reference_offsets, wasm.__wbindgen_malloc);
1044
+ const len7 = WASM_VECTOR_LEN;
1045
+ const ptr8 = passArray32ToWasm0(reference_targets, wasm.__wbindgen_malloc);
1046
+ const len8 = WASM_VECTOR_LEN;
1047
+ const ret = wasm.cellstore_setSparseBlock(this.__wbg_ptr, sheet, start_row, start_col, rows, cols, ptr0, len0, ptr1, len1, ptr2, len2, ptr3, len3, ptr4, len4, ptr5, len5, ptr6, len6, ptr7, len7, ptr8, len8);
1048
+ return ret >>> 0;
1049
+ }
1050
+ /**
1051
+ * Replace the host-owned merge/protection collision ranges. Packed as
1052
+ * `[row_start, col_start, row_end, col_end, ...]`; invalid input fails
1053
+ * without weakening the old gate.
1054
+ * @param {number} sheet
1055
+ * @param {Uint32Array} bounds
1056
+ * @returns {boolean}
1057
+ */
1058
+ setSpillBlockers(sheet, bounds) {
1059
+ const ptr0 = passArray32ToWasm0(bounds, wasm.__wbindgen_malloc);
1060
+ const len0 = WASM_VECTOR_LEN;
1061
+ const ret = wasm.cellstore_setSpillBlockers(this.__wbg_ptr, sheet, ptr0, len0);
1062
+ return ret !== 0;
1063
+ }
790
1064
  /**
791
1065
  * @param {number} sheet
792
1066
  * @param {number} row
@@ -799,6 +1073,32 @@ export class CellStore {
799
1073
  const len0 = WASM_VECTOR_LEN;
800
1074
  wasm.cellstore_setString(this.__wbg_ptr, sheet, row, col, ptr0, len0, style);
801
1075
  }
1076
+ /**
1077
+ * @param {string} id
1078
+ * @param {string} name
1079
+ * @param {number} sheet
1080
+ * @param {number} row_start
1081
+ * @param {number} col_start
1082
+ * @param {number} row_end
1083
+ * @param {number} col_end
1084
+ * @param {boolean} header_row
1085
+ * @param {boolean} totals_row
1086
+ * @param {string[]} column_ids
1087
+ * @param {string[]} column_names
1088
+ * @returns {boolean}
1089
+ */
1090
+ setTable(id, name, sheet, row_start, col_start, row_end, col_end, header_row, totals_row, column_ids, column_names) {
1091
+ const ptr0 = passStringToWasm0(id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
1092
+ const len0 = WASM_VECTOR_LEN;
1093
+ const ptr1 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
1094
+ const len1 = WASM_VECTOR_LEN;
1095
+ const ptr2 = passArrayJsValueToWasm0(column_ids, wasm.__wbindgen_malloc);
1096
+ const len2 = WASM_VECTOR_LEN;
1097
+ const ptr3 = passArrayJsValueToWasm0(column_names, wasm.__wbindgen_malloc);
1098
+ const len3 = WASM_VECTOR_LEN;
1099
+ const ret = wasm.cellstore_setTable(this.__wbg_ptr, ptr0, len0, ptr1, len1, sheet, row_start, col_start, row_end, col_end, header_row, totals_row, ptr2, len2, ptr3, len3);
1100
+ return ret !== 0;
1101
+ }
802
1102
  /**
803
1103
  * @param {RangeSnapshot} snapshot
804
1104
  * @returns {Float64Array}
@@ -853,6 +1153,61 @@ export class CellStore {
853
1153
  wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
854
1154
  return v4;
855
1155
  }
1156
+ /**
1157
+ * @param {number} sheet
1158
+ * @param {number} row
1159
+ * @param {number} col
1160
+ * @returns {number}
1161
+ */
1162
+ spillAnchorCol(sheet, row, col) {
1163
+ const ret = wasm.cellstore_spillAnchorCol(this.__wbg_ptr, sheet, row, col);
1164
+ return ret >>> 0;
1165
+ }
1166
+ /**
1167
+ * Stable spill owner coordinate, or `u32::MAX` when `cell` is not part of
1168
+ * a materialized spill.
1169
+ * @param {number} sheet
1170
+ * @param {number} row
1171
+ * @param {number} col
1172
+ * @returns {number}
1173
+ */
1174
+ spillAnchorRow(sheet, row, col) {
1175
+ const ret = wasm.cellstore_spillAnchorRow(this.__wbg_ptr, sheet, row, col);
1176
+ return ret >>> 0;
1177
+ }
1178
+ /**
1179
+ * Row-major mask aligned with render-window layout; `1` marks a derived
1180
+ * spill cell and deliberately excludes the anchor.
1181
+ * @param {number} sheet
1182
+ * @param {number} row_start
1183
+ * @param {number} row_end
1184
+ * @param {Uint32Array} cols
1185
+ * @returns {Uint8Array}
1186
+ */
1187
+ spillDerivedMask(sheet, row_start, row_end, cols) {
1188
+ const ptr0 = passArray32ToWasm0(cols, wasm.__wbindgen_malloc);
1189
+ const len0 = WASM_VECTOR_LEN;
1190
+ const ret = wasm.cellstore_spillDerivedMask(this.__wbg_ptr, sheet, row_start, row_end, ptr0, len0);
1191
+ var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
1192
+ wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
1193
+ return v2;
1194
+ }
1195
+ /**
1196
+ * Packed row-major `[anchor_row, anchor_col, ...]` owner coordinates.
1197
+ * @param {number} sheet
1198
+ * @param {number} row_start
1199
+ * @param {number} row_end
1200
+ * @param {Uint32Array} cols
1201
+ * @returns {Uint32Array}
1202
+ */
1203
+ spillOwnerCoordinates(sheet, row_start, row_end, cols) {
1204
+ const ptr0 = passArray32ToWasm0(cols, wasm.__wbindgen_malloc);
1205
+ const len0 = WASM_VECTOR_LEN;
1206
+ const ret = wasm.cellstore_spillOwnerCoordinates(this.__wbg_ptr, sheet, row_start, row_end, ptr0, len0);
1207
+ var v2 = getArrayU32FromWasm0(ret[0], ret[1]).slice();
1208
+ wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
1209
+ return v2;
1210
+ }
856
1211
  /**
857
1212
  * Current style-dictionary id at a cell; `0` when out of bounds. Used by
858
1213
  * the host to write derived (reference-shadow) values without disturbing
@@ -866,6 +1221,13 @@ export class CellStore {
866
1221
  const ret = wasm.cellstore_styleIdAt(this.__wbg_ptr, sheet, row, col);
867
1222
  return ret >>> 0;
868
1223
  }
1224
+ /**
1225
+ * @returns {number}
1226
+ */
1227
+ wasmCommittedBytes() {
1228
+ const ret = wasm.cellstore_wasmCommittedBytes(this.__wbg_ptr);
1229
+ return ret >>> 0;
1230
+ }
869
1231
  }
870
1232
  if (Symbol.dispose) CellStore.prototype[Symbol.dispose] = CellStore.prototype.free;
871
1233
 
@@ -982,6 +1344,24 @@ export class RangeSnapshot {
982
1344
  wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
983
1345
  return v1;
984
1346
  }
1347
+ /**
1348
+ * @returns {Uint32Array}
1349
+ */
1350
+ referenceOffsets() {
1351
+ const ret = wasm.rangesnapshot_referenceOffsets(this.__wbg_ptr);
1352
+ var v1 = getArrayU32FromWasm0(ret[0], ret[1]).slice();
1353
+ wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
1354
+ return v1;
1355
+ }
1356
+ /**
1357
+ * @returns {Uint32Array}
1358
+ */
1359
+ referenceTargets() {
1360
+ const ret = wasm.rangesnapshot_referenceTargets(this.__wbg_ptr);
1361
+ var v1 = getArrayU32FromWasm0(ret[0], ret[1]).slice();
1362
+ wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
1363
+ return v1;
1364
+ }
985
1365
  /**
986
1366
  * @returns {Uint32Array}
987
1367
  */
@@ -994,6 +1374,83 @@ export class RangeSnapshot {
994
1374
  }
995
1375
  if (Symbol.dispose) RangeSnapshot.prototype[Symbol.dispose] = RangeSnapshot.prototype.free;
996
1376
 
1377
+ /**
1378
+ * Compact serializable projection of persisted derived-cell sources and spill
1379
+ * identity in one range. Offsets are row-major and sorted; reference targets
1380
+ * are packed `[sheet_handle, row, col]` triples.
1381
+ */
1382
+ export class SourceSnapshot {
1383
+ static __wrap(ptr) {
1384
+ const obj = Object.create(SourceSnapshot.prototype);
1385
+ obj.__wbg_ptr = ptr;
1386
+ SourceSnapshotFinalization.register(obj, obj.__wbg_ptr, obj);
1387
+ return obj;
1388
+ }
1389
+ __destroy_into_raw() {
1390
+ const ptr = this.__wbg_ptr;
1391
+ this.__wbg_ptr = 0;
1392
+ SourceSnapshotFinalization.unregister(this);
1393
+ return ptr;
1394
+ }
1395
+ free() {
1396
+ const ptr = this.__destroy_into_raw();
1397
+ wasm.__wbg_sourcesnapshot_free(ptr, 0);
1398
+ }
1399
+ /**
1400
+ * @returns {number}
1401
+ */
1402
+ byteLength() {
1403
+ const ret = wasm.sourcesnapshot_byteLength(this.__wbg_ptr);
1404
+ return ret >>> 0;
1405
+ }
1406
+ /**
1407
+ * @returns {Uint32Array}
1408
+ */
1409
+ formulaOffsets() {
1410
+ const ret = wasm.sourcesnapshot_formulaOffsets(this.__wbg_ptr);
1411
+ var v1 = getArrayU32FromWasm0(ret[0], ret[1]).slice();
1412
+ wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
1413
+ return v1;
1414
+ }
1415
+ /**
1416
+ * @returns {string[]}
1417
+ */
1418
+ formulaSources() {
1419
+ const ret = wasm.sourcesnapshot_formulaSources(this.__wbg_ptr);
1420
+ var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();
1421
+ wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
1422
+ return v1;
1423
+ }
1424
+ /**
1425
+ * @returns {Uint32Array}
1426
+ */
1427
+ referenceOffsets() {
1428
+ const ret = wasm.sourcesnapshot_referenceOffsets(this.__wbg_ptr);
1429
+ var v1 = getArrayU32FromWasm0(ret[0], ret[1]).slice();
1430
+ wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
1431
+ return v1;
1432
+ }
1433
+ /**
1434
+ * @returns {Uint32Array}
1435
+ */
1436
+ referenceTargets() {
1437
+ const ret = wasm.sourcesnapshot_referenceTargets(this.__wbg_ptr);
1438
+ var v1 = getArrayU32FromWasm0(ret[0], ret[1]).slice();
1439
+ wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
1440
+ return v1;
1441
+ }
1442
+ /**
1443
+ * @returns {Uint8Array}
1444
+ */
1445
+ spillDerived() {
1446
+ const ret = wasm.sourcesnapshot_spillDerived(this.__wbg_ptr);
1447
+ var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
1448
+ wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
1449
+ return v1;
1450
+ }
1451
+ }
1452
+ if (Symbol.dispose) SourceSnapshot.prototype[Symbol.dispose] = SourceSnapshot.prototype.free;
1453
+
997
1454
  /**
998
1455
  * A bulk window of resolved cells, row-major over `n_rows x n_cols`.
999
1456
  */
@@ -1159,6 +1616,9 @@ const DistinctColumnFinalization = (typeof FinalizationRegistry === 'undefined')
1159
1616
  const RangeSnapshotFinalization = (typeof FinalizationRegistry === 'undefined')
1160
1617
  ? { register: () => {}, unregister: () => {} }
1161
1618
  : new FinalizationRegistry(ptr => wasm.__wbg_rangesnapshot_free(ptr, 1));
1619
+ const SourceSnapshotFinalization = (typeof FinalizationRegistry === 'undefined')
1620
+ ? { register: () => {}, unregister: () => {} }
1621
+ : new FinalizationRegistry(ptr => wasm.__wbg_sourcesnapshot_free(ptr, 1));
1162
1622
  const WindowViewFinalization = (typeof FinalizationRegistry === 'undefined')
1163
1623
  ? { register: () => {}, unregister: () => {} }
1164
1624
  : new FinalizationRegistry(ptr => wasm.__wbg_windowview_free(ptr, 1));
Binary file
@@ -5,27 +5,39 @@ export const __wbg_cellout_free: (a: number, b: number) => void;
5
5
  export const __wbg_cellstore_free: (a: number, b: number) => void;
6
6
  export const __wbg_distinctcolumn_free: (a: number, b: number) => void;
7
7
  export const __wbg_rangesnapshot_free: (a: number, b: number) => void;
8
+ export const __wbg_sourcesnapshot_free: (a: number, b: number) => void;
8
9
  export const __wbg_windowview_free: (a: number, b: number) => void;
9
10
  export const cellout_kind: (a: number) => number;
10
11
  export const cellout_num: (a: number) => number;
11
12
  export const cellout_string: (a: number) => [number, number];
12
13
  export const cellout_style: (a: number) => number;
13
- export const cellstore_addPagedSheet: (a: number, b: number, c: number, d: number, e: number) => number;
14
+ export const cellstore_acknowledgeRevision: (a: number, b: bigint) => void;
15
+ export const cellstore_addPagedSheet: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
14
16
  export const cellstore_addRows: (a: number, b: number, c: number, d: number) => void;
15
17
  export const cellstore_addSheet: (a: number, b: number, c: number) => number;
16
18
  export const cellstore_aggregate: (a: number, b: number, c: number, d: number) => number;
19
+ export const cellstore_beginMutation: (a: number) => bigint;
17
20
  export const cellstore_beginPageLoad: (a: number) => void;
21
+ export const cellstore_canDirtyCell: (a: number, b: number, c: number, d: number) => number;
18
22
  export const cellstore_captureRange: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
23
+ export const cellstore_captureReferences: (a: number, b: number, c: number) => number;
24
+ export const cellstore_captureSources: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
25
+ export const cellstore_captureSourcesForRows: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
19
26
  export const cellstore_cellState: (a: number, b: number, c: number, d: number) => number;
20
27
  export const cellstore_clearCell: (a: number, b: number, c: number, d: number, e: number) => void;
21
28
  export const cellstore_clearRange: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => number;
22
29
  export const cellstore_colCount: (a: number, b: number) => number;
30
+ export const cellstore_columnsFullyLoaded: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
31
+ export const cellstore_compactStringStorage: (a: number) => void;
23
32
  export const cellstore_dataEdge: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
24
33
  export const cellstore_dataEdgeOrdered: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => number;
34
+ export const cellstore_dirtyRevision: (a: number, b: number, c: number, d: number) => bigint;
25
35
  export const cellstore_distinctValues: (a: number, b: number, c: number, d: number) => number;
36
+ export const cellstore_endMutation: (a: number) => void;
26
37
  export const cellstore_endPageLoad: (a: number) => void;
27
38
  export const cellstore_filterRows: (a: number, b: number, c: number, d: number, e: number) => [number, number];
28
39
  export const cellstore_filterRowsMulti: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number) => [number, number];
40
+ export const cellstore_formulaMatrixResourceStats: (a: number) => [number, number];
29
41
  export const cellstore_formulaSource: (a: number, b: number, c: number, d: number) => [number, number];
30
42
  export const cellstore_getCell: (a: number, b: number, c: number, d: number) => number;
31
43
  export const cellstore_getWindow: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
@@ -36,27 +48,36 @@ export const cellstore_insertCols: (a: number, b: number, c: number, d: number)
36
48
  export const cellstore_isFullyLoaded: (a: number, b: number) => number;
37
49
  export const cellstore_isPaged: (a: number, b: number) => number;
38
50
  export const cellstore_isSheetAlive: (a: number, b: number) => number;
51
+ export const cellstore_markCellCleanRevision: (a: number, b: number, c: number, d: number, e: bigint) => number;
39
52
  export const cellstore_markRangeClean: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
53
+ export const cellstore_memoryStats: (a: number) => [number, number];
40
54
  export const cellstore_new: () => number;
55
+ export const cellstore_pagedDirtyCoordinates: (a: number, b: number) => [number, number];
41
56
  export const cellstore_pagedStats: (a: number, b: number) => [number, number];
57
+ export const cellstore_persistedCellData: (a: number, b: number) => [number, number];
42
58
  export const cellstore_pinRange: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
43
59
  export const cellstore_poolStrings: (a: number, b: number, c: number) => [number, number];
44
60
  export const cellstore_queryResourceStats: (a: number) => [number, number];
45
61
  export const cellstore_rangeFullyLoaded: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
46
62
  export const cellstore_rangeStyleIds: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
47
63
  export const cellstore_recompute: (a: number, b: number) => void;
64
+ export const cellstore_recomputeChanged: (a: number) => void;
48
65
  export const cellstore_recomputeVolatile: (a: number, b: number) => number;
66
+ export const cellstore_referenceTarget: (a: number, b: number, c: number, d: number) => [number, number];
67
+ export const cellstore_referencesTargeting: (a: number, b: number, c: number) => [number, number];
49
68
  export const cellstore_remapRangeStyles: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => number;
50
69
  export const cellstore_removeCols: (a: number, b: number, c: number, d: number) => void;
51
70
  export const cellstore_removeNamedRange: (a: number, b: number, c: number, d: number) => number;
52
71
  export const cellstore_removeRows: (a: number, b: number, c: number, d: number) => void;
53
72
  export const cellstore_removeSheet: (a: number, b: number) => number;
73
+ export const cellstore_removeTable: (a: number, b: number, c: number) => number;
54
74
  export const cellstore_renameSheet: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
75
+ export const cellstore_resetFormulaMatrixResourceStats: (a: number) => void;
55
76
  export const cellstore_resetQueryResourceStats: (a: number) => void;
56
77
  export const cellstore_restoreRange: (a: number, b: number, c: number, d: number, e: number) => number;
57
78
  export const cellstore_rowCount: (a: number, b: number) => number;
58
79
  export const cellstore_search: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
59
- export const cellstore_setBlock: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number) => number;
80
+ export const cellstore_setBlock: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number) => number;
60
81
  export const cellstore_setBool: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
61
82
  export const cellstore_setColumnNumbers: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
62
83
  export const cellstore_setColumnStrings: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
@@ -66,12 +87,20 @@ export const cellstore_setFormula: (a: number, b: number, c: number, d: number,
66
87
  export const cellstore_setNamedRange: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => number;
67
88
  export const cellstore_setNumber: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
68
89
  export const cellstore_setSheetName: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
90
+ export const cellstore_setSparseBlock: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number) => number;
91
+ export const cellstore_setSpillBlockers: (a: number, b: number, c: number, d: number) => number;
69
92
  export const cellstore_setString: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
93
+ export const cellstore_setTable: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number) => number;
70
94
  export const cellstore_snapshotNumbers: (a: number, b: number) => [number, number];
71
95
  export const cellstore_snapshotTexts: (a: number, b: number) => [number, number];
72
96
  export const cellstore_sortRows: (a: number, b: number, c: number, d: number) => [number, number];
73
97
  export const cellstore_sortRowsMulti: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
98
+ export const cellstore_spillAnchorCol: (a: number, b: number, c: number, d: number) => number;
99
+ export const cellstore_spillAnchorRow: (a: number, b: number, c: number, d: number) => number;
100
+ export const cellstore_spillDerivedMask: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
101
+ export const cellstore_spillOwnerCoordinates: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
74
102
  export const cellstore_styleIdAt: (a: number, b: number, c: number, d: number) => number;
103
+ export const cellstore_wasmCommittedBytes: (a: number) => number;
75
104
  export const distinctcolumn_takeKinds: (a: number) => [number, number];
76
105
  export const distinctcolumn_takeNumbers: (a: number) => [number, number];
77
106
  export const distinctcolumn_takeTexts: (a: number) => [number, number];
@@ -79,7 +108,15 @@ export const rangesnapshot_byteLength: (a: number) => number;
79
108
  export const rangesnapshot_formulaOffsets: (a: number) => [number, number];
80
109
  export const rangesnapshot_formulaSources: (a: number) => [number, number];
81
110
  export const rangesnapshot_kinds: (a: number) => [number, number];
111
+ export const rangesnapshot_referenceOffsets: (a: number) => [number, number];
112
+ export const rangesnapshot_referenceTargets: (a: number) => [number, number];
82
113
  export const rangesnapshot_styleIds: (a: number) => [number, number];
114
+ export const sourcesnapshot_byteLength: (a: number) => number;
115
+ export const sourcesnapshot_formulaOffsets: (a: number) => [number, number];
116
+ export const sourcesnapshot_formulaSources: (a: number) => [number, number];
117
+ export const sourcesnapshot_referenceOffsets: (a: number) => [number, number];
118
+ export const sourcesnapshot_referenceTargets: (a: number) => [number, number];
119
+ export const sourcesnapshot_spillDerived: (a: number) => [number, number];
83
120
  export const windowview_nCols: (a: number) => number;
84
121
  export const windowview_nRows: (a: number) => number;
85
122
  export const windowview_takeCondMatches: (a: number) => [number, number];