{"version":3,"file":"html-to-image-9aef9193.js","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}\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.decode = () => resolve(img);\n img.onload = () => resolve(img);\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, toArray } from './util';\nfunction formatCSSText(style) {\n const content = style.getPropertyValue('content');\n return `${style.cssText} content: '${content.replace(/'|\"/g, '')}';`;\n}\nfunction formatCSSProperties(style) {\n return toArray(style)\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) {\n const selector = `.${className}:${pseudo}`;\n const cssText = style.cssText\n ? formatCSSText(style)\n : formatCSSProperties(style);\n return document.createTextNode(`${selector}{${cssText}}`);\n}\nfunction clonePseudoElement(nativeNode, clonedNode, pseudo) {\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));\n clonedNode.appendChild(styleElement);\n}\nexport function clonePseudoElements(nativeNode, clonedNode) {\n clonePseudoElement(nativeNode, clonedNode, ':before');\n clonePseudoElement(nativeNode, clonedNode, ':after');\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.status === 404) {\n throw new Error(`Resource \"${res.url}\" not found`);\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 content = await fetchAsDataURL(resourceUrl, 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 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 } 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) {\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, {}, 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);\n }\n return node.cloneNode(false);\n}\nconst isSlotElement = (node) => node.tagName != null && node.tagName.toUpperCase() === 'SLOT';\nasync function cloneChildren(nativeNode, clonedNode, options) {\n var _a, _b;\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) {\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 toArray(sourceStyle).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) {\n if (isInstanceOfElement(clonedNode, Element)) {\n cloneCSSStyle(nativeNode, clonedNode);\n clonePseudoElements(nativeNode, clonedNode);\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))\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 if (!(await embedProp('background', clonedNode, options))) {\n await embedProp('background-image', clonedNode, options);\n }\n if (!(await embedProp('mask', clonedNode, options))) {\n await embedProp('mask-image', clonedNode, options);\n }\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 = 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, sheet.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}\nexport async function getWebFontCSS(node, options) {\n const rules = await parseWebFontRules(node, options);\n const cssTexts = await Promise.all(rules.map((rule) => {\n const baseUrl = rule.parentStyleSheet ? rule.parentStyleSheet.href : 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":["e","n","resolveUrl","url","baseUrl","doc","base","a","uuid","counter","random","toArray","arrayLike","arr","i","l","px","node","styleProperty","val","getNodeWidth","leftBorder","rightBorder","getNodeHeight","topBorder","bottomBorder","getImageSize","targetNode","options","width","height","getPixelRatio","ratio","FINAL_PROCESS","canvasDimensionLimit","checkCanvasDimensions","canvas","createImage","resolve","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","result","msg","cloneCanvasElement","cloneVideoElement","video","ctx","poster","cloneIFrameElement","iframe","_a","cloneNode","cloneSingleNode","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","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","inline","err","getWebFontRules","cssRules","parseWebFontRules","getWebFontCSS","rules","embedWebFonts","styleNode","sytleContent","toSvg","toCanvas","context","canvasWidth","canvasHeight","toPng","toJpeg"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9]}