@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.
- package/dist/Canvas/Canvas.d.ts +11 -1
- package/dist/Canvas/Canvas.d.ts.map +1 -1
- package/dist/background.d.ts +5 -0
- package/dist/background.d.ts.map +1 -1
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/shared.d.ts +3 -2
- package/dist/hooks/shared.d.ts.map +1 -1
- package/dist/hooks/useEditCanvas.d.ts +2 -0
- package/dist/hooks/useEditCanvas.d.ts.map +1 -1
- package/dist/hooks/useObjectOverlay.d.ts +49 -0
- package/dist/hooks/useObjectOverlay.d.ts.map +1 -0
- package/dist/hooks/useViewCanvas.d.ts +3 -1
- package/dist/hooks/useViewCanvas.d.ts.map +1 -1
- package/dist/index.cjs +201 -22
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +196 -17
- package/dist/index.js.map +1 -1
- package/dist/interactions/dragToCreate.d.ts +2 -0
- package/dist/interactions/dragToCreate.d.ts.map +1 -1
- package/dist/interactions/drawToCreate.d.ts +7 -1
- package/dist/interactions/drawToCreate.d.ts.map +1 -1
- package/dist/serialization.d.ts +1 -1
- package/dist/serialization.d.ts.map +1 -1
- package/dist/viewport.d.ts +12 -1
- package/dist/viewport.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/Canvas/Canvas.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/background.d.ts
CHANGED
|
@@ -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.
|
package/dist/background.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -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"}
|
package/dist/hooks/shared.d.ts
CHANGED
|
@@ -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;
|
|
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;;;
|
|
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,
|
|
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: () =>
|
|
31
|
-
FabricImage: () =>
|
|
32
|
-
FabricObject: () =>
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
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
|
|
110
|
-
height
|
|
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
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
const
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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/
|
|
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
|
-
|
|
2789
|
+
useObjectOverlay,
|
|
2790
|
+
useViewCanvas,
|
|
2791
|
+
util
|
|
2613
2792
|
});
|
|
2614
2793
|
//# sourceMappingURL=index.cjs.map
|