@zumer/snapdom 1.7.1 → 1.9.3-next-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,15 +1,15 @@
1
- (()=>{var R=new Map,T=new Map,x=new Map,I=new Map,k=new Map,N=new WeakMap;var ce=["div","span","p","a","img","ul","li","button","input","select","textarea","label","section","article","header","footer","nav","main","aside","h1","h2","h3","h4","h5","h6","svg","path","circle","rect","line","g","table","thead","tbody","tr","td","th"];function H(){for(let e of ce)z(e)}function z(e){if(I.has(e))return I.get(e);if(new Set(["script","style","meta","link","noscript","template"]).has(e)){let s={};return I.set(e,s),s}let o=document.getElementById("snapdom-sandbox");o||(o=document.createElement("div"),o.id="snapdom-sandbox",o.style.position="absolute",o.style.left="-9999px",o.style.top="-9999px",o.style.width="0",o.style.height="0",o.style.overflow="hidden",document.body.appendChild(o));let r=document.createElement(e);r.style.all="initial",o.appendChild(r);let t=getComputedStyle(r),a={};for(let s of t)a[s]=t.getPropertyValue(s);return o.removeChild(r),I.set(e,a),a}function M(e,n,o=!1){let r=[],t=z(n);for(let[a,s]of Object.entries(e))if(!o)s&&r.push(`${a}:${s}`);else{let i=t[a];s&&s!==i&&r.push(`${a}:${s}`)}return r.sort().join(";")}function Y(e){let n=new Set;return e.nodeType!==Node.ELEMENT_NODE&&e.nodeType!==Node.DOCUMENT_FRAGMENT_NODE?[]:(e.tagName&&n.add(e.tagName.toLowerCase()),typeof e.querySelectorAll=="function"&&e.querySelectorAll("*").forEach(o=>n.add(o.tagName.toLowerCase())),Array.from(n))}function K(e){let n=new Map;for(let r of e){let t=I.get(r);if(!t)continue;let a=Object.entries(t).map(([s,i])=>`${s}:${i};`).sort().join("");n.has(a)||n.set(a,[]),n.get(a).push(r)}let o="";for(let[r,t]of n.entries())o+=`${t.join(",")} { ${r} }
2
- `;return o}function J(e){let n=new Set(e.values()),o=new Map,r=1;for(let t of n)o.set(t,`c${r++}`);return o}function L(e,{fast:n=!1}={}){if(n)return e();"requestIdleCallback"in window?requestIdleCallback(e,{timeout:50}):setTimeout(e,1)}function U(e,n=null){if(!(e instanceof Element))return window.getComputedStyle(e,n);let o=N.get(e);if(o||(o=new Map,N.set(e,o)),!o.has(n)){let r=window.getComputedStyle(e,n);o.set(n,r)}return o.get(n)}function X(e){let n=e.replace(/^['"]|['"]$/g,"");if(n.startsWith("\\"))try{return String.fromCharCode(parseInt(n.replace("\\",""),16))}catch{return n}return n}function $(e){let n=e.indexOf("url(");if(n===-1)return null;let o=e.slice(n+4).trim();return o.endsWith(")")&&(o=o.slice(0,-1).trim()),(o.startsWith('"')&&o.endsWith('"')||o.startsWith("'")&&o.endsWith("'"))&&(o=o.slice(1,-1)),o}function P(e){return[/font\s*awesome/i,/material\s*icons/i,/ionicons/i,/glyphicons/i,/feather/i,/bootstrap\s*icons/i,/remix\s*icons/i,/heroicons/i].some(o=>o.test(e))}function S(e,n=3e3,o="anonymous"){return R.has(e)?Promise.resolve(R.get(e)):new Promise((r,t)=>{let a=setTimeout(()=>{t(new Error("Image load timed out"))},n),s=new Image;s.crossOrigin=o,s.onload=async()=>{clearTimeout(a);try{await s.decode();let i=document.createElement("canvas");i.width=s.width,i.height=s.height,i.getContext("2d").drawImage(s,0,0,i.width,i.height);try{let l=i.toDataURL("image/png");R.set(e,l),r(l)}catch{t(new Error("CORS restrictions prevented image capture"))}}catch(i){t(i)}},s.onerror=i=>{clearTimeout(a),t(new Error("Failed to load image: "+(i.message||"Unknown error")))},s.src=e})}function O(e){let n={};for(let o of e)n[o]=e.getPropertyValue(o);return n}function B(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}function _(e,n,o,r,t){if(e.tagName==="STYLE")return;r.has(e)||r.set(e,U(e));let a=r.get(e),s=O(a),i=e.tagName?.toLowerCase()||"div",c=M(s,i,t);o.set(n,c)}function D(e,n,o,r,t){if(e.nodeType===Node.ELEMENT_NODE&&e.getAttribute("data-capture")==="exclude"){let i=document.createElement("div"),c=e.getBoundingClientRect();return i.style.cssText=`display: inline-block; width: ${c.width}px; height: ${c.height}px; visibility: hidden;`,i}if(e.tagName==="IFRAME"){let i=document.createElement("div");return i.textContent="",i.style.cssText=`width: ${e.offsetWidth}px; height: ${e.offsetHeight}px; background: repeating-linear-gradient(45deg, #ddd, #ddd 5px, #f9f9f9 5px, #f9f9f9 10px);display: flex;align-items: center;justify-content: center;font-size: 12px;color: #555; border: 1px solid #aaa;`,i}if(e.nodeType===Node.ELEMENT_NODE&&e.getAttribute("data-capture")==="placeholder"){let i=e.cloneNode(!1);r.set(i,e),_(e,i,n,o,t);let c=document.createElement("div");return c.textContent=e.getAttribute("data-placeholder-text")||"",c.style.cssText="color: #666;font-size: 12px;text-align: center;line-height: 1.4;padding: 0.5em;box-sizing: border-box;",i.appendChild(c),i}if(e.tagName==="CANVAS"){let i=e.toDataURL(),c=document.createElement("img");return c.src=i,c.width=e.width,c.height=e.height,c.style.display="inline-block",c.style.width=`${e.width}px`,c.style.height=`${e.height}px`,c}if(e.nodeType===Node.TEXT_NODE){if(e.parentElement?.shadowRoot){let i=e.parentElement.tagName.toLowerCase();if(customElements.get(i))return null}return e.cloneNode(!0)}if(e.nodeType!==Node.ELEMENT_NODE)return e.cloneNode(!0);let a=e.cloneNode(!1);r.set(a,e),e instanceof HTMLInputElement?(a.value=e.value,a.setAttribute("value",e.value),e.checked!==void 0&&(a.checked=e.checked,e.checked&&a.setAttribute("checked",""))):e instanceof HTMLTextAreaElement?(a.value=e.value,a.textContent=e.value):e instanceof HTMLSelectElement&&(a.value=e.value,Array.from(a.options).forEach(i=>{i.value===e.value?i.setAttribute("selected",""):i.removeAttribute("selected")})),_(e,a,n,o,t);let s=document.createDocumentFragment();if(e.childNodes.forEach(i=>{let c=D(i,n,o,r,t);c&&s.appendChild(c)}),a.appendChild(s),e.shadowRoot){let i=Array.from(e.shadowRoot.children).filter(l=>l.tagName!=="STYLE").map(l=>D(l,n,o,r)).filter(Boolean),c=document.createDocumentFragment();i.forEach(l=>c.appendChild(l)),a.appendChild(c)}return a}async function G(e,n,o,r=32,t="#000"){n=n.replace(/^['"]+|['"]+$/g,"");let a=window.devicePixelRatio||1,i=document.createElement("canvas").getContext("2d");i.font=o?`${o} ${r}px "${n}"`:`${r}px "${n}"`;let c=i.measureText(e),l=c.actualBoundingBoxAscent||r*.8,d=c.actualBoundingBoxDescent||r*.2,h=l+d,f=c.width,p=document.createElement("canvas");p.width=Math.ceil(f*a),p.height=Math.ceil(h*a);let m=p.getContext("2d");return m.scale(a,a),m.font=i.font,m.textAlign="left",m.textBaseline="alphabetic",m.fillStyle=t,m.fillText(e,0,l),p.toDataURL()}async function W({ignoreIconFonts:e=!0,preCached:n=!1}={}){let o=Array.from(document.querySelectorAll('link[rel="stylesheet"]')).filter(t=>t.href),r="";for(let t of o)try{let s=await(await fetch(t.href)).text();if(e&&(P(t.href)||P(s)))continue;let i=/url\(([^)]+)\)/g,c=await Promise.all(Array.from(s.matchAll(i)).map(async d=>{let h=$(d[0]);if(!h)return null;let f=h;f.startsWith("http")||(f=new URL(f,t.href).href);try{f=encodeURI(f)}catch{console.warn("[snapdom] Failed to encode font URL:",f)}if(e&&P(f))return null;if(x.has(f))return{original:d[0],inlined:`url(${x.get(f)})`};try{let m=await(await fetch(f)).blob(),g=await new Promise(y=>{let C=new FileReader;C.onload=()=>y(C.result),C.readAsDataURL(m)});return x.set(f,g),{original:d[0],inlined:`url(${g})`}}catch{return console.warn("[snapdom] Failed to fetch font:",f),null}})),l=s;for(let d of c)d&&(l=l.replace(d.original,d.inlined));r+=l+`
3
- `}catch{console.warn("[snapdom] Failed to fetch CSS:",t.href)}for(let t of document.styleSheets)try{if(!t.href||o.every(a=>a.href!==t.href)){for(let a of t.cssRules)if(a.type===CSSRule.FONT_FACE_RULE){let s=a.style.getPropertyValue("src");if(!s)continue;let i=/url\(([^)]+)\)/g,c=s,l=Array.from(s.matchAll(i));for(let d of l){let h=d[1].trim().replace(/^["']|["']$/g,"");if(!h)continue;let f=h;if(!f.startsWith("http")&&!f.startsWith("data:")&&(f=new URL(f,t.href||location.href).href),!(e&&P(f))){if(x.has(f)){c=c.replace(d[0],`url(${x.get(f)})`);continue}try{let m=await(await fetch(f)).blob(),g=await new Promise(y=>{let C=new FileReader;C.onload=()=>y(C.result),C.readAsDataURL(m)});x.set(f,g),c=c.replace(d[0],`url(${g})`)}catch{console.warn("[snapdom] Failed to fetch font URL:",f)}}}r+=`@font-face {
4
- font-family: ${a.style.getPropertyValue("font-family")};
5
- src: ${c};
6
- font-style: ${a.style.getPropertyValue("font-style")||"normal"};
7
- font-weight: ${a.style.getPropertyValue("font-weight")||"normal"};
1
+ (()=>{var Ft=Object.defineProperty;var X=Object.getOwnPropertySymbols;var lt=Object.prototype.hasOwnProperty,ft=Object.prototype.propertyIsEnumerable;var ct=(t,e,o)=>e in t?Ft(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,D=(t,e)=>{for(var o in e||(e={}))lt.call(e,o)&&ct(t,o,e[o]);if(X)for(var o of X(e))ft.call(e,o)&&ct(t,o,e[o]);return t};var dt=(t,e)=>{var o={};for(var i in t)lt.call(t,i)&&e.indexOf(i)<0&&(o[i]=t[i]);if(t!=null&&X)for(var i of X(t))e.indexOf(i)<0&&ft.call(t,i)&&(o[i]=t[i]);return o};var p=(t,e,o)=>new Promise((i,r)=>{var n=a=>{try{c(o.next(a))}catch(d){r(d)}},f=a=>{try{c(o.throw(a))}catch(d){r(d)}},c=a=>a.done?i(a.value):Promise.resolve(a.value).then(n,f);c((o=o.apply(t,e)).next())});var R=new Map,M=new Map,$=new Map,O=new Map,W=new Map,Z=new WeakMap,A=new Set;var Bt=["div","span","p","a","img","ul","li","button","input","select","textarea","label","section","article","header","footer","nav","main","aside","h1","h2","h3","h4","h5","h6","svg","path","circle","rect","line","g","table","thead","tbody","tr","td","th"];function ht(){for(let t of Bt)mt(t)}function mt(t){if(O.has(t))return O.get(t);if(new Set(["script","style","meta","link","noscript","template"]).has(t)){let f={};return O.set(t,f),f}let o=document.getElementById("snapdom-sandbox");o||(o=document.createElement("div"),o.id="snapdom-sandbox",o.style.position="absolute",o.style.left="-9999px",o.style.top="-9999px",o.style.width="0",o.style.height="0",o.style.overflow="hidden",document.body.appendChild(o));let i=document.createElement(t);i.style.all="initial",o.appendChild(i);let r=getComputedStyle(i),n={};for(let f of r)n[f]=r.getPropertyValue(f);return o.removeChild(i),O.set(t,n),n}function z(t,e,o=!1){let i=[],r=mt(e);for(let[n,f]of Object.entries(t))if(!o)f&&i.push(`${n}:${f}`);else{let c=r[n];f&&f!==c&&i.push(`${n}:${f}`)}return i.sort().join(";")}function ut(t){let e=new Set;return t.nodeType!==Node.ELEMENT_NODE&&t.nodeType!==Node.DOCUMENT_FRAGMENT_NODE?[]:(t.tagName&&e.add(t.tagName.toLowerCase()),typeof t.querySelectorAll=="function"&&t.querySelectorAll("*").forEach(o=>e.add(o.tagName.toLowerCase())),Array.from(e))}function pt(t){let e=new Map;for(let i of t){let r=O.get(i);if(!r)continue;let n=Object.entries(r).map(([f,c])=>`${f}:${c};`).sort().join("");e.has(n)||e.set(n,[]),e.get(n).push(i)}let o="";for(let[i,r]of e.entries())o+=`${r.join(",")} { ${i} }
2
+ `;return o}function gt(t){let e=new Set(t.values()),o=new Map,i=1;for(let r of e)o.set(r,`c${i++}`);return o}function j(o){return p(this,arguments,function*(t,e={}){let i=t.match(/url\(["']?(.*?)["']?\)/),r=i==null?void 0:i[1],n=/^((repeating-)?(linear|radial|conic)-gradient)\(/i.test(t);if(r){let f=G(r);if(M.has(f))return e.skipInline?void 0:`url(${M.get(f)})`;{let c=yield F(f,{useProxy:e.useProxy});return M.set(f,c),e.skipInline?void 0:`url("${c}")`}}return t})}function V(t,{fast:e=!1}={}){if(e)return t();"requestIdleCallback"in window?requestIdleCallback(t,{timeout:50}):setTimeout(t,1)}function U(t,e=null){if(!(t instanceof Element))return window.getComputedStyle(t,e);let o=Z.get(t);if(o||(o=new Map,Z.set(t,o)),!o.has(e)){let i=window.getComputedStyle(t,e);o.set(e,i)}return o.get(e)}function yt(t){let e=t.replace(/^['"]|['"]$/g,"");if(e.startsWith("\\"))try{return String.fromCharCode(parseInt(e.replace("\\",""),16))}catch(o){return e}return e}function Y(t){let e=t.indexOf("url(");if(e===-1)return null;let o=t.slice(e+4).trim();return o.endsWith(")")&&(o=o.slice(0,-1).trim()),(o.startsWith('"')&&o.endsWith('"')||o.startsWith("'")&&o.endsWith("'"))&&(o=o.slice(1,-1)),o}function F(t,{timeout:e=3e3,useProxy:o=""}={}){function i(a){try{return new URL(a,window.location.href).origin===window.location.origin?"use-credentials":"anonymous"}catch(d){return"anonymous"}}function r(a){return p(this,null,function*(){let d=l=>fetch(l,{mode:"cors",credentials:i(l)==="use-credentials"?"include":"omit"}).then(s=>s.blob()).then(s=>new Promise((h,m)=>{let u=new FileReader;u.onloadend=()=>{let g=u.result;if(typeof g!="string"||!g.startsWith("data:image/")){m(new Error("Invalid image data URL"));return}h(g)},u.onerror=()=>m(new Error("FileReader error")),u.readAsDataURL(s)}));try{return yield d(a)}catch(l){if(o&&typeof o=="string"){let s=o.replace(/\/$/,"")+G(a);try{return yield d(s)}catch(h){throw console.error(`[SnapDOM - fetchImage] Proxy fallback failed for: ${a}`),new Error("CORS restrictions prevented image capture (even via proxy)")}}else throw console.error(`[SnapDOM - fetchImage] No valid proxy URL provided for fallback: ${a}`),new Error("Fetch fallback failed and no proxy provided")}})}let n=i(t);return console.log(`[SnapDOM - fetchImage] Start loading image: ${t} with crossOrigin=${n}`),R.has(t)?(console.log(`[SnapDOM - fetchImage] Cache hit for: ${t}`),Promise.resolve(R.get(t))):t.startsWith("data:image/")?(R.set(t,t),Promise.resolve(t)):/\.svg(\?.*)?$/i.test(t)?p(null,null,function*(){try{let d=yield(yield fetch(t,{mode:"cors",credentials:n==="use-credentials"?"include":"omit"})).text(),l=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(d)}`;return R.set(t,l),l}catch(a){return r(t)}}):new Promise((a,d)=>{let l=setTimeout(()=>{console.log(`[SnapDOM - fetchImage] Timeout after ${e}ms for image: ${t}`),d(new Error("Image load timed out"))},e),s=new Image;s.crossOrigin=n,s.onload=()=>p(null,null,function*(){clearTimeout(l);try{yield s.decode();let h=document.createElement("canvas");h.width=s.width,h.height=s.height,h.getContext("2d").drawImage(s,0,0,h.width,h.height);let u=h.toDataURL("image/png");R.set(t,u),a(u)}catch(h){try{let m=yield r(t);R.set(t,m),a(m)}catch(m){d(m)}}}),s.onerror=()=>p(null,null,function*(){clearTimeout(l),console.error(`[SnapDOM - fetchImage] Image failed to load: ${t}`);try{let h=yield r(t);R.set(t,h),a(h)}catch(h){d(h)}}),s.src=t})}function tt(t){let e={};for(let o of t)e[o]=t.getPropertyValue(o);return e}function K(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}function wt(t){if(!t||t==="none")return"";let e=t.replace(/translate[XY]?\([^)]*\)/g,"");return e=e.replace(/matrix\(([^)]+)\)/g,(o,i)=>{let r=i.split(",").map(n=>n.trim());return r.length!==6?`matrix(${i})`:(r[4]="0",r[5]="0",`matrix(${r.join(", ")})`)}),e=e.replace(/matrix3d\(([^)]+)\)/g,(o,i)=>{let r=i.split(",").map(n=>n.trim());return r.length!==16?`matrix3d(${i})`:(r[12]="0",r[13]="0",`matrix3d(${r.join(", ")})`)}),e.trim().replace(/\s{2,}/g," ")}function G(t){if(/%[0-9A-Fa-f]{2}/.test(t))return t;try{return encodeURI(t)}catch(e){return t}}function _(t){let e=[],o=0,i=0;for(let r=0;r<t.length;r++){let n=t[r];n==="("&&o++,n===")"&&o--,n===","&&o===0&&(e.push(t.slice(i,r).trim()),i=r+1)}return e.push(t.slice(i).trim()),e}var et=new WeakMap,nt=new Map;function Dt(t){let e={};for(let o=0;o<t.length;o++){let i=t[o],r=t.getPropertyValue(i);(i==="background-image"||i==="content")&&r.includes("url(")&&!r.includes("data:")&&(r="none"),e[i]=r}return e}function ot(t,e,o,i,r){var l;if(t.tagName==="STYLE")return;i.has(t)||i.set(t,U(t));let n=i.get(t);if(!et.has(t)){let s=Dt(n);et.set(t,s)}let f=et.get(t),c=Object.entries(f).sort(([s],[h])=>s.localeCompare(h)).map(([s,h])=>`${s}:${h}`).join(";");if(nt.has(c)){o.set(e,nt.get(c));return}let a=((l=t.tagName)==null?void 0:l.toLowerCase())||"div",d=z(f,a,r);nt.set(c,d),o.set(e,d)}function Mt(t){return t.nodeType===Node.ELEMENT_NODE&&t.tagName==="SLOT"}function H(t,e,o,i,r,n={},f){var a,d;if(t.nodeType===Node.TEXT_NODE||t.nodeType!==Node.ELEMENT_NODE)return t.cloneNode(!0);if(t.getAttribute("data-capture")==="exclude"){let l=document.createElement("div"),s=t.getBoundingClientRect();return l.style.cssText=`display: inline-block; width: ${s.width}px; height: ${s.height}px; visibility: hidden;`,l}if(n.exclude&&Array.isArray(n.exclude))for(let l of n.exclude)try{if((a=t.matches)!=null&&a.call(t,l)){let s=document.createElement("div"),h=t.getBoundingClientRect();return s.style.cssText=`display: inline-block; width: ${h.width}px; height: ${h.height}px; visibility: hidden;`,s}}catch(s){console.warn(`Invalid selector in exclude option: ${l}`,s)}if(typeof n.filter=="function")try{if(!n.filter(t,f||t)){let l=document.createElement("div"),s=t.getBoundingClientRect();return l.style.cssText=`display: inline-block; width: ${s.width}px; height: ${s.height}px; visibility: hidden;`,l}}catch(l){console.warn("Error in filter function:",l)}if(t.tagName==="IFRAME"){let l=document.createElement("div");return l.textContent="",l.style.cssText=`width: ${t.offsetWidth}px; height: ${t.offsetHeight}px; background-image: repeating-linear-gradient(45deg, #ddd, #ddd 5px, #f9f9f9 5px, #f9f9f9 10px);display: flex;align-items: center;justify-content: center;font-size: 12px;color: #555; border: 1px solid #aaa;`,l}if(t.getAttribute("data-capture")==="placeholder"){let l=t.cloneNode(!1);i.set(l,t),ot(t,l,e,o,r);let s=document.createElement("div");return s.textContent=t.getAttribute("data-placeholder-text")||"",s.style.cssText="color: #666;font-size: 12px;text-align: center;line-height: 1.4;padding: 0.5em;box-sizing: border-box;",l.appendChild(s),l}if(t.tagName==="CANVAS"){let l=t.toDataURL(),s=document.createElement("img");return s.src=l,s.width=t.width,s.height=t.height,s.style.display="inline-block",s.style.width=t.style.width||`${t.width}px`,s.style.height=t.style.height||`${t.height}px`,s}let c=t.cloneNode(!1);if(i.set(c,t),t instanceof HTMLInputElement)c.value=t.value,c.setAttribute("value",t.value),t.checked!==void 0&&(c.checked=t.checked,t.checked&&c.setAttribute("checked",""));else if(t instanceof HTMLTextAreaElement){let l=t.getBoundingClientRect();c.textContent=t.value,c.style.width=`${l.width}px`,c.style.height=`${l.height}px`}else t instanceof HTMLSelectElement&&(c.value=t.value,Array.from(c.options).forEach(l=>{l.value===t.value?l.setAttribute("selected",""):l.removeAttribute("selected")}));if(ot(t,c,e,o,r),Mt(t)){let l=((d=t.assignedNodes)==null?void 0:d.call(t,{flatten:!0}))||[],s=l.length>0?l:Array.from(t.childNodes),h=document.createDocumentFragment();for(let m of s){let u=H(m,e,o,i,r,n,f||t);u&&h.appendChild(u)}return h}else if(!(t instanceof HTMLTextAreaElement)){let l=t.shadowRoot?t.shadowRoot.childNodes:t.childNodes;for(let s of l){let h=H(s,e,o,i,r,n,f||t);h&&c.appendChild(h)}if(t.shadowRoot&&t.childNodes.length>0&&!t.shadowRoot.querySelector("slot")){let s=document.createDocumentFragment();for(let h of t.childNodes){let m=H(h,e,o,i,r,n,f||t);m&&s.appendChild(m)}c.appendChild(s)}}return c}var Ot=[/font\s*awesome/i,/material\s*icons/i,/ionicons/i,/glyphicons/i,/feather/i,/bootstrap\s*icons/i,/remix\s*icons/i,/heroicons/i,/layui/i,/lucide/i],at=[];function xt(t){let e=Array.isArray(t)?t:[t];for(let o of e)o instanceof RegExp?at.push(o):typeof o=="string"?at.push(new RegExp(o,"i")):console.warn("[snapdom] Ignored invalid iconFont value:",o)}function T(t){let e=typeof t=="string"?t:"",o=[...Ot,...at];for(let i of o)if(i instanceof RegExp&&i.test(e))return!0;return!!(/icon/i.test(e)||/glyph/i.test(e)||/symbols/i.test(e)||/feather/i.test(e)||/fontawesome/i.test(e))}function bt(t,e,o,i=32,r="#000"){return p(this,null,function*(){e=e.replace(/^['"]+|['"]+$/g,"");let n=window.devicePixelRatio||1,c=document.createElement("canvas").getContext("2d");c.font=o?`${o} ${i}px "${e}"`:`${i}px "${e}"`;let a=c.measureText(t),d=a.actualBoundingBoxAscent||i*.8,l=a.actualBoundingBoxDescent||i*.2,s=d+l,h=a.width,m=document.createElement("canvas");m.width=Math.ceil(h*n),m.height=Math.ceil(s*n);let u=m.getContext("2d");return u.scale(n,n),u.font=c.font,u.textAlign="left",u.textBaseline="alphabetic",u.fillStyle=r,u.fillText(t,0,d),m.toDataURL()})}function Ct(t){return Array.from(document.styleSheets).some(e=>e.href===t)}function Wt(t){return new Promise(e=>{if(Ct(t))return e(null);let o=document.createElement("link");o.rel="stylesheet",o.href=t,o.setAttribute("data-snapdom","injected-import"),o.onload=()=>e(o),o.onerror=()=>e(null),document.head.appendChild(o)})}function J(){return p(this,arguments,function*({preCached:t=!1}={}){if($.has("fonts-embed-css")){if(t){let n=document.createElement("style");n.setAttribute("data-snapdom","embedFonts"),n.textContent=$.get("fonts-embed-css"),document.head.appendChild(n)}return $.get("fonts-embed-css")}let e=/@import\s+url\(["']?([^"')]+)["']?\)/g,o=[];for(let n of document.querySelectorAll("style")){let f=n.textContent||"",c=Array.from(f.matchAll(e));for(let a of c){let d=a[1];T(d)||Ct(d)||o.push(d)}}yield Promise.all(o.map(Wt));let i=Array.from(document.querySelectorAll('link[rel="stylesheet"]')).filter(n=>n.href),r="";for(let n of i)try{let c=yield(yield fetch(n.href)).text();if(T(n.href)||T(c))continue;let a=/url\((["']?)([^"')]+)\1\)/g,d=yield Promise.all(Array.from(c.matchAll(a)).map(s=>p(null,null,function*(){let h=Y(s[0]);if(!h)return null;let m=h;if(!m.startsWith("http")&&!m.startsWith("data:")&&(m=new URL(m,n.href).href),T(m))return null;if($.has(m))return A.add(m),{original:s[0],inlined:`url(${$.get(m)})`};if(A.has(m))return null;try{let g=yield(yield fetch(m)).blob(),y=yield new Promise(b=>{let w=new FileReader;w.onload=()=>b(w.result),w.readAsDataURL(g)});return $.set(m,y),A.add(m),{original:s[0],inlined:`url(${y})`}}catch(u){return console.warn("[snapdom] Failed to fetch font resource:",m),null}}))),l=c;for(let s of d)s&&(l=l.replace(s.original,s.inlined));r+=l+`
3
+ `}catch(f){console.warn("[snapdom] Failed to fetch CSS:",n.href)}for(let n of document.styleSheets)try{if(!n.href||i.every(f=>f.href!==n.href)){for(let f of n.cssRules)if(f.type===CSSRule.FONT_FACE_RULE){let c=f.style.getPropertyValue("src"),a=f.style.getPropertyValue("font-family");if(!c||T(a))continue;let d=/url\((["']?)([^"')]+)\1\)/g,l=c,s=Array.from(c.matchAll(d));for(let h of s){let m=h[2].trim();if(!m)continue;let u=m;if(!u.startsWith("http")&&!u.startsWith("data:")&&(u=new URL(u,n.href||location.href).href),!T(u)){if($.has(u)){A.add(u),l=l.replace(h[0],`url(${$.get(u)})`);continue}if(!A.has(u))try{let y=yield(yield fetch(u)).blob(),b=yield new Promise(w=>{let x=new FileReader;x.onload=()=>w(x.result),x.readAsDataURL(y)});$.set(u,b),A.add(u),l=l.replace(h[0],`url(${b})`)}catch(g){console.warn("[snapdom] Failed to fetch font URL:",u)}}}r+=`@font-face {
4
+ font-family: ${a};
5
+ src: ${l};
6
+ font-style: ${f.style.getPropertyValue("font-style")||"normal"};
7
+ font-weight: ${f.style.getPropertyValue("font-weight")||"normal"};
8
8
  }
9
- `}}}catch(a){console.warn("[snapdom] Cannot access stylesheet",t.href,a)}for(let t of document.fonts)if(t.family&&t.status==="loaded"&&t._snapdomSrc){let a=t._snapdomSrc;if(!a.startsWith("data:"))if(x.has(t._snapdomSrc))a=x.get(t._snapdomSrc);else try{let i=await(await fetch(t._snapdomSrc)).blob();a=await new Promise(c=>{let l=new FileReader;l.onload=()=>c(l.result),l.readAsDataURL(i)}),x.set(t._snapdomSrc,a)}catch{console.warn("[snapdom] Failed to fetch dynamic font src:",t._snapdomSrc);continue}r+=`@font-face {
10
- font-family: '${t.family}';
11
- src: url(${a});
12
- font-style: ${t.style||"normal"};
13
- font-weight: ${t.weight||"normal"};
9
+ `}}}catch(f){console.warn("[snapdom] Cannot access stylesheet",n.href,f)}for(let n of document.fonts)if(n.family&&n.status==="loaded"&&n._snapdomSrc){if(T(n.family))continue;let f=n._snapdomSrc;if(!f.startsWith("data:")){if($.has(n._snapdomSrc))f=$.get(n._snapdomSrc),A.add(n._snapdomSrc);else if(!A.has(n._snapdomSrc))try{let a=yield(yield fetch(n._snapdomSrc)).blob();f=yield new Promise(d=>{let l=new FileReader;l.onload=()=>d(l.result),l.readAsDataURL(a)}),$.set(n._snapdomSrc,f),A.add(n._snapdomSrc)}catch(c){console.warn("[snapdom] Failed to fetch dynamic font src:",n._snapdomSrc);continue}}r+=`@font-face {
10
+ font-family: '${n.family}';
11
+ src: url(${f});
12
+ font-style: ${n.style||"normal"};
13
+ font-weight: ${n.weight||"normal"};
14
14
  }
15
- `}if(r&&n){let t=document.createElement("style");t.setAttribute("data-snapdom","embedFonts"),t.textContent=r,document.head.appendChild(t)}return r}async function V(e,n,o,r,t,a=!1){if(!(e instanceof Element)||!(n instanceof Element))return;for(let c of["::before","::after"])try{let l=U(e,c);if(!l)continue;let d=l.getPropertyValue("content"),h=l.getPropertyValue("background-image"),f=d&&d!=="none"&&d!=='""'&&d!=="''",p=h&&h.startsWith("url(");if(f||p){let m=l.getPropertyValue("font-family"),g=parseInt(l.getPropertyValue("font-size"))||32,y=parseInt(l.getPropertyValue("font-weight"))||!1,C=l.getPropertyValue("color")||"#000",w=document.createElement("span");w.dataset.snapdomPseudo=c;let A=O(l),F=M(A,"span",t);o.set(w,F);let j=m&&/font.*awesome|material|bootstrap|glyphicons|ionicons|remixicon|simple-line-icons|octicons|feather|typicons|weathericons/i.test(m),E=X(d);if(!a&&j&&E.length===1){let b=document.createElement("img");b.src=await G(E,m,y,g,C),b.style="display:block;width:100%;height:100%;object-fit:contain;",w.appendChild(b)}else if(E.startsWith("url(")){let b=$(E);if(b)try{let v=document.createElement("img"),ie=await S(encodeURI(b));v.src=ie,v.style="display:block;width:100%;height:100%;object-fit:contain;",w.appendChild(v)}catch(v){console.error(`[snapdom] Error in pseudo ${c} for`,e,v)}}else!j&&E&&E!=="none"&&(w.textContent=E);if(p&&h){let b=$(h);if(b)try{let v=await S(encodeURI(b));w.style.backgroundImage=`url(${v})`}catch(v){console.warn(`[snapdom] Failed to inline background-image for ${c}`,v)}}if(!(w.childNodes.length>0||w.textContent&&w.textContent.trim()!=="")&&!p)continue;c==="::before"?n.insertBefore(w,n.firstChild):n.appendChild(w)}}catch(l){console.warn(`[snapdom] Failed to capture ${c} for`,e,l)}let s=Array.from(e.children),i=Array.from(n.children).filter(c=>!c.dataset.snapdomPseudo);for(let c=0;c<Math.min(s.length,i.length);c++)await V(s[c],i[c],o,r,t,a)}async function Q(e,n=!1,o=!1){let r=new Map,t=new WeakMap,a=new Map,s;try{s=D(e,r,t,a,n)}catch(c){throw console.warn("deepClone failed:",c),c}try{await V(e,s,r,t,n,o)}catch(c){console.warn("inlinePseudoElements failed:",c)}let i="";if(n){let c=J(r);i=Array.from(c.entries()).map(([l,d])=>`.${d}{${l}}`).join("");for(let[l,d]of r.entries()){if(l.tagName==="STYLE")continue;let h=c.get(d);h&&l.classList.add(h);let f=l.style?.backgroundImage;l.removeAttribute("style"),f&&f!=="none"&&(l.style.backgroundImage=f)}}else for(let[c,l]of r.entries())c.tagName!=="STYLE"&&c.setAttribute("style",l.replace(/;/g,"; "));for(let[c,l]of a.entries()){let d=l.scrollLeft,h=l.scrollTop;if((d||h)&&c instanceof HTMLElement){c.style.overflow="hidden",c.style.scrollbarWidth="none",c.style.msOverflowStyle="none";let p=document.createElement("div");for(p.style.transform=`translate(${-d}px, ${-h}px)`,p.style.willChange="transform",p.style.display="inline-block",p.style.width="100%";c.firstChild;)p.appendChild(c.firstChild);c.appendChild(p)}}return{clone:s,classCSS:i,styleCache:t}}async function Z(e,n={}){let o=Array.from(e.querySelectorAll("img")),r=async t=>{let a=t.src;try{let s=n.crossOrigin?n.crossOrigin(a):"anonymous",i=await S(a,3e3,s);t.src=i,t.width||(t.width=t.naturalWidth||100),t.height||(t.height=t.naturalHeight||100)}catch{let s=document.createElement("div");s.style=`width: ${t.width||100}px; height: ${t.height||100}px; background: #ccc; display: inline-block; text-align: center; line-height: ${t.height||100}px; color: #666; font-size: 12px;`,s.innerText="img",t.replaceWith(s)}};for(let t=0;t<o.length;t+=4){let a=o.slice(t,t+4).map(r);await Promise.allSettled(a)}}async function ee(e,n,o,r={}){let t=[[e,n]];for(;t.length;){let[a,s]=t.shift(),i=o.get(a)||U(a);o.has(a)||o.set(a,i);let l=i.getPropertyValue("background-image").split(",");for(let f=0;f<l.length;f++){let p=$(l[f]);if(p)try{let m=encodeURI(p),g;if(T.has(m))g=T.get(m);else{let y=r.crossOrigin?r.crossOrigin(m):"anonymous";g=await S(m,3e3,y),T.set(m,g)}l[f]=`url(${g})`}catch{l[f]="none"}}l.some(f=>f.includes("url("))&&(s.style.backgroundImage=l.join(","));let d=Array.from(a.children),h=Array.from(s.children);for(let f=0;f<Math.min(d.length,h.length);f++)t.push([d[f],h[f]])}}async function te(e,n={}){if(!e)throw new Error("Element cannot be null or undefined");let{compress:o=!0,embedFonts:r=!1,fast:t=!0,scale:a=1}=n,s,i,c,l="",d="",h,f;if({clone:s,classCSS:i,styleCache:c}=await Q(e,o,r),await new Promise(m=>{L(async()=>{await Z(s,n),m()},{fast:t})}),await new Promise(m=>{L(async()=>{await ee(e,s,c,n),m()},{fast:t})}),r&&await new Promise(m=>{L(async()=>{l=await W({ignoreIconFonts:!r}),m()},{fast:t})}),o){let m=Y(s).sort(),g=m.join(",");k.has(g)?d=k.get(g):await new Promise(y=>{L(()=>{d=K(m),k.set(g,d),y()},{fast:t})})}await new Promise(m=>{L(()=>{let g=e.getBoundingClientRect(),y=Math.ceil(g.width),C=Math.ceil(g.height);s.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),s.style.transformOrigin="top left",a!==1&&B()&&(s.style.scale=`${a}`);let w="http://www.w3.org/2000/svg",A=document.createElementNS(w,"foreignObject");A.setAttribute("width","100%"),A.setAttribute("height","100%");let F=document.createElement("style");F.textContent=d+l+"svg{overflow:visible;}"+i,A.appendChild(F),A.appendChild(s);let E=new XMLSerializer().serializeToString(A);f=`<svg xmlns="${w}" width="${y}" height="${C}" viewBox="0 0 ${y} ${C}">`+E+"</svg>",h=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(f)}`,m()},{fast:t})});let p=document.getElementById("snapdom-sandbox");return p&&p.style.position==="absolute"&&p.remove(),h}async function le(e,{dpr:n=1,scale:o=1}){let r=new Image;return r.src=e,await r.decode(),B?(r.width=r.width*o,r.height=r.height*o):(r.width=r.width/o,r.height=r.height/o),r}async function ne(e,{dpr:n=1,scale:o=1}={}){let r=new Image;r.src=e,await r.decode();let t=document.createElement("canvas"),a=r.width*o,s=r.height*o;t.width=Math.ceil(a*n),t.height=Math.ceil(s*n);let i=t.getContext("2d");return i.scale(n,n),i.drawImage(r,0,0,a,s),t.style.width=`${a}px`,t.style.height=`${s}px`,t}async function oe(e){let n=decodeURIComponent(e.split(",")[1]);return new Blob([n],{type:"image/svg+xml"})}async function ae(e,{dpr:n=1,scale:o=1},r){let t=await ne(e,{dpr:n,scale:o});if(!r)return t;let a=document.createElement("canvas");a.width=t.width,a.height=t.height;let s=a.getContext("2d");return s.fillStyle=r,s.fillRect(0,0,a.width,a.height),s.drawImage(t,0,0),a}async function q(e,{dpr:n=1,scale:o=1,backgroundColor:r="#fff",quality:t},a="png"){let s=await ae(e,{dpr:n,scale:o},r),i=new Image;return i.src=s.toDataURL(`image/${a}`,t),await i.decode(),i.style.width=`${s.width/n}px`,i.style.height=`${s.height/n}px`,i}async function fe(e,{dpr:n=1,scale:o=1,backgroundColor:r="#fff",format:t="png",filename:a="capture"}={}){if(t==="svg"){let f=await oe(e),p=URL.createObjectURL(f),m=document.createElement("a");m.href=p,m.download=`${a}.svg`,m.click(),URL.revokeObjectURL(p);return}let s=["jpg","jpeg","webp"].includes(t)?"#fff":void 0,c=await ae(e,{dpr:n,scale:o},r??s),l={jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",webp:"image/webp"}[t]||"image/png",d=c.toDataURL(l),h=document.createElement("a");h.href=d,h.download=`${a}.${t}`,h.click()}async function u(e,n={}){if(n={scale:1,...n},!e)throw new Error("Element cannot be null or undefined");return await u.capture(e,n)}u.capture=async(e,n={})=>{let o=await te(e,n),r=window.devicePixelRatio||1,t=n.scale||1;return{url:o,options:n,toRaw:()=>o,toImg:()=>le(o,{dpr:r,scale:t}),toCanvas:()=>ne(o,{dpr:r,scale:t}),toBlob:()=>oe(o),toPng:a=>q(o,{dpr:r,scale:t,...a},"png"),toJpg:a=>q(o,{dpr:r,scale:t,...a},"jpeg"),toWebp:a=>q(o,{dpr:r,scale:t,...a},"webp"),download:({format:a="png",filename:s="capture",backgroundColor:i}={})=>fe(o,{dpr:r,scale:t,backgroundColor:i,format:a,filename:s})}};u.toRaw=async(e,n)=>(await u.capture(e,n)).toRaw();u.toImg=async(e,n)=>(await u.capture(e,n)).toImg();u.toCanvas=async(e,n)=>(await u.capture(e,n)).toCanvas();u.toBlob=async(e,n)=>(await u.capture(e,n)).toBlob();u.toPng=async(e,n)=>(await u.capture(e,n)).toPng(n);u.toJpg=async(e,n)=>(await u.capture(e,n)).toJpg(n);u.toWebp=async(e,n)=>(await u.capture(e,n)).toWebp(n);u.download=async(e,n={})=>{let{format:o="png",filename:r="capture",backgroundColor:t,...a}=n;return await(await u.capture(e,a)).download({format:o,filename:r,backgroundColor:t})};async function re(e=document,n={}){let{embedFonts:o=!0,reset:r=!1,crossOrigin:t}=n;if(r){R.clear(),T.clear(),x.clear(),k.clear(),N.clear();return}await document.fonts.ready,H();let a=[],s=[];e?.querySelectorAll&&(a=Array.from(e.querySelectorAll("img[src]")),s=Array.from(e.querySelectorAll("*")));let i=[];for(let c of a){let l=c.src;if(!R.has(l)){let d=t?t(l):"anonymous";i.push(S(l,3e3,d).then(h=>R.set(l,h)).catch(()=>{}))}}for(let c of s){let l=getComputedStyle(c).backgroundImage,d=$(l);if(d&&!T.has(d)){let h=t?t(d):"anonymous";i.push(S(d,3e3,h).then(f=>T.set(d,f)).catch(()=>{}))}}o&&await W({ignoreIconFonts:!o,preCached:!0}),await Promise.all(i)}window.snapdom=u;window.preCache=re;})();
15
+ `}if(r&&($.set("fonts-embed-css",r),t)){let n=document.createElement("style");n.setAttribute("data-snapdom","embedFonts"),n.textContent=r,document.head.appendChild(n)}return r})}function rt(t,e,o,i,r,n=!1,f){return p(this,null,function*(){if(!(t instanceof Element)||!(e instanceof Element))return;for(let d of["::before","::after","::first-letter"])try{let l=U(t,d);if(!l||typeof l[Symbol.iterator]!="function")continue;if(d==="::first-letter"){let b=getComputedStyle(t);if(!(l.color!==b.color||l.fontSize!==b.fontSize||l.fontWeight!==b.fontWeight))continue;let x=Array.from(e.childNodes).find(E=>E.nodeType===Node.TEXT_NODE&&E.textContent&&E.textContent.trim().length>0);if(!x)continue;let N=x.textContent,C=N.match(/^([^\p{L}\p{N}\s]*[\p{L}\p{N}](?:['’])?)/u),k=C==null?void 0:C[0],B=N.slice((k==null?void 0:k.length)||0);if(!k||/[\uD800-\uDFFF]/.test(k))continue;let v=document.createElement("span");v.textContent=k,v.dataset.snapdomPseudo="::first-letter";let I=tt(l),Q=z(I,"span",r);o.set(v,Q);let q=document.createTextNode(B);e.replaceChild(q,x),e.insertBefore(v,q);continue}let s=l.getPropertyValue("content"),h=l.getPropertyValue("background-image"),m=l.getPropertyValue("background-color"),u=s!=="none",g=h&&h!=="none",y=m&&m!=="transparent"&&m!=="rgba(0, 0, 0, 0)";if(u||g||y){let b=l.getPropertyValue("font-family"),w=parseInt(l.getPropertyValue("font-size"))||32,x=parseInt(l.getPropertyValue("font-weight"))||!1,N=l.getPropertyValue("color")||"#000",C=document.createElement("span");C.dataset.snapdomPseudo=d;let k=tt(l),B=z(k,"span",r);o.set(C,B);let v=T(b),I=yt(s);if(v&&I.length===1){let E=document.createElement("img");E.src=yield bt(I,b,x,w,N),E.style=`width:${w}px;height:auto;object-fit:contain;`,C.appendChild(E)}else if(I.startsWith("url(")){let E=Y(I);if(E&&E.trim()!=="")try{let P=document.createElement("img"),L=yield F(G(E,{useProxy:f}));P.src=L,P.style=`width:${w}px;height:auto;object-fit:contain;`,C.appendChild(P)}catch(P){console.error(`[snapdom] Error in pseudo ${d} for`,t,P)}}else!v&&I&&I!=="none"&&(C.textContent=I);if(g)try{let E=_(h),P=yield Promise.all(E.map(L=>j(L)));C.style.backgroundImage=P.join(", ")}catch(E){console.warn(`[snapdom] Failed to inline background-image for ${d}`,E)}if(y&&(C.style.backgroundColor=m),!(C.childNodes.length>0||C.textContent&&C.textContent.trim()!==""||g||y))continue;d==="::before"?e.insertBefore(C,e.firstChild):e.appendChild(C)}}catch(l){console.warn(`[snapdom] Failed to capture ${d} for`,t,l)}let c=Array.from(t.children),a=Array.from(e.children).filter(d=>!d.dataset.snapdomPseudo);for(let d=0;d<Math.min(c.length,a.length);d++)yield rt(c[d],a[d],o,i,r,n,f)})}function St(t){if(!t)return;let e=document.querySelectorAll("svg > defs");e.length&&t.querySelectorAll("svg").forEach(o=>{let i=o.querySelectorAll("use");if(!i.length)return;let r=new Set;if(i.forEach(f=>{let c=f.getAttribute("xlink:href")||f.getAttribute("href");c&&c.startsWith("#")&&r.add(c.slice(1))}),!r.size)return;let n=document.createElementNS("http://www.w3.org/2000/svg","defs");for(let f of r)for(let c of e){let a=c.querySelector(`#${CSS.escape(f)}`);if(a){n.appendChild(a.cloneNode(!0));break}}n.childNodes.length&&o.insertBefore(n,o.firstChild)})}function Et(r){return p(this,arguments,function*(t,e=!1,o=!1,i={}){var l;let n=new Map,f=new WeakMap,c=new Map,a;try{a=H(t,n,f,c,e,i,t)}catch(s){throw console.warn("deepClone failed:",s),s}try{yield rt(t,a,n,f,e,o,i.useProxy)}catch(s){console.warn("inlinePseudoElements failed:",s)}try{St(a)}catch(s){console.warn("inlineExternalDef failed:",s)}let d="";if(e){let s=gt(n);d=Array.from(s.entries()).map(([h,m])=>`.${m}{${h}}`).join("");for(let[h,m]of n.entries()){if(h.tagName==="STYLE")continue;let u=s.get(m);u&&h.classList.add(u);let g=(l=h.style)==null?void 0:l.backgroundImage;h.removeAttribute("style"),g&&g!=="none"&&(h.style.backgroundImage=g)}}else for(let[s,h]of n.entries())s.tagName!=="STYLE"&&s.setAttribute("style",h.replace(/;/g,"; "));for(let[s,h]of c.entries()){let m=h.scrollLeft,u=h.scrollTop;if((m||u)&&s instanceof HTMLElement){s.style.overflow="hidden",s.style.scrollbarWidth="none",s.style.msOverflowStyle="none";let y=document.createElement("div");for(y.style.transform=`translate(${-m}px, ${-u}px)`,y.style.willChange="transform",y.style.display="inline-block",y.style.width="100%";s.firstChild;)y.appendChild(s.firstChild);s.appendChild(y)}}if(t===c.get(a)){let s=f.get(t)||window.getComputedStyle(t);f.set(t,s);let h=wt(s.transform);a.style.margin="0",a.style.position="static",a.style.top="auto",a.style.left="auto",a.style.right="auto",a.style.bottom="auto",a.style.zIndex="auto",a.style.float="none",a.style.clear="none",a.style.transform=h||""}for(let[s,h]of c.entries())h.tagName==="PRE"&&(s.style.marginTop="0",s.style.marginBlockStart="0");return{clone:a,classCSS:d,styleCache:f}})}function $t(o){return p(this,arguments,function*(t,e={}){let i=Array.from(t.querySelectorAll("img")),r=n=>p(null,null,function*(){let f=n.src;try{let c=yield F(f,{useProxy:e.useProxy});n.src=c,n.width||(n.width=n.naturalWidth||100),n.height||(n.height=n.naturalHeight||100)}catch(c){let a=document.createElement("div");a.style=`width: ${n.width||100}px; height: ${n.height||100}px; background: #ccc; display: inline-block; text-align: center; line-height: ${n.height||100}px; color: #666; font-size: 12px;`,a.innerText="img",n.replaceWith(a)}});for(let n=0;n<i.length;n+=4){let f=i.slice(n,n+4).map(r);yield Promise.allSettled(f)}})}function vt(r,n,f){return p(this,arguments,function*(t,e,o,i={}){let c=[[t,e]],a=["background-image","mask","mask-image","-webkit-mask-image","mask-source","mask-box-image-source","mask-border-source","-webkit-mask-box-image-source"];for(;c.length;){let[d,l]=c.shift(),s=o.get(d)||U(d);o.has(d)||o.set(d,s);for(let g of a){let y=s.getPropertyValue(g);if(!y||y==="none")continue;let b=_(y),w=yield Promise.all(b.map(x=>j(x,i)));w.some(x=>x&&x!=="none"&&!/^url\(undefined/.test(x))&&l.style.setProperty(g,w.join(", "))}let h=s.getPropertyValue("background-color");h&&h!=="transparent"&&h!=="rgba(0, 0, 0, 0)"&&(l.style.backgroundColor=h);let m=Array.from(d.children),u=Array.from(l.children);for(let g=0;g<Math.min(m.length,u.length);g++)c.push([m[g],u[g]])}})}function kt(o){return p(this,arguments,function*(t,e={}){if(!t)throw new Error("Element cannot be null or undefined");let{compress:i=!0,embedFonts:r=!1,fast:n=!0,scale:f=1,useProxy:c=""}=e,a,d,l,s="",h="",m,u;if({clone:a,classCSS:d,styleCache:l}=yield Et(t,i,r,e),yield new Promise(y=>{V(()=>p(null,null,function*(){yield $t(a,e),y()}),{fast:n})}),yield new Promise(y=>{V(()=>p(null,null,function*(){yield vt(t,a,l,e),y()}),{fast:n})}),r&&(yield new Promise(y=>{V(()=>p(null,null,function*(){s=yield J(),y()}),{fast:n})})),i){let y=ut(a).sort(),b=y.join(",");W.has(b)?h=W.get(b):yield new Promise(w=>{V(()=>{h=pt(y),W.set(b,h),w()},{fast:n})})}yield new Promise(y=>{V(()=>{let b=t.getBoundingClientRect(),w=b.width,x=b.height,N=Number.isFinite(e.width),C=Number.isFinite(e.height),k=typeof f=="number"&&f!==1;if(!k){let L=b.width/b.height;N&&C?(w=e.width,x=e.height):N?(w=e.width,x=w/L):C&&(x=e.height,w=x*L)}if(w=Math.ceil(w),x=Math.ceil(x),a.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),a.style.transformOrigin="top left",!k&&(N||C)){let L=b.width,Tt=b.height,Nt=w/L,Pt=x/Tt,Lt=a.style.transform||"",Ut=`scale(${Nt}, ${Pt})`;a.style.transform=`${Ut} ${Lt}`.trim()}else k&&K()&&(a.style.scale=`${f}`);let B="http://www.w3.org/2000/svg",v=document.createElementNS(B,"foreignObject");v.setAttribute("width","100%"),v.setAttribute("height","100%");let I=document.createElement("style");I.textContent=h+s+"svg{overflow:visible;}"+d,v.appendChild(I),v.appendChild(a);let q=new XMLSerializer().serializeToString(v);u=`<svg xmlns="${B}" width="${w}" height="${x}" viewBox="0 0 ${w} ${x}">`+q+"</svg>",m=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(u)}`,y()},{fast:n})});let g=document.getElementById("snapdom-sandbox");return g&&g.style.position==="absolute"&&g.remove(),m})}function jt(i,r){return p(this,arguments,function*(t,{dpr:e=1,scale:o=1}){let n=new Image;return n.src=t,yield n.decode(),K?(n.width=n.width*o,n.height=n.height*o):(n.width=n.width/o,n.height=n.height/o),n})}function It(i){return p(this,arguments,function*(t,{dpr:e=1,scale:o=1}={}){let r=new Image;r.src=t,yield r.decode();let n=document.createElement("canvas"),f=r.width*o,c=r.height*o;n.width=Math.ceil(f*e),n.height=Math.ceil(c*e);let a=n.getContext("2d");return a.scale(e,e),a.drawImage(r,0,0,f,c),n.style.width=`${f}px`,n.style.height=`${c}px`,n})}function Rt(n){return p(this,arguments,function*(t,{type:e="svg",scale:o=1,backgroundColor:i="#fff",quality:r}={}){let f={jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",webp:"image/webp"}[e]||"image/png";if(e==="svg"){let a=decodeURIComponent(t.split(",")[1]);return new Blob([a],{type:"image/svg+xml"})}let c=yield it(t,{dpr:1,scale:o},i);return new Promise(a=>{c.toBlob(d=>a(d),`${f}`,r)})})}function it(r,n,f){return p(this,arguments,function*(t,{dpr:e=1,scale:o=1},i){let c=yield It(t,{dpr:e,scale:o});if(!i)return c;let a=document.createElement("canvas");a.width=c.width,a.height=c.height;let d=a.getContext("2d");return d.fillStyle=i,d.fillRect(0,0,a.width,a.height),d.drawImage(c,0,0),a})}function st(f,c){return p(this,arguments,function*(t,{dpr:e=1,scale:o=1,backgroundColor:i="#fff",quality:r},n="png"){let a=yield it(t,{dpr:e,scale:o},i),d=new Image;return d.src=a.toDataURL(`image/${n}`,r),yield d.decode(),d.style.width=`${a.width/e}px`,d.style.height=`${a.height/e}px`,d})}function Vt(f){return p(this,arguments,function*(t,{dpr:e=1,scale:o=1,backgroundColor:i="#fff",format:r="png",filename:n="capture"}={}){if(r==="svg"){let m=yield Rt(t),u=URL.createObjectURL(m),g=document.createElement("a");g.href=u,g.download=`${n}.svg`,g.click(),URL.revokeObjectURL(u);return}let c=["jpg","jpeg","webp"].includes(r)?"#fff":void 0,a=i!=null?i:c,d=yield it(t,{dpr:e,scale:o},a),l={jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",webp:"image/webp"}[r]||"image/png",s=d.toDataURL(l),h=document.createElement("a");h.href=s,h.download=`${n}.${r}`,h.click()})}function S(o){return p(this,arguments,function*(t,e={}){if(e=D({scale:1},e),!t)throw new Error("Element cannot be null or undefined");return e.iconFonts&&xt(e.iconFonts),yield S.capture(t,e)})}S.capture=(o,...i)=>p(null,[o,...i],function*(t,e={}){let r=yield kt(t,e),n=window.devicePixelRatio||1,f=e.scale||1;return{url:r,options:e,toRaw:()=>r,toImg:()=>jt(r,{dpr:n,scale:f}),toCanvas:()=>It(r,{dpr:n,scale:f}),toBlob:c=>Rt(r,D({dpr:n,scale:f},c)),toPng:c=>st(r,D({dpr:n,scale:f},c),"png"),toJpg:c=>st(r,D({dpr:n,scale:f},c),"jpeg"),toWebp:c=>st(r,D({dpr:n,scale:f},c),"webp"),download:({format:c="png",filename:a="capture",backgroundColor:d}={})=>Vt(r,{dpr:n,scale:f,backgroundColor:d,format:c,filename:a})}});S.toRaw=(t,e)=>p(null,null,function*(){return(yield S.capture(t,e)).toRaw()});S.toImg=(t,e)=>p(null,null,function*(){return(yield S.capture(t,e)).toImg()});S.toCanvas=(t,e)=>p(null,null,function*(){return(yield S.capture(t,e)).toCanvas()});S.toBlob=(t,e)=>p(null,null,function*(){return(yield S.capture(t,e)).toBlob(e)});S.toPng=(t,e)=>p(null,null,function*(){return(yield S.capture(t,e)).toPng(e)});S.toJpg=(t,e)=>p(null,null,function*(){return(yield S.capture(t,e)).toJpg(e)});S.toWebp=(t,e)=>p(null,null,function*(){return(yield S.capture(t,e)).toWebp(e)});S.download=(o,...i)=>p(null,[o,...i],function*(t,e={}){let d=e,{format:r="png",filename:n="capture",backgroundColor:f}=d,c=dt(d,["format","filename","backgroundColor"]);return yield(yield S.capture(t,c)).download({format:r,filename:n,backgroundColor:f})});function At(){return p(this,arguments,function*(t=document,e={}){let{embedFonts:o=!0,reset:i=!1}=e;if(i){R.clear(),M.clear(),$.clear(),W.clear();return}yield document.fonts.ready,ht();let r=[],n=[];t!=null&&t.querySelectorAll&&(r=Array.from(t.querySelectorAll("img[src]")),n=Array.from(t.querySelectorAll("*")));let f=[];for(let c of r){let a=c.src;R.has(a)||f.push(F(a,{useProxy:e.useProxy}).then(d=>R.set(a,d)).catch(()=>{}))}for(let c of n){let a=U(c).backgroundImage;if(a&&a!=="none"){let d=_(a);for(let l of d)l.startsWith("url(")&&f.push(j(l,e).catch(()=>{}))}}o&&(yield J({preCached:!0})),yield Promise.all(f)})}window.snapdom=S;window.preCache=At;})();
@@ -1,15 +1,15 @@
1
- var R=new Map,T=new Map,C=new Map,I=new Map,k=new Map,N=new WeakMap;var ie=["div","span","p","a","img","ul","li","button","input","select","textarea","label","section","article","header","footer","nav","main","aside","h1","h2","h3","h4","h5","h6","svg","path","circle","rect","line","g","table","thead","tbody","tr","td","th"];function H(){for(let e of ie)z(e)}function z(e){if(I.has(e))return I.get(e);if(new Set(["script","style","meta","link","noscript","template"]).has(e)){let s={};return I.set(e,s),s}let o=document.getElementById("snapdom-sandbox");o||(o=document.createElement("div"),o.id="snapdom-sandbox",o.style.position="absolute",o.style.left="-9999px",o.style.top="-9999px",o.style.width="0",o.style.height="0",o.style.overflow="hidden",document.body.appendChild(o));let r=document.createElement(e);r.style.all="initial",o.appendChild(r);let t=getComputedStyle(r),a={};for(let s of t)a[s]=t.getPropertyValue(s);return o.removeChild(r),I.set(e,a),a}function M(e,n,o=!1){let r=[],t=z(n);for(let[a,s]of Object.entries(e))if(!o)s&&r.push(`${a}:${s}`);else{let i=t[a];s&&s!==i&&r.push(`${a}:${s}`)}return r.sort().join(";")}function Y(e){let n=new Set;return e.nodeType!==Node.ELEMENT_NODE&&e.nodeType!==Node.DOCUMENT_FRAGMENT_NODE?[]:(e.tagName&&n.add(e.tagName.toLowerCase()),typeof e.querySelectorAll=="function"&&e.querySelectorAll("*").forEach(o=>n.add(o.tagName.toLowerCase())),Array.from(n))}function K(e){let n=new Map;for(let r of e){let t=I.get(r);if(!t)continue;let a=Object.entries(t).map(([s,i])=>`${s}:${i};`).sort().join("");n.has(a)||n.set(a,[]),n.get(a).push(r)}let o="";for(let[r,t]of n.entries())o+=`${t.join(",")} { ${r} }
2
- `;return o}function J(e){let n=new Set(e.values()),o=new Map,r=1;for(let t of n)o.set(t,`c${r++}`);return o}function L(e,{fast:n=!1}={}){if(n)return e();"requestIdleCallback"in window?requestIdleCallback(e,{timeout:50}):setTimeout(e,1)}function U(e,n=null){if(!(e instanceof Element))return window.getComputedStyle(e,n);let o=N.get(e);if(o||(o=new Map,N.set(e,o)),!o.has(n)){let r=window.getComputedStyle(e,n);o.set(n,r)}return o.get(n)}function X(e){let n=e.replace(/^['"]|['"]$/g,"");if(n.startsWith("\\"))try{return String.fromCharCode(parseInt(n.replace("\\",""),16))}catch{return n}return n}function $(e){let n=e.indexOf("url(");if(n===-1)return null;let o=e.slice(n+4).trim();return o.endsWith(")")&&(o=o.slice(0,-1).trim()),(o.startsWith('"')&&o.endsWith('"')||o.startsWith("'")&&o.endsWith("'"))&&(o=o.slice(1,-1)),o}function P(e){return[/font\s*awesome/i,/material\s*icons/i,/ionicons/i,/glyphicons/i,/feather/i,/bootstrap\s*icons/i,/remix\s*icons/i,/heroicons/i].some(o=>o.test(e))}function S(e,n=3e3,o="anonymous"){return R.has(e)?Promise.resolve(R.get(e)):new Promise((r,t)=>{let a=setTimeout(()=>{t(new Error("Image load timed out"))},n),s=new Image;s.crossOrigin=o,s.onload=async()=>{clearTimeout(a);try{await s.decode();let i=document.createElement("canvas");i.width=s.width,i.height=s.height,i.getContext("2d").drawImage(s,0,0,i.width,i.height);try{let l=i.toDataURL("image/png");R.set(e,l),r(l)}catch{t(new Error("CORS restrictions prevented image capture"))}}catch(i){t(i)}},s.onerror=i=>{clearTimeout(a),t(new Error("Failed to load image: "+(i.message||"Unknown error")))},s.src=e})}function O(e){let n={};for(let o of e)n[o]=e.getPropertyValue(o);return n}function B(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}function _(e,n,o,r,t){if(e.tagName==="STYLE")return;r.has(e)||r.set(e,U(e));let a=r.get(e),s=O(a),i=e.tagName?.toLowerCase()||"div",c=M(s,i,t);o.set(n,c)}function D(e,n,o,r,t){if(e.nodeType===Node.ELEMENT_NODE&&e.getAttribute("data-capture")==="exclude"){let i=document.createElement("div"),c=e.getBoundingClientRect();return i.style.cssText=`display: inline-block; width: ${c.width}px; height: ${c.height}px; visibility: hidden;`,i}if(e.tagName==="IFRAME"){let i=document.createElement("div");return i.textContent="",i.style.cssText=`width: ${e.offsetWidth}px; height: ${e.offsetHeight}px; background: repeating-linear-gradient(45deg, #ddd, #ddd 5px, #f9f9f9 5px, #f9f9f9 10px);display: flex;align-items: center;justify-content: center;font-size: 12px;color: #555; border: 1px solid #aaa;`,i}if(e.nodeType===Node.ELEMENT_NODE&&e.getAttribute("data-capture")==="placeholder"){let i=e.cloneNode(!1);r.set(i,e),_(e,i,n,o,t);let c=document.createElement("div");return c.textContent=e.getAttribute("data-placeholder-text")||"",c.style.cssText="color: #666;font-size: 12px;text-align: center;line-height: 1.4;padding: 0.5em;box-sizing: border-box;",i.appendChild(c),i}if(e.tagName==="CANVAS"){let i=e.toDataURL(),c=document.createElement("img");return c.src=i,c.width=e.width,c.height=e.height,c.style.display="inline-block",c.style.width=`${e.width}px`,c.style.height=`${e.height}px`,c}if(e.nodeType===Node.TEXT_NODE){if(e.parentElement?.shadowRoot){let i=e.parentElement.tagName.toLowerCase();if(customElements.get(i))return null}return e.cloneNode(!0)}if(e.nodeType!==Node.ELEMENT_NODE)return e.cloneNode(!0);let a=e.cloneNode(!1);r.set(a,e),e instanceof HTMLInputElement?(a.value=e.value,a.setAttribute("value",e.value),e.checked!==void 0&&(a.checked=e.checked,e.checked&&a.setAttribute("checked",""))):e instanceof HTMLTextAreaElement?(a.value=e.value,a.textContent=e.value):e instanceof HTMLSelectElement&&(a.value=e.value,Array.from(a.options).forEach(i=>{i.value===e.value?i.setAttribute("selected",""):i.removeAttribute("selected")})),_(e,a,n,o,t);let s=document.createDocumentFragment();if(e.childNodes.forEach(i=>{let c=D(i,n,o,r,t);c&&s.appendChild(c)}),a.appendChild(s),e.shadowRoot){let i=Array.from(e.shadowRoot.children).filter(l=>l.tagName!=="STYLE").map(l=>D(l,n,o,r)).filter(Boolean),c=document.createDocumentFragment();i.forEach(l=>c.appendChild(l)),a.appendChild(c)}return a}async function G(e,n,o,r=32,t="#000"){n=n.replace(/^['"]+|['"]+$/g,"");let a=window.devicePixelRatio||1,i=document.createElement("canvas").getContext("2d");i.font=o?`${o} ${r}px "${n}"`:`${r}px "${n}"`;let c=i.measureText(e),l=c.actualBoundingBoxAscent||r*.8,d=c.actualBoundingBoxDescent||r*.2,h=l+d,f=c.width,p=document.createElement("canvas");p.width=Math.ceil(f*a),p.height=Math.ceil(h*a);let m=p.getContext("2d");return m.scale(a,a),m.font=i.font,m.textAlign="left",m.textBaseline="alphabetic",m.fillStyle=t,m.fillText(e,0,l),p.toDataURL()}async function W({ignoreIconFonts:e=!0,preCached:n=!1}={}){let o=Array.from(document.querySelectorAll('link[rel="stylesheet"]')).filter(t=>t.href),r="";for(let t of o)try{let s=await(await fetch(t.href)).text();if(e&&(P(t.href)||P(s)))continue;let i=/url\(([^)]+)\)/g,c=await Promise.all(Array.from(s.matchAll(i)).map(async d=>{let h=$(d[0]);if(!h)return null;let f=h;f.startsWith("http")||(f=new URL(f,t.href).href);try{f=encodeURI(f)}catch{console.warn("[snapdom] Failed to encode font URL:",f)}if(e&&P(f))return null;if(C.has(f))return{original:d[0],inlined:`url(${C.get(f)})`};try{let m=await(await fetch(f)).blob(),u=await new Promise(y=>{let x=new FileReader;x.onload=()=>y(x.result),x.readAsDataURL(m)});return C.set(f,u),{original:d[0],inlined:`url(${u})`}}catch{return console.warn("[snapdom] Failed to fetch font:",f),null}})),l=s;for(let d of c)d&&(l=l.replace(d.original,d.inlined));r+=l+`
3
- `}catch{console.warn("[snapdom] Failed to fetch CSS:",t.href)}for(let t of document.styleSheets)try{if(!t.href||o.every(a=>a.href!==t.href)){for(let a of t.cssRules)if(a.type===CSSRule.FONT_FACE_RULE){let s=a.style.getPropertyValue("src");if(!s)continue;let i=/url\(([^)]+)\)/g,c=s,l=Array.from(s.matchAll(i));for(let d of l){let h=d[1].trim().replace(/^["']|["']$/g,"");if(!h)continue;let f=h;if(!f.startsWith("http")&&!f.startsWith("data:")&&(f=new URL(f,t.href||location.href).href),!(e&&P(f))){if(C.has(f)){c=c.replace(d[0],`url(${C.get(f)})`);continue}try{let m=await(await fetch(f)).blob(),u=await new Promise(y=>{let x=new FileReader;x.onload=()=>y(x.result),x.readAsDataURL(m)});C.set(f,u),c=c.replace(d[0],`url(${u})`)}catch{console.warn("[snapdom] Failed to fetch font URL:",f)}}}r+=`@font-face {
4
- font-family: ${a.style.getPropertyValue("font-family")};
5
- src: ${c};
6
- font-style: ${a.style.getPropertyValue("font-style")||"normal"};
7
- font-weight: ${a.style.getPropertyValue("font-weight")||"normal"};
1
+ var v=new Map,F=new Map,S=new Map,B=new Map,D=new Map,G=new WeakMap,R=new Set;var kt=["div","span","p","a","img","ul","li","button","input","select","textarea","label","section","article","header","footer","nav","main","aside","h1","h2","h3","h4","h5","h6","svg","path","circle","rect","line","g","table","thead","tbody","tr","td","th"];function rt(){for(let t of kt)st(t)}function st(t){if(B.has(t))return B.get(t);if(new Set(["script","style","meta","link","noscript","template"]).has(t)){let c={};return B.set(t,c),c}let n=document.getElementById("snapdom-sandbox");n||(n=document.createElement("div"),n.id="snapdom-sandbox",n.style.position="absolute",n.style.left="-9999px",n.style.top="-9999px",n.style.width="0",n.style.height="0",n.style.overflow="hidden",document.body.appendChild(n));let r=document.createElement(t);r.style.all="initial",n.appendChild(r);let a=getComputedStyle(r),o={};for(let c of a)o[c]=a.getPropertyValue(c);return n.removeChild(r),B.set(t,o),o}function V(t,e,n=!1){let r=[],a=st(e);for(let[o,c]of Object.entries(t))if(!n)c&&r.push(`${o}:${c}`);else{let i=a[o];c&&c!==i&&r.push(`${o}:${c}`)}return r.sort().join(";")}function it(t){let e=new Set;return t.nodeType!==Node.ELEMENT_NODE&&t.nodeType!==Node.DOCUMENT_FRAGMENT_NODE?[]:(t.tagName&&e.add(t.tagName.toLowerCase()),typeof t.querySelectorAll=="function"&&t.querySelectorAll("*").forEach(n=>e.add(n.tagName.toLowerCase())),Array.from(e))}function ct(t){let e=new Map;for(let r of t){let a=B.get(r);if(!a)continue;let o=Object.entries(a).map(([c,i])=>`${c}:${i};`).sort().join("");e.has(o)||e.set(o,[]),e.get(o).push(r)}let n="";for(let[r,a]of e.entries())n+=`${a.join(",")} { ${r} }
2
+ `;return n}function lt(t){let e=new Set(t.values()),n=new Map,r=1;for(let a of e)n.set(a,`c${r++}`);return n}async function M(t,e={}){let r=t.match(/url\(["']?(.*?)["']?\)/)?.[1],a=/^((repeating-)?(linear|radial|conic)-gradient)\(/i.test(t);if(r){let o=Y(r);if(F.has(o))return e.skipInline?void 0:`url(${F.get(o)})`;{let c=await U(o,{useProxy:e.useProxy});return F.set(o,c),e.skipInline?void 0:`url("${c}")`}}return t}function O(t,{fast:e=!1}={}){if(e)return t();"requestIdleCallback"in window?requestIdleCallback(t,{timeout:50}):setTimeout(t,1)}function L(t,e=null){if(!(t instanceof Element))return window.getComputedStyle(t,e);let n=G.get(t);if(n||(n=new Map,G.set(t,n)),!n.has(e)){let r=window.getComputedStyle(t,e);n.set(e,r)}return n.get(e)}function ft(t){let e=t.replace(/^['"]|['"]$/g,"");if(e.startsWith("\\"))try{return String.fromCharCode(parseInt(e.replace("\\",""),16))}catch{return e}return e}function H(t){let e=t.indexOf("url(");if(e===-1)return null;let n=t.slice(e+4).trim();return n.endsWith(")")&&(n=n.slice(0,-1).trim()),(n.startsWith('"')&&n.endsWith('"')||n.startsWith("'")&&n.endsWith("'"))&&(n=n.slice(1,-1)),n}function U(t,{timeout:e=3e3,useProxy:n=""}={}){function r(l){try{return new URL(l,window.location.href).origin===window.location.origin?"use-credentials":"anonymous"}catch{return"anonymous"}}async function a(l){let s=f=>fetch(f,{mode:"cors",credentials:r(f)==="use-credentials"?"include":"omit"}).then(d=>d.blob()).then(d=>new Promise((h,u)=>{let m=new FileReader;m.onloadend=()=>{let g=m.result;if(typeof g!="string"||!g.startsWith("data:image/")){u(new Error("Invalid image data URL"));return}h(g)},m.onerror=()=>u(new Error("FileReader error")),m.readAsDataURL(d)}));try{return await s(l)}catch{if(n&&typeof n=="string"){let d=n.replace(/\/$/,"")+Y(l);try{return await s(d)}catch{throw console.error(`[SnapDOM - fetchImage] Proxy fallback failed for: ${l}`),new Error("CORS restrictions prevented image capture (even via proxy)")}}else throw console.error(`[SnapDOM - fetchImage] No valid proxy URL provided for fallback: ${l}`),new Error("Fetch fallback failed and no proxy provided")}}let o=r(t);return console.log(`[SnapDOM - fetchImage] Start loading image: ${t} with crossOrigin=${o}`),v.has(t)?(console.log(`[SnapDOM - fetchImage] Cache hit for: ${t}`),Promise.resolve(v.get(t))):t.startsWith("data:image/")?(v.set(t,t),Promise.resolve(t)):/\.svg(\?.*)?$/i.test(t)?(async()=>{try{let s=await(await fetch(t,{mode:"cors",credentials:o==="use-credentials"?"include":"omit"})).text(),f=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(s)}`;return v.set(t,f),f}catch{return a(t)}})():new Promise((l,s)=>{let f=setTimeout(()=>{console.log(`[SnapDOM - fetchImage] Timeout after ${e}ms for image: ${t}`),s(new Error("Image load timed out"))},e),d=new Image;d.crossOrigin=o,d.onload=async()=>{clearTimeout(f);try{await d.decode();let h=document.createElement("canvas");h.width=d.width,h.height=d.height,h.getContext("2d").drawImage(d,0,0,h.width,h.height);let m=h.toDataURL("image/png");v.set(t,m),l(m)}catch{try{let h=await a(t);v.set(t,h),l(h)}catch(h){s(h)}}},d.onerror=async()=>{clearTimeout(f),console.error(`[SnapDOM - fetchImage] Image failed to load: ${t}`);try{let h=await a(t);v.set(t,h),l(h)}catch(h){s(h)}},d.src=t})}function J(t){let e={};for(let n of t)e[n]=t.getPropertyValue(n);return e}function X(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}function dt(t){if(!t||t==="none")return"";let e=t.replace(/translate[XY]?\([^)]*\)/g,"");return e=e.replace(/matrix\(([^)]+)\)/g,(n,r)=>{let a=r.split(",").map(o=>o.trim());return a.length!==6?`matrix(${r})`:(a[4]="0",a[5]="0",`matrix(${a.join(", ")})`)}),e=e.replace(/matrix3d\(([^)]+)\)/g,(n,r)=>{let a=r.split(",").map(o=>o.trim());return a.length!==16?`matrix3d(${r})`:(a[12]="0",a[13]="0",`matrix3d(${a.join(", ")})`)}),e.trim().replace(/\s{2,}/g," ")}function Y(t){if(/%[0-9A-Fa-f]{2}/.test(t))return t;try{return encodeURI(t)}catch{return t}}function W(t){let e=[],n=0,r=0;for(let a=0;a<t.length;a++){let o=t[a];o==="("&&n++,o===")"&&n--,o===","&&n===0&&(e.push(t.slice(r,a).trim()),r=a+1)}return e.push(t.slice(r).trim()),e}var Q=new WeakMap,Z=new Map;function It(t){let e={};for(let n=0;n<t.length;n++){let r=t[n],a=t.getPropertyValue(r);(r==="background-image"||r==="content")&&a.includes("url(")&&!a.includes("data:")&&(a="none"),e[r]=a}return e}function tt(t,e,n,r,a){if(t.tagName==="STYLE")return;r.has(t)||r.set(t,L(t));let o=r.get(t);if(!Q.has(t)){let f=It(o);Q.set(t,f)}let c=Q.get(t),i=Object.entries(c).sort(([f],[d])=>f.localeCompare(d)).map(([f,d])=>`${f}:${d}`).join(";");if(Z.has(i)){n.set(e,Z.get(i));return}let l=t.tagName?.toLowerCase()||"div",s=V(c,l,a);Z.set(i,s),n.set(e,s)}function Rt(t){return t.nodeType===Node.ELEMENT_NODE&&t.tagName==="SLOT"}function _(t,e,n,r,a,o={},c){if(t.nodeType===Node.TEXT_NODE||t.nodeType!==Node.ELEMENT_NODE)return t.cloneNode(!0);if(t.getAttribute("data-capture")==="exclude"){let l=document.createElement("div"),s=t.getBoundingClientRect();return l.style.cssText=`display: inline-block; width: ${s.width}px; height: ${s.height}px; visibility: hidden;`,l}if(o.exclude&&Array.isArray(o.exclude))for(let l of o.exclude)try{if(t.matches?.(l)){let s=document.createElement("div"),f=t.getBoundingClientRect();return s.style.cssText=`display: inline-block; width: ${f.width}px; height: ${f.height}px; visibility: hidden;`,s}}catch(s){console.warn(`Invalid selector in exclude option: ${l}`,s)}if(typeof o.filter=="function")try{if(!o.filter(t,c||t)){let l=document.createElement("div"),s=t.getBoundingClientRect();return l.style.cssText=`display: inline-block; width: ${s.width}px; height: ${s.height}px; visibility: hidden;`,l}}catch(l){console.warn("Error in filter function:",l)}if(t.tagName==="IFRAME"){let l=document.createElement("div");return l.textContent="",l.style.cssText=`width: ${t.offsetWidth}px; height: ${t.offsetHeight}px; background-image: repeating-linear-gradient(45deg, #ddd, #ddd 5px, #f9f9f9 5px, #f9f9f9 10px);display: flex;align-items: center;justify-content: center;font-size: 12px;color: #555; border: 1px solid #aaa;`,l}if(t.getAttribute("data-capture")==="placeholder"){let l=t.cloneNode(!1);r.set(l,t),tt(t,l,e,n,a);let s=document.createElement("div");return s.textContent=t.getAttribute("data-placeholder-text")||"",s.style.cssText="color: #666;font-size: 12px;text-align: center;line-height: 1.4;padding: 0.5em;box-sizing: border-box;",l.appendChild(s),l}if(t.tagName==="CANVAS"){let l=t.toDataURL(),s=document.createElement("img");return s.src=l,s.width=t.width,s.height=t.height,s.style.display="inline-block",s.style.width=t.style.width||`${t.width}px`,s.style.height=t.style.height||`${t.height}px`,s}let i=t.cloneNode(!1);if(r.set(i,t),t instanceof HTMLInputElement)i.value=t.value,i.setAttribute("value",t.value),t.checked!==void 0&&(i.checked=t.checked,t.checked&&i.setAttribute("checked",""));else if(t instanceof HTMLTextAreaElement){let l=t.getBoundingClientRect();i.textContent=t.value,i.style.width=`${l.width}px`,i.style.height=`${l.height}px`}else t instanceof HTMLSelectElement&&(i.value=t.value,Array.from(i.options).forEach(l=>{l.value===t.value?l.setAttribute("selected",""):l.removeAttribute("selected")}));if(tt(t,i,e,n,a),Rt(t)){let l=t.assignedNodes?.({flatten:!0})||[],s=l.length>0?l:Array.from(t.childNodes),f=document.createDocumentFragment();for(let d of s){let h=_(d,e,n,r,a,o,c||t);h&&f.appendChild(h)}return f}else if(!(t instanceof HTMLTextAreaElement)){let l=t.shadowRoot?t.shadowRoot.childNodes:t.childNodes;for(let s of l){let f=_(s,e,n,r,a,o,c||t);f&&i.appendChild(f)}if(t.shadowRoot&&t.childNodes.length>0&&!t.shadowRoot.querySelector("slot")){let s=document.createDocumentFragment();for(let f of t.childNodes){let d=_(f,e,n,r,a,o,c||t);d&&s.appendChild(d)}i.appendChild(s)}}return i}var At=[/font\s*awesome/i,/material\s*icons/i,/ionicons/i,/glyphicons/i,/feather/i,/bootstrap\s*icons/i,/remix\s*icons/i,/heroicons/i,/layui/i,/lucide/i],et=[];function ht(t){let e=Array.isArray(t)?t:[t];for(let n of e)n instanceof RegExp?et.push(n):typeof n=="string"?et.push(new RegExp(n,"i")):console.warn("[snapdom] Ignored invalid iconFont value:",n)}function A(t){let e=typeof t=="string"?t:"",n=[...At,...et];for(let r of n)if(r instanceof RegExp&&r.test(e))return!0;return!!(/icon/i.test(e)||/glyph/i.test(e)||/symbols/i.test(e)||/feather/i.test(e)||/fontawesome/i.test(e))}async function mt(t,e,n,r=32,a="#000"){e=e.replace(/^['"]+|['"]+$/g,"");let o=window.devicePixelRatio||1,i=document.createElement("canvas").getContext("2d");i.font=n?`${n} ${r}px "${e}"`:`${r}px "${e}"`;let l=i.measureText(t),s=l.actualBoundingBoxAscent||r*.8,f=l.actualBoundingBoxDescent||r*.2,d=s+f,h=l.width,u=document.createElement("canvas");u.width=Math.ceil(h*o),u.height=Math.ceil(d*o);let m=u.getContext("2d");return m.scale(o,o),m.font=i.font,m.textAlign="left",m.textBaseline="alphabetic",m.fillStyle=a,m.fillText(t,0,s),u.toDataURL()}function ut(t){return Array.from(document.styleSheets).some(e=>e.href===t)}function Tt(t){return new Promise(e=>{if(ut(t))return e(null);let n=document.createElement("link");n.rel="stylesheet",n.href=t,n.setAttribute("data-snapdom","injected-import"),n.onload=()=>e(n),n.onerror=()=>e(null),document.head.appendChild(n)})}async function K({preCached:t=!1}={}){if(S.has("fonts-embed-css")){if(t){let o=document.createElement("style");o.setAttribute("data-snapdom","embedFonts"),o.textContent=S.get("fonts-embed-css"),document.head.appendChild(o)}return S.get("fonts-embed-css")}let e=/@import\s+url\(["']?([^"')]+)["']?\)/g,n=[];for(let o of document.querySelectorAll("style")){let c=o.textContent||"",i=Array.from(c.matchAll(e));for(let l of i){let s=l[1];A(s)||ut(s)||n.push(s)}}await Promise.all(n.map(Tt));let r=Array.from(document.querySelectorAll('link[rel="stylesheet"]')).filter(o=>o.href),a="";for(let o of r)try{let i=await(await fetch(o.href)).text();if(A(o.href)||A(i))continue;let l=/url\((["']?)([^"')]+)\1\)/g,s=await Promise.all(Array.from(i.matchAll(l)).map(async d=>{let h=H(d[0]);if(!h)return null;let u=h;if(!u.startsWith("http")&&!u.startsWith("data:")&&(u=new URL(u,o.href).href),A(u))return null;if(S.has(u))return R.add(u),{original:d[0],inlined:`url(${S.get(u)})`};if(R.has(u))return null;try{let g=await(await fetch(u)).blob(),p=await new Promise(y=>{let w=new FileReader;w.onload=()=>y(w.result),w.readAsDataURL(g)});return S.set(u,p),R.add(u),{original:d[0],inlined:`url(${p})`}}catch{return console.warn("[snapdom] Failed to fetch font resource:",u),null}})),f=i;for(let d of s)d&&(f=f.replace(d.original,d.inlined));a+=f+`
3
+ `}catch{console.warn("[snapdom] Failed to fetch CSS:",o.href)}for(let o of document.styleSheets)try{if(!o.href||r.every(c=>c.href!==o.href)){for(let c of o.cssRules)if(c.type===CSSRule.FONT_FACE_RULE){let i=c.style.getPropertyValue("src"),l=c.style.getPropertyValue("font-family");if(!i||A(l))continue;let s=/url\((["']?)([^"')]+)\1\)/g,f=i,d=Array.from(i.matchAll(s));for(let h of d){let u=h[2].trim();if(!u)continue;let m=u;if(!m.startsWith("http")&&!m.startsWith("data:")&&(m=new URL(m,o.href||location.href).href),!A(m)){if(S.has(m)){R.add(m),f=f.replace(h[0],`url(${S.get(m)})`);continue}if(!R.has(m))try{let p=await(await fetch(m)).blob(),y=await new Promise(w=>{let E=new FileReader;E.onload=()=>w(E.result),E.readAsDataURL(p)});S.set(m,y),R.add(m),f=f.replace(h[0],`url(${y})`)}catch{console.warn("[snapdom] Failed to fetch font URL:",m)}}}a+=`@font-face {
4
+ font-family: ${l};
5
+ src: ${f};
6
+ font-style: ${c.style.getPropertyValue("font-style")||"normal"};
7
+ font-weight: ${c.style.getPropertyValue("font-weight")||"normal"};
8
8
  }
9
- `}}}catch(a){console.warn("[snapdom] Cannot access stylesheet",t.href,a)}for(let t of document.fonts)if(t.family&&t.status==="loaded"&&t._snapdomSrc){let a=t._snapdomSrc;if(!a.startsWith("data:"))if(C.has(t._snapdomSrc))a=C.get(t._snapdomSrc);else try{let i=await(await fetch(t._snapdomSrc)).blob();a=await new Promise(c=>{let l=new FileReader;l.onload=()=>c(l.result),l.readAsDataURL(i)}),C.set(t._snapdomSrc,a)}catch{console.warn("[snapdom] Failed to fetch dynamic font src:",t._snapdomSrc);continue}r+=`@font-face {
10
- font-family: '${t.family}';
11
- src: url(${a});
12
- font-style: ${t.style||"normal"};
13
- font-weight: ${t.weight||"normal"};
9
+ `}}}catch(c){console.warn("[snapdom] Cannot access stylesheet",o.href,c)}for(let o of document.fonts)if(o.family&&o.status==="loaded"&&o._snapdomSrc){if(A(o.family))continue;let c=o._snapdomSrc;if(!c.startsWith("data:")){if(S.has(o._snapdomSrc))c=S.get(o._snapdomSrc),R.add(o._snapdomSrc);else if(!R.has(o._snapdomSrc))try{let l=await(await fetch(o._snapdomSrc)).blob();c=await new Promise(s=>{let f=new FileReader;f.onload=()=>s(f.result),f.readAsDataURL(l)}),S.set(o._snapdomSrc,c),R.add(o._snapdomSrc)}catch{console.warn("[snapdom] Failed to fetch dynamic font src:",o._snapdomSrc);continue}}a+=`@font-face {
10
+ font-family: '${o.family}';
11
+ src: url(${c});
12
+ font-style: ${o.style||"normal"};
13
+ font-weight: ${o.weight||"normal"};
14
14
  }
15
- `}if(r&&n){let t=document.createElement("style");t.setAttribute("data-snapdom","embedFonts"),t.textContent=r,document.head.appendChild(t)}return r}async function V(e,n,o,r,t,a=!1){if(!(e instanceof Element)||!(n instanceof Element))return;for(let c of["::before","::after"])try{let l=U(e,c);if(!l)continue;let d=l.getPropertyValue("content"),h=l.getPropertyValue("background-image"),f=d&&d!=="none"&&d!=='""'&&d!=="''",p=h&&h.startsWith("url(");if(f||p){let m=l.getPropertyValue("font-family"),u=parseInt(l.getPropertyValue("font-size"))||32,y=parseInt(l.getPropertyValue("font-weight"))||!1,x=l.getPropertyValue("color")||"#000",w=document.createElement("span");w.dataset.snapdomPseudo=c;let A=O(l),F=M(A,"span",t);o.set(w,F);let j=m&&/font.*awesome|material|bootstrap|glyphicons|ionicons|remixicon|simple-line-icons|octicons|feather|typicons|weathericons/i.test(m),E=X(d);if(!a&&j&&E.length===1){let b=document.createElement("img");b.src=await G(E,m,y,u,x),b.style="display:block;width:100%;height:100%;object-fit:contain;",w.appendChild(b)}else if(E.startsWith("url(")){let b=$(E);if(b)try{let v=document.createElement("img"),se=await S(encodeURI(b));v.src=se,v.style="display:block;width:100%;height:100%;object-fit:contain;",w.appendChild(v)}catch(v){console.error(`[snapdom] Error in pseudo ${c} for`,e,v)}}else!j&&E&&E!=="none"&&(w.textContent=E);if(p&&h){let b=$(h);if(b)try{let v=await S(encodeURI(b));w.style.backgroundImage=`url(${v})`}catch(v){console.warn(`[snapdom] Failed to inline background-image for ${c}`,v)}}if(!(w.childNodes.length>0||w.textContent&&w.textContent.trim()!=="")&&!p)continue;c==="::before"?n.insertBefore(w,n.firstChild):n.appendChild(w)}}catch(l){console.warn(`[snapdom] Failed to capture ${c} for`,e,l)}let s=Array.from(e.children),i=Array.from(n.children).filter(c=>!c.dataset.snapdomPseudo);for(let c=0;c<Math.min(s.length,i.length);c++)await V(s[c],i[c],o,r,t,a)}async function Q(e,n=!1,o=!1){let r=new Map,t=new WeakMap,a=new Map,s;try{s=D(e,r,t,a,n)}catch(c){throw console.warn("deepClone failed:",c),c}try{await V(e,s,r,t,n,o)}catch(c){console.warn("inlinePseudoElements failed:",c)}let i="";if(n){let c=J(r);i=Array.from(c.entries()).map(([l,d])=>`.${d}{${l}}`).join("");for(let[l,d]of r.entries()){if(l.tagName==="STYLE")continue;let h=c.get(d);h&&l.classList.add(h);let f=l.style?.backgroundImage;l.removeAttribute("style"),f&&f!=="none"&&(l.style.backgroundImage=f)}}else for(let[c,l]of r.entries())c.tagName!=="STYLE"&&c.setAttribute("style",l.replace(/;/g,"; "));for(let[c,l]of a.entries()){let d=l.scrollLeft,h=l.scrollTop;if((d||h)&&c instanceof HTMLElement){c.style.overflow="hidden",c.style.scrollbarWidth="none",c.style.msOverflowStyle="none";let p=document.createElement("div");for(p.style.transform=`translate(${-d}px, ${-h}px)`,p.style.willChange="transform",p.style.display="inline-block",p.style.width="100%";c.firstChild;)p.appendChild(c.firstChild);c.appendChild(p)}}return{clone:s,classCSS:i,styleCache:t}}async function Z(e,n={}){let o=Array.from(e.querySelectorAll("img")),r=async t=>{let a=t.src;try{let s=n.crossOrigin?n.crossOrigin(a):"anonymous",i=await S(a,3e3,s);t.src=i,t.width||(t.width=t.naturalWidth||100),t.height||(t.height=t.naturalHeight||100)}catch{let s=document.createElement("div");s.style=`width: ${t.width||100}px; height: ${t.height||100}px; background: #ccc; display: inline-block; text-align: center; line-height: ${t.height||100}px; color: #666; font-size: 12px;`,s.innerText="img",t.replaceWith(s)}};for(let t=0;t<o.length;t+=4){let a=o.slice(t,t+4).map(r);await Promise.allSettled(a)}}async function ee(e,n,o,r={}){let t=[[e,n]];for(;t.length;){let[a,s]=t.shift(),i=o.get(a)||U(a);o.has(a)||o.set(a,i);let l=i.getPropertyValue("background-image").split(",");for(let f=0;f<l.length;f++){let p=$(l[f]);if(p)try{let m=encodeURI(p),u;if(T.has(m))u=T.get(m);else{let y=r.crossOrigin?r.crossOrigin(m):"anonymous";u=await S(m,3e3,y),T.set(m,u)}l[f]=`url(${u})`}catch{l[f]="none"}}l.some(f=>f.includes("url("))&&(s.style.backgroundImage=l.join(","));let d=Array.from(a.children),h=Array.from(s.children);for(let f=0;f<Math.min(d.length,h.length);f++)t.push([d[f],h[f]])}}async function te(e,n={}){if(!e)throw new Error("Element cannot be null or undefined");let{compress:o=!0,embedFonts:r=!1,fast:t=!0,scale:a=1}=n,s,i,c,l="",d="",h,f;if({clone:s,classCSS:i,styleCache:c}=await Q(e,o,r),await new Promise(m=>{L(async()=>{await Z(s,n),m()},{fast:t})}),await new Promise(m=>{L(async()=>{await ee(e,s,c,n),m()},{fast:t})}),r&&await new Promise(m=>{L(async()=>{l=await W({ignoreIconFonts:!r}),m()},{fast:t})}),o){let m=Y(s).sort(),u=m.join(",");k.has(u)?d=k.get(u):await new Promise(y=>{L(()=>{d=K(m),k.set(u,d),y()},{fast:t})})}await new Promise(m=>{L(()=>{let u=e.getBoundingClientRect(),y=Math.ceil(u.width),x=Math.ceil(u.height);s.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),s.style.transformOrigin="top left",a!==1&&B()&&(s.style.scale=`${a}`);let w="http://www.w3.org/2000/svg",A=document.createElementNS(w,"foreignObject");A.setAttribute("width","100%"),A.setAttribute("height","100%");let F=document.createElement("style");F.textContent=d+l+"svg{overflow:visible;}"+i,A.appendChild(F),A.appendChild(s);let E=new XMLSerializer().serializeToString(A);f=`<svg xmlns="${w}" width="${y}" height="${x}" viewBox="0 0 ${y} ${x}">`+E+"</svg>",h=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(f)}`,m()},{fast:t})});let p=document.getElementById("snapdom-sandbox");return p&&p.style.position==="absolute"&&p.remove(),h}async function ce(e,{dpr:n=1,scale:o=1}){let r=new Image;return r.src=e,await r.decode(),B?(r.width=r.width*o,r.height=r.height*o):(r.width=r.width/o,r.height=r.height/o),r}async function ne(e,{dpr:n=1,scale:o=1}={}){let r=new Image;r.src=e,await r.decode();let t=document.createElement("canvas"),a=r.width*o,s=r.height*o;t.width=Math.ceil(a*n),t.height=Math.ceil(s*n);let i=t.getContext("2d");return i.scale(n,n),i.drawImage(r,0,0,a,s),t.style.width=`${a}px`,t.style.height=`${s}px`,t}async function oe(e){let n=decodeURIComponent(e.split(",")[1]);return new Blob([n],{type:"image/svg+xml"})}async function ae(e,{dpr:n=1,scale:o=1},r){let t=await ne(e,{dpr:n,scale:o});if(!r)return t;let a=document.createElement("canvas");a.width=t.width,a.height=t.height;let s=a.getContext("2d");return s.fillStyle=r,s.fillRect(0,0,a.width,a.height),s.drawImage(t,0,0),a}async function q(e,{dpr:n=1,scale:o=1,backgroundColor:r="#fff",quality:t},a="png"){let s=await ae(e,{dpr:n,scale:o},r),i=new Image;return i.src=s.toDataURL(`image/${a}`,t),await i.decode(),i.style.width=`${s.width/n}px`,i.style.height=`${s.height/n}px`,i}async function le(e,{dpr:n=1,scale:o=1,backgroundColor:r="#fff",format:t="png",filename:a="capture"}={}){if(t==="svg"){let f=await oe(e),p=URL.createObjectURL(f),m=document.createElement("a");m.href=p,m.download=`${a}.svg`,m.click(),URL.revokeObjectURL(p);return}let s=["jpg","jpeg","webp"].includes(t)?"#fff":void 0,c=await ae(e,{dpr:n,scale:o},r??s),l={jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",webp:"image/webp"}[t]||"image/png",d=c.toDataURL(l),h=document.createElement("a");h.href=d,h.download=`${a}.${t}`,h.click()}async function g(e,n={}){if(n={scale:1,...n},!e)throw new Error("Element cannot be null or undefined");return await g.capture(e,n)}g.capture=async(e,n={})=>{let o=await te(e,n),r=window.devicePixelRatio||1,t=n.scale||1;return{url:o,options:n,toRaw:()=>o,toImg:()=>ce(o,{dpr:r,scale:t}),toCanvas:()=>ne(o,{dpr:r,scale:t}),toBlob:()=>oe(o),toPng:a=>q(o,{dpr:r,scale:t,...a},"png"),toJpg:a=>q(o,{dpr:r,scale:t,...a},"jpeg"),toWebp:a=>q(o,{dpr:r,scale:t,...a},"webp"),download:({format:a="png",filename:s="capture",backgroundColor:i}={})=>le(o,{dpr:r,scale:t,backgroundColor:i,format:a,filename:s})}};g.toRaw=async(e,n)=>(await g.capture(e,n)).toRaw();g.toImg=async(e,n)=>(await g.capture(e,n)).toImg();g.toCanvas=async(e,n)=>(await g.capture(e,n)).toCanvas();g.toBlob=async(e,n)=>(await g.capture(e,n)).toBlob();g.toPng=async(e,n)=>(await g.capture(e,n)).toPng(n);g.toJpg=async(e,n)=>(await g.capture(e,n)).toJpg(n);g.toWebp=async(e,n)=>(await g.capture(e,n)).toWebp(n);g.download=async(e,n={})=>{let{format:o="png",filename:r="capture",backgroundColor:t,...a}=n;return await(await g.capture(e,a)).download({format:o,filename:r,backgroundColor:t})};async function fe(e=document,n={}){let{embedFonts:o=!0,reset:r=!1,crossOrigin:t}=n;if(r){R.clear(),T.clear(),C.clear(),k.clear(),N.clear();return}await document.fonts.ready,H();let a=[],s=[];e?.querySelectorAll&&(a=Array.from(e.querySelectorAll("img[src]")),s=Array.from(e.querySelectorAll("*")));let i=[];for(let c of a){let l=c.src;if(!R.has(l)){let d=t?t(l):"anonymous";i.push(S(l,3e3,d).then(h=>R.set(l,h)).catch(()=>{}))}}for(let c of s){let l=getComputedStyle(c).backgroundImage,d=$(l);if(d&&!T.has(d)){let h=t?t(d):"anonymous";i.push(S(d,3e3,h).then(f=>T.set(d,f)).catch(()=>{}))}}o&&await W({ignoreIconFonts:!o,preCached:!0}),await Promise.all(i)}export{fe as preCache,g as snapdom};
15
+ `}if(a&&(S.set("fonts-embed-css",a),t)){let o=document.createElement("style");o.setAttribute("data-snapdom","embedFonts"),o.textContent=a,document.head.appendChild(o)}return a}async function nt(t,e,n,r,a,o=!1,c){if(!(t instanceof Element)||!(e instanceof Element))return;for(let s of["::before","::after","::first-letter"])try{let f=L(t,s);if(!f||typeof f[Symbol.iterator]!="function")continue;if(s==="::first-letter"){let y=getComputedStyle(t);if(!(f.color!==y.color||f.fontSize!==y.fontSize||f.fontWeight!==y.fontWeight))continue;let E=Array.from(e.childNodes).find(C=>C.nodeType===Node.TEXT_NODE&&C.textContent&&C.textContent.trim().length>0);if(!E)continue;let P=E.textContent,T=P.match(/^([^\p{L}\p{N}\s]*[\p{L}\p{N}](?:['’])?)/u)?.[0],N=P.slice(T?.length||0);if(!T||/[\uD800-\uDFFF]/.test(T))continue;let k=document.createElement("span");k.textContent=T,k.dataset.snapdomPseudo="::first-letter";let I=J(f),q=V(I,"span",a);n.set(k,q);let z=document.createTextNode(N);e.replaceChild(z,E),e.insertBefore(k,z);continue}let d=f.getPropertyValue("content"),h=f.getPropertyValue("background-image"),u=f.getPropertyValue("background-color"),m=d!=="none",g=h&&h!=="none",p=u&&u!=="transparent"&&u!=="rgba(0, 0, 0, 0)";if(m||g||p){let y=f.getPropertyValue("font-family"),w=parseInt(f.getPropertyValue("font-size"))||32,E=parseInt(f.getPropertyValue("font-weight"))||!1,P=f.getPropertyValue("color")||"#000",b=document.createElement("span");b.dataset.snapdomPseudo=s;let T=J(f),N=V(T,"span",a);n.set(b,N);let k=A(y),I=ft(d);if(k&&I.length===1){let C=document.createElement("img");C.src=await mt(I,y,E,w,P),C.style=`width:${w}px;height:auto;object-fit:contain;`,b.appendChild(C)}else if(I.startsWith("url(")){let C=H(I);if(C&&C.trim()!=="")try{let $=document.createElement("img"),j=await U(Y(C,{useProxy:c}));$.src=j,$.style=`width:${w}px;height:auto;object-fit:contain;`,b.appendChild($)}catch($){console.error(`[snapdom] Error in pseudo ${s} for`,t,$)}}else!k&&I&&I!=="none"&&(b.textContent=I);if(g)try{let C=W(h),$=await Promise.all(C.map(j=>M(j)));b.style.backgroundImage=$.join(", ")}catch(C){console.warn(`[snapdom] Failed to inline background-image for ${s}`,C)}if(p&&(b.style.backgroundColor=u),!(b.childNodes.length>0||b.textContent&&b.textContent.trim()!==""||g||p))continue;s==="::before"?e.insertBefore(b,e.firstChild):e.appendChild(b)}}catch(f){console.warn(`[snapdom] Failed to capture ${s} for`,t,f)}let i=Array.from(t.children),l=Array.from(e.children).filter(s=>!s.dataset.snapdomPseudo);for(let s=0;s<Math.min(i.length,l.length);s++)await nt(i[s],l[s],n,r,a,o,c)}function gt(t){if(!t)return;let e=document.querySelectorAll("svg > defs");e.length&&t.querySelectorAll("svg").forEach(n=>{let r=n.querySelectorAll("use");if(!r.length)return;let a=new Set;if(r.forEach(c=>{let i=c.getAttribute("xlink:href")||c.getAttribute("href");i&&i.startsWith("#")&&a.add(i.slice(1))}),!a.size)return;let o=document.createElementNS("http://www.w3.org/2000/svg","defs");for(let c of a)for(let i of e){let l=i.querySelector(`#${CSS.escape(c)}`);if(l){o.appendChild(l.cloneNode(!0));break}}o.childNodes.length&&n.insertBefore(o,n.firstChild)})}async function pt(t,e=!1,n=!1,r={}){let a=new Map,o=new WeakMap,c=new Map,i;try{i=_(t,a,o,c,e,r,t)}catch(s){throw console.warn("deepClone failed:",s),s}try{await nt(t,i,a,o,e,n,r.useProxy)}catch(s){console.warn("inlinePseudoElements failed:",s)}try{gt(i)}catch(s){console.warn("inlineExternalDef failed:",s)}let l="";if(e){let s=lt(a);l=Array.from(s.entries()).map(([f,d])=>`.${d}{${f}}`).join("");for(let[f,d]of a.entries()){if(f.tagName==="STYLE")continue;let h=s.get(d);h&&f.classList.add(h);let u=f.style?.backgroundImage;f.removeAttribute("style"),u&&u!=="none"&&(f.style.backgroundImage=u)}}else for(let[s,f]of a.entries())s.tagName!=="STYLE"&&s.setAttribute("style",f.replace(/;/g,"; "));for(let[s,f]of c.entries()){let d=f.scrollLeft,h=f.scrollTop;if((d||h)&&s instanceof HTMLElement){s.style.overflow="hidden",s.style.scrollbarWidth="none",s.style.msOverflowStyle="none";let m=document.createElement("div");for(m.style.transform=`translate(${-d}px, ${-h}px)`,m.style.willChange="transform",m.style.display="inline-block",m.style.width="100%";s.firstChild;)m.appendChild(s.firstChild);s.appendChild(m)}}if(t===c.get(i)){let s=o.get(t)||window.getComputedStyle(t);o.set(t,s);let f=dt(s.transform);i.style.margin="0",i.style.position="static",i.style.top="auto",i.style.left="auto",i.style.right="auto",i.style.bottom="auto",i.style.zIndex="auto",i.style.float="none",i.style.clear="none",i.style.transform=f||""}for(let[s,f]of c.entries())f.tagName==="PRE"&&(s.style.marginTop="0",s.style.marginBlockStart="0");return{clone:i,classCSS:l,styleCache:o}}async function yt(t,e={}){let n=Array.from(t.querySelectorAll("img")),r=async a=>{let o=a.src;try{let c=await U(o,{useProxy:e.useProxy});a.src=c,a.width||(a.width=a.naturalWidth||100),a.height||(a.height=a.naturalHeight||100)}catch{let c=document.createElement("div");c.style=`width: ${a.width||100}px; height: ${a.height||100}px; background: #ccc; display: inline-block; text-align: center; line-height: ${a.height||100}px; color: #666; font-size: 12px;`,c.innerText="img",a.replaceWith(c)}};for(let a=0;a<n.length;a+=4){let o=n.slice(a,a+4).map(r);await Promise.allSettled(o)}}async function wt(t,e,n,r={}){let a=[[t,e]],o=["background-image","mask","mask-image","-webkit-mask-image","mask-source","mask-box-image-source","mask-border-source","-webkit-mask-box-image-source"];for(;a.length;){let[c,i]=a.shift(),l=n.get(c)||L(c);n.has(c)||n.set(c,l);for(let h of o){let u=l.getPropertyValue(h);if(!u||u==="none")continue;let m=W(u),g=await Promise.all(m.map(p=>M(p,r)));g.some(p=>p&&p!=="none"&&!/^url\(undefined/.test(p))&&i.style.setProperty(h,g.join(", "))}let s=l.getPropertyValue("background-color");s&&s!=="transparent"&&s!=="rgba(0, 0, 0, 0)"&&(i.style.backgroundColor=s);let f=Array.from(c.children),d=Array.from(i.children);for(let h=0;h<Math.min(f.length,d.length);h++)a.push([f[h],d[h]])}}async function xt(t,e={}){if(!t)throw new Error("Element cannot be null or undefined");let{compress:n=!0,embedFonts:r=!1,fast:a=!0,scale:o=1,useProxy:c=""}=e,i,l,s,f="",d="",h,u;if({clone:i,classCSS:l,styleCache:s}=await pt(t,n,r,e),await new Promise(g=>{O(async()=>{await yt(i,e),g()},{fast:a})}),await new Promise(g=>{O(async()=>{await wt(t,i,s,e),g()},{fast:a})}),r&&await new Promise(g=>{O(async()=>{f=await K(),g()},{fast:a})}),n){let g=it(i).sort(),p=g.join(",");D.has(p)?d=D.get(p):await new Promise(y=>{O(()=>{d=ct(g),D.set(p,d),y()},{fast:a})})}await new Promise(g=>{O(()=>{let p=t.getBoundingClientRect(),y=p.width,w=p.height,E=Number.isFinite(e.width),P=Number.isFinite(e.height),b=typeof o=="number"&&o!==1;if(!b){let $=p.width/p.height;E&&P?(y=e.width,w=e.height):E?(y=e.width,w=y/$):P&&(w=e.height,y=w*$)}if(y=Math.ceil(y),w=Math.ceil(w),i.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),i.style.transformOrigin="top left",!b&&(E||P)){let $=p.width,j=p.height,St=y/$,Et=w/j,$t=i.style.transform||"",vt=`scale(${St}, ${Et})`;i.style.transform=`${vt} ${$t}`.trim()}else b&&X()&&(i.style.scale=`${o}`);let T="http://www.w3.org/2000/svg",N=document.createElementNS(T,"foreignObject");N.setAttribute("width","100%"),N.setAttribute("height","100%");let k=document.createElement("style");k.textContent=d+f+"svg{overflow:visible;}"+l,N.appendChild(k),N.appendChild(i);let q=new XMLSerializer().serializeToString(N);u=`<svg xmlns="${T}" width="${y}" height="${w}" viewBox="0 0 ${y} ${w}">`+q+"</svg>",h=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(u)}`,g()},{fast:a})});let m=document.getElementById("snapdom-sandbox");return m&&m.style.position==="absolute"&&m.remove(),h}async function Nt(t,{dpr:e=1,scale:n=1}){let r=new Image;return r.src=t,await r.decode(),X?(r.width=r.width*n,r.height=r.height*n):(r.width=r.width/n,r.height=r.height/n),r}async function bt(t,{dpr:e=1,scale:n=1}={}){let r=new Image;r.src=t,await r.decode();let a=document.createElement("canvas"),o=r.width*n,c=r.height*n;a.width=Math.ceil(o*e),a.height=Math.ceil(c*e);let i=a.getContext("2d");return i.scale(e,e),i.drawImage(r,0,0,o,c),a.style.width=`${o}px`,a.style.height=`${c}px`,a}async function Ct(t,{type:e="svg",scale:n=1,backgroundColor:r="#fff",quality:a}={}){let o={jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",webp:"image/webp"}[e]||"image/png";if(e==="svg"){let i=decodeURIComponent(t.split(",")[1]);return new Blob([i],{type:"image/svg+xml"})}let c=await at(t,{dpr:1,scale:n},r);return new Promise(i=>{c.toBlob(l=>i(l),`${o}`,a)})}async function at(t,{dpr:e=1,scale:n=1},r){let a=await bt(t,{dpr:e,scale:n});if(!r)return a;let o=document.createElement("canvas");o.width=a.width,o.height=a.height;let c=o.getContext("2d");return c.fillStyle=r,c.fillRect(0,0,o.width,o.height),c.drawImage(a,0,0),o}async function ot(t,{dpr:e=1,scale:n=1,backgroundColor:r="#fff",quality:a},o="png"){let c=await at(t,{dpr:e,scale:n},r),i=new Image;return i.src=c.toDataURL(`image/${o}`,a),await i.decode(),i.style.width=`${c.width/e}px`,i.style.height=`${c.height/e}px`,i}async function Pt(t,{dpr:e=1,scale:n=1,backgroundColor:r="#fff",format:a="png",filename:o="capture"}={}){if(a==="svg"){let h=await Ct(t),u=URL.createObjectURL(h),m=document.createElement("a");m.href=u,m.download=`${o}.svg`,m.click(),URL.revokeObjectURL(u);return}let c=["jpg","jpeg","webp"].includes(a)?"#fff":void 0,l=await at(t,{dpr:e,scale:n},r??c),s={jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",webp:"image/webp"}[a]||"image/png",f=l.toDataURL(s),d=document.createElement("a");d.href=f,d.download=`${o}.${a}`,d.click()}async function x(t,e={}){if(e={scale:1,...e},!t)throw new Error("Element cannot be null or undefined");return e.iconFonts&&ht(e.iconFonts),await x.capture(t,e)}x.capture=async(t,e={})=>{let n=await xt(t,e),r=window.devicePixelRatio||1,a=e.scale||1;return{url:n,options:e,toRaw:()=>n,toImg:()=>Nt(n,{dpr:r,scale:a}),toCanvas:()=>bt(n,{dpr:r,scale:a}),toBlob:o=>Ct(n,{dpr:r,scale:a,...o}),toPng:o=>ot(n,{dpr:r,scale:a,...o},"png"),toJpg:o=>ot(n,{dpr:r,scale:a,...o},"jpeg"),toWebp:o=>ot(n,{dpr:r,scale:a,...o},"webp"),download:({format:o="png",filename:c="capture",backgroundColor:i}={})=>Pt(n,{dpr:r,scale:a,backgroundColor:i,format:o,filename:c})}};x.toRaw=async(t,e)=>(await x.capture(t,e)).toRaw();x.toImg=async(t,e)=>(await x.capture(t,e)).toImg();x.toCanvas=async(t,e)=>(await x.capture(t,e)).toCanvas();x.toBlob=async(t,e)=>(await x.capture(t,e)).toBlob(e);x.toPng=async(t,e)=>(await x.capture(t,e)).toPng(e);x.toJpg=async(t,e)=>(await x.capture(t,e)).toJpg(e);x.toWebp=async(t,e)=>(await x.capture(t,e)).toWebp(e);x.download=async(t,e={})=>{let{format:n="png",filename:r="capture",backgroundColor:a,...o}=e;return await(await x.capture(t,o)).download({format:n,filename:r,backgroundColor:a})};async function Lt(t=document,e={}){let{embedFonts:n=!0,reset:r=!1}=e;if(r){v.clear(),F.clear(),S.clear(),D.clear();return}await document.fonts.ready,rt();let a=[],o=[];t?.querySelectorAll&&(a=Array.from(t.querySelectorAll("img[src]")),o=Array.from(t.querySelectorAll("*")));let c=[];for(let i of a){let l=i.src;v.has(l)||c.push(U(l,{useProxy:e.useProxy}).then(s=>v.set(l,s)).catch(()=>{}))}for(let i of o){let l=L(i).backgroundImage;if(l&&l!=="none"){let s=W(l);for(let f of s)f.startsWith("url(")&&c.push(M(f,e).catch(()=>{}))}}n&&await K({preCached:!0}),await Promise.all(c)}export{Lt as preCache,x as snapdom};