{"version":3,"sources":["webpack:///./node_modules/copy-image-clipboard/dist/index.js","webpack:///./node_modules/html-to-image/es/util.js","webpack:///./node_modules/html-to-image/es/getBlobFromURL.js","webpack:///./node_modules/html-to-image/es/clonePseudoElements.js","webpack:///./node_modules/html-to-image/es/cloneNode.js","webpack:///./node_modules/html-to-image/es/embedResources.js","webpack:///./node_modules/html-to-image/es/embedImages.js","webpack:///./node_modules/html-to-image/es/applyStyleFromOptions.js","webpack:///./node_modules/html-to-image/es/embedWebFonts.js","webpack:///./node_modules/html-to-image/es/index.js"],"names":["__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","Promise","reject","fulfilled","step","next","e","rejected","result","done","then","apply","getBlobFromImageSource","imageSource","this","response","fetch","blob","isJpegBlob","type","includes","isPngBlob","createImageElement","imageElement","document","createElement","crossOrigin","src","onload","event","target","onabort","onerror","getBlobFromImageElement","canvas","context","getContext","width","height","drawImage","toBlob","convertBlobToPng","imageBlob","URL","createObjectURL","copyBlobToClipboard","items","clipboardItem","ClipboardItem","navigator","clipboard","write","copyImageToClipboard","pngBlob","Error","WOFF","JPEG","mimes","woff","woff2","ttf","eot","png","jpg","jpeg","gif","tiff","svg","getExtension","url","match","exec","getMimeType","extension","toLowerCase","resolveUrl","baseUrl","window","location","protocol","doc","implementation","createHTMLDocument","base","a","head","appendChild","body","href","isDataUrl","search","makeDataUrl","content","mimeType","parseDataUrlContent","dataURL","split","uuid","counter","random","Math","toString","slice","toArray","arrayLike","arr","i","l","length","push","px","node","styleProperty","win","ownerDocument","defaultView","val","getComputedStyle","getPropertyValue","parseFloat","replace","getNodeWidth","leftBorder","rightBorder","clientWidth","getNodeHeight","topBorder","bottomBorder","clientHeight","getImageSize","targetNode","options","getPixelRatio","ratio","FINAL_PROCESS","process","env","devicePixelRatio","parseInt","Number","isNaN","canvasDimensionLimit","checkCanvasDimensions","createImage","img","Image","decoding","async","svgToDataURL","XMLSerializer","serializeToString","encodeURIComponent","html","nodeToDataURL","xmlns","createElementNS","foreignObject","setAttribute","cache","getCacheKey","includeQueryParams","key","test","getBlobFromURL","cacheKey","cacheBust","Date","getTime","failed","reason","placeholder","imagePlaceholder","parts","msg","message","console","error","contentType","deferred","fetchRequestInit","res","headers","get","reader","FileReader","onloadend","readAsDataURL","catch","formatCSSText","style","cssText","formatCSSProperties","map","name","priority","getPropertyPriority","join","getPseudoElementStyle","className","pseudo","selector","createTextNode","clonePseudoElement","nativeNode","clonedNode","err","styleElement","clonePseudoElements","cloneCanvasElement","toDataURL","cloneNode","cloneVideoElement","video","poster","metadata","cloneSingleNode","HTMLCanvasElement","HTMLVideoElement","isSlotElement","tagName","toUpperCase","cloneChildren","_a","children","assignedNodes","shadowRoot","childNodes","reduce","child","clonedChild","cloneCSSStyle","sourceStyle","targetStyle","transformOrigin","forEach","endsWith","reducedFont","floor","substring","setProperty","cloneInputValue","HTMLTextAreaElement","innerHTML","HTMLInputElement","cloneSelectValue","HTMLSelectElement","clonedSelect","selectedOption","Array","from","find","getAttribute","decorate","Element","isRoot","filter","URL_REGEX","URL_WITH_FORMAT_REGEX","FONT_SRC_REGEX","toRegex","escaped","RegExp","parseURLs","raw","quotation","resourceURL","baseURL","resolvedURL","data","filterPreferredFontFormat","str","preferredFontFormat","format","shouldEmbed","embedResources","filteredCSSText","urls","css","embedBackground","background","cssString","embedImageNode","HTMLImageElement","SVGImageElement","baseVal","srcset","embedChildren","deferreds","embedImages","all","applyStyleFromOptions","backgroundColor","manual","Object","keys","cssFetchCache","fetchCSS","text","embedFonts","meta","regexUrl","fontLocs","loadFonts","startsWith","parseCSS","source","commentsRegex","keyframesRegex","matches","importRegex","combinedCSSRegex","unifiedRegex","lastIndex","getCSSRules","styleSheets","ret","sheet","cssRules","item","index","CSSRule","IMPORT_RULE","importIndex","rule","insertRule","inline","getWebFontRules","FONT_FACE_RULE","parseWebFontRules","getWebFontCSS","rules","parentStyleSheet","cssTexts","embedWebFonts","fontEmbedCSS","styleNode","sytleContent","firstChild","insertBefore","toSvg","datauri","toCanvas","pixelRatio","canvasWidth","canvasHeight","skipAutoScale","fillStyle","fillRect","toJpeg","quality"],"mappings":"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","file":"js/chunk-e9eb8576.js","sourcesContent":["function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\n/**\r\n * Gets a blob from an image source attribute using the Fetch API.\r\n *\r\n * @param {string} imageSource The image source attribute.\r\n * @returns {Promise} A promise that resolves to a image blob.\r\n */\r\nfunction getBlobFromImageSource(imageSource) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const response = yield fetch(`${imageSource}`);\r\n return yield response.blob();\r\n });\r\n}\r\n/**\r\n * Checks if is a JPEG image blob.\r\n *\r\n * @param {Blob} blob A blob.\r\n * @returns {boolean} A boolean indicating if the blob is a JPEG image or not.\r\n */\r\nfunction isJpegBlob(blob) {\r\n return blob.type.includes('jpeg');\r\n}\r\n/**\r\n * Checks if is a PNG image blob.\r\n *\r\n * @param {Blob} blob A blob.\r\n * @returns {boolean} A boolean indicating if the blob is a PNG image or not.\r\n */\r\nfunction isPngBlob(blob) {\r\n return blob.type.includes('png');\r\n}\r\n/**\r\n * Created an image element for a given image source attribute.\r\n *\r\n * @param {string} imageSource The image source attribute.\r\n * @returns {Promise} A promise that resolves to an image element. Rejects the promise if cannot create an image element.\r\n */\r\nfunction createImageElement(imageSource) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return new Promise(function (resolve, reject) {\r\n const imageElement = document.createElement('img');\r\n imageElement.crossOrigin = 'anonymous';\r\n imageElement.src = imageSource;\r\n imageElement.onload = function (event) {\r\n const target = event.target;\r\n resolve(target);\r\n };\r\n imageElement.onabort = reject;\r\n imageElement.onerror = reject;\r\n });\r\n });\r\n}\r\n/**\r\n * Gets a blob from an image element.\r\n *\r\n * @param {HTMLImageElement} imageElement An image element\r\n * @returns {Promise} A Promise that resolves to a image blob. Rejects the promise if cannot get a blob from the image element.\r\n */\r\nfunction getBlobFromImageElement(imageElement) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return new Promise(function (resolve, reject) {\r\n const canvas = document.createElement('canvas');\r\n const context = canvas.getContext('2d');\r\n if (context) {\r\n const { width, height } = imageElement;\r\n canvas.width = width;\r\n canvas.height = height;\r\n context.drawImage(imageElement, 0, 0, width, height);\r\n canvas.toBlob(function (blob) {\r\n if (blob)\r\n resolve(blob);\r\n else\r\n reject('Cannot get blob from image element');\r\n }, 'image/png', 1);\r\n }\r\n });\r\n });\r\n}\r\n/**\r\n * Converts a JPEG image blob to PNG.\r\n *\r\n * @param {Blob} imageBlob JPEG blob that will be converted to PNG.\r\n * @returns {Promise} A Promise that resolves to a PNG image blob. Rejects the promise if cannot create an image element or if cannot get a blob from the image element.\r\n */\r\nfunction convertBlobToPng(imageBlob) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const imageSource = URL.createObjectURL(imageBlob);\r\n const imageElement = yield createImageElement(imageSource);\r\n return yield getBlobFromImageElement(imageElement);\r\n });\r\n}\r\n/**\r\n * Copies a blob to user's clipboard.\r\n *\r\n * Throws an error if cannot write on the user's clipboard.\r\n *\r\n * @param {Blob} blob Blob to be copied.\r\n */\r\nfunction copyBlobToClipboard(blob) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const items = { [blob.type]: blob };\r\n const clipboardItem = new ClipboardItem(items);\r\n yield navigator.clipboard.write([clipboardItem]);\r\n });\r\n}\r\n/**\r\n * Copies a PNG or JPEG image to clipboard.\r\n *\r\n * This function downloads the image to copy with it's original dimensions.\r\n *\r\n * - If the image is JPEG it will be converted automatically to PNG and then copied.\r\n * - If the image is not PNG or JPEG an error will be thrown.\r\n *\r\n * @param {string} imageSource The image source attribute.\r\n * @returns {Promise} A promise that resolves to a blob. Generally you don't need to use the returned blob for nothing.\r\n */\r\nfunction copyImageToClipboard(imageSource) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const blob = yield getBlobFromImageSource(imageSource);\r\n if (isJpegBlob(blob)) {\r\n const pngBlob = yield convertBlobToPng(blob);\r\n yield copyBlobToClipboard(pngBlob);\r\n return blob;\r\n }\r\n else if (isPngBlob(blob)) {\r\n yield copyBlobToClipboard(blob);\r\n return blob;\r\n }\r\n throw new Error('Cannot copy this type of image to clipboard');\r\n });\r\n}\r\n/**\r\n * Requests the permission to write data on the user's clipboard.\r\n *\r\n * Reasons why you generally don't need to use this function:\r\n *\r\n * - The Permission to write data on the clipboard is automatically granted to pages when they are in the browser active tab.\r\n * - If the browser has not implemented the Permissions API yet, this function will return false.\r\n *\r\n * @returns {Promise} A Promise that resolves to a boolean indicating if the permission was granted or not.\r\n */\r\nfunction requestClipboardWritePermission() {\r\n var _a;\r\n return __awaiter(this, void 0, void 0, function* () {\r\n if (!((_a = navigator === null || navigator === void 0 ? void 0 : navigator.permissions) === null || _a === void 0 ? void 0 : _a.query))\r\n return false;\r\n const { state } = yield navigator.permissions.query({\r\n name: 'clipboard-write',\r\n });\r\n return state === 'granted';\r\n });\r\n}\r\n/**\r\n * Checks if can copy images to the clipboard using the Fetch API and the Clipboard API.\r\n *\r\n * @returns {Boolean} A boolean indicating if can copy or not.\r\n */\r\nfunction canCopyImagesToClipboard() {\r\n var _a;\r\n const hasFetch = typeof fetch !== 'undefined';\r\n const hasClipboardItem = typeof ClipboardItem !== 'undefined';\r\n const hasNavigatorClipboardWriteFunction = !!((_a = navigator === null || navigator === void 0 ? void 0 : navigator.clipboard) === null || _a === void 0 ? void 0 : _a.write);\r\n return hasFetch && hasClipboardItem && hasNavigatorClipboardWriteFunction;\r\n}\n\nexport { canCopyImagesToClipboard, convertBlobToPng, copyBlobToClipboard, copyImageToClipboard, createImageElement, getBlobFromImageElement, getBlobFromImageSource, isJpegBlob, isPngBlob, requestClipboardWritePermission };\n","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};\nexport function 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}\nexport 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 function isDataUrl(url) {\n return url.search(/^(data:)/) !== -1;\n}\nexport function makeDataUrl(content, mimeType) {\n return `data:${mimeType};base64,${content}`;\n}\nexport function parseDataUrlContent(dataURL) {\n return dataURL.split(/,/)[1];\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.onload = () => resolve(img);\n img.onerror = reject;\n img.crossOrigin = 'anonymous';\n img.decoding = 'sync';\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}\n//# sourceMappingURL=util.js.map","import { parseDataUrlContent } from './util';\nconst cache = {};\nfunction getCacheKey(url, 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 key;\n}\nexport async function getBlobFromURL(url, options) {\n const cacheKey = getCacheKey(url, options.includeQueryParams);\n if (cache[cacheKey] != null) {\n return cache[cacheKey];\n }\n // cache bypass, we don't have CORS issues with cached images\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 url += (/\\?/.test(url) ? '&' : '?') + new Date().getTime();\n }\n const failed = (reason) => {\n let placeholder = '';\n if (options.imagePlaceholder) {\n const parts = options.imagePlaceholder.split(/,/);\n if (parts && parts[1]) {\n placeholder = parts[1];\n }\n }\n let msg = `Failed to fetch resource: ${url}`;\n if (reason) {\n msg = typeof reason === 'string' ? reason : reason.message;\n }\n if (msg) {\n console.error(msg);\n }\n return {\n blob: placeholder,\n contentType: '',\n };\n };\n const deferred = window\n .fetch(url, options.fetchRequestInit)\n .then((res) => \n // eslint-disable-next-line promise/no-nesting\n res.blob().then((blob) => ({\n blob,\n contentType: res.headers.get('Content-Type') || '',\n })))\n .then(({ blob, contentType }) => new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => resolve({\n contentType,\n blob: reader.result,\n });\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n }))\n .then(({ blob, contentType }) => ({\n contentType,\n blob: parseDataUrlContent(blob),\n }))\n // on failed\n .catch(failed);\n // cache result\n cache[cacheKey] = deferred;\n return deferred;\n}\n//# sourceMappingURL=getBlobFromURL.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=clonePseudoElements.js.map","import { getBlobFromURL } from './getBlobFromURL';\nimport { clonePseudoElements } from './clonePseudoElements';\nimport { createImage, getMimeType, makeDataUrl, toArray } from './util';\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 const poster = video.poster;\n const metadata = await getBlobFromURL(poster, options);\n const dataURL = makeDataUrl(metadata.blob, getMimeType(poster) || metadata.contentType);\n return createImage(dataURL);\n}\nasync function cloneSingleNode(node, options) {\n if (node instanceof HTMLCanvasElement) {\n return cloneCanvasElement(node);\n }\n if (node instanceof HTMLVideoElement && node.poster) {\n return cloneVideoElement(node, options);\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;\n const children = isSlotElement(nativeNode) && nativeNode.assignedNodes\n ? toArray(nativeNode.assignedNodes())\n : toArray(((_a = nativeNode.shadowRoot) !== null && _a !== void 0 ? _a : nativeNode).childNodes);\n if (children.length === 0 || nativeNode instanceof HTMLVideoElement) {\n return clonedNode;\n }\n return children\n .reduce((deferred, child) => deferred\n .then(() => cloneNode(child, options))\n .then((clonedChild) => {\n if (clonedChild) {\n clonedNode.appendChild(clonedChild);\n }\n }), Promise.resolve())\n .then(() => clonedNode);\n}\nfunction cloneCSSStyle(nativeNode, clonedNode) {\n const sourceStyle = window.getComputedStyle(nativeNode);\n const targetStyle = clonedNode.style;\n if (!targetStyle) {\n return;\n }\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 targetStyle.setProperty(name, value, sourceStyle.getPropertyPriority(name));\n });\n }\n}\nfunction cloneInputValue(nativeNode, clonedNode) {\n if (nativeNode instanceof HTMLTextAreaElement) {\n clonedNode.innerHTML = nativeNode.value;\n }\n if (nativeNode instanceof HTMLInputElement) {\n clonedNode.setAttribute('value', nativeNode.value);\n }\n}\nfunction cloneSelectValue(nativeNode, clonedNode) {\n if (nativeNode instanceof 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 (!(clonedNode instanceof Element)) {\n return clonedNode;\n }\n cloneCSSStyle(nativeNode, clonedNode);\n clonePseudoElements(nativeNode, clonedNode);\n cloneInputValue(nativeNode, clonedNode);\n cloneSelectValue(nativeNode, clonedNode);\n return clonedNode;\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}\n//# sourceMappingURL=cloneNode.js.map","import { getBlobFromURL } from './getBlobFromURL';\nimport { getMimeType, isDataUrl, makeDataUrl, resolveUrl } from './util';\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;\nexport function 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 result = [];\n cssText.replace(URL_REGEX, (raw, quotation, url) => {\n result.push(url);\n return raw;\n });\n return result.filter((url) => !isDataUrl(url));\n}\nexport function embed(cssText, resourceURL, baseURL, options, get) {\n const resolvedURL = baseURL ? resolveUrl(resourceURL, baseURL) : resourceURL;\n return Promise.resolve(resolvedURL)\n .then((url) => get ? get(url) : getBlobFromURL(url, options))\n .then((data) => {\n if (typeof data === 'string') {\n return makeDataUrl(data, getMimeType(resourceURL));\n }\n return makeDataUrl(data.blob, getMimeType(resourceURL) || data.contentType);\n })\n .then((dataURL) => cssText.replace(toRegex(resourceURL), `$1${dataURL}$3`))\n .then((content) => content, () => resolvedURL);\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) => \n // eslint-disable-next-line promise/no-nesting\n deferred.then((css) => embed(css, url, baseUrl, options)), Promise.resolve(filteredCSSText));\n}\n//# sourceMappingURL=embedResources.js.map","import { getBlobFromURL } from './getBlobFromURL';\nimport { embedResources } from './embedResources';\nimport { getMimeType, isDataUrl, makeDataUrl, toArray } from './util';\nasync function embedBackground(clonedNode, options) {\n var _a;\n const background = (_a = clonedNode.style) === null || _a === void 0 ? void 0 : _a.getPropertyValue('background');\n if (!background) {\n return clonedNode;\n }\n return Promise.resolve(background)\n .then((cssString) => embedResources(cssString, null, options))\n .then((cssString) => {\n clonedNode.style.setProperty('background', cssString, clonedNode.style.getPropertyPriority('background'));\n return clonedNode;\n });\n}\nasync function embedImageNode(clonedNode, options) {\n if (!(clonedNode instanceof HTMLImageElement && !isDataUrl(clonedNode.src)) &&\n !(clonedNode instanceof SVGImageElement &&\n !isDataUrl(clonedNode.href.baseVal))) {\n return Promise.resolve(clonedNode);\n }\n const src = clonedNode instanceof HTMLImageElement\n ? clonedNode.src\n : clonedNode.href.baseVal;\n return Promise.resolve(src)\n .then((url) => getBlobFromURL(url, options))\n .then((data) => makeDataUrl(data.blob, getMimeType(src) || data.contentType))\n .then((dataURL) => new Promise((resolve, reject) => {\n clonedNode.onload = resolve;\n clonedNode.onerror = reject;\n if (clonedNode instanceof HTMLImageElement) {\n clonedNode.srcset = '';\n clonedNode.src = dataURL;\n }\n else {\n clonedNode.href.baseVal = dataURL;\n }\n }))\n .then(() => clonedNode, () => clonedNode);\n}\nasync function embedChildren(clonedNode, options) {\n const children = toArray(clonedNode.childNodes);\n // eslint-disable-next-line no-use-before-define\n const deferreds = children.map((child) => embedImages(child, options));\n return Promise.all(deferreds).then(() => clonedNode);\n}\nexport async function embedImages(clonedNode, options) {\n if (!(clonedNode instanceof Element)) {\n return Promise.resolve(clonedNode);\n }\n return Promise.resolve(clonedNode)\n .then((node) => embedBackground(node, options))\n .then((node) => embedImageNode(node, options))\n .then((node) => embedChildren(node, options));\n}\n//# sourceMappingURL=embedImages.js.map","export function applyStyleFromOptions(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=applyStyleFromOptions.js.map","import { toArray } from './util';\nimport { shouldEmbed, embedResources } from './embedResources';\nconst cssFetchCache = {};\nfunction fetchCSS(url) {\n const cache = cssFetchCache[url];\n if (cache != null) {\n return cache;\n }\n const deferred = window.fetch(url).then((res) => ({\n url,\n cssText: res.text(),\n }));\n cssFetchCache[url] = deferred;\n return deferred;\n}\nasync function embedFonts(meta, options) {\n return meta.cssText.then((raw) => {\n let cssText = raw;\n const regexUrl = /url\\([\"']?([^\"')]+)[\"']?\\)/g;\n const fontLocs = cssText.match(/url\\([^)]+\\)/g) || [];\n const loadFonts = fontLocs.map((location) => {\n let url = location.replace(regexUrl, '$1');\n if (!url.startsWith('https://')) {\n url = new URL(url, meta.url).href;\n }\n // eslint-disable-next-line promise/no-nesting\n return window\n .fetch(url, options.fetchRequestInit)\n .then((res) => res.blob())\n .then((blob) => new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n // Side Effect\n cssText = cssText.replace(location, `url(${reader.result})`);\n resolve([location, reader.result]);\n };\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n }));\n });\n // eslint-disable-next-line promise/no-nesting\n return Promise.all(loadFonts).then(() => cssText);\n });\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) => 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) => 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.toString());\n }));\n }\n console.error('Error inlining remote css file', e.toString());\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.toString());\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 return new Promise((resolve, reject) => {\n if (node.ownerDocument == null) {\n reject(new Error('Provided element is not within a Document'));\n }\n resolve(toArray(node.ownerDocument.styleSheets));\n })\n .then((styleSheets) => getCSSRules(styleSheets, options))\n .then(getWebFontRules);\n}\nexport async function getWebFontCSS(node, options) {\n return parseWebFontRules(node, options)\n .then((rules) => Promise.all(rules.map((rule) => {\n const baseUrl = rule.parentStyleSheet\n ? rule.parentStyleSheet.href\n : null;\n return embedResources(rule.cssText, baseUrl, options);\n })))\n .then((cssTexts) => cssTexts.join('\\n'));\n}\nexport async function embedWebFonts(clonedNode, options) {\n return (options.fontEmbedCSS != null\n ? Promise.resolve(options.fontEmbedCSS)\n : getWebFontCSS(clonedNode, options)).then((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 return clonedNode;\n });\n}\n//# sourceMappingURL=embedWebFonts.js.map","import { cloneNode } from './cloneNode';\nimport { embedImages } from './embedImages';\nimport { applyStyleFromOptions } from './applyStyleFromOptions';\nimport { embedWebFonts, getWebFontCSS } from './embedWebFonts';\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 applyStyleFromOptions(clonedNode, options);\n const datauri = await nodeToDataURL(clonedNode, width, height);\n return datauri;\n}\nexport async function toCanvas(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 { width, height } = getImageSize(node, options);\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"],"sourceRoot":""}