@zumer/snapdom 2.22.0 → 2.23.1
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.
- package/README.md +4 -2
- package/dist/plugins.mjs +1 -1
- package/dist/preCache.mjs +5 -5
- package/dist/snapdom.js +7 -7
- package/dist/snapdom.mjs +7 -7
- package/package.json +1 -1
- package/types/snapdom.d.ts +0 -3
package/README.md
CHANGED
|
@@ -372,13 +372,13 @@ For detailed guidelines, see [CONTRIBUTING](https://github.com/zumerlab/snapdom/
|
|
|
372
372
|
<a href="https://github.com/stypr" title="stypr"><img src="https://avatars.githubusercontent.com/u/6625978?v=4&s=100" style="border-radius:10px; width:60px; height:60px; object-fit:cover; margin:5px;" alt="stypr"/></a>
|
|
373
373
|
<a href="https://github.com/mon-jai" title="mon-jai"><img src="https://avatars.githubusercontent.com/u/91261297?v=4&s=100" style="border-radius:10px; width:60px; height:60px; object-fit:cover; margin:5px;" alt="mon-jai"/></a>
|
|
374
374
|
<a href="https://github.com/puneetdixit200" title="puneetdixit200"><img src="https://avatars.githubusercontent.com/u/236133619?v=4&s=100" style="border-radius:10px; width:60px; height:60px; object-fit:cover; margin:5px;" alt="puneetdixit200"/></a>
|
|
375
|
+
<a href="https://github.com/RexSkz" title="RexSkz"><img src="https://avatars.githubusercontent.com/u/27483702?v=4&s=100" style="border-radius:10px; width:60px; height:60px; object-fit:cover; margin:5px;" alt="RexSkz"/></a>
|
|
375
376
|
<a href="https://github.com/RinZ27" title="RinZ27"><img src="https://avatars.githubusercontent.com/u/222222878?v=4&s=100" style="border-radius:10px; width:60px; height:60px; object-fit:cover; margin:5px;" alt="RinZ27"/></a>
|
|
376
377
|
<a href="https://github.com/sharuzzaman" title="sharuzzaman"><img src="https://avatars.githubusercontent.com/u/7421941?v=4&s=100" style="border-radius:10px; width:60px; height:60px; object-fit:cover; margin:5px;" alt="sharuzzaman"/></a>
|
|
377
378
|
<a href="https://github.com/simon1uo" title="simon1uo"><img src="https://avatars.githubusercontent.com/u/60037549?v=4&s=100" style="border-radius:10px; width:60px; height:60px; object-fit:cover; margin:5px;" alt="simon1uo"/></a>
|
|
378
379
|
<a href="https://github.com/titoBouzout" title="titoBouzout"><img src="https://avatars.githubusercontent.com/u/64156?v=4&s=100" style="border-radius:10px; width:60px; height:60px; object-fit:cover; margin:5px;" alt="titoBouzout"/></a>
|
|
379
380
|
<a href="https://github.com/ZiuChen" title="ZiuChen"><img src="https://avatars.githubusercontent.com/u/64892985?v=4&s=100" style="border-radius:10px; width:60px; height:60px; object-fit:cover; margin:5px;" alt="ZiuChen"/></a>
|
|
380
381
|
<a href="https://github.com/adajoy" title="adajoy"><img src="https://avatars.githubusercontent.com/u/26210079?v=4&s=100" style="border-radius:10px; width:60px; height:60px; object-fit:cover; margin:5px;" alt="adajoy"/></a>
|
|
381
|
-
<a href="https://github.com/hjl12345" title="hjl12345"><img src="https://avatars.githubusercontent.com/u/170017602?v=4&s=100" style="border-radius:10px; width:60px; height:60px; object-fit:cover; margin:5px;" alt="hjl12345"/></a>
|
|
382
382
|
</p>
|
|
383
383
|
<!-- CONTRIBUTORS:END -->
|
|
384
384
|
|
|
@@ -402,7 +402,7 @@ Shipping something built with SnapDOM? Add the badge to your README:
|
|
|
402
402
|
|
|
403
403
|
### Projects using SnapDOM
|
|
404
404
|
|
|
405
|
-
SnapDOM runs in production across
|
|
405
|
+
SnapDOM runs in production across 250+ public repositories ([GitHub dependents graph](https://github.com/zumerlab/snapdom/network/dependents)). A few notable ones, each verified from its own `package.json`:
|
|
406
406
|
|
|
407
407
|
- [LobeHub](https://github.com/lobehub/lobehub) — platform for operating AI agents
|
|
408
408
|
- [Trilium Notes](https://github.com/TriliumNext/Trilium) — hierarchical personal knowledge base
|
|
@@ -413,6 +413,8 @@ SnapDOM runs in production across 290+ public repositories ([GitHub dependents g
|
|
|
413
413
|
- [Rabby Wallet](https://github.com/RabbyHub/Rabby) — browser wallet for EVM chains
|
|
414
414
|
- [uMap](https://github.com/umap-project/umap) — OpenStreetMap map builder
|
|
415
415
|
- [ListenBrainz](https://github.com/metabrainz/listenbrainz-server) — music tracker by MetaBrainz
|
|
416
|
+
- [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) — mind-map core; recommends SnapDOM for image export
|
|
417
|
+
- [Kong UI Components](https://github.com/Kong/public-ui-components) — Kong's dashboard renderer exports PDFs with SnapDOM
|
|
416
418
|
- [SnapDIFF](https://zumerlab.com/snapdiff/) — in-browser visual regression testing *(by Zumerlab)*
|
|
417
419
|
|
|
418
420
|
See the full gallery at **[snapdom.dev/made-with](https://snapdom.dev/made-with/)**. Shipping SnapDOM? [Open a PR](https://github.com/zumerlab/snapdom/pulls) to add your project — real, verifiable projects only.
|
package/dist/plugins.mjs
CHANGED
package/dist/preCache.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* SnapDOM
|
|
3
|
-
* v2.
|
|
3
|
+
* v2.23.1
|
|
4
4
|
* Author: Juan Martin Muda
|
|
5
5
|
* License: MIT
|
|
6
6
|
*/
|
|
7
|
-
var _=class extends Map{constructor(e=100,...n){super(...n),this._maxSize=e}set(e,n){if(this.size>=this._maxSize&&!this.has(e)){let o=this.keys().next().value;o!==void 0&&this.delete(o)}return super.set(e,n)}},f={image:new _(100),background:new _(100),resource:new _(150),defaultStyle:new _(30),baseStyle:new _(50),compress:new _(50),computedStyle:new WeakMap,measureHints:new WeakMap,burstAdvice:new WeakMap,warnedReconcile:!1,font:new Set,session:{styleMap:new Map,styleCache:new WeakMap,nodeMap:new Map}};function nt(t="soft"){switch(f.session.__counterEpoch=(f.session.__counterEpoch||0)+1,t){case"auto":{f.session.styleMap=new Map,f.session.nodeMap=new Map;return}case"soft":{f.session.styleMap=new Map,f.session.nodeMap=new Map,f.session.styleCache=new WeakMap;return}case"full":return;case"disabled":{f.session.styleMap=new Map,f.session.nodeMap=new Map,f.session.styleCache=new WeakMap,f.computedStyle=new WeakMap,f.measureHints=new WeakMap,f.baseStyle=new _(50),f.defaultStyle=new _(30),f.image=new _(100),f.background=new _(100),f.resource=new _(150),f.compress=new _(50),f.font=new Set;return}default:{f.session.styleMap=new Map,f.session.nodeMap=new Map,f.session.styleCache=new WeakMap;return}}}function q(t){let e=t.match(/url\((['"]?)(.*?)(\1)\)/);if(!e)return null;let n=e[2].trim();return n.startsWith("#")?null:n}function ot(t,e=1){let n=t.match(/^\s*-?(?:webkit-)?image-set\(([\s\S]*)\)\s*$/i);if(!n)return null;let o=[];for(let r of n[1].split(",")){let s=r.match(/url\((['"]?)(.*?)(\1)\)/);if(!s)continue;let c=r.match(/(\d+(?:\.\d+)?)\s*(x|dpi|dppx)/i),i=1;if(c){let u=parseFloat(c[1]);i=/dpi/i.test(c[2])?u/96:u}o.push({url:s[2].trim(),dppx:i})}return o.length?(o.sort((r,s)=>r.dppx-s.dppx),(o.find(r=>r.dppx>=e)||o[o.length-1]).url):null}function B(t){if(/%[0-9A-Fa-f]{2}/.test(t))return t;try{return encodeURI(t)}catch{return t}}function rt(t,e){if(!t||/^(data|blob|about|#)/i.test(t.trim()))return t;try{let n=e||typeof document<"u"&&(document.baseURI||document.location?.href)||"http://localhost/";return new URL(t,n).href}catch{return t}}function At(t="[snapDOM]",{ttlMs:e=5*6e4,maxEntries:n=12}={}){let o=new Map,a=0;function r(s,c,i){if(a>=n)return;let u=Date.now();(o.get(c)||0)>u||(o.set(c,u+e),a++,s==="warn"&&console&&console.warn?console.warn(`${t} ${i}`):console&&console.error&&console.error(`${t} ${i}`))}return{warnOnce(s,c){r("warn",s,c)},errorOnce(s,c){r("error",s,c)},reset(){o.clear(),a=0}}}var st=At("[snapDOM]",{ttlMs:3*6e4,maxEntries:10}),K=new Map,X=new Map;function Et(t){return/^data:|^blob:|^about:blank$/i.test(t)}function Rt(t,e){try{let n=typeof location<"u"&&location.href?location.href:"http://localhost/",o=e.includes("{url}")?e.split("{url}")[0]:e,a=new URL(o||".",n),r=new URL(t,n);if(r.origin===a.origin)return!0;let s=r.searchParams;if(s&&(s.has("url")||s.has("target")))return!0}catch{}return!1}function _t(t,e){if(!e||Et(t)||Rt(t,e))return!1;try{let n=typeof location<"u"&&location.href?location.href:"http://localhost/",o=new URL(t,n);return typeof location<"u"?o.origin!==location.origin:!0}catch{return!!e}}function Lt(t,e){if(!e)return t;if(e.includes("{url}"))return e.replace("{urlRaw}",B(t)).replace("{url}",encodeURIComponent(t));if(/[?&]url=?$/.test(e))return`${e}${encodeURIComponent(t)}`;if(e.endsWith("?"))return`${e}url=${encodeURIComponent(t)}`;if(e.endsWith("/"))return`${e}${B(t)}`;let n=e.includes("?")?"&":"?";return`${e}${n}url=${encodeURIComponent(t)}`}function it(t){return new Promise((e,n)=>{let o=new FileReader;o.onload=()=>e(String(o.result||"")),o.onerror=()=>n(new Error("read_failed")),o.readAsDataURL(t)})}function Mt(t,e){return[e.as||"blob",e.timeout??3e3,e.useProxy||"",e.errorTTL??8e3,t].join("|")}async function $(t,e={}){let n=e.as??"blob",o=e.timeout??3e3,a=e.useProxy||"",r=e.errorTTL??8e3,s=e.headers||{},c=!!e.silent;if(/^data:/i.test(t))try{if(n==="text")return{ok:!0,data:String(t),status:200,url:t,fromCache:!1};if(n==="dataURL")return{ok:!0,data:String(t),status:200,url:t,fromCache:!1,mime:String(t).slice(5).split(";")[0]||""};let[,g="",x=""]=String(t).match(/^data:([^,]*),(.*)$/)||[],h=/;base64/i.test(g)?atob(x):decodeURIComponent(x),w=new Uint8Array([...h].map(b=>b.charCodeAt(0))),S=new Blob([w],{type:(g||"").split(";")[0]||""});return{ok:!0,data:S,status:200,url:t,fromCache:!1,mime:S.type||""}}catch{return{ok:!1,data:null,status:0,url:t,fromCache:!1,reason:"special_url_error"}}if(/^blob:/i.test(t))try{let g=await fetch(t);if(!g.ok)return{ok:!1,data:null,status:g.status,url:t,fromCache:!1,reason:"http_error"};let x=await g.blob(),l=x.type||g.headers.get("content-type")||"";return n==="dataURL"?{ok:!0,data:await it(x),status:g.status,url:t,fromCache:!1,mime:l}:n==="text"?{ok:!0,data:await x.text(),status:g.status,url:t,fromCache:!1,mime:l}:{ok:!0,data:x,status:g.status,url:t,fromCache:!1,mime:l}}catch{return{ok:!1,data:null,status:0,url:t,fromCache:!1,reason:"network"}}if(/^about:blank$/i.test(t))return n==="dataURL"?{ok:!0,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg==",status:200,url:t,fromCache:!1,mime:"image/png"}:{ok:!0,data:n==="text"?"":new Blob([]),status:200,url:t,fromCache:!1};let i=Mt(t,{as:n,timeout:o,useProxy:a,errorTTL:r}),u=X.get(i);if(u&&u.until>Date.now())return{...u.result,fromCache:!0};u&&X.delete(i);let p=K.get(i);if(p)return p;let m=_t(t,a)?Lt(t,a):t,d=e.credentials;if(!d)try{let g=typeof location<"u"&&location.href?location.href:"http://localhost/",x=new URL(t,g);d=typeof location<"u"&&x.origin===location.origin?"include":"omit"}catch{d="omit"}let A=new AbortController,E=setTimeout(()=>A.abort("timeout"),o),y=(async()=>{try{let g=await fetch(m,{signal:A.signal,credentials:d,headers:s});if(!g.ok){let h={ok:!1,data:null,status:g.status,url:m,fromCache:!1,reason:"http_error"};if(r>0&&X.set(i,{until:Date.now()+r,result:h}),!c){let w=`${g.status} ${g.statusText||""}`.trim();st.warnOnce(`http:${g.status}:${n}:${new URL(t,location?.href??"http://localhost/").origin}`,`HTTP error ${w} while fetching ${n} ${t}`)}return e.onError&&e.onError(h),h}if(n==="text")return{ok:!0,data:await g.text(),status:g.status,url:m,fromCache:!1};let x=await g.blob(),l=x.type||g.headers.get("content-type")||"";return n==="dataURL"?{ok:!0,data:await it(x),status:g.status,url:m,fromCache:!1,mime:l}:{ok:!0,data:x,status:g.status,url:m,fromCache:!1,mime:l}}catch(g){let x=g&&typeof g=="object"&&"name"in g&&g.name==="AbortError"?String(g.message||"").includes("timeout")?"timeout":"abort":"network",l={ok:!1,data:null,status:0,url:m,fromCache:!1,reason:x};if(!/^blob:/i.test(t)&&r>0&&X.set(i,{until:Date.now()+r,result:l}),!c){let h=`${x}:${n}:${new URL(t,location?.href??"http://localhost/").origin}`,w=x==="timeout"?`Timeout after ${o}ms. Consider increasing timeout or using a proxy for ${t}`:x==="abort"?`Request aborted while fetching ${n} ${t}`:`Network/CORS issue while fetching ${n} ${t}. A proxy may be required`;st.errorOnce(h,w)}return e.onError&&e.onError(l),l}finally{clearTimeout(E),K.delete(i)}})();return K.set(i,y),y}async function D(t,e={}){if(/^((repeating-)?(linear|radial|conic)-gradient)\(/i.test(t)||t.trim()==="none")return t;let o=ot(t,typeof devicePixelRatio<"u"&&devicePixelRatio||1)??q(t);if(!o)return t;let a=rt(o),r=B(a),s=(e.useProxy||"")+"|"+r;if(f.background.has(s)){let c=f.background.get(s);return c?`url("${c}")`:"none"}try{let c=await $(r,{as:"dataURL",useProxy:e.useProxy});return c.ok?(f.background.set(s,c.data),`url("${c.data}")`):(f.background.set(s,null),"none")}catch{return f.background.set(s,null),"none"}}var ct=new Set(["meta","script","noscript","title","link","template"]),Y=new Set(["meta","link","style","title","noscript","script","template","g","defs","use","marker","mask","clipPath","pattern","path","polygon","polyline","line","circle","ellipse","rect","filter","lineargradient","radialgradient","stop"]),$t=["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","table","thead","tbody","tr","td","th"];function Q(){for(let t of $t){let e=String(t).toLowerCase();ct.has(e)||Y.has(e)||lt(e)}}function lt(t){if(t=String(t).toLowerCase(),Y.has(t)){let r={};return f.defaultStyle.set(t,r),r}if(f.defaultStyle.has(t))return f.defaultStyle.get(t);let e=document.getElementById("snapdom-sandbox");e||(e=document.createElement("div"),e.id="snapdom-sandbox",e.setAttribute("data-snapdom-sandbox","true"),e.setAttribute("aria-hidden","true"),e.style.position="absolute",e.style.left="-9999px",e.style.top="-9999px",e.style.width="0px",e.style.height="0px",e.style.overflow="hidden",document.body.appendChild(e));let n=document.createElement(t);n.style.all="initial",e.appendChild(n);let o=getComputedStyle(n),a={};for(let r of o){if(ft(r))continue;let s=o.getPropertyValue(r);a[r]=s}return e.removeChild(n),f.defaultStyle.set(t,a),a}var Ft=/(?:^|-)(animation|transition)(?:-|$)/i,It=/^(--.+|view-timeline|scroll-timeline|animation-trigger|offset-|position-try|app-region|interactivity|overlay|view-transition|-webkit-locale|-webkit-user-(?:drag|modify)|-webkit-tap-highlight-color|-webkit-text-security)$/i,vt=new Set(["cursor","pointer-events","touch-action","user-select","print-color-adjust","speak","reading-flow","reading-order","anchor-name","anchor-scope","container-name","container-type","timeline-scope","zoom","stroke-color"]),at=new Map;function ft(t){let e=at.get(t);if(e===void 0){let n=String(t).toLowerCase();e=vt.has(n)||It.test(n)||Ft.test(n),at.set(t,e)}return e}function Tt(t){try{let e=t?.ownerDocument;if(!e)return typeof window<"u"?window:null;let n=e.defaultView;if(n&&typeof n.getComputedStyle=="function")return n;if(typeof window<"u"&&window.frames)for(let o=0;o<window.frames.length;o++)try{if(window.frames[o]?.document===e)return window.frames[o]}catch{}}catch{}return typeof window<"u"?window:null}function v(t,e=null){let n=()=>{let r={length:0,getPropertyValue:()=>"",item:()=>""};return r[Symbol.iterator]=function*(){},r};if(!(t instanceof Element)){let r=typeof window<"u"?window:null;if(r&&typeof r.getComputedStyle=="function")try{return r.getComputedStyle(t,e)||n()}catch{return n()}return n()}let o=f.computedStyle.get(t);o||(o=new Map,f.computedStyle.set(t,o));let a=o.get(e);if(!a){let r=Tt(t),s=null;try{s=r&&typeof r.getComputedStyle=="function"?r.getComputedStyle(t,e):null}catch{}if(!s&&typeof window<"u"&&typeof window.getComputedStyle=="function")try{t.ownerDocument===document&&(s=window.getComputedStyle(t,e))}catch{}a=s||n(),o.set(e,a)}return a}function j(t){let e=[],n=0,o=0;for(let a=0;a<t.length;a++){let r=t[a];r==="("&&n++,r===")"&&n--,r===","&&n===0&&(e.push(t.slice(o,a).trim()),o=a+1)}return e.push(t.slice(o).trim()),e}function W(){if(typeof navigator>"u")return!1;let t=navigator.userAgent||"",e=t.toLowerCase(),n=e.includes("safari")&&!e.includes("chrome")&&!e.includes("crios")&&!e.includes("fxios")&&!e.includes("android"),o=/applewebkit/i.test(t),a=/mobile/i.test(t),r=!/safari/i.test(t),s=o&&a&&r,c=/(micromessenger|wxwork|wecom|windowswechat|macwechat)/i.test(t),i=/(baiduboxapp|baidubrowser|baidusearch|baiduboxlite)/i.test(e),u=/ipad|iphone|ipod/.test(e)&&o;return n||s||c||i||u}var Pt=[/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],$e=Object.assign({materialIconsFilled:"https://fonts.gstatic.com/s/materialicons/v48/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.woff2",materialIconsOutlined:"https://fonts.gstatic.com/s/materialiconsoutlined/v110/gok-H7zzDkdnRel8-DQ6KAXJ69wP1tGnf4ZGhUcel5euIg.woff2",materialIconsRound:"https://fonts.gstatic.com/s/materialiconsround/v109/LDItaoyNOAY6Uewc665JcIzCKsKc_M9flwmPq_HTTw.woff2",materialIconsSharp:"https://fonts.gstatic.com/s/materialiconssharp/v110/oPWQ_lt5nv4pWNJpghLP75WiFR4kLh3kvmvRImcycg.woff2"},typeof window<"u"&&window.__SNAPDOM_ICON_FONTS__||{}),Ut=[];function I(t){let e=typeof t=="string"?t:"",n=[...Pt,...Ut];for(let o of n)if(o instanceof RegExp&&o.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))}var pt=new Set(["serif","sans-serif","monospace","cursive","fantasy","system-ui","emoji","math","fangsong","ui-serif","ui-sans-serif","ui-monospace","ui-rounded"]),Ot=["katex","mathjax","mathml"];function Z(t){if(!t)return"";for(let e of t.split(",")){let n=e.trim().replace(/^['"]+|['"]+$/g,"");if(n&&!pt.has(n.toLowerCase()))return n}return""}function Bt(t){if(!t)return[];let e=[];for(let n of t.split(",")){let o=n.trim().replace(/^['"]+|['"]+$/g,"");o&&(pt.has(o.toLowerCase())||e.push(o))}return e}function z(t){let e=String(t??"400").trim().toLowerCase();if(e==="normal")return 400;if(e==="bold")return 700;let n=parseInt(e,10);return Number.isFinite(n)?Math.min(900,Math.max(100,n)):400}function G(t){let e=String(t??"normal").trim().toLowerCase();return e.startsWith("italic")?"italic":e.startsWith("oblique")?"oblique":"normal"}function Dt(t){let e=String(t??"100%").match(/(\d+(?:\.\d+)?)\s*%/);return e?Math.max(50,Math.min(200,parseFloat(e[1]))):100}function Wt(t){let e=String(t||"400").trim(),n=e.match(/^(\d{2,3})\s+(\d{2,3})$/);if(n){let a=z(n[1]),r=z(n[2]);return{min:Math.min(a,r),max:Math.max(a,r)}}let o=z(e);return{min:o,max:o}}function Nt(t){let e=String(t||"normal").trim().toLowerCase();return e==="italic"?{kind:"italic"}:e.startsWith("oblique")?{kind:"oblique"}:{kind:"normal"}}function Vt(t){let e=String(t||"100%").trim(),n=e.match(/(\d+(?:\.\d+)?)\s*%\s+(\d+(?:\.\d+)?)\s*%/);if(n){let r=parseFloat(n[1]),s=parseFloat(n[2]);return{min:Math.min(r,s),max:Math.max(r,s)}}let o=e.match(/(\d+(?:\.\d+)?)\s*%/),a=o?parseFloat(o[1]):100;return{min:a,max:a}}function qt(t){return!t||typeof t!="string"?"":t.replace(/\s+(variable|vf|v[0-9]+)$/i,"").trim().toLowerCase().replace(/\s+/g,"-")}function Xt(t,e,n=[]){if(!t)return!1;try{let o=new URL(t,location.href);if(o.origin===location.origin)return!0;let r=o.host.toLowerCase();if(["fonts.googleapis.com","fonts.gstatic.com","use.typekit.net","p.typekit.net","kit.fontawesome.com","use.fontawesome.com","cdn.jsdelivr.net","unpkg.com","cdnjs.cloudflare.com","esm.sh"].some(i=>r.endsWith(i))||n.some(i=>r===i.toLowerCase()||r.endsWith("."+i.toLowerCase())))return!0;let c=(o.pathname+o.search).toLowerCase();if(/\bfont(s)?\b/.test(c)||/\.woff2?(\b|$)/.test(c)||Ot.some(i=>c.includes(i)))return!0;for(let i of e){let u=i.toLowerCase().replace(/\s+/g,"+"),p=i.toLowerCase().replace(/\s+/g,"-"),m=qt(i);if(c.includes(u)||c.includes(p)||m&&c.includes(m))return!0}return!1}catch{return!1}}function jt(t){let e=new Set;for(let n of t||[]){let o=String(n).split("__")[0]?.trim();o&&e.add(o)}return e}function ut(t,e){return t&&t.replace(/url\(\s*(['"]?)([^)'"]+)\1\s*\)/g,(n,o,a)=>{let r=(a||"").trim();if(!r||/^data:|^blob:|^https?:|^file:|^about:/i.test(r))return n;let s=r;try{s=new URL(r,e||location.href).href}catch{}return`url("${s}")`})}var J=/@import\s+(?:url\(\s*(['"]?)([^)"']+)\1\s*\)|(['"])([^"']+)\3)([^;]*);/g,H=4;async function zt(t,e,n){if(!t)return t;let o=new Set;function a(c,i){try{return new URL(c,i||location.href).href}catch{return c}}async function r(c,i,u=0){if(u>H)return console.warn(`[snapDOM] @import depth exceeded (${H}) at ${i}`),c;let p="",m=0,d;for(;d=J.exec(c);){p+=c.slice(m,d.index),m=J.lastIndex;let A=(d[2]||d[4]||"").trim(),E=a(A,i);if(o.has(E)){console.warn(`[snapDOM] Skipping circular @import: ${E}`);continue}o.add(E);let y="";try{let g=await $(E,{as:"text",useProxy:n,silent:!0});g.ok&&typeof g.data=="string"&&(y=g.data)}catch{}y?(y=ut(y,E),y=await r(y,E,u+1),p+=`
|
|
8
|
-
/* inlined: ${
|
|
9
|
-
${
|
|
10
|
-
`):p+=d[0]}return p+=c.slice(m),p}let s=ut(t,e||location.href);return s=await r(s,e||location.href,0),s}var ht=/url\((["']?)([^"')]+)\1\)/g,Gt=/@font-face[^{}]*\{[^}]*\}/g;function gt(t){if(!t)return[];let e=[],n=t.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n){let a=o.match(/^U\+([0-9A-Fa-f?]+)(?:-([0-9A-Fa-f?]+))?$/);if(!a)continue;let r=a[1],s=a[2],c=i=>{if(!i.includes("?"))return parseInt(i,16);let u=parseInt(i.replace(/\?/g,"0"),16),p=parseInt(i.replace(/\?/g,"F"),16);return[u,p]};if(s){let i=c(r),u=c(s),p=Array.isArray(i)?i[0]:i,m=Array.isArray(u)?u[1]:u;e.push([Math.min(p,m),Math.max(p,m)])}else{let i=c(r);Array.isArray(i)?e.push([i[0],i[1]]):e.push([i,i])}}return e}function yt(t,e){if(!e.length||!t||t.size===0)return!0;for(let n of t)for(let[o,a]of e)if(n>=o&&n<=a)return!0;return!1}function tt(t,e){let n=[];if(!t)return n;for(let o of t.matchAll(ht)){let a=(o[2]||"").trim();if(!(!a||a.startsWith("data:"))){if(!/^https?:/i.test(a))try{a=new URL(a,e||location.href).href}catch{}n.push(a)}}return n}async function wt(t,e,n=""){let o=t;for(let a of t.matchAll(ht)){let r=q(a[0]);if(!r)continue;let s=r;if(!s.startsWith("http")&&!s.startsWith("data:"))try{s=new URL(s,e||location.href).href}catch{}if(!I(s)){if(f.resource?.has(s)){f.font?.add(s),o=o.replace(a[0],`url(${f.resource.get(s)})`);continue}try{let c=await $(s,{as:"dataURL",useProxy:n,silent:!0});if(c.ok&&typeof c.data=="string"){let i=c.data;f.resource?.set(s,i),f.font?.add(s),o=o.replace(a[0],`url(${i})`)}}catch{console.warn("[snapDOM] Failed to fetch font resource:",s)}}}return o}function Ht(t){if(!t.length)return null;let e=(c,i)=>t.some(([u,p])=>!(p<c||u>i)),n=e(0,255)||e(305,305),o=e(256,591)||e(7680,7935),a=e(880,1023),r=e(1024,1279);return e(7840,7929)||e(258,259)||e(416,417)||e(431,432)?"vietnamese":r?"cyrillic":a?"greek":o?"latin-ext":n?"latin":null}function dt(t={}){let e=new Set((t.families||[]).map(a=>String(a).toLowerCase())),n=new Set((t.domains||[]).map(a=>String(a).toLowerCase())),o=new Set((t.subsets||[]).map(a=>String(a).toLowerCase()));return(a,r)=>{if(e.size&&e.has(a.family.toLowerCase()))return!0;if(n.size)for(let s of a.srcUrls)try{if(n.has(new URL(s).host.toLowerCase()))return!0}catch{}if(o.size){let s=Ht(r);if(s&&o.has(s))return!0}return!1}}function Kt(t){if(!t)return t;let e=/@font-face[^{}]*\{[^}]*\}/gi,n=new Set,o=[];for(let r of t.match(e)||[]){let s=r.match(/font-family:\s*([^;]+);/i)?.[1]||"",c=Z(s),i=(r.match(/font-weight:\s*([^;]+);/i)?.[1]||"400").trim(),u=(r.match(/font-style:\s*([^;]+);/i)?.[1]||"normal").trim(),p=(r.match(/font-stretch:\s*([^;]+);/i)?.[1]||"100%").trim(),m=(r.match(/unicode-range:\s*([^;]+);/i)?.[1]||"").trim(),d=(r.match(/src\s*:\s*([^;}]+)[;}]/i)?.[1]||"").trim(),A=tt(d,location.href),E=A.length?A.map(g=>String(g).toLowerCase()).sort().join("|"):d.toLowerCase(),y=[String(c||"").toLowerCase(),i,u,p,m.toLowerCase(),E].join("|");n.has(y)||(n.add(y),o.push(r))}if(o.length===0)return t;let a=0;return t.replace(e,()=>o[a++]||"")}var mt=new WeakMap,Yt=0;function Qt(t){let e=mt.get(t);return e===void 0&&(e=Yt++,mt.set(t,e)),e}function Jt(t,e,n,o,a,r){let s=Array.from(t||[]).sort().join("|"),c=e?JSON.stringify({families:(e.families||[]).map(d=>String(d).toLowerCase()).sort(),domains:(e.domains||[]).map(d=>String(d).toLowerCase()).sort(),subsets:(e.subsets||[]).map(d=>String(d).toLowerCase()).sort()}):"",i=(n||[]).map(d=>`${(d.family||"").toLowerCase()}::${d.weight||"normal"}::${d.style||"normal"}::${d.src||""}`).sort().join("|"),u=o||"",p=(a||[]).map(d=>String(d).toLowerCase()).sort().join("|"),m=Qt(r||document);return`fonts-embed-css::req=${s}::ex=${c}::lf=${i}::px=${u}::fd=${p}::doc=${m}`}async function bt(t,e,n,o){let a;try{a=t.cssRules||[]}catch{return}let r=(s,c)=>{try{return new URL(s,c||location.href).href}catch{return s}};for(let s of a){if(s.type===CSSRule.IMPORT_RULE&&s.styleSheet){let c=s.href?r(s.href,e):e;if(o.depth>=H){console.warn(`[snapDOM] CSSOM import depth exceeded (${H}) at ${c}`);continue}if(c&&o.visitedSheets.has(c)){console.warn(`[snapDOM] Skipping circular CSSOM import: ${c}`);continue}c&&o.visitedSheets.add(c);let i={...o,depth:(o.depth||0)+1};await bt(s.styleSheet,c,n,i);continue}if(s.type===CSSRule.FONT_FACE_RULE){let c=(s.style.getPropertyValue("font-family")||"").trim(),i=Z(c);if(!i||I(i))continue;let u=(s.style.getPropertyValue("font-weight")||"400").trim(),p=(s.style.getPropertyValue("font-style")||"normal").trim(),m=(s.style.getPropertyValue("font-stretch")||"100%").trim(),d=(s.style.getPropertyValue("src")||"").trim(),A=(s.style.getPropertyValue("unicode-range")||"").trim();if(!o.faceMatchesRequired(i,p,u,m))continue;let E=gt(A);if(!yt(o.usedCodepoints,E))continue;let y={family:i,weightSpec:u,styleSpec:p,stretchSpec:m,unicodeRange:A,srcRaw:d,srcUrls:tt(d,e||location.href),href:e||location.href};if(o.simpleExcluder&&o.simpleExcluder(y,E))continue;if(/url\(/i.test(d)){let g=await wt(d,e||location.href,o.useProxy);await n(`@font-face{font-family:${i};src:${g};font-style:${p};font-weight:${u};font-stretch:${m};${A?`unicode-range:${A};`:""}}`)}else await n(`@font-face{font-family:${i};src:${d};font-style:${p};font-weight:${u};font-stretch:${m};${A?`unicode-range:${A};`:""}}`)}}}async function St({required:t,usedCodepoints:e,exclude:n=void 0,localFonts:o=[],useProxy:a="",fontStylesheetDomains:r=[],doc:s=document}={}){t instanceof Set||(t=new Set),e instanceof Set||(e=new Set);let c=new Map;for(let l of t){let[h,w,S,b]=String(l).split("__");if(!h)continue;let k=h.toLowerCase(),C=c.get(k)||[];C.push({w:parseInt(w,10),s:S,st:parseInt(b,10)}),c.set(k,C)}function i(l,h,w,S){let b=String(l).toLowerCase();if(!c.has(b))return!1;let k=c.get(b),C=Wt(w),L=Nt(h),F=Vt(S),P=C.min!==C.max,U=C.min,O=R=>L.kind==="normal"&&R==="normal"||L.kind!=="normal"&&(R==="italic"||R==="oblique"),N=!1;for(let R of k){let M=P?R.w>=C.min&&R.w<=C.max:R.w===U,T=O(G(R.s)),V=R.st>=F.min&&R.st<=F.max;if(M&&T&&V){N=!0;break}}if(N)return!0;if(!P)for(let R of k){let M=O(G(R.s)),T=R.st>=F.min&&R.st<=F.max;if(Math.abs(U-R.w)<=300&&M&&T)return!0}if(!P&&L.kind==="normal"&&k.some(M=>G(M.s)!=="normal"))for(let M of k){let T=Math.abs(U-M.w)<=300,V=M.st>=F.min&&M.st<=F.max;if(T&&V)return!0}return!1}let u=dt(n),p=Jt(t,n,o,a,r,s);if(f.resource?.has(p))return f.resource.get(p);let m=jt(t),d=[],A=J;for(let l of s.querySelectorAll("style")){let h=l.textContent||"";for(let w of h.matchAll(A)){let S=(w[2]||w[4]||"").trim();if(!S||I(S))continue;s.querySelector(`link[rel="stylesheet"][href="${S}"]`)||d.push(S)}}let E=[];d.length&&await Promise.all(d.map(l=>new Promise(h=>{if(s.querySelector(`link[rel="stylesheet"][href="${l}"]`))return h(null);let w=s.createElement("link");w.rel="stylesheet",w.href=l,w.setAttribute("data-snapdom","injected-import"),w.onload=()=>h(w),w.onerror=()=>h(null),s.head.appendChild(w),E.push(w)})));let y="",g=Array.from(s.querySelectorAll('link[rel="stylesheet"]')).filter(l=>!!l.href);for(let l of E)try{l.remove()}catch{}for(let l of g)try{if(I(l.href))continue;let h="",w=!1;try{w=new URL(l.href,location.href).origin===location.origin}catch{}if(!w){let b=Array.isArray(r)?r:[];if(!Xt(l.href,m,b))continue}if(w){let b=Array.from(s.styleSheets).find(k=>k.href===l.href);if(b)try{let k=b.cssRules||[];h=Array.from(k).map(C=>C.cssText).join("")}catch{}}if(!h){let b=await $(l.href,{as:"text",useProxy:a});if(b?.ok&&typeof b.data=="string"&&(h=b.data),I(l.href))continue}h=await zt(h,l.href,a);let S="";for(let b of h.match(Gt)||[]){let k=(b.match(/font-family:\s*([^;]+);/i)?.[1]||"").trim(),C=Z(k);if(!C||I(C))continue;let L=(b.match(/font-weight:\s*([^;]+);/i)?.[1]||"400").trim(),F=(b.match(/font-style:\s*([^;]+);/i)?.[1]||"normal").trim(),P=(b.match(/font-stretch:\s*([^;]+);/i)?.[1]||"100%").trim(),U=(b.match(/unicode-range:\s*([^;]+);/i)?.[1]||"").trim(),O=(b.match(/src\s*:\s*([^;}]+)[;}]/i)?.[1]||"").trim(),N=tt(O,l.href);if(!i(C,F,L,P))continue;let R=gt(U);if(!yt(e,R))continue;let M={family:C,weightSpec:L,styleSpec:F,stretchSpec:P,unicodeRange:U,srcRaw:O,srcUrls:N,href:l.href};if(n&&u(M,R))continue;let T=/url\(/i.test(O)?await wt(b,l.href,a):b;S+=T}S.trim()&&(y+=S)}catch{console.warn("[snapDOM] Failed to process stylesheet:",l.href)}let x={requiredIndex:c,usedCodepoints:e,faceMatchesRequired:i,simpleExcluder:n?dt(n):null,useProxy:a,visitedSheets:new Set,depth:0};for(let l of s.styleSheets)if(!(l.href&&g.some(h=>h.href===l.href)))try{let h=l.href||location.origin+"/";h&&x.visitedSheets.add(h),await bt(l,h,async w=>{y+=w},x)}catch{}try{for(let l of s.fonts||[]){if(!l||!l.family||l.status!=="loaded"||!l._snapdomSrc)continue;let h=String(l.family).replace(/^['"]+|['"]+$/g,"");if(I(h)||!c.has(h.toLowerCase())||n?.families&&n.families.some(S=>String(S).toLowerCase()===h.toLowerCase()))continue;let w=l._snapdomSrc;if(!String(w).startsWith("data:")){if(f.resource?.has(l._snapdomSrc))w=f.resource.get(l._snapdomSrc),f.font?.add(l._snapdomSrc);else if(!f.font?.has(l._snapdomSrc))try{let S=await $(l._snapdomSrc,{as:"dataURL",useProxy:a,silent:!0});if(S.ok&&typeof S.data=="string")w=S.data,f.resource?.set(l._snapdomSrc,w),f.font?.add(l._snapdomSrc);else continue}catch{console.warn("[snapDOM] Failed to fetch dynamic font src:",l._snapdomSrc);continue}}y+=`@font-face{font-family:'${h}';src:url(${w});font-style:${l.style||"normal"};font-weight:${l.weight||"normal"};}`}}catch{}for(let l of o){if(!l||typeof l!="object")continue;let h=String(l.family||"").replace(/^['"]+|['"]+$/g,"");if(!h||I(h)||!c.has(h.toLowerCase())||n?.families&&n.families.some(L=>String(L).toLowerCase()===h.toLowerCase()))continue;let w=l.weight!=null?String(l.weight):"normal",S=l.style!=null?String(l.style):"normal",b=l.stretchPct!=null?`${l.stretchPct}%`:"100%",k=String(l.src||""),C=k;if(!C.startsWith("data:")){if(f.resource?.has(k))C=f.resource.get(k),f.font?.add(k);else if(!f.font?.has(k))try{let L=await $(k,{as:"dataURL",useProxy:a,silent:!0});if(L.ok&&typeof L.data=="string")C=L.data,f.resource?.set(k,C),f.font?.add(k);else continue}catch{console.warn("[snapDOM] Failed to fetch localFonts src:",k);continue}}y+=`@font-face{font-family:'${h}';src:url(${C});font-style:${S};font-weight:${w};font-stretch:${b};}`}return y&&(y=Kt(y),f.resource?.set(p,y)),y}function kt(t,e){let n=new Set,o=new Set;if(!t)return{required:n,usedCodepoints:o};let a=i=>{if(i)for(let u of i)o.add(u.codePointAt(0))},r=i=>{let u=Bt(i.fontFamily);if(u.length)for(let p of u)n.add(`${p}__${z(i.fontWeight)}__${G(i.fontStyle)}__${Dt(i.fontStretch)}`)},s=i=>{r(v(i));for(let u of["::before","::after"]){let p=v(i,u),m=p&&p.content;if(!(!m||m==="none"||m==="normal"))if(r(p),/^["']/.test(m))a(m.slice(1,-1));else{let d=m.match(/\\[0-9A-Fa-f]{1,6}/g);if(d)for(let A of d)try{o.add(parseInt(A.slice(1),16))}catch{}}}};s(t);let c=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT,null);for(;c.nextNode();){let i=c.currentNode;if(i.nodeType===Node.TEXT_NODE){if(e&&i.parentElement&&!e(i.parentElement))continue;a(i.nodeValue||"")}else{if(e&&!e(i))continue;s(i)}}return{required:n,usedCodepoints:o}}async function xt(t,e=2,n=document){try{await n.fonts.ready}catch{}let o=Array.from(t||[]).filter(Boolean);if(o.length===0)return;let a=()=>{let r=n.createElement("div");r.setAttribute("data-snapdom-internal",""),r.style.cssText="position:absolute!important;left:-9999px!important;top:0!important;opacity:0!important;pointer-events:none!important;contain:layout size style;";for(let s of o){let c=n.createElement("span");c.textContent="AaBbGg1234\xC1\xC9\xCD\xD3\xDA\xE7\xF1\u2014\u221E",c.style.fontFamily=`"${s}"`,c.style.fontWeight="700",c.style.fontStyle="italic",c.style.fontSize="32px",c.style.lineHeight="1",c.style.whiteSpace="nowrap",c.style.margin="0",c.style.padding="0",r.appendChild(c)}n.body.appendChild(r),r.offsetWidth,n.body.removeChild(r)};for(let r=0;r<Math.max(1,e);r++)a(),await new Promise(s=>requestAnimationFrame(()=>requestAnimationFrame(s)))}var Zt=new WeakMap;var te=0;function et(t){let e=Zt.get(t);if(e&&e.epoch===te){let n=e.snapshot&&e.snapshot.__needsBgInline;if(n!==void 0)return n}return!0}var ee=["background-image","mask","mask-image","-webkit-mask","-webkit-mask-image","mask-source","mask-box-image-source","mask-border-source","-webkit-mask-box-image-source","border-image","border-image-source"],ne=["mask-position","mask-size","mask-repeat","mask-mode","mask-composite","-webkit-mask-position","-webkit-mask-size","-webkit-mask-repeat","-webkit-mask-composite","mask-origin","mask-clip","-webkit-mask-origin","-webkit-mask-clip","-webkit-mask-position-x","-webkit-mask-position-y"],oe=["background-position","background-position-x","background-position-y","background-size","background-repeat","background-origin","background-clip","background-attachment","background-blend-mode"],re=["border-image-slice","border-image-width","border-image-outset","border-image-repeat"];async function se(t,e,n,o){let a=n.get(t)||v(t);n.has(t)||n.set(t,a);let r=a.getPropertyValue("border-image"),s=a.getPropertyValue("border-image-source"),c=r&&r!=="none"||s&&s!=="none",i=a.getPropertyValue("background-image"),u=a.getPropertyValue("background-color");if(i&&i!=="none"||u&&u!=="rgba(0, 0, 0, 0)"&&u!=="transparent"||/url\s*\(|gradient\s*\(/i.test(a.getPropertyValue("background")||""))for(let m of oe){let d=a.getPropertyValue(m);d&&e.style.setProperty(m,d)}for(let m of ee){let d=a.getPropertyValue(m);if(m==="background-image"&&(!d||d==="none")){let y=a.getPropertyValue("background");y&&/url\s*\(/.test(y)&&(d=j(y).filter(g=>/url\s*\(/.test(g)).join(", ")||d)}if(!d||d==="none")continue;let A=j(d),E=await Promise.all(A.map(y=>D(y,o)));E.some(y=>y&&y!=="none"&&!/^url\(undefined/.test(y))&&e.style.setProperty(m,E.join(", "))}for(let m of ne){let d=a.getPropertyValue(m);!d||d==="initial"||e.style.setProperty(m,d)}if(c)for(let m of re){let d=a.getPropertyValue(m);!d||d==="initial"||e.style.setProperty(m,d)}}async function Ct(t,e,n,o={},a=f.session.nodeMap){if(!e)return;let r=[];t&&et(t)&&r.push([t,e]);let s=[e];for(;s.length;){let i=s.pop();if(i.children)for(let u of i.children){if(u.tagName==="STYLE")continue;let p=a.get(u);p&&et(p)&&r.push([p,u]),s.push(u)}}let c=6;for(let i=0;i<r.length;i+=c)await Promise.allSettled(r.slice(i,i+c).map(([u,p])=>se(u,p,n,o)))}async function He(t=document,e={}){let{embedFonts:n=!0,useProxy:o=""}=e,a=e.cache??e.cacheOpt??"full";nt(a);try{await document.fonts?.ready}catch{}try{Q()}catch{}f.session=f.session||{},f.session.styleCache||(f.session.styleCache=new WeakMap),f.image=f.image||new _(100),f.background=f.background||new _(100);try{await Ct(t,void 0,f.session.styleCache,{useProxy:o})}catch{}let r=[],s=[];try{if(t&&t.nodeType===1){let i=t.querySelectorAll?Array.from(t.querySelectorAll("*")):[];s=[t,...i],r=[],t.tagName==="IMG"&&t.getAttribute("src")&&r.push(t),r.push(...Array.from(t.querySelectorAll?.("img[src]")||[]))}else t?.querySelectorAll&&(r=Array.from(t.querySelectorAll("img[src]")),s=Array.from(t.querySelectorAll("*")))}catch{}let c=[];for(let i of r){let u=i?.currentSrc||i?.src;if(u&&!f.image.has(u)){let p=Promise.resolve().then(async()=>{let m=await $(u,{as:"dataURL",useProxy:o});m?.ok&&typeof m.data=="string"&&f.image.set(u,m.data)}).catch(()=>{});c.push(p)}}for(let i of s){let u="";try{u=i?.style?.backgroundImage||"",(!u||u==="none")&&(u=v(i).backgroundImage)}catch{}if(u&&u!=="none"){let p=u.match(/url\((?:[^()"']+|"(?:[^"]*)"|'(?:[^']*)')\)/gi)||[];for(let m of p){let d=Promise.resolve().then(()=>D(m,{...e,useProxy:o})).catch(()=>{});c.push(d)}}}if(n)try{let{required:i,usedCodepoints:u}=kt(t);if(typeof W=="function"?W():!!W){let m=new Set(Array.from(i).map(d=>String(d).split("__")[0]).filter(Boolean));await xt(m,3)}await St({required:i,usedCodepoints:u,exclude:e.excludeFonts,localFonts:e.localFonts,useProxy:e.useProxy??o,fontStylesheetDomains:e.fontStylesheetDomains})}catch{}await Promise.allSettled(c)}export{He as preCache};
|
|
7
|
+
var R=class extends Map{constructor(e=100,...n){super(...n),this._maxSize=e}set(e,n){if(this.size>=this._maxSize&&!this.has(e)){let o=this.keys().next().value;o!==void 0&&this.delete(o)}return super.set(e,n)}},f={image:new R(100),background:new R(100),resource:new R(150),defaultStyle:new R(30),baseStyle:new R(50),compress:new R(50),computedStyle:new WeakMap,measureHints:new WeakMap,burstAdvice:new WeakMap,warnedReconcile:!1,font:new Set,session:{styleMap:new Map,styleCache:new WeakMap,nodeMap:new Map}};function et(t="soft"){switch(t){case"auto":{f.session.styleMap=new Map,f.session.nodeMap=new Map;return}case"soft":{f.session.styleMap=new Map,f.session.nodeMap=new Map,f.session.styleCache=new WeakMap;return}case"full":return;case"disabled":{f.session.styleMap=new Map,f.session.nodeMap=new Map,f.session.styleCache=new WeakMap,f.computedStyle=new WeakMap,f.measureHints=new WeakMap,f.baseStyle=new R(50),f.defaultStyle=new R(30),f.image=new R(100),f.background=new R(100),f.resource=new R(150),f.compress=new R(50),f.font=new Set;return}default:{f.session.styleMap=new Map,f.session.nodeMap=new Map,f.session.styleCache=new WeakMap;return}}}function j(t){let e=t.match(/url\((['"]?)(.*?)(\1)\)/);if(!e)return null;let n=e[2].trim();return n.startsWith("#")?null:n}var kt=/^image\/(jpeg|jpg|png|gif|webp|avif|apng|svg\+xml|bmp|x-icon|vnd\.microsoft\.icon)\s*(;|$)/i;function nt(t,e=1){let n=t.match(/^\s*-?(?:webkit-)?image-set\(([\s\S]*)\)\s*$/i);if(!n)return null;let o=[];for(let s of n[1].split(",")){let r=s.match(/url\((['"]?)(.*?)(\1)\)/);if(!r)continue;let a=s.match(/type\(\s*["']([^"']+)["']\s*\)/i);if(a&&!kt.test(a[1].trim()))continue;let i=s.match(/(\d+(?:\.\d+)?)\s*(x|dpi|dppx)/i),u=1;if(i){let m=parseFloat(i[1]);u=/dpi/i.test(i[2])?m/96:m}o.push({url:r[2].trim(),dppx:u})}return o.length?(o.sort((s,r)=>s.dppx-r.dppx),(o.find(s=>s.dppx>=e)||o[o.length-1]).url):null}function W(t){if(/%[0-9A-Fa-f]{2}/.test(t))return t;try{return encodeURI(t)}catch{return t}}function ot(t,e){if(!t||/^(data|blob|about|#)/i.test(t.trim()))return t;try{let n=e||typeof document<"u"&&(document.baseURI||document.location?.href)||"http://localhost/";return new URL(t,n).href}catch{return t}}function At(t="[snapDOM]",{ttlMs:e=5*6e4,maxEntries:n=12}={}){let o=new Map,c=0;function s(r,a,i){if(c>=n)return;let u=Date.now();(o.get(a)||0)>u||(o.set(a,u+e),c++,r==="warn"&&console&&console.warn?console.warn(`${t} ${i}`):console&&console.error&&console.error(`${t} ${i}`))}return{warnOnce(r,a){s("warn",r,a)},errorOnce(r,a){s("error",r,a)},reset(){o.clear(),c=0}}}var rt=At("[snapDOM]",{ttlMs:3*6e4,maxEntries:10}),K=new Map,V=new Map;function $t(t){return/^data:|^blob:|^about:blank$/i.test(t)}function Mt(t,e){try{let n=typeof location<"u"&&location.href?location.href:"http://localhost/",o=e.includes("{url}")?e.split("{url}")[0]:e,c=new URL(o||".",n),s=new URL(t,n);if(s.origin===c.origin)return!0;let r=s.searchParams;if(r&&(r.has("url")||r.has("target")))return!0}catch{}return!1}function Rt(t,e){if(!e||$t(t)||Mt(t,e))return!1;try{let n=typeof location<"u"&&location.href?location.href:"http://localhost/",o=new URL(t,n);return typeof location<"u"?o.origin!==location.origin:!0}catch{return!!e}}function Lt(t,e){if(!e)return t;if(e.includes("{url}"))return e.replace("{urlRaw}",W(t)).replace("{url}",encodeURIComponent(t));if(/[?&]url=?$/.test(e))return`${e}${encodeURIComponent(t)}`;if(e.endsWith("?"))return`${e}url=${encodeURIComponent(t)}`;if(e.endsWith("/"))return`${e}${W(t)}`;let n=e.includes("?")?"&":"?";return`${e}${n}url=${encodeURIComponent(t)}`}function st(t){return new Promise((e,n)=>{let o=new FileReader;o.onload=()=>e(String(o.result||"")),o.onerror=()=>n(new Error("read_failed")),o.readAsDataURL(t)})}function _t(t,e){return[e.as||"blob",e.timeout??3e3,e.useProxy||"",e.errorTTL??8e3,t].join("|")}async function F(t,e={}){let n=e.as??"blob",o=e.timeout??3e3,c=e.useProxy||"",s=e.errorTTL??8e3,r=e.headers||{},a=!!e.silent;if(/^data:/i.test(t))try{if(n==="text")return{ok:!0,data:String(t),status:200,url:t,fromCache:!1};if(n==="dataURL")return{ok:!0,data:String(t),status:200,url:t,fromCache:!1,mime:String(t).slice(5).split(";")[0]||""};let[,g="",k=""]=String(t).match(/^data:([^,]*),(.*)$/)||[],d=/;base64/i.test(g)?atob(k):decodeURIComponent(k),y=new Uint8Array([...d].map(w=>w.charCodeAt(0))),b=new Blob([y],{type:(g||"").split(";")[0]||""});return{ok:!0,data:b,status:200,url:t,fromCache:!1,mime:b.type||""}}catch{return{ok:!1,data:null,status:0,url:t,fromCache:!1,reason:"special_url_error"}}if(/^blob:/i.test(t))try{let g=await fetch(t);if(!g.ok)return{ok:!1,data:null,status:g.status,url:t,fromCache:!1,reason:"http_error"};let k=await g.blob(),l=k.type||g.headers.get("content-type")||"";return n==="dataURL"?{ok:!0,data:await st(k),status:g.status,url:t,fromCache:!1,mime:l}:n==="text"?{ok:!0,data:await k.text(),status:g.status,url:t,fromCache:!1,mime:l}:{ok:!0,data:k,status:g.status,url:t,fromCache:!1,mime:l}}catch{return{ok:!1,data:null,status:0,url:t,fromCache:!1,reason:"network"}}if(/^about:blank$/i.test(t))return n==="dataURL"?{ok:!0,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg==",status:200,url:t,fromCache:!1,mime:"image/png"}:{ok:!0,data:n==="text"?"":new Blob([]),status:200,url:t,fromCache:!1};let i=_t(t,{as:n,timeout:o,useProxy:c,errorTTL:s}),u=V.get(i);if(u&&u.until>Date.now())return{...u.result,fromCache:!0};u&&V.delete(i);let m=K.get(i);if(m)return m;let p=Rt(t,c)?Lt(t,c):t,h=e.credentials;if(!h)try{let g=typeof location<"u"&&location.href?location.href:"http://localhost/",k=new URL(t,g);h=typeof location<"u"&&k.origin===location.origin?"include":"omit"}catch{h="omit"}let C=new AbortController,$=setTimeout(()=>C.abort("timeout"),o),S=(async()=>{try{let g=await fetch(p,{signal:C.signal,credentials:h,headers:r});if(!g.ok){let d={ok:!1,data:null,status:g.status,url:p,fromCache:!1,reason:"http_error"};if(s>0&&V.set(i,{until:Date.now()+s,result:d}),!a){let y=`${g.status} ${g.statusText||""}`.trim();rt.warnOnce(`http:${g.status}:${n}:${new URL(t,location?.href??"http://localhost/").origin}`,`HTTP error ${y} while fetching ${n} ${t}`)}return e.onError&&e.onError(d),d}if(n==="text")return{ok:!0,data:await g.text(),status:g.status,url:p,fromCache:!1};let k=await g.blob(),l=k.type||g.headers.get("content-type")||"";return n==="dataURL"?{ok:!0,data:await st(k),status:g.status,url:p,fromCache:!1,mime:l}:{ok:!0,data:k,status:g.status,url:p,fromCache:!1,mime:l}}catch(g){let k=g&&typeof g=="object"&&"name"in g&&g.name==="AbortError"?String(g.message||"").includes("timeout")?"timeout":"abort":"network",l={ok:!1,data:null,status:0,url:p,fromCache:!1,reason:k};if(!/^blob:/i.test(t)&&s>0&&V.set(i,{until:Date.now()+s,result:l}),!a){let d=`${k}:${n}:${new URL(t,location?.href??"http://localhost/").origin}`,y=k==="timeout"?`Timeout after ${o}ms. Consider increasing timeout or using a proxy for ${t}`:k==="abort"?`Request aborted while fetching ${n} ${t}`:`Network/CORS issue while fetching ${n} ${t}. A proxy may be required`;rt.errorOnce(d,y)}return e.onError&&e.onError(l),l}finally{clearTimeout($),K.delete(i)}})();return K.set(i,S),S}async function H(t,e={}){if(/^((repeating-)?(linear|radial|conic)-gradient)\(/i.test(t)||t.trim()==="none")return t;let o=nt(t,typeof devicePixelRatio<"u"&&devicePixelRatio||1)??j(t);if(!o)return t;let c=ot(o),s=W(c),r=(e.useProxy||"")+"|"+s;if(f.background.has(r)){let a=f.background.get(r);return a?`url("${a}")`:"none"}try{let a=await F(s,{as:"dataURL",useProxy:e.useProxy});return a.ok?(f.background.set(r,a.data),`url("${a.data}")`):(f.background.set(r,null),"none")}catch{return f.background.set(r,null),"none"}}var at=new Set(["meta","script","noscript","title","link","template"]),Y=new Set(["meta","link","style","title","noscript","script","template","g","defs","use","marker","mask","clipPath","pattern","path","polygon","polyline","line","circle","ellipse","rect","filter","lineargradient","radialgradient","stop"]),Et=["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","table","thead","tbody","tr","td","th"];function Q(){for(let t of Et){let e=String(t).toLowerCase();at.has(e)||Y.has(e)||ct(e)}}function ct(t){if(t=String(t).toLowerCase(),Y.has(t)){let s={};return f.defaultStyle.set(t,s),s}if(f.defaultStyle.has(t))return f.defaultStyle.get(t);let e=document.getElementById("snapdom-sandbox");e||(e=document.createElement("div"),e.id="snapdom-sandbox",e.setAttribute("data-snapdom-sandbox","true"),e.setAttribute("aria-hidden","true"),e.style.position="absolute",e.style.left="-9999px",e.style.top="-9999px",e.style.width="0px",e.style.height="0px",e.style.overflow="hidden",document.body.appendChild(e));let n=document.createElement(t);n.style.all="initial",e.appendChild(n);let o=getComputedStyle(n),c={};for(let s of o){if(lt(s))continue;let r=o.getPropertyValue(s);c[s]=r}return e.removeChild(n),f.defaultStyle.set(t,c),c}var Ft=/(?:^|-)(animation|transition)(?:-|$)/i,Ut=/^(--.+|view-timeline|scroll-timeline|animation-trigger|offset-|position-try|app-region|interactivity|overlay|view-transition|-webkit-locale|-webkit-user-(?:drag|modify)|-webkit-tap-highlight-color|-webkit-text-security)$/i,It=new Set(["cursor","pointer-events","touch-action","user-select","print-color-adjust","speak","reading-flow","reading-order","anchor-name","anchor-scope","container-name","container-type","timeline-scope","zoom","stroke-color"]),it=new Map;function lt(t){let e=it.get(t);if(e===void 0){let n=String(t).toLowerCase();e=It.has(n)||Ut.test(n)||Ft.test(n),it.set(t,e)}return e}function Tt(t){try{let e=t?.ownerDocument;if(!e)return typeof window<"u"?window:null;let n=e.defaultView;if(n&&typeof n.getComputedStyle=="function")return n;if(typeof window<"u"&&window.frames)for(let o=0;o<window.frames.length;o++)try{if(window.frames[o]?.document===e)return window.frames[o]}catch{}}catch{}return typeof window<"u"?window:null}function D(t,e=null){let n=()=>{let s={length:0,getPropertyValue:()=>"",item:()=>""};return s[Symbol.iterator]=function*(){},s};if(t?.nodeType!==1){let s=typeof window<"u"?window:null;if(s&&typeof s.getComputedStyle=="function")try{return s.getComputedStyle(t,e)||n()}catch{return n()}return n()}let o=f.computedStyle.get(t);o||(o=new Map,f.computedStyle.set(t,o));let c=o.get(e);if(!c){let s=Tt(t),r=null;try{r=s&&typeof s.getComputedStyle=="function"?s.getComputedStyle(t,e):null}catch{}if(!r&&typeof window<"u"&&typeof window.getComputedStyle=="function")try{t.ownerDocument===document&&(r=window.getComputedStyle(t,e))}catch{}c=r||n(),o.set(e,c)}return c}function B(){if(typeof navigator>"u")return!1;let t=navigator.userAgent||"",e=t.toLowerCase(),n=e.includes("safari")&&!e.includes("chrome")&&!e.includes("crios")&&!e.includes("fxios")&&!e.includes("android"),o=/applewebkit/i.test(t),c=/mobile/i.test(t),s=!/safari/i.test(t),r=o&&c&&s,a=/(micromessenger|wxwork|wecom|windowswechat|macwechat)/i.test(t),i=/(baiduboxapp|baidubrowser|baidusearch|baiduboxlite)/i.test(e),u=/ipad|iphone|ipod/.test(e)&&o;return n||r||a||i||u}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],Ae=Object.assign({materialIconsFilled:"https://fonts.gstatic.com/s/materialicons/v48/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.woff2",materialIconsOutlined:"https://fonts.gstatic.com/s/materialiconsoutlined/v110/gok-H7zzDkdnRel8-DQ6KAXJ69wP1tGnf4ZGhUcel5euIg.woff2",materialIconsRound:"https://fonts.gstatic.com/s/materialiconsround/v109/LDItaoyNOAY6Uewc665JcIzCKsKc_M9flwmPq_HTTw.woff2",materialIconsSharp:"https://fonts.gstatic.com/s/materialiconssharp/v110/oPWQ_lt5nv4pWNJpghLP75WiFR4kLh3kvmvRImcycg.woff2"},typeof window<"u"&&window.__SNAPDOM_ICON_FONTS__||{}),vt=[];function I(t){let e=typeof t=="string"?t:"",n=[...Ot,...vt];for(let o of n)if(o instanceof RegExp&&o.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))}var dt=new Set(["serif","sans-serif","monospace","cursive","fantasy","system-ui","emoji","math","fangsong","ui-serif","ui-sans-serif","ui-monospace","ui-rounded"]),Pt=["katex","mathjax","mathml"];function Z(t){if(!t)return"";for(let e of t.split(",")){let n=e.trim().replace(/^['"]+|['"]+$/g,"");if(n&&!dt.has(n.toLowerCase()))return n}return""}function Dt(t){if(!t)return[];let e=[];for(let n of t.split(",")){let o=n.trim().replace(/^['"]+|['"]+$/g,"");o&&(dt.has(o.toLowerCase())||e.push(o))}return e}function X(t){let e=String(t??"400").trim().toLowerCase();if(e==="normal")return 400;if(e==="bold")return 700;let n=parseInt(e,10);return Number.isFinite(n)?Math.min(900,Math.max(100,n)):400}function z(t){let e=String(t??"normal").trim().toLowerCase();return e.startsWith("italic")?"italic":e.startsWith("oblique")?"oblique":"normal"}function Wt(t){let e=String(t??"100%").match(/(\d+(?:\.\d+)?)\s*%/);return e?Math.max(50,Math.min(200,parseFloat(e[1]))):100}function Bt(t){let e=String(t||"400").trim(),n=e.match(/^(\d{2,3})\s+(\d{2,3})$/);if(n){let c=X(n[1]),s=X(n[2]);return{min:Math.min(c,s),max:Math.max(c,s)}}let o=X(e);return{min:o,max:o}}function Nt(t){let e=String(t||"normal").trim().toLowerCase();return e==="italic"?{kind:"italic"}:e.startsWith("oblique")?{kind:"oblique"}:{kind:"normal"}}function qt(t){let e=String(t||"100%").trim(),n=e.match(/(\d+(?:\.\d+)?)\s*%\s+(\d+(?:\.\d+)?)\s*%/);if(n){let s=parseFloat(n[1]),r=parseFloat(n[2]);return{min:Math.min(s,r),max:Math.max(s,r)}}let o=e.match(/(\d+(?:\.\d+)?)\s*%/),c=o?parseFloat(o[1]):100;return{min:c,max:c}}function jt(t){return!t||typeof t!="string"?"":t.replace(/\s+(variable|vf|v[0-9]+)$/i,"").trim().toLowerCase().replace(/\s+/g,"-")}function Vt(t,e,n=[]){if(!t)return!1;try{let o=new URL(t,location.href);if(o.origin===location.origin)return!0;let s=o.host.toLowerCase();if(["fonts.googleapis.com","fonts.gstatic.com","use.typekit.net","p.typekit.net","kit.fontawesome.com","use.fontawesome.com","cdn.jsdelivr.net","unpkg.com","cdnjs.cloudflare.com","esm.sh"].some(i=>s.endsWith(i))||n.some(i=>s===i.toLowerCase()||s.endsWith("."+i.toLowerCase())))return!0;let a=(o.pathname+o.search).toLowerCase();if(/\bfont(s)?\b/.test(a)||/\.woff2?(\b|$)/.test(a)||Pt.some(i=>a.includes(i)))return!0;for(let i of e){let u=i.toLowerCase().replace(/\s+/g,"+"),m=i.toLowerCase().replace(/\s+/g,"-"),p=jt(i);if(a.includes(u)||a.includes(m)||p&&a.includes(p))return!0}return!1}catch{return!1}}function Xt(t){let e=new Set;for(let n of t||[]){let o=String(n).split("__")[0]?.trim();o&&e.add(o)}return e}function ft(t,e){return t&&t.replace(/url\(\s*(['"]?)([^)'"]+)\1\s*\)/g,(n,o,c)=>{let s=(c||"").trim();if(!s||/^data:|^blob:|^https?:|^file:|^about:/i.test(s))return n;let r=s;try{r=new URL(s,e||location.href).href}catch{}return`url("${r}")`})}var J=/@import\s+(?:url\(\s*(['"]?)([^)"']+)\1\s*\)|(['"])([^"']+)\3)([^;]*);/g,G=4;async function zt(t,e,n){if(!t)return t;let o=new Set;function c(a,i){try{return new URL(a,i||location.href).href}catch{return a}}async function s(a,i,u=0){if(u>G)return console.warn(`[snapDOM] @import depth exceeded (${G}) at ${i}`),a;let m="",p=0,h;for(;h=J.exec(a);){m+=a.slice(p,h.index),p=J.lastIndex;let C=(h[2]||h[4]||"").trim(),$=c(C,i);if(o.has($)){console.warn(`[snapDOM] Skipping circular @import: ${$}`);continue}o.add($);let S="";try{let g=await F($,{as:"text",useProxy:n,silent:!0});g.ok&&typeof g.data=="string"&&(S=g.data)}catch{}S?(S=ft(S,$),S=await s(S,$,u+1),m+=`
|
|
8
|
+
/* inlined: ${$} */
|
|
9
|
+
${S}
|
|
10
|
+
`):m+=h[0]}return m+=a.slice(p),m}let r=ft(t,e||location.href);return r=await s(r,e||location.href,0),r}var pt=/url\((["']?)([^"')]+)\1\)/g,Gt=/@font-face[^{}]*\{[^}]*\}/g;function _(t,e,n=""){return(t.match(new RegExp(`${e}\\s*:\\s*([^;}]+)[;}]`,"i"))?.[1]||n).trim()}function ht(t){if(!t)return[];let e=[],n=t.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n){let c=o.match(/^U\+([0-9A-Fa-f?]+)(?:-([0-9A-Fa-f?]+))?$/);if(!c)continue;let s=c[1],r=c[2],a=i=>{if(!i.includes("?"))return parseInt(i,16);let u=parseInt(i.replace(/\?/g,"0"),16),m=parseInt(i.replace(/\?/g,"F"),16);return[u,m]};if(r){let i=a(s),u=a(r),m=Array.isArray(i)?i[0]:i,p=Array.isArray(u)?u[1]:u;e.push([Math.min(m,p),Math.max(m,p)])}else{let i=a(s);Array.isArray(i)?e.push([i[0],i[1]]):e.push([i,i])}}return e}function gt(t,e){if(!e.length||!t||t.size===0)return!0;for(let n of t)for(let[o,c]of e)if(n>=o&&n<=c)return!0;return!1}function tt(t,e){let n=[];if(!t)return n;for(let o of t.matchAll(pt)){let c=(o[2]||"").trim();if(!(!c||c.startsWith("data:"))){if(!/^https?:/i.test(c))try{c=new URL(c,e||location.href).href}catch{}n.push(c)}}return n}async function yt(t,e,n=""){let o=t;for(let c of t.matchAll(pt)){let s=j(c[0]);if(!s)continue;let r=s;if(!r.startsWith("http")&&!r.startsWith("data:"))try{r=new URL(r,e||location.href).href}catch{}if(!I(r)){if(f.resource?.has(r)){f.font?.add(r),o=o.replace(c[0],`url(${f.resource.get(r)})`);continue}try{let a=await F(r,{as:"dataURL",useProxy:n,silent:!0});if(a.ok&&typeof a.data=="string"){let i=a.data;f.resource?.set(r,i),f.font?.add(r),o=o.replace(c[0],`url(${i})`)}}catch{console.warn("[snapDOM] Failed to fetch font resource:",r)}}}return o}function Kt(t){if(!t.length)return null;let e=(a,i)=>t.some(([u,m])=>!(m<a||u>i)),n=e(0,255)||e(305,305),o=e(256,591)||e(7680,7935),c=e(880,1023),s=e(1024,1279);return e(7840,7929)||e(258,259)||e(416,417)||e(431,432)?"vietnamese":s?"cyrillic":c?"greek":o?"latin-ext":n?"latin":null}function ut(t={}){let e=new Set((t.families||[]).map(c=>String(c).toLowerCase())),n=new Set((t.domains||[]).map(c=>String(c).toLowerCase())),o=new Set((t.subsets||[]).map(c=>String(c).toLowerCase()));return(c,s)=>{if(e.size&&e.has(c.family.toLowerCase()))return!0;if(n.size)for(let r of c.srcUrls)try{if(n.has(new URL(r).host.toLowerCase()))return!0}catch{}if(o.size){let r=Kt(s);if(r&&o.has(r))return!0}return!1}}function Ht(t){if(!t)return t;let e=/@font-face[^{}]*\{[^}]*\}/gi,n=new Set,o=[];for(let s of t.match(e)||[]){let r=_(s,"font-family"),a=Z(r),i=_(s,"font-weight","400"),u=_(s,"font-style","normal"),m=_(s,"font-stretch","100%"),p=_(s,"unicode-range"),h=_(s,"src"),C=tt(h,location.href),$=C.length?C.map(g=>String(g).toLowerCase()).sort().join("|"):h.toLowerCase(),S=[String(a||"").toLowerCase(),i,u,m,p.toLowerCase(),$].join("|");n.has(S)||(n.add(S),o.push(s))}if(o.length===0)return t;let c=0;return t.replace(e,()=>o[c++]||"")}var mt=new WeakMap,Yt=0;function Qt(t){let e=mt.get(t);return e===void 0&&(e=Yt++,mt.set(t,e)),e}function Jt(t,e,n,o,c,s){let r=Array.from(t||[]).sort().join("|"),a=e?JSON.stringify({families:(e.families||[]).map(h=>String(h).toLowerCase()).sort(),domains:(e.domains||[]).map(h=>String(h).toLowerCase()).sort(),subsets:(e.subsets||[]).map(h=>String(h).toLowerCase()).sort()}):"",i=(n||[]).map(h=>`${(h.family||"").toLowerCase()}::${h.weight||"normal"}::${h.style||"normal"}::${h.src||""}`).sort().join("|"),u=o||"",m=(c||[]).map(h=>String(h).toLowerCase()).sort().join("|"),p=Qt(s||document);return`fonts-embed-css::req=${r}::ex=${a}::lf=${i}::px=${u}::fd=${m}::doc=${p}`}async function wt(t,e,n,o){let c;try{c=t.cssRules||[]}catch{return}let s=(r,a)=>{try{return new URL(r,a||location.href).href}catch{return r}};for(let r of c){if(r.type===CSSRule.IMPORT_RULE&&r.styleSheet){let a=r.href?s(r.href,e):e;if(o.depth>=G){console.warn(`[snapDOM] CSSOM import depth exceeded (${G}) at ${a}`);continue}if(a&&o.visitedSheets.has(a)){console.warn(`[snapDOM] Skipping circular CSSOM import: ${a}`);continue}a&&o.visitedSheets.add(a);let i={...o,depth:(o.depth||0)+1};await wt(r.styleSheet,a,n,i);continue}if(r.type===CSSRule.FONT_FACE_RULE){let a=(r.style.getPropertyValue("font-family")||"").trim(),i=Z(a);if(!i||I(i))continue;let u=(r.style.getPropertyValue("font-weight")||"400").trim(),m=(r.style.getPropertyValue("font-style")||"normal").trim(),p=(r.style.getPropertyValue("font-stretch")||"100%").trim(),h=(r.style.getPropertyValue("src")||"").trim(),C=(r.style.getPropertyValue("unicode-range")||"").trim();if(!o.faceMatchesRequired(i,m,u,p))continue;let $=ht(C);if(!gt(o.usedCodepoints,$))continue;let S={family:i,weightSpec:u,styleSpec:m,stretchSpec:p,unicodeRange:C,srcRaw:h,srcUrls:tt(h,e||location.href),href:e||location.href};if(o.simpleExcluder&&o.simpleExcluder(S,$))continue;if(/url\(/i.test(h)){let g=await yt(h,e||location.href,o.useProxy);await n(`@font-face{font-family:${i};src:${g};font-style:${m};font-weight:${u};font-stretch:${p};${C?`unicode-range:${C};`:""}}`)}else await n(`@font-face{font-family:${i};src:${h};font-style:${m};font-weight:${u};font-stretch:${p};${C?`unicode-range:${C};`:""}}`)}}}async function St({required:t,usedCodepoints:e,exclude:n=void 0,localFonts:o=[],useProxy:c="",fontStylesheetDomains:s=[],doc:r=document}={}){t instanceof Set||(t=new Set),e instanceof Set||(e=new Set);let a=new Map;for(let l of t){let[d,y,b,w]=String(l).split("__");if(!d)continue;let x=d.toLowerCase(),A=a.get(x)||[];A.push({w:parseInt(y,10),s:b,st:parseInt(w,10)}),a.set(x,A)}function i(l,d,y,b){let w=String(l).toLowerCase();if(!a.has(w))return!1;let x=a.get(w),A=Bt(y),L=Nt(d),U=qt(b),O=A.min!==A.max,v=A.min,P=M=>L.kind==="normal"&&M==="normal"||L.kind!=="normal"&&(M==="italic"||M==="oblique"),N=!1;for(let M of x){let E=O?M.w>=A.min&&M.w<=A.max:M.w===v,T=P(z(M.s)),q=M.st>=U.min&&M.st<=U.max;if(E&&T&&q){N=!0;break}}if(N)return!0;if(!O)for(let M of x){let E=P(z(M.s)),T=M.st>=U.min&&M.st<=U.max;if(Math.abs(v-M.w)<=300&&E&&T)return!0}if(!O&&L.kind==="normal"&&x.some(E=>z(E.s)!=="normal"))for(let E of x){let T=Math.abs(v-E.w)<=300,q=E.st>=U.min&&E.st<=U.max;if(T&&q)return!0}return!1}let u=ut(n),m=Jt(t,n,o,c,s,r);if(f.resource?.has(m))return f.resource.get(m);let p=Xt(t),h=[],C=J;for(let l of r.querySelectorAll("style")){let d=l.textContent||"";for(let y of d.matchAll(C)){let b=(y[2]||y[4]||"").trim();if(!b||I(b))continue;r.querySelector(`link[rel="stylesheet"][href="${b}"]`)||h.push(b)}}let $=[];h.length&&await Promise.all(h.map(l=>new Promise(d=>{if(r.querySelector(`link[rel="stylesheet"][href="${l}"]`))return d(null);let y=r.createElement("link");y.rel="stylesheet",y.href=l,y.setAttribute("data-snapdom","injected-import"),y.onload=()=>d(y),y.onerror=()=>d(null),r.head.appendChild(y),$.push(y)})));let S="",g=Array.from(r.querySelectorAll('link[rel="stylesheet"]')).filter(l=>!!l.href);for(let l of $)try{l.remove()}catch{}for(let l of g)try{if(I(l.href))continue;let d="",y=!1;try{y=new URL(l.href,location.href).origin===location.origin}catch{}if(!y){let w=Array.isArray(s)?s:[];if(!Vt(l.href,p,w))continue}if(y){let w=Array.from(r.styleSheets).find(x=>x.href===l.href);if(w)try{let x=w.cssRules||[];d=Array.from(x).map(A=>A.cssText).join("")}catch{}}if(!d){let w=await F(l.href,{as:"text",useProxy:c});if(w?.ok&&typeof w.data=="string"&&(d=w.data),I(l.href))continue}d=await zt(d,l.href,c);let b="";for(let w of d.match(Gt)||[]){let x=_(w,"font-family"),A=Z(x);if(!A||I(A))continue;let L=_(w,"font-weight","400"),U=_(w,"font-style","normal"),O=_(w,"font-stretch","100%"),v=_(w,"unicode-range"),P=_(w,"src"),N=tt(P,l.href);if(!i(A,U,L,O))continue;let M=ht(v);if(!gt(e,M))continue;let E={family:A,weightSpec:L,styleSpec:U,stretchSpec:O,unicodeRange:v,srcRaw:P,srcUrls:N,href:l.href};if(n&&u(E,M))continue;let T=/url\(/i.test(P)?await yt(w,l.href,c):w;b+=T}b.trim()&&(S+=b)}catch{console.warn("[snapDOM] Failed to process stylesheet:",l.href)}let k={requiredIndex:a,usedCodepoints:e,faceMatchesRequired:i,simpleExcluder:n?ut(n):null,useProxy:c,visitedSheets:new Set,depth:0};for(let l of r.styleSheets)if(!(l.href&&g.some(d=>d.href===l.href)))try{let d=l.href||location.origin+"/";d&&k.visitedSheets.add(d),await wt(l,d,async y=>{S+=y},k)}catch{}try{for(let l of r.fonts||[]){if(!l||!l.family||l.status!=="loaded"||!l._snapdomSrc)continue;let d=String(l.family).replace(/^['"]+|['"]+$/g,"");if(I(d)||!a.has(d.toLowerCase())||n?.families&&n.families.some(b=>String(b).toLowerCase()===d.toLowerCase()))continue;let y=l._snapdomSrc;if(!String(y).startsWith("data:")){if(f.resource?.has(l._snapdomSrc))y=f.resource.get(l._snapdomSrc),f.font?.add(l._snapdomSrc);else if(!f.font?.has(l._snapdomSrc))try{let b=await F(l._snapdomSrc,{as:"dataURL",useProxy:c,silent:!0});if(b.ok&&typeof b.data=="string")y=b.data,f.resource?.set(l._snapdomSrc,y),f.font?.add(l._snapdomSrc);else continue}catch{console.warn("[snapDOM] Failed to fetch dynamic font src:",l._snapdomSrc);continue}}S+=`@font-face{font-family:'${d}';src:url(${y});font-style:${l.style||"normal"};font-weight:${l.weight||"normal"};}`}}catch{}for(let l of o){if(!l||typeof l!="object")continue;let d=String(l.family||"").replace(/^['"]+|['"]+$/g,"");if(!d||I(d)||!a.has(d.toLowerCase())||n?.families&&n.families.some(L=>String(L).toLowerCase()===d.toLowerCase()))continue;let y=l.weight!=null?String(l.weight):"normal",b=l.style!=null?String(l.style):"normal",w=l.stretchPct!=null?`${l.stretchPct}%`:"100%",x=String(l.src||""),A=x;if(!A.startsWith("data:")){if(f.resource?.has(x))A=f.resource.get(x),f.font?.add(x);else if(!f.font?.has(x))try{let L=await F(x,{as:"dataURL",useProxy:c,silent:!0});if(L.ok&&typeof L.data=="string")A=L.data,f.resource?.set(x,A),f.font?.add(x);else continue}catch{console.warn("[snapDOM] Failed to fetch localFonts src:",x);continue}}S+=`@font-face{font-family:'${d}';src:url(${A});font-style:${b};font-weight:${y};font-stretch:${w};}`}return S&&(S=Ht(S),f.resource?.set(m,S)),S}function bt(t,e){let n=new Set,o=new Set;if(!t)return{required:n,usedCodepoints:o};let c=i=>{if(i)for(let u of i)o.add(u.codePointAt(0))},s=i=>{let u=Dt(i.fontFamily);if(u.length)for(let m of u)n.add(`${m}__${X(i.fontWeight)}__${z(i.fontStyle)}__${Wt(i.fontStretch)}`)},r=i=>{s(D(i));for(let u of["::before","::after"]){let m=D(i,u),p=m&&m.content;if(!(!p||p==="none"||p==="normal"))if(s(m),/^["']/.test(p))c(p.slice(1,-1));else{let h=p.match(/\\[0-9A-Fa-f]{1,6}/g);if(h)for(let C of h)try{o.add(parseInt(C.slice(1),16))}catch{}}}};r(t);let a=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT,null);for(;a.nextNode();){let i=a.currentNode;if(i.nodeType===Node.TEXT_NODE){if(e&&i.parentElement&&!e(i.parentElement))continue;c(i.nodeValue||"")}else{if(e&&!e(i))continue;r(i)}}return{required:n,usedCodepoints:o}}async function xt(t,e=2,n=document){try{await n.fonts.ready}catch{}let o=Array.from(t||[]).filter(Boolean);if(o.length===0)return;let c=()=>{let s=n.createElement("div");s.setAttribute("data-snapdom-internal",""),s.style.cssText="position:absolute!important;left:-9999px!important;top:0!important;opacity:0!important;pointer-events:none!important;contain:layout size style;";for(let r of o){let a=n.createElement("span");a.textContent="AaBbGg1234\xC1\xC9\xCD\xD3\xDA\xE7\xF1\u2014\u221E",a.style.fontFamily=`"${r}"`,a.style.fontWeight="700",a.style.fontStyle="italic",a.style.fontSize="32px",a.style.lineHeight="1",a.style.whiteSpace="nowrap",a.style.margin="0",a.style.padding="0",s.appendChild(a)}n.body.appendChild(s),s.offsetWidth,n.body.removeChild(s)};for(let s=0;s<Math.max(1,e);s++)c(),await new Promise(r=>requestAnimationFrame(()=>requestAnimationFrame(r)))}var Ct=["background-image","mask","mask-image","-webkit-mask","-webkit-mask-image","mask-source","mask-box-image-source","mask-border-source","-webkit-mask-box-image-source","border-image","border-image-source"];async function De(t=document,e={}){let{embedFonts:n=!0,useProxy:o=""}=e,c=e.cache??e.cacheOpt??"full";et(c);try{await document.fonts?.ready}catch{}try{Q()}catch{}f.session=f.session||{},f.session.styleCache||(f.session.styleCache=new WeakMap),f.image=f.image||new R(100),f.background=f.background||new R(100);let s=[],r=[];try{if(t&&t.nodeType===1){let i=t.querySelectorAll?Array.from(t.querySelectorAll("*")):[];r=[t,...i],s=[],t.tagName==="IMG"&&t.getAttribute("src")&&s.push(t),s.push(...Array.from(t.querySelectorAll?.("img[src]")||[]))}else t?.querySelectorAll&&(s=Array.from(t.querySelectorAll("img[src]")),r=Array.from(t.querySelectorAll("*")))}catch{}let a=[];for(let i of s){let u=i?.currentSrc||i?.src;if(u&&!f.image.has(u)){let m=Promise.resolve().then(async()=>{let p=await F(u,{as:"dataURL",useProxy:o});p?.ok&&typeof p.data=="string"&&f.image.set(u,p.data)}).catch(()=>{});a.push(m)}}for(let i of r){let u=new Set;for(let m of Ct){let p="";try{p=m==="background-image"&&i?.style?.backgroundImage||D(i).getPropertyValue(m)||""}catch{}if(!p||p==="none")continue;let h=p.match(/url\((?:[^()"']+|"(?:[^"]*)"|'(?:[^']*)')\)/gi)||[];for(let C of h){if(u.has(C))continue;u.add(C);let $=Promise.resolve().then(()=>H(C,{...e,useProxy:o})).catch(()=>{});a.push($)}}}if(n)try{let{required:i,usedCodepoints:u}=bt(t);if(typeof B=="function"?B():!!B){let p=new Set(Array.from(i).map(h=>String(h).split("__")[0]).filter(Boolean));await xt(p,3)}await St({required:i,usedCodepoints:u,exclude:e.excludeFonts,localFonts:e.localFonts,useProxy:e.useProxy??o,fontStylesheetDomains:e.fontStylesheetDomains})}catch{}await Promise.allSettled(a)}export{De as preCache};
|