@rowsncolumns/rnc-yrs-store 0.14.2 → 0.15.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.
@@ -23,10 +23,27 @@ export class SpreadsheetEngine {
23
23
  * inner engine still does both in one call for the older bespoke/worker path.)
24
24
  */
25
25
  applyUpdate(bytes: Uint8Array): void;
26
+ /**
27
+ * The legacy Ctrl+Shift+Enter array covering a 1-based cell, as JSON
28
+ * `{"range":{startRowIndex,endRowIndex,startColumnIndex,endColumnIndex},"formula":"=…"}`, or
29
+ * `null` — the same shape as `rnc-engine`'s `SpreadsheetEngine.arrayFormulaAt`, which the
30
+ * `@rowsncolumns/rnc-engine` wrapper feature-detects (formula-bar `{…}` display, re-entry
31
+ * range, part-of-array checks in the editor).
32
+ */
33
+ arrayFormulaAt(sheet_id: number, row: number, col: number): string;
26
34
  /**
27
35
  * Cold-block body cache diagnostics as JSON `{"hits", "misses", "bytes"}`.
28
36
  */
29
37
  blockCacheStats(): string;
38
+ /**
39
+ * The workbook calculation mode: `"auto"`, `"autoNoTable"` or `"manual"`. Set it with the
40
+ * `set-calculation-mode` command.
41
+ */
42
+ calculationMode(): string;
43
+ /**
44
+ * Manual mode: formulas may be out of date — show "Calculate" in the status bar.
45
+ */
46
+ calculationPending(): boolean;
30
47
  canRedo(): boolean;
31
48
  canUndo(): boolean;
32
49
  /**
@@ -75,6 +92,11 @@ export class SpreadsheetEngine {
75
92
  * its own region.
76
93
  */
77
94
  dataRegion(sheet_id: number, row: number, col: number): string;
95
+ /**
96
+ * The workbook's What-If data tables as a `DataTable[]` JSON — `{ sheetId, range,
97
+ * rowInputCell?, columnInputCell? }`, `range` being the body (`{=TABLE(row, column)}` cells).
98
+ */
99
+ dataTables(): string;
78
100
  /**
79
101
  * How many inbound updates are deferred on a causal gap (a dropped/reordered transport
80
102
  * drain). Zero in a healthy stream; persistently non-zero means the host should run a
@@ -266,11 +288,25 @@ export class SpreadsheetEngine {
266
288
  * Register a host (JS) custom-function name (`SpreadsheetEngineLike.registerCustomFunction`).
267
289
  */
268
290
  registerCustomFunction(name: string): void;
291
+ /**
292
+ * The workbook's scenarios as a `SheetScenarios[]` JSON — `{ sheetId, scenarios: [{ name,
293
+ * cells: [{ rowIndex, columnIndex, value }], comment?, user?, locked, hidden }], current?,
294
+ * show?, resultCells? }` (Data ▸ What-If Analysis ▸ Scenario Manager).
295
+ */
296
+ scenarios(): string;
269
297
  /**
270
298
  * Pin the evaluation timezone for `TODAY()` / `NOW()` as minutes east of UTC (`null` /
271
299
  * `undefined` restores the default `Local` clock). Returns `false` for an offset outside ±24h.
272
300
  */
273
301
  setTimezoneOffsetMinutes(minutes?: number | null): boolean;
302
+ /**
303
+ * Where the workbook lives, for `CELL("filename")` — `{directory}[{fileName}]{sheet}`, so the
304
+ * `MID(CELL("filename"),FIND("]",…)+1,…)` sheet-name idiom works — and `INFO("directory")`.
305
+ * Hosts pass the asset's title as `fileName` (e.g. `Budget.xlsx`) and may pass a folder path or
306
+ * URL ending in `/` as `directory`. An empty `fileName` means unsaved (`""`). The next recalc
307
+ * refreshes the cells that read it.
308
+ */
309
+ setWorkbookIdentity(directory: string, file_name: string): void;
274
310
  /**
275
311
  * Per-sheet 1-based data extents as JSON `[{"sheetId", "maxRow", "maxCol"}]`.
276
312
  */
@@ -372,7 +408,10 @@ export interface InitOutput {
372
408
  readonly spreadsheetengine_applyCommand: (a: number, b: number, c: number) => [number, number, number, number];
373
409
  readonly spreadsheetengine_applyCommandQuiet: (a: number, b: number, c: number) => [number, number];
374
410
  readonly spreadsheetengine_applyUpdate: (a: number, b: number, c: number) => [number, number];
411
+ readonly spreadsheetengine_arrayFormulaAt: (a: number, b: number, c: number, d: number) => [number, number];
375
412
  readonly spreadsheetengine_blockCacheStats: (a: number) => [number, number];
413
+ readonly spreadsheetengine_calculationMode: (a: number) => [number, number];
414
+ readonly spreadsheetengine_calculationPending: (a: number) => number;
376
415
  readonly spreadsheetengine_canRedo: (a: number) => number;
377
416
  readonly spreadsheetengine_canUndo: (a: number) => number;
378
417
  readonly spreadsheetengine_clearHistory: (a: number) => void;
@@ -380,6 +419,7 @@ export interface InitOutput {
380
419
  readonly spreadsheetengine_conditionalFormatRuleStats: (a: number, b: number, c: number, d: number, e: number) => [number, number];
381
420
  readonly spreadsheetengine_dataEdge: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => number;
382
421
  readonly spreadsheetengine_dataRegion: (a: number, b: number, c: number, d: number) => [number, number];
422
+ readonly spreadsheetengine_dataTables: (a: number) => [number, number];
383
423
  readonly spreadsheetengine_deferredRemoteUpdates: (a: number) => number;
384
424
  readonly spreadsheetengine_dependents: (a: number, b: number, c: number, d: number) => [number, number];
385
425
  readonly spreadsheetengine_documentFacets: (a: number) => [number, number];
@@ -418,7 +458,9 @@ export interface InitOutput {
418
458
  readonly spreadsheetengine_redo: (a: number) => [number, number];
419
459
  readonly spreadsheetengine_redoDepth: (a: number) => number;
420
460
  readonly spreadsheetengine_registerCustomFunction: (a: number, b: number, c: number) => void;
461
+ readonly spreadsheetengine_scenarios: (a: number) => [number, number];
421
462
  readonly spreadsheetengine_setTimezoneOffsetMinutes: (a: number, b: number) => number;
463
+ readonly spreadsheetengine_setWorkbookIdentity: (a: number, b: number, c: number, d: number, e: number) => void;
422
464
  readonly spreadsheetengine_sheetExtents: (a: number) => [number, number];
423
465
  readonly spreadsheetengine_sheetIds: (a: number) => [number, number];
424
466
  readonly spreadsheetengine_sheetStats: (a: number) => [number, number];
@@ -77,6 +77,29 @@ export class SpreadsheetEngine {
77
77
  throw takeFromExternrefTable0(ret[0]);
78
78
  }
79
79
  }
80
+ /**
81
+ * The legacy Ctrl+Shift+Enter array covering a 1-based cell, as JSON
82
+ * `{"range":{startRowIndex,endRowIndex,startColumnIndex,endColumnIndex},"formula":"=…"}`, or
83
+ * `null` — the same shape as `rnc-engine`'s `SpreadsheetEngine.arrayFormulaAt`, which the
84
+ * `@rowsncolumns/rnc-engine` wrapper feature-detects (formula-bar `{…}` display, re-entry
85
+ * range, part-of-array checks in the editor).
86
+ * @param {number} sheet_id
87
+ * @param {number} row
88
+ * @param {number} col
89
+ * @returns {string}
90
+ */
91
+ arrayFormulaAt(sheet_id, row, col) {
92
+ let deferred1_0;
93
+ let deferred1_1;
94
+ try {
95
+ const ret = wasm.spreadsheetengine_arrayFormulaAt(this.__wbg_ptr, sheet_id, row, col);
96
+ deferred1_0 = ret[0];
97
+ deferred1_1 = ret[1];
98
+ return getStringFromWasm0(ret[0], ret[1]);
99
+ } finally {
100
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
101
+ }
102
+ }
80
103
  /**
81
104
  * Cold-block body cache diagnostics as JSON `{"hits", "misses", "bytes"}`.
82
105
  * @returns {string}
@@ -93,6 +116,31 @@ export class SpreadsheetEngine {
93
116
  wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
94
117
  }
95
118
  }
119
+ /**
120
+ * The workbook calculation mode: `"auto"`, `"autoNoTable"` or `"manual"`. Set it with the
121
+ * `set-calculation-mode` command.
122
+ * @returns {string}
123
+ */
124
+ calculationMode() {
125
+ let deferred1_0;
126
+ let deferred1_1;
127
+ try {
128
+ const ret = wasm.spreadsheetengine_calculationMode(this.__wbg_ptr);
129
+ deferred1_0 = ret[0];
130
+ deferred1_1 = ret[1];
131
+ return getStringFromWasm0(ret[0], ret[1]);
132
+ } finally {
133
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
134
+ }
135
+ }
136
+ /**
137
+ * Manual mode: formulas may be out of date — show "Calculate" in the status bar.
138
+ * @returns {boolean}
139
+ */
140
+ calculationPending() {
141
+ const ret = wasm.spreadsheetengine_calculationPending(this.__wbg_ptr);
142
+ return ret !== 0;
143
+ }
96
144
  /**
97
145
  * @returns {boolean}
98
146
  */
@@ -211,6 +259,23 @@ export class SpreadsheetEngine {
211
259
  wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
212
260
  }
213
261
  }
262
+ /**
263
+ * The workbook's What-If data tables as a `DataTable[]` JSON — `{ sheetId, range,
264
+ * rowInputCell?, columnInputCell? }`, `range` being the body (`{=TABLE(row, column)}` cells).
265
+ * @returns {string}
266
+ */
267
+ dataTables() {
268
+ let deferred1_0;
269
+ let deferred1_1;
270
+ try {
271
+ const ret = wasm.spreadsheetengine_dataTables(this.__wbg_ptr);
272
+ deferred1_0 = ret[0];
273
+ deferred1_1 = ret[1];
274
+ return getStringFromWasm0(ret[0], ret[1]);
275
+ } finally {
276
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
277
+ }
278
+ }
214
279
  /**
215
280
  * How many inbound updates are deferred on a causal gap (a dropped/reordered transport
216
281
  * drain). Zero in a healthy stream; persistently non-zero means the host should run a
@@ -922,6 +987,24 @@ export class SpreadsheetEngine {
922
987
  const len0 = WASM_VECTOR_LEN;
923
988
  wasm.spreadsheetengine_registerCustomFunction(this.__wbg_ptr, ptr0, len0);
924
989
  }
990
+ /**
991
+ * The workbook's scenarios as a `SheetScenarios[]` JSON — `{ sheetId, scenarios: [{ name,
992
+ * cells: [{ rowIndex, columnIndex, value }], comment?, user?, locked, hidden }], current?,
993
+ * show?, resultCells? }` (Data ▸ What-If Analysis ▸ Scenario Manager).
994
+ * @returns {string}
995
+ */
996
+ scenarios() {
997
+ let deferred1_0;
998
+ let deferred1_1;
999
+ try {
1000
+ const ret = wasm.spreadsheetengine_scenarios(this.__wbg_ptr);
1001
+ deferred1_0 = ret[0];
1002
+ deferred1_1 = ret[1];
1003
+ return getStringFromWasm0(ret[0], ret[1]);
1004
+ } finally {
1005
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
1006
+ }
1007
+ }
925
1008
  /**
926
1009
  * Pin the evaluation timezone for `TODAY()` / `NOW()` as minutes east of UTC (`null` /
927
1010
  * `undefined` restores the default `Local` clock). Returns `false` for an offset outside ±24h.
@@ -932,6 +1015,22 @@ export class SpreadsheetEngine {
932
1015
  const ret = wasm.spreadsheetengine_setTimezoneOffsetMinutes(this.__wbg_ptr, isLikeNone(minutes) ? Number.MAX_SAFE_INTEGER : (minutes) >> 0);
933
1016
  return ret !== 0;
934
1017
  }
1018
+ /**
1019
+ * Where the workbook lives, for `CELL("filename")` — `{directory}[{fileName}]{sheet}`, so the
1020
+ * `MID(CELL("filename"),FIND("]",…)+1,…)` sheet-name idiom works — and `INFO("directory")`.
1021
+ * Hosts pass the asset's title as `fileName` (e.g. `Budget.xlsx`) and may pass a folder path or
1022
+ * URL ending in `/` as `directory`. An empty `fileName` means unsaved (`""`). The next recalc
1023
+ * refreshes the cells that read it.
1024
+ * @param {string} directory
1025
+ * @param {string} file_name
1026
+ */
1027
+ setWorkbookIdentity(directory, file_name) {
1028
+ const ptr0 = passStringToWasm0(directory, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
1029
+ const len0 = WASM_VECTOR_LEN;
1030
+ const ptr1 = passStringToWasm0(file_name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
1031
+ const len1 = WASM_VECTOR_LEN;
1032
+ wasm.spreadsheetengine_setWorkbookIdentity(this.__wbg_ptr, ptr0, len0, ptr1, len1);
1033
+ }
935
1034
  /**
936
1035
  * Per-sheet 1-based data extents as JSON `[{"sheetId", "maxRow", "maxCol"}]`.
937
1036
  * @returns {string}
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rowsncolumns/rnc-yrs-store",
3
- "version": "0.14.2",
3
+ "version": "0.15.1",
4
4
  "author": "Vinay M",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "description": "Document-backed Rust→WASM spreadsheet calc engine (yrs/CRDT, canonical sheetDataV3). Ships the `SpreadsheetEngine` (a `Store<YrsStore>`): applyCommand / undo / redo / canUndo + the Yjs collaboration surface (applyUpdate / takePendingUpdates / loadFromUpdate / stateAsUpdate) the Keryx update-pump binds to. This is the 1,000,000-row engine the demo-app ships today — previously vendored, now a versioned package. The PREBUILT wasm is included (consumers need NO Rust/wasm toolchain); the glue's default init REQUIRES an explicit `module_or_path` — pass the URL of the served `rnc_yrs_store_bg.wasm` (webpack/Turbopack statically resolve a bundled `new URL`, which would 404 from this package, so the inline-default branch is intentionally a throw).",