{"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    // 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  protected declare hasLostContext: boolean;\n  protected declare 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  protected declare skipControlsDrawing: boolean;\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.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   * 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    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 = '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 && !this.skipControlsDrawing) {\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 && !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   * 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      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 = 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.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","setWidth","value","setDimensions","setHeight","dimensions","cssOnly","backstoreOnly","_objectSpread","hasLostContext","setCSSDimensions","getZoom","setViewportTransform","vpt","zoomToPoint","point","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","concat","object","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","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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"}