{"version":3,"file":"imageDownload-BcuP-05G.cjs","names":[],"sources":["../node_modules/modern-screenshot/dist/index.mjs","../src/Utils/imageDownload.ts"],"sourcesContent":["function changeJpegDpi(uint8Array, dpi) {\n  uint8Array[13] = 1;\n  uint8Array[14] = dpi >> 8;\n  uint8Array[15] = dpi & 255;\n  uint8Array[16] = dpi >> 8;\n  uint8Array[17] = dpi & 255;\n  return uint8Array;\n}\n\nconst _P = \"p\".charCodeAt(0);\nconst _H = \"H\".charCodeAt(0);\nconst _Y = \"Y\".charCodeAt(0);\nconst _S = \"s\".charCodeAt(0);\nlet pngDataTable;\nfunction createPngDataTable() {\n  const crcTable = new Int32Array(256);\n  for (let n = 0; n < 256; n++) {\n    let c = n;\n    for (let k = 0; k < 8; k++) {\n      c = c & 1 ? 3988292384 ^ c >>> 1 : c >>> 1;\n    }\n    crcTable[n] = c;\n  }\n  return crcTable;\n}\nfunction calcCrc(uint8Array) {\n  let c = -1;\n  if (!pngDataTable)\n    pngDataTable = createPngDataTable();\n  for (let n = 0; n < uint8Array.length; n++) {\n    c = pngDataTable[(c ^ uint8Array[n]) & 255] ^ c >>> 8;\n  }\n  return c ^ -1;\n}\nfunction searchStartOfPhys(uint8Array) {\n  const length = uint8Array.length - 1;\n  for (let i = length; i >= 4; i--) {\n    if (uint8Array[i - 4] === 9 && uint8Array[i - 3] === _P && uint8Array[i - 2] === _H && uint8Array[i - 1] === _Y && uint8Array[i] === _S) {\n      return i - 3;\n    }\n  }\n  return 0;\n}\nfunction changePngDpi(uint8Array, dpi, overwritepHYs = false) {\n  const physChunk = new Uint8Array(13);\n  dpi *= 39.3701;\n  physChunk[0] = _P;\n  physChunk[1] = _H;\n  physChunk[2] = _Y;\n  physChunk[3] = _S;\n  physChunk[4] = dpi >>> 24;\n  physChunk[5] = dpi >>> 16;\n  physChunk[6] = dpi >>> 8;\n  physChunk[7] = dpi & 255;\n  physChunk[8] = physChunk[4];\n  physChunk[9] = physChunk[5];\n  physChunk[10] = physChunk[6];\n  physChunk[11] = physChunk[7];\n  physChunk[12] = 1;\n  const crc = calcCrc(physChunk);\n  const crcChunk = new Uint8Array(4);\n  crcChunk[0] = crc >>> 24;\n  crcChunk[1] = crc >>> 16;\n  crcChunk[2] = crc >>> 8;\n  crcChunk[3] = crc & 255;\n  if (overwritepHYs) {\n    const startingIndex = searchStartOfPhys(uint8Array);\n    uint8Array.set(physChunk, startingIndex);\n    uint8Array.set(crcChunk, startingIndex + 13);\n    return uint8Array;\n  } else {\n    const chunkLength = new Uint8Array(4);\n    chunkLength[0] = 0;\n    chunkLength[1] = 0;\n    chunkLength[2] = 0;\n    chunkLength[3] = 9;\n    const finalHeader = new Uint8Array(54);\n    finalHeader.set(uint8Array, 0);\n    finalHeader.set(chunkLength, 33);\n    finalHeader.set(physChunk, 37);\n    finalHeader.set(crcChunk, 50);\n    return finalHeader;\n  }\n}\nconst b64PhysSignature1 = \"AAlwSFlz\";\nconst b64PhysSignature2 = \"AAAJcEhZ\";\nconst b64PhysSignature3 = \"AAAACXBI\";\nfunction detectPhysChunkFromDataUrl(dataUrl) {\n  let b64index = dataUrl.indexOf(b64PhysSignature1);\n  if (b64index === -1) {\n    b64index = dataUrl.indexOf(b64PhysSignature2);\n  }\n  if (b64index === -1) {\n    b64index = dataUrl.indexOf(b64PhysSignature3);\n  }\n  return b64index;\n}\n\nconst PREFIX = \"[modern-screenshot]\";\nconst IN_BROWSER = typeof window !== \"undefined\";\nconst SUPPORT_WEB_WORKER = IN_BROWSER && \"Worker\" in window;\nconst SUPPORT_ATOB = IN_BROWSER && \"atob\" in window;\nconst SUPPORT_BTOA = IN_BROWSER && \"btoa\" in window;\nconst USER_AGENT = IN_BROWSER ? window.navigator?.userAgent : \"\";\nconst IN_CHROME = USER_AGENT.includes(\"Chrome\");\nconst IN_SAFARI = USER_AGENT.includes(\"AppleWebKit\") && !IN_CHROME;\nconst IN_FIREFOX = USER_AGENT.includes(\"Firefox\");\nconst isContext = (value) => value && \"__CONTEXT__\" in value;\nconst isCssFontFaceRule = (rule) => rule.constructor.name === \"CSSFontFaceRule\";\nconst isCSSImportRule = (rule) => rule.constructor.name === \"CSSImportRule\";\nconst isElementNode = (node) => node.nodeType === 1;\nconst isSVGElementNode = (node) => typeof node.className === \"object\";\nconst isSVGImageElementNode = (node) => node.tagName === \"image\";\nconst isSVGUseElementNode = (node) => node.tagName === \"use\";\nconst isHTMLElementNode = (node) => isElementNode(node) && typeof node.style !== \"undefined\" && !isSVGElementNode(node);\nconst isCommentNode = (node) => node.nodeType === 8;\nconst isTextNode = (node) => node.nodeType === 3;\nconst isImageElement = (node) => node.tagName === \"IMG\";\nconst isVideoElement = (node) => node.tagName === \"VIDEO\";\nconst isCanvasElement = (node) => node.tagName === \"CANVAS\";\nconst isTextareaElement = (node) => node.tagName === \"TEXTAREA\";\nconst isInputElement = (node) => node.tagName === \"INPUT\";\nconst isStyleElement = (node) => node.tagName === \"STYLE\";\nconst isScriptElement = (node) => node.tagName === \"SCRIPT\";\nconst isSelectElement = (node) => node.tagName === \"SELECT\";\nconst isSlotElement = (node) => node.tagName === \"SLOT\";\nconst isIFrameElement = (node) => node.tagName === \"IFRAME\";\nconst consoleWarn = (...args) => console.warn(PREFIX, ...args);\nfunction supportWebp(ownerDocument) {\n  const canvas = ownerDocument?.createElement?.(\"canvas\");\n  if (canvas) {\n    canvas.height = canvas.width = 1;\n  }\n  return Boolean(canvas) && \"toDataURL\" in canvas && Boolean(canvas.toDataURL(\"image/webp\").includes(\"image/webp\"));\n}\nconst isDataUrl = (url) => url.startsWith(\"data:\");\nfunction resolveUrl(url, baseUrl) {\n  if (url.match(/^[a-z]+:\\/\\//i))\n    return url;\n  if (IN_BROWSER && url.match(/^\\/\\//))\n    return window.location.protocol + url;\n  if (url.match(/^[a-z]+:/i))\n    return url;\n  if (!IN_BROWSER)\n    return url;\n  const doc = getDocument().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  a.href = url;\n  return a.href;\n}\nfunction getDocument(target) {\n  return (target && isElementNode(target) ? target?.ownerDocument : target) ?? window.document;\n}\nconst XMLNS = \"http://www.w3.org/2000/svg\";\nfunction createSvg(width, height, ownerDocument) {\n  const svg = getDocument(ownerDocument).createElementNS(XMLNS, \"svg\");\n  svg.setAttributeNS(null, \"width\", width.toString());\n  svg.setAttributeNS(null, \"height\", height.toString());\n  svg.setAttributeNS(null, \"viewBox\", `0 0 ${width} ${height}`);\n  return svg;\n}\nfunction svgToDataUrl(svg, removeControlCharacter) {\n  let xhtml = new XMLSerializer().serializeToString(svg);\n  if (removeControlCharacter) {\n    xhtml = xhtml.replace(/[\\u0000-\\u0008\\v\\f\\u000E-\\u001F\\uD800-\\uDFFF\\uFFFE\\uFFFF]/gu, \"\");\n  }\n  return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(xhtml)}`;\n}\nasync function canvasToBlob(canvas, type = \"image/png\", quality = 1) {\n  try {\n    return await new Promise((resolve, reject) => {\n      canvas.toBlob((blob) => {\n        if (blob) {\n          resolve(blob);\n        } else {\n          reject(new Error(\"Blob is null\"));\n        }\n      }, type, quality);\n    });\n  } catch (error) {\n    if (SUPPORT_ATOB) {\n      return dataUrlToBlob(canvas.toDataURL(type, quality));\n    }\n    throw error;\n  }\n}\nfunction dataUrlToBlob(dataUrl) {\n  const [header, base64] = dataUrl.split(\",\");\n  const type = header.match(/data:(.+);/)?.[1] ?? void 0;\n  const decoded = window.atob(base64);\n  const length = decoded.length;\n  const buffer = new Uint8Array(length);\n  for (let i = 0; i < length; i += 1) {\n    buffer[i] = decoded.charCodeAt(i);\n  }\n  return new Blob([buffer], { type });\n}\nfunction readBlob(blob, type) {\n  return new Promise((resolve, reject) => {\n    const reader = new FileReader();\n    reader.onload = () => resolve(reader.result);\n    reader.onerror = () => reject(reader.error);\n    reader.onabort = () => reject(new Error(`Failed read blob to ${type}`));\n    if (type === \"dataUrl\") {\n      reader.readAsDataURL(blob);\n    } else if (type === \"arrayBuffer\") {\n      reader.readAsArrayBuffer(blob);\n    }\n  });\n}\nconst blobToDataUrl = (blob) => readBlob(blob, \"dataUrl\");\nconst blobToArrayBuffer = (blob) => readBlob(blob, \"arrayBuffer\");\nfunction createImage(url, ownerDocument) {\n  const img = getDocument(ownerDocument).createElement(\"img\");\n  img.decoding = \"sync\";\n  img.loading = \"eager\";\n  img.src = url;\n  return img;\n}\nfunction loadMedia(media, options) {\n  return new Promise((resolve) => {\n    const { timeout, ownerDocument, onError: userOnError, onWarn } = options ?? {};\n    const node = typeof media === \"string\" ? createImage(media, getDocument(ownerDocument)) : media;\n    let timer = null;\n    let removeEventListeners = null;\n    function onResolve() {\n      resolve(node);\n      timer && clearTimeout(timer);\n      removeEventListeners?.();\n    }\n    if (timeout) {\n      timer = setTimeout(onResolve, timeout);\n    }\n    if (isVideoElement(node)) {\n      const currentSrc = node.currentSrc || node.src;\n      if (!currentSrc) {\n        if (node.poster) {\n          return loadMedia(node.poster, options).then(resolve);\n        }\n        return onResolve();\n      }\n      if (node.readyState >= 2) {\n        return onResolve();\n      }\n      const onLoadeddata = onResolve;\n      const onError = (error) => {\n        onWarn?.(\n          \"Failed video load\",\n          currentSrc,\n          error\n        );\n        userOnError?.(error);\n        onResolve();\n      };\n      removeEventListeners = () => {\n        node.removeEventListener(\"loadeddata\", onLoadeddata);\n        node.removeEventListener(\"error\", onError);\n      };\n      node.addEventListener(\"loadeddata\", onLoadeddata, { once: true });\n      node.addEventListener(\"error\", onError, { once: true });\n    } else {\n      const currentSrc = isSVGImageElementNode(node) ? node.href.baseVal : node.currentSrc || node.src;\n      if (!currentSrc) {\n        return onResolve();\n      }\n      const onLoad = async () => {\n        if (isImageElement(node) && \"decode\" in node) {\n          try {\n            await node.decode();\n          } catch (error) {\n            onWarn?.(\n              \"Failed to decode image, trying to render anyway\",\n              node.dataset.originalSrc || currentSrc,\n              error\n            );\n          }\n        }\n        onResolve();\n      };\n      const onError = (error) => {\n        onWarn?.(\n          \"Failed image load\",\n          node.dataset.originalSrc || currentSrc,\n          error\n        );\n        onResolve();\n      };\n      if (isImageElement(node) && node.complete) {\n        return onLoad();\n      }\n      removeEventListeners = () => {\n        node.removeEventListener(\"load\", onLoad);\n        node.removeEventListener(\"error\", onError);\n      };\n      node.addEventListener(\"load\", onLoad, { once: true });\n      node.addEventListener(\"error\", onError, { once: true });\n    }\n  });\n}\nasync function waitUntilLoad(node, options) {\n  if (isHTMLElementNode(node)) {\n    if (isImageElement(node) || isVideoElement(node)) {\n      await loadMedia(node, options);\n    } else {\n      await Promise.all(\n        [\"img\", \"video\"].flatMap((selectors) => {\n          return Array.from(node.querySelectorAll(selectors)).map((el) => loadMedia(el, options));\n        })\n      );\n    }\n  }\n}\nconst uuid = /* @__PURE__ */ function uuid2() {\n  let counter = 0;\n  const random = () => `0000${(Math.random() * 36 ** 4 << 0).toString(36)}`.slice(-4);\n  return () => {\n    counter += 1;\n    return `u${random()}${counter}`;\n  };\n}();\nfunction splitFontFamily(fontFamily) {\n  return fontFamily?.split(\",\").map((val) => val.trim().replace(/\"|'/g, \"\").toLowerCase()).filter(Boolean);\n}\n\nlet uid = 0;\nfunction createLogger(debug) {\n  const prefix = `${PREFIX}[#${uid}]`;\n  uid++;\n  return {\n    // eslint-disable-next-line no-console\n    time: (label) => debug && console.time(`${prefix} ${label}`),\n    // eslint-disable-next-line no-console\n    timeEnd: (label) => debug && console.timeEnd(`${prefix} ${label}`),\n    warn: (...args) => debug && consoleWarn(...args)\n  };\n}\n\nfunction getDefaultRequestInit(bypassingCache) {\n  return {\n    cache: bypassingCache ? \"no-cache\" : \"force-cache\"\n  };\n}\n\nasync function orCreateContext(node, options) {\n  return isContext(node) ? node : createContext(node, { ...options, autoDestruct: true });\n}\nasync function createContext(node, options) {\n  const { scale = 1, workerUrl, workerNumber = 1 } = options || {};\n  const debug = Boolean(options?.debug);\n  const features = options?.features ?? true;\n  const ownerDocument = node.ownerDocument ?? (IN_BROWSER ? window.document : void 0);\n  const ownerWindow = node.ownerDocument?.defaultView ?? (IN_BROWSER ? window : void 0);\n  const requests = /* @__PURE__ */ new Map();\n  const context = {\n    // Options\n    width: 0,\n    height: 0,\n    quality: 1,\n    type: \"image/png\",\n    scale,\n    backgroundColor: null,\n    style: null,\n    filter: null,\n    maximumCanvasSize: 0,\n    timeout: 3e4,\n    progress: null,\n    debug,\n    fetch: {\n      requestInit: getDefaultRequestInit(options?.fetch?.bypassingCache),\n      placeholderImage: \"data:image/png;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\",\n      bypassingCache: false,\n      ...options?.fetch\n    },\n    fetchFn: null,\n    font: {},\n    drawImageInterval: 100,\n    workerUrl: null,\n    workerNumber,\n    onCloneEachNode: null,\n    onCloneNode: null,\n    onEmbedNode: null,\n    onCreateForeignObjectSvg: null,\n    includeStyleProperties: null,\n    autoDestruct: false,\n    ...options,\n    // InternalContext\n    __CONTEXT__: true,\n    log: createLogger(debug),\n    node,\n    ownerDocument,\n    ownerWindow,\n    dpi: scale === 1 ? null : 96 * scale,\n    svgStyleElement: createStyleElement(ownerDocument),\n    svgDefsElement: ownerDocument?.createElementNS(XMLNS, \"defs\"),\n    svgStyles: /* @__PURE__ */ new Map(),\n    defaultComputedStyles: /* @__PURE__ */ new Map(),\n    workers: [\n      ...Array.from({\n        length: SUPPORT_WEB_WORKER && workerUrl && workerNumber ? workerNumber : 0\n      })\n    ].map(() => {\n      try {\n        const worker = new Worker(workerUrl);\n        worker.onmessage = async (event) => {\n          const { url, result } = event.data;\n          if (result) {\n            requests.get(url)?.resolve?.(result);\n          } else {\n            requests.get(url)?.reject?.(new Error(`Error receiving message from worker: ${url}`));\n          }\n        };\n        worker.onmessageerror = (event) => {\n          const { url } = event.data;\n          requests.get(url)?.reject?.(new Error(`Error receiving message from worker: ${url}`));\n        };\n        return worker;\n      } catch (error) {\n        context.log.warn(\"Failed to new Worker\", error);\n        return null;\n      }\n    }).filter(Boolean),\n    fontFamilies: /* @__PURE__ */ new Map(),\n    fontCssTexts: /* @__PURE__ */ new Map(),\n    acceptOfImage: `${[\n      supportWebp(ownerDocument) && \"image/webp\",\n      \"image/svg+xml\",\n      \"image/*\",\n      \"*/*\"\n    ].filter(Boolean).join(\",\")};q=0.8`,\n    requests,\n    drawImageCount: 0,\n    tasks: [],\n    features,\n    isEnable: (key) => {\n      if (key === \"restoreScrollPosition\") {\n        return typeof features === \"boolean\" ? false : features[key] ?? false;\n      }\n      if (typeof features === \"boolean\") {\n        return features;\n      }\n      return features[key] ?? true;\n    },\n    shadowRoots: []\n  };\n  context.log.time(\"wait until load\");\n  await waitUntilLoad(node, { timeout: context.timeout, onWarn: context.log.warn });\n  context.log.timeEnd(\"wait until load\");\n  const { width, height } = resolveBoundingBox(node, context);\n  context.width = width;\n  context.height = height;\n  return context;\n}\nfunction createStyleElement(ownerDocument) {\n  if (!ownerDocument)\n    return void 0;\n  const style = ownerDocument.createElement(\"style\");\n  const cssText = style.ownerDocument.createTextNode(`\n.______background-clip--text {\n  background-clip: text;\n  -webkit-background-clip: text;\n}\n`);\n  style.appendChild(cssText);\n  return style;\n}\nfunction resolveBoundingBox(node, context) {\n  let { width, height } = context;\n  if (isElementNode(node) && (!width || !height)) {\n    const box = node.getBoundingClientRect();\n    width = width || box.width || Number(node.getAttribute(\"width\")) || 0;\n    height = height || box.height || Number(node.getAttribute(\"height\")) || 0;\n  }\n  return { width, height };\n}\n\nasync function imageToCanvas(image, context) {\n  const {\n    log,\n    timeout,\n    drawImageCount,\n    drawImageInterval\n  } = context;\n  log.time(\"image to canvas\");\n  const loaded = await loadMedia(image, { timeout, onWarn: context.log.warn });\n  const { canvas, context2d } = createCanvas(image.ownerDocument, context);\n  const drawImage = () => {\n    try {\n      context2d?.drawImage(loaded, 0, 0, canvas.width, canvas.height);\n    } catch (error) {\n      context.log.warn(\"Failed to drawImage\", error);\n    }\n  };\n  drawImage();\n  if (context.isEnable(\"fixSvgXmlDecode\")) {\n    for (let i = 0; i < drawImageCount; i++) {\n      await new Promise((resolve) => {\n        setTimeout(() => {\n          context2d?.clearRect(0, 0, canvas.width, canvas.height);\n          drawImage();\n          resolve();\n        }, i + drawImageInterval);\n      });\n    }\n  }\n  context.drawImageCount = 0;\n  log.timeEnd(\"image to canvas\");\n  return canvas;\n}\nfunction createCanvas(ownerDocument, context) {\n  const { width, height, scale, backgroundColor, maximumCanvasSize: max } = context;\n  const canvas = ownerDocument.createElement(\"canvas\");\n  canvas.width = Math.floor(width * scale);\n  canvas.height = Math.floor(height * scale);\n  canvas.style.width = `${width}px`;\n  canvas.style.height = `${height}px`;\n  if (max) {\n    if (canvas.width > max || canvas.height > max) {\n      if (canvas.width > max && canvas.height > max) {\n        if (canvas.width > canvas.height) {\n          canvas.height *= max / canvas.width;\n          canvas.width = max;\n        } else {\n          canvas.width *= max / canvas.height;\n          canvas.height = max;\n        }\n      } else if (canvas.width > max) {\n        canvas.height *= max / canvas.width;\n        canvas.width = max;\n      } else {\n        canvas.width *= max / canvas.height;\n        canvas.height = max;\n      }\n    }\n  }\n  const context2d = canvas.getContext(\"2d\");\n  if (context2d && backgroundColor) {\n    context2d.fillStyle = backgroundColor;\n    context2d.fillRect(0, 0, canvas.width, canvas.height);\n  }\n  return { canvas, context2d };\n}\n\nfunction cloneCanvas(canvas, context) {\n  if (canvas.ownerDocument) {\n    try {\n      const dataURL = canvas.toDataURL();\n      if (dataURL !== \"data:,\") {\n        return createImage(dataURL, canvas.ownerDocument);\n      }\n    } catch (error) {\n      context.log.warn(\"Failed to clone canvas\", error);\n    }\n  }\n  const cloned = canvas.cloneNode(false);\n  const ctx = canvas.getContext(\"2d\");\n  const clonedCtx = cloned.getContext(\"2d\");\n  try {\n    if (ctx && clonedCtx) {\n      clonedCtx.putImageData(\n        ctx.getImageData(0, 0, canvas.width, canvas.height),\n        0,\n        0\n      );\n    }\n    return cloned;\n  } catch (error) {\n    context.log.warn(\"Failed to clone canvas\", error);\n  }\n  return cloned;\n}\n\nfunction cloneIframe(iframe, context) {\n  try {\n    if (iframe?.contentDocument?.body) {\n      return cloneNode(iframe.contentDocument.body, context);\n    }\n  } catch (error) {\n    context.log.warn(\"Failed to clone iframe\", error);\n  }\n  return iframe.cloneNode(false);\n}\n\nfunction cloneImage(image) {\n  const cloned = image.cloneNode(false);\n  if (image.currentSrc && image.currentSrc !== image.src) {\n    cloned.src = image.currentSrc;\n    cloned.srcset = \"\";\n  }\n  if (cloned.loading === \"lazy\") {\n    cloned.loading = \"eager\";\n  }\n  return cloned;\n}\n\nasync function cloneVideo(video, context) {\n  if (video.ownerDocument && !video.currentSrc && video.poster) {\n    return createImage(video.poster, video.ownerDocument);\n  }\n  const cloned = video.cloneNode(false);\n  cloned.crossOrigin = \"anonymous\";\n  if (video.currentSrc && video.currentSrc !== video.src) {\n    cloned.src = video.currentSrc;\n  }\n  const ownerDocument = cloned.ownerDocument;\n  if (ownerDocument) {\n    let canPlay = true;\n    await loadMedia(cloned, { onError: () => canPlay = false, onWarn: context.log.warn });\n    if (!canPlay) {\n      if (video.poster) {\n        return createImage(video.poster, video.ownerDocument);\n      }\n      return cloned;\n    }\n    cloned.currentTime = video.currentTime;\n    await new Promise((resolve) => {\n      cloned.addEventListener(\"seeked\", resolve, { once: true });\n    });\n    const canvas = ownerDocument.createElement(\"canvas\");\n    canvas.width = video.offsetWidth;\n    canvas.height = video.offsetHeight;\n    try {\n      const ctx = canvas.getContext(\"2d\");\n      if (ctx)\n        ctx.drawImage(cloned, 0, 0, canvas.width, canvas.height);\n    } catch (error) {\n      context.log.warn(\"Failed to clone video\", error);\n      if (video.poster) {\n        return createImage(video.poster, video.ownerDocument);\n      }\n      return cloned;\n    }\n    return cloneCanvas(canvas, context);\n  }\n  return cloned;\n}\n\nfunction cloneElement(node, context) {\n  if (isCanvasElement(node)) {\n    return cloneCanvas(node, context);\n  }\n  if (isIFrameElement(node)) {\n    return cloneIframe(node, context);\n  }\n  if (isImageElement(node)) {\n    return cloneImage(node);\n  }\n  if (isVideoElement(node)) {\n    return cloneVideo(node, context);\n  }\n  return node.cloneNode(false);\n}\n\nfunction getSandBox(context) {\n  let sandbox = context.sandbox;\n  if (!sandbox) {\n    const { ownerDocument } = context;\n    try {\n      if (ownerDocument) {\n        sandbox = ownerDocument.createElement(\"iframe\");\n        sandbox.id = `__SANDBOX__${uuid()}`;\n        sandbox.width = \"0\";\n        sandbox.height = \"0\";\n        sandbox.style.visibility = \"hidden\";\n        sandbox.style.position = \"fixed\";\n        ownerDocument.body.appendChild(sandbox);\n        sandbox.srcdoc = '<!DOCTYPE html><meta charset=\"UTF-8\"><title></title><body>';\n        context.sandbox = sandbox;\n      }\n    } catch (error) {\n      context.log.warn(\"Failed to getSandBox\", error);\n    }\n  }\n  return sandbox;\n}\n\nconst ignoredStyles = [\n  \"width\",\n  \"height\",\n  \"-webkit-text-fill-color\"\n];\nconst includedAttributes = [\n  \"stroke\",\n  \"fill\"\n];\nfunction getDefaultStyle(node, pseudoElement, context) {\n  const { defaultComputedStyles } = context;\n  const nodeName = node.nodeName.toLowerCase();\n  const isSvgNode = isSVGElementNode(node) && nodeName !== \"svg\";\n  const attributes = isSvgNode ? includedAttributes.map((name) => [name, node.getAttribute(name)]).filter(([, value]) => value !== null) : [];\n  const key = [\n    isSvgNode && \"svg\",\n    nodeName,\n    attributes.map((name, value) => `${name}=${value}`).join(\",\"),\n    pseudoElement\n  ].filter(Boolean).join(\":\");\n  if (defaultComputedStyles.has(key))\n    return defaultComputedStyles.get(key);\n  const sandbox = getSandBox(context);\n  const sandboxWindow = sandbox?.contentWindow;\n  if (!sandboxWindow)\n    return /* @__PURE__ */ new Map();\n  const sandboxDocument = sandboxWindow?.document;\n  let root;\n  let el;\n  if (isSvgNode) {\n    root = sandboxDocument.createElementNS(XMLNS, \"svg\");\n    el = root.ownerDocument.createElementNS(root.namespaceURI, nodeName);\n    attributes.forEach(([name, value]) => {\n      el.setAttributeNS(null, name, value);\n    });\n    root.appendChild(el);\n  } else {\n    root = el = sandboxDocument.createElement(nodeName);\n  }\n  el.textContent = \" \";\n  sandboxDocument.body.appendChild(root);\n  const computedStyle = sandboxWindow.getComputedStyle(el, pseudoElement);\n  const styles = /* @__PURE__ */ new Map();\n  for (let len = computedStyle.length, i = 0; i < len; i++) {\n    const name = computedStyle.item(i);\n    if (ignoredStyles.includes(name))\n      continue;\n    styles.set(name, computedStyle.getPropertyValue(name));\n  }\n  sandboxDocument.body.removeChild(root);\n  defaultComputedStyles.set(key, styles);\n  return styles;\n}\n\nfunction getDiffStyle(style, defaultStyle, includeStyleProperties) {\n  const diffStyle = /* @__PURE__ */ new Map();\n  const prefixs = [];\n  const prefixTree = /* @__PURE__ */ new Map();\n  if (includeStyleProperties) {\n    for (const name of includeStyleProperties) {\n      applyTo(name);\n    }\n  } else {\n    for (let len = style.length, i = 0; i < len; i++) {\n      const name = style.item(i);\n      applyTo(name);\n    }\n  }\n  for (let len = prefixs.length, i = 0; i < len; i++) {\n    prefixTree.get(prefixs[i])?.forEach((value, name) => diffStyle.set(name, value));\n  }\n  function applyTo(name) {\n    const value = style.getPropertyValue(name);\n    const priority = style.getPropertyPriority(name);\n    const subIndex = name.lastIndexOf(\"-\");\n    const prefix = subIndex > -1 ? name.substring(0, subIndex) : void 0;\n    if (prefix) {\n      let map = prefixTree.get(prefix);\n      if (!map) {\n        map = /* @__PURE__ */ new Map();\n        prefixTree.set(prefix, map);\n      }\n      map.set(name, [value, priority]);\n    }\n    if (defaultStyle.get(name) === value && !priority)\n      return;\n    if (prefix) {\n      prefixs.push(prefix);\n    } else {\n      diffStyle.set(name, [value, priority]);\n    }\n  }\n  return diffStyle;\n}\n\nfunction copyCssStyles(node, cloned, isRoot, context) {\n  const { ownerWindow, includeStyleProperties, currentParentNodeStyle } = context;\n  const clonedStyle = cloned.style;\n  const computedStyle = ownerWindow.getComputedStyle(node);\n  const defaultStyle = getDefaultStyle(node, null, context);\n  currentParentNodeStyle?.forEach((_, key) => {\n    defaultStyle.delete(key);\n  });\n  const style = getDiffStyle(computedStyle, defaultStyle, includeStyleProperties);\n  style.delete(\"transition-property\");\n  style.delete(\"all\");\n  style.delete(\"d\");\n  style.delete(\"content\");\n  if (isRoot) {\n    style.delete(\"margin-top\");\n    style.delete(\"margin-right\");\n    style.delete(\"margin-bottom\");\n    style.delete(\"margin-left\");\n    style.delete(\"margin-block-start\");\n    style.delete(\"margin-block-end\");\n    style.delete(\"margin-inline-start\");\n    style.delete(\"margin-inline-end\");\n    style.set(\"box-sizing\", [\"border-box\", \"\"]);\n  }\n  if (style.get(\"background-clip\")?.[0] === \"text\") {\n    cloned.classList.add(\"______background-clip--text\");\n  }\n  if (IN_CHROME) {\n    if (!style.has(\"font-kerning\"))\n      style.set(\"font-kerning\", [\"normal\", \"\"]);\n    if ((style.get(\"overflow-x\")?.[0] === \"hidden\" || style.get(\"overflow-y\")?.[0] === \"hidden\") && style.get(\"text-overflow\")?.[0] === \"ellipsis\" && node.scrollWidth === node.clientWidth) {\n      style.set(\"text-overflow\", [\"clip\", \"\"]);\n    }\n  }\n  for (let len = clonedStyle.length, i = 0; i < len; i++) {\n    clonedStyle.removeProperty(clonedStyle.item(i));\n  }\n  style.forEach(([value, priority], name) => {\n    clonedStyle.setProperty(name, value, priority);\n  });\n  return style;\n}\n\nfunction copyInputValue(node, cloned) {\n  if (isTextareaElement(node) || isInputElement(node) || isSelectElement(node)) {\n    cloned.setAttribute(\"value\", node.value);\n  }\n}\n\nconst pseudoClasses = [\n  \"::before\",\n  \"::after\"\n  // '::placeholder', TODO\n];\nconst scrollbarPseudoClasses = [\n  \"::-webkit-scrollbar\",\n  \"::-webkit-scrollbar-button\",\n  // '::-webkit-scrollbar:horizontal', TODO\n  \"::-webkit-scrollbar-thumb\",\n  \"::-webkit-scrollbar-track\",\n  \"::-webkit-scrollbar-track-piece\",\n  // '::-webkit-scrollbar:vertical', TODO\n  \"::-webkit-scrollbar-corner\",\n  \"::-webkit-resizer\"\n];\nfunction copyPseudoClass(node, cloned, copyScrollbar, context, addWordToFontFamilies) {\n  const { ownerWindow, svgStyleElement, svgStyles, currentNodeStyle } = context;\n  if (!svgStyleElement || !ownerWindow)\n    return;\n  function copyBy(pseudoClass) {\n    const computedStyle = ownerWindow.getComputedStyle(node, pseudoClass);\n    let content = computedStyle.getPropertyValue(\"content\");\n    if (!content || content === \"none\")\n      return;\n    addWordToFontFamilies?.(content);\n    content = content.replace(/(')|(\")|(counter\\(.+\\))/g, \"\");\n    const klasses = [uuid()];\n    const defaultStyle = getDefaultStyle(node, pseudoClass, context);\n    currentNodeStyle?.forEach((_, key) => {\n      defaultStyle.delete(key);\n    });\n    const style = getDiffStyle(computedStyle, defaultStyle, context.includeStyleProperties);\n    style.delete(\"content\");\n    style.delete(\"-webkit-locale\");\n    if (style.get(\"background-clip\")?.[0] === \"text\") {\n      cloned.classList.add(\"______background-clip--text\");\n    }\n    const cloneStyle = [\n      `content: '${content}';`\n    ];\n    style.forEach(([value, priority], name) => {\n      cloneStyle.push(`${name}: ${value}${priority ? \" !important\" : \"\"};`);\n    });\n    if (cloneStyle.length === 1)\n      return;\n    try {\n      cloned.className = [cloned.className, ...klasses].join(\" \");\n    } catch (err) {\n      context.log.warn(\"Failed to copyPseudoClass\", err);\n      return;\n    }\n    const cssText = cloneStyle.join(\"\\n  \");\n    let allClasses = svgStyles.get(cssText);\n    if (!allClasses) {\n      allClasses = [];\n      svgStyles.set(cssText, allClasses);\n    }\n    allClasses.push(`.${klasses[0]}${pseudoClass}`);\n  }\n  pseudoClasses.forEach(copyBy);\n  if (copyScrollbar)\n    scrollbarPseudoClasses.forEach(copyBy);\n}\n\nconst excludeParentNodes = /* @__PURE__ */ new Set([\n  \"symbol\"\n  // test/fixtures/svg.symbol.html\n]);\nasync function appendChildNode(node, cloned, child, context, addWordToFontFamilies) {\n  if (isElementNode(child) && (isStyleElement(child) || isScriptElement(child)))\n    return;\n  if (context.filter && !context.filter(child))\n    return;\n  if (excludeParentNodes.has(cloned.nodeName) || excludeParentNodes.has(child.nodeName)) {\n    context.currentParentNodeStyle = void 0;\n  } else {\n    context.currentParentNodeStyle = context.currentNodeStyle;\n  }\n  const childCloned = await cloneNode(child, context, false, addWordToFontFamilies);\n  if (context.isEnable(\"restoreScrollPosition\")) {\n    restoreScrollPosition(node, childCloned);\n  }\n  cloned.appendChild(childCloned);\n}\nasync function cloneChildNodes(node, cloned, context, addWordToFontFamilies) {\n  let firstChild = node.firstChild;\n  if (isElementNode(node)) {\n    if (node.shadowRoot) {\n      firstChild = node.shadowRoot?.firstChild;\n      context.shadowRoots.push(node.shadowRoot);\n    }\n  }\n  for (let child = firstChild; child; child = child.nextSibling) {\n    if (isCommentNode(child))\n      continue;\n    if (isElementNode(child) && isSlotElement(child) && typeof child.assignedNodes === \"function\") {\n      const nodes = child.assignedNodes();\n      for (let i = 0; i < nodes.length; i++) {\n        await appendChildNode(node, cloned, nodes[i], context, addWordToFontFamilies);\n      }\n    } else {\n      await appendChildNode(node, cloned, child, context, addWordToFontFamilies);\n    }\n  }\n}\nfunction restoreScrollPosition(node, chlidCloned) {\n  if (!isHTMLElementNode(node) || !isHTMLElementNode(chlidCloned))\n    return;\n  const { scrollTop, scrollLeft } = node;\n  if (!scrollTop && !scrollLeft) {\n    return;\n  }\n  const { transform } = chlidCloned.style;\n  const matrix = new DOMMatrix(transform);\n  const { a, b, c, d } = matrix;\n  matrix.a = 1;\n  matrix.b = 0;\n  matrix.c = 0;\n  matrix.d = 1;\n  matrix.translateSelf(-scrollLeft, -scrollTop);\n  matrix.a = a;\n  matrix.b = b;\n  matrix.c = c;\n  matrix.d = d;\n  chlidCloned.style.transform = matrix.toString();\n}\nfunction applyCssStyleWithOptions(cloned, context) {\n  const { backgroundColor, width, height, style: styles } = context;\n  const clonedStyle = cloned.style;\n  if (backgroundColor)\n    clonedStyle.setProperty(\"background-color\", backgroundColor, \"important\");\n  if (width)\n    clonedStyle.setProperty(\"width\", `${width}px`, \"important\");\n  if (height)\n    clonedStyle.setProperty(\"height\", `${height}px`, \"important\");\n  if (styles) {\n    for (const name in styles) clonedStyle[name] = styles[name];\n  }\n}\nconst NORMAL_ATTRIBUTE_RE = /^[\\w-:]+$/;\nasync function cloneNode(node, context, isRoot = false, addWordToFontFamilies) {\n  const { ownerDocument, ownerWindow, fontFamilies, onCloneEachNode } = context;\n  if (ownerDocument && isTextNode(node)) {\n    if (addWordToFontFamilies && /\\S/.test(node.data)) {\n      addWordToFontFamilies(node.data);\n    }\n    return ownerDocument.createTextNode(node.data);\n  }\n  if (ownerDocument && ownerWindow && isElementNode(node) && (isHTMLElementNode(node) || isSVGElementNode(node))) {\n    const cloned2 = await cloneElement(node, context);\n    if (context.isEnable(\"removeAbnormalAttributes\")) {\n      const names = cloned2.getAttributeNames();\n      for (let len = names.length, i = 0; i < len; i++) {\n        const name = names[i];\n        if (!NORMAL_ATTRIBUTE_RE.test(name)) {\n          cloned2.removeAttribute(name);\n        }\n      }\n    }\n    const style = context.currentNodeStyle = copyCssStyles(node, cloned2, isRoot, context);\n    if (isRoot)\n      applyCssStyleWithOptions(cloned2, context);\n    let copyScrollbar = false;\n    if (context.isEnable(\"copyScrollbar\")) {\n      const overflow = [\n        style.get(\"overflow-x\")?.[0],\n        style.get(\"overflow-y\")?.[0]\n      ];\n      copyScrollbar = overflow.includes(\"scroll\") || (overflow.includes(\"auto\") || overflow.includes(\"overlay\")) && (node.scrollHeight > node.clientHeight || node.scrollWidth > node.clientWidth);\n    }\n    const textTransform = style.get(\"text-transform\")?.[0];\n    const families = splitFontFamily(style.get(\"font-family\")?.[0]);\n    const addWordToFontFamilies2 = families ? (word) => {\n      if (textTransform === \"uppercase\") {\n        word = word.toUpperCase();\n      } else if (textTransform === \"lowercase\") {\n        word = word.toLowerCase();\n      } else if (textTransform === \"capitalize\") {\n        word = word[0].toUpperCase() + word.substring(1);\n      }\n      families.forEach((family) => {\n        let fontFamily = fontFamilies.get(family);\n        if (!fontFamily) {\n          fontFamilies.set(family, fontFamily = /* @__PURE__ */ new Set());\n        }\n        word.split(\"\").forEach((text) => fontFamily.add(text));\n      });\n    } : void 0;\n    copyPseudoClass(\n      node,\n      cloned2,\n      copyScrollbar,\n      context,\n      addWordToFontFamilies2\n    );\n    copyInputValue(node, cloned2);\n    if (!isVideoElement(node)) {\n      await cloneChildNodes(\n        node,\n        cloned2,\n        context,\n        addWordToFontFamilies2\n      );\n    }\n    await onCloneEachNode?.(cloned2);\n    return cloned2;\n  }\n  const cloned = node.cloneNode(false);\n  await cloneChildNodes(node, cloned, context);\n  await onCloneEachNode?.(cloned);\n  return cloned;\n}\n\nfunction destroyContext(context) {\n  context.ownerDocument = void 0;\n  context.ownerWindow = void 0;\n  context.svgStyleElement = void 0;\n  context.svgDefsElement = void 0;\n  context.svgStyles.clear();\n  context.defaultComputedStyles.clear();\n  if (context.sandbox) {\n    try {\n      context.sandbox.remove();\n    } catch (err) {\n      context.log.warn(\"Failed to destroyContext\", err);\n    }\n    context.sandbox = void 0;\n  }\n  context.workers = [];\n  context.fontFamilies.clear();\n  context.fontCssTexts.clear();\n  context.requests.clear();\n  context.tasks = [];\n  context.shadowRoots = [];\n}\n\nfunction baseFetch(options) {\n  const { url, timeout, responseType, ...requestInit } = options;\n  const controller = new AbortController();\n  const timer = timeout ? setTimeout(() => controller.abort(), timeout) : void 0;\n  return fetch(url, { signal: controller.signal, ...requestInit }).then((response) => {\n    if (!response.ok) {\n      throw new Error(\"Failed fetch, not 2xx response\", { cause: response });\n    }\n    switch (responseType) {\n      case \"arrayBuffer\":\n        return response.arrayBuffer();\n      case \"dataUrl\":\n        return response.blob().then(blobToDataUrl);\n      case \"text\":\n      default:\n        return response.text();\n    }\n  }).finally(() => clearTimeout(timer));\n}\nfunction contextFetch(context, options) {\n  const { url: rawUrl, requestType = \"text\", responseType = \"text\", imageDom } = options;\n  let url = rawUrl;\n  const {\n    timeout,\n    acceptOfImage,\n    requests,\n    fetchFn,\n    fetch: {\n      requestInit,\n      bypassingCache,\n      placeholderImage\n    },\n    font,\n    workers,\n    fontFamilies\n  } = context;\n  if (requestType === \"image\" && (IN_SAFARI || IN_FIREFOX)) {\n    context.drawImageCount++;\n  }\n  let request = requests.get(rawUrl);\n  if (!request) {\n    if (bypassingCache) {\n      if (bypassingCache instanceof RegExp && bypassingCache.test(url)) {\n        url += (/\\?/.test(url) ? \"&\" : \"?\") + (/* @__PURE__ */ new Date()).getTime();\n      }\n    }\n    const canFontMinify = requestType.startsWith(\"font\") && font && font.minify;\n    const fontTexts = /* @__PURE__ */ new Set();\n    if (canFontMinify) {\n      const families = requestType.split(\";\")[1].split(\",\");\n      families.forEach((family) => {\n        if (!fontFamilies.has(family))\n          return;\n        fontFamilies.get(family).forEach((text) => fontTexts.add(text));\n      });\n    }\n    const needFontMinify = canFontMinify && fontTexts.size;\n    const baseFetchOptions = {\n      url,\n      timeout,\n      responseType: needFontMinify ? \"arrayBuffer\" : responseType,\n      headers: requestType === \"image\" ? { accept: acceptOfImage } : void 0,\n      ...requestInit\n    };\n    request = {\n      type: requestType,\n      resolve: void 0,\n      reject: void 0,\n      response: null\n    };\n    request.response = (async () => {\n      if (fetchFn && requestType === \"image\") {\n        const result = await fetchFn(rawUrl);\n        if (result)\n          return result;\n      }\n      if (!IN_SAFARI && rawUrl.startsWith(\"http\") && workers.length) {\n        return new Promise((resolve, reject) => {\n          const worker = workers[requests.size & workers.length - 1];\n          worker.postMessage({ rawUrl, ...baseFetchOptions });\n          request.resolve = resolve;\n          request.reject = reject;\n        });\n      }\n      return baseFetch(baseFetchOptions);\n    })().catch((error) => {\n      requests.delete(rawUrl);\n      if (requestType === \"image\" && placeholderImage) {\n        context.log.warn(\"Failed to fetch image base64, trying to use placeholder image\", url);\n        return typeof placeholderImage === \"string\" ? placeholderImage : placeholderImage(imageDom);\n      }\n      throw error;\n    });\n    requests.set(rawUrl, request);\n  }\n  return request.response;\n}\n\nasync function replaceCssUrlToDataUrl(cssText, baseUrl, context, isImage) {\n  if (!hasCssUrl(cssText))\n    return cssText;\n  for (const [rawUrl, url] of parseCssUrls(cssText, baseUrl)) {\n    try {\n      const dataUrl = await contextFetch(\n        context,\n        {\n          url,\n          requestType: isImage ? \"image\" : \"text\",\n          responseType: \"dataUrl\"\n        }\n      );\n      cssText = cssText.replace(toRE(rawUrl), `$1${dataUrl}$3`);\n    } catch (error) {\n      context.log.warn(\"Failed to fetch css data url\", rawUrl, error);\n    }\n  }\n  return cssText;\n}\nfunction hasCssUrl(cssText) {\n  return /url\\((['\"]?)([^'\"]+?)\\1\\)/.test(cssText);\n}\nconst URL_RE = /url\\((['\"]?)([^'\"]+?)\\1\\)/g;\nfunction parseCssUrls(cssText, baseUrl) {\n  const result = [];\n  cssText.replace(URL_RE, (raw, quotation, url) => {\n    result.push([url, resolveUrl(url, baseUrl)]);\n    return raw;\n  });\n  return result.filter(([url]) => !isDataUrl(url));\n}\nfunction toRE(url) {\n  const escaped = url.replace(/([.*+?^${}()|\\[\\]\\/\\\\])/g, \"\\\\$1\");\n  return new RegExp(`(url\\\\(['\"]?)(${escaped})(['\"]?\\\\))`, \"g\");\n}\n\nconst properties = [\n  \"background-image\",\n  \"border-image-source\",\n  \"-webkit-border-image\",\n  \"-webkit-mask-image\",\n  \"list-style-image\"\n];\nfunction embedCssStyleImage(style, context) {\n  return properties.map((property) => {\n    const value = style.getPropertyValue(property);\n    if (!value || value === \"none\") {\n      return null;\n    }\n    if (IN_SAFARI || IN_FIREFOX) {\n      context.drawImageCount++;\n    }\n    return replaceCssUrlToDataUrl(value, null, context, true).then((newValue) => {\n      if (!newValue || value === newValue)\n        return;\n      style.setProperty(\n        property,\n        newValue,\n        style.getPropertyPriority(property)\n      );\n    });\n  }).filter(Boolean);\n}\n\nfunction embedImageElement(cloned, context) {\n  if (isImageElement(cloned)) {\n    const originalSrc = cloned.currentSrc || cloned.src;\n    if (!isDataUrl(originalSrc)) {\n      return [\n        contextFetch(context, {\n          url: originalSrc,\n          imageDom: cloned,\n          requestType: \"image\",\n          responseType: \"dataUrl\"\n        }).then((url) => {\n          if (!url)\n            return;\n          cloned.srcset = \"\";\n          cloned.dataset.originalSrc = originalSrc;\n          cloned.src = url || \"\";\n        })\n      ];\n    }\n    if (IN_SAFARI || IN_FIREFOX) {\n      context.drawImageCount++;\n    }\n  } else if (isSVGElementNode(cloned) && !isDataUrl(cloned.href.baseVal)) {\n    const originalSrc = cloned.href.baseVal;\n    return [\n      contextFetch(context, {\n        url: originalSrc,\n        imageDom: cloned,\n        requestType: \"image\",\n        responseType: \"dataUrl\"\n      }).then((url) => {\n        if (!url)\n          return;\n        cloned.dataset.originalSrc = originalSrc;\n        cloned.href.baseVal = url || \"\";\n      })\n    ];\n  }\n  return [];\n}\n\nfunction embedSvgUse(cloned, context) {\n  const { ownerDocument, svgDefsElement } = context;\n  const href = cloned.getAttribute(\"href\") ?? cloned.getAttribute(\"xlink:href\");\n  if (!href)\n    return [];\n  const [svgUrl, id] = href.split(\"#\");\n  if (id) {\n    const query = `#${id}`;\n    const definition = context.shadowRoots.reduce(\n      (res, root) => {\n        return res ?? root.querySelector(`svg ${query}`);\n      },\n      ownerDocument?.querySelector(`svg ${query}`)\n    );\n    if (svgUrl) {\n      cloned.setAttribute(\"href\", query);\n    }\n    if (svgDefsElement?.querySelector(query))\n      return [];\n    if (definition) {\n      svgDefsElement?.appendChild(definition.cloneNode(true));\n      return [];\n    } else if (svgUrl) {\n      return [\n        contextFetch(context, {\n          url: svgUrl,\n          responseType: \"text\"\n        }).then((svgData) => {\n          svgDefsElement?.insertAdjacentHTML(\"beforeend\", svgData);\n        })\n      ];\n    }\n  }\n  return [];\n}\n\nfunction embedNode(cloned, context) {\n  const { tasks } = context;\n  if (isElementNode(cloned)) {\n    if (isImageElement(cloned) || isSVGImageElementNode(cloned)) {\n      tasks.push(...embedImageElement(cloned, context));\n    }\n    if (isSVGUseElementNode(cloned)) {\n      tasks.push(...embedSvgUse(cloned, context));\n    }\n  }\n  if (isHTMLElementNode(cloned)) {\n    tasks.push(...embedCssStyleImage(cloned.style, context));\n  }\n  cloned.childNodes.forEach((child) => {\n    embedNode(child, context);\n  });\n}\n\nasync function embedWebFont(clone, context) {\n  const {\n    ownerDocument,\n    svgStyleElement,\n    fontFamilies,\n    fontCssTexts,\n    tasks,\n    font\n  } = context;\n  if (!ownerDocument || !svgStyleElement || !fontFamilies.size) {\n    return;\n  }\n  if (font && font.cssText) {\n    const cssText = filterPreferredFormat(font.cssText, context);\n    svgStyleElement.appendChild(ownerDocument.createTextNode(`${cssText}\n`));\n  } else {\n    const styleSheets = Array.from(ownerDocument.styleSheets).filter((styleSheet) => {\n      try {\n        return \"cssRules\" in styleSheet && Boolean(styleSheet.cssRules.length);\n      } catch (error) {\n        context.log.warn(`Error while reading CSS rules from ${styleSheet.href}`, error);\n        return false;\n      }\n    });\n    await Promise.all(\n      styleSheets.flatMap((styleSheet) => {\n        return Array.from(styleSheet.cssRules).map(async (cssRule, index) => {\n          if (isCSSImportRule(cssRule)) {\n            let importIndex = index + 1;\n            const baseUrl = cssRule.href;\n            let cssText = \"\";\n            try {\n              cssText = await contextFetch(context, {\n                url: baseUrl,\n                requestType: \"text\",\n                responseType: \"text\"\n              });\n            } catch (error) {\n              context.log.warn(`Error fetch remote css import from ${baseUrl}`, error);\n            }\n            const replacedCssText = cssText.replace(\n              URL_RE,\n              (raw, quotation, url) => raw.replace(url, resolveUrl(url, baseUrl))\n            );\n            for (const rule of parseCss(replacedCssText)) {\n              try {\n                styleSheet.insertRule(\n                  rule,\n                  rule.startsWith(\"@import\") ? importIndex += 1 : styleSheet.cssRules.length\n                );\n              } catch (error) {\n                context.log.warn(\"Error inserting rule from remote css import\", { rule, error });\n              }\n            }\n          }\n        });\n      })\n    );\n    const cssRules = styleSheets.flatMap((styleSheet) => Array.from(styleSheet.cssRules));\n    cssRules.filter((cssRule) => isCssFontFaceRule(cssRule) && hasCssUrl(cssRule.style.getPropertyValue(\"src\")) && splitFontFamily(cssRule.style.getPropertyValue(\"font-family\"))?.some((val) => fontFamilies.has(val))).forEach((value) => {\n      const rule = value;\n      const cssText = fontCssTexts.get(rule.cssText);\n      if (cssText) {\n        svgStyleElement.appendChild(ownerDocument.createTextNode(`${cssText}\n`));\n      } else {\n        tasks.push(\n          replaceCssUrlToDataUrl(\n            rule.cssText,\n            rule.parentStyleSheet ? rule.parentStyleSheet.href : null,\n            context\n          ).then((cssText2) => {\n            cssText2 = filterPreferredFormat(cssText2, context);\n            fontCssTexts.set(rule.cssText, cssText2);\n            svgStyleElement.appendChild(ownerDocument.createTextNode(`${cssText2}\n`));\n          })\n        );\n      }\n    });\n  }\n}\nconst COMMENTS_RE = /(\\/\\*[\\s\\S]*?\\*\\/)/g;\nconst KEYFRAMES_RE = /((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})/gi;\nfunction parseCss(source) {\n  if (source == null)\n    return [];\n  const result = [];\n  let cssText = source.replace(COMMENTS_RE, \"\");\n  while (true) {\n    const matches = KEYFRAMES_RE.exec(cssText);\n    if (!matches)\n      break;\n    result.push(matches[0]);\n  }\n  cssText = cssText.replace(KEYFRAMES_RE, \"\");\n  const IMPORT_RE = /@import[\\s\\S]*?url\\([^)]*\\)[\\s\\S]*?;/gi;\n  const UNIFIED_RE = new RegExp(\n    // eslint-disable-next-line\n    \"((\\\\s*?(?:\\\\/\\\\*[\\\\s\\\\S]*?\\\\*\\\\/)?\\\\s*?@media[\\\\s\\\\S]*?){([\\\\s\\\\S]*?)}\\\\s*?})|(([\\\\s\\\\S]*?){([\\\\s\\\\S]*?)})\",\n    \"gi\"\n  );\n  while (true) {\n    let matches = IMPORT_RE.exec(cssText);\n    if (!matches) {\n      matches = UNIFIED_RE.exec(cssText);\n      if (!matches) {\n        break;\n      } else {\n        IMPORT_RE.lastIndex = UNIFIED_RE.lastIndex;\n      }\n    } else {\n      UNIFIED_RE.lastIndex = IMPORT_RE.lastIndex;\n    }\n    result.push(matches[0]);\n  }\n  return result;\n}\nconst URL_WITH_FORMAT_RE = /url\\([^)]+\\)\\s*format\\(([\"']?)([^\"']+)\\1\\)/g;\nconst FONT_SRC_RE = /src:\\s*(?:url\\([^)]+\\)\\s*format\\([^)]+\\)[,;]\\s*)+/g;\nfunction filterPreferredFormat(str, context) {\n  const { font } = context;\n  const preferredFormat = font ? font?.preferredFormat : void 0;\n  return preferredFormat ? str.replace(FONT_SRC_RE, (match) => {\n    while (true) {\n      const [src, , format] = URL_WITH_FORMAT_RE.exec(match) || [];\n      if (!format)\n        return \"\";\n      if (format === preferredFormat)\n        return `src: ${src};`;\n    }\n  }) : str;\n}\n\nasync function domToForeignObjectSvg(node, options) {\n  const context = await orCreateContext(node, options);\n  if (isElementNode(context.node) && isSVGElementNode(context.node))\n    return context.node;\n  const {\n    ownerDocument,\n    log,\n    tasks,\n    svgStyleElement,\n    svgDefsElement,\n    svgStyles,\n    font,\n    progress,\n    autoDestruct,\n    onCloneNode,\n    onEmbedNode,\n    onCreateForeignObjectSvg\n  } = context;\n  log.time(\"clone node\");\n  const clone = await cloneNode(context.node, context, true);\n  if (svgStyleElement && ownerDocument) {\n    let allCssText = \"\";\n    svgStyles.forEach((klasses, cssText) => {\n      allCssText += `${klasses.join(\",\\n\")} {\n  ${cssText}\n}\n`;\n    });\n    svgStyleElement.appendChild(ownerDocument.createTextNode(allCssText));\n  }\n  log.timeEnd(\"clone node\");\n  await onCloneNode?.(clone);\n  if (font !== false && isElementNode(clone)) {\n    log.time(\"embed web font\");\n    await embedWebFont(clone, context);\n    log.timeEnd(\"embed web font\");\n  }\n  log.time(\"embed node\");\n  embedNode(clone, context);\n  const count = tasks.length;\n  let current = 0;\n  const runTask = async () => {\n    while (true) {\n      const task = tasks.pop();\n      if (!task)\n        break;\n      try {\n        await task;\n      } catch (error) {\n        context.log.warn(\"Failed to run task\", error);\n      }\n      progress?.(++current, count);\n    }\n  };\n  progress?.(current, count);\n  await Promise.all([...Array.from({ length: 4 })].map(runTask));\n  log.timeEnd(\"embed node\");\n  await onEmbedNode?.(clone);\n  const svg = createForeignObjectSvg(clone, context);\n  svgDefsElement && svg.insertBefore(svgDefsElement, svg.children[0]);\n  svgStyleElement && svg.insertBefore(svgStyleElement, svg.children[0]);\n  autoDestruct && destroyContext(context);\n  await onCreateForeignObjectSvg?.(svg);\n  return svg;\n}\nfunction createForeignObjectSvg(clone, context) {\n  const { width, height } = context;\n  const svg = createSvg(width, height, clone.ownerDocument);\n  const foreignObject = svg.ownerDocument.createElementNS(svg.namespaceURI, \"foreignObject\");\n  foreignObject.setAttributeNS(null, \"x\", \"0%\");\n  foreignObject.setAttributeNS(null, \"y\", \"0%\");\n  foreignObject.setAttributeNS(null, \"width\", \"100%\");\n  foreignObject.setAttributeNS(null, \"height\", \"100%\");\n  foreignObject.append(clone);\n  svg.appendChild(foreignObject);\n  return svg;\n}\n\nasync function domToCanvas(node, options) {\n  const context = await orCreateContext(node, options);\n  const svg = await domToForeignObjectSvg(context);\n  const dataUrl = svgToDataUrl(svg, context.isEnable(\"removeControlCharacter\"));\n  if (!context.autoDestruct) {\n    context.svgStyleElement = createStyleElement(context.ownerDocument);\n    context.svgDefsElement = context.ownerDocument?.createElementNS(XMLNS, \"defs\");\n    context.svgStyles.clear();\n  }\n  const image = createImage(dataUrl, svg.ownerDocument);\n  return await imageToCanvas(image, context);\n}\n\nasync function domToBlob(node, options) {\n  const context = await orCreateContext(node, options);\n  const { log, type, quality, dpi } = context;\n  const canvas = await domToCanvas(context);\n  log.time(\"canvas to blob\");\n  const blob = await canvasToBlob(canvas, type, quality);\n  if ([\"image/png\", \"image/jpeg\"].includes(type) && dpi) {\n    const arrayBuffer = await blobToArrayBuffer(blob.slice(0, 33));\n    let uint8Array = new Uint8Array(arrayBuffer);\n    if (type === \"image/png\") {\n      uint8Array = changePngDpi(uint8Array, dpi);\n    } else if (type === \"image/jpeg\") {\n      uint8Array = changeJpegDpi(uint8Array, dpi);\n    }\n    log.timeEnd(\"canvas to blob\");\n    return new Blob([uint8Array, blob.slice(33)], { type });\n  }\n  log.timeEnd(\"canvas to blob\");\n  return blob;\n}\n\nasync function domToDataUrl(node, options) {\n  const context = await orCreateContext(node, options);\n  const { log, quality, type, dpi } = context;\n  const canvas = await domToCanvas(context);\n  log.time(\"canvas to data url\");\n  let dataUrl = canvas.toDataURL(type, quality);\n  if ([\"image/png\", \"image/jpeg\"].includes(type) && dpi && SUPPORT_ATOB && SUPPORT_BTOA) {\n    const [format, body] = dataUrl.split(\",\");\n    let headerLength = 0;\n    let overwritepHYs = false;\n    if (type === \"image/png\") {\n      const b64Index = detectPhysChunkFromDataUrl(body);\n      if (b64Index >= 0) {\n        headerLength = Math.ceil((b64Index + 28) / 3) * 4;\n        overwritepHYs = true;\n      } else {\n        headerLength = 33 / 3 * 4;\n      }\n    } else if (type === \"image/jpeg\") {\n      headerLength = 18 / 3 * 4;\n    }\n    const stringHeader = body.substring(0, headerLength);\n    const restOfData = body.substring(headerLength);\n    const headerBytes = window.atob(stringHeader);\n    const uint8Array = new Uint8Array(headerBytes.length);\n    for (let i = 0; i < uint8Array.length; i++) {\n      uint8Array[i] = headerBytes.charCodeAt(i);\n    }\n    const finalArray = type === \"image/png\" ? changePngDpi(uint8Array, dpi, overwritepHYs) : changeJpegDpi(uint8Array, dpi);\n    const base64Header = window.btoa(String.fromCharCode(...finalArray));\n    dataUrl = [format, \",\", base64Header, restOfData].join(\"\");\n  }\n  log.timeEnd(\"canvas to data url\");\n  return dataUrl;\n}\n\nasync function domToSvg(node, options) {\n  const context = await orCreateContext(node, options);\n  const { width, height, ownerDocument } = context;\n  const dataUrl = await domToDataUrl(context);\n  const svg = createSvg(width, height, ownerDocument);\n  const svgImage = svg.ownerDocument.createElementNS(svg.namespaceURI, \"image\");\n  svgImage.setAttributeNS(null, \"href\", dataUrl);\n  svgImage.setAttributeNS(null, \"height\", \"100%\");\n  svgImage.setAttributeNS(null, \"width\", \"100%\");\n  svg.appendChild(svgImage);\n  return svgToDataUrl(svg, context.isEnable(\"removeControlCharacter\"));\n}\n\nasync function domToImage(node, options) {\n  const context = await orCreateContext(node, options);\n  const { ownerDocument, width, height, scale, type } = context;\n  const url = type === \"image/svg+xml\" ? await domToSvg(context) : await domToDataUrl(context);\n  const image = createImage(url, ownerDocument);\n  image.width = Math.floor(width * scale);\n  image.height = Math.floor(height * scale);\n  image.style.width = `${width}px`;\n  image.style.height = `${height}px`;\n  return image;\n}\n\nasync function domToJpeg(node, options) {\n  return domToDataUrl(\n    await orCreateContext(node, { ...options, type: \"image/jpeg\" })\n  );\n}\n\nasync function domToPixel(node, options) {\n  const context = await orCreateContext(node, options);\n  const canvas = await domToCanvas(context);\n  return canvas.getContext(\"2d\").getImageData(0, 0, canvas.width, canvas.height).data;\n}\n\nasync function domToPng(node, options) {\n  return domToDataUrl(\n    await orCreateContext(node, { ...options, type: \"image/png\" })\n  );\n}\n\nasync function domToWebp(node, options) {\n  return domToDataUrl(\n    await orCreateContext(node, { ...options, type: \"image/webp\" })\n  );\n}\n\nexport { createContext, destroyContext, domToBlob, domToCanvas, domToDataUrl, domToForeignObjectSvg, domToImage, domToJpeg, domToPixel, domToPng, domToSvg, domToWebp, loadMedia, waitUntilLoad };\n","import { domToPng } from 'modern-screenshot';\r\n/**\r\n * Downloads an image of a specified HTML element as a PNG file.\r\n *\r\n * Uses `modern-screenshot` to capture the content of the `node` and converts it to a downloadable PNG image.\r\n * It removes elements with the class `undp-viz-download-button` from the clone to prevent them from appearing in the screenshot.\r\n *\r\n * @param node - The HTMLElement to capture and convert into an image.\r\n * @param filename - The desired filename for the downloaded image (without extension).\r\n *\r\n * @example\r\n * const element = document.getElementById('myElement');\r\n * imageDownload(element, 'screenshot');\r\n */\r\n\r\nexport function imageDownload(node: HTMLElement, filename: string) {\r\n  domToPng(node, {\r\n    quality: 1,\r\n    scale: 2,\r\n    style: { margin: '0' },\r\n    features: {\r\n      copyScrollbar: false,\r\n    },\r\n    filter: (node) => {\r\n      if (node instanceof Element) {\r\n        return (\r\n          !node.classList.contains('undp-viz-download-button') &&\r\n          !node.classList.contains('undp-viz-zoom-buttons')\r\n        );\r\n      }\r\n      return true; // Include non-Element nodes\r\n    },\r\n  })\r\n    .then((dataUrl: string) => {\r\n      const link = document.createElement('a');\r\n      link.download = `${filename}.png`;\r\n      link.href = dataUrl;\r\n      link.click();\r\n    })\r\n    .catch((error) => {\r\n      console.error('Error generating image:', error);\r\n    });\r\n}\r\n"],"x_google_ignoreList":[0],"mappings":"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"}