@mhamz.01/easyflow-whiteboard 2.149.0 → 2.151.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,wBA2qBG"}
|
|
@@ -17,6 +17,8 @@ export default React.memo(function CanvasOverlayLayer({ tasks, documents, onTask
|
|
|
17
17
|
const localTasksRef = useRef(localTasks);
|
|
18
18
|
const localDocumentsRef = useRef(localDocuments);
|
|
19
19
|
const selectedIdsRef = useRef(selectedIds);
|
|
20
|
+
const isHtmlSelectingRef = useRef(false);
|
|
21
|
+
const isSelectionBoxActiveRef = useRef(false);
|
|
20
22
|
localTasksRef.current = localTasks;
|
|
21
23
|
localDocumentsRef.current = localDocuments;
|
|
22
24
|
selectedIdsRef.current = selectedIds;
|
|
@@ -153,17 +155,37 @@ export default React.memo(function CanvasOverlayLayer({ tasks, documents, onTask
|
|
|
153
155
|
activeObjects.includes(target); // ← target must be IN the selection, not just any click
|
|
154
156
|
if (isClickingIntoActiveSelection)
|
|
155
157
|
return;
|
|
158
|
+
if (isSelectionBoxActiveRef.current)
|
|
159
|
+
return;
|
|
156
160
|
setSelectedIds(new Set());
|
|
157
161
|
};
|
|
158
162
|
// const handleSelectionCleared = () => {
|
|
159
163
|
// setSelectedIds(new Set());
|
|
160
164
|
// };
|
|
165
|
+
const handleFabricSelectionCreated = () => {
|
|
166
|
+
if (isHtmlSelectingRef.current)
|
|
167
|
+
return; // ← skip if HTML node initiated this
|
|
168
|
+
if (isSelectionBoxActiveRef.current)
|
|
169
|
+
return; // ← add this
|
|
170
|
+
setSelectedIds(new Set());
|
|
171
|
+
};
|
|
172
|
+
const handleFabricSelectionUpdated = () => {
|
|
173
|
+
if (isHtmlSelectingRef.current)
|
|
174
|
+
return; // ← skip if HTML node initiated this
|
|
175
|
+
if (isSelectionBoxActiveRef.current)
|
|
176
|
+
return; // ← add this
|
|
177
|
+
setSelectedIds(new Set());
|
|
178
|
+
};
|
|
161
179
|
canvas.on("object:moving", handleObjectMoving);
|
|
162
180
|
canvas.on("mouse:down", handleMouseDown);
|
|
181
|
+
canvas.on("selection:created", handleFabricSelectionCreated); // ← add
|
|
182
|
+
canvas.on("selection:updated", handleFabricSelectionUpdated); // ← add
|
|
163
183
|
// canvas.on("selection:cleared", handleSelectionCleared);
|
|
164
184
|
return () => {
|
|
165
185
|
canvas.off("object:moving", handleObjectMoving);
|
|
166
186
|
canvas.off("mouse:down", handleMouseDown);
|
|
187
|
+
canvas.off("selection:created", handleFabricSelectionCreated); // ← add
|
|
188
|
+
canvas.off("selection:updated", handleFabricSelectionUpdated); // ← add
|
|
167
189
|
// canvas.off("selection:cleared", handleSelectionCleared);
|
|
168
190
|
if (fabricMoveRafRef.current !== null) {
|
|
169
191
|
cancelAnimationFrame(fabricMoveRafRef.current);
|
|
@@ -193,8 +215,11 @@ export default React.memo(function CanvasOverlayLayer({ tasks, documents, onTask
|
|
|
193
215
|
};
|
|
194
216
|
// ── Selection box detection ──────────────────────────────────────────────────
|
|
195
217
|
useEffect(() => {
|
|
196
|
-
if (!selectionBox)
|
|
218
|
+
if (!selectionBox) {
|
|
219
|
+
isSelectionBoxActiveRef.current = false;
|
|
197
220
|
return;
|
|
221
|
+
}
|
|
222
|
+
isSelectionBoxActiveRef.current = true;
|
|
198
223
|
// ── O(n) single pass — no sort, no join, no extra allocations ──
|
|
199
224
|
const newSelected = new Set();
|
|
200
225
|
for (const task of localTasksRef.current) {
|
|
@@ -389,8 +414,10 @@ export default React.memo(function CanvasOverlayLayer({ tasks, documents, onTask
|
|
|
389
414
|
const handleSelect = (id, e) => {
|
|
390
415
|
const canvas = fabricCanvas?.current;
|
|
391
416
|
if (canvas) {
|
|
417
|
+
isHtmlSelectingRef.current = true; // ← guard: we're initiating this
|
|
392
418
|
canvas.discardActiveObject();
|
|
393
419
|
canvas.requestRenderAll();
|
|
420
|
+
isHtmlSelectingRef.current = false; // ← reset immediately
|
|
394
421
|
}
|
|
395
422
|
if (e?.shiftKey || e?.ctrlKey || e?.metaKey) {
|
|
396
423
|
setSelectedIds((prev) => {
|