iflow-engine-base 3.9.16 → 3.9.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- (function(ve,ue){typeof exports=="object"&&typeof module<"u"?ue(exports,require("three"),require("opentype.js")):typeof define=="function"&&define.amd?define(["exports","three","opentype.js"],ue):(ve=typeof globalThis<"u"?globalThis:ve||self,ue(ve.DwgPreview={},ve.THREE,ve["{}"]))})(this,(function(ve,ue,ut){"use strict";var oe=typeof document<"u"?document.currentScript:null;function We(k){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(k){for(const t in k)if(t!=="default"){const i=Object.getOwnPropertyDescriptor(k,t);Object.defineProperty(e,t,i.get?i:{enumerable:!0,get:()=>k[t]})}}return e.default=k,Object.freeze(e)}const _=We(ue),ft=We(ut);var Le=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Fe(k){return k&&k.__esModule&&Object.prototype.hasOwnProperty.call(k,"default")?k.default:k}var Ie={exports:{}},pt=Ie.exports,Ge;function mt(){return Ge||(Ge=1,(function(k,e){(function(t,i){k.exports=i()})(pt,function(){var t=function(){function i(d){return s.appendChild(d.dom),d}function n(d){for(var y=0;y<s.children.length;y++)s.children[y].style.display=y===d?"block":"none";r=d}var r=0,s=document.createElement("div");s.style.cssText="position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000",s.addEventListener("click",function(d){d.preventDefault(),n(++r%s.children.length)},!1);var o=(performance||Date).now(),a=o,l=0,c=i(new t.Panel("FPS","#0ff","#002")),f=i(new t.Panel("MS","#0f0","#020"));if(self.performance&&self.performance.memory)var p=i(new t.Panel("MB","#f08","#201"));return n(0),{REVISION:16,dom:s,addPanel:i,showPanel:n,begin:function(){o=(performance||Date).now()},end:function(){l++;var d=(performance||Date).now();if(f.update(d-o,200),d>a+1e3&&(c.update(1e3*l/(d-a),100),a=d,l=0,p)){var y=performance.memory;p.update(y.usedJSHeapSize/1048576,y.jsHeapSizeLimit/1048576)}return d},update:function(){o=this.end()},domElement:s,setMode:n}};return t.Panel=function(i,n,r){var s=1/0,o=0,a=Math.round,l=a(window.devicePixelRatio||1),c=80*l,f=48*l,p=3*l,d=2*l,y=3*l,h=15*l,g=74*l,v=30*l,b=document.createElement("canvas");b.width=c,b.height=f,b.style.cssText="width:80px;height:48px";var M=b.getContext("2d");return M.font="bold "+9*l+"px Helvetica,Arial,sans-serif",M.textBaseline="top",M.fillStyle=r,M.fillRect(0,0,c,f),M.fillStyle=n,M.fillText(i,p,d),M.fillRect(y,h,g,v),M.fillStyle=r,M.globalAlpha=.9,M.fillRect(y,h,g,v),{dom:b,update:function(S,E){s=Math.min(s,S),o=Math.max(o,S),M.fillStyle=r,M.globalAlpha=1,M.fillRect(0,0,c,h),M.fillStyle=n,M.fillText(a(S)+" "+i+" ("+a(s)+"-"+a(o)+")",p,d),M.drawImage(b,y+l,h,g-l,v,y,h,g-l,v),M.fillRect(y+g-l,h,l,v),M.fillStyle=r,M.globalAlpha=.9,M.fillRect(y+g-l,h,l,a((1-S/E)*v))}}},t})})(Ie)),Ie.exports}var gt=mt();const yt=Fe(gt);var me=(k=>(k.ModelLoadStart="model-load-start",k.ModelLoadProgress="model-load-progress",k.ModelLoaded="model-loaded",k.ModelLoadError="model-load-error",k.RenderStart="render-start",k.RenderEnd="render-end",k.CameraChanged="camera-changed",k.CameraReset="camera-reset",k.SelectionChanged="selection-changed",k.HoverChanged="hover-changed",k.EntityClick="entity-click",k.LayerVisibilityChanged="layer-visibility-changed",k.LayerColorChanged="layer-color-changed",k.ViewZoomChanged="view-zoom-changed",k.ViewPanChanged="view-pan-changed",k.ToolActivated="tool-activated",k.ToolDeactivated="tool-deactivated",k.Error="error",k.Warning="warning",k))(me||{});class vt{listeners=new Map;onceListeners=new Map;debugMode=!1;constructor(e=!1){this.debugMode=e,this.initializeEvents()}initializeEvents(){Object.values(me).forEach(t=>{this.listeners.set(String(t),new Set),this.onceListeners.set(String(t),new Set)})}on(e,t){const i=String(e);return this.listeners.has(i)||this.listeners.set(i,new Set),this.listeners.get(i).add(t),this.debugMode&&console.log(`[EventModule2d] Listener added for ${i}`),()=>this.off(i,t)}once(e,t){const i=String(e);this.onceListeners.has(i)||this.onceListeners.set(i,new Set),this.onceListeners.get(i).add(t),this.debugMode&&console.log(`[EventModule2d] Once listener added for ${i}`)}off(e,t){const i=String(e),n=this.listeners.get(i);n&&(n.delete(t),this.debugMode&&console.log(`[EventModule2d] Listener removed for ${i}`))}trigger(e,t){const i=String(e);this.debugMode&&console.log(`[EventModule2d] Triggering ${i}`,t);const n=this.listeners.get(i);n&&n.size>0&&n.forEach(s=>{try{s(t)}catch(o){console.error(`[EventModule2d] Error in listener for ${i}:`,o)}});const r=this.onceListeners.get(i);r&&r.size>0&&(r.forEach(s=>{try{s(t)}catch(o){console.error(`[EventModule2d] Error in once listener for ${i}:`,o)}}),r.clear())}removeAllListeners(){this.listeners.forEach(e=>e.clear()),this.onceListeners.forEach(e=>e.clear()),this.debugMode&&console.log("[EventModule2d] All listeners removed")}removeListenersOfType(e){const t=String(e),i=this.listeners.get(t),n=this.onceListeners.get(t);i&&i.clear(),n&&n.clear(),this.debugMode&&console.log(`[EventModule2d] All listeners removed for ${t}`)}getListenerCount(e){const t=String(e),i=this.listeners.get(t),n=this.onceListeners.get(t);return(i?.size||0)+(n?.size||0)}setDebugMode(e){this.debugMode=e}getAllEventTypes(){return Object.values(me)}dispose(){this.removeAllListeners(),this.listeners.clear(),this.onceListeners.clear(),this.debugMode&&console.log("[EventModule2d] Disposed")}}const bt=`
1
+ (function(ve,ue){typeof exports=="object"&&typeof module<"u"?ue(exports,require("three"),require("opentype.js")):typeof define=="function"&&define.amd?define(["exports","three","opentype.js"],ue):(ve=typeof globalThis<"u"?globalThis:ve||self,ue(ve.DwgPreview={},ve.THREE,ve["{}"]))})(this,(function(ve,ue,dt){"use strict";var se=typeof document<"u"?document.currentScript:null;function We(k){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(k){for(const t in k)if(t!=="default"){const i=Object.getOwnPropertyDescriptor(k,t);Object.defineProperty(e,t,i.get?i:{enumerable:!0,get:()=>k[t]})}}return e.default=k,Object.freeze(e)}const _=We(ue),ut=We(dt);var Ae=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Fe(k){return k&&k.__esModule&&Object.prototype.hasOwnProperty.call(k,"default")?k.default:k}var Le={exports:{}},ft=Le.exports,Ge;function pt(){return Ge||(Ge=1,(function(k,e){(function(t,i){k.exports=i()})(ft,function(){var t=function(){function i(d){return s.appendChild(d.dom),d}function n(d){for(var y=0;y<s.children.length;y++)s.children[y].style.display=y===d?"block":"none";r=d}var r=0,s=document.createElement("div");s.style.cssText="position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000",s.addEventListener("click",function(d){d.preventDefault(),n(++r%s.children.length)},!1);var o=(performance||Date).now(),a=o,l=0,c=i(new t.Panel("FPS","#0ff","#002")),f=i(new t.Panel("MS","#0f0","#020"));if(self.performance&&self.performance.memory)var p=i(new t.Panel("MB","#f08","#201"));return n(0),{REVISION:16,dom:s,addPanel:i,showPanel:n,begin:function(){o=(performance||Date).now()},end:function(){l++;var d=(performance||Date).now();if(f.update(d-o,200),d>a+1e3&&(c.update(1e3*l/(d-a),100),a=d,l=0,p)){var y=performance.memory;p.update(y.usedJSHeapSize/1048576,y.jsHeapSizeLimit/1048576)}return d},update:function(){o=this.end()},domElement:s,setMode:n}};return t.Panel=function(i,n,r){var s=1/0,o=0,a=Math.round,l=a(window.devicePixelRatio||1),c=80*l,f=48*l,p=3*l,d=2*l,y=3*l,h=15*l,g=74*l,v=30*l,b=document.createElement("canvas");b.width=c,b.height=f,b.style.cssText="width:80px;height:48px";var M=b.getContext("2d");return M.font="bold "+9*l+"px Helvetica,Arial,sans-serif",M.textBaseline="top",M.fillStyle=r,M.fillRect(0,0,c,f),M.fillStyle=n,M.fillText(i,p,d),M.fillRect(y,h,g,v),M.fillStyle=r,M.globalAlpha=.9,M.fillRect(y,h,g,v),{dom:b,update:function(S,E){s=Math.min(s,S),o=Math.max(o,S),M.fillStyle=r,M.globalAlpha=1,M.fillRect(0,0,c,h),M.fillStyle=n,M.fillText(a(S)+" "+i+" ("+a(s)+"-"+a(o)+")",p,d),M.drawImage(b,y+l,h,g-l,v,y,h,g-l,v),M.fillRect(y+g-l,h,l,v),M.fillStyle=r,M.globalAlpha=.9,M.fillRect(y+g-l,h,l,a((1-S/E)*v))}}},t})})(Le)),Le.exports}var mt=pt();const gt=Fe(mt);var me=(k=>(k.ModelLoadStart="model-load-start",k.ModelLoadProgress="model-load-progress",k.ModelLoaded="model-loaded",k.ModelLoadError="model-load-error",k.RenderStart="render-start",k.RenderEnd="render-end",k.CameraChanged="camera-changed",k.CameraReset="camera-reset",k.SelectionChanged="selection-changed",k.HoverChanged="hover-changed",k.EntityClick="entity-click",k.LayerVisibilityChanged="layer-visibility-changed",k.LayerColorChanged="layer-color-changed",k.ViewZoomChanged="view-zoom-changed",k.ViewPanChanged="view-pan-changed",k.ToolActivated="tool-activated",k.ToolDeactivated="tool-deactivated",k.Error="error",k.Warning="warning",k))(me||{});class yt{listeners=new Map;onceListeners=new Map;debugMode=!1;constructor(e=!1){this.debugMode=e,this.initializeEvents()}initializeEvents(){Object.values(me).forEach(t=>{this.listeners.set(String(t),new Set),this.onceListeners.set(String(t),new Set)})}on(e,t){const i=String(e);return this.listeners.has(i)||this.listeners.set(i,new Set),this.listeners.get(i).add(t),this.debugMode&&console.log(`[EventModule2d] Listener added for ${i}`),()=>this.off(i,t)}once(e,t){const i=String(e);this.onceListeners.has(i)||this.onceListeners.set(i,new Set),this.onceListeners.get(i).add(t),this.debugMode&&console.log(`[EventModule2d] Once listener added for ${i}`)}off(e,t){const i=String(e),n=this.listeners.get(i);n&&(n.delete(t),this.debugMode&&console.log(`[EventModule2d] Listener removed for ${i}`))}trigger(e,t){const i=String(e);this.debugMode&&console.log(`[EventModule2d] Triggering ${i}`,t);const n=this.listeners.get(i);n&&n.size>0&&n.forEach(s=>{try{s(t)}catch(o){console.error(`[EventModule2d] Error in listener for ${i}:`,o)}});const r=this.onceListeners.get(i);r&&r.size>0&&(r.forEach(s=>{try{s(t)}catch(o){console.error(`[EventModule2d] Error in once listener for ${i}:`,o)}}),r.clear())}removeAllListeners(){this.listeners.forEach(e=>e.clear()),this.onceListeners.forEach(e=>e.clear()),this.debugMode&&console.log("[EventModule2d] All listeners removed")}removeListenersOfType(e){const t=String(e),i=this.listeners.get(t),n=this.onceListeners.get(t);i&&i.clear(),n&&n.clear(),this.debugMode&&console.log(`[EventModule2d] All listeners removed for ${t}`)}getListenerCount(e){const t=String(e),i=this.listeners.get(t),n=this.onceListeners.get(t);return(i?.size||0)+(n?.size||0)}setDebugMode(e){this.debugMode=e}getAllEventTypes(){return Object.values(me)}dispose(){this.removeAllListeners(),this.listeners.clear(),this.onceListeners.clear(),this.debugMode&&console.log("[EventModule2d] Disposed")}}const vt=`
2
2
  varying vec2 vWorldPos;
3
3
 
4
4
  void main() {
@@ -6,7 +6,7 @@
6
6
  vWorldPos = worldPosition.xy;
7
7
  gl_Position = projectionMatrix * viewMatrix * worldPosition;
8
8
  }
9
- `,wt=`
9
+ `,bt=`
10
10
  precision highp float;
11
11
 
12
12
  varying vec2 vWorldPos;
@@ -61,8 +61,8 @@
61
61
 
62
62
  gl_FragColor = vec4(color, alpha);
63
63
  }
64
- `;class xt{scene;camera;container;gridGroup;gridGeometry;gridMaterial;gridMesh;animationFrameId=null;resizeObserver;windowResizeHandler;lastState={zoom:-1,centerX:Number.NaN,centerY:Number.NaN,viewWidth:0,viewHeight:0,containerWidth:0,containerHeight:0,minorSpacing:0};largeGridColor=6052956;smallGridColor=3815994;desiredMinorPixelSize=28;coverageMultiplier=1.6;minSpacing=1e-4;minorThicknessPx=.4;majorThicknessPx=.6;minorLineOpacity=.05;majorLineOpacity=.2;baseRenderOrder=-20;gridZOffset=-.001;majorStep=5;gridUniforms={minorSpacing:{value:100},majorStep:{value:this.majorStep},worldPerPixel:{value:new _.Vector2(1,1)},minorThicknessPx:{value:this.minorThicknessPx},majorThicknessPx:{value:this.majorThicknessPx},minorColor:{value:new _.Color(this.smallGridColor)},majorColor:{value:new _.Color(this.largeGridColor)},minorOpacity:{value:this.minorLineOpacity},majorOpacity:{value:this.majorLineOpacity}};constructor(e,t,i){this.scene=e,this.camera=t,this.container=i,this.gridGroup=new _.Group,this.gridGroup.name="AdaptiveGridGroup",this.gridGroup.renderOrder=this.baseRenderOrder,this.gridGroup.visible=!0,this.gridGroup.position.set(0,0,this.gridZOffset),this.scene.add(this.gridGroup),this.createGridMesh(),this.updateGrid(!0),this.startMonitoring(),this.setupResizeObserver()}createGridMesh(){this.gridGeometry=new _.PlaneGeometry(1,1,1,1),this.gridMaterial=new _.ShaderMaterial({uniforms:this.gridUniforms,vertexShader:bt,fragmentShader:wt,transparent:!0,depthWrite:!1,depthTest:!1,side:_.DoubleSide,toneMapped:!1}),this.gridMesh=new _.Mesh(this.gridGeometry,this.gridMaterial),this.gridMesh.frustumCulled=!1,this.gridMesh.renderOrder=this.baseRenderOrder,this.gridGroup.add(this.gridMesh)}startMonitoring(){const e=()=>{this.updateGrid(),this.animationFrameId=requestAnimationFrame(e)};e()}stopMonitoring(){this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null)}setupResizeObserver(){typeof ResizeObserver<"u"?(this.resizeObserver=new ResizeObserver(()=>this.updateGrid(!0)),this.resizeObserver.observe(this.container)):(this.windowResizeHandler=()=>this.updateGrid(!0),window.addEventListener("resize",this.windowResizeHandler))}teardownResizeObserver(){this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=void 0),this.windowResizeHandler&&(window.removeEventListener("resize",this.windowResizeHandler),this.windowResizeHandler=void 0)}normalizeSpacing(e){const t=Math.max(e,this.minSpacing),i=Math.floor(Math.log10(t)),n=Math.pow(10,i),r=[1,2,5,10];for(const s of r){const o=s*n;if(t<=o)return o}return 10*n}updateGrid(e=!1){if(!this.gridMesh)return;const t=Math.max(1,this.container.clientWidth),i=Math.max(1,this.container.clientHeight),n=this.camera.zoom,r=this.camera.right-this.camera.left,s=this.camera.top-this.camera.bottom,o=Math.max(this.minSpacing,r/n),a=Math.max(this.minSpacing,s/n),l=this.camera.position.x,c=this.camera.position.y,f=o/t,p=a/i,d=f*this.desiredMinorPixelSize,y=this.normalizeSpacing(d),h=this.lastState;if(!e){const b=Math.abs(n-h.zoom)/Math.max(1e-4,h.zoom||1)>.02,M=Math.abs(y-h.minorSpacing)>h.minorSpacing*.05,S=Math.abs(l-h.centerX)>Math.max(y*.5,.01),E=Math.abs(c-h.centerY)>Math.max(y*.5,.01),R=Math.abs(o-h.viewWidth)>h.viewWidth*.01,z=Math.abs(a-h.viewHeight)>h.viewHeight*.01,j=t!==h.containerWidth||i!==h.containerHeight;if(!(b||M||S||E||R||z||j))return}const g=o*this.coverageMultiplier,v=a*this.coverageMultiplier;this.gridMesh.scale.set(g,v,1),this.gridMesh.position.set(l,c,0),this.gridUniforms.minorSpacing.value=y,this.gridUniforms.worldPerPixel.value.set(f,p),this.lastState={zoom:n,centerX:l,centerY:c,viewWidth:o,viewHeight:a,containerWidth:t,containerHeight:i,minorSpacing:y}}setVisible(e){this.gridGroup.visible=e}setColors(e,t){this.largeGridColor=e,this.smallGridColor=t,this.gridUniforms.majorColor.value.setHex(e),this.gridUniforms.minorColor.value.setHex(t)}setOpacity(e,t){this.minorLineOpacity=Math.max(0,Math.min(1,e)),this.majorLineOpacity=Math.max(0,Math.min(1,t)),this.gridUniforms.minorOpacity.value=this.minorLineOpacity,this.gridUniforms.majorOpacity.value=this.majorLineOpacity}dispose(){this.stopMonitoring(),this.teardownResizeObserver(),this.gridMesh&&this.gridGroup.remove(this.gridMesh),this.gridGeometry&&(this.gridGeometry.dispose(),this.gridGeometry=void 0),this.gridMaterial&&(this.gridMaterial.dispose(),this.gridMaterial=void 0),this.gridMesh=void 0}}class kt{engine;scene;options;adaptiveGrid;axesHelper;constructor(e,t){this.engine=e,this.options=t,this.scene=this.createScene(),this.initHelpers()}createScene(){const e=new _.Scene,t=this.options.backgroundColor??1710618;return e.background=new _.Color(t),e.is2D=!0,e}initHelpers(){this.options.axesEnabled&&this.createAxes()}initGrid(){this.options.gridEnabled&&this.createGrid()}createGrid(e=1e3,t=50){this.adaptiveGrid&&(this.adaptiveGrid.dispose(),this.adaptiveGrid=void 0),this.adaptiveGrid=new xt(this.scene,this.engine.cameraModule2d.orthographicCamera,this.engine.renderModule2d.container);const i=this.options.backgroundColor??1710618;this.updateGridColorsByBackground(i)}createAxes(e=100){this.axesHelper&&this.scene.remove(this.axesHelper),this.axesHelper=new _.AxesHelper(e),this.axesHelper.rotation.z=0,this.scene.add(this.axesHelper),this.scene.remove(this.axesHelper),this.scene.add(this.axesHelper),this.axesHelper.renderOrder=999}setBackgroundColor(e){this.scene.background=new _.Color(e),this.updateGridColorsByBackground(e)}updateGridColorsByBackground(e){if(!this.adaptiveGrid)return;const t=new _.Color(e);.299*t.r+.587*t.g+.114*t.b<.5?(this.adaptiveGrid.setColors(16777215,16777215),this.adaptiveGrid.setOpacity(.2,.3)):(this.adaptiveGrid.setColors(0,0),this.adaptiveGrid.setOpacity(.05,.2))}addObject(e){this.scene.add(e)}removeObject(e){this.scene.remove(e),e instanceof _.Mesh&&(e.geometry.dispose(),Array.isArray(e.material)?e.material.forEach(t=>t.dispose()):e.material.dispose())}clearScene(){for(let e=this.scene.children.length-1;e>=0;e--){const t=this.scene.children[e];t!==this.axesHelper&&(this.adaptiveGrid||this.removeObject(t))}this.engine.events&&this.engine.events.trigger("scene-cleared")}getObjects(e=!1){const t=[];return this.scene.children.forEach(i=>{(e||i!==this.axesHelper)&&t.push(i)}),t}getSceneStats(){let e=0,t=0,i=0;return this.scene.children.forEach(n=>{n instanceof _.Mesh?e++:n instanceof _.Line?t++:n instanceof _.Group&&i++}),{objectCount:this.scene.children.length,meshCount:e,lineCount:t,groupCount:i}}setGridVisible(e){this.adaptiveGrid&&this.adaptiveGrid.setVisible(e)}setAxesVisible(e){this.axesHelper&&(this.axesHelper.visible=e)}dispose(){this.clearScene(),this.adaptiveGrid&&(this.adaptiveGrid.dispose(),this.adaptiveGrid=void 0),this.axesHelper&&(this.scene.remove(this.axesHelper),this.axesHelper=void 0),this.scene.clear()}}class Mt{engine;isFree;highlightModels;highlightHoverModels;hideModels;translucentModels;models;constructor(e){this.engine=e,this.isFree=!0,this.highlightModels=[],this.hideModels=[],this.translucentModels=[],this.highlightHoverModels=[],this.models=[]}}class _t{engine;orthographicCamera;container;frustumSize=1e3;near=.1;far=1e4;initialZoom=1;defaultPosition=new _.Vector3(0,0,1e3);constructor(e,t){this.engine=e,this.container=t,this.orthographicCamera=this.createOrthographicCamera()}createOrthographicCamera(){const e=this.container.clientWidth/this.container.clientHeight,t=this.frustumSize/2,i=t*e,n=new _.OrthographicCamera(-i,i,t,-t,this.near,this.far);return n.position.copy(this.defaultPosition),n.lookAt(0,0,0),n.zoom=this.initialZoom,n.updateProjectionMatrix(),n}animationId=null;animationStartTime=0;animationDuration=800;animationStartState={};animationTargetState={};fitToExtents(e,t=1.2,i=!0,n=800){const r=new _.Vector3(e.min[0],e.min[1]),s=new _.Vector3(e.max[0],e.max[1]);if(!(r.distanceTo(s)>.001)){console.warn("[CameraModule2d] Invalid extents, using default view"),this.resetView();return}const a=new _.Vector3;a.addVectors(r,s).multiplyScalar(.5);const l=new _.Vector3;l.subVectors(s,r);const f=Math.max(l.x,l.y)*t,p=this.container.clientWidth/this.container.clientHeight,d=f/2,y=d*p,h=-y,g=y,v=d,b=-d,M=a.x,S=a.y,E=1;if(!i){this.orthographicCamera.left=h,this.orthographicCamera.right=g,this.orthographicCamera.top=v,this.orthographicCamera.bottom=b,this.orthographicCamera.position.set(M,S,this.defaultPosition.z),this.orthographicCamera.zoom=E,this.orthographicCamera.updateProjectionMatrix(),this.engine.controlModule2d?.panControls&&(this.engine.controlModule2d.panControls.setPosition(M,S),this.engine.controlModule2d.panControls.setZoom(E)),this.engine.events&&this.engine.events.trigger("camera-changed",{type:"fit-to-extents",center:a,size:l});return}this.animationId!==null&&(cancelAnimationFrame(this.animationId),this.animationId=null),this.animationStartState={left:this.orthographicCamera.left,right:this.orthographicCamera.right,top:this.orthographicCamera.top,bottom:this.orthographicCamera.bottom,x:this.orthographicCamera.position.x,y:this.orthographicCamera.position.y,zoom:this.orthographicCamera.zoom},this.animationTargetState={left:h,right:g,top:v,bottom:b,x:M,y:S,zoom:E},this.animationDuration=n,this.animationStartTime=performance.now(),this.animateFitToExtents(a,l)}easeOutCubic(e){return 1-Math.pow(1-e,3)}animateFitToExtents(e,t){const n=performance.now()-this.animationStartTime,r=Math.min(n/this.animationDuration,1),s=this.easeOutCubic(r),o=this.animationStartState,a=this.animationTargetState;this.orthographicCamera.left=this.lerp(o.left,a.left,s),this.orthographicCamera.right=this.lerp(o.right,a.right,s),this.orthographicCamera.top=this.lerp(o.top,a.top,s),this.orthographicCamera.bottom=this.lerp(o.bottom,a.bottom,s),this.orthographicCamera.position.x=this.lerp(o.x,a.x,s),this.orthographicCamera.position.y=this.lerp(o.y,a.y,s),this.orthographicCamera.zoom=this.lerp(o.zoom,a.zoom,s),this.orthographicCamera.updateProjectionMatrix(),this.engine.controlModule2d?.panControls&&(this.engine.controlModule2d.panControls.setPosition(this.orthographicCamera.position.x,this.orthographicCamera.position.y),this.engine.controlModule2d.panControls.setZoom(this.orthographicCamera.zoom)),this.engine.events&&this.engine.events.trigger("camera-changed",{type:"fit-to-extents",center:e,size:t,progress:s}),r<1?this.animationId=requestAnimationFrame(()=>this.animateFitToExtents(e,t)):this.animationId=null}lerp(e,t,i){return e+(t-e)*i}setZoom(e){this.orthographicCamera.zoom=e,this.orthographicCamera.updateProjectionMatrix(),this.engine.events&&this.engine.events.trigger("view-zoom-changed",{zoom:e})}getZoom(){return this.orthographicCamera.zoom}setPosition(e,t){this.orthographicCamera.position.set(e,t,this.defaultPosition.z),this.engine.events&&this.engine.events.trigger("view-pan-changed",{x:e,y:t})}getPosition(){return this.orthographicCamera.position.clone()}getViewState(){return{left:this.orthographicCamera.left,right:this.orthographicCamera.right,top:this.orthographicCamera.top,bottom:this.orthographicCamera.bottom,x:this.orthographicCamera.position.x,y:this.orthographicCamera.position.y,zoom:this.orthographicCamera.zoom}}applyViewState(e){this.animationId!==null&&(cancelAnimationFrame(this.animationId),this.animationId=null),this.orthographicCamera.left=e.left,this.orthographicCamera.right=e.right,this.orthographicCamera.top=e.top,this.orthographicCamera.bottom=e.bottom,this.orthographicCamera.position.set(e.x,e.y,this.defaultPosition.z),this.orthographicCamera.zoom=e.zoom,this.orthographicCamera.updateProjectionMatrix(),this.engine.controlModule2d?.panControls&&(this.engine.controlModule2d.panControls.setPosition(e.x,e.y),this.engine.controlModule2d.panControls.setZoom(e.zoom)),this.engine.events?.trigger("camera-changed",{type:"restore-workspace-view"})}resetView(){this.orthographicCamera.position.copy(this.defaultPosition),this.orthographicCamera.zoom=this.initialZoom,this.orthographicCamera.updateProjectionMatrix(),this.engine.events&&this.engine.events.trigger("camera-reset")}getViewBounds(){const e=this.orthographicCamera,t=e.zoom,i=e.left/t,n=e.right/t,r=e.top/t,s=e.bottom/t,o=e.position.x,a=e.position.y;return{minX:o+i,maxX:o+n,minY:a+s,maxY:a+r,width:n-i,height:r-s}}screenToWorld(e,t){const i=new _.Vector3(e/this.container.clientWidth*2-1,-(t/this.container.clientHeight)*2+1,.5);return i.unproject(this.orthographicCamera),i}worldToScreen(e,t){const i=new _.Vector3(e,t,0);return i.project(this.orthographicCamera),{x:(i.x+1)/2*this.container.clientWidth,y:-(i.y-1)/2*this.container.clientHeight}}updateAspectRatio(){const e=this.container.clientWidth/this.container.clientHeight,t=this.frustumSize/2,i=t*e;this.orthographicCamera.left=-i,this.orthographicCamera.right=i,this.orthographicCamera.top=t,this.orthographicCamera.bottom=-t,this.orthographicCamera.updateProjectionMatrix()}setFrustumSize(e){this.frustumSize=e,this.updateAspectRatio()}getFrustumSize(){return this.frustumSize}dispose(){this.animationId!==null&&(cancelAnimationFrame(this.animationId),this.animationId=null),this.orthographicCamera=null}}class Ct{engine;renderer;container;options;antialias=!0;alpha=!1;precision="highp";constructor(e,t,i){this.engine=e,this.container=t,this.options=i,this.renderer=this.createRenderer(),this.handleResize()}createRenderer(){const e=new _.WebGLRenderer({antialias:this.antialias,alpha:this.alpha,precision:this.precision}),t=this.container.clientWidth,i=this.container.clientHeight;return e.setSize(t,i),e.setPixelRatio(window.devicePixelRatio),e.autoClear=!0,e.sortObjects=!0,e.setClearColor(this.options.backgroundColor??1710618),this.container.appendChild(e.domElement),e}render(e,t){const i=performance.now();this.engine.events&&this.engine.events.trigger("render-start"),this.renderer.render(e,t);const n=performance.now()-i;this.engine.events&&this.engine.events.trigger("render-end",{renderTime:n})}handleResize(){window.addEventListener("resize",()=>{this.onWindowResize()})}onWindowResize(){const e=this.container.clientWidth,t=this.container.clientHeight;this.renderer.setSize(e,t),this.engine.cameraModule2d&&this.engine.cameraModule2d.updateAspectRatio(),this.engine.scene&&this.engine.camera&&this.render(this.engine.scene,this.engine.camera)}setSize(e,t){this.renderer.setSize(e,t),this.engine.cameraModule2d&&this.engine.cameraModule2d.updateAspectRatio()}getSize(){const e=this.renderer.getSize(new _.Vector2);return{width:e.x,height:e.y}}setBackgroundColor(e){this.renderer.setClearColor(new _.Color(e))}setPixelRatio(e){this.renderer.setPixelRatio(e)}getPixelRatio(){return this.renderer.getPixelRatio()}setAntialias(e){console.warn("Antialias cannot be changed after renderer creation")}clear(e=!0,t=!0,i=!1){this.renderer.clear(e,t,i)}getInfo(){const e=this.renderer.getContext();return{renderer:this.renderer.capabilities.isWebGL2?"WebGL 2.0":"WebGL 1.0",version:this.renderer.capabilities.getVersion(),vendor:this.renderer.capabilities.vendor,capabilities:{maxTextureSize:this.renderer.capabilities.maxTextureSize,maxRenderbufferSize:this.renderer.capabilities.maxRenderbufferSize,maxVertexAttribs:this.renderer.capabilities.maxVertexAttribs,maxVaryingVectors:e.getParameter(e.MAX_VARYING_VECTORS),maxFragmentUniforms:e.getParameter(e.MAX_FRAGMENT_UNIFORM_VECTORS),maxVertexUniforms:e.getParameter(e.MAX_VERTEX_UNIFORM_VECTORS)}}}dispose(){window.removeEventListener("resize",this.onWindowResize.bind(this)),this.renderer.dispose(),this.container.contains(this.renderer.domElement)&&this.container.removeChild(this.renderer.domElement),this.renderer=null}}class Et extends _.EventDispatcher{object;domElement;enabled=!0;enableZoom=!0;enablePan=!0;enableDamping=!1;dampingFactor=.05;zoomSpeed=1;touchZoomSpeed=1.35;minZoom=0;maxZoom=1/0;isDragging=!1;mouseButton=-1;previousMousePosition=new _.Vector2;targetPosition=new _.Vector3;targetZoom=1;isTouchZooming=!1;previousTouchDistance=0;previousTouchCenter=new _.Vector2;lastClickTime=0;doubleClickDelay=300;constructor(e,t){super(),this.object=e,this.domElement=t||document,this.targetPosition.copy(e.position),this.targetZoom=e.zoom,this.bindEvents()}bindEvents(){this.domElement.addEventListener("mousedown",this.onMouseDown.bind(this)),this.domElement.addEventListener("mousemove",this.onMouseMove.bind(this)),this.domElement.addEventListener("mouseup",this.onMouseUp.bind(this)),this.domElement.addEventListener("mouseleave",this.onMouseUp.bind(this)),this.domElement.addEventListener("wheel",this.onWheel.bind(this),{passive:!1}),this.domElement.addEventListener("dblclick",this.onDoubleClick.bind(this)),this.domElement.addEventListener("click",this.onClick.bind(this)),this.domElement.addEventListener("touchstart",this.onTouchStart.bind(this),{passive:!1}),this.domElement.addEventListener("touchmove",this.onTouchMove.bind(this),{passive:!1}),this.domElement.addEventListener("touchend",this.onTouchEnd.bind(this)),this.domElement.addEventListener("contextmenu",e=>{e.preventDefault()})}onMouseDown(e){this.enabled&&this.enablePan&&(e.button===0||e.button===1)&&(this.isDragging=!0,this.mouseButton=e.button,this.previousMousePosition.set(e.clientX,e.clientY),this.dispatchEvent({type:"start"}))}onMouseMove(e){if(!this.enabled||!this.isDragging)return;const t=e.clientX-this.previousMousePosition.x,i=e.clientY-this.previousMousePosition.y,r=1/(this.targetZoom||this.object.zoom),s=this.object.top-this.object.bottom,o=this.object.right-this.object.left,a=t/this.domElement.clientWidth*o*r,l=i/this.domElement.clientHeight*s*r;this.targetPosition.x-=a,this.targetPosition.y+=l,this.enableDamping||(this.object.position.copy(this.targetPosition),this.object.updateProjectionMatrix()),this.previousMousePosition.set(e.clientX,e.clientY),this.dispatchEvent({type:"change"})}onMouseUp(e){this.isDragging&&(this.isDragging=!1,this.mouseButton=-1,this.dispatchEvent({type:"end"}))}panByScreenDelta(e,t){const n=1/(this.targetZoom||this.object.zoom),r=this.object.top-this.object.bottom,s=this.object.right-this.object.left,o=e/this.domElement.clientWidth*s*n,a=t/this.domElement.clientHeight*r*n;this.targetPosition.x-=o,this.targetPosition.y+=a,this.applyImmediateIfNeeded()}zoomAroundScreenPoint(e,t,i){if(!Number.isFinite(i)||i<=0)return;const n=this.targetZoom;this.targetZoom*=i,this.minZoom>0&&(this.targetZoom=Math.max(this.minZoom,this.targetZoom)),this.maxZoom!==1/0&&(this.targetZoom=Math.min(this.targetZoom,this.maxZoom));const r=this.targetZoom;if(n===r)return;const s=(this.object.right-this.object.left)/2,o=(this.object.top-this.object.bottom)/2,a=this.domElement.getBoundingClientRect(),l=(e-a.left)/a.width*2-1,c=-((t-a.top)/a.height)*2+1;this.targetPosition.x+=l*s*(1/n-1/r),this.targetPosition.y+=c*o*(1/n-1/r),this.applyImmediateIfNeeded()}applyImmediateIfNeeded(){this.enableDamping||(this.object.zoom=this.targetZoom,this.object.position.copy(this.targetPosition),this.object.updateProjectionMatrix())}onWheel(e){if(!this.enabled||!this.enableZoom)return;e.preventDefault();const t=Math.pow(1.1,-Math.sign(e.deltaY)*this.zoomSpeed),i=this.targetZoom;this.targetZoom*=t,this.minZoom>0&&(this.targetZoom=Math.max(this.minZoom,this.targetZoom)),this.maxZoom!==1/0&&(this.targetZoom=Math.min(this.targetZoom,this.maxZoom));const n=this.targetZoom,r=(this.object.right-this.object.left)/2,s=(this.object.top-this.object.bottom)/2,o=this.domElement.getBoundingClientRect(),a=(e.clientX-o.left)/o.width*2-1,l=-((e.clientY-o.top)/o.height)*2+1;this.targetPosition.x+=a*r*(1/i-1/n),this.targetPosition.y+=l*s*(1/i-1/n),this.enableDamping||(this.object.zoom=n,this.object.position.copy(this.targetPosition),this.object.updateProjectionMatrix()),this.dispatchEvent({type:"change"})}onDoubleClick(e){this.enabled&&this.dispatchEvent({type:"doubleClick",event:e})}onClick(e){const t=performance.now();t-this.lastClickTime<this.doubleClickDelay||(this.lastClickTime=t)}onTouchStart(e){if(!this.enabled||e.touches.length<1)return;if(e.preventDefault(),e.touches.length>=2){const i=e.touches[0],n=e.touches[1];this.isDragging=!1,this.isTouchZooming=!0,this.previousTouchCenter.set((i.clientX+n.clientX)*.5,(i.clientY+n.clientY)*.5),this.previousTouchDistance=Math.hypot(i.clientX-n.clientX,i.clientY-n.clientY),this.dispatchEvent({type:"start"});return}const t=e.touches[0];this.isDragging=!0,this.isTouchZooming=!1,this.previousTouchDistance=0,this.previousMousePosition.set(t.clientX,t.clientY),this.dispatchEvent({type:"start"})}onTouchMove(e){if(!this.enabled||!this.isDragging&&!this.isTouchZooming)return;if(e.preventDefault(),e.touches.length>=2){const f=e.touches[0],p=e.touches[1],d=(f.clientX+p.clientX)*.5,y=(f.clientY+p.clientY)*.5,h=Math.hypot(f.clientX-p.clientX,f.clientY-p.clientY);if(!this.isTouchZooming||this.previousTouchDistance<=0){this.isDragging=!1,this.isTouchZooming=!0,this.previousTouchCenter.set(d,y),this.previousTouchDistance=h;return}if(this.panByScreenDelta(d-this.previousTouchCenter.x,y-this.previousTouchCenter.y),h>0){const g=Math.pow(h/this.previousTouchDistance,this.zoomSpeed*this.touchZoomSpeed);this.zoomAroundScreenPoint(d,y,g)}this.previousTouchCenter.set(d,y),this.previousTouchDistance=h,this.dispatchEvent({type:"change"});return}if(!this.isDragging||e.touches.length!==1)return;const t=e.touches[0],i=t.clientX-this.previousMousePosition.x,n=t.clientY-this.previousMousePosition.y,s=1/this.object.zoom,o=this.object.top-this.object.bottom,a=this.object.right-this.object.left,l=i/this.domElement.clientWidth*a*s,c=n/this.domElement.clientHeight*o*s;this.targetPosition.x-=l,this.targetPosition.y+=c,this.enableDamping||this.object.position.copy(this.targetPosition),this.previousMousePosition.set(t.clientX,t.clientY),this.dispatchEvent({type:"change"})}onTouchEnd(e){if(e.touches.length>=2){const t=e.touches[0],i=e.touches[1];this.previousTouchCenter.set((t.clientX+i.clientX)*.5,(t.clientY+i.clientY)*.5),this.previousTouchDistance=Math.hypot(t.clientX-i.clientX,t.clientY-i.clientY);return}if(e.touches.length===1){const t=e.touches[0];this.isDragging=!0,this.isTouchZooming=!1,this.previousTouchDistance=0,this.previousMousePosition.set(t.clientX,t.clientY);return}(this.isDragging||this.isTouchZooming)&&(this.isDragging=!1,this.isTouchZooming=!1,this.previousTouchDistance=0,this.dispatchEvent({type:"end"}))}update(){if(this.enabled&&this.enableDamping){const e=1-this.dampingFactor;this.object.position.x+=(this.targetPosition.x-this.object.position.x)*e,this.object.position.y+=(this.targetPosition.y-this.object.position.y)*e,this.object.zoom+=(this.targetZoom-this.object.zoom)*e,this.object.updateProjectionMatrix()}}reset(){this.targetPosition.set(0,0,this.object.position.z),this.targetZoom=1,this.enableDamping||(this.object.position.copy(this.targetPosition),this.object.zoom=this.targetZoom,this.object.updateProjectionMatrix()),this.dispatchEvent({type:"reset"})}setPosition(e,t){this.targetPosition.set(e,t,this.object.position.z),this.enableDamping||this.object.position.copy(this.targetPosition),this.dispatchEvent({type:"change"})}setZoom(e){this.targetZoom=e,this.minZoom>0&&(this.targetZoom=Math.max(this.minZoom,this.targetZoom)),this.maxZoom!==1/0&&(this.targetZoom=Math.min(this.targetZoom,this.maxZoom)),this.enableDamping||(this.object.zoom=this.targetZoom,this.object.updateProjectionMatrix()),this.dispatchEvent({type:"change"})}dispose(){this.enabled=!1,this.domElement.removeEventListener("mousedown",this.onMouseDown.bind(this)),this.domElement.removeEventListener("mousemove",this.onMouseMove.bind(this)),this.domElement.removeEventListener("mouseup",this.onMouseUp.bind(this)),this.domElement.removeEventListener("mouseleave",this.onMouseUp.bind(this)),this.domElement.removeEventListener("wheel",this.onWheel.bind(this)),this.domElement.removeEventListener("dblclick",this.onDoubleClick.bind(this)),this.domElement.removeEventListener("click",this.onClick.bind(this)),this.domElement.removeEventListener("touchstart",this.onTouchStart.bind(this)),this.domElement.removeEventListener("touchmove",this.onTouchMove.bind(this)),this.domElement.removeEventListener("touchend",this.onTouchEnd.bind(this))}}class St{engine;panControls;isActive=!0;constructor(e){this.engine=e,this.panControls=this.createPanControls(),this.init()}init(){this.panControls.addEventListener("doubleClick",this.onDoubleClick.bind(this)),this.panControls.addEventListener("change",this.onChange.bind(this))}createPanControls(){const e=new Et(this.engine.camera,this.engine.renderer.domElement);return e.enableZoom=!0,e.enablePan=!0,e.enableDamping=!0,e.dampingFactor=.05,e.zoomSpeed=1,e.minZoom=0,e.maxZoom=1/0,e}onDoubleClick(e){this.engine.cameraModule2d&&this.engine.cameraModule2d.resetView()}onChange(){this.engine.events&&this.engine.events.trigger("camera-changed",{type:"user-interaction"})}active(){this.isActive=!0,this.panControls.enabled=!0}disActive(){this.isActive=!1,this.panControls.enabled=!1}update(){this.isActive&&this.panControls.update()}reset(){this.panControls.reset()}setPosition(e,t){this.panControls.setPosition(e,t)}setZoom(e){this.panControls.setZoom(e)}getZoom(){return this.panControls.object.zoom}setEnableZoom(e){this.panControls.enableZoom=e}setEnablePan(e){this.panControls.enablePan=e}setEnableDamping(e){this.panControls.enableDamping=e}setDampingFactor(e){this.panControls.dampingFactor=Math.max(0,Math.min(e,1))}setZoomSpeed(e){this.panControls.zoomSpeed=Math.max(.1,e)}setZoomLimits(e,t){this.panControls.minZoom=e,this.panControls.maxZoom=t}dispose(){this.panControls.dispose(),this.panControls=null}}class Tt extends ue.Loader{constructor(e){super(e)}load(e,t,i,n){const r=this,s=new ue.FileLoader(this.manager);s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(e,function(o){const a=r.parse(JSON.parse(o));t&&t(a)},i,n)}parse(e){return new At(e)}}class At{constructor(e){this.isFont=!0,this.type="Font",this.data=e}generateShapes(e,t=100,i="ltr"){const n=[],r=Lt(e,t,this.data,i);for(let s=0,o=r.length;s<o;s++)n.push(...r[s].toShapes());return n}}function Lt(k,e,t,i){const n=Array.from(k),r=e/t.resolution,s=(t.boundingBox.yMax-t.boundingBox.yMin+t.underlineThickness)*r,o=[];let a=0,l=0;(i=="rtl"||i=="tb")&&n.reverse();for(let c=0;c<n.length;c++){const f=n[c];if(f===`
65
- `)a=0,l-=s;else{const p=It(f,r,a,l,t);i=="tb"?(a=0,l+=t.ascender*r):a+=p.offsetX,o.push(p.path)}}return o}function It(k,e,t,i,n){const r=n.glyphs[k]||n.glyphs["?"];if(!r){console.error('THREE.Font: character "'+k+'" does not exists in font family '+n.familyName+".");return}const s=new ue.ShapePath;let o,a,l,c,f,p,d,y;if(r.o){const h=r._cachedOutline||(r._cachedOutline=r.o.split(" "));for(let g=0,v=h.length;g<v;)switch(h[g++]){case"m":o=h[g++]*e+t,a=h[g++]*e+i,s.moveTo(o,a);break;case"l":o=h[g++]*e+t,a=h[g++]*e+i,s.lineTo(o,a);break;case"q":l=h[g++]*e+t,c=h[g++]*e+i,f=h[g++]*e+t,p=h[g++]*e+i,s.quadraticCurveTo(f,p,l,c);break;case"b":l=h[g++]*e+t,c=h[g++]*e+i,f=h[g++]*e+t,p=h[g++]*e+i,d=h[g++]*e+t,y=h[g++]*e+i,s.bezierCurveTo(f,p,d,y,l,c);break}}return{offsetX:r.ha*e,path:s}}class de{static async fromUrl(e,t){const i=await fetch(e);if(!i.ok)throw new Error(`FontJsonGenerator: 无法加载 ${e} (${i.status})`);const n=await i.arrayBuffer();return de.fromArrayBuffer(n,t)}static fromArrayBuffer(e,t){const i=ft.parse(e);return de._convert(i,t?.chars)}static toThreeFont(e){return new Tt().parse(e)}static _convert(e,t){const i={},n=e.unitsPerEm,r=f=>Math.round(f),s=f=>{const p=e.charToGlyph(f);if(!p||p.index===0)return;const d=de._commandsToTypefaceOutline(p.path.commands,r),y=p.getBoundingBox();i[f]={x_min:y.x1,x_max:y.x2,ha:p.advanceWidth??0,o:d.join(" ")}};if(t)for(const f of t)s(f);else{const f=e.tables.cmap?.glyphIndexMap??{};for(const p of Object.keys(f)){const d=Number.parseInt(p,10);d>0&&s(String.fromCodePoint(d))}}if(!i[" "]){const f=e.charToGlyph(" ");i[" "]={x_min:0,x_max:0,ha:f?.advanceWidth??Math.round(n/4),o:""}}const o=e.names,a=f=>o[f]?.en??o[f]?.zh??"",l=a("fontFamily")||"Custom Font",c=a("fontSubfamily")||"Regular";return{familyName:l,ascender:e.ascender,descender:e.descender,underlinePosition:e.tables.post?.underlinePosition??-100,underlineThickness:e.tables.post?.underlineThickness??50,boundingBox:{yMin:e.descender,xMin:0,yMax:e.ascender,xMax:n},resolution:n,original_font_information:{fontFamily:l,fontSubfamily:c},cssFontStyle:c.toLowerCase().includes("italic")?"italic":"normal",cssFontWeight:c.toLowerCase().includes("bold")?"bold":"normal",glyphs:i}}static _commandsToTypefaceOutline(e,t){const i=de._splitContours(e),n=de._createContourEntries(i),r=n.filter(a=>a.depth%2===0),s=n.filter(a=>a.depth%2===1),o=[];return r.sort((a,l)=>a.index-l.index).forEach(a=>{de._appendNormalizedContour(a.contour,!0,o,t),s.filter(l=>de._findParentSolid(l,r)===a).sort((l,c)=>l.index-c.index).forEach(l=>de._appendNormalizedContour(l.contour,!1,o,t))}),o}static _createContourEntries(e){return e.filter(t=>t.segments.length>0).map((t,i)=>{const n=de._samplePoint(t),r=e.reduce((s,o)=>o===t||o.points.length<3?s:de._pointInPolygon(n,o.points)?s+1:s,0);return{contour:t,index:i,depth:r,absArea:Math.abs(de._signedArea(t.points))}})}static _findParentSolid(e,t){const i=de._samplePoint(e.contour);return t.filter(n=>de._pointInPolygon(i,n.contour.points)).sort((n,r)=>n.absArea-r.absArea)[0]}static _appendNormalizedContour(e,t,i,n){const s=de._signedArea(e.points)<0===t?e.segments:de._reverseSegments(e.segments);de._appendContour(s,i,n)}static _splitContours(e){const t=[];let i=null,n=null;const r=()=>{i&&i.segments.length>0&&t.push(i),i=null,n=null};return e.forEach(s=>{if(s.type==="M"){r(),n={x:s.x,y:s.y},i={segments:[],points:[n]};return}if(!i||!n)return;if(s.type==="Z"){r();return}const o={x:s.x,y:s.y};s.type==="L"?i.segments.push({type:"L",start:n,end:o}):s.type==="Q"?i.segments.push({type:"Q",start:n,end:o,x1:s.x1,y1:s.y1}):s.type==="C"&&i.segments.push({type:"C",start:n,end:o,x1:s.x1,y1:s.y1,x2:s.x2,y2:s.y2}),n=o,i.points.push(o)}),r(),t}static _appendContour(e,t,i){const n=e[0].start;t.push(`m ${i(n.x)} ${i(n.y)}`),e.forEach(r=>{r.type==="L"?t.push(`l ${i(r.end.x)} ${i(r.end.y)}`):r.type==="Q"?t.push(`q ${i(r.end.x)} ${i(r.end.y)} ${i(r.x1)} ${i(r.y1)}`):t.push(`b ${i(r.end.x)} ${i(r.end.y)} ${i(r.x1)} ${i(r.y1)} ${i(r.x2)} ${i(r.y2)}`)}),t.push("z")}static _reverseSegments(e){return e.slice().reverse().map(t=>t.type==="L"?{type:"L",start:t.end,end:t.start}:t.type==="Q"?{type:"Q",start:t.end,end:t.start,x1:t.x1,y1:t.y1}:{type:"C",start:t.end,end:t.start,x1:t.x2,y1:t.y2,x2:t.x1,y2:t.y1})}static _signedArea(e){let t=0;for(let i=0,n=e.length-1;i<e.length;n=i++)t+=e[n].x*e[i].y-e[i].x*e[n].y;return t/2}static _samplePoint(e){return e.points[0]}static _pointInPolygon(e,t){let i=!1;for(let n=0,r=t.length-1;n<t.length;r=n++){const s=t[n],o=t[r];s.y>e.y!=o.y>e.y&&e.x<(o.x-s.x)*(e.y-s.y)/(o.y-s.y)+s.x&&(i=!i)}return i}}class Pt{panel=null;listEl=null;isVisible=!1;delegate;constructor(e,t){this.delegate=t,this._buildPanel(e)}show(){this.panel&&(this.panel.style.display="flex",this.isVisible=!0)}hide(){this.panel&&(this.panel.style.display="none",this.isVisible=!1)}toggle(){this.isVisible?this.hide():this.show()}refresh(){this._renderList()}_buildPanel(e){const t=document.createElement("div");t.style.cssText=`
64
+ `;class wt{scene;camera;container;gridGroup;gridGeometry;gridMaterial;gridMesh;animationFrameId=null;resizeObserver;windowResizeHandler;lastState={zoom:-1,centerX:Number.NaN,centerY:Number.NaN,viewWidth:0,viewHeight:0,containerWidth:0,containerHeight:0,minorSpacing:0};largeGridColor=6052956;smallGridColor=3815994;desiredMinorPixelSize=28;coverageMultiplier=1.6;minSpacing=1e-4;minorThicknessPx=.4;majorThicknessPx=.6;minorLineOpacity=.05;majorLineOpacity=.2;baseRenderOrder=-20;gridZOffset=-.001;majorStep=5;gridUniforms={minorSpacing:{value:100},majorStep:{value:this.majorStep},worldPerPixel:{value:new _.Vector2(1,1)},minorThicknessPx:{value:this.minorThicknessPx},majorThicknessPx:{value:this.majorThicknessPx},minorColor:{value:new _.Color(this.smallGridColor)},majorColor:{value:new _.Color(this.largeGridColor)},minorOpacity:{value:this.minorLineOpacity},majorOpacity:{value:this.majorLineOpacity}};constructor(e,t,i){this.scene=e,this.camera=t,this.container=i,this.gridGroup=new _.Group,this.gridGroup.name="AdaptiveGridGroup",this.gridGroup.renderOrder=this.baseRenderOrder,this.gridGroup.visible=!0,this.gridGroup.position.set(0,0,this.gridZOffset),this.scene.add(this.gridGroup),this.createGridMesh(),this.updateGrid(!0),this.startMonitoring(),this.setupResizeObserver()}createGridMesh(){this.gridGeometry=new _.PlaneGeometry(1,1,1,1),this.gridMaterial=new _.ShaderMaterial({uniforms:this.gridUniforms,vertexShader:vt,fragmentShader:bt,transparent:!0,depthWrite:!1,depthTest:!1,side:_.DoubleSide,toneMapped:!1}),this.gridMesh=new _.Mesh(this.gridGeometry,this.gridMaterial),this.gridMesh.frustumCulled=!1,this.gridMesh.renderOrder=this.baseRenderOrder,this.gridGroup.add(this.gridMesh)}startMonitoring(){const e=()=>{this.updateGrid(),this.animationFrameId=requestAnimationFrame(e)};e()}stopMonitoring(){this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null)}setupResizeObserver(){typeof ResizeObserver<"u"?(this.resizeObserver=new ResizeObserver(()=>this.updateGrid(!0)),this.resizeObserver.observe(this.container)):(this.windowResizeHandler=()=>this.updateGrid(!0),window.addEventListener("resize",this.windowResizeHandler))}teardownResizeObserver(){this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=void 0),this.windowResizeHandler&&(window.removeEventListener("resize",this.windowResizeHandler),this.windowResizeHandler=void 0)}normalizeSpacing(e){const t=Math.max(e,this.minSpacing),i=Math.floor(Math.log10(t)),n=Math.pow(10,i),r=[1,2,5,10];for(const s of r){const o=s*n;if(t<=o)return o}return 10*n}updateGrid(e=!1){if(!this.gridMesh)return;const t=Math.max(1,this.container.clientWidth),i=Math.max(1,this.container.clientHeight),n=this.camera.zoom,r=this.camera.right-this.camera.left,s=this.camera.top-this.camera.bottom,o=Math.max(this.minSpacing,r/n),a=Math.max(this.minSpacing,s/n),l=this.camera.position.x,c=this.camera.position.y,f=o/t,p=a/i,d=f*this.desiredMinorPixelSize,y=this.normalizeSpacing(d),h=this.lastState;if(!e){const b=Math.abs(n-h.zoom)/Math.max(1e-4,h.zoom||1)>.02,M=Math.abs(y-h.minorSpacing)>h.minorSpacing*.05,S=Math.abs(l-h.centerX)>Math.max(y*.5,.01),E=Math.abs(c-h.centerY)>Math.max(y*.5,.01),R=Math.abs(o-h.viewWidth)>h.viewWidth*.01,D=Math.abs(a-h.viewHeight)>h.viewHeight*.01,j=t!==h.containerWidth||i!==h.containerHeight;if(!(b||M||S||E||R||D||j))return}const g=o*this.coverageMultiplier,v=a*this.coverageMultiplier;this.gridMesh.scale.set(g,v,1),this.gridMesh.position.set(l,c,0),this.gridUniforms.minorSpacing.value=y,this.gridUniforms.worldPerPixel.value.set(f,p),this.lastState={zoom:n,centerX:l,centerY:c,viewWidth:o,viewHeight:a,containerWidth:t,containerHeight:i,minorSpacing:y}}setVisible(e){this.gridGroup.visible=e}setColors(e,t){this.largeGridColor=e,this.smallGridColor=t,this.gridUniforms.majorColor.value.setHex(e),this.gridUniforms.minorColor.value.setHex(t)}setOpacity(e,t){this.minorLineOpacity=Math.max(0,Math.min(1,e)),this.majorLineOpacity=Math.max(0,Math.min(1,t)),this.gridUniforms.minorOpacity.value=this.minorLineOpacity,this.gridUniforms.majorOpacity.value=this.majorLineOpacity}dispose(){this.stopMonitoring(),this.teardownResizeObserver(),this.gridMesh&&this.gridGroup.remove(this.gridMesh),this.gridGeometry&&(this.gridGeometry.dispose(),this.gridGeometry=void 0),this.gridMaterial&&(this.gridMaterial.dispose(),this.gridMaterial=void 0),this.gridMesh=void 0}}class xt{engine;scene;options;adaptiveGrid;axesHelper;constructor(e,t){this.engine=e,this.options=t,this.scene=this.createScene(),this.initHelpers()}createScene(){const e=new _.Scene,t=this.options.backgroundColor??1710618;return e.background=new _.Color(t),e.is2D=!0,e}initHelpers(){this.options.axesEnabled&&this.createAxes()}initGrid(){this.options.gridEnabled&&this.createGrid()}createGrid(e=1e3,t=50){this.adaptiveGrid&&(this.adaptiveGrid.dispose(),this.adaptiveGrid=void 0),this.adaptiveGrid=new wt(this.scene,this.engine.cameraModule2d.orthographicCamera,this.engine.renderModule2d.container);const i=this.options.backgroundColor??1710618;this.updateGridColorsByBackground(i)}createAxes(e=100){this.axesHelper&&this.scene.remove(this.axesHelper),this.axesHelper=new _.AxesHelper(e),this.axesHelper.rotation.z=0,this.scene.add(this.axesHelper),this.scene.remove(this.axesHelper),this.scene.add(this.axesHelper),this.axesHelper.renderOrder=999}setBackgroundColor(e){this.scene.background=new _.Color(e),this.updateGridColorsByBackground(e)}updateGridColorsByBackground(e){if(!this.adaptiveGrid)return;const t=new _.Color(e);.299*t.r+.587*t.g+.114*t.b<.5?(this.adaptiveGrid.setColors(16777215,16777215),this.adaptiveGrid.setOpacity(.2,.3)):(this.adaptiveGrid.setColors(0,0),this.adaptiveGrid.setOpacity(.05,.2))}addObject(e){this.scene.add(e)}removeObject(e){this.scene.remove(e),e instanceof _.Mesh&&(e.geometry.dispose(),Array.isArray(e.material)?e.material.forEach(t=>t.dispose()):e.material.dispose())}clearScene(){for(let e=this.scene.children.length-1;e>=0;e--){const t=this.scene.children[e];t!==this.axesHelper&&(this.adaptiveGrid||this.removeObject(t))}this.engine.events&&this.engine.events.trigger("scene-cleared")}getObjects(e=!1){const t=[];return this.scene.children.forEach(i=>{(e||i!==this.axesHelper)&&t.push(i)}),t}getSceneStats(){let e=0,t=0,i=0;return this.scene.children.forEach(n=>{n instanceof _.Mesh?e++:n instanceof _.Line?t++:n instanceof _.Group&&i++}),{objectCount:this.scene.children.length,meshCount:e,lineCount:t,groupCount:i}}setGridVisible(e){this.adaptiveGrid&&this.adaptiveGrid.setVisible(e)}setAxesVisible(e){this.axesHelper&&(this.axesHelper.visible=e)}dispose(){this.clearScene(),this.adaptiveGrid&&(this.adaptiveGrid.dispose(),this.adaptiveGrid=void 0),this.axesHelper&&(this.scene.remove(this.axesHelper),this.axesHelper=void 0),this.scene.clear()}}class kt{engine;isFree;highlightModels;highlightHoverModels;hideModels;translucentModels;models;constructor(e){this.engine=e,this.isFree=!0,this.highlightModels=[],this.hideModels=[],this.translucentModels=[],this.highlightHoverModels=[],this.models=[]}}class Mt{engine;orthographicCamera;container;frustumSize=1e3;near=.1;far=1e4;initialZoom=1;defaultPosition=new _.Vector3(0,0,1e3);constructor(e,t){this.engine=e,this.container=t,this.orthographicCamera=this.createOrthographicCamera()}createOrthographicCamera(){const e=this.container.clientWidth/this.container.clientHeight,t=this.frustumSize/2,i=t*e,n=new _.OrthographicCamera(-i,i,t,-t,this.near,this.far);return n.position.copy(this.defaultPosition),n.lookAt(0,0,0),n.zoom=this.initialZoom,n.updateProjectionMatrix(),n}animationId=null;animationStartTime=0;animationDuration=800;animationStartState={};animationTargetState={};fitToExtents(e,t=1.2,i=!0,n=800){const r=new _.Vector3(e.min[0],e.min[1]),s=new _.Vector3(e.max[0],e.max[1]);if(!(r.distanceTo(s)>.001)){console.warn("[CameraModule2d] Invalid extents, using default view"),this.resetView();return}const a=new _.Vector3;a.addVectors(r,s).multiplyScalar(.5);const l=new _.Vector3;l.subVectors(s,r);const f=Math.max(l.x,l.y)*t,p=this.container.clientWidth/this.container.clientHeight,d=f/2,y=d*p,h=-y,g=y,v=d,b=-d,M=a.x,S=a.y,E=1;if(!i){this.orthographicCamera.left=h,this.orthographicCamera.right=g,this.orthographicCamera.top=v,this.orthographicCamera.bottom=b,this.orthographicCamera.position.set(M,S,this.defaultPosition.z),this.orthographicCamera.zoom=E,this.orthographicCamera.updateProjectionMatrix(),this.engine.controlModule2d?.panControls&&(this.engine.controlModule2d.panControls.setPosition(M,S),this.engine.controlModule2d.panControls.setZoom(E)),this.engine.events&&this.engine.events.trigger("camera-changed",{type:"fit-to-extents",center:a,size:l});return}this.animationId!==null&&(cancelAnimationFrame(this.animationId),this.animationId=null),this.animationStartState={left:this.orthographicCamera.left,right:this.orthographicCamera.right,top:this.orthographicCamera.top,bottom:this.orthographicCamera.bottom,x:this.orthographicCamera.position.x,y:this.orthographicCamera.position.y,zoom:this.orthographicCamera.zoom},this.animationTargetState={left:h,right:g,top:v,bottom:b,x:M,y:S,zoom:E},this.animationDuration=n,this.animationStartTime=performance.now(),this.animateFitToExtents(a,l)}easeOutCubic(e){return 1-Math.pow(1-e,3)}animateFitToExtents(e,t){const n=performance.now()-this.animationStartTime,r=Math.min(n/this.animationDuration,1),s=this.easeOutCubic(r),o=this.animationStartState,a=this.animationTargetState;this.orthographicCamera.left=this.lerp(o.left,a.left,s),this.orthographicCamera.right=this.lerp(o.right,a.right,s),this.orthographicCamera.top=this.lerp(o.top,a.top,s),this.orthographicCamera.bottom=this.lerp(o.bottom,a.bottom,s),this.orthographicCamera.position.x=this.lerp(o.x,a.x,s),this.orthographicCamera.position.y=this.lerp(o.y,a.y,s),this.orthographicCamera.zoom=this.lerp(o.zoom,a.zoom,s),this.orthographicCamera.updateProjectionMatrix(),this.engine.controlModule2d?.panControls&&(this.engine.controlModule2d.panControls.setPosition(this.orthographicCamera.position.x,this.orthographicCamera.position.y),this.engine.controlModule2d.panControls.setZoom(this.orthographicCamera.zoom)),this.engine.events&&this.engine.events.trigger("camera-changed",{type:"fit-to-extents",center:e,size:t,progress:s}),r<1?this.animationId=requestAnimationFrame(()=>this.animateFitToExtents(e,t)):this.animationId=null}lerp(e,t,i){return e+(t-e)*i}setZoom(e){this.orthographicCamera.zoom=e,this.orthographicCamera.updateProjectionMatrix(),this.engine.events&&this.engine.events.trigger("view-zoom-changed",{zoom:e})}getZoom(){return this.orthographicCamera.zoom}setPosition(e,t){this.orthographicCamera.position.set(e,t,this.defaultPosition.z),this.engine.events&&this.engine.events.trigger("view-pan-changed",{x:e,y:t})}getPosition(){return this.orthographicCamera.position.clone()}getViewState(){return{left:this.orthographicCamera.left,right:this.orthographicCamera.right,top:this.orthographicCamera.top,bottom:this.orthographicCamera.bottom,x:this.orthographicCamera.position.x,y:this.orthographicCamera.position.y,zoom:this.orthographicCamera.zoom}}applyViewState(e){this.animationId!==null&&(cancelAnimationFrame(this.animationId),this.animationId=null),this.orthographicCamera.left=e.left,this.orthographicCamera.right=e.right,this.orthographicCamera.top=e.top,this.orthographicCamera.bottom=e.bottom,this.orthographicCamera.position.set(e.x,e.y,this.defaultPosition.z),this.orthographicCamera.zoom=e.zoom,this.orthographicCamera.updateProjectionMatrix(),this.engine.controlModule2d?.panControls&&(this.engine.controlModule2d.panControls.setPosition(e.x,e.y),this.engine.controlModule2d.panControls.setZoom(e.zoom)),this.engine.events?.trigger("camera-changed",{type:"restore-workspace-view"})}resetView(){this.orthographicCamera.position.copy(this.defaultPosition),this.orthographicCamera.zoom=this.initialZoom,this.orthographicCamera.updateProjectionMatrix(),this.engine.events&&this.engine.events.trigger("camera-reset")}getViewBounds(){const e=this.orthographicCamera,t=e.zoom,i=e.left/t,n=e.right/t,r=e.top/t,s=e.bottom/t,o=e.position.x,a=e.position.y;return{minX:o+i,maxX:o+n,minY:a+s,maxY:a+r,width:n-i,height:r-s}}screenToWorld(e,t){const i=new _.Vector3(e/this.container.clientWidth*2-1,-(t/this.container.clientHeight)*2+1,.5);return i.unproject(this.orthographicCamera),i}worldToScreen(e,t){const i=new _.Vector3(e,t,0);return i.project(this.orthographicCamera),{x:(i.x+1)/2*this.container.clientWidth,y:-(i.y-1)/2*this.container.clientHeight}}updateAspectRatio(){const e=this.container.clientWidth/this.container.clientHeight,t=this.frustumSize/2,i=t*e;this.orthographicCamera.left=-i,this.orthographicCamera.right=i,this.orthographicCamera.top=t,this.orthographicCamera.bottom=-t,this.orthographicCamera.updateProjectionMatrix()}setFrustumSize(e){this.frustumSize=e,this.updateAspectRatio()}getFrustumSize(){return this.frustumSize}dispose(){this.animationId!==null&&(cancelAnimationFrame(this.animationId),this.animationId=null),this.orthographicCamera=null}}class _t{engine;renderer;container;options;antialias=!0;alpha=!1;precision="highp";constructor(e,t,i){this.engine=e,this.container=t,this.options=i,this.renderer=this.createRenderer(),this.handleResize()}createRenderer(){const e=new _.WebGLRenderer({antialias:this.antialias,alpha:this.alpha,precision:this.precision}),t=this.container.clientWidth,i=this.container.clientHeight;return e.setSize(t,i),e.setPixelRatio(window.devicePixelRatio),e.autoClear=!0,e.sortObjects=!0,e.setClearColor(this.options.backgroundColor??1710618),this.container.appendChild(e.domElement),e}render(e,t){const i=performance.now();this.engine.events&&this.engine.events.trigger("render-start"),this.renderer.render(e,t);const n=performance.now()-i;this.engine.events&&this.engine.events.trigger("render-end",{renderTime:n})}handleResize(){window.addEventListener("resize",()=>{this.onWindowResize()})}onWindowResize(){const e=this.container.clientWidth,t=this.container.clientHeight;this.renderer.setSize(e,t),this.engine.cameraModule2d&&this.engine.cameraModule2d.updateAspectRatio(),this.engine.scene&&this.engine.camera&&this.render(this.engine.scene,this.engine.camera)}setSize(e,t){this.renderer.setSize(e,t),this.engine.cameraModule2d&&this.engine.cameraModule2d.updateAspectRatio()}getSize(){const e=this.renderer.getSize(new _.Vector2);return{width:e.x,height:e.y}}setBackgroundColor(e){this.renderer.setClearColor(new _.Color(e))}setPixelRatio(e){this.renderer.setPixelRatio(e)}getPixelRatio(){return this.renderer.getPixelRatio()}setAntialias(e){console.warn("Antialias cannot be changed after renderer creation")}clear(e=!0,t=!0,i=!1){this.renderer.clear(e,t,i)}getInfo(){const e=this.renderer.getContext();return{renderer:this.renderer.capabilities.isWebGL2?"WebGL 2.0":"WebGL 1.0",version:this.renderer.capabilities.getVersion(),vendor:this.renderer.capabilities.vendor,capabilities:{maxTextureSize:this.renderer.capabilities.maxTextureSize,maxRenderbufferSize:this.renderer.capabilities.maxRenderbufferSize,maxVertexAttribs:this.renderer.capabilities.maxVertexAttribs,maxVaryingVectors:e.getParameter(e.MAX_VARYING_VECTORS),maxFragmentUniforms:e.getParameter(e.MAX_FRAGMENT_UNIFORM_VECTORS),maxVertexUniforms:e.getParameter(e.MAX_VERTEX_UNIFORM_VECTORS)}}}dispose(){window.removeEventListener("resize",this.onWindowResize.bind(this)),this.renderer.dispose(),this.container.contains(this.renderer.domElement)&&this.container.removeChild(this.renderer.domElement),this.renderer=null}}class Ct extends _.EventDispatcher{object;domElement;enabled=!0;enableZoom=!0;enablePan=!0;enableDamping=!1;dampingFactor=.05;zoomSpeed=1;touchZoomSpeed=1.35;minZoom=0;maxZoom=1/0;isDragging=!1;mouseButton=-1;previousMousePosition=new _.Vector2;targetPosition=new _.Vector3;targetZoom=1;isTouchZooming=!1;previousTouchDistance=0;previousTouchCenter=new _.Vector2;lastClickTime=0;doubleClickDelay=300;constructor(e,t){super(),this.object=e,this.domElement=t||document,this.targetPosition.copy(e.position),this.targetZoom=e.zoom,this.bindEvents()}bindEvents(){this.domElement.addEventListener("mousedown",this.onMouseDown.bind(this)),this.domElement.addEventListener("mousemove",this.onMouseMove.bind(this)),this.domElement.addEventListener("mouseup",this.onMouseUp.bind(this)),this.domElement.addEventListener("mouseleave",this.onMouseUp.bind(this)),this.domElement.addEventListener("wheel",this.onWheel.bind(this),{passive:!1}),this.domElement.addEventListener("dblclick",this.onDoubleClick.bind(this)),this.domElement.addEventListener("click",this.onClick.bind(this)),this.domElement.addEventListener("touchstart",this.onTouchStart.bind(this),{passive:!1}),this.domElement.addEventListener("touchmove",this.onTouchMove.bind(this),{passive:!1}),this.domElement.addEventListener("touchend",this.onTouchEnd.bind(this)),this.domElement.addEventListener("contextmenu",e=>{e.preventDefault()})}onMouseDown(e){this.enabled&&this.enablePan&&(e.button===0||e.button===1)&&(this.isDragging=!0,this.mouseButton=e.button,this.previousMousePosition.set(e.clientX,e.clientY),this.dispatchEvent({type:"start"}))}onMouseMove(e){if(!this.enabled||!this.isDragging)return;const t=e.clientX-this.previousMousePosition.x,i=e.clientY-this.previousMousePosition.y,r=1/(this.targetZoom||this.object.zoom),s=this.object.top-this.object.bottom,o=this.object.right-this.object.left,a=t/this.domElement.clientWidth*o*r,l=i/this.domElement.clientHeight*s*r;this.targetPosition.x-=a,this.targetPosition.y+=l,this.enableDamping||(this.object.position.copy(this.targetPosition),this.object.updateProjectionMatrix()),this.previousMousePosition.set(e.clientX,e.clientY),this.dispatchEvent({type:"change"})}onMouseUp(e){this.isDragging&&(this.isDragging=!1,this.mouseButton=-1,this.dispatchEvent({type:"end"}))}panByScreenDelta(e,t){const n=1/(this.targetZoom||this.object.zoom),r=this.object.top-this.object.bottom,s=this.object.right-this.object.left,o=e/this.domElement.clientWidth*s*n,a=t/this.domElement.clientHeight*r*n;this.targetPosition.x-=o,this.targetPosition.y+=a,this.applyImmediateIfNeeded()}zoomAroundScreenPoint(e,t,i){if(!Number.isFinite(i)||i<=0)return;const n=this.targetZoom;this.targetZoom*=i,this.minZoom>0&&(this.targetZoom=Math.max(this.minZoom,this.targetZoom)),this.maxZoom!==1/0&&(this.targetZoom=Math.min(this.targetZoom,this.maxZoom));const r=this.targetZoom;if(n===r)return;const s=(this.object.right-this.object.left)/2,o=(this.object.top-this.object.bottom)/2,a=this.domElement.getBoundingClientRect(),l=(e-a.left)/a.width*2-1,c=-((t-a.top)/a.height)*2+1;this.targetPosition.x+=l*s*(1/n-1/r),this.targetPosition.y+=c*o*(1/n-1/r),this.applyImmediateIfNeeded()}applyImmediateIfNeeded(){this.enableDamping||(this.object.zoom=this.targetZoom,this.object.position.copy(this.targetPosition),this.object.updateProjectionMatrix())}onWheel(e){if(!this.enabled||!this.enableZoom)return;e.preventDefault();const t=Math.pow(1.1,-Math.sign(e.deltaY)*this.zoomSpeed),i=this.targetZoom;this.targetZoom*=t,this.minZoom>0&&(this.targetZoom=Math.max(this.minZoom,this.targetZoom)),this.maxZoom!==1/0&&(this.targetZoom=Math.min(this.targetZoom,this.maxZoom));const n=this.targetZoom,r=(this.object.right-this.object.left)/2,s=(this.object.top-this.object.bottom)/2,o=this.domElement.getBoundingClientRect(),a=(e.clientX-o.left)/o.width*2-1,l=-((e.clientY-o.top)/o.height)*2+1;this.targetPosition.x+=a*r*(1/i-1/n),this.targetPosition.y+=l*s*(1/i-1/n),this.enableDamping||(this.object.zoom=n,this.object.position.copy(this.targetPosition),this.object.updateProjectionMatrix()),this.dispatchEvent({type:"change"})}onDoubleClick(e){this.enabled&&this.dispatchEvent({type:"doubleClick",event:e})}onClick(e){const t=performance.now();t-this.lastClickTime<this.doubleClickDelay||(this.lastClickTime=t)}onTouchStart(e){if(!this.enabled||e.touches.length<1)return;if(e.preventDefault(),e.touches.length>=2){const i=e.touches[0],n=e.touches[1];this.isDragging=!1,this.isTouchZooming=!0,this.previousTouchCenter.set((i.clientX+n.clientX)*.5,(i.clientY+n.clientY)*.5),this.previousTouchDistance=Math.hypot(i.clientX-n.clientX,i.clientY-n.clientY),this.dispatchEvent({type:"start"});return}const t=e.touches[0];this.isDragging=!0,this.isTouchZooming=!1,this.previousTouchDistance=0,this.previousMousePosition.set(t.clientX,t.clientY),this.dispatchEvent({type:"start"})}onTouchMove(e){if(!this.enabled||!this.isDragging&&!this.isTouchZooming)return;if(e.preventDefault(),e.touches.length>=2){const f=e.touches[0],p=e.touches[1],d=(f.clientX+p.clientX)*.5,y=(f.clientY+p.clientY)*.5,h=Math.hypot(f.clientX-p.clientX,f.clientY-p.clientY);if(!this.isTouchZooming||this.previousTouchDistance<=0){this.isDragging=!1,this.isTouchZooming=!0,this.previousTouchCenter.set(d,y),this.previousTouchDistance=h;return}if(this.panByScreenDelta(d-this.previousTouchCenter.x,y-this.previousTouchCenter.y),h>0){const g=Math.pow(h/this.previousTouchDistance,this.zoomSpeed*this.touchZoomSpeed);this.zoomAroundScreenPoint(d,y,g)}this.previousTouchCenter.set(d,y),this.previousTouchDistance=h,this.dispatchEvent({type:"change"});return}if(!this.isDragging||e.touches.length!==1)return;const t=e.touches[0],i=t.clientX-this.previousMousePosition.x,n=t.clientY-this.previousMousePosition.y,s=1/this.object.zoom,o=this.object.top-this.object.bottom,a=this.object.right-this.object.left,l=i/this.domElement.clientWidth*a*s,c=n/this.domElement.clientHeight*o*s;this.targetPosition.x-=l,this.targetPosition.y+=c,this.enableDamping||this.object.position.copy(this.targetPosition),this.previousMousePosition.set(t.clientX,t.clientY),this.dispatchEvent({type:"change"})}onTouchEnd(e){if(e.touches.length>=2){const t=e.touches[0],i=e.touches[1];this.previousTouchCenter.set((t.clientX+i.clientX)*.5,(t.clientY+i.clientY)*.5),this.previousTouchDistance=Math.hypot(t.clientX-i.clientX,t.clientY-i.clientY);return}if(e.touches.length===1){const t=e.touches[0];this.isDragging=!0,this.isTouchZooming=!1,this.previousTouchDistance=0,this.previousMousePosition.set(t.clientX,t.clientY);return}(this.isDragging||this.isTouchZooming)&&(this.isDragging=!1,this.isTouchZooming=!1,this.previousTouchDistance=0,this.dispatchEvent({type:"end"}))}update(){if(this.enabled&&this.enableDamping){const e=1-this.dampingFactor;this.object.position.x+=(this.targetPosition.x-this.object.position.x)*e,this.object.position.y+=(this.targetPosition.y-this.object.position.y)*e,this.object.zoom+=(this.targetZoom-this.object.zoom)*e,this.object.updateProjectionMatrix()}}reset(){this.targetPosition.set(0,0,this.object.position.z),this.targetZoom=1,this.enableDamping||(this.object.position.copy(this.targetPosition),this.object.zoom=this.targetZoom,this.object.updateProjectionMatrix()),this.dispatchEvent({type:"reset"})}setPosition(e,t){this.targetPosition.set(e,t,this.object.position.z),this.enableDamping||this.object.position.copy(this.targetPosition),this.dispatchEvent({type:"change"})}setZoom(e){this.targetZoom=e,this.minZoom>0&&(this.targetZoom=Math.max(this.minZoom,this.targetZoom)),this.maxZoom!==1/0&&(this.targetZoom=Math.min(this.targetZoom,this.maxZoom)),this.enableDamping||(this.object.zoom=this.targetZoom,this.object.updateProjectionMatrix()),this.dispatchEvent({type:"change"})}dispose(){this.enabled=!1,this.domElement.removeEventListener("mousedown",this.onMouseDown.bind(this)),this.domElement.removeEventListener("mousemove",this.onMouseMove.bind(this)),this.domElement.removeEventListener("mouseup",this.onMouseUp.bind(this)),this.domElement.removeEventListener("mouseleave",this.onMouseUp.bind(this)),this.domElement.removeEventListener("wheel",this.onWheel.bind(this)),this.domElement.removeEventListener("dblclick",this.onDoubleClick.bind(this)),this.domElement.removeEventListener("click",this.onClick.bind(this)),this.domElement.removeEventListener("touchstart",this.onTouchStart.bind(this)),this.domElement.removeEventListener("touchmove",this.onTouchMove.bind(this)),this.domElement.removeEventListener("touchend",this.onTouchEnd.bind(this))}}class Et{engine;panControls;isActive=!0;constructor(e){this.engine=e,this.panControls=this.createPanControls(),this.init()}init(){this.panControls.addEventListener("doubleClick",this.onDoubleClick.bind(this)),this.panControls.addEventListener("change",this.onChange.bind(this))}createPanControls(){const e=new Ct(this.engine.camera,this.engine.renderer.domElement);return e.enableZoom=!0,e.enablePan=!0,e.enableDamping=!0,e.dampingFactor=.05,e.zoomSpeed=1,e.minZoom=0,e.maxZoom=1/0,e}onDoubleClick(e){this.engine.cameraModule2d&&this.engine.cameraModule2d.resetView()}onChange(){this.engine.events&&this.engine.events.trigger("camera-changed",{type:"user-interaction"})}active(){this.isActive=!0,this.panControls.enabled=!0}disActive(){this.isActive=!1,this.panControls.enabled=!1}update(){this.isActive&&this.panControls.update()}reset(){this.panControls.reset()}setPosition(e,t){this.panControls.setPosition(e,t)}setZoom(e){this.panControls.setZoom(e)}getZoom(){return this.panControls.object.zoom}setEnableZoom(e){this.panControls.enableZoom=e}setEnablePan(e){this.panControls.enablePan=e}setEnableDamping(e){this.panControls.enableDamping=e}setDampingFactor(e){this.panControls.dampingFactor=Math.max(0,Math.min(e,1))}setZoomSpeed(e){this.panControls.zoomSpeed=Math.max(.1,e)}setZoomLimits(e,t){this.panControls.minZoom=e,this.panControls.maxZoom=t}dispose(){this.panControls.dispose(),this.panControls=null}}class St extends ue.Loader{constructor(e){super(e)}load(e,t,i,n){const r=this,s=new ue.FileLoader(this.manager);s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(e,function(o){const a=r.parse(JSON.parse(o));t&&t(a)},i,n)}parse(e){return new Tt(e)}}class Tt{constructor(e){this.isFont=!0,this.type="Font",this.data=e}generateShapes(e,t=100,i="ltr"){const n=[],r=At(e,t,this.data,i);for(let s=0,o=r.length;s<o;s++)n.push(...r[s].toShapes());return n}}function At(k,e,t,i){const n=Array.from(k),r=e/t.resolution,s=(t.boundingBox.yMax-t.boundingBox.yMin+t.underlineThickness)*r,o=[];let a=0,l=0;(i=="rtl"||i=="tb")&&n.reverse();for(let c=0;c<n.length;c++){const f=n[c];if(f===`
65
+ `)a=0,l-=s;else{const p=Lt(f,r,a,l,t);i=="tb"?(a=0,l+=t.ascender*r):a+=p.offsetX,o.push(p.path)}}return o}function Lt(k,e,t,i,n){const r=n.glyphs[k]||n.glyphs["?"];if(!r){console.error('THREE.Font: character "'+k+'" does not exists in font family '+n.familyName+".");return}const s=new ue.ShapePath;let o,a,l,c,f,p,d,y;if(r.o){const h=r._cachedOutline||(r._cachedOutline=r.o.split(" "));for(let g=0,v=h.length;g<v;)switch(h[g++]){case"m":o=h[g++]*e+t,a=h[g++]*e+i,s.moveTo(o,a);break;case"l":o=h[g++]*e+t,a=h[g++]*e+i,s.lineTo(o,a);break;case"q":l=h[g++]*e+t,c=h[g++]*e+i,f=h[g++]*e+t,p=h[g++]*e+i,s.quadraticCurveTo(f,p,l,c);break;case"b":l=h[g++]*e+t,c=h[g++]*e+i,f=h[g++]*e+t,p=h[g++]*e+i,d=h[g++]*e+t,y=h[g++]*e+i,s.bezierCurveTo(f,p,d,y,l,c);break}}return{offsetX:r.ha*e,path:s}}class de{static async fromUrl(e,t){const i=await fetch(e);if(!i.ok)throw new Error(`FontJsonGenerator: 无法加载 ${e} (${i.status})`);const n=await i.arrayBuffer();return de.fromArrayBuffer(n,t)}static fromArrayBuffer(e,t){const i=ut.parse(e);return de._convert(i,t?.chars)}static toThreeFont(e){return new St().parse(e)}static _convert(e,t){const i={},n=e.unitsPerEm,r=f=>Math.round(f),s=f=>{const p=e.charToGlyph(f);if(!p||p.index===0)return;const d=de._commandsToTypefaceOutline(p.path.commands,r),y=p.getBoundingBox();i[f]={x_min:y.x1,x_max:y.x2,ha:p.advanceWidth??0,o:d.join(" ")}};if(t)for(const f of t)s(f);else{const f=e.tables.cmap?.glyphIndexMap??{};for(const p of Object.keys(f)){const d=Number.parseInt(p,10);d>0&&s(String.fromCodePoint(d))}}if(!i[" "]){const f=e.charToGlyph(" ");i[" "]={x_min:0,x_max:0,ha:f?.advanceWidth??Math.round(n/4),o:""}}const o=e.names,a=f=>o[f]?.en??o[f]?.zh??"",l=a("fontFamily")||"Custom Font",c=a("fontSubfamily")||"Regular";return{familyName:l,ascender:e.ascender,descender:e.descender,underlinePosition:e.tables.post?.underlinePosition??-100,underlineThickness:e.tables.post?.underlineThickness??50,boundingBox:{yMin:e.descender,xMin:0,yMax:e.ascender,xMax:n},resolution:n,original_font_information:{fontFamily:l,fontSubfamily:c},cssFontStyle:c.toLowerCase().includes("italic")?"italic":"normal",cssFontWeight:c.toLowerCase().includes("bold")?"bold":"normal",glyphs:i}}static _commandsToTypefaceOutline(e,t){const i=de._splitContours(e),n=de._createContourEntries(i),r=n.filter(a=>a.depth%2===0),s=n.filter(a=>a.depth%2===1),o=[];return r.sort((a,l)=>a.index-l.index).forEach(a=>{de._appendNormalizedContour(a.contour,!0,o,t),s.filter(l=>de._findParentSolid(l,r)===a).sort((l,c)=>l.index-c.index).forEach(l=>de._appendNormalizedContour(l.contour,!1,o,t))}),o}static _createContourEntries(e){return e.filter(t=>t.segments.length>0).map((t,i)=>{const n=de._samplePoint(t),r=e.reduce((s,o)=>o===t||o.points.length<3?s:de._pointInPolygon(n,o.points)?s+1:s,0);return{contour:t,index:i,depth:r,absArea:Math.abs(de._signedArea(t.points))}})}static _findParentSolid(e,t){const i=de._samplePoint(e.contour);return t.filter(n=>de._pointInPolygon(i,n.contour.points)).sort((n,r)=>n.absArea-r.absArea)[0]}static _appendNormalizedContour(e,t,i,n){const s=de._signedArea(e.points)<0===t?e.segments:de._reverseSegments(e.segments);de._appendContour(s,i,n)}static _splitContours(e){const t=[];let i=null,n=null;const r=()=>{i&&i.segments.length>0&&t.push(i),i=null,n=null};return e.forEach(s=>{if(s.type==="M"){r(),n={x:s.x,y:s.y},i={segments:[],points:[n]};return}if(!i||!n)return;if(s.type==="Z"){r();return}const o={x:s.x,y:s.y};s.type==="L"?i.segments.push({type:"L",start:n,end:o}):s.type==="Q"?i.segments.push({type:"Q",start:n,end:o,x1:s.x1,y1:s.y1}):s.type==="C"&&i.segments.push({type:"C",start:n,end:o,x1:s.x1,y1:s.y1,x2:s.x2,y2:s.y2}),n=o,i.points.push(o)}),r(),t}static _appendContour(e,t,i){const n=e[0].start;t.push(`m ${i(n.x)} ${i(n.y)}`),e.forEach(r=>{r.type==="L"?t.push(`l ${i(r.end.x)} ${i(r.end.y)}`):r.type==="Q"?t.push(`q ${i(r.end.x)} ${i(r.end.y)} ${i(r.x1)} ${i(r.y1)}`):t.push(`b ${i(r.end.x)} ${i(r.end.y)} ${i(r.x1)} ${i(r.y1)} ${i(r.x2)} ${i(r.y2)}`)}),t.push("z")}static _reverseSegments(e){return e.slice().reverse().map(t=>t.type==="L"?{type:"L",start:t.end,end:t.start}:t.type==="Q"?{type:"Q",start:t.end,end:t.start,x1:t.x1,y1:t.y1}:{type:"C",start:t.end,end:t.start,x1:t.x2,y1:t.y2,x2:t.x1,y2:t.y1})}static _signedArea(e){let t=0;for(let i=0,n=e.length-1;i<e.length;n=i++)t+=e[n].x*e[i].y-e[i].x*e[n].y;return t/2}static _samplePoint(e){return e.points[0]}static _pointInPolygon(e,t){let i=!1;for(let n=0,r=t.length-1;n<t.length;r=n++){const s=t[n],o=t[r];s.y>e.y!=o.y>e.y&&e.x<(o.x-s.x)*(e.y-s.y)/(o.y-s.y)+s.x&&(i=!i)}return i}}const It="__BIM_ENGINE_SDK_ASSET_BASE__",Pt="https://unpkg.com/iflow-engine-base@3.9.16/dist/";function Dt(){return typeof globalThis<"u"?globalThis:null}function Re(k){return k.endsWith("/")?k:`${k}/`}function He(k){return/^(?:[a-z][a-z\d+\-.]*:)?\/\//i.test(k)||/^(?:data|blob):/i.test(k)}function zt(k){return k.startsWith("./")||k.startsWith("../")}function Ie(k,e){try{return e?new URL(k,e).toString():new URL(k).toString()}catch{return null}}function $e(){return typeof document<"u"&&document.baseURI?document.baseURI:typeof location<"u"&&location.href?location.href:null}function Bt(k,e){const t=Re(k);if(He(t))return t;const i=Pe(e)||Rt()||$e();return Ie(t,i||void 0)||t}function Pe(k){if(!k)return null;try{const e=$e(),t=Ie(k,e||void 0)||k,i=new URL(".",t),n=i.pathname.replace(/\\/g,"/");return n.endsWith("/chunks/")?new URL("../",i).toString():e&&/\/src\//.test(n)?Re(e):i.toString()}catch{return null}}function Rt(){if(typeof document>"u")return null;const k=document.currentScript;if(k?.src)return Pe(k.src);const e=document.getElementsByTagName("script");for(let t=e.length-1;t>=0;t-=1){const i=e[t]?.src;if(i&&/(?:bim-engine-sdk|iflow-engine-base|dwg-preview|gaussian)\.(?:es|umd)\.js(?:[?#].*)?$/.test(i))return Pe(i)}return null}function Nt(k){const t=Dt()?.[It];return typeof t=="string"&&t.length>0?Bt(t,k):Re(Pt)}function xe(k,e){if(He(k))return k;if(zt(k)){const n=Ie(k,Pe(e)||void 0);if(n)return n}const t=k.replace(/^\/+/,""),i=Nt(e);return Ie(t,i)||t}class Ot{panel=null;listEl=null;isVisible=!1;delegate;constructor(e,t){this.delegate=t,this._buildPanel(e)}show(){this.panel&&(this.panel.style.display="flex",this.isVisible=!0)}hide(){this.panel&&(this.panel.style.display="none",this.isVisible=!1)}toggle(){this.isVisible?this.hide():this.show()}refresh(){this._renderList()}_buildPanel(e){const t=document.createElement("div");t.style.cssText=`
66
66
  position:absolute; top:10px; right:10px;
67
67
  width:220px; max-height:480px;
68
68
  background:var(--e2d-bg,#1e1f22);
@@ -109,15 +109,15 @@
109
109
  <path d="M2 2L14 14" stroke="currentColor" stroke-width="1.2"/>
110
110
  <path d="M8 3C4.5 3 1.5 8 1.5 8C2.2 9.3 3.3 10.5 4.5 11.5" stroke="currentColor" stroke-width="1.2"/>
111
111
  <path d="M11.5 11.5C12.7 10.5 13.8 9.3 14.5 8C14.5 8 11.5 3 8 3" stroke="currentColor" stroke-width="1.2"/>
112
- </svg>`}_colorToHex(e){return"#"+e.toString(16).padStart(6,"0")}_makeDraggable(e,t){t.onmousedown=i=>{i.preventDefault();const n=e.getBoundingClientRect(),r=e.offsetParent?.getBoundingClientRect()??{left:0,top:0};e.style.left=n.left-r.left+"px",e.style.top=n.top-r.top+"px",e.style.right="auto",e.style.bottom="auto";const s=i.clientX-n.left,o=i.clientY-n.top,a=c=>{e.style.left=c.clientX-s-r.left+"px",e.style.top=c.clientY-o-r.top+"px"},l=()=>{document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",l)};document.addEventListener("mousemove",a),document.addEventListener("mouseup",l)}}dispose(){this.panel?.remove(),this.panel=null,this.listEl=null}}class He{engine;layerMap=new Map;panelUI=null;constructor(e){this.engine=e;const t=document.getElementById(e?.options?.containerId??"")??e?.container??null;t&&(this.panelUI=new Pt(t,this))}_loadLayers(e=this.engine.dwgData?.layers??[]){this.layerMap.clear();for(const t of e)this.layerMap.set(t.name,{...t});this.panelUI?.refresh()}syncFromModel(e){e?.length>0&&(this._loadLayers(e),this.panelUI?.refresh())}getLayers(){return Array.from(this.layerMap.values())}getDisplayColor(e){return this.engine.modelToolModule2d?.getDisplayColor(e)??e}refresh(){this.panelUI?.refresh()}setLayerVisible(e,t){const i=this.layerMap.get(e);i&&(i.visible=t),this._applyVisibility(e,t),t||this.clearInteractiveStateForLayer(e)}toggleLayer(e){const t=this.layerMap.get(e);if(!t)return!0;const i=!t.visible;return this.setLayerVisible(e,i),i}setAllLayersVisible(e){for(const t of this.layerMap.keys()){const i=this.layerMap.get(t);i.visible=e}this.applyLayerVisibility()}isAllVisible(){return Array.from(this.layerMap.values()).every(e=>e.visible)}isLayerVisible(e){return e?this.layerMap.get(e)?.visible!==!1:!0}isModelVisibleByLayer(e){const t=this.engine.loaderModule2d?.model?.nodeMap?.get(String(e))??this.engine.loaderModule2d?.model?.nodeMap?.get(e);return!t||t.length===0?!0:t.some(i=>{const n=this.getNodeObject(i);return this.areNodeLayersVisible(i)&&n?.visible!==!1})}_applyVisibility(e,t){this.applyPrimaryLayerObjectVisibility(e,t),this.applyDependentLayerVisibility()}applyLayerVisibility(){for(const[e,t]of this.layerMap)this.applyPrimaryLayerObjectVisibility(e,t.visible!==!1);this.applyDependentLayerVisibility()}applyPrimaryLayerObjectVisibility(e,t){const i=this.engine?.modelGroup??this.engine?.scene;if(!i)return;const n=e+"||";i.traverse(r=>{r.name?.startsWith(n)&&(r.visible=t)})}applyDependentLayerVisibility(){const e=this.engine.loaderModule2d?.model?.nodeMap;e&&e.forEach(t=>{t?.forEach(i=>{const n=this.getNodeLayerDeps(i);n.length<=1||this.setNodeVisible(i,n.every(r=>this.isLayerVisible(r)))})})}setNodeVisible(e,t){const i=this.getNodeObject(e);if(!i||!e?.indexes)return;if(i.isLineSegments){const r=i.geometry?.attributes?.position?.array,s=i.clonePoints;if(!r||!s)return;for(let o=e.indexes[1];o<e.indexes[2];o+=1)r[o]=t?s[o]:NaN;i.geometry.attributes.position.needsUpdate=!0;return}this.engine.modelToolModule2d?.split_merge_model?.(i);const n=i.geometry?.groups?.[e.indexes[1]];n&&(n.materialIndex=t?0:-1)}areNodeLayersVisible(e){return this.getNodeLayerDeps(e).every(t=>this.isLayerVisible(t))}getNodeLayerDeps(e){const t=Array.isArray(e?.layerDeps)&&e.layerDeps.length>0?e.layerDeps:[e?.layer];return Array.from(new Set(t.map(i=>String(i??"")).filter(Boolean)))}getNodeObject(e){return e?.object??e?.group?.children?.[e.indexes?.[0]]??this.engine.modelGroup?.children?.[e.indexes?.[0]]}clearInteractiveStateForLayer(e){const t=[...this.engine.engineStatus2d?.highlightModels??[],...this.engine.engineStatus2d?.highlightHoverModels??[]];t.length===0||!t.some(n=>(this.engine.loaderModule2d?.model?.nodeMap?.get(String(n))??this.engine.loaderModule2d?.model?.nodeMap?.get(n))?.some(s=>this.getNodeLayerDeps(s).includes(e)))||(this.engine.modelToolModule2d?.unHighlightModelHover?.(),this.engine.modelToolModule2d?.unhighlightAllModels?.())}show(){this.panelUI?.show()}hide(){this.panelUI?.hide()}toggle(){this.panelUI?.toggle()}dispose(){this.panelUI?.dispose(),this.panelUI=null,this.layerMap.clear()}}function ke(k){return Array.isArray(k)?new _.Vector3(k[0]??0,k[1]??0,k[2]??0):new _.Vector3(k?.x??0,k?.y??0,k?.z??0)}function _e(k){return k?(k.computeBoundingBox(),{min:k.boundingBox?.min.clone()??new _.Vector3,max:k.boundingBox?.max.clone()??new _.Vector3}):{min:new _.Vector3,max:new _.Vector3}}function Re(k,e,t){const i=new _.Vector3(k[0]??0,k[1]??0,k[2]??0),n=new _.Euler(0,0,t??0),r=new _.Vector3(e[0]??1,e[1]??1,e[2]??1),s=new _.Quaternion().setFromEuler(n);return new _.Matrix4().compose(i,s,r)}function zt(k){return Array.isArray(k?.transformMatrix)&&k.transformMatrix.length===16?new _.Matrix4().fromArray(k.transformMatrix):Re(k.position??[0,0,0],k.scale??[1,1,1],k.rotation??0)}function $e(k){if(k.length===0)return{min:new _.Vector3,max:new _.Vector3};const e=new _.Vector3(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),t=new _.Vector3(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY);return k.forEach(i=>{e.x=Math.min(e.x,i.x),e.y=Math.min(e.y,i.y),e.z=Math.min(e.z,i.z),t.x=Math.max(t.x,i.x),t.y=Math.max(t.y,i.y),t.z=Math.max(t.z,i.z)}),{min:e,max:t}}class Ze{constructor(e){this.geometryFactory=e}cache=new Map;blockIndex=new Map;setBlocks(e){this.cache.clear(),this.blockIndex.clear(),(e??[]).forEach(t=>{t?.name&&this.blockIndex.set(t.name,t),t?.id&&this.blockIndex.set(t.id,t)})}clearCache(){this.cache.clear()}flattenRootEntities(e){return Array.from(this.iterateRootEntities(e))}*iterateRootEntities(e){yield*this.iterateEntities(e??[],new _.Matrix4,0)}flattenBlock(e,t,i){const n=this.cache.get(t);if(n)return n;const r=e.origin??[0,0,0],s=new _.Matrix4().makeTranslation(-r[0],-r[1],-(r[2]??0)),o=this.flattenEntities(e.entities??[],s,i);return this.cache.set(t,o),e.name&&this.cache.set(e.name,o),e.id&&this.cache.set(e.id,o),o}flattenEntities(e,t,i){return Array.from(this.iterateEntities(e,t,i))}*iterateEntities(e,t,i){if(i>20){console.warn("[LoaderModule2d] Block nesting is too deep, skip nested INSERT.");return}for(const n of e)if(n?.visible!==!1){if(n.type==="INSERT"){const r=this.getBlockItems(n.blockId,i+1),s=t.clone().multiply(zt(n)),o=this.getClipPolygon(n,t);for(const a of r){const l=this.cloneRenderItem(a,s,n),c=o?this.clipRenderItem(l,o):l;c&&(yield c)}o&&n.displayClipBoundary===!0&&(yield this.createClipBoundaryItem(n,o));continue}for(const r of this.geometryFactory.create(n,t))yield r}}getBlockItems(e,t){const i=this.cache.get(e);if(i)return i;const n=this.blockIndex.get(e);return n?this.flattenBlock(n,n.name??n.id??e,t):(console.warn(`[LoaderModule2d] Missing block: ${e}`),[])}cloneRenderItem(e,t,i){const n=e.layer==="0"&&i?.layer?i.layer:e.layer??i?.layer,r=e.color==null||e.color===0?i?.color??e.color??0:e.color,s=i?.linkId??i?.id??e.linkId,o=this.mergeLayerDeps(e.layerDeps??[e.layer],i?.layer,n);if(e.kind==="line")return{...e,layer:n,layerDeps:o,color:r,linkId:s,points:(e.points??[]).map(f=>f.clone().applyMatrix4(t))};const a=e.geometry?.clone();a?.applyMatrix4(t);const l=e.textAnchor?.clone().applyMatrix4(t),c=_e(a);return{...e,layer:n,layerDeps:o,color:r,linkId:s,geometry:a,min:c.min,max:c.max,textAnchor:l}}mergeLayerDeps(e,t,i){const n=new Set,r=e.some(s=>String(s??"")==="0")&&!!t;return e.forEach(s=>{const o=String(s??"");!o||r&&o==="0"||n.add(o)}),t&&n.add(String(t)),i&&n.add(String(i)),Array.from(n)}getClipPolygon(e,t){if(e?.clipping!==!0||!Array.isArray(e?.clipBoundary))return null;const i=e.clipBoundary.map(r=>new _.Vector3(r?.[0]??r?.x??0,r?.[1]??r?.y??0,r?.[2]??r?.z??0)).filter(r=>Number.isFinite(r.x)&&Number.isFinite(r.y));if(i.length<3)return null;const n=this.getClipBoundaryMatrix(e,t);return n?i.map(r=>r.clone().applyMatrix4(n)):i}getClipBoundaryMatrix(e,t){return!Array.isArray(e?.clipInsertTransform)||e.clipInsertTransform.length!==16?null:t.clone().multiply(new _.Matrix4().fromArray(e.clipInsertTransform))}clipRenderItem(e,t){if(e.kind==="line"){const r=this.clipLinePoints(e.points??[],t);if(r.length===0)return null;const s=this.getPointsBounds(r);return{...e,points:r,min:s.min,max:s.max}}const i=this.clipGeometry(e.geometry,t);if(!i)return null;const n=_e(i);return{...e,geometry:i,min:n.min,max:n.max}}clipLinePoints(e,t){const i=[];for(let n=0;n<e.length-1;n+=2)this.clipSegmentByPolygon(e[n],e[n+1],t).forEach(r=>{i.push(r[0],r[1])});return i}clipSegmentByPolygon(e,t,i){const n=t.clone().sub(e),r=[0,1];for(let a=0;a<i.length;a+=1){const l=this.getSegmentIntersectionParameter(e,t,i[a],i[(a+1)%i.length]);l!=null&&l>1e-9&&l<1-1e-9&&r.push(l)}const s=Array.from(new Set(r.map(a=>Number(a.toFixed(12))))).sort((a,l)=>a-l),o=[];for(let a=0;a<s.length-1;a+=1){const l=s[a],c=s[a+1];if(c-l<1e-10)continue;const f=(l+c)*.5,p=e.clone().add(n.clone().multiplyScalar(f));this.isPointInPolygon(p,i)&&o.push([e.clone().add(n.clone().multiplyScalar(l)),e.clone().add(n.clone().multiplyScalar(c))])}return o}getSegmentIntersectionParameter(e,t,i,n){const r=t.x-e.x,s=t.y-e.y,o=n.x-i.x,a=n.y-i.y,l=r*a-s*o;if(Math.abs(l)<1e-12)return null;const c=i.x-e.x,f=i.y-e.y,p=(c*a-f*o)/l,d=(c*s-f*r)/l;return p>=-1e-9&&p<=1+1e-9&&d>=-1e-9&&d<=1+1e-9?_.MathUtils.clamp(p,0,1):null}isPointInPolygon(e,t){let i=!1;for(let n=0,r=t.length-1;n<t.length;r=n,n+=1){const s=t[n],o=t[r];if(this.isPointOnSegment(e,s,o))return!0;s.y>e.y!=o.y>e.y&&e.x<(o.x-s.x)*(e.y-s.y)/(o.y-s.y)+s.x&&(i=!i)}return i}isPointOnSegment(e,t,i){const n=(i.x-t.x)*(e.y-t.y)-(i.y-t.y)*(e.x-t.x);if(Math.abs(n)>1e-8)return!1;const r=(e.x-t.x)*(i.x-t.x)+(e.y-t.y)*(i.y-t.y),s=(i.x-t.x)**2+(i.y-t.y)**2;return r>=-1e-8&&r<=s+1e-8}clipGeometry(e,t){if(!e?.attributes?.position)return null;const i=e.attributes.position,n=e.attributes.uv,r=e.index,s=[],o=[],a=!!n,l=this.triangulateClipPolygon(t),c=d=>({position:new _.Vector3(i.getX(d),i.getY(d),i.getZ(d)),uv:a?new _.Vector2(n.getX(d),n.getY(d)):void 0}),f=r?r.count:i.count;for(let d=0;d<f;d+=3){const y=r?r.getX(d):d,h=r?r.getX(d+1):d+1,g=r?r.getX(d+2):d+2,v=[c(y),c(h),c(g)];l.forEach(b=>{const M=this.clipTriangle(v,b);if(!(M.length<3))for(let S=1;S<M.length-1;S+=1)[M[0],M[S],M[S+1]].forEach(E=>{s.push(E.position.x,E.position.y,E.position.z),a&&E.uv&&o.push(E.uv.x,E.uv.y)})})}if(s.length===0)return null;const p=new _.BufferGeometry;return p.setAttribute("position",new _.Float32BufferAttribute(s,3)),a&&p.setAttribute("uv",new _.Float32BufferAttribute(o,2)),p.computeVertexNormals(),p}triangulateClipPolygon(e){const t=e.map(n=>new _.Vector2(n.x,n.y)),i=_.ShapeUtils.triangulateShape(t,[]);if(i.length===0){const n=[];for(let r=1;r<e.length-1;r+=1)n.push([e[0],e[r],e[r+1]]);return n}return i.map(n=>n.map(r=>e[r]))}clipTriangle(e,t){const i=this.getPolygonOrientation(t);let n=e;for(let r=0;r<t.length;r+=1){const s=t[r],o=t[(r+1)%t.length],a=n;if(n=[],a.length===0)break;let l=a[a.length-1],c=this.isInsideClipEdge(l.position,s,o,i);a.forEach(f=>{const p=this.isInsideClipEdge(f.position,s,o,i);p!==c&&n.push(this.intersectClipEdge(l,f,s,o,i)),p&&n.push(f),l=f,c=p})}return n}isInsideClipEdge(e,t,i,n){const r=i.x-t.x,s=i.y-t.y;return n*(r*(e.y-t.y)-s*(e.x-t.x))>=-1e-9}intersectClipEdge(e,t,i,n,r){const s=n.x-i.x,o=n.y-i.y,a=r*(s*(e.position.y-i.y)-o*(e.position.x-i.x)),l=r*(s*(t.position.y-i.y)-o*(t.position.x-i.x)),c=Math.abs(a-l)<1e-12?0:a/(a-l);return{position:e.position.clone().lerp(t.position,c),uv:e.uv&&t.uv?e.uv.clone().lerp(t.uv,c):void 0}}getPolygonOrientation(e){let t=0;for(let i=0;i<e.length;i+=1){const n=e[i],r=e[(i+1)%e.length];t+=n.x*r.y-r.x*n.y}return t>=0?1:-1}getPointsBounds(e){const t=new _.Vector3(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),i=new _.Vector3(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY);return e.forEach(n=>{t.min(n),i.max(n)}),{min:t,max:i}}createClipBoundaryItem(e,t){const i=[];for(let r=0;r<t.length;r+=1)i.push(t[r].clone(),t[(r+1)%t.length].clone());const n=this.getPointsBounds(i);return{kind:"line",layer:e.layer??"0",layerDeps:e.layer?[e.layer]:["0"],color:e.clipBoundaryColor??16711935,lineType:"Continuous",linkId:e.linkId??e.id,points:i,min:n.min,max:n.max,info:e}}}function Pe(k){throw new Error('Could not dynamically require "'+k+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var Ne={exports:{}};var Ye;function Dt(){return Ye||(Ye=1,(function(k,e){(function(t){k.exports=t()})(function(){return(function t(i,n,r){function s(l,c){if(!n[l]){if(!i[l]){var f=typeof Pe=="function"&&Pe;if(!c&&f)return f(l,!0);if(o)return o(l,!0);var p=new Error("Cannot find module '"+l+"'");throw p.code="MODULE_NOT_FOUND",p}var d=n[l]={exports:{}};i[l][0].call(d.exports,function(y){var h=i[l][1][y];return s(h||y)},d,d.exports,t,i,n,r)}return n[l].exports}for(var o=typeof Pe=="function"&&Pe,a=0;a<r.length;a++)s(r[a]);return s})({1:[function(t,i,n){var r=t("./utils"),s=t("./support"),o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.encode=function(a){for(var l,c,f,p,d,y,h,g=[],v=0,b=a.length,M=b,S=r.getTypeOf(a)!=="string";v<a.length;)M=b-v,f=S?(l=a[v++],c=v<b?a[v++]:0,v<b?a[v++]:0):(l=a.charCodeAt(v++),c=v<b?a.charCodeAt(v++):0,v<b?a.charCodeAt(v++):0),p=l>>2,d=(3&l)<<4|c>>4,y=1<M?(15&c)<<2|f>>6:64,h=2<M?63&f:64,g.push(o.charAt(p)+o.charAt(d)+o.charAt(y)+o.charAt(h));return g.join("")},n.decode=function(a){var l,c,f,p,d,y,h=0,g=0,v="data:";if(a.substr(0,v.length)===v)throw new Error("Invalid base64 input, it looks like a data url.");var b,M=3*(a=a.replace(/[^A-Za-z0-9+/=]/g,"")).length/4;if(a.charAt(a.length-1)===o.charAt(64)&&M--,a.charAt(a.length-2)===o.charAt(64)&&M--,M%1!=0)throw new Error("Invalid base64 input, bad content length.");for(b=s.uint8array?new Uint8Array(0|M):new Array(0|M);h<a.length;)l=o.indexOf(a.charAt(h++))<<2|(p=o.indexOf(a.charAt(h++)))>>4,c=(15&p)<<4|(d=o.indexOf(a.charAt(h++)))>>2,f=(3&d)<<6|(y=o.indexOf(a.charAt(h++))),b[g++]=l,d!==64&&(b[g++]=c),y!==64&&(b[g++]=f);return b}},{"./support":30,"./utils":32}],2:[function(t,i,n){var r=t("./external"),s=t("./stream/DataWorker"),o=t("./stream/Crc32Probe"),a=t("./stream/DataLengthProbe");function l(c,f,p,d,y){this.compressedSize=c,this.uncompressedSize=f,this.crc32=p,this.compression=d,this.compressedContent=y}l.prototype={getContentWorker:function(){var c=new s(r.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a("data_length")),f=this;return c.on("end",function(){if(this.streamInfo.data_length!==f.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),c},getCompressedWorker:function(){return new s(r.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},l.createWorkerFrom=function(c,f,p){return c.pipe(new o).pipe(new a("uncompressedSize")).pipe(f.compressWorker(p)).pipe(new a("compressedSize")).withStreamInfo("compression",f)},i.exports=l},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(t,i,n){var r=t("./stream/GenericWorker");n.STORE={magic:"\0\0",compressWorker:function(){return new r("STORE compression")},uncompressWorker:function(){return new r("STORE decompression")}},n.DEFLATE=t("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(t,i,n){var r=t("./utils"),s=(function(){for(var o,a=[],l=0;l<256;l++){o=l;for(var c=0;c<8;c++)o=1&o?3988292384^o>>>1:o>>>1;a[l]=o}return a})();i.exports=function(o,a){return o!==void 0&&o.length?r.getTypeOf(o)!=="string"?(function(l,c,f,p){var d=s,y=p+f;l^=-1;for(var h=p;h<y;h++)l=l>>>8^d[255&(l^c[h])];return-1^l})(0|a,o,o.length,0):(function(l,c,f,p){var d=s,y=p+f;l^=-1;for(var h=p;h<y;h++)l=l>>>8^d[255&(l^c.charCodeAt(h))];return-1^l})(0|a,o,o.length,0):0}},{"./utils":32}],5:[function(t,i,n){n.base64=!1,n.binary=!1,n.dir=!1,n.createFolders=!0,n.date=null,n.compression=null,n.compressionOptions=null,n.comment=null,n.unixPermissions=null,n.dosPermissions=null},{}],6:[function(t,i,n){var r=null;r=typeof Promise<"u"?Promise:t("lie"),i.exports={Promise:r}},{lie:37}],7:[function(t,i,n){var r=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Uint32Array<"u",s=t("pako"),o=t("./utils"),a=t("./stream/GenericWorker"),l=r?"uint8array":"array";function c(f,p){a.call(this,"FlateWorker/"+f),this._pako=null,this._pakoAction=f,this._pakoOptions=p,this.meta={}}n.magic="\b\0",o.inherits(c,a),c.prototype.processChunk=function(f){this.meta=f.meta,this._pako===null&&this._createPako(),this._pako.push(o.transformTo(l,f.data),!1)},c.prototype.flush=function(){a.prototype.flush.call(this),this._pako===null&&this._createPako(),this._pako.push([],!0)},c.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},c.prototype._createPako=function(){this._pako=new s[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var f=this;this._pako.onData=function(p){f.push({data:p,meta:f.meta})}},n.compressWorker=function(f){return new c("Deflate",f)},n.uncompressWorker=function(){return new c("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(t,i,n){function r(d,y){var h,g="";for(h=0;h<y;h++)g+=String.fromCharCode(255&d),d>>>=8;return g}function s(d,y,h,g,v,b){var M,S,E=d.file,R=d.compression,z=b!==l.utf8encode,j=o.transformTo("string",b(E.name)),D=o.transformTo("string",l.utf8encode(E.name)),H=E.comment,q=o.transformTo("string",b(H)),C=o.transformTo("string",l.utf8encode(H)),B=D.length!==E.name.length,m=C.length!==H.length,O="",ee="",W="",te=E.dir,F=E.date,J={crc32:0,compressedSize:0,uncompressedSize:0};y&&!h||(J.crc32=d.crc32,J.compressedSize=d.compressedSize,J.uncompressedSize=d.uncompressedSize);var I=0;y&&(I|=8),z||!B&&!m||(I|=2048);var L=0,Q=0;te&&(L|=16),v==="UNIX"?(Q=798,L|=(function(Z,le){var pe=Z;return Z||(pe=le?16893:33204),(65535&pe)<<16})(E.unixPermissions,te)):(Q=20,L|=(function(Z){return 63&(Z||0)})(E.dosPermissions)),M=F.getUTCHours(),M<<=6,M|=F.getUTCMinutes(),M<<=5,M|=F.getUTCSeconds()/2,S=F.getUTCFullYear()-1980,S<<=4,S|=F.getUTCMonth()+1,S<<=5,S|=F.getUTCDate(),B&&(ee=r(1,1)+r(c(j),4)+D,O+="up"+r(ee.length,2)+ee),m&&(W=r(1,1)+r(c(q),4)+C,O+="uc"+r(W.length,2)+W);var Y="";return Y+=`
113
- \0`,Y+=r(I,2),Y+=R.magic,Y+=r(M,2),Y+=r(S,2),Y+=r(J.crc32,4),Y+=r(J.compressedSize,4),Y+=r(J.uncompressedSize,4),Y+=r(j.length,2),Y+=r(O.length,2),{fileRecord:f.LOCAL_FILE_HEADER+Y+j+O,dirRecord:f.CENTRAL_FILE_HEADER+r(Q,2)+Y+r(q.length,2)+"\0\0\0\0"+r(L,4)+r(g,4)+j+O+q}}var o=t("../utils"),a=t("../stream/GenericWorker"),l=t("../utf8"),c=t("../crc32"),f=t("../signature");function p(d,y,h,g){a.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=y,this.zipPlatform=h,this.encodeFileName=g,this.streamFiles=d,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}o.inherits(p,a),p.prototype.push=function(d){var y=d.meta.percent||0,h=this.entriesCount,g=this._sources.length;this.accumulate?this.contentBuffer.push(d):(this.bytesWritten+=d.data.length,a.prototype.push.call(this,{data:d.data,meta:{currentFile:this.currentFile,percent:h?(y+100*(h-g-1))/h:100}}))},p.prototype.openedSource=function(d){this.currentSourceOffset=this.bytesWritten,this.currentFile=d.file.name;var y=this.streamFiles&&!d.file.dir;if(y){var h=s(d,y,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:h.fileRecord,meta:{percent:0}})}else this.accumulate=!0},p.prototype.closedSource=function(d){this.accumulate=!1;var y=this.streamFiles&&!d.file.dir,h=s(d,y,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(h.dirRecord),y)this.push({data:(function(g){return f.DATA_DESCRIPTOR+r(g.crc32,4)+r(g.compressedSize,4)+r(g.uncompressedSize,4)})(d),meta:{percent:100}});else for(this.push({data:h.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},p.prototype.flush=function(){for(var d=this.bytesWritten,y=0;y<this.dirRecords.length;y++)this.push({data:this.dirRecords[y],meta:{percent:100}});var h=this.bytesWritten-d,g=(function(v,b,M,S,E){var R=o.transformTo("string",E(S));return f.CENTRAL_DIRECTORY_END+"\0\0\0\0"+r(v,2)+r(v,2)+r(b,4)+r(M,4)+r(R.length,2)+R})(this.dirRecords.length,h,d,this.zipComment,this.encodeFileName);this.push({data:g,meta:{percent:100}})},p.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},p.prototype.registerPrevious=function(d){this._sources.push(d);var y=this;return d.on("data",function(h){y.processChunk(h)}),d.on("end",function(){y.closedSource(y.previous.streamInfo),y._sources.length?y.prepareNextSource():y.end()}),d.on("error",function(h){y.error(h)}),this},p.prototype.resume=function(){return!!a.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},p.prototype.error=function(d){var y=this._sources;if(!a.prototype.error.call(this,d))return!1;for(var h=0;h<y.length;h++)try{y[h].error(d)}catch{}return!0},p.prototype.lock=function(){a.prototype.lock.call(this);for(var d=this._sources,y=0;y<d.length;y++)d[y].lock()},i.exports=p},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(t,i,n){var r=t("../compressions"),s=t("./ZipFileWorker");n.generateWorker=function(o,a,l){var c=new s(a.streamFiles,l,a.platform,a.encodeFileName),f=0;try{o.forEach(function(p,d){f++;var y=(function(b,M){var S=b||M,E=r[S];if(!E)throw new Error(S+" is not a valid compression method !");return E})(d.options.compression,a.compression),h=d.options.compressionOptions||a.compressionOptions||{},g=d.dir,v=d.date;d._compressWorker(y,h).withStreamInfo("file",{name:p,dir:g,date:v,comment:d.comment||"",unixPermissions:d.unixPermissions,dosPermissions:d.dosPermissions}).pipe(c)}),c.entriesCount=f}catch(p){c.error(p)}return c}},{"../compressions":3,"./ZipFileWorker":8}],10:[function(t,i,n){function r(){if(!(this instanceof r))return new r;if(arguments.length)throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");this.files=Object.create(null),this.comment=null,this.root="",this.clone=function(){var s=new r;for(var o in this)typeof this[o]!="function"&&(s[o]=this[o]);return s}}(r.prototype=t("./object")).loadAsync=t("./load"),r.support=t("./support"),r.defaults=t("./defaults"),r.version="3.10.1",r.loadAsync=function(s,o){return new r().loadAsync(s,o)},r.external=t("./external"),i.exports=r},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(t,i,n){var r=t("./utils"),s=t("./external"),o=t("./utf8"),a=t("./zipEntries"),l=t("./stream/Crc32Probe"),c=t("./nodejsUtils");function f(p){return new s.Promise(function(d,y){var h=p.decompressed.getContentWorker().pipe(new l);h.on("error",function(g){y(g)}).on("end",function(){h.streamInfo.crc32!==p.decompressed.crc32?y(new Error("Corrupted zip : CRC32 mismatch")):d()}).resume()})}i.exports=function(p,d){var y=this;return d=r.extend(d||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:o.utf8decode}),c.isNode&&c.isStream(p)?s.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")):r.prepareContent("the loaded zip file",p,!0,d.optimizedBinaryString,d.base64).then(function(h){var g=new a(d);return g.load(h),g}).then(function(h){var g=[s.Promise.resolve(h)],v=h.files;if(d.checkCRC32)for(var b=0;b<v.length;b++)g.push(f(v[b]));return s.Promise.all(g)}).then(function(h){for(var g=h.shift(),v=g.files,b=0;b<v.length;b++){var M=v[b],S=M.fileNameStr,E=r.resolve(M.fileNameStr);y.file(E,M.decompressed,{binary:!0,optimizedBinaryString:!0,date:M.date,dir:M.dir,comment:M.fileCommentStr.length?M.fileCommentStr:null,unixPermissions:M.unixPermissions,dosPermissions:M.dosPermissions,createFolders:d.createFolders}),M.dir||(y.file(E).unsafeOriginalName=S)}return g.zipComment.length&&(y.comment=g.zipComment),y})}},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(t,i,n){var r=t("../utils"),s=t("../stream/GenericWorker");function o(a,l){s.call(this,"Nodejs stream input adapter for "+a),this._upstreamEnded=!1,this._bindStream(l)}r.inherits(o,s),o.prototype._bindStream=function(a){var l=this;(this._stream=a).pause(),a.on("data",function(c){l.push({data:c,meta:{percent:0}})}).on("error",function(c){l.isPaused?this.generatedError=c:l.error(c)}).on("end",function(){l.isPaused?l._upstreamEnded=!0:l.end()})},o.prototype.pause=function(){return!!s.prototype.pause.call(this)&&(this._stream.pause(),!0)},o.prototype.resume=function(){return!!s.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},i.exports=o},{"../stream/GenericWorker":28,"../utils":32}],13:[function(t,i,n){var r=t("readable-stream").Readable;function s(o,a,l){r.call(this,a),this._helper=o;var c=this;o.on("data",function(f,p){c.push(f)||c._helper.pause(),l&&l(p)}).on("error",function(f){c.emit("error",f)}).on("end",function(){c.push(null)})}t("../utils").inherits(s,r),s.prototype._read=function(){this._helper.resume()},i.exports=s},{"../utils":32,"readable-stream":16}],14:[function(t,i,n){i.exports={isNode:typeof Buffer<"u",newBufferFrom:function(r,s){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(r,s);if(typeof r=="number")throw new Error('The "data" argument must not be a number');return new Buffer(r,s)},allocBuffer:function(r){if(Buffer.alloc)return Buffer.alloc(r);var s=new Buffer(r);return s.fill(0),s},isBuffer:function(r){return Buffer.isBuffer(r)},isStream:function(r){return r&&typeof r.on=="function"&&typeof r.pause=="function"&&typeof r.resume=="function"}}},{}],15:[function(t,i,n){function r(E,R,z){var j,D=o.getTypeOf(R),H=o.extend(z||{},c);H.date=H.date||new Date,H.compression!==null&&(H.compression=H.compression.toUpperCase()),typeof H.unixPermissions=="string"&&(H.unixPermissions=parseInt(H.unixPermissions,8)),H.unixPermissions&&16384&H.unixPermissions&&(H.dir=!0),H.dosPermissions&&16&H.dosPermissions&&(H.dir=!0),H.dir&&(E=v(E)),H.createFolders&&(j=g(E))&&b.call(this,j,!0);var q=D==="string"&&H.binary===!1&&H.base64===!1;z&&z.binary!==void 0||(H.binary=!q),(R instanceof f&&R.uncompressedSize===0||H.dir||!R||R.length===0)&&(H.base64=!1,H.binary=!0,R="",H.compression="STORE",D="string");var C=null;C=R instanceof f||R instanceof a?R:y.isNode&&y.isStream(R)?new h(E,R):o.prepareContent(E,R,H.binary,H.optimizedBinaryString,H.base64);var B=new p(E,C,H);this.files[E]=B}var s=t("./utf8"),o=t("./utils"),a=t("./stream/GenericWorker"),l=t("./stream/StreamHelper"),c=t("./defaults"),f=t("./compressedObject"),p=t("./zipObject"),d=t("./generate"),y=t("./nodejsUtils"),h=t("./nodejs/NodejsStreamInputAdapter"),g=function(E){E.slice(-1)==="/"&&(E=E.substring(0,E.length-1));var R=E.lastIndexOf("/");return 0<R?E.substring(0,R):""},v=function(E){return E.slice(-1)!=="/"&&(E+="/"),E},b=function(E,R){return R=R!==void 0?R:c.createFolders,E=v(E),this.files[E]||r.call(this,E,null,{dir:!0,createFolders:R}),this.files[E]};function M(E){return Object.prototype.toString.call(E)==="[object RegExp]"}var S={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(E){var R,z,j;for(R in this.files)j=this.files[R],(z=R.slice(this.root.length,R.length))&&R.slice(0,this.root.length)===this.root&&E(z,j)},filter:function(E){var R=[];return this.forEach(function(z,j){E(z,j)&&R.push(j)}),R},file:function(E,R,z){if(arguments.length!==1)return E=this.root+E,r.call(this,E,R,z),this;if(M(E)){var j=E;return this.filter(function(H,q){return!q.dir&&j.test(H)})}var D=this.files[this.root+E];return D&&!D.dir?D:null},folder:function(E){if(!E)return this;if(M(E))return this.filter(function(D,H){return H.dir&&E.test(D)});var R=this.root+E,z=b.call(this,R),j=this.clone();return j.root=z.name,j},remove:function(E){E=this.root+E;var R=this.files[E];if(R||(E.slice(-1)!=="/"&&(E+="/"),R=this.files[E]),R&&!R.dir)delete this.files[E];else for(var z=this.filter(function(D,H){return H.name.slice(0,E.length)===E}),j=0;j<z.length;j++)delete this.files[z[j].name];return this},generate:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},generateInternalStream:function(E){var R,z={};try{if((z=o.extend(E||{},{streamFiles:!1,compression:"STORE",compressionOptions:null,type:"",platform:"DOS",comment:null,mimeType:"application/zip",encodeFileName:s.utf8encode})).type=z.type.toLowerCase(),z.compression=z.compression.toUpperCase(),z.type==="binarystring"&&(z.type="string"),!z.type)throw new Error("No output type specified.");o.checkSupport(z.type),z.platform!=="darwin"&&z.platform!=="freebsd"&&z.platform!=="linux"&&z.platform!=="sunos"||(z.platform="UNIX"),z.platform==="win32"&&(z.platform="DOS");var j=z.comment||this.comment||"";R=d.generateWorker(this,z,j)}catch(D){(R=new a("error")).error(D)}return new l(R,z.type||"string",z.mimeType)},generateAsync:function(E,R){return this.generateInternalStream(E).accumulate(R)},generateNodeStream:function(E,R){return(E=E||{}).type||(E.type="nodebuffer"),this.generateInternalStream(E).toNodejsStream(R)}};i.exports=S},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":12,"./nodejsUtils":14,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31,"./utils":32,"./zipObject":35}],16:[function(t,i,n){i.exports=t("stream")},{stream:void 0}],17:[function(t,i,n){var r=t("./DataReader");function s(o){r.call(this,o);for(var a=0;a<this.data.length;a++)o[a]=255&o[a]}t("../utils").inherits(s,r),s.prototype.byteAt=function(o){return this.data[this.zero+o]},s.prototype.lastIndexOfSignature=function(o){for(var a=o.charCodeAt(0),l=o.charCodeAt(1),c=o.charCodeAt(2),f=o.charCodeAt(3),p=this.length-4;0<=p;--p)if(this.data[p]===a&&this.data[p+1]===l&&this.data[p+2]===c&&this.data[p+3]===f)return p-this.zero;return-1},s.prototype.readAndCheckSignature=function(o){var a=o.charCodeAt(0),l=o.charCodeAt(1),c=o.charCodeAt(2),f=o.charCodeAt(3),p=this.readData(4);return a===p[0]&&l===p[1]&&c===p[2]&&f===p[3]},s.prototype.readData=function(o){if(this.checkOffset(o),o===0)return[];var a=this.data.slice(this.zero+this.index,this.zero+this.index+o);return this.index+=o,a},i.exports=s},{"../utils":32,"./DataReader":18}],18:[function(t,i,n){var r=t("../utils");function s(o){this.data=o,this.length=o.length,this.index=0,this.zero=0}s.prototype={checkOffset:function(o){this.checkIndex(this.index+o)},checkIndex:function(o){if(this.length<this.zero+o||o<0)throw new Error("End of data reached (data length = "+this.length+", asked index = "+o+"). Corrupted zip ?")},setIndex:function(o){this.checkIndex(o),this.index=o},skip:function(o){this.setIndex(this.index+o)},byteAt:function(){},readInt:function(o){var a,l=0;for(this.checkOffset(o),a=this.index+o-1;a>=this.index;a--)l=(l<<8)+this.byteAt(a);return this.index+=o,l},readString:function(o){return r.transformTo("string",this.readData(o))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var o=this.readInt(4);return new Date(Date.UTC(1980+(o>>25&127),(o>>21&15)-1,o>>16&31,o>>11&31,o>>5&63,(31&o)<<1))}},i.exports=s},{"../utils":32}],19:[function(t,i,n){var r=t("./Uint8ArrayReader");function s(o){r.call(this,o)}t("../utils").inherits(s,r),s.prototype.readData=function(o){this.checkOffset(o);var a=this.data.slice(this.zero+this.index,this.zero+this.index+o);return this.index+=o,a},i.exports=s},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(t,i,n){var r=t("./DataReader");function s(o){r.call(this,o)}t("../utils").inherits(s,r),s.prototype.byteAt=function(o){return this.data.charCodeAt(this.zero+o)},s.prototype.lastIndexOfSignature=function(o){return this.data.lastIndexOf(o)-this.zero},s.prototype.readAndCheckSignature=function(o){return o===this.readData(4)},s.prototype.readData=function(o){this.checkOffset(o);var a=this.data.slice(this.zero+this.index,this.zero+this.index+o);return this.index+=o,a},i.exports=s},{"../utils":32,"./DataReader":18}],21:[function(t,i,n){var r=t("./ArrayReader");function s(o){r.call(this,o)}t("../utils").inherits(s,r),s.prototype.readData=function(o){if(this.checkOffset(o),o===0)return new Uint8Array(0);var a=this.data.subarray(this.zero+this.index,this.zero+this.index+o);return this.index+=o,a},i.exports=s},{"../utils":32,"./ArrayReader":17}],22:[function(t,i,n){var r=t("../utils"),s=t("../support"),o=t("./ArrayReader"),a=t("./StringReader"),l=t("./NodeBufferReader"),c=t("./Uint8ArrayReader");i.exports=function(f){var p=r.getTypeOf(f);return r.checkSupport(p),p!=="string"||s.uint8array?p==="nodebuffer"?new l(f):s.uint8array?new c(r.transformTo("uint8array",f)):new o(r.transformTo("array",f)):new a(f)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(t,i,n){n.LOCAL_FILE_HEADER="PK",n.CENTRAL_FILE_HEADER="PK",n.CENTRAL_DIRECTORY_END="PK",n.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x07",n.ZIP64_CENTRAL_DIRECTORY_END="PK",n.DATA_DESCRIPTOR="PK\x07\b"},{}],24:[function(t,i,n){var r=t("./GenericWorker"),s=t("../utils");function o(a){r.call(this,"ConvertWorker to "+a),this.destType=a}s.inherits(o,r),o.prototype.processChunk=function(a){this.push({data:s.transformTo(this.destType,a.data),meta:a.meta})},i.exports=o},{"../utils":32,"./GenericWorker":28}],25:[function(t,i,n){var r=t("./GenericWorker"),s=t("../crc32");function o(){r.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}t("../utils").inherits(o,r),o.prototype.processChunk=function(a){this.streamInfo.crc32=s(a.data,this.streamInfo.crc32||0),this.push(a)},i.exports=o},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(t,i,n){var r=t("../utils"),s=t("./GenericWorker");function o(a){s.call(this,"DataLengthProbe for "+a),this.propName=a,this.withStreamInfo(a,0)}r.inherits(o,s),o.prototype.processChunk=function(a){if(a){var l=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=l+a.data.length}s.prototype.processChunk.call(this,a)},i.exports=o},{"../utils":32,"./GenericWorker":28}],27:[function(t,i,n){var r=t("../utils"),s=t("./GenericWorker");function o(a){s.call(this,"DataWorker");var l=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,a.then(function(c){l.dataIsReady=!0,l.data=c,l.max=c&&c.length||0,l.type=r.getTypeOf(c),l.isPaused||l._tickAndRepeat()},function(c){l.error(c)})}r.inherits(o,s),o.prototype.cleanUp=function(){s.prototype.cleanUp.call(this),this.data=null},o.prototype.resume=function(){return!!s.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,r.delay(this._tickAndRepeat,[],this)),!0)},o.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(r.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},o.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var a=null,l=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":a=this.data.substring(this.index,l);break;case"uint8array":a=this.data.subarray(this.index,l);break;case"array":case"nodebuffer":a=this.data.slice(this.index,l)}return this.index=l,this.push({data:a,meta:{percent:this.max?this.index/this.max*100:0}})},i.exports=o},{"../utils":32,"./GenericWorker":28}],28:[function(t,i,n){function r(s){this.name=s||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}r.prototype={push:function(s){this.emit("data",s)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(s){this.emit("error",s)}return!0},error:function(s){return!this.isFinished&&(this.isPaused?this.generatedError=s:(this.isFinished=!0,this.emit("error",s),this.previous&&this.previous.error(s),this.cleanUp()),!0)},on:function(s,o){return this._listeners[s].push(o),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(s,o){if(this._listeners[s])for(var a=0;a<this._listeners[s].length;a++)this._listeners[s][a].call(this,o)},pipe:function(s){return s.registerPrevious(this)},registerPrevious:function(s){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.streamInfo=s.streamInfo,this.mergeStreamInfo(),this.previous=s;var o=this;return s.on("data",function(a){o.processChunk(a)}),s.on("end",function(){o.end()}),s.on("error",function(a){o.error(a)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var s=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),s=!0),this.previous&&this.previous.resume(),!s},flush:function(){},processChunk:function(s){this.push(s)},withStreamInfo:function(s,o){return this.extraStreamInfo[s]=o,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var s in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,s)&&(this.streamInfo[s]=this.extraStreamInfo[s])},lock:function(){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var s="Worker "+this.name;return this.previous?this.previous+" -> "+s:s}},i.exports=r},{}],29:[function(t,i,n){var r=t("../utils"),s=t("./ConvertWorker"),o=t("./GenericWorker"),a=t("../base64"),l=t("../support"),c=t("../external"),f=null;if(l.nodestream)try{f=t("../nodejs/NodejsStreamOutputAdapter")}catch{}function p(y,h){return new c.Promise(function(g,v){var b=[],M=y._internalType,S=y._outputType,E=y._mimeType;y.on("data",function(R,z){b.push(R),h&&h(z)}).on("error",function(R){b=[],v(R)}).on("end",function(){try{var R=(function(z,j,D){switch(z){case"blob":return r.newBlob(r.transformTo("arraybuffer",j),D);case"base64":return a.encode(j);default:return r.transformTo(z,j)}})(S,(function(z,j){var D,H=0,q=null,C=0;for(D=0;D<j.length;D++)C+=j[D].length;switch(z){case"string":return j.join("");case"array":return Array.prototype.concat.apply([],j);case"uint8array":for(q=new Uint8Array(C),D=0;D<j.length;D++)q.set(j[D],H),H+=j[D].length;return q;case"nodebuffer":return Buffer.concat(j);default:throw new Error("concat : unsupported type '"+z+"'")}})(M,b),E);g(R)}catch(z){v(z)}b=[]}).resume()})}function d(y,h,g){var v=h;switch(h){case"blob":case"arraybuffer":v="uint8array";break;case"base64":v="string"}try{this._internalType=v,this._outputType=h,this._mimeType=g,r.checkSupport(v),this._worker=y.pipe(new s(v)),y.lock()}catch(b){this._worker=new o("error"),this._worker.error(b)}}d.prototype={accumulate:function(y){return p(this,y)},on:function(y,h){var g=this;return y==="data"?this._worker.on(y,function(v){h.call(g,v.data,v.meta)}):this._worker.on(y,function(){r.delay(h,arguments,g)}),this},resume:function(){return r.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(y){if(r.checkSupport("nodestream"),this._outputType!=="nodebuffer")throw new Error(this._outputType+" is not supported by this method");return new f(this,{objectMode:this._outputType!=="nodebuffer"},y)}},i.exports=d},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(t,i,n){if(n.base64=!0,n.array=!0,n.string=!0,n.arraybuffer=typeof ArrayBuffer<"u"&&typeof Uint8Array<"u",n.nodebuffer=typeof Buffer<"u",n.uint8array=typeof Uint8Array<"u",typeof ArrayBuffer>"u")n.blob=!1;else{var r=new ArrayBuffer(0);try{n.blob=new Blob([r],{type:"application/zip"}).size===0}catch{try{var s=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);s.append(r),n.blob=s.getBlob("application/zip").size===0}catch{n.blob=!1}}}try{n.nodestream=!!t("readable-stream").Readable}catch{n.nodestream=!1}},{"readable-stream":16}],31:[function(t,i,n){for(var r=t("./utils"),s=t("./support"),o=t("./nodejsUtils"),a=t("./stream/GenericWorker"),l=new Array(256),c=0;c<256;c++)l[c]=252<=c?6:248<=c?5:240<=c?4:224<=c?3:192<=c?2:1;l[254]=l[254]=1;function f(){a.call(this,"utf-8 decode"),this.leftOver=null}function p(){a.call(this,"utf-8 encode")}n.utf8encode=function(d){return s.nodebuffer?o.newBufferFrom(d,"utf-8"):(function(y){var h,g,v,b,M,S=y.length,E=0;for(b=0;b<S;b++)(64512&(g=y.charCodeAt(b)))==55296&&b+1<S&&(64512&(v=y.charCodeAt(b+1)))==56320&&(g=65536+(g-55296<<10)+(v-56320),b++),E+=g<128?1:g<2048?2:g<65536?3:4;for(h=s.uint8array?new Uint8Array(E):new Array(E),b=M=0;M<E;b++)(64512&(g=y.charCodeAt(b)))==55296&&b+1<S&&(64512&(v=y.charCodeAt(b+1)))==56320&&(g=65536+(g-55296<<10)+(v-56320),b++),g<128?h[M++]=g:(g<2048?h[M++]=192|g>>>6:(g<65536?h[M++]=224|g>>>12:(h[M++]=240|g>>>18,h[M++]=128|g>>>12&63),h[M++]=128|g>>>6&63),h[M++]=128|63&g);return h})(d)},n.utf8decode=function(d){return s.nodebuffer?r.transformTo("nodebuffer",d).toString("utf-8"):(function(y){var h,g,v,b,M=y.length,S=new Array(2*M);for(h=g=0;h<M;)if((v=y[h++])<128)S[g++]=v;else if(4<(b=l[v]))S[g++]=65533,h+=b-1;else{for(v&=b===2?31:b===3?15:7;1<b&&h<M;)v=v<<6|63&y[h++],b--;1<b?S[g++]=65533:v<65536?S[g++]=v:(v-=65536,S[g++]=55296|v>>10&1023,S[g++]=56320|1023&v)}return S.length!==g&&(S.subarray?S=S.subarray(0,g):S.length=g),r.applyFromCharCode(S)})(d=r.transformTo(s.uint8array?"uint8array":"array",d))},r.inherits(f,a),f.prototype.processChunk=function(d){var y=r.transformTo(s.uint8array?"uint8array":"array",d.data);if(this.leftOver&&this.leftOver.length){if(s.uint8array){var h=y;(y=new Uint8Array(h.length+this.leftOver.length)).set(this.leftOver,0),y.set(h,this.leftOver.length)}else y=this.leftOver.concat(y);this.leftOver=null}var g=(function(b,M){var S;for((M=M||b.length)>b.length&&(M=b.length),S=M-1;0<=S&&(192&b[S])==128;)S--;return S<0||S===0?M:S+l[b[S]]>M?S:M})(y),v=y;g!==y.length&&(s.uint8array?(v=y.subarray(0,g),this.leftOver=y.subarray(g,y.length)):(v=y.slice(0,g),this.leftOver=y.slice(g,y.length))),this.push({data:n.utf8decode(v),meta:d.meta})},f.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:n.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},n.Utf8DecodeWorker=f,r.inherits(p,a),p.prototype.processChunk=function(d){this.push({data:n.utf8encode(d.data),meta:d.meta})},n.Utf8EncodeWorker=p},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(t,i,n){var r=t("./support"),s=t("./base64"),o=t("./nodejsUtils"),a=t("./external");function l(h){return h}function c(h,g){for(var v=0;v<h.length;++v)g[v]=255&h.charCodeAt(v);return g}t("setimmediate"),n.newBlob=function(h,g){n.checkSupport("blob");try{return new Blob([h],{type:g})}catch{try{var v=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return v.append(h),v.getBlob(g)}catch{throw new Error("Bug : can't construct the Blob.")}}};var f={stringifyByChunk:function(h,g,v){var b=[],M=0,S=h.length;if(S<=v)return String.fromCharCode.apply(null,h);for(;M<S;)g==="array"||g==="nodebuffer"?b.push(String.fromCharCode.apply(null,h.slice(M,Math.min(M+v,S)))):b.push(String.fromCharCode.apply(null,h.subarray(M,Math.min(M+v,S)))),M+=v;return b.join("")},stringifyByChar:function(h){for(var g="",v=0;v<h.length;v++)g+=String.fromCharCode(h[v]);return g},applyCanBeUsed:{uint8array:(function(){try{return r.uint8array&&String.fromCharCode.apply(null,new Uint8Array(1)).length===1}catch{return!1}})(),nodebuffer:(function(){try{return r.nodebuffer&&String.fromCharCode.apply(null,o.allocBuffer(1)).length===1}catch{return!1}})()}};function p(h){var g=65536,v=n.getTypeOf(h),b=!0;if(v==="uint8array"?b=f.applyCanBeUsed.uint8array:v==="nodebuffer"&&(b=f.applyCanBeUsed.nodebuffer),b)for(;1<g;)try{return f.stringifyByChunk(h,v,g)}catch{g=Math.floor(g/2)}return f.stringifyByChar(h)}function d(h,g){for(var v=0;v<h.length;v++)g[v]=h[v];return g}n.applyFromCharCode=p;var y={};y.string={string:l,array:function(h){return c(h,new Array(h.length))},arraybuffer:function(h){return y.string.uint8array(h).buffer},uint8array:function(h){return c(h,new Uint8Array(h.length))},nodebuffer:function(h){return c(h,o.allocBuffer(h.length))}},y.array={string:p,array:l,arraybuffer:function(h){return new Uint8Array(h).buffer},uint8array:function(h){return new Uint8Array(h)},nodebuffer:function(h){return o.newBufferFrom(h)}},y.arraybuffer={string:function(h){return p(new Uint8Array(h))},array:function(h){return d(new Uint8Array(h),new Array(h.byteLength))},arraybuffer:l,uint8array:function(h){return new Uint8Array(h)},nodebuffer:function(h){return o.newBufferFrom(new Uint8Array(h))}},y.uint8array={string:p,array:function(h){return d(h,new Array(h.length))},arraybuffer:function(h){return h.buffer},uint8array:l,nodebuffer:function(h){return o.newBufferFrom(h)}},y.nodebuffer={string:p,array:function(h){return d(h,new Array(h.length))},arraybuffer:function(h){return y.nodebuffer.uint8array(h).buffer},uint8array:function(h){return d(h,new Uint8Array(h.length))},nodebuffer:l},n.transformTo=function(h,g){if(g=g||"",!h)return g;n.checkSupport(h);var v=n.getTypeOf(g);return y[v][h](g)},n.resolve=function(h){for(var g=h.split("/"),v=[],b=0;b<g.length;b++){var M=g[b];M==="."||M===""&&b!==0&&b!==g.length-1||(M===".."?v.pop():v.push(M))}return v.join("/")},n.getTypeOf=function(h){return typeof h=="string"?"string":Object.prototype.toString.call(h)==="[object Array]"?"array":r.nodebuffer&&o.isBuffer(h)?"nodebuffer":r.uint8array&&h instanceof Uint8Array?"uint8array":r.arraybuffer&&h instanceof ArrayBuffer?"arraybuffer":void 0},n.checkSupport=function(h){if(!r[h.toLowerCase()])throw new Error(h+" is not supported by this platform")},n.MAX_VALUE_16BITS=65535,n.MAX_VALUE_32BITS=-1,n.pretty=function(h){var g,v,b="";for(v=0;v<(h||"").length;v++)b+="\\x"+((g=h.charCodeAt(v))<16?"0":"")+g.toString(16).toUpperCase();return b},n.delay=function(h,g,v){setImmediate(function(){h.apply(v||null,g||[])})},n.inherits=function(h,g){function v(){}v.prototype=g.prototype,h.prototype=new v},n.extend=function(){var h,g,v={};for(h=0;h<arguments.length;h++)for(g in arguments[h])Object.prototype.hasOwnProperty.call(arguments[h],g)&&v[g]===void 0&&(v[g]=arguments[h][g]);return v},n.prepareContent=function(h,g,v,b,M){return a.Promise.resolve(g).then(function(S){return r.blob&&(S instanceof Blob||["[object File]","[object Blob]"].indexOf(Object.prototype.toString.call(S))!==-1)&&typeof FileReader<"u"?new a.Promise(function(E,R){var z=new FileReader;z.onload=function(j){E(j.target.result)},z.onerror=function(j){R(j.target.error)},z.readAsArrayBuffer(S)}):S}).then(function(S){var E=n.getTypeOf(S);return E?(E==="arraybuffer"?S=n.transformTo("uint8array",S):E==="string"&&(M?S=s.decode(S):v&&b!==!0&&(S=(function(R){return c(R,r.uint8array?new Uint8Array(R.length):new Array(R.length))})(S))),S):a.Promise.reject(new Error("Can't read the data of '"+h+"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?"))})}},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,setimmediate:54}],33:[function(t,i,n){var r=t("./reader/readerFor"),s=t("./utils"),o=t("./signature"),a=t("./zipEntry"),l=t("./support");function c(f){this.files=[],this.loadOptions=f}c.prototype={checkSignature:function(f){if(!this.reader.readAndCheckSignature(f)){this.reader.index-=4;var p=this.reader.readString(4);throw new Error("Corrupted zip or bug: unexpected signature ("+s.pretty(p)+", expected "+s.pretty(f)+")")}},isSignature:function(f,p){var d=this.reader.index;this.reader.setIndex(f);var y=this.reader.readString(4)===p;return this.reader.setIndex(d),y},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var f=this.reader.readData(this.zipCommentLength),p=l.uint8array?"uint8array":"array",d=s.transformTo(p,f);this.zipComment=this.loadOptions.decodeFileName(d)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var f,p,d,y=this.zip64EndOfCentralSize-44;0<y;)f=this.reader.readInt(2),p=this.reader.readInt(4),d=this.reader.readData(p),this.zip64ExtensibleData[f]={id:f,length:p,value:d}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var f,p;for(f=0;f<this.files.length;f++)p=this.files[f],this.reader.setIndex(p.localHeaderOffset),this.checkSignature(o.LOCAL_FILE_HEADER),p.readLocalPart(this.reader),p.handleUTF8(),p.processAttributes()},readCentralDir:function(){var f;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(o.CENTRAL_FILE_HEADER);)(f=new a({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(f);if(this.centralDirRecords!==this.files.length&&this.centralDirRecords!==0&&this.files.length===0)throw new Error("Corrupted zip or bug: expected "+this.centralDirRecords+" records in central dir, got "+this.files.length)},readEndOfCentral:function(){var f=this.reader.lastIndexOfSignature(o.CENTRAL_DIRECTORY_END);if(f<0)throw this.isSignature(0,o.LOCAL_FILE_HEADER)?new Error("Corrupted zip: can't find end of central directory"):new Error("Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html");this.reader.setIndex(f);var p=f;if(this.checkSignature(o.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===s.MAX_VALUE_16BITS||this.diskWithCentralDirStart===s.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===s.MAX_VALUE_16BITS||this.centralDirRecords===s.MAX_VALUE_16BITS||this.centralDirSize===s.MAX_VALUE_32BITS||this.centralDirOffset===s.MAX_VALUE_32BITS){if(this.zip64=!0,(f=this.reader.lastIndexOfSignature(o.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");if(this.reader.setIndex(f),this.checkSignature(o.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,o.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(o.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error("Corrupted zip: can't find the ZIP64 end of central directory");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(o.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var d=this.centralDirOffset+this.centralDirSize;this.zip64&&(d+=20,d+=12+this.zip64EndOfCentralSize);var y=p-d;if(0<y)this.isSignature(p,o.CENTRAL_FILE_HEADER)||(this.reader.zero=y);else if(y<0)throw new Error("Corrupted zip: missing "+Math.abs(y)+" bytes.")},prepareReader:function(f){this.reader=r(f)},load:function(f){this.prepareReader(f),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},i.exports=c},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utils":32,"./zipEntry":34}],34:[function(t,i,n){var r=t("./reader/readerFor"),s=t("./utils"),o=t("./compressedObject"),a=t("./crc32"),l=t("./utf8"),c=t("./compressions"),f=t("./support");function p(d,y){this.options=d,this.loadOptions=y}p.prototype={isEncrypted:function(){return(1&this.bitFlag)==1},useUTF8:function(){return(2048&this.bitFlag)==2048},readLocalPart:function(d){var y,h;if(d.skip(22),this.fileNameLength=d.readInt(2),h=d.readInt(2),this.fileName=d.readData(this.fileNameLength),d.skip(h),this.compressedSize===-1||this.uncompressedSize===-1)throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)");if((y=(function(g){for(var v in c)if(Object.prototype.hasOwnProperty.call(c,v)&&c[v].magic===g)return c[v];return null})(this.compressionMethod))===null)throw new Error("Corrupted zip : compression "+s.pretty(this.compressionMethod)+" unknown (inner file : "+s.transformTo("string",this.fileName)+")");this.decompressed=new o(this.compressedSize,this.uncompressedSize,this.crc32,y,d.readData(this.compressedSize))},readCentralPart:function(d){this.versionMadeBy=d.readInt(2),d.skip(2),this.bitFlag=d.readInt(2),this.compressionMethod=d.readString(2),this.date=d.readDate(),this.crc32=d.readInt(4),this.compressedSize=d.readInt(4),this.uncompressedSize=d.readInt(4);var y=d.readInt(2);if(this.extraFieldsLength=d.readInt(2),this.fileCommentLength=d.readInt(2),this.diskNumberStart=d.readInt(2),this.internalFileAttributes=d.readInt(2),this.externalFileAttributes=d.readInt(4),this.localHeaderOffset=d.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");d.skip(y),this.readExtraFields(d),this.parseZIP64ExtraField(d),this.fileComment=d.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var d=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),d==0&&(this.dosPermissions=63&this.externalFileAttributes),d==3&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||this.fileNameStr.slice(-1)!=="/"||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var d=r(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=d.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=d.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=d.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=d.readInt(4))}},readExtraFields:function(d){var y,h,g,v=d.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});d.index+4<v;)y=d.readInt(2),h=d.readInt(2),g=d.readData(h),this.extraFields[y]={id:y,length:h,value:g};d.setIndex(v)},handleUTF8:function(){var d=f.uint8array?"uint8array":"array";if(this.useUTF8())this.fileNameStr=l.utf8decode(this.fileName),this.fileCommentStr=l.utf8decode(this.fileComment);else{var y=this.findExtraFieldUnicodePath();if(y!==null)this.fileNameStr=y;else{var h=s.transformTo(d,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(h)}var g=this.findExtraFieldUnicodeComment();if(g!==null)this.fileCommentStr=g;else{var v=s.transformTo(d,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(v)}}},findExtraFieldUnicodePath:function(){var d=this.extraFields[28789];if(d){var y=r(d.value);return y.readInt(1)!==1||a(this.fileName)!==y.readInt(4)?null:l.utf8decode(y.readData(d.length-5))}return null},findExtraFieldUnicodeComment:function(){var d=this.extraFields[25461];if(d){var y=r(d.value);return y.readInt(1)!==1||a(this.fileComment)!==y.readInt(4)?null:l.utf8decode(y.readData(d.length-5))}return null}},i.exports=p},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(t,i,n){function r(y,h,g){this.name=y,this.dir=g.dir,this.date=g.date,this.comment=g.comment,this.unixPermissions=g.unixPermissions,this.dosPermissions=g.dosPermissions,this._data=h,this._dataBinary=g.binary,this.options={compression:g.compression,compressionOptions:g.compressionOptions}}var s=t("./stream/StreamHelper"),o=t("./stream/DataWorker"),a=t("./utf8"),l=t("./compressedObject"),c=t("./stream/GenericWorker");r.prototype={internalStream:function(y){var h=null,g="string";try{if(!y)throw new Error("No output type specified.");var v=(g=y.toLowerCase())==="string"||g==="text";g!=="binarystring"&&g!=="text"||(g="string"),h=this._decompressWorker();var b=!this._dataBinary;b&&!v&&(h=h.pipe(new a.Utf8EncodeWorker)),!b&&v&&(h=h.pipe(new a.Utf8DecodeWorker))}catch(M){(h=new c("error")).error(M)}return new s(h,g,"")},async:function(y,h){return this.internalStream(y).accumulate(h)},nodeStream:function(y,h){return this.internalStream(y||"nodebuffer").toNodejsStream(h)},_compressWorker:function(y,h){if(this._data instanceof l&&this._data.compression.magic===y.magic)return this._data.getCompressedWorker();var g=this._decompressWorker();return this._dataBinary||(g=g.pipe(new a.Utf8EncodeWorker)),l.createWorkerFrom(g,y,h)},_decompressWorker:function(){return this._data instanceof l?this._data.getContentWorker():this._data instanceof c?this._data:new o(this._data)}};for(var f=["asText","asBinary","asNodeBuffer","asUint8Array","asArrayBuffer"],p=function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},d=0;d<f.length;d++)r.prototype[f[d]]=p;i.exports=r},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(t,i,n){(function(r){var s,o,a=r.MutationObserver||r.WebKitMutationObserver;if(a){var l=0,c=new a(y),f=r.document.createTextNode("");c.observe(f,{characterData:!0}),s=function(){f.data=l=++l%2}}else if(r.setImmediate||r.MessageChannel===void 0)s="document"in r&&"onreadystatechange"in r.document.createElement("script")?function(){var h=r.document.createElement("script");h.onreadystatechange=function(){y(),h.onreadystatechange=null,h.parentNode.removeChild(h),h=null},r.document.documentElement.appendChild(h)}:function(){setTimeout(y,0)};else{var p=new r.MessageChannel;p.port1.onmessage=y,s=function(){p.port2.postMessage(0)}}var d=[];function y(){var h,g;o=!0;for(var v=d.length;v;){for(g=d,d=[],h=-1;++h<v;)g[h]();v=d.length}o=!1}i.exports=function(h){d.push(h)!==1||o||s()}}).call(this,typeof Le<"u"?Le:typeof self<"u"?self:typeof window<"u"?window:{})},{}],37:[function(t,i,n){var r=t("immediate");function s(){}var o={},a=["REJECTED"],l=["FULFILLED"],c=["PENDING"];function f(v){if(typeof v!="function")throw new TypeError("resolver must be a function");this.state=c,this.queue=[],this.outcome=void 0,v!==s&&h(this,v)}function p(v,b,M){this.promise=v,typeof b=="function"&&(this.onFulfilled=b,this.callFulfilled=this.otherCallFulfilled),typeof M=="function"&&(this.onRejected=M,this.callRejected=this.otherCallRejected)}function d(v,b,M){r(function(){var S;try{S=b(M)}catch(E){return o.reject(v,E)}S===v?o.reject(v,new TypeError("Cannot resolve promise with itself")):o.resolve(v,S)})}function y(v){var b=v&&v.then;if(v&&(typeof v=="object"||typeof v=="function")&&typeof b=="function")return function(){b.apply(v,arguments)}}function h(v,b){var M=!1;function S(z){M||(M=!0,o.reject(v,z))}function E(z){M||(M=!0,o.resolve(v,z))}var R=g(function(){b(E,S)});R.status==="error"&&S(R.value)}function g(v,b){var M={};try{M.value=v(b),M.status="success"}catch(S){M.status="error",M.value=S}return M}(i.exports=f).prototype.finally=function(v){if(typeof v!="function")return this;var b=this.constructor;return this.then(function(M){return b.resolve(v()).then(function(){return M})},function(M){return b.resolve(v()).then(function(){throw M})})},f.prototype.catch=function(v){return this.then(null,v)},f.prototype.then=function(v,b){if(typeof v!="function"&&this.state===l||typeof b!="function"&&this.state===a)return this;var M=new this.constructor(s);return this.state!==c?d(M,this.state===l?v:b,this.outcome):this.queue.push(new p(M,v,b)),M},p.prototype.callFulfilled=function(v){o.resolve(this.promise,v)},p.prototype.otherCallFulfilled=function(v){d(this.promise,this.onFulfilled,v)},p.prototype.callRejected=function(v){o.reject(this.promise,v)},p.prototype.otherCallRejected=function(v){d(this.promise,this.onRejected,v)},o.resolve=function(v,b){var M=g(y,b);if(M.status==="error")return o.reject(v,M.value);var S=M.value;if(S)h(v,S);else{v.state=l,v.outcome=b;for(var E=-1,R=v.queue.length;++E<R;)v.queue[E].callFulfilled(b)}return v},o.reject=function(v,b){v.state=a,v.outcome=b;for(var M=-1,S=v.queue.length;++M<S;)v.queue[M].callRejected(b);return v},f.resolve=function(v){return v instanceof this?v:o.resolve(new this(s),v)},f.reject=function(v){var b=new this(s);return o.reject(b,v)},f.all=function(v){var b=this;if(Object.prototype.toString.call(v)!=="[object Array]")return this.reject(new TypeError("must be an array"));var M=v.length,S=!1;if(!M)return this.resolve([]);for(var E=new Array(M),R=0,z=-1,j=new this(s);++z<M;)D(v[z],z);return j;function D(H,q){b.resolve(H).then(function(C){E[q]=C,++R!==M||S||(S=!0,o.resolve(j,E))},function(C){S||(S=!0,o.reject(j,C))})}},f.race=function(v){var b=this;if(Object.prototype.toString.call(v)!=="[object Array]")return this.reject(new TypeError("must be an array"));var M=v.length,S=!1;if(!M)return this.resolve([]);for(var E=-1,R=new this(s);++E<M;)z=v[E],b.resolve(z).then(function(j){S||(S=!0,o.resolve(R,j))},function(j){S||(S=!0,o.reject(R,j))});var z;return R}},{immediate:36}],38:[function(t,i,n){var r={};(0,t("./lib/utils/common").assign)(r,t("./lib/deflate"),t("./lib/inflate"),t("./lib/zlib/constants")),i.exports=r},{"./lib/deflate":39,"./lib/inflate":40,"./lib/utils/common":41,"./lib/zlib/constants":44}],39:[function(t,i,n){var r=t("./zlib/deflate"),s=t("./utils/common"),o=t("./utils/strings"),a=t("./zlib/messages"),l=t("./zlib/zstream"),c=Object.prototype.toString,f=0,p=-1,d=0,y=8;function h(v){if(!(this instanceof h))return new h(v);this.options=s.assign({level:p,method:y,chunkSize:16384,windowBits:15,memLevel:8,strategy:d,to:""},v||{});var b=this.options;b.raw&&0<b.windowBits?b.windowBits=-b.windowBits:b.gzip&&0<b.windowBits&&b.windowBits<16&&(b.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new l,this.strm.avail_out=0;var M=r.deflateInit2(this.strm,b.level,b.method,b.windowBits,b.memLevel,b.strategy);if(M!==f)throw new Error(a[M]);if(b.header&&r.deflateSetHeader(this.strm,b.header),b.dictionary){var S;if(S=typeof b.dictionary=="string"?o.string2buf(b.dictionary):c.call(b.dictionary)==="[object ArrayBuffer]"?new Uint8Array(b.dictionary):b.dictionary,(M=r.deflateSetDictionary(this.strm,S))!==f)throw new Error(a[M]);this._dict_set=!0}}function g(v,b){var M=new h(b);if(M.push(v,!0),M.err)throw M.msg||a[M.err];return M.result}h.prototype.push=function(v,b){var M,S,E=this.strm,R=this.options.chunkSize;if(this.ended)return!1;S=b===~~b?b:b===!0?4:0,typeof v=="string"?E.input=o.string2buf(v):c.call(v)==="[object ArrayBuffer]"?E.input=new Uint8Array(v):E.input=v,E.next_in=0,E.avail_in=E.input.length;do{if(E.avail_out===0&&(E.output=new s.Buf8(R),E.next_out=0,E.avail_out=R),(M=r.deflate(E,S))!==1&&M!==f)return this.onEnd(M),!(this.ended=!0);E.avail_out!==0&&(E.avail_in!==0||S!==4&&S!==2)||(this.options.to==="string"?this.onData(o.buf2binstring(s.shrinkBuf(E.output,E.next_out))):this.onData(s.shrinkBuf(E.output,E.next_out)))}while((0<E.avail_in||E.avail_out===0)&&M!==1);return S===4?(M=r.deflateEnd(this.strm),this.onEnd(M),this.ended=!0,M===f):S!==2||(this.onEnd(f),!(E.avail_out=0))},h.prototype.onData=function(v){this.chunks.push(v)},h.prototype.onEnd=function(v){v===f&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=s.flattenChunks(this.chunks)),this.chunks=[],this.err=v,this.msg=this.strm.msg},n.Deflate=h,n.deflate=g,n.deflateRaw=function(v,b){return(b=b||{}).raw=!0,g(v,b)},n.gzip=function(v,b){return(b=b||{}).gzip=!0,g(v,b)}},{"./utils/common":41,"./utils/strings":42,"./zlib/deflate":46,"./zlib/messages":51,"./zlib/zstream":53}],40:[function(t,i,n){var r=t("./zlib/inflate"),s=t("./utils/common"),o=t("./utils/strings"),a=t("./zlib/constants"),l=t("./zlib/messages"),c=t("./zlib/zstream"),f=t("./zlib/gzheader"),p=Object.prototype.toString;function d(h){if(!(this instanceof d))return new d(h);this.options=s.assign({chunkSize:16384,windowBits:0,to:""},h||{});var g=this.options;g.raw&&0<=g.windowBits&&g.windowBits<16&&(g.windowBits=-g.windowBits,g.windowBits===0&&(g.windowBits=-15)),!(0<=g.windowBits&&g.windowBits<16)||h&&h.windowBits||(g.windowBits+=32),15<g.windowBits&&g.windowBits<48&&(15&g.windowBits)==0&&(g.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new c,this.strm.avail_out=0;var v=r.inflateInit2(this.strm,g.windowBits);if(v!==a.Z_OK)throw new Error(l[v]);this.header=new f,r.inflateGetHeader(this.strm,this.header)}function y(h,g){var v=new d(g);if(v.push(h,!0),v.err)throw v.msg||l[v.err];return v.result}d.prototype.push=function(h,g){var v,b,M,S,E,R,z=this.strm,j=this.options.chunkSize,D=this.options.dictionary,H=!1;if(this.ended)return!1;b=g===~~g?g:g===!0?a.Z_FINISH:a.Z_NO_FLUSH,typeof h=="string"?z.input=o.binstring2buf(h):p.call(h)==="[object ArrayBuffer]"?z.input=new Uint8Array(h):z.input=h,z.next_in=0,z.avail_in=z.input.length;do{if(z.avail_out===0&&(z.output=new s.Buf8(j),z.next_out=0,z.avail_out=j),(v=r.inflate(z,a.Z_NO_FLUSH))===a.Z_NEED_DICT&&D&&(R=typeof D=="string"?o.string2buf(D):p.call(D)==="[object ArrayBuffer]"?new Uint8Array(D):D,v=r.inflateSetDictionary(this.strm,R)),v===a.Z_BUF_ERROR&&H===!0&&(v=a.Z_OK,H=!1),v!==a.Z_STREAM_END&&v!==a.Z_OK)return this.onEnd(v),!(this.ended=!0);z.next_out&&(z.avail_out!==0&&v!==a.Z_STREAM_END&&(z.avail_in!==0||b!==a.Z_FINISH&&b!==a.Z_SYNC_FLUSH)||(this.options.to==="string"?(M=o.utf8border(z.output,z.next_out),S=z.next_out-M,E=o.buf2string(z.output,M),z.next_out=S,z.avail_out=j-S,S&&s.arraySet(z.output,z.output,M,S,0),this.onData(E)):this.onData(s.shrinkBuf(z.output,z.next_out)))),z.avail_in===0&&z.avail_out===0&&(H=!0)}while((0<z.avail_in||z.avail_out===0)&&v!==a.Z_STREAM_END);return v===a.Z_STREAM_END&&(b=a.Z_FINISH),b===a.Z_FINISH?(v=r.inflateEnd(this.strm),this.onEnd(v),this.ended=!0,v===a.Z_OK):b!==a.Z_SYNC_FLUSH||(this.onEnd(a.Z_OK),!(z.avail_out=0))},d.prototype.onData=function(h){this.chunks.push(h)},d.prototype.onEnd=function(h){h===a.Z_OK&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=s.flattenChunks(this.chunks)),this.chunks=[],this.err=h,this.msg=this.strm.msg},n.Inflate=d,n.inflate=y,n.inflateRaw=function(h,g){return(g=g||{}).raw=!0,y(h,g)},n.ungzip=y},{"./utils/common":41,"./utils/strings":42,"./zlib/constants":44,"./zlib/gzheader":47,"./zlib/inflate":49,"./zlib/messages":51,"./zlib/zstream":53}],41:[function(t,i,n){var r=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Int32Array<"u";n.assign=function(a){for(var l=Array.prototype.slice.call(arguments,1);l.length;){var c=l.shift();if(c){if(typeof c!="object")throw new TypeError(c+"must be non-object");for(var f in c)c.hasOwnProperty(f)&&(a[f]=c[f])}}return a},n.shrinkBuf=function(a,l){return a.length===l?a:a.subarray?a.subarray(0,l):(a.length=l,a)};var s={arraySet:function(a,l,c,f,p){if(l.subarray&&a.subarray)a.set(l.subarray(c,c+f),p);else for(var d=0;d<f;d++)a[p+d]=l[c+d]},flattenChunks:function(a){var l,c,f,p,d,y;for(l=f=0,c=a.length;l<c;l++)f+=a[l].length;for(y=new Uint8Array(f),l=p=0,c=a.length;l<c;l++)d=a[l],y.set(d,p),p+=d.length;return y}},o={arraySet:function(a,l,c,f,p){for(var d=0;d<f;d++)a[p+d]=l[c+d]},flattenChunks:function(a){return[].concat.apply([],a)}};n.setTyped=function(a){a?(n.Buf8=Uint8Array,n.Buf16=Uint16Array,n.Buf32=Int32Array,n.assign(n,s)):(n.Buf8=Array,n.Buf16=Array,n.Buf32=Array,n.assign(n,o))},n.setTyped(r)},{}],42:[function(t,i,n){var r=t("./common"),s=!0,o=!0;try{String.fromCharCode.apply(null,[0])}catch{s=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{o=!1}for(var a=new r.Buf8(256),l=0;l<256;l++)a[l]=252<=l?6:248<=l?5:240<=l?4:224<=l?3:192<=l?2:1;function c(f,p){if(p<65537&&(f.subarray&&o||!f.subarray&&s))return String.fromCharCode.apply(null,r.shrinkBuf(f,p));for(var d="",y=0;y<p;y++)d+=String.fromCharCode(f[y]);return d}a[254]=a[254]=1,n.string2buf=function(f){var p,d,y,h,g,v=f.length,b=0;for(h=0;h<v;h++)(64512&(d=f.charCodeAt(h)))==55296&&h+1<v&&(64512&(y=f.charCodeAt(h+1)))==56320&&(d=65536+(d-55296<<10)+(y-56320),h++),b+=d<128?1:d<2048?2:d<65536?3:4;for(p=new r.Buf8(b),h=g=0;g<b;h++)(64512&(d=f.charCodeAt(h)))==55296&&h+1<v&&(64512&(y=f.charCodeAt(h+1)))==56320&&(d=65536+(d-55296<<10)+(y-56320),h++),d<128?p[g++]=d:(d<2048?p[g++]=192|d>>>6:(d<65536?p[g++]=224|d>>>12:(p[g++]=240|d>>>18,p[g++]=128|d>>>12&63),p[g++]=128|d>>>6&63),p[g++]=128|63&d);return p},n.buf2binstring=function(f){return c(f,f.length)},n.binstring2buf=function(f){for(var p=new r.Buf8(f.length),d=0,y=p.length;d<y;d++)p[d]=f.charCodeAt(d);return p},n.buf2string=function(f,p){var d,y,h,g,v=p||f.length,b=new Array(2*v);for(d=y=0;d<v;)if((h=f[d++])<128)b[y++]=h;else if(4<(g=a[h]))b[y++]=65533,d+=g-1;else{for(h&=g===2?31:g===3?15:7;1<g&&d<v;)h=h<<6|63&f[d++],g--;1<g?b[y++]=65533:h<65536?b[y++]=h:(h-=65536,b[y++]=55296|h>>10&1023,b[y++]=56320|1023&h)}return c(b,y)},n.utf8border=function(f,p){var d;for((p=p||f.length)>f.length&&(p=f.length),d=p-1;0<=d&&(192&f[d])==128;)d--;return d<0||d===0?p:d+a[f[d]]>p?d:p}},{"./common":41}],43:[function(t,i,n){i.exports=function(r,s,o,a){for(var l=65535&r|0,c=r>>>16&65535|0,f=0;o!==0;){for(o-=f=2e3<o?2e3:o;c=c+(l=l+s[a++]|0)|0,--f;);l%=65521,c%=65521}return l|c<<16|0}},{}],44:[function(t,i,n){i.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(t,i,n){var r=(function(){for(var s,o=[],a=0;a<256;a++){s=a;for(var l=0;l<8;l++)s=1&s?3988292384^s>>>1:s>>>1;o[a]=s}return o})();i.exports=function(s,o,a,l){var c=r,f=l+a;s^=-1;for(var p=l;p<f;p++)s=s>>>8^c[255&(s^o[p])];return-1^s}},{}],46:[function(t,i,n){var r,s=t("../utils/common"),o=t("./trees"),a=t("./adler32"),l=t("./crc32"),c=t("./messages"),f=0,p=4,d=0,y=-2,h=-1,g=4,v=2,b=8,M=9,S=286,E=30,R=19,z=2*S+1,j=15,D=3,H=258,q=H+D+1,C=42,B=113,m=1,O=2,ee=3,W=4;function te(u,N){return u.msg=c[N],N}function F(u){return(u<<1)-(4<u?9:0)}function J(u){for(var N=u.length;0<=--N;)u[N]=0}function I(u){var N=u.state,P=N.pending;P>u.avail_out&&(P=u.avail_out),P!==0&&(s.arraySet(u.output,N.pending_buf,N.pending_out,P,u.next_out),u.next_out+=P,N.pending_out+=P,u.total_out+=P,u.avail_out-=P,N.pending-=P,N.pending===0&&(N.pending_out=0))}function L(u,N){o._tr_flush_block(u,0<=u.block_start?u.block_start:-1,u.strstart-u.block_start,N),u.block_start=u.strstart,I(u.strm)}function Q(u,N){u.pending_buf[u.pending++]=N}function Y(u,N){u.pending_buf[u.pending++]=N>>>8&255,u.pending_buf[u.pending++]=255&N}function Z(u,N){var P,x,w=u.max_chain_length,T=u.strstart,V=u.prev_length,U=u.nice_match,A=u.strstart>u.w_size-q?u.strstart-(u.w_size-q):0,G=u.window,X=u.w_mask,$=u.prev,K=u.strstart+H,se=G[T+V-1],ne=G[T+V];u.prev_length>=u.good_match&&(w>>=2),U>u.lookahead&&(U=u.lookahead);do if(G[(P=N)+V]===ne&&G[P+V-1]===se&&G[P]===G[T]&&G[++P]===G[T+1]){T+=2,P++;do;while(G[++T]===G[++P]&&G[++T]===G[++P]&&G[++T]===G[++P]&&G[++T]===G[++P]&&G[++T]===G[++P]&&G[++T]===G[++P]&&G[++T]===G[++P]&&G[++T]===G[++P]&&T<K);if(x=H-(K-T),T=K-H,V<x){if(u.match_start=N,U<=(V=x))break;se=G[T+V-1],ne=G[T+V]}}while((N=$[N&X])>A&&--w!=0);return V<=u.lookahead?V:u.lookahead}function le(u){var N,P,x,w,T,V,U,A,G,X,$=u.w_size;do{if(w=u.window_size-u.lookahead-u.strstart,u.strstart>=$+($-q)){for(s.arraySet(u.window,u.window,$,$,0),u.match_start-=$,u.strstart-=$,u.block_start-=$,N=P=u.hash_size;x=u.head[--N],u.head[N]=$<=x?x-$:0,--P;);for(N=P=$;x=u.prev[--N],u.prev[N]=$<=x?x-$:0,--P;);w+=$}if(u.strm.avail_in===0)break;if(V=u.strm,U=u.window,A=u.strstart+u.lookahead,G=w,X=void 0,X=V.avail_in,G<X&&(X=G),P=X===0?0:(V.avail_in-=X,s.arraySet(U,V.input,V.next_in,X,A),V.state.wrap===1?V.adler=a(V.adler,U,X,A):V.state.wrap===2&&(V.adler=l(V.adler,U,X,A)),V.next_in+=X,V.total_in+=X,X),u.lookahead+=P,u.lookahead+u.insert>=D)for(T=u.strstart-u.insert,u.ins_h=u.window[T],u.ins_h=(u.ins_h<<u.hash_shift^u.window[T+1])&u.hash_mask;u.insert&&(u.ins_h=(u.ins_h<<u.hash_shift^u.window[T+D-1])&u.hash_mask,u.prev[T&u.w_mask]=u.head[u.ins_h],u.head[u.ins_h]=T,T++,u.insert--,!(u.lookahead+u.insert<D)););}while(u.lookahead<q&&u.strm.avail_in!==0)}function pe(u,N){for(var P,x;;){if(u.lookahead<q){if(le(u),u.lookahead<q&&N===f)return m;if(u.lookahead===0)break}if(P=0,u.lookahead>=D&&(u.ins_h=(u.ins_h<<u.hash_shift^u.window[u.strstart+D-1])&u.hash_mask,P=u.prev[u.strstart&u.w_mask]=u.head[u.ins_h],u.head[u.ins_h]=u.strstart),P!==0&&u.strstart-P<=u.w_size-q&&(u.match_length=Z(u,P)),u.match_length>=D)if(x=o._tr_tally(u,u.strstart-u.match_start,u.match_length-D),u.lookahead-=u.match_length,u.match_length<=u.max_lazy_match&&u.lookahead>=D){for(u.match_length--;u.strstart++,u.ins_h=(u.ins_h<<u.hash_shift^u.window[u.strstart+D-1])&u.hash_mask,P=u.prev[u.strstart&u.w_mask]=u.head[u.ins_h],u.head[u.ins_h]=u.strstart,--u.match_length!=0;);u.strstart++}else u.strstart+=u.match_length,u.match_length=0,u.ins_h=u.window[u.strstart],u.ins_h=(u.ins_h<<u.hash_shift^u.window[u.strstart+1])&u.hash_mask;else x=o._tr_tally(u,0,u.window[u.strstart]),u.lookahead--,u.strstart++;if(x&&(L(u,!1),u.strm.avail_out===0))return m}return u.insert=u.strstart<D-1?u.strstart:D-1,N===p?(L(u,!0),u.strm.avail_out===0?ee:W):u.last_lit&&(L(u,!1),u.strm.avail_out===0)?m:O}function ie(u,N){for(var P,x,w;;){if(u.lookahead<q){if(le(u),u.lookahead<q&&N===f)return m;if(u.lookahead===0)break}if(P=0,u.lookahead>=D&&(u.ins_h=(u.ins_h<<u.hash_shift^u.window[u.strstart+D-1])&u.hash_mask,P=u.prev[u.strstart&u.w_mask]=u.head[u.ins_h],u.head[u.ins_h]=u.strstart),u.prev_length=u.match_length,u.prev_match=u.match_start,u.match_length=D-1,P!==0&&u.prev_length<u.max_lazy_match&&u.strstart-P<=u.w_size-q&&(u.match_length=Z(u,P),u.match_length<=5&&(u.strategy===1||u.match_length===D&&4096<u.strstart-u.match_start)&&(u.match_length=D-1)),u.prev_length>=D&&u.match_length<=u.prev_length){for(w=u.strstart+u.lookahead-D,x=o._tr_tally(u,u.strstart-1-u.prev_match,u.prev_length-D),u.lookahead-=u.prev_length-1,u.prev_length-=2;++u.strstart<=w&&(u.ins_h=(u.ins_h<<u.hash_shift^u.window[u.strstart+D-1])&u.hash_mask,P=u.prev[u.strstart&u.w_mask]=u.head[u.ins_h],u.head[u.ins_h]=u.strstart),--u.prev_length!=0;);if(u.match_available=0,u.match_length=D-1,u.strstart++,x&&(L(u,!1),u.strm.avail_out===0))return m}else if(u.match_available){if((x=o._tr_tally(u,0,u.window[u.strstart-1]))&&L(u,!1),u.strstart++,u.lookahead--,u.strm.avail_out===0)return m}else u.match_available=1,u.strstart++,u.lookahead--}return u.match_available&&(x=o._tr_tally(u,0,u.window[u.strstart-1]),u.match_available=0),u.insert=u.strstart<D-1?u.strstart:D-1,N===p?(L(u,!0),u.strm.avail_out===0?ee:W):u.last_lit&&(L(u,!1),u.strm.avail_out===0)?m:O}function re(u,N,P,x,w){this.good_length=u,this.max_lazy=N,this.nice_length=P,this.max_chain=x,this.func=w}function fe(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=b,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new s.Buf16(2*z),this.dyn_dtree=new s.Buf16(2*(2*E+1)),this.bl_tree=new s.Buf16(2*(2*R+1)),J(this.dyn_ltree),J(this.dyn_dtree),J(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new s.Buf16(j+1),this.heap=new s.Buf16(2*S+1),J(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new s.Buf16(2*S+1),J(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function he(u){var N;return u&&u.state?(u.total_in=u.total_out=0,u.data_type=v,(N=u.state).pending=0,N.pending_out=0,N.wrap<0&&(N.wrap=-N.wrap),N.status=N.wrap?C:B,u.adler=N.wrap===2?0:1,N.last_flush=f,o._tr_init(N),d):te(u,y)}function be(u){var N=he(u);return N===d&&(function(P){P.window_size=2*P.w_size,J(P.head),P.max_lazy_match=r[P.level].max_lazy,P.good_match=r[P.level].good_length,P.nice_match=r[P.level].nice_length,P.max_chain_length=r[P.level].max_chain,P.strstart=0,P.block_start=0,P.lookahead=0,P.insert=0,P.match_length=P.prev_length=D-1,P.match_available=0,P.ins_h=0})(u.state),N}function ye(u,N,P,x,w,T){if(!u)return y;var V=1;if(N===h&&(N=6),x<0?(V=0,x=-x):15<x&&(V=2,x-=16),w<1||M<w||P!==b||x<8||15<x||N<0||9<N||T<0||g<T)return te(u,y);x===8&&(x=9);var U=new fe;return(u.state=U).strm=u,U.wrap=V,U.gzhead=null,U.w_bits=x,U.w_size=1<<U.w_bits,U.w_mask=U.w_size-1,U.hash_bits=w+7,U.hash_size=1<<U.hash_bits,U.hash_mask=U.hash_size-1,U.hash_shift=~~((U.hash_bits+D-1)/D),U.window=new s.Buf8(2*U.w_size),U.head=new s.Buf16(U.hash_size),U.prev=new s.Buf16(U.w_size),U.lit_bufsize=1<<w+6,U.pending_buf_size=4*U.lit_bufsize,U.pending_buf=new s.Buf8(U.pending_buf_size),U.d_buf=1*U.lit_bufsize,U.l_buf=3*U.lit_bufsize,U.level=N,U.strategy=T,U.method=P,be(u)}r=[new re(0,0,0,0,function(u,N){var P=65535;for(P>u.pending_buf_size-5&&(P=u.pending_buf_size-5);;){if(u.lookahead<=1){if(le(u),u.lookahead===0&&N===f)return m;if(u.lookahead===0)break}u.strstart+=u.lookahead,u.lookahead=0;var x=u.block_start+P;if((u.strstart===0||u.strstart>=x)&&(u.lookahead=u.strstart-x,u.strstart=x,L(u,!1),u.strm.avail_out===0)||u.strstart-u.block_start>=u.w_size-q&&(L(u,!1),u.strm.avail_out===0))return m}return u.insert=0,N===p?(L(u,!0),u.strm.avail_out===0?ee:W):(u.strstart>u.block_start&&(L(u,!1),u.strm.avail_out),m)}),new re(4,4,8,4,pe),new re(4,5,16,8,pe),new re(4,6,32,32,pe),new re(4,4,16,16,ie),new re(8,16,32,32,ie),new re(8,16,128,128,ie),new re(8,32,128,256,ie),new re(32,128,258,1024,ie),new re(32,258,258,4096,ie)],n.deflateInit=function(u,N){return ye(u,N,b,15,8,0)},n.deflateInit2=ye,n.deflateReset=be,n.deflateResetKeep=he,n.deflateSetHeader=function(u,N){return u&&u.state?u.state.wrap!==2?y:(u.state.gzhead=N,d):y},n.deflate=function(u,N){var P,x,w,T;if(!u||!u.state||5<N||N<0)return u?te(u,y):y;if(x=u.state,!u.output||!u.input&&u.avail_in!==0||x.status===666&&N!==p)return te(u,u.avail_out===0?-5:y);if(x.strm=u,P=x.last_flush,x.last_flush=N,x.status===C)if(x.wrap===2)u.adler=0,Q(x,31),Q(x,139),Q(x,8),x.gzhead?(Q(x,(x.gzhead.text?1:0)+(x.gzhead.hcrc?2:0)+(x.gzhead.extra?4:0)+(x.gzhead.name?8:0)+(x.gzhead.comment?16:0)),Q(x,255&x.gzhead.time),Q(x,x.gzhead.time>>8&255),Q(x,x.gzhead.time>>16&255),Q(x,x.gzhead.time>>24&255),Q(x,x.level===9?2:2<=x.strategy||x.level<2?4:0),Q(x,255&x.gzhead.os),x.gzhead.extra&&x.gzhead.extra.length&&(Q(x,255&x.gzhead.extra.length),Q(x,x.gzhead.extra.length>>8&255)),x.gzhead.hcrc&&(u.adler=l(u.adler,x.pending_buf,x.pending,0)),x.gzindex=0,x.status=69):(Q(x,0),Q(x,0),Q(x,0),Q(x,0),Q(x,0),Q(x,x.level===9?2:2<=x.strategy||x.level<2?4:0),Q(x,3),x.status=B);else{var V=b+(x.w_bits-8<<4)<<8;V|=(2<=x.strategy||x.level<2?0:x.level<6?1:x.level===6?2:3)<<6,x.strstart!==0&&(V|=32),V+=31-V%31,x.status=B,Y(x,V),x.strstart!==0&&(Y(x,u.adler>>>16),Y(x,65535&u.adler)),u.adler=1}if(x.status===69)if(x.gzhead.extra){for(w=x.pending;x.gzindex<(65535&x.gzhead.extra.length)&&(x.pending!==x.pending_buf_size||(x.gzhead.hcrc&&x.pending>w&&(u.adler=l(u.adler,x.pending_buf,x.pending-w,w)),I(u),w=x.pending,x.pending!==x.pending_buf_size));)Q(x,255&x.gzhead.extra[x.gzindex]),x.gzindex++;x.gzhead.hcrc&&x.pending>w&&(u.adler=l(u.adler,x.pending_buf,x.pending-w,w)),x.gzindex===x.gzhead.extra.length&&(x.gzindex=0,x.status=73)}else x.status=73;if(x.status===73)if(x.gzhead.name){w=x.pending;do{if(x.pending===x.pending_buf_size&&(x.gzhead.hcrc&&x.pending>w&&(u.adler=l(u.adler,x.pending_buf,x.pending-w,w)),I(u),w=x.pending,x.pending===x.pending_buf_size)){T=1;break}T=x.gzindex<x.gzhead.name.length?255&x.gzhead.name.charCodeAt(x.gzindex++):0,Q(x,T)}while(T!==0);x.gzhead.hcrc&&x.pending>w&&(u.adler=l(u.adler,x.pending_buf,x.pending-w,w)),T===0&&(x.gzindex=0,x.status=91)}else x.status=91;if(x.status===91)if(x.gzhead.comment){w=x.pending;do{if(x.pending===x.pending_buf_size&&(x.gzhead.hcrc&&x.pending>w&&(u.adler=l(u.adler,x.pending_buf,x.pending-w,w)),I(u),w=x.pending,x.pending===x.pending_buf_size)){T=1;break}T=x.gzindex<x.gzhead.comment.length?255&x.gzhead.comment.charCodeAt(x.gzindex++):0,Q(x,T)}while(T!==0);x.gzhead.hcrc&&x.pending>w&&(u.adler=l(u.adler,x.pending_buf,x.pending-w,w)),T===0&&(x.status=103)}else x.status=103;if(x.status===103&&(x.gzhead.hcrc?(x.pending+2>x.pending_buf_size&&I(u),x.pending+2<=x.pending_buf_size&&(Q(x,255&u.adler),Q(x,u.adler>>8&255),u.adler=0,x.status=B)):x.status=B),x.pending!==0){if(I(u),u.avail_out===0)return x.last_flush=-1,d}else if(u.avail_in===0&&F(N)<=F(P)&&N!==p)return te(u,-5);if(x.status===666&&u.avail_in!==0)return te(u,-5);if(u.avail_in!==0||x.lookahead!==0||N!==f&&x.status!==666){var U=x.strategy===2?(function(A,G){for(var X;;){if(A.lookahead===0&&(le(A),A.lookahead===0)){if(G===f)return m;break}if(A.match_length=0,X=o._tr_tally(A,0,A.window[A.strstart]),A.lookahead--,A.strstart++,X&&(L(A,!1),A.strm.avail_out===0))return m}return A.insert=0,G===p?(L(A,!0),A.strm.avail_out===0?ee:W):A.last_lit&&(L(A,!1),A.strm.avail_out===0)?m:O})(x,N):x.strategy===3?(function(A,G){for(var X,$,K,se,ne=A.window;;){if(A.lookahead<=H){if(le(A),A.lookahead<=H&&G===f)return m;if(A.lookahead===0)break}if(A.match_length=0,A.lookahead>=D&&0<A.strstart&&($=ne[K=A.strstart-1])===ne[++K]&&$===ne[++K]&&$===ne[++K]){se=A.strstart+H;do;while($===ne[++K]&&$===ne[++K]&&$===ne[++K]&&$===ne[++K]&&$===ne[++K]&&$===ne[++K]&&$===ne[++K]&&$===ne[++K]&&K<se);A.match_length=H-(se-K),A.match_length>A.lookahead&&(A.match_length=A.lookahead)}if(A.match_length>=D?(X=o._tr_tally(A,1,A.match_length-D),A.lookahead-=A.match_length,A.strstart+=A.match_length,A.match_length=0):(X=o._tr_tally(A,0,A.window[A.strstart]),A.lookahead--,A.strstart++),X&&(L(A,!1),A.strm.avail_out===0))return m}return A.insert=0,G===p?(L(A,!0),A.strm.avail_out===0?ee:W):A.last_lit&&(L(A,!1),A.strm.avail_out===0)?m:O})(x,N):r[x.level].func(x,N);if(U!==ee&&U!==W||(x.status=666),U===m||U===ee)return u.avail_out===0&&(x.last_flush=-1),d;if(U===O&&(N===1?o._tr_align(x):N!==5&&(o._tr_stored_block(x,0,0,!1),N===3&&(J(x.head),x.lookahead===0&&(x.strstart=0,x.block_start=0,x.insert=0))),I(u),u.avail_out===0))return x.last_flush=-1,d}return N!==p?d:x.wrap<=0?1:(x.wrap===2?(Q(x,255&u.adler),Q(x,u.adler>>8&255),Q(x,u.adler>>16&255),Q(x,u.adler>>24&255),Q(x,255&u.total_in),Q(x,u.total_in>>8&255),Q(x,u.total_in>>16&255),Q(x,u.total_in>>24&255)):(Y(x,u.adler>>>16),Y(x,65535&u.adler)),I(u),0<x.wrap&&(x.wrap=-x.wrap),x.pending!==0?d:1)},n.deflateEnd=function(u){var N;return u&&u.state?(N=u.state.status)!==C&&N!==69&&N!==73&&N!==91&&N!==103&&N!==B&&N!==666?te(u,y):(u.state=null,N===B?te(u,-3):d):y},n.deflateSetDictionary=function(u,N){var P,x,w,T,V,U,A,G,X=N.length;if(!u||!u.state||(T=(P=u.state).wrap)===2||T===1&&P.status!==C||P.lookahead)return y;for(T===1&&(u.adler=a(u.adler,N,X,0)),P.wrap=0,X>=P.w_size&&(T===0&&(J(P.head),P.strstart=0,P.block_start=0,P.insert=0),G=new s.Buf8(P.w_size),s.arraySet(G,N,X-P.w_size,P.w_size,0),N=G,X=P.w_size),V=u.avail_in,U=u.next_in,A=u.input,u.avail_in=X,u.next_in=0,u.input=N,le(P);P.lookahead>=D;){for(x=P.strstart,w=P.lookahead-(D-1);P.ins_h=(P.ins_h<<P.hash_shift^P.window[x+D-1])&P.hash_mask,P.prev[x&P.w_mask]=P.head[P.ins_h],P.head[P.ins_h]=x,x++,--w;);P.strstart=x,P.lookahead=D-1,le(P)}return P.strstart+=P.lookahead,P.block_start=P.strstart,P.insert=P.lookahead,P.lookahead=0,P.match_length=P.prev_length=D-1,P.match_available=0,u.next_in=U,u.input=A,u.avail_in=V,P.wrap=T,d},n.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./messages":51,"./trees":52}],47:[function(t,i,n){i.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},{}],48:[function(t,i,n){i.exports=function(r,s){var o,a,l,c,f,p,d,y,h,g,v,b,M,S,E,R,z,j,D,H,q,C,B,m,O;o=r.state,a=r.next_in,m=r.input,l=a+(r.avail_in-5),c=r.next_out,O=r.output,f=c-(s-r.avail_out),p=c+(r.avail_out-257),d=o.dmax,y=o.wsize,h=o.whave,g=o.wnext,v=o.window,b=o.hold,M=o.bits,S=o.lencode,E=o.distcode,R=(1<<o.lenbits)-1,z=(1<<o.distbits)-1;e:do{M<15&&(b+=m[a++]<<M,M+=8,b+=m[a++]<<M,M+=8),j=S[b&R];t:for(;;){if(b>>>=D=j>>>24,M-=D,(D=j>>>16&255)===0)O[c++]=65535&j;else{if(!(16&D)){if((64&D)==0){j=S[(65535&j)+(b&(1<<D)-1)];continue t}if(32&D){o.mode=12;break e}r.msg="invalid literal/length code",o.mode=30;break e}H=65535&j,(D&=15)&&(M<D&&(b+=m[a++]<<M,M+=8),H+=b&(1<<D)-1,b>>>=D,M-=D),M<15&&(b+=m[a++]<<M,M+=8,b+=m[a++]<<M,M+=8),j=E[b&z];i:for(;;){if(b>>>=D=j>>>24,M-=D,!(16&(D=j>>>16&255))){if((64&D)==0){j=E[(65535&j)+(b&(1<<D)-1)];continue i}r.msg="invalid distance code",o.mode=30;break e}if(q=65535&j,M<(D&=15)&&(b+=m[a++]<<M,(M+=8)<D&&(b+=m[a++]<<M,M+=8)),d<(q+=b&(1<<D)-1)){r.msg="invalid distance too far back",o.mode=30;break e}if(b>>>=D,M-=D,(D=c-f)<q){if(h<(D=q-D)&&o.sane){r.msg="invalid distance too far back",o.mode=30;break e}if(B=v,(C=0)===g){if(C+=y-D,D<H){for(H-=D;O[c++]=v[C++],--D;);C=c-q,B=O}}else if(g<D){if(C+=y+g-D,(D-=g)<H){for(H-=D;O[c++]=v[C++],--D;);if(C=0,g<H){for(H-=D=g;O[c++]=v[C++],--D;);C=c-q,B=O}}}else if(C+=g-D,D<H){for(H-=D;O[c++]=v[C++],--D;);C=c-q,B=O}for(;2<H;)O[c++]=B[C++],O[c++]=B[C++],O[c++]=B[C++],H-=3;H&&(O[c++]=B[C++],1<H&&(O[c++]=B[C++]))}else{for(C=c-q;O[c++]=O[C++],O[c++]=O[C++],O[c++]=O[C++],2<(H-=3););H&&(O[c++]=O[C++],1<H&&(O[c++]=O[C++]))}break}}break}}while(a<l&&c<p);a-=H=M>>3,b&=(1<<(M-=H<<3))-1,r.next_in=a,r.next_out=c,r.avail_in=a<l?l-a+5:5-(a-l),r.avail_out=c<p?p-c+257:257-(c-p),o.hold=b,o.bits=M}},{}],49:[function(t,i,n){var r=t("../utils/common"),s=t("./adler32"),o=t("./crc32"),a=t("./inffast"),l=t("./inftrees"),c=1,f=2,p=0,d=-2,y=1,h=852,g=592;function v(C){return(C>>>24&255)+(C>>>8&65280)+((65280&C)<<8)+((255&C)<<24)}function b(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new r.Buf16(320),this.work=new r.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function M(C){var B;return C&&C.state?(B=C.state,C.total_in=C.total_out=B.total=0,C.msg="",B.wrap&&(C.adler=1&B.wrap),B.mode=y,B.last=0,B.havedict=0,B.dmax=32768,B.head=null,B.hold=0,B.bits=0,B.lencode=B.lendyn=new r.Buf32(h),B.distcode=B.distdyn=new r.Buf32(g),B.sane=1,B.back=-1,p):d}function S(C){var B;return C&&C.state?((B=C.state).wsize=0,B.whave=0,B.wnext=0,M(C)):d}function E(C,B){var m,O;return C&&C.state?(O=C.state,B<0?(m=0,B=-B):(m=1+(B>>4),B<48&&(B&=15)),B&&(B<8||15<B)?d:(O.window!==null&&O.wbits!==B&&(O.window=null),O.wrap=m,O.wbits=B,S(C))):d}function R(C,B){var m,O;return C?(O=new b,(C.state=O).window=null,(m=E(C,B))!==p&&(C.state=null),m):d}var z,j,D=!0;function H(C){if(D){var B;for(z=new r.Buf32(512),j=new r.Buf32(32),B=0;B<144;)C.lens[B++]=8;for(;B<256;)C.lens[B++]=9;for(;B<280;)C.lens[B++]=7;for(;B<288;)C.lens[B++]=8;for(l(c,C.lens,0,288,z,0,C.work,{bits:9}),B=0;B<32;)C.lens[B++]=5;l(f,C.lens,0,32,j,0,C.work,{bits:5}),D=!1}C.lencode=z,C.lenbits=9,C.distcode=j,C.distbits=5}function q(C,B,m,O){var ee,W=C.state;return W.window===null&&(W.wsize=1<<W.wbits,W.wnext=0,W.whave=0,W.window=new r.Buf8(W.wsize)),O>=W.wsize?(r.arraySet(W.window,B,m-W.wsize,W.wsize,0),W.wnext=0,W.whave=W.wsize):(O<(ee=W.wsize-W.wnext)&&(ee=O),r.arraySet(W.window,B,m-O,ee,W.wnext),(O-=ee)?(r.arraySet(W.window,B,m-O,O,0),W.wnext=O,W.whave=W.wsize):(W.wnext+=ee,W.wnext===W.wsize&&(W.wnext=0),W.whave<W.wsize&&(W.whave+=ee))),0}n.inflateReset=S,n.inflateReset2=E,n.inflateResetKeep=M,n.inflateInit=function(C){return R(C,15)},n.inflateInit2=R,n.inflate=function(C,B){var m,O,ee,W,te,F,J,I,L,Q,Y,Z,le,pe,ie,re,fe,he,be,ye,u,N,P,x,w=0,T=new r.Buf8(4),V=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!C||!C.state||!C.output||!C.input&&C.avail_in!==0)return d;(m=C.state).mode===12&&(m.mode=13),te=C.next_out,ee=C.output,J=C.avail_out,W=C.next_in,O=C.input,F=C.avail_in,I=m.hold,L=m.bits,Q=F,Y=J,N=p;e:for(;;)switch(m.mode){case y:if(m.wrap===0){m.mode=13;break}for(;L<16;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}if(2&m.wrap&&I===35615){T[m.check=0]=255&I,T[1]=I>>>8&255,m.check=o(m.check,T,2,0),L=I=0,m.mode=2;break}if(m.flags=0,m.head&&(m.head.done=!1),!(1&m.wrap)||(((255&I)<<8)+(I>>8))%31){C.msg="incorrect header check",m.mode=30;break}if((15&I)!=8){C.msg="unknown compression method",m.mode=30;break}if(L-=4,u=8+(15&(I>>>=4)),m.wbits===0)m.wbits=u;else if(u>m.wbits){C.msg="invalid window size",m.mode=30;break}m.dmax=1<<u,C.adler=m.check=1,m.mode=512&I?10:12,L=I=0;break;case 2:for(;L<16;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}if(m.flags=I,(255&m.flags)!=8){C.msg="unknown compression method",m.mode=30;break}if(57344&m.flags){C.msg="unknown header flags set",m.mode=30;break}m.head&&(m.head.text=I>>8&1),512&m.flags&&(T[0]=255&I,T[1]=I>>>8&255,m.check=o(m.check,T,2,0)),L=I=0,m.mode=3;case 3:for(;L<32;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}m.head&&(m.head.time=I),512&m.flags&&(T[0]=255&I,T[1]=I>>>8&255,T[2]=I>>>16&255,T[3]=I>>>24&255,m.check=o(m.check,T,4,0)),L=I=0,m.mode=4;case 4:for(;L<16;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}m.head&&(m.head.xflags=255&I,m.head.os=I>>8),512&m.flags&&(T[0]=255&I,T[1]=I>>>8&255,m.check=o(m.check,T,2,0)),L=I=0,m.mode=5;case 5:if(1024&m.flags){for(;L<16;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}m.length=I,m.head&&(m.head.extra_len=I),512&m.flags&&(T[0]=255&I,T[1]=I>>>8&255,m.check=o(m.check,T,2,0)),L=I=0}else m.head&&(m.head.extra=null);m.mode=6;case 6:if(1024&m.flags&&(F<(Z=m.length)&&(Z=F),Z&&(m.head&&(u=m.head.extra_len-m.length,m.head.extra||(m.head.extra=new Array(m.head.extra_len)),r.arraySet(m.head.extra,O,W,Z,u)),512&m.flags&&(m.check=o(m.check,O,Z,W)),F-=Z,W+=Z,m.length-=Z),m.length))break e;m.length=0,m.mode=7;case 7:if(2048&m.flags){if(F===0)break e;for(Z=0;u=O[W+Z++],m.head&&u&&m.length<65536&&(m.head.name+=String.fromCharCode(u)),u&&Z<F;);if(512&m.flags&&(m.check=o(m.check,O,Z,W)),F-=Z,W+=Z,u)break e}else m.head&&(m.head.name=null);m.length=0,m.mode=8;case 8:if(4096&m.flags){if(F===0)break e;for(Z=0;u=O[W+Z++],m.head&&u&&m.length<65536&&(m.head.comment+=String.fromCharCode(u)),u&&Z<F;);if(512&m.flags&&(m.check=o(m.check,O,Z,W)),F-=Z,W+=Z,u)break e}else m.head&&(m.head.comment=null);m.mode=9;case 9:if(512&m.flags){for(;L<16;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}if(I!==(65535&m.check)){C.msg="header crc mismatch",m.mode=30;break}L=I=0}m.head&&(m.head.hcrc=m.flags>>9&1,m.head.done=!0),C.adler=m.check=0,m.mode=12;break;case 10:for(;L<32;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}C.adler=m.check=v(I),L=I=0,m.mode=11;case 11:if(m.havedict===0)return C.next_out=te,C.avail_out=J,C.next_in=W,C.avail_in=F,m.hold=I,m.bits=L,2;C.adler=m.check=1,m.mode=12;case 12:if(B===5||B===6)break e;case 13:if(m.last){I>>>=7&L,L-=7&L,m.mode=27;break}for(;L<3;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}switch(m.last=1&I,L-=1,3&(I>>>=1)){case 0:m.mode=14;break;case 1:if(H(m),m.mode=20,B!==6)break;I>>>=2,L-=2;break e;case 2:m.mode=17;break;case 3:C.msg="invalid block type",m.mode=30}I>>>=2,L-=2;break;case 14:for(I>>>=7&L,L-=7&L;L<32;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}if((65535&I)!=(I>>>16^65535)){C.msg="invalid stored block lengths",m.mode=30;break}if(m.length=65535&I,L=I=0,m.mode=15,B===6)break e;case 15:m.mode=16;case 16:if(Z=m.length){if(F<Z&&(Z=F),J<Z&&(Z=J),Z===0)break e;r.arraySet(ee,O,W,Z,te),F-=Z,W+=Z,J-=Z,te+=Z,m.length-=Z;break}m.mode=12;break;case 17:for(;L<14;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}if(m.nlen=257+(31&I),I>>>=5,L-=5,m.ndist=1+(31&I),I>>>=5,L-=5,m.ncode=4+(15&I),I>>>=4,L-=4,286<m.nlen||30<m.ndist){C.msg="too many length or distance symbols",m.mode=30;break}m.have=0,m.mode=18;case 18:for(;m.have<m.ncode;){for(;L<3;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}m.lens[V[m.have++]]=7&I,I>>>=3,L-=3}for(;m.have<19;)m.lens[V[m.have++]]=0;if(m.lencode=m.lendyn,m.lenbits=7,P={bits:m.lenbits},N=l(0,m.lens,0,19,m.lencode,0,m.work,P),m.lenbits=P.bits,N){C.msg="invalid code lengths set",m.mode=30;break}m.have=0,m.mode=19;case 19:for(;m.have<m.nlen+m.ndist;){for(;re=(w=m.lencode[I&(1<<m.lenbits)-1])>>>16&255,fe=65535&w,!((ie=w>>>24)<=L);){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}if(fe<16)I>>>=ie,L-=ie,m.lens[m.have++]=fe;else{if(fe===16){for(x=ie+2;L<x;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}if(I>>>=ie,L-=ie,m.have===0){C.msg="invalid bit length repeat",m.mode=30;break}u=m.lens[m.have-1],Z=3+(3&I),I>>>=2,L-=2}else if(fe===17){for(x=ie+3;L<x;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}L-=ie,u=0,Z=3+(7&(I>>>=ie)),I>>>=3,L-=3}else{for(x=ie+7;L<x;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}L-=ie,u=0,Z=11+(127&(I>>>=ie)),I>>>=7,L-=7}if(m.have+Z>m.nlen+m.ndist){C.msg="invalid bit length repeat",m.mode=30;break}for(;Z--;)m.lens[m.have++]=u}}if(m.mode===30)break;if(m.lens[256]===0){C.msg="invalid code -- missing end-of-block",m.mode=30;break}if(m.lenbits=9,P={bits:m.lenbits},N=l(c,m.lens,0,m.nlen,m.lencode,0,m.work,P),m.lenbits=P.bits,N){C.msg="invalid literal/lengths set",m.mode=30;break}if(m.distbits=6,m.distcode=m.distdyn,P={bits:m.distbits},N=l(f,m.lens,m.nlen,m.ndist,m.distcode,0,m.work,P),m.distbits=P.bits,N){C.msg="invalid distances set",m.mode=30;break}if(m.mode=20,B===6)break e;case 20:m.mode=21;case 21:if(6<=F&&258<=J){C.next_out=te,C.avail_out=J,C.next_in=W,C.avail_in=F,m.hold=I,m.bits=L,a(C,Y),te=C.next_out,ee=C.output,J=C.avail_out,W=C.next_in,O=C.input,F=C.avail_in,I=m.hold,L=m.bits,m.mode===12&&(m.back=-1);break}for(m.back=0;re=(w=m.lencode[I&(1<<m.lenbits)-1])>>>16&255,fe=65535&w,!((ie=w>>>24)<=L);){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}if(re&&(240&re)==0){for(he=ie,be=re,ye=fe;re=(w=m.lencode[ye+((I&(1<<he+be)-1)>>he)])>>>16&255,fe=65535&w,!(he+(ie=w>>>24)<=L);){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}I>>>=he,L-=he,m.back+=he}if(I>>>=ie,L-=ie,m.back+=ie,m.length=fe,re===0){m.mode=26;break}if(32&re){m.back=-1,m.mode=12;break}if(64&re){C.msg="invalid literal/length code",m.mode=30;break}m.extra=15&re,m.mode=22;case 22:if(m.extra){for(x=m.extra;L<x;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}m.length+=I&(1<<m.extra)-1,I>>>=m.extra,L-=m.extra,m.back+=m.extra}m.was=m.length,m.mode=23;case 23:for(;re=(w=m.distcode[I&(1<<m.distbits)-1])>>>16&255,fe=65535&w,!((ie=w>>>24)<=L);){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}if((240&re)==0){for(he=ie,be=re,ye=fe;re=(w=m.distcode[ye+((I&(1<<he+be)-1)>>he)])>>>16&255,fe=65535&w,!(he+(ie=w>>>24)<=L);){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}I>>>=he,L-=he,m.back+=he}if(I>>>=ie,L-=ie,m.back+=ie,64&re){C.msg="invalid distance code",m.mode=30;break}m.offset=fe,m.extra=15&re,m.mode=24;case 24:if(m.extra){for(x=m.extra;L<x;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}m.offset+=I&(1<<m.extra)-1,I>>>=m.extra,L-=m.extra,m.back+=m.extra}if(m.offset>m.dmax){C.msg="invalid distance too far back",m.mode=30;break}m.mode=25;case 25:if(J===0)break e;if(Z=Y-J,m.offset>Z){if((Z=m.offset-Z)>m.whave&&m.sane){C.msg="invalid distance too far back",m.mode=30;break}le=Z>m.wnext?(Z-=m.wnext,m.wsize-Z):m.wnext-Z,Z>m.length&&(Z=m.length),pe=m.window}else pe=ee,le=te-m.offset,Z=m.length;for(J<Z&&(Z=J),J-=Z,m.length-=Z;ee[te++]=pe[le++],--Z;);m.length===0&&(m.mode=21);break;case 26:if(J===0)break e;ee[te++]=m.length,J--,m.mode=21;break;case 27:if(m.wrap){for(;L<32;){if(F===0)break e;F--,I|=O[W++]<<L,L+=8}if(Y-=J,C.total_out+=Y,m.total+=Y,Y&&(C.adler=m.check=m.flags?o(m.check,ee,Y,te-Y):s(m.check,ee,Y,te-Y)),Y=J,(m.flags?I:v(I))!==m.check){C.msg="incorrect data check",m.mode=30;break}L=I=0}m.mode=28;case 28:if(m.wrap&&m.flags){for(;L<32;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}if(I!==(4294967295&m.total)){C.msg="incorrect length check",m.mode=30;break}L=I=0}m.mode=29;case 29:N=1;break e;case 30:N=-3;break e;case 31:return-4;case 32:default:return d}return C.next_out=te,C.avail_out=J,C.next_in=W,C.avail_in=F,m.hold=I,m.bits=L,(m.wsize||Y!==C.avail_out&&m.mode<30&&(m.mode<27||B!==4))&&q(C,C.output,C.next_out,Y-C.avail_out)?(m.mode=31,-4):(Q-=C.avail_in,Y-=C.avail_out,C.total_in+=Q,C.total_out+=Y,m.total+=Y,m.wrap&&Y&&(C.adler=m.check=m.flags?o(m.check,ee,Y,C.next_out-Y):s(m.check,ee,Y,C.next_out-Y)),C.data_type=m.bits+(m.last?64:0)+(m.mode===12?128:0)+(m.mode===20||m.mode===15?256:0),(Q==0&&Y===0||B===4)&&N===p&&(N=-5),N)},n.inflateEnd=function(C){if(!C||!C.state)return d;var B=C.state;return B.window&&(B.window=null),C.state=null,p},n.inflateGetHeader=function(C,B){var m;return C&&C.state?(2&(m=C.state).wrap)==0?d:((m.head=B).done=!1,p):d},n.inflateSetDictionary=function(C,B){var m,O=B.length;return C&&C.state?(m=C.state).wrap!==0&&m.mode!==11?d:m.mode===11&&s(1,B,O,0)!==m.check?-3:q(C,B,O,O)?(m.mode=31,-4):(m.havedict=1,p):d},n.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./inffast":48,"./inftrees":50}],50:[function(t,i,n){var r=t("../utils/common"),s=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],o=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],a=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],l=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];i.exports=function(c,f,p,d,y,h,g,v){var b,M,S,E,R,z,j,D,H,q=v.bits,C=0,B=0,m=0,O=0,ee=0,W=0,te=0,F=0,J=0,I=0,L=null,Q=0,Y=new r.Buf16(16),Z=new r.Buf16(16),le=null,pe=0;for(C=0;C<=15;C++)Y[C]=0;for(B=0;B<d;B++)Y[f[p+B]]++;for(ee=q,O=15;1<=O&&Y[O]===0;O--);if(O<ee&&(ee=O),O===0)return y[h++]=20971520,y[h++]=20971520,v.bits=1,0;for(m=1;m<O&&Y[m]===0;m++);for(ee<m&&(ee=m),C=F=1;C<=15;C++)if(F<<=1,(F-=Y[C])<0)return-1;if(0<F&&(c===0||O!==1))return-1;for(Z[1]=0,C=1;C<15;C++)Z[C+1]=Z[C]+Y[C];for(B=0;B<d;B++)f[p+B]!==0&&(g[Z[f[p+B]]++]=B);if(z=c===0?(L=le=g,19):c===1?(L=s,Q-=257,le=o,pe-=257,256):(L=a,le=l,-1),C=m,R=h,te=B=I=0,S=-1,E=(J=1<<(W=ee))-1,c===1&&852<J||c===2&&592<J)return 1;for(;;){for(j=C-te,H=g[B]<z?(D=0,g[B]):g[B]>z?(D=le[pe+g[B]],L[Q+g[B]]):(D=96,0),b=1<<C-te,m=M=1<<W;y[R+(I>>te)+(M-=b)]=j<<24|D<<16|H|0,M!==0;);for(b=1<<C-1;I&b;)b>>=1;if(b!==0?(I&=b-1,I+=b):I=0,B++,--Y[C]==0){if(C===O)break;C=f[p+g[B]]}if(ee<C&&(I&E)!==S){for(te===0&&(te=ee),R+=m,F=1<<(W=C-te);W+te<O&&!((F-=Y[W+te])<=0);)W++,F<<=1;if(J+=1<<W,c===1&&852<J||c===2&&592<J)return 1;y[S=I&E]=ee<<24|W<<16|R-h|0}}return I!==0&&(y[R+I]=C-te<<24|64<<16|0),v.bits=ee,0}},{"../utils/common":41}],51:[function(t,i,n){i.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],52:[function(t,i,n){var r=t("../utils/common"),s=0,o=1;function a(w){for(var T=w.length;0<=--T;)w[T]=0}var l=0,c=29,f=256,p=f+1+c,d=30,y=19,h=2*p+1,g=15,v=16,b=7,M=256,S=16,E=17,R=18,z=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],j=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],D=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],H=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],q=new Array(2*(p+2));a(q);var C=new Array(2*d);a(C);var B=new Array(512);a(B);var m=new Array(256);a(m);var O=new Array(c);a(O);var ee,W,te,F=new Array(d);function J(w,T,V,U,A){this.static_tree=w,this.extra_bits=T,this.extra_base=V,this.elems=U,this.max_length=A,this.has_stree=w&&w.length}function I(w,T){this.dyn_tree=w,this.max_code=0,this.stat_desc=T}function L(w){return w<256?B[w]:B[256+(w>>>7)]}function Q(w,T){w.pending_buf[w.pending++]=255&T,w.pending_buf[w.pending++]=T>>>8&255}function Y(w,T,V){w.bi_valid>v-V?(w.bi_buf|=T<<w.bi_valid&65535,Q(w,w.bi_buf),w.bi_buf=T>>v-w.bi_valid,w.bi_valid+=V-v):(w.bi_buf|=T<<w.bi_valid&65535,w.bi_valid+=V)}function Z(w,T,V){Y(w,V[2*T],V[2*T+1])}function le(w,T){for(var V=0;V|=1&w,w>>>=1,V<<=1,0<--T;);return V>>>1}function pe(w,T,V){var U,A,G=new Array(g+1),X=0;for(U=1;U<=g;U++)G[U]=X=X+V[U-1]<<1;for(A=0;A<=T;A++){var $=w[2*A+1];$!==0&&(w[2*A]=le(G[$]++,$))}}function ie(w){var T;for(T=0;T<p;T++)w.dyn_ltree[2*T]=0;for(T=0;T<d;T++)w.dyn_dtree[2*T]=0;for(T=0;T<y;T++)w.bl_tree[2*T]=0;w.dyn_ltree[2*M]=1,w.opt_len=w.static_len=0,w.last_lit=w.matches=0}function re(w){8<w.bi_valid?Q(w,w.bi_buf):0<w.bi_valid&&(w.pending_buf[w.pending++]=w.bi_buf),w.bi_buf=0,w.bi_valid=0}function fe(w,T,V,U){var A=2*T,G=2*V;return w[A]<w[G]||w[A]===w[G]&&U[T]<=U[V]}function he(w,T,V){for(var U=w.heap[V],A=V<<1;A<=w.heap_len&&(A<w.heap_len&&fe(T,w.heap[A+1],w.heap[A],w.depth)&&A++,!fe(T,U,w.heap[A],w.depth));)w.heap[V]=w.heap[A],V=A,A<<=1;w.heap[V]=U}function be(w,T,V){var U,A,G,X,$=0;if(w.last_lit!==0)for(;U=w.pending_buf[w.d_buf+2*$]<<8|w.pending_buf[w.d_buf+2*$+1],A=w.pending_buf[w.l_buf+$],$++,U===0?Z(w,A,T):(Z(w,(G=m[A])+f+1,T),(X=z[G])!==0&&Y(w,A-=O[G],X),Z(w,G=L(--U),V),(X=j[G])!==0&&Y(w,U-=F[G],X)),$<w.last_lit;);Z(w,M,T)}function ye(w,T){var V,U,A,G=T.dyn_tree,X=T.stat_desc.static_tree,$=T.stat_desc.has_stree,K=T.stat_desc.elems,se=-1;for(w.heap_len=0,w.heap_max=h,V=0;V<K;V++)G[2*V]!==0?(w.heap[++w.heap_len]=se=V,w.depth[V]=0):G[2*V+1]=0;for(;w.heap_len<2;)G[2*(A=w.heap[++w.heap_len]=se<2?++se:0)]=1,w.depth[A]=0,w.opt_len--,$&&(w.static_len-=X[2*A+1]);for(T.max_code=se,V=w.heap_len>>1;1<=V;V--)he(w,G,V);for(A=K;V=w.heap[1],w.heap[1]=w.heap[w.heap_len--],he(w,G,1),U=w.heap[1],w.heap[--w.heap_max]=V,w.heap[--w.heap_max]=U,G[2*A]=G[2*V]+G[2*U],w.depth[A]=(w.depth[V]>=w.depth[U]?w.depth[V]:w.depth[U])+1,G[2*V+1]=G[2*U+1]=A,w.heap[1]=A++,he(w,G,1),2<=w.heap_len;);w.heap[--w.heap_max]=w.heap[1],(function(ne,ge){var Se,we,Te,ce,De,je,xe=ge.dyn_tree,ct=ge.max_code,Ai=ge.stat_desc.static_tree,Li=ge.stat_desc.has_stree,Ii=ge.stat_desc.extra_bits,dt=ge.stat_desc.extra_base,Ae=ge.stat_desc.max_length,Be=0;for(ce=0;ce<=g;ce++)ne.bl_count[ce]=0;for(xe[2*ne.heap[ne.heap_max]+1]=0,Se=ne.heap_max+1;Se<h;Se++)Ae<(ce=xe[2*xe[2*(we=ne.heap[Se])+1]+1]+1)&&(ce=Ae,Be++),xe[2*we+1]=ce,ct<we||(ne.bl_count[ce]++,De=0,dt<=we&&(De=Ii[we-dt]),je=xe[2*we],ne.opt_len+=je*(ce+De),Li&&(ne.static_len+=je*(Ai[2*we+1]+De)));if(Be!==0){do{for(ce=Ae-1;ne.bl_count[ce]===0;)ce--;ne.bl_count[ce]--,ne.bl_count[ce+1]+=2,ne.bl_count[Ae]--,Be-=2}while(0<Be);for(ce=Ae;ce!==0;ce--)for(we=ne.bl_count[ce];we!==0;)ct<(Te=ne.heap[--Se])||(xe[2*Te+1]!==ce&&(ne.opt_len+=(ce-xe[2*Te+1])*xe[2*Te],xe[2*Te+1]=ce),we--)}})(w,T),pe(G,se,w.bl_count)}function u(w,T,V){var U,A,G=-1,X=T[1],$=0,K=7,se=4;for(X===0&&(K=138,se=3),T[2*(V+1)+1]=65535,U=0;U<=V;U++)A=X,X=T[2*(U+1)+1],++$<K&&A===X||($<se?w.bl_tree[2*A]+=$:A!==0?(A!==G&&w.bl_tree[2*A]++,w.bl_tree[2*S]++):$<=10?w.bl_tree[2*E]++:w.bl_tree[2*R]++,G=A,se=($=0)===X?(K=138,3):A===X?(K=6,3):(K=7,4))}function N(w,T,V){var U,A,G=-1,X=T[1],$=0,K=7,se=4;for(X===0&&(K=138,se=3),U=0;U<=V;U++)if(A=X,X=T[2*(U+1)+1],!(++$<K&&A===X)){if($<se)for(;Z(w,A,w.bl_tree),--$!=0;);else A!==0?(A!==G&&(Z(w,A,w.bl_tree),$--),Z(w,S,w.bl_tree),Y(w,$-3,2)):$<=10?(Z(w,E,w.bl_tree),Y(w,$-3,3)):(Z(w,R,w.bl_tree),Y(w,$-11,7));G=A,se=($=0)===X?(K=138,3):A===X?(K=6,3):(K=7,4)}}a(F);var P=!1;function x(w,T,V,U){Y(w,(l<<1)+(U?1:0),3),(function(A,G,X,$){re(A),Q(A,X),Q(A,~X),r.arraySet(A.pending_buf,A.window,G,X,A.pending),A.pending+=X})(w,T,V)}n._tr_init=function(w){P||((function(){var T,V,U,A,G,X=new Array(g+1);for(A=U=0;A<c-1;A++)for(O[A]=U,T=0;T<1<<z[A];T++)m[U++]=A;for(m[U-1]=A,A=G=0;A<16;A++)for(F[A]=G,T=0;T<1<<j[A];T++)B[G++]=A;for(G>>=7;A<d;A++)for(F[A]=G<<7,T=0;T<1<<j[A]-7;T++)B[256+G++]=A;for(V=0;V<=g;V++)X[V]=0;for(T=0;T<=143;)q[2*T+1]=8,T++,X[8]++;for(;T<=255;)q[2*T+1]=9,T++,X[9]++;for(;T<=279;)q[2*T+1]=7,T++,X[7]++;for(;T<=287;)q[2*T+1]=8,T++,X[8]++;for(pe(q,p+1,X),T=0;T<d;T++)C[2*T+1]=5,C[2*T]=le(T,5);ee=new J(q,z,f+1,p,g),W=new J(C,j,0,d,g),te=new J(new Array(0),D,0,y,b)})(),P=!0),w.l_desc=new I(w.dyn_ltree,ee),w.d_desc=new I(w.dyn_dtree,W),w.bl_desc=new I(w.bl_tree,te),w.bi_buf=0,w.bi_valid=0,ie(w)},n._tr_stored_block=x,n._tr_flush_block=function(w,T,V,U){var A,G,X=0;0<w.level?(w.strm.data_type===2&&(w.strm.data_type=(function($){var K,se=4093624447;for(K=0;K<=31;K++,se>>>=1)if(1&se&&$.dyn_ltree[2*K]!==0)return s;if($.dyn_ltree[18]!==0||$.dyn_ltree[20]!==0||$.dyn_ltree[26]!==0)return o;for(K=32;K<f;K++)if($.dyn_ltree[2*K]!==0)return o;return s})(w)),ye(w,w.l_desc),ye(w,w.d_desc),X=(function($){var K;for(u($,$.dyn_ltree,$.l_desc.max_code),u($,$.dyn_dtree,$.d_desc.max_code),ye($,$.bl_desc),K=y-1;3<=K&&$.bl_tree[2*H[K]+1]===0;K--);return $.opt_len+=3*(K+1)+5+5+4,K})(w),A=w.opt_len+3+7>>>3,(G=w.static_len+3+7>>>3)<=A&&(A=G)):A=G=V+5,V+4<=A&&T!==-1?x(w,T,V,U):w.strategy===4||G===A?(Y(w,2+(U?1:0),3),be(w,q,C)):(Y(w,4+(U?1:0),3),(function($,K,se,ne){var ge;for(Y($,K-257,5),Y($,se-1,5),Y($,ne-4,4),ge=0;ge<ne;ge++)Y($,$.bl_tree[2*H[ge]+1],3);N($,$.dyn_ltree,K-1),N($,$.dyn_dtree,se-1)})(w,w.l_desc.max_code+1,w.d_desc.max_code+1,X+1),be(w,w.dyn_ltree,w.dyn_dtree)),ie(w),U&&re(w)},n._tr_tally=function(w,T,V){return w.pending_buf[w.d_buf+2*w.last_lit]=T>>>8&255,w.pending_buf[w.d_buf+2*w.last_lit+1]=255&T,w.pending_buf[w.l_buf+w.last_lit]=255&V,w.last_lit++,T===0?w.dyn_ltree[2*V]++:(w.matches++,T--,w.dyn_ltree[2*(m[V]+f+1)]++,w.dyn_dtree[2*L(T)]++),w.last_lit===w.lit_bufsize-1},n._tr_align=function(w){Y(w,2,3),Z(w,M,q),(function(T){T.bi_valid===16?(Q(T,T.bi_buf),T.bi_buf=0,T.bi_valid=0):8<=T.bi_valid&&(T.pending_buf[T.pending++]=255&T.bi_buf,T.bi_buf>>=8,T.bi_valid-=8)})(w)}},{"../utils/common":41}],53:[function(t,i,n){i.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(t,i,n){(function(r){(function(s,o){if(!s.setImmediate){var a,l,c,f,p=1,d={},y=!1,h=s.document,g=Object.getPrototypeOf&&Object.getPrototypeOf(s);g=g&&g.setTimeout?g:s,a={}.toString.call(s.process)==="[object process]"?function(S){process.nextTick(function(){b(S)})}:(function(){if(s.postMessage&&!s.importScripts){var S=!0,E=s.onmessage;return s.onmessage=function(){S=!1},s.postMessage("","*"),s.onmessage=E,S}})()?(f="setImmediate$"+Math.random()+"$",s.addEventListener?s.addEventListener("message",M,!1):s.attachEvent("onmessage",M),function(S){s.postMessage(f+S,"*")}):s.MessageChannel?((c=new MessageChannel).port1.onmessage=function(S){b(S.data)},function(S){c.port2.postMessage(S)}):h&&"onreadystatechange"in h.createElement("script")?(l=h.documentElement,function(S){var E=h.createElement("script");E.onreadystatechange=function(){b(S),E.onreadystatechange=null,l.removeChild(E),E=null},l.appendChild(E)}):function(S){setTimeout(b,0,S)},g.setImmediate=function(S){typeof S!="function"&&(S=new Function(""+S));for(var E=new Array(arguments.length-1),R=0;R<E.length;R++)E[R]=arguments[R+1];var z={callback:S,args:E};return d[p]=z,a(p),p++},g.clearImmediate=v}function v(S){delete d[S]}function b(S){if(y)setTimeout(b,0,S);else{var E=d[S];if(E){y=!0;try{(function(R){var z=R.callback,j=R.args;switch(j.length){case 0:z();break;case 1:z(j[0]);break;case 2:z(j[0],j[1]);break;case 3:z(j[0],j[1],j[2]);break;default:z.apply(o,j)}})(E)}finally{v(S),y=!1}}}}function M(S){S.source===s&&typeof S.data=="string"&&S.data.indexOf(f)===0&&b(+S.data.slice(f.length))}})(typeof self>"u"?r===void 0?this:r:self)}).call(this,typeof Le<"u"?Le:typeof self<"u"?self:typeof window<"u"?window:{})},{}]},{},[10])(10)})})(Ne)),Ne.exports}var Bt=Dt();const Rt=Fe(Bt);class Nt{zipObjectUrls=[];async load(e){if(this.clearZipObjectUrls(),this.isManifestUrl(e)){const t=await this.fetchJson(e);return this.loadSplitData(this.getBaseUrl(e),t)}if(e.endsWith("/")){const t=this.normalizeDirectoryUrl(e),i=await this.fetchJson(this.joinUrl(t,"manifest.json"));return this.loadSplitData(t,i)}try{return await this.loadZipData(e)}catch(t){if(this.is2dZipUrl(e))throw t;try{const i=this.normalizeDirectoryUrl(e),n=await this.fetchJson(this.joinUrl(i,"manifest.json"));return this.loadSplitData(i,n)}catch{throw t}}}async fetchJson(e){const t=await fetch(e);if(!t.ok)throw new Error(`HTTP error! status: ${t.status}`);return t.json()}async loadSplitData(e,t,i=r=>this.fetchJson(r),n=(r,s)=>Promise.resolve(this.resolveImageUrl(r,s))){const r=await i(this.joinUrl(e,t.metadataUrl??"metadata.json")),[s,o,a,l]=await Promise.all([i(this.joinUrl(e,t.layersUrl??"layers.json")),this.loadBlocks(e,t.blocksUrl??"blocks/index.json",i),this.loadTiles(e,t.root,i),this.loadLayouts(e,r?.layoutsUrl,i)]);await this.resolveBlockAssets(o,e,n);const c=[];return a.forEach(f=>{f.inserts.forEach(p=>c.push(p))}),{version:t.version??"1.0",metadata:r,layers:s,blocks:o,entities:c,octree:t.root,tiles:a,layouts:l}}async loadLayouts(e,t,i){if(!t)return[];const n=await i(this.joinUrl(e,t)),r=Array.isArray(n?.layouts)?n.layouts:[];return(await Promise.all(r.map(async o=>{const a=o.paperUrl?await i(this.joinUrl(e,o.paperUrl)):void 0,l=o.viewportsUrl?await i(this.joinUrl(e,o.viewportsUrl)):void 0;return{id:String(o.id??a?.id??""),name:String(o.name??a?.name??o.id??""),tabOrder:Number.isFinite(Number(o.tabOrder))?Number(o.tabOrder):void 0,paperUrl:o.paperUrl,viewportsUrl:o.viewportsUrl,paper:a,paperTiles:await this.loadTiles(e,a?.root,i),viewports:Array.isArray(l?.viewports)?l.viewports:[]}}))).sort((o,a)=>(o.tabOrder??0)-(a.tabOrder??0))}async loadBlocks(e,t,i){const r=(await i(this.joinUrl(e,t))).parts??[],s=await Promise.all(r.map(a=>this.loadBlockPart(this.joinUrl(e,a),i))),o=[];return s.forEach(a=>{(Array.isArray(a?.blocks)?a.blocks:[]).forEach(c=>o.push(c))}),o}async loadBlockPart(e,t){try{return await t(e)}catch(i){const n=i instanceof Error?i.message:String(i);return console.warn(`[LoaderModule2d] Skip missing block json: ${e}`,n),{blocks:[]}}}async resolveBlockAssets(e,t,i){await Promise.all(e.map(async n=>{const r=Array.isArray(n?.entities)?n.entities:[];await Promise.all(r.map(async s=>{String(s?.type).toUpperCase()==="IMAGE"&&(s.imageUrl=await i(s,t))}))}))}resolveImageUrl(e,t){const i=e.localPath||e.sourcePath||e.path||e.url||"";if(/^(https?:)?\/\//i.test(i)||i.startsWith("/"))return i;const r=String(i).replace(/\\/g,"/").split("/").filter(Boolean).pop();return r?this.joinUrl(t,r):""}async loadTiles(e,t,i){const n=this.collectTileNodes(t);return await Promise.all(n.map(async s=>{const o=s.tileUrl??"",a=await i(this.joinUrl(e,o)),l=this.normalizeTileInserts(a.inserts??[]);return s.elements=l.map(c=>c.linkId??c.id).filter(c=>c!=null),{id:s.id??a.id??o,url:o,node:s,inserts:l}}))}normalizeTileInserts(e){return e.map(t=>({...t,linkId:t.linkId??t.id,type:"INSERT",color:t.color??0,visible:t.visible??!0}))}collectTileNodes(e){if(!e)return[];const t=[],i=[e];for(;i.length>0;){const n=i.pop();if(!n)continue;n.tileUrl&&t.push(n);const r=n.children??[];for(let s=r.length-1;s>=0;s-=1)i.push(r[s])}return t}async loadZipData(e){const t=await fetch(e);if(!t.ok)throw new Error(`HTTP error! status: ${t.status}`);const i=await Rt.loadAsync(await t.arrayBuffer()),n=this.findZipManifestPath(i),r=await this.fetchZipJson(i,n);if(!this.isSplitManifest(r))throw new Error("[LoaderModule2d] Expected split CAD manifest data in .2d package.");const s=this.getZipBasePath(n);return this.loadSplitData(s,r,o=>this.fetchZipJson(i,o),(o,a)=>this.resolveZipImageUrl(i,o,a))}findZipManifestPath(e){const t=Object.keys(e.files).filter(r=>!e.files[r].dir),n=t.find(r=>this.normalizeZipPath(r).toLowerCase()==="manifest.json")??t.find(r=>this.normalizeZipPath(r).toLowerCase().endsWith("/manifest.json"));if(!n)throw new Error("[LoaderModule2d] Missing manifest.json in .2d package.");return this.normalizeZipPath(n)}async fetchZipJson(e,t){if(/^(https?:)?\/\//i.test(t))return this.fetchJson(t);const i=this.getZipFile(e,t);if(!i)throw new Error(`[LoaderModule2d] Missing file in .2d package: ${t}`);return JSON.parse(await i.async("string"))}async resolveZipImageUrl(e,t,i){const n=t.localPath||t.sourcePath||t.path||t.url||"";if(/^(https?:)?\/\//i.test(n)||String(n).startsWith("blob:"))return n;const r=this.normalizeZipPath(String(n)),s=r.split("/").filter(Boolean).pop(),a=[this.joinUrl(i,r),s?this.joinUrl(i,s):"",r,s??""].filter(Boolean).map(c=>this.getZipFile(e,c)).find(c=>!!c);if(!a)return"";const l=URL.createObjectURL(new Blob([await a.async("arraybuffer")]));return this.zipObjectUrls.push(l),l}isSplitManifest(e){return!!e&&typeof e=="object"&&(e.splitType==="octree-2d"||!!e.blocksUrl)}is2dZipUrl(e){return/\.2d($|[?#])/i.test(e)}isManifestUrl(e){return/manifest\.json($|\?)/i.test(e)}getBaseUrl(e){const t=e.split("?")[0];return t.slice(0,t.lastIndexOf("/")+1)}getZipBasePath(e){const t=this.normalizeZipPath(e),i=t.lastIndexOf("/");return i>=0?t.slice(0,i+1):""}normalizeDirectoryUrl(e){return e.endsWith("/")?e:`${e}/`}joinUrl(e,t){return/^(https?:)?\/\//i.test(t)||t.startsWith("/")?t:`${e}${t}`.replace(/([^:]\/)\/+/g,"$1")}normalizeZipPath(e){return String(e).split("?")[0].split("#")[0].replace(/\\/g,"/").replace(/^\/+/,"")}getZipFile(e,t){const i=this.normalizeZipPath(t),n=e.file(i);if(n)return n;const r=i.toLowerCase(),s=Object.keys(e.files).find(o=>this.normalizeZipPath(o).toLowerCase()===r);return s?e.file(s):null}clearZipObjectUrls(){this.zipObjectUrls.forEach(e=>URL.revokeObjectURL(e)),this.zipObjectUrls=[]}}function Xe(k,e,t){const i=t.length-k-1;if(e>=t[i])return i-1;if(e<=t[k])return k;let n=k,r=i,s=Math.floor((n+r)/2);for(;e<t[s]||e>=t[s+1];)e<t[s]?r=s:n=s,s=Math.floor((n+r)/2);return s}function Ot(k,e,t,i){const n=[],r=[],s=[];n[0]=1;for(let o=1;o<=t;++o){r[o]=e-i[k+1-o],s[o]=i[k+o]-e;let a=0;for(let l=0;l<o;++l){const c=s[l+1],f=r[o-l],p=n[l]/(c+f);n[l]=a+c*p,a=f*p}n[o]=a}return n}function Vt(k,e,t,i){const n=Xe(k,i,e),r=Ot(n,i,k,e),s=new ue.Vector4(0,0,0,0);for(let o=0;o<=k;++o){const a=t[n-k+o],l=r[o],c=a.w*l;s.x+=a.x*c,s.y+=a.y*c,s.z+=a.z*c,s.w+=a.w*l}return s}function Ut(k,e,t,i,n){const r=[];for(let f=0;f<=t;++f)r[f]=0;const s=[];for(let f=0;f<=i;++f)s[f]=r.slice(0);const o=[];for(let f=0;f<=t;++f)o[f]=r.slice(0);o[0][0]=1;const a=r.slice(0),l=r.slice(0);for(let f=1;f<=t;++f){a[f]=e-n[k+1-f],l[f]=n[k+f]-e;let p=0;for(let d=0;d<f;++d){const y=l[d+1],h=a[f-d];o[f][d]=y+h;const g=o[d][f-1]/o[f][d];o[d][f]=p+y*g,p=h*g}o[f][f]=p}for(let f=0;f<=t;++f)s[0][f]=o[f][t];for(let f=0;f<=t;++f){let p=0,d=1;const y=[];for(let h=0;h<=t;++h)y[h]=r.slice(0);y[0][0]=1;for(let h=1;h<=i;++h){let g=0;const v=f-h,b=t-h;f>=h&&(y[d][0]=y[p][0]/o[b+1][v],g=y[d][0]*o[v][b]);const M=v>=-1?1:-v,S=f-1<=b?h-1:t-f;for(let R=M;R<=S;++R)y[d][R]=(y[p][R]-y[p][R-1])/o[b+1][v+R],g+=y[d][R]*o[v+R][b];f<=b&&(y[d][h]=-y[p][h-1]/o[b+1][f],g+=y[d][h]*o[f][b]),s[h][f]=g;const E=p;p=d,d=E}}let c=t;for(let f=1;f<=i;++f){for(let p=0;p<=t;++p)s[f][p]*=c;c*=t-f}return s}function jt(k,e,t,i,n){const r=n<k?n:k,s=[],o=Xe(k,i,e),a=Ut(o,i,k,r,e),l=[];for(let c=0;c<t.length;++c){const f=t[c].clone(),p=f.w;f.x*=p,f.y*=p,f.z*=p,l[c]=f}for(let c=0;c<=r;++c){const f=l[o-k].clone().multiplyScalar(a[c][0]);for(let p=1;p<=k;++p)f.add(l[o-k+p].clone().multiplyScalar(a[c][p]));s[c]=f}for(let c=r+1;c<=n+1;++c)s[c]=new ue.Vector4(0,0,0);return s}function Wt(k,e){let t=1;for(let n=2;n<=k;++n)t*=n;let i=1;for(let n=2;n<=e;++n)i*=n;for(let n=2;n<=k-e;++n)i*=n;return t/i}function Ft(k){const e=k.length,t=[],i=[];for(let r=0;r<e;++r){const s=k[r];t[r]=new ue.Vector3(s.x,s.y,s.z),i[r]=s.w}const n=[];for(let r=0;r<e;++r){const s=t[r].clone();for(let o=1;o<=r;++o)s.sub(n[r-o].clone().multiplyScalar(Wt(r,o)*i[o]));n[r]=s.divideScalar(i[0])}return n}function Gt(k,e,t,i,n){const r=jt(k,e,t,i,n);return Ft(r)}class Ht extends ue.Curve{constructor(e,t,i,n,r){super();const s=t?t.length-1:0,o=i?i.length:0;this.degree=e,this.knots=t,this.controlPoints=[],this.startKnot=n||0,this.endKnot=r||s;for(let a=0;a<o;++a){const l=i[a];this.controlPoints[a]=new ue.Vector4(l.x,l.y,l.z,l.w)}}getPoint(e,t=new ue.Vector3){const i=t,n=this.knots[this.startKnot]+e*(this.knots[this.endKnot]-this.knots[this.startKnot]),r=Vt(this.degree,this.knots,this.controlPoints,n);return r.w!==1&&r.divideScalar(r.w),i.set(r.x,r.y,r.z)}getTangent(e,t=new ue.Vector3){const i=t,n=this.knots[0]+e*(this.knots[this.knots.length-1]-this.knots[0]),r=Gt(this.degree,this.knots,this.controlPoints,n,1);return i.copy(r[1]).normalize(),i}toJSON(){const e=super.toJSON();return e.degree=this.degree,e.knots=[...this.knots],e.controlPoints=this.controlPoints.map(t=>t.toArray()),e.startKnot=this.startKnot,e.endKnot=this.endKnot,e}fromJSON(e){return super.fromJSON(e),this.degree=e.degree,this.knots=[...e.knots],this.controlPoints=e.controlPoints.map(t=>new ue.Vector4(t[0],t[1],t[2],t[3])),this.startKnot=e.startKnot,this.endKnot=e.endKnot,this}}function Ce(k,e=!1){const t=k[0].index!==null,i=new Set(Object.keys(k[0].attributes)),n=new Set(Object.keys(k[0].morphAttributes)),r={},s={},o=k[0].morphTargetsRelative,a=new ue.BufferGeometry;let l=0;for(let c=0;c<k.length;++c){const f=k[c];let p=0;if(t!==(f.index!==null))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+c+". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."),null;for(const d in f.attributes){if(!i.has(d))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+c+'. All geometries must have compatible attributes; make sure "'+d+'" attribute exists among all geometries, or in none of them.'),null;r[d]===void 0&&(r[d]=[]),r[d].push(f.attributes[d]),p++}if(p!==i.size)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+c+". Make sure all geometries have the same number of attributes."),null;if(o!==f.morphTargetsRelative)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+c+". .morphTargetsRelative must be consistent throughout all geometries."),null;for(const d in f.morphAttributes){if(!n.has(d))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+c+". .morphAttributes must be consistent throughout all geometries."),null;s[d]===void 0&&(s[d]=[]),s[d].push(f.morphAttributes[d])}if(e){let d;if(t)d=f.index.count;else if(f.attributes.position!==void 0)d=f.attributes.position.count;else return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+c+". The geometry must have either an index or a position attribute"),null;a.addGroup(l,d,c),l+=d}}if(t){let c=0;const f=[];for(let p=0;p<k.length;++p){const d=k[p].index;for(let y=0;y<d.count;++y)f.push(d.getX(y)+c);c+=k[p].attributes.position.count}a.setIndex(f)}for(const c in r){const f=Ke(r[c]);if(!f)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+c+" attribute."),null;a.setAttribute(c,f)}for(const c in s){const f=s[c][0].length;if(f===0)break;a.morphAttributes=a.morphAttributes||{},a.morphAttributes[c]=[];for(let p=0;p<f;++p){const d=[];for(let h=0;h<s[c].length;++h)d.push(s[c][h][p]);const y=Ke(d);if(!y)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+c+" morphAttribute."),null;a.morphAttributes[c].push(y)}}return a}function Ke(k){let e,t,i,n=-1,r=0;for(let l=0;l<k.length;++l){const c=k[l];if(e===void 0&&(e=c.array.constructor),e!==c.array.constructor)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."),null;if(t===void 0&&(t=c.itemSize),t!==c.itemSize)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."),null;if(i===void 0&&(i=c.normalized),i!==c.normalized)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."),null;if(n===-1&&(n=c.gpuType),n!==c.gpuType)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes."),null;r+=c.count*t}const s=new e(r),o=new ue.BufferAttribute(s,t,i);let a=0;for(let l=0;l<k.length;++l){const c=k[l];if(c.isInterleavedBufferAttribute){const f=a/t;for(let p=0,d=c.count;p<d;p++)for(let y=0;y<t;y++){const h=c.getComponent(p,y);o.setComponent(p+f,y,h)}}else s.set(c.array,a);a+=c.count*t}return n!==void 0&&(o.gpuType=n),o}const ae=1e-8,qe=.001,$t=8421504;class Zt{constructor(e){this.engine=e}create(e,t){const i=this.getLoopSet(e);if(i.outers.length===0)return[];if(this.isGradientFill(e))return this.createGradientItems(e,t,i);if(this.isSolidFill(e))return this.createSolidItems(e,t,i);const r=this.createPatternLineItem(e,t,i);return r?[r]:(this.warnUnknownPatternFallback(e),this.createSolidItems(e,t,i,$t))}isSolidFill(e){const t=String(e.pattern??e.patternName??"").toUpperCase();return e.solid===!0||t==="SOLID"}warnUnknownPatternFallback(e){const t=e.pattern??e.patternName??"UNKNOWN";this.engine.options?.debugHatch===!0&&console.warn(`[LoaderModule2d] HATCH pattern "${t}" cannot be rendered, use gray solid fallback.`)}isGradientFill(e){return e.gradient?.enabled===!0||String(e.patternType??"").toUpperCase()==="GRADIENTFILL"}getLoopSet(e){const t=(e.loops??[]).map(s=>this.normalizeLoop(s.points)).filter(s=>s.length>=3);if(t.length===0)return{outers:[],holes:[]};const i=(e.loops??[]).filter(s=>this.normalizeLoop(s.points).length>=3);if(!i.some(s=>s.type===!1))return this.classifyLoopsByContainment(t);const n=i.filter(s=>s.type!==!1).map(s=>this.normalizeLoop(s.points)),r=i.filter(s=>s.type===!1).map(s=>this.normalizeLoop(s.points));return n.length>0?{outers:n,holes:r}:{outers:[t[0]],holes:t.slice(1)}}classifyLoopsByContainment(e){const t=[...e].sort((r,s)=>Math.abs(this.signedArea(s))-Math.abs(this.signedArea(r))),i=[],n=[];return t.forEach((r,s)=>{const o=new _.Vector2(r[0][0],r[0][1]);t.slice(0,s).filter(l=>this.pointInPolygon(o,l)).length%2===0?i.push(r):n.push(r)}),{outers:i,holes:n}}signedArea(e){let t=0;for(let i=0;i<e.length;i+=1){const n=e[i],r=e[(i+1)%e.length];t+=n[0]*r[1]-r[0]*n[1]}return t/2}normalizeLoop(e){const t=[];(e??[]).forEach(r=>{if(!Array.isArray(r)||r.length<2)return;const s=[Number(r[0]),Number(r[1])];if(!Number.isFinite(s[0])||!Number.isFinite(s[1]))return;const o=t[t.length-1];(!o||Math.hypot(s[0]-o[0],s[1]-o[1])>ae)&&t.push(s)});const i=t[0],n=t[t.length-1];return i&&n&&Math.hypot(i[0]-n[0],i[1]-n[1])<=ae&&t.pop(),t}createSolidItems(e,t,i,n){const r=[];if(i.outers.forEach(a=>{const l=this.createShape(a);i.holes.filter(c=>this.pointInPolygon(new _.Vector2(c[0][0],c[0][1]),a)).forEach(c=>{l.holes.push(this.createPath(c))}),r.push(new _.ShapeGeometry(l))}),r.length===0)return[];const s=r.length===1?r[0]:Ce(r,!1);s.applyMatrix4(t);const o=_e(s);return[{kind:"hatch",layer:e.layer??"0",color:n??this.resolveEntityColor(e),linkId:e.linkId??e.id,geometry:s,min:o.min,max:o.max,info:e}]}createShape(e){const t=new _.Shape;t.moveTo(e[0][0],e[0][1]);for(let i=1;i<e.length;i+=1)t.lineTo(e[i][0],e[i][1]);return t.closePath(),t}createPath(e){const t=new _.Path;t.moveTo(e[0][0],e[0][1]);for(let i=1;i<e.length;i+=1)t.lineTo(e[i][0],e[i][1]);return t.closePath(),t}createGradientItems(e,t,i){const n=[];if(i.outers.forEach(o=>{const a=this.createShape(o);i.holes.filter(c=>this.pointInPolygon(new _.Vector2(c[0][0],c[0][1]),o)).forEach(c=>{a.holes.push(this.createPath(c))});const l=this.subdivideTriangles(new _.ShapeGeometry(a),this.engine.options?.hatchGradientSubdivisions??3);this.applyGradientVertexColors(l,o,e.gradient),n.push(l)}),n.length===0)return[];const r=n.length===1?n[0]:Ce(n,!1);r.applyMatrix4(t);const s=_e(r);return[{kind:"hatch",layer:e.layer??"0",color:this.resolveEntityColor(e),linkId:e.linkId??e.id,geometry:r,useVertexColors:!0,min:s.min,max:s.max,info:e}]}applyGradientVertexColors(e,t,i){const n=e.getAttribute("position"),r=[],s=this.resolveGradientStops(i),o=this.getBounds(t),a=new _.Vector2((o.minX+o.maxX)/2,(o.minY+o.maxY)/2),l=Math.max(o.maxX-o.minX,ae),c=Math.max(o.maxY-o.minY,ae),f=Math.max(Math.hypot(l/2,c/2),ae),p=Number(i?.angle??0),d=new _.Vector2(Math.cos(p),Math.sin(p)).normalize(),y=new _.Vector2(-d.y,d.x);for(let h=0;h<n.count;h+=1){const g=new _.Vector2(n.getX(h),n.getY(h)),v=this.resolveGradientFactor(g,a,d,y,l,c,f,i),b=this.sampleGradientColor(s,v);r.push(b.r,b.g,b.b)}e.setAttribute("color",new _.Float32BufferAttribute(r,3))}subdivideTriangles(e,t){let i=e.index?e.toNonIndexed():e.clone();const n=Math.max(0,Math.min(Math.floor(Number(t)||0),5));for(let r=0;r<n;r+=1){const s=i.getAttribute("position"),o=[];for(let a=0;a<s.count;a+=3){const l=new _.Vector3(s.getX(a),s.getY(a),s.getZ(a)),c=new _.Vector3(s.getX(a+1),s.getY(a+1),s.getZ(a+1)),f=new _.Vector3(s.getX(a+2),s.getY(a+2),s.getZ(a+2)),p=l.clone().lerp(c,.5),d=c.clone().lerp(f,.5),y=f.clone().lerp(l,.5);this.pushTriangle(o,l,p,y),this.pushTriangle(o,p,c,d),this.pushTriangle(o,y,d,f),this.pushTriangle(o,p,d,y)}i=new _.BufferGeometry().setAttribute("position",new _.Float32BufferAttribute(o,3))}return i}pushTriangle(e,t,i,n){e.push(t.x,t.y,t.z,i.x,i.y,i.z,n.x,n.y,n.z)}resolveGradientFactor(e,t,i,n,r,s,o,a){const l=e.clone().sub(t),c=String(a?.name??"LINEAR").toUpperCase(),f=Number(a?.shift??0),p=Math.max(Math.abs(i.x)*r+Math.abs(i.y)*s,ae),d=Math.max(Math.abs(n.x)*r+Math.abs(n.y)*s,ae);let y=.5+l.dot(i)/p+f;return c.includes("CYLINDER")?y=Math.abs(l.dot(n))/(d/2):c.includes("SPHERICAL")?(y=l.length()/o,c.includes("HEMI")&&(y=Math.sqrt(y))):c.includes("CURVED")&&(y=Math.pow(Math.abs(l.dot(i))/(p/2),.65)),c.startsWith("INV")&&(y=1-y),_.MathUtils.clamp(y,0,1)}resolveGradientStops(e){const t=(e?.colors??[]).map(i=>({value:_.MathUtils.clamp(Number(i.value??0),0,1),color:this.resolveGradientStopColor(i)})).sort((i,n)=>i.value-n.value);if(t.length>=2)return t;if(t.length===1){const i=_.MathUtils.clamp(Number(e?.colorTint??0),0,1);return[{value:0,color:t[0].color.clone().lerp(new _.Color(16777215),i)},{value:1,color:t[0].color}]}return[{value:0,color:new _.Color(16777215)},{value:1,color:new _.Color(0)}]}resolveGradientStopColor(e){if(Array.isArray(e.rgb)&&e.rgb.length>=3){const[t,i,n]=e.rgb.map(r=>_.MathUtils.clamp(Number(r??0),0,255)/255);return new _.Color(t,i,n)}return new _.Color(e.color??16777215)}resolveEntityColor(e){if(Array.isArray(e.rgb)&&e.rgb.length>=3){const[t,i,n]=e.rgb.map(r=>Math.round(_.MathUtils.clamp(Number(r??0),0,255)));return t<<16|i<<8|n}return e.color??16777215}sampleGradientColor(e,t){if(t<=e[0].value)return e[0].color.clone();for(let i=0;i<e.length-1;i+=1){const n=e[i],r=e[i+1];if(t<=r.value+ae){const s=Math.max(r.value-n.value,ae);return n.color.clone().lerp(r.color,(t-n.value)/s)}}return e[e.length-1].color.clone()}createPatternLineItem(e,t,i){const n=[],r=this.engine.options?.hatchPatternMaxSegments??2e4;let s=0;for(const a of i.outers){const l=this.getBounds(a),c=Math.hypot(l.maxX-l.minX,l.maxY-l.minY);if(!(c<ae))for(const f of e.patternLines??[]){if(s>=r)break;const p=this.createPatternFamilySegments(e,f,a,i.holes,l,c,r-s);p.forEach(([d,y])=>{n.push(new _.Vector3(d.x,d.y,qe),new _.Vector3(y.x,y.y,qe))}),s+=p.length}}if(n.length===0)return null;n.forEach(a=>a.applyMatrix4(t));const o=$e(n);return{kind:"line",layer:e.layer??"0",color:this.resolveEntityColor(e),linkId:e.linkId??e.id,points:n,min:o.min,max:o.max,info:e}}createPatternFamilySegments(e,t,i,n,r,s,o){const a=this.resolvePatternLineTransform(e,t),l=a.dir,c=new _.Vector2(-l.y,l.x),f=a.base,p=a.offset;let d=p.dot(c);if(Math.abs(d)<ae&&(d=Number(t.lineOffset??0)),Math.abs(d)<ae)return[];const y=[new _.Vector2(r.minX,r.minY),new _.Vector2(r.maxX,r.minY),new _.Vector2(r.maxX,r.maxY),new _.Vector2(r.minX,r.maxY)],h=f.dot(c),g=y.map(z=>z.dot(c)-h),v=Math.min(...g)-s,b=Math.max(...g)+s,M=Math.floor(Math.min(v/d,b/d))-2,S=Math.ceil(Math.max(v/d,b/d))+2,E=[],R=new _.Vector2((r.minX+r.maxX)/2,(r.minY+r.maxY)/2);for(let z=M;z<=S&&E.length<o;z+=1){const j=f.clone().add(p.clone().multiplyScalar(z)),D=j.clone().add(l.clone().multiplyScalar(R.clone().sub(j).dot(l))),H=D.clone().add(l.clone().multiplyScalar(-s*2)),q=D.clone().add(l.clone().multiplyScalar(s*2));this.clipLineByPolygon(H,q,i).forEach(([B,m])=>{this.subtractHoles(B,m,n).forEach(([O,ee])=>{this.appendDashedSegment(E,O,ee,t.dashLengths,j,l)})})}return E.slice(0,o)}resolvePatternLineTransform(e,t){const i=Number(t.angle??e.patternAngle??0);return{dir:new _.Vector2(Math.cos(i),Math.sin(i)).normalize(),base:this.toVector2(t.basePoint),offset:this.toVector2(t.offset)}}toVector2(e){return new _.Vector2(e?.[0]??0,e?.[1]??0)}getBounds(e){return{minX:Math.min(...e.map(t=>t[0])),minY:Math.min(...e.map(t=>t[1])),maxX:Math.max(...e.map(t=>t[0])),maxY:Math.max(...e.map(t=>t[1]))}}clipLineByPolygon(e,t,i){const n=[0,1];for(let o=0;o<i.length;o+=1){const a=new _.Vector2(i[o][0],i[o][1]),l=new _.Vector2(i[(o+1)%i.length][0],i[(o+1)%i.length][1]),c=this.segmentIntersectionT(e,t,a,l);c!==null&&c>ae&&c<1-ae&&n.push(c)}const r=this.dedupeSorted(n.sort((o,a)=>o-a),1e-7),s=[];for(let o=0;o<r.length-1;o+=1){const a=r[o],l=r[o+1];if(l-a<1e-7)continue;const c=this.interpolate2(e,t,(a+l)/2);this.pointInPolygon(c,i)&&s.push([this.interpolate2(e,t,a),this.interpolate2(e,t,l)])}return s}subtractHoles(e,t,i){let n=[[e,t]];return i.forEach(r=>{const s=[];n.forEach(([o,a])=>{const l=this.clipLineByPolygon(o,a,r);s.push(...this.subtractSegments(o,a,l))}),n=s}),n}appendDashedSegment(e,t,i,n,r,s){const o=t.distanceTo(i);if(o<ae)return;if(!n?.length){e.push([t,i]);return}const a=this.normalizeDashPattern(n),l=a.reduce((M,S)=>M+S.length,0);if(l<ae){e.push([t,i]);return}const c=s?.clone().normalize()??i.clone().sub(t).normalize(),f=r??t,d=i.clone().sub(t).normalize().dot(c)>=0?1:-1,y=t.clone().sub(f).dot(c)*d,h=this.positiveModulo(y,l);let g=0,v=this.findDashIndex(a,h),b=h-a[v].start;for(;g<o-ae;){const M=a[v],S=Math.max(M.length-b,ae),E=Math.min(o,g+S);M.draw&&e.push([this.pointAtLength(t,i,g),this.pointAtLength(t,i,E)]),g=E,v=(v+1)%a.length,b=0}}normalizeDashPattern(e){let t=0;return e.map(i=>{const n=Number(i??0),r={length:Math.max(Math.abs(n),5e-4),draw:n>=0,start:t};return t+=r.length,r}).filter(i=>i.length>ae)}findDashIndex(e,t){for(let i=e.length-1;i>=0;i-=1)if(t>=e[i].start-ae)return i;return 0}positiveModulo(e,t){return(e%t+t)%t}subtractSegments(e,t,i){const n=i.map(([o,a])=>[this.projectT(e,t,o),this.projectT(e,t,a)]).map(([o,a])=>[Math.max(0,Math.min(o,a)),Math.min(1,Math.max(o,a))]).sort((o,a)=>o[0]-a[0]),r=[];let s=0;return n.forEach(([o,a])=>{o>s+ae&&r.push([this.interpolate2(e,t,s),this.interpolate2(e,t,o)]),s=Math.max(s,a)}),s<1-ae&&r.push([this.interpolate2(e,t,s),this.interpolate2(e,t,1)]),r}segmentIntersectionT(e,t,i,n){const r=t.clone().sub(e),s=n.clone().sub(i),o=this.cross2(r,s);if(Math.abs(o)<1e-10)return null;const a=i.clone().sub(e),l=this.cross2(a,s)/o,c=this.cross2(a,r)/o;return l>=-1e-8&&l<=1+1e-8&&c>=-1e-8&&c<=1+1e-8?l:null}pointInPolygon(e,t){let i=!1;for(let n=0,r=t.length-1;n<t.length;r=n,n+=1){const s=t[n][0],o=t[n][1],a=t[r][0],l=t[r][1];o>e.y!=l>e.y&&e.x<(a-s)*(e.y-o)/(l-o+1e-20)+s&&(i=!i)}return i}cross2(e,t){return e.x*t.y-e.y*t.x}interpolate2(e,t,i){return e.clone().lerp(t,i)}projectT(e,t,i){const n=t.clone().sub(e),r=n.lengthSq();return r<1e-12?0:i.clone().sub(e).dot(n)/r}pointAtLength(e,t,i){const n=e.distanceTo(t);return this.interpolate2(e,t,n<1e-12?0:i/n)}dedupeSorted(e,t){const i=[];return e.forEach(n=>{(!i.length||Math.abs(n-i[i.length-1])>t)&&i.push(n)}),i}}class Qe{constructor(e,t){this.engine=e,this.textFactory=t,this.hatchRenderer=new Zt(e)}hatchRenderer;create(e,t){switch(e.type){case"LINE_GROUP":case"LINE":case"CIRCLE":case"POLYLINE":case"SPLINE":return this.createLineItem(e,t);case"MTEXT":case"TEXT":return this.textFactory.create(e,t);case"HATCH":return this.createHatch(e,t);case"IMAGE":return this.createImage(e,t);default:return[]}}createLineItem(e,t){const i=this.getEntityPoints(e).map(n=>n.clone().applyMatrix4(t));return i.length===0?[]:[{kind:"line",layer:e.layer,color:e.color,lineType:e.lineType,lineTypeScale:e.lineTypeScale,lineTypePattern:Array.isArray(e.lineTypePattern)?e.lineTypePattern:void 0,linkId:e.linkId??e.id,points:i,info:e}]}getEntityPoints(e){switch(e.type){case"LINE_GROUP":return this.getLineGroupPoints(e);case"LINE":return[ke(e.startPoint),ke(e.endPoint)];case"CIRCLE":return this.getCirclePoints(e);case"POLYLINE":return this.getPolylinePoints(e);case"SPLINE":return this.getSplinePoints(e);default:return[]}}getLineGroupPoints(e){const t=[];return(e.segments??[]).forEach(i=>{t.push(new _.Vector3(i[0]??0,i[1]??0,i[2]??0)),t.push(new _.Vector3(i[3]??0,i[4]??0,i[5]??0))}),t}getCirclePoints(e){const t=new _.EllipseCurve(e.center?.[0]??0,e.center?.[1]??0,e.radius??0,e.radius??0,e.startAngle??0,(e.endAngle??Math.PI*2)-1e-5,!1,0);return this.pointsToSegments(t.getPoints(this.engine.options?.circleSegments??48).map(i=>new _.Vector3(i.x,i.y,e.center?.[2]??0)))}getPolylinePoints(e){const t=[],i=e.points??[];for(let n=0;n<i.length-1;n+=1)this.getPolylineSegmentPoints(i[n],i[n+1]).forEach(r=>{t.push(r)});return e.closed&&i.length>1&&this.getPolylineSegmentPoints(i[i.length-1],i[0]).forEach(n=>{t.push(n)}),t}getPolylineSegmentPoints(e,t){const i=ke(e),n=ke(t),r=Number(e?.bulge??0);if(!Number.isFinite(r)||Math.abs(r)<1e-10)return[i,n];const s=n.clone().sub(i),o=s.length();if(o<1e-12)return[i,n];const a=4*Math.atan(r),l=o*(1+r*r)/(4*Math.abs(r)),c=i.clone().add(n).multiplyScalar(.5),f=new _.Vector3(-s.y/o,s.x/o,0),p=c.clone().add(f.multiplyScalar(o*(1-r*r)/(4*r))),d=Math.atan2(i.y-p.y,i.x-p.x),y=Math.max(4,Math.ceil(Math.abs(a)/(this.engine.options?.polylineArcAngleStep??Math.PI/18))),h=[];for(let g=0;g<=y;g+=1){const v=g/y,b=d+a*v;h.push(new _.Vector3(p.x+Math.cos(b)*l,p.y+Math.sin(b)*l,i.z+(n.z-i.z)*v))}return this.pointsToSegments(h)}getSplinePoints(e){const t=(e.points??[]).map(n=>ke(n));if(t.length<2)return[];const i=t.length===2?t:this.sampleSplineCurve(t,e);return this.pointsToSegments(i)}sampleSplineCurve(e,t){const i=Math.min(Math.max(Number(t.degree??this.engine.options?.splineDegree??6),1),e.length-1),n=Array.isArray(t.knots)&&t.knots.length===e.length+i+1?t.knots:this.createClampedUniformKnots(e.length,i),r=e.map((a,l)=>{const c=Array.isArray(t.weights)?Number(t.weights[l]??1):1;return new _.Vector4(a.x,a.y,a.z,Number.isFinite(c)?c:1)});let s=(e.length-1)*2;const o=new Ht(i,n,r).getPoints(s);return t.closed===!0&&o.length>1&&o.push(o[0].clone()),o}createClampedUniformKnots(e,t){const i=[];for(let n=0;n<e+t+1;n+=1)n<=t?i.push(0):n>=e?i.push(1):i.push((n-t)/(e-t));return i}pointsToSegments(e){const t=[];for(let i=0;i<e.length-1;i+=1)t.push(e[i].clone(),e[i+1].clone());return t}createHatch(e,t){return this.hatchRenderer.create(e,t)}createImage(e,t){const i=e.imageUrl||e.url;if(!i)return[];const n=ke(e.position),r=ke(e.uVector),s=ke(e.vVector),o=Number(e.pixelWidth??e.width??1),a=Number(e.pixelHeight??e.height??1);if(!Number.isFinite(o)||!Number.isFinite(a)||o===0||a===0)return[];const l=r.multiplyScalar(o),c=s.multiplyScalar(a),f=n.clone(),p=n.clone().add(l),d=n.clone().add(l).add(c),y=n.clone().add(c);[f,p,d,y].forEach(b=>b.applyMatrix4(t));const h=new _.BufferGeometry;h.setAttribute("position",new _.Float32BufferAttribute([f.x,f.y,f.z,p.x,p.y,p.z,d.x,d.y,d.z,f.x,f.y,f.z,d.x,d.y,d.z,y.x,y.y,y.z],3)),h.setAttribute("uv",new _.Float32BufferAttribute([0,0,1,0,1,1,0,0,1,1,0,1],2)),h.computeVertexNormals();const g=_e(h),v=Number(e.fade??0);return[{kind:"image",layer:e.layer??"0",color:e.color??16777215,linkId:e.linkId??e.id,geometry:h,imageUrl:i,opacity:Number.isFinite(v)?_.MathUtils.clamp(1-v/100,0,1):1,min:g.min,max:g.max,info:e}]}}class Yt{constructor(e,t,i=e.modelGroup,n={}){this.model=t,this.targetGroup=i,this.options=n}modelMap=new Map;hatchMap=new Map;textMap=new Map;imageMap=new Map;textureLoader=new _.TextureLoader;addRenderItems(e){e.forEach(t=>this.addRenderItem(t))}buildSceneObjects(){this.buildImageObjects(),this.buildHatchObjects(),this.buildLineObjects(),this.buildTextObjects()}addRenderItem(e){const t=`${e.layer}||${e.color}`;if(e.kind==="line"){let s=this.modelMap.get(t);s||(s=new Map,this.modelMap.set(t,s));const o=this.resolveLinePoints(e),a=s.get(e.linkId);a?(o.forEach(l=>a.points.push(l)),a.layerDeps=this.mergeLayerDeps(a.layerDeps,e.layerDeps??[e.layer])):s.set(e.linkId,{points:[...o],layerDeps:this.mergeLayerDeps([],e.layerDeps??[e.layer])});return}const i=this.getItemMap(e),n=e.kind==="image"?`${t}||${e.imageUrl??""}`:t,r=i.get(n);r?r.push(e):i.set(n,[e])}getItemMap(e){return e.kind==="text"?this.textMap:e.kind==="image"?this.imageMap:this.hatchMap}resolveLinePoints(e){const t=e.points??[],i=this.resolveLineTypePattern(e);if(!i)return t;const n=[];for(let r=0;r<t.length-1;r+=2)this.applyDashPattern(t[r],t[r+1],i).forEach(s=>n.push(s));return n}resolveLineTypePattern(e){const t=this.model.layers.find(a=>a.name===e.layer),i=String(e.lineType??"").toLowerCase(),n=i==="bylayer"||i===""?String(t?.lineType??"").toLowerCase():i;if(!n||n==="continuous"||n==="byblock")return null;const r=Array.isArray(e.lineTypePattern)&&e.lineTypePattern.length>0?e.lineTypePattern:Array.isArray(t?.lineTypePattern)?t.lineTypePattern:this.getFallbackLineTypePattern(n);if(!r||r.length===0)return null;const s=this.resolveLineTypeScale(e,t),o=r.map(a=>Number(a)).filter(a=>Number.isFinite(a)).map(a=>a*s);return o.some(a=>Math.abs(a)>1e-12)?o:null}getFallbackLineTypePattern(e){return e.includes("dash")?[.25,-.1]:e.includes("dot")?[0,-.1]:null}resolveLineTypeScale(e,t){const i=Number(e.lineTypeScale??t?.lineTypeScale??1);return!Number.isFinite(i)||Math.abs(i)<1e-12?1:Math.abs(i)}applyDashPattern(e,t,i){const n=t.clone().sub(e),r=n.length();if(r<1e-12)return[];const s=n.multiplyScalar(1/r),o=i.reduce((p,d)=>p+Math.abs(d),0),a=Math.max(o*.05,r*.002,1e-6),l=[];let c=0,f=0;for(;c<r-1e-12;){const p=i[f%i.length],d=p>=0,y=Math.max(Math.abs(p),a),h=Math.min(c+y,r);if(d&&h>c&&l.push(e.clone().add(s.clone().multiplyScalar(c)),e.clone().add(s.clone().multiplyScalar(h))),c=h,f+=1,f>1e5)break}return l}buildLineObjects(){this.modelMap.forEach((e,t)=>{const[i]=t.split("||"),n=[];if(e.forEach(f=>{f.points.forEach(p=>n.push(p))}),n.length===0)return;const r=new _.BufferGeometry().setFromPoints(n),s=new _.LineBasicMaterial({color:this.resolveColor(t)}),o=new _.LineSegments(r,s);o.name=t;const a=r.getAttribute("position");o.clonePoints=a.array.slice(),o.materialClone=s.clone(),this.targetGroup.add(o);const l=this.targetGroup.children.length-1;let c=0;e.forEach((f,p)=>{const d=$e(f.points);this.pushNodeMap(p,{indexes:[l,c,c+f.points.length*3],object:o,group:this.targetGroup,kind:"line",layer:i,layerDeps:f.layerDeps,min:d.min,max:d.max}),c+=f.points.length*3})})}buildTextObjects(){this.textMap.forEach((e,t)=>{const i=e.filter(o=>!!o.geometry),n=this.normalizeMeshGeometries(i,!1,!1);if(n.length===0)return;const r=this.mergeMeshGeometries(n),s=new _.MeshBasicMaterial({color:this.resolveColor(t),side:_.DoubleSide});t.includes("_hitbox")&&(s.visible=!1),this.addMeshObject(i,t,r,n,s)})}buildHatchObjects(){this.hatchMap.forEach((e,t)=>{const i=e.filter(a=>!!a.geometry),n=i.some(a=>a.useVertexColors===!0),r=this.normalizeMeshGeometries(i,!1,n);if(r.length===0)return;const s=this.mergeMeshGeometries(r),o=new _.MeshBasicMaterial({color:n?16777215:this.resolveColor(t),side:_.DoubleSide,transparent:!0,opacity:n?1:.5,vertexColors:n});this.addMeshObject(i,t,s,r,o)})}buildImageObjects(){this.imageMap.forEach((e,t)=>{const i=e.filter(c=>!!c.geometry),n=this.normalizeMeshGeometries(i,!0,!1);if(n.length===0)return;const r=i[0]?.imageUrl;if(!r)return;const s=this.mergeMeshGeometries(n),o=this.textureLoader.load(r);o.colorSpace=_.SRGBColorSpace,o.needsUpdate=!0;const a=i.reduce((c,f)=>Math.min(c,f.opacity??1),1),l=new _.MeshBasicMaterial({map:o,side:_.DoubleSide,transparent:!0,opacity:a,depthWrite:!1});this.addMeshObject(i,t,s,n,l)})}mergeMeshGeometries(e){const t=e.length===1?e[0]:Ce(e,!0);if(t.groups.length===0){const i=t.getAttribute("position");t.addGroup(0,i?.count??0,0)}return t.groups.forEach(i=>{i.materialIndex=0}),t}normalizeMeshGeometries(e,t,i){return e.map(n=>{const r=n.geometry,s=r.index?r.toNonIndexed():r.clone(),o=s.getAttribute("position"),a=s.getAttribute("uv"),l=s.getAttribute("color"),c=new _.BufferGeometry;return c.setAttribute("position",o.clone()),t&&c.setAttribute("uv",a?a.clone():this.createEmptyUv(o.count)),i&&c.setAttribute("color",l?l.clone():this.createSolidColorAttribute(o.count,n.color)),c})}createEmptyUv(e){return new _.Float32BufferAttribute(new Array(e*2).fill(0),2)}createSolidColorAttribute(e,t){const i=new _.Color(t??16777215),n=[];for(let r=0;r<e;r+=1)n.push(i.r,i.g,i.b);return new _.Float32BufferAttribute(n,3)}addMeshObject(e,t,i,n,r){const s=new _.Mesh(i,r);s.name=t,s.materialClone=r.clone(),s.isSplit=!1,s.geometrys=void 0,n.forEach(a=>{a!==i&&a.dispose()}),this.targetGroup.add(s);const o=this.targetGroup.children.length-1;e.forEach((a,l)=>{const c=a.linkId??a.info?.id;this.pushNodeMap(c,{indexes:[o,l],object:s,group:this.targetGroup,kind:a.kind,layer:a.layer,layerDeps:a.layerDeps??[a.layer],info:a.info,min:a.min??new _.Vector3,max:a.max??new _.Vector3}),this.pushTextSearchItem(a,t)})}pushTextSearchItem(e,t){if(this.options.interactive===!1||e.kind!=="text"||t.includes("_hitbox"))return;const i=e.info?.text,n=String(i??"").replace(/\r\n/g,`
112
+ </svg>`}_colorToHex(e){return"#"+e.toString(16).padStart(6,"0")}_makeDraggable(e,t){t.onmousedown=i=>{i.preventDefault();const n=e.getBoundingClientRect(),r=e.offsetParent?.getBoundingClientRect()??{left:0,top:0};e.style.left=n.left-r.left+"px",e.style.top=n.top-r.top+"px",e.style.right="auto",e.style.bottom="auto";const s=i.clientX-n.left,o=i.clientY-n.top,a=c=>{e.style.left=c.clientX-s-r.left+"px",e.style.top=c.clientY-o-r.top+"px"},l=()=>{document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",l)};document.addEventListener("mousemove",a),document.addEventListener("mouseup",l)}}dispose(){this.panel?.remove(),this.panel=null,this.listEl=null}}class Ze{engine;layerMap=new Map;panelUI=null;constructor(e){this.engine=e;const t=document.getElementById(e?.options?.containerId??"")??e?.container??null;t&&(this.panelUI=new Ot(t,this))}_loadLayers(e=this.engine.dwgData?.layers??[]){this.layerMap.clear();for(const t of e)this.layerMap.set(t.name,{...t});this.panelUI?.refresh()}syncFromModel(e){e?.length>0&&(this._loadLayers(e),this.panelUI?.refresh())}getLayers(){return Array.from(this.layerMap.values())}getDisplayColor(e){return this.engine.modelToolModule2d?.getDisplayColor(e)??e}refresh(){this.panelUI?.refresh()}setLayerVisible(e,t){const i=this.layerMap.get(e);i&&(i.visible=t),this._applyVisibility(e,t),t||this.clearInteractiveStateForLayer(e)}toggleLayer(e){const t=this.layerMap.get(e);if(!t)return!0;const i=!t.visible;return this.setLayerVisible(e,i),i}setAllLayersVisible(e){for(const t of this.layerMap.keys()){const i=this.layerMap.get(t);i.visible=e}this.applyLayerVisibility()}isAllVisible(){return Array.from(this.layerMap.values()).every(e=>e.visible)}isLayerVisible(e){return e?this.layerMap.get(e)?.visible!==!1:!0}isModelVisibleByLayer(e){const t=this.engine.loaderModule2d?.model?.nodeMap?.get(String(e))??this.engine.loaderModule2d?.model?.nodeMap?.get(e);return!t||t.length===0?!0:t.some(i=>{const n=this.getNodeObject(i);return this.areNodeLayersVisible(i)&&n?.visible!==!1})}_applyVisibility(e,t){this.applyPrimaryLayerObjectVisibility(e,t),this.applyDependentLayerVisibility()}applyLayerVisibility(){for(const[e,t]of this.layerMap)this.applyPrimaryLayerObjectVisibility(e,t.visible!==!1);this.applyDependentLayerVisibility()}applyPrimaryLayerObjectVisibility(e,t){const i=this.engine?.modelGroup??this.engine?.scene;if(!i)return;const n=e+"||";i.traverse(r=>{r.name?.startsWith(n)&&(r.visible=t)})}applyDependentLayerVisibility(){const e=this.engine.loaderModule2d?.model?.nodeMap;e&&e.forEach(t=>{t?.forEach(i=>{const n=this.getNodeLayerDeps(i);n.length<=1||this.setNodeVisible(i,n.every(r=>this.isLayerVisible(r)))})})}setNodeVisible(e,t){const i=this.getNodeObject(e);if(!i||!e?.indexes)return;if(i.isLineSegments){const r=i.geometry?.attributes?.position?.array,s=i.clonePoints;if(!r||!s)return;for(let o=e.indexes[1];o<e.indexes[2];o+=1)r[o]=t?s[o]:NaN;i.geometry.attributes.position.needsUpdate=!0;return}this.engine.modelToolModule2d?.split_merge_model?.(i);const n=i.geometry?.groups?.[e.indexes[1]];n&&(n.materialIndex=t?0:-1)}areNodeLayersVisible(e){return this.getNodeLayerDeps(e).every(t=>this.isLayerVisible(t))}getNodeLayerDeps(e){const t=Array.isArray(e?.layerDeps)&&e.layerDeps.length>0?e.layerDeps:[e?.layer];return Array.from(new Set(t.map(i=>String(i??"")).filter(Boolean)))}getNodeObject(e){return e?.object??e?.group?.children?.[e.indexes?.[0]]??this.engine.modelGroup?.children?.[e.indexes?.[0]]}clearInteractiveStateForLayer(e){const t=[...this.engine.engineStatus2d?.highlightModels??[],...this.engine.engineStatus2d?.highlightHoverModels??[]];t.length===0||!t.some(n=>(this.engine.loaderModule2d?.model?.nodeMap?.get(String(n))??this.engine.loaderModule2d?.model?.nodeMap?.get(n))?.some(s=>this.getNodeLayerDeps(s).includes(e)))||(this.engine.modelToolModule2d?.unHighlightModelHover?.(),this.engine.modelToolModule2d?.unhighlightAllModels?.())}show(){this.panelUI?.show()}hide(){this.panelUI?.hide()}toggle(){this.panelUI?.toggle()}dispose(){this.panelUI?.dispose(),this.panelUI=null,this.layerMap.clear()}}function Me(k){return Array.isArray(k)?new _.Vector3(k[0]??0,k[1]??0,k[2]??0):new _.Vector3(k?.x??0,k?.y??0,k?.z??0)}function _e(k){return k?(k.computeBoundingBox(),{min:k.boundingBox?.min.clone()??new _.Vector3,max:k.boundingBox?.max.clone()??new _.Vector3}):{min:new _.Vector3,max:new _.Vector3}}function Ne(k,e,t){const i=new _.Vector3(k[0]??0,k[1]??0,k[2]??0),n=new _.Euler(0,0,t??0),r=new _.Vector3(e[0]??1,e[1]??1,e[2]??1),s=new _.Quaternion().setFromEuler(n);return new _.Matrix4().compose(i,s,r)}function Ut(k){return Array.isArray(k?.transformMatrix)&&k.transformMatrix.length===16?new _.Matrix4().fromArray(k.transformMatrix):Ne(k.position??[0,0,0],k.scale??[1,1,1],k.rotation??0)}function Ye(k){if(k.length===0)return{min:new _.Vector3,max:new _.Vector3};const e=new _.Vector3(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),t=new _.Vector3(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY);return k.forEach(i=>{e.x=Math.min(e.x,i.x),e.y=Math.min(e.y,i.y),e.z=Math.min(e.z,i.z),t.x=Math.max(t.x,i.x),t.y=Math.max(t.y,i.y),t.z=Math.max(t.z,i.z)}),{min:e,max:t}}class Xe{constructor(e){this.geometryFactory=e}cache=new Map;blockIndex=new Map;setBlocks(e){this.cache.clear(),this.blockIndex.clear(),(e??[]).forEach(t=>{t?.name&&this.blockIndex.set(t.name,t),t?.id&&this.blockIndex.set(t.id,t)})}clearCache(){this.cache.clear()}flattenRootEntities(e){return Array.from(this.iterateRootEntities(e))}*iterateRootEntities(e){yield*this.iterateEntities(e??[],new _.Matrix4,0)}flattenBlock(e,t,i){const n=this.cache.get(t);if(n)return n;const r=e.origin??[0,0,0],s=new _.Matrix4().makeTranslation(-r[0],-r[1],-(r[2]??0)),o=this.flattenEntities(e.entities??[],s,i);return this.cache.set(t,o),e.name&&this.cache.set(e.name,o),e.id&&this.cache.set(e.id,o),o}flattenEntities(e,t,i){return Array.from(this.iterateEntities(e,t,i))}*iterateEntities(e,t,i){if(i>20){console.warn("[LoaderModule2d] Block nesting is too deep, skip nested INSERT.");return}for(const n of e)if(n?.visible!==!1){if(n.type==="INSERT"){const r=this.getBlockItems(n.blockId,i+1),s=t.clone().multiply(Ut(n)),o=this.getClipPolygon(n,t);for(const a of r){const l=this.cloneRenderItem(a,s,n),c=o?this.clipRenderItem(l,o):l;c&&(yield c)}o&&n.displayClipBoundary===!0&&(yield this.createClipBoundaryItem(n,o));continue}for(const r of this.geometryFactory.create(n,t))yield r}}getBlockItems(e,t){const i=this.cache.get(e);if(i)return i;const n=this.blockIndex.get(e);return n?this.flattenBlock(n,n.name??n.id??e,t):(console.warn(`[LoaderModule2d] Missing block: ${e}`),[])}cloneRenderItem(e,t,i){const n=e.layer==="0"&&i?.layer?i.layer:e.layer??i?.layer,r=e.color==null||e.color===0?i?.color??e.color??0:e.color,s=i?.linkId??i?.id??e.linkId,o=this.mergeLayerDeps(e.layerDeps??[e.layer],i?.layer,n);if(e.kind==="line")return{...e,layer:n,layerDeps:o,color:r,linkId:s,points:(e.points??[]).map(f=>f.clone().applyMatrix4(t))};const a=e.geometry?.clone();a?.applyMatrix4(t);const l=e.textAnchor?.clone().applyMatrix4(t),c=_e(a);return{...e,layer:n,layerDeps:o,color:r,linkId:s,geometry:a,min:c.min,max:c.max,textAnchor:l}}mergeLayerDeps(e,t,i){const n=new Set,r=e.some(s=>String(s??"")==="0")&&!!t;return e.forEach(s=>{const o=String(s??"");!o||r&&o==="0"||n.add(o)}),t&&n.add(String(t)),i&&n.add(String(i)),Array.from(n)}getClipPolygon(e,t){if(e?.clipping!==!0||!Array.isArray(e?.clipBoundary))return null;const i=e.clipBoundary.map(r=>new _.Vector3(r?.[0]??r?.x??0,r?.[1]??r?.y??0,r?.[2]??r?.z??0)).filter(r=>Number.isFinite(r.x)&&Number.isFinite(r.y));if(i.length<3)return null;const n=this.getClipBoundaryMatrix(e,t);return n?i.map(r=>r.clone().applyMatrix4(n)):i}getClipBoundaryMatrix(e,t){return!Array.isArray(e?.clipInsertTransform)||e.clipInsertTransform.length!==16?null:t.clone().multiply(new _.Matrix4().fromArray(e.clipInsertTransform))}clipRenderItem(e,t){if(e.kind==="line"){const r=this.clipLinePoints(e.points??[],t);if(r.length===0)return null;const s=this.getPointsBounds(r);return{...e,points:r,min:s.min,max:s.max}}const i=this.clipGeometry(e.geometry,t);if(!i)return null;const n=_e(i);return{...e,geometry:i,min:n.min,max:n.max}}clipLinePoints(e,t){const i=[];for(let n=0;n<e.length-1;n+=2)this.clipSegmentByPolygon(e[n],e[n+1],t).forEach(r=>{i.push(r[0],r[1])});return i}clipSegmentByPolygon(e,t,i){const n=t.clone().sub(e),r=[0,1];for(let a=0;a<i.length;a+=1){const l=this.getSegmentIntersectionParameter(e,t,i[a],i[(a+1)%i.length]);l!=null&&l>1e-9&&l<1-1e-9&&r.push(l)}const s=Array.from(new Set(r.map(a=>Number(a.toFixed(12))))).sort((a,l)=>a-l),o=[];for(let a=0;a<s.length-1;a+=1){const l=s[a],c=s[a+1];if(c-l<1e-10)continue;const f=(l+c)*.5,p=e.clone().add(n.clone().multiplyScalar(f));this.isPointInPolygon(p,i)&&o.push([e.clone().add(n.clone().multiplyScalar(l)),e.clone().add(n.clone().multiplyScalar(c))])}return o}getSegmentIntersectionParameter(e,t,i,n){const r=t.x-e.x,s=t.y-e.y,o=n.x-i.x,a=n.y-i.y,l=r*a-s*o;if(Math.abs(l)<1e-12)return null;const c=i.x-e.x,f=i.y-e.y,p=(c*a-f*o)/l,d=(c*s-f*r)/l;return p>=-1e-9&&p<=1+1e-9&&d>=-1e-9&&d<=1+1e-9?_.MathUtils.clamp(p,0,1):null}isPointInPolygon(e,t){let i=!1;for(let n=0,r=t.length-1;n<t.length;r=n,n+=1){const s=t[n],o=t[r];if(this.isPointOnSegment(e,s,o))return!0;s.y>e.y!=o.y>e.y&&e.x<(o.x-s.x)*(e.y-s.y)/(o.y-s.y)+s.x&&(i=!i)}return i}isPointOnSegment(e,t,i){const n=(i.x-t.x)*(e.y-t.y)-(i.y-t.y)*(e.x-t.x);if(Math.abs(n)>1e-8)return!1;const r=(e.x-t.x)*(i.x-t.x)+(e.y-t.y)*(i.y-t.y),s=(i.x-t.x)**2+(i.y-t.y)**2;return r>=-1e-8&&r<=s+1e-8}clipGeometry(e,t){if(!e?.attributes?.position)return null;const i=e.attributes.position,n=e.attributes.uv,r=e.index,s=[],o=[],a=!!n,l=this.triangulateClipPolygon(t),c=d=>({position:new _.Vector3(i.getX(d),i.getY(d),i.getZ(d)),uv:a?new _.Vector2(n.getX(d),n.getY(d)):void 0}),f=r?r.count:i.count;for(let d=0;d<f;d+=3){const y=r?r.getX(d):d,h=r?r.getX(d+1):d+1,g=r?r.getX(d+2):d+2,v=[c(y),c(h),c(g)];l.forEach(b=>{const M=this.clipTriangle(v,b);if(!(M.length<3))for(let S=1;S<M.length-1;S+=1)[M[0],M[S],M[S+1]].forEach(E=>{s.push(E.position.x,E.position.y,E.position.z),a&&E.uv&&o.push(E.uv.x,E.uv.y)})})}if(s.length===0)return null;const p=new _.BufferGeometry;return p.setAttribute("position",new _.Float32BufferAttribute(s,3)),a&&p.setAttribute("uv",new _.Float32BufferAttribute(o,2)),p.computeVertexNormals(),p}triangulateClipPolygon(e){const t=e.map(n=>new _.Vector2(n.x,n.y)),i=_.ShapeUtils.triangulateShape(t,[]);if(i.length===0){const n=[];for(let r=1;r<e.length-1;r+=1)n.push([e[0],e[r],e[r+1]]);return n}return i.map(n=>n.map(r=>e[r]))}clipTriangle(e,t){const i=this.getPolygonOrientation(t);let n=e;for(let r=0;r<t.length;r+=1){const s=t[r],o=t[(r+1)%t.length],a=n;if(n=[],a.length===0)break;let l=a[a.length-1],c=this.isInsideClipEdge(l.position,s,o,i);a.forEach(f=>{const p=this.isInsideClipEdge(f.position,s,o,i);p!==c&&n.push(this.intersectClipEdge(l,f,s,o,i)),p&&n.push(f),l=f,c=p})}return n}isInsideClipEdge(e,t,i,n){const r=i.x-t.x,s=i.y-t.y;return n*(r*(e.y-t.y)-s*(e.x-t.x))>=-1e-9}intersectClipEdge(e,t,i,n,r){const s=n.x-i.x,o=n.y-i.y,a=r*(s*(e.position.y-i.y)-o*(e.position.x-i.x)),l=r*(s*(t.position.y-i.y)-o*(t.position.x-i.x)),c=Math.abs(a-l)<1e-12?0:a/(a-l);return{position:e.position.clone().lerp(t.position,c),uv:e.uv&&t.uv?e.uv.clone().lerp(t.uv,c):void 0}}getPolygonOrientation(e){let t=0;for(let i=0;i<e.length;i+=1){const n=e[i],r=e[(i+1)%e.length];t+=n.x*r.y-r.x*n.y}return t>=0?1:-1}getPointsBounds(e){const t=new _.Vector3(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),i=new _.Vector3(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY);return e.forEach(n=>{t.min(n),i.max(n)}),{min:t,max:i}}createClipBoundaryItem(e,t){const i=[];for(let r=0;r<t.length;r+=1)i.push(t[r].clone(),t[(r+1)%t.length].clone());const n=this.getPointsBounds(i);return{kind:"line",layer:e.layer??"0",layerDeps:e.layer?[e.layer]:["0"],color:e.clipBoundaryColor??16711935,lineType:"Continuous",linkId:e.linkId??e.id,points:i,min:n.min,max:n.max,info:e}}}function De(k){throw new Error('Could not dynamically require "'+k+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var Oe={exports:{}};var Ke;function Vt(){return Ke||(Ke=1,(function(k,e){(function(t){k.exports=t()})(function(){return(function t(i,n,r){function s(l,c){if(!n[l]){if(!i[l]){var f=typeof De=="function"&&De;if(!c&&f)return f(l,!0);if(o)return o(l,!0);var p=new Error("Cannot find module '"+l+"'");throw p.code="MODULE_NOT_FOUND",p}var d=n[l]={exports:{}};i[l][0].call(d.exports,function(y){var h=i[l][1][y];return s(h||y)},d,d.exports,t,i,n,r)}return n[l].exports}for(var o=typeof De=="function"&&De,a=0;a<r.length;a++)s(r[a]);return s})({1:[function(t,i,n){var r=t("./utils"),s=t("./support"),o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.encode=function(a){for(var l,c,f,p,d,y,h,g=[],v=0,b=a.length,M=b,S=r.getTypeOf(a)!=="string";v<a.length;)M=b-v,f=S?(l=a[v++],c=v<b?a[v++]:0,v<b?a[v++]:0):(l=a.charCodeAt(v++),c=v<b?a.charCodeAt(v++):0,v<b?a.charCodeAt(v++):0),p=l>>2,d=(3&l)<<4|c>>4,y=1<M?(15&c)<<2|f>>6:64,h=2<M?63&f:64,g.push(o.charAt(p)+o.charAt(d)+o.charAt(y)+o.charAt(h));return g.join("")},n.decode=function(a){var l,c,f,p,d,y,h=0,g=0,v="data:";if(a.substr(0,v.length)===v)throw new Error("Invalid base64 input, it looks like a data url.");var b,M=3*(a=a.replace(/[^A-Za-z0-9+/=]/g,"")).length/4;if(a.charAt(a.length-1)===o.charAt(64)&&M--,a.charAt(a.length-2)===o.charAt(64)&&M--,M%1!=0)throw new Error("Invalid base64 input, bad content length.");for(b=s.uint8array?new Uint8Array(0|M):new Array(0|M);h<a.length;)l=o.indexOf(a.charAt(h++))<<2|(p=o.indexOf(a.charAt(h++)))>>4,c=(15&p)<<4|(d=o.indexOf(a.charAt(h++)))>>2,f=(3&d)<<6|(y=o.indexOf(a.charAt(h++))),b[g++]=l,d!==64&&(b[g++]=c),y!==64&&(b[g++]=f);return b}},{"./support":30,"./utils":32}],2:[function(t,i,n){var r=t("./external"),s=t("./stream/DataWorker"),o=t("./stream/Crc32Probe"),a=t("./stream/DataLengthProbe");function l(c,f,p,d,y){this.compressedSize=c,this.uncompressedSize=f,this.crc32=p,this.compression=d,this.compressedContent=y}l.prototype={getContentWorker:function(){var c=new s(r.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a("data_length")),f=this;return c.on("end",function(){if(this.streamInfo.data_length!==f.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),c},getCompressedWorker:function(){return new s(r.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},l.createWorkerFrom=function(c,f,p){return c.pipe(new o).pipe(new a("uncompressedSize")).pipe(f.compressWorker(p)).pipe(new a("compressedSize")).withStreamInfo("compression",f)},i.exports=l},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(t,i,n){var r=t("./stream/GenericWorker");n.STORE={magic:"\0\0",compressWorker:function(){return new r("STORE compression")},uncompressWorker:function(){return new r("STORE decompression")}},n.DEFLATE=t("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(t,i,n){var r=t("./utils"),s=(function(){for(var o,a=[],l=0;l<256;l++){o=l;for(var c=0;c<8;c++)o=1&o?3988292384^o>>>1:o>>>1;a[l]=o}return a})();i.exports=function(o,a){return o!==void 0&&o.length?r.getTypeOf(o)!=="string"?(function(l,c,f,p){var d=s,y=p+f;l^=-1;for(var h=p;h<y;h++)l=l>>>8^d[255&(l^c[h])];return-1^l})(0|a,o,o.length,0):(function(l,c,f,p){var d=s,y=p+f;l^=-1;for(var h=p;h<y;h++)l=l>>>8^d[255&(l^c.charCodeAt(h))];return-1^l})(0|a,o,o.length,0):0}},{"./utils":32}],5:[function(t,i,n){n.base64=!1,n.binary=!1,n.dir=!1,n.createFolders=!0,n.date=null,n.compression=null,n.compressionOptions=null,n.comment=null,n.unixPermissions=null,n.dosPermissions=null},{}],6:[function(t,i,n){var r=null;r=typeof Promise<"u"?Promise:t("lie"),i.exports={Promise:r}},{lie:37}],7:[function(t,i,n){var r=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Uint32Array<"u",s=t("pako"),o=t("./utils"),a=t("./stream/GenericWorker"),l=r?"uint8array":"array";function c(f,p){a.call(this,"FlateWorker/"+f),this._pako=null,this._pakoAction=f,this._pakoOptions=p,this.meta={}}n.magic="\b\0",o.inherits(c,a),c.prototype.processChunk=function(f){this.meta=f.meta,this._pako===null&&this._createPako(),this._pako.push(o.transformTo(l,f.data),!1)},c.prototype.flush=function(){a.prototype.flush.call(this),this._pako===null&&this._createPako(),this._pako.push([],!0)},c.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},c.prototype._createPako=function(){this._pako=new s[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var f=this;this._pako.onData=function(p){f.push({data:p,meta:f.meta})}},n.compressWorker=function(f){return new c("Deflate",f)},n.uncompressWorker=function(){return new c("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(t,i,n){function r(d,y){var h,g="";for(h=0;h<y;h++)g+=String.fromCharCode(255&d),d>>>=8;return g}function s(d,y,h,g,v,b){var M,S,E=d.file,R=d.compression,D=b!==l.utf8encode,j=o.transformTo("string",b(E.name)),z=o.transformTo("string",l.utf8encode(E.name)),H=E.comment,q=o.transformTo("string",b(H)),C=o.transformTo("string",l.utf8encode(H)),B=z.length!==E.name.length,m=C.length!==H.length,O="",ee="",W="",te=E.dir,F=E.date,J={crc32:0,compressedSize:0,uncompressedSize:0};y&&!h||(J.crc32=d.crc32,J.compressedSize=d.compressedSize,J.uncompressedSize=d.uncompressedSize);var I=0;y&&(I|=8),D||!B&&!m||(I|=2048);var L=0,Q=0;te&&(L|=16),v==="UNIX"?(Q=798,L|=(function(Z,le){var pe=Z;return Z||(pe=le?16893:33204),(65535&pe)<<16})(E.unixPermissions,te)):(Q=20,L|=(function(Z){return 63&(Z||0)})(E.dosPermissions)),M=F.getUTCHours(),M<<=6,M|=F.getUTCMinutes(),M<<=5,M|=F.getUTCSeconds()/2,S=F.getUTCFullYear()-1980,S<<=4,S|=F.getUTCMonth()+1,S<<=5,S|=F.getUTCDate(),B&&(ee=r(1,1)+r(c(j),4)+z,O+="up"+r(ee.length,2)+ee),m&&(W=r(1,1)+r(c(q),4)+C,O+="uc"+r(W.length,2)+W);var Y="";return Y+=`
113
+ \0`,Y+=r(I,2),Y+=R.magic,Y+=r(M,2),Y+=r(S,2),Y+=r(J.crc32,4),Y+=r(J.compressedSize,4),Y+=r(J.uncompressedSize,4),Y+=r(j.length,2),Y+=r(O.length,2),{fileRecord:f.LOCAL_FILE_HEADER+Y+j+O,dirRecord:f.CENTRAL_FILE_HEADER+r(Q,2)+Y+r(q.length,2)+"\0\0\0\0"+r(L,4)+r(g,4)+j+O+q}}var o=t("../utils"),a=t("../stream/GenericWorker"),l=t("../utf8"),c=t("../crc32"),f=t("../signature");function p(d,y,h,g){a.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=y,this.zipPlatform=h,this.encodeFileName=g,this.streamFiles=d,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}o.inherits(p,a),p.prototype.push=function(d){var y=d.meta.percent||0,h=this.entriesCount,g=this._sources.length;this.accumulate?this.contentBuffer.push(d):(this.bytesWritten+=d.data.length,a.prototype.push.call(this,{data:d.data,meta:{currentFile:this.currentFile,percent:h?(y+100*(h-g-1))/h:100}}))},p.prototype.openedSource=function(d){this.currentSourceOffset=this.bytesWritten,this.currentFile=d.file.name;var y=this.streamFiles&&!d.file.dir;if(y){var h=s(d,y,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:h.fileRecord,meta:{percent:0}})}else this.accumulate=!0},p.prototype.closedSource=function(d){this.accumulate=!1;var y=this.streamFiles&&!d.file.dir,h=s(d,y,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(h.dirRecord),y)this.push({data:(function(g){return f.DATA_DESCRIPTOR+r(g.crc32,4)+r(g.compressedSize,4)+r(g.uncompressedSize,4)})(d),meta:{percent:100}});else for(this.push({data:h.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},p.prototype.flush=function(){for(var d=this.bytesWritten,y=0;y<this.dirRecords.length;y++)this.push({data:this.dirRecords[y],meta:{percent:100}});var h=this.bytesWritten-d,g=(function(v,b,M,S,E){var R=o.transformTo("string",E(S));return f.CENTRAL_DIRECTORY_END+"\0\0\0\0"+r(v,2)+r(v,2)+r(b,4)+r(M,4)+r(R.length,2)+R})(this.dirRecords.length,h,d,this.zipComment,this.encodeFileName);this.push({data:g,meta:{percent:100}})},p.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},p.prototype.registerPrevious=function(d){this._sources.push(d);var y=this;return d.on("data",function(h){y.processChunk(h)}),d.on("end",function(){y.closedSource(y.previous.streamInfo),y._sources.length?y.prepareNextSource():y.end()}),d.on("error",function(h){y.error(h)}),this},p.prototype.resume=function(){return!!a.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},p.prototype.error=function(d){var y=this._sources;if(!a.prototype.error.call(this,d))return!1;for(var h=0;h<y.length;h++)try{y[h].error(d)}catch{}return!0},p.prototype.lock=function(){a.prototype.lock.call(this);for(var d=this._sources,y=0;y<d.length;y++)d[y].lock()},i.exports=p},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(t,i,n){var r=t("../compressions"),s=t("./ZipFileWorker");n.generateWorker=function(o,a,l){var c=new s(a.streamFiles,l,a.platform,a.encodeFileName),f=0;try{o.forEach(function(p,d){f++;var y=(function(b,M){var S=b||M,E=r[S];if(!E)throw new Error(S+" is not a valid compression method !");return E})(d.options.compression,a.compression),h=d.options.compressionOptions||a.compressionOptions||{},g=d.dir,v=d.date;d._compressWorker(y,h).withStreamInfo("file",{name:p,dir:g,date:v,comment:d.comment||"",unixPermissions:d.unixPermissions,dosPermissions:d.dosPermissions}).pipe(c)}),c.entriesCount=f}catch(p){c.error(p)}return c}},{"../compressions":3,"./ZipFileWorker":8}],10:[function(t,i,n){function r(){if(!(this instanceof r))return new r;if(arguments.length)throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");this.files=Object.create(null),this.comment=null,this.root="",this.clone=function(){var s=new r;for(var o in this)typeof this[o]!="function"&&(s[o]=this[o]);return s}}(r.prototype=t("./object")).loadAsync=t("./load"),r.support=t("./support"),r.defaults=t("./defaults"),r.version="3.10.1",r.loadAsync=function(s,o){return new r().loadAsync(s,o)},r.external=t("./external"),i.exports=r},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(t,i,n){var r=t("./utils"),s=t("./external"),o=t("./utf8"),a=t("./zipEntries"),l=t("./stream/Crc32Probe"),c=t("./nodejsUtils");function f(p){return new s.Promise(function(d,y){var h=p.decompressed.getContentWorker().pipe(new l);h.on("error",function(g){y(g)}).on("end",function(){h.streamInfo.crc32!==p.decompressed.crc32?y(new Error("Corrupted zip : CRC32 mismatch")):d()}).resume()})}i.exports=function(p,d){var y=this;return d=r.extend(d||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:o.utf8decode}),c.isNode&&c.isStream(p)?s.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")):r.prepareContent("the loaded zip file",p,!0,d.optimizedBinaryString,d.base64).then(function(h){var g=new a(d);return g.load(h),g}).then(function(h){var g=[s.Promise.resolve(h)],v=h.files;if(d.checkCRC32)for(var b=0;b<v.length;b++)g.push(f(v[b]));return s.Promise.all(g)}).then(function(h){for(var g=h.shift(),v=g.files,b=0;b<v.length;b++){var M=v[b],S=M.fileNameStr,E=r.resolve(M.fileNameStr);y.file(E,M.decompressed,{binary:!0,optimizedBinaryString:!0,date:M.date,dir:M.dir,comment:M.fileCommentStr.length?M.fileCommentStr:null,unixPermissions:M.unixPermissions,dosPermissions:M.dosPermissions,createFolders:d.createFolders}),M.dir||(y.file(E).unsafeOriginalName=S)}return g.zipComment.length&&(y.comment=g.zipComment),y})}},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(t,i,n){var r=t("../utils"),s=t("../stream/GenericWorker");function o(a,l){s.call(this,"Nodejs stream input adapter for "+a),this._upstreamEnded=!1,this._bindStream(l)}r.inherits(o,s),o.prototype._bindStream=function(a){var l=this;(this._stream=a).pause(),a.on("data",function(c){l.push({data:c,meta:{percent:0}})}).on("error",function(c){l.isPaused?this.generatedError=c:l.error(c)}).on("end",function(){l.isPaused?l._upstreamEnded=!0:l.end()})},o.prototype.pause=function(){return!!s.prototype.pause.call(this)&&(this._stream.pause(),!0)},o.prototype.resume=function(){return!!s.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},i.exports=o},{"../stream/GenericWorker":28,"../utils":32}],13:[function(t,i,n){var r=t("readable-stream").Readable;function s(o,a,l){r.call(this,a),this._helper=o;var c=this;o.on("data",function(f,p){c.push(f)||c._helper.pause(),l&&l(p)}).on("error",function(f){c.emit("error",f)}).on("end",function(){c.push(null)})}t("../utils").inherits(s,r),s.prototype._read=function(){this._helper.resume()},i.exports=s},{"../utils":32,"readable-stream":16}],14:[function(t,i,n){i.exports={isNode:typeof Buffer<"u",newBufferFrom:function(r,s){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(r,s);if(typeof r=="number")throw new Error('The "data" argument must not be a number');return new Buffer(r,s)},allocBuffer:function(r){if(Buffer.alloc)return Buffer.alloc(r);var s=new Buffer(r);return s.fill(0),s},isBuffer:function(r){return Buffer.isBuffer(r)},isStream:function(r){return r&&typeof r.on=="function"&&typeof r.pause=="function"&&typeof r.resume=="function"}}},{}],15:[function(t,i,n){function r(E,R,D){var j,z=o.getTypeOf(R),H=o.extend(D||{},c);H.date=H.date||new Date,H.compression!==null&&(H.compression=H.compression.toUpperCase()),typeof H.unixPermissions=="string"&&(H.unixPermissions=parseInt(H.unixPermissions,8)),H.unixPermissions&&16384&H.unixPermissions&&(H.dir=!0),H.dosPermissions&&16&H.dosPermissions&&(H.dir=!0),H.dir&&(E=v(E)),H.createFolders&&(j=g(E))&&b.call(this,j,!0);var q=z==="string"&&H.binary===!1&&H.base64===!1;D&&D.binary!==void 0||(H.binary=!q),(R instanceof f&&R.uncompressedSize===0||H.dir||!R||R.length===0)&&(H.base64=!1,H.binary=!0,R="",H.compression="STORE",z="string");var C=null;C=R instanceof f||R instanceof a?R:y.isNode&&y.isStream(R)?new h(E,R):o.prepareContent(E,R,H.binary,H.optimizedBinaryString,H.base64);var B=new p(E,C,H);this.files[E]=B}var s=t("./utf8"),o=t("./utils"),a=t("./stream/GenericWorker"),l=t("./stream/StreamHelper"),c=t("./defaults"),f=t("./compressedObject"),p=t("./zipObject"),d=t("./generate"),y=t("./nodejsUtils"),h=t("./nodejs/NodejsStreamInputAdapter"),g=function(E){E.slice(-1)==="/"&&(E=E.substring(0,E.length-1));var R=E.lastIndexOf("/");return 0<R?E.substring(0,R):""},v=function(E){return E.slice(-1)!=="/"&&(E+="/"),E},b=function(E,R){return R=R!==void 0?R:c.createFolders,E=v(E),this.files[E]||r.call(this,E,null,{dir:!0,createFolders:R}),this.files[E]};function M(E){return Object.prototype.toString.call(E)==="[object RegExp]"}var S={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(E){var R,D,j;for(R in this.files)j=this.files[R],(D=R.slice(this.root.length,R.length))&&R.slice(0,this.root.length)===this.root&&E(D,j)},filter:function(E){var R=[];return this.forEach(function(D,j){E(D,j)&&R.push(j)}),R},file:function(E,R,D){if(arguments.length!==1)return E=this.root+E,r.call(this,E,R,D),this;if(M(E)){var j=E;return this.filter(function(H,q){return!q.dir&&j.test(H)})}var z=this.files[this.root+E];return z&&!z.dir?z:null},folder:function(E){if(!E)return this;if(M(E))return this.filter(function(z,H){return H.dir&&E.test(z)});var R=this.root+E,D=b.call(this,R),j=this.clone();return j.root=D.name,j},remove:function(E){E=this.root+E;var R=this.files[E];if(R||(E.slice(-1)!=="/"&&(E+="/"),R=this.files[E]),R&&!R.dir)delete this.files[E];else for(var D=this.filter(function(z,H){return H.name.slice(0,E.length)===E}),j=0;j<D.length;j++)delete this.files[D[j].name];return this},generate:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},generateInternalStream:function(E){var R,D={};try{if((D=o.extend(E||{},{streamFiles:!1,compression:"STORE",compressionOptions:null,type:"",platform:"DOS",comment:null,mimeType:"application/zip",encodeFileName:s.utf8encode})).type=D.type.toLowerCase(),D.compression=D.compression.toUpperCase(),D.type==="binarystring"&&(D.type="string"),!D.type)throw new Error("No output type specified.");o.checkSupport(D.type),D.platform!=="darwin"&&D.platform!=="freebsd"&&D.platform!=="linux"&&D.platform!=="sunos"||(D.platform="UNIX"),D.platform==="win32"&&(D.platform="DOS");var j=D.comment||this.comment||"";R=d.generateWorker(this,D,j)}catch(z){(R=new a("error")).error(z)}return new l(R,D.type||"string",D.mimeType)},generateAsync:function(E,R){return this.generateInternalStream(E).accumulate(R)},generateNodeStream:function(E,R){return(E=E||{}).type||(E.type="nodebuffer"),this.generateInternalStream(E).toNodejsStream(R)}};i.exports=S},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":12,"./nodejsUtils":14,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31,"./utils":32,"./zipObject":35}],16:[function(t,i,n){i.exports=t("stream")},{stream:void 0}],17:[function(t,i,n){var r=t("./DataReader");function s(o){r.call(this,o);for(var a=0;a<this.data.length;a++)o[a]=255&o[a]}t("../utils").inherits(s,r),s.prototype.byteAt=function(o){return this.data[this.zero+o]},s.prototype.lastIndexOfSignature=function(o){for(var a=o.charCodeAt(0),l=o.charCodeAt(1),c=o.charCodeAt(2),f=o.charCodeAt(3),p=this.length-4;0<=p;--p)if(this.data[p]===a&&this.data[p+1]===l&&this.data[p+2]===c&&this.data[p+3]===f)return p-this.zero;return-1},s.prototype.readAndCheckSignature=function(o){var a=o.charCodeAt(0),l=o.charCodeAt(1),c=o.charCodeAt(2),f=o.charCodeAt(3),p=this.readData(4);return a===p[0]&&l===p[1]&&c===p[2]&&f===p[3]},s.prototype.readData=function(o){if(this.checkOffset(o),o===0)return[];var a=this.data.slice(this.zero+this.index,this.zero+this.index+o);return this.index+=o,a},i.exports=s},{"../utils":32,"./DataReader":18}],18:[function(t,i,n){var r=t("../utils");function s(o){this.data=o,this.length=o.length,this.index=0,this.zero=0}s.prototype={checkOffset:function(o){this.checkIndex(this.index+o)},checkIndex:function(o){if(this.length<this.zero+o||o<0)throw new Error("End of data reached (data length = "+this.length+", asked index = "+o+"). Corrupted zip ?")},setIndex:function(o){this.checkIndex(o),this.index=o},skip:function(o){this.setIndex(this.index+o)},byteAt:function(){},readInt:function(o){var a,l=0;for(this.checkOffset(o),a=this.index+o-1;a>=this.index;a--)l=(l<<8)+this.byteAt(a);return this.index+=o,l},readString:function(o){return r.transformTo("string",this.readData(o))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var o=this.readInt(4);return new Date(Date.UTC(1980+(o>>25&127),(o>>21&15)-1,o>>16&31,o>>11&31,o>>5&63,(31&o)<<1))}},i.exports=s},{"../utils":32}],19:[function(t,i,n){var r=t("./Uint8ArrayReader");function s(o){r.call(this,o)}t("../utils").inherits(s,r),s.prototype.readData=function(o){this.checkOffset(o);var a=this.data.slice(this.zero+this.index,this.zero+this.index+o);return this.index+=o,a},i.exports=s},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(t,i,n){var r=t("./DataReader");function s(o){r.call(this,o)}t("../utils").inherits(s,r),s.prototype.byteAt=function(o){return this.data.charCodeAt(this.zero+o)},s.prototype.lastIndexOfSignature=function(o){return this.data.lastIndexOf(o)-this.zero},s.prototype.readAndCheckSignature=function(o){return o===this.readData(4)},s.prototype.readData=function(o){this.checkOffset(o);var a=this.data.slice(this.zero+this.index,this.zero+this.index+o);return this.index+=o,a},i.exports=s},{"../utils":32,"./DataReader":18}],21:[function(t,i,n){var r=t("./ArrayReader");function s(o){r.call(this,o)}t("../utils").inherits(s,r),s.prototype.readData=function(o){if(this.checkOffset(o),o===0)return new Uint8Array(0);var a=this.data.subarray(this.zero+this.index,this.zero+this.index+o);return this.index+=o,a},i.exports=s},{"../utils":32,"./ArrayReader":17}],22:[function(t,i,n){var r=t("../utils"),s=t("../support"),o=t("./ArrayReader"),a=t("./StringReader"),l=t("./NodeBufferReader"),c=t("./Uint8ArrayReader");i.exports=function(f){var p=r.getTypeOf(f);return r.checkSupport(p),p!=="string"||s.uint8array?p==="nodebuffer"?new l(f):s.uint8array?new c(r.transformTo("uint8array",f)):new o(r.transformTo("array",f)):new a(f)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(t,i,n){n.LOCAL_FILE_HEADER="PK",n.CENTRAL_FILE_HEADER="PK",n.CENTRAL_DIRECTORY_END="PK",n.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x07",n.ZIP64_CENTRAL_DIRECTORY_END="PK",n.DATA_DESCRIPTOR="PK\x07\b"},{}],24:[function(t,i,n){var r=t("./GenericWorker"),s=t("../utils");function o(a){r.call(this,"ConvertWorker to "+a),this.destType=a}s.inherits(o,r),o.prototype.processChunk=function(a){this.push({data:s.transformTo(this.destType,a.data),meta:a.meta})},i.exports=o},{"../utils":32,"./GenericWorker":28}],25:[function(t,i,n){var r=t("./GenericWorker"),s=t("../crc32");function o(){r.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}t("../utils").inherits(o,r),o.prototype.processChunk=function(a){this.streamInfo.crc32=s(a.data,this.streamInfo.crc32||0),this.push(a)},i.exports=o},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(t,i,n){var r=t("../utils"),s=t("./GenericWorker");function o(a){s.call(this,"DataLengthProbe for "+a),this.propName=a,this.withStreamInfo(a,0)}r.inherits(o,s),o.prototype.processChunk=function(a){if(a){var l=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=l+a.data.length}s.prototype.processChunk.call(this,a)},i.exports=o},{"../utils":32,"./GenericWorker":28}],27:[function(t,i,n){var r=t("../utils"),s=t("./GenericWorker");function o(a){s.call(this,"DataWorker");var l=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,a.then(function(c){l.dataIsReady=!0,l.data=c,l.max=c&&c.length||0,l.type=r.getTypeOf(c),l.isPaused||l._tickAndRepeat()},function(c){l.error(c)})}r.inherits(o,s),o.prototype.cleanUp=function(){s.prototype.cleanUp.call(this),this.data=null},o.prototype.resume=function(){return!!s.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,r.delay(this._tickAndRepeat,[],this)),!0)},o.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(r.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},o.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var a=null,l=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":a=this.data.substring(this.index,l);break;case"uint8array":a=this.data.subarray(this.index,l);break;case"array":case"nodebuffer":a=this.data.slice(this.index,l)}return this.index=l,this.push({data:a,meta:{percent:this.max?this.index/this.max*100:0}})},i.exports=o},{"../utils":32,"./GenericWorker":28}],28:[function(t,i,n){function r(s){this.name=s||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}r.prototype={push:function(s){this.emit("data",s)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(s){this.emit("error",s)}return!0},error:function(s){return!this.isFinished&&(this.isPaused?this.generatedError=s:(this.isFinished=!0,this.emit("error",s),this.previous&&this.previous.error(s),this.cleanUp()),!0)},on:function(s,o){return this._listeners[s].push(o),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(s,o){if(this._listeners[s])for(var a=0;a<this._listeners[s].length;a++)this._listeners[s][a].call(this,o)},pipe:function(s){return s.registerPrevious(this)},registerPrevious:function(s){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.streamInfo=s.streamInfo,this.mergeStreamInfo(),this.previous=s;var o=this;return s.on("data",function(a){o.processChunk(a)}),s.on("end",function(){o.end()}),s.on("error",function(a){o.error(a)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var s=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),s=!0),this.previous&&this.previous.resume(),!s},flush:function(){},processChunk:function(s){this.push(s)},withStreamInfo:function(s,o){return this.extraStreamInfo[s]=o,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var s in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,s)&&(this.streamInfo[s]=this.extraStreamInfo[s])},lock:function(){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var s="Worker "+this.name;return this.previous?this.previous+" -> "+s:s}},i.exports=r},{}],29:[function(t,i,n){var r=t("../utils"),s=t("./ConvertWorker"),o=t("./GenericWorker"),a=t("../base64"),l=t("../support"),c=t("../external"),f=null;if(l.nodestream)try{f=t("../nodejs/NodejsStreamOutputAdapter")}catch{}function p(y,h){return new c.Promise(function(g,v){var b=[],M=y._internalType,S=y._outputType,E=y._mimeType;y.on("data",function(R,D){b.push(R),h&&h(D)}).on("error",function(R){b=[],v(R)}).on("end",function(){try{var R=(function(D,j,z){switch(D){case"blob":return r.newBlob(r.transformTo("arraybuffer",j),z);case"base64":return a.encode(j);default:return r.transformTo(D,j)}})(S,(function(D,j){var z,H=0,q=null,C=0;for(z=0;z<j.length;z++)C+=j[z].length;switch(D){case"string":return j.join("");case"array":return Array.prototype.concat.apply([],j);case"uint8array":for(q=new Uint8Array(C),z=0;z<j.length;z++)q.set(j[z],H),H+=j[z].length;return q;case"nodebuffer":return Buffer.concat(j);default:throw new Error("concat : unsupported type '"+D+"'")}})(M,b),E);g(R)}catch(D){v(D)}b=[]}).resume()})}function d(y,h,g){var v=h;switch(h){case"blob":case"arraybuffer":v="uint8array";break;case"base64":v="string"}try{this._internalType=v,this._outputType=h,this._mimeType=g,r.checkSupport(v),this._worker=y.pipe(new s(v)),y.lock()}catch(b){this._worker=new o("error"),this._worker.error(b)}}d.prototype={accumulate:function(y){return p(this,y)},on:function(y,h){var g=this;return y==="data"?this._worker.on(y,function(v){h.call(g,v.data,v.meta)}):this._worker.on(y,function(){r.delay(h,arguments,g)}),this},resume:function(){return r.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(y){if(r.checkSupport("nodestream"),this._outputType!=="nodebuffer")throw new Error(this._outputType+" is not supported by this method");return new f(this,{objectMode:this._outputType!=="nodebuffer"},y)}},i.exports=d},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(t,i,n){if(n.base64=!0,n.array=!0,n.string=!0,n.arraybuffer=typeof ArrayBuffer<"u"&&typeof Uint8Array<"u",n.nodebuffer=typeof Buffer<"u",n.uint8array=typeof Uint8Array<"u",typeof ArrayBuffer>"u")n.blob=!1;else{var r=new ArrayBuffer(0);try{n.blob=new Blob([r],{type:"application/zip"}).size===0}catch{try{var s=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);s.append(r),n.blob=s.getBlob("application/zip").size===0}catch{n.blob=!1}}}try{n.nodestream=!!t("readable-stream").Readable}catch{n.nodestream=!1}},{"readable-stream":16}],31:[function(t,i,n){for(var r=t("./utils"),s=t("./support"),o=t("./nodejsUtils"),a=t("./stream/GenericWorker"),l=new Array(256),c=0;c<256;c++)l[c]=252<=c?6:248<=c?5:240<=c?4:224<=c?3:192<=c?2:1;l[254]=l[254]=1;function f(){a.call(this,"utf-8 decode"),this.leftOver=null}function p(){a.call(this,"utf-8 encode")}n.utf8encode=function(d){return s.nodebuffer?o.newBufferFrom(d,"utf-8"):(function(y){var h,g,v,b,M,S=y.length,E=0;for(b=0;b<S;b++)(64512&(g=y.charCodeAt(b)))==55296&&b+1<S&&(64512&(v=y.charCodeAt(b+1)))==56320&&(g=65536+(g-55296<<10)+(v-56320),b++),E+=g<128?1:g<2048?2:g<65536?3:4;for(h=s.uint8array?new Uint8Array(E):new Array(E),b=M=0;M<E;b++)(64512&(g=y.charCodeAt(b)))==55296&&b+1<S&&(64512&(v=y.charCodeAt(b+1)))==56320&&(g=65536+(g-55296<<10)+(v-56320),b++),g<128?h[M++]=g:(g<2048?h[M++]=192|g>>>6:(g<65536?h[M++]=224|g>>>12:(h[M++]=240|g>>>18,h[M++]=128|g>>>12&63),h[M++]=128|g>>>6&63),h[M++]=128|63&g);return h})(d)},n.utf8decode=function(d){return s.nodebuffer?r.transformTo("nodebuffer",d).toString("utf-8"):(function(y){var h,g,v,b,M=y.length,S=new Array(2*M);for(h=g=0;h<M;)if((v=y[h++])<128)S[g++]=v;else if(4<(b=l[v]))S[g++]=65533,h+=b-1;else{for(v&=b===2?31:b===3?15:7;1<b&&h<M;)v=v<<6|63&y[h++],b--;1<b?S[g++]=65533:v<65536?S[g++]=v:(v-=65536,S[g++]=55296|v>>10&1023,S[g++]=56320|1023&v)}return S.length!==g&&(S.subarray?S=S.subarray(0,g):S.length=g),r.applyFromCharCode(S)})(d=r.transformTo(s.uint8array?"uint8array":"array",d))},r.inherits(f,a),f.prototype.processChunk=function(d){var y=r.transformTo(s.uint8array?"uint8array":"array",d.data);if(this.leftOver&&this.leftOver.length){if(s.uint8array){var h=y;(y=new Uint8Array(h.length+this.leftOver.length)).set(this.leftOver,0),y.set(h,this.leftOver.length)}else y=this.leftOver.concat(y);this.leftOver=null}var g=(function(b,M){var S;for((M=M||b.length)>b.length&&(M=b.length),S=M-1;0<=S&&(192&b[S])==128;)S--;return S<0||S===0?M:S+l[b[S]]>M?S:M})(y),v=y;g!==y.length&&(s.uint8array?(v=y.subarray(0,g),this.leftOver=y.subarray(g,y.length)):(v=y.slice(0,g),this.leftOver=y.slice(g,y.length))),this.push({data:n.utf8decode(v),meta:d.meta})},f.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:n.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},n.Utf8DecodeWorker=f,r.inherits(p,a),p.prototype.processChunk=function(d){this.push({data:n.utf8encode(d.data),meta:d.meta})},n.Utf8EncodeWorker=p},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(t,i,n){var r=t("./support"),s=t("./base64"),o=t("./nodejsUtils"),a=t("./external");function l(h){return h}function c(h,g){for(var v=0;v<h.length;++v)g[v]=255&h.charCodeAt(v);return g}t("setimmediate"),n.newBlob=function(h,g){n.checkSupport("blob");try{return new Blob([h],{type:g})}catch{try{var v=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return v.append(h),v.getBlob(g)}catch{throw new Error("Bug : can't construct the Blob.")}}};var f={stringifyByChunk:function(h,g,v){var b=[],M=0,S=h.length;if(S<=v)return String.fromCharCode.apply(null,h);for(;M<S;)g==="array"||g==="nodebuffer"?b.push(String.fromCharCode.apply(null,h.slice(M,Math.min(M+v,S)))):b.push(String.fromCharCode.apply(null,h.subarray(M,Math.min(M+v,S)))),M+=v;return b.join("")},stringifyByChar:function(h){for(var g="",v=0;v<h.length;v++)g+=String.fromCharCode(h[v]);return g},applyCanBeUsed:{uint8array:(function(){try{return r.uint8array&&String.fromCharCode.apply(null,new Uint8Array(1)).length===1}catch{return!1}})(),nodebuffer:(function(){try{return r.nodebuffer&&String.fromCharCode.apply(null,o.allocBuffer(1)).length===1}catch{return!1}})()}};function p(h){var g=65536,v=n.getTypeOf(h),b=!0;if(v==="uint8array"?b=f.applyCanBeUsed.uint8array:v==="nodebuffer"&&(b=f.applyCanBeUsed.nodebuffer),b)for(;1<g;)try{return f.stringifyByChunk(h,v,g)}catch{g=Math.floor(g/2)}return f.stringifyByChar(h)}function d(h,g){for(var v=0;v<h.length;v++)g[v]=h[v];return g}n.applyFromCharCode=p;var y={};y.string={string:l,array:function(h){return c(h,new Array(h.length))},arraybuffer:function(h){return y.string.uint8array(h).buffer},uint8array:function(h){return c(h,new Uint8Array(h.length))},nodebuffer:function(h){return c(h,o.allocBuffer(h.length))}},y.array={string:p,array:l,arraybuffer:function(h){return new Uint8Array(h).buffer},uint8array:function(h){return new Uint8Array(h)},nodebuffer:function(h){return o.newBufferFrom(h)}},y.arraybuffer={string:function(h){return p(new Uint8Array(h))},array:function(h){return d(new Uint8Array(h),new Array(h.byteLength))},arraybuffer:l,uint8array:function(h){return new Uint8Array(h)},nodebuffer:function(h){return o.newBufferFrom(new Uint8Array(h))}},y.uint8array={string:p,array:function(h){return d(h,new Array(h.length))},arraybuffer:function(h){return h.buffer},uint8array:l,nodebuffer:function(h){return o.newBufferFrom(h)}},y.nodebuffer={string:p,array:function(h){return d(h,new Array(h.length))},arraybuffer:function(h){return y.nodebuffer.uint8array(h).buffer},uint8array:function(h){return d(h,new Uint8Array(h.length))},nodebuffer:l},n.transformTo=function(h,g){if(g=g||"",!h)return g;n.checkSupport(h);var v=n.getTypeOf(g);return y[v][h](g)},n.resolve=function(h){for(var g=h.split("/"),v=[],b=0;b<g.length;b++){var M=g[b];M==="."||M===""&&b!==0&&b!==g.length-1||(M===".."?v.pop():v.push(M))}return v.join("/")},n.getTypeOf=function(h){return typeof h=="string"?"string":Object.prototype.toString.call(h)==="[object Array]"?"array":r.nodebuffer&&o.isBuffer(h)?"nodebuffer":r.uint8array&&h instanceof Uint8Array?"uint8array":r.arraybuffer&&h instanceof ArrayBuffer?"arraybuffer":void 0},n.checkSupport=function(h){if(!r[h.toLowerCase()])throw new Error(h+" is not supported by this platform")},n.MAX_VALUE_16BITS=65535,n.MAX_VALUE_32BITS=-1,n.pretty=function(h){var g,v,b="";for(v=0;v<(h||"").length;v++)b+="\\x"+((g=h.charCodeAt(v))<16?"0":"")+g.toString(16).toUpperCase();return b},n.delay=function(h,g,v){setImmediate(function(){h.apply(v||null,g||[])})},n.inherits=function(h,g){function v(){}v.prototype=g.prototype,h.prototype=new v},n.extend=function(){var h,g,v={};for(h=0;h<arguments.length;h++)for(g in arguments[h])Object.prototype.hasOwnProperty.call(arguments[h],g)&&v[g]===void 0&&(v[g]=arguments[h][g]);return v},n.prepareContent=function(h,g,v,b,M){return a.Promise.resolve(g).then(function(S){return r.blob&&(S instanceof Blob||["[object File]","[object Blob]"].indexOf(Object.prototype.toString.call(S))!==-1)&&typeof FileReader<"u"?new a.Promise(function(E,R){var D=new FileReader;D.onload=function(j){E(j.target.result)},D.onerror=function(j){R(j.target.error)},D.readAsArrayBuffer(S)}):S}).then(function(S){var E=n.getTypeOf(S);return E?(E==="arraybuffer"?S=n.transformTo("uint8array",S):E==="string"&&(M?S=s.decode(S):v&&b!==!0&&(S=(function(R){return c(R,r.uint8array?new Uint8Array(R.length):new Array(R.length))})(S))),S):a.Promise.reject(new Error("Can't read the data of '"+h+"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?"))})}},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,setimmediate:54}],33:[function(t,i,n){var r=t("./reader/readerFor"),s=t("./utils"),o=t("./signature"),a=t("./zipEntry"),l=t("./support");function c(f){this.files=[],this.loadOptions=f}c.prototype={checkSignature:function(f){if(!this.reader.readAndCheckSignature(f)){this.reader.index-=4;var p=this.reader.readString(4);throw new Error("Corrupted zip or bug: unexpected signature ("+s.pretty(p)+", expected "+s.pretty(f)+")")}},isSignature:function(f,p){var d=this.reader.index;this.reader.setIndex(f);var y=this.reader.readString(4)===p;return this.reader.setIndex(d),y},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var f=this.reader.readData(this.zipCommentLength),p=l.uint8array?"uint8array":"array",d=s.transformTo(p,f);this.zipComment=this.loadOptions.decodeFileName(d)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var f,p,d,y=this.zip64EndOfCentralSize-44;0<y;)f=this.reader.readInt(2),p=this.reader.readInt(4),d=this.reader.readData(p),this.zip64ExtensibleData[f]={id:f,length:p,value:d}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var f,p;for(f=0;f<this.files.length;f++)p=this.files[f],this.reader.setIndex(p.localHeaderOffset),this.checkSignature(o.LOCAL_FILE_HEADER),p.readLocalPart(this.reader),p.handleUTF8(),p.processAttributes()},readCentralDir:function(){var f;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(o.CENTRAL_FILE_HEADER);)(f=new a({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(f);if(this.centralDirRecords!==this.files.length&&this.centralDirRecords!==0&&this.files.length===0)throw new Error("Corrupted zip or bug: expected "+this.centralDirRecords+" records in central dir, got "+this.files.length)},readEndOfCentral:function(){var f=this.reader.lastIndexOfSignature(o.CENTRAL_DIRECTORY_END);if(f<0)throw this.isSignature(0,o.LOCAL_FILE_HEADER)?new Error("Corrupted zip: can't find end of central directory"):new Error("Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html");this.reader.setIndex(f);var p=f;if(this.checkSignature(o.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===s.MAX_VALUE_16BITS||this.diskWithCentralDirStart===s.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===s.MAX_VALUE_16BITS||this.centralDirRecords===s.MAX_VALUE_16BITS||this.centralDirSize===s.MAX_VALUE_32BITS||this.centralDirOffset===s.MAX_VALUE_32BITS){if(this.zip64=!0,(f=this.reader.lastIndexOfSignature(o.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");if(this.reader.setIndex(f),this.checkSignature(o.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,o.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(o.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error("Corrupted zip: can't find the ZIP64 end of central directory");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(o.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var d=this.centralDirOffset+this.centralDirSize;this.zip64&&(d+=20,d+=12+this.zip64EndOfCentralSize);var y=p-d;if(0<y)this.isSignature(p,o.CENTRAL_FILE_HEADER)||(this.reader.zero=y);else if(y<0)throw new Error("Corrupted zip: missing "+Math.abs(y)+" bytes.")},prepareReader:function(f){this.reader=r(f)},load:function(f){this.prepareReader(f),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},i.exports=c},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utils":32,"./zipEntry":34}],34:[function(t,i,n){var r=t("./reader/readerFor"),s=t("./utils"),o=t("./compressedObject"),a=t("./crc32"),l=t("./utf8"),c=t("./compressions"),f=t("./support");function p(d,y){this.options=d,this.loadOptions=y}p.prototype={isEncrypted:function(){return(1&this.bitFlag)==1},useUTF8:function(){return(2048&this.bitFlag)==2048},readLocalPart:function(d){var y,h;if(d.skip(22),this.fileNameLength=d.readInt(2),h=d.readInt(2),this.fileName=d.readData(this.fileNameLength),d.skip(h),this.compressedSize===-1||this.uncompressedSize===-1)throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)");if((y=(function(g){for(var v in c)if(Object.prototype.hasOwnProperty.call(c,v)&&c[v].magic===g)return c[v];return null})(this.compressionMethod))===null)throw new Error("Corrupted zip : compression "+s.pretty(this.compressionMethod)+" unknown (inner file : "+s.transformTo("string",this.fileName)+")");this.decompressed=new o(this.compressedSize,this.uncompressedSize,this.crc32,y,d.readData(this.compressedSize))},readCentralPart:function(d){this.versionMadeBy=d.readInt(2),d.skip(2),this.bitFlag=d.readInt(2),this.compressionMethod=d.readString(2),this.date=d.readDate(),this.crc32=d.readInt(4),this.compressedSize=d.readInt(4),this.uncompressedSize=d.readInt(4);var y=d.readInt(2);if(this.extraFieldsLength=d.readInt(2),this.fileCommentLength=d.readInt(2),this.diskNumberStart=d.readInt(2),this.internalFileAttributes=d.readInt(2),this.externalFileAttributes=d.readInt(4),this.localHeaderOffset=d.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");d.skip(y),this.readExtraFields(d),this.parseZIP64ExtraField(d),this.fileComment=d.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var d=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),d==0&&(this.dosPermissions=63&this.externalFileAttributes),d==3&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||this.fileNameStr.slice(-1)!=="/"||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var d=r(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=d.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=d.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=d.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=d.readInt(4))}},readExtraFields:function(d){var y,h,g,v=d.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});d.index+4<v;)y=d.readInt(2),h=d.readInt(2),g=d.readData(h),this.extraFields[y]={id:y,length:h,value:g};d.setIndex(v)},handleUTF8:function(){var d=f.uint8array?"uint8array":"array";if(this.useUTF8())this.fileNameStr=l.utf8decode(this.fileName),this.fileCommentStr=l.utf8decode(this.fileComment);else{var y=this.findExtraFieldUnicodePath();if(y!==null)this.fileNameStr=y;else{var h=s.transformTo(d,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(h)}var g=this.findExtraFieldUnicodeComment();if(g!==null)this.fileCommentStr=g;else{var v=s.transformTo(d,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(v)}}},findExtraFieldUnicodePath:function(){var d=this.extraFields[28789];if(d){var y=r(d.value);return y.readInt(1)!==1||a(this.fileName)!==y.readInt(4)?null:l.utf8decode(y.readData(d.length-5))}return null},findExtraFieldUnicodeComment:function(){var d=this.extraFields[25461];if(d){var y=r(d.value);return y.readInt(1)!==1||a(this.fileComment)!==y.readInt(4)?null:l.utf8decode(y.readData(d.length-5))}return null}},i.exports=p},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(t,i,n){function r(y,h,g){this.name=y,this.dir=g.dir,this.date=g.date,this.comment=g.comment,this.unixPermissions=g.unixPermissions,this.dosPermissions=g.dosPermissions,this._data=h,this._dataBinary=g.binary,this.options={compression:g.compression,compressionOptions:g.compressionOptions}}var s=t("./stream/StreamHelper"),o=t("./stream/DataWorker"),a=t("./utf8"),l=t("./compressedObject"),c=t("./stream/GenericWorker");r.prototype={internalStream:function(y){var h=null,g="string";try{if(!y)throw new Error("No output type specified.");var v=(g=y.toLowerCase())==="string"||g==="text";g!=="binarystring"&&g!=="text"||(g="string"),h=this._decompressWorker();var b=!this._dataBinary;b&&!v&&(h=h.pipe(new a.Utf8EncodeWorker)),!b&&v&&(h=h.pipe(new a.Utf8DecodeWorker))}catch(M){(h=new c("error")).error(M)}return new s(h,g,"")},async:function(y,h){return this.internalStream(y).accumulate(h)},nodeStream:function(y,h){return this.internalStream(y||"nodebuffer").toNodejsStream(h)},_compressWorker:function(y,h){if(this._data instanceof l&&this._data.compression.magic===y.magic)return this._data.getCompressedWorker();var g=this._decompressWorker();return this._dataBinary||(g=g.pipe(new a.Utf8EncodeWorker)),l.createWorkerFrom(g,y,h)},_decompressWorker:function(){return this._data instanceof l?this._data.getContentWorker():this._data instanceof c?this._data:new o(this._data)}};for(var f=["asText","asBinary","asNodeBuffer","asUint8Array","asArrayBuffer"],p=function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},d=0;d<f.length;d++)r.prototype[f[d]]=p;i.exports=r},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(t,i,n){(function(r){var s,o,a=r.MutationObserver||r.WebKitMutationObserver;if(a){var l=0,c=new a(y),f=r.document.createTextNode("");c.observe(f,{characterData:!0}),s=function(){f.data=l=++l%2}}else if(r.setImmediate||r.MessageChannel===void 0)s="document"in r&&"onreadystatechange"in r.document.createElement("script")?function(){var h=r.document.createElement("script");h.onreadystatechange=function(){y(),h.onreadystatechange=null,h.parentNode.removeChild(h),h=null},r.document.documentElement.appendChild(h)}:function(){setTimeout(y,0)};else{var p=new r.MessageChannel;p.port1.onmessage=y,s=function(){p.port2.postMessage(0)}}var d=[];function y(){var h,g;o=!0;for(var v=d.length;v;){for(g=d,d=[],h=-1;++h<v;)g[h]();v=d.length}o=!1}i.exports=function(h){d.push(h)!==1||o||s()}}).call(this,typeof Ae<"u"?Ae:typeof self<"u"?self:typeof window<"u"?window:{})},{}],37:[function(t,i,n){var r=t("immediate");function s(){}var o={},a=["REJECTED"],l=["FULFILLED"],c=["PENDING"];function f(v){if(typeof v!="function")throw new TypeError("resolver must be a function");this.state=c,this.queue=[],this.outcome=void 0,v!==s&&h(this,v)}function p(v,b,M){this.promise=v,typeof b=="function"&&(this.onFulfilled=b,this.callFulfilled=this.otherCallFulfilled),typeof M=="function"&&(this.onRejected=M,this.callRejected=this.otherCallRejected)}function d(v,b,M){r(function(){var S;try{S=b(M)}catch(E){return o.reject(v,E)}S===v?o.reject(v,new TypeError("Cannot resolve promise with itself")):o.resolve(v,S)})}function y(v){var b=v&&v.then;if(v&&(typeof v=="object"||typeof v=="function")&&typeof b=="function")return function(){b.apply(v,arguments)}}function h(v,b){var M=!1;function S(D){M||(M=!0,o.reject(v,D))}function E(D){M||(M=!0,o.resolve(v,D))}var R=g(function(){b(E,S)});R.status==="error"&&S(R.value)}function g(v,b){var M={};try{M.value=v(b),M.status="success"}catch(S){M.status="error",M.value=S}return M}(i.exports=f).prototype.finally=function(v){if(typeof v!="function")return this;var b=this.constructor;return this.then(function(M){return b.resolve(v()).then(function(){return M})},function(M){return b.resolve(v()).then(function(){throw M})})},f.prototype.catch=function(v){return this.then(null,v)},f.prototype.then=function(v,b){if(typeof v!="function"&&this.state===l||typeof b!="function"&&this.state===a)return this;var M=new this.constructor(s);return this.state!==c?d(M,this.state===l?v:b,this.outcome):this.queue.push(new p(M,v,b)),M},p.prototype.callFulfilled=function(v){o.resolve(this.promise,v)},p.prototype.otherCallFulfilled=function(v){d(this.promise,this.onFulfilled,v)},p.prototype.callRejected=function(v){o.reject(this.promise,v)},p.prototype.otherCallRejected=function(v){d(this.promise,this.onRejected,v)},o.resolve=function(v,b){var M=g(y,b);if(M.status==="error")return o.reject(v,M.value);var S=M.value;if(S)h(v,S);else{v.state=l,v.outcome=b;for(var E=-1,R=v.queue.length;++E<R;)v.queue[E].callFulfilled(b)}return v},o.reject=function(v,b){v.state=a,v.outcome=b;for(var M=-1,S=v.queue.length;++M<S;)v.queue[M].callRejected(b);return v},f.resolve=function(v){return v instanceof this?v:o.resolve(new this(s),v)},f.reject=function(v){var b=new this(s);return o.reject(b,v)},f.all=function(v){var b=this;if(Object.prototype.toString.call(v)!=="[object Array]")return this.reject(new TypeError("must be an array"));var M=v.length,S=!1;if(!M)return this.resolve([]);for(var E=new Array(M),R=0,D=-1,j=new this(s);++D<M;)z(v[D],D);return j;function z(H,q){b.resolve(H).then(function(C){E[q]=C,++R!==M||S||(S=!0,o.resolve(j,E))},function(C){S||(S=!0,o.reject(j,C))})}},f.race=function(v){var b=this;if(Object.prototype.toString.call(v)!=="[object Array]")return this.reject(new TypeError("must be an array"));var M=v.length,S=!1;if(!M)return this.resolve([]);for(var E=-1,R=new this(s);++E<M;)D=v[E],b.resolve(D).then(function(j){S||(S=!0,o.resolve(R,j))},function(j){S||(S=!0,o.reject(R,j))});var D;return R}},{immediate:36}],38:[function(t,i,n){var r={};(0,t("./lib/utils/common").assign)(r,t("./lib/deflate"),t("./lib/inflate"),t("./lib/zlib/constants")),i.exports=r},{"./lib/deflate":39,"./lib/inflate":40,"./lib/utils/common":41,"./lib/zlib/constants":44}],39:[function(t,i,n){var r=t("./zlib/deflate"),s=t("./utils/common"),o=t("./utils/strings"),a=t("./zlib/messages"),l=t("./zlib/zstream"),c=Object.prototype.toString,f=0,p=-1,d=0,y=8;function h(v){if(!(this instanceof h))return new h(v);this.options=s.assign({level:p,method:y,chunkSize:16384,windowBits:15,memLevel:8,strategy:d,to:""},v||{});var b=this.options;b.raw&&0<b.windowBits?b.windowBits=-b.windowBits:b.gzip&&0<b.windowBits&&b.windowBits<16&&(b.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new l,this.strm.avail_out=0;var M=r.deflateInit2(this.strm,b.level,b.method,b.windowBits,b.memLevel,b.strategy);if(M!==f)throw new Error(a[M]);if(b.header&&r.deflateSetHeader(this.strm,b.header),b.dictionary){var S;if(S=typeof b.dictionary=="string"?o.string2buf(b.dictionary):c.call(b.dictionary)==="[object ArrayBuffer]"?new Uint8Array(b.dictionary):b.dictionary,(M=r.deflateSetDictionary(this.strm,S))!==f)throw new Error(a[M]);this._dict_set=!0}}function g(v,b){var M=new h(b);if(M.push(v,!0),M.err)throw M.msg||a[M.err];return M.result}h.prototype.push=function(v,b){var M,S,E=this.strm,R=this.options.chunkSize;if(this.ended)return!1;S=b===~~b?b:b===!0?4:0,typeof v=="string"?E.input=o.string2buf(v):c.call(v)==="[object ArrayBuffer]"?E.input=new Uint8Array(v):E.input=v,E.next_in=0,E.avail_in=E.input.length;do{if(E.avail_out===0&&(E.output=new s.Buf8(R),E.next_out=0,E.avail_out=R),(M=r.deflate(E,S))!==1&&M!==f)return this.onEnd(M),!(this.ended=!0);E.avail_out!==0&&(E.avail_in!==0||S!==4&&S!==2)||(this.options.to==="string"?this.onData(o.buf2binstring(s.shrinkBuf(E.output,E.next_out))):this.onData(s.shrinkBuf(E.output,E.next_out)))}while((0<E.avail_in||E.avail_out===0)&&M!==1);return S===4?(M=r.deflateEnd(this.strm),this.onEnd(M),this.ended=!0,M===f):S!==2||(this.onEnd(f),!(E.avail_out=0))},h.prototype.onData=function(v){this.chunks.push(v)},h.prototype.onEnd=function(v){v===f&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=s.flattenChunks(this.chunks)),this.chunks=[],this.err=v,this.msg=this.strm.msg},n.Deflate=h,n.deflate=g,n.deflateRaw=function(v,b){return(b=b||{}).raw=!0,g(v,b)},n.gzip=function(v,b){return(b=b||{}).gzip=!0,g(v,b)}},{"./utils/common":41,"./utils/strings":42,"./zlib/deflate":46,"./zlib/messages":51,"./zlib/zstream":53}],40:[function(t,i,n){var r=t("./zlib/inflate"),s=t("./utils/common"),o=t("./utils/strings"),a=t("./zlib/constants"),l=t("./zlib/messages"),c=t("./zlib/zstream"),f=t("./zlib/gzheader"),p=Object.prototype.toString;function d(h){if(!(this instanceof d))return new d(h);this.options=s.assign({chunkSize:16384,windowBits:0,to:""},h||{});var g=this.options;g.raw&&0<=g.windowBits&&g.windowBits<16&&(g.windowBits=-g.windowBits,g.windowBits===0&&(g.windowBits=-15)),!(0<=g.windowBits&&g.windowBits<16)||h&&h.windowBits||(g.windowBits+=32),15<g.windowBits&&g.windowBits<48&&(15&g.windowBits)==0&&(g.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new c,this.strm.avail_out=0;var v=r.inflateInit2(this.strm,g.windowBits);if(v!==a.Z_OK)throw new Error(l[v]);this.header=new f,r.inflateGetHeader(this.strm,this.header)}function y(h,g){var v=new d(g);if(v.push(h,!0),v.err)throw v.msg||l[v.err];return v.result}d.prototype.push=function(h,g){var v,b,M,S,E,R,D=this.strm,j=this.options.chunkSize,z=this.options.dictionary,H=!1;if(this.ended)return!1;b=g===~~g?g:g===!0?a.Z_FINISH:a.Z_NO_FLUSH,typeof h=="string"?D.input=o.binstring2buf(h):p.call(h)==="[object ArrayBuffer]"?D.input=new Uint8Array(h):D.input=h,D.next_in=0,D.avail_in=D.input.length;do{if(D.avail_out===0&&(D.output=new s.Buf8(j),D.next_out=0,D.avail_out=j),(v=r.inflate(D,a.Z_NO_FLUSH))===a.Z_NEED_DICT&&z&&(R=typeof z=="string"?o.string2buf(z):p.call(z)==="[object ArrayBuffer]"?new Uint8Array(z):z,v=r.inflateSetDictionary(this.strm,R)),v===a.Z_BUF_ERROR&&H===!0&&(v=a.Z_OK,H=!1),v!==a.Z_STREAM_END&&v!==a.Z_OK)return this.onEnd(v),!(this.ended=!0);D.next_out&&(D.avail_out!==0&&v!==a.Z_STREAM_END&&(D.avail_in!==0||b!==a.Z_FINISH&&b!==a.Z_SYNC_FLUSH)||(this.options.to==="string"?(M=o.utf8border(D.output,D.next_out),S=D.next_out-M,E=o.buf2string(D.output,M),D.next_out=S,D.avail_out=j-S,S&&s.arraySet(D.output,D.output,M,S,0),this.onData(E)):this.onData(s.shrinkBuf(D.output,D.next_out)))),D.avail_in===0&&D.avail_out===0&&(H=!0)}while((0<D.avail_in||D.avail_out===0)&&v!==a.Z_STREAM_END);return v===a.Z_STREAM_END&&(b=a.Z_FINISH),b===a.Z_FINISH?(v=r.inflateEnd(this.strm),this.onEnd(v),this.ended=!0,v===a.Z_OK):b!==a.Z_SYNC_FLUSH||(this.onEnd(a.Z_OK),!(D.avail_out=0))},d.prototype.onData=function(h){this.chunks.push(h)},d.prototype.onEnd=function(h){h===a.Z_OK&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=s.flattenChunks(this.chunks)),this.chunks=[],this.err=h,this.msg=this.strm.msg},n.Inflate=d,n.inflate=y,n.inflateRaw=function(h,g){return(g=g||{}).raw=!0,y(h,g)},n.ungzip=y},{"./utils/common":41,"./utils/strings":42,"./zlib/constants":44,"./zlib/gzheader":47,"./zlib/inflate":49,"./zlib/messages":51,"./zlib/zstream":53}],41:[function(t,i,n){var r=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Int32Array<"u";n.assign=function(a){for(var l=Array.prototype.slice.call(arguments,1);l.length;){var c=l.shift();if(c){if(typeof c!="object")throw new TypeError(c+"must be non-object");for(var f in c)c.hasOwnProperty(f)&&(a[f]=c[f])}}return a},n.shrinkBuf=function(a,l){return a.length===l?a:a.subarray?a.subarray(0,l):(a.length=l,a)};var s={arraySet:function(a,l,c,f,p){if(l.subarray&&a.subarray)a.set(l.subarray(c,c+f),p);else for(var d=0;d<f;d++)a[p+d]=l[c+d]},flattenChunks:function(a){var l,c,f,p,d,y;for(l=f=0,c=a.length;l<c;l++)f+=a[l].length;for(y=new Uint8Array(f),l=p=0,c=a.length;l<c;l++)d=a[l],y.set(d,p),p+=d.length;return y}},o={arraySet:function(a,l,c,f,p){for(var d=0;d<f;d++)a[p+d]=l[c+d]},flattenChunks:function(a){return[].concat.apply([],a)}};n.setTyped=function(a){a?(n.Buf8=Uint8Array,n.Buf16=Uint16Array,n.Buf32=Int32Array,n.assign(n,s)):(n.Buf8=Array,n.Buf16=Array,n.Buf32=Array,n.assign(n,o))},n.setTyped(r)},{}],42:[function(t,i,n){var r=t("./common"),s=!0,o=!0;try{String.fromCharCode.apply(null,[0])}catch{s=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{o=!1}for(var a=new r.Buf8(256),l=0;l<256;l++)a[l]=252<=l?6:248<=l?5:240<=l?4:224<=l?3:192<=l?2:1;function c(f,p){if(p<65537&&(f.subarray&&o||!f.subarray&&s))return String.fromCharCode.apply(null,r.shrinkBuf(f,p));for(var d="",y=0;y<p;y++)d+=String.fromCharCode(f[y]);return d}a[254]=a[254]=1,n.string2buf=function(f){var p,d,y,h,g,v=f.length,b=0;for(h=0;h<v;h++)(64512&(d=f.charCodeAt(h)))==55296&&h+1<v&&(64512&(y=f.charCodeAt(h+1)))==56320&&(d=65536+(d-55296<<10)+(y-56320),h++),b+=d<128?1:d<2048?2:d<65536?3:4;for(p=new r.Buf8(b),h=g=0;g<b;h++)(64512&(d=f.charCodeAt(h)))==55296&&h+1<v&&(64512&(y=f.charCodeAt(h+1)))==56320&&(d=65536+(d-55296<<10)+(y-56320),h++),d<128?p[g++]=d:(d<2048?p[g++]=192|d>>>6:(d<65536?p[g++]=224|d>>>12:(p[g++]=240|d>>>18,p[g++]=128|d>>>12&63),p[g++]=128|d>>>6&63),p[g++]=128|63&d);return p},n.buf2binstring=function(f){return c(f,f.length)},n.binstring2buf=function(f){for(var p=new r.Buf8(f.length),d=0,y=p.length;d<y;d++)p[d]=f.charCodeAt(d);return p},n.buf2string=function(f,p){var d,y,h,g,v=p||f.length,b=new Array(2*v);for(d=y=0;d<v;)if((h=f[d++])<128)b[y++]=h;else if(4<(g=a[h]))b[y++]=65533,d+=g-1;else{for(h&=g===2?31:g===3?15:7;1<g&&d<v;)h=h<<6|63&f[d++],g--;1<g?b[y++]=65533:h<65536?b[y++]=h:(h-=65536,b[y++]=55296|h>>10&1023,b[y++]=56320|1023&h)}return c(b,y)},n.utf8border=function(f,p){var d;for((p=p||f.length)>f.length&&(p=f.length),d=p-1;0<=d&&(192&f[d])==128;)d--;return d<0||d===0?p:d+a[f[d]]>p?d:p}},{"./common":41}],43:[function(t,i,n){i.exports=function(r,s,o,a){for(var l=65535&r|0,c=r>>>16&65535|0,f=0;o!==0;){for(o-=f=2e3<o?2e3:o;c=c+(l=l+s[a++]|0)|0,--f;);l%=65521,c%=65521}return l|c<<16|0}},{}],44:[function(t,i,n){i.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(t,i,n){var r=(function(){for(var s,o=[],a=0;a<256;a++){s=a;for(var l=0;l<8;l++)s=1&s?3988292384^s>>>1:s>>>1;o[a]=s}return o})();i.exports=function(s,o,a,l){var c=r,f=l+a;s^=-1;for(var p=l;p<f;p++)s=s>>>8^c[255&(s^o[p])];return-1^s}},{}],46:[function(t,i,n){var r,s=t("../utils/common"),o=t("./trees"),a=t("./adler32"),l=t("./crc32"),c=t("./messages"),f=0,p=4,d=0,y=-2,h=-1,g=4,v=2,b=8,M=9,S=286,E=30,R=19,D=2*S+1,j=15,z=3,H=258,q=H+z+1,C=42,B=113,m=1,O=2,ee=3,W=4;function te(u,N){return u.msg=c[N],N}function F(u){return(u<<1)-(4<u?9:0)}function J(u){for(var N=u.length;0<=--N;)u[N]=0}function I(u){var N=u.state,P=N.pending;P>u.avail_out&&(P=u.avail_out),P!==0&&(s.arraySet(u.output,N.pending_buf,N.pending_out,P,u.next_out),u.next_out+=P,N.pending_out+=P,u.total_out+=P,u.avail_out-=P,N.pending-=P,N.pending===0&&(N.pending_out=0))}function L(u,N){o._tr_flush_block(u,0<=u.block_start?u.block_start:-1,u.strstart-u.block_start,N),u.block_start=u.strstart,I(u.strm)}function Q(u,N){u.pending_buf[u.pending++]=N}function Y(u,N){u.pending_buf[u.pending++]=N>>>8&255,u.pending_buf[u.pending++]=255&N}function Z(u,N){var P,x,w=u.max_chain_length,T=u.strstart,U=u.prev_length,V=u.nice_match,A=u.strstart>u.w_size-q?u.strstart-(u.w_size-q):0,G=u.window,X=u.w_mask,$=u.prev,K=u.strstart+H,oe=G[T+U-1],ne=G[T+U];u.prev_length>=u.good_match&&(w>>=2),V>u.lookahead&&(V=u.lookahead);do if(G[(P=N)+U]===ne&&G[P+U-1]===oe&&G[P]===G[T]&&G[++P]===G[T+1]){T+=2,P++;do;while(G[++T]===G[++P]&&G[++T]===G[++P]&&G[++T]===G[++P]&&G[++T]===G[++P]&&G[++T]===G[++P]&&G[++T]===G[++P]&&G[++T]===G[++P]&&G[++T]===G[++P]&&T<K);if(x=H-(K-T),T=K-H,U<x){if(u.match_start=N,V<=(U=x))break;oe=G[T+U-1],ne=G[T+U]}}while((N=$[N&X])>A&&--w!=0);return U<=u.lookahead?U:u.lookahead}function le(u){var N,P,x,w,T,U,V,A,G,X,$=u.w_size;do{if(w=u.window_size-u.lookahead-u.strstart,u.strstart>=$+($-q)){for(s.arraySet(u.window,u.window,$,$,0),u.match_start-=$,u.strstart-=$,u.block_start-=$,N=P=u.hash_size;x=u.head[--N],u.head[N]=$<=x?x-$:0,--P;);for(N=P=$;x=u.prev[--N],u.prev[N]=$<=x?x-$:0,--P;);w+=$}if(u.strm.avail_in===0)break;if(U=u.strm,V=u.window,A=u.strstart+u.lookahead,G=w,X=void 0,X=U.avail_in,G<X&&(X=G),P=X===0?0:(U.avail_in-=X,s.arraySet(V,U.input,U.next_in,X,A),U.state.wrap===1?U.adler=a(U.adler,V,X,A):U.state.wrap===2&&(U.adler=l(U.adler,V,X,A)),U.next_in+=X,U.total_in+=X,X),u.lookahead+=P,u.lookahead+u.insert>=z)for(T=u.strstart-u.insert,u.ins_h=u.window[T],u.ins_h=(u.ins_h<<u.hash_shift^u.window[T+1])&u.hash_mask;u.insert&&(u.ins_h=(u.ins_h<<u.hash_shift^u.window[T+z-1])&u.hash_mask,u.prev[T&u.w_mask]=u.head[u.ins_h],u.head[u.ins_h]=T,T++,u.insert--,!(u.lookahead+u.insert<z)););}while(u.lookahead<q&&u.strm.avail_in!==0)}function pe(u,N){for(var P,x;;){if(u.lookahead<q){if(le(u),u.lookahead<q&&N===f)return m;if(u.lookahead===0)break}if(P=0,u.lookahead>=z&&(u.ins_h=(u.ins_h<<u.hash_shift^u.window[u.strstart+z-1])&u.hash_mask,P=u.prev[u.strstart&u.w_mask]=u.head[u.ins_h],u.head[u.ins_h]=u.strstart),P!==0&&u.strstart-P<=u.w_size-q&&(u.match_length=Z(u,P)),u.match_length>=z)if(x=o._tr_tally(u,u.strstart-u.match_start,u.match_length-z),u.lookahead-=u.match_length,u.match_length<=u.max_lazy_match&&u.lookahead>=z){for(u.match_length--;u.strstart++,u.ins_h=(u.ins_h<<u.hash_shift^u.window[u.strstart+z-1])&u.hash_mask,P=u.prev[u.strstart&u.w_mask]=u.head[u.ins_h],u.head[u.ins_h]=u.strstart,--u.match_length!=0;);u.strstart++}else u.strstart+=u.match_length,u.match_length=0,u.ins_h=u.window[u.strstart],u.ins_h=(u.ins_h<<u.hash_shift^u.window[u.strstart+1])&u.hash_mask;else x=o._tr_tally(u,0,u.window[u.strstart]),u.lookahead--,u.strstart++;if(x&&(L(u,!1),u.strm.avail_out===0))return m}return u.insert=u.strstart<z-1?u.strstart:z-1,N===p?(L(u,!0),u.strm.avail_out===0?ee:W):u.last_lit&&(L(u,!1),u.strm.avail_out===0)?m:O}function ie(u,N){for(var P,x,w;;){if(u.lookahead<q){if(le(u),u.lookahead<q&&N===f)return m;if(u.lookahead===0)break}if(P=0,u.lookahead>=z&&(u.ins_h=(u.ins_h<<u.hash_shift^u.window[u.strstart+z-1])&u.hash_mask,P=u.prev[u.strstart&u.w_mask]=u.head[u.ins_h],u.head[u.ins_h]=u.strstart),u.prev_length=u.match_length,u.prev_match=u.match_start,u.match_length=z-1,P!==0&&u.prev_length<u.max_lazy_match&&u.strstart-P<=u.w_size-q&&(u.match_length=Z(u,P),u.match_length<=5&&(u.strategy===1||u.match_length===z&&4096<u.strstart-u.match_start)&&(u.match_length=z-1)),u.prev_length>=z&&u.match_length<=u.prev_length){for(w=u.strstart+u.lookahead-z,x=o._tr_tally(u,u.strstart-1-u.prev_match,u.prev_length-z),u.lookahead-=u.prev_length-1,u.prev_length-=2;++u.strstart<=w&&(u.ins_h=(u.ins_h<<u.hash_shift^u.window[u.strstart+z-1])&u.hash_mask,P=u.prev[u.strstart&u.w_mask]=u.head[u.ins_h],u.head[u.ins_h]=u.strstart),--u.prev_length!=0;);if(u.match_available=0,u.match_length=z-1,u.strstart++,x&&(L(u,!1),u.strm.avail_out===0))return m}else if(u.match_available){if((x=o._tr_tally(u,0,u.window[u.strstart-1]))&&L(u,!1),u.strstart++,u.lookahead--,u.strm.avail_out===0)return m}else u.match_available=1,u.strstart++,u.lookahead--}return u.match_available&&(x=o._tr_tally(u,0,u.window[u.strstart-1]),u.match_available=0),u.insert=u.strstart<z-1?u.strstart:z-1,N===p?(L(u,!0),u.strm.avail_out===0?ee:W):u.last_lit&&(L(u,!1),u.strm.avail_out===0)?m:O}function re(u,N,P,x,w){this.good_length=u,this.max_lazy=N,this.nice_length=P,this.max_chain=x,this.func=w}function fe(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=b,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new s.Buf16(2*D),this.dyn_dtree=new s.Buf16(2*(2*E+1)),this.bl_tree=new s.Buf16(2*(2*R+1)),J(this.dyn_ltree),J(this.dyn_dtree),J(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new s.Buf16(j+1),this.heap=new s.Buf16(2*S+1),J(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new s.Buf16(2*S+1),J(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function he(u){var N;return u&&u.state?(u.total_in=u.total_out=0,u.data_type=v,(N=u.state).pending=0,N.pending_out=0,N.wrap<0&&(N.wrap=-N.wrap),N.status=N.wrap?C:B,u.adler=N.wrap===2?0:1,N.last_flush=f,o._tr_init(N),d):te(u,y)}function be(u){var N=he(u);return N===d&&(function(P){P.window_size=2*P.w_size,J(P.head),P.max_lazy_match=r[P.level].max_lazy,P.good_match=r[P.level].good_length,P.nice_match=r[P.level].nice_length,P.max_chain_length=r[P.level].max_chain,P.strstart=0,P.block_start=0,P.lookahead=0,P.insert=0,P.match_length=P.prev_length=z-1,P.match_available=0,P.ins_h=0})(u.state),N}function ye(u,N,P,x,w,T){if(!u)return y;var U=1;if(N===h&&(N=6),x<0?(U=0,x=-x):15<x&&(U=2,x-=16),w<1||M<w||P!==b||x<8||15<x||N<0||9<N||T<0||g<T)return te(u,y);x===8&&(x=9);var V=new fe;return(u.state=V).strm=u,V.wrap=U,V.gzhead=null,V.w_bits=x,V.w_size=1<<V.w_bits,V.w_mask=V.w_size-1,V.hash_bits=w+7,V.hash_size=1<<V.hash_bits,V.hash_mask=V.hash_size-1,V.hash_shift=~~((V.hash_bits+z-1)/z),V.window=new s.Buf8(2*V.w_size),V.head=new s.Buf16(V.hash_size),V.prev=new s.Buf16(V.w_size),V.lit_bufsize=1<<w+6,V.pending_buf_size=4*V.lit_bufsize,V.pending_buf=new s.Buf8(V.pending_buf_size),V.d_buf=1*V.lit_bufsize,V.l_buf=3*V.lit_bufsize,V.level=N,V.strategy=T,V.method=P,be(u)}r=[new re(0,0,0,0,function(u,N){var P=65535;for(P>u.pending_buf_size-5&&(P=u.pending_buf_size-5);;){if(u.lookahead<=1){if(le(u),u.lookahead===0&&N===f)return m;if(u.lookahead===0)break}u.strstart+=u.lookahead,u.lookahead=0;var x=u.block_start+P;if((u.strstart===0||u.strstart>=x)&&(u.lookahead=u.strstart-x,u.strstart=x,L(u,!1),u.strm.avail_out===0)||u.strstart-u.block_start>=u.w_size-q&&(L(u,!1),u.strm.avail_out===0))return m}return u.insert=0,N===p?(L(u,!0),u.strm.avail_out===0?ee:W):(u.strstart>u.block_start&&(L(u,!1),u.strm.avail_out),m)}),new re(4,4,8,4,pe),new re(4,5,16,8,pe),new re(4,6,32,32,pe),new re(4,4,16,16,ie),new re(8,16,32,32,ie),new re(8,16,128,128,ie),new re(8,32,128,256,ie),new re(32,128,258,1024,ie),new re(32,258,258,4096,ie)],n.deflateInit=function(u,N){return ye(u,N,b,15,8,0)},n.deflateInit2=ye,n.deflateReset=be,n.deflateResetKeep=he,n.deflateSetHeader=function(u,N){return u&&u.state?u.state.wrap!==2?y:(u.state.gzhead=N,d):y},n.deflate=function(u,N){var P,x,w,T;if(!u||!u.state||5<N||N<0)return u?te(u,y):y;if(x=u.state,!u.output||!u.input&&u.avail_in!==0||x.status===666&&N!==p)return te(u,u.avail_out===0?-5:y);if(x.strm=u,P=x.last_flush,x.last_flush=N,x.status===C)if(x.wrap===2)u.adler=0,Q(x,31),Q(x,139),Q(x,8),x.gzhead?(Q(x,(x.gzhead.text?1:0)+(x.gzhead.hcrc?2:0)+(x.gzhead.extra?4:0)+(x.gzhead.name?8:0)+(x.gzhead.comment?16:0)),Q(x,255&x.gzhead.time),Q(x,x.gzhead.time>>8&255),Q(x,x.gzhead.time>>16&255),Q(x,x.gzhead.time>>24&255),Q(x,x.level===9?2:2<=x.strategy||x.level<2?4:0),Q(x,255&x.gzhead.os),x.gzhead.extra&&x.gzhead.extra.length&&(Q(x,255&x.gzhead.extra.length),Q(x,x.gzhead.extra.length>>8&255)),x.gzhead.hcrc&&(u.adler=l(u.adler,x.pending_buf,x.pending,0)),x.gzindex=0,x.status=69):(Q(x,0),Q(x,0),Q(x,0),Q(x,0),Q(x,0),Q(x,x.level===9?2:2<=x.strategy||x.level<2?4:0),Q(x,3),x.status=B);else{var U=b+(x.w_bits-8<<4)<<8;U|=(2<=x.strategy||x.level<2?0:x.level<6?1:x.level===6?2:3)<<6,x.strstart!==0&&(U|=32),U+=31-U%31,x.status=B,Y(x,U),x.strstart!==0&&(Y(x,u.adler>>>16),Y(x,65535&u.adler)),u.adler=1}if(x.status===69)if(x.gzhead.extra){for(w=x.pending;x.gzindex<(65535&x.gzhead.extra.length)&&(x.pending!==x.pending_buf_size||(x.gzhead.hcrc&&x.pending>w&&(u.adler=l(u.adler,x.pending_buf,x.pending-w,w)),I(u),w=x.pending,x.pending!==x.pending_buf_size));)Q(x,255&x.gzhead.extra[x.gzindex]),x.gzindex++;x.gzhead.hcrc&&x.pending>w&&(u.adler=l(u.adler,x.pending_buf,x.pending-w,w)),x.gzindex===x.gzhead.extra.length&&(x.gzindex=0,x.status=73)}else x.status=73;if(x.status===73)if(x.gzhead.name){w=x.pending;do{if(x.pending===x.pending_buf_size&&(x.gzhead.hcrc&&x.pending>w&&(u.adler=l(u.adler,x.pending_buf,x.pending-w,w)),I(u),w=x.pending,x.pending===x.pending_buf_size)){T=1;break}T=x.gzindex<x.gzhead.name.length?255&x.gzhead.name.charCodeAt(x.gzindex++):0,Q(x,T)}while(T!==0);x.gzhead.hcrc&&x.pending>w&&(u.adler=l(u.adler,x.pending_buf,x.pending-w,w)),T===0&&(x.gzindex=0,x.status=91)}else x.status=91;if(x.status===91)if(x.gzhead.comment){w=x.pending;do{if(x.pending===x.pending_buf_size&&(x.gzhead.hcrc&&x.pending>w&&(u.adler=l(u.adler,x.pending_buf,x.pending-w,w)),I(u),w=x.pending,x.pending===x.pending_buf_size)){T=1;break}T=x.gzindex<x.gzhead.comment.length?255&x.gzhead.comment.charCodeAt(x.gzindex++):0,Q(x,T)}while(T!==0);x.gzhead.hcrc&&x.pending>w&&(u.adler=l(u.adler,x.pending_buf,x.pending-w,w)),T===0&&(x.status=103)}else x.status=103;if(x.status===103&&(x.gzhead.hcrc?(x.pending+2>x.pending_buf_size&&I(u),x.pending+2<=x.pending_buf_size&&(Q(x,255&u.adler),Q(x,u.adler>>8&255),u.adler=0,x.status=B)):x.status=B),x.pending!==0){if(I(u),u.avail_out===0)return x.last_flush=-1,d}else if(u.avail_in===0&&F(N)<=F(P)&&N!==p)return te(u,-5);if(x.status===666&&u.avail_in!==0)return te(u,-5);if(u.avail_in!==0||x.lookahead!==0||N!==f&&x.status!==666){var V=x.strategy===2?(function(A,G){for(var X;;){if(A.lookahead===0&&(le(A),A.lookahead===0)){if(G===f)return m;break}if(A.match_length=0,X=o._tr_tally(A,0,A.window[A.strstart]),A.lookahead--,A.strstart++,X&&(L(A,!1),A.strm.avail_out===0))return m}return A.insert=0,G===p?(L(A,!0),A.strm.avail_out===0?ee:W):A.last_lit&&(L(A,!1),A.strm.avail_out===0)?m:O})(x,N):x.strategy===3?(function(A,G){for(var X,$,K,oe,ne=A.window;;){if(A.lookahead<=H){if(le(A),A.lookahead<=H&&G===f)return m;if(A.lookahead===0)break}if(A.match_length=0,A.lookahead>=z&&0<A.strstart&&($=ne[K=A.strstart-1])===ne[++K]&&$===ne[++K]&&$===ne[++K]){oe=A.strstart+H;do;while($===ne[++K]&&$===ne[++K]&&$===ne[++K]&&$===ne[++K]&&$===ne[++K]&&$===ne[++K]&&$===ne[++K]&&$===ne[++K]&&K<oe);A.match_length=H-(oe-K),A.match_length>A.lookahead&&(A.match_length=A.lookahead)}if(A.match_length>=z?(X=o._tr_tally(A,1,A.match_length-z),A.lookahead-=A.match_length,A.strstart+=A.match_length,A.match_length=0):(X=o._tr_tally(A,0,A.window[A.strstart]),A.lookahead--,A.strstart++),X&&(L(A,!1),A.strm.avail_out===0))return m}return A.insert=0,G===p?(L(A,!0),A.strm.avail_out===0?ee:W):A.last_lit&&(L(A,!1),A.strm.avail_out===0)?m:O})(x,N):r[x.level].func(x,N);if(V!==ee&&V!==W||(x.status=666),V===m||V===ee)return u.avail_out===0&&(x.last_flush=-1),d;if(V===O&&(N===1?o._tr_align(x):N!==5&&(o._tr_stored_block(x,0,0,!1),N===3&&(J(x.head),x.lookahead===0&&(x.strstart=0,x.block_start=0,x.insert=0))),I(u),u.avail_out===0))return x.last_flush=-1,d}return N!==p?d:x.wrap<=0?1:(x.wrap===2?(Q(x,255&u.adler),Q(x,u.adler>>8&255),Q(x,u.adler>>16&255),Q(x,u.adler>>24&255),Q(x,255&u.total_in),Q(x,u.total_in>>8&255),Q(x,u.total_in>>16&255),Q(x,u.total_in>>24&255)):(Y(x,u.adler>>>16),Y(x,65535&u.adler)),I(u),0<x.wrap&&(x.wrap=-x.wrap),x.pending!==0?d:1)},n.deflateEnd=function(u){var N;return u&&u.state?(N=u.state.status)!==C&&N!==69&&N!==73&&N!==91&&N!==103&&N!==B&&N!==666?te(u,y):(u.state=null,N===B?te(u,-3):d):y},n.deflateSetDictionary=function(u,N){var P,x,w,T,U,V,A,G,X=N.length;if(!u||!u.state||(T=(P=u.state).wrap)===2||T===1&&P.status!==C||P.lookahead)return y;for(T===1&&(u.adler=a(u.adler,N,X,0)),P.wrap=0,X>=P.w_size&&(T===0&&(J(P.head),P.strstart=0,P.block_start=0,P.insert=0),G=new s.Buf8(P.w_size),s.arraySet(G,N,X-P.w_size,P.w_size,0),N=G,X=P.w_size),U=u.avail_in,V=u.next_in,A=u.input,u.avail_in=X,u.next_in=0,u.input=N,le(P);P.lookahead>=z;){for(x=P.strstart,w=P.lookahead-(z-1);P.ins_h=(P.ins_h<<P.hash_shift^P.window[x+z-1])&P.hash_mask,P.prev[x&P.w_mask]=P.head[P.ins_h],P.head[P.ins_h]=x,x++,--w;);P.strstart=x,P.lookahead=z-1,le(P)}return P.strstart+=P.lookahead,P.block_start=P.strstart,P.insert=P.lookahead,P.lookahead=0,P.match_length=P.prev_length=z-1,P.match_available=0,u.next_in=V,u.input=A,u.avail_in=U,P.wrap=T,d},n.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./messages":51,"./trees":52}],47:[function(t,i,n){i.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},{}],48:[function(t,i,n){i.exports=function(r,s){var o,a,l,c,f,p,d,y,h,g,v,b,M,S,E,R,D,j,z,H,q,C,B,m,O;o=r.state,a=r.next_in,m=r.input,l=a+(r.avail_in-5),c=r.next_out,O=r.output,f=c-(s-r.avail_out),p=c+(r.avail_out-257),d=o.dmax,y=o.wsize,h=o.whave,g=o.wnext,v=o.window,b=o.hold,M=o.bits,S=o.lencode,E=o.distcode,R=(1<<o.lenbits)-1,D=(1<<o.distbits)-1;e:do{M<15&&(b+=m[a++]<<M,M+=8,b+=m[a++]<<M,M+=8),j=S[b&R];t:for(;;){if(b>>>=z=j>>>24,M-=z,(z=j>>>16&255)===0)O[c++]=65535&j;else{if(!(16&z)){if((64&z)==0){j=S[(65535&j)+(b&(1<<z)-1)];continue t}if(32&z){o.mode=12;break e}r.msg="invalid literal/length code",o.mode=30;break e}H=65535&j,(z&=15)&&(M<z&&(b+=m[a++]<<M,M+=8),H+=b&(1<<z)-1,b>>>=z,M-=z),M<15&&(b+=m[a++]<<M,M+=8,b+=m[a++]<<M,M+=8),j=E[b&D];i:for(;;){if(b>>>=z=j>>>24,M-=z,!(16&(z=j>>>16&255))){if((64&z)==0){j=E[(65535&j)+(b&(1<<z)-1)];continue i}r.msg="invalid distance code",o.mode=30;break e}if(q=65535&j,M<(z&=15)&&(b+=m[a++]<<M,(M+=8)<z&&(b+=m[a++]<<M,M+=8)),d<(q+=b&(1<<z)-1)){r.msg="invalid distance too far back",o.mode=30;break e}if(b>>>=z,M-=z,(z=c-f)<q){if(h<(z=q-z)&&o.sane){r.msg="invalid distance too far back",o.mode=30;break e}if(B=v,(C=0)===g){if(C+=y-z,z<H){for(H-=z;O[c++]=v[C++],--z;);C=c-q,B=O}}else if(g<z){if(C+=y+g-z,(z-=g)<H){for(H-=z;O[c++]=v[C++],--z;);if(C=0,g<H){for(H-=z=g;O[c++]=v[C++],--z;);C=c-q,B=O}}}else if(C+=g-z,z<H){for(H-=z;O[c++]=v[C++],--z;);C=c-q,B=O}for(;2<H;)O[c++]=B[C++],O[c++]=B[C++],O[c++]=B[C++],H-=3;H&&(O[c++]=B[C++],1<H&&(O[c++]=B[C++]))}else{for(C=c-q;O[c++]=O[C++],O[c++]=O[C++],O[c++]=O[C++],2<(H-=3););H&&(O[c++]=O[C++],1<H&&(O[c++]=O[C++]))}break}}break}}while(a<l&&c<p);a-=H=M>>3,b&=(1<<(M-=H<<3))-1,r.next_in=a,r.next_out=c,r.avail_in=a<l?l-a+5:5-(a-l),r.avail_out=c<p?p-c+257:257-(c-p),o.hold=b,o.bits=M}},{}],49:[function(t,i,n){var r=t("../utils/common"),s=t("./adler32"),o=t("./crc32"),a=t("./inffast"),l=t("./inftrees"),c=1,f=2,p=0,d=-2,y=1,h=852,g=592;function v(C){return(C>>>24&255)+(C>>>8&65280)+((65280&C)<<8)+((255&C)<<24)}function b(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new r.Buf16(320),this.work=new r.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function M(C){var B;return C&&C.state?(B=C.state,C.total_in=C.total_out=B.total=0,C.msg="",B.wrap&&(C.adler=1&B.wrap),B.mode=y,B.last=0,B.havedict=0,B.dmax=32768,B.head=null,B.hold=0,B.bits=0,B.lencode=B.lendyn=new r.Buf32(h),B.distcode=B.distdyn=new r.Buf32(g),B.sane=1,B.back=-1,p):d}function S(C){var B;return C&&C.state?((B=C.state).wsize=0,B.whave=0,B.wnext=0,M(C)):d}function E(C,B){var m,O;return C&&C.state?(O=C.state,B<0?(m=0,B=-B):(m=1+(B>>4),B<48&&(B&=15)),B&&(B<8||15<B)?d:(O.window!==null&&O.wbits!==B&&(O.window=null),O.wrap=m,O.wbits=B,S(C))):d}function R(C,B){var m,O;return C?(O=new b,(C.state=O).window=null,(m=E(C,B))!==p&&(C.state=null),m):d}var D,j,z=!0;function H(C){if(z){var B;for(D=new r.Buf32(512),j=new r.Buf32(32),B=0;B<144;)C.lens[B++]=8;for(;B<256;)C.lens[B++]=9;for(;B<280;)C.lens[B++]=7;for(;B<288;)C.lens[B++]=8;for(l(c,C.lens,0,288,D,0,C.work,{bits:9}),B=0;B<32;)C.lens[B++]=5;l(f,C.lens,0,32,j,0,C.work,{bits:5}),z=!1}C.lencode=D,C.lenbits=9,C.distcode=j,C.distbits=5}function q(C,B,m,O){var ee,W=C.state;return W.window===null&&(W.wsize=1<<W.wbits,W.wnext=0,W.whave=0,W.window=new r.Buf8(W.wsize)),O>=W.wsize?(r.arraySet(W.window,B,m-W.wsize,W.wsize,0),W.wnext=0,W.whave=W.wsize):(O<(ee=W.wsize-W.wnext)&&(ee=O),r.arraySet(W.window,B,m-O,ee,W.wnext),(O-=ee)?(r.arraySet(W.window,B,m-O,O,0),W.wnext=O,W.whave=W.wsize):(W.wnext+=ee,W.wnext===W.wsize&&(W.wnext=0),W.whave<W.wsize&&(W.whave+=ee))),0}n.inflateReset=S,n.inflateReset2=E,n.inflateResetKeep=M,n.inflateInit=function(C){return R(C,15)},n.inflateInit2=R,n.inflate=function(C,B){var m,O,ee,W,te,F,J,I,L,Q,Y,Z,le,pe,ie,re,fe,he,be,ye,u,N,P,x,w=0,T=new r.Buf8(4),U=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!C||!C.state||!C.output||!C.input&&C.avail_in!==0)return d;(m=C.state).mode===12&&(m.mode=13),te=C.next_out,ee=C.output,J=C.avail_out,W=C.next_in,O=C.input,F=C.avail_in,I=m.hold,L=m.bits,Q=F,Y=J,N=p;e:for(;;)switch(m.mode){case y:if(m.wrap===0){m.mode=13;break}for(;L<16;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}if(2&m.wrap&&I===35615){T[m.check=0]=255&I,T[1]=I>>>8&255,m.check=o(m.check,T,2,0),L=I=0,m.mode=2;break}if(m.flags=0,m.head&&(m.head.done=!1),!(1&m.wrap)||(((255&I)<<8)+(I>>8))%31){C.msg="incorrect header check",m.mode=30;break}if((15&I)!=8){C.msg="unknown compression method",m.mode=30;break}if(L-=4,u=8+(15&(I>>>=4)),m.wbits===0)m.wbits=u;else if(u>m.wbits){C.msg="invalid window size",m.mode=30;break}m.dmax=1<<u,C.adler=m.check=1,m.mode=512&I?10:12,L=I=0;break;case 2:for(;L<16;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}if(m.flags=I,(255&m.flags)!=8){C.msg="unknown compression method",m.mode=30;break}if(57344&m.flags){C.msg="unknown header flags set",m.mode=30;break}m.head&&(m.head.text=I>>8&1),512&m.flags&&(T[0]=255&I,T[1]=I>>>8&255,m.check=o(m.check,T,2,0)),L=I=0,m.mode=3;case 3:for(;L<32;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}m.head&&(m.head.time=I),512&m.flags&&(T[0]=255&I,T[1]=I>>>8&255,T[2]=I>>>16&255,T[3]=I>>>24&255,m.check=o(m.check,T,4,0)),L=I=0,m.mode=4;case 4:for(;L<16;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}m.head&&(m.head.xflags=255&I,m.head.os=I>>8),512&m.flags&&(T[0]=255&I,T[1]=I>>>8&255,m.check=o(m.check,T,2,0)),L=I=0,m.mode=5;case 5:if(1024&m.flags){for(;L<16;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}m.length=I,m.head&&(m.head.extra_len=I),512&m.flags&&(T[0]=255&I,T[1]=I>>>8&255,m.check=o(m.check,T,2,0)),L=I=0}else m.head&&(m.head.extra=null);m.mode=6;case 6:if(1024&m.flags&&(F<(Z=m.length)&&(Z=F),Z&&(m.head&&(u=m.head.extra_len-m.length,m.head.extra||(m.head.extra=new Array(m.head.extra_len)),r.arraySet(m.head.extra,O,W,Z,u)),512&m.flags&&(m.check=o(m.check,O,Z,W)),F-=Z,W+=Z,m.length-=Z),m.length))break e;m.length=0,m.mode=7;case 7:if(2048&m.flags){if(F===0)break e;for(Z=0;u=O[W+Z++],m.head&&u&&m.length<65536&&(m.head.name+=String.fromCharCode(u)),u&&Z<F;);if(512&m.flags&&(m.check=o(m.check,O,Z,W)),F-=Z,W+=Z,u)break e}else m.head&&(m.head.name=null);m.length=0,m.mode=8;case 8:if(4096&m.flags){if(F===0)break e;for(Z=0;u=O[W+Z++],m.head&&u&&m.length<65536&&(m.head.comment+=String.fromCharCode(u)),u&&Z<F;);if(512&m.flags&&(m.check=o(m.check,O,Z,W)),F-=Z,W+=Z,u)break e}else m.head&&(m.head.comment=null);m.mode=9;case 9:if(512&m.flags){for(;L<16;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}if(I!==(65535&m.check)){C.msg="header crc mismatch",m.mode=30;break}L=I=0}m.head&&(m.head.hcrc=m.flags>>9&1,m.head.done=!0),C.adler=m.check=0,m.mode=12;break;case 10:for(;L<32;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}C.adler=m.check=v(I),L=I=0,m.mode=11;case 11:if(m.havedict===0)return C.next_out=te,C.avail_out=J,C.next_in=W,C.avail_in=F,m.hold=I,m.bits=L,2;C.adler=m.check=1,m.mode=12;case 12:if(B===5||B===6)break e;case 13:if(m.last){I>>>=7&L,L-=7&L,m.mode=27;break}for(;L<3;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}switch(m.last=1&I,L-=1,3&(I>>>=1)){case 0:m.mode=14;break;case 1:if(H(m),m.mode=20,B!==6)break;I>>>=2,L-=2;break e;case 2:m.mode=17;break;case 3:C.msg="invalid block type",m.mode=30}I>>>=2,L-=2;break;case 14:for(I>>>=7&L,L-=7&L;L<32;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}if((65535&I)!=(I>>>16^65535)){C.msg="invalid stored block lengths",m.mode=30;break}if(m.length=65535&I,L=I=0,m.mode=15,B===6)break e;case 15:m.mode=16;case 16:if(Z=m.length){if(F<Z&&(Z=F),J<Z&&(Z=J),Z===0)break e;r.arraySet(ee,O,W,Z,te),F-=Z,W+=Z,J-=Z,te+=Z,m.length-=Z;break}m.mode=12;break;case 17:for(;L<14;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}if(m.nlen=257+(31&I),I>>>=5,L-=5,m.ndist=1+(31&I),I>>>=5,L-=5,m.ncode=4+(15&I),I>>>=4,L-=4,286<m.nlen||30<m.ndist){C.msg="too many length or distance symbols",m.mode=30;break}m.have=0,m.mode=18;case 18:for(;m.have<m.ncode;){for(;L<3;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}m.lens[U[m.have++]]=7&I,I>>>=3,L-=3}for(;m.have<19;)m.lens[U[m.have++]]=0;if(m.lencode=m.lendyn,m.lenbits=7,P={bits:m.lenbits},N=l(0,m.lens,0,19,m.lencode,0,m.work,P),m.lenbits=P.bits,N){C.msg="invalid code lengths set",m.mode=30;break}m.have=0,m.mode=19;case 19:for(;m.have<m.nlen+m.ndist;){for(;re=(w=m.lencode[I&(1<<m.lenbits)-1])>>>16&255,fe=65535&w,!((ie=w>>>24)<=L);){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}if(fe<16)I>>>=ie,L-=ie,m.lens[m.have++]=fe;else{if(fe===16){for(x=ie+2;L<x;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}if(I>>>=ie,L-=ie,m.have===0){C.msg="invalid bit length repeat",m.mode=30;break}u=m.lens[m.have-1],Z=3+(3&I),I>>>=2,L-=2}else if(fe===17){for(x=ie+3;L<x;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}L-=ie,u=0,Z=3+(7&(I>>>=ie)),I>>>=3,L-=3}else{for(x=ie+7;L<x;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}L-=ie,u=0,Z=11+(127&(I>>>=ie)),I>>>=7,L-=7}if(m.have+Z>m.nlen+m.ndist){C.msg="invalid bit length repeat",m.mode=30;break}for(;Z--;)m.lens[m.have++]=u}}if(m.mode===30)break;if(m.lens[256]===0){C.msg="invalid code -- missing end-of-block",m.mode=30;break}if(m.lenbits=9,P={bits:m.lenbits},N=l(c,m.lens,0,m.nlen,m.lencode,0,m.work,P),m.lenbits=P.bits,N){C.msg="invalid literal/lengths set",m.mode=30;break}if(m.distbits=6,m.distcode=m.distdyn,P={bits:m.distbits},N=l(f,m.lens,m.nlen,m.ndist,m.distcode,0,m.work,P),m.distbits=P.bits,N){C.msg="invalid distances set",m.mode=30;break}if(m.mode=20,B===6)break e;case 20:m.mode=21;case 21:if(6<=F&&258<=J){C.next_out=te,C.avail_out=J,C.next_in=W,C.avail_in=F,m.hold=I,m.bits=L,a(C,Y),te=C.next_out,ee=C.output,J=C.avail_out,W=C.next_in,O=C.input,F=C.avail_in,I=m.hold,L=m.bits,m.mode===12&&(m.back=-1);break}for(m.back=0;re=(w=m.lencode[I&(1<<m.lenbits)-1])>>>16&255,fe=65535&w,!((ie=w>>>24)<=L);){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}if(re&&(240&re)==0){for(he=ie,be=re,ye=fe;re=(w=m.lencode[ye+((I&(1<<he+be)-1)>>he)])>>>16&255,fe=65535&w,!(he+(ie=w>>>24)<=L);){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}I>>>=he,L-=he,m.back+=he}if(I>>>=ie,L-=ie,m.back+=ie,m.length=fe,re===0){m.mode=26;break}if(32&re){m.back=-1,m.mode=12;break}if(64&re){C.msg="invalid literal/length code",m.mode=30;break}m.extra=15&re,m.mode=22;case 22:if(m.extra){for(x=m.extra;L<x;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}m.length+=I&(1<<m.extra)-1,I>>>=m.extra,L-=m.extra,m.back+=m.extra}m.was=m.length,m.mode=23;case 23:for(;re=(w=m.distcode[I&(1<<m.distbits)-1])>>>16&255,fe=65535&w,!((ie=w>>>24)<=L);){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}if((240&re)==0){for(he=ie,be=re,ye=fe;re=(w=m.distcode[ye+((I&(1<<he+be)-1)>>he)])>>>16&255,fe=65535&w,!(he+(ie=w>>>24)<=L);){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}I>>>=he,L-=he,m.back+=he}if(I>>>=ie,L-=ie,m.back+=ie,64&re){C.msg="invalid distance code",m.mode=30;break}m.offset=fe,m.extra=15&re,m.mode=24;case 24:if(m.extra){for(x=m.extra;L<x;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}m.offset+=I&(1<<m.extra)-1,I>>>=m.extra,L-=m.extra,m.back+=m.extra}if(m.offset>m.dmax){C.msg="invalid distance too far back",m.mode=30;break}m.mode=25;case 25:if(J===0)break e;if(Z=Y-J,m.offset>Z){if((Z=m.offset-Z)>m.whave&&m.sane){C.msg="invalid distance too far back",m.mode=30;break}le=Z>m.wnext?(Z-=m.wnext,m.wsize-Z):m.wnext-Z,Z>m.length&&(Z=m.length),pe=m.window}else pe=ee,le=te-m.offset,Z=m.length;for(J<Z&&(Z=J),J-=Z,m.length-=Z;ee[te++]=pe[le++],--Z;);m.length===0&&(m.mode=21);break;case 26:if(J===0)break e;ee[te++]=m.length,J--,m.mode=21;break;case 27:if(m.wrap){for(;L<32;){if(F===0)break e;F--,I|=O[W++]<<L,L+=8}if(Y-=J,C.total_out+=Y,m.total+=Y,Y&&(C.adler=m.check=m.flags?o(m.check,ee,Y,te-Y):s(m.check,ee,Y,te-Y)),Y=J,(m.flags?I:v(I))!==m.check){C.msg="incorrect data check",m.mode=30;break}L=I=0}m.mode=28;case 28:if(m.wrap&&m.flags){for(;L<32;){if(F===0)break e;F--,I+=O[W++]<<L,L+=8}if(I!==(4294967295&m.total)){C.msg="incorrect length check",m.mode=30;break}L=I=0}m.mode=29;case 29:N=1;break e;case 30:N=-3;break e;case 31:return-4;case 32:default:return d}return C.next_out=te,C.avail_out=J,C.next_in=W,C.avail_in=F,m.hold=I,m.bits=L,(m.wsize||Y!==C.avail_out&&m.mode<30&&(m.mode<27||B!==4))&&q(C,C.output,C.next_out,Y-C.avail_out)?(m.mode=31,-4):(Q-=C.avail_in,Y-=C.avail_out,C.total_in+=Q,C.total_out+=Y,m.total+=Y,m.wrap&&Y&&(C.adler=m.check=m.flags?o(m.check,ee,Y,C.next_out-Y):s(m.check,ee,Y,C.next_out-Y)),C.data_type=m.bits+(m.last?64:0)+(m.mode===12?128:0)+(m.mode===20||m.mode===15?256:0),(Q==0&&Y===0||B===4)&&N===p&&(N=-5),N)},n.inflateEnd=function(C){if(!C||!C.state)return d;var B=C.state;return B.window&&(B.window=null),C.state=null,p},n.inflateGetHeader=function(C,B){var m;return C&&C.state?(2&(m=C.state).wrap)==0?d:((m.head=B).done=!1,p):d},n.inflateSetDictionary=function(C,B){var m,O=B.length;return C&&C.state?(m=C.state).wrap!==0&&m.mode!==11?d:m.mode===11&&s(1,B,O,0)!==m.check?-3:q(C,B,O,O)?(m.mode=31,-4):(m.havedict=1,p):d},n.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./inffast":48,"./inftrees":50}],50:[function(t,i,n){var r=t("../utils/common"),s=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],o=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],a=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],l=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];i.exports=function(c,f,p,d,y,h,g,v){var b,M,S,E,R,D,j,z,H,q=v.bits,C=0,B=0,m=0,O=0,ee=0,W=0,te=0,F=0,J=0,I=0,L=null,Q=0,Y=new r.Buf16(16),Z=new r.Buf16(16),le=null,pe=0;for(C=0;C<=15;C++)Y[C]=0;for(B=0;B<d;B++)Y[f[p+B]]++;for(ee=q,O=15;1<=O&&Y[O]===0;O--);if(O<ee&&(ee=O),O===0)return y[h++]=20971520,y[h++]=20971520,v.bits=1,0;for(m=1;m<O&&Y[m]===0;m++);for(ee<m&&(ee=m),C=F=1;C<=15;C++)if(F<<=1,(F-=Y[C])<0)return-1;if(0<F&&(c===0||O!==1))return-1;for(Z[1]=0,C=1;C<15;C++)Z[C+1]=Z[C]+Y[C];for(B=0;B<d;B++)f[p+B]!==0&&(g[Z[f[p+B]]++]=B);if(D=c===0?(L=le=g,19):c===1?(L=s,Q-=257,le=o,pe-=257,256):(L=a,le=l,-1),C=m,R=h,te=B=I=0,S=-1,E=(J=1<<(W=ee))-1,c===1&&852<J||c===2&&592<J)return 1;for(;;){for(j=C-te,H=g[B]<D?(z=0,g[B]):g[B]>D?(z=le[pe+g[B]],L[Q+g[B]]):(z=96,0),b=1<<C-te,m=M=1<<W;y[R+(I>>te)+(M-=b)]=j<<24|z<<16|H|0,M!==0;);for(b=1<<C-1;I&b;)b>>=1;if(b!==0?(I&=b-1,I+=b):I=0,B++,--Y[C]==0){if(C===O)break;C=f[p+g[B]]}if(ee<C&&(I&E)!==S){for(te===0&&(te=ee),R+=m,F=1<<(W=C-te);W+te<O&&!((F-=Y[W+te])<=0);)W++,F<<=1;if(J+=1<<W,c===1&&852<J||c===2&&592<J)return 1;y[S=I&E]=ee<<24|W<<16|R-h|0}}return I!==0&&(y[R+I]=C-te<<24|64<<16|0),v.bits=ee,0}},{"../utils/common":41}],51:[function(t,i,n){i.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],52:[function(t,i,n){var r=t("../utils/common"),s=0,o=1;function a(w){for(var T=w.length;0<=--T;)w[T]=0}var l=0,c=29,f=256,p=f+1+c,d=30,y=19,h=2*p+1,g=15,v=16,b=7,M=256,S=16,E=17,R=18,D=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],j=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],z=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],H=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],q=new Array(2*(p+2));a(q);var C=new Array(2*d);a(C);var B=new Array(512);a(B);var m=new Array(256);a(m);var O=new Array(c);a(O);var ee,W,te,F=new Array(d);function J(w,T,U,V,A){this.static_tree=w,this.extra_bits=T,this.extra_base=U,this.elems=V,this.max_length=A,this.has_stree=w&&w.length}function I(w,T){this.dyn_tree=w,this.max_code=0,this.stat_desc=T}function L(w){return w<256?B[w]:B[256+(w>>>7)]}function Q(w,T){w.pending_buf[w.pending++]=255&T,w.pending_buf[w.pending++]=T>>>8&255}function Y(w,T,U){w.bi_valid>v-U?(w.bi_buf|=T<<w.bi_valid&65535,Q(w,w.bi_buf),w.bi_buf=T>>v-w.bi_valid,w.bi_valid+=U-v):(w.bi_buf|=T<<w.bi_valid&65535,w.bi_valid+=U)}function Z(w,T,U){Y(w,U[2*T],U[2*T+1])}function le(w,T){for(var U=0;U|=1&w,w>>>=1,U<<=1,0<--T;);return U>>>1}function pe(w,T,U){var V,A,G=new Array(g+1),X=0;for(V=1;V<=g;V++)G[V]=X=X+U[V-1]<<1;for(A=0;A<=T;A++){var $=w[2*A+1];$!==0&&(w[2*A]=le(G[$]++,$))}}function ie(w){var T;for(T=0;T<p;T++)w.dyn_ltree[2*T]=0;for(T=0;T<d;T++)w.dyn_dtree[2*T]=0;for(T=0;T<y;T++)w.bl_tree[2*T]=0;w.dyn_ltree[2*M]=1,w.opt_len=w.static_len=0,w.last_lit=w.matches=0}function re(w){8<w.bi_valid?Q(w,w.bi_buf):0<w.bi_valid&&(w.pending_buf[w.pending++]=w.bi_buf),w.bi_buf=0,w.bi_valid=0}function fe(w,T,U,V){var A=2*T,G=2*U;return w[A]<w[G]||w[A]===w[G]&&V[T]<=V[U]}function he(w,T,U){for(var V=w.heap[U],A=U<<1;A<=w.heap_len&&(A<w.heap_len&&fe(T,w.heap[A+1],w.heap[A],w.depth)&&A++,!fe(T,V,w.heap[A],w.depth));)w.heap[U]=w.heap[A],U=A,A<<=1;w.heap[U]=V}function be(w,T,U){var V,A,G,X,$=0;if(w.last_lit!==0)for(;V=w.pending_buf[w.d_buf+2*$]<<8|w.pending_buf[w.d_buf+2*$+1],A=w.pending_buf[w.l_buf+$],$++,V===0?Z(w,A,T):(Z(w,(G=m[A])+f+1,T),(X=D[G])!==0&&Y(w,A-=O[G],X),Z(w,G=L(--V),U),(X=j[G])!==0&&Y(w,V-=F[G],X)),$<w.last_lit;);Z(w,M,T)}function ye(w,T){var U,V,A,G=T.dyn_tree,X=T.stat_desc.static_tree,$=T.stat_desc.has_stree,K=T.stat_desc.elems,oe=-1;for(w.heap_len=0,w.heap_max=h,U=0;U<K;U++)G[2*U]!==0?(w.heap[++w.heap_len]=oe=U,w.depth[U]=0):G[2*U+1]=0;for(;w.heap_len<2;)G[2*(A=w.heap[++w.heap_len]=oe<2?++oe:0)]=1,w.depth[A]=0,w.opt_len--,$&&(w.static_len-=X[2*A+1]);for(T.max_code=oe,U=w.heap_len>>1;1<=U;U--)he(w,G,U);for(A=K;U=w.heap[1],w.heap[1]=w.heap[w.heap_len--],he(w,G,1),V=w.heap[1],w.heap[--w.heap_max]=U,w.heap[--w.heap_max]=V,G[2*A]=G[2*U]+G[2*V],w.depth[A]=(w.depth[U]>=w.depth[V]?w.depth[U]:w.depth[V])+1,G[2*U+1]=G[2*V+1]=A,w.heap[1]=A++,he(w,G,1),2<=w.heap_len;);w.heap[--w.heap_max]=w.heap[1],(function(ne,ge){var Ee,we,Se,ce,ze,je,ke=ge.dyn_tree,ht=ge.max_code,Li=ge.stat_desc.static_tree,Ii=ge.stat_desc.has_stree,Pi=ge.stat_desc.extra_bits,ct=ge.stat_desc.extra_base,Te=ge.stat_desc.max_length,Be=0;for(ce=0;ce<=g;ce++)ne.bl_count[ce]=0;for(ke[2*ne.heap[ne.heap_max]+1]=0,Ee=ne.heap_max+1;Ee<h;Ee++)Te<(ce=ke[2*ke[2*(we=ne.heap[Ee])+1]+1]+1)&&(ce=Te,Be++),ke[2*we+1]=ce,ht<we||(ne.bl_count[ce]++,ze=0,ct<=we&&(ze=Pi[we-ct]),je=ke[2*we],ne.opt_len+=je*(ce+ze),Ii&&(ne.static_len+=je*(Li[2*we+1]+ze)));if(Be!==0){do{for(ce=Te-1;ne.bl_count[ce]===0;)ce--;ne.bl_count[ce]--,ne.bl_count[ce+1]+=2,ne.bl_count[Te]--,Be-=2}while(0<Be);for(ce=Te;ce!==0;ce--)for(we=ne.bl_count[ce];we!==0;)ht<(Se=ne.heap[--Ee])||(ke[2*Se+1]!==ce&&(ne.opt_len+=(ce-ke[2*Se+1])*ke[2*Se],ke[2*Se+1]=ce),we--)}})(w,T),pe(G,oe,w.bl_count)}function u(w,T,U){var V,A,G=-1,X=T[1],$=0,K=7,oe=4;for(X===0&&(K=138,oe=3),T[2*(U+1)+1]=65535,V=0;V<=U;V++)A=X,X=T[2*(V+1)+1],++$<K&&A===X||($<oe?w.bl_tree[2*A]+=$:A!==0?(A!==G&&w.bl_tree[2*A]++,w.bl_tree[2*S]++):$<=10?w.bl_tree[2*E]++:w.bl_tree[2*R]++,G=A,oe=($=0)===X?(K=138,3):A===X?(K=6,3):(K=7,4))}function N(w,T,U){var V,A,G=-1,X=T[1],$=0,K=7,oe=4;for(X===0&&(K=138,oe=3),V=0;V<=U;V++)if(A=X,X=T[2*(V+1)+1],!(++$<K&&A===X)){if($<oe)for(;Z(w,A,w.bl_tree),--$!=0;);else A!==0?(A!==G&&(Z(w,A,w.bl_tree),$--),Z(w,S,w.bl_tree),Y(w,$-3,2)):$<=10?(Z(w,E,w.bl_tree),Y(w,$-3,3)):(Z(w,R,w.bl_tree),Y(w,$-11,7));G=A,oe=($=0)===X?(K=138,3):A===X?(K=6,3):(K=7,4)}}a(F);var P=!1;function x(w,T,U,V){Y(w,(l<<1)+(V?1:0),3),(function(A,G,X,$){re(A),Q(A,X),Q(A,~X),r.arraySet(A.pending_buf,A.window,G,X,A.pending),A.pending+=X})(w,T,U)}n._tr_init=function(w){P||((function(){var T,U,V,A,G,X=new Array(g+1);for(A=V=0;A<c-1;A++)for(O[A]=V,T=0;T<1<<D[A];T++)m[V++]=A;for(m[V-1]=A,A=G=0;A<16;A++)for(F[A]=G,T=0;T<1<<j[A];T++)B[G++]=A;for(G>>=7;A<d;A++)for(F[A]=G<<7,T=0;T<1<<j[A]-7;T++)B[256+G++]=A;for(U=0;U<=g;U++)X[U]=0;for(T=0;T<=143;)q[2*T+1]=8,T++,X[8]++;for(;T<=255;)q[2*T+1]=9,T++,X[9]++;for(;T<=279;)q[2*T+1]=7,T++,X[7]++;for(;T<=287;)q[2*T+1]=8,T++,X[8]++;for(pe(q,p+1,X),T=0;T<d;T++)C[2*T+1]=5,C[2*T]=le(T,5);ee=new J(q,D,f+1,p,g),W=new J(C,j,0,d,g),te=new J(new Array(0),z,0,y,b)})(),P=!0),w.l_desc=new I(w.dyn_ltree,ee),w.d_desc=new I(w.dyn_dtree,W),w.bl_desc=new I(w.bl_tree,te),w.bi_buf=0,w.bi_valid=0,ie(w)},n._tr_stored_block=x,n._tr_flush_block=function(w,T,U,V){var A,G,X=0;0<w.level?(w.strm.data_type===2&&(w.strm.data_type=(function($){var K,oe=4093624447;for(K=0;K<=31;K++,oe>>>=1)if(1&oe&&$.dyn_ltree[2*K]!==0)return s;if($.dyn_ltree[18]!==0||$.dyn_ltree[20]!==0||$.dyn_ltree[26]!==0)return o;for(K=32;K<f;K++)if($.dyn_ltree[2*K]!==0)return o;return s})(w)),ye(w,w.l_desc),ye(w,w.d_desc),X=(function($){var K;for(u($,$.dyn_ltree,$.l_desc.max_code),u($,$.dyn_dtree,$.d_desc.max_code),ye($,$.bl_desc),K=y-1;3<=K&&$.bl_tree[2*H[K]+1]===0;K--);return $.opt_len+=3*(K+1)+5+5+4,K})(w),A=w.opt_len+3+7>>>3,(G=w.static_len+3+7>>>3)<=A&&(A=G)):A=G=U+5,U+4<=A&&T!==-1?x(w,T,U,V):w.strategy===4||G===A?(Y(w,2+(V?1:0),3),be(w,q,C)):(Y(w,4+(V?1:0),3),(function($,K,oe,ne){var ge;for(Y($,K-257,5),Y($,oe-1,5),Y($,ne-4,4),ge=0;ge<ne;ge++)Y($,$.bl_tree[2*H[ge]+1],3);N($,$.dyn_ltree,K-1),N($,$.dyn_dtree,oe-1)})(w,w.l_desc.max_code+1,w.d_desc.max_code+1,X+1),be(w,w.dyn_ltree,w.dyn_dtree)),ie(w),V&&re(w)},n._tr_tally=function(w,T,U){return w.pending_buf[w.d_buf+2*w.last_lit]=T>>>8&255,w.pending_buf[w.d_buf+2*w.last_lit+1]=255&T,w.pending_buf[w.l_buf+w.last_lit]=255&U,w.last_lit++,T===0?w.dyn_ltree[2*U]++:(w.matches++,T--,w.dyn_ltree[2*(m[U]+f+1)]++,w.dyn_dtree[2*L(T)]++),w.last_lit===w.lit_bufsize-1},n._tr_align=function(w){Y(w,2,3),Z(w,M,q),(function(T){T.bi_valid===16?(Q(T,T.bi_buf),T.bi_buf=0,T.bi_valid=0):8<=T.bi_valid&&(T.pending_buf[T.pending++]=255&T.bi_buf,T.bi_buf>>=8,T.bi_valid-=8)})(w)}},{"../utils/common":41}],53:[function(t,i,n){i.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(t,i,n){(function(r){(function(s,o){if(!s.setImmediate){var a,l,c,f,p=1,d={},y=!1,h=s.document,g=Object.getPrototypeOf&&Object.getPrototypeOf(s);g=g&&g.setTimeout?g:s,a={}.toString.call(s.process)==="[object process]"?function(S){process.nextTick(function(){b(S)})}:(function(){if(s.postMessage&&!s.importScripts){var S=!0,E=s.onmessage;return s.onmessage=function(){S=!1},s.postMessage("","*"),s.onmessage=E,S}})()?(f="setImmediate$"+Math.random()+"$",s.addEventListener?s.addEventListener("message",M,!1):s.attachEvent("onmessage",M),function(S){s.postMessage(f+S,"*")}):s.MessageChannel?((c=new MessageChannel).port1.onmessage=function(S){b(S.data)},function(S){c.port2.postMessage(S)}):h&&"onreadystatechange"in h.createElement("script")?(l=h.documentElement,function(S){var E=h.createElement("script");E.onreadystatechange=function(){b(S),E.onreadystatechange=null,l.removeChild(E),E=null},l.appendChild(E)}):function(S){setTimeout(b,0,S)},g.setImmediate=function(S){typeof S!="function"&&(S=new Function(""+S));for(var E=new Array(arguments.length-1),R=0;R<E.length;R++)E[R]=arguments[R+1];var D={callback:S,args:E};return d[p]=D,a(p),p++},g.clearImmediate=v}function v(S){delete d[S]}function b(S){if(y)setTimeout(b,0,S);else{var E=d[S];if(E){y=!0;try{(function(R){var D=R.callback,j=R.args;switch(j.length){case 0:D();break;case 1:D(j[0]);break;case 2:D(j[0],j[1]);break;case 3:D(j[0],j[1],j[2]);break;default:D.apply(o,j)}})(E)}finally{v(S),y=!1}}}}function M(S){S.source===s&&typeof S.data=="string"&&S.data.indexOf(f)===0&&b(+S.data.slice(f.length))}})(typeof self>"u"?r===void 0?this:r:self)}).call(this,typeof Ae<"u"?Ae:typeof self<"u"?self:typeof window<"u"?window:{})},{}]},{},[10])(10)})})(Oe)),Oe.exports}var jt=Vt();const Wt=Fe(jt);class Ft{zipObjectUrls=[];async load(e){if(this.clearZipObjectUrls(),this.isManifestUrl(e)){const t=await this.fetchJson(e);return this.loadSplitData(this.getBaseUrl(e),t)}if(e.endsWith("/")){const t=this.normalizeDirectoryUrl(e),i=await this.fetchJson(this.joinUrl(t,"manifest.json"));return this.loadSplitData(t,i)}try{return await this.loadZipData(e)}catch(t){if(this.is2dZipUrl(e))throw t;try{const i=this.normalizeDirectoryUrl(e),n=await this.fetchJson(this.joinUrl(i,"manifest.json"));return this.loadSplitData(i,n)}catch{throw t}}}async fetchJson(e){const t=await fetch(e);if(!t.ok)throw new Error(`HTTP error! status: ${t.status}`);return t.json()}async loadSplitData(e,t,i=r=>this.fetchJson(r),n=(r,s)=>Promise.resolve(this.resolveImageUrl(r,s))){const r=await i(this.joinUrl(e,t.metadataUrl??"metadata.json")),[s,o,a,l]=await Promise.all([i(this.joinUrl(e,t.layersUrl??"layers.json")),this.loadBlocks(e,t.blocksUrl??"blocks/index.json",i),this.loadTiles(e,t.root,i),this.loadLayouts(e,r?.layoutsUrl,i)]);await this.resolveBlockAssets(o,e,n);const c=[];return a.forEach(f=>{f.inserts.forEach(p=>c.push(p))}),{version:t.version??"1.0",metadata:r,layers:s,blocks:o,entities:c,octree:t.root,tiles:a,layouts:l}}async loadLayouts(e,t,i){if(!t)return[];const n=await i(this.joinUrl(e,t)),r=Array.isArray(n?.layouts)?n.layouts:[];return(await Promise.all(r.map(async o=>{const a=o.paperUrl?await i(this.joinUrl(e,o.paperUrl)):void 0,l=o.viewportsUrl?await i(this.joinUrl(e,o.viewportsUrl)):void 0;return{id:String(o.id??a?.id??""),name:String(o.name??a?.name??o.id??""),tabOrder:Number.isFinite(Number(o.tabOrder))?Number(o.tabOrder):void 0,paperUrl:o.paperUrl,viewportsUrl:o.viewportsUrl,paper:a,paperTiles:await this.loadTiles(e,a?.root,i),viewports:Array.isArray(l?.viewports)?l.viewports:[]}}))).sort((o,a)=>(o.tabOrder??0)-(a.tabOrder??0))}async loadBlocks(e,t,i){const r=(await i(this.joinUrl(e,t))).parts??[],s=await Promise.all(r.map(a=>this.loadBlockPart(this.joinUrl(e,a),i))),o=[];return s.forEach(a=>{(Array.isArray(a?.blocks)?a.blocks:[]).forEach(c=>o.push(c))}),o}async loadBlockPart(e,t){try{return await t(e)}catch(i){const n=i instanceof Error?i.message:String(i);return console.warn(`[LoaderModule2d] Skip missing block json: ${e}`,n),{blocks:[]}}}async resolveBlockAssets(e,t,i){await Promise.all(e.map(async n=>{const r=Array.isArray(n?.entities)?n.entities:[];await Promise.all(r.map(async s=>{String(s?.type).toUpperCase()==="IMAGE"&&(s.imageUrl=await i(s,t))}))}))}resolveImageUrl(e,t){const i=e.localPath||e.sourcePath||e.path||e.url||"";if(/^(https?:)?\/\//i.test(i)||i.startsWith("/"))return i;const r=String(i).replace(/\\/g,"/").split("/").filter(Boolean).pop();return r?this.joinUrl(t,r):""}async loadTiles(e,t,i){const n=this.collectTileNodes(t);return await Promise.all(n.map(async s=>{const o=s.tileUrl??"",a=await i(this.joinUrl(e,o)),l=this.normalizeTileInserts(a.inserts??[]);return s.elements=l.map(c=>c.linkId??c.id).filter(c=>c!=null),{id:s.id??a.id??o,url:o,node:s,inserts:l}}))}normalizeTileInserts(e){return e.map(t=>({...t,linkId:t.linkId??t.id,type:"INSERT",color:t.color??0,visible:t.visible??!0}))}collectTileNodes(e){if(!e)return[];const t=[],i=[e];for(;i.length>0;){const n=i.pop();if(!n)continue;n.tileUrl&&t.push(n);const r=n.children??[];for(let s=r.length-1;s>=0;s-=1)i.push(r[s])}return t}async loadZipData(e){const t=await fetch(e);if(!t.ok)throw new Error(`HTTP error! status: ${t.status}`);const i=await Wt.loadAsync(await t.arrayBuffer()),n=this.findZipManifestPath(i),r=await this.fetchZipJson(i,n);if(!this.isSplitManifest(r))throw new Error("[LoaderModule2d] Expected split CAD manifest data in .2d package.");const s=this.getZipBasePath(n);return this.loadSplitData(s,r,o=>this.fetchZipJson(i,o),(o,a)=>this.resolveZipImageUrl(i,o,a))}findZipManifestPath(e){const t=Object.keys(e.files).filter(r=>!e.files[r].dir),n=t.find(r=>this.normalizeZipPath(r).toLowerCase()==="manifest.json")??t.find(r=>this.normalizeZipPath(r).toLowerCase().endsWith("/manifest.json"));if(!n)throw new Error("[LoaderModule2d] Missing manifest.json in .2d package.");return this.normalizeZipPath(n)}async fetchZipJson(e,t){if(/^(https?:)?\/\//i.test(t))return this.fetchJson(t);const i=this.getZipFile(e,t);if(!i)throw new Error(`[LoaderModule2d] Missing file in .2d package: ${t}`);return JSON.parse(await i.async("string"))}async resolveZipImageUrl(e,t,i){const n=t.localPath||t.sourcePath||t.path||t.url||"";if(/^(https?:)?\/\//i.test(n)||String(n).startsWith("blob:"))return n;const r=this.normalizeZipPath(String(n)),s=r.split("/").filter(Boolean).pop(),a=[this.joinUrl(i,r),s?this.joinUrl(i,s):"",r,s??""].filter(Boolean).map(c=>this.getZipFile(e,c)).find(c=>!!c);if(!a)return"";const l=URL.createObjectURL(new Blob([await a.async("arraybuffer")]));return this.zipObjectUrls.push(l),l}isSplitManifest(e){return!!e&&typeof e=="object"&&(e.splitType==="octree-2d"||!!e.blocksUrl)}is2dZipUrl(e){return/\.2d($|[?#])/i.test(e)}isManifestUrl(e){return/manifest\.json($|\?)/i.test(e)}getBaseUrl(e){const t=e.split("?")[0];return t.slice(0,t.lastIndexOf("/")+1)}getZipBasePath(e){const t=this.normalizeZipPath(e),i=t.lastIndexOf("/");return i>=0?t.slice(0,i+1):""}normalizeDirectoryUrl(e){return e.endsWith("/")?e:`${e}/`}joinUrl(e,t){return/^(https?:)?\/\//i.test(t)||t.startsWith("/")?t:`${e}${t}`.replace(/([^:]\/)\/+/g,"$1")}normalizeZipPath(e){return String(e).split("?")[0].split("#")[0].replace(/\\/g,"/").replace(/^\/+/,"")}getZipFile(e,t){const i=this.normalizeZipPath(t),n=e.file(i);if(n)return n;const r=i.toLowerCase(),s=Object.keys(e.files).find(o=>this.normalizeZipPath(o).toLowerCase()===r);return s?e.file(s):null}clearZipObjectUrls(){this.zipObjectUrls.forEach(e=>URL.revokeObjectURL(e)),this.zipObjectUrls=[]}}function qe(k,e,t){const i=t.length-k-1;if(e>=t[i])return i-1;if(e<=t[k])return k;let n=k,r=i,s=Math.floor((n+r)/2);for(;e<t[s]||e>=t[s+1];)e<t[s]?r=s:n=s,s=Math.floor((n+r)/2);return s}function Gt(k,e,t,i){const n=[],r=[],s=[];n[0]=1;for(let o=1;o<=t;++o){r[o]=e-i[k+1-o],s[o]=i[k+o]-e;let a=0;for(let l=0;l<o;++l){const c=s[l+1],f=r[o-l],p=n[l]/(c+f);n[l]=a+c*p,a=f*p}n[o]=a}return n}function Ht(k,e,t,i){const n=qe(k,i,e),r=Gt(n,i,k,e),s=new ue.Vector4(0,0,0,0);for(let o=0;o<=k;++o){const a=t[n-k+o],l=r[o],c=a.w*l;s.x+=a.x*c,s.y+=a.y*c,s.z+=a.z*c,s.w+=a.w*l}return s}function $t(k,e,t,i,n){const r=[];for(let f=0;f<=t;++f)r[f]=0;const s=[];for(let f=0;f<=i;++f)s[f]=r.slice(0);const o=[];for(let f=0;f<=t;++f)o[f]=r.slice(0);o[0][0]=1;const a=r.slice(0),l=r.slice(0);for(let f=1;f<=t;++f){a[f]=e-n[k+1-f],l[f]=n[k+f]-e;let p=0;for(let d=0;d<f;++d){const y=l[d+1],h=a[f-d];o[f][d]=y+h;const g=o[d][f-1]/o[f][d];o[d][f]=p+y*g,p=h*g}o[f][f]=p}for(let f=0;f<=t;++f)s[0][f]=o[f][t];for(let f=0;f<=t;++f){let p=0,d=1;const y=[];for(let h=0;h<=t;++h)y[h]=r.slice(0);y[0][0]=1;for(let h=1;h<=i;++h){let g=0;const v=f-h,b=t-h;f>=h&&(y[d][0]=y[p][0]/o[b+1][v],g=y[d][0]*o[v][b]);const M=v>=-1?1:-v,S=f-1<=b?h-1:t-f;for(let R=M;R<=S;++R)y[d][R]=(y[p][R]-y[p][R-1])/o[b+1][v+R],g+=y[d][R]*o[v+R][b];f<=b&&(y[d][h]=-y[p][h-1]/o[b+1][f],g+=y[d][h]*o[f][b]),s[h][f]=g;const E=p;p=d,d=E}}let c=t;for(let f=1;f<=i;++f){for(let p=0;p<=t;++p)s[f][p]*=c;c*=t-f}return s}function Zt(k,e,t,i,n){const r=n<k?n:k,s=[],o=qe(k,i,e),a=$t(o,i,k,r,e),l=[];for(let c=0;c<t.length;++c){const f=t[c].clone(),p=f.w;f.x*=p,f.y*=p,f.z*=p,l[c]=f}for(let c=0;c<=r;++c){const f=l[o-k].clone().multiplyScalar(a[c][0]);for(let p=1;p<=k;++p)f.add(l[o-k+p].clone().multiplyScalar(a[c][p]));s[c]=f}for(let c=r+1;c<=n+1;++c)s[c]=new ue.Vector4(0,0,0);return s}function Yt(k,e){let t=1;for(let n=2;n<=k;++n)t*=n;let i=1;for(let n=2;n<=e;++n)i*=n;for(let n=2;n<=k-e;++n)i*=n;return t/i}function Xt(k){const e=k.length,t=[],i=[];for(let r=0;r<e;++r){const s=k[r];t[r]=new ue.Vector3(s.x,s.y,s.z),i[r]=s.w}const n=[];for(let r=0;r<e;++r){const s=t[r].clone();for(let o=1;o<=r;++o)s.sub(n[r-o].clone().multiplyScalar(Yt(r,o)*i[o]));n[r]=s.divideScalar(i[0])}return n}function Kt(k,e,t,i,n){const r=Zt(k,e,t,i,n);return Xt(r)}class qt extends ue.Curve{constructor(e,t,i,n,r){super();const s=t?t.length-1:0,o=i?i.length:0;this.degree=e,this.knots=t,this.controlPoints=[],this.startKnot=n||0,this.endKnot=r||s;for(let a=0;a<o;++a){const l=i[a];this.controlPoints[a]=new ue.Vector4(l.x,l.y,l.z,l.w)}}getPoint(e,t=new ue.Vector3){const i=t,n=this.knots[this.startKnot]+e*(this.knots[this.endKnot]-this.knots[this.startKnot]),r=Ht(this.degree,this.knots,this.controlPoints,n);return r.w!==1&&r.divideScalar(r.w),i.set(r.x,r.y,r.z)}getTangent(e,t=new ue.Vector3){const i=t,n=this.knots[0]+e*(this.knots[this.knots.length-1]-this.knots[0]),r=Kt(this.degree,this.knots,this.controlPoints,n,1);return i.copy(r[1]).normalize(),i}toJSON(){const e=super.toJSON();return e.degree=this.degree,e.knots=[...this.knots],e.controlPoints=this.controlPoints.map(t=>t.toArray()),e.startKnot=this.startKnot,e.endKnot=this.endKnot,e}fromJSON(e){return super.fromJSON(e),this.degree=e.degree,this.knots=[...e.knots],this.controlPoints=e.controlPoints.map(t=>new ue.Vector4(t[0],t[1],t[2],t[3])),this.startKnot=e.startKnot,this.endKnot=e.endKnot,this}}function Ce(k,e=!1){const t=k[0].index!==null,i=new Set(Object.keys(k[0].attributes)),n=new Set(Object.keys(k[0].morphAttributes)),r={},s={},o=k[0].morphTargetsRelative,a=new ue.BufferGeometry;let l=0;for(let c=0;c<k.length;++c){const f=k[c];let p=0;if(t!==(f.index!==null))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+c+". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."),null;for(const d in f.attributes){if(!i.has(d))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+c+'. All geometries must have compatible attributes; make sure "'+d+'" attribute exists among all geometries, or in none of them.'),null;r[d]===void 0&&(r[d]=[]),r[d].push(f.attributes[d]),p++}if(p!==i.size)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+c+". Make sure all geometries have the same number of attributes."),null;if(o!==f.morphTargetsRelative)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+c+". .morphTargetsRelative must be consistent throughout all geometries."),null;for(const d in f.morphAttributes){if(!n.has(d))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+c+". .morphAttributes must be consistent throughout all geometries."),null;s[d]===void 0&&(s[d]=[]),s[d].push(f.morphAttributes[d])}if(e){let d;if(t)d=f.index.count;else if(f.attributes.position!==void 0)d=f.attributes.position.count;else return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+c+". The geometry must have either an index or a position attribute"),null;a.addGroup(l,d,c),l+=d}}if(t){let c=0;const f=[];for(let p=0;p<k.length;++p){const d=k[p].index;for(let y=0;y<d.count;++y)f.push(d.getX(y)+c);c+=k[p].attributes.position.count}a.setIndex(f)}for(const c in r){const f=Qe(r[c]);if(!f)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+c+" attribute."),null;a.setAttribute(c,f)}for(const c in s){const f=s[c][0].length;if(f===0)break;a.morphAttributes=a.morphAttributes||{},a.morphAttributes[c]=[];for(let p=0;p<f;++p){const d=[];for(let h=0;h<s[c].length;++h)d.push(s[c][h][p]);const y=Qe(d);if(!y)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+c+" morphAttribute."),null;a.morphAttributes[c].push(y)}}return a}function Qe(k){let e,t,i,n=-1,r=0;for(let l=0;l<k.length;++l){const c=k[l];if(e===void 0&&(e=c.array.constructor),e!==c.array.constructor)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."),null;if(t===void 0&&(t=c.itemSize),t!==c.itemSize)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."),null;if(i===void 0&&(i=c.normalized),i!==c.normalized)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."),null;if(n===-1&&(n=c.gpuType),n!==c.gpuType)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes."),null;r+=c.count*t}const s=new e(r),o=new ue.BufferAttribute(s,t,i);let a=0;for(let l=0;l<k.length;++l){const c=k[l];if(c.isInterleavedBufferAttribute){const f=a/t;for(let p=0,d=c.count;p<d;p++)for(let y=0;y<t;y++){const h=c.getComponent(p,y);o.setComponent(p+f,y,h)}}else s.set(c.array,a);a+=c.count*t}return n!==void 0&&(o.gpuType=n),o}const ae=1e-8,Je=.001,Qt=8421504;class Jt{constructor(e){this.engine=e}create(e,t){const i=this.getLoopSet(e);if(i.outers.length===0)return[];if(this.isGradientFill(e))return this.createGradientItems(e,t,i);if(this.isSolidFill(e))return this.createSolidItems(e,t,i);const r=this.createPatternLineItem(e,t,i);return r?[r]:(this.warnUnknownPatternFallback(e),this.createSolidItems(e,t,i,Qt))}isSolidFill(e){const t=String(e.pattern??e.patternName??"").toUpperCase();return e.solid===!0||t==="SOLID"}warnUnknownPatternFallback(e){const t=e.pattern??e.patternName??"UNKNOWN";this.engine.options?.debugHatch===!0&&console.warn(`[LoaderModule2d] HATCH pattern "${t}" cannot be rendered, use gray solid fallback.`)}isGradientFill(e){return e.gradient?.enabled===!0||String(e.patternType??"").toUpperCase()==="GRADIENTFILL"}getLoopSet(e){const t=(e.loops??[]).map(s=>this.normalizeLoop(s.points)).filter(s=>s.length>=3);if(t.length===0)return{outers:[],holes:[]};const i=(e.loops??[]).filter(s=>this.normalizeLoop(s.points).length>=3);if(!i.some(s=>s.type===!1))return this.classifyLoopsByContainment(t);const n=i.filter(s=>s.type!==!1).map(s=>this.normalizeLoop(s.points)),r=i.filter(s=>s.type===!1).map(s=>this.normalizeLoop(s.points));return n.length>0?{outers:n,holes:r}:{outers:[t[0]],holes:t.slice(1)}}classifyLoopsByContainment(e){const t=[...e].sort((r,s)=>Math.abs(this.signedArea(s))-Math.abs(this.signedArea(r))),i=[],n=[];return t.forEach((r,s)=>{const o=new _.Vector2(r[0][0],r[0][1]);t.slice(0,s).filter(l=>this.pointInPolygon(o,l)).length%2===0?i.push(r):n.push(r)}),{outers:i,holes:n}}signedArea(e){let t=0;for(let i=0;i<e.length;i+=1){const n=e[i],r=e[(i+1)%e.length];t+=n[0]*r[1]-r[0]*n[1]}return t/2}normalizeLoop(e){const t=[];(e??[]).forEach(r=>{if(!Array.isArray(r)||r.length<2)return;const s=[Number(r[0]),Number(r[1])];if(!Number.isFinite(s[0])||!Number.isFinite(s[1]))return;const o=t[t.length-1];(!o||Math.hypot(s[0]-o[0],s[1]-o[1])>ae)&&t.push(s)});const i=t[0],n=t[t.length-1];return i&&n&&Math.hypot(i[0]-n[0],i[1]-n[1])<=ae&&t.pop(),t}createSolidItems(e,t,i,n){const r=[];if(i.outers.forEach(a=>{const l=this.createShape(a);i.holes.filter(c=>this.pointInPolygon(new _.Vector2(c[0][0],c[0][1]),a)).forEach(c=>{l.holes.push(this.createPath(c))}),r.push(new _.ShapeGeometry(l))}),r.length===0)return[];const s=r.length===1?r[0]:Ce(r,!1);s.applyMatrix4(t);const o=_e(s);return[{kind:"hatch",layer:e.layer??"0",color:n??this.resolveEntityColor(e),linkId:e.linkId??e.id,geometry:s,min:o.min,max:o.max,info:e}]}createShape(e){const t=new _.Shape;t.moveTo(e[0][0],e[0][1]);for(let i=1;i<e.length;i+=1)t.lineTo(e[i][0],e[i][1]);return t.closePath(),t}createPath(e){const t=new _.Path;t.moveTo(e[0][0],e[0][1]);for(let i=1;i<e.length;i+=1)t.lineTo(e[i][0],e[i][1]);return t.closePath(),t}createGradientItems(e,t,i){const n=[];if(i.outers.forEach(o=>{const a=this.createShape(o);i.holes.filter(c=>this.pointInPolygon(new _.Vector2(c[0][0],c[0][1]),o)).forEach(c=>{a.holes.push(this.createPath(c))});const l=this.subdivideTriangles(new _.ShapeGeometry(a),this.engine.options?.hatchGradientSubdivisions??3);this.applyGradientVertexColors(l,o,e.gradient),n.push(l)}),n.length===0)return[];const r=n.length===1?n[0]:Ce(n,!1);r.applyMatrix4(t);const s=_e(r);return[{kind:"hatch",layer:e.layer??"0",color:this.resolveEntityColor(e),linkId:e.linkId??e.id,geometry:r,useVertexColors:!0,min:s.min,max:s.max,info:e}]}applyGradientVertexColors(e,t,i){const n=e.getAttribute("position"),r=[],s=this.resolveGradientStops(i),o=this.getBounds(t),a=new _.Vector2((o.minX+o.maxX)/2,(o.minY+o.maxY)/2),l=Math.max(o.maxX-o.minX,ae),c=Math.max(o.maxY-o.minY,ae),f=Math.max(Math.hypot(l/2,c/2),ae),p=Number(i?.angle??0),d=new _.Vector2(Math.cos(p),Math.sin(p)).normalize(),y=new _.Vector2(-d.y,d.x);for(let h=0;h<n.count;h+=1){const g=new _.Vector2(n.getX(h),n.getY(h)),v=this.resolveGradientFactor(g,a,d,y,l,c,f,i),b=this.sampleGradientColor(s,v);r.push(b.r,b.g,b.b)}e.setAttribute("color",new _.Float32BufferAttribute(r,3))}subdivideTriangles(e,t){let i=e.index?e.toNonIndexed():e.clone();const n=Math.max(0,Math.min(Math.floor(Number(t)||0),5));for(let r=0;r<n;r+=1){const s=i.getAttribute("position"),o=[];for(let a=0;a<s.count;a+=3){const l=new _.Vector3(s.getX(a),s.getY(a),s.getZ(a)),c=new _.Vector3(s.getX(a+1),s.getY(a+1),s.getZ(a+1)),f=new _.Vector3(s.getX(a+2),s.getY(a+2),s.getZ(a+2)),p=l.clone().lerp(c,.5),d=c.clone().lerp(f,.5),y=f.clone().lerp(l,.5);this.pushTriangle(o,l,p,y),this.pushTriangle(o,p,c,d),this.pushTriangle(o,y,d,f),this.pushTriangle(o,p,d,y)}i=new _.BufferGeometry().setAttribute("position",new _.Float32BufferAttribute(o,3))}return i}pushTriangle(e,t,i,n){e.push(t.x,t.y,t.z,i.x,i.y,i.z,n.x,n.y,n.z)}resolveGradientFactor(e,t,i,n,r,s,o,a){const l=e.clone().sub(t),c=String(a?.name??"LINEAR").toUpperCase(),f=Number(a?.shift??0),p=Math.max(Math.abs(i.x)*r+Math.abs(i.y)*s,ae),d=Math.max(Math.abs(n.x)*r+Math.abs(n.y)*s,ae);let y=.5+l.dot(i)/p+f;return c.includes("CYLINDER")?y=Math.abs(l.dot(n))/(d/2):c.includes("SPHERICAL")?(y=l.length()/o,c.includes("HEMI")&&(y=Math.sqrt(y))):c.includes("CURVED")&&(y=Math.pow(Math.abs(l.dot(i))/(p/2),.65)),c.startsWith("INV")&&(y=1-y),_.MathUtils.clamp(y,0,1)}resolveGradientStops(e){const t=(e?.colors??[]).map(i=>({value:_.MathUtils.clamp(Number(i.value??0),0,1),color:this.resolveGradientStopColor(i)})).sort((i,n)=>i.value-n.value);if(t.length>=2)return t;if(t.length===1){const i=_.MathUtils.clamp(Number(e?.colorTint??0),0,1);return[{value:0,color:t[0].color.clone().lerp(new _.Color(16777215),i)},{value:1,color:t[0].color}]}return[{value:0,color:new _.Color(16777215)},{value:1,color:new _.Color(0)}]}resolveGradientStopColor(e){if(Array.isArray(e.rgb)&&e.rgb.length>=3){const[t,i,n]=e.rgb.map(r=>_.MathUtils.clamp(Number(r??0),0,255)/255);return new _.Color(t,i,n)}return new _.Color(e.color??16777215)}resolveEntityColor(e){if(Array.isArray(e.rgb)&&e.rgb.length>=3){const[t,i,n]=e.rgb.map(r=>Math.round(_.MathUtils.clamp(Number(r??0),0,255)));return t<<16|i<<8|n}return e.color??16777215}sampleGradientColor(e,t){if(t<=e[0].value)return e[0].color.clone();for(let i=0;i<e.length-1;i+=1){const n=e[i],r=e[i+1];if(t<=r.value+ae){const s=Math.max(r.value-n.value,ae);return n.color.clone().lerp(r.color,(t-n.value)/s)}}return e[e.length-1].color.clone()}createPatternLineItem(e,t,i){const n=[],r=this.engine.options?.hatchPatternMaxSegments??2e4;let s=0;for(const a of i.outers){const l=this.getBounds(a),c=Math.hypot(l.maxX-l.minX,l.maxY-l.minY);if(!(c<ae))for(const f of e.patternLines??[]){if(s>=r)break;const p=this.createPatternFamilySegments(e,f,a,i.holes,l,c,r-s);p.forEach(([d,y])=>{n.push(new _.Vector3(d.x,d.y,Je),new _.Vector3(y.x,y.y,Je))}),s+=p.length}}if(n.length===0)return null;n.forEach(a=>a.applyMatrix4(t));const o=Ye(n);return{kind:"line",layer:e.layer??"0",color:this.resolveEntityColor(e),linkId:e.linkId??e.id,points:n,min:o.min,max:o.max,info:e}}createPatternFamilySegments(e,t,i,n,r,s,o){const a=this.resolvePatternLineTransform(e,t),l=a.dir,c=new _.Vector2(-l.y,l.x),f=a.base,p=a.offset;let d=p.dot(c);if(Math.abs(d)<ae&&(d=Number(t.lineOffset??0)),Math.abs(d)<ae)return[];const y=[new _.Vector2(r.minX,r.minY),new _.Vector2(r.maxX,r.minY),new _.Vector2(r.maxX,r.maxY),new _.Vector2(r.minX,r.maxY)],h=f.dot(c),g=y.map(D=>D.dot(c)-h),v=Math.min(...g)-s,b=Math.max(...g)+s,M=Math.floor(Math.min(v/d,b/d))-2,S=Math.ceil(Math.max(v/d,b/d))+2,E=[],R=new _.Vector2((r.minX+r.maxX)/2,(r.minY+r.maxY)/2);for(let D=M;D<=S&&E.length<o;D+=1){const j=f.clone().add(p.clone().multiplyScalar(D)),z=j.clone().add(l.clone().multiplyScalar(R.clone().sub(j).dot(l))),H=z.clone().add(l.clone().multiplyScalar(-s*2)),q=z.clone().add(l.clone().multiplyScalar(s*2));this.clipLineByPolygon(H,q,i).forEach(([B,m])=>{this.subtractHoles(B,m,n).forEach(([O,ee])=>{this.appendDashedSegment(E,O,ee,t.dashLengths,j,l)})})}return E.slice(0,o)}resolvePatternLineTransform(e,t){const i=Number(t.angle??e.patternAngle??0);return{dir:new _.Vector2(Math.cos(i),Math.sin(i)).normalize(),base:this.toVector2(t.basePoint),offset:this.toVector2(t.offset)}}toVector2(e){return new _.Vector2(e?.[0]??0,e?.[1]??0)}getBounds(e){return{minX:Math.min(...e.map(t=>t[0])),minY:Math.min(...e.map(t=>t[1])),maxX:Math.max(...e.map(t=>t[0])),maxY:Math.max(...e.map(t=>t[1]))}}clipLineByPolygon(e,t,i){const n=[0,1];for(let o=0;o<i.length;o+=1){const a=new _.Vector2(i[o][0],i[o][1]),l=new _.Vector2(i[(o+1)%i.length][0],i[(o+1)%i.length][1]),c=this.segmentIntersectionT(e,t,a,l);c!==null&&c>ae&&c<1-ae&&n.push(c)}const r=this.dedupeSorted(n.sort((o,a)=>o-a),1e-7),s=[];for(let o=0;o<r.length-1;o+=1){const a=r[o],l=r[o+1];if(l-a<1e-7)continue;const c=this.interpolate2(e,t,(a+l)/2);this.pointInPolygon(c,i)&&s.push([this.interpolate2(e,t,a),this.interpolate2(e,t,l)])}return s}subtractHoles(e,t,i){let n=[[e,t]];return i.forEach(r=>{const s=[];n.forEach(([o,a])=>{const l=this.clipLineByPolygon(o,a,r);s.push(...this.subtractSegments(o,a,l))}),n=s}),n}appendDashedSegment(e,t,i,n,r,s){const o=t.distanceTo(i);if(o<ae)return;if(!n?.length){e.push([t,i]);return}const a=this.normalizeDashPattern(n),l=a.reduce((M,S)=>M+S.length,0);if(l<ae){e.push([t,i]);return}const c=s?.clone().normalize()??i.clone().sub(t).normalize(),f=r??t,d=i.clone().sub(t).normalize().dot(c)>=0?1:-1,y=t.clone().sub(f).dot(c)*d,h=this.positiveModulo(y,l);let g=0,v=this.findDashIndex(a,h),b=h-a[v].start;for(;g<o-ae;){const M=a[v],S=Math.max(M.length-b,ae),E=Math.min(o,g+S);M.draw&&e.push([this.pointAtLength(t,i,g),this.pointAtLength(t,i,E)]),g=E,v=(v+1)%a.length,b=0}}normalizeDashPattern(e){let t=0;return e.map(i=>{const n=Number(i??0),r={length:Math.max(Math.abs(n),5e-4),draw:n>=0,start:t};return t+=r.length,r}).filter(i=>i.length>ae)}findDashIndex(e,t){for(let i=e.length-1;i>=0;i-=1)if(t>=e[i].start-ae)return i;return 0}positiveModulo(e,t){return(e%t+t)%t}subtractSegments(e,t,i){const n=i.map(([o,a])=>[this.projectT(e,t,o),this.projectT(e,t,a)]).map(([o,a])=>[Math.max(0,Math.min(o,a)),Math.min(1,Math.max(o,a))]).sort((o,a)=>o[0]-a[0]),r=[];let s=0;return n.forEach(([o,a])=>{o>s+ae&&r.push([this.interpolate2(e,t,s),this.interpolate2(e,t,o)]),s=Math.max(s,a)}),s<1-ae&&r.push([this.interpolate2(e,t,s),this.interpolate2(e,t,1)]),r}segmentIntersectionT(e,t,i,n){const r=t.clone().sub(e),s=n.clone().sub(i),o=this.cross2(r,s);if(Math.abs(o)<1e-10)return null;const a=i.clone().sub(e),l=this.cross2(a,s)/o,c=this.cross2(a,r)/o;return l>=-1e-8&&l<=1+1e-8&&c>=-1e-8&&c<=1+1e-8?l:null}pointInPolygon(e,t){let i=!1;for(let n=0,r=t.length-1;n<t.length;r=n,n+=1){const s=t[n][0],o=t[n][1],a=t[r][0],l=t[r][1];o>e.y!=l>e.y&&e.x<(a-s)*(e.y-o)/(l-o+1e-20)+s&&(i=!i)}return i}cross2(e,t){return e.x*t.y-e.y*t.x}interpolate2(e,t,i){return e.clone().lerp(t,i)}projectT(e,t,i){const n=t.clone().sub(e),r=n.lengthSq();return r<1e-12?0:i.clone().sub(e).dot(n)/r}pointAtLength(e,t,i){const n=e.distanceTo(t);return this.interpolate2(e,t,n<1e-12?0:i/n)}dedupeSorted(e,t){const i=[];return e.forEach(n=>{(!i.length||Math.abs(n-i[i.length-1])>t)&&i.push(n)}),i}}class et{constructor(e,t){this.engine=e,this.textFactory=t,this.hatchRenderer=new Jt(e)}hatchRenderer;create(e,t){switch(e.type){case"LINE_GROUP":case"LINE":case"CIRCLE":case"POLYLINE":case"SPLINE":return this.createLineItem(e,t);case"MTEXT":case"TEXT":return this.textFactory.create(e,t);case"HATCH":return this.createHatch(e,t);case"IMAGE":return this.createImage(e,t);default:return[]}}createLineItem(e,t){const i=this.getEntityPoints(e).map(n=>n.clone().applyMatrix4(t));return i.length===0?[]:[{kind:"line",layer:e.layer,color:e.color,lineType:e.lineType,lineTypeScale:e.lineTypeScale,lineTypePattern:Array.isArray(e.lineTypePattern)?e.lineTypePattern:void 0,linkId:e.linkId??e.id,points:i,info:e}]}getEntityPoints(e){switch(e.type){case"LINE_GROUP":return this.getLineGroupPoints(e);case"LINE":return[Me(e.startPoint),Me(e.endPoint)];case"CIRCLE":return this.getCirclePoints(e);case"POLYLINE":return this.getPolylinePoints(e);case"SPLINE":return this.getSplinePoints(e);default:return[]}}getLineGroupPoints(e){const t=[];return(e.segments??[]).forEach(i=>{t.push(new _.Vector3(i[0]??0,i[1]??0,i[2]??0)),t.push(new _.Vector3(i[3]??0,i[4]??0,i[5]??0))}),t}getCirclePoints(e){const t=new _.EllipseCurve(e.center?.[0]??0,e.center?.[1]??0,e.radius??0,e.radius??0,e.startAngle??0,(e.endAngle??Math.PI*2)-1e-5,!1,0);return this.pointsToSegments(t.getPoints(this.engine.options?.circleSegments??48).map(i=>new _.Vector3(i.x,i.y,e.center?.[2]??0)))}getPolylinePoints(e){const t=[],i=e.points??[];for(let n=0;n<i.length-1;n+=1)this.getPolylineSegmentPoints(i[n],i[n+1]).forEach(r=>{t.push(r)});return e.closed&&i.length>1&&this.getPolylineSegmentPoints(i[i.length-1],i[0]).forEach(n=>{t.push(n)}),t}getPolylineSegmentPoints(e,t){const i=Me(e),n=Me(t),r=Number(e?.bulge??0);if(!Number.isFinite(r)||Math.abs(r)<1e-10)return[i,n];const s=n.clone().sub(i),o=s.length();if(o<1e-12)return[i,n];const a=4*Math.atan(r),l=o*(1+r*r)/(4*Math.abs(r)),c=i.clone().add(n).multiplyScalar(.5),f=new _.Vector3(-s.y/o,s.x/o,0),p=c.clone().add(f.multiplyScalar(o*(1-r*r)/(4*r))),d=Math.atan2(i.y-p.y,i.x-p.x),y=Math.max(4,Math.ceil(Math.abs(a)/(this.engine.options?.polylineArcAngleStep??Math.PI/18))),h=[];for(let g=0;g<=y;g+=1){const v=g/y,b=d+a*v;h.push(new _.Vector3(p.x+Math.cos(b)*l,p.y+Math.sin(b)*l,i.z+(n.z-i.z)*v))}return this.pointsToSegments(h)}getSplinePoints(e){const t=(e.points??[]).map(n=>Me(n));if(t.length<2)return[];const i=t.length===2?t:this.sampleSplineCurve(t,e);return this.pointsToSegments(i)}sampleSplineCurve(e,t){const i=Math.min(Math.max(Number(t.degree??this.engine.options?.splineDegree??6),1),e.length-1),n=Array.isArray(t.knots)&&t.knots.length===e.length+i+1?t.knots:this.createClampedUniformKnots(e.length,i),r=e.map((a,l)=>{const c=Array.isArray(t.weights)?Number(t.weights[l]??1):1;return new _.Vector4(a.x,a.y,a.z,Number.isFinite(c)?c:1)});let s=(e.length-1)*2;const o=new qt(i,n,r).getPoints(s);return t.closed===!0&&o.length>1&&o.push(o[0].clone()),o}createClampedUniformKnots(e,t){const i=[];for(let n=0;n<e+t+1;n+=1)n<=t?i.push(0):n>=e?i.push(1):i.push((n-t)/(e-t));return i}pointsToSegments(e){const t=[];for(let i=0;i<e.length-1;i+=1)t.push(e[i].clone(),e[i+1].clone());return t}createHatch(e,t){return this.hatchRenderer.create(e,t)}createImage(e,t){const i=e.imageUrl||e.url;if(!i)return[];const n=Me(e.position),r=Me(e.uVector),s=Me(e.vVector),o=Number(e.pixelWidth??e.width??1),a=Number(e.pixelHeight??e.height??1);if(!Number.isFinite(o)||!Number.isFinite(a)||o===0||a===0)return[];const l=r.multiplyScalar(o),c=s.multiplyScalar(a),f=n.clone(),p=n.clone().add(l),d=n.clone().add(l).add(c),y=n.clone().add(c);[f,p,d,y].forEach(b=>b.applyMatrix4(t));const h=new _.BufferGeometry;h.setAttribute("position",new _.Float32BufferAttribute([f.x,f.y,f.z,p.x,p.y,p.z,d.x,d.y,d.z,f.x,f.y,f.z,d.x,d.y,d.z,y.x,y.y,y.z],3)),h.setAttribute("uv",new _.Float32BufferAttribute([0,0,1,0,1,1,0,0,1,1,0,1],2)),h.computeVertexNormals();const g=_e(h),v=Number(e.fade??0);return[{kind:"image",layer:e.layer??"0",color:e.color??16777215,linkId:e.linkId??e.id,geometry:h,imageUrl:i,opacity:Number.isFinite(v)?_.MathUtils.clamp(1-v/100,0,1):1,min:g.min,max:g.max,info:e}]}}class ei{constructor(e,t,i=e.modelGroup,n={}){this.model=t,this.targetGroup=i,this.options=n}modelMap=new Map;hatchMap=new Map;textMap=new Map;imageMap=new Map;textureLoader=new _.TextureLoader;addRenderItems(e){e.forEach(t=>this.addRenderItem(t))}buildSceneObjects(){this.buildImageObjects(),this.buildHatchObjects(),this.buildLineObjects(),this.buildTextObjects()}addRenderItem(e){const t=`${e.layer}||${e.color}`;if(e.kind==="line"){let s=this.modelMap.get(t);s||(s=new Map,this.modelMap.set(t,s));const o=this.resolveLinePoints(e),a=s.get(e.linkId);a?(o.forEach(l=>a.points.push(l)),a.layerDeps=this.mergeLayerDeps(a.layerDeps,e.layerDeps??[e.layer])):s.set(e.linkId,{points:[...o],layerDeps:this.mergeLayerDeps([],e.layerDeps??[e.layer])});return}const i=this.getItemMap(e),n=e.kind==="image"?`${t}||${e.imageUrl??""}`:t,r=i.get(n);r?r.push(e):i.set(n,[e])}getItemMap(e){return e.kind==="text"?this.textMap:e.kind==="image"?this.imageMap:this.hatchMap}resolveLinePoints(e){const t=e.points??[],i=this.resolveLineTypePattern(e);if(!i)return t;const n=[];for(let r=0;r<t.length-1;r+=2)this.applyDashPattern(t[r],t[r+1],i).forEach(s=>n.push(s));return n}resolveLineTypePattern(e){const t=this.model.layers.find(a=>a.name===e.layer),i=String(e.lineType??"").toLowerCase(),n=i==="bylayer"||i===""?String(t?.lineType??"").toLowerCase():i;if(!n||n==="continuous"||n==="byblock")return null;const r=Array.isArray(e.lineTypePattern)&&e.lineTypePattern.length>0?e.lineTypePattern:Array.isArray(t?.lineTypePattern)?t.lineTypePattern:this.getFallbackLineTypePattern(n);if(!r||r.length===0)return null;const s=this.resolveLineTypeScale(e,t),o=r.map(a=>Number(a)).filter(a=>Number.isFinite(a)).map(a=>a*s);return o.some(a=>Math.abs(a)>1e-12)?o:null}getFallbackLineTypePattern(e){return e.includes("dash")?[.25,-.1]:e.includes("dot")?[0,-.1]:null}resolveLineTypeScale(e,t){const i=Number(e.lineTypeScale??t?.lineTypeScale??1);return!Number.isFinite(i)||Math.abs(i)<1e-12?1:Math.abs(i)}applyDashPattern(e,t,i){const n=t.clone().sub(e),r=n.length();if(r<1e-12)return[];const s=n.multiplyScalar(1/r),o=i.reduce((p,d)=>p+Math.abs(d),0),a=Math.max(o*.05,r*.002,1e-6),l=[];let c=0,f=0;for(;c<r-1e-12;){const p=i[f%i.length],d=p>=0,y=Math.max(Math.abs(p),a),h=Math.min(c+y,r);if(d&&h>c&&l.push(e.clone().add(s.clone().multiplyScalar(c)),e.clone().add(s.clone().multiplyScalar(h))),c=h,f+=1,f>1e5)break}return l}buildLineObjects(){this.modelMap.forEach((e,t)=>{const[i]=t.split("||"),n=[];if(e.forEach(f=>{f.points.forEach(p=>n.push(p))}),n.length===0)return;const r=new _.BufferGeometry().setFromPoints(n),s=new _.LineBasicMaterial({color:this.resolveColor(t)}),o=new _.LineSegments(r,s);o.name=t;const a=r.getAttribute("position");o.clonePoints=a.array.slice(),o.materialClone=s.clone(),this.targetGroup.add(o);const l=this.targetGroup.children.length-1;let c=0;e.forEach((f,p)=>{const d=Ye(f.points);this.pushNodeMap(p,{indexes:[l,c,c+f.points.length*3],object:o,group:this.targetGroup,kind:"line",layer:i,layerDeps:f.layerDeps,min:d.min,max:d.max}),c+=f.points.length*3})})}buildTextObjects(){this.textMap.forEach((e,t)=>{const i=e.filter(o=>!!o.geometry),n=this.normalizeMeshGeometries(i,!1,!1);if(n.length===0)return;const r=this.mergeMeshGeometries(n),s=new _.MeshBasicMaterial({color:this.resolveColor(t),side:_.DoubleSide});t.includes("_hitbox")&&(s.visible=!1),this.addMeshObject(i,t,r,n,s)})}buildHatchObjects(){this.hatchMap.forEach((e,t)=>{const i=e.filter(a=>!!a.geometry),n=i.some(a=>a.useVertexColors===!0),r=this.normalizeMeshGeometries(i,!1,n);if(r.length===0)return;const s=this.mergeMeshGeometries(r),o=new _.MeshBasicMaterial({color:n?16777215:this.resolveColor(t),side:_.DoubleSide,transparent:!0,opacity:n?1:.5,vertexColors:n});this.addMeshObject(i,t,s,r,o)})}buildImageObjects(){this.imageMap.forEach((e,t)=>{const i=e.filter(c=>!!c.geometry),n=this.normalizeMeshGeometries(i,!0,!1);if(n.length===0)return;const r=i[0]?.imageUrl;if(!r)return;const s=this.mergeMeshGeometries(n),o=this.textureLoader.load(r);o.colorSpace=_.SRGBColorSpace,o.needsUpdate=!0;const a=i.reduce((c,f)=>Math.min(c,f.opacity??1),1),l=new _.MeshBasicMaterial({map:o,side:_.DoubleSide,transparent:!0,opacity:a,depthWrite:!1});this.addMeshObject(i,t,s,n,l)})}mergeMeshGeometries(e){const t=e.length===1?e[0]:Ce(e,!0);if(t.groups.length===0){const i=t.getAttribute("position");t.addGroup(0,i?.count??0,0)}return t.groups.forEach(i=>{i.materialIndex=0}),t}normalizeMeshGeometries(e,t,i){return e.map(n=>{const r=n.geometry,s=r.index?r.toNonIndexed():r.clone(),o=s.getAttribute("position"),a=s.getAttribute("uv"),l=s.getAttribute("color"),c=new _.BufferGeometry;return c.setAttribute("position",o.clone()),t&&c.setAttribute("uv",a?a.clone():this.createEmptyUv(o.count)),i&&c.setAttribute("color",l?l.clone():this.createSolidColorAttribute(o.count,n.color)),c})}createEmptyUv(e){return new _.Float32BufferAttribute(new Array(e*2).fill(0),2)}createSolidColorAttribute(e,t){const i=new _.Color(t??16777215),n=[];for(let r=0;r<e;r+=1)n.push(i.r,i.g,i.b);return new _.Float32BufferAttribute(n,3)}addMeshObject(e,t,i,n,r){const s=new _.Mesh(i,r);s.name=t,s.materialClone=r.clone(),s.isSplit=!1,s.geometrys=void 0,n.forEach(a=>{a!==i&&a.dispose()}),this.targetGroup.add(s);const o=this.targetGroup.children.length-1;e.forEach((a,l)=>{const c=a.linkId??a.info?.id;this.pushNodeMap(c,{indexes:[o,l],object:s,group:this.targetGroup,kind:a.kind,layer:a.layer,layerDeps:a.layerDeps??[a.layer],info:a.info,min:a.min??new _.Vector3,max:a.max??new _.Vector3}),this.pushTextSearchItem(a,t)})}pushTextSearchItem(e,t){if(this.options.interactive===!1||e.kind!=="text"||t.includes("_hitbox"))return;const i=e.info?.text,n=String(i??"").replace(/\r\n/g,`
114
114
  `).replace(/\r/g,`
115
- `).trim(),r=e.linkId??e.info?.id;!n||r==null||this.model.textItems.push({id:String(r),text:n,layer:e.layer,layerDeps:e.layerDeps??[e.layer],min:e.min,max:e.max,anchor:e.textAnchor,info:e.info})}resolveColor(e){const[t,i]=e.split("||");let n=Number.parseInt(i);return(n===0||Number.isNaN(n))&&(n=this.model.layers.find(s=>s.name===t)?.color??16777215),n}pushNodeMap(e,t){if(this.options.interactive===!1||e==null)return;const i=String(e),n=this.model.nodeMap.get(i);n?n.push(t):this.model.nodeMap.set(i,[t])}mergeLayerDeps(e,t){return Array.from(new Set([...e,...t].filter(i=>!!i)))}}class Je{constructor(e,t){this.engine=e,this.font=t}create(e,t=new _.Matrix4){if(!e.text)return[];const i=this.normalizeText(e.text);if(!i.trim())return[];const n=this.engine.options?.textCurveSegments??1,r=this.createTextGeometry(i,e.height??100,n);if(!r)return[];const s=[...e.position??[0,0,0]];s[1]=s[1]-(e.height??0);const o=this.resolveWidthScale(e),a=new _.Vector3(s[0]??0,s[1]??0,s[2]??0).applyMatrix4(t),l=1.4*e.scale;r.applyMatrix4(t.clone().multiply(Re(s,[o*1.4,1*l,1*l],e.rotation??0)));const c=_e(r),f=[{kind:"text",layer:e.layer,color:e.color,linkId:e.linkId??e.id,geometry:r,min:c.min,max:c.max,textAnchor:a,info:e}],p=this.createHitbox(r);if(p){const d=_e(p);f.push({kind:"text",layer:e.layer,color:`${e.color}_hitbox`,linkId:e.linkId??e.id,geometry:p,min:d.min,max:d.max,textAnchor:a,info:e})}return f}resolveWidthScale(e){const t=Number(e.widthScale??e.widthFactor??1);return!Number.isFinite(t)||Math.abs(t)<1e-12?1:t}normalizeText(e){return String(e??"").replace(/\r\n/g,`
115
+ `).trim(),r=e.linkId??e.info?.id;!n||r==null||this.model.textItems.push({id:String(r),text:n,layer:e.layer,layerDeps:e.layerDeps??[e.layer],min:e.min,max:e.max,anchor:e.textAnchor,info:e.info})}resolveColor(e){const[t,i]=e.split("||");let n=Number.parseInt(i);return(n===0||Number.isNaN(n))&&(n=this.model.layers.find(s=>s.name===t)?.color??16777215),n}pushNodeMap(e,t){if(this.options.interactive===!1||e==null)return;const i=String(e),n=this.model.nodeMap.get(i);n?n.push(t):this.model.nodeMap.set(i,[t])}mergeLayerDeps(e,t){return Array.from(new Set([...e,...t].filter(i=>!!i)))}}class tt{constructor(e,t){this.engine=e,this.font=t}create(e,t=new _.Matrix4){if(!e.text)return[];const i=this.normalizeText(e.text);if(!i.trim())return[];const n=this.engine.options?.textCurveSegments??1,r=this.createTextGeometry(i,e.height??100,n);if(!r)return[];const s=[...e.position??[0,0,0]];s[1]=s[1]-(e.height??0);const o=this.resolveWidthScale(e),a=new _.Vector3(s[0]??0,s[1]??0,s[2]??0).applyMatrix4(t),l=1.4*e.scale;r.applyMatrix4(t.clone().multiply(Ne(s,[o*1.4,1*l,1*l],e.rotation??0)));const c=_e(r),f=[{kind:"text",layer:e.layer,color:e.color,linkId:e.linkId??e.id,geometry:r,min:c.min,max:c.max,textAnchor:a,info:e}],p=this.createHitbox(r);if(p){const d=_e(p);f.push({kind:"text",layer:e.layer,color:`${e.color}_hitbox`,linkId:e.linkId??e.id,geometry:p,min:d.min,max:d.max,textAnchor:a,info:e})}return f}resolveWidthScale(e){const t=Number(e.widthScale??e.widthFactor??1);return!Number.isFinite(t)||Math.abs(t)<1e-12?1:t}normalizeText(e){return String(e??"").replace(/\r\n/g,`
116
116
  `).replace(/\r/g,`
117
117
  `)}collectTextChars(e){return this.normalizeText(e).replace(/\n/g," ")}createTextGeometry(e,t,i){const n=e.split(`
118
- `),r=t*(this.engine.options?.textLineHeight??1.35),s=[];return n.forEach((o,a)=>{if(!o)return;const l=this.getRenderableText(o);if(!l.trim())return;const c=this.font.generateShapes(l,t),f=new _.ShapeGeometry(c,i);f.applyMatrix4(new _.Matrix4().makeTranslation(0,-a*r,0)),s.push(f)}),s.length===0?null:s.length===1?s[0]:Ce(s,!1)}getRenderableText(e){const t=this.font?.data?.glyphs;return t?Array.from(e).map(i=>i===" "?" ":t[i]?i:" ").join(""):e}createHitbox(e){e.computeBoundingBox();const t=e.boundingBox;if(!t)return null;const i=t.max.x-t.min.x,n=t.max.y-t.min.y;if(i<=0||n<=0)return null;const r=new _.PlaneGeometry(i,n);return r.applyMatrix4(Re([(t.min.x+t.max.x)/2,(t.min.y+t.max.y)/2,0],[1,1,1],0)),r}}class Xt{engine;data=null;enableValidation=!0;model=this.createEmptyModel();font=null;dataSource=new Nt;lastBuildOptions={};activeWorkspace={type:"model",name:"模型"};workspaceCache=new Map;workspaceViews=new Map;constructor(e){this.engine=e,this.engine.modelGroup=new _.Group,this.engine.modelGroup.name="model2d",this.engine.scene.add(this.engine.modelGroup),this.clearModelGroup()}async loadModel(e,t={}){this.enableValidation=t.enableValidation??this.enableValidation,this.engine.events?.trigger(me.ModelLoadStart,{url:e});try{this._emitProgress(10,"请求数据...");const i=await this.loadData(e),n=this.parseData(i);if(!n)throw new Error("Failed to parse DWG data");this.engine.dwgData=n,this.data=n,this._emitProgress(20,"解析数据..."),this.lastBuildOptions={chunkSize:t.chunkSize,enableChunkedLoading:t.enableChunkedLoading},this.clearModelGroup(),this.workspaceViews.clear(),this.workspaceCache.clear();const r=await this.buildScene(n,this.lastBuildOptions);this.activeWorkspace={type:"model",name:"模型"},this.activateWorkspace(r),this.afterModelLoaded()}catch(i){throw console.error("[LoaderModule2d] Model load failed:",i),this._emitProgress(0,"抱歉,图纸加载失败"),i}}async loadData(e){return this.dataSource.load(e)}getLayouts(){return[...this.data?.layouts??[]]}getActiveWorkspace(){return{...this.activeWorkspace}}getActiveWorkspaceExtents(){return this.workspaceCache.get(this.getActiveWorkspaceKey())?.extents}async loadLayout(e,t={}){if(!this.data)throw new Error("[LoaderModule2d] No DWG data loaded.");const i=this.resolveLayout(e);if(!i)throw new Error(`[LoaderModule2d] Layout not found: ${e}`);this.saveActiveWorkspaceView(),this.lastBuildOptions={...this.lastBuildOptions,...t};const n=this.getLayoutCacheKey(i.id);let r=this.workspaceCache.get(n);r||(this.engine.events?.trigger(me.ModelLoadStart,{layoutId:i.id}),this._emitProgress(20,"加载布局空间..."),r=await this.buildLayoutScene(this.data,i,this.lastBuildOptions)),this.activeWorkspace={type:"layout",layoutId:i.id,name:i.name},this.activateWorkspace(r);const s=this.restoreWorkspaceView(r.key);this.afterModelLoaded(r.extents,{fitView:!s})}async showModelSpace(e={}){if(!this.data)throw new Error("[LoaderModule2d] No DWG data loaded.");this.saveActiveWorkspaceView(),this.lastBuildOptions={...this.lastBuildOptions,...e};let t=this.workspaceCache.get("model");t||(this.engine.events?.trigger(me.ModelLoadStart,{workspace:"model"}),t=await this.buildScene(this.data,this.lastBuildOptions)),this.activeWorkspace={type:"model",name:"模型"},this.activateWorkspace(t);const i=this.restoreWorkspaceView(t.key);this.afterModelLoaded(void 0,{fitView:!i})}resolveLayout(e){const t=this.data?.layouts??[];return typeof e=="number"?t[e]??null:t.find(i=>i.id===e||i.name===e)??null}getLayoutCacheKey(e){return`layout:${e}`}getActiveWorkspaceKey(){return this.activeWorkspace.type==="layout"&&this.activeWorkspace.layoutId?this.getLayoutCacheKey(this.activeWorkspace.layoutId):"model"}saveActiveWorkspaceView(){const e=this.engine.cameraModule2d?.getViewState?.();e&&this.workspaceViews.set(this.getActiveWorkspaceKey(),e)}restoreWorkspaceView(e){const t=this.workspaceViews.get(e);return t?(this.engine.cameraModule2d?.applyViewState?.(t),!0):!1}activateWorkspace(e){this.engine.modelToolModule2d?.unHighlightModelHover?.(),this.engine.modelToolModule2d?.unhighlightAllModels?.(),this.engine.modelGroup.rotation.set(0,0,e.rotation??0),this.workspaceCache.forEach(t=>{if(t.isModelRoot){this.setModelSpaceVisible(e.isModelRoot===!0);return}t.group.visible=t.key===e.key}),this.model=e.model,this.engine.model=e.model,this.engine.modelGroup.updateMatrixWorld(!0),this.engine.measure?.setWorkspace?.(e.key),this.engine.markup?.setWorkspace?.(e.key)}setModelSpaceVisible(e){this.engine.modelGroup.children.forEach(t=>{String(t.name??"").startsWith("octree:")&&(t.visible=e)})}getMetadataViewRotation(e){const t=Number(e.metadata?.viewRotation??0);return Number.isFinite(t)?t:0}parseData(e){return e?this.enableValidation&&!this.validateDataStructure(e)?(console.error("[LoaderModule2d] Invalid data structure"),null):e:(console.error("[LoaderModule2d] Empty JSON data"),null)}validateDataStructure(e){return e.version||console.warn("[LoaderModule2d] Missing version"),e.metadata||console.warn("[LoaderModule2d] Missing metadata"),Array.isArray(e.layers)?Array.isArray(e.blocks)?Array.isArray(e.tiles)?!0:(console.error("[LoaderModule2d] Invalid or missing tiles array"),!1):(console.error("[LoaderModule2d] Invalid or missing blocks array"),!1):(console.error("[LoaderModule2d] Invalid or missing layers array"),!1)}async buildScene(e,t={}){const i=this.createEmptyModel();i.layers=e.layers,this.model=i,this._emitProgress(30,"加载字体..."),this.font=await this.loadFont(e),this._emitProgress(45,"生成图元...");const n=new Je(this.engine,this.font),r=new Qe(this.engine,n),s=new Ze(r);s.setBlocks(e.blocks??[]);const o=e.tiles??[];await this.buildTilesIntoGroup(o,this.engine.modelGroup,s,t);const a={key:"model",group:this.engine.modelGroup,model:i,rotation:this.getMetadataViewRotation(e),isModelRoot:!0};return this.workspaceCache.set(a.key,a),this._emitProgress(100,"加载完成"),a}async buildLayoutScene(e,t,i={}){const n=new _.Group;n.name=`workspace:layout:${t.id}`,n.visible=!1,this.engine.modelGroup.add(n);const r=this.createEmptyModel();r.layers=e.layers,this.model=r,this.font||(this._emitProgress(30,"加载字体..."),this.font=await this.loadFont(e));const s=new Je(this.engine,this.font),o=new Qe(this.engine,s),a=new Ze(o);a.setBlocks(e.blocks??[]);const l=new _.Group;l.name=`layout-viewports:${t.id}`,n.add(l),await this.buildViewportGroups(e,t,l,a,i);const c=new _.Group;c.name=`layout-paper:${t.id}`,n.add(c),await this.buildTilesIntoGroup(t.paperTiles??[],c,a,{...i,namePrefix:"paper"});const f={key:this.getLayoutCacheKey(t.id),group:n,model:r,extents:this.getLayoutExtents(t),rotation:this.getLayoutViewRotation(t)};return this.workspaceCache.set(f.key,f),this._emitProgress(100,"布局空间加载完成"),f}async buildViewportGroups(e,t,i,n,r){const s=(t.viewports??[]).filter(o=>this.isUsableViewport(o));for(let o=0;o<s.length;o+=1){const a=s[o],l=new _.Group;l.name=`viewport:${a.id}`,l.matrixAutoUpdate=!1,l.matrix.copy(this.buildViewportMatrix(a)),l.userData.viewport=a,i.add(l);const c=this.collectViewportTiles(e.tiles??[],a),f=new Set((a.frozenLayers??[]).map(y=>String(y))),p=this.getViewportModelClipPolygon(a);await this.buildTilesIntoGroup(c,l,n,{...r,namePrefix:`viewport:${a.id}`,interactive:!0,filterRenderItem:y=>this.isVisibleInViewport(y,f),transformRenderItem:y=>this.clipRenderItemToPolygon(y,p)});const d=45+Math.round((o+1)/Math.max(s.length,1)*35);this._emitProgress(d,`加载视口 ${o+1}/${s.length}...`)}}async buildTilesIntoGroup(e,t,i,n={}){const r=Math.max(e.length,1),s=Math.max(1,n.chunkSize??2e3),o=n.enableChunkedLoading??!0;for(let a=0;a<e.length;a+=1){const l=e[a],c=this.createTileGroup(l,n.namePrefix);t.add(c);const f=new Yt(this.engine,this.model,c,{interactive:n.interactive??!0}),p=new Set;let d=0,y=0;for(const g of i.iterateRootEntities(l.inserts??[])){const v=n.transformRenderItem?n.transformRenderItem(g):g;v&&(n.filterRenderItem&&!n.filterRenderItem(v)||(v?.linkId!=null&&p.add(String(v.linkId)),d+=1,y+=1,f.addRenderItem(v),o&&y>=s&&(y=0,await this.yieldToBrowser())))}c.userData.linkIds=Array.from(p),c.userData.renderItemCount=d,f.buildSceneObjects(),i.clearCache();const h=45+Math.round((a+1)/r*45);this._emitProgress(h,`合并图元 ${a+1}/${r}...`),o&&await this.yieldToBrowser()}}async yieldToBrowser(){await new Promise(e=>{if(typeof requestAnimationFrame=="function"){requestAnimationFrame(()=>e());return}setTimeout(e,0)})}createTileGroup(e,t="octree"){const i=new _.Group;return i.name=`${t}:${e.id}`,i.userData={type:"octree-tile",tileId:e.id,tileUrl:e.url,min:e.node?.min,max:e.node?.max,entityCount:e.inserts?.length??e.node?.entityCount??0},i}buildViewportMatrix(e){const t=e.paperHeight/e.viewHeight,i=-(e.twistAngle||0),n=Math.cos(i),r=Math.sin(i),[s,o]=e.viewCenter,[a,l]=e.paperCenter,c=new _.Matrix4;return c.set(n*t,-r*t,0,a-(n*t*s-r*t*o),r*t,n*t,0,l-(r*t*s+n*t*o),0,0,1,-.005,0,0,0,1),c}collectViewportTiles(e,t){const i=this.getViewportModelBounds(t);return e.filter(n=>this.intersectsBounds(n.node?.min,n.node?.max,i.min,i.max))}getViewportModelBounds(e){const t=this.getViewportModelClipPolygon(e);return{min:[Math.min(...t.map(i=>i.x)),Math.min(...t.map(i=>i.y)),0],max:[Math.max(...t.map(i=>i.x)),Math.max(...t.map(i=>i.y)),0]}}getViewportModelClipPolygon(e){const[t,i]=e.viewCenter,n=e.viewWidth/2,r=e.viewHeight/2,s=e.twistAngle||0,o=Math.cos(s),a=Math.sin(s);return[[-n,-r],[n,-r],[n,r],[-n,r]].map(([c,f])=>new _.Vector3(t+c*o-f*a,i+c*a+f*o,0))}intersectsBounds(e,t,i,n){return!e||!t?!0:e[0]<=n[0]&&t[0]>=i[0]&&e[1]<=n[1]&&t[1]>=i[1]}isUsableViewport(e){return e.visible!==!1&&Array.isArray(e.paperCenter)&&Array.isArray(e.viewCenter)&&Number(e.paperHeight)>0&&Number(e.viewHeight)>0&&Number(e.viewWidth)>0}isVisibleInViewport(e,t){const i=this.getRenderItemLayerDeps(e);for(const n of i){const r=this.model.layers.find(s=>s.name===n);if(r&&(r.visible===!1||r.frozen===!0)||t.has(n))return!1}return!0}getRenderItemLayerDeps(e){const t=e.layerDeps&&e.layerDeps.length>0?e.layerDeps:[e.layer];return Array.from(new Set(t.map(i=>String(i??"")).filter(Boolean)))}clipRenderItemToPolygon(e,t){if(e.kind==="line"){const r=this.clipLinePoints(e.points??[],t);if(r.length===0)return null;const s=this.getPointsBounds(r);return{...e,points:r,min:s.min,max:s.max}}const i=this.clipGeometry(e.geometry,t);if(!i)return null;const n=this.getGeometryBounds(i);return{...e,geometry:i,min:n.min,max:n.max}}clipLinePoints(e,t){const i=[];for(let n=0;n<e.length-1;n+=2)this.clipSegmentByPolygon(e[n],e[n+1],t).forEach(r=>{i.push(r[0],r[1])});return i}clipSegmentByPolygon(e,t,i){const n=t.clone().sub(e),r=[0,1];for(let a=0;a<i.length;a+=1){const l=this.getSegmentIntersectionParameter(e,t,i[a],i[(a+1)%i.length]);l!=null&&l>1e-9&&l<1-1e-9&&r.push(l)}const s=Array.from(new Set(r.map(a=>Number(a.toFixed(12))))).sort((a,l)=>a-l),o=[];for(let a=0;a<s.length-1;a+=1){const l=s[a],c=s[a+1];if(c-l<1e-10)continue;const f=e.clone().add(n.clone().multiplyScalar((l+c)*.5));this.isPointInPolygon(f,i)&&o.push([e.clone().add(n.clone().multiplyScalar(l)),e.clone().add(n.clone().multiplyScalar(c))])}return o}getSegmentIntersectionParameter(e,t,i,n){const r=t.x-e.x,s=t.y-e.y,o=n.x-i.x,a=n.y-i.y,l=r*a-s*o;if(Math.abs(l)<1e-12)return null;const c=i.x-e.x,f=i.y-e.y,p=(c*a-f*o)/l,d=(c*s-f*r)/l;return p>=-1e-9&&p<=1+1e-9&&d>=-1e-9&&d<=1+1e-9?_.MathUtils.clamp(p,0,1):null}isPointInPolygon(e,t){let i=!1;for(let n=0,r=t.length-1;n<t.length;r=n,n+=1){const s=t[n],o=t[r];if(this.isPointOnSegment(e,s,o))return!0;s.y>e.y!=o.y>e.y&&e.x<(o.x-s.x)*(e.y-s.y)/(o.y-s.y)+s.x&&(i=!i)}return i}isPointOnSegment(e,t,i){const n=(i.x-t.x)*(e.y-t.y)-(i.y-t.y)*(e.x-t.x);if(Math.abs(n)>1e-8)return!1;const r=(e.x-t.x)*(i.x-t.x)+(e.y-t.y)*(i.y-t.y),s=(i.x-t.x)**2+(i.y-t.y)**2;return r>=-1e-8&&r<=s+1e-8}clipGeometry(e,t){if(!e?.attributes?.position)return null;const i=e.index?e.toNonIndexed():e,n=i.attributes.position,r=i.attributes.uv,s=!!r,o=[],a=[];for(let c=0;c<n.count;c+=3){const f=[0,1,2].map(d=>({position:new _.Vector3(n.getX(c+d),n.getY(c+d),n.getZ(c+d)),uv:s?new _.Vector2(r.getX(c+d),r.getY(c+d)):void 0})),p=this.clipPolygonVertices(f,t);if(!(p.length<3))for(let d=1;d<p.length-1;d+=1)[p[0],p[d],p[d+1]].forEach(y=>{o.push(y.position.x,y.position.y,y.position.z),s&&y.uv&&a.push(y.uv.x,y.uv.y)})}if(i!==e&&i.dispose(),o.length===0)return null;const l=new _.BufferGeometry;return l.setAttribute("position",new _.Float32BufferAttribute(o,3)),s&&l.setAttribute("uv",new _.Float32BufferAttribute(a,2)),l.computeVertexNormals(),l}clipPolygonVertices(e,t){const i=this.getPolygonOrientation(t);let n=e;for(let r=0;r<t.length;r+=1){const s=t[r],o=t[(r+1)%t.length],a=n;if(n=[],a.length===0)break;let l=a[a.length-1],c=this.isInsideClipEdge(l.position,s,o,i);a.forEach(f=>{const p=this.isInsideClipEdge(f.position,s,o,i);p!==c&&n.push(this.intersectClipEdge(l,f,s,o,i)),p&&n.push(f),l=f,c=p})}return n}isInsideClipEdge(e,t,i,n){const r=i.x-t.x,s=i.y-t.y;return n*(r*(e.y-t.y)-s*(e.x-t.x))>=-1e-9}intersectClipEdge(e,t,i,n,r){const s=n.x-i.x,o=n.y-i.y,a=r*(s*(e.position.y-i.y)-o*(e.position.x-i.x)),l=r*(s*(t.position.y-i.y)-o*(t.position.x-i.x)),c=Math.abs(a-l)<1e-12?0:a/(a-l);return{position:e.position.clone().lerp(t.position,c),uv:e.uv&&t.uv?e.uv.clone().lerp(t.uv,c):void 0}}getPolygonOrientation(e){let t=0;for(let i=0;i<e.length;i+=1){const n=e[i],r=e[(i+1)%e.length];t+=n.x*r.y-r.x*n.y}return t>=0?1:-1}getGeometryBounds(e){return e.computeBoundingBox(),{min:e.boundingBox?.min.clone()??new _.Vector3,max:e.boundingBox?.max.clone()??new _.Vector3}}getPointsBounds(e){const t=new _.Vector3(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),i=new _.Vector3(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY);return e.forEach(n=>{t.min(n),i.max(n)}),{min:t,max:i}}getLayoutExtents(e){const t=e.paper,i=t?.viewExtent??t?.viewExtents;if(i?.min&&i?.max)return{min:i.min,max:i.max};if(t?.min&&t?.max)return{min:t.min,max:t.max};if(t?.paperWidth&&t?.paperHeight)return{min:[0,0,0],max:[t.paperWidth,t.paperHeight,0]}}getLayoutViewRotation(e){const t=Number(e.paper?.viewRotation??0);return Number.isFinite(t)?t:0}async loadFont(e){const t=this.engine.options?.fontUrl??"/fonts/simfang.ttf",i=await de.fromUrl(t,{chars:this.collectTextChars(e)});return de.toThreeFont(i)}collectTextChars(e){const t=new Set([" "]),i=n=>{Array.isArray(n)&&n.forEach(r=>{if(typeof r?.text=="string")for(const s of this.normalizeText(r.text).replace(/\n/g," "))t.add(s)})};return i(e.entities),(e.blocks??[]).forEach(n=>i(n?.entities)),Array.from(t).join("")}normalizeText(e){return String(e??"").replace(/\r\n/g,`
118
+ `),r=t*(this.engine.options?.textLineHeight??1.35),s=[];return n.forEach((o,a)=>{if(!o)return;const l=this.getRenderableText(o);if(!l.trim())return;const c=this.font.generateShapes(l,t),f=new _.ShapeGeometry(c,i);f.applyMatrix4(new _.Matrix4().makeTranslation(0,-a*r,0)),s.push(f)}),s.length===0?null:s.length===1?s[0]:Ce(s,!1)}getRenderableText(e){const t=this.font?.data?.glyphs;return t?Array.from(e).map(i=>i===" "?" ":t[i]?i:" ").join(""):e}createHitbox(e){e.computeBoundingBox();const t=e.boundingBox;if(!t)return null;const i=t.max.x-t.min.x,n=t.max.y-t.min.y;if(i<=0||n<=0)return null;const r=new _.PlaneGeometry(i,n);return r.applyMatrix4(Ne([(t.min.x+t.max.x)/2,(t.min.y+t.max.y)/2,0],[1,1,1],0)),r}}class ti{engine;data=null;enableValidation=!0;model=this.createEmptyModel();font=null;dataSource=new Ft;lastBuildOptions={};activeWorkspace={type:"model",name:"模型"};workspaceCache=new Map;workspaceViews=new Map;constructor(e){this.engine=e,this.engine.modelGroup=new _.Group,this.engine.modelGroup.name="model2d",this.engine.scene.add(this.engine.modelGroup),this.clearModelGroup()}async loadModel(e,t={}){this.enableValidation=t.enableValidation??this.enableValidation,this.engine.events?.trigger(me.ModelLoadStart,{url:e});try{this._emitProgress(10,"请求数据...");const i=await this.loadData(e),n=this.parseData(i);if(!n)throw new Error("Failed to parse DWG data");this.engine.dwgData=n,this.data=n,this._emitProgress(20,"解析数据..."),this.lastBuildOptions={chunkSize:t.chunkSize,enableChunkedLoading:t.enableChunkedLoading},this.clearModelGroup(),this.workspaceViews.clear(),this.workspaceCache.clear();const r=await this.buildScene(n,this.lastBuildOptions);this.activeWorkspace={type:"model",name:"模型"},this.activateWorkspace(r),this.afterModelLoaded()}catch(i){throw console.error("[LoaderModule2d] Model load failed:",i),this._emitProgress(0,"抱歉,图纸加载失败"),i}}async loadData(e){return this.dataSource.load(e)}getLayouts(){return[...this.data?.layouts??[]]}getActiveWorkspace(){return{...this.activeWorkspace}}getActiveWorkspaceExtents(){return this.workspaceCache.get(this.getActiveWorkspaceKey())?.extents}async loadLayout(e,t={}){if(!this.data)throw new Error("[LoaderModule2d] No DWG data loaded.");const i=this.resolveLayout(e);if(!i)throw new Error(`[LoaderModule2d] Layout not found: ${e}`);this.saveActiveWorkspaceView(),this.lastBuildOptions={...this.lastBuildOptions,...t};const n=this.getLayoutCacheKey(i.id);let r=this.workspaceCache.get(n);r||(this.engine.events?.trigger(me.ModelLoadStart,{layoutId:i.id}),this._emitProgress(20,"加载布局空间..."),r=await this.buildLayoutScene(this.data,i,this.lastBuildOptions)),this.activeWorkspace={type:"layout",layoutId:i.id,name:i.name},this.activateWorkspace(r);const s=this.restoreWorkspaceView(r.key);this.afterModelLoaded(r.extents,{fitView:!s})}async showModelSpace(e={}){if(!this.data)throw new Error("[LoaderModule2d] No DWG data loaded.");this.saveActiveWorkspaceView(),this.lastBuildOptions={...this.lastBuildOptions,...e};let t=this.workspaceCache.get("model");t||(this.engine.events?.trigger(me.ModelLoadStart,{workspace:"model"}),t=await this.buildScene(this.data,this.lastBuildOptions)),this.activeWorkspace={type:"model",name:"模型"},this.activateWorkspace(t);const i=this.restoreWorkspaceView(t.key);this.afterModelLoaded(void 0,{fitView:!i})}resolveLayout(e){const t=this.data?.layouts??[];return typeof e=="number"?t[e]??null:t.find(i=>i.id===e||i.name===e)??null}getLayoutCacheKey(e){return`layout:${e}`}getActiveWorkspaceKey(){return this.activeWorkspace.type==="layout"&&this.activeWorkspace.layoutId?this.getLayoutCacheKey(this.activeWorkspace.layoutId):"model"}saveActiveWorkspaceView(){const e=this.engine.cameraModule2d?.getViewState?.();e&&this.workspaceViews.set(this.getActiveWorkspaceKey(),e)}restoreWorkspaceView(e){const t=this.workspaceViews.get(e);return t?(this.engine.cameraModule2d?.applyViewState?.(t),!0):!1}activateWorkspace(e){this.engine.modelToolModule2d?.unHighlightModelHover?.(),this.engine.modelToolModule2d?.unhighlightAllModels?.(),this.engine.modelGroup.rotation.set(0,0,e.rotation??0),this.workspaceCache.forEach(t=>{if(t.isModelRoot){this.setModelSpaceVisible(e.isModelRoot===!0);return}t.group.visible=t.key===e.key}),this.model=e.model,this.engine.model=e.model,this.engine.modelGroup.updateMatrixWorld(!0),this.engine.measure?.setWorkspace?.(e.key),this.engine.markup?.setWorkspace?.(e.key)}setModelSpaceVisible(e){this.engine.modelGroup.children.forEach(t=>{String(t.name??"").startsWith("octree:")&&(t.visible=e)})}getMetadataViewRotation(e){const t=Number(e.metadata?.viewRotation??0);return Number.isFinite(t)?t:0}parseData(e){return e?this.enableValidation&&!this.validateDataStructure(e)?(console.error("[LoaderModule2d] Invalid data structure"),null):e:(console.error("[LoaderModule2d] Empty JSON data"),null)}validateDataStructure(e){return e.version||console.warn("[LoaderModule2d] Missing version"),e.metadata||console.warn("[LoaderModule2d] Missing metadata"),Array.isArray(e.layers)?Array.isArray(e.blocks)?Array.isArray(e.tiles)?!0:(console.error("[LoaderModule2d] Invalid or missing tiles array"),!1):(console.error("[LoaderModule2d] Invalid or missing blocks array"),!1):(console.error("[LoaderModule2d] Invalid or missing layers array"),!1)}async buildScene(e,t={}){const i=this.createEmptyModel();i.layers=e.layers,this.model=i,this._emitProgress(30,"加载字体..."),this.font=await this.loadFont(e),this._emitProgress(45,"生成图元...");const n=new tt(this.engine,this.font),r=new et(this.engine,n),s=new Xe(r);s.setBlocks(e.blocks??[]);const o=e.tiles??[];await this.buildTilesIntoGroup(o,this.engine.modelGroup,s,t);const a={key:"model",group:this.engine.modelGroup,model:i,rotation:this.getMetadataViewRotation(e),isModelRoot:!0};return this.workspaceCache.set(a.key,a),this._emitProgress(100,"加载完成"),a}async buildLayoutScene(e,t,i={}){const n=new _.Group;n.name=`workspace:layout:${t.id}`,n.visible=!1,this.engine.modelGroup.add(n);const r=this.createEmptyModel();r.layers=e.layers,this.model=r,this.font||(this._emitProgress(30,"加载字体..."),this.font=await this.loadFont(e));const s=new tt(this.engine,this.font),o=new et(this.engine,s),a=new Xe(o);a.setBlocks(e.blocks??[]);const l=new _.Group;l.name=`layout-viewports:${t.id}`,n.add(l),await this.buildViewportGroups(e,t,l,a,i);const c=new _.Group;c.name=`layout-paper:${t.id}`,n.add(c),await this.buildTilesIntoGroup(t.paperTiles??[],c,a,{...i,namePrefix:"paper"});const f={key:this.getLayoutCacheKey(t.id),group:n,model:r,extents:this.getLayoutExtents(t),rotation:this.getLayoutViewRotation(t)};return this.workspaceCache.set(f.key,f),this._emitProgress(100,"布局空间加载完成"),f}async buildViewportGroups(e,t,i,n,r){const s=(t.viewports??[]).filter(o=>this.isUsableViewport(o));for(let o=0;o<s.length;o+=1){const a=s[o],l=new _.Group;l.name=`viewport:${a.id}`,l.matrixAutoUpdate=!1,l.matrix.copy(this.buildViewportMatrix(a)),l.userData.viewport=a,i.add(l);const c=this.collectViewportTiles(e.tiles??[],a),f=new Set((a.frozenLayers??[]).map(y=>String(y))),p=this.getViewportModelClipPolygon(a);await this.buildTilesIntoGroup(c,l,n,{...r,namePrefix:`viewport:${a.id}`,interactive:!0,filterRenderItem:y=>this.isVisibleInViewport(y,f),transformRenderItem:y=>this.clipRenderItemToPolygon(y,p)});const d=45+Math.round((o+1)/Math.max(s.length,1)*35);this._emitProgress(d,`加载视口 ${o+1}/${s.length}...`)}}async buildTilesIntoGroup(e,t,i,n={}){const r=Math.max(e.length,1),s=Math.max(1,n.chunkSize??2e3),o=n.enableChunkedLoading??!0;for(let a=0;a<e.length;a+=1){const l=e[a],c=this.createTileGroup(l,n.namePrefix);t.add(c);const f=new ei(this.engine,this.model,c,{interactive:n.interactive??!0}),p=new Set;let d=0,y=0;for(const g of i.iterateRootEntities(l.inserts??[])){const v=n.transformRenderItem?n.transformRenderItem(g):g;v&&(n.filterRenderItem&&!n.filterRenderItem(v)||(v?.linkId!=null&&p.add(String(v.linkId)),d+=1,y+=1,f.addRenderItem(v),o&&y>=s&&(y=0,await this.yieldToBrowser())))}c.userData.linkIds=Array.from(p),c.userData.renderItemCount=d,f.buildSceneObjects(),i.clearCache();const h=45+Math.round((a+1)/r*45);this._emitProgress(h,`合并图元 ${a+1}/${r}...`),o&&await this.yieldToBrowser()}}async yieldToBrowser(){await new Promise(e=>{if(typeof requestAnimationFrame=="function"){requestAnimationFrame(()=>e());return}setTimeout(e,0)})}createTileGroup(e,t="octree"){const i=new _.Group;return i.name=`${t}:${e.id}`,i.userData={type:"octree-tile",tileId:e.id,tileUrl:e.url,min:e.node?.min,max:e.node?.max,entityCount:e.inserts?.length??e.node?.entityCount??0},i}buildViewportMatrix(e){const t=e.paperHeight/e.viewHeight,i=-(e.twistAngle||0),n=Math.cos(i),r=Math.sin(i),[s,o]=e.viewCenter,[a,l]=e.paperCenter,c=new _.Matrix4;return c.set(n*t,-r*t,0,a-(n*t*s-r*t*o),r*t,n*t,0,l-(r*t*s+n*t*o),0,0,1,-.005,0,0,0,1),c}collectViewportTiles(e,t){const i=this.getViewportModelBounds(t);return e.filter(n=>this.intersectsBounds(n.node?.min,n.node?.max,i.min,i.max))}getViewportModelBounds(e){const t=this.getViewportModelClipPolygon(e);return{min:[Math.min(...t.map(i=>i.x)),Math.min(...t.map(i=>i.y)),0],max:[Math.max(...t.map(i=>i.x)),Math.max(...t.map(i=>i.y)),0]}}getViewportModelClipPolygon(e){const[t,i]=e.viewCenter,n=e.viewWidth/2,r=e.viewHeight/2,s=e.twistAngle||0,o=Math.cos(s),a=Math.sin(s);return[[-n,-r],[n,-r],[n,r],[-n,r]].map(([c,f])=>new _.Vector3(t+c*o-f*a,i+c*a+f*o,0))}intersectsBounds(e,t,i,n){return!e||!t?!0:e[0]<=n[0]&&t[0]>=i[0]&&e[1]<=n[1]&&t[1]>=i[1]}isUsableViewport(e){return e.visible!==!1&&Array.isArray(e.paperCenter)&&Array.isArray(e.viewCenter)&&Number(e.paperHeight)>0&&Number(e.viewHeight)>0&&Number(e.viewWidth)>0}isVisibleInViewport(e,t){const i=this.getRenderItemLayerDeps(e);for(const n of i){const r=this.model.layers.find(s=>s.name===n);if(r&&(r.visible===!1||r.frozen===!0)||t.has(n))return!1}return!0}getRenderItemLayerDeps(e){const t=e.layerDeps&&e.layerDeps.length>0?e.layerDeps:[e.layer];return Array.from(new Set(t.map(i=>String(i??"")).filter(Boolean)))}clipRenderItemToPolygon(e,t){if(e.kind==="line"){const r=this.clipLinePoints(e.points??[],t);if(r.length===0)return null;const s=this.getPointsBounds(r);return{...e,points:r,min:s.min,max:s.max}}const i=this.clipGeometry(e.geometry,t);if(!i)return null;const n=this.getGeometryBounds(i);return{...e,geometry:i,min:n.min,max:n.max}}clipLinePoints(e,t){const i=[];for(let n=0;n<e.length-1;n+=2)this.clipSegmentByPolygon(e[n],e[n+1],t).forEach(r=>{i.push(r[0],r[1])});return i}clipSegmentByPolygon(e,t,i){const n=t.clone().sub(e),r=[0,1];for(let a=0;a<i.length;a+=1){const l=this.getSegmentIntersectionParameter(e,t,i[a],i[(a+1)%i.length]);l!=null&&l>1e-9&&l<1-1e-9&&r.push(l)}const s=Array.from(new Set(r.map(a=>Number(a.toFixed(12))))).sort((a,l)=>a-l),o=[];for(let a=0;a<s.length-1;a+=1){const l=s[a],c=s[a+1];if(c-l<1e-10)continue;const f=e.clone().add(n.clone().multiplyScalar((l+c)*.5));this.isPointInPolygon(f,i)&&o.push([e.clone().add(n.clone().multiplyScalar(l)),e.clone().add(n.clone().multiplyScalar(c))])}return o}getSegmentIntersectionParameter(e,t,i,n){const r=t.x-e.x,s=t.y-e.y,o=n.x-i.x,a=n.y-i.y,l=r*a-s*o;if(Math.abs(l)<1e-12)return null;const c=i.x-e.x,f=i.y-e.y,p=(c*a-f*o)/l,d=(c*s-f*r)/l;return p>=-1e-9&&p<=1+1e-9&&d>=-1e-9&&d<=1+1e-9?_.MathUtils.clamp(p,0,1):null}isPointInPolygon(e,t){let i=!1;for(let n=0,r=t.length-1;n<t.length;r=n,n+=1){const s=t[n],o=t[r];if(this.isPointOnSegment(e,s,o))return!0;s.y>e.y!=o.y>e.y&&e.x<(o.x-s.x)*(e.y-s.y)/(o.y-s.y)+s.x&&(i=!i)}return i}isPointOnSegment(e,t,i){const n=(i.x-t.x)*(e.y-t.y)-(i.y-t.y)*(e.x-t.x);if(Math.abs(n)>1e-8)return!1;const r=(e.x-t.x)*(i.x-t.x)+(e.y-t.y)*(i.y-t.y),s=(i.x-t.x)**2+(i.y-t.y)**2;return r>=-1e-8&&r<=s+1e-8}clipGeometry(e,t){if(!e?.attributes?.position)return null;const i=e.index?e.toNonIndexed():e,n=i.attributes.position,r=i.attributes.uv,s=!!r,o=[],a=[];for(let c=0;c<n.count;c+=3){const f=[0,1,2].map(d=>({position:new _.Vector3(n.getX(c+d),n.getY(c+d),n.getZ(c+d)),uv:s?new _.Vector2(r.getX(c+d),r.getY(c+d)):void 0})),p=this.clipPolygonVertices(f,t);if(!(p.length<3))for(let d=1;d<p.length-1;d+=1)[p[0],p[d],p[d+1]].forEach(y=>{o.push(y.position.x,y.position.y,y.position.z),s&&y.uv&&a.push(y.uv.x,y.uv.y)})}if(i!==e&&i.dispose(),o.length===0)return null;const l=new _.BufferGeometry;return l.setAttribute("position",new _.Float32BufferAttribute(o,3)),s&&l.setAttribute("uv",new _.Float32BufferAttribute(a,2)),l.computeVertexNormals(),l}clipPolygonVertices(e,t){const i=this.getPolygonOrientation(t);let n=e;for(let r=0;r<t.length;r+=1){const s=t[r],o=t[(r+1)%t.length],a=n;if(n=[],a.length===0)break;let l=a[a.length-1],c=this.isInsideClipEdge(l.position,s,o,i);a.forEach(f=>{const p=this.isInsideClipEdge(f.position,s,o,i);p!==c&&n.push(this.intersectClipEdge(l,f,s,o,i)),p&&n.push(f),l=f,c=p})}return n}isInsideClipEdge(e,t,i,n){const r=i.x-t.x,s=i.y-t.y;return n*(r*(e.y-t.y)-s*(e.x-t.x))>=-1e-9}intersectClipEdge(e,t,i,n,r){const s=n.x-i.x,o=n.y-i.y,a=r*(s*(e.position.y-i.y)-o*(e.position.x-i.x)),l=r*(s*(t.position.y-i.y)-o*(t.position.x-i.x)),c=Math.abs(a-l)<1e-12?0:a/(a-l);return{position:e.position.clone().lerp(t.position,c),uv:e.uv&&t.uv?e.uv.clone().lerp(t.uv,c):void 0}}getPolygonOrientation(e){let t=0;for(let i=0;i<e.length;i+=1){const n=e[i],r=e[(i+1)%e.length];t+=n.x*r.y-r.x*n.y}return t>=0?1:-1}getGeometryBounds(e){return e.computeBoundingBox(),{min:e.boundingBox?.min.clone()??new _.Vector3,max:e.boundingBox?.max.clone()??new _.Vector3}}getPointsBounds(e){const t=new _.Vector3(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),i=new _.Vector3(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY);return e.forEach(n=>{t.min(n),i.max(n)}),{min:t,max:i}}getLayoutExtents(e){const t=e.paper,i=t?.viewExtent??t?.viewExtents;if(i?.min&&i?.max)return{min:i.min,max:i.max};if(t?.min&&t?.max)return{min:t.min,max:t.max};if(t?.paperWidth&&t?.paperHeight)return{min:[0,0,0],max:[t.paperWidth,t.paperHeight,0]}}getLayoutViewRotation(e){const t=Number(e.paper?.viewRotation??0);return Number.isFinite(t)?t:0}async loadFont(e){const t=this.engine.options?.fontUrl??xe("/fonts/simfang.ttf",typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__filename).href:typeof document>"u"?location.href:se&&se.tagName.toUpperCase()==="SCRIPT"&&se.src||new URL("dwg-preview.umd.js",document.baseURI).href),i=await de.fromUrl(t,{chars:this.collectTextChars(e)});return de.toThreeFont(i)}collectTextChars(e){const t=new Set([" "]),i=n=>{Array.isArray(n)&&n.forEach(r=>{if(typeof r?.text=="string")for(const s of this.normalizeText(r.text).replace(/\n/g," "))t.add(s)})};return i(e.entities),(e.blocks??[]).forEach(n=>i(n?.entities)),Array.from(t).join("")}normalizeText(e){return String(e??"").replace(/\r\n/g,`
119
119
  `).replace(/\r/g,`
120
- `)}afterModelLoaded(e,t={}){try{const r=t.fitView??!0;r&&e?this.engine.cameraModule2d?.fitToExtents(e):r&&this.engine.fitToView()}catch{}this.engine.layerManager||(this.engine.layerManager=new He(this.engine)),this.engine.layerManager._loadLayers();const i=this.engine.scene?.background,n=i instanceof _.Color?i.getHex():this.engine.options?.backgroundColor??1710618;this.engine.modelToolModule2d?.updateColorsForBackground(n),this.engine.layerManager.refresh(),this.engine.events?.trigger(me.ModelLoaded,{})}createEmptyModel(){return{layers:[],modelMap:new Map,hatchMap:new Map,textMap:new Map,imageMap:new Map,nodeMap:new Map,textItems:[]}}clearModelGroup(){for(this.engine.modelGroup.rotation.set(0,0,0),this.workspaceCache.clear();this.engine.modelGroup.children.length>0;){const e=this.engine.modelGroup.children[0];this.engine.modelGroup.remove(e),this.disposeObject3d(e)}}disposeObject3d(e){e.traverse(t=>{this.disposeGeometry(t.geometry),this.disposeGeometryList(t.geometrys),this.disposeMaterial(t.material),this.disposeMaterial(t.materialClone),t.geometrys=void 0,t.clonePoints=void 0,t.materialClone=void 0})}disposeGeometry(e){e?.dispose?.()}disposeGeometryList(e){e?.forEach(t=>this.disposeGeometry(t))}disposeMaterial(e){if(Array.isArray(e)){e.forEach(t=>this.disposeMaterial(t));return}e&&(Object.values(e).forEach(t=>{t?.isTexture&&t.dispose?.()}),e.dispose?.())}_emitProgress(e,t){this.engine.events?.trigger(me.ModelLoadProgress,{progress:e,text:t})}getData(){return this.data}getEntitiesByLayer(e){return this.data?this.data.entities.filter(t=>t.layer===e):[]}getLayers(){return this.data?this.data.layers:[]}clear(){this.data=null,this.engine.dwgData=null,this.model=this.createEmptyModel(),this.clearModelGroup(),this.activeWorkspace={type:"model",name:"模型"},this.workspaceViews.clear()}dispose(){this.clear()}}class et{constructor(e,t,i){this.camera=e,this.renderer=t,this.scene=i,this.raycaster=new _.Raycaster}raycaster;worldToScreenNormalized(e){const t=e.clone();return t.project(this.camera),new _.Vector2(t.x,t.y)}worldToScreen(e){const t=new _.Vector3;return t.copy(e).project(this.camera),t.x=t.x*this.renderer.domElement.clientWidth*.5,t.y=-t.y*this.renderer.domElement.clientHeight*.5,t.z=(t.z+1)*.5,t.x+=this.renderer.domElement.clientWidth*.5,t.y+=this.renderer.domElement.clientHeight*.5,new _.Vector2(t.x,t.y)}worldToScreenIfVisible(e){if(this.camera.updateMatrixWorld(!0),this.camera instanceof _.PerspectiveCamera&&e.clone().applyMatrix4(this.camera.matrixWorldInverse).z>=0)return null;const t=e.clone().project(this.camera);if(!Number.isFinite(t.x)||!Number.isFinite(t.y)||!Number.isFinite(t.z)||t.z<-1||t.z>1)return null;const i=this.renderer.domElement.clientWidth,n=this.renderer.domElement.clientHeight;return new _.Vector2(t.x*i*.5+i*.5,-t.y*n*.5+n*.5)}screenToNormalized(e,t){const i=this.renderer.domElement.clientWidth,n=this.renderer.domElement.clientHeight,r=e/i*2-1,s=-(t/n*2-1);return new _.Vector2(r,s)}screenToWorld(e,t,i){if(!this.scene&&!i)return console.warn("WorldToScreen: 需要提供 scene 或 objects 参数才能进行屏幕坐标转世界坐标"),null;const n=this.screenToNormalized(e,t);this.raycaster.setFromCamera(n,this.camera);const r=i||this.scene.children,s=this.raycaster.intersectObjects(r,!0);return s.length>0?s[0].point:null}screenToWorldWithDepth(e,t,i=0){const n=this.screenToNormalized(e,t);this.raycaster.setFromCamera(n,this.camera);const r=new _.Vector3;return this.raycaster.ray.at(i,r),r}updateCamera(e){this.camera=e}updateRenderer(e){this.renderer=e}updateScene(e){this.scene=e}}class Kt{engine;pickBoxElementIds=[];worldToScreen;invisibleMaterial=new _.MeshBasicMaterial({visible:!1});maxHoverLineCoordinateCount=3e4;maxHoverMeshVertexCount=3e4;constructor(e){this.engine=e,this.pickBoxElementIds=[],this.worldToScreen=new et(e.camera,e.renderer,e.scene)}init(){this.pickBoxElementIds=[]}pick2d(e,t){const i=[],n=new _.Vector2(t.offsetX,t.offsetY);this.init(),this.collectPickCandidates(e);const r=[];this.pickBoxElementIds.forEach(o=>{(this.engine.loaderModule2d.model.nodeMap.get(String(o))??this.engine.loaderModule2d.model.nodeMap.get(o))?.forEach(l=>{if(l==null)return;const c=this.getNodeObject(l);if(c!=null&&this.isNodePickable(l,c)&&!(t?.isHover===!0&&this.isLargeHoverNode(l,c)))if(c instanceof _.LineSegments){c.updateWorldMatrix(!0,!1);const p=c.clonePoints.slice(l.indexes[1],l.indexes[2]),d=this.readLineWorldPoints(p,c.matrixWorld);if(d.length===0)return;const y=new _.Box3().setFromPoints(d),h=e.ray.intersectsBox(y);if(h==null||h===!1)return;const g=[];for(let v=0;v<d.length/2;v+=1){const b=this.worldToScreen.worldToScreen(d[v*2]),M=this.worldToScreen.worldToScreen(d[v*2+1]);b.distanceTo(M)>1&&g.push([b,M])}g.forEach(v=>{const b=this.pointToLineDistance(n,v[0],v[1]);b<10&&r.push({distance:b,linkId:o})})}else{const f=this.getNodeGeometry(c,l);if(!f)return;c.updateWorldMatrix(!0,!1),f.applyMatrix4(c.matrixWorld);const p=new _.Mesh(f,this.invisibleMaterial);p.linkId=o,i.push(p)}})});const s=e.intersectObjects(i,!0);return i.forEach(o=>{o.geometry?.dispose?.()}),s.length>0?s[0].object.linkId:r.length>0?(r.sort((o,a)=>o.distance-a.distance),r[0].linkId):null}getNodeObject(e){return e?.object??e?.group?.children?.[e.indexes?.[0]]??this.engine.modelGroup.children[e.indexes?.[0]]}readLineWorldPoints(e,t){const i=[];for(let n=0;n<e.length;n+=3)i.push(new _.Vector3(e[n],e[n+1],e[n+2]).applyMatrix4(t));return i}collectPickCandidates(e){if(this.engine.isModelSpaceActive?.()!==!1){this.RecurrentIteration(e,this.engine.dwgData?.octree);return}const t=this.engine.loaderModule2d?.model?.nodeMap;t&&(this.pickBoxElementIds=Array.from(t.keys()).filter(i=>this.isElementPickable(i)))}getNodeGeometry(e,t){if(Array.isArray(e.geometrys)&&e.geometrys[t.indexes[1]])return e.geometrys[t.indexes[1]].clone();const i=e.geometry,n=i?.groups?.[t.indexes[1]];if(!i||!n)return null;const r=new _.BufferGeometry;return Object.keys(i.attributes).forEach(s=>{const o=i.getAttribute(s),a=o.itemSize,l=o.array,c=n.start*a,f=(n.start+n.count)*a;r.setAttribute(s,new _.BufferAttribute(l.slice(c,f),a,o.normalized))}),r}RecurrentIteration(e,t){if(t==null)return;const i=[t];for(;i.length>0;){const n=i.pop();if(!n)continue;const r=this.getBox3(n);if(r&&!e.ray.intersectsBox(r))continue;(n.elements??[]).forEach(a=>{this.isElementPickable(a)&&this.pickBoxElementIds.push(a)});const o=n.children??[];for(let a=o.length-1;a>=0;a-=1)i.push(o[a])}}getBox3(e){const t=this.toVector3(e.min),i=this.toVector3(e.max);return!t||!i?null:new _.Box3(new _.Vector3(Math.min(t.x,i.x),Math.min(t.y,i.y),Math.min(t.z,i.z)),new _.Vector3(Math.max(i.x,t.x),Math.max(i.y,t.y),Math.max(i.z,t.z)))}toVector3(e){return Array.isArray(e)?new _.Vector3(e[0]??0,e[1]??0,e[2]??0):e&&typeof e=="object"?new _.Vector3(e.X??e.x??0,e.Y??e.y??0,e.Z??e.z??0):null}isElementPickable(e){let t=this.engine.engineStatus2d.hideModels;return!(t!=null&&t.includes(e)||(t=this.engine.engineStatus2d.highlightModels,t!=null&&t.includes(e))||this.engine.layerManager?.isModelVisibleByLayer?.(e)===!1)}isNodePickable(e,t){return t?.visible===!1?!1:this.getNodeLayerDeps(e).every(i=>this.engine.layerManager?.isLayerVisible?.(i)!==!1)}getNodeLayerDeps(e){const t=Array.isArray(e?.layerDeps)&&e.layerDeps.length>0?e.layerDeps:[e?.layer];return Array.from(new Set(t.map(i=>String(i??"")).filter(Boolean)))}isLargeHoverNode(e,t){return t instanceof _.LineSegments?Math.max(0,(e.indexes?.[2]??0)-(e.indexes?.[1]??0))>this.maxHoverLineCoordinateCount:(t?.geometry?.groups?.[e.indexes?.[1]]?.count??0)>this.maxHoverMeshVertexCount}pointToLineDistance(e,t,i){const n=new _.Vector2().subVectors(i,t),r=n.lengthSq();if(r<1e-10)return e.distanceTo(t);const s=new _.Vector2().subVectors(e,t),o=_.MathUtils.clamp(s.dot(n)/r,0,1),a=new _.Vector2().copy(n).multiplyScalar(o).add(t);return e.distanceTo(a)}}class qt{engine;widgetContainer=null;widgetCanvas=null;widgetCtx=null;widgetSize=50;isDragging=!1;isRotating=!1;lastMouseX=0;lastMouseY=0;widgetX=this.widgetSize/2+5;widgetY=this.widgetSize/2+5;widgetRotation=0;rotationStartAngle=null;widgetRotationStart=0;worldToScreen;currentWordPosition=null;currentWordRotation=null;lastCameraWorldPosition=null;enabled=!1;constructor(e){this.engine=e,this.worldToScreen=new et(e.camera,e.renderer,e.scene),this.initWidget();let t=this;this.engine.controlModule2d.panControls.addEventListener("change",()=>{t.updateViewPoint()})}toggle(){return this.enabled=!this.enabled,this.enabled?(this.active(),this.widgetContainer&&(this.widgetContainer.style.display="block")):(this.disActive(),this.widgetContainer&&(this.widgetContainer.style.display="none")),this.enabled}isEnabled(){return this.enabled}initWidget(){const e=window.devicePixelRatio||1;this.widgetContainer=document.createElement("div"),this.widgetContainer.className="MapController",this.widgetContainer.style.position="absolute",this.widgetContainer.style.width=`${this.widgetSize}px`,this.widgetContainer.style.height=`${this.widgetSize}px`,this.widgetContainer.style.border="2px solid rgba(255, 255, 255, 0.4)",this.widgetContainer.style.borderRadius="50%",this.widgetContainer.style.overflow="hidden",this.widgetContainer.style.backgroundColor="rgba(26, 26, 46, 0.85)",this.widgetContainer.style.cursor="crosshair",this.widgetContainer.style.userSelect="none",this.widgetContainer.style.pointerEvents="auto",this.syncWidgetPosition(),this.widgetCanvas=document.createElement("canvas"),this.widgetContainer.className="MapController",this.widgetCanvas.width=this.widgetSize*e,this.widgetCanvas.height=this.widgetSize*e,this.widgetCanvas.style.position="absolute",this.widgetCanvas.style.top="0",this.widgetCanvas.style.left="0",this.widgetCanvas.style.width=`${this.widgetSize}px`,this.widgetCanvas.style.height=`${this.widgetSize}px`,this.widgetCanvas.style.pointerEvents="auto",this.widgetContainer.style.zIndex="1000",this.widgetContainer.appendChild(this.widgetCanvas),this.widgetCtx=this.widgetCanvas.getContext("2d"),this.widgetCtx&&this.widgetCtx.scale(e,e),this.setupWidgetEvents(),this.engine.container&&this.engine.container.appendChild(this.widgetContainer),!this.enabled&&this.widgetContainer&&(this.widgetContainer.style.display="none"),this.drawWidget()}setupWidgetEvents(){this.widgetContainer&&(this.widgetContainer.addEventListener("mousedown",this.onWidgetCanvasMouseDown),this.widgetCanvas&&this.widgetCanvas.addEventListener("mousedown",this.onWidgetCanvasMouseDown),window.addEventListener("mousemove",this.onWidgetMouseMove),window.addEventListener("mouseup",this.onWidgetMouseUp),this.widgetContainer.addEventListener("contextmenu",e=>{e.preventDefault(),e.stopPropagation()}),this.widgetCanvas&&this.widgetCanvas.addEventListener("contextmenu",e=>{e.preventDefault(),e.stopPropagation()}))}onWidgetCanvasMouseDown=e=>{this.widgetContainer&&(e.button==0?(this.isDragging=!1,this.isRotating=!0):(this.isDragging=!0,this.isRotating=!1),this.captureRotationBaseline(e),this.lastMouseX=e.clientX,this.lastMouseY=e.clientY,this.widgetContainer&&(this.widgetContainer.style.cursor="alias"),e.preventDefault(),e.stopPropagation())};onWidgetMouseMove=e=>{if(!this.isDragging&&!this.isRotating)return;const t=e.clientX-this.lastMouseX,i=e.clientY-this.lastMouseY;if(this.isDragging)this.widgetX+=t,this.widgetY+=i,console.log(`[LinkView2d3d] 拖动位置更新: x=${this.widgetX.toFixed(0)}, y=${this.widgetY.toFixed(0)}`),this.syncWidgetPosition(),this.handleWidgetPositionControl();else if(this.isRotating){const n=this.calculatePointerAngle(e);if(n!==null){this.rotationStartAngle===null&&(this.rotationStartAngle=n,this.widgetRotationStart=this.widgetRotation);const r=n-this.rotationStartAngle;this.widgetRotation=this.widgetRotationStart+r,console.log(`[LinkView2d3d] 旋转角度更新: ${(this.widgetRotation*180/Math.PI).toFixed(1)}°`),this.drawWidget(),this.handleWidgetRotationControl()}}this.lastMouseX=e.clientX,this.lastMouseY=e.clientY};onWidgetMouseUp=()=>{this.isDragging&&console.log(`[LinkView2d3d] 拖动结束,最终位置: x=${this.widgetX.toFixed(0)}, y=${this.widgetY.toFixed(0)}`),this.isRotating&&console.log(`[LinkView2d3d] 旋转结束,最终角度: ${(this.widgetRotation*180/Math.PI).toFixed(1)}°`),this.isDragging=!1,this.isRotating=!1,this.rotationStartAngle=null,this.widgetContainer&&(this.widgetContainer.style.cursor="crosshair")};drawWidget(){const e=this.widgetCtx;if(!e)return;const t=this.widgetSize/2,i=this.widgetSize/2;e.clearRect(0,0,this.widgetSize,this.widgetSize),e.save(),e.translate(t,i),e.rotate(this.widgetRotation);const n=36,r=Math.PI/10,s=e.createRadialGradient(0,0,2,0,0,n);s.addColorStop(0,"rgba(0, 230, 130, 0.9)"),s.addColorStop(1,"rgba(0, 230, 130, 0)");const o=-Math.sin(r)*n,a=-Math.cos(r)*n,l=Math.sin(r)*n,c=-Math.cos(r)*n;e.beginPath(),e.moveTo(0,0),e.lineTo(o,a),e.lineTo(l,c),e.closePath(),e.fillStyle=s,e.fill(),e.fillStyle="rgba(255, 255, 255, 0.95)",e.strokeStyle="rgba(0, 200, 110, 0.9)",e.lineWidth=1.5,e.beginPath(),e.arc(0,0,4,0,Math.PI*2),e.fill(),e.stroke(),e.restore()}active(){window.addEventListener("D3ViewUpdate",this.listenViewUpdate)}disActive(){window.removeEventListener("D3ViewUpdate",this.listenViewUpdate)}disposeWidget(){this.widgetContainer&&this.widgetContainer.removeEventListener("mousedown",this.onWidgetMouseDown),this.widgetCanvas&&this.widgetCanvas.removeEventListener("mousedown",this.onWidgetCanvasMouseDown),window.removeEventListener("mousemove",this.onWidgetMouseMove),window.removeEventListener("mouseup",this.onWidgetMouseUp),this.widgetContainer?.remove(),this.widgetContainer=null,this.widgetCanvas=null,this.widgetCtx=null}listenViewUpdate=e=>{console.log("[LinkView2d3d] 收到视图更新事件",e),e=e.detail,e&&e.position&&(this.lastCameraWorldPosition=new _.Vector3(e.position.x,e.position.y,e.position.z),this.currentWordPosition=new _.Vector3(e.position.x,-e.position.z,0)),e&&typeof e.rotation=="number"&&(this.currentWordRotation=e.rotation),this.updateViewPoint()};updateViewPoint(){if(this.currentWordPosition){let e=this.worldToScreen.worldToScreen(this.currentWordPosition);this.widgetX=e.x,this.widgetY=e.y,this.syncWidgetPosition()}this.currentWordRotation!==null&&(this.widgetRotation=this.currentWordRotation,this.drawWidget())}syncWidgetPosition(){if(!this.widgetContainer)return;const e=this.widgetSize/2;this.widgetContainer.style.left=`${this.widgetX-e}px`,this.widgetContainer.style.top=`${this.widgetY-e}px`}handleWidgetPositionControl(){const e=this.getWidgetWorldPosition();e&&(this.currentWordPosition=e,this.dispatchViewControl("move",{position2d:e}))}handleWidgetRotationControl(){this.currentWordRotation=this.widgetRotation,this.dispatchViewControl("rotate",{rotation:this.widgetRotation})}getWidgetWorldPosition(){if(!this.engine?.cameraModule2d?.screenToWorld)return null;const e=this.engine.cameraModule2d.screenToWorld(this.widgetX,this.widgetY);return e?new _.Vector3(e.x,e.y,0):null}dispatchViewControl(e,t){const i=!!t.position2d,n=typeof t.rotation=="number";if(!i&&!n)return;if(i&&!this.lastCameraWorldPosition){console.warn("[LinkView2d3d] 未获取到 3D 相机位置,暂不推送位置控制");return}const r={source:"LinkView2d3d",mode:e};if(t.position2d&&this.lastCameraWorldPosition){const s=this.lastCameraWorldPosition.y,o=-t.position2d.y;r.position={x:t.position2d.x,y:s,z:o},this.lastCameraWorldPosition=new _.Vector3(t.position2d.x,s,o)}n&&(r.rotation=t.rotation),window.dispatchEvent(new CustomEvent("D2ViewControl",{detail:r}))}captureRotationBaseline(e){const t=this.calculatePointerAngle(e);if(t===null){this.rotationStartAngle=null;return}this.rotationStartAngle=t,this.widgetRotationStart=this.widgetRotation}calculatePointerAngle(e){if(!this.widgetContainer)return null;const t=this.widgetContainer.getBoundingClientRect(),i=t.left+t.width/2,n=t.top+t.height/2;return Math.atan2(e.clientX-i,n-e.clientY)}}class Qt{engine;enabled=!1;constructor(e){this.engine=e}toggle(){return this.enabled=!this.enabled,this.enabled?this.active():this.disActive(),this.enabled}isEnabled(){return this.enabled}active(){window.addEventListener("D3ElementClick",this.listenElementClick)}disActive(){window.removeEventListener("D3ElementClick",this.listenElementClick)}listenElementClick=e=>{const t=String(e?.detail?.id),i=this.engine.loaderModule2d?.model?.nodeMap?.get(t),n=this.getNodesWorldBounds(i);if(n){this.engine.modelToolModule2d.highlightModel([t]),this.engine.cameraModule2d.fitToExtents({min:[n.min.x,n.min.y],max:[n.max.x,n.max.y]},3);return}this.engine.modelToolModule2d.unhighlightAllModels()};getNodesWorldBounds(e){if(!Array.isArray(e)||e.length===0)return null;const t=new _.Box3;let i=!1;return e.forEach(n=>{const r=this.getNodeWorldBounds(n);r&&(t.union(r),i=!0)}),i?t:null}getNodeWorldBounds(e){if(!e?.min||!e?.max)return null;const t=this.getNodeObject(e);if(!t||t.visible===!1)return null;t.updateWorldMatrix?.(!0,!1);const i=new _.Box3(e.min.clone(),e.max.clone()).applyMatrix4(t.matrixWorld);return!Number.isFinite(i.min.x)||!Number.isFinite(i.min.y)||!Number.isFinite(i.max.x)||!Number.isFinite(i.max.y)?null:i}getNodeObject(e){return e?.object??e?.group?.children?.[e.indexes?.[0]]??this.engine.modelGroup?.children?.[e.indexes?.[0]]}}class Jt{engine;highlightMaterial;hideMaterial;translucentMaterial;lightBackgroundWhiteColor=0;darkBackgroundWhiteColor=16777215;maxHoverLineCoordinateCount=3e4;maxHoverMeshVertexCount=3e4;constructor(e){this.engine=e,this.highlightMaterial=new _.MeshBasicMaterial({color:43775,depthTest:!1,depthWrite:!1,transparent:!0,opacity:.5,side:_.DoubleSide}),this.hideMaterial=new _.MeshBasicMaterial({color:0,transparent:!0,opacity:0,side:_.DoubleSide}),this.translucentMaterial=new _.MeshBasicMaterial({color:this.getHoverHighlightColor(),depthTest:!1,depthWrite:!1,transparent:!0,opacity:.5,side:_.DoubleSide}),this.highlightMaterial.clippingPlanes=this.engine.sectionPlane,this.hideMaterial.clippingPlanes=this.engine.sectionPlane,this.translucentMaterial.clippingPlanes=this.engine.sectionPlane}split_merge_model(e){if(e.isSplit||e instanceof _.InstancedMesh)return;const t=e.materialClone.clone(),i=Array.isArray(e.geometrys)&&e.geometrys.length>0?Ce(e.geometrys,!0):e.geometry;i.groups.forEach(n=>{n.materialIndex=0}),e.geometry=i,e.material=[t,this.highlightMaterial,this.translucentMaterial],e.needsUpdate=!0,e.isSplit=!0}un_split_merge_model(e){}getNodeObject(e){return e?.object??e?.group?.children?.[e.indexes?.[0]]??this.engine.modelGroup.children[e.indexes?.[0]]}forEachNode(e,t){(e??[]).forEach(i=>{const n=this.engine.loaderModule2d.model.nodeMap.get(String(i))??this.engine.loaderModule2d.model.nodeMap.get(i);n?.forEach(r=>{if(r==null||r.indexes==null)return;const s=this.getNodeObject(r);s!=null&&t(r,s,i)})})}getHoverHighlightColor(){const e=this.engine.scene?.background;return e instanceof _.Color?.299*e.r+.587*e.g+.114*e.b>.5?6735871:16777215:this.engine.themeManager?.getTheme?.()==="light"?6735871:16777215}updateColorsForBackground(e){const t=this.isLightBackground(e);this.engine.modelGroup?.traverse?.(i=>{this.updateObjectMaterialColor(i,t),this.updateVertexColors(i,t)})}getDisplayColor(e){return this.isCurrentBackgroundLight()&&this.isWhiteColor(e)?this.lightBackgroundWhiteColor:e}updateObjectMaterialColor(e,t){const i=this.resolveOriginalColor(e);if(i==null||!this.isWhiteColor(i))return;const n=t?this.lightBackgroundWhiteColor:this.darkBackgroundWhiteColor,r=s=>{s?.color&&s.color.setHex(n)};Array.isArray(e.material)?e.material.forEach(r):r(e.material),r(e.materialClone)}updateVertexColors(e,t){const i=e.geometry,n=i?.getAttribute("color");if(!i||!n)return;e.userData.originalColorAttribute||(e.userData.originalColorAttribute=n.clone());const r=e.userData.originalColorAttribute,s=n.array;for(let o=0;o<r.count;o+=1){const a=r.getX(o),l=r.getY(o),c=r.getZ(o),f=t&&this.isWhiteRgb(a,l,c);s[o*3]=f?0:a,s[o*3+1]=f?0:l,s[o*3+2]=f?0:c}n.needsUpdate=!0}resolveOriginalColor(e){if(typeof e.userData?.originalDisplayColor=="number")return e.userData.originalDisplayColor;const[t,i]=String(e.name??"").split("||");let n=Number.parseInt(i);return(n===0||Number.isNaN(n))&&(n=this.engine.loaderModule2d?.model?.layers?.find(s=>s.name===t)?.color),typeof n!="number"||Number.isNaN(n)?null:(e.userData.originalDisplayColor=n,n)}isCurrentBackgroundLight(){const e=this.engine.scene?.background;return e instanceof _.Color?.299*e.r+.587*e.g+.114*e.b>.5:this.engine.themeManager?.getTheme?.()==="light"}isLightBackground(e){const t=new _.Color(e);return .299*t.r+.587*t.g+.114*t.b>.5}isWhiteColor(e){return(e&16777215)===16777215}isWhiteRgb(e,t,i){return e>.99&&t>.99&&i>.99}highlightModelHover(e){e=this.filterVisibleLayerModels(e),e=this.filterHoverableModels(e),this.unHighlightModelHover(),e.length!==0&&(this.engine.engineStatus2d.highlightHoverModels=e,this.translucentMaterial.color.setHex(this.getHoverHighlightColor()),this.forEachNode(e,(t,i)=>{if(i instanceof _.LineSegments){const n=this.getLineNodePoints(t,i);this.highLightRenderLineHover(n)}else{this.split_merge_model(i);const n=i.geometry?.groups?.[t.indexes[1]];n&&(n.materialIndex=2)}}))}unHighlightModelHover(){const e=this.engine.engineStatus2d.highlightHoverModels??[],t=new Set((this.engine.engineStatus2d.highlightModels??[]).map(i=>String(i)));this.forEachNode(e,(i,n,r)=>{if(n instanceof _.LineSegments)return;const s=n.geometry?.groups?.[i.indexes[1]];s&&(s.materialIndex=t.has(String(r))?1:0)}),this.engine.engineStatus2d.highlightHoverModels=[],this.unhighLightRenderLineHover()}highlightModel(e){e=this.filterVisibleLayerModels(e),e.length!==0&&(this.unHighlightModelHover(),this.engine.engineStatus2d.highlightModels=e,this.forEachNode(e,(t,i)=>{if(i instanceof _.LineSegments){const n=this.getLineNodePoints(t,i);this.highLightRenderLine(n)}else this.split_merge_model(i),i.geometry.groups[t.indexes[1]].materialIndex=1}))}unhighlightModel(e){this.forEachNode(e,(t,i)=>{i instanceof _.LineSegments||(i.geometry.groups[t.indexes[1]].materialIndex=0)}),this.unhighLightRenderLine()}unhighlightAllModels(e=!0){this.engine.engineStatus2d.highlightModels.forEach(t=>{this.unhighlightModel([t])}),e&&(this.engine.engineStatus2d.highlightModels=[])}hideModel(e){this.unhighlightAllModels(),this.forEachNode(e,(t,i)=>{if(i instanceof _.LineSegments){const n=i.geometry.attributes.position.array;for(let r=t.indexes[1];r<t.indexes[2];r+=1)n[r]=NaN;i.geometry.attributes.position.needsUpdate=!0}else this.split_merge_model(i),i.geometry.groups[t.indexes[1]].materialIndex=-1}),this.engine.engineStatus2d.hideModels.push(...e)}showModel(e){this.forEachNode(e,(t,i)=>{if(i instanceof _.LineSegments){const n=i.geometry.attributes.position.array,r=i;for(let s=t.indexes[1];s<t.indexes[2];s+=1)n[s]=r.clonePoints[s];i.geometry.attributes.position.needsUpdate=!0}else this.split_merge_model(i),i.geometry.groups[t.indexes[1]].materialIndex=0}),this.engine.engineStatus2d.hideModels=[]}showAllModels(){this.engine.engineStatus2d.hideModels&&this.engine.engineStatus2d.hideModels.length>0&&this.showModel(this.engine.engineStatus2d.hideModels),this.engine.engineStatus2d.hideModels=[],this.unhighlightAllModels()}getLineNodePoints(e,t){const i=t.clonePoints.slice(e.indexes[1],e.indexes[2]);t.updateWorldMatrix(!0,!1),this.engine.modelGroup?.updateWorldMatrix?.(!0,!1);const n=new _.Matrix4,r=new _.Matrix4().copy(this.engine.modelGroup.matrixWorld).invert();n.multiplyMatrices(r,t.matrixWorld);const s=[];for(let o=0;o<i.length;o+=3){const a=new _.Vector3(i[o],i[o+1],i[o+2]).applyMatrix4(n);s.push(a.x,a.y,a.z)}return s}highLightRenderLine(e){const t=new _.BufferGeometry;t.setAttribute("position",new _.Float32BufferAttribute(e,3));const i=new _.LineBasicMaterial({color:43775,depthTest:!1,depthWrite:!1}),n=new _.LineSegments(t,i);n.name="HighLight",n.renderOrder=999,this.engine.modelGroup.add(n)}unhighLightRenderLine(){this.engine.modelGroup.children.filter(e=>e.name==="HighLight").forEach(e=>{this.engine.modelGroup.remove(e),this.disposeTemporaryObject(e)})}highLightRenderLineHover(e){const t=new _.BufferGeometry;t.setAttribute("position",new _.Float32BufferAttribute(e,3));const i=new _.LineBasicMaterial({color:this.getHoverHighlightColor(),depthTest:!1,depthWrite:!1}),n=new _.LineSegments(t,i);n.name="HighLightHover",n.renderOrder=999,this.engine.modelGroup.add(n)}unhighLightRenderLineHover(){this.engine.modelGroup.children.filter(e=>e.name==="HighLightHover").forEach(e=>{this.engine.modelGroup.remove(e),this.disposeTemporaryObject(e)})}disposeTemporaryObject(e){e.geometry?.dispose?.();const t=e.material,i=n=>{n===this.highlightMaterial||n===this.translucentMaterial||n===this.hideMaterial||n?.dispose?.()};Array.isArray(t)?t.forEach(i):i(t)}filterVisibleLayerModels(e){return(e??[]).filter(t=>this.engine.layerManager?.isModelVisibleByLayer?.(t)!==!1)}filterHoverableModels(e){return(e??[]).filter(t=>this.isHoverableModel(t))}isHoverableModel(e){const t=this.engine.loaderModule2d.model.nodeMap.get(String(e))??this.engine.loaderModule2d.model.nodeMap.get(e);if(!t||t.length===0)return!1;let i=0,n=0;for(const r of t){if(r==null||r.indexes==null)continue;const s=this.getNodeObject(r);if(s instanceof _.LineSegments){if(i+=Math.max(0,(r.indexes[2]??0)-(r.indexes[1]??0)),i>this.maxHoverLineCoordinateCount)return!1;continue}const o=s?.geometry?.groups?.[r.indexes[1]];if(n+=o?.count??0,n>this.maxHoverMeshVertexCount)return!1}return!0}}function ei(k){const e={mouseMoveFrame:null,latestMouseMoveEvent:null,self:null,options:null,mouseDownTime:0,mouseDownPosition:null,lastClickTime:0};e.init=function(h,g){e.self!=null&&e.self.disActive!=null&&e.self.type!=h.type&&e.self.disActive(),e.self=h,g==null&&(g={showCatch:!1}),e.options=g},e.render=function(){e.self&&e.self.render!=null&&e.self.render()},e.active=function(){k.renderer.domElement.addEventListener("mousedown",o),k.renderer.domElement.addEventListener("mouseup",l),k.renderer.domElement.addEventListener("mousemove",a),k.renderer.domElement.addEventListener("touchstart",f,{passive:!1}),k.renderer.domElement.addEventListener("touchend",d,{passive:!1}),k.renderer.domElement.addEventListener("touchmove",p,{passive:!1}),window.addEventListener("keydown",t),window.addEventListener("keyup",i)},e.disActive=function(){k.renderer.domElement.removeEventListener("mousedown",o),k.renderer.domElement.removeEventListener("mouseup",l),k.renderer.domElement.removeEventListener("mousemove",a),k.renderer.domElement.removeEventListener("touchstart",f),k.renderer.domElement.removeEventListener("touchend",d),k.renderer.domElement.removeEventListener("touchmove",p),window.removeEventListener("keydown",t),window.removeEventListener("keyup",i),e.mouseMoveFrame!=null&&(cancelAnimationFrame(e.mouseMoveFrame),e.mouseMoveFrame=null,e.latestMouseMoveEvent=null)};function t(h){(h.keyCode===8||h.keyCode===46)&&e.self&&e.self.handelKeyDeleteDown!=null&&e.self.handelKeyDeleteDown(),h.keyCode===27&&e.self&&e.self.handelKeyEscDown!=null&&e.self.handelKeyEscDown(),h.keyCode===13&&e.self&&e.self.handelKeyEnterDown!=null&&e.self.handelKeyEnterDown(),h.keyCode===32&&e.self&&e.self.handelKeySpaceDown!=null&&e.self.handelKeySpaceDown(),h.key==="Control"&&e.self&&e.self.handelKeyCtrlDown!=null&&e.self.handelKeyCtrlDown(),h.key==="Delete"&&e.self&&e.self.handelKeyDeleteDown!=null&&e.self.handelKeyDeleteDown(),h.key==="Shift"&&e.self&&e.self.handelKeyShiftDown!=null&&e.self.handelKeyShiftDown(),h.key==="Meta"&&e.self&&e.self.handelKeyMetaDown!=null&&e.self.handelKeyMetaDown()}function i(h){h.key==="Alt"&&e.self&&e.self.handelKeyAltUp!=null&&e.self.handelKeyAltUp(),h.key==="Tab"&&e.self&&e.self.handelKeyTabUp!=null&&e.self.handelKeyTabUp(),h.key==="Control"&&e.self&&e.self.handelKeyCtrlUp!=null&&e.self.handelKeyCtrlUp(),h.key==="Shift"&&e.self&&e.self.handelKeyShiftUp!=null&&e.self.handelKeyShiftUp(),h.key==="Meta"&&e.self&&e.self.handelKeyMetaUp!=null&&e.self.handelKeyMetaUp(),h.key==="Command"&&e.self&&e.self.handelKeyCommandUp!=null&&e.self.handelKeyCommandUp(),h.key==="Windows"&&e.self&&e.self.handelKeyWindowsUp!=null&&e.self.handelKeyWindowsUp()}function n(h){const g=new _.Vector2,v=k.renderer.domElement.clientWidth,b=k.renderer.domElement.clientHeight;return g.x=h.offsetX/v*2-1,g.y=-(h.offsetY/b)*2+1,g}function r(h){const g=new _.Raycaster,v=n(h);return g.setFromCamera(v,k.camera),g}function s(h,g=!1){const v=r(h);if(h.raycaster=v,g){const b=y(v,h);h.catch=b}}function o(h){h.button===0&&(e.mouseDownTime=Date.now(),e.mouseDownPosition=new _.Vector3(h.offsetX,h.offsetY,0),e.self&&e.self.handleMouseDown!=null&&(k.engineStatus.isFree=!0,s(h,!0),h.catch!=null&&k.controlModule.orbitControls.origin.set(h.catch.point.x,h.catch.point.y,h.catch.point.z),e.self.handleMouseDown(h)))}function a(h){e.latestMouseMoveEvent=h,e.mouseMoveFrame==null&&(e.mouseMoveFrame=requestAnimationFrame(()=>{const g=e.latestMouseMoveEvent;e.latestMouseMoveEvent=null,e.mouseMoveFrame=null,g&&(g.isHover=!0,s(g,!0),e.self&&e.self.handleMouseMove!=null&&e.self.handleMouseMove(g))}))}function l(h){if(h.button!==0)return;const g=Date.now(),v=g-e.mouseDownTime,b=new _.Vector3(h.offsetX,h.offsetY,0);e.self&&e.self.handleMouseUp!=null&&(s(h,!1),e.self.handleMouseUp(h));const M=b.distanceTo(e.mouseDownPosition);(v<100||M==0)&&e.self&&e.self.handleMouseClick!=null&&(s(h,!0),g-e.lastClickTime<200?e.self.handleMouseDoubleClick!=null&&e.self.handleMouseDoubleClick(h):e.self.handleMouseClick!=null&&e.self.handleMouseClick(h),e.lastClickTime=Date.now())}function c(h){const g=h.touches[0]||h.changedTouches[0];if(!g)return null;const b=k.renderer.domElement.getBoundingClientRect(),M=g.clientX-b.left,S=g.clientY-b.top;return{offsetX:M,offsetY:S,button:0,clientX:g.clientX,clientY:g.clientY,preventDefault:()=>h.preventDefault(),stopPropagation:()=>h.stopPropagation(),originalEvent:h}}function f(h){if(h.preventDefault(),h.touches.length!==1)return;const g=c(h);g&&o(g)}function p(h){if(h.preventDefault(),h.touches.length!==1)return;const g=c(h);g&&a(g)}function d(h){h.preventDefault();const g=c(h);g&&l(g)}function y(h,g){if(k.isModelSpaceActive?.()===!1&&k.isElementLink2d3dEnabled?.()!==!0)return null;var v=k.octreeBox2d.pick2d(h,g);return v==null?null:{point:null,id:v}}return e}class ti{el;xEl;yEl;constructor(e){this.el=document.createElement("div"),this.el.className="engine-2d-mouse-coord";const t=document.createElement("span");t.className="engine-2d-mouse-coord__label",t.textContent="",this.xEl=document.createElement("span"),this.xEl.className="engine-2d-mouse-coord__value",this.xEl.textContent="X: --",this.yEl=document.createElement("span"),this.yEl.className="engine-2d-mouse-coord__value",this.yEl.textContent="Y: --",this.el.appendChild(t),this.el.appendChild(this.xEl),this.el.appendChild(this.yEl),e.appendChild(this.el)}update(e,t){this.xEl.textContent=`X: ${e.toFixed(0)} mm`,this.yEl.textContent=`Y: ${t.toFixed(0)} mm`}reset(){this.xEl.textContent="X: --",this.yEl.textContent="Y: --"}dispose(){this.el.parentElement?.removeChild(this.el)}}var tt=(k=>(k.ModelLoadStart="model-load-start",k.ModelLoadProgress="model-load-progress",k.ModelLoaded="model-loaded",k.ModelError="model-error",k.SelectionChanged="selection-changed",k.HoverChanged="hover-changed",k.Click="click",k.MouseMove="mouse-move",k.CameraChanged="camera-changed",k.CameraIdle="camera-idle",k.EngineFree="engine-free",k.EngineBusy="engine-busy",k.MeasureChanged="measure-changed",k.MeasureClick="measure-click",k.SectionMove="section-move",k))(tt||{});class ii{engine;behavior;mouseCoordUI=null;constructor(e){this.engine=e}init(){this.behavior=this.engine.handelBehaved2d,this.behavior.init(this);const e=this.engine.container;e&&this.engine.options?.showMouseCoordinates!==!1&&(this.mouseCoordUI=new ti(e))}active(){this.behavior.active()}disActive(){this.behavior.disActive()}oldId=null;handleMouseMove(e){if(this.mouseCoordUI&&this.engine.cameraModule2d){const i=this.engine.cameraModule2d.screenToWorld(e.offsetX,e.offsetY);this.mouseCoordUI.update(i.x*1e3,i.y*1e3)}if(!this.canHandleElementInteraction()){this.engine.modelToolModule2d.unHighlightModelHover(),this.oldId=null;return}if(e.catch==null||e.catch.id==null){this.engine.modelToolModule2d.unHighlightModelHover(),this.oldId=null;return}let t=e.catch.id;if(!this.isModelInteractive(t)){this.engine.modelToolModule2d.unHighlightModelHover(),this.oldId=null;return}this.oldId!=t&&(this.engine.modelToolModule2d.highlightModelHover([t]),this.oldId=t)}handelKeyEscDown(e){this.engine.modelToolModule2d.unhighlightAllModels()}handleMouseDoubleClick(e){e.catch!=null&&e.catch.id!=null||(this.engine.modelToolModule2d.unHighlightModelHover(),this.engine.modelToolModule2d.unhighlightAllModels(),this.engine.fitToView())}handleMouseClick(e){if(this.canHandleElementInteraction())if(e.catch!=null&&this.isModelInteractive(e.catch.id)){this.engine.modelToolModule2d.highlightModel([e.catch.id]),this.engine.events.trigger(tt.Click,e.catch.id);let t=new CustomEvent("D2ElementClick",{detail:{id:e.catch.id}});window.dispatchEvent(t)}else{this.engine.modelToolModule2d.unhighlightAllModels();let t=new CustomEvent("D2ElementClick",{detail:{id:-1}});window.dispatchEvent(t)}}isModelInteractive(e){return this.engine.layerManager?.isModelVisibleByLayer?.(e)!==!1}canHandleElementInteraction(){return this.engine.isElementLink2d3dEnabled?.()===!0}dispose(){this.mouseCoordUI?.dispose(),this.mouseCoordUI=null}}class ni{overlay;hLine;vLine;box;canvas;container;style;constructor(e,t,i="full-crosshair"){this.container=e,this.canvas=t,this.style=i,t.style.cursor="none",this.overlay=document.createElement("div"),this.overlay.className=`engine-2d-cad-cursor engine-2d-cad-cursor--${i}`,this.hLine=document.createElement("div"),this.hLine.className="engine-2d-cad-cursor__h",this.vLine=document.createElement("div"),this.vLine.className="engine-2d-cad-cursor__v",this.box=document.createElement("div"),this.box.className="engine-2d-cad-cursor__box",this.overlay.appendChild(this.hLine),this.overlay.appendChild(this.vLine),this.overlay.appendChild(this.box),e.appendChild(this.overlay),this.hide(),this.bindEvents()}bindEvents(){this.canvas.addEventListener("mousemove",this.onMouseMove),this.canvas.addEventListener("mouseenter",this.onMouseEnter),this.canvas.addEventListener("mouseleave",this.onMouseLeave)}onMouseMove=e=>{this.updateFromMouseEvent(e)};updateFromMouseEvent(e){const t=this.canvas.getBoundingClientRect(),i=e.clientX-t.left,n=e.clientY-t.top;this.hLine.style.top=`${n}px`,this.vLine.style.left=`${i}px`,this.style==="short-crosshair"&&(this.hLine.style.left=`${i}px`,this.vLine.style.top=`${n}px`),this.box.style.left=`${i}px`,this.box.style.top=`${n}px`,this.show()}onMouseEnter=()=>{this.show()};onMouseLeave=()=>{this.hide()};show(){this.overlay.style.visibility="visible"}hide(){this.overlay.style.visibility="hidden"}setBackgroundColor(e){const t=e>>16&255,i=e>>8&255,n=e&255,s=(.299*t+.587*i+.114*n)/255<.5?"rgba(255,255,255,0.85)":"rgba(0,0,0,0.75)";this.container.style.setProperty("--e2d-cursor",s)}dispose(){this.canvas.removeEventListener("mousemove",this.onMouseMove),this.canvas.removeEventListener("mouseenter",this.onMouseEnter),this.canvas.removeEventListener("mouseleave",this.onMouseLeave),this.canvas.style.cursor="",this.overlay.parentElement?.removeChild(this.overlay)}}const it=[{action:"search",label:"搜索"},{action:"hideElement",label:"隐藏元素",dividerBefore:!0},{action:"showAll",label:"显示全部"},{action:"hideLayer",label:"隐藏图层",dividerBefore:!0},{action:"showAllLayers",label:"显示所有图层"},{action:"layerManage",label:"图层管理",dividerBefore:!0},{action:"toggleBg",label:"切换背景"},{action:"linkElement2d3d",label:"模型联动",dividerBefore:!0},{action:"linkView2d3d",label:"视角关联"}];class ri{menu;container;canvas;onAction;menuItemStates=new Map;constructor(e,t,i,n){this.container=e,this.canvas=t,this.onAction=i,this.menu=this.createMenu(n),e.appendChild(this.menu),this.bindEvents()}createMenu(e){const t=document.createElement("div");return t.className="engine-2d-context-menu",this.resolveMenuItems(e).forEach(i=>{if(i.dividerBefore){const r=document.createElement("div");r.className="engine-2d-context-menu__divider",t.appendChild(r)}const n=document.createElement("div");n.className="engine-2d-context-menu__item",n.textContent=i.label,n.dataset.action=i.action,n.addEventListener("click",()=>{this.hide(),this.onAction(i.action)}),t.appendChild(n)}),t}resolveMenuItems(e){return!e||e.length===0?it:e.filter(t=>t.visible!==!1).map(t=>{const i=it.find(n=>n.action===t.action);return{action:t.action,label:t.label??i?.label??t.action,dividerBefore:t.dividerBefore??i?.dividerBefore}})}bindEvents(){this.canvas.addEventListener("contextmenu",this.onContextMenu),document.addEventListener("mousedown",this.onDocMouseDown),document.addEventListener("keydown",this.onEscape)}onContextMenu=e=>{e.preventDefault();const t=this.container.getBoundingClientRect();let i=e.clientX-t.left,n=e.clientY-t.top;this.menu.style.left=`${i}px`,this.menu.style.top=`${n}px`,this.menu.classList.add("engine-2d-context-menu--visible"),this.updateMenuItemStyles();const r=this.menu.offsetWidth,s=this.menu.offsetHeight,o=this.container.clientWidth,a=this.container.clientHeight;i+r>o&&(i=o-r-4),n+s>a&&(n=a-s-4),this.menu.style.left=`${i}px`,this.menu.style.top=`${n}px`};onDocMouseDown=e=>{this.menu.contains(e.target)||this.hide()};onEscape=e=>{e.key==="Escape"&&this.hide()};hide(){this.menu.classList.remove("engine-2d-context-menu--visible")}setMenuItemState(e,t){this.menuItemStates.set(e,t)}setMenuItemStates(e){Object.entries(e).forEach(([t,i])=>{this.menuItemStates.set(t,i)})}updateMenuItemStyles(){this.menu.querySelectorAll(".engine-2d-context-menu__item").forEach(t=>{const i=t.dataset.action;this.menuItemStates.get(i)?(t.style.color="#00e682",t.style.fontWeight="bold"):(t.style.color="",t.style.fontWeight="")})}dispose(){this.canvas.removeEventListener("contextmenu",this.onContextMenu),document.removeEventListener("mousedown",this.onDocMouseDown),document.removeEventListener("keydown",this.onEscape),this.menu.parentElement?.removeChild(this.menu)}}class si{overlay=null;textEl=null;barEl=null;pctEl=null;constructor(e,t=1){this._build(e,t)}show(e="正在加载...",t=0){this.overlay&&(this.overlay.style.display="flex",this._update(e,t))}update(e,t){this.overlay?.style.display!=="none"&&this._update(e,t)}hide(){this.overlay&&(this.overlay.style.display="none")}_update(e,t){const i=Math.min(100,Math.max(0,Math.round(t)));this.textEl&&(this.textEl.textContent=e),this.barEl&&(this.barEl.style.width=`${i}%`),this.pctEl&&(this.pctEl.textContent=`${i}%`)}_build(e,t){const i=document.createElement("div");i.style.cssText=this._getOverlayStyle(t),this.overlay=i;const n=t===2?this._buildBottomPanel():this._buildCardPanel();i.appendChild(n),e.appendChild(i)}_getOverlayStyle(e){return e===2?`
120
+ `)}afterModelLoaded(e,t={}){try{const r=t.fitView??!0;r&&e?this.engine.cameraModule2d?.fitToExtents(e):r&&this.engine.fitToView()}catch{}this.engine.layerManager||(this.engine.layerManager=new Ze(this.engine)),this.engine.layerManager._loadLayers();const i=this.engine.scene?.background,n=i instanceof _.Color?i.getHex():this.engine.options?.backgroundColor??1710618;this.engine.modelToolModule2d?.updateColorsForBackground(n),this.engine.layerManager.refresh(),this.engine.events?.trigger(me.ModelLoaded,{})}createEmptyModel(){return{layers:[],modelMap:new Map,hatchMap:new Map,textMap:new Map,imageMap:new Map,nodeMap:new Map,textItems:[]}}clearModelGroup(){for(this.engine.modelGroup.rotation.set(0,0,0),this.workspaceCache.clear();this.engine.modelGroup.children.length>0;){const e=this.engine.modelGroup.children[0];this.engine.modelGroup.remove(e),this.disposeObject3d(e)}}disposeObject3d(e){e.traverse(t=>{this.disposeGeometry(t.geometry),this.disposeGeometryList(t.geometrys),this.disposeMaterial(t.material),this.disposeMaterial(t.materialClone),t.geometrys=void 0,t.clonePoints=void 0,t.materialClone=void 0})}disposeGeometry(e){e?.dispose?.()}disposeGeometryList(e){e?.forEach(t=>this.disposeGeometry(t))}disposeMaterial(e){if(Array.isArray(e)){e.forEach(t=>this.disposeMaterial(t));return}e&&(Object.values(e).forEach(t=>{t?.isTexture&&t.dispose?.()}),e.dispose?.())}_emitProgress(e,t){this.engine.events?.trigger(me.ModelLoadProgress,{progress:e,text:t})}getData(){return this.data}getEntitiesByLayer(e){return this.data?this.data.entities.filter(t=>t.layer===e):[]}getLayers(){return this.data?this.data.layers:[]}clear(){this.data=null,this.engine.dwgData=null,this.model=this.createEmptyModel(),this.clearModelGroup(),this.activeWorkspace={type:"model",name:"模型"},this.workspaceViews.clear()}dispose(){this.clear()}}class it{constructor(e,t,i){this.camera=e,this.renderer=t,this.scene=i,this.raycaster=new _.Raycaster}raycaster;worldToScreenNormalized(e){const t=e.clone();return t.project(this.camera),new _.Vector2(t.x,t.y)}worldToScreen(e){const t=new _.Vector3;return t.copy(e).project(this.camera),t.x=t.x*this.renderer.domElement.clientWidth*.5,t.y=-t.y*this.renderer.domElement.clientHeight*.5,t.z=(t.z+1)*.5,t.x+=this.renderer.domElement.clientWidth*.5,t.y+=this.renderer.domElement.clientHeight*.5,new _.Vector2(t.x,t.y)}worldToScreenIfVisible(e){if(this.camera.updateMatrixWorld(!0),this.camera instanceof _.PerspectiveCamera&&e.clone().applyMatrix4(this.camera.matrixWorldInverse).z>=0)return null;const t=e.clone().project(this.camera);if(!Number.isFinite(t.x)||!Number.isFinite(t.y)||!Number.isFinite(t.z)||t.z<-1||t.z>1)return null;const i=this.renderer.domElement.clientWidth,n=this.renderer.domElement.clientHeight;return new _.Vector2(t.x*i*.5+i*.5,-t.y*n*.5+n*.5)}screenToNormalized(e,t){const i=this.renderer.domElement.clientWidth,n=this.renderer.domElement.clientHeight,r=e/i*2-1,s=-(t/n*2-1);return new _.Vector2(r,s)}screenToWorld(e,t,i){if(!this.scene&&!i)return console.warn("WorldToScreen: 需要提供 scene 或 objects 参数才能进行屏幕坐标转世界坐标"),null;const n=this.screenToNormalized(e,t);this.raycaster.setFromCamera(n,this.camera);const r=i||this.scene.children,s=this.raycaster.intersectObjects(r,!0);return s.length>0?s[0].point:null}screenToWorldWithDepth(e,t,i=0){const n=this.screenToNormalized(e,t);this.raycaster.setFromCamera(n,this.camera);const r=new _.Vector3;return this.raycaster.ray.at(i,r),r}updateCamera(e){this.camera=e}updateRenderer(e){this.renderer=e}updateScene(e){this.scene=e}}class ii{engine;pickBoxElementIds=[];worldToScreen;invisibleMaterial=new _.MeshBasicMaterial({visible:!1});maxHoverLineCoordinateCount=3e4;maxHoverMeshVertexCount=3e4;constructor(e){this.engine=e,this.pickBoxElementIds=[],this.worldToScreen=new it(e.camera,e.renderer,e.scene)}init(){this.pickBoxElementIds=[]}pick2d(e,t){const i=[],n=new _.Vector2(t.offsetX,t.offsetY);this.init(),this.collectPickCandidates(e);const r=[];this.pickBoxElementIds.forEach(o=>{(this.engine.loaderModule2d.model.nodeMap.get(String(o))??this.engine.loaderModule2d.model.nodeMap.get(o))?.forEach(l=>{if(l==null)return;const c=this.getNodeObject(l);if(c!=null&&this.isNodePickable(l,c)&&!(t?.isHover===!0&&this.isLargeHoverNode(l,c)))if(c instanceof _.LineSegments){c.updateWorldMatrix(!0,!1);const p=c.clonePoints.slice(l.indexes[1],l.indexes[2]),d=this.readLineWorldPoints(p,c.matrixWorld);if(d.length===0)return;const y=new _.Box3().setFromPoints(d),h=e.ray.intersectsBox(y);if(h==null||h===!1)return;const g=[];for(let v=0;v<d.length/2;v+=1){const b=this.worldToScreen.worldToScreen(d[v*2]),M=this.worldToScreen.worldToScreen(d[v*2+1]);b.distanceTo(M)>1&&g.push([b,M])}g.forEach(v=>{const b=this.pointToLineDistance(n,v[0],v[1]);b<10&&r.push({distance:b,linkId:o})})}else{const f=this.getNodeGeometry(c,l);if(!f)return;c.updateWorldMatrix(!0,!1),f.applyMatrix4(c.matrixWorld);const p=new _.Mesh(f,this.invisibleMaterial);p.linkId=o,i.push(p)}})});const s=e.intersectObjects(i,!0);return i.forEach(o=>{o.geometry?.dispose?.()}),s.length>0?s[0].object.linkId:r.length>0?(r.sort((o,a)=>o.distance-a.distance),r[0].linkId):null}getNodeObject(e){return e?.object??e?.group?.children?.[e.indexes?.[0]]??this.engine.modelGroup.children[e.indexes?.[0]]}readLineWorldPoints(e,t){const i=[];for(let n=0;n<e.length;n+=3)i.push(new _.Vector3(e[n],e[n+1],e[n+2]).applyMatrix4(t));return i}collectPickCandidates(e){if(this.engine.isModelSpaceActive?.()!==!1){this.RecurrentIteration(e,this.engine.dwgData?.octree);return}const t=this.engine.loaderModule2d?.model?.nodeMap;t&&(this.pickBoxElementIds=Array.from(t.keys()).filter(i=>this.isElementPickable(i)))}getNodeGeometry(e,t){if(Array.isArray(e.geometrys)&&e.geometrys[t.indexes[1]])return e.geometrys[t.indexes[1]].clone();const i=e.geometry,n=i?.groups?.[t.indexes[1]];if(!i||!n)return null;const r=new _.BufferGeometry;return Object.keys(i.attributes).forEach(s=>{const o=i.getAttribute(s),a=o.itemSize,l=o.array,c=n.start*a,f=(n.start+n.count)*a;r.setAttribute(s,new _.BufferAttribute(l.slice(c,f),a,o.normalized))}),r}RecurrentIteration(e,t){if(t==null)return;const i=[t];for(;i.length>0;){const n=i.pop();if(!n)continue;const r=this.getBox3(n);if(r&&!e.ray.intersectsBox(r))continue;(n.elements??[]).forEach(a=>{this.isElementPickable(a)&&this.pickBoxElementIds.push(a)});const o=n.children??[];for(let a=o.length-1;a>=0;a-=1)i.push(o[a])}}getBox3(e){const t=this.toVector3(e.min),i=this.toVector3(e.max);return!t||!i?null:new _.Box3(new _.Vector3(Math.min(t.x,i.x),Math.min(t.y,i.y),Math.min(t.z,i.z)),new _.Vector3(Math.max(i.x,t.x),Math.max(i.y,t.y),Math.max(i.z,t.z)))}toVector3(e){return Array.isArray(e)?new _.Vector3(e[0]??0,e[1]??0,e[2]??0):e&&typeof e=="object"?new _.Vector3(e.X??e.x??0,e.Y??e.y??0,e.Z??e.z??0):null}isElementPickable(e){let t=this.engine.engineStatus2d.hideModels;return!(t!=null&&t.includes(e)||(t=this.engine.engineStatus2d.highlightModels,t!=null&&t.includes(e))||this.engine.layerManager?.isModelVisibleByLayer?.(e)===!1)}isNodePickable(e,t){return t?.visible===!1?!1:this.getNodeLayerDeps(e).every(i=>this.engine.layerManager?.isLayerVisible?.(i)!==!1)}getNodeLayerDeps(e){const t=Array.isArray(e?.layerDeps)&&e.layerDeps.length>0?e.layerDeps:[e?.layer];return Array.from(new Set(t.map(i=>String(i??"")).filter(Boolean)))}isLargeHoverNode(e,t){return t instanceof _.LineSegments?Math.max(0,(e.indexes?.[2]??0)-(e.indexes?.[1]??0))>this.maxHoverLineCoordinateCount:(t?.geometry?.groups?.[e.indexes?.[1]]?.count??0)>this.maxHoverMeshVertexCount}pointToLineDistance(e,t,i){const n=new _.Vector2().subVectors(i,t),r=n.lengthSq();if(r<1e-10)return e.distanceTo(t);const s=new _.Vector2().subVectors(e,t),o=_.MathUtils.clamp(s.dot(n)/r,0,1),a=new _.Vector2().copy(n).multiplyScalar(o).add(t);return e.distanceTo(a)}}class ni{engine;widgetContainer=null;widgetCanvas=null;widgetCtx=null;widgetSize=50;isDragging=!1;isRotating=!1;lastMouseX=0;lastMouseY=0;widgetX=this.widgetSize/2+5;widgetY=this.widgetSize/2+5;widgetRotation=0;rotationStartAngle=null;widgetRotationStart=0;worldToScreen;currentWordPosition=null;currentWordRotation=null;lastCameraWorldPosition=null;enabled=!1;constructor(e){this.engine=e,this.worldToScreen=new it(e.camera,e.renderer,e.scene),this.initWidget();let t=this;this.engine.controlModule2d.panControls.addEventListener("change",()=>{t.updateViewPoint()})}toggle(){return this.enabled=!this.enabled,this.enabled?(this.active(),this.widgetContainer&&(this.widgetContainer.style.display="block")):(this.disActive(),this.widgetContainer&&(this.widgetContainer.style.display="none")),this.enabled}isEnabled(){return this.enabled}initWidget(){const e=window.devicePixelRatio||1;this.widgetContainer=document.createElement("div"),this.widgetContainer.className="MapController",this.widgetContainer.style.position="absolute",this.widgetContainer.style.width=`${this.widgetSize}px`,this.widgetContainer.style.height=`${this.widgetSize}px`,this.widgetContainer.style.border="2px solid rgba(255, 255, 255, 0.4)",this.widgetContainer.style.borderRadius="50%",this.widgetContainer.style.overflow="hidden",this.widgetContainer.style.backgroundColor="rgba(26, 26, 46, 0.85)",this.widgetContainer.style.cursor="crosshair",this.widgetContainer.style.userSelect="none",this.widgetContainer.style.pointerEvents="auto",this.syncWidgetPosition(),this.widgetCanvas=document.createElement("canvas"),this.widgetContainer.className="MapController",this.widgetCanvas.width=this.widgetSize*e,this.widgetCanvas.height=this.widgetSize*e,this.widgetCanvas.style.position="absolute",this.widgetCanvas.style.top="0",this.widgetCanvas.style.left="0",this.widgetCanvas.style.width=`${this.widgetSize}px`,this.widgetCanvas.style.height=`${this.widgetSize}px`,this.widgetCanvas.style.pointerEvents="auto",this.widgetContainer.style.zIndex="1000",this.widgetContainer.appendChild(this.widgetCanvas),this.widgetCtx=this.widgetCanvas.getContext("2d"),this.widgetCtx&&this.widgetCtx.scale(e,e),this.setupWidgetEvents(),this.engine.container&&this.engine.container.appendChild(this.widgetContainer),!this.enabled&&this.widgetContainer&&(this.widgetContainer.style.display="none"),this.drawWidget()}setupWidgetEvents(){this.widgetContainer&&(this.widgetContainer.addEventListener("mousedown",this.onWidgetCanvasMouseDown),this.widgetCanvas&&this.widgetCanvas.addEventListener("mousedown",this.onWidgetCanvasMouseDown),window.addEventListener("mousemove",this.onWidgetMouseMove),window.addEventListener("mouseup",this.onWidgetMouseUp),this.widgetContainer.addEventListener("contextmenu",e=>{e.preventDefault(),e.stopPropagation()}),this.widgetCanvas&&this.widgetCanvas.addEventListener("contextmenu",e=>{e.preventDefault(),e.stopPropagation()}))}onWidgetCanvasMouseDown=e=>{this.widgetContainer&&(e.button==0?(this.isDragging=!1,this.isRotating=!0):(this.isDragging=!0,this.isRotating=!1),this.captureRotationBaseline(e),this.lastMouseX=e.clientX,this.lastMouseY=e.clientY,this.widgetContainer&&(this.widgetContainer.style.cursor="alias"),e.preventDefault(),e.stopPropagation())};onWidgetMouseMove=e=>{if(!this.isDragging&&!this.isRotating)return;const t=e.clientX-this.lastMouseX,i=e.clientY-this.lastMouseY;if(this.isDragging)this.widgetX+=t,this.widgetY+=i,console.log(`[LinkView2d3d] 拖动位置更新: x=${this.widgetX.toFixed(0)}, y=${this.widgetY.toFixed(0)}`),this.syncWidgetPosition(),this.handleWidgetPositionControl();else if(this.isRotating){const n=this.calculatePointerAngle(e);if(n!==null){this.rotationStartAngle===null&&(this.rotationStartAngle=n,this.widgetRotationStart=this.widgetRotation);const r=n-this.rotationStartAngle;this.widgetRotation=this.widgetRotationStart+r,console.log(`[LinkView2d3d] 旋转角度更新: ${(this.widgetRotation*180/Math.PI).toFixed(1)}°`),this.drawWidget(),this.handleWidgetRotationControl()}}this.lastMouseX=e.clientX,this.lastMouseY=e.clientY};onWidgetMouseUp=()=>{this.isDragging&&console.log(`[LinkView2d3d] 拖动结束,最终位置: x=${this.widgetX.toFixed(0)}, y=${this.widgetY.toFixed(0)}`),this.isRotating&&console.log(`[LinkView2d3d] 旋转结束,最终角度: ${(this.widgetRotation*180/Math.PI).toFixed(1)}°`),this.isDragging=!1,this.isRotating=!1,this.rotationStartAngle=null,this.widgetContainer&&(this.widgetContainer.style.cursor="crosshair")};drawWidget(){const e=this.widgetCtx;if(!e)return;const t=this.widgetSize/2,i=this.widgetSize/2;e.clearRect(0,0,this.widgetSize,this.widgetSize),e.save(),e.translate(t,i),e.rotate(this.widgetRotation);const n=36,r=Math.PI/10,s=e.createRadialGradient(0,0,2,0,0,n);s.addColorStop(0,"rgba(0, 230, 130, 0.9)"),s.addColorStop(1,"rgba(0, 230, 130, 0)");const o=-Math.sin(r)*n,a=-Math.cos(r)*n,l=Math.sin(r)*n,c=-Math.cos(r)*n;e.beginPath(),e.moveTo(0,0),e.lineTo(o,a),e.lineTo(l,c),e.closePath(),e.fillStyle=s,e.fill(),e.fillStyle="rgba(255, 255, 255, 0.95)",e.strokeStyle="rgba(0, 200, 110, 0.9)",e.lineWidth=1.5,e.beginPath(),e.arc(0,0,4,0,Math.PI*2),e.fill(),e.stroke(),e.restore()}active(){window.addEventListener("D3ViewUpdate",this.listenViewUpdate)}disActive(){window.removeEventListener("D3ViewUpdate",this.listenViewUpdate)}disposeWidget(){this.widgetContainer&&this.widgetContainer.removeEventListener("mousedown",this.onWidgetMouseDown),this.widgetCanvas&&this.widgetCanvas.removeEventListener("mousedown",this.onWidgetCanvasMouseDown),window.removeEventListener("mousemove",this.onWidgetMouseMove),window.removeEventListener("mouseup",this.onWidgetMouseUp),this.widgetContainer?.remove(),this.widgetContainer=null,this.widgetCanvas=null,this.widgetCtx=null}listenViewUpdate=e=>{console.log("[LinkView2d3d] 收到视图更新事件",e),e=e.detail,e&&e.position&&(this.lastCameraWorldPosition=new _.Vector3(e.position.x,e.position.y,e.position.z),this.currentWordPosition=new _.Vector3(e.position.x,-e.position.z,0)),e&&typeof e.rotation=="number"&&(this.currentWordRotation=e.rotation),this.updateViewPoint()};updateViewPoint(){if(this.currentWordPosition){let e=this.worldToScreen.worldToScreen(this.currentWordPosition);this.widgetX=e.x,this.widgetY=e.y,this.syncWidgetPosition()}this.currentWordRotation!==null&&(this.widgetRotation=this.currentWordRotation,this.drawWidget())}syncWidgetPosition(){if(!this.widgetContainer)return;const e=this.widgetSize/2;this.widgetContainer.style.left=`${this.widgetX-e}px`,this.widgetContainer.style.top=`${this.widgetY-e}px`}handleWidgetPositionControl(){const e=this.getWidgetWorldPosition();e&&(this.currentWordPosition=e,this.dispatchViewControl("move",{position2d:e}))}handleWidgetRotationControl(){this.currentWordRotation=this.widgetRotation,this.dispatchViewControl("rotate",{rotation:this.widgetRotation})}getWidgetWorldPosition(){if(!this.engine?.cameraModule2d?.screenToWorld)return null;const e=this.engine.cameraModule2d.screenToWorld(this.widgetX,this.widgetY);return e?new _.Vector3(e.x,e.y,0):null}dispatchViewControl(e,t){const i=!!t.position2d,n=typeof t.rotation=="number";if(!i&&!n)return;if(i&&!this.lastCameraWorldPosition){console.warn("[LinkView2d3d] 未获取到 3D 相机位置,暂不推送位置控制");return}const r={source:"LinkView2d3d",mode:e};if(t.position2d&&this.lastCameraWorldPosition){const s=this.lastCameraWorldPosition.y,o=-t.position2d.y;r.position={x:t.position2d.x,y:s,z:o},this.lastCameraWorldPosition=new _.Vector3(t.position2d.x,s,o)}n&&(r.rotation=t.rotation),window.dispatchEvent(new CustomEvent("D2ViewControl",{detail:r}))}captureRotationBaseline(e){const t=this.calculatePointerAngle(e);if(t===null){this.rotationStartAngle=null;return}this.rotationStartAngle=t,this.widgetRotationStart=this.widgetRotation}calculatePointerAngle(e){if(!this.widgetContainer)return null;const t=this.widgetContainer.getBoundingClientRect(),i=t.left+t.width/2,n=t.top+t.height/2;return Math.atan2(e.clientX-i,n-e.clientY)}}class ri{engine;enabled=!1;constructor(e){this.engine=e}toggle(){return this.enabled=!this.enabled,this.enabled?this.active():this.disActive(),this.enabled}isEnabled(){return this.enabled}active(){window.addEventListener("D3ElementClick",this.listenElementClick)}disActive(){window.removeEventListener("D3ElementClick",this.listenElementClick)}listenElementClick=e=>{const t=String(e?.detail?.id),i=this.engine.loaderModule2d?.model?.nodeMap?.get(t),n=this.getNodesWorldBounds(i);if(n){this.engine.modelToolModule2d.highlightModel([t]),this.engine.cameraModule2d.fitToExtents({min:[n.min.x,n.min.y],max:[n.max.x,n.max.y]},3);return}this.engine.modelToolModule2d.unhighlightAllModels()};getNodesWorldBounds(e){if(!Array.isArray(e)||e.length===0)return null;const t=new _.Box3;let i=!1;return e.forEach(n=>{const r=this.getNodeWorldBounds(n);r&&(t.union(r),i=!0)}),i?t:null}getNodeWorldBounds(e){if(!e?.min||!e?.max)return null;const t=this.getNodeObject(e);if(!t||t.visible===!1)return null;t.updateWorldMatrix?.(!0,!1);const i=new _.Box3(e.min.clone(),e.max.clone()).applyMatrix4(t.matrixWorld);return!Number.isFinite(i.min.x)||!Number.isFinite(i.min.y)||!Number.isFinite(i.max.x)||!Number.isFinite(i.max.y)?null:i}getNodeObject(e){return e?.object??e?.group?.children?.[e.indexes?.[0]]??this.engine.modelGroup?.children?.[e.indexes?.[0]]}}class si{engine;highlightMaterial;hideMaterial;translucentMaterial;lightBackgroundWhiteColor=0;darkBackgroundWhiteColor=16777215;maxHoverLineCoordinateCount=3e4;maxHoverMeshVertexCount=3e4;constructor(e){this.engine=e,this.highlightMaterial=new _.MeshBasicMaterial({color:43775,depthTest:!1,depthWrite:!1,transparent:!0,opacity:.5,side:_.DoubleSide}),this.hideMaterial=new _.MeshBasicMaterial({color:0,transparent:!0,opacity:0,side:_.DoubleSide}),this.translucentMaterial=new _.MeshBasicMaterial({color:this.getHoverHighlightColor(),depthTest:!1,depthWrite:!1,transparent:!0,opacity:.5,side:_.DoubleSide}),this.highlightMaterial.clippingPlanes=this.engine.sectionPlane,this.hideMaterial.clippingPlanes=this.engine.sectionPlane,this.translucentMaterial.clippingPlanes=this.engine.sectionPlane}split_merge_model(e){if(e.isSplit||e instanceof _.InstancedMesh)return;const t=e.materialClone.clone(),i=Array.isArray(e.geometrys)&&e.geometrys.length>0?Ce(e.geometrys,!0):e.geometry;i.groups.forEach(n=>{n.materialIndex=0}),e.geometry=i,e.material=[t,this.highlightMaterial,this.translucentMaterial],e.needsUpdate=!0,e.isSplit=!0}un_split_merge_model(e){}getNodeObject(e){return e?.object??e?.group?.children?.[e.indexes?.[0]]??this.engine.modelGroup.children[e.indexes?.[0]]}forEachNode(e,t){(e??[]).forEach(i=>{const n=this.engine.loaderModule2d.model.nodeMap.get(String(i))??this.engine.loaderModule2d.model.nodeMap.get(i);n?.forEach(r=>{if(r==null||r.indexes==null)return;const s=this.getNodeObject(r);s!=null&&t(r,s,i)})})}getHoverHighlightColor(){const e=this.engine.scene?.background;return e instanceof _.Color?.299*e.r+.587*e.g+.114*e.b>.5?6735871:16777215:this.engine.themeManager?.getTheme?.()==="light"?6735871:16777215}updateColorsForBackground(e){const t=this.isLightBackground(e);this.engine.modelGroup?.traverse?.(i=>{this.updateObjectMaterialColor(i,t),this.updateVertexColors(i,t)})}getDisplayColor(e){return this.isCurrentBackgroundLight()&&this.isWhiteColor(e)?this.lightBackgroundWhiteColor:e}updateObjectMaterialColor(e,t){const i=this.resolveOriginalColor(e);if(i==null||!this.isWhiteColor(i))return;const n=t?this.lightBackgroundWhiteColor:this.darkBackgroundWhiteColor,r=s=>{s?.color&&s.color.setHex(n)};Array.isArray(e.material)?e.material.forEach(r):r(e.material),r(e.materialClone)}updateVertexColors(e,t){const i=e.geometry,n=i?.getAttribute("color");if(!i||!n)return;e.userData.originalColorAttribute||(e.userData.originalColorAttribute=n.clone());const r=e.userData.originalColorAttribute,s=n.array;for(let o=0;o<r.count;o+=1){const a=r.getX(o),l=r.getY(o),c=r.getZ(o),f=t&&this.isWhiteRgb(a,l,c);s[o*3]=f?0:a,s[o*3+1]=f?0:l,s[o*3+2]=f?0:c}n.needsUpdate=!0}resolveOriginalColor(e){if(typeof e.userData?.originalDisplayColor=="number")return e.userData.originalDisplayColor;const[t,i]=String(e.name??"").split("||");let n=Number.parseInt(i);return(n===0||Number.isNaN(n))&&(n=this.engine.loaderModule2d?.model?.layers?.find(s=>s.name===t)?.color),typeof n!="number"||Number.isNaN(n)?null:(e.userData.originalDisplayColor=n,n)}isCurrentBackgroundLight(){const e=this.engine.scene?.background;return e instanceof _.Color?.299*e.r+.587*e.g+.114*e.b>.5:this.engine.themeManager?.getTheme?.()==="light"}isLightBackground(e){const t=new _.Color(e);return .299*t.r+.587*t.g+.114*t.b>.5}isWhiteColor(e){return(e&16777215)===16777215}isWhiteRgb(e,t,i){return e>.99&&t>.99&&i>.99}highlightModelHover(e){e=this.filterVisibleLayerModels(e),e=this.filterHoverableModels(e),this.unHighlightModelHover(),e.length!==0&&(this.engine.engineStatus2d.highlightHoverModels=e,this.translucentMaterial.color.setHex(this.getHoverHighlightColor()),this.forEachNode(e,(t,i)=>{if(i instanceof _.LineSegments){const n=this.getLineNodePoints(t,i);this.highLightRenderLineHover(n)}else{this.split_merge_model(i);const n=i.geometry?.groups?.[t.indexes[1]];n&&(n.materialIndex=2)}}))}unHighlightModelHover(){const e=this.engine.engineStatus2d.highlightHoverModels??[],t=new Set((this.engine.engineStatus2d.highlightModels??[]).map(i=>String(i)));this.forEachNode(e,(i,n,r)=>{if(n instanceof _.LineSegments)return;const s=n.geometry?.groups?.[i.indexes[1]];s&&(s.materialIndex=t.has(String(r))?1:0)}),this.engine.engineStatus2d.highlightHoverModels=[],this.unhighLightRenderLineHover()}highlightModel(e){e=this.filterVisibleLayerModels(e),e.length!==0&&(this.unHighlightModelHover(),this.engine.engineStatus2d.highlightModels=e,this.forEachNode(e,(t,i)=>{if(i instanceof _.LineSegments){const n=this.getLineNodePoints(t,i);this.highLightRenderLine(n)}else this.split_merge_model(i),i.geometry.groups[t.indexes[1]].materialIndex=1}))}unhighlightModel(e){this.forEachNode(e,(t,i)=>{i instanceof _.LineSegments||(i.geometry.groups[t.indexes[1]].materialIndex=0)}),this.unhighLightRenderLine()}unhighlightAllModels(e=!0){this.engine.engineStatus2d.highlightModels.forEach(t=>{this.unhighlightModel([t])}),e&&(this.engine.engineStatus2d.highlightModels=[])}hideModel(e){this.unhighlightAllModels(),this.forEachNode(e,(t,i)=>{if(i instanceof _.LineSegments){const n=i.geometry.attributes.position.array;for(let r=t.indexes[1];r<t.indexes[2];r+=1)n[r]=NaN;i.geometry.attributes.position.needsUpdate=!0}else this.split_merge_model(i),i.geometry.groups[t.indexes[1]].materialIndex=-1}),this.engine.engineStatus2d.hideModels.push(...e)}showModel(e){this.forEachNode(e,(t,i)=>{if(i instanceof _.LineSegments){const n=i.geometry.attributes.position.array,r=i;for(let s=t.indexes[1];s<t.indexes[2];s+=1)n[s]=r.clonePoints[s];i.geometry.attributes.position.needsUpdate=!0}else this.split_merge_model(i),i.geometry.groups[t.indexes[1]].materialIndex=0}),this.engine.engineStatus2d.hideModels=[]}showAllModels(){this.engine.engineStatus2d.hideModels&&this.engine.engineStatus2d.hideModels.length>0&&this.showModel(this.engine.engineStatus2d.hideModels),this.engine.engineStatus2d.hideModels=[],this.unhighlightAllModels()}getLineNodePoints(e,t){const i=t.clonePoints.slice(e.indexes[1],e.indexes[2]);t.updateWorldMatrix(!0,!1),this.engine.modelGroup?.updateWorldMatrix?.(!0,!1);const n=new _.Matrix4,r=new _.Matrix4().copy(this.engine.modelGroup.matrixWorld).invert();n.multiplyMatrices(r,t.matrixWorld);const s=[];for(let o=0;o<i.length;o+=3){const a=new _.Vector3(i[o],i[o+1],i[o+2]).applyMatrix4(n);s.push(a.x,a.y,a.z)}return s}highLightRenderLine(e){const t=new _.BufferGeometry;t.setAttribute("position",new _.Float32BufferAttribute(e,3));const i=new _.LineBasicMaterial({color:43775,depthTest:!1,depthWrite:!1}),n=new _.LineSegments(t,i);n.name="HighLight",n.renderOrder=999,this.engine.modelGroup.add(n)}unhighLightRenderLine(){this.engine.modelGroup.children.filter(e=>e.name==="HighLight").forEach(e=>{this.engine.modelGroup.remove(e),this.disposeTemporaryObject(e)})}highLightRenderLineHover(e){const t=new _.BufferGeometry;t.setAttribute("position",new _.Float32BufferAttribute(e,3));const i=new _.LineBasicMaterial({color:this.getHoverHighlightColor(),depthTest:!1,depthWrite:!1}),n=new _.LineSegments(t,i);n.name="HighLightHover",n.renderOrder=999,this.engine.modelGroup.add(n)}unhighLightRenderLineHover(){this.engine.modelGroup.children.filter(e=>e.name==="HighLightHover").forEach(e=>{this.engine.modelGroup.remove(e),this.disposeTemporaryObject(e)})}disposeTemporaryObject(e){e.geometry?.dispose?.();const t=e.material,i=n=>{n===this.highlightMaterial||n===this.translucentMaterial||n===this.hideMaterial||n?.dispose?.()};Array.isArray(t)?t.forEach(i):i(t)}filterVisibleLayerModels(e){return(e??[]).filter(t=>this.engine.layerManager?.isModelVisibleByLayer?.(t)!==!1)}filterHoverableModels(e){return(e??[]).filter(t=>this.isHoverableModel(t))}isHoverableModel(e){const t=this.engine.loaderModule2d.model.nodeMap.get(String(e))??this.engine.loaderModule2d.model.nodeMap.get(e);if(!t||t.length===0)return!1;let i=0,n=0;for(const r of t){if(r==null||r.indexes==null)continue;const s=this.getNodeObject(r);if(s instanceof _.LineSegments){if(i+=Math.max(0,(r.indexes[2]??0)-(r.indexes[1]??0)),i>this.maxHoverLineCoordinateCount)return!1;continue}const o=s?.geometry?.groups?.[r.indexes[1]];if(n+=o?.count??0,n>this.maxHoverMeshVertexCount)return!1}return!0}}function oi(k){const e={mouseMoveFrame:null,latestMouseMoveEvent:null,self:null,options:null,mouseDownTime:0,mouseDownPosition:null,lastClickTime:0};e.init=function(h,g){e.self!=null&&e.self.disActive!=null&&e.self.type!=h.type&&e.self.disActive(),e.self=h,g==null&&(g={showCatch:!1}),e.options=g},e.render=function(){e.self&&e.self.render!=null&&e.self.render()},e.active=function(){k.renderer.domElement.addEventListener("mousedown",o),k.renderer.domElement.addEventListener("mouseup",l),k.renderer.domElement.addEventListener("mousemove",a),k.renderer.domElement.addEventListener("touchstart",f,{passive:!1}),k.renderer.domElement.addEventListener("touchend",d,{passive:!1}),k.renderer.domElement.addEventListener("touchmove",p,{passive:!1}),window.addEventListener("keydown",t),window.addEventListener("keyup",i)},e.disActive=function(){k.renderer.domElement.removeEventListener("mousedown",o),k.renderer.domElement.removeEventListener("mouseup",l),k.renderer.domElement.removeEventListener("mousemove",a),k.renderer.domElement.removeEventListener("touchstart",f),k.renderer.domElement.removeEventListener("touchend",d),k.renderer.domElement.removeEventListener("touchmove",p),window.removeEventListener("keydown",t),window.removeEventListener("keyup",i),e.mouseMoveFrame!=null&&(cancelAnimationFrame(e.mouseMoveFrame),e.mouseMoveFrame=null,e.latestMouseMoveEvent=null)};function t(h){(h.keyCode===8||h.keyCode===46)&&e.self&&e.self.handelKeyDeleteDown!=null&&e.self.handelKeyDeleteDown(),h.keyCode===27&&e.self&&e.self.handelKeyEscDown!=null&&e.self.handelKeyEscDown(),h.keyCode===13&&e.self&&e.self.handelKeyEnterDown!=null&&e.self.handelKeyEnterDown(),h.keyCode===32&&e.self&&e.self.handelKeySpaceDown!=null&&e.self.handelKeySpaceDown(),h.key==="Control"&&e.self&&e.self.handelKeyCtrlDown!=null&&e.self.handelKeyCtrlDown(),h.key==="Delete"&&e.self&&e.self.handelKeyDeleteDown!=null&&e.self.handelKeyDeleteDown(),h.key==="Shift"&&e.self&&e.self.handelKeyShiftDown!=null&&e.self.handelKeyShiftDown(),h.key==="Meta"&&e.self&&e.self.handelKeyMetaDown!=null&&e.self.handelKeyMetaDown()}function i(h){h.key==="Alt"&&e.self&&e.self.handelKeyAltUp!=null&&e.self.handelKeyAltUp(),h.key==="Tab"&&e.self&&e.self.handelKeyTabUp!=null&&e.self.handelKeyTabUp(),h.key==="Control"&&e.self&&e.self.handelKeyCtrlUp!=null&&e.self.handelKeyCtrlUp(),h.key==="Shift"&&e.self&&e.self.handelKeyShiftUp!=null&&e.self.handelKeyShiftUp(),h.key==="Meta"&&e.self&&e.self.handelKeyMetaUp!=null&&e.self.handelKeyMetaUp(),h.key==="Command"&&e.self&&e.self.handelKeyCommandUp!=null&&e.self.handelKeyCommandUp(),h.key==="Windows"&&e.self&&e.self.handelKeyWindowsUp!=null&&e.self.handelKeyWindowsUp()}function n(h){const g=new _.Vector2,v=k.renderer.domElement.clientWidth,b=k.renderer.domElement.clientHeight;return g.x=h.offsetX/v*2-1,g.y=-(h.offsetY/b)*2+1,g}function r(h){const g=new _.Raycaster,v=n(h);return g.setFromCamera(v,k.camera),g}function s(h,g=!1){const v=r(h);if(h.raycaster=v,g){const b=y(v,h);h.catch=b}}function o(h){h.button===0&&(e.mouseDownTime=Date.now(),e.mouseDownPosition=new _.Vector3(h.offsetX,h.offsetY,0),e.self&&e.self.handleMouseDown!=null&&(k.engineStatus.isFree=!0,s(h,!0),h.catch!=null&&k.controlModule.orbitControls.origin.set(h.catch.point.x,h.catch.point.y,h.catch.point.z),e.self.handleMouseDown(h)))}function a(h){e.latestMouseMoveEvent=h,e.mouseMoveFrame==null&&(e.mouseMoveFrame=requestAnimationFrame(()=>{const g=e.latestMouseMoveEvent;e.latestMouseMoveEvent=null,e.mouseMoveFrame=null,g&&(g.isHover=!0,s(g,!0),e.self&&e.self.handleMouseMove!=null&&e.self.handleMouseMove(g))}))}function l(h){if(h.button!==0)return;const g=Date.now(),v=g-e.mouseDownTime,b=new _.Vector3(h.offsetX,h.offsetY,0);e.self&&e.self.handleMouseUp!=null&&(s(h,!1),e.self.handleMouseUp(h));const M=b.distanceTo(e.mouseDownPosition);(v<100||M==0)&&e.self&&e.self.handleMouseClick!=null&&(s(h,!0),g-e.lastClickTime<200?e.self.handleMouseDoubleClick!=null&&e.self.handleMouseDoubleClick(h):e.self.handleMouseClick!=null&&e.self.handleMouseClick(h),e.lastClickTime=Date.now())}function c(h){const g=h.touches[0]||h.changedTouches[0];if(!g)return null;const b=k.renderer.domElement.getBoundingClientRect(),M=g.clientX-b.left,S=g.clientY-b.top;return{offsetX:M,offsetY:S,button:0,clientX:g.clientX,clientY:g.clientY,preventDefault:()=>h.preventDefault(),stopPropagation:()=>h.stopPropagation(),originalEvent:h}}function f(h){if(h.preventDefault(),h.touches.length!==1)return;const g=c(h);g&&o(g)}function p(h){if(h.preventDefault(),h.touches.length!==1)return;const g=c(h);g&&a(g)}function d(h){h.preventDefault();const g=c(h);g&&l(g)}function y(h,g){if(k.isModelSpaceActive?.()===!1&&k.isElementLink2d3dEnabled?.()!==!0)return null;var v=k.octreeBox2d.pick2d(h,g);return v==null?null:{point:null,id:v}}return e}class ai{el;xEl;yEl;constructor(e){this.el=document.createElement("div"),this.el.className="engine-2d-mouse-coord";const t=document.createElement("span");t.className="engine-2d-mouse-coord__label",t.textContent="",this.xEl=document.createElement("span"),this.xEl.className="engine-2d-mouse-coord__value",this.xEl.textContent="X: --",this.yEl=document.createElement("span"),this.yEl.className="engine-2d-mouse-coord__value",this.yEl.textContent="Y: --",this.el.appendChild(t),this.el.appendChild(this.xEl),this.el.appendChild(this.yEl),e.appendChild(this.el)}update(e,t){this.xEl.textContent=`X: ${e.toFixed(0)} mm`,this.yEl.textContent=`Y: ${t.toFixed(0)} mm`}reset(){this.xEl.textContent="X: --",this.yEl.textContent="Y: --"}dispose(){this.el.parentElement?.removeChild(this.el)}}var nt=(k=>(k.ModelLoadStart="model-load-start",k.ModelLoadProgress="model-load-progress",k.ModelLoaded="model-loaded",k.ModelError="model-error",k.SelectionChanged="selection-changed",k.HoverChanged="hover-changed",k.Click="click",k.MouseMove="mouse-move",k.CameraChanged="camera-changed",k.CameraIdle="camera-idle",k.EngineFree="engine-free",k.EngineBusy="engine-busy",k.MeasureChanged="measure-changed",k.MeasureClick="measure-click",k.SectionMove="section-move",k))(nt||{});class li{engine;behavior;mouseCoordUI=null;constructor(e){this.engine=e}init(){this.behavior=this.engine.handelBehaved2d,this.behavior.init(this);const e=this.engine.container;e&&this.engine.options?.showMouseCoordinates!==!1&&(this.mouseCoordUI=new ai(e))}active(){this.behavior.active()}disActive(){this.behavior.disActive()}oldId=null;handleMouseMove(e){if(this.mouseCoordUI&&this.engine.cameraModule2d){const i=this.engine.cameraModule2d.screenToWorld(e.offsetX,e.offsetY);this.mouseCoordUI.update(i.x*1e3,i.y*1e3)}if(!this.canHandleElementInteraction()){this.engine.modelToolModule2d.unHighlightModelHover(),this.oldId=null;return}if(e.catch==null||e.catch.id==null){this.engine.modelToolModule2d.unHighlightModelHover(),this.oldId=null;return}let t=e.catch.id;if(!this.isModelInteractive(t)){this.engine.modelToolModule2d.unHighlightModelHover(),this.oldId=null;return}this.oldId!=t&&(this.engine.modelToolModule2d.highlightModelHover([t]),this.oldId=t)}handelKeyEscDown(e){this.engine.modelToolModule2d.unhighlightAllModels()}handleMouseDoubleClick(e){e.catch!=null&&e.catch.id!=null||(this.engine.modelToolModule2d.unHighlightModelHover(),this.engine.modelToolModule2d.unhighlightAllModels(),this.engine.fitToView())}handleMouseClick(e){if(this.canHandleElementInteraction())if(e.catch!=null&&this.isModelInteractive(e.catch.id)){this.engine.modelToolModule2d.highlightModel([e.catch.id]),this.engine.events.trigger(nt.Click,e.catch.id);let t=new CustomEvent("D2ElementClick",{detail:{id:e.catch.id}});window.dispatchEvent(t)}else{this.engine.modelToolModule2d.unhighlightAllModels();let t=new CustomEvent("D2ElementClick",{detail:{id:-1}});window.dispatchEvent(t)}}isModelInteractive(e){return this.engine.layerManager?.isModelVisibleByLayer?.(e)!==!1}canHandleElementInteraction(){return this.engine.isElementLink2d3dEnabled?.()===!0}dispose(){this.mouseCoordUI?.dispose(),this.mouseCoordUI=null}}class hi{overlay;hLine;vLine;box;canvas;container;style;constructor(e,t,i="full-crosshair"){this.container=e,this.canvas=t,this.style=i,t.style.cursor="none",this.overlay=document.createElement("div"),this.overlay.className=`engine-2d-cad-cursor engine-2d-cad-cursor--${i}`,this.hLine=document.createElement("div"),this.hLine.className="engine-2d-cad-cursor__h",this.vLine=document.createElement("div"),this.vLine.className="engine-2d-cad-cursor__v",this.box=document.createElement("div"),this.box.className="engine-2d-cad-cursor__box",this.overlay.appendChild(this.hLine),this.overlay.appendChild(this.vLine),this.overlay.appendChild(this.box),e.appendChild(this.overlay),this.hide(),this.bindEvents()}bindEvents(){this.canvas.addEventListener("mousemove",this.onMouseMove),this.canvas.addEventListener("mouseenter",this.onMouseEnter),this.canvas.addEventListener("mouseleave",this.onMouseLeave)}onMouseMove=e=>{this.updateFromMouseEvent(e)};updateFromMouseEvent(e){const t=this.canvas.getBoundingClientRect(),i=e.clientX-t.left,n=e.clientY-t.top;this.hLine.style.top=`${n}px`,this.vLine.style.left=`${i}px`,this.style==="short-crosshair"&&(this.hLine.style.left=`${i}px`,this.vLine.style.top=`${n}px`),this.box.style.left=`${i}px`,this.box.style.top=`${n}px`,this.show()}onMouseEnter=()=>{this.show()};onMouseLeave=()=>{this.hide()};show(){this.overlay.style.visibility="visible"}hide(){this.overlay.style.visibility="hidden"}setBackgroundColor(e){const t=e>>16&255,i=e>>8&255,n=e&255,s=(.299*t+.587*i+.114*n)/255<.5?"rgba(255,255,255,0.85)":"rgba(0,0,0,0.75)";this.container.style.setProperty("--e2d-cursor",s)}dispose(){this.canvas.removeEventListener("mousemove",this.onMouseMove),this.canvas.removeEventListener("mouseenter",this.onMouseEnter),this.canvas.removeEventListener("mouseleave",this.onMouseLeave),this.canvas.style.cursor="",this.overlay.parentElement?.removeChild(this.overlay)}}const rt=[{action:"search",label:"搜索"},{action:"hideElement",label:"隐藏元素",dividerBefore:!0},{action:"showAll",label:"显示全部"},{action:"hideLayer",label:"隐藏图层",dividerBefore:!0},{action:"showAllLayers",label:"显示所有图层"},{action:"layerManage",label:"图层管理",dividerBefore:!0},{action:"toggleBg",label:"切换背景"},{action:"linkElement2d3d",label:"模型联动",dividerBefore:!0},{action:"linkView2d3d",label:"视角关联"}];class ci{menu;container;canvas;onAction;menuItemStates=new Map;constructor(e,t,i,n){this.container=e,this.canvas=t,this.onAction=i,this.menu=this.createMenu(n),e.appendChild(this.menu),this.bindEvents()}createMenu(e){const t=document.createElement("div");return t.className="engine-2d-context-menu",this.resolveMenuItems(e).forEach(i=>{if(i.dividerBefore){const r=document.createElement("div");r.className="engine-2d-context-menu__divider",t.appendChild(r)}const n=document.createElement("div");n.className="engine-2d-context-menu__item",n.textContent=i.label,n.dataset.action=i.action,n.addEventListener("click",()=>{this.hide(),this.onAction(i.action)}),t.appendChild(n)}),t}resolveMenuItems(e){return!e||e.length===0?rt:e.filter(t=>t.visible!==!1).map(t=>{const i=rt.find(n=>n.action===t.action);return{action:t.action,label:t.label??i?.label??t.action,dividerBefore:t.dividerBefore??i?.dividerBefore}})}bindEvents(){this.canvas.addEventListener("contextmenu",this.onContextMenu),document.addEventListener("mousedown",this.onDocMouseDown),document.addEventListener("keydown",this.onEscape)}onContextMenu=e=>{e.preventDefault();const t=this.container.getBoundingClientRect();let i=e.clientX-t.left,n=e.clientY-t.top;this.menu.style.left=`${i}px`,this.menu.style.top=`${n}px`,this.menu.classList.add("engine-2d-context-menu--visible"),this.updateMenuItemStyles();const r=this.menu.offsetWidth,s=this.menu.offsetHeight,o=this.container.clientWidth,a=this.container.clientHeight;i+r>o&&(i=o-r-4),n+s>a&&(n=a-s-4),this.menu.style.left=`${i}px`,this.menu.style.top=`${n}px`};onDocMouseDown=e=>{this.menu.contains(e.target)||this.hide()};onEscape=e=>{e.key==="Escape"&&this.hide()};hide(){this.menu.classList.remove("engine-2d-context-menu--visible")}setMenuItemState(e,t){this.menuItemStates.set(e,t)}setMenuItemStates(e){Object.entries(e).forEach(([t,i])=>{this.menuItemStates.set(t,i)})}updateMenuItemStyles(){this.menu.querySelectorAll(".engine-2d-context-menu__item").forEach(t=>{const i=t.dataset.action;this.menuItemStates.get(i)?(t.style.color="#00e682",t.style.fontWeight="bold"):(t.style.color="",t.style.fontWeight="")})}dispose(){this.canvas.removeEventListener("contextmenu",this.onContextMenu),document.removeEventListener("mousedown",this.onDocMouseDown),document.removeEventListener("keydown",this.onEscape),this.menu.parentElement?.removeChild(this.menu)}}class di{overlay=null;textEl=null;barEl=null;pctEl=null;constructor(e,t=1){this._build(e,t)}show(e="正在加载...",t=0){this.overlay&&(this.overlay.style.display="flex",this._update(e,t))}update(e,t){this.overlay?.style.display!=="none"&&this._update(e,t)}hide(){this.overlay&&(this.overlay.style.display="none")}_update(e,t){const i=Math.min(100,Math.max(0,Math.round(t)));this.textEl&&(this.textEl.textContent=e),this.barEl&&(this.barEl.style.width=`${i}%`),this.pctEl&&(this.pctEl.textContent=`${i}%`)}_build(e,t){const i=document.createElement("div");i.style.cssText=this._getOverlayStyle(t),this.overlay=i;const n=t===2?this._buildBottomPanel():this._buildCardPanel();i.appendChild(n),e.appendChild(i)}_getOverlayStyle(e){return e===2?`
121
121
  position:absolute; inset:0;
122
122
  display:none; align-items:flex-end; justify-content:center;
123
123
  z-index:200; pointer-events:none;
@@ -190,16 +190,16 @@
190
190
  background:linear-gradient(90deg,var(--e2d-accent,#4fc3f7),#8be9fd);
191
191
  box-shadow:0 0 12px rgba(79,195,247,0.45);
192
192
  transition:width 0.25s ease;
193
- `,this.barEl=s,t.appendChild(i),t.appendChild(n),r.appendChild(s),e.appendChild(t),e.appendChild(r),e}dispose(){this.overlay?.remove(),this.overlay=null,this.textEl=null,this.barEl=null,this.pctEl=null}}const oi=`<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
193
+ `,this.barEl=s,t.appendChild(i),t.appendChild(n),r.appendChild(s),e.appendChild(t),e.appendChild(r),e}dispose(){this.overlay?.remove(),this.overlay=null,this.textEl=null,this.barEl=null,this.pctEl=null}}const ui=`<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
194
194
  <circle cx="6.5" cy="6.5" r="4.5" stroke="currentColor" stroke-width="1.5"/>
195
195
  <line x1="10" y1="10" x2="14" y2="14" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/>
196
- </svg>`,ai=`<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
196
+ </svg>`,fi=`<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
197
197
  <line x1="1" y1="1" x2="11" y2="11" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/>
198
198
  <line x1="11" y1="1" x2="1" y2="11" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/>
199
- </svg>`;class li{manager;wrapper;input;clearBtn;resultList;statusEl;activeIndex=-1;currentResults=[];debounceTimer=null;constructor(e,t){this.manager=t,this.wrapper=this.buildWrapper(),this.input=this.wrapper.querySelector(".engine-2d-search__input"),this.clearBtn=this.wrapper.querySelector(".engine-2d-search__clear"),this.resultList=this.wrapper.querySelector(".engine-2d-search__list"),this.statusEl=this.wrapper.querySelector(".engine-2d-search__status"),e.appendChild(this.wrapper),this.bindEvents()}buildWrapper(){const e=document.createElement("div");return e.className="engine-2d-search",e.innerHTML=`
199
+ </svg>`;class pi{manager;wrapper;input;clearBtn;resultList;statusEl;activeIndex=-1;currentResults=[];debounceTimer=null;constructor(e,t){this.manager=t,this.wrapper=this.buildWrapper(),this.input=this.wrapper.querySelector(".engine-2d-search__input"),this.clearBtn=this.wrapper.querySelector(".engine-2d-search__clear"),this.resultList=this.wrapper.querySelector(".engine-2d-search__list"),this.statusEl=this.wrapper.querySelector(".engine-2d-search__status"),e.appendChild(this.wrapper),this.bindEvents()}buildWrapper(){const e=document.createElement("div");return e.className="engine-2d-search",e.innerHTML=`
200
200
  <div class="engine-2d-search__box">
201
201
  <div class="engine-2d-search__input-row">
202
- <span class="engine-2d-search__icon">${oi}</span>
202
+ <span class="engine-2d-search__icon">${ui}</span>
203
203
  <input
204
204
  class="engine-2d-search__input"
205
205
  type="text"
@@ -207,7 +207,7 @@
207
207
  autocomplete="off"
208
208
  spellcheck="false"
209
209
  />
210
- <button class="engine-2d-search__clear" title="清除">${ai}</button>
210
+ <button class="engine-2d-search__clear" title="清除">${fi}</button>
211
211
  </div>
212
212
  <div class="engine-2d-search__divider"></div>
213
213
  <div class="engine-2d-search__status"></div>
@@ -218,4 +218,4 @@
218
218
  <span class="engine-2d-search__item-name">${this.highlight(n.name,t)}</span>
219
219
  ${n.layer?`<span class="engine-2d-search__item-layer">${this.escapeHtml(n.layer)}</span>`:""}
220
220
  ${n.description?`<span class="engine-2d-search__item-desc">${this.escapeHtml(n.description)}</span>`:""}
221
- `,s.addEventListener("click",()=>this.selectResult(n)),s.addEventListener("mouseenter",()=>{this.activeIndex=r,this.highlightItem(this.resultList.querySelectorAll(".engine-2d-search__item"))}),this.resultList.appendChild(s)})}highlight(e,t){const i=this.escapeHtml(e),n=t.trim();if(!n)return i;const r=this.escapeRegExp(this.escapeHtml(n));return i.replace(new RegExp(`(${r})`,"gi"),'<mark class="engine-2d-search__mark">$1</mark>')}highlightItem(e){e.forEach((t,i)=>{t.classList.toggle("engine-2d-search__item--active",i===this.activeIndex)}),this.activeIndex>=0&&e[this.activeIndex]?.scrollIntoView({block:"nearest"})}selectResult(e){this.manager.onResultSelect(e),this.hide()}clearResults(){this.resultList.innerHTML="",this.resultList.style.display="none",this.statusEl.style.display="none";const e=this.wrapper.querySelector(".engine-2d-search__divider");e.style.display="none",this.currentResults=[],this.activeIndex=-1}escapeHtml(e){return String(e??"").replace(/[&<>"']/g,t=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[t]??t)}escapeRegExp(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}show(){this.wrapper.classList.add("engine-2d-search--visible"),requestAnimationFrame(()=>this.input.focus())}hide(){this.wrapper.classList.remove("engine-2d-search--visible"),this.clearResults(),this.input.value="",this.clearBtn.style.opacity="0",this.clearBtn.style.pointerEvents="none"}toggle(){this.wrapper.classList.contains("engine-2d-search--visible")?this.hide():this.show()}dispose(){this.input.removeEventListener("input",this.onInput),this.input.removeEventListener("keydown",this.onKeyDown),this.clearBtn.removeEventListener("click",this.onClear),document.removeEventListener("mousedown",this.onDocMouseDown),document.removeEventListener("keydown",this.onEscape),this.wrapper.parentElement?.removeChild(this.wrapper),this.debounceTimer!==null&&clearTimeout(this.debounceTimer)}}class hi{engine;searchUI=null;constructor(e){this.engine=e;const t=document.getElementById(e?.options?.containerId??"")??e?.container??null;t&&(this.searchUI=new li(t,this))}search(e){const t=this.normalize(e);return t?(this.engine.loaderModule2d?.model?.textItems??[]).map(n=>{const r=this.getMatchScore(n.text,t);return r==null?null:{id:n.id,name:n.text,type:"文字",layer:n.layer,description:this.getPositionDescription(n),score:r,target:n}}).filter(n=>n!==null).sort((n,r)=>(r.score??0)-(n.score??0)||n.name.length-r.name.length).slice(0,100):[]}onResultSelect(e){const t=e.target;t&&(this.engine.modelToolModule2d?.unhighlightAllModels?.(),this.engine.modelToolModule2d?.highlightModel?.([e.id]),this.fitToText(t))}fitToText(e){const t=e.min?.clone(),i=e.max?.clone(),n=e.anchor?.clone();if((!t||!i||t.distanceTo(i)<1e-6)&&n){const o=Math.max(Number(e.info?.height??100),100);this.engine.cameraModule2d?.fitToExtents({min:[n.x-o,n.y-o,0],max:[n.x+o,n.y+o,0]},2,!0,500);return}if(!t||!i)return;const r=new _.Vector3().subVectors(i,t),s=Math.max(r.x,r.y)<1e-6?2:2.5;this.engine.cameraModule2d?.fitToExtents({min:[t.x,t.y,t.z],max:[i.x,i.y,i.z]},s,!0,500)}getPositionDescription(e){const t=e.anchor??e.min;return t?`X:${t.x.toFixed(0)} Y:${t.y.toFixed(0)}`:""}normalize(e){return String(e??"").trim().toLowerCase().replace(/\s+/g,"")}getMatchScore(e,t){const i=this.normalize(e);if(!i)return null;const n=i.indexOf(t);if(n>=0)return 1e3-n-Math.max(0,i.length-t.length)*.01;let r=0,s=0;for(const o of t){const a=i.indexOf(o,r);if(a<0)return null;s+=a-r,r=a+1}return 500-s-Math.max(0,i.length-t.length)*.01}show(){this.searchUI?.show()}hide(){this.searchUI?.hide()}toggle(){this.searchUI?.toggle()}dispose(){this.searchUI?.dispose(),this.searchUI=null}}const nt={dark:{"--e2d-bg":"#1e1f22","--e2d-bg2":"#252526","--e2d-bg3":"#222222","--e2d-bg-hover":"rgba(79,195,247,0.08)","--e2d-bg-accent":"#094771","--e2d-icon-bg":"rgba(255,255,255,0.08)","--e2d-icon-bg-hover":"rgba(255,255,255,0.16)","--e2d-border":"rgba(255,255,255,0.12)","--e2d-border2":"#333333","--e2d-text":"#e0e0e0","--e2d-text2":"#cccccc","--e2d-text3":"rgba(255,255,255,0.35)","--e2d-text4":"#666666","--e2d-text-accent":"#ffffff","--e2d-accent":"#4fc3f7","--e2d-shadow":"rgba(0,0,0,0.50)","--e2d-shadow-lg":"rgba(0,0,0,0.65)","--e2d-cursor":"rgba(255,255,255,0.85)","--e2d-scrollbar":"rgba(255,255,255,0.15)","--e2d-float-bg":"rgba(0,0,0,0.65)","--e2d-float-border":"rgba(255,255,255,0.08)","--e2d-swatch-border":"#444444","--e2d-close":"#aaaaaa","--e2d-close-hover":"#ffffff","--e2d-icon":"rgba(255,255,255,0.4)","--e2d-coord-value":"#76c8ff","--e2d-coord-label":"rgba(255,255,255,0.45)"},light:{"--e2d-bg":"#ffffff","--e2d-bg2":"#ffffff","--e2d-bg3":"#eeeeee","--e2d-bg-hover":"rgba(25,118,210,0.06)","--e2d-bg-accent":"#e3f2fd","--e2d-icon-bg":"rgba(0,0,0,0.06)","--e2d-icon-bg-hover":"rgba(0,0,0,0.12)","--e2d-border":"rgba(0,0,0,0.12)","--e2d-border2":"#e0e0e0","--e2d-text":"#1a1a1a","--e2d-text2":"#444444","--e2d-text3":"rgba(0,0,0,0.40)","--e2d-text4":"#aaaaaa","--e2d-text-accent":"#1565c0","--e2d-accent":"#1976d2","--e2d-shadow":"rgba(0,0,0,0.15)","--e2d-shadow-lg":"rgba(0,0,0,0.22)","--e2d-cursor":"rgba(30,30,30,0.70)","--e2d-scrollbar":"rgba(0,0,0,0.18)","--e2d-float-bg":"#ffffff","--e2d-float-border":"rgba(0,0,0,0.10)","--e2d-swatch-border":"#cccccc","--e2d-close":"#777777","--e2d-close-hover":"#1a1a1a","--e2d-icon":"rgba(0,0,0,0.45)","--e2d-coord-value":"#1976d2","--e2d-coord-label":"rgba(0,0,0,0.50)"}};class ci{container;current;constructor(e,t="dark"){this.container=e,this.current=t,this._apply(t)}_apply(e){const t=nt[e];for(const[i,n]of Object.entries(t))this.container.style.setProperty(i,n);this.container.setAttribute("data-e2d-theme",e)}setTheme(e){this.current=e,this._apply(e)}getTheme(){return this.current}toggle(){this.setTheme(this.current==="dark"?"light":"dark")}dispose(){for(const e of Object.keys(nt[this.current]))this.container.style.removeProperty(e);this.container.removeAttribute("data-e2d-theme")}}const rt={precision:3,unit:"m",areaUnit:"m²",scale:1};class Oe{manager;points=[];constructor(e){this.manager=e}active(){this.points=[],this.manager.setCurrentTool(this)}disActive(){this.points=[],this.manager.clearPreview()}clearAllPoints(){this.points=[],this.manager.clearPreview()}handleClick(e){this.points.push(e.clone())}handleMove(e){}handleDoubleClick(){}handleRightClick(){this.handleDoubleClick()}handleEnter(){this.handleDoubleClick()}handleEsc(){this.clearAllPoints()}}class di extends Oe{handleClick(e){super.handleClick(e),this.points.length===2&&(this.manager.addMeasurement("distance",this.points),this.clearAllPoints())}handleMove(e){this.points.length===1&&this.manager.drawPreview("distance",[this.points[0],e])}}class ui extends Oe{handleClick(e){super.handleClick(e),this.manager.drawPreview("area",this.points)}handleMove(e){this.points.length>0&&this.manager.drawPreview("area",[...this.points,e])}handleDoubleClick(){const e=this.manager.removeTrailingDuplicatePoint(this.points);e.length>=3&&this.manager.addMeasurement("area",e),this.clearAllPoints()}}class fi extends Oe{handleClick(e){super.handleClick(e),this.points.length===3&&(this.manager.addMeasurement("angle",this.points),this.clearAllPoints())}handleMove(e){this.points.length>=2&&this.manager.drawPreview("angle",[...this.points,e])}}class pi{distanceMeasure;areaMeasure;angleMeasure;annotationData={distanceAnnotation:[],areaAnnotation:[],angleAnnotation:[]};engine;container;annotationContainer;setting={...rt};isActive=!1;currentTool=null;previewRecord=null;mouseDownPoint=null;hasDraggedAfterMouseDown=!1;currentWorkspaceKey="model";constructor(e){this.engine=e,this.container=e.container,this.distanceMeasure=new di(this),this.areaMeasure=new ui(this),this.angleMeasure=new fi(this),this.annotationContainer=document.createElement("div"),this.annotationContainer.className="annotation-container",this.annotationContainer.style.pointerEvents="none",this.annotationContainer.style.zIndex="20",this.container.appendChild(this.annotationContainer)}active(){if(this.isActive)return;this.isActive=!0,this.engine.interactionModule2d?.disActive?.();const e=this.engine.renderer.domElement;e.addEventListener("mousedown",this.handleMouseDown,!0),e.addEventListener("click",this.handleClick,!0),e.addEventListener("mousemove",this.handleMove,!0),e.addEventListener("dblclick",this.handleDoubleClick,!0),e.addEventListener("contextmenu",this.handleContextMenu,!0),window.addEventListener("keydown",this.handleKeyDown,!0)}disActive(){if(!this.isActive)return;this.quitDraw(),this.isActive=!1;const e=this.engine.renderer.domElement;e.removeEventListener("mousedown",this.handleMouseDown,!0),e.removeEventListener("click",this.handleClick,!0),e.removeEventListener("mousemove",this.handleMove,!0),e.removeEventListener("dblclick",this.handleDoubleClick,!0),e.removeEventListener("contextmenu",this.handleContextMenu,!0),window.removeEventListener("keydown",this.handleKeyDown,!0),this.engine.interactionModule2d?.active?.(),this.clearAll()}quitDraw(){this.currentTool?.disActive(),this.currentTool=null,this.clearPreview()}activate(e){this.active(),this.disActiveMeasureTools(),e==="distance"&&this.distanceMeasure.active(),e==="area"&&this.areaMeasure.active(),e==="angle"&&this.angleMeasure.active()}clearAllPoints(){this.distanceMeasure.clearAllPoints(),this.areaMeasure.clearAllPoints(),this.angleMeasure.clearAllPoints()}clearAll(){Object.values(this.annotationData).forEach(e=>this.removeRecords(e,t=>t.workspaceKey===this.currentWorkspaceKey)),this.clearPreview()}cancelCurrentSelectedAnnotation(){Object.values(this.annotationData).flat().forEach(e=>{e.highlight=!1,this.applyRecordHighlight(e,!1)})}saveSetting(e){this.setting={...this.setting,...e,precision:this.normalizePrecision(e.precision??this.setting.precision),scale:Number.isFinite(e.scale)&&e.scale>0?e.scale:this.setting.scale},this.refreshLabels()}setPrecision(e){this.saveSetting({precision:e})}getSetting(){return{...this.setting}}update(){this.updateRecords(Object.values(this.annotationData).flat().filter(e=>e.workspaceKey===this.currentWorkspaceKey)),this.previewRecord&&this.updateRecordSvg(this.previewRecord)}setWorkspace(e){!e||e===this.currentWorkspaceKey||(this.clearPreview(),this.cancelCurrentSelectedAnnotation(),this.currentWorkspaceKey=e,this.refreshWorkspaceVisibility())}dispose(){this.disActive(),this.clearAll(),this.annotationContainer.remove()}setCurrentTool(e){this.currentTool=e}drawPreview(e,t){this.clearPreview(),!(t.length<2)&&(this.previewRecord=this.createRecord(e,t,!0),this.annotationContainer.appendChild(this.previewRecord.container),this.updateRecordSvg(this.previewRecord))}clearPreview(){this.previewRecord?.container.remove(),this.previewRecord=null}addMeasurement(e,t){const i=this.createRecord(e,t,!1);return this.annotationContainer.appendChild(i.container),this.getRecords(e).push(i),this.updateRecordSvg(i),this.engine.events?.trigger?.("measure-changed",i),i}deleteSelected(){Object.values(this.annotationData).forEach(e=>{for(let t=e.length-1;t>=0;t--)e[t].workspaceKey===this.currentWorkspaceKey&&e[t].highlight&&(e[t].container.remove(),e.splice(t,1))})}removeTrailingDuplicatePoint(e){if(e.length<2)return e.map(r=>r.clone());const t=e.map(r=>r.clone()),i=t[t.length-1],n=t[t.length-2];return i.distanceTo(n)<1e-6&&t.pop(),t}disActiveMeasureTools(){this.distanceMeasure.disActive(),this.areaMeasure.disActive(),this.angleMeasure.disActive()}handleMouseDown=e=>{this.mouseDownPoint=new _.Vector2(e.clientX,e.clientY),this.hasDraggedAfterMouseDown=!1};handleClick=e=>{!this.currentTool||this.hasDraggedAfterMouseDown||(e.preventDefault(),e.stopImmediatePropagation(),this.currentTool.handleClick(this.eventToWorld(e)))};handleMove=e=>{this.currentTool&&(this.mouseDownPoint&&new _.Vector2(e.clientX,e.clientY).distanceTo(this.mouseDownPoint)>3&&(this.hasDraggedAfterMouseDown=!0),this.currentTool.handleMove(this.eventToWorld(e)))};handleDoubleClick=e=>{this.currentTool&&(e.preventDefault(),e.stopImmediatePropagation(),this.currentTool.handleDoubleClick())};handleContextMenu=e=>{this.currentTool&&(e.preventDefault(),e.stopImmediatePropagation(),this.currentTool.handleRightClick())};handleKeyDown=e=>{this.isActive&&(e.key==="Escape"&&(e.preventDefault(),e.stopImmediatePropagation(),this.currentTool?.handleEsc(),this.disActive(),this.engine.events?.trigger?.("quit_measure_draw",!0),window.dispatchEvent(new CustomEvent("D2MeasureQuit"))),(e.key==="Delete"||e.key==="Backspace")&&(e.preventDefault(),e.stopImmediatePropagation(),this.deleteSelected()),e.key==="Enter"&&this.currentTool&&(e.preventDefault(),this.currentTool.handleEnter()))};eventToWorld(e){const t=this.engine.renderer.domElement.getBoundingClientRect(),i=this.engine.cameraModule2d.screenToWorld(e.clientX-t.left,e.clientY-t.top);return i.z=0,i}createRecord(e,t,i){const n=document.createElement("div");n.className=`${e}-annotation`,n.style.position="absolute",n.style.left="0px",n.style.top="0px",n.style.pointerEvents="none";const r=this.createSvg(e);i&&(r.style.opacity="0.65"),n.appendChild(r);const s=this.computeValue(e,t),o={id:this.createId(),type:e,workspaceKey:this.currentWorkspaceKey,points:t.map(a=>a.clone()),container:n,svg:r,value:s,text:this.formatValue(e,s),isSelect:i};return i||this.bindRecordSelection(o),o}createSvg(e){const t=document.createElementNS("http://www.w3.org/2000/svg","svg");if(t.classList.add("measureSvg"),t.style.left="0",t.style.top="0",t.style.pointerEvents="none",e==="area"){const o=this.svgElement("polygon");o.setAttribute("fill","rgba(0, 155, 234, 0.12)"),o.setAttribute("stroke","none"),t.appendChild(o)}const i=e==="angle"?2:1;for(let o=0;o<i;o++){const a=this.svgElement("polyline");a.classList.add("measureLine"),a.setAttribute("stroke-width","2"),a.setAttribute("style","fill: none; opacity: 1;"),t.appendChild(a)}const n=e==="angle"?3:e==="distance"?2:0;for(let o=0;o<n;o++){const a=this.svgElement("circle");a.classList.add("measurePointer"),a.setAttribute("r","5"),t.appendChild(a)}const r=this.svgElement("rect");r.classList.add("measureBack"),r.setAttribute("width","100"),r.setAttribute("height","25"),r.style.pointerEvents="auto",r.style.cursor="pointer",t.appendChild(r);const s=this.svgElement("text");return s.classList.add("measureLabel"),s.setAttribute("text-anchor","middle"),t.appendChild(s),t}bindRecordSelection(e){e.svg.getElementsByTagName("rect")[0].addEventListener("click",i=>{i.preventDefault(),i.stopPropagation(),this.cancelCurrentSelectedAnnotation(),e.highlight=!0,this.applyRecordHighlight(e,!0),this.engine.events?.trigger?.("measure-click",e)})}applyRecordHighlight(e,t){[e.svg,...Array.from(e.svg.getElementsByTagName("polyline")),...Array.from(e.svg.getElementsByTagName("circle")),...Array.from(e.svg.getElementsByTagName("polygon")),...Array.from(e.svg.getElementsByTagName("rect")),...Array.from(e.svg.getElementsByTagName("text"))].forEach(n=>{n.classList.toggle("Hight",t),n.classList.toggle("measure-2d-selected",t)})}svgElement(e){return document.createElementNS("http://www.w3.org/2000/svg",e)}updateRecords(e){e.forEach(t=>this.updateRecordSvg(t))}updateRecordSvg(e){const t=this.container.clientWidth||1,i=this.container.clientHeight||1;e.svg.setAttribute("width",`${t}`),e.svg.setAttribute("height",`${i}`),e.svg.style.width=`${t}px`,e.svg.style.height=`${i}px`;const n=e.points.map(r=>this.worldToScreen(r));e.type==="distance"&&this.updateDistanceSvg(e,n),e.type==="area"&&this.updateAreaSvg(e,n),e.type==="angle"&&this.updateAngleSvg(e,n)}updateDistanceSvg(e,t){const[i,n]=t,r=e.svg.getElementsByTagName("polyline")[0],s=e.svg.getElementsByTagName("circle");r.setAttribute("points",`${i.x},${i.y} ${n.x},${n.y}`),s[0].setAttribute("cx",`${i.x}`),s[0].setAttribute("cy",`${i.y}`),s[1].setAttribute("cx",`${n.x}`),s[1].setAttribute("cy",`${n.y}`),this.updateLabel(e,(i.x+n.x)/2,(i.y+n.y)/2)}updateAreaSvg(e,t){const i=t.map(o=>`${o.x},${o.y}`).join(" "),r=(t.length>=3?[...t,t[0]]:t).map(o=>`${o.x},${o.y}`).join(" ");e.svg.getElementsByTagName("polygon")[0].setAttribute("points",t.length>=3?i:""),e.svg.getElementsByTagName("polyline")[0].setAttribute("points",r);const s=t.reduce((o,a)=>(o.x+=a.x,o.y+=a.y,o),{x:0,y:0});this.updateLabel(e,s.x/t.length,s.y/t.length)}updateAngleSvg(e,t){const[i,n,r]=t,s=e.svg.getElementsByTagName("polyline"),o=e.svg.getElementsByTagName("circle");s[0].setAttribute("points",`${i.x},${i.y} ${n.x},${n.y}`),s[1].setAttribute("points",`${n.x},${n.y} ${r.x},${r.y}`),[i,n,r].forEach((a,l)=>{o[l].setAttribute("cx",`${a.x}`),o[l].setAttribute("cy",`${a.y}`)}),this.updateLabel(e,n.x,n.y-30)}updateLabel(e,t,i){e.value=this.computeValue(e.type,e.points),e.text=this.formatValue(e.type,e.value);const n=e.svg.getElementsByTagName("rect")[0],r=e.svg.getElementsByTagName("text")[0],s=Math.max(100,e.text.length*9+22);n.setAttribute("x",`${t-s/2}`),n.setAttribute("y",`${i-12.5}`),n.setAttribute("width",`${s}`),r.setAttribute("x",`${t}`),r.setAttribute("y",`${i+4}`),r.textContent=e.text}worldToScreen(e){return this.engine.cameraModule2d.worldToScreen(e.x,e.y)}computeValue(e,t){return e==="distance"?t[0].distanceTo(t[1])*this.setting.scale:e==="angle"?this.computeAngle(t[0],t[1],t[2]):this.computeArea(t)*this.setting.scale*this.setting.scale}computeArea(e){if(e.length<3)return 0;let t=0;for(let i=0;i<e.length;i++){const n=e[i],r=e[(i+1)%e.length];t+=n.x*r.y-r.x*n.y}return Math.abs(t)/2}computeAngle(e,t,i){const n=e.clone().sub(t).normalize(),r=i.clone().sub(t).normalize(),s=_.MathUtils.clamp(n.dot(r),-1,1);return _.MathUtils.radToDeg(Math.acos(s))}formatValue(e,t){return e==="angle"?`${t.toFixed(this.setting.precision)}°`:e==="area"?`${t.toFixed(this.setting.precision)} ${this.setting.areaUnit??`${this.setting.unit}²`}`:`${t.toFixed(this.setting.precision)} ${this.setting.unit}`}refreshLabels(){Object.values(this.annotationData).flat().filter(e=>e.workspaceKey===this.currentWorkspaceKey).forEach(e=>{e.value=this.computeValue(e.type,e.points),e.text=this.formatValue(e.type,e.value),this.updateRecordSvg(e)})}refreshWorkspaceVisibility(){Object.values(this.annotationData).flat().forEach(e=>{e.container.style.display=e.workspaceKey===this.currentWorkspaceKey?"":"none"})}removeRecords(e,t){for(let i=e.length-1;i>=0;i-=1)t(e[i])&&(e[i].container.remove(),e.splice(i,1))}getRecords(e){return e==="distance"?this.annotationData.distanceAnnotation:e==="area"?this.annotationData.areaAnnotation:this.annotationData.angleAnnotation}normalizePrecision(e){return Number.isFinite(e)?Math.max(0,Math.min(8,Math.round(e))):rt.precision}createId(){return`measure-2d-${Date.now()}-${Math.random().toString(16).slice(2)}`}}const mi="__BIM_ENGINE_SDK_ASSET_BASE__";function gi(){return typeof globalThis<"u"?globalThis:null}function Ve(k){return k.endsWith("/")?k:`${k}/`}function st(k){return/^(?:[a-z][a-z\d+\-.]*:)?\/\//i.test(k)||/^(?:data|blob):/i.test(k)}function yi(k){return k.startsWith("./")||k.startsWith("../")}function ze(k,e){try{return e?new URL(k,e).toString():new URL(k).toString()}catch{return null}}function ot(){return typeof document<"u"&&document.baseURI?document.baseURI:typeof location<"u"&&location.href?location.href:null}function vi(k,e){const t=Ve(k);if(st(t))return t;const i=Ee(e)||at()||ot();return ze(t,i||void 0)||t}function Ee(k){if(!k)return null;try{const e=ot(),t=ze(k,e||void 0)||k,i=new URL(".",t),n=i.pathname.replace(/\\/g,"/");return n.endsWith("/chunks/")?new URL("../",i).toString():e&&/\/src\//.test(n)?Ve(e):i.toString()}catch{return null}}function at(){if(typeof document>"u")return null;const k=document.currentScript;if(k?.src)return Ee(k.src);const e=document.getElementsByTagName("script");for(let t=e.length-1;t>=0;t-=1){const i=e[t]?.src;if(i&&/(?:bim-engine-sdk|iflow-engine-base|dwg-preview|gaussian)\.(?:es|umd)\.js(?:[?#].*)?$/.test(i))return Ee(i)}return null}function bi(k){const t=gi()?.[mi];return typeof t=="string"&&t.length>0?vi(t,k):Ee(k)||at()||(typeof document<"u"?Ve(document.baseURI):"./")}function Me(k,e){if(e?.includes("@fs")&&(e=e.split("@")[0]),console.log("资源路径",k,e),st(k))return k;if(yi(k)){const n=ze(k,Ee(e)||void 0);if(n)return n}const t=k.replace(/^\/+/,""),i=bi(e);return ze(t,i)||t}const Ue={stroke:"#ff4d4f",fill:"rgba(255, 77, 79, 0.08)",strokeWidth:2,fontSize:16,cloudRadius:10},wi={none:Me("/assets/icon/选择.svg",typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__filename).href:typeof document>"u"?location.href:oe&&oe.tagName.toUpperCase()==="SCRIPT"&&oe.src||new URL("dwg-preview.umd.js",document.baseURI).href),line:Me("/assets/icon/线.svg",typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__filename).href:typeof document>"u"?location.href:oe&&oe.tagName.toUpperCase()==="SCRIPT"&&oe.src||new URL("dwg-preview.umd.js",document.baseURI).href),arrow:Me("/assets/icon/箭头.svg",typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__filename).href:typeof document>"u"?location.href:oe&&oe.tagName.toUpperCase()==="SCRIPT"&&oe.src||new URL("dwg-preview.umd.js",document.baseURI).href),rect:Me("/assets/icon/矩形.svg",typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__filename).href:typeof document>"u"?location.href:oe&&oe.tagName.toUpperCase()==="SCRIPT"&&oe.src||new URL("dwg-preview.umd.js",document.baseURI).href),ellipse:Me("/assets/icon/圆形.svg",typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__filename).href:typeof document>"u"?location.href:oe&&oe.tagName.toUpperCase()==="SCRIPT"&&oe.src||new URL("dwg-preview.umd.js",document.baseURI).href),polygon:Me("/assets/icon/面积.svg",typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__filename).href:typeof document>"u"?location.href:oe&&oe.tagName.toUpperCase()==="SCRIPT"&&oe.src||new URL("dwg-preview.umd.js",document.baseURI).href),text:Me("/assets/icon/文字.svg",typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__filename).href:typeof document>"u"?location.href:oe&&oe.tagName.toUpperCase()==="SCRIPT"&&oe.src||new URL("dwg-preview.umd.js",document.baseURI).href),cloudline:Me("/assets/icon/云线.svg",typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__filename).href:typeof document>"u"?location.href:oe&&oe.tagName.toUpperCase()==="SCRIPT"&&oe.src||new URL("dwg-preview.umd.js",document.baseURI).href)},xi="data:image/svg+xml;utf8,"+encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#1f2937" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h18"/><path d="M8 6V4h8v2"/><path d="M6 6l1 16h10l1-16"/><path d="M10 11v6"/><path d="M14 11v6"/></svg>'),ki="data:image/svg+xml;utf8,"+encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#1f2937" stroke-width="2" stroke-linecap="round"><path d="M6 6l12 12"/><path d="M18 6L6 18"/></svg>');class Mi{engine;container;layer;svg;toolbar;records=[];isActive=!1;currentType=null;style={...Ue};draft=null;draftStart=null;polygonPoints=[];currentWorkspaceKey="model";mouseDownPoint=null;hasDraggedAfterMouseDown=!1;buttons={};constructor(e){this.engine=e,this.container=e.container,getComputedStyle(this.container).position==="static"&&(this.container.style.position="relative"),this.layer=document.createElement("div"),this.layer.className="markup-2d-layer",this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.classList.add("markup-2d-svg"),this.layer.appendChild(this.svg),this.toolbar=this.createToolbar(),this.layer.appendChild(this.toolbar),this.container.appendChild(this.layer)}active(e){if(this.engine.measure?.quitDraw?.(),!this.isActive){this.isActive=!0,this.engine.interactionModule2d?.disActive?.();const t=this.engine.renderer.domElement;t.addEventListener("mousedown",this.handleMouseDown,!0),t.addEventListener("mousemove",this.handleMouseMove,!0),t.addEventListener("mouseup",this.handleMouseUp,!0),t.addEventListener("click",this.handleClick,!0),t.addEventListener("dblclick",this.handleDoubleClick,!0),t.addEventListener("wheel",this.blockDrawingEvent,!0),t.addEventListener("touchstart",this.blockDrawingEvent,!0),t.addEventListener("touchmove",this.blockDrawingEvent,!0),window.addEventListener("keydown",this.handleKeyDown,!0)}this.showToolbar(),e&&this.setDrawType(e)}show(){this.active()}hide(){this.hideToolbar(),this.disActive()}disActive(){if(!this.isActive)return;this.isActive=!1,this.currentType=null,this.clearDraft(),this.polygonPoints=[],this.syncToolbar();const e=this.engine.renderer.domElement;e.removeEventListener("mousedown",this.handleMouseDown,!0),e.removeEventListener("mousemove",this.handleMouseMove,!0),e.removeEventListener("mouseup",this.handleMouseUp,!0),e.removeEventListener("click",this.handleClick,!0),e.removeEventListener("dblclick",this.handleDoubleClick,!0),e.removeEventListener("wheel",this.blockDrawingEvent,!0),e.removeEventListener("touchstart",this.blockDrawingEvent,!0),e.removeEventListener("touchmove",this.blockDrawingEvent,!0),window.removeEventListener("keydown",this.handleKeyDown,!0),this.engine.interactionModule2d?.active?.()}setDrawType(e){this.currentType=e==="none"?null:e,this.clearDraft(),this.polygonPoints=[],this.syncToolbar()}update(){const e=this.container.clientWidth||1,t=this.container.clientHeight||1;this.svg.setAttribute("width",`${e}`),this.svg.setAttribute("height",`${t}`),this.svg.style.width=`${e}px`,this.svg.style.height=`${t}px`,this.records.forEach(i=>{i.element.style.display=i.data.workspaceKey===this.currentWorkspaceKey?"":"none",this.updateElement(i)}),this.draft&&this.updateElement(this.draft)}setWorkspace(e){!e||e===this.currentWorkspaceKey||(this.currentWorkspaceKey=e,this.clearDraft(),this.polygonPoints=[],this.cancelSelected(),this.update())}getData(){return this.records.map(e=>this.cloneData(e.data))}restoreData(e=[]){this.clearAll(!0),e.forEach(t=>this.addMarkup(t)),this.update()}get(){return{cameraViewState:this.engine.cameraModule2d?.getViewState?.()??null,markupData:this.getData()}}restore(e){e&&(e.cameraViewState&&this.engine.cameraModule2d?.applyViewState?.(e.cameraViewState),this.restoreData(e.markupData??[]))}addMarkup(e){const t={id:e.id??this.createId(),type:e.type,workspaceKey:e.workspaceKey??this.currentWorkspaceKey,points:e.points.map(n=>({x:n.x,y:n.y,z:n.z??0})),text:e.text,style:{...this.style,...e.style??{}}},i=this.createRecord(t);return this.records.push(i),this.svg.appendChild(i.element),this.updateElement(i),this.engine.events?.trigger?.("markup-changed",this.cloneData(t)),this.cloneData(t)}clearAll(e=!1){for(let t=this.records.length-1;t>=0;t-=1){const i=this.records[t];!e&&i.data.workspaceKey!==this.currentWorkspaceKey||(i.element.remove(),this.records.splice(t,1))}this.clearDraft()}deleteSelected(){for(let e=this.records.length-1;e>=0;e-=1)this.records[e].selected&&(this.records[e].element.remove(),this.records.splice(e,1));this.engine.events?.trigger?.("markup-changed",this.getData())}dispose(){this.disActive(),this.records.forEach(e=>e.element.remove()),this.records=[],this.layer.remove()}blockDrawingEvent=e=>{this.currentType&&(e instanceof MouseEvent&&this.engine.cadCursorUI?.updateFromMouseEvent?.(e),e.preventDefault(),e.stopImmediatePropagation())};handleMouseDown=e=>{this.currentType&&(this.blockDrawingEvent(e),this.mouseDownPoint=new _.Vector2(e.clientX,e.clientY),this.hasDraggedAfterMouseDown=!1)};handleMouseMove=e=>{if(this.currentType){if(this.blockDrawingEvent(e),this.mouseDownPoint&&e.buttons!==0){const t=new _.Vector2(e.clientX,e.clientY);this.hasDraggedAfterMouseDown=t.distanceTo(this.mouseDownPoint)>3}if(this.isMultiPointType(this.currentType)&&this.polygonPoints.length>0){this.drawMultiPointDraft(this.eventToWorld(e));return}!this.draft||!this.draftStart||(this.draft.data.points=[this.pointToData(this.draftStart),this.pointToData(this.eventToWorld(e))],this.updateElement(this.draft))}};handleMouseUp=e=>{this.currentType&&(this.blockDrawingEvent(e),this.mouseDownPoint=null)};handleClick=e=>{if(this.currentType&&(this.blockDrawingEvent(e),!this.hasDraggedAfterMouseDown)){if(this.currentType==="text"){const t=window.prompt("请输入标记文字","文字")??"";t.trim()&&this.addMarkup({type:"text",points:[this.pointToData(this.eventToWorld(e))],text:t.trim()});return}if(this.isTwoPointType(this.currentType)){const t=this.eventToWorld(e);this.draftStart?this.finishTwoPointDraft(t):this.startTwoPointDraft(t);return}this.isMultiPointType(this.currentType)&&(this.polygonPoints.push(this.eventToWorld(e)),this.drawMultiPointDraft())}};handleDoubleClick=e=>{if(!this.currentType||!this.isMultiPointType(this.currentType))return;this.blockDrawingEvent(e);const t=this.currentType==="cloudline"?2:3,i=this.removeTrailingDuplicatePoints(this.polygonPoints);i.length>=t&&this.addMarkup({type:this.currentType,points:i.map(n=>this.pointToData(n))}),this.polygonPoints=[],this.clearDraft()};handleKeyDown=e=>{if(this.isActive&&(e.key==="Escape"&&(e.preventDefault(),this.clearDraft(),this.polygonPoints=[],this.setDrawType("none")),(e.key==="Delete"||e.key==="Backspace")&&(e.preventDefault(),this.deleteSelected()),e.key==="Enter"&&this.currentType&&this.isMultiPointType(this.currentType))){e.preventDefault();const t=this.currentType==="cloudline"?2:3,i=this.removeTrailingDuplicatePoints(this.polygonPoints);i.length>=t&&this.addMarkup({type:this.currentType,points:i.map(n=>this.pointToData(n))}),this.polygonPoints=[],this.clearDraft()}};createToolbar(){const e=document.createElement("div");e.className="markup-2d-toolbar",[{type:"none",title:"选择"},{type:"line",title:"直线"},{type:"arrow",title:"箭头"},{type:"rect",title:"矩形"},{type:"ellipse",title:"圆形/椭圆"},{type:"polygon",title:"多边形,双击或 Enter 结束"},{type:"cloudline",title:"云线,双击或 Enter 结束"},{type:"text",title:"文字"}].forEach(a=>{const l=this.createIconButton(a.title,wi[a.type]);l.onclick=()=>{this.active(),this.setDrawType(a.type)},a.type!=="none"&&(this.buttons[a.type]=l),e.appendChild(l)}),e.appendChild(this.createDivider());const i=document.createElement("input");i.type="color",i.value=this.style.stroke,i.title="颜色",i.oninput=()=>{this.style.stroke=i.value,this.style.fill=this.hexToTransparent(i.value)},e.appendChild(i);const n=document.createElement("input");n.type="number",n.min="1",n.max="20",n.value=`${this.style.strokeWidth}`,n.title="线宽",n.onchange=()=>{this.style.strokeWidth=this.normalizeNumber(n.valueAsNumber,1,20,Ue.strokeWidth)},e.appendChild(n);const r=document.createElement("input");r.type="number",r.min="10",r.max="72",r.value=`${this.style.fontSize}`,r.title="字号",r.onchange=()=>{this.style.fontSize=this.normalizeNumber(r.valueAsNumber,10,72,Ue.fontSize)},e.appendChild(r),e.appendChild(this.createDivider());const s=this.createIconButton("清空",xi);s.onclick=()=>this.clearAll(),e.appendChild(s);const o=this.createIconButton("关闭",ki);return o.onclick=()=>{this.hideToolbar(),this.disActive()},e.appendChild(o),e}createDivider(){const e=document.createElement("div");return e.className="markup-2d-divider",e}createIconButton(e,t){const i=document.createElement("button");i.type="button",i.title=e,i.setAttribute("aria-label",e),i.classList.add("markup-2d-icon-button");const n=document.createElement("img");return n.src=t,n.alt=e,n.draggable=!1,i.appendChild(n),i}showToolbar(){this.toolbar.style.display="flex"}hideToolbar(){this.toolbar.style.display="none"}syncToolbar(){Object.entries(this.buttons).forEach(([e,t])=>{t?.classList.toggle("active",e===this.currentType)})}finishDraft(){if(!this.draft)return;const e=this.draft;this.draft=null,e.element.style.pointerEvents="auto",this.records.push(e),this.updateElement(e),this.engine.events?.trigger?.("markup-changed",this.cloneData(e.data))}clearDraft(){this.draft?.element.remove(),this.draft=null,this.draftStart=null}startTwoPointDraft(e){this.draftStart=e.clone(),this.draft=this.createRecord({id:this.createId(),type:this.currentType,workspaceKey:this.currentWorkspaceKey,points:[this.pointToData(e),this.pointToData(e)],style:{...this.style}}),this.draft.element.setAttribute("opacity","0.65"),this.draft.element.style.pointerEvents="none",this.svg.appendChild(this.draft.element),this.updateElement(this.draft)}finishTwoPointDraft(e){!this.draft||!this.draftStart||this.draftStart.distanceTo(e)<1e-6||(this.draft.data.points=[this.pointToData(this.draftStart),this.pointToData(e)],this.draft.element.removeAttribute("opacity"),this.finishDraft(),this.draftStart=null)}drawMultiPointDraft(e){if(this.clearDraft(),this.polygonPoints.length===0)return;const t=e?[...this.polygonPoints,e]:this.polygonPoints;this.draft=this.createRecord({id:this.createId(),type:this.currentType==="cloudline"?"cloudline":"polygon",workspaceKey:this.currentWorkspaceKey,points:t.map(i=>this.pointToData(i)),style:{...this.style}}),this.draft.element.setAttribute("opacity","0.65"),this.draft.element.style.pointerEvents="none",this.svg.appendChild(this.draft.element),this.updateElement(this.draft)}createRecord(e){const t=this.createElement(e.type);t.classList.add("markup-2d-shape");const i={data:this.cloneData(e),element:t};return this.applyStyle(i),this.bindSelection(i),i}createElement(e){return e==="rect"?this.svgElement("rect"):e==="ellipse"?this.svgElement("ellipse"):e==="text"?this.svgElement("text"):e==="polygon"||e==="cloudline"?this.svgElement("g"):this.svgElement("g")}bindSelection(e){e.element.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation(),this.cancelSelected(),e.selected=!0,e.element.classList.add("selected"),this.engine.events?.trigger?.("markup-click",this.cloneData(e.data))})}cancelSelected(){this.records.forEach(e=>{e.selected=!1,e.element.classList.remove("selected")})}updateElement(e){this.applyStyle(e);const t=e.data.points.map(i=>this.worldToScreen(i));e.data.type==="line"&&this.updateLine(e,t,!1),e.data.type==="arrow"&&this.updateLine(e,t,!0),e.data.type==="rect"&&this.updateRect(e,t),e.data.type==="ellipse"&&this.updateEllipse(e,t),e.data.type==="text"&&this.updateText(e,t[0]),e.data.type==="polygon"&&this.updatePolygon(e,t),e.data.type==="cloudline"&&this.updateCloudLine(e,t)}updateLine(e,t,i){const n=e.element;if(n.innerHTML="",t.length<2)return;const[r,s]=t,o=this.svgElement("line");if(o.setAttribute("x1",`${r.x}`),o.setAttribute("y1",`${r.y}`),o.setAttribute("x2",`${s.x}`),o.setAttribute("y2",`${s.y}`),this.applySvgPaint(o,e.data.style,!1),n.appendChild(o),e===this.draft&&this.drawVertexMarkers(n,t,e.data.style),!i)return;const a=this.createArrowHead(r,s,e.data.style.strokeWidth);this.applySvgPaint(a,e.data.style,!0),a.setAttribute("fill",e.data.style.stroke),n.appendChild(a)}updateRect(e,t){if(t.length<2)return;const[i,n]=t,r=e.element;r.setAttribute("x",`${Math.min(i.x,n.x)}`),r.setAttribute("y",`${Math.min(i.y,n.y)}`),r.setAttribute("width",`${Math.abs(n.x-i.x)}`),r.setAttribute("height",`${Math.abs(n.y-i.y)}`)}updateEllipse(e,t){if(t.length<2)return;const[i,n]=t,r=e.element;r.setAttribute("cx",`${(i.x+n.x)/2}`),r.setAttribute("cy",`${(i.y+n.y)/2}`),r.setAttribute("rx",`${Math.abs(n.x-i.x)/2}`),r.setAttribute("ry",`${Math.abs(n.y-i.y)/2}`)}updateText(e,t){const i=e.element;i.setAttribute("x",`${t.x}`),i.setAttribute("y",`${t.y}`),i.textContent=e.data.text??""}updatePolygon(e,t){const i=e.element;if(i.innerHTML="",t.length===0)return;const n=t.map(s=>`${s.x},${s.y}`).join(" "),r=t.length>=3?this.svgElement("polygon"):this.svgElement("polyline");r.setAttribute("points",n),this.applySvgPaint(r,e.data.style,t.length>=3),i.appendChild(r),e===this.draft&&this.drawVertexMarkers(i,t,e.data.style)}updateCloudLine(e,t){const i=e.element;if(i.innerHTML="",t.length===0)return;const n=this.svgElement("path");n.setAttribute("d",this.buildCloudPath(t,e.data.style.cloudRadius)),this.applySvgPaint(n,e.data.style,!1),i.appendChild(n),e===this.draft&&this.drawVertexMarkers(i,t,e.data.style)}drawVertexMarkers(e,t,i){t.forEach(n=>{const r=this.svgElement("circle");r.setAttribute("cx",`${n.x}`),r.setAttribute("cy",`${n.y}`),r.setAttribute("r",`${Math.max(3,i.strokeWidth+2)}`),r.setAttribute("fill",i.stroke),r.setAttribute("stroke","#ffffff"),r.setAttribute("stroke-width","1"),e.appendChild(r)})}applyStyle(e){e.data.type==="line"||e.data.type==="arrow"||e.data.type==="polygon"||e.data.type==="cloudline"||(this.applySvgPaint(e.element,e.data.style,e.data.type!=="text"&&e.data.type!=="cloudline"),e.data.type==="text"&&(e.element.setAttribute("font-size",`${e.data.style.fontSize}`),e.element.setAttribute("dominant-baseline","middle"),e.element.setAttribute("fill",e.data.style.stroke),e.element.setAttribute("stroke","none")))}applySvgPaint(e,t,i){e.setAttribute("stroke",t.stroke),e.setAttribute("stroke-width",`${t.strokeWidth}`),e.setAttribute("fill",i?t.fill:"none"),e.setAttribute("stroke-linecap","round"),e.setAttribute("stroke-linejoin","round")}createArrowHead(e,t,i){const n=Math.atan2(t.y-e.y,t.x-e.x),r=Math.max(10,i*5),s={x:t.x-r*Math.cos(n-Math.PI/6),y:t.y-r*Math.sin(n-Math.PI/6)},o={x:t.x-r*Math.cos(n+Math.PI/6),y:t.y-r*Math.sin(n+Math.PI/6)},a=this.svgElement("polygon");return a.setAttribute("points",`${t.x},${t.y} ${s.x},${s.y} ${o.x},${o.y}`),a}buildCloudPath(e,t){if(e.length===0)return"";if(e.length===1)return`M ${e[0].x} ${e[0].y}`;const i=Math.max(4,t),n=[`M ${e[0].x} ${e[0].y}`];for(let r=0;r<e.length-1;r+=1){const s=e[r],o=e[r+1],a=o.x-s.x,l=o.y-s.y,c=Math.hypot(a,l);if(c<1e-6)continue;const f=Math.max(1,Math.ceil(c/(i*1.6)));for(let p=0;p<f;p+=1){const d=p/f,y=(p+1)/f,h=(d+y)/2,g={x:s.x+a*h-l/c*i*.7,y:s.y+l*h+a/c*i*.7},v={x:s.x+a*y,y:s.y+l*y};n.push(`Q ${g.x} ${g.y} ${v.x} ${v.y}`)}}return n.join(" ")}isMultiPointType(e){return e==="polygon"||e==="cloudline"}isTwoPointType(e){return e==="line"||e==="arrow"||e==="rect"||e==="ellipse"}removeTrailingDuplicatePoints(e){const t=e.map(i=>i.clone());for(;t.length>=2&&t[t.length-1].distanceTo(t[t.length-2])<1e-6;)t.pop();return t}eventToWorld(e){const t=this.engine.renderer.domElement.getBoundingClientRect(),i=this.engine.cameraModule2d.screenToWorld(e.clientX-t.left,e.clientY-t.top);return i.z=0,i}worldToScreen(e){return this.engine.cameraModule2d.worldToScreen(e.x,e.y)}pointToData(e){return{x:e.x,y:e.y,z:e.z}}svgElement(e){return document.createElementNS("http://www.w3.org/2000/svg",e)}cloneData(e){return{...e,points:e.points.map(t=>({...t})),style:{...e.style}}}hexToTransparent(e){const t=e.replace("#",""),i=parseInt(t.slice(0,2),16),n=parseInt(t.slice(2,4),16),r=parseInt(t.slice(4,6),16);return`rgba(${i}, ${n}, ${r}, 0.08)`}normalizeNumber(e,t,i,n){return Number.isFinite(e)?Math.max(t,Math.min(i,Math.round(e))):n}createId(){return`markup-2d-${Date.now()}-${Math.random().toString(16).slice(2)}`}}class _i{container;labelContainer;projectCoordinate;pickCoordinate;emitEvent;labels=new Map;clickCallbacks=new Set;pickResolver=null;isPicking=!1;constructor(e){this.container=e.container,this.projectCoordinate=e.projectCoordinate,this.pickCoordinate=e.pickCoordinate,this.emitEvent=e.emitEvent,this.labelContainer=document.createElement("div"),this.labelContainer.className=e.className??"bim-engine-label-container",this.labelContainer.style.cssText=["position:absolute","left:0","top:0","width:100%","height:100%","pointer-events:none","overflow:hidden","z-index:1200"].join(";"),this.container.appendChild(this.labelContainer)}pickPoint(){return this.cancelPick(),this.isPicking=!0,this.container.style.cursor="crosshair",this.addPickBlockers(),this.container.addEventListener("click",this.handlePickClick,!0),new Promise(e=>{this.pickResolver=e})}startPickPoint(e){const t=this.pickPoint();return e&&t.then(e),t}createLabel(e){const t=e.id??this.createId();if(this.labels.has(t))throw new Error(`LabelManager: label "${t}" already exists`);const i=this.createElement(t),n={id:t,coordinate:{...e.coordinate},icon:e.icon,name:e.name,data:e.data,size:e.iconSize??e.size??28,visible:e.visible??!0,element:i};return this.labels.set(t,n),this.labelContainer.appendChild(i),this.renderLabel(n),this.updateLabelPosition(n),this.emitEvent?.("label-created",this.toPayload(n)),t}updateLabel(e,t){const i=this.labels.get(e);return i?(t.coordinate&&(i.coordinate={...t.coordinate}),t.icon!==void 0&&(i.icon=t.icon),t.name!==void 0&&(i.name=t.name),t.data!==void 0&&(i.data=t.data),t.iconSize!==void 0&&(i.size=t.iconSize),t.size!==void 0&&(i.size=t.size),t.visible!==void 0&&(i.visible=t.visible),this.renderLabel(i),this.updateLabelPosition(i),this.emitEvent?.("label-updated",this.toPayload(i)),!0):!1}deleteLabel(e){const t=this.labels.get(e);return t?(t.element.remove(),this.labels.delete(e),this.emitEvent?.("label-deleted",{id:e}),!0):!1}removeLabel(e){return this.deleteLabel(e)}clearLabels(){Array.from(this.labels.keys()).forEach(e=>this.deleteLabel(e))}getLabel(e){return this.labels.get(e)}getLabels(){return Array.from(this.labels.values())}onLabelClick(e){return this.clickCallbacks.add(e),()=>this.offLabelClick(e)}offLabelClick(e){this.clickCallbacks.delete(e)}update(){this.labels.forEach(e=>this.updateLabelPosition(e))}cancelPick(){this.isPicking&&(this.isPicking=!1,this.container.style.cursor="",this.removePickBlockers(),this.container.removeEventListener("click",this.handlePickClick,!0),this.pickResolver?.(null),this.pickResolver=null)}dispose(){this.cancelPick(),this.clearLabels(),this.clickCallbacks.clear(),this.labelContainer.remove()}createElement(e){const t=document.createElement("div");return t.dataset.labelId=e,t.style.cssText=["position:absolute","display:flex","flex-direction:column","align-items:center","gap:5px","transform:translate(-50%, -100%)","pointer-events:auto","cursor:pointer","user-select:none","white-space:nowrap","font:12px/1.2 -apple-system,BlinkMacSystemFont,Segoe UI,Arial,sans-serif"].join(";"),t.addEventListener("click",i=>{i.preventDefault(),i.stopPropagation();const n=this.labels.get(e);if(!n)return;const r={id:e,label:n,coordinate:n.coordinate,originalEvent:i};this.clickCallbacks.forEach(s=>s(r)),this.emitEvent?.("label-click",r)}),t}renderLabel(e){e.element.innerHTML="";const t=document.createElement("img"),i=this.normalizeIconSize(e.size);t.src=e.icon,t.alt=e.name,t.style.cssText=[`width:${i.width}px`,`height:${i.height}px`,"object-fit:contain","display:block","filter:drop-shadow(0 3px 5px rgba(0,0,0,.32))"].join(";");const n=document.createElement("span");n.textContent=e.name,n.style.cssText=["max-width:160px","overflow:hidden","text-overflow:ellipsis","padding:5px 9px","border-radius:6px","background:rgba(15,23,42,.88)","color:#fff","border:1px solid rgba(255,255,255,.16)","box-shadow:0 3px 10px rgba(0,0,0,.24)"].join(";"),e.element.title=e.name,e.element.appendChild(n),e.element.appendChild(t)}updateLabelPosition(e){const t=this.projectCoordinate(e.coordinate);if(!(e.visible&&t!=null&&t.visible!==!1)||!t){e.element.style.display="none";return}e.element.style.display="flex",e.element.style.left=`${t.x}px`,e.element.style.top=`${t.y}px`}handlePickClick=e=>{e.preventDefault(),e.stopImmediatePropagation();const t=this.pickCoordinate(e);this.isPicking=!1,this.container.style.cursor="",this.removePickBlockers(),this.container.removeEventListener("click",this.handlePickClick,!0),this.pickResolver?.(t),this.pickResolver=null,t&&this.emitEvent?.("label-pick",t)};toPayload(e){return{id:e.id,coordinate:e.coordinate,icon:e.icon,name:e.name,data:e.data,size:e.size,visible:e.visible}}normalizeIconSize(e){return typeof e=="number"?{width:e,height:e}:{width:this.normalizeSizeValue(e.width,28),height:this.normalizeSizeValue(e.height,28)}}normalizeSizeValue(e,t){return Number.isFinite(e)&&e>0?e:t}createId(){return`label-${Date.now()}-${Math.random().toString(16).slice(2)}`}addPickBlockers(){this.container.addEventListener("mousedown",this.blockPickInteraction,!0),this.container.addEventListener("mouseup",this.blockPickInteraction,!0),this.container.addEventListener("touchstart",this.blockPickInteraction,!0),this.container.addEventListener("touchmove",this.blockPickInteraction,!0),this.container.addEventListener("touchend",this.blockPickInteraction,!0)}removePickBlockers(){this.container.removeEventListener("mousedown",this.blockPickInteraction,!0),this.container.removeEventListener("mouseup",this.blockPickInteraction,!0),this.container.removeEventListener("touchstart",this.blockPickInteraction,!0),this.container.removeEventListener("touchmove",this.blockPickInteraction,!0),this.container.removeEventListener("touchend",this.blockPickInteraction,!0)}blockPickInteraction=e=>{e.stopImmediatePropagation()}}class Ci{engine;manager;constructor(e){this.engine=e,this.manager=new _i({container:e.container,className:"bim-engine-label-container bim-engine-label-container-2d",projectCoordinate:t=>this.projectCoordinate(t),pickCoordinate:t=>this.pickCoordinate(t),emitEvent:(t,i)=>this.engine.events?.trigger?.(t,i)})}pickPoint(){return this.manager.pickPoint()}startPickPoint(e){return this.manager.startPickPoint(e)}createLabel(e){return this.manager.createLabel(e)}updateLabel(e,t){return this.manager.updateLabel(e,t)}deleteLabel(e){return this.manager.deleteLabel(e)}removeLabel(e){return this.manager.removeLabel(e)}clearLabels(){this.manager.clearLabels()}getLabel(e){return this.manager.getLabel(e)}getLabels(){return this.manager.getLabels()}onLabelClick(e){return this.manager.onLabelClick(e)}offLabelClick(e){this.manager.offLabelClick(e)}update(){this.manager.update()}dispose(){this.manager.dispose()}projectCoordinate(e){const t=this.engine.cameraModule2d.worldToScreen(e.x??0,e.y??0),i=this.engine.renderer.domElement.clientWidth,n=this.engine.renderer.domElement.clientHeight;return{x:t.x,y:t.y,visible:t.x>=0&&t.x<=i&&t.y>=0&&t.y<=n}}pickCoordinate(e){const t=this.engine.renderer.domElement.getBoundingClientRect(),i=this.engine.cameraModule2d.screenToWorld(e.clientX-t.left,e.clientY-t.top);return{x:i.x,y:i.y,z:0}}}class Ei{engine;mainViewPort=null;constructor(e){this.engine=e}saveMainViewPort(){const e=this.engine.cameraModule2d;return e?(this.mainViewPort={activeCamera:"orthographic",orthographicCamera:e.getViewState()},this.mainViewPort):null}setMainViewPort(e){this.mainViewPort=this.normalizeMainViewPort(e),this.goToMainPort()}goToMainPort(){const e=this.mainViewPort;e&&this.engine.cameraModule2d?.applyViewState(e.orthographicCamera)}resetMainViewPort(){this.mainViewPort=null,this.engine.resetView?.(),this.engine.fitToView?.()}normalizeMainViewPort(e){if(!e)return null;const t=e;return t.orthographicCamera?t:{activeCamera:"orthographic",orthographicCamera:e}}}class Si{constructor(e,t){this.container=e,this.engine=t,this.el=document.createElement("div"),this.el.className="engine-2d-workspace-tabs",this.container.appendChild(this.el),this.unsubscribe=this.engine.events?.on(me.ModelLoaded,()=>this.refresh())??(()=>{}),this.refresh()}el;unsubscribe;loading=!1;refresh(){const e=this.engine.getLayouts?.()??[],t=this.engine.loaderModule2d?.getActiveWorkspace?.()??{type:"model"};this.el.innerHTML="",this.el.appendChild(this.createTab("模型",t.type==="model",()=>this.switchToModelSpace())),e.forEach((i,n)=>{const r=i.name||`布局${n+1}`;this.el.appendChild(this.createTab(r,t.type==="layout"&&t.layoutId===i.id,()=>this.switchToLayout(i.id)))}),this.el.style.display=e.length>0?"flex":"none"}createTab(e,t,i){const n=document.createElement("button");return n.type="button",n.className="engine-2d-workspace-tabs__item",n.classList.toggle("engine-2d-workspace-tabs__item--active",t),n.textContent=e,n.title=e,n.disabled=this.loading||t,n.addEventListener("click",i),n}async switchToModelSpace(){this.loading||await this.runSwitch(()=>this.engine.showModelSpace?.())}async switchToLayout(e){this.loading||await this.runSwitch(()=>this.engine.loadLayout?.(e))}async runSwitch(e){this.loading=!0,this.refresh();try{await e()}finally{this.loading=!1,this.refresh()}}dispose(){this.unsubscribe(),this.el.remove()}}const Ti={version:"3.9.16"}.version;class lt{options;container=null;animationId=null;isRendering=!1;fpsFrameCount=0;fpsLastCheck=0;currentFps=0;enablePerformanceMonitoring=!1;stats;modelToolModule2d;engineStatus2d;octreeBox2d;events;handelBehaved2d;interactionModule2d;sceneModule2d;cameraModule2d;renderModule2d;controlModule2d;loaderModule2d;layerManager;searchManager;themeManager;measure;markup;label;viewCube;cadCursorUI;contextMenuUI;loadingUI;workspaceTabsUI;versionEl=null;linkView2d3d;linkElement2d3d;scene=null;camera=null;renderer=null;dwgData=null;version=Ti;constructor(e){if(this.options=e,this.options.backgroundColor=this.options.backgroundColor??1710618,this.options.enablePerformanceMonitoring=this.options.enablePerformanceMonitoring??!1,this.options.showMouseCoordinates=this.options.showMouseCoordinates??!1,this.options.loadingStyle=this.options.loadingStyle??2,this.options.contextMenu=this.options.contextMenu??{items:[{action:"hideElement",label:"隐藏模型"},{action:"showAll",label:"显示全部"},{action:"hideLayer",label:"隐藏图层"},{action:"showAllLayers",label:"显示所有图层"},{action:"toggleBg",label:"切换背景"},{action:"layerManage",label:"图层管理"},{action:"linkElement2d3d",label:"模型联动",dividerBefore:!0}]},this.enablePerformanceMonitoring=e.enablePerformanceMonitoring??!1,this.container=document.getElementById(e.containerId),!this.container)throw new Error(`Container ${e.containerId} not found`);this.initialize(),this.handelBehaved2d=ei(this),this.interactionModule2d=new ii(this),this.interactionModule2d.init(),this.interactionModule2d.active()}initialize(){this.events=new vt(!1),this.sceneModule2d=new kt(this,this.options),this.scene=this.sceneModule2d.scene,this.cameraModule2d=new _t(this,this.container),this.camera=this.cameraModule2d.orthographicCamera,this.renderModule2d=new Ct(this,this.container,this.options),this.renderer=this.renderModule2d.renderer,this.controlModule2d=new St(this),this.loaderModule2d=new Xt(this),this.themeManager=new ci(this.container),this.layerManager=new He(this),this.searchManager=new hi(this),this.measure=new pi(this),this.markup=new Mi(this),this.label=new Ci(this),this.viewCube=new Ei(this),this.octreeBox2d=new Kt(this),this.modelToolModule2d=new Jt(this),this.engineStatus2d=new Mt(this),this.linkView2d3d=new qt(this),this.linkElement2d3d=new Qt(this),this.sceneModule2d.initGrid(),this.cadCursorUI=new ni(this.container,this.renderer.domElement,this.options.cursorStyle??"short-crosshair"),this.cadCursorUI.setBackgroundColor(this.options.backgroundColor??1710618),this.loadingUI=new si(this.container,this.options.loadingStyle),this.events.on(me.ModelLoadStart,()=>this.loadingUI.show("正在加载...",0)),this.events.on(me.ModelLoadProgress,e=>this.loadingUI.update(e.text,e.progress)),this.events.on(me.ModelLoaded,()=>this.loadingUI.hide()),this.events.on(me.ModelLoadError,()=>this.loadingUI.hide()),this.versionEl=document.createElement("div"),this.versionEl.className="engine-2d-version-text",this.updateVersionDisplay(),this.container.appendChild(this.versionEl),this.workspaceTabsUI=new Si(this.container,this),this.contextMenuUI=new ri(this.container,this.renderer.domElement,e=>{if(e==="search"&&this.searchManager.show(),e==="layerManage"&&this.layerManager.toggle(),e==="hideElement"&&this.modelToolModule2d.hideModel(this.engineStatus2d.highlightModels),e==="showAll"&&this.modelToolModule2d.showAllModels(),e==="hideLayer"&&this.hideHighlightedLayers(),e==="showAllLayers"&&(this.layerManager.setAllLayersVisible(!0),this.layerManager.refresh()),e==="toggleBg"){const t=this.themeManager.getTheme()==="dark"?"light":"dark";this.setTheme(t)}if(e==="linkElement2d3d"){const t=this.linkElement2d3d.toggle();this.contextMenuUI.setMenuItemState("linkElement2d3d",t),!t&&!this.isModelSpaceActive()&&(this.modelToolModule2d.unHighlightModelHover(),this.modelToolModule2d.unhighlightAllModels()),console.log(`[EngineKernel2d] 二三维图元联动: ${t?"已开启":"已关闭"}`)}if(e==="linkView2d3d"){const t=this.linkView2d3d.toggle();this.contextMenuUI.setMenuItemState("linkView2d3d",t),console.log(`[EngineKernel2d] 图模关联: ${t?"已开启":"已关闭"}`)}},this.options.contextMenu?.items),this.contextMenuUI.setMenuItemStates({linkElement2d3d:this.linkElement2d3d.isEnabled(),linkView2d3d:this.linkView2d3d.isEnabled()}),this.initStatsMonitor(),this.startRendering(),console.log(`[EngineKernel2d] 2D Engine initialized (v${this.version})`)}startRendering(){this.isRendering||(this.isRendering=!0,this.fpsLastCheck=performance.now(),this.animate(),console.log("[EngineKernel2d] Rendering started"))}stopRendering(){this.isRendering=!1,this.animationId!==null&&(cancelAnimationFrame(this.animationId),this.animationId=null),console.log("[EngineKernel2d] Rendering stopped")}animate=()=>{this.isRendering&&(this.animationId=requestAnimationFrame(this.animate),this.stats?.begin(),this.controlModule2d.update(),this.camera?.updateMatrixWorld(!0),this.measure?.update(),this.markup?.update(),this.label?.update(),this.scene&&this.camera&&this.renderer&&this.renderer.render(this.scene,this.camera),this.enablePerformanceMonitoring&&this.updatePerformanceStats(),this.stats?.end())};initStatsMonitor(){!(this.options.showStats??this.enablePerformanceMonitoring)||!this.container||(this.stats=new yt,this.stats.showPanel(0),this.stats.dom.className="engine-2d-stats-monitor",this.stats.dom.style.position="absolute",this.stats.dom.style.top="0px",this.stats.dom.style.left="0px",this.stats.dom.style.zIndex="1000",this.container.appendChild(this.stats.dom))}updatePerformanceStats(){this.fpsFrameCount++;const e=performance.now();e-this.fpsLastCheck>=1e3&&(this.currentFps=this.fpsFrameCount,this.fpsFrameCount=0,this.fpsLastCheck=e,this.events.trigger(me.RenderEnd,{fps:this.currentFps}))}async loadModel(e,t){return await this.loaderModule2d.loadModel(e,t),{}}getLayouts(){return this.loaderModule2d?.getLayouts()??[]}getActiveWorkspace(){return this.loaderModule2d?.getActiveWorkspace?.()??{type:"model",name:"模型"}}isModelSpaceActive(){return this.getActiveWorkspace().type==="model"}isElementLink2d3dEnabled(){return this.linkElement2d3d?.isEnabled?.()===!0}async loadLayout(e,t){await this.loaderModule2d.loadLayout(e,t)}async showModelSpace(e){await this.loaderModule2d.showModelSpace(e)}getLayers(){return this.loaderModule2d.getLayers()}getEntitiesByLayer(e){return this.loaderModule2d.getEntitiesByLayer(e)}setLayerVisible(e,t){this.layerManager?.setLayerVisible(e,t)}hideHighlightedLayers(){this.getLayersByModelIds(this.engineStatus2d?.highlightModels??[]).forEach(t=>this.layerManager?.setLayerVisible(t,!1)),this.layerManager?.refresh()}getLayersByModelIds(e){const t=new Set;return e.forEach(i=>{(this.loaderModule2d?.model?.nodeMap?.get(String(i))??this.loaderModule2d?.model?.nodeMap?.get(i))?.forEach(r=>{r?.layer&&t.add(r.layer)})}),Array.from(t)}setTheme(e){this.themeManager.setTheme(e);const t=e==="dark"?1710618:15790320;this.setBackgroundColor(t)}resetView(){this.cameraModule2d&&this.cameraModule2d.resetView()}fitToView(){const e=this.loaderModule2d?.getActiveWorkspaceExtents?.();if(this.getActiveWorkspace().type==="layout"&&e){this.cameraModule2d.fitToExtents(e);return}const t=this.dwgData?.metadata,i=t?.viewExtents??t?.extents;i&&this.cameraModule2d.fitToExtents(i)}setZoom(e){this.cameraModule2d&&this.cameraModule2d.setZoom(e)}getZoom(){return this.cameraModule2d?this.cameraModule2d.getZoom():1}updateVersionDisplay(){this.versionEl&&(this.versionEl.innerHTML=`v${this.version}`)}getPerformanceStats(){const e=this.sceneModule2d.getSceneStats();return{fps:this.currentFps,renderTime:0,entityCount:e.objectCount,visibleEntityCount:e.objectCount}}setBackgroundColor(e){this.options.backgroundColor=e,this.sceneModule2d&&this.sceneModule2d.setBackgroundColor(e),this.cadCursorUI?.setBackgroundColor(e),this.modelToolModule2d?.updateColorsForBackground(e),this.layerManager?.refresh()}clearScene(){this.sceneModule2d&&this.sceneModule2d.clearScene()}resize(){if(this.renderModule2d){const e=this.container?.clientWidth??0,t=this.container?.clientHeight??0;this.renderModule2d.setSize(e,t)}}captureImage(e){if(!this.renderer||!this.sceneModule2d)return console.error("[EngineKernel2d] Renderer or scene module not initialized"),null;const t=this.renderer.domElement,i=e?.format||"png",n=e?.quality||.92,r=`image/${i==="jpeg"?"jpeg":i}`,s=e?.transparent??!1,o=e?.hideGrid??!0,a=e?.hideAxes??!0,l=this.scene?.background??null;let c=!1,f=!1;this.sceneModule2d.adaptiveGrid&&(c=this.sceneModule2d.adaptiveGrid.gridGroup?.visible??!1,o&&this.sceneModule2d.adaptiveGrid.setVisible(!1)),this.sceneModule2d.axesHelper&&(f=this.sceneModule2d.axesHelper.visible??!1,a&&this.sceneModule2d.setAxesVisible(!1)),s&&this.scene&&(this.scene.background=null),this.scene&&this.camera&&this.renderer.render(this.scene,this.camera);const p=t.toDataURL(r,n);this.scene&&(this.scene.background=l),this.sceneModule2d.adaptiveGrid&&o&&this.sceneModule2d.adaptiveGrid.setVisible(c),this.sceneModule2d.axesHelper&&a&&this.sceneModule2d.setAxesVisible(f),this.scene&&this.camera&&this.renderer.render(this.scene,this.camera);const d={dataURL:p};if(e?.download){const y=e.filename||`capture-${Date.now()}.${i}`,h=document.createElement("a");h.href=p,h.download=y,h.style.display="none",document.body.appendChild(h),h.click(),h.remove(),console.log(`[EngineKernel2d] Image captured and downloaded: ${y}`)}else console.log("[EngineKernel2d] Image captured");return d}async captureImageAsync(e){if(!this.renderer||!this.sceneModule2d)return console.error("[EngineKernel2d] Renderer or scene module not initialized"),null;const t=this.renderer.domElement,i=e?.format||"png",n=e?.quality||.92,r=`image/${i==="jpeg"?"jpeg":i}`,s=e?.transparent??!1,o=e?.hideGrid??!0,a=e?.hideAxes??!0,l=this.scene?.background??null;let c=!1,f=!1;this.sceneModule2d.adaptiveGrid&&(c=this.sceneModule2d.adaptiveGrid.gridGroup?.visible??!1,o&&this.sceneModule2d.adaptiveGrid.setVisible(!1)),this.sceneModule2d.axesHelper&&(f=this.sceneModule2d.axesHelper.visible??!1,a&&this.sceneModule2d.setAxesVisible(!1)),s&&this.scene&&(this.scene.background=null),this.scene&&this.camera&&this.renderer.render(this.scene,this.camera);const p=t.toDataURL(r,n),d=await new Promise(h=>{t.toBlob(g=>{g&&h(g)},r,n)}),y=URL.createObjectURL(d);if(this.scene&&(this.scene.background=l),this.sceneModule2d.adaptiveGrid&&o&&this.sceneModule2d.adaptiveGrid.setVisible(c),this.sceneModule2d.axesHelper&&a&&this.sceneModule2d.setAxesVisible(f),this.scene&&this.camera&&this.renderer.render(this.scene,this.camera),e?.download){const h=e.filename||`capture-${Date.now()}.${i}`,g=document.createElement("a");g.href=y,g.download=h,g.style.display="none",document.body.appendChild(g),g.click(),g.remove(),console.log(`[EngineKernel2d] Image captured and downloaded: ${h}`)}else console.log("[EngineKernel2d] Image captured with Blob URL:",y);return{dataURL:p,blobURL:y,blob:d}}dispose(){console.log("[EngineKernel2d] Disposing engine..."),this.stopRendering(),this.cadCursorUI?.dispose(),this.contextMenuUI?.dispose(),this.loadingUI?.dispose(),this.workspaceTabsUI?.dispose(),this.versionEl?.parentElement?.removeChild(this.versionEl),this.searchManager?.dispose(),this.measure?.dispose(),this.markup?.dispose(),this.label?.dispose(),this.themeManager?.dispose(),this.loaderModule2d?.dispose(),this.controlModule2d?.dispose(),this.renderModule2d?.dispose(),this.cameraModule2d?.dispose(),this.sceneModule2d?.dispose(),this.events?.dispose(),this.stats?.dom?.parentElement&&this.stats.dom.parentElement.removeChild(this.stats.dom),this.scene=null,this.camera=null,this.renderer=null,this.dwgData=null,this.stats=void 0,this.versionEl=null,console.log("[EngineKernel2d] Engine disposed")}}function ht(k){return new lt(k)}ve.EngineKernel2d=lt,ve.createEngine2d=ht,ve.default=ht,Object.defineProperties(ve,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
221
+ `,s.addEventListener("click",()=>this.selectResult(n)),s.addEventListener("mouseenter",()=>{this.activeIndex=r,this.highlightItem(this.resultList.querySelectorAll(".engine-2d-search__item"))}),this.resultList.appendChild(s)})}highlight(e,t){const i=this.escapeHtml(e),n=t.trim();if(!n)return i;const r=this.escapeRegExp(this.escapeHtml(n));return i.replace(new RegExp(`(${r})`,"gi"),'<mark class="engine-2d-search__mark">$1</mark>')}highlightItem(e){e.forEach((t,i)=>{t.classList.toggle("engine-2d-search__item--active",i===this.activeIndex)}),this.activeIndex>=0&&e[this.activeIndex]?.scrollIntoView({block:"nearest"})}selectResult(e){this.manager.onResultSelect(e),this.hide()}clearResults(){this.resultList.innerHTML="",this.resultList.style.display="none",this.statusEl.style.display="none";const e=this.wrapper.querySelector(".engine-2d-search__divider");e.style.display="none",this.currentResults=[],this.activeIndex=-1}escapeHtml(e){return String(e??"").replace(/[&<>"']/g,t=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[t]??t)}escapeRegExp(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}show(){this.wrapper.classList.add("engine-2d-search--visible"),requestAnimationFrame(()=>this.input.focus())}hide(){this.wrapper.classList.remove("engine-2d-search--visible"),this.clearResults(),this.input.value="",this.clearBtn.style.opacity="0",this.clearBtn.style.pointerEvents="none"}toggle(){this.wrapper.classList.contains("engine-2d-search--visible")?this.hide():this.show()}dispose(){this.input.removeEventListener("input",this.onInput),this.input.removeEventListener("keydown",this.onKeyDown),this.clearBtn.removeEventListener("click",this.onClear),document.removeEventListener("mousedown",this.onDocMouseDown),document.removeEventListener("keydown",this.onEscape),this.wrapper.parentElement?.removeChild(this.wrapper),this.debounceTimer!==null&&clearTimeout(this.debounceTimer)}}class mi{engine;searchUI=null;constructor(e){this.engine=e;const t=document.getElementById(e?.options?.containerId??"")??e?.container??null;t&&(this.searchUI=new pi(t,this))}search(e){const t=this.normalize(e);return t?(this.engine.loaderModule2d?.model?.textItems??[]).map(n=>{const r=this.getMatchScore(n.text,t);return r==null?null:{id:n.id,name:n.text,type:"文字",layer:n.layer,description:this.getPositionDescription(n),score:r,target:n}}).filter(n=>n!==null).sort((n,r)=>(r.score??0)-(n.score??0)||n.name.length-r.name.length).slice(0,100):[]}onResultSelect(e){const t=e.target;t&&(this.engine.modelToolModule2d?.unhighlightAllModels?.(),this.engine.modelToolModule2d?.highlightModel?.([e.id]),this.fitToText(t))}fitToText(e){const t=e.min?.clone(),i=e.max?.clone(),n=e.anchor?.clone();if((!t||!i||t.distanceTo(i)<1e-6)&&n){const o=Math.max(Number(e.info?.height??100),100);this.engine.cameraModule2d?.fitToExtents({min:[n.x-o,n.y-o,0],max:[n.x+o,n.y+o,0]},2,!0,500);return}if(!t||!i)return;const r=new _.Vector3().subVectors(i,t),s=Math.max(r.x,r.y)<1e-6?2:2.5;this.engine.cameraModule2d?.fitToExtents({min:[t.x,t.y,t.z],max:[i.x,i.y,i.z]},s,!0,500)}getPositionDescription(e){const t=e.anchor??e.min;return t?`X:${t.x.toFixed(0)} Y:${t.y.toFixed(0)}`:""}normalize(e){return String(e??"").trim().toLowerCase().replace(/\s+/g,"")}getMatchScore(e,t){const i=this.normalize(e);if(!i)return null;const n=i.indexOf(t);if(n>=0)return 1e3-n-Math.max(0,i.length-t.length)*.01;let r=0,s=0;for(const o of t){const a=i.indexOf(o,r);if(a<0)return null;s+=a-r,r=a+1}return 500-s-Math.max(0,i.length-t.length)*.01}show(){this.searchUI?.show()}hide(){this.searchUI?.hide()}toggle(){this.searchUI?.toggle()}dispose(){this.searchUI?.dispose(),this.searchUI=null}}const st={dark:{"--e2d-bg":"#1e1f22","--e2d-bg2":"#252526","--e2d-bg3":"#222222","--e2d-bg-hover":"rgba(79,195,247,0.08)","--e2d-bg-accent":"#094771","--e2d-icon-bg":"rgba(255,255,255,0.08)","--e2d-icon-bg-hover":"rgba(255,255,255,0.16)","--e2d-border":"rgba(255,255,255,0.12)","--e2d-border2":"#333333","--e2d-text":"#e0e0e0","--e2d-text2":"#cccccc","--e2d-text3":"rgba(255,255,255,0.35)","--e2d-text4":"#666666","--e2d-text-accent":"#ffffff","--e2d-accent":"#4fc3f7","--e2d-shadow":"rgba(0,0,0,0.50)","--e2d-shadow-lg":"rgba(0,0,0,0.65)","--e2d-cursor":"rgba(255,255,255,0.85)","--e2d-scrollbar":"rgba(255,255,255,0.15)","--e2d-float-bg":"rgba(0,0,0,0.65)","--e2d-float-border":"rgba(255,255,255,0.08)","--e2d-swatch-border":"#444444","--e2d-close":"#aaaaaa","--e2d-close-hover":"#ffffff","--e2d-icon":"rgba(255,255,255,0.4)","--e2d-coord-value":"#76c8ff","--e2d-coord-label":"rgba(255,255,255,0.45)"},light:{"--e2d-bg":"#ffffff","--e2d-bg2":"#ffffff","--e2d-bg3":"#eeeeee","--e2d-bg-hover":"rgba(25,118,210,0.06)","--e2d-bg-accent":"#e3f2fd","--e2d-icon-bg":"rgba(0,0,0,0.06)","--e2d-icon-bg-hover":"rgba(0,0,0,0.12)","--e2d-border":"rgba(0,0,0,0.12)","--e2d-border2":"#e0e0e0","--e2d-text":"#1a1a1a","--e2d-text2":"#444444","--e2d-text3":"rgba(0,0,0,0.40)","--e2d-text4":"#aaaaaa","--e2d-text-accent":"#1565c0","--e2d-accent":"#1976d2","--e2d-shadow":"rgba(0,0,0,0.15)","--e2d-shadow-lg":"rgba(0,0,0,0.22)","--e2d-cursor":"rgba(30,30,30,0.70)","--e2d-scrollbar":"rgba(0,0,0,0.18)","--e2d-float-bg":"#ffffff","--e2d-float-border":"rgba(0,0,0,0.10)","--e2d-swatch-border":"#cccccc","--e2d-close":"#777777","--e2d-close-hover":"#1a1a1a","--e2d-icon":"rgba(0,0,0,0.45)","--e2d-coord-value":"#1976d2","--e2d-coord-label":"rgba(0,0,0,0.50)"}};class gi{container;current;constructor(e,t="dark"){this.container=e,this.current=t,this._apply(t)}_apply(e){const t=st[e];for(const[i,n]of Object.entries(t))this.container.style.setProperty(i,n);this.container.setAttribute("data-e2d-theme",e)}setTheme(e){this.current=e,this._apply(e)}getTheme(){return this.current}toggle(){this.setTheme(this.current==="dark"?"light":"dark")}dispose(){for(const e of Object.keys(st[this.current]))this.container.style.removeProperty(e);this.container.removeAttribute("data-e2d-theme")}}const ot={precision:3,unit:"m",areaUnit:"m²",scale:1};class Ue{manager;points=[];constructor(e){this.manager=e}active(){this.points=[],this.manager.setCurrentTool(this)}disActive(){this.points=[],this.manager.clearPreview()}clearAllPoints(){this.points=[],this.manager.clearPreview()}handleClick(e){this.points.push(e.clone())}handleMove(e){}handleDoubleClick(){}handleRightClick(){this.handleDoubleClick()}handleEnter(){this.handleDoubleClick()}handleEsc(){this.clearAllPoints()}}class yi extends Ue{handleClick(e){super.handleClick(e),this.points.length===2&&(this.manager.addMeasurement("distance",this.points),this.clearAllPoints())}handleMove(e){this.points.length===1&&this.manager.drawPreview("distance",[this.points[0],e])}}class vi extends Ue{handleClick(e){super.handleClick(e),this.manager.drawPreview("area",this.points)}handleMove(e){this.points.length>0&&this.manager.drawPreview("area",[...this.points,e])}handleDoubleClick(){const e=this.manager.removeTrailingDuplicatePoint(this.points);e.length>=3&&this.manager.addMeasurement("area",e),this.clearAllPoints()}}class bi extends Ue{handleClick(e){super.handleClick(e),this.points.length===3&&(this.manager.addMeasurement("angle",this.points),this.clearAllPoints())}handleMove(e){this.points.length>=2&&this.manager.drawPreview("angle",[...this.points,e])}}class wi{distanceMeasure;areaMeasure;angleMeasure;annotationData={distanceAnnotation:[],areaAnnotation:[],angleAnnotation:[]};engine;container;annotationContainer;setting={...ot};isActive=!1;currentTool=null;previewRecord=null;mouseDownPoint=null;hasDraggedAfterMouseDown=!1;currentWorkspaceKey="model";constructor(e){this.engine=e,this.container=e.container,this.distanceMeasure=new yi(this),this.areaMeasure=new vi(this),this.angleMeasure=new bi(this),this.annotationContainer=document.createElement("div"),this.annotationContainer.className="annotation-container",this.annotationContainer.style.pointerEvents="none",this.annotationContainer.style.zIndex="20",this.container.appendChild(this.annotationContainer)}active(){if(this.isActive)return;this.isActive=!0,this.engine.interactionModule2d?.disActive?.();const e=this.engine.renderer.domElement;e.addEventListener("mousedown",this.handleMouseDown,!0),e.addEventListener("click",this.handleClick,!0),e.addEventListener("mousemove",this.handleMove,!0),e.addEventListener("dblclick",this.handleDoubleClick,!0),e.addEventListener("contextmenu",this.handleContextMenu,!0),window.addEventListener("keydown",this.handleKeyDown,!0)}disActive(){if(!this.isActive)return;this.quitDraw(),this.isActive=!1;const e=this.engine.renderer.domElement;e.removeEventListener("mousedown",this.handleMouseDown,!0),e.removeEventListener("click",this.handleClick,!0),e.removeEventListener("mousemove",this.handleMove,!0),e.removeEventListener("dblclick",this.handleDoubleClick,!0),e.removeEventListener("contextmenu",this.handleContextMenu,!0),window.removeEventListener("keydown",this.handleKeyDown,!0),this.engine.interactionModule2d?.active?.(),this.clearAll()}quitDraw(){this.currentTool?.disActive(),this.currentTool=null,this.clearPreview()}activate(e){this.active(),this.disActiveMeasureTools(),e==="distance"&&this.distanceMeasure.active(),e==="area"&&this.areaMeasure.active(),e==="angle"&&this.angleMeasure.active()}clearAllPoints(){this.distanceMeasure.clearAllPoints(),this.areaMeasure.clearAllPoints(),this.angleMeasure.clearAllPoints()}clearAll(){Object.values(this.annotationData).forEach(e=>this.removeRecords(e,t=>t.workspaceKey===this.currentWorkspaceKey)),this.clearPreview()}cancelCurrentSelectedAnnotation(){Object.values(this.annotationData).flat().forEach(e=>{e.highlight=!1,this.applyRecordHighlight(e,!1)})}saveSetting(e){this.setting={...this.setting,...e,precision:this.normalizePrecision(e.precision??this.setting.precision),scale:Number.isFinite(e.scale)&&e.scale>0?e.scale:this.setting.scale},this.refreshLabels()}setPrecision(e){this.saveSetting({precision:e})}getSetting(){return{...this.setting}}update(){this.updateRecords(Object.values(this.annotationData).flat().filter(e=>e.workspaceKey===this.currentWorkspaceKey)),this.previewRecord&&this.updateRecordSvg(this.previewRecord)}setWorkspace(e){!e||e===this.currentWorkspaceKey||(this.clearPreview(),this.cancelCurrentSelectedAnnotation(),this.currentWorkspaceKey=e,this.refreshWorkspaceVisibility())}dispose(){this.disActive(),this.clearAll(),this.annotationContainer.remove()}setCurrentTool(e){this.currentTool=e}drawPreview(e,t){this.clearPreview(),!(t.length<2)&&(this.previewRecord=this.createRecord(e,t,!0),this.annotationContainer.appendChild(this.previewRecord.container),this.updateRecordSvg(this.previewRecord))}clearPreview(){this.previewRecord?.container.remove(),this.previewRecord=null}addMeasurement(e,t){const i=this.createRecord(e,t,!1);return this.annotationContainer.appendChild(i.container),this.getRecords(e).push(i),this.updateRecordSvg(i),this.engine.events?.trigger?.("measure-changed",i),i}deleteSelected(){Object.values(this.annotationData).forEach(e=>{for(let t=e.length-1;t>=0;t--)e[t].workspaceKey===this.currentWorkspaceKey&&e[t].highlight&&(e[t].container.remove(),e.splice(t,1))})}removeTrailingDuplicatePoint(e){if(e.length<2)return e.map(r=>r.clone());const t=e.map(r=>r.clone()),i=t[t.length-1],n=t[t.length-2];return i.distanceTo(n)<1e-6&&t.pop(),t}disActiveMeasureTools(){this.distanceMeasure.disActive(),this.areaMeasure.disActive(),this.angleMeasure.disActive()}handleMouseDown=e=>{this.mouseDownPoint=new _.Vector2(e.clientX,e.clientY),this.hasDraggedAfterMouseDown=!1};handleClick=e=>{!this.currentTool||this.hasDraggedAfterMouseDown||(e.preventDefault(),e.stopImmediatePropagation(),this.currentTool.handleClick(this.eventToWorld(e)))};handleMove=e=>{this.currentTool&&(this.mouseDownPoint&&new _.Vector2(e.clientX,e.clientY).distanceTo(this.mouseDownPoint)>3&&(this.hasDraggedAfterMouseDown=!0),this.currentTool.handleMove(this.eventToWorld(e)))};handleDoubleClick=e=>{this.currentTool&&(e.preventDefault(),e.stopImmediatePropagation(),this.currentTool.handleDoubleClick())};handleContextMenu=e=>{this.currentTool&&(e.preventDefault(),e.stopImmediatePropagation(),this.currentTool.handleRightClick())};handleKeyDown=e=>{this.isActive&&(e.key==="Escape"&&(e.preventDefault(),e.stopImmediatePropagation(),this.currentTool?.handleEsc(),this.disActive(),this.engine.events?.trigger?.("quit_measure_draw",!0),window.dispatchEvent(new CustomEvent("D2MeasureQuit"))),(e.key==="Delete"||e.key==="Backspace")&&(e.preventDefault(),e.stopImmediatePropagation(),this.deleteSelected()),e.key==="Enter"&&this.currentTool&&(e.preventDefault(),this.currentTool.handleEnter()))};eventToWorld(e){const t=this.engine.renderer.domElement.getBoundingClientRect(),i=this.engine.cameraModule2d.screenToWorld(e.clientX-t.left,e.clientY-t.top);return i.z=0,i}createRecord(e,t,i){const n=document.createElement("div");n.className=`${e}-annotation`,n.style.position="absolute",n.style.left="0px",n.style.top="0px",n.style.pointerEvents="none";const r=this.createSvg(e);i&&(r.style.opacity="0.65"),n.appendChild(r);const s=this.computeValue(e,t),o={id:this.createId(),type:e,workspaceKey:this.currentWorkspaceKey,points:t.map(a=>a.clone()),container:n,svg:r,value:s,text:this.formatValue(e,s),isSelect:i};return i||this.bindRecordSelection(o),o}createSvg(e){const t=document.createElementNS("http://www.w3.org/2000/svg","svg");if(t.classList.add("measureSvg"),t.style.left="0",t.style.top="0",t.style.pointerEvents="none",e==="area"){const o=this.svgElement("polygon");o.setAttribute("fill","rgba(0, 155, 234, 0.12)"),o.setAttribute("stroke","none"),t.appendChild(o)}const i=e==="angle"?2:1;for(let o=0;o<i;o++){const a=this.svgElement("polyline");a.classList.add("measureLine"),a.setAttribute("stroke-width","2"),a.setAttribute("style","fill: none; opacity: 1;"),t.appendChild(a)}const n=e==="angle"?3:e==="distance"?2:0;for(let o=0;o<n;o++){const a=this.svgElement("circle");a.classList.add("measurePointer"),a.setAttribute("r","5"),t.appendChild(a)}const r=this.svgElement("rect");r.classList.add("measureBack"),r.setAttribute("width","100"),r.setAttribute("height","25"),r.style.pointerEvents="auto",r.style.cursor="pointer",t.appendChild(r);const s=this.svgElement("text");return s.classList.add("measureLabel"),s.setAttribute("text-anchor","middle"),t.appendChild(s),t}bindRecordSelection(e){e.svg.getElementsByTagName("rect")[0].addEventListener("click",i=>{i.preventDefault(),i.stopPropagation(),this.cancelCurrentSelectedAnnotation(),e.highlight=!0,this.applyRecordHighlight(e,!0),this.engine.events?.trigger?.("measure-click",e)})}applyRecordHighlight(e,t){[e.svg,...Array.from(e.svg.getElementsByTagName("polyline")),...Array.from(e.svg.getElementsByTagName("circle")),...Array.from(e.svg.getElementsByTagName("polygon")),...Array.from(e.svg.getElementsByTagName("rect")),...Array.from(e.svg.getElementsByTagName("text"))].forEach(n=>{n.classList.toggle("Hight",t),n.classList.toggle("measure-2d-selected",t)})}svgElement(e){return document.createElementNS("http://www.w3.org/2000/svg",e)}updateRecords(e){e.forEach(t=>this.updateRecordSvg(t))}updateRecordSvg(e){const t=this.container.clientWidth||1,i=this.container.clientHeight||1;e.svg.setAttribute("width",`${t}`),e.svg.setAttribute("height",`${i}`),e.svg.style.width=`${t}px`,e.svg.style.height=`${i}px`;const n=e.points.map(r=>this.worldToScreen(r));e.type==="distance"&&this.updateDistanceSvg(e,n),e.type==="area"&&this.updateAreaSvg(e,n),e.type==="angle"&&this.updateAngleSvg(e,n)}updateDistanceSvg(e,t){const[i,n]=t,r=e.svg.getElementsByTagName("polyline")[0],s=e.svg.getElementsByTagName("circle");r.setAttribute("points",`${i.x},${i.y} ${n.x},${n.y}`),s[0].setAttribute("cx",`${i.x}`),s[0].setAttribute("cy",`${i.y}`),s[1].setAttribute("cx",`${n.x}`),s[1].setAttribute("cy",`${n.y}`),this.updateLabel(e,(i.x+n.x)/2,(i.y+n.y)/2)}updateAreaSvg(e,t){const i=t.map(o=>`${o.x},${o.y}`).join(" "),r=(t.length>=3?[...t,t[0]]:t).map(o=>`${o.x},${o.y}`).join(" ");e.svg.getElementsByTagName("polygon")[0].setAttribute("points",t.length>=3?i:""),e.svg.getElementsByTagName("polyline")[0].setAttribute("points",r);const s=t.reduce((o,a)=>(o.x+=a.x,o.y+=a.y,o),{x:0,y:0});this.updateLabel(e,s.x/t.length,s.y/t.length)}updateAngleSvg(e,t){const[i,n,r]=t,s=e.svg.getElementsByTagName("polyline"),o=e.svg.getElementsByTagName("circle");s[0].setAttribute("points",`${i.x},${i.y} ${n.x},${n.y}`),s[1].setAttribute("points",`${n.x},${n.y} ${r.x},${r.y}`),[i,n,r].forEach((a,l)=>{o[l].setAttribute("cx",`${a.x}`),o[l].setAttribute("cy",`${a.y}`)}),this.updateLabel(e,n.x,n.y-30)}updateLabel(e,t,i){e.value=this.computeValue(e.type,e.points),e.text=this.formatValue(e.type,e.value);const n=e.svg.getElementsByTagName("rect")[0],r=e.svg.getElementsByTagName("text")[0],s=Math.max(100,e.text.length*9+22);n.setAttribute("x",`${t-s/2}`),n.setAttribute("y",`${i-12.5}`),n.setAttribute("width",`${s}`),r.setAttribute("x",`${t}`),r.setAttribute("y",`${i+4}`),r.textContent=e.text}worldToScreen(e){return this.engine.cameraModule2d.worldToScreen(e.x,e.y)}computeValue(e,t){return e==="distance"?t[0].distanceTo(t[1])*this.setting.scale:e==="angle"?this.computeAngle(t[0],t[1],t[2]):this.computeArea(t)*this.setting.scale*this.setting.scale}computeArea(e){if(e.length<3)return 0;let t=0;for(let i=0;i<e.length;i++){const n=e[i],r=e[(i+1)%e.length];t+=n.x*r.y-r.x*n.y}return Math.abs(t)/2}computeAngle(e,t,i){const n=e.clone().sub(t).normalize(),r=i.clone().sub(t).normalize(),s=_.MathUtils.clamp(n.dot(r),-1,1);return _.MathUtils.radToDeg(Math.acos(s))}formatValue(e,t){return e==="angle"?`${t.toFixed(this.setting.precision)}°`:e==="area"?`${t.toFixed(this.setting.precision)} ${this.setting.areaUnit??`${this.setting.unit}²`}`:`${t.toFixed(this.setting.precision)} ${this.setting.unit}`}refreshLabels(){Object.values(this.annotationData).flat().filter(e=>e.workspaceKey===this.currentWorkspaceKey).forEach(e=>{e.value=this.computeValue(e.type,e.points),e.text=this.formatValue(e.type,e.value),this.updateRecordSvg(e)})}refreshWorkspaceVisibility(){Object.values(this.annotationData).flat().forEach(e=>{e.container.style.display=e.workspaceKey===this.currentWorkspaceKey?"":"none"})}removeRecords(e,t){for(let i=e.length-1;i>=0;i-=1)t(e[i])&&(e[i].container.remove(),e.splice(i,1))}getRecords(e){return e==="distance"?this.annotationData.distanceAnnotation:e==="area"?this.annotationData.areaAnnotation:this.annotationData.angleAnnotation}normalizePrecision(e){return Number.isFinite(e)?Math.max(0,Math.min(8,Math.round(e))):ot.precision}createId(){return`measure-2d-${Date.now()}-${Math.random().toString(16).slice(2)}`}}const Ve={stroke:"#ff4d4f",fill:"rgba(255, 77, 79, 0.08)",strokeWidth:2,fontSize:16,cloudRadius:10},xi={none:xe("/assets/icon/选择.svg",typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__filename).href:typeof document>"u"?location.href:se&&se.tagName.toUpperCase()==="SCRIPT"&&se.src||new URL("dwg-preview.umd.js",document.baseURI).href),line:xe("/assets/icon/线.svg",typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__filename).href:typeof document>"u"?location.href:se&&se.tagName.toUpperCase()==="SCRIPT"&&se.src||new URL("dwg-preview.umd.js",document.baseURI).href),arrow:xe("/assets/icon/箭头.svg",typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__filename).href:typeof document>"u"?location.href:se&&se.tagName.toUpperCase()==="SCRIPT"&&se.src||new URL("dwg-preview.umd.js",document.baseURI).href),rect:xe("/assets/icon/矩形.svg",typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__filename).href:typeof document>"u"?location.href:se&&se.tagName.toUpperCase()==="SCRIPT"&&se.src||new URL("dwg-preview.umd.js",document.baseURI).href),ellipse:xe("/assets/icon/圆形.svg",typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__filename).href:typeof document>"u"?location.href:se&&se.tagName.toUpperCase()==="SCRIPT"&&se.src||new URL("dwg-preview.umd.js",document.baseURI).href),polygon:xe("/assets/icon/面积.svg",typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__filename).href:typeof document>"u"?location.href:se&&se.tagName.toUpperCase()==="SCRIPT"&&se.src||new URL("dwg-preview.umd.js",document.baseURI).href),text:xe("/assets/icon/文字.svg",typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__filename).href:typeof document>"u"?location.href:se&&se.tagName.toUpperCase()==="SCRIPT"&&se.src||new URL("dwg-preview.umd.js",document.baseURI).href),cloudline:xe("/assets/icon/云线.svg",typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__filename).href:typeof document>"u"?location.href:se&&se.tagName.toUpperCase()==="SCRIPT"&&se.src||new URL("dwg-preview.umd.js",document.baseURI).href)},ki="data:image/svg+xml;utf8,"+encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#1f2937" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h18"/><path d="M8 6V4h8v2"/><path d="M6 6l1 16h10l1-16"/><path d="M10 11v6"/><path d="M14 11v6"/></svg>'),Mi="data:image/svg+xml;utf8,"+encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#1f2937" stroke-width="2" stroke-linecap="round"><path d="M6 6l12 12"/><path d="M18 6L6 18"/></svg>');class _i{engine;container;layer;svg;toolbar;records=[];isActive=!1;currentType=null;style={...Ve};draft=null;draftStart=null;polygonPoints=[];currentWorkspaceKey="model";mouseDownPoint=null;hasDraggedAfterMouseDown=!1;buttons={};constructor(e){this.engine=e,this.container=e.container,getComputedStyle(this.container).position==="static"&&(this.container.style.position="relative"),this.layer=document.createElement("div"),this.layer.className="markup-2d-layer",this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.classList.add("markup-2d-svg"),this.layer.appendChild(this.svg),this.toolbar=this.createToolbar(),this.layer.appendChild(this.toolbar),this.container.appendChild(this.layer)}active(e){if(this.engine.measure?.quitDraw?.(),!this.isActive){this.isActive=!0,this.engine.interactionModule2d?.disActive?.();const t=this.engine.renderer.domElement;t.addEventListener("mousedown",this.handleMouseDown,!0),t.addEventListener("mousemove",this.handleMouseMove,!0),t.addEventListener("mouseup",this.handleMouseUp,!0),t.addEventListener("click",this.handleClick,!0),t.addEventListener("dblclick",this.handleDoubleClick,!0),t.addEventListener("wheel",this.blockDrawingEvent,!0),t.addEventListener("touchstart",this.blockDrawingEvent,!0),t.addEventListener("touchmove",this.blockDrawingEvent,!0),window.addEventListener("keydown",this.handleKeyDown,!0)}this.showToolbar(),e&&this.setDrawType(e)}show(){this.active()}hide(){this.hideToolbar(),this.disActive()}disActive(){if(!this.isActive)return;this.isActive=!1,this.currentType=null,this.clearDraft(),this.polygonPoints=[],this.syncToolbar();const e=this.engine.renderer.domElement;e.removeEventListener("mousedown",this.handleMouseDown,!0),e.removeEventListener("mousemove",this.handleMouseMove,!0),e.removeEventListener("mouseup",this.handleMouseUp,!0),e.removeEventListener("click",this.handleClick,!0),e.removeEventListener("dblclick",this.handleDoubleClick,!0),e.removeEventListener("wheel",this.blockDrawingEvent,!0),e.removeEventListener("touchstart",this.blockDrawingEvent,!0),e.removeEventListener("touchmove",this.blockDrawingEvent,!0),window.removeEventListener("keydown",this.handleKeyDown,!0),this.engine.interactionModule2d?.active?.()}setDrawType(e){this.currentType=e==="none"?null:e,this.clearDraft(),this.polygonPoints=[],this.syncToolbar()}update(){const e=this.container.clientWidth||1,t=this.container.clientHeight||1;this.svg.setAttribute("width",`${e}`),this.svg.setAttribute("height",`${t}`),this.svg.style.width=`${e}px`,this.svg.style.height=`${t}px`,this.records.forEach(i=>{i.element.style.display=i.data.workspaceKey===this.currentWorkspaceKey?"":"none",this.updateElement(i)}),this.draft&&this.updateElement(this.draft)}setWorkspace(e){!e||e===this.currentWorkspaceKey||(this.currentWorkspaceKey=e,this.clearDraft(),this.polygonPoints=[],this.cancelSelected(),this.update())}getData(){return this.records.map(e=>this.cloneData(e.data))}restoreData(e=[]){this.clearAll(!0),e.forEach(t=>this.addMarkup(t)),this.update()}get(){return{cameraViewState:this.engine.cameraModule2d?.getViewState?.()??null,markupData:this.getData()}}restore(e){e&&(e.cameraViewState&&this.engine.cameraModule2d?.applyViewState?.(e.cameraViewState),this.restoreData(e.markupData??[]))}addMarkup(e){const t={id:e.id??this.createId(),type:e.type,workspaceKey:e.workspaceKey??this.currentWorkspaceKey,points:e.points.map(n=>({x:n.x,y:n.y,z:n.z??0})),text:e.text,style:{...this.style,...e.style??{}}},i=this.createRecord(t);return this.records.push(i),this.svg.appendChild(i.element),this.updateElement(i),this.engine.events?.trigger?.("markup-changed",this.cloneData(t)),this.cloneData(t)}clearAll(e=!1){for(let t=this.records.length-1;t>=0;t-=1){const i=this.records[t];!e&&i.data.workspaceKey!==this.currentWorkspaceKey||(i.element.remove(),this.records.splice(t,1))}this.clearDraft()}deleteSelected(){for(let e=this.records.length-1;e>=0;e-=1)this.records[e].selected&&(this.records[e].element.remove(),this.records.splice(e,1));this.engine.events?.trigger?.("markup-changed",this.getData())}dispose(){this.disActive(),this.records.forEach(e=>e.element.remove()),this.records=[],this.layer.remove()}blockDrawingEvent=e=>{this.currentType&&(e instanceof MouseEvent&&this.engine.cadCursorUI?.updateFromMouseEvent?.(e),e.preventDefault(),e.stopImmediatePropagation())};handleMouseDown=e=>{this.currentType&&(this.blockDrawingEvent(e),this.mouseDownPoint=new _.Vector2(e.clientX,e.clientY),this.hasDraggedAfterMouseDown=!1)};handleMouseMove=e=>{if(this.currentType){if(this.blockDrawingEvent(e),this.mouseDownPoint&&e.buttons!==0){const t=new _.Vector2(e.clientX,e.clientY);this.hasDraggedAfterMouseDown=t.distanceTo(this.mouseDownPoint)>3}if(this.isMultiPointType(this.currentType)&&this.polygonPoints.length>0){this.drawMultiPointDraft(this.eventToWorld(e));return}!this.draft||!this.draftStart||(this.draft.data.points=[this.pointToData(this.draftStart),this.pointToData(this.eventToWorld(e))],this.updateElement(this.draft))}};handleMouseUp=e=>{this.currentType&&(this.blockDrawingEvent(e),this.mouseDownPoint=null)};handleClick=e=>{if(this.currentType&&(this.blockDrawingEvent(e),!this.hasDraggedAfterMouseDown)){if(this.currentType==="text"){const t=window.prompt("请输入标记文字","文字")??"";t.trim()&&this.addMarkup({type:"text",points:[this.pointToData(this.eventToWorld(e))],text:t.trim()});return}if(this.isTwoPointType(this.currentType)){const t=this.eventToWorld(e);this.draftStart?this.finishTwoPointDraft(t):this.startTwoPointDraft(t);return}this.isMultiPointType(this.currentType)&&(this.polygonPoints.push(this.eventToWorld(e)),this.drawMultiPointDraft())}};handleDoubleClick=e=>{if(!this.currentType||!this.isMultiPointType(this.currentType))return;this.blockDrawingEvent(e);const t=this.currentType==="cloudline"?2:3,i=this.removeTrailingDuplicatePoints(this.polygonPoints);i.length>=t&&this.addMarkup({type:this.currentType,points:i.map(n=>this.pointToData(n))}),this.polygonPoints=[],this.clearDraft()};handleKeyDown=e=>{if(this.isActive&&(e.key==="Escape"&&(e.preventDefault(),this.clearDraft(),this.polygonPoints=[],this.setDrawType("none")),(e.key==="Delete"||e.key==="Backspace")&&(e.preventDefault(),this.deleteSelected()),e.key==="Enter"&&this.currentType&&this.isMultiPointType(this.currentType))){e.preventDefault();const t=this.currentType==="cloudline"?2:3,i=this.removeTrailingDuplicatePoints(this.polygonPoints);i.length>=t&&this.addMarkup({type:this.currentType,points:i.map(n=>this.pointToData(n))}),this.polygonPoints=[],this.clearDraft()}};createToolbar(){const e=document.createElement("div");e.className="markup-2d-toolbar",[{type:"none",title:"选择"},{type:"line",title:"直线"},{type:"arrow",title:"箭头"},{type:"rect",title:"矩形"},{type:"ellipse",title:"圆形/椭圆"},{type:"polygon",title:"多边形,双击或 Enter 结束"},{type:"cloudline",title:"云线,双击或 Enter 结束"},{type:"text",title:"文字"}].forEach(a=>{const l=this.createIconButton(a.title,xi[a.type]);l.onclick=()=>{this.active(),this.setDrawType(a.type)},a.type!=="none"&&(this.buttons[a.type]=l),e.appendChild(l)}),e.appendChild(this.createDivider());const i=document.createElement("input");i.type="color",i.value=this.style.stroke,i.title="颜色",i.oninput=()=>{this.style.stroke=i.value,this.style.fill=this.hexToTransparent(i.value)},e.appendChild(i);const n=document.createElement("input");n.type="number",n.min="1",n.max="20",n.value=`${this.style.strokeWidth}`,n.title="线宽",n.onchange=()=>{this.style.strokeWidth=this.normalizeNumber(n.valueAsNumber,1,20,Ve.strokeWidth)},e.appendChild(n);const r=document.createElement("input");r.type="number",r.min="10",r.max="72",r.value=`${this.style.fontSize}`,r.title="字号",r.onchange=()=>{this.style.fontSize=this.normalizeNumber(r.valueAsNumber,10,72,Ve.fontSize)},e.appendChild(r),e.appendChild(this.createDivider());const s=this.createIconButton("清空",ki);s.onclick=()=>this.clearAll(),e.appendChild(s);const o=this.createIconButton("关闭",Mi);return o.onclick=()=>{this.hideToolbar(),this.disActive()},e.appendChild(o),e}createDivider(){const e=document.createElement("div");return e.className="markup-2d-divider",e}createIconButton(e,t){const i=document.createElement("button");i.type="button",i.title=e,i.setAttribute("aria-label",e),i.classList.add("markup-2d-icon-button");const n=document.createElement("img");return n.src=t,n.alt=e,n.draggable=!1,i.appendChild(n),i}showToolbar(){this.toolbar.style.display="flex"}hideToolbar(){this.toolbar.style.display="none"}syncToolbar(){Object.entries(this.buttons).forEach(([e,t])=>{t?.classList.toggle("active",e===this.currentType)})}finishDraft(){if(!this.draft)return;const e=this.draft;this.draft=null,e.element.style.pointerEvents="auto",this.records.push(e),this.updateElement(e),this.engine.events?.trigger?.("markup-changed",this.cloneData(e.data))}clearDraft(){this.draft?.element.remove(),this.draft=null,this.draftStart=null}startTwoPointDraft(e){this.draftStart=e.clone(),this.draft=this.createRecord({id:this.createId(),type:this.currentType,workspaceKey:this.currentWorkspaceKey,points:[this.pointToData(e),this.pointToData(e)],style:{...this.style}}),this.draft.element.setAttribute("opacity","0.65"),this.draft.element.style.pointerEvents="none",this.svg.appendChild(this.draft.element),this.updateElement(this.draft)}finishTwoPointDraft(e){!this.draft||!this.draftStart||this.draftStart.distanceTo(e)<1e-6||(this.draft.data.points=[this.pointToData(this.draftStart),this.pointToData(e)],this.draft.element.removeAttribute("opacity"),this.finishDraft(),this.draftStart=null)}drawMultiPointDraft(e){if(this.clearDraft(),this.polygonPoints.length===0)return;const t=e?[...this.polygonPoints,e]:this.polygonPoints;this.draft=this.createRecord({id:this.createId(),type:this.currentType==="cloudline"?"cloudline":"polygon",workspaceKey:this.currentWorkspaceKey,points:t.map(i=>this.pointToData(i)),style:{...this.style}}),this.draft.element.setAttribute("opacity","0.65"),this.draft.element.style.pointerEvents="none",this.svg.appendChild(this.draft.element),this.updateElement(this.draft)}createRecord(e){const t=this.createElement(e.type);t.classList.add("markup-2d-shape");const i={data:this.cloneData(e),element:t};return this.applyStyle(i),this.bindSelection(i),i}createElement(e){return e==="rect"?this.svgElement("rect"):e==="ellipse"?this.svgElement("ellipse"):e==="text"?this.svgElement("text"):e==="polygon"||e==="cloudline"?this.svgElement("g"):this.svgElement("g")}bindSelection(e){e.element.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation(),this.cancelSelected(),e.selected=!0,e.element.classList.add("selected"),this.engine.events?.trigger?.("markup-click",this.cloneData(e.data))})}cancelSelected(){this.records.forEach(e=>{e.selected=!1,e.element.classList.remove("selected")})}updateElement(e){this.applyStyle(e);const t=e.data.points.map(i=>this.worldToScreen(i));e.data.type==="line"&&this.updateLine(e,t,!1),e.data.type==="arrow"&&this.updateLine(e,t,!0),e.data.type==="rect"&&this.updateRect(e,t),e.data.type==="ellipse"&&this.updateEllipse(e,t),e.data.type==="text"&&this.updateText(e,t[0]),e.data.type==="polygon"&&this.updatePolygon(e,t),e.data.type==="cloudline"&&this.updateCloudLine(e,t)}updateLine(e,t,i){const n=e.element;if(n.innerHTML="",t.length<2)return;const[r,s]=t,o=this.svgElement("line");if(o.setAttribute("x1",`${r.x}`),o.setAttribute("y1",`${r.y}`),o.setAttribute("x2",`${s.x}`),o.setAttribute("y2",`${s.y}`),this.applySvgPaint(o,e.data.style,!1),n.appendChild(o),e===this.draft&&this.drawVertexMarkers(n,t,e.data.style),!i)return;const a=this.createArrowHead(r,s,e.data.style.strokeWidth);this.applySvgPaint(a,e.data.style,!0),a.setAttribute("fill",e.data.style.stroke),n.appendChild(a)}updateRect(e,t){if(t.length<2)return;const[i,n]=t,r=e.element;r.setAttribute("x",`${Math.min(i.x,n.x)}`),r.setAttribute("y",`${Math.min(i.y,n.y)}`),r.setAttribute("width",`${Math.abs(n.x-i.x)}`),r.setAttribute("height",`${Math.abs(n.y-i.y)}`)}updateEllipse(e,t){if(t.length<2)return;const[i,n]=t,r=e.element;r.setAttribute("cx",`${(i.x+n.x)/2}`),r.setAttribute("cy",`${(i.y+n.y)/2}`),r.setAttribute("rx",`${Math.abs(n.x-i.x)/2}`),r.setAttribute("ry",`${Math.abs(n.y-i.y)/2}`)}updateText(e,t){const i=e.element;i.setAttribute("x",`${t.x}`),i.setAttribute("y",`${t.y}`),i.textContent=e.data.text??""}updatePolygon(e,t){const i=e.element;if(i.innerHTML="",t.length===0)return;const n=t.map(s=>`${s.x},${s.y}`).join(" "),r=t.length>=3?this.svgElement("polygon"):this.svgElement("polyline");r.setAttribute("points",n),this.applySvgPaint(r,e.data.style,t.length>=3),i.appendChild(r),e===this.draft&&this.drawVertexMarkers(i,t,e.data.style)}updateCloudLine(e,t){const i=e.element;if(i.innerHTML="",t.length===0)return;const n=this.svgElement("path");n.setAttribute("d",this.buildCloudPath(t,e.data.style.cloudRadius)),this.applySvgPaint(n,e.data.style,!1),i.appendChild(n),e===this.draft&&this.drawVertexMarkers(i,t,e.data.style)}drawVertexMarkers(e,t,i){t.forEach(n=>{const r=this.svgElement("circle");r.setAttribute("cx",`${n.x}`),r.setAttribute("cy",`${n.y}`),r.setAttribute("r",`${Math.max(3,i.strokeWidth+2)}`),r.setAttribute("fill",i.stroke),r.setAttribute("stroke","#ffffff"),r.setAttribute("stroke-width","1"),e.appendChild(r)})}applyStyle(e){e.data.type==="line"||e.data.type==="arrow"||e.data.type==="polygon"||e.data.type==="cloudline"||(this.applySvgPaint(e.element,e.data.style,e.data.type!=="text"&&e.data.type!=="cloudline"),e.data.type==="text"&&(e.element.setAttribute("font-size",`${e.data.style.fontSize}`),e.element.setAttribute("dominant-baseline","middle"),e.element.setAttribute("fill",e.data.style.stroke),e.element.setAttribute("stroke","none")))}applySvgPaint(e,t,i){e.setAttribute("stroke",t.stroke),e.setAttribute("stroke-width",`${t.strokeWidth}`),e.setAttribute("fill",i?t.fill:"none"),e.setAttribute("stroke-linecap","round"),e.setAttribute("stroke-linejoin","round")}createArrowHead(e,t,i){const n=Math.atan2(t.y-e.y,t.x-e.x),r=Math.max(10,i*5),s={x:t.x-r*Math.cos(n-Math.PI/6),y:t.y-r*Math.sin(n-Math.PI/6)},o={x:t.x-r*Math.cos(n+Math.PI/6),y:t.y-r*Math.sin(n+Math.PI/6)},a=this.svgElement("polygon");return a.setAttribute("points",`${t.x},${t.y} ${s.x},${s.y} ${o.x},${o.y}`),a}buildCloudPath(e,t){if(e.length===0)return"";if(e.length===1)return`M ${e[0].x} ${e[0].y}`;const i=Math.max(4,t),n=[`M ${e[0].x} ${e[0].y}`];for(let r=0;r<e.length-1;r+=1){const s=e[r],o=e[r+1],a=o.x-s.x,l=o.y-s.y,c=Math.hypot(a,l);if(c<1e-6)continue;const f=Math.max(1,Math.ceil(c/(i*1.6)));for(let p=0;p<f;p+=1){const d=p/f,y=(p+1)/f,h=(d+y)/2,g={x:s.x+a*h-l/c*i*.7,y:s.y+l*h+a/c*i*.7},v={x:s.x+a*y,y:s.y+l*y};n.push(`Q ${g.x} ${g.y} ${v.x} ${v.y}`)}}return n.join(" ")}isMultiPointType(e){return e==="polygon"||e==="cloudline"}isTwoPointType(e){return e==="line"||e==="arrow"||e==="rect"||e==="ellipse"}removeTrailingDuplicatePoints(e){const t=e.map(i=>i.clone());for(;t.length>=2&&t[t.length-1].distanceTo(t[t.length-2])<1e-6;)t.pop();return t}eventToWorld(e){const t=this.engine.renderer.domElement.getBoundingClientRect(),i=this.engine.cameraModule2d.screenToWorld(e.clientX-t.left,e.clientY-t.top);return i.z=0,i}worldToScreen(e){return this.engine.cameraModule2d.worldToScreen(e.x,e.y)}pointToData(e){return{x:e.x,y:e.y,z:e.z}}svgElement(e){return document.createElementNS("http://www.w3.org/2000/svg",e)}cloneData(e){return{...e,points:e.points.map(t=>({...t})),style:{...e.style}}}hexToTransparent(e){const t=e.replace("#",""),i=parseInt(t.slice(0,2),16),n=parseInt(t.slice(2,4),16),r=parseInt(t.slice(4,6),16);return`rgba(${i}, ${n}, ${r}, 0.08)`}normalizeNumber(e,t,i,n){return Number.isFinite(e)?Math.max(t,Math.min(i,Math.round(e))):n}createId(){return`markup-2d-${Date.now()}-${Math.random().toString(16).slice(2)}`}}class Ci{container;labelContainer;projectCoordinate;pickCoordinate;emitEvent;labels=new Map;clickCallbacks=new Set;pickResolver=null;isPicking=!1;constructor(e){this.container=e.container,this.projectCoordinate=e.projectCoordinate,this.pickCoordinate=e.pickCoordinate,this.emitEvent=e.emitEvent,this.labelContainer=document.createElement("div"),this.labelContainer.className=e.className??"bim-engine-label-container",this.labelContainer.style.cssText=["position:absolute","left:0","top:0","width:100%","height:100%","pointer-events:none","overflow:hidden","z-index:1200"].join(";"),this.container.appendChild(this.labelContainer)}pickPoint(){return this.cancelPick(),this.isPicking=!0,this.container.style.cursor="crosshair",this.addPickBlockers(),this.container.addEventListener("click",this.handlePickClick,!0),new Promise(e=>{this.pickResolver=e})}startPickPoint(e){const t=this.pickPoint();return e&&t.then(e),t}createLabel(e){const t=e.id??this.createId();if(this.labels.has(t))throw new Error(`LabelManager: label "${t}" already exists`);const i=this.createElement(t),n={id:t,coordinate:{...e.coordinate},icon:e.icon,name:e.name,data:e.data,size:e.iconSize??e.size??28,visible:e.visible??!0,element:i};return this.labels.set(t,n),this.labelContainer.appendChild(i),this.renderLabel(n),this.updateLabelPosition(n),this.emitEvent?.("label-created",this.toPayload(n)),t}updateLabel(e,t){const i=this.labels.get(e);return i?(t.coordinate&&(i.coordinate={...t.coordinate}),t.icon!==void 0&&(i.icon=t.icon),t.name!==void 0&&(i.name=t.name),t.data!==void 0&&(i.data=t.data),t.iconSize!==void 0&&(i.size=t.iconSize),t.size!==void 0&&(i.size=t.size),t.visible!==void 0&&(i.visible=t.visible),this.renderLabel(i),this.updateLabelPosition(i),this.emitEvent?.("label-updated",this.toPayload(i)),!0):!1}deleteLabel(e){const t=this.labels.get(e);return t?(t.element.remove(),this.labels.delete(e),this.emitEvent?.("label-deleted",{id:e}),!0):!1}removeLabel(e){return this.deleteLabel(e)}clearLabels(){Array.from(this.labels.keys()).forEach(e=>this.deleteLabel(e))}getLabel(e){return this.labels.get(e)}getLabels(){return Array.from(this.labels.values())}onLabelClick(e){return this.clickCallbacks.add(e),()=>this.offLabelClick(e)}offLabelClick(e){this.clickCallbacks.delete(e)}update(){this.labels.forEach(e=>this.updateLabelPosition(e))}cancelPick(){this.isPicking&&(this.isPicking=!1,this.container.style.cursor="",this.removePickBlockers(),this.container.removeEventListener("click",this.handlePickClick,!0),this.pickResolver?.(null),this.pickResolver=null)}dispose(){this.cancelPick(),this.clearLabels(),this.clickCallbacks.clear(),this.labelContainer.remove()}createElement(e){const t=document.createElement("div");return t.dataset.labelId=e,t.style.cssText=["position:absolute","display:flex","flex-direction:column","align-items:center","gap:5px","transform:translate(-50%, -100%)","pointer-events:auto","cursor:pointer","user-select:none","white-space:nowrap","font:12px/1.2 -apple-system,BlinkMacSystemFont,Segoe UI,Arial,sans-serif"].join(";"),t.addEventListener("click",i=>{i.preventDefault(),i.stopPropagation();const n=this.labels.get(e);if(!n)return;const r={id:e,label:n,coordinate:n.coordinate,originalEvent:i};this.clickCallbacks.forEach(s=>s(r)),this.emitEvent?.("label-click",r)}),t}renderLabel(e){e.element.innerHTML="";const t=document.createElement("img"),i=this.normalizeIconSize(e.size);t.src=e.icon,t.alt=e.name,t.style.cssText=[`width:${i.width}px`,`height:${i.height}px`,"object-fit:contain","display:block","filter:drop-shadow(0 3px 5px rgba(0,0,0,.32))"].join(";");const n=document.createElement("span");n.textContent=e.name,n.style.cssText=["max-width:160px","overflow:hidden","text-overflow:ellipsis","padding:5px 9px","border-radius:6px","background:rgba(15,23,42,.88)","color:#fff","border:1px solid rgba(255,255,255,.16)","box-shadow:0 3px 10px rgba(0,0,0,.24)"].join(";"),e.element.title=e.name,e.element.appendChild(n),e.element.appendChild(t)}updateLabelPosition(e){const t=this.projectCoordinate(e.coordinate);if(!(e.visible&&t!=null&&t.visible!==!1)||!t){e.element.style.display="none";return}e.element.style.display="flex",e.element.style.left=`${t.x}px`,e.element.style.top=`${t.y}px`}handlePickClick=e=>{e.preventDefault(),e.stopImmediatePropagation();const t=this.pickCoordinate(e);this.isPicking=!1,this.container.style.cursor="",this.removePickBlockers(),this.container.removeEventListener("click",this.handlePickClick,!0),this.pickResolver?.(t),this.pickResolver=null,t&&this.emitEvent?.("label-pick",t)};toPayload(e){return{id:e.id,coordinate:e.coordinate,icon:e.icon,name:e.name,data:e.data,size:e.size,visible:e.visible}}normalizeIconSize(e){return typeof e=="number"?{width:e,height:e}:{width:this.normalizeSizeValue(e.width,28),height:this.normalizeSizeValue(e.height,28)}}normalizeSizeValue(e,t){return Number.isFinite(e)&&e>0?e:t}createId(){return`label-${Date.now()}-${Math.random().toString(16).slice(2)}`}addPickBlockers(){this.container.addEventListener("mousedown",this.blockPickInteraction,!0),this.container.addEventListener("mouseup",this.blockPickInteraction,!0),this.container.addEventListener("touchstart",this.blockPickInteraction,!0),this.container.addEventListener("touchmove",this.blockPickInteraction,!0),this.container.addEventListener("touchend",this.blockPickInteraction,!0)}removePickBlockers(){this.container.removeEventListener("mousedown",this.blockPickInteraction,!0),this.container.removeEventListener("mouseup",this.blockPickInteraction,!0),this.container.removeEventListener("touchstart",this.blockPickInteraction,!0),this.container.removeEventListener("touchmove",this.blockPickInteraction,!0),this.container.removeEventListener("touchend",this.blockPickInteraction,!0)}blockPickInteraction=e=>{e.stopImmediatePropagation()}}class Ei{engine;manager;constructor(e){this.engine=e,this.manager=new Ci({container:e.container,className:"bim-engine-label-container bim-engine-label-container-2d",projectCoordinate:t=>this.projectCoordinate(t),pickCoordinate:t=>this.pickCoordinate(t),emitEvent:(t,i)=>this.engine.events?.trigger?.(t,i)})}pickPoint(){return this.manager.pickPoint()}startPickPoint(e){return this.manager.startPickPoint(e)}createLabel(e){return this.manager.createLabel(e)}updateLabel(e,t){return this.manager.updateLabel(e,t)}deleteLabel(e){return this.manager.deleteLabel(e)}removeLabel(e){return this.manager.removeLabel(e)}clearLabels(){this.manager.clearLabels()}getLabel(e){return this.manager.getLabel(e)}getLabels(){return this.manager.getLabels()}onLabelClick(e){return this.manager.onLabelClick(e)}offLabelClick(e){this.manager.offLabelClick(e)}update(){this.manager.update()}dispose(){this.manager.dispose()}projectCoordinate(e){const t=this.engine.cameraModule2d.worldToScreen(e.x??0,e.y??0),i=this.engine.renderer.domElement.clientWidth,n=this.engine.renderer.domElement.clientHeight;return{x:t.x,y:t.y,visible:t.x>=0&&t.x<=i&&t.y>=0&&t.y<=n}}pickCoordinate(e){const t=this.engine.renderer.domElement.getBoundingClientRect(),i=this.engine.cameraModule2d.screenToWorld(e.clientX-t.left,e.clientY-t.top);return{x:i.x,y:i.y,z:0}}}class Si{engine;mainViewPort=null;constructor(e){this.engine=e}saveMainViewPort(){const e=this.engine.cameraModule2d;return e?(this.mainViewPort={activeCamera:"orthographic",orthographicCamera:e.getViewState()},this.mainViewPort):null}setMainViewPort(e){this.mainViewPort=this.normalizeMainViewPort(e),this.goToMainPort()}goToMainPort(){const e=this.mainViewPort;e&&this.engine.cameraModule2d?.applyViewState(e.orthographicCamera)}resetMainViewPort(){this.mainViewPort=null,this.engine.resetView?.(),this.engine.fitToView?.()}normalizeMainViewPort(e){if(!e)return null;const t=e;return t.orthographicCamera?t:{activeCamera:"orthographic",orthographicCamera:e}}}class Ti{constructor(e,t){this.container=e,this.engine=t,this.el=document.createElement("div"),this.el.className="engine-2d-workspace-tabs",this.container.appendChild(this.el),this.unsubscribe=this.engine.events?.on(me.ModelLoaded,()=>this.refresh())??(()=>{}),this.refresh()}el;unsubscribe;loading=!1;refresh(){const e=this.engine.getLayouts?.()??[],t=this.engine.loaderModule2d?.getActiveWorkspace?.()??{type:"model"};this.el.innerHTML="",this.el.appendChild(this.createTab("模型",t.type==="model",()=>this.switchToModelSpace())),e.forEach((i,n)=>{const r=i.name||`布局${n+1}`;this.el.appendChild(this.createTab(r,t.type==="layout"&&t.layoutId===i.id,()=>this.switchToLayout(i.id)))}),this.el.style.display=e.length>0?"flex":"none"}createTab(e,t,i){const n=document.createElement("button");return n.type="button",n.className="engine-2d-workspace-tabs__item",n.classList.toggle("engine-2d-workspace-tabs__item--active",t),n.textContent=e,n.title=e,n.disabled=this.loading||t,n.addEventListener("click",i),n}async switchToModelSpace(){this.loading||await this.runSwitch(()=>this.engine.showModelSpace?.())}async switchToLayout(e){this.loading||await this.runSwitch(()=>this.engine.loadLayout?.(e))}async runSwitch(e){this.loading=!0,this.refresh();try{await e()}finally{this.loading=!1,this.refresh()}}dispose(){this.unsubscribe(),this.el.remove()}}const Ai={version:"3.9.161"}.version;class at{options;container=null;animationId=null;isRendering=!1;fpsFrameCount=0;fpsLastCheck=0;currentFps=0;enablePerformanceMonitoring=!1;stats;modelToolModule2d;engineStatus2d;octreeBox2d;events;handelBehaved2d;interactionModule2d;sceneModule2d;cameraModule2d;renderModule2d;controlModule2d;loaderModule2d;layerManager;searchManager;themeManager;measure;markup;label;viewCube;cadCursorUI;contextMenuUI;loadingUI;workspaceTabsUI;versionEl=null;linkView2d3d;linkElement2d3d;scene=null;camera=null;renderer=null;dwgData=null;version=Ai;constructor(e){if(this.options=e,this.options.backgroundColor=this.options.backgroundColor??1710618,this.options.enablePerformanceMonitoring=this.options.enablePerformanceMonitoring??!1,this.options.showMouseCoordinates=this.options.showMouseCoordinates??!1,this.options.loadingStyle=this.options.loadingStyle??2,this.options.contextMenu=this.options.contextMenu??{items:[{action:"hideElement",label:"隐藏模型"},{action:"showAll",label:"显示全部"},{action:"hideLayer",label:"隐藏图层"},{action:"showAllLayers",label:"显示所有图层"},{action:"toggleBg",label:"切换背景"},{action:"layerManage",label:"图层管理"},{action:"linkElement2d3d",label:"模型联动",dividerBefore:!0}]},this.enablePerformanceMonitoring=e.enablePerformanceMonitoring??!1,this.container=document.getElementById(e.containerId),!this.container)throw new Error(`Container ${e.containerId} not found`);this.initialize(),this.handelBehaved2d=oi(this),this.interactionModule2d=new li(this),this.interactionModule2d.init(),this.interactionModule2d.active()}initialize(){this.events=new yt(!1),this.sceneModule2d=new xt(this,this.options),this.scene=this.sceneModule2d.scene,this.cameraModule2d=new Mt(this,this.container),this.camera=this.cameraModule2d.orthographicCamera,this.renderModule2d=new _t(this,this.container,this.options),this.renderer=this.renderModule2d.renderer,this.controlModule2d=new Et(this),this.loaderModule2d=new ti(this),this.themeManager=new gi(this.container),this.layerManager=new Ze(this),this.searchManager=new mi(this),this.measure=new wi(this),this.markup=new _i(this),this.label=new Ei(this),this.viewCube=new Si(this),this.octreeBox2d=new ii(this),this.modelToolModule2d=new si(this),this.engineStatus2d=new kt(this),this.linkView2d3d=new ni(this),this.linkElement2d3d=new ri(this),this.sceneModule2d.initGrid(),this.cadCursorUI=new hi(this.container,this.renderer.domElement,this.options.cursorStyle??"short-crosshair"),this.cadCursorUI.setBackgroundColor(this.options.backgroundColor??1710618),this.loadingUI=new di(this.container,this.options.loadingStyle),this.events.on(me.ModelLoadStart,()=>this.loadingUI.show("正在加载...",0)),this.events.on(me.ModelLoadProgress,e=>this.loadingUI.update(e.text,e.progress)),this.events.on(me.ModelLoaded,()=>this.loadingUI.hide()),this.events.on(me.ModelLoadError,()=>this.loadingUI.hide()),this.versionEl=document.createElement("div"),this.versionEl.className="engine-2d-version-text",this.updateVersionDisplay(),this.container.appendChild(this.versionEl),this.workspaceTabsUI=new Ti(this.container,this),this.contextMenuUI=new ci(this.container,this.renderer.domElement,e=>{if(e==="search"&&this.searchManager.show(),e==="layerManage"&&this.layerManager.toggle(),e==="hideElement"&&this.modelToolModule2d.hideModel(this.engineStatus2d.highlightModels),e==="showAll"&&this.modelToolModule2d.showAllModels(),e==="hideLayer"&&this.hideHighlightedLayers(),e==="showAllLayers"&&(this.layerManager.setAllLayersVisible(!0),this.layerManager.refresh()),e==="toggleBg"){const t=this.themeManager.getTheme()==="dark"?"light":"dark";this.setTheme(t)}if(e==="linkElement2d3d"){const t=this.linkElement2d3d.toggle();this.contextMenuUI.setMenuItemState("linkElement2d3d",t),!t&&!this.isModelSpaceActive()&&(this.modelToolModule2d.unHighlightModelHover(),this.modelToolModule2d.unhighlightAllModels()),console.log(`[EngineKernel2d] 二三维图元联动: ${t?"已开启":"已关闭"}`)}if(e==="linkView2d3d"){const t=this.linkView2d3d.toggle();this.contextMenuUI.setMenuItemState("linkView2d3d",t),console.log(`[EngineKernel2d] 图模关联: ${t?"已开启":"已关闭"}`)}},this.options.contextMenu?.items),this.contextMenuUI.setMenuItemStates({linkElement2d3d:this.linkElement2d3d.isEnabled(),linkView2d3d:this.linkView2d3d.isEnabled()}),this.initStatsMonitor(),this.startRendering(),console.log(`[EngineKernel2d] 2D Engine initialized (v${this.version})`)}startRendering(){this.isRendering||(this.isRendering=!0,this.fpsLastCheck=performance.now(),this.animate(),console.log("[EngineKernel2d] Rendering started"))}stopRendering(){this.isRendering=!1,this.animationId!==null&&(cancelAnimationFrame(this.animationId),this.animationId=null),console.log("[EngineKernel2d] Rendering stopped")}animate=()=>{this.isRendering&&(this.animationId=requestAnimationFrame(this.animate),this.stats?.begin(),this.controlModule2d.update(),this.camera?.updateMatrixWorld(!0),this.measure?.update(),this.markup?.update(),this.label?.update(),this.scene&&this.camera&&this.renderer&&this.renderer.render(this.scene,this.camera),this.enablePerformanceMonitoring&&this.updatePerformanceStats(),this.stats?.end())};initStatsMonitor(){!(this.options.showStats??this.enablePerformanceMonitoring)||!this.container||(this.stats=new gt,this.stats.showPanel(0),this.stats.dom.className="engine-2d-stats-monitor",this.stats.dom.style.position="absolute",this.stats.dom.style.top="0px",this.stats.dom.style.left="0px",this.stats.dom.style.zIndex="1000",this.container.appendChild(this.stats.dom))}updatePerformanceStats(){this.fpsFrameCount++;const e=performance.now();e-this.fpsLastCheck>=1e3&&(this.currentFps=this.fpsFrameCount,this.fpsFrameCount=0,this.fpsLastCheck=e,this.events.trigger(me.RenderEnd,{fps:this.currentFps}))}async loadModel(e,t){return await this.loaderModule2d.loadModel(e,t),{}}getLayouts(){return this.loaderModule2d?.getLayouts()??[]}getActiveWorkspace(){return this.loaderModule2d?.getActiveWorkspace?.()??{type:"model",name:"模型"}}isModelSpaceActive(){return this.getActiveWorkspace().type==="model"}isElementLink2d3dEnabled(){return this.linkElement2d3d?.isEnabled?.()===!0}async loadLayout(e,t){await this.loaderModule2d.loadLayout(e,t)}async showModelSpace(e){await this.loaderModule2d.showModelSpace(e)}getLayers(){return this.loaderModule2d.getLayers()}getEntitiesByLayer(e){return this.loaderModule2d.getEntitiesByLayer(e)}setLayerVisible(e,t){this.layerManager?.setLayerVisible(e,t)}hideHighlightedLayers(){this.getLayersByModelIds(this.engineStatus2d?.highlightModels??[]).forEach(t=>this.layerManager?.setLayerVisible(t,!1)),this.layerManager?.refresh()}getLayersByModelIds(e){const t=new Set;return e.forEach(i=>{(this.loaderModule2d?.model?.nodeMap?.get(String(i))??this.loaderModule2d?.model?.nodeMap?.get(i))?.forEach(r=>{r?.layer&&t.add(r.layer)})}),Array.from(t)}setTheme(e){this.themeManager.setTheme(e);const t=e==="dark"?1710618:15790320;this.setBackgroundColor(t)}resetView(){this.cameraModule2d&&this.cameraModule2d.resetView()}fitToView(){const e=this.loaderModule2d?.getActiveWorkspaceExtents?.();if(this.getActiveWorkspace().type==="layout"&&e){this.cameraModule2d.fitToExtents(e);return}const t=this.dwgData?.metadata,i=t?.viewExtents??t?.extents;i&&this.cameraModule2d.fitToExtents(i)}setZoom(e){this.cameraModule2d&&this.cameraModule2d.setZoom(e)}getZoom(){return this.cameraModule2d?this.cameraModule2d.getZoom():1}updateVersionDisplay(){this.versionEl&&(this.versionEl.innerHTML=`v${this.version}`)}getPerformanceStats(){const e=this.sceneModule2d.getSceneStats();return{fps:this.currentFps,renderTime:0,entityCount:e.objectCount,visibleEntityCount:e.objectCount}}setBackgroundColor(e){this.options.backgroundColor=e,this.sceneModule2d&&this.sceneModule2d.setBackgroundColor(e),this.cadCursorUI?.setBackgroundColor(e),this.modelToolModule2d?.updateColorsForBackground(e),this.layerManager?.refresh()}clearScene(){this.sceneModule2d&&this.sceneModule2d.clearScene()}resize(){if(this.renderModule2d){const e=this.container?.clientWidth??0,t=this.container?.clientHeight??0;this.renderModule2d.setSize(e,t)}}captureImage(e){if(!this.renderer||!this.sceneModule2d)return console.error("[EngineKernel2d] Renderer or scene module not initialized"),null;const t=this.renderer.domElement,i=e?.format||"png",n=e?.quality||.92,r=`image/${i==="jpeg"?"jpeg":i}`,s=e?.transparent??!1,o=e?.hideGrid??!0,a=e?.hideAxes??!0,l=this.scene?.background??null;let c=!1,f=!1;this.sceneModule2d.adaptiveGrid&&(c=this.sceneModule2d.adaptiveGrid.gridGroup?.visible??!1,o&&this.sceneModule2d.adaptiveGrid.setVisible(!1)),this.sceneModule2d.axesHelper&&(f=this.sceneModule2d.axesHelper.visible??!1,a&&this.sceneModule2d.setAxesVisible(!1)),s&&this.scene&&(this.scene.background=null),this.scene&&this.camera&&this.renderer.render(this.scene,this.camera);const p=t.toDataURL(r,n);this.scene&&(this.scene.background=l),this.sceneModule2d.adaptiveGrid&&o&&this.sceneModule2d.adaptiveGrid.setVisible(c),this.sceneModule2d.axesHelper&&a&&this.sceneModule2d.setAxesVisible(f),this.scene&&this.camera&&this.renderer.render(this.scene,this.camera);const d={dataURL:p};if(e?.download){const y=e.filename||`capture-${Date.now()}.${i}`,h=document.createElement("a");h.href=p,h.download=y,h.style.display="none",document.body.appendChild(h),h.click(),h.remove(),console.log(`[EngineKernel2d] Image captured and downloaded: ${y}`)}else console.log("[EngineKernel2d] Image captured");return d}async captureImageAsync(e){if(!this.renderer||!this.sceneModule2d)return console.error("[EngineKernel2d] Renderer or scene module not initialized"),null;const t=this.renderer.domElement,i=e?.format||"png",n=e?.quality||.92,r=`image/${i==="jpeg"?"jpeg":i}`,s=e?.transparent??!1,o=e?.hideGrid??!0,a=e?.hideAxes??!0,l=this.scene?.background??null;let c=!1,f=!1;this.sceneModule2d.adaptiveGrid&&(c=this.sceneModule2d.adaptiveGrid.gridGroup?.visible??!1,o&&this.sceneModule2d.adaptiveGrid.setVisible(!1)),this.sceneModule2d.axesHelper&&(f=this.sceneModule2d.axesHelper.visible??!1,a&&this.sceneModule2d.setAxesVisible(!1)),s&&this.scene&&(this.scene.background=null),this.scene&&this.camera&&this.renderer.render(this.scene,this.camera);const p=t.toDataURL(r,n),d=await new Promise(h=>{t.toBlob(g=>{g&&h(g)},r,n)}),y=URL.createObjectURL(d);if(this.scene&&(this.scene.background=l),this.sceneModule2d.adaptiveGrid&&o&&this.sceneModule2d.adaptiveGrid.setVisible(c),this.sceneModule2d.axesHelper&&a&&this.sceneModule2d.setAxesVisible(f),this.scene&&this.camera&&this.renderer.render(this.scene,this.camera),e?.download){const h=e.filename||`capture-${Date.now()}.${i}`,g=document.createElement("a");g.href=y,g.download=h,g.style.display="none",document.body.appendChild(g),g.click(),g.remove(),console.log(`[EngineKernel2d] Image captured and downloaded: ${h}`)}else console.log("[EngineKernel2d] Image captured with Blob URL:",y);return{dataURL:p,blobURL:y,blob:d}}dispose(){console.log("[EngineKernel2d] Disposing engine..."),this.stopRendering(),this.cadCursorUI?.dispose(),this.contextMenuUI?.dispose(),this.loadingUI?.dispose(),this.workspaceTabsUI?.dispose(),this.versionEl?.parentElement?.removeChild(this.versionEl),this.searchManager?.dispose(),this.measure?.dispose(),this.markup?.dispose(),this.label?.dispose(),this.themeManager?.dispose(),this.loaderModule2d?.dispose(),this.controlModule2d?.dispose(),this.renderModule2d?.dispose(),this.cameraModule2d?.dispose(),this.sceneModule2d?.dispose(),this.events?.dispose(),this.stats?.dom?.parentElement&&this.stats.dom.parentElement.removeChild(this.stats.dom),this.scene=null,this.camera=null,this.renderer=null,this.dwgData=null,this.stats=void 0,this.versionEl=null,console.log("[EngineKernel2d] Engine disposed")}}function lt(k){return new at(k)}ve.EngineKernel2d=at,ve.createEngine2d=lt,ve.default=lt,Object.defineProperties(ve,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));