@mhamz.01/easyflow-whiteboard 2.152.0 → 2.154.0
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-node-overlay-layer.d.ts","sourceRoot":"","sources":["../../../src/components/node/custom-node-overlay-layer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAI9C,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,MAAM,CAAC;IACxC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,UAAU,uBAAuB;IAC/B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IACxC,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,YAAY,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACzE,qBAAqB,CAAC,EAAE,YAAY,EAAE,CAAC;IACvC,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qBAAqB,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC,CAAC;CAC5D;;AAaD,
|
|
1
|
+
{"version":3,"file":"custom-node-overlay-layer.d.ts","sourceRoot":"","sources":["../../../src/components/node/custom-node-overlay-layer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAI9C,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,MAAM,CAAC;IACxC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,UAAU,uBAAuB;IAC/B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IACxC,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,YAAY,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACzE,qBAAqB,CAAC,EAAE,YAAY,EAAE,CAAC;IACvC,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qBAAqB,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC,CAAC;CAC5D;;AAaD,wBAktBG"}
|
|
@@ -20,6 +20,7 @@ export default React.memo(function CanvasOverlayLayer({ tasks, documents, onTask
|
|
|
20
20
|
const isHtmlSelectingRef = useRef(false);
|
|
21
21
|
const isSelectionBoxActiveRef = useRef(false);
|
|
22
22
|
const htmlNodesSelectedByBoxRef = useRef(false);
|
|
23
|
+
const dragSelectedIdsRef = useRef(new Set());
|
|
23
24
|
localTasksRef.current = localTasks;
|
|
24
25
|
localDocumentsRef.current = localDocuments;
|
|
25
26
|
selectedIdsRef.current = selectedIds;
|
|
@@ -128,7 +129,8 @@ export default React.memo(function CanvasOverlayLayer({ tasks, documents, onTask
|
|
|
128
129
|
target._prevTop = target.top;
|
|
129
130
|
if (deltaX === 0 && deltaY === 0)
|
|
130
131
|
return;
|
|
131
|
-
const sel = selectedIdsRef.current;
|
|
132
|
+
// const sel = selectedIdsRef.current;
|
|
133
|
+
const sel = dragSelectedIdsRef.current;
|
|
132
134
|
// Skip if frame already queued
|
|
133
135
|
if (fabricMoveRafRef.current !== null)
|
|
134
136
|
return;
|
|
@@ -154,11 +156,16 @@ export default React.memo(function CanvasOverlayLayer({ tasks, documents, onTask
|
|
|
154
156
|
const isClickingIntoActiveSelection = target &&
|
|
155
157
|
activeObjects.length > 1 &&
|
|
156
158
|
activeObjects.includes(target); // ← target must be IN the selection, not just any click
|
|
157
|
-
if (isClickingIntoActiveSelection)
|
|
159
|
+
if (isClickingIntoActiveSelection) {
|
|
160
|
+
// ← Snapshot BEFORE any selection events fire
|
|
161
|
+
dragSelectedIdsRef.current = new Set(selectedIdsRef.current);
|
|
158
162
|
return;
|
|
163
|
+
}
|
|
159
164
|
if (isSelectionBoxActiveRef.current)
|
|
160
165
|
return;
|
|
166
|
+
dragSelectedIdsRef.current = new Set(selectedIdsRef.current);
|
|
161
167
|
htmlNodesSelectedByBoxRef.current = false;
|
|
168
|
+
// dragSelectedIdsRef.current = new Set();
|
|
162
169
|
setSelectedIds(new Set());
|
|
163
170
|
};
|
|
164
171
|
// const handleSelectionCleared = () => {
|
|
@@ -301,13 +308,27 @@ export default React.memo(function CanvasOverlayLayer({ tasks, documents, onTask
|
|
|
301
308
|
if (pos)
|
|
302
309
|
startPositions.set(id, pos);
|
|
303
310
|
});
|
|
304
|
-
|
|
311
|
+
const liveActiveObjects = canvas.getActiveObjects();
|
|
312
|
+
const activeSelection = canvas.getActiveObject();
|
|
305
313
|
const canvasObjectsStartPos = new Map();
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
314
|
+
liveActiveObjects.forEach((obj) => {
|
|
315
|
+
// If objects are grouped in an activeSelection, their left/top is relative
|
|
316
|
+
// to the group center. We need their true world position instead.
|
|
317
|
+
if (activeSelection && activeSelection.type === "activeSelection") {
|
|
318
|
+
// Calculate the object's true world position from its transform matrix
|
|
319
|
+
const matrix = obj.calcTransformMatrix();
|
|
320
|
+
canvasObjectsStartPos.set(obj, {
|
|
321
|
+
left: matrix[4], // translateX from world transform
|
|
322
|
+
top: matrix[5], // translateY from world transform
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
else {
|
|
326
|
+
// Single object — left/top IS world position
|
|
327
|
+
canvasObjectsStartPos.set(obj, {
|
|
328
|
+
left: obj.left || 0,
|
|
329
|
+
top: obj.top || 0,
|
|
330
|
+
});
|
|
331
|
+
}
|
|
311
332
|
});
|
|
312
333
|
// 10. Commit to the ref for the requestAnimationFrame loop
|
|
313
334
|
dragStateRef.current = {
|
|
@@ -318,9 +339,10 @@ export default React.memo(function CanvasOverlayLayer({ tasks, documents, onTask
|
|
|
318
339
|
offsetX: worldOffsetX, // ← was clickWorldX, should be the offset
|
|
319
340
|
offsetY: worldOffsetY, // ← was clickWorldY
|
|
320
341
|
};
|
|
321
|
-
if (!selectedIdsRef.current.has(itemId) && dragStateRef.current.itemIds.length === 0) {
|
|
322
|
-
|
|
323
|
-
}
|
|
342
|
+
// if (!selectedIdsRef.current.has(itemId) && dragStateRef.current.itemIds.length === 0) {
|
|
343
|
+
// setSelectedIds(new Set([itemId]));
|
|
344
|
+
// }
|
|
345
|
+
dragSelectedIdsRef.current = new Set(itemsToDrag);
|
|
324
346
|
// 11. Trigger UI states
|
|
325
347
|
setDragging({ itemIds: itemsToDrag });
|
|
326
348
|
document.body.style.cursor = "grabbing";
|
|
@@ -391,6 +413,10 @@ export default React.memo(function CanvasOverlayLayer({ tasks, documents, onTask
|
|
|
391
413
|
});
|
|
392
414
|
obj.setCoords(); // Required for selection/intersection accuracy
|
|
393
415
|
});
|
|
416
|
+
const activeObj = canvas.getActiveObject();
|
|
417
|
+
if (activeObj && activeObj.type === "activeSelection") {
|
|
418
|
+
activeObj.setCoords();
|
|
419
|
+
}
|
|
394
420
|
// 8. Single render call for all Fabric changes
|
|
395
421
|
canvas.requestRenderAll();
|
|
396
422
|
});
|
|
@@ -400,6 +426,7 @@ export default React.memo(function CanvasOverlayLayer({ tasks, documents, onTask
|
|
|
400
426
|
if (rafIdRef.current !== null)
|
|
401
427
|
cancelAnimationFrame(rafIdRef.current);
|
|
402
428
|
dragStateRef.current.isDragging = false;
|
|
429
|
+
dragSelectedIdsRef.current = new Set();
|
|
403
430
|
setDragging(null);
|
|
404
431
|
document.body.style.cursor = "";
|
|
405
432
|
document.body.style.userSelect = "";
|