canvu-react 0.3.27 → 0.3.28

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/react.cjs CHANGED
@@ -7470,7 +7470,14 @@ var VectorViewport = react.forwardRef(
7470
7470
  onPlacementPreviewChangeRef.current = onPlacementPreviewChange;
7471
7471
  const directRemoteStrokePreviewRef = react.useRef(false);
7472
7472
  const remoteStrokePreviewFrameRef = react.useRef(null);
7473
+ const remoteStrokePreviewClearTimerRef = react.useRef(null);
7473
7474
  const pendingRemoteStrokePreviewRef = react.useRef(null);
7475
+ const cancelPendingRemoteStrokePreviewClear = react.useCallback(() => {
7476
+ if (remoteStrokePreviewClearTimerRef.current != null) {
7477
+ clearTimeout(remoteStrokePreviewClearTimerRef.current);
7478
+ remoteStrokePreviewClearTimerRef.current = null;
7479
+ }
7480
+ }, []);
7474
7481
  const flushRemoteStrokePreviewWithStyle = react.useCallback(() => {
7475
7482
  remoteStrokePreviewFrameRef.current = null;
7476
7483
  const pending = pendingRemoteStrokePreviewRef.current;
@@ -7485,6 +7492,7 @@ var VectorViewport = react.forwardRef(
7485
7492
  const emitRemoteStrokePreview = react.useCallback(
7486
7493
  (tool, points) => {
7487
7494
  if (tool === "laser") return;
7495
+ cancelPendingRemoteStrokePreviewClear();
7488
7496
  directRemoteStrokePreviewRef.current = true;
7489
7497
  pendingRemoteStrokePreviewRef.current = { tool, points };
7490
7498
  if (remoteStrokePreviewFrameRef.current != null) return;
@@ -7492,17 +7500,22 @@ var VectorViewport = react.forwardRef(
7492
7500
  flushRemoteStrokePreviewWithStyle
7493
7501
  );
7494
7502
  },
7495
- [flushRemoteStrokePreviewWithStyle]
7503
+ [cancelPendingRemoteStrokePreviewClear, flushRemoteStrokePreviewWithStyle]
7496
7504
  );
7505
+ const REMOTE_STROKE_PREVIEW_HOLD_MS = 350;
7497
7506
  const emitRemoteStrokePreviewClear = react.useCallback(() => {
7498
7507
  if (remoteStrokePreviewFrameRef.current != null) {
7499
7508
  cancelAnimationFrame(remoteStrokePreviewFrameRef.current);
7500
7509
  remoteStrokePreviewFrameRef.current = null;
7501
7510
  }
7502
- pendingRemoteStrokePreviewRef.current = null;
7503
- directRemoteStrokePreviewRef.current = false;
7504
- onPlacementPreviewChangeRef.current?.(null);
7505
- }, []);
7511
+ cancelPendingRemoteStrokePreviewClear();
7512
+ remoteStrokePreviewClearTimerRef.current = window.setTimeout(() => {
7513
+ remoteStrokePreviewClearTimerRef.current = null;
7514
+ pendingRemoteStrokePreviewRef.current = null;
7515
+ directRemoteStrokePreviewRef.current = false;
7516
+ onPlacementPreviewChangeRef.current?.(null);
7517
+ }, REMOTE_STROKE_PREVIEW_HOLD_MS);
7518
+ }, [cancelPendingRemoteStrokePreviewClear]);
7506
7519
  const overlayCameraTickRef = react.useRef(false);
7507
7520
  overlayCameraTickRef.current = interactive || remotePresence != null && remotePresence.length > 0 || presenceOverlay != null;
7508
7521
  const pruneEraserTrail = react.useCallback(
@@ -7755,6 +7768,9 @@ var VectorViewport = react.forwardRef(
7755
7768
  if (remoteStrokePreviewFrameRef.current != null) {
7756
7769
  cancelAnimationFrame(remoteStrokePreviewFrameRef.current);
7757
7770
  }
7771
+ if (remoteStrokePreviewClearTimerRef.current != null) {
7772
+ clearTimeout(remoteStrokePreviewClearTimerRef.current);
7773
+ }
7758
7774
  };
7759
7775
  }, []);
7760
7776
  react.useEffect(() => {