{"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  TOP,\n  VERSION,\n} from '../../constants';\nimport type { ObjectEvents } from '../../EventTypeDefs';\nimport { AnimatableObject } from './AnimatableObject';\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 { cloneDeep } from '../../util/internals/cloneDeep';\nimport { capValue } from '../../util/misc/capValue';\nimport { createCanvasElement, toDataURL } 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 {\n  isFiller,\n  isSerializableFiller,\n  isTextObject,\n} 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';\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\n/**\n * Root object class from which all 2d shape classes inherit from\n * @tutorial {@link http://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    SProps extends SerializedObjectProps = SerializedObjectProps,\n    EventSpec extends ObjectEvents = ObjectEvents\n  >\n  extends AnimatableObject<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   * @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   * @param {Object} dims\n   * @param {Object} dims.width width of canvas\n   * @param {Object} dims.height height of canvas\n   * @param {Object} dims.zoomX zoomX zoom value to unscale the canvas before drawing cache\n   * @param {Object} dims.zoomY zoomY zoom value to unscale the canvas before drawing cache\n   * @return {Object}.width width of canvas\n   * @return {Object}.height height of canvas\n   * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n   * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n   */\n  _limitCacheSize(\n    dims: TSize & { zoomX: number; zoomY: number; capped: boolean } & any\n  ) {\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 {Object}.x width of object to be cached\n   * @return {Object}.y height of object to be cached\n   * @return {Object}.width width of canvas\n   * @return {Object}.height height of canvas\n   * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n   * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\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: neededX + ALIASING_LIMIT,\n      height: 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      dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\n      minCacheSize = config.minCacheSideLimit,\n      width = dims.width,\n      height = dims.height,\n      zoomX = dims.zoomX,\n      zoomY = dims.zoomY,\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    let drawingWidth,\n      drawingHeight,\n      shouldRedraw = dimensionsChanged || zoomChanged,\n      additionalWidth = 0,\n      additionalHeight = 0,\n      shouldResizeCanvas = false;\n\n    if (dimensionsChanged) {\n      const canvasWidth = (this._cacheCanvas as HTMLCanvasElement).width,\n        canvasHeight = (this._cacheCanvas as HTMLCanvasElement).height,\n        sizeGrowing = width > canvasWidth || height > canvasHeight,\n        sizeShrinking =\n          (width < canvasWidth * 0.9 || height < canvasHeight * 0.9) &&\n          canvasWidth > minCacheSize &&\n          canvasHeight > minCacheSize;\n      shouldResizeCanvas = sizeGrowing || sizeShrinking;\n      if (\n        sizeGrowing &&\n        !dims.capped &&\n        (width > minCacheSize || height > minCacheSize)\n      ) {\n        additionalWidth = width * 0.1;\n        additionalHeight = height * 0.1;\n      }\n    }\n    if (isTextObject(this) && this.path) {\n      shouldRedraw = true;\n      shouldResizeCanvas = true;\n      // IMHO in those lines we are using zoomX and zoomY not the this version.\n      additionalWidth += this.getHeightOfLine(0) * this.zoomX!;\n      additionalHeight += this.getHeightOfLine(0) * this.zoomY!;\n    }\n    if (shouldRedraw) {\n      if (shouldResizeCanvas) {\n        canvas.width = Math.ceil(width + additionalWidth);\n        canvas.height = Math.ceil(height + additionalHeight);\n      } else {\n        context.setTransform(1, 0, 0, 1, 0, 0);\n        context.clearRect(0, 0, canvas.width, canvas.height);\n      }\n      drawingWidth = dims.x / 2;\n      drawingHeight = dims.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   * 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 NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS,\n      clipPathData =\n        this.clipPath && !this.clipPath.excludeFromExport\n          ? {\n              ...this.clipPath.toObject(propertiesToInclude),\n              inverted: this.clipPath.inverted,\n              absolutePositioned: this.clipPath.absolutePositioned,\n            }\n          : null,\n      object = {\n        ...pick(this, propertiesToInclude as (keyof this)[]),\n        type: (this.constructor as typeof FabricObject).type,\n        version: VERSION,\n        originX: this.originX,\n        originY: this.originY,\n        left: toFixed(this.left, NUM_FRACTION_DIGITS),\n        top: toFixed(this.top, NUM_FRACTION_DIGITS),\n        width: toFixed(this.width, NUM_FRACTION_DIGITS),\n        height: toFixed(this.height, NUM_FRACTION_DIGITS),\n        fill: isSerializableFiller(this.fill)\n          ? this.fill.toObject()\n          : this.fill,\n        stroke: isSerializableFiller(this.stroke)\n          ? this.stroke.toObject()\n          : this.stroke,\n        strokeWidth: toFixed(this.strokeWidth, NUM_FRACTION_DIGITS),\n        strokeDashArray: this.strokeDashArray\n          ? this.strokeDashArray.concat()\n          : this.strokeDashArray,\n        strokeLineCap: this.strokeLineCap,\n        strokeDashOffset: this.strokeDashOffset,\n        strokeLineJoin: this.strokeLineJoin,\n        strokeUniform: this.strokeUniform,\n        strokeMiterLimit: toFixed(this.strokeMiterLimit, NUM_FRACTION_DIGITS),\n        scaleX: toFixed(this.scaleX, NUM_FRACTION_DIGITS),\n        scaleY: toFixed(this.scaleY, NUM_FRACTION_DIGITS),\n        angle: toFixed(this.angle, NUM_FRACTION_DIGITS),\n        flipX: this.flipX,\n        flipY: this.flipY,\n        opacity: toFixed(this.opacity, NUM_FRACTION_DIGITS),\n        shadow:\n          this.shadow && this.shadow.toObject\n            ? this.shadow.toObject()\n            : this.shadow,\n        visible: this.visible,\n        backgroundColor: this.backgroundColor,\n        fillRule: this.fillRule,\n        paintFirst: this.paintFirst,\n        globalCompositeOperation: this.globalCompositeOperation,\n        skewX: toFixed(this.skewX, NUM_FRACTION_DIGITS),\n        skewY: toFixed(this.skewY, NUM_FRACTION_DIGITS),\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   * 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   * @private\n   * return if the object would be visible in rendering\n   * @memberOf FabricObject.prototype\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.renderCache();\n      (this as TCachedFabricObject).drawCacheOnCanvas(ctx);\n    } else {\n      this._removeCacheCanvas();\n      this.drawObject(ctx);\n      this.dirty = false;\n    }\n    ctx.restore();\n  }\n\n  drawSelectionBackground(ctx: CanvasRenderingContext2D) {\n    /* no op */\n  }\n\n  renderCache(options?: any) {\n    options = options || {};\n    if (!this._cacheCanvas || !this._cacheContext) {\n      this._createCacheCanvas();\n    }\n    if (this.isCacheDirty() && this._cacheContext) {\n      this.drawObject(this._cacheContext, options.forClipping);\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() {\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() {\n    return this.fill && this.fill !== 'transparent';\n  }\n\n  /**\n   * When set to `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    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. None of the fabric classes requires it.\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.needsItsOwnCache() ||\n      (this.objectCaching && (!this.parent || !this.parent.isOnACache()));\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: TCachedFabricObject\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.scale(1 / 2, 1 / 2);\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    ctx.scale(1 / clipPath.zoomX, 1 / clipPath.zoomY);\n    ctx.drawImage(\n      clipPath._cacheCanvas,\n      -clipPath.cacheTranslationX,\n      -clipPath.cacheTranslationY\n    );\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   */\n  drawObject(ctx: CanvasRenderingContext2D, forClipping?: boolean) {\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._render(ctx);\n    this._drawClipPath(ctx, this.clipPath);\n    this.fill = originalFill;\n    this.stroke = originalStroke;\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(ctx: CanvasRenderingContext2D, clipPath?: FabricObject) {\n    if (!clipPath) {\n      return;\n    }\n    // needed to setup a couple of variables\n    // path canvas gets overridden with this one.\n    // TODO find a better solution?\n    clipPath._set('canvas', this.canvas);\n    clipPath.shouldCache();\n    clipPath._transformDone = true;\n    clipPath.renderCache({ forClipping: true });\n    this.drawClipPathOnCache(ctx, clipPath as TCachedFabricObject);\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\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    // Spec requires the concatenation of two copies of the dash array when the number of elements is odd\n    if (1 & dashArray.length) {\n      dashArray.push(...dashArray);\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      pCanvas = createCanvasElement(),\n      retinaScaling = this.getCanvasRetinaScaling(),\n      width = dims.x / this.scaleX / retinaScaling,\n      height = dims.y / this.scaleY / retinaScaling;\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    pCanvas.width = Math.ceil(width);\n    pCanvas.height = Math.ceil(height);\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   * @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\n  /**\n   * Returns true if any of the specified types is identical to the type of an instance\n   * @param {String} type Type to check against\n   * @return {Boolean}\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.translateToOriginPoint(\n        this.getRelativeCenterPoint(),\n        originX,\n        originY\n      );\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  /**\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, ...object }: Record<string, unknown>,\n    { extraParam, ...options }: Abortable & { extraParam?: string } = {}\n  ): Promise<S> {\n    return enlivenObjectEnlivables<any>(cloneDeep(object), options).then(\n      (enlivedMap) => {\n        const allOptions = { ...options, ...enlivedMap };\n        // from the resulting enlived options, extract options.extraParam to arg0\n        // to avoid accidental overrides later\n        if (extraParam) {\n          const { [extraParam]: arg0, ...rest } = allOptions;\n          // @ts-expect-error different signature\n          return new this(arg0, rest);\n        } else {\n          return new this(allOptions);\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","AnimatableObject","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","ALIASING_LIMIT","canvas","context","minCacheSize","dimensionsChanged","zoomChanged","drawingWidth","drawingHeight","shouldRedraw","additionalWidth","additionalHeight","shouldResizeCanvas","canvasWidth","canvasHeight","sizeGrowing","sizeShrinking","isTextObject","path","getHeightOfLine","Math","ceil","setTransform","clearRect","cacheTranslationX","round","cacheTranslationY","translate","scale","arguments","length","undefined","_setOptions","transform","ctx","needFullTransform","group","_transformDone","contextTop","m","calcTransformMatrix","toObject","propertiesToInclude","NUM_FRACTION_DIGITS","clipPathData","clipPath","excludeFromExport","_objectSpread","inverted","absolutePositioned","object","pick","version","VERSION","originX","originY","left","toFixed","top","fill","isSerializableFiller","stroke","strokeWidth","strokeDashArray","concat","strokeLineCap","strokeDashOffset","strokeLineJoin","strokeUniform","strokeMiterLimit","angle","flipX","flipY","opacity","shadow","visible","backgroundColor","fillRule","paintFirst","globalCompositeOperation","includeDefaultValues","_removeDefaultValues","toDatalessObject","defaults","hasStaticDefaultValues","keys","baseValues","getPrototypeOf","pickBy","key","LEFT","TOP","baseValue","Array","isArray","toString","getObjectScaling","Point","abs","qrDecompose","zoom","getZoom","retina","getCanvasRetinaScaling","scalarMultiply","getObjectOpacity","_constrainScale","minScaleLimit","_set","SCALE_X","SCALE_Y","Shadow","isChanged","cacheProperties","includes","parent","stateProperties","isNotVisible","render","skipOffscreen","isOnScreen","save","_setupCompositeOperation","drawSelectionBackground","_setOpacity","_setShadow","shouldCache","renderCache","drawCacheOnCanvas","_removeCacheCanvas","drawObject","restore","isCacheDirty","forClipping","hasStroke","hasFill","needsItsOwnCache","STROKE","ownCaching","objectCaching","isOnACache","willDrawShadow","offsetX","offsetY","drawClipPathOnCache","invertTransform","drawImage","originalFill","originalStroke","_setClippingProperties","_renderBackground","_render","_drawClipPath","skipCanvas","_getNonTransformedDimensions","fillStyle","fillRect","_removeShadow","globalAlpha","_setStrokeStyles","decl","lineWidth","lineCap","lineDashOffset","lineJoin","miterLimit","isFiller","gradientUnits","gradientTransform","patternTransform","_applyPatternForTransformedGradient","strokeStyle","toLive","_applyPatternGradientTransform","_setFillStyles","_ref","_setLineDash","dashArray","push","setLineDash","retinaScaling","sx","sy","viewportTransform","iMatrix","multX","multY","scaling","nonScaling","shadowColor","color","shadowBlur","blur","browserShadowBlurConstant","shadowOffsetX","shadowOffsetY","filler","t","_renderPaintInOrder","_renderStroke","_renderFill","affectStroke","_pCtx$createPattern","pCanvas","pCtx","beginPath","moveTo","lineTo","closePath","createPattern","_findCenterFromElement","clone","objectForm","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","isType","_len","types","_key","complexity","toJSON","rotate","centeredRotation","getRelativeCenterPoint","translateToOriginPoint","setOnGroup","dispose","runningAnimations","cancelByTarget","off","getEnv","_fromObject","_ref2","_objectWithoutProperties","_excluded","_ref3","extraParam","_excluded2","enlivenObjectEnlivables","cloneDeep","then","enlivedMap","allOptions","arg0","rest","map","_toPropertyKey","fabricObjectDefaultValues","setClass"],"mappings":"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"}