@zumer/snapdom 1.9.6-dev.2 → 1.9.7

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,3 @@
1
- (()=>{var _e=Object.defineProperty;var X=Object.getOwnPropertySymbols;var ce=Object.prototype.hasOwnProperty,le=Object.prototype.propertyIsEnumerable;var ie=(e,t,r)=>t in e?_e(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,L=(e,t)=>{for(var r in t||(t={}))ce.call(t,r)&&ie(e,r,t[r]);if(X)for(var r of X(t))le.call(t,r)&&ie(e,r,t[r]);return e};var fe=(e,t)=>{var r={};for(var i in e)ce.call(e,i)&&t.indexOf(i)<0&&(r[i]=e[i]);if(e!=null&&X)for(var i of X(e))t.indexOf(i)<0&&le.call(e,i)&&(r[i]=e[i]);return r};var $=(e,t)=>()=>(e&&(t=e(e=0)),t);var qe=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var h=(e,t,r)=>new Promise((i,c)=>{var n=o=>{try{a(r.next(o))}catch(l){c(l)}},s=o=>{try{a(r.throw(o))}catch(l){c(l)}},a=o=>o.done?i(o.value):Promise.resolve(o.value).then(n,s);a((r=r.apply(e,t)).next())});function ze(){f.computedStyle=new WeakMap,f.snapshot=new WeakMap,f.snapshotKey.clear(),f.preStyleMap.clear(),f.preStyle=new WeakMap,f.preNodeMap.clear()}var f,I=$(()=>{f={image:new Map,background:new Map,resource:new Map,defaultStyle:new Map,baseStyle:new Map,computedStyle:new WeakMap,font:new Set,snapshot:new WeakMap,snapshotKey:new Map,preStyleMap:new Map,preStyle:new WeakMap,preNodeMap:new Map,reset:ze}});function de(){for(let e of He)pe(e)}function pe(e){if(f.defaultStyle.has(e))return f.defaultStyle.get(e);if(new Set(["script","style","meta","link","noscript","template"]).has(e)){let s={};return f.defaultStyle.set(e,s),s}let r=document.getElementById("snapdom-sandbox");r||(r=document.createElement("div"),r.id="snapdom-sandbox",r.style.position="absolute",r.style.left="-9999px",r.style.top="-9999px",r.style.width="0",r.style.height="0",r.style.overflow="hidden",document.body.appendChild(r));let i=document.createElement(e);i.style.all="initial",r.appendChild(i);let c=getComputedStyle(i),n={};for(let s of c)n[s]=c.getPropertyValue(s);return r.removeChild(i),f.defaultStyle.set(e,n),n}function O(e,t,r=!1){let i=[],c=pe(t);for(let[n,s]of Object.entries(e))if(!r)s&&i.push(`${n}:${s}`);else{let a=c[n];s&&s!==a&&i.push(`${n}:${s}`)}return i.sort().join(";")}function ue(e){let t=new Set;return e.nodeType!==Node.ELEMENT_NODE&&e.nodeType!==Node.DOCUMENT_FRAGMENT_NODE?[]:(e.tagName&&t.add(e.tagName.toLowerCase()),typeof e.querySelectorAll=="function"&&e.querySelectorAll("*").forEach(r=>t.add(r.tagName.toLowerCase())),Array.from(t))}function me(e){let t=new Map;for(let i of e){let c=f.defaultStyle.get(i);if(!c)continue;let n=Object.entries(c).map(([s,a])=>`${s}:${a};`).sort().join("");t.has(n)||t.set(n,[]),t.get(n).push(i)}let r="";for(let[i,c]of t.entries())r+=`${c.join(",")} { ${i} }
2
- `;return r}function he(){let e=new Set(f.preStyleMap.values()),t=new Map,r=1;for(let i of e)t.set(i,`c${r++}`);return t}var He,U=$(()=>{I();He=["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 B(r){return h(this,arguments,function*(e,t={}){let i=V(e),c=/^((repeating-)?(linear|radial|conic)-gradient)\(/i.test(e);if(i){let n=G(i);if(f.background.has(n))return t.skipInline?void 0:`url(${f.background.get(n)})`;{let s=yield F(n,{useProxy:t.useProxy});return f.background.set(n,s),t.skipInline?void 0:`url("${s}")`}}return e})}function D(e,{fast:t=!1}={}){if(t)return e();"requestIdleCallback"in window?requestIdleCallback(e,{timeout:50}):setTimeout(e,1)}function M(e,t=null){if(!(e instanceof Element))return window.getComputedStyle(e,t);let r=f.computedStyle.get(e);if(r||(r=new Map,f.computedStyle.set(e,r)),!r.has(t)){let i=window.getComputedStyle(e,t);r.set(t,i)}return r.get(t)}function ge(e){let t=e.replace(/^['"]|['"]$/g,"");if(t.startsWith("\\"))try{return String.fromCharCode(parseInt(t.replace("\\",""),16))}catch(r){return t}return t}function V(e){let t=e.indexOf("url(");if(t===-1)return null;let r=e.slice(t+4).trim();return r.endsWith(")")&&(r=r.slice(0,-1).trim()),(r.startsWith('"')&&r.endsWith('"')||r.startsWith("'")&&r.endsWith("'"))&&(r=r.slice(1,-1)),r}function F(e,{timeout:t=3e3,useProxy:r=""}={}){function i(o){try{return new URL(o,window.location.href).origin===window.location.origin?"use-credentials":"anonymous"}catch(l){return"anonymous"}}function c(o){return h(this,null,function*(){let l=d=>fetch(d,{mode:"cors",credentials:i(d)==="use-credentials"?"include":"omit"}).then(p=>p.blob()).then(p=>new Promise((g,u)=>{let m=new FileReader;m.onloadend=()=>{let y=m.result;if(typeof y!="string"||!y.startsWith("data:image/")){u(new Error("Invalid image data URL"));return}g(y)},m.onerror=()=>u(new Error("FileReader error")),m.readAsDataURL(p)}));try{return yield l(o)}catch(d){if(r&&typeof r=="string"){let p=r.replace(/\/$/,"")+G(o);try{return yield l(p)}catch(g){throw console.error(`[SnapDOM - fetchImage] Proxy fallback failed for: ${o}`),new Error("CORS restrictions prevented image capture (even via proxy)")}}else throw console.error(`[SnapDOM - fetchImage] No valid proxy URL provided for fallback: ${o}`),new Error("Fetch fallback failed and no proxy provided")}})}let n=i(e);return console.log(`[SnapDOM - fetchImage] Start loading image: ${e} with crossOrigin=${n}`),f.image.has(e)?(console.log(`[SnapDOM - fetchImage] Cache hit for: ${e}`),Promise.resolve(f.image.get(e))):e.startsWith("data:image/")?(f.image.set(e,e),Promise.resolve(e)):/\.svg(\?.*)?$/i.test(e)?h(null,null,function*(){try{let l=yield(yield fetch(e,{mode:"cors",credentials:n==="use-credentials"?"include":"omit"})).text(),d=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(l)}`;return f.image.set(e,d),d}catch(o){return c(e)}}):new Promise((o,l)=>{let d=setTimeout(()=>{console.log(`[SnapDOM - fetchImage] Timeout after ${t}ms for image: ${e}`),l(new Error("Image load timed out"))},t),p=new Image;p.crossOrigin=n,p.onload=()=>h(null,null,function*(){clearTimeout(d);try{yield p.decode();let g=document.createElement("canvas");g.width=p.width,g.height=p.height,g.getContext("2d").drawImage(p,0,0,g.width,g.height);let m=g.toDataURL("image/png");f.image.set(e,m),o(m)}catch(g){try{let u=yield c(e);f.image.set(e,u),o(u)}catch(u){l(u)}}}),p.onerror=()=>h(null,null,function*(){clearTimeout(d),console.error(`[SnapDOM - fetchImage] Image failed to load: ${e}`);try{let g=yield c(e);f.image.set(e,g),o(g)}catch(g){l(g)}}),p.src=e})}function ne(e){let t={};for(let r of e)t[r]=e.getPropertyValue(r);return t}function Y(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}function ye(e){if(!e||e==="none")return"";let t=e.replace(/translate[XY]?\([^)]*\)/g,"");return t=t.replace(/matrix\(([^)]+)\)/g,(r,i)=>{let c=i.split(",").map(n=>n.trim());return c.length!==6?`matrix(${i})`:(c[4]="0",c[5]="0",`matrix(${c.join(", ")})`)}),t=t.replace(/matrix3d\(([^)]+)\)/g,(r,i)=>{let c=i.split(",").map(n=>n.trim());return c.length!==16?`matrix3d(${i})`:(c[12]="0",c[13]="0",`matrix3d(${c.join(", ")})`)}),t.trim().replace(/\s{2,}/g," ")}function G(e){if(/%[0-9A-Fa-f]{2}/.test(e))return e;try{return encodeURI(e)}catch(t){return e}}function W(e){let t=[],r=0,i=0;for(let c=0;c<e.length;c++){let n=e[c];n==="("&&r++,n===")"&&r--,n===","&&r===0&&(t.push(e.slice(i,c).trim()),i=c+1)}return t.push(e.slice(i).trim()),t}var N=$(()=>{I()});function Ke(e){let t={};for(let r=0;r<e.length;r++){let i=e[r],c=e.getPropertyValue(i);(i==="background-image"||i==="content")&&c.includes("url(")&&!c.includes("data:")&&(c="none"),t[i]=c}return t}function J(e,t,r){var o;if(e.tagName==="STYLE")return;f.preStyle.has(e)||f.preStyle.set(e,M(e));let i=f.preStyle.get(e);if(!f.snapshot.has(e)){let l=Ke(i);f.snapshot.set(e,l)}let c=f.snapshot.get(e),n=Object.entries(c).sort(([l],[d])=>l.localeCompare(d)).map(([l,d])=>`${l}:${d}`).join(";");if(f.snapshotKey.has(n)){f.preStyleMap.set(t,f.snapshotKey.get(n));return}let s=((o=e.tagName)==null?void 0:o.toLowerCase())||"div",a=O(c,s,r);f.snapshotKey.set(n,a),f.preStyleMap.set(t,a)}var we=$(()=>{U();N();I()});function Xe(e){return e.nodeType===Node.ELEMENT_NODE&&e.tagName==="SLOT"}function _(e,t,r={},i){var c,n;if(!e)throw new Error("Invalid node: node is null or undefined");try{if(e.nodeType===Node.TEXT_NODE||e.nodeType!==Node.ELEMENT_NODE)return e.cloneNode(!0);if(e.getAttribute("data-capture")==="exclude"){let a=document.createElement("div"),o=e.getBoundingClientRect();return a.style.cssText=`display: inline-block; width: ${o.width}px; height: ${o.height}px; visibility: hidden;`,a}if(r.exclude&&Array.isArray(r.exclude))for(let a of r.exclude)try{if((c=e.matches)!=null&&c.call(e,a)){let o=document.createElement("div"),l=e.getBoundingClientRect();return o.style.cssText=`display: inline-block; width: ${l.width}px; height: ${l.height}px; visibility: hidden;`,o}}catch(o){console.warn(`Invalid selector in exclude option: ${a}`,o)}if(typeof r.filter=="function")try{if(!r.filter(e,i||e)){let a=document.createElement("div"),o=e.getBoundingClientRect();return a.style.cssText=`display: inline-block; width: ${o.width}px; height: ${o.height}px; visibility: hidden;`,a}}catch(a){console.warn("Error in filter function:",a)}if(e.tagName==="IFRAME"){let a=document.createElement("div");return a.textContent="",a.style.cssText=`width: ${e.offsetWidth}px; height: ${e.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;`,a}if(e.getAttribute("data-capture")==="placeholder"){let a=e.cloneNode(!1);f.preNodeMap.set(a,e),J(e,a,t);let o=document.createElement("div");return o.textContent=e.getAttribute("data-placeholder-text")||"",o.style.cssText="color: #666;font-size: 12px;text-align: center;line-height: 1.4;padding: 0.5em;box-sizing: border-box;",a.appendChild(o),a}if(e.tagName==="CANVAS"){let a=e.toDataURL(),o=document.createElement("img");return o.src=a,o.width=e.width,o.height=e.height,f.preNodeMap.set(o,e),J(e,o,t),o}let s;try{if(s=e.cloneNode(!1),!s)throw new Error("Failed to clone node: cloneNode returned null");f.preNodeMap.set(s,e)}catch(a){throw console.error("[Snapdom] Failed to clone node:",e,a),a}if(e instanceof HTMLInputElement)s.value=e.value,s.setAttribute("value",e.value),e.checked!==void 0&&(s.checked=e.checked,e.checked&&s.setAttribute("checked",""));else if(e instanceof HTMLTextAreaElement){let a=e.getBoundingClientRect();s.textContent=e.value,s.style.width=`${a.width}px`,s.style.height=`${a.height}px`}else e instanceof HTMLSelectElement&&(s.value=e.value,Array.from(s.options).forEach(a=>{a.value===e.value?a.setAttribute("selected",""):a.removeAttribute("selected")}));J(e,s,t);try{if(Xe(e)){let a=((n=e.assignedNodes)==null?void 0:n.call(e,{flatten:!0}))||[],o=a.length>0?a:Array.from(e.childNodes),l=document.createDocumentFragment();for(let d of o)try{let p=_(d,t,r,i||e);p&&l.appendChild(p)}catch(p){console.warn("[Snapdom] Failed to clone slot content:",d,p)}return l}else{let a=e.shadowRoot?e.shadowRoot.childNodes:e.childNodes;for(let o of a)try{let l=_(o,t,r,i||e);l&&s.appendChild(l)}catch(l){console.warn("[Snapdom] Failed to clone child node:",o,l)}if(e.shadowRoot&&e.childNodes.length>0&&!e.shadowRoot.querySelector("slot")){let o=document.createDocumentFragment();for(let l of e.childNodes)try{let d=_(l,t,r,i||e);d&&o.appendChild(d)}catch(d){console.warn("[Snapdom] Failed to clone light DOM child:",l,d)}s.appendChild(o)}}}catch(a){throw console.error("[Snapdom] Error cloning children:",a),a}return s}catch(s){throw console.error("[Snapdom] Error in deepClone:",s),s}}var xe=$(()=>{we();I()});function Se(e){let t=Array.isArray(e)?e:[e];for(let r of t)r instanceof RegExp?oe.push(r):typeof r=="string"?oe.push(new RegExp(r,"i")):console.warn("[snapdom] Ignored invalid iconFont value:",r)}function A(e){let t=typeof e=="string"?e:"",r=[...Ye,...oe];for(let i of r)if(i instanceof RegExp&&i.test(t))return!0;return!!(/icon/i.test(t)||/glyph/i.test(t)||/symbols/i.test(t)||/feather/i.test(t)||/fontawesome/i.test(t))}var Ye,oe,Q=$(()=>{Ye=[/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],oe=[]});function be(e,t,r,i=32,c="#000"){return h(this,null,function*(){t=t.replace(/^['"]+|['"]+$/g,"");let n=window.devicePixelRatio||1,a=document.createElement("canvas").getContext("2d");a.font=r?`${r} ${i}px "${t}"`:`${i}px "${t}"`;let o=a.measureText(e),l=o.actualBoundingBoxAscent||i*.8,d=o.actualBoundingBoxDescent||i*.2,p=l+d,g=o.width,u=document.createElement("canvas");u.width=Math.ceil(g*n),u.height=Math.ceil(p*n);let m=u.getContext("2d");return m.scale(n,n),m.font=a.font,m.textAlign="left",m.textBaseline="alphabetic",m.fillStyle=c,m.fillText(e,0,l),u.toDataURL()})}function Ce(e){return Array.from(document.styleSheets).some(t=>t.href===e)}function Ge(e){return new Promise(t=>{if(Ce(e))return t(null);let r=document.createElement("link");r.rel="stylesheet",r.href=e,r.setAttribute("data-snapdom","injected-import"),r.onload=()=>t(r),r.onerror=()=>t(null),document.head.appendChild(r)})}function Z(){return h(this,arguments,function*({preCached:e=!1}={}){if(f.resource.has("fonts-embed-css")){if(e){let n=document.createElement("style");n.setAttribute("data-snapdom","embedFonts"),n.textContent=f.resource.get("fonts-embed-css"),document.head.appendChild(n)}return f.resource.get("fonts-embed-css")}let t=/@import\s+url\(["']?([^"')]+)["']?\)/g,r=[];for(let n of document.querySelectorAll("style")){let s=n.textContent||"",a=Array.from(s.matchAll(t));for(let o of a){let l=o[1];A(l)||Ce(l)||r.push(l)}}yield Promise.all(r.map(Ge));let i=Array.from(document.querySelectorAll('link[rel="stylesheet"]')).filter(n=>n.href),c="";for(let n of i)try{let a=yield(yield fetch(n.href)).text();if(A(n.href)||A(a))continue;let o=/url\((["']?)([^"')]+)\1\)/g,l=yield Promise.all(Array.from(a.matchAll(o)).map(p=>h(null,null,function*(){let g=V(p[0]);if(!g)return null;let u=g;if(!u.startsWith("http")&&!u.startsWith("data:")&&(u=new URL(u,n.href).href),A(u))return null;if(f.resource.has(u))return f.font.add(u),{original:p[0],inlined:`url(${f.resource.get(u)})`};if(f.font.has(u))return null;try{let y=yield(yield fetch(u)).blob(),b=yield new Promise(w=>{let C=new FileReader;C.onload=()=>w(C.result),C.readAsDataURL(y)});return f.resource.set(u,b),f.font.add(u),{original:p[0],inlined:`url(${b})`}}catch(m){return console.warn("[snapdom] Failed to fetch font resource:",u),null}}))),d=a;for(let p of l)p&&(d=d.replace(p.original,p.inlined));c+=d+`
3
- `}catch(s){console.warn("[snapdom] Failed to fetch CSS:",n.href)}for(let n of document.styleSheets)try{if(!n.href||i.every(s=>s.href!==n.href)){for(let s of n.cssRules)if(s.type===CSSRule.FONT_FACE_RULE){let a=s.style.getPropertyValue("src"),o=s.style.getPropertyValue("font-family");if(!a||A(o))continue;let l=/url\((["']?)([^"')]+)\1\)/g,d=a,p=Array.from(a.matchAll(l));for(let g of p){let u=g[2].trim();if(!u)continue;let m=u;if(!m.startsWith("http")&&!m.startsWith("data:")&&(m=new URL(m,n.href||location.href).href),!A(m)){if(f.resource.has(m)){f.font.add(m),d=d.replace(g[0],`url(${f.resource.get(m)})`);continue}if(!f.font.has(m))try{let b=yield(yield fetch(m)).blob(),w=yield new Promise(C=>{let x=new FileReader;x.onload=()=>C(x.result),x.readAsDataURL(b)});f.resource.set(m,w),f.font.add(m),d=d.replace(g[0],`url(${w})`)}catch(y){console.warn("[snapdom] Failed to fetch font URL:",m)}}}c+=`@font-face {
4
- font-family: ${o};
5
- src: ${d};
6
- font-style: ${s.style.getPropertyValue("font-style")||"normal"};
7
- font-weight: ${s.style.getPropertyValue("font-weight")||"normal"};
8
- }
9
- `}}}catch(s){console.warn("[snapdom] Cannot access stylesheet",n.href,s)}for(let n of document.fonts)if(n.family&&n.status==="loaded"&&n._snapdomSrc){if(A(n.family))continue;let s=n._snapdomSrc;if(!s.startsWith("data:")){if(f.resource.has(n._snapdomSrc))s=f.resource.get(n._snapdomSrc),f.font.add(n._snapdomSrc);else if(!f.font.has(n._snapdomSrc))try{let o=yield(yield fetch(n._snapdomSrc)).blob();s=yield new Promise(l=>{let d=new FileReader;d.onload=()=>l(d.result),d.readAsDataURL(o)}),f.resource.set(n._snapdomSrc,s),f.font.add(n._snapdomSrc)}catch(a){console.warn("[snapdom] Failed to fetch dynamic font src:",n._snapdomSrc);continue}}c+=`@font-face {
10
- font-family: '${n.family}';
11
- src: url(${s});
12
- font-style: ${n.style||"normal"};
13
- font-weight: ${n.weight||"normal"};
14
- }
15
- `}if(c&&(f.resource.set("fonts-embed-css",c),e)){let n=document.createElement("style");n.setAttribute("data-snapdom","embedFonts"),n.textContent=c,document.head.appendChild(n)}return c})}var ee=$(()=>{N();I();Q()});function re(e,t,r,i=!1,c){return h(this,null,function*(){if(!(e instanceof Element)||!(t instanceof Element))return;for(let a of["::before","::after","::first-letter"])try{let o=M(e,a);if(!o||typeof o[Symbol.iterator]!="function")continue;if(a==="::first-letter"){let y=getComputedStyle(e);if(!(o.color!==y.color||o.fontSize!==y.fontSize||o.fontWeight!==y.fontWeight))continue;let w=Array.from(t.childNodes).find(E=>E.nodeType===Node.TEXT_NODE&&E.textContent&&E.textContent.trim().length>0);if(!w)continue;let C=w.textContent,x=C.match(/^([^\p{L}\p{N}\s]*[\p{L}\p{N}](?:['’])?)/u),k=x==null?void 0:x[0],P=C.slice((k==null?void 0:k.length)||0);if(!k||/[\uD800-\uDFFF]/.test(k))continue;let R=document.createElement("span");R.textContent=k,R.dataset.snapdomPseudo="::first-letter";let v=ne(o),j=O(v,"span",r);f.preStyleMap.set(R,j);let z=document.createTextNode(P);t.replaceChild(z,w),t.insertBefore(R,z);continue}let l=o.getPropertyValue("content"),d=o.getPropertyValue("background-image"),p=o.getPropertyValue("background-color"),g=l!=="none",u=d&&d!=="none",m=p&&p!=="transparent"&&p!=="rgba(0, 0, 0, 0)";if(g||u||m){let y=o.getPropertyValue("font-family"),b=parseInt(o.getPropertyValue("font-size"))||32,w=parseInt(o.getPropertyValue("font-weight"))||!1,C=o.getPropertyValue("color")||"#000",x=document.createElement("span");x.dataset.snapdomPseudo=a;let k=ne(o),P=O(k,"span",r);f.preStyleMap.set(x,P);let R=A(y),v=ge(l);if(R&&v.length===1){let E=document.createElement("img");E.src=yield be(v,y,w,b,C),E.style=`width:${b}px;height:auto;object-fit:contain;`,x.appendChild(E)}else if(v.startsWith("url(")){let E=V(v);if(E&&E.trim()!=="")try{let T=document.createElement("img"),H=yield F(G(E,{useProxy:c}));T.src=H,T.style=`width:${b}px;height:auto;object-fit:contain;`,x.appendChild(T)}catch(T){console.error(`[snapdom] Error in pseudo ${a} for`,e,T)}}else!R&&v&&v!=="none"&&(x.textContent=v);if(u)try{let E=W(d),T=yield Promise.all(E.map(H=>B(H)));x.style.backgroundImage=T.join(", ")}catch(E){console.warn(`[snapdom] Failed to inline background-image for ${a}`,E)}if(m&&(x.style.backgroundColor=p),!(x.childNodes.length>0||x.textContent&&x.textContent.trim()!==""||u||m))continue;a==="::before"?t.insertBefore(x,t.firstChild):t.appendChild(x)}}catch(o){console.warn(`[snapdom] Failed to capture ${a} for`,e,o)}let n=Array.from(e.children),s=Array.from(t.children).filter(a=>!a.dataset.snapdomPseudo);for(let a=0;a<Math.min(n.length,s.length);a++)yield re(n[a],s[a],r,i,c)})}var Ee=$(()=>{N();U();ee();Q();I()});function ve(e){if(!e)return;let t=document.querySelectorAll("svg > defs");t.length&&e.querySelectorAll("svg").forEach(r=>{let i=r.querySelectorAll("use");if(!i.length)return;let c=new Set;if(i.forEach(s=>{let a=s.getAttribute("xlink:href")||s.getAttribute("href");a&&a.startsWith("#")&&c.add(a.slice(1))}),!c.size)return;let n=document.createElementNS("http://www.w3.org/2000/svg","defs");for(let s of c)for(let a of t){let o=a.querySelector(`#${CSS.escape(s)}`);if(o){n.appendChild(o.cloneNode(!0));break}}n.childNodes.length&&r.insertBefore(n,r.firstChild)})}var $e=$(()=>{});function ke(c){return h(this,arguments,function*(e,t=!1,r=!1,i={}){var a;let n,s="";try{n=_(e,t,i,e)}catch(o){throw console.warn("deepClone failed:",o),o}try{yield re(e,n,t,r,i.useProxy)}catch(o){console.warn("inlinePseudoElements failed:",o)}try{ve(n)}catch(o){console.warn("inlineExternalDef failed:",o)}if(t){let o=he();s=Array.from(o.entries()).map(([l,d])=>`.${d}{${l}}`).join("");for(let[l,d]of f.preStyleMap.entries()){if(l.tagName==="STYLE")continue;let p=o.get(d);p&&l.classList.add(p);let g=(a=l.style)==null?void 0:a.backgroundImage;l.removeAttribute("style"),g&&g!=="none"&&(l.style.backgroundImage=g)}}else for(let[o,l]of f.preStyleMap.entries())o.tagName!=="STYLE"&&o.setAttribute("style",l.replace(/;/g,"; "));for(let[o,l]of f.preNodeMap.entries()){let d=l.scrollLeft,p=l.scrollTop;if((d||p)&&o instanceof HTMLElement){o.style.overflow="hidden",o.style.scrollbarWidth="none",o.style.msOverflowStyle="none";let u=document.createElement("div");for(u.style.transform=`translate(${-d}px, ${-p}px)`,u.style.willChange="transform",u.style.display="inline-block",u.style.width="100%";o.firstChild;)u.appendChild(o.firstChild);o.appendChild(u)}}if(e===f.preNodeMap.get(n)){let o=f.preStyle.get(e)||window.getComputedStyle(e);f.preStyle.set(e,o);let l=ye(o.transform);n.style.margin="0",n.style.position="static",n.style.top="auto",n.style.left="auto",n.style.right="auto",n.style.bottom="auto",n.style.zIndex="auto",n.style.float="none",n.style.clear="none",n.style.transform=l||""}for(let[o,l]of f.preNodeMap.entries())l.tagName==="PRE"&&(o.style.marginTop="0",o.style.marginBlockStart="0");return{clone:n,classCSS:s}})}var Ie=$(()=>{U();N();xe();Ee();$e();I()});function Re(r){return h(this,arguments,function*(e,t={}){let i=Array.from(e.querySelectorAll("img")),c=n=>h(null,null,function*(){let s=n.src;try{let a=yield F(s,{useProxy:t.useProxy});n.src=a,n.width||(n.width=n.naturalWidth||100),n.height||(n.height=n.naturalHeight||100)}catch(a){let o=document.createElement("div");o.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;`,o.innerText="img",n.replaceWith(o)}});for(let n=0;n<i.length;n+=4){let s=i.slice(n,n+4).map(c);yield Promise.allSettled(s)}})}var Ne=$(()=>{N()});function Ae(i,c){return h(this,arguments,function*(e,t,r={}){let n=[[e,t]],s=["background-image","mask","mask-image","-webkit-mask-image","mask-source","mask-box-image-source","mask-border-source","-webkit-mask-box-image-source"];for(;n.length;){let[a,o]=n.shift(),l=f.preStyle.get(a)||M(a);f.preStyle.has(a)||f.preStyle.set(a,l);for(let u of s){let m=l.getPropertyValue(u);if(!m||m==="none")continue;let y=W(m),b=yield Promise.all(y.map(w=>B(w,r)));b.some(w=>w&&w!=="none"&&!/^url\(undefined/.test(w))&&o.style.setProperty(u,b.join(", "))}let d=l.getPropertyValue("background-color");d&&d!=="transparent"&&d!=="rgba(0, 0, 0, 0)"&&(o.style.backgroundColor=d);let p=Array.from(a.children),g=Array.from(o.children);for(let u=0;u<Math.min(p.length,g.length);u++)n.push([p[u],g[u]])}})}var Te=$(()=>{N();I()});function Me(r){return h(this,arguments,function*(e,t={}){if(!e)throw new Error("Element cannot be null or undefined");f.reset();let{compress:i=!0,embedFonts:c=!1,fast:n=!0,scale:s=1,useProxy:a=""}=t,o,l,d="",p="",g,u;if({clone:o,classCSS:l}=yield ke(e,i,c,t),yield new Promise(y=>{D(()=>h(null,null,function*(){yield Re(o,t),y()}),{fast:n})}),yield new Promise(y=>{D(()=>h(null,null,function*(){yield Ae(e,o,t),y()}),{fast:n})}),c&&(yield new Promise(y=>{D(()=>h(null,null,function*(){d=yield Z(),y()}),{fast:n})})),i){let y=ue(o).sort(),b=y.join(",");f.baseStyle.has(b)?p=f.baseStyle.get(b):yield new Promise(w=>{D(()=>{p=me(y),f.baseStyle.set(b,p),w()},{fast:n})})}yield new Promise(y=>{D(()=>{let b=e.getBoundingClientRect(),w=b.width,C=b.height,x=Number.isFinite(t.width),k=Number.isFinite(t.height),P=typeof s=="number"&&s!==1;if(!P){let K=b.width/b.height;x&&k?(w=t.width,C=t.height):x?(w=t.width,C=w/K):k&&(C=t.height,w=C*K)}if(w=Math.ceil(w),C=Math.ceil(C),o.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),o.style.transformOrigin="top left",!P&&(x||k)){let K=b.width,De=b.height,We=w/K,je=C/De,Oe=o.style.transform||"",Ve=`scale(${We}, ${je})`;o.style.transform=`${Ve} ${Oe}`.trim()}else P&&Y()&&(o.style.scale=`${s}`);let R="http://www.w3.org/2000/svg",v=document.createElementNS(R,"foreignObject");v.setAttribute("width","100%"),v.setAttribute("height","100%");let j=document.createElement("style");j.textContent=p+d+"svg{overflow:visible;}"+l,v.appendChild(j),v.appendChild(o);let E=new XMLSerializer().serializeToString(v);u=`<svg xmlns="${R}" width="${w}" height="${C}" viewBox="0 0 ${w} ${C}">`+E+"</svg>",g=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(u)}`,y()},{fast:n})});let m=document.getElementById("snapdom-sandbox");return m&&m.style.position==="absolute"&&m.remove(),g})}var Pe=$(()=>{Ie();Ne();Te();N();U();ee();I()});function Je(i,c){return h(this,arguments,function*(e,{dpr:t=1,scale:r=1}){let n=new Image;return n.src=e,yield n.decode(),Y?(n.width=n.width*r,n.height=n.height*r):(n.width=n.width/r,n.height=n.height/r),n})}function Fe(i){return h(this,arguments,function*(e,{dpr:t=1,scale:r=1}={}){let c=new Image;c.src=e,yield c.decode();let n=document.createElement("canvas"),s=c.width*r,a=c.height*r;n.width=Math.ceil(s*t),n.height=Math.ceil(a*t);let o=n.getContext("2d");return o.scale(t,t),o.drawImage(c,0,0,s,a),n.style.width=`${s}px`,n.style.height=`${a}px`,n})}function Le(n){return h(this,arguments,function*(e,{type:t="svg",scale:r=1,backgroundColor:i="#fff",quality:c}={}){let s={jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",webp:"image/webp"}[t]||"image/png";if(t==="svg"){let o=decodeURIComponent(e.split(",")[1]);return new Blob([o],{type:"image/svg+xml"})}let a=yield se(e,{dpr:1,scale:r},i);return new Promise(o=>{a.toBlob(l=>o(l),`${s}`,c)})})}function se(c,n,s){return h(this,arguments,function*(e,{dpr:t=1,scale:r=1},i){let a=yield Fe(e,{dpr:t,scale:r});if(!i)return a;let o=document.createElement("canvas");o.width=a.width,o.height=a.height;let l=o.getContext("2d");return l.fillStyle=i,l.fillRect(0,0,o.width,o.height),l.drawImage(a,0,0),o})}function ae(s,a){return h(this,arguments,function*(e,{dpr:t=1,scale:r=1,backgroundColor:i,quality:c},n="png"){let o=["jpg","jpeg","webp"].includes(n)?"#fff":void 0,l=i!=null?i:o,d=yield se(e,{dpr:t,scale:r},l),p=new Image;return p.src=d.toDataURL(`image/${n}`,c),yield p.decode(),p.style.width=`${d.width/t}px`,p.style.height=`${d.height/t}px`,p})}function Qe(s){return h(this,arguments,function*(e,{dpr:t=1,scale:r=1,backgroundColor:i="#fff",format:c="png",filename:n="capture"}={}){if(c==="svg"){let u=yield Le(e),m=URL.createObjectURL(u),y=document.createElement("a");y.href=m,y.download=`${n}.svg`,y.click(),URL.revokeObjectURL(m);return}let a=["jpg","jpeg","webp"].includes(c)?"#fff":void 0,o=i!=null?i:a,l=yield se(e,{dpr:t,scale:r},o),d={jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",webp:"image/webp"}[c]||"image/png",p=l.toDataURL(d),g=document.createElement("a");g.href=p,g.download=`${n}.${c}`,g.click()})}function S(r){return h(this,arguments,function*(e,t={}){if(t=L({scale:1},t),!e)throw new Error("Element cannot be null or undefined");return t.iconFonts&&Se(t.iconFonts),yield S.capture(e,t)})}var Ue=$(()=>{Pe();N();Q();S.capture=(r,...i)=>h(null,[r,...i],function*(e,t={}){let c=yield Me(e,t),n=window.devicePixelRatio||1,s=t.scale||1;return{url:c,options:t,toRaw:()=>c,toImg:()=>Je(c,{dpr:n,scale:s}),toCanvas:()=>Fe(c,{dpr:n,scale:s}),toBlob:a=>Le(c,L({dpr:n,scale:s},a)),toPng:a=>ae(c,L({dpr:n,scale:s},a),"png"),toJpg:a=>ae(c,L({dpr:n,scale:s},a),"jpeg"),toWebp:a=>ae(c,L({dpr:n,scale:s},a),"webp"),download:({format:a="png",filename:o="capture",backgroundColor:l}={})=>Qe(c,{dpr:n,scale:s,backgroundColor:l,format:a,filename:o})}});S.toRaw=(e,t)=>h(null,null,function*(){return(yield S.capture(e,t)).toRaw()});S.toImg=(e,t)=>h(null,null,function*(){return(yield S.capture(e,t)).toImg()});S.toCanvas=(e,t)=>h(null,null,function*(){return(yield S.capture(e,t)).toCanvas()});S.toBlob=(e,t)=>h(null,null,function*(){return(yield S.capture(e,t)).toBlob(t)});S.toPng=(e,t)=>h(null,null,function*(){return(yield S.capture(e,t)).toPng(t)});S.toJpg=(e,t)=>h(null,null,function*(){return(yield S.capture(e,t)).toJpg(t)});S.toWebp=(e,t)=>h(null,null,function*(){return(yield S.capture(e,t)).toWebp(t)});S.download=(r,...i)=>h(null,[r,...i],function*(e,t={}){let l=t,{format:c="png",filename:n="capture",backgroundColor:s}=l,a=fe(l,["format","filename","backgroundColor"]);return yield(yield S.capture(e,a)).download({format:c,filename:n,backgroundColor:s})})});function q(){return h(this,arguments,function*(e=document,t={}){let{embedFonts:r=!0,reset:i=!1}=t;if(i){f.reset();return}yield document.fonts.ready,de();let c=[],n=[];e!=null&&e.querySelectorAll&&(c=Array.from(e.querySelectorAll("img[src]")),n=Array.from(e.querySelectorAll("*")));let s=[];for(let a of c){let o=a.src;f.image.has(o)||s.push(F(o,{useProxy:t.useProxy}).then(l=>f.image.set(o,l)).catch(()=>{}))}for(let a of n){let o=M(a).backgroundImage;if(o&&o!=="none"){let l=W(o);for(let d of l)d.startsWith("url(")&&s.push(B(d,t).catch(()=>{}))}}r&&(yield Z({preCached:!0})),yield Promise.all(s)})}var Be=$(()=>{N();ee();U();I()});var Ze=qe((pn,te)=>{Ue();Be();window.snapdom=S;typeof window!="undefined"&&(window.snapdom=S,window.preCache=q);typeof te!="undefined"&&typeof te.exports!="undefined"&&(te.exports={snapdom:S,preCache:q});typeof define=="function"&&define.amd&&define([],function(){return{snapdom:S,preCache:q}});typeof globalThis!="undefined"&&(globalThis.snapdom=S,globalThis.preCache=q)});Ze();})();
1
+ (()=>{var De=Object.defineProperty;var K=Object.getOwnPropertySymbols;var ue=Object.prototype.hasOwnProperty,me=Object.prototype.propertyIsEnumerable;var pe=(e,t,a)=>t in e?De(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,U=(e,t)=>{for(var a in t||(t={}))ue.call(t,a)&&pe(e,a,t[a]);if(K)for(var a of K(t))me.call(t,a)&&pe(e,a,t[a]);return e};var he=(e,t)=>{var a={};for(var c in e)ue.call(e,c)&&t.indexOf(c)<0&&(a[c]=e[c]);if(e!=null&&K)for(var c of K(e))t.indexOf(c)<0&&me.call(e,c)&&(a[c]=e[c]);return a};var h=(e,t,a)=>new Promise((c,s)=>{var n=o=>{try{l(a.next(o))}catch(r){s(r)}},i=o=>{try{l(a.throw(o))}catch(r){s(r)}},l=o=>o.done?c(o.value):Promise.resolve(o.value).then(n,i);l((a=a.apply(e,t)).next())});var f={image:new Map,background:new Map,resource:new Map,defaultStyle:new Map,baseStyle:new Map,computedStyle:new WeakMap,font:new Set,snapshot:new WeakMap,snapshotKey:new Map,preStyleMap:new Map,preStyle:new WeakMap,preNodeMap:new Map,reset:je};function je(){f.computedStyle=new WeakMap,f.snapshot=new WeakMap,f.snapshotKey.clear(),f.preStyleMap.clear(),f.preStyle=new WeakMap,f.preNodeMap.clear()}var We=["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 ge(){for(let e of We)ye(e)}function ye(e){if(f.defaultStyle.has(e))return f.defaultStyle.get(e);if(new Set(["script","style","meta","link","noscript","template"]).has(e)){let i={};return f.defaultStyle.set(e,i),i}let a=document.getElementById("snapdom-sandbox");a||(a=document.createElement("div"),a.id="snapdom-sandbox",a.style.position="absolute",a.style.left="-9999px",a.style.top="-9999px",a.style.width="0",a.style.height="0",a.style.overflow="hidden",document.body.appendChild(a));let c=document.createElement(e);c.style.all="initial",a.appendChild(c);let s=getComputedStyle(c),n={};for(let i of s)n[i]=s.getPropertyValue(i);return a.removeChild(c),f.defaultStyle.set(e,n),n}function O(e,t,a=!1){let c=[],s=ye(t);for(let[n,i]of Object.entries(e))if(!a)i&&c.push(`${n}:${i}`);else{let l=s[n];i&&i!==l&&c.push(`${n}:${i}`)}return c.sort().join(";")}function we(e){let t=new Set;return e.nodeType!==Node.ELEMENT_NODE&&e.nodeType!==Node.DOCUMENT_FRAGMENT_NODE?[]:(e.tagName&&t.add(e.tagName.toLowerCase()),typeof e.querySelectorAll=="function"&&e.querySelectorAll("*").forEach(a=>t.add(a.tagName.toLowerCase())),Array.from(t))}function xe(e){let t=new Map;for(let c of e){let s=f.defaultStyle.get(c);if(!s)continue;let n=Object.entries(s).map(([i,l])=>`${i}:${l};`).sort().join("");t.has(n)||t.set(n,[]),t.get(n).push(c)}let a="";for(let[c,s]of t.entries())a+=`${s.join(",")} { ${c} }
2
+ `;return a}function Se(){let e=new Set(f.preStyleMap.values()),t=new Map,a=1;for(let c of e)t.set(c,`c${a++}`);return t}function B(a){return h(this,arguments,function*(e,t={}){let c=_(e),s=/^((repeating-)?(linear|radial|conic)-gradient)\(/i.test(e);if(c){let n=Y(c);if(f.background.has(n))return t.skipInline?void 0:`url(${f.background.get(n)})`;{let i=yield P(n,{useProxy:t.useProxy});return f.background.set(n,i),t.skipInline?void 0:`url("${i}")`}}return e})}function D(e,{fast:t=!1}={}){if(t)return e();"requestIdleCallback"in window?requestIdleCallback(e,{timeout:50}):setTimeout(e,1)}function N(e,t=null){if(!(e instanceof Element))return window.getComputedStyle(e,t);let a=f.computedStyle.get(e);if(a||(a=new Map,f.computedStyle.set(e,a)),!a.has(t)){let c=window.getComputedStyle(e,t);a.set(t,c)}return a.get(t)}function be(e){let t=e.replace(/^['"]|['"]$/g,"");if(t.startsWith("\\"))try{return String.fromCharCode(parseInt(t.replace("\\",""),16))}catch(a){return t}return t}function _(e){let t=e.match(/url\((['"]?)(.*?)(\1)\)/);if(!t)return null;let a=t[2].trim();return a.startsWith("#")?null:a}function P(e,{timeout:t=3e3,useProxy:a=""}={}){function c(o){try{return new URL(o,window.location.href).origin===window.location.origin?"use-credentials":"anonymous"}catch(r){return"anonymous"}}function s(o){return h(this,null,function*(){let r=d=>fetch(d,{mode:"cors",credentials:c(d)==="use-credentials"?"include":"omit"}).then(p=>p.blob()).then(p=>new Promise((m,u)=>{let y=new FileReader;y.onloadend=()=>{let w=y.result;if(typeof w!="string"||!w.startsWith("data:image/")){u(new Error("Invalid image data URL"));return}m(w)},y.onerror=()=>u(new Error("FileReader error")),y.readAsDataURL(p)}));try{return yield r(o)}catch(d){if(a&&typeof a=="string"){let p=a.replace(/\/$/,"")+Y(o);try{return yield r(p)}catch(m){throw new Error("[SnapDOM - fetchImage] CORS restrictions prevented image capture (even via proxy)")}}else throw new Error("[SnapDOM - fetchImage] Fetch fallback failed and no proxy provided")}})}let n=c(e);return f.image.has(e)?Promise.resolve(f.image.get(e)):e.startsWith("data:image/")?(f.image.set(e,e),Promise.resolve(e)):/\.svg(\?.*)?$/i.test(e)?h(null,null,function*(){try{let r=yield(yield fetch(e,{mode:"cors",credentials:n==="use-credentials"?"include":"omit"})).text(),d=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(r)}`;return f.image.set(e,d),d}catch(o){return s(e)}}):new Promise((o,r)=>{let d=setTimeout(()=>{r(new Error("[SnapDOM - fetchImage] Image load timed out"))},t),p=new Image;p.crossOrigin=n,p.onload=()=>h(null,null,function*(){clearTimeout(d);try{yield p.decode();let m=document.createElement("canvas");m.width=p.width,m.height=p.height,m.getContext("2d").drawImage(p,0,0,m.width,m.height);let y=m.toDataURL("image/png");f.image.set(e,y),o(y)}catch(m){try{let u=yield s(e);f.image.set(e,u),o(u)}catch(u){r(u)}}}),p.onerror=()=>h(null,null,function*(){clearTimeout(d),console.error(`[SnapDOM - fetchImage] Image failed to load: ${e}`);try{let m=yield s(e);f.image.set(e,m),o(m)}catch(m){r(m)}}),p.src=e})}function oe(e){let t={};for(let a of e)t[a]=e.getPropertyValue(a);return t}function Ce(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}function Ee(e){if(!e||e==="none")return"";let t=e.replace(/translate[XY]?\([^)]*\)/g,"");return t=t.replace(/matrix\(([^)]+)\)/g,(a,c)=>{let s=c.split(",").map(n=>n.trim());return s.length!==6?`matrix(${c})`:(s[4]="0",s[5]="0",`matrix(${s.join(", ")})`)}),t=t.replace(/matrix3d\(([^)]+)\)/g,(a,c)=>{let s=c.split(",").map(n=>n.trim());return s.length!==16?`matrix3d(${c})`:(s[12]="0",s[13]="0",`matrix3d(${s.join(", ")})`)}),t.trim().replace(/\s{2,}/g," ")}function Y(e){if(/%[0-9A-Fa-f]{2}/.test(e))return e;try{return encodeURI(e)}catch(t){return e}}function j(e){let t=[],a=0,c=0;for(let s=0;s<e.length;s++){let n=e[s];n==="("&&a++,n===")"&&a--,n===","&&a===0&&(t.push(e.slice(c,s).trim()),c=s+1)}return t.push(e.slice(c).trim()),t}function Ve(e){let t={};for(let a=0;a<e.length;a++){let c=e[a],s=e.getPropertyValue(c);(c==="background-image"||c==="content")&&s.includes("url(")&&!s.includes("data:")&&(s="none"),t[c]=s}return t}function X(e,t,a){var o;if(e.tagName==="STYLE")return;f.preStyle.has(e)||f.preStyle.set(e,N(e));let c=f.preStyle.get(e);if(!f.snapshot.has(e)){let r=Ve(c);f.snapshot.set(e,r)}let s=f.snapshot.get(e),n=Object.entries(s).sort(([r],[d])=>r.localeCompare(d)).map(([r,d])=>`${r}:${d}`).join(";");if(f.snapshotKey.has(n)){f.preStyleMap.set(t,f.snapshotKey.get(n));return}let i=((o=e.tagName)==null?void 0:o.toLowerCase())||"div",l=O(s,i,a);f.snapshotKey.set(n,l),f.preStyleMap.set(t,l)}function q(e,t,a={},c){var l,o;if(!e)throw new Error("Invalid node");let s=new Set,n=null;if(e.nodeType===Node.TEXT_NODE||e.nodeType!==Node.ELEMENT_NODE)return e.cloneNode(!0);if(e.getAttribute("data-capture")==="exclude"){let r=document.createElement("div"),d=e.getBoundingClientRect();return r.style.cssText=`display:inline-block;width:${d.width}px;height:${d.height}px;visibility:hidden;`,r}if(a.exclude&&Array.isArray(a.exclude))for(let r of a.exclude)try{if((l=e.matches)!=null&&l.call(e,r)){let d=document.createElement("div"),p=e.getBoundingClientRect();return d.style.cssText=`display:inline-block;width:${p.width}px;height:${p.height}px;visibility:hidden;`,d}}catch(d){console.warn(`Invalid selector in exclude option: ${r}`,d)}if(typeof a.filter=="function")try{if(!a.filter(e,c||e)){let r=document.createElement("div"),d=e.getBoundingClientRect();return r.style.cssText=`display:inline-block;width:${d.width}px;height:${d.height}px;visibility:hidden;`,r}}catch(r){console.warn("Error in filter function:",r)}if(e.tagName==="IFRAME"){let r=document.createElement("div");return r.style.cssText=`width:${e.offsetWidth}px;height:${e.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;`,r}if(e.getAttribute("data-capture")==="placeholder"){let r=e.cloneNode(!1);f.preNodeMap.set(r,e),X(e,r,t);let d=document.createElement("div");return d.textContent=e.getAttribute("data-placeholder-text")||"",d.style.cssText="color:#666;font-size:12px;text-align:center;line-height:1.4;padding:0.5em;box-sizing:border-box;",r.appendChild(d),r}if(e.tagName==="CANVAS"){let r=e.toDataURL(),d=document.createElement("img");return d.src=r,d.width=e.width,d.height=e.height,f.preNodeMap.set(d,e),X(e,d,t),d}let i;try{i=e.cloneNode(!1),f.preNodeMap.set(i,e)}catch(r){throw console.error("[Snapdom] Failed to clone node:",e,r),r}if(e instanceof HTMLTextAreaElement){i.textContent=e.value,i.value=e.value;let r=e.getBoundingClientRect();return i.style.width=`${r.width}px`,i.style.height=`${r.height}px`,i}if(e instanceof HTMLInputElement&&(i.value=e.value,i.setAttribute("value",e.value),e.checked!==void 0&&(i.checked=e.checked,e.checked&&i.setAttribute("checked",""),e.indeterminate&&(i.indeterminate=e.indeterminate))),e instanceof HTMLSelectElement&&(n=e.value),X(e,i,t),e.shadowRoot)if(Array.from(e.shadowRoot.querySelectorAll("slot")).length>0){for(let d of e.shadowRoot.childNodes)if(d.nodeType===Node.ELEMENT_NODE&&d.tagName==="STYLE"){let p=d.textContent||"";p.trim()&&t&&(f.preStyle||(f.preStyle=new WeakMap),f.preStyle.set(d,p))}}else{let d=document.createDocumentFragment();for(let p of e.shadowRoot.childNodes){if(p.nodeType===Node.ELEMENT_NODE&&p.tagName==="STYLE"){let u=p.textContent||"";u.trim()&&t&&(f.preStyle||(f.preStyle=new WeakMap),f.preStyle.set(p,u));continue}let m=q(p,t,a,c||e);m&&d.appendChild(m)}i.appendChild(d)}if(e.tagName==="SLOT"){let r=((o=e.assignedNodes)==null?void 0:o.call(e,{flatten:!0}))||[],d=r.length>0?r:Array.from(e.childNodes),p=document.createDocumentFragment();for(let m of d){let u=q(m,t,a,c||e);u&&p.appendChild(u)}return p}for(let r of e.childNodes){if(s.has(r))continue;let d=q(r,t,a,c||e);d&&i.appendChild(d)}if(n!==null&&i instanceof HTMLSelectElement){i.value=n;for(let r of i.options)r.value===n?r.setAttribute("selected",""):r.removeAttribute("selected")}return i}var Oe=[/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],ae=[];function ve(e){let t=Array.isArray(e)?e:[e];for(let a of t)a instanceof RegExp?ae.push(a):typeof a=="string"?ae.push(new RegExp(a,"i")):console.warn("[snapdom] Ignored invalid iconFont value:",a)}function $(e){let t=typeof e=="string"?e:"",a=[...Oe,...ae];for(let c of a)if(c instanceof RegExp&&c.test(t))return!0;return!!(/icon/i.test(t)||/glyph/i.test(t)||/symbols/i.test(t)||/feather/i.test(t)||/fontawesome/i.test(t))}function $e(e,t,a,c=32,s="#000"){return h(this,null,function*(){t=t.replace(/^['"]+|['"]+$/g,"");let n=window.devicePixelRatio||1,l=document.createElement("canvas").getContext("2d");l.font=a?`${a} ${c}px "${t}"`:`${c}px "${t}"`;let o=l.measureText(e),r=o.actualBoundingBoxAscent||c*.8,d=o.actualBoundingBoxDescent||c*.2,p=r+d,m=o.width,u=document.createElement("canvas");u.width=Math.ceil(m*n),u.height=Math.ceil(p*n);let y=u.getContext("2d");return y.scale(n,n),y.font=l.font,y.textAlign="left",y.textBaseline="alphabetic",y.fillStyle=s,y.fillText(e,0,r),u.toDataURL()})}function ke(e){return Array.from(document.styleSheets).some(t=>t.href===e)}function _e(e){return new Promise(t=>{if(ke(e))return t(null);let a=document.createElement("link");a.rel="stylesheet",a.href=e,a.setAttribute("data-snapdom","injected-import"),a.onload=()=>t(a),a.onerror=()=>t(null),document.head.appendChild(a)})}function G(){return h(this,arguments,function*({preCached:e=!1}={}){if(f.resource.has("fonts-embed-css")){if(e){let n=document.createElement("style");n.setAttribute("data-snapdom","embedFonts"),n.textContent=f.resource.get("fonts-embed-css"),document.head.appendChild(n)}return f.resource.get("fonts-embed-css")}let t=/@import\s+url\(["']?([^"')]+)["']?\)/g,a=[];for(let n of document.querySelectorAll("style")){let i=n.textContent||"",l=Array.from(i.matchAll(t));for(let o of l){let r=o[1];$(r)||ke(r)||a.push(r)}}yield Promise.all(a.map(_e));let c=Array.from(document.querySelectorAll('link[rel="stylesheet"]')).filter(n=>n.href),s="";for(let n of c)try{let l=yield(yield fetch(n.href)).text();if($(n.href)||$(l))continue;let o=/url\((["']?)([^"')]+)\1\)/g,r=yield Promise.all(Array.from(l.matchAll(o)).map(p=>h(null,null,function*(){let m=_(p[0]);if(!m)return null;let u=m;if(!u.startsWith("http")&&!u.startsWith("data:")&&(u=new URL(u,n.href).href),$(u))return null;if(f.resource.has(u))return f.font.add(u),{original:p[0],inlined:`url(${f.resource.get(u)})`};if(f.font.has(u))return null;try{let w=yield(yield fetch(u)).blob(),x=yield new Promise(g=>{let b=new FileReader;b.onload=()=>g(b.result),b.readAsDataURL(w)});return f.resource.set(u,x),f.font.add(u),{original:p[0],inlined:`url(${x})`}}catch(y){return console.warn("[snapdom] Failed to fetch font resource:",u),null}}))),d=l;for(let p of r)p&&(d=d.replace(p.original,p.inlined));s+=d+`
3
+ `}catch(i){console.warn("[snapdom] Failed to fetch CSS:",n.href)}for(let n of document.styleSheets)try{if(!n.href||c.every(i=>i.href!==n.href)){for(let i of n.cssRules)if(i.type===CSSRule.FONT_FACE_RULE){let l=i.style.getPropertyValue("src"),o=i.style.getPropertyValue("font-family");if(!l||$(o))continue;let r=/url\((["']?)([^"')]+)\1\)/g,d=/local\((["']?)[^)]+?\1\)/g,p=!!l.match(r),m=!!l.match(d);if(!p&&m){s+=`@font-face{font-family:${o};src:${l};font-style:${i.style.getPropertyValue("font-style")||"normal"};font-weight:${i.style.getPropertyValue("font-weight")||"normal"};}`;continue}let u=l,y=Array.from(l.matchAll(r));for(let w of y){let x=w[2].trim();if(!x)continue;let g=x;if(!g.startsWith("http")&&!g.startsWith("data:")&&(g=new URL(g,n.href||location.href).href),!$(g)){if(f.resource.has(g)){f.font.add(g),u=u.replace(w[0],`url(${f.resource.get(g)})`);continue}if(!f.font.has(g))try{let I=yield(yield fetch(g)).blob(),k=yield new Promise(T=>{let C=new FileReader;C.onload=()=>T(C.result),C.readAsDataURL(I)});f.resource.set(g,k),f.font.add(g),u=u.replace(w[0],`url(${k})`)}catch(b){console.warn("[snapdom] Failed to fetch font URL:",g)}}}s+=`@font-face{font-family:${o};src:${u};font-style:${i.style.getPropertyValue("font-style")||"normal"};font-weight:${i.style.getPropertyValue("font-weight")||"normal"};}`}}}catch(i){console.warn("[snapdom] Cannot access stylesheet",n.href,i)}for(let n of document.fonts)if(n.family&&n.status==="loaded"&&n._snapdomSrc){if($(n.family))continue;let i=n._snapdomSrc;if(!i.startsWith("data:")){if(f.resource.has(n._snapdomSrc))i=f.resource.get(n._snapdomSrc),f.font.add(n._snapdomSrc);else if(!f.font.has(n._snapdomSrc))try{let o=yield(yield fetch(n._snapdomSrc)).blob();i=yield new Promise(r=>{let d=new FileReader;d.onload=()=>r(d.result),d.readAsDataURL(o)}),f.resource.set(n._snapdomSrc,i),f.font.add(n._snapdomSrc)}catch(l){console.warn("[snapdom] Failed to fetch dynamic font src:",n._snapdomSrc);continue}}s+=`@font-face{font-family:'${n.family}';src:url(${i});font-style:${n.style||"normal"};font-weight:${n.weight||"normal"};}`}if(s&&(f.resource.set("fonts-embed-css",s),e)){let n=document.createElement("style");n.setAttribute("data-snapdom","embedFonts"),n.textContent=s,document.head.appendChild(n)}return s})}function re(e,t,a,c=!1,s){return h(this,null,function*(){if(!(e instanceof Element)||!(t instanceof Element))return;for(let l of["::before","::after","::first-letter"])try{let o=N(e,l);if(!o||typeof o[Symbol.iterator]!="function")continue;if(l==="::first-letter"){let E=getComputedStyle(e);if(!(o.color!==E.color||o.fontSize!==E.fontSize||o.fontWeight!==E.fontWeight))continue;let M=Array.from(t.childNodes).find(ne=>ne.nodeType===Node.TEXT_NODE&&ne.textContent&&ne.textContent.trim().length>0);if(!M)continue;let fe=M.textContent,te=fe.match(/^([^\p{L}\p{N}\s]*[\p{L}\p{N}](?:['’])?)/u),F=te==null?void 0:te[0],Fe=fe.slice((F==null?void 0:F.length)||0);if(!F||/[\uD800-\uDFFF]/.test(F))continue;let H=document.createElement("span");H.textContent=F,H.dataset.snapdomPseudo="::first-letter";let Ue=oe(o),Be=O(Ue,"span",a);f.preStyleMap.set(H,Be);let de=document.createTextNode(Fe);t.replaceChild(de,M),t.insertBefore(H,de);continue}let r=o.getPropertyValue("content"),d=o.getPropertyValue("background-image"),p=o.getPropertyValue("background-color"),m=o.getPropertyValue("font-family"),u=parseInt(o.getPropertyValue("font-size"))||32,y=parseInt(o.getPropertyValue("font-weight"))||!1,w=o.getPropertyValue("color")||"#000",x=o.getPropertyValue("display"),g=parseFloat(o.getPropertyValue("width")),b=parseFloat(o.getPropertyValue("height")),I=o.getPropertyValue("border-style"),k=o.getPropertyValue("transform"),T=$(m),C;/counter\s*\(|counters\s*\(/.test(r)?C="- ":C=be(r);let W=r!=="none"&&C!=="",z=d&&d!=="none",V=p&&p!=="transparent"&&p!=="rgba(0, 0, 0, 0)",J=x!=="inline"&&(g>0||b>0),Q=I&&I!=="none",A=k&&k!=="none";if(!(W||z||V||J||Q||A))continue;let v=document.createElement("span");v.dataset.snapdomPseudo=l;let Z=oe(o),ee=O(Z,"span",a);if(f.preStyleMap.set(v,ee),T&&C.length===1){let E=document.createElement("img");E.src=yield $e(C,m,y,u,w),E.style=`width:${u}px;height:auto;object-fit:contain;`,v.appendChild(E)}else if(C.startsWith("url(")){let E=_(C);if(E&&E.trim()!=="")try{let R=document.createElement("img"),M=yield P(Y(E,{useProxy:s}));R.src=M,R.style=`width:${u}px;height:auto;object-fit:contain;`,v.appendChild(R)}catch(R){console.error(`[snapdom] Error in pseudo ${l} for`,e,R)}}else!T&&W&&(v.textContent=C);if(z)try{let E=j(d),R=yield Promise.all(E.map(M=>B(M)));v.style.backgroundImage=R.join(", ")}catch(E){console.warn(`[snapdom] Failed to inline background-image for ${l}`,E)}if(V&&(v.style.backgroundColor=p),!(v.childNodes.length>0||v.textContent&&v.textContent.trim()!==""||z||V||J||Q||A))continue;l==="::before"?t.insertBefore(v,t.firstChild):t.appendChild(v)}catch(o){console.warn(`[snapdom] Failed to capture ${l} for`,e,o)}let n=Array.from(e.children),i=Array.from(t.children).filter(l=>!l.dataset.snapdomPseudo);for(let l=0;l<Math.min(n.length,i.length);l++)yield re(n[l],i[l],a,c,s)})}function Ie(e){if(!e)return;let t=document.querySelectorAll("svg > defs");t.length&&e.querySelectorAll("svg").forEach(a=>{let c=a.querySelectorAll("use");if(!c.length)return;let s=new Set;if(c.forEach(i=>{let l=i.getAttribute("xlink:href")||i.getAttribute("href");l&&l.startsWith("#")&&s.add(l.slice(1))}),!s.size)return;let n=document.createElementNS("http://www.w3.org/2000/svg","defs");for(let i of s)for(let l of t){let o=l.querySelector(`#${CSS.escape(i)}`);if(o){n.appendChild(o.cloneNode(!0));break}}n.childNodes.length&&a.insertBefore(n,a.firstChild)})}function Re(s){return h(this,arguments,function*(e,t=!1,a=!1,c={}){var l;let n,i="";try{n=q(e,t,c,e)}catch(o){throw console.warn("deepClone failed:",o),o}try{yield re(e,n,t,a,c.useProxy)}catch(o){console.warn("inlinePseudoElements failed:",o)}try{Ie(n)}catch(o){console.warn("inlineExternalDef failed:",o)}if(t){let o=Se();i=Array.from(o.entries()).map(([r,d])=>`.${d}{${r}}`).join("");for(let[r,d]of f.preStyleMap.entries()){if(r.tagName==="STYLE")continue;let p=o.get(d);p&&r.classList.add(p);let m=(l=r.style)==null?void 0:l.backgroundImage;r.removeAttribute("style"),m&&m!=="none"&&(r.style.backgroundImage=m)}}else for(let[o,r]of f.preStyleMap.entries())o.tagName!=="STYLE"&&o.setAttribute("style",r.replace(/;/g,"; "));for(let[o,r]of f.preNodeMap.entries()){let d=r.scrollLeft,p=r.scrollTop;if((d||p)&&o instanceof HTMLElement){o.style.overflow="hidden",o.style.scrollbarWidth="none",o.style.msOverflowStyle="none";let u=document.createElement("div");for(u.style.transform=`translate(${-d}px, ${-p}px)`,u.style.willChange="transform",u.style.display="inline-block",u.style.width="100%";o.firstChild;)u.appendChild(o.firstChild);o.appendChild(u)}}if(e===f.preNodeMap.get(n)){let o=f.preStyle.get(e)||window.getComputedStyle(e);f.preStyle.set(e,o);let r=Ee(o.transform);n.style.margin="0",n.style.position="static",n.style.top="auto",n.style.left="auto",n.style.right="auto",n.style.bottom="auto",n.style.zIndex="auto",n.style.float="none",n.style.clear="none",n.style.transform=r||""}for(let[o,r]of f.preNodeMap.entries())r.tagName==="PRE"&&(o.style.marginTop="0",o.style.marginBlockStart="0");return{clone:n,classCSS:i}})}function Ne(a){return h(this,arguments,function*(e,t={}){let c=Array.from(e.querySelectorAll("img")),s=n=>h(null,null,function*(){let i=n.src;try{let l=yield P(i,{useProxy:t.useProxy});n.src=l,n.width||(n.width=n.naturalWidth||100),n.height||(n.height=n.naturalHeight||100)}catch(l){let o=document.createElement("div");o.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;`,o.innerText="img",n.replaceWith(o)}});for(let n=0;n<c.length;n+=4){let i=c.slice(n,n+4).map(s);yield Promise.allSettled(i)}})}function Te(c,s){return h(this,arguments,function*(e,t,a={}){let n=[[e,t]],i=["background-image","mask","mask-image","-webkit-mask-image","mask-source","mask-box-image-source","mask-border-source","-webkit-mask-box-image-source"];for(;n.length;){let[l,o]=n.shift(),r=f.preStyle.get(l)||N(l);f.preStyle.has(l)||f.preStyle.set(l,r);for(let u of i){let y=r.getPropertyValue(u);if(!y||y==="none")continue;let w=j(y),x=yield Promise.all(w.map(g=>B(g,a)));x.some(g=>g&&g!=="none"&&!/^url\(undefined/.test(g))&&o.style.setProperty(u,x.join(", "))}let d=r.getPropertyValue("background-color");d&&d!=="transparent"&&d!=="rgba(0, 0, 0, 0)"&&(o.style.backgroundColor=d);let p=Array.from(l.children),m=Array.from(o.children);for(let u=0;u<Math.min(p.length,m.length);u++)n.push([p[u],m[u]])}})}function Ae(a){return h(this,arguments,function*(e,t={}){if(!e)throw new Error("Element cannot be null or undefined");f.reset();let{compress:c=!0,embedFonts:s=!1,fast:n=!0,scale:i=1,useProxy:l=""}=t,o,r,d="",p="",m,u;if({clone:o,classCSS:r}=yield Re(e,c,s,t),yield new Promise(w=>{D(()=>h(null,null,function*(){yield Ne(o,t),w()}),{fast:n})}),yield new Promise(w=>{D(()=>h(null,null,function*(){yield Te(e,o,t),w()}),{fast:n})}),s&&(yield new Promise(w=>{D(()=>h(null,null,function*(){d=yield G(),w()}),{fast:n})})),c){let w=we(o).sort(),x=w.join(",");f.baseStyle.has(x)?p=f.baseStyle.get(x):yield new Promise(g=>{D(()=>{p=xe(w),f.baseStyle.set(x,p),g()},{fast:n})})}yield new Promise(w=>{D(()=>{let x=e.getBoundingClientRect(),g=x.width,b=x.height,I=Number.isFinite(t.width),k=Number.isFinite(t.height),T=typeof i=="number"&&i!==1;if(!T){let A=x.width/x.height;I&&k?(g=t.width,b=t.height):I?(g=t.width,b=g/A):k&&(b=t.height,g=b*A)}if(g=Math.ceil(g),b=Math.ceil(b),o.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),o.style.transformOrigin="top left",!T&&(I||k)){let A=x.width,ce=x.height,v=g/A,Z=b/ce,ee=o.style.transform||"",le=`scale(${v}, ${Z})`;o.style.transform=`${le} ${ee}`.trim()}let C="http://www.w3.org/2000/svg",L=document.createElementNS(C,"foreignObject");L.setAttribute("width","100%"),L.setAttribute("height","100%");let W=document.createElement("style");W.textContent=p+d+"svg{overflow:visible;}"+r,L.appendChild(W),L.appendChild(o);let V=new XMLSerializer().serializeToString(L);u=`<svg xmlns="${C}" width="${g}" height="${b}" viewBox="0 0 ${g} ${b}">`+V+"</svg>",m=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(u)}`,w()},{fast:n})});let y=document.getElementById("snapdom-sandbox");return y&&y.style.position==="absolute"&&y.remove(),m})}function qe(c,s){return h(this,arguments,function*(e,{dpr:t=1,scale:a=1}){let n=new Image;return n.src=e,yield n.decode(),n.width=n.width*a,n.height=n.height*a,n})}function Me(c){return h(this,arguments,function*(e,{dpr:t=1,scale:a=1}={}){let s=new Image;s.src=e,s.crossOrigin="anonymous",s.loading="eager",s.decoding="sync";let n=Ce(),i=!1;if(n&&(document.body.appendChild(s),i=!0),yield s.decode(),n&&(yield new Promise(p=>setTimeout(p,100))),s.width===0||s.height===0)throw i&&s.remove(),new Error("Image failed to load or has no dimensions");let l=s.width*a,o=s.height*a,r=document.createElement("canvas");r.width=Math.ceil(l*t),r.height=Math.ceil(o*t),r.style.width=`${l}px`,r.style.height=`${o}px`;let d=r.getContext("2d");return d.scale(t,t),d.drawImage(s,0,0,l,o),i&&s.remove(),r})}function Pe(n){return h(this,arguments,function*(e,{type:t="svg",scale:a=1,backgroundColor:c="#fff",quality:s}={}){let i={jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",webp:"image/webp"}[t]||"image/png";if(t==="svg"){let o=decodeURIComponent(e.split(",")[1]);return new Blob([o],{type:"image/svg+xml"})}let l=yield ie(e,{dpr:1,scale:a},c);return new Promise(o=>{l.toBlob(r=>o(r),`${i}`,s)})})}function ie(s,n,i){return h(this,arguments,function*(e,{dpr:t=1,scale:a=1},c){let l=yield Me(e,{dpr:t,scale:a});if(!c)return l;let o=document.createElement("canvas");o.width=l.width,o.height=l.height;let r=o.getContext("2d");return r.fillStyle=c,r.fillRect(0,0,o.width,o.height),r.drawImage(l,0,0),o})}function se(i,l){return h(this,arguments,function*(e,{dpr:t=1,scale:a=1,backgroundColor:c,quality:s},n="png"){let o=["jpg","jpeg","webp"].includes(n)?"#fff":void 0,r=c!=null?c:o,d=yield ie(e,{dpr:t,scale:a},r),p=new Image;return p.src=d.toDataURL(`image/${n}`,s),yield p.decode(),p.style.width=`${d.width/t}px`,p.style.height=`${d.height/t}px`,p})}function ze(i){return h(this,arguments,function*(e,{dpr:t=1,scale:a=1,backgroundColor:c,format:s="png",filename:n="snapDOM"}={}){if(s==="svg"){let u=yield Pe(e),y=URL.createObjectURL(u),w=document.createElement("a");w.href=y,w.download=`${n}.svg`,w.click(),URL.revokeObjectURL(y);return}let l=["jpg","jpeg","webp"].includes(s)?"#fff":void 0,o=c!=null?c:l,r=yield ie(e,{dpr:t,scale:a},o),d={jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",webp:"image/webp"}[s]||"image/png",p=r.toDataURL(d),m=document.createElement("a");m.href=p,m.download=`${n}.${s}`,m.click()})}function S(a){return h(this,arguments,function*(e,t={}){if(t=U({scale:1},t),!e)throw new Error("Element cannot be null or undefined");return t.iconFonts&&ve(t.iconFonts),yield S.capture(e,t)})}S.capture=(a,...c)=>h(null,[a,...c],function*(e,t={}){let s=yield Ae(e,t),n=window.devicePixelRatio||1,i=t.scale||1;return{url:s,options:t,toRaw:()=>s,toImg:()=>qe(s,{dpr:n,scale:i}),toCanvas:()=>Me(s,{dpr:n,scale:i}),toBlob:l=>Pe(s,U({dpr:n,scale:i},l)),toPng:l=>se(s,U({dpr:n,scale:i},l),"png"),toJpg:l=>se(s,U({dpr:n,scale:i},l),"jpeg"),toWebp:l=>se(s,U({dpr:n,scale:i},l),"webp"),download:({format:l="png",filename:o="capture",backgroundColor:r}={})=>ze(s,{dpr:n,scale:i,backgroundColor:r,format:l,filename:o})}});S.toRaw=(e,t)=>h(null,null,function*(){return(yield S.capture(e,t)).toRaw()});S.toImg=(e,t)=>h(null,null,function*(){return(yield S.capture(e,t)).toImg()});S.toCanvas=(e,t)=>h(null,null,function*(){return(yield S.capture(e,t)).toCanvas()});S.toBlob=(e,t)=>h(null,null,function*(){return(yield S.capture(e,t)).toBlob(t)});S.toPng=(e,t)=>h(null,null,function*(){return(yield S.capture(e,t)).toPng(t)});S.toJpg=(e,t)=>h(null,null,function*(){return(yield S.capture(e,t)).toJpg(t)});S.toWebp=(e,t)=>h(null,null,function*(){return(yield S.capture(e,t)).toWebp(t)});S.download=(a,...c)=>h(null,[a,...c],function*(e,t={}){let r=t,{format:s="png",filename:n="capture",backgroundColor:i}=r,l=he(r,["format","filename","backgroundColor"]);return yield(yield S.capture(e,l)).download({format:s,filename:n,backgroundColor:i})});function Le(){return h(this,arguments,function*(e=document,t={}){let{embedFonts:a=!0,reset:c=!1}=t;if(c){f.reset();return}yield document.fonts.ready,ge();let s=[],n=[];e!=null&&e.querySelectorAll&&(s=Array.from(e.querySelectorAll("img[src]")),n=Array.from(e.querySelectorAll("*")));let i=[];for(let l of s){let o=l.src;f.image.has(o)||i.push(P(o,{useProxy:t.useProxy}).then(r=>f.image.set(o,r)).catch(()=>{}))}for(let l of n){let o=N(l).backgroundImage;if(o&&o!=="none"){let r=j(o);for(let d of r)d.startsWith("url(")&&i.push(B(d,t).catch(()=>{}))}}a&&(yield G({preCached:!0})),yield Promise.all(i)})}typeof window!="undefined"&&(window.snapdom=S,window.preCache=Le);})();
@@ -1,15 +1,3 @@
1
- var l={image:new Map,background:new Map,resource:new Map,defaultStyle:new Map,baseStyle:new Map,computedStyle:new WeakMap,font:new Set,snapshot:new WeakMap,snapshotKey:new Map,preStyleMap:new Map,preStyle:new WeakMap,preNodeMap:new Map,reset:ye};function ye(){l.computedStyle=new WeakMap,l.snapshot=new WeakMap,l.snapshotKey.clear(),l.preStyleMap.clear(),l.preStyle=new WeakMap,l.preNodeMap.clear()}var we=["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 Y(){for(let e of we)G(e)}function G(e){if(l.defaultStyle.has(e))return l.defaultStyle.get(e);if(new Set(["script","style","meta","link","noscript","template"]).has(e)){let a={};return l.defaultStyle.set(e,a),a}let r=document.getElementById("snapdom-sandbox");r||(r=document.createElement("div"),r.id="snapdom-sandbox",r.style.position="absolute",r.style.left="-9999px",r.style.top="-9999px",r.style.width="0",r.style.height="0",r.style.overflow="hidden",document.body.appendChild(r));let s=document.createElement(e);s.style.all="initial",r.appendChild(s);let o=getComputedStyle(s),t={};for(let a of o)t[a]=o.getPropertyValue(a);return r.removeChild(s),l.defaultStyle.set(e,t),t}function U(e,n,r=!1){let s=[],o=G(n);for(let[t,a]of Object.entries(e))if(!r)a&&s.push(`${t}:${a}`);else{let i=o[t];a&&a!==i&&s.push(`${t}:${a}`)}return s.sort().join(";")}function J(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(r=>n.add(r.tagName.toLowerCase())),Array.from(n))}function Q(e){let n=new Map;for(let s of e){let o=l.defaultStyle.get(s);if(!o)continue;let t=Object.entries(o).map(([a,i])=>`${a}:${i};`).sort().join("");n.has(t)||n.set(t,[]),n.get(t).push(s)}let r="";for(let[s,o]of n.entries())r+=`${o.join(",")} { ${s} }
2
- `;return r}function Z(){let e=new Set(l.preStyleMap.values()),n=new Map,r=1;for(let s of e)n.set(s,`c${r++}`);return n}async function T(e,n={}){let r=B(e),s=/^((repeating-)?(linear|radial|conic)-gradient)\(/i.test(e);if(r){let o=j(r);if(l.background.has(o))return n.skipInline?void 0:`url(${l.background.get(o)})`;{let t=await A(o,{useProxy:n.useProxy});return l.background.set(o,t),n.skipInline?void 0:`url("${t}")`}}return e}function P(e,{fast:n=!1}={}){if(n)return e();"requestIdleCallback"in window?requestIdleCallback(e,{timeout:50}):setTimeout(e,1)}function N(e,n=null){if(!(e instanceof Element))return window.getComputedStyle(e,n);let r=l.computedStyle.get(e);if(r||(r=new Map,l.computedStyle.set(e,r)),!r.has(n)){let s=window.getComputedStyle(e,n);r.set(n,s)}return r.get(n)}function ee(e){let n=e.replace(/^['"]|['"]$/g,"");if(n.startsWith("\\"))try{return String.fromCharCode(parseInt(n.replace("\\",""),16))}catch{return n}return n}function B(e){let n=e.indexOf("url(");if(n===-1)return null;let r=e.slice(n+4).trim();return r.endsWith(")")&&(r=r.slice(0,-1).trim()),(r.startsWith('"')&&r.endsWith('"')||r.startsWith("'")&&r.endsWith("'"))&&(r=r.slice(1,-1)),r}function A(e,{timeout:n=3e3,useProxy:r=""}={}){function s(c){try{return new URL(c,window.location.href).origin===window.location.origin?"use-credentials":"anonymous"}catch{return"anonymous"}}async function o(c){let f=p=>fetch(p,{mode:"cors",credentials:s(p)==="use-credentials"?"include":"omit"}).then(d=>d.blob()).then(d=>new Promise((m,h)=>{let u=new FileReader;u.onloadend=()=>{let g=u.result;if(typeof g!="string"||!g.startsWith("data:image/")){h(new Error("Invalid image data URL"));return}m(g)},u.onerror=()=>h(new Error("FileReader error")),u.readAsDataURL(d)}));try{return await f(c)}catch{if(r&&typeof r=="string"){let d=r.replace(/\/$/,"")+j(c);try{return await f(d)}catch{throw console.error(`[SnapDOM - fetchImage] Proxy fallback failed for: ${c}`),new Error("CORS restrictions prevented image capture (even via proxy)")}}else throw console.error(`[SnapDOM - fetchImage] No valid proxy URL provided for fallback: ${c}`),new Error("Fetch fallback failed and no proxy provided")}}let t=s(e);return console.log(`[SnapDOM - fetchImage] Start loading image: ${e} with crossOrigin=${t}`),l.image.has(e)?(console.log(`[SnapDOM - fetchImage] Cache hit for: ${e}`),Promise.resolve(l.image.get(e))):e.startsWith("data:image/")?(l.image.set(e,e),Promise.resolve(e)):/\.svg(\?.*)?$/i.test(e)?(async()=>{try{let f=await(await fetch(e,{mode:"cors",credentials:t==="use-credentials"?"include":"omit"})).text(),p=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(f)}`;return l.image.set(e,p),p}catch{return o(e)}})():new Promise((c,f)=>{let p=setTimeout(()=>{console.log(`[SnapDOM - fetchImage] Timeout after ${n}ms for image: ${e}`),f(new Error("Image load timed out"))},n),d=new Image;d.crossOrigin=t,d.onload=async()=>{clearTimeout(p);try{await d.decode();let m=document.createElement("canvas");m.width=d.width,m.height=d.height,m.getContext("2d").drawImage(d,0,0,m.width,m.height);let u=m.toDataURL("image/png");l.image.set(e,u),c(u)}catch{try{let m=await o(e);l.image.set(e,m),c(m)}catch(m){f(m)}}},d.onerror=async()=>{clearTimeout(p),console.error(`[SnapDOM - fetchImage] Image failed to load: ${e}`);try{let m=await o(e);l.image.set(e,m),c(m)}catch(m){f(m)}},d.src=e})}function q(e){let n={};for(let r of e)n[r]=e.getPropertyValue(r);return n}function W(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}function te(e){if(!e||e==="none")return"";let n=e.replace(/translate[XY]?\([^)]*\)/g,"");return n=n.replace(/matrix\(([^)]+)\)/g,(r,s)=>{let o=s.split(",").map(t=>t.trim());return o.length!==6?`matrix(${s})`:(o[4]="0",o[5]="0",`matrix(${o.join(", ")})`)}),n=n.replace(/matrix3d\(([^)]+)\)/g,(r,s)=>{let o=s.split(",").map(t=>t.trim());return o.length!==16?`matrix3d(${s})`:(o[12]="0",o[13]="0",`matrix3d(${o.join(", ")})`)}),n.trim().replace(/\s{2,}/g," ")}function j(e){if(/%[0-9A-Fa-f]{2}/.test(e))return e;try{return encodeURI(e)}catch{return e}}function F(e){let n=[],r=0,s=0;for(let o=0;o<e.length;o++){let t=e[o];t==="("&&r++,t===")"&&r--,t===","&&r===0&&(n.push(e.slice(s,o).trim()),s=o+1)}return n.push(e.slice(s).trim()),n}function xe(e){let n={};for(let r=0;r<e.length;r++){let s=e[r],o=e.getPropertyValue(s);(s==="background-image"||s==="content")&&o.includes("url(")&&!o.includes("data:")&&(o="none"),n[s]=o}return n}function O(e,n,r){if(e.tagName==="STYLE")return;l.preStyle.has(e)||l.preStyle.set(e,N(e));let s=l.preStyle.get(e);if(!l.snapshot.has(e)){let c=xe(s);l.snapshot.set(e,c)}let o=l.snapshot.get(e),t=Object.entries(o).sort(([c],[f])=>c.localeCompare(f)).map(([c,f])=>`${c}:${f}`).join(";");if(l.snapshotKey.has(t)){l.preStyleMap.set(n,l.snapshotKey.get(t));return}let a=e.tagName?.toLowerCase()||"div",i=U(o,a,r);l.snapshotKey.set(t,i),l.preStyleMap.set(n,i)}function Se(e){return e.nodeType===Node.ELEMENT_NODE&&e.tagName==="SLOT"}function D(e,n,r={},s){if(!e)throw new Error("Invalid node: node is null or undefined");try{if(e.nodeType===Node.TEXT_NODE||e.nodeType!==Node.ELEMENT_NODE)return e.cloneNode(!0);if(e.getAttribute("data-capture")==="exclude"){let t=document.createElement("div"),a=e.getBoundingClientRect();return t.style.cssText=`display: inline-block; width: ${a.width}px; height: ${a.height}px; visibility: hidden;`,t}if(r.exclude&&Array.isArray(r.exclude))for(let t of r.exclude)try{if(e.matches?.(t)){let a=document.createElement("div"),i=e.getBoundingClientRect();return a.style.cssText=`display: inline-block; width: ${i.width}px; height: ${i.height}px; visibility: hidden;`,a}}catch(a){console.warn(`Invalid selector in exclude option: ${t}`,a)}if(typeof r.filter=="function")try{if(!r.filter(e,s||e)){let t=document.createElement("div"),a=e.getBoundingClientRect();return t.style.cssText=`display: inline-block; width: ${a.width}px; height: ${a.height}px; visibility: hidden;`,t}}catch(t){console.warn("Error in filter function:",t)}if(e.tagName==="IFRAME"){let t=document.createElement("div");return t.textContent="",t.style.cssText=`width: ${e.offsetWidth}px; height: ${e.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;`,t}if(e.getAttribute("data-capture")==="placeholder"){let t=e.cloneNode(!1);l.preNodeMap.set(t,e),O(e,t,n);let a=document.createElement("div");return a.textContent=e.getAttribute("data-placeholder-text")||"",a.style.cssText="color: #666;font-size: 12px;text-align: center;line-height: 1.4;padding: 0.5em;box-sizing: border-box;",t.appendChild(a),t}if(e.tagName==="CANVAS"){let t=e.toDataURL(),a=document.createElement("img");return a.src=t,a.width=e.width,a.height=e.height,l.preNodeMap.set(a,e),O(e,a,n),a}let o;try{if(o=e.cloneNode(!1),!o)throw new Error("Failed to clone node: cloneNode returned null");l.preNodeMap.set(o,e)}catch(t){throw console.error("[Snapdom] Failed to clone node:",e,t),t}if(e instanceof HTMLInputElement)o.value=e.value,o.setAttribute("value",e.value),e.checked!==void 0&&(o.checked=e.checked,e.checked&&o.setAttribute("checked",""));else if(e instanceof HTMLTextAreaElement){let t=e.getBoundingClientRect();o.textContent=e.value,o.style.width=`${t.width}px`,o.style.height=`${t.height}px`}else e instanceof HTMLSelectElement&&(o.value=e.value,Array.from(o.options).forEach(t=>{t.value===e.value?t.setAttribute("selected",""):t.removeAttribute("selected")}));O(e,o,n);try{if(Se(e)){let t=e.assignedNodes?.({flatten:!0})||[],a=t.length>0?t:Array.from(e.childNodes),i=document.createDocumentFragment();for(let c of a)try{let f=D(c,n,r,s||e);f&&i.appendChild(f)}catch(f){console.warn("[Snapdom] Failed to clone slot content:",c,f)}return i}else{let t=e.shadowRoot?e.shadowRoot.childNodes:e.childNodes;for(let a of t)try{let i=D(a,n,r,s||e);i&&o.appendChild(i)}catch(i){console.warn("[Snapdom] Failed to clone child node:",a,i)}if(e.shadowRoot&&e.childNodes.length>0&&!e.shadowRoot.querySelector("slot")){let a=document.createDocumentFragment();for(let i of e.childNodes)try{let c=D(i,n,r,s||e);c&&a.appendChild(c)}catch(c){console.warn("[Snapdom] Failed to clone light DOM child:",i,c)}o.appendChild(a)}}}catch(t){throw console.error("[Snapdom] Error cloning children:",t),t}return o}catch(o){throw console.error("[Snapdom] Error in deepClone:",o),o}}var be=[/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],z=[];function ne(e){let n=Array.isArray(e)?e:[e];for(let r of n)r instanceof RegExp?z.push(r):typeof r=="string"?z.push(new RegExp(r,"i")):console.warn("[snapdom] Ignored invalid iconFont value:",r)}function $(e){let n=typeof e=="string"?e:"",r=[...be,...z];for(let s of r)if(s instanceof RegExp&&s.test(n))return!0;return!!(/icon/i.test(n)||/glyph/i.test(n)||/symbols/i.test(n)||/feather/i.test(n)||/fontawesome/i.test(n))}async function oe(e,n,r,s=32,o="#000"){n=n.replace(/^['"]+|['"]+$/g,"");let t=window.devicePixelRatio||1,i=document.createElement("canvas").getContext("2d");i.font=r?`${r} ${s}px "${n}"`:`${s}px "${n}"`;let c=i.measureText(e),f=c.actualBoundingBoxAscent||s*.8,p=c.actualBoundingBoxDescent||s*.2,d=f+p,m=c.width,h=document.createElement("canvas");h.width=Math.ceil(m*t),h.height=Math.ceil(d*t);let u=h.getContext("2d");return u.scale(t,t),u.font=i.font,u.textAlign="left",u.textBaseline="alphabetic",u.fillStyle=o,u.fillText(e,0,f),h.toDataURL()}function re(e){return Array.from(document.styleSheets).some(n=>n.href===e)}function Ce(e){return new Promise(n=>{if(re(e))return n(null);let r=document.createElement("link");r.rel="stylesheet",r.href=e,r.setAttribute("data-snapdom","injected-import"),r.onload=()=>n(r),r.onerror=()=>n(null),document.head.appendChild(r)})}async function V({preCached:e=!1}={}){if(l.resource.has("fonts-embed-css")){if(e){let t=document.createElement("style");t.setAttribute("data-snapdom","embedFonts"),t.textContent=l.resource.get("fonts-embed-css"),document.head.appendChild(t)}return l.resource.get("fonts-embed-css")}let n=/@import\s+url\(["']?([^"')]+)["']?\)/g,r=[];for(let t of document.querySelectorAll("style")){let a=t.textContent||"",i=Array.from(a.matchAll(n));for(let c of i){let f=c[1];$(f)||re(f)||r.push(f)}}await Promise.all(r.map(Ce));let s=Array.from(document.querySelectorAll('link[rel="stylesheet"]')).filter(t=>t.href),o="";for(let t of s)try{let i=await(await fetch(t.href)).text();if($(t.href)||$(i))continue;let c=/url\((["']?)([^"')]+)\1\)/g,f=await Promise.all(Array.from(i.matchAll(c)).map(async d=>{let m=B(d[0]);if(!m)return null;let h=m;if(!h.startsWith("http")&&!h.startsWith("data:")&&(h=new URL(h,t.href).href),$(h))return null;if(l.resource.has(h))return l.font.add(h),{original:d[0],inlined:`url(${l.resource.get(h)})`};if(l.font.has(h))return null;try{let g=await(await fetch(h)).blob(),y=await new Promise(x=>{let C=new FileReader;C.onload=()=>x(C.result),C.readAsDataURL(g)});return l.resource.set(h,y),l.font.add(h),{original:d[0],inlined:`url(${y})`}}catch{return console.warn("[snapdom] Failed to fetch font resource:",h),null}})),p=i;for(let d of f)d&&(p=p.replace(d.original,d.inlined));o+=p+`
3
- `}catch{console.warn("[snapdom] Failed to fetch CSS:",t.href)}for(let t of document.styleSheets)try{if(!t.href||s.every(a=>a.href!==t.href)){for(let a of t.cssRules)if(a.type===CSSRule.FONT_FACE_RULE){let i=a.style.getPropertyValue("src"),c=a.style.getPropertyValue("font-family");if(!i||$(c))continue;let f=/url\((["']?)([^"')]+)\1\)/g,p=i,d=Array.from(i.matchAll(f));for(let m of d){let h=m[2].trim();if(!h)continue;let u=h;if(!u.startsWith("http")&&!u.startsWith("data:")&&(u=new URL(u,t.href||location.href).href),!$(u)){if(l.resource.has(u)){l.font.add(u),p=p.replace(m[0],`url(${l.resource.get(u)})`);continue}if(!l.font.has(u))try{let y=await(await fetch(u)).blob(),x=await new Promise(C=>{let w=new FileReader;w.onload=()=>C(w.result),w.readAsDataURL(y)});l.resource.set(u,x),l.font.add(u),p=p.replace(m[0],`url(${x})`)}catch{console.warn("[snapdom] Failed to fetch font URL:",u)}}}o+=`@font-face {
4
- font-family: ${c};
5
- src: ${p};
6
- font-style: ${a.style.getPropertyValue("font-style")||"normal"};
7
- font-weight: ${a.style.getPropertyValue("font-weight")||"normal"};
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){if($(t.family))continue;let a=t._snapdomSrc;if(!a.startsWith("data:")){if(l.resource.has(t._snapdomSrc))a=l.resource.get(t._snapdomSrc),l.font.add(t._snapdomSrc);else if(!l.font.has(t._snapdomSrc))try{let c=await(await fetch(t._snapdomSrc)).blob();a=await new Promise(f=>{let p=new FileReader;p.onload=()=>f(p.result),p.readAsDataURL(c)}),l.resource.set(t._snapdomSrc,a),l.font.add(t._snapdomSrc)}catch{console.warn("[snapdom] Failed to fetch dynamic font src:",t._snapdomSrc);continue}}o+=`@font-face {
10
- font-family: '${t.family}';
11
- src: url(${a});
12
- font-style: ${t.style||"normal"};
13
- font-weight: ${t.weight||"normal"};
14
- }
15
- `}if(o&&(l.resource.set("fonts-embed-css",o),e)){let t=document.createElement("style");t.setAttribute("data-snapdom","embedFonts"),t.textContent=o,document.head.appendChild(t)}return o}async function H(e,n,r,s=!1,o){if(!(e instanceof Element)||!(n instanceof Element))return;for(let i of["::before","::after","::first-letter"])try{let c=N(e,i);if(!c||typeof c[Symbol.iterator]!="function")continue;if(i==="::first-letter"){let g=getComputedStyle(e);if(!(c.color!==g.color||c.fontSize!==g.fontSize||c.fontWeight!==g.fontWeight))continue;let x=Array.from(n.childNodes).find(b=>b.nodeType===Node.TEXT_NODE&&b.textContent&&b.textContent.trim().length>0);if(!x)continue;let C=x.textContent,k=C.match(/^([^\p{L}\p{N}\s]*[\p{L}\p{N}](?:['’])?)/u)?.[0],M=C.slice(k?.length||0);if(!k||/[\uD800-\uDFFF]/.test(k))continue;let E=document.createElement("span");E.textContent=k,E.dataset.snapdomPseudo="::first-letter";let v=q(c),_=U(v,"span",r);l.preStyleMap.set(E,_);let L=document.createTextNode(M);n.replaceChild(L,x),n.insertBefore(E,L);continue}let f=c.getPropertyValue("content"),p=c.getPropertyValue("background-image"),d=c.getPropertyValue("background-color"),m=f!=="none",h=p&&p!=="none",u=d&&d!=="transparent"&&d!=="rgba(0, 0, 0, 0)";if(m||h||u){let g=c.getPropertyValue("font-family"),y=parseInt(c.getPropertyValue("font-size"))||32,x=parseInt(c.getPropertyValue("font-weight"))||!1,C=c.getPropertyValue("color")||"#000",w=document.createElement("span");w.dataset.snapdomPseudo=i;let k=q(c),M=U(k,"span",r);l.preStyleMap.set(w,M);let E=$(g),v=ee(f);if(E&&v.length===1){let b=document.createElement("img");b.src=await oe(v,g,x,y,C),b.style=`width:${y}px;height:auto;object-fit:contain;`,w.appendChild(b)}else if(v.startsWith("url(")){let b=B(v);if(b&&b.trim()!=="")try{let I=document.createElement("img"),R=await A(j(b,{useProxy:o}));I.src=R,I.style=`width:${y}px;height:auto;object-fit:contain;`,w.appendChild(I)}catch(I){console.error(`[snapdom] Error in pseudo ${i} for`,e,I)}}else!E&&v&&v!=="none"&&(w.textContent=v);if(h)try{let b=F(p),I=await Promise.all(b.map(R=>T(R)));w.style.backgroundImage=I.join(", ")}catch(b){console.warn(`[snapdom] Failed to inline background-image for ${i}`,b)}if(u&&(w.style.backgroundColor=d),!(w.childNodes.length>0||w.textContent&&w.textContent.trim()!==""||h||u))continue;i==="::before"?n.insertBefore(w,n.firstChild):n.appendChild(w)}}catch(c){console.warn(`[snapdom] Failed to capture ${i} for`,e,c)}let t=Array.from(e.children),a=Array.from(n.children).filter(i=>!i.dataset.snapdomPseudo);for(let i=0;i<Math.min(t.length,a.length);i++)await H(t[i],a[i],r,s,o)}function ae(e){if(!e)return;let n=document.querySelectorAll("svg > defs");n.length&&e.querySelectorAll("svg").forEach(r=>{let s=r.querySelectorAll("use");if(!s.length)return;let o=new Set;if(s.forEach(a=>{let i=a.getAttribute("xlink:href")||a.getAttribute("href");i&&i.startsWith("#")&&o.add(i.slice(1))}),!o.size)return;let t=document.createElementNS("http://www.w3.org/2000/svg","defs");for(let a of o)for(let i of n){let c=i.querySelector(`#${CSS.escape(a)}`);if(c){t.appendChild(c.cloneNode(!0));break}}t.childNodes.length&&r.insertBefore(t,r.firstChild)})}async function se(e,n=!1,r=!1,s={}){let o,t="";try{o=D(e,n,s,e)}catch(a){throw console.warn("deepClone failed:",a),a}try{await H(e,o,n,r,s.useProxy)}catch(a){console.warn("inlinePseudoElements failed:",a)}try{ae(o)}catch(a){console.warn("inlineExternalDef failed:",a)}if(n){let a=Z();t=Array.from(a.entries()).map(([i,c])=>`.${c}{${i}}`).join("");for(let[i,c]of l.preStyleMap.entries()){if(i.tagName==="STYLE")continue;let f=a.get(c);f&&i.classList.add(f);let p=i.style?.backgroundImage;i.removeAttribute("style"),p&&p!=="none"&&(i.style.backgroundImage=p)}}else for(let[a,i]of l.preStyleMap.entries())a.tagName!=="STYLE"&&a.setAttribute("style",i.replace(/;/g,"; "));for(let[a,i]of l.preNodeMap.entries()){let c=i.scrollLeft,f=i.scrollTop;if((c||f)&&a instanceof HTMLElement){a.style.overflow="hidden",a.style.scrollbarWidth="none",a.style.msOverflowStyle="none";let d=document.createElement("div");for(d.style.transform=`translate(${-c}px, ${-f}px)`,d.style.willChange="transform",d.style.display="inline-block",d.style.width="100%";a.firstChild;)d.appendChild(a.firstChild);a.appendChild(d)}}if(e===l.preNodeMap.get(o)){let a=l.preStyle.get(e)||window.getComputedStyle(e);l.preStyle.set(e,a);let i=te(a.transform);o.style.margin="0",o.style.position="static",o.style.top="auto",o.style.left="auto",o.style.right="auto",o.style.bottom="auto",o.style.zIndex="auto",o.style.float="none",o.style.clear="none",o.style.transform=i||""}for(let[a,i]of l.preNodeMap.entries())i.tagName==="PRE"&&(a.style.marginTop="0",a.style.marginBlockStart="0");return{clone:o,classCSS:t}}async function ie(e,n={}){let r=Array.from(e.querySelectorAll("img")),s=async o=>{let t=o.src;try{let a=await A(t,{useProxy:n.useProxy});o.src=a,o.width||(o.width=o.naturalWidth||100),o.height||(o.height=o.naturalHeight||100)}catch{let a=document.createElement("div");a.style=`width: ${o.width||100}px; height: ${o.height||100}px; background: #ccc; display: inline-block; text-align: center; line-height: ${o.height||100}px; color: #666; font-size: 12px;`,a.innerText="img",o.replaceWith(a)}};for(let o=0;o<r.length;o+=4){let t=r.slice(o,o+4).map(s);await Promise.allSettled(t)}}async function ce(e,n,r={}){let s=[[e,n]],o=["background-image","mask","mask-image","-webkit-mask-image","mask-source","mask-box-image-source","mask-border-source","-webkit-mask-box-image-source"];for(;s.length;){let[t,a]=s.shift(),i=l.preStyle.get(t)||N(t);l.preStyle.has(t)||l.preStyle.set(t,i);for(let d of o){let m=i.getPropertyValue(d);if(!m||m==="none")continue;let h=F(m),u=await Promise.all(h.map(g=>T(g,r)));u.some(g=>g&&g!=="none"&&!/^url\(undefined/.test(g))&&a.style.setProperty(d,u.join(", "))}let c=i.getPropertyValue("background-color");c&&c!=="transparent"&&c!=="rgba(0, 0, 0, 0)"&&(a.style.backgroundColor=c);let f=Array.from(t.children),p=Array.from(a.children);for(let d=0;d<Math.min(f.length,p.length);d++)s.push([f[d],p[d]])}}async function le(e,n={}){if(!e)throw new Error("Element cannot be null or undefined");l.reset();let{compress:r=!0,embedFonts:s=!1,fast:o=!0,scale:t=1,useProxy:a=""}=n,i,c,f="",p="",d,m;if({clone:i,classCSS:c}=await se(e,r,s,n),await new Promise(u=>{P(async()=>{await ie(i,n),u()},{fast:o})}),await new Promise(u=>{P(async()=>{await ce(e,i,n),u()},{fast:o})}),s&&await new Promise(u=>{P(async()=>{f=await V(),u()},{fast:o})}),r){let u=J(i).sort(),g=u.join(",");l.baseStyle.has(g)?p=l.baseStyle.get(g):await new Promise(y=>{P(()=>{p=Q(u),l.baseStyle.set(g,p),y()},{fast:o})})}await new Promise(u=>{P(()=>{let g=e.getBoundingClientRect(),y=g.width,x=g.height,C=Number.isFinite(n.width),w=Number.isFinite(n.height),k=typeof t=="number"&&t!==1;if(!k){let R=g.width/g.height;C&&w?(y=n.width,x=n.height):C?(y=n.width,x=y/R):w&&(x=n.height,y=x*R)}if(y=Math.ceil(y),x=Math.ceil(x),i.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),i.style.transformOrigin="top left",!k&&(C||w)){let R=g.width,ue=g.height,pe=y/R,me=x/ue,he=i.style.transform||"",ge=`scale(${pe}, ${me})`;i.style.transform=`${ge} ${he}`.trim()}else k&&W()&&(i.style.scale=`${t}`);let M="http://www.w3.org/2000/svg",E=document.createElementNS(M,"foreignObject");E.setAttribute("width","100%"),E.setAttribute("height","100%");let v=document.createElement("style");v.textContent=p+f+"svg{overflow:visible;}"+c,E.appendChild(v),E.appendChild(i);let L=new XMLSerializer().serializeToString(E);m=`<svg xmlns="${M}" width="${y}" height="${x}" viewBox="0 0 ${y} ${x}">`+L+"</svg>",d=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(m)}`,u()},{fast:o})});let h=document.getElementById("snapdom-sandbox");return h&&h.style.position==="absolute"&&h.remove(),d}async function Ee(e,{dpr:n=1,scale:r=1}){let s=new Image;return s.src=e,await s.decode(),W?(s.width=s.width*r,s.height=s.height*r):(s.width=s.width/r,s.height=s.height/r),s}async function fe(e,{dpr:n=1,scale:r=1}={}){let s=new Image;s.src=e,await s.decode();let o=document.createElement("canvas"),t=s.width*r,a=s.height*r;o.width=Math.ceil(t*n),o.height=Math.ceil(a*n);let i=o.getContext("2d");return i.scale(n,n),i.drawImage(s,0,0,t,a),o.style.width=`${t}px`,o.style.height=`${a}px`,o}async function de(e,{type:n="svg",scale:r=1,backgroundColor:s="#fff",quality:o}={}){let t={jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",webp:"image/webp"}[n]||"image/png";if(n==="svg"){let i=decodeURIComponent(e.split(",")[1]);return new Blob([i],{type:"image/svg+xml"})}let a=await X(e,{dpr:1,scale:r},s);return new Promise(i=>{a.toBlob(c=>i(c),`${t}`,o)})}async function X(e,{dpr:n=1,scale:r=1},s){let o=await fe(e,{dpr:n,scale:r});if(!s)return o;let t=document.createElement("canvas");t.width=o.width,t.height=o.height;let a=t.getContext("2d");return a.fillStyle=s,a.fillRect(0,0,t.width,t.height),a.drawImage(o,0,0),t}async function K(e,{dpr:n=1,scale:r=1,backgroundColor:s,quality:o},t="png"){let a=["jpg","jpeg","webp"].includes(t)?"#fff":void 0,c=await X(e,{dpr:n,scale:r},s??a),f=new Image;return f.src=c.toDataURL(`image/${t}`,o),await f.decode(),f.style.width=`${c.width/n}px`,f.style.height=`${c.height/n}px`,f}async function ve(e,{dpr:n=1,scale:r=1,backgroundColor:s="#fff",format:o="png",filename:t="capture"}={}){if(o==="svg"){let m=await de(e),h=URL.createObjectURL(m),u=document.createElement("a");u.href=h,u.download=`${t}.svg`,u.click(),URL.revokeObjectURL(h);return}let a=["jpg","jpeg","webp"].includes(o)?"#fff":void 0,c=await X(e,{dpr:n,scale:r},s??a),f={jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",webp:"image/webp"}[o]||"image/png",p=c.toDataURL(f),d=document.createElement("a");d.href=p,d.download=`${t}.${o}`,d.click()}async function S(e,n={}){if(n={scale:1,...n},!e)throw new Error("Element cannot be null or undefined");return n.iconFonts&&ne(n.iconFonts),await S.capture(e,n)}S.capture=async(e,n={})=>{let r=await le(e,n),s=window.devicePixelRatio||1,o=n.scale||1;return{url:r,options:n,toRaw:()=>r,toImg:()=>Ee(r,{dpr:s,scale:o}),toCanvas:()=>fe(r,{dpr:s,scale:o}),toBlob:t=>de(r,{dpr:s,scale:o,...t}),toPng:t=>K(r,{dpr:s,scale:o,...t},"png"),toJpg:t=>K(r,{dpr:s,scale:o,...t},"jpeg"),toWebp:t=>K(r,{dpr:s,scale:o,...t},"webp"),download:({format:t="png",filename:a="capture",backgroundColor:i}={})=>ve(r,{dpr:s,scale:o,backgroundColor:i,format:t,filename:a})}};S.toRaw=async(e,n)=>(await S.capture(e,n)).toRaw();S.toImg=async(e,n)=>(await S.capture(e,n)).toImg();S.toCanvas=async(e,n)=>(await S.capture(e,n)).toCanvas();S.toBlob=async(e,n)=>(await S.capture(e,n)).toBlob(n);S.toPng=async(e,n)=>(await S.capture(e,n)).toPng(n);S.toJpg=async(e,n)=>(await S.capture(e,n)).toJpg(n);S.toWebp=async(e,n)=>(await S.capture(e,n)).toWebp(n);S.download=async(e,n={})=>{let{format:r="png",filename:s="capture",backgroundColor:o,...t}=n;return await(await S.capture(e,t)).download({format:r,filename:s,backgroundColor:o})};async function ke(e=document,n={}){let{embedFonts:r=!0,reset:s=!1}=n;if(s){l.reset();return}await document.fonts.ready,Y();let o=[],t=[];e?.querySelectorAll&&(o=Array.from(e.querySelectorAll("img[src]")),t=Array.from(e.querySelectorAll("*")));let a=[];for(let i of o){let c=i.src;l.image.has(c)||a.push(A(c,{useProxy:n.useProxy}).then(f=>l.image.set(c,f)).catch(()=>{}))}for(let i of t){let c=N(i).backgroundImage;if(c&&c!=="none"){let f=F(c);for(let p of f)p.startsWith("url(")&&a.push(T(p,n).catch(()=>{}))}}r&&await V({preCached:!0}),await Promise.all(a)}export{ke as preCache,S as snapdom};
1
+ var l={image:new Map,background:new Map,resource:new Map,defaultStyle:new Map,baseStyle:new Map,computedStyle:new WeakMap,font:new Set,snapshot:new WeakMap,snapshotKey:new Map,preStyleMap:new Map,preStyle:new WeakMap,preNodeMap:new Map,reset:Re};function Re(){l.computedStyle=new WeakMap,l.snapshot=new WeakMap,l.snapshotKey.clear(),l.preStyleMap.clear(),l.preStyle=new WeakMap,l.preNodeMap.clear()}var Ne=["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 ie(){for(let e of Ne)ce(e)}function ce(e){if(l.defaultStyle.has(e))return l.defaultStyle.get(e);if(new Set(["script","style","meta","link","noscript","template"]).has(e)){let i={};return l.defaultStyle.set(e,i),i}let r=document.getElementById("snapdom-sandbox");r||(r=document.createElement("div"),r.id="snapdom-sandbox",r.style.position="absolute",r.style.left="-9999px",r.style.top="-9999px",r.style.width="0",r.style.height="0",r.style.overflow="hidden",document.body.appendChild(r));let c=document.createElement(e);c.style.all="initial",r.appendChild(c);let o=getComputedStyle(c),n={};for(let i of o)n[i]=o.getPropertyValue(i);return r.removeChild(c),l.defaultStyle.set(e,n),n}function U(e,t,r=!1){let c=[],o=ce(t);for(let[n,i]of Object.entries(e))if(!r)i&&c.push(`${n}:${i}`);else{let a=o[n];i&&i!==a&&c.push(`${n}:${i}`)}return c.sort().join(";")}function le(e){let t=new Set;return e.nodeType!==Node.ELEMENT_NODE&&e.nodeType!==Node.DOCUMENT_FRAGMENT_NODE?[]:(e.tagName&&t.add(e.tagName.toLowerCase()),typeof e.querySelectorAll=="function"&&e.querySelectorAll("*").forEach(r=>t.add(r.tagName.toLowerCase())),Array.from(t))}function fe(e){let t=new Map;for(let c of e){let o=l.defaultStyle.get(c);if(!o)continue;let n=Object.entries(o).map(([i,a])=>`${i}:${a};`).sort().join("");t.has(n)||t.set(n,[]),t.get(n).push(c)}let r="";for(let[c,o]of t.entries())r+=`${o.join(",")} { ${c} }
2
+ `;return r}function de(){let e=new Set(l.preStyleMap.values()),t=new Map,r=1;for(let c of e)t.set(c,`c${r++}`);return t}async function P(e,t={}){let r=D(e),c=/^((repeating-)?(linear|radial|conic)-gradient)\(/i.test(e);if(r){let o=q(r);if(l.background.has(o))return t.skipInline?void 0:`url(${l.background.get(o)})`;{let n=await M(o,{useProxy:t.useProxy});return l.background.set(o,n),t.skipInline?void 0:`url("${n}")`}}return e}function L(e,{fast:t=!1}={}){if(t)return e();"requestIdleCallback"in window?requestIdleCallback(e,{timeout:50}):setTimeout(e,1)}function R(e,t=null){if(!(e instanceof Element))return window.getComputedStyle(e,t);let r=l.computedStyle.get(e);if(r||(r=new Map,l.computedStyle.set(e,r)),!r.has(t)){let c=window.getComputedStyle(e,t);r.set(t,c)}return r.get(t)}function ue(e){let t=e.replace(/^['"]|['"]$/g,"");if(t.startsWith("\\"))try{return String.fromCharCode(parseInt(t.replace("\\",""),16))}catch{return t}return t}function D(e){let t=e.match(/url\((['"]?)(.*?)(\1)\)/);if(!t)return null;let r=t[2].trim();return r.startsWith("#")?null:r}function M(e,{timeout:t=3e3,useProxy:r=""}={}){function c(s){try{return new URL(s,window.location.href).origin===window.location.origin?"use-credentials":"anonymous"}catch{return"anonymous"}}async function o(s){let f=u=>fetch(u,{mode:"cors",credentials:c(u)==="use-credentials"?"include":"omit"}).then(d=>d.blob()).then(d=>new Promise((h,p)=>{let m=new FileReader;m.onloadend=()=>{let g=m.result;if(typeof g!="string"||!g.startsWith("data:image/")){p(new Error("Invalid image data URL"));return}h(g)},m.onerror=()=>p(new Error("FileReader error")),m.readAsDataURL(d)}));try{return await f(s)}catch{if(r&&typeof r=="string"){let d=r.replace(/\/$/,"")+q(s);try{return await f(d)}catch{throw new Error("[SnapDOM - fetchImage] CORS restrictions prevented image capture (even via proxy)")}}else throw new Error("[SnapDOM - fetchImage] Fetch fallback failed and no proxy provided")}}let n=c(e);return l.image.has(e)?Promise.resolve(l.image.get(e)):e.startsWith("data:image/")?(l.image.set(e,e),Promise.resolve(e)):/\.svg(\?.*)?$/i.test(e)?(async()=>{try{let f=await(await fetch(e,{mode:"cors",credentials:n==="use-credentials"?"include":"omit"})).text(),u=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(f)}`;return l.image.set(e,u),u}catch{return o(e)}})():new Promise((s,f)=>{let u=setTimeout(()=>{f(new Error("[SnapDOM - fetchImage] Image load timed out"))},t),d=new Image;d.crossOrigin=n,d.onload=async()=>{clearTimeout(u);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");l.image.set(e,m),s(m)}catch{try{let h=await o(e);l.image.set(e,h),s(h)}catch(h){f(h)}}},d.onerror=async()=>{clearTimeout(u),console.error(`[SnapDOM - fetchImage] Image failed to load: ${e}`);try{let h=await o(e);l.image.set(e,h),s(h)}catch(h){f(h)}},d.src=e})}function Z(e){let t={};for(let r of e)t[r]=e.getPropertyValue(r);return t}function pe(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}function me(e){if(!e||e==="none")return"";let t=e.replace(/translate[XY]?\([^)]*\)/g,"");return t=t.replace(/matrix\(([^)]+)\)/g,(r,c)=>{let o=c.split(",").map(n=>n.trim());return o.length!==6?`matrix(${c})`:(o[4]="0",o[5]="0",`matrix(${o.join(", ")})`)}),t=t.replace(/matrix3d\(([^)]+)\)/g,(r,c)=>{let o=c.split(",").map(n=>n.trim());return o.length!==16?`matrix3d(${c})`:(o[12]="0",o[13]="0",`matrix3d(${o.join(", ")})`)}),t.trim().replace(/\s{2,}/g," ")}function q(e){if(/%[0-9A-Fa-f]{2}/.test(e))return e;try{return encodeURI(e)}catch{return e}}function F(e){let t=[],r=0,c=0;for(let o=0;o<e.length;o++){let n=e[o];n==="("&&r++,n===")"&&r--,n===","&&r===0&&(t.push(e.slice(c,o).trim()),c=o+1)}return t.push(e.slice(c).trim()),t}function Te(e){let t={};for(let r=0;r<e.length;r++){let c=e[r],o=e.getPropertyValue(c);(c==="background-image"||c==="content")&&o.includes("url(")&&!o.includes("data:")&&(o="none"),t[c]=o}return t}function z(e,t,r){if(e.tagName==="STYLE")return;l.preStyle.has(e)||l.preStyle.set(e,R(e));let c=l.preStyle.get(e);if(!l.snapshot.has(e)){let s=Te(c);l.snapshot.set(e,s)}let o=l.snapshot.get(e),n=Object.entries(o).sort(([s],[f])=>s.localeCompare(f)).map(([s,f])=>`${s}:${f}`).join(";");if(l.snapshotKey.has(n)){l.preStyleMap.set(t,l.snapshotKey.get(n));return}let i=e.tagName?.toLowerCase()||"div",a=U(o,i,r);l.snapshotKey.set(n,a),l.preStyleMap.set(t,a)}function j(e,t,r={},c){if(!e)throw new Error("Invalid node");let o=new Set,n=null;if(e.nodeType===Node.TEXT_NODE||e.nodeType!==Node.ELEMENT_NODE)return e.cloneNode(!0);if(e.getAttribute("data-capture")==="exclude"){let a=document.createElement("div"),s=e.getBoundingClientRect();return a.style.cssText=`display:inline-block;width:${s.width}px;height:${s.height}px;visibility:hidden;`,a}if(r.exclude&&Array.isArray(r.exclude))for(let a of r.exclude)try{if(e.matches?.(a)){let s=document.createElement("div"),f=e.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: ${a}`,s)}if(typeof r.filter=="function")try{if(!r.filter(e,c||e)){let a=document.createElement("div"),s=e.getBoundingClientRect();return a.style.cssText=`display:inline-block;width:${s.width}px;height:${s.height}px;visibility:hidden;`,a}}catch(a){console.warn("Error in filter function:",a)}if(e.tagName==="IFRAME"){let a=document.createElement("div");return a.style.cssText=`width:${e.offsetWidth}px;height:${e.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;`,a}if(e.getAttribute("data-capture")==="placeholder"){let a=e.cloneNode(!1);l.preNodeMap.set(a,e),z(e,a,t);let s=document.createElement("div");return s.textContent=e.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;",a.appendChild(s),a}if(e.tagName==="CANVAS"){let a=e.toDataURL(),s=document.createElement("img");return s.src=a,s.width=e.width,s.height=e.height,l.preNodeMap.set(s,e),z(e,s,t),s}let i;try{i=e.cloneNode(!1),l.preNodeMap.set(i,e)}catch(a){throw console.error("[Snapdom] Failed to clone node:",e,a),a}if(e instanceof HTMLTextAreaElement){i.textContent=e.value,i.value=e.value;let a=e.getBoundingClientRect();return i.style.width=`${a.width}px`,i.style.height=`${a.height}px`,i}if(e instanceof HTMLInputElement&&(i.value=e.value,i.setAttribute("value",e.value),e.checked!==void 0&&(i.checked=e.checked,e.checked&&i.setAttribute("checked",""),e.indeterminate&&(i.indeterminate=e.indeterminate))),e instanceof HTMLSelectElement&&(n=e.value),z(e,i,t),e.shadowRoot)if(Array.from(e.shadowRoot.querySelectorAll("slot")).length>0){for(let s of e.shadowRoot.childNodes)if(s.nodeType===Node.ELEMENT_NODE&&s.tagName==="STYLE"){let f=s.textContent||"";f.trim()&&t&&(l.preStyle||(l.preStyle=new WeakMap),l.preStyle.set(s,f))}}else{let s=document.createDocumentFragment();for(let f of e.shadowRoot.childNodes){if(f.nodeType===Node.ELEMENT_NODE&&f.tagName==="STYLE"){let d=f.textContent||"";d.trim()&&t&&(l.preStyle||(l.preStyle=new WeakMap),l.preStyle.set(f,d));continue}let u=j(f,t,r,c||e);u&&s.appendChild(u)}i.appendChild(s)}if(e.tagName==="SLOT"){let a=e.assignedNodes?.({flatten:!0})||[],s=a.length>0?a:Array.from(e.childNodes),f=document.createDocumentFragment();for(let u of s){let d=j(u,t,r,c||e);d&&f.appendChild(d)}return f}for(let a of e.childNodes){if(o.has(a))continue;let s=j(a,t,r,c||e);s&&i.appendChild(s)}if(n!==null&&i instanceof HTMLSelectElement){i.value=n;for(let a of i.options)a.value===n?a.setAttribute("selected",""):a.removeAttribute("selected")}return i}var Ae=[/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],ee=[];function he(e){let t=Array.isArray(e)?e:[e];for(let r of t)r instanceof RegExp?ee.push(r):typeof r=="string"?ee.push(new RegExp(r,"i")):console.warn("[snapdom] Ignored invalid iconFont value:",r)}function v(e){let t=typeof e=="string"?e:"",r=[...Ae,...ee];for(let c of r)if(c instanceof RegExp&&c.test(t))return!0;return!!(/icon/i.test(t)||/glyph/i.test(t)||/symbols/i.test(t)||/feather/i.test(t)||/fontawesome/i.test(t))}async function ge(e,t,r,c=32,o="#000"){t=t.replace(/^['"]+|['"]+$/g,"");let n=window.devicePixelRatio||1,a=document.createElement("canvas").getContext("2d");a.font=r?`${r} ${c}px "${t}"`:`${c}px "${t}"`;let s=a.measureText(e),f=s.actualBoundingBoxAscent||c*.8,u=s.actualBoundingBoxDescent||c*.2,d=f+u,h=s.width,p=document.createElement("canvas");p.width=Math.ceil(h*n),p.height=Math.ceil(d*n);let m=p.getContext("2d");return m.scale(n,n),m.font=a.font,m.textAlign="left",m.textBaseline="alphabetic",m.fillStyle=o,m.fillText(e,0,f),p.toDataURL()}function ye(e){return Array.from(document.styleSheets).some(t=>t.href===e)}function Me(e){return new Promise(t=>{if(ye(e))return t(null);let r=document.createElement("link");r.rel="stylesheet",r.href=e,r.setAttribute("data-snapdom","injected-import"),r.onload=()=>t(r),r.onerror=()=>t(null),document.head.appendChild(r)})}async function H({preCached:e=!1}={}){if(l.resource.has("fonts-embed-css")){if(e){let n=document.createElement("style");n.setAttribute("data-snapdom","embedFonts"),n.textContent=l.resource.get("fonts-embed-css"),document.head.appendChild(n)}return l.resource.get("fonts-embed-css")}let t=/@import\s+url\(["']?([^"')]+)["']?\)/g,r=[];for(let n of document.querySelectorAll("style")){let i=n.textContent||"",a=Array.from(i.matchAll(t));for(let s of a){let f=s[1];v(f)||ye(f)||r.push(f)}}await Promise.all(r.map(Me));let c=Array.from(document.querySelectorAll('link[rel="stylesheet"]')).filter(n=>n.href),o="";for(let n of c)try{let a=await(await fetch(n.href)).text();if(v(n.href)||v(a))continue;let s=/url\((["']?)([^"')]+)\1\)/g,f=await Promise.all(Array.from(a.matchAll(s)).map(async d=>{let h=D(d[0]);if(!h)return null;let p=h;if(!p.startsWith("http")&&!p.startsWith("data:")&&(p=new URL(p,n.href).href),v(p))return null;if(l.resource.has(p))return l.font.add(p),{original:d[0],inlined:`url(${l.resource.get(p)})`};if(l.font.has(p))return null;try{let g=await(await fetch(p)).blob(),w=await new Promise(y=>{let E=new FileReader;E.onload=()=>y(E.result),E.readAsDataURL(g)});return l.resource.set(p,w),l.font.add(p),{original:d[0],inlined:`url(${w})`}}catch{return console.warn("[snapdom] Failed to fetch font resource:",p),null}})),u=a;for(let d of f)d&&(u=u.replace(d.original,d.inlined));o+=u+`
3
+ `}catch{console.warn("[snapdom] Failed to fetch CSS:",n.href)}for(let n of document.styleSheets)try{if(!n.href||c.every(i=>i.href!==n.href)){for(let i of n.cssRules)if(i.type===CSSRule.FONT_FACE_RULE){let a=i.style.getPropertyValue("src"),s=i.style.getPropertyValue("font-family");if(!a||v(s))continue;let f=/url\((["']?)([^"')]+)\1\)/g,u=/local\((["']?)[^)]+?\1\)/g,d=!!a.match(f),h=!!a.match(u);if(!d&&h){o+=`@font-face{font-family:${s};src:${a};font-style:${i.style.getPropertyValue("font-style")||"normal"};font-weight:${i.style.getPropertyValue("font-weight")||"normal"};}`;continue}let p=a,m=Array.from(a.matchAll(f));for(let g of m){let w=g[2].trim();if(!w)continue;let y=w;if(!y.startsWith("http")&&!y.startsWith("data:")&&(y=new URL(y,n.href||location.href).href),!v(y)){if(l.resource.has(y)){l.font.add(y),p=p.replace(g[0],`url(${l.resource.get(y)})`);continue}if(!l.font.has(y))try{let k=await(await fetch(y)).blob(),$=await new Promise(N=>{let S=new FileReader;S.onload=()=>N(S.result),S.readAsDataURL(k)});l.resource.set(y,$),l.font.add(y),p=p.replace(g[0],`url(${$})`)}catch{console.warn("[snapdom] Failed to fetch font URL:",y)}}}o+=`@font-face{font-family:${s};src:${p};font-style:${i.style.getPropertyValue("font-style")||"normal"};font-weight:${i.style.getPropertyValue("font-weight")||"normal"};}`}}}catch(i){console.warn("[snapdom] Cannot access stylesheet",n.href,i)}for(let n of document.fonts)if(n.family&&n.status==="loaded"&&n._snapdomSrc){if(v(n.family))continue;let i=n._snapdomSrc;if(!i.startsWith("data:")){if(l.resource.has(n._snapdomSrc))i=l.resource.get(n._snapdomSrc),l.font.add(n._snapdomSrc);else if(!l.font.has(n._snapdomSrc))try{let s=await(await fetch(n._snapdomSrc)).blob();i=await new Promise(f=>{let u=new FileReader;u.onload=()=>f(u.result),u.readAsDataURL(s)}),l.resource.set(n._snapdomSrc,i),l.font.add(n._snapdomSrc)}catch{console.warn("[snapdom] Failed to fetch dynamic font src:",n._snapdomSrc);continue}}o+=`@font-face{font-family:'${n.family}';src:url(${i});font-style:${n.style||"normal"};font-weight:${n.weight||"normal"};}`}if(o&&(l.resource.set("fonts-embed-css",o),e)){let n=document.createElement("style");n.setAttribute("data-snapdom","embedFonts"),n.textContent=o,document.head.appendChild(n)}return o}async function te(e,t,r,c=!1,o){if(!(e instanceof Element)||!(t instanceof Element))return;for(let a of["::before","::after","::first-letter"])try{let s=R(e,a);if(!s||typeof s[Symbol.iterator]!="function")continue;if(a==="::first-letter"){let b=getComputedStyle(e);if(!(s.color!==b.color||s.fontSize!==b.fontSize||s.fontWeight!==b.fontWeight))continue;let A=Array.from(t.childNodes).find(Q=>Q.nodeType===Node.TEXT_NODE&&Q.textContent&&Q.textContent.trim().length>0);if(!A)continue;let re=A.textContent,O=re.match(/^([^\p{L}\p{N}\s]*[\p{L}\p{N}](?:['’])?)/u)?.[0],ke=re.slice(O?.length||0);if(!O||/[\uD800-\uDFFF]/.test(O))continue;let _=document.createElement("span");_.textContent=O,_.dataset.snapdomPseudo="::first-letter";let $e=Z(s),Ie=U($e,"span",r);l.preStyleMap.set(_,Ie);let se=document.createTextNode(ke);t.replaceChild(se,A),t.insertBefore(_,se);continue}let f=s.getPropertyValue("content"),u=s.getPropertyValue("background-image"),d=s.getPropertyValue("background-color"),h=s.getPropertyValue("font-family"),p=parseInt(s.getPropertyValue("font-size"))||32,m=parseInt(s.getPropertyValue("font-weight"))||!1,g=s.getPropertyValue("color")||"#000",w=s.getPropertyValue("display"),y=parseFloat(s.getPropertyValue("width")),E=parseFloat(s.getPropertyValue("height")),k=s.getPropertyValue("border-style"),$=s.getPropertyValue("transform"),N=v(h),S;/counter\s*\(|counters\s*\(/.test(f)?S="- ":S=ue(f);let Y=f!=="none"&&S!=="",B=u&&u!=="none",W=d&&d!=="transparent"&&d!=="rgba(0, 0, 0, 0)",X=w!=="inline"&&(y>0||E>0),T=k&&k!=="none",V=$&&$!=="none";if(!(Y||B||W||X||T||V))continue;let C=document.createElement("span");C.dataset.snapdomPseudo=a;let G=Z(s),J=U(G,"span",r);if(l.preStyleMap.set(C,J),N&&S.length===1){let b=document.createElement("img");b.src=await ge(S,h,m,p,g),b.style=`width:${p}px;height:auto;object-fit:contain;`,C.appendChild(b)}else if(S.startsWith("url(")){let b=D(S);if(b&&b.trim()!=="")try{let I=document.createElement("img"),A=await M(q(b,{useProxy:o}));I.src=A,I.style=`width:${p}px;height:auto;object-fit:contain;`,C.appendChild(I)}catch(I){console.error(`[snapdom] Error in pseudo ${a} for`,e,I)}}else!N&&Y&&(C.textContent=S);if(B)try{let b=F(u),I=await Promise.all(b.map(A=>P(A)));C.style.backgroundImage=I.join(", ")}catch(b){console.warn(`[snapdom] Failed to inline background-image for ${a}`,b)}if(W&&(C.style.backgroundColor=d),!(C.childNodes.length>0||C.textContent&&C.textContent.trim()!==""||B||W||X||T||V))continue;a==="::before"?t.insertBefore(C,t.firstChild):t.appendChild(C)}catch(s){console.warn(`[snapdom] Failed to capture ${a} for`,e,s)}let n=Array.from(e.children),i=Array.from(t.children).filter(a=>!a.dataset.snapdomPseudo);for(let a=0;a<Math.min(n.length,i.length);a++)await te(n[a],i[a],r,c,o)}function we(e){if(!e)return;let t=document.querySelectorAll("svg > defs");t.length&&e.querySelectorAll("svg").forEach(r=>{let c=r.querySelectorAll("use");if(!c.length)return;let o=new Set;if(c.forEach(i=>{let a=i.getAttribute("xlink:href")||i.getAttribute("href");a&&a.startsWith("#")&&o.add(a.slice(1))}),!o.size)return;let n=document.createElementNS("http://www.w3.org/2000/svg","defs");for(let i of o)for(let a of t){let s=a.querySelector(`#${CSS.escape(i)}`);if(s){n.appendChild(s.cloneNode(!0));break}}n.childNodes.length&&r.insertBefore(n,r.firstChild)})}async function xe(e,t=!1,r=!1,c={}){let o,n="";try{o=j(e,t,c,e)}catch(i){throw console.warn("deepClone failed:",i),i}try{await te(e,o,t,r,c.useProxy)}catch(i){console.warn("inlinePseudoElements failed:",i)}try{we(o)}catch(i){console.warn("inlineExternalDef failed:",i)}if(t){let i=de();n=Array.from(i.entries()).map(([a,s])=>`.${s}{${a}}`).join("");for(let[a,s]of l.preStyleMap.entries()){if(a.tagName==="STYLE")continue;let f=i.get(s);f&&a.classList.add(f);let u=a.style?.backgroundImage;a.removeAttribute("style"),u&&u!=="none"&&(a.style.backgroundImage=u)}}else for(let[i,a]of l.preStyleMap.entries())i.tagName!=="STYLE"&&i.setAttribute("style",a.replace(/;/g,"; "));for(let[i,a]of l.preNodeMap.entries()){let s=a.scrollLeft,f=a.scrollTop;if((s||f)&&i instanceof HTMLElement){i.style.overflow="hidden",i.style.scrollbarWidth="none",i.style.msOverflowStyle="none";let d=document.createElement("div");for(d.style.transform=`translate(${-s}px, ${-f}px)`,d.style.willChange="transform",d.style.display="inline-block",d.style.width="100%";i.firstChild;)d.appendChild(i.firstChild);i.appendChild(d)}}if(e===l.preNodeMap.get(o)){let i=l.preStyle.get(e)||window.getComputedStyle(e);l.preStyle.set(e,i);let a=me(i.transform);o.style.margin="0",o.style.position="static",o.style.top="auto",o.style.left="auto",o.style.right="auto",o.style.bottom="auto",o.style.zIndex="auto",o.style.float="none",o.style.clear="none",o.style.transform=a||""}for(let[i,a]of l.preNodeMap.entries())a.tagName==="PRE"&&(i.style.marginTop="0",i.style.marginBlockStart="0");return{clone:o,classCSS:n}}async function Se(e,t={}){let r=Array.from(e.querySelectorAll("img")),c=async o=>{let n=o.src;try{let i=await M(n,{useProxy:t.useProxy});o.src=i,o.width||(o.width=o.naturalWidth||100),o.height||(o.height=o.naturalHeight||100)}catch{let i=document.createElement("div");i.style=`width: ${o.width||100}px; height: ${o.height||100}px; background: #ccc; display: inline-block; text-align: center; line-height: ${o.height||100}px; color: #666; font-size: 12px;`,i.innerText="img",o.replaceWith(i)}};for(let o=0;o<r.length;o+=4){let n=r.slice(o,o+4).map(c);await Promise.allSettled(n)}}async function be(e,t,r={}){let c=[[e,t]],o=["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[n,i]=c.shift(),a=l.preStyle.get(n)||R(n);l.preStyle.has(n)||l.preStyle.set(n,a);for(let d of o){let h=a.getPropertyValue(d);if(!h||h==="none")continue;let p=F(h),m=await Promise.all(p.map(g=>P(g,r)));m.some(g=>g&&g!=="none"&&!/^url\(undefined/.test(g))&&i.style.setProperty(d,m.join(", "))}let s=a.getPropertyValue("background-color");s&&s!=="transparent"&&s!=="rgba(0, 0, 0, 0)"&&(i.style.backgroundColor=s);let f=Array.from(n.children),u=Array.from(i.children);for(let d=0;d<Math.min(f.length,u.length);d++)c.push([f[d],u[d]])}}async function Ce(e,t={}){if(!e)throw new Error("Element cannot be null or undefined");l.reset();let{compress:r=!0,embedFonts:c=!1,fast:o=!0,scale:n=1,useProxy:i=""}=t,a,s,f="",u="",d,h;if({clone:a,classCSS:s}=await xe(e,r,c,t),await new Promise(m=>{L(async()=>{await Se(a,t),m()},{fast:o})}),await new Promise(m=>{L(async()=>{await be(e,a,t),m()},{fast:o})}),c&&await new Promise(m=>{L(async()=>{f=await H(),m()},{fast:o})}),r){let m=le(a).sort(),g=m.join(",");l.baseStyle.has(g)?u=l.baseStyle.get(g):await new Promise(w=>{L(()=>{u=fe(m),l.baseStyle.set(g,u),w()},{fast:o})})}await new Promise(m=>{L(()=>{let g=e.getBoundingClientRect(),w=g.width,y=g.height,E=Number.isFinite(t.width),k=Number.isFinite(t.height),$=typeof n=="number"&&n!==1;if(!$){let T=g.width/g.height;E&&k?(w=t.width,y=t.height):E?(w=t.width,y=w/T):k&&(y=t.height,w=y*T)}if(w=Math.ceil(w),y=Math.ceil(y),a.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),a.style.transformOrigin="top left",!$&&(E||k)){let T=g.width,V=g.height,ae=w/T,C=y/V,G=a.style.transform||"",J=`scale(${ae}, ${C})`;a.style.transform=`${J} ${G}`.trim()}let N="http://www.w3.org/2000/svg",S=document.createElementNS(N,"foreignObject");S.setAttribute("width","100%"),S.setAttribute("height","100%");let K=document.createElement("style");K.textContent=u+f+"svg{overflow:visible;}"+s,S.appendChild(K),S.appendChild(a);let B=new XMLSerializer().serializeToString(S);h=`<svg xmlns="${N}" width="${w}" height="${y}" viewBox="0 0 ${w} ${y}">`+B+"</svg>",d=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(h)}`,m()},{fast:o})});let p=document.getElementById("snapdom-sandbox");return p&&p.style.position==="absolute"&&p.remove(),d}async function Pe(e,{dpr:t=1,scale:r=1}){let c=new Image;return c.src=e,await c.decode(),c.width=c.width*r,c.height=c.height*r,c}async function Ee(e,{dpr:t=1,scale:r=1}={}){let c=new Image;c.src=e,c.crossOrigin="anonymous",c.loading="eager",c.decoding="sync";let o=pe(),n=!1;if(o&&(document.body.appendChild(c),n=!0),await c.decode(),o&&await new Promise(u=>setTimeout(u,100)),c.width===0||c.height===0)throw n&&c.remove(),new Error("Image failed to load or has no dimensions");let i=c.width*r,a=c.height*r,s=document.createElement("canvas");s.width=Math.ceil(i*t),s.height=Math.ceil(a*t),s.style.width=`${i}px`,s.style.height=`${a}px`;let f=s.getContext("2d");return f.scale(t,t),f.drawImage(c,0,0,i,a),n&&c.remove(),s}async function ve(e,{type:t="svg",scale:r=1,backgroundColor:c="#fff",quality:o}={}){let n={jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",webp:"image/webp"}[t]||"image/png";if(t==="svg"){let a=decodeURIComponent(e.split(",")[1]);return new Blob([a],{type:"image/svg+xml"})}let i=await oe(e,{dpr:1,scale:r},c);return new Promise(a=>{i.toBlob(s=>a(s),`${n}`,o)})}async function oe(e,{dpr:t=1,scale:r=1},c){let o=await Ee(e,{dpr:t,scale:r});if(!c)return o;let n=document.createElement("canvas");n.width=o.width,n.height=o.height;let i=n.getContext("2d");return i.fillStyle=c,i.fillRect(0,0,n.width,n.height),i.drawImage(o,0,0),n}async function ne(e,{dpr:t=1,scale:r=1,backgroundColor:c,quality:o},n="png"){let i=["jpg","jpeg","webp"].includes(n)?"#fff":void 0,s=await oe(e,{dpr:t,scale:r},c??i),f=new Image;return f.src=s.toDataURL(`image/${n}`,o),await f.decode(),f.style.width=`${s.width/t}px`,f.style.height=`${s.height/t}px`,f}async function Le(e,{dpr:t=1,scale:r=1,backgroundColor:c,format:o="png",filename:n="snapDOM"}={}){if(o==="svg"){let h=await ve(e),p=URL.createObjectURL(h),m=document.createElement("a");m.href=p,m.download=`${n}.svg`,m.click(),URL.revokeObjectURL(p);return}let i=["jpg","jpeg","webp"].includes(o)?"#fff":void 0,s=await oe(e,{dpr:t,scale:r},c??i),f={jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",webp:"image/webp"}[o]||"image/png",u=s.toDataURL(f),d=document.createElement("a");d.href=u,d.download=`${n}.${o}`,d.click()}async function x(e,t={}){if(t={scale:1,...t},!e)throw new Error("Element cannot be null or undefined");return t.iconFonts&&he(t.iconFonts),await x.capture(e,t)}x.capture=async(e,t={})=>{let r=await Ce(e,t),c=window.devicePixelRatio||1,o=t.scale||1;return{url:r,options:t,toRaw:()=>r,toImg:()=>Pe(r,{dpr:c,scale:o}),toCanvas:()=>Ee(r,{dpr:c,scale:o}),toBlob:n=>ve(r,{dpr:c,scale:o,...n}),toPng:n=>ne(r,{dpr:c,scale:o,...n},"png"),toJpg:n=>ne(r,{dpr:c,scale:o,...n},"jpeg"),toWebp:n=>ne(r,{dpr:c,scale:o,...n},"webp"),download:({format:n="png",filename:i="capture",backgroundColor:a}={})=>Le(r,{dpr:c,scale:o,backgroundColor:a,format:n,filename:i})}};x.toRaw=async(e,t)=>(await x.capture(e,t)).toRaw();x.toImg=async(e,t)=>(await x.capture(e,t)).toImg();x.toCanvas=async(e,t)=>(await x.capture(e,t)).toCanvas();x.toBlob=async(e,t)=>(await x.capture(e,t)).toBlob(t);x.toPng=async(e,t)=>(await x.capture(e,t)).toPng(t);x.toJpg=async(e,t)=>(await x.capture(e,t)).toJpg(t);x.toWebp=async(e,t)=>(await x.capture(e,t)).toWebp(t);x.download=async(e,t={})=>{let{format:r="png",filename:c="capture",backgroundColor:o,...n}=t;return await(await x.capture(e,n)).download({format:r,filename:c,backgroundColor:o})};async function Fe(e=document,t={}){let{embedFonts:r=!0,reset:c=!1}=t;if(c){l.reset();return}await document.fonts.ready,ie();let o=[],n=[];e?.querySelectorAll&&(o=Array.from(e.querySelectorAll("img[src]")),n=Array.from(e.querySelectorAll("*")));let i=[];for(let a of o){let s=a.src;l.image.has(s)||i.push(M(s,{useProxy:t.useProxy}).then(f=>l.image.set(s,f)).catch(()=>{}))}for(let a of n){let s=R(a).backgroundImage;if(s&&s!=="none"){let f=F(s);for(let u of f)u.startsWith("url(")&&i.push(P(u,t).catch(()=>{}))}}r&&await H({preCached:!0}),await Promise.all(i)}export{Fe as preCache,x as snapdom};