@mhamz.01/easyflow-whiteboard 2.60.0 → 2.61.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":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAS9C,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,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EACzC,KAAK,EACL,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,UAAc,EACd,cAA+B,EAC/B,YAAmB,EACnB,qBAA0B,EAC1B,YAAY,GACb,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"custom-node-overlay-layer.d.ts","sourceRoot":"","sources":["../../../src/components/node/custom-node-overlay-layer.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAS9C,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,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EACzC,KAAK,EACL,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,UAAc,EACd,cAA+B,EAC/B,YAAmB,EACnB,qBAA0B,EAC1B,YAAY,GACb,EAAE,uBAAuB,2CAikBzB"}
|
|
@@ -399,59 +399,6 @@ export default function CanvasOverlayLayer({ tasks, documents, onTasksUpdate, on
|
|
|
399
399
|
e.preventDefault();
|
|
400
400
|
setSelectedIds(new Set([...localTasks.map((t) => t.id), ...localDocuments.map((d) => d.id)]));
|
|
401
401
|
}
|
|
402
|
-
// ── Copy HTML nodes ──────────────────────────────────────────────────────
|
|
403
|
-
if ((e.ctrlKey || e.metaKey) && e.key === "c") {
|
|
404
|
-
const ids = selectedIdsRef.current;
|
|
405
|
-
if (ids.size === 0)
|
|
406
|
-
return;
|
|
407
|
-
// Snapshot selected nodes into clipboard — plain data, no refs
|
|
408
|
-
nodeClipboardRef.current = {
|
|
409
|
-
tasks: localTasks.filter((t) => ids.has(t.id)),
|
|
410
|
-
documents: localDocuments.filter((d) => ids.has(d.id)),
|
|
411
|
-
};
|
|
412
|
-
return;
|
|
413
|
-
}
|
|
414
|
-
// ── Paste HTML nodes ─────────────────────────────────────────────────────
|
|
415
|
-
if ((e.ctrlKey || e.metaKey) && e.key === "v") {
|
|
416
|
-
const { tasks: copiedTasks, documents: copiedDocs } = nodeClipboardRef.current;
|
|
417
|
-
if (copiedTasks.length === 0 && copiedDocs.length === 0)
|
|
418
|
-
return;
|
|
419
|
-
const now = Date.now();
|
|
420
|
-
const pastedTasks = copiedTasks.map((t, i) => ({
|
|
421
|
-
...t,
|
|
422
|
-
id: `${t.id}-copy-${now}-${i}`,
|
|
423
|
-
x: t.x + 20,
|
|
424
|
-
y: t.y + 20,
|
|
425
|
-
}));
|
|
426
|
-
const pastedDocs = copiedDocs.map((d, i) => ({
|
|
427
|
-
...d,
|
|
428
|
-
id: `${d.id}-copy-${now}-${i}`,
|
|
429
|
-
x: d.x + 20,
|
|
430
|
-
y: d.y + 20,
|
|
431
|
-
}));
|
|
432
|
-
setLocalTasks((prev) => {
|
|
433
|
-
const updated = [...prev, ...pastedTasks];
|
|
434
|
-
onTasksUpdate?.(updated);
|
|
435
|
-
return updated;
|
|
436
|
-
});
|
|
437
|
-
setLocalDocuments((prev) => {
|
|
438
|
-
const updated = [...prev, ...pastedDocs];
|
|
439
|
-
onDocumentsUpdate?.(updated);
|
|
440
|
-
return updated;
|
|
441
|
-
});
|
|
442
|
-
// Select the newly pasted nodes
|
|
443
|
-
setSelectedIds(new Set([
|
|
444
|
-
...pastedTasks.map((t) => t.id),
|
|
445
|
-
...pastedDocs.map((d) => d.id),
|
|
446
|
-
]));
|
|
447
|
-
// Mirror official Fabric pattern — offset clipboard itself for cascading paste
|
|
448
|
-
// so each Ctrl+V lands 20px further than the last
|
|
449
|
-
nodeClipboardRef.current = {
|
|
450
|
-
tasks: copiedTasks.map((t) => ({ ...t, x: t.x + 20, y: t.y + 20 })),
|
|
451
|
-
documents: copiedDocs.map((d) => ({ ...d, x: d.x + 20, y: d.y + 20 })),
|
|
452
|
-
};
|
|
453
|
-
return;
|
|
454
|
-
}
|
|
455
402
|
// Clear selection
|
|
456
403
|
if (e.key === "Escape") {
|
|
457
404
|
setSelectedIds(new Set());
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Canvas, FabricObject, FabricImage } from "fabric";
|
|
1
|
+
import { Canvas, FabricObject, IText, FabricImage } from "fabric";
|
|
2
2
|
export declare const initializeFabricCanvas: (canvas: Canvas) => Canvas;
|
|
3
3
|
export declare const updateDrawingObject: (shape: FabricObject, toolType: string, startPoint: {
|
|
4
4
|
x: number;
|
|
@@ -21,7 +21,14 @@ export declare const addText: (canvas: Canvas, options: {
|
|
|
21
21
|
fontFamily?: string;
|
|
22
22
|
color?: string;
|
|
23
23
|
textAlign?: string;
|
|
24
|
-
}) =>
|
|
24
|
+
}) => IText<{
|
|
25
|
+
left: number;
|
|
26
|
+
top: number;
|
|
27
|
+
fontSize: number;
|
|
28
|
+
fontFamily: string;
|
|
29
|
+
fontWeight: string;
|
|
30
|
+
fill: string;
|
|
31
|
+
}, import("fabric").SerializedITextProps, import("fabric").ITextEvents>;
|
|
25
32
|
export declare const addImageToCanvas: (canvas: Canvas, url: string) => Promise<FabricImage<Partial<import("fabric").ImageProps>, import("fabric").SerializedImageProps, import("fabric").ObjectEvents> | undefined>;
|
|
26
33
|
export declare const clearCanvas: (canvas: Canvas) => void;
|
|
27
34
|
export declare const zoomCanvas: (canvas: Canvas, zoomLevel: number) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fabric-utils.d.ts","sourceRoot":"","sources":["../../src/lib/fabric-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"fabric-utils.d.ts","sourceRoot":"","sources":["../../src/lib/fabric-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAAE,YAAY,EACb,KAAK,EAAE,WAAW,EAC1B,MAAM,QAAQ,CAAC;AAMhB,eAAO,MAAM,sBAAsB,GAAI,QAAQ,MAAM,WAgBpD,CAAC;AAIF,eAAO,MAAM,mBAAmB,GAC9B,OAAc,YAAY,EAC1B,UAAc,MAAM,EACpB,YAAc;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EACtC,cAAc;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,SAsDvC,CAAC;AAIF,eAAO,MAAM,qBAAqB,GAAI,QAAQ,MAAM,SAOnD,CAAC;AAIF,eAAO,MAAM,kBAAkB,GAAI,SAAS,MAAM,SAEjD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,WAAW,MAAM,IAAI,SAKvF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,QAAQ,MAAM,EAAE,SAAQ,KAAK,GAAG,MAAc,WAEjF,CAAC;AAIF,eAAO,MAAM,kBAAkB,GAC7B,iBAAiB,MAAM,EAAE,GAAG,IAAI,EAChC,aAAa,MAAM,KAClB,MAAM,EAAE,GAAG,SAIb,CAAC;AAIF,eAAO,MAAM,OAAO,GAClB,QAAQ,MAAM,EACd,SAAS;IACP,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CACzD;;;;;;;uEAiBF,CAAC;AAIF,eAAO,MAAM,gBAAgB,GAAU,QAAQ,MAAM,EAAE,KAAK,MAAM,iJAoBjE,CAAC;AAIF,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,SAIzC,CAAC;AAIF,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,EAAE,WAAW,MAAM,SAG3D,CAAC;AAIF,eAAO,MAAM,kBAAkB,GAAI,QAAQ,MAAM,SAqChD,CAAC;AAIF,eAAO,MAAM,iBAAiB,GAAU,QAAQ,MAAM,EAAE,SAAS,MAAM,kBAqCtE,CAAC"}
|
package/dist/lib/fabric-utils.js
CHANGED
|
@@ -113,6 +113,7 @@ export const addText = (canvas, options) => {
|
|
|
113
113
|
canvas.requestRenderAll(); // PERF FIX 4
|
|
114
114
|
text.enterEditing();
|
|
115
115
|
text.selectAll();
|
|
116
|
+
return text;
|
|
116
117
|
};
|
|
117
118
|
// ── addImageToCanvas ──────────────────────────────────────────────────────────
|
|
118
119
|
export const addImageToCanvas = async (canvas, url) => {
|