dsh-cad 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -1
- package/README.zh-CN.md +9 -1
- package/lib/client.js +1 -1
- package/lib/client.js.map +2 -2
- package/lib/modeling/modeling-worker.cjs +54 -15
- package/lib/modeling/occt-bridge.cjs +157 -0
- package/lib/tools/cad-model.js +68 -0
- package/lib/types/modeling/client.d.ts +12 -0
- package/lib/types/tools/cad-model.d.ts +1 -1
- package/package.json +2 -2
package/lib/client.js
CHANGED
|
@@ -4110,7 +4110,7 @@ void main() {
|
|
|
4110
4110
|
|
|
4111
4111
|
}
|
|
4112
4112
|
|
|
4113
|
-
}`,Oc=class{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t){if(this.texture===null){let n=new er(e.texture);(e.depthNear!==t.depthNear||e.depthFar!==t.depthFar)&&(this.depthNear=e.depthNear,this.depthFar=e.depthFar),this.texture=n}}getMesh(e){if(this.texture!==null&&this.mesh===null){let t=e.cameras[0].viewport,n=new tn({vertexShader:hx,fragmentShader:ux,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new Tt(new ri(20,20),n)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}},Bc=class extends mn{constructor(e,t){super();let n=this,s=null,r=1,o=null,a="local-floor",l=1,c=null,h=null,d=null,u=null,f=null,g=null,y=typeof XRWebGLBinding<"u",m=new Oc,p={},C=t.getContextAttributes(),T=null,x=null,S=[],M=[],A=new te,v=null,w=new kt;w.viewport=new gt;let I=new kt;I.viewport=new gt;let P=[w,I],O=new ra,q=null,Y=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(J){let ce=S[J];return ce===void 0&&(ce=new us,S[J]=ce),ce.getTargetRaySpace()},this.getControllerGrip=function(J){let ce=S[J];return ce===void 0&&(ce=new us,S[J]=ce),ce.getGripSpace()},this.getHand=function(J){let ce=S[J];return ce===void 0&&(ce=new us,S[J]=ce),ce.getHandSpace()};function U(J){let ce=M.indexOf(J.inputSource);if(ce===-1)return;let re=S[ce];re!==void 0&&(re.update(J.inputSource,J.frame,c||o),re.dispatchEvent({type:J.type,data:J.inputSource}))}function G(){s.removeEventListener("select",U),s.removeEventListener("selectstart",U),s.removeEventListener("selectend",U),s.removeEventListener("squeeze",U),s.removeEventListener("squeezestart",U),s.removeEventListener("squeezeend",U),s.removeEventListener("end",G),s.removeEventListener("inputsourceschange",H);for(let J=0;J<S.length;J++){let ce=M[J];ce!==null&&(M[J]=null,S[J].disconnect(ce))}q=null,Y=null,m.reset();for(let J in p)delete p[J];e.setRenderTarget(T),f=null,u=null,d=null,s=null,x=null,et.stop(),n.isPresenting=!1,e.setPixelRatio(v),e.setSize(A.width,A.height,!1),n.dispatchEvent({type:"sessionend"})}this.setFramebufferScaleFactor=function(J){r=J,n.isPresenting===!0&&De("WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(J){a=J,n.isPresenting===!0&&De("WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return c||o},this.setReferenceSpace=function(J){c=J},this.getBaseLayer=function(){return u!==null?u:f},this.getBinding=function(){return d===null&&y&&(d=new XRWebGLBinding(s,t)),d},this.getFrame=function(){return g},this.getSession=function(){return s},this.setSession=async function(J){if(s=J,s!==null){if(T=e.getRenderTarget(),s.addEventListener("select",U),s.addEventListener("selectstart",U),s.addEventListener("selectend",U),s.addEventListener("squeeze",U),s.addEventListener("squeezestart",U),s.addEventListener("squeezeend",U),s.addEventListener("end",G),s.addEventListener("inputsourceschange",H),C.xrCompatible!==!0&&await t.makeXRCompatible(),v=e.getPixelRatio(),e.getSize(A),y&&"createProjectionLayer"in XRWebGLBinding.prototype){let re=null,Ie=null,ke=null;C.depth&&(ke=C.stencil?t.DEPTH24_STENCIL8:t.DEPTH_COMPONENT24,re=C.stencil?mi:Rn,Ie=C.stencil?Ms:yn);let Ue={colorFormat:t.RGBA8,depthFormat:ke,scaleFactor:r};d=this.getBinding(),u=d.createProjectionLayer(Ue),s.updateRenderState({layers:[u]}),e.setPixelRatio(1),e.setSize(u.textureWidth,u.textureHeight,!1),x=new Qt(u.textureWidth,u.textureHeight,{format:cn,type:Yt,depthTexture:new Wn(u.textureWidth,u.textureHeight,Ie,void 0,void 0,void 0,void 0,void 0,void 0,re),stencilBuffer:C.stencil,colorSpace:e.outputColorSpace,samples:C.antialias?4:0,resolveDepthBuffer:u.ignoreDepthValues===!1,resolveStencilBuffer:u.ignoreDepthValues===!1})}else{let re={antialias:C.antialias,alpha:!0,depth:C.depth,stencil:C.stencil,framebufferScaleFactor:r};f=new XRWebGLLayer(s,t,re),s.updateRenderState({baseLayer:f}),e.setPixelRatio(1),e.setSize(f.framebufferWidth,f.framebufferHeight,!1),x=new Qt(f.framebufferWidth,f.framebufferHeight,{format:cn,type:Yt,colorSpace:e.outputColorSpace,stencilBuffer:C.stencil,resolveDepthBuffer:f.ignoreDepthValues===!1,resolveStencilBuffer:f.ignoreDepthValues===!1})}x.isXRRenderTarget=!0,this.setFoveation(l),c=null,o=await s.requestReferenceSpace(a),et.setContext(s),et.start(),n.isPresenting=!0,n.dispatchEvent({type:"sessionstart"})}},this.getEnvironmentBlendMode=function(){if(s!==null)return s.environmentBlendMode},this.getDepthTexture=function(){return m.getDepthTexture()};function H(J){for(let ce=0;ce<J.removed.length;ce++){let re=J.removed[ce],Ie=M.indexOf(re);Ie>=0&&(M[Ie]=null,S[Ie].disconnect(re))}for(let ce=0;ce<J.added.length;ce++){let re=J.added[ce],Ie=M.indexOf(re);if(Ie===-1){for(let Ue=0;Ue<S.length;Ue++)if(Ue>=M.length){M.push(re),Ie=Ue;break}else if(M[Ue]===null){M[Ue]=re,Ie=Ue;break}if(Ie===-1)break}let ke=S[Ie];ke&&ke.connect(re)}}let j=new R,se=new R;function ue(J,ce,re){j.setFromMatrixPosition(ce.matrixWorld),se.setFromMatrixPosition(re.matrixWorld);let Ie=j.distanceTo(se),ke=ce.projectionMatrix.elements,Ue=re.projectionMatrix.elements,nt=ke[14]/(ke[10]-1),He=ke[14]/(ke[10]+1),Q=(ke[9]+1)/ke[5],ie=(ke[9]-1)/ke[5],ne=(ke[8]-1)/ke[0],xe=(Ue[8]+1)/Ue[0],me=nt*ne,Be=nt*xe,Ce=Ie/(-ne+xe),Ve=Ce*-ne;if(ce.matrixWorld.decompose(J.position,J.quaternion,J.scale),J.translateX(Ve),J.translateZ(Ce),J.matrixWorld.compose(J.position,J.quaternion,J.scale),J.matrixWorldInverse.copy(J.matrixWorld).invert(),ke[10]===-1)J.projectionMatrix.copy(ce.projectionMatrix),J.projectionMatrixInverse.copy(ce.projectionMatrixInverse);else{let We=nt+Ce,L=He+Ce,ot=me-Ve,je=Be+(Ie-Ve),E=Q*He/L*We,_=ie*He/L*We;J.projectionMatrix.makePerspective(ot,je,E,_,We,L),J.projectionMatrixInverse.copy(J.projectionMatrix).invert()}}function le(J,ce){ce===null?J.matrixWorld.copy(J.matrix):J.matrixWorld.multiplyMatrices(ce.matrixWorld,J.matrix),J.matrixWorldInverse.copy(J.matrixWorld).invert()}this.updateCamera=function(J){if(s===null)return;let ce=J.near,re=J.far;m.texture!==null&&(m.depthNear>0&&(ce=m.depthNear),m.depthFar>0&&(re=m.depthFar)),O.near=I.near=w.near=ce,O.far=I.far=w.far=re,(q!==O.near||Y!==O.far)&&(s.updateRenderState({depthNear:O.near,depthFar:O.far}),q=O.near,Y=O.far),O.layers.mask=J.layers.mask|6,w.layers.mask=O.layers.mask&-5,I.layers.mask=O.layers.mask&-3;let Ie=J.parent,ke=O.cameras;le(O,Ie);for(let Ue=0;Ue<ke.length;Ue++)le(ke[Ue],Ie);ke.length===2?ue(O,w,I):O.projectionMatrix.copy(w.projectionMatrix),Me(J,O,Ie)};function Me(J,ce,re){re===null?J.matrix.copy(ce.matrixWorld):(J.matrix.copy(re.matrixWorld),J.matrix.invert(),J.matrix.multiply(ce.matrixWorld)),J.matrix.decompose(J.position,J.quaternion,J.scale),J.updateMatrixWorld(!0),J.projectionMatrix.copy(ce.projectionMatrix),J.projectionMatrixInverse.copy(ce.projectionMatrixInverse),J.isPerspectiveCamera&&(J.fov=ls*2*Math.atan(1/J.projectionMatrix.elements[5]),J.zoom=1)}this.getCamera=function(){return O},this.getFoveation=function(){if(!(u===null&&f===null))return l},this.setFoveation=function(J){l=J,u!==null&&(u.fixedFoveation=J),f!==null&&f.fixedFoveation!==void 0&&(f.fixedFoveation=J)},this.hasDepthSensing=function(){return m.texture!==null},this.getDepthSensingMesh=function(){return m.getMesh(O)},this.getCameraTexture=function(J){return p[J]};let Je=null;function ct(J,ce){if(h=ce.getViewerPose(c||o),g=ce,h!==null){let re=h.views;f!==null&&(e.setRenderTargetFramebuffer(x,f.framebuffer),e.setRenderTarget(x));let Ie=!1;re.length!==O.cameras.length&&(O.cameras.length=0,Ie=!0);for(let He=0;He<re.length;He++){let Q=re[He],ie=null;if(f!==null)ie=f.getViewport(Q);else{let xe=d.getViewSubImage(u,Q);ie=xe.viewport,He===0&&(e.setRenderTargetTextures(x,xe.colorTexture,xe.depthStencilTexture),e.setRenderTarget(x))}let ne=P[He];ne===void 0&&(ne=new kt,ne.layers.enable(He),ne.viewport=new gt,P[He]=ne),ne.matrix.fromArray(Q.transform.matrix),ne.matrix.decompose(ne.position,ne.quaternion,ne.scale),ne.projectionMatrix.fromArray(Q.projectionMatrix),ne.projectionMatrixInverse.copy(ne.projectionMatrix).invert(),ne.viewport.set(ie.x,ie.y,ie.width,ie.height),He===0&&(O.matrix.copy(ne.matrix),O.matrix.decompose(O.position,O.quaternion,O.scale)),Ie===!0&&O.cameras.push(ne)}let ke=s.enabledFeatures;if(ke&&ke.includes("depth-sensing")&&s.depthUsage=="gpu-optimized"&&y){d=n.getBinding();let He=d.getDepthInformation(re[0]);He&&He.isValid&&He.texture&&m.init(He,s.renderState)}if(ke&&ke.includes("camera-access")&&y){e.state.unbindTexture(),d=n.getBinding();for(let He=0;He<re.length;He++){let Q=re[He].camera;if(Q){let ie=p[Q];ie||(ie=new er,p[Q]=ie);let ne=d.getCameraImage(Q);ie.sourceTexture=ne}}}}for(let re=0;re<S.length;re++){let Ie=M[re],ke=S[re];Ie!==null&&ke!==void 0&&ke.update(Ie,ce,c||o)}Je&&Je(J,ce),ce.detectedPlanes&&n.dispatchEvent({type:"planesdetected",data:ce}),g=null}let et=new sd;et.setAnimationLoop(ct),this.setAnimationLoop=function(J){Je=J},this.dispose=function(){}}},dx=new rt,hd=new Ge;hd.set(-1,0,0,0,1,0,0,0,1);function fx(i,e){function t(m,p){m.matrixAutoUpdate===!0&&m.updateMatrix(),p.value.copy(m.matrix)}function n(m,p){p.color.getRGB(m.fogColor.value,yc(i)),p.isFog?(m.fogNear.value=p.near,m.fogFar.value=p.far):p.isFogExp2&&(m.fogDensity.value=p.density)}function s(m,p,C,T,x){p.isNodeMaterial?p.uniformsNeedUpdate=!1:p.isMeshBasicMaterial?r(m,p):p.isMeshLambertMaterial?(r(m,p),p.envMap&&(m.envMapIntensity.value=p.envMapIntensity)):p.isMeshToonMaterial?(r(m,p),d(m,p)):p.isMeshPhongMaterial?(r(m,p),h(m,p),p.envMap&&(m.envMapIntensity.value=p.envMapIntensity)):p.isMeshStandardMaterial?(r(m,p),u(m,p),p.isMeshPhysicalMaterial&&f(m,p,x)):p.isMeshMatcapMaterial?(r(m,p),g(m,p)):p.isMeshDepthMaterial?r(m,p):p.isMeshDistanceMaterial?(r(m,p),y(m,p)):p.isMeshNormalMaterial?r(m,p):p.isLineBasicMaterial?(o(m,p),p.isLineDashedMaterial&&a(m,p)):p.isPointsMaterial?l(m,p,C,T):p.isSpriteMaterial?c(m,p):p.isShadowMaterial?(m.color.value.copy(p.color),m.opacity.value=p.opacity):p.isShaderMaterial&&(p.uniformsNeedUpdate=!1)}function r(m,p){m.opacity.value=p.opacity,p.color&&m.diffuse.value.copy(p.color),p.emissive&&m.emissive.value.copy(p.emissive).multiplyScalar(p.emissiveIntensity),p.map&&(m.map.value=p.map,t(p.map,m.mapTransform)),p.alphaMap&&(m.alphaMap.value=p.alphaMap,t(p.alphaMap,m.alphaMapTransform)),p.bumpMap&&(m.bumpMap.value=p.bumpMap,t(p.bumpMap,m.bumpMapTransform),m.bumpScale.value=p.bumpScale,p.side===qt&&(m.bumpScale.value*=-1)),p.normalMap&&(m.normalMap.value=p.normalMap,t(p.normalMap,m.normalMapTransform),m.normalScale.value.copy(p.normalScale),p.side===qt&&m.normalScale.value.negate()),p.displacementMap&&(m.displacementMap.value=p.displacementMap,t(p.displacementMap,m.displacementMapTransform),m.displacementScale.value=p.displacementScale,m.displacementBias.value=p.displacementBias),p.emissiveMap&&(m.emissiveMap.value=p.emissiveMap,t(p.emissiveMap,m.emissiveMapTransform)),p.specularMap&&(m.specularMap.value=p.specularMap,t(p.specularMap,m.specularMapTransform)),p.alphaTest>0&&(m.alphaTest.value=p.alphaTest);let C=e.get(p),T=C.envMap,x=C.envMapRotation;T&&(m.envMap.value=T,m.envMapRotation.value.setFromMatrix4(dx.makeRotationFromEuler(x)).transpose(),T.isCubeTexture&&T.isRenderTargetTexture===!1&&m.envMapRotation.value.premultiply(hd),m.reflectivity.value=p.reflectivity,m.ior.value=p.ior,m.refractionRatio.value=p.refractionRatio),p.lightMap&&(m.lightMap.value=p.lightMap,m.lightMapIntensity.value=p.lightMapIntensity,t(p.lightMap,m.lightMapTransform)),p.aoMap&&(m.aoMap.value=p.aoMap,m.aoMapIntensity.value=p.aoMapIntensity,t(p.aoMap,m.aoMapTransform))}function o(m,p){m.diffuse.value.copy(p.color),m.opacity.value=p.opacity,p.map&&(m.map.value=p.map,t(p.map,m.mapTransform))}function a(m,p){m.dashSize.value=p.dashSize,m.totalSize.value=p.dashSize+p.gapSize,m.scale.value=p.scale}function l(m,p,C,T){m.diffuse.value.copy(p.color),m.opacity.value=p.opacity,m.size.value=p.size*C,m.scale.value=T*.5,p.map&&(m.map.value=p.map,t(p.map,m.uvTransform)),p.alphaMap&&(m.alphaMap.value=p.alphaMap,t(p.alphaMap,m.alphaMapTransform)),p.alphaTest>0&&(m.alphaTest.value=p.alphaTest)}function c(m,p){m.diffuse.value.copy(p.color),m.opacity.value=p.opacity,m.rotation.value=p.rotation,p.map&&(m.map.value=p.map,t(p.map,m.mapTransform)),p.alphaMap&&(m.alphaMap.value=p.alphaMap,t(p.alphaMap,m.alphaMapTransform)),p.alphaTest>0&&(m.alphaTest.value=p.alphaTest)}function h(m,p){m.specular.value.copy(p.specular),m.shininess.value=Math.max(p.shininess,1e-4)}function d(m,p){p.gradientMap&&(m.gradientMap.value=p.gradientMap)}function u(m,p){m.metalness.value=p.metalness,p.metalnessMap&&(m.metalnessMap.value=p.metalnessMap,t(p.metalnessMap,m.metalnessMapTransform)),m.roughness.value=p.roughness,p.roughnessMap&&(m.roughnessMap.value=p.roughnessMap,t(p.roughnessMap,m.roughnessMapTransform)),p.envMap&&(m.envMapIntensity.value=p.envMapIntensity)}function f(m,p,C){m.ior.value=p.ior,p.sheen>0&&(m.sheenColor.value.copy(p.sheenColor).multiplyScalar(p.sheen),m.sheenRoughness.value=p.sheenRoughness,p.sheenColorMap&&(m.sheenColorMap.value=p.sheenColorMap,t(p.sheenColorMap,m.sheenColorMapTransform)),p.sheenRoughnessMap&&(m.sheenRoughnessMap.value=p.sheenRoughnessMap,t(p.sheenRoughnessMap,m.sheenRoughnessMapTransform))),p.clearcoat>0&&(m.clearcoat.value=p.clearcoat,m.clearcoatRoughness.value=p.clearcoatRoughness,p.clearcoatMap&&(m.clearcoatMap.value=p.clearcoatMap,t(p.clearcoatMap,m.clearcoatMapTransform)),p.clearcoatRoughnessMap&&(m.clearcoatRoughnessMap.value=p.clearcoatRoughnessMap,t(p.clearcoatRoughnessMap,m.clearcoatRoughnessMapTransform)),p.clearcoatNormalMap&&(m.clearcoatNormalMap.value=p.clearcoatNormalMap,t(p.clearcoatNormalMap,m.clearcoatNormalMapTransform),m.clearcoatNormalScale.value.copy(p.clearcoatNormalScale),p.side===qt&&m.clearcoatNormalScale.value.negate())),p.dispersion>0&&(m.dispersion.value=p.dispersion),p.iridescence>0&&(m.iridescence.value=p.iridescence,m.iridescenceIOR.value=p.iridescenceIOR,m.iridescenceThicknessMinimum.value=p.iridescenceThicknessRange[0],m.iridescenceThicknessMaximum.value=p.iridescenceThicknessRange[1],p.iridescenceMap&&(m.iridescenceMap.value=p.iridescenceMap,t(p.iridescenceMap,m.iridescenceMapTransform)),p.iridescenceThicknessMap&&(m.iridescenceThicknessMap.value=p.iridescenceThicknessMap,t(p.iridescenceThicknessMap,m.iridescenceThicknessMapTransform))),p.transmission>0&&(m.transmission.value=p.transmission,m.transmissionSamplerMap.value=C.texture,m.transmissionSamplerSize.value.set(C.width,C.height),p.transmissionMap&&(m.transmissionMap.value=p.transmissionMap,t(p.transmissionMap,m.transmissionMapTransform)),m.thickness.value=p.thickness,p.thicknessMap&&(m.thicknessMap.value=p.thicknessMap,t(p.thicknessMap,m.thicknessMapTransform)),m.attenuationDistance.value=p.attenuationDistance,m.attenuationColor.value.copy(p.attenuationColor)),p.anisotropy>0&&(m.anisotropyVector.value.set(p.anisotropy*Math.cos(p.anisotropyRotation),p.anisotropy*Math.sin(p.anisotropyRotation)),p.anisotropyMap&&(m.anisotropyMap.value=p.anisotropyMap,t(p.anisotropyMap,m.anisotropyMapTransform))),m.specularIntensity.value=p.specularIntensity,m.specularColor.value.copy(p.specularColor),p.specularColorMap&&(m.specularColorMap.value=p.specularColorMap,t(p.specularColorMap,m.specularColorMapTransform)),p.specularIntensityMap&&(m.specularIntensityMap.value=p.specularIntensityMap,t(p.specularIntensityMap,m.specularIntensityMapTransform))}function g(m,p){p.matcap&&(m.matcap.value=p.matcap)}function y(m,p){let C=e.get(p).light;m.referencePosition.value.setFromMatrixPosition(C.matrixWorld),m.nearDistance.value=C.shadow.camera.near,m.farDistance.value=C.shadow.camera.far}return{refreshFogUniforms:n,refreshMaterialUniforms:s}}function px(i,e,t,n){let s={},r={},o=[],a=i.getParameter(i.MAX_UNIFORM_BUFFER_BINDINGS);function l(x,S){let M=S.program;n.uniformBlockBinding(x,M)}function c(x,S){let M=s[x.id];M===void 0&&(m(x),M=h(x),s[x.id]=M,x.addEventListener("dispose",C));let A=S.program;n.updateUBOMapping(x,A);let v=e.render.frame;r[x.id]!==v&&(u(x),r[x.id]=v)}function h(x){let S=d();x.__bindingPointIndex=S;let M=i.createBuffer(),A=x.__size,v=x.usage;return i.bindBuffer(i.UNIFORM_BUFFER,M),i.bufferData(i.UNIFORM_BUFFER,A,v),i.bindBuffer(i.UNIFORM_BUFFER,null),i.bindBufferBase(i.UNIFORM_BUFFER,S,M),M}function d(){for(let x=0;x<a;x++)if(o.indexOf(x)===-1)return o.push(x),x;return Fe("WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached."),0}function u(x){let S=s[x.id],M=x.uniforms,A=x.__cache;i.bindBuffer(i.UNIFORM_BUFFER,S);for(let v=0,w=M.length;v<w;v++){let I=M[v];if(Array.isArray(I))for(let P=0,O=I.length;P<O;P++)f(I[P],v,P,A);else f(I,v,0,A)}i.bindBuffer(i.UNIFORM_BUFFER,null)}function f(x,S,M,A){if(y(x,S,M,A)===!0){let v=x.__offset,w=x.value;if(Array.isArray(w)){let I=0;for(let P=0;P<w.length;P++){let O=w[P],q=p(O);g(O,x.__data,I),typeof O!="number"&&typeof O!="boolean"&&!O.isMatrix3&&!ArrayBuffer.isView(O)&&(I+=q.storage/Float32Array.BYTES_PER_ELEMENT)}}else g(w,x.__data,0);i.bufferSubData(i.UNIFORM_BUFFER,v,x.__data)}}function g(x,S,M){typeof x=="number"||typeof x=="boolean"?S[0]=x:x.isMatrix3?(S[0]=x.elements[0],S[1]=x.elements[1],S[2]=x.elements[2],S[3]=0,S[4]=x.elements[3],S[5]=x.elements[4],S[6]=x.elements[5],S[7]=0,S[8]=x.elements[6],S[9]=x.elements[7],S[10]=x.elements[8],S[11]=0):ArrayBuffer.isView(x)?S.set(new x.constructor(x.buffer,x.byteOffset,S.length)):x.toArray(S,M)}function y(x,S,M,A){let v=x.value,w=S+"_"+M;if(A[w]===void 0)return typeof v=="number"||typeof v=="boolean"?A[w]=v:ArrayBuffer.isView(v)?A[w]=v.slice():A[w]=v.clone(),!0;{let I=A[w];if(typeof v=="number"||typeof v=="boolean"){if(I!==v)return A[w]=v,!0}else{if(ArrayBuffer.isView(v))return!0;if(I.equals(v)===!1)return I.copy(v),!0}}return!1}function m(x){let S=x.uniforms,M=0,A=16;for(let w=0,I=S.length;w<I;w++){let P=Array.isArray(S[w])?S[w]:[S[w]];for(let O=0,q=P.length;O<q;O++){let Y=P[O],U=Array.isArray(Y.value)?Y.value:[Y.value];for(let G=0,H=U.length;G<H;G++){let j=U[G],se=p(j),ue=M%A,le=ue%se.boundary,Me=ue+le;M+=le,Me!==0&&A-Me<se.storage&&(M+=A-Me),Y.__data=new Float32Array(se.storage/Float32Array.BYTES_PER_ELEMENT),Y.__offset=M,M+=se.storage}}}let v=M%A;return v>0&&(M+=A-v),x.__size=M,x.__cache={},this}function p(x){let S={boundary:0,storage:0};return typeof x=="number"||typeof x=="boolean"?(S.boundary=4,S.storage=4):x.isVector2?(S.boundary=8,S.storage=8):x.isVector3||x.isColor?(S.boundary=16,S.storage=12):x.isVector4?(S.boundary=16,S.storage=16):x.isMatrix3?(S.boundary=48,S.storage=48):x.isMatrix4?(S.boundary=64,S.storage=64):x.isTexture?De("WebGLRenderer: Texture samplers can not be part of an uniforms group."):ArrayBuffer.isView(x)?(S.boundary=16,S.storage=x.byteLength):De("WebGLRenderer: Unsupported uniform value type.",x),S}function C(x){let S=x.target;S.removeEventListener("dispose",C);let M=o.indexOf(S.__bindingPointIndex);o.splice(M,1),i.deleteBuffer(s[S.id]),delete s[S.id],delete r[S.id]}function T(){for(let x in s)i.deleteBuffer(s[x]);o=[],s={},r={}}return{bind:l,update:c,dispose:T}}var mx=new Uint16Array([12469,15057,12620,14925,13266,14620,13807,14376,14323,13990,14545,13625,14713,13328,14840,12882,14931,12528,14996,12233,15039,11829,15066,11525,15080,11295,15085,10976,15082,10705,15073,10495,13880,14564,13898,14542,13977,14430,14158,14124,14393,13732,14556,13410,14702,12996,14814,12596,14891,12291,14937,11834,14957,11489,14958,11194,14943,10803,14921,10506,14893,10278,14858,9960,14484,14039,14487,14025,14499,13941,14524,13740,14574,13468,14654,13106,14743,12678,14818,12344,14867,11893,14889,11509,14893,11180,14881,10751,14852,10428,14812,10128,14765,9754,14712,9466,14764,13480,14764,13475,14766,13440,14766,13347,14769,13070,14786,12713,14816,12387,14844,11957,14860,11549,14868,11215,14855,10751,14825,10403,14782,10044,14729,9651,14666,9352,14599,9029,14967,12835,14966,12831,14963,12804,14954,12723,14936,12564,14917,12347,14900,11958,14886,11569,14878,11247,14859,10765,14828,10401,14784,10011,14727,9600,14660,9289,14586,8893,14508,8533,15111,12234,15110,12234,15104,12216,15092,12156,15067,12010,15028,11776,14981,11500,14942,11205,14902,10752,14861,10393,14812,9991,14752,9570,14682,9252,14603,8808,14519,8445,14431,8145,15209,11449,15208,11451,15202,11451,15190,11438,15163,11384,15117,11274,15055,10979,14994,10648,14932,10343,14871,9936,14803,9532,14729,9218,14645,8742,14556,8381,14461,8020,14365,7603,15273,10603,15272,10607,15267,10619,15256,10631,15231,10614,15182,10535,15118,10389,15042,10167,14963,9787,14883,9447,14800,9115,14710,8665,14615,8318,14514,7911,14411,7507,14279,7198,15314,9675,15313,9683,15309,9712,15298,9759,15277,9797,15229,9773,15166,9668,15084,9487,14995,9274,14898,8910,14800,8539,14697,8234,14590,7790,14479,7409,14367,7067,14178,6621,15337,8619,15337,8631,15333,8677,15325,8769,15305,8871,15264,8940,15202,8909,15119,8775,15022,8565,14916,8328,14804,8009,14688,7614,14569,7287,14448,6888,14321,6483,14088,6171,15350,7402,15350,7419,15347,7480,15340,7613,15322,7804,15287,7973,15229,8057,15148,8012,15046,7846,14933,7611,14810,7357,14682,7069,14552,6656,14421,6316,14251,5948,14007,5528,15356,5942,15356,5977,15353,6119,15348,6294,15332,6551,15302,6824,15249,7044,15171,7122,15070,7050,14949,6861,14818,6611,14679,6349,14538,6067,14398,5651,14189,5311,13935,4958,15359,4123,15359,4153,15356,4296,15353,4646,15338,5160,15311,5508,15263,5829,15188,6042,15088,6094,14966,6001,14826,5796,14678,5543,14527,5287,14377,4985,14133,4586,13869,4257,15360,1563,15360,1642,15358,2076,15354,2636,15341,3350,15317,4019,15273,4429,15203,4732,15105,4911,14981,4932,14836,4818,14679,4621,14517,4386,14359,4156,14083,3795,13808,3437,15360,122,15360,137,15358,285,15355,636,15344,1274,15322,2177,15281,2765,15215,3223,15120,3451,14995,3569,14846,3567,14681,3466,14511,3305,14344,3121,14037,2800,13753,2467,15360,0,15360,1,15359,21,15355,89,15346,253,15325,479,15287,796,15225,1148,15133,1492,15008,1749,14856,1882,14685,1886,14506,1783,14324,1608,13996,1398,13702,1183]),Dn=null;function gx(){return Dn===null&&(Dn=new No(mx,16,16,gi,Ln),Dn.name="DFG_LUT",Dn.minFilter=Ut,Dn.magFilter=Ut,Dn.wrapS=An,Dn.wrapT=An,Dn.generateMipmaps=!1,Dn.needsUpdate=!0),Dn}var ws=class{constructor(e={}){let{canvas:t=Eu(),context:n=null,depth:s=!0,stencil:r=!1,alpha:o=!1,antialias:a=!1,premultipliedAlpha:l=!0,preserveDrawingBuffer:c=!1,powerPreference:h="default",failIfMajorPerformanceCaveat:d=!1,reversedDepthBuffer:u=!1,outputBufferType:f=Yt}=e;this.isWebGLRenderer=!0;let g;if(n!==null){if(typeof WebGLRenderingContext<"u"&&n instanceof WebGLRenderingContext)throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163.");g=n.getContextAttributes().alpha}else g=o;let y=f,m=new Set([pa,fa,da]),p=new Set([Yt,yn,bs,Ms,ha,ua]),C=new Uint32Array(4),T=new Int32Array(4),x=new R,S=null,M=null,A=[],v=[],w=null;this.domElement=t,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.toneMapping=vn,this.toneMappingExposure=1,this.transmissionResolutionScale=1;let I=this,P=!1,O=null,q=null,Y=null,U=null;this._outputColorSpace=jt;let G=0,H=0,j=null,se=-1,ue=null,le=new gt,Me=new gt,Je=null,ct=new Ye(0),et=0,J=t.width,ce=t.height,re=1,Ie=null,ke=null,Ue=new gt(0,0,J,ce),nt=new gt(0,0,J,ce),He=!1,Q=new fs,ie=!1,ne=!1,xe=new rt,me=new R,Be=new gt,Ce={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0},Ve=!1;function We(){return j===null?re:1}let L=n;function ot(b,N){return t.getContext(b,N)}try{let b={alpha:!0,depth:s,stencil:r,antialias:a,premultipliedAlpha:l,preserveDrawingBuffer:c,powerPreference:h,failIfMajorPerformanceCaveat:d};if("setAttribute"in t&&t.setAttribute("data-engine",`three.js r${"185"}`),t.addEventListener("webglcontextlost",vt,!1),t.addEventListener("webglcontextrestored",dt,!1),t.addEventListener("webglcontextcreationerror",Mn,!1),L===null){let N="webgl2";if(L=ot(N,b),L===null)throw ot(N)?new Error("THREE.WebGLRenderer: Error creating WebGL context with your selected attributes."):new Error("THREE.WebGLRenderer: Error creating WebGL context.")}}catch(b){throw Fe("WebGLRenderer: "+b.message),b}let je,E,_,F,k,W,oe,ae,X,K,de,Re,ge,fe,Ne,ze,Xe,D,he,$,pe,be,ee;function Ae(){je=new S0(L),je.init(),pe=new cx(L,je),E=new m0(L,je,e,pe),_=new ax(L,je),E.reversedDepthBuffer&&u&&_.buffers.depth.setReversed(!0),q=L.createFramebuffer(),Y=L.createFramebuffer(),U=L.createFramebuffer(),F=new T0(L),k=new Y_,W=new lx(L,je,_,k,E,pe,F),oe=new M0(I),ae=new Pp(L),be=new f0(L,ae),X=new E0(L,ae,F,be),K=new C0(L,X,ae,be,F),D=new A0(L,E,W),Ne=new g0(k),de=new q_(I,oe,je,E,be,Ne),Re=new fx(I,k),ge=new $_,fe=new tx(je),Xe=new d0(I,oe,_,K,g,l),ze=new ox(I,K,E),ee=new px(L,F,E,_),he=new p0(L,je,F),$=new w0(L,je,F),F.programs=de.programs,I.capabilities=E,I.extensions=je,I.properties=k,I.renderLists=ge,I.shadowMap=ze,I.state=_,I.info=F}Ae(),y!==Yt&&(w=new P0(y,t.width,t.height,a,s,r));let we=new Bc(I,L);this.xr=we,this.getContext=function(){return L},this.getContextAttributes=function(){return L.getContextAttributes()},this.forceContextLoss=function(){let b=je.get("WEBGL_lose_context");b&&b.loseContext()},this.forceContextRestore=function(){let b=je.get("WEBGL_lose_context");b&&b.restoreContext()},this.getPixelRatio=function(){return re},this.setPixelRatio=function(b){b!==void 0&&(re=b,this.setSize(J,ce,!1))},this.getSize=function(b){return b.set(J,ce)},this.setSize=function(b,N,V=!0){if(we.isPresenting){De("WebGLRenderer: Can't change size while VR device is presenting.");return}J=b,ce=N,t.width=Math.floor(b*re),t.height=Math.floor(N*re),V===!0&&(t.style.width=b+"px",t.style.height=N+"px"),w!==null&&w.setSize(t.width,t.height),this.setViewport(0,0,b,N)},this.getDrawingBufferSize=function(b){return b.set(J*re,ce*re).floor()},this.setDrawingBufferSize=function(b,N,V){J=b,ce=N,re=V,t.width=Math.floor(b*V),t.height=Math.floor(N*V),this.setViewport(0,0,b,N)},this.setEffects=function(b){if(y===Yt){Fe("WebGLRenderer: setEffects() requires outputBufferType set to HalfFloatType or FloatType.");return}if(b){for(let N=0;N<b.length;N++)if(b[N].isOutputPass===!0){De("WebGLRenderer: OutputPass is not needed in setEffects(). Tone mapping and color space conversion are applied automatically.");break}}w.setEffects(b||[])},this.getCurrentViewport=function(b){return b.copy(le)},this.getViewport=function(b){return b.copy(Ue)},this.setViewport=function(b,N,V,B){b.isVector4?Ue.set(b.x,b.y,b.z,b.w):Ue.set(b,N,V,B),_.viewport(le.copy(Ue).multiplyScalar(re).round())},this.getScissor=function(b){return b.copy(nt)},this.setScissor=function(b,N,V,B){b.isVector4?nt.set(b.x,b.y,b.z,b.w):nt.set(b,N,V,B),_.scissor(Me.copy(nt).multiplyScalar(re).round())},this.getScissorTest=function(){return He},this.setScissorTest=function(b){_.setScissorTest(He=b)},this.setOpaqueSort=function(b){Ie=b},this.setTransparentSort=function(b){ke=b},this.getClearColor=function(b){return b.copy(Xe.getClearColor())},this.setClearColor=function(){Xe.setClearColor(...arguments)},this.getClearAlpha=function(){return Xe.getClearAlpha()},this.setClearAlpha=function(){Xe.setClearAlpha(...arguments)},this.clear=function(b=!0,N=!0,V=!0){let B=0;if(b){let z=!1;if(j!==null){let ye=j.texture.format;z=m.has(ye)}if(z){let ye=j.texture.type,Ee=p.has(ye),ve=Xe.getClearColor(),Te=Xe.getClearAlpha(),Pe=ve.r,qe=ve.g,Ke=ve.b;Ee?(C[0]=Pe,C[1]=qe,C[2]=Ke,C[3]=Te,L.clearBufferuiv(L.COLOR,0,C)):(T[0]=Pe,T[1]=qe,T[2]=Ke,T[3]=Te,L.clearBufferiv(L.COLOR,0,T))}else B|=L.COLOR_BUFFER_BIT}N&&(B|=L.DEPTH_BUFFER_BIT,this.state.buffers.depth.setMask(!0)),V&&(B|=L.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(4294967295)),B!==0&&L.clear(B)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.setNodesHandler=function(b){b.setRenderer(this),O=b},this.dispose=function(){t.removeEventListener("webglcontextlost",vt,!1),t.removeEventListener("webglcontextrestored",dt,!1),t.removeEventListener("webglcontextcreationerror",Mn,!1),Xe.dispose(),ge.dispose(),fe.dispose(),k.dispose(),oe.dispose(),K.dispose(),be.dispose(),ee.dispose(),de.dispose(),we.dispose(),we.removeEventListener("sessionstart",nh),we.removeEventListener("sessionend",ih),vi.stop()};function vt(b){b.preventDefault(),Ys("WebGLRenderer: Context Lost."),P=!0}function dt(){Ys("WebGLRenderer: Context Restored."),P=!1;let b=F.autoReset,N=ze.enabled,V=ze.autoUpdate,B=ze.needsUpdate,z=ze.type;Ae(),F.autoReset=b,ze.enabled=N,ze.autoUpdate=V,ze.needsUpdate=B,ze.type=z}function Mn(b){Fe("WebGLRenderer: A WebGL context could not be created. Reason: ",b.statusMessage)}function Sn(b){let N=b.target;N.removeEventListener("dispose",Sn),Zd(N)}function Zd(b){$d(b),k.remove(b)}function $d(b){let N=k.get(b).programs;N!==void 0&&(N.forEach(function(V){de.releaseProgram(V)}),b.isShaderMaterial&&de.releaseShaderCache(b))}this.renderBufferDirect=function(b,N,V,B,z,ye){N===null&&(N=Ce);let Ee=z.isMesh&&z.matrixWorld.determinantAffine()<0,ve=jd(b,N,V,B,z);_.setMaterial(B,Ee);let Te=V.index,Pe=1;if(B.wireframe===!0){if(Te=X.getWireframeAttribute(V),Te===void 0)return;Pe=2}let qe=V.drawRange,Ke=V.attributes.position,Le=qe.start*Pe,at=(qe.start+qe.count)*Pe;ye!==null&&(Le=Math.max(Le,ye.start*Pe),at=Math.min(at,(ye.start+ye.count)*Pe)),Te!==null?(Le=Math.max(Le,0),at=Math.min(at,Te.count)):Ke!=null&&(Le=Math.max(Le,0),at=Math.min(at,Ke.count));let bt=at-Le;if(bt<0||bt===1/0)return;be.setup(z,B,ve,V,Te);let yt,ht=he;if(Te!==null&&(yt=ae.get(Te),ht=$,ht.setIndex(yt)),z.isMesh)B.wireframe===!0?(_.setLineWidth(B.wireframeLinewidth*We()),ht.setMode(L.LINES)):ht.setMode(L.TRIANGLES);else if(z.isLine){let Ot=B.linewidth;Ot===void 0&&(Ot=1),_.setLineWidth(Ot*We()),z.isLineSegments?ht.setMode(L.LINES):z.isLineLoop?ht.setMode(L.LINE_LOOP):ht.setMode(L.LINE_STRIP)}else z.isPoints?ht.setMode(L.POINTS):z.isSprite&&ht.setMode(L.TRIANGLES);if(z.isBatchedMesh)if(je.get("WEBGL_multi_draw"))ht.renderMultiDraw(z._multiDrawStarts,z._multiDrawCounts,z._multiDrawCount);else{let Ot=z._multiDrawStarts,Se=z._multiDrawCounts,$t=z._multiDrawCount,tt=Te?ae.get(Te).bytesPerElement:1,sn=k.get(B).currentProgram.getUniforms();for(let En=0;En<$t;En++)sn.setValue(L,"_gl_DrawID",En),ht.render(Ot[En]/tt,Se[En])}else if(z.isInstancedMesh)ht.renderInstances(Le,bt,z.count);else if(V.isInstancedBufferGeometry){let Ot=V._maxInstanceCount!==void 0?V._maxInstanceCount:1/0,Se=Math.min(V.instanceCount,Ot);ht.renderInstances(Le,bt,Se)}else ht.render(Le,bt)};function th(b,N,V){b.transparent===!0&&b.side===ln&&b.forceSinglePass===!1?(b.side=qt,b.needsUpdate=!0,Fr(b,N,V),b.side=Hn,b.needsUpdate=!0,Fr(b,N,V),b.side=ln):Fr(b,N,V)}this.compile=function(b,N,V=null){V===null&&(V=b),M=fe.get(V),M.init(N),v.push(M),V.traverseVisible(function(z){z.isLight&&z.layers.test(N.layers)&&(M.pushLight(z),z.castShadow&&M.pushShadow(z))}),b!==V&&b.traverseVisible(function(z){z.isLight&&z.layers.test(N.layers)&&(M.pushLight(z),z.castShadow&&M.pushShadow(z))}),M.setupLights();let B=new Set;return b.traverse(function(z){if(!(z.isMesh||z.isPoints||z.isLine||z.isSprite))return;let ye=z.material;if(ye)if(Array.isArray(ye))for(let Ee=0;Ee<ye.length;Ee++){let ve=ye[Ee];th(ve,V,z),B.add(ve)}else th(ye,V,z),B.add(ye)}),M=v.pop(),B},this.compileAsync=function(b,N,V=null){let B=this.compile(b,N,V);return new Promise(z=>{function ye(){if(B.forEach(function(Ee){k.get(Ee).currentProgram.isReady()&&B.delete(Ee)}),B.size===0){z(b);return}setTimeout(ye,10)}je.get("KHR_parallel_shader_compile")!==null?ye():setTimeout(ye,10)})};let ol=null;function Jd(b){ol&&ol(b)}function nh(){vi.stop()}function ih(){vi.start()}let vi=new sd;vi.setAnimationLoop(Jd),typeof self<"u"&&vi.setContext(self),this.setAnimationLoop=function(b){ol=b,we.setAnimationLoop(b),b===null?vi.stop():vi.start()},we.addEventListener("sessionstart",nh),we.addEventListener("sessionend",ih),this.render=function(b,N){if(N!==void 0&&N.isCamera!==!0){Fe("WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(P===!0)return;O!==null&&O.renderStart(b,N);let V=we.enabled===!0&&we.isPresenting===!0,B=w!==null&&(j===null||V)&&w.begin(I,j);if(b.matrixWorldAutoUpdate===!0&&b.updateMatrixWorld(),N.parent===null&&N.matrixWorldAutoUpdate===!0&&N.updateMatrixWorld(),we.enabled===!0&&we.isPresenting===!0&&(w===null||w.isCompositing()===!1)&&(we.cameraAutoUpdate===!0&&we.updateCamera(N),N=we.getCamera()),b.isScene===!0&&b.onBeforeRender(I,b,N,j),M=fe.get(b,v.length),M.init(N),M.state.textureUnits=W.getTextureUnits(),v.push(M),xe.multiplyMatrices(N.projectionMatrix,N.matrixWorldInverse),Q.setFromProjectionMatrix(xe,pn,N.reversedDepth),ne=this.localClippingEnabled,ie=Ne.init(this.clippingPlanes,ne),S=ge.get(b,A.length),S.init(),A.push(S),we.enabled===!0&&we.isPresenting===!0){let Ee=I.xr.getDepthSensingMesh();Ee!==null&&al(Ee,N,-1/0,I.sortObjects)}al(b,N,0,I.sortObjects),S.finish(),I.sortObjects===!0&&S.sort(Ie,ke,N.reversedDepth),Ve=we.enabled===!1||we.isPresenting===!1||we.hasDepthSensing()===!1,Ve&&Xe.addToRenderList(S,b),this.info.render.frame++,this.info.autoReset===!0&&this.info.reset(),ie===!0&&Ne.beginShadows();let z=M.state.shadowsArray;if(ze.render(z,b,N),ie===!0&&Ne.endShadows(),(B&&w.hasRenderPass())===!1){let Ee=S.opaque,ve=S.transmissive;if(M.setupLights(),N.isArrayCamera){let Te=N.cameras;if(ve.length>0)for(let Pe=0,qe=Te.length;Pe<qe;Pe++){let Ke=Te[Pe];rh(Ee,ve,b,Ke)}Ve&&Xe.render(b);for(let Pe=0,qe=Te.length;Pe<qe;Pe++){let Ke=Te[Pe];sh(S,b,Ke,Ke.viewport)}}else ve.length>0&&rh(Ee,ve,b,N),Ve&&Xe.render(b),sh(S,b,N)}j!==null&&H===0&&(W.updateMultisampleRenderTarget(j),W.updateRenderTargetMipmap(j)),B&&w.end(I),b.isScene===!0&&b.onAfterRender(I,b,N),be.resetDefaultState(),se=-1,ue=null,v.pop(),v.length>0?(M=v[v.length-1],W.setTextureUnits(M.state.textureUnits),ie===!0&&Ne.setGlobalState(I.clippingPlanes,M.state.camera)):M=null,A.pop(),A.length>0?S=A[A.length-1]:S=null,O!==null&&O.renderEnd()};function al(b,N,V,B){if(b.visible===!1)return;if(b.layers.test(N.layers)){if(b.isGroup)V=b.renderOrder;else if(b.isLOD)b.autoUpdate===!0&&b.update(N);else if(b.isLightProbeGrid)M.pushLightProbeGrid(b);else if(b.isLight)M.pushLight(b),b.castShadow&&M.pushShadow(b);else if(b.isSprite){if(!b.frustumCulled||Q.intersectsSprite(b)){B&&Be.setFromMatrixPosition(b.matrixWorld).applyMatrix4(xe);let Ee=K.update(b),ve=b.material;ve.visible&&S.push(b,Ee,ve,V,Be.z,null)}}else if((b.isMesh||b.isLine||b.isPoints)&&(!b.frustumCulled||Q.intersectsObject(b))){let Ee=K.update(b),ve=b.material;if(B&&(b.boundingSphere!==void 0?(b.boundingSphere===null&&b.computeBoundingSphere(),Be.copy(b.boundingSphere.center)):(Ee.boundingSphere===null&&Ee.computeBoundingSphere(),Be.copy(Ee.boundingSphere.center)),Be.applyMatrix4(b.matrixWorld).applyMatrix4(xe)),Array.isArray(ve)){let Te=Ee.groups;for(let Pe=0,qe=Te.length;Pe<qe;Pe++){let Ke=Te[Pe],Le=ve[Ke.materialIndex];Le&&Le.visible&&S.push(b,Ee,Le,V,Be.z,Ke)}}else ve.visible&&S.push(b,Ee,ve,V,Be.z,null)}}let ye=b.children;for(let Ee=0,ve=ye.length;Ee<ve;Ee++)al(ye[Ee],N,V,B)}function sh(b,N,V,B){let{opaque:z,transmissive:ye,transparent:Ee}=b;M.setupLightsView(V),ie===!0&&Ne.setGlobalState(I.clippingPlanes,V),B&&_.viewport(le.copy(B)),z.length>0&&Ur(z,N,V),ye.length>0&&Ur(ye,N,V),Ee.length>0&&Ur(Ee,N,V),_.buffers.depth.setTest(!0),_.buffers.depth.setMask(!0),_.buffers.color.setMask(!0),_.setPolygonOffset(!1)}function rh(b,N,V,B){if((V.isScene===!0?V.overrideMaterial:null)!==null)return;if(M.state.transmissionRenderTarget[B.id]===void 0){let Le=je.has("EXT_color_buffer_half_float")||je.has("EXT_color_buffer_float");M.state.transmissionRenderTarget[B.id]=new Qt(1,1,{generateMipmaps:!0,type:Le?Ln:Yt,minFilter:pi,samples:Math.max(4,E.samples),stencilBuffer:r,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:Qe.workingColorSpace})}let ye=M.state.transmissionRenderTarget[B.id],Ee=B.viewport||le;ye.setSize(Ee.z*I.transmissionResolutionScale,Ee.w*I.transmissionResolutionScale);let ve=I.getRenderTarget(),Te=I.getActiveCubeFace(),Pe=I.getActiveMipmapLevel();I.setRenderTarget(ye),I.getClearColor(ct),et=I.getClearAlpha(),et<1&&I.setClearColor(16777215,.5),I.clear(),Ve&&Xe.render(V);let qe=I.toneMapping;I.toneMapping=vn;let Ke=B.viewport;if(B.viewport!==void 0&&(B.viewport=void 0),M.setupLightsView(B),ie===!0&&Ne.setGlobalState(I.clippingPlanes,B),Ur(b,V,B),W.updateMultisampleRenderTarget(ye),W.updateRenderTargetMipmap(ye),je.has("WEBGL_multisampled_render_to_texture")===!1){let Le=!1;for(let at=0,bt=N.length;at<bt;at++){let yt=N[at],{object:ht,geometry:Ot,material:Se,group:$t}=yt;if(Se.side===ln&&ht.layers.test(B.layers)){let tt=Se.side;Se.side=qt,Se.needsUpdate=!0,oh(ht,V,B,Ot,Se,$t),Se.side=tt,Se.needsUpdate=!0,Le=!0}}Le===!0&&(W.updateMultisampleRenderTarget(ye),W.updateRenderTargetMipmap(ye))}I.setRenderTarget(ve,Te,Pe),I.setClearColor(ct,et),Ke!==void 0&&(B.viewport=Ke),I.toneMapping=qe}function Ur(b,N,V){let B=N.isScene===!0?N.overrideMaterial:null;for(let z=0,ye=b.length;z<ye;z++){let Ee=b[z],{object:ve,geometry:Te,group:Pe}=Ee,qe=Ee.material;qe.allowOverride===!0&&B!==null&&(qe=B),ve.layers.test(V.layers)&&oh(ve,N,V,Te,qe,Pe)}}function oh(b,N,V,B,z,ye){b.onBeforeRender(I,N,V,B,z,ye),b.modelViewMatrix.multiplyMatrices(V.matrixWorldInverse,b.matrixWorld),b.normalMatrix.getNormalMatrix(b.modelViewMatrix),z.onBeforeRender(I,N,V,B,b,ye),z.transparent===!0&&z.side===ln&&z.forceSinglePass===!1?(z.side=qt,z.needsUpdate=!0,I.renderBufferDirect(V,N,B,z,b,ye),z.side=Hn,z.needsUpdate=!0,I.renderBufferDirect(V,N,B,z,b,ye),z.side=ln):I.renderBufferDirect(V,N,B,z,b,ye),b.onAfterRender(I,N,V,B,z,ye)}function Fr(b,N,V){N.isScene!==!0&&(N=Ce);let B=k.get(b),z=M.state.lights,ye=M.state.shadowsArray,Ee=z.state.version,ve=de.getParameters(b,z.state,ye,N,V,M.state.lightProbeGridArray),Te=de.getProgramCacheKey(ve),Pe=B.programs;B.environment=b.isMeshStandardMaterial||b.isMeshLambertMaterial||b.isMeshPhongMaterial?N.environment:null,B.fog=N.fog;let qe=b.isMeshStandardMaterial||b.isMeshLambertMaterial&&!b.envMap||b.isMeshPhongMaterial&&!b.envMap;B.envMap=oe.get(b.envMap||B.environment,qe),B.envMapRotation=B.environment!==null&&b.envMap===null?N.environmentRotation:b.envMapRotation,Pe===void 0&&(b.addEventListener("dispose",Sn),Pe=new Map,B.programs=Pe);let Ke=Pe.get(Te);if(Ke!==void 0){if(B.currentProgram===Ke&&B.lightsStateVersion===Ee)return lh(b,ve),Ke}else ve.uniforms=de.getUniforms(b),O!==null&&b.isNodeMaterial&&O.build(b,V,ve),b.onBeforeCompile(ve,I),Ke=de.acquireProgram(ve,Te),Pe.set(Te,Ke),B.uniforms=ve.uniforms;let Le=B.uniforms;return(!b.isShaderMaterial&&!b.isRawShaderMaterial||b.clipping===!0)&&(Le.clippingPlanes=Ne.uniform),lh(b,ve),B.needsLights=ef(b),B.lightsStateVersion=Ee,B.needsLights&&(Le.ambientLightColor.value=z.state.ambient,Le.lightProbe.value=z.state.probe,Le.directionalLights.value=z.state.directional,Le.directionalLightShadows.value=z.state.directionalShadow,Le.spotLights.value=z.state.spot,Le.spotLightShadows.value=z.state.spotShadow,Le.rectAreaLights.value=z.state.rectArea,Le.ltc_1.value=z.state.rectAreaLTC1,Le.ltc_2.value=z.state.rectAreaLTC2,Le.pointLights.value=z.state.point,Le.pointLightShadows.value=z.state.pointShadow,Le.hemisphereLights.value=z.state.hemi,Le.directionalShadowMatrix.value=z.state.directionalShadowMatrix,Le.spotLightMatrix.value=z.state.spotLightMatrix,Le.spotLightMap.value=z.state.spotLightMap,Le.pointShadowMatrix.value=z.state.pointShadowMatrix),B.lightProbeGrid=M.state.lightProbeGridArray.length>0,B.currentProgram=Ke,B.uniformsList=null,Ke}function ah(b){if(b.uniformsList===null){let N=b.currentProgram.getUniforms();b.uniformsList=Es.seqWithValue(N.seq,b.uniforms)}return b.uniformsList}function lh(b,N){let V=k.get(b);V.outputColorSpace=N.outputColorSpace,V.batching=N.batching,V.batchingColor=N.batchingColor,V.instancing=N.instancing,V.instancingColor=N.instancingColor,V.instancingMorph=N.instancingMorph,V.skinning=N.skinning,V.morphTargets=N.morphTargets,V.morphNormals=N.morphNormals,V.morphColors=N.morphColors,V.morphTargetsCount=N.morphTargetsCount,V.numClippingPlanes=N.numClippingPlanes,V.numIntersection=N.numClipIntersection,V.vertexAlphas=N.vertexAlphas,V.vertexTangents=N.vertexTangents,V.toneMapping=N.toneMapping}function Kd(b,N){if(b.length===0)return null;if(b.length===1)return b[0].texture!==null?b[0]:null;x.setFromMatrixPosition(N.matrixWorld);for(let V=0,B=b.length;V<B;V++){let z=b[V];if(z.texture!==null&&z.boundingBox.containsPoint(x))return z}return null}function jd(b,N,V,B,z){N.isScene!==!0&&(N=Ce),W.resetTextureUnits();let ye=N.fog,Ee=B.isMeshStandardMaterial||B.isMeshLambertMaterial||B.isMeshPhongMaterial?N.environment:null,ve=j===null?I.outputColorSpace:j.isXRRenderTarget===!0?j.texture.colorSpace:Qe.workingColorSpace,Te=B.isMeshStandardMaterial||B.isMeshLambertMaterial&&!B.envMap||B.isMeshPhongMaterial&&!B.envMap,Pe=oe.get(B.envMap||Ee,Te),qe=B.vertexColors===!0&&!!V.attributes.color&&V.attributes.color.itemSize===4,Ke=!!V.attributes.tangent&&(!!B.normalMap||B.anisotropy>0),Le=!!V.morphAttributes.position,at=!!V.morphAttributes.normal,bt=!!V.morphAttributes.color,yt=vn;B.toneMapped&&(j===null||j.isXRRenderTarget===!0)&&(yt=I.toneMapping);let ht=V.morphAttributes.position||V.morphAttributes.normal||V.morphAttributes.color,Ot=ht!==void 0?ht.length:0,Se=k.get(B),$t=M.state.lights;if(ie===!0&&(ne===!0||b!==ue)){let ft=b===ue&&B.id===se;Ne.setState(B,b,ft)}let tt=!1;B.version===Se.__version?(Se.needsLights&&Se.lightsStateVersion!==$t.state.version||Se.outputColorSpace!==ve||z.isBatchedMesh&&Se.batching===!1||!z.isBatchedMesh&&Se.batching===!0||z.isBatchedMesh&&Se.batchingColor===!0&&z.colorTexture===null||z.isBatchedMesh&&Se.batchingColor===!1&&z.colorTexture!==null||z.isInstancedMesh&&Se.instancing===!1||!z.isInstancedMesh&&Se.instancing===!0||z.isSkinnedMesh&&Se.skinning===!1||!z.isSkinnedMesh&&Se.skinning===!0||z.isInstancedMesh&&Se.instancingColor===!0&&z.instanceColor===null||z.isInstancedMesh&&Se.instancingColor===!1&&z.instanceColor!==null||z.isInstancedMesh&&Se.instancingMorph===!0&&z.morphTexture===null||z.isInstancedMesh&&Se.instancingMorph===!1&&z.morphTexture!==null||Se.envMap!==Pe||B.fog===!0&&Se.fog!==ye||Se.numClippingPlanes!==void 0&&(Se.numClippingPlanes!==Ne.numPlanes||Se.numIntersection!==Ne.numIntersection)||Se.vertexAlphas!==qe||Se.vertexTangents!==Ke||Se.morphTargets!==Le||Se.morphNormals!==at||Se.morphColors!==bt||Se.toneMapping!==yt||Se.morphTargetsCount!==Ot||!!Se.lightProbeGrid!=M.state.lightProbeGridArray.length>0)&&(tt=!0):(tt=!0,Se.__version=B.version);let sn=Se.currentProgram;tt===!0&&(sn=Fr(B,N,z),O&&B.isNodeMaterial&&O.onUpdateProgram(B,sn,Se));let En=!1,Yn=!1,ki=!1,ut=sn.getUniforms(),Mt=Se.uniforms;if(_.useProgram(sn.program)&&(En=!0,Yn=!0,ki=!0),B.id!==se&&(se=B.id,Yn=!0),Se.needsLights){let ft=Kd(M.state.lightProbeGridArray,z);Se.lightProbeGrid!==ft&&(Se.lightProbeGrid=ft,Yn=!0)}if(En||ue!==b){_.buffers.depth.getReversed()&&b.reversedDepth!==!0&&(b._reversedDepth=!0,b.updateProjectionMatrix()),ut.setValue(L,"projectionMatrix",b.projectionMatrix),ut.setValue(L,"viewMatrix",b.matrixWorldInverse);let $n=ut.map.cameraPosition;$n!==void 0&&$n.setValue(L,me.setFromMatrixPosition(b.matrixWorld)),E.logarithmicDepthBuffer&&ut.setValue(L,"logDepthBufFC",2/(Math.log(b.far+1)/Math.LN2)),(B.isMeshPhongMaterial||B.isMeshToonMaterial||B.isMeshLambertMaterial||B.isMeshBasicMaterial||B.isMeshStandardMaterial||B.isShaderMaterial)&&ut.setValue(L,"isOrthographic",b.isOrthographicCamera===!0),ue!==b&&(ue=b,Yn=!0,ki=!0)}if(Se.needsLights&&($t.state.directionalShadowMap.length>0&&ut.setValue(L,"directionalShadowMap",$t.state.directionalShadowMap,W),$t.state.spotShadowMap.length>0&&ut.setValue(L,"spotShadowMap",$t.state.spotShadowMap,W),$t.state.pointShadowMap.length>0&&ut.setValue(L,"pointShadowMap",$t.state.pointShadowMap,W)),z.isSkinnedMesh){ut.setOptional(L,z,"bindMatrix"),ut.setOptional(L,z,"bindMatrixInverse");let ft=z.skeleton;ft&&(ft.boneTexture===null&&ft.computeBoneTexture(),ut.setValue(L,"boneTexture",ft.boneTexture,W))}z.isBatchedMesh&&(ut.setOptional(L,z,"batchingTexture"),ut.setValue(L,"batchingTexture",z._matricesTexture,W),ut.setOptional(L,z,"batchingIdTexture"),ut.setValue(L,"batchingIdTexture",z._indirectTexture,W),ut.setOptional(L,z,"batchingColorTexture"),z._colorsTexture!==null&&ut.setValue(L,"batchingColorTexture",z._colorsTexture,W));let Zn=V.morphAttributes;if((Zn.position!==void 0||Zn.normal!==void 0||Zn.color!==void 0)&&D.update(z,V,sn),(Yn||Se.receiveShadow!==z.receiveShadow)&&(Se.receiveShadow=z.receiveShadow,ut.setValue(L,"receiveShadow",z.receiveShadow)),(B.isMeshStandardMaterial||B.isMeshLambertMaterial||B.isMeshPhongMaterial)&&B.envMap===null&&N.environment!==null&&(Mt.envMapIntensity.value=N.environmentIntensity),Mt.dfgLUT!==void 0&&(Mt.dfgLUT.value=gx()),Yn){if(ut.setValue(L,"toneMappingExposure",I.toneMappingExposure),Se.needsLights&&Qd(Mt,ki),ye&&B.fog===!0&&Re.refreshFogUniforms(Mt,ye),Re.refreshMaterialUniforms(Mt,B,re,ce,M.state.transmissionRenderTarget[b.id]),Se.needsLights&&Se.lightProbeGrid){let ft=Se.lightProbeGrid;Mt.probesSH.value=ft.texture,Mt.probesMin.value.copy(ft.boundingBox.min),Mt.probesMax.value.copy(ft.boundingBox.max),Mt.probesResolution.value.copy(ft.resolution)}Es.upload(L,ah(Se),Mt,W)}if(B.isShaderMaterial&&B.uniformsNeedUpdate===!0&&(Es.upload(L,ah(Se),Mt,W),B.uniformsNeedUpdate=!1),B.isSpriteMaterial&&ut.setValue(L,"center",z.center),ut.setValue(L,"modelViewMatrix",z.modelViewMatrix),ut.setValue(L,"normalMatrix",z.normalMatrix),ut.setValue(L,"modelMatrix",z.matrixWorld),B.uniformsGroups!==void 0){let ft=B.uniformsGroups;for(let $n=0,Vi=ft.length;$n<Vi;$n++){let ch=ft[$n];ee.update(ch,sn),ee.bind(ch,sn)}}return sn}function Qd(b,N){b.ambientLightColor.needsUpdate=N,b.lightProbe.needsUpdate=N,b.directionalLights.needsUpdate=N,b.directionalLightShadows.needsUpdate=N,b.pointLights.needsUpdate=N,b.pointLightShadows.needsUpdate=N,b.spotLights.needsUpdate=N,b.spotLightShadows.needsUpdate=N,b.rectAreaLights.needsUpdate=N,b.hemisphereLights.needsUpdate=N}function ef(b){return b.isMeshLambertMaterial||b.isMeshToonMaterial||b.isMeshPhongMaterial||b.isMeshStandardMaterial||b.isShadowMaterial||b.isShaderMaterial&&b.lights===!0}this.getActiveCubeFace=function(){return G},this.getActiveMipmapLevel=function(){return H},this.getRenderTarget=function(){return j},this.setRenderTargetTextures=function(b,N,V){let B=k.get(b);B.__autoAllocateDepthBuffer=b.resolveDepthBuffer===!1,B.__autoAllocateDepthBuffer===!1&&(B.__useRenderToTexture=!1),k.get(b.texture).__webglTexture=N,k.get(b.depthTexture).__webglTexture=B.__autoAllocateDepthBuffer?void 0:V,B.__hasExternalTextures=!0},this.setRenderTargetFramebuffer=function(b,N){let V=k.get(b);V.__webglFramebuffer=N,V.__useDefaultFramebuffer=N===void 0},this.setRenderTarget=function(b,N=0,V=0){j=b,G=N,H=V;let B=null,z=!1,ye=!1;if(b){let ve=k.get(b);if(ve.__useDefaultFramebuffer!==void 0){_.bindFramebuffer(L.FRAMEBUFFER,ve.__webglFramebuffer),le.copy(b.viewport),Me.copy(b.scissor),Je=b.scissorTest,_.viewport(le),_.scissor(Me),_.setScissorTest(Je),se=-1;return}else if(ve.__webglFramebuffer===void 0)W.setupRenderTarget(b);else if(ve.__hasExternalTextures)W.rebindTextures(b,k.get(b.texture).__webglTexture,k.get(b.depthTexture).__webglTexture);else if(b.depthBuffer){let qe=b.depthTexture;if(ve.__boundDepthTexture!==qe){if(qe!==null&&k.has(qe)&&(b.width!==qe.image.width||b.height!==qe.image.height))throw new Error("THREE.WebGLRenderer: Attached DepthTexture is initialized to the incorrect size.");W.setupDepthRenderbuffer(b)}}let Te=b.texture;(Te.isData3DTexture||Te.isDataArrayTexture||Te.isCompressedArrayTexture)&&(ye=!0);let Pe=k.get(b).__webglFramebuffer;b.isWebGLCubeRenderTarget?(Array.isArray(Pe[N])?B=Pe[N][V]:B=Pe[N],z=!0):b.samples>0&&W.useMultisampledRTT(b)===!1?B=k.get(b).__webglMultisampledFramebuffer:Array.isArray(Pe)?B=Pe[V]:B=Pe,le.copy(b.viewport),Me.copy(b.scissor),Je=b.scissorTest}else le.copy(Ue).multiplyScalar(re).floor(),Me.copy(nt).multiplyScalar(re).floor(),Je=He;if(V!==0&&(B=q),_.bindFramebuffer(L.FRAMEBUFFER,B)&&_.drawBuffers(b,B),_.viewport(le),_.scissor(Me),_.setScissorTest(Je),z){let ve=k.get(b.texture);L.framebufferTexture2D(L.FRAMEBUFFER,L.COLOR_ATTACHMENT0,L.TEXTURE_CUBE_MAP_POSITIVE_X+N,ve.__webglTexture,V)}else if(ye){let ve=N;for(let Te=0;Te<b.textures.length;Te++){let Pe=k.get(b.textures[Te]);L.framebufferTextureLayer(L.FRAMEBUFFER,L.COLOR_ATTACHMENT0+Te,Pe.__webglTexture,V,ve)}}else if(b!==null&&V!==0){let ve=k.get(b.texture);L.framebufferTexture2D(L.FRAMEBUFFER,L.COLOR_ATTACHMENT0,L.TEXTURE_2D,ve.__webglTexture,V)}se=-1},this.readRenderTargetPixels=function(b,N,V,B,z,ye,Ee,ve=0){if(!(b&&b.isWebGLRenderTarget)){Fe("WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");return}let Te=k.get(b).__webglFramebuffer;if(b.isWebGLCubeRenderTarget&&Ee!==void 0&&(Te=Te[Ee]),Te){_.bindFramebuffer(L.FRAMEBUFFER,Te);try{let Pe=b.textures[ve],qe=Pe.format,Ke=Pe.type;if(b.textures.length>1&&L.readBuffer(L.COLOR_ATTACHMENT0+ve),!E.textureFormatReadable(qe)){Fe("WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}if(!E.textureTypeReadable(Ke)){Fe("WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}N>=0&&N<=b.width-B&&V>=0&&V<=b.height-z&&L.readPixels(N,V,B,z,pe.convert(qe),pe.convert(Ke),ye)}finally{let Pe=j!==null?k.get(j).__webglFramebuffer:null;_.bindFramebuffer(L.FRAMEBUFFER,Pe)}}},this.readRenderTargetPixelsAsync=async function(b,N,V,B,z,ye,Ee,ve=0){if(!(b&&b.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let Te=k.get(b).__webglFramebuffer;if(b.isWebGLCubeRenderTarget&&Ee!==void 0&&(Te=Te[Ee]),Te)if(N>=0&&N<=b.width-B&&V>=0&&V<=b.height-z){_.bindFramebuffer(L.FRAMEBUFFER,Te);let Pe=b.textures[ve],qe=Pe.format,Ke=Pe.type;if(b.textures.length>1&&L.readBuffer(L.COLOR_ATTACHMENT0+ve),!E.textureFormatReadable(qe))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!E.textureTypeReadable(Ke))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");let Le=L.createBuffer();L.bindBuffer(L.PIXEL_PACK_BUFFER,Le),L.bufferData(L.PIXEL_PACK_BUFFER,ye.byteLength,L.STREAM_READ),L.readPixels(N,V,B,z,pe.convert(qe),pe.convert(Ke),0);let at=j!==null?k.get(j).__webglFramebuffer:null;_.bindFramebuffer(L.FRAMEBUFFER,at);let bt=L.fenceSync(L.SYNC_GPU_COMMANDS_COMPLETE,0);return L.flush(),await Tu(L,bt,4),L.bindBuffer(L.PIXEL_PACK_BUFFER,Le),L.getBufferSubData(L.PIXEL_PACK_BUFFER,0,ye),L.deleteBuffer(Le),L.deleteSync(bt),ye}else throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")},this.copyFramebufferToTexture=function(b,N=null,V=0){let B=Math.pow(2,-V),z=Math.floor(b.image.width*B),ye=Math.floor(b.image.height*B),Ee=N!==null?N.x:0,ve=N!==null?N.y:0;W.setTexture2D(b,0),L.copyTexSubImage2D(L.TEXTURE_2D,V,0,0,Ee,ve,z,ye),_.unbindTexture()},this.copyTextureToTexture=function(b,N,V=null,B=null,z=0,ye=0){let Ee,ve,Te,Pe,qe,Ke,Le,at,bt,yt=b.isCompressedTexture?b.mipmaps[ye]:b.image;if(V!==null)Ee=V.max.x-V.min.x,ve=V.max.y-V.min.y,Te=V.isBox3?V.max.z-V.min.z:1,Pe=V.min.x,qe=V.min.y,Ke=V.isBox3?V.min.z:0;else{let Mt=Math.pow(2,-z);Ee=Math.floor(yt.width*Mt),ve=Math.floor(yt.height*Mt),b.isDataArrayTexture?Te=yt.depth:b.isData3DTexture?Te=Math.floor(yt.depth*Mt):Te=1,Pe=0,qe=0,Ke=0}B!==null?(Le=B.x,at=B.y,bt=B.z):(Le=0,at=0,bt=0);let ht=pe.convert(N.format),Ot=pe.convert(N.type),Se;N.isData3DTexture?(W.setTexture3D(N,0),Se=L.TEXTURE_3D):N.isDataArrayTexture||N.isCompressedArrayTexture?(W.setTexture2DArray(N,0),Se=L.TEXTURE_2D_ARRAY):(W.setTexture2D(N,0),Se=L.TEXTURE_2D),_.activeTexture(L.TEXTURE0),_.pixelStorei(L.UNPACK_FLIP_Y_WEBGL,N.flipY),_.pixelStorei(L.UNPACK_PREMULTIPLY_ALPHA_WEBGL,N.premultiplyAlpha),_.pixelStorei(L.UNPACK_ALIGNMENT,N.unpackAlignment);let $t=_.getParameter(L.UNPACK_ROW_LENGTH),tt=_.getParameter(L.UNPACK_IMAGE_HEIGHT),sn=_.getParameter(L.UNPACK_SKIP_PIXELS),En=_.getParameter(L.UNPACK_SKIP_ROWS),Yn=_.getParameter(L.UNPACK_SKIP_IMAGES);_.pixelStorei(L.UNPACK_ROW_LENGTH,yt.width),_.pixelStorei(L.UNPACK_IMAGE_HEIGHT,yt.height),_.pixelStorei(L.UNPACK_SKIP_PIXELS,Pe),_.pixelStorei(L.UNPACK_SKIP_ROWS,qe),_.pixelStorei(L.UNPACK_SKIP_IMAGES,Ke);let ki=b.isDataArrayTexture||b.isData3DTexture,ut=N.isDataArrayTexture||N.isData3DTexture;if(b.isDepthTexture){let Mt=k.get(b),Zn=k.get(N),ft=k.get(Mt.__renderTarget),$n=k.get(Zn.__renderTarget);_.bindFramebuffer(L.READ_FRAMEBUFFER,ft.__webglFramebuffer),_.bindFramebuffer(L.DRAW_FRAMEBUFFER,$n.__webglFramebuffer);for(let Vi=0;Vi<Te;Vi++)ki&&(L.framebufferTextureLayer(L.READ_FRAMEBUFFER,L.COLOR_ATTACHMENT0,k.get(b).__webglTexture,z,Ke+Vi),L.framebufferTextureLayer(L.DRAW_FRAMEBUFFER,L.COLOR_ATTACHMENT0,k.get(N).__webglTexture,ye,bt+Vi)),L.blitFramebuffer(Pe,qe,Ee,ve,Le,at,Ee,ve,L.DEPTH_BUFFER_BIT,L.NEAREST);_.bindFramebuffer(L.READ_FRAMEBUFFER,null),_.bindFramebuffer(L.DRAW_FRAMEBUFFER,null)}else if(z!==0||b.isRenderTargetTexture||k.has(b)){let Mt=k.get(b),Zn=k.get(N);_.bindFramebuffer(L.READ_FRAMEBUFFER,Y),_.bindFramebuffer(L.DRAW_FRAMEBUFFER,U);for(let ft=0;ft<Te;ft++)ki?L.framebufferTextureLayer(L.READ_FRAMEBUFFER,L.COLOR_ATTACHMENT0,Mt.__webglTexture,z,Ke+ft):L.framebufferTexture2D(L.READ_FRAMEBUFFER,L.COLOR_ATTACHMENT0,L.TEXTURE_2D,Mt.__webglTexture,z),ut?L.framebufferTextureLayer(L.DRAW_FRAMEBUFFER,L.COLOR_ATTACHMENT0,Zn.__webglTexture,ye,bt+ft):L.framebufferTexture2D(L.DRAW_FRAMEBUFFER,L.COLOR_ATTACHMENT0,L.TEXTURE_2D,Zn.__webglTexture,ye),z!==0?L.blitFramebuffer(Pe,qe,Ee,ve,Le,at,Ee,ve,L.COLOR_BUFFER_BIT,L.NEAREST):ut?L.copyTexSubImage3D(Se,ye,Le,at,bt+ft,Pe,qe,Ee,ve):L.copyTexSubImage2D(Se,ye,Le,at,Pe,qe,Ee,ve);_.bindFramebuffer(L.READ_FRAMEBUFFER,null),_.bindFramebuffer(L.DRAW_FRAMEBUFFER,null)}else ut?b.isDataTexture||b.isData3DTexture?L.texSubImage3D(Se,ye,Le,at,bt,Ee,ve,Te,ht,Ot,yt.data):N.isCompressedArrayTexture?L.compressedTexSubImage3D(Se,ye,Le,at,bt,Ee,ve,Te,ht,yt.data):L.texSubImage3D(Se,ye,Le,at,bt,Ee,ve,Te,ht,Ot,yt):b.isDataTexture?L.texSubImage2D(L.TEXTURE_2D,ye,Le,at,Ee,ve,ht,Ot,yt.data):b.isCompressedTexture?L.compressedTexSubImage2D(L.TEXTURE_2D,ye,Le,at,yt.width,yt.height,ht,yt.data):L.texSubImage2D(L.TEXTURE_2D,ye,Le,at,Ee,ve,ht,Ot,yt);_.pixelStorei(L.UNPACK_ROW_LENGTH,$t),_.pixelStorei(L.UNPACK_IMAGE_HEIGHT,tt),_.pixelStorei(L.UNPACK_SKIP_PIXELS,sn),_.pixelStorei(L.UNPACK_SKIP_ROWS,En),_.pixelStorei(L.UNPACK_SKIP_IMAGES,Yn),ye===0&&N.generateMipmaps&&L.generateMipmap(Se),_.unbindTexture()},this.initRenderTarget=function(b){k.get(b).__webglFramebuffer===void 0&&W.setupRenderTarget(b)},this.initTexture=function(b){b.isCubeTexture?W.setTextureCube(b,0):b.isData3DTexture?W.setTexture3D(b,0):b.isDataArrayTexture||b.isCompressedArrayTexture?W.setTexture2DArray(b,0):W.setTexture2D(b,0),_.unbindTexture()},this.resetState=function(){G=0,H=0,j=null,_.reset(),be.reset()},typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}get coordinateSystem(){return pn}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(e){this._outputColorSpace=e;let t=this.getContext();t.drawingBufferColorSpace=Qe._getDrawingBufferColorSpace(e),t.unpackColorSpace=Qe._getUnpackColorSpace()}};var ud={type:"change"},kc={type:"start"},fd={type:"end"},tl=new si,dd=new on,_x=Math.cos(70*xc.DEG2RAD),Rt=new R,Zt=2*Math.PI,lt={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},zc=1e-6,nl=class extends gr{constructor(e,t=null){super(e,t),this.state=lt.NONE,this.target=new R,this.cursor=new R,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minTargetRadius=0,this.maxTargetRadius=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.keyRotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.zoomToCursor=!1,this.autoRotate=!1,this.autoRotateSpeed=2,this.keys={LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"},this.mouseButtons={LEFT:ui.ROTATE,MIDDLE:ui.DOLLY,RIGHT:ui.PAN},this.touches={ONE:di.ROTATE,TWO:di.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._cursorStyle="auto",this._domElementKeyEvents=null,this._lastPosition=new R,this._lastQuaternion=new Ft,this._lastTargetPosition=new R,this._quat=new Ft().setFromUnitVectors(e.up,new R(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new vs,this._sphericalDelta=new vs,this._scale=1,this._panOffset=new R,this._rotateStart=new te,this._rotateEnd=new te,this._rotateDelta=new te,this._panStart=new te,this._panEnd=new te,this._panDelta=new te,this._dollyStart=new te,this._dollyEnd=new te,this._dollyDelta=new te,this._dollyDirection=new R,this._mouse=new te,this._performCursorZoom=!1,this._pointers=[],this._pointerPositions={},this._controlActive=!1,this._onPointerMove=vx.bind(this),this._onPointerDown=xx.bind(this),this._onPointerUp=yx.bind(this),this._onContextMenu=Ax.bind(this),this._onMouseWheel=Sx.bind(this),this._onKeyDown=Ex.bind(this),this._onTouchStart=wx.bind(this),this._onTouchMove=Tx.bind(this),this._onMouseDown=bx.bind(this),this._onMouseMove=Mx.bind(this),this._interceptControlDown=Cx.bind(this),this._interceptControlUp=Rx.bind(this),this.domElement!==null&&this.connect(this.domElement),this.update()}set cursorStyle(e){this._cursorStyle=e,e==="grab"?this.domElement.style.cursor="grab":this.domElement.style.cursor="auto"}get cursorStyle(){return this._cursorStyle}connect(e){super.connect(e),this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointercancel",this._onPointerUp),this.domElement.addEventListener("contextmenu",this._onContextMenu),this.domElement.addEventListener("wheel",this._onMouseWheel,{passive:!1}),this.domElement.getRootNode().addEventListener("keydown",this._interceptControlDown,{passive:!0,capture:!0}),this.domElement.style.touchAction="none"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.ownerDocument.removeEventListener("pointermove",this._onPointerMove),this.domElement.ownerDocument.removeEventListener("pointerup",this._onPointerUp),this.domElement.removeEventListener("pointercancel",this._onPointerUp),this.domElement.removeEventListener("wheel",this._onMouseWheel),this.domElement.removeEventListener("contextmenu",this._onContextMenu),this.stopListenToKeyEvents(),this.domElement.getRootNode().removeEventListener("keydown",this._interceptControlDown,{capture:!0}),this.domElement.style.touchAction=""}dispose(){this.disconnect()}getPolarAngle(){return this._spherical.phi}getAzimuthalAngle(){return this._spherical.theta}getDistance(){return this.object.position.distanceTo(this.target)}listenToKeyEvents(e){e.addEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=e}stopListenToKeyEvents(){this._domElementKeyEvents!==null&&(this._domElementKeyEvents.removeEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=null)}saveState(){this.target0.copy(this.target),this.position0.copy(this.object.position),this.zoom0=this.object.zoom}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.updateProjectionMatrix(),this.dispatchEvent(ud),this.update(),this.state=lt.NONE}pan(e,t){this._pan(e,t),this.update()}dollyIn(e){this._dollyIn(e),this.update()}dollyOut(e){this._dollyOut(e),this.update()}rotateLeft(e){this._rotateLeft(e),this.update()}rotateUp(e){this._rotateUp(e),this.update()}update(e=null){let t=this.object.position;Rt.copy(t).sub(this.target),Rt.applyQuaternion(this._quat),this._spherical.setFromVector3(Rt),this.autoRotate&&this.state===lt.NONE&&this._rotateLeft(this._getAutoRotationAngle(e)),this.enableDamping?(this._spherical.theta+=this._sphericalDelta.theta*this.dampingFactor,this._spherical.phi+=this._sphericalDelta.phi*this.dampingFactor):(this._spherical.theta+=this._sphericalDelta.theta,this._spherical.phi+=this._sphericalDelta.phi);let n=this.minAzimuthAngle,s=this.maxAzimuthAngle;isFinite(n)&&isFinite(s)&&(n<-Math.PI?n+=Zt:n>Math.PI&&(n-=Zt),s<-Math.PI?s+=Zt:s>Math.PI&&(s-=Zt),n<=s?this._spherical.theta=Math.max(n,Math.min(s,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(n+s)/2?Math.max(n,this._spherical.theta):Math.min(s,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let r=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{let o=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),r=o!=this._spherical.radius}if(Rt.setFromSpherical(this._spherical),Rt.applyQuaternion(this._quatInverse),t.copy(this.target).add(Rt),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let o=null;if(this.object.isPerspectiveCamera){let a=Rt.length();o=this._clampDistance(a*this._scale);let l=a-o;this.object.position.addScaledVector(this._dollyDirection,l),this.object.updateMatrixWorld(),r=!!l}else if(this.object.isOrthographicCamera){let a=new R(this._mouse.x,this._mouse.y,0);a.unproject(this.object);let l=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),r=l!==this.object.zoom;let c=new R(this._mouse.x,this._mouse.y,0);c.unproject(this.object),this.object.position.sub(c).add(a),this.object.updateMatrixWorld(),o=Rt.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;o!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(o).add(this.object.position):(tl.origin.copy(this.object.position),tl.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(tl.direction))<_x?this.object.lookAt(this.target):(dd.setFromNormalAndCoplanarPoint(this.object.up,this.target),tl.intersectPlane(dd,this.target))))}else if(this.object.isOrthographicCamera){let o=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),o!==this.object.zoom&&(this.object.updateProjectionMatrix(),r=!0)}return this._scale=1,this._performCursorZoom=!1,r||this._lastPosition.distanceToSquared(this.object.position)>zc||8*(1-this._lastQuaternion.dot(this.object.quaternion))>zc||this._lastTargetPosition.distanceToSquared(this.target)>zc?(this.dispatchEvent(ud),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e!==null?Zt/60*this.autoRotateSpeed*e:Zt/60/60*this.autoRotateSpeed}_getZoomScale(e){let t=Math.abs(e*.01);return Math.pow(.95,this.zoomSpeed*t)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,t){Rt.setFromMatrixColumn(t,0),Rt.multiplyScalar(-e),this._panOffset.add(Rt)}_panUp(e,t){this.screenSpacePanning===!0?Rt.setFromMatrixColumn(t,1):(Rt.setFromMatrixColumn(t,0),Rt.crossVectors(this.object.up,Rt)),Rt.multiplyScalar(e),this._panOffset.add(Rt)}_pan(e,t){let n=this.domElement;if(this.object.isPerspectiveCamera){let s=this.object.position;Rt.copy(s).sub(this.target);let r=Rt.length();r*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*r/n.clientHeight,this.object.matrix),this._panUp(2*t*r/n.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/n.clientWidth,this.object.matrix),this._panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/n.clientHeight,this.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(e,t){if(!this.zoomToCursor)return;this._performCursorZoom=!0;let n=this.domElement.getBoundingClientRect(),s=e-n.left,r=t-n.top,o=n.width,a=n.height;this._mouse.x=s/o*2-1,this._mouse.y=-(r/a)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;this._rotateLeft(Zt*this._rotateDelta.x/t.clientHeight),this._rotateUp(Zt*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY<0?this._dollyIn(this._getZoomScale(e.deltaY)):e.deltaY>0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let t=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(Zt*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),t=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(-Zt*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),t=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(Zt*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),t=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(-Zt*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),t=!0;break}t&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(this._pointers.length===1)this._rotateStart.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._rotateStart.set(n,s)}}_handleTouchStartPan(e){if(this._pointers.length===1)this._panStart.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._panStart.set(n,s)}}_handleTouchStartDolly(e){let t=this._getSecondPointerPosition(e),n=e.pageX-t.x,s=e.pageY-t.y,r=Math.sqrt(n*n+s*s);this._dollyStart.set(0,r)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(this._pointers.length==1)this._rotateEnd.set(e.pageX,e.pageY);else{let n=this._getSecondPointerPosition(e),s=.5*(e.pageX+n.x),r=.5*(e.pageY+n.y);this._rotateEnd.set(s,r)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;this._rotateLeft(Zt*this._rotateDelta.x/t.clientHeight),this._rotateUp(Zt*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(this._pointers.length===1)this._panEnd.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._panEnd.set(n,s)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){let t=this._getSecondPointerPosition(e),n=e.pageX-t.x,s=e.pageY-t.y,r=Math.sqrt(n*n+s*s);this._dollyEnd.set(0,r),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);let o=(e.pageX+t.x)*.5,a=(e.pageY+t.y)*.5;this._updateZoomParameters(o,a)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let t=0;t<this._pointers.length;t++)if(this._pointers[t]==e.pointerId){this._pointers.splice(t,1);return}}_isTrackingPointer(e){for(let t=0;t<this._pointers.length;t++)if(this._pointers[t]==e.pointerId)return!0;return!1}_trackPointer(e){let t=this._pointerPositions[e.pointerId];t===void 0&&(t=new te,this._pointerPositions[e.pointerId]=t),t.set(e.pageX,e.pageY)}_getSecondPointerPosition(e){let t=e.pointerId===this._pointers[0]?this._pointers[1]:this._pointers[0];return this._pointerPositions[t]}_customWheelEvent(e){let t=e.deltaMode,n={clientX:e.clientX,clientY:e.clientY,deltaY:e.deltaY};switch(t){case 1:n.deltaY*=16;break;case 2:n.deltaY*=100;break}return e.ctrlKey&&!this._controlActive&&(n.deltaY*=10),n}};function xx(i){this.enabled!==!1&&(this._pointers.length===0&&(this.domElement.setPointerCapture(i.pointerId),this.domElement.ownerDocument.addEventListener("pointermove",this._onPointerMove),this.domElement.ownerDocument.addEventListener("pointerup",this._onPointerUp)),!this._isTrackingPointer(i)&&(this._addPointer(i),i.pointerType==="touch"?this._onTouchStart(i):this._onMouseDown(i),this._cursorStyle==="grab"&&(this.domElement.style.cursor="grabbing")))}function vx(i){this.enabled!==!1&&(i.pointerType==="touch"?this._onTouchMove(i):this._onMouseMove(i))}function yx(i){switch(this._removePointer(i),this._pointers.length){case 0:this.domElement.releasePointerCapture(i.pointerId),this.domElement.ownerDocument.removeEventListener("pointermove",this._onPointerMove),this.domElement.ownerDocument.removeEventListener("pointerup",this._onPointerUp),this.dispatchEvent(fd),this.state=lt.NONE,this._cursorStyle==="grab"&&(this.domElement.style.cursor="grab");break;case 1:let e=this._pointers[0],t=this._pointerPositions[e];this._onTouchStart({pointerId:e,pageX:t.x,pageY:t.y});break}}function bx(i){let e;switch(i.button){case 0:e=this.mouseButtons.LEFT;break;case 1:e=this.mouseButtons.MIDDLE;break;case 2:e=this.mouseButtons.RIGHT;break;default:e=-1}switch(e){case ui.DOLLY:if(this.enableZoom===!1)return;this._handleMouseDownDolly(i),this.state=lt.DOLLY;break;case ui.ROTATE:if(i.ctrlKey||i.metaKey||i.shiftKey){if(this.enablePan===!1)return;this._handleMouseDownPan(i),this.state=lt.PAN}else{if(this.enableRotate===!1)return;this._handleMouseDownRotate(i),this.state=lt.ROTATE}break;case ui.PAN:if(i.ctrlKey||i.metaKey||i.shiftKey){if(this.enableRotate===!1)return;this._handleMouseDownRotate(i),this.state=lt.ROTATE}else{if(this.enablePan===!1)return;this._handleMouseDownPan(i),this.state=lt.PAN}break;default:this.state=lt.NONE}this.state!==lt.NONE&&this.dispatchEvent(kc)}function Mx(i){switch(this.state){case lt.ROTATE:if(this.enableRotate===!1)return;this._handleMouseMoveRotate(i);break;case lt.DOLLY:if(this.enableZoom===!1)return;this._handleMouseMoveDolly(i);break;case lt.PAN:if(this.enablePan===!1)return;this._handleMouseMovePan(i);break}}function Sx(i){this.enabled===!1||this.enableZoom===!1||this.state!==lt.NONE||(i.preventDefault(),this.dispatchEvent(kc),this._handleMouseWheel(this._customWheelEvent(i)),this.dispatchEvent(fd))}function Ex(i){this.enabled!==!1&&this._handleKeyDown(i)}function wx(i){switch(this._trackPointer(i),this._pointers.length){case 1:switch(this.touches.ONE){case di.ROTATE:if(this.enableRotate===!1)return;this._handleTouchStartRotate(i),this.state=lt.TOUCH_ROTATE;break;case di.PAN:if(this.enablePan===!1)return;this._handleTouchStartPan(i),this.state=lt.TOUCH_PAN;break;default:this.state=lt.NONE}break;case 2:switch(this.touches.TWO){case di.DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchStartDollyPan(i),this.state=lt.TOUCH_DOLLY_PAN;break;case di.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchStartDollyRotate(i),this.state=lt.TOUCH_DOLLY_ROTATE;break;default:this.state=lt.NONE}break;default:this.state=lt.NONE}this.state!==lt.NONE&&this.dispatchEvent(kc)}function Tx(i){switch(this._trackPointer(i),this.state){case lt.TOUCH_ROTATE:if(this.enableRotate===!1)return;this._handleTouchMoveRotate(i),this.update();break;case lt.TOUCH_PAN:if(this.enablePan===!1)return;this._handleTouchMovePan(i),this.update();break;case lt.TOUCH_DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchMoveDollyPan(i),this.update();break;case lt.TOUCH_DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchMoveDollyRotate(i),this.update();break;default:this.state=lt.NONE}}function Ax(i){this.enabled!==!1&&i.preventDefault()}function Cx(i){i.key==="Control"&&(this._controlActive=!0,this.domElement.getRootNode().addEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}function Rx(i){i.key==="Control"&&(this._controlActive=!1,this.domElement.getRootNode().removeEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}function Vc(i){let e=md(i);return new Float32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4))}function pd(i){let e=md(i);return new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4))}function md(i){let e=atob(i),t=new Uint8Array(e.length);for(let n=0;n<e.length;n++)t[n]=e.charCodeAt(n);return t}var Rr=.85,Hc=3,Px=400,Nt=(i,e,t)=>new R(i,e,t),gd=[["TOP",Nt(0,0,1)],["BOTTOM",Nt(0,0,-1)],["FRONT",Nt(0,-1,0)],["BACK",Nt(0,1,0)],["RIGHT",Nt(1,0,0)],["LEFT",Nt(-1,0,0)]],Ix=[{name:"TOP",normal:Nt(0,0,1),up:Nt(0,1,0)},{name:"BOTTOM",normal:Nt(0,0,-1),up:Nt(0,1,0)},{name:"FRONT",normal:Nt(0,-1,0),up:Nt(0,0,1)},{name:"BACK",normal:Nt(0,1,0),up:Nt(0,0,1)},{name:"RIGHT",normal:Nt(1,0,0),up:Nt(0,0,1)},{name:"LEFT",normal:Nt(-1,0,0),up:Nt(0,0,1)}];function Lx(i){let e=[],t=i.length();for(let[n,s]of gd)i.dot(s)/t>.5&&e.push(n);return e.sort().join("-")}function Dx(i){let e=document.createElement("canvas");e.width=128,e.height=128;let t=e.getContext("2d");t!==null&&(t.fillStyle="rgba(246, 248, 251, 0.96)",t.fillRect(0,0,128,128),t.strokeStyle="rgba(148, 158, 172, 0.9)",t.lineWidth=3,t.strokeRect(1.5,1.5,125,125),t.fillStyle="#5b6472",t.font=`600 ${i.length>2?24:28}px -apple-system, "Segoe UI", sans-serif`,t.textAlign="center",t.textBaseline="middle",t.fillText(i,64,66));let n=new Pi(e);return n.anisotropy=4,n}var Pr=class{constructor(e){this.options=e;let{container:t,camera:n,controls:s}=e;this.camera=n,this.controls=s;let r=e.size??96;getComputedStyle(t).position==="static"&&(t.style.position="relative"),this.overlay=document.createElement("div"),this.overlay.style.cssText=`position:absolute;top:8px;right:8px;width:${r}px;display:flex;flex-direction:column;align-items:center;gap:3px;z-index:5;user-select:none;`,t.appendChild(this.overlay);let o=document.createElement("div");o.style.cssText=`width:${r}px;height:${r}px;cursor:grab;`,this.overlay.appendChild(o),this.caption=document.createElement("div"),this.caption.style.cssText='min-height:14px;font:500 10px/14px -apple-system,"Segoe UI",sans-serif;color:var(--dsw-alias-label-secondary,#374151);background:var(--dsw-alias-bg-base,rgba(255,255,255,0.85));border-radius:7px;padding:0 7px;opacity:0;transition:opacity 120ms;text-align:center;white-space:nowrap;',this.overlay.appendChild(this.caption);let a=document.createElement("button");a.type="button",a.title="Reset view",a.setAttribute("aria-label","Reset view"),a.style.cssText="width:22px;height:22px;border-radius:50%;border:1px solid var(--dsw-alias-border-l2,#c4c9d0);background:var(--dsw-alias-bg-base,#fff);color:var(--dsw-alias-label-secondary,#374151);font-size:12px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;",a.textContent="\u2302",a.addEventListener("click",()=>{e.onHome?.()}),this.overlay.appendChild(a),this.renderer=new ws({antialias:!0,alpha:!0}),this.renderer.setPixelRatio(window.devicePixelRatio),this.renderer.setSize(r,r),this.renderer.domElement.style.cssText="width:100%;height:100%;display:block;touch-action:none;",o.appendChild(this.renderer.domElement),this.overlayCamera.position.set(0,0,4),this.overlayCamera.lookAt(0,0,0),new ii().add(this.root),this.buildCube();let c=d=>{let u=this.renderer.domElement.getBoundingClientRect(),f=new te((d.clientX-u.left)/u.width*2-1,-((d.clientY-u.top)/u.height)*2+1);this.raycaster.setFromCamera(f,this.overlayCamera);let g=this.raycaster.intersectObjects(this.cells,!1)[0];return g===void 0?{zone:null,point:null}:{zone:g.object.userData.zone,point:g.point}},h=this.renderer.domElement;h.addEventListener("pointermove",d=>{let{zone:u}=c(d);this.setHover(u),h.style.cursor=u===null?"grab":"pointer"}),h.addEventListener("pointerleave",()=>{this.setHover(null)}),h.addEventListener("click",d=>{let{zone:u}=c(d);if(u===null)return;let f=Nx(u);f!==null&&this.animateTo(f)})}options;camera;controls;renderer;overlayCamera=new ci(-1.35,1.35,1.35,-1.35,.1,10);root=new Vt;cells=[];zoneCells=new Map;hiddenMaterial=new an({visible:!1});highlightMaterial=new an({color:5073918,transparent:!0,opacity:.55,depthWrite:!1});disposables=[this.hiddenMaterial,this.highlightMaterial];raycaster=new Di;overlay;caption;hovered=null;tweenId=0;disposed=!1;buildCube(){let e=2*Rr/Hc;for(let t of Ix){let n=t.up.clone().cross(t.normal),s=new rt().makeBasis(n,t.up,t.normal),r=new Vt;r.quaternion.setFromRotationMatrix(s);let o=Dx(t.name);this.disposables.push(o);let a=new an({map:o,transparent:!0});this.disposables.push(a);let l=new Tt(new ri(2*Rr,2*Rr),a);l.position.set(0,0,Rr),r.add(l),this.disposables.push(l.geometry);let c=new ri(e*1.02,e*1.02);this.disposables.push(c);for(let h=0;h<Hc;h++)for(let d=0;d<Hc;d++){let u=new Tt(c,this.hiddenMaterial);u.position.set((h-1)*e,(d-1)*e,Rr+.004);let f=t.normal.clone().addScaledVector(n,h-1).addScaledVector(t.up,d-1),g=Lx(f);u.userData.zone=g,r.add(u),this.cells.push(u);let y=this.zoneCells.get(g);y===void 0?this.zoneCells.set(g,[u]):y.push(u)}this.root.add(r)}}setHover(e){if(e!==this.hovered){for(let t of this.hovered===null?[]:this.zoneCells.get(this.hovered)??[])t.material=this.hiddenMaterial;this.hovered=e;for(let t of e===null?[]:this.zoneCells.get(e)??[])t.material=this.highlightMaterial;this.caption.textContent=e,this.caption.style.opacity=e===null?"0":"1"}}animateTo(e){let t=this.camera,n=this.controls,s=t.position.distanceTo(n.target),r=t.position.clone().sub(n.target).normalize(),o=e.clone().normalize();if(r.dot(o)>.9999)return;let a=new Ft().setFromUnitVectors(r,o),l=new Ft;n.enabled=!1,cancelAnimationFrame(this.tweenId);let c=performance.now(),h=()=>{if(this.disposed)return;let d=Math.min(1,(performance.now()-c)/Px),u=1-Math.pow(1-d,3),f=new Ft().slerpQuaternions(l,a,u);t.position.copy(r).applyQuaternion(f).multiplyScalar(s).add(n.target),t.lookAt(n.target),d<1?this.tweenId=requestAnimationFrame(h):(n.enabled=!0,n.update())};this.tweenId=requestAnimationFrame(h)}update(){this.disposed||(this.root.quaternion.copy(this.camera.quaternion).invert(),this.renderer.render(this.root.parent,this.overlayCamera))}dispose(){if(!this.disposed){this.disposed=!0,cancelAnimationFrame(this.tweenId),this.controls.enabled=!0;for(let e of this.disposables)e.dispose();this.renderer.dispose(),this.overlay.remove()}}};function Nx(i){let e=i.split("-"),t=new R,n=0;for(let[s,r]of gd)e.includes(s)&&(t.add(r),n++);return n===0||t.lengthSq()===0?null:t.normalize()}var Ux=25,_d=5073918,xd=16751165,Fx=6;function As(i,e,t){return`${Math.round(i*1e5)},${Math.round(e*1e5)},${Math.round(t*1e5)}`}var il=class{parent;constructor(e){this.parent=new Int32Array(e);for(let t=0;t<e;t++)this.parent[t]=t}find(e){for(;this.parent[e]!==e;)this.parent[e]=this.parent[this.parent[e]],e=this.parent[e];return e}union(e,t){let n=this.find(e),s=this.find(t);n!==s&&(this.parent[s]=n)}};function Ox(i){let e=i.geometry,t=e.getAttribute("position"),n=e.getIndex(),s=t.array,r=Math.floor((n!==null?n.count:t.count)/3),o=(x,S)=>n!==null?n.getX(x*3+S):x*3+S,a=[],l=new Float64Array(r),c=new R,h=new R,d=new R,u=new R,f=new R;for(let x=0;x<r;x++){c.fromArray(s,o(x,0)*3),h.fromArray(s,o(x,1)*3),d.fromArray(s,o(x,2)*3),u.subVectors(h,c),f.subVectors(d,c);let S=new R().crossVectors(u,f);l[x]=S.length()/2,a.push(S.normalize())}let g=new Map;for(let x=0;x<r;x++)for(let S=0;S<3;S++){let M=o(x,S)*3,A=o(x,(S+1)%3)*3,v=As(s[M],s[M+1],s[M+2]),w=As(s[A],s[A+1],s[A+2]),I=v<w?`${v}|${w}`:`${w}|${v}`,P=g.get(I);P===void 0?g.set(I,[{tri:x,ka:v,kb:w}]):P.push({tri:x,ka:v,kb:w})}let y=Math.cos(Ux*Math.PI/180),m=new il(r);for(let x of g.values())for(let S=0;S<x.length;S++)for(let M=S+1;M<x.length;M++){let A=x[S],v=x[M];A===void 0||v===void 0||A.ka===v.ka&&A.kb===v.kb||a[A.tri].dot(a[v.tri])>=y&&m.union(A.tri,v.tri)}let p=new Map,C=new Uint32Array(r),T=[];for(let x=0;x<r;x++){let S=m.find(x),M=p.get(S);M===void 0&&(M=T.length,p.set(S,M),T.push({triangles:[],area:0})),C[x]=M;let A=T[M];A!==void 0&&(A.triangles.push(x),A.area+=l[x])}return{regionOf:C,regions:T}}function Bx(i,e,t){let n=i.geometry,s=n.getAttribute("position"),r=n.getIndex(),o=s.array,a=Math.floor((r!==null?r.count:s.count)/3),l=(x,S)=>r!==null?r.getX(x*3+S):x*3+S,c=new Map;for(let x=0;x<a;x++){let S=e.regionOf[x];for(let M=0;M<3;M++){let A=l(x,M)*3,v=l(x,(M+1)%3)*3,w=As(o[A],o[A+1],o[A+2]),I=As(o[v],o[v+1],o[v+2]),P=w<I?`${w}|${I}`:`${I}|${w}`,O=c.get(P);O===void 0?c.set(P,[S]):O.includes(S)||O.push(S)}}let h=t.length/6,d=new il(h),u=new Map,f=[];for(let x=0;x<h;x++){let S=t[x*6],M=t[x*6+1],A=t[x*6+2],v=t[x*6+3],w=t[x*6+4],I=t[x*6+5],P=As(S,M,A),O=As(v,w,I);f.push([P,O]);let q=u.get(P);q===void 0?u.set(P,[x]):q.push(x);let Y=u.get(O);Y===void 0?u.set(O,[x]):Y.push(x)}let g=x=>{let[S,M]=f[x]??["",""],A=S<M?`${S}|${M}`:`${M}|${S}`;return(c.get(A)??[]).slice().sort((v,w)=>v-w).join(",")},y=[];for(let x=0;x<h;x++)y.push(g(x));for(let x=0;x<h;x++){let[S,M]=f[x]??["",""];for(let A of[S,M]){let v=u.get(A)??[];for(let w of v)w<=x||y[x]===y[w]&&d.union(x,w)}}let m=new Map,p=new Uint32Array(h),C=[];for(let x=0;x<h;x++){let S=d.find(x),M=m.get(S);M===void 0&&(M=C.length,m.set(S,M),C.push({length:0,closed:!0})),p[x]=M;let A=C[M];if(A!==void 0){let v=t[x*6+3]-t[x*6],w=t[x*6+4]-t[x*6+1],I=t[x*6+5]-t[x*6+2];A.length+=Math.sqrt(v*v+w*w+I*I)}}let T=new Map;for(let x=0;x<h;x++){let[S,M]=f[x]??["",""],A=p[x];T.set(`${A}:${S}`,(T.get(`${A}:${S}`)??0)+1),T.set(`${A}:${M}`,(T.get(`${A}:${M}`)??0)+1)}for(let x=0;x<C.length;x++){let S=!0,M=!1;for(let v=0;v<h;v++){if(p[v]!==x)continue;M=!0;let[w,I]=f[v]??["",""];((T.get(`${x}:${w}`)??0)!==2||(T.get(`${x}:${I}`)??0)!==2)&&(S=!1)}let A=C[x];A!==void 0&&(A.closed=M&&S)}return{groupOf:p,groups:C}}var Ir=class{constructor(e){this.options=e;let{domElement:t,cad:n}=e;for(let r of[this.hoverFaceMesh,this.selectFaceMesh,this.hoverEdgeLines,this.selectEdgeLines])r.raycast=()=>{},r.renderOrder=r instanceof xn?3:2,r.visible=!1;this.disposables.push(this.hoverFaceMesh.material,this.hoverFaceMesh.geometry,this.selectFaceMesh.material,this.selectFaceMesh.geometry,this.hoverEdgeLines.material,this.hoverEdgeLines.geometry,this.selectEdgeLines.material,this.selectEdgeLines.geometry);let s=new gn().setFromObject(n).getSize(new R);this.center=new gn().setFromObject(n).getCenter(new R),this.label=document.createElement("div"),this.label.style.cssText='position:absolute;left:8px;bottom:8px;z-index:5;pointer-events:none;font:500 11px/16px -apple-system,"Segoe UI",sans-serif;color:var(--dsw-alias-label-secondary,#374151);background:var(--dsw-alias-bg-base,rgba(255,255,255,0.88));border:1px solid var(--dsw-alias-border-l1,rgba(215,219,224,0.7));border-radius:8px;padding:2px 8px;opacity:0;transition:opacity 120ms;white-space:nowrap;',t.addEventListener("pointermove",this.onPointerMove),t.addEventListener("pointerleave",this.onPointerLeave),t.addEventListener("pointerdown",this.onPointerDown),t.addEventListener("pointerup",this.onPointerUp)}options;raycaster=new Di;meshes=[];faceCache=new Map;edgeCache=new Map;label;hover=null;selection=null;down=null;disposed=!1;center;disposables=[];hoverFaceMesh=new Tt(new mt,new an({color:_d,transparent:!0,opacity:.35,depthWrite:!1,polygonOffset:!0,polygonOffsetFactor:-2,polygonOffsetUnits:-2}));selectFaceMesh=new Tt(new mt,new an({color:xd,transparent:!0,opacity:.45,depthWrite:!1,polygonOffset:!0,polygonOffsetFactor:-3,polygonOffsetUnits:-3}));hoverEdgeLines=new xn(new mt,new _n({color:_d,depthTest:!1,transparent:!0,opacity:.95}));selectEdgeLines=new xn(new mt,new _n({color:xd,depthTest:!1,transparent:!0,opacity:1}));meshesOf(){return this.meshes.length=0,this.options.cad.traverse(e=>{e.isMesh&&this.meshes.push(e)}),this.meshes}facesOf(e){let t=this.faceCache.get(e);return t===void 0&&(t=Ox(e),this.faceCache.set(e,t)),t}edgesOf(e){let t=e.userData.edges;if(t===void 0)return null;let n=this.edgeCache.get(e);if(n===void 0){let r=t.geometry.getAttribute("position").array;n=Bx(e,this.facesOf(e),r),this.edgeCache.set(e,n)}let s=t.geometry.getAttribute("position").array;return{groups:n,segments:s}}pick(e){let{domElement:t,camera:n}=this.options,s=t.getBoundingClientRect(),r=new te((e.clientX-s.left)/s.width*2-1,-((e.clientY-s.top)/s.height)*2+1);this.raycaster.setFromCamera(r,n);let o=this.meshesOf(),a=this.raycaster.intersectObjects(o,!1)[0],c=2*(a?.distance??n.position.distanceTo(this.center))*Math.tan(n.fov*Math.PI/180/2)/Math.max(s.height,1),h=Fx*c;this.raycaster.params.Line.threshold=h;let d=null;for(let f of o){let g=f.userData.edges;if(g===void 0)continue;let m=this.raycaster.intersectObject(g,!1)[0];if(m!==void 0&&(d===null||m.distance<d.distance)){let p=Math.floor((m.index??0)/2);d={mesh:f,distance:m.distance,segment:p}}}if(d!==null&&(a===void 0||d.distance<=a.distance+h)){let f=this.edgesOf(d.mesh);if(f!==null)return{kind:"edge",mesh:d.mesh,group:f.groups.groupOf[d.segment]??0}}if(a===void 0||a.face===void 0)return null;let u=this.facesOf(a.object).regionOf[a.faceIndex??0]??0;return{kind:"face",mesh:a.object,region:u}}onPointerMove=e=>{if(!this.disposed){if(e.buttons!==0){this.setHover(null);return}this.setHover(this.pick(e))}};onPointerLeave=()=>{this.setHover(null)};onPointerDown=e=>{e.button===0&&(this.down={x:e.clientX,y:e.clientY,at:performance.now()})};onPointerUp=e=>{if(this.disposed)return;let t=this.down;if(this.down=null,t===null||e.button!==0||Math.hypot(e.clientX-t.x,e.clientY-t.y)>5||performance.now()-t.at>600)return;let s=this.pick(e);this.setSelection(s)};setHover(e){vd(e,this.hover)||(this.hover=e,this.refresh())}invalidate(){this.faceCache.clear(),this.edgeCache.clear(),this.selection=null,this.hover=null,this.refresh()}setSelection(e){this.selection=e,this.refresh()}refresh(){let e=(l,c,h)=>{let u=this.facesOf(l).regions[c];if(u===void 0){h.visible=!1;return}let f=l.geometry,g=f.getAttribute("position"),y=f.getIndex(),m=g.array,p=new Float32Array(u.triangles.length*9),C=0;for(let T of u.triangles)for(let x=0;x<3;x++){let S=(y!==null?y.getX(T*3+x):T*3+x)*3;p[C++]=m[S],p[C++]=m[S+1],p[C++]=m[S+2]}h.geometry.dispose(),h.geometry=new mt,h.geometry.setAttribute("position",new wt(p,3)),l!==h.parent&&l.add(h),h.visible=!0},t=(l,c,h)=>{let d=this.edgesOf(l);if(d===null){h.visible=!1;return}let{groups:u,segments:f}=d,g=[];for(let y=0;y<u.groupOf.length;y++)if(u.groupOf[y]===c)for(let m=0;m<6;m++)g.push(f[y*6+m]);h.geometry.dispose(),h.geometry=new mt,h.geometry.setAttribute("position",new xt(g,3)),l!==h.parent&&l.add(h),h.visible=!0},n=(...l)=>{for(let c of l)c.visible=!1},s=vd(this.hover,this.selection)?null:this.hover,r=this.selection;s!==null&&s.kind==="face"?e(s.mesh,s.region,this.hoverFaceMesh):n(this.hoverFaceMesh),s!==null&&s.kind==="edge"?t(s.mesh,s.group,this.hoverEdgeLines):n(this.hoverEdgeLines),r!==null&&r.kind==="face"?e(r.mesh,r.region,this.selectFaceMesh):n(this.selectFaceMesh),r!==null&&r.kind==="edge"?t(r.mesh,r.group,this.selectEdgeLines):n(this.selectEdgeLines);let o=this.hover??r,a=this.options.domElement.parentElement;if(o!==null){let l=o.mesh.name.length>0?`${o.mesh.name} \xB7 `:"";if(o.kind==="face"){let c=this.facesOf(o.mesh).regions[o.region]?.area??0;this.label.textContent=`${l}face \xB7 ${c.toLocaleString(void 0,{maximumFractionDigits:1})} mm\xB2`}else{let c=this.edgesOf(o.mesh)?.groups.groups[o.group],h=c?.length??0;this.label.textContent=`${l}edge \xB7 ${h.toLocaleString(void 0,{maximumFractionDigits:1})} mm${c?.closed===!0?" \xB7 closed":""}`}this.label.style.opacity="1",this.label.parentElement!==a&&a!==null&&a.appendChild(this.label)}else this.label.style.opacity="0",this.label.textContent="";this.options.domElement.style.cursor=o===null?"grab":"pointer"}dispose(){if(this.disposed)return;this.disposed=!0;let{domElement:e}=this.options;e.removeEventListener("pointermove",this.onPointerMove),e.removeEventListener("pointerleave",this.onPointerLeave),e.removeEventListener("pointerdown",this.onPointerDown),e.removeEventListener("pointerup",this.onPointerUp);for(let t of[this.hoverFaceMesh,this.selectFaceMesh,this.hoverEdgeLines,this.selectEdgeLines])t.removeFromParent();for(let t of this.disposables)t.dispose();this.label.remove()}};function vd(i,e){return i===null||e===null?i===e:i.kind===e.kind&&i.mesh===e.mesh&&(i.kind==="face"?i.region===e.region:i.group===e.group)}function yd(){let i=new gs;i.moveTo(0,0),i.lineTo(60,0),i.lineTo(60,12),i.lineTo(12,12),i.lineTo(12,60),i.lineTo(0,60),i.closePath();let e=new Ii;e.absarc(36,6,5,0,Math.PI*2,!0),i.holes.push(e);let t=new cr(i,{depth:100,bevelEnabled:!1,curveSegments:32});return t.translate(-30,-30,0),t}var bd={min:{x:-30,y:-30,z:0},max:{x:30,y:30,z:100}};var zx=25,Gc={x:13777723,y:3055172,z:2846678};function Wc(i,e){let t=document.createElement("canvas");t.width=64,t.height=64;let n=t.getContext("2d");n!==null&&(n.font='bold 44px -apple-system, "Segoe UI", sans-serif',n.textAlign="center",n.textBaseline="middle",n.fillStyle=`#${e.toString(16).padStart(6,"0")}`,n.fillText(i,32,34));let s=new Pi(t);s.needsUpdate=!0;let r=new ds({map:s,transparent:!0}),o=new js(r);return o.scale.set(1,1,1),o}function Md(i,e={}){let t=new ws({antialias:!0,alpha:!0});t.setPixelRatio(window.devicePixelRatio),t.setSize(i.clientWidth||360,i.clientHeight||300),i.appendChild(t.domElement),t.domElement.style.width="100%",t.domElement.style.height="100%",t.domElement.style.display="block";let n=new kt(45,1,.01,1e4);n.up.set(0,0,1);let s=new nl(n,t.domElement);s.enableDamping=!0,s.dampingFactor=.12,e.autoRotate===!0&&(s.autoRotate=!0,s.autoRotateSpeed=.8);let r=()=>{let a=i.clientWidth,l=i.clientHeight;a===0||l===0||(t.setSize(a,l,!1),n.aspect=a/l,n.updateProjectionMatrix(),e.onResize?.(a,l))},o=new ResizeObserver(r);return o.observe(i),{renderer:t,camera:n,controls:s,dispose(){o.disconnect(),s.dispose(),t.dispose(),t.domElement.parentNode===i&&i.removeChild(t.domElement)}}}function Sd(i,e){let t=new Vt,n=new pr(e*2,20,9081244,4869976);n.rotation.x=Math.PI/2,t.add(n);let s=new mr(e);t.add(s);let r=e*1.12,o=e*.14,a=Wc("X",Gc.x);a.position.set(r,0,0),a.scale.set(o,o,o),t.add(a);let l=Wc("Y",Gc.y);l.position.set(0,r,0),l.scale.set(o,o,o),t.add(l);let c=Wc("Z",Gc.z);return c.position.set(0,0,r),c.scale.set(o,o,o),t.add(c),i.add(t),[t,n,s,a,l,c]}function Xc(i){for(let e of i)e.traverse(t=>{let n=t;if(n.isMesh){n.geometry?.dispose();let o=n.material;Array.isArray(o)?o.forEach(a=>a.dispose()):o?.dispose()}let s=t;s.isLineSegments&&(s.geometry?.dispose(),s.material?.dispose());let r=t;r.isSprite&&(r.material.map?.dispose(),r.material.dispose())})}function kx(i){let e=i.userData.edges;if(e!==void 0)return e;let t=i.geometry;if(t===void 0)return;let n=i.material;n.polygonOffset=!0,n.polygonOffsetFactor=1,n.polygonOffsetUnits=1;let s=new xn(new tr(t,zx),new _n({color:3358799,transparent:!0,opacity:.9}));return i.add(s),i.userData.edges=s,s}function sl(i,e){i.traverse(t=>{let n=t;if(!n.isMesh)return;let s=n.material;s.wireframe=e==="wireframe";let r=e==="shaded-edges"?kx(n):n.userData.edges;r!==void 0&&(r.visible=e==="shaded-edges")})}function qc(i){let e="geometry"in i?i.geometry:(()=>{let s=new mt,r=typeof i.positions=="string"?Vc(i.positions):i.positions;if(s.setAttribute("position",new wt(r,3)),i.normals!==void 0){let a=typeof i.normals=="string"?Vc(i.normals):i.normals;s.setAttribute("normal",new wt(a,3))}else s.computeVertexNormals();let o=typeof i.indices=="string"?pd(i.indices):i.indices;return s.setIndex(new wt(o,1)),s})(),t=i.color===void 0?10466503:i.color,n=new hr({color:t,metalness:.15,roughness:.55,flatShading:i.normals===void 0,side:ln});return new Tt(e,n)}function Ed(i,e={}){let t=Md(i,{onResize:()=>{S||T()}}),n=new ii,s=e.part===null,r=new Vt;n.add(r);let o=new Vt;s||o.add(qc({name:"demo-bracket",geometry:yd()})),r.add(o);let l=s?{min:{x:-100,y:-100,z:0},max:{x:100,y:100,z:100}}:{...bd},c=new R(l.max.x-l.min.x,l.max.y-l.min.y,l.max.z-l.min.z),h=new R((l.max.x+l.min.x)/2,(l.max.y+l.min.y)/2,(l.max.z+l.min.z)/2),d=Math.max(c.x,c.y,c.z,1e-6);n.add(o);let u=new xs(16777215,5857131,1.1);n.add(u);let f=new hi(16777215,1.6);n.add(f);let g=new hi(16777215,.5);n.add(g);let y=()=>{f.position.set(h.x+d,h.y+d*1.4,h.z+d*.8),g.position.set(h.x-d,h.y+d*.4,h.z-d*.6)};y();let m=Sd(n,d),p=m[1],C="shaded-edges",T=()=>{let U=wd(d,t.camera.aspect,t.camera.fov);t.camera.position.set(h.x+U*.7,h.y+U*.55,h.z+U*.6),t.controls.target.copy(h),t.controls.update()},x=()=>{p.position.set(h.x,h.y,l.min.z),t.camera.near=d/100,t.camera.far=d*40,sl(r,C),y(),T()};x();let S=!1,M=()=>{S=!0};t.renderer.domElement.addEventListener("pointerdown",M,{passive:!0}),t.renderer.domElement.addEventListener("wheel",M,{passive:!0});let A=new Pr({container:i,camera:t.camera,controls:t.controls,onHome:T}),v=new Ir({domElement:t.renderer.domElement,camera:t.camera,cad:r}),w=!1,I=U=>{if(!w){r.remove(o),Xc([o]),v.invalidate(),o=new Vt;for(let G of U.meshes)o.add(qc(G));r.add(o),l=U.bounds,c=new R(l.max.x-l.min.x,l.max.y-l.min.y,l.max.z-l.min.z),h=new R((l.max.x+l.min.x)/2,(l.max.y+l.min.y)/2,(l.max.z+l.min.z)/2),d=Math.max(c.x,c.y,c.z,1e-6),x()}},P=!1,O=U=>{fetch(`/dsh-cad/demo-scene?part=${U}`).then(G=>G.ok?G.json():Promise.reject(new Error(`HTTP ${G.status}`))).then(G=>{w||(I(G),P=!0,e.onSource?.("brep"))}).catch(()=>{w||e.onSource?.(P?"brep":"fallback")})};s||O(e.part??"bracket");let q=()=>{Y=requestAnimationFrame(q),t.controls.update(),t.renderer.render(n,t.camera),A.update()},Y=requestAnimationFrame(q);return{setWireframe(U){this.setRenderMode(U?"wireframe":"shaded-edges")},setRenderMode(U){C=U,sl(r,C)},loadPart:O,resetView:T,dispose(){w=!0,cancelAnimationFrame(Y),v.dispose(),A.dispose(),Xc([r,...m,u,f,g]),t.dispose()}}}function wd(i,e,t){let n=t*Math.PI/180,s=2*Math.atan(Math.tan(n/2)*(Number.isFinite(e)&&e>0?e:1)),r=Math.min(n,s);return i/2/Math.tan(r/2)*1.5}function Td(i,e){let t=Md(i,{onResize:()=>{y||g()}}),n=new ii,s=new Vt;for(let M of e.meshes)s.add(qc(M));let r=e.bounds,o=new R(r.max.x-r.min.x,r.max.y-r.min.y,r.max.z-r.min.z),a=new R((r.max.x+r.min.x)/2,(r.max.y+r.min.y)/2,(r.max.z+r.min.z)/2),l=Math.max(o.x,o.y,o.z,1e-6);n.add(s);let c=new xs(16777215,5857131,1.1);n.add(c);let h=new hi(16777215,1.6);h.position.set(a.x+l,a.y+l*1.4,a.z+l*.8),n.add(h);let d=new hi(16777215,.5);d.position.set(a.x-l,a.y+l*.4,a.z-l*.6),n.add(d);let u=Sd(n,l);u[1].position.set(a.x,a.y,r.min.z),t.camera.near=l/100,t.camera.far=l*40;let g=()=>{let M=wd(l,t.camera.aspect,t.camera.fov);t.camera.position.set(a.x+M*.7,a.y+M*.55,a.z+M*.6),t.controls.target.copy(a),t.controls.update()};g();let y=!1,m=()=>{y=!0};t.renderer.domElement.addEventListener("pointerdown",m,{passive:!0}),t.renderer.domElement.addEventListener("wheel",m,{passive:!0});let p=new Pr({container:i,camera:t.camera,controls:t.controls,onHome:g});sl(s,"shaded-edges");let T=new Ir({domElement:t.renderer.domElement,camera:t.camera,cad:s}),x=()=>{S=requestAnimationFrame(x),t.controls.update(),t.renderer.render(n,t.camera),p.update()},S=requestAnimationFrame(x);return{setWireframe(M){this.setRenderMode(M?"wireframe":"shaded-edges")},setRenderMode(M){sl(s,M)},resetView:g,dispose(){cancelAnimationFrame(S),T.dispose(),p.dispose(),Xc([s,...u,c,h,d]),t.dispose()}}}var Oi=Br(require("react"),1);function Yc(i){let{min:e,max:t}=i.bounds,n=Math.max(t.x-e.x,1e-6),s=Math.max(t.y-e.y,1e-6),r=Math.max(n,s)*.05;return{x:e.x-r,y:-t.y-r,width:n+r*2,height:s+r*2}}function Ad(i){return i.color===void 0?"var(--dsh-cad-stroke, #4c5561)":`#${i.color.toString(16).padStart(6,"0")}`}function Vx(i){let e=[];for(let t=0;t+1<i.length;t+=2)e.push(`${i[t].toFixed(3)},${i[t+1].toFixed(3)}`);return e.join(" ")}function Hx(i,e,t,n,s){let r=n*(Math.PI/180),o=s*(Math.PI/180),a=i+t*Math.cos(r),l=e+t*Math.sin(r),c=i+t*Math.cos(o),h=e+t*Math.sin(o),d=((o-r)%(Math.PI*2)+Math.PI*2)%(Math.PI*2)>Math.PI?1:0;return`M ${a.toFixed(4)} ${l.toFixed(4)} A ${t.toFixed(4)} ${t.toFixed(4)} 0 ${d} 1 ${c.toFixed(4)} ${h.toFixed(4)}`}function Cd(i){return i.entities.map((e,t)=>{let n=`e${t}`,s=e.layer==="hidden",r=e.layer==="paper"||e.layer==="dim",o={stroke:Ad(e),fill:"none",strokeWidth:s||r?1:1.6,vectorEffect:"non-scaling-stroke",...s?{strokeDasharray:"6 4"}:{}};switch(e.type){case"line":return Oi.default.createElement("line",{key:n,x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,style:o});case"circle":return Oi.default.createElement("circle",{key:n,cx:e.cx,cy:e.cy,r:e.r,style:o});case"arc":return Oi.default.createElement("path",{key:n,d:Hx(e.cx,e.cy,e.r,e.startAngle,e.endAngle),style:o});case"polyline":return Oi.default.createElement("polyline",{key:n,points:Vx(e.points),fill:"none",style:o});case"text":return Oi.default.createElement("g",{key:n,transform:`translate(${e.x} ${e.y}) scale(1 -1) rotate(${(e.rotation??0)*-1})`},Oi.default.createElement("text",{x:0,y:0,fontSize:e.height,fill:Ad(e),style:{userSelect:"none"}},e.text))}})}var Zc=["shaded-edges","shaded","wireframe"],Gx={"shaded-edges":"Faces+Edges",shaded:"Faces",wireframe:"Wireframe"},Rd=null,$c=new Set,Pd={part:null,assembly:null,drawing:null};function Id(i){Rd={meta:i,at:Date.now()};let e=i.doc??"part";Pd[e]={meta:i,at:Date.now()};for(let t of $c)t()}function Ld(){return Rd}function Lr(i){return Pd[i]}function Dd(i){return $c.add(i),()=>{$c.delete(i)}}function Nd(i){let e=i.meta;if(e===null||typeof e!="object")return null;let t=e;return typeof t.viewId=="string"&&(t.kind==="3d"||t.kind==="2d")?t:null}function Wx(i){let e=new DataView(i);if(e.getUint32(0,!0)!==826426180)throw new Error("bad scene magic");let n=e.getUint32(4,!0),s=new TextDecoder().decode(new Uint8Array(i,8,n)).replace(/\u0000+$/,""),r=JSON.parse(s),o=8+n;return{kind:"3d",format:"model",meshes:r.meshes.map(l=>({name:l.name,...l.color===void 0?{}:{color:l.color},positions:new Float32Array(i,o+l.posOffset,l.posBytes/4),...l.nrmOffset===void 0?{}:{normals:new Float32Array(i,o+l.nrmOffset,(l.nrmBytes??0)/4)},indices:new Uint32Array(i,o+l.idxOffset,l.idxBytes/4),vertexCount:l.vertexCount,triangleCount:l.triangleCount})),bounds:{min:{x:r.bounds.min[0],y:r.bounds.min[1],z:r.bounds.min[2]},max:{x:r.bounds.max[0],y:r.bounds.max[1],z:r.bounds.max[2]}},units:r.units}}function Bi(i){let[e,t]=(0,St.useState)(null),[n,s]=(0,St.useState)(null);return(0,St.useEffect)(()=>{if(i===void 0)return;let r=!1;t(null),s(null);let o=i.includes("/dsh-cad/bin/");return fetch(i).then(async a=>{if(!a.ok)throw new Error(`scene fetch failed: HTTP ${a.status}`);return o?Wx(await a.arrayBuffer()):await a.json()}).then(a=>{r||t(a)}).catch(a=>{r||s(a instanceof Error?a.message:String(a))}),()=>{r=!0}},[i]),{scene:e,error:n}}function zi({scene:i,error:e,height:t,fill:n}){return e!==null?Pt.default.createElement("div",{style:Gt.error},e):i===null?Pt.default.createElement("div",{style:Gt.placeholder},"loading\u2026"):i.kind==="3d"?Pt.default.createElement(Xx,{scene:i,height:t,fill:n}):Pt.default.createElement(qx,{scene:i,height:t,fill:n})}function Xx({scene:i,height:e,fill:t}){let n=(0,St.useRef)(null),s=(0,St.useRef)(null),[r,o]=(0,St.useState)("shaded-edges");(0,St.useEffect)(()=>{let c=n.current;if(c===null)return;let h=Td(c,i);return s.current=h,h.setRenderMode(r),()=>{h.dispose(),s.current=null}},[i]),(0,St.useEffect)(()=>{s.current?.setRenderMode(r)},[r]);let a=(0,St.useCallback)(()=>{o(c=>Zc[(Zc.indexOf(c)+1)%Zc.length])},[]),l=(0,St.useCallback)(()=>{s.current?.resetView()},[]);return Pt.default.createElement("div",{style:t===!0?Cs.wrap:Gt.viewportWrap},Pt.default.createElement("div",{ref:n,style:t===!0?Cs.viewport:{...Gt.viewport,height:e??360}}),Pt.default.createElement("div",{style:Gt.toolbar},Pt.default.createElement("button",{type:"button",style:Gt.button,onClick:a,"aria-pressed":r==="wireframe"},Gx[r]),Pt.default.createElement("button",{type:"button",style:Gt.button,onClick:l},"Reset view")))}function qx({scene:i,height:e,fill:t}){let[n,s]=(0,St.useState)(()=>Yc(i)),r=(0,St.useRef)(null),o=(0,St.useCallback)(()=>s(Yc(i)),[i]),a=(0,St.useCallback)(d=>{d.preventDefault();let f=d.currentTarget.getBoundingClientRect(),g=n.x+(d.clientX-f.left)/f.width*n.width,y=n.y+(d.clientY-f.top)/f.height*n.height,m=d.deltaY<0?.85:1.18;s({x:g-(g-n.x)*m,y:y-(y-n.y)*m,width:n.width*m,height:n.height*m})},[n]),l=(0,St.useCallback)(d=>{r.current={x:d.clientX,y:d.clientY,viewBox:n},d.currentTarget.setPointerCapture(d.pointerId)},[n]),c=(0,St.useCallback)(d=>{let u=r.current;if(u===null)return;let g=d.currentTarget.getBoundingClientRect(),y=u.viewBox.width/g.width,m=u.viewBox.height/g.height;s({...u.viewBox,x:u.viewBox.x-(d.clientX-u.x)*y,y:u.viewBox.y-(d.clientY-u.y)*m})},[]),h=(0,St.useCallback)(()=>{r.current=null},[]);if(i.format==="svg"&&i.svgText!==void 0){let d=`data:image/svg+xml;base64,${btoa(unescape(encodeURIComponent(i.svgText)))}`;return Pt.default.createElement("div",{style:t===!0?Cs.wrap:Gt.viewportWrap},Pt.default.createElement("div",{style:{...t===!0?Cs.viewport:{...Gt.viewport,height:e??360},display:"flex",alignItems:"center",justifyContent:"center",background:"#ffffff"}},Pt.default.createElement("img",{src:d,alt:i.format,style:{maxWidth:"100%",maxHeight:"100%"}})),Pt.default.createElement("div",{style:Gt.toolbar}))}return Pt.default.createElement("div",{style:t===!0?Cs.wrap:Gt.viewportWrap},Pt.default.createElement("svg",{viewBox:`${n.x} ${n.y} ${n.width} ${n.height}`,style:{...t===!0?Cs.viewport:{...Gt.viewport,height:e??360},cursor:r.current===null?"default":"grabbing",touchAction:"none"},onWheel:a,onPointerDown:l,onPointerMove:c,onPointerUp:h,onPointerLeave:h},Pt.default.createElement("g",{transform:"scale(1 -1)"},Cd(i))),Pt.default.createElement("div",{style:Gt.toolbar},Pt.default.createElement("button",{type:"button",style:Gt.button,onClick:o},"Fit")))}var Gt={viewportWrap:{position:"relative"},viewport:{width:"100%",background:"var(--dsh-cad-bg, linear-gradient(#f5f6f8, #e9ecf0))",display:"block"},toolbar:{position:"absolute",top:8,left:8,display:"flex",gap:6,zIndex:5},button:{border:"1px solid var(--dsw-alias-border-l2, #c4c9d0)",borderRadius:999,background:"var(--dsw-alias-bg-base, #fff)",color:"var(--dsw-alias-label-secondary, #374151)",fontSize:11,lineHeight:"16px",padding:"3px 10px",cursor:"pointer"},placeholder:{color:"var(--dsw-alias-label-tertiary, #6b7280)",fontSize:12,padding:"10px 12px"},error:{color:"var(--dsw-alias-state-error-primary, #b91c1c)",fontSize:12,padding:"10px 12px"}},Cs={wrap:{position:"relative",flex:"1 1 auto",minHeight:0,display:"flex",flexDirection:"column"},viewport:{flex:"1 1 auto",minHeight:0,width:"100%",background:"var(--dsh-cad-bg, linear-gradient(#f5f6f8, #e9ecf0))",display:"block"}};var Yx=360;function Ud({block:i}){let e=i.kind==="tool-call",t=e?void 0:Nd(i)??void 0,{scene:n,error:s}=Bi(t?.sceneUrl);return t!==void 0&&Id(t),t===void 0?xi.default.createElement("div",{style:Gt.placeholder},e?"Converting CAD\u2026":"CAD result"):xi.default.createElement("div",{style:Dr.card},xi.default.createElement("div",{style:Dr.header},xi.default.createElement("span",{style:Dr.title},t.title),xi.default.createElement("span",{style:Dr.stats},Zx(t))),xi.default.createElement(zi,{scene:n,error:s,height:Yx}),xi.default.createElement("div",{style:Dr.footer},n===null?t.sceneUrl===void 0?"headless composition: viewer unavailable, see summary above":"loading geometry\u2026":$x(n)))}function Zx(i){if(i.kind==="3d"){let e=[];return i.stats.meshes!==void 0&&e.push(`${i.stats.meshes} part${i.stats.meshes===1?"":"s"}`),i.stats.triangles!==void 0&&e.push(`${i.stats.triangles.toLocaleString()} triangles`),e.join(" \xB7 ")}return i.stats.entities!==void 0?`${i.stats.entities.toLocaleString()} entities`:""}function $x(i){if(i===null)return"";if(i.kind==="3d"){let s=i.bounds;return`size ${[s.max.x-s.min.x,s.max.y-s.min.y,s.max.z-s.min.z].map(o=>o.toFixed(2)).join(" \xD7 ")} ${i.units==="unitless"?"":i.units}`.trim()}let e=i.bounds,t=[(e.max.x-e.min.x).toFixed(2),(e.max.y-e.min.y).toFixed(2)],n=i.layers.length>0?` \xB7 ${i.layers.length} layers`:"";return`extent ${t.join(" \xD7 ")}${n}`}var Dr={card:{border:"1px solid var(--dsw-alias-border-l1, #d7dbe0)",borderRadius:10,margin:"6px 0",overflow:"hidden",display:"flex",flexDirection:"column",maxWidth:720,background:"var(--dsw-alias-bg-base, #fff)"},header:{display:"flex",alignItems:"baseline",justifyContent:"space-between",gap:12,padding:"8px 12px"},title:{fontWeight:600,fontSize:13},stats:{fontSize:12,color:"var(--dsw-alias-label-tertiary, #6b7280)"},footer:{borderTop:"1px solid var(--dsw-alias-border-l1, #e5e7eb)",color:"var(--dsw-alias-label-tertiary, #6b7280)",fontSize:11,padding:"5px 12px"}};var Z=Br(require("react"),1);function Jx(i){let e={part:void 0,assembly:void 0,drawing:void 0},t=i?.nodes??[];for(let n=t.length-1;n>=0;n--){let s=t[n];if(s===void 0)continue;let r=s.meta;if(s.kind==="tool-result"&&typeof r?.viewId=="string"&&(r.kind==="3d"||r.kind==="2d")){let o=r.doc??"part";e[o]===void 0&&(e[o]=r)}}return e}var Kx=()=>()=>{},Jc={part:void 0,assembly:void 0,drawing:void 0},Rs=Jc;function jx(i,e){let t=i?.(l=>l.current),n=(0,Z.useMemo)(()=>{if(!(e===void 0||t===void 0))return e.binding?.(t)?.session},[e,t]),s=(0,Z.useMemo)(()=>n===void 0?Kx:l=>n.subscribe(l),[n]),r=(0,Z.useMemo)(()=>n===void 0?()=>Jc:()=>{let l=Jx(n.getSnapshot());return Rs!==Jc&&Rs.part===l.part&&Rs.assembly===l.assembly&&Rs.drawing===l.drawing?Rs:(Rs=l,l)},[n]),o=(0,Z.useSyncExternalStore)(s,r),[,a]=(0,Z.useReducer)(l=>l+1,0);return(0,Z.useEffect)(()=>Dd(()=>{a()}),[]),e!==void 0?{part:o.part??null,assembly:o.assembly??Lr("assembly")?.meta??null,drawing:o.drawing??Lr("drawing")?.meta??null}:{part:Ld()?.meta??null,assembly:Lr("assembly")?.meta??null,drawing:Lr("drawing")?.meta??null}}var Fd={part:"Part Studio",assembly:"\u88C5\u914D\u4F53",drawing:"\u5DE5\u7A0B\u56FE"},Un=[{id:"part"}],Ps="part",Kc={tabs:Un,active:Ps},jc=new Set;function eh(){Kc={tabs:Un,active:Ps};for(let i of jc)i()}function kd(i){Un.some(e=>e.id===i)||(Un=[...Un,{id:i}]),Ps=i,eh()}function Qx(i){let e=Un.findIndex(t=>t.id===i);e!==-1&&(Un=Un.filter(t=>t.id!==i),Ps===i&&(Ps=(Un[e-1]??Un[e])?.id??null),eh())}function Od(i){Ps=i,eh()}function ev(){return(0,Z.useSyncExternalStore)(i=>(jc.add(i),()=>{jc.delete(i)}),()=>Kc,()=>Kc)}var Vd=null,Nr=Vd,Qc=new Set;function rl(i){Vd=i,Nr=i;for(let e of Qc)e()}function tv(){return(0,Z.useSyncExternalStore)(i=>(Qc.add(i),()=>{Qc.delete(i)}),()=>Nr,()=>Nr)}var qn="currentColor";function nv(){return Z.default.createElement("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none","aria-hidden":!0},Z.default.createElement("path",{d:"M8 1.5 14 5v6L8 14.5 2 11V5l6-3.5Z",stroke:qn,strokeWidth:"1.3",strokeLinejoin:"round"}),Z.default.createElement("path",{d:"M2 5l6 3.5L14 5M8 8.5v6",stroke:qn,strokeWidth:"1.3",strokeLinejoin:"round"}))}function Hd(){return Z.default.createElement("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none","aria-hidden":!0},Z.default.createElement("path",{d:"M5.5 1.5 10 4v4L5.5 10.5 1 8V4l4.5-2.5Z",stroke:qn,strokeWidth:"1.2",strokeLinejoin:"round",opacity:"0.75"}),Z.default.createElement("path",{d:"M10.5 5.5 15 8v4l-4.5 2.5L6 12V8l4.5-2.5Z",stroke:qn,strokeWidth:"1.2",strokeLinejoin:"round"}))}function Gd(){return Z.default.createElement("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none","aria-hidden":!0},Z.default.createElement("path",{d:"M3 1.5h7l3 3V14.5H3V1.5Z",stroke:qn,strokeWidth:"1.3",strokeLinejoin:"round"}),Z.default.createElement("path",{d:"M5.5 7h5M5.5 9.5h5M5.5 12h3",stroke:qn,strokeWidth:"1.2",strokeLinecap:"round"}))}function Wd({kind:i}){return i==="assembly"?Z.default.createElement(Hd,null):i==="drawing"?Z.default.createElement(Gd,null):Z.default.createElement(nv,null)}function iv(){return Z.default.createElement("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none","aria-hidden":!0},Z.default.createElement("path",{d:"M1.5 4.5A1 1 0 0 1 2.5 3.5h3.2l1.4 1.8h6.4a1 1 0 0 1 1 1v6.2a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1V4.5Z",stroke:qn,strokeWidth:"1.3",strokeLinejoin:"round"}))}function sv(){return Z.default.createElement("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none","aria-hidden":!0},Z.default.createElement("path",{d:"M4 1.5h5l3 3v10H4v-13Z",stroke:qn,strokeWidth:"1.2",strokeLinejoin:"round"}),Z.default.createElement("path",{d:"M9 1.5v3h3",stroke:qn,strokeWidth:"1.2",strokeLinejoin:"round"}))}function Xd(i){let e=i.closest("[data-shell-overlay]");if(!(e instanceof HTMLElement))return{frame:null,detailsCol:null,centerCol:null};let t=e.parentElement instanceof HTMLElement?e.parentElement:null,n=e.previousElementSibling instanceof HTMLElement?e.previousElementSibling:null,s=n?.previousElementSibling instanceof HTMLElement?n.previousElementSibling:null;return{frame:t,detailsCol:n,centerCol:s}}function rv({frame:i,detailsCol:e,centerCol:t}){if(e!==null&&t!==null)return{right:e.getBoundingClientRect().width,centerWidth:t.getBoundingClientRect().width};if(i!==null){let n=getComputedStyle(i).gridTemplateColumns.trim().split(/\s+/).map(Number.parseFloat),s=n[1],r=n[2];if(Number.isFinite(s)&&Number.isFinite(r))return{right:r,centerWidth:s}}return{right:0,centerWidth:0}}function ov(i){let[e,t]=(0,Z.useState)({right:0,centerWidth:0});return(0,Z.useLayoutEffect)(()=>{let n=i.current;if(n===null)return;let s=Xd(n),r=0,o=()=>{r=0;let c=rv(s);t(h=>Math.abs(h.right-c.right)<.5&&Math.abs(h.centerWidth-c.centerWidth)<.5?h:c)},a=()=>{r===0&&(r=requestAnimationFrame(o))},l=new ResizeObserver(a);for(let c of[s.frame,s.detailsCol,s.centerCol])c!==null&&l.observe(c);return window.addEventListener("resize",a),o(),()=>{l.disconnect(),window.removeEventListener("resize",a),r!==0&&cancelAnimationFrame(r)}},[i]),e}var Bd=280,zd=720,av=460,lv=20,cv=.42,hv=[{kind:"part",label:"\u96F6\u4EF6",hint:"Part Studio \xB7 \u4E09\u7EF4\u5EFA\u6A21"},{kind:"assembly",label:"\u88C5\u914D\u4F53",hint:"Assembly \xB7 \u5B9E\u4F8B\u88C5\u914D"},{kind:"drawing",label:"\u5DE5\u7A0B\u56FE",hint:"Drawing \xB7 \u56FE\u7EB8\u8F93\u51FA"}];function uv({onPick:i,onClose:e}){let t=(0,Z.useRef)(null);return(0,Z.useEffect)(()=>{let n=r=>{t.current!==null&&r.target instanceof Node&&t.current.contains(r.target)||e()},s=r=>{r.key==="Escape"&&e()};return document.addEventListener("pointerdown",n,!0),document.addEventListener("keydown",s),()=>{document.removeEventListener("pointerdown",n,!0),document.removeEventListener("keydown",s)}},[e]),Z.default.createElement("div",{ref:t,style:Oe.menu,role:"menu","aria-label":"\u65B0\u5EFA\u6587\u6863"},hv.map(n=>Z.default.createElement("button",{key:n.kind,type:"button",role:"menuitem",style:Oe.menuItem,onClick:()=>{i(n.kind)}},Z.default.createElement("span",{style:Oe.menuIcon},Z.default.createElement(Wd,{kind:n.kind})),Z.default.createElement("span",{style:Oe.menuLabel},n.label),Z.default.createElement("span",{style:Oe.menuHint},n.hint))))}function dv(i){let e=Date.now()-Date.parse(i);if(!Number.isFinite(e))return"";let t=Math.floor(e/6e4);if(t<1)return"\u521A\u521A";if(t<60)return`${t} \u5206\u949F\u524D`;let n=Math.floor(t/60);return n<24?`${n} \u5C0F\u65F6\u524D`:`${Math.floor(n/24)} \u5929\u524D`}function fv({activeDocId:i,onClose:e}){let t=(0,Z.useRef)(null),[n,s]=(0,Z.useState)(null),[r,o]=(0,Z.useState)(null),[a,l]=(0,Z.useState)(null),[c,h]=(0,Z.useState)(null);(0,Z.useEffect)(()=>{let f=y=>{t.current!==null&&y.target instanceof Node&&t.current.contains(y.target)||e()},g=y=>{y.key==="Escape"&&e()};return document.addEventListener("pointerdown",f,!0),document.addEventListener("keydown",g),()=>{document.removeEventListener("pointerdown",f,!0),document.removeEventListener("keydown",g)}},[e]);let d=(0,Z.useCallback)(()=>{s(null),o(null),fetch("/dsh-cad/docs").then(f=>f.ok?f.json():Promise.reject(new Error(`HTTP ${f.status}`))).then(f=>{s(f.docs??[])}).catch(f=>{o(f instanceof Error?f.message:String(f))})},[]);(0,Z.useEffect)(()=>{d()},[d]);let u=f=>{h(f),fetch(`/dsh-cad/docs/delete?id=${encodeURIComponent(f)}`,{method:"POST"}).then(()=>{l(null),Nr?.docId===f&&rl(null),d()}).catch(g=>{o(g instanceof Error?g.message:String(g))}).finally(()=>{h(null)})};return Z.default.createElement("div",{ref:t,style:Oe.menu,role:"menu","aria-label":"\u6587\u6863\u5217\u8868"},Z.default.createElement("div",{style:Oe.docsHeader},"\u5DE5\u4F5C\u533A\u6587\u6863"),r!==null?Z.default.createElement("div",{style:Oe.docsError},r):null,n===null&&r===null?Z.default.createElement("div",{style:Oe.docsHintRow},"\u52A0\u8F7D\u4E2D\u2026"):null,n!==null&&n.length===0?Z.default.createElement("div",{style:Oe.docsHintRow},"\u8FD8\u6CA1\u6709\u5EFA\u6A21\u6587\u6863 \u2014 \u5728\u5BF9\u8BDD\u4E2D\u5EFA\u6A21\u540E\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC"):null,n?.map(f=>{let g=f.id===i;return Z.default.createElement("div",{key:f.id,style:Oe.docRow},Z.default.createElement("button",{type:"button",role:"menuitem",style:Oe.docRowMain,onClick:()=>{f.sceneUrl!==void 0&&(rl({docId:f.id,name:f.name,sceneUrl:f.sceneUrl}),kd("part"),e())},title:f.sceneUrl===void 0?"\u7A7A\u6587\u6863\uFF08\u65E0\u573A\u666F\uFF09":"\u70B9\u51FB\u9884\u89C8"},Z.default.createElement("span",{style:Oe.menuIcon},Z.default.createElement(sv,null)),Z.default.createElement("span",{style:{...Oe.menuLabel,...g?{color:"var(--dsw-alias-label-primary,#4d6bfe)",fontWeight:600}:{}}},f.name,g?" \xB7 \u5F53\u524D":""),Z.default.createElement("span",{style:Oe.menuHint},f.bodies," \u4F53 \xB7 ",dv(f.updatedAt))),a===f.id?Z.default.createElement("span",{style:Oe.docConfirm},Z.default.createElement("button",{type:"button",style:Oe.docConfirmYes,disabled:c===f.id,onClick:()=>{u(f.id)}},"\u5220\u9664"),Z.default.createElement("button",{type:"button",style:Oe.docConfirmNo,onClick:()=>{l(null)}},"\u53D6\u6D88")):Z.default.createElement("button",{type:"button",style:Oe.docDelete,"aria-label":`\u5220\u9664\u6587\u6863 ${f.name}`,title:"\u5220\u9664\u6587\u6863",onClick:()=>{l(f.id)}},"\xD7"))}),Z.default.createElement("div",{style:Oe.docsFooter},"\u70B9\u51FB\u9884\u89C8 \xB7 \u5207\u6362\u5EFA\u6A21\u76EE\u6807\u8BF7\u5728\u5BF9\u8BDD\u4E2D\u8BF4\u300C\u6253\u5F00 xx \u6587\u6863\u300D"))}function qd(i){return function(t){let n=(0,Z.useRef)(null),[s,r]=(0,Z.useState)(!0),[o,a]=(0,Z.useState)(av),[l,c]=(0,Z.useState)(!1),[h,d]=(0,Z.useState)(!1),u=ov(n),f=jx(t.useSessions,i),{tabs:g,active:y}=ev(),m=(0,Z.useMemo)(()=>{let M=u.centerWidth>0?Math.max(Bd,u.centerWidth*cv):zd;return Math.round(Math.min(o,M))},[o,u.centerWidth]);pv(n,s,m);let p=(0,Z.useRef)(null),C=M=>{M.preventDefault(),p.current={startX:M.clientX,startWidth:m},M.currentTarget.setPointerCapture(M.pointerId)},T=M=>{let A=p.current;if(A===null)return;let v=A.startWidth+(A.startX-M.clientX);a(Math.round(Math.min(zd,Math.max(Bd,v))))},x=()=>{p.current=null},S=y===null?null:f[y];return Z.default.createElement("div",{ref:n,"data-cad-side-panel":"",style:Oe.root},s?Z.default.createElement("div",{style:{...Oe.panel,right:u.right,width:m}},Z.default.createElement("div",{style:Oe.resizer,onPointerDown:C,onPointerMove:T,onPointerUp:x,onPointerCancel:x,role:"separator","aria-orientation":"vertical","aria-label":"\u8C03\u6574 CAD \u9762\u677F\u5BBD\u5EA6"}),Z.default.createElement("div",{style:Oe.tabStripRow},Z.default.createElement("div",{style:Oe.tabStrip,role:"tablist","aria-label":"CAD \u6587\u6863"},g.map(M=>{let A=M.id===y;return Z.default.createElement("div",{key:M.id,role:"tab","aria-selected":A,tabIndex:0,style:{...Oe.tab,...A?Oe.tabActive:{}},onClick:()=>{Od(M.id)},onKeyDown:v=>{(v.key==="Enter"||v.key===" ")&&Od(M.id)}},Z.default.createElement("span",{style:A?Oe.tabIconActive:Oe.tabIcon},Z.default.createElement(Wd,{kind:M.id})),Z.default.createElement("span",{style:Oe.tabLabel},Fd[M.id]),Z.default.createElement("button",{type:"button",style:Oe.tabClose,"aria-label":`\u5173\u95ED ${Fd[M.id]}`,title:"\u5173\u95ED",onClick:v=>{v.stopPropagation(),Qx(M.id)}},"\xD7"))}),Z.default.createElement("button",{type:"button",style:Oe.addTab,"aria-label":"\u65B0\u5EFA\u6587\u6863",title:"\u65B0\u5EFA\uFF1A\u96F6\u4EF6 / \u88C5\u914D\u4F53 / \u5DE5\u7A0B\u56FE",onClick:()=>{d(!1),c(M=>!M)}},"+")),Z.default.createElement("button",{type:"button",style:Oe.fileButton,"aria-label":"\u6587\u6863\u5217\u8868","aria-expanded":h,title:"\u5DE5\u4F5C\u533A\u6587\u6863\u5217\u8868\uFF08\u9884\u89C8 / \u5220\u9664\uFF09",onClick:()=>{c(!1),d(M=>!M)}},Z.default.createElement(iv,null)),Z.default.createElement("span",{style:Oe.headerStats},S===null?"":xv(S)),Z.default.createElement("button",{type:"button",style:Oe.iconButton,onClick:()=>{r(!1)},"aria-label":"\u6536\u8D77 CAD \u9762\u677F",title:"\u6536\u8D77"},"\xBB")),l?Z.default.createElement(uv,{onPick:M=>{c(!1),kd(M)},onClose:()=>{c(!1)}}):null,h?Z.default.createElement(fv,{activeDocId:f.part?.viewId??null,onClose:()=>{d(!1)}}):null,Z.default.createElement("div",{style:Oe.body},y==="part"?Z.default.createElement(mv,{meta:f.part}):null,y==="assembly"?Z.default.createElement(gv,{meta:f.assembly}):null,y==="drawing"?Z.default.createElement(_v,{meta:f.drawing}):null)):Z.default.createElement("button",{type:"button",style:{...Oe.rail,right:u.right+10},onClick:()=>{r(!0)},"aria-label":"\u5C55\u5F00 CAD \u9762\u677F",title:"\u5C55\u5F00 CAD \u89C6\u56FE"},"\xAB\xA0\xA0CAD"))}}function pv(i,e,t){(0,Z.useLayoutEffect)(()=>{let n=i.current;if(n===null)return;let s=Xd(n).centerCol;if(s!==null)return s.style.paddingRight=e?`${lv+t}px`:"",()=>{s.style.paddingRight=""}},[i,e,t])}function mv({meta:i}){let e=tv(),t=Bi(i?.sceneUrl),n=Bi(e?.sceneUrl);return(0,Z.useEffect)(()=>{i!==null&&Nr!==null&&rl(null)},[i?.sceneUrl]),e!==null?Z.default.createElement("div",{style:Oe.sceneFill},Z.default.createElement("div",{style:Oe.previewBar},Z.default.createElement("span",{style:Oe.previewLabel},"\u9884\u89C8: ",e.name),Z.default.createElement("button",{type:"button",style:Oe.previewBack,onClick:()=>{rl(null)}},"\u8FD4\u56DE\u8DDF\u8E2A")),Z.default.createElement(zi,{scene:n.scene,error:n.error,fill:!0})):i===null?Z.default.createElement(vv,null):Z.default.createElement("div",{key:i.sceneUrl??i.viewId,style:Oe.sceneFill},Z.default.createElement(zi,{scene:t.scene,error:t.error,fill:!0}))}function gv({meta:i}){let{scene:e,error:t}=Bi(i?.sceneUrl);return i===null?Z.default.createElement(Yd,{icon:Z.default.createElement(Hd,null),title:"\u88C5\u914D\u4F53\u4E3A\u7A7A",hint:"\u5728\u5BF9\u8BDD\u4E2D\u8BF4\u300C\u628A b1 \u548C b2 \u88C5\u914D\u8D77\u6765\uFF0Cb2 \u653E\u5230 (60, 0, 0)\u300D\uFF0C\u6216\u4F7F\u7528 cad_assembly_insert \u5DE5\u5177\u63D2\u5165\u5B9E\u4F8B"}):Z.default.createElement("div",{key:i.sceneUrl??i.viewId,style:Oe.sceneFill},Z.default.createElement(zi,{scene:e,error:t,fill:!0}))}function _v({meta:i}){let{scene:e,error:t}=Bi(i?.sceneUrl);return i===null?Z.default.createElement(Yd,{icon:Z.default.createElement(Gd,null),title:"\u8FD8\u6CA1\u6709\u5DE5\u7A0B\u56FE",hint:"\u5728\u5BF9\u8BDD\u4E2D\u8BF4\u300C\u7ED9 b1 \u51FA\u4E00\u5F20 A3 \u5DE5\u7A0B\u56FE\u300D\uFF0C\u6216\u4F7F\u7528 cad_drawing \u5DE5\u5177\u751F\u6210\u4E09\u89C6\u56FE + \u8F74\u6D4B\u56FE"}):Z.default.createElement("div",{key:i.sceneUrl??i.viewId,style:{...Oe.sceneFill,background:"#fff"}},Z.default.createElement(zi,{scene:e,error:t,fill:!0}))}function Yd({icon:i,title:e,hint:t}){return Z.default.createElement("div",{style:Oe.emptyState},Z.default.createElement("div",{style:Oe.emptyIcon},i),Z.default.createElement("div",{style:Oe.emptyTitle},e),Z.default.createElement("div",{style:Oe.emptyHint},t))}function xv(i){let e=[];if(i.kind==="3d"){let t=i.doc==="assembly"?" \u5B9E\u4F8B":" \u4F53";i.stats.meshes!==void 0&&e.push(`${i.stats.meshes}${t}`),i.stats.triangles!==void 0&&e.push(`${i.stats.triangles.toLocaleString()} \u4E09\u89D2\u9762`)}else i.stats.entities!==void 0&&e.push(`${i.stats.entities.toLocaleString()} \u5B9E\u4F53`);return e.join(" \xB7 ")}function vv(){let i=(0,Z.useRef)(null);return(0,Z.useEffect)(()=>{let e=i.current;if(e===null)return;let t=Ed(e,{part:null});return()=>{t.dispose()}},[]),Z.default.createElement("div",{style:Oe.demoRoot},Z.default.createElement("div",{style:Oe.demoCaption},"Part Studio"),Z.default.createElement("div",{style:Oe.demoViewport},Z.default.createElement("div",{ref:i,style:{width:"100%",height:"100%"}})),Z.default.createElement("div",{style:Oe.demoHint},"\u5EFA\u6A21\u533A\u4E3A\u7A7A \xB7 \u5728\u5BF9\u8BDD\u4E2D\u63CF\u8FF0\u96F6\u4EF6\uFF08\u5982\u300C\u5EFA\u4E00\u4E2A 100\xD760\xD710 \u7684\u677F\uFF0C\u4E2D\u95F4\u6253 \u230020 \u5B54\u300D\uFF09\uFF0C\u5EFA\u6A21\u540E\u6B64\u9875\u7B7E\u5B9E\u65F6\u8DDF\u8E2A\u6700\u65B0\u6A21\u578B"))}var Oe={root:{position:"absolute",inset:0,pointerEvents:"none"},panel:{position:"absolute",top:0,bottom:0,pointerEvents:"auto",display:"flex",flexDirection:"column",minWidth:0,background:"var(--dsw-alias-bg-base, #fff)",borderLeft:"1px solid var(--dsw-alias-border-l2, #c4c9d0)",boxShadow:"-16px 0 28px -20px rgba(16,24,40,0.18)"},resizer:{position:"absolute",top:0,bottom:0,left:0,width:7,marginLeft:-3,cursor:"col-resize",zIndex:6,touchAction:"none"},tabStripRow:{display:"flex",alignItems:"center",gap:6,padding:"6px 8px 6px 12px",flex:"none",borderBottom:"1px solid var(--dsw-alias-border-l1, #eceff3)",background:"var(--dsw-alias-bg-subtle, #f7f8fa)",position:"relative"},tabStrip:{display:"flex",alignItems:"center",gap:4,flex:"1 1 auto",minWidth:0,overflow:"hidden"},tab:{display:"flex",alignItems:"center",gap:5,padding:"4px 6px 4px 9px",borderRadius:7,border:"1px solid transparent",color:"var(--dsw-alias-label-tertiary, #6b7280)",cursor:"pointer",userSelect:"none",flex:"none",maxWidth:150,lineHeight:"18px"},tabActive:{background:"var(--dsw-alias-bg-base, #fff)",borderColor:"var(--dsw-alias-border-l1, #e2e5ea)",color:"var(--dsw-alias-label-primary, #1f2937)",boxShadow:"0 1px 2px rgba(16,24,40,0.06)"},tabIcon:{display:"flex",alignItems:"center",opacity:.75,flex:"none"},tabIconActive:{display:"flex",alignItems:"center",color:"var(--dsw-alias-label-primary, #4d6bfe)",flex:"none"},tabLabel:{fontSize:12,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},tabClose:{border:"none",background:"transparent",color:"var(--dsw-alias-label-tertiary, #9ca3af)",fontSize:13,lineHeight:"16px",width:16,height:16,borderRadius:4,cursor:"pointer",padding:0,flex:"none",textAlign:"center"},addTab:{flex:"none",width:24,height:24,marginLeft:2,display:"flex",alignItems:"center",justifyContent:"center",border:"1px solid var(--dsw-alias-border-l1, #e2e5ea)",borderRadius:7,background:"var(--dsw-alias-bg-base, #fff)",color:"var(--dsw-alias-label-secondary, #374151)",fontSize:15,lineHeight:"18px",cursor:"pointer",padding:0},menu:{position:"absolute",top:40,left:12,zIndex:20,minWidth:230,padding:5,background:"var(--dsw-alias-bg-base, #fff)",border:"1px solid var(--dsw-alias-border-l1, #e2e5ea)",borderRadius:10,boxShadow:"0 12px 32px -12px rgba(16,24,40,0.24)",display:"flex",flexDirection:"column",gap:1},menuItem:{display:"flex",alignItems:"center",gap:8,padding:"7px 9px",border:"none",borderRadius:7,background:"transparent",color:"var(--dsw-alias-label-primary, #1f2937)",cursor:"pointer",textAlign:"left",font:"inherit",fontSize:12.5},menuIcon:{display:"flex",alignItems:"center",color:"var(--dsw-alias-label-secondary, #374151)",flex:"none"},menuLabel:{fontWeight:600,flex:"none"},menuHint:{color:"var(--dsw-alias-label-tertiary, #9ca3af)",fontSize:11,marginLeft:"auto",whiteSpace:"nowrap"},fileButton:{flex:"none",display:"flex",alignItems:"center",justifyContent:"center",width:24,height:24,marginLeft:4,border:"1px solid var(--dsw-alias-border-l2, #c4c9d0)",borderRadius:6,background:"transparent",color:"var(--dsw-alias-label-secondary, #374151)",cursor:"pointer",padding:0},docsHeader:{fontSize:11,fontWeight:600,color:"var(--dsw-alias-label-tertiary, #6b7280)",padding:"5px 9px 3px",letterSpacing:"0.02em"},docsHintRow:{fontSize:12,color:"var(--dsw-alias-label-tertiary, #6b7280)",padding:"8px 9px"},docsError:{fontSize:12,color:"var(--dsw-alias-state-error-primary, #d92d20)",padding:"4px 9px"},docsFooter:{fontSize:11,color:"var(--dsw-alias-label-tertiary, #9ca3af)",padding:"5px 9px 3px",borderTop:"1px solid var(--dsw-alias-border-l1, #e2e5ea)",marginTop:3},docRow:{display:"flex",alignItems:"center",gap:2},docRowMain:{display:"flex",alignItems:"center",gap:8,flex:"1 1 auto",minWidth:0,padding:"7px 9px",border:"none",borderRadius:7,background:"transparent",color:"var(--dsw-alias-label-primary, #1f2937)",cursor:"pointer",textAlign:"left",font:"inherit",fontSize:12.5},docDelete:{flex:"none",width:22,height:22,border:"none",borderRadius:6,background:"transparent",color:"var(--dsw-alias-label-tertiary, #9ca3af)",fontSize:14,lineHeight:"20px",cursor:"pointer",padding:0},docConfirm:{display:"flex",alignItems:"center",gap:4,flex:"none",padding:"0 4px 0 0"},docConfirmYes:{border:"none",borderRadius:6,background:"var(--dsw-alias-state-error-primary, #d92d20)",color:"#fff",fontSize:11,padding:"3px 8px",cursor:"pointer"},docConfirmNo:{border:"1px solid var(--dsw-alias-border-l2, #c4c9d0)",borderRadius:6,background:"transparent",color:"var(--dsw-alias-label-secondary, #374151)",fontSize:11,padding:"3px 8px",cursor:"pointer"},previewBar:{flex:"none",display:"flex",alignItems:"center",gap:8,padding:"5px 10px",borderBottom:"1px solid var(--dsw-alias-border-l1, #e2e5ea)",background:"var(--dsw-alias-bg-subtle, #f5f6f8)"},previewLabel:{flex:"1 1 auto",minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontSize:12,color:"var(--dsw-alias-label-primary, #1f2937)",fontWeight:600},previewBack:{flex:"none",border:"1px solid var(--dsw-alias-border-l2, #c4c9d0)",borderRadius:6,background:"transparent",color:"var(--dsw-alias-label-secondary, #374151)",fontSize:11,padding:"2px 8px",cursor:"pointer"},headerStats:{flex:"none",fontSize:11,color:"var(--dsw-alias-label-tertiary, #6b7280)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"30%"},iconButton:{flex:"none",border:"none",background:"transparent",color:"var(--dsw-alias-label-tertiary, #6b7280)",fontSize:15,lineHeight:"20px",width:26,height:26,borderRadius:6,cursor:"pointer",padding:0},body:{flex:"1 1 auto",minHeight:0,display:"flex",flexDirection:"column"},sceneFill:{flex:"1 1 auto",minHeight:0,display:"flex",flexDirection:"column"},emptyState:{flex:"1 1 auto",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:8,padding:24,color:"var(--dsw-alias-label-tertiary, #9ca3af)",textAlign:"center"},emptyIcon:{display:"flex",color:"var(--dsw-alias-label-tertiary, #c0c6cf)",transform:"scale(2)",marginBottom:6},emptyTitle:{fontSize:13,fontWeight:600,color:"var(--dsw-alias-label-secondary, #6b7280)"},emptyHint:{fontSize:11.5,lineHeight:"18px",maxWidth:300},demoRoot:{flex:"1 1 auto",minHeight:0,display:"flex",flexDirection:"column",gap:6,padding:"10px 10px 12px"},demoCaption:{color:"var(--dsw-alias-label-tertiary, #6b7280)",fontSize:11,textTransform:"uppercase",letterSpacing:"0.05em",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",flex:"none"},demoViewport:{position:"relative",flex:"1 1 auto",minHeight:0,borderRadius:10,overflow:"hidden",background:"var(--dsh-cad-bg, linear-gradient(#f5f6f8, #e9ecf0))"},demoHint:{flex:"none",color:"var(--dsw-alias-label-tertiary, #9ca3af)",fontSize:11,lineHeight:"17px",textAlign:"center"},rail:{position:"absolute",top:72,pointerEvents:"auto",writingMode:"vertical-rl",padding:"12px 6px",borderRadius:10,border:"1px solid var(--dsw-alias-border-l2, #c4c9d0)",background:"var(--dsw-alias-bg-base, #fff)",color:"var(--dsw-alias-label-secondary, #374151)",fontSize:11,letterSpacing:"0.08em",cursor:"pointer",boxShadow:"4px 4px 12px -6px rgba(16,24,40,0.2)"}};var yv=["slots"],bv=["cad_view","cad_create_prim","cad_extrude_profile","cad_revolve","cad_chamfer","cad_pattern","cad_loft","cad_sweep","cad_boolean","cad_fillet","cad_transform","cad_export","cad_delete","cad_volume","cad_freecad","cad_image_profile","cad_drawing","cad_assembly_insert","cad_assembly_move","cad_assembly_remove","cad_doc_open","cad_constraint","cad_solve","cad_motion"];function Mv(i){i.slots.onEntryError?.((n,s,r,o)=>{try{document.documentElement.setAttribute("data-cad-slot-crash",`${n}:${String(r instanceof Error?r.message:r).slice(0,160)}:abd=${String(o.abdicated)}`)}catch{}});for(let n of bv)i.slots.inject("tool.call.toolview",()=>i.slots.register({name:"tool.call.toolview",key:n,locale:"conversation"},Ud));let t=i.get?.("sessions");i.slots.inject("shell.overlay",()=>i.slots.register({name:"shell.overlay",id:"cad-side-panel",order:100,label:"CAD"},qd(t)))}
|
|
4113
|
+
}`,Oc=class{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t){if(this.texture===null){let n=new er(e.texture);(e.depthNear!==t.depthNear||e.depthFar!==t.depthFar)&&(this.depthNear=e.depthNear,this.depthFar=e.depthFar),this.texture=n}}getMesh(e){if(this.texture!==null&&this.mesh===null){let t=e.cameras[0].viewport,n=new tn({vertexShader:hx,fragmentShader:ux,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new Tt(new ri(20,20),n)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}},Bc=class extends mn{constructor(e,t){super();let n=this,s=null,r=1,o=null,a="local-floor",l=1,c=null,h=null,d=null,u=null,f=null,g=null,y=typeof XRWebGLBinding<"u",m=new Oc,p={},C=t.getContextAttributes(),T=null,x=null,S=[],M=[],A=new te,v=null,w=new kt;w.viewport=new gt;let I=new kt;I.viewport=new gt;let P=[w,I],O=new ra,q=null,Y=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(J){let ce=S[J];return ce===void 0&&(ce=new us,S[J]=ce),ce.getTargetRaySpace()},this.getControllerGrip=function(J){let ce=S[J];return ce===void 0&&(ce=new us,S[J]=ce),ce.getGripSpace()},this.getHand=function(J){let ce=S[J];return ce===void 0&&(ce=new us,S[J]=ce),ce.getHandSpace()};function U(J){let ce=M.indexOf(J.inputSource);if(ce===-1)return;let re=S[ce];re!==void 0&&(re.update(J.inputSource,J.frame,c||o),re.dispatchEvent({type:J.type,data:J.inputSource}))}function G(){s.removeEventListener("select",U),s.removeEventListener("selectstart",U),s.removeEventListener("selectend",U),s.removeEventListener("squeeze",U),s.removeEventListener("squeezestart",U),s.removeEventListener("squeezeend",U),s.removeEventListener("end",G),s.removeEventListener("inputsourceschange",H);for(let J=0;J<S.length;J++){let ce=M[J];ce!==null&&(M[J]=null,S[J].disconnect(ce))}q=null,Y=null,m.reset();for(let J in p)delete p[J];e.setRenderTarget(T),f=null,u=null,d=null,s=null,x=null,et.stop(),n.isPresenting=!1,e.setPixelRatio(v),e.setSize(A.width,A.height,!1),n.dispatchEvent({type:"sessionend"})}this.setFramebufferScaleFactor=function(J){r=J,n.isPresenting===!0&&De("WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(J){a=J,n.isPresenting===!0&&De("WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return c||o},this.setReferenceSpace=function(J){c=J},this.getBaseLayer=function(){return u!==null?u:f},this.getBinding=function(){return d===null&&y&&(d=new XRWebGLBinding(s,t)),d},this.getFrame=function(){return g},this.getSession=function(){return s},this.setSession=async function(J){if(s=J,s!==null){if(T=e.getRenderTarget(),s.addEventListener("select",U),s.addEventListener("selectstart",U),s.addEventListener("selectend",U),s.addEventListener("squeeze",U),s.addEventListener("squeezestart",U),s.addEventListener("squeezeend",U),s.addEventListener("end",G),s.addEventListener("inputsourceschange",H),C.xrCompatible!==!0&&await t.makeXRCompatible(),v=e.getPixelRatio(),e.getSize(A),y&&"createProjectionLayer"in XRWebGLBinding.prototype){let re=null,Ie=null,ke=null;C.depth&&(ke=C.stencil?t.DEPTH24_STENCIL8:t.DEPTH_COMPONENT24,re=C.stencil?mi:Rn,Ie=C.stencil?Ms:yn);let Ue={colorFormat:t.RGBA8,depthFormat:ke,scaleFactor:r};d=this.getBinding(),u=d.createProjectionLayer(Ue),s.updateRenderState({layers:[u]}),e.setPixelRatio(1),e.setSize(u.textureWidth,u.textureHeight,!1),x=new Qt(u.textureWidth,u.textureHeight,{format:cn,type:Yt,depthTexture:new Wn(u.textureWidth,u.textureHeight,Ie,void 0,void 0,void 0,void 0,void 0,void 0,re),stencilBuffer:C.stencil,colorSpace:e.outputColorSpace,samples:C.antialias?4:0,resolveDepthBuffer:u.ignoreDepthValues===!1,resolveStencilBuffer:u.ignoreDepthValues===!1})}else{let re={antialias:C.antialias,alpha:!0,depth:C.depth,stencil:C.stencil,framebufferScaleFactor:r};f=new XRWebGLLayer(s,t,re),s.updateRenderState({baseLayer:f}),e.setPixelRatio(1),e.setSize(f.framebufferWidth,f.framebufferHeight,!1),x=new Qt(f.framebufferWidth,f.framebufferHeight,{format:cn,type:Yt,colorSpace:e.outputColorSpace,stencilBuffer:C.stencil,resolveDepthBuffer:f.ignoreDepthValues===!1,resolveStencilBuffer:f.ignoreDepthValues===!1})}x.isXRRenderTarget=!0,this.setFoveation(l),c=null,o=await s.requestReferenceSpace(a),et.setContext(s),et.start(),n.isPresenting=!0,n.dispatchEvent({type:"sessionstart"})}},this.getEnvironmentBlendMode=function(){if(s!==null)return s.environmentBlendMode},this.getDepthTexture=function(){return m.getDepthTexture()};function H(J){for(let ce=0;ce<J.removed.length;ce++){let re=J.removed[ce],Ie=M.indexOf(re);Ie>=0&&(M[Ie]=null,S[Ie].disconnect(re))}for(let ce=0;ce<J.added.length;ce++){let re=J.added[ce],Ie=M.indexOf(re);if(Ie===-1){for(let Ue=0;Ue<S.length;Ue++)if(Ue>=M.length){M.push(re),Ie=Ue;break}else if(M[Ue]===null){M[Ue]=re,Ie=Ue;break}if(Ie===-1)break}let ke=S[Ie];ke&&ke.connect(re)}}let j=new R,se=new R;function ue(J,ce,re){j.setFromMatrixPosition(ce.matrixWorld),se.setFromMatrixPosition(re.matrixWorld);let Ie=j.distanceTo(se),ke=ce.projectionMatrix.elements,Ue=re.projectionMatrix.elements,nt=ke[14]/(ke[10]-1),He=ke[14]/(ke[10]+1),Q=(ke[9]+1)/ke[5],ie=(ke[9]-1)/ke[5],ne=(ke[8]-1)/ke[0],xe=(Ue[8]+1)/Ue[0],me=nt*ne,Be=nt*xe,Ce=Ie/(-ne+xe),Ve=Ce*-ne;if(ce.matrixWorld.decompose(J.position,J.quaternion,J.scale),J.translateX(Ve),J.translateZ(Ce),J.matrixWorld.compose(J.position,J.quaternion,J.scale),J.matrixWorldInverse.copy(J.matrixWorld).invert(),ke[10]===-1)J.projectionMatrix.copy(ce.projectionMatrix),J.projectionMatrixInverse.copy(ce.projectionMatrixInverse);else{let We=nt+Ce,L=He+Ce,ot=me-Ve,je=Be+(Ie-Ve),E=Q*He/L*We,_=ie*He/L*We;J.projectionMatrix.makePerspective(ot,je,E,_,We,L),J.projectionMatrixInverse.copy(J.projectionMatrix).invert()}}function le(J,ce){ce===null?J.matrixWorld.copy(J.matrix):J.matrixWorld.multiplyMatrices(ce.matrixWorld,J.matrix),J.matrixWorldInverse.copy(J.matrixWorld).invert()}this.updateCamera=function(J){if(s===null)return;let ce=J.near,re=J.far;m.texture!==null&&(m.depthNear>0&&(ce=m.depthNear),m.depthFar>0&&(re=m.depthFar)),O.near=I.near=w.near=ce,O.far=I.far=w.far=re,(q!==O.near||Y!==O.far)&&(s.updateRenderState({depthNear:O.near,depthFar:O.far}),q=O.near,Y=O.far),O.layers.mask=J.layers.mask|6,w.layers.mask=O.layers.mask&-5,I.layers.mask=O.layers.mask&-3;let Ie=J.parent,ke=O.cameras;le(O,Ie);for(let Ue=0;Ue<ke.length;Ue++)le(ke[Ue],Ie);ke.length===2?ue(O,w,I):O.projectionMatrix.copy(w.projectionMatrix),Me(J,O,Ie)};function Me(J,ce,re){re===null?J.matrix.copy(ce.matrixWorld):(J.matrix.copy(re.matrixWorld),J.matrix.invert(),J.matrix.multiply(ce.matrixWorld)),J.matrix.decompose(J.position,J.quaternion,J.scale),J.updateMatrixWorld(!0),J.projectionMatrix.copy(ce.projectionMatrix),J.projectionMatrixInverse.copy(ce.projectionMatrixInverse),J.isPerspectiveCamera&&(J.fov=ls*2*Math.atan(1/J.projectionMatrix.elements[5]),J.zoom=1)}this.getCamera=function(){return O},this.getFoveation=function(){if(!(u===null&&f===null))return l},this.setFoveation=function(J){l=J,u!==null&&(u.fixedFoveation=J),f!==null&&f.fixedFoveation!==void 0&&(f.fixedFoveation=J)},this.hasDepthSensing=function(){return m.texture!==null},this.getDepthSensingMesh=function(){return m.getMesh(O)},this.getCameraTexture=function(J){return p[J]};let Je=null;function ct(J,ce){if(h=ce.getViewerPose(c||o),g=ce,h!==null){let re=h.views;f!==null&&(e.setRenderTargetFramebuffer(x,f.framebuffer),e.setRenderTarget(x));let Ie=!1;re.length!==O.cameras.length&&(O.cameras.length=0,Ie=!0);for(let He=0;He<re.length;He++){let Q=re[He],ie=null;if(f!==null)ie=f.getViewport(Q);else{let xe=d.getViewSubImage(u,Q);ie=xe.viewport,He===0&&(e.setRenderTargetTextures(x,xe.colorTexture,xe.depthStencilTexture),e.setRenderTarget(x))}let ne=P[He];ne===void 0&&(ne=new kt,ne.layers.enable(He),ne.viewport=new gt,P[He]=ne),ne.matrix.fromArray(Q.transform.matrix),ne.matrix.decompose(ne.position,ne.quaternion,ne.scale),ne.projectionMatrix.fromArray(Q.projectionMatrix),ne.projectionMatrixInverse.copy(ne.projectionMatrix).invert(),ne.viewport.set(ie.x,ie.y,ie.width,ie.height),He===0&&(O.matrix.copy(ne.matrix),O.matrix.decompose(O.position,O.quaternion,O.scale)),Ie===!0&&O.cameras.push(ne)}let ke=s.enabledFeatures;if(ke&&ke.includes("depth-sensing")&&s.depthUsage=="gpu-optimized"&&y){d=n.getBinding();let He=d.getDepthInformation(re[0]);He&&He.isValid&&He.texture&&m.init(He,s.renderState)}if(ke&&ke.includes("camera-access")&&y){e.state.unbindTexture(),d=n.getBinding();for(let He=0;He<re.length;He++){let Q=re[He].camera;if(Q){let ie=p[Q];ie||(ie=new er,p[Q]=ie);let ne=d.getCameraImage(Q);ie.sourceTexture=ne}}}}for(let re=0;re<S.length;re++){let Ie=M[re],ke=S[re];Ie!==null&&ke!==void 0&&ke.update(Ie,ce,c||o)}Je&&Je(J,ce),ce.detectedPlanes&&n.dispatchEvent({type:"planesdetected",data:ce}),g=null}let et=new sd;et.setAnimationLoop(ct),this.setAnimationLoop=function(J){Je=J},this.dispose=function(){}}},dx=new rt,hd=new Ge;hd.set(-1,0,0,0,1,0,0,0,1);function fx(i,e){function t(m,p){m.matrixAutoUpdate===!0&&m.updateMatrix(),p.value.copy(m.matrix)}function n(m,p){p.color.getRGB(m.fogColor.value,yc(i)),p.isFog?(m.fogNear.value=p.near,m.fogFar.value=p.far):p.isFogExp2&&(m.fogDensity.value=p.density)}function s(m,p,C,T,x){p.isNodeMaterial?p.uniformsNeedUpdate=!1:p.isMeshBasicMaterial?r(m,p):p.isMeshLambertMaterial?(r(m,p),p.envMap&&(m.envMapIntensity.value=p.envMapIntensity)):p.isMeshToonMaterial?(r(m,p),d(m,p)):p.isMeshPhongMaterial?(r(m,p),h(m,p),p.envMap&&(m.envMapIntensity.value=p.envMapIntensity)):p.isMeshStandardMaterial?(r(m,p),u(m,p),p.isMeshPhysicalMaterial&&f(m,p,x)):p.isMeshMatcapMaterial?(r(m,p),g(m,p)):p.isMeshDepthMaterial?r(m,p):p.isMeshDistanceMaterial?(r(m,p),y(m,p)):p.isMeshNormalMaterial?r(m,p):p.isLineBasicMaterial?(o(m,p),p.isLineDashedMaterial&&a(m,p)):p.isPointsMaterial?l(m,p,C,T):p.isSpriteMaterial?c(m,p):p.isShadowMaterial?(m.color.value.copy(p.color),m.opacity.value=p.opacity):p.isShaderMaterial&&(p.uniformsNeedUpdate=!1)}function r(m,p){m.opacity.value=p.opacity,p.color&&m.diffuse.value.copy(p.color),p.emissive&&m.emissive.value.copy(p.emissive).multiplyScalar(p.emissiveIntensity),p.map&&(m.map.value=p.map,t(p.map,m.mapTransform)),p.alphaMap&&(m.alphaMap.value=p.alphaMap,t(p.alphaMap,m.alphaMapTransform)),p.bumpMap&&(m.bumpMap.value=p.bumpMap,t(p.bumpMap,m.bumpMapTransform),m.bumpScale.value=p.bumpScale,p.side===qt&&(m.bumpScale.value*=-1)),p.normalMap&&(m.normalMap.value=p.normalMap,t(p.normalMap,m.normalMapTransform),m.normalScale.value.copy(p.normalScale),p.side===qt&&m.normalScale.value.negate()),p.displacementMap&&(m.displacementMap.value=p.displacementMap,t(p.displacementMap,m.displacementMapTransform),m.displacementScale.value=p.displacementScale,m.displacementBias.value=p.displacementBias),p.emissiveMap&&(m.emissiveMap.value=p.emissiveMap,t(p.emissiveMap,m.emissiveMapTransform)),p.specularMap&&(m.specularMap.value=p.specularMap,t(p.specularMap,m.specularMapTransform)),p.alphaTest>0&&(m.alphaTest.value=p.alphaTest);let C=e.get(p),T=C.envMap,x=C.envMapRotation;T&&(m.envMap.value=T,m.envMapRotation.value.setFromMatrix4(dx.makeRotationFromEuler(x)).transpose(),T.isCubeTexture&&T.isRenderTargetTexture===!1&&m.envMapRotation.value.premultiply(hd),m.reflectivity.value=p.reflectivity,m.ior.value=p.ior,m.refractionRatio.value=p.refractionRatio),p.lightMap&&(m.lightMap.value=p.lightMap,m.lightMapIntensity.value=p.lightMapIntensity,t(p.lightMap,m.lightMapTransform)),p.aoMap&&(m.aoMap.value=p.aoMap,m.aoMapIntensity.value=p.aoMapIntensity,t(p.aoMap,m.aoMapTransform))}function o(m,p){m.diffuse.value.copy(p.color),m.opacity.value=p.opacity,p.map&&(m.map.value=p.map,t(p.map,m.mapTransform))}function a(m,p){m.dashSize.value=p.dashSize,m.totalSize.value=p.dashSize+p.gapSize,m.scale.value=p.scale}function l(m,p,C,T){m.diffuse.value.copy(p.color),m.opacity.value=p.opacity,m.size.value=p.size*C,m.scale.value=T*.5,p.map&&(m.map.value=p.map,t(p.map,m.uvTransform)),p.alphaMap&&(m.alphaMap.value=p.alphaMap,t(p.alphaMap,m.alphaMapTransform)),p.alphaTest>0&&(m.alphaTest.value=p.alphaTest)}function c(m,p){m.diffuse.value.copy(p.color),m.opacity.value=p.opacity,m.rotation.value=p.rotation,p.map&&(m.map.value=p.map,t(p.map,m.mapTransform)),p.alphaMap&&(m.alphaMap.value=p.alphaMap,t(p.alphaMap,m.alphaMapTransform)),p.alphaTest>0&&(m.alphaTest.value=p.alphaTest)}function h(m,p){m.specular.value.copy(p.specular),m.shininess.value=Math.max(p.shininess,1e-4)}function d(m,p){p.gradientMap&&(m.gradientMap.value=p.gradientMap)}function u(m,p){m.metalness.value=p.metalness,p.metalnessMap&&(m.metalnessMap.value=p.metalnessMap,t(p.metalnessMap,m.metalnessMapTransform)),m.roughness.value=p.roughness,p.roughnessMap&&(m.roughnessMap.value=p.roughnessMap,t(p.roughnessMap,m.roughnessMapTransform)),p.envMap&&(m.envMapIntensity.value=p.envMapIntensity)}function f(m,p,C){m.ior.value=p.ior,p.sheen>0&&(m.sheenColor.value.copy(p.sheenColor).multiplyScalar(p.sheen),m.sheenRoughness.value=p.sheenRoughness,p.sheenColorMap&&(m.sheenColorMap.value=p.sheenColorMap,t(p.sheenColorMap,m.sheenColorMapTransform)),p.sheenRoughnessMap&&(m.sheenRoughnessMap.value=p.sheenRoughnessMap,t(p.sheenRoughnessMap,m.sheenRoughnessMapTransform))),p.clearcoat>0&&(m.clearcoat.value=p.clearcoat,m.clearcoatRoughness.value=p.clearcoatRoughness,p.clearcoatMap&&(m.clearcoatMap.value=p.clearcoatMap,t(p.clearcoatMap,m.clearcoatMapTransform)),p.clearcoatRoughnessMap&&(m.clearcoatRoughnessMap.value=p.clearcoatRoughnessMap,t(p.clearcoatRoughnessMap,m.clearcoatRoughnessMapTransform)),p.clearcoatNormalMap&&(m.clearcoatNormalMap.value=p.clearcoatNormalMap,t(p.clearcoatNormalMap,m.clearcoatNormalMapTransform),m.clearcoatNormalScale.value.copy(p.clearcoatNormalScale),p.side===qt&&m.clearcoatNormalScale.value.negate())),p.dispersion>0&&(m.dispersion.value=p.dispersion),p.iridescence>0&&(m.iridescence.value=p.iridescence,m.iridescenceIOR.value=p.iridescenceIOR,m.iridescenceThicknessMinimum.value=p.iridescenceThicknessRange[0],m.iridescenceThicknessMaximum.value=p.iridescenceThicknessRange[1],p.iridescenceMap&&(m.iridescenceMap.value=p.iridescenceMap,t(p.iridescenceMap,m.iridescenceMapTransform)),p.iridescenceThicknessMap&&(m.iridescenceThicknessMap.value=p.iridescenceThicknessMap,t(p.iridescenceThicknessMap,m.iridescenceThicknessMapTransform))),p.transmission>0&&(m.transmission.value=p.transmission,m.transmissionSamplerMap.value=C.texture,m.transmissionSamplerSize.value.set(C.width,C.height),p.transmissionMap&&(m.transmissionMap.value=p.transmissionMap,t(p.transmissionMap,m.transmissionMapTransform)),m.thickness.value=p.thickness,p.thicknessMap&&(m.thicknessMap.value=p.thicknessMap,t(p.thicknessMap,m.thicknessMapTransform)),m.attenuationDistance.value=p.attenuationDistance,m.attenuationColor.value.copy(p.attenuationColor)),p.anisotropy>0&&(m.anisotropyVector.value.set(p.anisotropy*Math.cos(p.anisotropyRotation),p.anisotropy*Math.sin(p.anisotropyRotation)),p.anisotropyMap&&(m.anisotropyMap.value=p.anisotropyMap,t(p.anisotropyMap,m.anisotropyMapTransform))),m.specularIntensity.value=p.specularIntensity,m.specularColor.value.copy(p.specularColor),p.specularColorMap&&(m.specularColorMap.value=p.specularColorMap,t(p.specularColorMap,m.specularColorMapTransform)),p.specularIntensityMap&&(m.specularIntensityMap.value=p.specularIntensityMap,t(p.specularIntensityMap,m.specularIntensityMapTransform))}function g(m,p){p.matcap&&(m.matcap.value=p.matcap)}function y(m,p){let C=e.get(p).light;m.referencePosition.value.setFromMatrixPosition(C.matrixWorld),m.nearDistance.value=C.shadow.camera.near,m.farDistance.value=C.shadow.camera.far}return{refreshFogUniforms:n,refreshMaterialUniforms:s}}function px(i,e,t,n){let s={},r={},o=[],a=i.getParameter(i.MAX_UNIFORM_BUFFER_BINDINGS);function l(x,S){let M=S.program;n.uniformBlockBinding(x,M)}function c(x,S){let M=s[x.id];M===void 0&&(m(x),M=h(x),s[x.id]=M,x.addEventListener("dispose",C));let A=S.program;n.updateUBOMapping(x,A);let v=e.render.frame;r[x.id]!==v&&(u(x),r[x.id]=v)}function h(x){let S=d();x.__bindingPointIndex=S;let M=i.createBuffer(),A=x.__size,v=x.usage;return i.bindBuffer(i.UNIFORM_BUFFER,M),i.bufferData(i.UNIFORM_BUFFER,A,v),i.bindBuffer(i.UNIFORM_BUFFER,null),i.bindBufferBase(i.UNIFORM_BUFFER,S,M),M}function d(){for(let x=0;x<a;x++)if(o.indexOf(x)===-1)return o.push(x),x;return Fe("WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached."),0}function u(x){let S=s[x.id],M=x.uniforms,A=x.__cache;i.bindBuffer(i.UNIFORM_BUFFER,S);for(let v=0,w=M.length;v<w;v++){let I=M[v];if(Array.isArray(I))for(let P=0,O=I.length;P<O;P++)f(I[P],v,P,A);else f(I,v,0,A)}i.bindBuffer(i.UNIFORM_BUFFER,null)}function f(x,S,M,A){if(y(x,S,M,A)===!0){let v=x.__offset,w=x.value;if(Array.isArray(w)){let I=0;for(let P=0;P<w.length;P++){let O=w[P],q=p(O);g(O,x.__data,I),typeof O!="number"&&typeof O!="boolean"&&!O.isMatrix3&&!ArrayBuffer.isView(O)&&(I+=q.storage/Float32Array.BYTES_PER_ELEMENT)}}else g(w,x.__data,0);i.bufferSubData(i.UNIFORM_BUFFER,v,x.__data)}}function g(x,S,M){typeof x=="number"||typeof x=="boolean"?S[0]=x:x.isMatrix3?(S[0]=x.elements[0],S[1]=x.elements[1],S[2]=x.elements[2],S[3]=0,S[4]=x.elements[3],S[5]=x.elements[4],S[6]=x.elements[5],S[7]=0,S[8]=x.elements[6],S[9]=x.elements[7],S[10]=x.elements[8],S[11]=0):ArrayBuffer.isView(x)?S.set(new x.constructor(x.buffer,x.byteOffset,S.length)):x.toArray(S,M)}function y(x,S,M,A){let v=x.value,w=S+"_"+M;if(A[w]===void 0)return typeof v=="number"||typeof v=="boolean"?A[w]=v:ArrayBuffer.isView(v)?A[w]=v.slice():A[w]=v.clone(),!0;{let I=A[w];if(typeof v=="number"||typeof v=="boolean"){if(I!==v)return A[w]=v,!0}else{if(ArrayBuffer.isView(v))return!0;if(I.equals(v)===!1)return I.copy(v),!0}}return!1}function m(x){let S=x.uniforms,M=0,A=16;for(let w=0,I=S.length;w<I;w++){let P=Array.isArray(S[w])?S[w]:[S[w]];for(let O=0,q=P.length;O<q;O++){let Y=P[O],U=Array.isArray(Y.value)?Y.value:[Y.value];for(let G=0,H=U.length;G<H;G++){let j=U[G],se=p(j),ue=M%A,le=ue%se.boundary,Me=ue+le;M+=le,Me!==0&&A-Me<se.storage&&(M+=A-Me),Y.__data=new Float32Array(se.storage/Float32Array.BYTES_PER_ELEMENT),Y.__offset=M,M+=se.storage}}}let v=M%A;return v>0&&(M+=A-v),x.__size=M,x.__cache={},this}function p(x){let S={boundary:0,storage:0};return typeof x=="number"||typeof x=="boolean"?(S.boundary=4,S.storage=4):x.isVector2?(S.boundary=8,S.storage=8):x.isVector3||x.isColor?(S.boundary=16,S.storage=12):x.isVector4?(S.boundary=16,S.storage=16):x.isMatrix3?(S.boundary=48,S.storage=48):x.isMatrix4?(S.boundary=64,S.storage=64):x.isTexture?De("WebGLRenderer: Texture samplers can not be part of an uniforms group."):ArrayBuffer.isView(x)?(S.boundary=16,S.storage=x.byteLength):De("WebGLRenderer: Unsupported uniform value type.",x),S}function C(x){let S=x.target;S.removeEventListener("dispose",C);let M=o.indexOf(S.__bindingPointIndex);o.splice(M,1),i.deleteBuffer(s[S.id]),delete s[S.id],delete r[S.id]}function T(){for(let x in s)i.deleteBuffer(s[x]);o=[],s={},r={}}return{bind:l,update:c,dispose:T}}var mx=new Uint16Array([12469,15057,12620,14925,13266,14620,13807,14376,14323,13990,14545,13625,14713,13328,14840,12882,14931,12528,14996,12233,15039,11829,15066,11525,15080,11295,15085,10976,15082,10705,15073,10495,13880,14564,13898,14542,13977,14430,14158,14124,14393,13732,14556,13410,14702,12996,14814,12596,14891,12291,14937,11834,14957,11489,14958,11194,14943,10803,14921,10506,14893,10278,14858,9960,14484,14039,14487,14025,14499,13941,14524,13740,14574,13468,14654,13106,14743,12678,14818,12344,14867,11893,14889,11509,14893,11180,14881,10751,14852,10428,14812,10128,14765,9754,14712,9466,14764,13480,14764,13475,14766,13440,14766,13347,14769,13070,14786,12713,14816,12387,14844,11957,14860,11549,14868,11215,14855,10751,14825,10403,14782,10044,14729,9651,14666,9352,14599,9029,14967,12835,14966,12831,14963,12804,14954,12723,14936,12564,14917,12347,14900,11958,14886,11569,14878,11247,14859,10765,14828,10401,14784,10011,14727,9600,14660,9289,14586,8893,14508,8533,15111,12234,15110,12234,15104,12216,15092,12156,15067,12010,15028,11776,14981,11500,14942,11205,14902,10752,14861,10393,14812,9991,14752,9570,14682,9252,14603,8808,14519,8445,14431,8145,15209,11449,15208,11451,15202,11451,15190,11438,15163,11384,15117,11274,15055,10979,14994,10648,14932,10343,14871,9936,14803,9532,14729,9218,14645,8742,14556,8381,14461,8020,14365,7603,15273,10603,15272,10607,15267,10619,15256,10631,15231,10614,15182,10535,15118,10389,15042,10167,14963,9787,14883,9447,14800,9115,14710,8665,14615,8318,14514,7911,14411,7507,14279,7198,15314,9675,15313,9683,15309,9712,15298,9759,15277,9797,15229,9773,15166,9668,15084,9487,14995,9274,14898,8910,14800,8539,14697,8234,14590,7790,14479,7409,14367,7067,14178,6621,15337,8619,15337,8631,15333,8677,15325,8769,15305,8871,15264,8940,15202,8909,15119,8775,15022,8565,14916,8328,14804,8009,14688,7614,14569,7287,14448,6888,14321,6483,14088,6171,15350,7402,15350,7419,15347,7480,15340,7613,15322,7804,15287,7973,15229,8057,15148,8012,15046,7846,14933,7611,14810,7357,14682,7069,14552,6656,14421,6316,14251,5948,14007,5528,15356,5942,15356,5977,15353,6119,15348,6294,15332,6551,15302,6824,15249,7044,15171,7122,15070,7050,14949,6861,14818,6611,14679,6349,14538,6067,14398,5651,14189,5311,13935,4958,15359,4123,15359,4153,15356,4296,15353,4646,15338,5160,15311,5508,15263,5829,15188,6042,15088,6094,14966,6001,14826,5796,14678,5543,14527,5287,14377,4985,14133,4586,13869,4257,15360,1563,15360,1642,15358,2076,15354,2636,15341,3350,15317,4019,15273,4429,15203,4732,15105,4911,14981,4932,14836,4818,14679,4621,14517,4386,14359,4156,14083,3795,13808,3437,15360,122,15360,137,15358,285,15355,636,15344,1274,15322,2177,15281,2765,15215,3223,15120,3451,14995,3569,14846,3567,14681,3466,14511,3305,14344,3121,14037,2800,13753,2467,15360,0,15360,1,15359,21,15355,89,15346,253,15325,479,15287,796,15225,1148,15133,1492,15008,1749,14856,1882,14685,1886,14506,1783,14324,1608,13996,1398,13702,1183]),Dn=null;function gx(){return Dn===null&&(Dn=new No(mx,16,16,gi,Ln),Dn.name="DFG_LUT",Dn.minFilter=Ut,Dn.magFilter=Ut,Dn.wrapS=An,Dn.wrapT=An,Dn.generateMipmaps=!1,Dn.needsUpdate=!0),Dn}var ws=class{constructor(e={}){let{canvas:t=Eu(),context:n=null,depth:s=!0,stencil:r=!1,alpha:o=!1,antialias:a=!1,premultipliedAlpha:l=!0,preserveDrawingBuffer:c=!1,powerPreference:h="default",failIfMajorPerformanceCaveat:d=!1,reversedDepthBuffer:u=!1,outputBufferType:f=Yt}=e;this.isWebGLRenderer=!0;let g;if(n!==null){if(typeof WebGLRenderingContext<"u"&&n instanceof WebGLRenderingContext)throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163.");g=n.getContextAttributes().alpha}else g=o;let y=f,m=new Set([pa,fa,da]),p=new Set([Yt,yn,bs,Ms,ha,ua]),C=new Uint32Array(4),T=new Int32Array(4),x=new R,S=null,M=null,A=[],v=[],w=null;this.domElement=t,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.toneMapping=vn,this.toneMappingExposure=1,this.transmissionResolutionScale=1;let I=this,P=!1,O=null,q=null,Y=null,U=null;this._outputColorSpace=jt;let G=0,H=0,j=null,se=-1,ue=null,le=new gt,Me=new gt,Je=null,ct=new Ye(0),et=0,J=t.width,ce=t.height,re=1,Ie=null,ke=null,Ue=new gt(0,0,J,ce),nt=new gt(0,0,J,ce),He=!1,Q=new fs,ie=!1,ne=!1,xe=new rt,me=new R,Be=new gt,Ce={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0},Ve=!1;function We(){return j===null?re:1}let L=n;function ot(b,N){return t.getContext(b,N)}try{let b={alpha:!0,depth:s,stencil:r,antialias:a,premultipliedAlpha:l,preserveDrawingBuffer:c,powerPreference:h,failIfMajorPerformanceCaveat:d};if("setAttribute"in t&&t.setAttribute("data-engine",`three.js r${"185"}`),t.addEventListener("webglcontextlost",vt,!1),t.addEventListener("webglcontextrestored",dt,!1),t.addEventListener("webglcontextcreationerror",Mn,!1),L===null){let N="webgl2";if(L=ot(N,b),L===null)throw ot(N)?new Error("THREE.WebGLRenderer: Error creating WebGL context with your selected attributes."):new Error("THREE.WebGLRenderer: Error creating WebGL context.")}}catch(b){throw Fe("WebGLRenderer: "+b.message),b}let je,E,_,F,k,W,oe,ae,X,K,de,Re,ge,fe,Ne,ze,Xe,D,he,$,pe,be,ee;function Ae(){je=new S0(L),je.init(),pe=new cx(L,je),E=new m0(L,je,e,pe),_=new ax(L,je),E.reversedDepthBuffer&&u&&_.buffers.depth.setReversed(!0),q=L.createFramebuffer(),Y=L.createFramebuffer(),U=L.createFramebuffer(),F=new T0(L),k=new Y_,W=new lx(L,je,_,k,E,pe,F),oe=new M0(I),ae=new Pp(L),be=new f0(L,ae),X=new E0(L,ae,F,be),K=new C0(L,X,ae,be,F),D=new A0(L,E,W),Ne=new g0(k),de=new q_(I,oe,je,E,be,Ne),Re=new fx(I,k),ge=new $_,fe=new tx(je),Xe=new d0(I,oe,_,K,g,l),ze=new ox(I,K,E),ee=new px(L,F,E,_),he=new p0(L,je,F),$=new w0(L,je,F),F.programs=de.programs,I.capabilities=E,I.extensions=je,I.properties=k,I.renderLists=ge,I.shadowMap=ze,I.state=_,I.info=F}Ae(),y!==Yt&&(w=new P0(y,t.width,t.height,a,s,r));let we=new Bc(I,L);this.xr=we,this.getContext=function(){return L},this.getContextAttributes=function(){return L.getContextAttributes()},this.forceContextLoss=function(){let b=je.get("WEBGL_lose_context");b&&b.loseContext()},this.forceContextRestore=function(){let b=je.get("WEBGL_lose_context");b&&b.restoreContext()},this.getPixelRatio=function(){return re},this.setPixelRatio=function(b){b!==void 0&&(re=b,this.setSize(J,ce,!1))},this.getSize=function(b){return b.set(J,ce)},this.setSize=function(b,N,V=!0){if(we.isPresenting){De("WebGLRenderer: Can't change size while VR device is presenting.");return}J=b,ce=N,t.width=Math.floor(b*re),t.height=Math.floor(N*re),V===!0&&(t.style.width=b+"px",t.style.height=N+"px"),w!==null&&w.setSize(t.width,t.height),this.setViewport(0,0,b,N)},this.getDrawingBufferSize=function(b){return b.set(J*re,ce*re).floor()},this.setDrawingBufferSize=function(b,N,V){J=b,ce=N,re=V,t.width=Math.floor(b*V),t.height=Math.floor(N*V),this.setViewport(0,0,b,N)},this.setEffects=function(b){if(y===Yt){Fe("WebGLRenderer: setEffects() requires outputBufferType set to HalfFloatType or FloatType.");return}if(b){for(let N=0;N<b.length;N++)if(b[N].isOutputPass===!0){De("WebGLRenderer: OutputPass is not needed in setEffects(). Tone mapping and color space conversion are applied automatically.");break}}w.setEffects(b||[])},this.getCurrentViewport=function(b){return b.copy(le)},this.getViewport=function(b){return b.copy(Ue)},this.setViewport=function(b,N,V,B){b.isVector4?Ue.set(b.x,b.y,b.z,b.w):Ue.set(b,N,V,B),_.viewport(le.copy(Ue).multiplyScalar(re).round())},this.getScissor=function(b){return b.copy(nt)},this.setScissor=function(b,N,V,B){b.isVector4?nt.set(b.x,b.y,b.z,b.w):nt.set(b,N,V,B),_.scissor(Me.copy(nt).multiplyScalar(re).round())},this.getScissorTest=function(){return He},this.setScissorTest=function(b){_.setScissorTest(He=b)},this.setOpaqueSort=function(b){Ie=b},this.setTransparentSort=function(b){ke=b},this.getClearColor=function(b){return b.copy(Xe.getClearColor())},this.setClearColor=function(){Xe.setClearColor(...arguments)},this.getClearAlpha=function(){return Xe.getClearAlpha()},this.setClearAlpha=function(){Xe.setClearAlpha(...arguments)},this.clear=function(b=!0,N=!0,V=!0){let B=0;if(b){let z=!1;if(j!==null){let ye=j.texture.format;z=m.has(ye)}if(z){let ye=j.texture.type,Ee=p.has(ye),ve=Xe.getClearColor(),Te=Xe.getClearAlpha(),Pe=ve.r,qe=ve.g,Ke=ve.b;Ee?(C[0]=Pe,C[1]=qe,C[2]=Ke,C[3]=Te,L.clearBufferuiv(L.COLOR,0,C)):(T[0]=Pe,T[1]=qe,T[2]=Ke,T[3]=Te,L.clearBufferiv(L.COLOR,0,T))}else B|=L.COLOR_BUFFER_BIT}N&&(B|=L.DEPTH_BUFFER_BIT,this.state.buffers.depth.setMask(!0)),V&&(B|=L.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(4294967295)),B!==0&&L.clear(B)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.setNodesHandler=function(b){b.setRenderer(this),O=b},this.dispose=function(){t.removeEventListener("webglcontextlost",vt,!1),t.removeEventListener("webglcontextrestored",dt,!1),t.removeEventListener("webglcontextcreationerror",Mn,!1),Xe.dispose(),ge.dispose(),fe.dispose(),k.dispose(),oe.dispose(),K.dispose(),be.dispose(),ee.dispose(),de.dispose(),we.dispose(),we.removeEventListener("sessionstart",nh),we.removeEventListener("sessionend",ih),vi.stop()};function vt(b){b.preventDefault(),Ys("WebGLRenderer: Context Lost."),P=!0}function dt(){Ys("WebGLRenderer: Context Restored."),P=!1;let b=F.autoReset,N=ze.enabled,V=ze.autoUpdate,B=ze.needsUpdate,z=ze.type;Ae(),F.autoReset=b,ze.enabled=N,ze.autoUpdate=V,ze.needsUpdate=B,ze.type=z}function Mn(b){Fe("WebGLRenderer: A WebGL context could not be created. Reason: ",b.statusMessage)}function Sn(b){let N=b.target;N.removeEventListener("dispose",Sn),Zd(N)}function Zd(b){$d(b),k.remove(b)}function $d(b){let N=k.get(b).programs;N!==void 0&&(N.forEach(function(V){de.releaseProgram(V)}),b.isShaderMaterial&&de.releaseShaderCache(b))}this.renderBufferDirect=function(b,N,V,B,z,ye){N===null&&(N=Ce);let Ee=z.isMesh&&z.matrixWorld.determinantAffine()<0,ve=jd(b,N,V,B,z);_.setMaterial(B,Ee);let Te=V.index,Pe=1;if(B.wireframe===!0){if(Te=X.getWireframeAttribute(V),Te===void 0)return;Pe=2}let qe=V.drawRange,Ke=V.attributes.position,Le=qe.start*Pe,at=(qe.start+qe.count)*Pe;ye!==null&&(Le=Math.max(Le,ye.start*Pe),at=Math.min(at,(ye.start+ye.count)*Pe)),Te!==null?(Le=Math.max(Le,0),at=Math.min(at,Te.count)):Ke!=null&&(Le=Math.max(Le,0),at=Math.min(at,Ke.count));let bt=at-Le;if(bt<0||bt===1/0)return;be.setup(z,B,ve,V,Te);let yt,ht=he;if(Te!==null&&(yt=ae.get(Te),ht=$,ht.setIndex(yt)),z.isMesh)B.wireframe===!0?(_.setLineWidth(B.wireframeLinewidth*We()),ht.setMode(L.LINES)):ht.setMode(L.TRIANGLES);else if(z.isLine){let Ot=B.linewidth;Ot===void 0&&(Ot=1),_.setLineWidth(Ot*We()),z.isLineSegments?ht.setMode(L.LINES):z.isLineLoop?ht.setMode(L.LINE_LOOP):ht.setMode(L.LINE_STRIP)}else z.isPoints?ht.setMode(L.POINTS):z.isSprite&&ht.setMode(L.TRIANGLES);if(z.isBatchedMesh)if(je.get("WEBGL_multi_draw"))ht.renderMultiDraw(z._multiDrawStarts,z._multiDrawCounts,z._multiDrawCount);else{let Ot=z._multiDrawStarts,Se=z._multiDrawCounts,$t=z._multiDrawCount,tt=Te?ae.get(Te).bytesPerElement:1,sn=k.get(B).currentProgram.getUniforms();for(let En=0;En<$t;En++)sn.setValue(L,"_gl_DrawID",En),ht.render(Ot[En]/tt,Se[En])}else if(z.isInstancedMesh)ht.renderInstances(Le,bt,z.count);else if(V.isInstancedBufferGeometry){let Ot=V._maxInstanceCount!==void 0?V._maxInstanceCount:1/0,Se=Math.min(V.instanceCount,Ot);ht.renderInstances(Le,bt,Se)}else ht.render(Le,bt)};function th(b,N,V){b.transparent===!0&&b.side===ln&&b.forceSinglePass===!1?(b.side=qt,b.needsUpdate=!0,Fr(b,N,V),b.side=Hn,b.needsUpdate=!0,Fr(b,N,V),b.side=ln):Fr(b,N,V)}this.compile=function(b,N,V=null){V===null&&(V=b),M=fe.get(V),M.init(N),v.push(M),V.traverseVisible(function(z){z.isLight&&z.layers.test(N.layers)&&(M.pushLight(z),z.castShadow&&M.pushShadow(z))}),b!==V&&b.traverseVisible(function(z){z.isLight&&z.layers.test(N.layers)&&(M.pushLight(z),z.castShadow&&M.pushShadow(z))}),M.setupLights();let B=new Set;return b.traverse(function(z){if(!(z.isMesh||z.isPoints||z.isLine||z.isSprite))return;let ye=z.material;if(ye)if(Array.isArray(ye))for(let Ee=0;Ee<ye.length;Ee++){let ve=ye[Ee];th(ve,V,z),B.add(ve)}else th(ye,V,z),B.add(ye)}),M=v.pop(),B},this.compileAsync=function(b,N,V=null){let B=this.compile(b,N,V);return new Promise(z=>{function ye(){if(B.forEach(function(Ee){k.get(Ee).currentProgram.isReady()&&B.delete(Ee)}),B.size===0){z(b);return}setTimeout(ye,10)}je.get("KHR_parallel_shader_compile")!==null?ye():setTimeout(ye,10)})};let ol=null;function Jd(b){ol&&ol(b)}function nh(){vi.stop()}function ih(){vi.start()}let vi=new sd;vi.setAnimationLoop(Jd),typeof self<"u"&&vi.setContext(self),this.setAnimationLoop=function(b){ol=b,we.setAnimationLoop(b),b===null?vi.stop():vi.start()},we.addEventListener("sessionstart",nh),we.addEventListener("sessionend",ih),this.render=function(b,N){if(N!==void 0&&N.isCamera!==!0){Fe("WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(P===!0)return;O!==null&&O.renderStart(b,N);let V=we.enabled===!0&&we.isPresenting===!0,B=w!==null&&(j===null||V)&&w.begin(I,j);if(b.matrixWorldAutoUpdate===!0&&b.updateMatrixWorld(),N.parent===null&&N.matrixWorldAutoUpdate===!0&&N.updateMatrixWorld(),we.enabled===!0&&we.isPresenting===!0&&(w===null||w.isCompositing()===!1)&&(we.cameraAutoUpdate===!0&&we.updateCamera(N),N=we.getCamera()),b.isScene===!0&&b.onBeforeRender(I,b,N,j),M=fe.get(b,v.length),M.init(N),M.state.textureUnits=W.getTextureUnits(),v.push(M),xe.multiplyMatrices(N.projectionMatrix,N.matrixWorldInverse),Q.setFromProjectionMatrix(xe,pn,N.reversedDepth),ne=this.localClippingEnabled,ie=Ne.init(this.clippingPlanes,ne),S=ge.get(b,A.length),S.init(),A.push(S),we.enabled===!0&&we.isPresenting===!0){let Ee=I.xr.getDepthSensingMesh();Ee!==null&&al(Ee,N,-1/0,I.sortObjects)}al(b,N,0,I.sortObjects),S.finish(),I.sortObjects===!0&&S.sort(Ie,ke,N.reversedDepth),Ve=we.enabled===!1||we.isPresenting===!1||we.hasDepthSensing()===!1,Ve&&Xe.addToRenderList(S,b),this.info.render.frame++,this.info.autoReset===!0&&this.info.reset(),ie===!0&&Ne.beginShadows();let z=M.state.shadowsArray;if(ze.render(z,b,N),ie===!0&&Ne.endShadows(),(B&&w.hasRenderPass())===!1){let Ee=S.opaque,ve=S.transmissive;if(M.setupLights(),N.isArrayCamera){let Te=N.cameras;if(ve.length>0)for(let Pe=0,qe=Te.length;Pe<qe;Pe++){let Ke=Te[Pe];rh(Ee,ve,b,Ke)}Ve&&Xe.render(b);for(let Pe=0,qe=Te.length;Pe<qe;Pe++){let Ke=Te[Pe];sh(S,b,Ke,Ke.viewport)}}else ve.length>0&&rh(Ee,ve,b,N),Ve&&Xe.render(b),sh(S,b,N)}j!==null&&H===0&&(W.updateMultisampleRenderTarget(j),W.updateRenderTargetMipmap(j)),B&&w.end(I),b.isScene===!0&&b.onAfterRender(I,b,N),be.resetDefaultState(),se=-1,ue=null,v.pop(),v.length>0?(M=v[v.length-1],W.setTextureUnits(M.state.textureUnits),ie===!0&&Ne.setGlobalState(I.clippingPlanes,M.state.camera)):M=null,A.pop(),A.length>0?S=A[A.length-1]:S=null,O!==null&&O.renderEnd()};function al(b,N,V,B){if(b.visible===!1)return;if(b.layers.test(N.layers)){if(b.isGroup)V=b.renderOrder;else if(b.isLOD)b.autoUpdate===!0&&b.update(N);else if(b.isLightProbeGrid)M.pushLightProbeGrid(b);else if(b.isLight)M.pushLight(b),b.castShadow&&M.pushShadow(b);else if(b.isSprite){if(!b.frustumCulled||Q.intersectsSprite(b)){B&&Be.setFromMatrixPosition(b.matrixWorld).applyMatrix4(xe);let Ee=K.update(b),ve=b.material;ve.visible&&S.push(b,Ee,ve,V,Be.z,null)}}else if((b.isMesh||b.isLine||b.isPoints)&&(!b.frustumCulled||Q.intersectsObject(b))){let Ee=K.update(b),ve=b.material;if(B&&(b.boundingSphere!==void 0?(b.boundingSphere===null&&b.computeBoundingSphere(),Be.copy(b.boundingSphere.center)):(Ee.boundingSphere===null&&Ee.computeBoundingSphere(),Be.copy(Ee.boundingSphere.center)),Be.applyMatrix4(b.matrixWorld).applyMatrix4(xe)),Array.isArray(ve)){let Te=Ee.groups;for(let Pe=0,qe=Te.length;Pe<qe;Pe++){let Ke=Te[Pe],Le=ve[Ke.materialIndex];Le&&Le.visible&&S.push(b,Ee,Le,V,Be.z,Ke)}}else ve.visible&&S.push(b,Ee,ve,V,Be.z,null)}}let ye=b.children;for(let Ee=0,ve=ye.length;Ee<ve;Ee++)al(ye[Ee],N,V,B)}function sh(b,N,V,B){let{opaque:z,transmissive:ye,transparent:Ee}=b;M.setupLightsView(V),ie===!0&&Ne.setGlobalState(I.clippingPlanes,V),B&&_.viewport(le.copy(B)),z.length>0&&Ur(z,N,V),ye.length>0&&Ur(ye,N,V),Ee.length>0&&Ur(Ee,N,V),_.buffers.depth.setTest(!0),_.buffers.depth.setMask(!0),_.buffers.color.setMask(!0),_.setPolygonOffset(!1)}function rh(b,N,V,B){if((V.isScene===!0?V.overrideMaterial:null)!==null)return;if(M.state.transmissionRenderTarget[B.id]===void 0){let Le=je.has("EXT_color_buffer_half_float")||je.has("EXT_color_buffer_float");M.state.transmissionRenderTarget[B.id]=new Qt(1,1,{generateMipmaps:!0,type:Le?Ln:Yt,minFilter:pi,samples:Math.max(4,E.samples),stencilBuffer:r,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:Qe.workingColorSpace})}let ye=M.state.transmissionRenderTarget[B.id],Ee=B.viewport||le;ye.setSize(Ee.z*I.transmissionResolutionScale,Ee.w*I.transmissionResolutionScale);let ve=I.getRenderTarget(),Te=I.getActiveCubeFace(),Pe=I.getActiveMipmapLevel();I.setRenderTarget(ye),I.getClearColor(ct),et=I.getClearAlpha(),et<1&&I.setClearColor(16777215,.5),I.clear(),Ve&&Xe.render(V);let qe=I.toneMapping;I.toneMapping=vn;let Ke=B.viewport;if(B.viewport!==void 0&&(B.viewport=void 0),M.setupLightsView(B),ie===!0&&Ne.setGlobalState(I.clippingPlanes,B),Ur(b,V,B),W.updateMultisampleRenderTarget(ye),W.updateRenderTargetMipmap(ye),je.has("WEBGL_multisampled_render_to_texture")===!1){let Le=!1;for(let at=0,bt=N.length;at<bt;at++){let yt=N[at],{object:ht,geometry:Ot,material:Se,group:$t}=yt;if(Se.side===ln&&ht.layers.test(B.layers)){let tt=Se.side;Se.side=qt,Se.needsUpdate=!0,oh(ht,V,B,Ot,Se,$t),Se.side=tt,Se.needsUpdate=!0,Le=!0}}Le===!0&&(W.updateMultisampleRenderTarget(ye),W.updateRenderTargetMipmap(ye))}I.setRenderTarget(ve,Te,Pe),I.setClearColor(ct,et),Ke!==void 0&&(B.viewport=Ke),I.toneMapping=qe}function Ur(b,N,V){let B=N.isScene===!0?N.overrideMaterial:null;for(let z=0,ye=b.length;z<ye;z++){let Ee=b[z],{object:ve,geometry:Te,group:Pe}=Ee,qe=Ee.material;qe.allowOverride===!0&&B!==null&&(qe=B),ve.layers.test(V.layers)&&oh(ve,N,V,Te,qe,Pe)}}function oh(b,N,V,B,z,ye){b.onBeforeRender(I,N,V,B,z,ye),b.modelViewMatrix.multiplyMatrices(V.matrixWorldInverse,b.matrixWorld),b.normalMatrix.getNormalMatrix(b.modelViewMatrix),z.onBeforeRender(I,N,V,B,b,ye),z.transparent===!0&&z.side===ln&&z.forceSinglePass===!1?(z.side=qt,z.needsUpdate=!0,I.renderBufferDirect(V,N,B,z,b,ye),z.side=Hn,z.needsUpdate=!0,I.renderBufferDirect(V,N,B,z,b,ye),z.side=ln):I.renderBufferDirect(V,N,B,z,b,ye),b.onAfterRender(I,N,V,B,z,ye)}function Fr(b,N,V){N.isScene!==!0&&(N=Ce);let B=k.get(b),z=M.state.lights,ye=M.state.shadowsArray,Ee=z.state.version,ve=de.getParameters(b,z.state,ye,N,V,M.state.lightProbeGridArray),Te=de.getProgramCacheKey(ve),Pe=B.programs;B.environment=b.isMeshStandardMaterial||b.isMeshLambertMaterial||b.isMeshPhongMaterial?N.environment:null,B.fog=N.fog;let qe=b.isMeshStandardMaterial||b.isMeshLambertMaterial&&!b.envMap||b.isMeshPhongMaterial&&!b.envMap;B.envMap=oe.get(b.envMap||B.environment,qe),B.envMapRotation=B.environment!==null&&b.envMap===null?N.environmentRotation:b.envMapRotation,Pe===void 0&&(b.addEventListener("dispose",Sn),Pe=new Map,B.programs=Pe);let Ke=Pe.get(Te);if(Ke!==void 0){if(B.currentProgram===Ke&&B.lightsStateVersion===Ee)return lh(b,ve),Ke}else ve.uniforms=de.getUniforms(b),O!==null&&b.isNodeMaterial&&O.build(b,V,ve),b.onBeforeCompile(ve,I),Ke=de.acquireProgram(ve,Te),Pe.set(Te,Ke),B.uniforms=ve.uniforms;let Le=B.uniforms;return(!b.isShaderMaterial&&!b.isRawShaderMaterial||b.clipping===!0)&&(Le.clippingPlanes=Ne.uniform),lh(b,ve),B.needsLights=ef(b),B.lightsStateVersion=Ee,B.needsLights&&(Le.ambientLightColor.value=z.state.ambient,Le.lightProbe.value=z.state.probe,Le.directionalLights.value=z.state.directional,Le.directionalLightShadows.value=z.state.directionalShadow,Le.spotLights.value=z.state.spot,Le.spotLightShadows.value=z.state.spotShadow,Le.rectAreaLights.value=z.state.rectArea,Le.ltc_1.value=z.state.rectAreaLTC1,Le.ltc_2.value=z.state.rectAreaLTC2,Le.pointLights.value=z.state.point,Le.pointLightShadows.value=z.state.pointShadow,Le.hemisphereLights.value=z.state.hemi,Le.directionalShadowMatrix.value=z.state.directionalShadowMatrix,Le.spotLightMatrix.value=z.state.spotLightMatrix,Le.spotLightMap.value=z.state.spotLightMap,Le.pointShadowMatrix.value=z.state.pointShadowMatrix),B.lightProbeGrid=M.state.lightProbeGridArray.length>0,B.currentProgram=Ke,B.uniformsList=null,Ke}function ah(b){if(b.uniformsList===null){let N=b.currentProgram.getUniforms();b.uniformsList=Es.seqWithValue(N.seq,b.uniforms)}return b.uniformsList}function lh(b,N){let V=k.get(b);V.outputColorSpace=N.outputColorSpace,V.batching=N.batching,V.batchingColor=N.batchingColor,V.instancing=N.instancing,V.instancingColor=N.instancingColor,V.instancingMorph=N.instancingMorph,V.skinning=N.skinning,V.morphTargets=N.morphTargets,V.morphNormals=N.morphNormals,V.morphColors=N.morphColors,V.morphTargetsCount=N.morphTargetsCount,V.numClippingPlanes=N.numClippingPlanes,V.numIntersection=N.numClipIntersection,V.vertexAlphas=N.vertexAlphas,V.vertexTangents=N.vertexTangents,V.toneMapping=N.toneMapping}function Kd(b,N){if(b.length===0)return null;if(b.length===1)return b[0].texture!==null?b[0]:null;x.setFromMatrixPosition(N.matrixWorld);for(let V=0,B=b.length;V<B;V++){let z=b[V];if(z.texture!==null&&z.boundingBox.containsPoint(x))return z}return null}function jd(b,N,V,B,z){N.isScene!==!0&&(N=Ce),W.resetTextureUnits();let ye=N.fog,Ee=B.isMeshStandardMaterial||B.isMeshLambertMaterial||B.isMeshPhongMaterial?N.environment:null,ve=j===null?I.outputColorSpace:j.isXRRenderTarget===!0?j.texture.colorSpace:Qe.workingColorSpace,Te=B.isMeshStandardMaterial||B.isMeshLambertMaterial&&!B.envMap||B.isMeshPhongMaterial&&!B.envMap,Pe=oe.get(B.envMap||Ee,Te),qe=B.vertexColors===!0&&!!V.attributes.color&&V.attributes.color.itemSize===4,Ke=!!V.attributes.tangent&&(!!B.normalMap||B.anisotropy>0),Le=!!V.morphAttributes.position,at=!!V.morphAttributes.normal,bt=!!V.morphAttributes.color,yt=vn;B.toneMapped&&(j===null||j.isXRRenderTarget===!0)&&(yt=I.toneMapping);let ht=V.morphAttributes.position||V.morphAttributes.normal||V.morphAttributes.color,Ot=ht!==void 0?ht.length:0,Se=k.get(B),$t=M.state.lights;if(ie===!0&&(ne===!0||b!==ue)){let ft=b===ue&&B.id===se;Ne.setState(B,b,ft)}let tt=!1;B.version===Se.__version?(Se.needsLights&&Se.lightsStateVersion!==$t.state.version||Se.outputColorSpace!==ve||z.isBatchedMesh&&Se.batching===!1||!z.isBatchedMesh&&Se.batching===!0||z.isBatchedMesh&&Se.batchingColor===!0&&z.colorTexture===null||z.isBatchedMesh&&Se.batchingColor===!1&&z.colorTexture!==null||z.isInstancedMesh&&Se.instancing===!1||!z.isInstancedMesh&&Se.instancing===!0||z.isSkinnedMesh&&Se.skinning===!1||!z.isSkinnedMesh&&Se.skinning===!0||z.isInstancedMesh&&Se.instancingColor===!0&&z.instanceColor===null||z.isInstancedMesh&&Se.instancingColor===!1&&z.instanceColor!==null||z.isInstancedMesh&&Se.instancingMorph===!0&&z.morphTexture===null||z.isInstancedMesh&&Se.instancingMorph===!1&&z.morphTexture!==null||Se.envMap!==Pe||B.fog===!0&&Se.fog!==ye||Se.numClippingPlanes!==void 0&&(Se.numClippingPlanes!==Ne.numPlanes||Se.numIntersection!==Ne.numIntersection)||Se.vertexAlphas!==qe||Se.vertexTangents!==Ke||Se.morphTargets!==Le||Se.morphNormals!==at||Se.morphColors!==bt||Se.toneMapping!==yt||Se.morphTargetsCount!==Ot||!!Se.lightProbeGrid!=M.state.lightProbeGridArray.length>0)&&(tt=!0):(tt=!0,Se.__version=B.version);let sn=Se.currentProgram;tt===!0&&(sn=Fr(B,N,z),O&&B.isNodeMaterial&&O.onUpdateProgram(B,sn,Se));let En=!1,Yn=!1,ki=!1,ut=sn.getUniforms(),Mt=Se.uniforms;if(_.useProgram(sn.program)&&(En=!0,Yn=!0,ki=!0),B.id!==se&&(se=B.id,Yn=!0),Se.needsLights){let ft=Kd(M.state.lightProbeGridArray,z);Se.lightProbeGrid!==ft&&(Se.lightProbeGrid=ft,Yn=!0)}if(En||ue!==b){_.buffers.depth.getReversed()&&b.reversedDepth!==!0&&(b._reversedDepth=!0,b.updateProjectionMatrix()),ut.setValue(L,"projectionMatrix",b.projectionMatrix),ut.setValue(L,"viewMatrix",b.matrixWorldInverse);let $n=ut.map.cameraPosition;$n!==void 0&&$n.setValue(L,me.setFromMatrixPosition(b.matrixWorld)),E.logarithmicDepthBuffer&&ut.setValue(L,"logDepthBufFC",2/(Math.log(b.far+1)/Math.LN2)),(B.isMeshPhongMaterial||B.isMeshToonMaterial||B.isMeshLambertMaterial||B.isMeshBasicMaterial||B.isMeshStandardMaterial||B.isShaderMaterial)&&ut.setValue(L,"isOrthographic",b.isOrthographicCamera===!0),ue!==b&&(ue=b,Yn=!0,ki=!0)}if(Se.needsLights&&($t.state.directionalShadowMap.length>0&&ut.setValue(L,"directionalShadowMap",$t.state.directionalShadowMap,W),$t.state.spotShadowMap.length>0&&ut.setValue(L,"spotShadowMap",$t.state.spotShadowMap,W),$t.state.pointShadowMap.length>0&&ut.setValue(L,"pointShadowMap",$t.state.pointShadowMap,W)),z.isSkinnedMesh){ut.setOptional(L,z,"bindMatrix"),ut.setOptional(L,z,"bindMatrixInverse");let ft=z.skeleton;ft&&(ft.boneTexture===null&&ft.computeBoneTexture(),ut.setValue(L,"boneTexture",ft.boneTexture,W))}z.isBatchedMesh&&(ut.setOptional(L,z,"batchingTexture"),ut.setValue(L,"batchingTexture",z._matricesTexture,W),ut.setOptional(L,z,"batchingIdTexture"),ut.setValue(L,"batchingIdTexture",z._indirectTexture,W),ut.setOptional(L,z,"batchingColorTexture"),z._colorsTexture!==null&&ut.setValue(L,"batchingColorTexture",z._colorsTexture,W));let Zn=V.morphAttributes;if((Zn.position!==void 0||Zn.normal!==void 0||Zn.color!==void 0)&&D.update(z,V,sn),(Yn||Se.receiveShadow!==z.receiveShadow)&&(Se.receiveShadow=z.receiveShadow,ut.setValue(L,"receiveShadow",z.receiveShadow)),(B.isMeshStandardMaterial||B.isMeshLambertMaterial||B.isMeshPhongMaterial)&&B.envMap===null&&N.environment!==null&&(Mt.envMapIntensity.value=N.environmentIntensity),Mt.dfgLUT!==void 0&&(Mt.dfgLUT.value=gx()),Yn){if(ut.setValue(L,"toneMappingExposure",I.toneMappingExposure),Se.needsLights&&Qd(Mt,ki),ye&&B.fog===!0&&Re.refreshFogUniforms(Mt,ye),Re.refreshMaterialUniforms(Mt,B,re,ce,M.state.transmissionRenderTarget[b.id]),Se.needsLights&&Se.lightProbeGrid){let ft=Se.lightProbeGrid;Mt.probesSH.value=ft.texture,Mt.probesMin.value.copy(ft.boundingBox.min),Mt.probesMax.value.copy(ft.boundingBox.max),Mt.probesResolution.value.copy(ft.resolution)}Es.upload(L,ah(Se),Mt,W)}if(B.isShaderMaterial&&B.uniformsNeedUpdate===!0&&(Es.upload(L,ah(Se),Mt,W),B.uniformsNeedUpdate=!1),B.isSpriteMaterial&&ut.setValue(L,"center",z.center),ut.setValue(L,"modelViewMatrix",z.modelViewMatrix),ut.setValue(L,"normalMatrix",z.normalMatrix),ut.setValue(L,"modelMatrix",z.matrixWorld),B.uniformsGroups!==void 0){let ft=B.uniformsGroups;for(let $n=0,Vi=ft.length;$n<Vi;$n++){let ch=ft[$n];ee.update(ch,sn),ee.bind(ch,sn)}}return sn}function Qd(b,N){b.ambientLightColor.needsUpdate=N,b.lightProbe.needsUpdate=N,b.directionalLights.needsUpdate=N,b.directionalLightShadows.needsUpdate=N,b.pointLights.needsUpdate=N,b.pointLightShadows.needsUpdate=N,b.spotLights.needsUpdate=N,b.spotLightShadows.needsUpdate=N,b.rectAreaLights.needsUpdate=N,b.hemisphereLights.needsUpdate=N}function ef(b){return b.isMeshLambertMaterial||b.isMeshToonMaterial||b.isMeshPhongMaterial||b.isMeshStandardMaterial||b.isShadowMaterial||b.isShaderMaterial&&b.lights===!0}this.getActiveCubeFace=function(){return G},this.getActiveMipmapLevel=function(){return H},this.getRenderTarget=function(){return j},this.setRenderTargetTextures=function(b,N,V){let B=k.get(b);B.__autoAllocateDepthBuffer=b.resolveDepthBuffer===!1,B.__autoAllocateDepthBuffer===!1&&(B.__useRenderToTexture=!1),k.get(b.texture).__webglTexture=N,k.get(b.depthTexture).__webglTexture=B.__autoAllocateDepthBuffer?void 0:V,B.__hasExternalTextures=!0},this.setRenderTargetFramebuffer=function(b,N){let V=k.get(b);V.__webglFramebuffer=N,V.__useDefaultFramebuffer=N===void 0},this.setRenderTarget=function(b,N=0,V=0){j=b,G=N,H=V;let B=null,z=!1,ye=!1;if(b){let ve=k.get(b);if(ve.__useDefaultFramebuffer!==void 0){_.bindFramebuffer(L.FRAMEBUFFER,ve.__webglFramebuffer),le.copy(b.viewport),Me.copy(b.scissor),Je=b.scissorTest,_.viewport(le),_.scissor(Me),_.setScissorTest(Je),se=-1;return}else if(ve.__webglFramebuffer===void 0)W.setupRenderTarget(b);else if(ve.__hasExternalTextures)W.rebindTextures(b,k.get(b.texture).__webglTexture,k.get(b.depthTexture).__webglTexture);else if(b.depthBuffer){let qe=b.depthTexture;if(ve.__boundDepthTexture!==qe){if(qe!==null&&k.has(qe)&&(b.width!==qe.image.width||b.height!==qe.image.height))throw new Error("THREE.WebGLRenderer: Attached DepthTexture is initialized to the incorrect size.");W.setupDepthRenderbuffer(b)}}let Te=b.texture;(Te.isData3DTexture||Te.isDataArrayTexture||Te.isCompressedArrayTexture)&&(ye=!0);let Pe=k.get(b).__webglFramebuffer;b.isWebGLCubeRenderTarget?(Array.isArray(Pe[N])?B=Pe[N][V]:B=Pe[N],z=!0):b.samples>0&&W.useMultisampledRTT(b)===!1?B=k.get(b).__webglMultisampledFramebuffer:Array.isArray(Pe)?B=Pe[V]:B=Pe,le.copy(b.viewport),Me.copy(b.scissor),Je=b.scissorTest}else le.copy(Ue).multiplyScalar(re).floor(),Me.copy(nt).multiplyScalar(re).floor(),Je=He;if(V!==0&&(B=q),_.bindFramebuffer(L.FRAMEBUFFER,B)&&_.drawBuffers(b,B),_.viewport(le),_.scissor(Me),_.setScissorTest(Je),z){let ve=k.get(b.texture);L.framebufferTexture2D(L.FRAMEBUFFER,L.COLOR_ATTACHMENT0,L.TEXTURE_CUBE_MAP_POSITIVE_X+N,ve.__webglTexture,V)}else if(ye){let ve=N;for(let Te=0;Te<b.textures.length;Te++){let Pe=k.get(b.textures[Te]);L.framebufferTextureLayer(L.FRAMEBUFFER,L.COLOR_ATTACHMENT0+Te,Pe.__webglTexture,V,ve)}}else if(b!==null&&V!==0){let ve=k.get(b.texture);L.framebufferTexture2D(L.FRAMEBUFFER,L.COLOR_ATTACHMENT0,L.TEXTURE_2D,ve.__webglTexture,V)}se=-1},this.readRenderTargetPixels=function(b,N,V,B,z,ye,Ee,ve=0){if(!(b&&b.isWebGLRenderTarget)){Fe("WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");return}let Te=k.get(b).__webglFramebuffer;if(b.isWebGLCubeRenderTarget&&Ee!==void 0&&(Te=Te[Ee]),Te){_.bindFramebuffer(L.FRAMEBUFFER,Te);try{let Pe=b.textures[ve],qe=Pe.format,Ke=Pe.type;if(b.textures.length>1&&L.readBuffer(L.COLOR_ATTACHMENT0+ve),!E.textureFormatReadable(qe)){Fe("WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}if(!E.textureTypeReadable(Ke)){Fe("WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}N>=0&&N<=b.width-B&&V>=0&&V<=b.height-z&&L.readPixels(N,V,B,z,pe.convert(qe),pe.convert(Ke),ye)}finally{let Pe=j!==null?k.get(j).__webglFramebuffer:null;_.bindFramebuffer(L.FRAMEBUFFER,Pe)}}},this.readRenderTargetPixelsAsync=async function(b,N,V,B,z,ye,Ee,ve=0){if(!(b&&b.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let Te=k.get(b).__webglFramebuffer;if(b.isWebGLCubeRenderTarget&&Ee!==void 0&&(Te=Te[Ee]),Te)if(N>=0&&N<=b.width-B&&V>=0&&V<=b.height-z){_.bindFramebuffer(L.FRAMEBUFFER,Te);let Pe=b.textures[ve],qe=Pe.format,Ke=Pe.type;if(b.textures.length>1&&L.readBuffer(L.COLOR_ATTACHMENT0+ve),!E.textureFormatReadable(qe))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!E.textureTypeReadable(Ke))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");let Le=L.createBuffer();L.bindBuffer(L.PIXEL_PACK_BUFFER,Le),L.bufferData(L.PIXEL_PACK_BUFFER,ye.byteLength,L.STREAM_READ),L.readPixels(N,V,B,z,pe.convert(qe),pe.convert(Ke),0);let at=j!==null?k.get(j).__webglFramebuffer:null;_.bindFramebuffer(L.FRAMEBUFFER,at);let bt=L.fenceSync(L.SYNC_GPU_COMMANDS_COMPLETE,0);return L.flush(),await Tu(L,bt,4),L.bindBuffer(L.PIXEL_PACK_BUFFER,Le),L.getBufferSubData(L.PIXEL_PACK_BUFFER,0,ye),L.deleteBuffer(Le),L.deleteSync(bt),ye}else throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")},this.copyFramebufferToTexture=function(b,N=null,V=0){let B=Math.pow(2,-V),z=Math.floor(b.image.width*B),ye=Math.floor(b.image.height*B),Ee=N!==null?N.x:0,ve=N!==null?N.y:0;W.setTexture2D(b,0),L.copyTexSubImage2D(L.TEXTURE_2D,V,0,0,Ee,ve,z,ye),_.unbindTexture()},this.copyTextureToTexture=function(b,N,V=null,B=null,z=0,ye=0){let Ee,ve,Te,Pe,qe,Ke,Le,at,bt,yt=b.isCompressedTexture?b.mipmaps[ye]:b.image;if(V!==null)Ee=V.max.x-V.min.x,ve=V.max.y-V.min.y,Te=V.isBox3?V.max.z-V.min.z:1,Pe=V.min.x,qe=V.min.y,Ke=V.isBox3?V.min.z:0;else{let Mt=Math.pow(2,-z);Ee=Math.floor(yt.width*Mt),ve=Math.floor(yt.height*Mt),b.isDataArrayTexture?Te=yt.depth:b.isData3DTexture?Te=Math.floor(yt.depth*Mt):Te=1,Pe=0,qe=0,Ke=0}B!==null?(Le=B.x,at=B.y,bt=B.z):(Le=0,at=0,bt=0);let ht=pe.convert(N.format),Ot=pe.convert(N.type),Se;N.isData3DTexture?(W.setTexture3D(N,0),Se=L.TEXTURE_3D):N.isDataArrayTexture||N.isCompressedArrayTexture?(W.setTexture2DArray(N,0),Se=L.TEXTURE_2D_ARRAY):(W.setTexture2D(N,0),Se=L.TEXTURE_2D),_.activeTexture(L.TEXTURE0),_.pixelStorei(L.UNPACK_FLIP_Y_WEBGL,N.flipY),_.pixelStorei(L.UNPACK_PREMULTIPLY_ALPHA_WEBGL,N.premultiplyAlpha),_.pixelStorei(L.UNPACK_ALIGNMENT,N.unpackAlignment);let $t=_.getParameter(L.UNPACK_ROW_LENGTH),tt=_.getParameter(L.UNPACK_IMAGE_HEIGHT),sn=_.getParameter(L.UNPACK_SKIP_PIXELS),En=_.getParameter(L.UNPACK_SKIP_ROWS),Yn=_.getParameter(L.UNPACK_SKIP_IMAGES);_.pixelStorei(L.UNPACK_ROW_LENGTH,yt.width),_.pixelStorei(L.UNPACK_IMAGE_HEIGHT,yt.height),_.pixelStorei(L.UNPACK_SKIP_PIXELS,Pe),_.pixelStorei(L.UNPACK_SKIP_ROWS,qe),_.pixelStorei(L.UNPACK_SKIP_IMAGES,Ke);let ki=b.isDataArrayTexture||b.isData3DTexture,ut=N.isDataArrayTexture||N.isData3DTexture;if(b.isDepthTexture){let Mt=k.get(b),Zn=k.get(N),ft=k.get(Mt.__renderTarget),$n=k.get(Zn.__renderTarget);_.bindFramebuffer(L.READ_FRAMEBUFFER,ft.__webglFramebuffer),_.bindFramebuffer(L.DRAW_FRAMEBUFFER,$n.__webglFramebuffer);for(let Vi=0;Vi<Te;Vi++)ki&&(L.framebufferTextureLayer(L.READ_FRAMEBUFFER,L.COLOR_ATTACHMENT0,k.get(b).__webglTexture,z,Ke+Vi),L.framebufferTextureLayer(L.DRAW_FRAMEBUFFER,L.COLOR_ATTACHMENT0,k.get(N).__webglTexture,ye,bt+Vi)),L.blitFramebuffer(Pe,qe,Ee,ve,Le,at,Ee,ve,L.DEPTH_BUFFER_BIT,L.NEAREST);_.bindFramebuffer(L.READ_FRAMEBUFFER,null),_.bindFramebuffer(L.DRAW_FRAMEBUFFER,null)}else if(z!==0||b.isRenderTargetTexture||k.has(b)){let Mt=k.get(b),Zn=k.get(N);_.bindFramebuffer(L.READ_FRAMEBUFFER,Y),_.bindFramebuffer(L.DRAW_FRAMEBUFFER,U);for(let ft=0;ft<Te;ft++)ki?L.framebufferTextureLayer(L.READ_FRAMEBUFFER,L.COLOR_ATTACHMENT0,Mt.__webglTexture,z,Ke+ft):L.framebufferTexture2D(L.READ_FRAMEBUFFER,L.COLOR_ATTACHMENT0,L.TEXTURE_2D,Mt.__webglTexture,z),ut?L.framebufferTextureLayer(L.DRAW_FRAMEBUFFER,L.COLOR_ATTACHMENT0,Zn.__webglTexture,ye,bt+ft):L.framebufferTexture2D(L.DRAW_FRAMEBUFFER,L.COLOR_ATTACHMENT0,L.TEXTURE_2D,Zn.__webglTexture,ye),z!==0?L.blitFramebuffer(Pe,qe,Ee,ve,Le,at,Ee,ve,L.COLOR_BUFFER_BIT,L.NEAREST):ut?L.copyTexSubImage3D(Se,ye,Le,at,bt+ft,Pe,qe,Ee,ve):L.copyTexSubImage2D(Se,ye,Le,at,Pe,qe,Ee,ve);_.bindFramebuffer(L.READ_FRAMEBUFFER,null),_.bindFramebuffer(L.DRAW_FRAMEBUFFER,null)}else ut?b.isDataTexture||b.isData3DTexture?L.texSubImage3D(Se,ye,Le,at,bt,Ee,ve,Te,ht,Ot,yt.data):N.isCompressedArrayTexture?L.compressedTexSubImage3D(Se,ye,Le,at,bt,Ee,ve,Te,ht,yt.data):L.texSubImage3D(Se,ye,Le,at,bt,Ee,ve,Te,ht,Ot,yt):b.isDataTexture?L.texSubImage2D(L.TEXTURE_2D,ye,Le,at,Ee,ve,ht,Ot,yt.data):b.isCompressedTexture?L.compressedTexSubImage2D(L.TEXTURE_2D,ye,Le,at,yt.width,yt.height,ht,yt.data):L.texSubImage2D(L.TEXTURE_2D,ye,Le,at,Ee,ve,ht,Ot,yt);_.pixelStorei(L.UNPACK_ROW_LENGTH,$t),_.pixelStorei(L.UNPACK_IMAGE_HEIGHT,tt),_.pixelStorei(L.UNPACK_SKIP_PIXELS,sn),_.pixelStorei(L.UNPACK_SKIP_ROWS,En),_.pixelStorei(L.UNPACK_SKIP_IMAGES,Yn),ye===0&&N.generateMipmaps&&L.generateMipmap(Se),_.unbindTexture()},this.initRenderTarget=function(b){k.get(b).__webglFramebuffer===void 0&&W.setupRenderTarget(b)},this.initTexture=function(b){b.isCubeTexture?W.setTextureCube(b,0):b.isData3DTexture?W.setTexture3D(b,0):b.isDataArrayTexture||b.isCompressedArrayTexture?W.setTexture2DArray(b,0):W.setTexture2D(b,0),_.unbindTexture()},this.resetState=function(){G=0,H=0,j=null,_.reset(),be.reset()},typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}get coordinateSystem(){return pn}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(e){this._outputColorSpace=e;let t=this.getContext();t.drawingBufferColorSpace=Qe._getDrawingBufferColorSpace(e),t.unpackColorSpace=Qe._getUnpackColorSpace()}};var ud={type:"change"},kc={type:"start"},fd={type:"end"},tl=new si,dd=new on,_x=Math.cos(70*xc.DEG2RAD),Rt=new R,Zt=2*Math.PI,lt={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},zc=1e-6,nl=class extends gr{constructor(e,t=null){super(e,t),this.state=lt.NONE,this.target=new R,this.cursor=new R,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minTargetRadius=0,this.maxTargetRadius=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.keyRotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.zoomToCursor=!1,this.autoRotate=!1,this.autoRotateSpeed=2,this.keys={LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"},this.mouseButtons={LEFT:ui.ROTATE,MIDDLE:ui.DOLLY,RIGHT:ui.PAN},this.touches={ONE:di.ROTATE,TWO:di.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._cursorStyle="auto",this._domElementKeyEvents=null,this._lastPosition=new R,this._lastQuaternion=new Ft,this._lastTargetPosition=new R,this._quat=new Ft().setFromUnitVectors(e.up,new R(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new vs,this._sphericalDelta=new vs,this._scale=1,this._panOffset=new R,this._rotateStart=new te,this._rotateEnd=new te,this._rotateDelta=new te,this._panStart=new te,this._panEnd=new te,this._panDelta=new te,this._dollyStart=new te,this._dollyEnd=new te,this._dollyDelta=new te,this._dollyDirection=new R,this._mouse=new te,this._performCursorZoom=!1,this._pointers=[],this._pointerPositions={},this._controlActive=!1,this._onPointerMove=vx.bind(this),this._onPointerDown=xx.bind(this),this._onPointerUp=yx.bind(this),this._onContextMenu=Ax.bind(this),this._onMouseWheel=Sx.bind(this),this._onKeyDown=Ex.bind(this),this._onTouchStart=wx.bind(this),this._onTouchMove=Tx.bind(this),this._onMouseDown=bx.bind(this),this._onMouseMove=Mx.bind(this),this._interceptControlDown=Cx.bind(this),this._interceptControlUp=Rx.bind(this),this.domElement!==null&&this.connect(this.domElement),this.update()}set cursorStyle(e){this._cursorStyle=e,e==="grab"?this.domElement.style.cursor="grab":this.domElement.style.cursor="auto"}get cursorStyle(){return this._cursorStyle}connect(e){super.connect(e),this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointercancel",this._onPointerUp),this.domElement.addEventListener("contextmenu",this._onContextMenu),this.domElement.addEventListener("wheel",this._onMouseWheel,{passive:!1}),this.domElement.getRootNode().addEventListener("keydown",this._interceptControlDown,{passive:!0,capture:!0}),this.domElement.style.touchAction="none"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.ownerDocument.removeEventListener("pointermove",this._onPointerMove),this.domElement.ownerDocument.removeEventListener("pointerup",this._onPointerUp),this.domElement.removeEventListener("pointercancel",this._onPointerUp),this.domElement.removeEventListener("wheel",this._onMouseWheel),this.domElement.removeEventListener("contextmenu",this._onContextMenu),this.stopListenToKeyEvents(),this.domElement.getRootNode().removeEventListener("keydown",this._interceptControlDown,{capture:!0}),this.domElement.style.touchAction=""}dispose(){this.disconnect()}getPolarAngle(){return this._spherical.phi}getAzimuthalAngle(){return this._spherical.theta}getDistance(){return this.object.position.distanceTo(this.target)}listenToKeyEvents(e){e.addEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=e}stopListenToKeyEvents(){this._domElementKeyEvents!==null&&(this._domElementKeyEvents.removeEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=null)}saveState(){this.target0.copy(this.target),this.position0.copy(this.object.position),this.zoom0=this.object.zoom}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.updateProjectionMatrix(),this.dispatchEvent(ud),this.update(),this.state=lt.NONE}pan(e,t){this._pan(e,t),this.update()}dollyIn(e){this._dollyIn(e),this.update()}dollyOut(e){this._dollyOut(e),this.update()}rotateLeft(e){this._rotateLeft(e),this.update()}rotateUp(e){this._rotateUp(e),this.update()}update(e=null){let t=this.object.position;Rt.copy(t).sub(this.target),Rt.applyQuaternion(this._quat),this._spherical.setFromVector3(Rt),this.autoRotate&&this.state===lt.NONE&&this._rotateLeft(this._getAutoRotationAngle(e)),this.enableDamping?(this._spherical.theta+=this._sphericalDelta.theta*this.dampingFactor,this._spherical.phi+=this._sphericalDelta.phi*this.dampingFactor):(this._spherical.theta+=this._sphericalDelta.theta,this._spherical.phi+=this._sphericalDelta.phi);let n=this.minAzimuthAngle,s=this.maxAzimuthAngle;isFinite(n)&&isFinite(s)&&(n<-Math.PI?n+=Zt:n>Math.PI&&(n-=Zt),s<-Math.PI?s+=Zt:s>Math.PI&&(s-=Zt),n<=s?this._spherical.theta=Math.max(n,Math.min(s,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(n+s)/2?Math.max(n,this._spherical.theta):Math.min(s,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let r=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{let o=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),r=o!=this._spherical.radius}if(Rt.setFromSpherical(this._spherical),Rt.applyQuaternion(this._quatInverse),t.copy(this.target).add(Rt),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let o=null;if(this.object.isPerspectiveCamera){let a=Rt.length();o=this._clampDistance(a*this._scale);let l=a-o;this.object.position.addScaledVector(this._dollyDirection,l),this.object.updateMatrixWorld(),r=!!l}else if(this.object.isOrthographicCamera){let a=new R(this._mouse.x,this._mouse.y,0);a.unproject(this.object);let l=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),r=l!==this.object.zoom;let c=new R(this._mouse.x,this._mouse.y,0);c.unproject(this.object),this.object.position.sub(c).add(a),this.object.updateMatrixWorld(),o=Rt.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;o!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(o).add(this.object.position):(tl.origin.copy(this.object.position),tl.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(tl.direction))<_x?this.object.lookAt(this.target):(dd.setFromNormalAndCoplanarPoint(this.object.up,this.target),tl.intersectPlane(dd,this.target))))}else if(this.object.isOrthographicCamera){let o=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),o!==this.object.zoom&&(this.object.updateProjectionMatrix(),r=!0)}return this._scale=1,this._performCursorZoom=!1,r||this._lastPosition.distanceToSquared(this.object.position)>zc||8*(1-this._lastQuaternion.dot(this.object.quaternion))>zc||this._lastTargetPosition.distanceToSquared(this.target)>zc?(this.dispatchEvent(ud),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e!==null?Zt/60*this.autoRotateSpeed*e:Zt/60/60*this.autoRotateSpeed}_getZoomScale(e){let t=Math.abs(e*.01);return Math.pow(.95,this.zoomSpeed*t)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,t){Rt.setFromMatrixColumn(t,0),Rt.multiplyScalar(-e),this._panOffset.add(Rt)}_panUp(e,t){this.screenSpacePanning===!0?Rt.setFromMatrixColumn(t,1):(Rt.setFromMatrixColumn(t,0),Rt.crossVectors(this.object.up,Rt)),Rt.multiplyScalar(e),this._panOffset.add(Rt)}_pan(e,t){let n=this.domElement;if(this.object.isPerspectiveCamera){let s=this.object.position;Rt.copy(s).sub(this.target);let r=Rt.length();r*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*r/n.clientHeight,this.object.matrix),this._panUp(2*t*r/n.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/n.clientWidth,this.object.matrix),this._panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/n.clientHeight,this.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(e,t){if(!this.zoomToCursor)return;this._performCursorZoom=!0;let n=this.domElement.getBoundingClientRect(),s=e-n.left,r=t-n.top,o=n.width,a=n.height;this._mouse.x=s/o*2-1,this._mouse.y=-(r/a)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;this._rotateLeft(Zt*this._rotateDelta.x/t.clientHeight),this._rotateUp(Zt*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY<0?this._dollyIn(this._getZoomScale(e.deltaY)):e.deltaY>0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let t=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(Zt*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),t=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(-Zt*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),t=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(Zt*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),t=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(-Zt*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),t=!0;break}t&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(this._pointers.length===1)this._rotateStart.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._rotateStart.set(n,s)}}_handleTouchStartPan(e){if(this._pointers.length===1)this._panStart.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._panStart.set(n,s)}}_handleTouchStartDolly(e){let t=this._getSecondPointerPosition(e),n=e.pageX-t.x,s=e.pageY-t.y,r=Math.sqrt(n*n+s*s);this._dollyStart.set(0,r)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(this._pointers.length==1)this._rotateEnd.set(e.pageX,e.pageY);else{let n=this._getSecondPointerPosition(e),s=.5*(e.pageX+n.x),r=.5*(e.pageY+n.y);this._rotateEnd.set(s,r)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;this._rotateLeft(Zt*this._rotateDelta.x/t.clientHeight),this._rotateUp(Zt*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(this._pointers.length===1)this._panEnd.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._panEnd.set(n,s)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){let t=this._getSecondPointerPosition(e),n=e.pageX-t.x,s=e.pageY-t.y,r=Math.sqrt(n*n+s*s);this._dollyEnd.set(0,r),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);let o=(e.pageX+t.x)*.5,a=(e.pageY+t.y)*.5;this._updateZoomParameters(o,a)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let t=0;t<this._pointers.length;t++)if(this._pointers[t]==e.pointerId){this._pointers.splice(t,1);return}}_isTrackingPointer(e){for(let t=0;t<this._pointers.length;t++)if(this._pointers[t]==e.pointerId)return!0;return!1}_trackPointer(e){let t=this._pointerPositions[e.pointerId];t===void 0&&(t=new te,this._pointerPositions[e.pointerId]=t),t.set(e.pageX,e.pageY)}_getSecondPointerPosition(e){let t=e.pointerId===this._pointers[0]?this._pointers[1]:this._pointers[0];return this._pointerPositions[t]}_customWheelEvent(e){let t=e.deltaMode,n={clientX:e.clientX,clientY:e.clientY,deltaY:e.deltaY};switch(t){case 1:n.deltaY*=16;break;case 2:n.deltaY*=100;break}return e.ctrlKey&&!this._controlActive&&(n.deltaY*=10),n}};function xx(i){this.enabled!==!1&&(this._pointers.length===0&&(this.domElement.setPointerCapture(i.pointerId),this.domElement.ownerDocument.addEventListener("pointermove",this._onPointerMove),this.domElement.ownerDocument.addEventListener("pointerup",this._onPointerUp)),!this._isTrackingPointer(i)&&(this._addPointer(i),i.pointerType==="touch"?this._onTouchStart(i):this._onMouseDown(i),this._cursorStyle==="grab"&&(this.domElement.style.cursor="grabbing")))}function vx(i){this.enabled!==!1&&(i.pointerType==="touch"?this._onTouchMove(i):this._onMouseMove(i))}function yx(i){switch(this._removePointer(i),this._pointers.length){case 0:this.domElement.releasePointerCapture(i.pointerId),this.domElement.ownerDocument.removeEventListener("pointermove",this._onPointerMove),this.domElement.ownerDocument.removeEventListener("pointerup",this._onPointerUp),this.dispatchEvent(fd),this.state=lt.NONE,this._cursorStyle==="grab"&&(this.domElement.style.cursor="grab");break;case 1:let e=this._pointers[0],t=this._pointerPositions[e];this._onTouchStart({pointerId:e,pageX:t.x,pageY:t.y});break}}function bx(i){let e;switch(i.button){case 0:e=this.mouseButtons.LEFT;break;case 1:e=this.mouseButtons.MIDDLE;break;case 2:e=this.mouseButtons.RIGHT;break;default:e=-1}switch(e){case ui.DOLLY:if(this.enableZoom===!1)return;this._handleMouseDownDolly(i),this.state=lt.DOLLY;break;case ui.ROTATE:if(i.ctrlKey||i.metaKey||i.shiftKey){if(this.enablePan===!1)return;this._handleMouseDownPan(i),this.state=lt.PAN}else{if(this.enableRotate===!1)return;this._handleMouseDownRotate(i),this.state=lt.ROTATE}break;case ui.PAN:if(i.ctrlKey||i.metaKey||i.shiftKey){if(this.enableRotate===!1)return;this._handleMouseDownRotate(i),this.state=lt.ROTATE}else{if(this.enablePan===!1)return;this._handleMouseDownPan(i),this.state=lt.PAN}break;default:this.state=lt.NONE}this.state!==lt.NONE&&this.dispatchEvent(kc)}function Mx(i){switch(this.state){case lt.ROTATE:if(this.enableRotate===!1)return;this._handleMouseMoveRotate(i);break;case lt.DOLLY:if(this.enableZoom===!1)return;this._handleMouseMoveDolly(i);break;case lt.PAN:if(this.enablePan===!1)return;this._handleMouseMovePan(i);break}}function Sx(i){this.enabled===!1||this.enableZoom===!1||this.state!==lt.NONE||(i.preventDefault(),this.dispatchEvent(kc),this._handleMouseWheel(this._customWheelEvent(i)),this.dispatchEvent(fd))}function Ex(i){this.enabled!==!1&&this._handleKeyDown(i)}function wx(i){switch(this._trackPointer(i),this._pointers.length){case 1:switch(this.touches.ONE){case di.ROTATE:if(this.enableRotate===!1)return;this._handleTouchStartRotate(i),this.state=lt.TOUCH_ROTATE;break;case di.PAN:if(this.enablePan===!1)return;this._handleTouchStartPan(i),this.state=lt.TOUCH_PAN;break;default:this.state=lt.NONE}break;case 2:switch(this.touches.TWO){case di.DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchStartDollyPan(i),this.state=lt.TOUCH_DOLLY_PAN;break;case di.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchStartDollyRotate(i),this.state=lt.TOUCH_DOLLY_ROTATE;break;default:this.state=lt.NONE}break;default:this.state=lt.NONE}this.state!==lt.NONE&&this.dispatchEvent(kc)}function Tx(i){switch(this._trackPointer(i),this.state){case lt.TOUCH_ROTATE:if(this.enableRotate===!1)return;this._handleTouchMoveRotate(i),this.update();break;case lt.TOUCH_PAN:if(this.enablePan===!1)return;this._handleTouchMovePan(i),this.update();break;case lt.TOUCH_DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchMoveDollyPan(i),this.update();break;case lt.TOUCH_DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchMoveDollyRotate(i),this.update();break;default:this.state=lt.NONE}}function Ax(i){this.enabled!==!1&&i.preventDefault()}function Cx(i){i.key==="Control"&&(this._controlActive=!0,this.domElement.getRootNode().addEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}function Rx(i){i.key==="Control"&&(this._controlActive=!1,this.domElement.getRootNode().removeEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}function Vc(i){let e=md(i);return new Float32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4))}function pd(i){let e=md(i);return new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4))}function md(i){let e=atob(i),t=new Uint8Array(e.length);for(let n=0;n<e.length;n++)t[n]=e.charCodeAt(n);return t}var Rr=.85,Hc=3,Px=400,Nt=(i,e,t)=>new R(i,e,t),gd=[["TOP",Nt(0,0,1)],["BOTTOM",Nt(0,0,-1)],["FRONT",Nt(0,-1,0)],["BACK",Nt(0,1,0)],["RIGHT",Nt(1,0,0)],["LEFT",Nt(-1,0,0)]],Ix=[{name:"TOP",normal:Nt(0,0,1),up:Nt(0,1,0)},{name:"BOTTOM",normal:Nt(0,0,-1),up:Nt(0,1,0)},{name:"FRONT",normal:Nt(0,-1,0),up:Nt(0,0,1)},{name:"BACK",normal:Nt(0,1,0),up:Nt(0,0,1)},{name:"RIGHT",normal:Nt(1,0,0),up:Nt(0,0,1)},{name:"LEFT",normal:Nt(-1,0,0),up:Nt(0,0,1)}];function Lx(i){let e=[],t=i.length();for(let[n,s]of gd)i.dot(s)/t>.5&&e.push(n);return e.sort().join("-")}function Dx(i){let e=document.createElement("canvas");e.width=128,e.height=128;let t=e.getContext("2d");t!==null&&(t.fillStyle="rgba(246, 248, 251, 0.96)",t.fillRect(0,0,128,128),t.strokeStyle="rgba(148, 158, 172, 0.9)",t.lineWidth=3,t.strokeRect(1.5,1.5,125,125),t.fillStyle="#5b6472",t.font=`600 ${i.length>2?24:28}px -apple-system, "Segoe UI", sans-serif`,t.textAlign="center",t.textBaseline="middle",t.fillText(i,64,66));let n=new Pi(e);return n.anisotropy=4,n}var Pr=class{constructor(e){this.options=e;let{container:t,camera:n,controls:s}=e;this.camera=n,this.controls=s;let r=e.size??96;getComputedStyle(t).position==="static"&&(t.style.position="relative"),this.overlay=document.createElement("div"),this.overlay.style.cssText=`position:absolute;top:8px;right:8px;width:${r}px;display:flex;flex-direction:column;align-items:center;gap:3px;z-index:5;user-select:none;`,t.appendChild(this.overlay);let o=document.createElement("div");o.style.cssText=`width:${r}px;height:${r}px;cursor:grab;`,this.overlay.appendChild(o),this.caption=document.createElement("div"),this.caption.style.cssText='min-height:14px;font:500 10px/14px -apple-system,"Segoe UI",sans-serif;color:var(--dsw-alias-label-secondary,#374151);background:var(--dsw-alias-bg-base,rgba(255,255,255,0.85));border-radius:7px;padding:0 7px;opacity:0;transition:opacity 120ms;text-align:center;white-space:nowrap;',this.overlay.appendChild(this.caption);let a=document.createElement("button");a.type="button",a.title="Reset view",a.setAttribute("aria-label","Reset view"),a.style.cssText="width:22px;height:22px;border-radius:50%;border:1px solid var(--dsw-alias-border-l2,#c4c9d0);background:var(--dsw-alias-bg-base,#fff);color:var(--dsw-alias-label-secondary,#374151);font-size:12px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;",a.textContent="\u2302",a.addEventListener("click",()=>{e.onHome?.()}),this.overlay.appendChild(a),this.renderer=new ws({antialias:!0,alpha:!0}),this.renderer.setPixelRatio(window.devicePixelRatio),this.renderer.setSize(r,r),this.renderer.domElement.style.cssText="width:100%;height:100%;display:block;touch-action:none;",o.appendChild(this.renderer.domElement),this.overlayCamera.position.set(0,0,4),this.overlayCamera.lookAt(0,0,0),new ii().add(this.root),this.buildCube();let c=d=>{let u=this.renderer.domElement.getBoundingClientRect(),f=new te((d.clientX-u.left)/u.width*2-1,-((d.clientY-u.top)/u.height)*2+1);this.raycaster.setFromCamera(f,this.overlayCamera);let g=this.raycaster.intersectObjects(this.cells,!1)[0];return g===void 0?{zone:null,point:null}:{zone:g.object.userData.zone,point:g.point}},h=this.renderer.domElement;h.addEventListener("pointermove",d=>{let{zone:u}=c(d);this.setHover(u),h.style.cursor=u===null?"grab":"pointer"}),h.addEventListener("pointerleave",()=>{this.setHover(null)}),h.addEventListener("click",d=>{let{zone:u}=c(d);if(u===null)return;let f=Nx(u);f!==null&&this.animateTo(f)})}options;camera;controls;renderer;overlayCamera=new ci(-1.35,1.35,1.35,-1.35,.1,10);root=new Vt;cells=[];zoneCells=new Map;hiddenMaterial=new an({visible:!1});highlightMaterial=new an({color:5073918,transparent:!0,opacity:.55,depthWrite:!1});disposables=[this.hiddenMaterial,this.highlightMaterial];raycaster=new Di;overlay;caption;hovered=null;tweenId=0;disposed=!1;buildCube(){let e=2*Rr/Hc;for(let t of Ix){let n=t.up.clone().cross(t.normal),s=new rt().makeBasis(n,t.up,t.normal),r=new Vt;r.quaternion.setFromRotationMatrix(s);let o=Dx(t.name);this.disposables.push(o);let a=new an({map:o,transparent:!0});this.disposables.push(a);let l=new Tt(new ri(2*Rr,2*Rr),a);l.position.set(0,0,Rr),r.add(l),this.disposables.push(l.geometry);let c=new ri(e*1.02,e*1.02);this.disposables.push(c);for(let h=0;h<Hc;h++)for(let d=0;d<Hc;d++){let u=new Tt(c,this.hiddenMaterial);u.position.set((h-1)*e,(d-1)*e,Rr+.004);let f=t.normal.clone().addScaledVector(n,h-1).addScaledVector(t.up,d-1),g=Lx(f);u.userData.zone=g,r.add(u),this.cells.push(u);let y=this.zoneCells.get(g);y===void 0?this.zoneCells.set(g,[u]):y.push(u)}this.root.add(r)}}setHover(e){if(e!==this.hovered){for(let t of this.hovered===null?[]:this.zoneCells.get(this.hovered)??[])t.material=this.hiddenMaterial;this.hovered=e;for(let t of e===null?[]:this.zoneCells.get(e)??[])t.material=this.highlightMaterial;this.caption.textContent=e,this.caption.style.opacity=e===null?"0":"1"}}animateTo(e){let t=this.camera,n=this.controls,s=t.position.distanceTo(n.target),r=t.position.clone().sub(n.target).normalize(),o=e.clone().normalize();if(r.dot(o)>.9999)return;let a=new Ft().setFromUnitVectors(r,o),l=new Ft;n.enabled=!1,cancelAnimationFrame(this.tweenId);let c=performance.now(),h=()=>{if(this.disposed)return;let d=Math.min(1,(performance.now()-c)/Px),u=1-Math.pow(1-d,3),f=new Ft().slerpQuaternions(l,a,u);t.position.copy(r).applyQuaternion(f).multiplyScalar(s).add(n.target),t.lookAt(n.target),d<1?this.tweenId=requestAnimationFrame(h):(n.enabled=!0,n.update())};this.tweenId=requestAnimationFrame(h)}update(){this.disposed||(this.root.quaternion.copy(this.camera.quaternion).invert(),this.renderer.render(this.root.parent,this.overlayCamera))}dispose(){if(!this.disposed){this.disposed=!0,cancelAnimationFrame(this.tweenId),this.controls.enabled=!0;for(let e of this.disposables)e.dispose();this.renderer.dispose(),this.overlay.remove()}}};function Nx(i){let e=i.split("-"),t=new R,n=0;for(let[s,r]of gd)e.includes(s)&&(t.add(r),n++);return n===0||t.lengthSq()===0?null:t.normalize()}var Ux=25,_d=5073918,xd=16751165,Fx=6;function As(i,e,t){return`${Math.round(i*1e5)},${Math.round(e*1e5)},${Math.round(t*1e5)}`}var il=class{parent;constructor(e){this.parent=new Int32Array(e);for(let t=0;t<e;t++)this.parent[t]=t}find(e){for(;this.parent[e]!==e;)this.parent[e]=this.parent[this.parent[e]],e=this.parent[e];return e}union(e,t){let n=this.find(e),s=this.find(t);n!==s&&(this.parent[s]=n)}};function Ox(i){let e=i.geometry,t=e.getAttribute("position"),n=e.getIndex(),s=t.array,r=Math.floor((n!==null?n.count:t.count)/3),o=(x,S)=>n!==null?n.getX(x*3+S):x*3+S,a=[],l=new Float64Array(r),c=new R,h=new R,d=new R,u=new R,f=new R;for(let x=0;x<r;x++){c.fromArray(s,o(x,0)*3),h.fromArray(s,o(x,1)*3),d.fromArray(s,o(x,2)*3),u.subVectors(h,c),f.subVectors(d,c);let S=new R().crossVectors(u,f);l[x]=S.length()/2,a.push(S.normalize())}let g=new Map;for(let x=0;x<r;x++)for(let S=0;S<3;S++){let M=o(x,S)*3,A=o(x,(S+1)%3)*3,v=As(s[M],s[M+1],s[M+2]),w=As(s[A],s[A+1],s[A+2]),I=v<w?`${v}|${w}`:`${w}|${v}`,P=g.get(I);P===void 0?g.set(I,[{tri:x,ka:v,kb:w}]):P.push({tri:x,ka:v,kb:w})}let y=Math.cos(Ux*Math.PI/180),m=new il(r);for(let x of g.values())for(let S=0;S<x.length;S++)for(let M=S+1;M<x.length;M++){let A=x[S],v=x[M];A===void 0||v===void 0||A.ka===v.ka&&A.kb===v.kb||a[A.tri].dot(a[v.tri])>=y&&m.union(A.tri,v.tri)}let p=new Map,C=new Uint32Array(r),T=[];for(let x=0;x<r;x++){let S=m.find(x),M=p.get(S);M===void 0&&(M=T.length,p.set(S,M),T.push({triangles:[],area:0})),C[x]=M;let A=T[M];A!==void 0&&(A.triangles.push(x),A.area+=l[x])}return{regionOf:C,regions:T}}function Bx(i,e,t){let n=i.geometry,s=n.getAttribute("position"),r=n.getIndex(),o=s.array,a=Math.floor((r!==null?r.count:s.count)/3),l=(x,S)=>r!==null?r.getX(x*3+S):x*3+S,c=new Map;for(let x=0;x<a;x++){let S=e.regionOf[x];for(let M=0;M<3;M++){let A=l(x,M)*3,v=l(x,(M+1)%3)*3,w=As(o[A],o[A+1],o[A+2]),I=As(o[v],o[v+1],o[v+2]),P=w<I?`${w}|${I}`:`${I}|${w}`,O=c.get(P);O===void 0?c.set(P,[S]):O.includes(S)||O.push(S)}}let h=t.length/6,d=new il(h),u=new Map,f=[];for(let x=0;x<h;x++){let S=t[x*6],M=t[x*6+1],A=t[x*6+2],v=t[x*6+3],w=t[x*6+4],I=t[x*6+5],P=As(S,M,A),O=As(v,w,I);f.push([P,O]);let q=u.get(P);q===void 0?u.set(P,[x]):q.push(x);let Y=u.get(O);Y===void 0?u.set(O,[x]):Y.push(x)}let g=x=>{let[S,M]=f[x]??["",""],A=S<M?`${S}|${M}`:`${M}|${S}`;return(c.get(A)??[]).slice().sort((v,w)=>v-w).join(",")},y=[];for(let x=0;x<h;x++)y.push(g(x));for(let x=0;x<h;x++){let[S,M]=f[x]??["",""];for(let A of[S,M]){let v=u.get(A)??[];for(let w of v)w<=x||y[x]===y[w]&&d.union(x,w)}}let m=new Map,p=new Uint32Array(h),C=[];for(let x=0;x<h;x++){let S=d.find(x),M=m.get(S);M===void 0&&(M=C.length,m.set(S,M),C.push({length:0,closed:!0})),p[x]=M;let A=C[M];if(A!==void 0){let v=t[x*6+3]-t[x*6],w=t[x*6+4]-t[x*6+1],I=t[x*6+5]-t[x*6+2];A.length+=Math.sqrt(v*v+w*w+I*I)}}let T=new Map;for(let x=0;x<h;x++){let[S,M]=f[x]??["",""],A=p[x];T.set(`${A}:${S}`,(T.get(`${A}:${S}`)??0)+1),T.set(`${A}:${M}`,(T.get(`${A}:${M}`)??0)+1)}for(let x=0;x<C.length;x++){let S=!0,M=!1;for(let v=0;v<h;v++){if(p[v]!==x)continue;M=!0;let[w,I]=f[v]??["",""];((T.get(`${x}:${w}`)??0)!==2||(T.get(`${x}:${I}`)??0)!==2)&&(S=!1)}let A=C[x];A!==void 0&&(A.closed=M&&S)}return{groupOf:p,groups:C}}var Ir=class{constructor(e){this.options=e;let{domElement:t,cad:n}=e;for(let r of[this.hoverFaceMesh,this.selectFaceMesh,this.hoverEdgeLines,this.selectEdgeLines])r.raycast=()=>{},r.renderOrder=r instanceof xn?3:2,r.visible=!1;this.disposables.push(this.hoverFaceMesh.material,this.hoverFaceMesh.geometry,this.selectFaceMesh.material,this.selectFaceMesh.geometry,this.hoverEdgeLines.material,this.hoverEdgeLines.geometry,this.selectEdgeLines.material,this.selectEdgeLines.geometry);let s=new gn().setFromObject(n).getSize(new R);this.center=new gn().setFromObject(n).getCenter(new R),this.label=document.createElement("div"),this.label.style.cssText='position:absolute;left:8px;bottom:8px;z-index:5;pointer-events:none;font:500 11px/16px -apple-system,"Segoe UI",sans-serif;color:var(--dsw-alias-label-secondary,#374151);background:var(--dsw-alias-bg-base,rgba(255,255,255,0.88));border:1px solid var(--dsw-alias-border-l1,rgba(215,219,224,0.7));border-radius:8px;padding:2px 8px;opacity:0;transition:opacity 120ms;white-space:nowrap;',t.addEventListener("pointermove",this.onPointerMove),t.addEventListener("pointerleave",this.onPointerLeave),t.addEventListener("pointerdown",this.onPointerDown),t.addEventListener("pointerup",this.onPointerUp)}options;raycaster=new Di;meshes=[];faceCache=new Map;edgeCache=new Map;label;hover=null;selection=null;down=null;disposed=!1;center;disposables=[];hoverFaceMesh=new Tt(new mt,new an({color:_d,transparent:!0,opacity:.35,depthWrite:!1,polygonOffset:!0,polygonOffsetFactor:-2,polygonOffsetUnits:-2}));selectFaceMesh=new Tt(new mt,new an({color:xd,transparent:!0,opacity:.45,depthWrite:!1,polygonOffset:!0,polygonOffsetFactor:-3,polygonOffsetUnits:-3}));hoverEdgeLines=new xn(new mt,new _n({color:_d,depthTest:!1,transparent:!0,opacity:.95}));selectEdgeLines=new xn(new mt,new _n({color:xd,depthTest:!1,transparent:!0,opacity:1}));meshesOf(){return this.meshes.length=0,this.options.cad.traverse(e=>{e.isMesh&&this.meshes.push(e)}),this.meshes}facesOf(e){let t=this.faceCache.get(e);return t===void 0&&(t=Ox(e),this.faceCache.set(e,t)),t}edgesOf(e){let t=e.userData.edges;if(t===void 0)return null;let n=this.edgeCache.get(e);if(n===void 0){let r=t.geometry.getAttribute("position").array;n=Bx(e,this.facesOf(e),r),this.edgeCache.set(e,n)}let s=t.geometry.getAttribute("position").array;return{groups:n,segments:s}}pick(e){let{domElement:t,camera:n}=this.options,s=t.getBoundingClientRect(),r=new te((e.clientX-s.left)/s.width*2-1,-((e.clientY-s.top)/s.height)*2+1);this.raycaster.setFromCamera(r,n);let o=this.meshesOf(),a=this.raycaster.intersectObjects(o,!1)[0],c=2*(a?.distance??n.position.distanceTo(this.center))*Math.tan(n.fov*Math.PI/180/2)/Math.max(s.height,1),h=Fx*c;this.raycaster.params.Line.threshold=h;let d=null;for(let f of o){let g=f.userData.edges;if(g===void 0)continue;let m=this.raycaster.intersectObject(g,!1)[0];if(m!==void 0&&(d===null||m.distance<d.distance)){let p=Math.floor((m.index??0)/2);d={mesh:f,distance:m.distance,segment:p}}}if(d!==null&&(a===void 0||d.distance<=a.distance+h)){let f=this.edgesOf(d.mesh);if(f!==null)return{kind:"edge",mesh:d.mesh,group:f.groups.groupOf[d.segment]??0}}if(a===void 0||a.face===void 0)return null;let u=this.facesOf(a.object).regionOf[a.faceIndex??0]??0;return{kind:"face",mesh:a.object,region:u}}onPointerMove=e=>{if(!this.disposed){if(e.buttons!==0){this.setHover(null);return}this.setHover(this.pick(e))}};onPointerLeave=()=>{this.setHover(null)};onPointerDown=e=>{e.button===0&&(this.down={x:e.clientX,y:e.clientY,at:performance.now()})};onPointerUp=e=>{if(this.disposed)return;let t=this.down;if(this.down=null,t===null||e.button!==0||Math.hypot(e.clientX-t.x,e.clientY-t.y)>5||performance.now()-t.at>600)return;let s=this.pick(e);this.setSelection(s)};setHover(e){vd(e,this.hover)||(this.hover=e,this.refresh())}invalidate(){this.faceCache.clear(),this.edgeCache.clear(),this.selection=null,this.hover=null,this.refresh()}setSelection(e){this.selection=e,this.refresh()}refresh(){let e=(l,c,h)=>{let u=this.facesOf(l).regions[c];if(u===void 0){h.visible=!1;return}let f=l.geometry,g=f.getAttribute("position"),y=f.getIndex(),m=g.array,p=new Float32Array(u.triangles.length*9),C=0;for(let T of u.triangles)for(let x=0;x<3;x++){let S=(y!==null?y.getX(T*3+x):T*3+x)*3;p[C++]=m[S],p[C++]=m[S+1],p[C++]=m[S+2]}h.geometry.dispose(),h.geometry=new mt,h.geometry.setAttribute("position",new wt(p,3)),l!==h.parent&&l.add(h),h.visible=!0},t=(l,c,h)=>{let d=this.edgesOf(l);if(d===null){h.visible=!1;return}let{groups:u,segments:f}=d,g=[];for(let y=0;y<u.groupOf.length;y++)if(u.groupOf[y]===c)for(let m=0;m<6;m++)g.push(f[y*6+m]);h.geometry.dispose(),h.geometry=new mt,h.geometry.setAttribute("position",new xt(g,3)),l!==h.parent&&l.add(h),h.visible=!0},n=(...l)=>{for(let c of l)c.visible=!1},s=vd(this.hover,this.selection)?null:this.hover,r=this.selection;s!==null&&s.kind==="face"?e(s.mesh,s.region,this.hoverFaceMesh):n(this.hoverFaceMesh),s!==null&&s.kind==="edge"?t(s.mesh,s.group,this.hoverEdgeLines):n(this.hoverEdgeLines),r!==null&&r.kind==="face"?e(r.mesh,r.region,this.selectFaceMesh):n(this.selectFaceMesh),r!==null&&r.kind==="edge"?t(r.mesh,r.group,this.selectEdgeLines):n(this.selectEdgeLines);let o=this.hover??r,a=this.options.domElement.parentElement;if(o!==null){let l=o.mesh.name.length>0?`${o.mesh.name} \xB7 `:"";if(o.kind==="face"){let c=this.facesOf(o.mesh).regions[o.region]?.area??0;this.label.textContent=`${l}face \xB7 ${c.toLocaleString(void 0,{maximumFractionDigits:1})} mm\xB2`}else{let c=this.edgesOf(o.mesh)?.groups.groups[o.group],h=c?.length??0;this.label.textContent=`${l}edge \xB7 ${h.toLocaleString(void 0,{maximumFractionDigits:1})} mm${c?.closed===!0?" \xB7 closed":""}`}this.label.style.opacity="1",this.label.parentElement!==a&&a!==null&&a.appendChild(this.label)}else this.label.style.opacity="0",this.label.textContent="";this.options.domElement.style.cursor=o===null?"grab":"pointer"}dispose(){if(this.disposed)return;this.disposed=!0;let{domElement:e}=this.options;e.removeEventListener("pointermove",this.onPointerMove),e.removeEventListener("pointerleave",this.onPointerLeave),e.removeEventListener("pointerdown",this.onPointerDown),e.removeEventListener("pointerup",this.onPointerUp);for(let t of[this.hoverFaceMesh,this.selectFaceMesh,this.hoverEdgeLines,this.selectEdgeLines])t.removeFromParent();for(let t of this.disposables)t.dispose();this.label.remove()}};function vd(i,e){return i===null||e===null?i===e:i.kind===e.kind&&i.mesh===e.mesh&&(i.kind==="face"?i.region===e.region:i.group===e.group)}function yd(){let i=new gs;i.moveTo(0,0),i.lineTo(60,0),i.lineTo(60,12),i.lineTo(12,12),i.lineTo(12,60),i.lineTo(0,60),i.closePath();let e=new Ii;e.absarc(36,6,5,0,Math.PI*2,!0),i.holes.push(e);let t=new cr(i,{depth:100,bevelEnabled:!1,curveSegments:32});return t.translate(-30,-30,0),t}var bd={min:{x:-30,y:-30,z:0},max:{x:30,y:30,z:100}};var zx=25,Gc={x:13777723,y:3055172,z:2846678};function Wc(i,e){let t=document.createElement("canvas");t.width=64,t.height=64;let n=t.getContext("2d");n!==null&&(n.font='bold 44px -apple-system, "Segoe UI", sans-serif',n.textAlign="center",n.textBaseline="middle",n.fillStyle=`#${e.toString(16).padStart(6,"0")}`,n.fillText(i,32,34));let s=new Pi(t);s.needsUpdate=!0;let r=new ds({map:s,transparent:!0}),o=new js(r);return o.scale.set(1,1,1),o}function Md(i,e={}){let t=new ws({antialias:!0,alpha:!0});t.setPixelRatio(window.devicePixelRatio),t.setSize(i.clientWidth||360,i.clientHeight||300),i.appendChild(t.domElement),t.domElement.style.width="100%",t.domElement.style.height="100%",t.domElement.style.display="block";let n=new kt(45,1,.01,1e4);n.up.set(0,0,1);let s=new nl(n,t.domElement);s.enableDamping=!0,s.dampingFactor=.12,e.autoRotate===!0&&(s.autoRotate=!0,s.autoRotateSpeed=.8);let r=()=>{let a=i.clientWidth,l=i.clientHeight;a===0||l===0||(t.setSize(a,l,!1),n.aspect=a/l,n.updateProjectionMatrix(),e.onResize?.(a,l))},o=new ResizeObserver(r);return o.observe(i),{renderer:t,camera:n,controls:s,dispose(){o.disconnect(),s.dispose(),t.dispose(),t.domElement.parentNode===i&&i.removeChild(t.domElement)}}}function Sd(i,e){let t=new Vt,n=new pr(e*2,20,9081244,4869976);n.rotation.x=Math.PI/2,t.add(n);let s=new mr(e);t.add(s);let r=e*1.12,o=e*.14,a=Wc("X",Gc.x);a.position.set(r,0,0),a.scale.set(o,o,o),t.add(a);let l=Wc("Y",Gc.y);l.position.set(0,r,0),l.scale.set(o,o,o),t.add(l);let c=Wc("Z",Gc.z);return c.position.set(0,0,r),c.scale.set(o,o,o),t.add(c),i.add(t),[t,n,s,a,l,c]}function Xc(i){for(let e of i)e.traverse(t=>{let n=t;if(n.isMesh){n.geometry?.dispose();let o=n.material;Array.isArray(o)?o.forEach(a=>a.dispose()):o?.dispose()}let s=t;s.isLineSegments&&(s.geometry?.dispose(),s.material?.dispose());let r=t;r.isSprite&&(r.material.map?.dispose(),r.material.dispose())})}function kx(i){let e=i.userData.edges;if(e!==void 0)return e;let t=i.geometry;if(t===void 0)return;let n=i.material;n.polygonOffset=!0,n.polygonOffsetFactor=1,n.polygonOffsetUnits=1;let s=new xn(new tr(t,zx),new _n({color:3358799,transparent:!0,opacity:.9}));return i.add(s),i.userData.edges=s,s}function sl(i,e){i.traverse(t=>{let n=t;if(!n.isMesh)return;let s=n.material;s.wireframe=e==="wireframe";let r=e==="shaded-edges"?kx(n):n.userData.edges;r!==void 0&&(r.visible=e==="shaded-edges")})}function qc(i){let e="geometry"in i?i.geometry:(()=>{let s=new mt,r=typeof i.positions=="string"?Vc(i.positions):i.positions;if(s.setAttribute("position",new wt(r,3)),i.normals!==void 0){let a=typeof i.normals=="string"?Vc(i.normals):i.normals;s.setAttribute("normal",new wt(a,3))}else s.computeVertexNormals();let o=typeof i.indices=="string"?pd(i.indices):i.indices;return s.setIndex(new wt(o,1)),s})(),t=i.color===void 0?10466503:i.color,n=new hr({color:t,metalness:.15,roughness:.55,flatShading:i.normals===void 0,side:ln});return new Tt(e,n)}function Ed(i,e={}){let t=Md(i,{onResize:()=>{S||T()}}),n=new ii,s=e.part===null,r=new Vt;n.add(r);let o=new Vt;s||o.add(qc({name:"demo-bracket",geometry:yd()})),r.add(o);let l=s?{min:{x:-100,y:-100,z:0},max:{x:100,y:100,z:100}}:{...bd},c=new R(l.max.x-l.min.x,l.max.y-l.min.y,l.max.z-l.min.z),h=new R((l.max.x+l.min.x)/2,(l.max.y+l.min.y)/2,(l.max.z+l.min.z)/2),d=Math.max(c.x,c.y,c.z,1e-6);n.add(o);let u=new xs(16777215,5857131,1.1);n.add(u);let f=new hi(16777215,1.6);n.add(f);let g=new hi(16777215,.5);n.add(g);let y=()=>{f.position.set(h.x+d,h.y+d*1.4,h.z+d*.8),g.position.set(h.x-d,h.y+d*.4,h.z-d*.6)};y();let m=Sd(n,d),p=m[1],C="shaded-edges",T=()=>{let U=wd(d,t.camera.aspect,t.camera.fov);t.camera.position.set(h.x+U*.7,h.y+U*.55,h.z+U*.6),t.controls.target.copy(h),t.controls.update()},x=()=>{p.position.set(h.x,h.y,l.min.z),t.camera.near=d/100,t.camera.far=d*40,sl(r,C),y(),T()};x();let S=!1,M=()=>{S=!0};t.renderer.domElement.addEventListener("pointerdown",M,{passive:!0}),t.renderer.domElement.addEventListener("wheel",M,{passive:!0});let A=new Pr({container:i,camera:t.camera,controls:t.controls,onHome:T}),v=new Ir({domElement:t.renderer.domElement,camera:t.camera,cad:r}),w=!1,I=U=>{if(!w){r.remove(o),Xc([o]),v.invalidate(),o=new Vt;for(let G of U.meshes)o.add(qc(G));r.add(o),l=U.bounds,c=new R(l.max.x-l.min.x,l.max.y-l.min.y,l.max.z-l.min.z),h=new R((l.max.x+l.min.x)/2,(l.max.y+l.min.y)/2,(l.max.z+l.min.z)/2),d=Math.max(c.x,c.y,c.z,1e-6),x()}},P=!1,O=U=>{fetch(`/dsh-cad/demo-scene?part=${U}`).then(G=>G.ok?G.json():Promise.reject(new Error(`HTTP ${G.status}`))).then(G=>{w||(I(G),P=!0,e.onSource?.("brep"))}).catch(()=>{w||e.onSource?.(P?"brep":"fallback")})};s||O(e.part??"bracket");let q=()=>{Y=requestAnimationFrame(q),t.controls.update(),t.renderer.render(n,t.camera),A.update()},Y=requestAnimationFrame(q);return{setWireframe(U){this.setRenderMode(U?"wireframe":"shaded-edges")},setRenderMode(U){C=U,sl(r,C)},loadPart:O,resetView:T,dispose(){w=!0,cancelAnimationFrame(Y),v.dispose(),A.dispose(),Xc([r,...m,u,f,g]),t.dispose()}}}function wd(i,e,t){let n=t*Math.PI/180,s=2*Math.atan(Math.tan(n/2)*(Number.isFinite(e)&&e>0?e:1)),r=Math.min(n,s);return i/2/Math.tan(r/2)*1.5}function Td(i,e){let t=Md(i,{onResize:()=>{y||g()}}),n=new ii,s=new Vt;for(let M of e.meshes)s.add(qc(M));let r=e.bounds,o=new R(r.max.x-r.min.x,r.max.y-r.min.y,r.max.z-r.min.z),a=new R((r.max.x+r.min.x)/2,(r.max.y+r.min.y)/2,(r.max.z+r.min.z)/2),l=Math.max(o.x,o.y,o.z,1e-6);n.add(s);let c=new xs(16777215,5857131,1.1);n.add(c);let h=new hi(16777215,1.6);h.position.set(a.x+l,a.y+l*1.4,a.z+l*.8),n.add(h);let d=new hi(16777215,.5);d.position.set(a.x-l,a.y+l*.4,a.z-l*.6),n.add(d);let u=Sd(n,l);u[1].position.set(a.x,a.y,r.min.z),t.camera.near=l/100,t.camera.far=l*40;let g=()=>{let M=wd(l,t.camera.aspect,t.camera.fov);t.camera.position.set(a.x+M*.7,a.y+M*.55,a.z+M*.6),t.controls.target.copy(a),t.controls.update()};g();let y=!1,m=()=>{y=!0};t.renderer.domElement.addEventListener("pointerdown",m,{passive:!0}),t.renderer.domElement.addEventListener("wheel",m,{passive:!0});let p=new Pr({container:i,camera:t.camera,controls:t.controls,onHome:g});sl(s,"shaded-edges");let T=new Ir({domElement:t.renderer.domElement,camera:t.camera,cad:s}),x=()=>{S=requestAnimationFrame(x),t.controls.update(),t.renderer.render(n,t.camera),p.update()},S=requestAnimationFrame(x);return{setWireframe(M){this.setRenderMode(M?"wireframe":"shaded-edges")},setRenderMode(M){sl(s,M)},resetView:g,dispose(){cancelAnimationFrame(S),T.dispose(),p.dispose(),Xc([s,...u,c,h,d]),t.dispose()}}}var Oi=Br(require("react"),1);function Yc(i){let{min:e,max:t}=i.bounds,n=Math.max(t.x-e.x,1e-6),s=Math.max(t.y-e.y,1e-6),r=Math.max(n,s)*.05;return{x:e.x-r,y:-t.y-r,width:n+r*2,height:s+r*2}}function Ad(i){return i.color===void 0?"var(--dsh-cad-stroke, #4c5561)":`#${i.color.toString(16).padStart(6,"0")}`}function Vx(i){let e=[];for(let t=0;t+1<i.length;t+=2)e.push(`${i[t].toFixed(3)},${i[t+1].toFixed(3)}`);return e.join(" ")}function Hx(i,e,t,n,s){let r=n*(Math.PI/180),o=s*(Math.PI/180),a=i+t*Math.cos(r),l=e+t*Math.sin(r),c=i+t*Math.cos(o),h=e+t*Math.sin(o),d=((o-r)%(Math.PI*2)+Math.PI*2)%(Math.PI*2)>Math.PI?1:0;return`M ${a.toFixed(4)} ${l.toFixed(4)} A ${t.toFixed(4)} ${t.toFixed(4)} 0 ${d} 1 ${c.toFixed(4)} ${h.toFixed(4)}`}function Cd(i){return i.entities.map((e,t)=>{let n=`e${t}`,s=e.layer==="hidden",r=e.layer==="paper"||e.layer==="dim",o={stroke:Ad(e),fill:"none",strokeWidth:s||r?1:1.6,vectorEffect:"non-scaling-stroke",...s?{strokeDasharray:"6 4"}:{}};switch(e.type){case"line":return Oi.default.createElement("line",{key:n,x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,style:o});case"circle":return Oi.default.createElement("circle",{key:n,cx:e.cx,cy:e.cy,r:e.r,style:o});case"arc":return Oi.default.createElement("path",{key:n,d:Hx(e.cx,e.cy,e.r,e.startAngle,e.endAngle),style:o});case"polyline":return Oi.default.createElement("polyline",{key:n,points:Vx(e.points),fill:"none",style:o});case"text":return Oi.default.createElement("g",{key:n,transform:`translate(${e.x} ${e.y}) scale(1 -1) rotate(${(e.rotation??0)*-1})`},Oi.default.createElement("text",{x:0,y:0,fontSize:e.height,fill:Ad(e),style:{userSelect:"none"}},e.text))}})}var Zc=["shaded-edges","shaded","wireframe"],Gx={"shaded-edges":"Faces+Edges",shaded:"Faces",wireframe:"Wireframe"},Rd=null,$c=new Set,Pd={part:null,assembly:null,drawing:null};function Id(i){Rd={meta:i,at:Date.now()};let e=i.doc??"part";Pd[e]={meta:i,at:Date.now()};for(let t of $c)t()}function Ld(){return Rd}function Lr(i){return Pd[i]}function Dd(i){return $c.add(i),()=>{$c.delete(i)}}function Nd(i){let e=i.meta;if(e===null||typeof e!="object")return null;let t=e;return typeof t.viewId=="string"&&(t.kind==="3d"||t.kind==="2d")?t:null}function Wx(i){let e=new DataView(i);if(e.getUint32(0,!0)!==826426180)throw new Error("bad scene magic");let n=e.getUint32(4,!0),s=new TextDecoder().decode(new Uint8Array(i,8,n)).replace(/\u0000+$/,""),r=JSON.parse(s),o=8+n;return{kind:"3d",format:"model",meshes:r.meshes.map(l=>({name:l.name,...l.color===void 0?{}:{color:l.color},positions:new Float32Array(i,o+l.posOffset,l.posBytes/4),...l.nrmOffset===void 0?{}:{normals:new Float32Array(i,o+l.nrmOffset,(l.nrmBytes??0)/4)},indices:new Uint32Array(i,o+l.idxOffset,l.idxBytes/4),vertexCount:l.vertexCount,triangleCount:l.triangleCount})),bounds:{min:{x:r.bounds.min[0],y:r.bounds.min[1],z:r.bounds.min[2]},max:{x:r.bounds.max[0],y:r.bounds.max[1],z:r.bounds.max[2]}},units:r.units}}function Bi(i){let[e,t]=(0,St.useState)(null),[n,s]=(0,St.useState)(null);return(0,St.useEffect)(()=>{if(i===void 0)return;let r=!1;t(null),s(null);let o=i.includes("/dsh-cad/bin/");return fetch(i).then(async a=>{if(!a.ok)throw new Error(`scene fetch failed: HTTP ${a.status}`);return o?Wx(await a.arrayBuffer()):await a.json()}).then(a=>{r||t(a)}).catch(a=>{r||s(a instanceof Error?a.message:String(a))}),()=>{r=!0}},[i]),{scene:e,error:n}}function zi({scene:i,error:e,height:t,fill:n}){return e!==null?Pt.default.createElement("div",{style:Gt.error},e):i===null?Pt.default.createElement("div",{style:Gt.placeholder},"loading\u2026"):i.kind==="3d"?Pt.default.createElement(Xx,{scene:i,height:t,fill:n}):Pt.default.createElement(qx,{scene:i,height:t,fill:n})}function Xx({scene:i,height:e,fill:t}){let n=(0,St.useRef)(null),s=(0,St.useRef)(null),[r,o]=(0,St.useState)("shaded-edges");(0,St.useEffect)(()=>{let c=n.current;if(c===null)return;let h=Td(c,i);return s.current=h,h.setRenderMode(r),()=>{h.dispose(),s.current=null}},[i]),(0,St.useEffect)(()=>{s.current?.setRenderMode(r)},[r]);let a=(0,St.useCallback)(()=>{o(c=>Zc[(Zc.indexOf(c)+1)%Zc.length])},[]),l=(0,St.useCallback)(()=>{s.current?.resetView()},[]);return Pt.default.createElement("div",{style:t===!0?Cs.wrap:Gt.viewportWrap},Pt.default.createElement("div",{ref:n,style:t===!0?Cs.viewport:{...Gt.viewport,height:e??360}}),Pt.default.createElement("div",{style:Gt.toolbar},Pt.default.createElement("button",{type:"button",style:Gt.button,onClick:a,"aria-pressed":r==="wireframe"},Gx[r]),Pt.default.createElement("button",{type:"button",style:Gt.button,onClick:l},"Reset view")))}function qx({scene:i,height:e,fill:t}){let[n,s]=(0,St.useState)(()=>Yc(i)),r=(0,St.useRef)(null),o=(0,St.useCallback)(()=>s(Yc(i)),[i]),a=(0,St.useCallback)(d=>{d.preventDefault();let f=d.currentTarget.getBoundingClientRect(),g=n.x+(d.clientX-f.left)/f.width*n.width,y=n.y+(d.clientY-f.top)/f.height*n.height,m=d.deltaY<0?.85:1.18;s({x:g-(g-n.x)*m,y:y-(y-n.y)*m,width:n.width*m,height:n.height*m})},[n]),l=(0,St.useCallback)(d=>{r.current={x:d.clientX,y:d.clientY,viewBox:n},d.currentTarget.setPointerCapture(d.pointerId)},[n]),c=(0,St.useCallback)(d=>{let u=r.current;if(u===null)return;let g=d.currentTarget.getBoundingClientRect(),y=u.viewBox.width/g.width,m=u.viewBox.height/g.height;s({...u.viewBox,x:u.viewBox.x-(d.clientX-u.x)*y,y:u.viewBox.y-(d.clientY-u.y)*m})},[]),h=(0,St.useCallback)(()=>{r.current=null},[]);if(i.format==="svg"&&i.svgText!==void 0){let d=`data:image/svg+xml;base64,${btoa(unescape(encodeURIComponent(i.svgText)))}`;return Pt.default.createElement("div",{style:t===!0?Cs.wrap:Gt.viewportWrap},Pt.default.createElement("div",{style:{...t===!0?Cs.viewport:{...Gt.viewport,height:e??360},display:"flex",alignItems:"center",justifyContent:"center",background:"#ffffff"}},Pt.default.createElement("img",{src:d,alt:i.format,style:{maxWidth:"100%",maxHeight:"100%"}})),Pt.default.createElement("div",{style:Gt.toolbar}))}return Pt.default.createElement("div",{style:t===!0?Cs.wrap:Gt.viewportWrap},Pt.default.createElement("svg",{viewBox:`${n.x} ${n.y} ${n.width} ${n.height}`,style:{...t===!0?Cs.viewport:{...Gt.viewport,height:e??360},cursor:r.current===null?"default":"grabbing",touchAction:"none"},onWheel:a,onPointerDown:l,onPointerMove:c,onPointerUp:h,onPointerLeave:h},Pt.default.createElement("g",{transform:"scale(1 -1)"},Cd(i))),Pt.default.createElement("div",{style:Gt.toolbar},Pt.default.createElement("button",{type:"button",style:Gt.button,onClick:o},"Fit")))}var Gt={viewportWrap:{position:"relative"},viewport:{width:"100%",background:"var(--dsh-cad-bg, linear-gradient(#f5f6f8, #e9ecf0))",display:"block"},toolbar:{position:"absolute",top:8,left:8,display:"flex",gap:6,zIndex:5},button:{border:"1px solid var(--dsw-alias-border-l2, #c4c9d0)",borderRadius:999,background:"var(--dsw-alias-bg-base, #fff)",color:"var(--dsw-alias-label-secondary, #374151)",fontSize:11,lineHeight:"16px",padding:"3px 10px",cursor:"pointer"},placeholder:{color:"var(--dsw-alias-label-tertiary, #6b7280)",fontSize:12,padding:"10px 12px"},error:{color:"var(--dsw-alias-state-error-primary, #b91c1c)",fontSize:12,padding:"10px 12px"}},Cs={wrap:{position:"relative",flex:"1 1 auto",minHeight:0,display:"flex",flexDirection:"column"},viewport:{flex:"1 1 auto",minHeight:0,width:"100%",background:"var(--dsh-cad-bg, linear-gradient(#f5f6f8, #e9ecf0))",display:"block"}};var Yx=360;function Ud({block:i}){let e=i.kind==="tool-call",t=e?void 0:Nd(i)??void 0,{scene:n,error:s}=Bi(t?.sceneUrl);return t!==void 0&&Id(t),t===void 0?xi.default.createElement("div",{style:Gt.placeholder},e?"Converting CAD\u2026":"CAD result"):xi.default.createElement("div",{style:Dr.card},xi.default.createElement("div",{style:Dr.header},xi.default.createElement("span",{style:Dr.title},t.title),xi.default.createElement("span",{style:Dr.stats},Zx(t))),xi.default.createElement(zi,{scene:n,error:s,height:Yx}),xi.default.createElement("div",{style:Dr.footer},n===null?t.sceneUrl===void 0?"headless composition: viewer unavailable, see summary above":"loading geometry\u2026":$x(n)))}function Zx(i){if(i.kind==="3d"){let e=[];return i.stats.meshes!==void 0&&e.push(`${i.stats.meshes} part${i.stats.meshes===1?"":"s"}`),i.stats.triangles!==void 0&&e.push(`${i.stats.triangles.toLocaleString()} triangles`),e.join(" \xB7 ")}return i.stats.entities!==void 0?`${i.stats.entities.toLocaleString()} entities`:""}function $x(i){if(i===null)return"";if(i.kind==="3d"){let s=i.bounds;return`size ${[s.max.x-s.min.x,s.max.y-s.min.y,s.max.z-s.min.z].map(o=>o.toFixed(2)).join(" \xD7 ")} ${i.units==="unitless"?"":i.units}`.trim()}let e=i.bounds,t=[(e.max.x-e.min.x).toFixed(2),(e.max.y-e.min.y).toFixed(2)],n=i.layers.length>0?` \xB7 ${i.layers.length} layers`:"";return`extent ${t.join(" \xD7 ")}${n}`}var Dr={card:{border:"1px solid var(--dsw-alias-border-l1, #d7dbe0)",borderRadius:10,margin:"6px 0",overflow:"hidden",display:"flex",flexDirection:"column",maxWidth:720,background:"var(--dsw-alias-bg-base, #fff)"},header:{display:"flex",alignItems:"baseline",justifyContent:"space-between",gap:12,padding:"8px 12px"},title:{fontWeight:600,fontSize:13},stats:{fontSize:12,color:"var(--dsw-alias-label-tertiary, #6b7280)"},footer:{borderTop:"1px solid var(--dsw-alias-border-l1, #e5e7eb)",color:"var(--dsw-alias-label-tertiary, #6b7280)",fontSize:11,padding:"5px 12px"}};var Z=Br(require("react"),1);function Jx(i){let e={part:void 0,assembly:void 0,drawing:void 0},t=i?.nodes??[];for(let n=t.length-1;n>=0;n--){let s=t[n];if(s===void 0)continue;let r=s.meta;if(s.kind==="tool-result"&&typeof r?.viewId=="string"&&(r.kind==="3d"||r.kind==="2d")){let o=r.doc??"part";e[o]===void 0&&(e[o]=r)}}return e}var Kx=()=>()=>{},Jc={part:void 0,assembly:void 0,drawing:void 0},Rs=Jc;function jx(i,e){let t=i?.(l=>l.current),n=(0,Z.useMemo)(()=>{if(!(e===void 0||t===void 0))return e.binding?.(t)?.session},[e,t]),s=(0,Z.useMemo)(()=>n===void 0?Kx:l=>n.subscribe(l),[n]),r=(0,Z.useMemo)(()=>n===void 0?()=>Jc:()=>{let l=Jx(n.getSnapshot());return Rs!==Jc&&Rs.part===l.part&&Rs.assembly===l.assembly&&Rs.drawing===l.drawing?Rs:(Rs=l,l)},[n]),o=(0,Z.useSyncExternalStore)(s,r),[,a]=(0,Z.useReducer)(l=>l+1,0);return(0,Z.useEffect)(()=>Dd(()=>{a()}),[]),e!==void 0?{part:o.part??null,assembly:o.assembly??Lr("assembly")?.meta??null,drawing:o.drawing??Lr("drawing")?.meta??null}:{part:Ld()?.meta??null,assembly:Lr("assembly")?.meta??null,drawing:Lr("drawing")?.meta??null}}var Fd={part:"Part Studio",assembly:"\u88C5\u914D\u4F53",drawing:"\u5DE5\u7A0B\u56FE"},Un=[{id:"part"}],Ps="part",Kc={tabs:Un,active:Ps},jc=new Set;function eh(){Kc={tabs:Un,active:Ps};for(let i of jc)i()}function kd(i){Un.some(e=>e.id===i)||(Un=[...Un,{id:i}]),Ps=i,eh()}function Qx(i){let e=Un.findIndex(t=>t.id===i);e!==-1&&(Un=Un.filter(t=>t.id!==i),Ps===i&&(Ps=(Un[e-1]??Un[e])?.id??null),eh())}function Od(i){Ps=i,eh()}function ev(){return(0,Z.useSyncExternalStore)(i=>(jc.add(i),()=>{jc.delete(i)}),()=>Kc,()=>Kc)}var Vd=null,Nr=Vd,Qc=new Set;function rl(i){Vd=i,Nr=i;for(let e of Qc)e()}function tv(){return(0,Z.useSyncExternalStore)(i=>(Qc.add(i),()=>{Qc.delete(i)}),()=>Nr,()=>Nr)}var qn="currentColor";function nv(){return Z.default.createElement("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none","aria-hidden":!0},Z.default.createElement("path",{d:"M8 1.5 14 5v6L8 14.5 2 11V5l6-3.5Z",stroke:qn,strokeWidth:"1.3",strokeLinejoin:"round"}),Z.default.createElement("path",{d:"M2 5l6 3.5L14 5M8 8.5v6",stroke:qn,strokeWidth:"1.3",strokeLinejoin:"round"}))}function Hd(){return Z.default.createElement("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none","aria-hidden":!0},Z.default.createElement("path",{d:"M5.5 1.5 10 4v4L5.5 10.5 1 8V4l4.5-2.5Z",stroke:qn,strokeWidth:"1.2",strokeLinejoin:"round",opacity:"0.75"}),Z.default.createElement("path",{d:"M10.5 5.5 15 8v4l-4.5 2.5L6 12V8l4.5-2.5Z",stroke:qn,strokeWidth:"1.2",strokeLinejoin:"round"}))}function Gd(){return Z.default.createElement("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none","aria-hidden":!0},Z.default.createElement("path",{d:"M3 1.5h7l3 3V14.5H3V1.5Z",stroke:qn,strokeWidth:"1.3",strokeLinejoin:"round"}),Z.default.createElement("path",{d:"M5.5 7h5M5.5 9.5h5M5.5 12h3",stroke:qn,strokeWidth:"1.2",strokeLinecap:"round"}))}function Wd({kind:i}){return i==="assembly"?Z.default.createElement(Hd,null):i==="drawing"?Z.default.createElement(Gd,null):Z.default.createElement(nv,null)}function iv(){return Z.default.createElement("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none","aria-hidden":!0},Z.default.createElement("path",{d:"M1.5 4.5A1 1 0 0 1 2.5 3.5h3.2l1.4 1.8h6.4a1 1 0 0 1 1 1v6.2a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1V4.5Z",stroke:qn,strokeWidth:"1.3",strokeLinejoin:"round"}))}function sv(){return Z.default.createElement("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none","aria-hidden":!0},Z.default.createElement("path",{d:"M4 1.5h5l3 3v10H4v-13Z",stroke:qn,strokeWidth:"1.2",strokeLinejoin:"round"}),Z.default.createElement("path",{d:"M9 1.5v3h3",stroke:qn,strokeWidth:"1.2",strokeLinejoin:"round"}))}function Xd(i){let e=i.closest("[data-shell-overlay]");if(!(e instanceof HTMLElement))return{frame:null,detailsCol:null,centerCol:null};let t=e.parentElement instanceof HTMLElement?e.parentElement:null,n=e.previousElementSibling instanceof HTMLElement?e.previousElementSibling:null,s=n?.previousElementSibling instanceof HTMLElement?n.previousElementSibling:null;return{frame:t,detailsCol:n,centerCol:s}}function rv({frame:i,detailsCol:e,centerCol:t}){if(e!==null&&t!==null)return{right:e.getBoundingClientRect().width,centerWidth:t.getBoundingClientRect().width};if(i!==null){let n=getComputedStyle(i).gridTemplateColumns.trim().split(/\s+/).map(Number.parseFloat),s=n[1],r=n[2];if(Number.isFinite(s)&&Number.isFinite(r))return{right:r,centerWidth:s}}return{right:0,centerWidth:0}}function ov(i){let[e,t]=(0,Z.useState)({right:0,centerWidth:0});return(0,Z.useLayoutEffect)(()=>{let n=i.current;if(n===null)return;let s=Xd(n),r=0,o=()=>{r=0;let c=rv(s);t(h=>Math.abs(h.right-c.right)<.5&&Math.abs(h.centerWidth-c.centerWidth)<.5?h:c)},a=()=>{r===0&&(r=requestAnimationFrame(o))},l=new ResizeObserver(a);for(let c of[s.frame,s.detailsCol,s.centerCol])c!==null&&l.observe(c);return window.addEventListener("resize",a),o(),()=>{l.disconnect(),window.removeEventListener("resize",a),r!==0&&cancelAnimationFrame(r)}},[i]),e}var Bd=280,zd=720,av=460,lv=20,cv=.42,hv=[{kind:"part",label:"\u96F6\u4EF6",hint:"Part Studio \xB7 \u4E09\u7EF4\u5EFA\u6A21"},{kind:"assembly",label:"\u88C5\u914D\u4F53",hint:"Assembly \xB7 \u5B9E\u4F8B\u88C5\u914D"},{kind:"drawing",label:"\u5DE5\u7A0B\u56FE",hint:"Drawing \xB7 \u56FE\u7EB8\u8F93\u51FA"}];function uv({onPick:i,onClose:e}){let t=(0,Z.useRef)(null);return(0,Z.useEffect)(()=>{let n=r=>{t.current!==null&&r.target instanceof Node&&t.current.contains(r.target)||e()},s=r=>{r.key==="Escape"&&e()};return document.addEventListener("pointerdown",n,!0),document.addEventListener("keydown",s),()=>{document.removeEventListener("pointerdown",n,!0),document.removeEventListener("keydown",s)}},[e]),Z.default.createElement("div",{ref:t,style:Oe.menu,role:"menu","aria-label":"\u65B0\u5EFA\u6587\u6863"},hv.map(n=>Z.default.createElement("button",{key:n.kind,type:"button",role:"menuitem",style:Oe.menuItem,onClick:()=>{i(n.kind)}},Z.default.createElement("span",{style:Oe.menuIcon},Z.default.createElement(Wd,{kind:n.kind})),Z.default.createElement("span",{style:Oe.menuLabel},n.label),Z.default.createElement("span",{style:Oe.menuHint},n.hint))))}function dv(i){let e=Date.now()-Date.parse(i);if(!Number.isFinite(e))return"";let t=Math.floor(e/6e4);if(t<1)return"\u521A\u521A";if(t<60)return`${t} \u5206\u949F\u524D`;let n=Math.floor(t/60);return n<24?`${n} \u5C0F\u65F6\u524D`:`${Math.floor(n/24)} \u5929\u524D`}function fv({activeDocId:i,onClose:e}){let t=(0,Z.useRef)(null),[n,s]=(0,Z.useState)(null),[r,o]=(0,Z.useState)(null),[a,l]=(0,Z.useState)(null),[c,h]=(0,Z.useState)(null);(0,Z.useEffect)(()=>{let f=y=>{t.current!==null&&y.target instanceof Node&&t.current.contains(y.target)||e()},g=y=>{y.key==="Escape"&&e()};return document.addEventListener("pointerdown",f,!0),document.addEventListener("keydown",g),()=>{document.removeEventListener("pointerdown",f,!0),document.removeEventListener("keydown",g)}},[e]);let d=(0,Z.useCallback)(()=>{s(null),o(null),fetch("/dsh-cad/docs").then(f=>f.ok?f.json():Promise.reject(new Error(`HTTP ${f.status}`))).then(f=>{s(f.docs??[])}).catch(f=>{o(f instanceof Error?f.message:String(f))})},[]);(0,Z.useEffect)(()=>{d()},[d]);let u=f=>{h(f),fetch(`/dsh-cad/docs/delete?id=${encodeURIComponent(f)}`,{method:"POST"}).then(()=>{l(null),Nr?.docId===f&&rl(null),d()}).catch(g=>{o(g instanceof Error?g.message:String(g))}).finally(()=>{h(null)})};return Z.default.createElement("div",{ref:t,style:Oe.menu,role:"menu","aria-label":"\u6587\u6863\u5217\u8868"},Z.default.createElement("div",{style:Oe.docsHeader},"\u5DE5\u4F5C\u533A\u6587\u6863"),r!==null?Z.default.createElement("div",{style:Oe.docsError},r):null,n===null&&r===null?Z.default.createElement("div",{style:Oe.docsHintRow},"\u52A0\u8F7D\u4E2D\u2026"):null,n!==null&&n.length===0?Z.default.createElement("div",{style:Oe.docsHintRow},"\u8FD8\u6CA1\u6709\u5EFA\u6A21\u6587\u6863 \u2014 \u5728\u5BF9\u8BDD\u4E2D\u5EFA\u6A21\u540E\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC"):null,n?.map(f=>{let g=f.id===i;return Z.default.createElement("div",{key:f.id,style:Oe.docRow},Z.default.createElement("button",{type:"button",role:"menuitem",style:Oe.docRowMain,onClick:()=>{f.sceneUrl!==void 0&&(rl({docId:f.id,name:f.name,sceneUrl:f.sceneUrl}),kd("part"),e())},title:f.sceneUrl===void 0?"\u7A7A\u6587\u6863\uFF08\u65E0\u573A\u666F\uFF09":"\u70B9\u51FB\u9884\u89C8"},Z.default.createElement("span",{style:Oe.menuIcon},Z.default.createElement(sv,null)),Z.default.createElement("span",{style:{...Oe.menuLabel,...g?{color:"var(--dsw-alias-label-primary,#4d6bfe)",fontWeight:600}:{}}},f.name,g?" \xB7 \u5F53\u524D":""),Z.default.createElement("span",{style:Oe.menuHint},f.bodies," \u4F53 \xB7 ",dv(f.updatedAt))),a===f.id?Z.default.createElement("span",{style:Oe.docConfirm},Z.default.createElement("button",{type:"button",style:Oe.docConfirmYes,disabled:c===f.id,onClick:()=>{u(f.id)}},"\u5220\u9664"),Z.default.createElement("button",{type:"button",style:Oe.docConfirmNo,onClick:()=>{l(null)}},"\u53D6\u6D88")):Z.default.createElement("button",{type:"button",style:Oe.docDelete,"aria-label":`\u5220\u9664\u6587\u6863 ${f.name}`,title:"\u5220\u9664\u6587\u6863",onClick:()=>{l(f.id)}},"\xD7"))}),Z.default.createElement("div",{style:Oe.docsFooter},"\u70B9\u51FB\u9884\u89C8 \xB7 \u5207\u6362\u5EFA\u6A21\u76EE\u6807\u8BF7\u5728\u5BF9\u8BDD\u4E2D\u8BF4\u300C\u6253\u5F00 xx \u6587\u6863\u300D"))}function qd(i){return function(t){let n=(0,Z.useRef)(null),[s,r]=(0,Z.useState)(!0),[o,a]=(0,Z.useState)(av),[l,c]=(0,Z.useState)(!1),[h,d]=(0,Z.useState)(!1),u=ov(n),f=jx(t.useSessions,i),{tabs:g,active:y}=ev(),m=(0,Z.useMemo)(()=>{let M=u.centerWidth>0?Math.max(Bd,u.centerWidth*cv):zd;return Math.round(Math.min(o,M))},[o,u.centerWidth]);pv(n,s,m);let p=(0,Z.useRef)(null),C=M=>{M.preventDefault(),p.current={startX:M.clientX,startWidth:m},M.currentTarget.setPointerCapture(M.pointerId)},T=M=>{let A=p.current;if(A===null)return;let v=A.startWidth+(A.startX-M.clientX);a(Math.round(Math.min(zd,Math.max(Bd,v))))},x=()=>{p.current=null},S=y===null?null:f[y];return Z.default.createElement("div",{ref:n,"data-cad-side-panel":"",style:Oe.root},s?Z.default.createElement("div",{style:{...Oe.panel,right:u.right,width:m}},Z.default.createElement("div",{style:Oe.resizer,onPointerDown:C,onPointerMove:T,onPointerUp:x,onPointerCancel:x,role:"separator","aria-orientation":"vertical","aria-label":"\u8C03\u6574 CAD \u9762\u677F\u5BBD\u5EA6"}),Z.default.createElement("div",{style:Oe.tabStripRow},Z.default.createElement("div",{style:Oe.tabStrip,role:"tablist","aria-label":"CAD \u6587\u6863"},g.map(M=>{let A=M.id===y;return Z.default.createElement("div",{key:M.id,role:"tab","aria-selected":A,tabIndex:0,style:{...Oe.tab,...A?Oe.tabActive:{}},onClick:()=>{Od(M.id)},onKeyDown:v=>{(v.key==="Enter"||v.key===" ")&&Od(M.id)}},Z.default.createElement("span",{style:A?Oe.tabIconActive:Oe.tabIcon},Z.default.createElement(Wd,{kind:M.id})),Z.default.createElement("span",{style:Oe.tabLabel},Fd[M.id]),Z.default.createElement("button",{type:"button",style:Oe.tabClose,"aria-label":`\u5173\u95ED ${Fd[M.id]}`,title:"\u5173\u95ED",onClick:v=>{v.stopPropagation(),Qx(M.id)}},"\xD7"))}),Z.default.createElement("button",{type:"button",style:Oe.addTab,"aria-label":"\u65B0\u5EFA\u6587\u6863",title:"\u65B0\u5EFA\uFF1A\u96F6\u4EF6 / \u88C5\u914D\u4F53 / \u5DE5\u7A0B\u56FE",onClick:()=>{d(!1),c(M=>!M)}},"+")),Z.default.createElement("button",{type:"button",style:Oe.fileButton,"aria-label":"\u6587\u6863\u5217\u8868","aria-expanded":h,title:"\u5DE5\u4F5C\u533A\u6587\u6863\u5217\u8868\uFF08\u9884\u89C8 / \u5220\u9664\uFF09",onClick:()=>{c(!1),d(M=>!M)}},Z.default.createElement(iv,null)),Z.default.createElement("span",{style:Oe.headerStats},S===null?"":xv(S)),Z.default.createElement("button",{type:"button",style:Oe.iconButton,onClick:()=>{r(!1)},"aria-label":"\u6536\u8D77 CAD \u9762\u677F",title:"\u6536\u8D77"},"\xBB")),l?Z.default.createElement(uv,{onPick:M=>{c(!1),kd(M)},onClose:()=>{c(!1)}}):null,h?Z.default.createElement(fv,{activeDocId:f.part?.viewId??null,onClose:()=>{d(!1)}}):null,Z.default.createElement("div",{style:Oe.body},y==="part"?Z.default.createElement(mv,{meta:f.part}):null,y==="assembly"?Z.default.createElement(gv,{meta:f.assembly}):null,y==="drawing"?Z.default.createElement(_v,{meta:f.drawing}):null)):Z.default.createElement("button",{type:"button",style:{...Oe.rail,right:u.right+10},onClick:()=>{r(!0)},"aria-label":"\u5C55\u5F00 CAD \u9762\u677F",title:"\u5C55\u5F00 CAD \u89C6\u56FE"},"\xAB\xA0\xA0CAD"))}}function pv(i,e,t){(0,Z.useLayoutEffect)(()=>{let n=i.current;if(n===null)return;let s=Xd(n).centerCol;if(s!==null)return s.style.paddingRight=e?`${lv+t}px`:"",()=>{s.style.paddingRight=""}},[i,e,t])}function mv({meta:i}){let e=tv(),t=Bi(i?.sceneUrl),n=Bi(e?.sceneUrl);return(0,Z.useEffect)(()=>{i!==null&&Nr!==null&&rl(null)},[i?.sceneUrl]),e!==null?Z.default.createElement("div",{style:Oe.sceneFill},Z.default.createElement("div",{style:Oe.previewBar},Z.default.createElement("span",{style:Oe.previewLabel},"\u9884\u89C8: ",e.name),Z.default.createElement("button",{type:"button",style:Oe.previewBack,onClick:()=>{rl(null)}},"\u8FD4\u56DE\u8DDF\u8E2A")),Z.default.createElement(zi,{scene:n.scene,error:n.error,fill:!0})):i===null?Z.default.createElement(vv,null):Z.default.createElement("div",{key:i.sceneUrl??i.viewId,style:Oe.sceneFill},Z.default.createElement(zi,{scene:t.scene,error:t.error,fill:!0}))}function gv({meta:i}){let{scene:e,error:t}=Bi(i?.sceneUrl);return i===null?Z.default.createElement(Yd,{icon:Z.default.createElement(Hd,null),title:"\u88C5\u914D\u4F53\u4E3A\u7A7A",hint:"\u5728\u5BF9\u8BDD\u4E2D\u8BF4\u300C\u628A b1 \u548C b2 \u88C5\u914D\u8D77\u6765\uFF0Cb2 \u653E\u5230 (60, 0, 0)\u300D\uFF0C\u6216\u4F7F\u7528 cad_assembly_insert \u5DE5\u5177\u63D2\u5165\u5B9E\u4F8B"}):Z.default.createElement("div",{key:i.sceneUrl??i.viewId,style:Oe.sceneFill},Z.default.createElement(zi,{scene:e,error:t,fill:!0}))}function _v({meta:i}){let{scene:e,error:t}=Bi(i?.sceneUrl);return i===null?Z.default.createElement(Yd,{icon:Z.default.createElement(Gd,null),title:"\u8FD8\u6CA1\u6709\u5DE5\u7A0B\u56FE",hint:"\u5728\u5BF9\u8BDD\u4E2D\u8BF4\u300C\u7ED9 b1 \u51FA\u4E00\u5F20 A3 \u5DE5\u7A0B\u56FE\u300D\uFF0C\u6216\u4F7F\u7528 cad_drawing \u5DE5\u5177\u751F\u6210\u4E09\u89C6\u56FE + \u8F74\u6D4B\u56FE"}):Z.default.createElement("div",{key:i.sceneUrl??i.viewId,style:{...Oe.sceneFill,background:"#fff"}},Z.default.createElement(zi,{scene:e,error:t,fill:!0}))}function Yd({icon:i,title:e,hint:t}){return Z.default.createElement("div",{style:Oe.emptyState},Z.default.createElement("div",{style:Oe.emptyIcon},i),Z.default.createElement("div",{style:Oe.emptyTitle},e),Z.default.createElement("div",{style:Oe.emptyHint},t))}function xv(i){let e=[];if(i.kind==="3d"){let t=i.doc==="assembly"?" \u5B9E\u4F8B":" \u4F53";i.stats.meshes!==void 0&&e.push(`${i.stats.meshes}${t}`),i.stats.triangles!==void 0&&e.push(`${i.stats.triangles.toLocaleString()} \u4E09\u89D2\u9762`)}else i.stats.entities!==void 0&&e.push(`${i.stats.entities.toLocaleString()} \u5B9E\u4F53`);return e.join(" \xB7 ")}function vv(){let i=(0,Z.useRef)(null);return(0,Z.useEffect)(()=>{let e=i.current;if(e===null)return;let t=Ed(e,{part:null});return()=>{t.dispose()}},[]),Z.default.createElement("div",{style:Oe.demoRoot},Z.default.createElement("div",{style:Oe.demoCaption},"Part Studio"),Z.default.createElement("div",{style:Oe.demoViewport},Z.default.createElement("div",{ref:i,style:{width:"100%",height:"100%"}})),Z.default.createElement("div",{style:Oe.demoHint},"\u5EFA\u6A21\u533A\u4E3A\u7A7A \xB7 \u5728\u5BF9\u8BDD\u4E2D\u63CF\u8FF0\u96F6\u4EF6\uFF08\u5982\u300C\u5EFA\u4E00\u4E2A 100\xD760\xD710 \u7684\u677F\uFF0C\u4E2D\u95F4\u6253 \u230020 \u5B54\u300D\uFF09\uFF0C\u5EFA\u6A21\u540E\u6B64\u9875\u7B7E\u5B9E\u65F6\u8DDF\u8E2A\u6700\u65B0\u6A21\u578B"))}var Oe={root:{position:"absolute",inset:0,pointerEvents:"none"},panel:{position:"absolute",top:0,bottom:0,pointerEvents:"auto",display:"flex",flexDirection:"column",minWidth:0,background:"var(--dsw-alias-bg-base, #fff)",borderLeft:"1px solid var(--dsw-alias-border-l2, #c4c9d0)",boxShadow:"-16px 0 28px -20px rgba(16,24,40,0.18)"},resizer:{position:"absolute",top:0,bottom:0,left:0,width:7,marginLeft:-3,cursor:"col-resize",zIndex:6,touchAction:"none"},tabStripRow:{display:"flex",alignItems:"center",gap:6,padding:"6px 8px 6px 12px",flex:"none",borderBottom:"1px solid var(--dsw-alias-border-l1, #eceff3)",background:"var(--dsw-alias-bg-subtle, #f7f8fa)",position:"relative"},tabStrip:{display:"flex",alignItems:"center",gap:4,flex:"1 1 auto",minWidth:0,overflow:"hidden"},tab:{display:"flex",alignItems:"center",gap:5,padding:"4px 6px 4px 9px",borderRadius:7,border:"1px solid transparent",color:"var(--dsw-alias-label-tertiary, #6b7280)",cursor:"pointer",userSelect:"none",flex:"none",maxWidth:150,lineHeight:"18px"},tabActive:{background:"var(--dsw-alias-bg-base, #fff)",borderColor:"var(--dsw-alias-border-l1, #e2e5ea)",color:"var(--dsw-alias-label-primary, #1f2937)",boxShadow:"0 1px 2px rgba(16,24,40,0.06)"},tabIcon:{display:"flex",alignItems:"center",opacity:.75,flex:"none"},tabIconActive:{display:"flex",alignItems:"center",color:"var(--dsw-alias-label-primary, #4d6bfe)",flex:"none"},tabLabel:{fontSize:12,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},tabClose:{border:"none",background:"transparent",color:"var(--dsw-alias-label-tertiary, #9ca3af)",fontSize:13,lineHeight:"16px",width:16,height:16,borderRadius:4,cursor:"pointer",padding:0,flex:"none",textAlign:"center"},addTab:{flex:"none",width:24,height:24,marginLeft:2,display:"flex",alignItems:"center",justifyContent:"center",border:"1px solid var(--dsw-alias-border-l1, #e2e5ea)",borderRadius:7,background:"var(--dsw-alias-bg-base, #fff)",color:"var(--dsw-alias-label-secondary, #374151)",fontSize:15,lineHeight:"18px",cursor:"pointer",padding:0},menu:{position:"absolute",top:40,left:12,zIndex:20,minWidth:230,padding:5,background:"var(--dsw-alias-bg-base, #fff)",border:"1px solid var(--dsw-alias-border-l1, #e2e5ea)",borderRadius:10,boxShadow:"0 12px 32px -12px rgba(16,24,40,0.24)",display:"flex",flexDirection:"column",gap:1},menuItem:{display:"flex",alignItems:"center",gap:8,padding:"7px 9px",border:"none",borderRadius:7,background:"transparent",color:"var(--dsw-alias-label-primary, #1f2937)",cursor:"pointer",textAlign:"left",font:"inherit",fontSize:12.5},menuIcon:{display:"flex",alignItems:"center",color:"var(--dsw-alias-label-secondary, #374151)",flex:"none"},menuLabel:{fontWeight:600,flex:"none"},menuHint:{color:"var(--dsw-alias-label-tertiary, #9ca3af)",fontSize:11,marginLeft:"auto",whiteSpace:"nowrap"},fileButton:{flex:"none",display:"flex",alignItems:"center",justifyContent:"center",width:24,height:24,marginLeft:4,border:"1px solid var(--dsw-alias-border-l2, #c4c9d0)",borderRadius:6,background:"transparent",color:"var(--dsw-alias-label-secondary, #374151)",cursor:"pointer",padding:0},docsHeader:{fontSize:11,fontWeight:600,color:"var(--dsw-alias-label-tertiary, #6b7280)",padding:"5px 9px 3px",letterSpacing:"0.02em"},docsHintRow:{fontSize:12,color:"var(--dsw-alias-label-tertiary, #6b7280)",padding:"8px 9px"},docsError:{fontSize:12,color:"var(--dsw-alias-state-error-primary, #d92d20)",padding:"4px 9px"},docsFooter:{fontSize:11,color:"var(--dsw-alias-label-tertiary, #9ca3af)",padding:"5px 9px 3px",borderTop:"1px solid var(--dsw-alias-border-l1, #e2e5ea)",marginTop:3},docRow:{display:"flex",alignItems:"center",gap:2},docRowMain:{display:"flex",alignItems:"center",gap:8,flex:"1 1 auto",minWidth:0,padding:"7px 9px",border:"none",borderRadius:7,background:"transparent",color:"var(--dsw-alias-label-primary, #1f2937)",cursor:"pointer",textAlign:"left",font:"inherit",fontSize:12.5},docDelete:{flex:"none",width:22,height:22,border:"none",borderRadius:6,background:"transparent",color:"var(--dsw-alias-label-tertiary, #9ca3af)",fontSize:14,lineHeight:"20px",cursor:"pointer",padding:0},docConfirm:{display:"flex",alignItems:"center",gap:4,flex:"none",padding:"0 4px 0 0"},docConfirmYes:{border:"none",borderRadius:6,background:"var(--dsw-alias-state-error-primary, #d92d20)",color:"#fff",fontSize:11,padding:"3px 8px",cursor:"pointer"},docConfirmNo:{border:"1px solid var(--dsw-alias-border-l2, #c4c9d0)",borderRadius:6,background:"transparent",color:"var(--dsw-alias-label-secondary, #374151)",fontSize:11,padding:"3px 8px",cursor:"pointer"},previewBar:{flex:"none",display:"flex",alignItems:"center",gap:8,padding:"5px 10px",borderBottom:"1px solid var(--dsw-alias-border-l1, #e2e5ea)",background:"var(--dsw-alias-bg-subtle, #f5f6f8)"},previewLabel:{flex:"1 1 auto",minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontSize:12,color:"var(--dsw-alias-label-primary, #1f2937)",fontWeight:600},previewBack:{flex:"none",border:"1px solid var(--dsw-alias-border-l2, #c4c9d0)",borderRadius:6,background:"transparent",color:"var(--dsw-alias-label-secondary, #374151)",fontSize:11,padding:"2px 8px",cursor:"pointer"},headerStats:{flex:"none",fontSize:11,color:"var(--dsw-alias-label-tertiary, #6b7280)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"30%"},iconButton:{flex:"none",border:"none",background:"transparent",color:"var(--dsw-alias-label-tertiary, #6b7280)",fontSize:15,lineHeight:"20px",width:26,height:26,borderRadius:6,cursor:"pointer",padding:0},body:{flex:"1 1 auto",minHeight:0,display:"flex",flexDirection:"column"},sceneFill:{flex:"1 1 auto",minHeight:0,display:"flex",flexDirection:"column"},emptyState:{flex:"1 1 auto",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:8,padding:24,color:"var(--dsw-alias-label-tertiary, #9ca3af)",textAlign:"center"},emptyIcon:{display:"flex",color:"var(--dsw-alias-label-tertiary, #c0c6cf)",transform:"scale(2)",marginBottom:6},emptyTitle:{fontSize:13,fontWeight:600,color:"var(--dsw-alias-label-secondary, #6b7280)"},emptyHint:{fontSize:11.5,lineHeight:"18px",maxWidth:300},demoRoot:{flex:"1 1 auto",minHeight:0,display:"flex",flexDirection:"column",gap:6,padding:"10px 10px 12px"},demoCaption:{color:"var(--dsw-alias-label-tertiary, #6b7280)",fontSize:11,textTransform:"uppercase",letterSpacing:"0.05em",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",flex:"none"},demoViewport:{position:"relative",flex:"1 1 auto",minHeight:0,borderRadius:10,overflow:"hidden",background:"var(--dsh-cad-bg, linear-gradient(#f5f6f8, #e9ecf0))"},demoHint:{flex:"none",color:"var(--dsw-alias-label-tertiary, #9ca3af)",fontSize:11,lineHeight:"17px",textAlign:"center"},rail:{position:"absolute",top:72,pointerEvents:"auto",writingMode:"vertical-rl",padding:"12px 6px",borderRadius:10,border:"1px solid var(--dsw-alias-border-l2, #c4c9d0)",background:"var(--dsw-alias-bg-base, #fff)",color:"var(--dsw-alias-label-secondary, #374151)",fontSize:11,letterSpacing:"0.08em",cursor:"pointer",boxShadow:"4px 4px 12px -6px rgba(16,24,40,0.2)"}};var yv=["slots"],bv=["cad_view","cad_create_prim","cad_extrude_profile","cad_revolve","cad_chamfer","cad_shell","cad_draft","cad_pattern","cad_loft","cad_sweep","cad_boolean","cad_fillet","cad_transform","cad_export","cad_delete","cad_volume","cad_freecad","cad_image_profile","cad_drawing","cad_assembly_insert","cad_assembly_move","cad_assembly_remove","cad_doc_open","cad_constraint","cad_solve","cad_motion"];function Mv(i){i.slots.onEntryError?.((n,s,r,o)=>{try{document.documentElement.setAttribute("data-cad-slot-crash",`${n}:${String(r instanceof Error?r.message:r).slice(0,160)}:abd=${String(o.abdicated)}`)}catch{}});for(let n of bv)i.slots.inject("tool.call.toolview",()=>i.slots.register({name:"tool.call.toolview",key:n,locale:"conversation"},Ud));let t=i.get?.("sessions");i.slots.inject("shell.overlay",()=>i.slots.register({name:"shell.overlay",id:"cad-side-panel",order:100,label:"CAD"},qd(t)))}
|
|
4114
4114
|
return module.exports;
|
|
4115
4115
|
}
|
|
4116
4116
|
});
|