{"version":3,"file":"html-to-image.cjs","sources":["../node_modules/html-to-image/es/util.js","../node_modules/html-to-image/es/clone-pseudos.js","../node_modules/html-to-image/es/mimes.js","../node_modules/html-to-image/es/dataurl.js","../node_modules/html-to-image/es/clone-node.js","../node_modules/html-to-image/es/embed-resources.js","../node_modules/html-to-image/es/embed-images.js","../node_modules/html-to-image/es/apply-style.js","../node_modules/html-to-image/es/embed-webfonts.js","../node_modules/html-to-image/es/index.js"],"sourcesContent":["export function resolveUrl(url, baseUrl) {\n    // url is absolute already\n    if (url.match(/^[a-z]+:\\/\\//i)) {\n        return url;\n    }\n    // url is absolute already, without protocol\n    if (url.match(/^\\/\\//)) {\n        return window.location.protocol + url;\n    }\n    // dataURI, mailto:, tel:, etc.\n    if (url.match(/^[a-z]+:/i)) {\n        return url;\n    }\n    const doc = document.implementation.createHTMLDocument();\n    const base = doc.createElement('base');\n    const a = doc.createElement('a');\n    doc.head.appendChild(base);\n    doc.body.appendChild(a);\n    if (baseUrl) {\n        base.href = baseUrl;\n    }\n    a.href = url;\n    return a.href;\n}\nexport const uuid = (() => {\n    // generate uuid for className of pseudo elements.\n    // We should not use GUIDs, otherwise pseudo elements sometimes cannot be captured.\n    let counter = 0;\n    // ref: http://stackoverflow.com/a/6248722/2519373\n    const random = () => \n    // eslint-disable-next-line no-bitwise\n    `0000${((Math.random() * 36 ** 4) << 0).toString(36)}`.slice(-4);\n    return () => {\n        counter += 1;\n        return `u${random()}${counter}`;\n    };\n})();\nexport function delay(ms) {\n    return (args) => new Promise((resolve) => {\n        setTimeout(() => resolve(args), ms);\n    });\n}\nexport function toArray(arrayLike) {\n    const arr = [];\n    for (let i = 0, l = arrayLike.length; i < l; i++) {\n        arr.push(arrayLike[i]);\n    }\n    return arr;\n}\nlet styleProps = null;\nexport function getStyleProperties(options = {}) {\n    if (styleProps) {\n        return styleProps;\n    }\n    if (options.includeStyleProperties) {\n        styleProps = options.includeStyleProperties;\n        return styleProps;\n    }\n    styleProps = toArray(window.getComputedStyle(document.documentElement));\n    return styleProps;\n}\nfunction px(node, styleProperty) {\n    const win = node.ownerDocument.defaultView || window;\n    const val = win.getComputedStyle(node).getPropertyValue(styleProperty);\n    return val ? parseFloat(val.replace('px', '')) : 0;\n}\nfunction getNodeWidth(node) {\n    const leftBorder = px(node, 'border-left-width');\n    const rightBorder = px(node, 'border-right-width');\n    return node.clientWidth + leftBorder + rightBorder;\n}\nfunction getNodeHeight(node) {\n    const topBorder = px(node, 'border-top-width');\n    const bottomBorder = px(node, 'border-bottom-width');\n    return node.clientHeight + topBorder + bottomBorder;\n}\nexport function getImageSize(targetNode, options = {}) {\n    const width = options.width || getNodeWidth(targetNode);\n    const height = options.height || getNodeHeight(targetNode);\n    return { width, height };\n}\nexport function getPixelRatio() {\n    let ratio;\n    let FINAL_PROCESS;\n    try {\n        FINAL_PROCESS = process;\n    }\n    catch (e) {\n        // pass\n    }\n    const val = FINAL_PROCESS && FINAL_PROCESS.env\n        ? FINAL_PROCESS.env.devicePixelRatio\n        : null;\n    if (val) {\n        ratio = parseInt(val, 10);\n        if (Number.isNaN(ratio)) {\n            ratio = 1;\n        }\n    }\n    return ratio || window.devicePixelRatio || 1;\n}\n// @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas#maximum_canvas_size\nconst canvasDimensionLimit = 16384;\nexport function checkCanvasDimensions(canvas) {\n    if (canvas.width > canvasDimensionLimit ||\n        canvas.height > canvasDimensionLimit) {\n        if (canvas.width > canvasDimensionLimit &&\n            canvas.height > canvasDimensionLimit) {\n            if (canvas.width > canvas.height) {\n                canvas.height *= canvasDimensionLimit / canvas.width;\n                canvas.width = canvasDimensionLimit;\n            }\n            else {\n                canvas.width *= canvasDimensionLimit / canvas.height;\n                canvas.height = canvasDimensionLimit;\n            }\n        }\n        else if (canvas.width > canvasDimensionLimit) {\n            canvas.height *= canvasDimensionLimit / canvas.width;\n            canvas.width = canvasDimensionLimit;\n        }\n        else {\n            canvas.width *= canvasDimensionLimit / canvas.height;\n            canvas.height = canvasDimensionLimit;\n        }\n    }\n}\nexport function canvasToBlob(canvas, options = {}) {\n    if (canvas.toBlob) {\n        return new Promise((resolve) => {\n            canvas.toBlob(resolve, options.type ? options.type : 'image/png', options.quality ? options.quality : 1);\n        });\n    }\n    return new Promise((resolve) => {\n        const binaryString = window.atob(canvas\n            .toDataURL(options.type ? options.type : undefined, options.quality ? options.quality : undefined)\n            .split(',')[1]);\n        const len = binaryString.length;\n        const binaryArray = new Uint8Array(len);\n        for (let i = 0; i < len; i += 1) {\n            binaryArray[i] = binaryString.charCodeAt(i);\n        }\n        resolve(new Blob([binaryArray], {\n            type: options.type ? options.type : 'image/png',\n        }));\n    });\n}\nexport function createImage(url) {\n    return new Promise((resolve, reject) => {\n        const img = new Image();\n        img.onload = () => {\n            img.decode().then(() => {\n                requestAnimationFrame(() => resolve(img));\n            });\n        };\n        img.onerror = reject;\n        img.crossOrigin = 'anonymous';\n        img.decoding = 'async';\n        img.src = url;\n    });\n}\nexport async function svgToDataURL(svg) {\n    return Promise.resolve()\n        .then(() => new XMLSerializer().serializeToString(svg))\n        .then(encodeURIComponent)\n        .then((html) => `data:image/svg+xml;charset=utf-8,${html}`);\n}\nexport async function nodeToDataURL(node, width, height) {\n    const xmlns = 'http://www.w3.org/2000/svg';\n    const svg = document.createElementNS(xmlns, 'svg');\n    const foreignObject = document.createElementNS(xmlns, 'foreignObject');\n    svg.setAttribute('width', `${width}`);\n    svg.setAttribute('height', `${height}`);\n    svg.setAttribute('viewBox', `0 0 ${width} ${height}`);\n    foreignObject.setAttribute('width', '100%');\n    foreignObject.setAttribute('height', '100%');\n    foreignObject.setAttribute('x', '0');\n    foreignObject.setAttribute('y', '0');\n    foreignObject.setAttribute('externalResourcesRequired', 'true');\n    svg.appendChild(foreignObject);\n    foreignObject.appendChild(node);\n    return svgToDataURL(svg);\n}\nexport const isInstanceOfElement = (node, instance) => {\n    if (node instanceof instance)\n        return true;\n    const nodePrototype = Object.getPrototypeOf(node);\n    if (nodePrototype === null)\n        return false;\n    return (nodePrototype.constructor.name === instance.name ||\n        isInstanceOfElement(nodePrototype, instance));\n};\n//# sourceMappingURL=util.js.map","import { uuid, getStyleProperties } from './util';\nfunction formatCSSText(style) {\n    const content = style.getPropertyValue('content');\n    return `${style.cssText} content: '${content.replace(/'|\"/g, '')}';`;\n}\nfunction formatCSSProperties(style, options) {\n    return getStyleProperties(options)\n        .map((name) => {\n        const value = style.getPropertyValue(name);\n        const priority = style.getPropertyPriority(name);\n        return `${name}: ${value}${priority ? ' !important' : ''};`;\n    })\n        .join(' ');\n}\nfunction getPseudoElementStyle(className, pseudo, style, options) {\n    const selector = `.${className}:${pseudo}`;\n    const cssText = style.cssText\n        ? formatCSSText(style)\n        : formatCSSProperties(style, options);\n    return document.createTextNode(`${selector}{${cssText}}`);\n}\nfunction clonePseudoElement(nativeNode, clonedNode, pseudo, options) {\n    const style = window.getComputedStyle(nativeNode, pseudo);\n    const content = style.getPropertyValue('content');\n    if (content === '' || content === 'none') {\n        return;\n    }\n    const className = uuid();\n    try {\n        clonedNode.className = `${clonedNode.className} ${className}`;\n    }\n    catch (err) {\n        return;\n    }\n    const styleElement = document.createElement('style');\n    styleElement.appendChild(getPseudoElementStyle(className, pseudo, style, options));\n    clonedNode.appendChild(styleElement);\n}\nexport function clonePseudoElements(nativeNode, clonedNode, options) {\n    clonePseudoElement(nativeNode, clonedNode, ':before', options);\n    clonePseudoElement(nativeNode, clonedNode, ':after', options);\n}\n//# sourceMappingURL=clone-pseudos.js.map","const WOFF = 'application/font-woff';\nconst JPEG = 'image/jpeg';\nconst mimes = {\n    woff: WOFF,\n    woff2: WOFF,\n    ttf: 'application/font-truetype',\n    eot: 'application/vnd.ms-fontobject',\n    png: 'image/png',\n    jpg: JPEG,\n    jpeg: JPEG,\n    gif: 'image/gif',\n    tiff: 'image/tiff',\n    svg: 'image/svg+xml',\n    webp: 'image/webp',\n};\nfunction getExtension(url) {\n    const match = /\\.([^./]*?)$/g.exec(url);\n    return match ? match[1] : '';\n}\nexport function getMimeType(url) {\n    const extension = getExtension(url).toLowerCase();\n    return mimes[extension] || '';\n}\n//# sourceMappingURL=mimes.js.map","function getContentFromDataUrl(dataURL) {\n    return dataURL.split(/,/)[1];\n}\nexport function isDataUrl(url) {\n    return url.search(/^(data:)/) !== -1;\n}\nexport function makeDataUrl(content, mimeType) {\n    return `data:${mimeType};base64,${content}`;\n}\nexport async function fetchAsDataURL(url, init, process) {\n    const res = await fetch(url, init);\n    if (!res.ok) {\n        throw new Error(`Resource \"${res.url}\" returned HTTP ${res.status}`);\n    }\n    const blob = await res.blob();\n    return new Promise((resolve, reject) => {\n        const reader = new FileReader();\n        reader.onerror = reject;\n        reader.onloadend = () => {\n            try {\n                resolve(process({ res, result: reader.result }));\n            }\n            catch (error) {\n                reject(error);\n            }\n        };\n        reader.readAsDataURL(blob);\n    });\n}\nconst cache = {};\nfunction getCacheKey(url, contentType, includeQueryParams) {\n    let key = url.replace(/\\?.*/, '');\n    if (includeQueryParams) {\n        key = url;\n    }\n    // font resource\n    if (/ttf|otf|eot|woff2?/i.test(key)) {\n        key = key.replace(/.*\\//, '');\n    }\n    return contentType ? `[${contentType}]${key}` : key;\n}\nexport async function resourceToDataURL(resourceUrl, contentType, options) {\n    const cacheKey = getCacheKey(resourceUrl, contentType, options.includeQueryParams);\n    if (cache[cacheKey] != null) {\n        return cache[cacheKey];\n    }\n    // ref: https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Bypassing_the_cache\n    if (options.cacheBust) {\n        // eslint-disable-next-line no-param-reassign\n        resourceUrl += (/\\?/.test(resourceUrl) ? '&' : '?') + new Date().getTime();\n    }\n    let dataURL;\n    try {\n        const fetchResource = (url) => fetchAsDataURL(url, options.fetchRequestInit, ({ res, result }) => {\n            if (!contentType) {\n                // eslint-disable-next-line no-param-reassign\n                contentType = res.headers.get('Content-Type') || '';\n            }\n            return getContentFromDataUrl(result);\n        });\n        let content;\n        try {\n            content = await fetchResource(resourceUrl);\n        }\n        catch (directError) {\n            const fallbackUrl = await options.resourceUrlResolver?.(resourceUrl, contentType);\n            if (!fallbackUrl || fallbackUrl === resourceUrl)\n                throw directError;\n            content = await fetchResource(fallbackUrl);\n        }\n        dataURL = makeDataUrl(content, contentType);\n    }\n    catch (error) {\n        dataURL = options.imagePlaceholder || '';\n        let msg = `Failed to fetch resource: ${resourceUrl}`;\n        if (error) {\n            msg = typeof error === 'string' ? error : error.message;\n        }\n        if (msg) {\n            console.warn(msg);\n        }\n    }\n    cache[cacheKey] = dataURL;\n    return dataURL;\n}\n//# sourceMappingURL=dataurl.js.map","import { clonePseudoElements } from './clone-pseudos';\nimport { createImage, toArray, isInstanceOfElement, getStyleProperties, } from './util';\nimport { getMimeType } from './mimes';\nimport { resourceToDataURL } from './dataurl';\nasync function cloneCanvasElement(canvas) {\n    const dataURL = canvas.toDataURL();\n    if (dataURL === 'data:,') {\n        return canvas.cloneNode(false);\n    }\n    return createImage(dataURL);\n}\nasync function cloneVideoElement(video, options) {\n    if (video.currentSrc) {\n        const canvas = document.createElement('canvas');\n        const ctx = canvas.getContext('2d');\n        canvas.width = video.clientWidth;\n        canvas.height = video.clientHeight;\n        ctx === null || ctx === void 0 ? void 0 : ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n        const dataURL = canvas.toDataURL();\n        return createImage(dataURL);\n    }\n    const poster = video.poster;\n    const contentType = getMimeType(poster);\n    const dataURL = await resourceToDataURL(poster, contentType, options);\n    return createImage(dataURL);\n}\nasync function cloneIFrameElement(iframe, options) {\n    var _a;\n    try {\n        if ((_a = iframe === null || iframe === void 0 ? void 0 : iframe.contentDocument) === null || _a === void 0 ? void 0 : _a.body) {\n            return (await cloneNode(iframe.contentDocument.body, options, true));\n        }\n    }\n    catch (_b) {\n        // Failed to clone iframe\n    }\n    return iframe.cloneNode(false);\n}\nasync function cloneSingleNode(node, options) {\n    if (isInstanceOfElement(node, HTMLCanvasElement)) {\n        return cloneCanvasElement(node);\n    }\n    if (isInstanceOfElement(node, HTMLVideoElement)) {\n        return cloneVideoElement(node, options);\n    }\n    if (isInstanceOfElement(node, HTMLIFrameElement)) {\n        return cloneIFrameElement(node, options);\n    }\n    return node.cloneNode(isSVGElement(node));\n}\nconst isSlotElement = (node) => node.tagName != null && node.tagName.toUpperCase() === 'SLOT';\nconst isSVGElement = (node) => node.tagName != null && node.tagName.toUpperCase() === 'SVG';\nasync function cloneChildren(nativeNode, clonedNode, options) {\n    var _a, _b;\n    if (isSVGElement(clonedNode)) {\n        return clonedNode;\n    }\n    let children = [];\n    if (isSlotElement(nativeNode) && nativeNode.assignedNodes) {\n        children = toArray(nativeNode.assignedNodes());\n    }\n    else if (isInstanceOfElement(nativeNode, HTMLIFrameElement) &&\n        ((_a = nativeNode.contentDocument) === null || _a === void 0 ? void 0 : _a.body)) {\n        children = toArray(nativeNode.contentDocument.body.childNodes);\n    }\n    else {\n        children = toArray(((_b = nativeNode.shadowRoot) !== null && _b !== void 0 ? _b : nativeNode).childNodes);\n    }\n    if (children.length === 0 ||\n        isInstanceOfElement(nativeNode, HTMLVideoElement)) {\n        return clonedNode;\n    }\n    await children.reduce((deferred, child) => deferred\n        .then(() => cloneNode(child, options))\n        .then((clonedChild) => {\n        if (clonedChild) {\n            clonedNode.appendChild(clonedChild);\n        }\n    }), Promise.resolve());\n    return clonedNode;\n}\nfunction cloneCSSStyle(nativeNode, clonedNode, options) {\n    const targetStyle = clonedNode.style;\n    if (!targetStyle) {\n        return;\n    }\n    const sourceStyle = window.getComputedStyle(nativeNode);\n    if (sourceStyle.cssText) {\n        targetStyle.cssText = sourceStyle.cssText;\n        targetStyle.transformOrigin = sourceStyle.transformOrigin;\n    }\n    else {\n        getStyleProperties(options).forEach((name) => {\n            let value = sourceStyle.getPropertyValue(name);\n            if (name === 'font-size' && value.endsWith('px')) {\n                const reducedFont = Math.floor(parseFloat(value.substring(0, value.length - 2))) - 0.1;\n                value = `${reducedFont}px`;\n            }\n            if (isInstanceOfElement(nativeNode, HTMLIFrameElement) &&\n                name === 'display' &&\n                value === 'inline') {\n                value = 'block';\n            }\n            if (name === 'd' && clonedNode.getAttribute('d')) {\n                value = `path(${clonedNode.getAttribute('d')})`;\n            }\n            targetStyle.setProperty(name, value, sourceStyle.getPropertyPriority(name));\n        });\n    }\n}\nfunction cloneInputValue(nativeNode, clonedNode) {\n    if (isInstanceOfElement(nativeNode, HTMLTextAreaElement)) {\n        clonedNode.innerHTML = nativeNode.value;\n    }\n    if (isInstanceOfElement(nativeNode, HTMLInputElement)) {\n        clonedNode.setAttribute('value', nativeNode.value);\n    }\n}\nfunction cloneSelectValue(nativeNode, clonedNode) {\n    if (isInstanceOfElement(nativeNode, HTMLSelectElement)) {\n        const clonedSelect = clonedNode;\n        const selectedOption = Array.from(clonedSelect.children).find((child) => nativeNode.value === child.getAttribute('value'));\n        if (selectedOption) {\n            selectedOption.setAttribute('selected', '');\n        }\n    }\n}\nfunction decorate(nativeNode, clonedNode, options) {\n    if (isInstanceOfElement(clonedNode, Element)) {\n        cloneCSSStyle(nativeNode, clonedNode, options);\n        clonePseudoElements(nativeNode, clonedNode, options);\n        cloneInputValue(nativeNode, clonedNode);\n        cloneSelectValue(nativeNode, clonedNode);\n    }\n    return clonedNode;\n}\nasync function ensureSVGSymbols(clone, options) {\n    const uses = clone.querySelectorAll ? clone.querySelectorAll('use') : [];\n    if (uses.length === 0) {\n        return clone;\n    }\n    const processedDefs = {};\n    for (let i = 0; i < uses.length; i++) {\n        const use = uses[i];\n        const id = use.getAttribute('xlink:href');\n        if (id) {\n            const exist = clone.querySelector(id);\n            const definition = document.querySelector(id);\n            if (!exist && definition && !processedDefs[id]) {\n                // eslint-disable-next-line no-await-in-loop\n                processedDefs[id] = (await cloneNode(definition, options, true));\n            }\n        }\n    }\n    const nodes = Object.values(processedDefs);\n    if (nodes.length) {\n        const ns = 'http://www.w3.org/1999/xhtml';\n        const svg = document.createElementNS(ns, 'svg');\n        svg.setAttribute('xmlns', ns);\n        svg.style.position = 'absolute';\n        svg.style.width = '0';\n        svg.style.height = '0';\n        svg.style.overflow = 'hidden';\n        svg.style.display = 'none';\n        const defs = document.createElementNS(ns, 'defs');\n        svg.appendChild(defs);\n        for (let i = 0; i < nodes.length; i++) {\n            defs.appendChild(nodes[i]);\n        }\n        clone.appendChild(svg);\n    }\n    return clone;\n}\nexport async function cloneNode(node, options, isRoot) {\n    if (!isRoot && options.filter && !options.filter(node)) {\n        return null;\n    }\n    return Promise.resolve(node)\n        .then((clonedNode) => cloneSingleNode(clonedNode, options))\n        .then((clonedNode) => cloneChildren(node, clonedNode, options))\n        .then((clonedNode) => decorate(node, clonedNode, options))\n        .then((clonedNode) => ensureSVGSymbols(clonedNode, options));\n}\n//# sourceMappingURL=clone-node.js.map","import { resolveUrl } from './util';\nimport { getMimeType } from './mimes';\nimport { isDataUrl, makeDataUrl, resourceToDataURL } from './dataurl';\nconst URL_REGEX = /url\\((['\"]?)([^'\"]+?)\\1\\)/g;\nconst URL_WITH_FORMAT_REGEX = /url\\([^)]+\\)\\s*format\\(([\"']?)([^\"']+)\\1\\)/g;\nconst FONT_SRC_REGEX = /src:\\s*(?:url\\([^)]+\\)\\s*format\\([^)]+\\)[,;]\\s*)+/g;\nfunction toRegex(url) {\n    // eslint-disable-next-line no-useless-escape\n    const escaped = url.replace(/([.*+?^${}()|\\[\\]\\/\\\\])/g, '\\\\$1');\n    return new RegExp(`(url\\\\(['\"]?)(${escaped})(['\"]?\\\\))`, 'g');\n}\nexport function parseURLs(cssText) {\n    const urls = [];\n    cssText.replace(URL_REGEX, (raw, quotation, url) => {\n        urls.push(url);\n        return raw;\n    });\n    return urls.filter((url) => !isDataUrl(url));\n}\nexport async function embed(cssText, resourceURL, baseURL, options, getContentFromUrl) {\n    try {\n        const resolvedURL = baseURL ? resolveUrl(resourceURL, baseURL) : resourceURL;\n        const contentType = getMimeType(resourceURL);\n        let dataURL;\n        if (getContentFromUrl) {\n            const content = await getContentFromUrl(resolvedURL);\n            dataURL = makeDataUrl(content, contentType);\n        }\n        else {\n            dataURL = await resourceToDataURL(resolvedURL, contentType, options);\n        }\n        return cssText.replace(toRegex(resourceURL), `$1${dataURL}$3`);\n    }\n    catch (error) {\n        // pass\n    }\n    return cssText;\n}\nfunction filterPreferredFontFormat(str, { preferredFontFormat }) {\n    return !preferredFontFormat\n        ? str\n        : str.replace(FONT_SRC_REGEX, (match) => {\n            // eslint-disable-next-line no-constant-condition\n            while (true) {\n                const [src, , format] = URL_WITH_FORMAT_REGEX.exec(match) || [];\n                if (!format) {\n                    return '';\n                }\n                if (format === preferredFontFormat) {\n                    return `src: ${src};`;\n                }\n            }\n        });\n}\nexport function shouldEmbed(url) {\n    return url.search(URL_REGEX) !== -1;\n}\nexport async function embedResources(cssText, baseUrl, options) {\n    if (!shouldEmbed(cssText)) {\n        return cssText;\n    }\n    const filteredCSSText = filterPreferredFontFormat(cssText, options);\n    const urls = parseURLs(filteredCSSText);\n    return urls.reduce((deferred, url) => deferred.then((css) => embed(css, url, baseUrl, options)), Promise.resolve(filteredCSSText));\n}\n//# sourceMappingURL=embed-resources.js.map","import { embedResources } from './embed-resources';\nimport { toArray, isInstanceOfElement } from './util';\nimport { isDataUrl, resourceToDataURL } from './dataurl';\nimport { getMimeType } from './mimes';\nasync function embedProp(propName, node, options) {\n    var _a;\n    const propValue = (_a = node.style) === null || _a === void 0 ? void 0 : _a.getPropertyValue(propName);\n    if (propValue) {\n        const cssString = await embedResources(propValue, null, options);\n        node.style.setProperty(propName, cssString, node.style.getPropertyPriority(propName));\n        return true;\n    }\n    return false;\n}\nasync function embedBackground(clonedNode, options) {\n    ;\n    (await embedProp('background', clonedNode, options)) ||\n        (await embedProp('background-image', clonedNode, options));\n    (await embedProp('mask', clonedNode, options)) ||\n        (await embedProp('-webkit-mask', clonedNode, options)) ||\n        (await embedProp('mask-image', clonedNode, options)) ||\n        (await embedProp('-webkit-mask-image', clonedNode, options));\n}\nasync function embedImageNode(clonedNode, options) {\n    const isImageElement = isInstanceOfElement(clonedNode, HTMLImageElement);\n    if (!(isImageElement && !isDataUrl(clonedNode.src)) &&\n        !(isInstanceOfElement(clonedNode, SVGImageElement) &&\n            !isDataUrl(clonedNode.href.baseVal))) {\n        return;\n    }\n    const url = isImageElement ? clonedNode.src : clonedNode.href.baseVal;\n    const dataURL = await resourceToDataURL(url, getMimeType(url), options);\n    await new Promise((resolve, reject) => {\n        clonedNode.onload = resolve;\n        clonedNode.onerror = options.onImageErrorHandler\n            ? (...attributes) => {\n                try {\n                    resolve(options.onImageErrorHandler(...attributes));\n                }\n                catch (error) {\n                    reject(error);\n                }\n            }\n            : reject;\n        const image = clonedNode;\n        if (image.decode) {\n            image.decode = resolve;\n        }\n        if (image.loading === 'lazy') {\n            image.loading = 'eager';\n        }\n        if (isImageElement) {\n            clonedNode.srcset = '';\n            clonedNode.src = dataURL;\n        }\n        else {\n            clonedNode.href.baseVal = dataURL;\n        }\n    });\n}\nasync function embedChildren(clonedNode, options) {\n    const children = toArray(clonedNode.childNodes);\n    const deferreds = children.map((child) => embedImages(child, options));\n    await Promise.all(deferreds).then(() => clonedNode);\n}\nexport async function embedImages(clonedNode, options) {\n    if (isInstanceOfElement(clonedNode, Element)) {\n        await embedBackground(clonedNode, options);\n        await embedImageNode(clonedNode, options);\n        await embedChildren(clonedNode, options);\n    }\n}\n//# sourceMappingURL=embed-images.js.map","export function applyStyle(node, options) {\n    const { style } = node;\n    if (options.backgroundColor) {\n        style.backgroundColor = options.backgroundColor;\n    }\n    if (options.width) {\n        style.width = `${options.width}px`;\n    }\n    if (options.height) {\n        style.height = `${options.height}px`;\n    }\n    const manual = options.style;\n    if (manual != null) {\n        Object.keys(manual).forEach((key) => {\n            style[key] = manual[key];\n        });\n    }\n    return node;\n}\n//# sourceMappingURL=apply-style.js.map","import { toArray } from './util';\nimport { fetchAsDataURL } from './dataurl';\nimport { shouldEmbed, embedResources } from './embed-resources';\nconst cssFetchCache = {};\nasync function fetchCSS(url) {\n    let cache = cssFetchCache[url];\n    if (cache != null) {\n        return cache;\n    }\n    const res = await fetch(url);\n    const cssText = await res.text();\n    cache = { url, cssText };\n    cssFetchCache[url] = cache;\n    return cache;\n}\nasync function embedFonts(data, options) {\n    let cssText = data.cssText;\n    const regexUrl = /url\\([\"']?([^\"')]+)[\"']?\\)/g;\n    const fontLocs = cssText.match(/url\\([^)]+\\)/g) || [];\n    const loadFonts = fontLocs.map(async (loc) => {\n        let url = loc.replace(regexUrl, '$1');\n        if (!url.startsWith('https://')) {\n            url = new URL(url, data.url).href;\n        }\n        return fetchAsDataURL(url, options.fetchRequestInit, ({ result }) => {\n            cssText = cssText.replace(loc, `url(${result})`);\n            return [loc, result];\n        });\n    });\n    return Promise.all(loadFonts).then(() => cssText);\n}\nfunction parseCSS(source) {\n    if (source == null) {\n        return [];\n    }\n    const result = [];\n    const commentsRegex = /(\\/\\*[\\s\\S]*?\\*\\/)/gi;\n    // strip out comments\n    let cssText = source.replace(commentsRegex, '');\n    // eslint-disable-next-line prefer-regex-literals\n    const keyframesRegex = new RegExp('((@.*?keyframes [\\\\s\\\\S]*?){([\\\\s\\\\S]*?}\\\\s*?)})', 'gi');\n    // eslint-disable-next-line no-constant-condition\n    while (true) {\n        const matches = keyframesRegex.exec(cssText);\n        if (matches === null) {\n            break;\n        }\n        result.push(matches[0]);\n    }\n    cssText = cssText.replace(keyframesRegex, '');\n    const importRegex = /@import[\\s\\S]*?url\\([^)]*\\)[\\s\\S]*?;/gi;\n    // to match css & media queries together\n    const combinedCSSRegex = '((\\\\s*?(?:\\\\/\\\\*[\\\\s\\\\S]*?\\\\*\\\\/)?\\\\s*?@media[\\\\s\\\\S]' +\n        '*?){([\\\\s\\\\S]*?)}\\\\s*?})|(([\\\\s\\\\S]*?){([\\\\s\\\\S]*?)})';\n    // unified regex\n    const unifiedRegex = new RegExp(combinedCSSRegex, 'gi');\n    // eslint-disable-next-line no-constant-condition\n    while (true) {\n        let matches = importRegex.exec(cssText);\n        if (matches === null) {\n            matches = unifiedRegex.exec(cssText);\n            if (matches === null) {\n                break;\n            }\n            else {\n                importRegex.lastIndex = unifiedRegex.lastIndex;\n            }\n        }\n        else {\n            unifiedRegex.lastIndex = importRegex.lastIndex;\n        }\n        result.push(matches[0]);\n    }\n    return result;\n}\nasync function getCSSRules(styleSheets, options) {\n    const ret = [];\n    const deferreds = [];\n    // First loop inlines imports\n    styleSheets.forEach((sheet) => {\n        if ('cssRules' in sheet) {\n            try {\n                toArray(sheet.cssRules || []).forEach((item, index) => {\n                    if (item.type === CSSRule.IMPORT_RULE) {\n                        let importIndex = index + 1;\n                        const url = item.href;\n                        const deferred = fetchCSS(url)\n                            .then((metadata) => embedFonts(metadata, options))\n                            .then((cssText) => parseCSS(cssText).forEach((rule) => {\n                            try {\n                                sheet.insertRule(rule, rule.startsWith('@import')\n                                    ? (importIndex += 1)\n                                    : sheet.cssRules.length);\n                            }\n                            catch (error) {\n                                console.error('Error inserting rule from remote css', {\n                                    rule,\n                                    error,\n                                });\n                            }\n                        }))\n                            .catch((e) => {\n                            console.error('Error loading remote css', e.toString());\n                        });\n                        deferreds.push(deferred);\n                    }\n                });\n            }\n            catch (e) {\n                const inline = styleSheets.find((a) => a.href == null) || document.styleSheets[0];\n                if (sheet.href != null) {\n                    deferreds.push(fetchCSS(sheet.href)\n                        .then((metadata) => embedFonts(metadata, options))\n                        .then((cssText) => parseCSS(cssText).forEach((rule) => {\n                        inline.insertRule(rule, inline.cssRules.length);\n                    }))\n                        .catch((err) => {\n                        console.error('Error loading remote stylesheet', err);\n                    }));\n                }\n                console.error('Error inlining remote css file', e);\n            }\n        }\n    });\n    return Promise.all(deferreds).then(() => {\n        // Second loop parses rules\n        styleSheets.forEach((sheet) => {\n            if ('cssRules' in sheet) {\n                try {\n                    toArray(sheet.cssRules || []).forEach((item) => {\n                        ret.push(item);\n                    });\n                }\n                catch (e) {\n                    console.error(`Error while reading CSS rules from ${sheet.href}`, e);\n                }\n            }\n        });\n        return ret;\n    });\n}\nfunction getWebFontRules(cssRules) {\n    return cssRules\n        .filter((rule) => rule.type === CSSRule.FONT_FACE_RULE)\n        .filter((rule) => shouldEmbed(rule.style.getPropertyValue('src')));\n}\nasync function parseWebFontRules(node, options) {\n    if (node.ownerDocument == null) {\n        throw new Error('Provided element is not within a Document');\n    }\n    const styleSheets = toArray(node.ownerDocument.styleSheets);\n    const cssRules = await getCSSRules(styleSheets, options);\n    return getWebFontRules(cssRules);\n}\nfunction normalizeFontFamily(font) {\n    return font.trim().replace(/[\"']/g, '');\n}\nfunction getUsedFonts(node) {\n    const fonts = new Set();\n    function traverse(node) {\n        const fontFamily = node.style.fontFamily || getComputedStyle(node).fontFamily;\n        fontFamily.split(',').forEach((font) => {\n            fonts.add(normalizeFontFamily(font));\n        });\n        Array.from(node.children).forEach((child) => {\n            if (child instanceof HTMLElement) {\n                traverse(child);\n            }\n        });\n    }\n    traverse(node);\n    return fonts;\n}\nexport async function getWebFontCSS(node, options) {\n    const rules = await parseWebFontRules(node, options);\n    const usedFonts = getUsedFonts(node);\n    const cssTexts = await Promise.all(rules\n        .filter((rule) => usedFonts.has(normalizeFontFamily(rule.style.fontFamily)))\n        .map((rule) => {\n        const baseUrl = rule.parentStyleSheet\n            ? rule.parentStyleSheet.href\n            : null;\n        return embedResources(rule.cssText, baseUrl, options);\n    }));\n    return cssTexts.join('\\n');\n}\nexport async function embedWebFonts(clonedNode, options) {\n    const cssText = options.fontEmbedCSS != null\n        ? options.fontEmbedCSS\n        : options.skipFonts\n            ? null\n            : await getWebFontCSS(clonedNode, options);\n    if (cssText) {\n        const styleNode = document.createElement('style');\n        const sytleContent = document.createTextNode(cssText);\n        styleNode.appendChild(sytleContent);\n        if (clonedNode.firstChild) {\n            clonedNode.insertBefore(styleNode, clonedNode.firstChild);\n        }\n        else {\n            clonedNode.appendChild(styleNode);\n        }\n    }\n}\n//# sourceMappingURL=embed-webfonts.js.map","import { cloneNode } from './clone-node';\nimport { embedImages } from './embed-images';\nimport { applyStyle } from './apply-style';\nimport { embedWebFonts, getWebFontCSS } from './embed-webfonts';\nimport { getImageSize, getPixelRatio, createImage, canvasToBlob, nodeToDataURL, checkCanvasDimensions, } from './util';\nexport async function toSvg(node, options = {}) {\n    const { width, height } = getImageSize(node, options);\n    const clonedNode = (await cloneNode(node, options, true));\n    await embedWebFonts(clonedNode, options);\n    await embedImages(clonedNode, options);\n    applyStyle(clonedNode, options);\n    const datauri = await nodeToDataURL(clonedNode, width, height);\n    return datauri;\n}\nexport async function toCanvas(node, options = {}) {\n    const { width, height } = getImageSize(node, options);\n    const svg = await toSvg(node, options);\n    const img = await createImage(svg);\n    const canvas = document.createElement('canvas');\n    const context = canvas.getContext('2d');\n    const ratio = options.pixelRatio || getPixelRatio();\n    const canvasWidth = options.canvasWidth || width;\n    const canvasHeight = options.canvasHeight || height;\n    canvas.width = canvasWidth * ratio;\n    canvas.height = canvasHeight * ratio;\n    if (!options.skipAutoScale) {\n        checkCanvasDimensions(canvas);\n    }\n    canvas.style.width = `${canvasWidth}`;\n    canvas.style.height = `${canvasHeight}`;\n    if (options.backgroundColor) {\n        context.fillStyle = options.backgroundColor;\n        context.fillRect(0, 0, canvas.width, canvas.height);\n    }\n    context.drawImage(img, 0, 0, canvas.width, canvas.height);\n    return canvas;\n}\nexport async function toPixelData(node, options = {}) {\n    const { width, height } = getImageSize(node, options);\n    const canvas = await toCanvas(node, options);\n    const ctx = canvas.getContext('2d');\n    return ctx.getImageData(0, 0, width, height).data;\n}\nexport async function toPng(node, options = {}) {\n    const canvas = await toCanvas(node, options);\n    return canvas.toDataURL();\n}\nexport async function toJpeg(node, options = {}) {\n    const canvas = await toCanvas(node, options);\n    return canvas.toDataURL('image/jpeg', options.quality || 1);\n}\nexport async function toBlob(node, options = {}) {\n    const canvas = await toCanvas(node, options);\n    const blob = await canvasToBlob(canvas);\n    return blob;\n}\nexport async function getFontEmbedCSS(node, options = {}) {\n    return getWebFontCSS(node, options);\n}\n//# sourceMappingURL=index.js.map"],"names":["resolveUrl","url","baseUrl","doc","base","uuid","counter","random","toArray","arrayLike","arr","i","l","styleProps","getStyleProperties","options","px","node","styleProperty","val","getNodeWidth","leftBorder","rightBorder","getNodeHeight","topBorder","bottomBorder","getImageSize","targetNode","width","height","getPixelRatio","ratio","FINAL_PROCESS","canvasDimensionLimit","checkCanvasDimensions","canvas","canvasToBlob","resolve","binaryString","len","binaryArray","createImage","reject","img","svgToDataURL","svg","html","nodeToDataURL","xmlns","foreignObject","isInstanceOfElement","instance","nodePrototype","formatCSSText","style","content","formatCSSProperties","name","value","priority","getPseudoElementStyle","className","pseudo","selector","cssText","clonePseudoElement","nativeNode","clonedNode","styleElement","clonePseudoElements","WOFF","JPEG","mimes","getExtension","match","getMimeType","extension","getContentFromDataUrl","dataURL","isDataUrl","makeDataUrl","mimeType","fetchAsDataURL","init","process","res","blob","reader","error","cache","getCacheKey","contentType","includeQueryParams","key","resourceToDataURL","resourceUrl","cacheKey","fetchResource","result","directError","fallbackUrl","msg","cloneCanvasElement","cloneVideoElement","video","ctx","poster","cloneIFrameElement","iframe","_a","cloneNode","cloneSingleNode","isSVGElement","isSlotElement","cloneChildren","_b","children","deferred","child","clonedChild","cloneCSSStyle","targetStyle","sourceStyle","cloneInputValue","cloneSelectValue","clonedSelect","selectedOption","decorate","ensureSVGSymbols","clone","uses","processedDefs","id","exist","definition","nodes","ns","defs","isRoot","URL_REGEX","URL_WITH_FORMAT_REGEX","FONT_SRC_REGEX","toRegex","escaped","parseURLs","urls","raw","quotation","embed","resourceURL","baseURL","getContentFromUrl","resolvedURL","filterPreferredFontFormat","str","preferredFontFormat","src","format","shouldEmbed","embedResources","filteredCSSText","css","embedProp","propName","propValue","cssString","embedBackground","embedImageNode","isImageElement","attributes","image","embedChildren","deferreds","embedImages","applyStyle","manual","cssFetchCache","fetchCSS","embedFonts","data","regexUrl","loadFonts","loc","parseCSS","source","commentsRegex","keyframesRegex","matches","importRegex","combinedCSSRegex","unifiedRegex","getCSSRules","styleSheets","ret","sheet","item","index","importIndex","metadata","rule","e","inline","a","err","getWebFontRules","cssRules","parseWebFontRules","normalizeFontFamily","font","getUsedFonts","fonts","traverse","getWebFontCSS","rules","usedFonts","embedWebFonts","styleNode","sytleContent","toSvg","toCanvas","context","canvasWidth","canvasHeight","toPixelData","toPng","toJpeg","toBlob","getFontEmbedCSS"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9]}