@react-three/drei 9.0.2 → 9.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -3
- package/core/DeviceOrientationControls.cjs.js +1 -1
- package/core/DeviceOrientationControls.js +0 -1
- package/core/Effects.cjs.js +1 -1
- package/core/Effects.js +25 -28
- package/core/FlyControls.cjs.js +1 -1
- package/core/FlyControls.js +0 -1
- package/core/MapControls.cjs.js +1 -1
- package/core/MapControls.js +0 -1
- package/core/MeshDistortMaterial.cjs.js +1 -1
- package/core/MeshDistortMaterial.js +0 -1
- package/core/MeshWobbleMaterial.cjs.js +1 -1
- package/core/MeshWobbleMaterial.js +0 -1
- package/core/RoundedBox.cjs.js +1 -1
- package/core/RoundedBox.js +1 -2
- package/core/Shadow.cjs.js +1 -1
- package/core/Shadow.js +1 -5
- package/core/Sky.cjs.js +1 -1
- package/core/Sky.js +0 -1
- package/core/Stars.cjs.js +1 -1
- package/core/Stars.js +1 -4
- package/core/TransformControls.cjs.js +1 -1
- package/core/TransformControls.js +0 -1
- package/index.cjs.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -597,11 +597,15 @@ Make sure to set the `makeDefault` prop on your controls, in that case you do no
|
|
|
597
597
|
|
|
598
598
|
#### Effects
|
|
599
599
|
|
|
600
|
-
Abstraction around threes own [EffectComposer](https://threejs.org/docs/#examples/en/postprocessing/EffectComposer).
|
|
600
|
+
Abstraction around threes own [EffectComposer](https://threejs.org/docs/#examples/en/postprocessing/EffectComposer). By default it will prepend a render-pass and a gammacorrection-pass. Children are cloned, `attach` is given to them automatically. You can only use passes or effects in there.
|
|
601
601
|
|
|
602
602
|
```jsx
|
|
603
|
+
import { SSAOPass } from "three-stdlib"
|
|
604
|
+
|
|
605
|
+
extend({ SSAOPass })
|
|
606
|
+
|
|
603
607
|
<Effects multisamping={8} renderIndex={1} disableGamma={false} disableRenderPass={false}>
|
|
604
|
-
<
|
|
608
|
+
<sSAOPass args={[scene, camera, 100, 100]} kernelRadius={1.2} kernelSize={0} />
|
|
605
609
|
</Effects>
|
|
606
610
|
```
|
|
607
611
|
|
|
@@ -1414,7 +1418,7 @@ useFBX(url)
|
|
|
1414
1418
|
|
|
1415
1419
|
function SuzanneFBX() {
|
|
1416
1420
|
let fbx = useFBX('suzanne/suzanne.fbx')
|
|
1417
|
-
return <primitive object={fbx}
|
|
1421
|
+
return <primitive object={fbx} />
|
|
1418
1422
|
}
|
|
1419
1423
|
```
|
|
1420
1424
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(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 o=u(e),a=i(r);const l=a.forwardRef(((e,r)=>{const{camera:u,onChange:i,...l}=e,c=t.useThree((e=>e.camera)),s=t.useThree((e=>e.invalidate)),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(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 o=u(e),a=i(r);const l=a.forwardRef(((e,r)=>{const{camera:u,onChange:i,...l}=e,c=t.useThree((e=>e.camera)),s=t.useThree((e=>e.invalidate)),f=u||c,[d]=a.useState((()=>new n.DeviceOrientationControls(f)));return a.useEffect((()=>{const e=e=>{s(),i&&i(e)};return null==d||null==d.addEventListener||d.addEventListener("change",e),()=>null==d||null==d.removeEventListener?void 0:d.removeEventListener("change",e)}),[i,d,s]),t.useFrame((()=>null==d?void 0:d.update())),a.useEffect((()=>{const e=d;return null==e||e.connect(),()=>null==e?void 0:e.dispose()}),[d]),d?a.createElement("primitive",o.default({ref:r,object:d},l)):null}));exports.DeviceOrientationControls=l;
|
package/core/Effects.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("three"),a=require("@react-three/fiber"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("three"),a=require("@react-three/fiber"),n=require("three-stdlib"),s=require("react-merge-refs");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var a=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,a.get?a:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var i=u(e),o=c(r),d=u(s);a.extend({EffectComposer:n.EffectComposer,RenderPass:n.RenderPass,ShaderPass:n.ShaderPass});const l=o.forwardRef((({children:e,multisamping:r=8,renderIndex:s=1,disableGamma:u=!1,disableRenderPass:c=!1,...l},f)=>{const h=o.useRef(),m=a.useThree((e=>e.scene)),p=a.useThree((e=>e.camera)),b=a.useThree((e=>e.gl)),g=a.useThree((e=>e.size)),[E]=o.useState((()=>{const e=new t.WebGLRenderTarget(g.width,g.height,{format:t.RGBAFormat,encoding:b.outputEncoding});return e.samples=r,e}));o.useEffect((()=>{var e,r;null==(e=h.current)||e.setSize(g.width,g.height),null==(r=h.current)||r.setPixelRatio(b.getPixelRatio())}),[b,g]),a.useFrame((()=>{var e;return null==(e=h.current)?void 0:e.render()}),s);const P=[];return c||P.push(o.createElement("renderPass",{key:"renderpass",args:[m,p]})),u||P.push(o.createElement("shaderPass",{key:"gammapass",args:[n.GammaCorrectionShader]})),o.Children.forEach(e,((e,r)=>P.push(o.cloneElement(e,{key:r,attach:`passes-${r}`})))),o.createElement("effectComposer",i.default({ref:d.default([f,h]),args:[b,E]},l),P)}));exports.Effects=l,exports.isWebGL2Available=()=>{try{var e=document.createElement("canvas");return!(!window.WebGL2RenderingContext||!e.getContext("webgl2"))}catch(e){return!1}};
|
package/core/Effects.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { WebGLRenderTarget, RGBAFormat
|
|
3
|
+
import { WebGLRenderTarget, RGBAFormat } from 'three';
|
|
4
4
|
import { extend, useThree, useFrame } from '@react-three/fiber';
|
|
5
5
|
import { EffectComposer, RenderPass, ShaderPass, GammaCorrectionShader } from 'three-stdlib';
|
|
6
6
|
import mergeRefs from 'react-merge-refs';
|
|
@@ -27,27 +27,17 @@ const Effects = /*#__PURE__*/React.forwardRef(({
|
|
|
27
27
|
...props
|
|
28
28
|
}, ref) => {
|
|
29
29
|
const composer = React.useRef();
|
|
30
|
-
const scene = useThree(
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const
|
|
34
|
-
camera
|
|
35
|
-
}) => camera);
|
|
36
|
-
const gl = useThree(({
|
|
37
|
-
gl
|
|
38
|
-
}) => gl);
|
|
39
|
-
const size = useThree(({
|
|
40
|
-
size
|
|
41
|
-
}) => size);
|
|
30
|
+
const scene = useThree(state => state.scene);
|
|
31
|
+
const camera = useThree(state => state.camera);
|
|
32
|
+
const gl = useThree(state => state.gl);
|
|
33
|
+
const size = useThree(state => state.size);
|
|
42
34
|
const [target] = React.useState(() => {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
return t;
|
|
50
|
-
}
|
|
35
|
+
const t = new WebGLRenderTarget(size.width, size.height, {
|
|
36
|
+
format: RGBAFormat,
|
|
37
|
+
encoding: gl.outputEncoding
|
|
38
|
+
});
|
|
39
|
+
t.samples = multisamping;
|
|
40
|
+
return t;
|
|
51
41
|
});
|
|
52
42
|
React.useEffect(() => {
|
|
53
43
|
var _composer$current, _composer$current2;
|
|
@@ -60,16 +50,23 @@ const Effects = /*#__PURE__*/React.forwardRef(({
|
|
|
60
50
|
|
|
61
51
|
return (_composer$current3 = composer.current) == null ? void 0 : _composer$current3.render();
|
|
62
52
|
}, renderIndex);
|
|
53
|
+
const passes = [];
|
|
54
|
+
if (!disableRenderPass) passes.push( /*#__PURE__*/React.createElement("renderPass", {
|
|
55
|
+
key: "renderpass",
|
|
56
|
+
args: [scene, camera]
|
|
57
|
+
}));
|
|
58
|
+
if (!disableGamma) passes.push( /*#__PURE__*/React.createElement("shaderPass", {
|
|
59
|
+
key: "gammapass",
|
|
60
|
+
args: [GammaCorrectionShader]
|
|
61
|
+
}));
|
|
62
|
+
React.Children.forEach(children, (el, index) => passes.push( /*#__PURE__*/React.cloneElement(el, {
|
|
63
|
+
key: index,
|
|
64
|
+
attach: `passes-${index}`
|
|
65
|
+
})));
|
|
63
66
|
return /*#__PURE__*/React.createElement("effectComposer", _extends({
|
|
64
67
|
ref: mergeRefs([ref, composer]),
|
|
65
68
|
args: [gl, target]
|
|
66
|
-
}, props),
|
|
67
|
-
attach: "passes",
|
|
68
|
-
args: [scene, camera]
|
|
69
|
-
}), !disableGamma && /*#__PURE__*/React.createElement("shaderPass", {
|
|
70
|
-
attach: "passes",
|
|
71
|
-
args: [GammaCorrectionShader]
|
|
72
|
-
}), children);
|
|
69
|
+
}, props), passes);
|
|
73
70
|
});
|
|
74
71
|
|
|
75
72
|
export { Effects, isWebGL2Available };
|
package/core/FlyControls.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function l(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 o=u(e),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function l(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 o=u(e),a=l(r);const i=a.forwardRef((({domElement:e,...r},u)=>{const{onChange:l,...i}=r,c=t.useThree((e=>e.invalidate)),s=t.useThree((e=>e.camera)),d=t.useThree((e=>e.gl)),f=t.useThree((e=>e.events)),v=e||f.connected||d.domElement,[b]=a.useState((()=>new n.FlyControls(s,v)));return a.useEffect((()=>{const e=e=>{c(),l&&l(e)};return null==b||null==b.addEventListener||b.addEventListener("change",e),()=>null==b||null==b.removeEventListener?void 0:b.removeEventListener("change",e)}),[l,b,c]),t.useFrame(((e,t)=>null==b?void 0:b.update(t))),b?a.createElement("primitive",o.default({ref:u,object:b},i)):null}));exports.FlyControls=i;
|
package/core/FlyControls.js
CHANGED
|
@@ -29,7 +29,6 @@ const FlyControls = /*#__PURE__*/React.forwardRef(({
|
|
|
29
29
|
useFrame((_, delta) => controls == null ? void 0 : controls.update(delta));
|
|
30
30
|
return controls ? /*#__PURE__*/React.createElement("primitive", _extends({
|
|
31
31
|
ref: ref,
|
|
32
|
-
dispose: undefined,
|
|
33
32
|
object: controls
|
|
34
33
|
}, rest)) : null;
|
|
35
34
|
});
|
package/core/MapControls.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(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=a(e),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(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=a(e),u=o(r);const i=u.forwardRef(((e={enableDamping:!0},r)=>{const{domElement:a,camera:o,onChange:i,onStart:c,onEnd:d,...l}=e,f=t.useThree((e=>e.invalidate)),m=t.useThree((e=>e.camera)),v=t.useThree((e=>e.gl)),b=t.useThree((e=>e.events)),p=a||b.connected||v.domElement,E=o||m,h=u.useMemo((()=>new n.MapControls(E)),[E]);return u.useEffect((()=>{h.connect(p);const e=e=>{f(),i&&i(e)};return h.addEventListener("change",e),c&&h.addEventListener("start",c),d&&h.addEventListener("end",d),()=>{h.dispose(),h.removeEventListener("change",e),c&&h.removeEventListener("start",c),d&&h.removeEventListener("end",d)}}),[i,c,d,h,f,p]),t.useFrame((()=>h.update())),u.createElement("primitive",s.default({ref:r,object:h,enableDamping:!0},l))}));exports.MapControls=i;
|
package/core/MapControls.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("three"),i=require("@react-three/fiber");function o(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 i=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,i.get?i:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var c=o(e),v=s(t);class n extends r.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 x=v.forwardRef((({speed:e=1,...t},r)=>{const[o]=v.useState((()=>new n));return i.useFrame((t=>o&&(o.time=t.clock.getElapsedTime()*e))),v.createElement("primitive",c.default({
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),i=require("@react-three/fiber");function o(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 i=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,i.get?i:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var c=o(e),v=s(t);class n extends r.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 x=v.forwardRef((({speed:e=1,...t},r)=>{const[o]=v.useState((()=>new n));return i.useFrame((t=>o&&(o.time=t.clock.getElapsedTime()*e))),v.createElement("primitive",c.default({object:o,ref:r,attach:"material"},t))}));exports.MeshDistortMaterial=x;
|
|
@@ -70,7 +70,6 @@ const MeshDistortMaterial = /*#__PURE__*/React.forwardRef(({
|
|
|
70
70
|
const [material] = React.useState(() => new DistortMaterialImpl());
|
|
71
71
|
useFrame(state => material && (material.time = state.clock.getElapsedTime() * speed));
|
|
72
72
|
return /*#__PURE__*/React.createElement("primitive", _extends({
|
|
73
|
-
dispose: undefined,
|
|
74
73
|
object: material,
|
|
75
74
|
ref: ref,
|
|
76
75
|
attach: "material"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),a=require("@react-three/fiber");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(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 n=i(e),s=o(t);class c extends r.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 u=s.forwardRef((({speed:e=1,...t},r)=>{const[i]=s.useState((()=>new c));return a.useFrame((t=>i&&(i.time=t.clock.getElapsedTime()*e))),s.createElement("primitive",n.default({
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),a=require("@react-three/fiber");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(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 n=i(e),s=o(t);class c extends r.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 u=s.forwardRef((({speed:e=1,...t},r)=>{const[i]=s.useState((()=>new c));return a.useFrame((t=>i&&(i.time=t.clock.getElapsedTime()*e))),s.createElement("primitive",n.default({object:i,ref:r,attach:"material"},t))}));exports.MeshWobbleMaterial=u;
|
|
@@ -56,7 +56,6 @@ const MeshWobbleMaterial = /*#__PURE__*/React.forwardRef(({
|
|
|
56
56
|
const [material] = React.useState(() => new WobbleMaterialImpl());
|
|
57
57
|
useFrame(state => material && (material.time = state.clock.getElapsedTime() * speed));
|
|
58
58
|
return /*#__PURE__*/React.createElement("primitive", _extends({
|
|
59
|
-
dispose: undefined,
|
|
60
59
|
object: material,
|
|
61
60
|
ref: ref,
|
|
62
61
|
attach: "material"
|
package/core/RoundedBox.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("three");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function a(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 u=n(e),s=a(t);const c=1e-5;const o=s.forwardRef((function({args:[e=1,t=1,n=1]=[],radius:a=.05,steps:o=1,smoothness:f=4,children:i,...l},b){const d=s.useMemo((()=>function(e,t,n){const a=new r.Shape,u=n-c;return a.absarc(c,c,c,-Math.PI/2,-Math.PI,!0),a.absarc(c,t-2*u,c,Math.PI,Math.PI/2,!0),a.absarc(e-2*u,t-2*u,c,Math.PI/2,0,!0),a.absarc(e-2*u,c,c,0,-Math.PI/2,!0),a}(e,t,a)),[e,t,a]),h=s.useMemo((()=>({depth:n-2*a,bevelEnabled:!0,bevelSegments:2*f,steps:o,bevelSize:a-c,bevelThickness:a,curveSegments:f})),[n,a,f]),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function a(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 u=n(e),s=a(t);const c=1e-5;const o=s.forwardRef((function({args:[e=1,t=1,n=1]=[],radius:a=.05,steps:o=1,smoothness:f=4,children:i,...l},b){const d=s.useMemo((()=>function(e,t,n){const a=new r.Shape,u=n-c;return a.absarc(c,c,c,-Math.PI/2,-Math.PI,!0),a.absarc(c,t-2*u,c,Math.PI,Math.PI/2,!0),a.absarc(e-2*u,t-2*u,c,Math.PI/2,0,!0),a.absarc(e-2*u,c,c,0,-Math.PI/2,!0),a}(e,t,a)),[e,t,a]),h=s.useMemo((()=>({depth:n-2*a,bevelEnabled:!0,bevelSegments:2*f,steps:o,bevelSize:a-c,bevelThickness:a,curveSegments:f})),[n,a,f]),p=s.useRef();return s.useLayoutEffect((()=>{p.current&&p.current.center()}),[d,h]),s.createElement("mesh",u.default({ref:b},l),s.createElement("extrudeGeometry",{ref:p,args:[d,h]}),i)}));exports.RoundedBox=o;
|
package/core/RoundedBox.js
CHANGED
|
@@ -40,8 +40,7 @@ const RoundedBox = /*#__PURE__*/React.forwardRef(function RoundedBox({
|
|
|
40
40
|
}, [shape, params]);
|
|
41
41
|
return /*#__PURE__*/React.createElement("mesh", _extends({
|
|
42
42
|
ref: ref
|
|
43
|
-
}, rest), /*#__PURE__*/React.createElement("
|
|
44
|
-
attach: "geometry",
|
|
43
|
+
}, rest), /*#__PURE__*/React.createElement("extrudeGeometry", {
|
|
45
44
|
ref: geomRef,
|
|
46
45
|
args: [shape, params]
|
|
47
46
|
}), children);
|
package/core/Shadow.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("three");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(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 n=a(e),c=o(t);const l=c.forwardRef((({fog:e=!1,colorStop:t=0,color:a="black",opacity:o=.5,...l},i)=>{const u=c.useMemo((()=>{const e=document.createElement("canvas");e.width=128,e.height=128;const o=e.getContext("2d"),n=o.createRadialGradient(e.width/2,e.height/2,0,e.width/2,e.height/2,e.width/2);return n.addColorStop(t,new r.Color(a).getStyle()),n.addColorStop(1,"rgba(0,0,0,0)"),o.fillStyle=n,o.fillRect(0,0,e.width,e.height),e}),[a,t]);return c.createElement("mesh",n.default({ref:i},l),c.createElement("
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(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 n=a(e),c=o(t);const l=c.forwardRef((({fog:e=!1,colorStop:t=0,color:a="black",opacity:o=.5,...l},i)=>{const u=c.useMemo((()=>{const e=document.createElement("canvas");e.width=128,e.height=128;const o=e.getContext("2d"),n=o.createRadialGradient(e.width/2,e.height/2,0,e.width/2,e.height/2,e.width/2);return n.addColorStop(t,new r.Color(a).getStyle()),n.addColorStop(1,"rgba(0,0,0,0)"),o.fillStyle=n,o.fillRect(0,0,e.width,e.height),e}),[a,t]);return c.createElement("mesh",n.default({ref:i},l),c.createElement("planeGeometry",null),c.createElement("meshBasicMaterial",{transparent:!0,opacity:o,fog:e},c.createElement("canvasTexture",{attach:"map",args:[u]})))}));exports.Shadow=l;
|
package/core/Shadow.js
CHANGED
|
@@ -23,11 +23,7 @@ const Shadow = /*#__PURE__*/React.forwardRef(({
|
|
|
23
23
|
}, [color, colorStop]);
|
|
24
24
|
return /*#__PURE__*/React.createElement("mesh", _extends({
|
|
25
25
|
ref: ref
|
|
26
|
-
}, props), /*#__PURE__*/React.createElement("
|
|
27
|
-
attach: "geometry",
|
|
28
|
-
args: [1, 1]
|
|
29
|
-
}), /*#__PURE__*/React.createElement("meshBasicMaterial", {
|
|
30
|
-
attach: "material",
|
|
26
|
+
}, props), /*#__PURE__*/React.createElement("planeGeometry", null), /*#__PURE__*/React.createElement("meshBasicMaterial", {
|
|
31
27
|
transparent: true,
|
|
32
28
|
opacity: opacity,
|
|
33
29
|
fog: fog
|
package/core/Sky.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("three-stdlib"),i=require("three");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function a(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var i=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,i.get?i:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three-stdlib"),i=require("three");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function a(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var i=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,i.get?i:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var u=n(e),o=a(t);function c(e,t,r=new i.Vector3){const n=Math.PI*(e-.5),a=2*Math.PI*(t-.5);return r.x=Math.cos(a),r.y=Math.sin(n),r.z=Math.sin(a),r}const l=o.forwardRef((({inclination:e=.6,azimuth:t=.1,distance:n=1e3,mieCoefficient:a=.005,mieDirectionalG:l=.8,rayleigh:s=.5,turbidity:f=10,sunPosition:m=c(e,t),...d},b)=>{const h=o.useMemo((()=>(new i.Vector3).setScalar(n)),[n]),[y]=o.useState((()=>new r.Sky));return o.createElement("primitive",u.default({object:y,ref:b,"material-uniforms-mieCoefficient-value":a,"material-uniforms-mieDirectionalG-value":l,"material-uniforms-rayleigh-value":s,"material-uniforms-sunPosition-value":m,"material-uniforms-turbidity-value":f,scale:h},d))}));exports.Sky=l,exports.calcPosFromAngles=c;
|
package/core/Sky.js
CHANGED
|
@@ -25,7 +25,6 @@ const Sky = /*#__PURE__*/React.forwardRef(({
|
|
|
25
25
|
const scale = React.useMemo(() => new Vector3().setScalar(distance), [distance]);
|
|
26
26
|
const [sky] = React.useState(() => new Sky$1());
|
|
27
27
|
return /*#__PURE__*/React.createElement("primitive", _extends({
|
|
28
|
-
dispose: undefined,
|
|
29
28
|
object: sky,
|
|
30
29
|
ref: ref,
|
|
31
30
|
"material-uniforms-mieCoefficient-value": mieCoefficient,
|
package/core/Stars.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@react-three/fiber"),r=require("three");function n(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 a=n(e);class o extends r.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 i=e=>(new r.Vector3).setFromSpherical(new r.Spherical(e,Math.acos(1-2*Math.random()),2*Math.random()*Math.PI)),c=a.forwardRef((({radius:e=100,depth:n=50,count:c=5e3,saturation:
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@react-three/fiber"),r=require("three");function n(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 a=n(e);class o extends r.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 i=e=>(new r.Vector3).setFromSpherical(new r.Spherical(e,Math.acos(1-2*Math.random()),2*Math.random()*Math.PI)),c=a.forwardRef((({radius:e=100,depth:n=50,count:c=5e3,saturation:l=0,factor:s=4,fade:u=!1},f)=>{const m=a.useRef(),[d,v,p]=a.useMemo((()=>{const t=[],a=[],o=Array.from({length:c},(()=>(.5+.5*Math.random())*s)),u=new r.Color;let f=e+n;const m=n/c;for(let e=0;e<c;e++)f-=m*Math.random(),t.push(...i(f).toArray()),u.setHSL(e/c,l,.9),a.push(u.r,u.g,u.b);return[new Float32Array(t),new Float32Array(a),new Float32Array(o)]}),[c,n,s,e,l]);t.useFrame((e=>m.current&&(m.current.uniforms.time.value=e.clock.getElapsedTime())));const[g]=a.useState((()=>new o));return a.createElement("points",{ref:f},a.createElement("bufferGeometry",null,a.createElement("bufferAttribute",{attach:"attributes-position",args:[d,3]}),a.createElement("bufferAttribute",{attach:"attributes-color",args:[v,3]}),a.createElement("bufferAttribute",{attach:"attributes-size",args:[p,1]})),a.createElement("primitive",{ref:m,object:g,attach:"material",blending:r.AdditiveBlending,"uniforms-fade-value":u,transparent:!0,vertexColors:!0}))}));exports.Stars=c;
|
package/core/Stars.js
CHANGED
|
@@ -83,9 +83,7 @@ const Stars = /*#__PURE__*/React.forwardRef(({
|
|
|
83
83
|
const [starfieldMaterial] = React.useState(() => new StarfieldMaterial());
|
|
84
84
|
return /*#__PURE__*/React.createElement("points", {
|
|
85
85
|
ref: ref
|
|
86
|
-
}, /*#__PURE__*/React.createElement("bufferGeometry", {
|
|
87
|
-
attach: "geometry"
|
|
88
|
-
}, /*#__PURE__*/React.createElement("bufferAttribute", {
|
|
86
|
+
}, /*#__PURE__*/React.createElement("bufferGeometry", null, /*#__PURE__*/React.createElement("bufferAttribute", {
|
|
89
87
|
attach: "attributes-position",
|
|
90
88
|
args: [position, 3]
|
|
91
89
|
}), /*#__PURE__*/React.createElement("bufferAttribute", {
|
|
@@ -95,7 +93,6 @@ const Stars = /*#__PURE__*/React.forwardRef(({
|
|
|
95
93
|
attach: "attributes-size",
|
|
96
94
|
args: [size, 1]
|
|
97
95
|
})), /*#__PURE__*/React.createElement("primitive", {
|
|
98
|
-
dispose: undefined,
|
|
99
96
|
ref: material,
|
|
100
97
|
object: starfieldMaterial,
|
|
101
98
|
attach: "material",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),n=require("@react-three/fiber"),t=require("lodash.omit"),r=require("lodash.pick"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),n=require("@react-three/fiber"),t=require("lodash.omit"),r=require("lodash.pick"),a=require("react"),u=require("three"),o=require("three-stdlib");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var n=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,r.get?r:{enumerable:!0,get:function(){return e[t]}})}})),n.default=e,Object.freeze(n)}var i=l(e),c=l(t),d=l(r),f=s(a),v=s(u);const m=f.forwardRef((({children:e,domElement:t,onChange:r,onMouseDown:a,onMouseUp:u,onObjectChange:l,object:s,...m},h)=>{const E=["enabled","axis","mode","translationSnap","rotationSnap","scaleSnap","space","size","showX","showY","showZ"],{camera:b,...g}=m,L=d.default(g,E),p=c.default(g,E),j=n.useThree((e=>e.controls)),O=n.useThree((e=>e.gl)),w=n.useThree((e=>e.events)),q=n.useThree((e=>e.camera)),T=n.useThree((e=>e.invalidate)),y=b||q,C=t||w.connected||O.domElement,D=f.useMemo((()=>new o.TransformControls(y,C)),[y,C]),M=f.useRef();return f.useLayoutEffect((()=>(s?D.attach(s instanceof v.Object3D?s:s.current):M.current instanceof v.Object3D&&D.attach(M.current),()=>{D.detach()})),[s,e,D]),f.useEffect((()=>{if(j){const e=e=>j.enabled=!e.value;return D.addEventListener("dragging-changed",e),()=>D.removeEventListener("dragging-changed",e)}}),[D,j]),f.useEffect((()=>{const e=e=>{T(),r&&r(e)};return null==D||null==D.addEventListener||D.addEventListener("change",e),a&&(null==D||null==D.addEventListener||D.addEventListener("mouseDown",a)),u&&(null==D||null==D.addEventListener||D.addEventListener("mouseUp",u)),l&&(null==D||null==D.addEventListener||D.addEventListener("objectChange",l)),()=>{null==D||null==D.removeEventListener||D.removeEventListener("change",e),a&&(null==D||null==D.removeEventListener||D.removeEventListener("mouseDown",a)),u&&(null==D||null==D.removeEventListener||D.removeEventListener("mouseUp",u)),l&&(null==D||null==D.removeEventListener||D.removeEventListener("objectChange",l))}}),[r,a,u,l,D,T]),D?f.createElement(f.Fragment,null,f.createElement("primitive",i.default({ref:h,object:D},L)),f.createElement("group",i.default({ref:M},p),e)):null}));exports.TransformControls=m;
|
|
@@ -69,7 +69,6 @@ const TransformControls = /*#__PURE__*/React.forwardRef(({
|
|
|
69
69
|
}, [onChange, onMouseDown, onMouseUp, onObjectChange, controls, invalidate]);
|
|
70
70
|
return controls ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("primitive", _extends({
|
|
71
71
|
ref: ref,
|
|
72
|
-
dispose: undefined,
|
|
73
72
|
object: controls
|
|
74
73
|
}, transformProps)), /*#__PURE__*/React.createElement("group", _extends({
|
|
75
74
|
ref: group
|
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"),s=require("react-merge-refs"),i=require("@react-spring/three"),l=require("@use-gesture/react"),c=require("three-stdlib"),u=require("zustand/shallow"),d=require("troika-three-text"),m=require("suspend-react"),f=require("meshline"),p=require("lodash.pick"),h=require("lodash.omit"),v=require("stats.js"),g=require("detect-gpu"),x=require("three-mesh-bvh"),y=require("react-composer");function w(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function E(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 b=w(e),M=E(t),S=E(r),T=E(n),C=w(a),R=w(s),_=w(u),P=w(p),L=w(h),D=w(v),z=w(y);const B=new n.Vector3,A=new n.Vector3,F=new n.Vector3;function U(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 k=e=>Math.abs(e)<1e-10?0:e;function j(e,t,r=""){let n="matrix3d(";for(let r=0;16!==r;r++)n+=k(t[r]*e.elements[r])+(15!==r?",":")");return r+n}const V=(I=[1,-1,1,1,1,-1,1,1,1,-1,1,1,1,-1,1,1],e=>j(e,I));var I;const O=(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},W=M.forwardRef((({children:e,eps:t=.001,style:r,className:a,prepend:s,center:i,fullscreen:l,portal:c,distanceFactor:u,sprite:d=!1,transform:m=!1,occlude:f,onOcclude:p,zIndexRange:h=[16777271,0],calculatePosition:v=U,as:g="div",wrapperClass:x,pointerEvents:y="auto",...w},E)=>{var T;const C=o.useThree((({gl:e})=>e)),R=o.useThree((({camera:e})=>e)),_=o.useThree((({scene:e})=>e)),P=o.useThree((({size:e})=>e)),L=o.useThree((({raycaster:e})=>e)),[D]=M.useState((()=>document.createElement(g))),z=M.useMemo((()=>S.createRoot(D)),[D]),j=M.useRef(null),I=M.useRef(0),W=M.useRef([0,0]),N=M.useRef(null),G=M.useRef(null),H=null!==(T=null==c?void 0:c.current)&&void 0!==T?T:C.domElement.parentNode;M.useEffect((()=>{if(j.current){if(_.updateMatrixWorld(),m)D.style.cssText="position:absolute;top:0;left:0;pointer-events:none;overflow:hidden;";else{const e=v(j.current,R,P);D.style.cssText=`position:absolute;top:0;left:0;transform:translate3d(${e[0]}px,${e[1]}px,0);transform-origin:0 0;`}return H&&(s?H.prepend(D):H.appendChild(D)),()=>{H&&H.removeChild(D),z.unmount()}}}),[H,m]),M.useLayoutEffect((()=>{x&&(D.className=x)}),[x]);const $=M.useMemo((()=>m?{position:"absolute",top:0,left:0,width:P.width,height:P.height,transformStyle:"preserve-3d",pointerEvents:"none"}:{position:"absolute",transform:i?"translate3d(-50%,-50%,0)":"none",...l&&{top:-P.height/2,left:-P.width/2,width:P.width,height:P.height},...r}),[r,i,l,P,m]),q=M.useMemo((()=>({position:"absolute",pointerEvents:y})),[y]);M.useLayoutEffect((()=>{m?z.render(M.createElement("div",{ref:N,style:$},M.createElement("div",{ref:G,style:q},M.createElement("div",{ref:E,className:a,style:r,children:e})))):z.render(M.createElement("div",{ref:E,style:$,className:a,children:e}))}));const X=M.useRef(!0);return o.useFrame((()=>{if(j.current){R.updateMatrixWorld(),j.current.updateWorldMatrix(!0,!1);const e=m?W.current:v(j.current,R,P);if(m||Math.abs(I.current-R.zoom)>t||Math.abs(W.current[0]-e[0])>t||Math.abs(W.current[1]-e[1])>t){const t=function(e,t){const r=B.setFromMatrixPosition(e.matrixWorld),n=A.setFromMatrixPosition(t.matrixWorld),o=r.sub(n),a=t.getWorldDirection(F);return o.angleTo(a)>Math.PI/2}(j.current,R);let r=!1;"boolean"==typeof f?!0===f&&(r=[_]):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 s=r.intersectObjects(n,!0);if(s.length){const e=s[0].distance;return o.distanceTo(r.ray.origin)<e}return!0}(j.current,R,L,r);X.current=e&&!t}else X.current=!t;if(o!==X.current&&(p?p(!X.current):D.style.display=X.current?"block":"none"),D.style.zIndex=`${function(e,t,r){if(t instanceof n.PerspectiveCamera||t instanceof n.OrthographicCamera){const n=B.setFromMatrixPosition(e.matrixWorld),o=A.setFromMatrixPosition(t.matrixWorld),a=n.distanceTo(o),s=(r[1]-r[0])/(t.far-t.near),i=r[1]-s*t.far;return Math.round(s*a+i)}}(j.current,R,h)}`,m){const[e,t]=[P.width/2,P.height/2],r=R.projectionMatrix.elements[5]*t,{isOrthographicCamera:n,top:o,left:a,bottom:s,right:i}=R,l=V(R.matrixWorldInverse),c=n?`scale(${r})translate(${k(-(i+a)/2)}px,${k((o+s)/2)}px)`:`translateZ(${r}px)`;let m=j.current.matrixWorld;d&&(m=R.matrixWorldInverse.clone().transpose().copyPosition(m).scale(j.current.scale),m.elements[3]=m.elements[7]=m.elements[11]=0,m.elements[15]=1),D.style.width=P.width+"px",D.style.height=P.height+"px",D.style.perspective=n?"":`${r}px`,N.current&&G.current&&(N.current.style.transform=`${c}${l}translate(${e}px,${t}px)`,G.current.style.transform=O(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=A.setFromMatrixPosition(t.matrixWorld),o=t.fov*Math.PI/180,a=r.distanceTo(n);return 1/(2*Math.tan(o/2)*a)}return 1}(j.current,R)*u;D.style.transform=`translate3d(${e[0]}px,${e[1]}px,0) scale(${t})`}W.current=e,I.current=R.zoom}}})),M.createElement("group",b.default({},w,{ref:j}))}));let N=0;const G=C.default((e=>(n.DefaultLoadingManager.onStart=(t,r,n)=>{e({active:!0,item:t,loaded:r,total:n,progress:(r-N)/(n-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=n),e({active:!0,item:t,loaded:r,total:n,progress:(r-N)/(n-N)*100||100})},{errors:[],active:!1,progress:0,item:"",loaded:0,total:0}))),H=e=>`Loading ${e.toFixed(2)}%`;const $={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"}},q=M.createContext(null);function X(){return M.useContext(q)}const Z=M.forwardRef((({children:e},t)=>{const r=M.useRef(null),n=X(),{width:a,height:s}=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:s*(n.pages-1)*n.offset})),M.createElement("group",{ref:R.default([t,r])},e)})),Y=M.forwardRef((({children:e,style:t,...r},n)=>{const a=X(),s=M.useRef(null),{width:i,height:l}=o.useThree((e=>e.size)),c=M.useContext(o.context),u=M.useMemo((()=>S.createRoot(a.fixed)),[a.fixed]);return o.useFrame((()=>{a.delta>a.eps&&(s.current.style.transform=`translate3d(${a.horizontal?-i*(a.pages-1)*a.offset:0}px,${a.horizontal?0:l*(a.pages-1)*-a.offset}px,0)`)})),u.render(M.createElement("div",b.default({ref:R.default([n,s]),style:{...t,position:"absolute",top:0,left:0,willChange:"transform"}},r),M.createElement(q.Provider,{value:a},M.createElement(o.context.Provider,{value:c},e)))),null})),K=M.forwardRef((({html:e,...t},r)=>{const n=e?Y:Z;return M.createElement(n,b.default({ref:r},t))}));const Q=M.createContext([]);const J=M.forwardRef((function({follow:e=!0,lockX:t=!1,lockY:r=!1,lockZ:n=!1,...a},s){const i=M.useRef();return o.useFrame((({camera:o})=>{if(!e||!i.current)return;const a=i.current.rotation.clone();i.current.quaternion.copy(o.quaternion),t&&(i.current.rotation.x=a.x),r&&(i.current.rotation.y=a.y),n&&(i.current.rotation.z=a.z)})),M.createElement("group",b.default({ref:R.default([i,s])},a))})),ee=M.forwardRef((function({points:e,color:t="black",vertexColors:r,lineWidth:o,dashed:a,...s},i){const[l]=M.useState((()=>new c.Line2)),[u]=M.useState((()=>new c.LineMaterial)),[d]=M.useState((()=>new n.Vector2(512,512))),m=M.useMemo((()=>{const t=new c.LineGeometry,o=e.map((e=>e instanceof n.Vector3?e.toArray():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 M.useLayoutEffect((()=>{l.computeLineDistances()}),[e,l]),M.useLayoutEffect((()=>{a?u.defines.USE_DASH="":delete u.defines.USE_DASH,u.needsUpdate=!0}),[a,u]),M.useEffect((()=>()=>m.dispose()),[m]),M.createElement("primitive",b.default({object:l,ref:i},s),M.createElement("primitive",{object:m,attach:"geometry"}),M.createElement("primitive",b.default({object:u,attach:"material",color:t,vertexColors:Boolean(r),resolution:d,linewidth:o,dashed:a},s)))})),te=new n.Vector3,re=M.forwardRef((function({start:e=[0,0,0],end:t=[0,0,0],mid:r,segments:o=20,...a},s){const i=M.useRef(null),[l]=M.useState((()=>new n.QuadraticBezierCurve3(void 0,void 0,void 0))),c=M.useCallback(((e,t,r,o=20)=>(e instanceof n.Vector3?l.v0.copy(e):l.v0.set(...e),t instanceof n.Vector3?l.v2.copy(t):l.v2.set(...t),r instanceof n.Vector3?l.v1.copy(r):l.v1.copy(l.v0.clone().add(l.v2.clone().sub(l.v0)).add(te.set(0,l.v0.y-l.v2.y,0))),l.getPoints(o))),[]);M.useLayoutEffect((()=>{i.current.setPoints=(e,t,r)=>{const n=c(e,t,r);i.current.geometry&&i.current.geometry.setPositions(n.map((e=>e.toArray())).flat())}}),[]);const u=M.useMemo((()=>c(e,t,r,o)),[e,t,r,o]);return M.createElement(ee,b.default({ref:R.default([i,s]),points:u},a))})),ne=M.forwardRef((function({start:e,end:t,midA:r,midB:o,segments:a=20,...s},i){const l=M.useMemo((()=>{const s=e instanceof n.Vector3?e:new n.Vector3(...e),i=t instanceof n.Vector3?t:new n.Vector3(...t),l=r instanceof n.Vector3?r:new n.Vector3(...r),c=o instanceof n.Vector3?o:new n.Vector3(...o);return new n.CubicBezierCurve3(s,l,c,i).getPoints(a)}),[e,t,r,o,a]);return M.createElement(ee,b.default({ref:i,points:l},s))})),oe=M.forwardRef((({url:e,distance:t=1,loop:r=!0,autoplay:a,...s},i)=>{const l=M.useRef(),c=o.useThree((({camera:e})=>e)),[u]=M.useState((()=>new n.AudioListener)),d=o.useLoader(n.AudioLoader,e);return M.useEffect((()=>{const e=l.current;e&&(e.setBuffer(d),e.setRefDistance(t),e.setLoop(r),a&&!e.isPlaying&&e.play())}),[d,c,t,r]),M.useEffect((()=>{const e=l.current;return c.add(u),()=>{c.remove(u),e&&(e.isPlaying&&e.stop(),e.source&&e.source._connected&&e.disconnect())}}),[]),M.createElement("positionalAudio",b.default({ref:R.default([l,i]),args:[u]},s))})),ae=M.forwardRef((({anchorX:e="center",anchorY:t="middle",font:r,children:n,characters:a,onSync:s,...i},l)=>{const c=o.useThree((({invalidate:e})=>e)),[u]=M.useState((()=>new d.Text)),[f,p]=M.useMemo((()=>{const e=[];let t="";return M.Children.forEach(n,(r=>{"string"==typeof r||"number"==typeof r?t+=r:e.push(r)})),[e,t]}),[n]);return m.suspend((()=>new Promise((e=>d.preloadFont({font:r,characters:a},e)))),["troika-text",r,a]),M.useLayoutEffect((()=>{u.sync((()=>{c(),s&&s(u)}))})),M.useEffect((()=>()=>u.dispose()),[u]),M.createElement("primitive",b.default({object:u,ref:l,font:r,text:p,anchorX:e,anchorY:t},i),f)}));o.extend({EffectComposer:c.EffectComposer,RenderPass:c.RenderPass,ShaderPass:c.ShaderPass});const se=()=>{try{var e=document.createElement("canvas");return!(!window.WebGL2RenderingContext||!e.getContext("webgl2"))}catch(e){return!1}},ie=M.forwardRef((({children:e,multisamping:t=8,renderIndex:r=1,disableGamma:a=!1,disableRenderPass:s=!1,...i},l)=>{const u=M.useRef(),d=o.useThree((({scene:e})=>e)),m=o.useThree((({camera:e})=>e)),f=o.useThree((({gl:e})=>e)),p=o.useThree((({size:e})=>e)),[h]=M.useState((()=>{if(se()&&t>0){const e=new n.WebGLRenderTarget(p.width,p.height,{format:n.RGBAFormat,encoding:n.sRGBEncoding});return e.samples=8,e}}));return M.useEffect((()=>{var e,t;null==(e=u.current)||e.setSize(p.width,p.height),null==(t=u.current)||t.setPixelRatio(f.getPixelRatio())}),[f,p]),o.useFrame((()=>{var e;return null==(e=u.current)?void 0:e.render()}),r),M.createElement("effectComposer",b.default({ref:R.default([l,u]),args:[f,h]},i),!s&&M.createElement("renderPass",{attach:"passes",args:[d,m]}),!a&&M.createElement("shaderPass",{attach:"passes",args:[c.GammaCorrectionShader]}),e)}));function le(e,t,r,n){return class extends T.ShaderMaterial{constructor(){const o=Object.entries(e);super({uniforms:o.reduce(((e,[t,r])=>({...e,...T.UniformsUtils.clone({[t]:{value:r}})})),{}),vertexShader:t,fragmentShader:r}),o.forEach((([e])=>Object.defineProperty(this,e,{get:()=>this.uniforms[e].value,set:t=>this.uniforms[e].value=t}))),n&&n(this)}}}const ce=e=>e===Object(e)&&!Array.isArray(e)&&"function"!=typeof e;function ue(e){const r=o.useThree((e=>e.gl)),a=o.useLoader(n.TextureLoader,ce(e)?Object.values(e):e);if(t.useEffect((()=>{(Array.isArray(a)?a:[a]).forEach(r.initTexture)}),[r,a]),ce(e)){const t=Object.keys(e),r={};return t.forEach((e=>Object.assign(r,{[e]:a[t.indexOf(e)]}))),r}return a}ue.preload=e=>o.useLoader.preload(n.TextureLoader,e),ue.clear=e=>o.useLoader.clear(n.TextureLoader,e);const de=le({color:new T.Color("white"),scale:[1,1],imageBounds:[1,1],map:null,zoom:1,grayscale:0},"\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 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, 1.0), grayscale);\n \n #include <tonemapping_fragment>\n #include <encodings_fragment>\n }\n"),me=M.forwardRef((({children:e,color:t,segments:r=1,scale:n=1,zoom:a=1,grayscale:s=0,url:i,toneMapped:l,...c},u)=>{o.extend({ImageMaterial:de});const d=ue(i),m=Array.isArray(n)?[n[0],n[1]]:[n,n],f=[d.image.width,d.image.height];return M.createElement("mesh",b.default({ref:u,scale:n},c),M.createElement("planeGeometry",{args:[1,1,r,r]}),M.createElement("imageMaterial",{color:t,map:d,zoom:a,grayscale:s,scale:m,imageBounds:f,toneMapped:l}),e)}));const fe={width:.2,length:1,decay:1,local:!1,stride:0,interval:1},pe=(e,t=1)=>(e.set(e.subarray(t)),e.fill(-1/0,-t),e);function he(e,t){const{length:r,local:a,decay:s,interval:i,stride:l}={...fe,...t},c=M.useRef(),[u]=M.useState((()=>new n.Vector3));M.useLayoutEffect((()=>{e&&(c.current=Float32Array.from({length:10*r*3},((t,r)=>e.position.getComponent(r%3))))}),[r,e]);const d=M.useRef(new n.Vector3),m=M.useRef(0);return o.useFrame((()=>{if(e&&c.current){if(0===m.current){let t;a?t=e.position:(e.getWorldPosition(u),t=u);const r=1*s;for(let e=0;e<r;e++)t.distanceTo(d.current)<l||(pe(c.current,3),c.current.set(t.toArray(),c.current.length-3));d.current.copy(t)}m.current++,m.current=m.current%i}})),c}const ve=M.forwardRef(((e,t)=>{const{children:r}=e,{width:a,length:s,decay:i,local:l,stride:c,interval:u}={...fe,...e},{color:d="hotpink",attenuation:m,target:p}=e,h=o.useThree((e=>e.size)),v=M.useRef(null),[g,x]=M.useState(null),y=he(g,{length:s,decay:i,local:l,stride:c,interval:u});M.useEffect((()=>{const e=(null==p?void 0:p.current)||v.current.children.find((e=>e instanceof n.Object3D));e&&x(e)}),[y,p]);const w=M.useMemo((()=>new f.MeshLine),[]),E=M.useMemo((()=>{var e;const t=new f.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 M.useEffect((()=>{E.uniforms.resolution.value.set(h.width,h.height)}),[h]),o.useFrame((()=>{y.current&&w.setPoints(y.current,m)})),M.createElement("group",null,M.createElement("mesh",{ref:t,geometry:w,material:E}),M.createElement("group",{ref:v},r))}));function ge(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 s=P.default(e,t);return r&&(s.geometry&&"materialsOnly"!==r&&(s.geometry=s.geometry.clone()),s.material&&"geometriesOnly"!==r&&(s.material=s.material.clone())),n&&(s="function"==typeof n?{...s,children:n(e)}:M.isValidElement(n)?{...s,children:n}:{...s,...n}),"Mesh"===e.type&&(o&&(s.castShadow=!0),a&&(s.receiveShadow=!0)),s}const xe=M.forwardRef((({object:e,children:t,deep:r,castShadow:n,receiveShadow:o,inject:a,keys:s,...i},l)=>{const c={keys:s,deep:r,inject:a,castShadow:n,receiveShadow:o};if(Array.isArray(e))return M.createElement("group",b.default({},i,{ref:l}),e.map((e=>M.createElement(xe,b.default({key:e.uuid,object:e},c)))),t);const{children:u,...d}=ge(e,c),m=e.type[0].toLowerCase()+e.type.slice(1);return M.createElement(m,b.default({},d,i,{ref:l}),(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=xe,t={object:e,...c}):t=ge(e,c),M.createElement(r,b.default({key:e.uuid},t))})),t,u)})),ye=M.forwardRef((({makeDefault:e,...t},r)=>{const n=o.useThree((({set:e})=>e)),a=o.useThree((({camera:e})=>e)),s=o.useThree((({size:e})=>e)),i=M.useRef();return M.useLayoutEffect((()=>{i.current&&!t.manual&&i.current.updateProjectionMatrix()}),[s,t]),M.useLayoutEffect((()=>{if(e&&i.current){const e=a;return n((()=>({camera:i.current}))),()=>n((()=>({camera:e})))}}),[a,i,e,n]),M.createElement("orthographicCamera",b.default({left:s.width/-2,right:s.width/2,top:s.height/2,bottom:s.height/-2,ref:R.default([i,r])},t))})),we=M.forwardRef((({makeDefault:e,...t},r)=>{const n=o.useThree((({set:e})=>e)),a=o.useThree((({camera:e})=>e)),s=o.useThree((({size:e})=>e)),i=M.useRef();return M.useLayoutEffect((()=>{const{current:e}=i;e&&!t.manual&&(e.aspect=s.width/s.height,e.updateProjectionMatrix())}),[s,t]),M.useLayoutEffect((()=>{if(e&&i.current){const e=a;return n((()=>({camera:i.current}))),()=>n((()=>({camera:e})))}}),[a,i,e,n]),M.createElement("perspectiveCamera",b.default({ref:R.default([i,r])},t))}));const Ee=M.forwardRef(((e,t)=>{const{camera:r,onChange:n,...a}=e,s=o.useThree((e=>e.camera)),i=o.useThree((e=>e.invalidate)),l=r||s,[u]=M.useState((()=>new c.DeviceOrientationControls(l)));return M.useEffect((()=>{const e=e=>{i(),n&&n(e)};return null==u||null==u.addEventListener||u.addEventListener("change",e),()=>null==u||null==u.removeEventListener?void 0:u.removeEventListener("change",e)}),[n,u,i]),o.useFrame((()=>null==u?void 0:u.update())),M.useEffect((()=>{const e=u;return null==e||e.connect(),()=>null==e?void 0:e.dispose()}),[u]),u?M.createElement("primitive",b.default({ref:t,dispose:void 0,object:u},a)):null})),be=M.forwardRef((({domElement:e,...t},r)=>{const{onChange:n,...a}=t,s=o.useThree((e=>e.invalidate)),i=o.useThree((e=>e.camera)),l=o.useThree((e=>e.gl)),u=o.useThree((e=>e.events)),d=e||u.connected||l.domElement,[m]=M.useState((()=>new c.FlyControls(i,d)));return M.useEffect((()=>{const e=e=>{s(),n&&n(e)};return null==m||null==m.addEventListener||m.addEventListener("change",e),()=>null==m||null==m.removeEventListener?void 0:m.removeEventListener("change",e)}),[n,m,s]),o.useFrame(((e,t)=>null==m?void 0:m.update(t))),m?M.createElement("primitive",b.default({ref:r,dispose:void 0,object:m},a)):null})),Me=M.forwardRef(((e={enableDamping:!0},t)=>{const{domElement:r,camera:n,onChange:a,onStart:s,onEnd:i,...l}=e,u=o.useThree((e=>e.invalidate)),d=o.useThree((e=>e.camera)),m=o.useThree((e=>e.gl)),f=o.useThree((e=>e.events)),p=r||f.connected||m.domElement,h=n||d,v=M.useMemo((()=>new c.MapControls(h)),[h]);return M.useEffect((()=>{v.connect(p);const e=e=>{u(),a&&a(e)};return v.addEventListener("change",e),s&&v.addEventListener("start",s),i&&v.addEventListener("end",i),()=>{v.dispose(),v.removeEventListener("change",e),s&&v.removeEventListener("start",s),i&&v.removeEventListener("end",i)}}),[a,s,i,v,u,p]),o.useFrame((()=>v.update())),M.createElement("primitive",b.default({ref:t,dispose:void 0,object:v,enableDamping:!0},l))})),Se=M.forwardRef((({makeDefault:e,camera:t,regress:r,domElement:n,enableDamping:a=!0,onChange:s,onStart:i,onEnd:l,...u},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=M.useMemo((()=>new c.OrbitControls(y)),[y]);return o.useFrame((()=>{E.enabled&&E.update()})),M.useEffect((()=>(E.connect(w),()=>{E.dispose()})),[w,r,E,m]),M.useEffect((()=>{const e=e=>{m(),r&&x.regress(),s&&s(e)};return E.addEventListener("change",e),i&&E.addEventListener("start",i),l&&E.addEventListener("end",l),()=>{i&&E.removeEventListener("start",i),l&&E.removeEventListener("end",l),E.removeEventListener("change",e)}}),[s,i,l]),M.useEffect((()=>{if(e){const e=g().controls;return v({controls:E}),()=>v({controls:e})}}),[e,E]),M.createElement("primitive",b.default({ref:d,object:E,enableDamping:a},u))})),Te=M.forwardRef((({makeDefault:e,camera:t,domElement:r,regress:n,onChange:a,onStart:s,onEnd:i,...l},u)=>{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=M.useMemo((()=>new c.TrackballControls(y)),[y]);return o.useFrame((()=>{E.enabled&&E.update()})),M.useEffect((()=>(E.connect(w),()=>{E.dispose()})),[w,n,E,d]),M.useEffect((()=>{const e=e=>{d(),n&&g.regress(),a&&a(e)};return E.addEventListener("change",e),s&&E.addEventListener("start",s),i&&E.addEventListener("end",i),()=>{s&&E.removeEventListener("start",s),i&&E.removeEventListener("end",i),E.removeEventListener("change",e)}}),[a,s,i]),M.useEffect((()=>{E.handleResize()}),[x]),M.useEffect((()=>{if(e){const e=v().controls;return h({controls:E}),()=>h({controls:e})}}),[e,E]),M.createElement("primitive",b.default({ref:u,object:E},l))})),Ce=t.forwardRef((({camera:e,makeDefault:r,regress:n,domElement:a,onChange:s,onStart:i,onEnd:l,...u},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 c.ArcballControls(y)),[y]);return o.useFrame((()=>{E.enabled&&E.update()})),t.useEffect((()=>(E.connect(w),()=>{E.dispose()})),[w,n,E,m]),t.useEffect((()=>{const e=e=>{m(),n&&x.regress(),s&&s(e)};return E.addEventListener("change",e),i&&E.addEventListener("start",i),l&&E.addEventListener("end",l),()=>{E.removeEventListener("change",e),i&&E.removeEventListener("start",i),l&&E.removeEventListener("end",l)}}),[s,i,l]),t.useEffect((()=>{if(r){const e=g().controls;return v({controls:E}),()=>v({controls:e})}}),[r,E]),M.createElement("primitive",b.default({ref:d,object:E},u))})),Re=M.forwardRef((({children:e,domElement:t,onChange:r,onMouseDown:n,onMouseUp:a,onObjectChange:s,object:i,...l},u)=>{const d=["enabled","axis","mode","translationSnap","rotationSnap","scaleSnap","space","size","showX","showY","showZ"],{camera:m,...f}=l,p=P.default(f,d),h=L.default(f,d),v=o.useThree((e=>e.controls)),g=o.useThree((e=>e.gl)),x=o.useThree((e=>e.events)),y=o.useThree((e=>e.camera)),w=o.useThree((e=>e.invalidate)),E=m||y,S=t||x.connected||g.domElement,C=M.useMemo((()=>new c.TransformControls(E,S)),[E,S]),R=M.useRef();return M.useLayoutEffect((()=>(i?C.attach(i instanceof T.Object3D?i:i.current):R.current instanceof T.Object3D&&C.attach(R.current),()=>{C.detach()})),[i,e,C]),M.useEffect((()=>{if(v){const e=e=>v.enabled=!e.value;return C.addEventListener("dragging-changed",e),()=>C.removeEventListener("dragging-changed",e)}}),[C,v]),M.useEffect((()=>{const e=e=>{w(),r&&r(e)};return null==C||null==C.addEventListener||C.addEventListener("change",e),n&&(null==C||null==C.addEventListener||C.addEventListener("mouseDown",n)),a&&(null==C||null==C.addEventListener||C.addEventListener("mouseUp",a)),s&&(null==C||null==C.addEventListener||C.addEventListener("objectChange",s)),()=>{null==C||null==C.removeEventListener||C.removeEventListener("change",e),n&&(null==C||null==C.removeEventListener||C.removeEventListener("mouseDown",n)),a&&(null==C||null==C.removeEventListener||C.removeEventListener("mouseUp",a)),s&&(null==C||null==C.removeEventListener||C.removeEventListener("objectChange",s))}}),[r,n,a,s,C,w]),C?M.createElement(M.Fragment,null,M.createElement("primitive",b.default({ref:u,dispose:void 0,object:C},p)),M.createElement("group",b.default({ref:R},h),e)):null})),_e=M.forwardRef((({domElement:e,selector:t,onChange:r,onLock:n,onUnlock:a,enabled:s=!0,...i},l)=>{const{camera:u,...d}=i,m=o.useThree((e=>e.get)),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=u||h,y=e||g.connected||p.domElement,[w]=M.useState((()=>new c.PointerLockControls(x)));return M.useEffect((()=>{if(s){w.connect(y);const e=m().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)}}),()=>{w.disconnect(),f({compute:e})}}}),[s,w]),M.useEffect((()=>{const e=e=>{v(),r&&r(e)};w.addEventListener("change",e),n&&w.addEventListener("lock",n),a&&w.addEventListener("unlock",a);const o=()=>w.lock(),s=t?Array.from(document.querySelectorAll(t)):[document];return s.forEach((e=>e&&e.addEventListener("click",o))),()=>{w.removeEventListener("change",e),n&&w.addEventListener("lock",n),a&&w.addEventListener("unlock",a),s.forEach((e=>e?e.removeEventListener("click",o):void 0))}}),[r,n,a,t]),M.createElement("primitive",b.default({ref:l,object:w},d))})),Pe=M.forwardRef((({domElement:e,...t},r)=>{const n=o.useThree((e=>e.camera)),a=o.useThree((e=>e.gl)),s=o.useThree((e=>e.events)),i=e||s.connected||a.domElement,[l]=M.useState((()=>new c.FirstPersonControls(n,i)));return o.useFrame(((e,t)=>{l.update(t)})),l?M.createElement("primitive",b.default({ref:r,object:l},t)):null}));function Le(e,t){const r=o.useThree((e=>e.pointer)),[a]=M.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 s=this.constructor.prototype.raycast.bind(this);s&&s(a,o)}}));return a}const De=M.createContext({}),ze=()=>M.useContext(De),Be=2*Math.PI,Ae=new n.Object3D,Fe=new n.Matrix4,[Ue,ke]=[new n.Quaternion,new n.Quaternion],je=new n.Vector3,Ve=new n.Vector3,Ie="#f0f0f0",Oe="#999",We="black",Ne="black",Ge=["Right","Left","Top","Bottom","Front","Back"],He=e=>new n.Vector3(...e).multiplyScalar(.38),$e=[[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(He),qe=[.25,.25,.25],Xe=[[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(He),Ze=Xe.map((e=>e.toArray().map((e=>0==e?.5:.25)))),Ye=({hover:e,index:t,font:r="20px Inter var, Arial, sans-serif",faces:a=Ge,color:s=Ie,hoverColor:i=Oe,textColor:l=We,strokeColor:c=Ne,opacity:u=1})=>{const d=o.useThree((e=>e.gl)),m=M.useMemo((()=>{const e=document.createElement("canvas");e.width=128,e.height=128;const o=e.getContext("2d");return o.fillStyle=s,o.fillRect(0,0,e.width,e.height),o.strokeStyle=c,o.strokeRect(0,0,e.width,e.height),o.font=r,o.textAlign="center",o.fillStyle=l,o.fillText(a[t].toUpperCase(),64,76),new n.CanvasTexture(e)}),[t,a,r,s,l,c]);return M.createElement("meshLambertMaterial",{map:m,"map-anisotropy":d.capabilities.getMaxAnisotropy()||1,attach:`material-${t}`,color:e?i:"white",transparent:!0,opacity:u})},Ke=e=>{const{tweenCamera:t,raycast:r}=ze(),[n,o]=M.useState(null);return M.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)=>M.createElement(Ye,b.default({key:r,index:r,hover:n===r},e)))),M.createElement("boxGeometry",null))},Qe=({onClick:e,dimensions:t,position:r,hoverColor:n=Oe})=>{const{tweenCamera:o,raycast:a}=ze(),[s,i]=M.useState(!1);return M.createElement("mesh",{scale:1.01,position:r,raycast:a,onPointerOver:e=>{e.stopPropagation(),i(!0)},onPointerOut:e=>{e.stopPropagation(),i(!1)},onClick:e||(e=>{e.stopPropagation(),o(r)})},M.createElement("meshBasicMaterial",{color:s?n:"white",transparent:!0,opacity:.6,visible:s}),M.createElement("boxGeometry",{args:t}))};function Je({scale:e=[.8,.05,.05],color:t,rotation:r}){return M.createElement("group",{rotation:r},M.createElement("mesh",{position:[.4,0,0]},M.createElement("boxGeometry",{args:e}),M.createElement("meshBasicMaterial",{color:t,toneMapped:!1})))}function et({onClick:e,font:t,disabled:r,arcStyle:a,label:s,labelColor:i,axisHeadScale:l=1,...c}){const u=o.useThree((e=>e.gl)),d=M.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(),s&&(r.font=t,r.textAlign="center",r.fillStyle=i,r.fillText(s,32,41)),new n.CanvasTexture(e)}),[a,s,i,t]),[m,f]=M.useState(!1),p=(s?1:.75)*(m?1.2:1)*l;return M.createElement("sprite",b.default({scale:p,onPointerOver:r?void 0:e=>{e.stopPropagation(),f(!0)},onPointerOut:r?void 0:e||(e=>{e.stopPropagation(),f(!1)})},c),M.createElement("spriteMaterial",{map:d,"map-anisotropy":u.capabilities.getMaxAnisotropy()||1,alphaTest:.3,opacity:s?1:.75,toneMapped:!1}))}function tt(e,{path:t}){const[r]=o.useLoader(n.CubeTextureLoader,[e],(e=>e.setPath(t)));return r}function rt(e){return o.useLoader(c.FBXLoader,e)}tt.preload=(e,{path:t})=>o.useLoader.preload(n.CubeTextureLoader,[e],(e=>e.setPath(t))),rt.preload=e=>o.useLoader.preload(c.FBXLoader,e),rt.clear=e=>o.useLoader.clear(c.FBXLoader,e);let nt=null;function ot(e,t,r){return n=>{r&&r(n),e&&(nt||(nt=new c.DRACOLoader),nt.setDecoderPath("string"==typeof e?e:"https://www.gstatic.com/draco/versioned/decoders/1.4.3/"),n.setDRACOLoader(nt)),t&&n.setMeshoptDecoder("function"==typeof c.MeshoptDecoder?c.MeshoptDecoder():c.MeshoptDecoder)}}function at(e,t=!0,r=!0,n){return o.useLoader(c.GLTFLoader,e,ot(t,r,n))}at.preload=(e,t=!0,r=!0,n)=>o.useLoader.preload(c.GLTFLoader,e,ot(t,r,n)),at.clear=e=>o.useLoader.clear(c.GLTFLoader,e);const st="https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master";function it(e,r=`${st}/basis/`){const n=o.useThree((e=>e.gl)),a=o.useLoader(c.KTX2Loader,ce(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]),ce(e)){const t=Object.keys(e),r={};return t.forEach((e=>Object.assign(r,{[e]:a[t.indexOf(e)]}))),r}return a}function lt(e,t){"function"==typeof e?e(t):null!=e&&(e.current=t)}function ct(e,t,r){const{gl:n,size:a}=o.useThree(),s=M.useMemo((()=>n.getPixelRatio()),[n]),i="number"==typeof e?e:a.width*s,l="number"==typeof t?t:a.height*s,c=("number"==typeof e?r:e)||{},{samples:u,...d}=c,m=M.useMemo((()=>{let e;return e=new T.WebGLRenderTarget(i,l,{minFilter:T.LinearFilter,magFilter:T.LinearFilter,encoding:n.outputEncoding,type:T.HalfFloatType,...d}),e.samples=u,e}),[]);return M.useLayoutEffect((()=>{m.setSize(i,l),u&&(m.samples=u)}),[u,m,i,l]),M.useEffect((()=>()=>m.dispose()),[]),m}it.preload=(e,t=`${st}/basis/`)=>o.useLoader.preload(c.KTX2Loader,e,(e=>{e.setTranscoderPath(t)})),it.clear=e=>o.useLoader.clear(c.KTX2Loader,e);const ut=M.forwardRef((({children:e,curve:t},r)=>{const[n]=M.useState((()=>new T.Scene)),[a,s]=M.useState(),i=M.useRef();return M.useEffect((()=>{i.current=new c.Flow(n.children[0]),s(i.current.object3D)}),[e]),M.useEffect((()=>{var e;t&&(null==(e=i.current)||e.updateCurve(0,t))}),[t]),M.useImperativeHandle(r,(()=>({moveAlongCurve:e=>{var t;null==(t=i.current)||t.moveAlongCurve(e)}}))),M.createElement(M.Fragment,null,o.createPortal(e,n),a&&M.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 mt=M.forwardRef((({speed:e=1,...t},r)=>{const[n]=M.useState((()=>new dt));return o.useFrame((t=>n&&(n.time=t.clock.getElapsedTime()*e))),M.createElement("primitive",b.default({dispose:void 0,object:n,ref:r,attach:"material"},t))}));class ft 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 pt=M.forwardRef((({speed:e=1,...t},r)=>{const[n]=M.useState((()=>new ft));return o.useFrame((t=>n&&(n.time=t.clock.getElapsedTime()*e))),M.createElement("primitive",b.default({dispose:void 0,object:n,ref:r,attach:"material"},t))}));class ht 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 vt{constructor({gl:e,resolution:t,width:r=500,height:o=500,minDepthThreshold:a=0,maxDepthThreshold:s=1,depthScale:i=0,depthToBlurRatioBias:l=.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 ht,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=s,this.convolutionMaterial.uniforms.depthScale.value=i,this.convolutionMaterial.uniforms.depthToBlurRatioBias.value=l,this.convolutionMaterial.defines.USE_DEPTH=i>0;const c=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(c,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,s=this.renderTargetB;let i=this.convolutionMaterial,l=i.uniforms;l.depthBuffer.value=t.depthTexture;const c=i.kernel;let u,d,m,f=t;for(d=0,m=c.length-1;d<m;++d)u=0==(1&d)?a:s,l.kernel.value=c[d],l.inputBuffer.value=f.texture,e.setRenderTarget(u),e.render(n,o),f=u;l.kernel.value=c[d],l.inputBuffer.value=f.texture,e.setRenderTarget(this.renderToScreen?null:r),e.render(n,o)}}class gt 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:gt});const xt=M.forwardRef((({mixBlur:e=0,mixStrength:t=1,resolution:r=256,blur:a=[0,0],minDepthThreshold:s=.9,maxDepthThreshold:i=1,depthScale:l=0,depthToBlurRatioBias:c=.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=M.useRef(null),[S]=M.useState((()=>new n.Plane)),[T]=M.useState((()=>new n.Vector3)),[C]=M.useState((()=>new n.Vector3)),[_]=M.useState((()=>new n.Vector3)),[P]=M.useState((()=>new n.Matrix4)),[L]=M.useState((()=>new n.Vector3(0,0,-1))),[D]=M.useState((()=>new n.Vector4)),[z]=M.useState((()=>new n.Vector3)),[B]=M.useState((()=>new n.Vector3)),[A]=M.useState((()=>new n.Vector4)),[F]=M.useState((()=>new n.Matrix4)),[U]=M.useState((()=>new n.PerspectiveCamera)),k=M.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),_.setFromMatrixPosition(x.matrixWorld),P.extractRotation(t.matrixWorld),T.set(0,0,1),T.applyMatrix4(P),C.addScaledVector(T,p),z.subVectors(C,_),z.dot(T)>0)return;z.reflect(T).negate(),z.add(C),P.extractRotation(x.matrixWorld),L.set(0,0,-1),L.applyMatrix4(P),L.add(_),B.subVectors(C,L),B.reflect(T).negate(),B.add(C),U.position.copy(z),U.up.set(0,1,0),U.up.applyMatrix4(P),U.up.reflect(T),U.lookAt(B),U.far=x.far,U.updateMatrixWorld(),U.projectionMatrix.copy(x.projectionMatrix),F.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),F.multiply(U.projectionMatrix),F.multiply(U.matrixWorldInverse),F.multiply(t.matrixWorld),S.setFromNormalAndCoplanarPoint(T,C),S.applyMatrix4(U.matrixWorldInverse),D.set(S.normal.x,S.normal.y,S.normal.z,S.constant);const r=U.projectionMatrix;A.x=(Math.sign(D.x)+r.elements[8])/r.elements[0],A.y=(Math.sign(D.y)+r.elements[9])/r.elements[5],A.z=-1,A.w=(1+r.elements[10])/r.elements[14],D.multiplyScalar(2/D.dot(A)),r.elements[2]=D.x,r.elements[6]=D.y,r.elements[10]=D.z+1,r.elements[14]=D.w}),[x,p]),[j,V,I,O]=M.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 vt({gl:g,resolution:r,width:a[0],height:a[1],minDepthThreshold:s,maxDepthThreshold:i,depthScale:l,depthToBlurRatioBias:c}),{mirror:u,textureMatrix:F,mixBlur:e,tDiffuse:p.texture,tDepth:p.depthTexture,tDiffuseBlur:h.texture,hasBlur:w,mixStrength:t,minDepthThreshold:s,maxDepthThreshold:i,depthScale:l,depthToBlurRatioBias:c,transparent:!0,distortion:d,distortionMap:f,mixContrast:m,"defines-USE_BLUR":w?"":void 0,"defines-USE_DEPTH":l>0?"":void 0,"defines-USE_DISTORTION":f?"":void 0}]}),[g,a,F,r,u,w,e,t,s,i,l,c,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;k(),g.xr.enabled=!1,g.shadowMap.autoUpdate=!1,g.setRenderTarget(j),g.state.buffers.depth.setMask(!0),g.autoClear||g.clear(),g.render(y,U),w&&I.render(g,j,V),g.xr.enabled=r,g.shadowMap.autoUpdate=n,t.visible=!0,g.setRenderTarget(null)})),M.createElement("meshReflectorMaterialImpl",b.default({attach:"material",key:"key"+O["defines-USE_BLUR"]+O["defines-USE_DEPTH"]+O["defines-USE_DISTORTION"],ref:R.default([E,v])},O,h))}));class yt extends T.PointsMaterial{constructor(e){super(e),this.onBeforeCompile=e=>{e.fragmentShader=e.fragmentShader.replace("#include <output_fragment>","\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 wt=M.forwardRef(((e,t)=>{const[r]=M.useState((()=>new yt(null)));return M.createElement("primitive",b.default({},e,{object:r,ref:t,attach:"material"}))}));let Et=!1;function bt(e){const t=e+"BufferGeometry";return M.forwardRef((({args:e,children:r,...n},o)=>M.createElement("mesh",b.default({ref:o},n),M.createElement(t,{attach:"geometry",args:e}),r)))}const Mt=bt("box"),St=bt("circle"),Tt=bt("cone"),Ct=bt("cylinder"),Rt=bt("sphere"),_t=bt("plane"),Pt=bt("tube"),Lt=bt("torus"),Dt=bt("torusKnot"),zt=bt("tetrahedron"),Bt=bt("ring"),At=bt("polyhedron"),Ft=bt("icosahedron"),Ut=bt("octahedron"),kt=bt("dodecahedron"),jt=bt("extrude"),Vt=bt("lathe"),It=1e-5;const Ot=M.forwardRef((function({args:[e=1,t=1,r=1]=[],radius:o=.05,steps:a=1,smoothness:s=4,children:i,...l},c){const u=M.useMemo((()=>function(e,t,r){const o=new n.Shape,a=r-It;return o.absarc(It,It,It,-Math.PI/2,-Math.PI,!0),o.absarc(It,t-2*a,It,Math.PI,Math.PI/2,!0),o.absarc(e-2*a,t-2*a,It,Math.PI/2,0,!0),o.absarc(e-2*a,It,It,0,-Math.PI/2,!0),o}(e,t,o)),[e,t,o]),d=M.useMemo((()=>({depth:r-2*o,bevelEnabled:!0,bevelSegments:2*s,steps:a,bevelSize:o-It,bevelThickness:o,curveSegments:s})),[r,o,s]),m=M.useRef();return M.useLayoutEffect((()=>{m.current&&m.current.center()}),[u,d]),M.createElement("mesh",b.default({ref:c},l),M.createElement("extrudeBufferGeometry",{attach:"geometry",ref:m,args:[u,d]}),i)}));function Wt(){const e=new T.BufferGeometry,t=new Float32Array([-1,-1,3,-1,-1,3]);return e.setAttribute("position",new T.BufferAttribute(t,2)),e}const Nt=M.forwardRef((function({children:e,...t},r){const n=M.useMemo(Wt,[]);return M.createElement("mesh",b.default({ref:r,geometry:n,frustumCulled:!1},t),e)})),Gt=M.forwardRef((function({children:e,alignTop:t,...r},o){const a=M.useRef(null),s=M.useRef(null);return M.useLayoutEffect((()=>{a.current.position.set(0,0,0),a.current.updateWorldMatrix(!0,!0);const e=(new n.Box3).setFromObject(s.current),r=new n.Vector3,o=new n.Sphere,i=e.max.y-e.min.y;e.getCenter(r),e.getBoundingSphere(o),a.current.position.set(-r.x,-r.y+(t?i/2:0),-r.z)}),[e]),M.createElement("group",b.default({ref:o},r),M.createElement("group",{ref:a},M.createElement("group",{ref:s},e)))})),Ht=e=>e&&e.isOrthographicCamera,$t=M.createContext(null);const qt=M.forwardRef((({intensity:e=1,decay:t,decayRate:r=.65,maxYaw:n=.1,maxPitch:a=.1,maxRoll:s=.1,yawFrequency:i=.1,pitchFrequency:l=.1,rollFrequency:u=.1,controls:d},m)=>{const f=o.useThree((e=>e.camera)),p=o.useThree((e=>e.controls)),h=M.useRef(e),v=M.useRef(f.rotation.clone()),[g]=M.useState((()=>new c.SimplexNoise)),[x]=M.useState((()=>new c.SimplexNoise)),[y]=M.useState((()=>new c.SimplexNoise)),w=()=>{(h.current<0||h.current>1)&&(h.current=h.current<0?0:1)};return M.useImperativeHandle(m,(()=>({getIntensity:()=>h.current,setIntensity:e=>{h.current=e,w()}})),[]),M.useEffect((()=>{const e=p||(null==d?void 0:d.current),t=()=>{v.current=f.rotation.clone()};return null==e||e.addEventListener("change",t),()=>{null==e||e.removeEventListener("change",t)}}),[d,p]),o.useFrame((({clock:e},o)=>{const c=Math.pow(h.current,2),d=n*c*g.noise(e.elapsedTime*i,1),m=a*c*x.noise(e.elapsedTime*l,1),p=s*c*y.noise(e.elapsedTime*u,1);f.rotation.set(v.current.x+m,v.current.y+d,v.current.z+p),t&&h.current>0&&(h.current-=r*o,w())})),null})),Xt=M.forwardRef((({children:e,speed:t=1,rotationIntensity:r=1,floatIntensity:n=1,...a},s)=>{const i=M.useRef(null),l=M.useRef(1e4*Math.random());return o.useFrame((e=>{const o=l.current+e.clock.getElapsedTime();i.current.rotation.x=Math.cos(o/4*t)/8*r,i.current.rotation.y=Math.sin(o/4*t)/8*r,i.current.rotation.z=Math.sin(o/4*t)/20*r,i.current.position.y=Math.sin(o/4*t)/10*n})),M.createElement("group",a,M.createElement("group",{ref:R.default([i,s])},e))})),Zt={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"},Yt=e=>{return(t=e).current&&t.current.isScene?e.current:e;var t};function Kt(e){return e.map?M.createElement(Qt,e):e.children?M.createElement(Jt,e):M.createElement(er,e)}function Qt({scene:e,background:t=!1,map:r}){const n=o.useThree((e=>e.scene));return M.useLayoutEffect((()=>{if(r){const o=Yt(e||n),a=o.background,s=o.environment;return"only"!==t&&(o.environment=r),t&&(o.background=r),()=>{"only"!==t&&(o.environment=s),t&&(o.background=a)}}}),[e,r]),null}function Jt({children:e,near:t=1,far:r=1e3,resolution:a=256,frames:s=1,background:i=!1,scene:l,files:c,path:u,preset:d,extensions:m}){const f=o.useThree((e=>e.gl)),p=o.useThree((e=>e.scene)),h=M.useRef(null),[v]=M.useState((()=>new n.Scene)),g=M.useMemo((()=>{const e=new n.WebGLCubeRenderTarget(a);return e.texture.type=n.HalfFloatType,e}),[a]);M.useLayoutEffect((()=>{1===s&&h.current.update(f,v);const e=Yt(l||p),t=e.background,r=e.environment;return"only"!==i&&(e.environment=g.texture),i&&(e.background=g.texture),()=>{"only"!==i&&(e.environment=r),i&&(e.background=t)}}),[e,l]);let x=1;return o.useFrame((()=>{(s===1/0||x<s)&&(h.current.update(f,v),x++)})),M.createElement(M.Fragment,null,o.createPortal(M.createElement(M.Fragment,null,e,M.createElement("cubeCamera",{ref:h,args:[t,r,g]}),(c||d)&&M.createElement(Qt,{background:!0,files:c,preset:d,path:u,extensions:m})),v))}function er({background:e=!1,files:t=["/px.png","/nx.png","/py.png","/ny.png","/pz.png","/nz.png"],path:r="",preset:a,scene:s,extensions:i}){if(a){if(!(a in Zt))throw new Error("Preset must be one of: "+Object.keys(Zt).join(", "));t=Zt[a],r="https://market-assets.fra1.cdn.digitaloceanspaces.com/market-assets/hdris/"}const l=o.useThree((e=>e.scene)),u=Array.isArray(t),d=u?n.CubeTextureLoader:c.RGBELoader,m=o.useLoader(d,u?[t]:t,(e=>{e.setPath(r),null==e.setDataType||e.setDataType(n.FloatType),i&&i(e)})),f=u?m[0]:m;return f.mapping=u?n.CubeReflectionMapping:n.EquirectangularReflectionMapping,M.useLayoutEffect((()=>{const t=Yt(s||l),r=t.background,n=t.environment;return"only"!==e&&(t.environment=f),e&&(t.background=f),()=>{"only"!==e&&(t.environment=n),e&&(t.background=r)}}),[f,e,s]),null}const tr=M.forwardRef((({scale:e=10,frames:t=1/0,opacity:r=1,width:n=1,height:a=1,blur:s=1,far:i=10,resolution:l=512,smooth:u=!0,color:d="#000000",...m},f)=>{const p=o.useThree((({scene:e})=>e)),h=o.useThree((({gl:e})=>e)),v=M.useRef(null);n*=Array.isArray(e)?e[0]:e||1,a*=Array.isArray(e)?e[1]:e||1;const[g,x,y,w,E,S,C]=M.useMemo((()=>{const e=new T.WebGLRenderTarget(l,l),t=new T.WebGLRenderTarget(l,l);t.texture.generateMipmaps=e.texture.generateMipmaps=!1;const r=new T.PlaneBufferGeometry(n,a).rotateX(Math.PI/2),o=new T.Mesh(r),s=new T.MeshDepthMaterial;s.depthTest=s.depthWrite=!1,s.onBeforeCompile=e=>{e.uniforms={...e.uniforms,ucolor:{value:new T.Color(d).convertSRGBToLinear()}},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, ( 1.0 - fragCoordZ ) * 1.0 );")};const i=new T.ShaderMaterial(c.HorizontalBlurShader),u=new T.ShaderMaterial(c.VerticalBlurShader);return u.depthTest=i.depthTest=!1,[e,r,s,o,i,u,t]}),[l,n,a,e]),R=M.useCallback((e=>{w.visible=!0,w.material=E,E.uniforms.tDiffuse.value=g.texture,E.uniforms.h.value=1*e/256,h.setRenderTarget(C),h.render(w,v.current),w.material=S,S.uniforms.tDiffuse.value=C.texture,S.uniforms.v.value=1*e/256,h.setRenderTarget(g),h.render(w,v.current),w.visible=!1}),[]);let _=0;return o.useFrame((()=>{if(v.current&&(t===1/0||_<t)){const e=p.background;p.background=null;const t=p.overrideMaterial;p.overrideMaterial=y,h.setRenderTarget(g),h.render(p,v.current),p.overrideMaterial=t,R(s),u&&R(.4*s),h.setRenderTarget(null),p.background=e,_++}})),M.createElement("group",b.default({"rotation-x":Math.PI/2},m,{ref:f}),M.createElement("mesh",{geometry:x,scale:[1,-1,1],rotation:[-Math.PI/2,0,0]},M.createElement("meshBasicMaterial",{map:g.texture,transparent:!0,opacity:r})),M.createElement("orthographicCamera",{ref:v,args:[-n/2,n/2,a/2,-a/2,0,i]}))})),rr={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 nr=e=>0===e?0:Math.pow(2,10*e-10);const or=M.forwardRef((({fog:e=!1,colorStop:t=0,color:r="black",opacity:o=.5,...a},s)=>{const i=M.useMemo((()=>{const e=document.createElement("canvas");e.width=128,e.height=128;const o=e.getContext("2d"),a=o.createRadialGradient(e.width/2,e.height/2,0,e.width/2,e.height/2,e.width/2);return a.addColorStop(t,new n.Color(r).getStyle()),a.addColorStop(1,"rgba(0,0,0,0)"),o.fillStyle=a,o.fillRect(0,0,e.width,e.height),e}),[r,t]);return M.createElement("mesh",b.default({ref:s},a),M.createElement("planeBufferGeometry",{attach:"geometry",args:[1,1]}),M.createElement("meshBasicMaterial",{attach:"material",transparent:!0,opacity:o,fog:e},M.createElement("canvasTexture",{attach:"map",args:[i]})))}));o.extend({MeshReflectorMaterial:gt});const ar=M.forwardRef((({mixBlur:e=0,mixStrength:t=.5,resolution:r=256,blur:a=[0,0],args:s=[1,1],minDepthThreshold:i=.9,maxDepthThreshold:l=1,depthScale:c=0,depthToBlurRatioBias:u=.25,mirror:d=0,children:m,debug:f=0,distortion:p=1,mixContrast:h=1,distortionMap:v,...g},x)=>{M.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)),S=(a=Array.isArray(a)?a:[a,a])[0]+a[1]>0,T=M.useRef(null),[C]=M.useState((()=>new n.Plane)),[_]=M.useState((()=>new n.Vector3)),[P]=M.useState((()=>new n.Vector3)),[L]=M.useState((()=>new n.Vector3)),[D]=M.useState((()=>new n.Matrix4)),[z]=M.useState((()=>new n.Vector3(0,0,-1))),[B]=M.useState((()=>new n.Vector4)),[A]=M.useState((()=>new n.Vector3)),[F]=M.useState((()=>new n.Vector3)),[U]=M.useState((()=>new n.Vector4)),[k]=M.useState((()=>new n.Matrix4)),[j]=M.useState((()=>new n.PerspectiveCamera)),V=M.useCallback((()=>{if(P.setFromMatrixPosition(T.current.matrixWorld),L.setFromMatrixPosition(w.matrixWorld),D.extractRotation(T.current.matrixWorld),_.set(0,0,1),_.applyMatrix4(D),A.subVectors(P,L),A.dot(_)>0)return;A.reflect(_).negate(),A.add(P),D.extractRotation(w.matrixWorld),z.set(0,0,-1),z.applyMatrix4(D),z.add(L),F.subVectors(P,z),F.reflect(_).negate(),F.add(P),j.position.copy(A),j.up.set(0,1,0),j.up.applyMatrix4(D),j.up.reflect(_),j.lookAt(F),j.far=w.far,j.updateMatrixWorld(),j.projectionMatrix.copy(w.projectionMatrix),k.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),k.multiply(j.projectionMatrix),k.multiply(j.matrixWorldInverse),k.multiply(T.current.matrixWorld),C.setFromNormalAndCoplanarPoint(_,P),C.applyMatrix4(j.matrixWorldInverse),B.set(C.normal.x,C.normal.y,C.normal.z,C.constant);const e=j.projectionMatrix;U.x=(Math.sign(B.x)+e.elements[8])/e.elements[0],U.y=(Math.sign(B.y)+e.elements[9])/e.elements[5],U.z=-1,U.w=(1+e.elements[10])/e.elements[14],B.multiplyScalar(2/B.dot(U)),e.elements[2]=B.x,e.elements[6]=B.y,e.elements[10]=B.z+1,e.elements[14]=B.w}),[]),[I,O,W,N]=M.useMemo((()=>{const o={minFilter:n.LinearFilter,magFilter:n.LinearFilter,encoding:y.outputEncoding},s=new n.WebGLRenderTarget(r,r,o);s.depthBuffer=!0,s.depthTexture=new n.DepthTexture(r,r),s.depthTexture.format=n.DepthFormat,s.depthTexture.type=n.UnsignedShortType;const m=new n.WebGLRenderTarget(r,r,o);return[s,m,new vt({gl:y,resolution:r,width:a[0],height:a[1],minDepthThreshold:i,maxDepthThreshold:l,depthScale:c,depthToBlurRatioBias:u}),{mirror:d,textureMatrix:k,mixBlur:e,tDiffuse:s.texture,tDepth:s.depthTexture,tDiffuseBlur:m.texture,hasBlur:S,mixStrength:t,minDepthThreshold:i,maxDepthThreshold:l,depthScale:c,depthToBlurRatioBias:u,transparent:!0,debug:f,distortion:p,distortionMap:v,mixContrast:h,"defines-USE_BLUR":S?"":void 0,"defines-USE_DEPTH":c>0?"":void 0,"defines-USE_DISTORTION":v?"":void 0}]}),[y,a,k,r,d,S,e,t,i,l,c,u,f,p,v,h]);return o.useFrame((()=>{if(null==T||!T.current)return;T.current.visible=!1;const e=y.xr.enabled,t=y.shadowMap.autoUpdate;V(),y.xr.enabled=!1,y.shadowMap.autoUpdate=!1,y.setRenderTarget(I),y.state.buffers.depth.setMask(!0),y.autoClear||y.clear(),y.render(E,j),S&&W.render(y,I,O),y.xr.enabled=e,y.shadowMap.autoUpdate=t,T.current.visible=!0,y.setRenderTarget(null)})),M.createElement("mesh",b.default({ref:R.default([T,x])},g),M.createElement("planeBufferGeometry",{args:s}),m?m("meshReflectorMaterial",N):M.createElement("meshReflectorMaterial",N))}));class sr 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 ir=new n.Vector3,lr=M.forwardRef((({opacity:e=1,radiusTop:t,radiusBottom:r,depthBuffer:a,color:s="white",distance:i=5,angle:l=.15,attenuation:c=5,anglePower:u=5,...d},m)=>{const f=M.useRef(null),p=o.useThree((e=>e.size)),h=o.useThree((e=>e.camera)),v=o.useThree((e=>e.viewport.dpr)),[g]=M.useState((()=>new sr));t=void 0===t?.1:t,r=void 0===r?7*l:r,o.useFrame((()=>{g.uniforms.spotPosition.value.copy(f.current.getWorldPosition(ir)),f.current.lookAt(f.current.parent.target.getWorldPosition(ir))}));const x=M.useMemo((()=>{const e=new n.CylinderGeometry(t,r,i,128,64,!0);return e.applyMatrix4((new n.Matrix4).makeTranslation(0,-i/2,0)),e.applyMatrix4((new n.Matrix4).makeRotationX(-Math.PI/2)),e}),[l,i,t,r]);return M.createElement("spotLight",b.default({ref:m,angle:l,color:s,distance:i},d),M.createElement("mesh",{ref:f,geometry:x,raycast:()=>null},M.createElement("primitive",{object:g,attach:"material","uniforms-opacity-value":e,"uniforms-lightColor-value":s,"uniforms-attenuation-value":c,"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]})))})),cr=M.forwardRef((({args:e,map:t,toneMapped:r=!1,color:n="white",form:a="rect",intensity:s=1,scale:i=1,target:l,children:c,...u},d)=>{const m=M.useRef(null);return M.useLayoutEffect((()=>{c||u.material||(o.applyProps(m.current.material,{color:n}),m.current.material.color.multiplyScalar(s))}),[n,s,c,u.material]),M.useLayoutEffect((()=>{l&&m.current.lookAt(Array.isArray(l)?new T.Vector3(...l):l)}),[l]),i=Array.isArray(i)&&2===i.length?[i[0],i[1],1]:i,M.createElement("mesh",b.default({ref:R.default([m,d]),scale:i},u),"circle"===a?M.createElement("ringGeometry",{args:[0,1,64]}):"ring"===a?M.createElement("ringGeometry",{args:[.5,1,64]}):"rect"===a?M.createElement("planeGeometry",null):M.createElement(a,{args:e}),c||(u.material?null:M.createElement("meshBasicMaterial",{toneMapped:r,map:t,side:T.DoubleSide})))}));function ur(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 dr=M.forwardRef((({inclination:e=.6,azimuth:t=.1,distance:r=1e3,mieCoefficient:o=.005,mieDirectionalG:a=.8,rayleigh:s=.5,turbidity:i=10,sunPosition:l=ur(e,t),...u},d)=>{const m=M.useMemo((()=>(new n.Vector3).setScalar(r)),[r]),[f]=M.useState((()=>new c.Sky));return M.createElement("primitive",b.default({dispose:void 0,object:f,ref:d,"material-uniforms-mieCoefficient-value":o,"material-uniforms-mieDirectionalG-value":a,"material-uniforms-rayleigh-value":s,"material-uniforms-sunPosition-value":l,"material-uniforms-turbidity-value":i,scale:m},u))}));class mr 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 fr=e=>(new n.Vector3).setFromSpherical(new n.Spherical(e,Math.acos(1-2*Math.random()),2*Math.random()*Math.PI)),pr=M.forwardRef((({radius:e=100,depth:t=50,count:r=5e3,saturation:a=0,factor:s=4,fade:i=!1},l)=>{const c=M.useRef(),[u,d,m]=M.useMemo((()=>{const o=[],i=[],l=Array.from({length:r},(()=>(.5+.5*Math.random())*s)),c=new n.Color;let u=e+t;const d=t/r;for(let e=0;e<r;e++)u-=d*Math.random(),o.push(...fr(u).toArray()),c.setHSL(e/r,a,.9),i.push(c.r,c.g,c.b);return[new Float32Array(o),new Float32Array(i),new Float32Array(l)]}),[r,t,s,e,a]);o.useFrame((e=>c.current&&(c.current.uniforms.time.value=e.clock.getElapsedTime())));const[f]=M.useState((()=>new mr));return M.createElement("points",{ref:l},M.createElement("bufferGeometry",{attach:"geometry"},M.createElement("bufferAttribute",{attach:"attributes-position",args:[u,3]}),M.createElement("bufferAttribute",{attach:"attributes-color",args:[d,3]}),M.createElement("bufferAttribute",{attach:"attributes-size",args:[m,1]})),M.createElement("primitive",{dispose:void 0,ref:c,object:f,attach:"material",blending:n.AdditiveBlending,"uniforms-fade-value":i,transparent:!0,vertexColors:!0}))}));const hr=new T.Matrix4,vr=new T.Matrix4,gr=[],xr=new T.Mesh;class yr extends T.Group{constructor(){super(),this.color=new T.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;xr.geometry=r.geometry;const n=r.matrixWorld;let o=r.userData.instances.indexOf(this.instanceKey);if(!(-1===o||o>r.count)){r.getMatrixAt(o,hr),vr.multiplyMatrices(n,hr),xr.matrixWorld=vr,xr.raycast(e,gr);for(let e=0,r=gr.length;e<r;e++){const r=gr[e];r.instanceId=o,r.object=this,t.push(r)}gr.length=0}}}let wr,Er;const br=M.createContext(null),Mr=new T.Matrix4,Sr=new T.Vector3;new T.Color;const Tr=M.forwardRef((({children:e,range:t,limit:r=1e3,...n},a)=>{const s=M.useRef(null),[i,l]=M.useState([]),[[c,u,d]]=M.useState((()=>[new Float32Array(3*r),Float32Array.from({length:3*r},(()=>1)),Float32Array.from({length:r},(()=>1))]));M.useLayoutEffect((()=>{s.current.geometry.drawRange.count=Math.min(r,void 0!==t?t:r,i.length)}),[i,t]),M.useEffect((()=>{s.current.geometry.attributes.position.needsUpdate=!0})),o.useFrame((()=>{for(s.current.updateMatrix(),s.current.updateMatrixWorld(),Mr.copy(s.current.matrixWorld).invert(),wr=0;wr<i.length;wr++)Er=i[wr].current,Sr.toArray(c,3*wr),s.current.geometry.attributes.position.needsUpdate=!0,Er.matrixWorldNeedsUpdate=!0,Er.color.toArray(u,3*wr),s.current.geometry.attributes.color.needsUpdate=!0,d.set([Er.size],wr),s.current.geometry.attributes.size.needsUpdate=!0}));const m=M.useMemo((()=>{const e={};for(wr=0;wr<i.length;wr++){var t;Object.assign(e,null==(t=i[wr].current)?void 0:t.__r3f.handlers)}return Object.keys(e).reduce(((e,t)=>({...e,[t]:e=>{var r,n,o;const a=null==(r=i[e.index])?void 0:r.current;return null==a||null==(n=a.__r3f)||null==(o=n.handlers)?void 0:o[t]({...e,object:a})}})),{})}),[e,i]),f=M.useMemo((()=>({subscribe:e=>(l((t=>[...t,e])),()=>l((t=>t.filter((t=>t.current!==e.current)))))})),[]);return M.createElement("points",b.default({matrixAutoUpdate:!1,ref:R.default([a,s])},m,n),M.createElement("bufferGeometry",null,M.createElement("bufferAttribute",{attach:"attributes-position",count:c.length/3,array:c,itemSize:3,usage:T.DynamicDrawUsage}),M.createElement("bufferAttribute",{attach:"attributes-color",count:u.length/3,array:u,itemSize:3,usage:T.DynamicDrawUsage}),M.createElement("bufferAttribute",{attach:"attributes-size",count:d.length,array:d,itemSize:1,usage:T.DynamicDrawUsage})),M.createElement(br.Provider,{value:f},e))})),Cr=M.forwardRef((({children:e,...t},r)=>{M.useMemo((()=>o.extend({Position:yr})),[]);const n=M.useRef(),{subscribe:a}=M.useContext(br);return M.useLayoutEffect((()=>a(n)),[]),M.createElement("position",b.default({ref:R.default([r,n])},t),e)})),Rr=M.forwardRef((({children:e,positions:t,colors:r,sizes:n,stride:a=3,...s},i)=>{const l=M.useRef(null);return o.useFrame((()=>{const e=l.current.geometry.attributes;e.position.needsUpdate=!0,r&&(e.color.needsUpdate=!0),n&&(e.size.needsUpdate=!0)})),M.createElement("points",b.default({ref:R.default([i,l])},s),M.createElement("bufferGeometry",null,M.createElement("bufferAttribute",{attach:"attributes-position",count:t.length/a,array:t,itemSize:a,usage:T.DynamicDrawUsage}),r&&M.createElement("bufferAttribute",{attach:"attributes-color",count:r.length/a,array:r,itemSize:3,usage:T.DynamicDrawUsage}),n&&M.createElement("bufferAttribute",{attach:"attributes-size",count:n.length/a,array:n,itemSize:1,usage:T.DynamicDrawUsage})),e)})),_r=M.forwardRef(((e,t)=>e.positions instanceof Float32Array?M.createElement(Rr,b.default({},e,{ref:t})):M.createElement(Tr,b.default({},e,{ref:t}))));let Pr,Lr;const Dr=M.createContext(null),zr=new T.Matrix4,Br=new T.Matrix4,Ar=new T.Matrix4;new T.Color;const Fr=new T.Vector3,Ur=new T.Quaternion,kr=new T.Vector3,jr=M.forwardRef((({context:e,children:t,...r},n)=>{M.useMemo((()=>o.extend({Position:yr})),[]);const a=M.useRef(),{subscribe:s,getParent:i}=M.useContext(e||Dr);return M.useLayoutEffect((()=>s(a)),[]),M.createElement("position",b.default({instance:i(),instanceKey:a,ref:R.default([n,a])},r),t)})),Vr=M.forwardRef((({children:e,range:t,limit:r=1e3,frames:n=1/0,...a},s)=>{const[{context:i,instance:l}]=M.useState((()=>{const e=M.createContext(null);return{context:e,instance:M.forwardRef(((t,r)=>M.createElement(jr,b.default({context:e},t,{ref:r}))))}})),c=M.useRef(null),[u,d]=M.useState([]),[[m,f]]=M.useState((()=>{const e=new Float32Array(16*r);for(Pr=0;Pr<r;Pr++)Ar.identity().toArray(e,16*Pr);return[e,new Float32Array([...new Array(3*r)].map((()=>1)))]}));M.useLayoutEffect((()=>{c.current.count=c.current.instanceMatrix.updateRange.count=c.current.instanceColor.updateRange.count=Math.min(r,void 0!==t?t:r,u.length)}),[u,t]),M.useEffect((()=>{c.current.instanceMatrix.needsUpdate=!0}));let p=0;o.useFrame((()=>{if(n===1/0||p<n){for(c.current.updateMatrix(),c.current.updateMatrixWorld(),zr.copy(c.current.matrixWorld).invert(),Pr=0;Pr<u.length;Pr++)Lr=u[Pr].current,Lr.matrixWorld.decompose(Fr,Ur,kr),Br.compose(Fr,Ur,kr).premultiply(zr),Br.toArray(m,16*Pr),c.current.instanceMatrix.needsUpdate=!0,Lr.color.toArray(f,3*Pr),c.current.instanceColor.needsUpdate=!0;p++}}));const h=M.useMemo((()=>({getParent:()=>c,subscribe:e=>(d((t=>[...t,e])),()=>d((t=>t.filter((t=>t.current!==e.current)))))})),[]);return M.createElement("instancedMesh",b.default({userData:{instances:u},matrixAutoUpdate:!1,ref:R.default([s,c]),args:[null,null,0],raycast:()=>null},a),M.createElement("instancedBufferAttribute",{attach:"instanceMatrix",count:m.length/16,array:m,itemSize:16,usage:T.DynamicDrawUsage}),M.createElement("instancedBufferAttribute",{attach:"instanceColor",count:f.length/3,array:f,itemSize:3,usage:T.DynamicDrawUsage}),"function"==typeof e?M.createElement(i.Provider,{value:h},e(l)):M.createElement(Dr.Provider,{value:h},e))}));const Ir=M.createContext(null),Or=e=>e instanceof T.Vector3?e.toArray():e,Wr=M.forwardRef(((e,t)=>{const{limit:r=1e3,lineWidth:n=1,children:a,...s}=e,[i,l]=M.useState([]),[u]=M.useState((()=>new c.Line2)),[d]=M.useState((()=>new c.LineMaterial)),[m]=M.useState((()=>new c.LineSegmentsGeometry)),[f]=M.useState((()=>new T.Vector2(512,512))),[p]=M.useState((()=>Array(6*r).fill(0))),[h]=M.useState((()=>Array(6*r).fill(0))),v=M.useMemo((()=>({subscribe:e=>(l((t=>[...t,e])),()=>l((t=>t.filter((t=>t.current!==e.current)))))})),[]);return o.useFrame((()=>{for(let o=0;o<r;o++){var e;const r=null==(e=i[o])?void 0:e.current,a=r?Or(r.start):[0,0,0],s=r?Or(r.end):[0,0,0],l=r?(n=r.color)instanceof T.Color?n.toArray():n:[1,1,1];for(var t=0;t<3;t++)p[6*o+t]=a[t],p[6*o+t+3]=s[t],h[6*o+t]=l[t],h[6*o+t+3]=l[t]}var n;m.setColors(h),m.setPositions(p),u.computeLineDistances()})),M.createElement("primitive",{object:u,ref:t},M.createElement("primitive",{object:m,attach:"geometry"}),M.createElement("primitive",b.default({object:d,attach:"material",vertexColors:!0,resolution:f,linewidth:n},s)),M.createElement(Ir.Provider,{value:v},a))}));class Nr{constructor(){this.color=new T.Color("white"),this.start=new T.Vector3(0,0,0),this.end=new T.Vector3(0,0,0)}}const Gr=M.forwardRef(((e,t)=>{const r=M.useContext(Ir);if(!r)throw"Segment must used inside Segments component.";const n=M.useRef();return M.useMemo((()=>o.extend({SegmentObject:Nr})),[]),M.useLayoutEffect((()=>r.subscribe(n)),[]),M.createElement("segmentObject",b.default({ref:R.default([n,t])},e))})),Hr=M.forwardRef((({children:e,distances:t,...r},n)=>{const a=M.useRef(null);return M.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)})),M.createElement("lOD",b.default({ref:R.default([a,n])},r),e)}));const $r=new n.Matrix4,qr=new n.Ray,Xr=new n.Sphere,Zr=new n.Vector3;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)),s=o.useThree((e=>e.setDpr));return M.useEffect((()=>{const n=t.domElement;return()=>{r&&s(a),e&&n&&(n.style.imageRendering="auto")}}),[]),M.useEffect((()=>{s(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 M.useEffect((()=>{const r=e().events.enabled;return()=>t({enabled:r})}),[]),M.useEffect((()=>t({enabled:1===r})),[r]),null},exports.ArcballControls=Ce,exports.Backdrop=function({children:e,floor:t=.25,segments:r=20,receiveShadow:n,...o}){const a=M.useRef(null);return M.useLayoutEffect((()=>{let e=0;const n=r/r/2,o=a.current.attributes.position;for(let a=0;a<r+1;a++)for(let s=0;s<r+1;s++)o.setXYZ(e++,a/r-n+(0===a?-t:0),s/r-n,nr(a/r));o.needsUpdate=!0,a.current.computeVertexNormals()}),[r,t]),M.createElement("group",o,M.createElement("mesh",{receiveShadow:n,rotation:[-Math.PI/2,0,Math.PI/2]},M.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=J,exports.Bounds=function({children:e,damping:t=6,fit:r,clip:n,observe:a,margin:s=1.2,eps:i=.01,onFit:l}){const c=M.useRef(null),{camera:u,invalidate:d,size:m,controls:f}=o.useThree(),p=f,h=M.useRef(l);function v(e,t){return Math.abs(e.x-t.x)<i&&Math.abs(e.y-t.y)<i&&Math.abs(e.z-t.z)<i}function g(e,t,r,n){e.x=T.MathUtils.damp(e.x,t.x,r,n),e.y=T.MathUtils.damp(e.y,t.y,r,n),e.z=T.MathUtils.damp(e.z,t.z,r,n)}h.current=l;const[x]=M.useState((()=>({animating:!1,focus:new T.Vector3,camera:new T.Vector3,zoom:1}))),[y]=M.useState((()=>({focus:new T.Vector3,camera:new T.Vector3,zoom:1}))),[w]=M.useState((()=>new T.Box3)),E=M.useMemo((()=>{function e(){const e=w.getSize(new T.Vector3),t=w.getCenter(new T.Vector3),r=Math.max(e.x,e.y,e.z),n=Ht(u)?4*r:r/(2*Math.atan(Math.PI*u.fov/360)),o=Ht(u)?4*r:n/u.aspect,a=s*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||c.current;e.updateWorldMatrix(!0,!0),w.setFromObject(e)}var r;if(w.isEmpty()){const e=u.position.length()||10;w.setFromCenterAndSize(new T.Vector3,new T.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),Ht(u)){x.zoom=u.zoom;let e=0,n=0;const o=[new T.Vector3(w.min.x,w.min.y,w.min.z),new T.Vector3(w.min.x,w.max.y,w.min.z),new T.Vector3(w.min.x,w.min.y,w.max.z),new T.Vector3(w.min.x,w.max.y,w.max.z),new T.Vector3(w.max.x,w.max.y,w.max.z),new T.Vector3(w.max.x,w.max.y,w.min.z),new T.Vector3(w.max.x,w.min.y,w.max.z),new T.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,i=(u.right-u.left)/n;y.zoom=Math.min(a,i)/s,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,s,t,d]);M.useLayoutEffect((()=>{if(p){const e=()=>x.animating=!1;return p.addEventListener("start",e),()=>p.removeEventListener("start",e)}}),[p]);const b=M.useRef(0);return M.useLayoutEffect((()=>{(a||0==b.current++)&&(E.refresh(),r&&E.fit(),n&&E.clip())}),[m,n,r,a]),o.useFrame(((e,r)=>{if(x.animating){if(g(x.focus,y.focus,t,r),g(x.camera,y.camera,t,r),x.zoom=T.MathUtils.damp(x.zoom,y.zoom,t,r),u.position.copy(x.camera),Ht(u)&&(u.zoom=x.zoom,u.updateProjectionMatrix()),p?(p.target.copy(x.focus),p.update()):u.lookAt(x.focus),d(),Ht(u)&&!(Math.abs(x.zoom-y.zoom)<i))return;if(!Ht(u)&&!v(x.camera,y.camera))return;if(p&&!v(x.focus,y.focus))return;x.animating=!1}})),M.createElement("group",{ref:c},M.createElement($t.Provider,{value:E},e))},exports.Box=Mt,exports.CameraShake=qt,exports.Center=Gt,exports.Circle=St,exports.Clone=xe,exports.Cloud=function({opacity:e=.5,speed:t=.4,width:r=10,depth:n=1.5,segments:a=20,texture:s="https://rawcdn.githack.com/pmndrs/drei-assets/9225a9f1fbd449d9411125c2f419b843d0308c9f/cloud.png",color:i="#ffffff",depthTest:l=!0,...c}){const u=M.useRef(),d=ue(s),m=M.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=u.current)?void 0:t.children.forEach(((t,r)=>{t.children[0].rotation.z+=m[r].rotation,t.children[0].scale.setScalar(m[r].scale+(1+Math.sin(e.clock.getElapsedTime()/10))/2*r/10)}))})),M.createElement("group",c,M.createElement("group",{position:[0,0,a/2*n],ref:u},m.map((({x:t,y:r,scale:o,density:a},s)=>M.createElement(J,{key:s,position:[t,r,-s*n]},M.createElement(_t,{scale:o,rotation:[0,0,0]},M.createElement("meshStandardMaterial",{map:d,transparent:!0,opacity:o/6*a*e,depthTest:l,color:i})))))))},exports.ComputedAttribute=({compute:e,name:t,...r})=>{const[o]=M.useState((()=>new n.BufferAttribute(new Float32Array(0),1))),a=M.useRef(null);return M.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]),M.createElement("primitive",b.default({ref:a,object:o,attach:`attributes-${t}`},r))},exports.Cone=Tt,exports.ContactShadows=tr,exports.CubeCamera=function({children:e,fog:t,frames:r=1/0,resolution:a=256,near:s=1,far:i=1e3,...l}){const c=M.useRef(),[u,d]=M.useState(null),m=o.useThree((({scene:e})=>e)),f=o.useThree((({gl:e})=>e)),p=M.useMemo((()=>{const e=new n.WebGLCubeRenderTarget(a);return e.texture.type=n.HalfFloatType,e}),[a]);let h=0;return o.useFrame((()=>{if(u&&c.current&&(r===1/0||h<r)){c.current.traverse((e=>e.visible=!1));const e=m.fog;m.fog=t||e,u.update(f,m),m.fog=e,c.current.traverse((e=>e.visible=!0)),h++}})),M.createElement("group",l,M.createElement("cubeCamera",{ref:d,args:[s,i,p]}),M.createElement("group",{ref:c},e(p.texture)))},exports.CubicBezierLine=ne,exports.CurveModifier=ut,exports.CycleRaycast=function({onChanged:e,portal:t,preventDefault:r=!0,scroll:n=!0,keyCode:a=9}){const s=M.useRef(0),i=o.useThree((e=>e.setEvents)),l=o.useThree((e=>e.get)),c=o.useThree((e=>e.gl));return M.useEffect((()=>{var o;let u,d=[];const m=l().events.filter,f=null!==(o=null==t?void 0:t.current)&&void 0!==o?o:c.domElement.parentNode,p=()=>f&&e&&e(d,Math.round(s.current)%d.length);i({filter:(e,t)=>{let r=[...e];r.length===d.length&&d.every((e=>r.map((e=>e.object.uuid)).includes(e.object.uuid)))||(s.current=0,d=r,p()),m&&(r=m(r,t));for(let e=0;e<Math.round(s.current)%r.length;e++){const e=r.shift();r=[...r,e]}return r}});const h=e=>{var t,r;s.current=e(s.current),null==(t=l().events.handlers)||t.onPointerCancel(void 0),null==(r=l().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),()=>{i({filter:m}),void 0!==a&&document.removeEventListener("keydown",v),n&&document.removeEventListener("wheel",g),document.removeEventListener("pointermove",x)}}),[c,l,i,r,n,a]),null},exports.Cylinder=Ct,exports.Detailed=Hr,exports.DeviceOrientationControls=Ee,exports.Dodecahedron=kt,exports.Edges=function({userData:e,children:t,geometry:r,threshold:n=15,color:o="black",...a}){const s=M.useRef(null);return M.useLayoutEffect((()=>{const e=s.current.parent;if(e){const t=r||e.geometry;t===s.current.userData.currentGeom&&n===s.current.userData.currentThreshold||(s.current.userData.currentGeom=t,s.current.userData.currentThreshold=n,s.current.geometry=new T.EdgesGeometry(t,n))}})),M.createElement("lineSegments",b.default({ref:s,raycast:()=>null},a),t||M.createElement("lineBasicMaterial",{color:o}))},exports.Effects=ie,exports.Environment=Kt,exports.EnvironmentCube=er,exports.EnvironmentMap=Qt,exports.EnvironmentPortal=Jt,exports.Extrude=jt,exports.FirstPersonControls=Pe,exports.Float=Xt,exports.FlyControls=be,exports.GizmoHelper=({alignment:e="bottom-right",margin:t=[80,80],renderPriority:r=0,autoClear:a=!0,onUpdate:s,onTarget:i,children:l})=>{const c=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=M.useRef(),v=M.useRef(),g=M.useRef(null),[x]=M.useState((()=>new n.Scene)),y=M.useRef(!1),w=M.useRef(0),E=M.useRef(new n.Vector3(0,0,0)),b=M.useCallback((e=>{y.current=!0,(d||i)&&(E.current=(null==d?void 0:d.target)||(null==i?void 0:i())),w.current=u.position.distanceTo(je),Ue.copy(u.quaternion),Ve.copy(e).multiplyScalar(w.current).add(je),Ae.lookAt(Ve),ke.copy(Ae.quaternion),p()}),[d,u,i,p]);M.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(Ue.angleTo(ke)<.01)y.current=!1;else{const e=t*Be;Ue.rotateTowards(ke,e),u.position.set(0,0,1).applyQuaternion(Ue).multiplyScalar(w.current).add(E.current),u.up.set(0,1,0).applyQuaternion(Ue).normalize(),u.quaternion.copy(Ue),s?s():d&&d.update(),p()}Fe.copy(u.matrix).invert(),null==(r=v.current)||r.quaternion.setFromRotationMatrix(Fe),a&&(m.autoClear=!1),m.clearDepth(),m.render(x,g.current)}}),r);const S=Le(g),T=M.useMemo((()=>({tweenCamera:b,raycast:S})),[b]),[C,R]=t,_=e.endsWith("-left")?-c.width/2+C:c.width/2-C,P=e.startsWith("top-")?c.height/2-R:-c.height/2+R;return o.createPortal(M.createElement(De.Provider,{value:T},M.createElement(ye,{ref:g,position:[0,0,200]}),M.createElement("group",{ref:v,position:[_,P,0]},l)),x)},exports.GizmoViewcube=e=>M.createElement("group",{scale:[60,60,60]},M.createElement(Ke,e),Xe.map(((t,r)=>M.createElement(Qe,b.default({key:r,position:t,dimensions:Ze[r]},e)))),$e.map(((t,r)=>M.createElement(Qe,b.default({key:r,position:t,dimensions:qe},e)))),M.createElement("ambientLight",{intensity:.5}),M.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=["#ff3653","#0adb50","#2c8fdf"],axisHeadScale:a=1,axisScale:s,labels:i=["X","Y","Z"],labelColor:l="#000",onClick:c,...u})=>{const[d,m,f]=o,{tweenCamera:p,raycast:h}=ze(),v={font:n,disabled:r,labelColor:l,raycast:h,onClick:c,axisHeadScale:a,onPointerDown:r?void 0:e=>{p(e.object.position),e.stopPropagation()}};return M.createElement("group",b.default({scale:40},u),M.createElement(Je,{color:d,rotation:[0,0,0],scale:s}),M.createElement(Je,{color:m,rotation:[0,0,Math.PI/2],scale:s}),M.createElement(Je,{color:f,rotation:[0,-Math.PI/2,0],scale:s}),!t&&M.createElement(M.Fragment,null,M.createElement(et,b.default({arcStyle:d,position:[1,0,0],label:i[0]},v)),M.createElement(et,b.default({arcStyle:m,position:[0,1,0],label:i[1]},v)),M.createElement(et,b.default({arcStyle:f,position:[0,0,1],label:i[2]},v)),!e&&M.createElement(M.Fragment,null,M.createElement(et,b.default({arcStyle:d,position:[-1,0,0]},v)),M.createElement(et,b.default({arcStyle:m,position:[0,-1,0]},v)),M.createElement(et,b.default({arcStyle:f,position:[0,0,-1]},v)))),M.createElement("ambientLight",{intensity:.5}),M.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)),s=M.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 s=e.length;for(;s--;)a.addColorStop(e[s],t[s]);o.fillStyle=a,o.fillRect(0,0,16,r);const i=new T.Texture(n);return i.needsUpdate=!0,i}),[e]);return M.useEffect((()=>()=>{s.dispose()}),[s]),M.createElement("primitive",b.default({object:s,attach:"map",encoding:a.outputEncoding},n))},exports.Html=W,exports.Icosahedron=Ft,exports.Image=me,exports.Instance=jr,exports.Instances=Vr,exports.IsObject=ce,exports.Lathe=Vt,exports.Lightformer=cr,exports.Line=ee,exports.Loader=function({containerStyles:e,innerStyles:t,barStyles:r,dataStyles:n,dataInterpolation:o=H,initialState:a=(e=>e)}){const{active:s,progress:i}=G(),l=M.useRef(0),c=M.useRef(0),u=M.useRef(null),[d,m]=M.useState(a(s));M.useEffect((()=>{let e;return s!==d&&(e=setTimeout((()=>m(s)),300)),()=>clearTimeout(e)}),[d,s]);const f=M.useCallback((()=>{u.current&&(l.current+=(i-l.current)/2,(l.current>.95*i||100===i)&&(l.current=i),u.current.innerText=o(l.current),l.current<i&&(c.current=requestAnimationFrame(f)))}),[o,i]);return M.useEffect((()=>(f(),()=>cancelAnimationFrame(c.current))),[f]),d?M.createElement("div",{style:{...$.container,opacity:s?1:0,...e}},M.createElement("div",null,M.createElement("div",{style:{...$.inner,...t}},M.createElement("div",{style:{...$.bar,transform:`scaleX(${i/100})`,...r}}),M.createElement("span",{ref:u,style:{...$.data,...n}})))):null},exports.MapControls=Me,exports.Merged=function({meshes:e,children:t,...r}){const n=Array.isArray(e);if(!n)for(const t of Object.keys(e))e[t].isMesh||delete e[t];return M.createElement(z.default,{components:(n?e:Object.values(e)).map((({geometry:e,material:t})=>M.createElement(Vr,b.default({key:e.uuid,geometry:e,material:t},r))))},(r=>n?t(...r):t(Object.keys(e).filter((t=>e[t].isMesh)).reduce(((e,t,n)=>({...e,[t]:r[n]})),{}))))},exports.MeshDistortMaterial=mt,exports.MeshReflectorMaterial=xt,exports.MeshWobbleMaterial=pt,exports.Octahedron=Ut,exports.OrbitControls=Se,exports.OrthographicCamera=ye,exports.PerspectiveCamera=we,exports.Plane=_t,exports.Point=Cr,exports.PointMaterial=wt,exports.PointMaterialImpl=yt,exports.PointerLockControls=_e,exports.Points=_r,exports.PointsBuffer=Rr,exports.Polyhedron=At,exports.PositionalAudio=oe,exports.Preload=function({all:e,scene:t,camera:r}){const a=o.useThree((({gl:e})=>e)),s=o.useThree((({camera:e})=>e)),i=o.useThree((({scene:e})=>e));return M.useLayoutEffect((()=>{const o=[];e&&(t||i).traverse((e=>{!1===e.visible&&(o.push(e),e.visible=!0)})),a.compile(t||i,r||s);const l=new n.WebGLCubeRenderTarget(128);new n.CubeCamera(.01,1e5,l).update(a,t||i),l.dispose(),o.forEach((e=>e.visible=!1))}),[]),null},exports.PresentationControls=function({snap:e,global:t,cursor:r=!0,children:a,speed:s=1,rotation:c=[0,0,0],zoom:u=1,polar:d=[0,Math.PI/2],azimuth:m=[-1/0,1/0],config:f={mass:1,tension:170,friction:26}}){const{size:p,gl:h}=o.useThree(),v=M.useMemo((()=>[c[0]+d[0],c[0]+d[1]]),[c[0],d[0],d[1]]),g=M.useMemo((()=>[c[1]+m[0],c[1]+m[1]]),[c[1],m[0],m[1]]),x=M.useMemo((()=>[n.MathUtils.clamp(c[0],...v),n.MathUtils.clamp(c[1],...g),c[2]]),[c[0],c[1],c[2],v,g]),[y,w]=i.useSpring((()=>({scale:1,rotation:x,config:f})));M.useEffect((()=>{w.start({scale:1,rotation:x,config:f})}),[x]),M.useEffect((()=>{t&&r&&(h.domElement.style.cursor="grab")}),[t,r,h.domElement]);const E=l.useGesture({onHover:({last:e})=>{r&&!t&&(h.domElement.style.cursor=e?"auto":"grab")},onDrag:({down:t,delta:[o,a],memo:[i,l]=y.rotation.animation.to||x})=>{r&&(h.domElement.style.cursor=t?"grabbing":"grab"),o=n.MathUtils.clamp(l+o/p.width*Math.PI*s,...g),a=n.MathUtils.clamp(i+a/p.height*Math.PI*s,...v);const c=e&&!t&&"boolean"!=typeof e?e:f;return w.start({scale:t&&a>v[1]/2?u:1,rotation:e&&!t?x:[a,o,0],config:e=>"scale"===e?{...c,friction:3*c.friction}:c}),[a,o]}},{target:t?h.domElement:void 0});return M.createElement(i.a.group,b.default({},null==E?void 0:E(),y),a)},exports.QuadraticBezierLine=re,exports.Reflector=ar,exports.Ring=Bt,exports.RoundedBox=Ot,exports.Sampler=({children:e,weight:t,transform:r,instances:o,mesh:a,...s})=>{const i=M.useRef(null),l=M.useRef(null),u=M.useRef(null);return M.useEffect((()=>{var e,t;l.current=null!==(e=null==o?void 0:o.current)&&void 0!==e?e:i.current.children.find((e=>e.hasOwnProperty("instanceMatrix"))),u.current=null!==(t=null==a?void 0:a.current)&&void 0!==t?t:i.current.children.find((e=>"Mesh"===e.type))}),[e,null==a?void 0:a.current,null==o?void 0:o.current]),M.useEffect((()=>{if(void 0===u.current)return;if(void 0===l.current)return;const e=new c.MeshSurfaceSampler(u.current);t&&e.setWeightAttribute(t),e.build();const o=new n.Vector3,a=new n.Vector3,s=new n.Color,i=new n.Object3D;u.current.updateMatrixWorld(!0);for(let t=0;t<l.current.count;t++)e.sample(o,a,s),"function"==typeof r?r({dummy:i,sampledMesh:u.current,position:o,normal:a,color:s},t):i.position.copy(o),i.updateMatrix(),l.current.setMatrixAt(t,i.matrix);l.current.instanceMatrix.needsUpdate=!0}),[e,null==a?void 0:a.current,null==o?void 0:o.current]),M.createElement("group",b.default({ref:i},s),e)},exports.ScreenQuad=Nt,exports.Scroll=K,exports.ScrollControls=function({eps:e=1e-5,enabled:t=!0,infinite:r,horizontal:n,pages:a=1,distance:s=1,damping:i=4,style:l={},children:c}){const{get:u,setEvents:d,gl:m,size:f,invalidate:p,events:h,raycaster:v}=o.useThree(),[g]=M.useState((()=>document.createElement("div"))),[x]=M.useState((()=>document.createElement("div"))),[y]=M.useState((()=>document.createElement("div"))),w=m.domElement.parentNode,E=M.useRef(0),b=M.useMemo((()=>{const t={el:g,eps:e,fill:x,fixed:y,horizontal:n,damping:i,offset:0,delta:0,scroll:E,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,i,n,a]);M.useEffect((()=>{g.style.position="absolute",g.style.width="100%",g.style.height="100%",g.style[n?"overflowX":"overflowY"]="auto",g.style[n?"overflowY":"overflowX"]="hidden",g.style.top="0px",g.style.left="0px";for(const e in l)g.style[e]=l[e];y.style.position="sticky",y.style.top="0px",y.style.left="0px",y.style.width="100%",y.style.height="100%",y.style.overflow="hidden",g.appendChild(y),x.style.height=n?"100%":a*s*100+"%",x.style.width=n?a*s*100+"%":"100%",x.style.pointerEvents="none",g.appendChild(x),w.appendChild(g),g[n?"scrollLeft":"scrollTop"]=1;const e=h.connected||m.domElement;requestAnimationFrame((()=>null==h.connect?void 0:h.connect(g)));const t=u().events.compute;return d({compute(e,t){const r=e.clientX-e.target.offsetLeft,n=e.clientX-e.target.offsetLeft;t.pointer.set(r/t.size.width*2-1,-n/t.size.height*2+1),t.raycaster.setFromCamera(t.pointer,t.camera)}}),()=>{w.removeChild(g),d({compute:t}),null==h.connect||h.connect(e)}}),[a,s,n,g,x,y,w]),M.useEffect((()=>{const e=f[n?"width":"height"],o=g[n?"scrollWidth":"scrollHeight"],a=o-e;let s=0,i=!0,l=!0;const c=()=>{if(t&&!l&&(p(),s=g[n?"scrollLeft":"scrollTop"],E.current=s/a,r)){if(!i)if(s>=a){const e=1-b.offset;g[n?"scrollLeft":"scrollTop"]=1,E.current=b.offset=-e,i=!0}else if(s<=0){const e=1+b.offset;g[n?"scrollLeft":"scrollTop"]=o,E.current=b.offset=e,i=!0}i&&setTimeout((()=>i=!1),40)}};g.addEventListener("scroll",c,{passive:!0}),requestAnimationFrame((()=>l=!1));const u=e=>g.scrollLeft+=e.deltaY/2;return n&&g.addEventListener("wheel",u,{passive:!0}),()=>{g.removeEventListener("scroll",c),n&&g.removeEventListener("wheel",u)}}),[g,f,r,b,p,n,t]);let S=0;return o.useFrame(((t,r)=>{b.offset=T.MathUtils.damp(S=b.offset,E.current,i,r),b.delta=T.MathUtils.damp(b.delta,Math.abs(S-b.offset),i,r),b.delta>e&&p()})),M.createElement(q.Provider,{value:b},c)},exports.Segment=Gr,exports.Segments=Wr,exports.Select=function({box:e,multiple:t,children:r,onChange:n,border:a="1px solid #55aaff",backgroundColor:s="rgba(75, 160, 255, 0.1)",filter:i=(e=>e),...l}){const{setEvents:u,camera:d,raycaster:m,gl:f,controls:p,size:h,get:v}=o.useThree(),[g,x]=M.useState(!1),[y,w]=M.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]),[]);M.useEffect((()=>{null==n||n(y)}),[y]);const E=M.useCallback((e=>{e.stopPropagation(),w({object:i([e.object])[0],shift:t&&e.shiftKey})}),[]),S=M.useCallback((e=>!g&&w({})),[g]),C=M.useRef(null);return M.useEffect((()=>{if(!e||!t)return;const r=new c.SelectionBox(d,C.current),n=document.createElement("div");n.style.pointerEvents="none",n.style.border=a,n.style.backgroundColor=s,n.style.position="fixed";const o=new T.Vector2,l=new T.Vector2,m=new T.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),u({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 M=[];function S(e){if(y){!function(e){m.x=Math.max(o.x,e.clientX),m.y=Math.max(o.y,e.clientY),l.x=Math.min(o.x,e.clientX),l.y=Math.min(o.y,e.clientY),n.style.left=`${l.x}px`,n.style.top=`${l.y}px`,n.style.width=m.x-l.x+"px",n.style.height=m.y-l.y+"px"}(e),E(e,r.endPoint);const t=r.select().sort((e=>e.uuid)).filter((e=>e.isMesh));_.default(t,M)||(M=t,w({object:i(t)}))}}function R(e){var t;y&&y&&(p&&(p.enabled=x),u({enabled:g}),y=!1,null==(t=n.parentElement)||t.removeChild(n))}return document.addEventListener("pointerdown",b,{passive:!0}),document.addEventListener("pointermove",S,{passive:!0,capture:!0}),document.addEventListener("pointerup",R,{passive:!0}),()=>{document.removeEventListener("pointerdown",b),document.removeEventListener("pointermove",S),document.removeEventListener("pointerup",R)}}),[h,m,d,p,f]),M.createElement("group",b.default({ref:C,onClick:E,onPointerOver:()=>x(!0),onPointerOut:()=>x(!1),onPointerMissed:S},l),M.createElement(Q.Provider,{value:y},r))},exports.Shadow=or,exports.Sky=dr,exports.Sphere=Rt,exports.SpotLight=lr,exports.Stage=function({children:e,controls:t,shadows:r=!0,adjustCamera:n=!0,environment:a="city",intensity:s=1,preset:i="rembrandt",shadowBias:l=0,contactShadow:c={blur:2,opacity:.5,position:[0,0,0]},...u}){const d=rr[i],m=o.useThree((e=>e.camera)),f=o.useThree((e=>e.controls)),p=M.useRef(null),h=M.useRef(null),[{radius:v,width:g,height:x},y]=M.useState({radius:0,width:0,height:0});return M.useLayoutEffect((()=>{p.current.position.set(0,0,0),p.current.updateWorldMatrix(!0,!0);const e=(new T.Box3).setFromObject(h.current),t=new T.Vector3,r=new T.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]),M.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]),M.createElement("group",u,M.createElement("group",{ref:p},M.createElement("group",{ref:h},e)),c&&M.createElement(tr,b.default({scale:2*v,far:v/2},c)),a&&M.createElement(Kt,{preset:a}),M.createElement("ambientLight",{intensity:s/3}),M.createElement("spotLight",{penumbra:1,position:[d.main[0]*v,d.main[1]*v,d.main[2]*v],intensity:2*s,castShadow:r,"shadow-bias":l}),M.createElement("pointLight",{position:[d.fill[0]*v,d.fill[1]*v,d.fill[2]*v],intensity:s}))},exports.Stars=pr,exports.Stats=function({showPanel:e=0,className:t,parent:r}){const n=function(e,t=[],r){const[n,o]=M.useState();return M.useLayoutEffect((()=>{const t=e();return o(t),lt(r,t),()=>lt(r,null)}),t),n}((()=>new D.default),[]);return M.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 s=o.addEffect((()=>n.begin())),i=o.addAfterEffect((()=>n.end()));return()=>{null==a||a.removeChild(n.dom),s(),i()}}}),[r,n,t,e]),null},exports.Tetrahedron=zt,exports.Text=ae,exports.Torus=Lt,exports.TorusKnot=Dt,exports.TrackballControls=Te,exports.Trail=ve,exports.TransformControls=Re,exports.Tube=Pt,exports.calcPosFromAngles=ur,exports.isWebGL2Available=se,exports.meshBounds=function(e,t){const r=this.geometry,n=this.material,o=this.matrixWorld;void 0!==n&&(null===r.boundingSphere&&r.computeBoundingSphere(),Xr.copy(r.boundingSphere),Xr.applyMatrix4(o),!1!==e.ray.intersectsSphere(Xr)&&($r.copy(o).invert(),qr.copy(e.ray).applyMatrix4($r),null!==r.boundingBox&&null===qr.intersectBox(r.boundingBox,Zr)||t.push({distance:Zr.distanceTo(e.ray.origin),point:Zr.clone(),object:this})))},exports.shaderMaterial=le,exports.softShadows=e=>{if(!Et){Et=!0;let t=T.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 )"),T.ShaderChunk.shadowmap_pars_fragment=t}},exports.useAnimations=function(e,t){const r=M.useRef(),[a]=M.useState((()=>t?t instanceof n.Object3D?{current:t}:t:r)),[s]=M.useState((()=>new n.AnimationMixer(void 0))),i=M.useRef({}),[l]=M.useState((()=>{const t={};return e.forEach((e=>Object.defineProperty(t,e.name,{enumerable:!0,get(){if(a.current)return i.current[e.name]||(i.current[e.name]=s.clipAction(e,a.current))}}))),{ref:a,clips:e,actions:t,names:e.map((e=>e.name)),mixer:s}}));return o.useFrame(((e,t)=>s.update(t))),M.useEffect((()=>{const e=a.current;return()=>{i.current={},Object.values(l.actions).forEach((t=>{e&&s.uncacheAction(t,e)}))}}),[e]),l},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){M.useEffect((()=>{if(e.current){e.current.raycast=x.acceleratedRaycast;const r=e.current.geometry;return r.computeBoundsTree=x.computeBoundsTree,r.disposeBoundsTree=x.disposeBoundsTree,r.computeBoundsTree(t),()=>{r.boundsTree&&r.disposeBoundsTree()}}}),[e,t])},exports.useBounds=function(){return M.useContext($t)},exports.useBoxProjectedEnv=function(e=new T.Vector3,t=new T.Vector3){const[r]=M.useState((()=>({position:new T.Vector3,size:new T.Vector3})));o.applyProps(r,{position:e,size:t});const n=M.useRef(null),a=M.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>",T.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 M.useLayoutEffect((()=>{n.current.needsUpdate=!0}),[r]),a},exports.useCamera=Le,exports.useContextBridge=function(...e){const t=M.useRef([]);return t.current=e.map((e=>M.useContext(e))),M.useMemo((()=>({children:r})=>e.reduceRight(((e,r,n)=>M.createElement(r.Provider,{value:t.current[n],children:e})),r)),[])},exports.useCubeTexture=tt,exports.useCursor=function(e,t="pointer",r="auto"){M.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:s}=o.useThree((e=>e.size)),i=e||a*r,l=e||s*r,c=M.useMemo((()=>{const e=new n.DepthTexture(i,l);return e.format=n.DepthFormat,e.type=n.UnsignedShortType,{depthTexture:e}}),[i,l]);let u=0;const d=ct(i,l,c);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=>m.suspend((()=>g.getGPUTier(e)),["useDetectGPU"]),exports.useFBO=ct,exports.useFBX=rt,exports.useGLTF=at,exports.useGizmoContext=ze,exports.useHelper=function(e,t,...r){const n=M.useRef(),a=o.useThree((e=>e.scene));return M.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=M.useRef(null),r=M.useRef(!1),n=M.useRef(!1);return M.useEffect((()=>{const a=t.current;if(a){const t=o.addEffect((()=>(r.current=!1,!0))),s=a.onBeforeRender;a.onBeforeRender=()=>r.current=!0;const i=o.addAfterEffect((()=>(r.current!==n.current&&e(n.current=r.current),!0)));return()=>{a.onBeforeRender=s,t(),i()}}}),[]),t},exports.useKTX2=it,exports.useMatcapTexture=function(e=0,t=1024){const r=m.suspend((()=>fetch("https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/matcaps.json").then((e=>e.json()))),["matcapList"]),n=r[0],o=M.useMemo((()=>Object.keys(r).length),[]),a=`${M.useMemo((()=>"string"==typeof e?e:"number"==typeof e?r[e]:null),[e])||n}${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}/${a}`;return[ue(s),s,o]},exports.useNormalTexture=function(e=0,t={}){const{repeat:r=[1,1],anisotropy:o=1,offset:a=[0,0]}=t,s=m.suspend((()=>fetch("https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/normals/normals.json").then((e=>e.json()))),["normalsList"]),i=M.useMemo((()=>Object.keys(s).length),[]),l=s[0],c=`https://rawcdn.githack.com/pmndrs/drei-assets/7a3104997e1576f83472829815b00880d88b32fb/normals/${s[e]||l}`,u=ue(c);return M.useLayoutEffect((()=>{u&&(u.wrapS=u.wrapT=n.RepeatWrapping,u.repeat=new n.Vector2(r[0],r[1]),u.offset=new n.Vector2(a[0],a[1]),u.anisotropy=o)}),[u,o,r,a]),[u,c,i]},exports.useProgress=G,exports.useScroll=X,exports.useSelect=function(){return M.useContext(Q)},exports.useTexture=ue,exports.useTrail=he;
|
|
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"),s=require("react-merge-refs"),i=require("@react-spring/three"),l=require("@use-gesture/react"),c=require("three-stdlib"),u=require("zustand/shallow"),d=require("troika-three-text"),m=require("suspend-react"),f=require("meshline"),p=require("lodash.pick"),h=require("lodash.omit"),v=require("stats.js"),g=require("detect-gpu"),x=require("three-mesh-bvh"),y=require("react-composer");function w(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function E(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 b=w(e),M=E(t),S=E(r),T=E(n),C=w(a),R=w(s),_=w(u),P=w(p),L=w(h),D=w(v),z=w(y);const B=new n.Vector3,A=new n.Vector3,F=new n.Vector3;function k(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 U=e=>Math.abs(e)<1e-10?0:e;function j(e,t,r=""){let n="matrix3d(";for(let r=0;16!==r;r++)n+=U(t[r]*e.elements[r])+(15!==r?",":")");return r+n}const V=(I=[1,-1,1,1,1,-1,1,1,1,-1,1,1,1,-1,1,1],e=>j(e,I));var I;const O=(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},W=M.forwardRef((({children:e,eps:t=.001,style:r,className:a,prepend:s,center:i,fullscreen:l,portal:c,distanceFactor:u,sprite:d=!1,transform:m=!1,occlude:f,onOcclude:p,zIndexRange:h=[16777271,0],calculatePosition:v=k,as:g="div",wrapperClass:x,pointerEvents:y="auto",...w},E)=>{var T;const C=o.useThree((({gl:e})=>e)),R=o.useThree((({camera:e})=>e)),_=o.useThree((({scene:e})=>e)),P=o.useThree((({size:e})=>e)),L=o.useThree((({raycaster:e})=>e)),[D]=M.useState((()=>document.createElement(g))),z=M.useMemo((()=>S.createRoot(D)),[D]),j=M.useRef(null),I=M.useRef(0),W=M.useRef([0,0]),N=M.useRef(null),G=M.useRef(null),H=null!==(T=null==c?void 0:c.current)&&void 0!==T?T:C.domElement.parentNode;M.useEffect((()=>{if(j.current){if(_.updateMatrixWorld(),m)D.style.cssText="position:absolute;top:0;left:0;pointer-events:none;overflow:hidden;";else{const e=v(j.current,R,P);D.style.cssText=`position:absolute;top:0;left:0;transform:translate3d(${e[0]}px,${e[1]}px,0);transform-origin:0 0;`}return H&&(s?H.prepend(D):H.appendChild(D)),()=>{H&&H.removeChild(D),z.unmount()}}}),[H,m]),M.useLayoutEffect((()=>{x&&(D.className=x)}),[x]);const $=M.useMemo((()=>m?{position:"absolute",top:0,left:0,width:P.width,height:P.height,transformStyle:"preserve-3d",pointerEvents:"none"}:{position:"absolute",transform:i?"translate3d(-50%,-50%,0)":"none",...l&&{top:-P.height/2,left:-P.width/2,width:P.width,height:P.height},...r}),[r,i,l,P,m]),q=M.useMemo((()=>({position:"absolute",pointerEvents:y})),[y]);M.useLayoutEffect((()=>{m?z.render(M.createElement("div",{ref:N,style:$},M.createElement("div",{ref:G,style:q},M.createElement("div",{ref:E,className:a,style:r,children:e})))):z.render(M.createElement("div",{ref:E,style:$,className:a,children:e}))}));const X=M.useRef(!0);return o.useFrame((()=>{if(j.current){R.updateMatrixWorld(),j.current.updateWorldMatrix(!0,!1);const e=m?W.current:v(j.current,R,P);if(m||Math.abs(I.current-R.zoom)>t||Math.abs(W.current[0]-e[0])>t||Math.abs(W.current[1]-e[1])>t){const t=function(e,t){const r=B.setFromMatrixPosition(e.matrixWorld),n=A.setFromMatrixPosition(t.matrixWorld),o=r.sub(n),a=t.getWorldDirection(F);return o.angleTo(a)>Math.PI/2}(j.current,R);let r=!1;"boolean"==typeof f?!0===f&&(r=[_]):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 s=r.intersectObjects(n,!0);if(s.length){const e=s[0].distance;return o.distanceTo(r.ray.origin)<e}return!0}(j.current,R,L,r);X.current=e&&!t}else X.current=!t;if(o!==X.current&&(p?p(!X.current):D.style.display=X.current?"block":"none"),D.style.zIndex=`${function(e,t,r){if(t instanceof n.PerspectiveCamera||t instanceof n.OrthographicCamera){const n=B.setFromMatrixPosition(e.matrixWorld),o=A.setFromMatrixPosition(t.matrixWorld),a=n.distanceTo(o),s=(r[1]-r[0])/(t.far-t.near),i=r[1]-s*t.far;return Math.round(s*a+i)}}(j.current,R,h)}`,m){const[e,t]=[P.width/2,P.height/2],r=R.projectionMatrix.elements[5]*t,{isOrthographicCamera:n,top:o,left:a,bottom:s,right:i}=R,l=V(R.matrixWorldInverse),c=n?`scale(${r})translate(${U(-(i+a)/2)}px,${U((o+s)/2)}px)`:`translateZ(${r}px)`;let m=j.current.matrixWorld;d&&(m=R.matrixWorldInverse.clone().transpose().copyPosition(m).scale(j.current.scale),m.elements[3]=m.elements[7]=m.elements[11]=0,m.elements[15]=1),D.style.width=P.width+"px",D.style.height=P.height+"px",D.style.perspective=n?"":`${r}px`,N.current&&G.current&&(N.current.style.transform=`${c}${l}translate(${e}px,${t}px)`,G.current.style.transform=O(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=A.setFromMatrixPosition(t.matrixWorld),o=t.fov*Math.PI/180,a=r.distanceTo(n);return 1/(2*Math.tan(o/2)*a)}return 1}(j.current,R)*u;D.style.transform=`translate3d(${e[0]}px,${e[1]}px,0) scale(${t})`}W.current=e,I.current=R.zoom}}})),M.createElement("group",b.default({},w,{ref:j}))}));let N=0;const G=C.default((e=>(n.DefaultLoadingManager.onStart=(t,r,n)=>{e({active:!0,item:t,loaded:r,total:n,progress:(r-N)/(n-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=n),e({active:!0,item:t,loaded:r,total:n,progress:(r-N)/(n-N)*100||100})},{errors:[],active:!1,progress:0,item:"",loaded:0,total:0}))),H=e=>`Loading ${e.toFixed(2)}%`;const $={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"}},q=M.createContext(null);function X(){return M.useContext(q)}const Z=M.forwardRef((({children:e},t)=>{const r=M.useRef(null),n=X(),{width:a,height:s}=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:s*(n.pages-1)*n.offset})),M.createElement("group",{ref:R.default([t,r])},e)})),Y=M.forwardRef((({children:e,style:t,...r},n)=>{const a=X(),s=M.useRef(null),{width:i,height:l}=o.useThree((e=>e.size)),c=M.useContext(o.context),u=M.useMemo((()=>S.createRoot(a.fixed)),[a.fixed]);return o.useFrame((()=>{a.delta>a.eps&&(s.current.style.transform=`translate3d(${a.horizontal?-i*(a.pages-1)*a.offset:0}px,${a.horizontal?0:l*(a.pages-1)*-a.offset}px,0)`)})),u.render(M.createElement("div",b.default({ref:R.default([n,s]),style:{...t,position:"absolute",top:0,left:0,willChange:"transform"}},r),M.createElement(q.Provider,{value:a},M.createElement(o.context.Provider,{value:c},e)))),null})),K=M.forwardRef((({html:e,...t},r)=>{const n=e?Y:Z;return M.createElement(n,b.default({ref:r},t))}));const Q=M.createContext([]);const J=M.forwardRef((function({follow:e=!0,lockX:t=!1,lockY:r=!1,lockZ:n=!1,...a},s){const i=M.useRef();return o.useFrame((({camera:o})=>{if(!e||!i.current)return;const a=i.current.rotation.clone();i.current.quaternion.copy(o.quaternion),t&&(i.current.rotation.x=a.x),r&&(i.current.rotation.y=a.y),n&&(i.current.rotation.z=a.z)})),M.createElement("group",b.default({ref:R.default([i,s])},a))})),ee=M.forwardRef((function({points:e,color:t="black",vertexColors:r,lineWidth:o,dashed:a,...s},i){const[l]=M.useState((()=>new c.Line2)),[u]=M.useState((()=>new c.LineMaterial)),[d]=M.useState((()=>new n.Vector2(512,512))),m=M.useMemo((()=>{const t=new c.LineGeometry,o=e.map((e=>e instanceof n.Vector3?e.toArray():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 M.useLayoutEffect((()=>{l.computeLineDistances()}),[e,l]),M.useLayoutEffect((()=>{a?u.defines.USE_DASH="":delete u.defines.USE_DASH,u.needsUpdate=!0}),[a,u]),M.useEffect((()=>()=>m.dispose()),[m]),M.createElement("primitive",b.default({object:l,ref:i},s),M.createElement("primitive",{object:m,attach:"geometry"}),M.createElement("primitive",b.default({object:u,attach:"material",color:t,vertexColors:Boolean(r),resolution:d,linewidth:o,dashed:a},s)))})),te=new n.Vector3,re=M.forwardRef((function({start:e=[0,0,0],end:t=[0,0,0],mid:r,segments:o=20,...a},s){const i=M.useRef(null),[l]=M.useState((()=>new n.QuadraticBezierCurve3(void 0,void 0,void 0))),c=M.useCallback(((e,t,r,o=20)=>(e instanceof n.Vector3?l.v0.copy(e):l.v0.set(...e),t instanceof n.Vector3?l.v2.copy(t):l.v2.set(...t),r instanceof n.Vector3?l.v1.copy(r):l.v1.copy(l.v0.clone().add(l.v2.clone().sub(l.v0)).add(te.set(0,l.v0.y-l.v2.y,0))),l.getPoints(o))),[]);M.useLayoutEffect((()=>{i.current.setPoints=(e,t,r)=>{const n=c(e,t,r);i.current.geometry&&i.current.geometry.setPositions(n.map((e=>e.toArray())).flat())}}),[]);const u=M.useMemo((()=>c(e,t,r,o)),[e,t,r,o]);return M.createElement(ee,b.default({ref:R.default([i,s]),points:u},a))})),ne=M.forwardRef((function({start:e,end:t,midA:r,midB:o,segments:a=20,...s},i){const l=M.useMemo((()=>{const s=e instanceof n.Vector3?e:new n.Vector3(...e),i=t instanceof n.Vector3?t:new n.Vector3(...t),l=r instanceof n.Vector3?r:new n.Vector3(...r),c=o instanceof n.Vector3?o:new n.Vector3(...o);return new n.CubicBezierCurve3(s,l,c,i).getPoints(a)}),[e,t,r,o,a]);return M.createElement(ee,b.default({ref:i,points:l},s))})),oe=M.forwardRef((({url:e,distance:t=1,loop:r=!0,autoplay:a,...s},i)=>{const l=M.useRef(),c=o.useThree((({camera:e})=>e)),[u]=M.useState((()=>new n.AudioListener)),d=o.useLoader(n.AudioLoader,e);return M.useEffect((()=>{const e=l.current;e&&(e.setBuffer(d),e.setRefDistance(t),e.setLoop(r),a&&!e.isPlaying&&e.play())}),[d,c,t,r]),M.useEffect((()=>{const e=l.current;return c.add(u),()=>{c.remove(u),e&&(e.isPlaying&&e.stop(),e.source&&e.source._connected&&e.disconnect())}}),[]),M.createElement("positionalAudio",b.default({ref:R.default([l,i]),args:[u]},s))})),ae=M.forwardRef((({anchorX:e="center",anchorY:t="middle",font:r,children:n,characters:a,onSync:s,...i},l)=>{const c=o.useThree((({invalidate:e})=>e)),[u]=M.useState((()=>new d.Text)),[f,p]=M.useMemo((()=>{const e=[];let t="";return M.Children.forEach(n,(r=>{"string"==typeof r||"number"==typeof r?t+=r:e.push(r)})),[e,t]}),[n]);return m.suspend((()=>new Promise((e=>d.preloadFont({font:r,characters:a},e)))),["troika-text",r,a]),M.useLayoutEffect((()=>{u.sync((()=>{c(),s&&s(u)}))})),M.useEffect((()=>()=>u.dispose()),[u]),M.createElement("primitive",b.default({object:u,ref:l,font:r,text:p,anchorX:e,anchorY:t},i),f)}));o.extend({EffectComposer:c.EffectComposer,RenderPass:c.RenderPass,ShaderPass:c.ShaderPass});const se=M.forwardRef((({children:e,multisamping:t=8,renderIndex:r=1,disableGamma:a=!1,disableRenderPass:s=!1,...i},l)=>{const u=M.useRef(),d=o.useThree((e=>e.scene)),m=o.useThree((e=>e.camera)),f=o.useThree((e=>e.gl)),p=o.useThree((e=>e.size)),[h]=M.useState((()=>{const e=new n.WebGLRenderTarget(p.width,p.height,{format:n.RGBAFormat,encoding:f.outputEncoding});return e.samples=t,e}));M.useEffect((()=>{var e,t;null==(e=u.current)||e.setSize(p.width,p.height),null==(t=u.current)||t.setPixelRatio(f.getPixelRatio())}),[f,p]),o.useFrame((()=>{var e;return null==(e=u.current)?void 0:e.render()}),r);const v=[];return s||v.push(M.createElement("renderPass",{key:"renderpass",args:[d,m]})),a||v.push(M.createElement("shaderPass",{key:"gammapass",args:[c.GammaCorrectionShader]})),M.Children.forEach(e,((e,t)=>v.push(M.cloneElement(e,{key:t,attach:`passes-${t}`})))),M.createElement("effectComposer",b.default({ref:R.default([l,u]),args:[f,h]},i),v)}));function ie(e,t,r,n){return class extends T.ShaderMaterial{constructor(){const o=Object.entries(e);super({uniforms:o.reduce(((e,[t,r])=>({...e,...T.UniformsUtils.clone({[t]:{value:r}})})),{}),vertexShader:t,fragmentShader:r}),o.forEach((([e])=>Object.defineProperty(this,e,{get:()=>this.uniforms[e].value,set:t=>this.uniforms[e].value=t}))),n&&n(this)}}}const le=e=>e===Object(e)&&!Array.isArray(e)&&"function"!=typeof e;function ce(e){const r=o.useThree((e=>e.gl)),a=o.useLoader(n.TextureLoader,le(e)?Object.values(e):e);if(t.useEffect((()=>{(Array.isArray(a)?a:[a]).forEach(r.initTexture)}),[r,a]),le(e)){const t=Object.keys(e),r={};return t.forEach((e=>Object.assign(r,{[e]:a[t.indexOf(e)]}))),r}return a}ce.preload=e=>o.useLoader.preload(n.TextureLoader,e),ce.clear=e=>o.useLoader.clear(n.TextureLoader,e);const ue=ie({color:new T.Color("white"),scale:[1,1],imageBounds:[1,1],map:null,zoom:1,grayscale:0},"\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 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, 1.0), grayscale);\n \n #include <tonemapping_fragment>\n #include <encodings_fragment>\n }\n"),de=M.forwardRef((({children:e,color:t,segments:r=1,scale:n=1,zoom:a=1,grayscale:s=0,url:i,toneMapped:l,...c},u)=>{o.extend({ImageMaterial:ue});const d=ce(i),m=Array.isArray(n)?[n[0],n[1]]:[n,n],f=[d.image.width,d.image.height];return M.createElement("mesh",b.default({ref:u,scale:n},c),M.createElement("planeGeometry",{args:[1,1,r,r]}),M.createElement("imageMaterial",{color:t,map:d,zoom:a,grayscale:s,scale:m,imageBounds:f,toneMapped:l}),e)}));const me={width:.2,length:1,decay:1,local:!1,stride:0,interval:1},fe=(e,t=1)=>(e.set(e.subarray(t)),e.fill(-1/0,-t),e);function pe(e,t){const{length:r,local:a,decay:s,interval:i,stride:l}={...me,...t},c=M.useRef(),[u]=M.useState((()=>new n.Vector3));M.useLayoutEffect((()=>{e&&(c.current=Float32Array.from({length:10*r*3},((t,r)=>e.position.getComponent(r%3))))}),[r,e]);const d=M.useRef(new n.Vector3),m=M.useRef(0);return o.useFrame((()=>{if(e&&c.current){if(0===m.current){let t;a?t=e.position:(e.getWorldPosition(u),t=u);const r=1*s;for(let e=0;e<r;e++)t.distanceTo(d.current)<l||(fe(c.current,3),c.current.set(t.toArray(),c.current.length-3));d.current.copy(t)}m.current++,m.current=m.current%i}})),c}const he=M.forwardRef(((e,t)=>{const{children:r}=e,{width:a,length:s,decay:i,local:l,stride:c,interval:u}={...me,...e},{color:d="hotpink",attenuation:m,target:p}=e,h=o.useThree((e=>e.size)),v=M.useRef(null),[g,x]=M.useState(null),y=pe(g,{length:s,decay:i,local:l,stride:c,interval:u});M.useEffect((()=>{const e=(null==p?void 0:p.current)||v.current.children.find((e=>e instanceof n.Object3D));e&&x(e)}),[y,p]);const w=M.useMemo((()=>new f.MeshLine),[]),E=M.useMemo((()=>{var e;const t=new f.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 M.useEffect((()=>{E.uniforms.resolution.value.set(h.width,h.height)}),[h]),o.useFrame((()=>{y.current&&w.setPoints(y.current,m)})),M.createElement("group",null,M.createElement("mesh",{ref:t,geometry:w,material:E}),M.createElement("group",{ref:v},r))}));function ve(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 s=P.default(e,t);return r&&(s.geometry&&"materialsOnly"!==r&&(s.geometry=s.geometry.clone()),s.material&&"geometriesOnly"!==r&&(s.material=s.material.clone())),n&&(s="function"==typeof n?{...s,children:n(e)}:M.isValidElement(n)?{...s,children:n}:{...s,...n}),"Mesh"===e.type&&(o&&(s.castShadow=!0),a&&(s.receiveShadow=!0)),s}const ge=M.forwardRef((({object:e,children:t,deep:r,castShadow:n,receiveShadow:o,inject:a,keys:s,...i},l)=>{const c={keys:s,deep:r,inject:a,castShadow:n,receiveShadow:o};if(Array.isArray(e))return M.createElement("group",b.default({},i,{ref:l}),e.map((e=>M.createElement(ge,b.default({key:e.uuid,object:e},c)))),t);const{children:u,...d}=ve(e,c),m=e.type[0].toLowerCase()+e.type.slice(1);return M.createElement(m,b.default({},d,i,{ref:l}),(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=ge,t={object:e,...c}):t=ve(e,c),M.createElement(r,b.default({key:e.uuid},t))})),t,u)})),xe=M.forwardRef((({makeDefault:e,...t},r)=>{const n=o.useThree((({set:e})=>e)),a=o.useThree((({camera:e})=>e)),s=o.useThree((({size:e})=>e)),i=M.useRef();return M.useLayoutEffect((()=>{i.current&&!t.manual&&i.current.updateProjectionMatrix()}),[s,t]),M.useLayoutEffect((()=>{if(e&&i.current){const e=a;return n((()=>({camera:i.current}))),()=>n((()=>({camera:e})))}}),[a,i,e,n]),M.createElement("orthographicCamera",b.default({left:s.width/-2,right:s.width/2,top:s.height/2,bottom:s.height/-2,ref:R.default([i,r])},t))})),ye=M.forwardRef((({makeDefault:e,...t},r)=>{const n=o.useThree((({set:e})=>e)),a=o.useThree((({camera:e})=>e)),s=o.useThree((({size:e})=>e)),i=M.useRef();return M.useLayoutEffect((()=>{const{current:e}=i;e&&!t.manual&&(e.aspect=s.width/s.height,e.updateProjectionMatrix())}),[s,t]),M.useLayoutEffect((()=>{if(e&&i.current){const e=a;return n((()=>({camera:i.current}))),()=>n((()=>({camera:e})))}}),[a,i,e,n]),M.createElement("perspectiveCamera",b.default({ref:R.default([i,r])},t))}));const we=M.forwardRef(((e,t)=>{const{camera:r,onChange:n,...a}=e,s=o.useThree((e=>e.camera)),i=o.useThree((e=>e.invalidate)),l=r||s,[u]=M.useState((()=>new c.DeviceOrientationControls(l)));return M.useEffect((()=>{const e=e=>{i(),n&&n(e)};return null==u||null==u.addEventListener||u.addEventListener("change",e),()=>null==u||null==u.removeEventListener?void 0:u.removeEventListener("change",e)}),[n,u,i]),o.useFrame((()=>null==u?void 0:u.update())),M.useEffect((()=>{const e=u;return null==e||e.connect(),()=>null==e?void 0:e.dispose()}),[u]),u?M.createElement("primitive",b.default({ref:t,object:u},a)):null})),Ee=M.forwardRef((({domElement:e,...t},r)=>{const{onChange:n,...a}=t,s=o.useThree((e=>e.invalidate)),i=o.useThree((e=>e.camera)),l=o.useThree((e=>e.gl)),u=o.useThree((e=>e.events)),d=e||u.connected||l.domElement,[m]=M.useState((()=>new c.FlyControls(i,d)));return M.useEffect((()=>{const e=e=>{s(),n&&n(e)};return null==m||null==m.addEventListener||m.addEventListener("change",e),()=>null==m||null==m.removeEventListener?void 0:m.removeEventListener("change",e)}),[n,m,s]),o.useFrame(((e,t)=>null==m?void 0:m.update(t))),m?M.createElement("primitive",b.default({ref:r,object:m},a)):null})),be=M.forwardRef(((e={enableDamping:!0},t)=>{const{domElement:r,camera:n,onChange:a,onStart:s,onEnd:i,...l}=e,u=o.useThree((e=>e.invalidate)),d=o.useThree((e=>e.camera)),m=o.useThree((e=>e.gl)),f=o.useThree((e=>e.events)),p=r||f.connected||m.domElement,h=n||d,v=M.useMemo((()=>new c.MapControls(h)),[h]);return M.useEffect((()=>{v.connect(p);const e=e=>{u(),a&&a(e)};return v.addEventListener("change",e),s&&v.addEventListener("start",s),i&&v.addEventListener("end",i),()=>{v.dispose(),v.removeEventListener("change",e),s&&v.removeEventListener("start",s),i&&v.removeEventListener("end",i)}}),[a,s,i,v,u,p]),o.useFrame((()=>v.update())),M.createElement("primitive",b.default({ref:t,object:v,enableDamping:!0},l))})),Me=M.forwardRef((({makeDefault:e,camera:t,regress:r,domElement:n,enableDamping:a=!0,onChange:s,onStart:i,onEnd:l,...u},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=M.useMemo((()=>new c.OrbitControls(y)),[y]);return o.useFrame((()=>{E.enabled&&E.update()})),M.useEffect((()=>(E.connect(w),()=>{E.dispose()})),[w,r,E,m]),M.useEffect((()=>{const e=e=>{m(),r&&x.regress(),s&&s(e)};return E.addEventListener("change",e),i&&E.addEventListener("start",i),l&&E.addEventListener("end",l),()=>{i&&E.removeEventListener("start",i),l&&E.removeEventListener("end",l),E.removeEventListener("change",e)}}),[s,i,l]),M.useEffect((()=>{if(e){const e=g().controls;return v({controls:E}),()=>v({controls:e})}}),[e,E]),M.createElement("primitive",b.default({ref:d,object:E,enableDamping:a},u))})),Se=M.forwardRef((({makeDefault:e,camera:t,domElement:r,regress:n,onChange:a,onStart:s,onEnd:i,...l},u)=>{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=M.useMemo((()=>new c.TrackballControls(y)),[y]);return o.useFrame((()=>{E.enabled&&E.update()})),M.useEffect((()=>(E.connect(w),()=>{E.dispose()})),[w,n,E,d]),M.useEffect((()=>{const e=e=>{d(),n&&g.regress(),a&&a(e)};return E.addEventListener("change",e),s&&E.addEventListener("start",s),i&&E.addEventListener("end",i),()=>{s&&E.removeEventListener("start",s),i&&E.removeEventListener("end",i),E.removeEventListener("change",e)}}),[a,s,i]),M.useEffect((()=>{E.handleResize()}),[x]),M.useEffect((()=>{if(e){const e=v().controls;return h({controls:E}),()=>h({controls:e})}}),[e,E]),M.createElement("primitive",b.default({ref:u,object:E},l))})),Te=t.forwardRef((({camera:e,makeDefault:r,regress:n,domElement:a,onChange:s,onStart:i,onEnd:l,...u},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 c.ArcballControls(y)),[y]);return o.useFrame((()=>{E.enabled&&E.update()})),t.useEffect((()=>(E.connect(w),()=>{E.dispose()})),[w,n,E,m]),t.useEffect((()=>{const e=e=>{m(),n&&x.regress(),s&&s(e)};return E.addEventListener("change",e),i&&E.addEventListener("start",i),l&&E.addEventListener("end",l),()=>{E.removeEventListener("change",e),i&&E.removeEventListener("start",i),l&&E.removeEventListener("end",l)}}),[s,i,l]),t.useEffect((()=>{if(r){const e=g().controls;return v({controls:E}),()=>v({controls:e})}}),[r,E]),M.createElement("primitive",b.default({ref:d,object:E},u))})),Ce=M.forwardRef((({children:e,domElement:t,onChange:r,onMouseDown:n,onMouseUp:a,onObjectChange:s,object:i,...l},u)=>{const d=["enabled","axis","mode","translationSnap","rotationSnap","scaleSnap","space","size","showX","showY","showZ"],{camera:m,...f}=l,p=P.default(f,d),h=L.default(f,d),v=o.useThree((e=>e.controls)),g=o.useThree((e=>e.gl)),x=o.useThree((e=>e.events)),y=o.useThree((e=>e.camera)),w=o.useThree((e=>e.invalidate)),E=m||y,S=t||x.connected||g.domElement,C=M.useMemo((()=>new c.TransformControls(E,S)),[E,S]),R=M.useRef();return M.useLayoutEffect((()=>(i?C.attach(i instanceof T.Object3D?i:i.current):R.current instanceof T.Object3D&&C.attach(R.current),()=>{C.detach()})),[i,e,C]),M.useEffect((()=>{if(v){const e=e=>v.enabled=!e.value;return C.addEventListener("dragging-changed",e),()=>C.removeEventListener("dragging-changed",e)}}),[C,v]),M.useEffect((()=>{const e=e=>{w(),r&&r(e)};return null==C||null==C.addEventListener||C.addEventListener("change",e),n&&(null==C||null==C.addEventListener||C.addEventListener("mouseDown",n)),a&&(null==C||null==C.addEventListener||C.addEventListener("mouseUp",a)),s&&(null==C||null==C.addEventListener||C.addEventListener("objectChange",s)),()=>{null==C||null==C.removeEventListener||C.removeEventListener("change",e),n&&(null==C||null==C.removeEventListener||C.removeEventListener("mouseDown",n)),a&&(null==C||null==C.removeEventListener||C.removeEventListener("mouseUp",a)),s&&(null==C||null==C.removeEventListener||C.removeEventListener("objectChange",s))}}),[r,n,a,s,C,w]),C?M.createElement(M.Fragment,null,M.createElement("primitive",b.default({ref:u,object:C},p)),M.createElement("group",b.default({ref:R},h),e)):null})),Re=M.forwardRef((({domElement:e,selector:t,onChange:r,onLock:n,onUnlock:a,enabled:s=!0,...i},l)=>{const{camera:u,...d}=i,m=o.useThree((e=>e.get)),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=u||h,y=e||g.connected||p.domElement,[w]=M.useState((()=>new c.PointerLockControls(x)));return M.useEffect((()=>{if(s){w.connect(y);const e=m().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)}}),()=>{w.disconnect(),f({compute:e})}}}),[s,w]),M.useEffect((()=>{const e=e=>{v(),r&&r(e)};w.addEventListener("change",e),n&&w.addEventListener("lock",n),a&&w.addEventListener("unlock",a);const o=()=>w.lock(),s=t?Array.from(document.querySelectorAll(t)):[document];return s.forEach((e=>e&&e.addEventListener("click",o))),()=>{w.removeEventListener("change",e),n&&w.addEventListener("lock",n),a&&w.addEventListener("unlock",a),s.forEach((e=>e?e.removeEventListener("click",o):void 0))}}),[r,n,a,t]),M.createElement("primitive",b.default({ref:l,object:w},d))})),_e=M.forwardRef((({domElement:e,...t},r)=>{const n=o.useThree((e=>e.camera)),a=o.useThree((e=>e.gl)),s=o.useThree((e=>e.events)),i=e||s.connected||a.domElement,[l]=M.useState((()=>new c.FirstPersonControls(n,i)));return o.useFrame(((e,t)=>{l.update(t)})),l?M.createElement("primitive",b.default({ref:r,object:l},t)):null}));function Pe(e,t){const r=o.useThree((e=>e.pointer)),[a]=M.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 s=this.constructor.prototype.raycast.bind(this);s&&s(a,o)}}));return a}const Le=M.createContext({}),De=()=>M.useContext(Le),ze=2*Math.PI,Be=new n.Object3D,Ae=new n.Matrix4,[Fe,ke]=[new n.Quaternion,new n.Quaternion],Ue=new n.Vector3,je=new n.Vector3,Ve="#f0f0f0",Ie="#999",Oe="black",We="black",Ne=["Right","Left","Top","Bottom","Front","Back"],Ge=e=>new n.Vector3(...e).multiplyScalar(.38),He=[[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(Ge),$e=[.25,.25,.25],qe=[[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(Ge),Xe=qe.map((e=>e.toArray().map((e=>0==e?.5:.25)))),Ze=({hover:e,index:t,font:r="20px Inter var, Arial, sans-serif",faces:a=Ne,color:s=Ve,hoverColor:i=Ie,textColor:l=Oe,strokeColor:c=We,opacity:u=1})=>{const d=o.useThree((e=>e.gl)),m=M.useMemo((()=>{const e=document.createElement("canvas");e.width=128,e.height=128;const o=e.getContext("2d");return o.fillStyle=s,o.fillRect(0,0,e.width,e.height),o.strokeStyle=c,o.strokeRect(0,0,e.width,e.height),o.font=r,o.textAlign="center",o.fillStyle=l,o.fillText(a[t].toUpperCase(),64,76),new n.CanvasTexture(e)}),[t,a,r,s,l,c]);return M.createElement("meshLambertMaterial",{map:m,"map-anisotropy":d.capabilities.getMaxAnisotropy()||1,attach:`material-${t}`,color:e?i:"white",transparent:!0,opacity:u})},Ye=e=>{const{tweenCamera:t,raycast:r}=De(),[n,o]=M.useState(null);return M.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)=>M.createElement(Ze,b.default({key:r,index:r,hover:n===r},e)))),M.createElement("boxGeometry",null))},Ke=({onClick:e,dimensions:t,position:r,hoverColor:n=Ie})=>{const{tweenCamera:o,raycast:a}=De(),[s,i]=M.useState(!1);return M.createElement("mesh",{scale:1.01,position:r,raycast:a,onPointerOver:e=>{e.stopPropagation(),i(!0)},onPointerOut:e=>{e.stopPropagation(),i(!1)},onClick:e||(e=>{e.stopPropagation(),o(r)})},M.createElement("meshBasicMaterial",{color:s?n:"white",transparent:!0,opacity:.6,visible:s}),M.createElement("boxGeometry",{args:t}))};function Qe({scale:e=[.8,.05,.05],color:t,rotation:r}){return M.createElement("group",{rotation:r},M.createElement("mesh",{position:[.4,0,0]},M.createElement("boxGeometry",{args:e}),M.createElement("meshBasicMaterial",{color:t,toneMapped:!1})))}function Je({onClick:e,font:t,disabled:r,arcStyle:a,label:s,labelColor:i,axisHeadScale:l=1,...c}){const u=o.useThree((e=>e.gl)),d=M.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(),s&&(r.font=t,r.textAlign="center",r.fillStyle=i,r.fillText(s,32,41)),new n.CanvasTexture(e)}),[a,s,i,t]),[m,f]=M.useState(!1),p=(s?1:.75)*(m?1.2:1)*l;return M.createElement("sprite",b.default({scale:p,onPointerOver:r?void 0:e=>{e.stopPropagation(),f(!0)},onPointerOut:r?void 0:e||(e=>{e.stopPropagation(),f(!1)})},c),M.createElement("spriteMaterial",{map:d,"map-anisotropy":u.capabilities.getMaxAnisotropy()||1,alphaTest:.3,opacity:s?1:.75,toneMapped:!1}))}function et(e,{path:t}){const[r]=o.useLoader(n.CubeTextureLoader,[e],(e=>e.setPath(t)));return r}function tt(e){return o.useLoader(c.FBXLoader,e)}et.preload=(e,{path:t})=>o.useLoader.preload(n.CubeTextureLoader,[e],(e=>e.setPath(t))),tt.preload=e=>o.useLoader.preload(c.FBXLoader,e),tt.clear=e=>o.useLoader.clear(c.FBXLoader,e);let rt=null;function nt(e,t,r){return n=>{r&&r(n),e&&(rt||(rt=new c.DRACOLoader),rt.setDecoderPath("string"==typeof e?e:"https://www.gstatic.com/draco/versioned/decoders/1.4.3/"),n.setDRACOLoader(rt)),t&&n.setMeshoptDecoder("function"==typeof c.MeshoptDecoder?c.MeshoptDecoder():c.MeshoptDecoder)}}function ot(e,t=!0,r=!0,n){return o.useLoader(c.GLTFLoader,e,nt(t,r,n))}ot.preload=(e,t=!0,r=!0,n)=>o.useLoader.preload(c.GLTFLoader,e,nt(t,r,n)),ot.clear=e=>o.useLoader.clear(c.GLTFLoader,e);const at="https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master";function st(e,r=`${at}/basis/`){const n=o.useThree((e=>e.gl)),a=o.useLoader(c.KTX2Loader,le(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]),le(e)){const t=Object.keys(e),r={};return t.forEach((e=>Object.assign(r,{[e]:a[t.indexOf(e)]}))),r}return a}function it(e,t){"function"==typeof e?e(t):null!=e&&(e.current=t)}function lt(e,t,r){const{gl:n,size:a}=o.useThree(),s=M.useMemo((()=>n.getPixelRatio()),[n]),i="number"==typeof e?e:a.width*s,l="number"==typeof t?t:a.height*s,c=("number"==typeof e?r:e)||{},{samples:u,...d}=c,m=M.useMemo((()=>{let e;return e=new T.WebGLRenderTarget(i,l,{minFilter:T.LinearFilter,magFilter:T.LinearFilter,encoding:n.outputEncoding,type:T.HalfFloatType,...d}),e.samples=u,e}),[]);return M.useLayoutEffect((()=>{m.setSize(i,l),u&&(m.samples=u)}),[u,m,i,l]),M.useEffect((()=>()=>m.dispose()),[]),m}st.preload=(e,t=`${at}/basis/`)=>o.useLoader.preload(c.KTX2Loader,e,(e=>{e.setTranscoderPath(t)})),st.clear=e=>o.useLoader.clear(c.KTX2Loader,e);const ct=M.forwardRef((({children:e,curve:t},r)=>{const[n]=M.useState((()=>new T.Scene)),[a,s]=M.useState(),i=M.useRef();return M.useEffect((()=>{i.current=new c.Flow(n.children[0]),s(i.current.object3D)}),[e]),M.useEffect((()=>{var e;t&&(null==(e=i.current)||e.updateCurve(0,t))}),[t]),M.useImperativeHandle(r,(()=>({moveAlongCurve:e=>{var t;null==(t=i.current)||t.moveAlongCurve(e)}}))),M.createElement(M.Fragment,null,o.createPortal(e,n),a&&M.createElement("primitive",{object:a}))}));class ut 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 dt=M.forwardRef((({speed:e=1,...t},r)=>{const[n]=M.useState((()=>new ut));return o.useFrame((t=>n&&(n.time=t.clock.getElapsedTime()*e))),M.createElement("primitive",b.default({object:n,ref:r,attach:"material"},t))}));class mt 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 ft=M.forwardRef((({speed:e=1,...t},r)=>{const[n]=M.useState((()=>new mt));return o.useFrame((t=>n&&(n.time=t.clock.getElapsedTime()*e))),M.createElement("primitive",b.default({object:n,ref:r,attach:"material"},t))}));class pt 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 ht{constructor({gl:e,resolution:t,width:r=500,height:o=500,minDepthThreshold:a=0,maxDepthThreshold:s=1,depthScale:i=0,depthToBlurRatioBias:l=.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 pt,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=s,this.convolutionMaterial.uniforms.depthScale.value=i,this.convolutionMaterial.uniforms.depthToBlurRatioBias.value=l,this.convolutionMaterial.defines.USE_DEPTH=i>0;const c=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(c,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,s=this.renderTargetB;let i=this.convolutionMaterial,l=i.uniforms;l.depthBuffer.value=t.depthTexture;const c=i.kernel;let u,d,m,f=t;for(d=0,m=c.length-1;d<m;++d)u=0==(1&d)?a:s,l.kernel.value=c[d],l.inputBuffer.value=f.texture,e.setRenderTarget(u),e.render(n,o),f=u;l.kernel.value=c[d],l.inputBuffer.value=f.texture,e.setRenderTarget(this.renderToScreen?null:r),e.render(n,o)}}class vt 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:vt});const gt=M.forwardRef((({mixBlur:e=0,mixStrength:t=1,resolution:r=256,blur:a=[0,0],minDepthThreshold:s=.9,maxDepthThreshold:i=1,depthScale:l=0,depthToBlurRatioBias:c=.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=M.useRef(null),[S]=M.useState((()=>new n.Plane)),[T]=M.useState((()=>new n.Vector3)),[C]=M.useState((()=>new n.Vector3)),[_]=M.useState((()=>new n.Vector3)),[P]=M.useState((()=>new n.Matrix4)),[L]=M.useState((()=>new n.Vector3(0,0,-1))),[D]=M.useState((()=>new n.Vector4)),[z]=M.useState((()=>new n.Vector3)),[B]=M.useState((()=>new n.Vector3)),[A]=M.useState((()=>new n.Vector4)),[F]=M.useState((()=>new n.Matrix4)),[k]=M.useState((()=>new n.PerspectiveCamera)),U=M.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),_.setFromMatrixPosition(x.matrixWorld),P.extractRotation(t.matrixWorld),T.set(0,0,1),T.applyMatrix4(P),C.addScaledVector(T,p),z.subVectors(C,_),z.dot(T)>0)return;z.reflect(T).negate(),z.add(C),P.extractRotation(x.matrixWorld),L.set(0,0,-1),L.applyMatrix4(P),L.add(_),B.subVectors(C,L),B.reflect(T).negate(),B.add(C),k.position.copy(z),k.up.set(0,1,0),k.up.applyMatrix4(P),k.up.reflect(T),k.lookAt(B),k.far=x.far,k.updateMatrixWorld(),k.projectionMatrix.copy(x.projectionMatrix),F.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),F.multiply(k.projectionMatrix),F.multiply(k.matrixWorldInverse),F.multiply(t.matrixWorld),S.setFromNormalAndCoplanarPoint(T,C),S.applyMatrix4(k.matrixWorldInverse),D.set(S.normal.x,S.normal.y,S.normal.z,S.constant);const r=k.projectionMatrix;A.x=(Math.sign(D.x)+r.elements[8])/r.elements[0],A.y=(Math.sign(D.y)+r.elements[9])/r.elements[5],A.z=-1,A.w=(1+r.elements[10])/r.elements[14],D.multiplyScalar(2/D.dot(A)),r.elements[2]=D.x,r.elements[6]=D.y,r.elements[10]=D.z+1,r.elements[14]=D.w}),[x,p]),[j,V,I,O]=M.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 ht({gl:g,resolution:r,width:a[0],height:a[1],minDepthThreshold:s,maxDepthThreshold:i,depthScale:l,depthToBlurRatioBias:c}),{mirror:u,textureMatrix:F,mixBlur:e,tDiffuse:p.texture,tDepth:p.depthTexture,tDiffuseBlur:h.texture,hasBlur:w,mixStrength:t,minDepthThreshold:s,maxDepthThreshold:i,depthScale:l,depthToBlurRatioBias:c,transparent:!0,distortion:d,distortionMap:f,mixContrast:m,"defines-USE_BLUR":w?"":void 0,"defines-USE_DEPTH":l>0?"":void 0,"defines-USE_DISTORTION":f?"":void 0}]}),[g,a,F,r,u,w,e,t,s,i,l,c,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(j),g.state.buffers.depth.setMask(!0),g.autoClear||g.clear(),g.render(y,k),w&&I.render(g,j,V),g.xr.enabled=r,g.shadowMap.autoUpdate=n,t.visible=!0,g.setRenderTarget(null)})),M.createElement("meshReflectorMaterialImpl",b.default({attach:"material",key:"key"+O["defines-USE_BLUR"]+O["defines-USE_DEPTH"]+O["defines-USE_DISTORTION"],ref:R.default([E,v])},O,h))}));class xt extends T.PointsMaterial{constructor(e){super(e),this.onBeforeCompile=e=>{e.fragmentShader=e.fragmentShader.replace("#include <output_fragment>","\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 yt=M.forwardRef(((e,t)=>{const[r]=M.useState((()=>new xt(null)));return M.createElement("primitive",b.default({},e,{object:r,ref:t,attach:"material"}))}));let wt=!1;function Et(e){const t=e+"BufferGeometry";return M.forwardRef((({args:e,children:r,...n},o)=>M.createElement("mesh",b.default({ref:o},n),M.createElement(t,{attach:"geometry",args:e}),r)))}const bt=Et("box"),Mt=Et("circle"),St=Et("cone"),Tt=Et("cylinder"),Ct=Et("sphere"),Rt=Et("plane"),_t=Et("tube"),Pt=Et("torus"),Lt=Et("torusKnot"),Dt=Et("tetrahedron"),zt=Et("ring"),Bt=Et("polyhedron"),At=Et("icosahedron"),Ft=Et("octahedron"),kt=Et("dodecahedron"),Ut=Et("extrude"),jt=Et("lathe"),Vt=1e-5;const It=M.forwardRef((function({args:[e=1,t=1,r=1]=[],radius:o=.05,steps:a=1,smoothness:s=4,children:i,...l},c){const u=M.useMemo((()=>function(e,t,r){const o=new n.Shape,a=r-Vt;return o.absarc(Vt,Vt,Vt,-Math.PI/2,-Math.PI,!0),o.absarc(Vt,t-2*a,Vt,Math.PI,Math.PI/2,!0),o.absarc(e-2*a,t-2*a,Vt,Math.PI/2,0,!0),o.absarc(e-2*a,Vt,Vt,0,-Math.PI/2,!0),o}(e,t,o)),[e,t,o]),d=M.useMemo((()=>({depth:r-2*o,bevelEnabled:!0,bevelSegments:2*s,steps:a,bevelSize:o-Vt,bevelThickness:o,curveSegments:s})),[r,o,s]),m=M.useRef();return M.useLayoutEffect((()=>{m.current&&m.current.center()}),[u,d]),M.createElement("mesh",b.default({ref:c},l),M.createElement("extrudeGeometry",{ref:m,args:[u,d]}),i)}));function Ot(){const e=new T.BufferGeometry,t=new Float32Array([-1,-1,3,-1,-1,3]);return e.setAttribute("position",new T.BufferAttribute(t,2)),e}const Wt=M.forwardRef((function({children:e,...t},r){const n=M.useMemo(Ot,[]);return M.createElement("mesh",b.default({ref:r,geometry:n,frustumCulled:!1},t),e)})),Nt=M.forwardRef((function({children:e,alignTop:t,...r},o){const a=M.useRef(null),s=M.useRef(null);return M.useLayoutEffect((()=>{a.current.position.set(0,0,0),a.current.updateWorldMatrix(!0,!0);const e=(new n.Box3).setFromObject(s.current),r=new n.Vector3,o=new n.Sphere,i=e.max.y-e.min.y;e.getCenter(r),e.getBoundingSphere(o),a.current.position.set(-r.x,-r.y+(t?i/2:0),-r.z)}),[e]),M.createElement("group",b.default({ref:o},r),M.createElement("group",{ref:a},M.createElement("group",{ref:s},e)))})),Gt=e=>e&&e.isOrthographicCamera,Ht=M.createContext(null);const $t=M.forwardRef((({intensity:e=1,decay:t,decayRate:r=.65,maxYaw:n=.1,maxPitch:a=.1,maxRoll:s=.1,yawFrequency:i=.1,pitchFrequency:l=.1,rollFrequency:u=.1,controls:d},m)=>{const f=o.useThree((e=>e.camera)),p=o.useThree((e=>e.controls)),h=M.useRef(e),v=M.useRef(f.rotation.clone()),[g]=M.useState((()=>new c.SimplexNoise)),[x]=M.useState((()=>new c.SimplexNoise)),[y]=M.useState((()=>new c.SimplexNoise)),w=()=>{(h.current<0||h.current>1)&&(h.current=h.current<0?0:1)};return M.useImperativeHandle(m,(()=>({getIntensity:()=>h.current,setIntensity:e=>{h.current=e,w()}})),[]),M.useEffect((()=>{const e=p||(null==d?void 0:d.current),t=()=>{v.current=f.rotation.clone()};return null==e||e.addEventListener("change",t),()=>{null==e||e.removeEventListener("change",t)}}),[d,p]),o.useFrame((({clock:e},o)=>{const c=Math.pow(h.current,2),d=n*c*g.noise(e.elapsedTime*i,1),m=a*c*x.noise(e.elapsedTime*l,1),p=s*c*y.noise(e.elapsedTime*u,1);f.rotation.set(v.current.x+m,v.current.y+d,v.current.z+p),t&&h.current>0&&(h.current-=r*o,w())})),null})),qt=M.forwardRef((({children:e,speed:t=1,rotationIntensity:r=1,floatIntensity:n=1,...a},s)=>{const i=M.useRef(null),l=M.useRef(1e4*Math.random());return o.useFrame((e=>{const o=l.current+e.clock.getElapsedTime();i.current.rotation.x=Math.cos(o/4*t)/8*r,i.current.rotation.y=Math.sin(o/4*t)/8*r,i.current.rotation.z=Math.sin(o/4*t)/20*r,i.current.position.y=Math.sin(o/4*t)/10*n})),M.createElement("group",a,M.createElement("group",{ref:R.default([i,s])},e))})),Xt={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"},Zt=e=>{return(t=e).current&&t.current.isScene?e.current:e;var t};function Yt(e){return e.map?M.createElement(Kt,e):e.children?M.createElement(Qt,e):M.createElement(Jt,e)}function Kt({scene:e,background:t=!1,map:r}){const n=o.useThree((e=>e.scene));return M.useLayoutEffect((()=>{if(r){const o=Zt(e||n),a=o.background,s=o.environment;return"only"!==t&&(o.environment=r),t&&(o.background=r),()=>{"only"!==t&&(o.environment=s),t&&(o.background=a)}}}),[e,r]),null}function Qt({children:e,near:t=1,far:r=1e3,resolution:a=256,frames:s=1,background:i=!1,scene:l,files:c,path:u,preset:d,extensions:m}){const f=o.useThree((e=>e.gl)),p=o.useThree((e=>e.scene)),h=M.useRef(null),[v]=M.useState((()=>new n.Scene)),g=M.useMemo((()=>{const e=new n.WebGLCubeRenderTarget(a);return e.texture.type=n.HalfFloatType,e}),[a]);M.useLayoutEffect((()=>{1===s&&h.current.update(f,v);const e=Zt(l||p),t=e.background,r=e.environment;return"only"!==i&&(e.environment=g.texture),i&&(e.background=g.texture),()=>{"only"!==i&&(e.environment=r),i&&(e.background=t)}}),[e,l]);let x=1;return o.useFrame((()=>{(s===1/0||x<s)&&(h.current.update(f,v),x++)})),M.createElement(M.Fragment,null,o.createPortal(M.createElement(M.Fragment,null,e,M.createElement("cubeCamera",{ref:h,args:[t,r,g]}),(c||d)&&M.createElement(Kt,{background:!0,files:c,preset:d,path:u,extensions:m})),v))}function Jt({background:e=!1,files:t=["/px.png","/nx.png","/py.png","/ny.png","/pz.png","/nz.png"],path:r="",preset:a,scene:s,extensions:i}){if(a){if(!(a in Xt))throw new Error("Preset must be one of: "+Object.keys(Xt).join(", "));t=Xt[a],r="https://market-assets.fra1.cdn.digitaloceanspaces.com/market-assets/hdris/"}const l=o.useThree((e=>e.scene)),u=Array.isArray(t),d=u?n.CubeTextureLoader:c.RGBELoader,m=o.useLoader(d,u?[t]:t,(e=>{e.setPath(r),null==e.setDataType||e.setDataType(n.FloatType),i&&i(e)})),f=u?m[0]:m;return f.mapping=u?n.CubeReflectionMapping:n.EquirectangularReflectionMapping,M.useLayoutEffect((()=>{const t=Zt(s||l),r=t.background,n=t.environment;return"only"!==e&&(t.environment=f),e&&(t.background=f),()=>{"only"!==e&&(t.environment=n),e&&(t.background=r)}}),[f,e,s]),null}const er=M.forwardRef((({scale:e=10,frames:t=1/0,opacity:r=1,width:n=1,height:a=1,blur:s=1,far:i=10,resolution:l=512,smooth:u=!0,color:d="#000000",...m},f)=>{const p=o.useThree((({scene:e})=>e)),h=o.useThree((({gl:e})=>e)),v=M.useRef(null);n*=Array.isArray(e)?e[0]:e||1,a*=Array.isArray(e)?e[1]:e||1;const[g,x,y,w,E,S,C]=M.useMemo((()=>{const e=new T.WebGLRenderTarget(l,l),t=new T.WebGLRenderTarget(l,l);t.texture.generateMipmaps=e.texture.generateMipmaps=!1;const r=new T.PlaneBufferGeometry(n,a).rotateX(Math.PI/2),o=new T.Mesh(r),s=new T.MeshDepthMaterial;s.depthTest=s.depthWrite=!1,s.onBeforeCompile=e=>{e.uniforms={...e.uniforms,ucolor:{value:new T.Color(d).convertSRGBToLinear()}},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, ( 1.0 - fragCoordZ ) * 1.0 );")};const i=new T.ShaderMaterial(c.HorizontalBlurShader),u=new T.ShaderMaterial(c.VerticalBlurShader);return u.depthTest=i.depthTest=!1,[e,r,s,o,i,u,t]}),[l,n,a,e]),R=M.useCallback((e=>{w.visible=!0,w.material=E,E.uniforms.tDiffuse.value=g.texture,E.uniforms.h.value=1*e/256,h.setRenderTarget(C),h.render(w,v.current),w.material=S,S.uniforms.tDiffuse.value=C.texture,S.uniforms.v.value=1*e/256,h.setRenderTarget(g),h.render(w,v.current),w.visible=!1}),[]);let _=0;return o.useFrame((()=>{if(v.current&&(t===1/0||_<t)){const e=p.background;p.background=null;const t=p.overrideMaterial;p.overrideMaterial=y,h.setRenderTarget(g),h.render(p,v.current),p.overrideMaterial=t,R(s),u&&R(.4*s),h.setRenderTarget(null),p.background=e,_++}})),M.createElement("group",b.default({"rotation-x":Math.PI/2},m,{ref:f}),M.createElement("mesh",{geometry:x,scale:[1,-1,1],rotation:[-Math.PI/2,0,0]},M.createElement("meshBasicMaterial",{map:g.texture,transparent:!0,opacity:r})),M.createElement("orthographicCamera",{ref:v,args:[-n/2,n/2,a/2,-a/2,0,i]}))})),tr={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 rr=e=>0===e?0:Math.pow(2,10*e-10);const nr=M.forwardRef((({fog:e=!1,colorStop:t=0,color:r="black",opacity:o=.5,...a},s)=>{const i=M.useMemo((()=>{const e=document.createElement("canvas");e.width=128,e.height=128;const o=e.getContext("2d"),a=o.createRadialGradient(e.width/2,e.height/2,0,e.width/2,e.height/2,e.width/2);return a.addColorStop(t,new n.Color(r).getStyle()),a.addColorStop(1,"rgba(0,0,0,0)"),o.fillStyle=a,o.fillRect(0,0,e.width,e.height),e}),[r,t]);return M.createElement("mesh",b.default({ref:s},a),M.createElement("planeGeometry",null),M.createElement("meshBasicMaterial",{transparent:!0,opacity:o,fog:e},M.createElement("canvasTexture",{attach:"map",args:[i]})))}));o.extend({MeshReflectorMaterial:vt});const or=M.forwardRef((({mixBlur:e=0,mixStrength:t=.5,resolution:r=256,blur:a=[0,0],args:s=[1,1],minDepthThreshold:i=.9,maxDepthThreshold:l=1,depthScale:c=0,depthToBlurRatioBias:u=.25,mirror:d=0,children:m,debug:f=0,distortion:p=1,mixContrast:h=1,distortionMap:v,...g},x)=>{M.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)),S=(a=Array.isArray(a)?a:[a,a])[0]+a[1]>0,T=M.useRef(null),[C]=M.useState((()=>new n.Plane)),[_]=M.useState((()=>new n.Vector3)),[P]=M.useState((()=>new n.Vector3)),[L]=M.useState((()=>new n.Vector3)),[D]=M.useState((()=>new n.Matrix4)),[z]=M.useState((()=>new n.Vector3(0,0,-1))),[B]=M.useState((()=>new n.Vector4)),[A]=M.useState((()=>new n.Vector3)),[F]=M.useState((()=>new n.Vector3)),[k]=M.useState((()=>new n.Vector4)),[U]=M.useState((()=>new n.Matrix4)),[j]=M.useState((()=>new n.PerspectiveCamera)),V=M.useCallback((()=>{if(P.setFromMatrixPosition(T.current.matrixWorld),L.setFromMatrixPosition(w.matrixWorld),D.extractRotation(T.current.matrixWorld),_.set(0,0,1),_.applyMatrix4(D),A.subVectors(P,L),A.dot(_)>0)return;A.reflect(_).negate(),A.add(P),D.extractRotation(w.matrixWorld),z.set(0,0,-1),z.applyMatrix4(D),z.add(L),F.subVectors(P,z),F.reflect(_).negate(),F.add(P),j.position.copy(A),j.up.set(0,1,0),j.up.applyMatrix4(D),j.up.reflect(_),j.lookAt(F),j.far=w.far,j.updateMatrixWorld(),j.projectionMatrix.copy(w.projectionMatrix),U.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),U.multiply(j.projectionMatrix),U.multiply(j.matrixWorldInverse),U.multiply(T.current.matrixWorld),C.setFromNormalAndCoplanarPoint(_,P),C.applyMatrix4(j.matrixWorldInverse),B.set(C.normal.x,C.normal.y,C.normal.z,C.constant);const e=j.projectionMatrix;k.x=(Math.sign(B.x)+e.elements[8])/e.elements[0],k.y=(Math.sign(B.y)+e.elements[9])/e.elements[5],k.z=-1,k.w=(1+e.elements[10])/e.elements[14],B.multiplyScalar(2/B.dot(k)),e.elements[2]=B.x,e.elements[6]=B.y,e.elements[10]=B.z+1,e.elements[14]=B.w}),[]),[I,O,W,N]=M.useMemo((()=>{const o={minFilter:n.LinearFilter,magFilter:n.LinearFilter,encoding:y.outputEncoding},s=new n.WebGLRenderTarget(r,r,o);s.depthBuffer=!0,s.depthTexture=new n.DepthTexture(r,r),s.depthTexture.format=n.DepthFormat,s.depthTexture.type=n.UnsignedShortType;const m=new n.WebGLRenderTarget(r,r,o);return[s,m,new ht({gl:y,resolution:r,width:a[0],height:a[1],minDepthThreshold:i,maxDepthThreshold:l,depthScale:c,depthToBlurRatioBias:u}),{mirror:d,textureMatrix:U,mixBlur:e,tDiffuse:s.texture,tDepth:s.depthTexture,tDiffuseBlur:m.texture,hasBlur:S,mixStrength:t,minDepthThreshold:i,maxDepthThreshold:l,depthScale:c,depthToBlurRatioBias:u,transparent:!0,debug:f,distortion:p,distortionMap:v,mixContrast:h,"defines-USE_BLUR":S?"":void 0,"defines-USE_DEPTH":c>0?"":void 0,"defines-USE_DISTORTION":v?"":void 0}]}),[y,a,U,r,d,S,e,t,i,l,c,u,f,p,v,h]);return o.useFrame((()=>{if(null==T||!T.current)return;T.current.visible=!1;const e=y.xr.enabled,t=y.shadowMap.autoUpdate;V(),y.xr.enabled=!1,y.shadowMap.autoUpdate=!1,y.setRenderTarget(I),y.state.buffers.depth.setMask(!0),y.autoClear||y.clear(),y.render(E,j),S&&W.render(y,I,O),y.xr.enabled=e,y.shadowMap.autoUpdate=t,T.current.visible=!0,y.setRenderTarget(null)})),M.createElement("mesh",b.default({ref:R.default([T,x])},g),M.createElement("planeBufferGeometry",{args:s}),m?m("meshReflectorMaterial",N):M.createElement("meshReflectorMaterial",N))}));class ar 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 sr=new n.Vector3,ir=M.forwardRef((({opacity:e=1,radiusTop:t,radiusBottom:r,depthBuffer:a,color:s="white",distance:i=5,angle:l=.15,attenuation:c=5,anglePower:u=5,...d},m)=>{const f=M.useRef(null),p=o.useThree((e=>e.size)),h=o.useThree((e=>e.camera)),v=o.useThree((e=>e.viewport.dpr)),[g]=M.useState((()=>new ar));t=void 0===t?.1:t,r=void 0===r?7*l:r,o.useFrame((()=>{g.uniforms.spotPosition.value.copy(f.current.getWorldPosition(sr)),f.current.lookAt(f.current.parent.target.getWorldPosition(sr))}));const x=M.useMemo((()=>{const e=new n.CylinderGeometry(t,r,i,128,64,!0);return e.applyMatrix4((new n.Matrix4).makeTranslation(0,-i/2,0)),e.applyMatrix4((new n.Matrix4).makeRotationX(-Math.PI/2)),e}),[l,i,t,r]);return M.createElement("spotLight",b.default({ref:m,angle:l,color:s,distance:i},d),M.createElement("mesh",{ref:f,geometry:x,raycast:()=>null},M.createElement("primitive",{object:g,attach:"material","uniforms-opacity-value":e,"uniforms-lightColor-value":s,"uniforms-attenuation-value":c,"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]})))})),lr=M.forwardRef((({args:e,map:t,toneMapped:r=!1,color:n="white",form:a="rect",intensity:s=1,scale:i=1,target:l,children:c,...u},d)=>{const m=M.useRef(null);return M.useLayoutEffect((()=>{c||u.material||(o.applyProps(m.current.material,{color:n}),m.current.material.color.multiplyScalar(s))}),[n,s,c,u.material]),M.useLayoutEffect((()=>{l&&m.current.lookAt(Array.isArray(l)?new T.Vector3(...l):l)}),[l]),i=Array.isArray(i)&&2===i.length?[i[0],i[1],1]:i,M.createElement("mesh",b.default({ref:R.default([m,d]),scale:i},u),"circle"===a?M.createElement("ringGeometry",{args:[0,1,64]}):"ring"===a?M.createElement("ringGeometry",{args:[.5,1,64]}):"rect"===a?M.createElement("planeGeometry",null):M.createElement(a,{args:e}),c||(u.material?null:M.createElement("meshBasicMaterial",{toneMapped:r,map:t,side:T.DoubleSide})))}));function cr(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 ur=M.forwardRef((({inclination:e=.6,azimuth:t=.1,distance:r=1e3,mieCoefficient:o=.005,mieDirectionalG:a=.8,rayleigh:s=.5,turbidity:i=10,sunPosition:l=cr(e,t),...u},d)=>{const m=M.useMemo((()=>(new n.Vector3).setScalar(r)),[r]),[f]=M.useState((()=>new c.Sky));return M.createElement("primitive",b.default({object:f,ref:d,"material-uniforms-mieCoefficient-value":o,"material-uniforms-mieDirectionalG-value":a,"material-uniforms-rayleigh-value":s,"material-uniforms-sunPosition-value":l,"material-uniforms-turbidity-value":i,scale:m},u))}));class dr 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 mr=e=>(new n.Vector3).setFromSpherical(new n.Spherical(e,Math.acos(1-2*Math.random()),2*Math.random()*Math.PI)),fr=M.forwardRef((({radius:e=100,depth:t=50,count:r=5e3,saturation:a=0,factor:s=4,fade:i=!1},l)=>{const c=M.useRef(),[u,d,m]=M.useMemo((()=>{const o=[],i=[],l=Array.from({length:r},(()=>(.5+.5*Math.random())*s)),c=new n.Color;let u=e+t;const d=t/r;for(let e=0;e<r;e++)u-=d*Math.random(),o.push(...mr(u).toArray()),c.setHSL(e/r,a,.9),i.push(c.r,c.g,c.b);return[new Float32Array(o),new Float32Array(i),new Float32Array(l)]}),[r,t,s,e,a]);o.useFrame((e=>c.current&&(c.current.uniforms.time.value=e.clock.getElapsedTime())));const[f]=M.useState((()=>new dr));return M.createElement("points",{ref:l},M.createElement("bufferGeometry",null,M.createElement("bufferAttribute",{attach:"attributes-position",args:[u,3]}),M.createElement("bufferAttribute",{attach:"attributes-color",args:[d,3]}),M.createElement("bufferAttribute",{attach:"attributes-size",args:[m,1]})),M.createElement("primitive",{ref:c,object:f,attach:"material",blending:n.AdditiveBlending,"uniforms-fade-value":i,transparent:!0,vertexColors:!0}))}));const pr=new T.Matrix4,hr=new T.Matrix4,vr=[],gr=new T.Mesh;class xr extends T.Group{constructor(){super(),this.color=new T.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;gr.geometry=r.geometry;const n=r.matrixWorld;let o=r.userData.instances.indexOf(this.instanceKey);if(!(-1===o||o>r.count)){r.getMatrixAt(o,pr),hr.multiplyMatrices(n,pr),gr.matrixWorld=hr,gr.raycast(e,vr);for(let e=0,r=vr.length;e<r;e++){const r=vr[e];r.instanceId=o,r.object=this,t.push(r)}vr.length=0}}}let yr,wr;const Er=M.createContext(null),br=new T.Matrix4,Mr=new T.Vector3;new T.Color;const Sr=M.forwardRef((({children:e,range:t,limit:r=1e3,...n},a)=>{const s=M.useRef(null),[i,l]=M.useState([]),[[c,u,d]]=M.useState((()=>[new Float32Array(3*r),Float32Array.from({length:3*r},(()=>1)),Float32Array.from({length:r},(()=>1))]));M.useLayoutEffect((()=>{s.current.geometry.drawRange.count=Math.min(r,void 0!==t?t:r,i.length)}),[i,t]),M.useEffect((()=>{s.current.geometry.attributes.position.needsUpdate=!0})),o.useFrame((()=>{for(s.current.updateMatrix(),s.current.updateMatrixWorld(),br.copy(s.current.matrixWorld).invert(),yr=0;yr<i.length;yr++)wr=i[yr].current,Mr.toArray(c,3*yr),s.current.geometry.attributes.position.needsUpdate=!0,wr.matrixWorldNeedsUpdate=!0,wr.color.toArray(u,3*yr),s.current.geometry.attributes.color.needsUpdate=!0,d.set([wr.size],yr),s.current.geometry.attributes.size.needsUpdate=!0}));const m=M.useMemo((()=>{const e={};for(yr=0;yr<i.length;yr++){var t;Object.assign(e,null==(t=i[yr].current)?void 0:t.__r3f.handlers)}return Object.keys(e).reduce(((e,t)=>({...e,[t]:e=>{var r,n,o;const a=null==(r=i[e.index])?void 0:r.current;return null==a||null==(n=a.__r3f)||null==(o=n.handlers)?void 0:o[t]({...e,object:a})}})),{})}),[e,i]),f=M.useMemo((()=>({subscribe:e=>(l((t=>[...t,e])),()=>l((t=>t.filter((t=>t.current!==e.current)))))})),[]);return M.createElement("points",b.default({matrixAutoUpdate:!1,ref:R.default([a,s])},m,n),M.createElement("bufferGeometry",null,M.createElement("bufferAttribute",{attach:"attributes-position",count:c.length/3,array:c,itemSize:3,usage:T.DynamicDrawUsage}),M.createElement("bufferAttribute",{attach:"attributes-color",count:u.length/3,array:u,itemSize:3,usage:T.DynamicDrawUsage}),M.createElement("bufferAttribute",{attach:"attributes-size",count:d.length,array:d,itemSize:1,usage:T.DynamicDrawUsage})),M.createElement(Er.Provider,{value:f},e))})),Tr=M.forwardRef((({children:e,...t},r)=>{M.useMemo((()=>o.extend({Position:xr})),[]);const n=M.useRef(),{subscribe:a}=M.useContext(Er);return M.useLayoutEffect((()=>a(n)),[]),M.createElement("position",b.default({ref:R.default([r,n])},t),e)})),Cr=M.forwardRef((({children:e,positions:t,colors:r,sizes:n,stride:a=3,...s},i)=>{const l=M.useRef(null);return o.useFrame((()=>{const e=l.current.geometry.attributes;e.position.needsUpdate=!0,r&&(e.color.needsUpdate=!0),n&&(e.size.needsUpdate=!0)})),M.createElement("points",b.default({ref:R.default([i,l])},s),M.createElement("bufferGeometry",null,M.createElement("bufferAttribute",{attach:"attributes-position",count:t.length/a,array:t,itemSize:a,usage:T.DynamicDrawUsage}),r&&M.createElement("bufferAttribute",{attach:"attributes-color",count:r.length/a,array:r,itemSize:3,usage:T.DynamicDrawUsage}),n&&M.createElement("bufferAttribute",{attach:"attributes-size",count:n.length/a,array:n,itemSize:1,usage:T.DynamicDrawUsage})),e)})),Rr=M.forwardRef(((e,t)=>e.positions instanceof Float32Array?M.createElement(Cr,b.default({},e,{ref:t})):M.createElement(Sr,b.default({},e,{ref:t}))));let _r,Pr;const Lr=M.createContext(null),Dr=new T.Matrix4,zr=new T.Matrix4,Br=new T.Matrix4;new T.Color;const Ar=new T.Vector3,Fr=new T.Quaternion,kr=new T.Vector3,Ur=M.forwardRef((({context:e,children:t,...r},n)=>{M.useMemo((()=>o.extend({Position:xr})),[]);const a=M.useRef(),{subscribe:s,getParent:i}=M.useContext(e||Lr);return M.useLayoutEffect((()=>s(a)),[]),M.createElement("position",b.default({instance:i(),instanceKey:a,ref:R.default([n,a])},r),t)})),jr=M.forwardRef((({children:e,range:t,limit:r=1e3,frames:n=1/0,...a},s)=>{const[{context:i,instance:l}]=M.useState((()=>{const e=M.createContext(null);return{context:e,instance:M.forwardRef(((t,r)=>M.createElement(Ur,b.default({context:e},t,{ref:r}))))}})),c=M.useRef(null),[u,d]=M.useState([]),[[m,f]]=M.useState((()=>{const e=new Float32Array(16*r);for(_r=0;_r<r;_r++)Br.identity().toArray(e,16*_r);return[e,new Float32Array([...new Array(3*r)].map((()=>1)))]}));M.useLayoutEffect((()=>{c.current.count=c.current.instanceMatrix.updateRange.count=c.current.instanceColor.updateRange.count=Math.min(r,void 0!==t?t:r,u.length)}),[u,t]),M.useEffect((()=>{c.current.instanceMatrix.needsUpdate=!0}));let p=0;o.useFrame((()=>{if(n===1/0||p<n){for(c.current.updateMatrix(),c.current.updateMatrixWorld(),Dr.copy(c.current.matrixWorld).invert(),_r=0;_r<u.length;_r++)Pr=u[_r].current,Pr.matrixWorld.decompose(Ar,Fr,kr),zr.compose(Ar,Fr,kr).premultiply(Dr),zr.toArray(m,16*_r),c.current.instanceMatrix.needsUpdate=!0,Pr.color.toArray(f,3*_r),c.current.instanceColor.needsUpdate=!0;p++}}));const h=M.useMemo((()=>({getParent:()=>c,subscribe:e=>(d((t=>[...t,e])),()=>d((t=>t.filter((t=>t.current!==e.current)))))})),[]);return M.createElement("instancedMesh",b.default({userData:{instances:u},matrixAutoUpdate:!1,ref:R.default([s,c]),args:[null,null,0],raycast:()=>null},a),M.createElement("instancedBufferAttribute",{attach:"instanceMatrix",count:m.length/16,array:m,itemSize:16,usage:T.DynamicDrawUsage}),M.createElement("instancedBufferAttribute",{attach:"instanceColor",count:f.length/3,array:f,itemSize:3,usage:T.DynamicDrawUsage}),"function"==typeof e?M.createElement(i.Provider,{value:h},e(l)):M.createElement(Lr.Provider,{value:h},e))}));const Vr=M.createContext(null),Ir=e=>e instanceof T.Vector3?e.toArray():e,Or=M.forwardRef(((e,t)=>{const{limit:r=1e3,lineWidth:n=1,children:a,...s}=e,[i,l]=M.useState([]),[u]=M.useState((()=>new c.Line2)),[d]=M.useState((()=>new c.LineMaterial)),[m]=M.useState((()=>new c.LineSegmentsGeometry)),[f]=M.useState((()=>new T.Vector2(512,512))),[p]=M.useState((()=>Array(6*r).fill(0))),[h]=M.useState((()=>Array(6*r).fill(0))),v=M.useMemo((()=>({subscribe:e=>(l((t=>[...t,e])),()=>l((t=>t.filter((t=>t.current!==e.current)))))})),[]);return o.useFrame((()=>{for(let o=0;o<r;o++){var e;const r=null==(e=i[o])?void 0:e.current,a=r?Ir(r.start):[0,0,0],s=r?Ir(r.end):[0,0,0],l=r?(n=r.color)instanceof T.Color?n.toArray():n:[1,1,1];for(var t=0;t<3;t++)p[6*o+t]=a[t],p[6*o+t+3]=s[t],h[6*o+t]=l[t],h[6*o+t+3]=l[t]}var n;m.setColors(h),m.setPositions(p),u.computeLineDistances()})),M.createElement("primitive",{object:u,ref:t},M.createElement("primitive",{object:m,attach:"geometry"}),M.createElement("primitive",b.default({object:d,attach:"material",vertexColors:!0,resolution:f,linewidth:n},s)),M.createElement(Vr.Provider,{value:v},a))}));class Wr{constructor(){this.color=new T.Color("white"),this.start=new T.Vector3(0,0,0),this.end=new T.Vector3(0,0,0)}}const Nr=M.forwardRef(((e,t)=>{const r=M.useContext(Vr);if(!r)throw"Segment must used inside Segments component.";const n=M.useRef();return M.useMemo((()=>o.extend({SegmentObject:Wr})),[]),M.useLayoutEffect((()=>r.subscribe(n)),[]),M.createElement("segmentObject",b.default({ref:R.default([n,t])},e))})),Gr=M.forwardRef((({children:e,distances:t,...r},n)=>{const a=M.useRef(null);return M.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)})),M.createElement("lOD",b.default({ref:R.default([a,n])},r),e)}));const Hr=new n.Matrix4,$r=new n.Ray,qr=new n.Sphere,Xr=new n.Vector3;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)),s=o.useThree((e=>e.setDpr));return M.useEffect((()=>{const n=t.domElement;return()=>{r&&s(a),e&&n&&(n.style.imageRendering="auto")}}),[]),M.useEffect((()=>{s(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 M.useEffect((()=>{const r=e().events.enabled;return()=>t({enabled:r})}),[]),M.useEffect((()=>t({enabled:1===r})),[r]),null},exports.ArcballControls=Te,exports.Backdrop=function({children:e,floor:t=.25,segments:r=20,receiveShadow:n,...o}){const a=M.useRef(null);return M.useLayoutEffect((()=>{let e=0;const n=r/r/2,o=a.current.attributes.position;for(let a=0;a<r+1;a++)for(let s=0;s<r+1;s++)o.setXYZ(e++,a/r-n+(0===a?-t:0),s/r-n,rr(a/r));o.needsUpdate=!0,a.current.computeVertexNormals()}),[r,t]),M.createElement("group",o,M.createElement("mesh",{receiveShadow:n,rotation:[-Math.PI/2,0,Math.PI/2]},M.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=J,exports.Bounds=function({children:e,damping:t=6,fit:r,clip:n,observe:a,margin:s=1.2,eps:i=.01,onFit:l}){const c=M.useRef(null),{camera:u,invalidate:d,size:m,controls:f}=o.useThree(),p=f,h=M.useRef(l);function v(e,t){return Math.abs(e.x-t.x)<i&&Math.abs(e.y-t.y)<i&&Math.abs(e.z-t.z)<i}function g(e,t,r,n){e.x=T.MathUtils.damp(e.x,t.x,r,n),e.y=T.MathUtils.damp(e.y,t.y,r,n),e.z=T.MathUtils.damp(e.z,t.z,r,n)}h.current=l;const[x]=M.useState((()=>({animating:!1,focus:new T.Vector3,camera:new T.Vector3,zoom:1}))),[y]=M.useState((()=>({focus:new T.Vector3,camera:new T.Vector3,zoom:1}))),[w]=M.useState((()=>new T.Box3)),E=M.useMemo((()=>{function e(){const e=w.getSize(new T.Vector3),t=w.getCenter(new T.Vector3),r=Math.max(e.x,e.y,e.z),n=Gt(u)?4*r:r/(2*Math.atan(Math.PI*u.fov/360)),o=Gt(u)?4*r:n/u.aspect,a=s*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||c.current;e.updateWorldMatrix(!0,!0),w.setFromObject(e)}var r;if(w.isEmpty()){const e=u.position.length()||10;w.setFromCenterAndSize(new T.Vector3,new T.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),Gt(u)){x.zoom=u.zoom;let e=0,n=0;const o=[new T.Vector3(w.min.x,w.min.y,w.min.z),new T.Vector3(w.min.x,w.max.y,w.min.z),new T.Vector3(w.min.x,w.min.y,w.max.z),new T.Vector3(w.min.x,w.max.y,w.max.z),new T.Vector3(w.max.x,w.max.y,w.max.z),new T.Vector3(w.max.x,w.max.y,w.min.z),new T.Vector3(w.max.x,w.min.y,w.max.z),new T.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,i=(u.right-u.left)/n;y.zoom=Math.min(a,i)/s,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,s,t,d]);M.useLayoutEffect((()=>{if(p){const e=()=>x.animating=!1;return p.addEventListener("start",e),()=>p.removeEventListener("start",e)}}),[p]);const b=M.useRef(0);return M.useLayoutEffect((()=>{(a||0==b.current++)&&(E.refresh(),r&&E.fit(),n&&E.clip())}),[m,n,r,a]),o.useFrame(((e,r)=>{if(x.animating){if(g(x.focus,y.focus,t,r),g(x.camera,y.camera,t,r),x.zoom=T.MathUtils.damp(x.zoom,y.zoom,t,r),u.position.copy(x.camera),Gt(u)&&(u.zoom=x.zoom,u.updateProjectionMatrix()),p?(p.target.copy(x.focus),p.update()):u.lookAt(x.focus),d(),Gt(u)&&!(Math.abs(x.zoom-y.zoom)<i))return;if(!Gt(u)&&!v(x.camera,y.camera))return;if(p&&!v(x.focus,y.focus))return;x.animating=!1}})),M.createElement("group",{ref:c},M.createElement(Ht.Provider,{value:E},e))},exports.Box=bt,exports.CameraShake=$t,exports.Center=Nt,exports.Circle=Mt,exports.Clone=ge,exports.Cloud=function({opacity:e=.5,speed:t=.4,width:r=10,depth:n=1.5,segments:a=20,texture:s="https://rawcdn.githack.com/pmndrs/drei-assets/9225a9f1fbd449d9411125c2f419b843d0308c9f/cloud.png",color:i="#ffffff",depthTest:l=!0,...c}){const u=M.useRef(),d=ce(s),m=M.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=u.current)?void 0:t.children.forEach(((t,r)=>{t.children[0].rotation.z+=m[r].rotation,t.children[0].scale.setScalar(m[r].scale+(1+Math.sin(e.clock.getElapsedTime()/10))/2*r/10)}))})),M.createElement("group",c,M.createElement("group",{position:[0,0,a/2*n],ref:u},m.map((({x:t,y:r,scale:o,density:a},s)=>M.createElement(J,{key:s,position:[t,r,-s*n]},M.createElement(Rt,{scale:o,rotation:[0,0,0]},M.createElement("meshStandardMaterial",{map:d,transparent:!0,opacity:o/6*a*e,depthTest:l,color:i})))))))},exports.ComputedAttribute=({compute:e,name:t,...r})=>{const[o]=M.useState((()=>new n.BufferAttribute(new Float32Array(0),1))),a=M.useRef(null);return M.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]),M.createElement("primitive",b.default({ref:a,object:o,attach:`attributes-${t}`},r))},exports.Cone=St,exports.ContactShadows=er,exports.CubeCamera=function({children:e,fog:t,frames:r=1/0,resolution:a=256,near:s=1,far:i=1e3,...l}){const c=M.useRef(),[u,d]=M.useState(null),m=o.useThree((({scene:e})=>e)),f=o.useThree((({gl:e})=>e)),p=M.useMemo((()=>{const e=new n.WebGLCubeRenderTarget(a);return e.texture.type=n.HalfFloatType,e}),[a]);let h=0;return o.useFrame((()=>{if(u&&c.current&&(r===1/0||h<r)){c.current.traverse((e=>e.visible=!1));const e=m.fog;m.fog=t||e,u.update(f,m),m.fog=e,c.current.traverse((e=>e.visible=!0)),h++}})),M.createElement("group",l,M.createElement("cubeCamera",{ref:d,args:[s,i,p]}),M.createElement("group",{ref:c},e(p.texture)))},exports.CubicBezierLine=ne,exports.CurveModifier=ct,exports.CycleRaycast=function({onChanged:e,portal:t,preventDefault:r=!0,scroll:n=!0,keyCode:a=9}){const s=M.useRef(0),i=o.useThree((e=>e.setEvents)),l=o.useThree((e=>e.get)),c=o.useThree((e=>e.gl));return M.useEffect((()=>{var o;let u,d=[];const m=l().events.filter,f=null!==(o=null==t?void 0:t.current)&&void 0!==o?o:c.domElement.parentNode,p=()=>f&&e&&e(d,Math.round(s.current)%d.length);i({filter:(e,t)=>{let r=[...e];r.length===d.length&&d.every((e=>r.map((e=>e.object.uuid)).includes(e.object.uuid)))||(s.current=0,d=r,p()),m&&(r=m(r,t));for(let e=0;e<Math.round(s.current)%r.length;e++){const e=r.shift();r=[...r,e]}return r}});const h=e=>{var t,r;s.current=e(s.current),null==(t=l().events.handlers)||t.onPointerCancel(void 0),null==(r=l().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),()=>{i({filter:m}),void 0!==a&&document.removeEventListener("keydown",v),n&&document.removeEventListener("wheel",g),document.removeEventListener("pointermove",x)}}),[c,l,i,r,n,a]),null},exports.Cylinder=Tt,exports.Detailed=Gr,exports.DeviceOrientationControls=we,exports.Dodecahedron=kt,exports.Edges=function({userData:e,children:t,geometry:r,threshold:n=15,color:o="black",...a}){const s=M.useRef(null);return M.useLayoutEffect((()=>{const e=s.current.parent;if(e){const t=r||e.geometry;t===s.current.userData.currentGeom&&n===s.current.userData.currentThreshold||(s.current.userData.currentGeom=t,s.current.userData.currentThreshold=n,s.current.geometry=new T.EdgesGeometry(t,n))}})),M.createElement("lineSegments",b.default({ref:s,raycast:()=>null},a),t||M.createElement("lineBasicMaterial",{color:o}))},exports.Effects=se,exports.Environment=Yt,exports.EnvironmentCube=Jt,exports.EnvironmentMap=Kt,exports.EnvironmentPortal=Qt,exports.Extrude=Ut,exports.FirstPersonControls=_e,exports.Float=qt,exports.FlyControls=Ee,exports.GizmoHelper=({alignment:e="bottom-right",margin:t=[80,80],renderPriority:r=0,autoClear:a=!0,onUpdate:s,onTarget:i,children:l})=>{const c=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=M.useRef(),v=M.useRef(),g=M.useRef(null),[x]=M.useState((()=>new n.Scene)),y=M.useRef(!1),w=M.useRef(0),E=M.useRef(new n.Vector3(0,0,0)),b=M.useCallback((e=>{y.current=!0,(d||i)&&(E.current=(null==d?void 0:d.target)||(null==i?void 0:i())),w.current=u.position.distanceTo(Ue),Fe.copy(u.quaternion),je.copy(e).multiplyScalar(w.current).add(Ue),Be.lookAt(je),ke.copy(Be.quaternion),p()}),[d,u,i,p]);M.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(Fe.angleTo(ke)<.01)y.current=!1;else{const e=t*ze;Fe.rotateTowards(ke,e),u.position.set(0,0,1).applyQuaternion(Fe).multiplyScalar(w.current).add(E.current),u.up.set(0,1,0).applyQuaternion(Fe).normalize(),u.quaternion.copy(Fe),s?s():d&&d.update(),p()}Ae.copy(u.matrix).invert(),null==(r=v.current)||r.quaternion.setFromRotationMatrix(Ae),a&&(m.autoClear=!1),m.clearDepth(),m.render(x,g.current)}}),r);const S=Pe(g),T=M.useMemo((()=>({tweenCamera:b,raycast:S})),[b]),[C,R]=t,_=e.endsWith("-left")?-c.width/2+C:c.width/2-C,P=e.startsWith("top-")?c.height/2-R:-c.height/2+R;return o.createPortal(M.createElement(Le.Provider,{value:T},M.createElement(xe,{ref:g,position:[0,0,200]}),M.createElement("group",{ref:v,position:[_,P,0]},l)),x)},exports.GizmoViewcube=e=>M.createElement("group",{scale:[60,60,60]},M.createElement(Ye,e),qe.map(((t,r)=>M.createElement(Ke,b.default({key:r,position:t,dimensions:Xe[r]},e)))),He.map(((t,r)=>M.createElement(Ke,b.default({key:r,position:t,dimensions:$e},e)))),M.createElement("ambientLight",{intensity:.5}),M.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=["#ff3653","#0adb50","#2c8fdf"],axisHeadScale:a=1,axisScale:s,labels:i=["X","Y","Z"],labelColor:l="#000",onClick:c,...u})=>{const[d,m,f]=o,{tweenCamera:p,raycast:h}=De(),v={font:n,disabled:r,labelColor:l,raycast:h,onClick:c,axisHeadScale:a,onPointerDown:r?void 0:e=>{p(e.object.position),e.stopPropagation()}};return M.createElement("group",b.default({scale:40},u),M.createElement(Qe,{color:d,rotation:[0,0,0],scale:s}),M.createElement(Qe,{color:m,rotation:[0,0,Math.PI/2],scale:s}),M.createElement(Qe,{color:f,rotation:[0,-Math.PI/2,0],scale:s}),!t&&M.createElement(M.Fragment,null,M.createElement(Je,b.default({arcStyle:d,position:[1,0,0],label:i[0]},v)),M.createElement(Je,b.default({arcStyle:m,position:[0,1,0],label:i[1]},v)),M.createElement(Je,b.default({arcStyle:f,position:[0,0,1],label:i[2]},v)),!e&&M.createElement(M.Fragment,null,M.createElement(Je,b.default({arcStyle:d,position:[-1,0,0]},v)),M.createElement(Je,b.default({arcStyle:m,position:[0,-1,0]},v)),M.createElement(Je,b.default({arcStyle:f,position:[0,0,-1]},v)))),M.createElement("ambientLight",{intensity:.5}),M.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)),s=M.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 s=e.length;for(;s--;)a.addColorStop(e[s],t[s]);o.fillStyle=a,o.fillRect(0,0,16,r);const i=new T.Texture(n);return i.needsUpdate=!0,i}),[e]);return M.useEffect((()=>()=>{s.dispose()}),[s]),M.createElement("primitive",b.default({object:s,attach:"map",encoding:a.outputEncoding},n))},exports.Html=W,exports.Icosahedron=At,exports.Image=de,exports.Instance=Ur,exports.Instances=jr,exports.IsObject=le,exports.Lathe=jt,exports.Lightformer=lr,exports.Line=ee,exports.Loader=function({containerStyles:e,innerStyles:t,barStyles:r,dataStyles:n,dataInterpolation:o=H,initialState:a=(e=>e)}){const{active:s,progress:i}=G(),l=M.useRef(0),c=M.useRef(0),u=M.useRef(null),[d,m]=M.useState(a(s));M.useEffect((()=>{let e;return s!==d&&(e=setTimeout((()=>m(s)),300)),()=>clearTimeout(e)}),[d,s]);const f=M.useCallback((()=>{u.current&&(l.current+=(i-l.current)/2,(l.current>.95*i||100===i)&&(l.current=i),u.current.innerText=o(l.current),l.current<i&&(c.current=requestAnimationFrame(f)))}),[o,i]);return M.useEffect((()=>(f(),()=>cancelAnimationFrame(c.current))),[f]),d?M.createElement("div",{style:{...$.container,opacity:s?1:0,...e}},M.createElement("div",null,M.createElement("div",{style:{...$.inner,...t}},M.createElement("div",{style:{...$.bar,transform:`scaleX(${i/100})`,...r}}),M.createElement("span",{ref:u,style:{...$.data,...n}})))):null},exports.MapControls=be,exports.Merged=function({meshes:e,children:t,...r}){const n=Array.isArray(e);if(!n)for(const t of Object.keys(e))e[t].isMesh||delete e[t];return M.createElement(z.default,{components:(n?e:Object.values(e)).map((({geometry:e,material:t})=>M.createElement(jr,b.default({key:e.uuid,geometry:e,material:t},r))))},(r=>n?t(...r):t(Object.keys(e).filter((t=>e[t].isMesh)).reduce(((e,t,n)=>({...e,[t]:r[n]})),{}))))},exports.MeshDistortMaterial=dt,exports.MeshReflectorMaterial=gt,exports.MeshWobbleMaterial=ft,exports.Octahedron=Ft,exports.OrbitControls=Me,exports.OrthographicCamera=xe,exports.PerspectiveCamera=ye,exports.Plane=Rt,exports.Point=Tr,exports.PointMaterial=yt,exports.PointMaterialImpl=xt,exports.PointerLockControls=Re,exports.Points=Rr,exports.PointsBuffer=Cr,exports.Polyhedron=Bt,exports.PositionalAudio=oe,exports.Preload=function({all:e,scene:t,camera:r}){const a=o.useThree((({gl:e})=>e)),s=o.useThree((({camera:e})=>e)),i=o.useThree((({scene:e})=>e));return M.useLayoutEffect((()=>{const o=[];e&&(t||i).traverse((e=>{!1===e.visible&&(o.push(e),e.visible=!0)})),a.compile(t||i,r||s);const l=new n.WebGLCubeRenderTarget(128);new n.CubeCamera(.01,1e5,l).update(a,t||i),l.dispose(),o.forEach((e=>e.visible=!1))}),[]),null},exports.PresentationControls=function({snap:e,global:t,cursor:r=!0,children:a,speed:s=1,rotation:c=[0,0,0],zoom:u=1,polar:d=[0,Math.PI/2],azimuth:m=[-1/0,1/0],config:f={mass:1,tension:170,friction:26}}){const{size:p,gl:h}=o.useThree(),v=M.useMemo((()=>[c[0]+d[0],c[0]+d[1]]),[c[0],d[0],d[1]]),g=M.useMemo((()=>[c[1]+m[0],c[1]+m[1]]),[c[1],m[0],m[1]]),x=M.useMemo((()=>[n.MathUtils.clamp(c[0],...v),n.MathUtils.clamp(c[1],...g),c[2]]),[c[0],c[1],c[2],v,g]),[y,w]=i.useSpring((()=>({scale:1,rotation:x,config:f})));M.useEffect((()=>{w.start({scale:1,rotation:x,config:f})}),[x]),M.useEffect((()=>{t&&r&&(h.domElement.style.cursor="grab")}),[t,r,h.domElement]);const E=l.useGesture({onHover:({last:e})=>{r&&!t&&(h.domElement.style.cursor=e?"auto":"grab")},onDrag:({down:t,delta:[o,a],memo:[i,l]=y.rotation.animation.to||x})=>{r&&(h.domElement.style.cursor=t?"grabbing":"grab"),o=n.MathUtils.clamp(l+o/p.width*Math.PI*s,...g),a=n.MathUtils.clamp(i+a/p.height*Math.PI*s,...v);const c=e&&!t&&"boolean"!=typeof e?e:f;return w.start({scale:t&&a>v[1]/2?u:1,rotation:e&&!t?x:[a,o,0],config:e=>"scale"===e?{...c,friction:3*c.friction}:c}),[a,o]}},{target:t?h.domElement:void 0});return M.createElement(i.a.group,b.default({},null==E?void 0:E(),y),a)},exports.QuadraticBezierLine=re,exports.Reflector=or,exports.Ring=zt,exports.RoundedBox=It,exports.Sampler=({children:e,weight:t,transform:r,instances:o,mesh:a,...s})=>{const i=M.useRef(null),l=M.useRef(null),u=M.useRef(null);return M.useEffect((()=>{var e,t;l.current=null!==(e=null==o?void 0:o.current)&&void 0!==e?e:i.current.children.find((e=>e.hasOwnProperty("instanceMatrix"))),u.current=null!==(t=null==a?void 0:a.current)&&void 0!==t?t:i.current.children.find((e=>"Mesh"===e.type))}),[e,null==a?void 0:a.current,null==o?void 0:o.current]),M.useEffect((()=>{if(void 0===u.current)return;if(void 0===l.current)return;const e=new c.MeshSurfaceSampler(u.current);t&&e.setWeightAttribute(t),e.build();const o=new n.Vector3,a=new n.Vector3,s=new n.Color,i=new n.Object3D;u.current.updateMatrixWorld(!0);for(let t=0;t<l.current.count;t++)e.sample(o,a,s),"function"==typeof r?r({dummy:i,sampledMesh:u.current,position:o,normal:a,color:s},t):i.position.copy(o),i.updateMatrix(),l.current.setMatrixAt(t,i.matrix);l.current.instanceMatrix.needsUpdate=!0}),[e,null==a?void 0:a.current,null==o?void 0:o.current]),M.createElement("group",b.default({ref:i},s),e)},exports.ScreenQuad=Wt,exports.Scroll=K,exports.ScrollControls=function({eps:e=1e-5,enabled:t=!0,infinite:r,horizontal:n,pages:a=1,distance:s=1,damping:i=4,style:l={},children:c}){const{get:u,setEvents:d,gl:m,size:f,invalidate:p,events:h,raycaster:v}=o.useThree(),[g]=M.useState((()=>document.createElement("div"))),[x]=M.useState((()=>document.createElement("div"))),[y]=M.useState((()=>document.createElement("div"))),w=m.domElement.parentNode,E=M.useRef(0),b=M.useMemo((()=>{const t={el:g,eps:e,fill:x,fixed:y,horizontal:n,damping:i,offset:0,delta:0,scroll:E,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,i,n,a]);M.useEffect((()=>{g.style.position="absolute",g.style.width="100%",g.style.height="100%",g.style[n?"overflowX":"overflowY"]="auto",g.style[n?"overflowY":"overflowX"]="hidden",g.style.top="0px",g.style.left="0px";for(const e in l)g.style[e]=l[e];y.style.position="sticky",y.style.top="0px",y.style.left="0px",y.style.width="100%",y.style.height="100%",y.style.overflow="hidden",g.appendChild(y),x.style.height=n?"100%":a*s*100+"%",x.style.width=n?a*s*100+"%":"100%",x.style.pointerEvents="none",g.appendChild(x),w.appendChild(g),g[n?"scrollLeft":"scrollTop"]=1;const e=h.connected||m.domElement;requestAnimationFrame((()=>null==h.connect?void 0:h.connect(g)));const t=u().events.compute;return d({compute(e,t){const r=e.clientX-e.target.offsetLeft,n=e.clientX-e.target.offsetLeft;t.pointer.set(r/t.size.width*2-1,-n/t.size.height*2+1),t.raycaster.setFromCamera(t.pointer,t.camera)}}),()=>{w.removeChild(g),d({compute:t}),null==h.connect||h.connect(e)}}),[a,s,n,g,x,y,w]),M.useEffect((()=>{const e=f[n?"width":"height"],o=g[n?"scrollWidth":"scrollHeight"],a=o-e;let s=0,i=!0,l=!0;const c=()=>{if(t&&!l&&(p(),s=g[n?"scrollLeft":"scrollTop"],E.current=s/a,r)){if(!i)if(s>=a){const e=1-b.offset;g[n?"scrollLeft":"scrollTop"]=1,E.current=b.offset=-e,i=!0}else if(s<=0){const e=1+b.offset;g[n?"scrollLeft":"scrollTop"]=o,E.current=b.offset=e,i=!0}i&&setTimeout((()=>i=!1),40)}};g.addEventListener("scroll",c,{passive:!0}),requestAnimationFrame((()=>l=!1));const u=e=>g.scrollLeft+=e.deltaY/2;return n&&g.addEventListener("wheel",u,{passive:!0}),()=>{g.removeEventListener("scroll",c),n&&g.removeEventListener("wheel",u)}}),[g,f,r,b,p,n,t]);let S=0;return o.useFrame(((t,r)=>{b.offset=T.MathUtils.damp(S=b.offset,E.current,i,r),b.delta=T.MathUtils.damp(b.delta,Math.abs(S-b.offset),i,r),b.delta>e&&p()})),M.createElement(q.Provider,{value:b},c)},exports.Segment=Nr,exports.Segments=Or,exports.Select=function({box:e,multiple:t,children:r,onChange:n,border:a="1px solid #55aaff",backgroundColor:s="rgba(75, 160, 255, 0.1)",filter:i=(e=>e),...l}){const{setEvents:u,camera:d,raycaster:m,gl:f,controls:p,size:h,get:v}=o.useThree(),[g,x]=M.useState(!1),[y,w]=M.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]),[]);M.useEffect((()=>{null==n||n(y)}),[y]);const E=M.useCallback((e=>{e.stopPropagation(),w({object:i([e.object])[0],shift:t&&e.shiftKey})}),[]),S=M.useCallback((e=>!g&&w({})),[g]),C=M.useRef(null);return M.useEffect((()=>{if(!e||!t)return;const r=new c.SelectionBox(d,C.current),n=document.createElement("div");n.style.pointerEvents="none",n.style.border=a,n.style.backgroundColor=s,n.style.position="fixed";const o=new T.Vector2,l=new T.Vector2,m=new T.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),u({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 M=[];function S(e){if(y){!function(e){m.x=Math.max(o.x,e.clientX),m.y=Math.max(o.y,e.clientY),l.x=Math.min(o.x,e.clientX),l.y=Math.min(o.y,e.clientY),n.style.left=`${l.x}px`,n.style.top=`${l.y}px`,n.style.width=m.x-l.x+"px",n.style.height=m.y-l.y+"px"}(e),E(e,r.endPoint);const t=r.select().sort((e=>e.uuid)).filter((e=>e.isMesh));_.default(t,M)||(M=t,w({object:i(t)}))}}function R(e){var t;y&&y&&(p&&(p.enabled=x),u({enabled:g}),y=!1,null==(t=n.parentElement)||t.removeChild(n))}return document.addEventListener("pointerdown",b,{passive:!0}),document.addEventListener("pointermove",S,{passive:!0,capture:!0}),document.addEventListener("pointerup",R,{passive:!0}),()=>{document.removeEventListener("pointerdown",b),document.removeEventListener("pointermove",S),document.removeEventListener("pointerup",R)}}),[h,m,d,p,f]),M.createElement("group",b.default({ref:C,onClick:E,onPointerOver:()=>x(!0),onPointerOut:()=>x(!1),onPointerMissed:S},l),M.createElement(Q.Provider,{value:y},r))},exports.Shadow=nr,exports.Sky=ur,exports.Sphere=Ct,exports.SpotLight=ir,exports.Stage=function({children:e,controls:t,shadows:r=!0,adjustCamera:n=!0,environment:a="city",intensity:s=1,preset:i="rembrandt",shadowBias:l=0,contactShadow:c={blur:2,opacity:.5,position:[0,0,0]},...u}){const d=tr[i],m=o.useThree((e=>e.camera)),f=o.useThree((e=>e.controls)),p=M.useRef(null),h=M.useRef(null),[{radius:v,width:g,height:x},y]=M.useState({radius:0,width:0,height:0});return M.useLayoutEffect((()=>{p.current.position.set(0,0,0),p.current.updateWorldMatrix(!0,!0);const e=(new T.Box3).setFromObject(h.current),t=new T.Vector3,r=new T.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]),M.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]),M.createElement("group",u,M.createElement("group",{ref:p},M.createElement("group",{ref:h},e)),c&&M.createElement(er,b.default({scale:2*v,far:v/2},c)),a&&M.createElement(Yt,{preset:a}),M.createElement("ambientLight",{intensity:s/3}),M.createElement("spotLight",{penumbra:1,position:[d.main[0]*v,d.main[1]*v,d.main[2]*v],intensity:2*s,castShadow:r,"shadow-bias":l}),M.createElement("pointLight",{position:[d.fill[0]*v,d.fill[1]*v,d.fill[2]*v],intensity:s}))},exports.Stars=fr,exports.Stats=function({showPanel:e=0,className:t,parent:r}){const n=function(e,t=[],r){const[n,o]=M.useState();return M.useLayoutEffect((()=>{const t=e();return o(t),it(r,t),()=>it(r,null)}),t),n}((()=>new D.default),[]);return M.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 s=o.addEffect((()=>n.begin())),i=o.addAfterEffect((()=>n.end()));return()=>{null==a||a.removeChild(n.dom),s(),i()}}}),[r,n,t,e]),null},exports.Tetrahedron=Dt,exports.Text=ae,exports.Torus=Pt,exports.TorusKnot=Lt,exports.TrackballControls=Se,exports.Trail=he,exports.TransformControls=Ce,exports.Tube=_t,exports.calcPosFromAngles=cr,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(),qr.copy(r.boundingSphere),qr.applyMatrix4(o),!1!==e.ray.intersectsSphere(qr)&&(Hr.copy(o).invert(),$r.copy(e.ray).applyMatrix4(Hr),null!==r.boundingBox&&null===$r.intersectBox(r.boundingBox,Xr)||t.push({distance:Xr.distanceTo(e.ray.origin),point:Xr.clone(),object:this})))},exports.shaderMaterial=ie,exports.softShadows=e=>{if(!wt){wt=!0;let t=T.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 )"),T.ShaderChunk.shadowmap_pars_fragment=t}},exports.useAnimations=function(e,t){const r=M.useRef(),[a]=M.useState((()=>t?t instanceof n.Object3D?{current:t}:t:r)),[s]=M.useState((()=>new n.AnimationMixer(void 0))),i=M.useRef({}),[l]=M.useState((()=>{const t={};return e.forEach((e=>Object.defineProperty(t,e.name,{enumerable:!0,get(){if(a.current)return i.current[e.name]||(i.current[e.name]=s.clipAction(e,a.current))}}))),{ref:a,clips:e,actions:t,names:e.map((e=>e.name)),mixer:s}}));return o.useFrame(((e,t)=>s.update(t))),M.useEffect((()=>{const e=a.current;return()=>{i.current={},Object.values(l.actions).forEach((t=>{e&&s.uncacheAction(t,e)}))}}),[e]),l},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){M.useEffect((()=>{if(e.current){e.current.raycast=x.acceleratedRaycast;const r=e.current.geometry;return r.computeBoundsTree=x.computeBoundsTree,r.disposeBoundsTree=x.disposeBoundsTree,r.computeBoundsTree(t),()=>{r.boundsTree&&r.disposeBoundsTree()}}}),[e,t])},exports.useBounds=function(){return M.useContext(Ht)},exports.useBoxProjectedEnv=function(e=new T.Vector3,t=new T.Vector3){const[r]=M.useState((()=>({position:new T.Vector3,size:new T.Vector3})));o.applyProps(r,{position:e,size:t});const n=M.useRef(null),a=M.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>",T.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 M.useLayoutEffect((()=>{n.current.needsUpdate=!0}),[r]),a},exports.useCamera=Pe,exports.useContextBridge=function(...e){const t=M.useRef([]);return t.current=e.map((e=>M.useContext(e))),M.useMemo((()=>({children:r})=>e.reduceRight(((e,r,n)=>M.createElement(r.Provider,{value:t.current[n],children:e})),r)),[])},exports.useCubeTexture=et,exports.useCursor=function(e,t="pointer",r="auto"){M.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:s}=o.useThree((e=>e.size)),i=e||a*r,l=e||s*r,c=M.useMemo((()=>{const e=new n.DepthTexture(i,l);return e.format=n.DepthFormat,e.type=n.UnsignedShortType,{depthTexture:e}}),[i,l]);let u=0;const d=lt(i,l,c);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=>m.suspend((()=>g.getGPUTier(e)),["useDetectGPU"]),exports.useFBO=lt,exports.useFBX=tt,exports.useGLTF=ot,exports.useGizmoContext=De,exports.useHelper=function(e,t,...r){const n=M.useRef(),a=o.useThree((e=>e.scene));return M.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=M.useRef(null),r=M.useRef(!1),n=M.useRef(!1);return M.useEffect((()=>{const a=t.current;if(a){const t=o.addEffect((()=>(r.current=!1,!0))),s=a.onBeforeRender;a.onBeforeRender=()=>r.current=!0;const i=o.addAfterEffect((()=>(r.current!==n.current&&e(n.current=r.current),!0)));return()=>{a.onBeforeRender=s,t(),i()}}}),[]),t},exports.useKTX2=st,exports.useMatcapTexture=function(e=0,t=1024){const r=m.suspend((()=>fetch("https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/matcaps.json").then((e=>e.json()))),["matcapList"]),n=r[0],o=M.useMemo((()=>Object.keys(r).length),[]),a=`${M.useMemo((()=>"string"==typeof e?e:"number"==typeof e?r[e]:null),[e])||n}${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}/${a}`;return[ce(s),s,o]},exports.useNormalTexture=function(e=0,t={}){const{repeat:r=[1,1],anisotropy:o=1,offset:a=[0,0]}=t,s=m.suspend((()=>fetch("https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/normals/normals.json").then((e=>e.json()))),["normalsList"]),i=M.useMemo((()=>Object.keys(s).length),[]),l=s[0],c=`https://rawcdn.githack.com/pmndrs/drei-assets/7a3104997e1576f83472829815b00880d88b32fb/normals/${s[e]||l}`,u=ce(c);return M.useLayoutEffect((()=>{u&&(u.wrapS=u.wrapT=n.RepeatWrapping,u.repeat=new n.Vector2(r[0],r[1]),u.offset=new n.Vector2(a[0],a[1]),u.anisotropy=o)}),[u,o,r,a]),[u,c,i]},exports.useProgress=G,exports.useScroll=X,exports.useSelect=function(){return M.useContext(Q)},exports.useTexture=ce,exports.useTrail=pe;
|