@nasser-sw/fabric 7.0.1-beta21 → 7.0.1-beta23

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,4 +1,4 @@
1
- var version = "7.0.1-beta20";
1
+ var version = "7.0.1-beta22";
2
2
 
3
3
  export { version };
4
4
  //# sourceMappingURL=package.json.mjs.map
@@ -225,6 +225,18 @@ export declare class Frame extends Group {
225
225
  * @private
226
226
  */
227
227
  private _editModeClipPath?;
228
+ /**
229
+ * Override shouldCache to prevent caching during edit mode.
230
+ * This ensures the full image is rendered without cache-based clipping.
231
+ * @override
232
+ */
233
+ shouldCache(): boolean;
234
+ /**
235
+ * Override drawObject to skip clipPath rendering during edit mode.
236
+ * This prevents coordinate recalculation issues with viewport transforms.
237
+ * @override
238
+ */
239
+ drawObject(ctx: CanvasRenderingContext2D, forClipping: boolean | undefined, context: any): void;
228
240
  /**
229
241
  * Custom render to show edit mode overlay
230
242
  * @override
@@ -1 +1 @@
1
- {"version":3,"file":"Frame.d.ts","sourceRoot":"","sources":["../../../src/shapes/Frame.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Frame.d.ts","sourceRoot":"","sources":["../../../src/shapes/Frame.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEhE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAIhC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAWtC;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,QAAQ,GAAG,cAAc,GAAG,QAAQ,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uCAAuC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gCAAgC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,UAAU,EAAE,cAAc,CAAC;IAC3B,2CAA2C;IAC3C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uCAAuC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6CAA6C;IAC7C,SAAS,EAAE,SAAS,CAAC;IACrB,sEAAsE;IACtE,UAAU,EAAE,OAAO,CAAC;IACpB,iDAAiD;IACjD,eAAe,EAAE,MAAM,CAAC;IACxB,mCAAmC;IACnC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB,EAAE,aAAa;CAAG;AAEpF,MAAM,WAAW,UAAW,SAAQ,UAAU,EAAE,aAAa;CAAG;AAEhE,eAAO,MAAM,kBAAkB,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAa/D,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,KAAM,SAAQ,KAAK;IAC9B,MAAM,CAAC,IAAI,SAAW;IAEd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,cAAc,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IAEjC;;;OAGG;IACH,OAAO,CAAC,aAAa,CAA4B;IAEjD;;;OAGG;IACH,OAAO,CAAC,YAAY,CAA6B;IAEjD;;;OAGG;IACH,OAAO,CAAC,sBAAsB,CAAC,CAAU;IAEzC,MAAM,CAAC,WAAW,mCAAsB;IAExC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAOzC;;;;OAIG;gBAED,OAAO,GAAE,YAAY,EAAO,EAC5B,OAAO,GAAE,OAAO,CAAC,UAAU,CAAM;IA2CnC;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAwK5B;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAoFjC;;;OAGG;IACH,OAAO,CAAC,eAAe;IA2EvB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IA2B1B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAO/B;;;;;;;;;;;;OAYG;IACG,QAAQ,CACZ,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;QAAE,WAAW,CAAC,EAAE,YAAY,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GACjE,OAAO,CAAC,IAAI,CAAC;IA2DhB;;;;OAIG;IACH,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IA2CxC;;;;;;;;OAQG;IACH,OAAO,CAAC,oBAAoB;IAM5B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAerB;;OAEG;IACH,YAAY,IAAI,IAAI;IAcpB;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,eAAe,IAAI,WAAW,GAAG,IAAI;IAIrC;;;OAGG;IACH,aAAa,IAAI,IAAI;IAmErB;;;OAGG;IACH,OAAO,CAAC,mBAAmB,CAAC,CAAmB;IAC/C,OAAO,CAAC,oBAAoB,CAAC,CAAmB;IAEhD;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAuDjC;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IAalC;;;OAGG;IACH,OAAO,CAAC,iBAAiB,CAAC,CAAe;IAEzC;;;;OAIG;IACH,WAAW,IAAI,OAAO;IAQtB;;;;OAIG;IACH,UAAU,CACR,GAAG,EAAE,wBAAwB,EAC7B,WAAW,EAAE,OAAO,GAAG,SAAS,EAChC,OAAO,EAAE,GAAG,GACX,IAAI;IAcP;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,wBAAwB,GAAG,IAAI;IAS3C;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IA8E9B;;OAEG;IACH,YAAY,IAAI,IAAI;IA+EpB;;OAEG;IACH,cAAc,IAAI,IAAI;IAQtB;;;;;;;;;;;OAWG;IACH,WAAW,CACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAO,GACzC,IAAI;IAiCP;;;;;OAKG;IACH,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAS/D;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQrC;;OAEG;IACH,GAAG,CAAC,GAAG,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM;IAMvC;;OAEG;IACH,MAAM,CAAC,GAAG,OAAO,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE;IAMlD;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM;IAM3D;;OAEG;IAEH,QAAQ,CAAC,mBAAmB,GAAE,MAAM,EAAO,GAAG,GAAG;IAejD;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,QAAQ,CAAC,oBAAoB,CAAC,EACxD,MAAM,EAAE,CAAC,EACT,SAAS,CAAC,EAAE,SAAS,GACpB,OAAO,CAAC,KAAK,CAAC;IA6DjB;;;;;;OAMG;IACH,MAAM,CAAC,gBAAgB,CACrB,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,MAAY,EAClB,OAAO,GAAE,OAAO,CAAC,UAAU,CAAM,GAChC,KAAK;CA+CT"}
@@ -695,6 +695,13 @@ class Frame extends Group {
695
695
  this._editModeObjectCaching = this.objectCaching;
696
696
  this.objectCaching = false;
697
697
 
698
+ // Force clear any existing cache
699
+ this.dirty = true;
700
+ if (this._cacheCanvas) {
701
+ this._cacheCanvas = null;
702
+ this._cacheContext = null;
703
+ }
704
+
698
705
  // Enable sub-target interaction so clicks go through to content
699
706
  this.subTargetCheck = true;
700
707
  this.interactive = true;
@@ -705,28 +712,35 @@ class Frame extends Group {
705
712
  const minScale = this._calculateCoverScale(originalWidth, originalHeight);
706
713
 
707
714
  // Make content image interactive with scale constraint
715
+ // Also disable its caching to ensure it renders fully
708
716
  this._contentImage.set({
709
717
  selectable: true,
710
718
  evented: true,
711
719
  hasControls: true,
712
720
  hasBorders: true,
713
721
  minScaleLimit: minScale,
714
- lockScalingFlip: true
722
+ lockScalingFlip: true,
723
+ objectCaching: false
715
724
  });
725
+ this._contentImage.dirty = true;
716
726
 
717
- // Store clip path but keep rendering it for the overlay effect
727
+ // Keep clipPath reference for the overlay effect rendering
728
+ // NOTE: We do NOT set this.clipPath = undefined because that triggers
729
+ // coordinate recalculations in Fabric that behave differently with
730
+ // viewport transforms (autoZoom), causing visual position jumps.
731
+ // Instead, we override drawObject() to skip clipPath rendering in edit mode.
718
732
  if (this.clipPath) {
719
733
  this._editModeClipPath = this.clipPath;
720
- this.clipPath = undefined;
721
734
  }
722
735
 
723
736
  // Add constraint handlers for moving/scaling
724
737
  this._setupEditModeConstraints();
725
738
  this.set('dirty', true);
726
739
 
727
- // Select the content image on the canvas
740
+ // Just render - don't call setActiveObject() on the content image
741
+ // because it causes position miscalculation with viewport transforms.
742
+ // The content image is still interactive via subTargetCheck = true
728
743
  if (this.canvas) {
729
- this.canvas.setActiveObject(this._contentImage);
730
744
  this.canvas.renderAll();
731
745
  }
732
746
 
@@ -808,6 +822,38 @@ class Frame extends Group {
808
822
  this._boundConstrainScale = undefined;
809
823
  }
810
824
  }
825
+ /**
826
+ * Override shouldCache to prevent caching during edit mode.
827
+ * This ensures the full image is rendered without cache-based clipping.
828
+ * @override
829
+ */
830
+ shouldCache() {
831
+ if (this.isEditMode) {
832
+ this.ownCaching = false;
833
+ return false;
834
+ }
835
+ return super.shouldCache();
836
+ }
837
+
838
+ /**
839
+ * Override drawObject to skip clipPath rendering during edit mode.
840
+ * This prevents coordinate recalculation issues with viewport transforms.
841
+ * @override
842
+ */
843
+ drawObject(ctx, forClipping, context) {
844
+ this._renderBackground(ctx);
845
+ for (let i = 0; i < this._objects.length; i++) {
846
+ const obj = this._objects[i];
847
+ if (obj.group === this) {
848
+ obj.render(ctx);
849
+ }
850
+ }
851
+ // Skip clipPath rendering in edit mode to show full image
852
+ if (!this.isEditMode) {
853
+ this._drawClipPath(ctx, this.clipPath, context);
854
+ }
855
+ }
856
+
811
857
  /**
812
858
  * Custom render to show edit mode overlay
813
859
  * @override
@@ -954,21 +1000,17 @@ class Frame extends Group {
954
1000
  contentScale: currentScale
955
1001
  };
956
1002
 
957
- // Make content non-interactive again
1003
+ // Make content non-interactive again and restore caching
958
1004
  this._contentImage.set({
959
1005
  selectable: false,
960
1006
  evented: false,
961
1007
  hasControls: false,
962
- hasBorders: false
1008
+ hasBorders: false,
1009
+ objectCaching: true
963
1010
  });
964
1011
 
965
- // Restore clip path
966
- if (this._editModeClipPath) {
967
- this.clipPath = this._editModeClipPath;
968
- this._editModeClipPath = undefined;
969
- } else {
970
- this._updateClipPath();
971
- }
1012
+ // Clear edit mode clip path reference (clipPath was never removed, just skipped during render)
1013
+ this._editModeClipPath = undefined;
972
1014
 
973
1015
  // Restore caching setting
974
1016
  if (this._editModeObjectCaching !== undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"Frame.mjs","sources":["../../../src/shapes/Frame.ts"],"sourcesContent":["import type { TClassProperties, TOptions, Abortable, TCrossOrigin } from '../typedefs';\r\nimport type { FabricObject } from './Object/FabricObject';\r\nimport type { GroupProps, SerializedGroupProps } from './Group';\r\nimport type { TPointerEvent, Transform, TransformActionHandler } from '../EventTypeDefs';\r\nimport { Group } from './Group';\r\nimport { Rect } from './Rect';\r\nimport { Circle } from './Circle';\r\nimport { Path } from './Path';\r\nimport { FabricImage } from './Image';\r\nimport { classRegistry } from '../ClassRegistry';\r\nimport { LayoutManager } from '../LayoutManager/LayoutManager';\r\nimport { FrameLayout } from '../LayoutManager/LayoutStrategies/FrameLayout';\r\nimport { enlivenObjects, enlivenObjectEnlivables } from '../util/misc/objectEnlive';\r\nimport { Control } from '../controls/Control';\r\nimport { getLocalPoint } from '../controls/util';\r\nimport { wrapWithFireEvent } from '../controls/wrapWithFireEvent';\r\nimport { wrapWithFixedAnchor } from '../controls/wrapWithFixedAnchor';\r\nimport { RESIZING } from '../constants';\r\n\r\n/**\r\n * Frame shape types supported out of the box\r\n */\r\nexport type FrameShapeType = 'rect' | 'circle' | 'rounded-rect' | 'custom';\r\n\r\n/**\r\n * Frame metadata for persistence and state management\r\n */\r\nexport interface FrameMeta {\r\n /** Aspect ratio label (e.g., '16:9', '1:1', '4:5') */\r\n aspect?: string;\r\n /** Content scale factor for cover scaling */\r\n contentScale?: number;\r\n /** X offset of content within frame */\r\n contentOffsetX?: number;\r\n /** Y offset of content within frame */\r\n contentOffsetY?: number;\r\n /** Source URL of the current image */\r\n imageSrc?: string;\r\n /** Original image dimensions */\r\n originalWidth?: number;\r\n /** Original image dimensions */\r\n originalHeight?: number;\r\n}\r\n\r\n/**\r\n * Frame-specific properties\r\n */\r\nexport interface FrameOwnProps {\r\n /** Fixed width of the frame */\r\n frameWidth: number;\r\n /** Fixed height of the frame */\r\n frameHeight: number;\r\n /** Shape type for the clip mask */\r\n frameShape: FrameShapeType;\r\n /** Border radius for rounded-rect shape */\r\n frameBorderRadius: number;\r\n /** Custom SVG path for custom shape */\r\n frameCustomPath?: string;\r\n /** Frame metadata for content positioning */\r\n frameMeta: FrameMeta;\r\n /** Whether the frame is in edit mode (content can be repositioned) */\r\n isEditMode: boolean;\r\n /** Placeholder text shown when frame is empty */\r\n placeholderText: string;\r\n /** Placeholder background color */\r\n placeholderColor: string;\r\n}\r\n\r\nexport interface SerializedFrameProps extends SerializedGroupProps, FrameOwnProps {}\r\n\r\nexport interface FrameProps extends GroupProps, FrameOwnProps {}\r\n\r\nexport const frameDefaultValues: Partial<TClassProperties<Frame>> = {\r\n frameWidth: 200,\r\n frameHeight: 200,\r\n frameShape: 'rect',\r\n frameBorderRadius: 0,\r\n isEditMode: false,\r\n placeholderText: 'Drop image here',\r\n placeholderColor: '#d0d0d0',\r\n frameMeta: {\r\n contentScale: 1,\r\n contentOffsetX: 0,\r\n contentOffsetY: 0,\r\n },\r\n};\r\n\r\n/**\r\n * Frame class - A Canva-like frame container for images\r\n *\r\n * Features:\r\n * - Fixed dimensions that don't change when content is added/removed\r\n * - Multiple shape types (rect, circle, rounded-rect, custom SVG path)\r\n * - Cover scaling: images fill the frame completely, overflow is clipped\r\n * - Double-click edit mode: reposition/zoom content within frame\r\n * - Drag & drop support for replacing images\r\n * - Full serialization/deserialization support\r\n *\r\n * @example\r\n * ```ts\r\n * // Create a rectangular frame\r\n * const frame = new Frame([], {\r\n * frameWidth: 300,\r\n * frameHeight: 200,\r\n * frameShape: 'rect',\r\n * left: 100,\r\n * top: 100,\r\n * });\r\n *\r\n * // Add image with cover scaling\r\n * await frame.setImage('https://example.com/image.jpg');\r\n *\r\n * canvas.add(frame);\r\n * ```\r\n */\r\nexport class Frame extends Group {\r\n static type = 'Frame';\r\n\r\n declare frameWidth: number;\r\n declare frameHeight: number;\r\n declare frameShape: FrameShapeType;\r\n declare frameBorderRadius: number;\r\n declare frameCustomPath?: string;\r\n declare frameMeta: FrameMeta;\r\n declare isEditMode: boolean;\r\n declare placeholderText: string;\r\n declare placeholderColor: string;\r\n\r\n /**\r\n * Reference to the content image\r\n * @private\r\n */\r\n private _contentImage: FabricImage | null = null;\r\n\r\n /**\r\n * Reference to the placeholder object\r\n * @private\r\n */\r\n private _placeholder: FabricObject | null = null;\r\n\r\n /**\r\n * Stored objectCaching value before edit mode\r\n * @private\r\n */\r\n private _editModeObjectCaching?: boolean;\r\n\r\n static ownDefaults = frameDefaultValues;\r\n\r\n static getDefaults(): Record<string, any> {\r\n return {\r\n ...super.getDefaults(),\r\n ...Frame.ownDefaults,\r\n };\r\n }\r\n\r\n /**\r\n * Constructor\r\n * @param objects - Initial objects (typically empty for frames)\r\n * @param options - Frame configuration options\r\n */\r\n constructor(\r\n objects: FabricObject[] = [],\r\n options: Partial<FrameProps> = {}\r\n ) {\r\n // Set up the frame layout manager before calling super\r\n const frameLayoutManager = new LayoutManager(new FrameLayout());\r\n\r\n super(objects, {\r\n ...options,\r\n layoutManager: frameLayoutManager,\r\n });\r\n\r\n // Apply defaults\r\n Object.assign(this, Frame.ownDefaults);\r\n\r\n // Apply user options\r\n this.setOptions(options);\r\n\r\n // Ensure frameMeta is properly initialized with defaults\r\n const defaultMeta = frameDefaultValues.frameMeta || {};\r\n this.frameMeta = {\r\n contentScale: defaultMeta.contentScale ?? 1,\r\n contentOffsetX: defaultMeta.contentOffsetX ?? 0,\r\n contentOffsetY: defaultMeta.contentOffsetY ?? 0,\r\n ...options.frameMeta,\r\n };\r\n\r\n // Set fixed dimensions\r\n this.set({\r\n width: this.frameWidth,\r\n height: this.frameHeight,\r\n });\r\n\r\n // Create clip path based on shape\r\n this._updateClipPath();\r\n\r\n // Create placeholder if no content\r\n if (objects.length === 0) {\r\n this._createPlaceholder();\r\n }\r\n\r\n // Set up custom resize controls (instead of scale controls)\r\n this._setupResizeControls();\r\n }\r\n\r\n /**\r\n * Sets up custom controls that resize instead of scale\r\n * This is the key to Canva-like behavior - corners resize the frame dimensions\r\n * instead of scaling the entire group (which would stretch the image)\r\n * @private\r\n */\r\n private _setupResizeControls(): void {\r\n // Helper to change width (like changeObjectWidth but for frames)\r\n // Note: wrapWithFixedAnchor sets origin to opposite corner, so localPoint.x IS the new width\r\n const changeFrameWidth: TransformActionHandler = (\r\n eventData,\r\n transform,\r\n x,\r\n y\r\n ): boolean => {\r\n const target = transform.target as Frame;\r\n const localPoint = getLocalPoint(\r\n transform,\r\n transform.originX,\r\n transform.originY,\r\n x,\r\n y\r\n );\r\n\r\n const oldWidth = target.frameWidth;\r\n // localPoint.x is distance from anchor (opposite side) to mouse = new width\r\n const newWidth = Math.max(20, Math.abs(localPoint.x));\r\n\r\n if (Math.abs(oldWidth - newWidth) < 1) return false;\r\n\r\n target.frameWidth = newWidth;\r\n target.width = newWidth;\r\n target._updateClipPath();\r\n target._adjustContentAfterResize();\r\n\r\n return true;\r\n };\r\n\r\n // Helper to change height\r\n const changeFrameHeight: TransformActionHandler = (\r\n eventData,\r\n transform,\r\n x,\r\n y\r\n ): boolean => {\r\n const target = transform.target as Frame;\r\n const localPoint = getLocalPoint(\r\n transform,\r\n transform.originX,\r\n transform.originY,\r\n x,\r\n y\r\n );\r\n\r\n const oldHeight = target.frameHeight;\r\n const newHeight = Math.max(20, Math.abs(localPoint.y));\r\n\r\n if (Math.abs(oldHeight - newHeight) < 1) return false;\r\n\r\n target.frameHeight = newHeight;\r\n target.height = newHeight;\r\n target._updateClipPath();\r\n target._adjustContentAfterResize();\r\n\r\n return true;\r\n };\r\n\r\n // Helper to change both width and height (corners)\r\n const changeFrameSize: TransformActionHandler = (\r\n eventData,\r\n transform,\r\n x,\r\n y\r\n ): boolean => {\r\n const target = transform.target as Frame;\r\n const localPoint = getLocalPoint(\r\n transform,\r\n transform.originX,\r\n transform.originY,\r\n x,\r\n y\r\n );\r\n\r\n const oldWidth = target.frameWidth;\r\n const oldHeight = target.frameHeight;\r\n const newWidth = Math.max(20, Math.abs(localPoint.x));\r\n const newHeight = Math.max(20, Math.abs(localPoint.y));\r\n\r\n if (Math.abs(oldWidth - newWidth) < 1 && Math.abs(oldHeight - newHeight) < 1) return false;\r\n\r\n target.frameWidth = newWidth;\r\n target.frameHeight = newHeight;\r\n target.width = newWidth;\r\n target.height = newHeight;\r\n target._updateClipPath();\r\n target._adjustContentAfterResize();\r\n\r\n return true;\r\n };\r\n\r\n // Create wrapped handlers\r\n const resizeFromCorner = wrapWithFireEvent(\r\n RESIZING,\r\n wrapWithFixedAnchor(changeFrameSize)\r\n );\r\n\r\n const resizeX = wrapWithFireEvent(\r\n RESIZING,\r\n wrapWithFixedAnchor(changeFrameWidth)\r\n );\r\n\r\n const resizeY = wrapWithFireEvent(\r\n RESIZING,\r\n wrapWithFixedAnchor(changeFrameHeight)\r\n );\r\n\r\n // Guard: ensure controls exist\r\n if (!this.controls) {\r\n console.warn('Frame: controls not initialized yet');\r\n return;\r\n }\r\n\r\n // Override corner controls - use resize instead of scale\r\n const cornerControls = ['tl', 'tr', 'bl', 'br'] as const;\r\n cornerControls.forEach((corner) => {\r\n const existing = this.controls[corner];\r\n if (existing) {\r\n this.controls[corner] = new Control({\r\n x: existing.x,\r\n y: existing.y,\r\n cursorStyleHandler: existing.cursorStyleHandler,\r\n actionHandler: resizeFromCorner,\r\n actionName: 'resizing',\r\n });\r\n }\r\n });\r\n\r\n // Override side controls for horizontal resize\r\n const horizontalControls = ['ml', 'mr'] as const;\r\n horizontalControls.forEach((corner) => {\r\n const existing = this.controls[corner];\r\n if (existing) {\r\n this.controls[corner] = new Control({\r\n x: existing.x,\r\n y: existing.y,\r\n cursorStyleHandler: existing.cursorStyleHandler,\r\n actionHandler: resizeX,\r\n actionName: 'resizing',\r\n render: existing.render, // Keep the global pill renderer\r\n sizeX: existing.sizeX,\r\n sizeY: existing.sizeY,\r\n });\r\n }\r\n });\r\n\r\n // Override side controls for vertical resize\r\n const verticalControls = ['mt', 'mb'] as const;\r\n verticalControls.forEach((corner) => {\r\n const existing = this.controls[corner];\r\n if (existing) {\r\n this.controls[corner] = new Control({\r\n x: existing.x,\r\n y: existing.y,\r\n cursorStyleHandler: existing.cursorStyleHandler,\r\n actionHandler: resizeY,\r\n actionName: 'resizing',\r\n render: existing.render, // Keep the global pill renderer\r\n sizeX: existing.sizeX,\r\n sizeY: existing.sizeY,\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Adjusts content after a resize operation (called from set override)\r\n * @private\r\n */\r\n private _adjustContentAfterResize(): void {\r\n // Update placeholder if present (simple rect)\r\n if (this._placeholder) {\r\n this._placeholder.set({\r\n width: this.frameWidth,\r\n height: this.frameHeight,\r\n });\r\n }\r\n\r\n // Adjust content image (Canva-like behavior)\r\n if (this._contentImage) {\r\n const img = this._contentImage;\r\n const originalWidth = this.frameMeta.originalWidth ?? img.width ?? 100;\r\n const originalHeight = this.frameMeta.originalHeight ?? img.height ?? 100;\r\n\r\n // Current image scale and position - preserve user's position\r\n let currentScale = img.scaleX ?? 1;\r\n let imgCenterX = img.left ?? 0;\r\n let imgCenterY = img.top ?? 0;\r\n\r\n // Check if current scale still covers the frame\r\n const minScaleForCover = this._calculateCoverScale(originalWidth, originalHeight);\r\n\r\n if (currentScale < minScaleForCover) {\r\n // Image is too small to cover frame - scale up proportionally\r\n // But try to keep the same visual center point\r\n const scaleRatio = minScaleForCover / currentScale;\r\n\r\n // Scale position proportionally to maintain visual anchor\r\n imgCenterX = imgCenterX * scaleRatio;\r\n imgCenterY = imgCenterY * scaleRatio;\r\n currentScale = minScaleForCover;\r\n\r\n img.set({\r\n scaleX: currentScale,\r\n scaleY: currentScale,\r\n });\r\n\r\n this.frameMeta = {\r\n ...this.frameMeta,\r\n contentScale: currentScale,\r\n };\r\n }\r\n\r\n // Now constrain position only if needed to prevent empty space\r\n const scaledImgHalfW = (originalWidth * currentScale) / 2;\r\n const scaledImgHalfH = (originalHeight * currentScale) / 2;\r\n const frameHalfW = this.frameWidth / 2;\r\n const frameHalfH = this.frameHeight / 2;\r\n\r\n // Calculate how much the image can move while still covering the frame\r\n const maxOffsetX = Math.max(0, scaledImgHalfW - frameHalfW);\r\n const maxOffsetY = Math.max(0, scaledImgHalfH - frameHalfH);\r\n\r\n // Only constrain if position would show empty space\r\n const needsConstraintX = Math.abs(imgCenterX) > maxOffsetX;\r\n const needsConstraintY = Math.abs(imgCenterY) > maxOffsetY;\r\n\r\n if (needsConstraintX) {\r\n imgCenterX = Math.max(-maxOffsetX, Math.min(maxOffsetX, imgCenterX));\r\n }\r\n if (needsConstraintY) {\r\n imgCenterY = Math.max(-maxOffsetY, Math.min(maxOffsetY, imgCenterY));\r\n }\r\n\r\n if (needsConstraintX || needsConstraintY) {\r\n img.set({\r\n left: imgCenterX,\r\n top: imgCenterY,\r\n });\r\n\r\n this.frameMeta = {\r\n ...this.frameMeta,\r\n contentOffsetX: imgCenterX,\r\n contentOffsetY: imgCenterY,\r\n };\r\n }\r\n\r\n img.setCoords();\r\n }\r\n\r\n this.setCoords();\r\n }\r\n\r\n /**\r\n * Updates the clip path based on the current frame shape\r\n * @private\r\n */\r\n private _updateClipPath(): void {\r\n let clipPath: FabricObject;\r\n\r\n switch (this.frameShape) {\r\n case 'circle': {\r\n const radius = Math.min(this.frameWidth, this.frameHeight) / 2;\r\n clipPath = new Circle({\r\n radius,\r\n originX: 'center',\r\n originY: 'center',\r\n left: 0,\r\n top: 0,\r\n });\r\n break;\r\n }\r\n\r\n case 'rounded-rect': {\r\n clipPath = new Rect({\r\n width: this.frameWidth,\r\n height: this.frameHeight,\r\n rx: this.frameBorderRadius,\r\n ry: this.frameBorderRadius,\r\n originX: 'center',\r\n originY: 'center',\r\n left: 0,\r\n top: 0,\r\n });\r\n break;\r\n }\r\n\r\n case 'custom': {\r\n if (this.frameCustomPath) {\r\n clipPath = new Path(this.frameCustomPath, {\r\n originX: 'center',\r\n originY: 'center',\r\n left: 0,\r\n top: 0,\r\n });\r\n // Scale custom path to fit frame\r\n const pathBounds = clipPath.getBoundingRect();\r\n const scaleX = this.frameWidth / pathBounds.width;\r\n const scaleY = this.frameHeight / pathBounds.height;\r\n clipPath.set({ scaleX, scaleY });\r\n } else {\r\n // Fallback to rect if no custom path\r\n clipPath = new Rect({\r\n width: this.frameWidth,\r\n height: this.frameHeight,\r\n originX: 'center',\r\n originY: 'center',\r\n left: 0,\r\n top: 0,\r\n });\r\n }\r\n break;\r\n }\r\n\r\n case 'rect':\r\n default: {\r\n clipPath = new Rect({\r\n width: this.frameWidth,\r\n height: this.frameHeight,\r\n originX: 'center',\r\n originY: 'center',\r\n left: 0,\r\n top: 0,\r\n });\r\n break;\r\n }\r\n }\r\n\r\n this.clipPath = clipPath;\r\n this.set('dirty', true);\r\n }\r\n\r\n /**\r\n * Creates a placeholder element for empty frames\r\n * Shows a colored rectangle - users can customize via placeholderColor\r\n * @private\r\n */\r\n private _createPlaceholder(): void {\r\n // Remove existing placeholder if any\r\n if (this._placeholder) {\r\n super.remove(this._placeholder);\r\n this._placeholder = null;\r\n }\r\n\r\n // Create placeholder background\r\n const placeholder = new Rect({\r\n width: this.frameWidth,\r\n height: this.frameHeight,\r\n fill: this.placeholderColor,\r\n originX: 'center',\r\n originY: 'center',\r\n left: 0,\r\n top: 0,\r\n selectable: false,\r\n evented: false,\r\n });\r\n\r\n this._placeholder = placeholder;\r\n super.add(placeholder);\r\n\r\n // Ensure dimensions remain fixed\r\n this._restoreFixedDimensions();\r\n }\r\n\r\n /**\r\n * Removes the placeholder element\r\n * @private\r\n */\r\n private _removePlaceholder(): void {\r\n if (this._placeholder) {\r\n super.remove(this._placeholder);\r\n this._placeholder = null;\r\n }\r\n }\r\n\r\n /**\r\n * Restores the fixed frame dimensions\r\n * @private\r\n */\r\n private _restoreFixedDimensions(): void {\r\n this.set({\r\n width: this.frameWidth,\r\n height: this.frameHeight,\r\n });\r\n }\r\n\r\n /**\r\n * Sets an image in the frame with cover scaling\r\n *\r\n * @param src - Image source URL\r\n * @param options - Optional loading options\r\n * @returns Promise that resolves when the image is loaded and set\r\n *\r\n * @example\r\n * ```ts\r\n * await frame.setImage('https://example.com/photo.jpg');\r\n * canvas.renderAll();\r\n * ```\r\n */\r\n async setImage(\r\n src: string,\r\n options: { crossOrigin?: TCrossOrigin; signal?: AbortSignal } = {}\r\n ): Promise<void> {\r\n const { crossOrigin = 'anonymous', signal } = options;\r\n\r\n // Load the image\r\n const image = await FabricImage.fromURL(src, { crossOrigin, signal });\r\n\r\n // Get original dimensions\r\n const originalWidth = image.width ?? 100;\r\n const originalHeight = image.height ?? 100;\r\n\r\n // Calculate cover scale\r\n const scale = this._calculateCoverScale(originalWidth, originalHeight);\r\n\r\n // Configure image for frame\r\n image.set({\r\n scaleX: scale,\r\n scaleY: scale,\r\n originX: 'center',\r\n originY: 'center',\r\n left: 0,\r\n top: 0,\r\n selectable: false,\r\n evented: false,\r\n });\r\n\r\n // Remove existing content\r\n this._clearContent();\r\n\r\n // Add new image\r\n this._contentImage = image;\r\n super.add(image);\r\n\r\n // Force re-center the image after adding (layout might have moved it)\r\n this._contentImage.set({\r\n left: 0,\r\n top: 0,\r\n });\r\n\r\n // Update metadata\r\n this.frameMeta = {\r\n ...this.frameMeta,\r\n contentScale: scale,\r\n contentOffsetX: 0,\r\n contentOffsetY: 0,\r\n imageSrc: src,\r\n originalWidth,\r\n originalHeight,\r\n };\r\n\r\n // Restore dimensions (in case Group recalculated them)\r\n this._restoreFixedDimensions();\r\n\r\n // Force recalculation of coordinates\r\n this.setCoords();\r\n this._contentImage.setCoords();\r\n\r\n this.set('dirty', true);\r\n }\r\n\r\n /**\r\n * Sets an image from an existing FabricImage object\r\n *\r\n * @param image - FabricImage instance\r\n */\r\n setImageObject(image: FabricImage): void {\r\n const originalWidth = image.width ?? 100;\r\n const originalHeight = image.height ?? 100;\r\n\r\n // Calculate cover scale\r\n const scale = this._calculateCoverScale(originalWidth, originalHeight);\r\n\r\n // Configure image for frame\r\n image.set({\r\n scaleX: scale,\r\n scaleY: scale,\r\n originX: 'center',\r\n originY: 'center',\r\n left: 0,\r\n top: 0,\r\n selectable: false,\r\n evented: false,\r\n });\r\n\r\n // Remove existing content\r\n this._clearContent();\r\n\r\n // Add new image\r\n this._contentImage = image;\r\n super.add(image);\r\n\r\n // Update metadata\r\n this.frameMeta = {\r\n ...this.frameMeta,\r\n contentScale: scale,\r\n contentOffsetX: 0,\r\n contentOffsetY: 0,\r\n imageSrc: image.getSrc(),\r\n originalWidth,\r\n originalHeight,\r\n };\r\n\r\n // Restore dimensions\r\n this._restoreFixedDimensions();\r\n\r\n this.set('dirty', true);\r\n }\r\n\r\n /**\r\n * Calculates the cover scale factor for an image\r\n * Cover scaling ensures the image fills the frame completely\r\n *\r\n * @param imageWidth - Original image width\r\n * @param imageHeight - Original image height\r\n * @returns Scale factor to apply\r\n * @private\r\n */\r\n private _calculateCoverScale(imageWidth: number, imageHeight: number): number {\r\n const scaleX = this.frameWidth / imageWidth;\r\n const scaleY = this.frameHeight / imageHeight;\r\n return Math.max(scaleX, scaleY);\r\n }\r\n\r\n /**\r\n * Clears all content from the frame\r\n * @private\r\n */\r\n private _clearContent(): void {\r\n // Remove placeholder\r\n this._removePlaceholder();\r\n\r\n // Remove content image\r\n if (this._contentImage) {\r\n super.remove(this._contentImage);\r\n this._contentImage = null;\r\n }\r\n\r\n // Clear any other objects\r\n const objects = this.getObjects();\r\n objects.forEach((obj) => super.remove(obj));\r\n }\r\n\r\n /**\r\n * Clears the frame content and shows placeholder\r\n */\r\n clearContent(): void {\r\n this._clearContent();\r\n this._createPlaceholder();\r\n\r\n // Reset metadata\r\n this.frameMeta = {\r\n contentScale: 1,\r\n contentOffsetX: 0,\r\n contentOffsetY: 0,\r\n };\r\n\r\n this.set('dirty', true);\r\n }\r\n\r\n /**\r\n * Checks if the frame has image content\r\n */\r\n hasContent(): boolean {\r\n return this._contentImage !== null;\r\n }\r\n\r\n /**\r\n * Gets the current content image\r\n */\r\n getContentImage(): FabricImage | null {\r\n return this._contentImage;\r\n }\r\n\r\n /**\r\n * Enters edit mode for repositioning content within the frame\r\n * In edit mode, the content image can be dragged and scaled\r\n */\r\n enterEditMode(): void {\r\n if (!this._contentImage || this.isEditMode) {\r\n return;\r\n }\r\n\r\n this.isEditMode = true;\r\n\r\n // Disable caching during edit mode - otherwise the cache canvas\r\n // clips content to the frame bounds, preventing us from seeing\r\n // the full image outside the frame\r\n this._editModeObjectCaching = this.objectCaching;\r\n this.objectCaching = false;\r\n\r\n // Enable sub-target interaction so clicks go through to content\r\n this.subTargetCheck = true;\r\n this.interactive = true;\r\n\r\n // Calculate minimum scale to cover frame\r\n const originalWidth = this.frameMeta.originalWidth ?? this._contentImage.width ?? 100;\r\n const originalHeight = this.frameMeta.originalHeight ?? this._contentImage.height ?? 100;\r\n const minScale = this._calculateCoverScale(originalWidth, originalHeight);\r\n\r\n // Make content image interactive with scale constraint\r\n this._contentImage.set({\r\n selectable: true,\r\n evented: true,\r\n hasControls: true,\r\n hasBorders: true,\r\n minScaleLimit: minScale,\r\n lockScalingFlip: true,\r\n });\r\n\r\n // Store clip path but keep rendering it for the overlay effect\r\n if (this.clipPath) {\r\n this._editModeClipPath = this.clipPath as FabricObject;\r\n this.clipPath = undefined;\r\n }\r\n\r\n\r\n // Add constraint handlers for moving/scaling\r\n this._setupEditModeConstraints();\r\n\r\n this.set('dirty', true);\r\n\r\n // Select the content image on the canvas\r\n if (this.canvas) {\r\n this.canvas.setActiveObject(this._contentImage);\r\n this.canvas.renderAll();\r\n }\r\n\r\n // Fire custom event\r\n (this as any).fire('frame:editmode:enter', { target: this });\r\n }\r\n\r\n /**\r\n * Bound constraint handler references for cleanup\r\n * @private\r\n */\r\n private _boundConstrainMove?: (e: any) => void;\r\n private _boundConstrainScale?: (e: any) => void;\r\n\r\n /**\r\n * Sets up constraints for edit mode - prevents gaps\r\n * @private\r\n */\r\n private _setupEditModeConstraints(): void {\r\n if (!this._contentImage || !this.canvas) return;\r\n\r\n const frame = this;\r\n const img = this._contentImage;\r\n\r\n // Constrain movement to prevent gaps\r\n this._boundConstrainMove = (e: any) => {\r\n if (e.target !== img || !frame.isEditMode) return;\r\n\r\n const originalWidth = frame.frameMeta.originalWidth ?? img.width ?? 100;\r\n const originalHeight = frame.frameMeta.originalHeight ?? img.height ?? 100;\r\n const currentScale = img.scaleX ?? 1;\r\n\r\n const scaledImgHalfW = (originalWidth * currentScale) / 2;\r\n const scaledImgHalfH = (originalHeight * currentScale) / 2;\r\n const frameHalfW = frame.frameWidth / 2;\r\n const frameHalfH = frame.frameHeight / 2;\r\n\r\n const maxOffsetX = Math.max(0, scaledImgHalfW - frameHalfW);\r\n const maxOffsetY = Math.max(0, scaledImgHalfH - frameHalfH);\r\n\r\n let left = img.left ?? 0;\r\n let top = img.top ?? 0;\r\n\r\n // Constrain position\r\n left = Math.max(-maxOffsetX, Math.min(maxOffsetX, left));\r\n top = Math.max(-maxOffsetY, Math.min(maxOffsetY, top));\r\n\r\n img.set({ left, top });\r\n };\r\n\r\n // Constrain scaling to prevent gaps\r\n this._boundConstrainScale = (e: any) => {\r\n if (e.target !== img || !frame.isEditMode) return;\r\n\r\n const originalWidth = frame.frameMeta.originalWidth ?? img.width ?? 100;\r\n const originalHeight = frame.frameMeta.originalHeight ?? img.height ?? 100;\r\n const minScale = frame._calculateCoverScale(originalWidth, originalHeight);\r\n\r\n let scaleX = img.scaleX ?? 1;\r\n let scaleY = img.scaleY ?? 1;\r\n\r\n // Ensure uniform scaling and minimum scale\r\n const scale = Math.max(minScale, Math.max(scaleX, scaleY));\r\n img.set({ scaleX: scale, scaleY: scale });\r\n\r\n // Also constrain position after scale\r\n frame._boundConstrainMove?.(e);\r\n };\r\n\r\n this.canvas.on('object:moving', this._boundConstrainMove);\r\n this.canvas.on('object:scaling', this._boundConstrainScale);\r\n }\r\n\r\n /**\r\n * Removes edit mode constraint handlers\r\n * @private\r\n */\r\n private _removeEditModeConstraints(): void {\r\n if (!this.canvas) return;\r\n\r\n if (this._boundConstrainMove) {\r\n this.canvas.off('object:moving', this._boundConstrainMove);\r\n this._boundConstrainMove = undefined;\r\n }\r\n if (this._boundConstrainScale) {\r\n this.canvas.off('object:scaling', this._boundConstrainScale);\r\n this._boundConstrainScale = undefined;\r\n }\r\n }\r\n\r\n /**\r\n * Stored clip path before edit mode\r\n * @private\r\n */\r\n private _editModeClipPath?: FabricObject;\r\n\r\n /**\r\n * Custom render to show edit mode overlay\r\n * @override\r\n */\r\n render(ctx: CanvasRenderingContext2D): void {\r\n super.render(ctx);\r\n\r\n // Draw edit mode overlay if in edit mode\r\n if (this.isEditMode && this._editModeClipPath) {\r\n this._renderEditModeOverlay(ctx);\r\n }\r\n }\r\n\r\n /**\r\n * Renders the edit mode overlay - dims area outside frame, shows frame border\r\n * @private\r\n */\r\n private _renderEditModeOverlay(ctx: CanvasRenderingContext2D): void {\r\n ctx.save();\r\n\r\n // Apply the group's transform\r\n const m = this.calcTransformMatrix();\r\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\r\n\r\n // Draw semi-transparent overlay on the OUTSIDE of the frame\r\n // We do this by drawing a large rect and cutting out the frame shape\r\n ctx.beginPath();\r\n\r\n // Large outer rectangle (covers the whole image area)\r\n const padding = 2000; // Large enough to cover any overflow\r\n ctx.rect(-padding, -padding, padding * 2, padding * 2);\r\n\r\n // Cut out the frame shape (counter-clockwise to create hole)\r\n if (this.frameShape === 'circle') {\r\n const radius = Math.min(this.frameWidth, this.frameHeight) / 2;\r\n ctx.moveTo(radius, 0);\r\n ctx.arc(0, 0, radius, 0, Math.PI * 2, true);\r\n } else if (this.frameShape === 'rounded-rect') {\r\n const w = this.frameWidth / 2;\r\n const h = this.frameHeight / 2;\r\n const r = Math.min(this.frameBorderRadius, w, h);\r\n ctx.moveTo(w, h - r);\r\n ctx.arcTo(w, -h, w - r, -h, r);\r\n ctx.arcTo(-w, -h, -w, -h + r, r);\r\n ctx.arcTo(-w, h, -w + r, h, r);\r\n ctx.arcTo(w, h, w, h - r, r);\r\n ctx.closePath();\r\n } else {\r\n // Rectangle\r\n const w = this.frameWidth / 2;\r\n const h = this.frameHeight / 2;\r\n ctx.moveTo(w, -h);\r\n ctx.lineTo(-w, -h);\r\n ctx.lineTo(-w, h);\r\n ctx.lineTo(w, h);\r\n ctx.closePath();\r\n }\r\n\r\n // Fill with semi-transparent dark overlay\r\n ctx.fillStyle = 'rgba(0, 0, 0, 0.5)';\r\n ctx.fill('evenodd');\r\n\r\n // Draw frame border\r\n ctx.beginPath();\r\n if (this.frameShape === 'circle') {\r\n const radius = Math.min(this.frameWidth, this.frameHeight) / 2;\r\n ctx.arc(0, 0, radius, 0, Math.PI * 2);\r\n } else if (this.frameShape === 'rounded-rect') {\r\n const w = this.frameWidth / 2;\r\n const h = this.frameHeight / 2;\r\n const r = Math.min(this.frameBorderRadius, w, h);\r\n ctx.moveTo(w - r, -h);\r\n ctx.arcTo(w, -h, w, -h + r, r);\r\n ctx.arcTo(w, h, w - r, h, r);\r\n ctx.arcTo(-w, h, -w, h - r, r);\r\n ctx.arcTo(-w, -h, -w + r, -h, r);\r\n ctx.closePath();\r\n } else {\r\n const w = this.frameWidth / 2;\r\n const h = this.frameHeight / 2;\r\n ctx.rect(-w, -h, this.frameWidth, this.frameHeight);\r\n }\r\n ctx.strokeStyle = 'rgba(255, 255, 255, 0.8)';\r\n ctx.lineWidth = 2;\r\n ctx.stroke();\r\n\r\n // Draw subtle dashed line for frame boundary\r\n ctx.setLineDash([5, 5]);\r\n ctx.strokeStyle = 'rgba(0, 150, 255, 0.8)';\r\n ctx.lineWidth = 1;\r\n ctx.stroke();\r\n\r\n ctx.restore();\r\n }\r\n\r\n /**\r\n * Exits edit mode and saves the content position\r\n */\r\n exitEditMode(): void {\r\n if (!this._contentImage || !this.isEditMode) {\r\n return;\r\n }\r\n\r\n this.isEditMode = false;\r\n\r\n // Remove constraint handlers\r\n this._removeEditModeConstraints();\r\n\r\n // Disable sub-target interaction\r\n this.subTargetCheck = false;\r\n this.interactive = false;\r\n\r\n // Get the current position of the content\r\n const contentLeft = this._contentImage.left ?? 0;\r\n const contentTop = this._contentImage.top ?? 0;\r\n const contentScaleX = this._contentImage.scaleX ?? 1;\r\n const contentScaleY = this._contentImage.scaleY ?? 1;\r\n\r\n // Constrain position so image always covers the frame\r\n const originalWidth = this.frameMeta.originalWidth ?? this._contentImage.width ?? 100;\r\n const originalHeight = this.frameMeta.originalHeight ?? this._contentImage.height ?? 100;\r\n const currentScale = Math.max(contentScaleX, contentScaleY);\r\n const scaledImgHalfW = (originalWidth * currentScale) / 2;\r\n const scaledImgHalfH = (originalHeight * currentScale) / 2;\r\n const frameHalfW = this.frameWidth / 2;\r\n const frameHalfH = this.frameHeight / 2;\r\n\r\n // Ensure image covers frame (constrain position)\r\n const maxOffsetX = Math.max(0, scaledImgHalfW - frameHalfW);\r\n const maxOffsetY = Math.max(0, scaledImgHalfH - frameHalfH);\r\n const constrainedLeft = Math.max(-maxOffsetX, Math.min(maxOffsetX, contentLeft));\r\n const constrainedTop = Math.max(-maxOffsetY, Math.min(maxOffsetY, contentTop));\r\n\r\n // Apply constrained position\r\n this._contentImage.set({\r\n left: constrainedLeft,\r\n top: constrainedTop,\r\n });\r\n\r\n // Update metadata with new offsets and scale\r\n this.frameMeta = {\r\n ...this.frameMeta,\r\n contentOffsetX: constrainedLeft,\r\n contentOffsetY: constrainedTop,\r\n contentScale: currentScale,\r\n };\r\n\r\n // Make content non-interactive again\r\n this._contentImage.set({\r\n selectable: false,\r\n evented: false,\r\n hasControls: false,\r\n hasBorders: false,\r\n });\r\n\r\n // Restore clip path\r\n if (this._editModeClipPath) {\r\n this.clipPath = this._editModeClipPath;\r\n this._editModeClipPath = undefined;\r\n } else {\r\n this._updateClipPath();\r\n }\r\n\r\n // Restore caching setting\r\n if (this._editModeObjectCaching !== undefined) {\r\n this.objectCaching = this._editModeObjectCaching;\r\n this._editModeObjectCaching = undefined;\r\n }\r\n\r\n this.set('dirty', true);\r\n\r\n // Re-select the frame itself\r\n if (this.canvas) {\r\n this.canvas.setActiveObject(this);\r\n this.canvas.renderAll();\r\n }\r\n\r\n // Fire custom event\r\n (this as any).fire('frame:editmode:exit', { target: this });\r\n }\r\n\r\n /**\r\n * Toggles edit mode\r\n */\r\n toggleEditMode(): void {\r\n if (this.isEditMode) {\r\n this.exitEditMode();\r\n } else {\r\n this.enterEditMode();\r\n }\r\n }\r\n\r\n /**\r\n * Resizes the frame to new dimensions (Canva-like behavior)\r\n *\r\n * Canva behavior:\r\n * - When frame shrinks: crops more of image (no scale change)\r\n * - When frame grows: uncrops to show more, preserving position\r\n * - Only scales up when image can't cover the frame anymore\r\n *\r\n * @param width - New frame width\r\n * @param height - New frame height\r\n * @param options - Resize options\r\n */\r\n resizeFrame(\r\n width: number,\r\n height: number,\r\n options: { maintainAspect?: boolean } = {}\r\n ): void {\r\n const { maintainAspect = false } = options;\r\n\r\n if (maintainAspect) {\r\n const currentAspect = this.frameWidth / this.frameHeight;\r\n const newAspect = width / height;\r\n\r\n if (newAspect > currentAspect) {\r\n height = width / currentAspect;\r\n } else {\r\n width = height * currentAspect;\r\n }\r\n }\r\n\r\n this.frameWidth = width;\r\n this.frameHeight = height;\r\n\r\n // Update dimensions using super.set to avoid re-triggering conversion\r\n super.set({\r\n width: this.frameWidth,\r\n height: this.frameHeight,\r\n });\r\n\r\n // Update clip path\r\n this._updateClipPath();\r\n\r\n // Canva-like content adjustment\r\n this._adjustContentAfterResize();\r\n\r\n this.set('dirty', true);\r\n this.setCoords();\r\n }\r\n\r\n /**\r\n * Sets the frame shape\r\n *\r\n * @param shape - Shape type\r\n * @param customPath - Custom SVG path for 'custom' shape type\r\n */\r\n setFrameShape(shape: FrameShapeType, customPath?: string): void {\r\n this.frameShape = shape;\r\n if (customPath) {\r\n this.frameCustomPath = customPath;\r\n }\r\n this._updateClipPath();\r\n this.set('dirty', true);\r\n }\r\n\r\n /**\r\n * Sets the border radius for rounded-rect shape\r\n *\r\n * @param radius - Border radius in pixels\r\n */\r\n setBorderRadius(radius: number): void {\r\n this.frameBorderRadius = radius;\r\n if (this.frameShape === 'rounded-rect') {\r\n this._updateClipPath();\r\n this.set('dirty', true);\r\n }\r\n }\r\n\r\n /**\r\n * Override add to maintain fixed dimensions\r\n */\r\n add(...objects: FabricObject[]): number {\r\n const size = super.add(...objects);\r\n this._restoreFixedDimensions();\r\n return size;\r\n }\r\n\r\n /**\r\n * Override remove to maintain fixed dimensions\r\n */\r\n remove(...objects: FabricObject[]): FabricObject[] {\r\n const removed = super.remove(...objects);\r\n this._restoreFixedDimensions();\r\n return removed;\r\n }\r\n\r\n /**\r\n * Override insertAt to maintain fixed dimensions\r\n */\r\n insertAt(index: number, ...objects: FabricObject[]): number {\r\n const size = super.insertAt(index, ...objects);\r\n this._restoreFixedDimensions();\r\n return size;\r\n }\r\n\r\n /**\r\n * Serializes the frame to a plain object\r\n */\r\n // @ts-ignore - Frame extends Group's toObject with additional properties\r\n toObject(propertiesToInclude: string[] = []): any {\r\n return {\r\n ...(super.toObject as any)(propertiesToInclude),\r\n frameWidth: this.frameWidth,\r\n frameHeight: this.frameHeight,\r\n frameShape: this.frameShape,\r\n frameBorderRadius: this.frameBorderRadius,\r\n frameCustomPath: this.frameCustomPath,\r\n frameMeta: { ...this.frameMeta },\r\n isEditMode: false, // Always serialize as not in edit mode\r\n placeholderText: this.placeholderText,\r\n placeholderColor: this.placeholderColor,\r\n };\r\n }\r\n\r\n /**\r\n * Creates a Frame instance from a serialized object\r\n */\r\n static fromObject<T extends TOptions<SerializedFrameProps>>(\r\n object: T,\r\n abortable?: Abortable\r\n ): Promise<Frame> {\r\n const {\r\n objects = [],\r\n layoutManager,\r\n frameWidth,\r\n frameHeight,\r\n frameShape,\r\n frameBorderRadius,\r\n frameCustomPath,\r\n frameMeta,\r\n placeholderText,\r\n placeholderColor,\r\n ...groupOptions\r\n } = object;\r\n\r\n return Promise.all([\r\n enlivenObjects<FabricObject>(objects, abortable),\r\n enlivenObjectEnlivables(groupOptions, abortable),\r\n ]).then(([enlivenedObjects, hydratedOptions]) => {\r\n // Create frame with restored options\r\n const frame = new Frame([], {\r\n ...groupOptions,\r\n ...hydratedOptions,\r\n frameWidth,\r\n frameHeight,\r\n frameShape,\r\n frameBorderRadius,\r\n frameCustomPath,\r\n frameMeta: frameMeta ? {\r\n contentScale: frameMeta.contentScale ?? 1,\r\n contentOffsetX: frameMeta.contentOffsetX ?? 0,\r\n contentOffsetY: frameMeta.contentOffsetY ?? 0,\r\n ...frameMeta,\r\n } : undefined,\r\n placeholderText,\r\n placeholderColor,\r\n });\r\n\r\n // If there was an image, restore it\r\n if (frameMeta?.imageSrc) {\r\n // Async restoration of image - caller should wait if needed\r\n frame.setImage(frameMeta.imageSrc).then(() => {\r\n // Restore content position from metadata\r\n if (frame._contentImage) {\r\n frame._contentImage.set({\r\n left: frameMeta.contentOffsetX ?? 0,\r\n top: frameMeta.contentOffsetY ?? 0,\r\n scaleX: frameMeta.contentScale ?? 1,\r\n scaleY: frameMeta.contentScale ?? 1,\r\n });\r\n }\r\n frame.set('dirty', true);\r\n }).catch((err) => {\r\n console.warn('Failed to restore frame image:', err);\r\n });\r\n }\r\n\r\n return frame;\r\n });\r\n }\r\n\r\n /**\r\n * Creates a Frame with a specific aspect ratio preset\r\n *\r\n * @param aspect - Aspect ratio preset (e.g., '16:9', '1:1', '4:5', '9:16')\r\n * @param size - Base size in pixels\r\n * @param options - Additional frame options\r\n */\r\n static createWithAspect(\r\n aspect: string,\r\n size: number = 200,\r\n options: Partial<FrameProps> = {}\r\n ): Frame {\r\n let width: number;\r\n let height: number;\r\n\r\n switch (aspect) {\r\n case '16:9':\r\n width = size;\r\n height = size * (9 / 16);\r\n break;\r\n case '9:16':\r\n width = size * (9 / 16);\r\n height = size;\r\n break;\r\n case '4:5':\r\n width = size * (4 / 5);\r\n height = size;\r\n break;\r\n case '4:3':\r\n width = size;\r\n height = size * (3 / 4);\r\n break;\r\n case '3:4':\r\n width = size * (3 / 4);\r\n height = size;\r\n break;\r\n case '1:1':\r\n default:\r\n width = size;\r\n height = size;\r\n break;\r\n }\r\n\r\n const defaultMeta = frameDefaultValues.frameMeta || {};\r\n\r\n return new Frame([], {\r\n ...options,\r\n frameWidth: width,\r\n frameHeight: height,\r\n frameMeta: {\r\n contentScale: defaultMeta.contentScale ?? 1,\r\n contentOffsetX: defaultMeta.contentOffsetX ?? 0,\r\n contentOffsetY: defaultMeta.contentOffsetY ?? 0,\r\n aspect,\r\n ...options.frameMeta,\r\n },\r\n });\r\n }\r\n}\r\n\r\n// Register the Frame class with the class registry\r\nclassRegistry.setClass(Frame);\r\nclassRegistry.setClass(Frame, 'frame');\r\n"],"names":["frameDefaultValues","frameWidth","frameHeight","frameShape","frameBorderRadius","isEditMode","placeholderText","placeholderColor","frameMeta","contentScale","contentOffsetX","contentOffsetY","Frame","Group","getDefaults","ownDefaults","constructor","_defaultMeta$contentS","_defaultMeta$contentO","_defaultMeta$contentO2","objects","arguments","length","undefined","options","frameLayoutManager","LayoutManager","FrameLayout","layoutManager","_defineProperty","Object","assign","setOptions","defaultMeta","set","width","height","_updateClipPath","_createPlaceholder","_setupResizeControls","changeFrameWidth","eventData","transform","x","y","target","localPoint","getLocalPoint","originX","originY","oldWidth","newWidth","Math","max","abs","_adjustContentAfterResize","changeFrameHeight","oldHeight","newHeight","changeFrameSize","resizeFromCorner","wrapWithFireEvent","RESIZING","wrapWithFixedAnchor","resizeX","resizeY","controls","console","warn","cornerControls","forEach","corner","existing","Control","cursorStyleHandler","actionHandler","actionName","horizontalControls","render","sizeX","sizeY","verticalControls","_placeholder","_contentImage","_ref","_this$frameMeta$origi","_ref2","_this$frameMeta$origi2","_img$scaleX","_img$left","_img$top","img","originalWidth","originalHeight","currentScale","scaleX","imgCenterX","left","imgCenterY","top","minScaleForCover","_calculateCoverScale","scaleRatio","scaleY","scaledImgHalfW","scaledImgHalfH","frameHalfW","frameHalfH","maxOffsetX","maxOffsetY","needsConstraintX","needsConstraintY","min","setCoords","clipPath","radius","Circle","Rect","rx","ry","frameCustomPath","Path","pathBounds","getBoundingRect","remove","placeholder","fill","selectable","evented","add","_restoreFixedDimensions","_removePlaceholder","setImage","src","_image$width","_image$height","crossOrigin","signal","image","FabricImage","fromURL","scale","_clearContent","imageSrc","setImageObject","_image$width2","_image$height2","getSrc","imageWidth","imageHeight","getObjects","obj","clearContent","hasContent","getContentImage","enterEditMode","_ref3","_this$frameMeta$origi3","_ref4","_this$frameMeta$origi4","_editModeObjectCaching","objectCaching","subTargetCheck","interactive","minScale","hasControls","hasBorders","minScaleLimit","lockScalingFlip","_editModeClipPath","_setupEditModeConstraints","canvas","setActiveObject","renderAll","fire","frame","_boundConstrainMove","e","_ref5","_frame$frameMeta$orig","_ref6","_frame$frameMeta$orig2","_img$scaleX2","_img$left2","_img$top2","_boundConstrainScale","_ref7","_frame$frameMeta$orig3","_ref8","_frame$frameMeta$orig4","_img$scaleX3","_img$scaleY","_frame$_boundConstrai","call","on","_removeEditModeConstraints","off","ctx","_renderEditModeOverlay","save","m","calcTransformMatrix","beginPath","padding","rect","moveTo","arc","PI","w","h","r","arcTo","closePath","lineTo","fillStyle","strokeStyle","lineWidth","stroke","setLineDash","restore","exitEditMode","_this$_contentImage$l","_this$_contentImage$t","_this$_contentImage$s","_this$_contentImage$s2","_ref9","_this$frameMeta$origi5","_ref0","_this$frameMeta$origi6","contentLeft","contentTop","contentScaleX","contentScaleY","constrainedLeft","constrainedTop","toggleEditMode","resizeFrame","maintainAspect","currentAspect","newAspect","setFrameShape","shape","customPath","setBorderRadius","size","removed","insertAt","index","_len","Array","_key","toObject","propertiesToInclude","fromObject","object","abortable","groupOptions","Promise","all","enlivenObjects","enlivenObjectEnlivables","then","_ref1","_frameMeta$contentSca","_frameMeta$contentOff","_frameMeta$contentOff2","enlivenedObjects","hydratedOptions","_frameMeta$contentOff3","_frameMeta$contentOff4","_frameMeta$contentSca2","_frameMeta$contentSca3","catch","err","createWithAspect","aspect","_defaultMeta$contentS2","_defaultMeta$contentO3","_defaultMeta$contentO4","classRegistry","setClass"],"mappings":"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"}
1
+ {"version":3,"file":"Frame.mjs","sources":["../../../src/shapes/Frame.ts"],"sourcesContent":["import type { TClassProperties, TOptions, Abortable, TCrossOrigin } from '../typedefs';\r\nimport type { FabricObject } from './Object/FabricObject';\r\nimport type { GroupProps, SerializedGroupProps } from './Group';\r\nimport type { TPointerEvent, Transform, TransformActionHandler } from '../EventTypeDefs';\r\nimport { Group } from './Group';\r\nimport { Rect } from './Rect';\r\nimport { Circle } from './Circle';\r\nimport { Path } from './Path';\r\nimport { FabricImage } from './Image';\r\nimport { classRegistry } from '../ClassRegistry';\r\nimport { LayoutManager } from '../LayoutManager/LayoutManager';\r\nimport { FrameLayout } from '../LayoutManager/LayoutStrategies/FrameLayout';\r\nimport { enlivenObjects, enlivenObjectEnlivables } from '../util/misc/objectEnlive';\r\nimport { Control } from '../controls/Control';\r\nimport { getLocalPoint } from '../controls/util';\r\nimport { wrapWithFireEvent } from '../controls/wrapWithFireEvent';\r\nimport { wrapWithFixedAnchor } from '../controls/wrapWithFixedAnchor';\r\nimport { RESIZING } from '../constants';\r\n\r\n/**\r\n * Frame shape types supported out of the box\r\n */\r\nexport type FrameShapeType = 'rect' | 'circle' | 'rounded-rect' | 'custom';\r\n\r\n/**\r\n * Frame metadata for persistence and state management\r\n */\r\nexport interface FrameMeta {\r\n /** Aspect ratio label (e.g., '16:9', '1:1', '4:5') */\r\n aspect?: string;\r\n /** Content scale factor for cover scaling */\r\n contentScale?: number;\r\n /** X offset of content within frame */\r\n contentOffsetX?: number;\r\n /** Y offset of content within frame */\r\n contentOffsetY?: number;\r\n /** Source URL of the current image */\r\n imageSrc?: string;\r\n /** Original image dimensions */\r\n originalWidth?: number;\r\n /** Original image dimensions */\r\n originalHeight?: number;\r\n}\r\n\r\n/**\r\n * Frame-specific properties\r\n */\r\nexport interface FrameOwnProps {\r\n /** Fixed width of the frame */\r\n frameWidth: number;\r\n /** Fixed height of the frame */\r\n frameHeight: number;\r\n /** Shape type for the clip mask */\r\n frameShape: FrameShapeType;\r\n /** Border radius for rounded-rect shape */\r\n frameBorderRadius: number;\r\n /** Custom SVG path for custom shape */\r\n frameCustomPath?: string;\r\n /** Frame metadata for content positioning */\r\n frameMeta: FrameMeta;\r\n /** Whether the frame is in edit mode (content can be repositioned) */\r\n isEditMode: boolean;\r\n /** Placeholder text shown when frame is empty */\r\n placeholderText: string;\r\n /** Placeholder background color */\r\n placeholderColor: string;\r\n}\r\n\r\nexport interface SerializedFrameProps extends SerializedGroupProps, FrameOwnProps {}\r\n\r\nexport interface FrameProps extends GroupProps, FrameOwnProps {}\r\n\r\nexport const frameDefaultValues: Partial<TClassProperties<Frame>> = {\r\n frameWidth: 200,\r\n frameHeight: 200,\r\n frameShape: 'rect',\r\n frameBorderRadius: 0,\r\n isEditMode: false,\r\n placeholderText: 'Drop image here',\r\n placeholderColor: '#d0d0d0',\r\n frameMeta: {\r\n contentScale: 1,\r\n contentOffsetX: 0,\r\n contentOffsetY: 0,\r\n },\r\n};\r\n\r\n/**\r\n * Frame class - A Canva-like frame container for images\r\n *\r\n * Features:\r\n * - Fixed dimensions that don't change when content is added/removed\r\n * - Multiple shape types (rect, circle, rounded-rect, custom SVG path)\r\n * - Cover scaling: images fill the frame completely, overflow is clipped\r\n * - Double-click edit mode: reposition/zoom content within frame\r\n * - Drag & drop support for replacing images\r\n * - Full serialization/deserialization support\r\n *\r\n * @example\r\n * ```ts\r\n * // Create a rectangular frame\r\n * const frame = new Frame([], {\r\n * frameWidth: 300,\r\n * frameHeight: 200,\r\n * frameShape: 'rect',\r\n * left: 100,\r\n * top: 100,\r\n * });\r\n *\r\n * // Add image with cover scaling\r\n * await frame.setImage('https://example.com/image.jpg');\r\n *\r\n * canvas.add(frame);\r\n * ```\r\n */\r\nexport class Frame extends Group {\r\n static type = 'Frame';\r\n\r\n declare frameWidth: number;\r\n declare frameHeight: number;\r\n declare frameShape: FrameShapeType;\r\n declare frameBorderRadius: number;\r\n declare frameCustomPath?: string;\r\n declare frameMeta: FrameMeta;\r\n declare isEditMode: boolean;\r\n declare placeholderText: string;\r\n declare placeholderColor: string;\r\n\r\n /**\r\n * Reference to the content image\r\n * @private\r\n */\r\n private _contentImage: FabricImage | null = null;\r\n\r\n /**\r\n * Reference to the placeholder object\r\n * @private\r\n */\r\n private _placeholder: FabricObject | null = null;\r\n\r\n /**\r\n * Stored objectCaching value before edit mode\r\n * @private\r\n */\r\n private _editModeObjectCaching?: boolean;\r\n\r\n static ownDefaults = frameDefaultValues;\r\n\r\n static getDefaults(): Record<string, any> {\r\n return {\r\n ...super.getDefaults(),\r\n ...Frame.ownDefaults,\r\n };\r\n }\r\n\r\n /**\r\n * Constructor\r\n * @param objects - Initial objects (typically empty for frames)\r\n * @param options - Frame configuration options\r\n */\r\n constructor(\r\n objects: FabricObject[] = [],\r\n options: Partial<FrameProps> = {}\r\n ) {\r\n // Set up the frame layout manager before calling super\r\n const frameLayoutManager = new LayoutManager(new FrameLayout());\r\n\r\n super(objects, {\r\n ...options,\r\n layoutManager: frameLayoutManager,\r\n });\r\n\r\n // Apply defaults\r\n Object.assign(this, Frame.ownDefaults);\r\n\r\n // Apply user options\r\n this.setOptions(options);\r\n\r\n // Ensure frameMeta is properly initialized with defaults\r\n const defaultMeta = frameDefaultValues.frameMeta || {};\r\n this.frameMeta = {\r\n contentScale: defaultMeta.contentScale ?? 1,\r\n contentOffsetX: defaultMeta.contentOffsetX ?? 0,\r\n contentOffsetY: defaultMeta.contentOffsetY ?? 0,\r\n ...options.frameMeta,\r\n };\r\n\r\n // Set fixed dimensions\r\n this.set({\r\n width: this.frameWidth,\r\n height: this.frameHeight,\r\n });\r\n\r\n // Create clip path based on shape\r\n this._updateClipPath();\r\n\r\n // Create placeholder if no content\r\n if (objects.length === 0) {\r\n this._createPlaceholder();\r\n }\r\n\r\n // Set up custom resize controls (instead of scale controls)\r\n this._setupResizeControls();\r\n }\r\n\r\n /**\r\n * Sets up custom controls that resize instead of scale\r\n * This is the key to Canva-like behavior - corners resize the frame dimensions\r\n * instead of scaling the entire group (which would stretch the image)\r\n * @private\r\n */\r\n private _setupResizeControls(): void {\r\n // Helper to change width (like changeObjectWidth but for frames)\r\n // Note: wrapWithFixedAnchor sets origin to opposite corner, so localPoint.x IS the new width\r\n const changeFrameWidth: TransformActionHandler = (\r\n eventData,\r\n transform,\r\n x,\r\n y\r\n ): boolean => {\r\n const target = transform.target as Frame;\r\n const localPoint = getLocalPoint(\r\n transform,\r\n transform.originX,\r\n transform.originY,\r\n x,\r\n y\r\n );\r\n\r\n const oldWidth = target.frameWidth;\r\n // localPoint.x is distance from anchor (opposite side) to mouse = new width\r\n const newWidth = Math.max(20, Math.abs(localPoint.x));\r\n\r\n if (Math.abs(oldWidth - newWidth) < 1) return false;\r\n\r\n target.frameWidth = newWidth;\r\n target.width = newWidth;\r\n target._updateClipPath();\r\n target._adjustContentAfterResize();\r\n\r\n return true;\r\n };\r\n\r\n // Helper to change height\r\n const changeFrameHeight: TransformActionHandler = (\r\n eventData,\r\n transform,\r\n x,\r\n y\r\n ): boolean => {\r\n const target = transform.target as Frame;\r\n const localPoint = getLocalPoint(\r\n transform,\r\n transform.originX,\r\n transform.originY,\r\n x,\r\n y\r\n );\r\n\r\n const oldHeight = target.frameHeight;\r\n const newHeight = Math.max(20, Math.abs(localPoint.y));\r\n\r\n if (Math.abs(oldHeight - newHeight) < 1) return false;\r\n\r\n target.frameHeight = newHeight;\r\n target.height = newHeight;\r\n target._updateClipPath();\r\n target._adjustContentAfterResize();\r\n\r\n return true;\r\n };\r\n\r\n // Helper to change both width and height (corners)\r\n const changeFrameSize: TransformActionHandler = (\r\n eventData,\r\n transform,\r\n x,\r\n y\r\n ): boolean => {\r\n const target = transform.target as Frame;\r\n const localPoint = getLocalPoint(\r\n transform,\r\n transform.originX,\r\n transform.originY,\r\n x,\r\n y\r\n );\r\n\r\n const oldWidth = target.frameWidth;\r\n const oldHeight = target.frameHeight;\r\n const newWidth = Math.max(20, Math.abs(localPoint.x));\r\n const newHeight = Math.max(20, Math.abs(localPoint.y));\r\n\r\n if (Math.abs(oldWidth - newWidth) < 1 && Math.abs(oldHeight - newHeight) < 1) return false;\r\n\r\n target.frameWidth = newWidth;\r\n target.frameHeight = newHeight;\r\n target.width = newWidth;\r\n target.height = newHeight;\r\n target._updateClipPath();\r\n target._adjustContentAfterResize();\r\n\r\n return true;\r\n };\r\n\r\n // Create wrapped handlers\r\n const resizeFromCorner = wrapWithFireEvent(\r\n RESIZING,\r\n wrapWithFixedAnchor(changeFrameSize)\r\n );\r\n\r\n const resizeX = wrapWithFireEvent(\r\n RESIZING,\r\n wrapWithFixedAnchor(changeFrameWidth)\r\n );\r\n\r\n const resizeY = wrapWithFireEvent(\r\n RESIZING,\r\n wrapWithFixedAnchor(changeFrameHeight)\r\n );\r\n\r\n // Guard: ensure controls exist\r\n if (!this.controls) {\r\n console.warn('Frame: controls not initialized yet');\r\n return;\r\n }\r\n\r\n // Override corner controls - use resize instead of scale\r\n const cornerControls = ['tl', 'tr', 'bl', 'br'] as const;\r\n cornerControls.forEach((corner) => {\r\n const existing = this.controls[corner];\r\n if (existing) {\r\n this.controls[corner] = new Control({\r\n x: existing.x,\r\n y: existing.y,\r\n cursorStyleHandler: existing.cursorStyleHandler,\r\n actionHandler: resizeFromCorner,\r\n actionName: 'resizing',\r\n });\r\n }\r\n });\r\n\r\n // Override side controls for horizontal resize\r\n const horizontalControls = ['ml', 'mr'] as const;\r\n horizontalControls.forEach((corner) => {\r\n const existing = this.controls[corner];\r\n if (existing) {\r\n this.controls[corner] = new Control({\r\n x: existing.x,\r\n y: existing.y,\r\n cursorStyleHandler: existing.cursorStyleHandler,\r\n actionHandler: resizeX,\r\n actionName: 'resizing',\r\n render: existing.render, // Keep the global pill renderer\r\n sizeX: existing.sizeX,\r\n sizeY: existing.sizeY,\r\n });\r\n }\r\n });\r\n\r\n // Override side controls for vertical resize\r\n const verticalControls = ['mt', 'mb'] as const;\r\n verticalControls.forEach((corner) => {\r\n const existing = this.controls[corner];\r\n if (existing) {\r\n this.controls[corner] = new Control({\r\n x: existing.x,\r\n y: existing.y,\r\n cursorStyleHandler: existing.cursorStyleHandler,\r\n actionHandler: resizeY,\r\n actionName: 'resizing',\r\n render: existing.render, // Keep the global pill renderer\r\n sizeX: existing.sizeX,\r\n sizeY: existing.sizeY,\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Adjusts content after a resize operation (called from set override)\r\n * @private\r\n */\r\n private _adjustContentAfterResize(): void {\r\n // Update placeholder if present (simple rect)\r\n if (this._placeholder) {\r\n this._placeholder.set({\r\n width: this.frameWidth,\r\n height: this.frameHeight,\r\n });\r\n }\r\n\r\n // Adjust content image (Canva-like behavior)\r\n if (this._contentImage) {\r\n const img = this._contentImage;\r\n const originalWidth = this.frameMeta.originalWidth ?? img.width ?? 100;\r\n const originalHeight = this.frameMeta.originalHeight ?? img.height ?? 100;\r\n\r\n // Current image scale and position - preserve user's position\r\n let currentScale = img.scaleX ?? 1;\r\n let imgCenterX = img.left ?? 0;\r\n let imgCenterY = img.top ?? 0;\r\n\r\n // Check if current scale still covers the frame\r\n const minScaleForCover = this._calculateCoverScale(originalWidth, originalHeight);\r\n\r\n if (currentScale < minScaleForCover) {\r\n // Image is too small to cover frame - scale up proportionally\r\n // But try to keep the same visual center point\r\n const scaleRatio = minScaleForCover / currentScale;\r\n\r\n // Scale position proportionally to maintain visual anchor\r\n imgCenterX = imgCenterX * scaleRatio;\r\n imgCenterY = imgCenterY * scaleRatio;\r\n currentScale = minScaleForCover;\r\n\r\n img.set({\r\n scaleX: currentScale,\r\n scaleY: currentScale,\r\n });\r\n\r\n this.frameMeta = {\r\n ...this.frameMeta,\r\n contentScale: currentScale,\r\n };\r\n }\r\n\r\n // Now constrain position only if needed to prevent empty space\r\n const scaledImgHalfW = (originalWidth * currentScale) / 2;\r\n const scaledImgHalfH = (originalHeight * currentScale) / 2;\r\n const frameHalfW = this.frameWidth / 2;\r\n const frameHalfH = this.frameHeight / 2;\r\n\r\n // Calculate how much the image can move while still covering the frame\r\n const maxOffsetX = Math.max(0, scaledImgHalfW - frameHalfW);\r\n const maxOffsetY = Math.max(0, scaledImgHalfH - frameHalfH);\r\n\r\n // Only constrain if position would show empty space\r\n const needsConstraintX = Math.abs(imgCenterX) > maxOffsetX;\r\n const needsConstraintY = Math.abs(imgCenterY) > maxOffsetY;\r\n\r\n if (needsConstraintX) {\r\n imgCenterX = Math.max(-maxOffsetX, Math.min(maxOffsetX, imgCenterX));\r\n }\r\n if (needsConstraintY) {\r\n imgCenterY = Math.max(-maxOffsetY, Math.min(maxOffsetY, imgCenterY));\r\n }\r\n\r\n if (needsConstraintX || needsConstraintY) {\r\n img.set({\r\n left: imgCenterX,\r\n top: imgCenterY,\r\n });\r\n\r\n this.frameMeta = {\r\n ...this.frameMeta,\r\n contentOffsetX: imgCenterX,\r\n contentOffsetY: imgCenterY,\r\n };\r\n }\r\n\r\n img.setCoords();\r\n }\r\n\r\n this.setCoords();\r\n }\r\n\r\n /**\r\n * Updates the clip path based on the current frame shape\r\n * @private\r\n */\r\n private _updateClipPath(): void {\r\n let clipPath: FabricObject;\r\n\r\n switch (this.frameShape) {\r\n case 'circle': {\r\n const radius = Math.min(this.frameWidth, this.frameHeight) / 2;\r\n clipPath = new Circle({\r\n radius,\r\n originX: 'center',\r\n originY: 'center',\r\n left: 0,\r\n top: 0,\r\n });\r\n break;\r\n }\r\n\r\n case 'rounded-rect': {\r\n clipPath = new Rect({\r\n width: this.frameWidth,\r\n height: this.frameHeight,\r\n rx: this.frameBorderRadius,\r\n ry: this.frameBorderRadius,\r\n originX: 'center',\r\n originY: 'center',\r\n left: 0,\r\n top: 0,\r\n });\r\n break;\r\n }\r\n\r\n case 'custom': {\r\n if (this.frameCustomPath) {\r\n clipPath = new Path(this.frameCustomPath, {\r\n originX: 'center',\r\n originY: 'center',\r\n left: 0,\r\n top: 0,\r\n });\r\n // Scale custom path to fit frame\r\n const pathBounds = clipPath.getBoundingRect();\r\n const scaleX = this.frameWidth / pathBounds.width;\r\n const scaleY = this.frameHeight / pathBounds.height;\r\n clipPath.set({ scaleX, scaleY });\r\n } else {\r\n // Fallback to rect if no custom path\r\n clipPath = new Rect({\r\n width: this.frameWidth,\r\n height: this.frameHeight,\r\n originX: 'center',\r\n originY: 'center',\r\n left: 0,\r\n top: 0,\r\n });\r\n }\r\n break;\r\n }\r\n\r\n case 'rect':\r\n default: {\r\n clipPath = new Rect({\r\n width: this.frameWidth,\r\n height: this.frameHeight,\r\n originX: 'center',\r\n originY: 'center',\r\n left: 0,\r\n top: 0,\r\n });\r\n break;\r\n }\r\n }\r\n\r\n this.clipPath = clipPath;\r\n this.set('dirty', true);\r\n }\r\n\r\n /**\r\n * Creates a placeholder element for empty frames\r\n * Shows a colored rectangle - users can customize via placeholderColor\r\n * @private\r\n */\r\n private _createPlaceholder(): void {\r\n // Remove existing placeholder if any\r\n if (this._placeholder) {\r\n super.remove(this._placeholder);\r\n this._placeholder = null;\r\n }\r\n\r\n // Create placeholder background\r\n const placeholder = new Rect({\r\n width: this.frameWidth,\r\n height: this.frameHeight,\r\n fill: this.placeholderColor,\r\n originX: 'center',\r\n originY: 'center',\r\n left: 0,\r\n top: 0,\r\n selectable: false,\r\n evented: false,\r\n });\r\n\r\n this._placeholder = placeholder;\r\n super.add(placeholder);\r\n\r\n // Ensure dimensions remain fixed\r\n this._restoreFixedDimensions();\r\n }\r\n\r\n /**\r\n * Removes the placeholder element\r\n * @private\r\n */\r\n private _removePlaceholder(): void {\r\n if (this._placeholder) {\r\n super.remove(this._placeholder);\r\n this._placeholder = null;\r\n }\r\n }\r\n\r\n /**\r\n * Restores the fixed frame dimensions\r\n * @private\r\n */\r\n private _restoreFixedDimensions(): void {\r\n this.set({\r\n width: this.frameWidth,\r\n height: this.frameHeight,\r\n });\r\n }\r\n\r\n /**\r\n * Sets an image in the frame with cover scaling\r\n *\r\n * @param src - Image source URL\r\n * @param options - Optional loading options\r\n * @returns Promise that resolves when the image is loaded and set\r\n *\r\n * @example\r\n * ```ts\r\n * await frame.setImage('https://example.com/photo.jpg');\r\n * canvas.renderAll();\r\n * ```\r\n */\r\n async setImage(\r\n src: string,\r\n options: { crossOrigin?: TCrossOrigin; signal?: AbortSignal } = {}\r\n ): Promise<void> {\r\n const { crossOrigin = 'anonymous', signal } = options;\r\n\r\n // Load the image\r\n const image = await FabricImage.fromURL(src, { crossOrigin, signal });\r\n\r\n // Get original dimensions\r\n const originalWidth = image.width ?? 100;\r\n const originalHeight = image.height ?? 100;\r\n\r\n // Calculate cover scale\r\n const scale = this._calculateCoverScale(originalWidth, originalHeight);\r\n\r\n // Configure image for frame\r\n image.set({\r\n scaleX: scale,\r\n scaleY: scale,\r\n originX: 'center',\r\n originY: 'center',\r\n left: 0,\r\n top: 0,\r\n selectable: false,\r\n evented: false,\r\n });\r\n\r\n // Remove existing content\r\n this._clearContent();\r\n\r\n // Add new image\r\n this._contentImage = image;\r\n super.add(image);\r\n\r\n // Force re-center the image after adding (layout might have moved it)\r\n this._contentImage.set({\r\n left: 0,\r\n top: 0,\r\n });\r\n\r\n // Update metadata\r\n this.frameMeta = {\r\n ...this.frameMeta,\r\n contentScale: scale,\r\n contentOffsetX: 0,\r\n contentOffsetY: 0,\r\n imageSrc: src,\r\n originalWidth,\r\n originalHeight,\r\n };\r\n\r\n // Restore dimensions (in case Group recalculated them)\r\n this._restoreFixedDimensions();\r\n\r\n // Force recalculation of coordinates\r\n this.setCoords();\r\n this._contentImage.setCoords();\r\n\r\n this.set('dirty', true);\r\n }\r\n\r\n /**\r\n * Sets an image from an existing FabricImage object\r\n *\r\n * @param image - FabricImage instance\r\n */\r\n setImageObject(image: FabricImage): void {\r\n const originalWidth = image.width ?? 100;\r\n const originalHeight = image.height ?? 100;\r\n\r\n // Calculate cover scale\r\n const scale = this._calculateCoverScale(originalWidth, originalHeight);\r\n\r\n // Configure image for frame\r\n image.set({\r\n scaleX: scale,\r\n scaleY: scale,\r\n originX: 'center',\r\n originY: 'center',\r\n left: 0,\r\n top: 0,\r\n selectable: false,\r\n evented: false,\r\n });\r\n\r\n // Remove existing content\r\n this._clearContent();\r\n\r\n // Add new image\r\n this._contentImage = image;\r\n super.add(image);\r\n\r\n // Update metadata\r\n this.frameMeta = {\r\n ...this.frameMeta,\r\n contentScale: scale,\r\n contentOffsetX: 0,\r\n contentOffsetY: 0,\r\n imageSrc: image.getSrc(),\r\n originalWidth,\r\n originalHeight,\r\n };\r\n\r\n // Restore dimensions\r\n this._restoreFixedDimensions();\r\n\r\n this.set('dirty', true);\r\n }\r\n\r\n /**\r\n * Calculates the cover scale factor for an image\r\n * Cover scaling ensures the image fills the frame completely\r\n *\r\n * @param imageWidth - Original image width\r\n * @param imageHeight - Original image height\r\n * @returns Scale factor to apply\r\n * @private\r\n */\r\n private _calculateCoverScale(imageWidth: number, imageHeight: number): number {\r\n const scaleX = this.frameWidth / imageWidth;\r\n const scaleY = this.frameHeight / imageHeight;\r\n return Math.max(scaleX, scaleY);\r\n }\r\n\r\n /**\r\n * Clears all content from the frame\r\n * @private\r\n */\r\n private _clearContent(): void {\r\n // Remove placeholder\r\n this._removePlaceholder();\r\n\r\n // Remove content image\r\n if (this._contentImage) {\r\n super.remove(this._contentImage);\r\n this._contentImage = null;\r\n }\r\n\r\n // Clear any other objects\r\n const objects = this.getObjects();\r\n objects.forEach((obj) => super.remove(obj));\r\n }\r\n\r\n /**\r\n * Clears the frame content and shows placeholder\r\n */\r\n clearContent(): void {\r\n this._clearContent();\r\n this._createPlaceholder();\r\n\r\n // Reset metadata\r\n this.frameMeta = {\r\n contentScale: 1,\r\n contentOffsetX: 0,\r\n contentOffsetY: 0,\r\n };\r\n\r\n this.set('dirty', true);\r\n }\r\n\r\n /**\r\n * Checks if the frame has image content\r\n */\r\n hasContent(): boolean {\r\n return this._contentImage !== null;\r\n }\r\n\r\n /**\r\n * Gets the current content image\r\n */\r\n getContentImage(): FabricImage | null {\r\n return this._contentImage;\r\n }\r\n\r\n /**\r\n * Enters edit mode for repositioning content within the frame\r\n * In edit mode, the content image can be dragged and scaled\r\n */\r\n enterEditMode(): void {\r\n if (!this._contentImage || this.isEditMode) {\r\n return;\r\n }\r\n\r\n this.isEditMode = true;\r\n\r\n // Disable caching during edit mode - otherwise the cache canvas\r\n // clips content to the frame bounds, preventing us from seeing\r\n // the full image outside the frame\r\n this._editModeObjectCaching = this.objectCaching;\r\n this.objectCaching = false;\r\n\r\n // Force clear any existing cache\r\n this.dirty = true;\r\n if ((this as any)._cacheCanvas) {\r\n (this as any)._cacheCanvas = null;\r\n (this as any)._cacheContext = null;\r\n }\r\n\r\n // Enable sub-target interaction so clicks go through to content\r\n this.subTargetCheck = true;\r\n this.interactive = true;\r\n\r\n // Calculate minimum scale to cover frame\r\n const originalWidth = this.frameMeta.originalWidth ?? this._contentImage.width ?? 100;\r\n const originalHeight = this.frameMeta.originalHeight ?? this._contentImage.height ?? 100;\r\n const minScale = this._calculateCoverScale(originalWidth, originalHeight);\r\n\r\n // Make content image interactive with scale constraint\r\n // Also disable its caching to ensure it renders fully\r\n this._contentImage.set({\r\n selectable: true,\r\n evented: true,\r\n hasControls: true,\r\n hasBorders: true,\r\n minScaleLimit: minScale,\r\n lockScalingFlip: true,\r\n objectCaching: false,\r\n });\r\n this._contentImage.dirty = true;\r\n\r\n // Keep clipPath reference for the overlay effect rendering\r\n // NOTE: We do NOT set this.clipPath = undefined because that triggers\r\n // coordinate recalculations in Fabric that behave differently with\r\n // viewport transforms (autoZoom), causing visual position jumps.\r\n // Instead, we override drawObject() to skip clipPath rendering in edit mode.\r\n if (this.clipPath) {\r\n this._editModeClipPath = this.clipPath as FabricObject;\r\n }\r\n\r\n // Add constraint handlers for moving/scaling\r\n this._setupEditModeConstraints();\r\n\r\n this.set('dirty', true);\r\n\r\n // Just render - don't call setActiveObject() on the content image\r\n // because it causes position miscalculation with viewport transforms.\r\n // The content image is still interactive via subTargetCheck = true\r\n if (this.canvas) {\r\n this.canvas.renderAll();\r\n }\r\n\r\n // Fire custom event\r\n (this as any).fire('frame:editmode:enter', { target: this });\r\n }\r\n\r\n /**\r\n * Bound constraint handler references for cleanup\r\n * @private\r\n */\r\n private _boundConstrainMove?: (e: any) => void;\r\n private _boundConstrainScale?: (e: any) => void;\r\n\r\n /**\r\n * Sets up constraints for edit mode - prevents gaps\r\n * @private\r\n */\r\n private _setupEditModeConstraints(): void {\r\n if (!this._contentImage || !this.canvas) return;\r\n\r\n const frame = this;\r\n const img = this._contentImage;\r\n\r\n // Constrain movement to prevent gaps\r\n this._boundConstrainMove = (e: any) => {\r\n if (e.target !== img || !frame.isEditMode) return;\r\n\r\n const originalWidth = frame.frameMeta.originalWidth ?? img.width ?? 100;\r\n const originalHeight = frame.frameMeta.originalHeight ?? img.height ?? 100;\r\n const currentScale = img.scaleX ?? 1;\r\n\r\n const scaledImgHalfW = (originalWidth * currentScale) / 2;\r\n const scaledImgHalfH = (originalHeight * currentScale) / 2;\r\n const frameHalfW = frame.frameWidth / 2;\r\n const frameHalfH = frame.frameHeight / 2;\r\n\r\n const maxOffsetX = Math.max(0, scaledImgHalfW - frameHalfW);\r\n const maxOffsetY = Math.max(0, scaledImgHalfH - frameHalfH);\r\n\r\n let left = img.left ?? 0;\r\n let top = img.top ?? 0;\r\n\r\n // Constrain position\r\n left = Math.max(-maxOffsetX, Math.min(maxOffsetX, left));\r\n top = Math.max(-maxOffsetY, Math.min(maxOffsetY, top));\r\n\r\n img.set({ left, top });\r\n };\r\n\r\n // Constrain scaling to prevent gaps\r\n this._boundConstrainScale = (e: any) => {\r\n if (e.target !== img || !frame.isEditMode) return;\r\n\r\n const originalWidth = frame.frameMeta.originalWidth ?? img.width ?? 100;\r\n const originalHeight = frame.frameMeta.originalHeight ?? img.height ?? 100;\r\n const minScale = frame._calculateCoverScale(originalWidth, originalHeight);\r\n\r\n let scaleX = img.scaleX ?? 1;\r\n let scaleY = img.scaleY ?? 1;\r\n\r\n // Ensure uniform scaling and minimum scale\r\n const scale = Math.max(minScale, Math.max(scaleX, scaleY));\r\n img.set({ scaleX: scale, scaleY: scale });\r\n\r\n // Also constrain position after scale\r\n frame._boundConstrainMove?.(e);\r\n };\r\n\r\n this.canvas.on('object:moving', this._boundConstrainMove);\r\n this.canvas.on('object:scaling', this._boundConstrainScale);\r\n }\r\n\r\n /**\r\n * Removes edit mode constraint handlers\r\n * @private\r\n */\r\n private _removeEditModeConstraints(): void {\r\n if (!this.canvas) return;\r\n\r\n if (this._boundConstrainMove) {\r\n this.canvas.off('object:moving', this._boundConstrainMove);\r\n this._boundConstrainMove = undefined;\r\n }\r\n if (this._boundConstrainScale) {\r\n this.canvas.off('object:scaling', this._boundConstrainScale);\r\n this._boundConstrainScale = undefined;\r\n }\r\n }\r\n\r\n /**\r\n * Stored clip path before edit mode\r\n * @private\r\n */\r\n private _editModeClipPath?: FabricObject;\r\n\r\n /**\r\n * Override shouldCache to prevent caching during edit mode.\r\n * This ensures the full image is rendered without cache-based clipping.\r\n * @override\r\n */\r\n shouldCache(): boolean {\r\n if (this.isEditMode) {\r\n this.ownCaching = false;\r\n return false;\r\n }\r\n return super.shouldCache();\r\n }\r\n\r\n /**\r\n * Override drawObject to skip clipPath rendering during edit mode.\r\n * This prevents coordinate recalculation issues with viewport transforms.\r\n * @override\r\n */\r\n drawObject(\r\n ctx: CanvasRenderingContext2D,\r\n forClipping: boolean | undefined,\r\n context: any\r\n ): void {\r\n this._renderBackground(ctx);\r\n for (let i = 0; i < this._objects.length; i++) {\r\n const obj = this._objects[i];\r\n if (obj.group === this) {\r\n obj.render(ctx);\r\n }\r\n }\r\n // Skip clipPath rendering in edit mode to show full image\r\n if (!this.isEditMode) {\r\n this._drawClipPath(ctx, this.clipPath, context);\r\n }\r\n }\r\n\r\n /**\r\n * Custom render to show edit mode overlay\r\n * @override\r\n */\r\n render(ctx: CanvasRenderingContext2D): void {\r\n super.render(ctx);\r\n\r\n // Draw edit mode overlay if in edit mode\r\n if (this.isEditMode && this._editModeClipPath) {\r\n this._renderEditModeOverlay(ctx);\r\n }\r\n }\r\n\r\n /**\r\n * Renders the edit mode overlay - dims area outside frame, shows frame border\r\n * @private\r\n */\r\n private _renderEditModeOverlay(ctx: CanvasRenderingContext2D): void {\r\n ctx.save();\r\n\r\n // Apply the group's transform\r\n const m = this.calcTransformMatrix();\r\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\r\n\r\n // Draw semi-transparent overlay on the OUTSIDE of the frame\r\n // We do this by drawing a large rect and cutting out the frame shape\r\n ctx.beginPath();\r\n\r\n // Large outer rectangle (covers the whole image area)\r\n const padding = 2000; // Large enough to cover any overflow\r\n ctx.rect(-padding, -padding, padding * 2, padding * 2);\r\n\r\n // Cut out the frame shape (counter-clockwise to create hole)\r\n if (this.frameShape === 'circle') {\r\n const radius = Math.min(this.frameWidth, this.frameHeight) / 2;\r\n ctx.moveTo(radius, 0);\r\n ctx.arc(0, 0, radius, 0, Math.PI * 2, true);\r\n } else if (this.frameShape === 'rounded-rect') {\r\n const w = this.frameWidth / 2;\r\n const h = this.frameHeight / 2;\r\n const r = Math.min(this.frameBorderRadius, w, h);\r\n ctx.moveTo(w, h - r);\r\n ctx.arcTo(w, -h, w - r, -h, r);\r\n ctx.arcTo(-w, -h, -w, -h + r, r);\r\n ctx.arcTo(-w, h, -w + r, h, r);\r\n ctx.arcTo(w, h, w, h - r, r);\r\n ctx.closePath();\r\n } else {\r\n // Rectangle\r\n const w = this.frameWidth / 2;\r\n const h = this.frameHeight / 2;\r\n ctx.moveTo(w, -h);\r\n ctx.lineTo(-w, -h);\r\n ctx.lineTo(-w, h);\r\n ctx.lineTo(w, h);\r\n ctx.closePath();\r\n }\r\n\r\n // Fill with semi-transparent dark overlay\r\n ctx.fillStyle = 'rgba(0, 0, 0, 0.5)';\r\n ctx.fill('evenodd');\r\n\r\n // Draw frame border\r\n ctx.beginPath();\r\n if (this.frameShape === 'circle') {\r\n const radius = Math.min(this.frameWidth, this.frameHeight) / 2;\r\n ctx.arc(0, 0, radius, 0, Math.PI * 2);\r\n } else if (this.frameShape === 'rounded-rect') {\r\n const w = this.frameWidth / 2;\r\n const h = this.frameHeight / 2;\r\n const r = Math.min(this.frameBorderRadius, w, h);\r\n ctx.moveTo(w - r, -h);\r\n ctx.arcTo(w, -h, w, -h + r, r);\r\n ctx.arcTo(w, h, w - r, h, r);\r\n ctx.arcTo(-w, h, -w, h - r, r);\r\n ctx.arcTo(-w, -h, -w + r, -h, r);\r\n ctx.closePath();\r\n } else {\r\n const w = this.frameWidth / 2;\r\n const h = this.frameHeight / 2;\r\n ctx.rect(-w, -h, this.frameWidth, this.frameHeight);\r\n }\r\n ctx.strokeStyle = 'rgba(255, 255, 255, 0.8)';\r\n ctx.lineWidth = 2;\r\n ctx.stroke();\r\n\r\n // Draw subtle dashed line for frame boundary\r\n ctx.setLineDash([5, 5]);\r\n ctx.strokeStyle = 'rgba(0, 150, 255, 0.8)';\r\n ctx.lineWidth = 1;\r\n ctx.stroke();\r\n\r\n ctx.restore();\r\n }\r\n\r\n /**\r\n * Exits edit mode and saves the content position\r\n */\r\n exitEditMode(): void {\r\n if (!this._contentImage || !this.isEditMode) {\r\n return;\r\n }\r\n\r\n this.isEditMode = false;\r\n\r\n // Remove constraint handlers\r\n this._removeEditModeConstraints();\r\n\r\n // Disable sub-target interaction\r\n this.subTargetCheck = false;\r\n this.interactive = false;\r\n\r\n // Get the current position of the content\r\n const contentLeft = this._contentImage.left ?? 0;\r\n const contentTop = this._contentImage.top ?? 0;\r\n const contentScaleX = this._contentImage.scaleX ?? 1;\r\n const contentScaleY = this._contentImage.scaleY ?? 1;\r\n\r\n // Constrain position so image always covers the frame\r\n const originalWidth = this.frameMeta.originalWidth ?? this._contentImage.width ?? 100;\r\n const originalHeight = this.frameMeta.originalHeight ?? this._contentImage.height ?? 100;\r\n const currentScale = Math.max(contentScaleX, contentScaleY);\r\n const scaledImgHalfW = (originalWidth * currentScale) / 2;\r\n const scaledImgHalfH = (originalHeight * currentScale) / 2;\r\n const frameHalfW = this.frameWidth / 2;\r\n const frameHalfH = this.frameHeight / 2;\r\n\r\n // Ensure image covers frame (constrain position)\r\n const maxOffsetX = Math.max(0, scaledImgHalfW - frameHalfW);\r\n const maxOffsetY = Math.max(0, scaledImgHalfH - frameHalfH);\r\n const constrainedLeft = Math.max(-maxOffsetX, Math.min(maxOffsetX, contentLeft));\r\n const constrainedTop = Math.max(-maxOffsetY, Math.min(maxOffsetY, contentTop));\r\n\r\n // Apply constrained position\r\n this._contentImage.set({\r\n left: constrainedLeft,\r\n top: constrainedTop,\r\n });\r\n\r\n // Update metadata with new offsets and scale\r\n this.frameMeta = {\r\n ...this.frameMeta,\r\n contentOffsetX: constrainedLeft,\r\n contentOffsetY: constrainedTop,\r\n contentScale: currentScale,\r\n };\r\n\r\n // Make content non-interactive again and restore caching\r\n this._contentImage.set({\r\n selectable: false,\r\n evented: false,\r\n hasControls: false,\r\n hasBorders: false,\r\n objectCaching: true,\r\n });\r\n\r\n // Clear edit mode clip path reference (clipPath was never removed, just skipped during render)\r\n this._editModeClipPath = undefined;\r\n\r\n // Restore caching setting\r\n if (this._editModeObjectCaching !== undefined) {\r\n this.objectCaching = this._editModeObjectCaching;\r\n this._editModeObjectCaching = undefined;\r\n }\r\n\r\n this.set('dirty', true);\r\n\r\n // Re-select the frame itself\r\n if (this.canvas) {\r\n this.canvas.setActiveObject(this);\r\n this.canvas.renderAll();\r\n }\r\n\r\n // Fire custom event\r\n (this as any).fire('frame:editmode:exit', { target: this });\r\n }\r\n\r\n /**\r\n * Toggles edit mode\r\n */\r\n toggleEditMode(): void {\r\n if (this.isEditMode) {\r\n this.exitEditMode();\r\n } else {\r\n this.enterEditMode();\r\n }\r\n }\r\n\r\n /**\r\n * Resizes the frame to new dimensions (Canva-like behavior)\r\n *\r\n * Canva behavior:\r\n * - When frame shrinks: crops more of image (no scale change)\r\n * - When frame grows: uncrops to show more, preserving position\r\n * - Only scales up when image can't cover the frame anymore\r\n *\r\n * @param width - New frame width\r\n * @param height - New frame height\r\n * @param options - Resize options\r\n */\r\n resizeFrame(\r\n width: number,\r\n height: number,\r\n options: { maintainAspect?: boolean } = {}\r\n ): void {\r\n const { maintainAspect = false } = options;\r\n\r\n if (maintainAspect) {\r\n const currentAspect = this.frameWidth / this.frameHeight;\r\n const newAspect = width / height;\r\n\r\n if (newAspect > currentAspect) {\r\n height = width / currentAspect;\r\n } else {\r\n width = height * currentAspect;\r\n }\r\n }\r\n\r\n this.frameWidth = width;\r\n this.frameHeight = height;\r\n\r\n // Update dimensions using super.set to avoid re-triggering conversion\r\n super.set({\r\n width: this.frameWidth,\r\n height: this.frameHeight,\r\n });\r\n\r\n // Update clip path\r\n this._updateClipPath();\r\n\r\n // Canva-like content adjustment\r\n this._adjustContentAfterResize();\r\n\r\n this.set('dirty', true);\r\n this.setCoords();\r\n }\r\n\r\n /**\r\n * Sets the frame shape\r\n *\r\n * @param shape - Shape type\r\n * @param customPath - Custom SVG path for 'custom' shape type\r\n */\r\n setFrameShape(shape: FrameShapeType, customPath?: string): void {\r\n this.frameShape = shape;\r\n if (customPath) {\r\n this.frameCustomPath = customPath;\r\n }\r\n this._updateClipPath();\r\n this.set('dirty', true);\r\n }\r\n\r\n /**\r\n * Sets the border radius for rounded-rect shape\r\n *\r\n * @param radius - Border radius in pixels\r\n */\r\n setBorderRadius(radius: number): void {\r\n this.frameBorderRadius = radius;\r\n if (this.frameShape === 'rounded-rect') {\r\n this._updateClipPath();\r\n this.set('dirty', true);\r\n }\r\n }\r\n\r\n /**\r\n * Override add to maintain fixed dimensions\r\n */\r\n add(...objects: FabricObject[]): number {\r\n const size = super.add(...objects);\r\n this._restoreFixedDimensions();\r\n return size;\r\n }\r\n\r\n /**\r\n * Override remove to maintain fixed dimensions\r\n */\r\n remove(...objects: FabricObject[]): FabricObject[] {\r\n const removed = super.remove(...objects);\r\n this._restoreFixedDimensions();\r\n return removed;\r\n }\r\n\r\n /**\r\n * Override insertAt to maintain fixed dimensions\r\n */\r\n insertAt(index: number, ...objects: FabricObject[]): number {\r\n const size = super.insertAt(index, ...objects);\r\n this._restoreFixedDimensions();\r\n return size;\r\n }\r\n\r\n /**\r\n * Serializes the frame to a plain object\r\n */\r\n // @ts-ignore - Frame extends Group's toObject with additional properties\r\n toObject(propertiesToInclude: string[] = []): any {\r\n return {\r\n ...(super.toObject as any)(propertiesToInclude),\r\n frameWidth: this.frameWidth,\r\n frameHeight: this.frameHeight,\r\n frameShape: this.frameShape,\r\n frameBorderRadius: this.frameBorderRadius,\r\n frameCustomPath: this.frameCustomPath,\r\n frameMeta: { ...this.frameMeta },\r\n isEditMode: false, // Always serialize as not in edit mode\r\n placeholderText: this.placeholderText,\r\n placeholderColor: this.placeholderColor,\r\n };\r\n }\r\n\r\n /**\r\n * Creates a Frame instance from a serialized object\r\n */\r\n static fromObject<T extends TOptions<SerializedFrameProps>>(\r\n object: T,\r\n abortable?: Abortable\r\n ): Promise<Frame> {\r\n const {\r\n objects = [],\r\n layoutManager,\r\n frameWidth,\r\n frameHeight,\r\n frameShape,\r\n frameBorderRadius,\r\n frameCustomPath,\r\n frameMeta,\r\n placeholderText,\r\n placeholderColor,\r\n ...groupOptions\r\n } = object;\r\n\r\n return Promise.all([\r\n enlivenObjects<FabricObject>(objects, abortable),\r\n enlivenObjectEnlivables(groupOptions, abortable),\r\n ]).then(([enlivenedObjects, hydratedOptions]) => {\r\n // Create frame with restored options\r\n const frame = new Frame([], {\r\n ...groupOptions,\r\n ...hydratedOptions,\r\n frameWidth,\r\n frameHeight,\r\n frameShape,\r\n frameBorderRadius,\r\n frameCustomPath,\r\n frameMeta: frameMeta ? {\r\n contentScale: frameMeta.contentScale ?? 1,\r\n contentOffsetX: frameMeta.contentOffsetX ?? 0,\r\n contentOffsetY: frameMeta.contentOffsetY ?? 0,\r\n ...frameMeta,\r\n } : undefined,\r\n placeholderText,\r\n placeholderColor,\r\n });\r\n\r\n // If there was an image, restore it\r\n if (frameMeta?.imageSrc) {\r\n // Async restoration of image - caller should wait if needed\r\n frame.setImage(frameMeta.imageSrc).then(() => {\r\n // Restore content position from metadata\r\n if (frame._contentImage) {\r\n frame._contentImage.set({\r\n left: frameMeta.contentOffsetX ?? 0,\r\n top: frameMeta.contentOffsetY ?? 0,\r\n scaleX: frameMeta.contentScale ?? 1,\r\n scaleY: frameMeta.contentScale ?? 1,\r\n });\r\n }\r\n frame.set('dirty', true);\r\n }).catch((err) => {\r\n console.warn('Failed to restore frame image:', err);\r\n });\r\n }\r\n\r\n return frame;\r\n });\r\n }\r\n\r\n /**\r\n * Creates a Frame with a specific aspect ratio preset\r\n *\r\n * @param aspect - Aspect ratio preset (e.g., '16:9', '1:1', '4:5', '9:16')\r\n * @param size - Base size in pixels\r\n * @param options - Additional frame options\r\n */\r\n static createWithAspect(\r\n aspect: string,\r\n size: number = 200,\r\n options: Partial<FrameProps> = {}\r\n ): Frame {\r\n let width: number;\r\n let height: number;\r\n\r\n switch (aspect) {\r\n case '16:9':\r\n width = size;\r\n height = size * (9 / 16);\r\n break;\r\n case '9:16':\r\n width = size * (9 / 16);\r\n height = size;\r\n break;\r\n case '4:5':\r\n width = size * (4 / 5);\r\n height = size;\r\n break;\r\n case '4:3':\r\n width = size;\r\n height = size * (3 / 4);\r\n break;\r\n case '3:4':\r\n width = size * (3 / 4);\r\n height = size;\r\n break;\r\n case '1:1':\r\n default:\r\n width = size;\r\n height = size;\r\n break;\r\n }\r\n\r\n const defaultMeta = frameDefaultValues.frameMeta || {};\r\n\r\n return new Frame([], {\r\n ...options,\r\n frameWidth: width,\r\n frameHeight: height,\r\n frameMeta: {\r\n contentScale: defaultMeta.contentScale ?? 1,\r\n contentOffsetX: defaultMeta.contentOffsetX ?? 0,\r\n contentOffsetY: defaultMeta.contentOffsetY ?? 0,\r\n aspect,\r\n ...options.frameMeta,\r\n },\r\n });\r\n }\r\n}\r\n\r\n// Register the Frame class with the class registry\r\nclassRegistry.setClass(Frame);\r\nclassRegistry.setClass(Frame, 'frame');\r\n"],"names":["frameDefaultValues","frameWidth","frameHeight","frameShape","frameBorderRadius","isEditMode","placeholderText","placeholderColor","frameMeta","contentScale","contentOffsetX","contentOffsetY","Frame","Group","getDefaults","ownDefaults","constructor","_defaultMeta$contentS","_defaultMeta$contentO","_defaultMeta$contentO2","objects","arguments","length","undefined","options","frameLayoutManager","LayoutManager","FrameLayout","layoutManager","_defineProperty","Object","assign","setOptions","defaultMeta","set","width","height","_updateClipPath","_createPlaceholder","_setupResizeControls","changeFrameWidth","eventData","transform","x","y","target","localPoint","getLocalPoint","originX","originY","oldWidth","newWidth","Math","max","abs","_adjustContentAfterResize","changeFrameHeight","oldHeight","newHeight","changeFrameSize","resizeFromCorner","wrapWithFireEvent","RESIZING","wrapWithFixedAnchor","resizeX","resizeY","controls","console","warn","cornerControls","forEach","corner","existing","Control","cursorStyleHandler","actionHandler","actionName","horizontalControls","render","sizeX","sizeY","verticalControls","_placeholder","_contentImage","_ref","_this$frameMeta$origi","_ref2","_this$frameMeta$origi2","_img$scaleX","_img$left","_img$top","img","originalWidth","originalHeight","currentScale","scaleX","imgCenterX","left","imgCenterY","top","minScaleForCover","_calculateCoverScale","scaleRatio","scaleY","scaledImgHalfW","scaledImgHalfH","frameHalfW","frameHalfH","maxOffsetX","maxOffsetY","needsConstraintX","needsConstraintY","min","setCoords","clipPath","radius","Circle","Rect","rx","ry","frameCustomPath","Path","pathBounds","getBoundingRect","remove","placeholder","fill","selectable","evented","add","_restoreFixedDimensions","_removePlaceholder","setImage","src","_image$width","_image$height","crossOrigin","signal","image","FabricImage","fromURL","scale","_clearContent","imageSrc","setImageObject","_image$width2","_image$height2","getSrc","imageWidth","imageHeight","getObjects","obj","clearContent","hasContent","getContentImage","enterEditMode","_ref3","_this$frameMeta$origi3","_ref4","_this$frameMeta$origi4","_editModeObjectCaching","objectCaching","dirty","_cacheCanvas","_cacheContext","subTargetCheck","interactive","minScale","hasControls","hasBorders","minScaleLimit","lockScalingFlip","_editModeClipPath","_setupEditModeConstraints","canvas","renderAll","fire","frame","_boundConstrainMove","e","_ref5","_frame$frameMeta$orig","_ref6","_frame$frameMeta$orig2","_img$scaleX2","_img$left2","_img$top2","_boundConstrainScale","_ref7","_frame$frameMeta$orig3","_ref8","_frame$frameMeta$orig4","_img$scaleX3","_img$scaleY","_frame$_boundConstrai","call","on","_removeEditModeConstraints","off","shouldCache","ownCaching","drawObject","ctx","forClipping","context","_renderBackground","i","_objects","group","_drawClipPath","_renderEditModeOverlay","save","m","calcTransformMatrix","beginPath","padding","rect","moveTo","arc","PI","w","h","r","arcTo","closePath","lineTo","fillStyle","strokeStyle","lineWidth","stroke","setLineDash","restore","exitEditMode","_this$_contentImage$l","_this$_contentImage$t","_this$_contentImage$s","_this$_contentImage$s2","_ref9","_this$frameMeta$origi5","_ref0","_this$frameMeta$origi6","contentLeft","contentTop","contentScaleX","contentScaleY","constrainedLeft","constrainedTop","setActiveObject","toggleEditMode","resizeFrame","maintainAspect","currentAspect","newAspect","setFrameShape","shape","customPath","setBorderRadius","size","removed","insertAt","index","_len","Array","_key","toObject","propertiesToInclude","fromObject","object","abortable","groupOptions","Promise","all","enlivenObjects","enlivenObjectEnlivables","then","_ref1","_frameMeta$contentSca","_frameMeta$contentOff","_frameMeta$contentOff2","enlivenedObjects","hydratedOptions","_frameMeta$contentOff3","_frameMeta$contentOff4","_frameMeta$contentSca2","_frameMeta$contentSca3","catch","err","createWithAspect","aspect","_defaultMeta$contentS2","_defaultMeta$contentO3","_defaultMeta$contentO4","classRegistry","setClass"],"mappings":"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"}
@@ -225,6 +225,18 @@ export declare class Frame extends Group {
225
225
  * @private
226
226
  */
227
227
  private _editModeClipPath?;
228
+ /**
229
+ * Override shouldCache to prevent caching during edit mode.
230
+ * This ensures the full image is rendered without cache-based clipping.
231
+ * @override
232
+ */
233
+ shouldCache(): boolean;
234
+ /**
235
+ * Override drawObject to skip clipPath rendering during edit mode.
236
+ * This prevents coordinate recalculation issues with viewport transforms.
237
+ * @override
238
+ */
239
+ drawObject(ctx: CanvasRenderingContext2D, forClipping: boolean | undefined, context: any): void;
228
240
  /**
229
241
  * Custom render to show edit mode overlay
230
242
  * @override