@rowsncolumns/y-spreadsheet 15.1.0 → 16.1.0-beta.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 +4 -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 +7 -6
- package/dist/cjs/helpers.d.ts.map +1 -1
- package/dist/cjs/helpers.js +17 -11
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/cjs/types.d.ts +8 -6
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/use-yspreadsheet-v2.d.ts +9 -6
- package/dist/cjs/use-yspreadsheet-v2.d.ts.map +1 -1
- package/dist/cjs/use-yspreadsheet-v2.js +131 -39
- package/dist/cjs/use-yspreadsheet.d.ts +7 -3
- package/dist/cjs/use-yspreadsheet.d.ts.map +1 -1
- package/dist/cjs/use-yspreadsheet.js +5 -4
- package/dist/cjs/vitest.config.d.ts.map +1 -1
- package/dist/cjs/vitest.config.js +1 -0
- package/dist/cjs/yjs-runtime.d.ts +6 -0
- package/dist/cjs/yjs-runtime.d.ts.map +1 -0
- package/dist/cjs/yjs-runtime.js +25 -0
- 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 +7 -6
- package/dist/esm/helpers.d.ts.map +1 -1
- package/dist/esm/helpers.js +17 -7
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/types.d.ts +8 -6
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/use-yspreadsheet-v2.d.ts +9 -6
- package/dist/esm/use-yspreadsheet-v2.d.ts.map +1 -1
- package/dist/esm/use-yspreadsheet-v2.js +89 -13
- package/dist/esm/use-yspreadsheet.d.ts +7 -3
- package/dist/esm/use-yspreadsheet.d.ts.map +1 -1
- package/dist/esm/use-yspreadsheet.js +3 -2
- package/dist/esm/vitest.config.d.ts.map +1 -1
- package/dist/esm/vitest.config.js +1 -0
- package/dist/esm/yjs-runtime.d.ts +6 -0
- package/dist/esm/yjs-runtime.d.ts.map +1 -0
- package/dist/esm/yjs-runtime.js +20 -0
- package/package.json +7 -1
package/dist/esm/helpers.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { type CellData, type CellFormat, type Sheet } from "@rowsncolumns/spreadsheet";
|
|
2
2
|
import { type HistoryType, type SheetData, type SpreadsheetPatch } from "@rowsncolumns/spreadsheet-state";
|
|
3
3
|
import type { Patch } from "immer";
|
|
4
|
-
import * as Y from "yjs";
|
|
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",
|
|
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
|
*
|
|
@@ -33,10 +34,10 @@ export declare const applyPatchesToYDoc: (doc: Y.Doc, userId: string | number, p
|
|
|
33
34
|
* 1. Deduplicating patches targeting the same cell (later patches win)
|
|
34
35
|
* 2. Grouping updates by sheet/row for efficient batch application
|
|
35
36
|
*/
|
|
36
|
-
export declare const addSheetDataPatches: (ySheetData: Y.Map<YSheetData>, patches: Patch[],
|
|
37
|
-
export declare const getSheetFromYSheetData: (ySheetData: Y.Map<YSheetData>, sheetId: string | number,
|
|
37
|
+
export declare const addSheetDataPatches: (ySheetData: Y.Map<YSheetData>, patches: Patch[], yjsRuntime?: YjsRuntime) => void;
|
|
38
|
+
export declare const getSheetFromYSheetData: (ySheetData: Y.Map<YSheetData>, sheetId: string | number, yjsRuntime?: YjsRuntime) => YSheetData;
|
|
38
39
|
export declare const deleteSheetFromYSheetData: (ySheetData: Y.Map<YSheetData>, sheetId: string | number) => void;
|
|
39
|
-
export declare const getRowDataFromSheet: (ysheet: Y.Array<YRowData | null>, rowIndex: number | string,
|
|
40
|
+
export declare const getRowDataFromSheet: (ysheet: Y.Array<YRowData | null>, rowIndex: number | string, yjsRuntime?: YjsRuntime) => Y.Array<CellData | null>;
|
|
40
41
|
export declare const setCellDataInRowData: (rowData: Y.Array<CellData | null>, columnIndex: number | string, cellData?: CellData | null) => void;
|
|
41
42
|
export declare const removeRowData: (ysheet: Y.Array<YRowData | null>, rowIndex: number | string) => void;
|
|
42
43
|
/**
|
|
@@ -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,CAAC,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/helpers.js
CHANGED
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
import { cellToAddress, getCellEffectiveValue, getCellUserEnteredValue, getExtendedValueBool, getExtendedValueError, getExtendedValueFormula, getExtendedValueNumber, getExtendedValueString, } from "@rowsncolumns/utils";
|
|
2
|
-
import * as Y from "yjs";
|
|
3
2
|
import cloneDeep from "lodash/cloneDeep";
|
|
4
3
|
import isEqual from "lodash/isEqual";
|
|
5
4
|
import set from "lodash/set";
|
|
6
5
|
import get from "lodash/get";
|
|
7
6
|
import unset from "lodash/unset";
|
|
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
|
-
export const applyPatchesToYDoc = (doc, userId, patches, source, sheetDataVersion,
|
|
18
|
+
export const applyPatchesToYDoc = (doc, userId, patches, source, sheetDataVersion, yjsRuntime) => {
|
|
19
|
+
const yjs = resolveYjsRuntime(yjsRuntime);
|
|
17
20
|
const ySheetDataV2 = doc.getMap("sheetDataV2");
|
|
18
21
|
const ySheetDataV3 = doc.getMap("sheetDataV3");
|
|
19
22
|
const yDocMeta = doc.getMap("docMeta");
|
|
@@ -33,12 +36,16 @@ export const applyPatchesToYDoc = (doc, userId, patches, source, sheetDataVersio
|
|
|
33
36
|
// Use param if provided, otherwise fall back to docMeta for backwards compatibility
|
|
34
37
|
const resolvedVersion = sheetDataVersion ?? yDocMeta.get("sheetDataVersion");
|
|
35
38
|
const isV3 = resolvedVersion === "v3";
|
|
39
|
+
const isV5 = resolvedVersion === "v5";
|
|
36
40
|
for (let [patch, type = "redo"] of patches) {
|
|
37
41
|
type = type ?? "redo";
|
|
38
42
|
const patchKey = type === "redo" ? "patches" : "inversePatches";
|
|
39
43
|
if (patch.sheetData) {
|
|
40
44
|
const patches = patch.sheetData?.[patchKey];
|
|
41
|
-
if (
|
|
45
|
+
if (isV5) {
|
|
46
|
+
addSheetDataPatchesV5(doc, patches);
|
|
47
|
+
}
|
|
48
|
+
else if (isV3) {
|
|
42
49
|
addSheetDataPatchesV3(ySheetDataV3, patches);
|
|
43
50
|
}
|
|
44
51
|
else {
|
|
@@ -114,7 +121,8 @@ export const applyPatchesToYDoc = (doc, userId, patches, source, sheetDataVersio
|
|
|
114
121
|
* 1. Deduplicating patches targeting the same cell (later patches win)
|
|
115
122
|
* 2. Grouping updates by sheet/row for efficient batch application
|
|
116
123
|
*/
|
|
117
|
-
export const addSheetDataPatches = (ySheetData, patches,
|
|
124
|
+
export const addSheetDataPatches = (ySheetData, patches, yjsRuntime) => {
|
|
125
|
+
const yjs = resolveYjsRuntime(yjsRuntime);
|
|
118
126
|
// Optimization: consecutive cell-level patches are consolidated (later
|
|
119
127
|
// patches override earlier ones for the same cell) and applied together,
|
|
120
128
|
// grouped by sheet and row so bulk operations like paste (10k+ rows) cost
|
|
@@ -268,7 +276,8 @@ export const addSheetDataPatches = (ySheetData, patches, yjs = Y) => {
|
|
|
268
276
|
}
|
|
269
277
|
flushPendingCellUpdates();
|
|
270
278
|
};
|
|
271
|
-
export const getSheetFromYSheetData = (ySheetData, sheetId,
|
|
279
|
+
export const getSheetFromYSheetData = (ySheetData, sheetId, yjsRuntime) => {
|
|
280
|
+
const yjs = resolveYjsRuntime(yjsRuntime);
|
|
272
281
|
const id = String(sheetId);
|
|
273
282
|
let sheet = ySheetData.get(id);
|
|
274
283
|
if (!sheet) {
|
|
@@ -281,7 +290,8 @@ export const deleteSheetFromYSheetData = (ySheetData, sheetId) => {
|
|
|
281
290
|
const id = String(sheetId);
|
|
282
291
|
ySheetData.delete(id);
|
|
283
292
|
};
|
|
284
|
-
export const getRowDataFromSheet = (ysheet, rowIndex,
|
|
293
|
+
export const getRowDataFromSheet = (ysheet, rowIndex, yjsRuntime) => {
|
|
294
|
+
const yjs = resolveYjsRuntime(yjsRuntime);
|
|
285
295
|
const index = Number(rowIndex);
|
|
286
296
|
if (index < 0) {
|
|
287
297
|
throw new Error("Row index cannot be negative");
|
package/dist/esm/index.d.ts
CHANGED
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC"}
|
package/dist/esm/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../../helpers.ts","../../index.ts","../../observables.ts","../../types.ts","../../use-yspreadsheet-v2.ts","../../use-yspreadsheet.ts","../../vitest.config.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"}
|
package/dist/esm/types.d.ts
CHANGED
|
@@ -5,12 +5,14 @@ import type * as Y from "yjs";
|
|
|
5
5
|
/**
|
|
6
6
|
* The Yjs members y-spreadsheet needs as runtime values: the shared-type
|
|
7
7
|
* constructors it instantiates and `instanceof`-checks, and the update
|
|
8
|
-
* functions `useYSpreadsheet` calls on the document.
|
|
9
|
-
*
|
|
10
|
-
* `doc` (
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
8
|
+
* functions `useYSpreadsheet` calls on the document. The package does not
|
|
9
|
+
* import a Yjs implementation: pass the namespace of the one that created
|
|
10
|
+
* `doc` (`import * as Y from "yjs"`, or a yjs-13-compatible layer over `@y/y`
|
|
11
|
+
* 14) so the types the hooks and helpers create belong to the same
|
|
12
|
+
* implementation as the document and their `instanceof` checks see that
|
|
13
|
+
* implementation's classes, or register it once with `setDefaultYjsRuntime`.
|
|
14
|
+
* The members are typed against yjs 13 (an optional peer, used for types
|
|
15
|
+
* only), so another implementation is passed with a cast.
|
|
14
16
|
*/
|
|
15
17
|
export type YjsRuntime = {
|
|
16
18
|
Map: typeof Y.Map;
|
package/dist/esm/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,KAAK,CAAC,MAAM,KAAK,CAAC;AAE9B
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../types.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import type { CellInterface, SelectionArea } from "@rowsncolumns/grid";
|
|
|
4
4
|
import { PivotTable, type CellData, type Collaborator, type ConditionalFormatRule, type DataValidationRuleRecord, type EmbeddedChart, type EmbeddedObject, type NamedRange, type ProtectedRange, type Sheet, type TableView } from "@rowsncolumns/spreadsheet";
|
|
5
5
|
import { type CalculateNowOptions, type CalculationOperation, type CellXfs, type HistoryType, type SheetData, type SharedStrings, type SpreadsheetPatch } from "@rowsncolumns/spreadsheet-state";
|
|
6
6
|
import type { Patch } from "immer";
|
|
7
|
-
import * as Y from "yjs";
|
|
7
|
+
import type * as Y from "yjs";
|
|
8
8
|
import type { CollabProviderLike, YjsRuntime } from "./types";
|
|
9
9
|
export type UseYSpreadsheetPropsV2<T extends CellData, S extends Sheet, C extends EmbeddedChart, O extends EmbeddedObject> = {
|
|
10
10
|
/**
|
|
@@ -60,8 +60,9 @@ export type UseYSpreadsheetPropsV2<T extends CellData, S extends Sheet, C extend
|
|
|
60
60
|
doc: Y.Doc;
|
|
61
61
|
/**
|
|
62
62
|
* The Yjs implementation `doc` belongs to (its shared-type constructors and
|
|
63
|
-
* event classes)
|
|
64
|
-
*
|
|
63
|
+
* event classes): the namespace that created `doc`, e.g. `import * as Y
|
|
64
|
+
* from "yjs"`. Falls back to the runtime registered with
|
|
65
|
+
* `setDefaultYjsRuntime`; with neither, the hook throws (see `YjsRuntime`).
|
|
65
66
|
*/
|
|
66
67
|
yjs?: YjsRuntime;
|
|
67
68
|
calculateNow(options?: CalculateNowOptions): Promise<void>;
|
|
@@ -73,11 +74,13 @@ export type UseYSpreadsheetPropsV2<T extends CellData, S extends Sheet, C extend
|
|
|
73
74
|
*/
|
|
74
75
|
useV3?: boolean;
|
|
75
76
|
/**
|
|
76
|
-
* Current data version stored in the document ("v2" or "
|
|
77
|
+
* Current data version stored in the document ("v2", "v3" or "v5")
|
|
77
78
|
* If using V3 but version is "v2" or undefined, migration will occur
|
|
78
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`)
|
|
79
82
|
*/
|
|
80
|
-
sheetDataVersion?: "v2" | "v3";
|
|
83
|
+
sheetDataVersion?: "v2" | "v3" | "v5";
|
|
81
84
|
/**
|
|
82
85
|
* Called after migration completes so backend can persist the new version
|
|
83
86
|
*/
|
|
@@ -160,7 +163,7 @@ export type UseYSpreadsheetPropsV2<T extends CellData, S extends Sheet, C extend
|
|
|
160
163
|
};
|
|
161
164
|
export type YRowData = Y.Map<Y.Array<CellData | null>>;
|
|
162
165
|
export type YSheetData = Y.Array<YRowData | null>;
|
|
163
|
-
export declare const useYSpreadsheetV2: <T extends CellData, S extends Sheet, C extends EmbeddedChart, O extends EmbeddedObject>({ onChangeSheetData, onChangeSheets, onChangeTables, onChangeCharts, onChangeEmbeds, onChangeConditionalFormats, onChangeDataValidations, onChangeCitations, onAfterBroadcastPatch, recalcCellsMaxEntries, onChangeNamedRanges, onChangeProtectedRanges, onChangePivotTables, enqueueCalculation, enqueueGraphOperation, reevaluateDerivationsForCells, onChangeCellXfs, onChangeSharedStrings, calculateNow, onChangeActiveSheet, clientOnlyFunctionPattern, initialSheets, awarenessScopeId, canWrite, userId, title, sheetId, activeCell, kind, agentInitiator, selections, doc, provider, yjs, useV3, sheetDataVersion, onMigrationComplete, deleteV2AfterMigration, skipInitialSync, supportLegacySharedStringsArray, }: UseYSpreadsheetPropsV2<T, S, C, O>) => {
|
|
166
|
+
export declare const useYSpreadsheetV2: <T extends CellData, S extends Sheet, C extends EmbeddedChart, O extends EmbeddedObject>({ onChangeSheetData, onChangeSheets, onChangeTables, onChangeCharts, onChangeEmbeds, onChangeConditionalFormats, onChangeDataValidations, onChangeCitations, onAfterBroadcastPatch, recalcCellsMaxEntries, onChangeNamedRanges, onChangeProtectedRanges, onChangePivotTables, enqueueCalculation, enqueueGraphOperation, reevaluateDerivationsForCells, onChangeCellXfs, onChangeSharedStrings, calculateNow, onChangeActiveSheet, clientOnlyFunctionPattern, initialSheets, awarenessScopeId, canWrite, userId, title, sheetId, activeCell, kind, agentInitiator, selections, doc, provider, yjs: yjsRuntime, useV3, sheetDataVersion, onMigrationComplete, deleteV2AfterMigration, skipInitialSync, supportLegacySharedStringsArray, }: UseYSpreadsheetPropsV2<T, S, C, O>) => {
|
|
164
167
|
synced: boolean;
|
|
165
168
|
users: Collaborator[];
|
|
166
169
|
onBroadcastPatch: (patches: [patch: SpreadsheetPatch<Patch>, type?: HistoryType | undefined | null][]) => void;
|
|
@@ -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,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,8 +3,8 @@ 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
|
|
7
|
-
import {
|
|
6
|
+
import { addSheetDataPatches, addSheetDataPatchesV5, addSheetDataPatchesV3, applyMapPatches, createCellReaderV5, createCellKeyV3, filterErrorCellPatches, getCellDataFromYSheetData, mergeErrorEffectiveValueIntoCellData, processSheetDataEvents, shouldPersistErrorCellPatch, processSheetDataEventsV3, processSheetDataChangesV5, readStyleOverlayV5, sheetDataV2ToV3, sheetDataV3ToV2, sheetDataV5ToV2, updateArrayType, validateSheets, } from "./helpers";
|
|
7
|
+
import { resolveYjsRuntime } from "./yjs-runtime";
|
|
8
8
|
/**
|
|
9
9
|
* Convert Y.js events to SheetDataEvent format for incremental processing
|
|
10
10
|
*/
|
|
@@ -52,7 +52,8 @@ const getUserEnteredValueFromYDocV3 = (ySheetDataV3, sheetId, rowIndex, columnIn
|
|
|
52
52
|
import { createDeepObservable, createObservable, createSheetDataObservable, getPatchDeltasFromEvent, } from "./observables";
|
|
53
53
|
// Add a single null entry to the YSheetData
|
|
54
54
|
const origin = "local";
|
|
55
|
-
export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeTables, onChangeCharts, onChangeEmbeds, onChangeConditionalFormats, onChangeDataValidations, onChangeCitations, onAfterBroadcastPatch, recalcCellsMaxEntries, onChangeNamedRanges, onChangeProtectedRanges, onChangePivotTables, enqueueCalculation, enqueueGraphOperation, reevaluateDerivationsForCells, onChangeCellXfs, onChangeSharedStrings, calculateNow, onChangeActiveSheet, clientOnlyFunctionPattern, initialSheets, awarenessScopeId, canWrite = true, userId, title, sheetId, activeCell, kind, agentInitiator, selections, doc, provider, yjs
|
|
55
|
+
export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeTables, onChangeCharts, onChangeEmbeds, onChangeConditionalFormats, onChangeDataValidations, onChangeCitations, onAfterBroadcastPatch, recalcCellsMaxEntries, onChangeNamedRanges, onChangeProtectedRanges, onChangePivotTables, enqueueCalculation, enqueueGraphOperation, reevaluateDerivationsForCells, onChangeCellXfs, onChangeSharedStrings, calculateNow, onChangeActiveSheet, clientOnlyFunctionPattern, initialSheets, awarenessScopeId, canWrite = true, userId, title, sheetId, activeCell, kind, agentInitiator, selections, doc, provider, yjs: yjsRuntime, useV3 = false, sheetDataVersion = "v2", onMigrationComplete, deleteV2AfterMigration = false, skipInitialSync = false, supportLegacySharedStringsArray = false, }) => {
|
|
56
|
+
const yjs = resolveYjsRuntime(yjsRuntime);
|
|
56
57
|
const [synced, setSynced] = useState(false);
|
|
57
58
|
const [users, setUsers] = useState([]);
|
|
58
59
|
const [isLeader, setIsLeader] = useState(false);
|
|
@@ -95,6 +96,16 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
95
96
|
const ySheetDataV3 = useMemo(() => doc.getMap("sheetDataV3"), [doc]);
|
|
96
97
|
// Doc metadata - used as fallback for version when prop is undefined
|
|
97
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]);
|
|
98
109
|
const yDisableRecalc = useMemo(() => doc.getMap("disableRecalc"), [doc]);
|
|
99
110
|
// Recalc cells
|
|
100
111
|
const yRecalcCells = useMemo(() => doc.getArray("recalcCells"), [doc]);
|
|
@@ -232,14 +243,17 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
232
243
|
const initialSyncTimerRef = useRef(null);
|
|
233
244
|
// Trigger cell recalcs
|
|
234
245
|
const syncRecalcCells = useCallback((recalcCells, origin) => {
|
|
246
|
+
const readV5 = isV5Doc() ? createCellReaderV5(doc, stylesV5()) : null;
|
|
235
247
|
for (const [_, position, source] of recalcCells) {
|
|
236
248
|
// backend will calculate results
|
|
237
249
|
const isAgent = source === "agent"; // Agent already does the calculation
|
|
238
250
|
// Read directly from Y.js to avoid race condition where recalcCells
|
|
239
251
|
// observer fires before sheetData observer has updated React state
|
|
240
|
-
const formulaValue =
|
|
241
|
-
?
|
|
242
|
-
:
|
|
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);
|
|
243
257
|
// Was this from a changeBatch event in the back-end?
|
|
244
258
|
// To support client functions to run only
|
|
245
259
|
const isChangeBatch = position.force && isAgent;
|
|
@@ -296,6 +310,9 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
296
310
|
ySheetDataV3,
|
|
297
311
|
useV3,
|
|
298
312
|
reevaluateDerivationsForCells,
|
|
313
|
+
isV5Doc,
|
|
314
|
+
doc,
|
|
315
|
+
stylesV5,
|
|
299
316
|
]);
|
|
300
317
|
// Setup initial sync
|
|
301
318
|
const setupInitialSync = useCallback(() => {
|
|
@@ -340,8 +357,12 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
340
357
|
callback?.(value);
|
|
341
358
|
}
|
|
342
359
|
}
|
|
343
|
-
// Load sheet data based on V2 or
|
|
344
|
-
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) {
|
|
345
366
|
// Check if we need to migrate from V2 to V3
|
|
346
367
|
// Use prop if provided, otherwise fall back to yDocMeta for backwards compatibility
|
|
347
368
|
const resolvedVersion = sheetDataVersion ?? yDocMeta.get("sheetDataVersion");
|
|
@@ -399,6 +420,8 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
399
420
|
sheetDataVersion,
|
|
400
421
|
onMigrationComplete,
|
|
401
422
|
deleteV2AfterMigration,
|
|
423
|
+
isV5Doc,
|
|
424
|
+
readSheetDataV5,
|
|
402
425
|
]);
|
|
403
426
|
/**
|
|
404
427
|
* Replay the backend/agent recalc backlog into the local graph — and, on
|
|
@@ -532,6 +555,44 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
532
555
|
ySheetDataV3.unobserve(callback);
|
|
533
556
|
};
|
|
534
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]);
|
|
535
596
|
// CellXfs
|
|
536
597
|
useIsomorphicLayoutEffect(() => {
|
|
537
598
|
// Subscribe to sheet data
|
|
@@ -651,11 +712,17 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
651
712
|
// write merges ONLY the error effective value into the existing doc
|
|
652
713
|
// cell, preserving every other persisted field.
|
|
653
714
|
const persistableErrorCellPatches = [];
|
|
715
|
+
const isV5 = isV5Doc();
|
|
716
|
+
const readV5 = isV5 && errorCellPatches.length
|
|
717
|
+
? createCellReaderV5(doc, stylesV5())
|
|
718
|
+
: null;
|
|
654
719
|
for (const errorPatch of errorCellPatches) {
|
|
655
720
|
const [patchSheetId, rowIndex, , columnIndex] = errorPatch.path;
|
|
656
|
-
const currentCellData =
|
|
657
|
-
?
|
|
658
|
-
:
|
|
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));
|
|
659
726
|
const incomingCellData = errorPatch.value;
|
|
660
727
|
if (!shouldPersistErrorCellPatch(currentCellData, incomingCellData)) {
|
|
661
728
|
continue;
|
|
@@ -667,7 +734,10 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
667
734
|
}
|
|
668
735
|
if (persistableErrorCellPatches.length) {
|
|
669
736
|
doc.transact(() => {
|
|
670
|
-
if (
|
|
737
|
+
if (isV5) {
|
|
738
|
+
addSheetDataPatchesV5(doc, persistableErrorCellPatches, origin, stylesV5());
|
|
739
|
+
}
|
|
740
|
+
else if (useV3) {
|
|
671
741
|
addSheetDataPatchesV3(ySheetDataV3, persistableErrorCellPatches);
|
|
672
742
|
}
|
|
673
743
|
else {
|
|
@@ -677,6 +747,7 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
677
747
|
}
|
|
678
748
|
return;
|
|
679
749
|
}
|
|
750
|
+
const isV5 = isV5Doc();
|
|
680
751
|
doc.transact(() => {
|
|
681
752
|
for (let [patch, type = "redo"] of patches) {
|
|
682
753
|
// Check for existence of patch
|
|
@@ -689,7 +760,10 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
689
760
|
const patchKey = type === "redo" ? "patches" : "inversePatches";
|
|
690
761
|
if (patch.sheetData) {
|
|
691
762
|
const patches = patch.sheetData?.[patchKey];
|
|
692
|
-
if (
|
|
763
|
+
if (isV5) {
|
|
764
|
+
addSheetDataPatchesV5(doc, patches, origin, stylesV5());
|
|
765
|
+
}
|
|
766
|
+
else if (useV3) {
|
|
693
767
|
addSheetDataPatchesV3(ySheetDataV3, patches);
|
|
694
768
|
}
|
|
695
769
|
else {
|
|
@@ -746,6 +820,8 @@ export const useYSpreadsheetV2 = ({ onChangeSheetData, onChangeSheets, onChangeT
|
|
|
746
820
|
isLeader,
|
|
747
821
|
recalcCellsMaxEntries,
|
|
748
822
|
useV3,
|
|
823
|
+
isV5Doc,
|
|
824
|
+
stylesV5,
|
|
749
825
|
]);
|
|
750
826
|
// Listen to active cell change
|
|
751
827
|
useIsomorphicLayoutEffect(() => {
|
|
@@ -3,7 +3,7 @@ import type { CellInterface } from "@rowsncolumns/grid";
|
|
|
3
3
|
import type { CellData, Collaborator, ConditionalFormatRule, DataValidationRuleRecord, EmbeddedChart, EmbeddedObject, NamedRange, ProtectedRange, Sheet, TableView } from "@rowsncolumns/spreadsheet";
|
|
4
4
|
import type { CalculateNowOptions, CalculationOperation, HistoryType, SheetData, SpreadsheetPatch } from "@rowsncolumns/spreadsheet-state";
|
|
5
5
|
import type { Patch } from "immer";
|
|
6
|
-
import * as Y from "yjs";
|
|
6
|
+
import type * as Y from "yjs";
|
|
7
7
|
import type { CollabProviderLike, YjsRuntime } from "./types";
|
|
8
8
|
export type useYSpreadsheetProps<T extends CellData, S extends Sheet, C extends EmbeddedChart, O extends EmbeddedObject> = {
|
|
9
9
|
userId: string | number;
|
|
@@ -12,7 +12,11 @@ export type useYSpreadsheetProps<T extends CellData, S extends Sheet, C extends
|
|
|
12
12
|
activeCell?: CellInterface;
|
|
13
13
|
provider?: HocuspocusProvider | CollabProviderLike | any;
|
|
14
14
|
doc: Y.Doc;
|
|
15
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* The Yjs implementation `doc` belongs to, e.g. `import * as Y from "yjs"`.
|
|
17
|
+
* Falls back to the runtime registered with `setDefaultYjsRuntime`; with
|
|
18
|
+
* neither, the hook throws (see `YjsRuntime`).
|
|
19
|
+
*/
|
|
16
20
|
yjs?: YjsRuntime;
|
|
17
21
|
calculateNow(options?: CalculateNowOptions): void;
|
|
18
22
|
onChangeSheetData: React.Dispatch<React.SetStateAction<SheetData<T>>>;
|
|
@@ -33,7 +37,7 @@ export type useYSpreadsheetProps<T extends CellData, S extends Sheet, C extends
|
|
|
33
37
|
* Does not load initial data
|
|
34
38
|
* @returns
|
|
35
39
|
*/
|
|
36
|
-
export declare const useYSpreadsheet: <T extends CellData, S extends Sheet, C extends EmbeddedChart, O extends EmbeddedObject>({ onChangeSheetData, onChangeSheets, onChangeTables, onChangeCharts, onChangeEmbeds, onChangeConditionalFormats, onChangeDataValidations, onChangeNamedRanges, onChangeProtectedRanges, onError, enqueueCalculation, calculateNow, userId, title, sheetId, activeCell, doc, provider, yjs, }: useYSpreadsheetProps<T, S, C, O>) => {
|
|
40
|
+
export declare const useYSpreadsheet: <T extends CellData, S extends Sheet, C extends EmbeddedChart, O extends EmbeddedObject>({ onChangeSheetData, onChangeSheets, onChangeTables, onChangeCharts, onChangeEmbeds, onChangeConditionalFormats, onChangeDataValidations, onChangeNamedRanges, onChangeProtectedRanges, onError, enqueueCalculation, calculateNow, userId, title, sheetId, activeCell, doc, provider, yjs: yjsRuntime, }: useYSpreadsheetProps<T, S, C, O>) => {
|
|
37
41
|
onBroadcastPatch: (patches: [patch: SpreadsheetPatch<Patch>, type?: HistoryType | undefined][]) => void;
|
|
38
42
|
users: Collaborator[];
|
|
39
43
|
synced: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-yspreadsheet.d.ts","sourceRoot":"","sources":["../../use-yspreadsheet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,qBAAqB,EACrB,wBAAwB,EACxB,aAAa,EACb,cAAc,EACd,UAAU,EACV,cAAc,EACd,KAAK,EACL,SAAS,EACV,MAAM,2BAA2B,CAAC;AAKnC,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,EAEX,SAAS,EACT,gBAAgB,EACjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAInC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"use-yspreadsheet.d.ts","sourceRoot":"","sources":["../../use-yspreadsheet.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { scheduleNormalPriorityCallback, useIsomorphicLayoutEffect, } from "@row
|
|
|
2
2
|
import { applyPatches } from "immer";
|
|
3
3
|
import uniqBy from "lodash/uniqBy";
|
|
4
4
|
import { useCallback, useMemo, useRef, useState } from "react";
|
|
5
|
-
import
|
|
5
|
+
import { resolveYjsRuntime } from "./yjs-runtime";
|
|
6
6
|
const getStateVector = (doc, yjs) => yjs.encodeStateVector(doc);
|
|
7
7
|
// Function to get updates between two state vectors
|
|
8
8
|
const getUpdatesBetween = (doc, stateVector1, stateVector2, yjs) => {
|
|
@@ -15,7 +15,8 @@ const getUpdatesBetween = (doc, stateVector1, stateVector2, yjs) => {
|
|
|
15
15
|
* Does not load initial data
|
|
16
16
|
* @returns
|
|
17
17
|
*/
|
|
18
|
-
export const useYSpreadsheet = ({ onChangeSheetData, onChangeSheets, onChangeTables, onChangeCharts, onChangeEmbeds, onChangeConditionalFormats, onChangeDataValidations, onChangeNamedRanges, onChangeProtectedRanges, onError, enqueueCalculation, calculateNow, userId, title, sheetId, activeCell, doc, provider, yjs
|
|
18
|
+
export const useYSpreadsheet = ({ onChangeSheetData, onChangeSheets, onChangeTables, onChangeCharts, onChangeEmbeds, onChangeConditionalFormats, onChangeDataValidations, onChangeNamedRanges, onChangeProtectedRanges, onError, enqueueCalculation, calculateNow, userId, title, sheetId, activeCell, doc, provider, yjs: yjsRuntime, }) => {
|
|
19
|
+
const yjs = resolveYjsRuntime(yjsRuntime);
|
|
19
20
|
const [users, setUsers] = useState([]);
|
|
20
21
|
const [synced, setSynced] = useState(false);
|
|
21
22
|
const previousStateVectorRef = useRef(undefined);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["../../vitest.config.ts"],"names":[],"mappings":";AAEA,
|
|
1
|
+
{"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["../../vitest.config.ts"],"names":[],"mappings":";AAEA,wBAuBG"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { YjsRuntime } from "./types";
|
|
2
|
+
/** Registers (or, with `undefined`, clears) the runtime used when a call passes none. */
|
|
3
|
+
export declare const setDefaultYjsRuntime: (runtime: YjsRuntime | undefined) => void;
|
|
4
|
+
/** The runtime a call works with: the one it was given, else the registered default. */
|
|
5
|
+
export declare const resolveYjsRuntime: (runtime?: YjsRuntime) => YjsRuntime;
|
|
6
|
+
//# sourceMappingURL=yjs-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yjs-runtime.d.ts","sourceRoot":"","sources":["../../yjs-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAW1C,yFAAyF;AACzF,eAAO,MAAM,oBAAoB,GAAI,SAAS,UAAU,GAAG,SAAS,KAAG,IAEtE,CAAC;AAEF,wFAAwF;AACxF,eAAO,MAAM,iBAAiB,GAAI,UAAU,UAAU,KAAG,UAQxD,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* y-spreadsheet does not import a Yjs implementation: every helper and hook
|
|
3
|
+
* takes the namespace of the implementation the document belongs to (`yjs`,
|
|
4
|
+
* or a yjs-13-compatible layer over `@y/y` 14). A host that always works with
|
|
5
|
+
* one implementation can register it once here instead of passing it on every
|
|
6
|
+
* call; a runtime passed to a call wins over the registered one.
|
|
7
|
+
*/
|
|
8
|
+
let defaultYjsRuntime;
|
|
9
|
+
/** Registers (or, with `undefined`, clears) the runtime used when a call passes none. */
|
|
10
|
+
export const setDefaultYjsRuntime = (runtime) => {
|
|
11
|
+
defaultYjsRuntime = runtime;
|
|
12
|
+
};
|
|
13
|
+
/** The runtime a call works with: the one it was given, else the registered default. */
|
|
14
|
+
export const resolveYjsRuntime = (runtime) => {
|
|
15
|
+
const resolved = runtime ?? defaultYjsRuntime;
|
|
16
|
+
if (!resolved) {
|
|
17
|
+
throw new Error("@rowsncolumns/y-spreadsheet: no Yjs runtime. Pass `yjs` (the namespace of the Yjs implementation the document belongs to, e.g. `import * as Y from \"yjs\"`) or register one with setDefaultYjsRuntime(Y). The package does not import yjs itself.");
|
|
18
|
+
}
|
|
19
|
+
return resolved;
|
|
20
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rowsncolumns/y-spreadsheet",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "16.1.0-beta.0",
|
|
4
4
|
"main": "./dist/cjs/index.js",
|
|
5
5
|
"module": "./dist/esm/index.js",
|
|
6
6
|
"exports": {
|
|
@@ -58,7 +58,13 @@
|
|
|
58
58
|
"react-dom": ">=18.0.0",
|
|
59
59
|
"yjs": ">=13.0.0"
|
|
60
60
|
},
|
|
61
|
+
"peerDependenciesMeta": {
|
|
62
|
+
"yjs": {
|
|
63
|
+
"optional": true
|
|
64
|
+
}
|
|
65
|
+
},
|
|
61
66
|
"dependencies": {
|
|
67
|
+
"lib0": "^0.2.87",
|
|
62
68
|
"lodash": "^4.17.21",
|
|
63
69
|
"rxjs": "^7.8.2"
|
|
64
70
|
}
|