@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/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, PolygonStyleOptions } from './shapes';
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';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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 Rect7,
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
- Rect7 as Rect,
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,