@zumer/snapdom 0.9.2 → 0.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 +1,3 @@
1
- (()=>{function E(t,n,s){let o=[];for(let i of t){let e=t.getPropertyValue(i);e&&o.push(`${i}:${e}`)}return o.sort().join(";")}function S(t){let n=new Set(t.values()),s=new Map,o=1;for(let i of n)s.set(i,`c${o++}`);return s}function v(t,n,s,o,i){if(t.tagName==="STYLE")return;i.has(t)||i.set(t,window.getComputedStyle(t));let e=i.get(t),r=E(e,o);s.set(n,r)}function b(t,n,s,o,i){if(t.nodeType===Node.ELEMENT_NODE&&t.getAttribute("data-capture")==="exclude"){let l=document.createElement("div"),a=t.getBoundingClientRect();return l.style.cssText=`display: inline-block; width: ${a.width}px; height: ${a.height}px; visibility: hidden;`,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: 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.nodeType===Node.ELEMENT_NODE&&t.getAttribute("data-capture")==="placeholder"){let l=t.cloneNode(!1);i.set(l,t),v(t,l,n,s,o);let a=document.createElement("div");return a.textContent=t.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;",l.appendChild(a),l}if(t.tagName==="CANVAS"){let l=t.toDataURL(),a=document.createElement("img");return a.src=l,a.width=t.width,a.height=t.height,a}if(t.nodeType===Node.TEXT_NODE){if(!t.textContent.trim())return null;if(t.parentElement?.shadowRoot){let a=t.parentElement.tagName.toLowerCase();if(customElements.get(a))return null}return t.cloneNode(!0)}if(t.nodeType!==Node.ELEMENT_NODE)return t.cloneNode(!0);let e=t.cloneNode(!1);i.set(e,t),v(t,e,n,s,o);let r=document.createDocumentFragment();if(t.childNodes.forEach(l=>{let a=b(l,n,s,o,i);a&&r.appendChild(a)}),e.appendChild(r),t.shadowRoot){let l=Array.from(t.shadowRoot.children).filter(d=>d.tagName!=="STYLE").map(d=>b(d,n,s,o,i)).filter(Boolean),a=document.createDocumentFragment();l.forEach(d=>a.appendChild(d)),e.appendChild(a)}return e}function x(t,n=3e3){return new Promise((s,o)=>{let i=setTimeout(()=>{o(new Error("Image load timed out"))},n),e=new Image;e.crossOrigin="anonymous",e.onload=async()=>{clearTimeout(i);try{await e.decode();let r=document.createElement("canvas");r.width=e.width,r.height=e.height,r.getContext("2d").drawImage(e,0,0);try{let a=r.toDataURL("image/png");s(a)}catch{o(new Error("CORS restrictions prevented image capture"))}}catch(r){o(r)}},e.onerror=r=>{clearTimeout(i),o(new Error("Failed to load image: "+(r.message||"Unknown error")))},e.src=t})}async function $(t){let n=Array.from(t.querySelectorAll("img")),s=async o=>{let i=o.src;try{let e=await x(i);o.src=e,o.width||(o.width=o.naturalWidth||100),o.height||(o.height=o.naturalHeight||100)}catch{let e=document.createElement("div");e.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;`,e.innerText="img",o.replaceWith(e)}};for(let o=0;o<n.length;o+=4){let i=n.slice(o,o+4).map(s);await Promise.allSettled(i)}}async function I(t,n,s){let o=[[t,n]];for(;o.length;){let[i,e]=o.shift(),r=s.get(i)||window.getComputedStyle(i);s.has(i)||s.set(i,r);let l=r.getPropertyValue("background-image");if(l&&l.includes("url(")){let c=l.match(/url\(["']?([^"')]+)["']?\)/);if(c?.[1])try{let m=await x(c[1]);e.style.backgroundImage=`url(${m})`}catch{e.style.backgroundImage="none"}}let a=Array.from(i.children),d=Array.from(e.children);for(let c=0;c<Math.min(a.length,d.length);c++)o.push([a[c],d[c]])}}async function C(t,n){let s=["position","top","right","bottom","left","z-index","width","height","min-width","max-width","min-height","max-height","margin","padding","border","border-width","border-style","border-color","border-radius","box-sizing","display","overflow","overflow-x","overflow-y","flex","flex-grow","flex-shrink","flex-basis","flex-direction","justify-content","align-items","align-content","gap","row-gap","column-gap","grid","grid-template-columns","grid-template-rows","background","background-color","background-image","color","font","font-family","font-size","font-weight","font-style","font-stretch","text-align","vertical-align","text-decoration","line-height","letter-spacing","white-space","word-break","text-overflow","visibility","opacity","box-shadow","transform","transition","clip-path","-webkit-text-fill-color"];for(let e of["::before","::after"])try{let r=window.getComputedStyle(t,e),l=r.getPropertyValue("content"),a=r.getPropertyValue("background-image");if(l&&l!=="none"&&l!=='""'&&l!=="''"||a&&a.startsWith("url(")){let d=r.getPropertyValue("font-family"),c=document.createElement("span");c.className=`snapdom-pseudo-${e.replace("::","")}`;let m=P(l),g=d&&/font.*awesome|material|bootstrap|glyphicons|ionicons|remixicon|simple-line-icons|octicons|feather|typicons|weathericons/i.test(d),y=parseInt(r.getPropertyValue("font-size"))||32,u=parseInt(r.getPropertyValue("font-weight"))||!1,L=r.getPropertyValue("color")||"#000";if(g&&m.length===1){let f=document.createElement("img");f.src=await U(m,d,u,y,L),f.style="display:block;width:100%;height:100%;object-fit:contain;",c.appendChild(f)}else if(m.startsWith("url(")){let f=m.match(/url\(["']?([^"')]+)["']?\)/);if(f?.[1])try{let h=document.createElement("img"),D=await x(f[1]);h.src=D,h.style="display:block;width:100%;height:100%;object-fit:contain;",c.appendChild(h)}catch(h){console.error(`[snapdom] Error in pseudo ${e} for`,t,h)}}else c.textContent=m;for(let f of s){let h=r.getPropertyValue(f);h&&(c.style[f]=h)}c.style.position||(c.style.position="absolute"),e==="::before"?n.insertBefore(c,n.firstChild):n.appendChild(c)}}catch{}let o=Array.from(t.children),i=Array.from(n.children).filter(e=>!e.classList.contains("snapdom-pseudo-before")&&!e.classList.contains("snapdom-pseudo-after"));for(let e=0;e<Math.min(o.length,i.length);e++)await C(o[e],i[e])}function P(t){let n=t.replace(/^['"]|['"]$/g,"");if(n.startsWith("\\"))try{return String.fromCharCode(parseInt(n.replace("\\",""),16))}catch{return n}return n}async function U(t,n,s,o=32,i="#000"){n=n.replace(/^['"]+|['"]+$/g,""),await document.fonts.ready,await document.fonts.load(`${o}px "${n}"`);let e=document.createElement("canvas");e.width=o,e.height=o;let r=e.getContext("2d");return r.font=s?`${s} ${o}px "${n}"`:` ${o}px "${n}"`,r.textAlign="center",r.textBaseline="middle",r.fillStyle=i,r.fillText(t,e.width/2,e.height/2),e.toDataURL()}function k(t){return t.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"").replace(/-+/g,"-").replace(/^-|-$/g,"")}function w(t){return{normal:"400",bold:"700",italic:"italic",oblique:"italic","ultra-condensed":"50","extra-condensed":"62",condensed:"75","semi-condensed":"87",expanded:"125","semi-expanded":"112","extra-expanded":"150","ultra-expanded":"200"}[t]||t.replace(/%/g,"")}async function A(t=new WeakMap){await document.fonts.ready;let n=[];Array.from(document.styleSheets).forEach(e=>{try{Array.from(e.cssRules).forEach(r=>{r instanceof CSSFontFaceRule&&n.push(r.cssText)})}catch(r){console.warn("Could not access stylesheet rules:",r)}});let s=new Map;document.querySelectorAll("*").forEach(e=>{let r=t.get(e)||window.getComputedStyle(e);t.has(e)||t.set(e,r);let l=r.fontFamily?.split(",")[0]?.trim().replace(/["']/g,"");if(!l)return;let a=w(r.fontWeight||"400"),d=w(r.fontStyle||"normal"),c=w(r.fontStretch||"normal");s.has(l)||s.set(l,new Set),s.get(l).add(`${a}_${d}_${c}`)});let i=[...n];for(let[e,r]of s){let l=k(e);for(let a of r){let[d,c,m]=a.split("_"),g=`fg-f-${l}-w${d}-${c}-s${m}`,y=[`font-family:"${e}",sans-serif`,`font-weight:${d}`,`font-style:${c}`,`font-stretch:${m}%`].filter(Boolean).join(";");i.push(`.${g}{${y}}`)}}return i.push("*{font-family:inherit;font-weight:inherit;font-style:inherit;}"),i.join("")}function N(t,n,s){let o=s.get(n)||window.getComputedStyle(n),i=o.fontFamily?.split(",")[0]?.trim().replace(/["']/g,"");if(!i)return;let e=w(o.fontWeight||"400"),r=w(o.fontStyle||"normal"),l=w(o.fontStretch||"normal"),a=k(i);t.classList.add(`fg-f-${a}-w${e}-${r}-s${l}`)}async function z(t){let n=new Map,s=new WeakMap,o=new WeakMap,i;try{i={}}catch(a){console.warn("getDefaultStyles failed:",a),i={}}let e;try{e=b(t,n,i,s,o)}catch(a){throw console.warn("deepCloneWithShadow failed:",a),a}try{await $(e)}catch(a){console.warn("inlineImages failed:",a)}try{await I(t,e,s)}catch(a){console.warn("inlineBackgroundImages failed:",a)}try{await C(t,e)}catch(a){console.warn("inlinePseudoElements failed:",a)}let r=S(n),l=Array.from(r.entries()).map(([a,d])=>`.${d}{${a}}`).join("");for(let[a,d]of n.entries()){if(a.tagName==="STYLE")continue;let c=r.get(d);if(c){a.classList.add(c);try{N(a,o.get(a),s)}catch(g){console.warn("applyFontClasses failed for node:",a,g)}}let m=a.style?.backgroundImage;a.removeAttribute("style"),m&&m!=="none"&&(a.style.backgroundImage=m)}return{clone:e,classCSS:l,styleCache:s}}function R(t){return t.replace(/>\s+</g,"><").replace(/\s{2,}/g," ").replace(/\n/g,"").trim()}async function T(t,n={}){let{scale:s=1}=n,o,i,e;try{({clone:o,classCSS:i,styleCache:e}=await z(t))}catch(u){throw console.error("prepareClone failed:",u),u}let r=t.getBoundingClientRect(),l=r.width*s,a=r.height*s,d="";try{d=await A(e)}catch(u){console.warn("inlineFonts failed:",u)}let c=document.createElementNS("http://www.w3.org/2000/svg","svg");c.setAttribute("width",l),c.setAttribute("height",a),c.setAttribute("viewBox",`0 0 ${l} ${a}`);let m=document.createElementNS("http://www.w3.org/2000/svg","foreignObject");m.setAttribute("width","100%"),m.setAttribute("height","100%");let g=document.createElement("div");g.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),g.setAttribute("style",`width:${l}px;height:${a}px;`);let y=document.createElement("style");y.textContent=d+"svg{overflow:visible}"+i,g.appendChild(y),g.appendChild(o),m.appendChild(g),c.appendChild(m);try{let u=new XMLSerializer().serializeToString(c);return`data:image/svg+xml;charset=utf-8,${encodeURIComponent(R(u))}`}catch(u){throw console.error("SVG serialization failed:",u),u}}async function p(t,n={}){return await T(t,n)}p.toImg=async(t,n={})=>{let s=await p(t,n),o=new Image;return o.src=s,await o.decode(),o};p.toCanvas=async(t,n={})=>{let s=await p.toImg(t,n),o=document.createElement("canvas");return o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0),o};p.toPng=async(t,n={})=>{let s=await p.toCanvas(t,n),o=new Image;return o.src=s.toDataURL("image/png"),await o.decode(),o};p.toJpg=async(t,n={})=>{let{backgroundColor:s="#fff",quality:o=.92}=n,i=await p.toCanvas(t,n),e=document.createElement("canvas");e.width=i.width,e.height=i.height;let r=e.getContext("2d");r.fillStyle=s,r.fillRect(0,0,e.width,e.height),r.drawImage(i,0,0);let l=new Image;return l.src=e.toDataURL("image/jpeg",o),await l.decode(),l};p.toWebp=async(t,n={})=>{let{backgroundColor:s="#fff",quality:o=.92}=n,i=await p.toCanvas(t,n),e=document.createElement("canvas");e.width=i.width,e.height=i.height;let r=e.getContext("2d");r.fillStyle=s,r.fillRect(0,0,e.width,e.height),r.drawImage(i,0,0);let l=new Image;return l.src=e.toDataURL("image/webp",o),await l.decode(),l};p.toBlob=async(t,n={})=>{let s=await p(t,n),o=decodeURIComponent(s.split(",")[1]);return new Blob([o],{type:"image/svg+xml"})};})();
1
+ (()=>{var S=new Map,E=new Map,k=new Map,T=new Map,v=new Map,P=new WeakMap;var te=["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 K(){for(let e of te)H(e)}function H(e){if(T.has(e))return T.get(e);if(new Set(["script","style","meta","link","noscript","template"]).has(e)){let r={};return T.set(e,r),r}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 t=document.createElement(e);t.style.all="initial",o.appendChild(t);let s=getComputedStyle(t),a={};for(let r of s)a[r]=s.getPropertyValue(r);return o.removeChild(t),T.set(e,a),a}function F(e,n,o=!1){let t=[],s=H(n);for(let[a,r]of Object.entries(e))if(!o)r&&t.push(`${a}:${r}`);else{let c=s[a];r&&r!==c&&t.push(`${a}:${r}`)}return t.sort().join(";")}function B(e){let n=new Set;return e.tagName&&n.add(e.tagName.toLowerCase()),e.querySelectorAll("*").forEach(o=>{n.add(o.tagName.toLowerCase())}),Array.from(n)}function D(e){let n=new Map;for(let t of e){let s=T.get(t);if(!s)continue;let a=Object.entries(s).map(([r,c])=>`${r}:${c};`).sort().join("");n.has(a)||n.set(a,[]),n.get(a).push(t)}let o="";for(let[t,s]of n.entries())o+=`${s.join(",")} { ${t} }
2
+ `;return o}function _(e){let n=new Set(e.values()),o=new Map,t=1;for(let s of n)o.set(s,`c${t++}`);return o}function N(e,{fast:n=!1}={}){if(n)return e();"requestIdleCallback"in window?requestIdleCallback(e,{timeout:50}):setTimeout(e,1)}function A(e,n=null){if(!(e instanceof Element))return window.getComputedStyle(e,n);let o=P.get(e);if(o||(o=new Map,P.set(e,o)),!o.has(n)){let t=window.getComputedStyle(e,n);o.set(n,t)}return o.get(n)}function Y(e){let n=e.replace(/^['"]|['"]$/g,"");if(n.startsWith("\\"))try{return String.fromCharCode(parseInt(n.replace("\\",""),16))}catch{return n}return n}function X(e){let n=e.match(/url\(["']?([^"')]+)["']?\)/);return n?n[1]:null}function M(e){return[/font\s*awesome/i,/material\s*icons/i,/ionicons/i,/glyphicons/i,/feather/i,/bootstrap\s*icons/i,/remix\s*icons/i,/heroicons/i].some(o=>o.test(e))}function C(e,n=3e3){return S.has(e)?Promise.resolve(S.get(e)):new Promise((o,t)=>{let s=setTimeout(()=>{t(new Error("Image load timed out"))},n),a=new Image;a.crossOrigin="anonymous",a.onload=async()=>{clearTimeout(s);try{await a.decode();let r=document.createElement("canvas");r.width=a.width,r.height=a.height,r.getContext("2d").drawImage(a,0,0);try{let i=r.toDataURL("image/png");S.set(e,i),o(i)}catch{t(new Error("CORS restrictions prevented image capture"))}}catch(r){t(r)}},a.onerror=r=>{clearTimeout(s),t(new Error("Failed to load image: "+(r.message||"Unknown error")))},a.src=e})}function W(e){let n={};for(let o of e)n[o]=e.getPropertyValue(o);return n}function V(e,n,o,t,s){if(e.tagName==="STYLE")return;t.has(e)||t.set(e,A(e));let a=t.get(e),r=W(a),c=e.tagName?.toLowerCase()||"div",i=F(r,c,s);o.set(n,i)}function O(e,n,o,t,s){if(e.nodeType===Node.ELEMENT_NODE&&e.getAttribute("data-capture")==="exclude"){let c=document.createElement("div"),i=e.getBoundingClientRect();return c.style.cssText=`display: inline-block; width: ${i.width}px; height: ${i.height}px; visibility: hidden;`,c}if(e.tagName==="IFRAME"){let c=document.createElement("div");return c.textContent="",c.style.cssText=`width: ${e.offsetWidth}px; height: ${e.offsetHeight}px; background: repeating-linear-gradient(45deg, #ddd, #ddd 5px, #f9f9f9 5px, #f9f9f9 10px);display: flex;align-items: center;justify-content: center;font-size: 12px;color: #555; border: 1px solid #aaa;`,c}if(e.nodeType===Node.ELEMENT_NODE&&e.getAttribute("data-capture")==="placeholder"){let c=e.cloneNode(!1);t.set(c,e),V(e,c,n,o,s);let i=document.createElement("div");return i.textContent=e.getAttribute("data-placeholder-text")||"",i.style.cssText="color: #666;font-size: 12px;text-align: center;line-height: 1.4;padding: 0.5em;box-sizing: border-box;",c.appendChild(i),c}if(e.tagName==="CANVAS"){let c=e.toDataURL(),i=document.createElement("img");return i.src=c,i.width=e.width,i.height=e.height,i}if(e.nodeType===Node.TEXT_NODE){if(!e.textContent.trim())return null;if(e.parentElement?.shadowRoot){let i=e.parentElement.tagName.toLowerCase();if(customElements.get(i))return null}return e.cloneNode(!0)}if(e.nodeType!==Node.ELEMENT_NODE)return e.cloneNode(!0);let a=e.cloneNode(!1);t.set(a,e),V(e,a,n,o,s);let r=document.createDocumentFragment();if(e.childNodes.forEach(c=>{let i=O(c,n,o,t,s);i&&r.appendChild(i)}),a.appendChild(r),e.shadowRoot){let c=Array.from(e.shadowRoot.children).filter(m=>m.tagName!=="STYLE").map(m=>O(m,n,o,t)).filter(Boolean),i=document.createDocumentFragment();c.forEach(m=>i.appendChild(m)),a.appendChild(i)}return a}async function J(e,n,o,t=32,s="#000"){n=n.replace(/^['"]+|['"]+$/g,""),await document.fonts.ready,await document.fonts.load(`${t}px "${n}"`);let a=document.createElement("canvas");a.width=t,a.height=t;let r=a.getContext("2d");return r.font=o?`${o} ${t}px "${n}"`:` ${t}px "${n}"`,r.textAlign="center",r.textBaseline="middle",r.fillStyle=s,r.fillText(e,a.width/2,a.height/2),a.toDataURL()}async function j({ignoreIconFonts:e=!0,preCached:n=!1}){let o=Array.from(document.querySelectorAll('link[rel="stylesheet"]')).filter(s=>s.href),t="";for(let s of o)try{let r=await(await fetch(s.href)).text();if(e&&(M(s.href)||M(r))){console.log("\u23ED\uFE0F Ignorando icon font CSS:",s.href);continue}let c=/url\(([^)]+)\)/g,i=await Promise.all(Array.from(r.matchAll(c)).map(async l=>{let d=l[1].replace(/["']/g,"");if(d.startsWith("http")||(d=new URL(d,s.href).href),e&&M(d))return console.log("\u23ED\uFE0F Ignorando icon font URL:",d),null;if(k.has(d))return{original:l[0],inlined:`url(${k.get(d)})`};try{let y=await(await fetch(d)).blob(),f=await new Promise(g=>{let u=new FileReader;u.onload=()=>g(u.result),u.readAsDataURL(y)});return k.set(d,f),{original:l[0],inlined:`url(${f})`}}catch{return console.warn("\u274C No pude fetch font",d),null}})),m=r;for(let l of i)l&&(m=m.replace(l.original,l.inlined));t+=m+`
3
+ `}catch{console.warn("\u274C No pude fetch CSS",s.href)}if(t&&n){let s=document.createElement("style");s.setAttribute("data-snapdom","embedFonts"),s.textContent=t,document.head.appendChild(s)}return t}async function R(e,n,o,t,s){if(!(e instanceof Element)||!(n instanceof Element))return;for(let c of["::before","::after"])try{let i=A(e,c);if(!i)continue;let m=i.getPropertyValue("content"),l=i.getPropertyValue("background-image"),d=m&&m!=="none"&&m!=='""'&&m!=="''",h=l&&l.startsWith("url(");if(d||h){let y=i.getPropertyValue("font-family"),f=parseInt(i.getPropertyValue("font-size"))||32,g=parseInt(i.getPropertyValue("font-weight"))||!1,u=i.getPropertyValue("color")||"#000",w=document.createElement("span");w.dataset.snapdomPseudo=c;let L=W(i),I=F(L,"span",s);o.set(w,I);let U=y&&/font.*awesome|material|bootstrap|glyphicons|ionicons|remixicon|simple-line-icons|octicons|feather|typicons|weathericons/i.test(y),x=Y(m);if(U&&x.length===1){let b=document.createElement("img");b.src=await J(x,y,g,f,u),b.style="display:block;width:100%;height:100%;object-fit:contain;",w.appendChild(b)}else if(x.startsWith("url(")){let b=x.match(/url\(["']?([^"')]+)["']?\)/);if(b?.[1])try{let $=document.createElement("img"),z=await C(b[1]);$.src=z,$.style="display:block;width:100%;height:100%;object-fit:contain;",w.appendChild($)}catch($){console.error(`[snapdom] Error in pseudo ${c} for`,e,$)}}else x&&x!=="none"&&(w.textContent=x);c==="::before"?n.insertBefore(w,n.firstChild):n.appendChild(w)}}catch(i){console.warn(`[snapdom] Failed to capture ${c} for`,e,i)}let a=Array.from(e.children),r=Array.from(n.children).filter(c=>!c.dataset.snapdomPseudo);for(let c=0;c<Math.min(a.length,r.length);c++)await R(a[c],r[c],o,t,s)}async function q(e,n=!1){let o=new Map,t=new WeakMap,s=new WeakMap,a;try{a=O(e,o,t,s,n)}catch(i){throw console.warn("deepClone failed:",i),i}try{await R(e,a,o,t,n)}catch(i){console.warn("inlinePseudoElements failed:",i)}let r=_(o),c=Array.from(r.entries()).map(([i,m])=>`.${m}{${i}}`).join("");for(let[i,m]of o.entries()){if(i.tagName==="STYLE")continue;let l=r.get(m);l&&i.classList.add(l);let d=i.style?.backgroundImage;i.removeAttribute("style"),d&&d!=="none"&&(i.style.backgroundImage=d)}return{clone:a,classCSS:c,styleCache:t}}async function G(e){let n=Array.from(e.querySelectorAll("img")),o=async t=>{let s=t.src;try{let a=await C(s);t.src=a,t.width||(t.width=t.naturalWidth||100),t.height||(t.height=t.naturalHeight||100)}catch{let a=document.createElement("div");a.style=`width: ${t.width||100}px; height: ${t.height||100}px; background: #ccc; display: inline-block; text-align: center; line-height: ${t.height||100}px; color: #666; font-size: 12px;`,a.innerText="img",t.replaceWith(a)}};for(let t=0;t<n.length;t+=4){let s=n.slice(t,t+4).map(o);await Promise.allSettled(s)}}async function Q(e,n,o){let t=[[e,n]];for(;t.length;){let[s,a]=t.shift(),r=o.get(s)||A(s);o.has(s)||o.set(s,r);let c=r.getPropertyValue("background-image");if(c&&c.includes("url(")){let l=c.match(/url\(["']?([^"')]+)["']?\)/);if(l?.[1])try{let d=l[1],h;E.has(d)?h=E.get(d):(h=await C(d),E.set(d,h)),a.style.backgroundImage=`url(${h})`}catch{a.style.backgroundImage="none"}}let i=Array.from(s.children),m=Array.from(a.children);for(let l=0;l<Math.min(i.length,m.length);l++)t.push([i[l],m[l]])}}async function Z(e,n={}){if(!e)throw new Error("Element cannot be null or undefined");let{compress:o=!0,embedFonts:t=!1,fast:s=!0,scale:a=1}=n,r,c,i,m="",l="",d,h;if({clone:r,classCSS:c,styleCache:i}=await q(e,o),await new Promise(f=>{N(async()=>{await G(r),f()},{fast:s})}),await new Promise(f=>{N(async()=>{await Q(e,r,i),f()},{fast:s})}),t&&await new Promise(f=>{N(async()=>{m=await j({ignoreIconFonts:!0}),f()},{fast:s})}),o){let f=B(r).sort(),g=f.join(",");v.has(g)?l=v.get(g):await new Promise(u=>{N(()=>{l=D(f),v.set(g,l),u()},{fast:s})})}await new Promise(f=>{N(()=>{let g=e.getBoundingClientRect(),u=g.width*a,w=g.height*a;a!==1&&(r.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),r.style.transform=`scale(${a})`,r.style.transformOrigin="top left",r.style.width=`${g.width}px`,r.style.height=`${g.height}px`);let L="http://www.w3.org/2000/svg",I=document.createElementNS(L,"foreignObject");I.setAttribute("width","100%"),I.setAttribute("height","100%");let U=document.createElement("style");U.textContent=l+m+"svg{overflow:visible;}"+c,I.appendChild(U),I.appendChild(r);let b=new XMLSerializer().serializeToString(I);h=`<svg xmlns="${L}" width="${u}" height="${w}" viewBox="0 0 ${u} ${w}">`+b+"</svg>";let ee=new Blob([h],{type:"image/svg+xml;charset=utf-8"});d=URL.createObjectURL(ee),f()},{fast:s})});let y=document.getElementById("snapdom-sandbox");return y&&y.style.position==="absolute"&&y.remove(),n.dataURL?`data:image/svg+xml;charset=utf-8,${encodeURIComponent(h)}`:d}async function p(e,n={}){if(!e)throw new Error("Element cannot be null or undefined");return await Z(e,n)}p.toImg=async(e,n={})=>{let o=await p(e,n),t=new Image;return t.src=o,await t.decode(),t};p.toCanvas=async(e,n={})=>{let o=await p.toImg(e,n),t=document.createElement("canvas");return t.width=o.width,t.height=o.height,t.getContext("2d").drawImage(o,0,0),t};p.toPng=async(e,n={})=>{let o=await p.toCanvas(e,n),t=new Image;return t.src=o.toDataURL("image/png"),await t.decode(),t};p.toJpg=async(e,n={})=>{let{backgroundColor:o="#fff",quality:t=1}=n,s=await p.toCanvas(e,n),a=document.createElement("canvas");a.width=s.width,a.height=s.height;let r=a.getContext("2d");r.fillStyle=o,r.fillRect(0,0,a.width,a.height),r.drawImage(s,0,0);let c=new Image;return c.src=a.toDataURL("image/jpeg",t),await c.decode(),c};p.toWebp=async(e,n={})=>{let{backgroundColor:o="#fff",quality:t=1}=n,s=await p.toCanvas(e,n),a=document.createElement("canvas");a.width=s.width,a.height=s.height;let r=a.getContext("2d");r.fillStyle=o,r.fillRect(0,0,a.width,a.height),r.drawImage(s,0,0);let c=new Image;return c.src=a.toDataURL("image/webp",t),await c.decode(),c};p.toBlob=async(e,n={})=>{let o=await p(e,n),t=decodeURIComponent(o.split(",")[1]);return new Blob([t],{type:"image/svg+xml"})};async function ne(e=document,n={}){let{embedFonts:o=!0,reset:t=!1,preWarm:s=!0}=n;if(t){S.clear(),E.clear(),k.clear(),v.clear(),P.clear();return}await document.fonts.ready,K();let a=[],r=[];e?.querySelectorAll&&(a=Array.from(e.querySelectorAll("img[src]")),r=Array.from(e.querySelectorAll("*")));let c=[];for(let i of a){let m=i.src;S.has(m)||c.push(C(m).then(l=>S.set(m,l)).catch(()=>{}))}for(let i of r){let m=getComputedStyle(i).backgroundImage,l=X(m);l&&!E.has(l)&&c.push(C(l).then(d=>E.set(l,d)).catch(()=>{}))}if(o&&await j({ignoreIconFonts:!0,preCached:!0}),await Promise.all(c),s){let i=B(e).sort(),m=i.join(",");if(!v.has(m)){let d=D(i);v.set(m,d)}let l=e.cloneNode(!1);await R(e,l,new Map,new WeakMap,!1)}if(s)try{await q(e,n.preWarm)}catch{}}})();
@@ -1 +1,3 @@
1
- function E(t,n,s){let o=[];for(let i of t){let e=t.getPropertyValue(i);e&&o.push(`${i}:${e}`)}return o.sort().join(";")}function S(t){let n=new Set(t.values()),s=new Map,o=1;for(let i of n)s.set(i,`c${o++}`);return s}function v(t,n,s,o,i){if(t.tagName==="STYLE")return;i.has(t)||i.set(t,window.getComputedStyle(t));let e=i.get(t),r=E(e,o);s.set(n,r)}function b(t,n,s,o,i){if(t.nodeType===Node.ELEMENT_NODE&&t.getAttribute("data-capture")==="exclude"){let l=document.createElement("div"),a=t.getBoundingClientRect();return l.style.cssText=`display: inline-block; width: ${a.width}px; height: ${a.height}px; visibility: hidden;`,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: 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.nodeType===Node.ELEMENT_NODE&&t.getAttribute("data-capture")==="placeholder"){let l=t.cloneNode(!1);i.set(l,t),v(t,l,n,s,o);let a=document.createElement("div");return a.textContent=t.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;",l.appendChild(a),l}if(t.tagName==="CANVAS"){let l=t.toDataURL(),a=document.createElement("img");return a.src=l,a.width=t.width,a.height=t.height,a}if(t.nodeType===Node.TEXT_NODE){if(!t.textContent.trim())return null;if(t.parentElement?.shadowRoot){let a=t.parentElement.tagName.toLowerCase();if(customElements.get(a))return null}return t.cloneNode(!0)}if(t.nodeType!==Node.ELEMENT_NODE)return t.cloneNode(!0);let e=t.cloneNode(!1);i.set(e,t),v(t,e,n,s,o);let r=document.createDocumentFragment();if(t.childNodes.forEach(l=>{let a=b(l,n,s,o,i);a&&r.appendChild(a)}),e.appendChild(r),t.shadowRoot){let l=Array.from(t.shadowRoot.children).filter(d=>d.tagName!=="STYLE").map(d=>b(d,n,s,o,i)).filter(Boolean),a=document.createDocumentFragment();l.forEach(d=>a.appendChild(d)),e.appendChild(a)}return e}function x(t,n=3e3){return new Promise((s,o)=>{let i=setTimeout(()=>{o(new Error("Image load timed out"))},n),e=new Image;e.crossOrigin="anonymous",e.onload=async()=>{clearTimeout(i);try{await e.decode();let r=document.createElement("canvas");r.width=e.width,r.height=e.height,r.getContext("2d").drawImage(e,0,0);try{let a=r.toDataURL("image/png");s(a)}catch{o(new Error("CORS restrictions prevented image capture"))}}catch(r){o(r)}},e.onerror=r=>{clearTimeout(i),o(new Error("Failed to load image: "+(r.message||"Unknown error")))},e.src=t})}async function $(t){let n=Array.from(t.querySelectorAll("img")),s=async o=>{let i=o.src;try{let e=await x(i);o.src=e,o.width||(o.width=o.naturalWidth||100),o.height||(o.height=o.naturalHeight||100)}catch{let e=document.createElement("div");e.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;`,e.innerText="img",o.replaceWith(e)}};for(let o=0;o<n.length;o+=4){let i=n.slice(o,o+4).map(s);await Promise.allSettled(i)}}async function I(t,n,s){let o=[[t,n]];for(;o.length;){let[i,e]=o.shift(),r=s.get(i)||window.getComputedStyle(i);s.has(i)||s.set(i,r);let l=r.getPropertyValue("background-image");if(l&&l.includes("url(")){let c=l.match(/url\(["']?([^"')]+)["']?\)/);if(c?.[1])try{let m=await x(c[1]);e.style.backgroundImage=`url(${m})`}catch{e.style.backgroundImage="none"}}let a=Array.from(i.children),d=Array.from(e.children);for(let c=0;c<Math.min(a.length,d.length);c++)o.push([a[c],d[c]])}}async function C(t,n){let s=["position","top","right","bottom","left","z-index","width","height","min-width","max-width","min-height","max-height","margin","padding","border","border-width","border-style","border-color","border-radius","box-sizing","display","overflow","overflow-x","overflow-y","flex","flex-grow","flex-shrink","flex-basis","flex-direction","justify-content","align-items","align-content","gap","row-gap","column-gap","grid","grid-template-columns","grid-template-rows","background","background-color","background-image","color","font","font-family","font-size","font-weight","font-style","font-stretch","text-align","vertical-align","text-decoration","line-height","letter-spacing","white-space","word-break","text-overflow","visibility","opacity","box-shadow","transform","transition","clip-path","-webkit-text-fill-color"];for(let e of["::before","::after"])try{let r=window.getComputedStyle(t,e),l=r.getPropertyValue("content"),a=r.getPropertyValue("background-image");if(l&&l!=="none"&&l!=='""'&&l!=="''"||a&&a.startsWith("url(")){let d=r.getPropertyValue("font-family"),c=document.createElement("span");c.className=`snapdom-pseudo-${e.replace("::","")}`;let m=P(l),g=d&&/font.*awesome|material|bootstrap|glyphicons|ionicons|remixicon|simple-line-icons|octicons|feather|typicons|weathericons/i.test(d),y=parseInt(r.getPropertyValue("font-size"))||32,u=parseInt(r.getPropertyValue("font-weight"))||!1,L=r.getPropertyValue("color")||"#000";if(g&&m.length===1){let f=document.createElement("img");f.src=await U(m,d,u,y,L),f.style="display:block;width:100%;height:100%;object-fit:contain;",c.appendChild(f)}else if(m.startsWith("url(")){let f=m.match(/url\(["']?([^"')]+)["']?\)/);if(f?.[1])try{let h=document.createElement("img"),D=await x(f[1]);h.src=D,h.style="display:block;width:100%;height:100%;object-fit:contain;",c.appendChild(h)}catch(h){console.error(`[snapdom] Error in pseudo ${e} for`,t,h)}}else c.textContent=m;for(let f of s){let h=r.getPropertyValue(f);h&&(c.style[f]=h)}c.style.position||(c.style.position="absolute"),e==="::before"?n.insertBefore(c,n.firstChild):n.appendChild(c)}}catch{}let o=Array.from(t.children),i=Array.from(n.children).filter(e=>!e.classList.contains("snapdom-pseudo-before")&&!e.classList.contains("snapdom-pseudo-after"));for(let e=0;e<Math.min(o.length,i.length);e++)await C(o[e],i[e])}function P(t){let n=t.replace(/^['"]|['"]$/g,"");if(n.startsWith("\\"))try{return String.fromCharCode(parseInt(n.replace("\\",""),16))}catch{return n}return n}async function U(t,n,s,o=32,i="#000"){n=n.replace(/^['"]+|['"]+$/g,""),await document.fonts.ready,await document.fonts.load(`${o}px "${n}"`);let e=document.createElement("canvas");e.width=o,e.height=o;let r=e.getContext("2d");return r.font=s?`${s} ${o}px "${n}"`:` ${o}px "${n}"`,r.textAlign="center",r.textBaseline="middle",r.fillStyle=i,r.fillText(t,e.width/2,e.height/2),e.toDataURL()}function k(t){return t.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"").replace(/-+/g,"-").replace(/^-|-$/g,"")}function w(t){return{normal:"400",bold:"700",italic:"italic",oblique:"italic","ultra-condensed":"50","extra-condensed":"62",condensed:"75","semi-condensed":"87",expanded:"125","semi-expanded":"112","extra-expanded":"150","ultra-expanded":"200"}[t]||t.replace(/%/g,"")}async function A(t=new WeakMap){await document.fonts.ready;let n=[];Array.from(document.styleSheets).forEach(e=>{try{Array.from(e.cssRules).forEach(r=>{r instanceof CSSFontFaceRule&&n.push(r.cssText)})}catch(r){console.warn("Could not access stylesheet rules:",r)}});let s=new Map;document.querySelectorAll("*").forEach(e=>{let r=t.get(e)||window.getComputedStyle(e);t.has(e)||t.set(e,r);let l=r.fontFamily?.split(",")[0]?.trim().replace(/["']/g,"");if(!l)return;let a=w(r.fontWeight||"400"),d=w(r.fontStyle||"normal"),c=w(r.fontStretch||"normal");s.has(l)||s.set(l,new Set),s.get(l).add(`${a}_${d}_${c}`)});let i=[...n];for(let[e,r]of s){let l=k(e);for(let a of r){let[d,c,m]=a.split("_"),g=`fg-f-${l}-w${d}-${c}-s${m}`,y=[`font-family:"${e}",sans-serif`,`font-weight:${d}`,`font-style:${c}`,`font-stretch:${m}%`].filter(Boolean).join(";");i.push(`.${g}{${y}}`)}}return i.push("*{font-family:inherit;font-weight:inherit;font-style:inherit;}"),i.join("")}function N(t,n,s){let o=s.get(n)||window.getComputedStyle(n),i=o.fontFamily?.split(",")[0]?.trim().replace(/["']/g,"");if(!i)return;let e=w(o.fontWeight||"400"),r=w(o.fontStyle||"normal"),l=w(o.fontStretch||"normal"),a=k(i);t.classList.add(`fg-f-${a}-w${e}-${r}-s${l}`)}async function z(t){let n=new Map,s=new WeakMap,o=new WeakMap,i;try{i={}}catch(a){console.warn("getDefaultStyles failed:",a),i={}}let e;try{e=b(t,n,i,s,o)}catch(a){throw console.warn("deepCloneWithShadow failed:",a),a}try{await $(e)}catch(a){console.warn("inlineImages failed:",a)}try{await I(t,e,s)}catch(a){console.warn("inlineBackgroundImages failed:",a)}try{await C(t,e)}catch(a){console.warn("inlinePseudoElements failed:",a)}let r=S(n),l=Array.from(r.entries()).map(([a,d])=>`.${d}{${a}}`).join("");for(let[a,d]of n.entries()){if(a.tagName==="STYLE")continue;let c=r.get(d);if(c){a.classList.add(c);try{N(a,o.get(a),s)}catch(g){console.warn("applyFontClasses failed for node:",a,g)}}let m=a.style?.backgroundImage;a.removeAttribute("style"),m&&m!=="none"&&(a.style.backgroundImage=m)}return{clone:e,classCSS:l,styleCache:s}}function R(t){return t.replace(/>\s+</g,"><").replace(/\s{2,}/g," ").replace(/\n/g,"").trim()}async function T(t,n={}){let{scale:s=1}=n,o,i,e;try{({clone:o,classCSS:i,styleCache:e}=await z(t))}catch(u){throw console.error("prepareClone failed:",u),u}let r=t.getBoundingClientRect(),l=r.width*s,a=r.height*s,d="";try{d=await A(e)}catch(u){console.warn("inlineFonts failed:",u)}let c=document.createElementNS("http://www.w3.org/2000/svg","svg");c.setAttribute("width",l),c.setAttribute("height",a),c.setAttribute("viewBox",`0 0 ${l} ${a}`);let m=document.createElementNS("http://www.w3.org/2000/svg","foreignObject");m.setAttribute("width","100%"),m.setAttribute("height","100%");let g=document.createElement("div");g.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),g.setAttribute("style",`width:${l}px;height:${a}px;`);let y=document.createElement("style");y.textContent=d+"svg{overflow:visible}"+i,g.appendChild(y),g.appendChild(o),m.appendChild(g),c.appendChild(m);try{let u=new XMLSerializer().serializeToString(c);return`data:image/svg+xml;charset=utf-8,${encodeURIComponent(R(u))}`}catch(u){throw console.error("SVG serialization failed:",u),u}}async function p(t,n={}){return await T(t,n)}p.toImg=async(t,n={})=>{let s=await p(t,n),o=new Image;return o.src=s,await o.decode(),o};p.toCanvas=async(t,n={})=>{let s=await p.toImg(t,n),o=document.createElement("canvas");return o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0),o};p.toPng=async(t,n={})=>{let s=await p.toCanvas(t,n),o=new Image;return o.src=s.toDataURL("image/png"),await o.decode(),o};p.toJpg=async(t,n={})=>{let{backgroundColor:s="#fff",quality:o=.92}=n,i=await p.toCanvas(t,n),e=document.createElement("canvas");e.width=i.width,e.height=i.height;let r=e.getContext("2d");r.fillStyle=s,r.fillRect(0,0,e.width,e.height),r.drawImage(i,0,0);let l=new Image;return l.src=e.toDataURL("image/jpeg",o),await l.decode(),l};p.toWebp=async(t,n={})=>{let{backgroundColor:s="#fff",quality:o=.92}=n,i=await p.toCanvas(t,n),e=document.createElement("canvas");e.width=i.width,e.height=i.height;let r=e.getContext("2d");r.fillStyle=s,r.fillRect(0,0,e.width,e.height),r.drawImage(i,0,0);let l=new Image;return l.src=e.toDataURL("image/webp",o),await l.decode(),l};p.toBlob=async(t,n={})=>{let s=await p(t,n),o=decodeURIComponent(s.split(",")[1]);return new Blob([o],{type:"image/svg+xml"})};export{p as snapdom};
1
+ var S=new Map,E=new Map,k=new Map,T=new Map,v=new Map,P=new WeakMap;var te=["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 K(){for(let e of te)H(e)}function H(e){if(T.has(e))return T.get(e);if(new Set(["script","style","meta","link","noscript","template"]).has(e)){let r={};return T.set(e,r),r}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 t=document.createElement(e);t.style.all="initial",o.appendChild(t);let s=getComputedStyle(t),a={};for(let r of s)a[r]=s.getPropertyValue(r);return o.removeChild(t),T.set(e,a),a}function F(e,n,o=!1){let t=[],s=H(n);for(let[a,r]of Object.entries(e))if(!o)r&&t.push(`${a}:${r}`);else{let c=s[a];r&&r!==c&&t.push(`${a}:${r}`)}return t.sort().join(";")}function B(e){let n=new Set;return e.tagName&&n.add(e.tagName.toLowerCase()),e.querySelectorAll("*").forEach(o=>{n.add(o.tagName.toLowerCase())}),Array.from(n)}function D(e){let n=new Map;for(let t of e){let s=T.get(t);if(!s)continue;let a=Object.entries(s).map(([r,c])=>`${r}:${c};`).sort().join("");n.has(a)||n.set(a,[]),n.get(a).push(t)}let o="";for(let[t,s]of n.entries())o+=`${s.join(",")} { ${t} }
2
+ `;return o}function _(e){let n=new Set(e.values()),o=new Map,t=1;for(let s of n)o.set(s,`c${t++}`);return o}function N(e,{fast:n=!1}={}){if(n)return e();"requestIdleCallback"in window?requestIdleCallback(e,{timeout:50}):setTimeout(e,1)}function A(e,n=null){if(!(e instanceof Element))return window.getComputedStyle(e,n);let o=P.get(e);if(o||(o=new Map,P.set(e,o)),!o.has(n)){let t=window.getComputedStyle(e,n);o.set(n,t)}return o.get(n)}function Y(e){let n=e.replace(/^['"]|['"]$/g,"");if(n.startsWith("\\"))try{return String.fromCharCode(parseInt(n.replace("\\",""),16))}catch{return n}return n}function X(e){let n=e.match(/url\(["']?([^"')]+)["']?\)/);return n?n[1]:null}function M(e){return[/font\s*awesome/i,/material\s*icons/i,/ionicons/i,/glyphicons/i,/feather/i,/bootstrap\s*icons/i,/remix\s*icons/i,/heroicons/i].some(o=>o.test(e))}function C(e,n=3e3){return S.has(e)?Promise.resolve(S.get(e)):new Promise((o,t)=>{let s=setTimeout(()=>{t(new Error("Image load timed out"))},n),a=new Image;a.crossOrigin="anonymous",a.onload=async()=>{clearTimeout(s);try{await a.decode();let r=document.createElement("canvas");r.width=a.width,r.height=a.height,r.getContext("2d").drawImage(a,0,0);try{let i=r.toDataURL("image/png");S.set(e,i),o(i)}catch{t(new Error("CORS restrictions prevented image capture"))}}catch(r){t(r)}},a.onerror=r=>{clearTimeout(s),t(new Error("Failed to load image: "+(r.message||"Unknown error")))},a.src=e})}function W(e){let n={};for(let o of e)n[o]=e.getPropertyValue(o);return n}function V(e,n,o,t,s){if(e.tagName==="STYLE")return;t.has(e)||t.set(e,A(e));let a=t.get(e),r=W(a),c=e.tagName?.toLowerCase()||"div",i=F(r,c,s);o.set(n,i)}function O(e,n,o,t,s){if(e.nodeType===Node.ELEMENT_NODE&&e.getAttribute("data-capture")==="exclude"){let c=document.createElement("div"),i=e.getBoundingClientRect();return c.style.cssText=`display: inline-block; width: ${i.width}px; height: ${i.height}px; visibility: hidden;`,c}if(e.tagName==="IFRAME"){let c=document.createElement("div");return c.textContent="",c.style.cssText=`width: ${e.offsetWidth}px; height: ${e.offsetHeight}px; background: repeating-linear-gradient(45deg, #ddd, #ddd 5px, #f9f9f9 5px, #f9f9f9 10px);display: flex;align-items: center;justify-content: center;font-size: 12px;color: #555; border: 1px solid #aaa;`,c}if(e.nodeType===Node.ELEMENT_NODE&&e.getAttribute("data-capture")==="placeholder"){let c=e.cloneNode(!1);t.set(c,e),V(e,c,n,o,s);let i=document.createElement("div");return i.textContent=e.getAttribute("data-placeholder-text")||"",i.style.cssText="color: #666;font-size: 12px;text-align: center;line-height: 1.4;padding: 0.5em;box-sizing: border-box;",c.appendChild(i),c}if(e.tagName==="CANVAS"){let c=e.toDataURL(),i=document.createElement("img");return i.src=c,i.width=e.width,i.height=e.height,i}if(e.nodeType===Node.TEXT_NODE){if(!e.textContent.trim())return null;if(e.parentElement?.shadowRoot){let i=e.parentElement.tagName.toLowerCase();if(customElements.get(i))return null}return e.cloneNode(!0)}if(e.nodeType!==Node.ELEMENT_NODE)return e.cloneNode(!0);let a=e.cloneNode(!1);t.set(a,e),V(e,a,n,o,s);let r=document.createDocumentFragment();if(e.childNodes.forEach(c=>{let i=O(c,n,o,t,s);i&&r.appendChild(i)}),a.appendChild(r),e.shadowRoot){let c=Array.from(e.shadowRoot.children).filter(m=>m.tagName!=="STYLE").map(m=>O(m,n,o,t)).filter(Boolean),i=document.createDocumentFragment();c.forEach(m=>i.appendChild(m)),a.appendChild(i)}return a}async function J(e,n,o,t=32,s="#000"){n=n.replace(/^['"]+|['"]+$/g,""),await document.fonts.ready,await document.fonts.load(`${t}px "${n}"`);let a=document.createElement("canvas");a.width=t,a.height=t;let r=a.getContext("2d");return r.font=o?`${o} ${t}px "${n}"`:` ${t}px "${n}"`,r.textAlign="center",r.textBaseline="middle",r.fillStyle=s,r.fillText(e,a.width/2,a.height/2),a.toDataURL()}async function j({ignoreIconFonts:e=!0,preCached:n=!1}){let o=Array.from(document.querySelectorAll('link[rel="stylesheet"]')).filter(s=>s.href),t="";for(let s of o)try{let r=await(await fetch(s.href)).text();if(e&&(M(s.href)||M(r))){console.log("\u23ED\uFE0F Ignorando icon font CSS:",s.href);continue}let c=/url\(([^)]+)\)/g,i=await Promise.all(Array.from(r.matchAll(c)).map(async l=>{let d=l[1].replace(/["']/g,"");if(d.startsWith("http")||(d=new URL(d,s.href).href),e&&M(d))return console.log("\u23ED\uFE0F Ignorando icon font URL:",d),null;if(k.has(d))return{original:l[0],inlined:`url(${k.get(d)})`};try{let y=await(await fetch(d)).blob(),f=await new Promise(g=>{let u=new FileReader;u.onload=()=>g(u.result),u.readAsDataURL(y)});return k.set(d,f),{original:l[0],inlined:`url(${f})`}}catch{return console.warn("\u274C No pude fetch font",d),null}})),m=r;for(let l of i)l&&(m=m.replace(l.original,l.inlined));t+=m+`
3
+ `}catch{console.warn("\u274C No pude fetch CSS",s.href)}if(t&&n){let s=document.createElement("style");s.setAttribute("data-snapdom","embedFonts"),s.textContent=t,document.head.appendChild(s)}return t}async function R(e,n,o,t,s){if(!(e instanceof Element)||!(n instanceof Element))return;for(let c of["::before","::after"])try{let i=A(e,c);if(!i)continue;let m=i.getPropertyValue("content"),l=i.getPropertyValue("background-image"),d=m&&m!=="none"&&m!=='""'&&m!=="''",h=l&&l.startsWith("url(");if(d||h){let y=i.getPropertyValue("font-family"),f=parseInt(i.getPropertyValue("font-size"))||32,g=parseInt(i.getPropertyValue("font-weight"))||!1,u=i.getPropertyValue("color")||"#000",w=document.createElement("span");w.dataset.snapdomPseudo=c;let L=W(i),I=F(L,"span",s);o.set(w,I);let U=y&&/font.*awesome|material|bootstrap|glyphicons|ionicons|remixicon|simple-line-icons|octicons|feather|typicons|weathericons/i.test(y),x=Y(m);if(U&&x.length===1){let b=document.createElement("img");b.src=await J(x,y,g,f,u),b.style="display:block;width:100%;height:100%;object-fit:contain;",w.appendChild(b)}else if(x.startsWith("url(")){let b=x.match(/url\(["']?([^"')]+)["']?\)/);if(b?.[1])try{let $=document.createElement("img"),z=await C(b[1]);$.src=z,$.style="display:block;width:100%;height:100%;object-fit:contain;",w.appendChild($)}catch($){console.error(`[snapdom] Error in pseudo ${c} for`,e,$)}}else x&&x!=="none"&&(w.textContent=x);c==="::before"?n.insertBefore(w,n.firstChild):n.appendChild(w)}}catch(i){console.warn(`[snapdom] Failed to capture ${c} for`,e,i)}let a=Array.from(e.children),r=Array.from(n.children).filter(c=>!c.dataset.snapdomPseudo);for(let c=0;c<Math.min(a.length,r.length);c++)await R(a[c],r[c],o,t,s)}async function q(e,n=!1){let o=new Map,t=new WeakMap,s=new WeakMap,a;try{a=O(e,o,t,s,n)}catch(i){throw console.warn("deepClone failed:",i),i}try{await R(e,a,o,t,n)}catch(i){console.warn("inlinePseudoElements failed:",i)}let r=_(o),c=Array.from(r.entries()).map(([i,m])=>`.${m}{${i}}`).join("");for(let[i,m]of o.entries()){if(i.tagName==="STYLE")continue;let l=r.get(m);l&&i.classList.add(l);let d=i.style?.backgroundImage;i.removeAttribute("style"),d&&d!=="none"&&(i.style.backgroundImage=d)}return{clone:a,classCSS:c,styleCache:t}}async function G(e){let n=Array.from(e.querySelectorAll("img")),o=async t=>{let s=t.src;try{let a=await C(s);t.src=a,t.width||(t.width=t.naturalWidth||100),t.height||(t.height=t.naturalHeight||100)}catch{let a=document.createElement("div");a.style=`width: ${t.width||100}px; height: ${t.height||100}px; background: #ccc; display: inline-block; text-align: center; line-height: ${t.height||100}px; color: #666; font-size: 12px;`,a.innerText="img",t.replaceWith(a)}};for(let t=0;t<n.length;t+=4){let s=n.slice(t,t+4).map(o);await Promise.allSettled(s)}}async function Q(e,n,o){let t=[[e,n]];for(;t.length;){let[s,a]=t.shift(),r=o.get(s)||A(s);o.has(s)||o.set(s,r);let c=r.getPropertyValue("background-image");if(c&&c.includes("url(")){let l=c.match(/url\(["']?([^"')]+)["']?\)/);if(l?.[1])try{let d=l[1],h;E.has(d)?h=E.get(d):(h=await C(d),E.set(d,h)),a.style.backgroundImage=`url(${h})`}catch{a.style.backgroundImage="none"}}let i=Array.from(s.children),m=Array.from(a.children);for(let l=0;l<Math.min(i.length,m.length);l++)t.push([i[l],m[l]])}}async function Z(e,n={}){if(!e)throw new Error("Element cannot be null or undefined");let{compress:o=!0,embedFonts:t=!1,fast:s=!0,scale:a=1}=n,r,c,i,m="",l="",d,h;if({clone:r,classCSS:c,styleCache:i}=await q(e,o),await new Promise(f=>{N(async()=>{await G(r),f()},{fast:s})}),await new Promise(f=>{N(async()=>{await Q(e,r,i),f()},{fast:s})}),t&&await new Promise(f=>{N(async()=>{m=await j({ignoreIconFonts:!0}),f()},{fast:s})}),o){let f=B(r).sort(),g=f.join(",");v.has(g)?l=v.get(g):await new Promise(u=>{N(()=>{l=D(f),v.set(g,l),u()},{fast:s})})}await new Promise(f=>{N(()=>{let g=e.getBoundingClientRect(),u=g.width*a,w=g.height*a;a!==1&&(r.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),r.style.transform=`scale(${a})`,r.style.transformOrigin="top left",r.style.width=`${g.width}px`,r.style.height=`${g.height}px`);let L="http://www.w3.org/2000/svg",I=document.createElementNS(L,"foreignObject");I.setAttribute("width","100%"),I.setAttribute("height","100%");let U=document.createElement("style");U.textContent=l+m+"svg{overflow:visible;}"+c,I.appendChild(U),I.appendChild(r);let b=new XMLSerializer().serializeToString(I);h=`<svg xmlns="${L}" width="${u}" height="${w}" viewBox="0 0 ${u} ${w}">`+b+"</svg>";let ee=new Blob([h],{type:"image/svg+xml;charset=utf-8"});d=URL.createObjectURL(ee),f()},{fast:s})});let y=document.getElementById("snapdom-sandbox");return y&&y.style.position==="absolute"&&y.remove(),n.dataURL?`data:image/svg+xml;charset=utf-8,${encodeURIComponent(h)}`:d}async function p(e,n={}){if(!e)throw new Error("Element cannot be null or undefined");return await Z(e,n)}p.toImg=async(e,n={})=>{let o=await p(e,n),t=new Image;return t.src=o,await t.decode(),t};p.toCanvas=async(e,n={})=>{let o=await p.toImg(e,n),t=document.createElement("canvas");return t.width=o.width,t.height=o.height,t.getContext("2d").drawImage(o,0,0),t};p.toPng=async(e,n={})=>{let o=await p.toCanvas(e,n),t=new Image;return t.src=o.toDataURL("image/png"),await t.decode(),t};p.toJpg=async(e,n={})=>{let{backgroundColor:o="#fff",quality:t=1}=n,s=await p.toCanvas(e,n),a=document.createElement("canvas");a.width=s.width,a.height=s.height;let r=a.getContext("2d");r.fillStyle=o,r.fillRect(0,0,a.width,a.height),r.drawImage(s,0,0);let c=new Image;return c.src=a.toDataURL("image/jpeg",t),await c.decode(),c};p.toWebp=async(e,n={})=>{let{backgroundColor:o="#fff",quality:t=1}=n,s=await p.toCanvas(e,n),a=document.createElement("canvas");a.width=s.width,a.height=s.height;let r=a.getContext("2d");r.fillStyle=o,r.fillRect(0,0,a.width,a.height),r.drawImage(s,0,0);let c=new Image;return c.src=a.toDataURL("image/webp",t),await c.decode(),c};p.toBlob=async(e,n={})=>{let o=await p(e,n),t=decodeURIComponent(o.split(",")[1]);return new Blob([t],{type:"image/svg+xml"})};async function ne(e=document,n={}){let{embedFonts:o=!0,reset:t=!1,preWarm:s=!0}=n;if(t){S.clear(),E.clear(),k.clear(),v.clear(),P.clear();return}await document.fonts.ready,K();let a=[],r=[];e?.querySelectorAll&&(a=Array.from(e.querySelectorAll("img[src]")),r=Array.from(e.querySelectorAll("*")));let c=[];for(let i of a){let m=i.src;S.has(m)||c.push(C(m).then(l=>S.set(m,l)).catch(()=>{}))}for(let i of r){let m=getComputedStyle(i).backgroundImage,l=X(m);l&&!E.has(l)&&c.push(C(l).then(d=>E.set(l,d)).catch(()=>{}))}if(o&&await j({ignoreIconFonts:!0,preCached:!0}),await Promise.all(c),s){let i=B(e).sort(),m=i.join(",");if(!v.has(m)){let d=D(i);v.set(m,d)}let l=e.cloneNode(!1);await R(e,l,new Map,new WeakMap,!1)}if(s)try{await q(e,n.preWarm)}catch{}}export{ne as preCache,p as snapdom};