@bwp-web/canvas 0.5.0 → 0.5.1

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":"useEditCanvas.d.ts","sourceRoot":"","sources":["../../src/hooks/useEditCanvas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,KAAK,YAAY,EAAW,MAAM,QAAQ,CAAC;AAC5E,OAAO,EAEL,KAAK,iBAAiB,EAEtB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAMrB,OAAO,EAEL,KAAK,sBAAsB,EAE3B,KAAK,mBAAmB,EACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAGL,KAAK,kBAAkB,EAExB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,WAAW,oBAAoB;IACnC,kGAAkG;IAClG,UAAU,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC;IACzC,mIAAmI;IACnI,SAAS,CAAC,EAAE,OAAO,GAAG,sBAAsB,CAAC;IAC7C;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAAC;IAC7C;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC;IACzC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,qEAAqE;IACrE,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,GAAG,kBAAkB,CAAC;IAChD;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,oBAAoB;IAuOxD,8CAA8C;sBA9KrC,YAAY;IAgLrB,oDAAoD;;IAEpD,qCAAqC;;IAErC,6CAA6C;;IAE7C,yBAAyB;;QAEvB,wCAAwC;;QAExC,wDAAwD;wBAnDjB,YAAY;QAqDnD,wFAAwF;;QAExF,2DAA2D;;QAE3D,0DAA0D;;QAE1D,uDAAuD;;;IAGzD,+DAA+D;;IAE/D;;;;;;;;;;;;;;OAcG;qBArP+B,SAAS,GAAG,IAAI;IAuPlD;;;;;;;OAOG;yBA3ES,MAAM,WAAW;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE;IA6E3D,8GAA8G;;IAE9G,4DAA4D;;EAG/D"}
1
+ {"version":3,"file":"useEditCanvas.d.ts","sourceRoot":"","sources":["../../src/hooks/useEditCanvas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,KAAK,YAAY,EAAW,MAAM,QAAQ,CAAC;AAC5E,OAAO,EAEL,KAAK,iBAAiB,EAEtB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAMrB,OAAO,EAEL,KAAK,sBAAsB,EAE3B,KAAK,mBAAmB,EACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EAGL,KAAK,kBAAkB,EAExB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,WAAW,oBAAoB;IACnC,kGAAkG;IAClG,UAAU,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC;IACzC,mIAAmI;IACnI,SAAS,CAAC,EAAE,OAAO,GAAG,sBAAsB,CAAC;IAC7C;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAAC;IAC7C;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC;IACzC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,qEAAqE;IACrE,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,GAAG,kBAAkB,CAAC;IAChD;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,oBAAoB;IAyOxD,8CAA8C;sBAhLrC,YAAY;IAkLrB,oDAAoD;;IAEpD,qCAAqC;;IAErC,6CAA6C;;IAE7C,yBAAyB;;QAEvB,wCAAwC;;QAExC,wDAAwD;wBAnDjB,YAAY;QAqDnD,wFAAwF;;QAExF,2DAA2D;;QAE3D,0DAA0D;;QAE1D,uDAAuD;;;IAGzD,+DAA+D;;IAE/D;;;;;;;;;;;;;;OAcG;qBAvP+B,SAAS,GAAG,IAAI;IAyPlD;;;;;;;OAOG;yBA3ES,MAAM,WAAW;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE;IA6E3D,8GAA8G;;IAE9G,4DAA4D;;EAG/D"}
@@ -1 +1 @@
1
- {"version":3,"file":"useViewCanvas.d.ts","sourceRoot":"","sources":["../../src/hooks/useViewCanvas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,KAAK,YAAY,EAAQ,MAAM,QAAQ,CAAC;AACzE,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,aAAa,CAAC;AAKrB,oEAAoE;AACpE,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,kGAAkG;IAClG,UAAU,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC;IACzC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qEAAqE;IACrE,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAuBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,oBAAoB;IAgHxD,8CAA8C;sBAzGrC,YAAY;IA2GrB,oDAAoD;;IAEpD,qCAAqC;;IAErC,yBAAyB;;QAEvB,wFAAwF;;QAExF,2DAA2D;;QAE3D,0DAA0D;;QAE1D,uDAAuD;;;IAGzD,8DAA8D;yBAjExB,MAAM,SAAS,eAAe;IAmEpE,sFAAsF;8BA1D7E,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IA4DxC,qEAAqE;iCArC9D,MAAM,SAAS,eAAe;EAwCxC"}
1
+ {"version":3,"file":"useViewCanvas.d.ts","sourceRoot":"","sources":["../../src/hooks/useViewCanvas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,aAAa,CAAC;AAQrB,oEAAoE;AACpE,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,kGAAkG;IAClG,UAAU,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC;IACzC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qEAAqE;IACrE,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAUD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,oBAAoB;IAkHxD,8CAA8C;sBA3GrC,YAAY;IA6GrB,oDAAoD;;IAEpD,qCAAqC;;IAErC,yBAAyB;;QAEvB,wFAAwF;;QAExF,2DAA2D;;QAE3D,0DAA0D;;QAE1D,uDAAuD;;;IAGzD,8DAA8D;yBAjExB,MAAM,SAAS,eAAe;IAmEpE,sFAAsF;8BA1D7E,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IA4DxC,qEAAqE;iCArC9D,MAAM,SAAS,eAAe;EAwCxC"}
package/dist/index.cjs CHANGED
@@ -27,12 +27,12 @@ __export(index_exports, {
27
27
  DEFAULT_DRAG_SHAPE_STYLE: () => DEFAULT_DRAG_SHAPE_STYLE,
28
28
  DEFAULT_GUIDELINE_SHAPE_STYLE: () => DEFAULT_GUIDELINE_SHAPE_STYLE,
29
29
  DEFAULT_SHAPE_STYLE: () => DEFAULT_SHAPE_STYLE,
30
- FabricCanvas: () => import_fabric20.Canvas,
31
- FabricImage: () => import_fabric20.FabricImage,
32
- FabricObject: () => import_fabric20.FabricObject,
33
- Point: () => import_fabric20.Point,
34
- Polygon: () => import_fabric20.Polygon,
35
- Rect: () => import_fabric20.Rect,
30
+ FabricCanvas: () => import_fabric19.Canvas,
31
+ FabricImage: () => import_fabric19.FabricImage,
32
+ FabricObject: () => import_fabric19.FabricObject,
33
+ Point: () => import_fabric19.Point,
34
+ Polygon: () => import_fabric19.Polygon,
35
+ Rect: () => import_fabric19.Rect,
36
36
  createCircle: () => createCircle,
37
37
  createCircleAtPoint: () => createCircleAtPoint,
38
38
  createPolygon: () => createPolygon,
@@ -52,6 +52,7 @@ __export(index_exports, {
52
52
  enableObjectAlignment: () => enableObjectAlignment,
53
53
  enablePanAndZoom: () => enablePanAndZoom,
54
54
  enableRotationSnap: () => enableRotationSnap,
55
+ enableScaledBorderRadius: () => enableScaledBorderRadius,
55
56
  enableScaledStrokes: () => enableScaledStrokes,
56
57
  enableVertexEdit: () => enableVertexEdit,
57
58
  fitViewportToBackground: () => fitViewportToBackground,
@@ -75,7 +76,7 @@ __export(index_exports, {
75
76
  useEditCanvas: () => useEditCanvas,
76
77
  useObjectOverlay: () => useObjectOverlay,
77
78
  useViewCanvas: () => useViewCanvas,
78
- util: () => import_fabric20.util
79
+ util: () => import_fabric19.util
79
80
  });
80
81
  module.exports = __toCommonJS(index_exports);
81
82
 
@@ -1485,6 +1486,11 @@ function enableDragToCreate(canvas, factory, options) {
1485
1486
  if (width < MIN_DRAG_SIZE && height < MIN_DRAG_SIZE) {
1486
1487
  canvas.requestRenderAll();
1487
1488
  previewRect = null;
1489
+ if (options?.clickFactory) {
1490
+ const obj2 = options.clickFactory(canvas, { x: startX, y: startY });
1491
+ restoreViewport(options?.viewport);
1492
+ options?.onCreated?.(obj2);
1493
+ }
1488
1494
  return;
1489
1495
  }
1490
1496
  const obj = factory(canvas, { startX, startY, width, height });
@@ -2123,6 +2129,8 @@ function enableVertexEdit(canvas, polygon, options, onExit) {
2123
2129
  // src/serialization.ts
2124
2130
  var import_fabric16 = require("fabric");
2125
2131
  var strokeBaseMap = /* @__PURE__ */ new WeakMap();
2132
+ var borderRadiusBaseMap = /* @__PURE__ */ new WeakMap();
2133
+ var VIEW_BORDER_RADIUS = 4;
2126
2134
  function enableScaledStrokes(canvas) {
2127
2135
  function applyScaledStrokes() {
2128
2136
  const zoom = canvas.getZoom();
@@ -2147,6 +2155,28 @@ function enableScaledStrokes(canvas) {
2147
2155
  });
2148
2156
  };
2149
2157
  }
2158
+ function enableScaledBorderRadius(canvas) {
2159
+ function applyScaledBorderRadius() {
2160
+ canvas.forEachObject((obj) => {
2161
+ if (!(obj instanceof import_fabric16.Rect)) return;
2162
+ if (!borderRadiusBaseMap.has(obj)) return;
2163
+ const rx = VIEW_BORDER_RADIUS / (obj.scaleX ?? 1);
2164
+ const ry = VIEW_BORDER_RADIUS / (obj.scaleY ?? 1);
2165
+ obj.set({ rx, ry });
2166
+ });
2167
+ }
2168
+ canvas.on("before:render", applyScaledBorderRadius);
2169
+ return () => {
2170
+ canvas.off("before:render", applyScaledBorderRadius);
2171
+ canvas.forEachObject((obj) => {
2172
+ if (!(obj instanceof import_fabric16.Rect)) return;
2173
+ const base = borderRadiusBaseMap.get(obj);
2174
+ if (base !== void 0) {
2175
+ obj.set({ rx: base.rx, ry: base.ry });
2176
+ }
2177
+ });
2178
+ };
2179
+ }
2150
2180
  function getBaseStrokeWidth(obj) {
2151
2181
  return strokeBaseMap.get(obj) ?? obj.strokeWidth ?? 0;
2152
2182
  }
@@ -2172,15 +2202,28 @@ function serializeCanvas(canvas, options) {
2172
2202
  obj.strokeWidth = base;
2173
2203
  }
2174
2204
  });
2205
+ const appliedRadii = /* @__PURE__ */ new Map();
2206
+ canvas.forEachObject((obj) => {
2207
+ if (!(obj instanceof import_fabric16.Rect)) return;
2208
+ const base = borderRadiusBaseMap.get(obj);
2209
+ if (base !== void 0) {
2210
+ appliedRadii.set(obj, { rx: obj.rx ?? 0, ry: obj.ry ?? 0 });
2211
+ obj.set({ rx: base.rx, ry: base.ry });
2212
+ }
2213
+ });
2175
2214
  const json = canvas.toObject(properties);
2176
2215
  delete json.backgroundColor;
2177
2216
  scaledWidths.forEach((scaled, obj) => {
2178
2217
  obj.strokeWidth = scaled;
2179
2218
  });
2219
+ appliedRadii.forEach((radii, obj) => {
2220
+ obj.set({ rx: radii.rx, ry: radii.ry });
2221
+ });
2180
2222
  return json;
2181
2223
  }
2182
2224
  async function loadCanvas(canvas, json, options) {
2183
2225
  await canvas.loadFromJSON(json);
2226
+ canvas.backgroundColor = "";
2184
2227
  if (options?.filter) {
2185
2228
  const toRemove = [];
2186
2229
  canvas.forEachObject((obj) => {
@@ -2204,6 +2247,12 @@ async function loadCanvas(canvas, json, options) {
2204
2247
  if (obj.shapeType === "circle" && obj instanceof import_fabric16.Rect) {
2205
2248
  restoreCircleConstraints(obj);
2206
2249
  }
2250
+ if (obj instanceof import_fabric16.Rect && obj.shapeType !== "circle" && obj.data?.type !== "DEVICE") {
2251
+ borderRadiusBaseMap.set(obj, { rx: obj.rx ?? 0, ry: obj.ry ?? 0 });
2252
+ const rx = VIEW_BORDER_RADIUS / (obj.scaleX ?? 1);
2253
+ const ry = VIEW_BORDER_RADIUS / (obj.scaleY ?? 1);
2254
+ obj.set({ rx, ry });
2255
+ }
2207
2256
  });
2208
2257
  canvas.requestRenderAll();
2209
2258
  return canvas.getObjects();
@@ -2255,6 +2304,7 @@ function useEditCanvas(options) {
2255
2304
  if (options?.scaledStrokes !== false) {
2256
2305
  enableScaledStrokes(canvas);
2257
2306
  }
2307
+ enableScaledBorderRadius(canvas);
2258
2308
  if (options?.keyboardShortcuts !== false) {
2259
2309
  keyboardCleanupRef.current = enableKeyboardShortcuts(canvas);
2260
2310
  }
@@ -2432,18 +2482,10 @@ function useEditCanvas(options) {
2432
2482
 
2433
2483
  // src/hooks/useViewCanvas.ts
2434
2484
  var import_react3 = require("react");
2435
- var import_fabric18 = require("fabric");
2436
- var VIEW_BORDER_RADIUS = 4;
2437
2485
  function lockCanvas(canvas) {
2438
2486
  canvas.selection = false;
2439
2487
  canvas.forEachObject((obj) => {
2440
2488
  obj.selectable = false;
2441
- obj.evented = false;
2442
- if (obj instanceof import_fabric18.Rect && obj.shapeType !== "circle" && obj.data?.type !== "DEVICE") {
2443
- const rx = VIEW_BORDER_RADIUS / (obj.scaleX ?? 1);
2444
- const ry = VIEW_BORDER_RADIUS / (obj.scaleY ?? 1);
2445
- obj.set({ rx, ry });
2446
- }
2447
2489
  });
2448
2490
  }
2449
2491
  function useViewCanvas(options) {
@@ -2456,6 +2498,7 @@ function useViewCanvas(options) {
2456
2498
  if (options?.scaledStrokes !== false) {
2457
2499
  enableScaledStrokes(canvas);
2458
2500
  }
2501
+ enableScaledBorderRadius(canvas);
2459
2502
  if (options?.panAndZoom !== false) {
2460
2503
  const panAndZoomOpts = typeof options?.panAndZoom === "object" ? options.panAndZoom : {};
2461
2504
  viewportRef.current = enablePanAndZoom(canvas, {
@@ -2705,7 +2748,7 @@ function useCanvasClick(canvasRef, onClick, options) {
2705
2748
 
2706
2749
  // src/hooks/useObjectOverlay.ts
2707
2750
  var import_react7 = require("react");
2708
- var import_fabric19 = require("fabric");
2751
+ var import_fabric18 = require("fabric");
2709
2752
  function useObjectOverlay(canvasRef, object, options) {
2710
2753
  const containerRef = (0, import_react7.useRef)(null);
2711
2754
  const optionsRef = (0, import_react7.useRef)(options);
@@ -2722,7 +2765,7 @@ function useObjectOverlay(canvasRef, object, options) {
2722
2765
  const center = object.getCenterPoint();
2723
2766
  const actualWidth = (object.width ?? 0) * (object.scaleX ?? 1);
2724
2767
  const actualHeight = (object.height ?? 0) * (object.scaleY ?? 1);
2725
- const screenCoords = import_fabric19.util.transformPoint(center, vt);
2768
+ const screenCoords = import_fabric18.util.transformPoint(center, vt);
2726
2769
  const screenWidth = actualWidth * zoom;
2727
2770
  const screenHeight = actualHeight * zoom;
2728
2771
  el.style.left = `${screenCoords.x - screenWidth / 2}px`;
@@ -2764,7 +2807,7 @@ function useObjectOverlay(canvasRef, object, options) {
2764
2807
  }
2765
2808
 
2766
2809
  // src/index.ts
2767
- var import_fabric20 = require("fabric");
2810
+ var import_fabric19 = require("fabric");
2768
2811
  // Annotate the CommonJS export names for ESM import in node:
2769
2812
  0 && (module.exports = {
2770
2813
  Canvas,
@@ -2799,6 +2842,7 @@ var import_fabric20 = require("fabric");
2799
2842
  enableObjectAlignment,
2800
2843
  enablePanAndZoom,
2801
2844
  enableRotationSnap,
2845
+ enableScaledBorderRadius,
2802
2846
  enableScaledStrokes,
2803
2847
  enableVertexEdit,
2804
2848
  fitViewportToBackground,