canvu-react 0.4.59 → 0.4.60

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/dist/realtime.cjs CHANGED
@@ -1251,7 +1251,10 @@ function RealtimeCommentsOverlay({
1251
1251
  (item) => item.id === drag.itemId ? moveCommentItem(item, deltaX, deltaY) : item
1252
1252
  );
1253
1253
  itemsRef.current = nextItems;
1254
- onItemsChange(nextItems);
1254
+ onItemsChange(nextItems, {
1255
+ motive: "plugin",
1256
+ itemIds: [drag.itemId]
1257
+ });
1255
1258
  };
1256
1259
  const onPointerUp = () => {
1257
1260
  dragStateRef.current = null;
@@ -1757,20 +1760,20 @@ function useRealtimeComments({
1757
1760
  [author.color]
1758
1761
  );
1759
1762
  const handleViewportItemsChange = react.useCallback(
1760
- (nextItems, overrideOnItemsChange) => {
1763
+ (nextItems, overrideOnItemsChange, info) => {
1761
1764
  const applyItemsChange = overrideOnItemsChange ?? onItemsChange;
1762
1765
  const currentIds = new Set(items.map((item) => item.id));
1763
1766
  const draftItem = nextItems.find(
1764
1767
  (item) => !currentIds.has(item.id) && isRealtimeCommentDraftItem(item)
1765
1768
  );
1766
1769
  if (!draftItem) {
1767
- applyItemsChange(nextItems);
1770
+ applyItemsChange(nextItems, info);
1768
1771
  return;
1769
1772
  }
1770
1773
  const filteredItems = nextItems.filter((item) => item.id !== draftItem.id);
1771
1774
  const shouldPersistFiltered = filteredItems.length !== items.length || filteredItems.some((item, index) => items[index]?.id !== item.id);
1772
1775
  if (shouldPersistFiltered) {
1773
- applyItemsChange(filteredItems);
1776
+ applyItemsChange(filteredItems, info);
1774
1777
  }
1775
1778
  setCommentComposer({
1776
1779
  worldX: draftItem.bounds.x + draftItem.bounds.width / 2,
@@ -1812,7 +1815,10 @@ function useRealtimeComments({
1812
1815
  authorImage
1813
1816
  }
1814
1817
  );
1815
- onItemsChange(items.concat(nextItem));
1818
+ onItemsChange(items.concat(nextItem), {
1819
+ motive: "plugin",
1820
+ itemIds: [nextItem.id]
1821
+ });
1816
1822
  setCommentComposer(null);
1817
1823
  }, [
1818
1824
  author.color,
@@ -1870,7 +1876,7 @@ function useRealtimeComments({
1870
1876
  const viewport = react.useMemo(
1871
1877
  () => ({
1872
1878
  customPlacement,
1873
- onItemsChange: (nextItems) => handleViewportItemsChange(nextItems),
1879
+ onItemsChange: (nextItems, info) => handleViewportItemsChange(nextItems, void 0, info),
1874
1880
  onCameraChange
1875
1881
  }),
1876
1882
  [customPlacement, handleViewportItemsChange, onCameraChange]
@@ -3523,7 +3529,7 @@ function RealtimeCollaborationPluginComponent({
3523
3529
  );
3524
3530
  const handleCommentItemsChange = react.useCallback(
3525
3531
  (nextItems) => {
3526
- onItemsChange?.([...nextItems]);
3532
+ onItemsChange?.([...nextItems], { motive: "plugin" });
3527
3533
  session.remoteAdapter.send?.([...nextItems]);
3528
3534
  },
3529
3535
  [onItemsChange, session.remoteAdapter]
@@ -3573,7 +3579,7 @@ function RealtimeCollaborationPluginComponent({
3573
3579
  react.useEffect(() => {
3574
3580
  if (!onItemsChange || !session.document) return;
3575
3581
  if (session.document.updatedByClientId === session.connection.clientId) return;
3576
- onItemsChange(session.document.items);
3582
+ onItemsChange(session.document.items, { motive: "remote-sync" });
3577
3583
  }, [onItemsChange, session.connection.clientId, session.document]);
3578
3584
  const contribution = react.useMemo(
3579
3585
  () => ({
@@ -3588,15 +3594,19 @@ function RealtimeCollaborationPluginComponent({
3588
3594
  onPlacementPreviewChange: presenceBindings.onPlacementPreviewChange,
3589
3595
  onCameraChange: onViewportCameraChange
3590
3596
  },
3591
- wrapOnItemsChange: (nextItems, ctx) => {
3597
+ wrapOnItemsChange: (nextItems, ctx, info) => {
3592
3598
  if (commentOptions) {
3593
- comments.handleViewportItemsChange(nextItems, (processedItems) => {
3594
- ctx.next(processedItems);
3595
- session.remoteAdapter.send?.([...processedItems]);
3596
- });
3599
+ comments.handleViewportItemsChange(
3600
+ nextItems,
3601
+ (processedItems, processedInfo) => {
3602
+ ctx.next(processedItems, processedInfo);
3603
+ session.remoteAdapter.send?.([...processedItems]);
3604
+ },
3605
+ info
3606
+ );
3597
3607
  return;
3598
3608
  }
3599
- ctx.next(nextItems);
3609
+ ctx.next(nextItems, info);
3600
3610
  session.remoteAdapter.send?.(nextItems);
3601
3611
  }
3602
3612
  }),
@@ -3737,14 +3747,17 @@ function useRealtimeCanvasDocument(options) {
3737
3747
  [hydrateItems, normalizeItems]
3738
3748
  );
3739
3749
  const handleItemsChange = react.useCallback(
3740
- (nextItems) => {
3750
+ (nextItems, info) => {
3741
3751
  if (!enabled) {
3742
- onItemsChange?.(normalizeItems ? normalizeItems(nextItems) : nextItems);
3752
+ onItemsChange?.(
3753
+ normalizeItems ? normalizeItems(nextItems) : nextItems,
3754
+ info
3755
+ );
3743
3756
  return;
3744
3757
  }
3745
3758
  hasLocalChangeInFlightRef.current = true;
3746
3759
  const normalizedItems = normalizeItems ? normalizeItems(nextItems) : nextItems;
3747
- onItemsChange?.(normalizedItems);
3760
+ onItemsChange?.(normalizedItems, info);
3748
3761
  session?.remoteAdapter.send?.(normalizedItems);
3749
3762
  },
3750
3763
  [enabled, normalizeItems, onItemsChange, session]
@@ -3795,7 +3808,7 @@ function useRealtimeCanvasDocument(options) {
3795
3808
  if (resolvedItems.length > 0) {
3796
3809
  hasEverPropagatedItemsRef.current = true;
3797
3810
  }
3798
- onItemsChange(resolvedItems);
3811
+ onItemsChange(resolvedItems, { motive: "remote-sync" });
3799
3812
  }).finally(() => {
3800
3813
  if (inFlightRevisionRef.current === documentRevision) {
3801
3814
  inFlightRevisionRef.current = null;