{"version":3,"file":"StaticCanvas.mjs","sources":["../../../src/canvas/StaticCanvas.ts"],"sourcesContent":["import { config } from '../config';\nimport { CENTER, VERSION } from '../constants';\nimport type { CanvasEvents, StaticCanvasEvents } from '../EventTypeDefs';\nimport type { Gradient } from '../gradient/Gradient';\nimport { createCollectionMixin, isCollection } from '../Collection';\nimport { CommonMethods } from '../CommonMethods';\nimport type { Pattern } from '../Pattern';\nimport { Point } from '../Point';\nimport type { TCachedFabricObject } from '../shapes/Object/Object';\nimport type {\n  Abortable,\n  Constructor,\n  TCornerPoint,\n  TDataUrlOptions,\n  TFiller,\n  TMat2D,\n  TSize,\n  TSVGReviver,\n  TToCanvasElementOptions,\n  TValidToObjectMethod,\n  TOptions,\n} from '../typedefs';\nimport {\n  cancelAnimFrame,\n  requestAnimFrame,\n} from '../util/animation/AnimationFrameProvider';\nimport { runningAnimations } from '../util/animation/AnimationRegistry';\nimport { uid } from '../util/internals/uid';\nimport { createCanvasElementFor, toBlob, toDataURL } from '../util/misc/dom';\nimport { invertTransform, transformPoint } from '../util/misc/matrix';\nimport type { EnlivenObjectOptions } from '../util/misc/objectEnlive';\nimport {\n  enlivenObjectEnlivables,\n  enlivenObjects,\n} from '../util/misc/objectEnlive';\nimport { pick } from '../util/misc/pick';\nimport { matrixToSVG } from '../util/misc/svgExport';\nimport { toFixed } from '../util/misc/toFixed';\nimport { isFiller, isPattern, isTextObject } from '../util/typeAssertions';\nimport { StaticCanvasDOMManager } from './DOMManagers/StaticCanvasDOMManager';\nimport type { CSSDimensions } from './DOMManagers/util';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { StaticCanvasOptions } from './StaticCanvasOptions';\nimport { staticCanvasDefaults } from './StaticCanvasOptions';\nimport { log, FabricError } from '../util/internals/console';\nimport { getDevicePixelRatio } from '../env';\nimport { escapeXml } from '../util/lang_string';\n\n/**\n * Having both options in TCanvasSizeOptions set to true transform the call in a calcOffset\n * Better try to restrict with types to avoid confusion.\n */\nexport type TCanvasSizeOptions =\n  | {\n      backstoreOnly?: true;\n      cssOnly?: false;\n    }\n  | {\n      backstoreOnly?: false;\n      cssOnly?: true;\n    };\n\nexport type TSVGExportOptions = {\n  suppressPreamble?: boolean;\n  viewBox?: {\n    x: number;\n    y: number;\n    width: number;\n    height: number;\n  };\n  encoding?: 'UTF-8'; // test Encoding type and see what happens\n  width?: string;\n  height?: string;\n  reviver?: TSVGReviver;\n};\n\nexport type PatternQuality = 'fast' | 'good' | 'best' | 'nearest' | 'bilinear';\n\n/**\n * Static canvas class\n * @see {@link http://fabric5.fabricjs.com/static_canvas|StaticCanvas demo}\n * @fires before:render\n * @fires after:render\n * @fires canvas:cleared\n * @fires object:added\n * @fires object:removed\n */\n// TODO: fix `EventSpec` inheritance https://github.com/microsoft/TypeScript/issues/26154#issuecomment-1366616260\nexport class StaticCanvas<\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  EventSpec extends StaticCanvasEvents = StaticCanvasEvents,\n>\n  extends createCollectionMixin(CommonMethods<CanvasEvents>)\n  implements StaticCanvasOptions\n{\n  declare width: number;\n  declare height: number;\n\n  // background\n  declare backgroundVpt: boolean;\n  declare backgroundColor: TFiller | string;\n  declare backgroundImage?: FabricObject;\n  // overlay\n  declare overlayVpt: boolean;\n  declare overlayColor: TFiller | string;\n  declare overlayImage?: FabricObject;\n\n  declare clipPath?: FabricObject;\n\n  declare includeDefaultValues: boolean;\n\n  // rendering config\n  declare renderOnAddRemove: boolean;\n  declare skipOffscreen: boolean;\n  declare enableRetinaScaling: boolean;\n  declare imageSmoothingEnabled: boolean;\n\n  /**\n   * @todo move to Canvas\n   */\n  declare controlsAboveOverlay: boolean;\n\n  /**\n   * @todo move to Canvas\n   */\n  declare allowTouchScrolling: boolean;\n\n  declare viewportTransform: TMat2D;\n\n  /**\n   * The viewport bounding box in scene plane coordinates, see {@link calcViewportBoundaries}\n   */\n  declare vptCoords: TCornerPoint;\n\n  /**\n   * A reference to the canvas actual HTMLCanvasElement.\n   * Can be use to read the raw pixels, but never write or manipulate\n   * @type HTMLCanvasElement\n   */\n  get lowerCanvasEl() {\n    return this.elements.lower?.el;\n  }\n\n  get contextContainer() {\n    return this.elements.lower?.ctx;\n  }\n\n  /**\n   * If true the Canvas is in the process or has been disposed/destroyed.\n   * No more rendering operation will be executed on this canvas.\n   * @type boolean\n   */\n  declare destroyed?: boolean;\n\n  /**\n   * Started the process of disposing but not done yet.\n   * WIll likely complete the render cycle already scheduled but stopping adding more.\n   * @type boolean\n   */\n  declare disposed?: boolean;\n\n  declare _offset: { left: number; top: number };\n  declare protected hasLostContext: boolean;\n  declare protected nextRenderHandle: number;\n\n  declare elements: StaticCanvasDOMManager;\n\n  /**\n   * When true control drawing is skipped.\n   * This boolean is used to avoid toDataURL to export controls.\n   * Usage of this boolean to build up other flows and features is not supported\n   * @type Boolean\n   * @default false\n   */\n  declare protected skipControlsDrawing: boolean;\n\n  /**\n   * Controls the rendering of images under node-canvas.\n   * Has no effects on the browser context.\n   */\n  declare patternQuality: PatternQuality;\n\n  static ownDefaults = staticCanvasDefaults;\n\n  // reference to\n  declare protected __cleanupTask?: {\n    (): void;\n    kill: (reason?: any) => void;\n  };\n\n  static getDefaults(): Record<string, any> {\n    return StaticCanvas.ownDefaults;\n  }\n\n  constructor(\n    el?: string | HTMLCanvasElement,\n    options: TOptions<StaticCanvasOptions> = {},\n  ) {\n    super();\n    Object.assign(\n      this,\n      (this.constructor as typeof StaticCanvas).getDefaults(),\n    );\n    this.set(options);\n    this.initElements(el);\n    this._setDimensionsImpl({\n      width: this.width || this.elements.lower.el.width || 0,\n      height: this.height || this.elements.lower.el.height || 0,\n    });\n    this.skipControlsDrawing = false;\n    this.viewportTransform = [...this.viewportTransform];\n    this.calcViewportBoundaries();\n  }\n\n  protected initElements(el?: string | HTMLCanvasElement) {\n    this.elements = new StaticCanvasDOMManager(el);\n  }\n\n  add(...objects: FabricObject[]) {\n    const size = super.add(...objects);\n    objects.length > 0 && this.renderOnAddRemove && this.requestRenderAll();\n    return size;\n  }\n\n  insertAt(index: number, ...objects: FabricObject[]) {\n    const size = super.insertAt(index, ...objects);\n    objects.length > 0 && this.renderOnAddRemove && this.requestRenderAll();\n    return size;\n  }\n\n  remove(...objects: FabricObject[]) {\n    const removed = super.remove(...objects);\n    removed.length > 0 && this.renderOnAddRemove && this.requestRenderAll();\n    return removed;\n  }\n\n  _onObjectAdded(obj: FabricObject) {\n    if (obj.canvas && (obj.canvas as StaticCanvas) !== this) {\n      log(\n        'warn',\n        'Canvas is trying to add an object that belongs to a different canvas.\\n' +\n          'Resulting to default behavior: removing object from previous canvas and adding to new canvas',\n      );\n      obj.canvas.remove(obj);\n    }\n    obj._set('canvas', this);\n    obj.setCoords();\n    this.fire('object:added', { target: obj });\n    obj.fire('added', { target: this });\n  }\n\n  _onObjectRemoved(obj: FabricObject) {\n    obj._set('canvas', undefined);\n    this.fire('object:removed', { target: obj });\n    obj.fire('removed', { target: this });\n  }\n\n  _onStackOrderChanged() {\n    this.renderOnAddRemove && this.requestRenderAll();\n  }\n\n  /**\n   * @private\n   * @see https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/HTML-canvas-guide/SettingUptheCanvas/SettingUptheCanvas.html\n   * @return {Number} retinaScaling if applied, otherwise 1;\n   */\n  getRetinaScaling() {\n    return this.enableRetinaScaling ? getDevicePixelRatio() : 1;\n  }\n\n  /**\n   * Calculates canvas element offset relative to the document\n   * This method is also attached as \"resize\" event handler of window\n   */\n  calcOffset() {\n    return (this._offset = this.elements.calcOffset());\n  }\n\n  /**\n   * Returns canvas width (in px)\n   * @return {Number}\n   */\n  getWidth(): number {\n    return this.width;\n  }\n\n  /**\n   * Returns canvas height (in px)\n   * @return {Number}\n   */\n  getHeight(): number {\n    return this.height;\n  }\n\n  /**\n   * Internal use only\n   * @protected\n   */\n  protected _setDimensionsImpl(\n    dimensions: Partial<TSize | CSSDimensions>,\n    { cssOnly = false, backstoreOnly = false }: TCanvasSizeOptions = {},\n  ) {\n    if (!cssOnly) {\n      const size = {\n        width: this.width,\n        height: this.height,\n        ...(dimensions as Partial<TSize>),\n      };\n      this.elements.setDimensions(size, this.getRetinaScaling());\n      this.hasLostContext = true;\n      this.width = size.width;\n      this.height = size.height;\n    }\n    if (!backstoreOnly) {\n      this.elements.setCSSDimensions(dimensions);\n    }\n\n    this.calcOffset();\n  }\n\n  /**\n   * Sets dimensions (width, height) of this canvas instance. when options.cssOnly flag active you should also supply the unit of measure (px/%/em)\n   * @param {Object}        dimensions                    Object with width/height properties\n   * @param {Number|String} [dimensions.width]            Width of canvas element\n   * @param {Number|String} [dimensions.height]           Height of canvas element\n   * @param {Object}        [options]                     Options object\n   * @param {Boolean}       [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n   * @param {Boolean}       [options.cssOnly=false]       Set the given dimensions only as css dimensions\n   */\n  setDimensions(\n    dimensions: Partial<CSSDimensions>,\n    options?: { cssOnly?: true; backstoreOnly?: false },\n  ): void;\n  setDimensions(\n    dimensions: Partial<TSize>,\n    options?: { backstoreOnly?: true; cssOnly?: false },\n  ): void;\n  setDimensions(dimensions: Partial<TSize>, options?: never): void;\n  setDimensions(\n    dimensions: Partial<TSize | CSSDimensions>,\n    options?: TCanvasSizeOptions,\n  ) {\n    this._setDimensionsImpl(dimensions, options);\n    if (!options || !options.cssOnly) {\n      this.requestRenderAll();\n    }\n  }\n\n  /**\n   * Returns canvas zoom level\n   * @return {Number}\n   */\n  getZoom() {\n    return this.viewportTransform[0];\n  }\n\n  /**\n   * Sets viewport transformation of this canvas instance\n   * @param {Array} vpt a Canvas 2D API transform matrix\n   */\n  setViewportTransform(vpt: TMat2D) {\n    this.viewportTransform = vpt;\n    this.calcViewportBoundaries();\n    this.renderOnAddRemove && this.requestRenderAll();\n  }\n\n  /**\n   * Sets zoom level of this canvas instance, the zoom centered around point\n   * meaning that following zoom to point with the same point will have the visual\n   * effect of the zoom originating from that point. The point won't move.\n   * It has nothing to do with canvas center or visual center of the viewport.\n   * @param {Point} point to zoom with respect to\n   * @param {Number} value to set zoom to, less than 1 zooms out\n   */\n  zoomToPoint(point: Point, value: number) {\n    // TODO: just change the scale, preserve other transformations\n    const before = point,\n      vpt: TMat2D = [...this.viewportTransform];\n    const newPoint = transformPoint(point, invertTransform(vpt));\n    vpt[0] = value;\n    vpt[3] = value;\n    const after = transformPoint(newPoint, vpt);\n    vpt[4] += before.x - after.x;\n    vpt[5] += before.y - after.y;\n    this.setViewportTransform(vpt);\n  }\n\n  /**\n   * Sets zoom level of this canvas instance\n   * @param {Number} value to set zoom to, less than 1 zooms out\n   */\n  setZoom(value: number) {\n    this.zoomToPoint(new Point(0, 0), value);\n  }\n\n  /**\n   * Pan viewport so as to place point at top left corner of canvas\n   * @param {Point} point to move to\n   */\n  absolutePan(point: Point) {\n    const vpt: TMat2D = [...this.viewportTransform];\n    vpt[4] = -point.x;\n    vpt[5] = -point.y;\n    return this.setViewportTransform(vpt);\n  }\n\n  /**\n   * Pans viewpoint relatively\n   * @param {Point} point (position vector) to move by\n   */\n  relativePan(point: Point) {\n    return this.absolutePan(\n      new Point(\n        -point.x - this.viewportTransform[4],\n        -point.y - this.viewportTransform[5],\n      ),\n    );\n  }\n\n  /**\n   * Returns &lt;canvas> element corresponding to this instance\n   * @return {HTMLCanvasElement}\n   */\n  getElement(): HTMLCanvasElement {\n    return this.elements.lower.el;\n  }\n\n  /**\n   * Clears specified context of canvas element\n   * @param {CanvasRenderingContext2D} ctx Context to clear\n   */\n  clearContext(ctx: CanvasRenderingContext2D) {\n    ctx.clearRect(0, 0, this.width, this.height);\n  }\n\n  /**\n   * Returns context of canvas where objects are drawn\n   * @return {CanvasRenderingContext2D}\n   */\n  getContext(): CanvasRenderingContext2D {\n    return this.elements.lower.ctx;\n  }\n\n  /**\n   * Clears all contexts (background, main, top) of an instance\n   */\n  clear() {\n    this.remove(...this.getObjects());\n    this.backgroundImage = undefined;\n    this.overlayImage = undefined;\n    this.backgroundColor = '';\n    this.overlayColor = '';\n    this.clearContext(this.getContext());\n    this.fire('canvas:cleared');\n    this.renderOnAddRemove && this.requestRenderAll();\n  }\n\n  /**\n   * Renders the canvas\n   */\n  renderAll() {\n    this.cancelRequestedRender();\n    if (this.destroyed) {\n      return;\n    }\n    this.renderCanvas(this.getContext(), this._objects);\n  }\n\n  /**\n   * Function created to be instance bound at initialization\n   * used in requestAnimationFrame rendering\n   * Let the fabricJS call it. If you call it manually you could have more\n   * animationFrame stacking on to of each other\n   * for an imperative rendering, use canvas.renderAll\n   * @private\n   */\n  renderAndReset() {\n    this.nextRenderHandle = 0;\n    this.renderAll();\n  }\n\n  /**\n   * Append a renderAll request to next animation frame.\n   * unless one is already in progress, in that case nothing is done\n   * a boolean flag will avoid appending more.\n   */\n  requestRenderAll() {\n    if (!this.nextRenderHandle && !this.disposed && !this.destroyed) {\n      this.nextRenderHandle = requestAnimFrame(() => this.renderAndReset());\n    }\n  }\n\n  /**\n   * Calculate the position of the 4 corner of canvas with current viewportTransform.\n   * helps to determinate when an object is in the current rendering viewport\n   */\n  calcViewportBoundaries(): TCornerPoint {\n    const width = this.width,\n      height = this.height,\n      iVpt = invertTransform(this.viewportTransform),\n      a = transformPoint({ x: 0, y: 0 }, iVpt),\n      b = transformPoint({ x: width, y: height }, iVpt),\n      // we don't support vpt flipping\n      // but the code is robust enough to mostly work with flipping\n      min = a.min(b),\n      max = a.max(b);\n    return (this.vptCoords = {\n      tl: min,\n      tr: new Point(max.x, min.y),\n      bl: new Point(min.x, max.y),\n      br: max,\n    });\n  }\n\n  cancelRequestedRender() {\n    if (this.nextRenderHandle) {\n      cancelAnimFrame(this.nextRenderHandle);\n      this.nextRenderHandle = 0;\n    }\n  }\n\n  drawControls(_ctx: CanvasRenderingContext2D) {\n    // Static canvas has no controls\n  }\n\n  /**\n   * Renders background, objects, overlay and controls.\n   * @param {CanvasRenderingContext2D} ctx\n   * @param {Array} objects to render\n   */\n  renderCanvas(ctx: CanvasRenderingContext2D, objects: FabricObject[]) {\n    if (this.destroyed) {\n      return;\n    }\n\n    const v = this.viewportTransform,\n      path = this.clipPath;\n    this.calcViewportBoundaries();\n    this.clearContext(ctx);\n    ctx.imageSmoothingEnabled = this.imageSmoothingEnabled;\n    // @ts-expect-error node-canvas stuff\n    ctx.patternQuality = this.patternQuality;\n    this.fire('before:render', { ctx });\n    this._renderBackground(ctx);\n\n    ctx.save();\n    //apply viewport transform once for all rendering process\n    ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n    this._renderObjects(ctx, objects);\n    ctx.restore();\n    if (!this.controlsAboveOverlay && !this.skipControlsDrawing) {\n      this.drawControls(ctx);\n    }\n    if (path) {\n      path._set('canvas', this);\n      // needed to setup a couple of variables\n      // todo migrate to the newer one\n      path.shouldCache();\n      path._transformDone = true;\n      (path as TCachedFabricObject).renderCache({ forClipping: true });\n      this.drawClipPathOnCanvas(ctx, path as TCachedFabricObject);\n    }\n    this._renderOverlay(ctx);\n    if (this.controlsAboveOverlay && !this.skipControlsDrawing) {\n      this.drawControls(ctx);\n    }\n    this.fire('after:render', { ctx });\n\n    if (this.__cleanupTask) {\n      this.__cleanupTask();\n      this.__cleanupTask = undefined;\n    }\n  }\n\n  /**\n   * Paint the cached clipPath on the lowerCanvasEl\n   * @param {CanvasRenderingContext2D} ctx Context to render on\n   */\n  drawClipPathOnCanvas(\n    ctx: CanvasRenderingContext2D,\n    clipPath: TCachedFabricObject,\n  ) {\n    const v = this.viewportTransform;\n    ctx.save();\n    ctx.transform(...v);\n    // DEBUG: uncomment this line, comment the following\n    // ctx.globalAlpha = 0.4;\n    ctx.globalCompositeOperation = 'destination-in';\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   * @private\n   * @param {CanvasRenderingContext2D} ctx Context to render on\n   * @param {Array} objects to render\n   */\n  _renderObjects(ctx: CanvasRenderingContext2D, objects: FabricObject[]) {\n    for (let i = 0, len = objects.length; i < len; ++i) {\n      objects[i] && objects[i].render(ctx);\n    }\n  }\n\n  /**\n   * @private\n   * @param {CanvasRenderingContext2D} ctx Context to render on\n   * @param {string} property 'background' or 'overlay'\n   */\n  _renderBackgroundOrOverlay(\n    ctx: CanvasRenderingContext2D,\n    property: 'background' | 'overlay',\n  ) {\n    const fill = this[`${property}Color`],\n      object = this[`${property}Image`],\n      v = this.viewportTransform,\n      needsVpt = this[`${property}Vpt`];\n    if (!fill && !object) {\n      return;\n    }\n    const isAFiller = isFiller(fill);\n    if (fill) {\n      ctx.save();\n      ctx.beginPath();\n      ctx.moveTo(0, 0);\n      ctx.lineTo(this.width, 0);\n      ctx.lineTo(this.width, this.height);\n      ctx.lineTo(0, this.height);\n      ctx.closePath();\n      ctx.fillStyle = isAFiller ? fill.toLive(ctx /* this */)! : fill;\n      if (needsVpt) {\n        ctx.transform(...v);\n      }\n      if (isAFiller) {\n        ctx.transform(1, 0, 0, 1, fill.offsetX || 0, fill.offsetY || 0);\n        const m = ((fill as Gradient<'linear'>).gradientTransform ||\n          (fill as Pattern).patternTransform) as TMat2D;\n        m && ctx.transform(...m);\n      }\n      ctx.fill();\n      ctx.restore();\n    }\n    if (object) {\n      ctx.save();\n      const { skipOffscreen } = this;\n      // if the object doesn't move with the viewport,\n      // the offscreen concept does not apply;\n      this.skipOffscreen = needsVpt;\n      if (needsVpt) {\n        ctx.transform(...v);\n      }\n      object.render(ctx);\n      this.skipOffscreen = skipOffscreen;\n      ctx.restore();\n    }\n  }\n\n  /**\n   * @private\n   * @param {CanvasRenderingContext2D} ctx Context to render on\n   */\n  _renderBackground(ctx: CanvasRenderingContext2D) {\n    this._renderBackgroundOrOverlay(ctx, 'background');\n  }\n\n  /**\n   * @private\n   * @param {CanvasRenderingContext2D} ctx Context to render on\n   */\n  _renderOverlay(ctx: CanvasRenderingContext2D) {\n    this._renderBackgroundOrOverlay(ctx, 'overlay');\n  }\n\n  /**\n   * Returns coordinates of a center of canvas.\n   * @return {Point}\n   */\n  getCenterPoint() {\n    return new Point(this.width / 2, this.height / 2);\n  }\n\n  /**\n   * Centers object horizontally in the canvas\n   */\n  centerObjectH(object: FabricObject) {\n    return this._centerObject(\n      object,\n      new Point(this.getCenterPoint().x, object.getCenterPoint().y),\n    );\n  }\n\n  /**\n   * Centers object vertically in the canvas\n   * @param {FabricObject} object Object to center vertically\n   */\n  centerObjectV(object: FabricObject) {\n    return this._centerObject(\n      object,\n      new Point(object.getCenterPoint().x, this.getCenterPoint().y),\n    );\n  }\n\n  /**\n   * Centers object vertically and horizontally in the canvas\n   * @param {FabricObject} object Object to center vertically and horizontally\n   */\n  centerObject(object: FabricObject) {\n    return this._centerObject(object, this.getCenterPoint());\n  }\n\n  /**\n   * Centers object vertically and horizontally in the viewport\n   * @param {FabricObject} object Object to center vertically and horizontally\n   */\n  viewportCenterObject(object: FabricObject) {\n    return this._centerObject(object, this.getVpCenter());\n  }\n\n  /**\n   * Centers object horizontally in the viewport, object.top is unchanged\n   * @param {FabricObject} object Object to center vertically and horizontally\n   */\n  viewportCenterObjectH(object: FabricObject) {\n    return this._centerObject(\n      object,\n      new Point(this.getVpCenter().x, object.getCenterPoint().y),\n    );\n  }\n\n  /**\n   * Centers object Vertically in the viewport, object.top is unchanged\n   * @param {FabricObject} object Object to center vertically and horizontally\n   */\n  viewportCenterObjectV(object: FabricObject) {\n    return this._centerObject(\n      object,\n      new Point(object.getCenterPoint().x, this.getVpCenter().y),\n    );\n  }\n\n  /**\n   * Calculate the point in canvas that correspond to the center of actual viewport.\n   * @return {Point} vpCenter, viewport center\n   */\n  getVpCenter(): Point {\n    return transformPoint(\n      this.getCenterPoint(),\n      invertTransform(this.viewportTransform),\n    );\n  }\n\n  /**\n   * @private\n   * @param {FabricObject} object Object to center\n   * @param {Point} center Center point\n   */\n  _centerObject(object: FabricObject, center: Point) {\n    object.setXY(center, CENTER, CENTER);\n    object.setCoords();\n    this.renderOnAddRemove && this.requestRenderAll();\n  }\n\n  /**\n   * Returns dataless JSON representation of canvas\n   * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n   * @return {String} json string\n   */\n  toDatalessJSON(propertiesToInclude?: string[]) {\n    return this.toDatalessObject(propertiesToInclude);\n  }\n\n  /**\n   * Returns object representation of canvas\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  toObject(propertiesToInclude?: string[]) {\n    return this._toObjectMethod('toObject', propertiesToInclude);\n  }\n\n  /**\n   * Returns Object representation of canvas\n   * this alias is provided because if you call JSON.stringify on an instance,\n   * the toJSON object will be invoked if it exists.\n   * Having a toJSON method means you can do JSON.stringify(myCanvas)\n   * JSON does not support additional properties because toJSON has its own signature\n   * @return {Object} JSON compatible object\n   * @see {@link http://fabric5.fabricjs.com/fabric-intro-part-3#serialization}\n   * @see {@link http://jsfiddle.net/fabricjs/pec86/|jsFiddle demo}\n   * @example <caption>JSON representation of canvas </caption>\n   * const json = canvas.toJSON();\n   * @example <caption>JSON representation of canvas </caption>\n   * const json = JSON.stringify(canvas);\n   */\n  toJSON() {\n    return this.toObject();\n  }\n\n  /**\n   * Returns dataless object representation of canvas\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?: string[]) {\n    return this._toObjectMethod('toDatalessObject', propertiesToInclude);\n  }\n\n  /**\n   * @private\n   */\n  _toObjectMethod(\n    methodName: TValidToObjectMethod,\n    propertiesToInclude?: string[],\n  ) {\n    const clipPath = this.clipPath;\n    const clipPathData =\n      clipPath && !clipPath.excludeFromExport\n        ? this._toObject(clipPath, methodName, propertiesToInclude)\n        : null;\n    return {\n      version: VERSION,\n      ...pick(this, propertiesToInclude as (keyof this)[]),\n      objects: this._objects\n        .filter((object) => !object.excludeFromExport)\n        .map((instance) =>\n          this._toObject(instance, methodName, propertiesToInclude),\n        ),\n      ...this.__serializeBgOverlay(methodName, propertiesToInclude),\n      ...(clipPathData ? { clipPath: clipPathData } : null),\n    };\n  }\n\n  /**\n   * @private\n   */\n  protected _toObject(\n    instance: FabricObject,\n    methodName: TValidToObjectMethod,\n    propertiesToInclude?: string[],\n  ) {\n    let originalValue;\n\n    if (!this.includeDefaultValues) {\n      originalValue = instance.includeDefaultValues;\n      instance.includeDefaultValues = false;\n    }\n\n    const object = instance[methodName](propertiesToInclude);\n    if (!this.includeDefaultValues) {\n      instance.includeDefaultValues = !!originalValue;\n    }\n    return object;\n  }\n\n  /**\n   * @private\n   */\n  __serializeBgOverlay(\n    methodName: TValidToObjectMethod,\n    propertiesToInclude?: string[],\n  ) {\n    const data: any = {},\n      bgImage = this.backgroundImage,\n      overlayImage = this.overlayImage,\n      bgColor = this.backgroundColor,\n      overlayColor = this.overlayColor;\n\n    if (isFiller(bgColor)) {\n      if (!bgColor.excludeFromExport) {\n        data.background = bgColor.toObject(propertiesToInclude);\n      }\n    } else if (bgColor) {\n      data.background = bgColor;\n    }\n\n    if (isFiller(overlayColor)) {\n      if (!overlayColor.excludeFromExport) {\n        data.overlay = overlayColor.toObject(propertiesToInclude);\n      }\n    } else if (overlayColor) {\n      data.overlay = overlayColor;\n    }\n\n    if (bgImage && !bgImage.excludeFromExport) {\n      data.backgroundImage = this._toObject(\n        bgImage,\n        methodName,\n        propertiesToInclude,\n      );\n    }\n    if (overlayImage && !overlayImage.excludeFromExport) {\n      data.overlayImage = this._toObject(\n        overlayImage,\n        methodName,\n        propertiesToInclude,\n      );\n    }\n\n    return data;\n  }\n\n  /* _TO_SVG_START_ */\n\n  declare svgViewportTransformation: boolean;\n\n  /**\n   * Returns SVG representation of canvas\n   * @param {Object} [options] Options object for SVG output\n   * @param {Boolean} [options.suppressPreamble=false] If true xml tag is not included\n   * @param {Object} [options.viewBox] SVG viewbox object\n   * @param {Number} [options.viewBox.x] x-coordinate of viewbox\n   * @param {Number} [options.viewBox.y] y-coordinate of viewbox\n   * @param {Number} [options.viewBox.width] Width of viewbox\n   * @param {Number} [options.viewBox.height] Height of viewbox\n   * @param {String} [options.encoding=UTF-8] Encoding of SVG output\n   * @param {String} [options.width] desired width of svg with or without units\n   * @param {String} [options.height] desired height of svg with or without units\n   * @param {Function} [reviver] Method for further parsing of svg elements, called after each fabric object converted into svg representation.\n   * @return {String} SVG string\n   * @see {@link http://fabric5.fabricjs.com/fabric-intro-part-3#serialization}\n   * @see {@link http://jsfiddle.net/fabricjs/jQ3ZZ/|jsFiddle demo}\n   * @example <caption>Normal SVG output</caption>\n   * var svg = canvas.toSVG();\n   * @example <caption>SVG output without preamble (without &lt;?xml ../>)</caption>\n   * var svg = canvas.toSVG({suppressPreamble: true});\n   * @example <caption>SVG output with viewBox attribute</caption>\n   * var svg = canvas.toSVG({\n   *   viewBox: {\n   *     x: 100,\n   *     y: 100,\n   *     width: 200,\n   *     height: 300\n   *   }\n   * });\n   * @example <caption>SVG output with different encoding (default: UTF-8)</caption>\n   * var svg = canvas.toSVG({encoding: 'ISO-8859-1'});\n   * @example <caption>Modify SVG output with reviver function</caption>\n   * var svg = canvas.toSVG(null, function(svg) {\n   *   return svg.replace('stroke-dasharray: ; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; ', '');\n   * });\n   */\n  toSVG(options: TSVGExportOptions = {}, reviver?: TSVGReviver) {\n    options.reviver = reviver;\n    const markup: string[] = [];\n\n    this._setSVGPreamble(markup, options);\n    this._setSVGHeader(markup, options);\n    if (this.clipPath) {\n      markup.push(\n        `<g clip-path=\"url(#${escapeXml(this.clipPath.clipPathId ?? '')})\" >\\n`,\n      );\n    }\n    this._setSVGBgOverlayColor(markup, 'background');\n    this._setSVGBgOverlayImage(markup, 'backgroundImage', reviver);\n    this._setSVGObjects(markup, reviver);\n    if (this.clipPath) {\n      markup.push('</g>\\n');\n    }\n    this._setSVGBgOverlayColor(markup, 'overlay');\n    this._setSVGBgOverlayImage(markup, 'overlayImage', reviver);\n\n    markup.push('</svg>');\n\n    return markup.join('');\n  }\n\n  /**\n   * @private\n   */\n  _setSVGPreamble(markup: string[], options: TSVGExportOptions): void {\n    if (options.suppressPreamble) {\n      return;\n    }\n    markup.push(\n      '<?xml version=\"1.0\" encoding=\"',\n      options.encoding || 'UTF-8',\n      '\" standalone=\"no\" ?>\\n',\n      '<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" ',\n      '\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\\n',\n    );\n  }\n\n  /**\n   * @private\n   */\n  _setSVGHeader(markup: string[], options: TSVGExportOptions): void {\n    const width = options.width || `${this.width}`,\n      height = options.height || `${this.height}`,\n      NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS,\n      optViewBox = options.viewBox;\n    let viewBox: string;\n    if (optViewBox) {\n      viewBox = `viewBox=\"${optViewBox.x} ${optViewBox.y} ${optViewBox.width} ${optViewBox.height}\" `;\n    } else if (this.svgViewportTransformation) {\n      const vpt = this.viewportTransform;\n      viewBox = `viewBox=\"${toFixed(\n        -vpt[4] / vpt[0],\n        NUM_FRACTION_DIGITS,\n      )} ${toFixed(-vpt[5] / vpt[3], NUM_FRACTION_DIGITS)} ${toFixed(\n        this.width / vpt[0],\n        NUM_FRACTION_DIGITS,\n      )} ${toFixed(this.height / vpt[3], NUM_FRACTION_DIGITS)}\" `;\n    } else {\n      viewBox = `viewBox=\"0 0 ${this.width} ${this.height}\" `;\n    }\n\n    markup.push(\n      '<svg ',\n      'xmlns=\"http://www.w3.org/2000/svg\" ',\n      'xmlns:xlink=\"http://www.w3.org/1999/xlink\" ',\n      'version=\"1.1\" ',\n      'width=\"',\n      width,\n      '\" ',\n      'height=\"',\n      height,\n      '\" ',\n      viewBox,\n      'xml:space=\"preserve\">\\n',\n      '<desc>Created with Fabric.js ',\n      VERSION,\n      '</desc>\\n',\n      '<defs>\\n',\n      this.createSVGFontFacesMarkup(),\n      this.createSVGRefElementsMarkup(),\n      this.createSVGClipPathMarkup(options),\n      '</defs>\\n',\n    );\n  }\n\n  createSVGClipPathMarkup(options: TSVGExportOptions): string {\n    const clipPath = this.clipPath;\n    if (clipPath) {\n      clipPath.clipPathId = `CLIPPATH_${uid()}`;\n      return `<clipPath id=\"${clipPath.clipPathId}\" >\\n${clipPath.toClipPathSVG(\n        options.reviver,\n      )}</clipPath>\\n`;\n    }\n    return '';\n  }\n\n  /**\n   * Creates markup containing SVG referenced elements like patterns, gradients etc.\n   * @return {String}\n   */\n  createSVGRefElementsMarkup(): string {\n    return (['background', 'overlay'] as const)\n      .map((prop) => {\n        const fill = this[`${prop}Color`];\n        if (isFiller(fill)) {\n          const shouldTransform = this[`${prop}Vpt`],\n            vpt = this.viewportTransform,\n            object = {\n              // otherwise circular dependency\n              isType: () => false,\n              width: this.width / (shouldTransform ? vpt[0] : 1),\n              height: this.height / (shouldTransform ? vpt[3] : 1),\n            };\n          return fill.toSVG(object as FabricObject, {\n            additionalTransform: shouldTransform ? matrixToSVG(vpt) : '',\n          });\n        }\n      })\n      .join('');\n  }\n\n  /**\n   * Creates markup containing SVG font faces,\n   * font URLs for font faces must be collected by developers\n   * and are not extracted from the DOM by fabricjs\n   * @param {Array} objects Array of fabric objects\n   * @return {String}\n   */\n  createSVGFontFacesMarkup(): string {\n    const objects: FabricObject[] = [],\n      fontList: Record<string, boolean> = {},\n      fontPaths = config.fontPaths;\n\n    this._objects.forEach(function add(object) {\n      objects.push(object);\n      if (isCollection(object)) {\n        object._objects.forEach(add);\n      }\n    });\n\n    objects.forEach((obj) => {\n      if (!isTextObject(obj)) {\n        return;\n      }\n      const { styles, fontFamily } = obj;\n      if (fontList[fontFamily] || !fontPaths[fontFamily]) {\n        return;\n      }\n      fontList[fontFamily] = true;\n      if (!styles) {\n        return;\n      }\n      Object.values(styles).forEach((styleRow) => {\n        Object.values(styleRow).forEach(({ fontFamily = '' }) => {\n          if (!fontList[fontFamily] && fontPaths[fontFamily]) {\n            fontList[fontFamily] = true;\n          }\n        });\n      });\n    });\n\n    const fontListMarkup = Object.keys(fontList)\n      .map(\n        (fontFamily) =>\n          `\\t\\t@font-face {\\n\\t\\t\\tfont-family: '${fontFamily}';\\n\\t\\t\\tsrc: url('${fontPaths[fontFamily]}');\\n\\t\\t}\\n`,\n      )\n      .join('');\n\n    if (fontListMarkup) {\n      return `\\t<style type=\"text/css\"><![CDATA[\\n${fontListMarkup}]]></style>\\n`;\n    }\n    return '';\n  }\n\n  /**\n   * @private\n   */\n  _setSVGObjects(markup: string[], reviver?: TSVGReviver) {\n    this.forEachObject((fabricObject) => {\n      if (fabricObject.excludeFromExport) {\n        return;\n      }\n      this._setSVGObject(markup, fabricObject, reviver);\n    });\n  }\n\n  /**\n   * This is its own function because the Canvas ( non static ) requires extra code here\n   * @private\n   */\n  _setSVGObject(\n    markup: string[],\n    instance: FabricObject,\n    reviver?: TSVGReviver,\n  ) {\n    markup.push(instance.toSVG(reviver));\n  }\n\n  /**\n   * @private\n   */\n  _setSVGBgOverlayImage(\n    markup: string[],\n    property: 'overlayImage' | 'backgroundImage',\n    reviver?: TSVGReviver,\n  ) {\n    const bgOrOverlay = this[property];\n    if (bgOrOverlay && !bgOrOverlay.excludeFromExport && bgOrOverlay.toSVG) {\n      markup.push(bgOrOverlay.toSVG(reviver));\n    }\n  }\n\n  /**\n   * @TODO this seems to handle patterns but fail at gradients.\n   * @private\n   */\n  _setSVGBgOverlayColor(markup: string[], property: 'background' | 'overlay') {\n    const filler = this[`${property}Color`];\n    if (!filler) {\n      return;\n    }\n    if (isFiller(filler)) {\n      const repeat = (filler as Pattern).repeat || '',\n        finalWidth = this.width,\n        finalHeight = this.height,\n        shouldInvert = this[`${property}Vpt`],\n        additionalTransform = shouldInvert\n          ? matrixToSVG(invertTransform(this.viewportTransform))\n          : '';\n      markup.push(\n        `<rect transform=\"${additionalTransform} translate(${finalWidth / 2},${\n          finalHeight / 2\n        })\" x=\"${filler.offsetX - finalWidth / 2}\" y=\"${\n          filler.offsetY - finalHeight / 2\n        }\" width=\"${\n          (repeat === 'repeat-y' || repeat === 'no-repeat') && isPattern(filler)\n            ? (filler.source as HTMLImageElement).width\n            : finalWidth\n        }\" height=\"${\n          (repeat === 'repeat-x' || repeat === 'no-repeat') && isPattern(filler)\n            ? (filler.source as HTMLImageElement).height\n            : finalHeight\n        }\" fill=\"url(#SVGID_${filler.id})\"></rect>\\n`,\n      );\n    } else {\n      markup.push(\n        '<rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" ',\n        'fill=\"',\n        filler,\n        '\"',\n        '></rect>\\n',\n      );\n    }\n  }\n  /* _TO_SVG_END_ */\n\n  /**\n   * Populates canvas with data from the specified JSON.\n   * JSON format must conform to the one of {@link fabric.Canvas#toJSON}\n   *\n   * **IMPORTANT**: It is recommended to abort loading tasks before calling this method to prevent race conditions and unnecessary networking\n   *\n   * @param {String|Object} json JSON string or object\n   * @param {Function} [reviver] Method for further parsing of JSON elements, called after each fabric object created.\n   * @param {Object} [options] options\n   * @param {AbortSignal} [options.signal] see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n   * @return {Promise<Canvas | StaticCanvas>} instance\n   * @see {@link http://fabric5.fabricjs.com/fabric-intro-part-3#deserialization}\n   * @see {@link http://jsfiddle.net/fabricjs/fmgXt/|jsFiddle demo}\n   * @example <caption>loadFromJSON</caption>\n   * canvas.loadFromJSON(json).then((canvas) => canvas.requestRenderAll());\n   * @example <caption>loadFromJSON with reviver</caption>\n   * canvas.loadFromJSON(json, function(o, object) {\n   *   // `o` = json object\n   *   // `object` = fabric.Object instance\n   *   // ... do some stuff ...\n   * }).then((canvas) => {\n   *   ... canvas is restored, add your code.\n   * });\n   *\n   */\n  loadFromJSON(\n    json: string | Record<string, any>,\n    reviver?: EnlivenObjectOptions['reviver'],\n    { signal }: Abortable = {},\n  ): Promise<this> {\n    if (!json) {\n      return Promise.reject(new FabricError('`json` is undefined'));\n    }\n\n    // parse json if it wasn't already\n    const { objects = [], ...serialized } =\n      typeof json === 'string' ? JSON.parse(json) : json;\n    const { backgroundImage, background, overlayImage, overlay, clipPath } =\n      serialized;\n    const renderOnAddRemove = this.renderOnAddRemove;\n    this.renderOnAddRemove = false;\n\n    return Promise.all([\n      enlivenObjects<FabricObject>(objects, {\n        reviver,\n        signal,\n      }),\n      enlivenObjectEnlivables(\n        {\n          backgroundImage,\n          backgroundColor: background,\n          overlayImage,\n          overlayColor: overlay,\n          clipPath,\n        },\n        { signal },\n      ),\n    ]).then(([enlived, enlivedMap]) => {\n      this.clear();\n      this.add(...enlived);\n      this.set(serialized);\n      this.set(enlivedMap);\n      this.renderOnAddRemove = renderOnAddRemove;\n      return this;\n    });\n  }\n\n  /**\n   * Clones canvas instance\n   * @param {string[]} [properties] Array of properties to include in the cloned canvas and children\n   */\n  clone(properties: string[]) {\n    const data = this.toObject(properties);\n    const canvas = this.cloneWithoutData();\n    return canvas.loadFromJSON(data);\n  }\n\n  /**\n   * Clones canvas instance without cloning existing data.\n   * This essentially copies canvas dimensions since loadFromJSON does not affect canvas size.\n   */\n  cloneWithoutData() {\n    const el = createCanvasElementFor(this);\n    return new (this.constructor as Constructor<this>)(el);\n  }\n\n  /**\n   * Exports canvas element to a dataurl image. Note that when multiplier is used, cropping is scaled appropriately\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, to have consistent\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 2.0.0\n   * @param {(object: fabric.Object) => boolean} [options.filter] Function to filter objects.\n   * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format\n   * @see {@link https://jsfiddle.net/xsjua1rd/ demo}\n   * @example <caption>Generate jpeg dataURL with lower quality</caption>\n   * var dataURL = canvas.toDataURL({\n   *   format: 'jpeg',\n   *   quality: 0.8\n   * });\n   * @example <caption>Generate cropped png dataURL (clipping of canvas)</caption>\n   * var dataURL = canvas.toDataURL({\n   *   format: 'png',\n   *   left: 100,\n   *   top: 100,\n   *   width: 200,\n   *   height: 200\n   * });\n   * @example <caption>Generate double scaled png dataURL</caption>\n   * var dataURL = canvas.toDataURL({\n   *   format: 'png',\n   *   multiplier: 2\n   * });\n   * @example <caption>Generate dataURL with objects that overlap a specified object</caption>\n   * var myObject;\n   * var dataURL = canvas.toDataURL({\n   *   filter: (object) => object.isContainedWithinObject(myObject) || object.intersectsWithObject(myObject)\n   * });\n   */\n  toDataURL(options = {} as TDataUrlOptions): string {\n    const {\n      format = 'png',\n      quality = 1,\n      multiplier = 1,\n      enableRetinaScaling = false,\n    } = options;\n    const finalMultiplier =\n      multiplier * (enableRetinaScaling ? this.getRetinaScaling() : 1);\n\n    return toDataURL(\n      this.toCanvasElement(finalMultiplier, options),\n      format,\n      quality,\n    );\n  }\n  toBlob(options = {} as TDataUrlOptions): Promise<Blob | null> {\n    const {\n      format = 'png',\n      quality = 1,\n      multiplier = 1,\n      enableRetinaScaling = false,\n    } = options;\n    const finalMultiplier =\n      multiplier * (enableRetinaScaling ? this.getRetinaScaling() : 1);\n\n    return toBlob(\n      this.toCanvasElement(finalMultiplier, options),\n      format,\n      quality,\n    );\n  }\n\n  /**\n   * Create a new HTMLCanvas element painted with the current canvas content.\n   * No need to resize the actual one or repaint it.\n   * Will transfer object ownership to a new canvas, paint it, and set everything back.\n   * This is an intermediary step used to get to a dataUrl but also it is useful to\n   * create quick image copies of a canvas without passing for the dataUrl string\n   * @param {Number} [multiplier] a zoom factor.\n   * @param {Object} [options] Cropping informations\n   * @param {Number} [options.left] Cropping left offset.\n   * @param {Number} [options.top] Cropping top offset.\n   * @param {Number} [options.width] Cropping width.\n   * @param {Number} [options.height] Cropping height.\n   * @param {(object: fabric.Object) => boolean} [options.filter] Function to filter objects.\n   */\n  toCanvasElement(\n    multiplier = 1,\n    { width, height, left, top, filter } = {} as TToCanvasElementOptions,\n  ): HTMLCanvasElement {\n    const scaledWidth = (width || this.width) * multiplier,\n      scaledHeight = (height || this.height) * multiplier,\n      zoom = this.getZoom(),\n      originalWidth = this.width,\n      originalHeight = this.height,\n      originalSkipControlsDrawing = this.skipControlsDrawing,\n      newZoom = zoom * multiplier,\n      vp = this.viewportTransform,\n      translateX = (vp[4] - (left || 0)) * multiplier,\n      translateY = (vp[5] - (top || 0)) * multiplier,\n      newVp = [newZoom, 0, 0, newZoom, translateX, translateY] as TMat2D,\n      originalRetina = this.enableRetinaScaling,\n      canvasEl = createCanvasElementFor({\n        width: scaledWidth,\n        height: scaledHeight,\n      }),\n      objectsToRender = filter\n        ? this._objects.filter((obj) => filter(obj))\n        : this._objects;\n    this.enableRetinaScaling = false;\n    this.viewportTransform = newVp;\n    this.width = scaledWidth;\n    this.height = scaledHeight;\n    this.skipControlsDrawing = true;\n    this.calcViewportBoundaries();\n    this.renderCanvas(canvasEl.getContext('2d')!, objectsToRender);\n    this.viewportTransform = vp;\n    this.width = originalWidth;\n    this.height = originalHeight;\n    this.calcViewportBoundaries();\n    this.enableRetinaScaling = originalRetina;\n    this.skipControlsDrawing = originalSkipControlsDrawing;\n    return canvasEl;\n  }\n\n  /**\n   * Waits until rendering has settled to destroy the canvas\n   * @returns {Promise<boolean>} a promise resolving to `true` once the canvas has been destroyed or to `false` if the canvas has was already destroyed\n   * @throws if aborted by a consequent call\n   */\n  dispose() {\n    !this.disposed &&\n      this.elements.cleanupDOM({ width: this.width, height: this.height });\n    runningAnimations.cancelByCanvas(this);\n    this.disposed = true;\n    return new Promise<boolean>((resolve, reject) => {\n      const task = () => {\n        this.destroy();\n        resolve(true);\n      };\n      task.kill = reject;\n      if (this.__cleanupTask) {\n        this.__cleanupTask.kill('aborted');\n      }\n\n      if (this.destroyed) {\n        resolve(false);\n      } else if (this.nextRenderHandle) {\n        this.__cleanupTask = task;\n      } else {\n        task();\n      }\n    });\n  }\n\n  /**\n   * Clears the canvas element, disposes objects and frees resources.\n   *\n   * Invoked as part of the **async** operation of {@link dispose}.\n   *\n   * **CAUTION**:\n   *\n   * This method is **UNSAFE**.\n   * You may encounter a race condition using it if there's a requested render.\n   * Call this method only if you are sure rendering has settled.\n   * Consider using {@link dispose} as it is **SAFE**\n   *\n   * @private\n   */\n  destroy() {\n    this.destroyed = true;\n    this.cancelRequestedRender();\n    this.forEachObject((object) => object.dispose());\n    this._objects = [];\n    if (this.backgroundImage) {\n      this.backgroundImage.dispose();\n    }\n    this.backgroundImage = undefined;\n    if (this.overlayImage) {\n      this.overlayImage.dispose();\n    }\n    this.overlayImage = undefined;\n    this.elements.dispose();\n  }\n\n  /**\n   * Returns a string representation of an instance\n   * @return {String} string representation of an instance\n   */\n  toString() {\n    return `#<Canvas (${this.complexity()}): { objects: ${\n      this._objects.length\n    } }>`;\n  }\n}\n"],"names":["StaticCanvas","createCollectionMixin","CommonMethods","lowerCanvasEl","_this$elements$lower","elements","lower","el","contextContainer","_this$elements$lower2","ctx","getDefaults","ownDefaults","constructor","options","arguments","length","undefined","Object","assign","set","initElements","_setDimensionsImpl","width","height","skipControlsDrawing","viewportTransform","calcViewportBoundaries","StaticCanvasDOMManager","add","size","renderOnAddRemove","requestRenderAll","insertAt","index","_len","objects","Array","_key","remove","removed","_onObjectAdded","obj","canvas","log","_set","setCoords","fire","target","_onObjectRemoved","_onStackOrderChanged","getRetinaScaling","enableRetinaScaling","getDevicePixelRatio","calcOffset","_offset","getWidth","getHeight","dimensions","cssOnly","backstoreOnly","setDimensions","hasLostContext","setCSSDimensions","getZoom","setViewportTransform","vpt","zoomToPoint","point","value","before","newPoint","transformPoint","invertTransform","after","x","y","setZoom","Point","absolutePan","relativePan","getElement","clearContext","clearRect","getContext","clear","getObjects","backgroundImage","overlayImage","backgroundColor","overlayColor","renderAll","cancelRequestedRender","destroyed","renderCanvas","_objects","renderAndReset","nextRenderHandle","disposed","requestAnimFrame","iVpt","a","b","min","max","vptCoords","tl","tr","bl","br","cancelAnimFrame","drawControls","_ctx","v","path","clipPath","imageSmoothingEnabled","patternQuality","_renderBackground","save","transform","_renderObjects","restore","controlsAboveOverlay","shouldCache","_transformDone","renderCache","forClipping","drawClipPathOnCanvas","_renderOverlay","__cleanupTask","globalCompositeOperation","scale","zoomX","zoomY","drawImage","_cacheCanvas","cacheTranslationX","cacheTranslationY","i","len","render","_renderBackgroundOrOverlay","property","fill","object","needsVpt","isAFiller","isFiller","beginPath","moveTo","lineTo","closePath","fillStyle","toLive","offsetX","offsetY","m","gradientTransform","patternTransform","skipOffscreen","getCenterPoint","centerObjectH","_centerObject","centerObjectV","centerObject","viewportCenterObject","getVpCenter","viewportCenterObjectH","viewportCenterObjectV","center","setXY","CENTER","toDatalessJSON","propertiesToInclude","toDatalessObject","toObject","_toObjectMethod","toJSON","methodName","clipPathData","excludeFromExport","_toObject","version","VERSION","pick","filter","map","instance","__serializeBgOverlay","originalValue","includeDefaultValues","data","bgImage","bgColor","background","overlay","toSVG","reviver","markup","_setSVGPreamble","_setSVGHeader","_this$clipPath$clipPa","push","escapeXml","clipPathId","_setSVGBgOverlayColor","_setSVGBgOverlayImage","_setSVGObjects","join","suppressPreamble","encoding","NUM_FRACTION_DIGITS","config","optViewBox","viewBox","svgViewportTransformation","toFixed","createSVGFontFacesMarkup","createSVGRefElementsMarkup","createSVGClipPathMarkup","uid","toClipPathSVG","prop","shouldTransform","isType","additionalTransform","matrixToSVG","fontList","fontPaths","forEach","isCollection","isTextObject","styles","fontFamily","values","styleRow","_ref","fontListMarkup","keys","forEachObject","fabricObject","_setSVGObject","bgOrOverlay","filler","repeat","finalWidth","finalHeight","shouldInvert","isPattern","source","id","loadFromJSON","json","signal","Promise","reject","FabricError","serialized","JSON","parse","all","enlivenObjects","enlivenObjectEnlivables","then","_ref2","enlived","enlivedMap","clone","properties","cloneWithoutData","createCanvasElementFor","toDataURL","format","quality","multiplier","finalMultiplier","toCanvasElement","toBlob","left","top","scaledWidth","scaledHeight","zoom","originalWidth","originalHeight","originalSkipControlsDrawing","newZoom","vp","translateX","translateY","newVp","originalRetina","canvasEl","objectsToRender","dispose","cleanupDOM","runningAnimations","cancelByCanvas","resolve","task","destroy","kill","toString","complexity","_defineProperty","staticCanvasDefaults"],"mappings":"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"}