{"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 { createCanvasElement, 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/svgParsing';\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';\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\n/**\n * Static canvas class\n * @see {@link http://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    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  protected declare hasLostContext: boolean;\n  protected declare nextRenderHandle: number;\n\n  declare elements: StaticCanvasDOMManager;\n\n  static ownDefaults = staticCanvasDefaults;\n\n  // reference to\n  protected declare __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.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   * Sets width of this canvas instance\n   * @param {Number|String} value                         Value to set width to\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   * @deprecated will be removed in 7.0\n   */\n  setWidth(\n    value: TSize['width'],\n    options?: { backstoreOnly?: true; cssOnly?: false }\n  ): void;\n  setWidth(\n    value: CSSDimensions['width'],\n    options?: { cssOnly?: true; backstoreOnly?: false }\n  ): void;\n  setWidth(value: number, options?: never) {\n    return this.setDimensions({ width: value }, options);\n  }\n\n  /**s\n   * Sets height of this canvas instance\n   * @param {Number|String} value                         Value to set height to\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   * @deprecated will be removed in 7.0\n   */\n  setHeight(\n    value: TSize['height'],\n    options?: { backstoreOnly?: true; cssOnly?: false }\n  ): void;\n  setHeight(\n    value: CSSDimensions['height'],\n    options?: { cssOnly?: true; backstoreOnly?: false }\n  ): void;\n  setHeight(value: CSSDimensions['height'], options?: never) {\n    return this.setDimensions({ height: value }, options);\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    const backgroundObject = this.backgroundImage,\n      overlayObject = this.overlayImage,\n      len = this._objects.length;\n\n    this.viewportTransform = vpt;\n    for (let i = 0; i < len; i++) {\n      const object = this._objects[i];\n      object.group || object.setCoords();\n    }\n    if (backgroundObject) {\n      backgroundObject.setCoords();\n    }\n    if (overlayObject) {\n      overlayObject.setCoords();\n    }\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 = 'best';\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) {\n      this.drawControls(ctx);\n    }\n    if (path) {\n      path._set('canvas', this);\n      // needed to setup a couple of variables\n      path.shouldCache();\n      path._transformDone = true;\n      path.renderCache({ forClipping: true });\n      this.drawClipPathOnCanvas(ctx, path as TCachedFabricObject);\n    }\n    this._renderOverlay(ctx);\n    if (this.controlsAboveOverlay) {\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   * Returned value is an object with top and left properties\n   * @return {Object} object with \"top\" and \"left\" number values\n   * @deprecated migrate to `getCenterPoint`\n   */\n  getCenter() {\n    return {\n      top: this.height / 2,\n      left: this.width / 2,\n    };\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   * @return {Object} JSON compatible object\n   * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#serialization}\n   * @see {@link http://jsfiddle.net/fabricjs/pec86/|jsFiddle demo}\n   * @example <caption>JSON without additional properties</caption>\n   * var json = canvas.toJSON();\n   * @example <caption>JSON with additional properties included</caption>\n   * var json = canvas.toJSON(['lockMovementX', 'lockMovementY', 'lockRotation', 'lockScalingX', 'lockScalingY']);\n   * @example <caption>JSON without default values</caption>\n   * var json = canvas.toJSON();\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   * @function\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   * @tutorial {@link http://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(`<g clip-path=\"url(#${this.clipPath.clipPathId})\" >\\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   * @tutorial {@link http://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 serialized = typeof json === 'string' ? JSON.parse(json) : json;\n    const {\n      objects = [],\n      backgroundImage,\n      background,\n      overlayImage,\n      overlay,\n      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 = createCanvasElement();\n    el.width = this.width;\n    el.height = this.height;\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\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      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 = createCanvasElement(),\n      objectsToRender = filter\n        ? this._objects.filter((obj) => filter(obj))\n        : this._objects;\n    canvasEl.width = scaledWidth;\n    canvasEl.height = scaledHeight;\n    this.enableRetinaScaling = false;\n    this.viewportTransform = newVp;\n    this.width = scaledWidth;\n    this.height = scaledHeight;\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    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","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","setWidth","value","setDimensions","setHeight","dimensions","cssOnly","backstoreOnly","_objectSpread","hasLostContext","setCSSDimensions","getZoom","setViewportTransform","vpt","backgroundObject","backgroundImage","overlayObject","overlayImage","len","_objects","i","object","group","zoomToPoint","point","before","newPoint","transformPoint","invertTransform","after","x","y","setZoom","Point","absolutePan","relativePan","getElement","clearContext","clearRect","getContext","clear","getObjects","backgroundColor","overlayColor","renderAll","cancelRequestedRender","destroyed","renderCanvas","renderAndReset","nextRenderHandle","disposed","requestAnimFrame","iVpt","a","b","min","max","vptCoords","tl","tr","bl","br","cancelAnimFrame","drawControls","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","render","_renderBackgroundOrOverlay","property","fill","concat","needsVpt","isAFiller","isFiller","beginPath","moveTo","lineTo","closePath","fillStyle","toLive","offsetX","offsetY","m","gradientTransform","patternTransform","skipOffscreen","getCenter","top","left","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","push","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","createCanvasElement","toDataURL","format","quality","multiplier","finalMultiplier","toCanvasElement","scaledWidth","scaledHeight","zoom","originalWidth","originalHeight","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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"}