{"version":3,"file":"Object.mjs","sources":["../../../../src/shapes/Object/Object.ts"],"sourcesContent":["import { cache } from '../../cache';\nimport { config } from '../../config';\nimport {\n  ALIASING_LIMIT,\n  CENTER,\n  iMatrix,\n  LEFT,\n  SCALE_X,\n  SCALE_Y,\n  STROKE,\n  FILL,\n  TOP,\n  VERSION,\n} from '../../constants';\nimport type { ObjectEvents } from '../../EventTypeDefs';\nimport { Point } from '../../Point';\nimport { Shadow } from '../../Shadow';\nimport type {\n  TDegree,\n  TFiller,\n  TSize,\n  TCacheCanvasDimensions,\n  Abortable,\n  TOptions,\n  ImageFormat,\n} from '../../typedefs';\nimport { classRegistry } from '../../ClassRegistry';\nimport { runningAnimations } from '../../util/animation/AnimationRegistry';\nimport { capValue } from '../../util/misc/capValue';\nimport {\n  createCanvasElement,\n  createCanvasElementFor,\n  toDataURL,\n  toBlob,\n} from '../../util/misc/dom';\nimport { invertTransform, qrDecompose } from '../../util/misc/matrix';\nimport { enlivenObjectEnlivables } from '../../util/misc/objectEnlive';\nimport {\n  resetObjectTransform,\n  saveObjectTransform,\n} from '../../util/misc/objectTransforms';\nimport { sendObjectToPlane } from '../../util/misc/planeChange';\nimport { pick, pickBy } from '../../util/misc/pick';\nimport { toFixed } from '../../util/misc/toFixed';\nimport type { Group } from '../Group';\nimport { StaticCanvas } from '../../canvas/StaticCanvas';\nimport { isFiller, isSerializableFiller } from '../../util/typeAssertions';\nimport type { FabricImage } from '../Image';\nimport {\n  cacheProperties,\n  fabricObjectDefaultValues,\n  stateProperties,\n} from './defaultValues';\nimport type { Gradient } from '../../gradient/Gradient';\nimport type { Pattern } from '../../Pattern';\nimport type { Canvas } from '../../canvas/Canvas';\nimport type { SerializedObjectProps } from './types/SerializedObjectProps';\nimport type { ObjectProps } from './types/ObjectProps';\nimport { getDevicePixelRatio, getEnv } from '../../env';\nimport { log } from '../../util/internals/console';\nimport type { TColorArg } from '../../color/typedefs';\nimport type { TAnimation } from '../../util/animation/animate';\nimport { animate, animateColor } from '../../util/animation/animate';\nimport type {\n  AnimationOptions,\n  ArrayAnimationOptions,\n  ColorAnimationOptions,\n  ValueAnimationOptions,\n} from '../../util/animation/types';\nimport { ObjectGeometry } from './ObjectGeometry';\n\ntype TAncestor = FabricObject;\ntype TCollection = Group;\n\nexport type Ancestors =\n  | [FabricObject | Group]\n  | [FabricObject | Group, ...Group[]]\n  | Group[];\n\nexport type AncestryComparison = {\n  /**\n   * common ancestors of `this` and`other`(may include`this` | `other`)\n   */\n  common: Ancestors;\n  /**\n   * ancestors that are of `this` only\n   */\n  fork: Ancestors;\n  /**\n   * ancestors that are of `other` only\n   */\n  otherFork: Ancestors;\n};\n\nexport type TCachedFabricObject<T extends FabricObject = FabricObject> = T &\n  Required<\n    Pick<\n      T,\n      | 'zoomX'\n      | 'zoomY'\n      | '_cacheCanvas'\n      | '_cacheContext'\n      | 'cacheTranslationX'\n      | 'cacheTranslationY'\n    >\n  > & {\n    _cacheContext: CanvasRenderingContext2D;\n  };\n\nexport type ObjectToCanvasElementOptions = {\n  format?: ImageFormat;\n  /** Multiplier to scale by */\n  multiplier?: number;\n  /** Cropping left offset. Introduced in v1.2.14 */\n  left?: number;\n  /** Cropping top offset. Introduced in v1.2.14 */\n  top?: number;\n  /** Cropping width. Introduced in v1.2.14 */\n  width?: number;\n  /** Cropping height. Introduced in v1.2.14 */\n  height?: number;\n  /** Enable retina scaling for clone image. Introduce in 1.6.4 */\n  enableRetinaScaling?: boolean;\n  /** Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4 */\n  withoutTransform?: boolean;\n  /** Remove current object shadow. Introduced in 2.4.2 */\n  withoutShadow?: boolean;\n  /** Account for canvas viewport transform */\n  viewportTransform?: boolean;\n  /** Function to create the output canvas to export onto */\n  canvasProvider?: <T extends StaticCanvas>(el?: HTMLCanvasElement) => T;\n};\n\ntype toDataURLOptions = ObjectToCanvasElementOptions & {\n  quality?: number;\n};\n\nexport type DrawContext =\n  | {\n      parentClipPaths: FabricObject[];\n      width: number;\n      height: number;\n      cacheTranslationX: number;\n      cacheTranslationY: number;\n      zoomX: number;\n      zoomY: number;\n    }\n  | Record<string, never>;\n\n/**\n * Root object class from which all 2d shape classes inherit from\n * @see {@link http://fabric5.fabricjs.com/fabric-intro-part-1#objects}\n *\n * @fires added\n * @fires removed\n *\n * @fires selected\n * @fires deselected\n *\n * @fires rotating\n * @fires scaling\n * @fires moving\n * @fires skewing\n * @fires modified\n *\n * @fires mousedown\n * @fires mouseup\n * @fires mouseover\n * @fires mouseout\n * @fires mousewheel\n * @fires mousedblclick\n *\n * @fires dragover\n * @fires dragenter\n * @fires dragleave\n * @fires drop\n */\nexport class FabricObject<\n  Props extends TOptions<ObjectProps> = Partial<ObjectProps>,\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  SProps extends SerializedObjectProps = SerializedObjectProps,\n  EventSpec extends ObjectEvents = ObjectEvents,\n>\n  extends ObjectGeometry<EventSpec>\n  implements ObjectProps\n{\n  declare minScaleLimit: number;\n\n  declare opacity: number;\n\n  declare paintFirst: 'fill' | 'stroke';\n  declare fill: string | TFiller | null;\n  declare fillRule: CanvasFillRule;\n  declare stroke: string | TFiller | null;\n  declare strokeDashArray: number[] | null;\n  declare strokeDashOffset: number;\n  declare strokeLineCap: CanvasLineCap;\n  declare strokeLineJoin: CanvasLineJoin;\n  declare strokeMiterLimit: number;\n\n  declare globalCompositeOperation: GlobalCompositeOperation;\n  declare backgroundColor: string;\n\n  declare shadow: Shadow | null;\n\n  declare visible: boolean;\n\n  declare includeDefaultValues: boolean;\n  declare excludeFromExport: boolean;\n\n  declare objectCaching: boolean;\n\n  declare clipPath?: FabricObject;\n  declare inverted: boolean;\n  declare absolutePositioned: boolean;\n  declare centeredRotation: boolean;\n  declare centeredScaling: boolean;\n\n  /**\n   * This list of properties is used to check if the state of an object is changed.\n   * This state change now is only used for children of groups to understand if a group\n   * needs its cache regenerated during a .set call\n   * @type Array\n   */\n  static stateProperties: string[] = stateProperties;\n\n  /**\n   * List of properties to consider when checking if cache needs refresh\n   * Those properties are checked by\n   * calls to Object.set(key, value). If the key is in this list, the object is marked as dirty\n   * and refreshed at the next render\n   * @type Array\n   */\n  static cacheProperties: string[] = cacheProperties;\n\n  /**\n   * When set to `true`, object's cache will be rerendered next render call.\n   * since 1.7.0\n   * @type Boolean\n   * @default true\n   */\n  declare dirty: boolean;\n\n  /**\n   * Quick access for the _cacheCanvas rendering context\n   * This is part of the objectCaching feature\n   * since 1.7.0\n   * @type boolean\n   * @default undefined\n   * @private\n   */\n  _cacheContext: CanvasRenderingContext2D | null = null;\n\n  /**\n   * A reference to the HTMLCanvasElement that is used to contain the cache of the object\n   * this canvas element is resized and cleared as needed\n   * Is marked private, you can read it, don't use it since it is handled by fabric\n   * since 1.7.0\n   * @type HTMLCanvasElement\n   * @default undefined\n   * @private\n   */\n  declare _cacheCanvas?: HTMLCanvasElement;\n\n  /**\n   * zoom level used on the cacheCanvas to draw the cache, X axe\n   * since 1.7.0\n   * @type number\n   * @default undefined\n   * @private\n   */\n  declare zoomX?: number;\n\n  /**\n   * zoom level used on the cacheCanvas to draw the cache, Y axe\n   * since 1.7.0\n   * @type number\n   * @default undefined\n   * @private\n   */\n  declare zoomY?: number;\n\n  /**\n   * zoom level used on the cacheCanvas to draw the cache, Y axe\n   * since 1.7.0\n   * @type number\n   * @default undefined\n   * @private\n   */\n  declare cacheTranslationX?: number;\n\n  /**\n   * translation of the cacheCanvas away from the center, for subpixel accuracy and crispness\n   * since 1.7.0\n   * @type number\n   * @default undefined\n   * @private\n   */\n  declare cacheTranslationY?: number;\n\n  /**\n   * A reference to the parent of the object, usually a Group\n   * @type number\n   * @default undefined\n   * @private\n   */\n  declare group?: Group;\n\n  /**\n   * Indicate if the object is sitting on a cache dedicated to it\n   * or is part of a larger cache for many object ( a group for example)\n   * @type number\n   * @default undefined\n   * @private\n   */\n  declare ownCaching?: boolean;\n\n  /**\n   * Private. indicates if the object inside a group is on a transformed context or not\n   * or is part of a larger cache for many object ( a group for example)\n   * @type boolean\n   * @default undefined\n   * @private\n   */\n  declare _transformDone?: boolean;\n\n  static ownDefaults = fabricObjectDefaultValues;\n\n  static getDefaults(): Record<string, any> {\n    return FabricObject.ownDefaults;\n  }\n\n  /**\n   * The class type.\n   * This is used for serialization and deserialization purposes and internally it can be used\n   * to identify classes.\n   * When we transform a class in a plain JS object we need a way to recognize which class it was,\n   * and the type is the way we do that. It has no other purposes and you should not give one.\n   * Hard to reach on instances and please do not use to drive instance's logic (this.constructor.type).\n   * To idenfity a class use instanceof class ( instanceof Rect ).\n   * We do not do that in fabricJS code because we want to try to have code splitting possible.\n   */\n  static type = 'FabricObject';\n\n  /**\n   * Legacy identifier of the class. Prefer using utils like isType or instanceOf\n   * Will be removed in fabric 7 or 8.\n   * The setter exists to avoid type errors in old code and possibly current deserialization code.\n   * DO NOT build new code around this type value\n   * @TODO add sustainable warning message\n   * @type string\n   * @deprecated\n   */\n  get type() {\n    const name = (this.constructor as typeof FabricObject).type;\n    if (name === 'FabricObject') {\n      return 'object';\n    }\n    return name.toLowerCase();\n  }\n\n  set type(value) {\n    log('warn', 'Setting type has no effect', value);\n  }\n\n  /**\n   * Constructor\n   * @param {Object} [options] Options object\n   */\n  constructor(options?: Props) {\n    super();\n    Object.assign(this, FabricObject.ownDefaults);\n    this.setOptions(options);\n  }\n\n  /**\n   * Create a the canvas used to keep the cached copy of the object\n   * @private\n   */\n  _createCacheCanvas() {\n    this._cacheCanvas = createCanvasElement();\n    this._cacheContext = this._cacheCanvas.getContext('2d');\n    this._updateCacheCanvas();\n    // if canvas gets created, is empty, so dirty.\n    this.dirty = true;\n  }\n\n  /**\n   * Limit the cache dimensions so that X * Y do not cross config.perfLimitSizeTotal\n   * and each side do not cross fabric.cacheSideLimit\n   * those numbers are configurable so that you can get as much detail as you want\n   * making bargain with performances.\n   * It mutates the input object dims.\n   * @param {TCacheCanvasDimensions} dims\n   * @return {TCacheCanvasDimensions} dims\n   */\n  _limitCacheSize(\n    dims: TCacheCanvasDimensions & { capped?: boolean },\n  ): TCacheCanvasDimensions & { capped?: boolean } {\n    const width = dims.width,\n      height = dims.height,\n      max = config.maxCacheSideLimit,\n      min = config.minCacheSideLimit;\n    if (\n      width <= max &&\n      height <= max &&\n      width * height <= config.perfLimitSizeTotal\n    ) {\n      if (width < min) {\n        dims.width = min;\n      }\n      if (height < min) {\n        dims.height = min;\n      }\n      return dims;\n    }\n    const ar = width / height,\n      [limX, limY] = cache.limitDimsByArea(ar),\n      x = capValue(min, limX, max),\n      y = capValue(min, limY, max);\n    if (width > x) {\n      dims.zoomX /= width / x;\n      dims.width = x;\n      dims.capped = true;\n    }\n    if (height > y) {\n      dims.zoomY /= height / y;\n      dims.height = y;\n      dims.capped = true;\n    }\n    return dims;\n  }\n\n  /**\n   * Return the dimension and the zoom level needed to create a cache canvas\n   * big enough to host the object to be cached.\n   * @private\n   * @return {TCacheCanvasDimensions} Informations about the object to be cached\n   */\n  _getCacheCanvasDimensions(): TCacheCanvasDimensions {\n    const objectScale = this.getTotalObjectScaling(),\n      // calculate dimensions without skewing\n      dim = this._getTransformedDimensions({ skewX: 0, skewY: 0 }),\n      neededX = (dim.x * objectScale.x) / this.scaleX,\n      neededY = (dim.y * objectScale.y) / this.scaleY;\n    return {\n      // for sure this ALIASING_LIMIT is slightly creating problem\n      // in situation in which the cache canvas gets an upper limit\n      // also objectScale contains already scaleX and scaleY\n      width: Math.ceil(neededX + ALIASING_LIMIT),\n      height: Math.ceil(neededY + ALIASING_LIMIT),\n      zoomX: objectScale.x,\n      zoomY: objectScale.y,\n      x: neededX,\n      y: neededY,\n    };\n  }\n\n  /**\n   * Update width and height of the canvas for cache\n   * returns true or false if canvas needed resize.\n   * @private\n   * @return {Boolean} true if the canvas has been resized\n   */\n  _updateCacheCanvas() {\n    const canvas = this._cacheCanvas!,\n      context = this._cacheContext,\n      { width, height, zoomX, zoomY, x, y } = this._limitCacheSize(\n        this._getCacheCanvasDimensions(),\n      ),\n      dimensionsChanged = width !== canvas.width || height !== canvas.height,\n      zoomChanged = this.zoomX !== zoomX || this.zoomY !== zoomY;\n\n    if (!canvas || !context) {\n      return false;\n    }\n\n    const shouldRedraw = dimensionsChanged || zoomChanged;\n\n    if (shouldRedraw) {\n      if (width !== canvas.width || height !== canvas.height) {\n        canvas.width = width;\n        canvas.height = height;\n      } else {\n        context.setTransform(1, 0, 0, 1, 0, 0);\n        context.clearRect(0, 0, canvas.width, canvas.height);\n      }\n      const drawingWidth = x / 2;\n      const drawingHeight = y / 2;\n      this.cacheTranslationX =\n        Math.round(canvas.width / 2 - drawingWidth) + drawingWidth;\n      this.cacheTranslationY =\n        Math.round(canvas.height / 2 - drawingHeight) + drawingHeight;\n      context.translate(this.cacheTranslationX, this.cacheTranslationY);\n      context.scale(zoomX, zoomY);\n      this.zoomX = zoomX;\n      this.zoomY = zoomY;\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Sets object's properties from options, for class constructor only.\n   * Needs to be overridden for different defaults.\n   * @protected\n   * @param {Object} [options] Options object\n   */\n  protected setOptions(options: Record<string, any> = {}) {\n    this._setOptions(options);\n  }\n\n  /**\n   * Transforms context when rendering an object\n   * @param {CanvasRenderingContext2D} ctx Context\n   */\n  transform(ctx: CanvasRenderingContext2D) {\n    const needFullTransform =\n      (this.group && !this.group._transformDone) ||\n      (this.group && this.canvas && ctx === (this.canvas as Canvas).contextTop);\n    const m = this.calcTransformMatrix(!needFullTransform);\n    ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n  }\n\n  /**\n   * Return the object scale factor counting also the group scaling\n   * @return {Point}\n   */\n  getObjectScaling() {\n    // if the object is a top level one, on the canvas, we go for simple aritmetic\n    // otherwise the complex method with angles will return approximations and decimals\n    // and will likely kill the cache when not needed\n    // https://github.com/fabricjs/fabric.js/issues/7157\n    if (!this.group) {\n      return new Point(Math.abs(this.scaleX), Math.abs(this.scaleY));\n    }\n    // if we are inside a group total zoom calculation is complex, we defer to generic matrices\n    const options = qrDecompose(this.calcTransformMatrix());\n    return new Point(Math.abs(options.scaleX), Math.abs(options.scaleY));\n  }\n\n  /**\n   * Return the object scale factor counting also the group scaling, zoom and retina\n   * @return {Object} object with scaleX and scaleY properties\n   */\n  getTotalObjectScaling() {\n    const scale = this.getObjectScaling();\n    if (this.canvas) {\n      const zoom = this.canvas.getZoom();\n      const retina = this.getCanvasRetinaScaling();\n      return scale.scalarMultiply(zoom * retina);\n    }\n    return scale;\n  }\n\n  /**\n   * Return the object opacity counting also the group property\n   * @return {Number}\n   */\n  getObjectOpacity() {\n    let opacity = this.opacity;\n    if (this.group) {\n      opacity *= this.group.getObjectOpacity();\n    }\n    return opacity;\n  }\n\n  /**\n   * Makes sure the scale is valid and modifies it if necessary\n   * @todo: this is a control action issue, not a geometry one\n   * @private\n   * @param {Number} value, unconstrained\n   * @return {Number} constrained value;\n   */\n  _constrainScale(value: number): number {\n    if (Math.abs(value) < this.minScaleLimit) {\n      if (value < 0) {\n        return -this.minScaleLimit;\n      } else {\n        return this.minScaleLimit;\n      }\n    } else if (value === 0) {\n      return 0.0001;\n    }\n    return value;\n  }\n\n  /**\n   * Handles setting values on the instance and handling internal side effects\n   * @protected\n   * @param {String} key\n   * @param {*} value\n   */\n  _set(key: string, value: any) {\n    if (key === SCALE_X || key === SCALE_Y) {\n      value = this._constrainScale(value);\n    }\n    if (key === SCALE_X && value < 0) {\n      this.flipX = !this.flipX;\n      value *= -1;\n    } else if (key === 'scaleY' && value < 0) {\n      this.flipY = !this.flipY;\n      value *= -1;\n      // i don't like this automatic initialization here\n    } else if (key === 'shadow' && value && !(value instanceof Shadow)) {\n      value = new Shadow(value);\n    }\n\n    const isChanged = this[key as keyof this] !== value;\n    this[key as keyof this] = value;\n\n    // invalidate caches\n    if (\n      isChanged &&\n      (this.constructor as typeof FabricObject).cacheProperties.includes(key)\n    ) {\n      this.dirty = true;\n    }\n    // a dirty child makes the parent dirty.\n    // but a non dirty child does not make the parent not dirty.\n    // the parent could be dirty for some other reason.\n    this.parent &&\n      (this.dirty ||\n        (isChanged &&\n          (this.constructor as typeof FabricObject).stateProperties.includes(\n            key,\n          ))) &&\n      this.parent._set('dirty', true);\n\n    return this;\n  }\n\n  /**\n   * return if the object would be visible in rendering\n   * @return {Boolean}\n   */\n  isNotVisible() {\n    return (\n      this.opacity === 0 ||\n      (!this.width && !this.height && this.strokeWidth === 0) ||\n      !this.visible\n    );\n  }\n\n  /**\n   * Renders an object on a specified context\n   * @param {CanvasRenderingContext2D} ctx Context to render on\n   */\n  render(ctx: CanvasRenderingContext2D) {\n    // do not render if width/height are zeros or object is not visible\n    if (this.isNotVisible()) {\n      return;\n    }\n    if (\n      this.canvas &&\n      this.canvas.skipOffscreen &&\n      !this.group &&\n      !this.isOnScreen()\n    ) {\n      return;\n    }\n    ctx.save();\n    this._setupCompositeOperation(ctx);\n    this.drawSelectionBackground(ctx);\n    this.transform(ctx);\n    this._setOpacity(ctx);\n    this._setShadow(ctx);\n    if (this.shouldCache()) {\n      (this as TCachedFabricObject).renderCache();\n      (this as TCachedFabricObject).drawCacheOnCanvas(ctx);\n    } else {\n      this._removeCacheCanvas();\n      this.drawObject(ctx, false, {});\n      this.dirty = false;\n    }\n    ctx.restore();\n  }\n\n  drawSelectionBackground(_ctx: CanvasRenderingContext2D) {\n    /* no op */\n  }\n\n  renderCache(this: TCachedFabricObject, options?: any) {\n    options = options || {};\n    if (!this._cacheCanvas || !this._cacheContext) {\n      this._createCacheCanvas();\n    }\n    if (this.isCacheDirty() && this._cacheContext) {\n      const { zoomX, zoomY, cacheTranslationX, cacheTranslationY } = this;\n      const { width, height } = this._cacheCanvas;\n      this.drawObject(this._cacheContext, options.forClipping, {\n        zoomX,\n        zoomY,\n        cacheTranslationX,\n        cacheTranslationY,\n        width,\n        height,\n        parentClipPaths: [],\n      });\n      this.dirty = false;\n    }\n  }\n\n  /**\n   * Remove cacheCanvas and its dimensions from the objects\n   */\n  _removeCacheCanvas() {\n    this._cacheCanvas = undefined;\n    this._cacheContext = null;\n  }\n\n  /**\n   * return true if the object will draw a stroke\n   * Does not consider text styles. This is just a shortcut used at rendering time\n   * We want it to be an approximation and be fast.\n   * wrote to avoid extra caching, it has to return true when stroke happens,\n   * can guess when it will not happen at 100% chance, does not matter if it misses\n   * some use case where the stroke is invisible.\n   * @since 3.0.0\n   * @returns Boolean\n   */\n  hasStroke(): boolean {\n    return (\n      !!this.stroke && this.stroke !== 'transparent' && this.strokeWidth !== 0\n    );\n  }\n\n  /**\n   * return true if the object will draw a fill\n   * Does not consider text styles. This is just a shortcut used at rendering time\n   * We want it to be an approximation and be fast.\n   * wrote to avoid extra caching, it has to return true when fill happens,\n   * can guess when it will not happen at 100% chance, does not matter if it misses\n   * some use case where the fill is invisible.\n   * @since 3.0.0\n   * @returns Boolean\n   */\n  hasFill(): boolean {\n    return !!this.fill && this.fill !== 'transparent';\n  }\n\n  /**\n   * When returns `true`, force the object to have its own cache, even if it is inside a group\n   * it may be needed when your object behave in a particular way on the cache and always needs\n   * its own isolated canvas to render correctly.\n   * Created to be overridden\n   * since 1.7.12\n   * @returns Boolean\n   */\n  needsItsOwnCache() {\n    // TODO re-evaluate this shadow condition\n    if (\n      this.paintFirst === STROKE &&\n      this.hasFill() &&\n      this.hasStroke() &&\n      !!this.shadow\n    ) {\n      return true;\n    }\n    if (this.clipPath) {\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Decide if the object should cache or not. Create its own cache level\n   * objectCaching is a global flag, wins over everything\n   * needsItsOwnCache should be used when the object drawing method requires\n   * a cache step.\n   * Generally you do not cache objects in groups because the group outside is cached.\n   * Read as: cache if is needed, or if the feature is enabled but we are not already caching.\n   * @return {Boolean}\n   */\n  shouldCache() {\n    this.ownCaching =\n      (this.objectCaching && (!this.parent || !this.parent.isOnACache())) ||\n      this.needsItsOwnCache();\n    return this.ownCaching;\n  }\n\n  /**\n   * Check if this object will cast a shadow with an offset.\n   * used by Group.shouldCache to know if child has a shadow recursively\n   * @return {Boolean}\n   * @deprecated\n   */\n  willDrawShadow() {\n    return (\n      !!this.shadow && (this.shadow.offsetX !== 0 || this.shadow.offsetY !== 0)\n    );\n  }\n\n  /**\n   * Execute the drawing operation for an object clipPath\n   * @param {CanvasRenderingContext2D} ctx Context to render on\n   * @param {FabricObject} clipPath\n   */\n  drawClipPathOnCache(\n    ctx: CanvasRenderingContext2D,\n    clipPath: FabricObject,\n    canvasWithClipPath: HTMLCanvasElement,\n  ) {\n    ctx.save();\n    // DEBUG: uncomment this line, comment the following\n    // ctx.globalAlpha = 0.4\n    if (clipPath.inverted) {\n      ctx.globalCompositeOperation = 'destination-out';\n    } else {\n      ctx.globalCompositeOperation = 'destination-in';\n    }\n    ctx.setTransform(1, 0, 0, 1, 0, 0);\n    ctx.drawImage(canvasWithClipPath, 0, 0);\n    ctx.restore();\n  }\n\n  /**\n   * Execute the drawing operation for an object on a specified context\n   * @param {CanvasRenderingContext2D} ctx Context to render on\n   * @param {boolean} forClipping apply clipping styles\n   * @param {DrawContext} context additional context for rendering\n   */\n  drawObject(\n    ctx: CanvasRenderingContext2D,\n    forClipping: boolean | undefined,\n    context: DrawContext,\n  ) {\n    const originalFill = this.fill,\n      originalStroke = this.stroke;\n    if (forClipping) {\n      this.fill = 'black';\n      this.stroke = '';\n      this._setClippingProperties(ctx);\n    } else {\n      this._renderBackground(ctx);\n    }\n    this.fire('before:render', { ctx });\n    this._render(ctx);\n    this._drawClipPath(ctx, this.clipPath, context);\n    this.fill = originalFill;\n    this.stroke = originalStroke;\n  }\n\n  private createClipPathLayer(\n    this: TCachedFabricObject,\n    clipPath: FabricObject,\n    context: DrawContext,\n  ) {\n    const canvas = createCanvasElementFor(context as TSize);\n    const ctx = canvas.getContext('2d')!;\n    ctx.translate(context.cacheTranslationX, context.cacheTranslationY);\n    ctx.scale(context.zoomX, context.zoomY);\n    clipPath._cacheCanvas = canvas;\n    context.parentClipPaths.forEach((prevClipPath) => {\n      prevClipPath.transform(ctx);\n    });\n    context.parentClipPaths.push(clipPath);\n    if (clipPath.absolutePositioned) {\n      const m = invertTransform(this.calcTransformMatrix());\n      ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n    }\n    clipPath.transform(ctx);\n    clipPath.drawObject(ctx, true, context);\n    return canvas;\n  }\n\n  /**\n   * Prepare clipPath state and cache and draw it on instance's cache\n   * @param {CanvasRenderingContext2D} ctx\n   * @param {FabricObject} clipPath\n   */\n  _drawClipPath(\n    ctx: CanvasRenderingContext2D,\n    clipPath: FabricObject | undefined,\n    context: DrawContext,\n  ) {\n    if (!clipPath) {\n      return;\n    }\n    // needed to setup _transformDone\n    // TODO find a better solution?\n    clipPath._transformDone = true;\n    const canvas = (this as TCachedFabricObject).createClipPathLayer(\n      clipPath,\n      context,\n    );\n    this.drawClipPathOnCache(ctx, clipPath, canvas);\n  }\n\n  /**\n   * Paint the cached copy of the object on the target context.\n   * @param {CanvasRenderingContext2D} ctx Context to render on\n   */\n  drawCacheOnCanvas(this: TCachedFabricObject, ctx: CanvasRenderingContext2D) {\n    ctx.scale(1 / this.zoomX, 1 / this.zoomY);\n    ctx.drawImage(\n      this._cacheCanvas,\n      -this.cacheTranslationX,\n      -this.cacheTranslationY,\n    );\n  }\n\n  /**\n   * Check if cache is dirty and if is dirty clear the context.\n   * This check has a big side effect, it changes the underlying cache canvas if necessary.\n   * Do not call this method on your own to check if the cache is dirty, because if it is,\n   * it is also going to wipe the cache. This is badly designed and needs to be fixed.\n   * @param {Boolean} skipCanvas skip canvas checks because this object is painted\n   * on parent canvas.\n   */\n  isCacheDirty(skipCanvas = false) {\n    if (this.isNotVisible()) {\n      return false;\n    }\n    const canvas = this._cacheCanvas;\n    const ctx = this._cacheContext;\n    if (canvas && ctx && !skipCanvas && this._updateCacheCanvas()) {\n      // in this case the context is already cleared.\n      return true;\n    } else {\n      if (this.dirty || (this.clipPath && this.clipPath.absolutePositioned)) {\n        if (canvas && ctx && !skipCanvas) {\n          ctx.save();\n          ctx.setTransform(1, 0, 0, 1, 0, 0);\n          ctx.clearRect(0, 0, canvas.width, canvas.height);\n          ctx.restore();\n        }\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Draws a background for the object big as its untransformed dimensions\n   * @private\n   * @param {CanvasRenderingContext2D} ctx Context to render on\n   */\n  _renderBackground(ctx: CanvasRenderingContext2D) {\n    if (!this.backgroundColor) {\n      return;\n    }\n    const dim = this._getNonTransformedDimensions();\n    ctx.fillStyle = this.backgroundColor;\n\n    ctx.fillRect(-dim.x / 2, -dim.y / 2, dim.x, dim.y);\n    // if there is background color no other shadows\n    // should be casted\n    this._removeShadow(ctx);\n  }\n\n  /**\n   * @private\n   * @param {CanvasRenderingContext2D} ctx Context to render on\n   */\n  _setOpacity(ctx: CanvasRenderingContext2D) {\n    if (this.group && !this.group._transformDone) {\n      ctx.globalAlpha = this.getObjectOpacity();\n    } else {\n      ctx.globalAlpha *= this.opacity;\n    }\n  }\n\n  _setStrokeStyles(\n    ctx: CanvasRenderingContext2D,\n    decl: Pick<\n      this,\n      | 'stroke'\n      | 'strokeWidth'\n      | 'strokeLineCap'\n      | 'strokeDashOffset'\n      | 'strokeLineJoin'\n      | 'strokeMiterLimit'\n    >,\n  ) {\n    const stroke = decl.stroke;\n    if (stroke) {\n      ctx.lineWidth = decl.strokeWidth;\n      ctx.lineCap = decl.strokeLineCap;\n      ctx.lineDashOffset = decl.strokeDashOffset;\n      ctx.lineJoin = decl.strokeLineJoin;\n      ctx.miterLimit = decl.strokeMiterLimit;\n      if (isFiller(stroke)) {\n        if (\n          (stroke as Gradient<'linear'>).gradientUnits === 'percentage' ||\n          (stroke as Gradient<'linear'>).gradientTransform ||\n          (stroke as Pattern).patternTransform\n        ) {\n          // need to transform gradient in a pattern.\n          // this is a slow process. If you are hitting this codepath, and the object\n          // is not using caching, you should consider switching it on.\n          // we need a canvas as big as the current object caching canvas.\n          this._applyPatternForTransformedGradient(ctx, stroke);\n        } else {\n          // is a simple gradient or pattern\n          ctx.strokeStyle = stroke.toLive(ctx)!;\n          this._applyPatternGradientTransform(ctx, stroke);\n        }\n      } else {\n        // is a color\n        ctx.strokeStyle = decl.stroke as string;\n      }\n    }\n  }\n\n  _setFillStyles(ctx: CanvasRenderingContext2D, { fill }: Pick<this, 'fill'>) {\n    if (fill) {\n      if (isFiller(fill)) {\n        ctx.fillStyle = fill.toLive(ctx)!;\n        this._applyPatternGradientTransform(ctx, fill);\n      } else {\n        ctx.fillStyle = fill;\n      }\n    }\n  }\n\n  _setClippingProperties(ctx: CanvasRenderingContext2D) {\n    ctx.globalAlpha = 1;\n    ctx.strokeStyle = 'transparent';\n    ctx.fillStyle = '#000000';\n  }\n\n  /**\n   * @private\n   * Sets line dash\n   * @param {CanvasRenderingContext2D} ctx Context to set the dash line on\n   * @param {Array} dashArray array representing dashes\n   */\n  _setLineDash(ctx: CanvasRenderingContext2D, dashArray?: number[] | null) {\n    if (!dashArray || dashArray.length === 0) {\n      return;\n    }\n    ctx.setLineDash(dashArray);\n  }\n\n  /**\n   * @private\n   * @param {CanvasRenderingContext2D} ctx Context to render on\n   */\n  _setShadow(ctx: CanvasRenderingContext2D) {\n    if (!this.shadow) {\n      return;\n    }\n\n    const shadow = this.shadow,\n      canvas = this.canvas,\n      retinaScaling = this.getCanvasRetinaScaling(),\n      [sx, , , sy] = canvas?.viewportTransform || iMatrix,\n      multX = sx * retinaScaling,\n      multY = sy * retinaScaling,\n      scaling = shadow.nonScaling ? new Point(1, 1) : this.getObjectScaling();\n    ctx.shadowColor = shadow.color;\n    ctx.shadowBlur =\n      (shadow.blur *\n        config.browserShadowBlurConstant *\n        (multX + multY) *\n        (scaling.x + scaling.y)) /\n      4;\n    ctx.shadowOffsetX = shadow.offsetX * multX * scaling.x;\n    ctx.shadowOffsetY = shadow.offsetY * multY * scaling.y;\n  }\n\n  /**\n   * @private\n   * @param {CanvasRenderingContext2D} ctx Context to render on\n   */\n  _removeShadow(ctx: CanvasRenderingContext2D) {\n    if (!this.shadow) {\n      return;\n    }\n\n    ctx.shadowColor = '';\n    ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\n  }\n\n  /**\n   * @private\n   * @param {CanvasRenderingContext2D} ctx Context to render on\n   * @param {TFiller} filler {@link Pattern} or {@link Gradient}\n   */\n  _applyPatternGradientTransform(\n    ctx: CanvasRenderingContext2D,\n    filler: TFiller,\n  ) {\n    if (!isFiller(filler)) {\n      return { offsetX: 0, offsetY: 0 };\n    }\n    const t =\n      (filler as Gradient<'linear'>).gradientTransform ||\n      (filler as Pattern).patternTransform;\n    const offsetX = -this.width / 2 + filler.offsetX || 0,\n      offsetY = -this.height / 2 + filler.offsetY || 0;\n\n    if ((filler as Gradient<'linear'>).gradientUnits === 'percentage') {\n      ctx.transform(this.width, 0, 0, this.height, offsetX, offsetY);\n    } else {\n      ctx.transform(1, 0, 0, 1, offsetX, offsetY);\n    }\n    if (t) {\n      ctx.transform(t[0], t[1], t[2], t[3], t[4], t[5]);\n    }\n    return { offsetX: offsetX, offsetY: offsetY };\n  }\n\n  /**\n   * @private\n   * @param {CanvasRenderingContext2D} ctx Context to render on\n   */\n  _renderPaintInOrder(ctx: CanvasRenderingContext2D) {\n    if (this.paintFirst === STROKE) {\n      this._renderStroke(ctx);\n      this._renderFill(ctx);\n    } else {\n      this._renderFill(ctx);\n      this._renderStroke(ctx);\n    }\n  }\n\n  /**\n   * @private\n   * function that actually render something on the context.\n   * empty here to allow Obects to work on tests to benchmark fabric functionalites\n   * not related to rendering\n   * @param {CanvasRenderingContext2D} _ctx Context to render on\n   */\n  _render(_ctx: CanvasRenderingContext2D) {\n    // placeholder to be overridden\n  }\n\n  /**\n   * @private\n   * @param {CanvasRenderingContext2D} ctx Context to render on\n   */\n  _renderFill(ctx: CanvasRenderingContext2D) {\n    if (!this.fill) {\n      return;\n    }\n\n    ctx.save();\n    this._setFillStyles(ctx, this);\n    if (this.fillRule === 'evenodd') {\n      ctx.fill('evenodd');\n    } else {\n      ctx.fill();\n    }\n    ctx.restore();\n  }\n\n  /**\n   * @private\n   * @param {CanvasRenderingContext2D} ctx Context to render on\n   */\n  _renderStroke(ctx: CanvasRenderingContext2D) {\n    if (!this.stroke || this.strokeWidth === 0) {\n      return;\n    }\n\n    if (this.shadow && !this.shadow.affectStroke) {\n      this._removeShadow(ctx);\n    }\n\n    ctx.save();\n    if (this.strokeUniform) {\n      const scaling = this.getObjectScaling();\n      ctx.scale(1 / scaling.x, 1 / scaling.y);\n    }\n    this._setLineDash(ctx, this.strokeDashArray);\n    this._setStrokeStyles(ctx, this);\n    ctx.stroke();\n    ctx.restore();\n  }\n\n  /**\n   * This function try to patch the missing gradientTransform on canvas gradients.\n   * transforming a context to transform the gradient, is going to transform the stroke too.\n   * we want to transform the gradient but not the stroke operation, so we create\n   * a transformed gradient on a pattern and then we use the pattern instead of the gradient.\n   * this method has drawbacks: is slow, is in low resolution, needs a patch for when the size\n   * is limited.\n   * @private\n   * @param {CanvasRenderingContext2D} ctx Context to render on\n   * @param {Gradient} filler\n   */\n  _applyPatternForTransformedGradient(\n    ctx: CanvasRenderingContext2D,\n    filler: TFiller,\n  ) {\n    const dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\n      retinaScaling = this.getCanvasRetinaScaling(),\n      width = dims.x / this.scaleX / retinaScaling,\n      height = dims.y / this.scaleY / retinaScaling,\n      pCanvas = createCanvasElementFor({\n        // in case width and height are less than 1px, we have to round up.\n        // since the pattern is no-repeat, this is fine\n        width: Math.ceil(width),\n        height: Math.ceil(height),\n      });\n\n    const pCtx = pCanvas.getContext('2d');\n    if (!pCtx) {\n      return;\n    }\n    pCtx.beginPath();\n    pCtx.moveTo(0, 0);\n    pCtx.lineTo(width, 0);\n    pCtx.lineTo(width, height);\n    pCtx.lineTo(0, height);\n    pCtx.closePath();\n    pCtx.translate(width / 2, height / 2);\n    pCtx.scale(\n      dims.zoomX / this.scaleX / retinaScaling,\n      dims.zoomY / this.scaleY / retinaScaling,\n    );\n    this._applyPatternGradientTransform(pCtx, filler);\n    pCtx.fillStyle = filler.toLive(ctx)!;\n    pCtx.fill();\n    ctx.translate(\n      -this.width / 2 - this.strokeWidth / 2,\n      -this.height / 2 - this.strokeWidth / 2,\n    );\n    ctx.scale(\n      (retinaScaling * this.scaleX) / dims.zoomX,\n      (retinaScaling * this.scaleY) / dims.zoomY,\n    );\n    ctx.strokeStyle = pCtx.createPattern(pCanvas, 'no-repeat') ?? '';\n  }\n\n  /**\n   * This function is an helper for svg import. it returns the center of the object in the svg\n   * untransformed coordinates\n   * It doesn't matter where the objects origin are, svg has left and top in the top left corner,\n   * And this method is only run once on the object after the fromElement parser.\n   * @private\n   * @return {Point} center point from element coordinates\n   */\n  _findCenterFromElement() {\n    return new Point(this.left + this.width / 2, this.top + this.height / 2);\n  }\n\n  /**\n   * Clones an instance.\n   * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n   * @returns {Promise<FabricObject>}\n   */\n  clone(propertiesToInclude?: string[]): Promise<this> {\n    const objectForm = this.toObject(propertiesToInclude);\n    return (this.constructor as typeof FabricObject).fromObject(\n      objectForm,\n    ) as unknown as Promise<this>;\n  }\n\n  /**\n   * Creates an instance of Image out of an object\n   * makes use of toCanvasElement.\n   * Once this method was based on toDataUrl and loadImage, so it also had a quality\n   * and format option. toCanvasElement is faster and produce no loss of quality.\n   * If you need to get a real Jpeg or Png from an object, using toDataURL is the right way to do it.\n   * toCanvasElement and then toBlob from the obtained canvas is also a good option.\n   * @todo fix the export type, it could not be Image but the type that getClass return for 'image'.\n   * @param {ObjectToCanvasElementOptions} [options] for clone as image, passed to toDataURL\n   * @param {Number} [options.multiplier=1] Multiplier to scale by\n   * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n   * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n   * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n   * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n   * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n   * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n   * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n   * @return {FabricImage} Object cloned as image.\n   */\n  cloneAsImage(options: ObjectToCanvasElementOptions): FabricImage {\n    const canvasEl = this.toCanvasElement(options);\n    // TODO: how to import Image w/o an import cycle?\n    const ImageClass = classRegistry.getClass<typeof FabricImage>('image');\n    return new ImageClass(canvasEl);\n  }\n\n  /**\n   * Converts an object into a HTMLCanvas element\n   * @param {ObjectToCanvasElementOptions} options Options object\n   * @param {Number} [options.multiplier=1] Multiplier to scale by\n   * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n   * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n   * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n   * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n   * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n   * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n   * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n   * @param {Boolean} [options.viewportTransform] Account for canvas viewport transform\n   * @param {(el?: HTMLCanvasElement) => StaticCanvas} [options.canvasProvider] Create the output canvas\n   * @return {HTMLCanvasElement} Returns DOM element <canvas> with the FabricObject\n   */\n  toCanvasElement(options: ObjectToCanvasElementOptions = {}) {\n    const origParams = saveObjectTransform(this),\n      originalGroup = this.group,\n      originalShadow = this.shadow,\n      abs = Math.abs,\n      retinaScaling = options.enableRetinaScaling ? getDevicePixelRatio() : 1,\n      multiplier = (options.multiplier || 1) * retinaScaling,\n      canvasProvider: (el: HTMLCanvasElement) => StaticCanvas =\n        options.canvasProvider ||\n        ((el: HTMLCanvasElement) =>\n          new StaticCanvas(el, {\n            enableRetinaScaling: false,\n            renderOnAddRemove: false,\n            skipOffscreen: false,\n          }));\n    delete this.group;\n    if (options.withoutTransform) {\n      resetObjectTransform(this);\n    }\n    if (options.withoutShadow) {\n      this.shadow = null;\n    }\n    if (options.viewportTransform) {\n      sendObjectToPlane(this, this.getViewportTransform());\n    }\n\n    this.setCoords();\n    const el = createCanvasElement(),\n      boundingRect = this.getBoundingRect(),\n      shadow = this.shadow,\n      shadowOffset = new Point();\n\n    if (shadow) {\n      const shadowBlur = shadow.blur;\n      const scaling = shadow.nonScaling\n        ? new Point(1, 1)\n        : this.getObjectScaling();\n      // consider non scaling shadow.\n      shadowOffset.x =\n        2 * Math.round(abs(shadow.offsetX) + shadowBlur) * abs(scaling.x);\n      shadowOffset.y =\n        2 * Math.round(abs(shadow.offsetY) + shadowBlur) * abs(scaling.y);\n    }\n    const width = boundingRect.width + shadowOffset.x,\n      height = boundingRect.height + shadowOffset.y;\n    // if the current width/height is not an integer\n    // we need to make it so.\n    el.width = Math.ceil(width);\n    el.height = Math.ceil(height);\n    const canvas = canvasProvider(el);\n    if (options.format === 'jpeg') {\n      canvas.backgroundColor = '#fff';\n    }\n    this.setPositionByOrigin(\n      new Point(canvas.width / 2, canvas.height / 2),\n      CENTER,\n      CENTER,\n    );\n    const originalCanvas = this.canvas;\n    // static canvas and canvas have both an array of InteractiveObjects\n    // @ts-expect-error this needs to be fixed somehow, or ignored globally\n    canvas._objects = [this];\n    this.set('canvas', canvas);\n    this.setCoords();\n    const canvasEl = canvas.toCanvasElement(multiplier || 1, options);\n    this.set('canvas', originalCanvas);\n    this.shadow = originalShadow;\n    if (originalGroup) {\n      this.group = originalGroup;\n    }\n    this.set(origParams);\n    this.setCoords();\n    // canvas.dispose will call image.dispose that will nullify the elements\n    // since this canvas is a simple element for the process, we remove references\n    // to objects in this way in order to avoid object trashing.\n    canvas._objects = [];\n    // since render has settled it is safe to destroy canvas\n    canvas.destroy();\n    return canvasEl;\n  }\n\n  /**\n   * Converts an object into a data-url-like string\n   * @param {Object} options Options object\n   * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\n   * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\n   * @param {Number} [options.multiplier=1] Multiplier to scale by\n   * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n   * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n   * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n   * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n   * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n   * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n   * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n   * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format\n   */\n  toDataURL(options: toDataURLOptions = {}) {\n    return toDataURL(\n      this.toCanvasElement(options),\n      options.format || 'png',\n      options.quality || 1,\n    );\n  }\n  toBlob(options: toDataURLOptions = {}) {\n    return toBlob(\n      this.toCanvasElement(options),\n      options.format || 'png',\n      options.quality || 1,\n    );\n  }\n\n  /**\n   * Checks if the instance is of any of the specified types.\n   * We use this to filter a list of objects for the `getObjects` function.\n   *\n   * For detecting an instance type `instanceOf` is a better check,\n   * but to avoid to make specific classes a dependency of generic code\n   * internally we use this.\n   *\n   * This compares both the static class `type` and the instance's own `type` property\n   * against the provided list of types.\n   *\n   * @param types - A list of type strings to check against.\n   * @returns `true` if the object's type or class type matches any in the list, otherwise `false`.\n   */\n  isType(...types: string[]) {\n    return (\n      types.includes((this.constructor as typeof FabricObject).type) ||\n      types.includes(this.type)\n    );\n  }\n\n  /**\n   * Returns complexity of an instance\n   * @return {Number} complexity of this instance (is 1 unless subclassed)\n   */\n  complexity() {\n    return 1;\n  }\n\n  /**\n   * Returns a JSON representation of an instance\n   * @return {Object} JSON\n   */\n  toJSON() {\n    // delegate, not alias\n    return this.toObject();\n  }\n\n  /**\n   * Sets \"angle\" of an instance with centered rotation\n   * @param {TDegree} angle Angle value (in degrees)\n   */\n  rotate(angle: TDegree) {\n    const { centeredRotation, originX, originY } = this;\n\n    if (centeredRotation) {\n      const { x, y } = this.getRelativeCenterPoint();\n      this.originX = CENTER;\n      this.originY = CENTER;\n      this.left = x;\n      this.top = y;\n    }\n\n    this.set('angle', angle);\n\n    if (centeredRotation) {\n      const { x, y } = this.getPositionByOrigin(originX, originY);\n      this.left = x;\n      this.top = y;\n      this.originX = originX;\n      this.originY = originY;\n    }\n  }\n\n  /**\n   * This callback function is called by the parent group of an object every\n   * time a non-delegated property changes on the group. It is passed the key\n   * and value as parameters. Not adding in this function's signature to avoid\n   * Travis build error about unused variables.\n   */\n  setOnGroup() {\n    // implemented by sub-classes, as needed.\n  }\n\n  /**\n   * Sets canvas globalCompositeOperation for specific object\n   * custom composition operation for the particular object can be specified using globalCompositeOperation property\n   * @param {CanvasRenderingContext2D} ctx Rendering canvas context\n   */\n  _setupCompositeOperation(ctx: CanvasRenderingContext2D) {\n    if (this.globalCompositeOperation) {\n      ctx.globalCompositeOperation = this.globalCompositeOperation;\n    }\n  }\n\n  /**\n   * cancel instance's running animations\n   * override if necessary to dispose artifacts such as `clipPath`\n   */\n  dispose() {\n    runningAnimations.cancelByTarget(this);\n    this.off();\n    this._set('canvas', undefined);\n    // clear caches\n    this._cacheCanvas && getEnv().dispose(this._cacheCanvas);\n    this._cacheCanvas = undefined;\n    this._cacheContext = null;\n  }\n\n  // #region Animation methods\n  /**\n   * List of properties to consider for animating colors.\n   * @type String[]\n   */\n  static colorProperties: string[] = [FILL, STROKE, 'backgroundColor'];\n\n  /**\n   * Animates object's properties\n   * @param {Record<string, number | number[] | TColorArg>} animatable map of keys and end values\n   * @param {Partial<AnimationOptions<T>>} options\n   * @see {@link http://fabric5.fabricjs.com/fabric-intro-part-2#animation}\n   * @return {Record<string, TAnimation<T>>} map of animation contexts\n   *\n   * As object — multiple properties\n   *\n   * object.animate({ left: ..., top: ... });\n   * object.animate({ left: ..., top: ... }, { duration: ... });\n   */\n  animate<T extends number | number[] | TColorArg>(\n    animatable: Record<string, T>,\n    options?: Partial<AnimationOptions<T>>,\n  ): Record<string, TAnimation<T>> {\n    return Object.entries(animatable).reduce(\n      (acc, [key, endValue]) => {\n        acc[key] = this._animate(key, endValue, options);\n        return acc;\n      },\n      {} as Record<string, TAnimation<T>>,\n    );\n  }\n\n  /**\n   * @private\n   * @param {String} key Property to animate\n   * @param {String} to Value to animate to\n   * @param {Object} [options] Options object\n   */\n  _animate<T extends number | number[] | TColorArg>(\n    key: string,\n    endValue: T,\n    options: Partial<AnimationOptions<T>> = {},\n  ): TAnimation<T> {\n    const path = key.split('.');\n    const propIsColor = (\n      this.constructor as typeof FabricObject\n    ).colorProperties.includes(path[path.length - 1]);\n    const { abort, startValue, onChange, onComplete } = options;\n    const animationOptions = {\n      ...options,\n      target: this,\n      // path.reduce... is the current value in case start value isn't provided\n      startValue:\n        startValue ?? path.reduce((deep: any, key) => deep[key], this),\n      endValue,\n      abort: abort?.bind(this),\n      onChange: (\n        value: number | number[] | string,\n        valueProgress: number,\n        durationProgress: number,\n      ) => {\n        path.reduce((deep: Record<string, any>, key, index) => {\n          if (index === path.length - 1) {\n            deep[key] = value;\n          }\n          return deep[key];\n        }, this);\n        onChange &&\n          // @ts-expect-error generic callback arg0 is wrong\n          onChange(value, valueProgress, durationProgress);\n      },\n      onComplete: (\n        value: number | number[] | string,\n        valueProgress: number,\n        durationProgress: number,\n      ) => {\n        this.setCoords();\n        onComplete &&\n          // @ts-expect-error generic callback arg0 is wrong\n          onComplete(value, valueProgress, durationProgress);\n      },\n    } as AnimationOptions<T>;\n\n    return (\n      propIsColor\n        ? animateColor(animationOptions as ColorAnimationOptions)\n        : animate(\n            animationOptions as ValueAnimationOptions | ArrayAnimationOptions,\n          )\n    ) as TAnimation<T>;\n  }\n\n  // #region Object stacking methods\n\n  /**\n   * A reference to the parent of the object\n   * Used to keep the original parent ref when the object has been added to an ActiveSelection, hence loosing the `group` ref\n   */\n  declare parent?: Group;\n\n  /**\n   * Checks if object is descendant of target\n   * Should be used instead of {@link Group.contains} or {@link StaticCanvas.contains} for performance reasons\n   * @param {TAncestor} target\n   * @returns {boolean}\n   */\n  isDescendantOf(target: TAncestor): boolean {\n    const { parent, group } = this;\n    return (\n      parent === target ||\n      group === target ||\n      // walk up\n      (!!parent && parent.isDescendantOf(target)) ||\n      (!!group && group !== parent && group.isDescendantOf(target))\n    );\n  }\n\n  /**\n   * @returns {Ancestors} ancestors (excluding `ActiveSelection`) from bottom to top\n   */\n  getAncestors(): Ancestors {\n    const ancestors: TAncestor[] = [];\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    let parent: TAncestor | undefined = this;\n    do {\n      parent = parent.parent;\n      parent && ancestors.push(parent);\n    } while (parent);\n    return ancestors as Ancestors;\n  }\n\n  /**\n   * Compare ancestors\n   *\n   * @param {StackedObject} other\n   * @returns {AncestryComparison} an object that represent the ancestry situation.\n   */\n  findCommonAncestors<T extends this>(other: T): AncestryComparison {\n    if (this === other) {\n      return {\n        fork: [],\n        otherFork: [],\n        common: [this, ...this.getAncestors()],\n      } as AncestryComparison;\n    }\n    const ancestors = this.getAncestors();\n    const otherAncestors = other.getAncestors();\n    //  if `this` has no ancestors and `this` is top ancestor of `other` we must handle the following case\n    if (\n      ancestors.length === 0 &&\n      otherAncestors.length > 0 &&\n      this === otherAncestors[otherAncestors.length - 1]\n    ) {\n      return {\n        fork: [],\n        otherFork: [\n          other,\n          ...otherAncestors.slice(0, otherAncestors.length - 1),\n        ],\n        common: [this],\n      } as AncestryComparison;\n    }\n    //  compare ancestors\n    for (let i = 0, ancestor; i < ancestors.length; i++) {\n      ancestor = ancestors[i];\n      if (ancestor === other) {\n        return {\n          fork: [this, ...ancestors.slice(0, i)],\n          otherFork: [],\n          common: ancestors.slice(i),\n        } as AncestryComparison;\n      }\n      for (let j = 0; j < otherAncestors.length; j++) {\n        if (this === otherAncestors[j]) {\n          return {\n            fork: [],\n            otherFork: [other, ...otherAncestors.slice(0, j)],\n            common: [this, ...ancestors],\n          } as AncestryComparison;\n        }\n        if (ancestor === otherAncestors[j]) {\n          return {\n            fork: [this, ...ancestors.slice(0, i)],\n            otherFork: [other, ...otherAncestors.slice(0, j)],\n            common: ancestors.slice(i),\n          } as AncestryComparison;\n        }\n      }\n    }\n    // nothing shared\n    return {\n      fork: [this, ...ancestors],\n      otherFork: [other, ...otherAncestors],\n      common: [],\n    } as AncestryComparison;\n  }\n\n  /**\n   *\n   * @param {StackedObject} other\n   * @returns {boolean}\n   */\n  hasCommonAncestors<T extends this>(other: T): boolean {\n    const commonAncestors = this.findCommonAncestors(other);\n    return commonAncestors && !!commonAncestors.common.length;\n  }\n\n  /**\n   *\n   * @param {FabricObject} other object to compare against\n   * @returns {boolean | undefined} if objects do not share a common ancestor or they are strictly equal it is impossible to determine which is in front of the other; in such cases the function returns `undefined`\n   */\n  isInFrontOf<T extends this>(other: T): boolean | undefined {\n    if (this === other) {\n      return undefined;\n    }\n    const ancestorData = this.findCommonAncestors(other);\n\n    if (ancestorData.fork.includes(other as any)) {\n      return true;\n    }\n    if (ancestorData.otherFork.includes(this as any)) {\n      return false;\n    }\n    // if there isn't a common ancestor, we take the canvas.\n    // if there is no canvas, there is nothing to compare\n    const firstCommonAncestor = ancestorData.common[0] || this.canvas;\n    if (!firstCommonAncestor) {\n      return undefined;\n    }\n    const headOfFork = ancestorData.fork.pop(),\n      headOfOtherFork = ancestorData.otherFork.pop(),\n      thisIndex = (firstCommonAncestor as TCollection)._objects.indexOf(\n        headOfFork as any,\n      ),\n      otherIndex = (firstCommonAncestor as TCollection)._objects.indexOf(\n        headOfOtherFork as any,\n      );\n    return thisIndex > -1 && thisIndex > otherIndex;\n  }\n\n  // #region Serialization\n  /**\n   * Define a list of custom properties that will be serialized when\n   * instance.toObject() gets called\n   */\n  static customProperties: string[] = [];\n\n  /**\n   * Returns an object representation of an instance\n   * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n   * @return {Object} Object representation of an instance\n   */\n  toObject(propertiesToInclude: any[] = []): any {\n    const propertiesToSerialize = propertiesToInclude.concat(\n      FabricObject.customProperties,\n      (this.constructor as typeof FabricObject).customProperties || [],\n    );\n    let clipPathData: Partial<SerializedObjectProps> | undefined;\n    const NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS;\n    const {\n      clipPath,\n      fill,\n      stroke,\n      shadow,\n      strokeDashArray,\n      left,\n      top,\n      originX,\n      originY,\n      width,\n      height,\n      strokeWidth,\n      strokeLineCap,\n      strokeDashOffset,\n      strokeLineJoin,\n      strokeUniform,\n      strokeMiterLimit,\n      scaleX,\n      scaleY,\n      angle,\n      flipX,\n      flipY,\n      opacity,\n      visible,\n      backgroundColor,\n      fillRule,\n      paintFirst,\n      globalCompositeOperation,\n      skewX,\n      skewY,\n    } = this;\n    if (clipPath && !clipPath.excludeFromExport) {\n      clipPathData = clipPath.toObject(\n        propertiesToSerialize.concat('inverted', 'absolutePositioned'),\n      );\n    }\n    const toFixedBound = (val: number) => toFixed(val, NUM_FRACTION_DIGITS);\n    const object = {\n      ...pick(this, propertiesToSerialize as (keyof this)[]),\n      type: (this.constructor as typeof FabricObject).type,\n      version: VERSION,\n      originX,\n      originY,\n      left: toFixedBound(left),\n      top: toFixedBound(top),\n      width: toFixedBound(width),\n      height: toFixedBound(height),\n      fill: isSerializableFiller(fill) ? fill.toObject() : fill,\n      stroke: isSerializableFiller(stroke) ? stroke.toObject() : stroke,\n      strokeWidth: toFixedBound(strokeWidth),\n      strokeDashArray: strokeDashArray\n        ? strokeDashArray.concat()\n        : strokeDashArray,\n      strokeLineCap,\n      strokeDashOffset,\n      strokeLineJoin,\n      strokeUniform,\n      strokeMiterLimit: toFixedBound(strokeMiterLimit),\n      scaleX: toFixedBound(scaleX),\n      scaleY: toFixedBound(scaleY),\n      angle: toFixedBound(angle),\n      flipX,\n      flipY,\n      opacity: toFixedBound(opacity),\n      shadow: shadow ? shadow.toObject() : shadow,\n      visible,\n      backgroundColor,\n      fillRule,\n      paintFirst,\n      globalCompositeOperation,\n      skewX: toFixedBound(skewX),\n      skewY: toFixedBound(skewY),\n      ...(clipPathData ? { clipPath: clipPathData } : null),\n    };\n\n    return !this.includeDefaultValues\n      ? this._removeDefaultValues(object)\n      : object;\n  }\n\n  /**\n   * Returns (dataless) object representation of an instance\n   * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n   * @return {Object} Object representation of an instance\n   */\n  toDatalessObject(propertiesToInclude?: any[]): any {\n    // will be overwritten by subclasses\n    return this.toObject(propertiesToInclude);\n  }\n\n  /**\n   * @private\n   * @param {Object} object\n   */\n  _removeDefaultValues<T extends object>(object: T): Partial<T> {\n    // getDefaults() ( get from static ownDefaults ) should win over prototype since anyway they get assigned to instance\n    // ownDefault vs prototype is swappable only if you change all the fabric objects consistently.\n    const defaults = (this.constructor as typeof FabricObject).getDefaults();\n    const hasStaticDefaultValues = Object.keys(defaults).length > 0;\n    const baseValues = hasStaticDefaultValues\n      ? defaults\n      : Object.getPrototypeOf(this);\n\n    return pickBy(object, (value, key) => {\n      if (key === LEFT || key === TOP || key === 'type') {\n        return true;\n      }\n      const baseValue = baseValues[key];\n      return (\n        value !== baseValue &&\n        // basically a check for [] === []\n        !(\n          Array.isArray(value) &&\n          Array.isArray(baseValue) &&\n          value.length === 0 &&\n          baseValue.length === 0\n        )\n      );\n    });\n  }\n\n  /**\n   * Returns a string representation of an instance\n   * @return {String}\n   */\n  toString() {\n    return `#<${(this.constructor as typeof FabricObject).type}>`;\n  }\n\n  /**\n   *\n   * @param {Function} klass\n   * @param {object} object\n   * @param {object} [options]\n   * @param {string} [options.extraParam] property to pass as first argument to the constructor\n   * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n   * @returns {Promise<FabricObject>}\n   */\n  static _fromObject<S extends FabricObject>(\n    { type, ...serializedObjectOptions }: Record<string, unknown>,\n    { extraParam, ...options }: Abortable & { extraParam?: string } = {},\n  ): Promise<S> {\n    return enlivenObjectEnlivables<any>(serializedObjectOptions, options).then(\n      (enlivedObjectOptions) => {\n        // from the resulting enlived options, extract options.extraParam to arg0\n        // to avoid accidental overrides later\n        if (extraParam) {\n          delete enlivedObjectOptions[extraParam];\n          return new this(\n            serializedObjectOptions[extraParam],\n            // @ts-expect-error different signature\n            enlivedObjectOptions,\n          );\n        } else {\n          return new this(enlivedObjectOptions);\n        }\n      },\n    ) as Promise<S>;\n  }\n\n  /**\n   *\n   * @param {object} object\n   * @param {object} [options]\n   * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n   * @returns {Promise<FabricObject>}\n   */\n  static fromObject<T extends TOptions<SerializedObjectProps>>(\n    object: T,\n    options?: Abortable,\n  ) {\n    return this._fromObject(object, options);\n  }\n}\n\nclassRegistry.setClass(FabricObject);\nclassRegistry.setClass(FabricObject, 'object');\n"],"names":["FabricObject","ObjectGeometry","getDefaults","ownDefaults","type","name","constructor","toLowerCase","value","log","options","_defineProperty","Object","assign","setOptions","_createCacheCanvas","_cacheCanvas","createCanvasElement","_cacheContext","getContext","_updateCacheCanvas","dirty","_limitCacheSize","dims","width","height","max","config","maxCacheSideLimit","min","minCacheSideLimit","perfLimitSizeTotal","ar","limX","limY","cache","limitDimsByArea","x","capValue","y","zoomX","capped","zoomY","_getCacheCanvasDimensions","objectScale","getTotalObjectScaling","dim","_getTransformedDimensions","skewX","skewY","neededX","scaleX","neededY","scaleY","Math","ceil","ALIASING_LIMIT","canvas","context","dimensionsChanged","zoomChanged","shouldRedraw","setTransform","clearRect","drawingWidth","drawingHeight","cacheTranslationX","round","cacheTranslationY","translate","scale","arguments","length","undefined","_setOptions","transform","ctx","needFullTransform","group","_transformDone","contextTop","m","calcTransformMatrix","getObjectScaling","Point","abs","qrDecompose","zoom","getZoom","retina","getCanvasRetinaScaling","scalarMultiply","getObjectOpacity","opacity","_constrainScale","minScaleLimit","_set","key","SCALE_X","SCALE_Y","flipX","flipY","Shadow","isChanged","cacheProperties","includes","parent","stateProperties","isNotVisible","strokeWidth","visible","render","skipOffscreen","isOnScreen","save","_setupCompositeOperation","drawSelectionBackground","_setOpacity","_setShadow","shouldCache","renderCache","drawCacheOnCanvas","_removeCacheCanvas","drawObject","restore","_ctx","isCacheDirty","forClipping","parentClipPaths","hasStroke","stroke","hasFill","fill","needsItsOwnCache","paintFirst","STROKE","shadow","clipPath","ownCaching","objectCaching","isOnACache","willDrawShadow","offsetX","offsetY","drawClipPathOnCache","canvasWithClipPath","inverted","globalCompositeOperation","drawImage","originalFill","originalStroke","_setClippingProperties","_renderBackground","fire","_render","_drawClipPath","createClipPathLayer","createCanvasElementFor","forEach","prevClipPath","push","absolutePositioned","invertTransform","skipCanvas","backgroundColor","_getNonTransformedDimensions","fillStyle","fillRect","_removeShadow","globalAlpha","_setStrokeStyles","decl","lineWidth","lineCap","strokeLineCap","lineDashOffset","strokeDashOffset","lineJoin","strokeLineJoin","miterLimit","strokeMiterLimit","isFiller","gradientUnits","gradientTransform","patternTransform","_applyPatternForTransformedGradient","strokeStyle","toLive","_applyPatternGradientTransform","_setFillStyles","_ref","_setLineDash","dashArray","setLineDash","retinaScaling","sx","sy","viewportTransform","iMatrix","multX","multY","scaling","nonScaling","shadowColor","color","shadowBlur","blur","browserShadowBlurConstant","shadowOffsetX","shadowOffsetY","filler","t","_renderPaintInOrder","_renderStroke","_renderFill","fillRule","affectStroke","strokeUniform","strokeDashArray","_pCtx$createPattern","pCanvas","pCtx","beginPath","moveTo","lineTo","closePath","createPattern","_findCenterFromElement","left","top","clone","propertiesToInclude","objectForm","toObject","fromObject","cloneAsImage","canvasEl","toCanvasElement","ImageClass","classRegistry","getClass","origParams","saveObjectTransform","originalGroup","originalShadow","enableRetinaScaling","getDevicePixelRatio","multiplier","canvasProvider","el","StaticCanvas","renderOnAddRemove","withoutTransform","resetObjectTransform","withoutShadow","sendObjectToPlane","getViewportTransform","setCoords","boundingRect","getBoundingRect","shadowOffset","format","setPositionByOrigin","CENTER","originalCanvas","_objects","set","destroy","toDataURL","quality","toBlob","isType","_len","types","Array","_key","complexity","toJSON","rotate","angle","centeredRotation","originX","originY","getRelativeCenterPoint","getPositionByOrigin","setOnGroup","dispose","runningAnimations","cancelByTarget","off","getEnv","animate","animatable","entries","reduce","acc","_ref2","endValue","_animate","path","split","propIsColor","colorProperties","abort","startValue","onChange","onComplete","animationOptions","target","deep","bind","valueProgress","durationProgress","index","animateColor","isDescendantOf","getAncestors","ancestors","findCommonAncestors","other","fork","otherFork","common","otherAncestors","slice","i","ancestor","j","hasCommonAncestors","commonAncestors","isInFrontOf","ancestorData","firstCommonAncestor","headOfFork","pop","headOfOtherFork","thisIndex","indexOf","otherIndex","propertiesToSerialize","concat","customProperties","clipPathData","NUM_FRACTION_DIGITS","excludeFromExport","toFixedBound","val","toFixed","object","pick","version","VERSION","isSerializableFiller","includeDefaultValues","_removeDefaultValues","toDatalessObject","defaults","hasStaticDefaultValues","keys","baseValues","getPrototypeOf","pickBy","LEFT","TOP","baseValue","isArray","toString","_fromObject","_ref3","serializedObjectOptions","extraParam","enlivenObjectEnlivables","then","enlivedObjectOptions","fabricObjectDefaultValues","FILL","setClass"],"mappings":"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"}