@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,2CA4nBzB"}
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
- }) => void;
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,EACN,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,SAgBF,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"}
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"}
@@ -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) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mhamz.01/easyflow-whiteboard",
3
- "version": "2.60.0",
3
+ "version": "2.61.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",