@mhamz.01/easyflow-whiteboard 2.138.0 → 2.140.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;CACvB;;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;CACvB;;AAaD,wBAkpBG"}
|
|
@@ -282,8 +282,8 @@ export default React.memo(function CanvasOverlayLayer({ tasks, documents, onTask
|
|
|
282
282
|
itemIds: itemsToDrag,
|
|
283
283
|
startPositions,
|
|
284
284
|
canvasObjectsStartPos,
|
|
285
|
-
offsetX:
|
|
286
|
-
offsetY:
|
|
285
|
+
offsetX: worldOffsetX, // ← was clickWorldX, should be the offset
|
|
286
|
+
offsetY: worldOffsetY, // ← was clickWorldY
|
|
287
287
|
};
|
|
288
288
|
if (!selectedIdsRef.current.has(itemId) && dragStateRef.current.itemIds.length === 0) {
|
|
289
289
|
setSelectedIds(new Set([itemId]));
|
|
@@ -323,14 +323,18 @@ export default React.memo(function CanvasOverlayLayer({ tasks, documents, onTask
|
|
|
323
323
|
const currentWorldY = (pointer.clientY - liveVpY) / liveZoom;
|
|
324
324
|
// 4. Calculate where the "Anchor" node should be in World Units
|
|
325
325
|
// (Current Mouse World - Initial World Offset from Start)
|
|
326
|
-
const deltaX = currentWorldX - offsetX;
|
|
327
|
-
const deltaY = currentWorldY - offsetY;
|
|
326
|
+
// const deltaX = currentWorldX - offsetX;
|
|
327
|
+
// const deltaY = currentWorldY - offsetY;
|
|
328
328
|
// 5. Calculate the Movement Delta in World Units
|
|
329
329
|
// We compare where the first item started vs where it is now.
|
|
330
330
|
const firstId = itemIds[0];
|
|
331
331
|
const firstStart = startPositions.get(firstId);
|
|
332
332
|
if (!firstStart)
|
|
333
333
|
return;
|
|
334
|
+
const anchorTargetX = currentWorldX - offsetX;
|
|
335
|
+
const anchorTargetY = currentWorldY - offsetY;
|
|
336
|
+
const deltaX = anchorTargetX - firstStart.x;
|
|
337
|
+
const deltaY = anchorTargetY - firstStart.y;
|
|
334
338
|
// 6. Update HTML Nodes (Batching these into one state update)
|
|
335
339
|
setLocalTasks((prev) => prev.map((t) => itemIds.includes(t.id)
|
|
336
340
|
? {
|
|
@@ -439,20 +443,13 @@ export default React.memo(function CanvasOverlayLayer({ tasks, documents, onTask
|
|
|
439
443
|
}, [onTasksUpdate, onDocumentsUpdate]); // Issue 9: only stable callbacks
|
|
440
444
|
// ── Render helper ────────────────────────────────────────────────────────────
|
|
441
445
|
const renderItem = (id, x, y, children) => {
|
|
442
|
-
const screenX = x * canvasZoom;
|
|
443
|
-
const screenY = y * canvasZoom;
|
|
444
|
-
// 1. Detect if the user is interacting with the canvas at all
|
|
445
446
|
const isDragging = dragging?.itemIds.includes(id);
|
|
446
447
|
return (_jsx("div", { className: "pointer-events-auto absolute", style: {
|
|
447
448
|
left: 0,
|
|
448
449
|
top: 0,
|
|
449
|
-
|
|
450
|
-
transform: `translate3d(${x}px, ${y}px, 0) scale(${canvasZoom})`,
|
|
450
|
+
transform: `translate3d(${x}px, ${y}px, 0)`, // world units only
|
|
451
451
|
transformOrigin: "top left",
|
|
452
|
-
// 3. THE FIX: Remove transition entirely during any viewport change
|
|
453
|
-
// Any 'ease' during zoom causes the "shaking" behavior.
|
|
454
452
|
transition: "none",
|
|
455
|
-
// 4. Optimization
|
|
456
453
|
willChange: "transform",
|
|
457
454
|
zIndex: isDragging ? 1000 : 1,
|
|
458
455
|
}, children: children }, id));
|
|
@@ -461,7 +458,7 @@ export default React.memo(function CanvasOverlayLayer({ tasks, documents, onTask
|
|
|
461
458
|
if (e.target === e.currentTarget)
|
|
462
459
|
setSelectedIds(new Set());
|
|
463
460
|
}, children: _jsxs("div", { className: "absolute top-0 left-0 pointer-events-none", style: {
|
|
464
|
-
transform: `translate(${canvasViewport.x}px, ${canvasViewport.y}px)`,
|
|
461
|
+
transform: `translate(${canvasViewport.x}px, ${canvasViewport.y}px) scale(${canvasZoom})`,
|
|
465
462
|
transformOrigin: "top left",
|
|
466
463
|
}, children: [localTasks.map((task) => renderItem(task.id, task.x, task.y, _jsx(TaskNode, { ...task, isSelected: selectedIds.has(task.id), onSelect: handleSelect, onDragStart: handleDragStart, onStatusChange: handleStatusChange, zoom: 1 }))), localDocuments.map((doc) => renderItem(doc.id, doc.x, doc.y, _jsx(DocumentNode, { ...doc, isSelected: selectedIds.has(doc.id), onSelect: handleSelect, onDragStart: handleDragStart })))] }) }));
|
|
467
464
|
}, (prev, next) => {
|
|
@@ -58,7 +58,7 @@ const MemoizedOverlayWrapper = React.memo(function OverlayWrapper({ tasks, docum
|
|
|
58
58
|
canvas.on("after:render", updateViewport);
|
|
59
59
|
updateViewport(); // Initial sync
|
|
60
60
|
return () => {
|
|
61
|
-
canvas.off("
|
|
61
|
+
canvas.off("after:render", updateViewport); // ← was "viewport:changed", must match registration
|
|
62
62
|
};
|
|
63
63
|
}, [fabricCanvasRef, canvasReady]);
|
|
64
64
|
return (_jsx(CanvasOverlayLayer, { tasks: tasks, documents: documents, onTasksUpdate: onTasksUpdate, onDocumentsUpdate: onDocumentsUpdate, canvasZoom: canvasZoom, canvasViewport: canvasViewport, selectionBox: selectionBox, selectedCanvasObjects: selectedCanvasObjects, fabricCanvas: fabricCanvasRef, canvasReady: canvasReady }));
|