@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
package/dist/index.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export type { RectangleOptions, RectangleAtPointOptions } from './shapes';
|
|
|
19
19
|
export { createCircle, createCircleAtPoint, editCircle } from './shapes';
|
|
20
20
|
export type { CircleOptions, CircleAtPointOptions } from './shapes';
|
|
21
21
|
export { createPolygon, createPolygonAtPoint, createPolygonFromDrag, createPolygonFromVertices, editPolygon, } from './shapes';
|
|
22
|
-
export type { PolygonOptions
|
|
22
|
+
export type { PolygonOptions } from './shapes';
|
|
23
23
|
export { enableClickToCreate } from './interactions';
|
|
24
24
|
export { enableDragToCreate } from './interactions';
|
|
25
25
|
export type { DragToCreateOptions } from './interactions';
|
|
@@ -38,7 +38,7 @@ export type { RotationSnapOptions } from './alignment';
|
|
|
38
38
|
export { snapCursorPoint } from './alignment';
|
|
39
39
|
export type { CursorSnapResult, CursorSnapOptions, GuidelineStyle, } from './alignment';
|
|
40
40
|
export { deleteObjects, enableKeyboardShortcuts } from './keyboard';
|
|
41
|
-
export { enableScaledStrokes, serializeCanvas, loadCanvas, getBaseStrokeWidth, } from './serialization';
|
|
41
|
+
export { enableScaledStrokes, enableScaledBorderRadius, serializeCanvas, loadCanvas, getBaseStrokeWidth, } from './serialization';
|
|
42
42
|
export type { SerializeOptions, LoadCanvasOptions } from './serialization';
|
|
43
43
|
export { fitViewportToBackground, getBackgroundSrc, setBackgroundContrast, getBackgroundContrast, setBackgroundInverted, getBackgroundInverted, resizeImageUrl, setBackgroundImage, } from './background';
|
|
44
44
|
export type { FitViewportOptions, ResizeResult, ResizeImageOptions, SetBackgroundImageOptions, } from './background';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,sBAAsB,CAAC;AAG9B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAG5C,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,YAAY,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,YAAY,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,YAAY,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,YAAY,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAGvD,YAAY,EACV,OAAO,EACP,iBAAiB,EACjB,eAAe,EACf,sBAAsB,EACtB,2BAA2B,EAC3B,UAAU,EACV,SAAS,GACV,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,aAAa,GACd,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAE1E,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACzE,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAEpE,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,WAAW,GACZ,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1410,6 +1410,11 @@ function enableDragToCreate(canvas, factory, options) {
|
|
|
1410
1410
|
if (width < MIN_DRAG_SIZE && height < MIN_DRAG_SIZE) {
|
|
1411
1411
|
canvas.requestRenderAll();
|
|
1412
1412
|
previewRect = null;
|
|
1413
|
+
if (options?.clickFactory) {
|
|
1414
|
+
const obj2 = options.clickFactory(canvas, { x: startX, y: startY });
|
|
1415
|
+
restoreViewport(options?.viewport);
|
|
1416
|
+
options?.onCreated?.(obj2);
|
|
1417
|
+
}
|
|
1413
1418
|
return;
|
|
1414
1419
|
}
|
|
1415
1420
|
const obj = factory(canvas, { startX, startY, width, height });
|
|
@@ -2055,6 +2060,8 @@ function enableVertexEdit(canvas, polygon, options, onExit) {
|
|
|
2055
2060
|
// src/serialization.ts
|
|
2056
2061
|
import { Rect as Rect5 } from "fabric";
|
|
2057
2062
|
var strokeBaseMap = /* @__PURE__ */ new WeakMap();
|
|
2063
|
+
var borderRadiusBaseMap = /* @__PURE__ */ new WeakMap();
|
|
2064
|
+
var VIEW_BORDER_RADIUS = 4;
|
|
2058
2065
|
function enableScaledStrokes(canvas) {
|
|
2059
2066
|
function applyScaledStrokes() {
|
|
2060
2067
|
const zoom = canvas.getZoom();
|
|
@@ -2079,6 +2086,28 @@ function enableScaledStrokes(canvas) {
|
|
|
2079
2086
|
});
|
|
2080
2087
|
};
|
|
2081
2088
|
}
|
|
2089
|
+
function enableScaledBorderRadius(canvas) {
|
|
2090
|
+
function applyScaledBorderRadius() {
|
|
2091
|
+
canvas.forEachObject((obj) => {
|
|
2092
|
+
if (!(obj instanceof Rect5)) return;
|
|
2093
|
+
if (!borderRadiusBaseMap.has(obj)) return;
|
|
2094
|
+
const rx = VIEW_BORDER_RADIUS / (obj.scaleX ?? 1);
|
|
2095
|
+
const ry = VIEW_BORDER_RADIUS / (obj.scaleY ?? 1);
|
|
2096
|
+
obj.set({ rx, ry });
|
|
2097
|
+
});
|
|
2098
|
+
}
|
|
2099
|
+
canvas.on("before:render", applyScaledBorderRadius);
|
|
2100
|
+
return () => {
|
|
2101
|
+
canvas.off("before:render", applyScaledBorderRadius);
|
|
2102
|
+
canvas.forEachObject((obj) => {
|
|
2103
|
+
if (!(obj instanceof Rect5)) return;
|
|
2104
|
+
const base = borderRadiusBaseMap.get(obj);
|
|
2105
|
+
if (base !== void 0) {
|
|
2106
|
+
obj.set({ rx: base.rx, ry: base.ry });
|
|
2107
|
+
}
|
|
2108
|
+
});
|
|
2109
|
+
};
|
|
2110
|
+
}
|
|
2082
2111
|
function getBaseStrokeWidth(obj) {
|
|
2083
2112
|
return strokeBaseMap.get(obj) ?? obj.strokeWidth ?? 0;
|
|
2084
2113
|
}
|
|
@@ -2104,15 +2133,28 @@ function serializeCanvas(canvas, options) {
|
|
|
2104
2133
|
obj.strokeWidth = base;
|
|
2105
2134
|
}
|
|
2106
2135
|
});
|
|
2136
|
+
const appliedRadii = /* @__PURE__ */ new Map();
|
|
2137
|
+
canvas.forEachObject((obj) => {
|
|
2138
|
+
if (!(obj instanceof Rect5)) return;
|
|
2139
|
+
const base = borderRadiusBaseMap.get(obj);
|
|
2140
|
+
if (base !== void 0) {
|
|
2141
|
+
appliedRadii.set(obj, { rx: obj.rx ?? 0, ry: obj.ry ?? 0 });
|
|
2142
|
+
obj.set({ rx: base.rx, ry: base.ry });
|
|
2143
|
+
}
|
|
2144
|
+
});
|
|
2107
2145
|
const json = canvas.toObject(properties);
|
|
2108
2146
|
delete json.backgroundColor;
|
|
2109
2147
|
scaledWidths.forEach((scaled, obj) => {
|
|
2110
2148
|
obj.strokeWidth = scaled;
|
|
2111
2149
|
});
|
|
2150
|
+
appliedRadii.forEach((radii, obj) => {
|
|
2151
|
+
obj.set({ rx: radii.rx, ry: radii.ry });
|
|
2152
|
+
});
|
|
2112
2153
|
return json;
|
|
2113
2154
|
}
|
|
2114
2155
|
async function loadCanvas(canvas, json, options) {
|
|
2115
2156
|
await canvas.loadFromJSON(json);
|
|
2157
|
+
canvas.backgroundColor = "";
|
|
2116
2158
|
if (options?.filter) {
|
|
2117
2159
|
const toRemove = [];
|
|
2118
2160
|
canvas.forEachObject((obj) => {
|
|
@@ -2136,6 +2178,12 @@ async function loadCanvas(canvas, json, options) {
|
|
|
2136
2178
|
if (obj.shapeType === "circle" && obj instanceof Rect5) {
|
|
2137
2179
|
restoreCircleConstraints(obj);
|
|
2138
2180
|
}
|
|
2181
|
+
if (obj instanceof Rect5 && obj.shapeType !== "circle" && obj.data?.type !== "DEVICE") {
|
|
2182
|
+
borderRadiusBaseMap.set(obj, { rx: obj.rx ?? 0, ry: obj.ry ?? 0 });
|
|
2183
|
+
const rx = VIEW_BORDER_RADIUS / (obj.scaleX ?? 1);
|
|
2184
|
+
const ry = VIEW_BORDER_RADIUS / (obj.scaleY ?? 1);
|
|
2185
|
+
obj.set({ rx, ry });
|
|
2186
|
+
}
|
|
2139
2187
|
});
|
|
2140
2188
|
canvas.requestRenderAll();
|
|
2141
2189
|
return canvas.getObjects();
|
|
@@ -2187,6 +2235,7 @@ function useEditCanvas(options) {
|
|
|
2187
2235
|
if (options?.scaledStrokes !== false) {
|
|
2188
2236
|
enableScaledStrokes(canvas);
|
|
2189
2237
|
}
|
|
2238
|
+
enableScaledBorderRadius(canvas);
|
|
2190
2239
|
if (options?.keyboardShortcuts !== false) {
|
|
2191
2240
|
keyboardCleanupRef.current = enableKeyboardShortcuts(canvas);
|
|
2192
2241
|
}
|
|
@@ -2364,18 +2413,10 @@ function useEditCanvas(options) {
|
|
|
2364
2413
|
|
|
2365
2414
|
// src/hooks/useViewCanvas.ts
|
|
2366
2415
|
import { useCallback as useCallback2, useRef as useRef3, useState as useState2 } from "react";
|
|
2367
|
-
import { Rect as Rect6 } from "fabric";
|
|
2368
|
-
var VIEW_BORDER_RADIUS = 4;
|
|
2369
2416
|
function lockCanvas(canvas) {
|
|
2370
2417
|
canvas.selection = false;
|
|
2371
2418
|
canvas.forEachObject((obj) => {
|
|
2372
2419
|
obj.selectable = false;
|
|
2373
|
-
obj.evented = false;
|
|
2374
|
-
if (obj instanceof Rect6 && obj.shapeType !== "circle" && obj.data?.type !== "DEVICE") {
|
|
2375
|
-
const rx = VIEW_BORDER_RADIUS / (obj.scaleX ?? 1);
|
|
2376
|
-
const ry = VIEW_BORDER_RADIUS / (obj.scaleY ?? 1);
|
|
2377
|
-
obj.set({ rx, ry });
|
|
2378
|
-
}
|
|
2379
2420
|
});
|
|
2380
2421
|
}
|
|
2381
2422
|
function useViewCanvas(options) {
|
|
@@ -2388,6 +2429,7 @@ function useViewCanvas(options) {
|
|
|
2388
2429
|
if (options?.scaledStrokes !== false) {
|
|
2389
2430
|
enableScaledStrokes(canvas);
|
|
2390
2431
|
}
|
|
2432
|
+
enableScaledBorderRadius(canvas);
|
|
2391
2433
|
if (options?.panAndZoom !== false) {
|
|
2392
2434
|
const panAndZoomOpts = typeof options?.panAndZoom === "object" ? options.panAndZoom : {};
|
|
2393
2435
|
viewportRef.current = enablePanAndZoom(canvas, {
|
|
@@ -2700,7 +2742,7 @@ import {
|
|
|
2700
2742
|
Canvas as Canvas2,
|
|
2701
2743
|
FabricObject as FabricObject5,
|
|
2702
2744
|
FabricImage as FabricImage2,
|
|
2703
|
-
Rect as
|
|
2745
|
+
Rect as Rect6,
|
|
2704
2746
|
Polygon as Polygon5,
|
|
2705
2747
|
Point as Point9,
|
|
2706
2748
|
util as util5
|
|
@@ -2718,7 +2760,7 @@ export {
|
|
|
2718
2760
|
FabricObject5 as FabricObject,
|
|
2719
2761
|
Point9 as Point,
|
|
2720
2762
|
Polygon5 as Polygon,
|
|
2721
|
-
|
|
2763
|
+
Rect6 as Rect,
|
|
2722
2764
|
createCircle,
|
|
2723
2765
|
createCircleAtPoint,
|
|
2724
2766
|
createPolygon,
|
|
@@ -2738,6 +2780,7 @@ export {
|
|
|
2738
2780
|
enableObjectAlignment,
|
|
2739
2781
|
enablePanAndZoom,
|
|
2740
2782
|
enableRotationSnap,
|
|
2783
|
+
enableScaledBorderRadius,
|
|
2741
2784
|
enableScaledStrokes,
|
|
2742
2785
|
enableVertexEdit,
|
|
2743
2786
|
fitViewportToBackground,
|