@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/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.9.6
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#4354](https://github.com/snowcone-app/snowcone-monorepo/pull/4354) [`426ba73`](https://github.com/snowcone-app/snowcone-monorepo/commit/426ba73e27630f48c0c673a9f3510bc0c14540ab) Thanks [@kevinsproles](https://github.com/kevinsproles)! - `rerender` requests are paced to the render box's limit (one per 550 ms): failures inside the interval wait and go out as one request, instead of being refused with E_RERENDER_RATE_LIMITED and falling back to configs.
|
|
8
|
+
|
|
3
9
|
## 0.9.5
|
|
4
10
|
|
|
5
11
|
### Patch Changes
|
package/dist/index.cjs
CHANGED
|
@@ -6063,6 +6063,7 @@ var import_jsx_runtime52 = require("react/jsx-runtime");
|
|
|
6063
6063
|
var DEFAULT_ARTBOARD_SIZE = 2e3;
|
|
6064
6064
|
var MAX_CONCURRENT_BLOBS = 5;
|
|
6065
6065
|
var FRAME_SUPERSEDE_GRACE_MS = 2e3;
|
|
6066
|
+
var RERENDER_MIN_INTERVAL_MS = 550;
|
|
6066
6067
|
function mergeMockupIds(current, extra) {
|
|
6067
6068
|
const out = [...current];
|
|
6068
6069
|
for (const id of extra) if (!out.includes(id)) out.push(id);
|
|
@@ -6220,6 +6221,9 @@ function RealtimeProvider({
|
|
|
6220
6221
|
const serverStampsVersionsRef = (0, import_react25.useRef)(false);
|
|
6221
6222
|
const pendingRerenderRef = (0, import_react25.useRef)([]);
|
|
6222
6223
|
const forceRerenderByConfigRef = (0, import_react25.useRef)(null);
|
|
6224
|
+
const lastRerenderAtRef = (0, import_react25.useRef)(0);
|
|
6225
|
+
const rerenderQueueRef = (0, import_react25.useRef)([]);
|
|
6226
|
+
const rerenderTimerRef = (0, import_react25.useRef)(null);
|
|
6223
6227
|
const fullFrameRerenderIdsRef = (0, import_react25.useRef)(/* @__PURE__ */ new Set());
|
|
6224
6228
|
const fullFrameRerenderTimerRef = (0, import_react25.useRef)(null);
|
|
6225
6229
|
(0, import_react25.useEffect)(
|
|
@@ -6302,6 +6306,28 @@ function RealtimeProvider({
|
|
|
6302
6306
|
[sendFullFrameConfig]
|
|
6303
6307
|
);
|
|
6304
6308
|
forceRerenderByConfigRef.current = forceRerenderByConfig;
|
|
6309
|
+
const sendRerenderPaced = (0, import_react25.useCallback)(
|
|
6310
|
+
(ids) => {
|
|
6311
|
+
rerenderQueueRef.current = mergeMockupIds(rerenderQueueRef.current, ids);
|
|
6312
|
+
if (rerenderTimerRef.current) return;
|
|
6313
|
+
const wait = Math.max(0, lastRerenderAtRef.current + RERENDER_MIN_INTERVAL_MS - Date.now());
|
|
6314
|
+
const flush = () => {
|
|
6315
|
+
rerenderTimerRef.current = null;
|
|
6316
|
+
const batch = rerenderQueueRef.current;
|
|
6317
|
+
rerenderQueueRef.current = [];
|
|
6318
|
+
if (batch.length === 0) return;
|
|
6319
|
+
lastRerenderAtRef.current = Date.now();
|
|
6320
|
+
pendingRerenderRef.current = mergeMockupIds(pendingRerenderRef.current, batch);
|
|
6321
|
+
if (!rerenderRaw(batch)) {
|
|
6322
|
+
pendingRerenderRef.current = [];
|
|
6323
|
+
forceRerenderByConfigRef.current?.(batch);
|
|
6324
|
+
}
|
|
6325
|
+
};
|
|
6326
|
+
if (wait === 0) flush();
|
|
6327
|
+
else rerenderTimerRef.current = setTimeout(flush, wait);
|
|
6328
|
+
},
|
|
6329
|
+
[rerenderRaw]
|
|
6330
|
+
);
|
|
6305
6331
|
const rerenderFullFrame = (0, import_react25.useCallback)(
|
|
6306
6332
|
(mockupId) => {
|
|
6307
6333
|
fullFrameRerenderIdsRef.current.add(mockupId);
|
|
@@ -6322,14 +6348,13 @@ function RealtimeProvider({
|
|
|
6322
6348
|
}
|
|
6323
6349
|
if (serverStampsVersionsRef.current) {
|
|
6324
6350
|
sendFullFrameConfig(ids);
|
|
6325
|
-
|
|
6326
|
-
|
|
6327
|
-
pendingRerenderRef.current = [];
|
|
6351
|
+
sendRerenderPaced(failed);
|
|
6352
|
+
return;
|
|
6328
6353
|
}
|
|
6329
6354
|
forceRerenderByConfig(failed);
|
|
6330
6355
|
}, 0);
|
|
6331
6356
|
},
|
|
6332
|
-
[sendFullFrameConfig, forceRerenderByConfig,
|
|
6357
|
+
[sendFullFrameConfig, forceRerenderByConfig, sendRerenderPaced]
|
|
6333
6358
|
);
|
|
6334
6359
|
const maybeFlipCrop = (0, import_react25.useCallback)(() => {
|
|
6335
6360
|
if (!croppedDeliveryEnabled || !cropCapableRef.current) return;
|