@rowsncolumns/y-spreadsheet 15.0.2 → 15.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.
@@ -12,9 +12,9 @@ var helpers_1 = require("./helpers");
12
12
  /**
13
13
  * Convert Y.js events to SheetDataEvent format for incremental processing
14
14
  */
15
- var convertToSheetDataEvents = function (events) {
15
+ var convertToSheetDataEvents = function (events, yjs) {
16
16
  return events.map(function (event) {
17
- var isYArrayEvent = event instanceof Y.YArrayEvent;
17
+ var isYArrayEvent = event instanceof yjs.YArrayEvent;
18
18
  return {
19
19
  path: event.path,
20
20
  delta: isYArrayEvent
@@ -57,10 +57,10 @@ var observables_1 = require("./observables");
57
57
  // Add a single null entry to the YSheetData
58
58
  var origin = "local";
59
59
  var useYSpreadsheetV2 = function (_a) {
60
- var onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeTables = _a.onChangeTables, onChangeCharts = _a.onChangeCharts, onChangeEmbeds = _a.onChangeEmbeds, onChangeConditionalFormats = _a.onChangeConditionalFormats, onChangeDataValidations = _a.onChangeDataValidations, onChangeCitations = _a.onChangeCitations, onAfterBroadcastPatch = _a.onAfterBroadcastPatch, recalcCellsMaxEntries = _a.recalcCellsMaxEntries, onChangeNamedRanges = _a.onChangeNamedRanges, onChangeProtectedRanges = _a.onChangeProtectedRanges, onChangePivotTables = _a.onChangePivotTables, enqueueCalculation = _a.enqueueCalculation, enqueueGraphOperation = _a.enqueueGraphOperation, reevaluateDerivationsForCells = _a.reevaluateDerivationsForCells, onChangeCellXfs = _a.onChangeCellXfs, onChangeSharedStrings = _a.onChangeSharedStrings, calculateNow = _a.calculateNow, onChangeActiveSheet = _a.onChangeActiveSheet, clientOnlyFunctionPattern = _a.clientOnlyFunctionPattern, initialSheets = _a.initialSheets, awarenessScopeId = _a.awarenessScopeId, userId = _a.userId, title = _a.title, sheetId = _a.sheetId, activeCell = _a.activeCell, kind = _a.kind, agentInitiator = _a.agentInitiator, selections = _a.selections, doc = _a.doc, provider = _a.provider, _b = _a.useV3, useV3 = _b === void 0 ? false : _b, _c = _a.sheetDataVersion, sheetDataVersion = _c === void 0 ? "v2" : _c, onMigrationComplete = _a.onMigrationComplete, _d = _a.deleteV2AfterMigration, deleteV2AfterMigration = _d === void 0 ? false : _d, _e = _a.skipInitialSync, skipInitialSync = _e === void 0 ? false : _e, _f = _a.supportLegacySharedStringsArray, supportLegacySharedStringsArray = _f === void 0 ? false : _f;
61
- var _g = tslib_1.__read((0, react_1.useState)(false), 2), synced = _g[0], setSynced = _g[1];
62
- var _h = tslib_1.__read((0, react_1.useState)([]), 2), users = _h[0], setUsers = _h[1];
63
- var _j = tslib_1.__read((0, react_1.useState)(false), 2), isLeader = _j[0], setIsLeader = _j[1];
60
+ var onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeTables = _a.onChangeTables, onChangeCharts = _a.onChangeCharts, onChangeEmbeds = _a.onChangeEmbeds, onChangeConditionalFormats = _a.onChangeConditionalFormats, onChangeDataValidations = _a.onChangeDataValidations, onChangeCitations = _a.onChangeCitations, onAfterBroadcastPatch = _a.onAfterBroadcastPatch, recalcCellsMaxEntries = _a.recalcCellsMaxEntries, onChangeNamedRanges = _a.onChangeNamedRanges, onChangeProtectedRanges = _a.onChangeProtectedRanges, onChangePivotTables = _a.onChangePivotTables, enqueueCalculation = _a.enqueueCalculation, enqueueGraphOperation = _a.enqueueGraphOperation, reevaluateDerivationsForCells = _a.reevaluateDerivationsForCells, onChangeCellXfs = _a.onChangeCellXfs, onChangeSharedStrings = _a.onChangeSharedStrings, calculateNow = _a.calculateNow, onChangeActiveSheet = _a.onChangeActiveSheet, clientOnlyFunctionPattern = _a.clientOnlyFunctionPattern, initialSheets = _a.initialSheets, awarenessScopeId = _a.awarenessScopeId, _b = _a.canWrite, canWrite = _b === void 0 ? true : _b, userId = _a.userId, title = _a.title, sheetId = _a.sheetId, activeCell = _a.activeCell, kind = _a.kind, agentInitiator = _a.agentInitiator, selections = _a.selections, doc = _a.doc, provider = _a.provider, _c = _a.yjs, yjs = _c === void 0 ? Y : _c, _d = _a.useV3, useV3 = _d === void 0 ? false : _d, _e = _a.sheetDataVersion, sheetDataVersion = _e === void 0 ? "v2" : _e, onMigrationComplete = _a.onMigrationComplete, _f = _a.deleteV2AfterMigration, deleteV2AfterMigration = _f === void 0 ? false : _f, _g = _a.skipInitialSync, skipInitialSync = _g === void 0 ? false : _g, _h = _a.supportLegacySharedStringsArray, supportLegacySharedStringsArray = _h === void 0 ? false : _h;
61
+ var _j = tslib_1.__read((0, react_1.useState)(false), 2), synced = _j[0], setSynced = _j[1];
62
+ var _k = tslib_1.__read((0, react_1.useState)([]), 2), users = _k[0], setUsers = _k[1];
63
+ var _l = tslib_1.__read((0, react_1.useState)(false), 2), isLeader = _l[0], setIsLeader = _l[1];
64
64
  var isLeaderRef = (0, react_1.useRef)(false);
65
65
  var resolvedAwarenessScopeId = awarenessScopeId;
66
66
  // Listen to awareness
@@ -76,22 +76,30 @@ var useYSpreadsheetV2 = function (_a) {
76
76
  return (state === null || state === void 0 ? void 0 : state.docGuid) === resolvedAwarenessScopeId;
77
77
  })
78
78
  : entries;
79
- if (!docStates.length) {
80
- setIsLeader(false);
81
- return;
82
- }
83
- var states = docStates.map(function (_a) {
79
+ // Only peers that can persist may lead (see `canWrite`). A view-only
80
+ // client's recalc write-backs are refused by the server, so electing it
81
+ // silently drops every computed value. A missing field is a writer.
82
+ var writers = docStates
83
+ .filter(function (_a) {
84
+ var _b = tslib_1.__read(_a, 2), _ = _b[0], state = _b[1];
85
+ return (state === null || state === void 0 ? void 0 : state.canWrite) !== false;
86
+ })
87
+ .map(function (_a) {
84
88
  var _b = tslib_1.__read(_a, 1), clientId = _b[0];
85
89
  return clientId;
86
90
  });
87
- var minId = Math.min.apply(Math, tslib_1.__spreadArray([], tslib_1.__read(states), false));
91
+ if (!canWrite || !writers.length) {
92
+ setIsLeader(false);
93
+ return;
94
+ }
95
+ var minId = Math.min.apply(Math, tslib_1.__spreadArray([], tslib_1.__read(writers), false));
88
96
  // Always include self in the elec
89
97
  setIsLeader(doc.clientID === minId);
90
98
  };
91
99
  awareness.on("change", updateLeader);
92
100
  updateLeader(); // Initial check
93
101
  return function () { return awareness.off("change", updateLeader); };
94
- }, [awareness, doc, resolvedAwarenessScopeId]);
102
+ }, [awareness, doc, resolvedAwarenessScopeId, canWrite]);
95
103
  (0, ui_1.useIsomorphicLayoutEffect)(function () {
96
104
  isLeaderRef.current = isLeader;
97
105
  }, [isLeader]);
@@ -243,6 +251,12 @@ var useYSpreadsheetV2 = function (_a) {
243
251
  return source === "backend" || source === "agent";
244
252
  });
245
253
  }, [yRecalcCells]);
254
+ /**
255
+ * Set once the initial sync has built the dependency graph and replayed the
256
+ * backlog, so a later leadership hand-over can replay it again.
257
+ */
258
+ var graphReadyRef = (0, react_1.useRef)(false);
259
+ var initialSyncTimerRef = (0, react_1.useRef)(null);
246
260
  // Trigger cell recalcs
247
261
  var syncRecalcCells = (0, react_1.useCallback)(function (recalcCells, origin) {
248
262
  var e_2, _a;
@@ -460,6 +474,24 @@ var useYSpreadsheetV2 = function (_a) {
460
474
  onMigrationComplete,
461
475
  deleteV2AfterMigration,
462
476
  ]);
477
+ /**
478
+ * Replay the backend/agent recalc backlog into the local graph — and, on
479
+ * the leader, evaluate it. Only the leader clears the entries, and only once
480
+ * they sit in its calculation queue: a non-leader merely graph-enqueues
481
+ * (no evaluation), so if it deleted them the leader would never recompute
482
+ * the backlog at all.
483
+ */
484
+ var drainBacklog = (0, react_1.useCallback)(function () {
485
+ var backlog = getBacklog();
486
+ if (!backlog.length)
487
+ return;
488
+ syncRecalcCells(backlog, "backend");
489
+ if (isLeaderRef.current) {
490
+ doc.transact(function () {
491
+ yRecalcCells.delete(0, yRecalcCells.length);
492
+ }, origin);
493
+ }
494
+ }, [getBacklog, syncRecalcCells, doc, yRecalcCells]);
463
495
  // Synced
464
496
  var onSynced = (0, react_1.useCallback)(function () {
465
497
  if (!synced) {
@@ -469,42 +501,48 @@ var useYSpreadsheetV2 = function (_a) {
469
501
  (0, react_dom_1.flushSync)(function () {
470
502
  setupInitialSync();
471
503
  });
472
- // Build dependency graph, then sync backlog cells
473
- requestAnimationFrame(function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
474
- var backlog;
504
+ // Build dependency graph, then sync backlog cells. Deferred through a
505
+ // timer, not `requestAnimationFrame`: rAF is paused in background tabs,
506
+ // which left a backgrounded leader's backlog unevaluated indefinitely.
507
+ initialSyncTimerRef.current = setTimeout(function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
475
508
  return tslib_1.__generator(this, function (_a) {
476
509
  switch (_a.label) {
477
- case 0: return [4 /*yield*/, calculateNow({
478
- disableEvaluation: true,
479
- shouldResetCellDependencyGraph: true,
480
- })];
510
+ case 0:
511
+ initialSyncTimerRef.current = null;
512
+ return [4 /*yield*/, calculateNow({
513
+ disableEvaluation: true,
514
+ shouldResetCellDependencyGraph: true,
515
+ })];
481
516
  case 1:
482
517
  _a.sent();
483
- backlog = getBacklog();
484
- if (backlog.length) {
485
- syncRecalcCells(backlog, "backend");
486
- // Clear processed backlog entries from yRecalcCells
487
- doc.transact(function () {
488
- yRecalcCells.delete(0, yRecalcCells.length);
489
- }, origin);
490
- }
518
+ // Sync backlog after graph is initialized
519
+ drainBacklog();
520
+ graphReadyRef.current = true;
491
521
  return [2 /*return*/];
492
522
  }
493
523
  });
494
- }); });
524
+ }); }, 0);
495
525
  }
496
526
  setSynced(true);
497
527
  }
498
- }, [
499
- calculateNow,
500
- setupInitialSync,
501
- synced,
502
- syncRecalcCells,
503
- getBacklog,
504
- doc,
505
- yRecalcCells,
506
- skipInitialSync,
507
- ]);
528
+ }, [calculateNow, setupInitialSync, synced, drainBacklog, skipInitialSync]);
529
+ // A client that becomes leader after its initial sync (the previous leader
530
+ // left, or the election settled late) takes over whatever backlog is still
531
+ // in the document: as a non-leader it only mirrored those cells into its
532
+ // graph, so it evaluates them now — and only now clears them.
533
+ (0, ui_1.useIsomorphicLayoutEffect)(function () {
534
+ if (!isLeader || !synced || !graphReadyRef.current)
535
+ return;
536
+ drainBacklog();
537
+ }, [isLeader, synced, drainBacklog]);
538
+ (0, ui_1.useIsomorphicLayoutEffect)(function () {
539
+ return function () {
540
+ if (initialSyncTimerRef.current !== null) {
541
+ clearTimeout(initialSyncTimerRef.current);
542
+ initialSyncTimerRef.current = null;
543
+ }
544
+ };
545
+ }, []);
508
546
  // Sync state
509
547
  if ((provider === null || provider === void 0 ? void 0 : provider.synced) && !synced) {
510
548
  onSynced();
@@ -533,7 +571,7 @@ var useYSpreadsheetV2 = function (_a) {
533
571
  var origin_1 = (_b = (_a = events === null || events === void 0 ? void 0 : events[0]) === null || _a === void 0 ? void 0 : _a.transaction) === null || _b === void 0 ? void 0 : _b.origin;
534
572
  if (origin_1 !== "local") {
535
573
  // Convert Y.js events to SheetDataEvent format and apply incremental updates
536
- var sheetDataEvents_1 = convertToSheetDataEvents(events);
574
+ var sheetDataEvents_1 = convertToSheetDataEvents(events, yjs);
537
575
  onChangeSheetData(function (prevSheetData) {
538
576
  var result = (0, helpers_1.processSheetDataEvents)(sheetDataEvents_1, prevSheetData, ySheetDataV2);
539
577
  // Fall back to full serialization only if incremental update fails
@@ -598,7 +636,7 @@ var useYSpreadsheetV2 = function (_a) {
598
636
  var subs = [];
599
637
  var _loop_1 = function (mappingKey, ydoc, callback) {
600
638
  // Only observe Arrays (shared strings Map is handled separately if needed)
601
- if (ydoc instanceof Y.Array) {
639
+ if (ydoc instanceof yjs.Array) {
602
640
  var subscription = (0, observables_1.createDeepObservable)(ydoc).subscribe(function (events) {
603
641
  var e_7, _a;
604
642
  var _b;
@@ -626,7 +664,7 @@ var useYSpreadsheetV2 = function (_a) {
626
664
  });
627
665
  subs.push(subscription);
628
666
  }
629
- else if (ydoc instanceof Y.Map && mappingKey === "sharedStrings") {
667
+ else if (ydoc instanceof yjs.Map && mappingKey === "sharedStrings") {
630
668
  // Handle shared strings Map observation
631
669
  var callback_map_1 = function (event) {
632
670
  if (event.transaction.origin !== "local") {
@@ -663,24 +701,45 @@ var useYSpreadsheetV2 = function (_a) {
663
701
  if (!synced) {
664
702
  return;
665
703
  }
704
+ var pending = new Set();
666
705
  // Sync all cells that are updated in the backend
667
706
  // // Observe recalc cells separat
668
707
  var onRecalcCellsChange = function (event) {
669
708
  var patches = (0, observables_1.getPatchDeltasFromEvent)(event);
670
709
  var origin = event.transaction.origin;
671
710
  if (origin !== "local") {
672
- requestAnimationFrame(function () {
711
+ // A timer, not `requestAnimationFrame`: rAF is paused in background
712
+ // tabs, so a backgrounded leader would stop evaluating remote patches.
713
+ var timer_1 = setTimeout(function () {
714
+ pending.delete(timer_1);
673
715
  syncRecalcCells(patches, origin);
674
- });
716
+ }, 0);
717
+ pending.add(timer_1);
675
718
  }
676
719
  };
677
720
  // Skip the first recalc cells change
678
721
  var sub = (0, observables_1.createObservable)(yRecalcCells).subscribe(onRecalcCellsChange);
679
- return function () { return sub.unsubscribe(); };
722
+ return function () {
723
+ var e_8, _a;
724
+ sub.unsubscribe();
725
+ try {
726
+ for (var pending_1 = tslib_1.__values(pending), pending_1_1 = pending_1.next(); !pending_1_1.done; pending_1_1 = pending_1.next()) {
727
+ var timer = pending_1_1.value;
728
+ clearTimeout(timer);
729
+ }
730
+ }
731
+ catch (e_8_1) { e_8 = { error: e_8_1 }; }
732
+ finally {
733
+ try {
734
+ if (pending_1_1 && !pending_1_1.done && (_a = pending_1.return)) _a.call(pending_1);
735
+ }
736
+ finally { if (e_8) throw e_8.error; }
737
+ }
738
+ };
680
739
  }, [syncRecalcCells, recalcCellsMaxEntries, synced, yRecalcCells]);
681
740
  // Broadcast patch
682
741
  var onBroadcastPatch = (0, react_1.useCallback)(function (patches) {
683
- var e_8, _a, e_9, _b;
742
+ var e_9, _a, e_10, _b;
684
743
  var _c;
685
744
  // Ignore push flag
686
745
  var disableRecalc = Boolean(patches.find(function (_a) {
@@ -716,12 +775,12 @@ var useYSpreadsheetV2 = function (_a) {
716
775
  }
717
776
  }
718
777
  }
719
- catch (e_8_1) { e_8 = { error: e_8_1 }; }
778
+ catch (e_9_1) { e_9 = { error: e_9_1 }; }
720
779
  finally {
721
780
  try {
722
781
  if (patches_1_1 && !patches_1_1.done && (_a = patches_1.return)) _a.call(patches_1);
723
782
  }
724
- finally { if (e_8) throw e_8.error; }
783
+ finally { if (e_9) throw e_9.error; }
725
784
  }
726
785
  // Containment for this non-leader write path: an error may only
727
786
  // fill a cell with no effective value (the blank-after-reload case)
@@ -746,12 +805,12 @@ var useYSpreadsheetV2 = function (_a) {
746
805
  persistableErrorCellPatches_1.push(tslib_1.__assign(tslib_1.__assign({}, errorPatch), { value: (0, helpers_1.mergeErrorEffectiveValueIntoCellData)(currentCellData, incomingCellData) }));
747
806
  }
748
807
  }
749
- catch (e_9_1) { e_9 = { error: e_9_1 }; }
808
+ catch (e_10_1) { e_10 = { error: e_10_1 }; }
750
809
  finally {
751
810
  try {
752
811
  if (errorCellPatches_1_1 && !errorCellPatches_1_1.done && (_b = errorCellPatches_1.return)) _b.call(errorCellPatches_1);
753
812
  }
754
- finally { if (e_9) throw e_9.error; }
813
+ finally { if (e_10) throw e_10.error; }
755
814
  }
756
815
  if (persistableErrorCellPatches_1.length) {
757
816
  doc.transact(function () {
@@ -759,14 +818,14 @@ var useYSpreadsheetV2 = function (_a) {
759
818
  (0, helpers_1.addSheetDataPatchesV3)(ySheetDataV3, persistableErrorCellPatches_1);
760
819
  }
761
820
  else {
762
- (0, helpers_1.addSheetDataPatches)(ySheetDataV2, persistableErrorCellPatches_1);
821
+ (0, helpers_1.addSheetDataPatches)(ySheetDataV2, persistableErrorCellPatches_1, yjs);
763
822
  }
764
823
  }, origin);
765
824
  }
766
825
  return;
767
826
  }
768
827
  doc.transact(function () {
769
- var e_10, _a, e_11, _b;
828
+ var e_11, _a, e_12, _b;
770
829
  var _c, _d, _e, _f;
771
830
  try {
772
831
  for (var patches_2 = tslib_1.__values(patches), patches_2_1 = patches_2.next(); !patches_2_1.done; patches_2_1 = patches_2.next()) {
@@ -785,7 +844,7 @@ var useYSpreadsheetV2 = function (_a) {
785
844
  (0, helpers_1.addSheetDataPatchesV3)(ySheetDataV3, patches_3);
786
845
  }
787
846
  else {
788
- (0, helpers_1.addSheetDataPatches)(ySheetDataV2, patches_3);
847
+ (0, helpers_1.addSheetDataPatches)(ySheetDataV2, patches_3, yjs);
789
848
  }
790
849
  }
791
850
  if (patch.cellXfs) {
@@ -793,15 +852,15 @@ var useYSpreadsheetV2 = function (_a) {
793
852
  (0, helpers_1.applyMapPatches)(yCellXfs, patches_4);
794
853
  }
795
854
  try {
796
- for (var _j = (e_11 = void 0, tslib_1.__values(documentMap.entries())), _k = _j.next(); !_k.done; _k = _j.next()) {
855
+ for (var _j = (e_12 = void 0, tslib_1.__values(documentMap.entries())), _k = _j.next(); !_k.done; _k = _j.next()) {
797
856
  var _l = tslib_1.__read(_k.value, 2), mappingKey = _l[0], _m = tslib_1.__read(_l[1], 1), ydoc = _m[0];
798
857
  if (patch === null || patch === void 0 ? void 0 : patch[mappingKey]) {
799
858
  var patches_5 = (_e = patch[mappingKey]) === null || _e === void 0 ? void 0 : _e[patchKey];
800
859
  // Handle shared strings Map (always use Map now)
801
- if (mappingKey === "sharedStrings" && ydoc instanceof Y.Map) {
860
+ if (mappingKey === "sharedStrings" && ydoc instanceof yjs.Map) {
802
861
  (0, helpers_1.applyMapPatches)(ydoc, patches_5);
803
862
  }
804
- else if (ydoc instanceof Y.Array) {
863
+ else if (ydoc instanceof yjs.Array) {
805
864
  // Check if we are updating sheets
806
865
  if (mappingKey === "sheets" && ydoc.length === 0) {
807
866
  // Add initial sheets
@@ -812,12 +871,12 @@ var useYSpreadsheetV2 = function (_a) {
812
871
  }
813
872
  }
814
873
  }
815
- catch (e_11_1) { e_11 = { error: e_11_1 }; }
874
+ catch (e_12_1) { e_12 = { error: e_12_1 }; }
816
875
  finally {
817
876
  try {
818
877
  if (_k && !_k.done && (_b = _j.return)) _b.call(_j);
819
878
  }
820
- finally { if (e_11) throw e_11.error; }
879
+ finally { if (e_12) throw e_12.error; }
821
880
  }
822
881
  // Recalc cells
823
882
  if ((_f = patch.recalcCells) === null || _f === void 0 ? void 0 : _f[type]) {
@@ -834,12 +893,12 @@ var useYSpreadsheetV2 = function (_a) {
834
893
  }
835
894
  }
836
895
  }
837
- catch (e_10_1) { e_10 = { error: e_10_1 }; }
896
+ catch (e_11_1) { e_11 = { error: e_11_1 }; }
838
897
  finally {
839
898
  try {
840
899
  if (patches_2_1 && !patches_2_1.done && (_a = patches_2.return)) _a.call(patches_2);
841
900
  }
842
- finally { if (e_10) throw e_10.error; }
901
+ finally { if (e_11) throw e_11.error; }
843
902
  }
844
903
  }, origin);
845
904
  onAfterBroadcastPatch === null || onAfterBroadcastPatch === void 0 ? void 0 : onAfterBroadcastPatch(patches, doc);
@@ -847,6 +906,7 @@ var useYSpreadsheetV2 = function (_a) {
847
906
  onAfterBroadcastPatch,
848
907
  documentMap,
849
908
  yRecalcCells,
909
+ yjs,
850
910
  doc,
851
911
  userId,
852
912
  yDisableRecalc,
@@ -875,7 +935,7 @@ var useYSpreadsheetV2 = function (_a) {
875
935
  // Awareness
876
936
  (0, ui_1.useIsomorphicLayoutEffect)(function () {
877
937
  var onChangeAwareness = function () {
878
- var e_12, _a;
938
+ var e_13, _a;
879
939
  var _b, _c, _d, _e, _f;
880
940
  if (awareness) {
881
941
  var collaborators = [];
@@ -915,12 +975,12 @@ var useYSpreadsheetV2 = function (_a) {
915
975
  });
916
976
  }
917
977
  }
918
- catch (e_12_1) { e_12 = { error: e_12_1 }; }
978
+ catch (e_13_1) { e_13 = { error: e_13_1 }; }
919
979
  finally {
920
980
  try {
921
981
  if (_h && !_h.done && (_a = _g.return)) _a.call(_g);
922
982
  }
923
- finally { if (e_12) throw e_12.error; }
983
+ finally { if (e_13) throw e_13.error; }
924
984
  }
925
985
  setUsers(collaborators);
926
986
  }
@@ -942,6 +1002,7 @@ var useYSpreadsheetV2 = function (_a) {
942
1002
  awareness.setLocalStateField("userId", userId);
943
1003
  awareness.setLocalStateField("title", title);
944
1004
  awareness.setLocalStateField("sheetId", sheetId);
1005
+ awareness.setLocalStateField("canWrite", canWrite);
945
1006
  if (resolvedAwarenessScopeId) {
946
1007
  awareness.setLocalStateField("docGuid", resolvedAwarenessScopeId);
947
1008
  }
@@ -963,6 +1024,7 @@ var useYSpreadsheetV2 = function (_a) {
963
1024
  }, [
964
1025
  awareness,
965
1026
  resolvedAwarenessScopeId,
1027
+ canWrite,
966
1028
  userId,
967
1029
  title,
968
1030
  sheetId,
@@ -3,15 +3,17 @@ 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 type { WebsocketProvider } from "y-websocket";
7
- import type * as Y from "yjs";
6
+ import * as Y from "yjs";
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;
10
10
  title: string;
11
11
  sheetId: number;
12
12
  activeCell?: CellInterface;
13
- provider?: HocuspocusProvider | WebsocketProvider | any;
13
+ provider?: HocuspocusProvider | CollabProviderLike | any;
14
14
  doc: Y.Doc;
15
+ /** The Yjs implementation `doc` belongs to; defaults to `yjs` (see `YjsRuntime`). */
16
+ yjs?: YjsRuntime;
15
17
  calculateNow(options?: CalculateNowOptions): void;
16
18
  onChangeSheetData: React.Dispatch<React.SetStateAction<SheetData<T>>>;
17
19
  onChangeTables: React.Dispatch<React.SetStateAction<TableView[]>>;
@@ -31,7 +33,7 @@ export type useYSpreadsheetProps<T extends CellData, S extends Sheet, C extends
31
33
  * Does not load initial data
32
34
  * @returns
33
35
  */
34
- 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, }: useYSpreadsheetProps<T, S, C, O>) => {
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>) => {
35
37
  onBroadcastPatch: (patches: [patch: SpreadsheetPatch<Patch>, type?: HistoryType | undefined][]) => void;
36
38
  users: Collaborator[];
37
39
  synced: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"use-yspreadsheet.d.ts","sourceRoot":"","sources":["../../use-yspreadsheet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-yspreadsheet.d.ts","sourceRoot":"","sources":["../../use-yspreadsheet.ts"],"names":[],"mappings":"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"}
@@ -6,13 +6,15 @@ var spreadsheet_1 = require("@rowsncolumns/spreadsheet");
6
6
  var immer_1 = require("immer");
7
7
  var uniqBy_1 = tslib_1.__importDefault(require("lodash/uniqBy"));
8
8
  var react_1 = require("react");
9
- var yjs_1 = require("yjs");
10
- var getStateVector = function (doc) { return (0, yjs_1.encodeStateVector)(doc); };
9
+ var Y = tslib_1.__importStar(require("yjs"));
10
+ var getStateVector = function (doc, yjs) {
11
+ return yjs.encodeStateVector(doc);
12
+ };
11
13
  // Function to get updates between two state vectors
12
- var getUpdatesBetween = function (doc, stateVector1, stateVector2) {
13
- var diff = (0, yjs_1.encodeStateAsUpdate)(doc, stateVector1);
14
- var newDiff = (0, yjs_1.encodeStateAsUpdate)(doc, stateVector2);
15
- return (0, yjs_1.diffUpdate)(diff, newDiff);
14
+ var getUpdatesBetween = function (doc, stateVector1, stateVector2, yjs) {
15
+ var diff = yjs.encodeStateAsUpdate(doc, stateVector1);
16
+ var newDiff = yjs.encodeStateAsUpdate(doc, stateVector2);
17
+ return yjs.diffUpdate(diff, newDiff);
16
18
  };
17
19
  /**
18
20
  * Connects to a Y server and picks up the most recent change
@@ -20,9 +22,9 @@ var getUpdatesBetween = function (doc, stateVector1, stateVector2) {
20
22
  * @returns
21
23
  */
22
24
  var useYSpreadsheet = function (_a) {
23
- var onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeTables = _a.onChangeTables, onChangeCharts = _a.onChangeCharts, onChangeEmbeds = _a.onChangeEmbeds, onChangeConditionalFormats = _a.onChangeConditionalFormats, onChangeDataValidations = _a.onChangeDataValidations, onChangeNamedRanges = _a.onChangeNamedRanges, onChangeProtectedRanges = _a.onChangeProtectedRanges, onError = _a.onError, enqueueCalculation = _a.enqueueCalculation, calculateNow = _a.calculateNow, userId = _a.userId, title = _a.title, sheetId = _a.sheetId, activeCell = _a.activeCell, doc = _a.doc, provider = _a.provider;
24
- var _b = tslib_1.__read((0, react_1.useState)([]), 2), users = _b[0], setUsers = _b[1];
25
- var _c = tslib_1.__read((0, react_1.useState)(false), 2), synced = _c[0], setSynced = _c[1];
25
+ var onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeTables = _a.onChangeTables, onChangeCharts = _a.onChangeCharts, onChangeEmbeds = _a.onChangeEmbeds, onChangeConditionalFormats = _a.onChangeConditionalFormats, onChangeDataValidations = _a.onChangeDataValidations, onChangeNamedRanges = _a.onChangeNamedRanges, onChangeProtectedRanges = _a.onChangeProtectedRanges, onError = _a.onError, enqueueCalculation = _a.enqueueCalculation, calculateNow = _a.calculateNow, userId = _a.userId, title = _a.title, sheetId = _a.sheetId, activeCell = _a.activeCell, doc = _a.doc, provider = _a.provider, _b = _a.yjs, yjs = _b === void 0 ? Y : _b;
26
+ var _c = tslib_1.__read((0, react_1.useState)([]), 2), users = _c[0], setUsers = _c[1];
27
+ var _d = tslib_1.__read((0, react_1.useState)(false), 2), synced = _d[0], setSynced = _d[1];
26
28
  var previousStateVectorRef = (0, react_1.useRef)(undefined);
27
29
  var currentStateVectorRef = (0, react_1.useRef)(undefined);
28
30
  // Recalc cells
@@ -96,10 +98,10 @@ var useYSpreadsheet = function (_a) {
96
98
  var syncedDoc = doc;
97
99
  if (previousStateVectorRef.current) {
98
100
  // Capture the current state vector on subsequent syncs
99
- currentStateVectorRef.current = getStateVector(doc);
100
- var updates = getUpdatesBetween(doc, previousStateVectorRef.current, currentStateVectorRef.current);
101
- var newDoc = new yjs_1.Doc({ gc: true });
102
- (0, yjs_1.applyUpdate)(newDoc, updates);
101
+ currentStateVectorRef.current = getStateVector(doc, yjs);
102
+ var updates = getUpdatesBetween(doc, previousStateVectorRef.current, currentStateVectorRef.current, yjs);
103
+ var newDoc = new yjs.Doc({ gc: true });
104
+ yjs.applyUpdate(newDoc, updates);
103
105
  syncedDoc = newDoc;
104
106
  previousStateVectorRef.current = currentStateVectorRef.current;
105
107
  }
@@ -169,7 +171,7 @@ var useYSpreadsheet = function (_a) {
169
171
  });
170
172
  // Set synced
171
173
  setSynced(true);
172
- }, [calculateNow, docMap, onError, doc]);
174
+ }, [calculateNow, docMap, onError, doc, yjs]);
173
175
  // Sync state
174
176
  if ((provider === null || provider === void 0 ? void 0 : provider.synced) && !synced) {
175
177
  onSynced();
@@ -180,7 +182,7 @@ var useYSpreadsheet = function (_a) {
180
182
  var onConnectionStatusChange = function (_a) {
181
183
  var status = _a.status;
182
184
  if (status === "disconnected") {
183
- previousStateVectorRef.current = getStateVector(doc);
185
+ previousStateVectorRef.current = getStateVector(doc, yjs);
184
186
  }
185
187
  };
186
188
  provider === null || provider === void 0 ? void 0 : provider.on("status", onConnectionStatusChange);
@@ -3,7 +3,7 @@ import { type HistoryType, type SheetData, type SpreadsheetPatch } from "@rowsnc
3
3
  import type { Patch } from "immer";
4
4
  import * as Y from "yjs";
5
5
  import type { YRowData, YSheetData } from "./use-yspreadsheet-v2";
6
- import type { CellKeyV3, CellDataV3, ParsedCellKeyV3 } from "./types";
6
+ import type { CellKeyV3, CellDataV3, ParsedCellKeyV3, YjsRuntime } from "./types";
7
7
  /**
8
8
  * Simplified structure to pass event data synchronously
9
9
  */
@@ -24,7 +24,7 @@ export type SheetDataEvent = {
24
24
  * @param source
25
25
  * @param sheetDataVersion - Version of sheet data format ("v2" or "v3"). Falls back to docMeta if undefined.
26
26
  */
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") => void;
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", yjs?: YjsRuntime) => void;
28
28
  /**
29
29
  * Add sheet data to a yjs map using immer patches
30
30
  *
@@ -33,10 +33,10 @@ export declare const applyPatchesToYDoc: (doc: Y.Doc, userId: string | number, p
33
33
  * 1. Deduplicating patches targeting the same cell (later patches win)
34
34
  * 2. Grouping updates by sheet/row for efficient batch application
35
35
  */
36
- export declare const addSheetDataPatches: (ySheetData: Y.Map<YSheetData>, patches: Patch[]) => void;
37
- export declare const getSheetFromYSheetData: (ySheetData: Y.Map<YSheetData>, sheetId: string | number) => YSheetData;
36
+ export declare const addSheetDataPatches: (ySheetData: Y.Map<YSheetData>, patches: Patch[], yjs?: YjsRuntime) => void;
37
+ export declare const getSheetFromYSheetData: (ySheetData: Y.Map<YSheetData>, sheetId: string | number, yjs?: YjsRuntime) => YSheetData;
38
38
  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) => Y.Array<CellData | null>;
39
+ export declare const getRowDataFromSheet: (ysheet: Y.Array<YRowData | null>, rowIndex: number | string, yjs?: YjsRuntime) => Y.Array<CellData | null>;
40
40
  export declare const setCellDataInRowData: (rowData: Y.Array<CellData | null>, columnIndex: number | string, cellData?: CellData | null) => void;
41
41
  export declare const removeRowData: (ysheet: Y.Array<YRowData | null>, rowIndex: number | string) => void;
42
42
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../helpers.ts"],"names":[],"mappings":"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"}
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;AAOzB,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;AAEjB;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC;QACjC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,EAAE,CAAC;IACJ,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,GAC7B,KAAK,CAAC,CAAC,GAAG,EACV,QAAQ,MAAM,GAAG,MAAM,EACvB,SAAS,CACP,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC9B,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CACtC,EAAE,EACH,SAAS,OAAO,GAAG,MAAM,GAAG,SAAS,EACrC,mBAAmB,IAAI,GAAG,IAAI,EAC9B,MAAK,UAAc,SAyGpB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,GAC9B,YAAY,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAC7B,SAAS,KAAK,EAAE,EAChB,MAAK,UAAc,SAkMpB,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,YAAY,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAC7B,SAAS,MAAM,GAAG,MAAM,EACxB,MAAK,UAAc,KAClB,UAUF,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,YAAY,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAC7B,SAAS,MAAM,GAAG,MAAM,KACvB,IAGF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,EAChC,UAAU,MAAM,GAAG,MAAM,EACzB,MAAK,UAAc,KAClB,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CA+CzB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,SAAS,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,EACjC,aAAa,MAAM,GAAG,MAAM,EAC5B,WAAU,QAAQ,GAAG,IAAW,KAC/B,IAkBF,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,EAChC,UAAU,MAAM,GAAG,MAAM,KACxB,IAQF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,GACpC,YAAY,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAC7B,SAAS,MAAM,GAAG,MAAM,EACxB,UAAU,MAAM,GAAG,MAAM,EACzB,aAAa,MAAM,GAAG,MAAM,KAC3B,QAAQ,GAAG,IAAI,GAAG,SAapB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,WAAW,QAAQ,GAAG,IAAI,KACzB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAExB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,GAAI,SAAS,KAAK,EAAE,KAAG,KAAK,EAQ9D,CAAC;AAqCF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,2BAA2B,GACtC,iBAAiB,QAAQ,GAAG,IAAI,GAAG,SAAS,EAC5C,kBAAkB,QAAQ,GAAG,IAAI,GAAG,SAAS,KAC5C,OA0BF,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,oCAAoC,GAC/C,iBAAiB,QAAQ,GAAG,IAAI,GAAG,SAAS,EAC5C,kBAAkB,QAAQ,KACzB,QAcF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAC1B,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EACpB,SAAS,KAAK,EAAE,KACf,IA6GF,CAAC;AAsCF;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,KAAK,EAAE,QAAQ,CAAC,EAAE,KAAG,CAAC,EAM9D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,GAAG,UAAU,EAC5C,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EACd,SAAS,KAAK,EAAE,SA4BjB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,cAAc,EAAE,EACxB,kBAAkB,SAAS,CAAC,GAAG,CAAC,EAChC,cAAc,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,KAC9B,SAAS,CAAC,GAAG,CAAC,GAAG,IA8KnB,CAAC;AAiBF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAC1B,SAAS,MAAM,EACf,UAAU,MAAM,EAChB,aAAa,MAAM,KAClB,SAKF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,SAAS,SAAS,KAAG,eAAe,GAAG,IAWrE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,QAAQ,EACjD,OAAO,CAAC,EACR,SAAS,MAAM,EACf,UAAU,MAAM,EAChB,aAAa,MAAM,KAClB,UAAU,CAAC,CAAC,CAKb,CAAC;AAEH;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAE7C;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,QAAQ,EAChD,QAAQ,SAAS,CAAC,CAAC,CAAC,KACnB,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAuB3B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,QAAQ,EAChD,QAAQ,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,KACjC,SAAS,CAAC,CAAC,CAgCb,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,GACpB,cAAc,YAAY,EAC1B,SAAS,MAAM,EACf,UAAU,MAAM,EAChB,aAAa,MAAM,KAClB,UAAU,GAAG,SAGf,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,GACpB,cAAc,YAAY,EAC1B,SAAS,MAAM,EACf,UAAU,MAAM,EAChB,aAAa,MAAM,EACnB,OAAO,QAAQ,KACd,IAMF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,GACvB,cAAc,YAAY,EAC1B,SAAS,MAAM,EACf,UAAU,MAAM,EAChB,aAAa,MAAM,KAClB,IAGF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,GACxB,cAAc,YAAY,EAC1B,SAAS,MAAM,KACd,IAOF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,KAAK,CAAC,CAAC,GAAG,KAAG,YAE3C,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,GAChC,cAAc,YAAY,EAC1B,SAAS,KAAK,EAAE,SAgUjB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GAAI,CAAC,SAAS,QAAQ,EACzD,aAAa,GAAG,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAA;CAAE,CAAC,EACjE,kBAAkB,SAAS,CAAC,CAAC,CAAC,EAC9B,cAAc,YAAY,KACzB,SAAS,CAAC,CAAC,CAAC,GAAG,IA4EjB,CAAC"}