snapdom.min.js 27 KB

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