@zumer/snapdom 2.16.0 → 2.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -89,7 +89,6 @@ await result.download({ format: 'jpg', filename: 'card.jpg' });
89
89
  - [Contributors](#contributors)
90
90
  - [Sponsors](#sponsors)
91
91
  - [Show your support](#show-your-support)
92
- - [Star History](#star-history)
93
92
  - [License](#license)
94
93
 
95
94
  ## Installation
@@ -215,7 +214,38 @@ The full reference lives on **[snapdom.dev/docs](https://snapdom.dev/docs/)**
215
214
  | `snapdom.toWebp(el, options?)` | Returns a WebP image |
216
215
  | `snapdom.download(el, options?)` | Triggers a download |
217
216
 
218
- 📖 **[Full API & every option → snapdom.dev/docs](https://snapdom.dev/docs/)**
217
+ ### Options at a glance
218
+
219
+ All options are optional and can be passed to `snapdom(el, options)` or any shortcut method.
220
+
221
+ | Option | Type | Default | Description |
222
+ | ------ | ---- | ------- | ----------- |
223
+ | `scale` | `number` | `1` | Output scale multiplier |
224
+ | `dpr` | `number` | `devicePixelRatio` | Pixel density of the rasterized output |
225
+ | `width` / `height` | `number` | `null` | Target output size (keeps aspect ratio if only one is set) |
226
+ | `backgroundColor` | `string` | `null` (`#ffffff` for JPEG/WebP) | Background fill |
227
+ | `quality` | `number` | `0.92` | JPEG/WebP quality (0–1) |
228
+ | `format` | `'png' \| 'jpeg' \| 'webp' \| 'svg'` | `'png'` | Format for `download()` |
229
+ | `type` | `string` | `'svg'` | Blob type for `toBlob()` (`'png'`, `'jpeg'`…) |
230
+ | `filename` | `string` | `'snapDOM'` | Download filename |
231
+ | `embedFonts` | `boolean` | `false` | Inline `@font-face` so text renders with your real fonts |
232
+ | `iconFonts` | `string \| RegExp \| array` | `[]` | Icon font families (always embedded) |
233
+ | `localFonts` | `array` | `[]` | Explicit fonts: `{ family, src, weight?, style? }` |
234
+ | `excludeFonts` | `object` | — | Skip fonts by family / domain / subset |
235
+ | `exclude` | `string[]` | `[]` | CSS selectors to leave out of the capture |
236
+ | `filter` | `(el) => boolean` | `null` | Keep-predicate (return `false` to drop a node) |
237
+ | `excludeMode` / `filterMode` | `'hide' \| 'remove'` | `'hide'` | How excluded nodes are handled |
238
+ | `clip` | `'viewport' \| {x, y, width, height}` | `null` | Capture only a region; offscreen content is pruned |
239
+ | `compress` | `boolean` | `true` | Downsample inlined images to their visible resolution |
240
+ | `useProxy` | `string` | `''` | CORS proxy prefix for cross-origin images |
241
+ | `fallbackURL` | `string \| fn` | — | Fallback image for broken `<img>` |
242
+ | `cache` | `'soft' \| 'auto' \| 'full' \| 'disabled'` | `'soft'` | Cache policy between captures |
243
+ | `outerTransforms` | `boolean` | `true` | Keep root translate/rotate in the output |
244
+ | `outerShadows` | `boolean` | `false` | Expand bounds to include root shadows/blur/outline |
245
+ | `fast` | `boolean` | `true` | Skip idle delays for faster capture |
246
+ | `plugins` | `array` | — | Per-capture plugins (override globals by name) |
247
+
248
+ 📖 **[Full API & every option, explained with examples → snapdom.dev/docs](https://snapdom.dev/docs/)**
219
249
 
220
250
  ## Limitations
221
251
 
@@ -305,6 +335,7 @@ For detailed guidelines, see [CONTRIBUTING](https://github.com/zumerlab/snapdom/
305
335
  <a href="https://github.com/airamhr9" title="airamhr9"><img src="https://avatars.githubusercontent.com/u/57371081?v=4&s=100" style="border-radius:10px; width:60px; height:60px; object-fit:cover; margin:5px;" alt="airamhr9"/></a>
306
336
  <a href="https://github.com/jswhisperer" title="jswhisperer"><img src="https://avatars.githubusercontent.com/u/1177690?v=4&s=100" style="border-radius:10px; width:60px; height:60px; object-fit:cover; margin:5px;" alt="jswhisperer"/></a>
307
337
  <a href="https://github.com/K1ender" title="K1ender"><img src="https://avatars.githubusercontent.com/u/146767945?v=4&s=100" style="border-radius:10px; width:60px; height:60px; object-fit:cover; margin:5px;" alt="K1ender"/></a>
338
+ <a href="https://github.com/mosuzi" title="mosuzi"><img src="https://avatars.githubusercontent.com/u/43341701?v=4&s=100" style="border-radius:10px; width:60px; height:60px; object-fit:cover; margin:5px;" alt="mosuzi"/></a>
308
339
  <a href="https://github.com/17biubiu" title="17biubiu"><img src="https://avatars.githubusercontent.com/u/13295895?v=4&s=100" style="border-radius:10px; width:60px; height:60px; object-fit:cover; margin:5px;" alt="17biubiu"/></a>
309
340
  <a href="https://github.com/av01d" title="av01d"><img src="https://avatars.githubusercontent.com/u/6247646?v=4&s=100" style="border-radius:10px; width:60px; height:60px; object-fit:cover; margin:5px;" alt="av01d"/></a>
310
341
  <a href="https://github.com/CHOYSEN" title="CHOYSEN"><img src="https://avatars.githubusercontent.com/u/25995358?v=4&s=100" style="border-radius:10px; width:60px; height:60px; object-fit:cover; margin:5px;" alt="CHOYSEN"/></a>
@@ -320,9 +351,8 @@ For detailed guidelines, see [CONTRIBUTING](https://github.com/zumerlab/snapdom/
320
351
  <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>
321
352
  <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>
322
353
  <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>
354
+ <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>
323
355
  <a href="https://github.com/harshasiddartha" title="harshasiddartha"><img src="https://avatars.githubusercontent.com/u/147021873?v=4&s=100" style="border-radius:10px; width:60px; height:60px; object-fit:cover; margin:5px;" alt="harshasiddartha"/></a>
324
- <a href="https://github.com/karasHou" title="karasHou"><img src="https://avatars.githubusercontent.com/u/27048083?v=4&s=100" style="border-radius:10px; width:60px; height:60px; object-fit:cover; margin:5px;" alt="karasHou"/></a>
325
- <a href="https://github.com/jhbae200" title="jhbae200"><img src="https://avatars.githubusercontent.com/u/20170610?v=4&s=100" style="border-radius:10px; width:60px; height:60px; object-fit:cover; margin:5px;" alt="jhbae200"/></a>
326
356
  </p>
327
357
  <!-- CONTRIBUTORS:END -->
328
358
 
@@ -334,19 +364,19 @@ If you'd like to support this project too, you can [become a sponsor](https://gi
334
364
 
335
365
  ## Show your support
336
366
 
337
- If snapDOM saved you time, a ⭐ on GitHub helps other developers find it — that's the whole ask.
367
+ If SnapDOM saved you time, a ⭐ on GitHub helps other developers find it — that's the whole ask.
338
368
 
339
- Shipping something built with snapDOM? Add the badge to your README:
369
+ Shipping something built with SnapDOM? Add the badge to your README:
340
370
 
341
- [![Built with snapDOM](https://img.shields.io/badge/built%20with-snapDOM-blue)](https://snapdom.dev)
371
+ [![Built with SnapDOM](https://img.shields.io/badge/built%20with-SnapDOM-blue)](https://snapdom.dev)
342
372
 
343
373
  ```md
344
- [![Built with snapDOM](https://img.shields.io/badge/built%20with-snapDOM-blue)](https://snapdom.dev)
374
+ [![Built with SnapDOM](https://img.shields.io/badge/built%20with-SnapDOM-blue)](https://snapdom.dev)
345
375
  ```
346
376
 
347
- ### Projects using snapDOM
377
+ ### Projects using SnapDOM
348
378
 
349
- snapDOM runs in production across 290+ public repositories ([GitHub dependents graph](https://github.com/zumerlab/snapdom/network/dependents)). A few notable ones, each verified from its own `package.json`:
379
+ SnapDOM runs in production across 290+ public repositories ([GitHub dependents graph](https://github.com/zumerlab/snapdom/network/dependents)). A few notable ones, each verified from its own `package.json`:
350
380
 
351
381
  - [LobeHub](https://github.com/lobehub/lobehub) — platform for operating AI agents
352
382
  - [Trilium Notes](https://github.com/TriliumNext/Trilium) — hierarchical personal knowledge base
@@ -359,11 +389,7 @@ snapDOM runs in production across 290+ public repositories ([GitHub dependents g
359
389
  - [ListenBrainz](https://github.com/metabrainz/listenbrainz-server) — music tracker by MetaBrainz
360
390
  - [SnapDIFF](https://zumerlab.com/snapdiff/) — in-browser visual regression testing *(by Zumerlab)*
361
391
 
362
- 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.
363
-
364
- ## Star History
365
-
366
- [![Star History Chart](https://api.star-history.com/svg?repos=zumerlab/snapdom&type=Date)](https://www.star-history.com/#zumerlab/snapdom&Date)
392
+ 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.
367
393
 
368
394
  ## License
369
395
 
package/dist/plugins.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * SnapDOM
3
- * v2.16.0
3
+ * v2.18.0
4
4
  * Author: Juan Martin Muda
5
5
  * License: MIT
6
6
  */
package/dist/preCache.mjs CHANGED
@@ -1,10 +1,10 @@
1
1
  /*
2
2
  * SnapDOM
3
- * v2.16.0
3
+ * v2.18.0
4
4
  * Author: Juan Martin Muda
5
5
  * License: MIT
6
6
  */
7
- var L=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 L(100),background:new L(100),resource:new L(150),defaultStyle:new L(30),baseStyle:new L(50),computedStyle:new WeakMap,measureHints:new WeakMap,font:new Set,session:{styleMap:new Map,styleCache:new WeakMap,nodeMap:new Map}};function et(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 L(50),f.defaultStyle=new L(30),f.image=new L(100),f.background=new L(100),f.resource=new L(150),f.font=new Set;return}default:{f.session.styleMap=new Map,f.session.nodeMap=new Map,f.session.styleCache=new WeakMap;return}}}function V(t){let e=t.match(/url\((['"]?)(.*?)(\1)\)/);if(!e)return null;let n=e[2].trim();return n.startsWith("#")?null:n}function v(t){if(/%[0-9A-Fa-f]{2}/.test(t))return t;try{return encodeURI(t)}catch{return t}}function nt(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 xt(t="[snapDOM]",{ttlMs:e=5*6e4,maxEntries:n=12}={}){let o=new Map,a=0;function s(r,c,i){if(a>=n)return;let u=Date.now();(o.get(c)||0)>u||(o.set(c,u+e),a++,r==="warn"&&console&&console.warn?console.warn(`${t} ${i}`):console&&console.error&&console.error(`${t} ${i}`))}return{warnOnce(r,c){s("warn",r,c)},errorOnce(r,c){s("error",r,c)},reset(){o.clear(),a=0}}}var ot=xt("[snapDOM]",{ttlMs:3*6e4,maxEntries:10}),H=new Map,j=new Map;function kt(t){return/^data:|^blob:|^about:blank$/i.test(t)}function At(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),s=new URL(t,n);if(s.origin===a.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||kt(t)||At(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 $t(t,e){if(!e)return t;if(e.includes("{url}"))return e.replace("{urlRaw}",v(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}${v(t)}`;let n=e.includes("?")?"&":"?";return`${e}${n}url=${encodeURIComponent(t)}`}function rt(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 Lt(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||"",s=e.errorTTL??8e3,r=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[,m="",p=""]=String(t).match(/^data:([^,]*),(.*)$/)||[],h=/;base64/i.test(m)?atob(p):decodeURIComponent(p),y=new Uint8Array([...h].map(S=>S.charCodeAt(0))),C=new Blob([y],{type:(m||"").split(";")[0]||""});return{ok:!0,data:C,status:200,url:t,fromCache:!1,mime:C.type||""}}catch{return{ok:!1,data:null,status:0,url:t,fromCache:!1,reason:"special_url_error"}}if(/^blob:/i.test(t))try{let m=await fetch(t);if(!m.ok)return{ok:!1,data:null,status:m.status,url:t,fromCache:!1,reason:"http_error"};let p=await m.blob(),l=p.type||m.headers.get("content-type")||"";return n==="dataURL"?{ok:!0,data:await rt(p),status:m.status,url:t,fromCache:!1,mime:l}:n==="text"?{ok:!0,data:await p.text(),status:m.status,url:t,fromCache:!1,mime:l}:{ok:!0,data:p,status:m.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=Lt(t,{as:n,timeout:o,useProxy:a,errorTTL:s}),u=j.get(i);if(u&&u.until>Date.now())return{...u.result,fromCache:!0};u&&j.delete(i);let d=H.get(i);if(d)return d;let g=Rt(t,a)?$t(t,a):t,w=e.credentials;if(!w)try{let m=typeof location<"u"&&location.href?location.href:"http://localhost/",p=new URL(t,m);w=typeof location<"u"&&p.origin===location.origin?"include":"omit"}catch{w="omit"}let R=new AbortController,k=setTimeout(()=>R.abort("timeout"),o),b=(async()=>{try{let m=await fetch(g,{signal:R.signal,credentials:w,headers:r});if(!m.ok){let h={ok:!1,data:null,status:m.status,url:g,fromCache:!1,reason:"http_error"};if(s>0&&j.set(i,{until:Date.now()+s,result:h}),!c){let y=`${m.status} ${m.statusText||""}`.trim();ot.warnOnce(`http:${m.status}:${n}:${new URL(t,location?.href??"http://localhost/").origin}`,`HTTP error ${y} while fetching ${n} ${t}`)}return e.onError&&e.onError(h),h}if(n==="text")return{ok:!0,data:await m.text(),status:m.status,url:g,fromCache:!1};let p=await m.blob(),l=p.type||m.headers.get("content-type")||"";return n==="dataURL"?{ok:!0,data:await rt(p),status:m.status,url:g,fromCache:!1,mime:l}:{ok:!0,data:p,status:m.status,url:g,fromCache:!1,mime:l}}catch(m){let p=m&&typeof m=="object"&&"name"in m&&m.name==="AbortError"?String(m.message||"").includes("timeout")?"timeout":"abort":"network",l={ok:!1,data:null,status:0,url:g,fromCache:!1,reason:p};if(!/^blob:/i.test(t)&&s>0&&j.set(i,{until:Date.now()+s,result:l}),!c){let h=`${p}:${n}:${new URL(t,location?.href??"http://localhost/").origin}`,y=p==="timeout"?`Timeout after ${o}ms. Consider increasing timeout or using a proxy for ${t}`:p==="abort"?`Request aborted while fetching ${n} ${t}`:`Network/CORS issue while fetching ${n} ${t}. A proxy may be required`;ot.errorOnce(h,y)}return e.onError&&e.onError(l),l}finally{clearTimeout(k),H.delete(i)}})();return H.set(i,b),b}async function N(t,e={}){if(/^((repeating-)?(linear|radial|conic)-gradient)\(/i.test(t)||t.trim()==="none")return t;let o=V(t);if(!o)return t;let a=nt(o),s=v(a),r=(e.useProxy||"")+"|"+s;if(f.background.has(r)){let c=f.background.get(r);return c?`url("${c}")`:"none"}try{let c=await _(s,{as:"dataURL",useProxy:e.useProxy});return c.ok?(f.background.set(r,c.data),`url("${c.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"]),Mt=["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 Mt){let e=String(t).toLowerCase();at.has(e)||Y.has(e)||it(e)}}function it(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),a={};for(let s of o){if(ct(s))continue;let r=o.getPropertyValue(s);a[s]=r}return e.removeChild(n),f.defaultStyle.set(t,a),a}var Et=/(?:^|-)(animation|transition)(?:-|$)/i,_t=/^(--.+|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,Ft=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"]),st=new Map;function ct(t){let e=st.get(t);if(e===void 0){let n=String(t).toLowerCase();e=Ft.has(n)||_t.test(n)||Et.test(n),st.set(t,e)}return e}function Ut(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 instanceof Element)){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 a=o.get(e);if(!a){let s=Ut(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{}a=r||n(),o.set(e,a)}return a}function z(t){let e=[],n=0,o=0;for(let a=0;a<t.length;a++){let s=t[a];s==="("&&n++,s===")"&&n--,s===","&&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),s=!/safari/i.test(t),r=o&&a&&s,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||r||c||i||u}var It=[/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],Se=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__||{}),Tt=[];function U(t){let e=typeof t=="string"?t:"",n=[...It,...Tt];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 ut=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&&!ut.has(n.toLowerCase()))return n}return""}function Pt(t){if(!t)return[];let e=[];for(let n of t.split(",")){let o=n.trim().replace(/^['"]+|['"]+$/g,"");o&&(ut.has(o.toLowerCase())||e.push(o))}return e}function G(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 X(t){let e=String(t??"normal").trim().toLowerCase();return e.startsWith("italic")?"italic":e.startsWith("oblique")?"oblique":"normal"}function vt(t){let e=String(t??"100%").match(/(\d+(?:\.\d+)?)\s*%/);return e?Math.max(50,Math.min(200,parseFloat(e[1]))):100}function Nt(t){let e=String(t||"400").trim(),n=e.match(/^(\d{2,3})\s+(\d{2,3})$/);if(n){let a=G(n[1]),s=G(n[2]);return{min:Math.min(a,s),max:Math.max(a,s)}}let o=G(e);return{min:o,max:o}}function Dt(t){let e=String(t||"normal").trim().toLowerCase();return e==="italic"?{kind:"italic"}:e.startsWith("oblique")?{kind:"oblique"}:{kind:"normal"}}function Wt(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*%/),a=o?parseFloat(o[1]):100;return{min:a,max:a}}function Bt(t){return!t||typeof t!="string"?"":t.replace(/\s+(variable|vf|v[0-9]+)$/i,"").trim().toLowerCase().replace(/\s+/g,"-")}function qt(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 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,"+"),d=i.toLowerCase().replace(/\s+/g,"-"),g=Bt(i);if(c.includes(u)||c.includes(d)||g&&c.includes(g))return!0}return!1}catch{return!1}}function Vt(t){let e=new Set;for(let n of t||[]){let o=String(n).split("__")[0]?.trim();o&&e.add(o)}return e}function lt(t,e){return t&&t.replace(/url\(\s*(['"]?)([^)'"]+)\1\s*\)/g,(n,o,a)=>{let s=(a||"").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,K=4;async function jt(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 s(c,i,u=0){if(u>K)return console.warn(`[snapDOM] @import depth exceeded (${K}) at ${i}`),c;let d="",g=0,w;for(;w=J.exec(c);){d+=c.slice(g,w.index),g=J.lastIndex;let R=(w[2]||w[4]||"").trim(),k=a(R,i);if(o.has(k)){console.warn(`[snapDOM] Skipping circular @import: ${k}`);continue}o.add(k);let b="";try{let m=await _(k,{as:"text",useProxy:n,silent:!0});m.ok&&typeof m.data=="string"&&(b=m.data)}catch{}b?(b=lt(b,k),b=await s(b,k,u+1),d+=`
8
- /* inlined: ${k} */
7
+ var L=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)}},u={image:new L(100),background:new L(100),resource:new L(150),defaultStyle:new L(30),baseStyle:new L(50),computedStyle:new WeakMap,measureHints:new WeakMap,font:new Set,session:{styleMap:new Map,styleCache:new WeakMap,nodeMap:new Map}};function et(t="soft"){switch(u.session.__counterEpoch=(u.session.__counterEpoch||0)+1,t){case"auto":{u.session.styleMap=new Map,u.session.nodeMap=new Map;return}case"soft":{u.session.styleMap=new Map,u.session.nodeMap=new Map,u.session.styleCache=new WeakMap;return}case"full":return;case"disabled":{u.session.styleMap=new Map,u.session.nodeMap=new Map,u.session.styleCache=new WeakMap,u.computedStyle=new WeakMap,u.measureHints=new WeakMap,u.baseStyle=new L(50),u.defaultStyle=new L(30),u.image=new L(100),u.background=new L(100),u.resource=new L(150),u.font=new Set;return}default:{u.session.styleMap=new Map,u.session.nodeMap=new Map,u.session.styleCache=new WeakMap;return}}}function V(t){let e=t.match(/url\((['"]?)(.*?)(\1)\)/);if(!e)return null;let n=e[2].trim();return n.startsWith("#")?null:n}function v(t){if(/%[0-9A-Fa-f]{2}/.test(t))return t;try{return encodeURI(t)}catch{return t}}function nt(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 kt(t="[snapDOM]",{ttlMs:e=5*6e4,maxEntries:n=12}={}){let o=new Map,i=0;function r(s,a,l){if(i>=n)return;let f=Date.now();(o.get(a)||0)>f||(o.set(a,f+e),i++,s==="warn"&&console&&console.warn?console.warn(`${t} ${l}`):console&&console.error&&console.error(`${t} ${l}`))}return{warnOnce(s,a){r("warn",s,a)},errorOnce(s,a){r("error",s,a)},reset(){o.clear(),i=0}}}var ot=kt("[snapDOM]",{ttlMs:3*6e4,maxEntries:10}),H=new Map,j=new Map;function At(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,i=new URL(o||".",n),r=new URL(t,n);if(r.origin===i.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||At(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}",v(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}${v(t)}`;let n=e.includes("?")?"&":"?";return`${e}${n}url=${encodeURIComponent(t)}`}function rt(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,i=e.useProxy||"",r=e.errorTTL??8e3,s=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[,m="",h=""]=String(t).match(/^data:([^,]*),(.*)$/)||[],g=/;base64/i.test(m)?atob(h):decodeURIComponent(h),y=new Uint8Array([...g].map(S=>S.charCodeAt(0))),C=new Blob([y],{type:(m||"").split(";")[0]||""});return{ok:!0,data:C,status:200,url:t,fromCache:!1,mime:C.type||""}}catch{return{ok:!1,data:null,status:0,url:t,fromCache:!1,reason:"special_url_error"}}if(/^blob:/i.test(t))try{let m=await fetch(t);if(!m.ok)return{ok:!1,data:null,status:m.status,url:t,fromCache:!1,reason:"http_error"};let h=await m.blob(),c=h.type||m.headers.get("content-type")||"";return n==="dataURL"?{ok:!0,data:await rt(h),status:m.status,url:t,fromCache:!1,mime:c}:n==="text"?{ok:!0,data:await h.text(),status:m.status,url:t,fromCache:!1,mime:c}:{ok:!0,data:h,status:m.status,url:t,fromCache:!1,mime:c}}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 l=Mt(t,{as:n,timeout:o,useProxy:i,errorTTL:r}),f=j.get(l);if(f&&f.until>Date.now())return{...f.result,fromCache:!0};f&&j.delete(l);let d=H.get(l);if(d)return d;let p=$t(t,i)?Lt(t,i):t,w=e.credentials;if(!w)try{let m=typeof location<"u"&&location.href?location.href:"http://localhost/",h=new URL(t,m);w=typeof location<"u"&&h.origin===location.origin?"include":"omit"}catch{w="omit"}let k=new AbortController,A=setTimeout(()=>k.abort("timeout"),o),b=(async()=>{try{let m=await fetch(p,{signal:k.signal,credentials:w,headers:s});if(!m.ok){let g={ok:!1,data:null,status:m.status,url:p,fromCache:!1,reason:"http_error"};if(r>0&&j.set(l,{until:Date.now()+r,result:g}),!a){let y=`${m.status} ${m.statusText||""}`.trim();ot.warnOnce(`http:${m.status}:${n}:${new URL(t,location?.href??"http://localhost/").origin}`,`HTTP error ${y} while fetching ${n} ${t}`)}return e.onError&&e.onError(g),g}if(n==="text")return{ok:!0,data:await m.text(),status:m.status,url:p,fromCache:!1};let h=await m.blob(),c=h.type||m.headers.get("content-type")||"";return n==="dataURL"?{ok:!0,data:await rt(h),status:m.status,url:p,fromCache:!1,mime:c}:{ok:!0,data:h,status:m.status,url:p,fromCache:!1,mime:c}}catch(m){let h=m&&typeof m=="object"&&"name"in m&&m.name==="AbortError"?String(m.message||"").includes("timeout")?"timeout":"abort":"network",c={ok:!1,data:null,status:0,url:p,fromCache:!1,reason:h};if(!/^blob:/i.test(t)&&r>0&&j.set(l,{until:Date.now()+r,result:c}),!a){let g=`${h}:${n}:${new URL(t,location?.href??"http://localhost/").origin}`,y=h==="timeout"?`Timeout after ${o}ms. Consider increasing timeout or using a proxy for ${t}`:h==="abort"?`Request aborted while fetching ${n} ${t}`:`Network/CORS issue while fetching ${n} ${t}. A proxy may be required`;ot.errorOnce(g,y)}return e.onError&&e.onError(c),c}finally{clearTimeout(A),H.delete(l)}})();return H.set(l,b),b}async function N(t,e={}){if(/^((repeating-)?(linear|radial|conic)-gradient)\(/i.test(t)||t.trim()==="none")return t;let o=V(t);if(!o)return t;let i=nt(o),r=v(i),s=(e.useProxy||"")+"|"+r;if(u.background.has(s)){let a=u.background.get(s);return a?`url("${a}")`:"none"}try{let a=await _(r,{as:"dataURL",useProxy:e.useProxy});return a.ok?(u.background.set(s,a.data),`url("${a.data}")`):(u.background.set(s,null),"none")}catch{return u.background.set(s,null),"none"}}var it=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();it.has(e)||Y.has(e)||at(e)}}function at(t){if(t=String(t).toLowerCase(),Y.has(t)){let r={};return u.defaultStyle.set(t,r),r}if(u.defaultStyle.has(t))return u.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),i={};for(let r of o){if(ct(r))continue;let s=o.getPropertyValue(r);i[r]=s}return e.removeChild(n),u.defaultStyle.set(t,i),i}var _t=/(?:^|-)(animation|transition)(?:-|$)/i,Ft=/^(--.+|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,Ut=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"]),st=new Map;function ct(t){let e=st.get(t);if(e===void 0){let n=String(t).toLowerCase();e=Ut.has(n)||Ft.test(n)||_t.test(n),st.set(t,e)}return e}function It(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 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=u.computedStyle.get(t);o||(o=new Map,u.computedStyle.set(t,o));let i=o.get(e);if(!i){let r=It(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{}i=s||n(),o.set(e,i)}return i}function z(t){let e=[],n=0,o=0;for(let i=0;i<t.length;i++){let r=t[i];r==="("&&n++,r===")"&&n--,r===","&&n===0&&(e.push(t.slice(o,i).trim()),o=i+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),i=/mobile/i.test(t),r=!/safari/i.test(t),s=o&&i&&r,a=/(micromessenger|wxwork|wecom|windowswechat|macwechat)/i.test(t),l=/(baiduboxapp|baidubrowser|baidusearch|baiduboxlite)/i.test(e),f=/ipad|iphone|ipod/.test(e)&&o;return n||s||a||l||f}var Tt=[/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],xe=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__||{}),Ot=[];function U(t){let e=typeof t=="string"?t:"",n=[...Tt,...Ot];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 mt=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&&!mt.has(n.toLowerCase()))return n}return""}function vt(t){if(!t)return[];let e=[];for(let n of t.split(",")){let o=n.trim().replace(/^['"]+|['"]+$/g,"");o&&(mt.has(o.toLowerCase())||e.push(o))}return e}function G(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 X(t){let e=String(t??"normal").trim().toLowerCase();return e.startsWith("italic")?"italic":e.startsWith("oblique")?"oblique":"normal"}function Nt(t){let e=String(t??"100%").match(/(\d+(?:\.\d+)?)\s*%/);return e?Math.max(50,Math.min(200,parseFloat(e[1]))):100}function Dt(t){let e=String(t||"400").trim(),n=e.match(/^(\d{2,3})\s+(\d{2,3})$/);if(n){let i=G(n[1]),r=G(n[2]);return{min:Math.min(i,r),max:Math.max(i,r)}}let o=G(e);return{min:o,max:o}}function Wt(t){let e=String(t||"normal").trim().toLowerCase();return e==="italic"?{kind:"italic"}:e.startsWith("oblique")?{kind:"oblique"}:{kind:"normal"}}function Bt(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*%/),i=o?parseFloat(o[1]):100;return{min:i,max:i}}function qt(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 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(l=>r.endsWith(l))||n.some(l=>r===l.toLowerCase()||r.endsWith("."+l.toLowerCase())))return!0;let a=(o.pathname+o.search).toLowerCase();if(/\bfont(s)?\b/.test(a)||/\.woff2?(\b|$)/.test(a)||Pt.some(l=>a.includes(l)))return!0;for(let l of e){let f=l.toLowerCase().replace(/\s+/g,"+"),d=l.toLowerCase().replace(/\s+/g,"-"),p=qt(l);if(a.includes(f)||a.includes(d)||p&&a.includes(p))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 lt(t,e){return t&&t.replace(/url\(\s*(['"]?)([^)'"]+)\1\s*\)/g,(n,o,i)=>{let r=(i||"").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,K=4;async function zt(t,e,n){if(!t)return t;let o=new Set;function i(a,l){try{return new URL(a,l||location.href).href}catch{return a}}async function r(a,l,f=0){if(f>K)return console.warn(`[snapDOM] @import depth exceeded (${K}) at ${l}`),a;let d="",p=0,w;for(;w=J.exec(a);){d+=a.slice(p,w.index),p=J.lastIndex;let k=(w[2]||w[4]||"").trim(),A=i(k,l);if(o.has(A)){console.warn(`[snapDOM] Skipping circular @import: ${A}`);continue}o.add(A);let b="";try{let m=await _(A,{as:"text",useProxy:n,silent:!0});m.ok&&typeof m.data=="string"&&(b=m.data)}catch{}b?(b=lt(b,A),b=await r(b,A,f+1),d+=`
8
+ /* inlined: ${A} */
9
9
  ${b}
10
- `):d+=w[0]}return d+=c.slice(g),d}let r=lt(t,e||location.href);return r=await s(r,e||location.href,0),r}var mt=/url\((["']?)([^"')]+)\1\)/g,zt=/@font-face[^{}]*\{[^}]*\}/g;function dt(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 s=a[1],r=a[2],c=i=>{if(!i.includes("?"))return parseInt(i,16);let u=parseInt(i.replace(/\?/g,"0"),16),d=parseInt(i.replace(/\?/g,"F"),16);return[u,d]};if(r){let i=c(s),u=c(r),d=Array.isArray(i)?i[0]:i,g=Array.isArray(u)?u[1]:u;e.push([Math.min(d,g),Math.max(d,g)])}else{let i=c(s);Array.isArray(i)?e.push([i[0],i[1]]):e.push([i,i])}}return e}function pt(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(mt)){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 ht(t,e,n=""){let o=t;for(let a of t.matchAll(mt)){let s=V(a[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(!U(r)){if(f.resource?.has(r)){f.font?.add(r),o=o.replace(a[0],`url(${f.resource.get(r)})`);continue}try{let c=await _(r,{as:"dataURL",useProxy:n,silent:!0});if(c.ok&&typeof c.data=="string"){let i=c.data;f.resource?.set(r,i),f.font?.add(r),o=o.replace(a[0],`url(${i})`)}}catch{console.warn("[snapDOM] Failed to fetch font resource:",r)}}}return o}function Gt(t){if(!t.length)return null;let e=(c,i)=>t.some(([u,d])=>!(d<c||u>i)),n=e(0,255)||e(305,305),o=e(256,591)||e(7680,7935),a=e(880,1023),s=e(1024,1279);return e(7840,7929)||e(258,259)||e(416,417)||e(431,432)?"vietnamese":s?"cyrillic":a?"greek":o?"latin-ext":n?"latin":null}function ft(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,s)=>{if(e.size&&e.has(a.family.toLowerCase()))return!0;if(n.size)for(let r of a.srcUrls)try{if(n.has(new URL(r).host.toLowerCase()))return!0}catch{}if(o.size){let r=Gt(s);if(r&&o.has(r))return!0}return!1}}function Xt(t){if(!t)return t;let e=/@font-face[^{}]*\{[^}]*\}/gi,n=new Set,o=[];for(let s of t.match(e)||[]){let r=s.match(/font-family:\s*([^;]+);/i)?.[1]||"",c=Z(r),i=(s.match(/font-weight:\s*([^;]+);/i)?.[1]||"400").trim(),u=(s.match(/font-style:\s*([^;]+);/i)?.[1]||"normal").trim(),d=(s.match(/font-stretch:\s*([^;]+);/i)?.[1]||"100%").trim(),g=(s.match(/unicode-range:\s*([^;]+);/i)?.[1]||"").trim(),w=(s.match(/src\s*:\s*([^;}]+)[;}]/i)?.[1]||"").trim(),R=tt(w,location.href),k=R.length?R.map(m=>String(m).toLowerCase()).sort().join("|"):w.toLowerCase(),b=[String(c||"").toLowerCase(),i,u,d,g.toLowerCase(),k].join("|");n.has(b)||(n.add(b),o.push(s))}if(o.length===0)return t;let a=0;return t.replace(e,()=>o[a++]||"")}function Kt(t,e,n,o,a){let s=Array.from(t||[]).sort().join("|"),r=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()}):"",c=(n||[]).map(d=>`${(d.family||"").toLowerCase()}::${d.weight||"normal"}::${d.style||"normal"}::${d.src||""}`).sort().join("|"),i=o||"",u=(a||[]).map(d=>String(d).toLowerCase()).sort().join("|");return`fonts-embed-css::req=${s}::ex=${r}::lf=${c}::px=${i}::fd=${u}`}async function gt(t,e,n,o){let a;try{a=t.cssRules||[]}catch{return}let s=(r,c)=>{try{return new URL(r,c||location.href).href}catch{return r}};for(let r of a){if(r.type===CSSRule.IMPORT_RULE&&r.styleSheet){let c=r.href?s(r.href,e):e;if(o.depth>=K){console.warn(`[snapDOM] CSSOM import depth exceeded (${K}) 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 gt(r.styleSheet,c,n,i);continue}if(r.type===CSSRule.FONT_FACE_RULE){let c=(r.style.getPropertyValue("font-family")||"").trim(),i=Z(c);if(!i||U(i))continue;let u=(r.style.getPropertyValue("font-weight")||"400").trim(),d=(r.style.getPropertyValue("font-style")||"normal").trim(),g=(r.style.getPropertyValue("font-stretch")||"100%").trim(),w=(r.style.getPropertyValue("src")||"").trim(),R=(r.style.getPropertyValue("unicode-range")||"").trim();if(!o.faceMatchesRequired(i,d,u,g))continue;let k=dt(R);if(!pt(o.usedCodepoints,k))continue;let b={family:i,weightSpec:u,styleSpec:d,stretchSpec:g,unicodeRange:R,srcRaw:w,srcUrls:tt(w,e||location.href),href:e||location.href};if(o.simpleExcluder&&o.simpleExcluder(b,k))continue;if(/url\(/i.test(w)){let m=await ht(w,e||location.href,o.useProxy);await n(`@font-face{font-family:${i};src:${m};font-style:${d};font-weight:${u};font-stretch:${g};${R?`unicode-range:${R};`:""}}`)}else await n(`@font-face{font-family:${i};src:${w};font-style:${d};font-weight:${u};font-stretch:${g};${R?`unicode-range:${R};`:""}}`)}}}async function yt({required:t,usedCodepoints:e,exclude:n=void 0,localFonts:o=[],useProxy:a="",fontStylesheetDomains:s=[],doc:r=document}={}){t instanceof Set||(t=new Set),e instanceof Set||(e=new Set);let c=new Map;for(let l of t){let[h,y,C,S]=String(l).split("__");if(!h)continue;let x=h.toLowerCase(),A=c.get(x)||[];A.push({w:parseInt(y,10),s:C,st:parseInt(S,10)}),c.set(x,A)}function i(l,h,y,C){let S=String(l).toLowerCase();if(!c.has(S))return!1;let x=c.get(S),A=Nt(y),M=Dt(h),F=Wt(C),T=A.min!==A.max,O=A.min,P=$=>M.kind==="normal"&&$==="normal"||M.kind!=="normal"&&($==="italic"||$==="oblique"),B=!1;for(let $ of x){let E=T?$.w>=A.min&&$.w<=A.max:$.w===O,I=P(X($.s)),q=$.st>=F.min&&$.st<=F.max;if(E&&I&&q){B=!0;break}}if(B)return!0;if(!T)for(let $ of x){let E=P(X($.s)),I=$.st>=F.min&&$.st<=F.max;if(Math.abs(O-$.w)<=300&&E&&I)return!0}if(!T&&M.kind==="normal"&&x.some(E=>X(E.s)!=="normal"))for(let E of x){let I=Math.abs(O-E.w)<=300,q=E.st>=F.min&&E.st<=F.max;if(I&&q)return!0}return!1}let u=ft(n),d=Kt(t,n,o,a,s);if(f.resource?.has(d))return f.resource.get(d);let g=Vt(t),w=[],R=J;for(let l of r.querySelectorAll("style")){let h=l.textContent||"";for(let y of h.matchAll(R)){let C=(y[2]||y[4]||"").trim();if(!C||U(C))continue;r.querySelector(`link[rel="stylesheet"][href="${C}"]`)||w.push(C)}}let k=[];w.length&&await Promise.all(w.map(l=>new Promise(h=>{if(r.querySelector(`link[rel="stylesheet"][href="${l}"]`))return h(null);let y=r.createElement("link");y.rel="stylesheet",y.href=l,y.setAttribute("data-snapdom","injected-import"),y.onload=()=>h(y),y.onerror=()=>h(null),r.head.appendChild(y),k.push(y)})));let b="",m=Array.from(r.querySelectorAll('link[rel="stylesheet"]')).filter(l=>!!l.href);for(let l of k)try{l.remove()}catch{}for(let l of m)try{if(U(l.href))continue;let h="",y=!1;try{y=new URL(l.href,location.href).origin===location.origin}catch{}if(!y){let S=Array.isArray(s)?s:[];if(!qt(l.href,g,S))continue}if(y){let S=Array.from(r.styleSheets).find(x=>x.href===l.href);if(S)try{let x=S.cssRules||[];h=Array.from(x).map(A=>A.cssText).join("")}catch{}}if(!h){let S=await _(l.href,{as:"text",useProxy:a});if(S?.ok&&typeof S.data=="string"&&(h=S.data),U(l.href))continue}h=await jt(h,l.href,a);let C="";for(let S of h.match(zt)||[]){let x=(S.match(/font-family:\s*([^;]+);/i)?.[1]||"").trim(),A=Z(x);if(!A||U(A))continue;let M=(S.match(/font-weight:\s*([^;]+);/i)?.[1]||"400").trim(),F=(S.match(/font-style:\s*([^;]+);/i)?.[1]||"normal").trim(),T=(S.match(/font-stretch:\s*([^;]+);/i)?.[1]||"100%").trim(),O=(S.match(/unicode-range:\s*([^;]+);/i)?.[1]||"").trim(),P=(S.match(/src\s*:\s*([^;}]+)[;}]/i)?.[1]||"").trim(),B=tt(P,l.href);if(!i(A,F,M,T))continue;let $=dt(O);if(!pt(e,$))continue;let E={family:A,weightSpec:M,styleSpec:F,stretchSpec:T,unicodeRange:O,srcRaw:P,srcUrls:B,href:l.href};if(n&&u(E,$))continue;let I=/url\(/i.test(P)?await ht(S,l.href,a):S;C+=I}C.trim()&&(b+=C)}catch{console.warn("[snapDOM] Failed to process stylesheet:",l.href)}let p={requiredIndex:c,usedCodepoints:e,faceMatchesRequired:i,simpleExcluder:n?ft(n):null,useProxy:a,visitedSheets:new Set,depth:0};for(let l of r.styleSheets)if(!(l.href&&m.some(h=>h.href===l.href)))try{let h=l.href||location.origin+"/";h&&p.visitedSheets.add(h),await gt(l,h,async y=>{b+=y},p)}catch{}try{for(let l of r.fonts||[]){if(!l||!l.family||l.status!=="loaded"||!l._snapdomSrc)continue;let h=String(l.family).replace(/^['"]+|['"]+$/g,"");if(U(h)||!c.has(h.toLowerCase())||n?.families&&n.families.some(C=>String(C).toLowerCase()===h.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 C=await _(l._snapdomSrc,{as:"dataURL",useProxy:a,silent:!0});if(C.ok&&typeof C.data=="string")y=C.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}}b+=`@font-face{font-family:'${h}';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 h=String(l.family||"").replace(/^['"]+|['"]+$/g,"");if(!h||U(h)||!c.has(h.toLowerCase())||n?.families&&n.families.some(M=>String(M).toLowerCase()===h.toLowerCase()))continue;let y=l.weight!=null?String(l.weight):"normal",C=l.style!=null?String(l.style):"normal",S=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 M=await _(x,{as:"dataURL",useProxy:a,silent:!0});if(M.ok&&typeof M.data=="string")A=M.data,f.resource?.set(x,A),f.font?.add(x);else continue}catch{console.warn("[snapDOM] Failed to fetch localFonts src:",x);continue}}b+=`@font-face{font-family:'${h}';src:url(${A});font-style:${C};font-weight:${y};font-stretch:${S};}`}return b&&(b=Xt(b),f.resource?.set(d,b)),b}function wt(t){let e=new Set;if(!t)return e;let n=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT,null),o=r=>{let c=Pt(r.fontFamily);if(c.length)for(let i of c){let u=(d,g,w)=>`${i}__${G(d)}__${X(g)}__${vt(w)}`;e.add(u(r.fontWeight,r.fontStyle,r.fontStretch))}};o(getComputedStyle(t));let a=getComputedStyle(t,"::before");a&&a.content&&a.content!=="none"&&o(a);let s=getComputedStyle(t,"::after");for(s&&s.content&&s.content!=="none"&&o(s);n.nextNode();){let r=n.currentNode,c=getComputedStyle(r);o(c);let i=getComputedStyle(r,"::before");i&&i.content&&i.content!=="none"&&o(i);let u=getComputedStyle(r,"::after");u&&u.content&&u.content!=="none"&&o(u)}return e}function St(t){let e=new Set,n=a=>{if(a)for(let s of a)e.add(s.codePointAt(0))},o=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT,null);for(;o.nextNode();){let a=o.currentNode;if(a.nodeType===Node.TEXT_NODE)n(a.nodeValue||"");else if(a.nodeType===Node.ELEMENT_NODE){let s=a;for(let r of["::before","::after"]){let i=getComputedStyle(s,r)?.getPropertyValue("content");if(!(!i||i==="none"))if(/^"/.test(i)||/^'/.test(i))n(i.slice(1,-1));else{let u=i.match(/\\[0-9A-Fa-f]{1,6}/g);if(u)for(let d of u)try{e.add(parseInt(d.slice(1),16))}catch{}}}}}return e}async function bt(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 s=n.createElement("div");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 c=n.createElement("span");c.textContent="AaBbGg1234\xC1\xC9\xCD\xD3\xDA\xE7\xF1\u2014\u221E",c.style.fontFamily=`"${r}"`,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",s.appendChild(c)}n.body.appendChild(s),s.offsetWidth,n.body.removeChild(s)};for(let s=0;s<Math.max(1,e);s++)a(),await new Promise(r=>requestAnimationFrame(()=>requestAnimationFrame(r)))}async function Ct(t,e,n,o={}){let a=[[t,e]],s=["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"],r=["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"],c=["background-position","background-position-x","background-position-y","background-size","background-repeat","background-origin","background-clip","background-attachment","background-blend-mode"],i=["border-image-slice","border-image-width","border-image-outset","border-image-repeat"];for(;a.length;){let[u,d]=a.shift();if(!d)continue;let g=n.get(u)||D(u);n.has(u)||n.set(u,g);let w=(()=>{let m=g.getPropertyValue("border-image"),p=g.getPropertyValue("border-image-source");return m&&m!=="none"||p&&p!=="none"})(),R=g.getPropertyValue("background-image"),k=g.getPropertyValue("background-color");if(R&&R!=="none"||k&&k!=="rgba(0, 0, 0, 0)"&&k!=="transparent"||/url\s*\(|gradient\s*\(/i.test(g.getPropertyValue("background")||""))for(let m of c){let p=g.getPropertyValue(m);p&&d.style.setProperty(m,p)}for(let m of s){let p=g.getPropertyValue(m);if(m==="background-image"&&(!p||p==="none")){let y=g.getPropertyValue("background");y&&/url\s*\(/.test(y)&&(p=z(y).filter(C=>/url\s*\(/.test(C)).join(", ")||p)}if(!p||p==="none")continue;let l=z(p),h=await Promise.all(l.map(y=>N(y,o)));h.some(y=>y&&y!=="none"&&!/^url\(undefined/.test(y))&&d.style.setProperty(m,h.join(", "))}for(let m of r){let p=g.getPropertyValue(m);!p||p==="initial"||d.style.setProperty(m,p)}if(w)for(let m of i){let p=g.getPropertyValue(m);!p||p==="initial"||d.style.setProperty(m,p)}if(u.shadowRoot){let m=Array.from(u.shadowRoot.children).filter(l=>l.tagName!=="STYLE"),p=Array.from(d.children).filter(l=>!l.dataset?.snapdomPseudo&&!(l.tagName==="STYLE"&&l.dataset?.sd));for(let l=0;l<Math.min(m.length,p.length);l++)a.push([m[l],p[l]])}else{let m=f.session.nodeMap;for(let p of d.children){let l=m.get(p);l&&a.push([l,p])}}}}async function Te(t=document,e={}){let{embedFonts:n=!0,useProxy:o=""}=e,a=e.cache??e.cacheOpt??"full";et(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 L(100),f.background=f.background||new L(100);try{await Ct(t,void 0,f.session.styleCache,{useProxy:o})}catch{}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 c=[];for(let i of s){let u=i?.currentSrc||i?.src;if(u&&!f.image.has(u)){let d=Promise.resolve().then(async()=>{let g=await _(u,{as:"dataURL",useProxy:o});g?.ok&&typeof g.data=="string"&&f.image.set(u,g.data)}).catch(()=>{});c.push(d)}}for(let i of r){let u="";try{u=i?.style?.backgroundImage||"",(!u||u==="none")&&(u=D(i).backgroundImage)}catch{}if(u&&u!=="none"){let d=u.match(/url\((?:[^()"']+|"(?:[^"]*)"|'(?:[^']*)')\)/gi)||[];for(let g of d){let w=Promise.resolve().then(()=>N(g,{...e,useProxy:o})).catch(()=>{});c.push(w)}}}if(n)try{let i=wt(t),u=St(t);if(typeof W=="function"?W():!!W){let g=new Set(Array.from(i).map(w=>String(w).split("__")[0]).filter(Boolean));await bt(g,3)}await yt({required:i,usedCodepoints:u,exclude:e.excludeFonts,localFonts:e.localFonts,useProxy:e.useProxy??o,fontStylesheetDomains:e.fontStylesheetDomains})}catch{}await Promise.allSettled(c)}export{Te as preCache};
10
+ `):d+=w[0]}return d+=a.slice(p),d}let s=lt(t,e||location.href);return s=await r(s,e||location.href,0),s}var dt=/url\((["']?)([^"')]+)\1\)/g,Gt=/@font-face[^{}]*\{[^}]*\}/g;function pt(t){if(!t)return[];let e=[],n=t.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n){let i=o.match(/^U\+([0-9A-Fa-f?]+)(?:-([0-9A-Fa-f?]+))?$/);if(!i)continue;let r=i[1],s=i[2],a=l=>{if(!l.includes("?"))return parseInt(l,16);let f=parseInt(l.replace(/\?/g,"0"),16),d=parseInt(l.replace(/\?/g,"F"),16);return[f,d]};if(s){let l=a(r),f=a(s),d=Array.isArray(l)?l[0]:l,p=Array.isArray(f)?f[1]:f;e.push([Math.min(d,p),Math.max(d,p)])}else{let l=a(r);Array.isArray(l)?e.push([l[0],l[1]]):e.push([l,l])}}return e}function ht(t,e){if(!e.length||!t||t.size===0)return!0;for(let n of t)for(let[o,i]of e)if(n>=o&&n<=i)return!0;return!1}function tt(t,e){let n=[];if(!t)return n;for(let o of t.matchAll(dt)){let i=(o[2]||"").trim();if(!(!i||i.startsWith("data:"))){if(!/^https?:/i.test(i))try{i=new URL(i,e||location.href).href}catch{}n.push(i)}}return n}async function gt(t,e,n=""){let o=t;for(let i of t.matchAll(dt)){let r=V(i[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(!U(s)){if(u.resource?.has(s)){u.font?.add(s),o=o.replace(i[0],`url(${u.resource.get(s)})`);continue}try{let a=await _(s,{as:"dataURL",useProxy:n,silent:!0});if(a.ok&&typeof a.data=="string"){let l=a.data;u.resource?.set(s,l),u.font?.add(s),o=o.replace(i[0],`url(${l})`)}}catch{console.warn("[snapDOM] Failed to fetch font resource:",s)}}}return o}function Xt(t){if(!t.length)return null;let e=(a,l)=>t.some(([f,d])=>!(d<a||f>l)),n=e(0,255)||e(305,305),o=e(256,591)||e(7680,7935),i=e(880,1023),r=e(1024,1279);return e(7840,7929)||e(258,259)||e(416,417)||e(431,432)?"vietnamese":r?"cyrillic":i?"greek":o?"latin-ext":n?"latin":null}function ft(t={}){let e=new Set((t.families||[]).map(i=>String(i).toLowerCase())),n=new Set((t.domains||[]).map(i=>String(i).toLowerCase())),o=new Set((t.subsets||[]).map(i=>String(i).toLowerCase()));return(i,r)=>{if(e.size&&e.has(i.family.toLowerCase()))return!0;if(n.size)for(let s of i.srcUrls)try{if(n.has(new URL(s).host.toLowerCase()))return!0}catch{}if(o.size){let s=Xt(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]||"",a=Z(s),l=(r.match(/font-weight:\s*([^;]+);/i)?.[1]||"400").trim(),f=(r.match(/font-style:\s*([^;]+);/i)?.[1]||"normal").trim(),d=(r.match(/font-stretch:\s*([^;]+);/i)?.[1]||"100%").trim(),p=(r.match(/unicode-range:\s*([^;]+);/i)?.[1]||"").trim(),w=(r.match(/src\s*:\s*([^;}]+)[;}]/i)?.[1]||"").trim(),k=tt(w,location.href),A=k.length?k.map(m=>String(m).toLowerCase()).sort().join("|"):w.toLowerCase(),b=[String(a||"").toLowerCase(),l,f,d,p.toLowerCase(),A].join("|");n.has(b)||(n.add(b),o.push(r))}if(o.length===0)return t;let i=0;return t.replace(e,()=>o[i++]||"")}var ut=new WeakMap,Ht=0;function Yt(t){let e=ut.get(t);return e===void 0&&(e=Ht++,ut.set(t,e)),e}function Qt(t,e,n,o,i,r){let s=Array.from(t||[]).sort().join("|"),a=e?JSON.stringify({families:(e.families||[]).map(w=>String(w).toLowerCase()).sort(),domains:(e.domains||[]).map(w=>String(w).toLowerCase()).sort(),subsets:(e.subsets||[]).map(w=>String(w).toLowerCase()).sort()}):"",l=(n||[]).map(w=>`${(w.family||"").toLowerCase()}::${w.weight||"normal"}::${w.style||"normal"}::${w.src||""}`).sort().join("|"),f=o||"",d=(i||[]).map(w=>String(w).toLowerCase()).sort().join("|"),p=Yt(r||document);return`fonts-embed-css::req=${s}::ex=${a}::lf=${l}::px=${f}::fd=${d}::doc=${p}`}async function yt(t,e,n,o){let i;try{i=t.cssRules||[]}catch{return}let r=(s,a)=>{try{return new URL(s,a||location.href).href}catch{return s}};for(let s of i){if(s.type===CSSRule.IMPORT_RULE&&s.styleSheet){let a=s.href?r(s.href,e):e;if(o.depth>=K){console.warn(`[snapDOM] CSSOM import depth exceeded (${K}) at ${a}`);continue}if(a&&o.visitedSheets.has(a)){console.warn(`[snapDOM] Skipping circular CSSOM import: ${a}`);continue}a&&o.visitedSheets.add(a);let l={...o,depth:(o.depth||0)+1};await yt(s.styleSheet,a,n,l);continue}if(s.type===CSSRule.FONT_FACE_RULE){let a=(s.style.getPropertyValue("font-family")||"").trim(),l=Z(a);if(!l||U(l))continue;let f=(s.style.getPropertyValue("font-weight")||"400").trim(),d=(s.style.getPropertyValue("font-style")||"normal").trim(),p=(s.style.getPropertyValue("font-stretch")||"100%").trim(),w=(s.style.getPropertyValue("src")||"").trim(),k=(s.style.getPropertyValue("unicode-range")||"").trim();if(!o.faceMatchesRequired(l,d,f,p))continue;let A=pt(k);if(!ht(o.usedCodepoints,A))continue;let b={family:l,weightSpec:f,styleSpec:d,stretchSpec:p,unicodeRange:k,srcRaw:w,srcUrls:tt(w,e||location.href),href:e||location.href};if(o.simpleExcluder&&o.simpleExcluder(b,A))continue;if(/url\(/i.test(w)){let m=await gt(w,e||location.href,o.useProxy);await n(`@font-face{font-family:${l};src:${m};font-style:${d};font-weight:${f};font-stretch:${p};${k?`unicode-range:${k};`:""}}`)}else await n(`@font-face{font-family:${l};src:${w};font-style:${d};font-weight:${f};font-stretch:${p};${k?`unicode-range:${k};`:""}}`)}}}async function wt({required:t,usedCodepoints:e,exclude:n=void 0,localFonts:o=[],useProxy:i="",fontStylesheetDomains:r=[],doc:s=document}={}){t instanceof Set||(t=new Set),e instanceof Set||(e=new Set);let a=new Map;for(let c of t){let[g,y,C,S]=String(c).split("__");if(!g)continue;let x=g.toLowerCase(),R=a.get(x)||[];R.push({w:parseInt(y,10),s:C,st:parseInt(S,10)}),a.set(x,R)}function l(c,g,y,C){let S=String(c).toLowerCase();if(!a.has(S))return!1;let x=a.get(S),R=Dt(y),M=Wt(g),F=Bt(C),T=R.min!==R.max,O=R.min,P=$=>M.kind==="normal"&&$==="normal"||M.kind!=="normal"&&($==="italic"||$==="oblique"),B=!1;for(let $ of x){let E=T?$.w>=R.min&&$.w<=R.max:$.w===O,I=P(X($.s)),q=$.st>=F.min&&$.st<=F.max;if(E&&I&&q){B=!0;break}}if(B)return!0;if(!T)for(let $ of x){let E=P(X($.s)),I=$.st>=F.min&&$.st<=F.max;if(Math.abs(O-$.w)<=300&&E&&I)return!0}if(!T&&M.kind==="normal"&&x.some(E=>X(E.s)!=="normal"))for(let E of x){let I=Math.abs(O-E.w)<=300,q=E.st>=F.min&&E.st<=F.max;if(I&&q)return!0}return!1}let f=ft(n),d=Qt(t,n,o,i,r,s);if(u.resource?.has(d))return u.resource.get(d);let p=jt(t),w=[],k=J;for(let c of s.querySelectorAll("style")){let g=c.textContent||"";for(let y of g.matchAll(k)){let C=(y[2]||y[4]||"").trim();if(!C||U(C))continue;s.querySelector(`link[rel="stylesheet"][href="${C}"]`)||w.push(C)}}let A=[];w.length&&await Promise.all(w.map(c=>new Promise(g=>{if(s.querySelector(`link[rel="stylesheet"][href="${c}"]`))return g(null);let y=s.createElement("link");y.rel="stylesheet",y.href=c,y.setAttribute("data-snapdom","injected-import"),y.onload=()=>g(y),y.onerror=()=>g(null),s.head.appendChild(y),A.push(y)})));let b="",m=Array.from(s.querySelectorAll('link[rel="stylesheet"]')).filter(c=>!!c.href);for(let c of A)try{c.remove()}catch{}for(let c of m)try{if(U(c.href))continue;let g="",y=!1;try{y=new URL(c.href,location.href).origin===location.origin}catch{}if(!y){let S=Array.isArray(r)?r:[];if(!Vt(c.href,p,S))continue}if(y){let S=Array.from(s.styleSheets).find(x=>x.href===c.href);if(S)try{let x=S.cssRules||[];g=Array.from(x).map(R=>R.cssText).join("")}catch{}}if(!g){let S=await _(c.href,{as:"text",useProxy:i});if(S?.ok&&typeof S.data=="string"&&(g=S.data),U(c.href))continue}g=await zt(g,c.href,i);let C="";for(let S of g.match(Gt)||[]){let x=(S.match(/font-family:\s*([^;]+);/i)?.[1]||"").trim(),R=Z(x);if(!R||U(R))continue;let M=(S.match(/font-weight:\s*([^;]+);/i)?.[1]||"400").trim(),F=(S.match(/font-style:\s*([^;]+);/i)?.[1]||"normal").trim(),T=(S.match(/font-stretch:\s*([^;]+);/i)?.[1]||"100%").trim(),O=(S.match(/unicode-range:\s*([^;]+);/i)?.[1]||"").trim(),P=(S.match(/src\s*:\s*([^;}]+)[;}]/i)?.[1]||"").trim(),B=tt(P,c.href);if(!l(R,F,M,T))continue;let $=pt(O);if(!ht(e,$))continue;let E={family:R,weightSpec:M,styleSpec:F,stretchSpec:T,unicodeRange:O,srcRaw:P,srcUrls:B,href:c.href};if(n&&f(E,$))continue;let I=/url\(/i.test(P)?await gt(S,c.href,i):S;C+=I}C.trim()&&(b+=C)}catch{console.warn("[snapDOM] Failed to process stylesheet:",c.href)}let h={requiredIndex:a,usedCodepoints:e,faceMatchesRequired:l,simpleExcluder:n?ft(n):null,useProxy:i,visitedSheets:new Set,depth:0};for(let c of s.styleSheets)if(!(c.href&&m.some(g=>g.href===c.href)))try{let g=c.href||location.origin+"/";g&&h.visitedSheets.add(g),await yt(c,g,async y=>{b+=y},h)}catch{}try{for(let c of s.fonts||[]){if(!c||!c.family||c.status!=="loaded"||!c._snapdomSrc)continue;let g=String(c.family).replace(/^['"]+|['"]+$/g,"");if(U(g)||!a.has(g.toLowerCase())||n?.families&&n.families.some(C=>String(C).toLowerCase()===g.toLowerCase()))continue;let y=c._snapdomSrc;if(!String(y).startsWith("data:")){if(u.resource?.has(c._snapdomSrc))y=u.resource.get(c._snapdomSrc),u.font?.add(c._snapdomSrc);else if(!u.font?.has(c._snapdomSrc))try{let C=await _(c._snapdomSrc,{as:"dataURL",useProxy:i,silent:!0});if(C.ok&&typeof C.data=="string")y=C.data,u.resource?.set(c._snapdomSrc,y),u.font?.add(c._snapdomSrc);else continue}catch{console.warn("[snapDOM] Failed to fetch dynamic font src:",c._snapdomSrc);continue}}b+=`@font-face{font-family:'${g}';src:url(${y});font-style:${c.style||"normal"};font-weight:${c.weight||"normal"};}`}}catch{}for(let c of o){if(!c||typeof c!="object")continue;let g=String(c.family||"").replace(/^['"]+|['"]+$/g,"");if(!g||U(g)||!a.has(g.toLowerCase())||n?.families&&n.families.some(M=>String(M).toLowerCase()===g.toLowerCase()))continue;let y=c.weight!=null?String(c.weight):"normal",C=c.style!=null?String(c.style):"normal",S=c.stretchPct!=null?`${c.stretchPct}%`:"100%",x=String(c.src||""),R=x;if(!R.startsWith("data:")){if(u.resource?.has(x))R=u.resource.get(x),u.font?.add(x);else if(!u.font?.has(x))try{let M=await _(x,{as:"dataURL",useProxy:i,silent:!0});if(M.ok&&typeof M.data=="string")R=M.data,u.resource?.set(x,R),u.font?.add(x);else continue}catch{console.warn("[snapDOM] Failed to fetch localFonts src:",x);continue}}b+=`@font-face{font-family:'${g}';src:url(${R});font-style:${C};font-weight:${y};font-stretch:${S};}`}return b&&(b=Kt(b),u.resource?.set(d,b)),b}function St(t,e){let n=new Set;if(!t)return n;let o=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT,null),i=a=>{let l=vt(a.fontFamily);if(l.length)for(let f of l){let d=(p,w,k)=>`${f}__${G(p)}__${X(w)}__${Nt(k)}`;n.add(d(a.fontWeight,a.fontStyle,a.fontStretch))}};i(getComputedStyle(t));let r=getComputedStyle(t,"::before");r&&r.content&&r.content!=="none"&&i(r);let s=getComputedStyle(t,"::after");for(s&&s.content&&s.content!=="none"&&i(s);o.nextNode();){let a=o.currentNode;if(e&&!e(a))continue;let l=getComputedStyle(a);i(l);let f=getComputedStyle(a,"::before");f&&f.content&&f.content!=="none"&&i(f);let d=getComputedStyle(a,"::after");d&&d.content&&d.content!=="none"&&i(d)}return n}function bt(t,e){let n=new Set,o=r=>{if(r)for(let s of r)n.add(s.codePointAt(0))},i=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT,null);for(;i.nextNode();){let r=i.currentNode;if(r.nodeType===Node.TEXT_NODE){if(e&&r.parentElement&&!e(r.parentElement))continue;o(r.nodeValue||"")}else if(r.nodeType===Node.ELEMENT_NODE){let s=r;if(e&&!e(s))continue;for(let a of["::before","::after"]){let f=getComputedStyle(s,a)?.getPropertyValue("content");if(!(!f||f==="none"))if(/^"/.test(f)||/^'/.test(f))o(f.slice(1,-1));else{let d=f.match(/\\[0-9A-Fa-f]{1,6}/g);if(d)for(let p of d)try{n.add(parseInt(p.slice(1),16))}catch{}}}}}return n}async function Ct(t,e=2,n=document){try{await n.fonts.ready}catch{}let o=Array.from(t||[]).filter(Boolean);if(o.length===0)return;let i=()=>{let r=n.createElement("div");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 a=n.createElement("span");a.textContent="AaBbGg1234\xC1\xC9\xCD\xD3\xDA\xE7\xF1\u2014\u221E",a.style.fontFamily=`"${s}"`,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",r.appendChild(a)}n.body.appendChild(r),r.offsetWidth,n.body.removeChild(r)};for(let r=0;r<Math.max(1,e);r++)i(),await new Promise(s=>requestAnimationFrame(()=>requestAnimationFrame(s)))}async function xt(t,e,n,o={}){let i=[[t,e]],r=["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"],s=["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"],a=["background-position","background-position-x","background-position-y","background-size","background-repeat","background-origin","background-clip","background-attachment","background-blend-mode"],l=["border-image-slice","border-image-width","border-image-outset","border-image-repeat"];for(;i.length;){let[f,d]=i.shift();if(!d)continue;let p=n.get(f)||D(f);n.has(f)||n.set(f,p);let w=(()=>{let m=p.getPropertyValue("border-image"),h=p.getPropertyValue("border-image-source");return m&&m!=="none"||h&&h!=="none"})(),k=p.getPropertyValue("background-image"),A=p.getPropertyValue("background-color");if(k&&k!=="none"||A&&A!=="rgba(0, 0, 0, 0)"&&A!=="transparent"||/url\s*\(|gradient\s*\(/i.test(p.getPropertyValue("background")||""))for(let m of a){let h=p.getPropertyValue(m);h&&d.style.setProperty(m,h)}for(let m of r){let h=p.getPropertyValue(m);if(m==="background-image"&&(!h||h==="none")){let y=p.getPropertyValue("background");y&&/url\s*\(/.test(y)&&(h=z(y).filter(C=>/url\s*\(/.test(C)).join(", ")||h)}if(!h||h==="none")continue;let c=z(h),g=await Promise.all(c.map(y=>N(y,o)));g.some(y=>y&&y!=="none"&&!/^url\(undefined/.test(y))&&d.style.setProperty(m,g.join(", "))}for(let m of s){let h=p.getPropertyValue(m);!h||h==="initial"||d.style.setProperty(m,h)}if(w)for(let m of l){let h=p.getPropertyValue(m);!h||h==="initial"||d.style.setProperty(m,h)}if(f.shadowRoot){let m=Array.from(f.shadowRoot.children).filter(c=>c.tagName!=="STYLE"),h=Array.from(d.children).filter(c=>!c.dataset?.snapdomPseudo&&!(c.tagName==="STYLE"&&c.dataset?.sd));for(let c=0;c<Math.min(m.length,h.length);c++)i.push([m[c],h[c]])}else{let m=u.session.nodeMap;for(let h of d.children){let c=m.get(h);c&&i.push([c,h])}}}}async function ve(t=document,e={}){let{embedFonts:n=!0,useProxy:o=""}=e,i=e.cache??e.cacheOpt??"full";et(i);try{await document.fonts?.ready}catch{}try{Q()}catch{}u.session=u.session||{},u.session.styleCache||(u.session.styleCache=new WeakMap),u.image=u.image||new L(100),u.background=u.background||new L(100);try{await xt(t,void 0,u.session.styleCache,{useProxy:o})}catch{}let r=[],s=[];try{if(t&&t.nodeType===1){let l=t.querySelectorAll?Array.from(t.querySelectorAll("*")):[];s=[t,...l],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 a=[];for(let l of r){let f=l?.currentSrc||l?.src;if(f&&!u.image.has(f)){let d=Promise.resolve().then(async()=>{let p=await _(f,{as:"dataURL",useProxy:o});p?.ok&&typeof p.data=="string"&&u.image.set(f,p.data)}).catch(()=>{});a.push(d)}}for(let l of s){let f="";try{f=l?.style?.backgroundImage||"",(!f||f==="none")&&(f=D(l).backgroundImage)}catch{}if(f&&f!=="none"){let d=f.match(/url\((?:[^()"']+|"(?:[^"]*)"|'(?:[^']*)')\)/gi)||[];for(let p of d){let w=Promise.resolve().then(()=>N(p,{...e,useProxy:o})).catch(()=>{});a.push(w)}}}if(n)try{let l=St(t),f=bt(t);if(typeof W=="function"?W():!!W){let p=new Set(Array.from(l).map(w=>String(w).split("__")[0]).filter(Boolean));await Ct(p,3)}await wt({required:l,usedCodepoints:f,exclude:e.excludeFonts,localFonts:e.localFonts,useProxy:e.useProxy??o,fontStylesheetDomains:e.fontStylesheetDomains})}catch{}await Promise.allSettled(a)}export{ve as preCache};