filens-preview 0.3.1 → 0.3.3

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.
Files changed (28) hide show
  1. package/README.md +4 -4
  2. package/dist/all-in-one/THIRD-PARTY-NOTICES.txt +583 -0
  3. package/dist/all-in-one/filens.js +284 -284
  4. package/dist/index.d.ts +1 -1
  5. package/dist/split/THIRD-PARTY-NOTICES.txt +583 -0
  6. package/dist/split/chunks/{archive-DMapcEqq.js → archive-BT6evXzB.js} +1 -1
  7. package/dist/split/chunks/{browser-video-session-CGI8FpX_.js → browser-video-session-BX-bBV8b.js} +1 -1
  8. package/dist/split/chunks/{cad-BvXJNqHR.js → cad-D4xpsKTK.js} +1 -1
  9. package/dist/split/chunks/{core-BLayEJn5.js → core-DMIUha7u.js} +10 -10
  10. package/dist/split/chunks/{diagram-DlpgioZ9.js → diagram-DEaht2P0.js} +1 -1
  11. package/dist/split/chunks/{docx-Sii3GNtE.js → docx-CDkeTBtm.js} +1 -1
  12. package/dist/split/chunks/{ebook-CLCQfska.js → ebook-Hm8yI-Uy.js} +1 -1
  13. package/dist/split/chunks/index-JSBoG8MK.js +1 -0
  14. package/dist/split/chunks/{index-BPK_cNTp.js → index-cyA_1amh.js} +1 -1
  15. package/dist/split/chunks/{iwork-Datv3D5d.js → iwork-Drn02EYr.js} +1 -1
  16. package/dist/split/chunks/{media-runtime-tb-Q4Sah.js → media-runtime-C31OgCrW.js} +1 -1
  17. package/dist/split/chunks/{mindmap-B_GYpiFO.js → mindmap-CZvf6m9O.js} +1 -1
  18. package/dist/split/chunks/model3d-DXfxzjT8.js +55 -0
  19. package/dist/split/chunks/{panorama-CIdiLIwD.js → panorama-COXaZ8XC.js} +10 -10
  20. package/dist/split/chunks/{vendor-CBCxJuSg.js → vendor-C8SyXchM.js} +1 -1
  21. package/dist/split/chunks/{xlsx-D2NFYc3n.js → xlsx-bMXHZBbO.js} +1 -1
  22. package/dist/split/converter-core.wasm +0 -0
  23. package/dist/split/converter-office.wasm +0 -0
  24. package/dist/split/converter-postscript.wasm +0 -0
  25. package/dist/split/filens.js +2 -2
  26. package/package.json +1 -1
  27. package/dist/split/chunks/index-DI_GyFX1.js +0 -1
  28. package/dist/split/chunks/model3d-BsIQNF2D.js +0 -55
@@ -1 +1 @@
1
- var Y=Object.defineProperty;var q=(n,e,t)=>e in n?Y(n,e,{enumerable:true,configurable:true,writable:true,value:t}):n[e]=t;var E=(n,e,t)=>q(n,typeof e!="symbol"?e+"":e,t);import{G as ee}from"./vendor-CBCxJuSg.js";import{c as te,m as re,n as V,p as B,s as F,A as C,q as T,o as ne,t as D,u as ie,P as A,v as oe}from"./core-BLayEJn5.js";const H=[{extensions:["rar"],family:"archive",driverId:"archive",targetFormat:"rar",contentTypes:["application/vnd.rar","application/x-rar-compressed"]},{extensions:["7z"],family:"archive",driverId:"archive",targetFormat:"7z",contentTypes:["application/x-7z-compressed"]},{extensions:["zip","jar","war","ear"],family:"archive",driverId:"archive",targetFormat:"zip",contentTypes:["application/zip","application/x-zip-compressed","application/java-archive"]},{extensions:["apk"],family:"archive",driverId:"archive",targetFormat:"zip",contentTypes:["application/vnd.android.package-archive"]},{extensions:["ipa"],family:"archive",driverId:"archive",targetFormat:"zip",contentTypes:["application/x-ios-app"]},{extensions:["tar"],family:"archive",driverId:"archive",targetFormat:"tar",contentTypes:["application/x-tar"]},{extensions:["tgz","gz"],family:"archive",driverId:"archive",targetFormat:"gz",contentTypes:["application/gzip","application/x-gzip"]}];class se{constructor(e,t={}){E(this,"listeners",{loading:new Set,rendered:new Set,error:new Set,statechange:new Set,warnings:new Set});E(this,"root");E(this,"options");E(this,"archiveStack",[]);E(this,"activeEntry",null);E(this,"entryPreviewHost",null);E(this,"entryPreviewer",null);E(this,"entryPreviewUnsubscribes",[]);E(this,"entryObjectUrl",null);E(this,"loadController",null);E(this,"entryController",null);E(this,"renderVersion",0);E(this,"state",{loading:false,error:null,family:"archive",warnings:[],capabilities:{archiveBrowse:true,search:true,download:true},route:"/",entries:[]});this.host=e,this.options=t,this.root=document.createElement("div"),this.root.className="archivev-preview",this.host.replaceChildren(this.root)}async load(e,t){var o,s,c,d;this.stopLoad();const r=new AbortController,i=r.signal;this.loadController=r;const a=()=>r.abort();(o=t.signal)==null||o.addEventListener("abort",a,{once:true}),i.addEventListener("abort",()=>{var h;(h=t.signal)==null||h.removeEventListener("abort",a),this.loadController===r&&(this.stopLoad(),this.state={...this.state,loading:false,error:null,warnings:[],route:"/",entries:[]},this.emit("statechange",this.state))},{once:true}),this.state={...this.state,loading:true,error:null,title:t.descriptor.name,warnings:[],route:"/",entries:[]},this.archiveStack=[],this.emit("loading",this.state),this.emit("statechange",this.state);try{(s=t.signal)!=null&&s.aborted&&r.abort(),b(i);const{bytes:h,volumes:l}=await ve(e,{...t,signal:i});b(i);const m=t.descriptor.name??"archive",u=M(m,((c=t.route)==null?void 0:c.sourceFormat)??t.descriptor.extension),v=await _(h,u,m,i,this.options,this.options.containerContext??re(),t.descriptor.password,l);b(i),this.archiveStack=[v],this.state={...this.state,loading:false,error:null},this.setRoute("/"),this.emit("rendered",this.state),this.emit("statechange",this.state)}catch(h){if(i.aborted){(d=t.signal)!=null&&d.aborted&&b(i);return}this.stopLoad();const l=h instanceof Error?h:new Error(String(h));throw this.state.loading=false,this.state.error=l.message,this.emit("error",l),this.emit("statechange",this.state),l}}destroy(){this.stopLoad(),this.state={...this.state,loading:false,error:null,warnings:[],route:"/",entries:[]},this.root.parentElement===this.host&&this.host.replaceChildren();for(const e of Object.values(this.listeners))e.clear()}stopLoad(){const e=this.loadController;this.loadController=null,e==null||e.abort(),this.closeEntryPreview(false),this.archiveStack=[],this.renderVersion++,this.root.replaceChildren()}getState(){return{...this.state,warnings:this.state.warnings.slice(),entries:this.state.entries.slice()}}on(e,t){return this.listeners[e].add(t),()=>{this.listeners[e].delete(t)}}render(){var l,m;const e=++this.renderVersion,t=()=>e===this.renderVersion&&!!(this.loadController&&!this.loadController.signal.aborted),r=document.createElement("div");r.className="archivev-summary",r.appendChild(this.createBreadcrumbs(t));const i=document.createElement("span");i.className="archivev-item-count",i.textContent=`${this.state.entries.length} item${this.state.entries.length===1?"":"s"}`,r.appendChild(i);const a=document.createElement("div");a.className="archivev-toolbar";const o=document.createElement("button");o.type="button",o.className="archivev-button",o.textContent="Up",o.disabled=!he(this.state.route),o.addEventListener("click",()=>{t()&&this.navigateUp()});const s=document.createElement("button");s.type="button",s.className="archivev-button",s.textContent="Root",s.disabled=this.state.route==="/",s.addEventListener("click",()=>{t()&&this.setRoute("/")});const c=document.createElement("button");if(c.type="button",c.className="archivev-button",c.textContent=this.entryController?"Back to archive":"Back",c.disabled=!this.entryController&&this.archiveStack.length<=1,c.addEventListener("click",()=>{t()&&(this.entryController?this.closeEntryPreview():this.popArchive())}),a.append(c,o,s),this.activeEntry&&typeof URL.createObjectURL=="function"){this.entryObjectUrl??(this.entryObjectUrl=URL.createObjectURL(new Blob([k(this.activeEntry.source)],{type:this.activeEntry.contentType??"application/octet-stream"})));const u=document.createElement("a");u.className="archivev-button",u.textContent=((m=(l=this.options).translate)==null?void 0:m.call(l,"Download attachment"))??"Download attachment",u.href=this.entryObjectUrl,u.download=this.activeEntry.name.split("/").pop()??"attachment.bin",a.append(u)}if(this.activeEntry&&this.entryPreviewHost){this.root.replaceChildren(r,a,this.entryPreviewHost);return}const d=document.createElement("table");d.className="archivev-table",d.appendChild(ye());const h=document.createElement("tbody");for(const u of this.state.entries){const v=document.createElement("tr");v.className="archivev-row",v.tabIndex=0,v.dataset.type=u.type;const y=document.createElement("td");y.className="archivev-name",y.textContent=u.name,y.dataset.type=u.type,v.appendChild(y);const p=document.createElement("td");p.className="archivev-type",p.textContent=u.type,v.appendChild(p);const g=document.createElement("td");g.className="archivev-size",g.textContent=u.type==="directory"?"":we(u.size??0),v.appendChild(g);const w=document.createElement("td");w.className="archivev-modified",w.textContent=u.modified?new Date(u.modified).toLocaleString():"",v.appendChild(w),v.addEventListener("click",()=>{t()&&this.activateEntry(u)}),v.addEventListener("keydown",f=>{t()&&(f.key==="Enter"||f.key===" ")&&(f.preventDefault(),this.activateEntry(u))}),h.appendChild(v)}d.appendChild(h),this.root.replaceChildren(r,a,d)}createBreadcrumbs(e){const t=document.createElement("nav");t.className="archivev-breadcrumbs",t.setAttribute("aria-label","Archive path");const r=L(this.state.route),i=this.entryController!==null;this.archiveStack.forEach((s,c)=>{c>0&&t.appendChild(O());const d=document.createElement("button");d.type="button",d.className="archivev-breadcrumb",d.textContent=s.label;const h=c===this.archiveStack.length-1;d.disabled=h&&r==="/"&&!i,d.addEventListener("click",()=>{e()&&(h?this.setRoute("/"):this.popToArchive(c))}),t.appendChild(d)});const a=r==="/"?[]:r.slice(1,-1).split("/").filter(Boolean);let o="/";for(const s of a){o=G(o,`${s}/`),t.appendChild(O());const c=document.createElement("button");c.type="button",c.className="archivev-breadcrumb",c.textContent=s,c.disabled=o===r&&!i;const d=o;c.addEventListener("click",()=>{e()&&this.setRoute(d)}),t.appendChild(c)}if(this.activeEntry){t.appendChild(O());const s=document.createElement("span");s.className="archivev-breadcrumb-current",s.textContent=this.activeEntry.name.split("/").pop()??this.activeEntry.name,t.appendChild(s)}return t}activateEntry(e){if(e.type==="directory"){this.setRoute(G(this.state.route,e.name));return}if(pe(e.name)){this.openNestedArchive(e.name);return}this.openEntryPreview(e.name)}async openEntryPreview(e){const t=this.findCurrentEntry(e),r=this.archiveStack[this.archiveStack.length-1];if(!t||!r)return;const i=this.startEntryOperation();if(!i)return;const a=i.signal,o=()=>this.entryController===i&&!a.aborted;this.state={...this.state,loading:true,error:null},this.emit("loading",this.state),this.emit("statechange",this.state),this.render();try{const s=await x(t.read(a),a);b(a),this.activeEntry={name:e,source:s,contentType:ge(e,void 0)},this.entryPreviewHost=document.createElement("div"),this.entryPreviewHost.className="archivev-entry-preview",this.render();const c=this.options.previewerFactory;if(c){const d=c(this.entryPreviewHost,{...this.options,containerContext:V(r.containerContext),resourceResolver:this.createEntryResourceResolver(r,t.name,a)});this.entryPreviewer=d,this.entryPreviewUnsubscribes=[d.on("error",h=>{o()&&this.setEntryPreviewError(h)}),d.on("warnings",h=>{o()&&(this.state={...this.state,warnings:h},this.emit("warnings",h),this.emit("statechange",this.state))})],await x(d.preview(s,{name:e,extension:K(e),contentType:this.activeEntry.contentType}),a),b(a)}else this.renderFallbackEntryPreview(this.entryPreviewHost,s,e,this.activeEntry.contentType);this.state={...this.state,loading:false,error:null},this.emit("statechange",this.state)}catch(s){if(!o())return;if(B(s)==="password_cancelled"){this.closeEntryPreview();return}const c=s instanceof Error?s:new Error(String(s));this.setEntryPreviewError(c)}}setEntryPreviewError(e){var i;if(B(e)==="password_cancelled"){this.closeEntryPreview();return}this.state={...this.state,loading:false,error:null};const t=this.entryPreviewHost??this.root;(i=t.querySelector(".archivev-entry-error"))==null||i.remove();const r=document.createElement("p");r.className="archivev-entry-error",r.setAttribute("role","alert"),r.textContent=e.message,t.append(r),this.emit("statechange",this.state)}closeEntryPreview(e=true){var r,i,a;const t=this.entryController;this.entryController=null,t==null||t.abort(),this.entryPreviewUnsubscribes.splice(0).forEach(o=>o()),(r=this.entryPreviewer)==null||r.destroy(),this.entryPreviewer=null;for(const o of((i=this.entryPreviewHost)==null?void 0:i.querySelectorAll("audio, video"))??[]){const s=o;s.pause(),s.removeAttribute("src"),s.load()}(a=this.entryPreviewHost)==null||a.replaceChildren(),this.entryPreviewHost=null,this.activeEntry=null,this.entryObjectUrl&&(URL.revokeObjectURL(this.entryObjectUrl),this.entryObjectUrl=null),e&&this.loadController&&!this.loadController.signal.aborted&&(this.state={...this.state,loading:false,error:null,warnings:[]},this.render(),this.emit("statechange",this.state))}startEntryOperation(){var i;this.closeEntryPreview(false);const e=(i=this.loadController)==null?void 0:i.signal;if(!e||e.aborted)return null;const t=new AbortController,r=()=>t.abort();return this.entryController=t,e.addEventListener("abort",r,{once:true}),t.signal.addEventListener("abort",()=>e.removeEventListener("abort",r),{once:true}),t}popToArchive(e){e<0||e>=this.archiveStack.length-1||(this.closeEntryPreview(false),this.archiveStack.splice(e+1),this.setRoute("/"))}navigateUp(){const e=de(this.state.route);e!==this.state.route&&this.setRoute(e)}setRoute(e){this.entryController&&this.closeEntryPreview(false);const t=this.archiveStack[this.archiveStack.length-1];if(!t)return;const r=L(e);t.listings??(t.listings=new Map);let i=t.listings.get(r);if(!i){const a=r==="/"?t.entries:(t.directories??(t.directories=ue(t.entries))).get(r.slice(1))??[];i=me(a,r),t.listings.set(r,i)}this.state={...this.state,loading:false,error:null,warnings:[],route:r,entries:i.map(a=>({...a}))},this.render(),this.emit("statechange",this.state)}findCurrentEntry(e){const t=this.archiveStack[this.archiveStack.length-1];if(!t)return;const r=this.state.route==="/"?"":this.state.route.slice(1);return t.entries.find(i=>i.type==="file"&&i.name===`${r}${e}`)}createEntryResourceResolver(e,t,r){const i=this.options.resourceResolver,a=t.slice(0,t.lastIndexOf("/")+1),o=e.resources??(e.resources=new Map(e.entries.filter(s=>s.type==="file").map(s=>[P(s.name),s])));return async s=>{b(r);const c=s.source??s.name;if(c&&!/^[a-z][a-z\d+.-]*:/i.test(c)){const h=(/^[\\/]/.test(c)?void 0:o.get(P(a+c)))??o.get(P(c));if(h){const l=await x(h.read(r),r);return b(r),{source:l,warnings:[]}}}return i?x(Promise.resolve(i(s)),r):void 0}}renderFallbackEntryPreview(e,t,r,i){const a=K(r),o=i??"";if(o.startsWith("image/")){this.entryObjectUrl=URL.createObjectURL(new Blob([k(t)],{type:o}));const c=document.createElement("img");c.className="archivev-entry-image",c.alt=r,c.src=this.entryObjectUrl,e.replaceChildren(c);return}if(o==="application/pdf"||a==="pdf"){this.entryObjectUrl=URL.createObjectURL(new Blob([k(t)],{type:"application/pdf"}));const c=document.createElement("iframe");c.className="archivev-entry-frame",c.title=r,c.src=this.entryObjectUrl,e.replaceChildren(c);return}if(o.startsWith("audio/")||o.startsWith("video/")){this.entryObjectUrl=URL.createObjectURL(new Blob([k(t)],{type:o}));const c=document.createElement(o.startsWith("audio/")?"audio":"video");c.className="archivev-entry-media",c.controls=true,c.src=this.entryObjectUrl,e.replaceChildren(c);return}const s=document.createElement("pre");s.className="archivev-entry-text",s.textContent=new TextDecoder().decode(t),e.replaceChildren(s)}async openNestedArchive(e){const t=this.archiveStack[this.archiveStack.length-1];if(!t)return;const r=this.state.route==="/"?"":this.state.route.replace(/^\//,""),i=t.entries.find(s=>s.type==="file"&&s.name===`${r}${e}`);if(!i)return;const a=this.startEntryOperation();if(!a)return;const o=a.signal;this.state={...this.state,loading:true,error:null},this.emit("loading",this.state),this.emit("statechange",this.state),this.render();try{const s=F(i.name,t.entries.filter(y=>y.type==="file")),c=(s==null?void 0:s.primary)??i,d=c.name.split("/").pop()??c.name,h=V(t.containerContext),l=await x(c.read(o),o),m=[];let u=l.byteLength;for(const y of(s==null?void 0:s.files.slice(1))??[]){if(u+(y.size??0)>C.maxBytes)throw new Error("Archive volumes exceed the preview input size limit.");const p=await x(y.read(o),o);if(u+=p.byteLength,u>C.maxBytes)throw new Error("Archive volumes exceed the preview input size limit.");m.push({name:y.name.split("/").pop(),bytes:p})}b(o);const v=await _(l,M(d),d,o,this.options,h,void 0,m);b(o),this.closeEntryPreview(false),this.archiveStack.push(v),this.state={...this.state,loading:false,error:null},this.setRoute("/"),this.emit("rendered",this.state)}catch(s){if(o.aborted)return;if(B(s)==="password_cancelled"){this.closeEntryPreview();return}const c=s instanceof Error?s:new Error(String(s));this.setEntryPreviewError(c)}}popArchive(){this.archiveStack.length<=1||(this.archiveStack.pop(),this.setRoute("/"))}emit(e,t){for(const r of this.listeners[e])r(t)}}function Re(){return{id:"archive",family:"archive",supports:n=>Q(W(n)),createSession:(n,e)=>new se(n,e)}}function Ne(n=te()){const e=new Set(H.flatMap(t=>t.extensions));return[...H,...n.filter(t=>!t.extensions.some(r=>e.has(r)))]}async function _(n,e,t,r,i,a,o,s=[]){b(r);const c=h=>{if(h.length>A.maxEntries)throw new Error("Archive contains too many entries.");return{label:t,containerContext:a,entries:h.map(l=>({...l,read:(m=r)=>D(()=>l.read(m),l.size,a,m)}))}},d=F(t,[{name:t,bytes:n},...s]);if(e==="rar"||e==="7z"||d){const{runArchiveWorker:h}=await Promise.resolve().then(()=>Le),l=(d==null?void 0:d.primary)??{name:t,bytes:n},m=(d==null?void 0:d.format)??e,u={bytes:l.bytes,format:m,...d?{name:l.name,volumes:d.files.slice(1)}:{}};let v=o;const y=await T(async p=>{const g=await h({...u,password:p},r);return v=p,g},i,t,r,o);return c(y.entries.map(p=>({name:p.directory?`${p.path.replace(/\/+$/,"")}/`:p.path,type:p.directory?"directory":"file",size:p.directory?void 0:p.size,modified:p.modified,encrypted:p.encrypted,read:(g=r)=>T(async w=>(await h({...u,entry:p,password:w},g)).bytes,i,`${t} \u203A ${p.path}`,g,v)})).sort(R))}if(X(e)){const h=await x(ne(n,{password:o,signal:r,maxEntryBytes:A.maxEntryBytes}).catch(l=>{throw l instanceof Error&&/multi.?volume|multi.?disk/i.test(l.message)?new Error("Archive volumes are missing. Select the .zip file and all .z01, .z02 parts together."):l}),r);return b(r),c([...h.values()].map(l=>({name:l.name,type:l.directory?"directory":"file",size:l.directory?void 0:l.size,modified:l.modified,encrypted:l.encrypted,read:(m=r)=>T(u=>l.bytes(u,m),i,`${t} \u203A ${l.name}`,m,o)})).sort(R))}if(e==="tar")return c(Z(n));if(e==="gz"||e==="tgz"){const h=await D(()=>ce(n),void 0,a,r);if(b(r),e==="tgz"||le(h))return c(Z(h));const l=t.replace(/\.gz$/i,"")||"file";return c([{name:l,type:"file",size:h.byteLength,read:async()=>h.slice()}])}throw new Error(`Archive preview does not support ${e||"unknown"} files.`)}function Z(n){const e=[],t=new Map;let r=new Map,i;for(let a=0;a+512<=n.byteLength;){if(e.length>A.maxEntries)throw new Error("Archive contains too many entries.");const o=n.subarray(a,a+512);if(o.every(f=>f===0))break;if(!J(o))throw new Error("Invalid TAR header checksum.");const s=String.fromCharCode(o[156]??0),c=["x","g","L","K"].includes(s),d=f=>r.get(f)??t.get(f),h=c?void 0:d("size"),l=h?$(h,true):I(o,124,12);if(!Number.isSafeInteger(l)||l<0)throw new Error("Invalid TAR entry size.");const m=a+512,u=m+Math.ceil(l/512)*512;if(!Number.isSafeInteger(u)||u>n.byteLength)throw new Error("Truncated TAR entry.");if(c){const f=n.subarray(m,m+l);if(s==="L"){const z=f.indexOf(0);i=new TextDecoder().decode(z<0?f:f.subarray(0,z))}else if(s!=="K"){const z=ae(f);for(const[N,U]of z)s==="g"?U?t.set(N,U):t.delete(N):r.set(N,U)}a=u;continue}const v=j(o,345,155),y=j(o,0,100),p=P(d("path")||i||(v?`${v}/${y}`:y)),g=d("mtime"),w=g?$(g,false):I(o,136,12);if(r=new Map,i=void 0,p&&(s==="\0"||s==="0"||s==="5")){const f=s==="5",z=f?`${p.replace(/\/+$/,"")}/`:p;e.push({name:z,type:f?"directory":"file",size:f?void 0:l,modified:g||w>0?w*1e3:void 0,read:async()=>f?new Uint8Array:n.slice(m,m+l)})}a=u}return e.sort(R)}function ae(n){const e=new Map,t=new TextDecoder;for(let r=0;r<n.length;){const i=n.indexOf(32,r);if(i<0)throw new Error("Invalid TAR extended header length.");const a=$(t.decode(n.subarray(r,i)),true),o=r+a;if(o<=i+1||o>n.length||n[o-1]!==10)throw new Error("Truncated TAR extended header.");const s=t.decode(n.subarray(i+1,o-1)),c=s.indexOf("=");if(c<=0)throw new Error("Invalid TAR extended header field.");e.set(s.slice(0,c),s.slice(c+1)),r=o}return e}function $(n,e){const t=Number(n);if(!(e?/^\d+$/:/^-?\d+(?:\.\d+)?$/).test(n)||!Number.isFinite(t)||e&&!Number.isSafeInteger(t))throw new Error("Invalid TAR extended header number.");return t}async function ce(n){const e=[];let t=0;const r=new ee(o=>{if(t+=o.byteLength,t>A.maxEntryBytes)throw new Error("Expanded GZIP exceeds the preview size limit.");e.push(o)});for(let o=0;o<n.length;o+=4096)r.push(n.subarray(o,o+4096),o+4096>=n.length);const i=new Uint8Array(t);let a=0;for(const o of e)i.set(o,a),a+=o.byteLength;return i}function le(n){return n.byteLength>=512&&!n.subarray(0,512).every(e=>e===0)&&J(n.subarray(0,512))}function J(n){const e=I(n,148,8);let t=0;for(let r=0;r<512;r+=1)t+=r>=148&&r<156?32:n[r]??0;return e===t}function j(n,e,t){const r=n.subarray(e,e+t),i=r.indexOf(0);return new TextDecoder().decode(i>=0?r.subarray(0,i):r).trim()}function I(n,e,t){const r=j(n,e,t).replace(/^0+/,"").trim();return r?Number.parseInt(r,8):0}function L(n){const e=String(n||"/").trim().replace(/\\/g,"/");if(!e||e==="/")return"/";const t=e.replace(/^\/+/,"").replace(/\/+$/,"");return t?`/${t}/`:"/"}function he(n){return L(n)!=="/"}function de(n){const e=L(n);if(e==="/")return"/";const r=e.replace(/^\/|\/$/g,"").split("/").filter(Boolean);return r.pop(),r.length?`/${r.join("/")}/`:"/"}function G(n,e){const t=L(n),r=t==="/"?"":t.replace(/^\/|\/$/g,""),i=String(e).replace(/\\/g,"/").replace(/\/+$/g,"").replace(/^\/+/,""),a=[r,i].filter(Boolean).join("/");return a?`/${a}/`:"/"}function ue(n){const e=new Map;for(const t of n){let r="";for(let i=t.name.indexOf("/");i>=0;i=t.name.indexOf("/",i+1)){const a=t.name.slice(0,i+1),o=e.has(a);o||e.set(a,[]),r&&(!o||i===t.name.length-1)&&e.get(r).push(t),r=a}r&&!t.name.endsWith("/")&&e.get(r).push(t)}return e}function me(n,e){const t=L(e),r=t==="/"?"":t.slice(1),i=new Map(n.map(o=>[o.name,o])),a=new Map;for(const o of n){if(r&&!o.name.startsWith(r))continue;const s=r?o.name.slice(r.length):o.name;if(!s)continue;const c=s.split("/",1)[0]??s;if(!c)continue;const d=s.length>c.length,h=d?`${c}/`:c;if(!a.has(h)){if(d){const l=i.get(`${r}${h}`);a.set(h,{name:h,type:"directory",modified:l==null?void 0:l.modified});continue}a.set(h,{name:h,type:"file",size:o.size,modified:o.modified})}}return[...a.values()].sort(R)}function M(n,e){const t=String(n).trim().toLowerCase().split(/[?#]/,1)[0]??"";if(t.endsWith(".tar.gz")||t.endsWith(".tgz"))return"tgz";const r=/\.(7z|zip)\.\d{3,}$/.exec(t);return r?r[1]:/\.[r-y]\d{2}$/.test(t)?"rar":/\.z\d{2,}$/.test(t)?"zip":W(e||t.split(".").pop())}function pe(n){return ie(n)||Q(M(n))}async function ve(n,e){b(e.signal);const t=e.descriptor.archiveVolumes??[];if(t.length>=C.maxVolumes)throw new Error("Archive contains too many volumes.");const r=e.descriptor.name??"archive",i=[{name:r,source:n},...t],a=l=>l instanceof Blob?l.size:typeof l=="string"?0:l.byteLength;if(i.reduce((l,m)=>l+a(m.source),0)>C.maxBytes)throw new Error("Archive volumes exceed the preview input size limit.");const o=F(r,i);if(t.length&&(!o||o.files.length!==i.length))throw new Error("Archive volumes do not belong to the same archive.");const s=async l=>new Uint8Array(await fe(l.source,e)),c=await s(i[0]);let d=c.byteLength;const h=[];for(const l of t){const m=a(l.source);if(d+m>C.maxBytes)throw new Error("Archive volumes exceed the preview input size limit.");const u=await s(l);if(d+=u.byteLength,d>C.maxBytes)throw new Error("Archive volumes exceed the preview input size limit.");h.push({name:l.name,bytes:u})}return{bytes:c,volumes:h}}function Q(n){return X(n)||["tar","tgz","gz","rar","7z"].includes(n)}function X(n){return["zip","jar","war","ear","apk","ipa"].includes(n)}async function fe(n,e){const t=e.signal;if(b(t),typeof n=="string"){const r=a=>{var o;(o=a.body)==null||o.cancel().catch(()=>{})},i=await x(fetch(n,{signal:t}),t,r);try{if(b(t),!i.ok)throw new Error(`Failed to load archive source: ${i.status} ${i.statusText}`.trim());return await x(i.arrayBuffer(),t)}catch(a){throw r(i),a}}if(ArrayBuffer.isView(n)){const r=new Uint8Array(n.buffer,n.byteOffset,n.byteLength),i=new Uint8Array(r.byteLength);return i.set(r),i.buffer}return n instanceof ArrayBuffer?n.slice(0):n instanceof Blob?x(n.arrayBuffer(),t):new TextEncoder().encode(String(n)).buffer}function b(n){if(n!=null&&n.aborted)throw new DOMException("Archive preview aborted.","AbortError")}function x(n,e,t){return e?new Promise((r,i)=>{let a=false;const o=()=>{a||(a=true,e.removeEventListener("abort",o),i(new DOMException("Archive preview aborted.","AbortError")))};e.addEventListener("abort",o,{once:true}),e.aborted&&o(),n.then(s=>{if(a){t==null||t(s);return}a=true,e.removeEventListener("abort",o),r(s)},s=>{a||(a=true,e.removeEventListener("abort",o),i(s))}).catch(()=>{})}):n}function ye(){const n=document.createElement("thead"),e=document.createElement("tr");for(const t of["Name","Type","Size","Modified"]){const r=document.createElement("th");r.textContent=t,e.appendChild(r)}return n.appendChild(e),n}function O(){const n=document.createElement("span");return n.className="archivev-breadcrumb-separator",n.textContent="\u203A",n.setAttribute("aria-hidden","true"),n}function K(n){const t=(n.toLowerCase().split(/[?#]/,1)[0]??"").split(/[\\/]/).pop()??"",r=t.lastIndexOf(".");return r>=0?t.slice(r+1):""}function R(n,e){return n.type!==e.type?n.type==="directory"?-1:1:n.name.localeCompare(e.name)}function we(n){if(n<1024)return`${n} B`;const e=["KB","MB","GB","TB"];let t=n/1024,r=0;for(;t>=1024&&r<e.length-1;)t/=1024,r+=1;return`${t.toFixed(t>=10?0:1)} ${e[r]}`}function W(n){return String(n??"").trim().replace(/^\./,"").toLowerCase()}function P(n){const e=String(n??"");if(!/[\\%?#:]|(?:^|\/)\.\.?(?:\/|$)|\/\/|^\/|\/$|^\s|\s$/.test(e))return e;const t=e.trim().replace(/\\/g,"/").replace(/^[a-z]+:\/\/[^/]+\//i,"").replace(/^[a-z]:\//i,"").replace(/^\/+/,"").split(/[?#]/)[0]??"",r=[];for(const i of t.split("/"))if(!(!i||i===".")){if(i===".."){r.pop();continue}r.push(be(i))}return r.join("/")}function k(n){const e=new Uint8Array(n.byteLength);return e.set(n),e.buffer}function be(n){try{return decodeURIComponent(n)}catch{return n}}function ge(n,e,t=false){var a;const r=t?n:P(n),i=W((a=r.split("?")[0])==null?void 0:a.split(".").pop());return(e==null?void 0:e[r])??(e==null?void 0:e[i])??Ee(i)}function Ee(n){return{aac:"audio/aac",avif:"image/avif",bin:"application/octet-stream",bmp:"image/bmp",css:"text/css",gif:"image/gif",flac:"audio/flac",gltf:"model/gltf+json",html:"text/html",jpeg:"image/jpeg",jpg:"image/jpeg",json:"application/json",ktx2:"image/ktx2",m4a:"audio/mp4",m4v:"video/mp4",mov:"video/quicktime",mp3:"audio/mpeg",mp4:"video/mp4",obj:"model/obj",oga:"audio/ogg",ogg:"audio/ogg",ogv:"video/ogg",opus:"audio/ogg",pdf:"application/pdf",png:"image/png",svg:"image/svg+xml",txt:"text/plain",wav:"audio/wav",webm:"video/webm",webp:"image/webp",xhtml:"application/xhtml+xml"}[n]}function xe(n){return new Worker(""+new URL("../assets/archive-worker-Cy3bEdVg.js",import.meta.url).href,{name:n==null?void 0:n.name})}const Ce=()=>new URL("../archive/7zz.wasm",import.meta.url).href,S=new Map;function ze(n){const e=S.get(n);if(e)return e;const t=fetch(n).then(async r=>{var a;if(!r.ok)throw new Error(`Unable to load the archive engine (${r.status}).`);const i=(a=r.headers.get("content-type"))==null?void 0:a.split(";",1)[0];return typeof WebAssembly.compileStreaming=="function"&&i==="application/wasm"?WebAssembly.compileStreaming(r):WebAssembly.compile(await r.arrayBuffer())});return S.set(n,t),t.catch(()=>{S.get(n)===t&&S.delete(n)}),t}function Ae(n,e){var t,r;if(e==null||e.throwIfAborted(),/^(blob|data):/.test(import.meta.url)||((t=globalThis.location)==null?void 0:t.protocol)==="file:")throw new Error("RAR, 7z and multi-volume ZIP need separate archive engine files. Use filens preview FILE --mode serve, or deploy the archive assets over HTTP(S).");if(1+(((r=n.volumes)==null?void 0:r.length)??0)>C.maxVolumes||n.bytes.byteLength+(n.volumes??[]).reduce((i,a)=>i+a.bytes.byteLength,0)>C.maxBytes)throw new Error("Archive volumes exceed the preview input limit.");return new Promise((i,a)=>{const o=new xe;let s=false;const c=(l,m)=>{s||(s=true,clearTimeout(h),e==null||e.removeEventListener("abort",d),o.terminate(),m?a(m):i(l))},d=()=>c(void 0,new DOMException("Archive preview aborted.","AbortError")),h=setTimeout(()=>c(void 0,new Error("Archive processing exceeded the preview time limit.")),6e4);e==null||e.addEventListener("abort",d,{once:true}),o.onmessage=l=>{const{result:m,error:u}=l.data;c(m,u?u.code==="password_required"||u.code==="password_invalid"?new oe(u.code):new Error(u.message):void 0)},o.onerror=()=>c(void 0,new Error("The archive WASM worker could not be loaded or stopped unexpectedly.")),o.onmessageerror=()=>c(void 0,new Error("The archive worker returned an invalid response.")),(async()=>{var g;const l=Ce(),m=await ze(l);if(s)return;const u=n.bytes.slice(),v=(g=n.volumes)==null?void 0:g.map(w=>({name:w.name,bytes:w.bytes.slice()})),y={...n,bytes:u,volumes:v,wasmUrl:l,maxEntries:A.maxEntries,maxEntryBytes:A.maxEntryBytes},p=[u.buffer,...(v??[]).map(w=>w.bytes.buffer)];try{o.postMessage({...y,wasmModule:m},p)}catch(w){if(!(w instanceof DOMException)||w.name!=="DataCloneError")throw w;o.postMessage(y,p)}})().catch(l=>c(void 0,l instanceof Error?l:new Error(String(l))))})}const Le=Object.freeze(Object.defineProperty({__proto__:null,runArchiveWorker:Ae},Symbol.toStringTag,{value:"Module"}));export{Re as a,Ne as c};
1
+ var Y=Object.defineProperty;var q=(n,e,t)=>e in n?Y(n,e,{enumerable:true,configurable:true,writable:true,value:t}):n[e]=t;var E=(n,e,t)=>q(n,typeof e!="symbol"?e+"":e,t);import{G as ee}from"./vendor-C8SyXchM.js";import{c as te,m as re,n as V,p as B,s as F,A as C,q as T,o as ne,t as D,u as ie,P as A,v as oe}from"./core-DMIUha7u.js";const H=[{extensions:["rar"],family:"archive",driverId:"archive",targetFormat:"rar",contentTypes:["application/vnd.rar","application/x-rar-compressed"]},{extensions:["7z"],family:"archive",driverId:"archive",targetFormat:"7z",contentTypes:["application/x-7z-compressed"]},{extensions:["zip","jar","war","ear"],family:"archive",driverId:"archive",targetFormat:"zip",contentTypes:["application/zip","application/x-zip-compressed","application/java-archive"]},{extensions:["apk"],family:"archive",driverId:"archive",targetFormat:"zip",contentTypes:["application/vnd.android.package-archive"]},{extensions:["ipa"],family:"archive",driverId:"archive",targetFormat:"zip",contentTypes:["application/x-ios-app"]},{extensions:["tar"],family:"archive",driverId:"archive",targetFormat:"tar",contentTypes:["application/x-tar"]},{extensions:["tgz","gz"],family:"archive",driverId:"archive",targetFormat:"gz",contentTypes:["application/gzip","application/x-gzip"]}];class se{constructor(e,t={}){E(this,"listeners",{loading:new Set,rendered:new Set,error:new Set,statechange:new Set,warnings:new Set});E(this,"root");E(this,"options");E(this,"archiveStack",[]);E(this,"activeEntry",null);E(this,"entryPreviewHost",null);E(this,"entryPreviewer",null);E(this,"entryPreviewUnsubscribes",[]);E(this,"entryObjectUrl",null);E(this,"loadController",null);E(this,"entryController",null);E(this,"renderVersion",0);E(this,"state",{loading:false,error:null,family:"archive",warnings:[],capabilities:{archiveBrowse:true,search:true,download:true},route:"/",entries:[]});this.host=e,this.options=t,this.root=document.createElement("div"),this.root.className="archivev-preview",this.host.replaceChildren(this.root)}async load(e,t){var o,s,c,d;this.stopLoad();const r=new AbortController,i=r.signal;this.loadController=r;const a=()=>r.abort();(o=t.signal)==null||o.addEventListener("abort",a,{once:true}),i.addEventListener("abort",()=>{var h;(h=t.signal)==null||h.removeEventListener("abort",a),this.loadController===r&&(this.stopLoad(),this.state={...this.state,loading:false,error:null,warnings:[],route:"/",entries:[]},this.emit("statechange",this.state))},{once:true}),this.state={...this.state,loading:true,error:null,title:t.descriptor.name,warnings:[],route:"/",entries:[]},this.archiveStack=[],this.emit("loading",this.state),this.emit("statechange",this.state);try{(s=t.signal)!=null&&s.aborted&&r.abort(),b(i);const{bytes:h,volumes:l}=await ve(e,{...t,signal:i});b(i);const m=t.descriptor.name??"archive",u=M(m,((c=t.route)==null?void 0:c.sourceFormat)??t.descriptor.extension),v=await _(h,u,m,i,this.options,this.options.containerContext??re(),t.descriptor.password,l);b(i),this.archiveStack=[v],this.state={...this.state,loading:false,error:null},this.setRoute("/"),this.emit("rendered",this.state),this.emit("statechange",this.state)}catch(h){if(i.aborted){(d=t.signal)!=null&&d.aborted&&b(i);return}this.stopLoad();const l=h instanceof Error?h:new Error(String(h));throw this.state.loading=false,this.state.error=l.message,this.emit("error",l),this.emit("statechange",this.state),l}}destroy(){this.stopLoad(),this.state={...this.state,loading:false,error:null,warnings:[],route:"/",entries:[]},this.root.parentElement===this.host&&this.host.replaceChildren();for(const e of Object.values(this.listeners))e.clear()}stopLoad(){const e=this.loadController;this.loadController=null,e==null||e.abort(),this.closeEntryPreview(false),this.archiveStack=[],this.renderVersion++,this.root.replaceChildren()}getState(){return{...this.state,warnings:this.state.warnings.slice(),entries:this.state.entries.slice()}}on(e,t){return this.listeners[e].add(t),()=>{this.listeners[e].delete(t)}}render(){var l,m;const e=++this.renderVersion,t=()=>e===this.renderVersion&&!!(this.loadController&&!this.loadController.signal.aborted),r=document.createElement("div");r.className="archivev-summary",r.appendChild(this.createBreadcrumbs(t));const i=document.createElement("span");i.className="archivev-item-count",i.textContent=`${this.state.entries.length} item${this.state.entries.length===1?"":"s"}`,r.appendChild(i);const a=document.createElement("div");a.className="archivev-toolbar";const o=document.createElement("button");o.type="button",o.className="archivev-button",o.textContent="Up",o.disabled=!he(this.state.route),o.addEventListener("click",()=>{t()&&this.navigateUp()});const s=document.createElement("button");s.type="button",s.className="archivev-button",s.textContent="Root",s.disabled=this.state.route==="/",s.addEventListener("click",()=>{t()&&this.setRoute("/")});const c=document.createElement("button");if(c.type="button",c.className="archivev-button",c.textContent=this.entryController?"Back to archive":"Back",c.disabled=!this.entryController&&this.archiveStack.length<=1,c.addEventListener("click",()=>{t()&&(this.entryController?this.closeEntryPreview():this.popArchive())}),a.append(c,o,s),this.activeEntry&&typeof URL.createObjectURL=="function"){this.entryObjectUrl??(this.entryObjectUrl=URL.createObjectURL(new Blob([k(this.activeEntry.source)],{type:this.activeEntry.contentType??"application/octet-stream"})));const u=document.createElement("a");u.className="archivev-button",u.textContent=((m=(l=this.options).translate)==null?void 0:m.call(l,"Download attachment"))??"Download attachment",u.href=this.entryObjectUrl,u.download=this.activeEntry.name.split("/").pop()??"attachment.bin",a.append(u)}if(this.activeEntry&&this.entryPreviewHost){this.root.replaceChildren(r,a,this.entryPreviewHost);return}const d=document.createElement("table");d.className="archivev-table",d.appendChild(ye());const h=document.createElement("tbody");for(const u of this.state.entries){const v=document.createElement("tr");v.className="archivev-row",v.tabIndex=0,v.dataset.type=u.type;const y=document.createElement("td");y.className="archivev-name",y.textContent=u.name,y.dataset.type=u.type,v.appendChild(y);const p=document.createElement("td");p.className="archivev-type",p.textContent=u.type,v.appendChild(p);const g=document.createElement("td");g.className="archivev-size",g.textContent=u.type==="directory"?"":we(u.size??0),v.appendChild(g);const w=document.createElement("td");w.className="archivev-modified",w.textContent=u.modified?new Date(u.modified).toLocaleString():"",v.appendChild(w),v.addEventListener("click",()=>{t()&&this.activateEntry(u)}),v.addEventListener("keydown",f=>{t()&&(f.key==="Enter"||f.key===" ")&&(f.preventDefault(),this.activateEntry(u))}),h.appendChild(v)}d.appendChild(h),this.root.replaceChildren(r,a,d)}createBreadcrumbs(e){const t=document.createElement("nav");t.className="archivev-breadcrumbs",t.setAttribute("aria-label","Archive path");const r=L(this.state.route),i=this.entryController!==null;this.archiveStack.forEach((s,c)=>{c>0&&t.appendChild(O());const d=document.createElement("button");d.type="button",d.className="archivev-breadcrumb",d.textContent=s.label;const h=c===this.archiveStack.length-1;d.disabled=h&&r==="/"&&!i,d.addEventListener("click",()=>{e()&&(h?this.setRoute("/"):this.popToArchive(c))}),t.appendChild(d)});const a=r==="/"?[]:r.slice(1,-1).split("/").filter(Boolean);let o="/";for(const s of a){o=G(o,`${s}/`),t.appendChild(O());const c=document.createElement("button");c.type="button",c.className="archivev-breadcrumb",c.textContent=s,c.disabled=o===r&&!i;const d=o;c.addEventListener("click",()=>{e()&&this.setRoute(d)}),t.appendChild(c)}if(this.activeEntry){t.appendChild(O());const s=document.createElement("span");s.className="archivev-breadcrumb-current",s.textContent=this.activeEntry.name.split("/").pop()??this.activeEntry.name,t.appendChild(s)}return t}activateEntry(e){if(e.type==="directory"){this.setRoute(G(this.state.route,e.name));return}if(pe(e.name)){this.openNestedArchive(e.name);return}this.openEntryPreview(e.name)}async openEntryPreview(e){const t=this.findCurrentEntry(e),r=this.archiveStack[this.archiveStack.length-1];if(!t||!r)return;const i=this.startEntryOperation();if(!i)return;const a=i.signal,o=()=>this.entryController===i&&!a.aborted;this.state={...this.state,loading:true,error:null},this.emit("loading",this.state),this.emit("statechange",this.state),this.render();try{const s=await x(t.read(a),a);b(a),this.activeEntry={name:e,source:s,contentType:ge(e,void 0)},this.entryPreviewHost=document.createElement("div"),this.entryPreviewHost.className="archivev-entry-preview",this.render();const c=this.options.previewerFactory;if(c){const d=c(this.entryPreviewHost,{...this.options,containerContext:V(r.containerContext),resourceResolver:this.createEntryResourceResolver(r,t.name,a)});this.entryPreviewer=d,this.entryPreviewUnsubscribes=[d.on("error",h=>{o()&&this.setEntryPreviewError(h)}),d.on("warnings",h=>{o()&&(this.state={...this.state,warnings:h},this.emit("warnings",h),this.emit("statechange",this.state))})],await x(d.preview(s,{name:e,extension:K(e),contentType:this.activeEntry.contentType}),a),b(a)}else this.renderFallbackEntryPreview(this.entryPreviewHost,s,e,this.activeEntry.contentType);this.state={...this.state,loading:false,error:null},this.emit("statechange",this.state)}catch(s){if(!o())return;if(B(s)==="password_cancelled"){this.closeEntryPreview();return}const c=s instanceof Error?s:new Error(String(s));this.setEntryPreviewError(c)}}setEntryPreviewError(e){var i;if(B(e)==="password_cancelled"){this.closeEntryPreview();return}this.state={...this.state,loading:false,error:null};const t=this.entryPreviewHost??this.root;(i=t.querySelector(".archivev-entry-error"))==null||i.remove();const r=document.createElement("p");r.className="archivev-entry-error",r.setAttribute("role","alert"),r.textContent=e.message,t.append(r),this.emit("statechange",this.state)}closeEntryPreview(e=true){var r,i,a;const t=this.entryController;this.entryController=null,t==null||t.abort(),this.entryPreviewUnsubscribes.splice(0).forEach(o=>o()),(r=this.entryPreviewer)==null||r.destroy(),this.entryPreviewer=null;for(const o of((i=this.entryPreviewHost)==null?void 0:i.querySelectorAll("audio, video"))??[]){const s=o;s.pause(),s.removeAttribute("src"),s.load()}(a=this.entryPreviewHost)==null||a.replaceChildren(),this.entryPreviewHost=null,this.activeEntry=null,this.entryObjectUrl&&(URL.revokeObjectURL(this.entryObjectUrl),this.entryObjectUrl=null),e&&this.loadController&&!this.loadController.signal.aborted&&(this.state={...this.state,loading:false,error:null,warnings:[]},this.render(),this.emit("statechange",this.state))}startEntryOperation(){var i;this.closeEntryPreview(false);const e=(i=this.loadController)==null?void 0:i.signal;if(!e||e.aborted)return null;const t=new AbortController,r=()=>t.abort();return this.entryController=t,e.addEventListener("abort",r,{once:true}),t.signal.addEventListener("abort",()=>e.removeEventListener("abort",r),{once:true}),t}popToArchive(e){e<0||e>=this.archiveStack.length-1||(this.closeEntryPreview(false),this.archiveStack.splice(e+1),this.setRoute("/"))}navigateUp(){const e=de(this.state.route);e!==this.state.route&&this.setRoute(e)}setRoute(e){this.entryController&&this.closeEntryPreview(false);const t=this.archiveStack[this.archiveStack.length-1];if(!t)return;const r=L(e);t.listings??(t.listings=new Map);let i=t.listings.get(r);if(!i){const a=r==="/"?t.entries:(t.directories??(t.directories=ue(t.entries))).get(r.slice(1))??[];i=me(a,r),t.listings.set(r,i)}this.state={...this.state,loading:false,error:null,warnings:[],route:r,entries:i.map(a=>({...a}))},this.render(),this.emit("statechange",this.state)}findCurrentEntry(e){const t=this.archiveStack[this.archiveStack.length-1];if(!t)return;const r=this.state.route==="/"?"":this.state.route.slice(1);return t.entries.find(i=>i.type==="file"&&i.name===`${r}${e}`)}createEntryResourceResolver(e,t,r){const i=this.options.resourceResolver,a=t.slice(0,t.lastIndexOf("/")+1),o=e.resources??(e.resources=new Map(e.entries.filter(s=>s.type==="file").map(s=>[P(s.name),s])));return async s=>{b(r);const c=s.source??s.name;if(c&&!/^[a-z][a-z\d+.-]*:/i.test(c)){const h=(/^[\\/]/.test(c)?void 0:o.get(P(a+c)))??o.get(P(c));if(h){const l=await x(h.read(r),r);return b(r),{source:l,warnings:[]}}}return i?x(Promise.resolve(i(s)),r):void 0}}renderFallbackEntryPreview(e,t,r,i){const a=K(r),o=i??"";if(o.startsWith("image/")){this.entryObjectUrl=URL.createObjectURL(new Blob([k(t)],{type:o}));const c=document.createElement("img");c.className="archivev-entry-image",c.alt=r,c.src=this.entryObjectUrl,e.replaceChildren(c);return}if(o==="application/pdf"||a==="pdf"){this.entryObjectUrl=URL.createObjectURL(new Blob([k(t)],{type:"application/pdf"}));const c=document.createElement("iframe");c.className="archivev-entry-frame",c.title=r,c.src=this.entryObjectUrl,e.replaceChildren(c);return}if(o.startsWith("audio/")||o.startsWith("video/")){this.entryObjectUrl=URL.createObjectURL(new Blob([k(t)],{type:o}));const c=document.createElement(o.startsWith("audio/")?"audio":"video");c.className="archivev-entry-media",c.controls=true,c.src=this.entryObjectUrl,e.replaceChildren(c);return}const s=document.createElement("pre");s.className="archivev-entry-text",s.textContent=new TextDecoder().decode(t),e.replaceChildren(s)}async openNestedArchive(e){const t=this.archiveStack[this.archiveStack.length-1];if(!t)return;const r=this.state.route==="/"?"":this.state.route.replace(/^\//,""),i=t.entries.find(s=>s.type==="file"&&s.name===`${r}${e}`);if(!i)return;const a=this.startEntryOperation();if(!a)return;const o=a.signal;this.state={...this.state,loading:true,error:null},this.emit("loading",this.state),this.emit("statechange",this.state),this.render();try{const s=F(i.name,t.entries.filter(y=>y.type==="file")),c=(s==null?void 0:s.primary)??i,d=c.name.split("/").pop()??c.name,h=V(t.containerContext),l=await x(c.read(o),o),m=[];let u=l.byteLength;for(const y of(s==null?void 0:s.files.slice(1))??[]){if(u+(y.size??0)>C.maxBytes)throw new Error("Archive volumes exceed the preview input size limit.");const p=await x(y.read(o),o);if(u+=p.byteLength,u>C.maxBytes)throw new Error("Archive volumes exceed the preview input size limit.");m.push({name:y.name.split("/").pop(),bytes:p})}b(o);const v=await _(l,M(d),d,o,this.options,h,void 0,m);b(o),this.closeEntryPreview(false),this.archiveStack.push(v),this.state={...this.state,loading:false,error:null},this.setRoute("/"),this.emit("rendered",this.state)}catch(s){if(o.aborted)return;if(B(s)==="password_cancelled"){this.closeEntryPreview();return}const c=s instanceof Error?s:new Error(String(s));this.setEntryPreviewError(c)}}popArchive(){this.archiveStack.length<=1||(this.archiveStack.pop(),this.setRoute("/"))}emit(e,t){for(const r of this.listeners[e])r(t)}}function Re(){return{id:"archive",family:"archive",supports:n=>Q(W(n)),createSession:(n,e)=>new se(n,e)}}function Ne(n=te()){const e=new Set(H.flatMap(t=>t.extensions));return[...H,...n.filter(t=>!t.extensions.some(r=>e.has(r)))]}async function _(n,e,t,r,i,a,o,s=[]){b(r);const c=h=>{if(h.length>A.maxEntries)throw new Error("Archive contains too many entries.");return{label:t,containerContext:a,entries:h.map(l=>({...l,read:(m=r)=>D(()=>l.read(m),l.size,a,m)}))}},d=F(t,[{name:t,bytes:n},...s]);if(e==="rar"||e==="7z"||d){const{runArchiveWorker:h}=await Promise.resolve().then(()=>Le),l=(d==null?void 0:d.primary)??{name:t,bytes:n},m=(d==null?void 0:d.format)??e,u={bytes:l.bytes,format:m,...d?{name:l.name,volumes:d.files.slice(1)}:{}};let v=o;const y=await T(async p=>{const g=await h({...u,password:p},r);return v=p,g},i,t,r,o);return c(y.entries.map(p=>({name:p.directory?`${p.path.replace(/\/+$/,"")}/`:p.path,type:p.directory?"directory":"file",size:p.directory?void 0:p.size,modified:p.modified,encrypted:p.encrypted,read:(g=r)=>T(async w=>(await h({...u,entry:p,password:w},g)).bytes,i,`${t} \u203A ${p.path}`,g,v)})).sort(R))}if(X(e)){const h=await x(ne(n,{password:o,signal:r,maxEntryBytes:A.maxEntryBytes}).catch(l=>{throw l instanceof Error&&/multi.?volume|multi.?disk/i.test(l.message)?new Error("Archive volumes are missing. Select the .zip file and all .z01, .z02 parts together."):l}),r);return b(r),c([...h.values()].map(l=>({name:l.name,type:l.directory?"directory":"file",size:l.directory?void 0:l.size,modified:l.modified,encrypted:l.encrypted,read:(m=r)=>T(u=>l.bytes(u,m),i,`${t} \u203A ${l.name}`,m,o)})).sort(R))}if(e==="tar")return c(Z(n));if(e==="gz"||e==="tgz"){const h=await D(()=>ce(n),void 0,a,r);if(b(r),e==="tgz"||le(h))return c(Z(h));const l=t.replace(/\.gz$/i,"")||"file";return c([{name:l,type:"file",size:h.byteLength,read:async()=>h.slice()}])}throw new Error(`Archive preview does not support ${e||"unknown"} files.`)}function Z(n){const e=[],t=new Map;let r=new Map,i;for(let a=0;a+512<=n.byteLength;){if(e.length>A.maxEntries)throw new Error("Archive contains too many entries.");const o=n.subarray(a,a+512);if(o.every(f=>f===0))break;if(!J(o))throw new Error("Invalid TAR header checksum.");const s=String.fromCharCode(o[156]??0),c=["x","g","L","K"].includes(s),d=f=>r.get(f)??t.get(f),h=c?void 0:d("size"),l=h?$(h,true):I(o,124,12);if(!Number.isSafeInteger(l)||l<0)throw new Error("Invalid TAR entry size.");const m=a+512,u=m+Math.ceil(l/512)*512;if(!Number.isSafeInteger(u)||u>n.byteLength)throw new Error("Truncated TAR entry.");if(c){const f=n.subarray(m,m+l);if(s==="L"){const z=f.indexOf(0);i=new TextDecoder().decode(z<0?f:f.subarray(0,z))}else if(s!=="K"){const z=ae(f);for(const[N,U]of z)s==="g"?U?t.set(N,U):t.delete(N):r.set(N,U)}a=u;continue}const v=j(o,345,155),y=j(o,0,100),p=P(d("path")||i||(v?`${v}/${y}`:y)),g=d("mtime"),w=g?$(g,false):I(o,136,12);if(r=new Map,i=void 0,p&&(s==="\0"||s==="0"||s==="5")){const f=s==="5",z=f?`${p.replace(/\/+$/,"")}/`:p;e.push({name:z,type:f?"directory":"file",size:f?void 0:l,modified:g||w>0?w*1e3:void 0,read:async()=>f?new Uint8Array:n.slice(m,m+l)})}a=u}return e.sort(R)}function ae(n){const e=new Map,t=new TextDecoder;for(let r=0;r<n.length;){const i=n.indexOf(32,r);if(i<0)throw new Error("Invalid TAR extended header length.");const a=$(t.decode(n.subarray(r,i)),true),o=r+a;if(o<=i+1||o>n.length||n[o-1]!==10)throw new Error("Truncated TAR extended header.");const s=t.decode(n.subarray(i+1,o-1)),c=s.indexOf("=");if(c<=0)throw new Error("Invalid TAR extended header field.");e.set(s.slice(0,c),s.slice(c+1)),r=o}return e}function $(n,e){const t=Number(n);if(!(e?/^\d+$/:/^-?\d+(?:\.\d+)?$/).test(n)||!Number.isFinite(t)||e&&!Number.isSafeInteger(t))throw new Error("Invalid TAR extended header number.");return t}async function ce(n){const e=[];let t=0;const r=new ee(o=>{if(t+=o.byteLength,t>A.maxEntryBytes)throw new Error("Expanded GZIP exceeds the preview size limit.");e.push(o)});for(let o=0;o<n.length;o+=4096)r.push(n.subarray(o,o+4096),o+4096>=n.length);const i=new Uint8Array(t);let a=0;for(const o of e)i.set(o,a),a+=o.byteLength;return i}function le(n){return n.byteLength>=512&&!n.subarray(0,512).every(e=>e===0)&&J(n.subarray(0,512))}function J(n){const e=I(n,148,8);let t=0;for(let r=0;r<512;r+=1)t+=r>=148&&r<156?32:n[r]??0;return e===t}function j(n,e,t){const r=n.subarray(e,e+t),i=r.indexOf(0);return new TextDecoder().decode(i>=0?r.subarray(0,i):r).trim()}function I(n,e,t){const r=j(n,e,t).replace(/^0+/,"").trim();return r?Number.parseInt(r,8):0}function L(n){const e=String(n||"/").trim().replace(/\\/g,"/");if(!e||e==="/")return"/";const t=e.replace(/^\/+/,"").replace(/\/+$/,"");return t?`/${t}/`:"/"}function he(n){return L(n)!=="/"}function de(n){const e=L(n);if(e==="/")return"/";const r=e.replace(/^\/|\/$/g,"").split("/").filter(Boolean);return r.pop(),r.length?`/${r.join("/")}/`:"/"}function G(n,e){const t=L(n),r=t==="/"?"":t.replace(/^\/|\/$/g,""),i=String(e).replace(/\\/g,"/").replace(/\/+$/g,"").replace(/^\/+/,""),a=[r,i].filter(Boolean).join("/");return a?`/${a}/`:"/"}function ue(n){const e=new Map;for(const t of n){let r="";for(let i=t.name.indexOf("/");i>=0;i=t.name.indexOf("/",i+1)){const a=t.name.slice(0,i+1),o=e.has(a);o||e.set(a,[]),r&&(!o||i===t.name.length-1)&&e.get(r).push(t),r=a}r&&!t.name.endsWith("/")&&e.get(r).push(t)}return e}function me(n,e){const t=L(e),r=t==="/"?"":t.slice(1),i=new Map(n.map(o=>[o.name,o])),a=new Map;for(const o of n){if(r&&!o.name.startsWith(r))continue;const s=r?o.name.slice(r.length):o.name;if(!s)continue;const c=s.split("/",1)[0]??s;if(!c)continue;const d=s.length>c.length,h=d?`${c}/`:c;if(!a.has(h)){if(d){const l=i.get(`${r}${h}`);a.set(h,{name:h,type:"directory",modified:l==null?void 0:l.modified});continue}a.set(h,{name:h,type:"file",size:o.size,modified:o.modified})}}return[...a.values()].sort(R)}function M(n,e){const t=String(n).trim().toLowerCase().split(/[?#]/,1)[0]??"";if(t.endsWith(".tar.gz")||t.endsWith(".tgz"))return"tgz";const r=/\.(7z|zip)\.\d{3,}$/.exec(t);return r?r[1]:/\.[r-y]\d{2}$/.test(t)?"rar":/\.z\d{2,}$/.test(t)?"zip":W(e||t.split(".").pop())}function pe(n){return ie(n)||Q(M(n))}async function ve(n,e){b(e.signal);const t=e.descriptor.archiveVolumes??[];if(t.length>=C.maxVolumes)throw new Error("Archive contains too many volumes.");const r=e.descriptor.name??"archive",i=[{name:r,source:n},...t],a=l=>l instanceof Blob?l.size:typeof l=="string"?0:l.byteLength;if(i.reduce((l,m)=>l+a(m.source),0)>C.maxBytes)throw new Error("Archive volumes exceed the preview input size limit.");const o=F(r,i);if(t.length&&(!o||o.files.length!==i.length))throw new Error("Archive volumes do not belong to the same archive.");const s=async l=>new Uint8Array(await fe(l.source,e)),c=await s(i[0]);let d=c.byteLength;const h=[];for(const l of t){const m=a(l.source);if(d+m>C.maxBytes)throw new Error("Archive volumes exceed the preview input size limit.");const u=await s(l);if(d+=u.byteLength,d>C.maxBytes)throw new Error("Archive volumes exceed the preview input size limit.");h.push({name:l.name,bytes:u})}return{bytes:c,volumes:h}}function Q(n){return X(n)||["tar","tgz","gz","rar","7z"].includes(n)}function X(n){return["zip","jar","war","ear","apk","ipa"].includes(n)}async function fe(n,e){const t=e.signal;if(b(t),typeof n=="string"){const r=a=>{var o;(o=a.body)==null||o.cancel().catch(()=>{})},i=await x(fetch(n,{signal:t}),t,r);try{if(b(t),!i.ok)throw new Error(`Failed to load archive source: ${i.status} ${i.statusText}`.trim());return await x(i.arrayBuffer(),t)}catch(a){throw r(i),a}}if(ArrayBuffer.isView(n)){const r=new Uint8Array(n.buffer,n.byteOffset,n.byteLength),i=new Uint8Array(r.byteLength);return i.set(r),i.buffer}return n instanceof ArrayBuffer?n.slice(0):n instanceof Blob?x(n.arrayBuffer(),t):new TextEncoder().encode(String(n)).buffer}function b(n){if(n!=null&&n.aborted)throw new DOMException("Archive preview aborted.","AbortError")}function x(n,e,t){return e?new Promise((r,i)=>{let a=false;const o=()=>{a||(a=true,e.removeEventListener("abort",o),i(new DOMException("Archive preview aborted.","AbortError")))};e.addEventListener("abort",o,{once:true}),e.aborted&&o(),n.then(s=>{if(a){t==null||t(s);return}a=true,e.removeEventListener("abort",o),r(s)},s=>{a||(a=true,e.removeEventListener("abort",o),i(s))}).catch(()=>{})}):n}function ye(){const n=document.createElement("thead"),e=document.createElement("tr");for(const t of["Name","Type","Size","Modified"]){const r=document.createElement("th");r.textContent=t,e.appendChild(r)}return n.appendChild(e),n}function O(){const n=document.createElement("span");return n.className="archivev-breadcrumb-separator",n.textContent="\u203A",n.setAttribute("aria-hidden","true"),n}function K(n){const t=(n.toLowerCase().split(/[?#]/,1)[0]??"").split(/[\\/]/).pop()??"",r=t.lastIndexOf(".");return r>=0?t.slice(r+1):""}function R(n,e){return n.type!==e.type?n.type==="directory"?-1:1:n.name.localeCompare(e.name)}function we(n){if(n<1024)return`${n} B`;const e=["KB","MB","GB","TB"];let t=n/1024,r=0;for(;t>=1024&&r<e.length-1;)t/=1024,r+=1;return`${t.toFixed(t>=10?0:1)} ${e[r]}`}function W(n){return String(n??"").trim().replace(/^\./,"").toLowerCase()}function P(n){const e=String(n??"");if(!/[\\%?#:]|(?:^|\/)\.\.?(?:\/|$)|\/\/|^\/|\/$|^\s|\s$/.test(e))return e;const t=e.trim().replace(/\\/g,"/").replace(/^[a-z]+:\/\/[^/]+\//i,"").replace(/^[a-z]:\//i,"").replace(/^\/+/,"").split(/[?#]/)[0]??"",r=[];for(const i of t.split("/"))if(!(!i||i===".")){if(i===".."){r.pop();continue}r.push(be(i))}return r.join("/")}function k(n){const e=new Uint8Array(n.byteLength);return e.set(n),e.buffer}function be(n){try{return decodeURIComponent(n)}catch{return n}}function ge(n,e,t=false){var a;const r=t?n:P(n),i=W((a=r.split("?")[0])==null?void 0:a.split(".").pop());return(e==null?void 0:e[r])??(e==null?void 0:e[i])??Ee(i)}function Ee(n){return{aac:"audio/aac",avif:"image/avif",bin:"application/octet-stream",bmp:"image/bmp",css:"text/css",gif:"image/gif",flac:"audio/flac",gltf:"model/gltf+json",html:"text/html",jpeg:"image/jpeg",jpg:"image/jpeg",json:"application/json",ktx2:"image/ktx2",m4a:"audio/mp4",m4v:"video/mp4",mov:"video/quicktime",mp3:"audio/mpeg",mp4:"video/mp4",obj:"model/obj",oga:"audio/ogg",ogg:"audio/ogg",ogv:"video/ogg",opus:"audio/ogg",pdf:"application/pdf",png:"image/png",svg:"image/svg+xml",txt:"text/plain",wav:"audio/wav",webm:"video/webm",webp:"image/webp",xhtml:"application/xhtml+xml"}[n]}function xe(n){return new Worker(""+new URL("../assets/archive-worker-Cy3bEdVg.js",import.meta.url).href,{name:n==null?void 0:n.name})}const Ce=()=>new URL("../archive/7zz.wasm",import.meta.url).href,S=new Map;function ze(n){const e=S.get(n);if(e)return e;const t=fetch(n).then(async r=>{var a;if(!r.ok)throw new Error(`Unable to load the archive engine (${r.status}).`);const i=(a=r.headers.get("content-type"))==null?void 0:a.split(";",1)[0];return typeof WebAssembly.compileStreaming=="function"&&i==="application/wasm"?WebAssembly.compileStreaming(r):WebAssembly.compile(await r.arrayBuffer())});return S.set(n,t),t.catch(()=>{S.get(n)===t&&S.delete(n)}),t}function Ae(n,e){var t,r;if(e==null||e.throwIfAborted(),/^(blob|data):/.test(import.meta.url)||((t=globalThis.location)==null?void 0:t.protocol)==="file:")throw new Error("RAR, 7z and multi-volume ZIP need separate archive engine files. Use filens preview FILE --mode serve, or deploy the archive assets over HTTP(S).");if(1+(((r=n.volumes)==null?void 0:r.length)??0)>C.maxVolumes||n.bytes.byteLength+(n.volumes??[]).reduce((i,a)=>i+a.bytes.byteLength,0)>C.maxBytes)throw new Error("Archive volumes exceed the preview input limit.");return new Promise((i,a)=>{const o=new xe;let s=false;const c=(l,m)=>{s||(s=true,clearTimeout(h),e==null||e.removeEventListener("abort",d),o.terminate(),m?a(m):i(l))},d=()=>c(void 0,new DOMException("Archive preview aborted.","AbortError")),h=setTimeout(()=>c(void 0,new Error("Archive processing exceeded the preview time limit.")),6e4);e==null||e.addEventListener("abort",d,{once:true}),o.onmessage=l=>{const{result:m,error:u}=l.data;c(m,u?u.code==="password_required"||u.code==="password_invalid"?new oe(u.code):new Error(u.message):void 0)},o.onerror=()=>c(void 0,new Error("The archive WASM worker could not be loaded or stopped unexpectedly.")),o.onmessageerror=()=>c(void 0,new Error("The archive worker returned an invalid response.")),(async()=>{var g;const l=Ce(),m=await ze(l);if(s)return;const u=n.bytes.slice(),v=(g=n.volumes)==null?void 0:g.map(w=>({name:w.name,bytes:w.bytes.slice()})),y={...n,bytes:u,volumes:v,wasmUrl:l,maxEntries:A.maxEntries,maxEntryBytes:A.maxEntryBytes},p=[u.buffer,...(v??[]).map(w=>w.bytes.buffer)];try{o.postMessage({...y,wasmModule:m},p)}catch(w){if(!(w instanceof DOMException)||w.name!=="DataCloneError")throw w;o.postMessage(y,p)}})().catch(l=>c(void 0,l instanceof Error?l:new Error(String(l))))})}const Le=Object.freeze(Object.defineProperty({__proto__:null,runArchiveWorker:Ae},Symbol.toStringTag,{value:"Module"}));export{Re as a,Ne as c};
@@ -1 +1 @@
1
- var te=Object.defineProperty;var re=(e,t,r)=>t in e?te(e,t,{enumerable:true,configurable:true,writable:true,value:r}):e[t]=r;var B=(e,t,r)=>re(e,typeof t!="symbol"?t+"":t,r);import{K as ie}from"./core-BLayEJn5.js";var v=Object.freeze({readBytes:1048576,metadataBytes:16777216,indexSamples:25e4,frames:4,rawFrameBytes:67108864,encodedBytes:8388608,bufferAheadSeconds:8,bufferBehindSeconds:4,operationTimeoutMs:1e4});function J(){return new DOMException("Media operation cancelled","AbortError")}function k(e,t=0){return typeof e=="number"&&Number.isFinite(e)&&e>=t}function g(e,t,r=v.operationTimeoutMs){return t!=null&&t.aborted?(Promise.resolve(e).catch(()=>{}),Promise.reject(t.reason||J())):new Promise((i,o)=>{let s=()=>{clearTimeout(d),t==null||t.removeEventListener("abort",n)},a=(l,c)=>{s(),l(c)},n=()=>a(o,(t==null?void 0:t.reason)||J()),d=setTimeout(()=>a(o,new DOMException("Media operation timed out","TimeoutError")),r);t==null||t.addEventListener("abort",n,{once:true}),Promise.resolve(e).then(l=>a(i,l),l=>a(o,l)),t!=null&&t.aborted&&n()})}function X(e,t){return g(e.then(r=>(t.aborted&&(r.close(),t.throwIfAborted()),r)),t)}async function _(e,t,r=v.operationTimeoutMs){let i=performance.now()+r;for(;!e();){if(t==null||t.throwIfAborted(),performance.now()>=i)throw new DOMException("Media queue timed out","TimeoutError");await g(new Promise(o=>setTimeout(o,4)),t,r)}t==null||t.throwIfAborted()}function Q(e){"@babel/helpers - typeof";return Q=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Q(e)}function ae(e,t){if(Q(e)!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var i=r.call(e,t);if(Q(i)!="object")return i;throw TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function oe(e){var t=ae(e,"string");return Q(t)=="symbol"?t:t+""}function p(e,t,r){return(t=oe(t))in e?Object.defineProperty(e,t,{value:r,enumerable:true,configurable:true,writable:true}):e[t]=r,e}var H=class{constructor(e=globalThis){p(this,"env",void 0),this.env=e}playback(e,t){var r;if(!e)return"unknown";try{if(t==="mse"||t==="datachannel-file"){let o=this.env.ManagedMediaSource||this.env.MediaSource;return o!=null&&o.isTypeSupported&&o.isTypeSupported(e)?"supported":"unsupported"}if(t==="webrtc-rtp")return"unknown";let i=this.env.nativeSupport?this.env.nativeSupport(e):(r=this.env.document)==null?void 0:r.createElement("video").canPlayType(e);return i==="probably"?"supported":i==="maybe"?"unknown":i===""?"unsupported":"unknown"}catch{return"unknown"}}async video(e,t,r){var a;r==null||r.throwIfAborted();let i=e.hardwareAcceleration||"prefer-hardware",o={support:"unsupported",preference:i,execution:"unknown"},s=t==="decode"?this.env.VideoDecoder:this.env.VideoEncoder;if(!this.env.isSecureContext||!(s!=null&&s.isConfigSupported))return{...o,reason:"api-unavailable"};if(typeof e.codec!="string"||!e.codec.trim()||["width","height","codedWidth","codedHeight","framerate","bitrate"].some(n=>e[n]!==void 0&&!k(e[n],1)))return{...o,reason:"invalid-configuration"};if(((a=e.description)==null?void 0:a.byteLength)>1048576)return{...o,reason:"configuration-too-large"};try{let n={...e,hardwareAcceleration:i},d=await g(s.isConfigSupported(n),r);return{...o,support:d.supported?"supported":"unsupported",configuration:d.config}}catch(n){return r==null||r.throwIfAborted(),{...o,reason:n instanceof Error?n.message:"configuration-rejected"}}}rtp(){let e=t=>{var r,i;try{return((i=(r=t==null?void 0:t.getCapabilities)==null?void 0:r.call(t,"video"))==null?void 0:i.codecs)||[]}catch{return[]}};return{sender:e(this.env.RTCRtpSender),receiver:e(this.env.RTCRtpReceiver)}}async prediction(e,t){var r;t==null||t.throwIfAborted();try{let i=(r=this.env.navigator)==null?void 0:r.mediaCapabilities;return i!=null&&i.decodingInfo?await g(i.decodingInfo(e),t):null}catch{return t==null||t.throwIfAborted(),null}}},G=new TextDecoder("ascii"),se=new Set(["moov","trak","mdia","minf","stbl"]),ne=new Set(["stsz","stz2","stts","ctts","stsc","stco","co64","stss"]);function de(e){let t=new DataView(e.buffer,e.byteOffset,e.byteLength),r=0,i=0,o=0,s=(a,n,d)=>{if(d>12)throw Error("MP4 metadata nesting budget exceeded");for(;a<n;){if(++o>v.indexSamples||n-a<8)throw Error("Invalid MP4 metadata box");let l=G.decode(e.subarray(a+4,a+8)),c=t.getUint32(a),h=8;if(c===1){if(n-a<16)throw Error("Invalid MP4 box size");c=Number(t.getBigUint64(a+8)),h=16}else c===0&&(c=n-a);if(!Number.isSafeInteger(c)||c<h||c>n-a)throw Error("Invalid MP4 box size");if(l==="cmov")throw Error("Compressed MP4 metadata is unsupported");if(l==="trak"&&++i>16)throw Error("Media track index budget exceeded");if(ne.has(l)){let w=a+h+(l==="stsz"||l==="stz2"?8:4);if(w+4>a+c)throw Error("Truncated MP4 sample table");let u=t.getUint32(w);if((l==="stsz"||l==="stz2")&&(r+=u),u>v.indexSamples||r>v.indexSamples)throw Error("Media index budget exceeded")}se.has(l)&&s(a+h,a+c,d+1),a+=c}};s(0,e.length,0)}async function ce(e,t){let r=[],i=0,o=0,s=async(a,n)=>{if(!Number.isSafeInteger(n)||n<=0||i+n>v.metadataBytes)throw Error("Media metadata budget exceeded");let d=new Uint8Array(n);for(let l=0;l<n;){let c=Math.min(n-l,v.readBytes),h=await g(e.read(a+l,a+l+c,t),t);if(!h.length||h.length>c)throw Error("Truncated MP4 metadata");d.set(h,l),l+=h.length,i+=h.length}return d};for(let a=0;a<4096;a++){let n=await s(o,8),d=new DataView(n.buffer),l=G.decode(n.subarray(4,8)),c=d.getUint32(0),h=8;if(c===1?(c=Number(new DataView((await s(o+8,8)).buffer).getBigUint64(0)),h=16):c||(c=(e.size??NaN)-o),!Number.isSafeInteger(c)||c<h||!Number.isSafeInteger(o+c)||e.size!==void 0&&o+c>e.size)throw Error("Invalid MP4 box size");if(l==="ftyp"||l==="moov"){let w=await s(o,c);if(l==="moov"&&de(w),r.push({offset:o,bytes:w}),l==="moov"){if(!r.some(u=>G.decode(u.bytes.subarray(4,8))==="ftyp"))throw Error("Missing MP4 file type");return{boxes:r,readBytes:i}}}if(o+=c,e.size!==void 0&&o>=e.size)break}throw Error("MP4 metadata not found within the box budget")}var ge=class{codecFamily(e){return/^(avc1|avc3)/i.test(e)?"avc":/^(hvc1|hev1)/i.test(e)?"hevc":/^av01/i.test(e)?"av1":/^(vp8|vp08)/i.test(e)?"vp8":/^(vp9|vp09)/i.test(e)?"vp9":"unknown"}async sniff(e,t){let r=await g(e.read(0,Math.min(e.size??4096,4096),t),t),i=new TextDecoder().decode(r.subarray(4,12));return i.startsWith("ftyp")?i.slice(4).startsWith("qt")?"quicktime":"mp4":r[0]===26&&r[1]===69&&r[2]===223&&r[3]===163?new TextDecoder().decode(r).includes("webm")?"webm":"matroska":"unknown"}async inspect(e,t){return(await this.openMp4(e,t)).format}async openMp4(e,t){let r=await this.sniff(e,t);if(r!=="mp4"&&r!=="quicktime")throw Error(`Container inspection unavailable: ${r}`);let i=await ce(e,t),{createFile:o,DataStream:s}=await import("./mp4box.all-Bw_Tlr0T-D0URDfA1.js").then(c=>c.t),a=o(false),n,d;a.onReady=c=>{n=c},a.onError=c=>{d=Error(String(c))};let l=i.readBytes;try{let c=0;for(let{bytes:u}of i.boxes){t==null||t.throwIfAborted();let m=u.buffer.slice(u.byteOffset,u.byteOffset+u.byteLength);if(m.fileStart=c,c+=u.byteLength,a.appendBuffer(m),d)throw d}if(!n)throw Error("Incomplete MP4 metadata");let h=n.tracks.map(u=>{var x,F,I,T;let m=a.getTrackById(u.id).mdia.minf.stbl.stsd.entries[0],b=m.avcC||m.hvcC||m.vpcC||m.av1C,M;if(b){let P=new s;b.write(P),M=new Uint8Array(P.buffer.slice(8))}return{id:u.id,kind:u.type==="video"||u.type==="audio"?u.type:["text","subt","sbtl"].includes(u.type)?"text":"other",codec:u.codec,family:this.codecFamily(u.codec),width:(x=u.video)==null?void 0:x.width,height:(F=u.video)==null?void 0:F.height,sampleRate:(I=u.audio)==null?void 0:I.sample_rate,channels:(T=u.audio)==null?void 0:T.channel_count,timescale:u.timescale,duration:u.duration/u.timescale,description:M,encrypted:!!m.sinf||/^(encv|enca)/.test(u.codec)}}),w={container:r,tracks:h,duration:n.duration/n.timescale,fragmented:n.isFragmented,mime:`video/${r==="quicktime"?"quicktime":"mp4"}; codecs="${h.map(u=>u.codec).join(", ")}"`};if(h.length>16||n.tracks.some(u=>u.nb_samples>v.indexSamples))throw Error("Media track index budget exceeded");return a.stop(),{file:a,movie:n,format:w,readBytes:l}}catch(c){throw a.stop(),c}}};function Y(e){let t=e.performance;return!!t&&Number.isFinite(t.elapsedMs)&&t.elapsedMs>=1e3&&t.frames>=15&&Number.isFinite(t.fps)&&e.fps>0&&e.fps<=15&&t.targetFps>=e.fps&&t.targetFps<=15&&Math.min(t.fps,t.frames*1e3/t.elapsedMs)>=t.targetFps*1.25&&t.codecString===e.codecString&&t.width===e.width&&t.height===e.height&&e.width>0&&e.height>0&&e.width<=640&&e.height<=360}var le=class{select(e,t){var r;return(r=e.filter(i=>i.playback!=="supported"||i.transport!=="supported"||i.decode!=="supported"||i.encode!=="supported"||i.codec==="unknown"||t==="webrtc-rtp"&&i.remote!==true?false:i.preference!=="prefer-software"&&i.execution!=="confirmed-software"||Y(i)).map((i,o)=>{let s=i.preference==="prefer-software"||i.execution==="confirmed-software",a=i.codec==="av1"&&i.remote===true&&i.execution==="confirmed-hardware";return{candidate:i,priority:s?10:a?0:i.codec==="avc"?1:i.codec==="hevc"?2:3,index:o}}).sort((i,o)=>i.priority-o.priority||i.index-o.index)[0])==null?void 0:r.candidate}},he=class{constructor(e=new le){p(this,"negotiator",void 0),this.negotiator=e}decide(e){if(e.failure&&e.failure!=="unsupported")return{kind:"existing-fallback",reason:e.failure};if(!e.requiresProcessing&&e.direct!=="unsupported")return{kind:"native-direct",reason:"original-playable"};if(e.preserveTracks===false)return{kind:"existing-fallback",reason:"track-preservation-unavailable"};if(!e.requiresProcessing&&e.samplesPlayable)return{kind:"remux",reason:"preserve-original-samples"};if(!e.requiresProcessing&&e.videoPlayable&&e.audioConversionAvailable)return{kind:"audio-convert",reason:"preserve-original-video"};if(e.sourceDecode!=="supported")return{kind:"existing-fallback",reason:"source-decoder-unavailable"};let t=this.negotiator.select(e.candidates,e.path);return t?{kind:"client-transcode",candidate:t,reason:"compatible-output-required"}:{kind:"existing-fallback",reason:"no-feasible-client-configuration"}}},K=class{constructor(e={}){p(this,"now",void 0),p(this,"limit",void 0),p(this,"started",void 0),p(this,"stages",void 0),p(this,"network",{}),p(this,"queueDepth",0),p(this,"droppedFrames",0),p(this,"utilization",null),p(this,"pressure",""),p(this,"streak",0),p(this,"healthy",0),p(this,"lastChange",-1/0),p(this,"lastObservation",-1/0),this.now=e.now||(()=>performance.now()),this.limit=Math.max(1,Math.min(1024,e.sampleLimit||256)),this.reset()}reset(){this.started=this.now(),this.stages={decode:{frames:0,values:[]},encode:{frames:0,values:[]},process:{frames:0,values:[]}},this.network={},this.queueDepth=this.droppedFrames=this.streak=this.healthy=0,this.pressure="",this.utilization=null,this.lastChange=this.lastObservation=-1/0}record(e,t,r=1){if(!k(t)||!k(r,1))return;let i=this.stages[e];i.frames+=r,i.values.push(t),i.values.length>this.limit&&i.values.shift()}observeQueue(e){k(e)&&(this.queueDepth=e)}observeDropped(e){k(e)&&(this.droppedFrames=e)}observeNetwork(e){for(let t of["rttMs","packetLoss","availableBitrate"]){let r=e[t];k(r)&&(t!=="packetLoss"||r<=1)?this.network[t]=r:delete this.network[t]}}observeUtilization(e,t,r){!r||e!==null&&(!k(e)||e>100)||t!==null&&(!k(t)||t>100)||(this.utilization={cpu:e,gpu:t,source:r})}snapshot(){var r,i,o;let e=Math.max(0,this.now()-this.started),t=s=>{let a=this.stages[s],n=[...a.values].sort((d,l)=>d-l);return{frames:a.frames,samples:n.length,fps:e?a.frames*1e3/e:0,averageMs:n.length?n.reduce((d,l)=>d+l,0)/n.length:0,p95Ms:n.length?n[Math.ceil(n.length*.95)-1]:0}};return{elapsedMs:e,encode:t("encode"),decode:t("decode"),process:t("process"),encoderQueueDepth:this.queueDepth,droppedFrames:this.droppedFrames,cpuUsage:((r=this.utilization)==null?void 0:r.cpu)??null,gpuVideoUtilization:((i=this.utilization)==null?void 0:i.gpu)??null,utilizationSource:((o=this.utilization)==null?void 0:o.source)??null,network:{rttMs:this.network.rttMs??null,packetLoss:this.network.packetLoss??null,availableBitrate:this.network.availableBitrate??null}}}adapt(e){let t=this.now();if(e.active===false||!k(e.targetFps,1))return this.streak=this.healthy=0,this.pressure="",null;if(t-this.lastObservation<500)return null;this.lastObservation=t;let r=e.networkLimited===true||k(e.availableBitrate,1)&&k(e.demandBitrate,1)&&e.availableBitrate<e.demandBitrate*.85||e.packetLoss>.03,i=e.processingLimited===true||e.queueDepth>=3||e.processingLimited!==false&&(e.encodeFps!==void 0&&e.encodeFps<e.targetFps*.85||e.decodeFps!==void 0&&e.decodeFps<e.targetFps*.85||e.totalFrames>=30&&e.droppedFrames/e.totalFrames>=.15),o=r&&i?"mixed":r?"network":i?"processing":"";return this.streak=o&&o===this.pressure?this.streak+1:+!!o,this.pressure=o,this.healthy=o?0:this.healthy+1,t-this.lastChange<5e3?null:this.streak>=3?(this.streak=0,this.lastChange=t,{direction:"down",bottleneck:o,bitrateFactor:.8,fpsFactor:i?.8:1,resolutionFactor:i?.8:1}):this.healthy>=10&&k(e.encodeFps,e.targetFps)&&k(e.decodeFps,e.targetFps)&&k(e.availableBitrate,(e.demandBitrate||1/0)*1.25)?(this.healthy=0,this.lastChange=t,{direction:"up",bottleneck:"none",bitrateFactor:1.1,fpsFactor:1.1,resolutionFactor:1.1}):null}},D=class extends Error{constructor(e,t){super(`${e}: ${t instanceof Error?t.message:String(t)}`),p(this,"stage",void 0),this.stage=e,this.name="MediaCodecFailure"}},ve=class{constructor(e=globalThis){p(this,"env",void 0),p(this,"controller",void 0),this.env=e}close(){var e;(e=this.controller)==null||e.abort()}async runWithFallback(e,t){var r;try{return await this.run(e)}catch(i){(r=e.signal)==null||r.throwIfAborted();let o=e.encoderConfig,s=e.decoderConfig;if(!(i instanceof D)||o.hardwareAcceleration==="prefer-software"||!(s.codedWidth>0&&s.codedHeight>0&&s.codedWidth<=640&&s.codedHeight<=360)||!Y({codecString:o.codec,width:o.width,height:o.height,fps:o.framerate,performance:t.softwarePerformance}))throw i;return await g(t.resetOutput(),e.signal),this.run({...e,decoderConfig:{...e.decoderConfig,hardwareAcceleration:"prefer-software"},encoderConfig:{...o,hardwareAcceleration:"prefer-software"}})}}async run(e){var N,R,q;if(this.controller)throw Error("Media transcoder is already running");let t=this.controller=new AbortController,r=t.signal,i=()=>{var S;return t.abort((S=e.signal)==null?void 0:S.reason)};(N=e.signal)==null||N.addEventListener("abort",i,{once:true}),(R=e.signal)!=null&&R.aborted&&i();let o=new K,s=new H(this.env),a,n,d,l=new Set,c=new Map,h=new Map,w=Promise.resolve(),u=Promise.resolve(),m=0,b=0,M=0,x=0,F=0,I=-1/0,T=S=>{r.aborted||t.abort(S)},P=e.onMetrics?setInterval(()=>{try{e.onMetrics(o.snapshot())}catch(S){T(S)}},1e3):void 0;try{let S={optimizeForLatency:true,...e.decoderConfig},U=await s.video(S,"decode",r),O=await s.video(e.encoderConfig,"encode",r);if(U.support!=="supported"||O.support!=="supported")throw new D("configure","Media codec configuration unsupported");n=new this.env.VideoEncoder({error:f=>T(new D("encode",f)),output:(f,L)=>{r.aborted||(o.record("encode",performance.now()-(h.get(f.timestamp)??performance.now())),h.delete(f.timestamp),++x>v.frames||(M+=f.byteLength)>v.encodedBytes?T(Error("Encoded output budget exceeded")):u=u.then(async()=>{r.throwIfAborted(),await g(e.sink(f,L),r)}).catch(T).finally(()=>{x--,M-=f.byteLength}))}});try{n.configure(O.configuration||e.encoderConfig)}catch(f){throw new D("configure",f)}a=new this.env.VideoDecoder({error:f=>T(new D("decode",f)),output:f=>{var C;if(r.aborted){f.close();return}let L=((C=f.allocationSize)==null?void 0:C.call(f))||f.displayWidth*f.displayHeight*4;o.record("decode",performance.now()-(c.get(f.timestamp)??performance.now())),c.delete(f.timestamp),b++,m+=L,b>v.frames||m>v.rawFrameBytes?(b--,m-=L,f.close(),T(Error("Decoded frame budget exceeded"))):(l.add(f),w=w.then(async()=>{let A=f;try{if(r.throwIfAborted(),f.timestamp<(e.startTimestamp??-1/0))return;let z=e.encoderConfig.framerate;if(z&&f.timestamp-I<1e6/z-1){o.observeDropped(++y);return}let E=performance.now();if(e.process&&(A=await X(e.process(f,r),r)),A!==f&&l.add(A),o.record("process",performance.now()-E),await _(()=>n.encodeQueueSize<v.frames&&x<v.frames,r),r.throwIfAborted(),h.size>=128)throw Error("Encoder timestamp budget exceeded");h.set(A.timestamp,performance.now()),n.encode(A,{keyFrame:F++%Math.max(1,Math.round((z||30)*2))===0}),I=A.timestamp,o.observeQueue(n.encodeQueueSize)}finally{A!==f&&(A.close(),l.delete(A)),f.close(),l.delete(f),b--,m-=L}}).catch(T))}});try{a.configure(U.configuration||S)}catch(f){throw new D("configure",f)}let y=0;for(d=e.chunks(r)[Symbol.asyncIterator]();;){let f=await g(d.next(),r);if(f.done)break;if(await _(()=>a.decodeQueueSize<v.frames&&c.size+b<v.frames&&x<2,r),f.value.byteLength>v.encodedBytes)throw Error("Encoded input budget exceeded");if(c.size>=128)throw Error("Decoder timestamp budget exceeded");c.set(f.value.timestamp,performance.now()),a.decode(f.value)}return await g(a.flush(),r),await g(w,r),r.throwIfAborted(),await g(n.flush(),r),await g(u,r),r.throwIfAborted(),o.observeQueue(0),o.snapshot()}finally{clearInterval(P),t.abort(),a&&a.state!=="closed"&&a.close(),n&&n.state!=="closed"&&n.close();for(let S of l)S.close();l.clear(),c.clear(),h.clear(),d!=null&&d.return&&await g(Promise.resolve().then(()=>d.return()),void 0,1e3).catch(()=>{}),(q=e.signal)==null||q.removeEventListener("abort",i),this.controller=void 0}}},be=class{constructor(e=globalThis){p(this,"env",void 0),this.env=e}async run(e,t={}){var T,P,N,R,q,S,U,O;let r=new AbortController,i=r.signal,o=()=>{var y;return r.abort((y=t.signal)==null?void 0:y.reason)};(T=t.signal)==null||T.addEventListener("abort",o,{once:true}),(P=t.signal)!=null&&P.aborted&&o();let s=setTimeout(()=>r.abort(new DOMException("Codec trial timed out","TimeoutError")),t.timeoutMs||1e4),a=new K,n=await new H(this.env).video(e,"encode",i).catch(y=>{var f;throw clearTimeout(s),(f=t.signal)==null||f.removeEventListener("abort",o),y}),d,l,c=false,h=0,w=0,u=Promise.resolve(),m=0,b=0,M=new Map,x=new Map,F=y=>{i.aborted||r.abort(y)},I=y=>({...n,execution:"unknown",initialized:c,completed:!y&&h>0&&w>0,error:y,metrics:a.snapshot()});try{if(n.support!=="supported")return I(n.reason||"configuration-unsupported");if(e.width*e.height*4>v.rawFrameBytes)return I("Frame budget exceeded");if(!this.env.VideoFrame||!this.env.VideoDecoder)return I("Frame or decoder API unavailable");let y=this.env.OffscreenCanvas?new this.env.OffscreenCanvas(e.width,e.height):(N=this.env.document)==null?void 0:N.createElement("canvas");if(!y)return I("Canvas unavailable");y.width=e.width,y.height=e.height,(q=(R=y.getContext)==null?void 0:R.call(y,"2d"))==null||q.clearRect(0,0,e.width,e.height),l=new this.env.VideoDecoder({error:F,output:E=>{a.record("decode",performance.now()-(x.get(E.timestamp)??performance.now())),x.delete(E.timestamp),w++,E.close()}}),d=new this.env.VideoEncoder({error:F,output:(E,V)=>{i.aborted||(a.record("encode",performance.now()-(M.get(E.timestamp)??performance.now())),M.delete(E.timestamp),h++,++m>v.frames||(b+=E.byteLength)>v.encodedBytes?F(Error("Probe output budget exceeded")):u=u.then(async()=>{if(i.throwIfAborted(),l.state==="unconfigured"){if(!V.decoderConfig)throw Error("Encoder omitted decoder configuration");let j={...V.decoderConfig,optimizeForLatency:true,hardwareAcceleration:e.hardwareAcceleration||"prefer-hardware"};if((await new H(this.env).video(j,"decode",i)).support!=="supported")throw Error("Round-trip decoder unsupported");l.configure(j)}if(await _(()=>l.decodeQueueSize<v.frames,i),x.size>=128)throw Error("Probe decoder budget exceeded");x.set(E.timestamp,performance.now()),l.decode(E)}).catch(F).finally(()=>{m--,b-=E.byteLength}))}}),d.configure({...e,hardwareAcceleration:e.hardwareAcceleration||"prefer-hardware"}),c=true,a.reset();let f=e.framerate||30,L=Math.max(1,Math.min(108e3,t.frames||60)),C=performance.now(),A=Math.max(0,Math.min(3e4,t.minimumDurationMs||0)),z=0;for(let E=0;E<L||performance.now()-C<A;E++){if(E>=108e3)throw Error("Codec trial frame budget exceeded");t.pace&&E*1e3/f>performance.now()-C&&await g(new Promise(ee=>setTimeout(ee,E*1e3/f-(performance.now()-C))),i,t.timeoutMs||1e4),await _(()=>d.encodeQueueSize<2&&M.size+m<v.frames,i);let V=Math.round(E*1e6/f);if(M.size>=128)throw Error("Probe encoder budget exceeded");(S=t.drawFrame)==null||S.call(t,y,E);let j=new this.env.VideoFrame(y,{timestamp:V,duration:Math.round(1e6/f)});try{M.set(V,performance.now()),d.encode(j,{keyFrame:E===0}),z++}finally{j.close()}a.observeQueue(d.encodeQueueSize)}return await g(d.flush(),i),await g(u,i),i.throwIfAborted(),l.state==="configured"&&await g(l.flush(),i),i.throwIfAborted(),a.observeQueue(0),I(h!==z||w!==z?"Incomplete codec trial":void 0)}catch(y){if((U=t.signal)!=null&&U.aborted)throw t.signal.reason;return I(y instanceof Error?y.message:String(y))}finally{r.abort(),clearTimeout(s),(O=t.signal)==null||O.removeEventListener("abort",o),d&&d.state!=="closed"&&d.close(),l&&l.state!=="closed"&&l.close(),M.clear(),x.clear()}}};function W(...e){let t=new AbortController,r=e.filter(Boolean).map(i=>{let o=()=>t.abort(i.reason);return i.addEventListener("abort",o,{once:true}),i.aborted&&o(),()=>i.removeEventListener("abort",o)});return{controller:t,dispose:()=>r.forEach(i=>i())}}var Z=class{constructor(e,t,r){p(this,"identity",void 0),p(this,"request",void 0),p(this,"nativeUrl",void 0),p(this,"lifetime",new AbortController),p(this,"revision",void 0),p(this,"total",void 0),this.identity=e,this.request=t,this.nativeUrl=r}get size(){return this.total}async read(e,t,r){if(this.lifetime.signal.throwIfAborted(),r==null||r.throwIfAborted(),!Number.isSafeInteger(e)||!Number.isSafeInteger(t)||e<0||t<=e||t-e>v.readBytes)throw Error("HTTP range budget exceeded");let i=this.total===void 0?t:Math.min(t,this.total);if(e>=i)return new Uint8Array;let o=W(this.lifetime.signal,r);try{let s=await g(this.request(e,i-1,o.controller.signal),o.controller.signal),a=c=>String(typeof s.headers.get=="function"?s.headers.get(c)||"":s.headers[c]||""),n=/^bytes (\d+)-(\d+)\/(\d+)$/.exec(a("content-range"));if(s.status!==206||!n||Number(n[1])!==e||Number(n[2])>=i||Number(n[2])<e||!Number.isSafeInteger(Number(n[3]))||Number(n[3])<=Number(n[2]))throw Error("Server ignored or returned invalid Range");let d=Number(n[3]),l=a("etag");if(this.total!==void 0&&this.total!==d||this.revision!==void 0&&this.revision!==l)throw Error("Media source changed during playback");if(!(s.data instanceof ArrayBuffer)||s.data.byteLength!==Number(n[2])-e+1||s.data.byteLength>v.readBytes)throw Error("Invalid Range body length");return this.total=d,this.revision=l,new Uint8Array(s.data)}finally{o.controller.abort(),o.dispose()}}close(){this.lifetime.abort()}},ye=class ${constructor(t,r,i,o){p(this,"receiver",void 0),p(this,"file",void 0),p(this,"size",void 0),p(this,"options",void 0),p(this,"lifetime",new AbortController),p(this,"identity",void 0),this.receiver=t,this.file=r,this.size=i,this.options=o,this.identity=`${r.file_id}:${r.version}`}static async open(t,r,i,o={}){let s=t.fileInfo(r,"original",i),a=o.requestTimeoutMs===null?await s:await g(s,i,o.requestTimeoutMs);if(i==null||i.throwIfAborted(),!Number.isSafeInteger(a.size)||a.size<=0)throw Error("Invalid shared media size");return new $(t,{...r},a.size,o)}async read(t,r,i){if(this.lifetime.signal.throwIfAborted(),i==null||i.throwIfAborted(),!Number.isSafeInteger(t)||!Number.isSafeInteger(r)||t<0||r<=t||r-t>v.readBytes||r>this.size)throw Error("Shared media range budget exceeded");let o=W(this.lifetime.signal,i);try{let s=this.receiver.read(this.file,t,r,"original",o.controller.signal),a=this.options.requestTimeoutMs===null?await s:await g(s,o.controller.signal,this.options.requestTimeoutMs);if(o.controller.signal.throwIfAborted(),a.byteLength!==r-t)throw Error("Incomplete verified media range");return a}finally{o.controller.abort(),o.dispose()}}close(){this.lifetime.abort()}},ke=class{constructor(e=globalThis,t){p(this,"environment",void 0),p(this,"request",void 0),this.environment=e,this.request=t}direct(e){if(!e.trim())throw Error("Empty media URL");return{...new he().decide({direct:"unknown",path:"http-file",candidates:[]}),url:e}}async source(e){var a,n,d;let t=(a=this.environment.location)==null?void 0:a.origin;if(!t)throw Error("Photos source requires a same-origin browser context");let r=new URL(e,t),i=(n=/^\/v2\/photos\/preview\/(\d+_original\.bin)$/.exec(r.pathname))==null?void 0:n[1],o=r.pathname==="/v2/photos/preview"?r.searchParams.get("asset_id"):(d=/^\/v2\/photos\/assets\/(\d+)\/preview$/.exec(r.pathname))==null?void 0:d[1],s=i||(/^[1-9]\d*$/.test(o||"")?`${o}_original.bin`:"");if(r.origin!==t||!s||!this.request)throw Error("Unsupported Photos original resource or missing Range adapter");return new Z(s,(l,c,h)=>this.request(s,l,c,h),e)}},Ee=class{constructor(e,t,r){p(this,"peer",void 0),p(this,"sender",void 0),p(this,"transceiver",void 0),p(this,"monitor",new K),p(this,"previous",new Map),p(this,"updating",Promise.resolve()),p(this,"lifetime",new AbortController),p(this,"timer",void 0),this.peer=e,this.sender=t,this.transceiver=r}setCodecPreferences(e,t){var s;if(!((s=this.transceiver)!=null&&s.setCodecPreferences))return false;let r=a=>{var d;let n=(d=a.mimeType.split("/")[1])==null?void 0:d.toLowerCase();return n==="h264"?"avc":n==="h265"?"hevc":n},i=e.filter(a=>t.includes(r(a))).sort((a,n)=>t.indexOf(r(a))-t.indexOf(r(n)));if(!i.length)return false;let o=e.filter(a=>/\/(rtx|red|ulpfec|flexfec-03)$/i.test(a.mimeType));return this.transceiver.setCodecPreferences([...i,...o]),true}adjust(e){let t=this.updating.then(async()=>{var i;this.lifetime.signal.throwIfAborted();for(let o of["maxBitrate","maxFramerate","scaleResolutionDownBy"])if(e[o]!==void 0&&!k(e[o],1))throw Error("Invalid RTP encoding adjustment");let r=this.sender.getParameters();(i=r.encodings)!=null&&i.length&&(r.encodings=r.encodings.map(o=>({...o,...e})),await g(this.sender.setParameters(r),this.lifetime.signal))});return this.updating=t.catch(()=>{}),t}async sample(){let e=await g(this.sender.getStats?this.sender.getStats():this.peer.getStats(),this.lifetime.signal),t=new Map;e.forEach(s=>t.set(s.id,s));let r={};for(let s of t.values()){let a=this.previous.get(s.id),n=a?s.timestamp-a.timestamp:0;if((s.kind||s.mediaType)==="video"&&n>0){let d=s.type==="outbound-rtp",l=s.type==="inbound-rtp";d&&s.qualityLimitationReason==="cpu"&&(r.processingLimited=true),d&&s.qualityLimitationReason==="bandwidth"&&(r.networkLimited=true,r.processingLimited!==true&&(r.processingLimited=false));let c=d?"framesEncoded":"framesDecoded",h=d?"totalEncodeTime":"totalDecodeTime";if((d||l)&&k(s[c])&&k(a[c])&&s[c]>=a[c]){let w=s[c]-a[c];r[d?"encodeFps":"decodeFps"]=w*1e3/n,w&&k(s[h])&&k(a[h])&&s[h]>=a[h]&&this.monitor.record(d?"encode":"decode",(s[h]-a[h])*1e3/w,w),l&&k(s.framesDropped)&&k(a.framesDropped)&&s.framesDropped>=a.framesDropped&&(r.droppedFrames=s.framesDropped-a.framesDropped,r.totalFrames=w+r.droppedFrames,this.monitor.observeDropped(s.framesDropped))}}if(s.type==="remote-inbound-rtp"){let d=t.get(s.localId),l=this.previous.get(s.localId);d&&l&&a&&d.packetsSent>l.packetsSent&&s.packetsLost>=a.packetsLost&&(r.packetLoss=Math.min(1,(s.packetsLost-a.packetsLost)/(d.packetsSent-l.packetsSent))),k(s.roundTripTime)&&(r.rttMs=s.roundTripTime*1e3)}}let i=[...t.values()].find(s=>s.type==="transport"&&s.selectedCandidatePairId),o=t.get(i==null?void 0:i.selectedCandidatePairId);return(o==null?void 0:o.state)==="succeeded"&&(k(o.currentRoundTripTime)&&(r.rttMs=o.currentRoundTripTime*1e3),k(o.availableOutgoingBitrate)&&(r.availableBitrate=o.availableOutgoingBitrate)),this.previous=t,this.monitor.observeNetwork(r),{observation:r,metrics:this.monitor.snapshot()}}start(e){if(this.timer)throw Error("RTP monitoring already started");let t=async()=>{var r,i,o;try{let s=await this.sample();(r=e.onSample)==null||r.call(e,s);let a=(i=this.sender.getParameters().encodings)==null?void 0:i[0],n=this.monitor.adapt({...s.observation,targetFps:(a==null?void 0:a.maxFramerate)||e.targetFps,active:e.active?e.active():!!this.sender.track&&this.sender.track.enabled&&this.sender.track.readyState==="live",demandBitrate:(a==null?void 0:a.maxBitrate)||e.maxBitrate});if(n){let d=(o=this.sender.getParameters().encodings)==null?void 0:o[0];d&&await this.adjust({maxBitrate:Math.max(64e3,Math.min(e.maxBitrate,(d.maxBitrate||e.maxBitrate)*n.bitrateFactor)),maxFramerate:Math.max(5,Math.min(e.targetFps,(d.maxFramerate||e.targetFps)*n.fpsFactor)),scaleResolutionDownBy:Math.max(1,Math.min(4,(d.scaleResolutionDownBy||1)/n.resolutionFactor))})}}catch(s){this.lifetime.signal.aborted||e.onError(s)}this.lifetime.signal.aborted||(this.timer=setTimeout(t,1e3))};this.timer=setTimeout(t,0)}close(){this.lifetime.abort(),clearTimeout(this.timer),this.previous.clear()}};function xe(e,t){let r=t.environment||globalThis,i=r.MediaStreamTrackProcessor,o=r.VideoTrackGenerator||r.MediaStreamTrackGenerator;if(!i||!o)throw Error("Processed video tracks are unavailable in this execution context");let s=W(t.signal),a=s.controller.signal,n=new i({track:e,maxBufferSize:1}),d=r.VideoTrackGenerator?new o:new o({kind:"video"}),l=d.track||d,c=n.readable.getReader(),h=d.writable.getWriter(),w=()=>{c.cancel().catch(()=>{}),h.abort(a.reason).catch(()=>{}),l.stop()};a.addEventListener("abort",w,{once:true});let u=(async()=>{try{for(a.throwIfAborted();;){let m=await g(c.read(),a);if(m.done)break;let b=m.value;try{if(b.displayWidth*b.displayHeight*4>v.rawFrameBytes)throw Error("Track frame budget exceeded");b=await X(t.transform(m.value,a),a),await g(h.ready,a),await g(h.write(b),a)}finally{b!==m.value&&b.close(),m.value.close()}}await g(h.close(),a)}finally{s.controller.abort(),a.removeEventListener("abort",w),s.dispose(),await c.cancel().catch(()=>{}),c.releaseLock(),await h.abort().catch(()=>{}),h.releaseLock(),l.stop()}})();return{track:l,done:u,close:async()=>{s.controller.abort(),w(),await u.catch(()=>{})}}}function ue(e,t={}){if(typeof e=="string")return new Z(e,async(n,d,l)=>{var M;const c=await(t.fetch??globalThis.fetch)(e,{headers:{Range:`bytes=${n}-${d}`},signal:l}),h=/^bytes (\d+)-(\d+)\/(\d+)$/.exec(c.headers.get("content-range")??""),w=h?Number(h[2])-n+1:0;if(c.status!==206||!h||Number(h[1])!==n||Number(h[2])>d||w<=0||w>v.readBytes||!Number.isSafeInteger(Number(h[3]))||Number(h[3])<=Number(h[2])||!c.body)throw await((M=c.body)==null?void 0:M.cancel().catch(()=>{})),new Error("Browser media requires a valid HTTP Range response (206).");const u=c.body.getReader(),m=new Uint8Array(w);let b=0;try{for(;;){const{value:x,done:F}=await g(u.read(),l);if(F)break;if(b+x.length>w)throw new Error("Invalid Range body length.");m.set(x,b),b+=x.length}if(b!==w)throw new Error("Invalid Range body length.");return{status:c.status,headers:c.headers,data:m.buffer}}finally{await u.cancel().catch(()=>{}),u.releaseLock()}},e);const r=new AbortController,i=e instanceof Blob?e:void 0,o=e instanceof ArrayBuffer?new Uint8Array(e):e instanceof Uint8Array?e:void 0,s=!i&&!o?e:void 0,a=(i==null?void 0:i.size)??(o==null?void 0:o.byteLength)??(s==null?void 0:s.size);return{identity:(s==null?void 0:s.identity)??"browser-local",size:a,nativeUrl:s==null?void 0:s.nativeUrl,async read(n,d,l){if(r.signal.throwIfAborted(),l==null||l.throwIfAborted(),!Number.isSafeInteger(n)||!Number.isSafeInteger(d)||n<0||d<=n||d-n>v.readBytes)throw new Error("Browser media read budget exceeded.");const c=a===void 0?d:Math.min(a,d);if(n>=c)return new Uint8Array;const h=W(r.signal,l);try{const w=i?new Uint8Array(await g(i.slice(n,c).arrayBuffer(),h.controller.signal)):o?o.slice(n,c):await g(s.read(n,c,h.controller.signal),h.controller.signal);if(w.byteLength>c-n)throw new Error("Browser media source exceeded its read budget.");return w}finally{h.controller.abort(),h.dispose()}},close(){r.abort()}}}async function fe(e,t,r={}){var o,s;const i=ue(e,r);try{(o=r.signal)==null||o.throwIfAborted();const{MediaEngine:a}=await import("./index-BPK_cNTp.js");return(s=r.signal)==null||s.throwIfAborted(),await new a().recover(i,t,{...r,allowTranscoding:r.allowTranscoding??true})}catch(a){throw i.close(),a}}class me{constructor(t,r,i){B(this,"controller");B(this,"removeParent");B(this,"playback");B(this,"root");B(this,"video");B(this,"listeners",new Map);B(this,"state",{family:"video",currentTime:0,paused:true,muted:false,volume:1,loading:false,error:null,warnings:[],capabilities:{playback:true,timeline:true,volume:true,fullscreen:true,download:true,subtitles:false}});this.host=t,this.options=r,this.resume=i}async load(t,r){var w,u;this.destroy();const i=this.controller=new AbortController,o=i.signal,s=()=>{var m;return i.abort((m=r.signal)==null?void 0:m.reason)};if((w=r.signal)==null||w.addEventListener("abort",s,{once:true}),this.removeParent=()=>{var m;return(m=r.signal)==null?void 0:m.removeEventListener("abort",s)},o.addEventListener("abort",()=>this.release(),{once:true}),this.state={...this.state,title:r.descriptor.name,loading:true,error:null,duration:void 0,currentTime:0,paused:true,muted:false,volume:1,playbackRate:1},this.emit("loading",this.state),this.emit("statechange",this.state),(u=r.signal)!=null&&u.aborted&&i.abort(r.signal.reason),o.aborted)return;const a=this.resume;this.resume=void 0;const n=this.root=document.createElement("div");n.className="pptxv-native-preview pptxv-native-preview--video";const d=this.video=document.createElement("video");d.className="pptxv-native-media pptxv-native-media--video",d.controls=true,d.playsInline=true,d.preload="metadata",d.volume=(a==null?void 0:a.volume)??1,d.muted=(a==null?void 0:a.muted)??false,d.playbackRate=(a==null?void 0:a.playbackRate)??1,n.append(d),this.host.append(n),ie(n,d,o);let l=false;const c=()=>{o.aborted||(this.state={...this.state,duration:Number.isFinite(d.duration)?d.duration:void 0,currentTime:d.currentTime,paused:d.paused,volume:d.volume,muted:d.muted,playbackRate:d.playbackRate},!l&&d.videoWidth>0&&d.readyState>=2&&(l=true,this.state={...this.state,loading:false},this.emit("rendered",this.state)),this.emit("statechange",this.state))};for(const m of["loadedmetadata","loadeddata","canplay","resize","timeupdate","durationchange","seeking","seeked","play","pause","ended","volumechange","ratechange"])d.addEventListener(m,c,{signal:o});const h=m=>{if(o.aborted||this.controller!==i)return;const b=m instanceof Error?m:new Error(String(m));i.abort(),this.state={...this.state,loading:false,error:b.message},this.emit("error",b),this.emit("statechange",this.state)};d.addEventListener("error",()=>h(new Error("Browser media recovery cannot decode this video codec.")),{signal:o});try{const m=await fe(t,d,{...this.options,signal:o,startTime:(a==null?void 0:a.currentTime)??0,autoplay:a?!a.paused:false,onError:h});if(o.aborted||this.controller!==i){await m.close();return}this.playback=m,c()}catch(m){h(m)}}getState(){return this.state}on(t,r){const i=this.listeners.get(t)??new Set;return this.listeners.set(t,i),i.add(r),()=>{i.delete(r)}}emit(t,r){var i;(i=this.listeners.get(t))==null||i.forEach(o=>o(r))}async fullscreen(){var t,r,i;document.fullscreenElement===this.root?await((t=document.exitFullscreen)==null?void 0:t.call(document)):await((i=(r=this.root)==null?void 0:r.requestFullscreen)==null?void 0:i.call(r))}destroy(){var t,r;(t=this.controller)==null||t.abort(),this.controller=void 0,(r=this.removeParent)==null||r.call(this),this.removeParent=void 0,this.release(),this.state={...this.state,loading:false}}release(){var r;const t=this.playback;this.playback=void 0,t==null||t.close(),(r=this.root)==null||r.remove(),this.root=void 0,this.video=void 0}}const Me=Object.freeze(Object.defineProperty({__proto__:null,BrowserVideoSession:me},Symbol.toStringTag,{value:"Module"}));export{ke as C,ye as S,xe as T,D as _,_ as a,W as b,Me as c,v as e,ge as f,K as g,he as h,X as i,p as l,le as m,k as n,H as o,Y as p,g as r,J as t,ve as v,Ee as w,Z as x,be as y};
1
+ var te=Object.defineProperty;var re=(e,t,r)=>t in e?te(e,t,{enumerable:true,configurable:true,writable:true,value:r}):e[t]=r;var B=(e,t,r)=>re(e,typeof t!="symbol"?t+"":t,r);import{K as ie}from"./core-DMIUha7u.js";var v=Object.freeze({readBytes:1048576,metadataBytes:16777216,indexSamples:25e4,frames:4,rawFrameBytes:67108864,encodedBytes:8388608,bufferAheadSeconds:8,bufferBehindSeconds:4,operationTimeoutMs:1e4});function J(){return new DOMException("Media operation cancelled","AbortError")}function k(e,t=0){return typeof e=="number"&&Number.isFinite(e)&&e>=t}function g(e,t,r=v.operationTimeoutMs){return t!=null&&t.aborted?(Promise.resolve(e).catch(()=>{}),Promise.reject(t.reason||J())):new Promise((i,o)=>{let s=()=>{clearTimeout(d),t==null||t.removeEventListener("abort",n)},a=(l,c)=>{s(),l(c)},n=()=>a(o,(t==null?void 0:t.reason)||J()),d=setTimeout(()=>a(o,new DOMException("Media operation timed out","TimeoutError")),r);t==null||t.addEventListener("abort",n,{once:true}),Promise.resolve(e).then(l=>a(i,l),l=>a(o,l)),t!=null&&t.aborted&&n()})}function X(e,t){return g(e.then(r=>(t.aborted&&(r.close(),t.throwIfAborted()),r)),t)}async function _(e,t,r=v.operationTimeoutMs){let i=performance.now()+r;for(;!e();){if(t==null||t.throwIfAborted(),performance.now()>=i)throw new DOMException("Media queue timed out","TimeoutError");await g(new Promise(o=>setTimeout(o,4)),t,r)}t==null||t.throwIfAborted()}function Q(e){"@babel/helpers - typeof";return Q=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Q(e)}function ae(e,t){if(Q(e)!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var i=r.call(e,t);if(Q(i)!="object")return i;throw TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function oe(e){var t=ae(e,"string");return Q(t)=="symbol"?t:t+""}function p(e,t,r){return(t=oe(t))in e?Object.defineProperty(e,t,{value:r,enumerable:true,configurable:true,writable:true}):e[t]=r,e}var H=class{constructor(e=globalThis){p(this,"env",void 0),this.env=e}playback(e,t){var r;if(!e)return"unknown";try{if(t==="mse"||t==="datachannel-file"){let o=this.env.ManagedMediaSource||this.env.MediaSource;return o!=null&&o.isTypeSupported&&o.isTypeSupported(e)?"supported":"unsupported"}if(t==="webrtc-rtp")return"unknown";let i=this.env.nativeSupport?this.env.nativeSupport(e):(r=this.env.document)==null?void 0:r.createElement("video").canPlayType(e);return i==="probably"?"supported":i==="maybe"?"unknown":i===""?"unsupported":"unknown"}catch{return"unknown"}}async video(e,t,r){var a;r==null||r.throwIfAborted();let i=e.hardwareAcceleration||"prefer-hardware",o={support:"unsupported",preference:i,execution:"unknown"},s=t==="decode"?this.env.VideoDecoder:this.env.VideoEncoder;if(!this.env.isSecureContext||!(s!=null&&s.isConfigSupported))return{...o,reason:"api-unavailable"};if(typeof e.codec!="string"||!e.codec.trim()||["width","height","codedWidth","codedHeight","framerate","bitrate"].some(n=>e[n]!==void 0&&!k(e[n],1)))return{...o,reason:"invalid-configuration"};if(((a=e.description)==null?void 0:a.byteLength)>1048576)return{...o,reason:"configuration-too-large"};try{let n={...e,hardwareAcceleration:i},d=await g(s.isConfigSupported(n),r);return{...o,support:d.supported?"supported":"unsupported",configuration:d.config}}catch(n){return r==null||r.throwIfAborted(),{...o,reason:n instanceof Error?n.message:"configuration-rejected"}}}rtp(){let e=t=>{var r,i;try{return((i=(r=t==null?void 0:t.getCapabilities)==null?void 0:r.call(t,"video"))==null?void 0:i.codecs)||[]}catch{return[]}};return{sender:e(this.env.RTCRtpSender),receiver:e(this.env.RTCRtpReceiver)}}async prediction(e,t){var r;t==null||t.throwIfAborted();try{let i=(r=this.env.navigator)==null?void 0:r.mediaCapabilities;return i!=null&&i.decodingInfo?await g(i.decodingInfo(e),t):null}catch{return t==null||t.throwIfAborted(),null}}},G=new TextDecoder("ascii"),se=new Set(["moov","trak","mdia","minf","stbl"]),ne=new Set(["stsz","stz2","stts","ctts","stsc","stco","co64","stss"]);function de(e){let t=new DataView(e.buffer,e.byteOffset,e.byteLength),r=0,i=0,o=0,s=(a,n,d)=>{if(d>12)throw Error("MP4 metadata nesting budget exceeded");for(;a<n;){if(++o>v.indexSamples||n-a<8)throw Error("Invalid MP4 metadata box");let l=G.decode(e.subarray(a+4,a+8)),c=t.getUint32(a),h=8;if(c===1){if(n-a<16)throw Error("Invalid MP4 box size");c=Number(t.getBigUint64(a+8)),h=16}else c===0&&(c=n-a);if(!Number.isSafeInteger(c)||c<h||c>n-a)throw Error("Invalid MP4 box size");if(l==="cmov")throw Error("Compressed MP4 metadata is unsupported");if(l==="trak"&&++i>16)throw Error("Media track index budget exceeded");if(ne.has(l)){let w=a+h+(l==="stsz"||l==="stz2"?8:4);if(w+4>a+c)throw Error("Truncated MP4 sample table");let u=t.getUint32(w);if((l==="stsz"||l==="stz2")&&(r+=u),u>v.indexSamples||r>v.indexSamples)throw Error("Media index budget exceeded")}se.has(l)&&s(a+h,a+c,d+1),a+=c}};s(0,e.length,0)}async function ce(e,t){let r=[],i=0,o=0,s=async(a,n)=>{if(!Number.isSafeInteger(n)||n<=0||i+n>v.metadataBytes)throw Error("Media metadata budget exceeded");let d=new Uint8Array(n);for(let l=0;l<n;){let c=Math.min(n-l,v.readBytes),h=await g(e.read(a+l,a+l+c,t),t);if(!h.length||h.length>c)throw Error("Truncated MP4 metadata");d.set(h,l),l+=h.length,i+=h.length}return d};for(let a=0;a<4096;a++){let n=await s(o,8),d=new DataView(n.buffer),l=G.decode(n.subarray(4,8)),c=d.getUint32(0),h=8;if(c===1?(c=Number(new DataView((await s(o+8,8)).buffer).getBigUint64(0)),h=16):c||(c=(e.size??NaN)-o),!Number.isSafeInteger(c)||c<h||!Number.isSafeInteger(o+c)||e.size!==void 0&&o+c>e.size)throw Error("Invalid MP4 box size");if(l==="ftyp"||l==="moov"){let w=await s(o,c);if(l==="moov"&&de(w),r.push({offset:o,bytes:w}),l==="moov"){if(!r.some(u=>G.decode(u.bytes.subarray(4,8))==="ftyp"))throw Error("Missing MP4 file type");return{boxes:r,readBytes:i}}}if(o+=c,e.size!==void 0&&o>=e.size)break}throw Error("MP4 metadata not found within the box budget")}var ge=class{codecFamily(e){return/^(avc1|avc3)/i.test(e)?"avc":/^(hvc1|hev1)/i.test(e)?"hevc":/^av01/i.test(e)?"av1":/^(vp8|vp08)/i.test(e)?"vp8":/^(vp9|vp09)/i.test(e)?"vp9":"unknown"}async sniff(e,t){let r=await g(e.read(0,Math.min(e.size??4096,4096),t),t),i=new TextDecoder().decode(r.subarray(4,12));return i.startsWith("ftyp")?i.slice(4).startsWith("qt")?"quicktime":"mp4":r[0]===26&&r[1]===69&&r[2]===223&&r[3]===163?new TextDecoder().decode(r).includes("webm")?"webm":"matroska":"unknown"}async inspect(e,t){return(await this.openMp4(e,t)).format}async openMp4(e,t){let r=await this.sniff(e,t);if(r!=="mp4"&&r!=="quicktime")throw Error(`Container inspection unavailable: ${r}`);let i=await ce(e,t),{createFile:o,DataStream:s}=await import("./mp4box.all-Bw_Tlr0T-D0URDfA1.js").then(c=>c.t),a=o(false),n,d;a.onReady=c=>{n=c},a.onError=c=>{d=Error(String(c))};let l=i.readBytes;try{let c=0;for(let{bytes:u}of i.boxes){t==null||t.throwIfAborted();let m=u.buffer.slice(u.byteOffset,u.byteOffset+u.byteLength);if(m.fileStart=c,c+=u.byteLength,a.appendBuffer(m),d)throw d}if(!n)throw Error("Incomplete MP4 metadata");let h=n.tracks.map(u=>{var x,F,I,T;let m=a.getTrackById(u.id).mdia.minf.stbl.stsd.entries[0],b=m.avcC||m.hvcC||m.vpcC||m.av1C,M;if(b){let P=new s;b.write(P),M=new Uint8Array(P.buffer.slice(8))}return{id:u.id,kind:u.type==="video"||u.type==="audio"?u.type:["text","subt","sbtl"].includes(u.type)?"text":"other",codec:u.codec,family:this.codecFamily(u.codec),width:(x=u.video)==null?void 0:x.width,height:(F=u.video)==null?void 0:F.height,sampleRate:(I=u.audio)==null?void 0:I.sample_rate,channels:(T=u.audio)==null?void 0:T.channel_count,timescale:u.timescale,duration:u.duration/u.timescale,description:M,encrypted:!!m.sinf||/^(encv|enca)/.test(u.codec)}}),w={container:r,tracks:h,duration:n.duration/n.timescale,fragmented:n.isFragmented,mime:`video/${r==="quicktime"?"quicktime":"mp4"}; codecs="${h.map(u=>u.codec).join(", ")}"`};if(h.length>16||n.tracks.some(u=>u.nb_samples>v.indexSamples))throw Error("Media track index budget exceeded");return a.stop(),{file:a,movie:n,format:w,readBytes:l}}catch(c){throw a.stop(),c}}};function Y(e){let t=e.performance;return!!t&&Number.isFinite(t.elapsedMs)&&t.elapsedMs>=1e3&&t.frames>=15&&Number.isFinite(t.fps)&&e.fps>0&&e.fps<=15&&t.targetFps>=e.fps&&t.targetFps<=15&&Math.min(t.fps,t.frames*1e3/t.elapsedMs)>=t.targetFps*1.25&&t.codecString===e.codecString&&t.width===e.width&&t.height===e.height&&e.width>0&&e.height>0&&e.width<=640&&e.height<=360}var le=class{select(e,t){var r;return(r=e.filter(i=>i.playback!=="supported"||i.transport!=="supported"||i.decode!=="supported"||i.encode!=="supported"||i.codec==="unknown"||t==="webrtc-rtp"&&i.remote!==true?false:i.preference!=="prefer-software"&&i.execution!=="confirmed-software"||Y(i)).map((i,o)=>{let s=i.preference==="prefer-software"||i.execution==="confirmed-software",a=i.codec==="av1"&&i.remote===true&&i.execution==="confirmed-hardware";return{candidate:i,priority:s?10:a?0:i.codec==="avc"?1:i.codec==="hevc"?2:3,index:o}}).sort((i,o)=>i.priority-o.priority||i.index-o.index)[0])==null?void 0:r.candidate}},he=class{constructor(e=new le){p(this,"negotiator",void 0),this.negotiator=e}decide(e){if(e.failure&&e.failure!=="unsupported")return{kind:"existing-fallback",reason:e.failure};if(!e.requiresProcessing&&e.direct!=="unsupported")return{kind:"native-direct",reason:"original-playable"};if(e.preserveTracks===false)return{kind:"existing-fallback",reason:"track-preservation-unavailable"};if(!e.requiresProcessing&&e.samplesPlayable)return{kind:"remux",reason:"preserve-original-samples"};if(!e.requiresProcessing&&e.videoPlayable&&e.audioConversionAvailable)return{kind:"audio-convert",reason:"preserve-original-video"};if(e.sourceDecode!=="supported")return{kind:"existing-fallback",reason:"source-decoder-unavailable"};let t=this.negotiator.select(e.candidates,e.path);return t?{kind:"client-transcode",candidate:t,reason:"compatible-output-required"}:{kind:"existing-fallback",reason:"no-feasible-client-configuration"}}},K=class{constructor(e={}){p(this,"now",void 0),p(this,"limit",void 0),p(this,"started",void 0),p(this,"stages",void 0),p(this,"network",{}),p(this,"queueDepth",0),p(this,"droppedFrames",0),p(this,"utilization",null),p(this,"pressure",""),p(this,"streak",0),p(this,"healthy",0),p(this,"lastChange",-1/0),p(this,"lastObservation",-1/0),this.now=e.now||(()=>performance.now()),this.limit=Math.max(1,Math.min(1024,e.sampleLimit||256)),this.reset()}reset(){this.started=this.now(),this.stages={decode:{frames:0,values:[]},encode:{frames:0,values:[]},process:{frames:0,values:[]}},this.network={},this.queueDepth=this.droppedFrames=this.streak=this.healthy=0,this.pressure="",this.utilization=null,this.lastChange=this.lastObservation=-1/0}record(e,t,r=1){if(!k(t)||!k(r,1))return;let i=this.stages[e];i.frames+=r,i.values.push(t),i.values.length>this.limit&&i.values.shift()}observeQueue(e){k(e)&&(this.queueDepth=e)}observeDropped(e){k(e)&&(this.droppedFrames=e)}observeNetwork(e){for(let t of["rttMs","packetLoss","availableBitrate"]){let r=e[t];k(r)&&(t!=="packetLoss"||r<=1)?this.network[t]=r:delete this.network[t]}}observeUtilization(e,t,r){!r||e!==null&&(!k(e)||e>100)||t!==null&&(!k(t)||t>100)||(this.utilization={cpu:e,gpu:t,source:r})}snapshot(){var r,i,o;let e=Math.max(0,this.now()-this.started),t=s=>{let a=this.stages[s],n=[...a.values].sort((d,l)=>d-l);return{frames:a.frames,samples:n.length,fps:e?a.frames*1e3/e:0,averageMs:n.length?n.reduce((d,l)=>d+l,0)/n.length:0,p95Ms:n.length?n[Math.ceil(n.length*.95)-1]:0}};return{elapsedMs:e,encode:t("encode"),decode:t("decode"),process:t("process"),encoderQueueDepth:this.queueDepth,droppedFrames:this.droppedFrames,cpuUsage:((r=this.utilization)==null?void 0:r.cpu)??null,gpuVideoUtilization:((i=this.utilization)==null?void 0:i.gpu)??null,utilizationSource:((o=this.utilization)==null?void 0:o.source)??null,network:{rttMs:this.network.rttMs??null,packetLoss:this.network.packetLoss??null,availableBitrate:this.network.availableBitrate??null}}}adapt(e){let t=this.now();if(e.active===false||!k(e.targetFps,1))return this.streak=this.healthy=0,this.pressure="",null;if(t-this.lastObservation<500)return null;this.lastObservation=t;let r=e.networkLimited===true||k(e.availableBitrate,1)&&k(e.demandBitrate,1)&&e.availableBitrate<e.demandBitrate*.85||e.packetLoss>.03,i=e.processingLimited===true||e.queueDepth>=3||e.processingLimited!==false&&(e.encodeFps!==void 0&&e.encodeFps<e.targetFps*.85||e.decodeFps!==void 0&&e.decodeFps<e.targetFps*.85||e.totalFrames>=30&&e.droppedFrames/e.totalFrames>=.15),o=r&&i?"mixed":r?"network":i?"processing":"";return this.streak=o&&o===this.pressure?this.streak+1:+!!o,this.pressure=o,this.healthy=o?0:this.healthy+1,t-this.lastChange<5e3?null:this.streak>=3?(this.streak=0,this.lastChange=t,{direction:"down",bottleneck:o,bitrateFactor:.8,fpsFactor:i?.8:1,resolutionFactor:i?.8:1}):this.healthy>=10&&k(e.encodeFps,e.targetFps)&&k(e.decodeFps,e.targetFps)&&k(e.availableBitrate,(e.demandBitrate||1/0)*1.25)?(this.healthy=0,this.lastChange=t,{direction:"up",bottleneck:"none",bitrateFactor:1.1,fpsFactor:1.1,resolutionFactor:1.1}):null}},D=class extends Error{constructor(e,t){super(`${e}: ${t instanceof Error?t.message:String(t)}`),p(this,"stage",void 0),this.stage=e,this.name="MediaCodecFailure"}},ve=class{constructor(e=globalThis){p(this,"env",void 0),p(this,"controller",void 0),this.env=e}close(){var e;(e=this.controller)==null||e.abort()}async runWithFallback(e,t){var r;try{return await this.run(e)}catch(i){(r=e.signal)==null||r.throwIfAborted();let o=e.encoderConfig,s=e.decoderConfig;if(!(i instanceof D)||o.hardwareAcceleration==="prefer-software"||!(s.codedWidth>0&&s.codedHeight>0&&s.codedWidth<=640&&s.codedHeight<=360)||!Y({codecString:o.codec,width:o.width,height:o.height,fps:o.framerate,performance:t.softwarePerformance}))throw i;return await g(t.resetOutput(),e.signal),this.run({...e,decoderConfig:{...e.decoderConfig,hardwareAcceleration:"prefer-software"},encoderConfig:{...o,hardwareAcceleration:"prefer-software"}})}}async run(e){var N,R,q;if(this.controller)throw Error("Media transcoder is already running");let t=this.controller=new AbortController,r=t.signal,i=()=>{var S;return t.abort((S=e.signal)==null?void 0:S.reason)};(N=e.signal)==null||N.addEventListener("abort",i,{once:true}),(R=e.signal)!=null&&R.aborted&&i();let o=new K,s=new H(this.env),a,n,d,l=new Set,c=new Map,h=new Map,w=Promise.resolve(),u=Promise.resolve(),m=0,b=0,M=0,x=0,F=0,I=-1/0,T=S=>{r.aborted||t.abort(S)},P=e.onMetrics?setInterval(()=>{try{e.onMetrics(o.snapshot())}catch(S){T(S)}},1e3):void 0;try{let S={optimizeForLatency:true,...e.decoderConfig},U=await s.video(S,"decode",r),O=await s.video(e.encoderConfig,"encode",r);if(U.support!=="supported"||O.support!=="supported")throw new D("configure","Media codec configuration unsupported");n=new this.env.VideoEncoder({error:f=>T(new D("encode",f)),output:(f,L)=>{r.aborted||(o.record("encode",performance.now()-(h.get(f.timestamp)??performance.now())),h.delete(f.timestamp),++x>v.frames||(M+=f.byteLength)>v.encodedBytes?T(Error("Encoded output budget exceeded")):u=u.then(async()=>{r.throwIfAborted(),await g(e.sink(f,L),r)}).catch(T).finally(()=>{x--,M-=f.byteLength}))}});try{n.configure(O.configuration||e.encoderConfig)}catch(f){throw new D("configure",f)}a=new this.env.VideoDecoder({error:f=>T(new D("decode",f)),output:f=>{var C;if(r.aborted){f.close();return}let L=((C=f.allocationSize)==null?void 0:C.call(f))||f.displayWidth*f.displayHeight*4;o.record("decode",performance.now()-(c.get(f.timestamp)??performance.now())),c.delete(f.timestamp),b++,m+=L,b>v.frames||m>v.rawFrameBytes?(b--,m-=L,f.close(),T(Error("Decoded frame budget exceeded"))):(l.add(f),w=w.then(async()=>{let A=f;try{if(r.throwIfAborted(),f.timestamp<(e.startTimestamp??-1/0))return;let z=e.encoderConfig.framerate;if(z&&f.timestamp-I<1e6/z-1){o.observeDropped(++y);return}let E=performance.now();if(e.process&&(A=await X(e.process(f,r),r)),A!==f&&l.add(A),o.record("process",performance.now()-E),await _(()=>n.encodeQueueSize<v.frames&&x<v.frames,r),r.throwIfAborted(),h.size>=128)throw Error("Encoder timestamp budget exceeded");h.set(A.timestamp,performance.now()),n.encode(A,{keyFrame:F++%Math.max(1,Math.round((z||30)*2))===0}),I=A.timestamp,o.observeQueue(n.encodeQueueSize)}finally{A!==f&&(A.close(),l.delete(A)),f.close(),l.delete(f),b--,m-=L}}).catch(T))}});try{a.configure(U.configuration||S)}catch(f){throw new D("configure",f)}let y=0;for(d=e.chunks(r)[Symbol.asyncIterator]();;){let f=await g(d.next(),r);if(f.done)break;if(await _(()=>a.decodeQueueSize<v.frames&&c.size+b<v.frames&&x<2,r),f.value.byteLength>v.encodedBytes)throw Error("Encoded input budget exceeded");if(c.size>=128)throw Error("Decoder timestamp budget exceeded");c.set(f.value.timestamp,performance.now()),a.decode(f.value)}return await g(a.flush(),r),await g(w,r),r.throwIfAborted(),await g(n.flush(),r),await g(u,r),r.throwIfAborted(),o.observeQueue(0),o.snapshot()}finally{clearInterval(P),t.abort(),a&&a.state!=="closed"&&a.close(),n&&n.state!=="closed"&&n.close();for(let S of l)S.close();l.clear(),c.clear(),h.clear(),d!=null&&d.return&&await g(Promise.resolve().then(()=>d.return()),void 0,1e3).catch(()=>{}),(q=e.signal)==null||q.removeEventListener("abort",i),this.controller=void 0}}},be=class{constructor(e=globalThis){p(this,"env",void 0),this.env=e}async run(e,t={}){var T,P,N,R,q,S,U,O;let r=new AbortController,i=r.signal,o=()=>{var y;return r.abort((y=t.signal)==null?void 0:y.reason)};(T=t.signal)==null||T.addEventListener("abort",o,{once:true}),(P=t.signal)!=null&&P.aborted&&o();let s=setTimeout(()=>r.abort(new DOMException("Codec trial timed out","TimeoutError")),t.timeoutMs||1e4),a=new K,n=await new H(this.env).video(e,"encode",i).catch(y=>{var f;throw clearTimeout(s),(f=t.signal)==null||f.removeEventListener("abort",o),y}),d,l,c=false,h=0,w=0,u=Promise.resolve(),m=0,b=0,M=new Map,x=new Map,F=y=>{i.aborted||r.abort(y)},I=y=>({...n,execution:"unknown",initialized:c,completed:!y&&h>0&&w>0,error:y,metrics:a.snapshot()});try{if(n.support!=="supported")return I(n.reason||"configuration-unsupported");if(e.width*e.height*4>v.rawFrameBytes)return I("Frame budget exceeded");if(!this.env.VideoFrame||!this.env.VideoDecoder)return I("Frame or decoder API unavailable");let y=this.env.OffscreenCanvas?new this.env.OffscreenCanvas(e.width,e.height):(N=this.env.document)==null?void 0:N.createElement("canvas");if(!y)return I("Canvas unavailable");y.width=e.width,y.height=e.height,(q=(R=y.getContext)==null?void 0:R.call(y,"2d"))==null||q.clearRect(0,0,e.width,e.height),l=new this.env.VideoDecoder({error:F,output:E=>{a.record("decode",performance.now()-(x.get(E.timestamp)??performance.now())),x.delete(E.timestamp),w++,E.close()}}),d=new this.env.VideoEncoder({error:F,output:(E,V)=>{i.aborted||(a.record("encode",performance.now()-(M.get(E.timestamp)??performance.now())),M.delete(E.timestamp),h++,++m>v.frames||(b+=E.byteLength)>v.encodedBytes?F(Error("Probe output budget exceeded")):u=u.then(async()=>{if(i.throwIfAborted(),l.state==="unconfigured"){if(!V.decoderConfig)throw Error("Encoder omitted decoder configuration");let j={...V.decoderConfig,optimizeForLatency:true,hardwareAcceleration:e.hardwareAcceleration||"prefer-hardware"};if((await new H(this.env).video(j,"decode",i)).support!=="supported")throw Error("Round-trip decoder unsupported");l.configure(j)}if(await _(()=>l.decodeQueueSize<v.frames,i),x.size>=128)throw Error("Probe decoder budget exceeded");x.set(E.timestamp,performance.now()),l.decode(E)}).catch(F).finally(()=>{m--,b-=E.byteLength}))}}),d.configure({...e,hardwareAcceleration:e.hardwareAcceleration||"prefer-hardware"}),c=true,a.reset();let f=e.framerate||30,L=Math.max(1,Math.min(108e3,t.frames||60)),C=performance.now(),A=Math.max(0,Math.min(3e4,t.minimumDurationMs||0)),z=0;for(let E=0;E<L||performance.now()-C<A;E++){if(E>=108e3)throw Error("Codec trial frame budget exceeded");t.pace&&E*1e3/f>performance.now()-C&&await g(new Promise(ee=>setTimeout(ee,E*1e3/f-(performance.now()-C))),i,t.timeoutMs||1e4),await _(()=>d.encodeQueueSize<2&&M.size+m<v.frames,i);let V=Math.round(E*1e6/f);if(M.size>=128)throw Error("Probe encoder budget exceeded");(S=t.drawFrame)==null||S.call(t,y,E);let j=new this.env.VideoFrame(y,{timestamp:V,duration:Math.round(1e6/f)});try{M.set(V,performance.now()),d.encode(j,{keyFrame:E===0}),z++}finally{j.close()}a.observeQueue(d.encodeQueueSize)}return await g(d.flush(),i),await g(u,i),i.throwIfAborted(),l.state==="configured"&&await g(l.flush(),i),i.throwIfAborted(),a.observeQueue(0),I(h!==z||w!==z?"Incomplete codec trial":void 0)}catch(y){if((U=t.signal)!=null&&U.aborted)throw t.signal.reason;return I(y instanceof Error?y.message:String(y))}finally{r.abort(),clearTimeout(s),(O=t.signal)==null||O.removeEventListener("abort",o),d&&d.state!=="closed"&&d.close(),l&&l.state!=="closed"&&l.close(),M.clear(),x.clear()}}};function W(...e){let t=new AbortController,r=e.filter(Boolean).map(i=>{let o=()=>t.abort(i.reason);return i.addEventListener("abort",o,{once:true}),i.aborted&&o(),()=>i.removeEventListener("abort",o)});return{controller:t,dispose:()=>r.forEach(i=>i())}}var Z=class{constructor(e,t,r){p(this,"identity",void 0),p(this,"request",void 0),p(this,"nativeUrl",void 0),p(this,"lifetime",new AbortController),p(this,"revision",void 0),p(this,"total",void 0),this.identity=e,this.request=t,this.nativeUrl=r}get size(){return this.total}async read(e,t,r){if(this.lifetime.signal.throwIfAborted(),r==null||r.throwIfAborted(),!Number.isSafeInteger(e)||!Number.isSafeInteger(t)||e<0||t<=e||t-e>v.readBytes)throw Error("HTTP range budget exceeded");let i=this.total===void 0?t:Math.min(t,this.total);if(e>=i)return new Uint8Array;let o=W(this.lifetime.signal,r);try{let s=await g(this.request(e,i-1,o.controller.signal),o.controller.signal),a=c=>String(typeof s.headers.get=="function"?s.headers.get(c)||"":s.headers[c]||""),n=/^bytes (\d+)-(\d+)\/(\d+)$/.exec(a("content-range"));if(s.status!==206||!n||Number(n[1])!==e||Number(n[2])>=i||Number(n[2])<e||!Number.isSafeInteger(Number(n[3]))||Number(n[3])<=Number(n[2]))throw Error("Server ignored or returned invalid Range");let d=Number(n[3]),l=a("etag");if(this.total!==void 0&&this.total!==d||this.revision!==void 0&&this.revision!==l)throw Error("Media source changed during playback");if(!(s.data instanceof ArrayBuffer)||s.data.byteLength!==Number(n[2])-e+1||s.data.byteLength>v.readBytes)throw Error("Invalid Range body length");return this.total=d,this.revision=l,new Uint8Array(s.data)}finally{o.controller.abort(),o.dispose()}}close(){this.lifetime.abort()}},ye=class ${constructor(t,r,i,o){p(this,"receiver",void 0),p(this,"file",void 0),p(this,"size",void 0),p(this,"options",void 0),p(this,"lifetime",new AbortController),p(this,"identity",void 0),this.receiver=t,this.file=r,this.size=i,this.options=o,this.identity=`${r.file_id}:${r.version}`}static async open(t,r,i,o={}){let s=t.fileInfo(r,"original",i),a=o.requestTimeoutMs===null?await s:await g(s,i,o.requestTimeoutMs);if(i==null||i.throwIfAborted(),!Number.isSafeInteger(a.size)||a.size<=0)throw Error("Invalid shared media size");return new $(t,{...r},a.size,o)}async read(t,r,i){if(this.lifetime.signal.throwIfAborted(),i==null||i.throwIfAborted(),!Number.isSafeInteger(t)||!Number.isSafeInteger(r)||t<0||r<=t||r-t>v.readBytes||r>this.size)throw Error("Shared media range budget exceeded");let o=W(this.lifetime.signal,i);try{let s=this.receiver.read(this.file,t,r,"original",o.controller.signal),a=this.options.requestTimeoutMs===null?await s:await g(s,o.controller.signal,this.options.requestTimeoutMs);if(o.controller.signal.throwIfAborted(),a.byteLength!==r-t)throw Error("Incomplete verified media range");return a}finally{o.controller.abort(),o.dispose()}}close(){this.lifetime.abort()}},ke=class{constructor(e=globalThis,t){p(this,"environment",void 0),p(this,"request",void 0),this.environment=e,this.request=t}direct(e){if(!e.trim())throw Error("Empty media URL");return{...new he().decide({direct:"unknown",path:"http-file",candidates:[]}),url:e}}async source(e){var a,n,d;let t=(a=this.environment.location)==null?void 0:a.origin;if(!t)throw Error("Photos source requires a same-origin browser context");let r=new URL(e,t),i=(n=/^\/v2\/photos\/preview\/(\d+_original\.bin)$/.exec(r.pathname))==null?void 0:n[1],o=r.pathname==="/v2/photos/preview"?r.searchParams.get("asset_id"):(d=/^\/v2\/photos\/assets\/(\d+)\/preview$/.exec(r.pathname))==null?void 0:d[1],s=i||(/^[1-9]\d*$/.test(o||"")?`${o}_original.bin`:"");if(r.origin!==t||!s||!this.request)throw Error("Unsupported Photos original resource or missing Range adapter");return new Z(s,(l,c,h)=>this.request(s,l,c,h),e)}},Ee=class{constructor(e,t,r){p(this,"peer",void 0),p(this,"sender",void 0),p(this,"transceiver",void 0),p(this,"monitor",new K),p(this,"previous",new Map),p(this,"updating",Promise.resolve()),p(this,"lifetime",new AbortController),p(this,"timer",void 0),this.peer=e,this.sender=t,this.transceiver=r}setCodecPreferences(e,t){var s;if(!((s=this.transceiver)!=null&&s.setCodecPreferences))return false;let r=a=>{var d;let n=(d=a.mimeType.split("/")[1])==null?void 0:d.toLowerCase();return n==="h264"?"avc":n==="h265"?"hevc":n},i=e.filter(a=>t.includes(r(a))).sort((a,n)=>t.indexOf(r(a))-t.indexOf(r(n)));if(!i.length)return false;let o=e.filter(a=>/\/(rtx|red|ulpfec|flexfec-03)$/i.test(a.mimeType));return this.transceiver.setCodecPreferences([...i,...o]),true}adjust(e){let t=this.updating.then(async()=>{var i;this.lifetime.signal.throwIfAborted();for(let o of["maxBitrate","maxFramerate","scaleResolutionDownBy"])if(e[o]!==void 0&&!k(e[o],1))throw Error("Invalid RTP encoding adjustment");let r=this.sender.getParameters();(i=r.encodings)!=null&&i.length&&(r.encodings=r.encodings.map(o=>({...o,...e})),await g(this.sender.setParameters(r),this.lifetime.signal))});return this.updating=t.catch(()=>{}),t}async sample(){let e=await g(this.sender.getStats?this.sender.getStats():this.peer.getStats(),this.lifetime.signal),t=new Map;e.forEach(s=>t.set(s.id,s));let r={};for(let s of t.values()){let a=this.previous.get(s.id),n=a?s.timestamp-a.timestamp:0;if((s.kind||s.mediaType)==="video"&&n>0){let d=s.type==="outbound-rtp",l=s.type==="inbound-rtp";d&&s.qualityLimitationReason==="cpu"&&(r.processingLimited=true),d&&s.qualityLimitationReason==="bandwidth"&&(r.networkLimited=true,r.processingLimited!==true&&(r.processingLimited=false));let c=d?"framesEncoded":"framesDecoded",h=d?"totalEncodeTime":"totalDecodeTime";if((d||l)&&k(s[c])&&k(a[c])&&s[c]>=a[c]){let w=s[c]-a[c];r[d?"encodeFps":"decodeFps"]=w*1e3/n,w&&k(s[h])&&k(a[h])&&s[h]>=a[h]&&this.monitor.record(d?"encode":"decode",(s[h]-a[h])*1e3/w,w),l&&k(s.framesDropped)&&k(a.framesDropped)&&s.framesDropped>=a.framesDropped&&(r.droppedFrames=s.framesDropped-a.framesDropped,r.totalFrames=w+r.droppedFrames,this.monitor.observeDropped(s.framesDropped))}}if(s.type==="remote-inbound-rtp"){let d=t.get(s.localId),l=this.previous.get(s.localId);d&&l&&a&&d.packetsSent>l.packetsSent&&s.packetsLost>=a.packetsLost&&(r.packetLoss=Math.min(1,(s.packetsLost-a.packetsLost)/(d.packetsSent-l.packetsSent))),k(s.roundTripTime)&&(r.rttMs=s.roundTripTime*1e3)}}let i=[...t.values()].find(s=>s.type==="transport"&&s.selectedCandidatePairId),o=t.get(i==null?void 0:i.selectedCandidatePairId);return(o==null?void 0:o.state)==="succeeded"&&(k(o.currentRoundTripTime)&&(r.rttMs=o.currentRoundTripTime*1e3),k(o.availableOutgoingBitrate)&&(r.availableBitrate=o.availableOutgoingBitrate)),this.previous=t,this.monitor.observeNetwork(r),{observation:r,metrics:this.monitor.snapshot()}}start(e){if(this.timer)throw Error("RTP monitoring already started");let t=async()=>{var r,i,o;try{let s=await this.sample();(r=e.onSample)==null||r.call(e,s);let a=(i=this.sender.getParameters().encodings)==null?void 0:i[0],n=this.monitor.adapt({...s.observation,targetFps:(a==null?void 0:a.maxFramerate)||e.targetFps,active:e.active?e.active():!!this.sender.track&&this.sender.track.enabled&&this.sender.track.readyState==="live",demandBitrate:(a==null?void 0:a.maxBitrate)||e.maxBitrate});if(n){let d=(o=this.sender.getParameters().encodings)==null?void 0:o[0];d&&await this.adjust({maxBitrate:Math.max(64e3,Math.min(e.maxBitrate,(d.maxBitrate||e.maxBitrate)*n.bitrateFactor)),maxFramerate:Math.max(5,Math.min(e.targetFps,(d.maxFramerate||e.targetFps)*n.fpsFactor)),scaleResolutionDownBy:Math.max(1,Math.min(4,(d.scaleResolutionDownBy||1)/n.resolutionFactor))})}}catch(s){this.lifetime.signal.aborted||e.onError(s)}this.lifetime.signal.aborted||(this.timer=setTimeout(t,1e3))};this.timer=setTimeout(t,0)}close(){this.lifetime.abort(),clearTimeout(this.timer),this.previous.clear()}};function xe(e,t){let r=t.environment||globalThis,i=r.MediaStreamTrackProcessor,o=r.VideoTrackGenerator||r.MediaStreamTrackGenerator;if(!i||!o)throw Error("Processed video tracks are unavailable in this execution context");let s=W(t.signal),a=s.controller.signal,n=new i({track:e,maxBufferSize:1}),d=r.VideoTrackGenerator?new o:new o({kind:"video"}),l=d.track||d,c=n.readable.getReader(),h=d.writable.getWriter(),w=()=>{c.cancel().catch(()=>{}),h.abort(a.reason).catch(()=>{}),l.stop()};a.addEventListener("abort",w,{once:true});let u=(async()=>{try{for(a.throwIfAborted();;){let m=await g(c.read(),a);if(m.done)break;let b=m.value;try{if(b.displayWidth*b.displayHeight*4>v.rawFrameBytes)throw Error("Track frame budget exceeded");b=await X(t.transform(m.value,a),a),await g(h.ready,a),await g(h.write(b),a)}finally{b!==m.value&&b.close(),m.value.close()}}await g(h.close(),a)}finally{s.controller.abort(),a.removeEventListener("abort",w),s.dispose(),await c.cancel().catch(()=>{}),c.releaseLock(),await h.abort().catch(()=>{}),h.releaseLock(),l.stop()}})();return{track:l,done:u,close:async()=>{s.controller.abort(),w(),await u.catch(()=>{})}}}function ue(e,t={}){if(typeof e=="string")return new Z(e,async(n,d,l)=>{var M;const c=await(t.fetch??globalThis.fetch)(e,{headers:{Range:`bytes=${n}-${d}`},signal:l}),h=/^bytes (\d+)-(\d+)\/(\d+)$/.exec(c.headers.get("content-range")??""),w=h?Number(h[2])-n+1:0;if(c.status!==206||!h||Number(h[1])!==n||Number(h[2])>d||w<=0||w>v.readBytes||!Number.isSafeInteger(Number(h[3]))||Number(h[3])<=Number(h[2])||!c.body)throw await((M=c.body)==null?void 0:M.cancel().catch(()=>{})),new Error("Browser media requires a valid HTTP Range response (206).");const u=c.body.getReader(),m=new Uint8Array(w);let b=0;try{for(;;){const{value:x,done:F}=await g(u.read(),l);if(F)break;if(b+x.length>w)throw new Error("Invalid Range body length.");m.set(x,b),b+=x.length}if(b!==w)throw new Error("Invalid Range body length.");return{status:c.status,headers:c.headers,data:m.buffer}}finally{await u.cancel().catch(()=>{}),u.releaseLock()}},e);const r=new AbortController,i=e instanceof Blob?e:void 0,o=e instanceof ArrayBuffer?new Uint8Array(e):e instanceof Uint8Array?e:void 0,s=!i&&!o?e:void 0,a=(i==null?void 0:i.size)??(o==null?void 0:o.byteLength)??(s==null?void 0:s.size);return{identity:(s==null?void 0:s.identity)??"browser-local",size:a,nativeUrl:s==null?void 0:s.nativeUrl,async read(n,d,l){if(r.signal.throwIfAborted(),l==null||l.throwIfAborted(),!Number.isSafeInteger(n)||!Number.isSafeInteger(d)||n<0||d<=n||d-n>v.readBytes)throw new Error("Browser media read budget exceeded.");const c=a===void 0?d:Math.min(a,d);if(n>=c)return new Uint8Array;const h=W(r.signal,l);try{const w=i?new Uint8Array(await g(i.slice(n,c).arrayBuffer(),h.controller.signal)):o?o.slice(n,c):await g(s.read(n,c,h.controller.signal),h.controller.signal);if(w.byteLength>c-n)throw new Error("Browser media source exceeded its read budget.");return w}finally{h.controller.abort(),h.dispose()}},close(){r.abort()}}}async function fe(e,t,r={}){var o,s;const i=ue(e,r);try{(o=r.signal)==null||o.throwIfAborted();const{MediaEngine:a}=await import("./index-cyA_1amh.js");return(s=r.signal)==null||s.throwIfAborted(),await new a().recover(i,t,{...r,allowTranscoding:r.allowTranscoding??true})}catch(a){throw i.close(),a}}class me{constructor(t,r,i){B(this,"controller");B(this,"removeParent");B(this,"playback");B(this,"root");B(this,"video");B(this,"listeners",new Map);B(this,"state",{family:"video",currentTime:0,paused:true,muted:false,volume:1,loading:false,error:null,warnings:[],capabilities:{playback:true,timeline:true,volume:true,fullscreen:true,download:true,subtitles:false}});this.host=t,this.options=r,this.resume=i}async load(t,r){var w,u;this.destroy();const i=this.controller=new AbortController,o=i.signal,s=()=>{var m;return i.abort((m=r.signal)==null?void 0:m.reason)};if((w=r.signal)==null||w.addEventListener("abort",s,{once:true}),this.removeParent=()=>{var m;return(m=r.signal)==null?void 0:m.removeEventListener("abort",s)},o.addEventListener("abort",()=>this.release(),{once:true}),this.state={...this.state,title:r.descriptor.name,loading:true,error:null,duration:void 0,currentTime:0,paused:true,muted:false,volume:1,playbackRate:1},this.emit("loading",this.state),this.emit("statechange",this.state),(u=r.signal)!=null&&u.aborted&&i.abort(r.signal.reason),o.aborted)return;const a=this.resume;this.resume=void 0;const n=this.root=document.createElement("div");n.className="pptxv-native-preview pptxv-native-preview--video";const d=this.video=document.createElement("video");d.className="pptxv-native-media pptxv-native-media--video",d.controls=true,d.playsInline=true,d.preload="metadata",d.volume=(a==null?void 0:a.volume)??1,d.muted=(a==null?void 0:a.muted)??false,d.playbackRate=(a==null?void 0:a.playbackRate)??1,n.append(d),this.host.append(n),ie(n,d,o);let l=false;const c=()=>{o.aborted||(this.state={...this.state,duration:Number.isFinite(d.duration)?d.duration:void 0,currentTime:d.currentTime,paused:d.paused,volume:d.volume,muted:d.muted,playbackRate:d.playbackRate},!l&&d.videoWidth>0&&d.readyState>=2&&(l=true,this.state={...this.state,loading:false},this.emit("rendered",this.state)),this.emit("statechange",this.state))};for(const m of["loadedmetadata","loadeddata","canplay","resize","timeupdate","durationchange","seeking","seeked","play","pause","ended","volumechange","ratechange"])d.addEventListener(m,c,{signal:o});const h=m=>{if(o.aborted||this.controller!==i)return;const b=m instanceof Error?m:new Error(String(m));i.abort(),this.state={...this.state,loading:false,error:b.message},this.emit("error",b),this.emit("statechange",this.state)};d.addEventListener("error",()=>h(new Error("Browser media recovery cannot decode this video codec.")),{signal:o});try{const m=await fe(t,d,{...this.options,signal:o,startTime:(a==null?void 0:a.currentTime)??0,autoplay:a?!a.paused:false,onError:h});if(o.aborted||this.controller!==i){await m.close();return}this.playback=m,c()}catch(m){h(m)}}getState(){return this.state}on(t,r){const i=this.listeners.get(t)??new Set;return this.listeners.set(t,i),i.add(r),()=>{i.delete(r)}}emit(t,r){var i;(i=this.listeners.get(t))==null||i.forEach(o=>o(r))}async fullscreen(){var t,r,i;document.fullscreenElement===this.root?await((t=document.exitFullscreen)==null?void 0:t.call(document)):await((i=(r=this.root)==null?void 0:r.requestFullscreen)==null?void 0:i.call(r))}destroy(){var t,r;(t=this.controller)==null||t.abort(),this.controller=void 0,(r=this.removeParent)==null||r.call(this),this.removeParent=void 0,this.release(),this.state={...this.state,loading:false}}release(){var r;const t=this.playback;this.playback=void 0,t==null||t.close(),(r=this.root)==null||r.remove(),this.root=void 0,this.video=void 0}}const Me=Object.freeze(Object.defineProperty({__proto__:null,BrowserVideoSession:me},Symbol.toStringTag,{value:"Module"}));export{ke as C,ye as S,xe as T,D as _,_ as a,W as b,Me as c,v as e,ge as f,K as g,he as h,X as i,p as l,le as m,k as n,H as o,Y as p,g as r,J as t,ve as v,Ee as w,Z as x,be as y};
@@ -1,4 +1,4 @@
1
- var Ot=Object.defineProperty;var Ht=(t,e,n)=>e in t?Ot(t,e,{enumerable:true,configurable:true,writable:true,value:n}):t[e]=n;var F=(t,e,n)=>Ht(t,typeof e!="symbol"?e+"":e,n);import{c as Yt,a as zt,d as Vt,w as at,b as jt,g as Wt}from"./core-BLayEJn5.js";const Ut=[{extensions:["dxf"],family:"cad",driverId:"cad",targetFormat:"dxf",contentTypes:["image/vnd.dxf","application/dxf","application/x-dxf"]}],D="#223245";class qt{constructor(e,n={}){F(this,"listeners",{loading:new Set,rendered:new Set,error:new Set,statechange:new Set,warnings:new Set});F(this,"root");F(this,"canvas",null);F(this,"drawing",null);F(this,"panX",0);F(this,"panY",0);F(this,"state");F(this,"loadController",null);F(this,"resourceUrls",new Set);F(this,"layerElements",new Map);F(this,"appliedLayers",new Set);F(this,"fontLoading");F(this,"fontReferences",[]);this.host=e,this.options=n,this.root=document.createElement("div"),this.root.className="cadv-preview",this.host.replaceChildren(this.root),this.state={loading:false,error:null,family:"cad",warnings:[],capabilities:{zoom:true,fit:true,pan:true,fullscreen:true,layers:true,metadata:true},scale:this.options.initialScale??1,layers:[],activeLayerIds:[]},this.fontLoading=zt(this,e.ownerDocument,n)}async load(e,n){var c,a,l,f,d;this.stopLoad(),this.fontLoading.reset(n.signal,((c=n.route)==null?void 0:c.targetFormat)??n.descriptor.extension??"dxf");const o=new AbortController;this.loadController=o;const r=o.signal,i=this.resourceUrls=new Set,s=()=>o.abort();r.addEventListener("abort",()=>{var h;(h=n.signal)==null||h.removeEventListener("abort",s),this.loadController===o&&(this.stopLoad(),this.state.loading=false,this.emit("statechange",this.state))},{once:true}),(a=n.signal)==null||a.addEventListener("abort",s,{once:true}),this.state={...this.state,loading:true,error:null,title:n.descriptor.name,warnings:[],fonts:[]},this.emit("loading",this.state),this.emit("statechange",this.state);try{(l=n.signal)!=null&&l.aborted&&o.abort(),C(r);const h=Xt(((f=n.route)==null?void 0:f.sourceFormat)??n.descriptor.extension);if(h!=="dxf")throw new Error(`CAD preview currently supports browser-native DXF files, got ${h||"unknown"}.`);const p=await Dn(e,{...n,signal:r});C(r);const g=Gt(p),m=await In(g,this.options.resourceResolver,h,i,r);C(r);const b=Pn(m,this.options.fontResolver,h);C(r),this.fontReferences=Cn(m,b);const M=Vt(this.fontReferences,this.host.ownerDocument),S=at(M.fonts.filter(w=>w.status!=="unsupported")),I=b.layerStyles.length?b.layerStyles.filter(w=>w.visible).map(w=>w.name):b.layers;this.state={...this.state,loading:false,error:null,warnings:[...new Set([...b.warnings,...S])],fonts:M.fonts,layers:An(b),activeLayerIds:I},this.render(b),jt(this.root,{getScale:()=>this.state.scale,setScale:w=>this.setScale(w),pan:(w,E)=>this.pan(w,E),signal:r}),this.state.warnings.length&&this.emit("warnings",this.state.warnings),this.emit("rendered",this.state),this.emit("statechange",this.state)}catch(h){if(r.aborted){(d=n.signal)!=null&&d.aborted&&C(r);return}this.stopLoad();const p=h instanceof Error?h:new Error(String(h));throw this.state.loading=false,this.state.error=p.message,this.emit("error",p),this.emit("statechange",this.state),p}}destroy(){this.fontLoading.destroy(),this.stopLoad(),this.state.loading=false,this.root.parentElement===this.host&&this.host.replaceChildren();for(const e of Object.values(this.listeners))e.clear()}stopLoad(){this.fontReferences=[];const e=this.loadController;this.loadController=null,e==null||e.abort(),this.root.replaceChildren(),this.canvas=null,this.drawing=null,this.layerElements.clear(),this.appliedLayers.clear(),this.panX=0,this.panY=0,this.state.layers=[],this.state.activeLayerIds=[],this.state.fonts=[];for(const n of this.resourceUrls)URL.revokeObjectURL(n);this.resourceUrls.clear()}getState(){var e;return{...this.state,warnings:[...this.state.warnings],fonts:(e=this.state.fonts)==null?void 0:e.map(n=>({...n,classification:n.classification?{...n.classification}:void 0})),layers:[...this.state.layers??[]],activeLayerIds:[...this.state.activeLayerIds??[]]}}getFontReferences(){return this.fontReferences}refreshFonts(e){var o,r;if(!this.drawing||(o=this.loadController)!=null&&o.signal.aborted)return;for(const i of this.drawing.entities){if(i.type!=="text")continue;const s=this.fontReferences.findIndex(a=>a.styleName===i.styleName&&(a.resolvedFontFamily??a.fontFamily)===i.fontFamily),c=(r=e.references[s])==null?void 0:r.resolvedFontFamily;c&&(i.fontFamily=c)}this.fontReferences=e.references;const n=Wt(e,this.host.ownerDocument);this.state.fonts=n.fonts,this.state.warnings=[...new Set([...this.drawing.warnings,...at(n.fonts.filter(i=>i.status!=="unsupported")),...e.warnings])],(e.loaded.length||e.relayout)&&(this.render(this.drawing),this.appliedLayers=new Set(this.drawing.layers),this.applyLayerVisibility()),this.emit("warnings",this.state.warnings),this.emit("rendered",this.getState()),this.emit("statechange",this.getState())}setScale(e){this.state={...this.state,scale:Math.max(.1,Math.min(e,8))},this.applyTransform(),this.emit("statechange",this.state)}fit(){this.panX=0,this.panY=0,this.setScale(1)}pan(e,n){this.panX+=e,this.panY+=n,this.applyTransform(),this.emit("statechange",this.state)}setActiveLayers(e){var r;const n=((r=this.drawing)==null?void 0:r.layers)??[],o=new Set(e.filter(i=>n.includes(i)));this.state={...this.state,activeLayerIds:[...o]},this.applyLayerVisibility(),this.emit("statechange",this.state)}toggleLayer(e,n){var s;if(!(((s=this.drawing)==null?void 0:s.layers)??[]).includes(e))return;const r=new Set(this.state.activeLayerIds??[]);n??!r.has(e)?r.add(e):r.delete(e),this.setActiveLayers([...r])}async fullscreen(){var e,n;await((n=(e=this.root).requestFullscreen)==null?void 0:n.call(e))}on(e,n){return this.listeners[e].add(n),()=>{this.listeners[e].delete(n)}}render(e){this.drawing=e;const n=document.createElement("div");n.className="cadv-stage",this.layerElements.clear();const o=Ie(e,this.layerElements);this.canvas=o,this.appliedLayers=new Set(this.state.activeLayerIds),n.appendChild(o),this.root.replaceChildren(n),this.applyTransform()}applyLayerVisibility(){if(!this.canvas)return;const e=new Set(this.state.activeLayerIds??[]);for(const[n,o]of this.layerElements)if(e.has(n)!==this.appliedLayers.has(n))for(const r of o){const s=r.getAttribute("data-entity-visible")!=="false"&&(!n||e.has(n));s?r.removeAttribute("display"):r.setAttribute("display","none"),r.setAttribute("data-layer-visible",s?"true":"false")}this.appliedLayers=e}applyTransform(){this.canvas&&(this.canvas.style.transform=`translate(${this.panX}px, ${this.panY}px) scale(${this.state.scale})`)}emit(e,n){for(const o of this.listeners[e])o(n)}}function On(){return{id:"cad",family:"cad",supports:t=>Xt(t)==="dxf",createSession:(t,e)=>new qt(t,e)}}function Hn(t=Yt()){return[...Ut,...t.filter(e=>!e.extensions.some(n=>n==="dxf"))]}function Gt(t){var S,I;const e=_t(Kt(t)),n=e.get("HEADER")??[],o=e.get("TABLES")??[],r=Zt(n),i=Jt(n),s=Tn(o),c=xn(e.get("OBJECTS")??[]),a=mn(o),l=wn(o,a),f=[],d=[],h=Ae(e.get("BLOCKS")??[],s,d,c),p=e.get("ENTITIES")??[];let g=false,m=0;for(;m<p.length;){const w=p[m];if(w.code===0&&w.value==="SECTION"&&((S=p[m+1])==null?void 0:S.code)===2&&((I=p[m+1])==null?void 0:I.value)==="ENTITIES"){g=true,m+=2;continue}if(w.code===0&&w.value==="ENDSEC"){g=false,m+=1;continue}if(!g||w.code!==0){m+=1;continue}const E=O(p,m);if(E.type==="POLYLINE"){const N=bt(p,m);N.entity&&f.push(N.entity),m=N.nextIndex;continue}if(E.type==="INSERT"||E.type==="MINSERT"){const N=wt(E.type,E.values);if(N)for(const L of Te(N,h,d))f.push(L);m=E.nextIndex;continue}if(E.type==="DIMENSION"){const N=ve(E.values);if(N!=null&&N.blockName&&h.has(X(N.blockName)))for(const L of Fe(N,h,d))f.push(L);else{const L=Ne(E.values);L&&f.push(L),N!=null&&N.blockName&&!L&&d.push(`DXF DIMENSION references missing block "${N.blockName}"; skipped.`)}m=E.nextIndex;continue}const ct=mt(E.type,E.values,s,c);ct&&f.push(ct),m=E.nextIndex}const b=Sn(f,l,a,i.lineTypeScale),M=Je(b,r);return{entities:b,bounds:M,header:i,layers:vn([...[...l.values()].map(w=>w.name),...b.map(w=>w.layer).filter(Boolean)]),layerStyles:[...l.values()].sort((w,E)=>w.name.localeCompare(E.name)),lineTypes:[...a.values()].sort((w,E)=>w.name.localeCompare(E.name)),textStyles:[...s.values()],warnings:[...rt(b,s),...Nn(d)]}}function _t(t){var n;const e=new Map;for(let o=0;o<t.length;o++){if(t[o].code!==0||t[o].value!=="SECTION"||((n=t[o+1])==null?void 0:n.code)!==2)continue;const r=o,i=t[o+1].value;for(o+=2;o<t.length&&!(t[o].code===0&&t[o].value==="ENDSEC");)o++;const s=e.get(i);if(s)for(let c=r;c<=o&&c<t.length;c++)s.push(t[c]);else e.set(i,t.slice(r,o+1))}return e}function Kt(t){const e=[];let n=0;for(;n<t.length;){const o=t.indexOf(`
1
+ var Ot=Object.defineProperty;var Ht=(t,e,n)=>e in t?Ot(t,e,{enumerable:true,configurable:true,writable:true,value:n}):t[e]=n;var F=(t,e,n)=>Ht(t,typeof e!="symbol"?e+"":e,n);import{c as Yt,a as zt,d as Vt,w as at,b as jt,g as Wt}from"./core-DMIUha7u.js";const Ut=[{extensions:["dxf"],family:"cad",driverId:"cad",targetFormat:"dxf",contentTypes:["image/vnd.dxf","application/dxf","application/x-dxf"]}],D="#223245";class qt{constructor(e,n={}){F(this,"listeners",{loading:new Set,rendered:new Set,error:new Set,statechange:new Set,warnings:new Set});F(this,"root");F(this,"canvas",null);F(this,"drawing",null);F(this,"panX",0);F(this,"panY",0);F(this,"state");F(this,"loadController",null);F(this,"resourceUrls",new Set);F(this,"layerElements",new Map);F(this,"appliedLayers",new Set);F(this,"fontLoading");F(this,"fontReferences",[]);this.host=e,this.options=n,this.root=document.createElement("div"),this.root.className="cadv-preview",this.host.replaceChildren(this.root),this.state={loading:false,error:null,family:"cad",warnings:[],capabilities:{zoom:true,fit:true,pan:true,fullscreen:true,layers:true,metadata:true},scale:this.options.initialScale??1,layers:[],activeLayerIds:[]},this.fontLoading=zt(this,e.ownerDocument,n)}async load(e,n){var c,a,l,f,d;this.stopLoad(),this.fontLoading.reset(n.signal,((c=n.route)==null?void 0:c.targetFormat)??n.descriptor.extension??"dxf");const o=new AbortController;this.loadController=o;const r=o.signal,i=this.resourceUrls=new Set,s=()=>o.abort();r.addEventListener("abort",()=>{var h;(h=n.signal)==null||h.removeEventListener("abort",s),this.loadController===o&&(this.stopLoad(),this.state.loading=false,this.emit("statechange",this.state))},{once:true}),(a=n.signal)==null||a.addEventListener("abort",s,{once:true}),this.state={...this.state,loading:true,error:null,title:n.descriptor.name,warnings:[],fonts:[]},this.emit("loading",this.state),this.emit("statechange",this.state);try{(l=n.signal)!=null&&l.aborted&&o.abort(),C(r);const h=Xt(((f=n.route)==null?void 0:f.sourceFormat)??n.descriptor.extension);if(h!=="dxf")throw new Error(`CAD preview currently supports browser-native DXF files, got ${h||"unknown"}.`);const p=await Dn(e,{...n,signal:r});C(r);const g=Gt(p),m=await In(g,this.options.resourceResolver,h,i,r);C(r);const b=Pn(m,this.options.fontResolver,h);C(r),this.fontReferences=Cn(m,b);const M=Vt(this.fontReferences,this.host.ownerDocument),S=at(M.fonts.filter(w=>w.status!=="unsupported")),I=b.layerStyles.length?b.layerStyles.filter(w=>w.visible).map(w=>w.name):b.layers;this.state={...this.state,loading:false,error:null,warnings:[...new Set([...b.warnings,...S])],fonts:M.fonts,layers:An(b),activeLayerIds:I},this.render(b),jt(this.root,{getScale:()=>this.state.scale,setScale:w=>this.setScale(w),pan:(w,E)=>this.pan(w,E),signal:r}),this.state.warnings.length&&this.emit("warnings",this.state.warnings),this.emit("rendered",this.state),this.emit("statechange",this.state)}catch(h){if(r.aborted){(d=n.signal)!=null&&d.aborted&&C(r);return}this.stopLoad();const p=h instanceof Error?h:new Error(String(h));throw this.state.loading=false,this.state.error=p.message,this.emit("error",p),this.emit("statechange",this.state),p}}destroy(){this.fontLoading.destroy(),this.stopLoad(),this.state.loading=false,this.root.parentElement===this.host&&this.host.replaceChildren();for(const e of Object.values(this.listeners))e.clear()}stopLoad(){this.fontReferences=[];const e=this.loadController;this.loadController=null,e==null||e.abort(),this.root.replaceChildren(),this.canvas=null,this.drawing=null,this.layerElements.clear(),this.appliedLayers.clear(),this.panX=0,this.panY=0,this.state.layers=[],this.state.activeLayerIds=[],this.state.fonts=[];for(const n of this.resourceUrls)URL.revokeObjectURL(n);this.resourceUrls.clear()}getState(){var e;return{...this.state,warnings:[...this.state.warnings],fonts:(e=this.state.fonts)==null?void 0:e.map(n=>({...n,classification:n.classification?{...n.classification}:void 0})),layers:[...this.state.layers??[]],activeLayerIds:[...this.state.activeLayerIds??[]]}}getFontReferences(){return this.fontReferences}refreshFonts(e){var o,r;if(!this.drawing||(o=this.loadController)!=null&&o.signal.aborted)return;for(const i of this.drawing.entities){if(i.type!=="text")continue;const s=this.fontReferences.findIndex(a=>a.styleName===i.styleName&&(a.resolvedFontFamily??a.fontFamily)===i.fontFamily),c=(r=e.references[s])==null?void 0:r.resolvedFontFamily;c&&(i.fontFamily=c)}this.fontReferences=e.references;const n=Wt(e,this.host.ownerDocument);this.state.fonts=n.fonts,this.state.warnings=[...new Set([...this.drawing.warnings,...at(n.fonts.filter(i=>i.status!=="unsupported")),...e.warnings])],(e.loaded.length||e.relayout)&&(this.render(this.drawing),this.appliedLayers=new Set(this.drawing.layers),this.applyLayerVisibility()),this.emit("warnings",this.state.warnings),this.emit("rendered",this.getState()),this.emit("statechange",this.getState())}setScale(e){this.state={...this.state,scale:Math.max(.1,Math.min(e,8))},this.applyTransform(),this.emit("statechange",this.state)}fit(){this.panX=0,this.panY=0,this.setScale(1)}pan(e,n){this.panX+=e,this.panY+=n,this.applyTransform(),this.emit("statechange",this.state)}setActiveLayers(e){var r;const n=((r=this.drawing)==null?void 0:r.layers)??[],o=new Set(e.filter(i=>n.includes(i)));this.state={...this.state,activeLayerIds:[...o]},this.applyLayerVisibility(),this.emit("statechange",this.state)}toggleLayer(e,n){var s;if(!(((s=this.drawing)==null?void 0:s.layers)??[]).includes(e))return;const r=new Set(this.state.activeLayerIds??[]);n??!r.has(e)?r.add(e):r.delete(e),this.setActiveLayers([...r])}async fullscreen(){var e,n;await((n=(e=this.root).requestFullscreen)==null?void 0:n.call(e))}on(e,n){return this.listeners[e].add(n),()=>{this.listeners[e].delete(n)}}render(e){this.drawing=e;const n=document.createElement("div");n.className="cadv-stage",this.layerElements.clear();const o=Ie(e,this.layerElements);this.canvas=o,this.appliedLayers=new Set(this.state.activeLayerIds),n.appendChild(o),this.root.replaceChildren(n),this.applyTransform()}applyLayerVisibility(){if(!this.canvas)return;const e=new Set(this.state.activeLayerIds??[]);for(const[n,o]of this.layerElements)if(e.has(n)!==this.appliedLayers.has(n))for(const r of o){const s=r.getAttribute("data-entity-visible")!=="false"&&(!n||e.has(n));s?r.removeAttribute("display"):r.setAttribute("display","none"),r.setAttribute("data-layer-visible",s?"true":"false")}this.appliedLayers=e}applyTransform(){this.canvas&&(this.canvas.style.transform=`translate(${this.panX}px, ${this.panY}px) scale(${this.state.scale})`)}emit(e,n){for(const o of this.listeners[e])o(n)}}function On(){return{id:"cad",family:"cad",supports:t=>Xt(t)==="dxf",createSession:(t,e)=>new qt(t,e)}}function Hn(t=Yt()){return[...Ut,...t.filter(e=>!e.extensions.some(n=>n==="dxf"))]}function Gt(t){var S,I;const e=_t(Kt(t)),n=e.get("HEADER")??[],o=e.get("TABLES")??[],r=Zt(n),i=Jt(n),s=Tn(o),c=xn(e.get("OBJECTS")??[]),a=mn(o),l=wn(o,a),f=[],d=[],h=Ae(e.get("BLOCKS")??[],s,d,c),p=e.get("ENTITIES")??[];let g=false,m=0;for(;m<p.length;){const w=p[m];if(w.code===0&&w.value==="SECTION"&&((S=p[m+1])==null?void 0:S.code)===2&&((I=p[m+1])==null?void 0:I.value)==="ENTITIES"){g=true,m+=2;continue}if(w.code===0&&w.value==="ENDSEC"){g=false,m+=1;continue}if(!g||w.code!==0){m+=1;continue}const E=O(p,m);if(E.type==="POLYLINE"){const N=bt(p,m);N.entity&&f.push(N.entity),m=N.nextIndex;continue}if(E.type==="INSERT"||E.type==="MINSERT"){const N=wt(E.type,E.values);if(N)for(const L of Te(N,h,d))f.push(L);m=E.nextIndex;continue}if(E.type==="DIMENSION"){const N=ve(E.values);if(N!=null&&N.blockName&&h.has(X(N.blockName)))for(const L of Fe(N,h,d))f.push(L);else{const L=Ne(E.values);L&&f.push(L),N!=null&&N.blockName&&!L&&d.push(`DXF DIMENSION references missing block "${N.blockName}"; skipped.`)}m=E.nextIndex;continue}const ct=mt(E.type,E.values,s,c);ct&&f.push(ct),m=E.nextIndex}const b=Sn(f,l,a,i.lineTypeScale),M=Je(b,r);return{entities:b,bounds:M,header:i,layers:vn([...[...l.values()].map(w=>w.name),...b.map(w=>w.layer).filter(Boolean)]),layerStyles:[...l.values()].sort((w,E)=>w.name.localeCompare(E.name)),lineTypes:[...a.values()].sort((w,E)=>w.name.localeCompare(E.name)),textStyles:[...s.values()],warnings:[...rt(b,s),...Nn(d)]}}function _t(t){var n;const e=new Map;for(let o=0;o<t.length;o++){if(t[o].code!==0||t[o].value!=="SECTION"||((n=t[o+1])==null?void 0:n.code)!==2)continue;const r=o,i=t[o+1].value;for(o+=2;o<t.length&&!(t[o].code===0&&t[o].value==="ENDSEC");)o++;const s=e.get(i);if(s)for(let c=r;c<=o&&c<t.length;c++)s.push(t[c]);else e.set(i,t.slice(r,o+1))}return e}function Kt(t){const e=[];let n=0;for(;n<t.length;){const o=t.indexOf(`
2
2
  `,n);if(o<0)break;const r=t.indexOf(`
3
3
  `,o+1),i=r<0?t.length:r,s=Number(t.slice(n,o).trim());Number.isFinite(s)&&e.push({code:s,value:t.slice(o+1,i).trimEnd()}),n=i+1}return e}function Zt(t){const e=lt(t,"$EXTMIN","$EXTMAX");return e||lt(t,"$LIMMIN","$LIMMAX")}function Jt(t){const e=G(t,"$INSUNITS"),n=G(t,"$MEASUREMENT"),o=P(G(t,"$LTSCALE")),r=Qt(e,n);return{...r?{units:r}:{},...o==null?{}:{lineTypeScale:o}}}function G(t,e){var o,r,i,s,c;let n=false;for(let a=0;a<t.length;a+=1){const l=t[a];if(l.code===0&&l.value==="SECTION"&&((o=t[a+1])==null?void 0:o.code)===2&&((r=t[a+1])==null?void 0:r.value)==="HEADER"){n=true,a+=1;continue}if(n&&l.code===0&&l.value==="ENDSEC")return;if(!n||l.code!==9||l.value!==e)continue;let f=a+1;for(;f<t.length&&((i=t[f])==null?void 0:i.code)!==9&&((s=t[f])==null?void 0:s.code)!==0;){const d=Number((c=t[f])==null?void 0:c.value);if(Number.isFinite(d))return d;f+=1}return}}function Qt(t,e){const n=t==null||!Number.isFinite(t)?void 0:Math.trunc(t),o=e===0?"imperial":e===1?"metric":void 0;if(!(n==null&&!o))return{code:n,name:te(n),measurement:o}}function te(t){return t==null?void 0:{0:"Unitless",1:"Inches",2:"Feet",3:"Miles",4:"Millimeters",5:"Centimeters",6:"Meters",7:"Kilometers",8:"Microinches",9:"Mils",10:"Yards",11:"Angstroms",12:"Nanometers",13:"Microns",14:"Decimeters",15:"Decameters",16:"Hectometers",17:"Gigameters",18:"Astronomical units",19:"Light years",20:"Parsecs",21:"US survey feet",22:"US survey inches",23:"US survey yards",24:"US survey miles"}[t]}function lt(t,e,n){const o=ut(t,e),r=ut(t,n);if(!(!o||!r||o.x>=r.x||o.y>=r.y))return{minX:o.x,minY:o.y,maxX:r.x,maxY:r.y}}function ut(t,e){var o,r,i,s,c,a,l,f;let n=false;for(let d=0;d<t.length;d+=1){const h=t[d];if(h.code===0&&h.value==="SECTION"&&((o=t[d+1])==null?void 0:o.code)===2&&((r=t[d+1])==null?void 0:r.value)==="HEADER"){n=true,d+=1;continue}if(n&&h.code===0&&h.value==="ENDSEC")return;if(!n||h.code!==9||h.value!==e)continue;let p,g,m=d+1;for(;m<t.length&&((i=t[m])==null?void 0:i.code)!==9&&((s=t[m])==null?void 0:s.code)!==0;)((c=t[m])==null?void 0:c.code)===10&&(p=Number((a=t[m])==null?void 0:a.value)),((l=t[m])==null?void 0:l.code)===20&&(g=Number((f=t[m])==null?void 0:f.value)),m+=1;return x(p,g)}}function ee(t,e,n,o=new Map){const r=O(t,e);return{entity:mt(r.type,r.values,n,o),nextIndex:r.nextIndex}}function O(t,e){var r,i;const n=(r=t[e])==null?void 0:r.value;let o=e+1;for(;o<t.length&&((i=t[o])==null?void 0:i.code)!==0;)o+=1;return{type:n,values:t.slice(e+1,o),nextIndex:o}}function mt(t,e,n,o=new Map){switch(t){case"LINE":return oe(e);case"XLINE":return ft(e,false);case"RAY":return ft(e,true);case"POINT":return ne(e);case"CIRCLE":return ie(e);case"ARC":return re(e);case"ELLIPSE":return se(e);case"LWPOLYLINE":return ce(e);case"LEADER":return ae(e);case"SOLID":case"TRACE":case"3DFACE":return le(e);case"HATCH":return ue(e);case"SPLINE":return ge(e);case"TEXT":case"MTEXT":case"ATTRIB":case"ATTDEF":return xe(t,e,n);case"IMAGE":return be(e,o);default:return}}function ne(t){const e=x(u(t,10),u(t,20));if(e)return{...T(t),type:"point",point:e}}function oe(t){const e=x(u(t,10),u(t,20)),n=x(u(t,11),u(t,21));if(!(!e||!n))return{...T(t),type:"line",start:e,end:n}}function ft(t,e){const n=x(u(t,10),u(t,20)),o=x(u(t,11),u(t,21));if(!(!n||!o||z(o)<1e-9))return{...T(t),type:"construction-line",point:n,direction:o,ray:e}}function ie(t){const e=x(u(t,10),u(t,20)),n=u(t,40);if(!(!e||!n||n<=0))return{...T(t),type:"circle",center:e,radius:n}}function re(t){const e=x(u(t,10),u(t,20)),n=u(t,40),o=u(t,50),r=u(t,51);if(!(!e||!n||n<=0||o==null||r==null))return{...T(t),type:"arc",center:e,radius:n,startAngle:o,endAngle:r}}function se(t){const e=x(u(t,10),u(t,20)),n=x(u(t,11),u(t,21)),o=u(t,40);if(!(!e||!n||o==null||o<=0))return{...T(t),type:"ellipse",center:e,majorAxis:n,ratio:o,startParameter:u(t,41)??0,endParameter:u(t,42)??Math.PI*2}}function ce(t){const e=[],n=[],o=[];let r,i,s=0,c,a;const l=()=>{const d=x(r,i);d&&(e.push(d),n.push(s),o.push(et(c,a))),r=void 0,i=void 0,s=0,c=void 0,a=void 0};for(const d of t){if(d.code===10){l(),r=Number(d.value);continue}if(d.code===20){i=Number(d.value);continue}if(d.code===42){const h=Number(d.value);s=Number.isFinite(h)?h:0;continue}if(d.code===40){c=Number(d.value);continue}d.code===41&&(a=Number(d.value))}l();const f=u(t,43);if(!(e.length<2))return{...T(t),type:"polyline",points:e,closed:!!((u(t,70)??0)&1),bulges:n.some(d=>Math.abs(d)>1e-9)?n:void 0,strokeWidth:Bt(f,o)}}function ae(t){const e=R(t,10,20);if(!(e.length<2))return{...T(t),type:"polyline",points:e,closed:false}}function le(t){const e=x(u(t,10),u(t,20)),n=x(u(t,11),u(t,21)),o=x(u(t,12),u(t,22)),r=x(u(t,13),u(t,23))??o,i=[e,n,o,r].filter(s=>!!s);if(!(i.length<3))return{...T(t),type:"face",points:$t(i)}}function ue(t){const e=fe(t);if(e.length)return{...T(t),type:"hatch",loops:e,patternName:y(t,2),solid:u(t,70)===1||/^solid$/i.test(y(t,2)??"")}}function fe(t){var n;const e=[];for(let o=0;o<t.length;o+=1){if(((n=t[o])==null?void 0:n.code)!==92)continue;const r=de(t,o);r.points.length>=3&&e.push($t(r.points)),o=Math.max(o,r.nextIndex-1)}return e}function de(t,e){const n=he(t,e);return n.points.length>=3?n:pe(t,e)}function he(t,e){var o,r,i,s,c,a;let n=e+1;for(let l=0;l<t.length;l+=1){if(l!==e||((o=t[l])==null?void 0:o.code)!==92)continue;let f=l+1;if(((r=t[f])==null?void 0:r.code)!==72||(f+=1,((i=t[f])==null?void 0:i.code)===73&&(f+=1),((s=t[f])==null?void 0:s.code)!==93))continue;const d=Number((c=t[f])==null?void 0:c.value);if(!Number.isFinite(d)||d<3)continue;f+=1,n=f;const h=[],p=[];let g,m,b=0;const M=()=>{const S=x(g,m);S&&(h.push(S),p.push(b)),g=void 0,m=void 0,b=0};for(;f<t.length&&h.length<d;){const S=t[f];if(S.code===10)M(),g=Number(S.value);else if(S.code===20)m=Number(S.value);else if(S.code===42){const I=Number(S.value);b=Number.isFinite(I)?I:0}if(f+=1,x(g,m)&&h.length+1>=d&&((a=t[f])==null?void 0:a.code)!==42)break}if(n=f,M(),h.length>=3)return{points:p.some(S=>Math.abs(S)>1e-9)?vt({points:h,closed:true,bulges:p}):h,nextIndex:n}}return{points:[],nextIndex:n}}function pe(t,e){var o,r,i,s,c,a,l;let n=e+1;for(let f=0;f<t.length;f+=1){if(f!==e||((o=t[f])==null?void 0:o.code)!==92)continue;let d=f+1;if(((r=t[d])==null?void 0:r.code)!==93)continue;const h=Number((i=t[d])==null?void 0:i.value);if(!Number.isFinite(h)||h<1)continue;d+=1,n=d;const p=[];let g=0;for(;d<t.length&&g<h;){if(((s=t[d])==null?void 0:s.code)!==72){d+=1;continue}const m=Number((c=t[d])==null?void 0:c.value),b=[];for(d+=1;d<t.length&&((a=t[d])==null?void 0:a.code)!==72&&((l=t[d])==null?void 0:l.code)!==92;)b.push(t[d]),d+=1;const M=me(m,b);for(const S of M)dn(p,S);g+=1,n=d}if(p.length>=3)return{points:p,nextIndex:n}}return{points:[],nextIndex:n}}function me(t,e){if(t===1)return[x(u(e,10),u(e,20)),x(u(e,11),u(e,21))].filter(n=>!!n);if(t===2){const n=x(u(e,10),u(e,20)),o=u(e,40),r=u(e,50),i=u(e,51);return!n||o==null||o<=0||r==null||i==null?[]:je(n,o,r,i,u(e,73)!==0)}if(t===3){const n=x(u(e,10),u(e,20)),o=x(u(e,11),u(e,21)),r=u(e,40),i=u(e,50),s=u(e,51);return!n||!o||r==null||r<=0||i==null||s==null?[]:We(n,o,r,i,s,u(e,73)!==0)}if(t===4){const n=R(e,11,21),o=R(e,10,20),r=n.length>=2?n:o;return Ue(r,!!((u(e,74)??0)&1),u(e,94)??3)}return[]}function ge(t){const e=R(t,11,21),n=R(t,10,20),o=e.length>=2?e:n;if(!(o.length<2))return{...T(t),type:"spline",points:o,degree:u(t,71)??3,closed:!!((u(t,70)??0)&1)}}function xe(t,e,n){const o=t==="MTEXT",r=x(u(e,10),u(e,20)),i=o?void 0:x(u(e,11),u(e,21)),s=o?nn(u(e,71)):tn(u(e,72)),c=o?on(u(e,71)):en(u(e,73)),l=!o&&(u(e,72)!=null||u(e,73)!=null)?i??r:r,f=Lt([y(e,1),...e.filter(g=>g.code===3).map(g=>g.value)].filter(Boolean).join(""));if(!l||!f)return;const d=y(e,7),h=d?n.get(k(d)):void 0,p=o?u(e,50)??rn(e)??0:u(e,50)??0;return{...T(e),type:"text",point:l,value:f,height:u(e,40)??12,rotation:p,widthFactor:o?1:u(e,41)??1,obliqueAngle:u(e,51)??0,horizontalAlign:s,verticalAlign:c,styleName:d,fontFamily:h==null?void 0:h.fontFamily,fontFile:h==null?void 0:h.fontFile}}function be(t,e){const n=x(u(t,10),u(t,20)),o=x(u(t,11),u(t,21)),r=x(u(t,12),u(t,22)),i=u(t,13),s=u(t,23);if(!n||!o||!r||i==null||s==null||i<=0||s<=0)return;const c=pn(t),a=c?e.get(Ct(c)):void 0;return{...T(t),type:"image",point:n,uVector:o,vVector:r,width:i,height:s,source:a==null?void 0:a.source,imageDefHandle:c,clipBoundary:we(t,i,s),brightness:u(t,281),contrast:u(t,282),fade:u(t,283)}}function we(t,e,n){const o=u(t,280),r=u(t,91);if(o===0||r==null||r<=0)return;const i=R(t,14,24).slice(0,r);if(!(i.length<2)){if(i.length===2){const[s,c]=i;return!s||!c?void 0:gt(s,c,e,n)}return i.map(s=>ye(s,e,n))}}function gt(t,e,n,o){const r=Math.max(0,Math.min(t.x,e.x,n)),i=Math.max(0,Math.min(Math.max(t.x,e.x),n)),s=Math.max(0,Math.min(t.y,e.y,o)),c=Math.max(0,Math.min(Math.max(t.y,e.y),o));return[{x:r,y:s},{x:i,y:s},{x:i,y:c},{x:r,y:c}]}function ye(t,e,n){return{x:Math.max(0,Math.min(t.x,e)),y:Math.max(0,Math.min(t.y,n))}}function Ae(t,e,n,o=new Map){var c,a,l;const r=new Map;let i=false,s=0;for(;s<t.length;){const f=t[s];if(f.code===0&&f.value==="SECTION"&&((c=t[s+1])==null?void 0:c.code)===2&&((a=t[s+1])==null?void 0:a.value)==="BLOCKS"){i=true,s+=2;continue}if(i&&f.code===0&&f.value==="ENDSEC"){i=false,s+=1;continue}if(!i||f.code!==0||f.value!=="BLOCK"){s+=1;continue}const d=[];for(s+=1;s<t.length&&((l=t[s])==null?void 0:l.code)!==0;)d.push(t[s]),s+=1;const h=Se(d),p=[],g=[];for(;s<t.length;){const m=t[s];if(m.code===0&&m.value==="ENDBLK"){s=St(t,s+1);break}if(m.code===0){if(m.value==="POLYLINE"){const M=bt(t,s);M.entity&&p.push(M.entity),s=M.nextIndex;continue}if(m.value==="INSERT"||m.value==="MINSERT"){const M=O(t,s),S=wt(m.value,M.values);S&&g.push(S),s=M.nextIndex;continue}const b=ee(t,s,e,o);b.entity&&p.push(b.entity),s=b.nextIndex;continue}s+=1}h&&r.set(X(h.name),{...h,entities:p,inserts:g})}return Me(r,n),r}function Se(t){const e=y(t,2);if(e)return{name:e,basePoint:{x:u(t,10)??0,y:u(t,20)??0}}}function Me(t,e){const n=new Map;for(const o of t.values())o.entities=xt(o,t,e,n,[])}function xt(t,e,n,o,r){const i=X(t.name),s=o.get(i);if(s)return s;if(r.includes(i))return n.push(`DXF block nesting cycle detected at "${t.name}"; nested INSERT expansion skipped.`),t.entities;const c=[...r,i],a=t.inserts.flatMap(f=>Ee(f,e,n,o,c)),l=[...t.entities,...a];return o.set(i,l),l}function Ee(t,e,n,o,r){const i=e.get(X(t.blockName));if(!i)return n.push(`DXF nested INSERT references missing block "${t.blockName}"; skipped.`),[];const s=xt(i,e,n,o,r),c=[];for(let a=0;a<t.rows;a+=1)for(let l=0;l<t.columns;l+=1){const f={blockBasePoint:i.basePoint,insertionPoint:yt(t,l,a),scaleX:t.scaleX,scaleY:t.scaleY,rotation:t.rotation};for(const d of s)c.push(ot(At(d,f),t))}return c}function bt(t,e){const n=O(t,e),o=[],r=[],i=[];let s,c,a=n.nextIndex;for(;a<t.length;){const l=t[a];if(l.code!==0){a+=1;continue}if(l.value==="SEQEND"){a=St(t,a+1);break}if(l.value!=="VERTEX")break;const f=O(t,a),d=x(u(f.values,10),u(f.values,20));d&&(o.push(d),r.push(u(f.values,42)??0),i.push(et(u(f.values,40),u(f.values,41))),s??(s=y(f.values,8)),c??(c=u(f.values,62))),a=f.nextIndex}return o.length<2?{nextIndex:a}:{entity:{...T(n.values),type:"polyline",points:o,closed:!!((u(n.values,70)??0)&1),bulges:r.some(l=>Math.abs(l)>1e-9)?r:void 0,strokeWidth:Bt(et(u(n.values,40),u(n.values,41)),i),layer:y(n.values,8)??s,colorIndex:u(n.values,62)??c},nextIndex:a}}function wt(t,e){const n=y(e,2),o=x(u(e,10),u(e,20));if(!n||!o)return;const r=t==="MINSERT";return{blockName:n,point:o,scaleX:u(e,41)??1,scaleY:u(e,42)??1,rotation:u(e,50)??0,columns:r?Math.max(u(e,70)??1,1):1,rows:r?Math.max(u(e,71)??1,1):1,columnSpacing:r?u(e,44)??0:0,rowSpacing:r?u(e,45)??0:0,layer:y(e,8),colorIndex:u(e,62),trueColor:U(u(e,420)),opacity:q(u(e,440)),entityVisible:it(u(e,60)),lineType:V(y(e,6)),lineTypeScale:P(u(e,48)),lineWeight:W(u(e,370))}}function ve(t){const e=y(t,2);if(e)return{blockName:e,layer:y(t,8),colorIndex:u(t,62),trueColor:U(u(t,420)),opacity:q(u(t,440)),entityVisible:it(u(t,60)),lineType:V(y(t,6)),lineTypeScale:P(u(t,48)),lineWeight:W(u(t,370))}}function Ne(t){const e=x(u(t,13),u(t,23)),n=x(u(t,14),u(t,24));if(!e||!n)return;const o=x(u(t,11),u(t,21))??Ke(e,n),r=y(t,1),i=r&&r!=="<>"?Lt(r):un(B(e,n));return{...T(t),type:"dimension",start:e,end:n,textPoint:o,text:i,height:u(t,140)??u(t,40)??Math.max(B(e,n)*.08,1)}}function Te(t,e,n){const o=e.get(X(t.blockName));if(!o)return n.push(`DXF INSERT references missing block "${t.blockName}"; skipped.`),[];const r=[];for(let i=0;i<t.rows;i+=1)for(let s=0;s<t.columns;s+=1){const c={blockBasePoint:o.basePoint,insertionPoint:yt(t,s,i),scaleX:t.scaleX,scaleY:t.scaleY,rotation:t.rotation};for(const a of o.entities)r.push(ot(At(a,c),t))}return r}function Fe(t,e,n){const o=e.get(X(t.blockName));return o?o.entities.map(r=>ot(r,t)):(n.push(`DXF DIMENSION references missing block "${t.blockName}"; skipped.`),[])}function yt(t,e,n){const o={x:e*t.columnSpacing,y:n*t.rowSpacing},r=t.rotation*Math.PI/180,i=Math.cos(r),s=Math.sin(r);return{x:t.point.x+o.x*i-o.y*s,y:t.point.y+o.x*s+o.y*i}}function At(t,e){const n=dt(e);switch(t.type){case"line":return{...t,start:v(t.start,e),end:v(t.end,e)};case"construction-line":return{...t,point:v(t.point,e),direction:_(t.direction,e)};case"dimension":return{...t,start:v(t.start,e),end:v(t.end,e),textPoint:v(t.textPoint,e),height:t.height*n};case"point":return{...t,point:v(t.point,e)};case"circle":return{...t,center:v(t.center,e),radius:t.radius*n};case"arc":return{...t,center:v(t.center,e),radius:t.radius*n,startAngle:t.startAngle+e.rotation,endAngle:t.endAngle+e.rotation};case"ellipse":{const o=v(t.center,e),r=v(tt(t.center,t.majorAxis),e);return{...t,center:o,majorAxis:{x:r.x-o.x,y:r.y-o.y},ratio:t.ratio*(Math.abs(e.scaleY)/Math.abs(e.scaleX)||1)}}case"polyline":return{...t,points:t.points.map(o=>v(o,e)),strokeWidth:t.strokeWidth==null?void 0:t.strokeWidth*dt(e)};case"face":return{...t,points:t.points.map(o=>v(o,e))};case"hatch":return{...t,loops:t.loops.map(o=>o.map(r=>v(r,e)))};case"spline":return{...t,points:t.points.map(o=>v(o,e))};case"text":return{...t,point:v(t.point,e),height:t.height*n,rotation:t.rotation+e.rotation,widthFactor:t.widthFactor*(Math.abs(e.scaleX)/n||1)};case"image":return{...t,point:v(t.point,e),uVector:_(t.uVector,e),vVector:_(t.vVector,e)};default:return t}}function ot(t,e){const n=!t.layer||H(t.layer)==="0",o=n?e.layer??t.layer:t.layer,r=t.colorIndex===0||t.colorIndex==null&&n,i=r?e.colorIndex??t.colorIndex:t.colorIndex,s=t.trueColor??(r?e.trueColor:void 0),c=t.opacity??(n?e.opacity:void 0),a=t.entityVisible??e.entityVisible,l=t.lineType??(n?e.lineType:void 0),f=t.lineTypeScale??(n?e.lineTypeScale:void 0),d=t.lineWeight??(n?e.lineWeight:void 0);return{...t,layer:o,colorIndex:i,trueColor:s,opacity:c,entityVisible:a,lineType:l,lineTypeScale:f,lineWeight:d}}function v(t,e){const n=(t.x-e.blockBasePoint.x)*e.scaleX,o=(t.y-e.blockBasePoint.y)*e.scaleY,r=e.rotation*Math.PI/180,i=Math.cos(r),s=Math.sin(r);return{x:e.insertionPoint.x+n*i-o*s,y:e.insertionPoint.y+n*s+o*i}}function _(t,e){const n=t.x*e.scaleX,o=t.y*e.scaleY,r=e.rotation*Math.PI/180,i=Math.cos(r),s=Math.sin(r);return{x:n*i-o*s,y:n*s+o*i}}function dt(t){return Math.max((Math.abs(t.scaleX)+Math.abs(t.scaleY))/2,1e-4)}function St(t,e){var n;for(;e<t.length&&((n=t[e])==null?void 0:n.code)!==0;)e+=1;return e}function Ie(t,e){const n=document.createElementNS("http://www.w3.org/2000/svg","svg");n.classList.add("cadv-canvas");const o=Math.max(t.bounds.maxX-t.bounds.minX,1),r=Math.max(t.bounds.maxY-t.bounds.minY,1),i=Math.max(o,r)*.04;n.setAttribute("viewBox",`${-i} ${-i} ${o+i*2} ${r+i*2}`),n.setAttribute("role","img"),n.setAttribute("aria-label","CAD drawing preview");const s=document.createElementNS("http://www.w3.org/2000/svg","rect");s.setAttribute("x",String(-i)),s.setAttribute("y",String(-i)),s.setAttribute("width",String(o+i*2)),s.setAttribute("height",String(r+i*2)),s.setAttribute("fill","#ffffff"),n.appendChild(s);const c=document.createElementNS("http://www.w3.org/2000/svg","g");c.setAttribute("fill","none"),c.setAttribute("stroke","#223245"),c.setAttribute("stroke-width",String(Math.max(o,r)/520)),c.setAttribute("stroke-linecap","round"),c.setAttribute("stroke-linejoin","round"),n.appendChild(c);for(const a of t.entities){const l=Le(a,t.bounds,e);l&&c.appendChild(l)}if(!t.entities.length){const a=document.createElementNS("http://www.w3.org/2000/svg","text");a.classList.add("cadv-empty"),a.setAttribute("x","0"),a.setAttribute("y","0"),a.textContent="No supported DXF entities found.",n.appendChild(a)}return n}function Le(t,e,n){var r;const o=(i,s="stroke")=>{if(i.setAttribute(s,t.color??D),s==="stroke"){!i.hasAttribute("stroke-width")&&t.lineWeight!=null&&t.lineWeight>0&&i.setAttribute("stroke-width",String(t.lineWeight));const c=fn(t.lineType,t.lineTypePattern,t.lineTypeScale);c&&i.setAttribute("stroke-dasharray",c)}if(t.layer){i.setAttribute("data-layer",t.layer);const c=n.get(t.layer);c?c.push(i):n.set(t.layer,[i])}return t.colorIndex!=null&&i.setAttribute("data-color-index",String(t.colorIndex)),t.trueColor&&i.setAttribute("data-true-color",t.trueColor),t.opacity!=null&&i.setAttribute("opacity",String(t.opacity)),t.entityVisible===false&&i.setAttribute("data-entity-visible","false"),t.visible===false?(i.setAttribute("display","none"),i.setAttribute("data-layer-visible","false")):t.layer&&i.setAttribute("data-layer-visible","true"),i};switch(t.type){case"line":{const i=document.createElementNS("http://www.w3.org/2000/svg","line"),s=A(t.start,e),c=A(t.end,e);return i.setAttribute("x1",String(s.x)),i.setAttribute("y1",String(s.y)),i.setAttribute("x2",String(c.x)),i.setAttribute("y2",String(c.y)),o(i)}case"construction-line":{const i=document.createElementNS("http://www.w3.org/2000/svg","line"),s=Re(t,e),c=A(s.start,e),a=A(s.end,e);return i.setAttribute("x1",String(c.x)),i.setAttribute("y1",String(c.y)),i.setAttribute("x2",String(a.x)),i.setAttribute("y2",String(a.y)),i.setAttribute("data-construction-line",t.ray?"ray":"xline"),o(i)}case"dimension":{const i=document.createElementNS("http://www.w3.org/2000/svg","g");i.setAttribute("data-dimension","true");const s=document.createElementNS("http://www.w3.org/2000/svg","path");s.setAttribute("d",Xe(t,e));const c=A(t.textPoint,e),a=document.createElementNS("http://www.w3.org/2000/svg","text");return a.setAttribute("x",String(c.x)),a.setAttribute("y",String(c.y)),a.setAttribute("stroke","none"),a.setAttribute("fill",t.color??D),a.setAttribute("font-family",J(void 0)),a.setAttribute("font-size",String(t.height)),a.setAttribute("text-anchor","middle"),a.setAttribute("dominant-baseline","middle"),a.textContent=t.text,i.append(s,a),o(i)}case"point":{const i=document.createElementNS("http://www.w3.org/2000/svg","g"),s=A(t.point,e),c=Math.max(Math.max(e.maxX-e.minX,e.maxY-e.minY)/140,.8),a=document.createElementNS("http://www.w3.org/2000/svg","line");a.setAttribute("x1",String(s.x-c)),a.setAttribute("y1",String(s.y)),a.setAttribute("x2",String(s.x+c)),a.setAttribute("y2",String(s.y));const l=document.createElementNS("http://www.w3.org/2000/svg","line");return l.setAttribute("x1",String(s.x)),l.setAttribute("y1",String(s.y-c)),l.setAttribute("x2",String(s.x)),l.setAttribute("y2",String(s.y+c)),i.setAttribute("data-point","true"),i.append(a,l),o(i)}case"circle":{const i=document.createElementNS("http://www.w3.org/2000/svg","circle"),s=A(t.center,e);return i.setAttribute("cx",String(s.x)),i.setAttribute("cy",String(s.y)),i.setAttribute("r",String(t.radius)),o(i)}case"arc":{const i=document.createElementNS("http://www.w3.org/2000/svg","path");return i.setAttribute("d",Be(t,e)),o(i)}case"ellipse":{const i=_e(t)?Ce(t,e):Pe(t,e);return o(i)}case"polyline":{const i=document.createElementNS("http://www.w3.org/2000/svg","path");return i.setAttribute("d",ke(t,e)),t.strokeWidth!=null&&t.strokeWidth>0&&i.setAttribute("stroke-width",String(t.strokeWidth)),o(i)}case"face":{const i=document.createElementNS("http://www.w3.org/2000/svg","polygon");return i.setAttribute("points",t.points.map(s=>{const c=A(s,e);return`${c.x},${c.y}`}).join(" ")),i.setAttribute("fill-opacity","0.18"),i.setAttribute("stroke-opacity","0.85"),o(i),i.setAttribute("fill",t.color??D),i}case"hatch":{const i=document.createElementNS("http://www.w3.org/2000/svg","path");return i.setAttribute("d",De(t,e)),i.setAttribute("fill-rule","evenodd"),i.setAttribute("clip-rule","evenodd"),i.setAttribute("fill-opacity",t.solid?"0.18":"0.1"),i.setAttribute("stroke-opacity","0.85"),t.patternName&&i.setAttribute("data-hatch-pattern",t.patternName),o(i),i.setAttribute("fill",t.color??D),i}case"spline":{const i=document.createElementNS("http://www.w3.org/2000/svg","path");return i.setAttribute("d",$e(t,e)),o(i)}case"text":{const i=document.createElementNS("http://www.w3.org/2000/svg","text"),s=A(t.point,e),c=It(t.value);return i.setAttribute("x",String(s.x)),i.setAttribute("y",String(s.y)),i.setAttribute("stroke","none"),i.setAttribute("font-family",J(t.fontFamily)),i.setAttribute("font-size",String(t.height)),i.setAttribute("text-anchor",sn(t.horizontalAlign)),i.setAttribute("dominant-baseline",cn(t.verticalAlign)),i.setAttribute("transform",an(t,s)),t.obliqueAngle&&i.setAttribute("font-style","italic"),c.length>1?c.forEach((a,l)=>{const f=document.createElementNS("http://www.w3.org/2000/svg","tspan");f.setAttribute("x",String(s.x)),l>0&&f.setAttribute("dy",String(t.height*1.2)),f.textContent=a,i.appendChild(f)}):i.textContent=c[0]??"",o(i,"fill")}case"image":{const i=document.createElementNS("http://www.w3.org/2000/svg","g"),c=Mt(t).map(p=>A(p,e)),[a,l,f,d]=c;if(!a||!l||!f||!d)return null;const h=st(t.source)?t.source:void 0;if(h){const p=document.createElementNS("http://www.w3.org/2000/svg","image");if(p.setAttribute("href",h),p.setAttribute("x","0"),p.setAttribute("y","0"),p.setAttribute("width",String(t.width)),p.setAttribute("height",String(t.height)),p.setAttribute("preserveAspectRatio","none"),p.setAttribute("transform",Ye(t,e)),t.fade!=null&&p.setAttribute("opacity",String(Math.max(0,Math.min(1,1-t.fade/100)))),t.source&&p.setAttribute("data-image-source",t.source),t.imageDefHandle&&p.setAttribute("data-image-def",t.imageDefHandle),(r=t.clipBoundary)!=null&&r.length){const g=He(t),m=document.createElementNS("http://www.w3.org/2000/svg","clipPath"),b=document.createElementNS("http://www.w3.org/2000/svg","polygon");m.setAttribute("id",g),m.setAttribute("clipPathUnits","userSpaceOnUse"),b.setAttribute("points",c.map(M=>`${M.x},${M.y}`).join(" ")),m.appendChild(b),i.appendChild(m),p.setAttribute("clip-path",`url(#${g})`),p.setAttribute("data-image-clipped","true")}i.appendChild(p)}else{const p=document.createElementNS("http://www.w3.org/2000/svg","polygon");p.setAttribute("points",c.map(b=>`${b.x},${b.y}`).join(" ")),p.setAttribute("fill","#f8fafc"),p.setAttribute("fill-opacity","0.72"),p.setAttribute("stroke-dasharray","6 3"),t.imageDefHandle&&p.setAttribute("data-image-def",t.imageDefHandle),t.source&&p.setAttribute("data-image-source",t.source),i.appendChild(o(p));const g=document.createElementNS("http://www.w3.org/2000/svg","text"),m=Ze(c);g.setAttribute("x",String(m.x)),g.setAttribute("y",String(m.y)),g.setAttribute("text-anchor","middle"),g.setAttribute("dominant-baseline","middle"),g.setAttribute("font-family",J(void 0)),g.setAttribute("font-size",String(Math.max(Math.min(t.width,t.height)*.12,2))),t.imageDefHandle&&g.setAttribute("data-image-def",t.imageDefHandle),t.source&&g.setAttribute("data-image-source",t.source),g.textContent="IMAGE",i.appendChild(o(g,"fill"))}return t.imageDefHandle&&i.setAttribute("data-image-def",t.imageDefHandle),t.source&&i.setAttribute("data-image-source",t.source),o(i)}default:return null}}function Ce(t,e){const n=document.createElementNS("http://www.w3.org/2000/svg","ellipse"),o=A(t.center,e),r=z(t.majorAxis),i=r*t.ratio;return n.setAttribute("cx",String(o.x)),n.setAttribute("cy",String(o.y)),n.setAttribute("rx",String(r)),n.setAttribute("ry",String(i)),n.setAttribute("transform",`rotate(${-Ft(t.majorAxis)} ${o.x} ${o.y})`),n}function Pe(t,e){const n=document.createElementNS("http://www.w3.org/2000/svg","path"),r=Nt(t).map((i,s)=>{const c=A(i,e);return`${s===0?"M":"L"} ${c.x} ${c.y}`});return n.setAttribute("d",r.join(" ")),n}function ke(t,e){var s;const n=t.points[0];if(!n)return"";const o=[],r=A(n,e);o.push(`M ${r.x} ${r.y}`);const i=t.closed?t.points.length:t.points.length-1;for(let c=0;c<i;c+=1){const a=t.points[c],l=t.points[(c+1)%t.points.length];if(!a||!l)continue;const f=A(l,e),d=((s=t.bulges)==null?void 0:s[c])??0;if(Math.abs(d)<1e-9){o.push(`L ${f.x} ${f.y}`);continue}const h=B(a,l);if(h<1e-9)continue;const p=Math.abs(4*Math.atan(d)),g=h*(1+d*d)/(4*Math.abs(d)),m=p>Math.PI?1:0,b=d>0?0:1;o.push(`A ${g} ${g} 0 ${m} ${b} ${f.x} ${f.y}`)}return t.closed&&o.push("Z"),o.join(" ")}function $e(t,e){const n=t.points.map(i=>A(i,e));if(n.length<2)return"";if(n.length===2||t.degree<=1)return n.map((i,s)=>`${s===0?"M":"L"} ${i.x} ${i.y}`).join(" ");const o=t.closed?[...n,n[0]]:n,r=[`M ${o[0].x} ${o[0].y}`];for(let i=0;i<o.length-1;i+=1){const s=o[i-1]??o[i],c=o[i],a=o[i+1],l=o[i+2]??a,f={x:c.x+(a.x-s.x)/6,y:c.y+(a.y-s.y)/6},d={x:a.x-(l.x-c.x)/6,y:a.y-(l.y-c.y)/6};r.push(`C ${f.x} ${f.y} ${d.x} ${d.y} ${a.x} ${a.y}`)}return t.closed&&r.push("Z"),r.join(" ")}function De(t,e){return t.loops.map(n=>{const o=n[0];if(!o)return"";const r=[],i=A(o,e);r.push(`M ${i.x} ${i.y}`);for(const s of n.slice(1)){const c=A(s,e);r.push(`L ${c.x} ${c.y}`)}return r.push("Z"),r.join(" ")}).filter(Boolean).join(" ")}function Be(t,e){const n=Q(t.center,t.radius,t.startAngle),o=Q(t.center,t.radius,t.endAngle),r=A(n,e),i=A(o,e),c=ze(t.startAngle,t.endAngle)>180?1:0;return`M ${r.x} ${r.y} A ${t.radius} ${t.radius} 0 ${c} 0 ${i.x} ${i.y}`}function Re(t,e){const n=z(t.direction),o={x:t.direction.x/n,y:t.direction.y/n},r=Math.max(e.maxX-e.minX,e.maxY-e.minY,1)*2;return{start:t.ray?t.point:{x:t.point.x-o.x*r,y:t.point.y-o.y*r},end:{x:t.point.x+o.x*r,y:t.point.y+o.y*r}}}function Xe(t,e){const n=A(t.start,e),o=A(t.end,e),r=Math.max(t.height*.8,B(t.start,t.end)*.04,1),i=B(t.start,t.end)||1,s={x:-((o.y-n.y)/i),y:(o.x-n.x)/i},c={x:n.x+s.x*r,y:n.y+s.y*r},a={x:n.x-s.x*r,y:n.y-s.y*r},l={x:o.x+s.x*r,y:o.y+s.y*r},f={x:o.x-s.x*r,y:o.y-s.y*r};return[`M ${n.x} ${n.y} L ${o.x} ${o.y}`,`M ${c.x} ${c.y} L ${a.x} ${a.y}`,`M ${l.x} ${l.y} L ${f.x} ${f.y}`].join(" ")}function Mt(t){var e;return(e=t.clipBoundary)!=null&&e.length?t.clipBoundary.map(n=>Et(t,n)):Oe(t)}function Oe(t){return gt({x:0,y:0},{x:t.width,y:t.height},t.width,t.height).map(e=>Et(t,e))}function Et(t,e){return tt(tt(t.point,ht(t.uVector,e.x)),ht(t.vVector,e.y))}function He(t){return`cadv-image-clip-${(t.imageDefHandle??t.source??`${t.point.x}-${t.point.y}`).replace(/[^a-z0-9_-]+/gi,"-")}`}function Ye(t,e){const n=A(t.point,e);return["matrix(",$(t.uVector.x),$(-t.uVector.y),$(t.vVector.x),$(-t.vVector.y),$(n.x),$(n.y),")"].join(" ")}function ze(t,e){let n=e-t;for(;n<0;)n+=360;for(;n>360;)n-=360;return n}function Q(t,e,n){const o=n*Math.PI/180;return{x:t.x+Math.cos(o)*e,y:t.y+Math.sin(o)*e}}function vt(t){var r;const e=[],n=t.closed?t.points.length:t.points.length-1;for(let i=0;i<n;i+=1){const s=t.points[i],c=t.points[(i+1)%t.points.length];if(!s||!c)continue;e.push(s);const a=((r=t.bulges)==null?void 0:r[i])??0;Math.abs(a)>=1e-9&&e.push(...Ve(s,c,a))}const o=t.points[t.points.length-1];return!t.closed&&o&&e.push(o),e}function Ve(t,e,n,o=24){const r=B(t,e);if(r<1e-9||Math.abs(n)<1e-9)return[];const i=r*(1+n*n)/(4*Math.abs(n)),s=r*(1-n*n)/(4*n),c={x:(t.x+e.x)/2,y:(t.y+e.y)/2},a={x:-(e.y-t.y)/r,y:(e.x-t.x)/r},l={x:c.x+a.x*s,y:c.y+a.y*s},f=Math.atan2(t.y-l.y,t.x-l.x),d=4*Math.atan(n),h=Math.max(6,Math.ceil(Math.abs(d)/(Math.PI*2)*o)),p=[];for(let g=1;g<h;g+=1){const m=f+d*g/h;p.push({x:l.x+Math.cos(m)*i,y:l.y+Math.sin(m)*i})}return p}function je(t,e,n,o,r,i=36){let s=o-n;if(r)for(;s<=0;)s+=360;else for(;s>=0;)s-=360;const c=Math.max(6,Math.ceil(Math.abs(s)/360*i)),a=[];for(let l=0;l<=c;l+=1)a.push(Q(t,e,n+s*l/c));return a}function We(t,e,n,o,r,i,s=72){let c=o*Math.PI/180,l=r*Math.PI/180-c;if(i)for(;l<=0;)l+=Math.PI*2;else for(;l>=0;)l-=Math.PI*2;const f=Math.max(8,Math.ceil(Math.abs(l)/(Math.PI*2)*s)),d={x:-e.y*n,y:e.x*n},h=[];for(let p=0;p<=f;p+=1){const g=c+l*p/f;h.push({x:t.x+e.x*Math.cos(g)+d.x*Math.sin(g),y:t.y+e.y*Math.cos(g)+d.y*Math.sin(g)})}return h}function Ue(t,e,n,o=8){if(t.length<2)return[];if(t.length===2||n<=1)return[...t];const r=e?[...t,t[0]]:t,i=[];for(let s=0;s<r.length-1;s+=1){const c=r[s-1]??r[s],a=r[s],l=r[s+1],f=r[s+2]??l;for(let d=0;d<o;d+=1){const h=d/o;i.push(qe(c,a,l,f,h))}}return i.push(r[r.length-1]),i}function qe(t,e,n,o,r){const i=r*r,s=i*r;return{x:.5*(2*e.x+(-t.x+n.x)*r+(2*t.x-5*e.x+4*n.x-o.x)*i+(-t.x+3*e.x-3*n.x+o.x)*s),y:.5*(2*e.y+(-t.y+n.y)*r+(2*t.y-5*e.y+4*n.y-o.y)*i+(-t.y+3*e.y-3*n.y+o.y)*s)}}function Nt(t,e=72){const n=Tt(t.startParameter,t.endParameter),o=Math.max(8,Math.ceil(n/(Math.PI*2)*e)),r=Ge(t),i=[];for(let s=0;s<=o;s+=1){const c=t.startParameter+n*s/o;i.push({x:t.center.x+t.majorAxis.x*Math.cos(c)+r.x*Math.sin(c),y:t.center.y+t.majorAxis.y*Math.cos(c)+r.y*Math.sin(c)})}return i}function Ge(t){return{x:-t.majorAxis.y*t.ratio,y:t.majorAxis.x*t.ratio}}function _e(t){return Math.abs(Tt(t.startParameter,t.endParameter)-Math.PI*2)<1e-4}function Tt(t,e){let n=e-t;for(;n<0;)n+=Math.PI*2;for(;n>Math.PI*2;)n-=Math.PI*2;return n||Math.PI*2}function z(t){return Math.hypot(t.x,t.y)}function B(t,e){return Math.hypot(e.x-t.x,e.y-t.y)}function Ft(t){return Math.atan2(t.y,t.x)*180/Math.PI}function tt(t,e){return{x:t.x+e.x,y:t.y+e.y}}function ht(t,e){return{x:t.x*e,y:t.y*e}}function Ke(t,e){return{x:(t.x+e.x)/2,y:(t.y+e.y)/2}}function Ze(t){if(!t.length)return{x:0,y:0};const e=t.reduce((n,o)=>({x:n.x+o.x,y:n.y+o.y}),{x:0,y:0});return{x:e.x/t.length,y:e.y/t.length}}function A(t,e){return{x:t.x-e.minX,y:e.maxY-t.y}}function Je(t,e){let n=1/0,o=1/0,r=-1/0,i=-1/0,s=0;const c=l=>{n=Math.min(n,l.x),o=Math.min(o,l.y),r=Math.max(r,l.x),i=Math.max(i,l.y),s++},a=l=>{for(const f of l)c(f)};e&&(c({x:e.minX,y:e.minY}),c({x:e.maxX,y:e.maxY}));for(const l of t)switch(l.type){case"line":c(l.start),c(l.end);break;case"construction-line":case"point":c(l.point);break;case"dimension":c(l.start),c(l.end),a(pt(ln(l)));break;case"circle":case"arc":c({x:l.center.x-l.radius,y:l.center.y-l.radius}),c({x:l.center.x+l.radius,y:l.center.y+l.radius});break;case"ellipse":a(Nt(l,144));break;case"polyline":a(Qe(vt(l),l.strokeWidth));break;case"face":case"spline":a(l.points);break;case"hatch":for(const f of l.loops)a(f);break;case"text":a(pt(l));break;case"image":a(Mt(l));break}return s?{minX:n,minY:o,maxX:r,maxY:i}:{minX:0,minY:0,maxX:100,maxY:100}}function Qe(t,e){if(!e||e<=0)return t;const n=e/2;return t.flatMap(o=>[{x:o.x-n,y:o.y-n},{x:o.x+n,y:o.y+n}])}function tn(t){switch(t){case 1:case 4:return"center";case 2:case 3:case 5:return"right";default:return"left"}}function en(t){switch(t){case 1:return"bottom";case 2:return"middle";case 3:return"top";default:return"baseline"}}function nn(t){switch(t){case 2:case 5:case 8:return"center";case 3:case 6:case 9:return"right";default:return"left"}}function on(t){switch(t){case 1:case 2:case 3:return"top";case 4:case 5:case 6:return"middle";case 7:case 8:case 9:return"bottom";default:return"top"}}function rn(t){const e=x(u(t,11),u(t,21));return e&&z(e)>1e-9?Ft(e):void 0}function sn(t){switch(t){case"center":return"middle";case"right":return"end";default:return"start"}}function cn(t){switch(t){case"bottom":return"text-after-edge";case"middle":return"middle";case"top":return"text-before-edge";default:return"alphabetic"}}function an(t,e){const n=[];if(t.rotation&&n.push(`rotate(${-t.rotation} ${e.x} ${e.y})`),t.widthFactor!==1||t.obliqueAngle){const o=t.obliqueAngle?` skewX(${-t.obliqueAngle})`:"";n.push(`translate(${e.x} ${e.y}) scale(${t.widthFactor} 1)${o} translate(${-e.x} ${-e.y})`)}return n.join(" ")}function It(t){return t.replace(/\\P/g,`
4
4
  `).split(`