{"version":3,"file":"CanvasDOMManager.mjs","sources":["../../../../src/canvas/DOMManagers/CanvasDOMManager.ts"],"sourcesContent":["import { getEnv, getFabricDocument } from '../../env';\nimport type { TSize } from '../../typedefs';\nimport { createCanvasElement, setStyle } from '../../util';\nimport type { CSSDimensions } from './util';\nimport {\n  allowTouchScrolling,\n  makeElementUnselectable,\n  setCSSDimensions,\n} from './util';\nimport type { CanvasItem } from './StaticCanvasDOMManager';\nimport { StaticCanvasDOMManager } from './StaticCanvasDOMManager';\nimport { setCanvasDimensions } from './util';\n\nexport class CanvasDOMManager extends StaticCanvasDOMManager {\n  upper: CanvasItem;\n  container: HTMLDivElement;\n\n  constructor(\n    arg0?: string | HTMLCanvasElement,\n    {\n      allowTouchScrolling = false,\n      containerClass = '',\n    }: {\n      allowTouchScrolling?: boolean;\n      /**\n       * @deprecated here only for backward compatibility\n       */\n      containerClass?: string;\n    } = {}\n  ) {\n    super(arg0);\n    const { el: lowerCanvasEl } = this.lower;\n    const upperCanvasEl = this.createUpperCanvas();\n    this.upper = { el: upperCanvasEl, ctx: upperCanvasEl.getContext('2d')! };\n    this.applyCanvasStyle(lowerCanvasEl, {\n      allowTouchScrolling,\n    });\n    this.applyCanvasStyle(upperCanvasEl, {\n      allowTouchScrolling,\n    });\n    const container = this.createContainerElement();\n    container.classList.add(containerClass);\n    if (lowerCanvasEl.parentNode) {\n      lowerCanvasEl.parentNode.replaceChild(container, lowerCanvasEl);\n    }\n    container.append(lowerCanvasEl, upperCanvasEl);\n    this.container = container;\n  }\n\n  protected createUpperCanvas() {\n    const { el: lowerCanvasEl } = this.lower;\n    const el = createCanvasElement();\n    // we assign the same classname of the lowerCanvas\n    el.className = lowerCanvasEl.className;\n    // but then we remove the lower-canvas specific className\n    el.classList.remove('lower-canvas');\n    // we add the specific upper-canvas class\n    el.classList.add('upper-canvas');\n    el.setAttribute('data-fabric', 'top');\n    el.style.cssText = lowerCanvasEl.style.cssText;\n    el.setAttribute('draggable', 'true');\n    return el;\n  }\n\n  protected createContainerElement() {\n    const container = getFabricDocument().createElement('div');\n    container.setAttribute('data-fabric', 'wrapper');\n    setStyle(container, {\n      position: 'relative',\n    });\n    makeElementUnselectable(container);\n    return container;\n  }\n\n  /**\n   * @private\n   * @param {HTMLCanvasElement} element canvas element to apply styles on\n   */\n  protected applyCanvasStyle(\n    element: HTMLCanvasElement,\n    { allowTouchScrolling: allow }: { allowTouchScrolling: boolean }\n  ) {\n    setStyle(element, {\n      position: 'absolute',\n      left: '0',\n      top: '0',\n    });\n    allowTouchScrolling(element, allow);\n    makeElementUnselectable(element);\n  }\n\n  setDimensions(size: TSize, retinaScaling: number) {\n    super.setDimensions(size, retinaScaling);\n    const { el, ctx } = this.upper;\n    setCanvasDimensions(el, ctx, size, retinaScaling);\n  }\n\n  setCSSDimensions(size: Partial<CSSDimensions>): void {\n    super.setCSSDimensions(size);\n    setCSSDimensions(this.upper.el, size);\n    setCSSDimensions(this.container, size);\n  }\n\n  cleanupDOM(size: TSize) {\n    const container = this.container,\n      { el: lowerCanvasEl } = this.lower,\n      { el: upperCanvasEl } = this.upper;\n    super.cleanupDOM(size);\n    container.removeChild(upperCanvasEl);\n    container.removeChild(lowerCanvasEl);\n    if (container.parentNode) {\n      container.parentNode.replaceChild(lowerCanvasEl, container);\n    }\n  }\n\n  dispose() {\n    super.dispose();\n    getEnv().dispose(this.upper.el);\n    // @ts-expect-error disposing\n    delete this.upper;\n    // @ts-expect-error disposing\n    delete this.container;\n  }\n}\n"],"names":["CanvasDOMManager","StaticCanvasDOMManager","constructor","arg0","allowTouchScrolling","containerClass","arguments","length","undefined","_defineProperty","el","lowerCanvasEl","lower","upperCanvasEl","createUpperCanvas","upper","ctx","getContext","applyCanvasStyle","container","createContainerElement","classList","add","parentNode","replaceChild","append","createCanvasElement","className","remove","setAttribute","style","cssText","getFabricDocument","createElement","setStyle","position","makeElementUnselectable","element","_ref","allow","left","top","setDimensions","size","retinaScaling","setCanvasDimensions","setCSSDimensions","cleanupDOM","removeChild","dispose","getEnv"],"mappings":"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"}