{"version":3,"file":"dom.mjs","names":[],"sources":["../../../../src/util/misc/dom.ts"],"sourcesContent":["import { getFabricDocument } from '../../env';\nimport type { ImageFormat, TSize } from '../../typedefs';\nimport { FabricError } from '../internals/console';\n/**\n * Creates canvas element\n * @return {CanvasElement} initialized canvas element\n */\nexport const createCanvasElement = (): HTMLCanvasElement => {\n  const element = getFabricDocument().createElement('canvas');\n  if (!element || typeof element.getContext === 'undefined') {\n    throw new FabricError('Failed to create `canvas` element');\n  }\n  return element;\n};\n\n/**\n * Creates image element (works on client and node)\n * @return {HTMLImageElement} HTML image element\n */\nexport const createImage = (): HTMLImageElement =>\n  getFabricDocument().createElement('img');\n\n/**\n * Creates a canvas element that is a copy of another and is also painted\n * @param {CanvasElement} canvas to copy size and content of\n * @return {CanvasElement} initialized canvas element\n */\nexport const copyCanvasElement = (\n  canvas: HTMLCanvasElement,\n): HTMLCanvasElement => {\n  const newCanvas = createCanvasElementFor(canvas);\n  newCanvas.getContext('2d')?.drawImage(canvas, 0, 0);\n  return newCanvas;\n};\n\n/**\n * Creates a canvas element as big as another\n * @param {CanvasElement} canvas to copy size and content of\n * @return {CanvasElement} initialized canvas element\n */\nexport const createCanvasElementFor = (\n  canvas: HTMLCanvasElement | ImageData | HTMLImageElement | TSize,\n): HTMLCanvasElement => {\n  const newCanvas = createCanvasElement();\n  newCanvas.width = canvas.width;\n  newCanvas.height = canvas.height;\n  return newCanvas;\n};\n\n/**\n * since 2.6.0 moved from canvas instance to utility.\n * possibly useless\n * @param {CanvasElement} canvasEl to copy size and content of\n * @param {String} format 'jpeg' or 'png', in some browsers 'webp' is ok too\n * @param {number} quality <= 1 and > 0\n * @return {String} data url\n */\nexport const toDataURL = (\n  canvasEl: HTMLCanvasElement,\n  format: ImageFormat,\n  quality: number,\n) => canvasEl.toDataURL(`image/${format}`, quality);\n\nexport const isHTMLCanvas = (\n  canvas?: HTMLCanvasElement | string,\n): canvas is HTMLCanvasElement => {\n  return !!canvas && (canvas as HTMLCanvasElement).getContext !== undefined;\n};\n\nexport const toBlob = (\n  canvasEl: HTMLCanvasElement,\n  format?: ImageFormat,\n  quality?: number,\n): Promise<Blob | null> =>\n  new Promise((resolve, _) => {\n    canvasEl.toBlob(resolve, `image/${format}`, quality);\n  });\n"],"mappings":";;;;;;;AAOA,MAAa,4BAA+C;CAC1D,MAAM,UAAU,mBAAmB,CAAC,cAAc,SAAS;AAC3D,KAAI,CAAC,WAAW,OAAO,QAAQ,eAAe,YAC5C,OAAM,IAAI,YAAY,oCAAoC;AAE5D,QAAO;;;;;;AAOT,MAAa,oBACX,mBAAmB,CAAC,cAAc,MAAM;;;;;;AAO1C,MAAa,qBACX,WACsB;;CACtB,MAAM,YAAY,uBAAuB,OAAO;AAChD,EAAA,wBAAA,UAAU,WAAW,KAAK,MAAA,QAAA,0BAAA,KAAA,KAAA,sBAAE,UAAU,QAAQ,GAAG,EAAE;AACnD,QAAO;;;;;;;AAQT,MAAa,0BACX,WACsB;CACtB,MAAM,YAAY,qBAAqB;AACvC,WAAU,QAAQ,OAAO;AACzB,WAAU,SAAS,OAAO;AAC1B,QAAO;;;;;;;;;;AAWT,MAAa,aACX,UACA,QACA,YACG,SAAS,UAAU,SAAS,UAAU,QAAQ;AAEnD,MAAa,gBACX,WACgC;AAChC,QAAO,CAAC,CAAC,UAAW,OAA6B,eAAe,KAAA;;AAGlE,MAAa,UACX,UACA,QACA,YAEA,IAAI,SAAS,SAAS,MAAM;AAC1B,UAAS,OAAO,SAAS,SAAS,UAAU,QAAQ;EACpD"}