@mhamz.01/easyflow-whiteboard 2.150.0 → 2.152.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,wBAyrBG"}
|
|
@@ -18,6 +18,8 @@ export default React.memo(function CanvasOverlayLayer({ tasks, documents, onTask
|
|
|
18
18
|
const localDocumentsRef = useRef(localDocuments);
|
|
19
19
|
const selectedIdsRef = useRef(selectedIds);
|
|
20
20
|
const isHtmlSelectingRef = useRef(false);
|
|
21
|
+
const isSelectionBoxActiveRef = useRef(false);
|
|
22
|
+
const htmlNodesSelectedByBoxRef = useRef(false);
|
|
21
23
|
localTasksRef.current = localTasks;
|
|
22
24
|
localDocumentsRef.current = localDocuments;
|
|
23
25
|
selectedIdsRef.current = selectedIds;
|
|
@@ -154,6 +156,9 @@ export default React.memo(function CanvasOverlayLayer({ tasks, documents, onTask
|
|
|
154
156
|
activeObjects.includes(target); // ← target must be IN the selection, not just any click
|
|
155
157
|
if (isClickingIntoActiveSelection)
|
|
156
158
|
return;
|
|
159
|
+
if (isSelectionBoxActiveRef.current)
|
|
160
|
+
return;
|
|
161
|
+
htmlNodesSelectedByBoxRef.current = false;
|
|
157
162
|
setSelectedIds(new Set());
|
|
158
163
|
};
|
|
159
164
|
// const handleSelectionCleared = () => {
|
|
@@ -162,11 +167,19 @@ export default React.memo(function CanvasOverlayLayer({ tasks, documents, onTask
|
|
|
162
167
|
const handleFabricSelectionCreated = () => {
|
|
163
168
|
if (isHtmlSelectingRef.current)
|
|
164
169
|
return; // ← skip if HTML node initiated this
|
|
170
|
+
if (isSelectionBoxActiveRef.current)
|
|
171
|
+
return; // ← add this
|
|
172
|
+
if (htmlNodesSelectedByBoxRef.current)
|
|
173
|
+
return;
|
|
165
174
|
setSelectedIds(new Set());
|
|
166
175
|
};
|
|
167
176
|
const handleFabricSelectionUpdated = () => {
|
|
168
177
|
if (isHtmlSelectingRef.current)
|
|
169
178
|
return; // ← skip if HTML node initiated this
|
|
179
|
+
if (isSelectionBoxActiveRef.current)
|
|
180
|
+
return; // ← add this
|
|
181
|
+
if (htmlNodesSelectedByBoxRef.current)
|
|
182
|
+
return;
|
|
170
183
|
setSelectedIds(new Set());
|
|
171
184
|
};
|
|
172
185
|
canvas.on("object:moving", handleObjectMoving);
|
|
@@ -208,8 +221,11 @@ export default React.memo(function CanvasOverlayLayer({ tasks, documents, onTask
|
|
|
208
221
|
};
|
|
209
222
|
// ── Selection box detection ──────────────────────────────────────────────────
|
|
210
223
|
useEffect(() => {
|
|
211
|
-
if (!selectionBox)
|
|
224
|
+
if (!selectionBox) {
|
|
225
|
+
isSelectionBoxActiveRef.current = false;
|
|
212
226
|
return;
|
|
227
|
+
}
|
|
228
|
+
isSelectionBoxActiveRef.current = true;
|
|
213
229
|
// ── O(n) single pass — no sort, no join, no extra allocations ──
|
|
214
230
|
const newSelected = new Set();
|
|
215
231
|
for (const task of localTasksRef.current) {
|
|
@@ -222,13 +238,17 @@ export default React.memo(function CanvasOverlayLayer({ tasks, documents, onTask
|
|
|
222
238
|
}
|
|
223
239
|
// ── O(n) equality check: size first (fast path), then membership ──
|
|
224
240
|
setSelectedIds((prev) => {
|
|
225
|
-
if (prev.size !== newSelected.size)
|
|
241
|
+
if (prev.size !== newSelected.size) {
|
|
242
|
+
htmlNodesSelectedByBoxRef.current = newSelected.size > 0; // ← track if any HTML nodes selected
|
|
226
243
|
return newSelected;
|
|
244
|
+
}
|
|
227
245
|
for (const id of newSelected) {
|
|
228
|
-
if (!prev.has(id))
|
|
229
|
-
|
|
246
|
+
if (!prev.has(id)) {
|
|
247
|
+
htmlNodesSelectedByBoxRef.current = newSelected.size > 0;
|
|
248
|
+
return newSelected;
|
|
249
|
+
}
|
|
230
250
|
}
|
|
231
|
-
return prev;
|
|
251
|
+
return prev;
|
|
232
252
|
});
|
|
233
253
|
}, [selectionBox, localTasks, localDocuments, canvasZoom, canvasViewport]);
|
|
234
254
|
// ── Drag start (HTML Node side) ──────────────────────────────────────────────
|
|
@@ -409,6 +429,7 @@ export default React.memo(function CanvasOverlayLayer({ tasks, documents, onTask
|
|
|
409
429
|
canvas.requestRenderAll();
|
|
410
430
|
isHtmlSelectingRef.current = false; // ← reset immediately
|
|
411
431
|
}
|
|
432
|
+
htmlNodesSelectedByBoxRef.current = false;
|
|
412
433
|
if (e?.shiftKey || e?.ctrlKey || e?.metaKey) {
|
|
413
434
|
setSelectedIds((prev) => {
|
|
414
435
|
const next = new Set(prev);
|