@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.
- package/dist/hooks/useEditCanvas.d.ts.map +1 -1
- package/dist/hooks/useViewCanvas.d.ts.map +1 -1
- package/dist/index.cjs +62 -18
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +53 -10
- package/dist/index.js.map +1 -1
- package/dist/interactions/dragToCreate.d.ts +6 -1
- package/dist/interactions/dragToCreate.d.ts.map +1 -1
- package/dist/serialization.d.ts +13 -0
- package/dist/serialization.d.ts.map +1 -1
- package/dist/styles.d.ts +6 -0
- package/dist/styles.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -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;
|
|
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,
|
|
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: () =>
|
|
31
|
-
FabricImage: () =>
|
|
32
|
-
FabricObject: () =>
|
|
33
|
-
Point: () =>
|
|
34
|
-
Polygon: () =>
|
|
35
|
-
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: () =>
|
|
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
|
|
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 =
|
|
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
|
|
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,
|