@snowcone-app/ui 0.9.5 → 0.9.6
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/CHANGELOG.md +6 -0
- package/dist/index.cjs +29 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +29 -4
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/patterns/RealtimeProvider.tsx +38 -4
- package/src/patterns/__tests__/RealtimeProvider.cropDelivery.test.tsx +24 -0
package/dist/index.js
CHANGED
|
@@ -5704,6 +5704,7 @@ import { jsx as jsx52 } from "react/jsx-runtime";
|
|
|
5704
5704
|
var DEFAULT_ARTBOARD_SIZE = 2e3;
|
|
5705
5705
|
var MAX_CONCURRENT_BLOBS = 5;
|
|
5706
5706
|
var FRAME_SUPERSEDE_GRACE_MS = 2e3;
|
|
5707
|
+
var RERENDER_MIN_INTERVAL_MS = 550;
|
|
5707
5708
|
function mergeMockupIds(current, extra) {
|
|
5708
5709
|
const out = [...current];
|
|
5709
5710
|
for (const id of extra) if (!out.includes(id)) out.push(id);
|
|
@@ -5861,6 +5862,9 @@ function RealtimeProvider({
|
|
|
5861
5862
|
const serverStampsVersionsRef = useRef12(false);
|
|
5862
5863
|
const pendingRerenderRef = useRef12([]);
|
|
5863
5864
|
const forceRerenderByConfigRef = useRef12(null);
|
|
5865
|
+
const lastRerenderAtRef = useRef12(0);
|
|
5866
|
+
const rerenderQueueRef = useRef12([]);
|
|
5867
|
+
const rerenderTimerRef = useRef12(null);
|
|
5864
5868
|
const fullFrameRerenderIdsRef = useRef12(/* @__PURE__ */ new Set());
|
|
5865
5869
|
const fullFrameRerenderTimerRef = useRef12(null);
|
|
5866
5870
|
useEffect17(
|
|
@@ -5943,6 +5947,28 @@ function RealtimeProvider({
|
|
|
5943
5947
|
[sendFullFrameConfig]
|
|
5944
5948
|
);
|
|
5945
5949
|
forceRerenderByConfigRef.current = forceRerenderByConfig;
|
|
5950
|
+
const sendRerenderPaced = useCallback10(
|
|
5951
|
+
(ids) => {
|
|
5952
|
+
rerenderQueueRef.current = mergeMockupIds(rerenderQueueRef.current, ids);
|
|
5953
|
+
if (rerenderTimerRef.current) return;
|
|
5954
|
+
const wait = Math.max(0, lastRerenderAtRef.current + RERENDER_MIN_INTERVAL_MS - Date.now());
|
|
5955
|
+
const flush = () => {
|
|
5956
|
+
rerenderTimerRef.current = null;
|
|
5957
|
+
const batch = rerenderQueueRef.current;
|
|
5958
|
+
rerenderQueueRef.current = [];
|
|
5959
|
+
if (batch.length === 0) return;
|
|
5960
|
+
lastRerenderAtRef.current = Date.now();
|
|
5961
|
+
pendingRerenderRef.current = mergeMockupIds(pendingRerenderRef.current, batch);
|
|
5962
|
+
if (!rerenderRaw(batch)) {
|
|
5963
|
+
pendingRerenderRef.current = [];
|
|
5964
|
+
forceRerenderByConfigRef.current?.(batch);
|
|
5965
|
+
}
|
|
5966
|
+
};
|
|
5967
|
+
if (wait === 0) flush();
|
|
5968
|
+
else rerenderTimerRef.current = setTimeout(flush, wait);
|
|
5969
|
+
},
|
|
5970
|
+
[rerenderRaw]
|
|
5971
|
+
);
|
|
5946
5972
|
const rerenderFullFrame = useCallback10(
|
|
5947
5973
|
(mockupId) => {
|
|
5948
5974
|
fullFrameRerenderIdsRef.current.add(mockupId);
|
|
@@ -5963,14 +5989,13 @@ function RealtimeProvider({
|
|
|
5963
5989
|
}
|
|
5964
5990
|
if (serverStampsVersionsRef.current) {
|
|
5965
5991
|
sendFullFrameConfig(ids);
|
|
5966
|
-
|
|
5967
|
-
|
|
5968
|
-
pendingRerenderRef.current = [];
|
|
5992
|
+
sendRerenderPaced(failed);
|
|
5993
|
+
return;
|
|
5969
5994
|
}
|
|
5970
5995
|
forceRerenderByConfig(failed);
|
|
5971
5996
|
}, 0);
|
|
5972
5997
|
},
|
|
5973
|
-
[sendFullFrameConfig, forceRerenderByConfig,
|
|
5998
|
+
[sendFullFrameConfig, forceRerenderByConfig, sendRerenderPaced]
|
|
5974
5999
|
);
|
|
5975
6000
|
const maybeFlipCrop = useCallback10(() => {
|
|
5976
6001
|
if (!croppedDeliveryEnabled || !cropCapableRef.current) return;
|