@bwp-web/canvas 0.4.2 → 0.4.3

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,7 +1,17 @@
1
1
  import { Canvas as FabricCanvas } from 'fabric';
2
- import { CSSProperties } from 'react';
2
+ import { type CSSProperties } from 'react';
3
3
  export interface CanvasProps {
4
+ /**
5
+ * Canvas width in pixels. When both `width` and `height` are provided,
6
+ * the canvas uses fixed dimensions. When omitted, the canvas auto-fills
7
+ * its parent container and resizes with it.
8
+ */
4
9
  width?: number;
10
+ /**
11
+ * Canvas height in pixels. When both `width` and `height` are provided,
12
+ * the canvas uses fixed dimensions. When omitted, the canvas auto-fills
13
+ * its parent container and resizes with it.
14
+ */
5
15
  height?: number;
6
16
  className?: string;
7
17
  style?: CSSProperties;
@@ -1 +1 @@
1
- {"version":3,"file":"Canvas.d.ts","sourceRoot":"","sources":["../../src/Canvas/Canvas.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,aAAa,EAAqB,MAAM,OAAO,CAAC;AAGzD,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;CAC1C;AAED,wBAAgB,MAAM,CAAC,EACrB,KAAW,EACX,MAAY,EACZ,SAAS,EACT,KAAK,EACL,OAAO,GACR,EAAE,WAAW,2CA2Bb"}
1
+ {"version":3,"file":"Canvas.d.ts","sourceRoot":"","sources":["../../src/Canvas/Canvas.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,OAAO,CAAC;AAG9D,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;CAC1C;AAED,wBAAgB,MAAM,CAAC,EACrB,KAAK,EACL,MAAM,EACN,SAAS,EACT,KAAK,EACL,OAAO,GACR,EAAE,WAAW,2CAqEb"}
@@ -1,4 +1,9 @@
1
1
  import { Canvas as FabricCanvas, FabricImage } from 'fabric';
2
+ /**
3
+ * Get the source URL of the canvas background image, or `null` if no
4
+ * background image is set.
5
+ */
6
+ export declare function getBackgroundSrc(canvas: FabricCanvas): string | null;
2
7
  export interface FitViewportOptions {
3
8
  /**
4
9
  * Fraction of the canvas to leave as empty margin around the image.
@@ -1 +1 @@
1
- {"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../src/background.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,WAAW,EAAW,MAAM,QAAQ,CAAC;AAatE,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,IAAI,CAiCN;AAID;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,MAAM,GACd,IAAI,CAKN;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAGjE;AAID;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,OAAO,GAChB,IAAI,CAgBN;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAInE;AAID,MAAM,WAAW,YAAY;IAC3B,+EAA+E;IAC/E,GAAG,EAAE,MAAM,CAAC;IACZ,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,YAAY,CAAC,CAkDvB;AAID,MAAM,WAAW,yBAA0B,SAAQ,kBAAkB;IACnE,wEAAwE;IACxE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,yBAAyB,GAClC,OAAO,CAAC,WAAW,CAAC,CAmBtB"}
1
+ {"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../src/background.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,WAAW,EAAW,MAAM,QAAQ,CAAC;AAWtE;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAIpE;AAID,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,IAAI,CAiCN;AAID;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,MAAM,GACd,IAAI,CAKN;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAGjE;AAID;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,OAAO,GAChB,IAAI,CAgBN;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAInE;AAID,MAAM,WAAW,YAAY;IAC3B,+EAA+E;IAC/E,GAAG,EAAE,MAAM,CAAC;IACZ,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,YAAY,CAAC,CAkDvB;AAID,MAAM,WAAW,yBAA0B,SAAQ,kBAAkB;IACnE,wEAAwE;IACxE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,yBAAyB,GAClC,OAAO,CAAC,WAAW,CAAC,CAmBtB"}
@@ -8,4 +8,6 @@ export { useCanvasTooltip } from './useCanvasTooltip';
8
8
  export type { UseCanvasTooltipOptions, CanvasTooltipState, } from './useCanvasTooltip';
9
9
  export { useCanvasClick } from './useCanvasClick';
10
10
  export type { UseCanvasClickOptions } from './useCanvasClick';
11
+ export { useObjectOverlay } from './useObjectOverlay';
12
+ export type { UseObjectOverlayOptions } from './useObjectOverlay';
11
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE7E,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EACV,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE7E,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EACV,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { type RefObject } from 'react';
2
- import { Canvas as FabricCanvas } from 'fabric';
3
- import { type ViewportController } from '../viewport';
2
+ import { Canvas as FabricCanvas, type FabricObject } from 'fabric';
3
+ import { type PanToObjectOptions, type ViewportController } from '../viewport';
4
4
  /** Sync React zoom state with the canvas zoom level. */
5
5
  export declare function syncZoom(canvasRef: RefObject<FabricCanvas | null>, setZoom: (z: number) => void): void;
6
6
  /**
@@ -11,6 +11,7 @@ export declare function createViewportActions(canvasRef: RefObject<FabricCanvas
11
11
  resetViewport: () => void;
12
12
  zoomIn: (step?: number) => void;
13
13
  zoomOut: (step?: number) => void;
14
+ panToObject: (object: FabricObject, panOpts?: PanToObjectOptions) => void;
14
15
  };
15
16
  /**
16
17
  * Resolve whether alignment should be enabled based on the master toggle
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/hooks/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC;AAGrB,wDAAwD;AACxD,wBAAgB,QAAQ,CACtB,SAAS,EAAE,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,EACzC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,GAC3B,IAAI,CAGN;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,EACzC,WAAW,EAAE,SAAS,CAAC,kBAAkB,GAAG,IAAI,CAAC,EACjD,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI;;oBAaL,MAAM;qBAKL,MAAM;EAM/B;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,eAAe,EAAE,OAAO,GAAG,SAAS,EACpC,aAAa,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAC1C,OAAO,CAGT"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/hooks/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC;AAGrB,wDAAwD;AACxD,wBAAgB,QAAQ,CACtB,SAAS,EAAE,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,EACzC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,GAC3B,IAAI,CAGN;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,EACzC,WAAW,EAAE,SAAS,CAAC,kBAAkB,GAAG,IAAI,CAAC,EACjD,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI;;oBAaL,MAAM;qBAKL,MAAM;0BAKD,YAAY,YAAY,kBAAkB;EAKxE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,eAAe,EAAE,OAAO,GAAG,SAAS,EACpC,aAAa,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAC1C,OAAO,CAGT"}
@@ -103,6 +103,8 @@ export declare function useEditCanvas(options?: UseEditCanvasOptions): {
103
103
  zoomIn: (step?: number) => void;
104
104
  /** Zoom out from the canvas center. Default step: 0.2. */
105
105
  zoomOut: (step?: number) => void;
106
+ /** Pan the viewport to center on a specific object. */
107
+ panToObject: (object: FabricObject, panOpts?: import("../viewport").PanToObjectOptions) => void;
106
108
  };
107
109
  /** Whether vertex edit mode is currently active (reactive). */
108
110
  isEditingVertices: boolean;
@@ -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;;;IAG5D,+DAA+D;;IAE/D;;;;;;;;;;;;;;OAcG;qBAnP+B,SAAS,GAAG,IAAI;IAqPlD;;;;;;;OAOG;yBAzES,MAAM,WAAW;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE;IA2E1D,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;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,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE;IA6E1D,8GAA8G;;IAE9G,4DAA4D;;EAG/D"}
@@ -0,0 +1,49 @@
1
+ import { type RefObject } from 'react';
2
+ import type { Canvas as FabricCanvas, FabricObject } from 'fabric';
3
+ export interface UseObjectOverlayOptions {
4
+ /**
5
+ * Automatically scale the overlay content so it fits within the object
6
+ * bounds at the current zoom level.
7
+ * Default: false.
8
+ */
9
+ autoScaleContent?: boolean;
10
+ /**
11
+ * CSS selector for a text element inside the overlay. When
12
+ * `autoScaleContent` is enabled and the computed scale drops below a
13
+ * threshold, elements matching this selector are hidden (via
14
+ * `display: none`) so only icons remain visible.
15
+ * Default: undefined (no text hiding).
16
+ */
17
+ textSelector?: string;
18
+ /**
19
+ * Minimum content scale at which `textSelector` elements remain visible.
20
+ * Below this threshold, matched elements are hidden.
21
+ * Default: 0.5.
22
+ */
23
+ textMinScale?: number;
24
+ }
25
+ /**
26
+ * Position a DOM element over a Fabric canvas object, kept in sync with
27
+ * pan, zoom, move, scale, and rotate transforms.
28
+ *
29
+ * Returns a ref to attach to the overlay container element. The element
30
+ * must be positioned absolutely within a relative-positioned parent that
31
+ * wraps the `<Canvas>` component.
32
+ *
33
+ * @example
34
+ * ```tsx
35
+ * const overlayRef = useObjectOverlay(canvasRef, object, {
36
+ * autoScaleContent: true,
37
+ * textSelector: '.desk-text',
38
+ * });
39
+ *
40
+ * return (
41
+ * <div ref={overlayRef} style={{ position: 'absolute', pointerEvents: 'none' }}>
42
+ * <CanvasDeskIcon />
43
+ * <span className="desk-text">{name}</span>
44
+ * </div>
45
+ * );
46
+ * ```
47
+ */
48
+ export declare function useObjectOverlay(canvasRef: RefObject<FabricCanvas | null>, object: FabricObject | null | undefined, options?: UseObjectOverlayOptions): RefObject<HTMLDivElement | null>;
49
+ //# sourceMappingURL=useObjectOverlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useObjectOverlay.d.ts","sourceRoot":"","sources":["../../src/hooks/useObjectOverlay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,IAAI,YAAY,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGnE,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,EACzC,MAAM,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,EACvC,OAAO,CAAC,EAAE,uBAAuB,GAChC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAuElC"}
@@ -1,4 +1,4 @@
1
- import { Canvas as FabricCanvas } from 'fabric';
1
+ import { Canvas as FabricCanvas, type FabricObject } from 'fabric';
2
2
  import { type PanAndZoomOptions } from '../viewport';
3
3
  /** Visual properties that can be updated on view-canvas objects. */
4
4
  export interface ViewObjectStyle {
@@ -55,6 +55,8 @@ export declare function useViewCanvas(options?: UseViewCanvasOptions): {
55
55
  zoomIn: (step?: number) => void;
56
56
  /** Zoom out from the canvas center. Default step: 0.2. */
57
57
  zoomOut: (step?: number) => void;
58
+ /** Pan the viewport to center on a specific object. */
59
+ panToObject: (object: FabricObject, panOpts?: import("../viewport").PanToObjectOptions) => void;
58
60
  };
59
61
  /** Update a single object's visual style by its `data.id`. */
60
62
  setObjectStyle: (id: string, style: ViewObjectStyle) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"useViewCanvas.d.ts","sourceRoot":"","sources":["../../src/hooks/useViewCanvas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,YAAY,EAA2B,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;;;IAG5D,8DAA8D;yBA/DxB,MAAM,SAAS,eAAe;IAiEpE,sFAAsF;8BAxD7E,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IA0DxC,qEAAqE;iCAnC9D,MAAM,SAAS,eAAe;EAsCxC"}
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"}
package/dist/index.cjs CHANGED
@@ -27,11 +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_fabric19.Canvas,
31
- FabricImage: () => import_fabric19.FabricImage,
32
- FabricObject: () => import_fabric19.FabricObject,
33
- Polygon: () => import_fabric19.Polygon,
34
- Rect: () => import_fabric19.Rect,
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,
35
36
  createCircle: () => createCircle,
36
37
  createCircleAtPoint: () => createCircleAtPoint,
37
38
  createPolygon: () => createPolygon,
@@ -56,6 +57,7 @@ __export(index_exports, {
56
57
  fitViewportToBackground: () => fitViewportToBackground,
57
58
  getBackgroundInverted: () => getBackgroundInverted,
58
59
  getBackgroundOpacity: () => getBackgroundOpacity,
60
+ getBackgroundSrc: () => getBackgroundSrc,
59
61
  getBaseStrokeWidth: () => getBaseStrokeWidth,
60
62
  getSnapPoints: () => getSnapPoints,
61
63
  loadCanvas: () => loadCanvas,
@@ -71,7 +73,9 @@ __export(index_exports, {
71
73
  useCanvasEvents: () => useCanvasEvents,
72
74
  useCanvasTooltip: () => useCanvasTooltip,
73
75
  useEditCanvas: () => useEditCanvas,
74
- useViewCanvas: () => useViewCanvas
76
+ useObjectOverlay: () => useObjectOverlay,
77
+ useViewCanvas: () => useViewCanvas,
78
+ util: () => import_fabric20.util
75
79
  });
76
80
  module.exports = __toCommonJS(index_exports);
77
81
 
@@ -106,27 +110,56 @@ function enableKeyboardShortcuts(canvas) {
106
110
  // src/Canvas/Canvas.tsx
107
111
  var import_jsx_runtime = require("react/jsx-runtime");
108
112
  function Canvas({
109
- width = 800,
110
- height = 600,
113
+ width,
114
+ height,
111
115
  className,
112
116
  style,
113
117
  onReady
114
118
  }) {
115
119
  const canvasRef = (0, import_react.useRef)(null);
120
+ const wrapperRef = (0, import_react.useRef)(null);
121
+ const isFixedSize = width !== void 0 && height !== void 0;
116
122
  (0, import_react.useEffect)(() => {
117
123
  const el = canvasRef.current;
118
- if (!el) {
119
- return;
120
- }
121
- const fabricCanvas = new import_fabric2.Canvas(el, { width, height });
124
+ const wrapper = wrapperRef.current;
125
+ if (!el || !wrapper) return;
126
+ const initialWidth = isFixedSize ? width : wrapper.clientWidth || 800;
127
+ const initialHeight = isFixedSize ? height : wrapper.clientHeight || 600;
128
+ const fabricCanvas = new import_fabric2.Canvas(el, {
129
+ width: initialWidth,
130
+ height: initialHeight
131
+ });
122
132
  onReady?.(fabricCanvas);
123
133
  const cleanupShortcuts = enableKeyboardShortcuts(fabricCanvas);
134
+ let observer;
135
+ let rafId = 0;
136
+ if (!isFixedSize) {
137
+ let currentWidth = initialWidth;
138
+ let currentHeight = initialHeight;
139
+ observer = new ResizeObserver((entries) => {
140
+ cancelAnimationFrame(rafId);
141
+ rafId = requestAnimationFrame(() => {
142
+ const entry = entries[0];
143
+ if (!entry) return;
144
+ const { width: newWidth, height: newHeight } = entry.contentRect;
145
+ if (newWidth > 0 && newHeight > 0 && (newWidth !== currentWidth || newHeight !== currentHeight)) {
146
+ currentWidth = newWidth;
147
+ currentHeight = newHeight;
148
+ fabricCanvas.setDimensions({ width: newWidth, height: newHeight });
149
+ }
150
+ });
151
+ });
152
+ observer.observe(wrapper);
153
+ }
124
154
  return () => {
155
+ cancelAnimationFrame(rafId);
156
+ observer?.disconnect();
125
157
  cleanupShortcuts();
126
158
  fabricCanvas.dispose();
127
159
  };
128
160
  }, []);
129
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className, style, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("canvas", { ref: canvasRef }) });
161
+ const wrapperStyle = isFixedSize ? { ...style } : { width: "100%", height: "100%", ...style };
162
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: wrapperRef, className, style: wrapperStyle, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("canvas", { ref: canvasRef }) });
130
163
  }
131
164
 
132
165
  // src/hooks/useEditCanvas.ts
@@ -336,6 +369,54 @@ function enablePanAndZoom(canvas, options) {
336
369
  z
337
370
  );
338
371
  },
372
+ panToObject(object, panOpts) {
373
+ const zoom = canvas.getZoom();
374
+ const objectCenter = object.getCenterPoint();
375
+ const canvasCenterX = canvas.getWidth() / 2;
376
+ const canvasCenterY = canvas.getHeight() / 2;
377
+ const targetX = canvasCenterX - objectCenter.x * zoom;
378
+ const targetY = canvasCenterY - objectCenter.y * zoom;
379
+ if (!panOpts?.animate) {
380
+ const vt2 = canvas.viewportTransform;
381
+ if (!vt2) return;
382
+ canvas.setViewportTransform([
383
+ vt2[0],
384
+ vt2[1],
385
+ vt2[2],
386
+ vt2[3],
387
+ targetX,
388
+ targetY
389
+ ]);
390
+ return;
391
+ }
392
+ const duration = panOpts.duration ?? 300;
393
+ const vt = canvas.viewportTransform;
394
+ if (!vt) return;
395
+ const startX = vt[4];
396
+ const startY = vt[5];
397
+ const startTime = performance.now();
398
+ function step(now) {
399
+ const elapsed = now - startTime;
400
+ const t = Math.min(elapsed / duration, 1);
401
+ const eased = 1 - Math.pow(1 - t, 3);
402
+ const currentX = startX + (targetX - startX) * eased;
403
+ const currentY = startY + (targetY - startY) * eased;
404
+ const currentVt = canvas.viewportTransform;
405
+ if (!currentVt) return;
406
+ canvas.setViewportTransform([
407
+ currentVt[0],
408
+ currentVt[1],
409
+ currentVt[2],
410
+ currentVt[3],
411
+ currentX,
412
+ currentY
413
+ ]);
414
+ if (t < 1) {
415
+ requestAnimationFrame(step);
416
+ }
417
+ }
418
+ requestAnimationFrame(step);
419
+ },
339
420
  cleanup() {
340
421
  canvas.off("mouse:wheel", handleWheel);
341
422
  canvas.off("mouse:down", panHandlers.handleMouseDown);
@@ -354,6 +435,11 @@ var import_fabric4 = require("fabric");
354
435
  function getBackgroundImage(canvas) {
355
436
  return canvas.backgroundImage;
356
437
  }
438
+ function getBackgroundSrc(canvas) {
439
+ const bg = getBackgroundImage(canvas);
440
+ if (!bg) return null;
441
+ return bg.getSrc() || null;
442
+ }
357
443
  function fitViewportToBackground(canvas, options) {
358
444
  const bg = getBackgroundImage(canvas);
359
445
  if (!bg) return;
@@ -489,7 +575,10 @@ function createViewportActions(canvasRef, viewportRef, setZoom) {
489
575
  viewportRef.current?.zoomOut(step);
490
576
  syncZoom(canvasRef, setZoom);
491
577
  };
492
- return { resetViewport: resetViewport2, zoomIn, zoomOut };
578
+ const panToObject = (object, panOpts) => {
579
+ viewportRef.current?.panToObject(object, panOpts);
580
+ };
581
+ return { resetViewport: resetViewport2, zoomIn, zoomOut, panToObject };
493
582
  }
494
583
  function resolveAlignmentEnabled(enableAlignment, alignmentProp) {
495
584
  if (enableAlignment !== void 0) return enableAlignment;
@@ -1381,21 +1470,39 @@ function enableDragToCreate(canvas, factory, options) {
1381
1470
  options?.onCreated?.(obj);
1382
1471
  previewRect = null;
1383
1472
  };
1473
+ const handleKeyDown = (e) => {
1474
+ if (e.key === "Escape") {
1475
+ e.stopImmediatePropagation();
1476
+ e.preventDefault();
1477
+ cleanup("cancel");
1478
+ }
1479
+ };
1384
1480
  canvas.on("mouse:down", handleMouseDown);
1385
1481
  canvas.on("mouse:move", handleMouseMove);
1386
1482
  canvas.on("mouse:up", handleMouseUp);
1387
- return () => {
1483
+ document.addEventListener("keydown", handleKeyDown, true);
1484
+ let exited = false;
1485
+ function cleanup(reason) {
1486
+ if (exited) return;
1487
+ exited = true;
1388
1488
  canvas.off("mouse:down", handleMouseDown);
1389
1489
  canvas.off("mouse:move", handleMouseMove);
1390
1490
  canvas.off("mouse:up", handleMouseUp);
1491
+ document.removeEventListener("keydown", handleKeyDown, true);
1391
1492
  shiftTracker.cleanup();
1392
1493
  snapping.cleanup();
1393
1494
  if (isDrawing && previewRect) {
1495
+ snapping.excludeSet.delete(previewRect);
1394
1496
  canvas.remove(previewRect);
1497
+ canvas.selection = previousSelection;
1395
1498
  canvas.requestRenderAll();
1396
1499
  }
1397
1500
  restoreViewport(options?.viewport);
1398
- };
1501
+ if (reason === "cancel") {
1502
+ options?.onCancel?.();
1503
+ }
1504
+ }
1505
+ return () => cleanup();
1399
1506
  }
1400
1507
 
1401
1508
  // src/interactions/drawToCreate.ts
@@ -1671,6 +1778,9 @@ function enableDrawToCreate(canvas, options) {
1671
1778
  removePreviewElements();
1672
1779
  snapping.clearSnapResult();
1673
1780
  const polygon = createPolygonFromVertices(canvas, points, options?.style);
1781
+ if (options?.data) {
1782
+ polygon.data = options.data;
1783
+ }
1674
1784
  canvas.selection = previousSelection;
1675
1785
  canvas.requestRenderAll();
1676
1786
  restoreViewport(options?.viewport);
@@ -2062,6 +2172,7 @@ async function loadCanvas(canvas, json, options) {
2062
2172
  }
2063
2173
  });
2064
2174
  canvas.requestRenderAll();
2175
+ return canvas.getObjects();
2065
2176
  }
2066
2177
 
2067
2178
  // src/hooks/useEditCanvas.ts
@@ -2207,7 +2318,7 @@ function useEditCanvas(options) {
2207
2318
  viewportRef.current?.setMode(mode);
2208
2319
  setViewportModeState(mode);
2209
2320
  }, []);
2210
- const { resetViewport: resetViewport2, zoomIn, zoomOut } = createViewportActions(
2321
+ const { resetViewport: resetViewport2, zoomIn, zoomOut, panToObject } = createViewportActions(
2211
2322
  canvasRef,
2212
2323
  viewportRef,
2213
2324
  setZoom
@@ -2247,7 +2358,9 @@ function useEditCanvas(options) {
2247
2358
  /** Zoom in toward the canvas center. Default step: 0.2. */
2248
2359
  zoomIn,
2249
2360
  /** Zoom out from the canvas center. Default step: 0.2. */
2250
- zoomOut
2361
+ zoomOut,
2362
+ /** Pan the viewport to center on a specific object. */
2363
+ panToObject
2251
2364
  },
2252
2365
  /** Whether vertex edit mode is currently active (reactive). */
2253
2366
  isEditingVertices,
@@ -2337,7 +2450,7 @@ function useViewCanvas(options) {
2337
2450
  // eslint-disable-next-line react-hooks/exhaustive-deps
2338
2451
  []
2339
2452
  );
2340
- const { resetViewport: resetViewport2, zoomIn, zoomOut } = createViewportActions(
2453
+ const { resetViewport: resetViewport2, zoomIn, zoomOut, panToObject } = createViewportActions(
2341
2454
  canvasRef,
2342
2455
  viewportRef,
2343
2456
  setZoom
@@ -2403,7 +2516,9 @@ function useViewCanvas(options) {
2403
2516
  /** Zoom in toward the canvas center. Default step: 0.2. */
2404
2517
  zoomIn,
2405
2518
  /** Zoom out from the canvas center. Default step: 0.2. */
2406
- zoomOut
2519
+ zoomOut,
2520
+ /** Pan the viewport to center on a specific object. */
2521
+ panToObject
2407
2522
  },
2408
2523
  /** Update a single object's visual style by its `data.id`. */
2409
2524
  setObjectStyle,
@@ -2554,8 +2669,68 @@ function useCanvasClick(canvasRef, onClick, options) {
2554
2669
  }, [canvasRef]);
2555
2670
  }
2556
2671
 
2557
- // src/index.ts
2672
+ // src/hooks/useObjectOverlay.ts
2673
+ var import_react7 = require("react");
2558
2674
  var import_fabric19 = require("fabric");
2675
+ function useObjectOverlay(canvasRef, object, options) {
2676
+ const containerRef = (0, import_react7.useRef)(null);
2677
+ const optionsRef = (0, import_react7.useRef)(options);
2678
+ optionsRef.current = options;
2679
+ (0, import_react7.useEffect)(() => {
2680
+ const canvas = canvasRef.current;
2681
+ if (!canvas || !object) return;
2682
+ function update() {
2683
+ const el = containerRef.current;
2684
+ if (!el || !canvas || !object) return;
2685
+ const zoom = canvas.getZoom();
2686
+ const vt = canvas.viewportTransform;
2687
+ if (!vt) return;
2688
+ const center = object.getCenterPoint();
2689
+ const actualWidth = (object.width ?? 0) * (object.scaleX ?? 1);
2690
+ const actualHeight = (object.height ?? 0) * (object.scaleY ?? 1);
2691
+ const screenCoords = import_fabric19.util.transformPoint(center, vt);
2692
+ const screenWidth = actualWidth * zoom;
2693
+ const screenHeight = actualHeight * zoom;
2694
+ el.style.left = `${screenCoords.x - screenWidth / 2}px`;
2695
+ el.style.top = `${screenCoords.y - screenHeight / 2}px`;
2696
+ el.style.width = `${screenWidth}px`;
2697
+ el.style.height = `${screenHeight}px`;
2698
+ const angle = object.angle ?? 0;
2699
+ el.style.rotate = angle !== 0 ? `${angle}deg` : "";
2700
+ const opts = optionsRef.current;
2701
+ if (opts?.autoScaleContent) {
2702
+ const contentScale = Math.min(screenWidth, screenHeight) / 100;
2703
+ const clampedScale = Math.max(0.1, Math.min(contentScale, 2));
2704
+ el.style.setProperty("--overlay-scale", String(clampedScale));
2705
+ if (opts.textSelector) {
2706
+ const textMinScale = opts.textMinScale ?? 0.5;
2707
+ const textEls = el.querySelectorAll(opts.textSelector);
2708
+ const display = clampedScale < textMinScale ? "none" : "";
2709
+ textEls.forEach((t) => {
2710
+ t.style.display = display;
2711
+ });
2712
+ }
2713
+ }
2714
+ }
2715
+ update();
2716
+ canvas.on("after:render", update);
2717
+ canvas.on("mouse:wheel", update);
2718
+ object.on("moving", update);
2719
+ object.on("scaling", update);
2720
+ object.on("rotating", update);
2721
+ return () => {
2722
+ canvas.off("after:render", update);
2723
+ canvas.off("mouse:wheel", update);
2724
+ object.off("moving", update);
2725
+ object.off("scaling", update);
2726
+ object.off("rotating", update);
2727
+ };
2728
+ }, [canvasRef, object]);
2729
+ return containerRef;
2730
+ }
2731
+
2732
+ // src/index.ts
2733
+ var import_fabric20 = require("fabric");
2559
2734
  // Annotate the CommonJS export names for ESM import in node:
2560
2735
  0 && (module.exports = {
2561
2736
  Canvas,
@@ -2568,6 +2743,7 @@ var import_fabric19 = require("fabric");
2568
2743
  FabricCanvas,
2569
2744
  FabricImage,
2570
2745
  FabricObject,
2746
+ Point,
2571
2747
  Polygon,
2572
2748
  Rect,
2573
2749
  createCircle,
@@ -2594,6 +2770,7 @@ var import_fabric19 = require("fabric");
2594
2770
  fitViewportToBackground,
2595
2771
  getBackgroundInverted,
2596
2772
  getBackgroundOpacity,
2773
+ getBackgroundSrc,
2597
2774
  getBaseStrokeWidth,
2598
2775
  getSnapPoints,
2599
2776
  loadCanvas,
@@ -2609,6 +2786,8 @@ var import_fabric19 = require("fabric");
2609
2786
  useCanvasEvents,
2610
2787
  useCanvasTooltip,
2611
2788
  useEditCanvas,
2612
- useViewCanvas
2789
+ useObjectOverlay,
2790
+ useViewCanvas,
2791
+ util
2613
2792
  });
2614
2793
  //# sourceMappingURL=index.cjs.map