@bwp-web/canvas 0.5.0 → 0.6.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.
Files changed (40) hide show
  1. package/dist/Canvas/Canvas.d.ts +12 -1
  2. package/dist/Canvas/Canvas.d.ts.map +1 -1
  3. package/dist/background.d.ts.map +1 -1
  4. package/dist/constants.d.ts +2 -2
  5. package/dist/constants.d.ts.map +1 -1
  6. package/dist/fabricAugmentation.d.ts +3 -1
  7. package/dist/fabricAugmentation.d.ts.map +1 -1
  8. package/dist/history.d.ts +32 -0
  9. package/dist/history.d.ts.map +1 -0
  10. package/dist/hooks/shared.d.ts +6 -4
  11. package/dist/hooks/shared.d.ts.map +1 -1
  12. package/dist/hooks/useEditCanvas.d.ts +22 -0
  13. package/dist/hooks/useEditCanvas.d.ts.map +1 -1
  14. package/dist/hooks/useObjectOverlay.d.ts +4 -3
  15. package/dist/hooks/useObjectOverlay.d.ts.map +1 -1
  16. package/dist/hooks/useViewCanvas.d.ts +7 -0
  17. package/dist/hooks/useViewCanvas.d.ts.map +1 -1
  18. package/dist/index.cjs +416 -159
  19. package/dist/index.cjs.map +1 -1
  20. package/dist/index.d.ts +8 -5
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +370 -112
  23. package/dist/index.js.map +1 -1
  24. package/dist/interactions/dragToCreate.d.ts +6 -1
  25. package/dist/interactions/dragToCreate.d.ts.map +1 -1
  26. package/dist/interactions/drawToCreate.d.ts +8 -3
  27. package/dist/interactions/drawToCreate.d.ts.map +1 -1
  28. package/dist/interactions/vertexEdit.d.ts +5 -1
  29. package/dist/interactions/vertexEdit.d.ts.map +1 -1
  30. package/dist/serialization.d.ts +25 -2
  31. package/dist/serialization.d.ts.map +1 -1
  32. package/dist/shapes/polygon.d.ts +2 -2
  33. package/dist/shapes/polygon.d.ts.map +1 -1
  34. package/dist/styles.d.ts +6 -0
  35. package/dist/styles.d.ts.map +1 -1
  36. package/dist/types.d.ts +8 -1
  37. package/dist/types.d.ts.map +1 -1
  38. package/dist/viewport.d.ts +12 -2
  39. package/dist/viewport.d.ts.map +1 -1
  40. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  import { Canvas as FabricCanvas, FabricObject } from 'fabric';
2
- import type { DragBounds, ShapeStyleOptions, SnappableInteractionOptions } from '../types';
2
+ import type { DragBounds, Point2D, ShapeStyleOptions, SnappableInteractionOptions } from '../types';
3
3
  export interface DragToCreateOptions extends SnappableInteractionOptions {
4
4
  /** Style applied to the preview rectangle shown during drag. */
5
5
  previewStyle?: ShapeStyleOptions & {
@@ -8,6 +8,11 @@ export interface DragToCreateOptions extends SnappableInteractionOptions {
8
8
  };
9
9
  /** When true, constrain the drag to a 1:1 aspect ratio (square). */
10
10
  constrainToSquare?: boolean;
11
+ /**
12
+ * Factory called when the user clicks without dragging (below MIN_DRAG_SIZE).
13
+ * Receives the canvas and the click point. If not provided, clicks are ignored.
14
+ */
15
+ clickFactory?: (canvas: FabricCanvas, point: Point2D) => FabricObject;
11
16
  /** Called when the user cancels the drag via Escape. */
12
17
  onCancel?: () => void;
13
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dragToCreate.d.ts","sourceRoot":"","sources":["../../src/interactions/dragToCreate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,YAAY,EAAQ,MAAM,QAAQ,CAAC;AACpE,OAAO,KAAK,EACV,UAAU,EAEV,iBAAiB,EACjB,2BAA2B,EAC5B,MAAM,UAAU,CAAC;AAMlB,MAAM,WAAW,mBAAoB,SAAQ,2BAA2B;IACtE,gEAAgE;IAChE,YAAY,CAAC,EAAE,iBAAiB,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,oEAAoE;IACpE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,KAAK,YAAY,EACnE,OAAO,CAAC,EAAE,mBAAmB,GAC5B,MAAM,IAAI,CAuJZ"}
1
+ {"version":3,"file":"dragToCreate.d.ts","sourceRoot":"","sources":["../../src/interactions/dragToCreate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,YAAY,EAAQ,MAAM,QAAQ,CAAC;AACpE,OAAO,KAAK,EACV,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,2BAA2B,EAC5B,MAAM,UAAU,CAAC;AAMlB,MAAM,WAAW,mBAAoB,SAAQ,2BAA2B;IACtE,gEAAgE;IAChE,YAAY,CAAC,EAAE,iBAAiB,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,oEAAoE;IACpE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,KAAK,YAAY,CAAC;IACtE,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,KAAK,YAAY,EACnE,OAAO,CAAC,EAAE,mBAAmB,GAC5B,MAAM,IAAI,CA6JZ"}
@@ -1,15 +1,20 @@
1
1
  import { Canvas as FabricCanvas, FabricObject } from 'fabric';
2
- import type { SnappableInteractionOptions } from '../types';
3
- import { type PolygonStyleOptions } from '../shapes';
2
+ import type { Point2D, ShapeStyleOptions, SnappableInteractionOptions } from '../types';
4
3
  export interface DrawToCreateOptions extends SnappableInteractionOptions {
5
4
  /** Style applied to the polygon being drawn. */
6
- style?: PolygonStyleOptions;
5
+ style?: ShapeStyleOptions;
7
6
  /**
8
7
  * Metadata to attach to the created polygon. If provided, this is set on
9
8
  * the polygon's `data` property after creation. Takes precedence over
10
9
  * `style.data` if both are specified.
11
10
  */
12
11
  data?: FabricObject['data'];
12
+ /**
13
+ * Factory function to create the final object from placed vertices.
14
+ * Receives the canvas and the array of placed points.
15
+ * Default: creates a polygon via `createPolygonFromVertices`.
16
+ */
17
+ factory?: (canvas: FabricCanvas, points: Point2D[]) => FabricObject;
13
18
  /**
14
19
  * Snap vertex positions to multiples of `interval` degrees when Shift is
15
20
  * held while placing a vertex. The angle is measured relative to the
@@ -1 +1 @@
1
- {"version":3,"file":"drawToCreate.d.ts","sourceRoot":"","sources":["../../src/interactions/drawToCreate.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,IAAI,YAAY,EAEtB,YAAY,EAGb,MAAM,QAAQ,CAAC;AAChB,OAAO,KAAK,EAAW,2BAA2B,EAAE,MAAM,UAAU,CAAC;AACrE,OAAO,EAA6B,KAAK,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAahF,MAAM,WAAW,mBAAoB,SAAQ,2BAA2B;IACtE,gDAAgD;IAChD,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B;;;;OAIG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5B;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AA8ED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,MAAM,IAAI,CA6OZ"}
1
+ {"version":3,"file":"drawToCreate.d.ts","sourceRoot":"","sources":["../../src/interactions/drawToCreate.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,IAAI,YAAY,EAEtB,YAAY,EAGb,MAAM,QAAQ,CAAC;AAChB,OAAO,KAAK,EACV,OAAO,EACP,iBAAiB,EACjB,2BAA2B,EAC5B,MAAM,UAAU,CAAC;AAclB,MAAM,WAAW,mBAAoB,SAAQ,2BAA2B;IACtE,gDAAgD;IAChD,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B;;;;OAIG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5B;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,YAAY,CAAC;IACpE;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AA8ED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,MAAM,IAAI,CA+OZ"}
@@ -4,6 +4,8 @@ export interface VertexEditOptions {
4
4
  handleFill?: string;
5
5
  handleStroke?: string;
6
6
  handleStrokeWidth?: number;
7
+ /** Called when vertex editing is exited (via Escape, empty-canvas click, or cleanup). */
8
+ onExit?: () => void;
7
9
  }
8
10
  /**
9
11
  * Enable vertex editing on a polygon.
@@ -14,5 +16,7 @@ export interface VertexEditOptions {
14
16
  *
15
17
  * Returns a cleanup function that removes handles and exits edit mode.
16
18
  */
17
- export declare function enableVertexEdit(canvas: FabricCanvas, polygon: Polygon, options?: VertexEditOptions, onExit?: () => void): () => void;
19
+ export declare function enableVertexEdit(canvas: FabricCanvas, polygon: Polygon, options?: VertexEditOptions,
20
+ /** @deprecated Pass `onExit` in options instead. */
21
+ onExit?: () => void): () => void;
18
22
  //# sourceMappingURL=vertexEdit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vertexEdit.d.ts","sourceRoot":"","sources":["../../src/interactions/vertexEdit.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,IAAI,YAAY,EAGtB,OAAO,EAER,MAAM,QAAQ,CAAC;AAUhB,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AA2ED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,iBAAiB,EAC3B,MAAM,CAAC,EAAE,MAAM,IAAI,GAClB,MAAM,IAAI,CA8LZ"}
1
+ {"version":3,"file":"vertexEdit.d.ts","sourceRoot":"","sources":["../../src/interactions/vertexEdit.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,IAAI,YAAY,EAGtB,OAAO,EAER,MAAM,QAAQ,CAAC;AAUhB,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yFAAyF;IACzF,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AA2ED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,iBAAiB;AAC3B,oDAAoD;AACpD,MAAM,CAAC,EAAE,MAAM,IAAI,GAClB,MAAM,IAAI,CA8LZ"}
@@ -1,4 +1,5 @@
1
1
  import { Canvas as FabricCanvas, type FabricObject } from 'fabric';
2
+ import type { CanvasJSON } from './types';
2
3
  /**
3
4
  * Enable zoom-independent stroke widths on a canvas.
4
5
  *
@@ -11,6 +12,23 @@ import { Canvas as FabricCanvas, type FabricObject } from 'fabric';
11
12
  * stroke widths to their base values.
12
13
  */
13
14
  export declare function enableScaledStrokes(canvas: FabricCanvas): () => void;
15
+ /**
16
+ * Keep border radii visually constant on Rects loaded via {@link loadCanvas}.
17
+ *
18
+ * On every render, each tracked Rect's `rx`/`ry` is recalculated as
19
+ * `VIEW_BORDER_RADIUS / scale` so corners always appear circular regardless
20
+ * of non-uniform scaling. The original rx/ry values are stored in an internal
21
+ * WeakMap and automatically restored before serialization by
22
+ * {@link serializeCanvas}.
23
+ *
24
+ * Returns a cleanup function that removes the listener and restores all
25
+ * rx/ry values to their originals.
26
+ */
27
+ export interface ScaledBorderRadiusOptions {
28
+ /** Visual border radius in pixels. Default: 4. */
29
+ radius?: number;
30
+ }
31
+ export declare function enableScaledBorderRadius(canvas: FabricCanvas, options?: ScaledBorderRadiusOptions): () => void;
14
32
  /**
15
33
  * Options for {@link serializeCanvas}.
16
34
  */
@@ -41,7 +59,7 @@ export declare function getBaseStrokeWidth(obj: FabricObject): number;
41
59
  * zoom-scaled values. This ensures the saved JSON always contains the
42
60
  * intended visual stroke width, not the zoom-adjusted one.
43
61
  */
44
- export declare function serializeCanvas(canvas: FabricCanvas, options?: SerializeOptions): object;
62
+ export declare function serializeCanvas(canvas: FabricCanvas, options?: SerializeOptions): CanvasJSON;
45
63
  /**
46
64
  * Options for {@link loadCanvas}.
47
65
  */
@@ -52,6 +70,11 @@ export interface LoadCanvasOptions {
52
70
  * no longer exist in the application's data model.
53
71
  */
54
72
  filter?: (obj: FabricObject) => boolean;
73
+ /**
74
+ * Visual border radius applied to loaded Rects (excluding circles and DEVICE objects).
75
+ * Pass a number to customize, or `false` to skip entirely. Default: `4`.
76
+ */
77
+ borderRadius?: number | false;
55
78
  }
56
79
  /**
57
80
  * Load a canvas from a previously serialized JSON object (from {@link serializeCanvas}).
@@ -59,5 +82,5 @@ export interface LoadCanvasOptions {
59
82
  * Clears the canvas and restores all objects, then requests a re-render.
60
83
  * The returned promise resolves once the canvas is fully loaded.
61
84
  */
62
- export declare function loadCanvas(canvas: FabricCanvas, json: object, options?: LoadCanvasOptions): Promise<FabricObject[]>;
85
+ export declare function loadCanvas(canvas: FabricCanvas, json: CanvasJSON | object, options?: LoadCanvasOptions): Promise<FabricObject[]>;
63
86
  //# sourceMappingURL=serialization.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAQ,KAAK,YAAY,EAAE,MAAM,QAAQ,CAAC;AAWzE;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,IAAI,CA2BpE;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAE5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,gBAAgB,GACzB,MAAM,CAqCR;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC;CACzC;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,YAAY,EAAE,CAAC,CAwCzB"}
1
+ {"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,IAAI,YAAY,EAGtB,KAAK,YAAY,EAClB,MAAM,QAAQ,CAAC;AAGhB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAkB1C;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,IAAI,CA2BpE;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,yBAAyB;IACxC,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,yBAAyB,GAClC,MAAM,IAAI,CAyBZ;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAE5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,gBAAgB,GACzB,UAAU,CAqDZ;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC;IACxC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,UAAU,GAAG,MAAM,EACzB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,YAAY,EAAE,CAAC,CAwFzB"}
@@ -24,12 +24,12 @@ export declare function createPolygonAtPoint(canvas: FabricCanvas, point: Point2
24
24
  * Create a rectangular polygon from drag bounds (two corner points) and add it to the canvas.
25
25
  * Returns the fabric Polygon instance.
26
26
  */
27
- export declare function createPolygonFromDrag(canvas: FabricCanvas, start: Point2D, end: Point2D, style?: PolygonStyleOptions): Polygon;
27
+ export declare function createPolygonFromDrag(canvas: FabricCanvas, start: Point2D, end: Point2D, options?: ShapeStyleOptions): Polygon;
28
28
  /**
29
29
  * Create a polygon from an arbitrary array of vertices and add it to the canvas.
30
30
  * Returns the fabric Polygon instance.
31
31
  */
32
- export declare function createPolygonFromVertices(canvas: FabricCanvas, points: Point2D[], style?: PolygonStyleOptions): Polygon;
32
+ export declare function createPolygonFromVertices(canvas: FabricCanvas, points: Point2D[], options?: ShapeStyleOptions): Polygon;
33
33
  /**
34
34
  * Edit an existing polygon's properties (position, points, appearance, etc.).
35
35
  */
@@ -1 +1 @@
1
- {"version":3,"file":"polygon.d.ts","sourceRoot":"","sources":["../../src/shapes/polygon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAG3D,MAAM,WAAW,cAAe,SAAQ,iBAAiB;IACvD,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,0GAA0G;AAC1G,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAEpD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,cAAc,GACtB,OAAO,CAMT;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,mBAAmB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC/D,OAAO,CAcT;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,OAAO,EACZ,KAAK,CAAC,EAAE,mBAAmB,GAC1B,OAAO,CAiBT;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,OAAO,EAAE,EACjB,KAAK,CAAC,EAAE,mBAAmB,GAC1B,OAAO,CAQT;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,IAAI,CASN"}
1
+ {"version":3,"file":"polygon.d.ts","sourceRoot":"","sources":["../../src/shapes/polygon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAG3D,MAAM,WAAW,cAAe,SAAQ,iBAAiB;IACvD,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,0GAA0G;AAC1G,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAEpD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,cAAc,GACtB,OAAO,CAMT;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,mBAAmB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC/D,OAAO,CAcT;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,OAAO,EACZ,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAiBT;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,OAAO,EAAE,EACjB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAQT;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,IAAI,CASN"}
package/dist/styles.d.ts CHANGED
@@ -1,9 +1,11 @@
1
+ /** Selection handle appearance (border, corner color). Applied to all objects. */
1
2
  export declare const DEFAULT_CONTROL_STYLE: {
2
3
  borderColor: string;
3
4
  cornerColor: string;
4
5
  cornerStrokeColor: string;
5
6
  transparentCorners: boolean;
6
7
  };
8
+ /** Default fill/stroke for rectangles and polygons. */
7
9
  export declare const DEFAULT_SHAPE_STYLE: {
8
10
  borderColor: string;
9
11
  cornerColor: string;
@@ -14,6 +16,7 @@ export declare const DEFAULT_SHAPE_STYLE: {
14
16
  strokeWidth: number;
15
17
  strokeUniform: boolean;
16
18
  };
19
+ /** Default fill for circles (Rects with full border-radius). */
17
20
  export declare const DEFAULT_CIRCLE_STYLE: {
18
21
  borderColor: string;
19
22
  cornerColor: string;
@@ -24,6 +27,7 @@ export declare const DEFAULT_CIRCLE_STYLE: {
24
27
  strokeWidth: number;
25
28
  strokeUniform: boolean;
26
29
  };
30
+ /** Preview rectangle shown during drag-to-create (dashed stroke). */
27
31
  export declare const DEFAULT_DRAG_SHAPE_STYLE: {
28
32
  fill: string;
29
33
  stroke: string;
@@ -31,6 +35,7 @@ export declare const DEFAULT_DRAG_SHAPE_STYLE: {
31
35
  strokeUniform: boolean;
32
36
  strokeDashArray: number[];
33
37
  };
38
+ /** Preview polygon shown during draw-to-create (semi-transparent dashed stroke). */
34
39
  export declare const DEFAULT_GUIDELINE_SHAPE_STYLE: {
35
40
  fill: string;
36
41
  stroke: string;
@@ -38,6 +43,7 @@ export declare const DEFAULT_GUIDELINE_SHAPE_STYLE: {
38
43
  strokeUniform: boolean;
39
44
  strokeDashArray: number[];
40
45
  };
46
+ /** Alignment guideline appearance (color, width, x-marker size). */
41
47
  export declare const DEFAULT_ALIGNMENT_STYLE: {
42
48
  readonly color: "rgba(255, 0, 0, 0.9)";
43
49
  readonly width: 1;
@@ -1 +1 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,qBAAqB;;;;;CAKjC,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;CAM/B,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;CAMhC,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;;;;CAMpC,CAAC;AAEF,eAAO,MAAM,6BAA6B;;;;;;CAMzC,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC"}
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAKA,kFAAkF;AAClF,eAAO,MAAM,qBAAqB;;;;;CAKjC,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,mBAAmB;;;;;;;;;CAM/B,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,oBAAoB;;;;;;;;;CAMhC,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,wBAAwB;;;;;;CAMpC,CAAC;AAEF,oFAAoF;AACpF,eAAO,MAAM,6BAA6B;;;;;;CAMzC,CAAC;AAEF,oEAAoE;AACpE,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import type { Canvas as FabricCanvas, FabricObject } from 'fabric';
2
2
  import type { ViewportController } from './viewport';
3
3
  import type { GuidelineStyle } from './alignment/cursorSnapping';
4
+ import type { ObjectDataType } from './fabricAugmentation';
4
5
  /** A simple 2D point. */
5
6
  export type Point2D = {
6
7
  x: number;
@@ -13,10 +14,16 @@ export interface ShapeStyleOptions {
13
14
  strokeWidth?: number;
14
15
  /** Optional metadata to attach to the created object. */
15
16
  data?: {
16
- type: string;
17
+ type: ObjectDataType;
17
18
  id: string;
18
19
  };
19
20
  }
21
+ /** JSON representation returned by {@link serializeCanvas}. */
22
+ export interface CanvasJSON {
23
+ version: string;
24
+ objects: Record<string, unknown>[];
25
+ [key: string]: unknown;
26
+ }
20
27
  /** Snapping configuration used by interaction modes (dragToCreate, drawToCreate). */
21
28
  export type SnappingOptions = boolean | {
22
29
  /** Snap margin in screen pixels. Default: 6. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,YAAY,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,yBAAyB;AACzB,MAAM,MAAM,OAAO,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/C,2DAA2D;AAC3D,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,IAAI,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CACrC;AAED,qFAAqF;AACrF,MAAM,MAAM,eAAe,GACvB,OAAO,GACP;IACE,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC,CAAC;AAEN,mEAAmE;AACnE,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAED,iEAAiE;AACjE,MAAM,WAAW,2BAA4B,SAAQ,sBAAsB;IACzE,+FAA+F;IAC/F,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,uDAAuD;AACvD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,6EAA6E;AAC7E,MAAM,MAAM,SAAS,GAAG,CACtB,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,kBAAkB,GAAG,SAAS,KACrC,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,YAAY,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,yBAAyB;AACzB,MAAM,MAAM,OAAO,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/C,2DAA2D;AAC3D,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,IAAI,CAAC,EAAE;QAAE,IAAI,EAAE,cAAc,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAED,+DAA+D;AAC/D,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,qFAAqF;AACrF,MAAM,MAAM,eAAe,GACvB,OAAO,GACP;IACE,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC,CAAC;AAEN,mEAAmE;AACnE,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAED,iEAAiE;AACjE,MAAM,WAAW,2BAA4B,SAAQ,sBAAsB;IACzE,+FAA+F;IAC/F,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,uDAAuD;AACvD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,6EAA6E;AAC7E,MAAM,MAAM,SAAS,GAAG,CACtB,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,kBAAkB,GAAG,SAAS,KACrC,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC"}
@@ -11,11 +11,15 @@ export interface PanAndZoomOptions {
11
11
  minZoom?: number;
12
12
  /** Maximum zoom level (default: 10) */
13
13
  maxZoom?: number;
14
- /** Zoom sensitivity — larger values zoom faster (default: 1.03) */
14
+ /** Zoom sensitivity base raised to the power of deltaY (default: 0.999). */
15
15
  zoomFactor?: number;
16
16
  /** Initial viewport mode (default: 'select') */
17
17
  initialMode?: ViewportMode;
18
18
  }
19
+ export interface ZoomToFitOptions {
20
+ /** Padding fraction around the object (default: 0.1 = 10% on each side). */
21
+ padding?: number;
22
+ }
19
23
  export interface ViewportController {
20
24
  /** Switch between select and pan modes. */
21
25
  setMode: (mode: ViewportMode) => void;
@@ -35,9 +39,15 @@ export interface ViewportController {
35
39
  zoomOut: (factor?: number) => void;
36
40
  /**
37
41
  * Pan the viewport so the given object is centered on the canvas.
38
- * Optionally animate the transition.
42
+ * Optionally animate the transition. Automatically cancels any
43
+ * in-progress panToObject animation.
39
44
  */
40
45
  panToObject: (object: FabricObject, options?: PanToObjectOptions) => void;
46
+ /**
47
+ * Zoom and pan the viewport so the given object fills the canvas
48
+ * with optional padding.
49
+ */
50
+ zoomToFit: (object: FabricObject, options?: ZoomToFitOptions) => void;
41
51
  /** Remove all event listeners. */
42
52
  cleanup: () => void;
43
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"viewport.d.ts","sourceRoot":"","sources":["../src/viewport.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,IAAI,YAAY,EACtB,KAAK,YAAY,EAGlB,MAAM,QAAQ,CAAC;AAQhB,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE5C,MAAM,WAAW,kBAAkB;IACjC,iEAAiE;IACjE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,WAAW,CAAC,EAAE,YAAY,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,2CAA2C;IAC3C,OAAO,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACtC,qCAAqC;IACrC,OAAO,EAAE,MAAM,YAAY,CAAC;IAC5B,2EAA2E;IAC3E,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC;;;OAGG;IACH,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;;OAGG;IACH,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;;;OAGG;IACH,WAAW,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC1E,kCAAkC;IAClC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AA0MD;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,kBAAkB,CAkIpB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAExD"}
1
+ {"version":3,"file":"viewport.d.ts","sourceRoot":"","sources":["../src/viewport.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,IAAI,YAAY,EACtB,KAAK,YAAY,EAGlB,MAAM,QAAQ,CAAC;AAQhB,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE5C,MAAM,WAAW,kBAAkB;IACjC,iEAAiE;IACjE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,WAAW,CAAC,EAAE,YAAY,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,2CAA2C;IAC3C,OAAO,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACtC,qCAAqC;IACrC,OAAO,EAAE,MAAM,YAAY,CAAC;IAC5B,2EAA2E;IAC3E,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC;;;OAGG;IACH,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;;OAGG;IACH,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;;;;OAIG;IACH,WAAW,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC1E;;;OAGG;IACH,SAAS,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACtE,kCAAkC;IAClC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AA0MD;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,kBAAkB,CA2KpB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAExD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bwp-web/canvas",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",