{"version":3,"sources":["webpack:///../src/util.ts","webpack:///../src/clone-pseudos.ts","webpack:///../src/mimes.ts","webpack:///../src/dataurl.ts","webpack:///../src/clone-node.ts","webpack:///../src/embed-resources.ts","webpack:///../src/embed-images.ts","webpack:///../src/embed-webfonts.ts","webpack:///../src/index.ts","webpack:///../src/apply-style.ts","webpack:///../src/utils.js","webpack:///../src/utils-image-options.js","webpack:///../src/index.js","webpack:///./node_modules/save-svg-as-png/lib/saveSvgAsPng.js","webpack:///../src/FileSaver.js"],"names":["uuid","counter","Math","random","toString","slice","toArray","arrayLike","arr","i","l","length","push","px","node","styleProperty","val","ownerDocument","defaultView","window","getComputedStyle","getPropertyValue","parseFloat","replace","getImageSize","targetNode","options","width","leftBorder","rightBorder","clientWidth","getNodeWidth","height","topBorder","bottomBorder","clientHeight","getNodeHeight","canvasDimensionLimit","createImage","url","Promise","resolve","reject","img","Image","decode","onload","onerror","crossOrigin","decoding","src","async","nodeToDataURL","xmlns","svg","document","createElementNS","foreignObject","setAttribute","appendChild","then","XMLSerializer","serializeToString","encodeURIComponent","html","svgToDataURL","isInstanceOfElement","instance","nodePrototype","Object","getPrototypeOf","constructor","name","getPseudoElementStyle","className","pseudo","style","selector","cssText","content","formatCSSText","map","getPropertyPriority","join","formatCSSProperties","createTextNode","clonePseudoElement","nativeNode","clonedNode","err","styleElement","createElement","WOFF","mimes","woff","woff2","ttf","eot","png","jpg","jpeg","gif","tiff","webp","getMimeType","extension","match","exec","getExtension","toLowerCase","isDataUrl","search","makeDataUrl","mimeType","fetchAsDataURL","init","process","res","fetch","status","Error","blob","reader","FileReader","onloadend","result","error","readAsDataURL","cache","resourceToDataURL","resourceUrl","contentType","cacheKey","includeQueryParams","key","test","getCacheKey","dataURL","cacheBust","Date","getTime","fetchRequestInit","headers","get","split","getContentFromDataUrl","imagePlaceholder","msg","message","cloneSingleNode","HTMLCanvasElement","canvas","toDataURL","cloneNode","cloneCanvasElement","HTMLVideoElement","video","currentSrc","ctx","getContext","drawImage","poster","cloneVideoElement","HTMLIFrameElement","iframe","_a","contentDocument","body","_b","cloneIFrameElement","isSlotElement","tagName","toUpperCase","decorate","Element","targetStyle","sourceStyle","transformOrigin","forEach","value","endsWith","floor","substring","getAttribute","setProperty","cloneCSSStyle","clonePseudoElements","HTMLTextAreaElement","innerHTML","HTMLInputElement","cloneInputValue","HTMLSelectElement","clonedSelect","selectedOption","Array","from","children","find","child","cloneSelectValue","isRoot","filter","assignedNodes","childNodes","shadowRoot","reduce","deferred","clonedChild","cloneChildren","clone","uses","querySelectorAll","processedDefs","id","exist","querySelector","definition","nodes","values","ns","position","overflow","display","defs","ensureSVGSymbols","URL_REGEX","URL_WITH_FORMAT_REGEX","FONT_SRC_REGEX","embed_resources_embed","resourceURL","baseURL","getContentFromUrl","resolvedURL","baseUrl","location","protocol","doc","implementation","createHTMLDocument","base","a","head","href","resolveUrl","escaped","RegExp","toRegex","shouldEmbed","embedResources","filteredCSSText","str","preferredFontFormat","format","filterPreferredFontFormat","urls","raw","quotation","parseURLs","css","embedProp","propName","propValue","cssString","embedImages","embedBackground","isImageElement","HTMLImageElement","SVGImageElement","baseVal","image","loading","srcset","embedImageNode","deferreds","all","embedChildren","cssFetchCache","fetchCSS","text","embedFonts","data","regexUrl","loadFonts","loc","startsWith","URL","parseCSS","source","keyframesRegex","matches","importRegex","unifiedRegex","lastIndex","parseWebFontRules","styleSheets","cssRules","rule","type","CSSRule","FONT_FACE_RULE","getWebFontRules","ret","sheet","item","index","IMPORT_RULE","importIndex","metadata","insertRule","catch","e","inline","getCSSRules","getWebFontCSS","rules","parentStyleSheet","toSvg","fontEmbedCSS","skipFonts","styleNode","sytleContent","firstChild","insertBefore","embedWebFonts","backgroundColor","manual","keys","applyStyle","toCanvas","context","ratio","pixelRatio","FINAL_PROCESS","env","devicePixelRatio","parseInt","Number","isNaN","getPixelRatio","canvasWidth","canvasHeight","skipAutoScale","checkCanvasDimensions","fillStyle","fillRect","Symbol","iterator","_settle","pact","state","s","_Pact","o","bind","v","observer","t","prototype","onFulfilled","onRejected","this","callback","_this","_isSettledPact","thenable","DEFAULT_OPTIONS","filename","forceFixText","printDate","fixColorSvg","element","color","fixSizeSvg","styles","hardFixText","seek","n","r","index_modern_u","fontFamily","fontSize","fontWeight","filterElements","scaffolding","userOptions","m","done","saveAs","date","toDateString","index_modern_o","svgs","w","recover","images","target","check","_iteratorSymbol","step","_cycle","next","_fixup","TypeError","array","u","imgElement","dataset","icon","itemAttribute","replaceWith","dataIcon","svgAsPngUri","uri","getImageOptions","opt","quality","currentOptions","includes","saveAsPng","imageOptions","toPng","__WEBPACK_AMD_DEFINE_RESULT__","out$","exports","undefined","apply","module","default","xmlNs","svgNs","urlRegex","fontFormats","otf","sfnt","isElement","obj","HTMLElement","SVGElement","requireDomNode","el","requireDomNodePromise","getDimension","dim","viewBox","getBoundingClientRect","uriToBlob","byteString","atob","mimeString","buffer","ArrayBuffer","intArray","Uint8Array","charCodeAt","Blob","detectCssFont","fontUrl","formats","fullUrl","indexOf","inlineImages","getAttributeNS","lastIndexOf","host","valueOf","setAttributeNS","cachedFonts","inlineFonts","fonts","font","req","XMLHttpRequest","addEventListener","fontInBase64","binary","bytes","byteLength","String","fromCharCode","btoa","arrayBufferToBase64","response","fontUri","open","responseType","send","fontCss","x","cachedRules","inlineCss","_ref","selectorRemap","modifyStyle","modifyCss","excludeUnusedCss","generateCss","properties","detectFonts","fontList","_ref2","parentNode","query","selectorText","downloadOptions","navigator","msSaveOrOpenBlob","popup","prepareSvg","_ref3","_ref3$left","left","_ref3$top","top","h","_ref3$scale","scale","_ref3$responsive","responsive","_ref3$excludeCss","excludeCss","_getDimensions","getBBox","_el$getBBox","y","getDimensions","removeAttribute","outer","svgAsDataUri","_ref4","svgXml","decodeURIComponent","p1","c","_ref5","_ref5$encoderType","encoderType","_ref5$encoderOptions","encoderOptions","canvg","convertToPng","_ref6","setTransform","SecurityError","download","saveLink","createObjectURL","onclick","requestAnimationFrame","revokeObjectURL","click","removeChild","title","saveSvg","downloadOpts","saveSvgAsPng","b","d","g","dispatchEvent","MouseEvent","createEvent","initMouseEvent","f","self","global","userAgent","HTMLAnchorElement","webkitURL","j","rel","origin","setTimeout","autoBom","innerText","safari","k"],"mappings":"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","file":"assets/js/7.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","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","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","/* jslint browser */\n/* global window */\n/* global document */\n\nimport { svgAsPngUri } from 'save-svg-as-png';\nimport { saveAs } from 'file-saver';\n\nconst DEFAULT_OPTIONS = {\n filename: 'Image',\n forceFixText: false,\n printDate: true\n};\n\n/**\n * Set computed style in static style of svg element\n * @param {Document} el\n */\nconst fixColorSvg = (element) => {\n const { color } = window.getComputedStyle(element);\n\n element.style.color = color;\n};\n\n/**\n * Set computed style in static style of svg element\n * @param {Document} el\n */\nconst fixSizeSvg = (element) => {\n const styles = window.getComputedStyle(element);\n\n element.style.width = styles.width;\n element.style.height = styles.height;\n};\n\n/**\n * Fix all text with the class \"fixed-text\"\n * @param {Document} node\n */\nconst fixText = (node) => {\n hardFixText(node, ['.fixed-text']);\n};\n\n/**\n *\n * @param {Document} node\n * @param {Array} seek\n */\nconst hardFixText = (\n node,\n seek = [\n 'b',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'i',\n 'mark',\n 'p',\n 'small',\n 'strong'\n ]\n) => {\n const allTexts = node.querySelectorAll(seek);\n\n for (const text of allTexts) {\n text.style.fontFamily = window.getComputedStyle(text).fontFamily;\n text.style.fontSize = window.getComputedStyle(text).fontSize;\n text.style.fontWeight = window.getComputedStyle(text).fontWeight;\n text.style.width = window.getComputedStyle(text).width;\n }\n};\n\n/**\n *\n * Exported Functions\n *\n */\n\n/**\n *\n * @param {Document} svgs\n */\nconst replaceFontAwesomeIconsWithImages = async (node) => {\n const svgs = node.querySelectorAll('svg');\n\n const images = [];\n\n for (const item of svgs) {\n const itemAttribute = item.getAttribute('data-icon');\n const cache = images.find((img) => img.dataIcon === itemAttribute);\n\n const imgElement = document.createElement('img');\n\n if (cache) {\n imgElement.src = cache.uri;\n } else {\n /* eslint-disable no-await-in-loop */\n\n const uri = await svgAsPngUri(item, 'icon.png');\n imgElement.src = uri;\n images.push({ dataIcon: itemAttribute, uri });\n\n /* eslint-enable no-await-in-loop */\n }\n\n imgElement.dataset.icon = itemAttribute;\n imgElement.width = item.clientWidth;\n imgElement.height = item.clientHeight;\n\n item.replaceWith(imgElement);\n }\n};\n\n/**\n *\n * @param {Document} node\n * @param {Boolean} forceFixText\n */\nconst applyFixs = (node, forceFixText = false) => {\n const svgs = node.querySelectorAll('svg');\n\n fixText(node);\n\n if (forceFixText) {\n hardFixText(node);\n }\n\n for (const element of svgs) {\n fixColorSvg(element);\n fixSizeSvg(element);\n }\n};\n\n/**\n * Merge options\n *\n * @param {*} userOptions\n */\nconst getOptions = (userOptions) => {\n return {\n ...DEFAULT_OPTIONS,\n ...userOptions\n };\n};\n\n/**\n * Get File name\n * @param {*} options\n */\nconst getFileName = (options) => {\n if (options.printDate) {\n const date = new Date().toDateString();\n\n return `${options.filename} (${date})`;\n }\n\n return options.filename || 'Image';\n};\n\nconst removeElements = (node) => {\n const els = node.querySelectorAll(['.remove-when-downloading']);\n\n for (const element of els) {\n element.setAttribute(\n 'original_display',\n window.getComputedStyle(element).display\n );\n element.style.display = 'none';\n }\n};\n\nconst recoveryElements = (node) => {\n const els = node.querySelectorAll(['.remove-when-downloading']);\n\n for (const element of els) {\n element.style.display = element.getAttribute('original_display');\n }\n};\n\n/**\n *\n * @param {*} node\n */\nexport const filterElements = (node) => {\n return node.className !== 'hide-when-downloading';\n};\n\n/**\n *\n * @param {*} node\n * @param {*} userOptions\n * @param {*} callback\n * @param {*} extension\n */\nexport const scaffolding = async (\n node,\n userOptions,\n callback,\n extension = 'png'\n) => {\n const options = getOptions(userOptions || {});\n let canvas = null;\n\n applyFixs(node, options.forceFixText);\n\n removeElements(node);\n\n try {\n canvas = await callback();\n } catch {\n /* Litte hack because not working on safari */\n await replaceFontAwesomeIconsWithImages(node);\n await callback();\n\n canvas = await callback();\n }\n\n recoveryElements(node);\n\n saveAs(canvas, `${getFileName(options)}.${extension}`);\n};\n","/* global window */\n\n/**\n *\n * @param {*} node\n * @param {*} opt\n * @returns\n */\nconst getSizes = (node, opt) => {\n if (opt.width && opt.height) {\n const { width, height } = opt;\n\n return { width, height };\n }\n\n const { width, height } = window.getComputedStyle(node);\n\n return {\n width: Number.parseInt(width.replace('px', ''), 10) + 4,\n height: Number.parseInt(height.replace('px', ''), 10) + 4\n };\n};\n\n/**\n *\n * @param {*} node\n * @param {*} opt\n * @param {*} format\n * @returns\n */\nexport const getImageOptions = (node, opt, format = 'png') => {\n const { backgroundColor, quality, pixelRatio, style } = opt;\n let currentOptions = {\n ...getSizes(node, opt),\n pixelRatio: 1\n };\n\n // Style\n if (style) {\n currentOptions = {\n ...currentOptions,\n style\n };\n }\n\n // Background\n if (backgroundColor) {\n currentOptions = {\n ...currentOptions,\n backgroundColor\n };\n }\n\n // Pixel Ratio\n if (pixelRatio && pixelRatio > 0) {\n currentOptions = {\n ...currentOptions,\n pixelRatio\n };\n }\n\n // Quality\n if (quality && format.includes('jpeg')) {\n const q = quality >= 0 && quality <= 1 ? quality : 1;\n\n currentOptions = {\n ...currentOptions,\n quality: q\n };\n }\n\n return currentOptions || {};\n};\n","/* jslint browser */\n\nimport { toPng, toJpeg } from 'html-to-image';\n\nimport { filterElements, scaffolding } from './utils';\nimport { getImageOptions } from './utils-image-options';\n\n/**\n * Save html as Jpeg Image\n *\n * @param {*} node\n * @param {*} userOptions\n * @param {*} imageOptions\n */\nexport const saveAsJpeg = async (node, userOptions = {}, imageOptions = {}) => {\n const callback = () =>\n toJpeg(node, {\n filter: filterElements,\n ...getImageOptions(node, imageOptions, 'jpeg')\n });\n\n await scaffolding(node, userOptions, callback, 'jpeg');\n};\n\n/**\n * Save html as png image\n *\n * @param {*} node\n * @param {*} userOptions\n * @param {*} imageOptions\n */\nexport const saveAsPng = async (node, userOptions = {}, imageOptions = {}) => {\n const callback = () =>\n toPng(node, {\n filter: filterElements,\n ...getImageOptions(node, imageOptions, 'png')\n });\n\n await scaffolding(node, userOptions, callback, 'png');\n};\n\n/**\n * @deprecated use saveAsPng\n * Will removed in version 1.6\n * Download the DOM node to png file\n *\n * @param {Document} node\n * @param {String} nameOfPage\n * @param {Boolean} hardFixText\n */\nexport const downloadDOM = async (\n node,\n nameOfPage = 'Image',\n forceFixText = false\n) => {\n await saveAsPng(node, { forceFixText, filename: nameOfPage });\n};\n","'use strict';\n\n(function () {\n var out$ = typeof exports != 'undefined' && exports || typeof define != 'undefined' && {} || this || window;\n if (typeof define !== 'undefined') define('save-svg-as-png', [], function () {\n return out$;\n });\n out$.default = out$;\n\n var xmlNs = 'http://www.w3.org/2000/xmlns/';\n var xhtmlNs = 'http://www.w3.org/1999/xhtml';\n var svgNs = 'http://www.w3.org/2000/svg';\n var doctype = ']>';\n var urlRegex = /url\\([\"']?(.+?)[\"']?\\)/;\n var fontFormats = {\n woff2: 'font/woff2',\n woff: 'font/woff',\n otf: 'application/x-font-opentype',\n ttf: 'application/x-font-ttf',\n eot: 'application/vnd.ms-fontobject',\n sfnt: 'application/font-sfnt',\n svg: 'image/svg+xml'\n };\n\n var isElement = function isElement(obj) {\n return obj instanceof HTMLElement || obj instanceof SVGElement;\n };\n var requireDomNode = function requireDomNode(el) {\n if (!isElement(el)) throw new Error('an HTMLElement or SVGElement is required; got ' + el);\n };\n var requireDomNodePromise = function requireDomNodePromise(el) {\n return new Promise(function (resolve, reject) {\n if (isElement(el)) resolve(el);else reject(new Error('an HTMLElement or SVGElement is required; got ' + el));\n });\n };\n var isExternal = function isExternal(url) {\n return url && url.lastIndexOf('http', 0) === 0 && url.lastIndexOf(window.location.host) === -1;\n };\n\n var getFontMimeTypeFromUrl = function getFontMimeTypeFromUrl(fontUrl) {\n var formats = Object.keys(fontFormats).filter(function (extension) {\n return fontUrl.indexOf('.' + extension) > 0;\n }).map(function (extension) {\n return fontFormats[extension];\n });\n if (formats) return formats[0];\n console.error('Unknown font format for ' + fontUrl + '. Fonts may not be working correctly.');\n return 'application/octet-stream';\n };\n\n var arrayBufferToBase64 = function arrayBufferToBase64(buffer) {\n var binary = '';\n var bytes = new Uint8Array(buffer);\n for (var i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }return window.btoa(binary);\n };\n\n var getDimension = function getDimension(el, clone, dim) {\n var v = el.viewBox && el.viewBox.baseVal && el.viewBox.baseVal[dim] || clone.getAttribute(dim) !== null && !clone.getAttribute(dim).match(/%$/) && parseInt(clone.getAttribute(dim)) || el.getBoundingClientRect()[dim] || parseInt(clone.style[dim]) || parseInt(window.getComputedStyle(el).getPropertyValue(dim));\n return typeof v === 'undefined' || v === null || isNaN(parseFloat(v)) ? 0 : v;\n };\n\n var getDimensions = function getDimensions(el, clone, width, height) {\n if (el.tagName === 'svg') return {\n width: width || getDimension(el, clone, 'width'),\n height: height || getDimension(el, clone, 'height')\n };else if (el.getBBox) {\n var _el$getBBox = el.getBBox(),\n x = _el$getBBox.x,\n y = _el$getBBox.y,\n _width = _el$getBBox.width,\n _height = _el$getBBox.height;\n\n return {\n width: x + _width,\n height: y + _height\n };\n }\n };\n\n var reEncode = function reEncode(data) {\n return decodeURIComponent(encodeURIComponent(data).replace(/%([0-9A-F]{2})/g, function (match, p1) {\n var c = String.fromCharCode('0x' + p1);\n return c === '%' ? '%25' : c;\n }));\n };\n\n var uriToBlob = function uriToBlob(uri) {\n var byteString = window.atob(uri.split(',')[1]);\n var mimeString = uri.split(',')[0].split(':')[1].split(';')[0];\n var buffer = new ArrayBuffer(byteString.length);\n var intArray = new Uint8Array(buffer);\n for (var i = 0; i < byteString.length; i++) {\n intArray[i] = byteString.charCodeAt(i);\n }\n return new Blob([buffer], { type: mimeString });\n };\n\n var query = function query(el, selector) {\n if (!selector) return;\n try {\n return el.querySelector(selector) || el.parentNode && el.parentNode.querySelector(selector);\n } catch (err) {\n console.warn('Invalid CSS selector \"' + selector + '\"', err);\n }\n };\n\n var detectCssFont = function detectCssFont(rule, href) {\n // Match CSS font-face rules to external links.\n // @font-face {\n // src: local('Abel'), url(https://fonts.gstatic.com/s/abel/v6/UzN-iejR1VoXU2Oc-7LsbvesZW2xOQ-xsNqO47m55DA.woff2);\n // }\n var match = rule.cssText.match(urlRegex);\n var url = match && match[1] || '';\n if (!url || url.match(/^data:/) || url === 'about:blank') return;\n var fullUrl = url.startsWith('../') ? href + '/../' + url : url.startsWith('./') ? href + '/.' + url : url;\n return {\n text: rule.cssText,\n format: getFontMimeTypeFromUrl(fullUrl),\n url: fullUrl\n };\n };\n\n var inlineImages = function inlineImages(el) {\n return Promise.all(Array.from(el.querySelectorAll('image')).map(function (image) {\n var href = image.getAttributeNS('http://www.w3.org/1999/xlink', 'href') || image.getAttribute('href');\n if (!href) return Promise.resolve(null);\n if (isExternal(href)) {\n href += (href.indexOf('?') === -1 ? '?' : '&') + 't=' + new Date().valueOf();\n }\n return new Promise(function (resolve, reject) {\n var canvas = document.createElement('canvas');\n var img = new Image();\n img.crossOrigin = 'anonymous';\n img.src = href;\n img.onerror = function () {\n return reject(new Error('Could not load ' + href));\n };\n img.onload = function () {\n canvas.width = img.width;\n canvas.height = img.height;\n canvas.getContext('2d').drawImage(img, 0, 0);\n image.setAttributeNS('http://www.w3.org/1999/xlink', 'href', canvas.toDataURL('image/png'));\n resolve(true);\n };\n });\n }));\n };\n\n var cachedFonts = {};\n var inlineFonts = function inlineFonts(fonts) {\n return Promise.all(fonts.map(function (font) {\n return new Promise(function (resolve, reject) {\n if (cachedFonts[font.url]) return resolve(cachedFonts[font.url]);\n\n var req = new XMLHttpRequest();\n req.addEventListener('load', function () {\n // TODO: it may also be worth it to wait until fonts are fully loaded before\n // attempting to rasterize them. (e.g. use https://developer.mozilla.org/en-US/docs/Web/API/FontFaceSet)\n var fontInBase64 = arrayBufferToBase64(req.response);\n var fontUri = font.text.replace(urlRegex, 'url(\"data:' + font.format + ';base64,' + fontInBase64 + '\")') + '\\n';\n cachedFonts[font.url] = fontUri;\n resolve(fontUri);\n });\n req.addEventListener('error', function (e) {\n console.warn('Failed to load font from: ' + font.url, e);\n cachedFonts[font.url] = null;\n resolve(null);\n });\n req.addEventListener('abort', function (e) {\n console.warn('Aborted loading font from: ' + font.url, e);\n resolve(null);\n });\n req.open('GET', font.url);\n req.responseType = 'arraybuffer';\n req.send();\n });\n })).then(function (fontCss) {\n return fontCss.filter(function (x) {\n return x;\n }).join('');\n });\n };\n\n var cachedRules = null;\n var styleSheetRules = function styleSheetRules() {\n if (cachedRules) return cachedRules;\n return cachedRules = Array.from(document.styleSheets).map(function (sheet) {\n try {\n return { rules: sheet.cssRules, href: sheet.href };\n } catch (e) {\n console.warn('Stylesheet could not be loaded: ' + sheet.href, e);\n return {};\n }\n });\n };\n\n var inlineCss = function inlineCss(el, options) {\n var _ref = options || {},\n selectorRemap = _ref.selectorRemap,\n modifyStyle = _ref.modifyStyle,\n modifyCss = _ref.modifyCss,\n fonts = _ref.fonts,\n excludeUnusedCss = _ref.excludeUnusedCss;\n\n var generateCss = modifyCss || function (selector, properties) {\n var sel = selectorRemap ? selectorRemap(selector) : selector;\n var props = modifyStyle ? modifyStyle(properties) : properties;\n return sel + '{' + props + '}\\n';\n };\n var css = [];\n var detectFonts = typeof fonts === 'undefined';\n var fontList = fonts || [];\n styleSheetRules().forEach(function (_ref2) {\n var rules = _ref2.rules,\n href = _ref2.href;\n\n if (!rules) return;\n Array.from(rules).forEach(function (rule) {\n if (typeof rule.style != 'undefined') {\n if (query(el, rule.selectorText)) css.push(generateCss(rule.selectorText, rule.style.cssText));else if (detectFonts && rule.cssText.match(/^@font-face/)) {\n var font = detectCssFont(rule, href);\n if (font) fontList.push(font);\n } else if (!excludeUnusedCss) {\n css.push(rule.cssText);\n }\n }\n });\n });\n\n return inlineFonts(fontList).then(function (fontCss) {\n return css.join('\\n') + fontCss;\n });\n };\n\n var downloadOptions = function downloadOptions() {\n if (!navigator.msSaveOrOpenBlob && !('download' in document.createElement('a'))) {\n return { popup: window.open() };\n }\n };\n\n out$.prepareSvg = function (el, options, done) {\n requireDomNode(el);\n\n var _ref3 = options || {},\n _ref3$left = _ref3.left,\n left = _ref3$left === undefined ? 0 : _ref3$left,\n _ref3$top = _ref3.top,\n top = _ref3$top === undefined ? 0 : _ref3$top,\n w = _ref3.width,\n h = _ref3.height,\n _ref3$scale = _ref3.scale,\n scale = _ref3$scale === undefined ? 1 : _ref3$scale,\n _ref3$responsive = _ref3.responsive,\n responsive = _ref3$responsive === undefined ? false : _ref3$responsive,\n _ref3$excludeCss = _ref3.excludeCss,\n excludeCss = _ref3$excludeCss === undefined ? false : _ref3$excludeCss;\n\n return inlineImages(el).then(function () {\n var clone = el.cloneNode(true);\n clone.style.backgroundColor = (options || {}).backgroundColor || el.style.backgroundColor;\n\n var _getDimensions = getDimensions(el, clone, w, h),\n width = _getDimensions.width,\n height = _getDimensions.height;\n\n if (el.tagName !== 'svg') {\n if (el.getBBox) {\n if (clone.getAttribute('transform') != null) {\n clone.setAttribute('transform', clone.getAttribute('transform').replace(/translate\\(.*?\\)/, ''));\n }\n var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.appendChild(clone);\n clone = svg;\n } else {\n console.error('Attempted to render non-SVG element', el);\n return;\n }\n }\n\n clone.setAttribute('version', '1.1');\n clone.setAttribute('viewBox', [left, top, width, height].join(' '));\n if (!clone.getAttribute('xmlns')) clone.setAttributeNS(xmlNs, 'xmlns', svgNs);\n if (!clone.getAttribute('xmlns:xlink')) clone.setAttributeNS(xmlNs, 'xmlns:xlink', 'http://www.w3.org/1999/xlink');\n\n if (responsive) {\n clone.removeAttribute('width');\n clone.removeAttribute('height');\n clone.setAttribute('preserveAspectRatio', 'xMinYMin meet');\n } else {\n clone.setAttribute('width', width * scale);\n clone.setAttribute('height', height * scale);\n }\n\n Array.from(clone.querySelectorAll('foreignObject > *')).forEach(function (foreignObject) {\n foreignObject.setAttributeNS(xmlNs, 'xmlns', foreignObject.tagName === 'svg' ? svgNs : xhtmlNs);\n });\n\n if (excludeCss) {\n var outer = document.createElement('div');\n outer.appendChild(clone);\n var src = outer.innerHTML;\n if (typeof done === 'function') done(src, width, height);else return { src: src, width: width, height: height };\n } else {\n return inlineCss(el, options).then(function (css) {\n var style = document.createElement('style');\n style.setAttribute('type', 'text/css');\n style.innerHTML = '';\n\n var defs = document.createElement('defs');\n defs.appendChild(style);\n clone.insertBefore(defs, clone.firstChild);\n\n var outer = document.createElement('div');\n outer.appendChild(clone);\n var src = outer.innerHTML.replace(/NS\\d+:href/gi, 'xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href');\n\n if (typeof done === 'function') done(src, width, height);else return { src: src, width: width, height: height };\n });\n }\n });\n };\n\n out$.svgAsDataUri = function (el, options, done) {\n requireDomNode(el);\n return out$.prepareSvg(el, options).then(function (_ref4) {\n var src = _ref4.src,\n width = _ref4.width,\n height = _ref4.height;\n\n var svgXml = 'data:image/svg+xml;base64,' + window.btoa(reEncode(doctype + src));\n if (typeof done === 'function') {\n done(svgXml, width, height);\n }\n return svgXml;\n });\n };\n\n out$.svgAsPngUri = function (el, options, done) {\n requireDomNode(el);\n\n var _ref5 = options || {},\n _ref5$encoderType = _ref5.encoderType,\n encoderType = _ref5$encoderType === undefined ? 'image/png' : _ref5$encoderType,\n _ref5$encoderOptions = _ref5.encoderOptions,\n encoderOptions = _ref5$encoderOptions === undefined ? 0.8 : _ref5$encoderOptions,\n canvg = _ref5.canvg;\n\n var convertToPng = function convertToPng(_ref6) {\n var src = _ref6.src,\n width = _ref6.width,\n height = _ref6.height;\n\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n var pixelRatio = window.devicePixelRatio || 1;\n\n canvas.width = width * pixelRatio;\n canvas.height = height * pixelRatio;\n canvas.style.width = canvas.width + 'px';\n canvas.style.height = canvas.height + 'px';\n context.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n\n if (canvg) canvg(canvas, src);else context.drawImage(src, 0, 0);\n\n var png = void 0;\n try {\n png = canvas.toDataURL(encoderType, encoderOptions);\n } catch (e) {\n if (typeof SecurityError !== 'undefined' && e instanceof SecurityError || e.name === 'SecurityError') {\n console.error('Rendered SVG images cannot be downloaded in this browser.');\n return;\n } else throw e;\n }\n if (typeof done === 'function') done(png, canvas.width, canvas.height);\n return Promise.resolve(png);\n };\n\n if (canvg) return out$.prepareSvg(el, options).then(convertToPng);else return out$.svgAsDataUri(el, options).then(function (uri) {\n return new Promise(function (resolve, reject) {\n var image = new Image();\n image.onload = function () {\n return resolve(convertToPng({\n src: image,\n width: image.width,\n height: image.height\n }));\n };\n image.onerror = function () {\n reject('There was an error loading the data URI as an image on the following SVG\\n' + window.atob(uri.slice(26)) + 'Open the following link to see browser\\'s diagnosis\\n' + uri);\n };\n image.src = uri;\n });\n });\n };\n\n out$.download = function (name, uri, options) {\n if (navigator.msSaveOrOpenBlob) navigator.msSaveOrOpenBlob(uriToBlob(uri), name);else {\n var saveLink = document.createElement('a');\n if ('download' in saveLink) {\n saveLink.download = name;\n saveLink.style.display = 'none';\n document.body.appendChild(saveLink);\n try {\n var blob = uriToBlob(uri);\n var url = URL.createObjectURL(blob);\n saveLink.href = url;\n saveLink.onclick = function () {\n return requestAnimationFrame(function () {\n return URL.revokeObjectURL(url);\n });\n };\n } catch (e) {\n console.error(e);\n console.warn('Error while getting object URL. Falling back to string URL.');\n saveLink.href = uri;\n }\n saveLink.click();\n document.body.removeChild(saveLink);\n } else if (options && options.popup) {\n options.popup.document.title = name;\n options.popup.location.replace(uri);\n }\n }\n };\n\n out$.saveSvg = function (el, name, options) {\n var downloadOpts = downloadOptions(); // don't inline, can't be async\n return requireDomNodePromise(el).then(function (el) {\n return out$.svgAsDataUri(el, options || {});\n }).then(function (uri) {\n return out$.download(name, uri, downloadOpts);\n });\n };\n\n out$.saveSvgAsPng = function (el, name, options) {\n var downloadOpts = downloadOptions(); // don't inline, can't be async\n return requireDomNodePromise(el).then(function (el) {\n return out$.svgAsPngUri(el, options || {});\n }).then(function (uri) {\n return out$.download(name, uri, downloadOpts);\n });\n };\n})();","/*\n* FileSaver.js\n* A saveAs() FileSaver implementation.\n*\n* By Eli Grey, http://eligrey.com\n*\n* License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)\n* source : http://purl.eligrey.com/github/FileSaver.js\n*/\n\n// The one and only way of getting global scope in all environments\n// https://stackoverflow.com/q/3277182/1008999\nvar _global = typeof window === 'object' && window.window === window\n ? window : typeof self === 'object' && self.self === self\n ? self : typeof global === 'object' && global.global === global\n ? global\n : this\n\nfunction bom (blob, opts) {\n if (typeof opts === 'undefined') opts = { autoBom: false }\n else if (typeof opts !== 'object') {\n console.warn('Deprecated: Expected third argument to be a object')\n opts = { autoBom: !opts }\n }\n\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\n // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n if (opts.autoBom && /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n return new Blob([String.fromCharCode(0xFEFF), blob], { type: blob.type })\n }\n return blob\n}\n\nfunction download (url, name, opts) {\n var xhr = new XMLHttpRequest()\n xhr.open('GET', url)\n xhr.responseType = 'blob'\n xhr.onload = function () {\n saveAs(xhr.response, name, opts)\n }\n xhr.onerror = function () {\n console.error('could not download file')\n }\n xhr.send()\n}\n\nfunction corsEnabled (url) {\n var xhr = new XMLHttpRequest()\n // use sync to avoid popup blocker\n xhr.open('HEAD', url, false)\n try {\n xhr.send()\n } catch (e) {}\n return xhr.status >= 200 && xhr.status <= 299\n}\n\n// `a.click()` doesn't work for all browsers (#465)\nfunction click (node) {\n try {\n node.dispatchEvent(new MouseEvent('click'))\n } catch (e) {\n var evt = document.createEvent('MouseEvents')\n evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80,\n 20, false, false, false, false, 0, null)\n node.dispatchEvent(evt)\n }\n}\n\n// Detect WebView inside a native macOS app by ruling out all browsers\n// We just need to check for 'Safari' because all other browsers (besides Firefox) include that too\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/macos\nvar isMacOSWebView = _global.navigator && /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent)\n\nvar saveAs = _global.saveAs || (\n // probably in some web worker\n (typeof window !== 'object' || window !== _global)\n ? function saveAs () { /* noop */ }\n\n // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView\n : ('download' in HTMLAnchorElement.prototype && !isMacOSWebView)\n ? function saveAs (blob, name, opts) {\n var URL = _global.URL || _global.webkitURL\n var a = document.createElement('a')\n name = name || blob.name || 'download'\n\n a.download = name\n a.rel = 'noopener' // tabnabbing\n\n // TODO: detect chrome extensions & packaged apps\n // a.target = '_blank'\n\n if (typeof blob === 'string') {\n // Support regular links\n a.href = blob\n if (a.origin !== location.origin) {\n corsEnabled(a.href)\n ? download(blob, name, opts)\n : click(a, a.target = '_blank')\n } else {\n click(a)\n }\n } else {\n // Support blobs\n a.href = URL.createObjectURL(blob)\n setTimeout(function () { URL.revokeObjectURL(a.href) }, 4E4) // 40s\n setTimeout(function () { click(a) }, 0)\n }\n }\n\n // Use msSaveOrOpenBlob as a second approach\n : 'msSaveOrOpenBlob' in navigator\n ? function saveAs (blob, name, opts) {\n name = name || blob.name || 'download'\n\n if (typeof blob === 'string') {\n if (corsEnabled(blob)) {\n download(blob, name, opts)\n } else {\n var a = document.createElement('a')\n a.href = blob\n a.target = '_blank'\n setTimeout(function () { click(a) })\n }\n } else {\n navigator.msSaveOrOpenBlob(bom(blob, opts), name)\n }\n }\n\n // Fallback to using FileReader and a popup\n : function saveAs (blob, name, opts, popup) {\n // Open a popup immediately do go around popup blocker\n // Mostly only available on user interaction and the fileReader is async so...\n popup = popup || open('', '_blank')\n if (popup) {\n popup.document.title =\n popup.document.body.innerText = 'downloading...'\n }\n\n if (typeof blob === 'string') return download(blob, name, opts)\n\n var force = blob.type === 'application/octet-stream'\n var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari\n var isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent)\n\n if ((isChromeIOS || (force && isSafari) || isMacOSWebView) && typeof FileReader !== 'undefined') {\n // Safari doesn't allow downloading of blob URLs\n var reader = new FileReader()\n reader.onloadend = function () {\n var url = reader.result\n url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;')\n if (popup) popup.location.href = url\n else location = url\n popup = null // reverse-tabnabbing #460\n }\n reader.readAsDataURL(blob)\n } else {\n var URL = _global.URL || _global.webkitURL\n var url = URL.createObjectURL(blob)\n if (popup) popup.location = url\n else location.href = url\n popup = null // reverse-tabnabbing #460\n setTimeout(function () { URL.revokeObjectURL(url) }, 4E4) // 40s\n }\n }\n)\n\n_global.saveAs = saveAs.saveAs = saveAs\n\nif (typeof module !== 'undefined') {\n module.exports = saveAs;\n}\n"],"sourceRoot":""}