import html2canvas from "html2canvas"; import { stripExtension } from "./path"; import { isObject } from "./lang"; import { blobToFile } from "./file"; const screenshotDefaultOptions = { useCORS: true, logging: false, }; function generateScreenshotFilename(name = null, ext = null) { name = [stripExtension(name || "screenshot"), new Date().getTime()].join("-"); return ext ? `${name}.${ext}` : name; } // Attempts to convert a DOM element into a static image. // Returns a File object. async function captureElementScreenshot(el, filename, opts = {}) { if (isObject(filename)) { filename = null; opts = filename; } const screenshotFilename = generateScreenshotFilename(filename, "jpg"); const screenshotOptions = { ...screenshotDefaultOptions, ...opts, }; const canvas = await html2canvas(el, screenshotOptions); const imageBlob = await new Promise((resolve, reject) => { canvas.toBlob((result) => { return result ? resolve(result) : reject(new Error("Screenshot could not be created")); }); }); return blobToFile(imageBlob, screenshotFilename, "image/jpg"); } export { captureElementScreenshot };