@rowsncolumns/y-spreadsheet 16.0.0 → 16.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Readme.md +1 -1
- package/dist/cjs/helpers-v5.d.ts +64 -0
- package/dist/cjs/helpers-v5.d.ts.map +1 -0
- package/dist/cjs/helpers-v5.js +970 -0
- package/dist/cjs/helpers.d.ts +3 -2
- package/dist/cjs/helpers.d.ts.map +1 -1
- package/dist/cjs/helpers.js +8 -2
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/cjs/use-yspreadsheet-v2.d.ts +4 -2
- package/dist/cjs/use-yspreadsheet-v2.d.ts.map +1 -1
- package/dist/cjs/use-yspreadsheet-v2.js +125 -34
- package/dist/esm/helpers-v5.d.ts +64 -0
- package/dist/esm/helpers-v5.d.ts.map +1 -0
- package/dist/esm/helpers-v5.js +733 -0
- package/dist/esm/helpers.d.ts +3 -2
- package/dist/esm/helpers.d.ts.map +1 -1
- package/dist/esm/helpers.js +8 -2
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/use-yspreadsheet-v2.d.ts +4 -2
- package/dist/esm/use-yspreadsheet-v2.d.ts.map +1 -1
- package/dist/esm/use-yspreadsheet-v2.js +86 -11
- package/package.json +2 -1
package/dist/esm/helpers.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import type { Patch } from "immer";
|
|
|
4
4
|
import type * as Y from "yjs";
|
|
5
5
|
import type { YRowData, YSheetData } from "./use-yspreadsheet-v2";
|
|
6
6
|
import type { CellKeyV3, CellDataV3, ParsedCellKeyV3, YjsRuntime } from "./types";
|
|
7
|
+
export * from "./helpers-v5";
|
|
7
8
|
/**
|
|
8
9
|
* Simplified structure to pass event data synchronously
|
|
9
10
|
*/
|
|
@@ -22,9 +23,9 @@ export type SheetDataEvent = {
|
|
|
22
23
|
* @param userId
|
|
23
24
|
* @param patches
|
|
24
25
|
* @param source
|
|
25
|
-
* @param sheetDataVersion - Version of sheet data format ("v2" or "
|
|
26
|
+
* @param sheetDataVersion - Version of sheet data format ("v2", "v3" or "v5"). Falls back to docMeta if undefined.
|
|
26
27
|
*/
|
|
27
|
-
export declare const applyPatchesToYDoc: (doc: Y.Doc, userId: string | number, patches: [patch: SpreadsheetPatch<Patch>, type?: HistoryType | undefined | null][], source?: "agent" | "user" | "backend", sheetDataVersion?: "v2" | "v3", yjsRuntime?: YjsRuntime) => void;
|
|
28
|
+
export declare const applyPatchesToYDoc: (doc: Y.Doc, userId: string | number, patches: [patch: SpreadsheetPatch<Patch>, type?: HistoryType | undefined | null][], source?: "agent" | "user" | "backend", sheetDataVersion?: "v2" | "v3" | "v5", yjsRuntime?: YjsRuntime) => void;
|
|
28
29
|
/**
|
|
29
30
|
* Add sheet data to a yjs map using immer patches
|
|
30
31
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,KAAK,EAEX,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACtB,MAAM,iCAAiC,CAAC;AAWzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,KAAK,KAAK,CAAC,MAAM,KAAK,CAAC;AAO9B,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAEV,SAAS,EACT,UAAU,EACV,eAAe,EACf,UAAU,EACX,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/helpers.js
CHANGED
|
@@ -5,13 +5,15 @@ import set from "lodash/set";
|
|
|
5
5
|
import get from "lodash/get";
|
|
6
6
|
import unset from "lodash/unset";
|
|
7
7
|
import { resolveYjsRuntime } from "./yjs-runtime";
|
|
8
|
+
import { addSheetDataPatchesV5 } from "./helpers-v5";
|
|
9
|
+
export * from "./helpers-v5";
|
|
8
10
|
/**
|
|
9
11
|
* Apply patches to yjs
|
|
10
12
|
* @param doc
|
|
11
13
|
* @param userId
|
|
12
14
|
* @param patches
|
|
13
15
|
* @param source
|
|
14
|
-
* @param sheetDataVersion - Version of sheet data format ("v2" or "
|
|
16
|
+
* @param sheetDataVersion - Version of sheet data format ("v2", "v3" or "v5"). Falls back to docMeta if undefined.
|
|
15
17
|
*/
|
|
16
18
|
export const applyPatchesToYDoc = (doc, userId, patches, source, sheetDataVersion, yjsRuntime) => {
|
|
17
19
|
const yjs = resolveYjsRuntime(yjsRuntime);
|
|
@@ -34,12 +36,16 @@ export const applyPatchesToYDoc = (doc, userId, patches, source, sheetDataVersio
|
|
|
34
36
|
// Use param if provided, otherwise fall back to docMeta for backwards compatibility
|
|
35
37
|
const resolvedVersion = sheetDataVersion ?? yDocMeta.get("sheetDataVersion");
|
|
36
38
|
const isV3 = resolvedVersion === "v3";
|
|
39
|
+
const isV5 = resolvedVersion === "v5";
|
|
37
40
|
for (let [patch, type = "redo"] of patches) {
|
|
38
41
|
type = type ?? "redo";
|
|
39
42
|
const patchKey = type === "redo" ? "patches" : "inversePatches";
|
|
40
43
|
if (patch.sheetData) {
|
|
41
44
|
const patches = patch.sheetData?.[patchKey];
|
|
42
|
-
if (
|
|
45
|
+
if (isV5) {
|
|
46
|
+
addSheetDataPatchesV5(doc, patches);
|
|
47
|
+
}
|
|
48
|
+
else if (isV3) {
|
|
43
49
|
addSheetDataPatchesV3(ySheetDataV3, patches);
|
|
44
50
|
}
|
|
45
51
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../../helpers.ts","../../index.ts","../../observables.ts","../../types.ts","../../use-yspreadsheet-v2.ts","../../use-yspreadsheet.ts","../../vitest.config.ts","../../yjs-runtime.ts"],"version":"5.8.3"}
|
|
1
|
+
{"root":["../../helpers-v5.ts","../../helpers.ts","../../index.ts","../../observables.ts","../../types.ts","../../use-yspreadsheet-v2.ts","../../use-yspreadsheet.ts","../../vitest.config.ts","../../yjs-runtime.ts"],"version":"5.8.3"}
|
|
@@ -74,11 +74,13 @@ export type UseYSpreadsheetPropsV2<T extends CellData, S extends Sheet, C extend
|
|
|
74
74
|
*/
|
|
75
75
|
useV3?: boolean;
|
|
76
76
|
/**
|
|
77
|
-
* Current data version stored in the document ("v2" or "
|
|
77
|
+
* Current data version stored in the document ("v2", "v3" or "v5")
|
|
78
78
|
* If using V3 but version is "v2" or undefined, migration will occur
|
|
79
79
|
* This should be provided by the backend/server
|
|
80
|
+
* "v5" (also when `docMeta.sheetDataVersion` says so): stable line ids, read
|
|
81
|
+
* from and written to `rncCells` (hot plane only, see `helpers-v5.ts`)
|
|
80
82
|
*/
|
|
81
|
-
sheetDataVersion?: "v2" | "v3";
|
|
83
|
+
sheetDataVersion?: "v2" | "v3" | "v5";
|
|
82
84
|
/**
|
|
83
85
|
* Called after migration completes so backend can persist the new version
|
|
84
86
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-yspreadsheet-v2.d.ts","sourceRoot":"","sources":["../../use-yspreadsheet-v2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAEL,UAAU,EACV,KAAK,QAAQ,EAEb,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,KAAK,EACV,KAAK,SAAS,EACf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACtB,MAAM,iCAAiC,CAAC;AASzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAInC,OAAO,KAAK,KAAK,CAAC,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"use-yspreadsheet-v2.d.ts","sourceRoot":"","sources":["../../use-yspreadsheet-v2.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { getCellUserEnteredValue, getExtendedValueFormula, isAFormula, isNil, so
|
|
|
3
3
|
import { useIsomorphicLayoutEffect } from "@rowsncolumns/ui";
|
|
4
4
|
import { useCallback, useMemo, useRef, useState } from "react";
|
|
5
5
|
import { flushSync } from "react-dom";
|
|
6
|
-
import { addSheetDataPatches, addSheetDataPatchesV3, applyMapPatches, createCellKeyV3, filterErrorCellPatches, getCellDataFromYSheetData, mergeErrorEffectiveValueIntoCellData, processSheetDataEvents, shouldPersistErrorCellPatch, processSheetDataEventsV3, sheetDataV2ToV3, sheetDataV3ToV2, updateArrayType, validateSheets, } from "./helpers";
|
|
6
|
+
import { addSheetDataPatches, addSheetDataPatchesV5, addSheetDataPatchesV3, applyMapPatches, createCellReaderV5, createCellKeyV3, filterErrorCellPatches, getCellDataFromYSheetData, mergeErrorEffectiveValueIntoCellData, processSheetDataEvents, shouldPersistErrorCellPatch, processSheetDataEventsV3, processSheetDataChangesV5, readStyleOverlayV5, sheetDataV2ToV3, sheetDataV3ToV2, sheetDataV5ToV2, updateArrayType, validateSheets, } from "./helpers";
|
|
7
7
|
import { resolveYjsRuntime } from "./yjs-runtime";
|
|
8
8
|
/**
|
|
9
9
|
* Convert Y.js events to SheetDataEvent format for incremental processing
|
|
@@ -96,6 +96,16 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
96
96
|
const ySheetDataV3 = useMemo(() => doc.getMap("sheetDataV3"), [doc]);
|
|
97
97
|
// Doc metadata - used as fallback for version when prop is undefined
|
|
98
98
|
const yDocMeta = useMemo(() => doc.getMap("docMeta"), [doc]);
|
|
99
|
+
// V5: the engine marks the doc in `docMeta`; read live (the marker may arrive with a sync)
|
|
100
|
+
const isV5Doc = useCallback(() => sheetDataVersion === "v5" || yDocMeta.get("sheetDataVersion") === "v5", [sheetDataVersion, yDocMeta]);
|
|
101
|
+
// V5: the composed style plane, folded on a full read and on a remote style
|
|
102
|
+
// change, updated in place by this hook's own writes
|
|
103
|
+
const stylesV5Ref = useRef(null);
|
|
104
|
+
const stylesV5 = useCallback(() => (stylesV5Ref.current ??= readStyleOverlayV5(doc)), [doc]);
|
|
105
|
+
const readSheetDataV5 = useCallback(() => {
|
|
106
|
+
stylesV5Ref.current = readStyleOverlayV5(doc);
|
|
107
|
+
return sheetDataV5ToV2(doc, stylesV5Ref.current);
|
|
108
|
+
}, [doc]);
|
|
99
109
|
const yDisableRecalc = useMemo(() => doc.getMap("disableRecalc"), [doc]);
|
|
100
110
|
// Recalc cells
|
|
101
111
|
const yRecalcCells = useMemo(() => doc.getArray("recalcCells"), [doc]);
|
|
@@ -233,14 +243,17 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
233
243
|
const initialSyncTimerRef = useRef(null);
|
|
234
244
|
// Trigger cell recalcs
|
|
235
245
|
const syncRecalcCells = useCallback((recalcCells, origin) => {
|
|
246
|
+
const readV5 = isV5Doc() ? createCellReaderV5(doc, stylesV5()) : null;
|
|
236
247
|
for (const [_, position, source] of recalcCells) {
|
|
237
248
|
// backend will calculate results
|
|
238
249
|
const isAgent = source === "agent"; // Agent already does the calculation
|
|
239
250
|
// Read directly from Y.js to avoid race condition where recalcCells
|
|
240
251
|
// observer fires before sheetData observer has updated React state
|
|
241
|
-
const formulaValue =
|
|
242
|
-
?
|
|
243
|
-
:
|
|
252
|
+
const formulaValue = readV5
|
|
253
|
+
? getExtendedValueFormula(getCellUserEnteredValue(readV5(position.sheetId, position.rowIndex, position.columnIndex)))
|
|
254
|
+
: useV3
|
|
255
|
+
? getUserEnteredValueFromYDocV3(ySheetDataV3, position.sheetId, position.rowIndex, position.columnIndex)
|
|
256
|
+
: getUserEnteredValueFromYDoc(ySheetDataV2, position.sheetId, position.rowIndex, position.columnIndex);
|
|
244
257
|
// Was this from a changeBatch event in the back-end?
|
|
245
258
|
// To support client functions to run only
|
|
246
259
|
const isChangeBatch = position.force && isAgent;
|
|
@@ -297,6 +310,9 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
297
310
|
ySheetDataV3,
|
|
298
311
|
useV3,
|
|
299
312
|
reevaluateDerivationsForCells,
|
|
313
|
+
isV5Doc,
|
|
314
|
+
doc,
|
|
315
|
+
stylesV5,
|
|
300
316
|
]);
|
|
301
317
|
// Setup initial sync
|
|
302
318
|
const setupInitialSync = useCallback(() => {
|
|
@@ -341,8 +357,12 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
341
357
|
callback?.(value);
|
|
342
358
|
}
|
|
343
359
|
}
|
|
344
|
-
// Load sheet data based on V2 or
|
|
345
|
-
if (
|
|
360
|
+
// Load sheet data based on V2, V3 or V5 mode
|
|
361
|
+
if (isV5Doc()) {
|
|
362
|
+
// V5: hot plane keyed by line ids; never migrated to V3
|
|
363
|
+
onChangeSheetData?.(readSheetDataV5());
|
|
364
|
+
}
|
|
365
|
+
else if (useV3) {
|
|
346
366
|
// Check if we need to migrate from V2 to V3
|
|
347
367
|
// Use prop if provided, otherwise fall back to yDocMeta for backwards compatibility
|
|
348
368
|
const resolvedVersion = sheetDataVersion ?? yDocMeta.get("sheetDataVersion");
|
|
@@ -400,6 +420,8 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
400
420
|
sheetDataVersion,
|
|
401
421
|
onMigrationComplete,
|
|
402
422
|
deleteV2AfterMigration,
|
|
423
|
+
isV5Doc,
|
|
424
|
+
readSheetDataV5,
|
|
403
425
|
]);
|
|
404
426
|
/**
|
|
405
427
|
* Replay the backend/agent recalc backlog into the local graph — and, on
|
|
@@ -533,6 +555,44 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
533
555
|
ySheetDataV3.unobserve(callback);
|
|
534
556
|
};
|
|
535
557
|
}, [onChangeSheetData, ySheetDataV3, useV3]);
|
|
558
|
+
// Only for sheet Data (V5 docs): `rncCells`, `rncNotes`, the style planes and
|
|
559
|
+
// every sheet's id arrays. A change of an id array, a style plane (or of
|
|
560
|
+
// `docMeta`): full re-read; a cell or note change alone is applied
|
|
561
|
+
// incrementally. Roots are matched by name in `doc.share`, so a root a peer
|
|
562
|
+
// created after this effect ran is seen too.
|
|
563
|
+
useIsomorphicLayoutEffect(() => {
|
|
564
|
+
const callback = (transaction) => {
|
|
565
|
+
if (transaction.origin === "local" || !isV5Doc())
|
|
566
|
+
return;
|
|
567
|
+
let full = false;
|
|
568
|
+
const cellKeys = [];
|
|
569
|
+
for (const [name, type] of doc.share) {
|
|
570
|
+
const changed = transaction.changed.get(type);
|
|
571
|
+
if (!changed)
|
|
572
|
+
continue;
|
|
573
|
+
if (name === "rncCells" || name === "rncNotes") {
|
|
574
|
+
changed.forEach((key) => key !== null && cellKeys.push(key));
|
|
575
|
+
}
|
|
576
|
+
else if (name === "docMeta" ||
|
|
577
|
+
name === "rncCellStylesLog" ||
|
|
578
|
+
name === "rncCellStyles" ||
|
|
579
|
+
name.startsWith("rncRowIds:") ||
|
|
580
|
+
name.startsWith("rncColIds:")) {
|
|
581
|
+
full = true;
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
if (full) {
|
|
585
|
+
onChangeSheetData(readSheetDataV5());
|
|
586
|
+
}
|
|
587
|
+
else if (cellKeys.length) {
|
|
588
|
+
onChangeSheetData((prevSheetData) => processSheetDataChangesV5(cellKeys, prevSheetData, doc, stylesV5()) ?? prevSheetData);
|
|
589
|
+
}
|
|
590
|
+
};
|
|
591
|
+
doc.on("afterTransaction", callback);
|
|
592
|
+
return () => {
|
|
593
|
+
doc.off("afterTransaction", callback);
|
|
594
|
+
};
|
|
595
|
+
}, [doc, onChangeSheetData, isV5Doc, readSheetDataV5, stylesV5]);
|
|
536
596
|
// CellXfs
|
|
537
597
|
useIsomorphicLayoutEffect(() => {
|
|
538
598
|
// Subscribe to sheet data
|
|
@@ -652,11 +712,17 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
652
712
|
// write merges ONLY the error effective value into the existing doc
|
|
653
713
|
// cell, preserving every other persisted field.
|
|
654
714
|
const persistableErrorCellPatches = [];
|
|
715
|
+
const isV5 = isV5Doc();
|
|
716
|
+
const readV5 = isV5 && errorCellPatches.length
|
|
717
|
+
? createCellReaderV5(doc, stylesV5())
|
|
718
|
+
: null;
|
|
655
719
|
for (const errorPatch of errorCellPatches) {
|
|
656
720
|
const [patchSheetId, rowIndex, , columnIndex] = errorPatch.path;
|
|
657
|
-
const currentCellData =
|
|
658
|
-
?
|
|
659
|
-
:
|
|
721
|
+
const currentCellData = readV5
|
|
722
|
+
? readV5(Number(patchSheetId), Number(rowIndex), Number(columnIndex))
|
|
723
|
+
: useV3
|
|
724
|
+
? ySheetDataV3.get(createCellKeyV3(Number(patchSheetId), Number(rowIndex), Number(columnIndex)))?.value
|
|
725
|
+
: getCellDataFromYSheetData(ySheetDataV2, patchSheetId, Number(rowIndex), Number(columnIndex));
|
|
660
726
|
const incomingCellData = errorPatch.value;
|
|
661
727
|
if (!shouldPersistErrorCellPatch(currentCellData, incomingCellData)) {
|
|
662
728
|
continue;
|
|
@@ -668,7 +734,10 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
668
734
|
}
|
|
669
735
|
if (persistableErrorCellPatches.length) {
|
|
670
736
|
doc.transact(() => {
|
|
671
|
-
if (
|
|
737
|
+
if (isV5) {
|
|
738
|
+
addSheetDataPatchesV5(doc, persistableErrorCellPatches, origin, stylesV5());
|
|
739
|
+
}
|
|
740
|
+
else if (useV3) {
|
|
672
741
|
addSheetDataPatchesV3(ySheetDataV3, persistableErrorCellPatches);
|
|
673
742
|
}
|
|
674
743
|
else {
|
|
@@ -678,6 +747,7 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
678
747
|
}
|
|
679
748
|
return;
|
|
680
749
|
}
|
|
750
|
+
const isV5 = isV5Doc();
|
|
681
751
|
doc.transact(() => {
|
|
682
752
|
for (let [patch, type = "redo"] of patches) {
|
|
683
753
|
// Check for existence of patch
|
|
@@ -690,7 +760,10 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
690
760
|
const patchKey = type === "redo" ? "patches" : "inversePatches";
|
|
691
761
|
if (patch.sheetData) {
|
|
692
762
|
const patches = patch.sheetData?.[patchKey];
|
|
693
|
-
if (
|
|
763
|
+
if (isV5) {
|
|
764
|
+
addSheetDataPatchesV5(doc, patches, origin, stylesV5());
|
|
765
|
+
}
|
|
766
|
+
else if (useV3) {
|
|
694
767
|
addSheetDataPatchesV3(ySheetDataV3, patches);
|
|
695
768
|
}
|
|
696
769
|
else {
|
|
@@ -747,6 +820,8 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
747
820
|
isLeader,
|
|
748
821
|
recalcCellsMaxEntries,
|
|
749
822
|
useV3,
|
|
823
|
+
isV5Doc,
|
|
824
|
+
stylesV5,
|
|
750
825
|
]);
|
|
751
826
|
// Listen to active cell change
|
|
752
827
|
useIsomorphicLayoutEffect(() => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rowsncolumns/y-spreadsheet",
|
|
3
|
-
"version": "16.
|
|
3
|
+
"version": "16.1.0",
|
|
4
4
|
"main": "./dist/cjs/index.js",
|
|
5
5
|
"module": "./dist/esm/index.js",
|
|
6
6
|
"exports": {
|
|
@@ -64,6 +64,7 @@
|
|
|
64
64
|
}
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
|
+
"lib0": "^0.2.87",
|
|
67
68
|
"lodash": "^4.17.21",
|
|
68
69
|
"rxjs": "^7.8.2"
|
|
69
70
|
}
|