{"version":3,"file":"StaticCanvasDOMManager.min.mjs","names":[],"sources":["../../../../src/canvas/DOMManagers/StaticCanvasDOMManager.ts"],"sourcesContent":["import { getEnv, getFabricDocument } from '../../env';\nimport type { TSize } from '../../typedefs';\nimport type { CSSDimensions } from './util';\nimport { setCSSDimensions, getElementOffset } from './util';\nimport { createCanvasElement, isHTMLCanvas } from '../../util/misc/dom';\nimport { setCanvasDimensions } from './util';\nimport { FabricError } from '../../util/internals/console';\n\nexport type CanvasItem = {\n  el: HTMLCanvasElement;\n  ctx: CanvasRenderingContext2D;\n};\n\nexport class StaticCanvasDOMManager {\n  /**\n   * Keeps a copy of the canvas style before setting retina scaling and other potions\n   * in order to return it to original state on dispose\n   * @type string\n   */\n  private _originalCanvasStyle?: string;\n\n  lower: CanvasItem;\n\n  constructor(arg0?: string | HTMLCanvasElement) {\n    const el = this.createLowerCanvas(arg0);\n    this.lower = { el, ctx: el.getContext('2d')! };\n  }\n\n  protected createLowerCanvas(arg0?: HTMLCanvasElement | string) {\n    // canvasEl === 'HTMLCanvasElement' does not work on jsdom/node\n    const el = isHTMLCanvas(arg0)\n      ? arg0\n      : (arg0 &&\n          (getFabricDocument().getElementById(arg0) as HTMLCanvasElement)) ||\n        createCanvasElement();\n    if (el.hasAttribute('data-fabric')) {\n      throw new FabricError(\n        'Trying to initialize a canvas that has already been initialized. Did you forget to dispose the canvas?',\n      );\n    }\n    this._originalCanvasStyle = el.style.cssText;\n    el.setAttribute('data-fabric', 'main');\n    el.classList.add('lower-canvas');\n    return el;\n  }\n\n  cleanupDOM({ width, height }: TSize) {\n    const { el } = this.lower;\n    // restore canvas style and attributes\n    el.classList.remove('lower-canvas');\n    el.removeAttribute('data-fabric');\n    // restore canvas size to original size in case retina scaling was applied\n    el.setAttribute('width', `${width}`);\n    el.setAttribute('height', `${height}`);\n    el.style.cssText = this._originalCanvasStyle || '';\n    this._originalCanvasStyle = undefined;\n  }\n\n  setDimensions(size: TSize, retinaScaling: number) {\n    const { el, ctx } = this.lower;\n    setCanvasDimensions(el, ctx, size, retinaScaling);\n  }\n\n  setCSSDimensions(size: Partial<CSSDimensions>) {\n    setCSSDimensions(this.lower.el, size);\n  }\n\n  /**\n   * Calculates canvas element offset relative to the document\n   */\n  calcOffset() {\n    return getElementOffset(this.lower.el);\n  }\n\n  dispose() {\n    getEnv().dispose(this.lower.el);\n    // @ts-expect-error disposing\n    delete this.lower;\n  }\n}\n"],"mappings":"ibAaA,IAAa,EAAb,KAAA,CAUE,YAAY,EAAA,CAAA,EAAA,KAJJ,uBAAA,IAAA,GAAA,CAAA,EAAA,KAER,QAAA,IAAA,GAAA,CAGE,IAAM,EAAK,KAAK,kBAAkB,EAAA,CAClC,KAAK,MAAQ,CAAE,GAAA,EAAI,IAAK,EAAG,WAAW,KAAA,CAAA,CAGxC,kBAA4B,EAAA,CAE1B,IAAM,EAAK,EAAa,EAAA,CACpB,EACC,GACE,GAAA,CAAoB,eAAe,EAAA,EACtC,GAAA,CACJ,GAAI,EAAG,aAAa,cAAA,CAClB,MAAM,IAAI,EACR,yGAAA,CAMJ,MAHA,MAAK,qBAAuB,EAAG,MAAM,QACrC,EAAG,aAAa,cAAe,OAAA,CAC/B,EAAG,UAAU,IAAI,eAAA,CACV,EAGT,WAAA,CAAW,MAAE,EAAA,OAAO,GAAA,CAClB,GAAA,CAAM,GAAE,GAAO,KAAK,MAEpB,EAAG,UAAU,OAAO,eAAA,CACpB,EAAG,gBAAgB,cAAA,CAEnB,EAAG,aAAa,QAAS,GAAG,IAAA,CAC5B,EAAG,aAAa,SAAU,GAAG,IAAA,CAC7B,EAAG,MAAM,QAAU,KAAK,sBAAwB,GAChD,KAAK,qBAAA,IAAuB,GAG9B,cAAc,EAAa,EAAA,CACzB,GAAA,CAAM,GAAE,EAAA,IAAI,GAAQ,KAAK,MACzB,EAAoB,EAAI,EAAK,EAAM,EAAA,CAGrC,iBAAiB,EAAA,CACf,EAAiB,KAAK,MAAM,GAAI,EAAA,CAMlC,YAAA,CACE,OAAO,EAAiB,KAAK,MAAM,GAAA,CAGrC,SAAA,CACE,GAAA,CAAS,QAAQ,KAAK,MAAM,GAAA,CAAA,OAErB,KAAK,QAAA,OAAA,KAAA"}