Files
fad_oa/ruoyi-ui/public/file-viewer/assets/CadViewer-BdTvIAMP.js
王文昊 d53ac1db32 build(ruoyi-ui): 新增文件预览依赖包并更新依赖版本
- 新增了完整的文件预览器前端资源包,包含各类文件格式的解析、渲染依赖
- 更新@openim/wasm-client-sdk依赖版本为宽松匹配
- 删除了旧的紧急联系人菜单清理SQL脚本
2026-07-04 19:15:06 +08:00

106 lines
225 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./dist-BzZSLV34.js","./package-Bop5TfAT.js","./runtime-core.esm-bundler-DO-WTVbd.js","./package-OvxnQO7z.css"])))=>i.map(i=>d[i]);
import{h as e,r as t}from"./package-Bop5TfAT.js";import{D as n,J as r,X as i,Y as a,_ as o,b as s,f as c,g as l,h as u,i as d,o as f,r as p,s as m,t as h,y as g}from"./runtime-core.esm-bundler-DO-WTVbd.js";function _(e,t,n,r){return r===void 0?{level:e,code:t,message:n}:{level:e,code:t,message:n,source:r}}function v(e){return(e??[]).filter(e=>e.level!==`info`)}function y(){return globalThis.DecompressionStream}var b=class{async inflateRaw(e){let t=y();if(!t)throw Error(`This browser does not expose DecompressionStream. Provide a custom InflateProvider, or pre-bundle a WASM/JS inflater.`);try{return await x(e,`deflate-raw`,t)}catch(n){try{return await x(e,`deflate`,t)}catch{throw n instanceof Error?n:Error(String(n))}}}};async function x(e,t,n){let r=new Blob([e]).stream().pipeThrough(new n(t)),i=await new Response(r).arrayBuffer();return new Uint8Array(i)}var S=new TextDecoder(`utf-8`);new TextDecoder(`ascii`);function C(e){return S.decode(e)}function w(e){let t=[],n=e.replace(/\\/g,`/`);for(let e of n.split(`/`))!e||e===`.`||(e===`..`?t.pop():t.push(e));return t.join(`/`)}function T(e){let t=w(e),n=t.lastIndexOf(`/`);return n<0?``:t.slice(0,n)}function E(e,t){if(!t)return w(e);if(t.startsWith(`/`))return w(t.slice(1));let n=T(e);return w((n?n+`/`:``)+t)}function ee(e){let t=e.indexOf(`:`);return t>=0?e.slice(t+1):e}function D(e){return ee(e.localName||e.nodeName)}function O(e,t){return e.getAttribute(t)??e.getAttributeNS(null,t)??void 0}function k(e){return Array.from(e.childNodes).filter(e=>e.nodeType===1)}function A(e,t=`document.xml`){if(typeof DOMParser<`u`){let n=new DOMParser().parseFromString(e,`application/xml`),r=n.getElementsByTagName(`parsererror`)[0];if(r)throw Error(`XML parse error in ${t}: ${r.textContent?.slice(0,180)??`unknown error`}`);return n}try{return ne(e)}catch(e){throw Error(`XML parse error in ${t}: ${String(e)}`)}}var j=class e{constructor(e,t){this.nodeType=1,this.childNodes=[],this.nodeName=e,this.localName=ee(e),this.attributes=t}get textContent(){return this.childNodes.map(e=>e.textContent??``).join(``)}get children(){return this.childNodes.filter(t=>t instanceof e)}getAttribute(e){return this.attributes.find(t=>t.name===e||t.nodeName===e)?.value??null}getAttributeNS(e,t){return this.attributes.find(e=>e.localName===t)?.value??null}getElementsByTagName(t){let n=[],r=i=>{(t===`*`||i.nodeName===t||i.localName===t)&&n.push(i);for(let t of i.childNodes)t instanceof e&&r(t)};for(let t of this.childNodes)t instanceof e&&r(t);return n}},M=class{constructor(e){this.textContent=e,this.nodeType=3}},te=class{constructor(){this.nodeType=9,this.childNodes=[]}get textContent(){return this.childNodes.map(e=>e.textContent??``).join(``)}get children(){return this.childNodes.filter(e=>e instanceof j)}get documentElement(){return this.children[0]}getElementsByTagName(e){let t=[],n=r=>{(e===`*`||r.nodeName===e||r.localName===e)&&t.push(r);for(let e of r.childNodes)e instanceof j&&n(e)};for(let e of this.childNodes)e instanceof j&&n(e);return t}};function ne(e){let t=new te,n=[t],r=0;for(;r<e.length;){let i=e.indexOf(`<`,r);if(i<0){re(n[n.length-1],e.slice(r));break}if(i>r&&re(n[n.length-1],e.slice(r,i)),e.startsWith(`<!--`,i)){let t=e.indexOf(`-->`,i+4);if(t<0)throw Error(`Unclosed XML comment.`);r=t+3;continue}if(e.startsWith(`<![CDATA[`,i)){let t=e.indexOf(`]]>`,i+9);if(t<0)throw Error(`Unclosed XML CDATA section.`);re(n[n.length-1],e.slice(i+9,t)),r=t+3;continue}if(e.startsWith(`<?`,i)){let t=e.indexOf(`?>`,i+2);if(t<0)throw Error(`Unclosed XML processing instruction.`);r=t+2;continue}if(e.startsWith(`<!`,i)){let t=e.indexOf(`>`,i+2);if(t<0)throw Error(`Unclosed XML declaration.`);r=t+1;continue}let a=ie(e,i+1);if(a<0)throw Error(`Unclosed XML tag.`);let o=e.slice(i+1,a).trim();if(r=a+1,!o)continue;if(o[0]===`/`){let e=o.slice(1).trim().split(/\s+/)[0]??``,r=n.pop();for(;r&&r instanceof j&&r.nodeName!==e&&r.localName!==ee(e)&&n.length>0;)r=n.pop();n.length===0&&n.push(t);continue}let s=o.endsWith(`/`);s&&(o=o.slice(0,-1).trim());let c=o.search(/\s/),l=new j(c<0?o:o.slice(0,c),ae(c<0?``:o.slice(c+1))),u=n[n.length-1];l.parentNode=u,u.childNodes.push(l),s||n.push(l)}return t}function re(e,t){if(!t)return;let n=oe(t);n.trim().length!==0&&e.childNodes.push(new M(n))}function ie(e,t){let n=``;for(let r=t;r<e.length;r++){let t=e[r];if(n)t===n&&(n=``);else if(t===`"`||t===`'`)n=t;else if(t===`>`)return r}return-1}function ae(e){let t=[],n=/([^\s=]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g,r;for(;r=n.exec(e);){let e=r[1],n=oe(r[2]??r[3]??``);t.push({name:e,nodeName:e,localName:ee(e),value:n})}return t}function oe(e){return e.replace(/&(#x[0-9a-fA-F]+|#\d+|amp|lt|gt|quot|apos);/g,(e,t)=>t===`amp`?`&`:t===`lt`?`<`:t===`gt`?`>`:t===`quot`?`"`:t===`apos`?`'`:t.startsWith(`#x`)?String.fromCodePoint(Number.parseInt(t.slice(2),16)):t.startsWith(`#`)?String.fromCodePoint(Number.parseInt(t.slice(1),10)):e)}function se(e,t=2048){let n=Math.min(t,e.length);if(n===0)return!0;let r=0,i=0;for(let t=0;t<n;t++){let n=e[t];if(n===0)return!1;n===9||n===10||n===13||n>=32&&n<=126||n>=160?r++:i++}return r/n>.85&&i<20}function ce(e){let t=e.split(/[?#]/)[0]??e,n=t.lastIndexOf(`/`),r=t.lastIndexOf(`.`);return r>n?t.slice(r+1).toLowerCase():``}function le(e){switch(ce(e)){case`png`:return`image/png`;case`jpg`:case`jpeg`:return`image/jpeg`;case`gif`:return`image/gif`;case`bmp`:return`image/bmp`;case`tif`:case`tiff`:return`image/tiff`;case`w2d`:return`application/x-dwf-w2d`;case`hsf`:return`model/vnd.hsf`;case`fpage`:return`application/vnd.ms-package.xps-fixeddocumentsequence+xml`;case`fdseq`:return`application/vnd.ms-package.xps-fixeddocumentsequence+xml`;case`fdoc`:return`application/vnd.ms-package.xps-fixeddocument+xml`;default:return}}async function ue(e,t){let n=new Blob([e],{type:t});return`createImageBitmap`in globalThis?await createImageBitmap(n):await new Promise((e,t)=>{let r=URL.createObjectURL(n),i=new Image;i.onload=()=>{URL.revokeObjectURL(r),e(i)},i.onerror=()=>{URL.revokeObjectURL(r),t(Error(`Failed to decode image`))},i.src=r})}function N(e){let t=e.match(/[-+]?(?:\d+\.\d*|\.\d+|\d+)(?:[eE][-+]?\d+)?/g);return t?t.map(Number).filter(Number.isFinite):[]}var de=101010256,fe=33639248,pe=67324752,me=class e{constructor(e,t,n,r){this.entryMap=new Map,this.cache=new Map,this.bytes=e,this.entries=t,this.archiveBase=n,this.inflater=r??new b;for(let e of t)this.entryMap.set(w(e.name),e)}static open(t,n){let r=new DataView(t.buffer,t.byteOffset,t.byteLength),i=ge(r);if(i<0)throw Error(`ZIP end-of-central-directory record was not found. This is not a DWF 6+/DWFx ZIP package.`);let a=P(r,i+4),o=P(r,i+6);if(a!==0||o!==0)throw Error(`Multi-disk ZIP archives are not supported.`);let s=P(r,i+10),c=F(r,i+12),l=F(r,i+16),u=0,d=l;if(F(r,d)!==fe){let e=Math.max(0,i-c-1024*1024),t=-1;for(let n=i-c;n>=e;n--)if(n>=0&&F(r,n)===fe){t=n;break}if(t<0)throw Error(`ZIP central directory could not be located.`);d=t,u=d-l}let f=[],p=d;for(let e=0;e<s;e++){if(F(r,p)!==fe)throw Error(`Bad central directory signature at ${p}.`);let e=P(r,p+8),n=P(r,p+10),i=P(r,p+12),a=P(r,p+14),o=F(r,p+16),s=F(r,p+20),c=F(r,p+24),l=P(r,p+28),d=P(r,p+30),m=P(r,p+32),h=F(r,p+42),g=t.subarray(p+46,p+46+l),_=t.subarray(p+46+l+d,p+46+l+d+m),v=w(_e(g,e)),y=_e(_,e);v.endsWith(`/`)||f.push({name:v,compressedSize:s,uncompressedSize:c,compressionMethod:n,crc32:o,localHeaderOffset:h,centralHeaderOffset:p-u,flags:e,lastModTime:i,lastModDate:a,comment:y}),p+=46+l+d+m}return new e(t,f,u,n)}has(e){return this.entryMap.has(w(e))}get(e){return this.entryMap.get(w(e))}find(e){return this.entries.find(e)}findAll(e){return this.entries.filter(e)}async read(e){let t=typeof e==`string`?this.get(e):e;if(!t)throw Error(`ZIP entry not found: ${e}`);let n=this.cache.get(t.name);if(n)return n;let r=new DataView(this.bytes.buffer,this.bytes.byteOffset,this.bytes.byteLength),i=this.archiveBase+t.localHeaderOffset;if(F(r,i)!==pe)throw Error(`Bad local header signature for ${t.name}.`);let a=P(r,i+26),o=P(r,i+28),s=i+30+a+o,c=this.bytes.subarray(s,s+t.compressedSize),l;if(t.compressionMethod===0)l=c.slice();else if(t.compressionMethod===8)l=await this.inflater.inflateRaw(c);else throw Error(`Unsupported ZIP compression method ${t.compressionMethod} for ${t.name}.`);if(t.uncompressedSize!==0&&l.byteLength!==t.uncompressedSize&&t.uncompressedSize<4294967295)throw Error(`ZIP entry size mismatch for ${t.name}: expected ${t.uncompressedSize}, got ${l.byteLength}.`);return this.cache.set(t.name,l),l}};function he(e){if(e.byteLength<22)return!1;let t=new DataView(e.buffer,e.byteOffset,e.byteLength);return F(t,0)===pe?!0:ge(t)>=0}function ge(e){let t=Math.max(0,e.byteLength-65535-22);for(let n=e.byteLength-22;n>=t;n--)if(F(e,n)===de)return n;return-1}function _e(e,t){return t&2048?C(e):Array.from(e,e=>String.fromCharCode(e)).join(``)}function P(e,t){return e.getUint16(t,!0)}function F(e,t){return e.getUint32(t,!0)}async function ve(e){let t=new Map,n=new Map,r=[];if(e.has(`[Content_Types].xml`)){let i=A(C(await e.read(`[Content_Types].xml`)),`[Content_Types].xml`);for(let e of Array.from(i.documentElement.children)){let i=D(e);if(i===`Default`){let t=e.getAttribute(`Extension`)?.toLowerCase(),r=e.getAttribute(`ContentType`);t&&r&&n.set(t,r)}else if(i===`Override`){let n=w((e.getAttribute(`PartName`)??``).replace(/^\//,``)),i=e.getAttribute(`ContentType`);n&&i&&(t.set(n,i),r.push({partName:n,contentType:i}))}}}let i=new Map;return{zip:e,contentTypes:t,defaults:n,overrides:r,relationships:i,resources:e.entries.map(e=>({path:e.name,mediaType:be(t,n,e.name),size:e.uncompressedSize})),readText:async t=>C(await e.read(w(t))),readBytes:async t=>e.read(w(t)),getContentType:e=>be(t,n,e),getRelationships:async(t=``)=>{let n=w(t),r=i.get(n);if(r)return r;let a=ye(n);if(!e.has(a))return i.set(n,[]),[];let o=A(C(await e.read(a)),a),s=[];for(let e of Array.from(o.documentElement.children)){if(D(e)!==`Relationship`)continue;let t=e.getAttribute(`Id`)??``,r=e.getAttribute(`Type`)??``,i=e.getAttribute(`Target`)??``,a=e.getAttribute(`TargetMode`)??void 0;!t||!i||s.push({id:t,type:r,target:i,targetMode:a,source:n,resolvedTarget:a===`External`?i:E(n,i)})}return i.set(n,s),s}}}function ye(e){let t=w(e);if(!t)return`_rels/.rels`;let n=t.lastIndexOf(`/`);return n<0?`_rels/${t}.rels`:`${t.slice(0,n)}/_rels/${t.slice(n+1)}.rels`}function be(e,t,n){let r=w(n),i=e.get(r);if(i)return i;let a=r.lastIndexOf(`.`);if(a>=0)return t.get(r.slice(a+1).toLowerCase())}function xe(e,t,n,r){return{...e,pages:t.map(e=>({id:e.id,name:e.name,kind:e.kind,width:e.width,height:e.height,sourcePath:e.sourcePath,diagnostics:e.diagnostics})),pageData:t,zip:n,opc:r}}var Se=1,Ce=4,we=16,Te=32,Ee=128,De=4,Oe=8,ke=1,Ae=4,je=5,Me=1,Ne=2,Pe=4,Fe=8,Ie=16,Le=32,Re=64,ze=128,Be=0,Ve=1,He=2,Ue=3,We=4,Ge=5,Ke=6,I=-2139062144,qe=-2139062145,Je=-2139062146;async function Ye(e,t={}){let n=[],r=await Xe(e,n,t.sourcePath),i=[],a=new Set,o=t.maxMeshes??1e4,s=t.maxTriangles??1e7,c=0,l=0,u=0;for(let e=0;e<r.length&&i.length<o&&u<s;e++)if(r[e]===83)try{let t=Qe(r,e,i.length+1);if(!t)continue;let n=`${t.sourceStart}:${t.sourceEnd}`;if(a.has(n))continue;a.add(n),i.push(t),u+=t.triangleCount,e=Math.max(e,t.sourceEnd-1)}catch(e){let t=String(e);/edgebreaker/i.test(t)?c++:l++}c>0&&n.push(_(`warning`,`W3D_EDGEBREAKER_PARTIAL`,`${c} connectivity-compressed shell candidate(s) were skipped.`,t.sourcePath)),i.length===0&&n.push(_(`error`,`W3D_NO_MESHES`,`No renderable W3D shell meshes were decoded.`,t.sourcePath));let d=gt(i);return{kind:`w3d-model`,title:t.title??`3D Model`,meshes:i,bounds:d,diagnostics:n,sourcePath:t.sourcePath,stats:{meshCount:i.length,vertexCount:i.reduce((e,t)=>e+t.vertexCount,0),triangleCount:i.reduce((e,t)=>e+t.triangleCount,0),decodedBytes:r.byteLength,edgeCount:i.reduce((e,t)=>e+Math.floor((t.edgeIndices?.length??0)/2),0),materialCount:0,textureCount:0,pmiCount:0,nodeCount:0}}}async function Xe(e,t,n){let r=new b;for(let t=0;t+6<e.length;t++){if(e[t]!==120)continue;let n=e[t+1];if(n!==1&&n!==94&&n!==156&&n!==218)continue;let i=e.subarray(t),a=Ze(i),o=[];a.length>6&&o.push({label:`raw-deflate-body`,data:a.subarray(2,a.length-4)}),i.length>2&&o.push({label:`raw-deflate-body-with-trailer`,data:i.subarray(2)}),o.push({label:`zlib-trimmed`,data:a}),a.length!==i.length&&o.push({label:`zlib-with-padding`,data:i});for(let e of o)try{return await r.inflateRaw(e.data)}catch{}}return e}function Ze(e){let t=e.length;for(;t>0&&e[t-1]===0;)t--;return t===e.length?e:e.subarray(0,t)}function Qe(e,t,n){let r=Ct(e,t+1),i=wt(r),a=0;if((i&Ee)!==0&&(a=Tt(r)),(i&Te)!==0||((i&we)===0&&L(r),wt(r),a&3))return;let o=i&65?wt(r):Ae,s,c,l;if(o===je){let t=L(r);if(t<=0||r.pos+t>e.length||t>1e8)throw Error(`Bad edgebreaker block length.`);r.pos;let n=e.subarray(r.pos,r.pos+t);r.pos+=t;let a=$e(n);if((i&Se)===0){let t=a.pointCount*3;if(r.pos+t*4>e.length)throw Error(`Edgebreaker shell has no following full-resolution vertex array.`);s=bt(e,r.pos,t),r.pos+=t*4}else throw Error(`edgebreaker quantized-point reconstruction is not enabled for this shell.`);if(c=dt(a.faces,a.pointCount),l=`edgebreaker-v${n[0]??0}`,c.length<3)throw Error(`Empty edgebreaker face list.`)}else if(o===Ae){let t=L(r);if(t<=0||t>1e7)throw Error(`Bad uncompressed shell point count.`);s=bt(e,r.pos,t*3),r.pos+=t*3*4,c=dt(st(r,t,(i&Ce)!==0,!1).indices,t),l=`uncompressed`}else if(o===ke){let t=L(r);if(t<=0||t>1e7)throw Error(`Bad compressed shell point count.`);let n=(a&Oe)===0?xt(r,6):[0,0,0,1,1,1],o=wt(r),u=L(r);if(u<=0||r.pos+u>e.length)throw Error(`Bad compressed shell point payload length.`);s=ut(e.subarray(r.pos,r.pos+u),t,o,n),r.pos+=u,c=dt(st(r,t,(i&Ce)!==0,(a&De)!==0).indices,t),l=`quantized-${o}`}else throw Error(`Unsupported W3D shell compression scheme ${o}.`);if(c.length<3||s.length<9)return;let u=ft(s,c),d=pt(s,c),f=_t(s);return{id:`w3d-mesh-${n}`,name:`Mesh ${n}`,positions:s,normals:u,indices:c,edgeIndices:d,vertexCount:Math.floor(s.length/3),triangleCount:Math.floor(c.length/3),bounds:f,color:vt(n),sourceStart:t,sourceEnd:r.pos,decodeKind:l}}function $e(e){if(e.byteLength<24)throw Error(`Edgebreaker block is too short.`);let t=new DataView(e.buffer,e.byteOffset,e.byteLength),n=e[0],r=e[1],i=e[2],a=e[3],o=t.getInt32(4,!0),s=t.getInt32(8,!0);t.getInt32(12,!0);let c=t.getInt32(16,!0);if(t.getInt32(20,!0),n<0||n>2||r!==0||i<0||i>3||a<0||a>3)throw Error(`Unsupported edgebreaker header.`);if(o<=0||s<0||c<=0)throw Error(`Invalid edgebreaker sizes.`);let l=n>=1?24:20,u=e.subarray(l,l+o);if(l+=o+Dt(l+o),l+s>e.length)throw Error(`Invalid edgebreaker MTable offset.`);let d=et(e.subarray(l,l+s));l+=s+Dt(l+s);let f=tt(u,d),p=rt(f.opcodePointCount,d,f.faces),m=[];for(let e of p)m.push(e[1],e[2],e[3]);let h=m.reduce((e,t)=>Math.max(e,t),-1),g=m.reduce((e,t)=>Math.min(e,t),c);if(g<0||h>=c)throw Error(`Edgebreaker face index range ${g}..${h} is outside point count ${c}.`);return{pointCount:c,faces:m,triangleCount:m.length/3,diagnostics:[]}}function et(e){let t=Ct(e,0),n=L(t),r=(n&Me)===0?0:L(t),i=(n&Ne)===0?0:L(t),a=(n&Pe)===0?0:i,o=(n&Fe)===0?0:L(t),s=(n&Ie)===0?0:L(t),c=St(t,r),l=St(t,i),u=St(t,a),d=[],f=0;for(let e=0;e<o;e++)f+=L(t),d.push(f);let p=[],m=new Map;f=0;for(let e=0;e<s;e+=2){let e=L(t)+f;f=e;let n=L(t);p.push(e,n),m.set(e,n)}return{flags:n,mlengths:c,m2stackoffsets:l,m2gateoffsets:u,dummies:d,patches:p,patchMap:m,bounding:(n&Le)===0?void 0:xt(t,6),quantization:(n&Re)===0?[11,11,11]:[L(t),L(t),L(t)],normalQuantization:(n&ze)===0?[11,11,11]:[L(t),L(t),L(t)]}}function tt(e,t){let n=Array.from(e),r=[],i=0,a=0;for(;a<n.length;){let{ecount:e,offsets:o}=nt(n,a,t);if(e<=0)throw Error(`Invalid edgebreaker boundary loop length ${e}.`);let s=[],c=[],l=[],u=[],d=[];for(let t=0;t<e;t++)c[t]=t-1,s[t]=t+1,l[t]=i++,u[t]=I;c[0]=e-1,s[e-1]=0;let f=0,p=0,m=e,h=[],g=[];for(;;){for(g.length===0&&g.push(m++);m+2>=s.length;)s.push(0),c.push(0),l.push(0),u.push(I);let e=d.length;d.push({start:0,twin:I},{start:0,twin:I},{start:0,twin:I});let t=[3,l[f],l[s[f]],-1];u[f]!==I&&u[f]>=0&&u[f]<d.length&&(d[u[f]].twin=e),d[e].twin=u[f],d[e].start=l[f],d[e+1].start=l[s[f]];let _=n[a++];if(_===Be){t[3]=i,d[e+1].twin=I,d[e+2].twin=I,d[e+2].start=i;let n=g.pop();s[c[f]]=n,c[n]=c[f],s[n]=f,c[f]=n,l[n]=l[f],l[f]=i,u[f]=e+1,u[n]=e+2,i++}else if(_===Ve)t[3]=l[c[f]],d[e+1].twin=I,d[e+2].twin=u[c[f]],u[c[f]]!==I&&u[c[f]]>=0&&u[c[f]]<d.length&&(d[u[c[f]]].twin=e+2),d[e+2].start=l[c[f]],l[f]=l[c[f]],g.push(c[f]),c[f]=c[c[f]],s[c[f]]=f,u[f]=e+1;else if(_===He)if(t[3]=l[c[f]],d[e+1].twin=u[s[f]],u[s[f]]!==I&&u[s[f]]>=0&&u[s[f]]<d.length&&(d[u[s[f]]].twin=e+1),d[e+2].twin=u[c[f]],u[c[f]]!==I&&u[c[f]]>=0&&u[c[f]]<d.length&&(d[u[c[f]]].twin=e+2),d[e+2].start=l[c[f]],g.push(f,c[f],s[f]),ot(t)&&r.push(t),h.length>0)f=h.pop();else break;else if(_===Ue)t[3]=l[s[s[f]]],d[e+1].twin=u[s[f]],u[s[f]]!==I&&u[s[f]]>=0&&u[s[f]]<d.length&&(d[u[s[f]]].twin=e+1),d[e+2].twin=I,d[e+2].start=l[s[s[f]]],g.push(s[f]),s[f]=s[s[f]],c[s[f]]=f,u[f]=e+2;else if(_===We){let n=f,r=(o[p]??0)+1;for(let e=0;e<r;e++)n=s[n];t[3]=l[s[n]],d[e+1].twin=I,d[e+2].twin=I,d[e+2].start=l[s[n]],p++;let i=g.pop();h.push(i),s[c[f]]=i,c[i]=c[f],s[i]=s[n],c[s[n]]=i,u[i]=e+2,l[i]=l[f],l[f]=l[s[n]],u[f]=e+1,c[f]=n,s[n]=f}else throw Error(`Unsupported edgebreaker opcode ${_}.`);if(_!==He)if(ot(t))r.push(t);else throw Error(`Invalid edgebreaker triangle.`);if(a>=n.length)break}}return{faces:r,opcodePointCount:i}}function nt(e,t,n){let r=0,i=0,a=0,o=0,s=[],c=[],l=[];for(let u=t;u<e.length;u++){let t=e[u];if(t===Be)--r;else if(t===Ve)r+=1;else if(t===He)if(r+=3,s.length>0){let e=c.pop();l[e]=r-2-s.pop()}else break;else if(t===Ue)r+=1;else if(t===We)--r,c.push(i),s.push(r),l[i]=0,i++;else if(t===Ge){let e=n.mlengths[a++]??0;r-=e+1}else if(t===Ke)n.mlengths[o],--r,o++;else throw Error(`Bad edgebreaker opcode ${t}.`)}return{ecount:r,offsets:l}}function rt(e,t,n){let r=new Int32Array(e);for(let n of t.dummies)n>=0&&n<e&&(r[n]=qe);for(let n=0;n+1<t.patches.length;n+=2){let i=t.patches[n];i>=0&&i<e&&r[i]!==qe&&(r[i]=Je)}let i=0;for(let t=0;t<e;t++)r[t]<0?i++:r[t]=i;let a=[];for(let e of n){let n=e[1],i=e[2],o=e[3];if(at(n,r)||at(i,r)||at(o,r))continue;let s=[3,it(n,r,t),it(i,r,t),it(o,r,t)];ot(s)&&a.push(s)}return a}function it(e,t,n){return t[e]===Je?n.patchMap.get(e)??e:e-t[e]}function at(e,t){return e<0||e>=t.length||t[e]===qe}function ot(e){return e[1]!==e[2]&&e[2]!==e[3]&&e[3]!==e[1]&&e[1]>=0&&e[2]>=0&&e[3]>=0}function st(e,t,n,r){wt(e);let i=L(e);if(i<=0||e.pos+i>e.bytes.length)throw Error(`Bad compressed face-list payload length.`);let a=e.bytes.subarray(e.pos,e.pos+i);e.pos+=i;let o=ct(a,r);return{indices:lt(o,t,n),values:o}}function ct(e,t){if(e.length<2)throw Error(`Face payload is too short.`);let n=e[0],r=n/8;if(r!==1&&r!==2&&r!==4)throw Error(`Unsupported face-list sample width ${n}.`);let i=[],a=new DataView(e.buffer,e.byteOffset,e.byteLength);for(let n=1;n+r<=e.length;n+=r)r===1?i.push(t?a.getInt8(n):a.getUint8(n)):r===2?i.push(t?a.getInt16(n,!0):a.getUint16(n,!0)):i.push(t?a.getInt32(n,!0):a.getUint32(n,!0));return i}function lt(e,t,n){let r=[],i=0;for(;i<e.length;){let a=e[i++],o=Math.abs(a);if(o<3||i+o>e.length)throw Error(`Invalid face list run.`);let s=e.slice(i,i+o);if(i+=o,s.some(e=>e<0||e>=t))throw Error(`Face index out of range.`);if(n)if(a>0)for(let e=2;e<s.length;e++)e&1?r.push(s[e-1],s[e-2],s[e]):r.push(s[e-2],s[e-1],s[e]);else for(let e=2;e<s.length;e++)r.push(s[0],s[e-1],s[e]);else if(a>0)for(let e=2;e<s.length;e++)r.push(s[0],s[e-1],s[e])}return r}function ut(e,t,n,r){if(n===8){if(e.length<t*3)throw Error(`Short 8-bit quantized point payload.`);let n=new Float32Array(t*3);for(let i=0;i<t;i++)for(let t=0;t<3;t++){let a=e[i*3+t],o=r[t],s=r[t+3];n[i*3+t]=a===255?s:o+(s-o)*(a/255)}return n}let i=new Float32Array(t*3),a=0,o=(1<<n)-1;for(let s=0;s<t*3;s++){let t=0;for(let r=0;r<n;r++){let n=e[a>>3]??0;t=t<<1|n>>7-(a&7)&1,a++}let c=s%3,l=r[c],u=r[c+3];i[s]=t===o?u:l+(u-l)*(t/o)}return i}function dt(e,t){return t<=65535?new Uint16Array(e):new Uint32Array(e)}function ft(e,t){let n=new Float32Array(e.length);for(let r=0;r+2<t.length;r+=3){let i=t[r]*3,a=t[r+1]*3,o=t[r+2]*3,s=e[i],c=e[i+1],l=e[i+2],u=e[a],d=e[a+1],f=e[a+2],p=e[o],m=e[o+1],h=e[o+2],g=u-s,_=d-c,v=f-l,y=p-s,b=m-c,x=h-l,S=_*x-v*b,C=v*y-g*x,w=g*b-_*y;n[i]=(n[i]??0)+S,n[i+1]=(n[i+1]??0)+C,n[i+2]=(n[i+2]??0)+w,n[a]=(n[a]??0)+S,n[a+1]=(n[a+1]??0)+C,n[a+2]=(n[a+2]??0)+w,n[o]=(n[o]??0)+S,n[o+1]=(n[o+1]??0)+C,n[o+2]=(n[o+2]??0)+w}for(let e=0;e<n.length;e+=3){let t=n[e],r=n[e+1],i=n[e+2],a=Math.hypot(t,r,i)||1;n[e]=t/a,n[e+1]=r/a,n[e+2]=i/a}return n}function pt(e,t,n=Math.PI/5){if(t.length<3)return;let r=[],i=new Map;for(let n=0,a=0;n+2<t.length;n+=3,a++){let o=t[n],s=t[n+1],c=t[n+2],l=mt(e,o,s,c);r.push(l),ht(i,o,s,a),ht(i,s,c,a),ht(i,c,o,a)}let a=Math.cos(n),o=[];for(let e of i.values())if(e.tris.length===1)o.push(e.a,e.b);else if(e.tris.length>=2){let t=!1;for(let n=0;n<e.tris.length&&!t;n++)for(let i=n+1;i<e.tris.length;i++){let o=r[e.tris[n]],s=r[e.tris[i]];if(o[0]*s[0]+o[1]*s[1]+o[2]*s[2]<a){t=!0;break}}t&&o.push(e.a,e.b)}if(o.length!==0)return dt(o,Math.floor(e.length/3))}function mt(e,t,n,r){let i=t*3,a=n*3,o=r*3,s=e[i],c=e[i+1],l=e[i+2],u=e[a],d=e[a+1],f=e[a+2],p=e[o],m=e[o+1],h=e[o+2],g=u-s,_=d-c,v=f-l,y=p-s,b=m-c,x=h-l,S=_*x-v*b,C=v*y-g*x,w=g*b-_*y,T=Math.hypot(S,C,w)||1;return S/=T,C/=T,w/=T,[S,C,w]}function ht(e,t,n,r){let i=Math.min(t,n),a=Math.max(t,n),o=`${i}:${a}`,s=e.get(o);s||(s={a:i,b:a,tris:[]},e.set(o,s)),s.tris.push(r)}function gt(e){if(e.length===0)return{min:[0,0,0],max:[1,1,1],center:[.5,.5,.5],radius:1};let t=[1/0,1/0,1/0],n=[-1/0,-1/0,-1/0];for(let r of e)for(let e=0;e<3;e++)t[e]=Math.min(t[e],r.bounds.min[e]),n[e]=Math.max(n[e],r.bounds.max[e]);let r=[(t[0]+n[0])/2,(t[1]+n[1])/2,(t[2]+n[2])/2];return{min:t,max:n,center:r,radius:Math.max(1e-6,Math.hypot(n[0]-r[0],n[1]-r[1],n[2]-r[2]))}}function _t(e){let t=[1/0,1/0,1/0],n=[-1/0,-1/0,-1/0];for(let r=0;r<e.length;r+=3){let i=e[r],a=e[r+1],o=e[r+2];i<t[0]&&(t[0]=i),a<t[1]&&(t[1]=a),o<t[2]&&(t[2]=o),i>n[0]&&(n[0]=i),a>n[1]&&(n[1]=a),o>n[2]&&(n[2]=o)}return{min:t,max:n}}function vt(e){let t=e*.61803398875%1,n=.62,r=.96-n*.34,i=2*n-r;return[yt(i,r,t+1/3),yt(i,r,t),yt(i,r,t-1/3)]}function yt(e,t,n){return n<0&&(n+=1),n>1&&--n,n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function bt(e,t,n){if(t+n*4>e.length)throw Error(`Float array exceeds W3D stream length.`);let r=new Float32Array(n),i=new DataView(e.buffer,e.byteOffset+t,n*4);for(let e=0;e<n;e++)r[e]=i.getFloat32(e*4,!0);return r}function xt(e,t){let n=[];for(let r=0;r<t;r++)n.push(Et(e));return n}function St(e,t){let n=[];for(let r=0;r<t;r++)n.push(L(e));return n}function Ct(e,t=0){return{bytes:e,pos:t,view:new DataView(e.buffer,e.byteOffset,e.byteLength)}}function wt(e){if(e.pos>=e.bytes.length)throw Error(`Unexpected end of W3D stream.`);return e.bytes[e.pos++]}function Tt(e){let t=e.view.getUint16(e.pos,!0);return e.pos+=2,t}function L(e){let t=e.view.getInt32(e.pos,!0);return e.pos+=4,t}function Et(e){let t=e.view.getFloat32(e.pos,!0);return e.pos+=4,t}function Dt(e){return 3-(e-1)%4}async function Ot(e,t,n){let r=e.diagnostics;e.metadata??={},e.materials??=[],e.textures??=[],e.sceneTree??=[],e.pmi??=[],e.views??=[],e.animations??=[],await kt(e,t,n,r);let i=t.find(e=>/descriptor/i.test(e.role??``)||/descriptor\.xml$/i.test(e.path));if(i&&n.zip.has(i.path))try{At(e,C(await n.readBytes(i.path)),i.path)}catch(e){r.push(_(`warning`,`EMODEL_DESCRIPTOR_PARSE_FAILED`,`Failed to parse eModel descriptor: ${String(e)}`,i.path))}let a=t.find(e=>/content\s+definition/i.test(e.role??``)),o=a&&n.zip.has(a.path)?Mt(e,C(await n.readBytes(a.path)),a.path,r):[],s=t.find(e=>/content\s+presentation/i.test(e.role??``)),c=new Map,l=new Map;if(s&&n.zip.has(s.path))try{let{nodes:t,pmi:r,views:i,animations:a,materials:o}=Nt(C(await n.readBytes(s.path)),s.path,c);l=o,e.sceneTree=t,e.pmi=r,e.views=Jt(e.views??[],i),e.animations=a;let u=new Map((e.materials??[]).map(e=>[e.id,e]));for(let t of o.values())u.set(t.id,Ft(t,e.textures??[]));e.materials=Array.from(u.values())}catch(e){r.push(_(`warning`,`EMODEL_PRESENTATION_PARSE_FAILED`,`Failed to parse eModel presentation: ${String(e)}`,s.path))}Rt(e,o,c,l);let u=Xt(e.sceneTree??[]);(e.views?.length??0)>0&&!e.initialView&&(e.initialView=e.views[0]),e.stats.materialCount=e.materials?.length??0,e.stats.textureCount=e.textures?.length??0,e.stats.pmiCount=e.pmi?.length??0,e.stats.nodeCount=u}async function kt(e,t,n,r){let i=[];for(let e of t.filter(e=>/texture/i.test(e.role??``)||/texture/i.test(e.title??``))){if(!n.zip.has(e.path))continue;let t,a;try{let r=$t(await n.readBytes(e.path));t=r?.width,a=r?.height}catch(t){r.push(_(`warning`,`EMODEL_TEXTURE_SIZE_FAILED`,`Failed to read texture size: ${String(t)}`,e.path))}i.push({id:e.path,name:Qt(e.title)??Zt(e.path),path:e.path,mediaType:e.mediaType,width:t,height:a,role:e.role})}if(e.textures=i,i.length>0){let t=i.find(e=>/thread/i.test(e.name??``))??i.find(e=>!/environment/i.test(e.name??``))??i[0];t&&(e.materials=[{id:`dwfx-default-textured`,name:`DWFx default material`,color:[.72,.74,.78],textureId:t.id,roughness:.6,metalness:.03,doubleSided:!0,source:t.path}])}}function At(e,t,n){let r=A(t,n),i=r.documentElement;if(i){let t=Array.from(i.getElementsByTagName(`*`)).find(e=>D(e)===`Units`)?.getAttribute(`type`);t&&(e.metadata.units=t);let n=i.getAttribute(`name`);n&&(e.metadata.spaceName=n)}for(let t of Array.from(r.getElementsByTagName(`*`)).filter(e=>D(e)===`Property`)){let n=t.getAttribute(`name`),r=t.getAttribute(`value`);n&&r&&(e.metadata[n]=r)}let a=jt(e.metadata);a&&(e.views=Jt(e.views??[],[a]),e.initialView=a)}function jt(e){let t=Vt(e._ViewCubeHomeCameraPosition),n=Vt(e._ViewCubeHomeCameraTarget),r=Vt(e._ViewCubeHomeCameraUpVector),i=Vt(e._ViewCubeHomeCameraField);if(!(!t&&!n&&!r))return{id:`descriptor-home-view`,label:`Home`,camera:{position:t,target:n,up:r,field:i,projection:e._ViewCubeHomeCameraProjection===`1`?`perspective`:`orthographic`}}}function Mt(e,t,n,r){try{let r=A(t,n),i=[];for(let e of Array.from(r.getElementsByTagName(`*`)).filter(e=>D(e)===`Instance`)){let t=e.getAttribute(`id`)??``;t&&i.push({id:t,renderableRef:e.getAttribute(`renderableRef`)??void 0,node:e.getAttribute(`node`)??void 0,geometricVariation:e.getAttribute(`geometricVariation`)??void 0})}return e.metadata.contentInstanceCount=String(i.length),i}catch(e){return r.push(_(`warning`,`EMODEL_CONTENTDEF_PARSE_FAILED`,`Failed to parse eModel content definition: ${String(e)}`,n)),[]}}function Nt(e,t,n){let r=A(e,t),i=Array.from(r.getElementsByTagName(`*`)).filter(e=>D(e)===`View`),a=[];for(let e of i){let t=Ut(e);for(let e of t)a.push(Lt(e,n))}if(a.length===0)for(let e of Array.from(r.getElementsByTagName(`*`)).filter(e=>D(e)===`ReferenceNode`&&!Wt(e)))a.push(Lt(e,n));let o=[];for(let e of Array.from(r.getElementsByTagName(`*`)).filter(e=>/ModelViewNode|View/i.test(D(e)))){let t=e.getAttribute(`id`)??`view-${o.length+1}`,n=e.getAttribute(`label`)??e.getAttribute(`name`)??t,r=Ht(e).find(e=>D(e)===`Camera`)??Array.from(e.getElementsByTagName(`*`)).find(e=>D(e)===`Camera`),i=r?zt(r):void 0;(i||/ModelViewNode/i.test(D(e)))&&o.push({id:t,label:n,camera:i})}let s=[];for(let e of Array.from(r.getElementsByTagName(`*`))){let t=D(e);/PMI|Markup|Dimension|Annotation|Callout|Leader|Note/i.test(t)&&s.push({id:e.getAttribute(`id`)??`pmi-${s.length+1}`,type:/Leader/i.test(t)?`leader`:/Text|Note|Dimension/i.test(t)?`text`:`markup`,label:e.getAttribute(`label`)??e.getAttribute(`name`)??t,text:e.getAttribute(`text`)??e.textContent?.trim()??void 0,targetRef:e.getAttribute(`contentElementRefs`)??e.getAttribute(`target`)??void 0,properties:Kt(e)})}let c=[];for(let e of Array.from(r.getElementsByTagName(`*`)).filter(e=>/Animation|Sequence|Timeline/i.test(D(e))))c.push({id:e.getAttribute(`id`)??`animation-${c.length+1}`,name:e.getAttribute(`label`)??e.getAttribute(`name`)??D(e),targetRef:e.getAttribute(`target`)??void 0});let l=Pt(r);return{nodes:a,pmi:s,views:Yt(o),animations:c,materials:l}}function Pt(e){let t=new Map;for(let n of Array.from(e.getElementsByTagName(`*`)).filter(e=>D(e)===`InstanceAttributes`)){let e=n.getAttribute(`id`);if(!e)continue;let r=Ht(n).find(e=>D(e)===`Color`)??Array.from(n.getElementsByTagName(`*`)).find(e=>D(e)===`Color`);if(!r)continue;let i=Array.from(r.getElementsByTagName(`*`)).find(e=>D(e)===`Channel`&&/diffuse/i.test(e.getAttribute(`type`)??``)),a=Array.from(r.getElementsByTagName(`*`)).find(e=>D(e)===`Channel`&&/environment/i.test(e.getAttribute(`type`)??``)),o=Number(i?.getAttribute(`red`)),s=Number(i?.getAttribute(`green`)),c=Number(i?.getAttribute(`blue`));if(![o,s,c].every(Number.isFinite))continue;let l=Number(r.getAttribute(`gloss`)),u=Qt(a?.getAttribute(`name`)??void 0);t.set(e,{id:`material-${e}`,name:`Material ${e}`,color:[o,s,c],opacity:1,roughness:Number.isFinite(l)?Math.max(.12,Math.min(.92,1-l/128)):.58,metalness:.03,textureName:u,doubleSided:!0,source:`content-presentation`})}return t}function Ft(e,t){if(e.textureId||!e.textureName)return e;let n=It(e.textureName),r=t.find(e=>It(e.name??``).includes(n)||n.includes(It(e.name??``)));return r?{...e,textureId:r.id}:e}function It(e){return e.replace(/&quot;/g,``).replace(/["{}]/g,``).toLowerCase()}function Lt(e,t){let n=qt(e.getAttribute(`contentElementRefs`)??e.getAttribute(`contentRefs`)??``),r={id:e.getAttribute(`id`)??`node-${Math.random().toString(36).slice(2)}`,label:e.getAttribute(`label`)??e.getAttribute(`name`)??D(e),contentRefs:n,meshIds:[],children:[],properties:Kt(e)};for(let e of n)t.set(e,r);for(let n of Ut(e))r.children.push(Lt(n,t));return r}function Rt(e,t,n,r){let i=new Map(n);t.forEach((t,n)=>{let a=e.meshes[n];if(!a)return;let o=[t.renderableRef,t.id].filter(Boolean);a.selectionRefs=o,a.nodeId=t.node;let s=r.get(t.id)??(t.renderableRef?r.get(t.renderableRef):void 0);s&&(a.materialId=s.id,a.color=s.color);for(let e of o){let t=i.get(e);if(t){a.name=t.label||a.name,t.meshIds.push(a.id);break}}})}function zt(e){return{position:Bt(e,`positionX`,`positionY`,`positionZ`),target:Bt(e,`targetX`,`targetY`,`targetZ`),up:Bt(e,`upVectorX`,`upVectorY`,`upVectorZ`),field:Bt(e,`fieldWidth`,`fieldHeight`,`fieldDepth`),projection:e.getAttribute(`projectionType`)??void 0}}function Bt(e,t,n,r){let i=[Number(e.getAttribute(t)),Number(e.getAttribute(n)),Number(e.getAttribute(r))];return i.every(Number.isFinite)?i:void 0}function Vt(e){if(!e)return;let t=e.trim().split(/[\s,]+/).map(Number).filter(Number.isFinite);return t.length>=3?[t[0],t[1],t[2]]:void 0}function Ht(e){return Array.from(e.children)}function Ut(e){let t=[];for(let n of Ht(e)){let e=D(n);if(e.endsWith(`Node`))t.push(n);else if(e===`Nodes`||e===`Views`)for(let e of Ht(n))D(e).endsWith(`Node`)&&t.push(e)}return t}function Wt(e){let t=Gt(e);for(;t;){if(D(t)===`ReferenceNode`)return!0;t=Gt(t)}return!1}function Gt(e){return(e.parentElement??e.parentNode)||void 0}function Kt(e){let t={};for(let n of Array.from(e.attributes))t[n.localName||n.name]=n.value;return t}function qt(e){return e.trim().split(/[\s,]+/).filter(Boolean)}function Jt(e,t){return Yt([...e,...t])}function Yt(e){let t=new Set,n=[];for(let r of e){let e=r.id||r.label;t.has(e)||(t.add(e),n.push(r))}return n}function Xt(e){let t=0;for(let n of e)t+=1+Xt(n.children);return t}function Zt(e){let t=e.lastIndexOf(`/`);return t>=0?e.slice(t+1):e}function Qt(e){if(e)return e.replace(/^"|"$/g,``).replace(/&quot;/g,`"`)}function $t(e){if(e.length>=24&&e[0]===137&&e[1]===80&&e[2]===78&&e[3]===71)return{width:en(e,16),height:en(e,20)};if(e.length>=4&&e[0]===255&&e[1]===216){let t=2;for(;t+9<e.length;){if(e[t]!==255){t++;continue}let n=e[t+1];for(t+=2;e[t]===255;)t++;if(n===217||n===218||t+2>e.length)break;let r=e[t]<<8|e[t+1];if(r<2||t+r>e.length)break;if(n>=192&&n<=195||n>=197&&n<=199||n>=201&&n<=203||n>=205&&n<=207)return{width:e[t+5]<<8|e[t+6],height:e[t+3]<<8|e[t+4]};t+=r}}}function en(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}var tn=new Set([`http://schemas.microsoft.com/xps/2005/06/fixedrepresentation`,`http://schemas.openxps.org/oxps/v1.0/fixedrepresentation`]);async function nn(e){let t=await ve(e),n=[],r=[],i=await an(t,r,n);if(r.length===0){let e=await sn(t,n);for(let i of e)try{let e=A(await t.readText(i),i),a=Array.from(e.getElementsByTagName(`*`)).filter(e=>D(e)===`DocumentReference`);a.length===0&&n.push(_(`warning`,`DWFX_NO_DOCREF`,`No DocumentReference elements found in ${i}.`,i));for(let e of a){let a=e.getAttribute(`Source`);a&&await cn(t,E(i,a),r,n)}}catch(e){n.push(_(`warning`,`DWFX_FDSEQ_READ_FAILED`,`Failed to read fixed document sequence: ${String(e)}`,i))}}if(r.length===0){let i=e.entries.filter(e=>/\.fpage$/i.test(e.name));for(let[e,a]of i.entries()){let i=await ln(t,a.name,n);r.push({id:`page-${e+1}`,name:a.name.split(`/`).pop()??`Page ${e+1}`,kind:`xps-fixed-page`,sourcePath:a.name,width:i.width,height:i.height,diagnostics:[]})}}if(r.length===0){let t=e.entries.some(e=>/\.(w3d|hsf)$/i.test(e.name))||i.some(e=>/emodel/i.test(e.type));r.push({id:`unsupported-1`,name:t?`Unsupported 3D DWFx package`:`Unsupported DWFx package`,kind:`unsupported`,width:1e3,height:1e3,reason:t?`This DWFx package contains 3D eModel/W3D content but no supported 2D FixedPage or preview image resource was found.`:`No XPS FixedPage parts or supported DWF manifest preview resources were found.`,diagnostics:[_(`error`,`DWFX_NO_PAGES`,`No supported renderable page was found in this DWFx package.`)]})}return xe({kind:`dwfx`,pages:[],resources:t.resources,diagnostics:n,packageEntries:e.entries.map(e=>e.name)},r,e,t)}function rn(e){return e.has(`[Content_Types].xml`)&&(e.has(`_rels/.rels`)||e.entries.some(e=>/\.(fpage|dwfseq)$/i.test(e.name)))}async function an(e,t,n){let r=await on(e,n),i=[];for(let t of r)try{let r=un(await e.readText(t),t);i.push(...r),n.push(_(`info`,`DWFX_DWF_MANIFEST_FOUND`,`Found DWFx DWF manifest with ${r.length} section(s).`,t))}catch(e){n.push(_(`warning`,`DWFX_DWF_MANIFEST_PARSE_FAILED`,`Failed to parse DWFx DWF manifest: ${String(e)}`,t))}for(let r of i.filter(e=>dn(e))){let i=_n(r,/2d\s+streaming\s+graphics/i)??r.resources.find(e=>/\.fpage$/i.test(e.path));if(!i||!/\.fpage$/i.test(vn(i.path)))continue;let a=vn(i.path);if(!e.zip.has(a))continue;let o=await ln(e,a,n);t.push({id:`page-${t.length+1}`,name:r.title||i.title||yn(a),kind:`xps-fixed-page`,sourcePath:a,width:Number.isFinite(o.width)&&o.width>0?o.width:1e3,height:Number.isFinite(o.height)&&o.height>0?o.height:1e3,diagnostics:[]})}if(t.length>0)return i;for(let n of i.filter(e=>fn(e))){let r=pn(n,e.zip),i=_n(n,/3d\s+streaming\s+graphics/i)??n.resources.find(e=>/\.(w3d|hsf)$/i.test(e.path));if(i&&e.zip.has(i.path))try{let r=await Ye(await e.zip.read(i.path),{title:n.title||i.title||yn(i.path),sourcePath:i.path});if(await Ot(r,n.resources,e),r.meshes.length>0){t.push({id:`w3d-${t.length+1}`,name:n.title||i.title||yn(i.path),kind:`w3d-model`,sourcePath:i.path,width:1e3,height:1e3,model:r,diagnostics:r.diagnostics});continue}t.push({id:`unsupported-3d-${t.length+1}`,name:n.title||`Unsupported 3D eModel`,kind:`unsupported`,width:1e3,height:1e3,sourcePath:i.path,reason:`A W3D/HSF 3D stream exists, but no renderable shell geometry was decoded. The package is intentionally not shown as a thumbnail so this failure is visible during production validation.`,diagnostics:[...r.diagnostics,_(`warning`,`DWFX_3D_W3D_UNSUPPORTED`,`Detected a 3D W3D resource, but no renderable shell geometry was decoded.`,i.path)]});continue}catch(e){t.push({id:`unsupported-3d-${t.length+1}`,name:n.title||`Unsupported 3D eModel`,kind:`unsupported`,width:1e3,height:1e3,sourcePath:i.path,reason:`A W3D/HSF 3D stream exists, but geometry parsing failed: ${String(e)}`,diagnostics:[_(`warning`,`DWFX_W3D_PARSE_FAILED`,`Failed to parse W3D geometry: ${String(e)}`,i.path)]});continue}if(r&&e.zip.has(r.path)){let i=bn(await e.zip.read(r.path))??{width:1e3,height:1e3};t.push({id:`image-${t.length+1}`,name:n.title||r.title||yn(r.path),kind:`image`,sourcePath:r.path,mediaType:r.mediaType??le(r.path)??`image/png`,width:i.width,height:i.height,diagnostics:[_(`info`,`DWFX_3D_PREVIEW_ONLY`,`No W3D/HSF geometry stream was declared; showing the embedded section preview image.`,r.path)]})}}return i}async function on(e,t){let n=new Set,r=e=>{e&&n.add(w(vn(e)))},i=new Set;try{let t=await e.getRelationships(``);for(let e of t)(/documentsequence/i.test(e.type)||/\.dwfseq$/i.test(e.resolvedTarget))&&i.add(w(e.resolvedTarget)),/document$/i.test(e.type)&&/manifest\.xml$/i.test(e.resolvedTarget)&&r(e.resolvedTarget)}catch(e){t.push(_(`warning`,`DWFX_DWFSEQ_RELS_FAILED`,`Failed to inspect DWFx package relationships: ${String(e)}`))}for(let t of e.zip.entries)/\.dwfseq$/i.test(t.name)&&i.add(t.name);for(let n of i)if(e.zip.has(n))try{let t=A(await e.readText(n),n),i=Array.from(t.getElementsByTagName(`*`)).filter(e=>D(e)===`ManifestReference`);for(let e of i)r(e.getAttribute(`Source`)??e.getAttribute(`source`)??void 0);let a=await e.getRelationships(n).catch(()=>[]);for(let e of a)(/document/i.test(e.type)||/manifest\.xml$/i.test(e.resolvedTarget))&&r(e.resolvedTarget)}catch(e){t.push(_(`warning`,`DWFX_DWFSEQ_READ_FAILED`,`Failed to read DWFDocumentSequence ${n}: ${String(e)}`,n))}for(let t of e.zip.entries)/^dwf\/documents\/.*\/manifest\.xml$/i.test(t.name)&&r(t.name);return Array.from(n).filter(t=>e.zip.has(t))}async function sn(e,t){let n=new Set;try{let t=await e.getRelationships(``);for(let e of t)(tn.has(e.type)||/fixedrepresentation/i.test(e.type)||/\.fdseq$/i.test(e.resolvedTarget))&&n.add(w(e.resolvedTarget))}catch(e){t.push(_(`warning`,`DWFX_ROOT_RELS_FAILED`,`Failed to read package relationships: ${String(e)}`))}for(let t of e.overrides)(/fixeddocumentsequence/i.test(t.contentType)||/\.fdseq$/i.test(t.partName))&&n.add(t.partName);for(let t of e.zip.entries)/\.fdseq$/i.test(t.name)&&n.add(t.name);return Array.from(n)}async function cn(e,t,n,r){let i;try{i=await e.readText(t)}catch(e){r.push(_(`warning`,`DWFX_FDOC_READ_FAILED`,`Failed to read fixed document ${t}: ${String(e)}`,t));return}let a=A(i,t),o=Array.from(a.getElementsByTagName(`*`)).filter(e=>D(e)===`PageContent`);for(let i of o){let a=i.getAttribute(`Source`);if(!a)continue;let o=E(t,vn(a)),s=a.startsWith(`#`)?a.slice(1):void 0;if(s){let n=(await e.getRelationships(t)).find(e=>e.id===s);n&&(o=n.resolvedTarget)}o=vn(o);let c=i.getAttribute(`Width`),l=i.getAttribute(`Height`),u=c&&l?{width:Number(c),height:Number(l)}:await ln(e,o,r),d=n.length+1;n.push({id:`page-${d}`,name:`Page ${d}`,kind:`xps-fixed-page`,sourcePath:o,width:Number.isFinite(u.width)&&u.width>0?u.width:1e3,height:Number.isFinite(u.height)&&u.height>0?u.height:1e3,diagnostics:[]})}}async function ln(e,t,n){try{let n=vn(t),r=A(C(await e.readBytes(n)),n),i=r.documentElement??Array.from(r.getElementsByTagName(`*`))[0];return{width:Number(i?.getAttribute(`Width`)??1e3),height:Number(i?.getAttribute(`Height`)??1e3)}}catch(e){return n.push(_(`warning`,`DWFX_PAGE_SIZE_FAILED`,`Failed to read FixedPage size: ${String(e)}`,t)),{width:1e3,height:1e3}}}function un(e,t){let n=A(e,t);return Array.from(n.getElementsByTagName(`*`)).filter(e=>D(e)===`Section`).map((e,t)=>{let n=hn(e,`name`)??`section-${t+1}`,r=hn(e,`title`)??n;return{type:hn(e,`type`)??``,name:n,title:r,resources:Array.from(e.getElementsByTagName(`*`)).filter(e=>D(e).endsWith(`Resource`)||D(e)===`Resource`).map(e=>({path:w(vn(hn(e,`href`)??``)),role:hn(e,`role`),mediaType:hn(e,`mime`),title:hn(e,`title`),size:gn(e,`size`)})).filter(e=>e.path.length>0)}}).filter(e=>e.resources.length>0||e.type.length>0)}function dn(e){return/(^|\.)ePlot$/i.test(e.type)||/com\.autodesk\.dwf\.ePlot$/i.test(e.type)}function fn(e){return/(^|\.)eModel$/i.test(e.type)||/com\.autodesk\.dwf\.eModel$/i.test(e.type)}function pn(e,t){let n=e.resources.filter(e=>/^(image\/|application\/octet-stream)/i.test(e.mediaType??``)||/\.(png|jpe?g|gif|bmp)$/i.test(e.path)),r=n.filter(e=>/thumbnail|preview/i.test(e.role??``)||/thumbnail|preview/i.test(e.title??``)),i=r.length>0?r:n.filter(e=>!/texture/i.test(e.role??``));return(i.length>0?i:n).filter(e=>t.has(e.path)).sort((e,t)=>mn(t)-mn(e))[0]}function mn(e){let t=e.size??0;return/thumbnail/i.test(e.role??``)&&(t+=5e6),/preview/i.test(e.role??``)&&(t+=4e6),/icon/i.test(e.role??``)&&(t-=2e6),/texture/i.test(e.role??``)&&(t-=3e6),t}function hn(e,t){return e.getAttribute(t)??e.getAttribute(`dwf:${t}`)??e.getAttribute(`ePlot:${t}`)??e.getAttribute(`eModel:${t}`)??Array.from(e.attributes).find(e=>e.localName===t)?.value??void 0}function gn(e,t){let n=hn(e,t);if(n===void 0)return;let r=Number(n);return Number.isFinite(r)?r:void 0}function _n(e,t){return e.resources.find(e=>t.test(e.role??``))}function vn(e){return w((e.split(/[?#]/)[0]??e).replace(/^\//,``))}function yn(e){let t=vn(e),n=t.lastIndexOf(`/`);return n>=0?t.slice(n+1):t}function bn(e){if(e.length>=24&&e[0]===137&&e[1]===80&&e[2]===78&&e[3]===71)return{width:xn(e,16),height:xn(e,20)};if(e.length>=4&&e[0]===255&&e[1]===216){let t=2;for(;t+9<e.length;){if(e[t]!==255){t++;continue}let n=e[t+1];for(t+=2;e[t]===255;)t++;if(n===217||n===218||t+2>e.length)break;let r=e[t]<<8|e[t+1];if(r<2||t+r>e.length)break;if(n>=192&&n<=195||n>=197&&n<=199||n>=201&&n<=203||n>=205&&n<=207)return{width:e[t+5]<<8|e[t+6],height:e[t+3]<<8|e[t+4]};t+=r}}}function xn(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}function Sn(e){let t=Tn(e),n=[],r=0,i=``,a=0,o=0,s=0,c=0,l,u,d=()=>r<t.length&&t[r]?.kind===`num`,f=()=>{let e=t[r++];if(!e||e.kind!==`num`)throw Error(`Expected number in path data near token ${r}.`);return e.value},p=()=>f()!==0;for(;r<t.length;){let e=t[r];if(!e)break;if(e.kind===`cmd`){if(i=e.value,r++,i===`F`||i===`f`){d()&&f();continue}}else if(!i){r++;continue}let m=i===i.toLowerCase(),h=i.toUpperCase(),g=e=>m?a+e:e,_=e=>m?o+e:e;if(h===`M`){if(!d())continue;let e=g(f()),t=_(f());for(n.push({type:`M`,x:e,y:t}),a=s=e,o=c=t,l=u=void 0;d();){let e=g(f()),t=_(f());n.push({type:`L`,x:e,y:t}),a=e,o=t}}else if(h===`L`)for(;d();){let e=g(f()),t=_(f());n.push({type:`L`,x:e,y:t}),a=e,o=t,l=u=void 0}else if(h===`H`)for(;d();){let e=g(f());n.push({type:`L`,x:e,y:o}),a=e,l=u=void 0}else if(h===`V`)for(;d();){let e=_(f());n.push({type:`L`,x:a,y:e}),o=e,l=u=void 0}else if(h===`C`)for(;d();){let e=g(f()),t=_(f()),r=g(f()),i=_(f()),s=g(f()),c=_(f());n.push({type:`C`,x1:e,y1:t,x2:r,y2:i,x:s,y:c}),a=s,o=c,l={x:r,y:i},u=void 0}else if(h===`S`)for(;d();){let e=l?{x:2*a-l.x,y:2*o-l.y}:{x:a,y:o},t=g(f()),r=_(f()),i=g(f()),s=_(f());n.push({type:`C`,x1:e.x,y1:e.y,x2:t,y2:r,x:i,y:s}),a=i,o=s,l={x:t,y:r},u=void 0}else if(h===`Q`)for(;d();){let e=g(f()),t=_(f()),r=g(f()),i=_(f());n.push({type:`Q`,x1:e,y1:t,x:r,y:i}),a=r,o=i,u={x:e,y:t},l=void 0}else if(h===`T`)for(;d();){let e=u?{x:2*a-u.x,y:2*o-u.y}:{x:a,y:o},t=g(f()),r=_(f());n.push({type:`Q`,x1:e.x,y1:e.y,x:t,y:r}),a=t,o=r,u=e,l=void 0}else if(h===`A`)for(;d();){let e=Math.abs(f()),t=Math.abs(f()),r=f(),i=p(),s=p(),c=g(f()),d=_(f());n.push({type:`A`,rx:e,ry:t,rotation:r,largeArc:i,sweep:s,x:c,y:d}),a=c,o=d,l=u=void 0}else h===`Z`?(n.push({type:`Z`}),a=s,o=c,l=u=void 0):r++}return n}function Cn(e,t){let n=0,r=0,i=0,a=0;for(let o of t)switch(o.type){case`M`:e.moveTo(o.x,o.y),n=i=o.x,r=a=o.y;break;case`L`:e.lineTo(o.x,o.y),n=o.x,r=o.y;break;case`C`:e.bezierCurveTo(o.x1,o.y1,o.x2,o.y2,o.x,o.y),n=o.x,r=o.y;break;case`Q`:e.quadraticCurveTo(o.x1,o.y1,o.x,o.y),n=o.x,r=o.y;break;case`A`:{let t=kn(n,r,o.rx,o.ry,o.rotation,o.largeArc,o.sweep,o.x,o.y,32);for(let[n,r]of t)e.lineTo(n,r);n=o.x,r=o.y;break}case`Z`:e.closePath(),n=i,r=a;break}}function wn(e,t=.75){let n=[],r,i=0,a=0,o=0,s=0,c=()=>(r||(r={points:[],closed:!1},n.push(r)),r),l=(e,t)=>{let n=c(),r=n.points.length;r>=2&&Math.abs(n.points[r-2]-e)<1e-9&&Math.abs(n.points[r-1]-t)<1e-9||n.points.push(e,t)};for(let c of e)switch(c.type){case`M`:r={points:[c.x,c.y],closed:!1},n.push(r),i=o=c.x,a=s=c.y;break;case`L`:l(c.x,c.y),i=c.x,a=c.y;break;case`C`:{let e=En(i,a,c.x,c.y,t);for(let t=1;t<=e;t++){let n=t/e;l(Dn(i,c.x1,c.x2,c.x,n),Dn(a,c.y1,c.y2,c.y,n))}i=c.x,a=c.y;break}case`Q`:{let e=En(i,a,c.x,c.y,t);for(let t=1;t<=e;t++){let n=t/e;l(On(i,c.x1,c.x,n),On(a,c.y1,c.y,n))}i=c.x,a=c.y;break}case`A`:{let e=kn(i,a,c.rx,c.ry,c.rotation,c.largeArc,c.sweep,c.x,c.y,Math.max(8,Math.ceil(24/Math.max(t,.1))));for(let[t,n]of e)l(t,n);i=c.x,a=c.y;break}case`Z`:r&&(l(o,s),r.closed=!0),i=o,a=s;break}return n.filter(e=>e.points.length>=2)}function Tn(e){let t=[],n=/([MmLlHhVvCcSsQqTtAaZzFf])|([-+]?(?:\d+\.\d*|\.\d+|\d+)(?:[eE][-+]?\d+)?)/g,r;for(;(r=n.exec(e))!==null;)r[1]?t.push({kind:`cmd`,value:r[1]}):r[2]&&t.push({kind:`num`,value:Number(r[2])});return t}function En(e,t,n,r,i){let a=Math.hypot(n-e,r-t);return Math.max(4,Math.min(96,Math.ceil(a/Math.max(1.5,i*6))))}function Dn(e,t,n,r,i){let a=1-i;return a*a*a*e+3*a*a*i*t+3*a*i*i*n+i*i*i*r}function On(e,t,n,r){let i=1-r;return i*i*e+2*i*r*t+r*r*n}function kn(e,t,n,r,i,a,o,s,c,l){if(n===0||r===0||Math.abs(e-s)<1e-9&&Math.abs(t-c)<1e-9)return[[s,c]];let u=i*Math.PI/180,d=Math.cos(u),f=Math.sin(u),p=(e-s)/2,m=(t-c)/2,h=d*p+f*m,g=-f*p+d*m;n=Math.abs(n),r=Math.abs(r);let _=h*h/(n*n)+g*g/(r*r);if(_>1){let e=Math.sqrt(_);n*=e,r*=e}let v=n*n,y=r*r,b=h*h,x=g*g,S=(v*y-v*x-y*b)/(v*x+y*b);S=Math.max(0,S);let C=(a===o?-1:1)*Math.sqrt(S),w=C*(n*g/r),T=C*(-r*h/n),E=d*w-f*T+(e+s)/2,ee=f*w+d*T+(t+c)/2,D=(h-w)/n,O=(g-T)/r,k=(-h-w)/n,A=(-g-T)/r,j=Math.atan2(O,D),M=Math.atan2(D*A-O*k,D*k+O*A);!o&&M>0&&(M-=2*Math.PI),o&&M<0&&(M+=2*Math.PI);let te=Math.max(2,Math.min(l,Math.ceil(Math.abs(M)/(Math.PI/16)))),ne=[];for(let e=1;e<=te;e++){let t=j+M*e/te,i=d*n*Math.cos(t)-f*r*Math.sin(t)+E,a=f*n*Math.cos(t)+d*r*Math.sin(t)+ee;ne.push([i,a])}return ne}function An(e,t){let n=C(e),r=[],i=[],a=`#000000`,o,s=1,c=0;if(/<svg[\s>]/i.test(n)){let e=n.matchAll(/<path\b[^>]*\bd=["']([^"']+)["'][^>]*>/gi);for(let t of e){let e=t[0],n=t[1];i.push({type:`path`,commands:Sn(n),stroke:Mn(e,`stroke`)??a,fill:Mn(e,`fill`)??void 0,lineWidth:Number(Mn(e,`stroke-width`)??s)}),c++}let t=n.matchAll(/<(polyline|polygon)\b[^>]*\bpoints=["']([^"']+)["'][^>]*>/gi);for(let e of t){let t=e[0],n=N(e[2]);n.length>=4&&i.push({type:e[1].toLowerCase()===`polygon`?`polygon`:`polyline`,points:n,stroke:Mn(t,`stroke`)??a,fill:Mn(t,`fill`)??void 0,lineWidth:Number(Mn(t,`stroke-width`)??s)}),c++}}let l=n.split(/\r?\n/);for(let e of l){let t=e.trim();if(!t||t.startsWith(`#`)||t.startsWith(`//`))continue;let n=t.toLowerCase(),r=N(t);if(/^(color|stroke|pen|wt_color)\b/i.test(t)){a=Nn(t)??a,c++;continue}if(/^(fill|brush|wt_fill)\b/i.test(t)){o=Nn(t)??o??`#000000`,c++;continue}if(/^(nofill|fillnone)\b/i.test(t)){o=void 0,c++;continue}if(/^(linewidth|lineweight|weight|wt_line_weight)\b/i.test(t)&&r.length>=1){s=Math.max(.2,r[0]),c++;continue}if((/^path\b/i.test(t)||/\bPath\s*Data\b/.test(t))&&/[MmLlCcQqAaZz]/.test(t)){let e=t.replace(/^path\b[:=]?/i,``).replace(/^.*?Data\s*=\s*/i,``).replace(/^['"]|['"]$/g,``);i.push({type:`path`,commands:Sn(e),stroke:a,fill:o,lineWidth:s}),c++;continue}if(/^(line|wt_line)\b/i.test(t)&&r.length>=4){i.push({type:`polyline`,points:r.slice(0,4),stroke:a,lineWidth:s}),c++;continue}if((/^(polyline|wt_polyline|pline)\b/i.test(t)||/\bPolyline\b/i.test(t))&&r.length>=4){i.push({type:`polyline`,points:jn(r),stroke:a,lineWidth:s}),c++;continue}if((/^(polygon|wt_polygon)\b/i.test(t)||/\bPolygon\b/i.test(t))&&r.length>=6){i.push({type:`polygon`,points:jn(r),stroke:a,fill:o??`#000000`,lineWidth:s}),c++;continue}if(/^(rect|rectangle|wt_rectangle)\b/i.test(t)&&r.length>=4){i.push({type:`rect`,x:r[0],y:r[1],width:r[2],height:r[3],stroke:a,fill:o,lineWidth:s}),c++;continue}if(/^(circle|ellipse)\b/i.test(t)&&r.length>=3){let[e,t,n]=r,l=[];for(let r=0;r<=72;r++){let i=Math.PI*2*r/72;l.push(e+Math.cos(i)*n,t+Math.sin(i)*n)}i.push({type:`polygon`,points:l,stroke:a,fill:o,lineWidth:s}),c++;continue}if(/^(text|wt_text)\b/i.test(t)&&r.length>=2){let e=r[0],n=r[1],o=r.length>=3?r[2]:12,s=t.match(/["']([^"']+)["']/)?.[1]??t.replace(/^(text|wt_text)\b/i,``).replace(/[-+]?(?:\d+\.\d*|\.\d+|\d+)(?:[eE][-+]?\d+)?/g,``).trim();i.push({type:`text`,x:e,y:n,size:o,text:s||`Text`,fill:a}),c++;continue}(n.includes(`wt_`)||n.includes(`whip`)||n.includes(`dwf`))&&c++}let u=Pn(i);return i.length===0?r.push(_(`warning`,`W2D_TEXT_NO_GEOMETRY`,`Textual W2D parser did not find supported geometry commands in ${t}.`,t)):r.push(_(`info`,`W2D_TEXT_PARSED`,`Parsed ${i.length} supported vector primitives from ${t}.`,t)),c===0&&r.push(_(`warning`,`W2D_TEXT_UNKNOWN_DIALECT`,`The file is textual, but does not look like the supported WHIP/W2D textual subset.`,t)),{primitives:i,diagnostics:r,bounds:u}}function jn(e){return e.length>=5&&Number.isInteger(e[0])&&e.length-1==e[0]*2?e.slice(1):e}function Mn(e,t){return e.match(RegExp(`${t}=["']([^"']+)["']`,`i`))?.[1]}function Nn(e){let t=e.match(/#(?:[0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})\b/i)?.[0];if(t)return t;let n=N(e);return n.length>=3?`rgb(${Math.max(0,Math.min(255,n[0]))}, ${Math.max(0,Math.min(255,n[1]))}, ${Math.max(0,Math.min(255,n[2]))})`:e.match(/\b(black|white|red|green|blue|yellow|cyan|magenta|gray|grey)\b/i)?.[1]}function Pn(e){let t=1/0,n=1/0,r=-1/0,i=-1/0,a=(e,a)=>{t=Math.min(t,e),n=Math.min(n,a),r=Math.max(r,e),i=Math.max(i,a)};for(let t of e)if(`points`in t)for(let e=0;e+1<t.points.length;e+=2)a(t.points[e],t.points[e+1]);else if(t.type===`rect`)a(t.x,t.y),a(t.x+t.width,t.y+t.height);else if(t.type===`text`)a(t.x,t.y),a(t.x+t.text.length*(t.size??12)*.6,t.y+(t.size??12));else if(t.type===`path`)for(let e of t.commands)`x`in e&&`y`in e&&a(e.x,e.y),`x1`in e&&`y1`in e&&a(e.x1,e.y1),`x2`in e&&`y2`in e&&a(e.x2,e.y2);return Number.isFinite(t)?{minX:t,minY:n,maxX:r,maxY:i}:void 0}var Fn=1,In=2,Ln=4,Rn=8,zn=16,Bn=32,Vn=64,Hn=128,Un=256,Wn=512,Gn=1024;function Kn(e,t){return new qn(e,t).parse()}var qn=class{constructor(e,t){this.bytes=e,this.sourcePath=t,this.pos=0,this.current={x:0,y:0},this.primitives=[],this.diagnostics=[],this.unsupportedOpcodes=[],this.opcodes=0,this.decimalRevision=600,this.state={stroke:`#000000`,fill:void 0,fillOn:!1,visible:!0,lineWidth:1,fontHeight:120,fontRotation:0,fontName:`sans-serif`},this.view=new DataView(e.buffer,e.byteOffset,e.byteLength)}parse(){for(;this.pos<this.bytes.length&&(this.eatWhitespace(),!(this.pos>=this.bytes.length));){let e=this.pos,t=this.u8();this.opcodes++;try{if(t===40){this.pos=e,this.parseExtendedAscii(e);continue}if(t===123){if(!this.parseExtendedBinary(e))break;continue}if(this.parseSingleByteOpcode(t))continue;this.unsupportedOpcodes.push({offset:e,opcode:t,message:`Unsupported/unknown W2D single-byte opcode 0x${t.toString(16).padStart(2,`0`)}.`});break}catch(n){this.unsupportedOpcodes.push({offset:e,opcode:t,message:`Failed while decoding W2D opcode 0x${t.toString(16)}: ${String(n)}`});break}}if(this.primitives.length>0?this.diagnostics.push(_(`info`,`W2D_BINARY_PARSED`,`Parsed ${this.primitives.length} vector primitives from binary WHIP!/W2D stream (${this.opcodes} opcodes).`,this.sourcePath)):this.diagnostics.push(_(`warning`,`W2D_BINARY_NO_GEOMETRY`,`Binary WHIP!/W2D parser did not emit supported geometry.`,this.sourcePath)),this.unsupportedOpcodes.length>0){let e=this.unsupportedOpcodes[0];this.diagnostics.push(_(`warning`,`W2D_BINARY_PARTIAL`,`${this.unsupportedOpcodes.length} unsupported opcode(s); first at byte ${e.offset}: ${e.message}`,this.sourcePath))}return{primitives:this.primitives,diagnostics:this.diagnostics,bounds:Zn(this.primitives),opcodes:this.opcodes,unsupportedOpcodes:this.unsupportedOpcodes}}parseSingleByteOpcode(e){switch(e){case 0:return!0;case 3:{let e=this.u8(),t=this.u8(),n=this.u8(),r=this.u8();return this.state.stroke=tr(e,t,n,r),this.state.fillOn&&(this.state.fill=this.state.stroke),!0}case 6:return this.readBinaryFont(),!0;case 12:{let e=[this.point16Relative(),this.point16Relative()];return this.polyline(e),!0}case 16:{let e=this.pointSet16Relative();return this.pointSetPrimitive(e),!0}case 18:{let e=this.point16Relative(),t=this.u16();return this.ellipsePrimitive(e,t,t,0,0,0),!0}case 20:return this.polytriangles(this.pointSet16Relative()),!0;case 23:return this.state.lineWidth=Math.max(.2,Math.abs(this.i32())),!0;case 24:{let e=this.point32Relative(),t=Xn(this.readWhipString());return this.text(e,t),this.skipComplexTextOptions(),!0}case 146:{let e=this.point32Relative(),t=this.u32(),n=this.u16(),r=this.u16();return this.ellipsePrimitive(e,t,t,n,r,0,!1),!0}case 172:return this.readCount(),!0;case 204:return this.readCount(),!0;case 228:return this.readCount(),!0}switch(String.fromCharCode(e)){case`B`:return this.polyline(this.pointSet32Relative()),!0;case`C`:return this.state.stroke=ir(this.readAsciiInteger()),this.state.fillOn&&(this.state.fill=this.state.stroke),!0;case`c`:return this.state.stroke=ir(this.u8()),this.state.fillOn&&(this.state.fill=this.state.stroke),!0;case`E`:{let e=this.readAsciiPoint(),t=this.readAsciiPoint();return this.ellipsePrimitive(e,t.x,t.y,0,0,0),!0}case`e`:{let e=this.point32Relative(),t=this.u32(),n=this.u32(),r=this.u16(),i=this.u16(),a=this.u16();return this.ellipsePrimitive(e,t,n,r,i,a),!0}case`F`:return this.state.fillOn=!0,this.state.fill=this.state.stroke,!0;case`f`:return this.state.fillOn=!1,this.state.fill=void 0,!0;case`L`:{let e=[this.readAsciiPoint(),this.readAsciiPoint()];return this.polyline(e),!0}case`l`:{let e=[this.point32Relative(),this.point32Relative()];return this.polyline(e),!0}case`N`:return this.i32(),!0;case`n`:return this.u16(),!0;case`O`:return this.current={x:this.i32(),y:this.i32()},!0;case`P`:return this.pointSetPrimitive(this.pointSetAscii()),!0;case`p`:return this.pointSetPrimitive(this.pointSet32Relative()),!0;case`R`:{let e=this.readAsciiPoint(),t=this.readAsciiInteger();return this.ellipsePrimitive(e,t,t,0,0,0),!0}case`r`:{let e=this.point32Relative(),t=this.u32();return this.ellipsePrimitive(e,t,t,0,0,0),!0}case`T`:return this.polytriangles(this.pointSetAscii()),!0;case`t`:return this.polytriangles(this.pointSet32Relative()),!0;case`V`:return this.state.visible=!0,!0;case`v`:return this.state.visible=!1,!0;case`x`:{let e=this.point32Relative(),t=Xn(this.readWhipString());return this.text(e,t),!0}}return!1}parseExtendedAscii(e){let{token:t,expr:n}=this.readBalancedExpression(e);switch(t){case`(W2D`:{let e=n.match(/V(\d+)\.(\d+)/i);e&&(this.decimalRevision=Number(e[1])*100+Number(e[2]));break}case`(Color`:{let e=rr(n);e.length>=3&&(this.state.stroke=er(e[0],e[1],e[2]));break}case`(LineWeight`:{let e=rr(n);e.length>=1&&(this.state.lineWidth=Math.max(.2,Math.abs(e[0])));break}case`(Font`:{let e=n.match(/\(Height\s+(-?\d+)/i)?.[1],t=n.match(/\(Rotation\s+(-?\d+)/i)?.[1],r=n.match(/\(Name\s+(['"])(.*?)\1/i)?.[2];e&&(this.state.fontHeight=Math.max(1,Math.abs(Number(e)))),t&&(this.state.fontRotation=Number(t)||0),r&&(this.state.fontName=r);break}case`(EndOfDWF`:this.pos=this.bytes.length;break;default:break}}parseExtendedBinary(e){if(this.remaining()<6)return!1;let t=this.u32(),n=this.u16();return n===17||n===16||n===291?(this.unsupportedOpcodes.push({offset:e,opcode:`{${n.toString(16)}}`,message:`Embedded compressed WHIP block detected. This build renders uncompressed binary W2D streams and manifest markup XML; compressed nested blocks are skipped.`}),this.pos=t>0&&this.pos+t<=this.bytes.length?this.pos+t:this.bytes.length,!0):t>0&&this.pos+t<=this.bytes.length?(this.pos+=t,!0):(this.unsupportedOpcodes.push({offset:e,opcode:`{${n.toString(16)}}`,message:`Unsupported extended binary WHIP object with unknown payload size.`}),!1)}readBinaryFont(){let e=this.u16();e&Fn&&(this.state.fontName=this.readWhipString()||this.state.fontName),e&In&&this.u8(),e&Ln&&this.u8(),e&Rn&&this.u8(),e&zn&&this.u8(),e&Bn&&(this.state.fontHeight=Math.max(1,Math.abs(this.i32()))),e&Vn&&(this.state.fontRotation=this.u16()),e&Hn&&this.u16(),e&Un&&this.u16(),e&Wn&&this.u16(),e&Gn&&this.i32()}skipComplexTextOptions(){this.skipScoringOption(),this.skipScoringOption();for(let e=0;e<4;e++)this.i32(),this.i32();if(this.decimalRevision>=600&&this.pos<this.bytes.length){let e=Math.max(0,this.readCount()-1);for(let t=0;t<e;t++)this.readCount()}}skipScoringOption(){let e=Math.max(0,this.readCount()-1);for(let t=0;t<e;t++)this.readCount()}pointSetPrimitive(e){this.state.fillOn?this.polygon(e,this.state.fill??this.state.stroke,this.state.stroke):this.polyline(e)}polytriangles(e){if(!(!this.state.visible||e.length<3))for(let t=0;t+2<e.length;t++)this.polygon([e[t],e[t+1],e[t+2]],this.state.stroke,void 0)}polyline(e){!this.state.visible||e.length<2||this.primitives.push({type:`polyline`,points:Jn(e),stroke:this.state.stroke,lineWidth:this.state.lineWidth})}polygon(e,t,n){!this.state.visible||e.length<3||this.primitives.push({type:`polygon`,points:Jn(e),fill:t,stroke:n,lineWidth:this.state.lineWidth})}ellipsePrimitive(e,t,n,r,i,a,o=this.state.fillOn){let s=Yn(e,t,n,r,i,a);o?this.polygon(s,this.state.fill??this.state.stroke,this.state.stroke):this.polyline(s)}text(e,t){!this.state.visible||!t.trim()||this.primitives.push({type:`text`,x:e.x,y:e.y,text:t,size:Math.max(10,Math.abs(this.state.fontHeight)),fill:this.state.stroke})}pointSet32Relative(){let e=this.readCount(),t=[];for(let n=0;n<e;n++)t.push(this.point32Relative());return t}pointSet16Relative(){let e=this.readCount(),t=[];for(let n=0;n<e;n++)t.push(this.point16Relative());return t}pointSetAscii(){let e=this.readAsciiInteger(),t=[];for(let n=0;n<e;n++)t.push(this.readAsciiPoint());return t}point32Relative(){let e=this.i32(),t=this.i32();return this.current={x:this.current.x+e,y:this.current.y+t},{...this.current}}point16Relative(){let e=this.i16(),t=this.i16();return this.current={x:this.current.x+e,y:this.current.y+t},{...this.current}}readAsciiPoint(){let e=this.readAsciiInteger();return this.peek()===44&&this.pos++,{x:e,y:this.readAsciiInteger()}}readAsciiInteger(){this.eatWhitespace();let e=this.pos;for((this.peek()===43||this.peek()===45)&&this.pos++;this.pos<this.bytes.length&&Qn(this.bytes[this.pos]);)this.pos++;let t=$n(this.bytes.subarray(e,this.pos)),n=Number.parseInt(t,10);return Number.isFinite(n)?n:0}readWhipString(){this.eatWhitespace();let e=this.peek();if(e===123){this.pos++;let e=this.i32(),t=Math.max(0,e*2);if(this.pos+t>this.bytes.length)throw Error(`Truncated binary WHIP string.`);let n=new TextDecoder(`utf-16le`).decode(this.bytes.subarray(this.pos,this.pos+t));return this.pos+=t,this.peek()===125&&this.pos++,n}if(e===34||e===39){let e=this.u8(),t=[],n=!1;for(;this.pos<this.bytes.length;){let r=this.u8();if(n)t.push(r),n=!1;else if(r===92)t.push(r),n=!0;else if(r===e)break;else t.push(r)}return $n(new Uint8Array(t))}let t=this.pos;for(;this.pos<this.bytes.length;){let e=this.bytes[this.pos];if(e===32||e===9||e===10||e===13||e===41)break;this.pos++}return $n(this.bytes.subarray(t,this.pos))}readBalancedExpression(e){this.pos=e;let t=0,n=0,r=!1;for(;this.pos<this.bytes.length;){let e=this.u8();if(n)r?r=!1:e===92?r=!0:e===n&&(n=0);else if(e===34||e===39)n=e;else if(e===40)t++;else if(e===41&&(t--,t<=0))break}let i=$n(this.bytes.subarray(e,this.pos));return{token:i.match(/^\([^\s()]+/)?.[0]??`(`,expr:i}}readCount(){let e=this.u8();return e===0?256+this.u16():e}eatWhitespace(){for(;this.pos<this.bytes.length;){let e=this.bytes[this.pos];if(e===32||e===9||e===10||e===13)this.pos++;else break}}remaining(){return this.bytes.length-this.pos}peek(){return this.pos<this.bytes.length?this.bytes[this.pos]:void 0}u8(){if(this.remaining()<1)throw Error(`Unexpected EOF`);return this.view.getUint8(this.pos++)}i16(){if(this.remaining()<2)throw Error(`Unexpected EOF`);let e=this.view.getInt16(this.pos,!0);return this.pos+=2,e}u16(){if(this.remaining()<2)throw Error(`Unexpected EOF`);let e=this.view.getUint16(this.pos,!0);return this.pos+=2,e}i32(){if(this.remaining()<4)throw Error(`Unexpected EOF`);let e=this.view.getInt32(this.pos,!0);return this.pos+=4,e}u32(){if(this.remaining()<4)throw Error(`Unexpected EOF`);let e=this.view.getUint32(this.pos,!0);return this.pos+=4,e}};function Jn(e){let t=[];for(let n of e)t.push(n.x,n.y);return t}function Yn(e,t,n,r,i,a){let o=r,s=i;o===0&&s===0?s=65536:s<=o&&(s+=65536);let c=s-o,l=Math.max(16,Math.min(144,Math.ceil(Math.abs(c)/65536*96))),u=a*Math.PI*2/65536,d=Math.cos(u),f=Math.sin(u),p=[];for(let r=0;r<=l;r++){let i=(o+c*r/l)*Math.PI*2/65536,a=Math.cos(i)*t,s=Math.sin(i)*n;p.push({x:e.x+a*d-s*f,y:e.y+a*f+s*d})}return p}function Xn(e){return e.replace(/\\P/gi,`
`).replace(/\\L|\\l/g,``).replace(/\\O|\\o/g,``).replace(/\\H[-+]?\d*\.?\d+x;/gi,``).replace(/\\S([^;]+);/gi,`$1`).replace(/\\[A-Za-z][^;]*;/g,``).replace(/\\~/g,` `).replace(/\\\\/g,`\\`).trim()}function Zn(e){let t=1/0,n=1/0,r=-1/0,i=-1/0,a=(e,a)=>{t=Math.min(t,e),n=Math.min(n,a),r=Math.max(r,e),i=Math.max(i,a)};for(let t of e)if(`points`in t)for(let e=0;e+1<t.points.length;e+=2)a(t.points[e],t.points[e+1]);else if(t.type===`rect`)a(t.x,t.y),a(t.x+t.width,t.y+t.height);else if(t.type===`text`){let e=t.size??12;a(t.x,t.y),a(t.x,t.y+e)}else if(t.type===`path`)for(let e of t.commands)`x`in e&&`y`in e&&a(e.x,e.y),`x1`in e&&`y1`in e&&a(e.x1,e.y1),`x2`in e&&`y2`in e&&a(e.x2,e.y2);return Number.isFinite(t)?{minX:t,minY:n,maxX:r,maxY:i}:void 0}function Qn(e){return e>=48&&e<=57}function $n(e){return Array.from(e,e=>String.fromCharCode(e)).join(``)}function er(e,t,n){return`rgb(${nr(e)}, ${nr(t)}, ${nr(n)})`}function tr(e,t,n,r){return`rgba(${nr(e)}, ${nr(t)}, ${nr(n)}, ${Math.max(0,Math.min(1,r/255))})`}function nr(e){return Math.max(0,Math.min(255,Math.round(e)))}function rr(e){return(e.match(/[-+]?(?:\d+\.\d*|\.\d+|\d+)(?:[eE][-+]?\d+)?/g)??[]).map(Number).filter(Number.isFinite)}function ir(e){return[`#000000`,`#ff0000`,`#ffff00`,`#00ff00`,`#00ffff`,`#0000ff`,`#ff00ff`,`#000000`,`#808080`,`#c0c0c0`][e]??`#000000`}function ar(e){return e.entries.some(e=>/\.w2d$/i.test(e.name)||/manifest\.xml$/i.test(e.name)||/descriptor\.xml$/i.test(e.name)||/\.hsf$/i.test(e.name))}async function or(e){let t=[],n=[],r=e.entries.map(e=>({path:e.name,mediaType:le(e.name),size:e.uncompressedSize})),i=e.entries.find(e=>/(^|\/)manifest\.xml$/i.test(e.name)),a=[];if(i)try{a=lr(C(await e.read(i)),i.name),t.push(_(`info`,`DWF_MANIFEST_FOUND`,`Found DWF manifest with ${a.length} section(s).`,i.name))}catch(e){t.push(_(`warning`,`DWF_MANIFEST_PARSE_FAILED`,`Failed to parse DWF manifest: ${String(e)}`,i.name))}else t.push(_(`info`,`DWF_NO_MANIFEST`,`No manifest.xml was found; falling back to resource discovery.`));if(a.length>0)for(let r of a){let i=hr(r,/2d\s+streaming\s+graphics/i)??r.resources.find(e=>/\.w2d$/i.test(e.path));if(!i)continue;let a=hr(r,/^descriptor$/i)??{path:w(r.name+`/descriptor.xml`)},o={};if(a&&e.has(a.path))try{o=ur(C(await e.read(a.path)),i.path)}catch(e){t.push(_(`warning`,`DWF_DESCRIPTOR_PARSE_FAILED`,`Failed to parse descriptor for ${r.title}: ${String(e)}`,a.path))}let s=[],c=[];try{let t=await cr(e,i.path);c.push(...t.primitives),s.push(...t.diagnostics)}catch(e){s.push(_(`warning`,`DWF_W2D_READ_FAILED`,`Failed to read or parse ${i.path}: ${String(e)}`,i.path))}for(let t of r.resources.filter(e=>/markup\s+private/i.test(e.role??``)&&/\.xml$/i.test(e.path)))if(e.has(t.path))try{let n=dr(C(await e.read(t.path)),t.path,o.w2dTransform);c.push(...n.primitives),s.push(...n.diagnostics)}catch(e){s.push(_(`warning`,`DWF_MARKUP_XML_PARSE_FAILED`,`Failed to parse markup private XML: ${String(e)}`,t.path))}if(c.length>0){let e=mr(c),t=e?Math.max(1,e.maxX-e.minX):o.paperWidth??1e3,a=e?Math.max(1,e.maxY-e.minY):o.paperHeight??1e3;n.push({id:`page-${n.length+1}`,name:r.title||i.title||gr(i.path),kind:`w2d-text`,sourcePath:i.path,width:t,height:a,primitives:c,bounds:e,diagnostics:s})}else{let t=hr(r,/thumbnail|preview/i)??r.resources.find(e=>/\.(png|jpe?g|gif|bmp)$/i.test(e.path));t&&e.has(t.path)&&n.push({id:`image-${n.length+1}`,name:r.title||gr(t.path),kind:`image`,sourcePath:t.path,mediaType:t.mediaType??le(t.path)??`image/png`,width:1e3,height:1e3,diagnostics:[...s,_(`warning`,`DWF_IMAGE_FALLBACK`,`Vector stream did not produce geometry; using section thumbnail as fallback.`,t.path)]})}}n.length===0&&await sr(e,n,t);let o=e.entries.filter(e=>/\.hsf$/i.test(e.name));if(o.length>0&&(t.push(_(`warning`,`DWF_3D_HSF_DETECTED`,`Detected ${o.length} HSF/3D resource(s). This frontend build reports them but does not render 3D HSF.`,o[0]?.name)),n.length===0&&n.push({id:`unsupported-3d`,name:`Unsupported 3D DWF`,kind:`unsupported`,width:1e3,height:1e3,sourcePath:o[0]?.name,reason:`3D HSF resource detected; not implemented in this pure frontend native renderer build.`,diagnostics:[_(`warning`,`DWF_3D_HSF_UNSUPPORTED`,`3D HSF rendering is not implemented in this build.`,o[0]?.name)]})),n.length===0){let t=_r(e);t&&n.push({id:`image-1`,name:gr(t.name),kind:`image`,sourcePath:t.name,mediaType:le(t.name)??`image/png`,width:1e3,height:1e3,diagnostics:[_(`info`,`DWF_IMAGE_FALLBACK`,`No supported vector page was found; using an embedded preview/image resource.`,t.name)]})}return n.length===0&&n.push({id:`unsupported-1`,name:`Unsupported DWF package`,kind:`unsupported`,width:1e3,height:1e3,reason:`No supported W2D, XPS FixedPage, or preview image resource was found.`,diagnostics:[_(`error`,`DWF_NO_SUPPORTED_PAGE`,`No supported renderable DWF resource was found.`)]}),xe({kind:`dwf`,pages:[],resources:r,diagnostics:t,packageEntries:e.entries.map(e=>e.name)},n,e,void 0)}async function sr(e,t,n){let r=e.entries.filter(e=>/\.w2d$/i.test(e.name));for(let i of r)try{let n=await cr(e,i.name),r=n.bounds,a=r?Math.max(1,r.maxX-r.minX):1e3,o=r?Math.max(1,r.maxY-r.minY):1e3;n.primitives.length>0&&t.push({id:`page-${t.length+1}`,name:gr(i.name),kind:`w2d-text`,sourcePath:i.name,width:a,height:o,primitives:n.primitives,bounds:r,diagnostics:n.diagnostics})}catch(e){n.push(_(`warning`,`DWF_W2D_READ_FAILED`,`Failed to read ${i.name}: ${String(e)}`,i.name))}}async function cr(e,t){let n=await e.read(t);return se(n)?An(n,t):Kn(n,t)}function lr(e,t){let n=A(e,t);return Array.from(n.getElementsByTagName(`*`)).filter(e=>z(e)===`Section`).map((e,t)=>{let n=R(e,`name`)??`section-${t+1}`;return{name:n,title:R(e,`title`)??n,resources:Array.from(e.getElementsByTagName(`*`)).filter(e=>z(e).endsWith(`Resource`)||z(e)===`Resource`).map(e=>({path:w(R(e,`href`)??``),role:R(e,`role`),mediaType:R(e,`mime`),title:R(e,`title`)})).filter(e=>e.path.length>0)}}).filter(e=>e.resources.length>0)}function ur(e,t){let n=A(e,`descriptor.xml`),r=Array.from(n.getElementsByTagName(`*`)).find(e=>z(e)===`Paper`),i={};if(r){i.paperWidth=B(r,`width`),i.paperHeight=B(r,`height`);let e=R(r,`clip`);e&&(i.clip=N(e))}let a=Array.from(n.getElementsByTagName(`*`)).filter(e=>/GraphicResource$/i.test(z(e))||z(e)===`GraphicResource`),o=a.find(e=>w(R(e,`href`)??``)===w(t))??a.find(e=>/2d\s+streaming\s+graphics/i.test(R(e,`role`)??``)),s=o?N(R(o,`transform`)??``):[];return s.length>=14&&(i.w2dTransform={sx:s[0]||1,sy:s[5]||s[0]||1,tx:s[12]||0,ty:s[13]||0}),i}function dr(e,t,n){let r=A(e,t),i=[],a=(e,t)=>n?{x:(e-n.tx)/n.sx,y:(t-n.ty)/n.sy}:{x:e,y:t},o=e=>N(R(e,`Points`)??R(e,`points`)??``);for(let e of Array.from(r.getElementsByTagName(`*`))){let t=z(e);if(t===`Polyline2D`||t===`Leader`){let t=o(e);if(t.length>=4){let n=[];for(let e=0;e+1<t.length;e+=2){let r=a(t[e],t[e+1]);n.push(r.x,r.y)}let r=fr(e);i.push({type:`polyline`,points:n,stroke:r.stroke,lineWidth:r.lineWidth})}}else if(t===`Tag`||t===`Target`){let t=B(e,`CenterX`),n=B(e,`CenterY`),r=B(e,`Width`),o=B(e,`Height`);if([t,n,r,o].every(e=>e!==void 0)){let s=a(t-r/2,n-o/2),c=a(t+r/2,n-o/2),l=a(t+r/2,n+o/2),u=a(t-r/2,n+o/2),d=fr(e);i.push({type:`polygon`,points:[s.x,s.y,c.x,c.y,l.x,l.y,u.x,u.y],stroke:d.stroke,fill:d.fill,lineWidth:d.lineWidth})}}else if(t===`Text`){let t=B(e,`X`),r=B(e,`Y`);if(t!==void 0&&r!==void 0){let o=Array.from(e.getElementsByTagName(`*`)).filter(e=>z(e)===`TextPhrase`),s=o.map(e=>R(e,`String`)??``).filter(Boolean).join(`
`);if(s){let c=a(t,r),l=B(e,`Height`),u=o.length?B(o[0],`FontHeight`):void 0,d=n&&l?Math.max(10,Math.abs(l/n.sy)):u??12,f=o.length?R(o[0],`Color`):void 0;i.push({type:`text`,x:c.x,y:c.y,text:s,size:d,fill:f?pr(f):fr(e).stroke})}}}}let s=[];return i.length>0&&s.push(_(`info`,`DWF_MARKUP_XML_PARSED`,`Parsed ${i.length} markup primitive(s) from markup private XML.`,t)),{primitives:i,diagnostics:s}}function fr(e){let t=`#0000ff`,n,r=1,i=Array.from(e.getElementsByTagName(`*`)).filter(e=>z(e)===`FormatProperty`);for(let e of i){let i=(R(e,`Name`)??``).toUpperCase(),a=(R(e,`Enabled`)??`true`).toLowerCase()!==`false`,o=R(e,`ModifierUIntVal`)??R(e,`UIntValue`)??R(e,`DblValue`)??R(e,`IntValue`);!a||o===void 0||(i===`LINECOLOR`&&(t=pr(o)),i===`FILLCOLOR`&&(n=pr(o)),i===`LINEWEIGHT`&&(r=Math.max(1,Number(o)||r)),i===`NOFILL`&&/true/i.test(R(e,`BoolValue`)??``)&&(n=void 0))}return{stroke:t,fill:n,lineWidth:r}}function pr(e){let t=Number(e);if(!Number.isFinite(t))return`#000000`;let n=t>>>0;return`rgb(${n>>>16&255}, ${n>>>8&255}, ${n&255})`}function mr(e){let t=1/0,n=1/0,r=-1/0,i=-1/0,a=(e,a)=>{t=Math.min(t,e),n=Math.min(n,a),r=Math.max(r,e),i=Math.max(i,a)};for(let t of e)if(`points`in t)for(let e=0;e+1<t.points.length;e+=2)a(t.points[e],t.points[e+1]);else if(t.type===`rect`)a(t.x,t.y),a(t.x+t.width,t.y+t.height);else if(t.type===`text`){let e=t.size??12;a(t.x,t.y),a(t.x,t.y+e)}else if(t.type===`path`)for(let e of t.commands)`x`in e&&`y`in e&&a(e.x,e.y),`x1`in e&&`y1`in e&&a(e.x1,e.y1),`x2`in e&&`y2`in e&&a(e.x2,e.y2);return Number.isFinite(t)?{minX:t,minY:n,maxX:r,maxY:i}:void 0}function hr(e,t){return e.resources.find(e=>t.test(e.role??``))}function R(e,t){return e.getAttribute(t)??e.getAttribute(`dwf:${t}`)??e.getAttribute(`ePlot:${t}`)??Array.from(e.attributes).find(e=>e.localName===t)?.value??void 0}function z(e){let t=e.localName||e.nodeName,n=t.indexOf(`:`);return n>=0?t.slice(n+1):t}function B(e,t){let n=R(e,t);if(n===void 0)return;let r=Number(n);return Number.isFinite(r)?r:void 0}function gr(e){let t=e.lastIndexOf(`/`);return t>=0?e.slice(t+1):e}function _r(e){let t=e.entries.filter(e=>/\.(png|jpe?g|gif|bmp)$/i.test(e.name));if(t.length!==0)return t.sort((e,t)=>vr(t.name,t.uncompressedSize)-vr(e.name,e.uncompressedSize))[0]}function vr(e,t){let n=Math.min(t,1e7)/1e3;return/thumbnail|preview/i.test(e)&&(n+=5e3),ce(e)===`png`&&(n+=100),n}async function yr(e,t={}){let n=await br(e),r=t.fileName??(e instanceof File?e.name:void 0)??`document.dwf`;if(he(n)){let e=me.open(n,t.inflater);return rn(e)?await nn(e):ar(e)?await or(e):e.entries.some(e=>/\.fpage$/i.test(e.name))?await nn(e):await or(e)}if(se(n)){let e=An(n,r),t=[{id:`page-1`,name:r,kind:`w2d-text`,width:e.bounds?Math.max(1,e.bounds.maxX-e.bounds.minX):1e3,height:e.bounds?Math.max(1,e.bounds.maxY-e.bounds.minY):1e3,sourcePath:r,primitives:e.primitives,bounds:e.bounds,diagnostics:e.diagnostics}];return xe({kind:`unknown`,pages:[],resources:[{path:r,mediaType:`text/plain`,size:n.byteLength}],diagnostics:[_(`warning`,`RAW_TEXT_W2D_MODE`,`Input is not a DWF ZIP package; opened it as a textual W2D-like vector stream.`,r)],packageEntries:[r]},t)}let i={id:`unsupported-raw`,name:r,kind:`unsupported`,width:1e3,height:1e3,sourcePath:r,reason:`Input is neither a ZIP-based DWF/DWFx package nor a supported textual W2D stream.`,diagnostics:[_(`error`,`UNSUPPORTED_RAW_FORMAT`,`Unsupported raw DWF input. DWF 6+/DWFx ZIP packages are required for this build.`,r)]};return xe({kind:`unknown`,pages:[],resources:[{path:r,size:n.byteLength}],diagnostics:i.diagnostics,packageEntries:[r]},[i])}async function br(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(await e.arrayBuffer())}var xr={a:1,b:0,c:0,d:1,e:0,f:0};function V(e,t){return{a:e.a*t.a+e.c*t.b,b:e.b*t.a+e.d*t.b,c:e.a*t.c+e.c*t.d,d:e.b*t.c+e.d*t.d,e:e.a*t.e+e.c*t.f+e.e,f:e.b*t.e+e.d*t.f+e.f}}function Sr(e,t,n){return[e.a*t+e.c*n+e.e,e.b*t+e.d*n+e.f]}function Cr(e){if(!e)return{...xr};let t=N(e);return t.length>=6?{a:t[0],b:t[1],c:t[2],d:t[3],e:t[4],f:t[5]}:{...xr}}function H(e,t=1){if(!e||e===`Transparent`||e===`{x:Null}`)return;let n=e.trim();if(n.startsWith(`{`)||n.includes(`Brush`))return;let r=Or(n);if(r&&(n=r),n.startsWith(`sc#`)){let e=N(n);if(e.length>=3){let n=+(e.length>=4),r=e.length>=4?e[0]:1;return Er(Math.round((e[n]??0)*255),Math.round((e[n+1]??0)*255),Math.round((e[n+2]??0)*255),r*t)}}if(n.startsWith(`#`)){let e=n.slice(1);if(e.length===3)return Er(parseInt(e[0]+e[0],16),parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),t);if(e.length===6)return Er(parseInt(e.slice(0,2),16),parseInt(e.slice(2,4),16),parseInt(e.slice(4,6),16),t);if(e.length===8){let n=parseInt(e.slice(0,2),16)/255;return Er(parseInt(e.slice(2,4),16),parseInt(e.slice(4,6),16),parseInt(e.slice(6,8),16),n*t)}}return/^rgba?\(/i.test(n),n}function wr(e,t=4278190080){if(!e)return t;let n=e.trim(),r=n.match(/^rgba?\(([^)]+)\)/i);if(r){let e=r[1].split(`,`).map(e=>e.trim()),t=Number(e[0]??0),n=Number(e[1]??0),i=Number(e[2]??0),a=e[3]===void 0?1:Number(e[3]);return Tr(t,n,i,Math.round(a*255))}if(n.startsWith(`#`)){let e=n.slice(1);if(e.length===6)return Tr(parseInt(e.slice(0,2),16),parseInt(e.slice(2,4),16),parseInt(e.slice(4,6),16),255);if(e.length===8)return Tr(parseInt(e.slice(2,4),16),parseInt(e.slice(4,6),16),parseInt(e.slice(6,8),16),parseInt(e.slice(0,2),16))}let i=Or(n);return i?wr(i,t):t}function Tr(e,t,n,r){return e=Dr(e),t=Dr(t),n=Dr(n),r=Dr(r),e&255|(t&255)<<8|(n&255)<<16|(r&255)<<24}function Er(e,t,n,r){return`rgba(${Dr(e)}, ${Dr(t)}, ${Dr(n)}, ${Math.max(0,Math.min(1,r))})`}function Dr(e){return Math.max(0,Math.min(255,Math.round(e)))}function Or(e){switch(e.toLowerCase()){case`black`:return`#000000`;case`white`:return`#ffffff`;case`red`:return`#ff0000`;case`green`:return`#008000`;case`blue`:return`#0000ff`;case`yellow`:return`#ffff00`;case`cyan`:return`#00ffff`;case`magenta`:return`#ff00ff`;case`gray`:case`grey`:return`#808080`;case`transparent`:return`#00000000`;default:return}}function kr(e){let t=e.margin??24,n=Math.max(1,e.canvasWidth-t*2),r=Math.max(1,e.canvasHeight-t*2),i=Math.min(n/Math.max(1,e.pageWidth),r/Math.max(1,e.pageHeight))*(e.zoom??1);return{a:i,b:0,c:0,d:i,e:(e.canvasWidth-e.pageWidth*i)/2+(e.panX??0)-(e.sourceMinX??0)*i,f:(e.canvasHeight-e.pageHeight*i)/2+(e.panY??0)-(e.sourceMinY??0)*i}}function Ar(e,t,n,r=1,i=0,a=0){let o=e.bounds,s=o?.minX??0;o?.minY;let c=o?.maxY??e.height,l=o?Math.max(1,o.maxX-o.minX):e.width,u=o?Math.max(1,o.maxY-o.minY):e.height,d=Math.max(1,t-48),f=Math.max(1,n-48),p=Math.min(d/Math.max(1,l),f/Math.max(1,u))*r,m=(t-l*p)/2+i,h=(n-u*p)/2+a;return{a:p,b:0,c:0,d:-p,e:m-s*p,f:h+c*p}}function jr(e){let t=Math.hypot(e.a,e.b),n=Math.hypot(e.c,e.d);return Math.max(1e-12,(t+n)*.5)}function Mr(e){let t=e.getBoundingClientRect?.(),n=t&&t.width>0?t.width:Number(e.style.width?.replace(`px`,``))||e.width;return Math.max(1,e.width/Math.max(1,n))}function Nr(e,t,n={},r){let i=jr(t),a=Math.max(0,Math.abs(e||0)*i),o=n.lineWeightMode??`adaptive`;if(o===`physical`)return Math.max(1e-6,Math.abs(e||1));let s=Math.max(1,r.dpr||1),c=Math.max(.25,(n.minStrokeCssPx??.55)*s);if(o===`hairline`)return c/i;let l=Math.max(.05,r.zoom??1),u=n.maxOverviewStrokeCssPx??1.15,d=l<=1?u:Math.min(24,u*(1+Math.log2(l)*1.6)),f=Math.max(c,d*s);return Math.max(c,Math.min(a,f))/i}function Pr(e,t,n={},r){if((n.lineWeightMode??`adaptive`)===`physical`)return!0;let i=Math.max(1,r.dpr||1),a=n.minTextCssPx??3.5;return Math.abs(e*jr(t))>=a*i}function Fr(e,t,n={},r){if(!e||(n.lineWeightMode??`adaptive`)===`physical`)return!0;let i=Math.max(1,r.dpr||1),a=Math.max(0,n.minFilledAreaCssPx??.12)*i*i;if(a<=0)return!0;let o=Ir(t,e.minX,e.minY),s=Ir(t,e.maxX,e.minY),c=Ir(t,e.maxX,e.maxY),l=Ir(t,e.minX,e.maxY),u=[o[0],s[0],c[0],l[0]],d=[o[1],s[1],c[1],l[1]];return(Math.max(...u)-Math.min(...u))*(Math.max(...d)-Math.min(...d))>=a}function Ir(e,t,n){return[e.a*t+e.c*n+e.e,e.b*t+e.d*n+e.f]}var Lr=class{constructor(e={}){this.fbPtr=0,this.fbBytes=0,this.width=0,this.height=0,this.wasmUrl=e.wasmUrl??`./public/dwfv-render.wasm`}async init(){if(this.exports)return;let e=await fetch(this.wasmUrl);if(!e.ok)throw Error(`Failed to load WASM raster backend: ${e.status} ${e.statusText}`);let t=await e.arrayBuffer(),n=await WebAssembly.instantiate(t,{});this.exports=n.instance.exports}begin(e,t,n=`#ffffff`){let r=this.requireExports();this.width=Math.max(1,Math.floor(e)),this.height=Math.max(1,Math.floor(t)),this.fbBytes=this.width*this.height*4,r.dwfv_reset_heap(),this.fbPtr=r.dwfv_alloc(this.fbBytes),this.ensureMemory(this.fbPtr+this.fbBytes),r.dwfv_clear(this.fbPtr,this.width,this.height,wr(n,4294967295))}drawPolyline(e,t,n,r=1){let i=this.requireExports();if(e.length<4||!n)return;let a=Math.floor(e.length/2),o=this.allocF32(a*2),s=new Float32Array(i.memory.buffer,o,a*2);for(let n=0;n<a;n++){let[r,i]=Sr(t,e[n*2],e[n*2+1]);s[n*2]=r,s[n*2+1]=i}i.dwfv_draw_polyline(this.fbPtr,this.width,this.height,o,a,wr(n,4278190080),Math.max(1,r))}drawPolygon(e,t,n){let r=this.requireExports();if(e.length<6||!n)return;let i=Math.floor(e.length/2),a=this.allocF32(i*2),o=new Float32Array(r.memory.buffer,a,i*2);for(let n=0;n<i;n++){let[r,i]=Sr(t,e[n*2],e[n*2+1]);o[n*2]=r,o[n*2+1]=i}r.dwfv_draw_polygon(this.fbPtr,this.width,this.height,a,i,wr(n,4278190080))}toImageData(){let e=this.requireExports(),t=new Uint8ClampedArray(e.memory.buffer,this.fbPtr,this.fbBytes);return new ImageData(new Uint8ClampedArray(t),this.width,this.height)}allocF32(e){let t=this.requireExports(),n=e*4,r=t.dwfv_alloc(n);return this.ensureMemory(r+n),r}ensureMemory(e){let t=this.requireExports(),n=t.memory.buffer.byteLength;e>n&&t.memory.grow(Math.ceil((e-n)/65536))}requireExports(){if(!this.exports)throw Error(`WASM backend is not initialized. Call init() first.`);return this.exports}},Rr=12,zr=128*1024*1024,Br=4,Vr={a:1,b:0,c:0,d:1,e:0,f:0},Hr=class{constructor(e){this.scenes=new Map,this.gpuBytes=0,this.tick=0,this.canvas=e??document.createElement(`canvas`);let t=this.canvas.getContext(`webgl`,{alpha:!1,antialias:!0,depth:!1,stencil:!1,preserveDrawingBuffer:!0,powerPreference:`high-performance`});if(!t)throw Error(`WebGLRenderingContext is not available.`);this.gl=t,this.program=fi(t,mi,hi),this.aPos=t.getAttribLocation(this.program,`a_pos`),this.aColor=t.getAttribLocation(this.program,`a_color`);let n=t.getUniformLocation(this.program,`u_matrix`),r=t.getUniformLocation(this.program,`u_viewport`);if(this.aPos<0||this.aColor<0||!n||!r)throw Error(`Failed to resolve WebGL shader locations.`);this.uMatrix=n,this.uViewport=r}render(e,t,n,r={}){let i=[];if(n.width<=0||n.height<=0)return{commands:0,warnings:i,gpuBytes:this.gpuBytes,vertexCount:0,pathCount:0,cacheHit:!0};this.resize(n.width,n.height);let a=kr({canvasWidth:this.canvas.width,canvasHeight:this.canvas.height,pageWidth:e.width,pageHeight:e.height,zoom:r.zoom,panX:r.panX,panY:r.panY}),o={dpr:Mr(n),zoom:r.zoom??1},s=ei(e,a,r),c=this.scenes.get(s),l=!!c;if(!c){let n=Ur(t);c=this.compileScene(e,s,n,a,r,o),this.scenes.set(s,c),this.gpuBytes+=c.gpuBytes,this.evictIfNeeded(r),c=this.scenes.get(s)??c}c.lastUsed=++this.tick;let u=this.gl,d=ui(r.background??`#ffffff`);if(u.viewport(0,0,this.canvas.width,this.canvas.height),u.disable(u.DEPTH_TEST),u.disable(u.CULL_FACE),u.enable(u.BLEND),u.blendFunc(u.SRC_ALPHA,u.ONE_MINUS_SRC_ALPHA),u.clearColor(d[0],d[1],d[2],d[3]),u.clear(u.COLOR_BUFFER_BIT),u.useProgram(this.program),u.bindBuffer(u.ARRAY_BUFFER,c.buffer),u.enableVertexAttribArray(this.aPos),u.vertexAttribPointer(this.aPos,2,u.FLOAT,!1,Rr,0),u.enableVertexAttribArray(this.aColor),u.vertexAttribPointer(this.aColor,4,u.UNSIGNED_BYTE,!0,Rr,8),u.uniform4f(this.uMatrix,a.a,a.b,a.c,a.d),u.uniform4f(this.uViewport,a.e,a.f,this.canvas.width,this.canvas.height),u.drawArrays(u.TRIANGLES,0,c.vertexCount),r.compositeToTarget??!0){let e=n.getContext(`2d`);if(!e)throw Error(`CanvasRenderingContext2D is not available for WebGL compositing.`);e.save(),e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,n.width,n.height),e.drawImage(this.canvas,0,0),e.restore()}return c.vertexCount===0&&i.push(_(`warning`,`WEBGL_XPS_EMPTY_SCENE`,`WebGL XPS scene contained no drawable vector geometry; Canvas/WASM fallback may be required.`,e.sourcePath)),{commands:c.pathCount,warnings:i,gpuBytes:this.gpuBytes,vertexCount:c.vertexCount,pathCount:c.pathCount,cacheHit:l}}dispose(){for(let e of this.scenes.values())this.gl.deleteBuffer(e.buffer);this.scenes.clear(),this.gpuBytes=0}resize(e,t){(this.canvas.width!==e||this.canvas.height!==t)&&(this.canvas.width=e,this.canvas.height=t)}compileScene(e,t,n,r,i,a){let o=new Kr,s=0;for(let e of n)s++,Gr(o,e,r,i,a);let c=o.byteLength,l=i.maxGpuCacheBytes??zr;if(c>l)throw Error(`WebGL XPS scene buffer would require ${di(c)}, exceeding maxGpuCacheBytes=${di(l)}.`);let u=this.gl,d=u.createBuffer();if(!d)throw Error(`Failed to allocate WebGLBuffer.`);u.bindBuffer(u.ARRAY_BUFFER,d),u.bufferData(u.ARRAY_BUFFER,o.toArrayBuffer(),u.STATIC_DRAW);let f=u.getError();if(f!==u.NO_ERROR)throw u.deleteBuffer(d),Error(`WebGL XPS buffer upload failed: 0x${f.toString(16)} for ${e.sourcePath}.`);return{key:t,buffer:d,vertexCount:o.vertexCount,gpuBytes:c,pathCount:s,lastUsed:++this.tick}}evictIfNeeded(e){let t=e.maxGpuCacheBytes??zr,n=e.maxCachedScenes??Br;for(;this.scenes.size>Math.max(1,n)||this.gpuBytes>t;){let e;for(let t of this.scenes.values())(!e||t.lastUsed<e.lastUsed)&&(e=t);if(!e)break;this.scenes.delete(e.key),this.gl.deleteBuffer(e.buffer),this.gpuBytes-=e.gpuBytes}}};function Ur(e){let t=[];return Wr(e,Vr,1,t),t}function Wr(e,t,n,r){let i=D(e),a=V(t,ti(e)),o=n*ai(O(e,`Opacity`));if(i===`Path`){let t=ni(e);if(t.length>0){let n=ri(e,`Fill`,o),i=ri(e,`Stroke`,o),s=Number(O(e,`StrokeThickness`)??1);(n||i&&s>0)&&r.push({commands:t,matrix:a,opacity:o,fill:n,stroke:i,thickness:Number.isFinite(s)?s:1,lineStyle:si(e),fillRule:oi(e),bounds:ci(t)})}}for(let t of k(e))D(t).includes(`.`)||Wr(t,a,o,r)}function Gr(e,t,n,r,i){let a=V(n,t.matrix),o=jr(t.matrix),s=Math.max(1e-6,t.thickness||1),c=Math.max(.01,Nr(s,a,r,i)*o),l=wn(t.commands,.5),u=t.fill?li(t.fill):void 0,d=t.stroke?li(t.stroke):void 0;if(u&&Fr(t.bounds,a,r,i))for(let n of l)(n.closed||n.points.length>=6)&&qr(e,Zr(n.points,t.matrix),u);if(d&&t.thickness>0)for(let n of l){let r=Zr(n.points,t.matrix),i=n.closed?Qr(r):r;t.lineStyle.dash.length>0?Yr(e,i,c,t.lineStyle,d):Jr(e,i,c,d)}}var Kr=class{constructor(){this.buffer=new ArrayBuffer(64*1024),this.view=new DataView(this.buffer),this.vertexCount=0}get byteLength(){return this.vertexCount*Rr}push(e,t,n){if(!Number.isFinite(e)||!Number.isFinite(t))return;let r=this.byteLength;this.ensure(Rr),this.view.setFloat32(r,e,!0),this.view.setFloat32(r+4,t,!0),this.view.setUint8(r+8,n.r),this.view.setUint8(r+9,n.g),this.view.setUint8(r+10,n.b),this.view.setUint8(r+11,n.a),this.vertexCount++}toArrayBuffer(){return this.buffer.slice(0,this.byteLength)}ensure(e){let t=this.byteLength+e;if(t<=this.buffer.byteLength)return;let n=this.buffer.byteLength;for(;n<t;)n*=2;let r=new ArrayBuffer(n);new Uint8Array(r).set(new Uint8Array(this.buffer,0,this.byteLength)),this.buffer=r,this.view=new DataView(this.buffer)}};function qr(e,t,n){if(t.length<3)return;let r=t[0];for(let i=1;i+1<t.length;i++){let a=t[i],o=t[i+1];$r(r,a,o)<1e-6||(e.push(r.x,r.y,n),e.push(a.x,a.y,n),e.push(o.x,o.y,n))}}function Jr(e,t,n,r){if(t.length<2)return;let i=Math.max(.05,n*.5);for(let n=0;n+1<t.length;n++)Xr(e,t[n],t[n+1],i,r)}function Yr(e,t,n,r,i){if(t.length<2||r.dash.length===0)return;let a=r.dash.map(e=>Math.max(.01,e*n)),o=a.reduce((e,t)=>e+t,0);if(o<=.01){Jr(e,t,n,i);return}let s=0,c=a[0],l=!0,u=(r.dashOffset*n%o+o)%o;for(;u>c;)u-=c,s=(s+1)%a.length,c=a[s],l=!l;c-=u;for(let r=0;r+1<t.length;r++){let o=t[r],u=t[r+1],d=u.x-o.x,f=u.y-o.y,p=Math.hypot(d,f);if(p<=1e-9)continue;let m=0;for(;m<p-1e-9;){let t=Math.min(c,p-m);if(l&&t>1e-9){let r=m/p,a=(m+t)/p;Xr(e,{x:o.x+d*r,y:o.y+f*r},{x:o.x+d*a,y:o.y+f*a},Math.max(.05,n*.5),i)}m+=t,c-=t,c<=1e-9&&(s=(s+1)%a.length,c=a[s],l=!l)}}}function Xr(e,t,n,r,i){let a=n.x-t.x,o=n.y-t.y,s=Math.hypot(a,o);if(s<=1e-9)return;let c=-o/s*r,l=a/s*r,u=t.x+c,d=t.y+l,f=t.x-c,p=t.y-l,m=n.x-c,h=n.y-l,g=n.x+c,_=n.y+l;e.push(u,d,i),e.push(f,p,i),e.push(m,h,i),e.push(u,d,i),e.push(m,h,i),e.push(g,_,i)}function Zr(e,t){let n=[];for(let r=0;r+1<e.length;r+=2){let[i,a]=Sr(t,e[r]??0,e[r+1]??0);n.push({x:i,y:a})}return n}function Qr(e){if(e.length<2)return e;let t=e[0],n=e[e.length-1];return t.x===n.x&&t.y===n.y?e:[...e,{x:t.x,y:t.y}]}function $r(e,t,n){return Math.abs((t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x))}function ei(e,t,n){let r=n.lineWeightMode??`adaptive`,i=r===`physical`?`physical`:String(Math.round(Math.log2(Math.max(1e-12,jr(t)))*8));return`${e.id}|${e.sourcePath}|${e.width}x${e.height}|lw:${r}:${i}`}function ti(e){let t=Cr(O(e,`RenderTransform`)??O(e,`Transform`));for(let n of k(e)){let e=D(n);if(e.endsWith(`.RenderTransform`)||e.endsWith(`.Transform`)){let e=k(n).find(e=>D(e)===`MatrixTransform`);e&&(t=V(t,Cr(O(e,`Matrix`))))}}let n=Number(O(e,`Canvas.Left`)??0),r=Number(O(e,`Canvas.Top`)??0);return(n||r)&&(t=V({a:1,b:0,c:0,d:1,e:n,f:r},t)),t}function ni(e){let t=O(e,`Data`);if(t)return Sn(t);for(let t of k(e))if(D(t)===`Path.Data`)for(let e of k(t)){let t=O(e,`Figures`);if(t)return Sn(t)}return[]}function ri(e,t,n){let r=O(e,t);if(r)return H(r,n);let i=ii(e,t,`SolidColorBrush`);if(i)return H(O(i,`Color`),n*ai(O(i,`Opacity`)))}function ii(e,t,n){let r=`${D(e)}.${t}`;for(let t of k(e))if(D(t)===r)return k(t).find(e=>D(e)===n)}function ai(e){if(!e)return 1;let t=Number(e);return Number.isFinite(t)?Math.max(0,Math.min(1,t)):1}function oi(e){let t=O(e,`Data`)??``;return/F0/.test(t)?`nonzero`:`evenodd`}function si(e){let t=(O(e,`StrokeStartLineCap`)??``).toLowerCase(),n=(O(e,`StrokeEndLineCap`)??``).toLowerCase(),r=(O(e,`StrokeDashCap`)??``).toLowerCase(),i=t===`round`||n===`round`||r===`round`?`round`:t===`square`||n===`square`||r===`square`?`square`:`butt`,a=(O(e,`StrokeLineJoin`)??``).toLowerCase(),o=a===`round`?`round`:a===`bevel`?`bevel`:`miter`,s=Number(O(e,`StrokeMiterLimit`)??10);return{cap:i,join:o,miterLimit:Number.isFinite(s)&&s>0?s:10,dash:N(O(e,`StrokeDashArray`)??``).filter(e=>Number.isFinite(e)&&e>0),dashOffset:Number(O(e,`StrokeDashOffset`)??0)||0}}function ci(e){let t=1/0,n=1/0,r=-1/0,i=-1/0,a=(e,a)=>{!Number.isFinite(e)||!Number.isFinite(a)||(t=Math.min(t,e),n=Math.min(n,a),r=Math.max(r,e),i=Math.max(i,a))};for(let t of e)t.type===`M`||t.type===`L`?a(t.x,t.y):t.type===`C`?(a(t.x1,t.y1),a(t.x2,t.y2),a(t.x,t.y)):t.type===`Q`?(a(t.x1,t.y1),a(t.x,t.y)):t.type===`A`&&(a(t.x-t.rx,t.y-t.ry),a(t.x+t.rx,t.y+t.ry));return Number.isFinite(t)?{minX:t,minY:n,maxX:r,maxY:i}:void 0}function li(e){let t=wr(e,4278190080);return{r:t&255,g:t>>>8&255,b:t>>>16&255,a:t>>>24&255}}function ui(e){let t=li(e);return[t.r/255,t.g/255,t.b/255,t.a/255]}function di(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KiB`:`${(e/1024/1024).toFixed(1)} MiB`}function fi(e,t,n){let r=pi(e,e.VERTEX_SHADER,t),i=pi(e,e.FRAGMENT_SHADER,n),a=e.createProgram();if(!a)throw Error(`Failed to create WebGLProgram.`);if(e.attachShader(a,r),e.attachShader(a,i),e.linkProgram(a),e.deleteShader(r),e.deleteShader(i),!e.getProgramParameter(a,e.LINK_STATUS)){let t=e.getProgramInfoLog(a)??`unknown link error`;throw e.deleteProgram(a),Error(`WebGL program link failed: ${t}`)}return a}function pi(e,t,n){let r=e.createShader(t);if(!r)throw Error(`Failed to create WebGLShader.`);if(e.shaderSource(r,n),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS)){let t=e.getShaderInfoLog(r)??`unknown shader compile error`;throw e.deleteShader(r),Error(`WebGL shader compile failed: ${t}`)}return r}var mi=`
attribute vec2 a_pos;
attribute vec4 a_color;
uniform vec4 u_matrix;
uniform vec4 u_viewport;
varying vec4 v_color;
void main() {
float x = u_matrix.x * a_pos.x + u_matrix.z * a_pos.y + u_viewport.x;
float y = u_matrix.y * a_pos.x + u_matrix.w * a_pos.y + u_viewport.y;
vec2 clip = vec2((x / u_viewport.z) * 2.0 - 1.0, 1.0 - (y / u_viewport.w) * 2.0);
gl_Position = vec4(clip, 0.0, 1.0);
v_color = a_color;
}
`,hi=`
precision mediump float;
varying vec4 v_color;
void main() {
gl_FragColor = v_color;
}
`,gi=class{constructor(e){this.document=e,this.fontCache=new Map,this.xmlCache=new Map}async render(e,t,n={}){if(!this.document.opc)throw Error(`XPS page requires an OPC package view.`);let r=v(e.diagnostics),i=(await this.getXmlDocument(e.sourcePath)).documentElement,a=t.getContext(`2d`);if(!a)throw Error(`CanvasRenderingContext2D is not available.`);let o=n.background??`#ffffff`,s={dpr:Mr(t),zoom:n.zoom??1},c=kr({canvasWidth:t.width,canvasHeight:t.height,pageWidth:e.width,pageHeight:e.height,zoom:n.zoom,panX:n.panX,panY:n.panY}),l=0;if(n.preferWebgl??!0)try{let o=this.getWebGlBackend(n.webglCanvas);n.webglCanvas&&(n.webglCanvas.style.visibility=`visible`);let u=o.render(e,i,t,{...n,compositeToTarget:!n.webglCanvas});return a.save(),a.setTransform(1,0,0,1,0,0),a.clearRect(0,0,t.width,t.height),a.restore(),l+=u.commands,l+=await this.renderElementToCanvas(i,a,e.sourcePath,c,1,r,{vectors:!1,overlays:!0},n,s),r.push(...u.warnings),{backend:`webgl-xps`,commands:l,warnings:r}}catch(t){n.webglCanvas&&(n.webglCanvas.style.visibility=`hidden`),r.push(_(`warning`,`WEBGL_XPS_BACKEND_FALLBACK`,`WebGL XPS vector path failed, falling back to ${n.preferWasm?`WASM raster`:`Canvas2D`}: ${String(t)}`,e.sourcePath))}if(n.webglCanvas&&(n.webglCanvas.style.visibility=`hidden`),n.preferWasm)try{return this.wasm??=new Lr({wasmUrl:n.wasmUrl}),await this.wasm.init(),this.wasm.begin(t.width,t.height,o),l+=this.renderElementToWasm(i,c,1,r,n,s),a.setTransform(1,0,0,1,0,0),a.putImageData(this.wasm.toImageData(),0,0),l+=await this.renderElementToCanvas(i,a,e.sourcePath,c,1,r,{vectors:!1,overlays:!0},n,s),{backend:`wasm-raster`,commands:l,warnings:r}}catch(e){r.push(_(`warning`,`WASM_BACKEND_FALLBACK`,`WASM raster path failed, falling back to Canvas2D: ${String(e)}`))}return a.save(),a.setTransform(1,0,0,1,0,0),a.fillStyle=o,a.fillRect(0,0,t.width,t.height),a.restore(),l+=await this.renderElementToCanvas(i,a,e.sourcePath,c,1,r,{vectors:!0,overlays:!0},n,s),{backend:`canvas2d`,commands:l,warnings:r}}getWebGlBackend(e){return(!this.webgl||this.webglCanvas!==e)&&(this.webgl?.dispose(),this.webgl=new Hr(e),this.webglCanvas=e),this.webgl}getXmlDocument(e){let t=this.xmlCache.get(e);return t||(t=this.document.opc.readText(e).then(t=>A(t,e)),this.xmlCache.set(e,t)),t}dispose(){this.webgl?.dispose(),this.webgl=void 0,this.webglCanvas=void 0,this.xmlCache.clear(),this.fontCache.clear()}async renderElementToCanvas(e,t,n,r,i,a,o,s,c){let l=D(e),u=V(r,wi(e)),d=i*ki(O(e,`Opacity`)),f=0;if(l===`Path`&&o.vectors){let n=Ti(e);if(n.length>0){t.save(),t.setTransform(u.a,u.b,u.c,u.d,u.e,u.f),t.globalAlpha=d;let r=O(e,`Clip`);r&&(t.beginPath(),Cn(t,Sn(r)),t.clip()),t.beginPath(),Cn(t,n);let i=Di(e,`Fill`,d),a=Di(e,`Stroke`,d),o=Number(O(e,`StrokeThickness`)??1),l=vi(n);i&&Fr(l,u,s,c)&&(t.fillStyle=i,t.fill(Ai(e))),a&&o>0&&(t.strokeStyle=a,t.lineWidth=Nr(o,u,s,c),_i(t,e,t.lineWidth),t.stroke()),t.restore(),f++}}else if(l===`Glyphs`&&o.overlays)f+=await this.drawGlyphs(t,n,e,u,d,a,s,c);else if(l===`Image`&&o.overlays){let r=O(e,`Source`)??O(e,`ImageSource`);if(r)try{await this.drawImageResource(t,n,r,u,d,e),f++}catch(e){a.push(_(`warning`,`XPS_IMAGE_DRAW_FAILED`,`Failed to draw image ${r}: ${String(e)}`,n))}}else l===`Canvas`||l===`FixedPage`||l.endsWith(`.RenderTransform`)||l.endsWith(`.Resources`);if(l===`Path`&&o.overlays){let r=Oi(e,`Fill`,`ImageBrush`),i=r?O(r,`ImageSource`):void 0;if(r&&i)try{await this.drawImageBrush(t,n,i,u,d,e,r),f++}catch(e){a.push(_(`warning`,`XPS_IMAGEBRUSH_FAILED`,`Failed to draw ImageBrush ${i}: ${String(e)}`,n))}}for(let r of k(e))D(r).includes(`.`)||(f+=await this.renderElementToCanvas(r,t,n,u,d,a,o,s,c));return f}renderElementToWasm(e,t,n,r,i,a){if(!this.wasm)return 0;let o=D(e),s=V(t,wi(e)),c=n*ki(O(e,`Opacity`)),l=0;if(o===`Path`){let t=Ti(e);if(t.length>0){let n=Di(e,`Fill`,c),r=Di(e,`Stroke`,c),o=Number(O(e,`StrokeThickness`)??1),u=Nr(o,s,i,a)*Math.max(1e-12,Math.hypot(s.a,s.b)),d=wn(t,.5);if(n)for(let e of d)(e.closed||e.points.length>=6)&&this.wasm.drawPolygon(e.points,s,n);if(r&&o>0)for(let e of d)this.wasm.drawPolyline(e.points,s,r,u);l++}}for(let t of k(e))D(t).includes(`.`)||(l+=this.renderElementToWasm(t,s,c,r,i,a));return l}async drawGlyphs(e,t,n,r,i,a,o,s){let c=O(n,`UnicodeString`)??``;if(!c)return 0;let l=Number(O(n,`OriginX`)??0),u=Number(O(n,`OriginY`)??0),d=Number(O(n,`FontRenderingEmSize`)??12);if(!Pr(d,r,o,s))return 0;let f=Di(n,`Fill`,i)??`#000000`,p=await this.fontFamilyForGlyphs(t,n,a)??`sans-serif`;e.save(),e.setTransform(r.a,r.b,r.c,r.d,r.e,r.f),e.globalAlpha=i,e.fillStyle=f,e.font=`${d}px "${p}"`,e.textBaseline=`alphabetic`;let m=O(n,`Indices`);return m?yi(e,c,m,l,u,d):e.fillText(c,l,u),e.restore(),1}async fontFamilyForGlyphs(e,t,n){let r=O(t,`FontUri`);if(!r)return;let i=E(e,r.replace(/^\//,``)),a=this.fontCache.get(i);return a||(a=this.loadFontFace(i).catch(t=>{n.push(_(`warning`,`XPS_FONT_LOAD_FAILED`,`Failed to load embedded XPS font ${i}: ${String(t)}`,e))}),this.fontCache.set(i,a)),a}async loadFontFace(e){let t=globalThis.FontFace,n=document.fonts;if(!t||!n)return;let r=await this.document.opc.readBytes(e),i=le(e)??`font/ttf`;/\.odttf$/i.test(e)&&(r=bi(e,r),i=`font/ttf`);let a=`dwfv_xps_${Ci(e)}`,o=new Blob([r],{type:i}),s=URL.createObjectURL(o),c=new t(a,`url("${s}")`);try{return await c.load(),n.add(c),URL.revokeObjectURL(s),a}catch(e){throw URL.revokeObjectURL(s),e}}async drawImageResource(e,t,n,r,i,a){let o=this.document.opc,s=E(t,n.replace(/^\//,``)),c=await ue(await o.readBytes(s),o.getContentType(s)??le(s)??`image/png`),l=Number(O(a,`Width`)??(`width`in c?c.width:0)),u=Number(O(a,`Height`)??(`height`in c?c.height:0)),d=Number(O(a,`Canvas.Left`)??O(a,`X`)??0),f=Number(O(a,`Canvas.Top`)??O(a,`Y`)??0);e.save(),e.setTransform(r.a,r.b,r.c,r.d,r.e,r.f),e.globalAlpha=i,e.drawImage(c,d,f,l||c.width,u||c.height),e.restore()}async drawImageBrush(e,t,n,r,i,a,o){let s=this.document.opc,c=E(t,n.replace(/^\//,``)),l=await ue(await s.readBytes(c),s.getContentType(c)??le(c)??`image/png`),u=ji(O(o,`Viewport`))??ji(O(o,`Viewbox`))??[0,0,Number(l.width??1),Number(l.height??1)],d=Ti(a);e.save(),e.setTransform(r.a,r.b,r.c,r.d,r.e,r.f),e.globalAlpha=i,d.length>0&&(e.beginPath(),Cn(e,d),e.clip()),e.drawImage(l,u[0],u[1],u[2],u[3]),e.restore()}};function _i(e,t,n){let r=(O(t,`StrokeStartLineCap`)??``).toLowerCase(),i=(O(t,`StrokeEndLineCap`)??``).toLowerCase(),a=(O(t,`StrokeDashCap`)??``).toLowerCase();r===`round`||i===`round`||a===`round`?e.lineCap=`round`:r===`square`||i===`square`||a===`square`?e.lineCap=`square`:e.lineCap=`butt`;let o=(O(t,`StrokeLineJoin`)??``).toLowerCase();e.lineJoin=o===`round`?`round`:o===`bevel`?`bevel`:`miter`;let s=Number(O(t,`StrokeMiterLimit`)??10);Number.isFinite(s)&&s>0&&(e.miterLimit=s);let c=N(O(t,`StrokeDashArray`)??``);if(c.length>0){let r=Number(O(t,`StrokeDashOffset`)??0);e.setLineDash(c.map(e=>Math.max(0,e*n))),e.lineDashOffset=Number.isFinite(r)?r*n:0}else e.setLineDash([]),e.lineDashOffset=0}function vi(e){let t=1/0,n=1/0,r=-1/0,i=-1/0,a=(e,a)=>{!Number.isFinite(e)||!Number.isFinite(a)||(t=Math.min(t,e),n=Math.min(n,a),r=Math.max(r,e),i=Math.max(i,a))};for(let t of e)t.type===`M`||t.type===`L`?a(t.x,t.y):t.type===`C`?(a(t.x1,t.y1),a(t.x2,t.y2),a(t.x,t.y)):t.type===`Q`?(a(t.x1,t.y1),a(t.x,t.y)):t.type===`A`&&(a(t.x-t.rx,t.y-t.ry),a(t.x+t.rx,t.y+t.ry));return Number.isFinite(t)?{minX:t,minY:n,maxX:r,maxY:i}:void 0}function yi(e,t,n,r,i,a){let o=n.split(`;`),s=r,c=0;for(let n of o){let r=n.trim();if(!r)continue;let o=r.split(`,`),l=Number(o[1]??``),u=Number(o[3]??0),d=Number(o[4]??0),f=t[c++]??``;f&&e.fillText(f,s+(Number.isFinite(u)?u:0),i+(Number.isFinite(d)?d:0)),Number.isFinite(l)&&l>0?s+=l*a/100:s+=e.measureText(f||` `).width}c<t.length&&e.fillText(t.slice(c),s,i)}function bi(e,t){let n=(e.split(`/`).pop()??``).replace(/\.odttf$/i,``).replace(/[^0-9a-fA-F]/g,``);if(n.length!==32||t.length<32)return t;let r=new Uint8Array(16);for(let e=0;e<16;e++)r[e]=parseInt(n.slice(e*2,e*2+2),16);let i=new Uint8Array(t);for(let e=0;e<Math.min(32,i.length);e++)i[e]=(i[e]??0)^r[15-e%16];if(!Si(i)){let e=xi(n),r=new Uint8Array(t);for(let t=0;t<Math.min(32,r.length);t++)r[t]=(r[t]??0)^e[15-t%16];if(Si(r))return r}return i}function xi(e){let t=new Uint8Array(16),n=new Uint8Array(16);for(let t=0;t<16;t++)n[t]=parseInt(e.slice(t*2,t*2+2),16);t[0]=n[3],t[1]=n[2],t[2]=n[1],t[3]=n[0],t[4]=n[5],t[5]=n[4],t[6]=n[7],t[7]=n[6];for(let e=8;e<16;e++)t[e]=n[e];return t}function Si(e){if(e.length<4)return!1;let t=String.fromCharCode(e[0],e[1],e[2],e[3]);return t===`OTTO`||t===`true`||t===`typ1`||t===`ttcf`||e[0]===0&&e[1]===1&&e[2]===0&&e[3]===0}function Ci(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return(t>>>0).toString(36)}function wi(e){let t=Cr(O(e,`RenderTransform`)??O(e,`Transform`));for(let n of k(e)){let e=D(n);if(e.endsWith(`.RenderTransform`)||e.endsWith(`.Transform`)){let e=k(n).find(e=>D(e)===`MatrixTransform`);e&&(t=V(t,Cr(O(e,`Matrix`))))}}let n=Number(O(e,`Canvas.Left`)??0),r=Number(O(e,`Canvas.Top`)??0);return(n||r)&&(t=V({a:1,b:0,c:0,d:1,e:n,f:r},t)),t}function Ti(e){let t=O(e,`Data`);if(t)return Sn(t);for(let t of k(e))if(D(t)===`Path.Data`)for(let e of k(t)){let t=O(e,`Figures`);if(t)return Sn(t);if(D(e)===`PathGeometry`){let t=Ei(e);if(t)return Sn(t)}}return[]}function Ei(e){let t=[];for(let n of k(e).filter(e=>D(e)===`PathFigure`)){let e=N(O(n,`StartPoint`)??``);e.length>=2&&t.push(`M ${e[0]} ${e[1]}`);for(let e of k(n)){let n=D(e);if(n===`LineSegment`){let n=N(O(e,`Point`)??``);n.length>=2&&t.push(`L ${n[0]} ${n[1]}`)}else if(n===`PolyLineSegment`){let n=N(O(e,`Points`)??``);for(let e=0;e+1<n.length;e+=2)t.push(`L ${n[e]} ${n[e+1]}`)}else if(n===`BezierSegment`){let n=N(O(e,`Point1`)+` `+O(e,`Point2`)+` `+O(e,`Point3`));n.length>=6&&t.push(`C ${n.slice(0,6).join(` `)}`)}else if(n===`PolyBezierSegment`){let n=N(O(e,`Points`)??``);for(let e=0;e+5<n.length;e+=6)t.push(`C ${n.slice(e,e+6).join(` `)}`)}}O(n,`IsClosed`)===`true`&&t.push(`Z`)}return t.length?t.join(` `):void 0}function Di(e,t,n){let r=O(e,t);if(r)return H(r,n);let i=Oi(e,t,`SolidColorBrush`);if(i)return H(O(i,`Color`),n*ki(O(i,`Opacity`)))}function Oi(e,t,n){let r=`${D(e)}.${t}`;for(let t of k(e))if(D(t)===r)return k(t).find(e=>D(e)===n)}function ki(e){if(!e)return 1;let t=Number(e);return Number.isFinite(t)?Math.max(0,Math.min(1,t)):1}function Ai(e){let t=O(e,`Data`)??``;return/F0/.test(t)?`nonzero`:`evenodd`}function ji(e){if(!e)return;let t=N(e);if(t.length>=4)return[t[0],t[1],t[2],t[3]]}var Mi=12,Ni=96*1024*1024,Pi=3,Fi=class{constructor(e){this.scenes=new Map,this.gpuBytes=0,this.tick=0,this.canvas=e??document.createElement(`canvas`);let t=this.canvas.getContext(`webgl`,{alpha:!1,antialias:!0,depth:!1,stencil:!1,preserveDrawingBuffer:!0,powerPreference:`high-performance`});if(!t)throw Error(`WebGLRenderingContext is not available.`);this.gl=t,this.program=Xi(t,Qi,$i),this.aPos=t.getAttribLocation(this.program,`a_pos`),this.aColor=t.getAttribLocation(this.program,`a_color`);let n=t.getUniformLocation(this.program,`u_matrix`),r=t.getUniformLocation(this.program,`u_viewport`);if(this.aPos<0||this.aColor<0||!n||!r)throw Error(`Failed to resolve WebGL shader locations.`);this.uMatrix=n,this.uViewport=r}render(e,t,n={}){let r=[];if(t.width<=0||t.height<=0)return{commands:0,warnings:r,gpuBytes:this.gpuBytes,vertexCount:0,textCount:0,cacheHit:!0};this.resize(t.width,t.height);let i=Ar(e,this.canvas.width,this.canvas.height,n.zoom,n.panX,n.panY),a={dpr:Mr(t),zoom:n.zoom??1},o=Li(e,i,n),s=this.scenes.get(o),c=!!s;s||=(s=this.compileScene(e,o,n,i,a),this.scenes.set(o,s),this.gpuBytes+=s.gpuBytes,this.evictIfNeeded(n),this.scenes.get(o)??s),s.lastUsed=++this.tick;let l=this.gl,u=Ji(n.background??`#ffffff`);l.viewport(0,0,this.canvas.width,this.canvas.height),l.disable(l.DEPTH_TEST),l.disable(l.CULL_FACE),l.enable(l.BLEND),l.blendFunc(l.SRC_ALPHA,l.ONE_MINUS_SRC_ALPHA),l.clearColor(u[0],u[1],u[2],u[3]),l.clear(l.COLOR_BUFFER_BIT),l.useProgram(this.program),l.bindBuffer(l.ARRAY_BUFFER,s.buffer),l.enableVertexAttribArray(this.aPos),l.vertexAttribPointer(this.aPos,2,l.FLOAT,!1,Mi,0),l.enableVertexAttribArray(this.aColor),l.vertexAttribPointer(this.aColor,4,l.UNSIGNED_BYTE,!0,Mi,8),l.uniform4f(this.uMatrix,i.a,i.b,i.c,i.d),l.uniform4f(this.uViewport,i.e,i.f,this.canvas.width,this.canvas.height),l.drawArrays(l.TRIANGLES,0,s.vertexCount);let d=t.getContext(`2d`);if(!d)throw Error(`CanvasRenderingContext2D is not available for WebGL text overlay.`);return d.save(),d.setTransform(1,0,0,1,0,0),d.clearRect(0,0,t.width,t.height),(n.compositeToTarget??!0)&&d.drawImage(this.canvas,0,0),this.drawTextOverlay(d,e,i),d.restore(),s.vertexCount===0&&e.primitives.some(e=>e.type!==`text`)&&r.push(_(`warning`,`WEBGL_EMPTY_SCENE`,`WebGL scene contained no drawable geometry; Canvas/WASM fallback may be required.`,e.sourcePath)),{commands:s.primitiveCount,warnings:r,gpuBytes:this.gpuBytes,vertexCount:s.vertexCount,textCount:s.textCount,cacheHit:c}}dispose(){for(let e of this.scenes.values())this.gl.deleteBuffer(e.buffer);this.scenes.clear(),this.gpuBytes=0}resize(e,t){(this.canvas.width!==e||this.canvas.height!==t)&&(this.canvas.width=e,this.canvas.height=t)}compileScene(e,t,n,r,i){let a=new Ri,o=0,s=0;for(let t of e.primitives){if(t.type===`text`){s++;continue}o++,zi(a,t,r,n,i)}let c=a.byteLength,l=n.maxGpuCacheBytes??Ni;if(c>l)throw Error(`WebGL scene buffer would require ${Yi(c)}, exceeding maxGpuCacheBytes=${Yi(l)}.`);let u=this.gl,d=u.createBuffer();if(!d)throw Error(`Failed to allocate WebGLBuffer.`);u.bindBuffer(u.ARRAY_BUFFER,d),u.bufferData(u.ARRAY_BUFFER,a.toArrayBuffer(),u.STATIC_DRAW);let f=u.getError();if(f!==u.NO_ERROR)throw u.deleteBuffer(d),Error(`WebGL buffer upload failed: 0x${f.toString(16)}.`);return{key:t,buffer:d,vertexCount:a.vertexCount,gpuBytes:c,primitiveCount:o,textCount:s,lastUsed:++this.tick}}evictIfNeeded(e){let t=e.maxGpuCacheBytes??Ni,n=e.maxCachedScenes??Pi;for(;this.scenes.size>Math.max(1,n)||this.gpuBytes>t;){let e;for(let t of this.scenes.values())(!e||t.lastUsed<e.lastUsed)&&(e=t);if(!e)break;this.scenes.delete(e.key),this.gl.deleteBuffer(e.buffer),this.gpuBytes-=e.gpuBytes}}drawTextOverlay(e,t,n){let r=this.canvas.width,i=this.canvas.height;for(let a of t.primitives){if(a.type!==`text`)continue;let t=V(n,a.matrix??Ii),[o,s]=Sr(t,a.x,a.y),c=Ki(t),l=Math.max(2,Math.min(768,Math.abs((a.size??12)*c)));if(l<2.5)continue;let u=a.text.split(/\n/),d=u.reduce((e,t)=>Math.max(e,t.length),0),f=Math.max(24,d*l*.65),p=Math.max(l,u.length*l*1.15);if(!(o+f<-64||o>r+64||s+p<-64||s-p>i+64)){e.save(),e.setTransform(1,0,0,1,0,0),e.fillStyle=a.fill??a.stroke??`#000000`,e.font=`${l}px sans-serif`,e.textBaseline=`alphabetic`;for(let t=0;t<u.length;t++)e.fillText(u[t]??``,o,s+t*l*1.15);e.restore()}}}},Ii={a:1,b:0,c:0,d:1,e:0,f:0};function Li(e,t,n){let r=n.lineWeightMode??`adaptive`,i=r===`physical`?`physical`:String(Math.round(Math.log2(Math.max(1e-12,jr(t)))*8));return`${e.id}|${e.sourcePath}|${e.primitives.length}|lw:${r}:${i}`}var Ri=class{constructor(){this.buffer=new ArrayBuffer(64*1024),this.view=new DataView(this.buffer),this.vertexCount=0}get byteLength(){return this.vertexCount*Mi}push(e,t,n){if(!Number.isFinite(e)||!Number.isFinite(t))return;let r=this.byteLength;this.ensure(Mi),this.view.setFloat32(r,e,!0),this.view.setFloat32(r+4,t,!0),this.view.setUint8(r+8,n.r),this.view.setUint8(r+9,n.g),this.view.setUint8(r+10,n.b),this.view.setUint8(r+11,n.a),this.vertexCount++}toArrayBuffer(){return this.buffer.slice(0,this.byteLength)}ensure(e){let t=this.byteLength+e;if(t<=this.buffer.byteLength)return;let n=this.buffer.byteLength;for(;n<t;)n*=2;let r=new ArrayBuffer(n);new Uint8Array(r).set(new Uint8Array(this.buffer,0,this.byteLength)),this.buffer=r,this.view=new DataView(this.buffer)}};function zi(e,t,n,r,i){let a=t.matrix??Ii,o=Ki(a),s=V(n,a),c=Math.max(.01,Nr(t.lineWidth??1,s,r,i)*o);if(t.type===`polyline`){let n=qi(t.stroke??`#000000`);Hi(e,Bi(t.points,a),c,n)}else if(t.type===`polygon`){let n=Bi(t.points,a);t.fill&&Vi(e,n,qi(t.fill)),t.stroke&&Hi(e,Wi(n),c,qi(t.stroke))}else if(t.type===`rect`){let n=Bi([t.x,t.y,t.x+t.width,t.y,t.x+t.width,t.y+t.height,t.x,t.y+t.height],a);t.fill&&Vi(e,n,qi(t.fill)),t.stroke&&Hi(e,Wi(n),c,qi(t.stroke))}else if(t.type===`path`){let n=wn(t.commands,.5),r=t.fill?qi(t.fill):void 0,i=t.stroke?qi(t.stroke):void 0;for(let t of n){let n=Bi(t.points,a);r&&(t.closed||n.length>=6)&&Vi(e,n,r),i&&Hi(e,n,c,i)}}}function Bi(e,t){let n=[];for(let r=0;r+1<e.length;r+=2){let[i,a]=Sr(t,e[r]??0,e[r+1]??0);n.push({x:i,y:a})}return n}function Vi(e,t,n){if(t.length<3)return;let r=t[0];for(let i=1;i+1<t.length;i++){let a=t[i],o=t[i+1];Gi(r,a,o)<1e-6||(e.push(r.x,r.y,n),e.push(a.x,a.y,n),e.push(o.x,o.y,n))}}function Hi(e,t,n,r){if(t.length<2)return;let i=Math.max(.05,n*.5);for(let n=0;n+1<t.length;n++)Ui(e,t[n],t[n+1],i,r)}function Ui(e,t,n,r,i){let a=n.x-t.x,o=n.y-t.y,s=Math.hypot(a,o);if(s<=1e-9)return;let c=-o/s*r,l=a/s*r,u=t.x+c,d=t.y+l,f=t.x-c,p=t.y-l,m=n.x-c,h=n.y-l,g=n.x+c,_=n.y+l;e.push(u,d,i),e.push(f,p,i),e.push(m,h,i),e.push(u,d,i),e.push(m,h,i),e.push(g,_,i)}function Wi(e){if(e.length<2)return e;let t=e[0],n=e[e.length-1];return t.x===n.x&&t.y===n.y?e:[...e,{x:t.x,y:t.y}]}function Gi(e,t,n){return Math.abs((t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x))}function Ki(e){let t=Math.hypot(e.a,e.b),n=Math.hypot(e.c,e.d);return Math.max(1e-9,(t+n)*.5)}function qi(e){let t=wr(e,4278190080);return{r:t&255,g:t>>>8&255,b:t>>>16&255,a:t>>>24&255}}function Ji(e){let t=qi(e);return[t.r/255,t.g/255,t.b/255,t.a/255]}function Yi(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KiB`:`${(e/1024/1024).toFixed(1)} MiB`}function Xi(e,t,n){let r=Zi(e,e.VERTEX_SHADER,t),i=Zi(e,e.FRAGMENT_SHADER,n),a=e.createProgram();if(!a)throw Error(`Failed to create WebGLProgram.`);if(e.attachShader(a,r),e.attachShader(a,i),e.linkProgram(a),e.deleteShader(r),e.deleteShader(i),!e.getProgramParameter(a,e.LINK_STATUS)){let t=e.getProgramInfoLog(a)??`unknown link error`;throw e.deleteProgram(a),Error(`WebGL program link failed: ${t}`)}return a}function Zi(e,t,n){let r=e.createShader(t);if(!r)throw Error(`Failed to create WebGLShader.`);if(e.shaderSource(r,n),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS)){let t=e.getShaderInfoLog(r)??`unknown shader compile error`;throw e.deleteShader(r),Error(`WebGL shader compile failed: ${t}`)}return r}var Qi=`
attribute vec2 a_pos;
attribute vec4 a_color;
uniform vec4 u_matrix;
uniform vec4 u_viewport;
varying vec4 v_color;
void main() {
float x = u_matrix.x * a_pos.x + u_matrix.z * a_pos.y + u_viewport.x;
float y = u_matrix.y * a_pos.x + u_matrix.w * a_pos.y + u_viewport.y;
vec2 clip = vec2((x / u_viewport.z) * 2.0 - 1.0, 1.0 - (y / u_viewport.w) * 2.0);
gl_Position = vec4(clip, 0.0, 1.0);
v_color = a_color;
}
`,$i=`
precision mediump float;
varying vec4 v_color;
void main() {
gl_FragColor = v_color;
}
`,ea=class{async render(e,t,n={}){let r=v(e.diagnostics),i=n.background??`#ffffff`;if(n.preferWebgl??!0)try{let i=this.getWebGlBackend(n.webglCanvas);n.webglCanvas&&(n.webglCanvas.style.visibility=`visible`);let a=i.render(e,t,{...n,compositeToTarget:!n.webglCanvas}),o=ra(a.gpuBytes),s=a.cacheHit?`cache hit`:`cache upload`;return r.push(_(`info`,`WEBGL_W2D_RENDERED`,`WebGL rendered ${a.vertexCount} vertices, ${a.textCount} text item(s), GPU cache ${o}, ${s}.`,e.sourcePath)),r.push(...a.warnings),{backend:`webgl`,commands:a.commands,warnings:r}}catch(t){r.push(_(`warning`,`WEBGL_BACKEND_FALLBACK`,`WebGL vector path failed, falling back to ${n.preferWasm?`WASM raster`:`Canvas2D`}: ${String(t)}`,e.sourcePath))}n.webglCanvas&&(n.webglCanvas.style.visibility=`hidden`);let a=t.getContext(`2d`);if(!a)throw Error(`CanvasRenderingContext2D is not available.`);let o=Ar(e,t.width,t.height,n.zoom,n.panX,n.panY),s={dpr:Mr(t),zoom:n.zoom??1},c=0;if(n.preferWasm)try{this.wasm??=new Lr({wasmUrl:n.wasmUrl}),await this.wasm.init(),this.wasm.begin(t.width,t.height,i);for(let t of e.primitives)c+=this.drawPrimitiveWasm(t,o,n,s);a.setTransform(1,0,0,1,0,0),a.putImageData(this.wasm.toImageData(),0,0);for(let t of e.primitives.filter(e=>e.type===`text`))c+=this.drawPrimitiveCanvas(a,t,o,n,s);return{backend:`wasm-raster`,commands:c,warnings:r}}catch(t){r.push(_(`warning`,`WASM_BACKEND_FALLBACK`,`WASM raster path failed, falling back to Canvas2D: ${String(t)}`,e.sourcePath))}a.save(),a.setTransform(1,0,0,1,0,0),a.fillStyle=i,a.fillRect(0,0,t.width,t.height),a.restore();for(let t of e.primitives)c+=this.drawPrimitiveCanvas(a,t,o,n,s);return{backend:`canvas2d`,commands:c,warnings:r}}dispose(){this.webgl?.dispose(),this.webgl=void 0,this.webglCanvas=void 0}getWebGlBackend(e){return(!this.webgl||this.webglCanvas!==e)&&(this.webgl?.dispose(),this.webgl=new Fi(e),this.webglCanvas=e),this.webgl}drawPrimitiveCanvas(e,t,n,r,i){let a=V(n,t.matrix??{a:1,b:0,c:0,d:1,e:0,f:0}),o=H(t.stroke??`#000000`)??`#000000`,s=H(t.fill);if(t.type===`text`){let[n,c]=Sr(a,t.x,t.y),l=Math.max(1,Math.abs((t.size??12)*na(a)));if(!Pr(t.size??12,a,r,i)||n>e.canvas.width+64||c>e.canvas.height+64||n<-e.canvas.width||c<-e.canvas.height)return 0;e.save(),e.setTransform(1,0,0,1,0,0),e.fillStyle=s??o,e.font=`${Math.min(768,l)}px sans-serif`,e.textBaseline=`alphabetic`;for(let[r,i]of t.text.split(/\n/).entries())e.fillText(i,n,c+r*l*1.15);return e.restore(),1}if(e.save(),e.setTransform(a.a,a.b,a.c,a.d,a.e,a.f),e.lineWidth=Nr(t.lineWidth??1,a,r,i),t.type===`polyline`){if(t.points.length>=4){e.beginPath(),e.moveTo(t.points[0],t.points[1]);for(let n=2;n+1<t.points.length;n+=2)e.lineTo(t.points[n],t.points[n+1]);e.strokeStyle=o,e.stroke()}}else if(t.type===`polygon`){if(t.points.length>=6){e.beginPath(),e.moveTo(t.points[0],t.points[1]);for(let n=2;n+1<t.points.length;n+=2)e.lineTo(t.points[n],t.points[n+1]);e.closePath(),s&&(e.fillStyle=s,e.fill()),t.stroke&&(e.strokeStyle=o,e.stroke())}}else t.type===`rect`?(s&&(e.fillStyle=s,e.fillRect(t.x,t.y,t.width,t.height)),t.stroke&&(e.strokeStyle=o,e.strokeRect(t.x,t.y,t.width,t.height))):t.type===`path`&&(e.beginPath(),Cn(e,t.commands),s&&(e.fillStyle=s,e.fill()),t.stroke&&(e.strokeStyle=o,e.stroke()));return e.restore(),1}drawPrimitiveWasm(e,t,n,r){if(!this.wasm||e.type===`text`)return 0;let i=V(t,e.matrix??{a:1,b:0,c:0,d:1,e:0,f:0}),a=jr(i),o=e=>Nr(e??1,i,n,r)*a;if(e.type===`polyline`)this.wasm.drawPolyline(e.points,i,H(e.stroke??`#000000`),o(e.lineWidth));else if(e.type===`polygon`)this.wasm.drawPolygon(e.points,i,H(e.fill)),e.stroke&&this.wasm.drawPolyline(ta(e.points),i,H(e.stroke),o(e.lineWidth));else if(e.type===`rect`){let t=[e.x,e.y,e.x+e.width,e.y,e.x+e.width,e.y+e.height,e.x,e.y+e.height,e.x,e.y];e.fill&&this.wasm.drawPolygon(t,i,H(e.fill)),e.stroke&&this.wasm.drawPolyline(t,i,H(e.stroke),o(e.lineWidth))}else if(e.type===`path`){let t=wn(e.commands,.5),n=H(e.fill),r=H(e.stroke);if(n)for(let e of t)(e.closed||e.points.length>=6)&&this.wasm.drawPolygon(e.points,i,n);if(r)for(let n of t)this.wasm.drawPolyline(n.points,i,r,o(e.lineWidth))}return 1}};function ta(e){if(e.length<4)return e;let t=e[0],n=e[1],r=e[e.length-2],i=e[e.length-1];return t===r&&n===i?e:[...e,t,n]}function na(e){return Math.max(1e-9,(Math.hypot(e.a,e.b)+Math.hypot(e.c,e.d))*.5)}function ra(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KiB`:`${(e/1024/1024).toFixed(1)} MiB`}var ia=class{constructor(){this.cache=new Map}async render(e,t,n={}){let r=n.webglCanvas??t;n.webglCanvas&&(n.webglCanvas.style.visibility=`visible`),ca(t);let i=this.ensureContext(r),a=this.ensureProgram(i),o=this.ensureEdgeProgram(i),s=this.ensureScene(i,e);this.evictScenes(i,n.maxCachedScenes??2,n.maxGpuCacheBytes??160*1024*1024),i.viewport(0,0,r.width,r.height),i.enable(i.DEPTH_TEST),i.disable(i.CULL_FACE),i.clearColor(.97,.98,1,1),i.clear(i.COLOR_BUFFER_BIT|i.DEPTH_BUFFER_BIT),i.useProgram(a.program);let c=fa(e,r,n);i.uniformMatrix4fv(a.uMvp,!1,c.mvp),i.uniformMatrix4fv(a.uModel,!1,pa()),i.uniform3f(a.uLight0,.35,.65,.68),i.uniform3f(a.uLight1,-.75,.4,-.5),i.uniform1f(a.uAmbient,.28);let l=0;i.enable(i.POLYGON_OFFSET_FILL),i.polygonOffset(1,1);for(let e of s.meshes){let t=e.mesh.color??[.72,.74,.78];i.uniform3f(a.uColor,t[0],t[1],t[2]),e.vao&&`bindVertexArray`in i?i.bindVertexArray(e.vao):sa(i,a,e),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.index),i.drawElements(i.TRIANGLES,e.indexCount,e.indexType,0),l++}i.disable(i.POLYGON_OFFSET_FILL),va(i)&&i.bindVertexArray(null),i.useProgram(o.program),i.uniformMatrix4fv(o.uMvp,!1,c.mvp),i.uniform3f(o.uColor,.035,.04,.045),i.enable(i.DEPTH_TEST);for(let e of s.meshes)!e.edgeIndex||!e.edgeIndexCount||(i.bindBuffer(i.ARRAY_BUFFER,e.pos),i.enableVertexAttribArray(o.aPosition),i.vertexAttribPointer(o.aPosition,3,i.FLOAT,!1,0,0),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.edgeIndex),i.drawElements(i.LINES,e.edgeIndexCount,e.edgeIndexType??e.indexType,0),l++);return{backend:`threejs-webgl`,commands:l,warnings:v(e.diagnostics)}}dispose(){if(this.gl)for(let e of this.cache.values())aa(this.gl,e);this.cache.clear(),this.program=void 0,this.edgeProgram=void 0}ensureContext(e){if(this.gl&&this.currentCanvas===e)return this.gl;let t=e.getContext(`webgl2`,{antialias:!0,alpha:!1})??e.getContext(`webgl`,{antialias:!0,alpha:!1});if(!t)throw Error(`WebGL is not available for 3D W3D rendering.`);if(this.gl&&this.currentCanvas!==e){for(let e of this.cache.values())aa(this.gl,e);this.cache.clear()}return this.gl=t,this.currentCanvas=e,this.program=void 0,this.edgeProgram=void 0,t}ensureProgram(e){if(this.program)return this.program;let t=ua(e,la(e,e.VERTEX_SHADER,`
attribute vec3 a_position;
attribute vec3 a_normal;
uniform mat4 u_mvp;
uniform mat4 u_model;
varying vec3 v_normal;
void main() {
v_normal = normalize((u_model * vec4(a_normal, 0.0)).xyz);
gl_Position = u_mvp * vec4(a_position, 1.0);
}
`),la(e,e.FRAGMENT_SHADER,`
precision mediump float;
varying vec3 v_normal;
uniform vec3 u_color;
uniform vec3 u_light0;
uniform vec3 u_light1;
uniform float u_ambient;
void main() {
vec3 n = normalize(v_normal);
float d0 = max(dot(n, normalize(u_light0)), 0.0);
float d1 = max(dot(n, normalize(u_light1)), 0.0) * 0.45;
vec3 color = u_color * (u_ambient + d0 * 0.78 + d1);
gl_FragColor = vec4(color, 1.0);
}
`)),n={program:t,aPosition:e.getAttribLocation(t,`a_position`),aNormal:e.getAttribLocation(t,`a_normal`),uMvp:da(e,t,`u_mvp`),uModel:da(e,t,`u_model`),uColor:da(e,t,`u_color`),uLight0:da(e,t,`u_light0`),uLight1:da(e,t,`u_light1`),uAmbient:da(e,t,`u_ambient`)};return this.program=n,n}ensureEdgeProgram(e){if(this.edgeProgram)return this.edgeProgram;let t=ua(e,la(e,e.VERTEX_SHADER,`
attribute vec3 a_position;
uniform mat4 u_mvp;
void main() {
gl_Position = u_mvp * vec4(a_position, 1.0);
}
`),la(e,e.FRAGMENT_SHADER,`
precision mediump float;
uniform vec3 u_color;
void main() {
gl_FragColor = vec4(u_color, 0.9);
}
`));return this.edgeProgram={program:t,aPosition:e.getAttribLocation(t,`a_position`),uMvp:da(e,t,`u_mvp`),uColor:da(e,t,`u_color`)},this.edgeProgram}evictScenes(e,t,n){let r=Array.from(this.cache.values()).reduce((e,t)=>e+t.bytes,0);for(;this.cache.size>Math.max(1,t)||r>n;){let t=this.cache.entries().next().value;if(!t)break;this.cache.delete(t[0]),aa(e,t[1]),r-=t[1].bytes}}ensureScene(e,t){let n=this.cache.get(t);if(n)return n;let r=[],i=0,a=this.ensureProgram(e),o=typeof e.createVertexArray==`function`;for(let n of t.model.meshes){let t=oa(e,e.ARRAY_BUFFER,n.positions),s=n.normals??new Float32Array(n.positions.length),c={mesh:n,pos:t,normal:oa(e,e.ARRAY_BUFFER,s),index:oa(e,e.ELEMENT_ARRAY_BUFFER,n.indices),edgeIndex:n.edgeIndices?oa(e,e.ELEMENT_ARRAY_BUFFER,n.edgeIndices):void 0,indexType:n.indices instanceof Uint32Array?e.UNSIGNED_INT:e.UNSIGNED_SHORT,edgeIndexType:n.edgeIndices instanceof Uint32Array?e.UNSIGNED_INT:e.UNSIGNED_SHORT,indexCount:n.indices.length,edgeIndexCount:n.edgeIndices?.length,bytes:n.positions.byteLength+s.byteLength+n.indices.byteLength+(n.edgeIndices?.byteLength??0)};if((n.indices instanceof Uint32Array||n.edgeIndices instanceof Uint32Array)&&!va(e)&&!e.getExtension(`OES_element_index_uint`))throw Error(`This WebGL implementation does not support 32-bit element indices.`);if(o){let t=e,n=t.createVertexArray();t.bindVertexArray(n),sa(e,a,c),t.bindVertexArray(null),c.vao=n}r.push(c),i+=c.bytes}let s={page:t,meshes:r,bytes:i};return this.cache.set(t,s),s}};function aa(e,t){for(let n of t.meshes)e.deleteBuffer(n.pos),e.deleteBuffer(n.normal),e.deleteBuffer(n.index),n.edgeIndex&&e.deleteBuffer(n.edgeIndex),n.vao&&va(e)&&e.deleteVertexArray(n.vao)}function oa(e,t,n){let r=e.createBuffer();if(!r)throw Error(`Failed to create WebGL buffer.`);return e.bindBuffer(t,r),e.bufferData(t,n,e.STATIC_DRAW),r}function sa(e,t,n){e.bindBuffer(e.ARRAY_BUFFER,n.pos),e.enableVertexAttribArray(t.aPosition),e.vertexAttribPointer(t.aPosition,3,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,n.normal),e.enableVertexAttribArray(t.aNormal),e.vertexAttribPointer(t.aNormal,3,e.FLOAT,!1,0,0)}function ca(e){let t=e.getContext(`2d`);t&&(t.setTransform(1,0,0,1,0,0),t.clearRect(0,0,e.width,e.height))}function la(e,t,n){let r=e.createShader(t);if(!r)throw Error(`Failed to create WebGL shader.`);if(e.shaderSource(r,n),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS)){let t=e.getShaderInfoLog(r)??`unknown shader error`;throw e.deleteShader(r),Error(t)}return r}function ua(e,t,n){let r=e.createProgram();if(!r)throw Error(`Failed to create WebGL program.`);if(e.attachShader(r,t),e.attachShader(r,n),e.linkProgram(r),!e.getProgramParameter(r,e.LINK_STATUS)){let t=e.getProgramInfoLog(r)??`unknown program link error`;throw e.deleteProgram(r),Error(t)}return r}function da(e,t,n){let r=e.getUniformLocation(t,n);if(!r)throw Error(`Missing shader uniform ${n}.`);return r}function fa(e,t,n){let r=e.model.bounds,i=Math.max(1e-6,t.width/Math.max(1,t.height)),a=n.yaw??-.78,o=_a(n.pitch??.55,-1.45,1.45),s=Math.max(.05,Math.min(100,n.zoom??1)),c=Math.max(1e-4,r.radius),l=c*2.55/s,u=Math.cos(o),d=[Math.sin(a)*u,Math.sin(o),Math.cos(a)*u],f=r.center,p=[Math.cos(a),0,-Math.sin(a)],m=[p[1]*d[2]-p[2]*d[1],p[2]*d[0]-p[0]*d[2],p[0]*d[1]-p[1]*d[0]],h=c*2/Math.max(1,Math.min(t.width,t.height))/Math.max(.1,s),g=(n.panX??0)*h,_=(n.panY??0)*h,v=[f[0]-p[0]*g+m[0]*_,f[1]-p[1]*g+m[1]*_,f[2]-p[2]*g+m[2]*_],y=ha([v[0]+d[0]*l,v[1]+d[1]*l,v[2]+d[2]*l],v,[0,1,0]);return{mvp:ga(ma(Math.PI/4,i,Math.max(.001,l-c*2.2),l+c*3.2),y)}}function pa(){return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function ma(e,t,n,r){let i=1/Math.tan(e/2),a=1/(n-r);return new Float32Array([i/t,0,0,0,0,i,0,0,0,0,(r+n)*a,-1,0,0,2*r*n*a,0])}function ha(e,t,n){let r=e[0]-t[0],i=e[1]-t[1],a=e[2]-t[2],o=Math.hypot(r,i,a)||1;r/=o,i/=o,a/=o;let s=n[1]*a-n[2]*i,c=n[2]*r-n[0]*a,l=n[0]*i-n[1]*r;o=Math.hypot(s,c,l)||1,s/=o,c/=o,l/=o;let u=i*l-a*c,d=a*s-r*l,f=r*c-i*s;return new Float32Array([s,u,r,0,c,d,i,0,l,f,a,0,-(s*e[0]+c*e[1]+l*e[2]),-(u*e[0]+d*e[1]+f*e[2]),-(r*e[0]+i*e[1]+a*e[2]),1])}function ga(e,t){let n=new Float32Array(16);for(let r=0;r<4;r++)for(let i=0;i<4;i++)n[r*4+i]=e[0+i]*t[r*4+0]+e[4+i]*t[r*4+1]+e[8+i]*t[r*4+2]+e[12+i]*t[r*4+3];return n}function _a(e,t,n){return Math.max(t,Math.min(n,e))}function va(e){return typeof WebGL2RenderingContext<`u`&&e instanceof WebGL2RenderingContext}var ya=class{constructor(e){this.document=e}async render(e,t,n={}){let r=this.document.pageData[e];if(!r)throw Error(`Page index out of range: ${e}`);return r.kind!==`w2d-text`&&r.kind!==`w3d-model`&&n.webglCanvas&&(n.webglCanvas.style.visibility=`hidden`),r.kind===`xps-fixed-page`?(this.xps??=new gi(this.document),await this.xps.render(r,t,n)):r.kind===`w2d-text`?(this.w2d??=new ea,await this.w2d.render(r,t,n)):r.kind===`w3d-model`?(this.w3d??=new ia,await this.w3d.render(r,t,n)):r.kind===`image`?await this.renderImage(r,t,n):this.renderUnsupported(r,t,n)}dispose(){this.xps?.dispose(),this.w2d?.dispose(),this.w3d?.dispose()}async renderImage(e,t,n){let r=this.document.zip;if(!r)throw Error(`Image page requires a ZIP package.`);let i=t.getContext(`2d`);if(!i)throw Error(`CanvasRenderingContext2D is not available.`);i.save(),i.setTransform(1,0,0,1,0,0),i.fillStyle=n.background??`#ffffff`,i.fillRect(0,0,t.width,t.height),i.restore();let a=await ue(await r.read(e.sourcePath),e.mediaType),o=`width`in a?a.width:a.naturalWidth,s=`height`in a?a.height:a.naturalHeight,c=Math.min(t.width/Math.max(1,o),t.height/Math.max(1,s))*(n.zoom??1),l=o*c,u=s*c,d=(t.width-l)/2+(n.panX??0),f=(t.height-u)/2+(n.panY??0);return i.drawImage(a,d,f,l,u),{backend:`image`,commands:1,warnings:v(e.diagnostics)}}renderUnsupported(e,t,n){let r=t.getContext(`2d`);if(!r)throw Error(`CanvasRenderingContext2D is not available.`);return r.save(),r.setTransform(1,0,0,1,0,0),r.fillStyle=n.background??`#ffffff`,r.fillRect(0,0,t.width,t.height),r.fillStyle=`#111827`,r.font=`16px sans-serif`,ba(r,e.name,32,48,t.width-64,24),r.font=`13px sans-serif`,r.fillStyle=`#92400e`,ba(r,e.reason,32,88,t.width-64,20),r.restore(),{backend:`unsupported`,commands:0,warnings:[...e.diagnostics,_(`warning`,`PAGE_UNSUPPORTED`,e.reason,e.sourcePath)]}}};function ba(e,t,n,r,i,a){let o=t.split(/\s+/),s=``;for(let t of o){let o=s?`${s} ${t}`:t;e.measureText(o).width>i&&s?(e.fillText(s,n,r),s=t,r+=a):s=o}s&&e.fillText(s,n,r)}var xa=class{constructor(e,t={}){this.pageIndex=0,this.zoom=1,this.panX=0,this.panY=0,this.yaw=-.78,this.pitch=.55,this.rendering=!1,this.renderAgain=!1,this.renderRaf=0,this.renderSeq=0,this.currentDpr=1,this.preferWebgl=t.preferWebgl??!0,this.preferWasm=t.preferWasm??!0,this.wasmUrl=t.wasmUrl,this.background=t.background??`#ffffff`,this.maxDevicePixelRatio=t.maxDevicePixelRatio??2,this.maxCanvasPixels=t.maxCanvasPixels??16777216,this.maxGpuCacheBytes=t.maxGpuCacheBytes,this.maxCachedScenes=t.maxCachedScenes,this.lineWeightMode=t.lineWeightMode??`adaptive`,this.minStrokeCssPx=t.minStrokeCssPx,this.maxOverviewStrokeCssPx=t.maxOverviewStrokeCssPx,this.minTextCssPx=t.minTextCssPx,this.minFilledAreaCssPx=t.minFilledAreaCssPx,this.root=document.createElement(`div`),this.root.className=`dwfv-root`;let n=document.createElement(`div`);n.className=`dwfv-toolbar`,this.pageSelect=document.createElement(`select`),this.zoomOutButton=Sa(``),this.zoomInButton=Sa(`+`),this.resetButton=Sa(`适应`),this.status=document.createElement(`span`),this.status.className=`dwfv-status`,n.append(`页: `,this.pageSelect,this.zoomOutButton,this.zoomInButton,this.resetButton,this.status);let r=document.createElement(`div`);r.className=`dwfv-workspace`,this.treePanel=document.createElement(`div`),this.treePanel.className=`dwfv-tree`,this.treePanel.style.display=`none`;let i=document.createElement(`div`);i.className=`dwfv-stage`,this.webglCanvas=document.createElement(`canvas`),this.webglCanvas.className=`dwfv-canvas dwfv-webgl-canvas`,this.webglCanvas.style.visibility=`hidden`,this.canvas=document.createElement(`canvas`),this.canvas.className=`dwfv-canvas dwfv-overlay-canvas`,this.canvas.style.touchAction=`none`,i.append(this.webglCanvas,this.canvas),r.append(this.treePanel,i),this.root.append(n,r),e.replaceChildren(this.root),this.pageSelect.addEventListener(`change`,()=>{this.pageIndex=this.pageSelect.selectedIndex,this.resetView(),this.populateModelTree(),this.requestRender()}),this.zoomOutButton.addEventListener(`click`,()=>{this.zoomAtCenter(.8),this.requestRender()}),this.zoomInButton.addEventListener(`click`,()=>{this.zoomAtCenter(1.25),this.requestRender()}),this.resetButton.addEventListener(`click`,()=>{this.resetView(),this.requestRender()}),this.canvas.addEventListener(`wheel`,e=>this.onWheel(e),{passive:!1}),this.canvas.addEventListener(`pointerdown`,e=>this.onPointerDown(e)),window.addEventListener(`pointermove`,e=>this.onPointerMove(e)),window.addEventListener(`pointerup`,()=>{this.drag=void 0}),this.canvas.addEventListener(`contextmenu`,e=>e.preventDefault()),new ResizeObserver(()=>this.requestRender()).observe(i),this.setStatus(`选择 .dwf/.dwfx 文件`)}setPreferWebgl(e){this.preferWebgl=e,this.requestRender()}setPreferWasm(e){this.preferWasm=e,this.requestRender()}setLineWeightMode(e){this.lineWeightMode=e,this.renderer?.dispose(),this.requestRender()}async load(e,t={}){this.setStatus(`解析文件中…`),this.renderer?.dispose(),this.doc=await yr(e,{fileName:t.fileName}),this.renderer=new ya(this.doc),this.pageIndex=t.pageIndex??0,this.zoom=1,this.panX=this.panY=0,this.yaw=-.78,this.pitch=.55,this.preferWebgl=t.preferWebgl??this.preferWebgl,this.preferWasm=t.preferWasm??this.preferWasm,this.wasmUrl=t.wasmUrl??this.wasmUrl,this.background=t.background??this.background,this.maxGpuCacheBytes=t.maxGpuCacheBytes??this.maxGpuCacheBytes,this.maxCachedScenes=t.maxCachedScenes??this.maxCachedScenes,this.lineWeightMode=t.lineWeightMode??this.lineWeightMode,this.minStrokeCssPx=t.minStrokeCssPx??this.minStrokeCssPx,this.maxOverviewStrokeCssPx=t.maxOverviewStrokeCssPx??this.maxOverviewStrokeCssPx,this.minTextCssPx=t.minTextCssPx??this.minTextCssPx,this.minFilledAreaCssPx=t.minFilledAreaCssPx??this.minFilledAreaCssPx,this.populatePages(),this.populateModelTree(),await this.render()}async render(){if(!(!this.renderer||!this.doc)){if(this.rendering)return this.renderAgain=!0,this.pendingRender;this.rendering=!0;try{this.resizeCanvasToDisplaySize();let e=this.doc.pageData[this.pageIndex];if(!e)return;let t=++this.renderSeq,n=this.renderer.render(this.pageIndex,this.canvas,{zoom:this.zoom,panX:this.panX,panY:this.panY,preferWebgl:this.preferWebgl,preferWasm:this.preferWasm,wasmUrl:this.wasmUrl,background:this.background,maxGpuCacheBytes:this.maxGpuCacheBytes,maxCachedScenes:this.maxCachedScenes,webglCanvas:this.webglCanvas,yaw:this.yaw,pitch:this.pitch,lineWeightMode:this.lineWeightMode,minStrokeCssPx:this.minStrokeCssPx,maxOverviewStrokeCssPx:this.maxOverviewStrokeCssPx,minTextCssPx:this.minTextCssPx,minFilledAreaCssPx:this.minFilledAreaCssPx});this.pendingRender=n;try{let r=await n;if(this.pendingRender===n&&t===this.renderSeq){let t=r.warnings.filter(e=>e.level!==`info`).length,n=this.currentDpr>1?` · DPR ${this.currentDpr.toFixed(2)}`:``;this.setStatus(`${this.doc.kind.toUpperCase()} · ${e.kind} · ${r.backend} · ${r.commands} ops${n}${t?` · ${t} 警告`:``}`,t>0)}return r}catch(e){throw t===this.renderSeq&&this.setStatus(`渲染失败:${String(e)}`,!0),e}}finally{this.rendering=!1,this.renderAgain&&(this.renderAgain=!1,this.requestRender())}}}getDocument(){return this.doc}fit(){this.resetView(),this.requestRender()}dispose(){this.renderRaf&&cancelAnimationFrame(this.renderRaf),this.renderRaf=0,this.renderer?.dispose(),this.renderer=void 0,this.doc=void 0,this.root.replaceChildren()}requestRender(){this.renderRaf||=requestAnimationFrame(()=>{this.renderRaf=0,this.render()})}populatePages(){this.pageSelect.replaceChildren();let e=this.doc?.pageData??[];for(let[t,n]of e.entries()){let e=document.createElement(`option`);e.value=String(t),e.textContent=`${t+1}. ${n.name} (${n.kind})`,this.pageSelect.append(e)}this.pageSelect.selectedIndex=Math.max(0,Math.min(this.pageIndex,e.length-1))}populateModelTree(){let e=this.doc?.pageData[this.pageIndex];if(!e||e.kind!==`w3d-model`||!e.model.sceneTree?.length){this.treePanel.style.display=`none`,this.treePanel.replaceChildren();return}this.treePanel.style.display=``;let t=document.createElement(`div`);t.className=`dwfv-tree-header`,t.textContent=`模型结构 · ${e.model.stats.nodeCount??0} 节点`;let n=document.createElement(`div`);n.className=`dwfv-tree-stats`,n.textContent=`${e.model.stats.meshCount} meshes · ${e.model.stats.triangleCount} triangles · ${e.model.stats.textureCount??0} textures`;let r=document.createElement(`div`);r.className=`dwfv-tree-content`;for(let t of e.model.sceneTree)r.append(Ca(t));this.treePanel.replaceChildren(t,n,r)}resizeCanvasToDisplaySize(){let e=this.canvas.getBoundingClientRect(),t=Math.max(1,e.width),n=Math.max(1,e.height),r=Math.max(1,Math.min(this.maxDevicePixelRatio,window.devicePixelRatio||1)),i=t*n*r*r;i>this.maxCanvasPixels&&(r*=Math.sqrt(this.maxCanvasPixels/i)),this.currentDpr=r;let a=Math.max(1,Math.floor(t*r)),o=Math.max(1,Math.floor(n*r));(this.canvas.width!==a||this.canvas.height!==o)&&(this.canvas.width=a,this.canvas.height=o),(this.webglCanvas.width!==a||this.webglCanvas.height!==o)&&(this.webglCanvas.width=a,this.webglCanvas.height=o)}resetView(){this.zoom=1,this.panX=0,this.panY=0,this.yaw=-.78,this.pitch=.55;let e=this.doc?.pageData[this.pageIndex];if(e?.kind===`w3d-model`){let t=e.model.initialView?.camera,n=t?.position,r=t?.target;if(n&&r){let t=n[0]-r[0],i=n[1]-r[1],a=n[2]-r[2],o=Math.hypot(t,i,a);if(o>1e-6){this.pitch=Math.max(-1.45,Math.min(1.45,Math.asin(i/o))),this.yaw=Math.atan2(t,a);let n=Math.max(1e-6,e.model.bounds.radius);this.zoom=Math.max(.05,Math.min(100,n*2.55/o))}}}}zoomAtCenter(e){if(this.resizeCanvasToDisplaySize(),this.is3dPage()){this.zoom=Math.max(.05,Math.min(100,this.zoom*e));return}let t=this.canvas.width/2,n=this.canvas.height/2;this.zoomAroundPoint(e,t,n)}zoomAroundPoint(e,t,n){let r=this.zoom,i=Math.max(.05,Math.min(64,r*e));if(i===r)return;let a=this.pagePointAtCanvasPoint(t,n,r,this.panX,this.panY);if(a){let e=this.pageMatrixAt(i,0,0);if(e){let[r,o]=Sr(e,a.x,a.y);this.panX=t-r,this.panY=n-o,this.zoom=i;return}}let o=i/r;this.panX=t-(t-this.panX)*o,this.panY=n-(n-this.panY)*o,this.zoom=i}onWheel(e){if(!this.doc)return;e.preventDefault(),this.resizeCanvasToDisplaySize();let t=this.canvas.getBoundingClientRect(),n=(e.clientX-t.left)*this.currentDpr,r=(e.clientY-t.top)*this.currentDpr,i=e.deltaMode===WheelEvent.DOM_DELTA_LINE?e.deltaY*16:e.deltaMode===WheelEvent.DOM_DELTA_PAGE?e.deltaY*Math.max(1,t.height):e.deltaY,a=Math.exp(-i*.0015);this.is3dPage()?this.zoom=Math.max(.05,Math.min(100,this.zoom*a)):this.zoomAroundPoint(a,n,r),this.requestRender()}onPointerDown(e){this.canvas.setPointerCapture?.(e.pointerId),this.is3dPage()&&e.preventDefault();let t=this.is3dPage()?e.button===2||e.shiftKey?`pan3d`:`rotate3d`:`pan2d`;this.drag={x:e.clientX,y:e.clientY,panX:this.panX,panY:this.panY,yaw:this.yaw,pitch:this.pitch,mode:t}}onPointerMove(e){if(!this.drag)return;let t=e.clientX-this.drag.x,n=e.clientY-this.drag.y;this.drag.mode===`rotate3d`?(this.yaw=this.drag.yaw+t*.008,this.pitch=Math.max(-1.45,Math.min(1.45,this.drag.pitch+n*.008))):(this.panX=this.drag.panX+t*this.currentDpr,this.panY=this.drag.panY+n*this.currentDpr),this.requestRender()}is3dPage(){return this.doc?.pageData[this.pageIndex]?.kind===`w3d-model`}pagePointAtCanvasPoint(e,t,n,r,i){let a=this.pageMatrixAt(n,r,i);if(!a)return;let o=a.a*a.d-a.b*a.c;if(!Number.isFinite(o)||Math.abs(o)<1e-12)return;let s=e-a.e,c=t-a.f;return{x:(a.d*s-a.c*c)/o,y:(-a.b*s+a.a*c)/o}}pageMatrixAt(e,t,n){let r=this.doc?.pageData[this.pageIndex];if(!r)return;let i=Math.max(1,this.canvas.width),a=Math.max(1,this.canvas.height);if(r.kind===`w2d-text`)return Ar(r,i,a,e,t,n);if(r.kind===`xps-fixed-page`)return kr({canvasWidth:i,canvasHeight:a,pageWidth:Math.max(1,r.width),pageHeight:Math.max(1,r.height),zoom:e,panX:t,panY:n});if(r.kind===`image`)return kr({canvasWidth:i,canvasHeight:a,pageWidth:Math.max(1,r.width),pageHeight:Math.max(1,r.height),zoom:e,panX:t,panY:n,margin:0})}setStatus(e,t=!1){this.status.textContent=e,this.status.classList.toggle(`dwfv-warn`,t)}};function Sa(e){let t=document.createElement(`button`);return t.type=`button`,t.textContent=e,t}function Ca(e){let t=document.createElement(`details`);t.open=e.children.length>0&&e.children.length<20;let n=document.createElement(`summary`);if(n.textContent=e.label||e.id,e.meshIds.length>0&&(n.title=`${e.meshIds.length} mesh(es)`),t.append(n),e.contentRefs.length>0){let n=document.createElement(`div`);n.className=`dwfv-tree-meta`,n.textContent=e.contentRefs.slice(0,3).join(`, `),t.append(n)}for(let n of e.children)t.append(Ca(n));return t}var wa=Object.defineProperty,Ta=(e,t,n)=>t in e?wa(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,U=(e,t,n)=>Ta(e,typeof t==`symbol`?t:t+``,n);async function Ea(e){if(e.buffer instanceof Uint8Array)return e.buffer;if(e.buffer instanceof ArrayBuffer)return new Uint8Array(e.buffer);if(e.file)return new Uint8Array(await e.file.arrayBuffer());throw Error(`CadLoadInput requires a File, ArrayBuffer, or Uint8Array.`)}function Da(e){return e.byteOffset===0&&e.byteLength===e.buffer.byteLength?e.buffer:e.slice().buffer}function Oa(e){let t=e.fileName??e.file?.name??``,n=t.lastIndexOf(`.`);return n>=0?t.slice(n+1).toLowerCase():``}function ka(e,t){let n=Oa(e);if(n===`dwg`)return`dwg`;if(n===`dxf`)return`dxf`;if(n===`dwfx`)return`dwfx`;if(n===`xps`)return`xps`;if(n===`dwf`)return`dwf`;if(t&&t.byteLength>=6){let e=Aa(t.slice(0,6));if(/^AC10/.test(e))return`dwg`;if(t[0]===80&&t[1]===75)return`dwfx`;let n=Aa(t.slice(0,Math.min(t.byteLength,2048))).toUpperCase();if(n.includes(`SECTION`)&&n.includes(`ENTITIES`))return`dxf`;if(n.includes(`DWF`))return`dwf`}return`unknown`}function Aa(e){return Array.from(e,e=>e>=32&&e<=126?String.fromCharCode(e):` `).join(``)}var ja=class{constructor(e=[]){U(this,`loaders`,[]);for(let t of e)this.register(t)}register(e){let t=this.loaders.findIndex(t=>t.id===e.id);return t>=0?this.loaders.splice(t,1,e):this.loaders.push(e),this}unregister(e){let t=this.loaders.findIndex(t=>t.id===e);return t>=0&&this.loaders.splice(t,1),this}list(){return[...this.loaders]}async detect(e){let t=await Ea(e),n=ka(e,t),r=this.loaders.find(r=>r.formats.includes(n)&&r.accepts(e,t));if(r)return{loader:r,bytes:t,format:n};let i=this.loaders.find(n=>n.accepts(e,t));if(i)return{loader:i,bytes:t,format:n};throw Error(`No CAD loader registered for ${n===`unknown`?`this file`:n.toUpperCase()}.`)}async load(e,t={}){let{loader:n,bytes:r}=await this.detect(e);return n.load({...e,buffer:r},t)}},Ma=class{constructor(){U(this,`worker`),U(this,`sequence`,0),U(this,`pending`,new Map)}load(e,t,n={}){var r;if(!Na())throw Error(`Web Worker is not available in this runtime.`);let i=this.ensureWorker(n),a=++this.sequence,o=Math.max(0,Number(n.workerTimeoutMs??0)),s=n.fileName??t.fileName??t.file?.name,c=Ia(e,t,n);return(r=n.onProgress)==null||r.call(n,{phase:`worker-start`,format:`dwg`,message:`Dispatching DWG parse to worker…`,total:e.byteLength}),new Promise((e,t)=>{var r;if((r=n.signal)!=null&&r.aborted){t(Ra());return}let l={resolve:e,reject:t,onProgress:n.onProgress,signal:n.signal};o>0&&(l.timer=setTimeout(()=>{this.pending.delete(a),this.resetWorker(),t(Error(`DWG worker timed out after ${o} ms.`))},o)),n.signal&&(l.abortHandler=()=>{this.pending.delete(a),this.resetWorker(),t(Ra())},n.signal.addEventListener(`abort`,l.abortHandler,{once:!0})),this.pending.set(a,l);try{i.postMessage({type:`load`,requestId:a,bytes:c,fileName:s,options:Fa(n)},[c])}catch(e){this.pending.delete(a),La(l),t(e instanceof Error?e:Error(String(e)))}})}preload(e={}){var t;if(!Na())return Promise.reject(Error(`Web Worker is not available in this runtime.`));let n=this.ensureWorker(e),r=++this.sequence,i=Math.max(0,Number(e.workerTimeoutMs??0));return(t=e.onProgress)==null||t.call(e,{phase:`worker-start`,format:`dwg`,message:`Starting DWG worker warmup…`}),new Promise((t,a)=>{var o;if((o=e.signal)!=null&&o.aborted){a(Ra());return}let s={resolve:()=>t(),reject:a,onProgress:e.onProgress,signal:e.signal};i>0&&(s.timer=setTimeout(()=>{this.pending.delete(r),this.resetWorker(),a(Error(`DWG worker warmup timed out after ${i} ms.`))},i)),e.signal&&(s.abortHandler=()=>{this.pending.delete(r),this.resetWorker(),a(Ra())},e.signal.addEventListener(`abort`,s.abortHandler,{once:!0})),this.pending.set(r,s);try{n.postMessage({type:`warmup`,requestId:r,options:Fa(e)})}catch(e){this.pending.delete(r),La(s),a(e instanceof Error?e:Error(String(e)))}})}terminate(){this.resetWorker()}ensureWorker(e){return this.worker||(this.worker=Pa(e),this.worker.onmessage=e=>this.handleMessage(e.data),this.worker.onerror=e=>{let t=e.message||`DWG worker failed.`;this.rejectAll(Error(t)),this.resetWorker(!1)},this.worker.onmessageerror=()=>{this.rejectAll(Error(`DWG worker returned a message that could not be cloned.`)),this.resetWorker(!1)}),this.worker}handleMessage(e){var t,n;if(e.type===`ready`)return;let r=this.pending.get(e.requestId);if(!r)return;if(e.type===`progress`){(t=r.onProgress)==null||t.call(r,e.progress);return}if(this.pending.delete(e.requestId),La(r),e.type===`result`){r.resolve(e.result);return}if(e.type===`warmup-result`){(n=r.onProgress)==null||n.call(r,{phase:`worker-ready`,format:`dwg`,message:`DWG worker warmup complete.`,percent:100,elapsedMs:e.elapsedMs}),r.resolve(void 0);return}let i=Error(e.error.message);i.name=e.error.name||`DwgWorkerError`,e.error.stack&&(i.stack=e.error.stack),r.reject(i)}rejectAll(e){for(let[,t]of this.pending)La(t),t.reject(e);this.pending.clear()}resetWorker(e=!0){var t;e&&this.rejectAll(Error(`DWG worker was terminated.`)),(t=this.worker)==null||t.terminate(),this.worker=void 0}};function Na(){return typeof Worker<`u`&&typeof URL<`u`}function Pa(e){return e.workerFactory?e.workerFactory():e.workerUrl?new Worker(e.workerUrl,{type:`module`,name:`lightweight-cad-dwg-loader`}):new Worker(new URL(`/assets/DwgWorker-CuZJ5EUe.js`,import.meta.url),{type:`module`,name:`lightweight-cad-dwg-loader`})}function Fa(e){return{wasmPath:za(e.wasmPath),includePaperSpace:e.includePaperSpace,maxInsertDepth:e.maxInsertDepth,keepRaw:!!e.keepRaw}}function Ia(e,t,n){return t.file||n.transferInputBuffer===!0?Da(e):e.slice().buffer}function La(e){e.timer&&clearTimeout(e.timer),e.signal&&e.abortHandler&&e.signal.removeEventListener(`abort`,e.abortHandler)}function Ra(){if(typeof DOMException<`u`)return new DOMException(`DWG loading was aborted.`,`AbortError`);let e=Error(`DWG loading was aborted.`);return e.name=`AbortError`,e}function za(e){let t=(e?.trim()||`/wasm`).replace(/\/+$/,``);return t===``?Va():Ha(t)?t:t.startsWith(`/`)?`${Va()}${t}`:new URL(t,Ba()).href.replace(/\/+$/,``)}function Ba(){return typeof document<`u`&&document.baseURI?document.baseURI:typeof location<`u`&&location.href?location.href:`http://localhost/`}function Va(){return typeof location<`u`&&location.origin?location.origin:new URL(Ba()).origin}function Ha(e){return/^[a-z][a-z0-9+.-]*:/i.test(e)}var Ua=class{constructor(e={}){U(this,`id`,`dwg`),U(this,`label`,`DWG / LibreDWG WebAssembly`),U(this,`formats`,[`dwg`]),U(this,`defaults`),U(this,`workerClient`,new Ma),this.defaults={useWorker:!0,...e}}accepts(e,t){return Oa(e)===`dwg`?!0:ka(e,t)===`dwg`}async load(e,t={}){var n;let r={...this.defaults,...t};(n=r.onProgress)==null||n.call(r,{phase:`read`,format:`dwg`,message:`Reading DWG bytes…`});let i=await Ea(e),a=e.fileName??e.file?.name;if(r.useWorker===!1)throw Error(`DWG main-thread parsing is intentionally not bundled by the default viewer. Keep useWorker enabled, or register a custom DWG loader for non-browser runtimes.`);if(!Na())throw Error(`DWG loading requires Web Worker support in this build. Provide a custom loader for this runtime.`);try{return await this.workerClient.load(i,e,{...r,fileName:a})}catch(e){throw Wa(e)?e:Ga(e)}}terminateWorker(){this.workerClient.terminate()}preload(e={}){let t={...this.defaults,...e};return t.useWorker===!1?Promise.reject(Error(`DWG preload requires worker mode in the default viewer.`)):this.workerClient.preload(t)}};function Wa(e){return e instanceof Error&&e.name===`AbortError`}function Ga(e){let t=e instanceof Error?e.message:String(e);return Error(`${t} If the worker asset cannot be resolved by your bundler/CDN, pass workerUrl or workerFactory to CadViewer.`)}function Ka(e){return{format:e.format,sourceName:e.sourceName,units:e.units,header:e.header??{},layers:e.layers??{},blocks:e.blocks??{},entities:e.entities??[],pages:e.pages,metadata:e.metadata??{},warnings:e.warnings??[],raw:e.raw}}function qa(e){switch(String(e??``).toUpperCase()){case`LINE`:return`line`;case`CIRCLE`:return`circle`;case`ARC`:return`arc`;case`LWPOLYLINE`:case`POLYLINE`:case`POLYLINE_2D`:case`POLYLINE2D`:case`POLYLINE_3D`:case`POLYLINE3D`:case`LEADER`:case`MULTILEADER`:return`polyline`;case`ELLIPSE`:return`ellipse`;case`TEXT`:case`MTEXT`:case`ATTRIB`:case`ATTDEF`:case`DIMENSION`:return`text`;case`POINT`:return`point`;case`INSERT`:return`insert`;case`SOLID`:case`TRACE`:case`3DFACE`:return`solid`;case`HATCH`:return`hatch`;case`SPLINE`:return`spline`;case`PATH`:case`XPS_PATH`:case`DWF_PATH`:return`path`;case`IMAGE`:case`RASTER_IMAGE`:case`DWF_IMAGE`:return`image`;case`VIEWPORT`:return`viewport`;default:return`unsupported`}}function Ja(e,t,n={}){let r=t??String(e.type??e.entityType??e.objectName??`UNKNOWN`).toUpperCase(),i=n.includeUnknownProperties===!1?{type:r,kind:qa(r)}:{...e,type:r,kind:qa(r)};n.keepRaw&&(i.raw=e),i.handle=K(e.handle??e.id),i.layer=K(e.layer??e.layerName),i.lineType=K(e.lineType??e.linetype);let a=n.numericColorMode??`auto`,o=G(e.color);i.colorIndex=G(e.colorIndex??e.colorNumber??e.aci??e.aciColor??e.color_index)??(a!==`rgb`&&o!==void 0&&Math.abs(o)<=257?o:void 0),i.trueColor=e.trueColor??e.true_color??e.truecolor??e.colorRGB??e.colorRgb??e.rgbColor??e.rgb??(o!==void 0&&o>=0&&o<=16777215&&(a===`rgb`||a===`auto`&&Math.abs(o)>257)?o:void 0),(typeof e.color==`string`||typeof e.color==`number`)&&(i.color=e.color),i.colorNumber=G(e.colorNumber)??i.colorNumber,i.colorName=K(e.colorName??e.color_name)??i.colorName,i.fillColor=e.fillColor??e.fill_color,i.fillColorIndex=G(e.fillColorIndex??e.fill_color_index??e.fillColorNumber)??i.fillColorIndex,i.opacity=G(e.opacity??e.alpha)??i.opacity,i.lineweight=G(e.lineweight??e.lineWeight),i.isVisible=!(e.isVisible===!1||e.visible===!1),i.startPoint=W(e.startPoint??e.start??e.p0??e.from)??i.startPoint,i.endPoint=W(e.endPoint??e.end??e.p1??e.to)??i.endPoint,i.center=W(e.center??e.centerPoint)??i.center,i.insertionPoint=W(e.insertionPoint??e.position??e.location??e.point??e.basePoint)??i.insertionPoint,i.radius=G(e.radius)??i.radius,i.startAngle=G(e.startAngle??e.start_angle)??i.startAngle,i.endAngle=G(e.endAngle??e.end_angle)??i.endAngle,i.majorAxisEndPoint=W(e.majorAxisEndPoint??e.majorAxis??e.major)??i.majorAxisEndPoint,i.axisRatio=G(e.axisRatio??e.ratio)??i.axisRatio,i.height=G(e.height??e.textHeight)??i.height,i.textHeight=G(e.textHeight??e.height)??i.textHeight,i.rotation=G(e.rotation??e.angle)??i.rotation,i.text=K(e.text??e.value??e.string??e.contents)??i.text,i.name=K(e.name??e.blockName)??i.name,i.blockName=K(e.blockName??e.name)??i.blockName;let s=Ya(e.vertices??e.points);s.length>0&&(i.vertices=s);let c=Ya(e.controlPoints??e.control_points);c.length>0&&(i.controlPoints=c);let l=Ya(e.fitPoints??e.fit_points);return l.length>0&&(i.fitPoints=l),i}function W(e){if(!e||typeof e!=`object`)return;let t=e,n=Number(t.x??t.X??t[0]),r=Number(t.y??t.Y??t[1]),i=t.z??t.Z??t[2],a=i===void 0?void 0:Number(i);if(!(!Number.isFinite(n)||!Number.isFinite(r)))return Number.isFinite(a)?{x:n,y:r,z:a}:{x:n,y:r}}function Ya(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){let e=W(n);if(!e)continue;let r=n,i=e,a=G(r.bulge);a!==void 0&&(i.bulge=a);let o=G(r.startWidth??r.start_width);o!==void 0&&(i.startWidth=o);let s=G(r.endWidth??r.end_width);s!==void 0&&(i.endWidth=s),t.push(i)}return t}function Xa(e){let t={};for(let n of e.entities){let e=String(n.type??`UNKNOWN`).toUpperCase();t[e]=(t[e]??0)+1}return{format:e.format,sourceName:e.sourceName,entityCount:e.entities.length,layerCount:Object.keys(e.layers).length,blockCount:Object.keys(e.blocks).length,pageCount:e.pages?.length??0,byType:t,warnings:[...e.warnings]}}function Za(e,t){t.name&&(e[t.name]=t,e[t.name.toLowerCase()]=t)}function Qa(e,t){t.name&&(e[t.name]=t,e[t.name.toLowerCase()]=t)}function $a(e){return e!=null&&e.length?e.flatMap(e=>e.entities.map(t=>({...t,pageIndex:e.index}))):[]}function G(e){let t=Number(e);return Number.isFinite(t)?t:void 0}function K(e){if(typeof e!=`string`&&typeof e!=`number`)return;let t=String(e);return t.length>0?t:void 0}function q(){return{minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function eo(e){return Number.isFinite(e.minX)&&Number.isFinite(e.minY)&&Number.isFinite(e.maxX)&&Number.isFinite(e.maxY)&&e.maxX>=e.minX&&e.maxY>=e.minY}function J(e,t){Y(t)&&(e.minX=Math.min(e.minX,t.x),e.minY=Math.min(e.minY,t.y),e.maxX=Math.max(e.maxX,t.x),e.maxY=Math.max(e.maxY,t.y))}function to(e,t,n){if(!Y(t)||!Number.isFinite(n))return;let r=Math.abs(n);J(e,{x:t.x-r,y:t.y-r}),J(e,{x:t.x+r,y:t.y+r})}function no(e,t=.02,n=1e-6){if(!eo(e))return{minX:-10,minY:-10,maxX:10,maxY:10};let r=Math.max((e.maxX-e.minX)*t,n),i=Math.max((e.maxY-e.minY)*t,n);return{minX:e.minX-r,minY:e.minY-i,maxX:e.maxX+r,maxY:e.maxY+i}}function Y(e){return!!e&&typeof e==`object`&&Number.isFinite(e.x)&&Number.isFinite(e.y)}function X(e){return{x:e.x,y:e.y}}function ro(e){return e*Math.PI/180}function io(e,t,n,r,i=!0,a=64){if(!Y(e)||!Number.isFinite(t))return[];let o=n,s=r;if(!Number.isFinite(o)||!Number.isFinite(s))return[];(Math.abs(o)>Math.PI*2+1e-6||Math.abs(s)>Math.PI*2+1e-6)&&(o=ro(o),s=ro(s)),i&&s<o&&(s+=Math.PI*2),!i&&o<s&&(o+=Math.PI*2);let c=s-o,l=Math.max(8,Math.min(256,Math.ceil(Math.abs(c)/(Math.PI*2)*a))),u=[];for(let n=0;n<=l;n++){let r=o+n/l*c;u.push({x:e.x+Math.cos(r)*t,y:e.y+Math.sin(r)*t})}return u}function ao(e,t,n=1,r=0,i=Math.PI*2,a=96){if(!Y(e)||!Y(t))return[];let o=Math.hypot(t.x,t.y);if(!Number.isFinite(o)||o<=0)return[];let s=o*(Number.isFinite(n)&&n>0?n:1),c=Math.atan2(t.y,t.x),l=Number.isFinite(r)?r:0,u=Number.isFinite(i)?i:Math.PI*2;(Math.abs(l)>Math.PI*2+1e-6||Math.abs(u)>Math.PI*2+1e-6)&&(l=ro(l),u=ro(u)),u<l&&(u+=Math.PI*2);let d=Math.max(12,Math.min(256,Math.ceil(Math.abs(u-l)/(Math.PI*2)*a))),f=[],p=Math.cos(c),m=Math.sin(c);for(let t=0;t<=d;t++){let n=l+(u-l)*(t/d),r=Math.cos(n)*o,i=Math.sin(n)*s;f.push({x:e.x+r*p-i*m,y:e.y+r*m+i*p})}return f}function oo(e,t,n=0,r=16){if(!Number.isFinite(n)||Math.abs(n)<1e-12)return[X(e),X(t)];let i=Math.hypot(t.x-e.x,t.y-e.y);if(i<=1e-12)return[X(e),X(t)];let a=4*Math.atan(n),o=Math.abs(i/(2*Math.sin(a/2))),s={x:(e.x+t.x)/2,y:(e.y+t.y)/2},c=(t.x-e.x)/i,l=(t.y-e.y)/i,u=n>=0?1:-1,d=Math.sqrt(Math.max(o*o-(i/2)**2,0)),f={x:s.x-u*l*d,y:s.y+u*c*d};return io(f,o,Math.atan2(e.y-f.y,e.x-f.x),Math.atan2(t.y-f.y,t.x-f.x),n>=0,r)}function so(e){return e.replace(/\\P/g,`
`).replace(/\\~|\\ /g,` `).replace(/\\[A-Za-z][^;]*;/g,``).replace(/[{}]/g,``).replace(/\\[A-Za-z]/g,``).trim()}function co(e,t,n){return Math.min(n,Math.max(t,e))}var lo=class{constructor(e={}){U(this,`id`,`dxf`),U(this,`label`,`DXF / JavaScript parser`),U(this,`formats`,[`dxf`]),U(this,`defaults`),this.defaults=e}accepts(e,t){return Oa(e)===`dxf`||ka(e,t)===`dxf`}async load(e,t={}){({...this.defaults,...t});let n=performance.now(),r=await Ea(e),i=Co(r),a=[],o;try{o=await uo(i)}catch(e){a.push(`dxf-parser failed, using built-in fallback parser: ${e instanceof Error?e.message:String(e)}`),o=wo(i)}let s=fo(o,e.fileName??e.file?.name,a),c=performance.now()-n;return{document:s,raw:o,bytes:r.byteLength,elapsedMs:c,format:`dxf`,warnings:s.warnings}}};async function uo(e){let n=await t(()=>import(`./dist-BzZSLV34.js`),__vite__mapDeps([0,1,2,3]),import.meta.url),r=n.default??n.DxfParser;if(!r)throw Error(`dxf-parser did not expose a parser constructor.`);return new r().parseSync(e)}function fo(e,t,n=[]){let r=e&&typeof e==`object`?e:{},i=mo(r),a=ho(r),o=(Array.isArray(r.entities)?r.entities:[]).filter(e=>!!e&&typeof e==`object`).map(e=>po(e)),s=Ka({format:`dxf`,sourceName:t,header:r.header&&typeof r.header==`object`?r.header:{},layers:i,blocks:a,entities:o,metadata:{parser:`dxf-parser + cad-viewer normalizer`},warnings:n,raw:e});return o.length===0&&s.warnings.push(`DXF file did not expose any ENTITIES.`),s}function po(e){let t=String(e.type??e.entityType??`UNKNOWN`).toUpperCase(),n=Ja(e,t),r=G(e.colorIndex??e.colorNumber??e.aci),i=G(e.color);if(n.colorIndex=r??(i!==void 0&&Math.abs(i)<=257?i:void 0),n.trueColor=e.trueColor??e.true_color??e.colorRGB??e.trueColorValue??(i!==void 0&&Math.abs(i)>257?i:void 0),n.layer=K(e.layer??e.layerName)??`0`,n.isClosed=!!(e.shape??e.closed??e.isClosed)||(Number(e.flag??e.flags??0)&1)==1,t===`LINE`&&(n.startPoint=W(e.startPoint??{x:e.x1??e.x,y:e.y1??e.y,z:e.z1??e.z})??n.startPoint,n.endPoint=W(e.endPoint??{x:e.x2,y:e.y2,z:e.z2})??n.endPoint),(t===`TEXT`||t===`MTEXT`||t===`ATTRIB`||t===`ATTDEF`)&&(n.insertionPoint=W(e.startPoint??e.position??e.insertionPoint)??n.insertionPoint,n.text=K(e.text??e.string??e.value)??n.text,n.textHeight=G(e.textHeight??e.height)??n.textHeight,n.rotation=xo(e.rotation??e.angle)),(t===`ARC`||t===`ELLIPSE`)&&(n.startAngle=So(e.startAngle??e.start_angle),n.endAngle=So(e.endAngle??e.end_angle)),t===`INSERT`){n.blockName=K(e.name??e.blockName)??n.blockName,n.insertionPoint=W(e.position??e.insertionPoint??e.point)??n.insertionPoint;let t=G(e.xScale??e.scaleX??e.xscale),r=G(e.yScale??e.scaleY??e.yscale),i=G(e.zScale??e.scaleZ??e.zscale);(t!==void 0||r!==void 0||i!==void 0)&&(n.scale={x:t??1,y:r??t??1,z:i??1}),n.rotation=xo(e.rotation??e.angle)}if(t===`SPLINE`){let t=vo(e.controlPoints??e.control_points??e.points);t.length&&(n.controlPoints=t);let r=vo(e.fitPoints??e.fit_points);r.length&&(n.fitPoints=r)}return t===`HATCH`&&(n.loops=bo(e),n.fillColorIndex=n.colorIndex),(t===`SOLID`||t===`TRACE`||t===`3DFACE`)&&(n.vertices=yo(e),n.fillColorIndex=n.colorIndex),n}function mo(e){let t={},n=e.tables,r=_o(e.layers??n?.layer??n?.LAYER??n?.layers);for(let e of r){let n=e,r=K(n.name??n.layerName);r&&Za(t,{name:r,color:n.color??n.colorNumber??n.colorIndex,colorIndex:G(n.colorNumber??n.colorIndex??n.color),lineType:K(n.lineType??n.linetype),isVisible:Number(n.colorNumber??n.colorIndex??n.color??1)>=0,isFrozen:!!n.frozen,isLocked:!!n.locked,raw:n})}return t[0]||Za(t,{name:`0`,colorIndex:7,isVisible:!0}),t}function ho(e){let t={},n=e.blocks;if(!n||typeof n!=`object`)return t;if(Array.isArray(n))for(let e of n)go(t,e);else for(let[e,r]of Object.entries(n))go(t,r,e);return t}function go(e,t,n){if(!t||typeof t!=`object`)return;let r=t,i=K(r.name??r.blockName??n);if(!i)return;let a=(Array.isArray(r.entities)?r.entities:[]).filter(e=>!!e&&typeof e==`object`).map(e=>po(e));Qa(e,{name:i,basePoint:W(r.basePoint??r.position)??{x:0,y:0},entities:a,raw:r})}function _o(e){if(!e)return[];if(Array.isArray(e))return e;if(typeof e!=`object`)return[];let t=e;return Array.isArray(t.entries)?t.entries:Array.isArray(t.records)?t.records:Array.isArray(t.layers)?t.layers:Object.values(t).filter(e=>e&&typeof e==`object`)}function vo(e){return Array.isArray(e)?e.map(W).filter(e=>!!e):[]}function yo(e){let t=vo(e.vertices??e.points);if(t.length)return t;let n=[];for(let t=0;t<4;t++){let r=W({x:e[`x${t}`]??e[`x${t+1}`],y:e[`y${t}`]??e[`y${t+1}`],z:e[`z${t}`]??e[`z${t+1}`]});r&&n.push(r)}return n}function bo(e){let t=e.boundaryLoops??e.loops??e.paths;if(Array.isArray(t))return t.map(e=>{let t=e;return{vertices:vo(t.vertices??t.points),isClosed:!0}}).filter(e=>e.vertices&&e.vertices.length>0)}function xo(e){let t=G(e);if(t!==void 0)return Math.abs(t)>Math.PI*2+1e-6?ro(t):t}function So(e){let t=G(e);if(t!==void 0)return Math.abs(t)>Math.PI*2+1e-6?ro(t):t}function Co(e){let t=new TextDecoder(`utf-8`,{fatal:!1}).decode(e);return t.includes(`SECTION`)?t:new TextDecoder(`iso-8859-1`,{fatal:!1}).decode(e)}function wo(e){let t=e.replace(/\r\n/g,`
`).replace(/\r/g,`
`).split(`
`),n=[];for(let e=0;e<t.length-1;e+=2){let r=Number(t[e]?.trim()),i=t[e+1]??``;Number.isFinite(r)&&n.push({code:r,value:i.trimEnd()})}let r=[],i={},a=``,o=[],s;for(let e=0;e<n.length;e++){let t=n[e];if(t.code===0&&t.value===`SECTION`){a=n[e+1]?.code===2?n[e+1].value.toUpperCase():``,e++;continue}if(t.code===0&&t.value===`ENDSEC`){c(),a=``;continue}a===`ENTITIES`&&(t.code===0?(c(),o=[t]):o.push(t))}return c(),{header:{},tables:{},entities:r,blocks:i};function c(){if(!o.length)return;let e=o[0]?.value.toUpperCase();if(e===`VERTEX`&&s){let e=Q(o,10,20,30);e&&(s.vertices??=[]).push({...e,bulge:Z(o,42)}),o=[];return}if(e===`SEQEND`){s&&r.push(s),s=void 0,o=[];return}if(s&&=(r.push(s),void 0),!e||e===`EOF`){o=[];return}let t=To(e,o);e===`POLYLINE`?s=t:r.push(t),o=[]}}function To(e,t){let n={type:e,handle:Eo(t,5),layer:Eo(t,8)??`0`,colorIndex:Z(t,62),trueColor:Z(t,420),lineType:Eo(t,6),lineweight:Z(t,370)};switch(e){case`LINE`:Object.assign(n,{startPoint:Q(t,10,20,30),endPoint:Q(t,11,21,31)});break;case`CIRCLE`:Object.assign(n,{center:Q(t,10,20,30),radius:Z(t,40)});break;case`ARC`:Object.assign(n,{center:Q(t,10,20,30),radius:Z(t,40),startAngle:Ao(Z(t,50)),endAngle:Ao(Z(t,51))});break;case`POINT`:Object.assign(n,{point:Q(t,10,20,30)});break;case`TEXT`:case`MTEXT`:Object.assign(n,{insertionPoint:Q(t,10,20,30),text:ko(t),textHeight:Z(t,40),rotation:Ao(Z(t,50))});break;case`LWPOLYLINE`:Object.assign(n,{vertices:Oo(t),flag:Z(t,70),isClosed:(Number(Z(t,70)??0)&1)==1});break;case`POLYLINE`:Object.assign(n,{vertices:[],flag:Z(t,70),isClosed:(Number(Z(t,70)??0)&1)==1});break;case`ELLIPSE`:Object.assign(n,{center:Q(t,10,20,30),majorAxisEndPoint:Q(t,11,21,31),axisRatio:Z(t,40),startAngle:Z(t,41),endAngle:Z(t,42)});break;case`SPLINE`:Object.assign(n,{controlPoints:Do(t,10,20,30),degree:Z(t,71),isClosed:(Number(Z(t,70)??0)&1)==1});break;case`INSERT`:Object.assign(n,{name:Eo(t,2),blockName:Eo(t,2),insertionPoint:Q(t,10,20,30),rotation:Ao(Z(t,50)),scale:{x:Z(t,41)??1,y:Z(t,42)??Z(t,41)??1,z:Z(t,43)??1}});break;case`SOLID`:case`TRACE`:case`3DFACE`:Object.assign(n,{vertices:[Q(t,10,20,30),Q(t,11,21,31),Q(t,12,22,32),Q(t,13,23,33)].filter(Boolean)});break}return po(n)}function Z(e,t){let n=e.find(e=>e.code===t)?.value,r=Number(n);return Number.isFinite(r)?r:void 0}function Eo(e,t){let n=e.find(e=>e.code===t)?.value;return n&&n.length>0?n:void 0}function Q(e,t,n,r){let i=Z(e,t),a=Z(e,n),o=Z(e,r);if(!(i===void 0||a===void 0))return o===void 0?{x:i,y:a}:{x:i,y:a,z:o}}function Do(e,t,n,r){let i=[];for(let a=0;a<e.length;a++){if(e[a].code!==t)continue;let o=Number(e[a].value),s=e.slice(a+1).find(e=>e.code===n),c=e.slice(a+1).find(e=>e.code===r),l=Number(s?.value),u=Number(c?.value);Number.isFinite(o)&&Number.isFinite(l)&&i.push(Number.isFinite(u)?{x:o,y:l,z:u}:{x:o,y:l})}return i}function Oo(e){let t=[];for(let n=0;n<e.length;n++){if(e[n].code!==10)continue;let r=Number(e[n].value),i,a;for(let t=n+1;t<e.length&&e[t].code!==10;t++)e[t].code===20&&(i=Number(e[t].value)),e[t].code===42&&(a=Number(e[t].value));Number.isFinite(r)&&Number.isFinite(i)&&t.push({x:r,y:i,bulge:Number.isFinite(a)?a:void 0})}return t}function ko(e){let t=e.filter(e=>e.code===1||e.code===3).map(e=>e.value);return t.length?t.join(``):void 0}function Ao(e){return typeof e==`number`&&Number.isFinite(e)?ro(e):void 0}var jo=class{constructor(e={}){U(this,`id`,`dwf`),U(this,`label`,`DWF/DWFx native viewer powered by dwf-viewer`),U(this,`formats`,[`dwf`,`dwfx`,`xps`]),U(this,`nativeRenderer`,!0),U(this,`defaults`),U(this,`native`),U(this,`host`),U(this,`lastStats`),this.defaults=e}accepts(e,t){let n=Oa(e);if(n===`dwf`||n===`dwfx`||n===`xps`)return!0;let r=ka(e,t);return r===`dwf`||r===`dwfx`||r===`xps`}async load(e,t={}){var n,r,i;let a={...this.defaults,...t},o=performance.now(),s=e.fileName??e.file?.name,c=await Ea(e),l=Ro(ka(e,c),Oa(e));(n=a.onProgress)==null||n.call(a,{phase:`parse`,format:l,message:`Opening DWF/DWFx with dwf-viewer…`,percent:48});let u=await yr(c,{fileName:s});(r=a.onProgress)==null||r.call(a,{phase:`normalize`,format:l,message:`Reading DWF pages, sheets and model metadata…`,percent:76});let d=Mo(u,s,l,a.keepRaw===!0),f=performance.now()-o;return(i=a.onProgress)==null||i.call(a,{phase:`done`,format:d.format,message:`DWF/DWFx document ready.`,percent:100,elapsedMs:f}),{document:d,raw:a.keepRaw?u:void 0,bytes:c.byteLength,elapsedMs:f,format:d.format,warnings:d.warnings}}async mount(e,t,n={}){var r,i,a,o;let s={...this.defaults,...n},c=performance.now(),l=e.fileName??e.file?.name,u=await Ea(e),d=Ro(ka(e,u),Oa(e)),f=zo(s),p=Bo(s),m=Vo(s,f,p),h=Ho(s,f,p);(r=s.onProgress)==null||r.call(s,{phase:`native-render`,format:d,message:`Mounting native DWF renderer…`,percent:28}),this.unmount(),this.host=t,t.replaceChildren(),this.native=new xa(t,m),(i=s.onProgress)==null||i.call(s,{phase:`parse`,format:d,message:`Parsing DWF package and page streams…`,percent:58}),await this.native.load(u,{fileName:l,...h}),(a=s.onProgress)==null||a.call(s,{phase:`render`,format:d,message:`Rendering DWF/DWFx with dwf-viewer…`,percent:88}),this.lastStats=await this.native.render();let g=this.native.getDocument(),_=Mo(g,l,d,s.keepRaw===!0);_.metadata.loaderMode=`Native DWF`,_.metadata.nativeRenderer=`dwf-viewer`,_.metadata.nativeRenderStats=this.lastStats?{...this.lastStats,warnings:this.lastStats.warnings.length}:void 0;let v=performance.now()-c;return(o=s.onProgress)==null||o.call(s,{phase:`done`,format:_.format,message:`DWF/DWFx rendered.`,percent:100,elapsedMs:v}),{document:_,raw:s.keepRaw?g:void 0,bytes:u.byteLength,elapsedMs:v,format:_.format,warnings:_.warnings}}unmount(){var e;(e=this.native)==null||e.dispose(),this.native=void 0,this.lastStats=void 0,this.host&&this.host.replaceChildren()}fit(){var e;(e=this.native)==null||e.fit()}zoomIn(){(this.native?.zoomInButton)?.click()}zoomOut(){(this.native?.zoomOutButton)?.click()}resize(){var e;(e=this.native)==null||e.render()}setNativeOptions(e){var t,n,r,i;let a=this.native;if(a){if(typeof e.dwfBackground==`string`)a.background=e.dwfBackground;else{let t=Bo(e);t&&(a.background=t)}typeof e.dwfPreferWebgl==`boolean`&&((t=a.setPreferWebgl)==null||t.call(a,e.dwfPreferWebgl)),typeof e.dwfPreferWasm==`boolean`&&((n=a.setPreferWasm)==null||n.call(a,e.dwfPreferWasm)),e.dwfLineWeightMode&&((r=a.setLineWeightMode)==null||r.call(a,e.dwfLineWeightMode)),Uo(a,`minStrokeCssPx`,e.dwfMinStrokeCssPx),Uo(a,`maxOverviewStrokeCssPx`,e.dwfMaxOverviewStrokeCssPx),Uo(a,`minTextCssPx`,e.dwfMinTextCssPx),Uo(a,`minFilledAreaCssPx`,e.dwfMinFilledAreaCssPx),(i=a.render)==null||i.call(a)}}getLastNativeStats(){return this.lastStats}};function Mo(e,t,n,r){let i=Lo(e?.diagnostics??[]),a=(e?.pageData??[]).map((e,t)=>No(e,t));for(let t of e?.pageData??[])i.push(...Lo(t.diagnostics));let o={parser:`dwf-viewer`,nativeRenderer:`dwf-viewer`,dwfKind:e?.kind,packageEntries:e?.packageEntries?.length??0,resources:e?.resources?.length??0,pageKinds:qo((e?.pageData??[]).map(e=>e.kind)),pageNames:(e?.pages??[]).map(e=>e.name)};return Ka({format:n,sourceName:t,layers:{},blocks:{},pages:a,entities:$a(a),metadata:o,warnings:Jo(i),raw:r?e:void 0})}function No(e,t){let n=Po(e,t);return{index:t,name:e.name||e.sourcePath||`${t+1}`,width:e.width||1e3,height:e.height||1e3,entities:n}}function Po(e,t){return e.kind===`w2d-text`?e.primitives.flatMap((e,n)=>Fo(e,t,n)):e.kind===`image`?[{type:`DWF_IMAGE_PAGE`,kind:`image`,pageIndex:t,width:e.width,height:e.height,imageSource:e.sourcePath}]:e.kind===`w3d-model`?e.model.meshes.map((e,n)=>({id:e.id,type:`W3D_MESH`,kind:`solid`,pageIndex:t,color:e.color?Go(e.color):void 0,name:e.name||`mesh-${n+1}`,raw:{vertexCount:e.vertexCount,triangleCount:e.triangleCount,materialId:e.materialId}})):e.kind===`xps-fixed-page`?[{type:`XPS_FIXED_PAGE`,kind:`viewport`,pageIndex:t,width:e.width,height:e.height,raw:{sourcePath:e.sourcePath}}]:[{type:`DWF_PAGE`,kind:`viewport`,pageIndex:t,width:e.width,height:e.height,raw:{sourcePath:e.sourcePath}}]}function Fo(e,t,n){let r={id:`dwf-${t}-${n}`,pageIndex:t,color:e.stroke,fillColor:e.fill,lineweight:e.lineWidth,raw:{matrix:e.matrix}};if(e.type===`polyline`||e.type===`polygon`)return[{...r,type:e.type===`polygon`?`DWF_POLYGON`:`DWF_POLYLINE`,kind:`polyline`,vertices:Io(e.points),isClosed:e.type===`polygon`}];if(e.type===`path`)return[{...r,type:`DWF_PATH`,kind:`path`,commands:e.commands}];if(e.type===`text`)return[{...r,type:`DWF_TEXT`,kind:`text`,insertionPoint:{x:e.x,y:e.y,z:0},text:e.text,textHeight:e.size}];if(e.type===`rect`){let t=e.x,n=e.y,i=e.width,a=e.height;return[{...r,type:`DWF_RECT`,kind:`polyline`,isClosed:!0,vertices:[{x:t,y:n,z:0},{x:t+i,y:n,z:0},{x:t+i,y:n+a,z:0},{x:t,y:n+a,z:0}]}]}return[]}function Io(e){let t=[];for(let n=0;n+1<e.length;n+=2)t.push({x:e[n],y:e[n+1],z:0});return t}function Lo(e){return e.filter(e=>e.level!==`info`).map(e=>`${e.code}: ${e.message}${e.source?` (${e.source})`:``}`)}function Ro(e,t){return t===`dwf`||t===`dwfx`||t===`xps`?t:e===`dwf`||e===`dwfx`||e===`xps`?e:`dwf`}function zo(e){if(e.dwfWasmUrl)return e.dwfWasmUrl;if(typeof document>`u`)return;let t=e.wasmPath?new URL(Wo(e.wasmPath),document.baseURI).href:new URL(`wasm/`,document.baseURI).href;return new URL(`dwfv-render.wasm`,t).href}function Bo(e){return e.dwfBackground?e.dwfBackground:e.canvasOptions?.background??`#05070d`}function Vo(e,t,n){return{...Ho(e,t,n),maxDevicePixelRatio:e.dwfMaxDevicePixelRatio??2,maxCanvasPixels:e.dwfMaxCanvasPixels??16777216}}function Ho(e,t,n){return{wasmUrl:t,preferWebgl:e.dwfPreferWebgl??!0,preferWasm:e.dwfPreferWasm??!0,background:n,maxGpuCacheBytes:e.dwfMaxGpuCacheBytes??160*1024*1024,maxCachedScenes:e.dwfMaxCachedScenes??2,lineWeightMode:e.dwfLineWeightMode??`adaptive`,minStrokeCssPx:e.dwfMinStrokeCssPx,maxOverviewStrokeCssPx:e.dwfMaxOverviewStrokeCssPx,minTextCssPx:e.dwfMinTextCssPx,minFilledAreaCssPx:e.dwfMinFilledAreaCssPx}}function Uo(e,t,n){typeof n==`number`&&Number.isFinite(n)&&(e[t]=n)}function Wo(e){return e.endsWith(`/`)?e:`${e}/`}function Go(e){let[t,n,r]=e.map(e=>Math.max(0,Math.min(255,Math.round(e*255))));return`#${Ko(t)}${Ko(n)}${Ko(r)}`}function Ko(e){return e.toString(16).padStart(2,`0`)}function qo(e){let t={};for(let n of e)t[n]=(t[n]??0)+1;return t}function Jo(e){return Array.from(new Set(e))}function Yo(e={}){return new ja([new Ua(e),new lo(e),new jo(e)])}function Xo(e){let t=e;return t.nativeRenderer===!0&&typeof t.mount==`function`}var Zo={1:`#ff0000`,2:`#ffff00`,3:`#00ff00`,4:`#00ffff`,5:`#0000ff`,6:`#ff00ff`,8:`#808080`,9:`#c0c0c0`,10:`#ff0000`,11:`#ff7f7f`,12:`#a50000`,13:`#a55252`,14:`#7f0000`,15:`#7f3f3f`,16:`#4c0000`,17:`#4c2626`,18:`#260000`,19:`#261313`,20:`#ff3f00`,21:`#ff9f7f`,22:`#a52900`,23:`#a56752`,24:`#7f1f00`,25:`#7f4f3f`,26:`#4c1300`,27:`#4c2f26`,28:`#260900`,29:`#261713`,30:`#ff7f00`,31:`#ffbf7f`,32:`#a55200`,33:`#a57c52`,34:`#7f3f00`,35:`#7f5f3f`,36:`#4c2600`,37:`#4c3926`,38:`#261300`,39:`#261c13`,40:`#ffbf00`,41:`#ffdf7f`,42:`#a57c00`,43:`#a59152`,44:`#7f5f00`,45:`#7f6f3f`,46:`#4c3900`,47:`#4c4226`,48:`#261c00`,49:`#262113`,50:`#ffff00`,51:`#ffff7f`,52:`#a5a500`,53:`#a5a552`,54:`#7f7f00`,55:`#7f7f3f`,56:`#4c4c00`,57:`#4c4c26`,58:`#262600`,59:`#262613`,60:`#bfff00`,61:`#dfff7f`,62:`#7ca500`,63:`#91a552`,64:`#5f7f00`,65:`#6f7f3f`,66:`#394c00`,67:`#424c26`,68:`#1c2600`,69:`#212613`,70:`#7fff00`,71:`#bfff7f`,72:`#52a500`,73:`#7ca552`,74:`#3f7f00`,75:`#5f7f3f`,76:`#264c00`,77:`#394c26`,78:`#132600`,79:`#1c2613`,80:`#3fff00`,81:`#9fff7f`,82:`#29a500`,83:`#67a552`,84:`#1f7f00`,85:`#4f7f3f`,86:`#134c00`,87:`#2f4c26`,88:`#092600`,89:`#172613`,90:`#00ff00`,91:`#7fff7f`,92:`#00a500`,93:`#52a552`,94:`#007f00`,95:`#3f7f3f`,96:`#004c00`,97:`#264c26`,98:`#002600`,99:`#132613`,100:`#00ff3f`,101:`#7fff9f`,102:`#00a529`,103:`#52a567`,104:`#007f1f`,105:`#3f7f4f`,106:`#004c13`,107:`#264c2f`,108:`#002609`,109:`#132617`,110:`#00ff7f`,111:`#7fffbf`,112:`#00a552`,113:`#52a57c`,114:`#007f3f`,115:`#3f7f5f`,116:`#004c26`,117:`#264c39`,118:`#002613`,119:`#13261c`,120:`#00ffbf`,121:`#7fffdf`,122:`#00a57c`,123:`#52a591`,124:`#007f5f`,125:`#3f7f6f`,126:`#004c39`,127:`#264c42`,128:`#00261c`,129:`#132621`,130:`#00ffff`,131:`#7fffff`,132:`#00a5a5`,133:`#52a5a5`,134:`#007f7f`,135:`#3f7f7f`,136:`#004c4c`,137:`#264c4c`,138:`#002626`,139:`#132626`,140:`#00bfff`,141:`#7fdfff`,142:`#007ca5`,143:`#5291a5`,144:`#005f7f`,145:`#3f6f7f`,146:`#00394c`,147:`#26424c`,148:`#001c26`,149:`#132126`,150:`#007fff`,151:`#7fbfff`,152:`#0052a5`,153:`#527ca5`,154:`#003f7f`,155:`#3f5f7f`,156:`#00264c`,157:`#26394c`,158:`#001326`,159:`#131c26`,160:`#003fff`,161:`#7f9fff`,162:`#0029a5`,163:`#5267a5`,164:`#001f7f`,165:`#3f4f7f`,166:`#00134c`,167:`#262f4c`,168:`#000926`,169:`#131726`,170:`#0000ff`,171:`#7f7fff`,172:`#0000a5`,173:`#5252a5`,174:`#00007f`,175:`#3f3f7f`,176:`#00004c`,177:`#26264c`,178:`#000026`,179:`#131326`,180:`#3f00ff`,181:`#9f7fff`,182:`#2900a5`,183:`#6752a5`,184:`#1f007f`,185:`#4f3f7f`,186:`#13004c`,187:`#2f264c`,188:`#090026`,189:`#171326`,190:`#7f00ff`,191:`#bf7fff`,192:`#5200a5`,193:`#7c52a5`,194:`#3f007f`,195:`#5f3f7f`,196:`#26004c`,197:`#39264c`,198:`#130026`,199:`#1c1326`,200:`#bf00ff`,201:`#df7fff`,202:`#7c00a5`,203:`#9152a5`,204:`#5f007f`,205:`#6f3f7f`,206:`#39004c`,207:`#42264c`,208:`#1c0026`,209:`#211326`,210:`#ff00ff`,211:`#ff7fff`,212:`#a500a5`,213:`#a552a5`,214:`#7f007f`,215:`#7f3f7f`,216:`#4c004c`,217:`#4c264c`,218:`#260026`,219:`#261326`,220:`#ff00bf`,221:`#ff7fdf`,222:`#a5007c`,223:`#a55291`,224:`#7f005f`,225:`#7f3f6f`,226:`#4c0039`,227:`#4c2642`,228:`#26001c`,229:`#261321`,230:`#ff007f`,231:`#ff7fbf`,232:`#a50052`,233:`#a5527c`,234:`#7f003f`,235:`#7f3f5f`,236:`#4c0026`,237:`#4c2639`,238:`#260013`,239:`#26131c`,240:`#ff003f`,241:`#ff7f9f`,242:`#a50029`,243:`#a55267`,244:`#7f001f`,245:`#7f3f4f`,246:`#4c0013`,247:`#4c262f`,248:`#260009`,249:`#261317`,250:`#333333`,251:`#505050`,252:`#696969`,253:`#828282`,254:`#bebebe`,255:`#ffffff`};function Qo(e,t=`#ffffff`,n=t){if(typeof e!=`number`||Number.isNaN(e))return t;let r=Math.abs(Math.trunc(e));return r===0||r===256||r===257?t:r===7?n:Zo[r]??t}function $o(e,t=`rgb`){let n=Math.max(0,Math.trunc(e))&16777215,r=n>>16&255,i=n>>8&255,a=n&255;return`rgb(${t===`rgb`?r:a}, ${i}, ${t===`rgb`?a:r})`}function es(e){if(typeof e==`string`){let t=e.trim();return t?/^(#|rgb\(|rgba\(|hsl\(|hsla\()/i.test(t)?ts(t)??t:{red:`#ff0000`,yellow:`#ffff00`,green:`#00ff00`,cyan:`#00ffff`,blue:`#0000ff`,magenta:`#ff00ff`,white:`#ffffff`,black:`#000000`,grey:`#808080`,gray:`#808080`}[t.toLowerCase()]:void 0}if(e&&typeof e==`object`){let t=e,n=Number(t.r??t.red),r=Number(t.g??t.green),i=Number(t.b??t.blue),a=Number(t.a??t.alpha??1);if([n,r,i].every(Number.isFinite))return Number.isFinite(a)&&a>=0&&a<1?`rgba(${n}, ${r}, ${i}, ${a})`:`rgb(${n}, ${r}, ${i})`}}function ts(e){if(!e)return;let t=e.trim();if(/^#[0-9a-f]{8}$/i.test(t)){let e=parseInt(t.slice(1,3),16)/255,n=parseInt(t.slice(3,5),16),r=parseInt(t.slice(5,7),16),i=parseInt(t.slice(7,9),16);return e>=.999?`rgb(${n}, ${r}, ${i})`:`rgba(${n}, ${r}, ${i}, ${xs(e)})`}if(/^#[0-9a-f]{6}$/i.test(t)||/^#[0-9a-f]{3}$/i.test(t))return t;if(/^sc#/i.test(t)){let e=t.slice(3).split(`,`).map(e=>Number(e.trim())),[n,r,i,a]=e.length===4?e:[1,...e];if([n,r,i,a].every(Number.isFinite))return`rgba(${Math.round(r*255)}, ${Math.round(i*255)}, ${Math.round(a*255)}, ${xs(n)})`}}function ns(e,t,n={}){let r=n.foreground??`#ffffff`,i=r,a,o=es(e.trueColor)??es(e.color)??es(e.colorName);if(o&&(a=o),!a){let t=ps(e,[`trueColor`,`true_color`,`truecolor`,`colorRGB`,`colorRgb`,`rgbColor`,`rgb`]);typeof t==`number`&&t>=0&&t<=16777215&&(a=$o(t,n.trueColorByteOrder??`rgb`))}if(!a){let t=fs(e.colorIndex,e.colorNumber,e.aci);typeof t==`number`&&Math.abs(t)<=257&&t!==256&&t!==0&&t!==257&&(a=Qo(t,i,r))}if(!a&&typeof e.color==`number`){let t=Number(e.color);Math.abs(t)<=257?t!==0&&t!==256&&t!==257&&(a=Qo(t,i,r)):a=$o(t,n.trueColorByteOrder??`rgb`)}return a||=ss(ds(t,e.layer),n),is(a??i,n)}function rs(e,t,n={}){let r,i=es(e.fillColor);if(i&&(r=i),!r&&typeof e.fillColor==`number`){let t=e.fillColor;r=Math.abs(t)<=257?Qo(t,n.foreground??`#ffffff`,n.foreground??`#ffffff`):$o(t,n.trueColorByteOrder??`rgb`)}return!r&&typeof e.fillColorIndex==`number`&&(r=Qo(e.fillColorIndex,n.foreground??`#ffffff`,n.foreground??`#ffffff`)),r?is(r,n):void 0}function is(e,t={}){return t.contrastMode===`adaptive`?as(e,t.background??`#0b1020`,t.foreground??`#ffffff`,t.minColorContrast??2.4):e}function as(e,t,n,r=2.4){let i=ms(n)??{r:255,g:255,b:255,a:1},a=ms(t)??{r:11,g:16,b:32,a:1},o=ms(e);if(!o||vs(hs(o,a),a)>=r)return e;let s=_s(a),c=s<.5?{r:255,g:255,b:255,a:o.a}:{r:0,g:0,b:0,a:o.a};for(let e of[.25,.4,.55,.7,.85,1]){let t=gs(o,c,e);if(vs(hs(t,a),a)>=r)return ys(t)}return vs(i,a)>=r?ys(i):s<.5?`#ffffff`:`#000000`}function os(e){return e?e.isVisible!==!1&&e.isFrozen!==!0:!0}function ss(e,t){if(!e)return;let n=t.foreground??`#ffffff`,r=es(e.trueColor);if(r)return r;if(typeof e.trueColor==`number`&&e.trueColor>=0&&e.trueColor<=16777215)return $o(e.trueColor,t.trueColorByteOrder??`rgb`);let i=es(e.color);if(i)return i;if(us(e.colorIndex))return Qo(e.colorIndex,n,n);if(typeof e.color==`number`){let r=Number(e.color);return Math.abs(r)<=257?Qo(r,n,n):$o(r,t.trueColorByteOrder??`rgb`)}if(typeof e.colorIndex==`number`)return Qo(e.colorIndex,n,n)}function cs(e){return fs(e.colorIndex,e.colorNumber,e.aci)===0?!0:e.trueColor===void 0&&e.color===0}function ls(e,t,n,r={}){if(!cs(e))return e;let i=ns(t,n,r);return{...e,color:i,trueColor:void 0,colorIndex:void 0,colorNumber:void 0}}function us(e){return typeof e==`number`&&Number.isFinite(e)&&Math.abs(Math.trunc(e))>=1&&Math.abs(Math.trunc(e))<=255}function ds(e,t){if(!(!e||!t))return e.layers[t]??e.layers[t.toLowerCase()]??Object.values(e.layers).find(e=>e.name.toLowerCase()===t.toLowerCase())}function fs(...e){for(let t of e)if(typeof t==`number`&&Number.isFinite(t))return t}function ps(e,t){let n=e;for(let e of t){let t=n[e];if(typeof t==`number`&&Number.isFinite(t))return t}}function ms(e){let t=e.trim().toLowerCase();if(/^#[0-9a-f]{3}$/i.test(t))return{r:parseInt(t[1]+t[1],16),g:parseInt(t[2]+t[2],16),b:parseInt(t[3]+t[3],16),a:1};if(/^#[0-9a-f]{6}$/i.test(t))return{r:parseInt(t.slice(1,3),16),g:parseInt(t.slice(3,5),16),b:parseInt(t.slice(5,7),16),a:1};let n=t.match(/^rgba?\(([^)]+)\)$/i);if(n){let e=n[1].split(/[,\s/]+/).filter(Boolean).map(e=>Number(e.replace(`%`,``)));if(e.length>=3&&e.slice(0,3).every(Number.isFinite)){let t=/%/.test(n[1]);return{r:bs(t?e[0]*2.55:e[0]),g:bs(t?e[1]*2.55:e[1]),b:bs(t?e[2]*2.55:e[2]),a:Number.isFinite(e[3])?Math.max(0,Math.min(1,e[3])):1}}}}function hs(e,t){let n=e.a+t.a*(1-e.a);return n<=0?{r:0,g:0,b:0,a:0}:{r:(e.r*e.a+t.r*t.a*(1-e.a))/n,g:(e.g*e.a+t.g*t.a*(1-e.a))/n,b:(e.b*e.a+t.b*t.a*(1-e.a))/n,a:n}}function gs(e,t,n){let r=Math.max(0,Math.min(1,n));return{r:e.r+(t.r-e.r)*r,g:e.g+(t.g-e.g)*r,b:e.b+(t.b-e.b)*r,a:e.a}}function _s(e){let t=[e.r,e.g,e.b].map(e=>{let t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4});return .2126*t[0]+.7152*t[1]+.0722*t[2]}function vs(e,t){let n=_s(e),r=_s(t),i=Math.max(n,r),a=Math.min(n,r);return(i+.05)/(a+.05)}function ys(e){let t=bs(e.r),n=bs(e.g),r=bs(e.b);return e.a<.999?`rgba(${t}, ${n}, ${r}, ${xs(e.a)})`:`rgb(${t}, ${n}, ${r})`}function bs(e){return Math.max(0,Math.min(255,Math.round(e)))}function xs(e){return Math.round(e*1e3)/1e3}function Ss(e,t){return{a:e.a*t.a+e.c*t.b,b:e.b*t.a+e.d*t.b,c:e.a*t.c+e.c*t.d,d:e.b*t.c+e.d*t.d,e:e.a*t.e+e.c*t.f+e.e,f:e.b*t.e+e.d*t.f+e.f}}function Cs(e,t){return{a:1,b:0,c:0,d:1,e,f:t}}function ws(e){let t=Math.cos(e),n=Math.sin(e);return{a:t,b:n,c:-n,d:t,e:0,f:0}}function Ts(e,t=e){return{a:e,b:0,c:0,d:t,e:0,f:0}}function $(e,t){return{x:e.x*t.a+e.y*t.c+t.e,y:e.x*t.b+e.y*t.d+t.f,z:`z`in e?e.z:void 0}}function Es(e,t){if(e)return e.map(e=>({cmd:e.cmd,points:e.points.map(e=>$(e,t))}))}function Ds(e,t={x:0,y:0}){let n=e.insertionPoint??{x:0,y:0},r=e.scale,i=Number(typeof r==`object`&&r?r.x??1:e.scaleX??1),a=Number(typeof r==`object`&&r?r.y??i:e.scaleY??i),o=Number(e.rotation??0),s=Cs(n.x,n.y);return s=Ss(s,ws(Number.isFinite(o)?o:0)),s=Ss(s,Ts(Number.isFinite(i)?i:1,Number.isFinite(a)?a:1)),s=Ss(s,Cs(-t.x,-t.y)),s}function Os(e,t){let n={...e,raw:e.raw??e};if(e.startPoint&&(n.startPoint=$(e.startPoint,t)),e.endPoint&&(n.endPoint=$(e.endPoint,t)),e.center&&(n.center=$(e.center,t)),e.insertionPoint&&(n.insertionPoint=$(e.insertionPoint,t)),e.majorAxisEndPoint){let r=$({x:0,y:0},t),i=$(e.majorAxisEndPoint,t);n.majorAxisEndPoint={x:i.x-r.x,y:i.y-r.y,z:i.z}}e.vertices&&(n.vertices=e.vertices.map(e=>({...$(e,t),bulge:e.bulge,startWidth:e.startWidth,endWidth:e.endWidth}))),e.points&&(n.points=e.points.map(e=>$(e,t))),e.controlPoints&&(n.controlPoints=e.controlPoints.map(e=>$(e,t))),e.fitPoints&&(n.fitPoints=e.fitPoints.map(e=>$(e,t))),e.commands&&(n.commands=Es(e.commands,t)),e.loops&&(n.loops=e.loops.map(e=>({...e,vertices:e.vertices?.map(e=>$(e,t)),commands:Es(e.commands,t)})));let r=Math.sqrt(Math.abs(t.a*t.d-t.b*t.c));return typeof e.radius==`number`&&Number.isFinite(r)&&(n.radius=e.radius*r),n}var ks={background:`#0b1020`,foreground:`#ffffff`,showUnsupportedMarkers:!1,showImagePlaceholders:!0,showPageBounds:!0,minScale:1e-9,maxScale:1e9,wheelZoomFactor:1.14,trueColorByteOrder:`rgb`,maxInsertDepth:16,contrastMode:`adaptive`,minColorContrast:2.4,maxCurveSegments:96,spatialIndexCellCount:72,maxVerticesPerBatch:65536,textMinPixelHeight:4,maxVisibleTextLabels:2500,powerPreference:`high-performance`,antialias:!0,preserveDrawingBuffer:!1,enableSpatialIndex:!0},As=class{constructor(e,t={}){U(this,`canvas`),U(this,`ctx`),U(this,`opts`),U(this,`document`),U(this,`bounds`,q()),U(this,`view`,{centerX:0,centerY:0,scale:1}),U(this,`fitScale`,1),U(this,`dpr`,1),U(this,`isDragging`,!1),U(this,`lastPointer`),U(this,`resizeObserver`),U(this,`imageCache`,new Map),U(this,`stats`,{total:0,drawn:0,skipped:0,byType:{},unsupported:{},renderElapsedMs:0,backend:`canvas2d`}),U(this,`onStats`),U(this,`onViewChange`);let n=e.getContext(`2d`);if(!n)throw Error(`Canvas 2D context is not available.`);this.canvas=e,this.ctx=n,this.opts={...ks,...t},this.canvas.classList.add(`cad-viewer-canvas`),this.bindEvents(),typeof ResizeObserver<`u`&&(this.resizeObserver=new ResizeObserver(()=>this.resize()),this.resizeObserver.observe(e)),this.resize()}destroy(){var e;(e=this.resizeObserver)==null||e.disconnect()}clear(){this.document=void 0,this.bounds=q(),this.view={centerX:0,centerY:0,scale:1},this.fitScale=1,this.render(),this.emitViewChange()}setDocument(e){this.document=e,this.bounds=this.computeBounds(e),this.fitToView()}getDocument(){return this.document}setOptions(e){Object.assign(this.opts,e),this.render(),this.emitViewChange()}getOptions(){return{...this.opts}}fitToView(e=.92){if(!eo(this.bounds)){this.view={centerX:0,centerY:0,scale:1},this.fitScale=1,this.render(),this.emitViewChange();return}let t=Math.max(1,this.cssWidth),n=Math.max(1,this.cssHeight),r=Math.max(this.bounds.maxX-this.bounds.minX,1e-9),i=Math.max(this.bounds.maxY-this.bounds.minY,1e-9),a=this.clampScale(Math.min(t/r,n/i)*e);this.fitScale=a,this.view={centerX:(this.bounds.minX+this.bounds.maxX)/2,centerY:(this.bounds.minY+this.bounds.maxY)/2,scale:a},this.render(),this.emitViewChange()}resize(){this.dpr=Math.max(1,window.devicePixelRatio||1);let e=Math.max(1,Math.floor(this.cssWidth*this.dpr)),t=Math.max(1,Math.floor(this.cssHeight*this.dpr));(this.canvas.width!==e||this.canvas.height!==t)&&(this.canvas.width=e,this.canvas.height=t),this.render(),this.emitViewChange()}zoom(e,t){if(!Number.isFinite(e)||e<=0)return;let n=t??{x:this.cssWidth/2,y:this.cssHeight/2},r=this.screenToWorld(n);this.view.scale=this.clampScale(this.view.scale*e);let i=this.screenToWorld(n);this.view.centerX+=r.x-i.x,this.view.centerY+=r.y-i.y,this.render(),this.emitViewChange()}zoomIn(){this.zoom(this.opts.wheelZoomFactor)}zoomOut(){this.zoom(1/this.opts.wheelZoomFactor)}panByScreenDelta(e,t){!Number.isFinite(e)||!Number.isFinite(t)||(this.view.centerX-=e/this.view.scale,this.view.centerY+=t/this.view.scale,this.render(),this.emitViewChange())}setViewState(e){if(![e.centerX,e.centerY,e.scale].every(Number.isFinite))throw Error(`Invalid view state.`);this.view={...e,scale:this.clampScale(e.scale)},this.render(),this.emitViewChange()}getViewState(){return{...this.view}}getBounds(){return{...this.bounds}}getStats(){return js(this.stats)}getZoomRatio(){return Math.abs(this.fitScale)<1e-12?1:this.view.scale/this.fitScale}getZoomPercent(){return this.getZoomRatio()*100}worldToScreen(e){return{x:this.cssWidth/2+(e.x-this.view.centerX)*this.view.scale,y:this.cssHeight/2-(e.y-this.view.centerY)*this.view.scale}}screenToWorld(e){return{x:this.view.centerX+(e.x-this.cssWidth/2)/this.view.scale,y:this.view.centerY-(e.y-this.cssHeight/2)/this.view.scale}}render(){var e,t;let n=performance.now();if(this.stats={total:0,drawn:0,skipped:0,byType:{},unsupported:{},renderElapsedMs:0,backend:`canvas2d`},this.clearCanvas(),this.document){this.opts.showPageBounds&&(e=this.document.pages)!=null&&e.length&&this.drawPageBounds(this.document);for(let e of this.document.entities)this.drawEntityTracked(e,0)}return this.stats.renderElapsedMs=performance.now()-n,(t=this.onStats)==null||t.call(this,this.getStats()),this.getStats()}get cssWidth(){return this.canvas.clientWidth||1}get cssHeight(){return this.canvas.clientHeight||1}bindEvents(){this.canvas.addEventListener(`wheel`,e=>{e.preventDefault();let t=e.deltaY<0?this.opts.wheelZoomFactor:1/this.opts.wheelZoomFactor;this.zoom(t,{x:e.offsetX,y:e.offsetY})},{passive:!1}),this.canvas.addEventListener(`pointerdown`,e=>{this.canvas.setPointerCapture(e.pointerId),this.isDragging=!0,this.lastPointer={x:e.clientX,y:e.clientY},this.canvas.classList.add(`is-dragging`)}),this.canvas.addEventListener(`pointermove`,e=>{!this.isDragging||!this.lastPointer||(this.panByScreenDelta(e.clientX-this.lastPointer.x,e.clientY-this.lastPointer.y),this.lastPointer={x:e.clientX,y:e.clientY})});let e=e=>{e&&this.canvas.hasPointerCapture(e.pointerId)&&this.canvas.releasePointerCapture(e.pointerId),this.isDragging=!1,this.lastPointer=void 0,this.canvas.classList.remove(`is-dragging`)};this.canvas.addEventListener(`pointerup`,e),this.canvas.addEventListener(`pointercancel`,()=>e())}clearCanvas(){let e=this.ctx;e.save(),e.setTransform(this.dpr,0,0,this.dpr,0,0),e.clearRect(0,0,this.cssWidth,this.cssHeight),e.fillStyle=this.opts.background,e.fillRect(0,0,this.cssWidth,this.cssHeight),e.restore()}drawPageBounds(e){let t=this.ctx;t.save(),t.setTransform(this.dpr,0,0,this.dpr,0,0),t.strokeStyle=`rgba(148, 163, 184, 0.35)`,t.lineWidth=1,t.setLineDash([8,6]);for(let n of e.pages??[]){let e=this.worldToScreen({x:0,y:0}),r=this.worldToScreen({x:n.width,y:n.height});t.strokeRect(Math.min(e.x,r.x),Math.min(e.y,r.y),Math.abs(r.x-e.x),Math.abs(r.y-e.y))}t.restore()}drawEntityTracked(e,t){this.stats.total++;let n=String(e.type??`UNKNOWN`).toUpperCase();this.stats.byType[n]=(this.stats.byType[n]??0)+1;let r=this.lookupLayer(e.layer);if(e.isVisible===!1||!os(r)){this.stats.skipped++;return}this.drawEntity(e,n,t)}drawEntity(e,t,n){switch(e.kind??qa(t)){case`line`:return this.drawLine(e);case`circle`:return this.drawCircle(e);case`arc`:return this.drawArc(e);case`polyline`:return this.drawPolyline(e);case`ellipse`:return this.drawEllipse(e);case`text`:return this.drawText(e);case`point`:return this.drawPoint(e);case`insert`:return this.drawInsert(e,n);case`solid`:return this.drawSolid(e);case`hatch`:return this.drawHatch(e);case`spline`:return this.drawSpline(e);case`path`:return this.drawPath(e);case`image`:return this.drawImage(e);case`viewport`:return this.markSkipped(t);default:this.stats.unsupported[t]=(this.stats.unsupported[t]??0)+1,this.stats.skipped++,this.opts.showUnsupportedMarkers&&this.drawUnsupportedMarker(e)}}beginStyledPath(e,t=!1){let n=this.ctx;n.save(),n.setTransform(this.dpr,0,0,this.dpr,0,0);let r=ns(e,this.document,{foreground:this.opts.foreground,background:this.opts.background,trueColorByteOrder:this.opts.trueColorByteOrder,contrastMode:this.opts.contrastMode,minColorContrast:this.opts.minColorContrast}),i=rs(e,this.document,{foreground:this.opts.foreground,background:this.opts.background,trueColorByteOrder:this.opts.trueColorByteOrder,contrastMode:this.opts.contrastMode,minColorContrast:this.opts.minColorContrast})??r;n.strokeStyle=r,n.fillStyle=t?i:r,n.globalAlpha=co(Number(e.opacity??1),0,1),n.lineCap=`round`,n.lineJoin=`round`;let a=typeof e.lineweight==`number`&&e.lineweight>0?e.lineweight:0;n.lineWidth=Math.max(1,Math.min(12,a>0?a/30:1)),n.beginPath()}finishStroke(){this.ctx.stroke(),this.ctx.restore(),this.stats.drawn++}finishFillStroke(e=!1){e&&this.ctx.fill(),this.ctx.stroke(),this.ctx.restore(),this.stats.drawn++}drawLine(e){let t=e.startPoint,n=e.endPoint;if(!Y(t)||!Y(n))return this.markSkipped(`LINE`);let r=this.worldToScreen(t),i=this.worldToScreen(n);this.beginStyledPath(e),this.ctx.moveTo(r.x,r.y),this.ctx.lineTo(i.x,i.y),this.finishStroke()}drawCircle(e){let t=e.center,n=Number(e.radius);if(!Y(t)||!Number.isFinite(n))return this.markSkipped(`CIRCLE`);let r=this.worldToScreen(t);this.beginStyledPath(e),this.ctx.arc(r.x,r.y,Math.abs(n)*this.view.scale,0,Math.PI*2),this.finishStroke()}drawArc(e){let t=e.center,n=Number(e.radius),r=Number(e.startAngle),i=Number(e.endAngle);if(!Y(t)||!Number.isFinite(n)||!Number.isFinite(r)||!Number.isFinite(i))return this.markSkipped(`ARC`);this.strokeWorldPolyline(e,io(X(t),n,r,i,!0),!1)}drawPolyline(e){let t=e.vertices??e.points;if(!Array.isArray(t)||t.length<2)return this.markSkipped(String(e.type));let n=!!e.isClosed||(Number(e.flag)&1)==1,r=[],i=n?t.length:t.length-1;for(let e=0;e<i;e++){let n=t[e],i=t[(e+1)%t.length];if(!Y(n)||!Y(i))continue;let a=oo(n,i,Number(n.bulge??0));r.length>0&&a.shift(),r.push(...a)}this.strokeWorldPolyline(e,r,n)}drawEllipse(e){let t=e.center,n=e.majorAxisEndPoint,r=Number(e.axisRatio??1);if(!Y(t)||!Y(n))return this.markSkipped(`ELLIPSE`);let i=ao(t,n,r,Number(e.startAngle??0),Number(e.endAngle??Math.PI*2)),a=Math.abs(Number(e.endAngle??Math.PI*2)-Number(e.startAngle??0))>=Math.PI*2-1e-6;this.strokeWorldPolyline(e,i,a)}drawPoint(e){let t=e.point??e.location??e.center??e.insertionPoint;if(!Y(t))return this.markSkipped(`POINT`);let n=this.worldToScreen(t);this.beginStyledPath(e),this.ctx.moveTo(n.x-3,n.y),this.ctx.lineTo(n.x+3,n.y),this.ctx.moveTo(n.x,n.y-3),this.ctx.lineTo(n.x,n.y+3),this.finishStroke()}drawText(e){let t=e.insertionPoint??e.startPoint??e.center,n=so(String(e.text??e.value??``)),r=Number(e.textHeight??e.height??1);if(!Y(t)||!n)return this.markSkipped(String(e.type));this.drawTextAt(e,t,n,r,Number(e.rotation??0))}drawInsert(e,t){let n=this.lookupBlock(e.blockName??e.name);if(n&&t<this.opts.maxInsertDepth){let r=Ds(e,n.basePoint??{x:0,y:0});for(let i of n.entities){let n=ls(i,e,this.document,{foreground:this.opts.foreground,background:this.opts.background,trueColorByteOrder:this.opts.trueColorByteOrder,contrastMode:this.opts.contrastMode,minColorContrast:this.opts.minColorContrast});this.drawEntityTracked(Os(n,r),t+1)}return}let r=e.insertionPoint;if(!Y(r))return this.markSkipped(`INSERT`);let i=this.worldToScreen(r);if(this.beginStyledPath(e),this.ctx.rect(i.x-5,i.y-5,10,10),this.finishStroke(),Array.isArray(e.attribs))for(let t of e.attribs)this.drawText(t)}drawSolid(e){let t=e.vertices??e.points;if(!Array.isArray(t)||t.length<3)return this.markSkipped(String(e.type));this.beginStyledPath(e,!0);let n=this.worldToScreen(t[0]);this.ctx.moveTo(n.x,n.y);for(let e of t.slice(1)){if(!Y(e))continue;let t=this.worldToScreen(e);this.ctx.lineTo(t.x,t.y)}this.ctx.closePath(),this.finishFillStroke(!0)}drawHatch(e){var t,n;let r=e.loops;if(!Array.isArray(r)||r.length===0)return this.markSkipped(`HATCH`);this.beginStyledPath(e,!0);for(let e of r)if((t=e.commands)!=null&&t.length)this.addPathCommands(e.commands);else if((n=e.vertices)!=null&&n.length){let t=this.worldToScreen(e.vertices[0]);this.ctx.moveTo(t.x,t.y);for(let t of e.vertices.slice(1)){let e=this.worldToScreen(t);this.ctx.lineTo(e.x,e.y)}this.ctx.closePath()}this.finishFillStroke(!!rs(e,this.document,{foreground:this.opts.foreground,background:this.opts.background,trueColorByteOrder:this.opts.trueColorByteOrder,contrastMode:this.opts.contrastMode,minColorContrast:this.opts.minColorContrast}))}drawSpline(e){var t;let n=(t=e.fitPoints)!=null&&t.length?e.fitPoints:e.controlPoints;if(!n||n.length<2)return this.markSkipped(`SPLINE`);this.strokeWorldPolyline(e,n,!!e.isClosed)}drawPath(e){var t;if(!((t=e.commands)!=null&&t.length))return this.markSkipped(String(e.type));this.beginStyledPath(e,!!e.fillColor),this.addPathCommands(e.commands),this.finishFillStroke(!!e.fillColor)}addPathCommands(e){for(let t of e)if(t.cmd===`M`){let e=this.worldToScreen(t.points[0]);this.ctx.moveTo(e.x,e.y)}else if(t.cmd===`L`){let e=this.worldToScreen(t.points[0]);this.ctx.lineTo(e.x,e.y)}else if(t.cmd===`C`){let[e,n,r]=t.points.map(e=>this.worldToScreen(e));this.ctx.bezierCurveTo(e.x,e.y,n.x,n.y,r.x,r.y)}else if(t.cmd===`Q`){let[e,n]=t.points.map(e=>this.worldToScreen(e));this.ctx.quadraticCurveTo(e.x,e.y,n.x,n.y)}else t.cmd===`Z`&&this.ctx.closePath()}drawImage(e){let t=e.insertionPoint;if(!Y(t))return this.markSkipped(String(e.type));let n=Number(e.width??32),r=Number(e.height??32),i=this.worldToScreen(t),a=this.worldToScreen({x:t.x+n,y:t.y-r}),o=Math.min(i.x,a.x),s=Math.min(i.y,a.y),c=Math.abs(a.x-i.x),l=Math.abs(a.y-i.y),u=e.imageDataUrl;if(u){let e=this.getImage(u);if(e.complete&&e.naturalWidth>0){this.ctx.save(),this.ctx.setTransform(this.dpr,0,0,this.dpr,0,0),this.ctx.drawImage(e,o,s,c,l),this.ctx.restore(),this.stats.drawn++;return}e.onload=()=>this.render()}if(!this.opts.showImagePlaceholders)return this.markSkipped(String(e.type));this.beginStyledPath(e),this.ctx.rect(o,s,c,l),this.ctx.moveTo(o,s),this.ctx.lineTo(o+c,s+l),this.ctx.moveTo(o+c,s),this.ctx.lineTo(o,s+l),this.finishStroke()}getImage(e){let t=this.imageCache.get(e);return t||(t=new Image,t.src=e,this.imageCache.set(e,t)),t}drawUnsupportedMarker(e){let t=this.entityAnchor(e);if(!t)return;let n=this.worldToScreen(t);this.beginStyledPath(e),this.ctx.moveTo(n.x-4,n.y-4),this.ctx.lineTo(n.x+4,n.y+4),this.ctx.moveTo(n.x+4,n.y-4),this.ctx.lineTo(n.x-4,n.y+4),this.finishStroke()}drawTextAt(e,t,n,r,i){let a=this.ctx,o=this.worldToScreen(t);a.save(),a.setTransform(this.dpr,0,0,this.dpr,0,0),a.translate(o.x,o.y),a.rotate(-i);let s=Math.max(4,Math.min(256,Math.abs(r)*this.view.scale));a.font=`${s}px ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif`,a.fillStyle=ns(e,this.document,{foreground:this.opts.foreground,background:this.opts.background,trueColorByteOrder:this.opts.trueColorByteOrder,contrastMode:this.opts.contrastMode,minColorContrast:this.opts.minColorContrast}),a.globalAlpha=co(Number(e.opacity??1),0,1),a.textBaseline=`alphabetic`;for(let[e,t]of n.split(/\r?\n/g).entries())a.fillText(t,0,e*s*1.22);a.restore(),this.stats.drawn++}strokeWorldPolyline(e,t,n){let r=t.filter(Y);if(r.length<2)return this.markSkipped(String(e.type));this.beginStyledPath(e);let i=this.worldToScreen(r[0]);this.ctx.moveTo(i.x,i.y);for(let e of r.slice(1)){let t=this.worldToScreen(e);this.ctx.lineTo(t.x,t.y)}n&&this.ctx.closePath(),this.finishStroke()}markSkipped(e){this.stats.skipped++,this.stats.unsupported[e]=this.stats.unsupported[e]??0}entityAnchor(e){for(let t of[`startPoint`,`insertionPoint`,`center`,`point`,`location`]){let n=e[t];if(Y(n))return X(n)}if(Array.isArray(e.vertices)&&Y(e.vertices[0]))return X(e.vertices[0]);if(Array.isArray(e.commands)&&e.commands.length){let t=e.commands.find(e=>e.points.length>0);if(t)return X(t.points[0])}}computeBounds(e){var t;let n=q();if((t=e.pages)!=null&&t.length)for(let t of e.pages)J(n,{x:0,y:0}),J(n,{x:t.width,y:t.height});for(let t of e.entities)this.includeEntityBounds(n,t,0);return no(n)}includeEntityBounds(e,t,n){let r=String(t.type??``).toUpperCase(),i=t.kind??qa(r);if(i===`insert`){let r=this.lookupBlock(t.blockName??t.name);if(r&&n<this.opts.maxInsertDepth){let i=Ds(t,r.basePoint??{x:0,y:0});for(let t of r.entities)this.includeEntityBounds(e,Os(t,i),n+1);return}}if(i===`line`)Y(t.startPoint)&&J(e,t.startPoint),Y(t.endPoint)&&J(e,t.endPoint);else if(i===`circle`||i===`arc`)Y(t.center)&&Number.isFinite(t.radius)&&to(e,t.center,Number(t.radius));else if(i===`polyline`||i===`solid`||i===`spline`)for(let n of[...t.vertices??[],...t.points??[],...t.controlPoints??[],...t.fitPoints??[]])Y(n)&&J(e,n);else if(i===`ellipse`)Y(t.center)&&Y(t.majorAxisEndPoint)&&ao(t.center,t.majorAxisEndPoint,Number(t.axisRatio??1),Number(t.startAngle??0),Number(t.endAngle??Math.PI*2)).forEach(t=>J(e,t));else if(i===`path`)for(let n of t.commands??[])for(let t of n.points)J(e,t);else if(i===`hatch`)for(let n of t.loops??[]){for(let t of n.vertices??[])J(e,t);for(let t of n.commands??[])for(let n of t.points)J(e,n)}else{let n=this.entityAnchor(t);n&&J(e,n)}}lookupLayer(e){if(!(!this.document||!e))return this.document.layers[e]??this.document.layers[e.toLowerCase()]??Object.values(this.document.layers).find(t=>t.name.toLowerCase()===e.toLowerCase())}lookupBlock(e){if(!(!this.document||!e))return this.document.blocks[e]??this.document.blocks[e.toLowerCase()]??Object.values(this.document.blocks).find(t=>t.name.toLowerCase()===e.toLowerCase())}clampScale(e){return Math.min(this.opts.maxScale,Math.max(this.opts.minScale,e))}emitViewChange(){var e;(e=this.onViewChange)==null||e.call(this,{view:this.getViewState(),fitScale:this.fitScale,zoomRatio:this.getZoomRatio(),zoomPercent:this.getZoomPercent(),bounds:this.getBounds()})}};function js(e){return{total:e.total,drawn:e.drawn,skipped:e.skipped,byType:{...e.byType},unsupported:{...e.unsupported},renderElapsedMs:e.renderElapsedMs,backend:e.backend,primitiveCount:e.primitiveCount,visiblePrimitiveCount:e.visiblePrimitiveCount,culledPrimitiveCount:e.culledPrimitiveCount,gpuMemoryBytes:e.gpuMemoryBytes,buildElapsedMs:e.buildElapsedMs}}var Ms={background:`#0b1020`,foreground:`#ffffff`,showUnsupportedMarkers:!1,showImagePlaceholders:!0,showPageBounds:!0,minScale:1e-9,maxScale:1e9,wheelZoomFactor:1.14,trueColorByteOrder:`rgb`,maxInsertDepth:16,contrastMode:`adaptive`,minColorContrast:2.4,maxCurveSegments:96,spatialIndexCellCount:72,maxVerticesPerBatch:65536,textMinPixelHeight:4,maxVisibleTextLabels:2500,powerPreference:`high-performance`,antialias:!0,preserveDrawingBuffer:!1,enableSpatialIndex:!0},Ns=class{constructor(e,t={}){U(this,`canvas`),U(this,`backend`,`webgl`),U(this,`gl`),U(this,`program`),U(this,`eventController`,new AbortController),U(this,`imageCache`,new Map),U(this,`opts`),U(this,`document`),U(this,`bounds`,q()),U(this,`view`,{centerX:0,centerY:0,scale:1}),U(this,`fitScale`,1),U(this,`dpr`,1),U(this,`isDragging`,!1),U(this,`lastPointer`),U(this,`resizeObserver`),U(this,`overlayCanvas`),U(this,`overlayCtx`),U(this,`scene`),U(this,`stats`,{total:0,drawn:0,skipped:0,byType:{},unsupported:{},renderElapsedMs:0,backend:`webgl`,primitiveCount:0,visiblePrimitiveCount:0,culledPrimitiveCount:0,gpuMemoryBytes:0,buildElapsedMs:0}),U(this,`rafHandle`,0),U(this,`onStats`),U(this,`onViewChange`);let n=Fs(e,t);if(!n)throw Error(`WebGL is not available. Use renderer: "canvas2d" to force the Canvas2D fallback.`);this.canvas=e,this.gl=n,this.program=Is(n),this.opts={...Ms,...t},this.canvas.classList.add(`cad-viewer-canvas`,`cad-viewer-webgl-canvas`),this.createOverlayCanvas(),this.bindEvents(),typeof ResizeObserver<`u`&&(this.resizeObserver=new ResizeObserver(()=>this.resize()),this.resizeObserver.observe(e)),this.resize()}static isSupported(){return Ps()}destroy(){var e,t;this.eventController.abort(),(e=this.resizeObserver)==null||e.disconnect(),this.cancelScheduledRender(),this.disposeScene(),(t=this.overlayCanvas)==null||t.remove()}clear(){this.document=void 0,this.bounds=q(),this.view={centerX:0,centerY:0,scale:1},this.fitScale=1,this.disposeScene(),this.render(),this.emitViewChange()}setDocument(e){this.document=e,this.bounds=Ks(e,this.opts),this.disposeScene();let t=Bs(e,this.opts,this.bounds);this.scene=Rs(this.gl,t),this.stats=$s(this.scene,0),this.fitToView()}getDocument(){return this.document}setOptions(e){let t=Qs(this.opts,e);if(this.opts={...this.opts,...e},t&&this.document){this.setDocument(this.document);return}this.render(),this.emitViewChange()}getOptions(){return{...this.opts}}fitToView(e=.92){if(!eo(this.bounds)){this.view={centerX:0,centerY:0,scale:1},this.fitScale=1,this.render(),this.emitViewChange();return}let t=Math.max(1,this.cssWidth),n=Math.max(1,this.cssHeight),r=Math.max(this.bounds.maxX-this.bounds.minX,1e-9),i=Math.max(this.bounds.maxY-this.bounds.minY,1e-9),a=this.clampScale(Math.min(t/r,n/i)*e);this.fitScale=a,this.view={centerX:(this.bounds.minX+this.bounds.maxX)/2,centerY:(this.bounds.minY+this.bounds.maxY)/2,scale:a},this.render(),this.emitViewChange()}resize(){this.dpr=Math.max(1,window.devicePixelRatio||1);let e=Math.max(1,Math.floor(this.cssWidth*this.dpr)),t=Math.max(1,Math.floor(this.cssHeight*this.dpr));(this.canvas.width!==e||this.canvas.height!==t)&&(this.canvas.width=e,this.canvas.height=t),this.resizeOverlay(e,t),this.render(),this.emitViewChange()}zoom(e,t){if(!Number.isFinite(e)||e<=0)return;let n=t??{x:this.cssWidth/2,y:this.cssHeight/2},r=this.screenToWorld(n);this.view.scale=this.clampScale(this.view.scale*e);let i=this.screenToWorld(n);this.view.centerX+=r.x-i.x,this.view.centerY+=r.y-i.y,this.scheduleRender(),this.emitViewChange()}zoomIn(){this.zoom(this.opts.wheelZoomFactor)}zoomOut(){this.zoom(1/this.opts.wheelZoomFactor)}panByScreenDelta(e,t){!Number.isFinite(e)||!Number.isFinite(t)||(this.view.centerX-=e/this.view.scale,this.view.centerY+=t/this.view.scale,this.scheduleRender(),this.emitViewChange())}setViewState(e){if(![e.centerX,e.centerY,e.scale].every(Number.isFinite))throw Error(`Invalid view state.`);this.view={...e,scale:this.clampScale(e.scale)},this.render(),this.emitViewChange()}getViewState(){return{...this.view}}getBounds(){return{...this.bounds}}getStats(){return ec(this.stats)}getZoomRatio(){return Math.abs(this.fitScale)<1e-12?1:this.view.scale/this.fitScale}getZoomPercent(){return this.getZoomRatio()*100}worldToScreen(e){return{x:this.cssWidth/2+(e.x-this.view.centerX)*this.view.scale,y:this.cssHeight/2-(e.y-this.view.centerY)*this.view.scale}}screenToWorld(e){return{x:this.view.centerX+(e.x-this.cssWidth/2)/this.view.scale,y:this.view.centerY-(e.y-this.cssHeight/2)/this.view.scale}}render(){return this.cancelScheduledRender(),this.renderNow()}renderNow(){var e;let t=performance.now(),n=this.gl;n.viewport(0,0,this.canvas.width,this.canvas.height);let r=tc(this.opts.background,[11,16,32,255]);n.clearColor(r[0]/255,r[1]/255,r[2]/255,r[3]/255),n.clear(n.COLOR_BUFFER_BIT),n.disable(n.DEPTH_TEST),n.enable(n.BLEND),n.blendFunc(n.SRC_ALPHA,n.ONE_MINUS_SRC_ALPHA);let i=0,a=0,o=this.scene,s=this.visibleWorldBounds();if(o){n.useProgram(this.program.program),n.uniform2f(this.program.uViewCenter,this.view.centerX-o.origin.x,this.view.centerY-o.origin.y),n.uniform1f(this.program.uScale,this.view.scale*this.dpr),n.uniform2f(this.program.uViewport,this.canvas.width,this.canvas.height),n.uniform1f(this.program.uPointSize,Math.max(2,Math.min(12,4*this.dpr)));let e=this.drawBatches(o.lineBatches,n.LINES,s);i+=e.visible,a+=e.culled;let t=this.drawBatches(o.triangleBatches,n.TRIANGLES,s);i+=t.visible,a+=t.culled;let r=this.drawBatches(o.pointBatches,n.POINTS,s);i+=r.visible,a+=r.culled}this.renderOverlay(s);let c=performance.now()-t;return this.stats=o?{...o.stats,renderElapsedMs:c,backend:`webgl`,primitiveCount:o.primitiveCount,visiblePrimitiveCount:i,culledPrimitiveCount:a,gpuMemoryBytes:o.gpuMemoryBytes,buildElapsedMs:o.buildElapsedMs}:{total:0,drawn:0,skipped:0,byType:{},unsupported:{},renderElapsedMs:c,backend:`webgl`,primitiveCount:0,visiblePrimitiveCount:0,culledPrimitiveCount:0,gpuMemoryBytes:0,buildElapsedMs:0},(e=this.onStats)==null||e.call(this,this.getStats()),this.getStats()}drawBatches(e,t,n){let r=this.gl,i=0,a=0;for(let o of e){if(!Zs(o.bounds,n)){a+=o.primitiveCount;continue}r.bindBuffer(r.ARRAY_BUFFER,o.positionBuffer),r.enableVertexAttribArray(this.program.aPosition),r.vertexAttribPointer(this.program.aPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,o.colorBuffer),r.enableVertexAttribArray(this.program.aColor),r.vertexAttribPointer(this.program.aColor,4,r.UNSIGNED_BYTE,!0,0,0),r.drawArrays(t,0,o.vertexCount),i+=o.primitiveCount}return{visible:i,culled:a}}scheduleRender(){this.rafHandle||=window.requestAnimationFrame(()=>{this.rafHandle=0,this.renderNow()})}cancelScheduledRender(){this.rafHandle&&=(window.cancelAnimationFrame(this.rafHandle),0)}renderOverlay(e){var t;let n=this.overlayCtx,r=this.overlayCanvas;!n||!r||(n.save(),n.setTransform(this.dpr,0,0,this.dpr,0,0),n.clearRect(0,0,this.cssWidth,this.cssHeight),this.opts.showPageBounds&&(t=this.document?.pages)!=null&&t.length&&this.drawPageBoundsOverlay(n),this.scene&&(this.drawImagesOverlay(n,this.scene.imageItems,e),this.drawTextOverlay(n,this.scene.textItems,e)),n.restore())}drawPageBoundsOverlay(e){var t;if((t=this.document?.pages)!=null&&t.length){e.save(),e.strokeStyle=`rgba(148, 163, 184, 0.34)`,e.lineWidth=1,e.setLineDash([8,6]);for(let t of this.document.pages){let n=this.worldToScreen({x:0,y:0}),r=this.worldToScreen({x:t.width,y:t.height});e.strokeRect(Math.min(n.x,r.x),Math.min(n.y,r.y),Math.abs(r.x-n.x),Math.abs(r.y-n.y))}e.restore()}}drawTextOverlay(e,t,n){let r=this.opts.maxVisibleTextLabels,i=0;for(let a of t){if(i>=r)break;if(!Zs(a.bounds,n))continue;let t=Math.abs(a.height)*this.view.scale;if(t<this.opts.textMinPixelHeight)continue;let o=this.worldToScreen(a.point);if(o.x<-512||o.y<-512||o.x>this.cssWidth+512||o.y>this.cssHeight+512)continue;e.save(),e.translate(o.x,o.y),e.rotate(-a.rotation);let s=Math.max(4,Math.min(256,t));e.font=`${s}px ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif`,e.fillStyle=a.color,e.globalAlpha=a.opacity,e.textBaseline=`alphabetic`;for(let[t,n]of a.text.split(/\r?\n/g).entries())e.fillText(n,0,t*s*1.22);e.restore(),i++}}drawImagesOverlay(e,t,n){for(let r of t){if(!Zs(r.bounds,n))continue;let t=this.worldToScreen(r.point),i=this.worldToScreen({x:r.point.x+r.width,y:r.point.y-r.height}),a=Math.min(t.x,i.x),o=Math.min(t.y,i.y),s=Math.abs(i.x-t.x),c=Math.abs(i.y-t.y);if(!(s<1||c<1)){if(r.source){let t=this.getImage(r.source);if(t.complete&&t.naturalWidth>0){e.save(),e.globalAlpha=r.opacity,e.drawImage(t,a,o,s,c),e.restore();continue}t.onload=()=>this.scheduleRender()}this.opts.showImagePlaceholders&&(e.save(),e.strokeStyle=r.color,e.globalAlpha=r.opacity,e.lineWidth=1,e.strokeRect(a,o,s,c),e.beginPath(),e.moveTo(a,o),e.lineTo(a+s,o+c),e.moveTo(a+s,o),e.lineTo(a,o+c),e.stroke(),e.restore())}}}getImage(e){let t=this.imageCache.get(e);return t||(t=new Image,t.src=e,this.imageCache.set(e,t)),t}createOverlayCanvas(){let e=this.canvas.parentElement;if(!e||typeof document>`u`)return;window.getComputedStyle(e).position===`static`&&(e.style.position=`relative`);let t=document.createElement(`canvas`);t.className=`cad-viewer-text-overlay`,t.setAttribute(`aria-hidden`,`true`),t.style.position=`absolute`,t.style.inset=`0`,t.style.width=`100%`,t.style.height=`100%`,t.style.pointerEvents=`none`,t.style.zIndex=`1`;let n=t.getContext(`2d`);n&&(e.appendChild(t),this.overlayCanvas=t,this.overlayCtx=n)}resizeOverlay(e,t){this.overlayCanvas&&(this.overlayCanvas.width!==e||this.overlayCanvas.height!==t)&&(this.overlayCanvas.width=e,this.overlayCanvas.height=t)}bindEvents(){let e=this.eventController.signal;this.canvas.addEventListener(`wheel`,e=>{e.preventDefault();let t=e.deltaY<0?this.opts.wheelZoomFactor:1/this.opts.wheelZoomFactor;this.zoom(t,{x:e.offsetX,y:e.offsetY})},{passive:!1,signal:e}),this.canvas.addEventListener(`pointerdown`,e=>{this.canvas.setPointerCapture(e.pointerId),this.isDragging=!0,this.lastPointer={x:e.clientX,y:e.clientY},this.canvas.classList.add(`is-dragging`)},{signal:e}),this.canvas.addEventListener(`pointermove`,e=>{!this.isDragging||!this.lastPointer||(this.panByScreenDelta(e.clientX-this.lastPointer.x,e.clientY-this.lastPointer.y),this.lastPointer={x:e.clientX,y:e.clientY})},{signal:e});let t=e=>{e&&this.canvas.hasPointerCapture(e.pointerId)&&this.canvas.releasePointerCapture(e.pointerId),this.isDragging=!1,this.lastPointer=void 0,this.canvas.classList.remove(`is-dragging`)};this.canvas.addEventListener(`pointerup`,t,{signal:e}),this.canvas.addEventListener(`pointercancel`,()=>t(),{signal:e}),this.canvas.addEventListener(`webglcontextlost`,e=>{e.preventDefault(),this.cancelScheduledRender()},{signal:e})}visibleWorldBounds(){let e=this.cssWidth/Math.max(this.view.scale,1e-12)/2,t=this.cssHeight/Math.max(this.view.scale,1e-12)/2;return{minX:this.view.centerX-e,maxX:this.view.centerX+e,minY:this.view.centerY-t,maxY:this.view.centerY+t}}get cssWidth(){return this.canvas.clientWidth||1}get cssHeight(){return this.canvas.clientHeight||1}clampScale(e){return Math.min(this.opts.maxScale,Math.max(this.opts.minScale,e))}disposeScene(){if(!this.scene)return;let e=this.gl;for(let t of[...this.scene.lineBatches,...this.scene.triangleBatches,...this.scene.pointBatches])e.deleteBuffer(t.positionBuffer),e.deleteBuffer(t.colorBuffer);this.scene=void 0}emitViewChange(){var e;(e=this.onViewChange)==null||e.call(this,{view:this.getViewState(),fitScale:this.fitScale,zoomRatio:this.getZoomRatio(),zoomPercent:this.getZoomPercent(),bounds:this.getBounds()})}};function Ps(){if(typeof document>`u`)return!1;let e=document.createElement(`canvas`);return!!(e.getContext(`webgl2`)??e.getContext(`webgl`)??e.getContext(`experimental-webgl`))}function Fs(e,t){let n={alpha:!1,antialias:t.antialias??!0,depth:!1,stencil:!1,preserveDrawingBuffer:t.preserveDrawingBuffer??!1,powerPreference:t.powerPreference??`high-performance`};return e.getContext(`webgl2`,n)??e.getContext(`webgl`,n)??e.getContext(`experimental-webgl`,n)??void 0}function Is(e){let t=Ls(e,e.VERTEX_SHADER,`
attribute vec2 a_position;
attribute vec4 a_color;
uniform vec2 u_viewCenter;
uniform float u_scale;
uniform vec2 u_viewport;
uniform float u_pointSize;
varying vec4 v_color;
void main() {
vec2 screen = vec2(
u_viewport.x * 0.5 + (a_position.x - u_viewCenter.x) * u_scale,
u_viewport.y * 0.5 - (a_position.y - u_viewCenter.y) * u_scale
);
vec2 clip = vec2(screen.x / u_viewport.x * 2.0 - 1.0, 1.0 - screen.y / u_viewport.y * 2.0);
gl_Position = vec4(clip, 0.0, 1.0);
gl_PointSize = u_pointSize;
v_color = a_color;
}
`),n=Ls(e,e.FRAGMENT_SHADER,`
precision mediump float;
varying vec4 v_color;
void main() {
gl_FragColor = v_color;
}
`),r=e.createProgram();if(!r)throw Error(`Failed to create WebGL program.`);if(e.attachShader(r,t),e.attachShader(r,n),e.linkProgram(r),!e.getProgramParameter(r,e.LINK_STATUS)){let t=e.getProgramInfoLog(r)??`Unknown WebGL program link error.`;throw e.deleteProgram(r),Error(t)}e.deleteShader(t),e.deleteShader(n);let i=e.getUniformLocation(r,`u_viewCenter`),a=e.getUniformLocation(r,`u_scale`),o=e.getUniformLocation(r,`u_viewport`),s=e.getUniformLocation(r,`u_pointSize`);if(!i||!a||!o||!s)throw Error(`Failed to resolve WebGL shader uniforms.`);return{program:r,aPosition:e.getAttribLocation(r,`a_position`),aColor:e.getAttribLocation(r,`a_color`),uViewCenter:i,uScale:a,uViewport:o,uPointSize:s}}function Ls(e,t,n){let r=e.createShader(t);if(!r)throw Error(`Failed to create WebGL shader.`);if(e.shaderSource(r,n),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS)){let t=e.getShaderInfoLog(r)??`Unknown WebGL shader compile error.`;throw e.deleteShader(r),Error(t)}return r}function Rs(e,t){let n=0,r=t=>t.map(t=>{let r=zs(e,t.positions),i=zs(e,t.colors),a=t.positions.byteLength+t.colors.byteLength;return n+=a,{positionBuffer:r,colorBuffer:i,vertexCount:t.positions.length/2,primitiveCount:t.primitiveCount,bounds:t.bounds,gpuBytes:a}}),i=r(t.lineBatches),a=r(t.triangleBatches),o=r(t.pointBatches);return{origin:t.origin,lineBatches:i,triangleBatches:a,pointBatches:o,textItems:t.textItems,imageItems:t.imageItems,stats:t.stats,primitiveCount:t.primitiveCount,gpuMemoryBytes:n,buildElapsedMs:t.buildElapsedMs}}function zs(e,t){let n=e.createBuffer();if(!n)throw Error(`Failed to create WebGL buffer.`);return e.bindBuffer(e.ARRAY_BUFFER,n),e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW),n}function Bs(e,t,n){let r=performance.now(),i=new Vs(e,t,n,eo(n)?{x:(n.minX+n.maxX)/2,y:(n.minY+n.maxY)/2}:{x:0,y:0});for(let t of e.entities)i.addEntityTracked(t,0);let a=i.finalize();return a.buildElapsedMs=performance.now()-r,a}var Vs=class{constructor(e,t,n,r){U(this,`lineBuckets`,new Map),U(this,`triangleBuckets`,new Map),U(this,`pointBuckets`,new Map),U(this,`textItems`,[]),U(this,`imageItems`,[]),U(this,`stats`,{total:0,drawn:0,skipped:0,byType:{},unsupported:{},backend:`webgl`,primitiveCount:0,visiblePrimitiveCount:0,culledPrimitiveCount:0,gpuMemoryBytes:0,buildElapsedMs:0}),U(this,`tileSize`),U(this,`maxVerticesPerBatch`),U(this,`primitiveCount`,0),this.document=e,this.opts=t,this.bounds=n,this.origin=r;let i=eo(n)?Math.max(n.maxX-n.minX,n.maxY-n.minY,1e-9):1;this.tileSize=t.enableSpatialIndex?i/Math.max(8,t.spatialIndexCellCount):1/0,this.maxVerticesPerBatch=Math.max(4096,Math.floor(t.maxVerticesPerBatch))}addEntityTracked(e,t){this.stats.total++;let n=String(e.type??`UNKNOWN`).toUpperCase();this.stats.byType[n]=(this.stats.byType[n]??0)+1;let r=this.lookupLayer(e.layer);if(e.isVisible===!1||!os(r)){this.stats.skipped++;return}this.addEntity(e,n,t)}finalize(){let e=Ws(this.lineBuckets,this.maxVerticesPerBatch),t=Ws(this.triangleBuckets,this.maxVerticesPerBatch),n=Ws(this.pointBuckets,this.maxVerticesPerBatch);return this.stats.primitiveCount=this.primitiveCount,{origin:this.origin,lineBatches:e,triangleBatches:t,pointBatches:n,textItems:this.textItems,imageItems:this.imageItems,stats:this.stats,primitiveCount:this.primitiveCount,buildElapsedMs:0}}addEntity(e,t,n){switch(e.kind??qa(t)){case`line`:return this.addLineEntity(e);case`circle`:return this.addCircleEntity(e);case`arc`:return this.addArcEntity(e);case`polyline`:return this.addPolylineEntity(e);case`ellipse`:return this.addEllipseEntity(e);case`text`:return this.addTextEntity(e);case`point`:return this.addPointEntity(e);case`insert`:return this.addInsertEntity(e,n);case`solid`:return this.addSolidEntity(e);case`hatch`:return this.addHatchEntity(e);case`spline`:return this.addSplineEntity(e);case`path`:return this.addPathEntity(e);case`image`:return this.addImageEntity(e);case`viewport`:return this.markSkipped(t);default:this.stats.unsupported[t]=(this.stats.unsupported[t]??0)+1,this.stats.skipped++,this.opts.showUnsupportedMarkers&&this.addUnsupportedMarker(e)}}addLineEntity(e){if(!Y(e.startPoint)||!Y(e.endPoint))return this.markSkipped(`LINE`);this.addSegment(e.startPoint,e.endPoint,this.strokeBytes(e)),this.stats.drawn++}addCircleEntity(e){let t=e.center,n=Number(e.radius);if(!Y(t)||!Number.isFinite(n))return this.markSkipped(`CIRCLE`);let r=Math.max(16,Math.min(this.opts.maxCurveSegments,Math.ceil(Math.sqrt(Math.abs(n))*12))),i=io(t,n,0,Math.PI*2,!0,r);this.addPolyline(i,!0,this.strokeBytes(e)),this.stats.drawn++}addArcEntity(e){let t=e.center,n=Number(e.radius),r=Number(e.startAngle),i=Number(e.endAngle);if(!Y(t)||!Number.isFinite(n)||!Number.isFinite(r)||!Number.isFinite(i))return this.markSkipped(`ARC`);this.addPolyline(io(t,n,r,i,!0,this.opts.maxCurveSegments),!1,this.strokeBytes(e)),this.stats.drawn++}addPolylineEntity(e){let t=e.vertices??e.points;if(!Array.isArray(t)||t.length<2)return this.markSkipped(String(e.type));let n=!!e.isClosed||(Number(e.flag)&1)==1,r=[],i=n?t.length:t.length-1;for(let e=0;e<i;e++){let n=t[e],i=t[(e+1)%t.length];if(!Y(n)||!Y(i))continue;let a=oo(n,i,Number(n.bulge??0),Math.max(4,Math.min(24,this.opts.maxCurveSegments/4)));r.length>0&&a.shift(),r.push(...a)}if(r.length<2)return this.markSkipped(String(e.type));this.addPolyline(r,n,this.strokeBytes(e)),this.stats.drawn++}addEllipseEntity(e){if(!Y(e.center)||!Y(e.majorAxisEndPoint))return this.markSkipped(`ELLIPSE`);let t=ao(e.center,e.majorAxisEndPoint,Number(e.axisRatio??1),Number(e.startAngle??0),Number(e.endAngle??Math.PI*2),this.opts.maxCurveSegments),n=Math.abs(Number(e.endAngle??Math.PI*2)-Number(e.startAngle??0))>=Math.PI*2-1e-6;this.addPolyline(t,n,this.strokeBytes(e)),this.stats.drawn++}addTextEntity(e){let t=e.insertionPoint??e.startPoint??e.center,n=so(String(e.text??e.value??``)),r=Number(e.textHeight??e.height??1);if(!Y(t)||!n||!Number.isFinite(r))return this.markSkipped(String(e.type));let i=X(t),a=Math.max(1,n.split(/\r?\n/g).reduce((e,t)=>Math.max(e,t.length),0))*Math.abs(r)*.62,o=Math.max(1,n.split(/\r?\n/g).length)*Math.abs(r)*1.22;this.textItems.push({point:i,text:n,height:r,rotation:Number(e.rotation??0),color:ns(e,this.document,this.colorOptions()),opacity:co(Number(e.opacity??1),0,1),bounds:{minX:i.x-a*.1,minY:i.y-o,maxX:i.x+a,maxY:i.y+o}}),this.stats.drawn++}addPointEntity(e){let t=e.point??e.location??e.center??e.insertionPoint;if(!Y(t))return this.markSkipped(`POINT`);this.addPoint(t,this.strokeBytes(e)),this.stats.drawn++}addInsertEntity(e,t){let n=this.lookupBlock(e.blockName??e.name);if(n&&t<this.opts.maxInsertDepth){let r=Ds(e,n.basePoint??{x:0,y:0});for(let i of n.entities){let n=ls(i,e,this.document,this.colorOptions());this.addEntityTracked(Os(n,r),t+1)}return}let r=e.insertionPoint;if(!Y(r))return this.markSkipped(`INSERT`);if(this.addPoint(r,this.strokeBytes(e)),Array.isArray(e.attribs))for(let t of e.attribs)this.addTextEntity(t);this.stats.drawn++}addSolidEntity(e){let t=e.vertices??e.points;if(!Array.isArray(t)||t.length<3)return this.markSkipped(String(e.type));let n=t.filter(Y).map(X);if(n.length<3)return this.markSkipped(String(e.type));let r=this.fillBytes(e)??this.strokeBytes(e);this.addTriangleFan(n,r),this.addPolyline(n,!0,this.strokeBytes(e)),this.stats.drawn++}addHatchEntity(e){var t;let n=e.loops;if(!Array.isArray(n)||n.length===0)return this.markSkipped(`HATCH`);let r=this.strokeBytes(e),i=this.fillBytes(e),a=!1;for(let e of n){let n=(t=e.commands)!=null&&t.length?qs(e.commands,this.opts.maxCurveSegments):(e.vertices??[]).filter(Y).map(X);n.length<2||(this.addPolyline(n,!0,r),i&&n.length>=3&&this.addTriangleFan(n,i),a=!0)}if(!a)return this.markSkipped(`HATCH`);this.stats.drawn++}addSplineEntity(e){var t;let n=(t=e.fitPoints)!=null&&t.length?e.fitPoints:e.controlPoints;if(!n||n.length<2)return this.markSkipped(`SPLINE`);this.addPolyline(n.filter(Y).map(X),!!e.isClosed,this.strokeBytes(e)),this.stats.drawn++}addPathEntity(e){var t;if(!((t=e.commands)!=null&&t.length))return this.markSkipped(String(e.type));let n=qs(e.commands,this.opts.maxCurveSegments);if(n.length<2)return this.markSkipped(String(e.type));this.addPolyline(n,!1,this.strokeBytes(e));let r=this.fillBytes(e);r&&n.length>=3&&this.addTriangleFan(n,r),this.stats.drawn++}addImageEntity(e){let t=e.insertionPoint;if(!Y(t))return this.markSkipped(String(e.type));let n=Number(e.width??32),r=Number(e.height??32);if(!Number.isFinite(n)||!Number.isFinite(r))return this.markSkipped(String(e.type));let i=X(t),a=Ys([i,{x:i.x+n,y:i.y-r}]);this.imageItems.push({point:i,width:n,height:r,source:e.imageDataUrl??e.imageSource,color:ns(e,this.document,this.colorOptions()),opacity:co(Number(e.opacity??1),0,1),bounds:a}),this.stats.drawn++}addUnsupportedMarker(e){let t=Js(e);t&&this.addPoint(t,this.strokeBytes(e))}addPolyline(e,t,n){let r=e.filter(Y).map(X);if(!(r.length<2)){for(let e=0;e<r.length-1;e++)this.addSegment(r[e],r[e+1],n);t&&this.addSegment(r[r.length-1],r[0],n)}}addSegment(e,t,n){if(!Y(e)||!Y(t)||Math.hypot(e.x-t.x,e.y-t.y)<=1e-14)return;let r=this.batchFor(this.lineBuckets,Ys([e,t]));Us(r,e,n,this.origin),Us(r,t,n,this.origin),r.primitiveCount++,this.primitiveCount++}addPoint(e,t){let n=this.batchFor(this.pointBuckets,Xs(e));Us(n,e,t,this.origin),n.primitiveCount++,this.primitiveCount++}addTriangleFan(e,t){let n=e.filter(Y).map(X);if(n.length<3)return;let r=Ys(n),i=this.batchFor(this.triangleBuckets,r);for(let e=1;e<n.length-1;e++)Us(i,n[0],t,this.origin),Us(i,n[e],t,this.origin),Us(i,n[e+1],t,this.origin),i.primitiveCount++,this.primitiveCount++}batchFor(e,t){let n=this.bucketKey(t),r=e.get(n);return r||(r=Hs(),e.set(n,r)),J(r.bounds,{x:t.minX,y:t.minY}),J(r.bounds,{x:t.maxX,y:t.maxY}),r}bucketKey(e){if(!Number.isFinite(this.tileSize))return`all`;let t=(e.minX+e.maxX)/2,n=(e.minY+e.maxY)/2;return`${Math.floor((t-this.bounds.minX)/this.tileSize)}:${Math.floor((n-this.bounds.minY)/this.tileSize)}`}strokeBytes(e){return tc(ns(e,this.document,this.colorOptions()),[255,255,255,255],co(Number(e.opacity??1),0,1))}fillBytes(e){let t=rs(e,this.document,this.colorOptions());return t?tc(t,[255,255,255,255],co(Number(e.opacity??1),0,1)):void 0}colorOptions(){return{foreground:this.opts.foreground,background:this.opts.background,trueColorByteOrder:this.opts.trueColorByteOrder,contrastMode:this.opts.contrastMode,minColorContrast:this.opts.minColorContrast}}markSkipped(e){this.stats.skipped++,this.stats.unsupported[e]=this.stats.unsupported[e]??0}lookupLayer(e){if(e)return this.document.layers[e]??this.document.layers[e.toLowerCase()]??Object.values(this.document.layers).find(t=>t.name.toLowerCase()===e.toLowerCase())}lookupBlock(e){if(e)return this.document.blocks[e]??this.document.blocks[e.toLowerCase()]??Object.values(this.document.blocks).find(t=>t.name.toLowerCase()===e.toLowerCase())}};function Hs(){return{positions:[],colors:[],bounds:q(),primitiveCount:0}}function Us(e,t,n,r){e.positions.push(t.x-r.x,t.y-r.y),e.colors.push(n[0],n[1],n[2],n[3])}function Ws(e,t){let n=[];for(let r of e.values()){let e=r.positions.length/2;if(e<=0||!eo(r.bounds))continue;if(e<=t){n.push({positions:new Float32Array(r.positions),colors:new Uint8Array(r.colors),bounds:{...r.bounds},primitiveCount:r.primitiveCount});continue}let i=Gs(r),a=Math.max(i,Math.floor(t/i)*i);for(let t=0;t<e;t+=a){let o=Math.min(e,t+a),s=r.positions.slice(t*2,o*2),c=r.colors.slice(t*4,o*4),l=q();for(let e=0;e<s.length;e+=2)J(l,{x:s[e],y:s[e+1]});n.push({positions:new Float32Array(s),colors:new Uint8Array(c),bounds:{...r.bounds},primitiveCount:Math.floor((o-t)/i)})}}return n}function Gs(e){let t=e.positions.length/2;return t===e.primitiveCount?1:t===e.primitiveCount*3?3:2}function Ks(e,t){var n;let r=q();if((n=e.pages)!=null&&n.length)for(let t of e.pages)J(r,{x:0,y:0}),J(r,{x:t.width,y:t.height});let i=t=>{if(t)return e.blocks[t]??e.blocks[t.toLowerCase()]??Object.values(e.blocks).find(e=>e.name.toLowerCase()===t.toLowerCase())},a=(e,n)=>{let o=String(e.type??``).toUpperCase(),s=e.kind??qa(o);if(s===`insert`){let r=i(e.blockName??e.name);if(r&&n<t.maxInsertDepth){let t=Ds(e,r.basePoint??{x:0,y:0});for(let e of r.entities)a(Os(e,t),n+1);return}}if(s===`line`)Y(e.startPoint)&&J(r,e.startPoint),Y(e.endPoint)&&J(r,e.endPoint);else if(s===`circle`||s===`arc`)Y(e.center)&&Number.isFinite(e.radius)&&to(r,e.center,Number(e.radius));else if(s===`polyline`||s===`solid`||s===`spline`)for(let t of[...e.vertices??[],...e.points??[],...e.controlPoints??[],...e.fitPoints??[]])Y(t)&&J(r,t);else if(s===`ellipse`)Y(e.center)&&Y(e.majorAxisEndPoint)&&ao(e.center,e.majorAxisEndPoint,Number(e.axisRatio??1),Number(e.startAngle??0),Number(e.endAngle??Math.PI*2),t.maxCurveSegments).forEach(e=>J(r,e));else if(s===`path`)for(let t of e.commands??[])for(let e of t.points)J(r,e);else if(s===`hatch`)for(let t of e.loops??[]){for(let e of t.vertices??[])J(r,e);for(let e of t.commands??[])for(let t of e.points)J(r,t)}else{let t=Js(e);t&&J(r,t)}};for(let t of e.entities)a(t,0);return no(r)}function qs(e,t){let n=[],r,i,a=e=>{(!n.length||Math.hypot(n[n.length-1].x-e.x,n[n.length-1].y-e.y)>1e-12)&&n.push(X(e)),r=X(e)};for(let n of e)if(n.cmd===`M`)r=X(n.points[0]),i=r,a(r);else if(n.cmd===`L`)a(n.points[0]);else if(n.cmd===`Q`&&r&&n.points.length>=2){let e=r,[i,o]=n.points,s=Math.max(4,Math.min(t,24));for(let t=1;t<=s;t++){let n=t/s,r=1-n;a({x:r*r*e.x+2*r*n*i.x+n*n*o.x,y:r*r*e.y+2*r*n*i.y+n*n*o.y})}}else if(n.cmd===`C`&&r&&n.points.length>=3){let e=r,[i,o,s]=n.points,c=Math.max(6,Math.min(t,32));for(let t=1;t<=c;t++){let n=t/c,r=1-n;a({x:r**3*e.x+3*r*r*n*i.x+3*r*n*n*o.x+n**3*s.x,y:r**3*e.y+3*r*r*n*i.y+3*r*n*n*o.y+n**3*s.y})}}else n.cmd===`Z`&&i&&a(i);return n}function Js(e){for(let t of[`startPoint`,`insertionPoint`,`center`,`point`,`location`]){let n=e[t];if(Y(n))return X(n)}if(Array.isArray(e.vertices)&&Y(e.vertices[0]))return X(e.vertices[0]);if(Array.isArray(e.commands)&&e.commands.length){let t=e.commands.find(e=>e.points.length>0);if(t)return X(t.points[0])}}function Ys(e){let t=q();for(let n of e)J(t,n);return t}function Xs(e){return{minX:e.x,minY:e.y,maxX:e.x,maxY:e.y}}function Zs(e,t){return e.minX<=t.maxX&&e.maxX>=t.minX&&e.minY<=t.maxY&&e.maxY>=t.minY}function Qs(e,t){return t.trueColorByteOrder!==void 0&&t.trueColorByteOrder!==e.trueColorByteOrder||t.contrastMode!==void 0&&t.contrastMode!==e.contrastMode||t.minColorContrast!==void 0&&t.minColorContrast!==e.minColorContrast||t.foreground!==void 0&&t.foreground!==e.foreground||t.background!==void 0&&t.background!==e.background||t.maxInsertDepth!==void 0&&t.maxInsertDepth!==e.maxInsertDepth||t.maxCurveSegments!==void 0&&t.maxCurveSegments!==e.maxCurveSegments||t.spatialIndexCellCount!==void 0&&t.spatialIndexCellCount!==e.spatialIndexCellCount||t.maxVerticesPerBatch!==void 0&&t.maxVerticesPerBatch!==e.maxVerticesPerBatch||t.enableSpatialIndex!==void 0&&t.enableSpatialIndex!==e.enableSpatialIndex}function $s(e,t){return{...e.stats,renderElapsedMs:t,backend:`webgl`,primitiveCount:e.primitiveCount,visiblePrimitiveCount:0,culledPrimitiveCount:0,gpuMemoryBytes:e.gpuMemoryBytes,buildElapsedMs:e.buildElapsedMs}}function ec(e){return{total:e.total,drawn:e.drawn,skipped:e.skipped,byType:{...e.byType},unsupported:{...e.unsupported},renderElapsedMs:e.renderElapsedMs,backend:e.backend,primitiveCount:e.primitiveCount,visiblePrimitiveCount:e.visiblePrimitiveCount,culledPrimitiveCount:e.culledPrimitiveCount,gpuMemoryBytes:e.gpuMemoryBytes,buildElapsedMs:e.buildElapsedMs}}function tc(e,t,n=1){let r=e.trim().toLowerCase(),i;if(/^#[0-9a-f]{3}$/i.test(r))i=[parseInt(r[1]+r[1],16),parseInt(r[2]+r[2],16),parseInt(r[3]+r[3],16),255];else if(/^#[0-9a-f]{6}$/i.test(r))i=[parseInt(r.slice(1,3),16),parseInt(r.slice(3,5),16),parseInt(r.slice(5,7),16),255];else{let e=r.match(/^rgba?\(([^)]+)\)$/i);if(e){let t=e[1].split(/[\s,\/]+/).filter(Boolean),n=t.slice(0,3).some(e=>e.includes(`%`)),r=t.map(e=>Number(e.replace(`%`,``)));r.length>=3&&r.slice(0,3).every(Number.isFinite)&&(i=[nc(n?r[0]*2.55:r[0]),nc(n?r[1]*2.55:r[1]),nc(n?r[2]*2.55:r[2]),nc((Number.isFinite(r[3])?r[3]:1)*255)])}}let a=i??t;return[a[0],a[1],a[2],nc(a[3]*n)]}function nc(e){return Math.max(0,Math.min(255,Math.round(e)))}var rc=class{constructor(e={}){U(this,`canvas`),U(this,`renderer`),U(this,`registry`),U(this,`nativeHost`),U(this,`options`),U(this,`lastResult`),U(this,`activeNativeLoader`);var t;if(this.options={autoFit:!0,...e},this.registry=e.registry??Yo(e),e.loaders)for(let t of e.loaders)this.registry.register(t);if(this.canvas=e.canvas??document.createElement(`canvas`),this.canvas.classList.add(`cad-viewer-canvas`),e.container)e.container.classList.add(`cad-viewer-container`),e.canvas||(this.canvas.style.width=`100%`,this.canvas.style.height=`100%`,this.canvas.style.display=`block`,e.container.appendChild(this.canvas)),this.nativeHost=e.nativeHost??document.createElement(`div`),this.nativeHost.classList.add(`cad-viewer-native-host`),e.nativeHost||e.container.appendChild(this.nativeHost);else if(e.nativeHost)this.nativeHost=e.nativeHost,this.nativeHost.classList.add(`cad-viewer-native-host`);else if((t=e.canvas)!=null&&t.parentElement){e.canvas.parentElement.classList.add(`cad-viewer-container`);let t=document.createElement(`div`);t.classList.add(`cad-viewer-native-host`),e.canvas.parentElement.appendChild(t),this.nativeHost=t}this.renderer=oc(e.renderer??`auto`,this.canvas,e.canvasOptions),this.renderer.onStats=e=>{var t;return(t=this.options).onRenderStats?.call(t,e)},this.renderer.onViewChange=e=>{var t;return(t=this.options).onViewChange?.call(t,e)}}registerLoader(e){return this.registry.register(e),this}async loadFile(e,t={}){var n,r;return(r=(n=this.options).onLoadStart)==null||r.call(n,e),this.loadThroughRegistry({file:e,fileName:e.name},t,e.name)}async loadBuffer(e,t,n={}){var r,i;return(i=(r=this.options).onLoadStart)==null||i.call(r,e),this.loadThroughRegistry({buffer:e,fileName:t},n,t)}async load(e,t={}){var n,r;return(r=(n=this.options).onLoadStart)==null||r.call(n,e),this.loadThroughRegistry(e,t,e.fileName??e.file?.name)}setDocument(e,t){var n,r;this.deactivateNativeRenderer();let i={document:e,raw:e.raw,bytes:0,elapsedMs:0,format:e.format,warnings:e.warnings,summary:Xa(e),fileName:t};return this.renderer.setDocument(e),this.options.autoFit||this.renderer.render(),this.lastResult=i,(r=(n=this.options).onLoad)==null||r.call(n,i),i}fit(){var e,t;this.activeNativeLoader?(t=(e=this.activeNativeLoader).fit)==null||t.call(e):this.renderer.fitToView()}zoomIn(){var e,t;this.activeNativeLoader?(t=(e=this.activeNativeLoader).zoomIn)==null||t.call(e):this.renderer.zoomIn()}zoomOut(){var e,t;this.activeNativeLoader?(t=(e=this.activeNativeLoader).zoomOut)==null||t.call(e):this.renderer.zoomOut()}resize(){var e,t;this.activeNativeLoader?(t=(e=this.activeNativeLoader).resize)==null||t.call(e):this.renderer.resize()}setCanvasOptions(e){var t,n;this.options.canvasOptions={...this.options.canvasOptions??{},...e},this.renderer.setOptions(e),this.activeNativeLoader&&((n=(t=this.activeNativeLoader).setNativeOptions)==null||n.call(t,{...this.mergeLoadOptions({}),dwfBackground:e.background??this.options.dwfBackground}))}async preloadDwg(e={}){let t=this.registry.list().find(e=>e.id===`dwg`);if(!(t!=null&&t.preload))throw Error(`The registered DWG loader does not support preload().`);return t.preload(this.mergeLoadOptions(e))}clear(){this.lastResult=void 0,this.deactivateNativeRenderer(),this.renderer.clear()}destroy(){var e,t,n;this.deactivateNativeRenderer();for(let r of this.registry.list()){let i=r;(e=i.terminateWorker)==null||e.call(i),(t=i.unmount)==null||t.call(i),(n=i.destroy)==null||n.call(i)}this.renderer.destroy()}getLoadResult(){return this.lastResult}getDocument(){return this.activeNativeLoader?this.lastResult?.document:this.renderer.getDocument()}getZoomPercent(){return this.activeNativeLoader?100:this.renderer.getZoomPercent()}isNativeRendererActive(){return!!this.activeNativeLoader}async loadThroughRegistry(e,t,n){var r,i;try{let r=this.mergeLoadOptions(t);ac(r.signal);let i=await this.registry.detect(e),a={...e,buffer:i.bytes};if(Xo(i.loader))return await this.applyNativeLoadResult(i.loader,a,r,n);let o=await i.loader.load(a,r);return this.applyLoadResult(o,n)}catch(e){let t=ic(e);throw(i=(r=this.options).onError)==null||i.call(r,t),t}}applyLoadResult(e,t){var n,r,i,a;this.deactivateNativeRenderer(),(r=(n=this.options).onLoadProgress)==null||r.call(n,{phase:`render`,format:e.format,message:`Rendering normalized CAD scene…`,percent:96}),this.renderer.setDocument(e.document),this.options.autoFit||this.renderer.render();let o={...e,fileName:t,summary:Xa(e.document)};return this.lastResult=o,(a=(i=this.options).onLoad)==null||a.call(i,o),o}async applyNativeLoadResult(e,t,n,r){var i,a,o;if(!this.nativeHost)throw Error(`Native DWF rendering requires CadViewerOptions.container, nativeHost, or a canvas parent element.`);ac(n.signal),this.renderer.clear(),(i=this.activeNativeLoader)==null||i.unmount(),this.activeNativeLoader=e,this.canvas.style.display=`none`,this.nativeHost.classList.add(`is-active`);try{let i=await e.mount(t,this.nativeHost,n);ac(n.signal);let s={...i,fileName:r,summary:Xa(i.document)};return this.lastResult=s,this.emitNativeRenderStats(i),(o=(a=this.options).onLoad)==null||o.call(a,s),s}catch(e){throw this.deactivateNativeRenderer(),e}}deactivateNativeRenderer(){var e,t;if(!this.activeNativeLoader&&!((e=this.nativeHost)!=null&&e.classList.contains(`is-active`))){this.canvas.style.display=``;return}(t=this.activeNativeLoader)==null||t.unmount(),this.activeNativeLoader=void 0,this.nativeHost&&(this.nativeHost.classList.remove(`is-active`),this.nativeHost.replaceChildren()),this.canvas.style.display=``}emitNativeRenderStats(e){var t,n;let r=e.document.metadata,i=Number(r.nativeRenderStats?.commands??e.document.entities.length??0),a=String(r.nativeRenderStats?.backend??`webgl`).includes(`webgl`)?`webgl`:`canvas2d`;(n=(t=this.options).onRenderStats)==null||n.call(t,{total:i,drawn:i,skipped:0,byType:Xa(e.document).byType,unsupported:{},renderElapsedMs:e.elapsedMs,backend:a,primitiveCount:i,visiblePrimitiveCount:i,culledPrimitiveCount:0,gpuMemoryBytes:void 0,buildElapsedMs:e.elapsedMs})}mergeLoadOptions(e){let t=this.options.onProgress,n=e.onProgress;return{...this.options,...e,onProgress:e=>{var r,i;(i=(r=this.options).onLoadProgress)==null||i.call(r,e),t?.(e),n&&n!==t&&n(e)}}}};function ic(e){return e instanceof Error?e:Error(String(e))}function ac(e){if(e!=null&&e.aborted)throw new DOMException(`Loading cancelled.`,`AbortError`)}function oc(e,t,n={}){if(e===`canvas2d`)return new As(t,n);if(e===`webgl`)return new Ns(t,n);if(Ps())try{return new Ns(t,n)}catch{}return new As(t,n)}var sc={class:`cad-shell`},cc={class:`cad-toolbar`},lc={class:`cad-tools`},uc={class:`cad-zoom`},dc={class:`cad-meta`},fc={key:0,class:`cad-layers`},pc={class:`cad-layers-head`},mc=[`onClick`],hc={class:`cad-canvas-wrap`},gc={key:0,class:`cad-state`},_c={key:1,class:`cad-state error`},vc={class:`cad-inspector`},yc={key:0,class:`cad-warning`},bc=`wasm/cad/`,xc=`wasm/cad/dwg-worker.js`,Sc=`wasm/cad/dwfv-render.wasm`,Cc=12e4,wc=e(c({__name:`CadViewer`,props:{data:{},type:{},options:{}},setup(e){let t=e,c=n(null),_=n(null),v=n(`loading`),y=n(`正在加载 CAD 预览器...`),b=n(``),x=n(null),S=n(null),C=n(null),w=n([]),T=p(()=>x.value?.warnings||x.value?.document.warnings||[]),E=p(()=>x.value?.summary),ee=p(()=>S.value?.backend||`auto`),D=p(()=>{let e=C.value?.zoomPercent??O?.getZoomPercent?.()??100;return Number.isFinite(e)?Math.round(e):100}),O=null,k=null,A=null,j=()=>t.type.toLowerCase()||`dxf`,M=(e,t,n=!1)=>{let r=new URL(e?String(e):t,document.baseURI).href;return n?r.replace(/\/+$/,``):r},te=()=>`drawing.${j()}`,ne=e=>e?Object.entries(e.document.layers).map(([e,t])=>({...t,name:e})).sort((e,t)=>e.name.localeCompare(t.name)):[],re=e=>Number.isFinite(e)?new Intl.NumberFormat(`zh-CN`).format(Math.round(e||0)):`0`,ie=e=>{let t=e.format?`${e.format.toUpperCase()} `:``,n=Number.isFinite(e.percent)?` ${Math.round(e.percent||0)}%`:``;y.value=`${t}${e.message}${n}`},ae=()=>{O?.fit()},oe=()=>{O?.zoomIn()},se=()=>{O?.zoomOut()},ce=e=>{let t=O?.getDocument();if(!t?.layers[e.name])return;let n=t.layers[e.name];n.isVisible=n.isVisible===!1;let r=O?.setDocument(t,te())||null;x.value=r,w.value=ne(r),u(()=>O?.fit())},le=async()=>{let e=c.value,n=_.value;if(!e)return null;let r=t.options||{},i=M(r.wasmPath,bc,!0),a=M(r.workerUrl,xc),o=M(r.dwfWasmUrl,Sc),s=new rc({container:e,nativeHost:n||void 0,renderer:r.renderer||`auto`,wasmPath:i,workerUrl:a,dwfWasmUrl:o,useWorker:r.useWorker??!0,workerTimeoutMs:r.workerTimeoutMs??Cc,preferDwgWasm:r.preferDwgWasm??!0,includePaperSpace:r.includePaperSpace??!0,maxInsertDepth:r.maxInsertDepth,keepRaw:r.keepRaw??!1,dwfPreferWebgl:r.dwfPreferWebgl??!0,dwfPreferWasm:r.dwfPreferWasm??!0,dwfBackground:r.dwfBackground||`#f8fafc`,dwfMaxDevicePixelRatio:r.dwfMaxDevicePixelRatio,dwfMaxCanvasPixels:r.dwfMaxCanvasPixels,dwfMaxGpuCacheBytes:r.dwfMaxGpuCacheBytes,dwfMaxCachedScenes:r.dwfMaxCachedScenes,dwfLineWeightMode:r.dwfLineWeightMode,dwfMinStrokeCssPx:r.dwfMinStrokeCssPx,dwfMaxOverviewStrokeCssPx:r.dwfMaxOverviewStrokeCssPx,dwfMinTextCssPx:r.dwfMinTextCssPx,dwfMinFilledAreaCssPx:r.dwfMinFilledAreaCssPx,autoFit:!0,canvasOptions:{background:`#f8fafc`,foreground:`#0f172a`,contrastMode:`adaptive`,minColorContrast:2.4,showPageBounds:!0,showUnsupportedMarkers:!0,enableSpatialIndex:!0,maxVisibleTextLabels:2400,...r.canvasOptions||{}},onLoadProgress:ie,onRenderStats:e=>{S.value=e},onViewChange:e=>{C.value=e},onLoad:e=>{x.value=e,w.value=ne(e)},onError:e=>{b.value=e.message||`CAD 文件解析失败`}});return r.preloadDwg!==!1&&j()===`dwg`&&s.preloadDwg({wasmPath:i,workerUrl:a}).catch(()=>{}),s},ue=async()=>{v.value=`loading`,y.value=`正在解析 CAD...`,b.value=``,x.value=null,S.value=null,C.value=null,w.value=[],A?.abort(),A=new AbortController;try{if(O?.destroy(),O=await le(),!O)return;let e=t.options||{},n=await O.loadBuffer(t.data.slice(0),te(),{signal:A.signal,transferInputBuffer:!1,wasmPath:M(e.wasmPath,bc,!0),workerUrl:M(e.workerUrl,xc),dwfWasmUrl:M(e.dwfWasmUrl,Sc)});x.value=n,w.value=ne(n),v.value=`ready`,await u(),O.fit()}catch(e){if(A.signal.aborted)return;console.error(e),v.value=`error`,b.value=e instanceof Error?e.message:`CAD 文件解析失败`}};return o(()=>{ue(),c.value&&(k=new ResizeObserver(()=>{O?.resize()}),k.observe(c.value))}),l(()=>{A?.abort(),A=null,k?.disconnect(),k=null,O?.destroy(),O=null}),(e,t)=>(g(),m(`div`,sc,[d(`div`,cc,[d(`div`,lc,[d(`button`,{type:`button`,onClick:ae},`适配`),d(`button`,{type:`button`,title:`缩小`,onClick:se},`-`),d(`span`,uc,i(D.value)+`%`,1),d(`button`,{type:`button`,title:`放大`,onClick:oe},`+`)]),d(`div`,dc,[d(`span`,null,i(j().toUpperCase()),1),d(`span`,null,i(ee.value.toUpperCase()),1)])]),d(`div`,{class:r([`cad-body`,{"without-layers":!w.value.length}])},[w.value.length?(g(),m(`aside`,fc,[d(`div`,pc,[t[0]||=d(`strong`,null,`图层`,-1),d(`span`,null,i(w.value.length)+``,1)]),(g(!0),m(h,null,s(w.value,e=>(g(),m(`button`,{key:e.name,type:`button`,class:r({muted:e.isVisible===!1||e.isFrozen}),onClick:t=>ce(e)},[d(`span`,{class:`cad-layer-color`,style:a({background:typeof e.color==`string`?e.color:void 0})},null,4),d(`span`,null,i(e.name),1)],10,mc))),128))])):f(``,!0),d(`div`,hc,[d(`div`,{ref_key:`root`,ref:c,class:`cad-stage`},[d(`div`,{ref_key:`nativeHost`,ref:_,class:`cad-native-stage`},null,512)],512),v.value===`loading`?(g(),m(`div`,gc,i(y.value),1)):v.value===`error`?(g(),m(`div`,_c,i(b.value),1)):f(``,!0)]),d(`aside`,vc,[t[5]||=d(`strong`,null,`结构`,-1),d(`dl`,null,[d(`div`,null,[t[1]||=d(`dt`,null,`实体`,-1),d(`dd`,null,i(re(E.value?.entityCount)),1)]),d(`div`,null,[t[2]||=d(`dt`,null,``,-1),d(`dd`,null,i(re(E.value?.blockCount)),1)]),d(`div`,null,[t[3]||=d(`dt`,null,`页面`,-1),d(`dd`,null,i(re(E.value?.pageCount)),1)]),d(`div`,null,[t[4]||=d(`dt`,null,`绘制`,-1),d(`dd`,null,i(re(S.value?.drawn)),1)])]),T.value.length?(g(),m(`p`,yc,i(T.value[0]),1)):f(``,!0)])],2)]))}}),[[`__scopeId`,`data-v-06294777`]]);export{wc as default};