@react-three/drei 9.38.0 → 9.38.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),a=require("@react-three/fiber"),i=require("./shaderMaterial.cjs.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var o=n(e),l=s(t),h=s(r);const c=h.createContext(null),u=i.shaderMaterial({color:new l.Color,blend:2,alphaTest:.75,opacity:0,map:null},"varying vec2 vUv;\n void main() {\n gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);\n vUv = uv;\n }","varying vec2 vUv;\n uniform sampler2D map;\n uniform vec3 color;\n uniform float opacity;\n uniform float alphaTest;\n uniform float blend;\n void main() {\n vec4 sampledDiffuseColor = texture2D(map, vUv);\n gl_FragColor = vec4(color * sampledDiffuseColor.r * blend, max(0.0, (1.0 - (sampledDiffuseColor.r + sampledDiffuseColor.g + sampledDiffuseColor.b) / alphaTest)) * opacity);\n #include <tonemapping_fragment>\n #include <encodings_fragment>\n }"),d=i.shaderMaterial({},"void main() { gl_Position = vec4((uv - 0.5) * 2.0, 1.0, 1.0); }","void main() { discard; }"),p=h.forwardRef((({children:e,temporal:t,frames:r=40,limit:i=1/0,blend:n=20,scale:s=10,opacity:o=1,alphaTest:l=.75,color:d="black",colorBlend:p=2,resolution:g=1024,toneMapped:m=!0,...v},M)=>{a.extend({SoftShadowMaterial:u});const b=a.useThree((e=>e.gl)),y=a.useThree((e=>e.scene)),w=a.useThree((e=>e.camera)),S=h.useRef(null),x=h.useRef(null),[j]=h.useState((()=>new f(b,y,g)));h.useLayoutEffect((()=>{j.configure(S.current)}),[]);const E=h.useMemo((()=>({lights:new Map,temporal:!!t,frames:Math.max(2,r),blend:Math.max(2,r===1/0?n:r),count:0,getMesh:()=>S.current,reset:()=>{j.clear();const e=S.current.material;e.opacity=0,e.alphaTest=0,E.count=0},update:(e=1)=>{const t=S.current.material;E.temporal?(t.opacity=Math.min(o,t.opacity+o/E.blend),t.alphaTest=Math.min(l,t.alphaTest+l/E.blend)):(t.opacity=o,t.alphaTest=l),x.current.visible=!0,j.prepare();for(let t=0;t<e;t++)E.lights.forEach((e=>e.update())),j.update(w,E.blend);x.current.visible=!1,j.finish()}})),[j,w,y,t,r,n,o,l]);return h.useLayoutEffect((()=>{E.reset(),E.temporal||E.frames===1/0||E.update(E.blend)})),h.useImperativeHandle(M,(()=>E),[E]),a.useFrame((()=>{(E.temporal||E.frames===1/0)&&E.count<E.frames&&E.count<i&&(E.update(),E.count++)})),h.createElement("group",v,h.createElement("group",{traverse:()=>null,ref:x},h.createElement(c.Provider,{value:E},e)),h.createElement("mesh",{receiveShadow:!0,ref:S,scale:s,rotation:[-Math.PI/2,0,0]},h.createElement("planeGeometry",null),h.createElement("softShadowMaterial",{transparent:!0,depthWrite:!1,toneMapped:m,color:d,blend:p,map:j.progressiveLightMap2.texture})))})),g=h.forwardRef((({castShadow:e=!0,bias:t=.001,mapSize:r=512,size:a=5,near:i=.5,far:n=500,frames:s=1,position:u=[0,0,0],radius:d=1,amount:p=8,intensity:g=1,ambient:f=.5,...m},v)=>{const M=h.useRef(null),b=new l.Vector3(...u).length(),y=h.useContext(c),w=h.useCallback((()=>{let e;if(M.current)for(let t=0;t<M.current.children.length;t++)if(e=M.current.children[t],Math.random()>f)e.position.set(u[0]+l.MathUtils.randFloatSpread(d),u[1]+l.MathUtils.randFloatSpread(d),u[2]+l.MathUtils.randFloatSpread(d));else{let t=Math.acos(2*Math.random()-1)-Math.PI/2,r=2*Math.PI*Math.random();e.position.set(Math.cos(t)*Math.cos(r)*b,Math.abs(Math.cos(t)*Math.sin(r)*b),Math.sin(t)*b)}}),[d,f,b,...u]),S=h.useMemo((()=>({update:w})),[w]);return h.useImperativeHandle(v,(()=>S),[S]),h.useLayoutEffect((()=>{const e=M.current;return y&&y.lights.set(e.uuid,S),()=>{y.lights.delete(e.uuid)}}),[y,S]),h.createElement("group",o.default({ref:M},m),Array.from({length:p},((s,o)=>h.createElement("directionalLight",{key:o,castShadow:e,"shadow-bias":t,"shadow-mapSize":[r,r],intensity:g/p},h.createElement("orthographicCamera",{attach:"shadow-camera",args:[-a,a,a,-a,i,n]})))))}));class f{constructor(e,t,r=1024){this.renderer=e,this.res=r,this.scene=t,this.scene.background=null,this.buffer1Active=!1,this.lights=[],this.meshes=[],this.object=null;const a=/(Android|iPad|iPhone|iPod)/g.test(navigator.userAgent)?l.HalfFloatType:l.FloatType;this.progressiveLightMap1=new l.WebGLRenderTarget(this.res,this.res,{type:a,encoding:e.outputEncoding}),this.progressiveLightMap2=new l.WebGLRenderTarget(this.res,this.res,{type:a,encoding:e.outputEncoding}),this.discardMat=new d,this.targetMat=new l.MeshPhongMaterial({shininess:0}),this.previousShadowMap={value:this.progressiveLightMap1.texture},this.averagingWindow={value:100},this.targetMat.onBeforeCompile=e=>{e.vertexShader="varying vec2 vUv;\n"+e.vertexShader.slice(0,-1)+"vUv = uv; gl_Position = vec4((uv - 0.5) * 2.0, 1.0, 1.0); }";const t=e.fragmentShader.indexOf("void main() {");e.fragmentShader=e.fragmentShader.replace("#include <clipping_planes_pars_fragment>","#include <clipping_planes_pars_fragment>\n#include <shadowmask_pars_fragment>\n"),e.fragmentShader="varying vec2 vUv;\n"+e.fragmentShader.slice(0,t)+"\tuniform sampler2D previousShadowMap;\n\tuniform float averagingWindow;\n"+e.fragmentShader.slice(t-1,-1)+"\nvec3 texelOld = texture2D(previousShadowMap, vUv).rgb;\n gl_FragColor.rgb = mix(texelOld, gl_FragColor.rgb, 1.0/averagingWindow);\n }",e.uniforms.previousShadowMap=this.previousShadowMap,e.uniforms.averagingWindow=this.averagingWindow}}clear(){this.renderer.setRenderTarget(this.progressiveLightMap1),this.renderer.clear(),this.renderer.setRenderTarget(this.progressiveLightMap2),this.renderer.clear(),this.lights=[],this.meshes=[],this.scene.traverse((e=>{!function(e){return!!e.geometry}(e)?function(e){return e.isLight}(e)&&this.lights.push({object:e,intensity:e.intensity}):this.meshes.push({object:e,material:e.material})}))}prepare(){this.lights.forEach((e=>e.object.intensity=0)),this.meshes.forEach((e=>e.object.material=this.discardMat))}finish(){this.lights.forEach((e=>e.object.intensity=e.intensity)),this.meshes.forEach((e=>e.object.material=e.material))}configure(e){this.object=e}update(e,t=100){if(!this.object)return;this.averagingWindow.value=t,this.object.material=this.targetMat;const r=this.buffer1Active?this.progressiveLightMap1:this.progressiveLightMap2,a=this.buffer1Active?this.progressiveLightMap2:this.progressiveLightMap1;this.renderer.setRenderTarget(r),this.previousShadowMap.value=a.texture,this.buffer1Active=!this.buffer1Active,this.renderer.render(this.scene,e),this.renderer.setRenderTarget(null)}}exports.AccumulativeShadows=p,exports.RandomizedLight=g,exports.accumulativeContext=c;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),a=require("@react-three/fiber"),i=require("./shaderMaterial.cjs.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var o=n(e),l=s(t),h=s(r);const c=h.createContext(null),u=i.shaderMaterial({color:new l.Color,blend:2,alphaTest:.75,opacity:0,map:null},"varying vec2 vUv;\n void main() {\n gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);\n vUv = uv;\n }","varying vec2 vUv;\n uniform sampler2D map;\n uniform vec3 color;\n uniform float opacity;\n uniform float alphaTest;\n uniform float blend;\n void main() {\n vec4 sampledDiffuseColor = texture2D(map, vUv);\n gl_FragColor = vec4(color * sampledDiffuseColor.r * blend, max(0.0, (1.0 - (sampledDiffuseColor.r + sampledDiffuseColor.g + sampledDiffuseColor.b) / alphaTest)) * opacity);\n #include <tonemapping_fragment>\n #include <encodings_fragment>\n }"),d=i.shaderMaterial({},"void main() { gl_Position = vec4((uv - 0.5) * 2.0, 1.0, 1.0); }","void main() { discard; }"),p=h.forwardRef((({children:e,temporal:t,frames:r=40,limit:i=1/0,blend:n=20,scale:s=10,opacity:o=1,alphaTest:l=.75,color:d="black",colorBlend:p=2,resolution:g=1024,toneMapped:m=!0,...v},M)=>{a.extend({SoftShadowMaterial:u});const b=a.useThree((e=>e.gl)),y=a.useThree((e=>e.scene)),w=a.useThree((e=>e.camera)),S=h.useRef(null),x=h.useRef(null),[j]=h.useState((()=>new f(b,y,g)));h.useLayoutEffect((()=>{j.configure(S.current)}),[]);const E=h.useMemo((()=>({lights:new Map,temporal:!!t,frames:Math.max(2,r),blend:Math.max(2,r===1/0?n:r),count:0,getMesh:()=>S.current,reset:()=>{j.clear();const e=S.current.material;e.opacity=0,e.alphaTest=0,E.count=0},update:(e=1)=>{const t=S.current.material;E.temporal?(t.opacity=Math.min(o,t.opacity+o/E.blend),t.alphaTest=Math.min(l,t.alphaTest+l/E.blend)):(t.opacity=o,t.alphaTest=l),x.current.visible=!0,j.prepare();for(let t=0;t<e;t++)E.lights.forEach((e=>e.update())),j.update(w,E.blend);x.current.visible=!1,j.finish()}})),[j,w,y,t,r,n,o,l]);return h.useLayoutEffect((()=>{E.reset(),E.temporal||E.frames===1/0||E.update(E.blend)})),h.useImperativeHandle(M,(()=>E),[E]),a.useFrame((()=>{(E.temporal||E.frames===1/0)&&E.count<E.frames&&E.count<i&&(E.update(),E.count++)})),h.createElement("group",v,h.createElement("group",{traverse:()=>null,ref:x},h.createElement(c.Provider,{value:E},e)),h.createElement("mesh",{receiveShadow:!0,ref:S,scale:s,rotation:[-Math.PI/2,0,0]},h.createElement("planeGeometry",null),h.createElement("softShadowMaterial",{transparent:!0,depthWrite:!1,toneMapped:m,color:d,blend:p,map:j.progressiveLightMap2.texture})))})),g=h.forwardRef((({castShadow:e=!0,bias:t=.001,mapSize:r=512,size:a=5,near:i=.5,far:n=500,frames:s=1,position:u=[0,0,0],radius:d=1,amount:p=8,intensity:g=1,ambient:f=.5,...m},v)=>{const M=h.useRef(null),b=new l.Vector3(...u).length(),y=h.useContext(c),w=h.useCallback((()=>{let e;if(M.current)for(let t=0;t<M.current.children.length;t++)if(e=M.current.children[t],Math.random()>f)e.position.set(u[0]+l.MathUtils.randFloatSpread(d),u[1]+l.MathUtils.randFloatSpread(d),u[2]+l.MathUtils.randFloatSpread(d));else{let t=Math.acos(2*Math.random()-1)-Math.PI/2,r=2*Math.PI*Math.random();e.position.set(Math.cos(t)*Math.cos(r)*b,Math.abs(Math.cos(t)*Math.sin(r)*b),Math.sin(t)*b)}}),[d,f,b,...u]),S=h.useMemo((()=>({update:w})),[w]);return h.useImperativeHandle(v,(()=>S),[S]),h.useLayoutEffect((()=>{const e=M.current;return y&&y.lights.set(e.uuid,S),()=>{y.lights.delete(e.uuid)}}),[y,S]),h.createElement("group",o.default({ref:M},m),Array.from({length:p},((s,o)=>h.createElement("directionalLight",{key:o,castShadow:e,"shadow-bias":t,"shadow-mapSize":[r,r],intensity:g/p},h.createElement("orthographicCamera",{attach:"shadow-camera",args:[-a,a,a,-a,i,n]})))))}));class f{constructor(e,t,r=1024){this.renderer=e,this.res=r,this.scene=t,this.buffer1Active=!1,this.lights=[],this.meshes=[],this.object=null;const a=/(Android|iPad|iPhone|iPod)/g.test(navigator.userAgent)?l.HalfFloatType:l.FloatType;this.progressiveLightMap1=new l.WebGLRenderTarget(this.res,this.res,{type:a,encoding:e.outputEncoding}),this.progressiveLightMap2=new l.WebGLRenderTarget(this.res,this.res,{type:a,encoding:e.outputEncoding}),this.discardMat=new d,this.targetMat=new l.MeshPhongMaterial({shininess:0}),this.previousShadowMap={value:this.progressiveLightMap1.texture},this.averagingWindow={value:100},this.targetMat.onBeforeCompile=e=>{e.vertexShader="varying vec2 vUv;\n"+e.vertexShader.slice(0,-1)+"vUv = uv; gl_Position = vec4((uv - 0.5) * 2.0, 1.0, 1.0); }";const t=e.fragmentShader.indexOf("void main() {");e.fragmentShader=e.fragmentShader.replace("#include <clipping_planes_pars_fragment>","#include <clipping_planes_pars_fragment>\n#include <shadowmask_pars_fragment>\n"),e.fragmentShader="varying vec2 vUv;\n"+e.fragmentShader.slice(0,t)+"\tuniform sampler2D previousShadowMap;\n\tuniform float averagingWindow;\n"+e.fragmentShader.slice(t-1,-1)+"\nvec3 texelOld = texture2D(previousShadowMap, vUv).rgb;\n gl_FragColor.rgb = mix(texelOld, gl_FragColor.rgb, 1.0/averagingWindow);\n }",e.uniforms.previousShadowMap=this.previousShadowMap,e.uniforms.averagingWindow=this.averagingWindow}}clear(){this.renderer.setRenderTarget(this.progressiveLightMap1),this.renderer.clear(),this.renderer.setRenderTarget(this.progressiveLightMap2),this.renderer.clear(),this.lights=[],this.meshes=[],this.scene.traverse((e=>{!function(e){return!!e.geometry}(e)?function(e){return e.isLight}(e)&&this.lights.push({object:e,intensity:e.intensity}):this.meshes.push({object:e,material:e.material})}))}prepare(){this.lights.forEach((e=>e.object.intensity=0)),this.meshes.forEach((e=>e.object.material=this.discardMat))}finish(){this.lights.forEach((e=>e.object.intensity=e.intensity)),this.meshes.forEach((e=>e.object.material=e.material))}configure(e){this.object=e}update(e,t=100){if(!this.object)return;this.averagingWindow.value=t,this.object.material=this.targetMat;const r=this.buffer1Active?this.progressiveLightMap1:this.progressiveLightMap2,a=this.buffer1Active?this.progressiveLightMap2:this.progressiveLightMap1,i=this.scene.background;this.scene.background=null,this.renderer.setRenderTarget(r),this.previousShadowMap.value=a.texture,this.buffer1Active=!this.buffer1Active,this.renderer.render(this.scene,e),this.renderer.setRenderTarget(null),this.scene.background=i}}exports.AccumulativeShadows=p,exports.RandomizedLight=g,exports.accumulativeContext=c;
@@ -204,7 +204,6 @@ class ProgressiveLightMap {
204
204
  this.renderer = renderer;
205
205
  this.res = res;
206
206
  this.scene = scene;
207
- this.scene.background = null;
208
207
  this.buffer1Active = false;
209
208
  this.lights = [];
210
209
  this.meshes = [];
@@ -291,11 +290,14 @@ class ProgressiveLightMap {
291
290
  const activeMap = this.buffer1Active ? this.progressiveLightMap1 : this.progressiveLightMap2;
292
291
  const inactiveMap = this.buffer1Active ? this.progressiveLightMap2 : this.progressiveLightMap1; // Render the object's surface maps
293
292
 
293
+ const oldBg = this.scene.background;
294
+ this.scene.background = null;
294
295
  this.renderer.setRenderTarget(activeMap);
295
296
  this.previousShadowMap.value = inactiveMap.texture;
296
297
  this.buffer1Active = !this.buffer1Active;
297
298
  this.renderer.render(this.scene, camera);
298
299
  this.renderer.setRenderTarget(null);
300
+ this.scene.background = oldBg;
299
301
  }
300
302
 
301
303
  }
@@ -7,11 +7,11 @@ export declare type TransformControlsProps = ReactThreeFiber.Object3DNode<Transf
7
7
  enabled?: boolean;
8
8
  axis?: string | null;
9
9
  domElement?: HTMLElement;
10
- mode?: string;
10
+ mode?: 'translate' | 'rotate' | 'scale';
11
11
  translationSnap?: number | null;
12
12
  rotationSnap?: number | null;
13
13
  scaleSnap?: number | null;
14
- space?: string;
14
+ space?: 'world' | 'local';
15
15
  size?: number;
16
16
  showX?: boolean;
17
17
  showY?: boolean;
package/index.cjs.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("react-dom/client"),n=require("three"),o=require("@react-three/fiber"),a=require("zustand"),i=require("react-merge-refs"),s=require("@react-spring/three"),c=require("@use-gesture/react"),l=require("zustand/middleware"),u=require("three-stdlib"),d=require("zustand/shallow"),m=require("troika-three-text"),f=require("suspend-react"),p=require("meshline"),h=require("lodash.pick"),v=require("lodash.omit"),g=require("stats.js"),x=require("detect-gpu"),y=require("three-mesh-bvh"),w=require("react-composer"),E=require("lodash.clamp");function b(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function M(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var S=b(e),T=M(t),C=M(r),P=M(n),R=b(a),D=b(i),_=b(d),L=b(h),z=b(v),k=b(g),F=b(w),A=b(E);const B=new n.Vector3,U=new n.Vector3,V=new n.Vector3;function I(e,t,r){const n=B.setFromMatrixPosition(e.matrixWorld);n.project(t);const o=r.width/2,a=r.height/2;return[n.x*o+o,-n.y*a+a]}const O=e=>Math.abs(e)<1e-10?0:e;function j(e,t,r=""){let n="matrix3d(";for(let r=0;16!==r;r++)n+=O(t[r]*e.elements[r])+(15!==r?",":")");return r+n}const W=(N=[1,-1,1,1,1,-1,1,1,1,-1,1,1,1,-1,1,1],e=>j(e,N));var N;const G=(e,t)=>{return j(e,[1/(r=t),1/r,1/r,1,-1/r,-1/r,-1/r,-1,1/r,1/r,1/r,1,1,1,1,1],"translate(-50%,-50%)");var r},H=T.forwardRef((({children:e,eps:t=.001,style:r,className:a,prepend:i,center:s,fullscreen:c,portal:l,distanceFactor:u,sprite:d=!1,transform:m=!1,occlude:f,onOcclude:p,zIndexRange:h=[16777271,0],calculatePosition:v=I,as:g="div",wrapperClass:x,pointerEvents:y="auto",...w},E)=>{const{gl:b,camera:M,scene:P,size:R,raycaster:D,events:_}=o.useThree(),[L]=T.useState((()=>document.createElement(g))),z=T.useRef(),k=T.useRef(null),F=T.useRef(0),A=T.useRef([0,0]),j=T.useRef(null),N=T.useRef(null),H=(null==l?void 0:l.current)||_.connected||b.domElement.parentNode;T.useLayoutEffect((()=>{if(k.current){const e=z.current=C.createRoot(L);if(P.updateMatrixWorld(),m)L.style.cssText="position:absolute;top:0;left:0;pointer-events:none;overflow:hidden;";else{const e=v(k.current,M,R);L.style.cssText=`position:absolute;top:0;left:0;transform:translate3d(${e[0]}px,${e[1]}px,0);transform-origin:0 0;`}return H&&(i?H.prepend(L):H.appendChild(L)),()=>{H&&H.removeChild(L),e.unmount()}}}),[H,m]),T.useLayoutEffect((()=>{x&&(L.className=x)}),[x]);const $=T.useMemo((()=>m?{position:"absolute",top:0,left:0,width:R.width,height:R.height,transformStyle:"preserve-3d",pointerEvents:"none"}:{position:"absolute",transform:s?"translate3d(-50%,-50%,0)":"none",...c&&{top:-R.height/2,left:-R.width/2,width:R.width,height:R.height},...r}),[r,s,c,R,m]),q=T.useMemo((()=>({position:"absolute",pointerEvents:y})),[y]);T.useLayoutEffect((()=>{var t,n;m?null==(t=z.current)||t.render(T.createElement("div",{ref:j,style:$},T.createElement("div",{ref:N,style:q},T.createElement("div",{ref:E,className:a,style:r,children:e})))):null==(n=z.current)||n.render(T.createElement("div",{ref:E,style:$,className:a,children:e}))}));const X=T.useRef(!0);return o.useFrame((()=>{if(k.current){M.updateMatrixWorld(),k.current.updateWorldMatrix(!0,!1);const e=m?A.current:v(k.current,M,R);if(m||Math.abs(F.current-M.zoom)>t||Math.abs(A.current[0]-e[0])>t||Math.abs(A.current[1]-e[1])>t){const t=function(e,t){const r=B.setFromMatrixPosition(e.matrixWorld),n=U.setFromMatrixPosition(t.matrixWorld),o=r.sub(n),a=t.getWorldDirection(V);return o.angleTo(a)>Math.PI/2}(k.current,M);let r=!1;"boolean"==typeof f?!0===f&&(r=[P]):Array.isArray(f)&&(r=f.map((e=>e.current)));const o=X.current;if(r){const e=function(e,t,r,n){const o=B.setFromMatrixPosition(e.matrixWorld),a=o.clone();a.project(t),r.setFromCamera(a,t);const i=r.intersectObjects(n,!0);if(i.length){const e=i[0].distance;return o.distanceTo(r.ray.origin)<e}return!0}(k.current,M,D,r);X.current=e&&!t}else X.current=!t;if(o!==X.current&&(p?p(!X.current):L.style.display=X.current?"block":"none"),L.style.zIndex=`${function(e,t,r){if(t instanceof n.PerspectiveCamera||t instanceof n.OrthographicCamera){const n=B.setFromMatrixPosition(e.matrixWorld),o=U.setFromMatrixPosition(t.matrixWorld),a=n.distanceTo(o),i=(r[1]-r[0])/(t.far-t.near),s=r[1]-i*t.far;return Math.round(i*a+s)}}(k.current,M,h)}`,m){const[e,t]=[R.width/2,R.height/2],r=M.projectionMatrix.elements[5]*t,{isOrthographicCamera:n,top:o,left:a,bottom:i,right:s}=M,c=W(M.matrixWorldInverse),l=n?`scale(${r})translate(${O(-(s+a)/2)}px,${O((o+i)/2)}px)`:`translateZ(${r}px)`;let m=k.current.matrixWorld;d&&(m=M.matrixWorldInverse.clone().transpose().copyPosition(m).scale(k.current.scale),m.elements[3]=m.elements[7]=m.elements[11]=0,m.elements[15]=1),L.style.width=R.width+"px",L.style.height=R.height+"px",L.style.perspective=n?"":`${r}px`,j.current&&N.current&&(j.current.style.transform=`${l}${c}translate(${e}px,${t}px)`,N.current.style.transform=G(m,1/((u||10)/400)))}else{const t=void 0===u?1:function(e,t){if(t instanceof n.OrthographicCamera)return t.zoom;if(t instanceof n.PerspectiveCamera){const r=B.setFromMatrixPosition(e.matrixWorld),n=U.setFromMatrixPosition(t.matrixWorld),o=t.fov*Math.PI/180,a=r.distanceTo(n);return 1/(2*Math.tan(o/2)*a)}return 1}(k.current,M)*u;L.style.transform=`translate3d(${e[0]}px,${e[1]}px,0) scale(${t})`}A.current=e,F.current=M.zoom}}})),T.createElement("group",S.default({},w,{ref:k}))}));let $=0;const q=R.default((e=>(n.DefaultLoadingManager.onStart=(t,r,n)=>{e({active:!0,item:t,loaded:r,total:n,progress:(r-$)/(n-$)*100})},n.DefaultLoadingManager.onLoad=()=>{e({active:!1})},n.DefaultLoadingManager.onError=t=>e((e=>({errors:[...e.errors,t]}))),n.DefaultLoadingManager.onProgress=(t,r,n)=>{r===n&&($=n),e({active:!0,item:t,loaded:r,total:n,progress:(r-$)/(n-$)*100||100})},{errors:[],active:!1,progress:0,item:"",loaded:0,total:0}))),X=e=>`Loading ${e.toFixed(2)}%`;const Z={container:{position:"absolute",top:0,left:0,width:"100%",height:"100%",background:"#171717",display:"flex",alignItems:"center",justifyContent:"center",transition:"opacity 300ms ease",zIndex:1e3},inner:{width:100,height:3,background:"#272727",textAlign:"center"},bar:{height:3,width:"100%",background:"white",transition:"transform 200ms",transformOrigin:"left center"},data:{display:"inline-block",position:"relative",fontVariantNumeric:"tabular-nums",marginTop:"0.8em",color:"#f0f0f0",fontSize:"0.6em",fontFamily:'-apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", "Helvetica Neue", Helvetica, Arial, Roboto, Ubuntu, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"',whiteSpace:"nowrap"}},Y=T.createContext(null);function K(){return T.useContext(Y)}const Q=T.forwardRef((({children:e},t)=>{const r=T.useRef(null),n=K(),{width:a,height:i}=o.useThree((e=>e.viewport));return o.useFrame((()=>{r.current.position.x=n.horizontal?-a*(n.pages-1)*n.offset:0,r.current.position.y=n.horizontal?0:i*(n.pages-1)*n.offset})),T.createElement("group",{ref:D.default([t,r])},e)})),J=T.forwardRef((({children:e,style:t,...r},n)=>{const a=K(),i=T.useRef(null),{width:s,height:c}=o.useThree((e=>e.size)),l=T.useContext(o.context),u=T.useMemo((()=>C.createRoot(a.fixed)),[a.fixed]);return o.useFrame((()=>{a.delta>a.eps&&(i.current.style.transform=`translate3d(${a.horizontal?-s*(a.pages-1)*a.offset:0}px,${a.horizontal?0:c*(a.pages-1)*-a.offset}px,0)`)})),u.render(T.createElement("div",S.default({ref:D.default([n,i]),style:{...t,position:"absolute",top:0,left:0,willChange:"transform"}},r),T.createElement(Y.Provider,{value:a},T.createElement(o.context.Provider,{value:l},e)))),null})),ee=T.forwardRef((({html:e,...t},r)=>{const n=e?J:Q;return T.createElement(n,S.default({ref:r},t))}));const te=T.createContext(null);const re=T.createContext([]);const ne=T.forwardRef((function({follow:e=!0,lockX:t=!1,lockY:r=!1,lockZ:n=!1,...a},i){const s=T.useRef();return o.useFrame((({camera:o})=>{if(!e||!s.current)return;const a=s.current.rotation.clone();s.current.quaternion.copy(o.quaternion),t&&(s.current.rotation.x=a.x),r&&(s.current.rotation.y=a.y),n&&(s.current.rotation.z=a.z)})),T.createElement("group",S.default({ref:D.default([s,i])},a))})),oe=T.forwardRef((function({points:e,color:t="black",vertexColors:r,linewidth:a,lineWidth:i,dashed:s,...c},l){const d=o.useThree((e=>e.size)),[m]=T.useState((()=>new u.Line2)),[f]=T.useState((()=>new u.LineMaterial)),p=T.useMemo((()=>{const t=new u.LineGeometry,o=e.map((e=>{const t=Array.isArray(e);return e instanceof n.Vector3?[e.x,e.y,e.z]:e instanceof n.Vector2?[e.x,e.y,0]:t&&3===e.length?[e[0],e[1],e[2]]:t&&2===e.length?[e[0],e[1],0]:e}));if(t.setPositions(o.flat()),r){const e=r.map((e=>e instanceof n.Color?e.toArray():e));t.setColors(e.flat())}return t}),[e,r]);return T.useLayoutEffect((()=>{m.computeLineDistances()}),[e,m]),T.useLayoutEffect((()=>{s?f.defines.USE_DASH="":delete f.defines.USE_DASH,f.needsUpdate=!0}),[s,f]),T.useEffect((()=>()=>p.dispose()),[p]),T.createElement("primitive",S.default({object:m,ref:l},c),T.createElement("primitive",{object:p,attach:"geometry"}),T.createElement("primitive",S.default({object:f,attach:"material",color:t,vertexColors:Boolean(r),resolution:[d.width,d.height],linewidth:null!=a?a:i,dashed:s},c)))})),ae=new n.Vector3,ie=T.forwardRef((function({start:e=[0,0,0],end:t=[0,0,0],mid:r,segments:o=20,...a},i){const s=T.useRef(null),[c]=T.useState((()=>new n.QuadraticBezierCurve3(void 0,void 0,void 0))),l=T.useCallback(((e,t,r,o=20)=>(e instanceof n.Vector3?c.v0.copy(e):c.v0.set(...e),t instanceof n.Vector3?c.v2.copy(t):c.v2.set(...t),r instanceof n.Vector3?c.v1.copy(r):c.v1.copy(c.v0.clone().add(c.v2.clone().sub(c.v0)).add(ae.set(0,c.v0.y-c.v2.y,0))),c.getPoints(o))),[]);T.useLayoutEffect((()=>{s.current.setPoints=(e,t,r)=>{const n=l(e,t,r);s.current.geometry&&s.current.geometry.setPositions(n.map((e=>e.toArray())).flat())}}),[]);const u=T.useMemo((()=>l(e,t,r,o)),[e,t,r,o]);return T.createElement(oe,S.default({ref:D.default([s,i]),points:u},a))})),se=T.forwardRef((function({start:e,end:t,midA:r,midB:o,segments:a=20,...i},s){const c=T.useMemo((()=>{const i=e instanceof n.Vector3?e:new n.Vector3(...e),s=t instanceof n.Vector3?t:new n.Vector3(...t),c=r instanceof n.Vector3?r:new n.Vector3(...r),l=o instanceof n.Vector3?o:new n.Vector3(...o);return new n.CubicBezierCurve3(i,c,l,s).getPoints(a)}),[e,t,r,o,a]);return T.createElement(oe,S.default({ref:s,points:c},i))})),ce=T.forwardRef((function({points:e,closed:t=!1,curveType:r="centripetal",tension:o=.5,segments:a=20,vertexColors:i,...s},c){const l=T.useMemo((()=>{const a=e.map((e=>e instanceof n.Vector3?e:new n.Vector3(...e)));return new n.CatmullRomCurve3(a,t,r,o)}),[e,t,r,o]),u=T.useMemo((()=>l.getPoints(a)),[l,a]),d=T.useMemo((()=>{if(!i||i.length<2)return;if(i.length===a+1)return i;const e=i.map((e=>e instanceof n.Color?e:new n.Color(...e)));t&&e.push(e[0].clone());const r=[e[0]],o=a/(e.length-1);for(let t=1;t<a;t++){const n=t%o/o,a=Math.floor(t/o);r.push(e[a].clone().lerp(e[a+1],n))}return r.push(e[e.length-1]),r}),[i,a]);return T.createElement(oe,S.default({ref:c,points:u,vertexColors:d},s))})),le=T.forwardRef((({url:e,distance:t=1,loop:r=!0,autoplay:a,...i},s)=>{const c=T.useRef(),l=o.useThree((({camera:e})=>e)),[u]=T.useState((()=>new n.AudioListener)),d=o.useLoader(n.AudioLoader,e);return T.useEffect((()=>{const e=c.current;e&&(e.setBuffer(d),e.setRefDistance(t),e.setLoop(r),a&&!e.isPlaying&&e.play())}),[d,l,t,r]),T.useEffect((()=>{const e=c.current;return l.add(u),()=>{l.remove(u),e&&(e.isPlaying&&e.stop(),e.source&&e.source._connected&&e.disconnect())}}),[]),T.createElement("positionalAudio",S.default({ref:D.default([c,s]),args:[u]},i))})),ue=T.forwardRef((({anchorX:e="center",anchorY:t="middle",font:r,children:n,characters:a,onSync:i,...s},c)=>{const l=o.useThree((({invalidate:e})=>e)),[u]=T.useState((()=>new m.Text)),[d,p]=T.useMemo((()=>{const e=[];let t="";return T.Children.forEach(n,(r=>{"string"==typeof r||"number"==typeof r?t+=r:e.push(r)})),[e,t]}),[n]);return f.suspend((()=>new Promise((e=>m.preloadFont({font:r,characters:a},e)))),["troika-text",r,a]),T.useLayoutEffect((()=>{u.sync((()=>{l(),i&&i(u)}))})),T.useEffect((()=>()=>u.dispose()),[u]),T.createElement("primitive",S.default({object:u,ref:c,font:r,text:p,anchorX:e,anchorY:t},s),d)})),de=["string","number"],me=T.forwardRef((({font:e,letterSpacing:r=0,lineHeight:n=1,size:a=1,height:i=.2,bevelThickness:s=.1,bevelSize:c=.01,bevelEnabled:l=!1,bevelOffset:d=0,bevelSegments:m=4,curveSegments:p=8,children:h,...v},g)=>{T.useMemo((()=>o.extend({RenamedTextGeometry:u.TextGeometry})),[]);const x=f.suspend((async()=>{let t="string"==typeof e?await(await fetch(e)).json():e;return(new u.FontLoader).parse(t)}),[e]),y=t.useMemo((()=>({font:x,size:a,height:i,bevelThickness:s,bevelSize:c,bevelEnabled:l,bevelSegments:m,bevelOffset:d,curveSegments:p,letterSpacing:r,lineHeight:n})),[x,a,i,s,c,l,m,d,p,r,n]),[w,...E]=t.useMemo((()=>(e=>{let t="";const r=[];return T.Children.forEach(e,(e=>{de.includes(typeof e)?t+=e+"":r.push(e)})),[t,...r]})(h)),[h]),b=T.useMemo((()=>[w,y]),[w,y]);return T.createElement("mesh",S.default({},v,{ref:g}),T.createElement("renamedTextGeometry",{args:b}),E)})),fe=T.forwardRef((({children:e,multisamping:t=8,renderIndex:r=1,disableRender:a,disableGamma:i,disableRenderPass:s,depthBuffer:c=!0,stencilBuffer:l=!1,anisotropy:d=1,encoding:m,type:f,...p},h)=>{T.useMemo((()=>o.extend({EffectComposer:u.EffectComposer,RenderPass:u.RenderPass,ShaderPass:u.ShaderPass})),[]);const v=T.useRef(),{scene:g,camera:x,gl:y,size:w,viewport:E}=o.useThree(),[b]=T.useState((()=>{const e=new n.WebGLRenderTarget(w.width,w.height,{type:f||n.HalfFloatType,format:n.RGBAFormat,encoding:m||y.outputEncoding,depthBuffer:c,stencilBuffer:l,anisotropy:d});return e.samples=t,e}));T.useEffect((()=>{var e,t;null==(e=v.current)||e.setSize(w.width,w.height),null==(t=v.current)||t.setPixelRatio(E.dpr)}),[y,w,E.dpr]),o.useFrame((()=>{var e;a||null==(e=v.current)||e.render()}),r);const M=[];return s||M.push(T.createElement("renderPass",{key:"renderpass",attach:`passes-${M.length}`,args:[g,x]})),i||M.push(T.createElement("shaderPass",{attach:`passes-${M.length}`,key:"gammapass",args:[u.GammaCorrectionShader]})),T.Children.forEach(e,(e=>{e&&M.push(T.cloneElement(e,{key:M.length,attach:`passes-${M.length}`}))})),T.createElement("effectComposer",S.default({ref:D.default([h,v]),args:[y,b]},p),M)}));function pe(e,t,r,n){const o=class extends P.ShaderMaterial{constructor(o={}){const a=Object.entries(e);super({uniforms:a.reduce(((e,[t,r])=>({...e,...P.UniformsUtils.clone({[t]:{value:r}})})),{}),vertexShader:t,fragmentShader:r,...o}),this.key="",a.forEach((([e])=>Object.defineProperty(this,e,{get:()=>this.uniforms[e].value,set:t=>this.uniforms[e].value=t}))),n&&n(this)}};return o.key=P.MathUtils.generateUUID(),o}const he=e=>e===Object(e)&&!Array.isArray(e)&&"function"!=typeof e;function ve(e,r){const a=o.useThree((e=>e.gl)),i=o.useLoader(n.TextureLoader,he(e)?Object.values(e):e);if(t.useLayoutEffect((()=>{null==r||r(i)}),[r]),t.useEffect((()=>{(Array.isArray(i)?i:[i]).forEach(a.initTexture)}),[a,i]),he(e)){const t=Object.keys(e),r={};return t.forEach((e=>Object.assign(r,{[e]:i[t.indexOf(e)]}))),r}return i}ve.preload=e=>o.useLoader.preload(n.TextureLoader,e),ve.clear=e=>o.useLoader.clear(n.TextureLoader,e);const ge=pe({color:new P.Color("white"),scale:[1,1],imageBounds:[1,1],map:null,zoom:1,grayscale:0,opacity:1},"\n varying vec2 vUv;\n void main() {\n gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);\n vUv = uv;\n }\n","\n // mostly from https://gist.github.com/statico/df64c5d167362ecf7b34fca0b1459a44\n varying vec2 vUv;\n uniform vec2 scale;\n uniform vec2 imageBounds;\n uniform vec3 color;\n uniform sampler2D map;\n uniform float zoom;\n uniform float grayscale;\n uniform float opacity;\n const vec3 luma = vec3(.299, 0.587, 0.114);\n vec4 toGrayscale(vec4 color, float intensity) {\n return vec4(mix(color.rgb, vec3(dot(color.rgb, luma)), intensity), color.a);\n }\n vec2 aspect(vec2 size) {\n return size / min(size.x, size.y);\n }\n void main() {\n vec2 s = aspect(scale);\n vec2 i = aspect(imageBounds);\n float rs = s.x / s.y;\n float ri = i.x / i.y;\n vec2 new = rs < ri ? vec2(i.x * s.y / i.y, s.y) : vec2(s.x, i.y * s.x / i.x);\n vec2 offset = (rs < ri ? vec2((new.x - s.x) / 2.0, 0.0) : vec2(0.0, (new.y - s.y) / 2.0)) / new;\n vec2 uv = vUv * s / new + offset;\n vec2 zUv = (uv - vec2(0.5, 0.5)) / zoom + vec2(0.5, 0.5);\n gl_FragColor = toGrayscale(texture2D(map, zUv) * vec4(color, opacity), grayscale);\n \n #include <tonemapping_fragment>\n #include <encodings_fragment>\n }\n"),xe=T.forwardRef((({children:e,color:t,segments:r=1,scale:n=1,zoom:a=1,grayscale:i=0,opacity:s=1,texture:c,toneMapped:l,transparent:u,...d},m)=>{o.extend({ImageMaterial:ge});const f=o.useThree((e=>e.gl)),p=Array.isArray(n)?[n[0],n[1]]:[n,n],h=[c.image.width,c.image.height];return T.createElement("mesh",S.default({ref:m,scale:Array.isArray(n)?[...n,1]:n},d),T.createElement("planeGeometry",{args:[1,1,r,r]}),T.createElement("imageMaterial",{color:t,map:c,"map-encoding":f.outputEncoding,zoom:a,grayscale:i,opacity:s,scale:p,imageBounds:h,toneMapped:l,transparent:u}),e)})),ye=T.forwardRef((({url:e,...t},r)=>{const n=ve(e);return T.createElement(xe,S.default({},t,{texture:n,ref:r}))})),we=T.forwardRef((({url:e,...t},r)=>T.createElement(xe,S.default({},t,{ref:r})))),Ee=T.forwardRef(((e,t)=>{if(e.url)return T.createElement(ye,S.default({},e,{ref:t}));if(e.texture)return T.createElement(we,S.default({},e,{ref:t}));throw new Error("<Image /> requires a url or texture")}));const be={width:.2,length:1,decay:1,local:!1,stride:0,interval:1},Me=(e,t=1)=>(e.set(e.subarray(t)),e.fill(-1/0,-t),e);function Se(e,t){const{length:r,local:a,decay:i,interval:s,stride:c}={...be,...t},l=T.useRef(),[u]=T.useState((()=>new n.Vector3));T.useLayoutEffect((()=>{e&&(l.current=Float32Array.from({length:10*r*3},((t,r)=>e.position.getComponent(r%3))))}),[r,e]);const d=T.useRef(new n.Vector3),m=T.useRef(0);return o.useFrame((()=>{if(e&&l.current){if(0===m.current){let t;a?t=e.position:(e.getWorldPosition(u),t=u);const r=1*i;for(let e=0;e<r;e++)t.distanceTo(d.current)<c||(Me(l.current,3),l.current.set(t.toArray(),l.current.length-3));d.current.copy(t)}m.current++,m.current=m.current%s}})),l}const Te=T.forwardRef(((e,t)=>{const{children:r}=e,{width:a,length:i,decay:s,local:c,stride:l,interval:u}={...be,...e},{color:d="hotpink",attenuation:m,target:f}=e,h=o.useThree((e=>e.size)),v=T.useRef(null),[g,x]=T.useState(null),y=Se(g,{length:i,decay:s,local:c,stride:l,interval:u});T.useEffect((()=>{const e=(null==f?void 0:f.current)||v.current.children.find((e=>e instanceof n.Object3D));e&&x(e)}),[y,f]);const w=T.useMemo((()=>new p.MeshLine),[]),E=T.useMemo((()=>{var e;const t=new p.MeshLineMaterial({lineWidth:.1*a,color:d,sizeAttenuation:1,resolution:new n.Vector2(h.width,h.height)});let o;if(r)if(Array.isArray(r))o=r.find((e=>{const t=e;return"string"==typeof t.type&&"meshLineMaterial"===t.type}));else{const e=r;"string"==typeof e.type&&"meshLineMaterial"===e.type&&(o=e)}return"object"==typeof(null==(e=o)?void 0:e.props)&&t.setValues(o.props),t}),[a,d,h,r]);return T.useEffect((()=>{E.uniforms.resolution.value.set(h.width,h.height)}),[h]),o.useFrame((()=>{y.current&&w.setPoints(y.current,m)})),T.createElement("group",null,T.createElement("mesh",{ref:t,geometry:w,material:E}),T.createElement("group",{ref:v},r))}));function Ce(e,t=16,r,o,a){const[i,s]=T.useState((()=>{const e=Array.from({length:t},(()=>[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])).flat();return new n.InstancedBufferAttribute(Float32Array.from(e),16)}));return T.useEffect((()=>{if(void 0===e.current)return;const c=new u.MeshSurfaceSampler(e.current);o&&c.setWeightAttribute(o),c.build();const l=new n.Vector3,d=new n.Vector3,m=new n.Color,f=new n.Object3D;e.current.updateMatrixWorld(!0);for(let n=0;n<t;n++)c.sample(l,d,m),"function"==typeof r?r({dummy:f,sampledMesh:e.current,position:l,normal:d,color:m},n):f.position.copy(l),f.updateMatrix(),null!=a&&a.current&&a.current.setMatrixAt(n,f.matrix),f.matrix.toArray(i.array,16*n);null!=a&&a.current&&(a.current.instanceMatrix.needsUpdate=!0),i.needsUpdate=!0,s(i.clone())}),[e,a,o,t,r]),i}function Pe(e,{keys:t=["near","far","color","distance","decay","penumbra","angle","intensity","skeleton","visible","castShadow","receiveShadow","morphTargetDictionary","morphTargetInfluences","name","geometry","material","position","rotation","scale","up","userData"],deep:r,inject:n,castShadow:o,receiveShadow:a}){let i=L.default(e,t);return r&&(i.geometry&&"materialsOnly"!==r&&(i.geometry=i.geometry.clone()),i.material&&"geometriesOnly"!==r&&(i.material=i.material.clone())),n&&(i="function"==typeof n?{...i,children:n(e)}:T.isValidElement(n)?{...i,children:n}:{...i,...n}),"Mesh"===e.type&&(o&&(i.castShadow=!0),a&&(i.receiveShadow=!0)),i}const Re=T.forwardRef((({object:e,children:t,deep:r,castShadow:n,receiveShadow:o,inject:a,keys:i,...s},c)=>{const l={keys:i,deep:r,inject:a,castShadow:n,receiveShadow:o};if(Array.isArray(e))return T.createElement("group",S.default({},s,{ref:c}),e.map((e=>T.createElement(Re,S.default({key:e.uuid,object:e},l)))),t);const{children:u,...d}=Pe(e,l),m=e.type[0].toLowerCase()+e.type.slice(1);return T.createElement(m,S.default({},d,s,{ref:c}),(null==e?void 0:e.children).map((e=>{let t={},r=e.type[0].toLowerCase()+e.type.slice(1);return"group"===r||"object3D"===r?(r=Re,t={object:e,...l}):t=Pe(e,l),T.createElement(r,S.default({key:e.uuid},t))})),t,u)})),De=T.createContext(null),_e=T.forwardRef((({resolution:e=28,maxPolyCount:t=1e4,enableUvs:r=!1,enableColors:n=!1,children:a,...i},s)=>{const c=T.useRef(null),l=T.useMemo((()=>new u.MarchingCubes(e,null,r,n,t)),[e,t,r,n]),d=T.useMemo((()=>({getParent:()=>c})),[]);return o.useFrame((()=>{l.reset()}),-1),T.createElement(T.Fragment,null,T.createElement("primitive",S.default({object:l,ref:D.default([c,s])},i),T.createElement(De.Provider,{value:d},a)))})),Le=T.forwardRef((({strength:e=.5,subtract:t=12,color:r,...n},a)=>{const{getParent:i}=T.useContext(De),s=T.useMemo((()=>i()),[i]),c=T.useRef(),l=new P.Vector3;return o.useFrame((n=>{s.current&&c.current&&(c.current.getWorldPosition(l),s.current.addBall(.5+.5*l.x,.5+.5*l.y,.5+.5*l.z,e,t,r))})),T.createElement("group",S.default({ref:D.default([a,c])},n))})),ze=T.forwardRef((({planeType:e="x",strength:t=.5,subtract:r=12,...n},a)=>{const{getParent:i}=T.useContext(De),s=T.useMemo((()=>i()),[i]),c=T.useRef(),l=T.useMemo((()=>"x"===e?"addPlaneX":"y"===e?"addPlaneY":"addPlaneZ"),[e]);return o.useFrame((()=>{s.current&&c.current&&s.current[l](t,r)})),T.createElement("group",S.default({ref:D.default([a,c])},n))}));function ke(e=[0,0,0]){return function(e){return Array.isArray(e)}(e)?e:e instanceof P.Vector3||e instanceof P.Euler?[e.x,e.y,e.z]:[e,e,e]}const Fe=t.forwardRef((function({src:e,skipFill:r,skipStrokes:a,fillMaterial:i,strokeMaterial:s,fillMeshProps:c,strokeMeshProps:l,...d},m){const f=o.useLoader(u.SVGLoader,e.startsWith("<svg")?`data:image/svg+xml;utf8,${e}`:e),p=t.useMemo((()=>a?[]:f.paths.map((e=>{var t;return void 0===(null==(t=e.userData)?void 0:t.style.stroke)||"none"===e.userData.style.stroke?null:e.subPaths.map((t=>u.SVGLoader.pointsToStroke(t.getPoints(),e.userData.style)))}))),[f,a]);return t.useEffect((()=>()=>p.forEach((e=>e&&e.map((e=>e.dispose()))))),[p]),T.createElement("object3D",S.default({ref:m},d),T.createElement("object3D",{scale:[1,-1,1]},f.paths.map(((e,o)=>{var d,m;return T.createElement(t.Fragment,{key:o},!r&&void 0!==(null==(d=e.userData)?void 0:d.style.fill)&&"none"!==e.userData.style.fill&&u.SVGLoader.createShapes(e).map(((t,r)=>T.createElement("mesh",S.default({key:r},c),T.createElement("shapeGeometry",{args:[t]}),T.createElement("meshBasicMaterial",S.default({color:e.userData.style.fill,opacity:e.userData.style.fillOpacity,transparent:!0,side:n.DoubleSide,depthWrite:!1},i))))),!a&&void 0!==(null==(m=e.userData)?void 0:m.style.stroke)&&"none"!==e.userData.style.stroke&&e.subPaths.map(((t,r)=>T.createElement("mesh",S.default({key:r,geometry:p[o][r]},l),T.createElement("meshBasicMaterial",S.default({color:e.userData.style.stroke,opacity:e.userData.style.strokeOpacity,transparent:!0,side:n.DoubleSide,depthWrite:!1},s))))))}))))}));function Ae(e,t,r){const{gl:n,size:a,viewport:i}=o.useThree(),s="number"==typeof e?e:a.width*i.dpr,c="number"==typeof t?t:a.height*i.dpr,l=("number"==typeof e?r:e)||{},{samples:u,...d}=l,m=T.useMemo((()=>{let e;return e=new P.WebGLRenderTarget(s,c,{minFilter:P.LinearFilter,magFilter:P.LinearFilter,encoding:n.outputEncoding,type:P.HalfFloatType,...d}),e.samples=u,e}),[]);return T.useLayoutEffect((()=>{m.setSize(s,c),u&&(m.samples=u)}),[u,m,s,c]),T.useEffect((()=>()=>m.dispose()),[]),m}const Be=T.forwardRef((({envMap:e,resolution:t=256,frames:r=1/0,children:n,makeDefault:a,...i},s)=>{const c=o.useThree((({set:e})=>e)),l=o.useThree((({camera:e})=>e)),u=o.useThree((({size:e})=>e)),d=T.useRef(null),m=T.useRef(null),f=Ae(t);T.useLayoutEffect((()=>{i.manual||d.current.updateProjectionMatrix()}),[u,i]),T.useLayoutEffect((()=>{d.current.updateProjectionMatrix()})),T.useLayoutEffect((()=>{if(a){const e=l;return c((()=>({camera:d.current}))),()=>c((()=>({camera:e})))}}),[d,a,c]);let p=0,h=null;const v="function"==typeof n;return o.useFrame((t=>{v&&(r===1/0||p<r)&&(m.current.visible=!1,t.gl.setRenderTarget(f),h=t.scene.background,e&&(t.scene.background=e),t.gl.render(t.scene,d.current),t.scene.background=h,t.gl.setRenderTarget(null),m.current.visible=!0,p++)})),T.createElement(T.Fragment,null,T.createElement("orthographicCamera",S.default({left:u.width/-2,right:u.width/2,top:u.height/2,bottom:u.height/-2,ref:D.default([d,s])},i),!v&&n),T.createElement("group",{ref:m},v&&n(f.texture)))})),Ue=T.forwardRef((({envMap:e,resolution:t=256,frames:r=1/0,makeDefault:n,children:a,...i},s)=>{const c=o.useThree((({set:e})=>e)),l=o.useThree((({camera:e})=>e)),u=o.useThree((({size:e})=>e)),d=T.useRef(null),m=T.useRef(null),f=Ae(t);T.useLayoutEffect((()=>{i.manual||(d.current.aspect=u.width/u.height)}),[u,i]),T.useLayoutEffect((()=>{d.current.updateProjectionMatrix()}));let p=0,h=null;const v="function"==typeof a;return o.useFrame((t=>{v&&(r===1/0||p<r)&&(m.current.visible=!1,t.gl.setRenderTarget(f),h=t.scene.background,e&&(t.scene.background=e),t.gl.render(t.scene,d.current),t.scene.background=h,t.gl.setRenderTarget(null),m.current.visible=!0,p++)})),T.useLayoutEffect((()=>{if(n){const e=l;return c((()=>({camera:d.current}))),()=>c((()=>({camera:e})))}}),[d,n,c]),T.createElement(T.Fragment,null,T.createElement("perspectiveCamera",S.default({ref:D.default([d,s])},i),!v&&a),T.createElement("group",{ref:m},v&&a(f.texture)))}));const Ve=T.forwardRef(((e,t)=>{const{camera:r,onChange:n,makeDefault:a,...i}=e,s=o.useThree((e=>e.camera)),c=o.useThree((e=>e.invalidate)),l=o.useThree((e=>e.get)),d=o.useThree((e=>e.set)),m=r||s,[f]=T.useState((()=>new u.DeviceOrientationControls(m)));return T.useEffect((()=>{const e=e=>{c(),n&&n(e)};return null==f||null==f.addEventListener||f.addEventListener("change",e),()=>null==f||null==f.removeEventListener?void 0:f.removeEventListener("change",e)}),[n,f,c]),o.useFrame((()=>null==f?void 0:f.update()),-1),T.useEffect((()=>{const e=f;return null==e||e.connect(),()=>null==e?void 0:e.dispose()}),[f]),T.useEffect((()=>{if(a){const e=l().controls;return d({controls:f}),()=>d({controls:e})}}),[a,f]),f?T.createElement("primitive",S.default({ref:t,object:f},i)):null})),Ie=T.forwardRef((({domElement:e,...t},r)=>{const{onChange:n,makeDefault:a,...i}=t,s=o.useThree((e=>e.invalidate)),c=o.useThree((e=>e.camera)),l=o.useThree((e=>e.gl)),d=o.useThree((e=>e.events)),m=o.useThree((e=>e.get)),f=o.useThree((e=>e.set)),p=e||d.connected||l.domElement,h=T.useMemo((()=>new u.FlyControls(c)),[c]);return T.useEffect((()=>(h.connect(p),()=>{h.dispose()})),[p,h,s]),T.useEffect((()=>{const e=e=>{s(),n&&n(e)};return null==h.addEventListener||h.addEventListener("change",e),()=>null==h.removeEventListener?void 0:h.removeEventListener("change",e)}),[n,s]),T.useEffect((()=>{if(a){const e=m().controls;return f({controls:h}),()=>f({controls:e})}}),[a,h]),o.useFrame(((e,t)=>h.update(t))),T.createElement("primitive",S.default({ref:r,object:h,args:[c,p]},i))})),Oe=T.forwardRef(((e={enableDamping:!0},t)=>{const{domElement:r,camera:n,makeDefault:a,onChange:i,onStart:s,onEnd:c,...l}=e,d=o.useThree((e=>e.invalidate)),m=o.useThree((e=>e.camera)),f=o.useThree((e=>e.gl)),p=o.useThree((e=>e.events)),h=o.useThree((e=>e.set)),v=o.useThree((e=>e.get)),g=r||p.connected||f.domElement,x=n||m,y=T.useMemo((()=>new u.MapControls(x)),[x]);return T.useEffect((()=>{y.connect(g);const e=e=>{d(),i&&i(e)};return y.addEventListener("change",e),s&&y.addEventListener("start",s),c&&y.addEventListener("end",c),()=>{y.dispose(),y.removeEventListener("change",e),s&&y.removeEventListener("start",s),c&&y.removeEventListener("end",c)}}),[i,s,c,y,d,g]),T.useEffect((()=>{if(a){const e=v().controls;return h({controls:y}),()=>h({controls:e})}}),[a,y]),o.useFrame((()=>y.update()),-1),T.createElement("primitive",S.default({ref:t,object:y,enableDamping:!0},l))})),je=T.forwardRef((({makeDefault:e,camera:t,regress:r,domElement:n,enableDamping:a=!0,onChange:i,onStart:s,onEnd:c,...l},d)=>{const m=o.useThree((e=>e.invalidate)),f=o.useThree((e=>e.camera)),p=o.useThree((e=>e.gl)),h=o.useThree((e=>e.events)),v=o.useThree((e=>e.set)),g=o.useThree((e=>e.get)),x=o.useThree((e=>e.performance)),y=t||f,w=n||h.connected||p.domElement,E=T.useMemo((()=>new u.OrbitControls(y)),[y]);return o.useFrame((()=>{E.enabled&&E.update()}),-1),T.useEffect((()=>(E.connect(w),()=>{E.dispose()})),[w,r,E,m]),T.useEffect((()=>{const e=e=>{m(),r&&x.regress(),i&&i(e)};return E.addEventListener("change",e),s&&E.addEventListener("start",s),c&&E.addEventListener("end",c),()=>{s&&E.removeEventListener("start",s),c&&E.removeEventListener("end",c),E.removeEventListener("change",e)}}),[i,s,c,E,m]),T.useEffect((()=>{if(e){const e=g().controls;return v({controls:E}),()=>v({controls:e})}}),[e,E]),T.createElement("primitive",S.default({ref:d,object:E,enableDamping:a},l))})),We=T.forwardRef((({makeDefault:e,camera:t,domElement:r,regress:n,onChange:a,onStart:i,onEnd:s,...c},l)=>{const{invalidate:d,camera:m,gl:f,events:p,set:h,get:v,performance:g,viewport:x}=o.useThree(),y=t||m,w=r||p.connected||f.domElement,E=T.useMemo((()=>new u.TrackballControls(y)),[y]);return o.useFrame((()=>{E.enabled&&E.update()}),-1),T.useEffect((()=>(E.connect(w),()=>{E.dispose()})),[w,n,E,d]),T.useEffect((()=>{const e=e=>{d(),n&&g.regress(),a&&a(e)};return E.addEventListener("change",e),i&&E.addEventListener("start",i),s&&E.addEventListener("end",s),()=>{i&&E.removeEventListener("start",i),s&&E.removeEventListener("end",s),E.removeEventListener("change",e)}}),[a,i,s,E,d]),T.useEffect((()=>{E.handleResize()}),[x]),T.useEffect((()=>{if(e){const e=v().controls;return h({controls:E}),()=>h({controls:e})}}),[e,E]),T.createElement("primitive",S.default({ref:l,object:E},c))})),Ne=t.forwardRef((({camera:e,makeDefault:r,regress:n,domElement:a,onChange:i,onStart:s,onEnd:c,...l},d)=>{const m=o.useThree((e=>e.invalidate)),f=o.useThree((e=>e.camera)),p=o.useThree((e=>e.gl)),h=o.useThree((e=>e.events)),v=o.useThree((e=>e.set)),g=o.useThree((e=>e.get)),x=o.useThree((e=>e.performance)),y=e||f,w=a||h.connected||p.domElement,E=t.useMemo((()=>new u.ArcballControls(y)),[y]);return o.useFrame((()=>{E.enabled&&E.update()}),-1),t.useEffect((()=>(E.connect(w),()=>{E.dispose()})),[w,n,E,m]),t.useEffect((()=>{const e=e=>{m(),n&&x.regress(),i&&i(e)};return E.addEventListener("change",e),s&&E.addEventListener("start",s),c&&E.addEventListener("end",c),()=>{E.removeEventListener("change",e),s&&E.removeEventListener("start",s),c&&E.removeEventListener("end",c)}}),[i,s,c]),t.useEffect((()=>{if(r){const e=g().controls;return v({controls:E}),()=>v({controls:e})}}),[r,E]),T.createElement("primitive",S.default({ref:d,object:E},l))})),Ge=T.forwardRef((({children:e,domElement:t,onChange:r,onMouseDown:n,onMouseUp:a,onObjectChange:i,object:s,makeDefault:c,...l},d)=>{const m=["enabled","axis","mode","translationSnap","rotationSnap","scaleSnap","space","size","showX","showY","showZ"],{camera:f,...p}=l,h=L.default(p,m),v=z.default(p,m),g=o.useThree((e=>e.controls)),x=o.useThree((e=>e.gl)),y=o.useThree((e=>e.events)),w=o.useThree((e=>e.camera)),E=o.useThree((e=>e.invalidate)),b=o.useThree((e=>e.get)),M=o.useThree((e=>e.set)),C=f||w,R=t||y.connected||x.domElement,D=T.useMemo((()=>new u.TransformControls(C,R)),[C,R]),_=T.useRef();T.useLayoutEffect((()=>(s?D.attach(s instanceof P.Object3D?s:s.current):_.current instanceof P.Object3D&&D.attach(_.current),()=>{D.detach()})),[s,e,D]),T.useEffect((()=>{if(g){const e=e=>g.enabled=!e.value;return D.addEventListener("dragging-changed",e),()=>D.removeEventListener("dragging-changed",e)}}),[D,g]);const k=T.useRef(),F=T.useRef(),A=T.useRef(),B=T.useRef();return T.useLayoutEffect((()=>k.current=r),[r]),T.useLayoutEffect((()=>F.current=n),[n]),T.useLayoutEffect((()=>A.current=a),[a]),T.useLayoutEffect((()=>B.current=i),[i]),T.useEffect((()=>{const e=e=>{E(),null==k.current||k.current(e)},t=e=>null==F.current?void 0:F.current(e),r=e=>null==A.current?void 0:A.current(e),n=e=>null==B.current?void 0:B.current(e);return D.addEventListener("change",e),D.addEventListener("mouseDown",t),D.addEventListener("mouseUp",r),D.addEventListener("objectChange",n),()=>{D.removeEventListener("change",e),D.removeEventListener("mouseDown",t),D.removeEventListener("mouseUp",r),D.removeEventListener("objectChange",n)}}),[E,D]),T.useEffect((()=>{if(c){const e=b().controls;return M({controls:D}),()=>M({controls:e})}}),[c,D]),D?T.createElement(T.Fragment,null,T.createElement("primitive",S.default({ref:d,object:D},h)),T.createElement("group",S.default({ref:_},v),e)):null})),He=T.forwardRef((({domElement:e,selector:t,onChange:r,onLock:n,onUnlock:a,enabled:i=!0,makeDefault:s,...c},l)=>{const{camera:d,...m}=c,f=o.useThree((e=>e.setEvents)),p=o.useThree((e=>e.gl)),h=o.useThree((e=>e.camera)),v=o.useThree((e=>e.invalidate)),g=o.useThree((e=>e.events)),x=o.useThree((e=>e.get)),y=o.useThree((e=>e.set)),w=d||h,E=e||g.connected||p.domElement,[b]=T.useState((()=>new u.PointerLockControls(w)));return T.useEffect((()=>{if(i){b.connect(E);const e=x().events.compute;return f({compute(e,t){const r=t.size.width/2,n=t.size.height/2;t.pointer.set(r/t.size.width*2-1,-n/t.size.height*2+1),t.raycaster.setFromCamera(t.pointer,t.camera)}}),()=>{b.disconnect(),f({compute:e})}}}),[i,b]),T.useEffect((()=>{const e=e=>{v(),r&&r(e)};b.addEventListener("change",e),n&&b.addEventListener("lock",n),a&&b.addEventListener("unlock",a);const o=()=>b.lock(),i=t?Array.from(document.querySelectorAll(t)):[document];return i.forEach((e=>e&&e.addEventListener("click",o))),()=>{b.removeEventListener("change",e),n&&b.addEventListener("lock",n),a&&b.addEventListener("unlock",a),i.forEach((e=>e?e.removeEventListener("click",o):void 0))}}),[r,n,a,t,b,v]),T.useEffect((()=>{if(s){const e=x().controls;return y({controls:b}),()=>y({controls:e})}}),[s,b]),T.createElement("primitive",S.default({ref:l,object:b},m))})),$e=T.forwardRef((({domElement:e,makeDefault:t,...r},n)=>{const a=o.useThree((e=>e.camera)),i=o.useThree((e=>e.gl)),s=o.useThree((e=>e.events)),c=o.useThree((e=>e.get)),l=o.useThree((e=>e.set)),d=e||s.connected||i.domElement,[m]=T.useState((()=>new u.FirstPersonControls(a,d)));return T.useEffect((()=>{if(t){const e=c().controls;return l({controls:m}),()=>l({controls:e})}}),[t,m]),o.useFrame(((e,t)=>{m.update(t)}),-1),m?T.createElement("primitive",S.default({ref:n,object:m},r)):null}));function qe(e,t){const r=o.useThree((e=>e.pointer)),[a]=T.useState((()=>{const a=new n.Raycaster;return t&&o.applyProps(a,t,{}),function(t,o){a.setFromCamera(r,e instanceof n.Camera?e:e.current);const i=this.constructor.prototype.raycast.bind(this);i&&i(a,o)}}));return a}const Xe=T.createContext({}),Ze=()=>T.useContext(Xe),Ye=2*Math.PI,Ke=new n.Object3D,Qe=new n.Matrix4,[Je,et]=[new n.Quaternion,new n.Quaternion],tt=new n.Vector3,rt=new n.Vector3,nt="#f0f0f0",ot="#999",at="black",it="black",st=["Right","Left","Top","Bottom","Front","Back"],ct=e=>new n.Vector3(...e).multiplyScalar(.38),lt=[[1,1,1],[1,1,-1],[1,-1,1],[1,-1,-1],[-1,1,1],[-1,1,-1],[-1,-1,1],[-1,-1,-1]].map(ct),ut=[.25,.25,.25],dt=[[1,1,0],[1,0,1],[1,0,-1],[1,-1,0],[0,1,1],[0,1,-1],[0,-1,1],[0,-1,-1],[-1,1,0],[-1,0,1],[-1,0,-1],[-1,-1,0]].map(ct),mt=dt.map((e=>e.toArray().map((e=>0==e?.5:.25)))),ft=({hover:e,index:t,font:r="20px Inter var, Arial, sans-serif",faces:a=st,color:i=nt,hoverColor:s=ot,textColor:c=at,strokeColor:l=it,opacity:u=1})=>{const d=o.useThree((e=>e.gl)),m=T.useMemo((()=>{const e=document.createElement("canvas");e.width=128,e.height=128;const o=e.getContext("2d");return o.fillStyle=i,o.fillRect(0,0,e.width,e.height),o.strokeStyle=l,o.strokeRect(0,0,e.width,e.height),o.font=r,o.textAlign="center",o.fillStyle=c,o.fillText(a[t].toUpperCase(),64,76),new n.CanvasTexture(e)}),[t,a,r,i,c,l]);return T.createElement("meshLambertMaterial",{map:m,"map-encoding":d.outputEncoding,"map-anisotropy":d.capabilities.getMaxAnisotropy()||1,attach:`material-${t}`,color:e?s:"white",transparent:!0,opacity:u})},pt=e=>{const{tweenCamera:t,raycast:r}=Ze(),[n,o]=T.useState(null);return T.createElement("mesh",{raycast:r,onPointerOut:e=>{e.stopPropagation(),o(null)},onPointerMove:e=>{e.stopPropagation(),o(Math.floor(e.faceIndex/2))},onClick:e.onClick||(e=>{e.stopPropagation(),t(e.face.normal)})},[...Array(6)].map(((t,r)=>T.createElement(ft,S.default({key:r,index:r,hover:n===r},e)))),T.createElement("boxGeometry",null))},ht=({onClick:e,dimensions:t,position:r,hoverColor:n=ot})=>{const{tweenCamera:o,raycast:a}=Ze(),[i,s]=T.useState(!1);return T.createElement("mesh",{scale:1.01,position:r,raycast:a,onPointerOver:e=>{e.stopPropagation(),s(!0)},onPointerOut:e=>{e.stopPropagation(),s(!1)},onClick:e||(e=>{e.stopPropagation(),o(r)})},T.createElement("meshBasicMaterial",{color:i?n:"white",transparent:!0,opacity:.6,visible:i}),T.createElement("boxGeometry",{args:t}))};function vt({scale:e=[.8,.05,.05],color:t,rotation:r}){return T.createElement("group",{rotation:r},T.createElement("mesh",{position:[.4,0,0]},T.createElement("boxGeometry",{args:e}),T.createElement("meshBasicMaterial",{color:t,toneMapped:!1})))}function gt({onClick:e,font:t,disabled:r,arcStyle:a,label:i,labelColor:s,axisHeadScale:c=1,...l}){const u=o.useThree((e=>e.gl)),d=T.useMemo((()=>{const e=document.createElement("canvas");e.width=64,e.height=64;const r=e.getContext("2d");return r.beginPath(),r.arc(32,32,16,0,2*Math.PI),r.closePath(),r.fillStyle=a,r.fill(),i&&(r.font=t,r.textAlign="center",r.fillStyle=s,r.fillText(i,32,41)),new n.CanvasTexture(e)}),[a,i,s,t]),[m,f]=T.useState(!1),p=(i?1:.75)*(m?1.2:1)*c;return T.createElement("sprite",S.default({scale:p,onPointerOver:r?void 0:e=>{e.stopPropagation(),f(!0)},onPointerOut:r?void 0:e||(e=>{e.stopPropagation(),f(!1)})},l),T.createElement("spriteMaterial",{map:d,"map-encoding":u.outputEncoding,"map-anisotropy":u.capabilities.getMaxAnisotropy()||1,alphaTest:.3,opacity:i?1:.75,toneMapped:!1}))}function xt(e,{path:t}){const[r]=o.useLoader(n.CubeTextureLoader,[e],(e=>e.setPath(t)));return r}function yt(e){return o.useLoader(u.FBXLoader,e)}xt.preload=(e,{path:t})=>o.useLoader.preload(n.CubeTextureLoader,[e],(e=>e.setPath(t))),yt.preload=e=>o.useLoader.preload(u.FBXLoader,e),yt.clear=e=>o.useLoader.clear(u.FBXLoader,e);let wt=null;function Et(e,t,r){return n=>{r&&r(n),e&&(wt||(wt=new u.DRACOLoader),wt.setDecoderPath("string"==typeof e?e:"https://www.gstatic.com/draco/versioned/decoders/1.4.3/"),n.setDRACOLoader(wt)),t&&n.setMeshoptDecoder("function"==typeof u.MeshoptDecoder?u.MeshoptDecoder():u.MeshoptDecoder)}}function bt(e,t=!0,r=!0,n){return o.useLoader(u.GLTFLoader,e,Et(t,r,n))}bt.preload=(e,t=!0,r=!0,n)=>o.useLoader.preload(u.GLTFLoader,e,Et(t,r,n)),bt.clear=e=>o.useLoader.clear(u.GLTFLoader,e);const Mt="https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master";function St(e,r=`${Mt}/basis/`){const n=o.useThree((e=>e.gl)),a=o.useLoader(u.KTX2Loader,he(e)?Object.values(e):e,(e=>{e.detectSupport(n),e.setTranscoderPath(r)}));if(t.useEffect((()=>{(Array.isArray(a)?a:[a]).forEach(n.initTexture)}),[n,a]),he(e)){const t=Object.keys(e),r={};return t.forEach((e=>Object.assign(r,{[e]:a[t.indexOf(e)]}))),r}return a}function Tt(e,t){"function"==typeof e?e(t):null!=e&&(e.current=t)}St.preload=(e,t=`${Mt}/basis/`)=>o.useLoader.preload(u.KTX2Loader,e,(e=>{e.setTranscoderPath(t)})),St.clear=e=>o.useLoader.clear(u.KTX2Loader,e);const Ct=new P.Box3,Pt=new P.Vector3,Rt=T.forwardRef((({children:e,curve:t},r)=>{const[n]=T.useState((()=>new P.Scene)),[a,i]=T.useState(),s=T.useRef();return T.useEffect((()=>{s.current=new u.Flow(n.children[0]),i(s.current.object3D)}),[e]),T.useEffect((()=>{var e;t&&(null==(e=s.current)||e.updateCurve(0,t))}),[t]),T.useImperativeHandle(r,(()=>({moveAlongCurve:e=>{var t;null==(t=s.current)||t.moveAlongCurve(e)}}))),T.createElement(T.Fragment,null,o.createPortal(e,n),a&&T.createElement("primitive",{object:a}))}));class Dt extends n.MeshPhysicalMaterial{constructor(e={}){super(e),this.setValues(e),this._time={value:0},this._distort={value:.4},this._radius={value:1}}onBeforeCompile(e){e.uniforms.time=this._time,e.uniforms.radius=this._radius,e.uniforms.distort=this._distort,e.vertexShader=`\n uniform float time;\n uniform float radius;\n uniform float distort;\n #define GLSLIFY 1\nvec3 mod289(vec3 x){return x-floor(x*(1.0/289.0))*289.0;}vec4 mod289(vec4 x){return x-floor(x*(1.0/289.0))*289.0;}vec4 permute(vec4 x){return mod289(((x*34.0)+1.0)*x);}vec4 taylorInvSqrt(vec4 r){return 1.79284291400159-0.85373472095314*r;}float snoise(vec3 v){const vec2 C=vec2(1.0/6.0,1.0/3.0);const vec4 D=vec4(0.0,0.5,1.0,2.0);vec3 i=floor(v+dot(v,C.yyy));vec3 x0=v-i+dot(i,C.xxx);vec3 g=step(x0.yzx,x0.xyz);vec3 l=1.0-g;vec3 i1=min(g.xyz,l.zxy);vec3 i2=max(g.xyz,l.zxy);vec3 x1=x0-i1+C.xxx;vec3 x2=x0-i2+C.yyy;vec3 x3=x0-D.yyy;i=mod289(i);vec4 p=permute(permute(permute(i.z+vec4(0.0,i1.z,i2.z,1.0))+i.y+vec4(0.0,i1.y,i2.y,1.0))+i.x+vec4(0.0,i1.x,i2.x,1.0));float n_=0.142857142857;vec3 ns=n_*D.wyz-D.xzx;vec4 j=p-49.0*floor(p*ns.z*ns.z);vec4 x_=floor(j*ns.z);vec4 y_=floor(j-7.0*x_);vec4 x=x_*ns.x+ns.yyyy;vec4 y=y_*ns.x+ns.yyyy;vec4 h=1.0-abs(x)-abs(y);vec4 b0=vec4(x.xy,y.xy);vec4 b1=vec4(x.zw,y.zw);vec4 s0=floor(b0)*2.0+1.0;vec4 s1=floor(b1)*2.0+1.0;vec4 sh=-step(h,vec4(0.0));vec4 a0=b0.xzyw+s0.xzyw*sh.xxyy;vec4 a1=b1.xzyw+s1.xzyw*sh.zzww;vec3 p0=vec3(a0.xy,h.x);vec3 p1=vec3(a0.zw,h.y);vec3 p2=vec3(a1.xy,h.z);vec3 p3=vec3(a1.zw,h.w);vec4 norm=taylorInvSqrt(vec4(dot(p0,p0),dot(p1,p1),dot(p2,p2),dot(p3,p3)));p0*=norm.x;p1*=norm.y;p2*=norm.z;p3*=norm.w;vec4 m=max(0.6-vec4(dot(x0,x0),dot(x1,x1),dot(x2,x2),dot(x3,x3)),0.0);m=m*m;return 42.0*dot(m*m,vec4(dot(p0,x0),dot(p1,x1),dot(p2,x2),dot(p3,x3)));}\n ${e.vertexShader}\n `,e.vertexShader=e.vertexShader.replace("#include <begin_vertex>","\n float updateTime = time / 50.0;\n float noise = snoise(vec3(position / 2.0 + updateTime * 5.0));\n vec3 transformed = vec3(position * (noise * pow(distort, 2.0) + radius));\n ")}get time(){return this._time.value}set time(e){this._time.value=e}get distort(){return this._distort.value}set distort(e){this._distort.value=e}get radius(){return this._radius.value}set radius(e){this._radius.value=e}}const _t=T.forwardRef((({speed:e=1,...t},r)=>{const[n]=T.useState((()=>new Dt));return o.useFrame((t=>n&&(n.time=t.clock.getElapsedTime()*e))),T.createElement("primitive",S.default({object:n,ref:r,attach:"material"},t))}));class Lt extends n.MeshStandardMaterial{constructor(e={}){super(e),this.setValues(e),this._time={value:0},this._factor={value:1}}onBeforeCompile(e){e.uniforms.time=this._time,e.uniforms.factor=this._factor,e.vertexShader=`\n uniform float time;\n uniform float factor;\n ${e.vertexShader}\n `,e.vertexShader=e.vertexShader.replace("#include <begin_vertex>","float theta = sin( time + position.y ) / 2.0 * factor;\n float c = cos( theta );\n float s = sin( theta );\n mat3 m = mat3( c, 0, s, 0, 1, 0, -s, 0, c );\n vec3 transformed = vec3( position ) * m;\n vNormal = vNormal * m;")}get time(){return this._time.value}set time(e){this._time.value=e}get factor(){return this._factor.value}set factor(e){this._factor.value=e}}const zt=T.forwardRef((({speed:e=1,...t},r)=>{const[n]=T.useState((()=>new Lt));return o.useFrame((t=>n&&(n.time=t.clock.getElapsedTime()*e))),T.createElement("primitive",S.default({object:n,ref:r,attach:"material"},t))}));class kt extends n.ShaderMaterial{constructor(e=new n.Vector2){super({uniforms:{inputBuffer:new n.Uniform(null),depthBuffer:new n.Uniform(null),resolution:new n.Uniform(new n.Vector2),texelSize:new n.Uniform(new n.Vector2),halfTexelSize:new n.Uniform(new n.Vector2),kernel:new n.Uniform(0),scale:new n.Uniform(1),cameraNear:new n.Uniform(0),cameraFar:new n.Uniform(1),minDepthThreshold:new n.Uniform(0),maxDepthThreshold:new n.Uniform(1),depthScale:new n.Uniform(0),depthToBlurRatioBias:new n.Uniform(.25)},fragmentShader:"#include <common>\n #include <dithering_pars_fragment> \n uniform sampler2D inputBuffer;\n uniform sampler2D depthBuffer;\n uniform float cameraNear;\n uniform float cameraFar;\n uniform float minDepthThreshold;\n uniform float maxDepthThreshold;\n uniform float depthScale;\n uniform float depthToBlurRatioBias;\n varying vec2 vUv;\n varying vec2 vUv0;\n varying vec2 vUv1;\n varying vec2 vUv2;\n varying vec2 vUv3;\n\n void main() {\n float depthFactor = 0.0;\n \n #ifdef USE_DEPTH\n vec4 depth = texture2D(depthBuffer, vUv);\n depthFactor = smoothstep(minDepthThreshold, maxDepthThreshold, 1.0-(depth.r * depth.a));\n depthFactor *= depthScale;\n depthFactor = max(0.0, min(1.0, depthFactor + 0.25));\n #endif\n \n vec4 sum = texture2D(inputBuffer, mix(vUv0, vUv, depthFactor));\n sum += texture2D(inputBuffer, mix(vUv1, vUv, depthFactor));\n sum += texture2D(inputBuffer, mix(vUv2, vUv, depthFactor));\n sum += texture2D(inputBuffer, mix(vUv3, vUv, depthFactor));\n gl_FragColor = sum * 0.25 ;\n\n #include <dithering_fragment>\n #include <tonemapping_fragment>\n #include <encodings_fragment>\n }",vertexShader:"uniform vec2 texelSize;\n uniform vec2 halfTexelSize;\n uniform float kernel;\n uniform float scale;\n varying vec2 vUv;\n varying vec2 vUv0;\n varying vec2 vUv1;\n varying vec2 vUv2;\n varying vec2 vUv3;\n\n void main() {\n vec2 uv = position.xy * 0.5 + 0.5;\n vUv = uv;\n\n vec2 dUv = (texelSize * vec2(kernel) + halfTexelSize) * scale;\n vUv0 = vec2(uv.x - dUv.x, uv.y + dUv.y);\n vUv1 = vec2(uv.x + dUv.x, uv.y + dUv.y);\n vUv2 = vec2(uv.x + dUv.x, uv.y - dUv.y);\n vUv3 = vec2(uv.x - dUv.x, uv.y - dUv.y);\n\n gl_Position = vec4(position.xy, 1.0, 1.0);\n }",blending:n.NoBlending,depthWrite:!1,depthTest:!1}),this.toneMapped=!1,this.setTexelSize(e.x,e.y),this.kernel=new Float32Array([0,1,2,2,3])}setTexelSize(e,t){this.uniforms.texelSize.value.set(e,t),this.uniforms.halfTexelSize.value.set(e,t).multiplyScalar(.5)}setResolution(e){this.uniforms.resolution.value.copy(e)}}class Ft{constructor({gl:e,resolution:t,width:r=500,height:o=500,minDepthThreshold:a=0,maxDepthThreshold:i=1,depthScale:s=0,depthToBlurRatioBias:c=.25}){this.renderToScreen=!1,this.renderTargetA=new n.WebGLRenderTarget(t,t,{minFilter:n.LinearFilter,magFilter:n.LinearFilter,stencilBuffer:!1,depthBuffer:!1,encoding:e.outputEncoding}),this.renderTargetB=this.renderTargetA.clone(),this.convolutionMaterial=new kt,this.convolutionMaterial.setTexelSize(1/r,1/o),this.convolutionMaterial.setResolution(new n.Vector2(r,o)),this.scene=new n.Scene,this.camera=new n.Camera,this.convolutionMaterial.uniforms.minDepthThreshold.value=a,this.convolutionMaterial.uniforms.maxDepthThreshold.value=i,this.convolutionMaterial.uniforms.depthScale.value=s,this.convolutionMaterial.uniforms.depthToBlurRatioBias.value=c,this.convolutionMaterial.defines.USE_DEPTH=s>0;const l=new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),u=new Float32Array([0,0,2,0,0,2]),d=new n.BufferGeometry;d.setAttribute("position",new n.BufferAttribute(l,3)),d.setAttribute("uv",new n.BufferAttribute(u,2)),this.screen=new n.Mesh(d,this.convolutionMaterial),this.screen.frustumCulled=!1,this.scene.add(this.screen)}render(e,t,r){const n=this.scene,o=this.camera,a=this.renderTargetA,i=this.renderTargetB;let s=this.convolutionMaterial,c=s.uniforms;c.depthBuffer.value=t.depthTexture;const l=s.kernel;let u,d,m,f=t;for(d=0,m=l.length-1;d<m;++d)u=0==(1&d)?a:i,c.kernel.value=l[d],c.inputBuffer.value=f.texture,e.setRenderTarget(u),e.render(n,o),f=u;c.kernel.value=l[d],c.inputBuffer.value=f.texture,e.setRenderTarget(this.renderToScreen?null:r),e.render(n,o)}}class At extends n.MeshStandardMaterial{constructor(e={}){super(e),this._tDepth={value:null},this._distortionMap={value:null},this._tDiffuse={value:null},this._tDiffuseBlur={value:null},this._textureMatrix={value:null},this._hasBlur={value:!1},this._mirror={value:0},this._mixBlur={value:0},this._blurStrength={value:.5},this._minDepthThreshold={value:.9},this._maxDepthThreshold={value:1},this._depthScale={value:0},this._depthToBlurRatioBias={value:.25},this._distortion={value:1},this._mixContrast={value:1},this.setValues(e)}onBeforeCompile(e){var t;null!=(t=e.defines)&&t.USE_UV||(e.defines.USE_UV=""),e.uniforms.hasBlur=this._hasBlur,e.uniforms.tDiffuse=this._tDiffuse,e.uniforms.tDepth=this._tDepth,e.uniforms.distortionMap=this._distortionMap,e.uniforms.tDiffuseBlur=this._tDiffuseBlur,e.uniforms.textureMatrix=this._textureMatrix,e.uniforms.mirror=this._mirror,e.uniforms.mixBlur=this._mixBlur,e.uniforms.mixStrength=this._blurStrength,e.uniforms.minDepthThreshold=this._minDepthThreshold,e.uniforms.maxDepthThreshold=this._maxDepthThreshold,e.uniforms.depthScale=this._depthScale,e.uniforms.depthToBlurRatioBias=this._depthToBlurRatioBias,e.uniforms.distortion=this._distortion,e.uniforms.mixContrast=this._mixContrast,e.vertexShader=`\n uniform mat4 textureMatrix;\n varying vec4 my_vUv;\n ${e.vertexShader}`,e.vertexShader=e.vertexShader.replace("#include <project_vertex>","#include <project_vertex>\n my_vUv = textureMatrix * vec4( position, 1.0 );\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );"),e.fragmentShader=`\n uniform sampler2D tDiffuse;\n uniform sampler2D tDiffuseBlur;\n uniform sampler2D tDepth;\n uniform sampler2D distortionMap;\n uniform float distortion;\n uniform float cameraNear;\n\t\t\t uniform float cameraFar;\n uniform bool hasBlur;\n uniform float mixBlur;\n uniform float mirror;\n uniform float mixStrength;\n uniform float minDepthThreshold;\n uniform float maxDepthThreshold;\n uniform float mixContrast;\n uniform float depthScale;\n uniform float depthToBlurRatioBias;\n varying vec4 my_vUv;\n ${e.fragmentShader}`,e.fragmentShader=e.fragmentShader.replace("#include <emissivemap_fragment>","#include <emissivemap_fragment>\n\n float distortionFactor = 0.0;\n #ifdef USE_DISTORTION\n distortionFactor = texture2D(distortionMap, vUv).r * distortion;\n #endif\n\n vec4 new_vUv = my_vUv;\n new_vUv.x += distortionFactor;\n new_vUv.y += distortionFactor;\n\n vec4 base = texture2DProj(tDiffuse, new_vUv);\n vec4 blur = texture2DProj(tDiffuseBlur, new_vUv);\n\n vec4 merge = base;\n\n #ifdef USE_NORMALMAP\n vec2 normal_uv = vec2(0.0);\n vec4 normalColor = texture2D(normalMap, vUv * normalScale);\n vec3 my_normal = normalize( vec3( normalColor.r * 2.0 - 1.0, normalColor.b, normalColor.g * 2.0 - 1.0 ) );\n vec3 coord = new_vUv.xyz / new_vUv.w;\n normal_uv = coord.xy + coord.z * my_normal.xz * 0.05;\n vec4 base_normal = texture2D(tDiffuse, normal_uv);\n vec4 blur_normal = texture2D(tDiffuseBlur, normal_uv);\n merge = base_normal;\n blur = blur_normal;\n #endif\n\n float depthFactor = 0.0001;\n float blurFactor = 0.0;\n\n #ifdef USE_DEPTH\n vec4 depth = texture2DProj(tDepth, new_vUv);\n depthFactor = smoothstep(minDepthThreshold, maxDepthThreshold, 1.0-(depth.r * depth.a));\n depthFactor *= depthScale;\n depthFactor = max(0.0001, min(1.0, depthFactor));\n\n #ifdef USE_BLUR\n blur = blur * min(1.0, depthFactor + depthToBlurRatioBias);\n merge = merge * min(1.0, depthFactor + 0.5);\n #else\n merge = merge * depthFactor;\n #endif\n\n #endif\n\n float reflectorRoughnessFactor = roughness;\n #ifdef USE_ROUGHNESSMAP\n vec4 reflectorTexelRoughness = texture2D( roughnessMap, vUv );\n reflectorRoughnessFactor *= reflectorTexelRoughness.g;\n #endif\n\n #ifdef USE_BLUR\n blurFactor = min(1.0, mixBlur * reflectorRoughnessFactor);\n merge = mix(merge, blur, blurFactor);\n #endif\n\n vec4 newMerge = vec4(0.0, 0.0, 0.0, 1.0);\n newMerge.r = (merge.r - 0.5) * mixContrast + 0.5;\n newMerge.g = (merge.g - 0.5) * mixContrast + 0.5;\n newMerge.b = (merge.b - 0.5) * mixContrast + 0.5;\n\n diffuseColor.rgb = diffuseColor.rgb * ((1.0 - min(1.0, mirror)) + newMerge.rgb * mixStrength);\n ")}get tDiffuse(){return this._tDiffuse.value}set tDiffuse(e){this._tDiffuse.value=e}get tDepth(){return this._tDepth.value}set tDepth(e){this._tDepth.value=e}get distortionMap(){return this._distortionMap.value}set distortionMap(e){this._distortionMap.value=e}get tDiffuseBlur(){return this._tDiffuseBlur.value}set tDiffuseBlur(e){this._tDiffuseBlur.value=e}get textureMatrix(){return this._textureMatrix.value}set textureMatrix(e){this._textureMatrix.value=e}get hasBlur(){return this._hasBlur.value}set hasBlur(e){this._hasBlur.value=e}get mirror(){return this._mirror.value}set mirror(e){this._mirror.value=e}get mixBlur(){return this._mixBlur.value}set mixBlur(e){this._mixBlur.value=e}get mixStrength(){return this._blurStrength.value}set mixStrength(e){this._blurStrength.value=e}get minDepthThreshold(){return this._minDepthThreshold.value}set minDepthThreshold(e){this._minDepthThreshold.value=e}get maxDepthThreshold(){return this._maxDepthThreshold.value}set maxDepthThreshold(e){this._maxDepthThreshold.value=e}get depthScale(){return this._depthScale.value}set depthScale(e){this._depthScale.value=e}get depthToBlurRatioBias(){return this._depthToBlurRatioBias.value}set depthToBlurRatioBias(e){this._depthToBlurRatioBias.value=e}get distortion(){return this._distortion.value}set distortion(e){this._distortion.value=e}get mixContrast(){return this._mixContrast.value}set mixContrast(e){this._mixContrast.value=e}}o.extend({MeshReflectorMaterialImpl:At});const Bt=T.forwardRef((({mixBlur:e=0,mixStrength:t=1,resolution:r=256,blur:a=[0,0],minDepthThreshold:i=.9,maxDepthThreshold:s=1,depthScale:c=0,depthToBlurRatioBias:l=.25,mirror:u=0,distortion:d=1,mixContrast:m=1,distortionMap:f,reflectorOffset:p=0,...h},v)=>{const g=o.useThree((({gl:e})=>e)),x=o.useThree((({camera:e})=>e)),y=o.useThree((({scene:e})=>e)),w=(a=Array.isArray(a)?a:[a,a])[0]+a[1]>0,E=T.useRef(null),[b]=T.useState((()=>new n.Plane)),[M]=T.useState((()=>new n.Vector3)),[C]=T.useState((()=>new n.Vector3)),[P]=T.useState((()=>new n.Vector3)),[R]=T.useState((()=>new n.Matrix4)),[_]=T.useState((()=>new n.Vector3(0,0,-1))),[L]=T.useState((()=>new n.Vector4)),[z]=T.useState((()=>new n.Vector3)),[k]=T.useState((()=>new n.Vector3)),[F]=T.useState((()=>new n.Vector4)),[A]=T.useState((()=>new n.Matrix4)),[B]=T.useState((()=>new n.PerspectiveCamera)),U=T.useCallback((()=>{var e;const t=E.current.parent||(null==(e=E.current)?void 0:e.__r3f.parent);if(!t)return;if(C.setFromMatrixPosition(t.matrixWorld),P.setFromMatrixPosition(x.matrixWorld),R.extractRotation(t.matrixWorld),M.set(0,0,1),M.applyMatrix4(R),C.addScaledVector(M,p),z.subVectors(C,P),z.dot(M)>0)return;z.reflect(M).negate(),z.add(C),R.extractRotation(x.matrixWorld),_.set(0,0,-1),_.applyMatrix4(R),_.add(P),k.subVectors(C,_),k.reflect(M).negate(),k.add(C),B.position.copy(z),B.up.set(0,1,0),B.up.applyMatrix4(R),B.up.reflect(M),B.lookAt(k),B.far=x.far,B.updateMatrixWorld(),B.projectionMatrix.copy(x.projectionMatrix),A.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),A.multiply(B.projectionMatrix),A.multiply(B.matrixWorldInverse),A.multiply(t.matrixWorld),b.setFromNormalAndCoplanarPoint(M,C),b.applyMatrix4(B.matrixWorldInverse),L.set(b.normal.x,b.normal.y,b.normal.z,b.constant);const r=B.projectionMatrix;F.x=(Math.sign(L.x)+r.elements[8])/r.elements[0],F.y=(Math.sign(L.y)+r.elements[9])/r.elements[5],F.z=-1,F.w=(1+r.elements[10])/r.elements[14],L.multiplyScalar(2/L.dot(F)),r.elements[2]=L.x,r.elements[6]=L.y,r.elements[10]=L.z+1,r.elements[14]=L.w}),[x,p]),[V,I,O,j]=T.useMemo((()=>{const o={minFilter:n.LinearFilter,magFilter:n.LinearFilter,encoding:g.outputEncoding,type:n.HalfFloatType},p=new n.WebGLRenderTarget(r,r,o);p.depthBuffer=!0,p.depthTexture=new n.DepthTexture(r,r),p.depthTexture.format=n.DepthFormat,p.depthTexture.type=n.UnsignedShortType;const h=new n.WebGLRenderTarget(r,r,o);return[p,h,new Ft({gl:g,resolution:r,width:a[0],height:a[1],minDepthThreshold:i,maxDepthThreshold:s,depthScale:c,depthToBlurRatioBias:l}),{mirror:u,textureMatrix:A,mixBlur:e,tDiffuse:p.texture,tDepth:p.depthTexture,tDiffuseBlur:h.texture,hasBlur:w,mixStrength:t,minDepthThreshold:i,maxDepthThreshold:s,depthScale:c,depthToBlurRatioBias:l,distortion:d,distortionMap:f,mixContrast:m,"defines-USE_BLUR":w?"":void 0,"defines-USE_DEPTH":c>0?"":void 0,"defines-USE_DISTORTION":f?"":void 0}]}),[g,a,A,r,u,w,e,t,i,s,c,l,d,f,m]);return o.useFrame((()=>{var e;const t=E.current.parent||(null==(e=E.current)?void 0:e.__r3f.parent);if(!t)return;t.visible=!1;const r=g.xr.enabled,n=g.shadowMap.autoUpdate;U(),g.xr.enabled=!1,g.shadowMap.autoUpdate=!1,g.setRenderTarget(V),g.state.buffers.depth.setMask(!0),g.autoClear||g.clear(),g.render(y,B),w&&O.render(g,V,I),g.xr.enabled=r,g.shadowMap.autoUpdate=n,t.visible=!0,g.setRenderTarget(null)})),T.createElement("meshReflectorMaterialImpl",S.default({attach:"material",key:"key"+j["defines-USE_BLUR"]+j["defines-USE_DEPTH"]+j["defines-USE_DISTORTION"],ref:D.default([E,v])},j,h))})),Ut=pe({envMap:null,bounces:3,ior:2.4,correctMips:!0,aberrationStrength:.01,fresnel:0,bvh:new y.MeshBVHUniformStruct,color:new P.Color("white"),resolution:new P.Vector2},"\n #ifndef USE_COLOR\n uniform vec3 color;\n #endif\n varying vec3 vWorldPosition; \n varying vec3 vNormal;\n varying mat4 projectionMatrixInv;\n varying mat4 viewMatrixInv;\n varying vec3 viewDirection;\n varying mat4 vInstanceMatrix;\n varying vec3 vColor;\n \n void main() { \n vec4 transformedNormal = vec4(normal, 0.0);\n vec4 transformedPosition = vec4(position, 1.0);\n #ifdef USE_INSTANCING\n vInstanceMatrix = instanceMatrix;\n transformedNormal = instanceMatrix * transformedNormal;\n transformedPosition = instanceMatrix * transformedPosition;\n #else\n vInstanceMatrix = mat4(1.0);\n #endif\n\n vColor = color;\n #ifdef USE_INSTANCING_COLOR\n vColor *= instanceColor.rgb;\n #endif\n \n projectionMatrixInv = inverse(projectionMatrix);\n viewMatrixInv = inverse(viewMatrix);\n \n vWorldPosition = (modelMatrix * transformedPosition).xyz; \n vNormal = (viewMatrixInv * vec4(normalMatrix * transformedNormal.xyz, 0.0)).xyz;\n viewDirection = normalize(vWorldPosition - cameraPosition);\n gl_Position = projectionMatrix * viewMatrix * modelMatrix * transformedPosition;\n }",`\n #define ENVMAP_TYPE_CUBE_UV\n precision highp isampler2D;\n precision highp usampler2D;\n varying vec3 vWorldPosition;\n varying vec3 vNormal;\n \n #ifdef ENVMAP_TYPE_CUBEM\n uniform samplerCube envMap;\n #else\n uniform sampler2D envMap;\n #endif\n \n uniform float bounces;\n ${y.shaderStructs}\n ${y.shaderIntersectFunction}\n uniform BVH bvh;\n uniform float ior;\n uniform bool correctMips;\n uniform vec2 resolution;\n uniform float fresnel;\n uniform mat4 modelMatrix;\n \n uniform float aberrationStrength;\n varying mat4 projectionMatrixInv;\n varying mat4 viewMatrixInv;\n varying vec3 viewDirection; \n varying mat4 vInstanceMatrix;\n varying vec3 vColor;\n \n float fresnelFunc(vec3 viewDirection, vec3 worldNormal) {\n return pow( 1.0 + dot( viewDirection, worldNormal), 10.0 );\n }\n \n vec3 totalInternalReflection(vec3 ro, vec3 rd, vec3 normal, float ior, mat4 modelMatrixInverse) {\n vec3 rayOrigin = ro;\n vec3 rayDirection = rd;\n rayDirection = refract(rayDirection, normal, 1.0 / ior);\n rayOrigin = vWorldPosition + rayDirection * 0.001;\n rayOrigin = (modelMatrixInverse * vec4(rayOrigin, 1.0)).xyz;\n rayDirection = normalize((modelMatrixInverse * vec4(rayDirection, 0.0)).xyz);\n for(float i = 0.0; i < bounces; i++) {\n uvec4 faceIndices = uvec4( 0u );\n vec3 faceNormal = vec3( 0.0, 0.0, 1.0 );\n vec3 barycoord = vec3( 0.0 );\n float side = 1.0;\n float dist = 0.0;\n bvhIntersectFirstHit( bvh, rayOrigin, rayDirection, faceIndices, faceNormal, barycoord, side, dist );\n vec3 hitPos = rayOrigin + rayDirection * max(dist - 0.001, 0.0); \n vec3 tempDir = refract(rayDirection, faceNormal, ior);\n if (length(tempDir) != 0.0) {\n rayDirection = tempDir;\n break;\n }\n rayDirection = reflect(rayDirection, faceNormal);\n rayOrigin = hitPos + rayDirection * 0.01;\n }\n rayDirection = normalize((modelMatrix * vec4(rayDirection, 0.0)).xyz);\n return rayDirection;\n }\n \n #include <common>\n #include <cube_uv_reflection_fragment>\n \n #ifdef ENVMAP_TYPE_CUBEM\n vec4 textureGradient(samplerCube envMap, vec3 rayDirection, vec3 directionCamPerfect) {\n return textureGrad(envMap, rayDirection, dFdx(correctMips ? directionCamPerfect: rayDirection), dFdy(correctMips ? directionCamPerfect: rayDirection));\n }\n #else\n vec4 textureGradient(sampler2D envMap, vec3 rayDirection, vec3 directionCamPerfect) {\n vec2 uvv = equirectUv( rayDirection );\n vec2 smoothUv = equirectUv( directionCamPerfect );\n return textureGrad(envMap, uvv, dFdx(correctMips ? smoothUv : uvv), dFdy(correctMips ? smoothUv : uvv));\n }\n #endif\n \n void main() {\n mat4 modelMatrixInverse = inverse(modelMatrix * vInstanceMatrix);\n vec2 uv = gl_FragCoord.xy / resolution;\n vec3 directionCamPerfect = (projectionMatrixInv * vec4(uv * 2.0 - 1.0, 0.0, 1.0)).xyz;\n directionCamPerfect = (viewMatrixInv * vec4(directionCamPerfect, 0.0)).xyz;\n directionCamPerfect = normalize(directionCamPerfect);\n vec3 normal = vNormal;\n vec3 rayOrigin = cameraPosition;\n vec3 rayDirection = normalize(vWorldPosition - cameraPosition);\n vec3 finalColor;\n #ifdef CHROMATIC_ABERRATIONS\n vec3 rayDirectionG = totalInternalReflection(rayOrigin, rayDirection, normal, max(ior, 1.0), modelMatrixInverse);\n #ifdef FAST_CHROMA \n vec3 rayDirectionR = normalize(rayDirectionG + 1.0 * vec3(aberrationStrength / 2.0));\n vec3 rayDirectionB = normalize(rayDirectionG - 1.0 * vec3(aberrationStrength / 2.0));\n #else\n vec3 rayDirectionR = totalInternalReflection(rayOrigin, rayDirection, normal, max(ior * (1.0 - aberrationStrength), 1.0), modelMatrixInverse);\n vec3 rayDirectionB = totalInternalReflection(rayOrigin, rayDirection, normal, max(ior * (1.0 + aberrationStrength), 1.0), modelMatrixInverse);\n #endif\n float finalColorR = textureGradient(envMap, rayDirectionR, directionCamPerfect).r;\n float finalColorG = textureGradient(envMap, rayDirectionG, directionCamPerfect).g;\n float finalColorB = textureGradient(envMap, rayDirectionB, directionCamPerfect).b;\n finalColor = vec3(finalColorR, finalColorG, finalColorB) * vColor;\n #else\n rayDirection = totalInternalReflection(rayOrigin, rayDirection, normal, max(ior, 1.0), modelMatrixInverse);\n finalColor = textureGradient(envMap, rayDirection, directionCamPerfect).rgb; \n finalColor *= vColor;\n #endif\n float nFresnel = fresnelFunc(viewDirection, normal) * fresnel;\n gl_FragColor = vec4(mix(finalColor, vec3(1.0), nFresnel), 1.0); \n #include <tonemapping_fragment>\n #include <encodings_fragment>\n }`);class Vt extends P.PointsMaterial{constructor(e){super(e),this.onBeforeCompile=(e,t)=>{const{isWebGL2:r}=t.capabilities;e.fragmentShader=e.fragmentShader.replace("#include <output_fragment>",`\n ${r?"#include <output_fragment>":"#extension GL_OES_standard_derivatives : enable\n#include <output_fragment>"}\n vec2 cxy = 2.0 * gl_PointCoord - 1.0;\n float r = dot(cxy, cxy);\n float delta = fwidth(r); \n float mask = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r);\n gl_FragColor = vec4(gl_FragColor.rgb, mask * gl_FragColor.a );\n `)}}}const It=T.forwardRef(((e,t)=>{const[r]=T.useState((()=>new Vt(null)));return T.createElement("primitive",S.default({},e,{object:r,ref:t,attach:"material"}))}));let Ot=!1;function jt(e){const t=e+"Geometry";return T.forwardRef((({args:e,children:r,...n},o)=>T.createElement("mesh",S.default({ref:o},n),T.createElement(t,{attach:"geometry",args:e}),r)))}const Wt=jt("box"),Nt=jt("circle"),Gt=jt("cone"),Ht=jt("cylinder"),$t=jt("sphere"),qt=jt("plane"),Xt=jt("tube"),Zt=jt("torus"),Yt=jt("torusKnot"),Kt=jt("tetrahedron"),Qt=jt("ring"),Jt=jt("polyhedron"),er=jt("icosahedron"),tr=jt("octahedron"),rr=jt("dodecahedron"),nr=jt("extrude"),or=jt("lathe"),ar=jt("capsule"),ir=1e-5;const sr=T.forwardRef((function({args:[e=1,t=1,r=1]=[],radius:o=.05,steps:a=1,smoothness:i=4,children:s,...c},l){const u=T.useMemo((()=>function(e,t,r){const o=new n.Shape,a=r-ir;return o.absarc(ir,ir,ir,-Math.PI/2,-Math.PI,!0),o.absarc(ir,t-2*a,ir,Math.PI,Math.PI/2,!0),o.absarc(e-2*a,t-2*a,ir,Math.PI/2,0,!0),o.absarc(e-2*a,ir,ir,0,-Math.PI/2,!0),o}(e,t,o)),[e,t,o]),d=T.useMemo((()=>({depth:r-2*o,bevelEnabled:!0,bevelSegments:2*i,steps:a,bevelSize:o-ir,bevelThickness:o,curveSegments:i})),[r,o,i]),m=T.useRef();return T.useLayoutEffect((()=>{m.current&&m.current.center()}),[u,d]),T.createElement("mesh",S.default({ref:l},c),T.createElement("extrudeGeometry",{ref:m,args:[u,d]}),s)}));function cr(){const e=new P.BufferGeometry,t=new Float32Array([-1,-1,3,-1,-1,3]);return e.setAttribute("position",new P.BufferAttribute(t,2)),e}const lr=T.forwardRef((function({children:e,...t},r){const n=T.useMemo(cr,[]);return T.createElement("mesh",S.default({ref:r,geometry:n,frustumCulled:!1},t),e)})),ur=T.forwardRef((function({children:e,disableX:t,disableY:r,disableZ:o,left:a,right:i,top:s,bottom:c,front:l,back:u,onCentered:d,precise:m=!0,...f},p){const h=T.useRef(null),v=T.useRef(null),g=T.useRef(null);return T.useLayoutEffect((()=>{v.current.matrixWorld.identity();const e=(new n.Box3).setFromObject(g.current,m),f=new n.Vector3,p=new n.Sphere,x=e.max.x-e.min.x,y=e.max.y-e.min.y,w=e.max.z-e.min.z;e.getCenter(f),e.getBoundingSphere(p);const E=s?y/2:c?-y/2:0,b=a?-x/2:i?x/2:0,M=l?w/2:u?-w/2:0;v.current.position.set(t?0:-f.x+b,r?0:-f.y+E,o?0:-f.z+M),void 0!==d&&d({parent:h.current.parent,container:h.current,width:x,height:y,depth:w,boundingBox:e,boundingSphere:p,center:f,verticalAlignment:E,horizontalAlignment:b,depthAlignment:M})}),[e]),T.useImperativeHandle(p,(()=>h.current),[]),T.createElement("group",S.default({ref:h},f),T.createElement("group",{ref:v},T.createElement("group",{ref:g},e)))})),dr=e=>e&&e.isOrthographicCamera,mr=T.createContext(null);const fr=T.forwardRef((({intensity:e=1,decay:t,decayRate:r=.65,maxYaw:n=.1,maxPitch:a=.1,maxRoll:i=.1,yawFrequency:s=.1,pitchFrequency:c=.1,rollFrequency:l=.1},d)=>{const m=o.useThree((e=>e.camera)),f=o.useThree((e=>e.controls)),p=T.useRef(e),h=T.useRef(m.rotation.clone()),[v]=T.useState((()=>new u.SimplexNoise)),[g]=T.useState((()=>new u.SimplexNoise)),[x]=T.useState((()=>new u.SimplexNoise)),y=()=>{(p.current<0||p.current>1)&&(p.current=p.current<0?0:1)};return T.useImperativeHandle(d,(()=>({getIntensity:()=>p.current,setIntensity:e=>{p.current=e,y()}})),[]),T.useEffect((()=>{if(f){const e=()=>{h.current=m.rotation.clone()};return f.addEventListener("change",e),e(),()=>{f.removeEventListener("change",e)}}}),[m,f]),o.useFrame(((e,o)=>{const u=Math.pow(p.current,2),d=n*u*v.noise(e.clock.elapsedTime*s,1),f=a*u*g.noise(e.clock.elapsedTime*c,1),w=i*u*x.noise(e.clock.elapsedTime*l,1);m.rotation.set(h.current.x+f,h.current.y+d,h.current.z+w),t&&p.current>0&&(p.current-=r*o,y())})),null})),pr=T.forwardRef((({children:e,speed:t=1,rotationIntensity:r=1,floatIntensity:n=1,floatingRange:a=[-.1,.1],...i},s)=>{const c=T.useRef(null),l=T.useRef(1e4*Math.random());return o.useFrame((e=>{var o,i;const s=l.current+e.clock.getElapsedTime();c.current.rotation.x=Math.cos(s/4*t)/8*r,c.current.rotation.y=Math.sin(s/4*t)/8*r,c.current.rotation.z=Math.sin(s/4*t)/20*r;let u=Math.sin(s/4*t)/10;u=P.MathUtils.mapLinear(u,-.1,.1,null!==(o=null==a?void 0:a[0])&&void 0!==o?o:-.1,null!==(i=null==a?void 0:a[1])&&void 0!==i?i:.1),c.current.position.y=u*n})),T.createElement("group",i,T.createElement("group",{ref:D.default([c,s])},e))})),hr={sunset:"venice/venice_sunset_1k.hdr",dawn:"kiara/kiara_1_dawn_1k.hdr",night:"dikhololo/dikhololo_night_1k.hdr",warehouse:"empty-wharehouse/empty_warehouse_01_1k.hdr",forest:"forrest-slope/forest_slope_1k.hdr",apartment:"lebombo/lebombo_1k.hdr",studio:"studio-small-3/studio_small_03_1k.hdr",city:"potsdamer-platz/potsdamer_platz_1k.hdr",park:"rooitou/rooitou_park_1k.hdr",lobby:"st-fagans/st_fagans_interior_1k.hdr"};function vr(e,t,r,n,o=0){const a=(e=>{return(t=e).current&&t.current.isScene?e.current:e;var t})(t||r),i=a.background,s=a.environment,c=a.backgroundBlurriness||0;return"only"!==e&&(a.environment=n),e&&(a.background=n),e&&void 0!==a.backgroundBlurriness&&(a.backgroundBlurriness=o),()=>{"only"!==e&&(a.environment=s),e&&(a.background=i),e&&void 0!==a.backgroundBlurriness&&(a.backgroundBlurriness=c)}}function gr({scene:e,background:t=!1,blur:r,map:n}){const a=o.useThree((e=>e.scene));return T.useLayoutEffect((()=>{if(n)return vr(t,e,a,n,r)}),[a,e,n,t,r]),null}function xr({files:e=["/px.png","/nx.png","/py.png","/ny.png","/pz.png","/nz.png"],path:t="",preset:r,encoding:a,extensions:i}){if(r){if(!(r in hr))throw new Error("Preset must be one of: "+Object.keys(hr).join(", "));e=hr[r],t="https://market-assets.fra1.cdn.digitaloceanspaces.com/market-assets/hdris/"}const s=Array.isArray(e),c=s?n.CubeTextureLoader:u.RGBELoader,l=o.useLoader(c,s?[e]:e,(e=>{e.setPath(t),i&&i(e)})),d=s?l[0]:l;return d.mapping=s?n.CubeReflectionMapping:n.EquirectangularReflectionMapping,d.encoding=(null!=a?a:s)?n.sRGBEncoding:n.LinearEncoding,d}function yr({background:e=!1,scene:t,blur:r,...n}){const a=xr(n),i=o.useThree((e=>e.scene));return T.useLayoutEffect((()=>vr(e,t,i,a,r)),[a,e,t,i,r]),null}function wr({children:e,near:t=1,far:r=1e3,resolution:a=256,frames:i=1,map:s,background:c=!1,blur:l,scene:u,files:d,path:m,preset:f,extensions:p}){const h=o.useThree((e=>e.gl)),v=o.useThree((e=>e.scene)),g=T.useRef(null),[x]=T.useState((()=>new n.Scene)),y=T.useMemo((()=>{const e=new n.WebGLCubeRenderTarget(a);return e.texture.type=n.HalfFloatType,e}),[a]);T.useLayoutEffect((()=>(1===i&&g.current.update(h,x),vr(c,u,v,y.texture,l))),[e,x,y.texture,u,v,c,i,h]);let w=1;return o.useFrame((()=>{(i===1/0||w<i)&&(g.current.update(h,x),w++)})),T.createElement(T.Fragment,null,o.createPortal(T.createElement(T.Fragment,null,e,T.createElement("cubeCamera",{ref:g,args:[t,r,y]}),d||f?T.createElement(yr,{background:!0,files:d,preset:f,path:m,extensions:p}):s?T.createElement(gr,{background:!0,map:s,extensions:p}):null),x))}function Er(e){var t,r,n,a;const i=xr(e),s=e.map||i;T.useMemo((()=>o.extend({GroundProjectedEnvImpl:u.GroundProjectedEnv})),[]);const c=T.useMemo((()=>[s]),[s]),l=null==(t=e.ground)?void 0:t.height,d=null==(r=e.ground)?void 0:r.radius,m=null!==(n=null==(a=e.ground)?void 0:a.scale)&&void 0!==n?n:1e3;return T.createElement(T.Fragment,null,T.createElement(gr,S.default({},e,{map:s})),T.createElement("groundProjectedEnvImpl",{args:c,scale:m,height:l,radius:d}))}function br(e){return e.ground?T.createElement(Er,e):e.map?T.createElement(gr,e):e.children?T.createElement(wr,e):T.createElement(yr,e)}const Mr=T.forwardRef((({scale:e=10,frames:t=1/0,opacity:r=1,width:n=1,height:a=1,blur:i=1,far:s=10,resolution:c=512,smooth:l=!0,color:d="#000000",depthWrite:m=!1,renderOrder:f,...p},h)=>{const v=o.useThree((e=>e.scene)),g=o.useThree((e=>e.gl)),x=T.useRef(null);n*=Array.isArray(e)?e[0]:e||1,a*=Array.isArray(e)?e[1]:e||1;const[y,w,E,b,M,C,R]=T.useMemo((()=>{const e=new P.WebGLRenderTarget(c,c),t=new P.WebGLRenderTarget(c,c);t.texture.generateMipmaps=e.texture.generateMipmaps=!1;const r=new P.PlaneGeometry(n,a).rotateX(Math.PI/2),o=new P.Mesh(r),i=new P.MeshDepthMaterial;i.depthTest=i.depthWrite=!1,i.onBeforeCompile=e=>{e.uniforms={...e.uniforms,ucolor:{value:new P.Color(d)}},e.fragmentShader=e.fragmentShader.replace("void main() {","uniform vec3 ucolor;\n void main() {\n "),e.fragmentShader=e.fragmentShader.replace("vec4( vec3( 1.0 - fragCoordZ ), opacity );","vec4( ucolor * fragCoordZ * 2.0, ( 1.0 - fragCoordZ ) * 1.0 );")};const s=new P.ShaderMaterial(u.HorizontalBlurShader),l=new P.ShaderMaterial(u.VerticalBlurShader);return l.depthTest=s.depthTest=!1,[e,r,i,o,s,l,t]}),[c,n,a,e,d]),D=e=>{b.visible=!0,b.material=M,M.uniforms.tDiffuse.value=y.texture,M.uniforms.h.value=1*e/256,g.setRenderTarget(R),g.render(b,x.current),b.material=C,C.uniforms.tDiffuse.value=R.texture,C.uniforms.v.value=1*e/256,g.setRenderTarget(y),g.render(b,x.current),b.visible=!1};let _=0;return o.useFrame((()=>{if(x.current&&(t===1/0||_<t)){const e=v.background;v.background=null;const t=v.overrideMaterial;v.overrideMaterial=E,g.setRenderTarget(y),g.render(v,x.current),v.overrideMaterial=t,D(i),l&&D(.4*i),g.setRenderTarget(null),v.background=e,_++}})),T.createElement("group",S.default({"rotation-x":Math.PI/2},p,{ref:h}),T.createElement("mesh",{renderOrder:f,geometry:w,scale:[1,-1,1],rotation:[-Math.PI/2,0,0]},T.createElement("meshBasicMaterial",{map:y.texture,"map-encoding":g.outputEncoding,transparent:!0,opacity:r,depthWrite:m})),T.createElement("orthographicCamera",{ref:x,args:[-n/2,n/2,a/2,-a/2,0,s]}))})),Sr={rembrandt:{main:[1,2,1],fill:[-2,-.5,-2]},portrait:{main:[-1,2,.5],fill:[-1,.5,-1.5]},upfront:{main:[0,2,1],fill:[-1,.5,-1.5]},soft:{main:[-2,4,4],fill:[-1,.5,-1.5]}};const Tr=e=>0===e?0:Math.pow(2,10*e-10);const Cr=T.forwardRef((({fog:e=!1,renderOrder:t,depthWrite:r=!1,colorStop:o=0,color:a="black",opacity:i=.5,...s},c)=>{const l=T.useMemo((()=>{const e=document.createElement("canvas");e.width=128,e.height=128;const t=e.getContext("2d"),r=t.createRadialGradient(e.width/2,e.height/2,0,e.width/2,e.height/2,e.width/2);return r.addColorStop(o,new n.Color(a).getStyle()),r.addColorStop(1,"rgba(0,0,0,0)"),t.fillStyle=r,t.fillRect(0,0,e.width,e.height),e}),[a,o]);return T.createElement("mesh",S.default({renderOrder:t,ref:c,"rotation-x":-Math.PI/2},s),T.createElement("planeGeometry",null),T.createElement("meshBasicMaterial",{transparent:!0,opacity:i,fog:e,depthWrite:r,side:n.DoubleSide},T.createElement("canvasTexture",{attach:"map",args:[l]})))}));const Pr=T.createContext(null),Rr=pe({color:new P.Color,blend:2,alphaTest:.75,opacity:0,map:null},"varying vec2 vUv;\n void main() {\n gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);\n vUv = uv;\n }","varying vec2 vUv;\n uniform sampler2D map;\n uniform vec3 color;\n uniform float opacity;\n uniform float alphaTest;\n uniform float blend;\n void main() {\n vec4 sampledDiffuseColor = texture2D(map, vUv);\n gl_FragColor = vec4(color * sampledDiffuseColor.r * blend, max(0.0, (1.0 - (sampledDiffuseColor.r + sampledDiffuseColor.g + sampledDiffuseColor.b) / alphaTest)) * opacity);\n #include <tonemapping_fragment>\n #include <encodings_fragment>\n }"),Dr=pe({},"void main() { gl_Position = vec4((uv - 0.5) * 2.0, 1.0, 1.0); }","void main() { discard; }"),_r=T.forwardRef((({children:e,temporal:t,frames:r=40,limit:n=1/0,blend:a=20,scale:i=10,opacity:s=1,alphaTest:c=.75,color:l="black",colorBlend:u=2,resolution:d=1024,toneMapped:m=!0,...f},p)=>{o.extend({SoftShadowMaterial:Rr});const h=o.useThree((e=>e.gl)),v=o.useThree((e=>e.scene)),g=o.useThree((e=>e.camera)),x=T.useRef(null),y=T.useRef(null),[w]=T.useState((()=>new zr(h,v,d)));T.useLayoutEffect((()=>{w.configure(x.current)}),[]);const E=T.useMemo((()=>({lights:new Map,temporal:!!t,frames:Math.max(2,r),blend:Math.max(2,r===1/0?a:r),count:0,getMesh:()=>x.current,reset:()=>{w.clear();const e=x.current.material;e.opacity=0,e.alphaTest=0,E.count=0},update:(e=1)=>{const t=x.current.material;E.temporal?(t.opacity=Math.min(s,t.opacity+s/E.blend),t.alphaTest=Math.min(c,t.alphaTest+c/E.blend)):(t.opacity=s,t.alphaTest=c),y.current.visible=!0,w.prepare();for(let t=0;t<e;t++)E.lights.forEach((e=>e.update())),w.update(g,E.blend);y.current.visible=!1,w.finish()}})),[w,g,v,t,r,a,s,c]);return T.useLayoutEffect((()=>{E.reset(),E.temporal||E.frames===1/0||E.update(E.blend)})),T.useImperativeHandle(p,(()=>E),[E]),o.useFrame((()=>{(E.temporal||E.frames===1/0)&&E.count<E.frames&&E.count<n&&(E.update(),E.count++)})),T.createElement("group",f,T.createElement("group",{traverse:()=>null,ref:y},T.createElement(Pr.Provider,{value:E},e)),T.createElement("mesh",{receiveShadow:!0,ref:x,scale:i,rotation:[-Math.PI/2,0,0]},T.createElement("planeGeometry",null),T.createElement("softShadowMaterial",{transparent:!0,depthWrite:!1,toneMapped:m,color:l,blend:u,map:w.progressiveLightMap2.texture})))})),Lr=T.forwardRef((({castShadow:e=!0,bias:t=.001,mapSize:r=512,size:n=5,near:o=.5,far:a=500,frames:i=1,position:s=[0,0,0],radius:c=1,amount:l=8,intensity:u=1,ambient:d=.5,...m},f)=>{const p=T.useRef(null),h=new P.Vector3(...s).length(),v=T.useContext(Pr),g=T.useCallback((()=>{let e;if(p.current)for(let t=0;t<p.current.children.length;t++)if(e=p.current.children[t],Math.random()>d)e.position.set(s[0]+P.MathUtils.randFloatSpread(c),s[1]+P.MathUtils.randFloatSpread(c),s[2]+P.MathUtils.randFloatSpread(c));else{let t=Math.acos(2*Math.random()-1)-Math.PI/2,r=2*Math.PI*Math.random();e.position.set(Math.cos(t)*Math.cos(r)*h,Math.abs(Math.cos(t)*Math.sin(r)*h),Math.sin(t)*h)}}),[c,d,h,...s]),x=T.useMemo((()=>({update:g})),[g]);return T.useImperativeHandle(f,(()=>x),[x]),T.useLayoutEffect((()=>{const e=p.current;return v&&v.lights.set(e.uuid,x),()=>{v.lights.delete(e.uuid)}}),[v,x]),T.createElement("group",S.default({ref:p},m),Array.from({length:l},((i,s)=>T.createElement("directionalLight",{key:s,castShadow:e,"shadow-bias":t,"shadow-mapSize":[r,r],intensity:u/l},T.createElement("orthographicCamera",{attach:"shadow-camera",args:[-n,n,n,-n,o,a]})))))}));class zr{constructor(e,t,r=1024){this.renderer=e,this.res=r,this.scene=t,this.scene.background=null,this.buffer1Active=!1,this.lights=[],this.meshes=[],this.object=null;const n=/(Android|iPad|iPhone|iPod)/g.test(navigator.userAgent)?P.HalfFloatType:P.FloatType;this.progressiveLightMap1=new P.WebGLRenderTarget(this.res,this.res,{type:n,encoding:e.outputEncoding}),this.progressiveLightMap2=new P.WebGLRenderTarget(this.res,this.res,{type:n,encoding:e.outputEncoding}),this.discardMat=new Dr,this.targetMat=new P.MeshPhongMaterial({shininess:0}),this.previousShadowMap={value:this.progressiveLightMap1.texture},this.averagingWindow={value:100},this.targetMat.onBeforeCompile=e=>{e.vertexShader="varying vec2 vUv;\n"+e.vertexShader.slice(0,-1)+"vUv = uv; gl_Position = vec4((uv - 0.5) * 2.0, 1.0, 1.0); }";const t=e.fragmentShader.indexOf("void main() {");e.fragmentShader=e.fragmentShader.replace("#include <clipping_planes_pars_fragment>","#include <clipping_planes_pars_fragment>\n#include <shadowmask_pars_fragment>\n"),e.fragmentShader="varying vec2 vUv;\n"+e.fragmentShader.slice(0,t)+"\tuniform sampler2D previousShadowMap;\n\tuniform float averagingWindow;\n"+e.fragmentShader.slice(t-1,-1)+"\nvec3 texelOld = texture2D(previousShadowMap, vUv).rgb;\n gl_FragColor.rgb = mix(texelOld, gl_FragColor.rgb, 1.0/averagingWindow);\n }",e.uniforms.previousShadowMap=this.previousShadowMap,e.uniforms.averagingWindow=this.averagingWindow}}clear(){this.renderer.setRenderTarget(this.progressiveLightMap1),this.renderer.clear(),this.renderer.setRenderTarget(this.progressiveLightMap2),this.renderer.clear(),this.lights=[],this.meshes=[],this.scene.traverse((e=>{!function(e){return!!e.geometry}(e)?function(e){return e.isLight}(e)&&this.lights.push({object:e,intensity:e.intensity}):this.meshes.push({object:e,material:e.material})}))}prepare(){this.lights.forEach((e=>e.object.intensity=0)),this.meshes.forEach((e=>e.object.material=this.discardMat))}finish(){this.lights.forEach((e=>e.object.intensity=e.intensity)),this.meshes.forEach((e=>e.object.material=e.material))}configure(e){this.object=e}update(e,t=100){if(!this.object)return;this.averagingWindow.value=t,this.object.material=this.targetMat;const r=this.buffer1Active?this.progressiveLightMap1:this.progressiveLightMap2,n=this.buffer1Active?this.progressiveLightMap2:this.progressiveLightMap1;this.renderer.setRenderTarget(r),this.previousShadowMap.value=n.texture,this.buffer1Active=!this.buffer1Active,this.renderer.render(this.scene,e),this.renderer.setRenderTarget(null)}}o.extend({MeshReflectorMaterial:At});const kr=T.forwardRef((({mixBlur:e=0,mixStrength:t=.5,resolution:r=256,blur:a=[0,0],args:i=[1,1],minDepthThreshold:s=.9,maxDepthThreshold:c=1,depthScale:l=0,depthToBlurRatioBias:u=.25,mirror:d=0,children:m,debug:f=0,distortion:p=1,mixContrast:h=1,distortionMap:v,...g},x)=>{T.useEffect((()=>{console.warn("Reflector has been deprecated and will be removed next major. Replace it with <MeshReflectorMaterial />!")}),[]);const y=o.useThree((({gl:e})=>e)),w=o.useThree((({camera:e})=>e)),E=o.useThree((({scene:e})=>e)),b=(a=Array.isArray(a)?a:[a,a])[0]+a[1]>0,M=T.useRef(null),[C]=T.useState((()=>new n.Plane)),[P]=T.useState((()=>new n.Vector3)),[R]=T.useState((()=>new n.Vector3)),[_]=T.useState((()=>new n.Vector3)),[L]=T.useState((()=>new n.Matrix4)),[z]=T.useState((()=>new n.Vector3(0,0,-1))),[k]=T.useState((()=>new n.Vector4)),[F]=T.useState((()=>new n.Vector3)),[A]=T.useState((()=>new n.Vector3)),[B]=T.useState((()=>new n.Vector4)),[U]=T.useState((()=>new n.Matrix4)),[V]=T.useState((()=>new n.PerspectiveCamera)),I=T.useCallback((()=>{if(R.setFromMatrixPosition(M.current.matrixWorld),_.setFromMatrixPosition(w.matrixWorld),L.extractRotation(M.current.matrixWorld),P.set(0,0,1),P.applyMatrix4(L),F.subVectors(R,_),F.dot(P)>0)return;F.reflect(P).negate(),F.add(R),L.extractRotation(w.matrixWorld),z.set(0,0,-1),z.applyMatrix4(L),z.add(_),A.subVectors(R,z),A.reflect(P).negate(),A.add(R),V.position.copy(F),V.up.set(0,1,0),V.up.applyMatrix4(L),V.up.reflect(P),V.lookAt(A),V.far=w.far,V.updateMatrixWorld(),V.projectionMatrix.copy(w.projectionMatrix),U.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),U.multiply(V.projectionMatrix),U.multiply(V.matrixWorldInverse),U.multiply(M.current.matrixWorld),C.setFromNormalAndCoplanarPoint(P,R),C.applyMatrix4(V.matrixWorldInverse),k.set(C.normal.x,C.normal.y,C.normal.z,C.constant);const e=V.projectionMatrix;B.x=(Math.sign(k.x)+e.elements[8])/e.elements[0],B.y=(Math.sign(k.y)+e.elements[9])/e.elements[5],B.z=-1,B.w=(1+e.elements[10])/e.elements[14],k.multiplyScalar(2/k.dot(B)),e.elements[2]=k.x,e.elements[6]=k.y,e.elements[10]=k.z+1,e.elements[14]=k.w}),[]),[O,j,W,N]=T.useMemo((()=>{const o={minFilter:n.LinearFilter,magFilter:n.LinearFilter,encoding:y.outputEncoding},i=new n.WebGLRenderTarget(r,r,o);i.depthBuffer=!0,i.depthTexture=new n.DepthTexture(r,r),i.depthTexture.format=n.DepthFormat,i.depthTexture.type=n.UnsignedShortType;const m=new n.WebGLRenderTarget(r,r,o);return[i,m,new Ft({gl:y,resolution:r,width:a[0],height:a[1],minDepthThreshold:s,maxDepthThreshold:c,depthScale:l,depthToBlurRatioBias:u}),{mirror:d,textureMatrix:U,mixBlur:e,tDiffuse:i.texture,tDepth:i.depthTexture,tDiffuseBlur:m.texture,hasBlur:b,mixStrength:t,minDepthThreshold:s,maxDepthThreshold:c,depthScale:l,depthToBlurRatioBias:u,transparent:!0,debug:f,distortion:p,distortionMap:v,mixContrast:h,"defines-USE_BLUR":b?"":void 0,"defines-USE_DEPTH":l>0?"":void 0,"defines-USE_DISTORTION":v?"":void 0}]}),[y,a,U,r,d,b,e,t,s,c,l,u,f,p,v,h]);return o.useFrame((()=>{if(null==M||!M.current)return;M.current.visible=!1;const e=y.xr.enabled,t=y.shadowMap.autoUpdate;I(),y.xr.enabled=!1,y.shadowMap.autoUpdate=!1,y.setRenderTarget(O),y.state.buffers.depth.setMask(!0),y.autoClear||y.clear(),y.render(E,V),b&&W.render(y,O,j),y.xr.enabled=e,y.shadowMap.autoUpdate=t,M.current.visible=!0,y.setRenderTarget(null)})),T.createElement("mesh",S.default({ref:D.default([M,x])},g),T.createElement("planeGeometry",{args:i}),m?m("meshReflectorMaterial",N):T.createElement("meshReflectorMaterial",N))}));class Fr extends n.ShaderMaterial{constructor(){super({uniforms:{depth:{value:null},opacity:{value:1},attenuation:{value:2.5},anglePower:{value:12},spotPosition:{value:new n.Vector3(0,0,0)},lightColor:{value:new n.Color("white")},cameraNear:{value:0},cameraFar:{value:1},resolution:{value:new n.Vector2(0,0)}},transparent:!0,depthWrite:!1,vertexShader:"\n varying vec3 vNormal;\n varying vec3 vWorldPosition;\n varying float vViewZ;\n varying float vIntensity;\n uniform vec3 spotPosition;\n uniform float attenuation; \n\n void main() {\n // compute intensity\n vNormal = normalize( normalMatrix * normal );\n vec4 worldPosition\t= modelMatrix * vec4( position, 1.0 );\n vWorldPosition = worldPosition.xyz;\n vec4 viewPosition = viewMatrix * worldPosition;\n vViewZ = viewPosition.z;\n float intensity\t= distance(worldPosition.xyz, spotPosition) / attenuation;\n intensity\t= 1.0 - clamp(intensity, 0.0, 1.0);\n vIntensity = intensity; \n // set gl_Position\n gl_Position\t= projectionMatrix * viewPosition;\n\n }",fragmentShader:"\n #include <packing>\n\n varying vec3 vNormal;\n varying vec3 vWorldPosition;\n uniform vec3 lightColor;\n uniform vec3 spotPosition;\n uniform float attenuation;\n uniform float anglePower;\n uniform sampler2D depth;\n uniform vec2 resolution;\n uniform float cameraNear;\n uniform float cameraFar;\n varying float vViewZ;\n varying float vIntensity;\n uniform float opacity;\n\n float readDepth( sampler2D depthSampler, vec2 coord ) {\n float fragCoordZ = texture2D( depthSampler, coord ).x;\n float viewZ = perspectiveDepthToViewZ(fragCoordZ, cameraNear, cameraFar);\n return viewZ;\n }\n\n void main() {\n float d = 1.0;\n bool isSoft = resolution[0] > 0.0 && resolution[1] > 0.0;\n if (isSoft) {\n vec2 sUv = gl_FragCoord.xy / resolution;\n d = readDepth(depth, sUv);\n }\n float intensity = vIntensity;\n vec3 normal\t= vec3(vNormal.x, vNormal.y, abs(vNormal.z));\n float angleIntensity\t= pow( dot(normal, vec3(0.0, 0.0, 1.0)), anglePower );\n intensity\t*= angleIntensity;\n // fades when z is close to sampled depth, meaning the cone is intersecting existing geometry\n if (isSoft) {\n intensity\t*= smoothstep(0., 1., vViewZ - d);\n }\n gl_FragColor = vec4(lightColor, intensity * opacity);\n\n #include <tonemapping_fragment>\n\t #include <encodings_fragment>\n }"})}}const Ar=new n.Vector3,Br=T.forwardRef((({opacity:e=1,radiusTop:t,radiusBottom:r,depthBuffer:a,color:i="white",distance:s=5,angle:c=.15,attenuation:l=5,anglePower:u=5,...d},m)=>{const f=T.useRef(null),p=o.useThree((e=>e.size)),h=o.useThree((e=>e.camera)),v=o.useThree((e=>e.viewport.dpr)),[g]=T.useState((()=>new Fr));t=void 0===t?.1:t,r=void 0===r?7*c:r,o.useFrame((()=>{g.uniforms.spotPosition.value.copy(f.current.getWorldPosition(Ar)),f.current.lookAt(f.current.parent.target.getWorldPosition(Ar))}));const x=T.useMemo((()=>{const e=new n.CylinderGeometry(t,r,s,128,64,!0);return e.applyMatrix4((new n.Matrix4).makeTranslation(0,-s/2,0)),e.applyMatrix4((new n.Matrix4).makeRotationX(-Math.PI/2)),e}),[c,s,t,r]);return T.createElement("spotLight",S.default({ref:m,angle:c,color:i,distance:s},d),T.createElement("mesh",{ref:f,geometry:x,raycast:()=>null},T.createElement("primitive",{object:g,attach:"material","uniforms-opacity-value":e,"uniforms-lightColor-value":i,"uniforms-attenuation-value":l,"uniforms-anglePower-value":u,"uniforms-depth-value":a,"uniforms-cameraNear-value":h.near,"uniforms-cameraFar-value":h.far,"uniforms-resolution-value":a?[p.width*v,p.height*v]:[0,0]})))})),Ur=T.forwardRef((({args:e,map:t,toneMapped:r=!1,color:n="white",form:a="rect",intensity:i=1,scale:s=1,target:c,children:l,...u},d)=>{const m=T.useRef(null);return T.useLayoutEffect((()=>{l||u.material||(o.applyProps(m.current.material,{color:n}),m.current.material.color.multiplyScalar(i))}),[n,i,l,u.material]),T.useLayoutEffect((()=>{c&&m.current.lookAt(Array.isArray(c)?new P.Vector3(...c):c)}),[c]),s=Array.isArray(s)&&2===s.length?[s[0],s[1],1]:s,T.createElement("mesh",S.default({ref:D.default([m,d]),scale:s},u),"circle"===a?T.createElement("ringGeometry",{args:[0,1,64]}):"ring"===a?T.createElement("ringGeometry",{args:[.5,1,64]}):"rect"===a?T.createElement("planeGeometry",null):T.createElement(a,{args:e}),l||(u.material?null:T.createElement("meshBasicMaterial",{toneMapped:r,map:t,side:P.DoubleSide})))}));function Vr(e,t,r=new n.Vector3){const o=Math.PI*(e-.5),a=2*Math.PI*(t-.5);return r.x=Math.cos(a),r.y=Math.sin(o),r.z=Math.sin(a),r}const Ir=T.forwardRef((({inclination:e=.6,azimuth:t=.1,distance:r=1e3,mieCoefficient:o=.005,mieDirectionalG:a=.8,rayleigh:i=.5,turbidity:s=10,sunPosition:c=Vr(e,t),...l},d)=>{const m=T.useMemo((()=>(new n.Vector3).setScalar(r)),[r]),[f]=T.useState((()=>new u.Sky));return T.createElement("primitive",S.default({object:f,ref:d,"material-uniforms-mieCoefficient-value":o,"material-uniforms-mieDirectionalG-value":a,"material-uniforms-rayleigh-value":i,"material-uniforms-sunPosition-value":c,"material-uniforms-turbidity-value":s,scale:m},l))}));class Or extends n.ShaderMaterial{constructor(){super({uniforms:{time:{value:0},fade:{value:1}},vertexShader:"\n uniform float time;\n attribute float size;\n varying vec3 vColor;\n void main() {\n vColor = color;\n vec4 mvPosition = modelViewMatrix * vec4(position, 0.5);\n gl_PointSize = size * (30.0 / -mvPosition.z) * (3.0 + sin(mvPosition.x + 2.0 * time + 100.0));\n gl_Position = projectionMatrix * mvPosition;\n }",fragmentShader:"\n uniform sampler2D pointTexture;\n uniform float fade;\n varying vec3 vColor;\n void main() {\n float opacity = 1.0;\n if (fade == 1.0) {\n float d = distance(gl_PointCoord, vec2(0.5, 0.5));\n opacity = 1.0 / (1.0 + exp(16.0 * (d - 0.25)));\n }\n gl_FragColor = vec4(vColor, opacity);\n\n #include <tonemapping_fragment>\n\t #include <encodings_fragment>\n }"})}}const jr=e=>(new n.Vector3).setFromSpherical(new n.Spherical(e,Math.acos(1-2*Math.random()),2*Math.random()*Math.PI)),Wr=T.forwardRef((({radius:e=100,depth:t=50,count:r=5e3,saturation:a=0,factor:i=4,fade:s=!1,speed:c=1},l)=>{const u=T.useRef(),[d,m,f]=T.useMemo((()=>{const o=[],s=[],c=Array.from({length:r},(()=>(.5+.5*Math.random())*i)),l=new n.Color;let u=e+t;const d=t/r;for(let e=0;e<r;e++)u-=d*Math.random(),o.push(...jr(u).toArray()),l.setHSL(e/r,a,.9),s.push(l.r,l.g,l.b);return[new Float32Array(o),new Float32Array(s),new Float32Array(c)]}),[r,t,i,e,a]);o.useFrame((e=>u.current&&(u.current.uniforms.time.value=e.clock.getElapsedTime()*c)));const[p]=T.useState((()=>new Or));return T.createElement("points",{ref:l},T.createElement("bufferGeometry",null,T.createElement("bufferAttribute",{attach:"attributes-position",args:[d,3]}),T.createElement("bufferAttribute",{attach:"attributes-color",args:[m,3]}),T.createElement("bufferAttribute",{attach:"attributes-size",args:[f,1]})),T.createElement("primitive",{ref:u,object:p,attach:"material",blending:n.AdditiveBlending,"uniforms-fade-value":s,transparent:!0,vertexColors:!0}))}));const Nr=pe({time:0,pixelRatio:1},"#define GLSLIFY 1\nuniform float pixelRatio;uniform float time;attribute float size;attribute float speed;attribute float opacity;attribute vec3 noise;attribute vec3 color;varying vec3 vColor;varying float vOpacity;void main(){vec4 modelPosition=modelMatrix*vec4(position,1.0);modelPosition.y+=sin(time*speed+modelPosition.x*noise.x*100.0)*0.2;modelPosition.z+=cos(time*speed+modelPosition.x*noise.y*100.0)*0.2;modelPosition.x+=cos(time*speed+modelPosition.x*noise.z*100.0)*0.2;vec4 viewPosition=viewMatrix*modelPosition;vec4 projectionPostion=projectionMatrix*viewPosition;gl_Position=projectionPostion;gl_PointSize=size*25.*pixelRatio;gl_PointSize*=(1.0/-viewPosition.z);vColor=color;vOpacity=opacity;}","#define GLSLIFY 1\nvarying vec3 vColor;varying float vOpacity;void main(){float distanceToCenter=distance(gl_PointCoord,vec2(0.5));float strength=0.05/distanceToCenter-0.1;gl_FragColor=vec4(vColor,strength*vOpacity);}"),Gr=e=>e&&e.constructor===Float32Array,Hr=e=>e instanceof P.Vector2||e instanceof P.Vector3||e instanceof P.Vector4,$r=e=>Array.isArray(e)?e:Hr(e)?e.toArray():[e,e,e];function qr(e,t,r){return T.useMemo((()=>{if(void 0!==t){if(Gr(t))return t;if(t instanceof P.Color){const r=Array.from({length:3*e},(()=>(e=>[e.r,e.g,e.b])(t))).flat();return Float32Array.from(r)}if(Hr(t)||Array.isArray(t)){const r=Array.from({length:3*e},(()=>$r(t))).flat();return Float32Array.from(r)}return Float32Array.from({length:e},(()=>t))}return Float32Array.from({length:e},r)}),[t])}const Xr=T.forwardRef((({noise:e=1,count:t=100,speed:r=1,opacity:n=1,scale:a=1,size:i,color:s,...c},l)=>{T.useMemo((()=>o.extend({SparklesMaterial:Nr})),[]);const u=T.useRef(),d=o.useThree((e=>e.viewport.dpr)),m=T.useMemo((()=>Float32Array.from(Array.from({length:t},(()=>$r(a).map(P.MathUtils.randFloatSpread))).flat())),[t,a]),f=qr(t,i,Math.random),p=qr(t,n),h=qr(t,r),v=qr(3*t,e),g=qr(void 0===s?3*t:t,Gr(s)?s:new P.Color(s),(()=>1));return o.useFrame((e=>u.current.uniforms.time.value=e.clock.elapsedTime)),T.createElement("points",S.default({key:`particle-${t}-${JSON.stringify(a)}`},c,{ref:l}),T.createElement("bufferGeometry",null,T.createElement("bufferAttribute",{attach:"attributes-position",args:[m,3]}),T.createElement("bufferAttribute",{attach:"attributes-size",args:[f,1]}),T.createElement("bufferAttribute",{attach:"attributes-opacity",args:[p,1]}),T.createElement("bufferAttribute",{attach:"attributes-speed",args:[h,1]}),T.createElement("bufferAttribute",{attach:"attributes-color",args:[g,3]}),T.createElement("bufferAttribute",{attach:"attributes-noise",args:[v,3]})),T.createElement("sparklesMaterial",{ref:u,transparent:!0,pixelRatio:d,depthWrite:!1}))}));const Zr=new P.Matrix4,Yr=new P.Ray,Kr=new P.Sphere,Qr=new P.Vector3;class Jr extends P.Group{constructor(){super(),this.size=0,this.color=new P.Color("white"),this.instance={current:void 0},this.instanceKey={current:void 0}}get geometry(){var e;return null==(e=this.instance.current)?void 0:e.geometry}raycast(e,t){var r,n;const o=this.instance.current;if(!o||!o.geometry)return;const a=o.userData.instances.indexOf(this.instanceKey);if(-1===a||a>o.geometry.drawRange.count)return;const i=null!==(r=null==(n=e.params.Points)?void 0:n.threshold)&&void 0!==r?r:1;if(Kr.set(this.getWorldPosition(Qr),i),!1===e.ray.intersectsSphere(Kr))return;Zr.copy(o.matrixWorld).invert(),Yr.copy(e.ray).applyMatrix4(Zr);const s=i/((this.scale.x+this.scale.y+this.scale.z)/3),c=s*s,l=Yr.distanceSqToPoint(Qr);if(l<c){const r=new P.Vector3;Yr.closestPointToPoint(Qr,r),r.applyMatrix4(this.matrixWorld);const n=e.ray.origin.distanceTo(r);if(n<e.near||n>e.far)return;t.push({distance:n,distanceToRay:Math.sqrt(l),point:r,index:a,face:null,object:this})}}}let en,tn;const rn=T.createContext(null),nn=new P.Matrix4,on=new P.Vector3,an=T.forwardRef((({children:e,range:t,limit:r=1e3,...n},a)=>{const i=T.useRef(null),[s,c]=T.useState([]),[[l,u,d]]=T.useState((()=>[new Float32Array(3*r),Float32Array.from({length:3*r},(()=>1)),Float32Array.from({length:r},(()=>1))]));T.useEffect((()=>{i.current.geometry.attributes.position.needsUpdate=!0})),o.useFrame((()=>{for(i.current.updateMatrix(),i.current.updateMatrixWorld(),nn.copy(i.current.matrixWorld).invert(),i.current.geometry.drawRange.count=Math.min(r,void 0!==t?t:r,s.length),en=0;en<s.length;en++)tn=s[en].current,tn.getWorldPosition(on).applyMatrix4(nn),on.toArray(l,3*en),i.current.geometry.attributes.position.needsUpdate=!0,tn.matrixWorldNeedsUpdate=!0,tn.color.toArray(u,3*en),i.current.geometry.attributes.color.needsUpdate=!0,d.set([tn.size],en),i.current.geometry.attributes.size.needsUpdate=!0}));const m=T.useMemo((()=>({getParent:()=>i,subscribe:e=>(c((t=>[...t,e])),()=>c((t=>t.filter((t=>t.current!==e.current)))))})),[]);return T.createElement("points",S.default({userData:{instances:s},matrixAutoUpdate:!1,ref:D.default([a,i]),raycast:()=>null},n),T.createElement("bufferGeometry",null,T.createElement("bufferAttribute",{attach:"attributes-position",count:l.length/3,array:l,itemSize:3,usage:P.DynamicDrawUsage}),T.createElement("bufferAttribute",{attach:"attributes-color",count:u.length/3,array:u,itemSize:3,usage:P.DynamicDrawUsage}),T.createElement("bufferAttribute",{attach:"attributes-size",count:d.length,array:d,itemSize:1,usage:P.DynamicDrawUsage})),T.createElement(rn.Provider,{value:m},e))})),sn=T.forwardRef((({children:e,...t},r)=>{T.useMemo((()=>o.extend({PositionPoint:Jr})),[]);const n=T.useRef(),{subscribe:a,getParent:i}=T.useContext(rn);return T.useLayoutEffect((()=>a(n)),[]),T.createElement("positionPoint",S.default({instance:i(),instanceKey:n,ref:D.default([r,n])},t),e)})),cn=T.forwardRef((({children:e,positions:t,colors:r,sizes:n,stride:a=3,...i},s)=>{const c=T.useRef(null);return o.useFrame((()=>{const e=c.current.geometry.attributes;e.position.needsUpdate=!0,r&&(e.color.needsUpdate=!0),n&&(e.size.needsUpdate=!0)})),T.createElement("points",S.default({ref:D.default([s,c])},i),T.createElement("bufferGeometry",null,T.createElement("bufferAttribute",{attach:"attributes-position",count:t.length/a,array:t,itemSize:a,usage:P.DynamicDrawUsage}),r&&T.createElement("bufferAttribute",{attach:"attributes-color",count:r.length/a,array:r,itemSize:3,usage:P.DynamicDrawUsage}),n&&T.createElement("bufferAttribute",{attach:"attributes-size",count:n.length/a,array:n,itemSize:1,usage:P.DynamicDrawUsage})),e)})),ln=T.forwardRef(((e,t)=>e.positions instanceof Float32Array?T.createElement(cn,S.default({},e,{ref:t})):T.createElement(an,S.default({},e,{ref:t})))),un=new P.Matrix4,dn=new P.Matrix4,mn=[],fn=new P.Mesh;class pn extends P.Group{constructor(){super(),this.color=new P.Color("white"),this.instance={current:void 0},this.instanceKey={current:void 0}}get geometry(){var e;return null==(e=this.instance.current)?void 0:e.geometry}raycast(e,t){const r=this.instance.current;if(!r)return;if(!r.geometry||!r.material)return;fn.geometry=r.geometry;const n=r.matrixWorld,o=r.userData.instances.indexOf(this.instanceKey);if(!(-1===o||o>r.count)){r.getMatrixAt(o,un),dn.multiplyMatrices(n,un),fn.matrixWorld=dn,fn.raycast(e,mn);for(let e=0,r=mn.length;e<r;e++){const r=mn[e];r.instanceId=o,r.object=this,t.push(r)}mn.length=0}}}const hn=T.createContext(null),vn=new P.Matrix4,gn=new P.Matrix4,xn=new P.Matrix4,yn=new P.Vector3,wn=new P.Quaternion,En=new P.Vector3,bn=T.forwardRef((({context:e,children:t,...r},n)=>{T.useMemo((()=>o.extend({PositionMesh:pn})),[]);const a=T.useRef(),{subscribe:i,getParent:s}=T.useContext(e||hn);return T.useLayoutEffect((()=>i(a)),[]),T.createElement("positionMesh",S.default({instance:s(),instanceKey:a,ref:D.default([n,a])},r),t)})),Mn=T.forwardRef((({children:e,range:t,limit:r=1e3,frames:n=1/0,...a},i)=>{const[{context:s,instance:c}]=T.useState((()=>{const e=T.createContext(null);return{context:e,instance:T.forwardRef(((t,r)=>T.createElement(bn,S.default({context:e},t,{ref:r}))))}})),l=T.useRef(null),[u,d]=T.useState([]),[[m,f]]=T.useState((()=>{const e=new Float32Array(16*r);for(let t=0;t<r;t++)xn.identity().toArray(e,16*t);return[e,new Float32Array([...new Array(3*r)].map((()=>1)))]}));T.useEffect((()=>{l.current.instanceMatrix.needsUpdate=!0}));let p=0,h=0;o.useFrame((()=>{if(n===1/0||p<n){l.current.updateMatrix(),l.current.updateMatrixWorld(),vn.copy(l.current.matrixWorld).invert(),h=Math.min(r,void 0!==t?t:r,u.length),l.current.count=h,l.current.instanceMatrix.updateRange.count=16*h,l.current.instanceColor.updateRange.count=3*h;for(let e=0;e<u.length;e++){const t=u[e].current;t.matrixWorld.decompose(yn,wn,En),gn.compose(yn,wn,En).premultiply(vn),gn.toArray(m,16*e),l.current.instanceMatrix.needsUpdate=!0,t.color.toArray(f,3*e),l.current.instanceColor.needsUpdate=!0}p++}}));const v=T.useMemo((()=>({getParent:()=>l,subscribe:e=>(d((t=>[...t,e])),()=>d((t=>t.filter((t=>t.current!==e.current)))))})),[]);return T.createElement("instancedMesh",S.default({userData:{instances:u},matrixAutoUpdate:!1,ref:D.default([i,l]),args:[null,null,0],raycast:()=>null},a),T.createElement("instancedBufferAttribute",{attach:"instanceMatrix",count:m.length/16,array:m,itemSize:16,usage:P.DynamicDrawUsage}),T.createElement("instancedBufferAttribute",{attach:"instanceColor",count:f.length/3,array:f,itemSize:3,usage:P.DynamicDrawUsage}),"function"==typeof e?T.createElement(s.Provider,{value:v},e(c)):T.createElement(hn.Provider,{value:v},e))})),Sn=T.forwardRef((function({meshes:e,children:t,...r},n){const o=Array.isArray(e);if(!o)for(const t of Object.keys(e))e[t].isMesh||delete e[t];return T.createElement("group",{ref:n},T.createElement(F.default,{components:(o?e:Object.values(e)).map((({geometry:e,material:t})=>T.createElement(Mn,S.default({key:e.uuid,geometry:e,material:t},r))))},(r=>o?t(...r):t(Object.keys(e).filter((t=>e[t].isMesh)).reduce(((e,t,n)=>({...e,[t]:r[n]})),{})))))})),Tn=T.createContext(null),Cn=T.forwardRef(((e,t)=>{T.useMemo((()=>o.extend({SegmentObject:Pn})),[]);const{limit:r=1e3,lineWidth:n=1,children:a,...i}=e,[s,c]=T.useState([]),[l]=T.useState((()=>new u.Line2)),[d]=T.useState((()=>new u.LineMaterial)),[m]=T.useState((()=>new u.LineSegmentsGeometry)),[f]=T.useState((()=>new P.Vector2(512,512))),[p]=T.useState((()=>Array(6*r).fill(0))),[h]=T.useState((()=>Array(6*r).fill(0))),v=T.useMemo((()=>({subscribe:e=>(c((t=>[...t,e])),()=>c((t=>t.filter((t=>t.current!==e.current)))))})),[]);return o.useFrame((()=>{for(let t=0;t<r;t++){var e;const r=null==(e=s[t])?void 0:e.current;r&&(p[6*t+0]=r.start.x,p[6*t+1]=r.start.y,p[6*t+2]=r.start.z,p[6*t+3]=r.end.x,p[6*t+4]=r.end.y,p[6*t+5]=r.end.z,h[6*t+0]=r.color.r,h[6*t+1]=r.color.g,h[6*t+2]=r.color.b,h[6*t+3]=r.color.r,h[6*t+4]=r.color.g,h[6*t+5]=r.color.b)}m.setColors(h),m.setPositions(p),l.computeLineDistances()})),T.createElement("primitive",{object:l,ref:t},T.createElement("primitive",{object:m,attach:"geometry"}),T.createElement("primitive",S.default({object:d,attach:"material",vertexColors:!0,resolution:f,linewidth:n},i)),T.createElement(Tn.Provider,{value:v},a))}));class Pn{constructor(){this.color=new P.Color("white"),this.start=new P.Vector3(0,0,0),this.end=new P.Vector3(0,0,0)}}const Rn=e=>e instanceof P.Vector3?e:new P.Vector3(..."number"==typeof e?[e,e,e]:e),Dn=T.forwardRef((({color:e,start:t,end:r},n)=>{const o=T.useContext(Tn);if(!o)throw"Segment must used inside Segments component.";const a=T.useRef(null);return T.useLayoutEffect((()=>o.subscribe(a)),[]),T.createElement("segmentObject",{ref:D.default([a,n]),color:e,start:Rn(t),end:Rn(r)})})),_n=T.forwardRef((({children:e,distances:t,...r},n)=>{const a=T.useRef(null);return T.useLayoutEffect((()=>{const{current:e}=a;e.levels.length=0,e.children.forEach(((r,n)=>e.levels.push({object:r,distance:t[n]})))})),o.useFrame((e=>{var t;return null==(t=a.current)?void 0:t.update(e.camera)})),T.createElement("lOD",S.default({ref:D.default([a,n])},r),e)}));const Ln=new n.Matrix4,zn=new n.Ray,kn=new n.Sphere,Fn=new n.Vector3;const An=t.createContext(null);const Bn=T.forwardRef((({children:e,width:t,height:r,samples:n=8,renderPriority:a=0,eventPriority:i=0,frames:s=1/0,...c},l)=>{const{size:u,viewport:d}=o.useThree(),m=Ae((t||u.width)*d.dpr,(r||u.height)*d.dpr,{samples:n}),[f]=T.useState((()=>new P.Scene)),p=T.useCallback(((e,t,r)=>{var n,o;let a=null==(n=m.texture)?void 0:n.__r3f.parent;for(;a&&!(a instanceof P.Object3D);)a=a.__r3f.parent;if(!a)return!1;r.raycaster.camera||r.events.compute(e,r,null==(o=r.previousRoot)?void 0:o.getState());const[i]=r.raycaster.intersectObject(a);if(!i)return!1;const s=i.uv;if(!s)return!1;t.raycaster.setFromCamera(t.pointer.set(2*s.x-1,2*s.y-1),t.camera)}),[]);return T.useImperativeHandle(l,(()=>m.texture),[m]),T.createElement(T.Fragment,null,o.createPortal(T.createElement(Un,{renderPriority:a,frames:s,fbo:m},e),f,{events:{compute:p,priority:i}}),T.createElement("primitive",S.default({object:m.texture},c)))}));function Un({frames:e,renderPriority:t,children:r,fbo:n}){let a=0;return o.useFrame((t=>{(e===1/0||a<e)&&(t.gl.setRenderTarget(n),t.gl.render(t.scene,t.camera),t.gl.setRenderTarget(null),a++)}),t),T.createElement(T.Fragment,null,r)}const Vn=new P.Color;function In({canvasSize:e,scene:t,index:r,children:n,frames:a,rect:i,track:s}){const c=o.useThree((e=>e.get)),l=o.useThree((e=>e.camera)),u=o.useThree((e=>e.scene)),d=o.useThree((e=>e.setEvents));let m=0;return o.useFrame((r=>{var o,c;(a===1/0||m<=a)&&(i.current=null==(o=s.current)?void 0:o.getBoundingClientRect(),m++);if(i.current){const{left:o,right:a,top:s,bottom:d,width:m,height:f}=i.current,p=d<0||s>e.height||a<0||o>e.width,h=e.height-d,v=m/f;if((c=l)&&c.isOrthographicCamera?l.left===m/-2&&l.right===m/2&&l.top===f/2&&l.bottom===f/-2||(Object.assign(l,{left:m/-2,right:m/2,top:f/2,bottom:f/-2}),l.updateProjectionMatrix()):l.aspect!==v&&(l.aspect=v,l.updateProjectionMatrix()),r.gl.setViewport(o,h,m,f),r.gl.setScissor(o,h,m,f),r.gl.setScissorTest(!0),p)return r.gl.getClearColor(Vn),r.gl.setClearColor(Vn,r.gl.getClearAlpha()),void r.gl.clear(!0,!0);r.gl.render(n?u:t,l)}}),r),T.useEffect((()=>{const e=c().events.connected;return d({connected:s.current}),()=>d({connected:e})}),[]),T.createElement(T.Fragment,null,n)}const On=T.createContext(null),jn=new P.Vector3,Wn=new P.Vector3,Nn=new P.Vector3(0,1,0),Gn=new P.Matrix4,Hn=({direction:e,axis:t})=>{const{translation:r,translationLimits:n,annotationsClass:a,depthTest:i,scale:s,lineWidth:c,fixed:l,axisColors:u,hoveredColor:d,displayValues:m,opacity:f,onDragStart:p,onDrag:h,onDragEnd:v,userData:g}=T.useContext(On),x=o.useThree((e=>e.controls)),y=T.useRef(null),w=T.useRef(null),E=T.useRef(null),b=T.useRef(0),[M,S]=T.useState(!1),C=T.useCallback((n=>{m&&(y.current.innerText=`${r.current[t].toFixed(2)}`,y.current.style.display="block"),n.stopPropagation();const o=(new P.Matrix4).extractRotation(w.current.matrixWorld),a=n.point.clone(),i=(new P.Vector3).setFromMatrixPosition(w.current.matrixWorld),s=e.clone().applyMatrix4(o).normalize();E.current={clickPoint:a,dir:s},b.current=r.current[t],p({component:"Arrow",axis:t,origin:i,directions:[s]}),x&&(x.enabled=!1),n.target.setPointerCapture(n.pointerId)}),[e,x,p,r,t]),R=T.useCallback((e=>{if(e.stopPropagation(),M||S(!0),E.current){const{clickPoint:o,dir:a}=E.current,[i,s]=(null==n?void 0:n[t])||[void 0,void 0];let c=((e,t,r,n)=>{const o=t.dot(t),a=t.dot(e)-t.dot(r),i=t.dot(n);return 0===i?-a/o:(jn.copy(n).multiplyScalar(o/i).sub(t),Wn.copy(n).multiplyScalar(a/i).add(r).sub(e),-jn.dot(Wn)/jn.dot(jn))})(o,a,e.ray.origin,e.ray.direction);void 0!==i&&(c=Math.max(c,i-b.current)),void 0!==s&&(c=Math.min(c,s-b.current)),r.current[t]=b.current+c,m&&(y.current.innerText=`${r.current[t].toFixed(2)}`),Gn.makeTranslation(a.x*c,a.y*c,a.z*c),h(Gn)}}),[h,M,r,n,t]),D=T.useCallback((e=>{m&&(y.current.style.display="none"),e.stopPropagation(),E.current=null,v(),x&&(x.enabled=!0),e.target.releasePointerCapture(e.pointerId)}),[x,v]),_=T.useCallback((e=>{e.stopPropagation(),S(!1)}),[]),{cylinderLength:L,coneWidth:z,coneLength:k,matrixL:F}=T.useMemo((()=>{const t=l?c/s*1.6:s/20,r=l?.2:s/5,n=l?1-r:s-r,o=(new P.Quaternion).setFromUnitVectors(Nn,e.clone().normalize());return{cylinderLength:n,coneWidth:t,coneLength:r,matrixL:(new P.Matrix4).makeRotationFromQuaternion(o)}}),[e,s,c,l]),A=M?d:u[t];return T.createElement("group",{ref:w},T.createElement("group",{matrix:F,matrixAutoUpdate:!1,onPointerDown:C,onPointerMove:R,onPointerUp:D,onPointerOut:_},T.createElement(H,{position:[0,-k,0]},T.createElement("div",{style:{display:"none",background:"#151520",color:"white",padding:"6px 8px",borderRadius:7,whiteSpace:"nowrap"},className:a,ref:y})),T.createElement("mesh",{visible:!1,position:[0,(L+k)/2,0],userData:g},T.createElement("cylinderGeometry",{args:[1.4*z,1.4*z,L+k,8,1]})),T.createElement(oe,{transparent:!0,raycast:()=>null,depthTest:i,points:[0,0,0,0,L,0],lineWidth:c,color:A,opacity:f,polygonOffset:!0,renderOrder:1,polygonOffsetFactor:-10}),T.createElement("mesh",{raycast:()=>null,position:[0,L+k/2,0],renderOrder:500},T.createElement("coneGeometry",{args:[z,k,24,1]}),T.createElement("meshBasicMaterial",{transparent:!0,depthTest:i,color:A,opacity:f,polygonOffset:!0,polygonOffsetFactor:-10}))))},$n=new P.Ray,qn=new P.Vector3,Xn=new P.Matrix4,Zn=({dir1:e,dir2:t,axis:r})=>{const{translation:n,translationLimits:a,annotationsClass:i,depthTest:s,scale:c,lineWidth:l,fixed:u,axisColors:d,hoveredColor:m,displayValues:f,opacity:p,onDragStart:h,onDrag:v,onDragEnd:g,userData:x}=T.useContext(On),y=o.useThree((e=>e.controls)),w=T.useRef(null),E=T.useRef(null),b=T.useRef(null),M=T.useRef(0),S=T.useRef(0),[C,R]=T.useState(!1),D=T.useCallback((e=>{f&&(w.current.innerText=`${n.current[(r+1)%3].toFixed(2)}, ${n.current[(r+2)%3].toFixed(2)}`,w.current.style.display="block"),e.stopPropagation();const t=e.point.clone(),o=(new P.Vector3).setFromMatrixPosition(E.current.matrixWorld),a=(new P.Vector3).setFromMatrixColumn(E.current.matrixWorld,0).normalize(),i=(new P.Vector3).setFromMatrixColumn(E.current.matrixWorld,1).normalize(),s=(new P.Vector3).setFromMatrixColumn(E.current.matrixWorld,2).normalize(),c=(new P.Plane).setFromNormalAndCoplanarPoint(s,o);b.current={clickPoint:t,e1:a,e2:i,plane:c},M.current=n.current[(r+1)%3],S.current=n.current[(r+2)%3],h({component:"Slider",axis:r,origin:o,directions:[a,i,s]}),y&&(y.enabled=!1),e.target.setPointerCapture(e.pointerId)}),[y,h,r]),_=T.useCallback((e=>{if(e.stopPropagation(),C||R(!0),b.current){const{clickPoint:t,e1:o,e2:i,plane:s}=b.current,[c,l]=(null==a?void 0:a[(r+1)%3])||[void 0,void 0],[u,d]=(null==a?void 0:a[(r+2)%3])||[void 0,void 0];$n.copy(e.ray),$n.intersectPlane(s,qn),$n.direction.negate(),$n.intersectPlane(s,qn),qn.sub(t);let[m,p]=((e,t,r)=>{const n=Math.abs(e.x)>=Math.abs(e.y)&&Math.abs(e.x)>=Math.abs(e.z)?0:Math.abs(e.y)>=Math.abs(e.x)&&Math.abs(e.y)>=Math.abs(e.z)?1:2,o=[0,1,2].sort(((e,r)=>Math.abs(t.getComponent(r))-Math.abs(t.getComponent(e)))),a=n===o[0]?o[1]:o[0],i=e.getComponent(n),s=e.getComponent(a),c=t.getComponent(n),l=t.getComponent(a),u=r.getComponent(n),d=(r.getComponent(a)-u*(s/i))/(l-c*(s/i));return[(u-d*c)/i,d]})(o,i,qn);void 0!==c&&(m=Math.max(m,c-M.current)),void 0!==l&&(m=Math.min(m,l-M.current)),void 0!==u&&(p=Math.max(p,u-S.current)),void 0!==d&&(p=Math.min(p,d-S.current)),n.current[(r+1)%3]=M.current+m,n.current[(r+2)%3]=S.current+p,f&&(w.current.innerText=`${n.current[(r+1)%3].toFixed(2)}, ${n.current[(r+2)%3].toFixed(2)}`),Xn.makeTranslation(m*o.x+p*i.x,m*o.y+p*i.y,m*o.z+p*i.z),v(Xn)}}),[v,C,n,a,r]),L=T.useCallback((e=>{f&&(w.current.style.display="none"),e.stopPropagation(),b.current=null,g(),y&&(y.enabled=!0),e.target.releasePointerCapture(e.pointerId)}),[y,g]),z=T.useCallback((e=>{e.stopPropagation(),R(!1)}),[]),k=T.useMemo((()=>{const r=e.clone().normalize(),n=t.clone().normalize();return(new P.Matrix4).makeBasis(r,n,r.clone().cross(n))}),[e,t]),F=u?1/7:c/7,A=u?.225:.225*c,B=C?m:d[r],U=T.useMemo((()=>[new P.Vector3(0,0,0),new P.Vector3(0,A,0),new P.Vector3(A,A,0),new P.Vector3(A,0,0),new P.Vector3(0,0,0)]),[A]);return T.createElement("group",{ref:E,matrix:k,matrixAutoUpdate:!1},T.createElement(H,{position:[0,0,0]},T.createElement("div",{style:{display:"none",background:"#151520",color:"white",padding:"6px 8px",borderRadius:7,whiteSpace:"nowrap"},className:i,ref:w})),T.createElement("group",{position:[1.7*F,1.7*F,0]},T.createElement("mesh",{visible:!0,onPointerDown:D,onPointerMove:_,onPointerUp:L,onPointerOut:z,scale:A,userData:x},T.createElement("planeGeometry",null),T.createElement("meshBasicMaterial",{transparent:!0,depthTest:s,color:B,polygonOffset:!0,polygonOffsetFactor:-10,side:P.DoubleSide})),T.createElement(oe,{position:[-A/2,-A/2,0],transparent:!0,depthTest:s,points:U,lineWidth:l,color:B,opacity:p,polygonOffset:!0,polygonOffsetFactor:-10,userData:x})))},Yn=new P.Vector3,Kn=new P.Vector3,Qn=e=>180*e/Math.PI,Jn=e=>{let t=((e,t)=>{let r=Math.floor(e/t);return r=r<0?r+1:r,e-r*t})(e,2*Math.PI);return Math.abs(t)<1e-6?0:(t<0&&(t+=2*Math.PI),t)},eo=new P.Matrix4,to=new P.Vector3,ro=new P.Ray,no=new P.Vector3,oo=({dir1:e,dir2:t,axis:r})=>{const{rotationLimits:n,annotationsClass:a,depthTest:i,scale:s,lineWidth:c,fixed:l,axisColors:u,hoveredColor:d,displayValues:m,opacity:f,onDragStart:p,onDrag:h,onDragEnd:v,userData:g}=T.useContext(On),x=o.useThree((e=>e.controls)),y=T.useRef(null),w=T.useRef(null),E=T.useRef(0),b=T.useRef(0),M=T.useRef(null),[S,C]=T.useState(!1),R=T.useCallback((e=>{m&&(y.current.innerText=`${Qn(b.current).toFixed(0)}º`,y.current.style.display="block"),e.stopPropagation();const t=e.point.clone(),n=(new P.Vector3).setFromMatrixPosition(w.current.matrixWorld),o=(new P.Vector3).setFromMatrixColumn(w.current.matrixWorld,0).normalize(),a=(new P.Vector3).setFromMatrixColumn(w.current.matrixWorld,1).normalize(),i=(new P.Vector3).setFromMatrixColumn(w.current.matrixWorld,2).normalize(),s=(new P.Plane).setFromNormalAndCoplanarPoint(i,n);M.current={clickPoint:t,origin:n,e1:o,e2:a,normal:i,plane:s},p({component:"Rotator",axis:r,origin:n,directions:[o,a,i]}),x&&(x.enabled=!1),e.target.setPointerCapture(e.pointerId)}),[x,p,r]),D=T.useCallback((e=>{if(e.stopPropagation(),S||C(!0),M.current){const{clickPoint:t,origin:o,e1:a,e2:i,normal:s,plane:c}=M.current,[l,u]=(null==n?void 0:n[r])||[void 0,void 0];ro.copy(e.ray),ro.intersectPlane(c,no),ro.direction.negate(),ro.intersectPlane(c,no);let d=((e,t,r,n,o)=>{Yn.copy(e).sub(r),Kn.copy(t).sub(r);const a=n.dot(n),i=o.dot(o),s=Yn.dot(n)/a,c=Yn.dot(o)/i,l=Kn.dot(n)/a,u=Kn.dot(o)/i,d=Math.atan2(c,s);return Math.atan2(u,l)-d})(t,no,o,a,i),f=Qn(d);e.shiftKey&&(f=10*Math.round(f/10),d=(e=>e*Math.PI/180)(f)),void 0!==l&&void 0!==u&&u-l<2*Math.PI?(d=Jn(d),d=d>Math.PI?d-2*Math.PI:d,d=A.default(d,l-E.current,u-E.current),b.current=E.current+d):(b.current=Jn(E.current+d),b.current=b.current>Math.PI?b.current-2*Math.PI:b.current),m&&(f=Qn(b.current),y.current.innerText=`${f.toFixed(0)}º`),eo.makeRotationAxis(s,d),to.copy(o).applyMatrix4(eo).sub(o).negate(),eo.setPosition(to),h(eo)}}),[h,S,n,r]),_=T.useCallback((e=>{m&&(y.current.style.display="none"),e.stopPropagation(),E.current=b.current,M.current=null,v(),x&&(x.enabled=!0),e.target.releasePointerCapture(e.pointerId)}),[x,v]),L=T.useCallback((e=>{e.stopPropagation(),C(!1)}),[]),z=T.useMemo((()=>{const r=e.clone().normalize(),n=t.clone().normalize();return(new P.Matrix4).makeBasis(r,n,r.clone().cross(n))}),[e,t]),k=l?.65:.65*s,F=T.useMemo((()=>{const e=[];for(let t=0;t<=32;t++){const r=t*(Math.PI/2)/32;e.push(new P.Vector3(Math.cos(r)*k,Math.sin(r)*k,0))}return e}),[k]);return T.createElement("group",{ref:w,onPointerDown:R,onPointerMove:D,onPointerUp:_,onPointerOut:L,matrix:z,matrixAutoUpdate:!1},T.createElement(H,{position:[k,k,0]},T.createElement("div",{style:{display:"none",background:"#151520",color:"white",padding:"6px 8px",borderRadius:7,whiteSpace:"nowrap"},className:a,ref:y})),T.createElement(oe,{points:F,lineWidth:4*c,visible:!1,userData:g}),T.createElement(oe,{transparent:!0,raycast:()=>null,depthTest:i,points:F,lineWidth:c,color:S?d:u[r],opacity:f,polygonOffset:!0,polygonOffsetFactor:-10}))},ao=new P.Vector3,io=new P.Vector3,so=new P.Vector3,co=(e,t,r,n=1)=>{const o=ao.set(e.x/r.width*2-1,-e.y/r.height*2+1,n);return o.unproject(t),o},lo=(e,t,r,n)=>{const o=((e,t,r)=>{const n=r.width/2,o=r.height/2;t.updateMatrixWorld(!1);const a=e.project(t);return a.x=a.x*n+n,a.y=-a.y*o+o,a})(so.copy(e),r,n);let a=0;for(let i=0;i<2;++i){const s=io.copy(o).setComponent(i,o.getComponent(i)+t),c=co(s,r,n,s.z);a=Math.max(a,e.distanceTo(c))}return a},uo=new P.Matrix4,mo=new P.Matrix4,fo=new P.Matrix4,po=new P.Matrix4,ho=new P.Matrix4,vo=new P.Matrix4,go=new P.Matrix4,xo=new P.Matrix4,yo=new P.Box3,wo=new P.Box3,Eo=new P.Vector3,bo=new P.Vector3,Mo=new P.Vector3,So=new P.Vector3,To=new P.Vector3(1,0,0),Co=new P.Vector3(0,1,0),Po=new P.Vector3(0,0,1),Ro=T.forwardRef((({matrix:e,onDragStart:t,onDrag:r,onDragEnd:n,autoTransform:a=!0,anchor:i,disableAxes:s=!1,disableSliders:c=!1,disableRotations:l=!1,activeAxes:u=[!0,!0,!0],offset:d=[0,0,0],rotation:m=[0,0,0],scale:f=1,lineWidth:h=4,fixed:v=!1,translationLimits:g,rotationLimits:x,depthTest:y=!0,axisColors:w=["#ff2060","#20df80","#2080ff"],hoveredColor:E="#ffff40",displayValues:b=!0,opacity:M=1,visible:S=!0,userData:C,children:R},D)=>{o.extend({MeshLine:p.MeshLine,MeshLineMaterial:p.MeshLineMaterial});const _=o.useThree((e=>e.invalidate)),L=T.useRef(null),z=T.useRef(null),k=T.useRef(null),F=T.useRef(null),A=T.useRef([0,0,0]);T.useLayoutEffect((()=>{i&&(F.current.updateWorldMatrix(!0,!0),po.copy(F.current.matrixWorld).invert(),yo.makeEmpty(),F.current.traverse((e=>{e.geometry&&(e.geometry.boundingBox||e.geometry.computeBoundingBox(),vo.copy(e.matrixWorld).premultiply(po),wo.copy(e.geometry.boundingBox),wo.applyMatrix4(vo),yo.union(wo))})),Eo.copy(yo.max).add(yo.min).multiplyScalar(.5),bo.copy(yo.max).sub(yo.min).multiplyScalar(.5),Mo.copy(bo).multiply(new P.Vector3(...i)).add(Eo),So.set(...d).add(Mo),k.current.position.copy(So),_())}));const B=T.useMemo((()=>({onDragStart:e=>{uo.copy(z.current.matrix),mo.copy(z.current.matrixWorld),t&&t(e),_()},onDrag:e=>{fo.copy(L.current.matrixWorld),po.copy(fo).invert(),ho.copy(mo).premultiply(e),vo.copy(ho).premultiply(po),go.copy(uo).invert(),xo.copy(vo).multiply(go),a&&z.current.matrix.copy(vo),r&&r(vo,xo,ho,e),_()},onDragEnd:()=>{n&&n(),_()},translation:A,translationLimits:g,rotationLimits:x,axisColors:w,hoveredColor:E,opacity:M,scale:f,lineWidth:h,fixed:v,displayValues:b,depthTest:y,userData:C})),[t,r,n,A,g,x,y,f,h,v,...w,E,M,b,C,a]),U=new P.Vector3;return o.useFrame((e=>{if(v){const o=lo(k.current.getWorldPosition(U),f,e.camera,e.size);var t,r,n;if(k.current)(null==(t=k.current)?void 0:t.scale.x)===o&&(null==(r=k.current)?void 0:r.scale.y)===o&&(null==(n=k.current)?void 0:n.scale.z)===o||(k.current.scale.setScalar(o),e.invalidate())}})),T.useImperativeHandle(D,(()=>z.current),[]),T.createElement(On.Provider,{value:B},T.createElement("group",{ref:L},T.createElement("group",{ref:z,matrix:e,matrixAutoUpdate:!1},T.createElement("group",{visible:S,ref:k,position:d,rotation:m},!s&&u[0]&&T.createElement(Hn,{axis:0,direction:To}),!s&&u[1]&&T.createElement(Hn,{axis:1,direction:Co}),!s&&u[2]&&T.createElement(Hn,{axis:2,direction:Po}),!c&&u[0]&&u[1]&&T.createElement(Zn,{axis:2,dir1:To,dir2:Co}),!c&&u[0]&&u[2]&&T.createElement(Zn,{axis:1,dir1:Po,dir2:To}),!c&&u[2]&&u[1]&&T.createElement(Zn,{axis:0,dir1:Co,dir2:Po}),!l&&u[0]&&u[1]&&T.createElement(oo,{axis:2,dir1:To,dir2:Co}),!l&&u[0]&&u[2]&&T.createElement(oo,{axis:1,dir1:Po,dir2:To}),!l&&u[2]&&u[1]&&T.createElement(oo,{axis:0,dir1:Co,dir2:Po})),T.createElement("group",{ref:F},R))))}));exports.AccumulativeShadows=_r,exports.AdaptiveDpr=function({pixelated:e}){const t=o.useThree((e=>e.gl)),r=o.useThree((e=>e.internal.active)),n=o.useThree((e=>e.performance.current)),a=o.useThree((e=>e.viewport.initialDpr)),i=o.useThree((e=>e.setDpr));return T.useEffect((()=>{const n=t.domElement;return()=>{r&&i(a),e&&n&&(n.style.imageRendering="auto")}}),[]),T.useEffect((()=>{i(n*a),e&&t.domElement&&(t.domElement.style.imageRendering=1===n?"auto":"pixelated")}),[n]),null},exports.AdaptiveEvents=function(){const e=o.useThree((e=>e.get)),t=o.useThree((e=>e.setEvents)),r=o.useThree((e=>e.performance.current));return T.useEffect((()=>{const r=e().events.enabled;return()=>t({enabled:r})}),[]),T.useEffect((()=>t({enabled:1===r})),[r]),null},exports.ArcballControls=Ne,exports.BBAnchor=({anchor:e,...t})=>{const r=T.useRef(null),n=T.useRef(null);return T.useEffect((()=>{var e,t;null!=(e=r.current)&&null!=(t=e.parent)&&t.parent&&(n.current=r.current.parent,r.current.parent.parent.add(r.current))}),[]),o.useFrame((()=>{n.current&&(Ct.setFromObject(n.current),Ct.getSize(Pt),r.current.position.set(n.current.position.x+Pt.x*e[0]/2,n.current.position.y+Pt.y*e[1]/2,n.current.position.z+Pt.z*e[2]/2))})),T.createElement("group",S.default({ref:r},t))},exports.Backdrop=function({children:e,floor:t=.25,segments:r=20,receiveShadow:n,...o}){const a=T.useRef(null);return T.useLayoutEffect((()=>{let e=0;const n=r/r/2,o=a.current.attributes.position;for(let a=0;a<r+1;a++)for(let i=0;i<r+1;i++)o.setXYZ(e++,a/r-n+(0===a?-t:0),i/r-n,Tr(a/r));o.needsUpdate=!0,a.current.computeVertexNormals()}),[r,t]),T.createElement("group",o,T.createElement("mesh",{receiveShadow:n,rotation:[-Math.PI/2,0,Math.PI/2]},T.createElement("planeGeometry",{ref:a,args:[1,1,r,r]}),e))},exports.BakeShadows=function(){const e=o.useThree((e=>e.gl));return t.useEffect((()=>(e.shadowMap.autoUpdate=!1,e.shadowMap.needsUpdate=!0,()=>{e.shadowMap.autoUpdate=e.shadowMap.needsUpdate=!0})),[e.shadowMap]),null},exports.Billboard=ne,exports.Bounds=function({children:e,damping:t=6,fit:r,clip:n,observe:a,margin:i=1.2,eps:s=.01,onFit:c}){const l=T.useRef(null),{camera:u,invalidate:d,size:m,controls:f}=o.useThree(),p=f,h=T.useRef(c);function v(e,t){return Math.abs(e.x-t.x)<s&&Math.abs(e.y-t.y)<s&&Math.abs(e.z-t.z)<s}function g(e,t,r,n){e.x=P.MathUtils.damp(e.x,t.x,r,n),e.y=P.MathUtils.damp(e.y,t.y,r,n),e.z=P.MathUtils.damp(e.z,t.z,r,n)}h.current=c;const[x]=T.useState((()=>({animating:!1,focus:new P.Vector3,camera:new P.Vector3,zoom:1}))),[y]=T.useState((()=>({focus:new P.Vector3,camera:new P.Vector3,zoom:1}))),[w]=T.useState((()=>new P.Box3)),E=T.useMemo((()=>{function e(){const e=w.getSize(new P.Vector3),t=w.getCenter(new P.Vector3),r=Math.max(e.x,e.y,e.z),n=dr(u)?4*r:r/(2*Math.atan(Math.PI*u.fov/360)),o=dr(u)?4*r:n/u.aspect,a=i*Math.max(n,o);return{box:w,size:e,center:t,distance:a}}return{getSize:e,refresh(t){if((r=t)&&r.isBox3)w.copy(t);else{const e=t||l.current;e.updateWorldMatrix(!0,!0),w.setFromObject(e)}var r;if(w.isEmpty()){const e=u.position.length()||10;w.setFromCenterAndSize(new P.Vector3,new P.Vector3(e,e,e))}if("OrthographicTrackballControls"===(null==p?void 0:p.constructor.name)){const{distance:t}=e(),r=u.position.clone().sub(p.target).normalize().multiplyScalar(t),n=p.target.clone().add(r);u.position.copy(n)}return this},clip(){const{distance:t}=e();return p&&(p.maxDistance=10*t),u.near=t/100,u.far=100*t,u.updateProjectionMatrix(),p&&p.update(),d(),this},fit(){x.camera.copy(u.position),p&&x.focus.copy(p.target);const{center:r,distance:n}=e(),o=r.clone().sub(u.position).normalize().multiplyScalar(n);if(y.camera.copy(r).sub(o),y.focus.copy(r),dr(u)){x.zoom=u.zoom;let e=0,n=0;const o=[new P.Vector3(w.min.x,w.min.y,w.min.z),new P.Vector3(w.min.x,w.max.y,w.min.z),new P.Vector3(w.min.x,w.min.y,w.max.z),new P.Vector3(w.min.x,w.max.y,w.max.z),new P.Vector3(w.max.x,w.max.y,w.max.z),new P.Vector3(w.max.x,w.max.y,w.min.z),new P.Vector3(w.max.x,w.min.y,w.max.z),new P.Vector3(w.max.x,w.min.y,w.min.z)];r.applyMatrix4(u.matrixWorldInverse);for(const t of o)t.applyMatrix4(u.matrixWorldInverse),e=Math.max(e,Math.abs(t.y-r.y)),n=Math.max(n,Math.abs(t.x-r.x));e*=2,n*=2;const a=(u.top-u.bottom)/e,s=(u.right-u.left)/n;y.zoom=Math.min(a,s)/i,t||(u.zoom=y.zoom,u.updateProjectionMatrix())}return t?x.animating=!0:(u.position.copy(y.camera),u.lookAt(y.focus),p&&(p.target.copy(y.focus),p.update())),h.current&&h.current(this.getSize()),d(),this}}}),[w,u,p,i,t,d]);T.useLayoutEffect((()=>{if(p){const e=()=>x.animating=!1;return p.addEventListener("start",e),()=>p.removeEventListener("start",e)}}),[p]);const b=T.useRef(0);return T.useLayoutEffect((()=>{(a||0==b.current++)&&(E.refresh(),r&&E.fit(),n&&E.clip())}),[m,n,r,a,u,p]),o.useFrame(((e,r)=>{if(x.animating){if(g(x.focus,y.focus,t,r),g(x.camera,y.camera,t,r),x.zoom=P.MathUtils.damp(x.zoom,y.zoom,t,r),u.position.copy(x.camera),dr(u)&&(u.zoom=x.zoom,u.updateProjectionMatrix()),p?(p.target.copy(x.focus),p.update()):u.lookAt(x.focus),d(),dr(u)&&!(Math.abs(x.zoom-y.zoom)<s))return;if(!dr(u)&&!v(x.camera,y.camera))return;if(p&&!v(x.focus,y.focus))return;x.animating=!1}})),T.createElement("group",{ref:l},T.createElement(mr.Provider,{value:E},e))},exports.Box=Wt,exports.CameraShake=fr,exports.Capsule=ar,exports.CatmullRomLine=ce,exports.Center=ur,exports.Circle=Nt,exports.Clone=Re,exports.Cloud=function({opacity:e=.5,speed:t=.4,width:r=10,depth:n=1.5,segments:a=20,texture:i="https://rawcdn.githack.com/pmndrs/drei-assets/9225a9f1fbd449d9411125c2f419b843d0308c9f/cloud.png",color:s="#ffffff",depthTest:c=!0,...l}){const u=o.useThree((e=>e.gl)),d=T.useRef(),m=ve(i),f=T.useMemo((()=>[...new Array(a)].map(((e,n)=>({x:r/2-Math.random()*r,y:r/2-Math.random()*r,scale:.4+Math.sin((n+1)/a*Math.PI)*(10*(.2+Math.random())),density:Math.max(.2,Math.random()),rotation:Math.max(.002,.005*Math.random())*t})))),[r,a,t]);return o.useFrame((e=>{var t;return null==(t=d.current)?void 0:t.children.forEach(((t,r)=>{t.children[0].rotation.z+=f[r].rotation,t.children[0].scale.setScalar(f[r].scale+(1+Math.sin(e.clock.getElapsedTime()/10))/2*r/10)}))})),T.createElement("group",l,T.createElement("group",{position:[0,0,a/2*n],ref:d},f.map((({x:t,y:r,scale:o,density:a},i)=>T.createElement(ne,{key:i,position:[t,r,-i*n]},T.createElement(qt,{scale:o,rotation:[0,0,0]},T.createElement("meshStandardMaterial",{map:m,"map-encoding":u.outputEncoding,transparent:!0,opacity:o/6*a*e,depthTest:c,color:s})))))))},exports.ComputedAttribute=({compute:e,name:t,...r})=>{const[o]=T.useState((()=>new n.BufferAttribute(new Float32Array(0),1))),a=T.useRef(null);return T.useLayoutEffect((()=>{if(a.current){var t;const r=null!==(t=a.current.parent)&&void 0!==t?t:a.current.__r3f.parent,n=e(r);a.current.copy(n)}}),[e]),T.createElement("primitive",S.default({ref:a,object:o,attach:`attributes-${t}`},r))},exports.Cone=Gt,exports.ContactShadows=Mr,exports.CubeCamera=function({children:e,fog:t,frames:r=1/0,resolution:a=256,near:i=.1,far:s=1e3,envMap:c,...l}){const u=T.useRef(),[d,m]=T.useState(null),f=o.useThree((({scene:e})=>e)),p=o.useThree((({gl:e})=>e)),h=T.useMemo((()=>{const e=new n.WebGLCubeRenderTarget(a);return e.texture.encoding=p.outputEncoding,e.texture.type=n.HalfFloatType,e}),[a]);let v,g,x=0;return o.useFrame((()=>{d&&u.current&&(r===1/0||x<r)&&(u.current.visible=!1,v=f.fog,g=f.background,f.background=c||g,f.fog=t||v,d.update(p,f),f.fog=v,f.background=g,u.current.visible=!0,x++)})),T.createElement("group",l,T.createElement("cubeCamera",{ref:m,args:[i,s,h]}),T.createElement("group",{ref:u},e(h.texture)))},exports.CubicBezierLine=se,exports.CurveModifier=Rt,exports.CycleRaycast=function({onChanged:e,portal:t,preventDefault:r=!0,scroll:n=!0,keyCode:a=9}){const i=T.useRef(0),s=o.useThree((e=>e.setEvents)),c=o.useThree((e=>e.get)),l=o.useThree((e=>e.gl));return T.useEffect((()=>{var o;let u,d=[];const m=c().events.filter,f=null!==(o=null==t?void 0:t.current)&&void 0!==o?o:l.domElement.parentNode,p=()=>f&&e&&e(d,Math.round(i.current)%d.length);s({filter:(e,t)=>{let r=[...e];r.length===d.length&&d.every((e=>r.map((e=>e.object.uuid)).includes(e.object.uuid)))||(i.current=0,d=r,p()),m&&(r=m(r,t));for(let e=0;e<Math.round(i.current)%r.length;e++){const e=r.shift();r=[...r,e]}return r}});const h=e=>{var t,r;i.current=e(i.current),null==(t=c().events.handlers)||t.onPointerCancel(void 0),null==(r=c().events.handlers)||r.onPointerMove(u),p()},v=e=>{(e.keyCode||e.which===a)&&(r&&e.preventDefault(),d.length>1&&h((e=>e+1)))},g=e=>{r&&e.preventDefault();let t=0;e||(e=window.event),e.wheelDelta?t=e.wheelDelta/120:e.detail&&(t=-e.detail/3),d.length>1&&h((e=>Math.abs(e-t)))},x=e=>u=e;return document.addEventListener("pointermove",x,{passive:!0}),n&&document.addEventListener("wheel",g),void 0!==a&&document.addEventListener("keydown",v),()=>{s({filter:m}),void 0!==a&&document.removeEventListener("keydown",v),n&&document.removeEventListener("wheel",g),document.removeEventListener("pointermove",x)}}),[l,c,s,r,n,a]),null},exports.Cylinder=Ht,exports.Decal=function({debug:e,mesh:t,children:r,position:n,rotation:a,scale:i,...s}){const c=T.useRef(null),l=T.useRef(null);return T.useLayoutEffect((()=>{const e=(null==t?void 0:t.current)||c.current.parent,r=c.current;if(!(e instanceof P.Mesh))throw new Error('Decal must have a Mesh as parent or specify its "mesh" prop');const s={position:new P.Vector3,rotation:new P.Euler,scale:new P.Vector3(1,1,1)};if(e){o.applyProps(s,{position:n,scale:i});const t=e.matrixWorld.clone();if(e.matrixWorld.identity(),a&&"number"!=typeof a)o.applyProps(s,{rotation:a});else{const t=new P.Object3D;t.position.copy(s.position),t.lookAt(e.position),"number"==typeof a&&t.rotateZ(a),o.applyProps(s,{rotation:t.rotation})}return r.geometry=new u.DecalGeometry(e,s.position,s.rotation,s.scale),l.current&&o.applyProps(l.current,s),e.matrixWorld=t,()=>{r.geometry.dispose()}}}),[t,...ke(n),...ke(i),...ke(a)]),T.createElement("mesh",{ref:c},r||T.createElement("meshStandardMaterial",S.default({transparent:!0,polygonOffset:!0,polygonOffsetFactor:-10},s)),e&&T.createElement("mesh",{ref:l},T.createElement("boxGeometry",null),T.createElement("meshNormalMaterial",{wireframe:!0}),T.createElement("axesHelper",null)))},exports.Detailed=_n,exports.DeviceOrientationControls=Ve,exports.Dodecahedron=rr,exports.Edges=function({userData:e,children:t,geometry:r,threshold:n=15,color:o="black",...a}){const i=T.useRef(null);return T.useLayoutEffect((()=>{const e=i.current.parent;if(e){const t=r||e.geometry;t===i.current.userData.currentGeom&&n===i.current.userData.currentThreshold||(i.current.userData.currentGeom=t,i.current.userData.currentThreshold=n,i.current.geometry=new P.EdgesGeometry(t,n))}})),T.createElement("lineSegments",S.default({ref:i,raycast:()=>null},a),t||T.createElement("lineBasicMaterial",{color:o}))},exports.Effects=fe,exports.Environment=br,exports.EnvironmentCube=yr,exports.EnvironmentMap=gr,exports.EnvironmentPortal=wr,exports.Extrude=nr,exports.FirstPersonControls=$e,exports.Float=pr,exports.FlyControls=Ie,exports.GizmoHelper=({alignment:e="bottom-right",margin:t=[80,80],renderPriority:r=0,autoClear:a=!0,onUpdate:i,onTarget:s,children:c})=>{const l=o.useThree((({size:e})=>e)),u=o.useThree((({camera:e})=>e)),d=o.useThree((({controls:e})=>e)),m=o.useThree((({gl:e})=>e)),f=o.useThree((({scene:e})=>e)),p=o.useThree((({invalidate:e})=>e)),h=T.useRef(),v=T.useRef(),g=T.useRef(null),[x]=T.useState((()=>new n.Scene)),y=T.useRef(!1),w=T.useRef(0),E=T.useRef(new n.Vector3(0,0,0)),b=T.useRef(new n.Vector3(0,0,0));T.useEffect((()=>{b.current.copy(u.up)}),[u]);const M=T.useCallback((e=>{y.current=!0,(d||s)&&(E.current=(null==d?void 0:d.target)||(null==s?void 0:s())),w.current=u.position.distanceTo(tt),Je.copy(u.quaternion),rt.copy(e).multiplyScalar(w.current).add(tt),Ke.lookAt(rt),et.copy(Ke.quaternion),p()}),[d,u,s,p]);T.useEffect((()=>(f.background&&(h.current=f.background,f.background=null,x.background=h.current),()=>{h.current&&(f.background=h.current)})),[]),o.useFrame(((e,t)=>{if(g.current&&v.current){var r;if(y.current)if(Je.angleTo(et)<.01)y.current=!1,"minPolarAngle"in d&&u.up.copy(b.current);else{const e=t*Ye;Je.rotateTowards(et,e),u.position.set(0,0,1).applyQuaternion(Je).multiplyScalar(w.current).add(E.current),u.up.set(0,1,0).applyQuaternion(Je).normalize(),u.quaternion.copy(Je),i?i():d&&d.update(),p()}Qe.copy(u.matrix).invert(),null==(r=v.current)||r.quaternion.setFromRotationMatrix(Qe),a&&(m.autoClear=!1),m.clearDepth(),m.render(x,g.current)}}),r);const S=qe(g),C=T.useMemo((()=>({tweenCamera:M,raycast:S})),[M]),[P,R]=t,D=e.endsWith("-center")?0:e.endsWith("-left")?-l.width/2+P:l.width/2-P,_=e.startsWith("center-")?0:e.startsWith("top-")?l.height/2-R:-l.height/2+R;return o.createPortal(T.createElement(Xe.Provider,{value:C},T.createElement(Be,{ref:g,position:[0,0,200]}),T.createElement("group",{ref:v,position:[D,_,0]},c)),x)},exports.GizmoViewcube=e=>T.createElement("group",{scale:[60,60,60]},T.createElement(pt,e),dt.map(((t,r)=>T.createElement(ht,S.default({key:r,position:t,dimensions:mt[r]},e)))),lt.map(((t,r)=>T.createElement(ht,S.default({key:r,position:t,dimensions:ut},e)))),T.createElement("ambientLight",{intensity:.5}),T.createElement("pointLight",{position:[10,10,10],intensity:.5})),exports.GizmoViewport=({hideNegativeAxes:e,hideAxisHeads:t,disabled:r,font:n="18px Inter var, Arial, sans-serif",axisColors:o=["#ff2060","#20df80","#2080ff"],axisHeadScale:a=1,axisScale:i,labels:s=["X","Y","Z"],labelColor:c="#000",onClick:l,...u})=>{const[d,m,f]=o,{tweenCamera:p,raycast:h}=Ze(),v={font:n,disabled:r,labelColor:c,raycast:h,onClick:l,axisHeadScale:a,onPointerDown:r?void 0:e=>{p(e.object.position),e.stopPropagation()}};return T.createElement("group",S.default({scale:40},u),T.createElement(vt,{color:d,rotation:[0,0,0],scale:i}),T.createElement(vt,{color:m,rotation:[0,0,Math.PI/2],scale:i}),T.createElement(vt,{color:f,rotation:[0,-Math.PI/2,0],scale:i}),!t&&T.createElement(T.Fragment,null,T.createElement(gt,S.default({arcStyle:d,position:[1,0,0],label:s[0]},v)),T.createElement(gt,S.default({arcStyle:m,position:[0,1,0],label:s[1]},v)),T.createElement(gt,S.default({arcStyle:f,position:[0,0,1],label:s[2]},v)),!e&&T.createElement(T.Fragment,null,T.createElement(gt,S.default({arcStyle:d,position:[-1,0,0]},v)),T.createElement(gt,S.default({arcStyle:m,position:[0,-1,0]},v)),T.createElement(gt,S.default({arcStyle:f,position:[0,0,-1]},v)))),T.createElement("ambientLight",{intensity:.5}),T.createElement("pointLight",{position:[10,10,10],intensity:.5}))},exports.GradientTexture=function({stops:e,colors:t,size:r=1024,...n}){const a=o.useThree((e=>e.gl)),i=T.useMemo((()=>{const n=document.createElement("canvas"),o=n.getContext("2d");n.width=16,n.height=r;const a=o.createLinearGradient(0,0,0,r);let i=e.length;for(;i--;)a.addColorStop(e[i],t[i]);o.fillStyle=a,o.fillRect(0,0,16,r);const s=new P.Texture(n);return s.needsUpdate=!0,s}),[e]);return T.useEffect((()=>()=>{i.dispose()}),[i]),T.createElement("primitive",S.default({object:i,attach:"map",encoding:a.outputEncoding},n))},exports.Html=H,exports.Icosahedron=er,exports.Image=Ee,exports.Instance=bn,exports.Instances=Mn,exports.IsObject=he,exports.KeyboardControls=function({map:e,children:t,onChange:r,domElement:n}){const o=e.map((e=>e.name+e.keys)).join("-"),a=T.useMemo((()=>R.default(l.subscribeWithSelector((()=>e.reduce(((e,t)=>({...e,[t.name]:!1})),{}))))),[o]),i=T.useMemo((()=>[a.subscribe,a.getState,a]),[o]),s=a.setState;return T.useEffect((()=>{const t=e.map((({name:e,keys:t,up:n})=>({keys:t,up:n,fn:t=>{s({[e]:t}),r&&r(e,t,i[2]())}}))).reduce(((e,{keys:t,fn:r,up:n=!0})=>(t.forEach((t=>e[t]={fn:r,pressed:!1,up:n})),e)),{}),o=({key:e,code:r})=>{const n=t[e]||t[r];if(!n)return;const{fn:o,pressed:a,up:i}=n;n.pressed=!0,!i&&a||o(!0)},a=({key:e,code:r})=>{const n=t[e]||t[r];if(!n)return;const{fn:o,up:a}=n;n.pressed=!1,a&&o(!1)},c=n||window;return c.addEventListener("keydown",o,{passive:!0}),c.addEventListener("keyup",a,{passive:!0}),()=>{c.removeEventListener("keydown",o),c.removeEventListener("keyup",a)}}),[n,o]),T.createElement(te.Provider,{value:i,children:t})},exports.Lathe=or,exports.Lightformer=Ur,exports.Line=oe,exports.Loader=function({containerStyles:e,innerStyles:t,barStyles:r,dataStyles:n,dataInterpolation:o=X,initialState:a=(e=>e)}){const{active:i,progress:s}=q(),c=T.useRef(0),l=T.useRef(0),u=T.useRef(null),[d,m]=T.useState(a(i));T.useEffect((()=>{let e;return i!==d&&(e=setTimeout((()=>m(i)),300)),()=>clearTimeout(e)}),[d,i]);const f=T.useCallback((()=>{u.current&&(c.current+=(s-c.current)/2,(c.current>.95*s||100===s)&&(c.current=s),u.current.innerText=o(c.current),c.current<s&&(l.current=requestAnimationFrame(f)))}),[o,s]);return T.useEffect((()=>(f(),()=>cancelAnimationFrame(l.current))),[f]),d?T.createElement("div",{style:{...Z.container,opacity:i?1:0,...e}},T.createElement("div",null,T.createElement("div",{style:{...Z.inner,...t}},T.createElement("div",{style:{...Z.bar,transform:`scaleX(${s/100})`,...r}}),T.createElement("span",{ref:u,style:{...Z.data,...n}})))):null},exports.MapControls=Oe,exports.MarchingCube=Le,exports.MarchingCubes=_e,exports.MarchingPlane=ze,exports.Mask=function({id:e=1,children:t,colorWrite:r=!1,depthWrite:n=!1,...o}){const a=T.useMemo((()=>({colorWrite:r,depthWrite:n,stencilWrite:!0,stencilRef:e,stencilFunc:P.AlwaysStencilFunc,stencilFail:P.ReplaceStencilOp,stencilZFail:P.ReplaceStencilOp,stencilZPass:P.ReplaceStencilOp})),[e,r,n]);return T.createElement("mesh",S.default({renderOrder:-e},o),T.createElement("meshBasicMaterial",a),"function"==typeof t?t(a):t)},exports.Merged=Sn,exports.MeshDistortMaterial=_t,exports.MeshReflectorMaterial=Bt,exports.MeshRefractionMaterial=function({aberrationStrength:e=0,fastChroma:r=!0,envMap:n,...a}){o.extend({MeshRefractionMaterial:Ut});const i=t.useRef(),{size:s}=o.useThree(),c=t.useMemo((()=>{var t,o;const a={},i=(s=n)&&s.isCubeTexture;var s;const c=(null!==(t=i?null==(o=n.image[0])?void 0:o.width:n.image.width)&&void 0!==t?t:1024)/4,l=Math.floor(Math.log2(c)),u=Math.pow(2,l),d=3*Math.max(u,112),m=4*u;return i&&(a.ENVMAP_TYPE_CUBEM=""),a.CUBEUV_TEXEL_WIDTH=""+1/d,a.CUBEUV_TEXEL_HEIGHT=""+1/m,a.CUBEUV_MAX_MIP=`${l}.0`,e>0&&(a.CHROMATIC_ABERRATIONS=""),r&&(a.FAST_CHROMA=""),a}),[e,r]);return t.useLayoutEffect((()=>{var e,t,r;const n=null==(e=i.current)||null==(t=e.__r3f)||null==(r=t.parent)?void 0:r.geometry;n&&i.current.bvh.updateFrom(new y.MeshBVH(n.toNonIndexed(),{lazyGeneration:!1,strategy:y.SAH}))}),[]),T.createElement("meshRefractionMaterial",S.default({key:JSON.stringify(c),defines:c,ref:i,resolution:[s.width,s.height],aberrationStrength:e,envMap:n},a))},exports.MeshWobbleMaterial=zt,exports.Octahedron=tr,exports.OrbitControls=je,exports.OrthographicCamera=Be,exports.PerformanceMonitor=function({iterations:e=10,ms:r=250,threshold:n=.75,step:a=.1,factor:i=.5,flipflops:s=1/0,bounds:c=(e=>e>100?[60,100]:[40,60]),onIncline:l,onDecline:u,onChange:d,onFallback:m,children:f}){const p=Math.pow(10,0),[h,v]=t.useState((()=>({fps:0,index:0,factor:i,flipped:0,refreshrate:0,fallback:!1,frames:[],averages:[],subscriptions:new Map,subscribe:e=>{const t=Symbol();return h.subscriptions.set(t,e.current),()=>{h.subscriptions.delete(t)}}})));let g=0;return o.useFrame((()=>{const{frames:t,averages:o}=h;if(!h.fallback&&o.length<e){t.push(performance.now());const i=t[t.length-1]-t[0];if(i>=r){if(h.fps=Math.round(t.length/i*1e3*p)/p,h.refreshrate=Math.max(h.refreshrate,h.fps),o[h.index++%e]=h.fps,o.length===e){const[t,r]=c(h.refreshrate),i=o.filter((e=>e>=r)),f=o.filter((e=>e<t));i.length>e*n&&(h.factor=Math.min(1,h.factor+a),h.flipped++,l&&l(h),h.subscriptions.forEach((e=>e.onIncline&&e.onIncline(h)))),f.length>e*n&&(h.factor=Math.max(0,h.factor-a),h.flipped++,u&&u(h),h.subscriptions.forEach((e=>e.onDecline&&e.onDecline(h)))),g!==h.factor&&(g=h.factor,d&&d(h),h.subscriptions.forEach((e=>e.onChange&&e.onChange(h)))),h.flipped>s&&!h.fallback&&(h.fallback=!0,m&&m(h),h.subscriptions.forEach((e=>e.onFallback&&e.onFallback(h)))),h.averages=[]}h.frames=[]}}})),T.createElement(An.Provider,{value:h},f)},exports.PerspectiveCamera=Ue,exports.PivotControls=Ro,exports.Plane=qt,exports.Point=sn,exports.PointMaterial=It,exports.PointMaterialImpl=Vt,exports.PointerLockControls=He,exports.Points=ln,exports.PointsBuffer=cn,exports.Polyhedron=Jt,exports.PositionPoint=Jr,exports.PositionalAudio=le,exports.Preload=function({all:e,scene:t,camera:r}){const a=o.useThree((({gl:e})=>e)),i=o.useThree((({camera:e})=>e)),s=o.useThree((({scene:e})=>e));return T.useLayoutEffect((()=>{const o=[];e&&(t||s).traverse((e=>{!1===e.visible&&(o.push(e),e.visible=!0)})),a.compile(t||s,r||i);const c=new n.WebGLCubeRenderTarget(128);new n.CubeCamera(.01,1e5,c).update(a,t||s),c.dispose(),o.forEach((e=>e.visible=!1))}),[]),null},exports.PresentationControls=function({enabled:e=!0,snap:t,global:r,cursor:a=!0,children:i,speed:l=1,rotation:u=[0,0,0],zoom:d=1,polar:m=[0,Math.PI/2],azimuth:f=[-1/0,1/0],config:p={mass:1,tension:170,friction:26}}){const{size:h,gl:v}=o.useThree(),g=T.useMemo((()=>[u[0]+m[0],u[0]+m[1]]),[u[0],m[0],m[1]]),x=T.useMemo((()=>[u[1]+f[0],u[1]+f[1]]),[u[1],f[0],f[1]]),y=T.useMemo((()=>[n.MathUtils.clamp(u[0],...g),n.MathUtils.clamp(u[1],...x),u[2]]),[u[0],u[1],u[2],g,x]),[w,E]=s.useSpring((()=>({scale:1,rotation:y,config:p})));T.useEffect((()=>{E.start({scale:1,rotation:y,config:p})}),[y]),T.useEffect((()=>(r&&a&&e&&(v.domElement.style.cursor="grab"),()=>{v.domElement.style.cursor="default"})),[r,a,v.domElement,e]);const b=c.useGesture({onHover:({last:t})=>{a&&!r&&e&&(v.domElement.style.cursor=t?"auto":"grab")},onDrag:({down:r,delta:[o,i],memo:[s,c]=w.rotation.animation.to||y})=>{if(!e)return[i,o];a&&(v.domElement.style.cursor=r?"grabbing":"grab"),o=n.MathUtils.clamp(c+o/h.width*Math.PI*l,...x),i=n.MathUtils.clamp(s+i/h.height*Math.PI*l,...g);const u=t&&!r&&"boolean"!=typeof t?t:p;return E.start({scale:r&&i>g[1]/2?d:1,rotation:t&&!r?y:[i,o,0],config:e=>"scale"===e?{...u,friction:3*u.friction}:u}),[i,o]}},{target:r?v.domElement:void 0});return T.createElement(s.a.group,S.default({},null==b?void 0:b(),w),i)},exports.QuadraticBezierLine=ie,exports.RandomizedLight=Lr,exports.Reflector=kr,exports.RenderTexture=Bn,exports.Ring=Qt,exports.RoundedBox=sr,exports.Sampler=function({children:e,weight:t,transform:r,instances:n,mesh:o,count:a=16,...i}){const s=T.useRef(null),c=T.useRef(null),l=T.useRef(null);return T.useEffect((()=>{var e,t;c.current=null!==(e=null==n?void 0:n.current)&&void 0!==e?e:s.current.children.find((e=>e.hasOwnProperty("instanceMatrix"))),l.current=null!==(t=null==o?void 0:o.current)&&void 0!==t?t:s.current.children.find((e=>"Mesh"===e.type))}),[e,null==o?void 0:o.current,null==n?void 0:n.current]),Ce(l,a,r,t,c),T.createElement("group",S.default({ref:s},i),e)},exports.ScreenQuad=lr,exports.Scroll=ee,exports.ScrollControls=function({eps:e=1e-5,enabled:t=!0,infinite:r,horizontal:n,pages:a=1,distance:i=1,damping:s=4,style:c={},children:l}){const{get:u,setEvents:d,gl:m,size:f,invalidate:p,events:h}=o.useThree(),[v]=T.useState((()=>document.createElement("div"))),[g]=T.useState((()=>document.createElement("div"))),[x]=T.useState((()=>document.createElement("div"))),y=m.domElement.parentNode,w=T.useRef(0),E=T.useMemo((()=>{const t={el:v,eps:e,fill:g,fixed:x,horizontal:n,damping:s,offset:0,delta:0,scroll:w,pages:a,range(e,t,r=0){const n=e-r,o=n+t+2*r;return this.offset<n?0:this.offset>o?1:(this.offset-n)/(o-n)},curve(e,t,r=0){return Math.sin(this.range(e,t,r)*Math.PI)},visible(e,t,r=0){const n=e-r,o=n+t+2*r;return this.offset>=n&&this.offset<=o}};return t}),[e,s,n,a]);T.useEffect((()=>{v.style.position="absolute",v.style.width="100%",v.style.height="100%",v.style[n?"overflowX":"overflowY"]="auto",v.style[n?"overflowY":"overflowX"]="hidden",v.style.top="0px",v.style.left="0px";for(const e in c)v.style[e]=c[e];x.style.position="sticky",x.style.top="0px",x.style.left="0px",x.style.width="100%",x.style.height="100%",x.style.overflow="hidden",v.appendChild(x),g.style.height=n?"100%":a*i*100+"%",g.style.width=n?a*i*100+"%":"100%",g.style.pointerEvents="none",v.appendChild(g),y.appendChild(v),v[n?"scrollLeft":"scrollTop"]=1;const e=h.connected||m.domElement;requestAnimationFrame((()=>null==h.connect?void 0:h.connect(v)));const t=u().events.compute;return d({compute(e,t){const r=e.clientX-y.offsetLeft,n=e.clientY-y.offsetTop;t.pointer.set(r/t.size.width*2-1,-n/t.size.height*2+1),t.raycaster.setFromCamera(t.pointer,t.camera)}}),()=>{y.removeChild(v),d({compute:t}),null==h.connect||h.connect(e)}}),[a,i,n,v,g,x,y]),T.useEffect((()=>{if(h.connected===v){const e=f[n?"width":"height"],o=v[n?"scrollWidth":"scrollHeight"],a=o-e;let i=0,s=!0,c=!0;const l=()=>{if(t&&!c&&(p(),i=v[n?"scrollLeft":"scrollTop"],w.current=i/a,r)){if(!s)if(i>=a){const e=1-E.offset;v[n?"scrollLeft":"scrollTop"]=1,w.current=E.offset=-e,s=!0}else if(i<=0){const e=1+E.offset;v[n?"scrollLeft":"scrollTop"]=o,w.current=E.offset=e,s=!0}s&&setTimeout((()=>s=!1),40)}};v.addEventListener("scroll",l,{passive:!0}),requestAnimationFrame((()=>c=!1));const u=e=>v.scrollLeft+=e.deltaY/2;return n&&v.addEventListener("wheel",u,{passive:!0}),()=>{v.removeEventListener("scroll",l),n&&v.removeEventListener("wheel",u)}}}),[v,h,f,r,E,p,n,t]);let b=0;return o.useFrame(((t,r)=>{E.offset=P.MathUtils.damp(b=E.offset,w.current,s,r),E.delta=P.MathUtils.damp(E.delta,Math.abs(b-E.offset),s,r),E.delta>e&&p()})),T.createElement(Y.Provider,{value:E},l)},exports.Segment=Dn,exports.SegmentObject=Pn,exports.Segments=Cn,exports.Select=function({box:e,multiple:t,children:r,onChange:n,border:a="1px solid #55aaff",backgroundColor:i="rgba(75, 160, 255, 0.1)",filter:s=(e=>e),...c}){const{setEvents:l,camera:d,raycaster:m,gl:f,controls:p,size:h,get:v}=o.useThree(),[g,x]=T.useState(!1),[y,w]=T.useReducer(((e,{object:t,shift:r})=>void 0===t?[]:Array.isArray(t)?t:r?e.includes(t)?e.filter((e=>e!==t)):[t,...e]:e[0]===t?[]:[t]),[]);T.useEffect((()=>{null==n||n(y)}),[y]);const E=T.useCallback((e=>{e.stopPropagation(),w({object:s([e.object])[0],shift:t&&e.shiftKey})}),[]),b=T.useCallback((e=>!g&&w({})),[g]),M=T.useRef(null);return T.useEffect((()=>{if(!e||!t)return;const r=new u.SelectionBox(d,M.current),n=document.createElement("div");n.style.pointerEvents="none",n.style.border=a,n.style.backgroundColor=i,n.style.position="fixed";const o=new P.Vector2,c=new P.Vector2,m=new P.Vector2,g=v().events.enabled,x=null==p?void 0:p.enabled;let y=!1;function E(e,t){const{offsetX:r,offsetY:n}=e,{width:o,height:a}=h;t.set(r/o*2-1,-n/a*2+1)}function b(e){e.shiftKey&&(!function(e){var t;p&&(p.enabled=!1),l({enabled:!1}),y=!0,null==(t=f.domElement.parentElement)||t.appendChild(n),n.style.left=`${e.clientX}px`,n.style.top=`${e.clientY}px`,n.style.width="0px",n.style.height="0px",o.x=e.clientX,o.y=e.clientY}(e),E(e,r.startPoint))}let S=[];function T(e){if(y){!function(e){m.x=Math.max(o.x,e.clientX),m.y=Math.max(o.y,e.clientY),c.x=Math.min(o.x,e.clientX),c.y=Math.min(o.y,e.clientY),n.style.left=`${c.x}px`,n.style.top=`${c.y}px`,n.style.width=m.x-c.x+"px",n.style.height=m.y-c.y+"px"}(e),E(e,r.endPoint);const t=r.select().sort((e=>e.uuid)).filter((e=>e.isMesh));_.default(t,S)||(S=t,w({object:s(t)}))}}function C(e){var t;y&&y&&(p&&(p.enabled=x),l({enabled:g}),y=!1,null==(t=n.parentElement)||t.removeChild(n))}return document.addEventListener("pointerdown",b,{passive:!0}),document.addEventListener("pointermove",T,{passive:!0,capture:!0}),document.addEventListener("pointerup",C,{passive:!0}),()=>{document.removeEventListener("pointerdown",b),document.removeEventListener("pointermove",T),document.removeEventListener("pointerup",C)}}),[h,m,d,p,f]),T.createElement("group",S.default({ref:M,onClick:E,onPointerOver:()=>x(!0),onPointerOut:()=>x(!1),onPointerMissed:b},c),T.createElement(re.Provider,{value:y},r))},exports.Shadow=Cr,exports.Sky=Ir,exports.Sparkles=Xr,exports.Sphere=$t,exports.SpotLight=Br,exports.Stage=function({children:e,controls:t,shadows:r=!0,adjustCamera:n=!0,environment:a="city",intensity:i=1,preset:s="rembrandt",shadowBias:c=0,contactShadow:l={blur:2,opacity:.5,position:[0,0,0]},...u}){const d=Sr[s],m=o.useThree((e=>e.camera)),f=o.useThree((e=>e.controls)),p=T.useRef(null),h=T.useRef(null),[{radius:v,width:g,height:x},y]=T.useState({radius:0,width:0,height:0});return T.useLayoutEffect((()=>{p.current.position.set(0,0,0),p.current.updateWorldMatrix(!0,!0);const e=(new P.Box3).setFromObject(h.current),t=new P.Vector3,r=new P.Sphere,n=e.max.y-e.min.y,o=e.max.x-e.min.x;e.getCenter(t),e.getBoundingSphere(r),y({radius:r.radius,width:o,height:n}),p.current.position.set(-t.x,-t.y+n/2,-t.z)}),[e]),T.useLayoutEffect((()=>{if(n){const e=v/(x>g?1.5:2.5);m.position.set(0,.5*v,2.5*v),m.near=.1,m.far=Math.max(5e3,4*v),m.lookAt(0,e,0);const r=f||(null==t?void 0:t.current);r&&(r.target.set(0,e,0),r.update())}}),[f,v,x,g,n]),T.createElement("group",u,T.createElement("group",{ref:p},T.createElement("group",{ref:h},e)),l&&T.createElement(Mr,S.default({scale:2*v,far:v/2},l)),a&&T.createElement(br,{preset:a}),T.createElement("ambientLight",{intensity:i/3}),T.createElement("spotLight",{penumbra:1,position:[d.main[0]*v,d.main[1]*v,d.main[2]*v],intensity:2*i,castShadow:r,"shadow-bias":c}),T.createElement("pointLight",{position:[d.fill[0]*v,d.fill[1]*v,d.fill[2]*v],intensity:i}))},exports.Stars=Wr,exports.Stats=function({showPanel:e=0,className:t,parent:r}){const n=function(e,t=[],r){const[n,o]=T.useState();return T.useLayoutEffect((()=>{const t=e();return o(t),Tt(r,t),()=>Tt(r,null)}),t),n}((()=>new k.default),[]);return T.useEffect((()=>{if(n){const a=r&&r.current||document.body;n.showPanel(e),null==a||a.appendChild(n.dom),t&&n.dom.classList.add(...t.split(" ").filter((e=>e)));const i=o.addEffect((()=>n.begin())),s=o.addAfterEffect((()=>n.end()));return()=>{null==a||a.removeChild(n.dom),i(),s()}}}),[r,n,t,e]),null},exports.Svg=Fe,exports.Tetrahedron=Kt,exports.Text=ue,exports.Text3D=me,exports.Torus=Zt,exports.TorusKnot=Yt,exports.TrackballControls=We,exports.Trail=Te,exports.TransformControls=Ge,exports.Tube=Xt,exports.View=({track:e,index:t=1,frames:r=1/0,children:n})=>{const a=T.useRef(null),{size:i,scene:s}=o.useThree(),[c]=T.useState((()=>new P.Scene)),l=T.useCallback(((t,r)=>{if(e.current&&t.target===e.current){const{width:e,height:n,left:o,top:i}=a.current,s=t.clientX-o,c=t.clientY-i;r.pointer.set(s/e*2-1,-c/n*2+1),r.raycaster.setFromCamera(r.pointer,r.camera)}}),[a]),[u,d]=T.useReducer((()=>!0),!1);return T.useEffect((()=>{var t;a.current=null==(t=e.current)?void 0:t.getBoundingClientRect(),d()}),[]),T.createElement(T.Fragment,null,u&&o.createPortal(T.createElement(In,{canvasSize:i,frames:r,scene:s,track:e,rect:a,index:t},n),c,{events:{compute:l,priority:t},size:{width:a.current.width,height:a.current.height}}))},exports.accumulativeContext=Pr,exports.calcPosFromAngles=Vr,exports.calculateScaleFactor=lo,exports.isWebGL2Available=()=>{try{var e=document.createElement("canvas");return!(!window.WebGL2RenderingContext||!e.getContext("webgl2"))}catch(e){return!1}},exports.meshBounds=function(e,t){const r=this.geometry,n=this.material,o=this.matrixWorld;void 0!==n&&(null===r.boundingSphere&&r.computeBoundingSphere(),kn.copy(r.boundingSphere),kn.applyMatrix4(o),!1!==e.ray.intersectsSphere(kn)&&(Ln.copy(o).invert(),zn.copy(e.ray).applyMatrix4(Ln),null!==r.boundingBox&&null===zn.intersectBox(r.boundingBox,Fn)||t.push({distance:Fn.distanceTo(e.ray.origin),point:Fn.clone(),object:this})))},exports.shaderMaterial=pe,exports.softShadows=e=>{if(!Ot){Ot=!0;let t=P.ShaderChunk.shadowmap_pars_fragment;t=t.replace("#ifdef USE_SHADOWMAP","#ifdef USE_SHADOWMAP\n"+(({frustum:e=3.75,size:t=.005,near:r=9.5,samples:n=17,rings:o=11}={})=>`#define LIGHT_WORLD_SIZE ${t}\n#define LIGHT_FRUSTUM_WIDTH ${e}\n#define LIGHT_SIZE_UV (LIGHT_WORLD_SIZE / LIGHT_FRUSTUM_WIDTH)\n#define NEAR_PLANE ${r}\n\n#define NUM_SAMPLES ${n}\n#define NUM_RINGS ${o}\n#define BLOCKER_SEARCH_NUM_SAMPLES NUM_SAMPLES\n#define PCF_NUM_SAMPLES NUM_SAMPLES\n\nvec2 poissonDisk[NUM_SAMPLES];\n\nvoid initPoissonSamples(const in vec2 randomSeed) {\n float ANGLE_STEP = PI2 * float(NUM_RINGS) / float(NUM_SAMPLES);\n float INV_NUM_SAMPLES = 1.0 / float(NUM_SAMPLES);\n float angle = rand(randomSeed) * PI2;\n float radius = INV_NUM_SAMPLES;\n float radiusStep = radius;\n for (int i = 0; i < NUM_SAMPLES; i++) {\n poissonDisk[i] = vec2(cos(angle), sin(angle)) * pow(radius, 0.75);\n radius += radiusStep;\n angle += ANGLE_STEP;\n }\n}\n\nfloat penumbraSize(const in float zReceiver, const in float zBlocker) { // Parallel plane estimation\n return (zReceiver - zBlocker) / zBlocker;\n}\n\nfloat findBlocker(sampler2D shadowMap, const in vec2 uv, const in float zReceiver) {\n float searchRadius = LIGHT_SIZE_UV * (zReceiver - NEAR_PLANE) / zReceiver;\n float blockerDepthSum = 0.0;\n int numBlockers = 0;\n for (int i = 0; i < BLOCKER_SEARCH_NUM_SAMPLES; i++) {\n float shadowMapDepth = unpackRGBAToDepth(texture2D(shadowMap, uv + poissonDisk[i] * searchRadius));\n if (shadowMapDepth < zReceiver) {\n blockerDepthSum += shadowMapDepth;\n numBlockers++;\n }\n }\n if (numBlockers == 0) return -1.0;\n return blockerDepthSum / float(numBlockers);\n}\n\nfloat PCF_Filter(sampler2D shadowMap, vec2 uv, float zReceiver, float filterRadius) {\n float sum = 0.0;\n for (int i = 0; i < PCF_NUM_SAMPLES; i++) {\n float depth = unpackRGBAToDepth(texture2D(shadowMap, uv + poissonDisk[ i ] * filterRadius));\n if (zReceiver <= depth) sum += 1.0;\n }\n for (int i = 0; i < PCF_NUM_SAMPLES; i++) {\n float depth = unpackRGBAToDepth(texture2D(shadowMap, uv + -poissonDisk[ i ].yx * filterRadius));\n if (zReceiver <= depth) sum += 1.0;\n }\n return sum / (2.0 * float(PCF_NUM_SAMPLES));\n}\n\nfloat PCSS(sampler2D shadowMap, vec4 coords) {\n vec2 uv = coords.xy;\n float zReceiver = coords.z; // Assumed to be eye-space z in this code\n initPoissonSamples(uv);\n float avgBlockerDepth = findBlocker(shadowMap, uv, zReceiver);\n if (avgBlockerDepth == -1.0) return 1.0;\n float penumbraRatio = penumbraSize(zReceiver, avgBlockerDepth);\n float filterRadius = penumbraRatio * LIGHT_SIZE_UV * NEAR_PLANE / zReceiver;\n return PCF_Filter(shadowMap, uv, zReceiver, filterRadius);\n}`)({...e})),t=t.replace("#if defined( SHADOWMAP_TYPE_PCF )","\nreturn PCSS(shadowMap, shadowCoord);\n#if defined( SHADOWMAP_TYPE_PCF )"),P.ShaderChunk.shadowmap_pars_fragment=t}},exports.useAnimations=function(e,t){const r=T.useRef(),[a]=T.useState((()=>t?t instanceof n.Object3D?{current:t}:t:r)),[i]=T.useState((()=>new n.AnimationMixer(void 0))),s=T.useRef({}),[c]=T.useState((()=>{const t={};return e.forEach((e=>Object.defineProperty(t,e.name,{enumerable:!0,get(){if(a.current)return s.current[e.name]||(s.current[e.name]=i.clipAction(e,a.current))}}))),{ref:a,clips:e,actions:t,names:e.map((e=>e.name)),mixer:i}}));return o.useFrame(((e,t)=>i.update(t))),T.useEffect((()=>{const e=a.current;return()=>{s.current={},Object.values(c.actions).forEach((t=>{e&&i.uncacheAction(t,e)}))}}),[e]),c},exports.useAspect=function(e,t,r=1){const n=o.useThree((e=>e.viewport)),a=t*(n.aspect>e/t?n.width/e:n.height/t);return[e*(n.aspect>e/t?n.width/e:n.height/t)*r,a*r,1]},exports.useBVH=function(e,t){T.useEffect((()=>{if(e.current){e.current.raycast=y.acceleratedRaycast;const r=e.current.geometry;return r.computeBoundsTree=y.computeBoundsTree,r.disposeBoundsTree=y.disposeBoundsTree,r.computeBoundsTree(t),()=>{r.boundsTree&&r.disposeBoundsTree()}}}),[e,t])},exports.useBounds=function(){return T.useContext(mr)},exports.useBoxProjectedEnv=function(e=new P.Vector3,t=new P.Vector3){const[r]=T.useState((()=>({position:new P.Vector3,size:new P.Vector3})));o.applyProps(r,{position:e,size:t});const n=T.useRef(null),a=T.useMemo((()=>({ref:n,onBeforeCompile:e=>function(e,t,r){e.defines.BOX_PROJECTED_ENV_MAP=!0,e.uniforms.envMapPosition={value:t},e.uniforms.envMapSize={value:r},e.vertexShader=`\n varying vec3 vWorldPosition;\n ${e.vertexShader.replace("#include <worldpos_vertex>","\n#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n #ifdef BOX_PROJECTED_ENV_MAP\n vWorldPosition = worldPosition.xyz;\n #endif\n#endif\n")}`,e.fragmentShader=`\n \n#ifdef BOX_PROJECTED_ENV_MAP\n uniform vec3 envMapSize;\n uniform vec3 envMapPosition;\n varying vec3 vWorldPosition;\n \n vec3 parallaxCorrectNormal( vec3 v, vec3 cubeSize, vec3 cubePos ) {\n vec3 nDir = normalize( v );\n vec3 rbmax = ( .5 * cubeSize + cubePos - vWorldPosition ) / nDir;\n vec3 rbmin = ( -.5 * cubeSize + cubePos - vWorldPosition ) / nDir;\n vec3 rbminmax;\n rbminmax.x = ( nDir.x > 0. ) ? rbmax.x : rbmin.x;\n rbminmax.y = ( nDir.y > 0. ) ? rbmax.y : rbmin.y;\n rbminmax.z = ( nDir.z > 0. ) ? rbmax.z : rbmin.z;\n float correction = min( min( rbminmax.x, rbminmax.y ), rbminmax.z );\n vec3 boxIntersection = vWorldPosition + nDir * correction; \n return boxIntersection - cubePos;\n }\n#endif\n\n ${e.fragmentShader.replace("#include <envmap_physical_pars_fragment>",P.ShaderChunk.envmap_physical_pars_fragment).replace("vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );","vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n \n#ifdef BOX_PROJECTED_ENV_MAP\n worldNormal = parallaxCorrectNormal( worldNormal, envMapSize, envMapPosition );\n#endif\n\n ").replace("reflectVec = inverseTransformDirection( reflectVec, viewMatrix );","reflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n \n#ifdef BOX_PROJECTED_ENV_MAP\n reflectVec = parallaxCorrectNormal( reflectVec, envMapSize, envMapPosition );\n#endif\n\n ")}`}(e,r.position,r.size),customProgramCacheKey:()=>JSON.stringify(r.position.toArray())+JSON.stringify(r.size.toArray())})),[...r.position.toArray(),...r.size.toArray()]);return T.useLayoutEffect((()=>{n.current.needsUpdate=!0}),[r]),a},exports.useCamera=qe,exports.useContextBridge=function(...e){const t=T.useRef([]);return t.current=e.map((e=>T.useContext(e))),T.useMemo((()=>({children:r})=>e.reduceRight(((e,r,n)=>T.createElement(r.Provider,{value:t.current[n],children:e})),r)),[])},exports.useCubeTexture=xt,exports.useCursor=function(e,t="pointer",r="auto"){T.useEffect((()=>{if(e)return document.body.style.cursor=t,()=>{document.body.style.cursor=r}}),[e])},exports.useDepthBuffer=function({size:e=256,frames:t=1/0}={}){const r=o.useThree((e=>e.viewport.dpr)),{width:a,height:i}=o.useThree((e=>e.size)),s=e||a*r,c=e||i*r,l=T.useMemo((()=>{const e=new n.DepthTexture(s,c);return e.format=n.DepthFormat,e.type=n.UnsignedShortType,{depthTexture:e}}),[s,c]);let u=0;const d=Ae(s,c,l);return o.useFrame((e=>{(t===1/0||u<t)&&(e.gl.setRenderTarget(d),e.gl.render(e.scene,e.camera),e.gl.setRenderTarget(null),u++)})),d.depthTexture},exports.useDetectGPU=e=>f.suspend((()=>x.getGPUTier(e)),["useDetectGPU"]),exports.useEnvironment=xr,exports.useFBO=Ae,exports.useFBX=yt,exports.useGLTF=bt,exports.useGizmoContext=Ze,exports.useHelper=function(e,t,...r){const n=T.useRef(),a=o.useThree((e=>e.scene));return T.useEffect((()=>(e&&t&&null!=e&&e.current&&(n.current=new t(e.current,...r),n.current&&a.add(n.current)),!e&&n.current&&a.remove(n.current),()=>{n.current&&a.remove(n.current)})),[a,t,e,...r]),o.useFrame((()=>{var e;null!=(e=n.current)&&e.update&&n.current.update()})),n},exports.useIntersect=function(e){const t=T.useRef(null),r=T.useRef(!1),n=T.useRef(!1),a=T.useRef(e);return T.useLayoutEffect((()=>{a.current=e}),[e]),T.useEffect((()=>{const e=t.current;if(e){const t=o.addEffect((()=>(r.current=!1,!0))),i=e.onBeforeRender;e.onBeforeRender=()=>r.current=!0;const s=o.addAfterEffect((()=>(r.current!==n.current&&(null==a.current||a.current(n.current=r.current)),!0)));return()=>{e.onBeforeRender=i,t(),s()}}}),[]),t},exports.useKTX2=St,exports.useKeyboardControls=function(e){const[t,r,n]=T.useContext(te);return e?n(e):[t,r]},exports.useMask=function(e,t=!1){return{stencilWrite:!0,stencilRef:e,stencilFunc:t?P.NotEqualStencilFunc:P.EqualStencilFunc,stencilFail:P.KeepStencilOp,stencilZFail:P.KeepStencilOp,stencilZPass:P.KeepStencilOp}},exports.useMatcapTexture=function(e=0,t=1024,r){const n=f.suspend((()=>fetch("https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/matcaps.json").then((e=>e.json()))),["matcapList"]),o=n[0],a=T.useMemo((()=>Object.keys(n).length),[]),i=`${T.useMemo((()=>"string"==typeof e?e:"number"==typeof e?n[e]:null),[e])||o}${function(e){switch(e){case 64:return"-64px";case 128:return"-128px";case 256:return"-256px";case 512:return"-512px";default:return""}}(t)}.png`,s=`https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d/${t}/${i}`;return[ve(s,r),s,a]},exports.useNormalTexture=function(e=0,t={},r){const{repeat:o=[1,1],anisotropy:a=1,offset:i=[0,0]}=t,s=f.suspend((()=>fetch("https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/normals/normals.json").then((e=>e.json()))),["normalsList"]),c=T.useMemo((()=>Object.keys(s).length),[]),l=s[0],u=`https://rawcdn.githack.com/pmndrs/drei-assets/7a3104997e1576f83472829815b00880d88b32fb/normals/${s[e]||l}`,d=ve(u,r);return T.useLayoutEffect((()=>{d&&(d.wrapS=d.wrapT=n.RepeatWrapping,d.repeat=new n.Vector2(o[0],o[1]),d.offset=new n.Vector2(i[0],i[1]),d.anisotropy=a)}),[d,a,o,i]),[d,u,c]},exports.usePerformanceMonitor=function({onIncline:e,onDecline:r,onChange:n,onFallback:o}){const a=t.useContext(An),i=t.useRef({onIncline:e,onDecline:r,onChange:n,onFallback:o});t.useLayoutEffect((()=>{i.current.onIncline=e,i.current.onDecline=r,i.current.onChange=n,i.current.onFallback=o}),[e,r,n,o]),t.useLayoutEffect((()=>a.subscribe(i)),[a])},exports.useProgress=q,exports.useScroll=K,exports.useSelect=function(){return T.useContext(re)},exports.useSurfaceSampler=Ce,exports.useTexture=ve,exports.useTrail=Se,exports.useVideoTexture=function(e,r){const{unsuspend:n,start:a,crossOrigin:i,muted:s,loop:c,...l}={unsuspend:"canplay",crossOrigin:"Anonymous",muted:!0,loop:!0,start:!0,...r},u=o.useThree((e=>e.gl)),d=f.suspend((()=>new Promise(((t,r)=>{const o=Object.assign(document.createElement("video"),{src:e,crossOrigin:i,loop:c,muted:s,...l}),a=new P.VideoTexture(o);a.encoding=u.outputEncoding,o.addEventListener(n,(()=>t(a)))}))),[e]);return t.useEffect((()=>{a&&d.image.play()}),[d]),d};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("react-dom/client"),n=require("three"),o=require("@react-three/fiber"),a=require("zustand"),i=require("react-merge-refs"),s=require("@react-spring/three"),c=require("@use-gesture/react"),l=require("zustand/middleware"),u=require("three-stdlib"),d=require("zustand/shallow"),m=require("troika-three-text"),f=require("suspend-react"),p=require("meshline"),h=require("lodash.pick"),v=require("lodash.omit"),g=require("stats.js"),x=require("detect-gpu"),y=require("three-mesh-bvh"),w=require("react-composer"),E=require("lodash.clamp");function b(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function M(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var S=b(e),T=M(t),C=M(r),P=M(n),R=b(a),D=b(i),_=b(d),L=b(h),z=b(v),k=b(g),F=b(w),A=b(E);const B=new n.Vector3,U=new n.Vector3,V=new n.Vector3;function I(e,t,r){const n=B.setFromMatrixPosition(e.matrixWorld);n.project(t);const o=r.width/2,a=r.height/2;return[n.x*o+o,-n.y*a+a]}const O=e=>Math.abs(e)<1e-10?0:e;function j(e,t,r=""){let n="matrix3d(";for(let r=0;16!==r;r++)n+=O(t[r]*e.elements[r])+(15!==r?",":")");return r+n}const W=(N=[1,-1,1,1,1,-1,1,1,1,-1,1,1,1,-1,1,1],e=>j(e,N));var N;const G=(e,t)=>{return j(e,[1/(r=t),1/r,1/r,1,-1/r,-1/r,-1/r,-1,1/r,1/r,1/r,1,1,1,1,1],"translate(-50%,-50%)");var r},H=T.forwardRef((({children:e,eps:t=.001,style:r,className:a,prepend:i,center:s,fullscreen:c,portal:l,distanceFactor:u,sprite:d=!1,transform:m=!1,occlude:f,onOcclude:p,zIndexRange:h=[16777271,0],calculatePosition:v=I,as:g="div",wrapperClass:x,pointerEvents:y="auto",...w},E)=>{const{gl:b,camera:M,scene:P,size:R,raycaster:D,events:_}=o.useThree(),[L]=T.useState((()=>document.createElement(g))),z=T.useRef(),k=T.useRef(null),F=T.useRef(0),A=T.useRef([0,0]),j=T.useRef(null),N=T.useRef(null),H=(null==l?void 0:l.current)||_.connected||b.domElement.parentNode;T.useLayoutEffect((()=>{if(k.current){const e=z.current=C.createRoot(L);if(P.updateMatrixWorld(),m)L.style.cssText="position:absolute;top:0;left:0;pointer-events:none;overflow:hidden;";else{const e=v(k.current,M,R);L.style.cssText=`position:absolute;top:0;left:0;transform:translate3d(${e[0]}px,${e[1]}px,0);transform-origin:0 0;`}return H&&(i?H.prepend(L):H.appendChild(L)),()=>{H&&H.removeChild(L),e.unmount()}}}),[H,m]),T.useLayoutEffect((()=>{x&&(L.className=x)}),[x]);const $=T.useMemo((()=>m?{position:"absolute",top:0,left:0,width:R.width,height:R.height,transformStyle:"preserve-3d",pointerEvents:"none"}:{position:"absolute",transform:s?"translate3d(-50%,-50%,0)":"none",...c&&{top:-R.height/2,left:-R.width/2,width:R.width,height:R.height},...r}),[r,s,c,R,m]),q=T.useMemo((()=>({position:"absolute",pointerEvents:y})),[y]);T.useLayoutEffect((()=>{var t,n;m?null==(t=z.current)||t.render(T.createElement("div",{ref:j,style:$},T.createElement("div",{ref:N,style:q},T.createElement("div",{ref:E,className:a,style:r,children:e})))):null==(n=z.current)||n.render(T.createElement("div",{ref:E,style:$,className:a,children:e}))}));const X=T.useRef(!0);return o.useFrame((()=>{if(k.current){M.updateMatrixWorld(),k.current.updateWorldMatrix(!0,!1);const e=m?A.current:v(k.current,M,R);if(m||Math.abs(F.current-M.zoom)>t||Math.abs(A.current[0]-e[0])>t||Math.abs(A.current[1]-e[1])>t){const t=function(e,t){const r=B.setFromMatrixPosition(e.matrixWorld),n=U.setFromMatrixPosition(t.matrixWorld),o=r.sub(n),a=t.getWorldDirection(V);return o.angleTo(a)>Math.PI/2}(k.current,M);let r=!1;"boolean"==typeof f?!0===f&&(r=[P]):Array.isArray(f)&&(r=f.map((e=>e.current)));const o=X.current;if(r){const e=function(e,t,r,n){const o=B.setFromMatrixPosition(e.matrixWorld),a=o.clone();a.project(t),r.setFromCamera(a,t);const i=r.intersectObjects(n,!0);if(i.length){const e=i[0].distance;return o.distanceTo(r.ray.origin)<e}return!0}(k.current,M,D,r);X.current=e&&!t}else X.current=!t;if(o!==X.current&&(p?p(!X.current):L.style.display=X.current?"block":"none"),L.style.zIndex=`${function(e,t,r){if(t instanceof n.PerspectiveCamera||t instanceof n.OrthographicCamera){const n=B.setFromMatrixPosition(e.matrixWorld),o=U.setFromMatrixPosition(t.matrixWorld),a=n.distanceTo(o),i=(r[1]-r[0])/(t.far-t.near),s=r[1]-i*t.far;return Math.round(i*a+s)}}(k.current,M,h)}`,m){const[e,t]=[R.width/2,R.height/2],r=M.projectionMatrix.elements[5]*t,{isOrthographicCamera:n,top:o,left:a,bottom:i,right:s}=M,c=W(M.matrixWorldInverse),l=n?`scale(${r})translate(${O(-(s+a)/2)}px,${O((o+i)/2)}px)`:`translateZ(${r}px)`;let m=k.current.matrixWorld;d&&(m=M.matrixWorldInverse.clone().transpose().copyPosition(m).scale(k.current.scale),m.elements[3]=m.elements[7]=m.elements[11]=0,m.elements[15]=1),L.style.width=R.width+"px",L.style.height=R.height+"px",L.style.perspective=n?"":`${r}px`,j.current&&N.current&&(j.current.style.transform=`${l}${c}translate(${e}px,${t}px)`,N.current.style.transform=G(m,1/((u||10)/400)))}else{const t=void 0===u?1:function(e,t){if(t instanceof n.OrthographicCamera)return t.zoom;if(t instanceof n.PerspectiveCamera){const r=B.setFromMatrixPosition(e.matrixWorld),n=U.setFromMatrixPosition(t.matrixWorld),o=t.fov*Math.PI/180,a=r.distanceTo(n);return 1/(2*Math.tan(o/2)*a)}return 1}(k.current,M)*u;L.style.transform=`translate3d(${e[0]}px,${e[1]}px,0) scale(${t})`}A.current=e,F.current=M.zoom}}})),T.createElement("group",S.default({},w,{ref:k}))}));let $=0;const q=R.default((e=>(n.DefaultLoadingManager.onStart=(t,r,n)=>{e({active:!0,item:t,loaded:r,total:n,progress:(r-$)/(n-$)*100})},n.DefaultLoadingManager.onLoad=()=>{e({active:!1})},n.DefaultLoadingManager.onError=t=>e((e=>({errors:[...e.errors,t]}))),n.DefaultLoadingManager.onProgress=(t,r,n)=>{r===n&&($=n),e({active:!0,item:t,loaded:r,total:n,progress:(r-$)/(n-$)*100||100})},{errors:[],active:!1,progress:0,item:"",loaded:0,total:0}))),X=e=>`Loading ${e.toFixed(2)}%`;const Z={container:{position:"absolute",top:0,left:0,width:"100%",height:"100%",background:"#171717",display:"flex",alignItems:"center",justifyContent:"center",transition:"opacity 300ms ease",zIndex:1e3},inner:{width:100,height:3,background:"#272727",textAlign:"center"},bar:{height:3,width:"100%",background:"white",transition:"transform 200ms",transformOrigin:"left center"},data:{display:"inline-block",position:"relative",fontVariantNumeric:"tabular-nums",marginTop:"0.8em",color:"#f0f0f0",fontSize:"0.6em",fontFamily:'-apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", "Helvetica Neue", Helvetica, Arial, Roboto, Ubuntu, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"',whiteSpace:"nowrap"}},Y=T.createContext(null);function K(){return T.useContext(Y)}const Q=T.forwardRef((({children:e},t)=>{const r=T.useRef(null),n=K(),{width:a,height:i}=o.useThree((e=>e.viewport));return o.useFrame((()=>{r.current.position.x=n.horizontal?-a*(n.pages-1)*n.offset:0,r.current.position.y=n.horizontal?0:i*(n.pages-1)*n.offset})),T.createElement("group",{ref:D.default([t,r])},e)})),J=T.forwardRef((({children:e,style:t,...r},n)=>{const a=K(),i=T.useRef(null),{width:s,height:c}=o.useThree((e=>e.size)),l=T.useContext(o.context),u=T.useMemo((()=>C.createRoot(a.fixed)),[a.fixed]);return o.useFrame((()=>{a.delta>a.eps&&(i.current.style.transform=`translate3d(${a.horizontal?-s*(a.pages-1)*a.offset:0}px,${a.horizontal?0:c*(a.pages-1)*-a.offset}px,0)`)})),u.render(T.createElement("div",S.default({ref:D.default([n,i]),style:{...t,position:"absolute",top:0,left:0,willChange:"transform"}},r),T.createElement(Y.Provider,{value:a},T.createElement(o.context.Provider,{value:l},e)))),null})),ee=T.forwardRef((({html:e,...t},r)=>{const n=e?J:Q;return T.createElement(n,S.default({ref:r},t))}));const te=T.createContext(null);const re=T.createContext([]);const ne=T.forwardRef((function({follow:e=!0,lockX:t=!1,lockY:r=!1,lockZ:n=!1,...a},i){const s=T.useRef();return o.useFrame((({camera:o})=>{if(!e||!s.current)return;const a=s.current.rotation.clone();s.current.quaternion.copy(o.quaternion),t&&(s.current.rotation.x=a.x),r&&(s.current.rotation.y=a.y),n&&(s.current.rotation.z=a.z)})),T.createElement("group",S.default({ref:D.default([s,i])},a))})),oe=T.forwardRef((function({points:e,color:t="black",vertexColors:r,linewidth:a,lineWidth:i,dashed:s,...c},l){const d=o.useThree((e=>e.size)),[m]=T.useState((()=>new u.Line2)),[f]=T.useState((()=>new u.LineMaterial)),p=T.useMemo((()=>{const t=new u.LineGeometry,o=e.map((e=>{const t=Array.isArray(e);return e instanceof n.Vector3?[e.x,e.y,e.z]:e instanceof n.Vector2?[e.x,e.y,0]:t&&3===e.length?[e[0],e[1],e[2]]:t&&2===e.length?[e[0],e[1],0]:e}));if(t.setPositions(o.flat()),r){const e=r.map((e=>e instanceof n.Color?e.toArray():e));t.setColors(e.flat())}return t}),[e,r]);return T.useLayoutEffect((()=>{m.computeLineDistances()}),[e,m]),T.useLayoutEffect((()=>{s?f.defines.USE_DASH="":delete f.defines.USE_DASH,f.needsUpdate=!0}),[s,f]),T.useEffect((()=>()=>p.dispose()),[p]),T.createElement("primitive",S.default({object:m,ref:l},c),T.createElement("primitive",{object:p,attach:"geometry"}),T.createElement("primitive",S.default({object:f,attach:"material",color:t,vertexColors:Boolean(r),resolution:[d.width,d.height],linewidth:null!=a?a:i,dashed:s},c)))})),ae=new n.Vector3,ie=T.forwardRef((function({start:e=[0,0,0],end:t=[0,0,0],mid:r,segments:o=20,...a},i){const s=T.useRef(null),[c]=T.useState((()=>new n.QuadraticBezierCurve3(void 0,void 0,void 0))),l=T.useCallback(((e,t,r,o=20)=>(e instanceof n.Vector3?c.v0.copy(e):c.v0.set(...e),t instanceof n.Vector3?c.v2.copy(t):c.v2.set(...t),r instanceof n.Vector3?c.v1.copy(r):c.v1.copy(c.v0.clone().add(c.v2.clone().sub(c.v0)).add(ae.set(0,c.v0.y-c.v2.y,0))),c.getPoints(o))),[]);T.useLayoutEffect((()=>{s.current.setPoints=(e,t,r)=>{const n=l(e,t,r);s.current.geometry&&s.current.geometry.setPositions(n.map((e=>e.toArray())).flat())}}),[]);const u=T.useMemo((()=>l(e,t,r,o)),[e,t,r,o]);return T.createElement(oe,S.default({ref:D.default([s,i]),points:u},a))})),se=T.forwardRef((function({start:e,end:t,midA:r,midB:o,segments:a=20,...i},s){const c=T.useMemo((()=>{const i=e instanceof n.Vector3?e:new n.Vector3(...e),s=t instanceof n.Vector3?t:new n.Vector3(...t),c=r instanceof n.Vector3?r:new n.Vector3(...r),l=o instanceof n.Vector3?o:new n.Vector3(...o);return new n.CubicBezierCurve3(i,c,l,s).getPoints(a)}),[e,t,r,o,a]);return T.createElement(oe,S.default({ref:s,points:c},i))})),ce=T.forwardRef((function({points:e,closed:t=!1,curveType:r="centripetal",tension:o=.5,segments:a=20,vertexColors:i,...s},c){const l=T.useMemo((()=>{const a=e.map((e=>e instanceof n.Vector3?e:new n.Vector3(...e)));return new n.CatmullRomCurve3(a,t,r,o)}),[e,t,r,o]),u=T.useMemo((()=>l.getPoints(a)),[l,a]),d=T.useMemo((()=>{if(!i||i.length<2)return;if(i.length===a+1)return i;const e=i.map((e=>e instanceof n.Color?e:new n.Color(...e)));t&&e.push(e[0].clone());const r=[e[0]],o=a/(e.length-1);for(let t=1;t<a;t++){const n=t%o/o,a=Math.floor(t/o);r.push(e[a].clone().lerp(e[a+1],n))}return r.push(e[e.length-1]),r}),[i,a]);return T.createElement(oe,S.default({ref:c,points:u,vertexColors:d},s))})),le=T.forwardRef((({url:e,distance:t=1,loop:r=!0,autoplay:a,...i},s)=>{const c=T.useRef(),l=o.useThree((({camera:e})=>e)),[u]=T.useState((()=>new n.AudioListener)),d=o.useLoader(n.AudioLoader,e);return T.useEffect((()=>{const e=c.current;e&&(e.setBuffer(d),e.setRefDistance(t),e.setLoop(r),a&&!e.isPlaying&&e.play())}),[d,l,t,r]),T.useEffect((()=>{const e=c.current;return l.add(u),()=>{l.remove(u),e&&(e.isPlaying&&e.stop(),e.source&&e.source._connected&&e.disconnect())}}),[]),T.createElement("positionalAudio",S.default({ref:D.default([c,s]),args:[u]},i))})),ue=T.forwardRef((({anchorX:e="center",anchorY:t="middle",font:r,children:n,characters:a,onSync:i,...s},c)=>{const l=o.useThree((({invalidate:e})=>e)),[u]=T.useState((()=>new m.Text)),[d,p]=T.useMemo((()=>{const e=[];let t="";return T.Children.forEach(n,(r=>{"string"==typeof r||"number"==typeof r?t+=r:e.push(r)})),[e,t]}),[n]);return f.suspend((()=>new Promise((e=>m.preloadFont({font:r,characters:a},e)))),["troika-text",r,a]),T.useLayoutEffect((()=>{u.sync((()=>{l(),i&&i(u)}))})),T.useEffect((()=>()=>u.dispose()),[u]),T.createElement("primitive",S.default({object:u,ref:c,font:r,text:p,anchorX:e,anchorY:t},s),d)})),de=["string","number"],me=T.forwardRef((({font:e,letterSpacing:r=0,lineHeight:n=1,size:a=1,height:i=.2,bevelThickness:s=.1,bevelSize:c=.01,bevelEnabled:l=!1,bevelOffset:d=0,bevelSegments:m=4,curveSegments:p=8,children:h,...v},g)=>{T.useMemo((()=>o.extend({RenamedTextGeometry:u.TextGeometry})),[]);const x=f.suspend((async()=>{let t="string"==typeof e?await(await fetch(e)).json():e;return(new u.FontLoader).parse(t)}),[e]),y=t.useMemo((()=>({font:x,size:a,height:i,bevelThickness:s,bevelSize:c,bevelEnabled:l,bevelSegments:m,bevelOffset:d,curveSegments:p,letterSpacing:r,lineHeight:n})),[x,a,i,s,c,l,m,d,p,r,n]),[w,...E]=t.useMemo((()=>(e=>{let t="";const r=[];return T.Children.forEach(e,(e=>{de.includes(typeof e)?t+=e+"":r.push(e)})),[t,...r]})(h)),[h]),b=T.useMemo((()=>[w,y]),[w,y]);return T.createElement("mesh",S.default({},v,{ref:g}),T.createElement("renamedTextGeometry",{args:b}),E)})),fe=T.forwardRef((({children:e,multisamping:t=8,renderIndex:r=1,disableRender:a,disableGamma:i,disableRenderPass:s,depthBuffer:c=!0,stencilBuffer:l=!1,anisotropy:d=1,encoding:m,type:f,...p},h)=>{T.useMemo((()=>o.extend({EffectComposer:u.EffectComposer,RenderPass:u.RenderPass,ShaderPass:u.ShaderPass})),[]);const v=T.useRef(),{scene:g,camera:x,gl:y,size:w,viewport:E}=o.useThree(),[b]=T.useState((()=>{const e=new n.WebGLRenderTarget(w.width,w.height,{type:f||n.HalfFloatType,format:n.RGBAFormat,encoding:m||y.outputEncoding,depthBuffer:c,stencilBuffer:l,anisotropy:d});return e.samples=t,e}));T.useEffect((()=>{var e,t;null==(e=v.current)||e.setSize(w.width,w.height),null==(t=v.current)||t.setPixelRatio(E.dpr)}),[y,w,E.dpr]),o.useFrame((()=>{var e;a||null==(e=v.current)||e.render()}),r);const M=[];return s||M.push(T.createElement("renderPass",{key:"renderpass",attach:`passes-${M.length}`,args:[g,x]})),i||M.push(T.createElement("shaderPass",{attach:`passes-${M.length}`,key:"gammapass",args:[u.GammaCorrectionShader]})),T.Children.forEach(e,(e=>{e&&M.push(T.cloneElement(e,{key:M.length,attach:`passes-${M.length}`}))})),T.createElement("effectComposer",S.default({ref:D.default([h,v]),args:[y,b]},p),M)}));function pe(e,t,r,n){const o=class extends P.ShaderMaterial{constructor(o={}){const a=Object.entries(e);super({uniforms:a.reduce(((e,[t,r])=>({...e,...P.UniformsUtils.clone({[t]:{value:r}})})),{}),vertexShader:t,fragmentShader:r,...o}),this.key="",a.forEach((([e])=>Object.defineProperty(this,e,{get:()=>this.uniforms[e].value,set:t=>this.uniforms[e].value=t}))),n&&n(this)}};return o.key=P.MathUtils.generateUUID(),o}const he=e=>e===Object(e)&&!Array.isArray(e)&&"function"!=typeof e;function ve(e,r){const a=o.useThree((e=>e.gl)),i=o.useLoader(n.TextureLoader,he(e)?Object.values(e):e);if(t.useLayoutEffect((()=>{null==r||r(i)}),[r]),t.useEffect((()=>{(Array.isArray(i)?i:[i]).forEach(a.initTexture)}),[a,i]),he(e)){const t=Object.keys(e),r={};return t.forEach((e=>Object.assign(r,{[e]:i[t.indexOf(e)]}))),r}return i}ve.preload=e=>o.useLoader.preload(n.TextureLoader,e),ve.clear=e=>o.useLoader.clear(n.TextureLoader,e);const ge=pe({color:new P.Color("white"),scale:[1,1],imageBounds:[1,1],map:null,zoom:1,grayscale:0,opacity:1},"\n varying vec2 vUv;\n void main() {\n gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);\n vUv = uv;\n }\n","\n // mostly from https://gist.github.com/statico/df64c5d167362ecf7b34fca0b1459a44\n varying vec2 vUv;\n uniform vec2 scale;\n uniform vec2 imageBounds;\n uniform vec3 color;\n uniform sampler2D map;\n uniform float zoom;\n uniform float grayscale;\n uniform float opacity;\n const vec3 luma = vec3(.299, 0.587, 0.114);\n vec4 toGrayscale(vec4 color, float intensity) {\n return vec4(mix(color.rgb, vec3(dot(color.rgb, luma)), intensity), color.a);\n }\n vec2 aspect(vec2 size) {\n return size / min(size.x, size.y);\n }\n void main() {\n vec2 s = aspect(scale);\n vec2 i = aspect(imageBounds);\n float rs = s.x / s.y;\n float ri = i.x / i.y;\n vec2 new = rs < ri ? vec2(i.x * s.y / i.y, s.y) : vec2(s.x, i.y * s.x / i.x);\n vec2 offset = (rs < ri ? vec2((new.x - s.x) / 2.0, 0.0) : vec2(0.0, (new.y - s.y) / 2.0)) / new;\n vec2 uv = vUv * s / new + offset;\n vec2 zUv = (uv - vec2(0.5, 0.5)) / zoom + vec2(0.5, 0.5);\n gl_FragColor = toGrayscale(texture2D(map, zUv) * vec4(color, opacity), grayscale);\n \n #include <tonemapping_fragment>\n #include <encodings_fragment>\n }\n"),xe=T.forwardRef((({children:e,color:t,segments:r=1,scale:n=1,zoom:a=1,grayscale:i=0,opacity:s=1,texture:c,toneMapped:l,transparent:u,...d},m)=>{o.extend({ImageMaterial:ge});const f=o.useThree((e=>e.gl)),p=Array.isArray(n)?[n[0],n[1]]:[n,n],h=[c.image.width,c.image.height];return T.createElement("mesh",S.default({ref:m,scale:Array.isArray(n)?[...n,1]:n},d),T.createElement("planeGeometry",{args:[1,1,r,r]}),T.createElement("imageMaterial",{color:t,map:c,"map-encoding":f.outputEncoding,zoom:a,grayscale:i,opacity:s,scale:p,imageBounds:h,toneMapped:l,transparent:u}),e)})),ye=T.forwardRef((({url:e,...t},r)=>{const n=ve(e);return T.createElement(xe,S.default({},t,{texture:n,ref:r}))})),we=T.forwardRef((({url:e,...t},r)=>T.createElement(xe,S.default({},t,{ref:r})))),Ee=T.forwardRef(((e,t)=>{if(e.url)return T.createElement(ye,S.default({},e,{ref:t}));if(e.texture)return T.createElement(we,S.default({},e,{ref:t}));throw new Error("<Image /> requires a url or texture")}));const be={width:.2,length:1,decay:1,local:!1,stride:0,interval:1},Me=(e,t=1)=>(e.set(e.subarray(t)),e.fill(-1/0,-t),e);function Se(e,t){const{length:r,local:a,decay:i,interval:s,stride:c}={...be,...t},l=T.useRef(),[u]=T.useState((()=>new n.Vector3));T.useLayoutEffect((()=>{e&&(l.current=Float32Array.from({length:10*r*3},((t,r)=>e.position.getComponent(r%3))))}),[r,e]);const d=T.useRef(new n.Vector3),m=T.useRef(0);return o.useFrame((()=>{if(e&&l.current){if(0===m.current){let t;a?t=e.position:(e.getWorldPosition(u),t=u);const r=1*i;for(let e=0;e<r;e++)t.distanceTo(d.current)<c||(Me(l.current,3),l.current.set(t.toArray(),l.current.length-3));d.current.copy(t)}m.current++,m.current=m.current%s}})),l}const Te=T.forwardRef(((e,t)=>{const{children:r}=e,{width:a,length:i,decay:s,local:c,stride:l,interval:u}={...be,...e},{color:d="hotpink",attenuation:m,target:f}=e,h=o.useThree((e=>e.size)),v=T.useRef(null),[g,x]=T.useState(null),y=Se(g,{length:i,decay:s,local:c,stride:l,interval:u});T.useEffect((()=>{const e=(null==f?void 0:f.current)||v.current.children.find((e=>e instanceof n.Object3D));e&&x(e)}),[y,f]);const w=T.useMemo((()=>new p.MeshLine),[]),E=T.useMemo((()=>{var e;const t=new p.MeshLineMaterial({lineWidth:.1*a,color:d,sizeAttenuation:1,resolution:new n.Vector2(h.width,h.height)});let o;if(r)if(Array.isArray(r))o=r.find((e=>{const t=e;return"string"==typeof t.type&&"meshLineMaterial"===t.type}));else{const e=r;"string"==typeof e.type&&"meshLineMaterial"===e.type&&(o=e)}return"object"==typeof(null==(e=o)?void 0:e.props)&&t.setValues(o.props),t}),[a,d,h,r]);return T.useEffect((()=>{E.uniforms.resolution.value.set(h.width,h.height)}),[h]),o.useFrame((()=>{y.current&&w.setPoints(y.current,m)})),T.createElement("group",null,T.createElement("mesh",{ref:t,geometry:w,material:E}),T.createElement("group",{ref:v},r))}));function Ce(e,t=16,r,o,a){const[i,s]=T.useState((()=>{const e=Array.from({length:t},(()=>[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])).flat();return new n.InstancedBufferAttribute(Float32Array.from(e),16)}));return T.useEffect((()=>{if(void 0===e.current)return;const c=new u.MeshSurfaceSampler(e.current);o&&c.setWeightAttribute(o),c.build();const l=new n.Vector3,d=new n.Vector3,m=new n.Color,f=new n.Object3D;e.current.updateMatrixWorld(!0);for(let n=0;n<t;n++)c.sample(l,d,m),"function"==typeof r?r({dummy:f,sampledMesh:e.current,position:l,normal:d,color:m},n):f.position.copy(l),f.updateMatrix(),null!=a&&a.current&&a.current.setMatrixAt(n,f.matrix),f.matrix.toArray(i.array,16*n);null!=a&&a.current&&(a.current.instanceMatrix.needsUpdate=!0),i.needsUpdate=!0,s(i.clone())}),[e,a,o,t,r]),i}function Pe(e,{keys:t=["near","far","color","distance","decay","penumbra","angle","intensity","skeleton","visible","castShadow","receiveShadow","morphTargetDictionary","morphTargetInfluences","name","geometry","material","position","rotation","scale","up","userData"],deep:r,inject:n,castShadow:o,receiveShadow:a}){let i=L.default(e,t);return r&&(i.geometry&&"materialsOnly"!==r&&(i.geometry=i.geometry.clone()),i.material&&"geometriesOnly"!==r&&(i.material=i.material.clone())),n&&(i="function"==typeof n?{...i,children:n(e)}:T.isValidElement(n)?{...i,children:n}:{...i,...n}),"Mesh"===e.type&&(o&&(i.castShadow=!0),a&&(i.receiveShadow=!0)),i}const Re=T.forwardRef((({object:e,children:t,deep:r,castShadow:n,receiveShadow:o,inject:a,keys:i,...s},c)=>{const l={keys:i,deep:r,inject:a,castShadow:n,receiveShadow:o};if(Array.isArray(e))return T.createElement("group",S.default({},s,{ref:c}),e.map((e=>T.createElement(Re,S.default({key:e.uuid,object:e},l)))),t);const{children:u,...d}=Pe(e,l),m=e.type[0].toLowerCase()+e.type.slice(1);return T.createElement(m,S.default({},d,s,{ref:c}),(null==e?void 0:e.children).map((e=>{let t={},r=e.type[0].toLowerCase()+e.type.slice(1);return"group"===r||"object3D"===r?(r=Re,t={object:e,...l}):t=Pe(e,l),T.createElement(r,S.default({key:e.uuid},t))})),t,u)})),De=T.createContext(null),_e=T.forwardRef((({resolution:e=28,maxPolyCount:t=1e4,enableUvs:r=!1,enableColors:n=!1,children:a,...i},s)=>{const c=T.useRef(null),l=T.useMemo((()=>new u.MarchingCubes(e,null,r,n,t)),[e,t,r,n]),d=T.useMemo((()=>({getParent:()=>c})),[]);return o.useFrame((()=>{l.reset()}),-1),T.createElement(T.Fragment,null,T.createElement("primitive",S.default({object:l,ref:D.default([c,s])},i),T.createElement(De.Provider,{value:d},a)))})),Le=T.forwardRef((({strength:e=.5,subtract:t=12,color:r,...n},a)=>{const{getParent:i}=T.useContext(De),s=T.useMemo((()=>i()),[i]),c=T.useRef(),l=new P.Vector3;return o.useFrame((n=>{s.current&&c.current&&(c.current.getWorldPosition(l),s.current.addBall(.5+.5*l.x,.5+.5*l.y,.5+.5*l.z,e,t,r))})),T.createElement("group",S.default({ref:D.default([a,c])},n))})),ze=T.forwardRef((({planeType:e="x",strength:t=.5,subtract:r=12,...n},a)=>{const{getParent:i}=T.useContext(De),s=T.useMemo((()=>i()),[i]),c=T.useRef(),l=T.useMemo((()=>"x"===e?"addPlaneX":"y"===e?"addPlaneY":"addPlaneZ"),[e]);return o.useFrame((()=>{s.current&&c.current&&s.current[l](t,r)})),T.createElement("group",S.default({ref:D.default([a,c])},n))}));function ke(e=[0,0,0]){return function(e){return Array.isArray(e)}(e)?e:e instanceof P.Vector3||e instanceof P.Euler?[e.x,e.y,e.z]:[e,e,e]}const Fe=t.forwardRef((function({src:e,skipFill:r,skipStrokes:a,fillMaterial:i,strokeMaterial:s,fillMeshProps:c,strokeMeshProps:l,...d},m){const f=o.useLoader(u.SVGLoader,e.startsWith("<svg")?`data:image/svg+xml;utf8,${e}`:e),p=t.useMemo((()=>a?[]:f.paths.map((e=>{var t;return void 0===(null==(t=e.userData)?void 0:t.style.stroke)||"none"===e.userData.style.stroke?null:e.subPaths.map((t=>u.SVGLoader.pointsToStroke(t.getPoints(),e.userData.style)))}))),[f,a]);return t.useEffect((()=>()=>p.forEach((e=>e&&e.map((e=>e.dispose()))))),[p]),T.createElement("object3D",S.default({ref:m},d),T.createElement("object3D",{scale:[1,-1,1]},f.paths.map(((e,o)=>{var d,m;return T.createElement(t.Fragment,{key:o},!r&&void 0!==(null==(d=e.userData)?void 0:d.style.fill)&&"none"!==e.userData.style.fill&&u.SVGLoader.createShapes(e).map(((t,r)=>T.createElement("mesh",S.default({key:r},c),T.createElement("shapeGeometry",{args:[t]}),T.createElement("meshBasicMaterial",S.default({color:e.userData.style.fill,opacity:e.userData.style.fillOpacity,transparent:!0,side:n.DoubleSide,depthWrite:!1},i))))),!a&&void 0!==(null==(m=e.userData)?void 0:m.style.stroke)&&"none"!==e.userData.style.stroke&&e.subPaths.map(((t,r)=>T.createElement("mesh",S.default({key:r,geometry:p[o][r]},l),T.createElement("meshBasicMaterial",S.default({color:e.userData.style.stroke,opacity:e.userData.style.strokeOpacity,transparent:!0,side:n.DoubleSide,depthWrite:!1},s))))))}))))}));function Ae(e,t,r){const{gl:n,size:a,viewport:i}=o.useThree(),s="number"==typeof e?e:a.width*i.dpr,c="number"==typeof t?t:a.height*i.dpr,l=("number"==typeof e?r:e)||{},{samples:u,...d}=l,m=T.useMemo((()=>{let e;return e=new P.WebGLRenderTarget(s,c,{minFilter:P.LinearFilter,magFilter:P.LinearFilter,encoding:n.outputEncoding,type:P.HalfFloatType,...d}),e.samples=u,e}),[]);return T.useLayoutEffect((()=>{m.setSize(s,c),u&&(m.samples=u)}),[u,m,s,c]),T.useEffect((()=>()=>m.dispose()),[]),m}const Be=T.forwardRef((({envMap:e,resolution:t=256,frames:r=1/0,children:n,makeDefault:a,...i},s)=>{const c=o.useThree((({set:e})=>e)),l=o.useThree((({camera:e})=>e)),u=o.useThree((({size:e})=>e)),d=T.useRef(null),m=T.useRef(null),f=Ae(t);T.useLayoutEffect((()=>{i.manual||d.current.updateProjectionMatrix()}),[u,i]),T.useLayoutEffect((()=>{d.current.updateProjectionMatrix()})),T.useLayoutEffect((()=>{if(a){const e=l;return c((()=>({camera:d.current}))),()=>c((()=>({camera:e})))}}),[d,a,c]);let p=0,h=null;const v="function"==typeof n;return o.useFrame((t=>{v&&(r===1/0||p<r)&&(m.current.visible=!1,t.gl.setRenderTarget(f),h=t.scene.background,e&&(t.scene.background=e),t.gl.render(t.scene,d.current),t.scene.background=h,t.gl.setRenderTarget(null),m.current.visible=!0,p++)})),T.createElement(T.Fragment,null,T.createElement("orthographicCamera",S.default({left:u.width/-2,right:u.width/2,top:u.height/2,bottom:u.height/-2,ref:D.default([d,s])},i),!v&&n),T.createElement("group",{ref:m},v&&n(f.texture)))})),Ue=T.forwardRef((({envMap:e,resolution:t=256,frames:r=1/0,makeDefault:n,children:a,...i},s)=>{const c=o.useThree((({set:e})=>e)),l=o.useThree((({camera:e})=>e)),u=o.useThree((({size:e})=>e)),d=T.useRef(null),m=T.useRef(null),f=Ae(t);T.useLayoutEffect((()=>{i.manual||(d.current.aspect=u.width/u.height)}),[u,i]),T.useLayoutEffect((()=>{d.current.updateProjectionMatrix()}));let p=0,h=null;const v="function"==typeof a;return o.useFrame((t=>{v&&(r===1/0||p<r)&&(m.current.visible=!1,t.gl.setRenderTarget(f),h=t.scene.background,e&&(t.scene.background=e),t.gl.render(t.scene,d.current),t.scene.background=h,t.gl.setRenderTarget(null),m.current.visible=!0,p++)})),T.useLayoutEffect((()=>{if(n){const e=l;return c((()=>({camera:d.current}))),()=>c((()=>({camera:e})))}}),[d,n,c]),T.createElement(T.Fragment,null,T.createElement("perspectiveCamera",S.default({ref:D.default([d,s])},i),!v&&a),T.createElement("group",{ref:m},v&&a(f.texture)))}));const Ve=T.forwardRef(((e,t)=>{const{camera:r,onChange:n,makeDefault:a,...i}=e,s=o.useThree((e=>e.camera)),c=o.useThree((e=>e.invalidate)),l=o.useThree((e=>e.get)),d=o.useThree((e=>e.set)),m=r||s,[f]=T.useState((()=>new u.DeviceOrientationControls(m)));return T.useEffect((()=>{const e=e=>{c(),n&&n(e)};return null==f||null==f.addEventListener||f.addEventListener("change",e),()=>null==f||null==f.removeEventListener?void 0:f.removeEventListener("change",e)}),[n,f,c]),o.useFrame((()=>null==f?void 0:f.update()),-1),T.useEffect((()=>{const e=f;return null==e||e.connect(),()=>null==e?void 0:e.dispose()}),[f]),T.useEffect((()=>{if(a){const e=l().controls;return d({controls:f}),()=>d({controls:e})}}),[a,f]),f?T.createElement("primitive",S.default({ref:t,object:f},i)):null})),Ie=T.forwardRef((({domElement:e,...t},r)=>{const{onChange:n,makeDefault:a,...i}=t,s=o.useThree((e=>e.invalidate)),c=o.useThree((e=>e.camera)),l=o.useThree((e=>e.gl)),d=o.useThree((e=>e.events)),m=o.useThree((e=>e.get)),f=o.useThree((e=>e.set)),p=e||d.connected||l.domElement,h=T.useMemo((()=>new u.FlyControls(c)),[c]);return T.useEffect((()=>(h.connect(p),()=>{h.dispose()})),[p,h,s]),T.useEffect((()=>{const e=e=>{s(),n&&n(e)};return null==h.addEventListener||h.addEventListener("change",e),()=>null==h.removeEventListener?void 0:h.removeEventListener("change",e)}),[n,s]),T.useEffect((()=>{if(a){const e=m().controls;return f({controls:h}),()=>f({controls:e})}}),[a,h]),o.useFrame(((e,t)=>h.update(t))),T.createElement("primitive",S.default({ref:r,object:h,args:[c,p]},i))})),Oe=T.forwardRef(((e={enableDamping:!0},t)=>{const{domElement:r,camera:n,makeDefault:a,onChange:i,onStart:s,onEnd:c,...l}=e,d=o.useThree((e=>e.invalidate)),m=o.useThree((e=>e.camera)),f=o.useThree((e=>e.gl)),p=o.useThree((e=>e.events)),h=o.useThree((e=>e.set)),v=o.useThree((e=>e.get)),g=r||p.connected||f.domElement,x=n||m,y=T.useMemo((()=>new u.MapControls(x)),[x]);return T.useEffect((()=>{y.connect(g);const e=e=>{d(),i&&i(e)};return y.addEventListener("change",e),s&&y.addEventListener("start",s),c&&y.addEventListener("end",c),()=>{y.dispose(),y.removeEventListener("change",e),s&&y.removeEventListener("start",s),c&&y.removeEventListener("end",c)}}),[i,s,c,y,d,g]),T.useEffect((()=>{if(a){const e=v().controls;return h({controls:y}),()=>h({controls:e})}}),[a,y]),o.useFrame((()=>y.update()),-1),T.createElement("primitive",S.default({ref:t,object:y,enableDamping:!0},l))})),je=T.forwardRef((({makeDefault:e,camera:t,regress:r,domElement:n,enableDamping:a=!0,onChange:i,onStart:s,onEnd:c,...l},d)=>{const m=o.useThree((e=>e.invalidate)),f=o.useThree((e=>e.camera)),p=o.useThree((e=>e.gl)),h=o.useThree((e=>e.events)),v=o.useThree((e=>e.set)),g=o.useThree((e=>e.get)),x=o.useThree((e=>e.performance)),y=t||f,w=n||h.connected||p.domElement,E=T.useMemo((()=>new u.OrbitControls(y)),[y]);return o.useFrame((()=>{E.enabled&&E.update()}),-1),T.useEffect((()=>(E.connect(w),()=>{E.dispose()})),[w,r,E,m]),T.useEffect((()=>{const e=e=>{m(),r&&x.regress(),i&&i(e)};return E.addEventListener("change",e),s&&E.addEventListener("start",s),c&&E.addEventListener("end",c),()=>{s&&E.removeEventListener("start",s),c&&E.removeEventListener("end",c),E.removeEventListener("change",e)}}),[i,s,c,E,m]),T.useEffect((()=>{if(e){const e=g().controls;return v({controls:E}),()=>v({controls:e})}}),[e,E]),T.createElement("primitive",S.default({ref:d,object:E,enableDamping:a},l))})),We=T.forwardRef((({makeDefault:e,camera:t,domElement:r,regress:n,onChange:a,onStart:i,onEnd:s,...c},l)=>{const{invalidate:d,camera:m,gl:f,events:p,set:h,get:v,performance:g,viewport:x}=o.useThree(),y=t||m,w=r||p.connected||f.domElement,E=T.useMemo((()=>new u.TrackballControls(y)),[y]);return o.useFrame((()=>{E.enabled&&E.update()}),-1),T.useEffect((()=>(E.connect(w),()=>{E.dispose()})),[w,n,E,d]),T.useEffect((()=>{const e=e=>{d(),n&&g.regress(),a&&a(e)};return E.addEventListener("change",e),i&&E.addEventListener("start",i),s&&E.addEventListener("end",s),()=>{i&&E.removeEventListener("start",i),s&&E.removeEventListener("end",s),E.removeEventListener("change",e)}}),[a,i,s,E,d]),T.useEffect((()=>{E.handleResize()}),[x]),T.useEffect((()=>{if(e){const e=v().controls;return h({controls:E}),()=>h({controls:e})}}),[e,E]),T.createElement("primitive",S.default({ref:l,object:E},c))})),Ne=t.forwardRef((({camera:e,makeDefault:r,regress:n,domElement:a,onChange:i,onStart:s,onEnd:c,...l},d)=>{const m=o.useThree((e=>e.invalidate)),f=o.useThree((e=>e.camera)),p=o.useThree((e=>e.gl)),h=o.useThree((e=>e.events)),v=o.useThree((e=>e.set)),g=o.useThree((e=>e.get)),x=o.useThree((e=>e.performance)),y=e||f,w=a||h.connected||p.domElement,E=t.useMemo((()=>new u.ArcballControls(y)),[y]);return o.useFrame((()=>{E.enabled&&E.update()}),-1),t.useEffect((()=>(E.connect(w),()=>{E.dispose()})),[w,n,E,m]),t.useEffect((()=>{const e=e=>{m(),n&&x.regress(),i&&i(e)};return E.addEventListener("change",e),s&&E.addEventListener("start",s),c&&E.addEventListener("end",c),()=>{E.removeEventListener("change",e),s&&E.removeEventListener("start",s),c&&E.removeEventListener("end",c)}}),[i,s,c]),t.useEffect((()=>{if(r){const e=g().controls;return v({controls:E}),()=>v({controls:e})}}),[r,E]),T.createElement("primitive",S.default({ref:d,object:E},l))})),Ge=T.forwardRef((({children:e,domElement:t,onChange:r,onMouseDown:n,onMouseUp:a,onObjectChange:i,object:s,makeDefault:c,...l},d)=>{const m=["enabled","axis","mode","translationSnap","rotationSnap","scaleSnap","space","size","showX","showY","showZ"],{camera:f,...p}=l,h=L.default(p,m),v=z.default(p,m),g=o.useThree((e=>e.controls)),x=o.useThree((e=>e.gl)),y=o.useThree((e=>e.events)),w=o.useThree((e=>e.camera)),E=o.useThree((e=>e.invalidate)),b=o.useThree((e=>e.get)),M=o.useThree((e=>e.set)),C=f||w,R=t||y.connected||x.domElement,D=T.useMemo((()=>new u.TransformControls(C,R)),[C,R]),_=T.useRef();T.useLayoutEffect((()=>(s?D.attach(s instanceof P.Object3D?s:s.current):_.current instanceof P.Object3D&&D.attach(_.current),()=>{D.detach()})),[s,e,D]),T.useEffect((()=>{if(g){const e=e=>g.enabled=!e.value;return D.addEventListener("dragging-changed",e),()=>D.removeEventListener("dragging-changed",e)}}),[D,g]);const k=T.useRef(),F=T.useRef(),A=T.useRef(),B=T.useRef();return T.useLayoutEffect((()=>k.current=r),[r]),T.useLayoutEffect((()=>F.current=n),[n]),T.useLayoutEffect((()=>A.current=a),[a]),T.useLayoutEffect((()=>B.current=i),[i]),T.useEffect((()=>{const e=e=>{E(),null==k.current||k.current(e)},t=e=>null==F.current?void 0:F.current(e),r=e=>null==A.current?void 0:A.current(e),n=e=>null==B.current?void 0:B.current(e);return D.addEventListener("change",e),D.addEventListener("mouseDown",t),D.addEventListener("mouseUp",r),D.addEventListener("objectChange",n),()=>{D.removeEventListener("change",e),D.removeEventListener("mouseDown",t),D.removeEventListener("mouseUp",r),D.removeEventListener("objectChange",n)}}),[E,D]),T.useEffect((()=>{if(c){const e=b().controls;return M({controls:D}),()=>M({controls:e})}}),[c,D]),D?T.createElement(T.Fragment,null,T.createElement("primitive",S.default({ref:d,object:D},h)),T.createElement("group",S.default({ref:_},v),e)):null})),He=T.forwardRef((({domElement:e,selector:t,onChange:r,onLock:n,onUnlock:a,enabled:i=!0,makeDefault:s,...c},l)=>{const{camera:d,...m}=c,f=o.useThree((e=>e.setEvents)),p=o.useThree((e=>e.gl)),h=o.useThree((e=>e.camera)),v=o.useThree((e=>e.invalidate)),g=o.useThree((e=>e.events)),x=o.useThree((e=>e.get)),y=o.useThree((e=>e.set)),w=d||h,E=e||g.connected||p.domElement,[b]=T.useState((()=>new u.PointerLockControls(w)));return T.useEffect((()=>{if(i){b.connect(E);const e=x().events.compute;return f({compute(e,t){const r=t.size.width/2,n=t.size.height/2;t.pointer.set(r/t.size.width*2-1,-n/t.size.height*2+1),t.raycaster.setFromCamera(t.pointer,t.camera)}}),()=>{b.disconnect(),f({compute:e})}}}),[i,b]),T.useEffect((()=>{const e=e=>{v(),r&&r(e)};b.addEventListener("change",e),n&&b.addEventListener("lock",n),a&&b.addEventListener("unlock",a);const o=()=>b.lock(),i=t?Array.from(document.querySelectorAll(t)):[document];return i.forEach((e=>e&&e.addEventListener("click",o))),()=>{b.removeEventListener("change",e),n&&b.addEventListener("lock",n),a&&b.addEventListener("unlock",a),i.forEach((e=>e?e.removeEventListener("click",o):void 0))}}),[r,n,a,t,b,v]),T.useEffect((()=>{if(s){const e=x().controls;return y({controls:b}),()=>y({controls:e})}}),[s,b]),T.createElement("primitive",S.default({ref:l,object:b},m))})),$e=T.forwardRef((({domElement:e,makeDefault:t,...r},n)=>{const a=o.useThree((e=>e.camera)),i=o.useThree((e=>e.gl)),s=o.useThree((e=>e.events)),c=o.useThree((e=>e.get)),l=o.useThree((e=>e.set)),d=e||s.connected||i.domElement,[m]=T.useState((()=>new u.FirstPersonControls(a,d)));return T.useEffect((()=>{if(t){const e=c().controls;return l({controls:m}),()=>l({controls:e})}}),[t,m]),o.useFrame(((e,t)=>{m.update(t)}),-1),m?T.createElement("primitive",S.default({ref:n,object:m},r)):null}));function qe(e,t){const r=o.useThree((e=>e.pointer)),[a]=T.useState((()=>{const a=new n.Raycaster;return t&&o.applyProps(a,t,{}),function(t,o){a.setFromCamera(r,e instanceof n.Camera?e:e.current);const i=this.constructor.prototype.raycast.bind(this);i&&i(a,o)}}));return a}const Xe=T.createContext({}),Ze=()=>T.useContext(Xe),Ye=2*Math.PI,Ke=new n.Object3D,Qe=new n.Matrix4,[Je,et]=[new n.Quaternion,new n.Quaternion],tt=new n.Vector3,rt=new n.Vector3,nt="#f0f0f0",ot="#999",at="black",it="black",st=["Right","Left","Top","Bottom","Front","Back"],ct=e=>new n.Vector3(...e).multiplyScalar(.38),lt=[[1,1,1],[1,1,-1],[1,-1,1],[1,-1,-1],[-1,1,1],[-1,1,-1],[-1,-1,1],[-1,-1,-1]].map(ct),ut=[.25,.25,.25],dt=[[1,1,0],[1,0,1],[1,0,-1],[1,-1,0],[0,1,1],[0,1,-1],[0,-1,1],[0,-1,-1],[-1,1,0],[-1,0,1],[-1,0,-1],[-1,-1,0]].map(ct),mt=dt.map((e=>e.toArray().map((e=>0==e?.5:.25)))),ft=({hover:e,index:t,font:r="20px Inter var, Arial, sans-serif",faces:a=st,color:i=nt,hoverColor:s=ot,textColor:c=at,strokeColor:l=it,opacity:u=1})=>{const d=o.useThree((e=>e.gl)),m=T.useMemo((()=>{const e=document.createElement("canvas");e.width=128,e.height=128;const o=e.getContext("2d");return o.fillStyle=i,o.fillRect(0,0,e.width,e.height),o.strokeStyle=l,o.strokeRect(0,0,e.width,e.height),o.font=r,o.textAlign="center",o.fillStyle=c,o.fillText(a[t].toUpperCase(),64,76),new n.CanvasTexture(e)}),[t,a,r,i,c,l]);return T.createElement("meshLambertMaterial",{map:m,"map-encoding":d.outputEncoding,"map-anisotropy":d.capabilities.getMaxAnisotropy()||1,attach:`material-${t}`,color:e?s:"white",transparent:!0,opacity:u})},pt=e=>{const{tweenCamera:t,raycast:r}=Ze(),[n,o]=T.useState(null);return T.createElement("mesh",{raycast:r,onPointerOut:e=>{e.stopPropagation(),o(null)},onPointerMove:e=>{e.stopPropagation(),o(Math.floor(e.faceIndex/2))},onClick:e.onClick||(e=>{e.stopPropagation(),t(e.face.normal)})},[...Array(6)].map(((t,r)=>T.createElement(ft,S.default({key:r,index:r,hover:n===r},e)))),T.createElement("boxGeometry",null))},ht=({onClick:e,dimensions:t,position:r,hoverColor:n=ot})=>{const{tweenCamera:o,raycast:a}=Ze(),[i,s]=T.useState(!1);return T.createElement("mesh",{scale:1.01,position:r,raycast:a,onPointerOver:e=>{e.stopPropagation(),s(!0)},onPointerOut:e=>{e.stopPropagation(),s(!1)},onClick:e||(e=>{e.stopPropagation(),o(r)})},T.createElement("meshBasicMaterial",{color:i?n:"white",transparent:!0,opacity:.6,visible:i}),T.createElement("boxGeometry",{args:t}))};function vt({scale:e=[.8,.05,.05],color:t,rotation:r}){return T.createElement("group",{rotation:r},T.createElement("mesh",{position:[.4,0,0]},T.createElement("boxGeometry",{args:e}),T.createElement("meshBasicMaterial",{color:t,toneMapped:!1})))}function gt({onClick:e,font:t,disabled:r,arcStyle:a,label:i,labelColor:s,axisHeadScale:c=1,...l}){const u=o.useThree((e=>e.gl)),d=T.useMemo((()=>{const e=document.createElement("canvas");e.width=64,e.height=64;const r=e.getContext("2d");return r.beginPath(),r.arc(32,32,16,0,2*Math.PI),r.closePath(),r.fillStyle=a,r.fill(),i&&(r.font=t,r.textAlign="center",r.fillStyle=s,r.fillText(i,32,41)),new n.CanvasTexture(e)}),[a,i,s,t]),[m,f]=T.useState(!1),p=(i?1:.75)*(m?1.2:1)*c;return T.createElement("sprite",S.default({scale:p,onPointerOver:r?void 0:e=>{e.stopPropagation(),f(!0)},onPointerOut:r?void 0:e||(e=>{e.stopPropagation(),f(!1)})},l),T.createElement("spriteMaterial",{map:d,"map-encoding":u.outputEncoding,"map-anisotropy":u.capabilities.getMaxAnisotropy()||1,alphaTest:.3,opacity:i?1:.75,toneMapped:!1}))}function xt(e,{path:t}){const[r]=o.useLoader(n.CubeTextureLoader,[e],(e=>e.setPath(t)));return r}function yt(e){return o.useLoader(u.FBXLoader,e)}xt.preload=(e,{path:t})=>o.useLoader.preload(n.CubeTextureLoader,[e],(e=>e.setPath(t))),yt.preload=e=>o.useLoader.preload(u.FBXLoader,e),yt.clear=e=>o.useLoader.clear(u.FBXLoader,e);let wt=null;function Et(e,t,r){return n=>{r&&r(n),e&&(wt||(wt=new u.DRACOLoader),wt.setDecoderPath("string"==typeof e?e:"https://www.gstatic.com/draco/versioned/decoders/1.4.3/"),n.setDRACOLoader(wt)),t&&n.setMeshoptDecoder("function"==typeof u.MeshoptDecoder?u.MeshoptDecoder():u.MeshoptDecoder)}}function bt(e,t=!0,r=!0,n){return o.useLoader(u.GLTFLoader,e,Et(t,r,n))}bt.preload=(e,t=!0,r=!0,n)=>o.useLoader.preload(u.GLTFLoader,e,Et(t,r,n)),bt.clear=e=>o.useLoader.clear(u.GLTFLoader,e);const Mt="https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master";function St(e,r=`${Mt}/basis/`){const n=o.useThree((e=>e.gl)),a=o.useLoader(u.KTX2Loader,he(e)?Object.values(e):e,(e=>{e.detectSupport(n),e.setTranscoderPath(r)}));if(t.useEffect((()=>{(Array.isArray(a)?a:[a]).forEach(n.initTexture)}),[n,a]),he(e)){const t=Object.keys(e),r={};return t.forEach((e=>Object.assign(r,{[e]:a[t.indexOf(e)]}))),r}return a}function Tt(e,t){"function"==typeof e?e(t):null!=e&&(e.current=t)}St.preload=(e,t=`${Mt}/basis/`)=>o.useLoader.preload(u.KTX2Loader,e,(e=>{e.setTranscoderPath(t)})),St.clear=e=>o.useLoader.clear(u.KTX2Loader,e);const Ct=new P.Box3,Pt=new P.Vector3,Rt=T.forwardRef((({children:e,curve:t},r)=>{const[n]=T.useState((()=>new P.Scene)),[a,i]=T.useState(),s=T.useRef();return T.useEffect((()=>{s.current=new u.Flow(n.children[0]),i(s.current.object3D)}),[e]),T.useEffect((()=>{var e;t&&(null==(e=s.current)||e.updateCurve(0,t))}),[t]),T.useImperativeHandle(r,(()=>({moveAlongCurve:e=>{var t;null==(t=s.current)||t.moveAlongCurve(e)}}))),T.createElement(T.Fragment,null,o.createPortal(e,n),a&&T.createElement("primitive",{object:a}))}));class Dt extends n.MeshPhysicalMaterial{constructor(e={}){super(e),this.setValues(e),this._time={value:0},this._distort={value:.4},this._radius={value:1}}onBeforeCompile(e){e.uniforms.time=this._time,e.uniforms.radius=this._radius,e.uniforms.distort=this._distort,e.vertexShader=`\n uniform float time;\n uniform float radius;\n uniform float distort;\n #define GLSLIFY 1\nvec3 mod289(vec3 x){return x-floor(x*(1.0/289.0))*289.0;}vec4 mod289(vec4 x){return x-floor(x*(1.0/289.0))*289.0;}vec4 permute(vec4 x){return mod289(((x*34.0)+1.0)*x);}vec4 taylorInvSqrt(vec4 r){return 1.79284291400159-0.85373472095314*r;}float snoise(vec3 v){const vec2 C=vec2(1.0/6.0,1.0/3.0);const vec4 D=vec4(0.0,0.5,1.0,2.0);vec3 i=floor(v+dot(v,C.yyy));vec3 x0=v-i+dot(i,C.xxx);vec3 g=step(x0.yzx,x0.xyz);vec3 l=1.0-g;vec3 i1=min(g.xyz,l.zxy);vec3 i2=max(g.xyz,l.zxy);vec3 x1=x0-i1+C.xxx;vec3 x2=x0-i2+C.yyy;vec3 x3=x0-D.yyy;i=mod289(i);vec4 p=permute(permute(permute(i.z+vec4(0.0,i1.z,i2.z,1.0))+i.y+vec4(0.0,i1.y,i2.y,1.0))+i.x+vec4(0.0,i1.x,i2.x,1.0));float n_=0.142857142857;vec3 ns=n_*D.wyz-D.xzx;vec4 j=p-49.0*floor(p*ns.z*ns.z);vec4 x_=floor(j*ns.z);vec4 y_=floor(j-7.0*x_);vec4 x=x_*ns.x+ns.yyyy;vec4 y=y_*ns.x+ns.yyyy;vec4 h=1.0-abs(x)-abs(y);vec4 b0=vec4(x.xy,y.xy);vec4 b1=vec4(x.zw,y.zw);vec4 s0=floor(b0)*2.0+1.0;vec4 s1=floor(b1)*2.0+1.0;vec4 sh=-step(h,vec4(0.0));vec4 a0=b0.xzyw+s0.xzyw*sh.xxyy;vec4 a1=b1.xzyw+s1.xzyw*sh.zzww;vec3 p0=vec3(a0.xy,h.x);vec3 p1=vec3(a0.zw,h.y);vec3 p2=vec3(a1.xy,h.z);vec3 p3=vec3(a1.zw,h.w);vec4 norm=taylorInvSqrt(vec4(dot(p0,p0),dot(p1,p1),dot(p2,p2),dot(p3,p3)));p0*=norm.x;p1*=norm.y;p2*=norm.z;p3*=norm.w;vec4 m=max(0.6-vec4(dot(x0,x0),dot(x1,x1),dot(x2,x2),dot(x3,x3)),0.0);m=m*m;return 42.0*dot(m*m,vec4(dot(p0,x0),dot(p1,x1),dot(p2,x2),dot(p3,x3)));}\n ${e.vertexShader}\n `,e.vertexShader=e.vertexShader.replace("#include <begin_vertex>","\n float updateTime = time / 50.0;\n float noise = snoise(vec3(position / 2.0 + updateTime * 5.0));\n vec3 transformed = vec3(position * (noise * pow(distort, 2.0) + radius));\n ")}get time(){return this._time.value}set time(e){this._time.value=e}get distort(){return this._distort.value}set distort(e){this._distort.value=e}get radius(){return this._radius.value}set radius(e){this._radius.value=e}}const _t=T.forwardRef((({speed:e=1,...t},r)=>{const[n]=T.useState((()=>new Dt));return o.useFrame((t=>n&&(n.time=t.clock.getElapsedTime()*e))),T.createElement("primitive",S.default({object:n,ref:r,attach:"material"},t))}));class Lt extends n.MeshStandardMaterial{constructor(e={}){super(e),this.setValues(e),this._time={value:0},this._factor={value:1}}onBeforeCompile(e){e.uniforms.time=this._time,e.uniforms.factor=this._factor,e.vertexShader=`\n uniform float time;\n uniform float factor;\n ${e.vertexShader}\n `,e.vertexShader=e.vertexShader.replace("#include <begin_vertex>","float theta = sin( time + position.y ) / 2.0 * factor;\n float c = cos( theta );\n float s = sin( theta );\n mat3 m = mat3( c, 0, s, 0, 1, 0, -s, 0, c );\n vec3 transformed = vec3( position ) * m;\n vNormal = vNormal * m;")}get time(){return this._time.value}set time(e){this._time.value=e}get factor(){return this._factor.value}set factor(e){this._factor.value=e}}const zt=T.forwardRef((({speed:e=1,...t},r)=>{const[n]=T.useState((()=>new Lt));return o.useFrame((t=>n&&(n.time=t.clock.getElapsedTime()*e))),T.createElement("primitive",S.default({object:n,ref:r,attach:"material"},t))}));class kt extends n.ShaderMaterial{constructor(e=new n.Vector2){super({uniforms:{inputBuffer:new n.Uniform(null),depthBuffer:new n.Uniform(null),resolution:new n.Uniform(new n.Vector2),texelSize:new n.Uniform(new n.Vector2),halfTexelSize:new n.Uniform(new n.Vector2),kernel:new n.Uniform(0),scale:new n.Uniform(1),cameraNear:new n.Uniform(0),cameraFar:new n.Uniform(1),minDepthThreshold:new n.Uniform(0),maxDepthThreshold:new n.Uniform(1),depthScale:new n.Uniform(0),depthToBlurRatioBias:new n.Uniform(.25)},fragmentShader:"#include <common>\n #include <dithering_pars_fragment> \n uniform sampler2D inputBuffer;\n uniform sampler2D depthBuffer;\n uniform float cameraNear;\n uniform float cameraFar;\n uniform float minDepthThreshold;\n uniform float maxDepthThreshold;\n uniform float depthScale;\n uniform float depthToBlurRatioBias;\n varying vec2 vUv;\n varying vec2 vUv0;\n varying vec2 vUv1;\n varying vec2 vUv2;\n varying vec2 vUv3;\n\n void main() {\n float depthFactor = 0.0;\n \n #ifdef USE_DEPTH\n vec4 depth = texture2D(depthBuffer, vUv);\n depthFactor = smoothstep(minDepthThreshold, maxDepthThreshold, 1.0-(depth.r * depth.a));\n depthFactor *= depthScale;\n depthFactor = max(0.0, min(1.0, depthFactor + 0.25));\n #endif\n \n vec4 sum = texture2D(inputBuffer, mix(vUv0, vUv, depthFactor));\n sum += texture2D(inputBuffer, mix(vUv1, vUv, depthFactor));\n sum += texture2D(inputBuffer, mix(vUv2, vUv, depthFactor));\n sum += texture2D(inputBuffer, mix(vUv3, vUv, depthFactor));\n gl_FragColor = sum * 0.25 ;\n\n #include <dithering_fragment>\n #include <tonemapping_fragment>\n #include <encodings_fragment>\n }",vertexShader:"uniform vec2 texelSize;\n uniform vec2 halfTexelSize;\n uniform float kernel;\n uniform float scale;\n varying vec2 vUv;\n varying vec2 vUv0;\n varying vec2 vUv1;\n varying vec2 vUv2;\n varying vec2 vUv3;\n\n void main() {\n vec2 uv = position.xy * 0.5 + 0.5;\n vUv = uv;\n\n vec2 dUv = (texelSize * vec2(kernel) + halfTexelSize) * scale;\n vUv0 = vec2(uv.x - dUv.x, uv.y + dUv.y);\n vUv1 = vec2(uv.x + dUv.x, uv.y + dUv.y);\n vUv2 = vec2(uv.x + dUv.x, uv.y - dUv.y);\n vUv3 = vec2(uv.x - dUv.x, uv.y - dUv.y);\n\n gl_Position = vec4(position.xy, 1.0, 1.0);\n }",blending:n.NoBlending,depthWrite:!1,depthTest:!1}),this.toneMapped=!1,this.setTexelSize(e.x,e.y),this.kernel=new Float32Array([0,1,2,2,3])}setTexelSize(e,t){this.uniforms.texelSize.value.set(e,t),this.uniforms.halfTexelSize.value.set(e,t).multiplyScalar(.5)}setResolution(e){this.uniforms.resolution.value.copy(e)}}class Ft{constructor({gl:e,resolution:t,width:r=500,height:o=500,minDepthThreshold:a=0,maxDepthThreshold:i=1,depthScale:s=0,depthToBlurRatioBias:c=.25}){this.renderToScreen=!1,this.renderTargetA=new n.WebGLRenderTarget(t,t,{minFilter:n.LinearFilter,magFilter:n.LinearFilter,stencilBuffer:!1,depthBuffer:!1,encoding:e.outputEncoding}),this.renderTargetB=this.renderTargetA.clone(),this.convolutionMaterial=new kt,this.convolutionMaterial.setTexelSize(1/r,1/o),this.convolutionMaterial.setResolution(new n.Vector2(r,o)),this.scene=new n.Scene,this.camera=new n.Camera,this.convolutionMaterial.uniforms.minDepthThreshold.value=a,this.convolutionMaterial.uniforms.maxDepthThreshold.value=i,this.convolutionMaterial.uniforms.depthScale.value=s,this.convolutionMaterial.uniforms.depthToBlurRatioBias.value=c,this.convolutionMaterial.defines.USE_DEPTH=s>0;const l=new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),u=new Float32Array([0,0,2,0,0,2]),d=new n.BufferGeometry;d.setAttribute("position",new n.BufferAttribute(l,3)),d.setAttribute("uv",new n.BufferAttribute(u,2)),this.screen=new n.Mesh(d,this.convolutionMaterial),this.screen.frustumCulled=!1,this.scene.add(this.screen)}render(e,t,r){const n=this.scene,o=this.camera,a=this.renderTargetA,i=this.renderTargetB;let s=this.convolutionMaterial,c=s.uniforms;c.depthBuffer.value=t.depthTexture;const l=s.kernel;let u,d,m,f=t;for(d=0,m=l.length-1;d<m;++d)u=0==(1&d)?a:i,c.kernel.value=l[d],c.inputBuffer.value=f.texture,e.setRenderTarget(u),e.render(n,o),f=u;c.kernel.value=l[d],c.inputBuffer.value=f.texture,e.setRenderTarget(this.renderToScreen?null:r),e.render(n,o)}}class At extends n.MeshStandardMaterial{constructor(e={}){super(e),this._tDepth={value:null},this._distortionMap={value:null},this._tDiffuse={value:null},this._tDiffuseBlur={value:null},this._textureMatrix={value:null},this._hasBlur={value:!1},this._mirror={value:0},this._mixBlur={value:0},this._blurStrength={value:.5},this._minDepthThreshold={value:.9},this._maxDepthThreshold={value:1},this._depthScale={value:0},this._depthToBlurRatioBias={value:.25},this._distortion={value:1},this._mixContrast={value:1},this.setValues(e)}onBeforeCompile(e){var t;null!=(t=e.defines)&&t.USE_UV||(e.defines.USE_UV=""),e.uniforms.hasBlur=this._hasBlur,e.uniforms.tDiffuse=this._tDiffuse,e.uniforms.tDepth=this._tDepth,e.uniforms.distortionMap=this._distortionMap,e.uniforms.tDiffuseBlur=this._tDiffuseBlur,e.uniforms.textureMatrix=this._textureMatrix,e.uniforms.mirror=this._mirror,e.uniforms.mixBlur=this._mixBlur,e.uniforms.mixStrength=this._blurStrength,e.uniforms.minDepthThreshold=this._minDepthThreshold,e.uniforms.maxDepthThreshold=this._maxDepthThreshold,e.uniforms.depthScale=this._depthScale,e.uniforms.depthToBlurRatioBias=this._depthToBlurRatioBias,e.uniforms.distortion=this._distortion,e.uniforms.mixContrast=this._mixContrast,e.vertexShader=`\n uniform mat4 textureMatrix;\n varying vec4 my_vUv;\n ${e.vertexShader}`,e.vertexShader=e.vertexShader.replace("#include <project_vertex>","#include <project_vertex>\n my_vUv = textureMatrix * vec4( position, 1.0 );\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );"),e.fragmentShader=`\n uniform sampler2D tDiffuse;\n uniform sampler2D tDiffuseBlur;\n uniform sampler2D tDepth;\n uniform sampler2D distortionMap;\n uniform float distortion;\n uniform float cameraNear;\n\t\t\t uniform float cameraFar;\n uniform bool hasBlur;\n uniform float mixBlur;\n uniform float mirror;\n uniform float mixStrength;\n uniform float minDepthThreshold;\n uniform float maxDepthThreshold;\n uniform float mixContrast;\n uniform float depthScale;\n uniform float depthToBlurRatioBias;\n varying vec4 my_vUv;\n ${e.fragmentShader}`,e.fragmentShader=e.fragmentShader.replace("#include <emissivemap_fragment>","#include <emissivemap_fragment>\n\n float distortionFactor = 0.0;\n #ifdef USE_DISTORTION\n distortionFactor = texture2D(distortionMap, vUv).r * distortion;\n #endif\n\n vec4 new_vUv = my_vUv;\n new_vUv.x += distortionFactor;\n new_vUv.y += distortionFactor;\n\n vec4 base = texture2DProj(tDiffuse, new_vUv);\n vec4 blur = texture2DProj(tDiffuseBlur, new_vUv);\n\n vec4 merge = base;\n\n #ifdef USE_NORMALMAP\n vec2 normal_uv = vec2(0.0);\n vec4 normalColor = texture2D(normalMap, vUv * normalScale);\n vec3 my_normal = normalize( vec3( normalColor.r * 2.0 - 1.0, normalColor.b, normalColor.g * 2.0 - 1.0 ) );\n vec3 coord = new_vUv.xyz / new_vUv.w;\n normal_uv = coord.xy + coord.z * my_normal.xz * 0.05;\n vec4 base_normal = texture2D(tDiffuse, normal_uv);\n vec4 blur_normal = texture2D(tDiffuseBlur, normal_uv);\n merge = base_normal;\n blur = blur_normal;\n #endif\n\n float depthFactor = 0.0001;\n float blurFactor = 0.0;\n\n #ifdef USE_DEPTH\n vec4 depth = texture2DProj(tDepth, new_vUv);\n depthFactor = smoothstep(minDepthThreshold, maxDepthThreshold, 1.0-(depth.r * depth.a));\n depthFactor *= depthScale;\n depthFactor = max(0.0001, min(1.0, depthFactor));\n\n #ifdef USE_BLUR\n blur = blur * min(1.0, depthFactor + depthToBlurRatioBias);\n merge = merge * min(1.0, depthFactor + 0.5);\n #else\n merge = merge * depthFactor;\n #endif\n\n #endif\n\n float reflectorRoughnessFactor = roughness;\n #ifdef USE_ROUGHNESSMAP\n vec4 reflectorTexelRoughness = texture2D( roughnessMap, vUv );\n reflectorRoughnessFactor *= reflectorTexelRoughness.g;\n #endif\n\n #ifdef USE_BLUR\n blurFactor = min(1.0, mixBlur * reflectorRoughnessFactor);\n merge = mix(merge, blur, blurFactor);\n #endif\n\n vec4 newMerge = vec4(0.0, 0.0, 0.0, 1.0);\n newMerge.r = (merge.r - 0.5) * mixContrast + 0.5;\n newMerge.g = (merge.g - 0.5) * mixContrast + 0.5;\n newMerge.b = (merge.b - 0.5) * mixContrast + 0.5;\n\n diffuseColor.rgb = diffuseColor.rgb * ((1.0 - min(1.0, mirror)) + newMerge.rgb * mixStrength);\n ")}get tDiffuse(){return this._tDiffuse.value}set tDiffuse(e){this._tDiffuse.value=e}get tDepth(){return this._tDepth.value}set tDepth(e){this._tDepth.value=e}get distortionMap(){return this._distortionMap.value}set distortionMap(e){this._distortionMap.value=e}get tDiffuseBlur(){return this._tDiffuseBlur.value}set tDiffuseBlur(e){this._tDiffuseBlur.value=e}get textureMatrix(){return this._textureMatrix.value}set textureMatrix(e){this._textureMatrix.value=e}get hasBlur(){return this._hasBlur.value}set hasBlur(e){this._hasBlur.value=e}get mirror(){return this._mirror.value}set mirror(e){this._mirror.value=e}get mixBlur(){return this._mixBlur.value}set mixBlur(e){this._mixBlur.value=e}get mixStrength(){return this._blurStrength.value}set mixStrength(e){this._blurStrength.value=e}get minDepthThreshold(){return this._minDepthThreshold.value}set minDepthThreshold(e){this._minDepthThreshold.value=e}get maxDepthThreshold(){return this._maxDepthThreshold.value}set maxDepthThreshold(e){this._maxDepthThreshold.value=e}get depthScale(){return this._depthScale.value}set depthScale(e){this._depthScale.value=e}get depthToBlurRatioBias(){return this._depthToBlurRatioBias.value}set depthToBlurRatioBias(e){this._depthToBlurRatioBias.value=e}get distortion(){return this._distortion.value}set distortion(e){this._distortion.value=e}get mixContrast(){return this._mixContrast.value}set mixContrast(e){this._mixContrast.value=e}}o.extend({MeshReflectorMaterialImpl:At});const Bt=T.forwardRef((({mixBlur:e=0,mixStrength:t=1,resolution:r=256,blur:a=[0,0],minDepthThreshold:i=.9,maxDepthThreshold:s=1,depthScale:c=0,depthToBlurRatioBias:l=.25,mirror:u=0,distortion:d=1,mixContrast:m=1,distortionMap:f,reflectorOffset:p=0,...h},v)=>{const g=o.useThree((({gl:e})=>e)),x=o.useThree((({camera:e})=>e)),y=o.useThree((({scene:e})=>e)),w=(a=Array.isArray(a)?a:[a,a])[0]+a[1]>0,E=T.useRef(null),[b]=T.useState((()=>new n.Plane)),[M]=T.useState((()=>new n.Vector3)),[C]=T.useState((()=>new n.Vector3)),[P]=T.useState((()=>new n.Vector3)),[R]=T.useState((()=>new n.Matrix4)),[_]=T.useState((()=>new n.Vector3(0,0,-1))),[L]=T.useState((()=>new n.Vector4)),[z]=T.useState((()=>new n.Vector3)),[k]=T.useState((()=>new n.Vector3)),[F]=T.useState((()=>new n.Vector4)),[A]=T.useState((()=>new n.Matrix4)),[B]=T.useState((()=>new n.PerspectiveCamera)),U=T.useCallback((()=>{var e;const t=E.current.parent||(null==(e=E.current)?void 0:e.__r3f.parent);if(!t)return;if(C.setFromMatrixPosition(t.matrixWorld),P.setFromMatrixPosition(x.matrixWorld),R.extractRotation(t.matrixWorld),M.set(0,0,1),M.applyMatrix4(R),C.addScaledVector(M,p),z.subVectors(C,P),z.dot(M)>0)return;z.reflect(M).negate(),z.add(C),R.extractRotation(x.matrixWorld),_.set(0,0,-1),_.applyMatrix4(R),_.add(P),k.subVectors(C,_),k.reflect(M).negate(),k.add(C),B.position.copy(z),B.up.set(0,1,0),B.up.applyMatrix4(R),B.up.reflect(M),B.lookAt(k),B.far=x.far,B.updateMatrixWorld(),B.projectionMatrix.copy(x.projectionMatrix),A.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),A.multiply(B.projectionMatrix),A.multiply(B.matrixWorldInverse),A.multiply(t.matrixWorld),b.setFromNormalAndCoplanarPoint(M,C),b.applyMatrix4(B.matrixWorldInverse),L.set(b.normal.x,b.normal.y,b.normal.z,b.constant);const r=B.projectionMatrix;F.x=(Math.sign(L.x)+r.elements[8])/r.elements[0],F.y=(Math.sign(L.y)+r.elements[9])/r.elements[5],F.z=-1,F.w=(1+r.elements[10])/r.elements[14],L.multiplyScalar(2/L.dot(F)),r.elements[2]=L.x,r.elements[6]=L.y,r.elements[10]=L.z+1,r.elements[14]=L.w}),[x,p]),[V,I,O,j]=T.useMemo((()=>{const o={minFilter:n.LinearFilter,magFilter:n.LinearFilter,encoding:g.outputEncoding,type:n.HalfFloatType},p=new n.WebGLRenderTarget(r,r,o);p.depthBuffer=!0,p.depthTexture=new n.DepthTexture(r,r),p.depthTexture.format=n.DepthFormat,p.depthTexture.type=n.UnsignedShortType;const h=new n.WebGLRenderTarget(r,r,o);return[p,h,new Ft({gl:g,resolution:r,width:a[0],height:a[1],minDepthThreshold:i,maxDepthThreshold:s,depthScale:c,depthToBlurRatioBias:l}),{mirror:u,textureMatrix:A,mixBlur:e,tDiffuse:p.texture,tDepth:p.depthTexture,tDiffuseBlur:h.texture,hasBlur:w,mixStrength:t,minDepthThreshold:i,maxDepthThreshold:s,depthScale:c,depthToBlurRatioBias:l,distortion:d,distortionMap:f,mixContrast:m,"defines-USE_BLUR":w?"":void 0,"defines-USE_DEPTH":c>0?"":void 0,"defines-USE_DISTORTION":f?"":void 0}]}),[g,a,A,r,u,w,e,t,i,s,c,l,d,f,m]);return o.useFrame((()=>{var e;const t=E.current.parent||(null==(e=E.current)?void 0:e.__r3f.parent);if(!t)return;t.visible=!1;const r=g.xr.enabled,n=g.shadowMap.autoUpdate;U(),g.xr.enabled=!1,g.shadowMap.autoUpdate=!1,g.setRenderTarget(V),g.state.buffers.depth.setMask(!0),g.autoClear||g.clear(),g.render(y,B),w&&O.render(g,V,I),g.xr.enabled=r,g.shadowMap.autoUpdate=n,t.visible=!0,g.setRenderTarget(null)})),T.createElement("meshReflectorMaterialImpl",S.default({attach:"material",key:"key"+j["defines-USE_BLUR"]+j["defines-USE_DEPTH"]+j["defines-USE_DISTORTION"],ref:D.default([E,v])},j,h))})),Ut=pe({envMap:null,bounces:3,ior:2.4,correctMips:!0,aberrationStrength:.01,fresnel:0,bvh:new y.MeshBVHUniformStruct,color:new P.Color("white"),resolution:new P.Vector2},"\n #ifndef USE_COLOR\n uniform vec3 color;\n #endif\n varying vec3 vWorldPosition; \n varying vec3 vNormal;\n varying mat4 projectionMatrixInv;\n varying mat4 viewMatrixInv;\n varying vec3 viewDirection;\n varying mat4 vInstanceMatrix;\n varying vec3 vColor;\n \n void main() { \n vec4 transformedNormal = vec4(normal, 0.0);\n vec4 transformedPosition = vec4(position, 1.0);\n #ifdef USE_INSTANCING\n vInstanceMatrix = instanceMatrix;\n transformedNormal = instanceMatrix * transformedNormal;\n transformedPosition = instanceMatrix * transformedPosition;\n #else\n vInstanceMatrix = mat4(1.0);\n #endif\n\n vColor = color;\n #ifdef USE_INSTANCING_COLOR\n vColor *= instanceColor.rgb;\n #endif\n \n projectionMatrixInv = inverse(projectionMatrix);\n viewMatrixInv = inverse(viewMatrix);\n \n vWorldPosition = (modelMatrix * transformedPosition).xyz; \n vNormal = (viewMatrixInv * vec4(normalMatrix * transformedNormal.xyz, 0.0)).xyz;\n viewDirection = normalize(vWorldPosition - cameraPosition);\n gl_Position = projectionMatrix * viewMatrix * modelMatrix * transformedPosition;\n }",`\n #define ENVMAP_TYPE_CUBE_UV\n precision highp isampler2D;\n precision highp usampler2D;\n varying vec3 vWorldPosition;\n varying vec3 vNormal;\n \n #ifdef ENVMAP_TYPE_CUBEM\n uniform samplerCube envMap;\n #else\n uniform sampler2D envMap;\n #endif\n \n uniform float bounces;\n ${y.shaderStructs}\n ${y.shaderIntersectFunction}\n uniform BVH bvh;\n uniform float ior;\n uniform bool correctMips;\n uniform vec2 resolution;\n uniform float fresnel;\n uniform mat4 modelMatrix;\n \n uniform float aberrationStrength;\n varying mat4 projectionMatrixInv;\n varying mat4 viewMatrixInv;\n varying vec3 viewDirection; \n varying mat4 vInstanceMatrix;\n varying vec3 vColor;\n \n float fresnelFunc(vec3 viewDirection, vec3 worldNormal) {\n return pow( 1.0 + dot( viewDirection, worldNormal), 10.0 );\n }\n \n vec3 totalInternalReflection(vec3 ro, vec3 rd, vec3 normal, float ior, mat4 modelMatrixInverse) {\n vec3 rayOrigin = ro;\n vec3 rayDirection = rd;\n rayDirection = refract(rayDirection, normal, 1.0 / ior);\n rayOrigin = vWorldPosition + rayDirection * 0.001;\n rayOrigin = (modelMatrixInverse * vec4(rayOrigin, 1.0)).xyz;\n rayDirection = normalize((modelMatrixInverse * vec4(rayDirection, 0.0)).xyz);\n for(float i = 0.0; i < bounces; i++) {\n uvec4 faceIndices = uvec4( 0u );\n vec3 faceNormal = vec3( 0.0, 0.0, 1.0 );\n vec3 barycoord = vec3( 0.0 );\n float side = 1.0;\n float dist = 0.0;\n bvhIntersectFirstHit( bvh, rayOrigin, rayDirection, faceIndices, faceNormal, barycoord, side, dist );\n vec3 hitPos = rayOrigin + rayDirection * max(dist - 0.001, 0.0); \n vec3 tempDir = refract(rayDirection, faceNormal, ior);\n if (length(tempDir) != 0.0) {\n rayDirection = tempDir;\n break;\n }\n rayDirection = reflect(rayDirection, faceNormal);\n rayOrigin = hitPos + rayDirection * 0.01;\n }\n rayDirection = normalize((modelMatrix * vec4(rayDirection, 0.0)).xyz);\n return rayDirection;\n }\n \n #include <common>\n #include <cube_uv_reflection_fragment>\n \n #ifdef ENVMAP_TYPE_CUBEM\n vec4 textureGradient(samplerCube envMap, vec3 rayDirection, vec3 directionCamPerfect) {\n return textureGrad(envMap, rayDirection, dFdx(correctMips ? directionCamPerfect: rayDirection), dFdy(correctMips ? directionCamPerfect: rayDirection));\n }\n #else\n vec4 textureGradient(sampler2D envMap, vec3 rayDirection, vec3 directionCamPerfect) {\n vec2 uvv = equirectUv( rayDirection );\n vec2 smoothUv = equirectUv( directionCamPerfect );\n return textureGrad(envMap, uvv, dFdx(correctMips ? smoothUv : uvv), dFdy(correctMips ? smoothUv : uvv));\n }\n #endif\n \n void main() {\n mat4 modelMatrixInverse = inverse(modelMatrix * vInstanceMatrix);\n vec2 uv = gl_FragCoord.xy / resolution;\n vec3 directionCamPerfect = (projectionMatrixInv * vec4(uv * 2.0 - 1.0, 0.0, 1.0)).xyz;\n directionCamPerfect = (viewMatrixInv * vec4(directionCamPerfect, 0.0)).xyz;\n directionCamPerfect = normalize(directionCamPerfect);\n vec3 normal = vNormal;\n vec3 rayOrigin = cameraPosition;\n vec3 rayDirection = normalize(vWorldPosition - cameraPosition);\n vec3 finalColor;\n #ifdef CHROMATIC_ABERRATIONS\n vec3 rayDirectionG = totalInternalReflection(rayOrigin, rayDirection, normal, max(ior, 1.0), modelMatrixInverse);\n #ifdef FAST_CHROMA \n vec3 rayDirectionR = normalize(rayDirectionG + 1.0 * vec3(aberrationStrength / 2.0));\n vec3 rayDirectionB = normalize(rayDirectionG - 1.0 * vec3(aberrationStrength / 2.0));\n #else\n vec3 rayDirectionR = totalInternalReflection(rayOrigin, rayDirection, normal, max(ior * (1.0 - aberrationStrength), 1.0), modelMatrixInverse);\n vec3 rayDirectionB = totalInternalReflection(rayOrigin, rayDirection, normal, max(ior * (1.0 + aberrationStrength), 1.0), modelMatrixInverse);\n #endif\n float finalColorR = textureGradient(envMap, rayDirectionR, directionCamPerfect).r;\n float finalColorG = textureGradient(envMap, rayDirectionG, directionCamPerfect).g;\n float finalColorB = textureGradient(envMap, rayDirectionB, directionCamPerfect).b;\n finalColor = vec3(finalColorR, finalColorG, finalColorB) * vColor;\n #else\n rayDirection = totalInternalReflection(rayOrigin, rayDirection, normal, max(ior, 1.0), modelMatrixInverse);\n finalColor = textureGradient(envMap, rayDirection, directionCamPerfect).rgb; \n finalColor *= vColor;\n #endif\n float nFresnel = fresnelFunc(viewDirection, normal) * fresnel;\n gl_FragColor = vec4(mix(finalColor, vec3(1.0), nFresnel), 1.0); \n #include <tonemapping_fragment>\n #include <encodings_fragment>\n }`);class Vt extends P.PointsMaterial{constructor(e){super(e),this.onBeforeCompile=(e,t)=>{const{isWebGL2:r}=t.capabilities;e.fragmentShader=e.fragmentShader.replace("#include <output_fragment>",`\n ${r?"#include <output_fragment>":"#extension GL_OES_standard_derivatives : enable\n#include <output_fragment>"}\n vec2 cxy = 2.0 * gl_PointCoord - 1.0;\n float r = dot(cxy, cxy);\n float delta = fwidth(r); \n float mask = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r);\n gl_FragColor = vec4(gl_FragColor.rgb, mask * gl_FragColor.a );\n `)}}}const It=T.forwardRef(((e,t)=>{const[r]=T.useState((()=>new Vt(null)));return T.createElement("primitive",S.default({},e,{object:r,ref:t,attach:"material"}))}));let Ot=!1;function jt(e){const t=e+"Geometry";return T.forwardRef((({args:e,children:r,...n},o)=>T.createElement("mesh",S.default({ref:o},n),T.createElement(t,{attach:"geometry",args:e}),r)))}const Wt=jt("box"),Nt=jt("circle"),Gt=jt("cone"),Ht=jt("cylinder"),$t=jt("sphere"),qt=jt("plane"),Xt=jt("tube"),Zt=jt("torus"),Yt=jt("torusKnot"),Kt=jt("tetrahedron"),Qt=jt("ring"),Jt=jt("polyhedron"),er=jt("icosahedron"),tr=jt("octahedron"),rr=jt("dodecahedron"),nr=jt("extrude"),or=jt("lathe"),ar=jt("capsule"),ir=1e-5;const sr=T.forwardRef((function({args:[e=1,t=1,r=1]=[],radius:o=.05,steps:a=1,smoothness:i=4,children:s,...c},l){const u=T.useMemo((()=>function(e,t,r){const o=new n.Shape,a=r-ir;return o.absarc(ir,ir,ir,-Math.PI/2,-Math.PI,!0),o.absarc(ir,t-2*a,ir,Math.PI,Math.PI/2,!0),o.absarc(e-2*a,t-2*a,ir,Math.PI/2,0,!0),o.absarc(e-2*a,ir,ir,0,-Math.PI/2,!0),o}(e,t,o)),[e,t,o]),d=T.useMemo((()=>({depth:r-2*o,bevelEnabled:!0,bevelSegments:2*i,steps:a,bevelSize:o-ir,bevelThickness:o,curveSegments:i})),[r,o,i]),m=T.useRef();return T.useLayoutEffect((()=>{m.current&&m.current.center()}),[u,d]),T.createElement("mesh",S.default({ref:l},c),T.createElement("extrudeGeometry",{ref:m,args:[u,d]}),s)}));function cr(){const e=new P.BufferGeometry,t=new Float32Array([-1,-1,3,-1,-1,3]);return e.setAttribute("position",new P.BufferAttribute(t,2)),e}const lr=T.forwardRef((function({children:e,...t},r){const n=T.useMemo(cr,[]);return T.createElement("mesh",S.default({ref:r,geometry:n,frustumCulled:!1},t),e)})),ur=T.forwardRef((function({children:e,disableX:t,disableY:r,disableZ:o,left:a,right:i,top:s,bottom:c,front:l,back:u,onCentered:d,precise:m=!0,...f},p){const h=T.useRef(null),v=T.useRef(null),g=T.useRef(null);return T.useLayoutEffect((()=>{v.current.matrixWorld.identity();const e=(new n.Box3).setFromObject(g.current,m),f=new n.Vector3,p=new n.Sphere,x=e.max.x-e.min.x,y=e.max.y-e.min.y,w=e.max.z-e.min.z;e.getCenter(f),e.getBoundingSphere(p);const E=s?y/2:c?-y/2:0,b=a?-x/2:i?x/2:0,M=l?w/2:u?-w/2:0;v.current.position.set(t?0:-f.x+b,r?0:-f.y+E,o?0:-f.z+M),void 0!==d&&d({parent:h.current.parent,container:h.current,width:x,height:y,depth:w,boundingBox:e,boundingSphere:p,center:f,verticalAlignment:E,horizontalAlignment:b,depthAlignment:M})}),[e]),T.useImperativeHandle(p,(()=>h.current),[]),T.createElement("group",S.default({ref:h},f),T.createElement("group",{ref:v},T.createElement("group",{ref:g},e)))})),dr=e=>e&&e.isOrthographicCamera,mr=T.createContext(null);const fr=T.forwardRef((({intensity:e=1,decay:t,decayRate:r=.65,maxYaw:n=.1,maxPitch:a=.1,maxRoll:i=.1,yawFrequency:s=.1,pitchFrequency:c=.1,rollFrequency:l=.1},d)=>{const m=o.useThree((e=>e.camera)),f=o.useThree((e=>e.controls)),p=T.useRef(e),h=T.useRef(m.rotation.clone()),[v]=T.useState((()=>new u.SimplexNoise)),[g]=T.useState((()=>new u.SimplexNoise)),[x]=T.useState((()=>new u.SimplexNoise)),y=()=>{(p.current<0||p.current>1)&&(p.current=p.current<0?0:1)};return T.useImperativeHandle(d,(()=>({getIntensity:()=>p.current,setIntensity:e=>{p.current=e,y()}})),[]),T.useEffect((()=>{if(f){const e=()=>{h.current=m.rotation.clone()};return f.addEventListener("change",e),e(),()=>{f.removeEventListener("change",e)}}}),[m,f]),o.useFrame(((e,o)=>{const u=Math.pow(p.current,2),d=n*u*v.noise(e.clock.elapsedTime*s,1),f=a*u*g.noise(e.clock.elapsedTime*c,1),w=i*u*x.noise(e.clock.elapsedTime*l,1);m.rotation.set(h.current.x+f,h.current.y+d,h.current.z+w),t&&p.current>0&&(p.current-=r*o,y())})),null})),pr=T.forwardRef((({children:e,speed:t=1,rotationIntensity:r=1,floatIntensity:n=1,floatingRange:a=[-.1,.1],...i},s)=>{const c=T.useRef(null),l=T.useRef(1e4*Math.random());return o.useFrame((e=>{var o,i;const s=l.current+e.clock.getElapsedTime();c.current.rotation.x=Math.cos(s/4*t)/8*r,c.current.rotation.y=Math.sin(s/4*t)/8*r,c.current.rotation.z=Math.sin(s/4*t)/20*r;let u=Math.sin(s/4*t)/10;u=P.MathUtils.mapLinear(u,-.1,.1,null!==(o=null==a?void 0:a[0])&&void 0!==o?o:-.1,null!==(i=null==a?void 0:a[1])&&void 0!==i?i:.1),c.current.position.y=u*n})),T.createElement("group",i,T.createElement("group",{ref:D.default([c,s])},e))})),hr={sunset:"venice/venice_sunset_1k.hdr",dawn:"kiara/kiara_1_dawn_1k.hdr",night:"dikhololo/dikhololo_night_1k.hdr",warehouse:"empty-wharehouse/empty_warehouse_01_1k.hdr",forest:"forrest-slope/forest_slope_1k.hdr",apartment:"lebombo/lebombo_1k.hdr",studio:"studio-small-3/studio_small_03_1k.hdr",city:"potsdamer-platz/potsdamer_platz_1k.hdr",park:"rooitou/rooitou_park_1k.hdr",lobby:"st-fagans/st_fagans_interior_1k.hdr"};function vr(e,t,r,n,o=0){const a=(e=>{return(t=e).current&&t.current.isScene?e.current:e;var t})(t||r),i=a.background,s=a.environment,c=a.backgroundBlurriness||0;return"only"!==e&&(a.environment=n),e&&(a.background=n),e&&void 0!==a.backgroundBlurriness&&(a.backgroundBlurriness=o),()=>{"only"!==e&&(a.environment=s),e&&(a.background=i),e&&void 0!==a.backgroundBlurriness&&(a.backgroundBlurriness=c)}}function gr({scene:e,background:t=!1,blur:r,map:n}){const a=o.useThree((e=>e.scene));return T.useLayoutEffect((()=>{if(n)return vr(t,e,a,n,r)}),[a,e,n,t,r]),null}function xr({files:e=["/px.png","/nx.png","/py.png","/ny.png","/pz.png","/nz.png"],path:t="",preset:r,encoding:a,extensions:i}){if(r){if(!(r in hr))throw new Error("Preset must be one of: "+Object.keys(hr).join(", "));e=hr[r],t="https://market-assets.fra1.cdn.digitaloceanspaces.com/market-assets/hdris/"}const s=Array.isArray(e),c=s?n.CubeTextureLoader:u.RGBELoader,l=o.useLoader(c,s?[e]:e,(e=>{e.setPath(t),i&&i(e)})),d=s?l[0]:l;return d.mapping=s?n.CubeReflectionMapping:n.EquirectangularReflectionMapping,d.encoding=(null!=a?a:s)?n.sRGBEncoding:n.LinearEncoding,d}function yr({background:e=!1,scene:t,blur:r,...n}){const a=xr(n),i=o.useThree((e=>e.scene));return T.useLayoutEffect((()=>vr(e,t,i,a,r)),[a,e,t,i,r]),null}function wr({children:e,near:t=1,far:r=1e3,resolution:a=256,frames:i=1,map:s,background:c=!1,blur:l,scene:u,files:d,path:m,preset:f,extensions:p}){const h=o.useThree((e=>e.gl)),v=o.useThree((e=>e.scene)),g=T.useRef(null),[x]=T.useState((()=>new n.Scene)),y=T.useMemo((()=>{const e=new n.WebGLCubeRenderTarget(a);return e.texture.type=n.HalfFloatType,e}),[a]);T.useLayoutEffect((()=>(1===i&&g.current.update(h,x),vr(c,u,v,y.texture,l))),[e,x,y.texture,u,v,c,i,h]);let w=1;return o.useFrame((()=>{(i===1/0||w<i)&&(g.current.update(h,x),w++)})),T.createElement(T.Fragment,null,o.createPortal(T.createElement(T.Fragment,null,e,T.createElement("cubeCamera",{ref:g,args:[t,r,y]}),d||f?T.createElement(yr,{background:!0,files:d,preset:f,path:m,extensions:p}):s?T.createElement(gr,{background:!0,map:s,extensions:p}):null),x))}function Er(e){var t,r,n,a;const i=xr(e),s=e.map||i;T.useMemo((()=>o.extend({GroundProjectedEnvImpl:u.GroundProjectedEnv})),[]);const c=T.useMemo((()=>[s]),[s]),l=null==(t=e.ground)?void 0:t.height,d=null==(r=e.ground)?void 0:r.radius,m=null!==(n=null==(a=e.ground)?void 0:a.scale)&&void 0!==n?n:1e3;return T.createElement(T.Fragment,null,T.createElement(gr,S.default({},e,{map:s})),T.createElement("groundProjectedEnvImpl",{args:c,scale:m,height:l,radius:d}))}function br(e){return e.ground?T.createElement(Er,e):e.map?T.createElement(gr,e):e.children?T.createElement(wr,e):T.createElement(yr,e)}const Mr=T.forwardRef((({scale:e=10,frames:t=1/0,opacity:r=1,width:n=1,height:a=1,blur:i=1,far:s=10,resolution:c=512,smooth:l=!0,color:d="#000000",depthWrite:m=!1,renderOrder:f,...p},h)=>{const v=o.useThree((e=>e.scene)),g=o.useThree((e=>e.gl)),x=T.useRef(null);n*=Array.isArray(e)?e[0]:e||1,a*=Array.isArray(e)?e[1]:e||1;const[y,w,E,b,M,C,R]=T.useMemo((()=>{const e=new P.WebGLRenderTarget(c,c),t=new P.WebGLRenderTarget(c,c);t.texture.generateMipmaps=e.texture.generateMipmaps=!1;const r=new P.PlaneGeometry(n,a).rotateX(Math.PI/2),o=new P.Mesh(r),i=new P.MeshDepthMaterial;i.depthTest=i.depthWrite=!1,i.onBeforeCompile=e=>{e.uniforms={...e.uniforms,ucolor:{value:new P.Color(d)}},e.fragmentShader=e.fragmentShader.replace("void main() {","uniform vec3 ucolor;\n void main() {\n "),e.fragmentShader=e.fragmentShader.replace("vec4( vec3( 1.0 - fragCoordZ ), opacity );","vec4( ucolor * fragCoordZ * 2.0, ( 1.0 - fragCoordZ ) * 1.0 );")};const s=new P.ShaderMaterial(u.HorizontalBlurShader),l=new P.ShaderMaterial(u.VerticalBlurShader);return l.depthTest=s.depthTest=!1,[e,r,i,o,s,l,t]}),[c,n,a,e,d]),D=e=>{b.visible=!0,b.material=M,M.uniforms.tDiffuse.value=y.texture,M.uniforms.h.value=1*e/256,g.setRenderTarget(R),g.render(b,x.current),b.material=C,C.uniforms.tDiffuse.value=R.texture,C.uniforms.v.value=1*e/256,g.setRenderTarget(y),g.render(b,x.current),b.visible=!1};let _=0;return o.useFrame((()=>{if(x.current&&(t===1/0||_<t)){const e=v.background;v.background=null;const t=v.overrideMaterial;v.overrideMaterial=E,g.setRenderTarget(y),g.render(v,x.current),v.overrideMaterial=t,D(i),l&&D(.4*i),g.setRenderTarget(null),v.background=e,_++}})),T.createElement("group",S.default({"rotation-x":Math.PI/2},p,{ref:h}),T.createElement("mesh",{renderOrder:f,geometry:w,scale:[1,-1,1],rotation:[-Math.PI/2,0,0]},T.createElement("meshBasicMaterial",{map:y.texture,"map-encoding":g.outputEncoding,transparent:!0,opacity:r,depthWrite:m})),T.createElement("orthographicCamera",{ref:x,args:[-n/2,n/2,a/2,-a/2,0,s]}))})),Sr={rembrandt:{main:[1,2,1],fill:[-2,-.5,-2]},portrait:{main:[-1,2,.5],fill:[-1,.5,-1.5]},upfront:{main:[0,2,1],fill:[-1,.5,-1.5]},soft:{main:[-2,4,4],fill:[-1,.5,-1.5]}};const Tr=e=>0===e?0:Math.pow(2,10*e-10);const Cr=T.forwardRef((({fog:e=!1,renderOrder:t,depthWrite:r=!1,colorStop:o=0,color:a="black",opacity:i=.5,...s},c)=>{const l=T.useMemo((()=>{const e=document.createElement("canvas");e.width=128,e.height=128;const t=e.getContext("2d"),r=t.createRadialGradient(e.width/2,e.height/2,0,e.width/2,e.height/2,e.width/2);return r.addColorStop(o,new n.Color(a).getStyle()),r.addColorStop(1,"rgba(0,0,0,0)"),t.fillStyle=r,t.fillRect(0,0,e.width,e.height),e}),[a,o]);return T.createElement("mesh",S.default({renderOrder:t,ref:c,"rotation-x":-Math.PI/2},s),T.createElement("planeGeometry",null),T.createElement("meshBasicMaterial",{transparent:!0,opacity:i,fog:e,depthWrite:r,side:n.DoubleSide},T.createElement("canvasTexture",{attach:"map",args:[l]})))}));const Pr=T.createContext(null),Rr=pe({color:new P.Color,blend:2,alphaTest:.75,opacity:0,map:null},"varying vec2 vUv;\n void main() {\n gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);\n vUv = uv;\n }","varying vec2 vUv;\n uniform sampler2D map;\n uniform vec3 color;\n uniform float opacity;\n uniform float alphaTest;\n uniform float blend;\n void main() {\n vec4 sampledDiffuseColor = texture2D(map, vUv);\n gl_FragColor = vec4(color * sampledDiffuseColor.r * blend, max(0.0, (1.0 - (sampledDiffuseColor.r + sampledDiffuseColor.g + sampledDiffuseColor.b) / alphaTest)) * opacity);\n #include <tonemapping_fragment>\n #include <encodings_fragment>\n }"),Dr=pe({},"void main() { gl_Position = vec4((uv - 0.5) * 2.0, 1.0, 1.0); }","void main() { discard; }"),_r=T.forwardRef((({children:e,temporal:t,frames:r=40,limit:n=1/0,blend:a=20,scale:i=10,opacity:s=1,alphaTest:c=.75,color:l="black",colorBlend:u=2,resolution:d=1024,toneMapped:m=!0,...f},p)=>{o.extend({SoftShadowMaterial:Rr});const h=o.useThree((e=>e.gl)),v=o.useThree((e=>e.scene)),g=o.useThree((e=>e.camera)),x=T.useRef(null),y=T.useRef(null),[w]=T.useState((()=>new zr(h,v,d)));T.useLayoutEffect((()=>{w.configure(x.current)}),[]);const E=T.useMemo((()=>({lights:new Map,temporal:!!t,frames:Math.max(2,r),blend:Math.max(2,r===1/0?a:r),count:0,getMesh:()=>x.current,reset:()=>{w.clear();const e=x.current.material;e.opacity=0,e.alphaTest=0,E.count=0},update:(e=1)=>{const t=x.current.material;E.temporal?(t.opacity=Math.min(s,t.opacity+s/E.blend),t.alphaTest=Math.min(c,t.alphaTest+c/E.blend)):(t.opacity=s,t.alphaTest=c),y.current.visible=!0,w.prepare();for(let t=0;t<e;t++)E.lights.forEach((e=>e.update())),w.update(g,E.blend);y.current.visible=!1,w.finish()}})),[w,g,v,t,r,a,s,c]);return T.useLayoutEffect((()=>{E.reset(),E.temporal||E.frames===1/0||E.update(E.blend)})),T.useImperativeHandle(p,(()=>E),[E]),o.useFrame((()=>{(E.temporal||E.frames===1/0)&&E.count<E.frames&&E.count<n&&(E.update(),E.count++)})),T.createElement("group",f,T.createElement("group",{traverse:()=>null,ref:y},T.createElement(Pr.Provider,{value:E},e)),T.createElement("mesh",{receiveShadow:!0,ref:x,scale:i,rotation:[-Math.PI/2,0,0]},T.createElement("planeGeometry",null),T.createElement("softShadowMaterial",{transparent:!0,depthWrite:!1,toneMapped:m,color:l,blend:u,map:w.progressiveLightMap2.texture})))})),Lr=T.forwardRef((({castShadow:e=!0,bias:t=.001,mapSize:r=512,size:n=5,near:o=.5,far:a=500,frames:i=1,position:s=[0,0,0],radius:c=1,amount:l=8,intensity:u=1,ambient:d=.5,...m},f)=>{const p=T.useRef(null),h=new P.Vector3(...s).length(),v=T.useContext(Pr),g=T.useCallback((()=>{let e;if(p.current)for(let t=0;t<p.current.children.length;t++)if(e=p.current.children[t],Math.random()>d)e.position.set(s[0]+P.MathUtils.randFloatSpread(c),s[1]+P.MathUtils.randFloatSpread(c),s[2]+P.MathUtils.randFloatSpread(c));else{let t=Math.acos(2*Math.random()-1)-Math.PI/2,r=2*Math.PI*Math.random();e.position.set(Math.cos(t)*Math.cos(r)*h,Math.abs(Math.cos(t)*Math.sin(r)*h),Math.sin(t)*h)}}),[c,d,h,...s]),x=T.useMemo((()=>({update:g})),[g]);return T.useImperativeHandle(f,(()=>x),[x]),T.useLayoutEffect((()=>{const e=p.current;return v&&v.lights.set(e.uuid,x),()=>{v.lights.delete(e.uuid)}}),[v,x]),T.createElement("group",S.default({ref:p},m),Array.from({length:l},((i,s)=>T.createElement("directionalLight",{key:s,castShadow:e,"shadow-bias":t,"shadow-mapSize":[r,r],intensity:u/l},T.createElement("orthographicCamera",{attach:"shadow-camera",args:[-n,n,n,-n,o,a]})))))}));class zr{constructor(e,t,r=1024){this.renderer=e,this.res=r,this.scene=t,this.buffer1Active=!1,this.lights=[],this.meshes=[],this.object=null;const n=/(Android|iPad|iPhone|iPod)/g.test(navigator.userAgent)?P.HalfFloatType:P.FloatType;this.progressiveLightMap1=new P.WebGLRenderTarget(this.res,this.res,{type:n,encoding:e.outputEncoding}),this.progressiveLightMap2=new P.WebGLRenderTarget(this.res,this.res,{type:n,encoding:e.outputEncoding}),this.discardMat=new Dr,this.targetMat=new P.MeshPhongMaterial({shininess:0}),this.previousShadowMap={value:this.progressiveLightMap1.texture},this.averagingWindow={value:100},this.targetMat.onBeforeCompile=e=>{e.vertexShader="varying vec2 vUv;\n"+e.vertexShader.slice(0,-1)+"vUv = uv; gl_Position = vec4((uv - 0.5) * 2.0, 1.0, 1.0); }";const t=e.fragmentShader.indexOf("void main() {");e.fragmentShader=e.fragmentShader.replace("#include <clipping_planes_pars_fragment>","#include <clipping_planes_pars_fragment>\n#include <shadowmask_pars_fragment>\n"),e.fragmentShader="varying vec2 vUv;\n"+e.fragmentShader.slice(0,t)+"\tuniform sampler2D previousShadowMap;\n\tuniform float averagingWindow;\n"+e.fragmentShader.slice(t-1,-1)+"\nvec3 texelOld = texture2D(previousShadowMap, vUv).rgb;\n gl_FragColor.rgb = mix(texelOld, gl_FragColor.rgb, 1.0/averagingWindow);\n }",e.uniforms.previousShadowMap=this.previousShadowMap,e.uniforms.averagingWindow=this.averagingWindow}}clear(){this.renderer.setRenderTarget(this.progressiveLightMap1),this.renderer.clear(),this.renderer.setRenderTarget(this.progressiveLightMap2),this.renderer.clear(),this.lights=[],this.meshes=[],this.scene.traverse((e=>{!function(e){return!!e.geometry}(e)?function(e){return e.isLight}(e)&&this.lights.push({object:e,intensity:e.intensity}):this.meshes.push({object:e,material:e.material})}))}prepare(){this.lights.forEach((e=>e.object.intensity=0)),this.meshes.forEach((e=>e.object.material=this.discardMat))}finish(){this.lights.forEach((e=>e.object.intensity=e.intensity)),this.meshes.forEach((e=>e.object.material=e.material))}configure(e){this.object=e}update(e,t=100){if(!this.object)return;this.averagingWindow.value=t,this.object.material=this.targetMat;const r=this.buffer1Active?this.progressiveLightMap1:this.progressiveLightMap2,n=this.buffer1Active?this.progressiveLightMap2:this.progressiveLightMap1,o=this.scene.background;this.scene.background=null,this.renderer.setRenderTarget(r),this.previousShadowMap.value=n.texture,this.buffer1Active=!this.buffer1Active,this.renderer.render(this.scene,e),this.renderer.setRenderTarget(null),this.scene.background=o}}o.extend({MeshReflectorMaterial:At});const kr=T.forwardRef((({mixBlur:e=0,mixStrength:t=.5,resolution:r=256,blur:a=[0,0],args:i=[1,1],minDepthThreshold:s=.9,maxDepthThreshold:c=1,depthScale:l=0,depthToBlurRatioBias:u=.25,mirror:d=0,children:m,debug:f=0,distortion:p=1,mixContrast:h=1,distortionMap:v,...g},x)=>{T.useEffect((()=>{console.warn("Reflector has been deprecated and will be removed next major. Replace it with <MeshReflectorMaterial />!")}),[]);const y=o.useThree((({gl:e})=>e)),w=o.useThree((({camera:e})=>e)),E=o.useThree((({scene:e})=>e)),b=(a=Array.isArray(a)?a:[a,a])[0]+a[1]>0,M=T.useRef(null),[C]=T.useState((()=>new n.Plane)),[P]=T.useState((()=>new n.Vector3)),[R]=T.useState((()=>new n.Vector3)),[_]=T.useState((()=>new n.Vector3)),[L]=T.useState((()=>new n.Matrix4)),[z]=T.useState((()=>new n.Vector3(0,0,-1))),[k]=T.useState((()=>new n.Vector4)),[F]=T.useState((()=>new n.Vector3)),[A]=T.useState((()=>new n.Vector3)),[B]=T.useState((()=>new n.Vector4)),[U]=T.useState((()=>new n.Matrix4)),[V]=T.useState((()=>new n.PerspectiveCamera)),I=T.useCallback((()=>{if(R.setFromMatrixPosition(M.current.matrixWorld),_.setFromMatrixPosition(w.matrixWorld),L.extractRotation(M.current.matrixWorld),P.set(0,0,1),P.applyMatrix4(L),F.subVectors(R,_),F.dot(P)>0)return;F.reflect(P).negate(),F.add(R),L.extractRotation(w.matrixWorld),z.set(0,0,-1),z.applyMatrix4(L),z.add(_),A.subVectors(R,z),A.reflect(P).negate(),A.add(R),V.position.copy(F),V.up.set(0,1,0),V.up.applyMatrix4(L),V.up.reflect(P),V.lookAt(A),V.far=w.far,V.updateMatrixWorld(),V.projectionMatrix.copy(w.projectionMatrix),U.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),U.multiply(V.projectionMatrix),U.multiply(V.matrixWorldInverse),U.multiply(M.current.matrixWorld),C.setFromNormalAndCoplanarPoint(P,R),C.applyMatrix4(V.matrixWorldInverse),k.set(C.normal.x,C.normal.y,C.normal.z,C.constant);const e=V.projectionMatrix;B.x=(Math.sign(k.x)+e.elements[8])/e.elements[0],B.y=(Math.sign(k.y)+e.elements[9])/e.elements[5],B.z=-1,B.w=(1+e.elements[10])/e.elements[14],k.multiplyScalar(2/k.dot(B)),e.elements[2]=k.x,e.elements[6]=k.y,e.elements[10]=k.z+1,e.elements[14]=k.w}),[]),[O,j,W,N]=T.useMemo((()=>{const o={minFilter:n.LinearFilter,magFilter:n.LinearFilter,encoding:y.outputEncoding},i=new n.WebGLRenderTarget(r,r,o);i.depthBuffer=!0,i.depthTexture=new n.DepthTexture(r,r),i.depthTexture.format=n.DepthFormat,i.depthTexture.type=n.UnsignedShortType;const m=new n.WebGLRenderTarget(r,r,o);return[i,m,new Ft({gl:y,resolution:r,width:a[0],height:a[1],minDepthThreshold:s,maxDepthThreshold:c,depthScale:l,depthToBlurRatioBias:u}),{mirror:d,textureMatrix:U,mixBlur:e,tDiffuse:i.texture,tDepth:i.depthTexture,tDiffuseBlur:m.texture,hasBlur:b,mixStrength:t,minDepthThreshold:s,maxDepthThreshold:c,depthScale:l,depthToBlurRatioBias:u,transparent:!0,debug:f,distortion:p,distortionMap:v,mixContrast:h,"defines-USE_BLUR":b?"":void 0,"defines-USE_DEPTH":l>0?"":void 0,"defines-USE_DISTORTION":v?"":void 0}]}),[y,a,U,r,d,b,e,t,s,c,l,u,f,p,v,h]);return o.useFrame((()=>{if(null==M||!M.current)return;M.current.visible=!1;const e=y.xr.enabled,t=y.shadowMap.autoUpdate;I(),y.xr.enabled=!1,y.shadowMap.autoUpdate=!1,y.setRenderTarget(O),y.state.buffers.depth.setMask(!0),y.autoClear||y.clear(),y.render(E,V),b&&W.render(y,O,j),y.xr.enabled=e,y.shadowMap.autoUpdate=t,M.current.visible=!0,y.setRenderTarget(null)})),T.createElement("mesh",S.default({ref:D.default([M,x])},g),T.createElement("planeGeometry",{args:i}),m?m("meshReflectorMaterial",N):T.createElement("meshReflectorMaterial",N))}));class Fr extends n.ShaderMaterial{constructor(){super({uniforms:{depth:{value:null},opacity:{value:1},attenuation:{value:2.5},anglePower:{value:12},spotPosition:{value:new n.Vector3(0,0,0)},lightColor:{value:new n.Color("white")},cameraNear:{value:0},cameraFar:{value:1},resolution:{value:new n.Vector2(0,0)}},transparent:!0,depthWrite:!1,vertexShader:"\n varying vec3 vNormal;\n varying vec3 vWorldPosition;\n varying float vViewZ;\n varying float vIntensity;\n uniform vec3 spotPosition;\n uniform float attenuation; \n\n void main() {\n // compute intensity\n vNormal = normalize( normalMatrix * normal );\n vec4 worldPosition\t= modelMatrix * vec4( position, 1.0 );\n vWorldPosition = worldPosition.xyz;\n vec4 viewPosition = viewMatrix * worldPosition;\n vViewZ = viewPosition.z;\n float intensity\t= distance(worldPosition.xyz, spotPosition) / attenuation;\n intensity\t= 1.0 - clamp(intensity, 0.0, 1.0);\n vIntensity = intensity; \n // set gl_Position\n gl_Position\t= projectionMatrix * viewPosition;\n\n }",fragmentShader:"\n #include <packing>\n\n varying vec3 vNormal;\n varying vec3 vWorldPosition;\n uniform vec3 lightColor;\n uniform vec3 spotPosition;\n uniform float attenuation;\n uniform float anglePower;\n uniform sampler2D depth;\n uniform vec2 resolution;\n uniform float cameraNear;\n uniform float cameraFar;\n varying float vViewZ;\n varying float vIntensity;\n uniform float opacity;\n\n float readDepth( sampler2D depthSampler, vec2 coord ) {\n float fragCoordZ = texture2D( depthSampler, coord ).x;\n float viewZ = perspectiveDepthToViewZ(fragCoordZ, cameraNear, cameraFar);\n return viewZ;\n }\n\n void main() {\n float d = 1.0;\n bool isSoft = resolution[0] > 0.0 && resolution[1] > 0.0;\n if (isSoft) {\n vec2 sUv = gl_FragCoord.xy / resolution;\n d = readDepth(depth, sUv);\n }\n float intensity = vIntensity;\n vec3 normal\t= vec3(vNormal.x, vNormal.y, abs(vNormal.z));\n float angleIntensity\t= pow( dot(normal, vec3(0.0, 0.0, 1.0)), anglePower );\n intensity\t*= angleIntensity;\n // fades when z is close to sampled depth, meaning the cone is intersecting existing geometry\n if (isSoft) {\n intensity\t*= smoothstep(0., 1., vViewZ - d);\n }\n gl_FragColor = vec4(lightColor, intensity * opacity);\n\n #include <tonemapping_fragment>\n\t #include <encodings_fragment>\n }"})}}const Ar=new n.Vector3,Br=T.forwardRef((({opacity:e=1,radiusTop:t,radiusBottom:r,depthBuffer:a,color:i="white",distance:s=5,angle:c=.15,attenuation:l=5,anglePower:u=5,...d},m)=>{const f=T.useRef(null),p=o.useThree((e=>e.size)),h=o.useThree((e=>e.camera)),v=o.useThree((e=>e.viewport.dpr)),[g]=T.useState((()=>new Fr));t=void 0===t?.1:t,r=void 0===r?7*c:r,o.useFrame((()=>{g.uniforms.spotPosition.value.copy(f.current.getWorldPosition(Ar)),f.current.lookAt(f.current.parent.target.getWorldPosition(Ar))}));const x=T.useMemo((()=>{const e=new n.CylinderGeometry(t,r,s,128,64,!0);return e.applyMatrix4((new n.Matrix4).makeTranslation(0,-s/2,0)),e.applyMatrix4((new n.Matrix4).makeRotationX(-Math.PI/2)),e}),[c,s,t,r]);return T.createElement("spotLight",S.default({ref:m,angle:c,color:i,distance:s},d),T.createElement("mesh",{ref:f,geometry:x,raycast:()=>null},T.createElement("primitive",{object:g,attach:"material","uniforms-opacity-value":e,"uniforms-lightColor-value":i,"uniforms-attenuation-value":l,"uniforms-anglePower-value":u,"uniforms-depth-value":a,"uniforms-cameraNear-value":h.near,"uniforms-cameraFar-value":h.far,"uniforms-resolution-value":a?[p.width*v,p.height*v]:[0,0]})))})),Ur=T.forwardRef((({args:e,map:t,toneMapped:r=!1,color:n="white",form:a="rect",intensity:i=1,scale:s=1,target:c,children:l,...u},d)=>{const m=T.useRef(null);return T.useLayoutEffect((()=>{l||u.material||(o.applyProps(m.current.material,{color:n}),m.current.material.color.multiplyScalar(i))}),[n,i,l,u.material]),T.useLayoutEffect((()=>{c&&m.current.lookAt(Array.isArray(c)?new P.Vector3(...c):c)}),[c]),s=Array.isArray(s)&&2===s.length?[s[0],s[1],1]:s,T.createElement("mesh",S.default({ref:D.default([m,d]),scale:s},u),"circle"===a?T.createElement("ringGeometry",{args:[0,1,64]}):"ring"===a?T.createElement("ringGeometry",{args:[.5,1,64]}):"rect"===a?T.createElement("planeGeometry",null):T.createElement(a,{args:e}),l||(u.material?null:T.createElement("meshBasicMaterial",{toneMapped:r,map:t,side:P.DoubleSide})))}));function Vr(e,t,r=new n.Vector3){const o=Math.PI*(e-.5),a=2*Math.PI*(t-.5);return r.x=Math.cos(a),r.y=Math.sin(o),r.z=Math.sin(a),r}const Ir=T.forwardRef((({inclination:e=.6,azimuth:t=.1,distance:r=1e3,mieCoefficient:o=.005,mieDirectionalG:a=.8,rayleigh:i=.5,turbidity:s=10,sunPosition:c=Vr(e,t),...l},d)=>{const m=T.useMemo((()=>(new n.Vector3).setScalar(r)),[r]),[f]=T.useState((()=>new u.Sky));return T.createElement("primitive",S.default({object:f,ref:d,"material-uniforms-mieCoefficient-value":o,"material-uniforms-mieDirectionalG-value":a,"material-uniforms-rayleigh-value":i,"material-uniforms-sunPosition-value":c,"material-uniforms-turbidity-value":s,scale:m},l))}));class Or extends n.ShaderMaterial{constructor(){super({uniforms:{time:{value:0},fade:{value:1}},vertexShader:"\n uniform float time;\n attribute float size;\n varying vec3 vColor;\n void main() {\n vColor = color;\n vec4 mvPosition = modelViewMatrix * vec4(position, 0.5);\n gl_PointSize = size * (30.0 / -mvPosition.z) * (3.0 + sin(mvPosition.x + 2.0 * time + 100.0));\n gl_Position = projectionMatrix * mvPosition;\n }",fragmentShader:"\n uniform sampler2D pointTexture;\n uniform float fade;\n varying vec3 vColor;\n void main() {\n float opacity = 1.0;\n if (fade == 1.0) {\n float d = distance(gl_PointCoord, vec2(0.5, 0.5));\n opacity = 1.0 / (1.0 + exp(16.0 * (d - 0.25)));\n }\n gl_FragColor = vec4(vColor, opacity);\n\n #include <tonemapping_fragment>\n\t #include <encodings_fragment>\n }"})}}const jr=e=>(new n.Vector3).setFromSpherical(new n.Spherical(e,Math.acos(1-2*Math.random()),2*Math.random()*Math.PI)),Wr=T.forwardRef((({radius:e=100,depth:t=50,count:r=5e3,saturation:a=0,factor:i=4,fade:s=!1,speed:c=1},l)=>{const u=T.useRef(),[d,m,f]=T.useMemo((()=>{const o=[],s=[],c=Array.from({length:r},(()=>(.5+.5*Math.random())*i)),l=new n.Color;let u=e+t;const d=t/r;for(let e=0;e<r;e++)u-=d*Math.random(),o.push(...jr(u).toArray()),l.setHSL(e/r,a,.9),s.push(l.r,l.g,l.b);return[new Float32Array(o),new Float32Array(s),new Float32Array(c)]}),[r,t,i,e,a]);o.useFrame((e=>u.current&&(u.current.uniforms.time.value=e.clock.getElapsedTime()*c)));const[p]=T.useState((()=>new Or));return T.createElement("points",{ref:l},T.createElement("bufferGeometry",null,T.createElement("bufferAttribute",{attach:"attributes-position",args:[d,3]}),T.createElement("bufferAttribute",{attach:"attributes-color",args:[m,3]}),T.createElement("bufferAttribute",{attach:"attributes-size",args:[f,1]})),T.createElement("primitive",{ref:u,object:p,attach:"material",blending:n.AdditiveBlending,"uniforms-fade-value":s,transparent:!0,vertexColors:!0}))}));const Nr=pe({time:0,pixelRatio:1},"#define GLSLIFY 1\nuniform float pixelRatio;uniform float time;attribute float size;attribute float speed;attribute float opacity;attribute vec3 noise;attribute vec3 color;varying vec3 vColor;varying float vOpacity;void main(){vec4 modelPosition=modelMatrix*vec4(position,1.0);modelPosition.y+=sin(time*speed+modelPosition.x*noise.x*100.0)*0.2;modelPosition.z+=cos(time*speed+modelPosition.x*noise.y*100.0)*0.2;modelPosition.x+=cos(time*speed+modelPosition.x*noise.z*100.0)*0.2;vec4 viewPosition=viewMatrix*modelPosition;vec4 projectionPostion=projectionMatrix*viewPosition;gl_Position=projectionPostion;gl_PointSize=size*25.*pixelRatio;gl_PointSize*=(1.0/-viewPosition.z);vColor=color;vOpacity=opacity;}","#define GLSLIFY 1\nvarying vec3 vColor;varying float vOpacity;void main(){float distanceToCenter=distance(gl_PointCoord,vec2(0.5));float strength=0.05/distanceToCenter-0.1;gl_FragColor=vec4(vColor,strength*vOpacity);}"),Gr=e=>e&&e.constructor===Float32Array,Hr=e=>e instanceof P.Vector2||e instanceof P.Vector3||e instanceof P.Vector4,$r=e=>Array.isArray(e)?e:Hr(e)?e.toArray():[e,e,e];function qr(e,t,r){return T.useMemo((()=>{if(void 0!==t){if(Gr(t))return t;if(t instanceof P.Color){const r=Array.from({length:3*e},(()=>(e=>[e.r,e.g,e.b])(t))).flat();return Float32Array.from(r)}if(Hr(t)||Array.isArray(t)){const r=Array.from({length:3*e},(()=>$r(t))).flat();return Float32Array.from(r)}return Float32Array.from({length:e},(()=>t))}return Float32Array.from({length:e},r)}),[t])}const Xr=T.forwardRef((({noise:e=1,count:t=100,speed:r=1,opacity:n=1,scale:a=1,size:i,color:s,...c},l)=>{T.useMemo((()=>o.extend({SparklesMaterial:Nr})),[]);const u=T.useRef(),d=o.useThree((e=>e.viewport.dpr)),m=T.useMemo((()=>Float32Array.from(Array.from({length:t},(()=>$r(a).map(P.MathUtils.randFloatSpread))).flat())),[t,a]),f=qr(t,i,Math.random),p=qr(t,n),h=qr(t,r),v=qr(3*t,e),g=qr(void 0===s?3*t:t,Gr(s)?s:new P.Color(s),(()=>1));return o.useFrame((e=>u.current.uniforms.time.value=e.clock.elapsedTime)),T.createElement("points",S.default({key:`particle-${t}-${JSON.stringify(a)}`},c,{ref:l}),T.createElement("bufferGeometry",null,T.createElement("bufferAttribute",{attach:"attributes-position",args:[m,3]}),T.createElement("bufferAttribute",{attach:"attributes-size",args:[f,1]}),T.createElement("bufferAttribute",{attach:"attributes-opacity",args:[p,1]}),T.createElement("bufferAttribute",{attach:"attributes-speed",args:[h,1]}),T.createElement("bufferAttribute",{attach:"attributes-color",args:[g,3]}),T.createElement("bufferAttribute",{attach:"attributes-noise",args:[v,3]})),T.createElement("sparklesMaterial",{ref:u,transparent:!0,pixelRatio:d,depthWrite:!1}))}));const Zr=new P.Matrix4,Yr=new P.Ray,Kr=new P.Sphere,Qr=new P.Vector3;class Jr extends P.Group{constructor(){super(),this.size=0,this.color=new P.Color("white"),this.instance={current:void 0},this.instanceKey={current:void 0}}get geometry(){var e;return null==(e=this.instance.current)?void 0:e.geometry}raycast(e,t){var r,n;const o=this.instance.current;if(!o||!o.geometry)return;const a=o.userData.instances.indexOf(this.instanceKey);if(-1===a||a>o.geometry.drawRange.count)return;const i=null!==(r=null==(n=e.params.Points)?void 0:n.threshold)&&void 0!==r?r:1;if(Kr.set(this.getWorldPosition(Qr),i),!1===e.ray.intersectsSphere(Kr))return;Zr.copy(o.matrixWorld).invert(),Yr.copy(e.ray).applyMatrix4(Zr);const s=i/((this.scale.x+this.scale.y+this.scale.z)/3),c=s*s,l=Yr.distanceSqToPoint(Qr);if(l<c){const r=new P.Vector3;Yr.closestPointToPoint(Qr,r),r.applyMatrix4(this.matrixWorld);const n=e.ray.origin.distanceTo(r);if(n<e.near||n>e.far)return;t.push({distance:n,distanceToRay:Math.sqrt(l),point:r,index:a,face:null,object:this})}}}let en,tn;const rn=T.createContext(null),nn=new P.Matrix4,on=new P.Vector3,an=T.forwardRef((({children:e,range:t,limit:r=1e3,...n},a)=>{const i=T.useRef(null),[s,c]=T.useState([]),[[l,u,d]]=T.useState((()=>[new Float32Array(3*r),Float32Array.from({length:3*r},(()=>1)),Float32Array.from({length:r},(()=>1))]));T.useEffect((()=>{i.current.geometry.attributes.position.needsUpdate=!0})),o.useFrame((()=>{for(i.current.updateMatrix(),i.current.updateMatrixWorld(),nn.copy(i.current.matrixWorld).invert(),i.current.geometry.drawRange.count=Math.min(r,void 0!==t?t:r,s.length),en=0;en<s.length;en++)tn=s[en].current,tn.getWorldPosition(on).applyMatrix4(nn),on.toArray(l,3*en),i.current.geometry.attributes.position.needsUpdate=!0,tn.matrixWorldNeedsUpdate=!0,tn.color.toArray(u,3*en),i.current.geometry.attributes.color.needsUpdate=!0,d.set([tn.size],en),i.current.geometry.attributes.size.needsUpdate=!0}));const m=T.useMemo((()=>({getParent:()=>i,subscribe:e=>(c((t=>[...t,e])),()=>c((t=>t.filter((t=>t.current!==e.current)))))})),[]);return T.createElement("points",S.default({userData:{instances:s},matrixAutoUpdate:!1,ref:D.default([a,i]),raycast:()=>null},n),T.createElement("bufferGeometry",null,T.createElement("bufferAttribute",{attach:"attributes-position",count:l.length/3,array:l,itemSize:3,usage:P.DynamicDrawUsage}),T.createElement("bufferAttribute",{attach:"attributes-color",count:u.length/3,array:u,itemSize:3,usage:P.DynamicDrawUsage}),T.createElement("bufferAttribute",{attach:"attributes-size",count:d.length,array:d,itemSize:1,usage:P.DynamicDrawUsage})),T.createElement(rn.Provider,{value:m},e))})),sn=T.forwardRef((({children:e,...t},r)=>{T.useMemo((()=>o.extend({PositionPoint:Jr})),[]);const n=T.useRef(),{subscribe:a,getParent:i}=T.useContext(rn);return T.useLayoutEffect((()=>a(n)),[]),T.createElement("positionPoint",S.default({instance:i(),instanceKey:n,ref:D.default([r,n])},t),e)})),cn=T.forwardRef((({children:e,positions:t,colors:r,sizes:n,stride:a=3,...i},s)=>{const c=T.useRef(null);return o.useFrame((()=>{const e=c.current.geometry.attributes;e.position.needsUpdate=!0,r&&(e.color.needsUpdate=!0),n&&(e.size.needsUpdate=!0)})),T.createElement("points",S.default({ref:D.default([s,c])},i),T.createElement("bufferGeometry",null,T.createElement("bufferAttribute",{attach:"attributes-position",count:t.length/a,array:t,itemSize:a,usage:P.DynamicDrawUsage}),r&&T.createElement("bufferAttribute",{attach:"attributes-color",count:r.length/a,array:r,itemSize:3,usage:P.DynamicDrawUsage}),n&&T.createElement("bufferAttribute",{attach:"attributes-size",count:n.length/a,array:n,itemSize:1,usage:P.DynamicDrawUsage})),e)})),ln=T.forwardRef(((e,t)=>e.positions instanceof Float32Array?T.createElement(cn,S.default({},e,{ref:t})):T.createElement(an,S.default({},e,{ref:t})))),un=new P.Matrix4,dn=new P.Matrix4,mn=[],fn=new P.Mesh;class pn extends P.Group{constructor(){super(),this.color=new P.Color("white"),this.instance={current:void 0},this.instanceKey={current:void 0}}get geometry(){var e;return null==(e=this.instance.current)?void 0:e.geometry}raycast(e,t){const r=this.instance.current;if(!r)return;if(!r.geometry||!r.material)return;fn.geometry=r.geometry;const n=r.matrixWorld,o=r.userData.instances.indexOf(this.instanceKey);if(!(-1===o||o>r.count)){r.getMatrixAt(o,un),dn.multiplyMatrices(n,un),fn.matrixWorld=dn,fn.raycast(e,mn);for(let e=0,r=mn.length;e<r;e++){const r=mn[e];r.instanceId=o,r.object=this,t.push(r)}mn.length=0}}}const hn=T.createContext(null),vn=new P.Matrix4,gn=new P.Matrix4,xn=new P.Matrix4,yn=new P.Vector3,wn=new P.Quaternion,En=new P.Vector3,bn=T.forwardRef((({context:e,children:t,...r},n)=>{T.useMemo((()=>o.extend({PositionMesh:pn})),[]);const a=T.useRef(),{subscribe:i,getParent:s}=T.useContext(e||hn);return T.useLayoutEffect((()=>i(a)),[]),T.createElement("positionMesh",S.default({instance:s(),instanceKey:a,ref:D.default([n,a])},r),t)})),Mn=T.forwardRef((({children:e,range:t,limit:r=1e3,frames:n=1/0,...a},i)=>{const[{context:s,instance:c}]=T.useState((()=>{const e=T.createContext(null);return{context:e,instance:T.forwardRef(((t,r)=>T.createElement(bn,S.default({context:e},t,{ref:r}))))}})),l=T.useRef(null),[u,d]=T.useState([]),[[m,f]]=T.useState((()=>{const e=new Float32Array(16*r);for(let t=0;t<r;t++)xn.identity().toArray(e,16*t);return[e,new Float32Array([...new Array(3*r)].map((()=>1)))]}));T.useEffect((()=>{l.current.instanceMatrix.needsUpdate=!0}));let p=0,h=0;o.useFrame((()=>{if(n===1/0||p<n){l.current.updateMatrix(),l.current.updateMatrixWorld(),vn.copy(l.current.matrixWorld).invert(),h=Math.min(r,void 0!==t?t:r,u.length),l.current.count=h,l.current.instanceMatrix.updateRange.count=16*h,l.current.instanceColor.updateRange.count=3*h;for(let e=0;e<u.length;e++){const t=u[e].current;t.matrixWorld.decompose(yn,wn,En),gn.compose(yn,wn,En).premultiply(vn),gn.toArray(m,16*e),l.current.instanceMatrix.needsUpdate=!0,t.color.toArray(f,3*e),l.current.instanceColor.needsUpdate=!0}p++}}));const v=T.useMemo((()=>({getParent:()=>l,subscribe:e=>(d((t=>[...t,e])),()=>d((t=>t.filter((t=>t.current!==e.current)))))})),[]);return T.createElement("instancedMesh",S.default({userData:{instances:u},matrixAutoUpdate:!1,ref:D.default([i,l]),args:[null,null,0],raycast:()=>null},a),T.createElement("instancedBufferAttribute",{attach:"instanceMatrix",count:m.length/16,array:m,itemSize:16,usage:P.DynamicDrawUsage}),T.createElement("instancedBufferAttribute",{attach:"instanceColor",count:f.length/3,array:f,itemSize:3,usage:P.DynamicDrawUsage}),"function"==typeof e?T.createElement(s.Provider,{value:v},e(c)):T.createElement(hn.Provider,{value:v},e))})),Sn=T.forwardRef((function({meshes:e,children:t,...r},n){const o=Array.isArray(e);if(!o)for(const t of Object.keys(e))e[t].isMesh||delete e[t];return T.createElement("group",{ref:n},T.createElement(F.default,{components:(o?e:Object.values(e)).map((({geometry:e,material:t})=>T.createElement(Mn,S.default({key:e.uuid,geometry:e,material:t},r))))},(r=>o?t(...r):t(Object.keys(e).filter((t=>e[t].isMesh)).reduce(((e,t,n)=>({...e,[t]:r[n]})),{})))))})),Tn=T.createContext(null),Cn=T.forwardRef(((e,t)=>{T.useMemo((()=>o.extend({SegmentObject:Pn})),[]);const{limit:r=1e3,lineWidth:n=1,children:a,...i}=e,[s,c]=T.useState([]),[l]=T.useState((()=>new u.Line2)),[d]=T.useState((()=>new u.LineMaterial)),[m]=T.useState((()=>new u.LineSegmentsGeometry)),[f]=T.useState((()=>new P.Vector2(512,512))),[p]=T.useState((()=>Array(6*r).fill(0))),[h]=T.useState((()=>Array(6*r).fill(0))),v=T.useMemo((()=>({subscribe:e=>(c((t=>[...t,e])),()=>c((t=>t.filter((t=>t.current!==e.current)))))})),[]);return o.useFrame((()=>{for(let t=0;t<r;t++){var e;const r=null==(e=s[t])?void 0:e.current;r&&(p[6*t+0]=r.start.x,p[6*t+1]=r.start.y,p[6*t+2]=r.start.z,p[6*t+3]=r.end.x,p[6*t+4]=r.end.y,p[6*t+5]=r.end.z,h[6*t+0]=r.color.r,h[6*t+1]=r.color.g,h[6*t+2]=r.color.b,h[6*t+3]=r.color.r,h[6*t+4]=r.color.g,h[6*t+5]=r.color.b)}m.setColors(h),m.setPositions(p),l.computeLineDistances()})),T.createElement("primitive",{object:l,ref:t},T.createElement("primitive",{object:m,attach:"geometry"}),T.createElement("primitive",S.default({object:d,attach:"material",vertexColors:!0,resolution:f,linewidth:n},i)),T.createElement(Tn.Provider,{value:v},a))}));class Pn{constructor(){this.color=new P.Color("white"),this.start=new P.Vector3(0,0,0),this.end=new P.Vector3(0,0,0)}}const Rn=e=>e instanceof P.Vector3?e:new P.Vector3(..."number"==typeof e?[e,e,e]:e),Dn=T.forwardRef((({color:e,start:t,end:r},n)=>{const o=T.useContext(Tn);if(!o)throw"Segment must used inside Segments component.";const a=T.useRef(null);return T.useLayoutEffect((()=>o.subscribe(a)),[]),T.createElement("segmentObject",{ref:D.default([a,n]),color:e,start:Rn(t),end:Rn(r)})})),_n=T.forwardRef((({children:e,distances:t,...r},n)=>{const a=T.useRef(null);return T.useLayoutEffect((()=>{const{current:e}=a;e.levels.length=0,e.children.forEach(((r,n)=>e.levels.push({object:r,distance:t[n]})))})),o.useFrame((e=>{var t;return null==(t=a.current)?void 0:t.update(e.camera)})),T.createElement("lOD",S.default({ref:D.default([a,n])},r),e)}));const Ln=new n.Matrix4,zn=new n.Ray,kn=new n.Sphere,Fn=new n.Vector3;const An=t.createContext(null);const Bn=T.forwardRef((({children:e,width:t,height:r,samples:n=8,renderPriority:a=0,eventPriority:i=0,frames:s=1/0,...c},l)=>{const{size:u,viewport:d}=o.useThree(),m=Ae((t||u.width)*d.dpr,(r||u.height)*d.dpr,{samples:n}),[f]=T.useState((()=>new P.Scene)),p=T.useCallback(((e,t,r)=>{var n,o;let a=null==(n=m.texture)?void 0:n.__r3f.parent;for(;a&&!(a instanceof P.Object3D);)a=a.__r3f.parent;if(!a)return!1;r.raycaster.camera||r.events.compute(e,r,null==(o=r.previousRoot)?void 0:o.getState());const[i]=r.raycaster.intersectObject(a);if(!i)return!1;const s=i.uv;if(!s)return!1;t.raycaster.setFromCamera(t.pointer.set(2*s.x-1,2*s.y-1),t.camera)}),[]);return T.useImperativeHandle(l,(()=>m.texture),[m]),T.createElement(T.Fragment,null,o.createPortal(T.createElement(Un,{renderPriority:a,frames:s,fbo:m},e),f,{events:{compute:p,priority:i}}),T.createElement("primitive",S.default({object:m.texture},c)))}));function Un({frames:e,renderPriority:t,children:r,fbo:n}){let a=0;return o.useFrame((t=>{(e===1/0||a<e)&&(t.gl.setRenderTarget(n),t.gl.render(t.scene,t.camera),t.gl.setRenderTarget(null),a++)}),t),T.createElement(T.Fragment,null,r)}const Vn=new P.Color;function In({canvasSize:e,scene:t,index:r,children:n,frames:a,rect:i,track:s}){const c=o.useThree((e=>e.get)),l=o.useThree((e=>e.camera)),u=o.useThree((e=>e.scene)),d=o.useThree((e=>e.setEvents));let m=0;return o.useFrame((r=>{var o,c;(a===1/0||m<=a)&&(i.current=null==(o=s.current)?void 0:o.getBoundingClientRect(),m++);if(i.current){const{left:o,right:a,top:s,bottom:d,width:m,height:f}=i.current,p=d<0||s>e.height||a<0||o>e.width,h=e.height-d,v=m/f;if((c=l)&&c.isOrthographicCamera?l.left===m/-2&&l.right===m/2&&l.top===f/2&&l.bottom===f/-2||(Object.assign(l,{left:m/-2,right:m/2,top:f/2,bottom:f/-2}),l.updateProjectionMatrix()):l.aspect!==v&&(l.aspect=v,l.updateProjectionMatrix()),r.gl.setViewport(o,h,m,f),r.gl.setScissor(o,h,m,f),r.gl.setScissorTest(!0),p)return r.gl.getClearColor(Vn),r.gl.setClearColor(Vn,r.gl.getClearAlpha()),void r.gl.clear(!0,!0);r.gl.render(n?u:t,l)}}),r),T.useEffect((()=>{const e=c().events.connected;return d({connected:s.current}),()=>d({connected:e})}),[]),T.createElement(T.Fragment,null,n)}const On=T.createContext(null),jn=new P.Vector3,Wn=new P.Vector3,Nn=new P.Vector3(0,1,0),Gn=new P.Matrix4,Hn=({direction:e,axis:t})=>{const{translation:r,translationLimits:n,annotationsClass:a,depthTest:i,scale:s,lineWidth:c,fixed:l,axisColors:u,hoveredColor:d,displayValues:m,opacity:f,onDragStart:p,onDrag:h,onDragEnd:v,userData:g}=T.useContext(On),x=o.useThree((e=>e.controls)),y=T.useRef(null),w=T.useRef(null),E=T.useRef(null),b=T.useRef(0),[M,S]=T.useState(!1),C=T.useCallback((n=>{m&&(y.current.innerText=`${r.current[t].toFixed(2)}`,y.current.style.display="block"),n.stopPropagation();const o=(new P.Matrix4).extractRotation(w.current.matrixWorld),a=n.point.clone(),i=(new P.Vector3).setFromMatrixPosition(w.current.matrixWorld),s=e.clone().applyMatrix4(o).normalize();E.current={clickPoint:a,dir:s},b.current=r.current[t],p({component:"Arrow",axis:t,origin:i,directions:[s]}),x&&(x.enabled=!1),n.target.setPointerCapture(n.pointerId)}),[e,x,p,r,t]),R=T.useCallback((e=>{if(e.stopPropagation(),M||S(!0),E.current){const{clickPoint:o,dir:a}=E.current,[i,s]=(null==n?void 0:n[t])||[void 0,void 0];let c=((e,t,r,n)=>{const o=t.dot(t),a=t.dot(e)-t.dot(r),i=t.dot(n);return 0===i?-a/o:(jn.copy(n).multiplyScalar(o/i).sub(t),Wn.copy(n).multiplyScalar(a/i).add(r).sub(e),-jn.dot(Wn)/jn.dot(jn))})(o,a,e.ray.origin,e.ray.direction);void 0!==i&&(c=Math.max(c,i-b.current)),void 0!==s&&(c=Math.min(c,s-b.current)),r.current[t]=b.current+c,m&&(y.current.innerText=`${r.current[t].toFixed(2)}`),Gn.makeTranslation(a.x*c,a.y*c,a.z*c),h(Gn)}}),[h,M,r,n,t]),D=T.useCallback((e=>{m&&(y.current.style.display="none"),e.stopPropagation(),E.current=null,v(),x&&(x.enabled=!0),e.target.releasePointerCapture(e.pointerId)}),[x,v]),_=T.useCallback((e=>{e.stopPropagation(),S(!1)}),[]),{cylinderLength:L,coneWidth:z,coneLength:k,matrixL:F}=T.useMemo((()=>{const t=l?c/s*1.6:s/20,r=l?.2:s/5,n=l?1-r:s-r,o=(new P.Quaternion).setFromUnitVectors(Nn,e.clone().normalize());return{cylinderLength:n,coneWidth:t,coneLength:r,matrixL:(new P.Matrix4).makeRotationFromQuaternion(o)}}),[e,s,c,l]),A=M?d:u[t];return T.createElement("group",{ref:w},T.createElement("group",{matrix:F,matrixAutoUpdate:!1,onPointerDown:C,onPointerMove:R,onPointerUp:D,onPointerOut:_},T.createElement(H,{position:[0,-k,0]},T.createElement("div",{style:{display:"none",background:"#151520",color:"white",padding:"6px 8px",borderRadius:7,whiteSpace:"nowrap"},className:a,ref:y})),T.createElement("mesh",{visible:!1,position:[0,(L+k)/2,0],userData:g},T.createElement("cylinderGeometry",{args:[1.4*z,1.4*z,L+k,8,1]})),T.createElement(oe,{transparent:!0,raycast:()=>null,depthTest:i,points:[0,0,0,0,L,0],lineWidth:c,color:A,opacity:f,polygonOffset:!0,renderOrder:1,polygonOffsetFactor:-10}),T.createElement("mesh",{raycast:()=>null,position:[0,L+k/2,0],renderOrder:500},T.createElement("coneGeometry",{args:[z,k,24,1]}),T.createElement("meshBasicMaterial",{transparent:!0,depthTest:i,color:A,opacity:f,polygonOffset:!0,polygonOffsetFactor:-10}))))},$n=new P.Ray,qn=new P.Vector3,Xn=new P.Matrix4,Zn=({dir1:e,dir2:t,axis:r})=>{const{translation:n,translationLimits:a,annotationsClass:i,depthTest:s,scale:c,lineWidth:l,fixed:u,axisColors:d,hoveredColor:m,displayValues:f,opacity:p,onDragStart:h,onDrag:v,onDragEnd:g,userData:x}=T.useContext(On),y=o.useThree((e=>e.controls)),w=T.useRef(null),E=T.useRef(null),b=T.useRef(null),M=T.useRef(0),S=T.useRef(0),[C,R]=T.useState(!1),D=T.useCallback((e=>{f&&(w.current.innerText=`${n.current[(r+1)%3].toFixed(2)}, ${n.current[(r+2)%3].toFixed(2)}`,w.current.style.display="block"),e.stopPropagation();const t=e.point.clone(),o=(new P.Vector3).setFromMatrixPosition(E.current.matrixWorld),a=(new P.Vector3).setFromMatrixColumn(E.current.matrixWorld,0).normalize(),i=(new P.Vector3).setFromMatrixColumn(E.current.matrixWorld,1).normalize(),s=(new P.Vector3).setFromMatrixColumn(E.current.matrixWorld,2).normalize(),c=(new P.Plane).setFromNormalAndCoplanarPoint(s,o);b.current={clickPoint:t,e1:a,e2:i,plane:c},M.current=n.current[(r+1)%3],S.current=n.current[(r+2)%3],h({component:"Slider",axis:r,origin:o,directions:[a,i,s]}),y&&(y.enabled=!1),e.target.setPointerCapture(e.pointerId)}),[y,h,r]),_=T.useCallback((e=>{if(e.stopPropagation(),C||R(!0),b.current){const{clickPoint:t,e1:o,e2:i,plane:s}=b.current,[c,l]=(null==a?void 0:a[(r+1)%3])||[void 0,void 0],[u,d]=(null==a?void 0:a[(r+2)%3])||[void 0,void 0];$n.copy(e.ray),$n.intersectPlane(s,qn),$n.direction.negate(),$n.intersectPlane(s,qn),qn.sub(t);let[m,p]=((e,t,r)=>{const n=Math.abs(e.x)>=Math.abs(e.y)&&Math.abs(e.x)>=Math.abs(e.z)?0:Math.abs(e.y)>=Math.abs(e.x)&&Math.abs(e.y)>=Math.abs(e.z)?1:2,o=[0,1,2].sort(((e,r)=>Math.abs(t.getComponent(r))-Math.abs(t.getComponent(e)))),a=n===o[0]?o[1]:o[0],i=e.getComponent(n),s=e.getComponent(a),c=t.getComponent(n),l=t.getComponent(a),u=r.getComponent(n),d=(r.getComponent(a)-u*(s/i))/(l-c*(s/i));return[(u-d*c)/i,d]})(o,i,qn);void 0!==c&&(m=Math.max(m,c-M.current)),void 0!==l&&(m=Math.min(m,l-M.current)),void 0!==u&&(p=Math.max(p,u-S.current)),void 0!==d&&(p=Math.min(p,d-S.current)),n.current[(r+1)%3]=M.current+m,n.current[(r+2)%3]=S.current+p,f&&(w.current.innerText=`${n.current[(r+1)%3].toFixed(2)}, ${n.current[(r+2)%3].toFixed(2)}`),Xn.makeTranslation(m*o.x+p*i.x,m*o.y+p*i.y,m*o.z+p*i.z),v(Xn)}}),[v,C,n,a,r]),L=T.useCallback((e=>{f&&(w.current.style.display="none"),e.stopPropagation(),b.current=null,g(),y&&(y.enabled=!0),e.target.releasePointerCapture(e.pointerId)}),[y,g]),z=T.useCallback((e=>{e.stopPropagation(),R(!1)}),[]),k=T.useMemo((()=>{const r=e.clone().normalize(),n=t.clone().normalize();return(new P.Matrix4).makeBasis(r,n,r.clone().cross(n))}),[e,t]),F=u?1/7:c/7,A=u?.225:.225*c,B=C?m:d[r],U=T.useMemo((()=>[new P.Vector3(0,0,0),new P.Vector3(0,A,0),new P.Vector3(A,A,0),new P.Vector3(A,0,0),new P.Vector3(0,0,0)]),[A]);return T.createElement("group",{ref:E,matrix:k,matrixAutoUpdate:!1},T.createElement(H,{position:[0,0,0]},T.createElement("div",{style:{display:"none",background:"#151520",color:"white",padding:"6px 8px",borderRadius:7,whiteSpace:"nowrap"},className:i,ref:w})),T.createElement("group",{position:[1.7*F,1.7*F,0]},T.createElement("mesh",{visible:!0,onPointerDown:D,onPointerMove:_,onPointerUp:L,onPointerOut:z,scale:A,userData:x},T.createElement("planeGeometry",null),T.createElement("meshBasicMaterial",{transparent:!0,depthTest:s,color:B,polygonOffset:!0,polygonOffsetFactor:-10,side:P.DoubleSide})),T.createElement(oe,{position:[-A/2,-A/2,0],transparent:!0,depthTest:s,points:U,lineWidth:l,color:B,opacity:p,polygonOffset:!0,polygonOffsetFactor:-10,userData:x})))},Yn=new P.Vector3,Kn=new P.Vector3,Qn=e=>180*e/Math.PI,Jn=e=>{let t=((e,t)=>{let r=Math.floor(e/t);return r=r<0?r+1:r,e-r*t})(e,2*Math.PI);return Math.abs(t)<1e-6?0:(t<0&&(t+=2*Math.PI),t)},eo=new P.Matrix4,to=new P.Vector3,ro=new P.Ray,no=new P.Vector3,oo=({dir1:e,dir2:t,axis:r})=>{const{rotationLimits:n,annotationsClass:a,depthTest:i,scale:s,lineWidth:c,fixed:l,axisColors:u,hoveredColor:d,displayValues:m,opacity:f,onDragStart:p,onDrag:h,onDragEnd:v,userData:g}=T.useContext(On),x=o.useThree((e=>e.controls)),y=T.useRef(null),w=T.useRef(null),E=T.useRef(0),b=T.useRef(0),M=T.useRef(null),[S,C]=T.useState(!1),R=T.useCallback((e=>{m&&(y.current.innerText=`${Qn(b.current).toFixed(0)}º`,y.current.style.display="block"),e.stopPropagation();const t=e.point.clone(),n=(new P.Vector3).setFromMatrixPosition(w.current.matrixWorld),o=(new P.Vector3).setFromMatrixColumn(w.current.matrixWorld,0).normalize(),a=(new P.Vector3).setFromMatrixColumn(w.current.matrixWorld,1).normalize(),i=(new P.Vector3).setFromMatrixColumn(w.current.matrixWorld,2).normalize(),s=(new P.Plane).setFromNormalAndCoplanarPoint(i,n);M.current={clickPoint:t,origin:n,e1:o,e2:a,normal:i,plane:s},p({component:"Rotator",axis:r,origin:n,directions:[o,a,i]}),x&&(x.enabled=!1),e.target.setPointerCapture(e.pointerId)}),[x,p,r]),D=T.useCallback((e=>{if(e.stopPropagation(),S||C(!0),M.current){const{clickPoint:t,origin:o,e1:a,e2:i,normal:s,plane:c}=M.current,[l,u]=(null==n?void 0:n[r])||[void 0,void 0];ro.copy(e.ray),ro.intersectPlane(c,no),ro.direction.negate(),ro.intersectPlane(c,no);let d=((e,t,r,n,o)=>{Yn.copy(e).sub(r),Kn.copy(t).sub(r);const a=n.dot(n),i=o.dot(o),s=Yn.dot(n)/a,c=Yn.dot(o)/i,l=Kn.dot(n)/a,u=Kn.dot(o)/i,d=Math.atan2(c,s);return Math.atan2(u,l)-d})(t,no,o,a,i),f=Qn(d);e.shiftKey&&(f=10*Math.round(f/10),d=(e=>e*Math.PI/180)(f)),void 0!==l&&void 0!==u&&u-l<2*Math.PI?(d=Jn(d),d=d>Math.PI?d-2*Math.PI:d,d=A.default(d,l-E.current,u-E.current),b.current=E.current+d):(b.current=Jn(E.current+d),b.current=b.current>Math.PI?b.current-2*Math.PI:b.current),m&&(f=Qn(b.current),y.current.innerText=`${f.toFixed(0)}º`),eo.makeRotationAxis(s,d),to.copy(o).applyMatrix4(eo).sub(o).negate(),eo.setPosition(to),h(eo)}}),[h,S,n,r]),_=T.useCallback((e=>{m&&(y.current.style.display="none"),e.stopPropagation(),E.current=b.current,M.current=null,v(),x&&(x.enabled=!0),e.target.releasePointerCapture(e.pointerId)}),[x,v]),L=T.useCallback((e=>{e.stopPropagation(),C(!1)}),[]),z=T.useMemo((()=>{const r=e.clone().normalize(),n=t.clone().normalize();return(new P.Matrix4).makeBasis(r,n,r.clone().cross(n))}),[e,t]),k=l?.65:.65*s,F=T.useMemo((()=>{const e=[];for(let t=0;t<=32;t++){const r=t*(Math.PI/2)/32;e.push(new P.Vector3(Math.cos(r)*k,Math.sin(r)*k,0))}return e}),[k]);return T.createElement("group",{ref:w,onPointerDown:R,onPointerMove:D,onPointerUp:_,onPointerOut:L,matrix:z,matrixAutoUpdate:!1},T.createElement(H,{position:[k,k,0]},T.createElement("div",{style:{display:"none",background:"#151520",color:"white",padding:"6px 8px",borderRadius:7,whiteSpace:"nowrap"},className:a,ref:y})),T.createElement(oe,{points:F,lineWidth:4*c,visible:!1,userData:g}),T.createElement(oe,{transparent:!0,raycast:()=>null,depthTest:i,points:F,lineWidth:c,color:S?d:u[r],opacity:f,polygonOffset:!0,polygonOffsetFactor:-10}))},ao=new P.Vector3,io=new P.Vector3,so=new P.Vector3,co=(e,t,r,n=1)=>{const o=ao.set(e.x/r.width*2-1,-e.y/r.height*2+1,n);return o.unproject(t),o},lo=(e,t,r,n)=>{const o=((e,t,r)=>{const n=r.width/2,o=r.height/2;t.updateMatrixWorld(!1);const a=e.project(t);return a.x=a.x*n+n,a.y=-a.y*o+o,a})(so.copy(e),r,n);let a=0;for(let i=0;i<2;++i){const s=io.copy(o).setComponent(i,o.getComponent(i)+t),c=co(s,r,n,s.z);a=Math.max(a,e.distanceTo(c))}return a},uo=new P.Matrix4,mo=new P.Matrix4,fo=new P.Matrix4,po=new P.Matrix4,ho=new P.Matrix4,vo=new P.Matrix4,go=new P.Matrix4,xo=new P.Matrix4,yo=new P.Box3,wo=new P.Box3,Eo=new P.Vector3,bo=new P.Vector3,Mo=new P.Vector3,So=new P.Vector3,To=new P.Vector3(1,0,0),Co=new P.Vector3(0,1,0),Po=new P.Vector3(0,0,1),Ro=T.forwardRef((({matrix:e,onDragStart:t,onDrag:r,onDragEnd:n,autoTransform:a=!0,anchor:i,disableAxes:s=!1,disableSliders:c=!1,disableRotations:l=!1,activeAxes:u=[!0,!0,!0],offset:d=[0,0,0],rotation:m=[0,0,0],scale:f=1,lineWidth:h=4,fixed:v=!1,translationLimits:g,rotationLimits:x,depthTest:y=!0,axisColors:w=["#ff2060","#20df80","#2080ff"],hoveredColor:E="#ffff40",displayValues:b=!0,opacity:M=1,visible:S=!0,userData:C,children:R},D)=>{o.extend({MeshLine:p.MeshLine,MeshLineMaterial:p.MeshLineMaterial});const _=o.useThree((e=>e.invalidate)),L=T.useRef(null),z=T.useRef(null),k=T.useRef(null),F=T.useRef(null),A=T.useRef([0,0,0]);T.useLayoutEffect((()=>{i&&(F.current.updateWorldMatrix(!0,!0),po.copy(F.current.matrixWorld).invert(),yo.makeEmpty(),F.current.traverse((e=>{e.geometry&&(e.geometry.boundingBox||e.geometry.computeBoundingBox(),vo.copy(e.matrixWorld).premultiply(po),wo.copy(e.geometry.boundingBox),wo.applyMatrix4(vo),yo.union(wo))})),Eo.copy(yo.max).add(yo.min).multiplyScalar(.5),bo.copy(yo.max).sub(yo.min).multiplyScalar(.5),Mo.copy(bo).multiply(new P.Vector3(...i)).add(Eo),So.set(...d).add(Mo),k.current.position.copy(So),_())}));const B=T.useMemo((()=>({onDragStart:e=>{uo.copy(z.current.matrix),mo.copy(z.current.matrixWorld),t&&t(e),_()},onDrag:e=>{fo.copy(L.current.matrixWorld),po.copy(fo).invert(),ho.copy(mo).premultiply(e),vo.copy(ho).premultiply(po),go.copy(uo).invert(),xo.copy(vo).multiply(go),a&&z.current.matrix.copy(vo),r&&r(vo,xo,ho,e),_()},onDragEnd:()=>{n&&n(),_()},translation:A,translationLimits:g,rotationLimits:x,axisColors:w,hoveredColor:E,opacity:M,scale:f,lineWidth:h,fixed:v,displayValues:b,depthTest:y,userData:C})),[t,r,n,A,g,x,y,f,h,v,...w,E,M,b,C,a]),U=new P.Vector3;return o.useFrame((e=>{if(v){const o=lo(k.current.getWorldPosition(U),f,e.camera,e.size);var t,r,n;if(k.current)(null==(t=k.current)?void 0:t.scale.x)===o&&(null==(r=k.current)?void 0:r.scale.y)===o&&(null==(n=k.current)?void 0:n.scale.z)===o||(k.current.scale.setScalar(o),e.invalidate())}})),T.useImperativeHandle(D,(()=>z.current),[]),T.createElement(On.Provider,{value:B},T.createElement("group",{ref:L},T.createElement("group",{ref:z,matrix:e,matrixAutoUpdate:!1},T.createElement("group",{visible:S,ref:k,position:d,rotation:m},!s&&u[0]&&T.createElement(Hn,{axis:0,direction:To}),!s&&u[1]&&T.createElement(Hn,{axis:1,direction:Co}),!s&&u[2]&&T.createElement(Hn,{axis:2,direction:Po}),!c&&u[0]&&u[1]&&T.createElement(Zn,{axis:2,dir1:To,dir2:Co}),!c&&u[0]&&u[2]&&T.createElement(Zn,{axis:1,dir1:Po,dir2:To}),!c&&u[2]&&u[1]&&T.createElement(Zn,{axis:0,dir1:Co,dir2:Po}),!l&&u[0]&&u[1]&&T.createElement(oo,{axis:2,dir1:To,dir2:Co}),!l&&u[0]&&u[2]&&T.createElement(oo,{axis:1,dir1:Po,dir2:To}),!l&&u[2]&&u[1]&&T.createElement(oo,{axis:0,dir1:Co,dir2:Po})),T.createElement("group",{ref:F},R))))}));exports.AccumulativeShadows=_r,exports.AdaptiveDpr=function({pixelated:e}){const t=o.useThree((e=>e.gl)),r=o.useThree((e=>e.internal.active)),n=o.useThree((e=>e.performance.current)),a=o.useThree((e=>e.viewport.initialDpr)),i=o.useThree((e=>e.setDpr));return T.useEffect((()=>{const n=t.domElement;return()=>{r&&i(a),e&&n&&(n.style.imageRendering="auto")}}),[]),T.useEffect((()=>{i(n*a),e&&t.domElement&&(t.domElement.style.imageRendering=1===n?"auto":"pixelated")}),[n]),null},exports.AdaptiveEvents=function(){const e=o.useThree((e=>e.get)),t=o.useThree((e=>e.setEvents)),r=o.useThree((e=>e.performance.current));return T.useEffect((()=>{const r=e().events.enabled;return()=>t({enabled:r})}),[]),T.useEffect((()=>t({enabled:1===r})),[r]),null},exports.ArcballControls=Ne,exports.BBAnchor=({anchor:e,...t})=>{const r=T.useRef(null),n=T.useRef(null);return T.useEffect((()=>{var e,t;null!=(e=r.current)&&null!=(t=e.parent)&&t.parent&&(n.current=r.current.parent,r.current.parent.parent.add(r.current))}),[]),o.useFrame((()=>{n.current&&(Ct.setFromObject(n.current),Ct.getSize(Pt),r.current.position.set(n.current.position.x+Pt.x*e[0]/2,n.current.position.y+Pt.y*e[1]/2,n.current.position.z+Pt.z*e[2]/2))})),T.createElement("group",S.default({ref:r},t))},exports.Backdrop=function({children:e,floor:t=.25,segments:r=20,receiveShadow:n,...o}){const a=T.useRef(null);return T.useLayoutEffect((()=>{let e=0;const n=r/r/2,o=a.current.attributes.position;for(let a=0;a<r+1;a++)for(let i=0;i<r+1;i++)o.setXYZ(e++,a/r-n+(0===a?-t:0),i/r-n,Tr(a/r));o.needsUpdate=!0,a.current.computeVertexNormals()}),[r,t]),T.createElement("group",o,T.createElement("mesh",{receiveShadow:n,rotation:[-Math.PI/2,0,Math.PI/2]},T.createElement("planeGeometry",{ref:a,args:[1,1,r,r]}),e))},exports.BakeShadows=function(){const e=o.useThree((e=>e.gl));return t.useEffect((()=>(e.shadowMap.autoUpdate=!1,e.shadowMap.needsUpdate=!0,()=>{e.shadowMap.autoUpdate=e.shadowMap.needsUpdate=!0})),[e.shadowMap]),null},exports.Billboard=ne,exports.Bounds=function({children:e,damping:t=6,fit:r,clip:n,observe:a,margin:i=1.2,eps:s=.01,onFit:c}){const l=T.useRef(null),{camera:u,invalidate:d,size:m,controls:f}=o.useThree(),p=f,h=T.useRef(c);function v(e,t){return Math.abs(e.x-t.x)<s&&Math.abs(e.y-t.y)<s&&Math.abs(e.z-t.z)<s}function g(e,t,r,n){e.x=P.MathUtils.damp(e.x,t.x,r,n),e.y=P.MathUtils.damp(e.y,t.y,r,n),e.z=P.MathUtils.damp(e.z,t.z,r,n)}h.current=c;const[x]=T.useState((()=>({animating:!1,focus:new P.Vector3,camera:new P.Vector3,zoom:1}))),[y]=T.useState((()=>({focus:new P.Vector3,camera:new P.Vector3,zoom:1}))),[w]=T.useState((()=>new P.Box3)),E=T.useMemo((()=>{function e(){const e=w.getSize(new P.Vector3),t=w.getCenter(new P.Vector3),r=Math.max(e.x,e.y,e.z),n=dr(u)?4*r:r/(2*Math.atan(Math.PI*u.fov/360)),o=dr(u)?4*r:n/u.aspect,a=i*Math.max(n,o);return{box:w,size:e,center:t,distance:a}}return{getSize:e,refresh(t){if((r=t)&&r.isBox3)w.copy(t);else{const e=t||l.current;e.updateWorldMatrix(!0,!0),w.setFromObject(e)}var r;if(w.isEmpty()){const e=u.position.length()||10;w.setFromCenterAndSize(new P.Vector3,new P.Vector3(e,e,e))}if("OrthographicTrackballControls"===(null==p?void 0:p.constructor.name)){const{distance:t}=e(),r=u.position.clone().sub(p.target).normalize().multiplyScalar(t),n=p.target.clone().add(r);u.position.copy(n)}return this},clip(){const{distance:t}=e();return p&&(p.maxDistance=10*t),u.near=t/100,u.far=100*t,u.updateProjectionMatrix(),p&&p.update(),d(),this},fit(){x.camera.copy(u.position),p&&x.focus.copy(p.target);const{center:r,distance:n}=e(),o=r.clone().sub(u.position).normalize().multiplyScalar(n);if(y.camera.copy(r).sub(o),y.focus.copy(r),dr(u)){x.zoom=u.zoom;let e=0,n=0;const o=[new P.Vector3(w.min.x,w.min.y,w.min.z),new P.Vector3(w.min.x,w.max.y,w.min.z),new P.Vector3(w.min.x,w.min.y,w.max.z),new P.Vector3(w.min.x,w.max.y,w.max.z),new P.Vector3(w.max.x,w.max.y,w.max.z),new P.Vector3(w.max.x,w.max.y,w.min.z),new P.Vector3(w.max.x,w.min.y,w.max.z),new P.Vector3(w.max.x,w.min.y,w.min.z)];r.applyMatrix4(u.matrixWorldInverse);for(const t of o)t.applyMatrix4(u.matrixWorldInverse),e=Math.max(e,Math.abs(t.y-r.y)),n=Math.max(n,Math.abs(t.x-r.x));e*=2,n*=2;const a=(u.top-u.bottom)/e,s=(u.right-u.left)/n;y.zoom=Math.min(a,s)/i,t||(u.zoom=y.zoom,u.updateProjectionMatrix())}return t?x.animating=!0:(u.position.copy(y.camera),u.lookAt(y.focus),p&&(p.target.copy(y.focus),p.update())),h.current&&h.current(this.getSize()),d(),this}}}),[w,u,p,i,t,d]);T.useLayoutEffect((()=>{if(p){const e=()=>x.animating=!1;return p.addEventListener("start",e),()=>p.removeEventListener("start",e)}}),[p]);const b=T.useRef(0);return T.useLayoutEffect((()=>{(a||0==b.current++)&&(E.refresh(),r&&E.fit(),n&&E.clip())}),[m,n,r,a,u,p]),o.useFrame(((e,r)=>{if(x.animating){if(g(x.focus,y.focus,t,r),g(x.camera,y.camera,t,r),x.zoom=P.MathUtils.damp(x.zoom,y.zoom,t,r),u.position.copy(x.camera),dr(u)&&(u.zoom=x.zoom,u.updateProjectionMatrix()),p?(p.target.copy(x.focus),p.update()):u.lookAt(x.focus),d(),dr(u)&&!(Math.abs(x.zoom-y.zoom)<s))return;if(!dr(u)&&!v(x.camera,y.camera))return;if(p&&!v(x.focus,y.focus))return;x.animating=!1}})),T.createElement("group",{ref:l},T.createElement(mr.Provider,{value:E},e))},exports.Box=Wt,exports.CameraShake=fr,exports.Capsule=ar,exports.CatmullRomLine=ce,exports.Center=ur,exports.Circle=Nt,exports.Clone=Re,exports.Cloud=function({opacity:e=.5,speed:t=.4,width:r=10,depth:n=1.5,segments:a=20,texture:i="https://rawcdn.githack.com/pmndrs/drei-assets/9225a9f1fbd449d9411125c2f419b843d0308c9f/cloud.png",color:s="#ffffff",depthTest:c=!0,...l}){const u=o.useThree((e=>e.gl)),d=T.useRef(),m=ve(i),f=T.useMemo((()=>[...new Array(a)].map(((e,n)=>({x:r/2-Math.random()*r,y:r/2-Math.random()*r,scale:.4+Math.sin((n+1)/a*Math.PI)*(10*(.2+Math.random())),density:Math.max(.2,Math.random()),rotation:Math.max(.002,.005*Math.random())*t})))),[r,a,t]);return o.useFrame((e=>{var t;return null==(t=d.current)?void 0:t.children.forEach(((t,r)=>{t.children[0].rotation.z+=f[r].rotation,t.children[0].scale.setScalar(f[r].scale+(1+Math.sin(e.clock.getElapsedTime()/10))/2*r/10)}))})),T.createElement("group",l,T.createElement("group",{position:[0,0,a/2*n],ref:d},f.map((({x:t,y:r,scale:o,density:a},i)=>T.createElement(ne,{key:i,position:[t,r,-i*n]},T.createElement(qt,{scale:o,rotation:[0,0,0]},T.createElement("meshStandardMaterial",{map:m,"map-encoding":u.outputEncoding,transparent:!0,opacity:o/6*a*e,depthTest:c,color:s})))))))},exports.ComputedAttribute=({compute:e,name:t,...r})=>{const[o]=T.useState((()=>new n.BufferAttribute(new Float32Array(0),1))),a=T.useRef(null);return T.useLayoutEffect((()=>{if(a.current){var t;const r=null!==(t=a.current.parent)&&void 0!==t?t:a.current.__r3f.parent,n=e(r);a.current.copy(n)}}),[e]),T.createElement("primitive",S.default({ref:a,object:o,attach:`attributes-${t}`},r))},exports.Cone=Gt,exports.ContactShadows=Mr,exports.CubeCamera=function({children:e,fog:t,frames:r=1/0,resolution:a=256,near:i=.1,far:s=1e3,envMap:c,...l}){const u=T.useRef(),[d,m]=T.useState(null),f=o.useThree((({scene:e})=>e)),p=o.useThree((({gl:e})=>e)),h=T.useMemo((()=>{const e=new n.WebGLCubeRenderTarget(a);return e.texture.encoding=p.outputEncoding,e.texture.type=n.HalfFloatType,e}),[a]);let v,g,x=0;return o.useFrame((()=>{d&&u.current&&(r===1/0||x<r)&&(u.current.visible=!1,v=f.fog,g=f.background,f.background=c||g,f.fog=t||v,d.update(p,f),f.fog=v,f.background=g,u.current.visible=!0,x++)})),T.createElement("group",l,T.createElement("cubeCamera",{ref:m,args:[i,s,h]}),T.createElement("group",{ref:u},e(h.texture)))},exports.CubicBezierLine=se,exports.CurveModifier=Rt,exports.CycleRaycast=function({onChanged:e,portal:t,preventDefault:r=!0,scroll:n=!0,keyCode:a=9}){const i=T.useRef(0),s=o.useThree((e=>e.setEvents)),c=o.useThree((e=>e.get)),l=o.useThree((e=>e.gl));return T.useEffect((()=>{var o;let u,d=[];const m=c().events.filter,f=null!==(o=null==t?void 0:t.current)&&void 0!==o?o:l.domElement.parentNode,p=()=>f&&e&&e(d,Math.round(i.current)%d.length);s({filter:(e,t)=>{let r=[...e];r.length===d.length&&d.every((e=>r.map((e=>e.object.uuid)).includes(e.object.uuid)))||(i.current=0,d=r,p()),m&&(r=m(r,t));for(let e=0;e<Math.round(i.current)%r.length;e++){const e=r.shift();r=[...r,e]}return r}});const h=e=>{var t,r;i.current=e(i.current),null==(t=c().events.handlers)||t.onPointerCancel(void 0),null==(r=c().events.handlers)||r.onPointerMove(u),p()},v=e=>{(e.keyCode||e.which===a)&&(r&&e.preventDefault(),d.length>1&&h((e=>e+1)))},g=e=>{r&&e.preventDefault();let t=0;e||(e=window.event),e.wheelDelta?t=e.wheelDelta/120:e.detail&&(t=-e.detail/3),d.length>1&&h((e=>Math.abs(e-t)))},x=e=>u=e;return document.addEventListener("pointermove",x,{passive:!0}),n&&document.addEventListener("wheel",g),void 0!==a&&document.addEventListener("keydown",v),()=>{s({filter:m}),void 0!==a&&document.removeEventListener("keydown",v),n&&document.removeEventListener("wheel",g),document.removeEventListener("pointermove",x)}}),[l,c,s,r,n,a]),null},exports.Cylinder=Ht,exports.Decal=function({debug:e,mesh:t,children:r,position:n,rotation:a,scale:i,...s}){const c=T.useRef(null),l=T.useRef(null);return T.useLayoutEffect((()=>{const e=(null==t?void 0:t.current)||c.current.parent,r=c.current;if(!(e instanceof P.Mesh))throw new Error('Decal must have a Mesh as parent or specify its "mesh" prop');const s={position:new P.Vector3,rotation:new P.Euler,scale:new P.Vector3(1,1,1)};if(e){o.applyProps(s,{position:n,scale:i});const t=e.matrixWorld.clone();if(e.matrixWorld.identity(),a&&"number"!=typeof a)o.applyProps(s,{rotation:a});else{const t=new P.Object3D;t.position.copy(s.position),t.lookAt(e.position),"number"==typeof a&&t.rotateZ(a),o.applyProps(s,{rotation:t.rotation})}return r.geometry=new u.DecalGeometry(e,s.position,s.rotation,s.scale),l.current&&o.applyProps(l.current,s),e.matrixWorld=t,()=>{r.geometry.dispose()}}}),[t,...ke(n),...ke(i),...ke(a)]),T.createElement("mesh",{ref:c},r||T.createElement("meshStandardMaterial",S.default({transparent:!0,polygonOffset:!0,polygonOffsetFactor:-10},s)),e&&T.createElement("mesh",{ref:l},T.createElement("boxGeometry",null),T.createElement("meshNormalMaterial",{wireframe:!0}),T.createElement("axesHelper",null)))},exports.Detailed=_n,exports.DeviceOrientationControls=Ve,exports.Dodecahedron=rr,exports.Edges=function({userData:e,children:t,geometry:r,threshold:n=15,color:o="black",...a}){const i=T.useRef(null);return T.useLayoutEffect((()=>{const e=i.current.parent;if(e){const t=r||e.geometry;t===i.current.userData.currentGeom&&n===i.current.userData.currentThreshold||(i.current.userData.currentGeom=t,i.current.userData.currentThreshold=n,i.current.geometry=new P.EdgesGeometry(t,n))}})),T.createElement("lineSegments",S.default({ref:i,raycast:()=>null},a),t||T.createElement("lineBasicMaterial",{color:o}))},exports.Effects=fe,exports.Environment=br,exports.EnvironmentCube=yr,exports.EnvironmentMap=gr,exports.EnvironmentPortal=wr,exports.Extrude=nr,exports.FirstPersonControls=$e,exports.Float=pr,exports.FlyControls=Ie,exports.GizmoHelper=({alignment:e="bottom-right",margin:t=[80,80],renderPriority:r=0,autoClear:a=!0,onUpdate:i,onTarget:s,children:c})=>{const l=o.useThree((({size:e})=>e)),u=o.useThree((({camera:e})=>e)),d=o.useThree((({controls:e})=>e)),m=o.useThree((({gl:e})=>e)),f=o.useThree((({scene:e})=>e)),p=o.useThree((({invalidate:e})=>e)),h=T.useRef(),v=T.useRef(),g=T.useRef(null),[x]=T.useState((()=>new n.Scene)),y=T.useRef(!1),w=T.useRef(0),E=T.useRef(new n.Vector3(0,0,0)),b=T.useRef(new n.Vector3(0,0,0));T.useEffect((()=>{b.current.copy(u.up)}),[u]);const M=T.useCallback((e=>{y.current=!0,(d||s)&&(E.current=(null==d?void 0:d.target)||(null==s?void 0:s())),w.current=u.position.distanceTo(tt),Je.copy(u.quaternion),rt.copy(e).multiplyScalar(w.current).add(tt),Ke.lookAt(rt),et.copy(Ke.quaternion),p()}),[d,u,s,p]);T.useEffect((()=>(f.background&&(h.current=f.background,f.background=null,x.background=h.current),()=>{h.current&&(f.background=h.current)})),[]),o.useFrame(((e,t)=>{if(g.current&&v.current){var r;if(y.current)if(Je.angleTo(et)<.01)y.current=!1,"minPolarAngle"in d&&u.up.copy(b.current);else{const e=t*Ye;Je.rotateTowards(et,e),u.position.set(0,0,1).applyQuaternion(Je).multiplyScalar(w.current).add(E.current),u.up.set(0,1,0).applyQuaternion(Je).normalize(),u.quaternion.copy(Je),i?i():d&&d.update(),p()}Qe.copy(u.matrix).invert(),null==(r=v.current)||r.quaternion.setFromRotationMatrix(Qe),a&&(m.autoClear=!1),m.clearDepth(),m.render(x,g.current)}}),r);const S=qe(g),C=T.useMemo((()=>({tweenCamera:M,raycast:S})),[M]),[P,R]=t,D=e.endsWith("-center")?0:e.endsWith("-left")?-l.width/2+P:l.width/2-P,_=e.startsWith("center-")?0:e.startsWith("top-")?l.height/2-R:-l.height/2+R;return o.createPortal(T.createElement(Xe.Provider,{value:C},T.createElement(Be,{ref:g,position:[0,0,200]}),T.createElement("group",{ref:v,position:[D,_,0]},c)),x)},exports.GizmoViewcube=e=>T.createElement("group",{scale:[60,60,60]},T.createElement(pt,e),dt.map(((t,r)=>T.createElement(ht,S.default({key:r,position:t,dimensions:mt[r]},e)))),lt.map(((t,r)=>T.createElement(ht,S.default({key:r,position:t,dimensions:ut},e)))),T.createElement("ambientLight",{intensity:.5}),T.createElement("pointLight",{position:[10,10,10],intensity:.5})),exports.GizmoViewport=({hideNegativeAxes:e,hideAxisHeads:t,disabled:r,font:n="18px Inter var, Arial, sans-serif",axisColors:o=["#ff2060","#20df80","#2080ff"],axisHeadScale:a=1,axisScale:i,labels:s=["X","Y","Z"],labelColor:c="#000",onClick:l,...u})=>{const[d,m,f]=o,{tweenCamera:p,raycast:h}=Ze(),v={font:n,disabled:r,labelColor:c,raycast:h,onClick:l,axisHeadScale:a,onPointerDown:r?void 0:e=>{p(e.object.position),e.stopPropagation()}};return T.createElement("group",S.default({scale:40},u),T.createElement(vt,{color:d,rotation:[0,0,0],scale:i}),T.createElement(vt,{color:m,rotation:[0,0,Math.PI/2],scale:i}),T.createElement(vt,{color:f,rotation:[0,-Math.PI/2,0],scale:i}),!t&&T.createElement(T.Fragment,null,T.createElement(gt,S.default({arcStyle:d,position:[1,0,0],label:s[0]},v)),T.createElement(gt,S.default({arcStyle:m,position:[0,1,0],label:s[1]},v)),T.createElement(gt,S.default({arcStyle:f,position:[0,0,1],label:s[2]},v)),!e&&T.createElement(T.Fragment,null,T.createElement(gt,S.default({arcStyle:d,position:[-1,0,0]},v)),T.createElement(gt,S.default({arcStyle:m,position:[0,-1,0]},v)),T.createElement(gt,S.default({arcStyle:f,position:[0,0,-1]},v)))),T.createElement("ambientLight",{intensity:.5}),T.createElement("pointLight",{position:[10,10,10],intensity:.5}))},exports.GradientTexture=function({stops:e,colors:t,size:r=1024,...n}){const a=o.useThree((e=>e.gl)),i=T.useMemo((()=>{const n=document.createElement("canvas"),o=n.getContext("2d");n.width=16,n.height=r;const a=o.createLinearGradient(0,0,0,r);let i=e.length;for(;i--;)a.addColorStop(e[i],t[i]);o.fillStyle=a,o.fillRect(0,0,16,r);const s=new P.Texture(n);return s.needsUpdate=!0,s}),[e]);return T.useEffect((()=>()=>{i.dispose()}),[i]),T.createElement("primitive",S.default({object:i,attach:"map",encoding:a.outputEncoding},n))},exports.Html=H,exports.Icosahedron=er,exports.Image=Ee,exports.Instance=bn,exports.Instances=Mn,exports.IsObject=he,exports.KeyboardControls=function({map:e,children:t,onChange:r,domElement:n}){const o=e.map((e=>e.name+e.keys)).join("-"),a=T.useMemo((()=>R.default(l.subscribeWithSelector((()=>e.reduce(((e,t)=>({...e,[t.name]:!1})),{}))))),[o]),i=T.useMemo((()=>[a.subscribe,a.getState,a]),[o]),s=a.setState;return T.useEffect((()=>{const t=e.map((({name:e,keys:t,up:n})=>({keys:t,up:n,fn:t=>{s({[e]:t}),r&&r(e,t,i[2]())}}))).reduce(((e,{keys:t,fn:r,up:n=!0})=>(t.forEach((t=>e[t]={fn:r,pressed:!1,up:n})),e)),{}),o=({key:e,code:r})=>{const n=t[e]||t[r];if(!n)return;const{fn:o,pressed:a,up:i}=n;n.pressed=!0,!i&&a||o(!0)},a=({key:e,code:r})=>{const n=t[e]||t[r];if(!n)return;const{fn:o,up:a}=n;n.pressed=!1,a&&o(!1)},c=n||window;return c.addEventListener("keydown",o,{passive:!0}),c.addEventListener("keyup",a,{passive:!0}),()=>{c.removeEventListener("keydown",o),c.removeEventListener("keyup",a)}}),[n,o]),T.createElement(te.Provider,{value:i,children:t})},exports.Lathe=or,exports.Lightformer=Ur,exports.Line=oe,exports.Loader=function({containerStyles:e,innerStyles:t,barStyles:r,dataStyles:n,dataInterpolation:o=X,initialState:a=(e=>e)}){const{active:i,progress:s}=q(),c=T.useRef(0),l=T.useRef(0),u=T.useRef(null),[d,m]=T.useState(a(i));T.useEffect((()=>{let e;return i!==d&&(e=setTimeout((()=>m(i)),300)),()=>clearTimeout(e)}),[d,i]);const f=T.useCallback((()=>{u.current&&(c.current+=(s-c.current)/2,(c.current>.95*s||100===s)&&(c.current=s),u.current.innerText=o(c.current),c.current<s&&(l.current=requestAnimationFrame(f)))}),[o,s]);return T.useEffect((()=>(f(),()=>cancelAnimationFrame(l.current))),[f]),d?T.createElement("div",{style:{...Z.container,opacity:i?1:0,...e}},T.createElement("div",null,T.createElement("div",{style:{...Z.inner,...t}},T.createElement("div",{style:{...Z.bar,transform:`scaleX(${s/100})`,...r}}),T.createElement("span",{ref:u,style:{...Z.data,...n}})))):null},exports.MapControls=Oe,exports.MarchingCube=Le,exports.MarchingCubes=_e,exports.MarchingPlane=ze,exports.Mask=function({id:e=1,children:t,colorWrite:r=!1,depthWrite:n=!1,...o}){const a=T.useMemo((()=>({colorWrite:r,depthWrite:n,stencilWrite:!0,stencilRef:e,stencilFunc:P.AlwaysStencilFunc,stencilFail:P.ReplaceStencilOp,stencilZFail:P.ReplaceStencilOp,stencilZPass:P.ReplaceStencilOp})),[e,r,n]);return T.createElement("mesh",S.default({renderOrder:-e},o),T.createElement("meshBasicMaterial",a),"function"==typeof t?t(a):t)},exports.Merged=Sn,exports.MeshDistortMaterial=_t,exports.MeshReflectorMaterial=Bt,exports.MeshRefractionMaterial=function({aberrationStrength:e=0,fastChroma:r=!0,envMap:n,...a}){o.extend({MeshRefractionMaterial:Ut});const i=t.useRef(),{size:s}=o.useThree(),c=t.useMemo((()=>{var t,o;const a={},i=(s=n)&&s.isCubeTexture;var s;const c=(null!==(t=i?null==(o=n.image[0])?void 0:o.width:n.image.width)&&void 0!==t?t:1024)/4,l=Math.floor(Math.log2(c)),u=Math.pow(2,l),d=3*Math.max(u,112),m=4*u;return i&&(a.ENVMAP_TYPE_CUBEM=""),a.CUBEUV_TEXEL_WIDTH=""+1/d,a.CUBEUV_TEXEL_HEIGHT=""+1/m,a.CUBEUV_MAX_MIP=`${l}.0`,e>0&&(a.CHROMATIC_ABERRATIONS=""),r&&(a.FAST_CHROMA=""),a}),[e,r]);return t.useLayoutEffect((()=>{var e,t,r;const n=null==(e=i.current)||null==(t=e.__r3f)||null==(r=t.parent)?void 0:r.geometry;n&&i.current.bvh.updateFrom(new y.MeshBVH(n.toNonIndexed(),{lazyGeneration:!1,strategy:y.SAH}))}),[]),T.createElement("meshRefractionMaterial",S.default({key:JSON.stringify(c),defines:c,ref:i,resolution:[s.width,s.height],aberrationStrength:e,envMap:n},a))},exports.MeshWobbleMaterial=zt,exports.Octahedron=tr,exports.OrbitControls=je,exports.OrthographicCamera=Be,exports.PerformanceMonitor=function({iterations:e=10,ms:r=250,threshold:n=.75,step:a=.1,factor:i=.5,flipflops:s=1/0,bounds:c=(e=>e>100?[60,100]:[40,60]),onIncline:l,onDecline:u,onChange:d,onFallback:m,children:f}){const p=Math.pow(10,0),[h,v]=t.useState((()=>({fps:0,index:0,factor:i,flipped:0,refreshrate:0,fallback:!1,frames:[],averages:[],subscriptions:new Map,subscribe:e=>{const t=Symbol();return h.subscriptions.set(t,e.current),()=>{h.subscriptions.delete(t)}}})));let g=0;return o.useFrame((()=>{const{frames:t,averages:o}=h;if(!h.fallback&&o.length<e){t.push(performance.now());const i=t[t.length-1]-t[0];if(i>=r){if(h.fps=Math.round(t.length/i*1e3*p)/p,h.refreshrate=Math.max(h.refreshrate,h.fps),o[h.index++%e]=h.fps,o.length===e){const[t,r]=c(h.refreshrate),i=o.filter((e=>e>=r)),f=o.filter((e=>e<t));i.length>e*n&&(h.factor=Math.min(1,h.factor+a),h.flipped++,l&&l(h),h.subscriptions.forEach((e=>e.onIncline&&e.onIncline(h)))),f.length>e*n&&(h.factor=Math.max(0,h.factor-a),h.flipped++,u&&u(h),h.subscriptions.forEach((e=>e.onDecline&&e.onDecline(h)))),g!==h.factor&&(g=h.factor,d&&d(h),h.subscriptions.forEach((e=>e.onChange&&e.onChange(h)))),h.flipped>s&&!h.fallback&&(h.fallback=!0,m&&m(h),h.subscriptions.forEach((e=>e.onFallback&&e.onFallback(h)))),h.averages=[]}h.frames=[]}}})),T.createElement(An.Provider,{value:h},f)},exports.PerspectiveCamera=Ue,exports.PivotControls=Ro,exports.Plane=qt,exports.Point=sn,exports.PointMaterial=It,exports.PointMaterialImpl=Vt,exports.PointerLockControls=He,exports.Points=ln,exports.PointsBuffer=cn,exports.Polyhedron=Jt,exports.PositionPoint=Jr,exports.PositionalAudio=le,exports.Preload=function({all:e,scene:t,camera:r}){const a=o.useThree((({gl:e})=>e)),i=o.useThree((({camera:e})=>e)),s=o.useThree((({scene:e})=>e));return T.useLayoutEffect((()=>{const o=[];e&&(t||s).traverse((e=>{!1===e.visible&&(o.push(e),e.visible=!0)})),a.compile(t||s,r||i);const c=new n.WebGLCubeRenderTarget(128);new n.CubeCamera(.01,1e5,c).update(a,t||s),c.dispose(),o.forEach((e=>e.visible=!1))}),[]),null},exports.PresentationControls=function({enabled:e=!0,snap:t,global:r,cursor:a=!0,children:i,speed:l=1,rotation:u=[0,0,0],zoom:d=1,polar:m=[0,Math.PI/2],azimuth:f=[-1/0,1/0],config:p={mass:1,tension:170,friction:26}}){const{size:h,gl:v}=o.useThree(),g=T.useMemo((()=>[u[0]+m[0],u[0]+m[1]]),[u[0],m[0],m[1]]),x=T.useMemo((()=>[u[1]+f[0],u[1]+f[1]]),[u[1],f[0],f[1]]),y=T.useMemo((()=>[n.MathUtils.clamp(u[0],...g),n.MathUtils.clamp(u[1],...x),u[2]]),[u[0],u[1],u[2],g,x]),[w,E]=s.useSpring((()=>({scale:1,rotation:y,config:p})));T.useEffect((()=>{E.start({scale:1,rotation:y,config:p})}),[y]),T.useEffect((()=>(r&&a&&e&&(v.domElement.style.cursor="grab"),()=>{v.domElement.style.cursor="default"})),[r,a,v.domElement,e]);const b=c.useGesture({onHover:({last:t})=>{a&&!r&&e&&(v.domElement.style.cursor=t?"auto":"grab")},onDrag:({down:r,delta:[o,i],memo:[s,c]=w.rotation.animation.to||y})=>{if(!e)return[i,o];a&&(v.domElement.style.cursor=r?"grabbing":"grab"),o=n.MathUtils.clamp(c+o/h.width*Math.PI*l,...x),i=n.MathUtils.clamp(s+i/h.height*Math.PI*l,...g);const u=t&&!r&&"boolean"!=typeof t?t:p;return E.start({scale:r&&i>g[1]/2?d:1,rotation:t&&!r?y:[i,o,0],config:e=>"scale"===e?{...u,friction:3*u.friction}:u}),[i,o]}},{target:r?v.domElement:void 0});return T.createElement(s.a.group,S.default({},null==b?void 0:b(),w),i)},exports.QuadraticBezierLine=ie,exports.RandomizedLight=Lr,exports.Reflector=kr,exports.RenderTexture=Bn,exports.Ring=Qt,exports.RoundedBox=sr,exports.Sampler=function({children:e,weight:t,transform:r,instances:n,mesh:o,count:a=16,...i}){const s=T.useRef(null),c=T.useRef(null),l=T.useRef(null);return T.useEffect((()=>{var e,t;c.current=null!==(e=null==n?void 0:n.current)&&void 0!==e?e:s.current.children.find((e=>e.hasOwnProperty("instanceMatrix"))),l.current=null!==(t=null==o?void 0:o.current)&&void 0!==t?t:s.current.children.find((e=>"Mesh"===e.type))}),[e,null==o?void 0:o.current,null==n?void 0:n.current]),Ce(l,a,r,t,c),T.createElement("group",S.default({ref:s},i),e)},exports.ScreenQuad=lr,exports.Scroll=ee,exports.ScrollControls=function({eps:e=1e-5,enabled:t=!0,infinite:r,horizontal:n,pages:a=1,distance:i=1,damping:s=4,style:c={},children:l}){const{get:u,setEvents:d,gl:m,size:f,invalidate:p,events:h}=o.useThree(),[v]=T.useState((()=>document.createElement("div"))),[g]=T.useState((()=>document.createElement("div"))),[x]=T.useState((()=>document.createElement("div"))),y=m.domElement.parentNode,w=T.useRef(0),E=T.useMemo((()=>{const t={el:v,eps:e,fill:g,fixed:x,horizontal:n,damping:s,offset:0,delta:0,scroll:w,pages:a,range(e,t,r=0){const n=e-r,o=n+t+2*r;return this.offset<n?0:this.offset>o?1:(this.offset-n)/(o-n)},curve(e,t,r=0){return Math.sin(this.range(e,t,r)*Math.PI)},visible(e,t,r=0){const n=e-r,o=n+t+2*r;return this.offset>=n&&this.offset<=o}};return t}),[e,s,n,a]);T.useEffect((()=>{v.style.position="absolute",v.style.width="100%",v.style.height="100%",v.style[n?"overflowX":"overflowY"]="auto",v.style[n?"overflowY":"overflowX"]="hidden",v.style.top="0px",v.style.left="0px";for(const e in c)v.style[e]=c[e];x.style.position="sticky",x.style.top="0px",x.style.left="0px",x.style.width="100%",x.style.height="100%",x.style.overflow="hidden",v.appendChild(x),g.style.height=n?"100%":a*i*100+"%",g.style.width=n?a*i*100+"%":"100%",g.style.pointerEvents="none",v.appendChild(g),y.appendChild(v),v[n?"scrollLeft":"scrollTop"]=1;const e=h.connected||m.domElement;requestAnimationFrame((()=>null==h.connect?void 0:h.connect(v)));const t=u().events.compute;return d({compute(e,t){const r=e.clientX-y.offsetLeft,n=e.clientY-y.offsetTop;t.pointer.set(r/t.size.width*2-1,-n/t.size.height*2+1),t.raycaster.setFromCamera(t.pointer,t.camera)}}),()=>{y.removeChild(v),d({compute:t}),null==h.connect||h.connect(e)}}),[a,i,n,v,g,x,y]),T.useEffect((()=>{if(h.connected===v){const e=f[n?"width":"height"],o=v[n?"scrollWidth":"scrollHeight"],a=o-e;let i=0,s=!0,c=!0;const l=()=>{if(t&&!c&&(p(),i=v[n?"scrollLeft":"scrollTop"],w.current=i/a,r)){if(!s)if(i>=a){const e=1-E.offset;v[n?"scrollLeft":"scrollTop"]=1,w.current=E.offset=-e,s=!0}else if(i<=0){const e=1+E.offset;v[n?"scrollLeft":"scrollTop"]=o,w.current=E.offset=e,s=!0}s&&setTimeout((()=>s=!1),40)}};v.addEventListener("scroll",l,{passive:!0}),requestAnimationFrame((()=>c=!1));const u=e=>v.scrollLeft+=e.deltaY/2;return n&&v.addEventListener("wheel",u,{passive:!0}),()=>{v.removeEventListener("scroll",l),n&&v.removeEventListener("wheel",u)}}}),[v,h,f,r,E,p,n,t]);let b=0;return o.useFrame(((t,r)=>{E.offset=P.MathUtils.damp(b=E.offset,w.current,s,r),E.delta=P.MathUtils.damp(E.delta,Math.abs(b-E.offset),s,r),E.delta>e&&p()})),T.createElement(Y.Provider,{value:E},l)},exports.Segment=Dn,exports.SegmentObject=Pn,exports.Segments=Cn,exports.Select=function({box:e,multiple:t,children:r,onChange:n,border:a="1px solid #55aaff",backgroundColor:i="rgba(75, 160, 255, 0.1)",filter:s=(e=>e),...c}){const{setEvents:l,camera:d,raycaster:m,gl:f,controls:p,size:h,get:v}=o.useThree(),[g,x]=T.useState(!1),[y,w]=T.useReducer(((e,{object:t,shift:r})=>void 0===t?[]:Array.isArray(t)?t:r?e.includes(t)?e.filter((e=>e!==t)):[t,...e]:e[0]===t?[]:[t]),[]);T.useEffect((()=>{null==n||n(y)}),[y]);const E=T.useCallback((e=>{e.stopPropagation(),w({object:s([e.object])[0],shift:t&&e.shiftKey})}),[]),b=T.useCallback((e=>!g&&w({})),[g]),M=T.useRef(null);return T.useEffect((()=>{if(!e||!t)return;const r=new u.SelectionBox(d,M.current),n=document.createElement("div");n.style.pointerEvents="none",n.style.border=a,n.style.backgroundColor=i,n.style.position="fixed";const o=new P.Vector2,c=new P.Vector2,m=new P.Vector2,g=v().events.enabled,x=null==p?void 0:p.enabled;let y=!1;function E(e,t){const{offsetX:r,offsetY:n}=e,{width:o,height:a}=h;t.set(r/o*2-1,-n/a*2+1)}function b(e){e.shiftKey&&(!function(e){var t;p&&(p.enabled=!1),l({enabled:!1}),y=!0,null==(t=f.domElement.parentElement)||t.appendChild(n),n.style.left=`${e.clientX}px`,n.style.top=`${e.clientY}px`,n.style.width="0px",n.style.height="0px",o.x=e.clientX,o.y=e.clientY}(e),E(e,r.startPoint))}let S=[];function T(e){if(y){!function(e){m.x=Math.max(o.x,e.clientX),m.y=Math.max(o.y,e.clientY),c.x=Math.min(o.x,e.clientX),c.y=Math.min(o.y,e.clientY),n.style.left=`${c.x}px`,n.style.top=`${c.y}px`,n.style.width=m.x-c.x+"px",n.style.height=m.y-c.y+"px"}(e),E(e,r.endPoint);const t=r.select().sort((e=>e.uuid)).filter((e=>e.isMesh));_.default(t,S)||(S=t,w({object:s(t)}))}}function C(e){var t;y&&y&&(p&&(p.enabled=x),l({enabled:g}),y=!1,null==(t=n.parentElement)||t.removeChild(n))}return document.addEventListener("pointerdown",b,{passive:!0}),document.addEventListener("pointermove",T,{passive:!0,capture:!0}),document.addEventListener("pointerup",C,{passive:!0}),()=>{document.removeEventListener("pointerdown",b),document.removeEventListener("pointermove",T),document.removeEventListener("pointerup",C)}}),[h,m,d,p,f]),T.createElement("group",S.default({ref:M,onClick:E,onPointerOver:()=>x(!0),onPointerOut:()=>x(!1),onPointerMissed:b},c),T.createElement(re.Provider,{value:y},r))},exports.Shadow=Cr,exports.Sky=Ir,exports.Sparkles=Xr,exports.Sphere=$t,exports.SpotLight=Br,exports.Stage=function({children:e,controls:t,shadows:r=!0,adjustCamera:n=!0,environment:a="city",intensity:i=1,preset:s="rembrandt",shadowBias:c=0,contactShadow:l={blur:2,opacity:.5,position:[0,0,0]},...u}){const d=Sr[s],m=o.useThree((e=>e.camera)),f=o.useThree((e=>e.controls)),p=T.useRef(null),h=T.useRef(null),[{radius:v,width:g,height:x},y]=T.useState({radius:0,width:0,height:0});return T.useLayoutEffect((()=>{p.current.position.set(0,0,0),p.current.updateWorldMatrix(!0,!0);const e=(new P.Box3).setFromObject(h.current),t=new P.Vector3,r=new P.Sphere,n=e.max.y-e.min.y,o=e.max.x-e.min.x;e.getCenter(t),e.getBoundingSphere(r),y({radius:r.radius,width:o,height:n}),p.current.position.set(-t.x,-t.y+n/2,-t.z)}),[e]),T.useLayoutEffect((()=>{if(n){const e=v/(x>g?1.5:2.5);m.position.set(0,.5*v,2.5*v),m.near=.1,m.far=Math.max(5e3,4*v),m.lookAt(0,e,0);const r=f||(null==t?void 0:t.current);r&&(r.target.set(0,e,0),r.update())}}),[f,v,x,g,n]),T.createElement("group",u,T.createElement("group",{ref:p},T.createElement("group",{ref:h},e)),l&&T.createElement(Mr,S.default({scale:2*v,far:v/2},l)),a&&T.createElement(br,{preset:a}),T.createElement("ambientLight",{intensity:i/3}),T.createElement("spotLight",{penumbra:1,position:[d.main[0]*v,d.main[1]*v,d.main[2]*v],intensity:2*i,castShadow:r,"shadow-bias":c}),T.createElement("pointLight",{position:[d.fill[0]*v,d.fill[1]*v,d.fill[2]*v],intensity:i}))},exports.Stars=Wr,exports.Stats=function({showPanel:e=0,className:t,parent:r}){const n=function(e,t=[],r){const[n,o]=T.useState();return T.useLayoutEffect((()=>{const t=e();return o(t),Tt(r,t),()=>Tt(r,null)}),t),n}((()=>new k.default),[]);return T.useEffect((()=>{if(n){const a=r&&r.current||document.body;n.showPanel(e),null==a||a.appendChild(n.dom),t&&n.dom.classList.add(...t.split(" ").filter((e=>e)));const i=o.addEffect((()=>n.begin())),s=o.addAfterEffect((()=>n.end()));return()=>{null==a||a.removeChild(n.dom),i(),s()}}}),[r,n,t,e]),null},exports.Svg=Fe,exports.Tetrahedron=Kt,exports.Text=ue,exports.Text3D=me,exports.Torus=Zt,exports.TorusKnot=Yt,exports.TrackballControls=We,exports.Trail=Te,exports.TransformControls=Ge,exports.Tube=Xt,exports.View=({track:e,index:t=1,frames:r=1/0,children:n})=>{const a=T.useRef(null),{size:i,scene:s}=o.useThree(),[c]=T.useState((()=>new P.Scene)),l=T.useCallback(((t,r)=>{if(e.current&&t.target===e.current){const{width:e,height:n,left:o,top:i}=a.current,s=t.clientX-o,c=t.clientY-i;r.pointer.set(s/e*2-1,-c/n*2+1),r.raycaster.setFromCamera(r.pointer,r.camera)}}),[a]),[u,d]=T.useReducer((()=>!0),!1);return T.useEffect((()=>{var t;a.current=null==(t=e.current)?void 0:t.getBoundingClientRect(),d()}),[]),T.createElement(T.Fragment,null,u&&o.createPortal(T.createElement(In,{canvasSize:i,frames:r,scene:s,track:e,rect:a,index:t},n),c,{events:{compute:l,priority:t},size:{width:a.current.width,height:a.current.height}}))},exports.accumulativeContext=Pr,exports.calcPosFromAngles=Vr,exports.calculateScaleFactor=lo,exports.isWebGL2Available=()=>{try{var e=document.createElement("canvas");return!(!window.WebGL2RenderingContext||!e.getContext("webgl2"))}catch(e){return!1}},exports.meshBounds=function(e,t){const r=this.geometry,n=this.material,o=this.matrixWorld;void 0!==n&&(null===r.boundingSphere&&r.computeBoundingSphere(),kn.copy(r.boundingSphere),kn.applyMatrix4(o),!1!==e.ray.intersectsSphere(kn)&&(Ln.copy(o).invert(),zn.copy(e.ray).applyMatrix4(Ln),null!==r.boundingBox&&null===zn.intersectBox(r.boundingBox,Fn)||t.push({distance:Fn.distanceTo(e.ray.origin),point:Fn.clone(),object:this})))},exports.shaderMaterial=pe,exports.softShadows=e=>{if(!Ot){Ot=!0;let t=P.ShaderChunk.shadowmap_pars_fragment;t=t.replace("#ifdef USE_SHADOWMAP","#ifdef USE_SHADOWMAP\n"+(({frustum:e=3.75,size:t=.005,near:r=9.5,samples:n=17,rings:o=11}={})=>`#define LIGHT_WORLD_SIZE ${t}\n#define LIGHT_FRUSTUM_WIDTH ${e}\n#define LIGHT_SIZE_UV (LIGHT_WORLD_SIZE / LIGHT_FRUSTUM_WIDTH)\n#define NEAR_PLANE ${r}\n\n#define NUM_SAMPLES ${n}\n#define NUM_RINGS ${o}\n#define BLOCKER_SEARCH_NUM_SAMPLES NUM_SAMPLES\n#define PCF_NUM_SAMPLES NUM_SAMPLES\n\nvec2 poissonDisk[NUM_SAMPLES];\n\nvoid initPoissonSamples(const in vec2 randomSeed) {\n float ANGLE_STEP = PI2 * float(NUM_RINGS) / float(NUM_SAMPLES);\n float INV_NUM_SAMPLES = 1.0 / float(NUM_SAMPLES);\n float angle = rand(randomSeed) * PI2;\n float radius = INV_NUM_SAMPLES;\n float radiusStep = radius;\n for (int i = 0; i < NUM_SAMPLES; i++) {\n poissonDisk[i] = vec2(cos(angle), sin(angle)) * pow(radius, 0.75);\n radius += radiusStep;\n angle += ANGLE_STEP;\n }\n}\n\nfloat penumbraSize(const in float zReceiver, const in float zBlocker) { // Parallel plane estimation\n return (zReceiver - zBlocker) / zBlocker;\n}\n\nfloat findBlocker(sampler2D shadowMap, const in vec2 uv, const in float zReceiver) {\n float searchRadius = LIGHT_SIZE_UV * (zReceiver - NEAR_PLANE) / zReceiver;\n float blockerDepthSum = 0.0;\n int numBlockers = 0;\n for (int i = 0; i < BLOCKER_SEARCH_NUM_SAMPLES; i++) {\n float shadowMapDepth = unpackRGBAToDepth(texture2D(shadowMap, uv + poissonDisk[i] * searchRadius));\n if (shadowMapDepth < zReceiver) {\n blockerDepthSum += shadowMapDepth;\n numBlockers++;\n }\n }\n if (numBlockers == 0) return -1.0;\n return blockerDepthSum / float(numBlockers);\n}\n\nfloat PCF_Filter(sampler2D shadowMap, vec2 uv, float zReceiver, float filterRadius) {\n float sum = 0.0;\n for (int i = 0; i < PCF_NUM_SAMPLES; i++) {\n float depth = unpackRGBAToDepth(texture2D(shadowMap, uv + poissonDisk[ i ] * filterRadius));\n if (zReceiver <= depth) sum += 1.0;\n }\n for (int i = 0; i < PCF_NUM_SAMPLES; i++) {\n float depth = unpackRGBAToDepth(texture2D(shadowMap, uv + -poissonDisk[ i ].yx * filterRadius));\n if (zReceiver <= depth) sum += 1.0;\n }\n return sum / (2.0 * float(PCF_NUM_SAMPLES));\n}\n\nfloat PCSS(sampler2D shadowMap, vec4 coords) {\n vec2 uv = coords.xy;\n float zReceiver = coords.z; // Assumed to be eye-space z in this code\n initPoissonSamples(uv);\n float avgBlockerDepth = findBlocker(shadowMap, uv, zReceiver);\n if (avgBlockerDepth == -1.0) return 1.0;\n float penumbraRatio = penumbraSize(zReceiver, avgBlockerDepth);\n float filterRadius = penumbraRatio * LIGHT_SIZE_UV * NEAR_PLANE / zReceiver;\n return PCF_Filter(shadowMap, uv, zReceiver, filterRadius);\n}`)({...e})),t=t.replace("#if defined( SHADOWMAP_TYPE_PCF )","\nreturn PCSS(shadowMap, shadowCoord);\n#if defined( SHADOWMAP_TYPE_PCF )"),P.ShaderChunk.shadowmap_pars_fragment=t}},exports.useAnimations=function(e,t){const r=T.useRef(),[a]=T.useState((()=>t?t instanceof n.Object3D?{current:t}:t:r)),[i]=T.useState((()=>new n.AnimationMixer(void 0))),s=T.useRef({}),[c]=T.useState((()=>{const t={};return e.forEach((e=>Object.defineProperty(t,e.name,{enumerable:!0,get(){if(a.current)return s.current[e.name]||(s.current[e.name]=i.clipAction(e,a.current))}}))),{ref:a,clips:e,actions:t,names:e.map((e=>e.name)),mixer:i}}));return o.useFrame(((e,t)=>i.update(t))),T.useEffect((()=>{const e=a.current;return()=>{s.current={},Object.values(c.actions).forEach((t=>{e&&i.uncacheAction(t,e)}))}}),[e]),c},exports.useAspect=function(e,t,r=1){const n=o.useThree((e=>e.viewport)),a=t*(n.aspect>e/t?n.width/e:n.height/t);return[e*(n.aspect>e/t?n.width/e:n.height/t)*r,a*r,1]},exports.useBVH=function(e,t){T.useEffect((()=>{if(e.current){e.current.raycast=y.acceleratedRaycast;const r=e.current.geometry;return r.computeBoundsTree=y.computeBoundsTree,r.disposeBoundsTree=y.disposeBoundsTree,r.computeBoundsTree(t),()=>{r.boundsTree&&r.disposeBoundsTree()}}}),[e,t])},exports.useBounds=function(){return T.useContext(mr)},exports.useBoxProjectedEnv=function(e=new P.Vector3,t=new P.Vector3){const[r]=T.useState((()=>({position:new P.Vector3,size:new P.Vector3})));o.applyProps(r,{position:e,size:t});const n=T.useRef(null),a=T.useMemo((()=>({ref:n,onBeforeCompile:e=>function(e,t,r){e.defines.BOX_PROJECTED_ENV_MAP=!0,e.uniforms.envMapPosition={value:t},e.uniforms.envMapSize={value:r},e.vertexShader=`\n varying vec3 vWorldPosition;\n ${e.vertexShader.replace("#include <worldpos_vertex>","\n#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n #ifdef BOX_PROJECTED_ENV_MAP\n vWorldPosition = worldPosition.xyz;\n #endif\n#endif\n")}`,e.fragmentShader=`\n \n#ifdef BOX_PROJECTED_ENV_MAP\n uniform vec3 envMapSize;\n uniform vec3 envMapPosition;\n varying vec3 vWorldPosition;\n \n vec3 parallaxCorrectNormal( vec3 v, vec3 cubeSize, vec3 cubePos ) {\n vec3 nDir = normalize( v );\n vec3 rbmax = ( .5 * cubeSize + cubePos - vWorldPosition ) / nDir;\n vec3 rbmin = ( -.5 * cubeSize + cubePos - vWorldPosition ) / nDir;\n vec3 rbminmax;\n rbminmax.x = ( nDir.x > 0. ) ? rbmax.x : rbmin.x;\n rbminmax.y = ( nDir.y > 0. ) ? rbmax.y : rbmin.y;\n rbminmax.z = ( nDir.z > 0. ) ? rbmax.z : rbmin.z;\n float correction = min( min( rbminmax.x, rbminmax.y ), rbminmax.z );\n vec3 boxIntersection = vWorldPosition + nDir * correction; \n return boxIntersection - cubePos;\n }\n#endif\n\n ${e.fragmentShader.replace("#include <envmap_physical_pars_fragment>",P.ShaderChunk.envmap_physical_pars_fragment).replace("vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );","vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n \n#ifdef BOX_PROJECTED_ENV_MAP\n worldNormal = parallaxCorrectNormal( worldNormal, envMapSize, envMapPosition );\n#endif\n\n ").replace("reflectVec = inverseTransformDirection( reflectVec, viewMatrix );","reflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n \n#ifdef BOX_PROJECTED_ENV_MAP\n reflectVec = parallaxCorrectNormal( reflectVec, envMapSize, envMapPosition );\n#endif\n\n ")}`}(e,r.position,r.size),customProgramCacheKey:()=>JSON.stringify(r.position.toArray())+JSON.stringify(r.size.toArray())})),[...r.position.toArray(),...r.size.toArray()]);return T.useLayoutEffect((()=>{n.current.needsUpdate=!0}),[r]),a},exports.useCamera=qe,exports.useContextBridge=function(...e){const t=T.useRef([]);return t.current=e.map((e=>T.useContext(e))),T.useMemo((()=>({children:r})=>e.reduceRight(((e,r,n)=>T.createElement(r.Provider,{value:t.current[n],children:e})),r)),[])},exports.useCubeTexture=xt,exports.useCursor=function(e,t="pointer",r="auto"){T.useEffect((()=>{if(e)return document.body.style.cursor=t,()=>{document.body.style.cursor=r}}),[e])},exports.useDepthBuffer=function({size:e=256,frames:t=1/0}={}){const r=o.useThree((e=>e.viewport.dpr)),{width:a,height:i}=o.useThree((e=>e.size)),s=e||a*r,c=e||i*r,l=T.useMemo((()=>{const e=new n.DepthTexture(s,c);return e.format=n.DepthFormat,e.type=n.UnsignedShortType,{depthTexture:e}}),[s,c]);let u=0;const d=Ae(s,c,l);return o.useFrame((e=>{(t===1/0||u<t)&&(e.gl.setRenderTarget(d),e.gl.render(e.scene,e.camera),e.gl.setRenderTarget(null),u++)})),d.depthTexture},exports.useDetectGPU=e=>f.suspend((()=>x.getGPUTier(e)),["useDetectGPU"]),exports.useEnvironment=xr,exports.useFBO=Ae,exports.useFBX=yt,exports.useGLTF=bt,exports.useGizmoContext=Ze,exports.useHelper=function(e,t,...r){const n=T.useRef(),a=o.useThree((e=>e.scene));return T.useEffect((()=>(e&&t&&null!=e&&e.current&&(n.current=new t(e.current,...r),n.current&&a.add(n.current)),!e&&n.current&&a.remove(n.current),()=>{n.current&&a.remove(n.current)})),[a,t,e,...r]),o.useFrame((()=>{var e;null!=(e=n.current)&&e.update&&n.current.update()})),n},exports.useIntersect=function(e){const t=T.useRef(null),r=T.useRef(!1),n=T.useRef(!1),a=T.useRef(e);return T.useLayoutEffect((()=>{a.current=e}),[e]),T.useEffect((()=>{const e=t.current;if(e){const t=o.addEffect((()=>(r.current=!1,!0))),i=e.onBeforeRender;e.onBeforeRender=()=>r.current=!0;const s=o.addAfterEffect((()=>(r.current!==n.current&&(null==a.current||a.current(n.current=r.current)),!0)));return()=>{e.onBeforeRender=i,t(),s()}}}),[]),t},exports.useKTX2=St,exports.useKeyboardControls=function(e){const[t,r,n]=T.useContext(te);return e?n(e):[t,r]},exports.useMask=function(e,t=!1){return{stencilWrite:!0,stencilRef:e,stencilFunc:t?P.NotEqualStencilFunc:P.EqualStencilFunc,stencilFail:P.KeepStencilOp,stencilZFail:P.KeepStencilOp,stencilZPass:P.KeepStencilOp}},exports.useMatcapTexture=function(e=0,t=1024,r){const n=f.suspend((()=>fetch("https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/matcaps.json").then((e=>e.json()))),["matcapList"]),o=n[0],a=T.useMemo((()=>Object.keys(n).length),[]),i=`${T.useMemo((()=>"string"==typeof e?e:"number"==typeof e?n[e]:null),[e])||o}${function(e){switch(e){case 64:return"-64px";case 128:return"-128px";case 256:return"-256px";case 512:return"-512px";default:return""}}(t)}.png`,s=`https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d/${t}/${i}`;return[ve(s,r),s,a]},exports.useNormalTexture=function(e=0,t={},r){const{repeat:o=[1,1],anisotropy:a=1,offset:i=[0,0]}=t,s=f.suspend((()=>fetch("https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/normals/normals.json").then((e=>e.json()))),["normalsList"]),c=T.useMemo((()=>Object.keys(s).length),[]),l=s[0],u=`https://rawcdn.githack.com/pmndrs/drei-assets/7a3104997e1576f83472829815b00880d88b32fb/normals/${s[e]||l}`,d=ve(u,r);return T.useLayoutEffect((()=>{d&&(d.wrapS=d.wrapT=n.RepeatWrapping,d.repeat=new n.Vector2(o[0],o[1]),d.offset=new n.Vector2(i[0],i[1]),d.anisotropy=a)}),[d,a,o,i]),[d,u,c]},exports.usePerformanceMonitor=function({onIncline:e,onDecline:r,onChange:n,onFallback:o}){const a=t.useContext(An),i=t.useRef({onIncline:e,onDecline:r,onChange:n,onFallback:o});t.useLayoutEffect((()=>{i.current.onIncline=e,i.current.onDecline=r,i.current.onChange=n,i.current.onFallback=o}),[e,r,n,o]),t.useLayoutEffect((()=>a.subscribe(i)),[a])},exports.useProgress=q,exports.useScroll=K,exports.useSelect=function(){return T.useContext(re)},exports.useSurfaceSampler=Ce,exports.useTexture=ve,exports.useTrail=Se,exports.useVideoTexture=function(e,r){const{unsuspend:n,start:a,crossOrigin:i,muted:s,loop:c,...l}={unsuspend:"canplay",crossOrigin:"Anonymous",muted:!0,loop:!0,start:!0,...r},u=o.useThree((e=>e.gl)),d=f.suspend((()=>new Promise(((t,r)=>{const o=Object.assign(document.createElement("video"),{src:e,crossOrigin:i,loop:c,muted:s,...l}),a=new P.VideoTexture(o);a.encoding=u.outputEncoding,o.addEventListener(n,(()=>t(a)))}))),[e]);return t.useEffect((()=>{a&&d.image.play()}),[d]),d};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-three/drei",
3
- "version": "9.38.0",
3
+ "version": "9.38.2",
4
4
  "private": false,
5
5
  "description": "useful add-ons for react-three-fiber",
6
6
  "keywords": [