canvu-react 0.4.76 → 0.4.77
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 +56 -4
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +56 -4
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
package/dist/react.js
CHANGED
|
@@ -8544,6 +8544,42 @@ function didReadOnlyActivationMovePastTap(session, pointer, tapPx) {
|
|
|
8544
8544
|
return Math.hypot(dx, dy) > tapPx;
|
|
8545
8545
|
}
|
|
8546
8546
|
|
|
8547
|
+
// src/react/render-scheduler.ts
|
|
8548
|
+
var getDefaultAnimationFrameRuntime = () => typeof window === "undefined" ? {} : window;
|
|
8549
|
+
function createAnimationFrameRenderScheduler({
|
|
8550
|
+
render,
|
|
8551
|
+
runtime = getDefaultAnimationFrameRuntime()
|
|
8552
|
+
}) {
|
|
8553
|
+
let frameId = null;
|
|
8554
|
+
const canceledFrameIds = /* @__PURE__ */ new Set();
|
|
8555
|
+
const request = () => {
|
|
8556
|
+
if (frameId != null) return;
|
|
8557
|
+
if (typeof runtime.requestAnimationFrame !== "function") {
|
|
8558
|
+
render();
|
|
8559
|
+
return;
|
|
8560
|
+
}
|
|
8561
|
+
const scheduledFrameId = runtime.requestAnimationFrame(() => {
|
|
8562
|
+
const currentFrameId = scheduledFrameId;
|
|
8563
|
+
if (canceledFrameIds.has(currentFrameId)) {
|
|
8564
|
+
canceledFrameIds.delete(currentFrameId);
|
|
8565
|
+
return;
|
|
8566
|
+
}
|
|
8567
|
+
if (frameId === currentFrameId) {
|
|
8568
|
+
frameId = null;
|
|
8569
|
+
}
|
|
8570
|
+
render();
|
|
8571
|
+
});
|
|
8572
|
+
frameId = scheduledFrameId;
|
|
8573
|
+
};
|
|
8574
|
+
const cancel = () => {
|
|
8575
|
+
if (frameId == null) return;
|
|
8576
|
+
canceledFrameIds.add(frameId);
|
|
8577
|
+
runtime.cancelAnimationFrame?.(frameId);
|
|
8578
|
+
frameId = null;
|
|
8579
|
+
};
|
|
8580
|
+
return { request, cancel };
|
|
8581
|
+
}
|
|
8582
|
+
|
|
8547
8583
|
// src/react/stable-selection.ts
|
|
8548
8584
|
function shallowEqualStringArray(a, b) {
|
|
8549
8585
|
if (a === b) return true;
|
|
@@ -9556,6 +9592,9 @@ var VectorViewport = forwardRef(
|
|
|
9556
9592
|
reducedMotionRef.current = reducedMotion;
|
|
9557
9593
|
const [zoomPercent, setZoomPercent] = useState(100);
|
|
9558
9594
|
const [cameraTick, setCameraTick] = useState(0);
|
|
9595
|
+
const renderFrameSchedulerRef = useRef(
|
|
9596
|
+
null
|
|
9597
|
+
);
|
|
9559
9598
|
const [placementPreview, setPlacementPreview] = useState(null);
|
|
9560
9599
|
const [eraserTrail, setEraserTrail] = useState([]);
|
|
9561
9600
|
const [laserTrail, setLaserTrail] = useState([]);
|
|
@@ -9936,7 +9975,7 @@ var VectorViewport = forwardRef(
|
|
|
9936
9975
|
renderSceneWithLivePenStroke
|
|
9937
9976
|
]
|
|
9938
9977
|
);
|
|
9939
|
-
const
|
|
9978
|
+
const renderFrameNow = useCallback(() => {
|
|
9940
9979
|
const renderer = rendererRef.current;
|
|
9941
9980
|
const cam = cameraRef.current;
|
|
9942
9981
|
if (!renderer || !cam) return;
|
|
@@ -9949,6 +9988,14 @@ var VectorViewport = forwardRef(
|
|
|
9949
9988
|
}
|
|
9950
9989
|
onCameraChangeRef.current?.();
|
|
9951
9990
|
}, []);
|
|
9991
|
+
const renderFrame = useCallback(() => {
|
|
9992
|
+
const scheduler = renderFrameSchedulerRef.current;
|
|
9993
|
+
if (!scheduler) {
|
|
9994
|
+
renderFrameNow();
|
|
9995
|
+
return;
|
|
9996
|
+
}
|
|
9997
|
+
scheduler.request();
|
|
9998
|
+
}, [renderFrameNow]);
|
|
9952
9999
|
useEffect(() => {
|
|
9953
10000
|
const el = sceneContainerRef.current;
|
|
9954
10001
|
const interactionEl = interactionRootRef.current;
|
|
@@ -9967,6 +10014,9 @@ var VectorViewport = forwardRef(
|
|
|
9967
10014
|
rasterImageCanvas: imageCanvasRenderingRef.current
|
|
9968
10015
|
});
|
|
9969
10016
|
rendererRef.current = renderer;
|
|
10017
|
+
renderFrameSchedulerRef.current = createAnimationFrameRenderScheduler({
|
|
10018
|
+
render: renderFrameNow
|
|
10019
|
+
});
|
|
9970
10020
|
renderer.setInteractionState({
|
|
9971
10021
|
selectedIds: effectiveSelectedIdsRef.current,
|
|
9972
10022
|
hoveredItemId: hoveredItemIdRef.current
|
|
@@ -10001,6 +10051,8 @@ var VectorViewport = forwardRef(
|
|
|
10001
10051
|
});
|
|
10002
10052
|
}
|
|
10003
10053
|
return () => {
|
|
10054
|
+
renderFrameSchedulerRef.current?.cancel();
|
|
10055
|
+
renderFrameSchedulerRef.current = null;
|
|
10004
10056
|
detachInput();
|
|
10005
10057
|
detachPencil?.();
|
|
10006
10058
|
renderer.destroy();
|
|
@@ -10009,7 +10061,7 @@ var VectorViewport = forwardRef(
|
|
|
10009
10061
|
cameraRef.current = null;
|
|
10010
10062
|
setCameraForOverlay(null);
|
|
10011
10063
|
};
|
|
10012
|
-
}, [applePencilNav, renderFrame, resolveReadOnlyActivation]);
|
|
10064
|
+
}, [applePencilNav, renderFrame, renderFrameNow, resolveReadOnlyActivation]);
|
|
10013
10065
|
useEffect(() => {
|
|
10014
10066
|
rendererRef.current?.setInteractionState({
|
|
10015
10067
|
selectedIds: effectiveSelectedIds,
|
|
@@ -10137,10 +10189,10 @@ var VectorViewport = forwardRef(
|
|
|
10137
10189
|
livePenStrokeItemRef.current = null;
|
|
10138
10190
|
}
|
|
10139
10191
|
scene.setItems(resolvedSceneItems);
|
|
10140
|
-
|
|
10192
|
+
renderFrameNow();
|
|
10141
10193
|
renderer?.renderLiveItem(livePenStrokeItemRef.current);
|
|
10142
10194
|
}
|
|
10143
|
-
}, [resolvedSceneItems,
|
|
10195
|
+
}, [resolvedSceneItems, renderFrameNow]);
|
|
10144
10196
|
useEffect(() => {
|
|
10145
10197
|
const ids = effectiveSelectedIds;
|
|
10146
10198
|
const valid = ids.filter((id) => items.some((i) => i.id === id));
|