{"version":3,"file":"CanvasDOMManager.min.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 { makeElementUnselectable, setCSSDimensions } from './util';\nimport type { CanvasItem } from './StaticCanvasDOMManager';\nimport { StaticCanvasDOMManager } from './StaticCanvasDOMManager';\nimport { setCanvasDimensions } from './util';\nimport { NONE } from '../../constants';\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      styles: {\n        position: 'absolute',\n        left: '0',\n        top: '0',\n      },\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    options: {\n      allowTouchScrolling?: boolean;\n      styles?: Record<string, string>;\n    },\n  ) {\n    const { styles, allowTouchScrolling } = options;\n    setStyle(element, {\n      ...styles,\n      'touch-action': allowTouchScrolling ? 'manipulation' : NONE,\n    });\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","super","_defineProperty","this","el","lowerCanvasEl","lower","upperCanvasEl","createUpperCanvas","upper","ctx","getContext","applyCanvasStyle","styles","position","left","top","container","createContainerElement","classList","add","parentNode","replaceChild","append","createCanvasElement","className","remove","setAttribute","style","cssText","getFabricDocument","createElement","setStyle","makeElementUnselectable","element","options","_objectSpread","NONE","setDimensions","size","retinaScaling","setCanvasDimensions","setCSSDimensions","cleanupDOM","removeChild","dispose","getEnv"],"mappings":"i1BAUO,MAAMA,UAAyBC,EAIpCC,WAAAA,CACEC,GAWA,IAVAC,oBACEA,GAAsB,EAAKC,eAC3BA,EAAiB,IAOlBC,UAAAC,OAAAD,QAAAE,IAAAF,UAAAE,GAAAF,UAAG,GAAA,GAEJG,MAAMN,GAAMO,EAAAC,KAAA,aAAA,GAAAD,EAAAC,KAAA,iBAAA,GACZ,MAAQC,GAAIC,GAAkBF,KAAKG,MAC7BC,EAAgBJ,KAAKK,oBAC3BL,KAAKM,MAAQ,CAAEL,GAAIG,EAAeG,IAAKH,EAAcI,WAAW,OAChER,KAAKS,iBAAiBP,EAAe,CACnCT,wBAEFO,KAAKS,iBAAiBL,EAAe,CACnCX,sBACAiB,OAAQ,CACNC,SAAU,WACVC,KAAM,IACNC,IAAK,OAGT,MAAMC,EAAYd,KAAKe,yBACvBD,EAAUE,UAAUC,IAAIvB,GACpBQ,EAAcgB,YAChBhB,EAAcgB,WAAWC,aAAaL,EAAWZ,GAEnDY,EAAUM,OAAOlB,EAAeE,GAChCJ,KAAKc,UAAYA,CACnB,CAEUT,iBAAAA,GACR,MAAQJ,GAAIC,GAAkBF,KAAKG,MAC7BF,EAAKoB,IAUX,OARApB,EAAGqB,UAAYpB,EAAcoB,UAE7BrB,EAAGe,UAAUO,OAAO,gBAEpBtB,EAAGe,UAAUC,IAAI,gBACjBhB,EAAGuB,aAAa,cAAe,OAC/BvB,EAAGwB,MAAMC,QAAUxB,EAAcuB,MAAMC,QACvCzB,EAAGuB,aAAa,YAAa,QACtBvB,CACT,CAEUc,sBAAAA,GACR,MAAMD,EAAYa,IAAoBC,cAAc,OAMpD,OALAd,EAAUU,aAAa,cAAe,WACtCK,EAASf,EAAW,CAClBH,SAAU,aAEZmB,EAAwBhB,GACjBA,CACT,CAMUL,gBAAAA,CACRsB,EACAC,GAKA,MAAMtB,OAAEA,EAAMjB,oBAAEA,GAAwBuC,EACxCH,EAASE,EAAOE,EAAAA,KACXvB,GAAM,GAAA,CACT,eAAgBjB,EAAsB,eAAiByC,KAEzDJ,EAAwBC,EAC1B,CAEAI,aAAAA,CAAcC,EAAaC,GACzBvC,MAAMqC,cAAcC,EAAMC,GAC1B,MAAMpC,GAAEA,EAAEM,IAAEA,GAAQP,KAAKM,MACzBgC,EAAoBrC,EAAIM,EAAK6B,EAAMC,EACrC,CAEAE,gBAAAA,CAAiBH,GACftC,MAAMyC,iBAAiBH,GACvBG,EAAiBvC,KAAKM,MAAML,GAAImC,GAChCG,EAAiBvC,KAAKc,UAAWsB,EACnC,CAEAI,UAAAA,CAAWJ,GACT,MAAMtB,EAAYd,KAAKc,WACnBb,GAAIC,GAAkBF,KAAKG,OAC3BF,GAAIG,GAAkBJ,KAAKM,MAC/BR,MAAM0C,WAAWJ,GACjBtB,EAAU2B,YAAYrC,GACtBU,EAAU2B,YAAYvC,GAClBY,EAAUI,YACZJ,EAAUI,WAAWC,aAAajB,EAAeY,EAErD,CAEA4B,OAAAA,GACE5C,MAAM4C,UACNC,IAASD,QAAQ1C,KAAKM,MAAML,WAErBD,KAAKM,aAELN,KAAKc,SACd"}