@mhamz.01/easyflow-whiteboard 2.152.0 → 2.153.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,wBAyrBG"}
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,wBAgsBG"}
@@ -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,9 +308,9 @@ export default React.memo(function CanvasOverlayLayer({ tasks, documents, onTask
301
308
  if (pos)
302
309
  startPositions.set(id, pos);
303
310
  });
304
- // 9. Snapshot starting positions for all selected Fabric objects
311
+ const liveActiveObjects = canvas.getActiveObjects();
305
312
  const canvasObjectsStartPos = new Map();
306
- selectedCanvasObjects.forEach((obj) => {
313
+ liveActiveObjects.forEach((obj) => {
307
314
  canvasObjectsStartPos.set(obj, {
308
315
  left: obj.left || 0,
309
316
  top: obj.top || 0,
@@ -318,9 +325,10 @@ export default React.memo(function CanvasOverlayLayer({ tasks, documents, onTask
318
325
  offsetX: worldOffsetX, // ← was clickWorldX, should be the offset
319
326
  offsetY: worldOffsetY, // ← was clickWorldY
320
327
  };
321
- if (!selectedIdsRef.current.has(itemId) && dragStateRef.current.itemIds.length === 0) {
322
- setSelectedIds(new Set([itemId]));
323
- }
328
+ // if (!selectedIdsRef.current.has(itemId) && dragStateRef.current.itemIds.length === 0) {
329
+ // setSelectedIds(new Set([itemId]));
330
+ // }
331
+ dragSelectedIdsRef.current = new Set(itemsToDrag);
324
332
  // 11. Trigger UI states
325
333
  setDragging({ itemIds: itemsToDrag });
326
334
  document.body.style.cursor = "grabbing";
@@ -400,6 +408,7 @@ export default React.memo(function CanvasOverlayLayer({ tasks, documents, onTask
400
408
  if (rafIdRef.current !== null)
401
409
  cancelAnimationFrame(rafIdRef.current);
402
410
  dragStateRef.current.isDragging = false;
411
+ dragSelectedIdsRef.current = new Set();
403
412
  setDragging(null);
404
413
  document.body.style.cursor = "";
405
414
  document.body.style.userSelect = "";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mhamz.01/easyflow-whiteboard",
3
- "version": "2.152.0",
3
+ "version": "2.153.0",
4
4
  "description": "A feature-rich whiteboard component built with Fabric.js and React",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",