@react-three/drei 9.9.0 → 9.11.1

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 CHANGED
@@ -106,6 +106,7 @@ The `native` route of the library **does not** export `Html` or `Loader`. The de
106
106
  <li><a href="#useintersect">useIntersect</a></li>
107
107
  <li><a href="#useboxprojectedenv">useBoxProjectedEnv</a></li>
108
108
  <li><a href="#useTrail">useTrail</a></li>
109
+ <li><a href="#BBAnchor">BBAnchor</a></li>
109
110
  </ul>
110
111
  <li><a href="#loading">Loaders</a></li>
111
112
  <ul>
@@ -1377,6 +1378,37 @@ useFrame(() => {
1377
1378
  })
1378
1379
  ```
1379
1380
 
1381
+ #### BBAnchor
1382
+
1383
+ [![](https://img.shields.io/badge/-storybook-%23ff69b4)](https://drei.vercel.app/?path=/story/misc-BBAnchor--b-box-offset-with-html)
1384
+
1385
+ A component using AABB (Axis-aligned bounding boxes) to offset children position by specified multipliers (`anchor` property) on each axis. You can use this component to change children positioning in regard of the parent's bounding box, eg. pinning [Html](#html) component to one of the parent's corners. Multipliers determine the offset value based on the `AABB`'s size:
1386
+
1387
+ ```
1388
+ childrenAnchor = boundingBoxPosition + (boundingBoxSize * anchor / 2)
1389
+ ```
1390
+
1391
+ ```jsx
1392
+ <BBAnchor
1393
+ anchor // THREE.Vector3 or [number, number, number]
1394
+ {...groupProps} // All THREE.Group props are valid
1395
+ >
1396
+ {children}
1397
+ </BBAnchor>
1398
+ ```
1399
+
1400
+ For instance, one could want the Html component to be pinned to `positive x`, `positive y`, and `positive z` corner of a [Box](#shapes) object:
1401
+
1402
+ ```jsx
1403
+ <Box>
1404
+ <BBAnchor anchor={[1, 1, 1]}>
1405
+ <Html center>
1406
+ <span>Hello world!</span>
1407
+ </Html>
1408
+ </BBAnchor>
1409
+ </Box>
1410
+ ```
1411
+
1380
1412
  # Loading
1381
1413
 
1382
1414
  #### Loader
@@ -1861,11 +1893,11 @@ First you need to define a mask, give it the shape that you want.
1861
1893
  Now refer to it with the `useMask` hook and the same id, your content will now be masked out by the geometry defined above.
1862
1894
 
1863
1895
  ```jsx
1864
- const spread = useMask(1)
1896
+ const stencil = useMask(1)
1865
1897
  return (
1866
1898
  <mesh>
1867
1899
  <torusKnotGeoometry />
1868
- <meshStandardMaterial {...spread} />
1900
+ <meshStandardMaterial {...stencil} />
1869
1901
  ```
1870
1902
 
1871
1903
  You can build compound masks with multiple shapes by re-using an id.
@@ -1892,6 +1924,12 @@ You can override the material of a mask by using a render prop.
1892
1924
  </Mask>
1893
1925
  ```
1894
1926
 
1927
+ Invert masks individually by providing a 2nd boolean argument to the `useMask` hook.
1928
+
1929
+ ```jsx
1930
+ const stencil = useMask(1, true)
1931
+ ```
1932
+
1895
1933
  # Staging
1896
1934
 
1897
1935
  #### Center
@@ -1913,7 +1951,7 @@ Calculates a boundary box and centers its children accordingly. `alignTop` adjus
1913
1951
  <a href="https://codesandbox.io/s/42glz0"><img width="20%" src="https://codesandbox.io/api/v1/sandboxes/42glz0/screenshot.png" alt="Demo"/></a>
1914
1952
  </p>
1915
1953
 
1916
- Calculates a boundary box and centers the camera accordingly. If you are using controls, make sure to pass them the `makeDefault` prop. `fit` fits the current view on first render. `clip` sets the cameras near/far planes.
1954
+ Calculates a boundary box and centers the camera accordingly. If you are using camera controls, make sure to pass them the `makeDefault` prop. `fit` fits the current view on first render. `clip` sets the cameras near/far planes. `observe` will trigger on window resize.
1917
1955
 
1918
1956
  ```jsx
1919
1957
  <Bounds fit clip observe damping={6} margin={1.2}>
@@ -1921,7 +1959,7 @@ Calculates a boundary box and centers the camera accordingly. If you are using c
1921
1959
  </Bounds>
1922
1960
  ```
1923
1961
 
1924
- The Bounds component also acts as a context provider, use the `useBounds` hook to refresh the bounds, fit the camera, clip near/far planes or focus objects. `refresh(object?: THREE.Object3D | THREE.Box3)` will recalculate bounds, since this can be expensive only call it when you know the view has changed. `clip` sets the cameras near/far planes. `fit` zooms and centers the view.
1962
+ The Bounds component also acts as a context provider, use the `useBounds` hook to refresh the bounds, fit the camera, clip near/far planes or focus objects. `refresh(object?: THREE.Object3D | THREE.Box3)` will recalculate bounds. Since this can be expensive only call it when you know the view has changed. `clip` sets the cameras near/far planes. `fit` zooms and centers the view.
1925
1963
 
1926
1964
  ```jsx
1927
1965
  function Foo() {
@@ -1986,7 +2024,8 @@ This component makes its contents float or hover.
1986
2024
  <Float
1987
2025
  speed={1} // Animation speed, defaults to 1
1988
2026
  rotationIntensity={1} // XYZ rotation intensity, defaults to 1
1989
- floatIntensity={1} // Up/down float intensity, defaults to 1
2027
+ floatIntensity={1} // Up/down float intensity, works like a multiplier with floatingRange,defaults to 1
2028
+ floatingRange={[1, 10]} // Range of y-axis values the object will float within, defaults to [-0.1,0.1]
1990
2029
  >
1991
2030
  <mesh />
1992
2031
  </Float>
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("three"),n=require("@react-three/fiber");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 n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var o=u(e),a=c(r),i=c(t);const f=new i.Box3,l=new i.Vector3;exports.BBAnchor=({anchor:e,...r})=>{const t=a.useRef(null),u=a.useRef(null);return a.useEffect((()=>{var e,r;null!=(e=t.current)&&null!=(r=e.parent)&&r.parent&&(u.current=t.current.parent,t.current.parent.parent.add(t.current))}),[]),n.useFrame((()=>{u.current&&(f.setFromObject(u.current),f.getSize(l),t.current.position.set(u.current.position.x+l.x*e[0]/2,u.current.position.y+l.y*e[1]/2,u.current.position.z+l.z*e[2]/2))})),a.createElement("group",o.default({ref:t},r))};
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import * as THREE from 'three';
3
+ import { GroupProps } from '@react-three/fiber';
4
+ export interface BBAnchorProps extends GroupProps {
5
+ anchor: THREE.Vector3 | [number, number, number];
6
+ }
7
+ export declare const BBAnchor: ({ anchor, ...props }: BBAnchorProps) => JSX.Element;
@@ -0,0 +1,37 @@
1
+ import _extends from '@babel/runtime/helpers/esm/extends';
2
+ import * as React from 'react';
3
+ import * as THREE from 'three';
4
+ import { useFrame } from '@react-three/fiber';
5
+
6
+ const boundingBox = new THREE.Box3();
7
+ const boundingBoxSize = new THREE.Vector3();
8
+ const BBAnchor = ({
9
+ anchor,
10
+ ...props
11
+ }) => {
12
+ const ref = React.useRef(null);
13
+ const parentRef = React.useRef(null); // Reattach group created by this component to the parent's parent,
14
+ // so it becomes a sibling of its initial parent.
15
+ // We do that so the children have no impact on a bounding box of a parent.
16
+
17
+ React.useEffect(() => {
18
+ var _ref$current, _ref$current$parent;
19
+
20
+ if ((_ref$current = ref.current) != null && (_ref$current$parent = _ref$current.parent) != null && _ref$current$parent.parent) {
21
+ parentRef.current = ref.current.parent;
22
+ ref.current.parent.parent.add(ref.current);
23
+ }
24
+ }, []);
25
+ useFrame(() => {
26
+ if (parentRef.current) {
27
+ boundingBox.setFromObject(parentRef.current);
28
+ boundingBox.getSize(boundingBoxSize);
29
+ ref.current.position.set(parentRef.current.position.x + boundingBoxSize.x * anchor[0] / 2, parentRef.current.position.y + boundingBoxSize.y * anchor[1] / 2, parentRef.current.position.z + boundingBoxSize.z * anchor[2] / 2);
30
+ }
31
+ });
32
+ return /*#__PURE__*/React.createElement("group", _extends({
33
+ ref: ref
34
+ }, props));
35
+ };
36
+
37
+ export { BBAnchor };
package/core/Float.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("react-merge-refs");function n(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 u=o(e),a=n(r);const c=u.forwardRef((({children:e,speed:r=1,rotationIntensity:n=1,floatIntensity:o=1,...c},i)=>{const f=u.useRef(null),s=u.useRef(1e4*Math.random());return t.useFrame((e=>{const t=s.current+e.clock.getElapsedTime();f.current.rotation.x=Math.cos(t/4*r)/8*n,f.current.rotation.y=Math.sin(t/4*r)/8*n,f.current.rotation.z=Math.sin(t/4*r)/20*n,f.current.position.y=Math.sin(t/4*r)/10*o})),u.createElement("group",c,u.createElement("group",{ref:a.default([f,i])},e))}));exports.Float=c;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@react-three/fiber"),r=require("react-merge-refs"),n=require("three");function o(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=a(e),i=o(r),c=a(n);const l=u.forwardRef((({children:e,speed:r=1,rotationIntensity:n=1,floatIntensity:o=1,floatingRange:a=[-.1,.1],...l},f)=>{const s=u.useRef(null),d=u.useRef(1e4*Math.random());return t.useFrame((e=>{var t,u;const i=d.current+e.clock.getElapsedTime();s.current.rotation.x=Math.cos(i/4*r)/8*n,s.current.rotation.y=Math.sin(i/4*r)/8*n,s.current.rotation.z=Math.sin(i/4*r)/20*n;let l=Math.sin(i/4*r)/10;l=c.MathUtils.mapLinear(l,-.1,.1,null!==(t=null==a?void 0:a[0])&&void 0!==t?t:-.1,null!==(u=null==a?void 0:a[1])&&void 0!==u?u:.1),s.current.position.y=l*o})),u.createElement("group",l,u.createElement("group",{ref:i.default([s,f])},e))}));exports.Float=l;
package/core/Float.d.ts CHANGED
@@ -1,8 +1,10 @@
1
1
  import * as React from 'react';
2
+ import * as THREE from 'three';
2
3
  export declare type FloatProps = JSX.IntrinsicElements['group'] & {
3
4
  speed?: number;
4
5
  rotationIntensity?: number;
5
6
  floatIntensity?: number;
6
7
  children?: React.ReactNode;
8
+ floatingRange?: [number?, number?];
7
9
  };
8
- export declare const Float: React.ForwardRefExoticComponent<Pick<FloatProps, "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "isGroup" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "removeFromParent" | "clear" | "getObjectById" | "getObjectByName" | "getObjectByProperty" | "getWorldPosition" | "getWorldQuaternion" | "getWorldScale" | "getWorldDirection" | "raycast" | "traverse" | "traverseVisible" | "traverseAncestors" | "updateMatrix" | "updateMatrixWorld" | "updateWorldMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "speed" | "rotationIntensity" | "floatIntensity"> & React.RefAttributes<import("three").Group>>;
10
+ export declare const Float: React.ForwardRefExoticComponent<Pick<FloatProps, "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "isGroup" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "removeFromParent" | "clear" | "getObjectById" | "getObjectByName" | "getObjectByProperty" | "getWorldPosition" | "getWorldQuaternion" | "getWorldScale" | "getWorldDirection" | "raycast" | "traverse" | "traverseVisible" | "traverseAncestors" | "updateMatrix" | "updateMatrixWorld" | "updateWorldMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "speed" | "rotationIntensity" | "floatIntensity" | "floatingRange"> & React.RefAttributes<THREE.Group>>;
package/core/Float.js CHANGED
@@ -1,22 +1,28 @@
1
1
  import * as React from 'react';
2
2
  import { useFrame } from '@react-three/fiber';
3
3
  import mergeRefs from 'react-merge-refs';
4
+ import * as THREE from 'three';
4
5
 
5
6
  const Float = /*#__PURE__*/React.forwardRef(({
6
7
  children,
7
8
  speed = 1,
8
9
  rotationIntensity = 1,
9
10
  floatIntensity = 1,
11
+ floatingRange = [-0.1, 0.1],
10
12
  ...props
11
13
  }, forwardRef) => {
12
14
  const ref = React.useRef(null);
13
15
  const offset = React.useRef(Math.random() * 10000);
14
16
  useFrame(state => {
17
+ var _floatingRange$, _floatingRange$2;
18
+
15
19
  const t = offset.current + state.clock.getElapsedTime();
16
20
  ref.current.rotation.x = Math.cos(t / 4 * speed) / 8 * rotationIntensity;
17
21
  ref.current.rotation.y = Math.sin(t / 4 * speed) / 8 * rotationIntensity;
18
22
  ref.current.rotation.z = Math.sin(t / 4 * speed) / 20 * rotationIntensity;
19
- ref.current.position.y = Math.sin(t / 4 * speed) / 10 * floatIntensity;
23
+ let yPosition = Math.sin(t / 4 * speed) / 10;
24
+ yPosition = THREE.MathUtils.mapLinear(yPosition, -0.1, 0.1, (_floatingRange$ = floatingRange == null ? void 0 : floatingRange[0]) !== null && _floatingRange$ !== void 0 ? _floatingRange$ : -0.1, (_floatingRange$2 = floatingRange == null ? void 0 : floatingRange[1]) !== null && _floatingRange$2 !== void 0 ? _floatingRange$2 : 0.1);
25
+ ref.current.position.y = yPosition * floatIntensity;
20
26
  });
21
27
  return /*#__PURE__*/React.createElement("group", props, /*#__PURE__*/React.createElement("group", {
22
28
  ref: mergeRefs([ref, forwardRef])
package/core/Mask.cjs.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(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 i=n(e),l=c(t),s=c(r);exports.Mask=function({id:e=1,children:t,colorWrite:r=!1,depthWrite:n=!1,...c}){const u=s.useMemo((()=>({colorWrite:r,depthWrite:n,stencilWrite:!0,stencilRef:e,stencilFunc:l.AlwaysStencilFunc,stencilFail:l.ReplaceStencilOp,stencilZFail:l.ReplaceStencilOp,stencilZPass:l.ReplaceStencilOp})),[r,n]);return s.createElement("mesh",i.default({renderOrder:-e},c),s.createElement("meshBasicMaterial",u),"function"==typeof t?t(u):t)},exports.useMask=function(e){return{stencilWrite:!0,stencilRef:e,stencilFunc:l.EqualStencilFunc,stencilFail:l.KeepStencilOp,stencilZFail:l.KeepStencilOp,stencilZPass:l.ReplaceStencilOp}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),n=require("react");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var i=r(e),l=c(t),u=c(n);exports.Mask=function({id:e=1,children:t,colorWrite:n=!1,depthWrite:r=!1,...c}){const s=u.useMemo((()=>({colorWrite:n,depthWrite:r,stencilWrite:!0,stencilRef:e,stencilFunc:l.AlwaysStencilFunc,stencilFail:l.ReplaceStencilOp,stencilZFail:l.ReplaceStencilOp,stencilZPass:l.ReplaceStencilOp})),[n,r]);return u.createElement("mesh",i.default({renderOrder:-e},c),u.createElement("meshBasicMaterial",s),"function"==typeof t?t(s):t)},exports.useMask=function(e,t=!1){return{stencilWrite:!0,stencilRef:e,stencilFunc:t?l.NotEqualStencilFunc:l.EqualStencilFunc,stencilFail:l.KeepStencilOp,stencilZFail:l.KeepStencilOp,stencilZPass:l.KeepStencilOp}};
package/core/Mask.d.ts CHANGED
@@ -17,7 +17,7 @@ declare type Props = Omit<JSX.IntrinsicElements['mesh'], 'children'> & {
17
17
  children: (spread: MaskSpread) => React.ReactNode | React.ReactNode;
18
18
  };
19
19
  export declare function Mask({ id, children, colorWrite, depthWrite, ...props }: Props): JSX.Element;
20
- export declare function useMask(id: number): {
20
+ export declare function useMask(id: number, inverse?: boolean): {
21
21
  stencilWrite: boolean;
22
22
  stencilRef: number;
23
23
  stencilFunc: THREE.StencilFunc;
package/core/Mask.js CHANGED
@@ -23,14 +23,14 @@ function Mask({
23
23
  renderOrder: -id
24
24
  }, props), /*#__PURE__*/React.createElement("meshBasicMaterial", spread), typeof children === 'function' ? children(spread) : children);
25
25
  }
26
- function useMask(id) {
26
+ function useMask(id, inverse = false) {
27
27
  return {
28
28
  stencilWrite: true,
29
29
  stencilRef: id,
30
- stencilFunc: THREE.EqualStencilFunc,
30
+ stencilFunc: inverse ? THREE.NotEqualStencilFunc : THREE.EqualStencilFunc,
31
31
  stencilFail: THREE.KeepStencilOp,
32
32
  stencilZFail: THREE.KeepStencilOp,
33
- stencilZPass: THREE.ReplaceStencilOp
33
+ stencilZPass: THREE.KeepStencilOp
34
34
  };
35
35
  }
36
36
 
package/core/index.cjs.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./Billboard.cjs.js"),r=require("./QuadraticBezierLine.cjs.js"),s=require("./CubicBezierLine.cjs.js"),t=require("./Line.cjs.js"),o=require("./PositionalAudio.cjs.js"),i=require("./Text.cjs.js"),u=require("./Text3D.cjs.js"),a=require("./Effects.cjs.js"),n=require("./GradientTexture.cjs.js"),j=require("./Image.cjs.js"),p=require("./Edges.cjs.js"),c=require("./Trail.cjs.js"),x=require("./Sampler.cjs.js"),l=require("./ComputedAttribute.cjs.js"),q=require("./Clone.cjs.js"),d=require("./OrthographicCamera.cjs.js"),m=require("./PerspectiveCamera.cjs.js"),C=require("./CubeCamera.cjs.js"),h=require("./DeviceOrientationControls.cjs.js"),b=require("./FlyControls.cjs.js"),S=require("./MapControls.cjs.js"),B=require("./OrbitControls.cjs.js"),M=require("./TrackballControls.cjs.js"),T=require("./ArcballControls.cjs.js"),P=require("./TransformControls.cjs.js"),f=require("./PointerLockControls.cjs.js"),g=require("./FirstPersonControls.cjs.js"),v=require("./GizmoHelper.cjs.js"),k=require("./GizmoViewcube.cjs.js"),E=require("./GizmoViewport.cjs.js"),L=require("./useCubeTexture.cjs.js"),A=require("./useFBX.cjs.js"),D=require("./useGLTF.cjs.js"),G=require("./useProgress.cjs.js"),F=require("./useTexture.cjs.js"),O=require("./useKTX2.cjs.js"),w=require("./Stats.cjs.js"),z=require("./useDepthBuffer.cjs.js"),I=require("./useAspect.cjs.js"),R=require("./useCamera.cjs.js"),y=require("./useDetectGPU.cjs.js"),H=require("./useHelper.cjs.js"),V=require("./useBVH.cjs.js"),Q=require("./useContextBridge.cjs.js"),X=require("./useAnimations.cjs.js"),K=require("./useFBO.cjs.js"),W=require("./useIntersect.cjs.js"),N=require("./useBoxProjectedEnv.cjs.js"),U=require("./CurveModifier.cjs.js"),_=require("./MeshDistortMaterial.cjs.js"),J=require("./MeshWobbleMaterial.cjs.js"),Y=require("./MeshReflectorMaterial.cjs.js"),Z=require("./PointMaterial.cjs.js"),$=require("./shaderMaterial.cjs.js"),ee=require("./softShadows.cjs.js"),re=require("./shapes.cjs.js"),se=require("./RoundedBox.cjs.js"),te=require("./ScreenQuad.cjs.js"),oe=require("./Center.cjs.js"),ie=require("./Bounds.cjs.js"),ue=require("./CameraShake.cjs.js"),ae=require("./Float.cjs.js"),ne=require("./Stage.cjs.js"),je=require("./Backdrop.cjs.js"),pe=require("./Shadow.cjs.js"),ce=require("./ContactShadows.cjs.js"),xe=require("./Reflector.cjs.js"),le=require("./SpotLight.cjs.js"),qe=require("./Environment.cjs.js"),de=require("./Lightformer.cjs.js"),me=require("./Sky.cjs.js"),Ce=require("./Stars.cjs.js"),he=require("./Cloud.cjs.js"),be=require("./Sparkles.cjs.js"),Se=require("./useMatcapTexture.cjs.js"),Be=require("./useNormalTexture.cjs.js"),Me=require("./Points.cjs.js"),Te=require("./Instances.cjs.js"),Pe=require("./Segments.cjs.js"),fe=require("./Detailed.cjs.js"),ge=require("./Preload.cjs.js"),ve=require("./BakeShadows.cjs.js"),ke=require("./meshBounds.cjs.js"),Ee=require("./AdaptiveDpr.cjs.js"),Le=require("./AdaptiveEvents.cjs.js"),Ae=require("./RenderTexture.cjs.js"),De=require("./Mask.cjs.js");require("@babel/runtime/helpers/extends"),require("react"),require("@react-three/fiber"),require("react-merge-refs"),require("three"),require("three-stdlib"),require("troika-three-text"),require("suspend-react"),require("meshline"),require("lodash.pick"),require("lodash.omit"),require("zustand"),require("stats.js"),require("../helpers/useEffectfulState.cjs.js"),require("detect-gpu"),require("three-mesh-bvh"),require("../materials/BlurPass.cjs.js"),require("../materials/ConvolutionMaterial.cjs.js"),require("../materials/MeshReflectorMaterial.cjs.js"),require("../helpers/environment-assets.cjs.js"),require("../materials/SpotLightMaterial.cjs.js"),require("../helpers/Position.cjs.js"),require("react-composer"),exports.Billboard=e.Billboard,exports.QuadraticBezierLine=r.QuadraticBezierLine,exports.CubicBezierLine=s.CubicBezierLine,exports.Line=t.Line,exports.PositionalAudio=o.PositionalAudio,exports.Text=i.Text,exports.Text3D=u.Text3D,exports.Effects=a.Effects,exports.isWebGL2Available=a.isWebGL2Available,exports.GradientTexture=n.GradientTexture,exports.Image=j.Image,exports.Edges=p.Edges,exports.Trail=c.Trail,exports.useTrail=c.useTrail,exports.Sampler=x.Sampler,exports.ComputedAttribute=l.ComputedAttribute,exports.Clone=q.Clone,exports.OrthographicCamera=d.OrthographicCamera,exports.PerspectiveCamera=m.PerspectiveCamera,exports.CubeCamera=C.CubeCamera,exports.DeviceOrientationControls=h.DeviceOrientationControls,exports.FlyControls=b.FlyControls,exports.MapControls=S.MapControls,exports.OrbitControls=B.OrbitControls,exports.TrackballControls=M.TrackballControls,exports.ArcballControls=T.ArcballControls,exports.TransformControls=P.TransformControls,exports.PointerLockControls=f.PointerLockControls,exports.FirstPersonControls=g.FirstPersonControls,exports.GizmoHelper=v.GizmoHelper,exports.useGizmoContext=v.useGizmoContext,exports.GizmoViewcube=k.GizmoViewcube,exports.GizmoViewport=E.GizmoViewport,exports.useCubeTexture=L.useCubeTexture,exports.useFBX=A.useFBX,exports.useGLTF=D.useGLTF,exports.useProgress=G.useProgress,exports.IsObject=F.IsObject,exports.useTexture=F.useTexture,exports.useKTX2=O.useKTX2,exports.Stats=w.Stats,exports.useDepthBuffer=z.useDepthBuffer,exports.useAspect=I.useAspect,exports.useCamera=R.useCamera,exports.useDetectGPU=y.useDetectGPU,exports.useHelper=H.useHelper,exports.useBVH=V.useBVH,exports.useContextBridge=Q.useContextBridge,exports.useAnimations=X.useAnimations,exports.useFBO=K.useFBO,exports.useIntersect=W.useIntersect,exports.useBoxProjectedEnv=N.useBoxProjectedEnv,exports.CurveModifier=U.CurveModifier,exports.MeshDistortMaterial=_.MeshDistortMaterial,exports.MeshWobbleMaterial=J.MeshWobbleMaterial,exports.MeshReflectorMaterial=Y.MeshReflectorMaterial,exports.PointMaterial=Z.PointMaterial,exports.PointMaterialImpl=Z.PointMaterialImpl,exports.shaderMaterial=$.shaderMaterial,exports.softShadows=ee.softShadows,exports.Box=re.Box,exports.Circle=re.Circle,exports.Cone=re.Cone,exports.Cylinder=re.Cylinder,exports.Dodecahedron=re.Dodecahedron,exports.Extrude=re.Extrude,exports.Icosahedron=re.Icosahedron,exports.Lathe=re.Lathe,exports.Octahedron=re.Octahedron,exports.Plane=re.Plane,exports.Polyhedron=re.Polyhedron,exports.Ring=re.Ring,exports.Sphere=re.Sphere,exports.Tetrahedron=re.Tetrahedron,exports.Torus=re.Torus,exports.TorusKnot=re.TorusKnot,exports.Tube=re.Tube,exports.RoundedBox=se.RoundedBox,exports.ScreenQuad=te.ScreenQuad,exports.Center=oe.Center,exports.Bounds=ie.Bounds,exports.useBounds=ie.useBounds,exports.CameraShake=ue.CameraShake,exports.Float=ae.Float,exports.Stage=ne.Stage,exports.Backdrop=je.Backdrop,exports.Shadow=pe.Shadow,exports.ContactShadows=ce.ContactShadows,exports.Reflector=xe.Reflector,exports.SpotLight=le.SpotLight,exports.Environment=qe.Environment,exports.EnvironmentCube=qe.EnvironmentCube,exports.EnvironmentMap=qe.EnvironmentMap,exports.EnvironmentPortal=qe.EnvironmentPortal,exports.useEnvironment=qe.useEnvironment,exports.Lightformer=de.Lightformer,exports.Sky=me.Sky,exports.calcPosFromAngles=me.calcPosFromAngles,exports.Stars=Ce.Stars,exports.Cloud=he.Cloud,exports.Sparkles=be.Sparkles,exports.useMatcapTexture=Se.useMatcapTexture,exports.useNormalTexture=Be.useNormalTexture,exports.Point=Me.Point,exports.Points=Me.Points,exports.PointsBuffer=Me.PointsBuffer,exports.Instance=Te.Instance,exports.Instances=Te.Instances,exports.Merged=Te.Merged,exports.Segment=Pe.Segment,exports.SegmentObject=Pe.SegmentObject,exports.Segments=Pe.Segments,exports.Detailed=fe.Detailed,exports.Preload=ge.Preload,exports.BakeShadows=ve.BakeShadows,exports.meshBounds=ke.meshBounds,exports.AdaptiveDpr=Ee.AdaptiveDpr,exports.AdaptiveEvents=Le.AdaptiveEvents,exports.RenderTexture=Ae.RenderTexture,exports.Mask=De.Mask,exports.useMask=De.useMask;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./Billboard.cjs.js"),r=require("./QuadraticBezierLine.cjs.js"),s=require("./CubicBezierLine.cjs.js"),t=require("./Line.cjs.js"),o=require("./PositionalAudio.cjs.js"),i=require("./Text.cjs.js"),u=require("./Text3D.cjs.js"),a=require("./Effects.cjs.js"),n=require("./GradientTexture.cjs.js"),j=require("./Image.cjs.js"),c=require("./Edges.cjs.js"),p=require("./Trail.cjs.js"),x=require("./Sampler.cjs.js"),l=require("./ComputedAttribute.cjs.js"),q=require("./Clone.cjs.js"),d=require("./OrthographicCamera.cjs.js"),m=require("./PerspectiveCamera.cjs.js"),C=require("./CubeCamera.cjs.js"),h=require("./DeviceOrientationControls.cjs.js"),B=require("./FlyControls.cjs.js"),b=require("./MapControls.cjs.js"),S=require("./OrbitControls.cjs.js"),M=require("./TrackballControls.cjs.js"),T=require("./ArcballControls.cjs.js"),P=require("./TransformControls.cjs.js"),f=require("./PointerLockControls.cjs.js"),g=require("./FirstPersonControls.cjs.js"),v=require("./GizmoHelper.cjs.js"),k=require("./GizmoViewcube.cjs.js"),A=require("./GizmoViewport.cjs.js"),E=require("./useCubeTexture.cjs.js"),L=require("./useFBX.cjs.js"),D=require("./useGLTF.cjs.js"),G=require("./useProgress.cjs.js"),F=require("./useTexture.cjs.js"),O=require("./useKTX2.cjs.js"),w=require("./Stats.cjs.js"),z=require("./useDepthBuffer.cjs.js"),I=require("./useAspect.cjs.js"),R=require("./useCamera.cjs.js"),y=require("./useDetectGPU.cjs.js"),H=require("./useHelper.cjs.js"),V=require("./useBVH.cjs.js"),Q=require("./useContextBridge.cjs.js"),X=require("./useAnimations.cjs.js"),K=require("./useFBO.cjs.js"),W=require("./useIntersect.cjs.js"),N=require("./useBoxProjectedEnv.cjs.js"),U=require("./BBAnchor.cjs.js"),_=require("./CurveModifier.cjs.js"),J=require("./MeshDistortMaterial.cjs.js"),Y=require("./MeshWobbleMaterial.cjs.js"),Z=require("./MeshReflectorMaterial.cjs.js"),$=require("./PointMaterial.cjs.js"),ee=require("./shaderMaterial.cjs.js"),re=require("./softShadows.cjs.js"),se=require("./shapes.cjs.js"),te=require("./RoundedBox.cjs.js"),oe=require("./ScreenQuad.cjs.js"),ie=require("./Center.cjs.js"),ue=require("./Bounds.cjs.js"),ae=require("./CameraShake.cjs.js"),ne=require("./Float.cjs.js"),je=require("./Stage.cjs.js"),ce=require("./Backdrop.cjs.js"),pe=require("./Shadow.cjs.js"),xe=require("./ContactShadows.cjs.js"),le=require("./Reflector.cjs.js"),qe=require("./SpotLight.cjs.js"),de=require("./Environment.cjs.js"),me=require("./Lightformer.cjs.js"),Ce=require("./Sky.cjs.js"),he=require("./Stars.cjs.js"),Be=require("./Cloud.cjs.js"),be=require("./Sparkles.cjs.js"),Se=require("./useMatcapTexture.cjs.js"),Me=require("./useNormalTexture.cjs.js"),Te=require("./Points.cjs.js"),Pe=require("./Instances.cjs.js"),fe=require("./Segments.cjs.js"),ge=require("./Detailed.cjs.js"),ve=require("./Preload.cjs.js"),ke=require("./BakeShadows.cjs.js"),Ae=require("./meshBounds.cjs.js"),Ee=require("./AdaptiveDpr.cjs.js"),Le=require("./AdaptiveEvents.cjs.js"),De=require("./RenderTexture.cjs.js"),Ge=require("./Mask.cjs.js");require("@babel/runtime/helpers/extends"),require("react"),require("@react-three/fiber"),require("react-merge-refs"),require("three"),require("three-stdlib"),require("troika-three-text"),require("suspend-react"),require("meshline"),require("lodash.pick"),require("lodash.omit"),require("zustand"),require("stats.js"),require("../helpers/useEffectfulState.cjs.js"),require("detect-gpu"),require("three-mesh-bvh"),require("../materials/BlurPass.cjs.js"),require("../materials/ConvolutionMaterial.cjs.js"),require("../materials/MeshReflectorMaterial.cjs.js"),require("../helpers/environment-assets.cjs.js"),require("../materials/SpotLightMaterial.cjs.js"),require("../helpers/Position.cjs.js"),require("react-composer"),exports.Billboard=e.Billboard,exports.QuadraticBezierLine=r.QuadraticBezierLine,exports.CubicBezierLine=s.CubicBezierLine,exports.Line=t.Line,exports.PositionalAudio=o.PositionalAudio,exports.Text=i.Text,exports.Text3D=u.Text3D,exports.Effects=a.Effects,exports.isWebGL2Available=a.isWebGL2Available,exports.GradientTexture=n.GradientTexture,exports.Image=j.Image,exports.Edges=c.Edges,exports.Trail=p.Trail,exports.useTrail=p.useTrail,exports.Sampler=x.Sampler,exports.ComputedAttribute=l.ComputedAttribute,exports.Clone=q.Clone,exports.OrthographicCamera=d.OrthographicCamera,exports.PerspectiveCamera=m.PerspectiveCamera,exports.CubeCamera=C.CubeCamera,exports.DeviceOrientationControls=h.DeviceOrientationControls,exports.FlyControls=B.FlyControls,exports.MapControls=b.MapControls,exports.OrbitControls=S.OrbitControls,exports.TrackballControls=M.TrackballControls,exports.ArcballControls=T.ArcballControls,exports.TransformControls=P.TransformControls,exports.PointerLockControls=f.PointerLockControls,exports.FirstPersonControls=g.FirstPersonControls,exports.GizmoHelper=v.GizmoHelper,exports.useGizmoContext=v.useGizmoContext,exports.GizmoViewcube=k.GizmoViewcube,exports.GizmoViewport=A.GizmoViewport,exports.useCubeTexture=E.useCubeTexture,exports.useFBX=L.useFBX,exports.useGLTF=D.useGLTF,exports.useProgress=G.useProgress,exports.IsObject=F.IsObject,exports.useTexture=F.useTexture,exports.useKTX2=O.useKTX2,exports.Stats=w.Stats,exports.useDepthBuffer=z.useDepthBuffer,exports.useAspect=I.useAspect,exports.useCamera=R.useCamera,exports.useDetectGPU=y.useDetectGPU,exports.useHelper=H.useHelper,exports.useBVH=V.useBVH,exports.useContextBridge=Q.useContextBridge,exports.useAnimations=X.useAnimations,exports.useFBO=K.useFBO,exports.useIntersect=W.useIntersect,exports.useBoxProjectedEnv=N.useBoxProjectedEnv,exports.BBAnchor=U.BBAnchor,exports.CurveModifier=_.CurveModifier,exports.MeshDistortMaterial=J.MeshDistortMaterial,exports.MeshWobbleMaterial=Y.MeshWobbleMaterial,exports.MeshReflectorMaterial=Z.MeshReflectorMaterial,exports.PointMaterial=$.PointMaterial,exports.PointMaterialImpl=$.PointMaterialImpl,exports.shaderMaterial=ee.shaderMaterial,exports.softShadows=re.softShadows,exports.Box=se.Box,exports.Circle=se.Circle,exports.Cone=se.Cone,exports.Cylinder=se.Cylinder,exports.Dodecahedron=se.Dodecahedron,exports.Extrude=se.Extrude,exports.Icosahedron=se.Icosahedron,exports.Lathe=se.Lathe,exports.Octahedron=se.Octahedron,exports.Plane=se.Plane,exports.Polyhedron=se.Polyhedron,exports.Ring=se.Ring,exports.Sphere=se.Sphere,exports.Tetrahedron=se.Tetrahedron,exports.Torus=se.Torus,exports.TorusKnot=se.TorusKnot,exports.Tube=se.Tube,exports.RoundedBox=te.RoundedBox,exports.ScreenQuad=oe.ScreenQuad,exports.Center=ie.Center,exports.Bounds=ue.Bounds,exports.useBounds=ue.useBounds,exports.CameraShake=ae.CameraShake,exports.Float=ne.Float,exports.Stage=je.Stage,exports.Backdrop=ce.Backdrop,exports.Shadow=pe.Shadow,exports.ContactShadows=xe.ContactShadows,exports.Reflector=le.Reflector,exports.SpotLight=qe.SpotLight,exports.Environment=de.Environment,exports.EnvironmentCube=de.EnvironmentCube,exports.EnvironmentMap=de.EnvironmentMap,exports.EnvironmentPortal=de.EnvironmentPortal,exports.useEnvironment=de.useEnvironment,exports.Lightformer=me.Lightformer,exports.Sky=Ce.Sky,exports.calcPosFromAngles=Ce.calcPosFromAngles,exports.Stars=he.Stars,exports.Cloud=Be.Cloud,exports.Sparkles=be.Sparkles,exports.useMatcapTexture=Se.useMatcapTexture,exports.useNormalTexture=Me.useNormalTexture,exports.Point=Te.Point,exports.Points=Te.Points,exports.PointsBuffer=Te.PointsBuffer,exports.Instance=Pe.Instance,exports.Instances=Pe.Instances,exports.Merged=Pe.Merged,exports.Segment=fe.Segment,exports.SegmentObject=fe.SegmentObject,exports.Segments=fe.Segments,exports.Detailed=ge.Detailed,exports.Preload=ve.Preload,exports.BakeShadows=ke.BakeShadows,exports.meshBounds=Ae.meshBounds,exports.AdaptiveDpr=Ee.AdaptiveDpr,exports.AdaptiveEvents=Le.AdaptiveEvents,exports.RenderTexture=De.RenderTexture,exports.Mask=Ge.Mask,exports.useMask=Ge.useMask;
package/core/index.d.ts CHANGED
@@ -46,6 +46,7 @@ export * from './useAnimations';
46
46
  export * from './useFBO';
47
47
  export * from './useIntersect';
48
48
  export * from './useBoxProjectedEnv';
49
+ export * from './BBAnchor';
49
50
  export * from './CurveModifier';
50
51
  export * from './MeshDistortMaterial';
51
52
  export * from './MeshWobbleMaterial';
package/core/index.js CHANGED
@@ -46,6 +46,7 @@ export { useAnimations } from './useAnimations.js';
46
46
  export { useFBO } from './useFBO.js';
47
47
  export { useIntersect } from './useIntersect.js';
48
48
  export { useBoxProjectedEnv } from './useBoxProjectedEnv.js';
49
+ export { BBAnchor } from './BBAnchor.js';
49
50
  export { CurveModifier } from './CurveModifier.js';
50
51
  export { MeshDistortMaterial } from './MeshDistortMaterial.js';
51
52
  export { MeshWobbleMaterial } from './MeshWobbleMaterial.js';
package/index.cjs.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("react-dom/client"),n=require("three"),o=require("@react-three/fiber"),a=require("zustand"),i=require("react-merge-refs"),s=require("@react-spring/three"),c=require("@use-gesture/react"),l=require("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 E(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function w(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=E(e),M=w(t),S=w(r),T=w(n),P=E(a),C=E(i),R=E(u),_=E(p),L=E(h),D=E(v),z=E(y);const A=new n.Vector3,F=new n.Vector3,B=new n.Vector3;function k(e,t,r){const n=A.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=(O=[1,-1,1,1,1,-1,1,1,1,-1,1,1,1,-1,1,1],e=>j(e,O));var O;const I=(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:i,center:s,fullscreen:c,portal:l,distanceFactor:u,sprite:d=!1,transform:m=!1,occlude:f,onOcclude:p,zIndexRange:h=[16777271,0],calculatePosition:v=k,as:g="div",wrapperClass:x,pointerEvents:y="auto",...E},w)=>{var T;const P=o.useThree((({gl:e})=>e)),C=o.useThree((({camera:e})=>e)),R=o.useThree((({scene:e})=>e)),_=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),O=M.useRef(0),W=M.useRef([0,0]),N=M.useRef(null),G=M.useRef(null),H=null!==(T=null==l?void 0:l.current)&&void 0!==T?T:P.domElement.parentNode;M.useEffect((()=>{if(j.current){if(R.updateMatrixWorld(),m)D.style.cssText="position:absolute;top:0;left:0;pointer-events:none;overflow:hidden;";else{const e=v(j.current,C,_);D.style.cssText=`position:absolute;top:0;left:0;transform:translate3d(${e[0]}px,${e[1]}px,0);transform-origin:0 0;`}return H&&(i?H.prepend(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:_.width,height:_.height,transformStyle:"preserve-3d",pointerEvents:"none"}:{position:"absolute",transform:s?"translate3d(-50%,-50%,0)":"none",...c&&{top:-_.height/2,left:-_.width/2,width:_.width,height:_.height},...r}),[r,s,c,_,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:w,className:a,style:r,children:e})))):z.render(M.createElement("div",{ref:w,style:$,className:a,children:e}))}));const X=M.useRef(!0);return o.useFrame((()=>{if(j.current){C.updateMatrixWorld(),j.current.updateWorldMatrix(!0,!1);const e=m?W.current:v(j.current,C,_);if(m||Math.abs(O.current-C.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=A.setFromMatrixPosition(e.matrixWorld),n=F.setFromMatrixPosition(t.matrixWorld),o=r.sub(n),a=t.getWorldDirection(B);return o.angleTo(a)>Math.PI/2}(j.current,C);let r=!1;"boolean"==typeof f?!0===f&&(r=[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=A.setFromMatrixPosition(e.matrixWorld),a=o.clone();a.project(t),r.setFromCamera(a,t);const i=r.intersectObjects(n,!0);if(i.length){const e=i[0].distance;return o.distanceTo(r.ray.origin)<e}return!0}(j.current,C,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=A.setFromMatrixPosition(e.matrixWorld),o=F.setFromMatrixPosition(t.matrixWorld),a=n.distanceTo(o),i=(r[1]-r[0])/(t.far-t.near),s=r[1]-i*t.far;return Math.round(i*a+s)}}(j.current,C,h)}`,m){const[e,t]=[_.width/2,_.height/2],r=C.projectionMatrix.elements[5]*t,{isOrthographicCamera:n,top:o,left:a,bottom:i,right:s}=C,c=V(C.matrixWorldInverse),l=n?`scale(${r})translate(${U(-(s+a)/2)}px,${U((o+i)/2)}px)`:`translateZ(${r}px)`;let m=j.current.matrixWorld;d&&(m=C.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=_.width+"px",D.style.height=_.height+"px",D.style.perspective=n?"":`${r}px`,N.current&&G.current&&(N.current.style.transform=`${l}${c}translate(${e}px,${t}px)`,G.current.style.transform=I(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=A.setFromMatrixPosition(e.matrixWorld),n=F.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,C)*u;D.style.transform=`translate3d(${e[0]}px,${e[1]}px,0) scale(${t})`}W.current=e,O.current=C.zoom}}})),M.createElement("group",b.default({},E,{ref:j}))}));let N=0;const G=P.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 Y=M.forwardRef((({children:e},t)=>{const r=M.useRef(null),n=X(),{width:a,height:i}=o.useThree((e=>e.viewport));return o.useFrame((()=>{r.current.position.x=n.horizontal?-a*(n.pages-1)*n.offset:0,r.current.position.y=n.horizontal?0:i*(n.pages-1)*n.offset})),M.createElement("group",{ref:C.default([t,r])},e)})),Z=M.forwardRef((({children:e,style:t,...r},n)=>{const a=X(),i=M.useRef(null),{width:s,height:c}=o.useThree((e=>e.size)),l=M.useContext(o.context),u=M.useMemo((()=>S.createRoot(a.fixed)),[a.fixed]);return o.useFrame((()=>{a.delta>a.eps&&(i.current.style.transform=`translate3d(${a.horizontal?-s*(a.pages-1)*a.offset:0}px,${a.horizontal?0:c*(a.pages-1)*-a.offset}px,0)`)})),u.render(M.createElement("div",b.default({ref:C.default([n,i]),style:{...t,position:"absolute",top:0,left:0,willChange:"transform"}},r),M.createElement(q.Provider,{value:a},M.createElement(o.context.Provider,{value:l},e)))),null})),K=M.forwardRef((({html:e,...t},r)=>{const n=e?Z:Y;return M.createElement(n,b.default({ref:r},t))}));const J=M.createContext([]);const Q=M.forwardRef((function({follow:e=!0,lockX:t=!1,lockY:r=!1,lockZ:n=!1,...a},i){const s=M.useRef();return o.useFrame((({camera:o})=>{if(!e||!s.current)return;const a=s.current.rotation.clone();s.current.quaternion.copy(o.quaternion),t&&(s.current.rotation.x=a.x),r&&(s.current.rotation.y=a.y),n&&(s.current.rotation.z=a.z)})),M.createElement("group",b.default({ref:C.default([s,i])},a))})),ee=M.forwardRef((function({points:e,color:t="black",vertexColors:r,lineWidth:o,dashed:a,...i},s){const[c]=M.useState((()=>new l.Line2)),[u]=M.useState((()=>new l.LineMaterial)),[d]=M.useState((()=>new n.Vector2(512,512))),m=M.useMemo((()=>{const t=new l.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((()=>{c.computeLineDistances()}),[e,c]),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:c,ref:s},i),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},i)))})),te=new n.Vector3,re=M.forwardRef((function({start:e=[0,0,0],end:t=[0,0,0],mid:r,segments:o=20,...a},i){const s=M.useRef(null),[c]=M.useState((()=>new n.QuadraticBezierCurve3(void 0,void 0,void 0))),l=M.useCallback(((e,t,r,o=20)=>(e instanceof n.Vector3?c.v0.copy(e):c.v0.set(...e),t instanceof n.Vector3?c.v2.copy(t):c.v2.set(...t),r instanceof n.Vector3?c.v1.copy(r):c.v1.copy(c.v0.clone().add(c.v2.clone().sub(c.v0)).add(te.set(0,c.v0.y-c.v2.y,0))),c.getPoints(o))),[]);M.useLayoutEffect((()=>{s.current.setPoints=(e,t,r)=>{const n=l(e,t,r);s.current.geometry&&s.current.geometry.setPositions(n.map((e=>e.toArray())).flat())}}),[]);const u=M.useMemo((()=>l(e,t,r,o)),[e,t,r,o]);return M.createElement(ee,b.default({ref:C.default([s,i]),points:u},a))})),ne=M.forwardRef((function({start:e,end:t,midA:r,midB:o,segments:a=20,...i},s){const c=M.useMemo((()=>{const i=e instanceof n.Vector3?e:new n.Vector3(...e),s=t instanceof n.Vector3?t:new n.Vector3(...t),c=r instanceof n.Vector3?r:new n.Vector3(...r),l=o instanceof n.Vector3?o:new n.Vector3(...o);return new n.CubicBezierCurve3(i,c,l,s).getPoints(a)}),[e,t,r,o,a]);return M.createElement(ee,b.default({ref:s,points:c},i))})),oe=M.forwardRef((({url:e,distance:t=1,loop:r=!0,autoplay:a,...i},s)=>{const c=M.useRef(),l=o.useThree((({camera:e})=>e)),[u]=M.useState((()=>new n.AudioListener)),d=o.useLoader(n.AudioLoader,e);return M.useEffect((()=>{const e=c.current;e&&(e.setBuffer(d),e.setRefDistance(t),e.setLoop(r),a&&!e.isPlaying&&e.play())}),[d,l,t,r]),M.useEffect((()=>{const e=c.current;return l.add(u),()=>{l.remove(u),e&&(e.isPlaying&&e.stop(),e.source&&e.source._connected&&e.disconnect())}}),[]),M.createElement("positionalAudio",b.default({ref:C.default([c,s]),args:[u]},i))})),ae=M.forwardRef((({anchorX:e="center",anchorY:t="middle",font:r,children:n,characters:a,onSync:i,...s},c)=>{const l=o.useThree((({invalidate:e})=>e)),[u]=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((()=>{l(),i&&i(u)}))})),M.useEffect((()=>()=>u.dispose()),[u]),M.createElement("primitive",b.default({object:u,ref:c,font:r,text:p,anchorX:e,anchorY:t},s),f)})),ie=["string","number"],se=M.forwardRef((({font:e,loader:r,size:n=1,height:a=.2,bevelThickness:i=.1,bevelSize:s=.01,bevelEnabled:c=!1,bevelOffset:u=0,curveSegments:d=8,children:m,...f},p)=>{M.useMemo((()=>{o.extend({RenamedTextGeometry:l.TextGeometry})}),[]);const h=M.useMemo((()=>r.parse(e)),[e]),v=t.useMemo((()=>({font:h,size:n,height:a,bevelThickness:i,bevelSize:s,bevelEnabled:c,bevelOffset:u,curveSegments:d})),[h,n,a,i,s,c,u,d]),g=t.useMemo((()=>(e=>{let t="";return M.Children.map(e,(e=>{ie.includes(typeof e)&&(t+=e+"")})),t})(m)),[m]),x=M.useMemo((()=>[g,v]),[g,v]);return M.createElement("mesh",b.default({},f,{ref:p}),M.createElement("renamedTextGeometry",{args:x}),m)})),ce=M.forwardRef((({font:e,loader:t,...r},n)=>{const o=m.suspend((async()=>await(await fetch(e)).json()),[e]);return M.createElement(se,b.default({},r,{ref:n,font:o,loader:t}))})),le=M.forwardRef(((e,t)=>{const r=M.useMemo((()=>new l.FontLoader),[]);return"string"==typeof e.font?M.createElement(ce,b.default({},e,{ref:t,loader:r})):M.createElement(se,b.default({},e,{ref:t,loader:r}))})),ue=M.forwardRef((({children:e,multisamping:t=8,renderIndex:r=1,disableRender:a,disableGamma:i,disableRenderPass:s,depthBuffer:c=!0,stencilBuffer:u=!1,anisotropy:d=1,encoding:m,type:f,...p},h)=>{M.useMemo((()=>o.extend({EffectComposer:l.EffectComposer,RenderPass:l.RenderPass,ShaderPass:l.ShaderPass})),[]);const v=M.useRef(),{scene:g,camera:x,gl:y,size:E,viewport:w}=o.useThree(),[S]=M.useState((()=>{const e=new n.WebGLRenderTarget(E.width,E.height,{type:f||n.HalfFloatType,format:n.RGBAFormat,encoding:m||y.outputEncoding,depthBuffer:c,stencilBuffer:u,anisotropy:d});return e.samples=t,e}));M.useEffect((()=>{var e,t;null==(e=v.current)||e.setSize(E.width,E.height),null==(t=v.current)||t.setPixelRatio(w.dpr)}),[y,E,w.dpr]),o.useFrame((()=>{var e;a||null==(e=v.current)||e.render()}),r);const T=[];return s||T.push(M.createElement("renderPass",{key:"renderpass",attach:`passes-${T.length}`,args:[g,x]})),i||T.push(M.createElement("shaderPass",{attach:`passes-${T.length}`,key:"gammapass",args:[l.GammaCorrectionShader]})),M.Children.forEach(e,(e=>T.push(M.cloneElement(e,{key:T.length,attach:`passes-${T.length}`})))),M.createElement("effectComposer",b.default({ref:C.default([h,v]),args:[y,S]},p),T)}));function de(e,t,r,n){const o=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}),this.key="",o.forEach((([e])=>Object.defineProperty(this,e,{get:()=>this.uniforms[e].value,set:t=>this.uniforms[e].value=t}))),n&&n(this)}};return o.key=T.MathUtils.generateUUID(),o}const me=e=>e===Object(e)&&!Array.isArray(e)&&"function"!=typeof e;function fe(e,r){const a=o.useThree((e=>e.gl)),i=o.useLoader(n.TextureLoader,me(e)?Object.values(e):e);if(t.useLayoutEffect((()=>{null==r||r(i)}),[r]),t.useEffect((()=>{(Array.isArray(i)?i:[i]).forEach(a.initTexture)}),[a,i]),me(e)){const t=Object.keys(e),r={};return t.forEach((e=>Object.assign(r,{[e]:i[t.indexOf(e)]}))),r}return i}fe.preload=e=>o.useLoader.preload(n.TextureLoader,e),fe.clear=e=>o.useLoader.clear(n.TextureLoader,e);const pe=de({color:new T.Color("white"),scale:[1,1],imageBounds:[1,1],map:null,zoom:1,grayscale:0,opacity:1},"\n varying vec2 vUv;\n void main() {\n gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);\n vUv = uv;\n }\n","\n // mostly from https://gist.github.com/statico/df64c5d167362ecf7b34fca0b1459a44\n varying vec2 vUv;\n uniform vec2 scale;\n uniform vec2 imageBounds;\n uniform vec3 color;\n uniform sampler2D map;\n uniform float zoom;\n uniform float grayscale;\n uniform float opacity;\n const vec3 luma = vec3(.299, 0.587, 0.114);\n vec4 toGrayscale(vec4 color, float intensity) {\n return vec4(mix(color.rgb, vec3(dot(color.rgb, luma)), intensity), color.a);\n }\n vec2 aspect(vec2 size) {\n return size / min(size.x, size.y);\n }\n void main() {\n vec2 s = aspect(scale);\n vec2 i = aspect(imageBounds);\n float rs = s.x / s.y;\n float ri = i.x / i.y;\n vec2 new = rs < ri ? vec2(i.x * s.y / i.y, s.y) : vec2(s.x, i.y * s.x / i.x);\n vec2 offset = (rs < ri ? vec2((new.x - s.x) / 2.0, 0.0) : vec2(0.0, (new.y - s.y) / 2.0)) / new;\n vec2 uv = vUv * s / new + offset;\n vec2 zUv = (uv - vec2(0.5, 0.5)) / zoom + vec2(0.5, 0.5);\n gl_FragColor = toGrayscale(texture2D(map, zUv) * vec4(color, opacity), grayscale);\n \n #include <tonemapping_fragment>\n #include <encodings_fragment>\n }\n"),he=M.forwardRef((({children:e,color:t,segments:r=1,scale:n=1,zoom:a=1,grayscale:i=0,opacity:s=1,texture:c,toneMapped:l,transparent:u,...d},m)=>{o.extend({ImageMaterial:pe});const f=o.useThree((e=>e.gl)),p=Array.isArray(n)?[n[0],n[1]]:[n,n],h=[c.image.width,c.image.height];return M.createElement("mesh",b.default({ref:m,scale:n},d),M.createElement("planeGeometry",{args:[1,1,r,r]}),M.createElement("imageMaterial",{color:t,map:c,"map-encoding":f.outputEncoding,zoom:a,grayscale:i,opacity:s,scale:p,imageBounds:h,toneMapped:l,transparent:u}),e)})),ve=M.forwardRef((({url:e,...t},r)=>{const n=fe(e);return M.createElement(he,b.default({},t,{texture:n,ref:r}))})),ge=M.forwardRef((({url:e,...t},r)=>M.createElement(he,b.default({},t,{ref:r})))),xe=M.forwardRef(((e,t)=>{if(e.url)return M.createElement(ve,b.default({},e,{ref:t}));if(e.texture)return M.createElement(ge,b.default({},e,{ref:t}));throw new Error("<Image /> requires a url or texture")}));const ye={width:.2,length:1,decay:1,local:!1,stride:0,interval:1},Ee=(e,t=1)=>(e.set(e.subarray(t)),e.fill(-1/0,-t),e);function we(e,t){const{length:r,local:a,decay:i,interval:s,stride:c}={...ye,...t},l=M.useRef(),[u]=M.useState((()=>new n.Vector3));M.useLayoutEffect((()=>{e&&(l.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&&l.current){if(0===m.current){let t;a?t=e.position:(e.getWorldPosition(u),t=u);const r=1*i;for(let e=0;e<r;e++)t.distanceTo(d.current)<c||(Ee(l.current,3),l.current.set(t.toArray(),l.current.length-3));d.current.copy(t)}m.current++,m.current=m.current%s}})),l}const be=M.forwardRef(((e,t)=>{const{children:r}=e,{width:a,length:i,decay:s,local:c,stride:l,interval:u}={...ye,...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=we(g,{length:i,decay:s,local:c,stride:l,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 E=M.useMemo((()=>new f.MeshLine),[]),w=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((()=>{w.uniforms.resolution.value.set(h.width,h.height)}),[h]),o.useFrame((()=>{y.current&&E.setPoints(y.current,m)})),M.createElement("group",null,M.createElement("mesh",{ref:t,geometry:E,material:w}),M.createElement("group",{ref:v},r))}));function Me(e,{keys:t=["near","far","color","distance","decay","penumbra","angle","intensity","skeleton","visible","castShadow","receiveShadow","morphTargetDictionary","morphTargetInfluences","name","geometry","material","position","rotation","scale","up","userData"],deep:r,inject:n,castShadow:o,receiveShadow:a}){let i=_.default(e,t);return r&&(i.geometry&&"materialsOnly"!==r&&(i.geometry=i.geometry.clone()),i.material&&"geometriesOnly"!==r&&(i.material=i.material.clone())),n&&(i="function"==typeof n?{...i,children:n(e)}:M.isValidElement(n)?{...i,children:n}:{...i,...n}),"Mesh"===e.type&&(o&&(i.castShadow=!0),a&&(i.receiveShadow=!0)),i}const Se=M.forwardRef((({object:e,children:t,deep:r,castShadow:n,receiveShadow:o,inject:a,keys:i,...s},c)=>{const l={keys:i,deep:r,inject:a,castShadow:n,receiveShadow:o};if(Array.isArray(e))return M.createElement("group",b.default({},s,{ref:c}),e.map((e=>M.createElement(Se,b.default({key:e.uuid,object:e},l)))),t);const{children:u,...d}=Me(e,l),m=e.type[0].toLowerCase()+e.type.slice(1);return M.createElement(m,b.default({},d,s,{ref:c}),(null==e?void 0:e.children).map((e=>{let t={},r=e.type[0].toLowerCase()+e.type.slice(1);return"group"===r||"object3D"===r?(r=Se,t={object:e,...l}):t=Me(e,l),M.createElement(r,b.default({key:e.uuid},t))})),t,u)})),Te=M.forwardRef((({makeDefault:e,...t},r)=>{const n=o.useThree((({set:e})=>e)),a=o.useThree((({camera:e})=>e)),i=o.useThree((({size:e})=>e)),s=M.useRef();return M.useLayoutEffect((()=>{s.current&&!t.manual&&s.current.updateProjectionMatrix()}),[i,t]),M.useLayoutEffect((()=>{if(e&&s.current){const e=a;return n((()=>({camera:s.current}))),()=>n((()=>({camera:e})))}}),[s,e,n]),M.createElement("orthographicCamera",b.default({left:i.width/-2,right:i.width/2,top:i.height/2,bottom:i.height/-2,ref:C.default([s,r])},t))})),Pe=M.forwardRef((({makeDefault:e,...t},r)=>{const n=o.useThree((({set:e})=>e)),a=o.useThree((({camera:e})=>e)),i=o.useThree((({size:e})=>e)),s=M.useRef();return M.useLayoutEffect((()=>{const{current:e}=s;e&&!t.manual&&(e.aspect=i.width/i.height,e.updateProjectionMatrix())}),[i,t]),M.useLayoutEffect((()=>{if(e&&s.current){const e=a;return n((()=>({camera:s.current}))),()=>n((()=>({camera:e})))}}),[s,e,n]),M.createElement("perspectiveCamera",b.default({ref:C.default([s,r])},t))}));const Ce=M.forwardRef(((e,t)=>{const{camera:r,onChange:n,...a}=e,i=o.useThree((e=>e.camera)),s=o.useThree((e=>e.invalidate)),c=r||i,[u]=M.useState((()=>new l.DeviceOrientationControls(c)));return M.useEffect((()=>{const e=e=>{s(),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,s]),o.useFrame((()=>null==u?void 0:u.update()),-1),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})),Re=M.forwardRef((({domElement:e,...t},r)=>{const{onChange:n,...a}=t,i=o.useThree((e=>e.invalidate)),s=o.useThree((e=>e.camera)),c=o.useThree((e=>e.gl)),u=o.useThree((e=>e.events)),d=e||u.connected||c.domElement,[m]=M.useState((()=>new l.FlyControls(s,d)));return M.useEffect((()=>{const e=e=>{i(),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,i]),o.useFrame(((e,t)=>null==m?void 0:m.update(t))),m?M.createElement("primitive",b.default({ref:r,object:m},a)):null})),_e=M.forwardRef(((e={enableDamping:!0},t)=>{const{domElement:r,camera:n,onChange:a,onStart:i,onEnd:s,...c}=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 l.MapControls(h)),[h]);return M.useEffect((()=>{v.connect(p);const e=e=>{u(),a&&a(e)};return v.addEventListener("change",e),i&&v.addEventListener("start",i),s&&v.addEventListener("end",s),()=>{v.dispose(),v.removeEventListener("change",e),i&&v.removeEventListener("start",i),s&&v.removeEventListener("end",s)}}),[a,i,s,v,u,p]),o.useFrame((()=>v.update()),-1),M.createElement("primitive",b.default({ref:t,object:v,enableDamping:!0},c))})),Le=M.forwardRef((({makeDefault:e,camera:t,regress:r,domElement:n,enableDamping:a=!0,onChange:i,onStart:s,onEnd:c,...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,E=n||h.connected||p.domElement,w=M.useMemo((()=>new l.OrbitControls(y)),[y]);return o.useFrame((()=>{w.enabled&&w.update()}),-1),M.useEffect((()=>(w.connect(E),()=>{w.dispose()})),[E,r,w,m]),M.useEffect((()=>{const e=e=>{m(),r&&x.regress(),i&&i(e)};return w.addEventListener("change",e),s&&w.addEventListener("start",s),c&&w.addEventListener("end",c),()=>{s&&w.removeEventListener("start",s),c&&w.removeEventListener("end",c),w.removeEventListener("change",e)}}),[i,s,c]),M.useEffect((()=>{if(e){const e=g().controls;return v({controls:w}),()=>v({controls:e})}}),[e,w]),M.createElement("primitive",b.default({ref:d,object:w,enableDamping:a},u))})),De=M.forwardRef((({makeDefault:e,camera:t,domElement:r,regress:n,onChange:a,onStart:i,onEnd:s,...c},u)=>{const{invalidate:d,camera:m,gl:f,events:p,set:h,get:v,performance:g,viewport:x}=o.useThree(),y=t||m,E=r||p.connected||f.domElement,w=M.useMemo((()=>new l.TrackballControls(y)),[y]);return o.useFrame((()=>{w.enabled&&w.update()}),-1),M.useEffect((()=>(w.connect(E),()=>{w.dispose()})),[E,n,w,d]),M.useEffect((()=>{const e=e=>{d(),n&&g.regress(),a&&a(e)};return w.addEventListener("change",e),i&&w.addEventListener("start",i),s&&w.addEventListener("end",s),()=>{i&&w.removeEventListener("start",i),s&&w.removeEventListener("end",s),w.removeEventListener("change",e)}}),[a,i,s]),M.useEffect((()=>{w.handleResize()}),[x]),M.useEffect((()=>{if(e){const e=v().controls;return h({controls:w}),()=>h({controls:e})}}),[e,w]),M.createElement("primitive",b.default({ref:u,object:w},c))})),ze=t.forwardRef((({camera:e,makeDefault:r,regress:n,domElement:a,onChange:i,onStart:s,onEnd:c,...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,E=a||h.connected||p.domElement,w=t.useMemo((()=>new l.ArcballControls(y)),[y]);return o.useFrame((()=>{w.enabled&&w.update()}),-1),t.useEffect((()=>(w.connect(E),()=>{w.dispose()})),[E,n,w,m]),t.useEffect((()=>{const e=e=>{m(),n&&x.regress(),i&&i(e)};return w.addEventListener("change",e),s&&w.addEventListener("start",s),c&&w.addEventListener("end",c),()=>{w.removeEventListener("change",e),s&&w.removeEventListener("start",s),c&&w.removeEventListener("end",c)}}),[i,s,c]),t.useEffect((()=>{if(r){const e=g().controls;return v({controls:w}),()=>v({controls:e})}}),[r,w]),M.createElement("primitive",b.default({ref:d,object:w},u))})),Ae=M.forwardRef((({children:e,domElement:t,onChange:r,onMouseDown:n,onMouseUp:a,onObjectChange:i,object:s,...c},u)=>{const d=["enabled","axis","mode","translationSnap","rotationSnap","scaleSnap","space","size","showX","showY","showZ"],{camera:m,...f}=c,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)),E=o.useThree((e=>e.invalidate)),w=m||y,S=t||x.connected||g.domElement,P=M.useMemo((()=>new l.TransformControls(w,S)),[w,S]),C=M.useRef();return M.useLayoutEffect((()=>(s?P.attach(s instanceof T.Object3D?s:s.current):C.current instanceof T.Object3D&&P.attach(C.current),()=>{P.detach()})),[s,e,P]),M.useEffect((()=>{if(v){const e=e=>v.enabled=!e.value;return P.addEventListener("dragging-changed",e),()=>P.removeEventListener("dragging-changed",e)}}),[P,v]),M.useEffect((()=>{const e=e=>{E(),r&&r(e)};return null==P||null==P.addEventListener||P.addEventListener("change",e),n&&(null==P||null==P.addEventListener||P.addEventListener("mouseDown",n)),a&&(null==P||null==P.addEventListener||P.addEventListener("mouseUp",a)),i&&(null==P||null==P.addEventListener||P.addEventListener("objectChange",i)),()=>{null==P||null==P.removeEventListener||P.removeEventListener("change",e),n&&(null==P||null==P.removeEventListener||P.removeEventListener("mouseDown",n)),a&&(null==P||null==P.removeEventListener||P.removeEventListener("mouseUp",a)),i&&(null==P||null==P.removeEventListener||P.removeEventListener("objectChange",i))}}),[r,n,a,i,P,E]),P?M.createElement(M.Fragment,null,M.createElement("primitive",b.default({ref:u,object:P},p)),M.createElement("group",b.default({ref:C},h),e)):null})),Fe=M.forwardRef((({domElement:e,selector:t,onChange:r,onLock:n,onUnlock:a,enabled:i=!0,...s},c)=>{const{camera:u,...d}=s,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,[E]=M.useState((()=>new l.PointerLockControls(x)));return M.useEffect((()=>{if(i){E.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)}}),()=>{E.disconnect(),f({compute:e})}}}),[i,E]),M.useEffect((()=>{const e=e=>{v(),r&&r(e)};E.addEventListener("change",e),n&&E.addEventListener("lock",n),a&&E.addEventListener("unlock",a);const o=()=>E.lock(),i=t?Array.from(document.querySelectorAll(t)):[document];return i.forEach((e=>e&&e.addEventListener("click",o))),()=>{E.removeEventListener("change",e),n&&E.addEventListener("lock",n),a&&E.addEventListener("unlock",a),i.forEach((e=>e?e.removeEventListener("click",o):void 0))}}),[r,n,a,t]),M.createElement("primitive",b.default({ref:c,object:E},d))})),Be=M.forwardRef((({domElement:e,...t},r)=>{const n=o.useThree((e=>e.camera)),a=o.useThree((e=>e.gl)),i=o.useThree((e=>e.events)),s=e||i.connected||a.domElement,[c]=M.useState((()=>new l.FirstPersonControls(n,s)));return o.useFrame(((e,t)=>{c.update(t)}),-1),c?M.createElement("primitive",b.default({ref:r,object:c},t)):null}));function ke(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 i=this.constructor.prototype.raycast.bind(this);i&&i(a,o)}}));return a}const Ue=M.createContext({}),je=()=>M.useContext(Ue),Ve=2*Math.PI,Oe=new n.Object3D,Ie=new n.Matrix4,[We,Ne]=[new n.Quaternion,new n.Quaternion],Ge=new n.Vector3,He=new n.Vector3,$e="#f0f0f0",qe="#999",Xe="black",Ye="black",Ze=["Right","Left","Top","Bottom","Front","Back"],Ke=e=>new n.Vector3(...e).multiplyScalar(.38),Je=[[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(Ke),Qe=[.25,.25,.25],et=[[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(Ke),tt=et.map((e=>e.toArray().map((e=>0==e?.5:.25)))),rt=({hover:e,index:t,font:r="20px Inter var, Arial, sans-serif",faces:a=Ze,color:i=$e,hoverColor:s=qe,textColor:c=Xe,strokeColor:l=Ye,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=i,o.fillRect(0,0,e.width,e.height),o.strokeStyle=l,o.strokeRect(0,0,e.width,e.height),o.font=r,o.textAlign="center",o.fillStyle=c,o.fillText(a[t].toUpperCase(),64,76),new n.CanvasTexture(e)}),[t,a,r,i,c,l]);return M.createElement("meshLambertMaterial",{map:m,"map-encoding":d.outputEncoding,"map-anisotropy":d.capabilities.getMaxAnisotropy()||1,attach:`material-${t}`,color:e?s:"white",transparent:!0,opacity:u})},nt=e=>{const{tweenCamera:t,raycast:r}=je(),[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(rt,b.default({key:r,index:r,hover:n===r},e)))),M.createElement("boxGeometry",null))},ot=({onClick:e,dimensions:t,position:r,hoverColor:n=qe})=>{const{tweenCamera:o,raycast:a}=je(),[i,s]=M.useState(!1);return M.createElement("mesh",{scale:1.01,position:r,raycast:a,onPointerOver:e=>{e.stopPropagation(),s(!0)},onPointerOut:e=>{e.stopPropagation(),s(!1)},onClick:e||(e=>{e.stopPropagation(),o(r)})},M.createElement("meshBasicMaterial",{color:i?n:"white",transparent:!0,opacity:.6,visible:i}),M.createElement("boxGeometry",{args:t}))};function at({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 it({onClick:e,font:t,disabled:r,arcStyle:a,label:i,labelColor:s,axisHeadScale:c=1,...l}){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(),i&&(r.font=t,r.textAlign="center",r.fillStyle=s,r.fillText(i,32,41)),new n.CanvasTexture(e)}),[a,i,s,t]),[m,f]=M.useState(!1),p=(i?1:.75)*(m?1.2:1)*c;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)})},l),M.createElement("spriteMaterial",{map:d,"map-encoding":u.outputEncoding,"map-anisotropy":u.capabilities.getMaxAnisotropy()||1,alphaTest:.3,opacity:i?1:.75,toneMapped:!1}))}function st(e,{path:t}){const[r]=o.useLoader(n.CubeTextureLoader,[e],(e=>e.setPath(t)));return r}function ct(e){return o.useLoader(l.FBXLoader,e)}st.preload=(e,{path:t})=>o.useLoader.preload(n.CubeTextureLoader,[e],(e=>e.setPath(t))),ct.preload=e=>o.useLoader.preload(l.FBXLoader,e),ct.clear=e=>o.useLoader.clear(l.FBXLoader,e);let lt=null;function ut(e,t,r){return n=>{r&&r(n),e&&(lt||(lt=new l.DRACOLoader),lt.setDecoderPath("string"==typeof e?e:"https://www.gstatic.com/draco/versioned/decoders/1.4.3/"),n.setDRACOLoader(lt)),t&&n.setMeshoptDecoder("function"==typeof l.MeshoptDecoder?l.MeshoptDecoder():l.MeshoptDecoder)}}function dt(e,t=!0,r=!0,n){return o.useLoader(l.GLTFLoader,e,ut(t,r,n))}dt.preload=(e,t=!0,r=!0,n)=>o.useLoader.preload(l.GLTFLoader,e,ut(t,r,n)),dt.clear=e=>o.useLoader.clear(l.GLTFLoader,e);const mt="https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master";function ft(e,r=`${mt}/basis/`){const n=o.useThree((e=>e.gl)),a=o.useLoader(l.KTX2Loader,me(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]),me(e)){const t=Object.keys(e),r={};return t.forEach((e=>Object.assign(r,{[e]:a[t.indexOf(e)]}))),r}return a}function pt(e,t){"function"==typeof e?e(t):null!=e&&(e.current=t)}function ht(e,t,r){const{gl:n,size:a,viewport:i}=o.useThree(),s="number"==typeof e?e:a.width*i.dpr,c="number"==typeof t?t:a.height*i.dpr,l=("number"==typeof e?r:e)||{},{samples:u,...d}=l,m=M.useMemo((()=>{let e;return e=new T.WebGLRenderTarget(s,c,{minFilter:T.LinearFilter,magFilter:T.LinearFilter,encoding:n.outputEncoding,type:T.HalfFloatType,...d}),e.samples=u,e}),[]);return M.useLayoutEffect((()=>{m.setSize(s,c),u&&(m.samples=u)}),[u,m,s,c]),M.useEffect((()=>()=>m.dispose()),[]),m}ft.preload=(e,t=`${mt}/basis/`)=>o.useLoader.preload(l.KTX2Loader,e,(e=>{e.setTranscoderPath(t)})),ft.clear=e=>o.useLoader.clear(l.KTX2Loader,e);const vt=M.forwardRef((({children:e,curve:t},r)=>{const[n]=M.useState((()=>new T.Scene)),[a,i]=M.useState(),s=M.useRef();return M.useEffect((()=>{s.current=new l.Flow(n.children[0]),i(s.current.object3D)}),[e]),M.useEffect((()=>{var e;t&&(null==(e=s.current)||e.updateCurve(0,t))}),[t]),M.useImperativeHandle(r,(()=>({moveAlongCurve:e=>{var t;null==(t=s.current)||t.moveAlongCurve(e)}}))),M.createElement(M.Fragment,null,o.createPortal(e,n),a&&M.createElement("primitive",{object:a}))}));class gt 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 xt=M.forwardRef((({speed:e=1,...t},r)=>{const[n]=M.useState((()=>new gt));return o.useFrame((t=>n&&(n.time=t.clock.getElapsedTime()*e))),M.createElement("primitive",b.default({object:n,ref:r,attach:"material"},t))}));class yt 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 Et=M.forwardRef((({speed:e=1,...t},r)=>{const[n]=M.useState((()=>new yt));return o.useFrame((t=>n&&(n.time=t.clock.getElapsedTime()*e))),M.createElement("primitive",b.default({object:n,ref:r,attach:"material"},t))}));class wt 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 bt{constructor({gl:e,resolution:t,width:r=500,height:o=500,minDepthThreshold:a=0,maxDepthThreshold:i=1,depthScale:s=0,depthToBlurRatioBias:c=.25}){this.renderToScreen=!1,this.renderTargetA=new n.WebGLRenderTarget(t,t,{minFilter:n.LinearFilter,magFilter:n.LinearFilter,stencilBuffer:!1,depthBuffer:!1,encoding:e.outputEncoding}),this.renderTargetB=this.renderTargetA.clone(),this.convolutionMaterial=new wt,this.convolutionMaterial.setTexelSize(1/r,1/o),this.convolutionMaterial.setResolution(new n.Vector2(r,o)),this.scene=new n.Scene,this.camera=new n.Camera,this.convolutionMaterial.uniforms.minDepthThreshold.value=a,this.convolutionMaterial.uniforms.maxDepthThreshold.value=i,this.convolutionMaterial.uniforms.depthScale.value=s,this.convolutionMaterial.uniforms.depthToBlurRatioBias.value=c,this.convolutionMaterial.defines.USE_DEPTH=s>0;const l=new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),u=new Float32Array([0,0,2,0,0,2]),d=new n.BufferGeometry;d.setAttribute("position",new n.BufferAttribute(l,3)),d.setAttribute("uv",new n.BufferAttribute(u,2)),this.screen=new n.Mesh(d,this.convolutionMaterial),this.screen.frustumCulled=!1,this.scene.add(this.screen)}render(e,t,r){const n=this.scene,o=this.camera,a=this.renderTargetA,i=this.renderTargetB;let s=this.convolutionMaterial,c=s.uniforms;c.depthBuffer.value=t.depthTexture;const l=s.kernel;let u,d,m,f=t;for(d=0,m=l.length-1;d<m;++d)u=0==(1&d)?a:i,c.kernel.value=l[d],c.inputBuffer.value=f.texture,e.setRenderTarget(u),e.render(n,o),f=u;c.kernel.value=l[d],c.inputBuffer.value=f.texture,e.setRenderTarget(this.renderToScreen?null:r),e.render(n,o)}}class Mt 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:Mt});const St=M.forwardRef((({mixBlur:e=0,mixStrength:t=1,resolution:r=256,blur:a=[0,0],minDepthThreshold:i=.9,maxDepthThreshold:s=1,depthScale:c=0,depthToBlurRatioBias:l=.25,mirror:u=0,distortion:d=1,mixContrast:m=1,distortionMap:f,reflectorOffset:p=0,...h},v)=>{const g=o.useThree((({gl:e})=>e)),x=o.useThree((({camera:e})=>e)),y=o.useThree((({scene:e})=>e)),E=(a=Array.isArray(a)?a:[a,a])[0]+a[1]>0,w=M.useRef(null),[S]=M.useState((()=>new n.Plane)),[T]=M.useState((()=>new n.Vector3)),[P]=M.useState((()=>new n.Vector3)),[R]=M.useState((()=>new n.Vector3)),[_]=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)),[A]=M.useState((()=>new n.Vector3)),[F]=M.useState((()=>new n.Vector4)),[B]=M.useState((()=>new n.Matrix4)),[k]=M.useState((()=>new n.PerspectiveCamera)),U=M.useCallback((()=>{var e;const t=w.current.parent||(null==(e=w.current)?void 0:e.__r3f.parent);if(!t)return;if(P.setFromMatrixPosition(t.matrixWorld),R.setFromMatrixPosition(x.matrixWorld),_.extractRotation(t.matrixWorld),T.set(0,0,1),T.applyMatrix4(_),P.addScaledVector(T,p),z.subVectors(P,R),z.dot(T)>0)return;z.reflect(T).negate(),z.add(P),_.extractRotation(x.matrixWorld),L.set(0,0,-1),L.applyMatrix4(_),L.add(R),A.subVectors(P,L),A.reflect(T).negate(),A.add(P),k.position.copy(z),k.up.set(0,1,0),k.up.applyMatrix4(_),k.up.reflect(T),k.lookAt(A),k.far=x.far,k.updateMatrixWorld(),k.projectionMatrix.copy(x.projectionMatrix),B.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),B.multiply(k.projectionMatrix),B.multiply(k.matrixWorldInverse),B.multiply(t.matrixWorld),S.setFromNormalAndCoplanarPoint(T,P),S.applyMatrix4(k.matrixWorldInverse),D.set(S.normal.x,S.normal.y,S.normal.z,S.constant);const r=k.projectionMatrix;F.x=(Math.sign(D.x)+r.elements[8])/r.elements[0],F.y=(Math.sign(D.y)+r.elements[9])/r.elements[5],F.z=-1,F.w=(1+r.elements[10])/r.elements[14],D.multiplyScalar(2/D.dot(F)),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,O,I]=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 bt({gl:g,resolution:r,width:a[0],height:a[1],minDepthThreshold:i,maxDepthThreshold:s,depthScale:c,depthToBlurRatioBias:l}),{mirror:u,textureMatrix:B,mixBlur:e,tDiffuse:p.texture,tDepth:p.depthTexture,tDiffuseBlur:h.texture,hasBlur:E,mixStrength:t,minDepthThreshold:i,maxDepthThreshold:s,depthScale:c,depthToBlurRatioBias:l,distortion:d,distortionMap:f,mixContrast:m,"defines-USE_BLUR":E?"":void 0,"defines-USE_DEPTH":c>0?"":void 0,"defines-USE_DISTORTION":f?"":void 0}]}),[g,a,B,r,u,E,e,t,i,s,c,l,d,f,m]);return o.useFrame((()=>{var e;const t=w.current.parent||(null==(e=w.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),E&&O.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"+I["defines-USE_BLUR"]+I["defines-USE_DEPTH"]+I["defines-USE_DISTORTION"],ref:C.default([w,v])},I,h))}));class Tt 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 Pt=M.forwardRef(((e,t)=>{const[r]=M.useState((()=>new Tt(null)));return M.createElement("primitive",b.default({},e,{object:r,ref:t,attach:"material"}))}));let Ct=!1;function Rt(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 _t=Rt("box"),Lt=Rt("circle"),Dt=Rt("cone"),zt=Rt("cylinder"),At=Rt("sphere"),Ft=Rt("plane"),Bt=Rt("tube"),kt=Rt("torus"),Ut=Rt("torusKnot"),jt=Rt("tetrahedron"),Vt=Rt("ring"),Ot=Rt("polyhedron"),It=Rt("icosahedron"),Wt=Rt("octahedron"),Nt=Rt("dodecahedron"),Gt=Rt("extrude"),Ht=Rt("lathe"),$t=1e-5;const qt=M.forwardRef((function({args:[e=1,t=1,r=1]=[],radius:o=.05,steps:a=1,smoothness:i=4,children:s,...c},l){const u=M.useMemo((()=>function(e,t,r){const o=new n.Shape,a=r-$t;return o.absarc($t,$t,$t,-Math.PI/2,-Math.PI,!0),o.absarc($t,t-2*a,$t,Math.PI,Math.PI/2,!0),o.absarc(e-2*a,t-2*a,$t,Math.PI/2,0,!0),o.absarc(e-2*a,$t,$t,0,-Math.PI/2,!0),o}(e,t,o)),[e,t,o]),d=M.useMemo((()=>({depth:r-2*o,bevelEnabled:!0,bevelSegments:2*i,steps:a,bevelSize:o-$t,bevelThickness:o,curveSegments:i})),[r,o,i]),m=M.useRef();return M.useLayoutEffect((()=>{m.current&&m.current.center()}),[u,d]),M.createElement("mesh",b.default({ref:l},c),M.createElement("extrudeGeometry",{ref:m,args:[u,d]}),s)}));function Xt(){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 Yt=M.forwardRef((function({children:e,...t},r){const n=M.useMemo(Xt,[]);return M.createElement("mesh",b.default({ref:r,geometry:n,frustumCulled:!1},t),e)})),Zt=M.forwardRef((function({children:e,alignTop:t,...r},o){const a=M.useRef(null),i=M.useRef(null);return M.useLayoutEffect((()=>{a.current.position.set(0,0,0),a.current.updateWorldMatrix(!0,!0);const e=(new n.Box3).setFromObject(i.current),r=new n.Vector3,o=new n.Sphere,s=e.max.y-e.min.y;e.getCenter(r),e.getBoundingSphere(o),a.current.position.set(-r.x,-r.y+(t?s/2:0),-r.z)}),[e]),M.createElement("group",b.default({ref:o},r),M.createElement("group",{ref:a},M.createElement("group",{ref:i},e)))})),Kt=e=>e&&e.isOrthographicCamera,Jt=M.createContext(null);const Qt=M.forwardRef((({intensity:e=1,decay:t,decayRate:r=.65,maxYaw:n=.1,maxPitch:a=.1,maxRoll:i=.1,yawFrequency:s=.1,pitchFrequency:c=.1,rollFrequency:u=.1},d)=>{const m=o.useThree((e=>e.camera)),f=o.useThree((e=>e.controls)),p=M.useRef(e),h=M.useRef(m.rotation.clone()),[v]=M.useState((()=>new l.SimplexNoise)),[g]=M.useState((()=>new l.SimplexNoise)),[x]=M.useState((()=>new l.SimplexNoise)),y=()=>{(p.current<0||p.current>1)&&(p.current=p.current<0?0:1)};return M.useImperativeHandle(d,(()=>({getIntensity:()=>p.current,setIntensity:e=>{p.current=e,y()}})),[]),M.useEffect((()=>{if(f){const e=()=>{h.current=m.rotation.clone()};return f.addEventListener("change",e),e(),()=>{f.removeEventListener("change",e)}}}),[m,f]),o.useFrame(((e,o)=>{const l=Math.pow(p.current,2),d=n*l*v.noise(e.clock.elapsedTime*s,1),f=a*l*g.noise(e.clock.elapsedTime*c,1),E=i*l*x.noise(e.clock.elapsedTime*u,1);m.rotation.set(h.current.x+f,h.current.y+d,h.current.z+E),t&&p.current>0&&(p.current-=r*o,y())})),null})),er=M.forwardRef((({children:e,speed:t=1,rotationIntensity:r=1,floatIntensity:n=1,...a},i)=>{const s=M.useRef(null),c=M.useRef(1e4*Math.random());return o.useFrame((e=>{const o=c.current+e.clock.getElapsedTime();s.current.rotation.x=Math.cos(o/4*t)/8*r,s.current.rotation.y=Math.sin(o/4*t)/8*r,s.current.rotation.z=Math.sin(o/4*t)/20*r,s.current.position.y=Math.sin(o/4*t)/10*n})),M.createElement("group",a,M.createElement("group",{ref:C.default([s,i])},e))})),tr={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"};const rr=e=>{return(t=e).current&&t.current.isScene?e.current:e;var t};function nr({scene:e,background:t=!1,map:r}){const n=o.useThree((e=>e.scene));return M.useLayoutEffect((()=>{if(r){const o=rr(e||n),a=o.background,i=o.environment;return"only"!==t&&(o.environment=r),t&&(o.background=r),()=>{"only"!==t&&(o.environment=i),t&&(o.background=a)}}}),[n,e,r,t]),null}function or({files:e=["/px.png","/nx.png","/py.png","/ny.png","/pz.png","/nz.png"],path:t="",preset:r,extensions:a}){if(r){if(!(r in tr))throw new Error("Preset must be one of: "+Object.keys(tr).join(", "));e=tr[r],t="https://market-assets.fra1.cdn.digitaloceanspaces.com/market-assets/hdris/"}const i=Array.isArray(e),s=i?n.CubeTextureLoader:l.RGBELoader,c=o.useLoader(s,i?[e]:e,(e=>{e.setPath(t),a&&a(e)})),u=i?c[0]:c;return u.mapping=i?n.CubeReflectionMapping:n.EquirectangularReflectionMapping,u}function ar({background:e=!1,scene:t,...r}){const n=or(r),a=o.useThree((e=>e.scene));return M.useLayoutEffect((()=>{const r=rr(t||a),o=r.background,i=r.environment;return"only"!==e&&(r.environment=n),e&&(r.background=n),()=>{"only"!==e&&(r.environment=i),e&&(r.background=o)}}),[n,e,t,a]),null}function ir({children:e,near:t=1,far:r=1e3,resolution:a=256,frames:i=1,map:s,background:c=!1,scene:l,files:u,path:d,preset:m,extensions:f}){const p=o.useThree((e=>e.gl)),h=o.useThree((e=>e.scene)),v=M.useRef(null),[g]=M.useState((()=>new n.Scene)),x=M.useMemo((()=>{const e=new n.WebGLCubeRenderTarget(a);return e.texture.type=n.HalfFloatType,e}),[a]);M.useLayoutEffect((()=>{1===i&&v.current.update(p,g);const e=rr(l||h),t=e.background,r=e.environment;return"only"!==c&&(e.environment=x.texture),c&&(e.background=x.texture),()=>{"only"!==c&&(e.environment=r),c&&(e.background=t)}}),[e,g,x.texture,l,h,c,i,p]);let y=1;return o.useFrame((()=>{(i===1/0||y<i)&&(v.current.update(p,g),y++)})),M.createElement(M.Fragment,null,o.createPortal(M.createElement(M.Fragment,null,e,M.createElement("cubeCamera",{ref:v,args:[t,r,x]}),u||m?M.createElement(ar,{background:!0,files:u,preset:m,path:d,extensions:f}):s?M.createElement(nr,{background:!0,map:s,extensions:f}):null),g))}function sr(e){var t,r,o,a;const i=or(e),s=e.map||i,c=(l=s)&&l.isCubeTexture;var l;const u=M.useMemo((()=>{var e,t;const r=(null!==(e=c?null==(t=s.image[0])?void 0:t.width:s.image.width)&&void 0!==e?e:1024)/4,n=Math.floor(Math.log2(r)),o=Math.pow(2,n),a=3*Math.max(o,112);return[c?"#define ENVMAP_TYPE_CUBE":"","#define CUBEUV_TEXEL_WIDTH "+1/a,"#define CUBEUV_TEXEL_HEIGHT "+1/(4*o),`#define CUBEUV_MAX_MIP ${n}.0`,""]}),[]),d=M.useMemo((()=>u.join("\n")+"#define GLSLIFY 1\n#define ENVMAP_TYPE_CUBE_UV\nvarying vec3 vWorldPosition;uniform float radius;uniform float height;\n#ifdef ENVMAP_TYPE_CUBE\nuniform samplerCube cubemap;\n#else\nuniform sampler2D cubemap;\n#endif\nfloat diskIntersect(in vec3 ro,in vec3 rd,vec3 c,vec3 n,float r){vec3 o=ro-c;float t=-dot(n,o)/dot(rd,n);vec3 q=o+rd*t;return(dot(q,q)<r*r)? t : 1e6;}float sphereIntersect(in vec3 ro,in vec3 rd,in vec3 ce,float ra){vec3 oc=ro-ce;float b=dot(oc,rd);float c=dot(oc,oc)-ra*ra;float h=b*b-c;if(h<0.0)-1.0;h=sqrt(h);return-b+h;}vec3 project(){vec3 p=normalize(vWorldPosition);vec3 camPos=cameraPosition;camPos.y-=height;float intersection=sphereIntersect(camPos,p,vec3(0.),radius);if(intersection>0.){vec3 h=vec3(0.0,-height,0.0);float intersection2=diskIntersect(camPos,p,h,vec3(0.0,-1.0,0.0),radius);p=(camPos+min(intersection,intersection2)*p)/radius;}else{p=vec3(0.0,1.0,0.0);}return p;}\n#include <common>\n#include <cube_uv_reflection_fragment>\nvoid main(){vec3 projectedWorldPosition=project();\n#ifdef ENVMAP_TYPE_CUBE\nvec3 outcolor=textureCube(cubemap,projectedWorldPosition).rgb;\n#else\nvec3 direction=normalize(projectedWorldPosition);vec2 uv=equirectUv(direction);vec3 outcolor=texture2D(cubemap,uv).rgb;\n#endif\ngl_FragColor=vec4(outcolor,1.0);\n#include <tonemapping_fragment>\n#include <encodings_fragment>\n}"),[u]),m=M.useMemo((()=>({cubemap:{value:null},height:{value:15},radius:{value:60}})),[]),f=M.useRef(null),p=null==(t=e.ground)?void 0:t.height,h=null==(r=e.ground)?void 0:r.radius,v=null!==(o=null==(a=e.ground)?void 0:a.scale)&&void 0!==o?o:1e3;return M.useEffect((()=>{p&&(f.current.uniforms.height.value=p)}),[p]),M.useEffect((()=>{h&&(f.current.uniforms.radius.value=h)}),[h]),M.useEffect((()=>{f.current.uniforms.cubemap.value=s}),[s]),M.createElement(M.Fragment,null,M.createElement(nr,b.default({},e,{map:s})),M.createElement(It,{scale:v,args:[1,16]},M.createElement("shaderMaterial",{ref:f,side:n.BackSide,vertexShader:"#define GLSLIFY 1\nvarying vec3 vWorldPosition;void main(){vec4 worldPosition=modelMatrix*vec4(position,1.0);vWorldPosition=worldPosition.xyz;gl_Position=projectionMatrix*modelViewMatrix*vec4(position,1.0);}",fragmentShader:d,uniforms:m})))}function cr(e){return e.ground?M.createElement(sr,e):e.map?M.createElement(nr,e):e.children?M.createElement(ir,e):M.createElement(ar,e)}const lr=M.forwardRef((({scale:e=10,frames:t=1/0,opacity:r=1,width:n=1,height:a=1,blur:i=1,far:s=10,resolution:c=512,smooth:u=!0,color:d="#000000",depthWrite:m=!1,renderOrder:f,...p},h)=>{const v=o.useThree((e=>e.scene)),g=o.useThree((e=>e.gl)),x=M.useRef(null);n*=Array.isArray(e)?e[0]:e||1,a*=Array.isArray(e)?e[1]:e||1;const[y,E,w,S,P,C,R]=M.useMemo((()=>{const e=new T.WebGLRenderTarget(c,c),t=new T.WebGLRenderTarget(c,c);t.texture.generateMipmaps=e.texture.generateMipmaps=!1;const r=new T.PlaneBufferGeometry(n,a).rotateX(Math.PI/2),o=new T.Mesh(r),i=new T.MeshDepthMaterial;i.depthTest=i.depthWrite=!1,i.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 s=new T.ShaderMaterial(l.HorizontalBlurShader),u=new T.ShaderMaterial(l.VerticalBlurShader);return u.depthTest=s.depthTest=!1,[e,r,i,o,s,u,t]}),[c,n,a,e,d]),_=e=>{S.visible=!0,S.material=P,P.uniforms.tDiffuse.value=y.texture,P.uniforms.h.value=1*e/256,g.setRenderTarget(R),g.render(S,x.current),S.material=C,C.uniforms.tDiffuse.value=R.texture,C.uniforms.v.value=1*e/256,g.setRenderTarget(y),g.render(S,x.current),S.visible=!1};let L=0;return o.useFrame((()=>{if(x.current&&(t===1/0||L<t)){const e=v.background;v.background=null;const t=v.overrideMaterial;v.overrideMaterial=w,g.setRenderTarget(y),g.render(v,x.current),v.overrideMaterial=t,_(i),u&&_(.4*i),g.setRenderTarget(null),v.background=e,L++}})),M.createElement("group",b.default({"rotation-x":Math.PI/2},p,{ref:h}),M.createElement("mesh",{renderOrder:f,geometry:E,scale:[1,-1,1],rotation:[-Math.PI/2,0,0]},M.createElement("meshBasicMaterial",{map:y.texture,"map-encoding":g.outputEncoding,transparent:!0,opacity:r,depthWrite:m})),M.createElement("orthographicCamera",{ref:x,args:[-n/2,n/2,a/2,-a/2,0,s]}))})),ur={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 dr=e=>0===e?0:Math.pow(2,10*e-10);const mr=M.forwardRef((({fog:e=!1,renderOrder:t,depthWrite:r=!1,colorStop:o=0,color:a="black",opacity:i=.5,...s},c)=>{const l=M.useMemo((()=>{const e=document.createElement("canvas");e.width=128,e.height=128;const t=e.getContext("2d"),r=t.createRadialGradient(e.width/2,e.height/2,0,e.width/2,e.height/2,e.width/2);return r.addColorStop(o,new n.Color(a).getStyle()),r.addColorStop(1,"rgba(0,0,0,0)"),t.fillStyle=r,t.fillRect(0,0,e.width,e.height),e}),[a,o]);return M.createElement("mesh",b.default({renderOrder:t,ref:c,"rotation-x":-Math.PI/2},s),M.createElement("planeGeometry",null),M.createElement("meshBasicMaterial",{transparent:!0,opacity:i,fog:e,depthWrite:r,side:n.DoubleSide},M.createElement("canvasTexture",{attach:"map",args:[l]})))}));o.extend({MeshReflectorMaterial:Mt});const fr=M.forwardRef((({mixBlur:e=0,mixStrength:t=.5,resolution:r=256,blur:a=[0,0],args:i=[1,1],minDepthThreshold:s=.9,maxDepthThreshold:c=1,depthScale:l=0,depthToBlurRatioBias:u=.25,mirror:d=0,children:m,debug:f=0,distortion:p=1,mixContrast:h=1,distortionMap:v,...g},x)=>{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)),E=o.useThree((({camera:e})=>e)),w=o.useThree((({scene:e})=>e)),S=(a=Array.isArray(a)?a:[a,a])[0]+a[1]>0,T=M.useRef(null),[P]=M.useState((()=>new n.Plane)),[R]=M.useState((()=>new n.Vector3)),[_]=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))),[A]=M.useState((()=>new n.Vector4)),[F]=M.useState((()=>new n.Vector3)),[B]=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(_.setFromMatrixPosition(T.current.matrixWorld),L.setFromMatrixPosition(E.matrixWorld),D.extractRotation(T.current.matrixWorld),R.set(0,0,1),R.applyMatrix4(D),F.subVectors(_,L),F.dot(R)>0)return;F.reflect(R).negate(),F.add(_),D.extractRotation(E.matrixWorld),z.set(0,0,-1),z.applyMatrix4(D),z.add(L),B.subVectors(_,z),B.reflect(R).negate(),B.add(_),j.position.copy(F),j.up.set(0,1,0),j.up.applyMatrix4(D),j.up.reflect(R),j.lookAt(B),j.far=E.far,j.updateMatrixWorld(),j.projectionMatrix.copy(E.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),P.setFromNormalAndCoplanarPoint(R,_),P.applyMatrix4(j.matrixWorldInverse),A.set(P.normal.x,P.normal.y,P.normal.z,P.constant);const e=j.projectionMatrix;k.x=(Math.sign(A.x)+e.elements[8])/e.elements[0],k.y=(Math.sign(A.y)+e.elements[9])/e.elements[5],k.z=-1,k.w=(1+e.elements[10])/e.elements[14],A.multiplyScalar(2/A.dot(k)),e.elements[2]=A.x,e.elements[6]=A.y,e.elements[10]=A.z+1,e.elements[14]=A.w}),[]),[O,I,W,N]=M.useMemo((()=>{const o={minFilter:n.LinearFilter,magFilter:n.LinearFilter,encoding:y.outputEncoding},i=new n.WebGLRenderTarget(r,r,o);i.depthBuffer=!0,i.depthTexture=new n.DepthTexture(r,r),i.depthTexture.format=n.DepthFormat,i.depthTexture.type=n.UnsignedShortType;const m=new n.WebGLRenderTarget(r,r,o);return[i,m,new bt({gl:y,resolution:r,width:a[0],height:a[1],minDepthThreshold:s,maxDepthThreshold:c,depthScale:l,depthToBlurRatioBias:u}),{mirror:d,textureMatrix:U,mixBlur:e,tDiffuse:i.texture,tDepth:i.depthTexture,tDiffuseBlur:m.texture,hasBlur:S,mixStrength:t,minDepthThreshold:s,maxDepthThreshold:c,depthScale:l,depthToBlurRatioBias:u,transparent:!0,debug:f,distortion:p,distortionMap:v,mixContrast:h,"defines-USE_BLUR":S?"":void 0,"defines-USE_DEPTH":l>0?"":void 0,"defines-USE_DISTORTION":v?"":void 0}]}),[y,a,U,r,d,S,e,t,s,c,l,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(O),y.state.buffers.depth.setMask(!0),y.autoClear||y.clear(),y.render(w,j),S&&W.render(y,O,I),y.xr.enabled=e,y.shadowMap.autoUpdate=t,T.current.visible=!0,y.setRenderTarget(null)})),M.createElement("mesh",b.default({ref:C.default([T,x])},g),M.createElement("planeBufferGeometry",{args:i}),m?m("meshReflectorMaterial",N):M.createElement("meshReflectorMaterial",N))}));class pr 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 hr=new n.Vector3,vr=M.forwardRef((({opacity:e=1,radiusTop:t,radiusBottom:r,depthBuffer:a,color:i="white",distance:s=5,angle:c=.15,attenuation:l=5,anglePower:u=5,...d},m)=>{const f=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 pr));t=void 0===t?.1:t,r=void 0===r?7*c:r,o.useFrame((()=>{g.uniforms.spotPosition.value.copy(f.current.getWorldPosition(hr)),f.current.lookAt(f.current.parent.target.getWorldPosition(hr))}));const x=M.useMemo((()=>{const e=new n.CylinderGeometry(t,r,s,128,64,!0);return e.applyMatrix4((new n.Matrix4).makeTranslation(0,-s/2,0)),e.applyMatrix4((new n.Matrix4).makeRotationX(-Math.PI/2)),e}),[c,s,t,r]);return M.createElement("spotLight",b.default({ref:m,angle:c,color:i,distance:s},d),M.createElement("mesh",{ref:f,geometry:x,raycast:()=>null},M.createElement("primitive",{object:g,attach:"material","uniforms-opacity-value":e,"uniforms-lightColor-value":i,"uniforms-attenuation-value":l,"uniforms-anglePower-value":u,"uniforms-depth-value":a,"uniforms-cameraNear-value":h.near,"uniforms-cameraFar-value":h.far,"uniforms-resolution-value":a?[p.width*v,p.height*v]:[0,0]})))})),gr=M.forwardRef((({args:e,map:t,toneMapped:r=!1,color:n="white",form:a="rect",intensity:i=1,scale:s=1,target:c,children:l,...u},d)=>{const m=M.useRef(null);return M.useLayoutEffect((()=>{l||u.material||(o.applyProps(m.current.material,{color:n}),m.current.material.color.multiplyScalar(i))}),[n,i,l,u.material]),M.useLayoutEffect((()=>{c&&m.current.lookAt(Array.isArray(c)?new T.Vector3(...c):c)}),[c]),s=Array.isArray(s)&&2===s.length?[s[0],s[1],1]:s,M.createElement("mesh",b.default({ref:C.default([m,d]),scale:s},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}),l||(u.material?null:M.createElement("meshBasicMaterial",{toneMapped:r,map:t,side:T.DoubleSide})))}));function xr(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 yr=M.forwardRef((({inclination:e=.6,azimuth:t=.1,distance:r=1e3,mieCoefficient:o=.005,mieDirectionalG:a=.8,rayleigh:i=.5,turbidity:s=10,sunPosition:c=xr(e,t),...u},d)=>{const m=M.useMemo((()=>(new n.Vector3).setScalar(r)),[r]),[f]=M.useState((()=>new l.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":i,"material-uniforms-sunPosition-value":c,"material-uniforms-turbidity-value":s,scale:m},u))}));class Er 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 wr=e=>(new n.Vector3).setFromSpherical(new n.Spherical(e,Math.acos(1-2*Math.random()),2*Math.random()*Math.PI)),br=M.forwardRef((({radius:e=100,depth:t=50,count:r=5e3,saturation:a=0,factor:i=4,fade:s=!1,speed:c=1},l)=>{const u=M.useRef(),[d,m,f]=M.useMemo((()=>{const o=[],s=[],c=Array.from({length:r},(()=>(.5+.5*Math.random())*i)),l=new n.Color;let u=e+t;const d=t/r;for(let e=0;e<r;e++)u-=d*Math.random(),o.push(...wr(u).toArray()),l.setHSL(e/r,a,.9),s.push(l.r,l.g,l.b);return[new Float32Array(o),new Float32Array(s),new Float32Array(c)]}),[r,t,i,e,a]);o.useFrame((e=>u.current&&(u.current.uniforms.time.value=e.clock.getElapsedTime()*c)));const[p]=M.useState((()=>new Er));return M.createElement("points",{ref:l},M.createElement("bufferGeometry",null,M.createElement("bufferAttribute",{attach:"attributes-position",args:[d,3]}),M.createElement("bufferAttribute",{attach:"attributes-color",args:[m,3]}),M.createElement("bufferAttribute",{attach:"attributes-size",args:[f,1]})),M.createElement("primitive",{ref:u,object:p,attach:"material",blending:n.AdditiveBlending,"uniforms-fade-value":s,transparent:!0,vertexColors:!0}))}));const Mr=de({time:0,pixelRatio:1},"#define GLSLIFY 1\nuniform float pixelRatio;uniform float time;attribute float size;attribute float speed;attribute float opacity;attribute vec3 noise;attribute vec3 color;varying vec3 vColor;varying float vOpacity;void main(){vec4 modelPosition=modelMatrix*vec4(position,1.0);modelPosition.y+=sin(time*speed+modelPosition.x*noise.x*100.0)*0.2;modelPosition.z+=cos(time*speed+modelPosition.x*noise.y*100.0)*0.2;modelPosition.x+=cos(time*speed+modelPosition.x*noise.z*100.0)*0.2;vec4 viewPosition=viewMatrix*modelPosition;vec4 projectionPostion=projectionMatrix*viewPosition;gl_Position=projectionPostion;gl_PointSize=size*25.*pixelRatio;gl_PointSize*=(1.0/-viewPosition.z);vColor=color;vOpacity=opacity;}","#define GLSLIFY 1\nvarying vec3 vColor;varying float vOpacity;void main(){float distanceToCenter=distance(gl_PointCoord,vec2(0.5));float strength=0.05/distanceToCenter-0.1;gl_FragColor=vec4(vColor,strength*vOpacity);}"),Sr=e=>e&&e.constructor===Float32Array,Tr=e=>e instanceof T.Vector2||e instanceof T.Vector3||e instanceof T.Vector4,Pr=e=>Array.isArray(e)?e:Tr(e)?e.toArray():[e,e,e];function Cr(e,t,r){return M.useMemo((()=>{if(void 0!==t){if(Sr(t))return t;if(t instanceof T.Color){const r=Array.from({length:3*e},(()=>(e=>[e.r,e.g,e.b])(t))).flat();return Float32Array.from(r)}if(Tr(t)||Array.isArray(t)){const r=Array.from({length:3*e},(()=>Pr(t))).flat();return Float32Array.from(r)}return Float32Array.from({length:e},(()=>t))}return Float32Array.from({length:e},r)}),[t])}const Rr=M.forwardRef((({noise:e=1,count:t=100,speed:r=1,opacity:n=1,scale:a=1,size:i,color:s,...c},l)=>{M.useMemo((()=>o.extend({SparklesMaterial:Mr})),[]);const u=M.useRef(),d=o.useThree((e=>e.viewport.dpr)),m=M.useMemo((()=>Float32Array.from(Array.from({length:t},(()=>Pr(a).map(T.MathUtils.randFloatSpread))).flat())),[t,a]),f=Cr(t,i,Math.random),p=Cr(t,n),h=Cr(t,r),v=Cr(3*t,e),g=Cr(void 0===s?3*t:t,Sr(s)?s:new T.Color(s),(()=>1));return o.useFrame((e=>u.current.uniforms.time.value=e.clock.elapsedTime)),M.createElement("points",b.default({key:`particle-${t}-${JSON.stringify(a)}`},c,{ref:l}),M.createElement("bufferGeometry",null,M.createElement("bufferAttribute",{attach:"attributes-position",args:[m,3]}),M.createElement("bufferAttribute",{attach:"attributes-size",args:[f,1]}),M.createElement("bufferAttribute",{attach:"attributes-opacity",args:[p,1]}),M.createElement("bufferAttribute",{attach:"attributes-speed",args:[h,1]}),M.createElement("bufferAttribute",{attach:"attributes-color",args:[g,3]}),M.createElement("bufferAttribute",{attach:"attributes-noise",args:[v,3]})),M.createElement("sparklesMaterial",{ref:u,transparent:!0,pixelRatio:d,depthWrite:!1}))}));const _r=new T.Matrix4,Lr=new T.Matrix4,Dr=[],zr=new T.Mesh;class Ar 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;zr.geometry=r.geometry;const n=r.matrixWorld;let o=r.userData.instances.indexOf(this.instanceKey);if(!(-1===o||o>r.count)){r.getMatrixAt(o,_r),Lr.multiplyMatrices(n,_r),zr.matrixWorld=Lr,zr.raycast(e,Dr);for(let e=0,r=Dr.length;e<r;e++){const r=Dr[e];r.instanceId=o,r.object=this,t.push(r)}Dr.length=0}}}let Fr,Br;const kr=M.createContext(null),Ur=new T.Matrix4,jr=new T.Vector3;new T.Color;const Vr=M.forwardRef((({children:e,range:t,limit:r=1e3,...n},a)=>{const i=M.useRef(null),[s,c]=M.useState([]),[[l,u,d]]=M.useState((()=>[new Float32Array(3*r),Float32Array.from({length:3*r},(()=>1)),Float32Array.from({length:r},(()=>1))]));M.useEffect((()=>{i.current.geometry.attributes.position.needsUpdate=!0})),o.useFrame((()=>{for(i.current.updateMatrix(),i.current.updateMatrixWorld(),Ur.copy(i.current.matrixWorld).invert(),i.current.geometry.drawRange.count=Math.min(r,void 0!==t?t:r,s.length),Fr=0;Fr<s.length;Fr++)Br=s[Fr].current,Br.getWorldPosition(jr).applyMatrix4(Ur),jr.toArray(l,3*Fr),i.current.geometry.attributes.position.needsUpdate=!0,Br.matrixWorldNeedsUpdate=!0,Br.color.toArray(u,3*Fr),i.current.geometry.attributes.color.needsUpdate=!0,d.set([Br.size],Fr),i.current.geometry.attributes.size.needsUpdate=!0}));const m=M.useMemo((()=>{const e={};for(Fr=0;Fr<s.length;Fr++){var t;Object.assign(e,null==(t=s[Fr].current)?void 0:t.__r3f.handlers)}return Object.keys(e).reduce(((e,t)=>({...e,[t]:e=>{var r,n,o;const a=null==(r=s[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,s]),f=M.useMemo((()=>({subscribe:e=>(c((t=>[...t,e])),()=>c((t=>t.filter((t=>t.current!==e.current)))))})),[]);return M.createElement("points",b.default({matrixAutoUpdate:!1,ref:C.default([a,i])},m,n),M.createElement("bufferGeometry",null,M.createElement("bufferAttribute",{attach:"attributes-position",count:l.length/3,array:l,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(kr.Provider,{value:f},e))})),Or=M.forwardRef((({children:e,...t},r)=>{M.useMemo((()=>o.extend({Position:Ar})),[]);const n=M.useRef(),{subscribe:a}=M.useContext(kr);return M.useLayoutEffect((()=>a(n)),[]),M.createElement("position",b.default({ref:C.default([r,n])},t),e)})),Ir=M.forwardRef((({children:e,positions:t,colors:r,sizes:n,stride:a=3,...i},s)=>{const c=M.useRef(null);return o.useFrame((()=>{const e=c.current.geometry.attributes;e.position.needsUpdate=!0,r&&(e.color.needsUpdate=!0),n&&(e.size.needsUpdate=!0)})),M.createElement("points",b.default({ref:C.default([s,c])},i),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)})),Wr=M.forwardRef(((e,t)=>e.positions instanceof Float32Array?M.createElement(Ir,b.default({},e,{ref:t})):M.createElement(Vr,b.default({},e,{ref:t}))));let Nr,Gr;const Hr=M.createContext(null),$r=new T.Matrix4,qr=new T.Matrix4,Xr=new T.Matrix4;new T.Color;const Yr=new T.Vector3,Zr=new T.Quaternion,Kr=new T.Vector3,Jr=M.forwardRef((({context:e,children:t,...r},n)=>{M.useMemo((()=>o.extend({Position:Ar})),[]);const a=M.useRef(),{subscribe:i,getParent:s}=M.useContext(e||Hr);return M.useLayoutEffect((()=>i(a)),[]),M.createElement("position",b.default({instance:s(),instanceKey:a,ref:C.default([n,a])},r),t)})),Qr=M.forwardRef((({children:e,range:t,limit:r=1e3,frames:n=1/0,...a},i)=>{const[{context:s,instance:c}]=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}))))}})),l=M.useRef(null),[u,d]=M.useState([]),[[m,f]]=M.useState((()=>{const e=new Float32Array(16*r);for(Nr=0;Nr<r;Nr++)Xr.identity().toArray(e,16*Nr);return[e,new Float32Array([...new Array(3*r)].map((()=>1)))]}));M.useEffect((()=>{l.current.instanceMatrix.needsUpdate=!0}));let p=0,h=0;o.useFrame((()=>{if(n===1/0||p<n){for(l.current.updateMatrix(),l.current.updateMatrixWorld(),$r.copy(l.current.matrixWorld).invert(),h=Math.min(r,void 0!==t?t:r,u.length),l.current.count=h,l.current.instanceMatrix.updateRange.count=16*h,l.current.instanceColor.updateRange.count=3*h,Nr=0;Nr<u.length;Nr++)Gr=u[Nr].current,Gr.matrixWorld.decompose(Yr,Zr,Kr),qr.compose(Yr,Zr,Kr).premultiply($r),qr.toArray(m,16*Nr),l.current.instanceMatrix.needsUpdate=!0,Gr.color.toArray(f,3*Nr),l.current.instanceColor.needsUpdate=!0;p++}}));const v=M.useMemo((()=>({getParent:()=>l,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:C.default([i,l]),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(s.Provider,{value:v},e(c)):M.createElement(Hr.Provider,{value:v},e))}));const en=M.createContext(null),tn=M.forwardRef(((e,t)=>{M.useMemo((()=>o.extend({SegmentObject:rn})),[]);const{limit:r=1e3,lineWidth:n=1,children:a,...i}=e,[s,c]=M.useState([]),[u]=M.useState((()=>new l.Line2)),[d]=M.useState((()=>new l.LineMaterial)),[m]=M.useState((()=>new l.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=>(c((t=>[...t,e])),()=>c((t=>t.filter((t=>t.current!==e.current)))))})),[]);return o.useFrame((()=>{for(let t=0;t<r;t++){var e;const r=null==(e=s[t])?void 0:e.current;r&&(p[6*t+0]=r.start.x,p[6*t+1]=r.start.y,p[6*t+2]=r.start.z,p[6*t+3]=r.end.x,p[6*t+4]=r.end.y,p[6*t+5]=r.end.z,h[6*t+0]=r.color.r,h[6*t+1]=r.color.g,h[6*t+2]=r.color.b,h[6*t+3]=r.color.r,h[6*t+4]=r.color.g,h[6*t+5]=r.color.b)}m.setColors(h),m.setPositions(p),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},i)),M.createElement(en.Provider,{value:v},a))}));class rn{constructor(){this.color=new T.Color("white"),this.start=new T.Vector3(0,0,0),this.end=new T.Vector3(0,0,0)}}const nn=e=>e instanceof T.Vector3?e:new T.Vector3(..."number"==typeof e?[e,e,e]:e),on=M.forwardRef((({color:e,start:t,end:r},n)=>{const o=M.useContext(en);if(!o)throw"Segment must used inside Segments component.";const a=M.useRef(null);return M.useLayoutEffect((()=>o.subscribe(a)),[]),M.createElement("segmentObject",{ref:C.default([a,n]),color:e,start:nn(t),end:nn(r)})})),an=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:C.default([a,n])},r),e)}));const sn=new n.Matrix4,cn=new n.Ray,ln=new n.Sphere,un=new n.Vector3;const dn=M.forwardRef((({children:e,width:t,height:r,renderPriority:n=0,eventPriority:a=0,frames:i=1/0,...s},c)=>{const{size:l,viewport:u}=o.useThree(),d=ht((t||l.width)*u.dpr,(r||l.height)*u.dpr,{samples:8}),[m]=M.useState((()=>new T.Scene)),f=M.useCallback(((e,t,r)=>{var n,o;let a=null==(n=d.texture)?void 0:n.__r3f.parent;for(;a&&!(a instanceof T.Object3D);)a=a.__r3f.parent;if(!a)return!1;r.raycaster.camera||r.events.compute(e,r,null==(o=r.previousRoot)?void 0:o.getState());const[i]=r.raycaster.intersectObject(a);if(!i)return!1;const s=i.uv;t.raycaster.setFromCamera(t.pointer.set(2*s.x-1,2*s.y-1),t.camera)}),[]);return M.useImperativeHandle(c,(()=>d.texture),[d]),M.createElement(M.Fragment,null,o.createPortal(M.createElement(mn,{renderPriority:n,frames:i,fbo:d},e),m,{events:{compute:f,priority:a}}),M.createElement("primitive",b.default({object:d.texture},s)))}));function mn({frames:e,renderPriority:t,children:r,fbo:n}){let a=0;return o.useFrame((t=>{(e===1/0||a<e)&&(t.gl.setRenderTarget(n),t.gl.render(t.scene,t.camera),t.gl.setRenderTarget(null),a++)}),t),M.createElement(M.Fragment,null,r)}const fn=new T.Color;function pn({canvasSize:e,scene:t,index:r,children:n,frames:a,rect:i,track:s}){const c=o.useThree((e=>e.get)),l=o.useThree((e=>e.camera)),u=o.useThree((e=>e.scene)),d=o.useThree((e=>e.setEvents));let m=0;return o.useFrame((r=>{var o,c;(a===1/0||m<=a)&&(i.current=null==(o=s.current)?void 0:o.getBoundingClientRect(),m++);if(i.current){const{left:o,right:a,top:s,bottom:d,width:m,height:f}=i.current,p=d<0||s>e.height||a<0||o>e.width,h=e.height-d,v=m/f;if((c=l)&&c.isOrthographicCamera?l.left===m/-2&&l.right===m/2&&l.top===f/2&&l.bottom===f/-2||(Object.assign(l,{left:m/-2,right:m/2,top:f/2,bottom:f/-2}),l.updateProjectionMatrix()):l.aspect!==v&&(l.aspect=v,l.updateProjectionMatrix()),r.gl.setViewport(o,h,m,f),r.gl.setScissor(o,h,m,f),r.gl.setScissorTest(!0),p)return r.gl.getClearColor(fn),r.gl.setClearColor(fn,r.gl.getClearAlpha()),void r.gl.clear(!0,!0);r.gl.render(n?u:t,l)}}),r),M.useEffect((()=>{const e=c().events.connected;return d({connected:s.current}),()=>d({connected:e})}),[]),M.createElement(M.Fragment,null,n)}exports.AdaptiveDpr=function({pixelated:e}){const t=o.useThree((e=>e.gl)),r=o.useThree((e=>e.internal.active)),n=o.useThree((e=>e.performance.current)),a=o.useThree((e=>e.viewport.initialDpr)),i=o.useThree((e=>e.setDpr));return M.useEffect((()=>{const n=t.domElement;return()=>{r&&i(a),e&&n&&(n.style.imageRendering="auto")}}),[]),M.useEffect((()=>{i(n*a),e&&t.domElement&&(t.domElement.style.imageRendering=1===n?"auto":"pixelated")}),[n]),null},exports.AdaptiveEvents=function(){const e=o.useThree((e=>e.get)),t=o.useThree((e=>e.setEvents)),r=o.useThree((e=>e.performance.current));return M.useEffect((()=>{const r=e().events.enabled;return()=>t({enabled:r})}),[]),M.useEffect((()=>t({enabled:1===r})),[r]),null},exports.ArcballControls=ze,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 i=0;i<r+1;i++)o.setXYZ(e++,a/r-n+(0===a?-t:0),i/r-n,dr(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=Q,exports.Bounds=function({children:e,damping:t=6,fit:r,clip:n,observe:a,margin:i=1.2,eps:s=.01,onFit:c}){const l=M.useRef(null),{camera:u,invalidate:d,size:m,controls:f}=o.useThree(),p=f,h=M.useRef(c);function v(e,t){return Math.abs(e.x-t.x)<s&&Math.abs(e.y-t.y)<s&&Math.abs(e.z-t.z)<s}function g(e,t,r,n){e.x=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=c;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}))),[E]=M.useState((()=>new T.Box3)),w=M.useMemo((()=>{function e(){const e=E.getSize(new T.Vector3),t=E.getCenter(new T.Vector3),r=Math.max(e.x,e.y,e.z),n=Kt(u)?4*r:r/(2*Math.atan(Math.PI*u.fov/360)),o=Kt(u)?4*r:n/u.aspect,a=i*Math.max(n,o);return{box:E,size:e,center:t,distance:a}}return{getSize:e,refresh(t){if((r=t)&&r.isBox3)E.copy(t);else{const e=t||l.current;e.updateWorldMatrix(!0,!0),E.setFromObject(e)}var r;if(E.isEmpty()){const e=u.position.length()||10;E.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),Kt(u)){x.zoom=u.zoom;let e=0,n=0;const o=[new T.Vector3(E.min.x,E.min.y,E.min.z),new T.Vector3(E.min.x,E.max.y,E.min.z),new T.Vector3(E.min.x,E.min.y,E.max.z),new T.Vector3(E.min.x,E.max.y,E.max.z),new T.Vector3(E.max.x,E.max.y,E.max.z),new T.Vector3(E.max.x,E.max.y,E.min.z),new T.Vector3(E.max.x,E.min.y,E.max.z),new T.Vector3(E.max.x,E.min.y,E.min.z)];r.applyMatrix4(u.matrixWorldInverse);for(const t of o)t.applyMatrix4(u.matrixWorldInverse),e=Math.max(e,Math.abs(t.y-r.y)),n=Math.max(n,Math.abs(t.x-r.x));e*=2,n*=2;const a=(u.top-u.bottom)/e,s=(u.right-u.left)/n;y.zoom=Math.min(a,s)/i,t||(u.zoom=y.zoom,u.updateProjectionMatrix())}return t?x.animating=!0:(u.position.copy(y.camera),u.lookAt(y.focus),p&&(p.target.copy(y.focus),p.update())),h.current&&h.current(this.getSize()),d(),this}}}),[E,u,p,i,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++)&&(w.refresh(),r&&w.fit(),n&&w.clip())}),[m,n,r,a,u,p]),o.useFrame(((e,r)=>{if(x.animating){if(g(x.focus,y.focus,t,r),g(x.camera,y.camera,t,r),x.zoom=T.MathUtils.damp(x.zoom,y.zoom,t,r),u.position.copy(x.camera),Kt(u)&&(u.zoom=x.zoom,u.updateProjectionMatrix()),p?(p.target.copy(x.focus),p.update()):u.lookAt(x.focus),d(),Kt(u)&&!(Math.abs(x.zoom-y.zoom)<s))return;if(!Kt(u)&&!v(x.camera,y.camera))return;if(p&&!v(x.focus,y.focus))return;x.animating=!1}})),M.createElement("group",{ref:l},M.createElement(Jt.Provider,{value:w},e))},exports.Box=_t,exports.CameraShake=Qt,exports.Center=Zt,exports.Circle=Lt,exports.Clone=Se,exports.Cloud=function({opacity:e=.5,speed:t=.4,width:r=10,depth:n=1.5,segments:a=20,texture:i="https://rawcdn.githack.com/pmndrs/drei-assets/9225a9f1fbd449d9411125c2f419b843d0308c9f/cloud.png",color:s="#ffffff",depthTest:c=!0,...l}){const u=o.useThree((e=>e.gl)),d=M.useRef(),m=fe(i),f=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=d.current)?void 0:t.children.forEach(((t,r)=>{t.children[0].rotation.z+=f[r].rotation,t.children[0].scale.setScalar(f[r].scale+(1+Math.sin(e.clock.getElapsedTime()/10))/2*r/10)}))})),M.createElement("group",l,M.createElement("group",{position:[0,0,a/2*n],ref:d},f.map((({x:t,y:r,scale:o,density:a},i)=>M.createElement(Q,{key:i,position:[t,r,-i*n]},M.createElement(Ft,{scale:o,rotation:[0,0,0]},M.createElement("meshStandardMaterial",{map:m,"map-encoding":u.outputEncoding,transparent:!0,opacity:o/6*a*e,depthTest:c,color:s})))))))},exports.ComputedAttribute=({compute:e,name:t,...r})=>{const[o]=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=Dt,exports.ContactShadows=lr,exports.CubeCamera=function({children:e,fog:t,frames:r=1/0,resolution:a=256,near:i=.1,far:s=1e3,...c}){const l=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.encoding=f.outputEncoding,e.texture.type=n.HalfFloatType,e}),[a]);let h=0;return o.useFrame((()=>{if(u&&l.current&&(r===1/0||h<r)){l.current.traverse((e=>e.visible=!1));const e=m.fog;m.fog=t||e,u.update(f,m),m.fog=e,l.current.traverse((e=>e.visible=!0)),h++}})),M.createElement("group",c,M.createElement("cubeCamera",{ref:d,args:[i,s,p]}),M.createElement("group",{ref:l},e(p.texture)))},exports.CubicBezierLine=ne,exports.CurveModifier=vt,exports.CycleRaycast=function({onChanged:e,portal:t,preventDefault:r=!0,scroll:n=!0,keyCode:a=9}){const i=M.useRef(0),s=o.useThree((e=>e.setEvents)),c=o.useThree((e=>e.get)),l=o.useThree((e=>e.gl));return M.useEffect((()=>{var o;let u,d=[];const m=c().events.filter,f=null!==(o=null==t?void 0:t.current)&&void 0!==o?o:l.domElement.parentNode,p=()=>f&&e&&e(d,Math.round(i.current)%d.length);s({filter:(e,t)=>{let r=[...e];r.length===d.length&&d.every((e=>r.map((e=>e.object.uuid)).includes(e.object.uuid)))||(i.current=0,d=r,p()),m&&(r=m(r,t));for(let e=0;e<Math.round(i.current)%r.length;e++){const e=r.shift();r=[...r,e]}return r}});const h=e=>{var t,r;i.current=e(i.current),null==(t=c().events.handlers)||t.onPointerCancel(void 0),null==(r=c().events.handlers)||r.onPointerMove(u),p()},v=e=>{(e.keyCode||e.which===a)&&(r&&e.preventDefault(),d.length>1&&h((e=>e+1)))},g=e=>{r&&e.preventDefault();let t=0;e||(e=window.event),e.wheelDelta?t=e.wheelDelta/120:e.detail&&(t=-e.detail/3),d.length>1&&h((e=>Math.abs(e-t)))},x=e=>u=e;return document.addEventListener("pointermove",x,{passive:!0}),n&&document.addEventListener("wheel",g),void 0!==a&&document.addEventListener("keydown",v),()=>{s({filter:m}),void 0!==a&&document.removeEventListener("keydown",v),n&&document.removeEventListener("wheel",g),document.removeEventListener("pointermove",x)}}),[l,c,s,r,n,a]),null},exports.Cylinder=zt,exports.Detailed=an,exports.DeviceOrientationControls=Ce,exports.Dodecahedron=Nt,exports.Edges=function({userData:e,children:t,geometry:r,threshold:n=15,color:o="black",...a}){const i=M.useRef(null);return M.useLayoutEffect((()=>{const e=i.current.parent;if(e){const t=r||e.geometry;t===i.current.userData.currentGeom&&n===i.current.userData.currentThreshold||(i.current.userData.currentGeom=t,i.current.userData.currentThreshold=n,i.current.geometry=new T.EdgesGeometry(t,n))}})),M.createElement("lineSegments",b.default({ref:i,raycast:()=>null},a),t||M.createElement("lineBasicMaterial",{color:o}))},exports.Effects=ue,exports.Environment=cr,exports.EnvironmentCube=ar,exports.EnvironmentMap=nr,exports.EnvironmentPortal=ir,exports.Extrude=Gt,exports.FirstPersonControls=Be,exports.Float=er,exports.FlyControls=Re,exports.GizmoHelper=({alignment:e="bottom-right",margin:t=[80,80],renderPriority:r=0,autoClear:a=!0,onUpdate:i,onTarget:s,children:c})=>{const l=o.useThree((({size:e})=>e)),u=o.useThree((({camera:e})=>e)),d=o.useThree((({controls:e})=>e)),m=o.useThree((({gl:e})=>e)),f=o.useThree((({scene:e})=>e)),p=o.useThree((({invalidate:e})=>e)),h=M.useRef(),v=M.useRef(),g=M.useRef(null),[x]=M.useState((()=>new n.Scene)),y=M.useRef(!1),E=M.useRef(0),w=M.useRef(new n.Vector3(0,0,0)),b=M.useCallback((e=>{y.current=!0,(d||s)&&(w.current=(null==d?void 0:d.target)||(null==s?void 0:s())),E.current=u.position.distanceTo(Ge),We.copy(u.quaternion),He.copy(e).multiplyScalar(E.current).add(Ge),Oe.lookAt(He),Ne.copy(Oe.quaternion),p()}),[d,u,s,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(We.angleTo(Ne)<.01)y.current=!1;else{const e=t*Ve;We.rotateTowards(Ne,e),u.position.set(0,0,1).applyQuaternion(We).multiplyScalar(E.current).add(w.current),u.up.set(0,1,0).applyQuaternion(We).normalize(),u.quaternion.copy(We),i?i():d&&d.update(),p()}Ie.copy(u.matrix).invert(),null==(r=v.current)||r.quaternion.setFromRotationMatrix(Ie),a&&(m.autoClear=!1),m.clearDepth(),m.render(x,g.current)}}),r);const S=ke(g),T=M.useMemo((()=>({tweenCamera:b,raycast:S})),[b]),[P,C]=t,R=e.endsWith("-left")?-l.width/2+P:l.width/2-P,_=e.startsWith("top-")?l.height/2-C:-l.height/2+C;return o.createPortal(M.createElement(Ue.Provider,{value:T},M.createElement(Te,{ref:g,position:[0,0,200]}),M.createElement("group",{ref:v,position:[R,_,0]},c)),x)},exports.GizmoViewcube=e=>M.createElement("group",{scale:[60,60,60]},M.createElement(nt,e),et.map(((t,r)=>M.createElement(ot,b.default({key:r,position:t,dimensions:tt[r]},e)))),Je.map(((t,r)=>M.createElement(ot,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:i,labels:s=["X","Y","Z"],labelColor:c="#000",onClick:l,...u})=>{const[d,m,f]=o,{tweenCamera:p,raycast:h}=je(),v={font:n,disabled:r,labelColor:c,raycast:h,onClick:l,axisHeadScale:a,onPointerDown:r?void 0:e=>{p(e.object.position),e.stopPropagation()}};return M.createElement("group",b.default({scale:40},u),M.createElement(at,{color:d,rotation:[0,0,0],scale:i}),M.createElement(at,{color:m,rotation:[0,0,Math.PI/2],scale:i}),M.createElement(at,{color:f,rotation:[0,-Math.PI/2,0],scale:i}),!t&&M.createElement(M.Fragment,null,M.createElement(it,b.default({arcStyle:d,position:[1,0,0],label:s[0]},v)),M.createElement(it,b.default({arcStyle:m,position:[0,1,0],label:s[1]},v)),M.createElement(it,b.default({arcStyle:f,position:[0,0,1],label:s[2]},v)),!e&&M.createElement(M.Fragment,null,M.createElement(it,b.default({arcStyle:d,position:[-1,0,0]},v)),M.createElement(it,b.default({arcStyle:m,position:[0,-1,0]},v)),M.createElement(it,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)),i=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 i=e.length;for(;i--;)a.addColorStop(e[i],t[i]);o.fillStyle=a,o.fillRect(0,0,16,r);const s=new T.Texture(n);return s.needsUpdate=!0,s}),[e]);return M.useEffect((()=>()=>{i.dispose()}),[i]),M.createElement("primitive",b.default({object:i,attach:"map",encoding:a.outputEncoding},n))},exports.Html=W,exports.Icosahedron=It,exports.Image=xe,exports.Instance=Jr,exports.Instances=Qr,exports.IsObject=me,exports.Lathe=Ht,exports.Lightformer=gr,exports.Line=ee,exports.Loader=function({containerStyles:e,innerStyles:t,barStyles:r,dataStyles:n,dataInterpolation:o=H,initialState:a=(e=>e)}){const{active:i,progress:s}=G(),c=M.useRef(0),l=M.useRef(0),u=M.useRef(null),[d,m]=M.useState(a(i));M.useEffect((()=>{let e;return i!==d&&(e=setTimeout((()=>m(i)),300)),()=>clearTimeout(e)}),[d,i]);const f=M.useCallback((()=>{u.current&&(c.current+=(s-c.current)/2,(c.current>.95*s||100===s)&&(c.current=s),u.current.innerText=o(c.current),c.current<s&&(l.current=requestAnimationFrame(f)))}),[o,s]);return M.useEffect((()=>(f(),()=>cancelAnimationFrame(l.current))),[f]),d?M.createElement("div",{style:{...$.container,opacity:i?1:0,...e}},M.createElement("div",null,M.createElement("div",{style:{...$.inner,...t}},M.createElement("div",{style:{...$.bar,transform:`scaleX(${s/100})`,...r}}),M.createElement("span",{ref:u,style:{...$.data,...n}})))):null},exports.MapControls=_e,exports.Mask=function({id:e=1,children:t,colorWrite:r=!1,depthWrite:n=!1,...o}){const a=M.useMemo((()=>({colorWrite:r,depthWrite:n,stencilWrite:!0,stencilRef:e,stencilFunc:T.AlwaysStencilFunc,stencilFail:T.ReplaceStencilOp,stencilZFail:T.ReplaceStencilOp,stencilZPass:T.ReplaceStencilOp})),[r,n]);return M.createElement("mesh",b.default({renderOrder:-e},o),M.createElement("meshBasicMaterial",a),"function"==typeof t?t(a):t)},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(Qr,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=xt,exports.MeshReflectorMaterial=St,exports.MeshWobbleMaterial=Et,exports.Octahedron=Wt,exports.OrbitControls=Le,exports.OrthographicCamera=Te,exports.PerspectiveCamera=Pe,exports.Plane=Ft,exports.Point=Or,exports.PointMaterial=Pt,exports.PointMaterialImpl=Tt,exports.PointerLockControls=Fe,exports.Points=Wr,exports.PointsBuffer=Ir,exports.Polyhedron=Ot,exports.PositionalAudio=oe,exports.Preload=function({all:e,scene:t,camera:r}){const a=o.useThree((({gl:e})=>e)),i=o.useThree((({camera:e})=>e)),s=o.useThree((({scene:e})=>e));return M.useLayoutEffect((()=>{const o=[];e&&(t||s).traverse((e=>{!1===e.visible&&(o.push(e),e.visible=!0)})),a.compile(t||s,r||i);const c=new n.WebGLCubeRenderTarget(128);new n.CubeCamera(.01,1e5,c).update(a,t||s),c.dispose(),o.forEach((e=>e.visible=!1))}),[]),null},exports.PresentationControls=function({snap:e,global:t,cursor:r=!0,children:a,speed:i=1,rotation:l=[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((()=>[l[0]+d[0],l[0]+d[1]]),[l[0],d[0],d[1]]),g=M.useMemo((()=>[l[1]+m[0],l[1]+m[1]]),[l[1],m[0],m[1]]),x=M.useMemo((()=>[n.MathUtils.clamp(l[0],...v),n.MathUtils.clamp(l[1],...g),l[2]]),[l[0],l[1],l[2],v,g]),[y,E]=s.useSpring((()=>({scale:1,rotation:x,config:f})));M.useEffect((()=>{E.start({scale:1,rotation:x,config:f})}),[x]),M.useEffect((()=>{t&&r&&(h.domElement.style.cursor="grab")}),[t,r,h.domElement]);const w=c.useGesture({onHover:({last:e})=>{r&&!t&&(h.domElement.style.cursor=e?"auto":"grab")},onDrag:({down:t,delta:[o,a],memo:[s,c]=y.rotation.animation.to||x})=>{r&&(h.domElement.style.cursor=t?"grabbing":"grab"),o=n.MathUtils.clamp(c+o/p.width*Math.PI*i,...g),a=n.MathUtils.clamp(s+a/p.height*Math.PI*i,...v);const l=e&&!t&&"boolean"!=typeof e?e:f;return E.start({scale:t&&a>v[1]/2?u:1,rotation:e&&!t?x:[a,o,0],config:e=>"scale"===e?{...l,friction:3*l.friction}:l}),[a,o]}},{target:t?h.domElement:void 0});return M.createElement(s.a.group,b.default({},null==w?void 0:w(),y),a)},exports.QuadraticBezierLine=re,exports.Reflector=fr,exports.RenderTexture=dn,exports.Ring=Vt,exports.RoundedBox=qt,exports.Sampler=({children:e,weight:t,transform:r,instances:o,mesh:a,...i})=>{const s=M.useRef(null),c=M.useRef(null),u=M.useRef(null);return M.useEffect((()=>{var e,t;c.current=null!==(e=null==o?void 0:o.current)&&void 0!==e?e:s.current.children.find((e=>e.hasOwnProperty("instanceMatrix"))),u.current=null!==(t=null==a?void 0:a.current)&&void 0!==t?t:s.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===c.current)return;const e=new l.MeshSurfaceSampler(u.current);t&&e.setWeightAttribute(t),e.build();const o=new n.Vector3,a=new n.Vector3,i=new n.Color,s=new n.Object3D;u.current.updateMatrixWorld(!0);for(let t=0;t<c.current.count;t++)e.sample(o,a,i),"function"==typeof r?r({dummy:s,sampledMesh:u.current,position:o,normal:a,color:i},t):s.position.copy(o),s.updateMatrix(),c.current.setMatrixAt(t,s.matrix);c.current.instanceMatrix.needsUpdate=!0}),[e,null==a?void 0:a.current,null==o?void 0:o.current]),M.createElement("group",b.default({ref:s},i),e)},exports.ScreenQuad=Yt,exports.Scroll=K,exports.ScrollControls=function({eps:e=1e-5,enabled:t=!0,infinite:r,horizontal:n,pages:a=1,distance:i=1,damping:s=4,style:c={},children:l}){const{get:u,setEvents:d,gl:m,size:f,invalidate:p,events:h}=o.useThree(),[v]=M.useState((()=>document.createElement("div"))),[g]=M.useState((()=>document.createElement("div"))),[x]=M.useState((()=>document.createElement("div"))),y=m.domElement.parentNode,E=M.useRef(0),w=M.useMemo((()=>{const t={el:v,eps:e,fill:g,fixed:x,horizontal:n,damping:s,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,s,n,a]);M.useEffect((()=>{v.style.position="absolute",v.style.width="100%",v.style.height="100%",v.style[n?"overflowX":"overflowY"]="auto",v.style[n?"overflowY":"overflowX"]="hidden",v.style.top="0px",v.style.left="0px";for(const e in c)v.style[e]=c[e];x.style.position="sticky",x.style.top="0px",x.style.left="0px",x.style.width="100%",x.style.height="100%",x.style.overflow="hidden",v.appendChild(x),g.style.height=n?"100%":a*i*100+"%",g.style.width=n?a*i*100+"%":"100%",g.style.pointerEvents="none",v.appendChild(g),y.appendChild(v),v[n?"scrollLeft":"scrollTop"]=1;const e=h.connected||m.domElement;requestAnimationFrame((()=>null==h.connect?void 0:h.connect(v)));const t=u().events.compute;return d({compute(e,t){const r=e.clientX-y.offsetLeft,n=e.clientY-y.offsetTop;t.pointer.set(r/t.size.width*2-1,-n/t.size.height*2+1),t.raycaster.setFromCamera(t.pointer,t.camera)}}),()=>{y.removeChild(v),d({compute:t}),null==h.connect||h.connect(e)}}),[a,i,n,v,g,x,y]),M.useEffect((()=>{if(h.connected===v){const e=f[n?"width":"height"],o=v[n?"scrollWidth":"scrollHeight"],a=o-e;let i=0,s=!0,c=!0;const l=()=>{if(t&&!c&&(p(),i=v[n?"scrollLeft":"scrollTop"],E.current=i/a,r)){if(!s)if(i>=a){const e=1-w.offset;v[n?"scrollLeft":"scrollTop"]=1,E.current=w.offset=-e,s=!0}else if(i<=0){const e=1+w.offset;v[n?"scrollLeft":"scrollTop"]=o,E.current=w.offset=e,s=!0}s&&setTimeout((()=>s=!1),40)}};v.addEventListener("scroll",l,{passive:!0}),requestAnimationFrame((()=>c=!1));const u=e=>v.scrollLeft+=e.deltaY/2;return n&&v.addEventListener("wheel",u,{passive:!0}),()=>{v.removeEventListener("scroll",l),n&&v.removeEventListener("wheel",u)}}}),[v,h,f,r,w,p,n,t]);let b=0;return o.useFrame(((t,r)=>{w.offset=T.MathUtils.damp(b=w.offset,E.current,s,r),w.delta=T.MathUtils.damp(w.delta,Math.abs(b-w.offset),s,r),w.delta>e&&p()})),M.createElement(q.Provider,{value:w},l)},exports.Segment=on,exports.SegmentObject=rn,exports.Segments=tn,exports.Select=function({box:e,multiple:t,children:r,onChange:n,border:a="1px solid #55aaff",backgroundColor:i="rgba(75, 160, 255, 0.1)",filter:s=(e=>e),...c}){const{setEvents:u,camera:d,raycaster:m,gl:f,controls:p,size:h,get:v}=o.useThree(),[g,x]=M.useState(!1),[y,E]=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 w=M.useCallback((e=>{e.stopPropagation(),E({object:s([e.object])[0],shift:t&&e.shiftKey})}),[]),S=M.useCallback((e=>!g&&E({})),[g]),P=M.useRef(null);return M.useEffect((()=>{if(!e||!t)return;const r=new l.SelectionBox(d,P.current),n=document.createElement("div");n.style.pointerEvents="none",n.style.border=a,n.style.backgroundColor=i,n.style.position="fixed";const o=new T.Vector2,c=new T.Vector2,m=new T.Vector2,g=v().events.enabled,x=null==p?void 0:p.enabled;let y=!1;function w(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),w(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),c.x=Math.min(o.x,e.clientX),c.y=Math.min(o.y,e.clientY),n.style.left=`${c.x}px`,n.style.top=`${c.y}px`,n.style.width=m.x-c.x+"px",n.style.height=m.y-c.y+"px"}(e),w(e,r.endPoint);const t=r.select().sort((e=>e.uuid)).filter((e=>e.isMesh));R.default(t,M)||(M=t,E({object:s(t)}))}}function C(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",C,{passive:!0}),()=>{document.removeEventListener("pointerdown",b),document.removeEventListener("pointermove",S),document.removeEventListener("pointerup",C)}}),[h,m,d,p,f]),M.createElement("group",b.default({ref:P,onClick:w,onPointerOver:()=>x(!0),onPointerOut:()=>x(!1),onPointerMissed:S},c),M.createElement(J.Provider,{value:y},r))},exports.Shadow=mr,exports.Sky=yr,exports.Sparkles=Rr,exports.Sphere=At,exports.SpotLight=vr,exports.Stage=function({children:e,controls:t,shadows:r=!0,adjustCamera:n=!0,environment:a="city",intensity:i=1,preset:s="rembrandt",shadowBias:c=0,contactShadow:l={blur:2,opacity:.5,position:[0,0,0]},...u}){const d=ur[s],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)),l&&M.createElement(lr,b.default({scale:2*v,far:v/2},l)),a&&M.createElement(cr,{preset:a}),M.createElement("ambientLight",{intensity:i/3}),M.createElement("spotLight",{penumbra:1,position:[d.main[0]*v,d.main[1]*v,d.main[2]*v],intensity:2*i,castShadow:r,"shadow-bias":c}),M.createElement("pointLight",{position:[d.fill[0]*v,d.fill[1]*v,d.fill[2]*v],intensity:i}))},exports.Stars=br,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),pt(r,t),()=>pt(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 i=o.addEffect((()=>n.begin())),s=o.addAfterEffect((()=>n.end()));return()=>{null==a||a.removeChild(n.dom),i(),s()}}}),[r,n,t,e]),null},exports.Tetrahedron=jt,exports.Text=ae,exports.Text3D=le,exports.Torus=kt,exports.TorusKnot=Ut,exports.TrackballControls=De,exports.Trail=be,exports.TransformControls=Ae,exports.Tube=Bt,exports.View=({track:e,index:t=1,frames:r=1/0,children:n})=>{const a=M.useRef(null),{size:i,scene:s}=o.useThree(),[c]=M.useState((()=>new T.Scene)),l=M.useCallback(((t,r)=>{if(e.current&&t.target===e.current){const{width:e,height:n,left:o,top:i}=a.current,s=t.clientX-o,c=t.clientY-i;r.pointer.set(s/e*2-1,-c/n*2+1),r.raycaster.setFromCamera(r.pointer,r.camera)}}),[a]),[u,d]=M.useReducer((()=>!0),!1);return M.useEffect((()=>{var t;a.current=null==(t=e.current)?void 0:t.getBoundingClientRect(),d()}),[]),u&&o.createPortal(M.createElement(pn,{canvasSize:i,frames:r,scene:s,track:e,rect:a,index:t},n),c,{events:{compute:l,priority:t},size:{width:a.current.width,height:a.current.height}})},exports.calcPosFromAngles=xr,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(),ln.copy(r.boundingSphere),ln.applyMatrix4(o),!1!==e.ray.intersectsSphere(ln)&&(sn.copy(o).invert(),cn.copy(e.ray).applyMatrix4(sn),null!==r.boundingBox&&null===cn.intersectBox(r.boundingBox,un)||t.push({distance:un.distanceTo(e.ray.origin),point:un.clone(),object:this})))},exports.shaderMaterial=de,exports.softShadows=e=>{if(!Ct){Ct=!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)),[i]=M.useState((()=>new n.AnimationMixer(void 0))),s=M.useRef({}),[c]=M.useState((()=>{const t={};return e.forEach((e=>Object.defineProperty(t,e.name,{enumerable:!0,get(){if(a.current)return s.current[e.name]||(s.current[e.name]=i.clipAction(e,a.current))}}))),{ref:a,clips:e,actions:t,names:e.map((e=>e.name)),mixer:i}}));return o.useFrame(((e,t)=>i.update(t))),M.useEffect((()=>{const e=a.current;return()=>{s.current={},Object.values(c.actions).forEach((t=>{e&&i.uncacheAction(t,e)}))}}),[e]),c},exports.useAspect=function(e,t,r=1){const n=o.useThree((e=>e.viewport)),a=t*(n.aspect>e/t?n.width/e:n.height/t);return[e*(n.aspect>e/t?n.width/e:n.height/t)*r,a*r,1]},exports.useBVH=function(e,t){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(Jt)},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=ke,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=st,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:i}=o.useThree((e=>e.size)),s=e||a*r,c=e||i*r,l=M.useMemo((()=>{const e=new n.DepthTexture(s,c);return e.format=n.DepthFormat,e.type=n.UnsignedShortType,{depthTexture:e}}),[s,c]);let u=0;const d=ht(s,c,l);return o.useFrame((e=>{(t===1/0||u<t)&&(e.gl.setRenderTarget(d),e.gl.render(e.scene,e.camera),e.gl.setRenderTarget(null),u++)})),d.depthTexture},exports.useDetectGPU=e=>m.suspend((()=>g.getGPUTier(e)),["useDetectGPU"]),exports.useEnvironment=or,exports.useFBO=ht,exports.useFBX=ct,exports.useGLTF=dt,exports.useGizmoContext=je,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))),i=a.onBeforeRender;a.onBeforeRender=()=>r.current=!0;const s=o.addAfterEffect((()=>(r.current!==n.current&&e(n.current=r.current),!0)));return()=>{a.onBeforeRender=i,t(),s()}}}),[]),t},exports.useKTX2=ft,exports.useMask=function(e){return{stencilWrite:!0,stencilRef:e,stencilFunc:T.EqualStencilFunc,stencilFail:T.KeepStencilOp,stencilZFail:T.KeepStencilOp,stencilZPass:T.ReplaceStencilOp}},exports.useMatcapTexture=function(e=0,t=1024,r){const n=m.suspend((()=>fetch("https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/matcaps.json").then((e=>e.json()))),["matcapList"]),o=n[0],a=M.useMemo((()=>Object.keys(n).length),[]),i=`${M.useMemo((()=>"string"==typeof e?e:"number"==typeof e?n[e]:null),[e])||o}${function(e){switch(e){case 64:return"-64px";case 128:return"-128px";case 256:return"-256px";case 512:return"-512px";default:return""}}(t)}.png`,s=`https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d/${t}/${i}`;return[fe(s,r),s,a]},exports.useNormalTexture=function(e=0,t={},r){const{repeat:o=[1,1],anisotropy:a=1,offset:i=[0,0]}=t,s=m.suspend((()=>fetch("https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/normals/normals.json").then((e=>e.json()))),["normalsList"]),c=M.useMemo((()=>Object.keys(s).length),[]),l=s[0],u=`https://rawcdn.githack.com/pmndrs/drei-assets/7a3104997e1576f83472829815b00880d88b32fb/normals/${s[e]||l}`,d=fe(u,r);return M.useLayoutEffect((()=>{d&&(d.wrapS=d.wrapT=n.RepeatWrapping,d.repeat=new n.Vector2(o[0],o[1]),d.offset=new n.Vector2(i[0],i[1]),d.anisotropy=a)}),[d,a,o,i]),[d,u,c]},exports.useProgress=G,exports.useScroll=X,exports.useSelect=function(){return M.useContext(J)},exports.useTexture=fe,exports.useTrail=we;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("react-dom/client"),n=require("three"),o=require("@react-three/fiber"),a=require("zustand"),i=require("react-merge-refs"),s=require("@react-spring/three"),c=require("@use-gesture/react"),l=require("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 E(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function w(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=E(e),M=w(t),S=w(r),T=w(n),P=E(a),C=E(i),R=E(u),_=E(p),L=E(h),D=E(v),z=E(y);const A=new n.Vector3,F=new n.Vector3,B=new n.Vector3;function k(e,t,r){const n=A.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=(O=[1,-1,1,1,1,-1,1,1,1,-1,1,1,1,-1,1,1],e=>j(e,O));var O;const I=(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:i,center:s,fullscreen:c,portal:l,distanceFactor:u,sprite:d=!1,transform:m=!1,occlude:f,onOcclude:p,zIndexRange:h=[16777271,0],calculatePosition:v=k,as:g="div",wrapperClass:x,pointerEvents:y="auto",...E},w)=>{var T;const P=o.useThree((({gl:e})=>e)),C=o.useThree((({camera:e})=>e)),R=o.useThree((({scene:e})=>e)),_=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),O=M.useRef(0),W=M.useRef([0,0]),N=M.useRef(null),G=M.useRef(null),H=null!==(T=null==l?void 0:l.current)&&void 0!==T?T:P.domElement.parentNode;M.useEffect((()=>{if(j.current){if(R.updateMatrixWorld(),m)D.style.cssText="position:absolute;top:0;left:0;pointer-events:none;overflow:hidden;";else{const e=v(j.current,C,_);D.style.cssText=`position:absolute;top:0;left:0;transform:translate3d(${e[0]}px,${e[1]}px,0);transform-origin:0 0;`}return H&&(i?H.prepend(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:_.width,height:_.height,transformStyle:"preserve-3d",pointerEvents:"none"}:{position:"absolute",transform:s?"translate3d(-50%,-50%,0)":"none",...c&&{top:-_.height/2,left:-_.width/2,width:_.width,height:_.height},...r}),[r,s,c,_,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:w,className:a,style:r,children:e})))):z.render(M.createElement("div",{ref:w,style:$,className:a,children:e}))}));const X=M.useRef(!0);return o.useFrame((()=>{if(j.current){C.updateMatrixWorld(),j.current.updateWorldMatrix(!0,!1);const e=m?W.current:v(j.current,C,_);if(m||Math.abs(O.current-C.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=A.setFromMatrixPosition(e.matrixWorld),n=F.setFromMatrixPosition(t.matrixWorld),o=r.sub(n),a=t.getWorldDirection(B);return o.angleTo(a)>Math.PI/2}(j.current,C);let r=!1;"boolean"==typeof f?!0===f&&(r=[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=A.setFromMatrixPosition(e.matrixWorld),a=o.clone();a.project(t),r.setFromCamera(a,t);const i=r.intersectObjects(n,!0);if(i.length){const e=i[0].distance;return o.distanceTo(r.ray.origin)<e}return!0}(j.current,C,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=A.setFromMatrixPosition(e.matrixWorld),o=F.setFromMatrixPosition(t.matrixWorld),a=n.distanceTo(o),i=(r[1]-r[0])/(t.far-t.near),s=r[1]-i*t.far;return Math.round(i*a+s)}}(j.current,C,h)}`,m){const[e,t]=[_.width/2,_.height/2],r=C.projectionMatrix.elements[5]*t,{isOrthographicCamera:n,top:o,left:a,bottom:i,right:s}=C,c=V(C.matrixWorldInverse),l=n?`scale(${r})translate(${U(-(s+a)/2)}px,${U((o+i)/2)}px)`:`translateZ(${r}px)`;let m=j.current.matrixWorld;d&&(m=C.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=_.width+"px",D.style.height=_.height+"px",D.style.perspective=n?"":`${r}px`,N.current&&G.current&&(N.current.style.transform=`${l}${c}translate(${e}px,${t}px)`,G.current.style.transform=I(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=A.setFromMatrixPosition(e.matrixWorld),n=F.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,C)*u;D.style.transform=`translate3d(${e[0]}px,${e[1]}px,0) scale(${t})`}W.current=e,O.current=C.zoom}}})),M.createElement("group",b.default({},E,{ref:j}))}));let N=0;const G=P.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 Y=M.forwardRef((({children:e},t)=>{const r=M.useRef(null),n=X(),{width:a,height:i}=o.useThree((e=>e.viewport));return o.useFrame((()=>{r.current.position.x=n.horizontal?-a*(n.pages-1)*n.offset:0,r.current.position.y=n.horizontal?0:i*(n.pages-1)*n.offset})),M.createElement("group",{ref:C.default([t,r])},e)})),Z=M.forwardRef((({children:e,style:t,...r},n)=>{const a=X(),i=M.useRef(null),{width:s,height:c}=o.useThree((e=>e.size)),l=M.useContext(o.context),u=M.useMemo((()=>S.createRoot(a.fixed)),[a.fixed]);return o.useFrame((()=>{a.delta>a.eps&&(i.current.style.transform=`translate3d(${a.horizontal?-s*(a.pages-1)*a.offset:0}px,${a.horizontal?0:c*(a.pages-1)*-a.offset}px,0)`)})),u.render(M.createElement("div",b.default({ref:C.default([n,i]),style:{...t,position:"absolute",top:0,left:0,willChange:"transform"}},r),M.createElement(q.Provider,{value:a},M.createElement(o.context.Provider,{value:l},e)))),null})),K=M.forwardRef((({html:e,...t},r)=>{const n=e?Z:Y;return M.createElement(n,b.default({ref:r},t))}));const J=M.createContext([]);const Q=M.forwardRef((function({follow:e=!0,lockX:t=!1,lockY:r=!1,lockZ:n=!1,...a},i){const s=M.useRef();return o.useFrame((({camera:o})=>{if(!e||!s.current)return;const a=s.current.rotation.clone();s.current.quaternion.copy(o.quaternion),t&&(s.current.rotation.x=a.x),r&&(s.current.rotation.y=a.y),n&&(s.current.rotation.z=a.z)})),M.createElement("group",b.default({ref:C.default([s,i])},a))})),ee=M.forwardRef((function({points:e,color:t="black",vertexColors:r,lineWidth:o,dashed:a,...i},s){const[c]=M.useState((()=>new l.Line2)),[u]=M.useState((()=>new l.LineMaterial)),[d]=M.useState((()=>new n.Vector2(512,512))),m=M.useMemo((()=>{const t=new l.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((()=>{c.computeLineDistances()}),[e,c]),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:c,ref:s},i),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},i)))})),te=new n.Vector3,re=M.forwardRef((function({start:e=[0,0,0],end:t=[0,0,0],mid:r,segments:o=20,...a},i){const s=M.useRef(null),[c]=M.useState((()=>new n.QuadraticBezierCurve3(void 0,void 0,void 0))),l=M.useCallback(((e,t,r,o=20)=>(e instanceof n.Vector3?c.v0.copy(e):c.v0.set(...e),t instanceof n.Vector3?c.v2.copy(t):c.v2.set(...t),r instanceof n.Vector3?c.v1.copy(r):c.v1.copy(c.v0.clone().add(c.v2.clone().sub(c.v0)).add(te.set(0,c.v0.y-c.v2.y,0))),c.getPoints(o))),[]);M.useLayoutEffect((()=>{s.current.setPoints=(e,t,r)=>{const n=l(e,t,r);s.current.geometry&&s.current.geometry.setPositions(n.map((e=>e.toArray())).flat())}}),[]);const u=M.useMemo((()=>l(e,t,r,o)),[e,t,r,o]);return M.createElement(ee,b.default({ref:C.default([s,i]),points:u},a))})),ne=M.forwardRef((function({start:e,end:t,midA:r,midB:o,segments:a=20,...i},s){const c=M.useMemo((()=>{const i=e instanceof n.Vector3?e:new n.Vector3(...e),s=t instanceof n.Vector3?t:new n.Vector3(...t),c=r instanceof n.Vector3?r:new n.Vector3(...r),l=o instanceof n.Vector3?o:new n.Vector3(...o);return new n.CubicBezierCurve3(i,c,l,s).getPoints(a)}),[e,t,r,o,a]);return M.createElement(ee,b.default({ref:s,points:c},i))})),oe=M.forwardRef((({url:e,distance:t=1,loop:r=!0,autoplay:a,...i},s)=>{const c=M.useRef(),l=o.useThree((({camera:e})=>e)),[u]=M.useState((()=>new n.AudioListener)),d=o.useLoader(n.AudioLoader,e);return M.useEffect((()=>{const e=c.current;e&&(e.setBuffer(d),e.setRefDistance(t),e.setLoop(r),a&&!e.isPlaying&&e.play())}),[d,l,t,r]),M.useEffect((()=>{const e=c.current;return l.add(u),()=>{l.remove(u),e&&(e.isPlaying&&e.stop(),e.source&&e.source._connected&&e.disconnect())}}),[]),M.createElement("positionalAudio",b.default({ref:C.default([c,s]),args:[u]},i))})),ae=M.forwardRef((({anchorX:e="center",anchorY:t="middle",font:r,children:n,characters:a,onSync:i,...s},c)=>{const l=o.useThree((({invalidate:e})=>e)),[u]=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((()=>{l(),i&&i(u)}))})),M.useEffect((()=>()=>u.dispose()),[u]),M.createElement("primitive",b.default({object:u,ref:c,font:r,text:p,anchorX:e,anchorY:t},s),f)})),ie=["string","number"],se=M.forwardRef((({font:e,loader:r,size:n=1,height:a=.2,bevelThickness:i=.1,bevelSize:s=.01,bevelEnabled:c=!1,bevelOffset:u=0,curveSegments:d=8,children:m,...f},p)=>{M.useMemo((()=>{o.extend({RenamedTextGeometry:l.TextGeometry})}),[]);const h=M.useMemo((()=>r.parse(e)),[e]),v=t.useMemo((()=>({font:h,size:n,height:a,bevelThickness:i,bevelSize:s,bevelEnabled:c,bevelOffset:u,curveSegments:d})),[h,n,a,i,s,c,u,d]),g=t.useMemo((()=>(e=>{let t="";return M.Children.map(e,(e=>{ie.includes(typeof e)&&(t+=e+"")})),t})(m)),[m]),x=M.useMemo((()=>[g,v]),[g,v]);return M.createElement("mesh",b.default({},f,{ref:p}),M.createElement("renamedTextGeometry",{args:x}),m)})),ce=M.forwardRef((({font:e,loader:t,...r},n)=>{const o=m.suspend((async()=>await(await fetch(e)).json()),[e]);return M.createElement(se,b.default({},r,{ref:n,font:o,loader:t}))})),le=M.forwardRef(((e,t)=>{const r=M.useMemo((()=>new l.FontLoader),[]);return"string"==typeof e.font?M.createElement(ce,b.default({},e,{ref:t,loader:r})):M.createElement(se,b.default({},e,{ref:t,loader:r}))})),ue=M.forwardRef((({children:e,multisamping:t=8,renderIndex:r=1,disableRender:a,disableGamma:i,disableRenderPass:s,depthBuffer:c=!0,stencilBuffer:u=!1,anisotropy:d=1,encoding:m,type:f,...p},h)=>{M.useMemo((()=>o.extend({EffectComposer:l.EffectComposer,RenderPass:l.RenderPass,ShaderPass:l.ShaderPass})),[]);const v=M.useRef(),{scene:g,camera:x,gl:y,size:E,viewport:w}=o.useThree(),[S]=M.useState((()=>{const e=new n.WebGLRenderTarget(E.width,E.height,{type:f||n.HalfFloatType,format:n.RGBAFormat,encoding:m||y.outputEncoding,depthBuffer:c,stencilBuffer:u,anisotropy:d});return e.samples=t,e}));M.useEffect((()=>{var e,t;null==(e=v.current)||e.setSize(E.width,E.height),null==(t=v.current)||t.setPixelRatio(w.dpr)}),[y,E,w.dpr]),o.useFrame((()=>{var e;a||null==(e=v.current)||e.render()}),r);const T=[];return s||T.push(M.createElement("renderPass",{key:"renderpass",attach:`passes-${T.length}`,args:[g,x]})),i||T.push(M.createElement("shaderPass",{attach:`passes-${T.length}`,key:"gammapass",args:[l.GammaCorrectionShader]})),M.Children.forEach(e,(e=>T.push(M.cloneElement(e,{key:T.length,attach:`passes-${T.length}`})))),M.createElement("effectComposer",b.default({ref:C.default([h,v]),args:[y,S]},p),T)}));function de(e,t,r,n){const o=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}),this.key="",o.forEach((([e])=>Object.defineProperty(this,e,{get:()=>this.uniforms[e].value,set:t=>this.uniforms[e].value=t}))),n&&n(this)}};return o.key=T.MathUtils.generateUUID(),o}const me=e=>e===Object(e)&&!Array.isArray(e)&&"function"!=typeof e;function fe(e,r){const a=o.useThree((e=>e.gl)),i=o.useLoader(n.TextureLoader,me(e)?Object.values(e):e);if(t.useLayoutEffect((()=>{null==r||r(i)}),[r]),t.useEffect((()=>{(Array.isArray(i)?i:[i]).forEach(a.initTexture)}),[a,i]),me(e)){const t=Object.keys(e),r={};return t.forEach((e=>Object.assign(r,{[e]:i[t.indexOf(e)]}))),r}return i}fe.preload=e=>o.useLoader.preload(n.TextureLoader,e),fe.clear=e=>o.useLoader.clear(n.TextureLoader,e);const pe=de({color:new T.Color("white"),scale:[1,1],imageBounds:[1,1],map:null,zoom:1,grayscale:0,opacity:1},"\n varying vec2 vUv;\n void main() {\n gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);\n vUv = uv;\n }\n","\n // mostly from https://gist.github.com/statico/df64c5d167362ecf7b34fca0b1459a44\n varying vec2 vUv;\n uniform vec2 scale;\n uniform vec2 imageBounds;\n uniform vec3 color;\n uniform sampler2D map;\n uniform float zoom;\n uniform float grayscale;\n uniform float opacity;\n const vec3 luma = vec3(.299, 0.587, 0.114);\n vec4 toGrayscale(vec4 color, float intensity) {\n return vec4(mix(color.rgb, vec3(dot(color.rgb, luma)), intensity), color.a);\n }\n vec2 aspect(vec2 size) {\n return size / min(size.x, size.y);\n }\n void main() {\n vec2 s = aspect(scale);\n vec2 i = aspect(imageBounds);\n float rs = s.x / s.y;\n float ri = i.x / i.y;\n vec2 new = rs < ri ? vec2(i.x * s.y / i.y, s.y) : vec2(s.x, i.y * s.x / i.x);\n vec2 offset = (rs < ri ? vec2((new.x - s.x) / 2.0, 0.0) : vec2(0.0, (new.y - s.y) / 2.0)) / new;\n vec2 uv = vUv * s / new + offset;\n vec2 zUv = (uv - vec2(0.5, 0.5)) / zoom + vec2(0.5, 0.5);\n gl_FragColor = toGrayscale(texture2D(map, zUv) * vec4(color, opacity), grayscale);\n \n #include <tonemapping_fragment>\n #include <encodings_fragment>\n }\n"),he=M.forwardRef((({children:e,color:t,segments:r=1,scale:n=1,zoom:a=1,grayscale:i=0,opacity:s=1,texture:c,toneMapped:l,transparent:u,...d},m)=>{o.extend({ImageMaterial:pe});const f=o.useThree((e=>e.gl)),p=Array.isArray(n)?[n[0],n[1]]:[n,n],h=[c.image.width,c.image.height];return M.createElement("mesh",b.default({ref:m,scale:n},d),M.createElement("planeGeometry",{args:[1,1,r,r]}),M.createElement("imageMaterial",{color:t,map:c,"map-encoding":f.outputEncoding,zoom:a,grayscale:i,opacity:s,scale:p,imageBounds:h,toneMapped:l,transparent:u}),e)})),ve=M.forwardRef((({url:e,...t},r)=>{const n=fe(e);return M.createElement(he,b.default({},t,{texture:n,ref:r}))})),ge=M.forwardRef((({url:e,...t},r)=>M.createElement(he,b.default({},t,{ref:r})))),xe=M.forwardRef(((e,t)=>{if(e.url)return M.createElement(ve,b.default({},e,{ref:t}));if(e.texture)return M.createElement(ge,b.default({},e,{ref:t}));throw new Error("<Image /> requires a url or texture")}));const ye={width:.2,length:1,decay:1,local:!1,stride:0,interval:1},Ee=(e,t=1)=>(e.set(e.subarray(t)),e.fill(-1/0,-t),e);function we(e,t){const{length:r,local:a,decay:i,interval:s,stride:c}={...ye,...t},l=M.useRef(),[u]=M.useState((()=>new n.Vector3));M.useLayoutEffect((()=>{e&&(l.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&&l.current){if(0===m.current){let t;a?t=e.position:(e.getWorldPosition(u),t=u);const r=1*i;for(let e=0;e<r;e++)t.distanceTo(d.current)<c||(Ee(l.current,3),l.current.set(t.toArray(),l.current.length-3));d.current.copy(t)}m.current++,m.current=m.current%s}})),l}const be=M.forwardRef(((e,t)=>{const{children:r}=e,{width:a,length:i,decay:s,local:c,stride:l,interval:u}={...ye,...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=we(g,{length:i,decay:s,local:c,stride:l,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 E=M.useMemo((()=>new f.MeshLine),[]),w=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((()=>{w.uniforms.resolution.value.set(h.width,h.height)}),[h]),o.useFrame((()=>{y.current&&E.setPoints(y.current,m)})),M.createElement("group",null,M.createElement("mesh",{ref:t,geometry:E,material:w}),M.createElement("group",{ref:v},r))}));function Me(e,{keys:t=["near","far","color","distance","decay","penumbra","angle","intensity","skeleton","visible","castShadow","receiveShadow","morphTargetDictionary","morphTargetInfluences","name","geometry","material","position","rotation","scale","up","userData"],deep:r,inject:n,castShadow:o,receiveShadow:a}){let i=_.default(e,t);return r&&(i.geometry&&"materialsOnly"!==r&&(i.geometry=i.geometry.clone()),i.material&&"geometriesOnly"!==r&&(i.material=i.material.clone())),n&&(i="function"==typeof n?{...i,children:n(e)}:M.isValidElement(n)?{...i,children:n}:{...i,...n}),"Mesh"===e.type&&(o&&(i.castShadow=!0),a&&(i.receiveShadow=!0)),i}const Se=M.forwardRef((({object:e,children:t,deep:r,castShadow:n,receiveShadow:o,inject:a,keys:i,...s},c)=>{const l={keys:i,deep:r,inject:a,castShadow:n,receiveShadow:o};if(Array.isArray(e))return M.createElement("group",b.default({},s,{ref:c}),e.map((e=>M.createElement(Se,b.default({key:e.uuid,object:e},l)))),t);const{children:u,...d}=Me(e,l),m=e.type[0].toLowerCase()+e.type.slice(1);return M.createElement(m,b.default({},d,s,{ref:c}),(null==e?void 0:e.children).map((e=>{let t={},r=e.type[0].toLowerCase()+e.type.slice(1);return"group"===r||"object3D"===r?(r=Se,t={object:e,...l}):t=Me(e,l),M.createElement(r,b.default({key:e.uuid},t))})),t,u)})),Te=M.forwardRef((({makeDefault:e,...t},r)=>{const n=o.useThree((({set:e})=>e)),a=o.useThree((({camera:e})=>e)),i=o.useThree((({size:e})=>e)),s=M.useRef();return M.useLayoutEffect((()=>{s.current&&!t.manual&&s.current.updateProjectionMatrix()}),[i,t]),M.useLayoutEffect((()=>{if(e&&s.current){const e=a;return n((()=>({camera:s.current}))),()=>n((()=>({camera:e})))}}),[s,e,n]),M.createElement("orthographicCamera",b.default({left:i.width/-2,right:i.width/2,top:i.height/2,bottom:i.height/-2,ref:C.default([s,r])},t))})),Pe=M.forwardRef((({makeDefault:e,...t},r)=>{const n=o.useThree((({set:e})=>e)),a=o.useThree((({camera:e})=>e)),i=o.useThree((({size:e})=>e)),s=M.useRef();return M.useLayoutEffect((()=>{const{current:e}=s;e&&!t.manual&&(e.aspect=i.width/i.height,e.updateProjectionMatrix())}),[i,t]),M.useLayoutEffect((()=>{if(e&&s.current){const e=a;return n((()=>({camera:s.current}))),()=>n((()=>({camera:e})))}}),[s,e,n]),M.createElement("perspectiveCamera",b.default({ref:C.default([s,r])},t))}));const Ce=M.forwardRef(((e,t)=>{const{camera:r,onChange:n,...a}=e,i=o.useThree((e=>e.camera)),s=o.useThree((e=>e.invalidate)),c=r||i,[u]=M.useState((()=>new l.DeviceOrientationControls(c)));return M.useEffect((()=>{const e=e=>{s(),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,s]),o.useFrame((()=>null==u?void 0:u.update()),-1),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})),Re=M.forwardRef((({domElement:e,...t},r)=>{const{onChange:n,...a}=t,i=o.useThree((e=>e.invalidate)),s=o.useThree((e=>e.camera)),c=o.useThree((e=>e.gl)),u=o.useThree((e=>e.events)),d=e||u.connected||c.domElement,[m]=M.useState((()=>new l.FlyControls(s,d)));return M.useEffect((()=>{const e=e=>{i(),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,i]),o.useFrame(((e,t)=>null==m?void 0:m.update(t))),m?M.createElement("primitive",b.default({ref:r,object:m},a)):null})),_e=M.forwardRef(((e={enableDamping:!0},t)=>{const{domElement:r,camera:n,onChange:a,onStart:i,onEnd:s,...c}=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 l.MapControls(h)),[h]);return M.useEffect((()=>{v.connect(p);const e=e=>{u(),a&&a(e)};return v.addEventListener("change",e),i&&v.addEventListener("start",i),s&&v.addEventListener("end",s),()=>{v.dispose(),v.removeEventListener("change",e),i&&v.removeEventListener("start",i),s&&v.removeEventListener("end",s)}}),[a,i,s,v,u,p]),o.useFrame((()=>v.update()),-1),M.createElement("primitive",b.default({ref:t,object:v,enableDamping:!0},c))})),Le=M.forwardRef((({makeDefault:e,camera:t,regress:r,domElement:n,enableDamping:a=!0,onChange:i,onStart:s,onEnd:c,...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,E=n||h.connected||p.domElement,w=M.useMemo((()=>new l.OrbitControls(y)),[y]);return o.useFrame((()=>{w.enabled&&w.update()}),-1),M.useEffect((()=>(w.connect(E),()=>{w.dispose()})),[E,r,w,m]),M.useEffect((()=>{const e=e=>{m(),r&&x.regress(),i&&i(e)};return w.addEventListener("change",e),s&&w.addEventListener("start",s),c&&w.addEventListener("end",c),()=>{s&&w.removeEventListener("start",s),c&&w.removeEventListener("end",c),w.removeEventListener("change",e)}}),[i,s,c]),M.useEffect((()=>{if(e){const e=g().controls;return v({controls:w}),()=>v({controls:e})}}),[e,w]),M.createElement("primitive",b.default({ref:d,object:w,enableDamping:a},u))})),De=M.forwardRef((({makeDefault:e,camera:t,domElement:r,regress:n,onChange:a,onStart:i,onEnd:s,...c},u)=>{const{invalidate:d,camera:m,gl:f,events:p,set:h,get:v,performance:g,viewport:x}=o.useThree(),y=t||m,E=r||p.connected||f.domElement,w=M.useMemo((()=>new l.TrackballControls(y)),[y]);return o.useFrame((()=>{w.enabled&&w.update()}),-1),M.useEffect((()=>(w.connect(E),()=>{w.dispose()})),[E,n,w,d]),M.useEffect((()=>{const e=e=>{d(),n&&g.regress(),a&&a(e)};return w.addEventListener("change",e),i&&w.addEventListener("start",i),s&&w.addEventListener("end",s),()=>{i&&w.removeEventListener("start",i),s&&w.removeEventListener("end",s),w.removeEventListener("change",e)}}),[a,i,s]),M.useEffect((()=>{w.handleResize()}),[x]),M.useEffect((()=>{if(e){const e=v().controls;return h({controls:w}),()=>h({controls:e})}}),[e,w]),M.createElement("primitive",b.default({ref:u,object:w},c))})),ze=t.forwardRef((({camera:e,makeDefault:r,regress:n,domElement:a,onChange:i,onStart:s,onEnd:c,...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,E=a||h.connected||p.domElement,w=t.useMemo((()=>new l.ArcballControls(y)),[y]);return o.useFrame((()=>{w.enabled&&w.update()}),-1),t.useEffect((()=>(w.connect(E),()=>{w.dispose()})),[E,n,w,m]),t.useEffect((()=>{const e=e=>{m(),n&&x.regress(),i&&i(e)};return w.addEventListener("change",e),s&&w.addEventListener("start",s),c&&w.addEventListener("end",c),()=>{w.removeEventListener("change",e),s&&w.removeEventListener("start",s),c&&w.removeEventListener("end",c)}}),[i,s,c]),t.useEffect((()=>{if(r){const e=g().controls;return v({controls:w}),()=>v({controls:e})}}),[r,w]),M.createElement("primitive",b.default({ref:d,object:w},u))})),Ae=M.forwardRef((({children:e,domElement:t,onChange:r,onMouseDown:n,onMouseUp:a,onObjectChange:i,object:s,...c},u)=>{const d=["enabled","axis","mode","translationSnap","rotationSnap","scaleSnap","space","size","showX","showY","showZ"],{camera:m,...f}=c,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)),E=o.useThree((e=>e.invalidate)),w=m||y,S=t||x.connected||g.domElement,P=M.useMemo((()=>new l.TransformControls(w,S)),[w,S]),C=M.useRef();return M.useLayoutEffect((()=>(s?P.attach(s instanceof T.Object3D?s:s.current):C.current instanceof T.Object3D&&P.attach(C.current),()=>{P.detach()})),[s,e,P]),M.useEffect((()=>{if(v){const e=e=>v.enabled=!e.value;return P.addEventListener("dragging-changed",e),()=>P.removeEventListener("dragging-changed",e)}}),[P,v]),M.useEffect((()=>{const e=e=>{E(),r&&r(e)};return null==P||null==P.addEventListener||P.addEventListener("change",e),n&&(null==P||null==P.addEventListener||P.addEventListener("mouseDown",n)),a&&(null==P||null==P.addEventListener||P.addEventListener("mouseUp",a)),i&&(null==P||null==P.addEventListener||P.addEventListener("objectChange",i)),()=>{null==P||null==P.removeEventListener||P.removeEventListener("change",e),n&&(null==P||null==P.removeEventListener||P.removeEventListener("mouseDown",n)),a&&(null==P||null==P.removeEventListener||P.removeEventListener("mouseUp",a)),i&&(null==P||null==P.removeEventListener||P.removeEventListener("objectChange",i))}}),[r,n,a,i,P,E]),P?M.createElement(M.Fragment,null,M.createElement("primitive",b.default({ref:u,object:P},p)),M.createElement("group",b.default({ref:C},h),e)):null})),Fe=M.forwardRef((({domElement:e,selector:t,onChange:r,onLock:n,onUnlock:a,enabled:i=!0,...s},c)=>{const{camera:u,...d}=s,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,[E]=M.useState((()=>new l.PointerLockControls(x)));return M.useEffect((()=>{if(i){E.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)}}),()=>{E.disconnect(),f({compute:e})}}}),[i,E]),M.useEffect((()=>{const e=e=>{v(),r&&r(e)};E.addEventListener("change",e),n&&E.addEventListener("lock",n),a&&E.addEventListener("unlock",a);const o=()=>E.lock(),i=t?Array.from(document.querySelectorAll(t)):[document];return i.forEach((e=>e&&e.addEventListener("click",o))),()=>{E.removeEventListener("change",e),n&&E.addEventListener("lock",n),a&&E.addEventListener("unlock",a),i.forEach((e=>e?e.removeEventListener("click",o):void 0))}}),[r,n,a,t]),M.createElement("primitive",b.default({ref:c,object:E},d))})),Be=M.forwardRef((({domElement:e,...t},r)=>{const n=o.useThree((e=>e.camera)),a=o.useThree((e=>e.gl)),i=o.useThree((e=>e.events)),s=e||i.connected||a.domElement,[c]=M.useState((()=>new l.FirstPersonControls(n,s)));return o.useFrame(((e,t)=>{c.update(t)}),-1),c?M.createElement("primitive",b.default({ref:r,object:c},t)):null}));function ke(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 i=this.constructor.prototype.raycast.bind(this);i&&i(a,o)}}));return a}const Ue=M.createContext({}),je=()=>M.useContext(Ue),Ve=2*Math.PI,Oe=new n.Object3D,Ie=new n.Matrix4,[We,Ne]=[new n.Quaternion,new n.Quaternion],Ge=new n.Vector3,He=new n.Vector3,$e="#f0f0f0",qe="#999",Xe="black",Ye="black",Ze=["Right","Left","Top","Bottom","Front","Back"],Ke=e=>new n.Vector3(...e).multiplyScalar(.38),Je=[[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(Ke),Qe=[.25,.25,.25],et=[[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(Ke),tt=et.map((e=>e.toArray().map((e=>0==e?.5:.25)))),rt=({hover:e,index:t,font:r="20px Inter var, Arial, sans-serif",faces:a=Ze,color:i=$e,hoverColor:s=qe,textColor:c=Xe,strokeColor:l=Ye,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=i,o.fillRect(0,0,e.width,e.height),o.strokeStyle=l,o.strokeRect(0,0,e.width,e.height),o.font=r,o.textAlign="center",o.fillStyle=c,o.fillText(a[t].toUpperCase(),64,76),new n.CanvasTexture(e)}),[t,a,r,i,c,l]);return M.createElement("meshLambertMaterial",{map:m,"map-encoding":d.outputEncoding,"map-anisotropy":d.capabilities.getMaxAnisotropy()||1,attach:`material-${t}`,color:e?s:"white",transparent:!0,opacity:u})},nt=e=>{const{tweenCamera:t,raycast:r}=je(),[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(rt,b.default({key:r,index:r,hover:n===r},e)))),M.createElement("boxGeometry",null))},ot=({onClick:e,dimensions:t,position:r,hoverColor:n=qe})=>{const{tweenCamera:o,raycast:a}=je(),[i,s]=M.useState(!1);return M.createElement("mesh",{scale:1.01,position:r,raycast:a,onPointerOver:e=>{e.stopPropagation(),s(!0)},onPointerOut:e=>{e.stopPropagation(),s(!1)},onClick:e||(e=>{e.stopPropagation(),o(r)})},M.createElement("meshBasicMaterial",{color:i?n:"white",transparent:!0,opacity:.6,visible:i}),M.createElement("boxGeometry",{args:t}))};function at({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 it({onClick:e,font:t,disabled:r,arcStyle:a,label:i,labelColor:s,axisHeadScale:c=1,...l}){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(),i&&(r.font=t,r.textAlign="center",r.fillStyle=s,r.fillText(i,32,41)),new n.CanvasTexture(e)}),[a,i,s,t]),[m,f]=M.useState(!1),p=(i?1:.75)*(m?1.2:1)*c;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)})},l),M.createElement("spriteMaterial",{map:d,"map-encoding":u.outputEncoding,"map-anisotropy":u.capabilities.getMaxAnisotropy()||1,alphaTest:.3,opacity:i?1:.75,toneMapped:!1}))}function st(e,{path:t}){const[r]=o.useLoader(n.CubeTextureLoader,[e],(e=>e.setPath(t)));return r}function ct(e){return o.useLoader(l.FBXLoader,e)}st.preload=(e,{path:t})=>o.useLoader.preload(n.CubeTextureLoader,[e],(e=>e.setPath(t))),ct.preload=e=>o.useLoader.preload(l.FBXLoader,e),ct.clear=e=>o.useLoader.clear(l.FBXLoader,e);let lt=null;function ut(e,t,r){return n=>{r&&r(n),e&&(lt||(lt=new l.DRACOLoader),lt.setDecoderPath("string"==typeof e?e:"https://www.gstatic.com/draco/versioned/decoders/1.4.3/"),n.setDRACOLoader(lt)),t&&n.setMeshoptDecoder("function"==typeof l.MeshoptDecoder?l.MeshoptDecoder():l.MeshoptDecoder)}}function dt(e,t=!0,r=!0,n){return o.useLoader(l.GLTFLoader,e,ut(t,r,n))}dt.preload=(e,t=!0,r=!0,n)=>o.useLoader.preload(l.GLTFLoader,e,ut(t,r,n)),dt.clear=e=>o.useLoader.clear(l.GLTFLoader,e);const mt="https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master";function ft(e,r=`${mt}/basis/`){const n=o.useThree((e=>e.gl)),a=o.useLoader(l.KTX2Loader,me(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]),me(e)){const t=Object.keys(e),r={};return t.forEach((e=>Object.assign(r,{[e]:a[t.indexOf(e)]}))),r}return a}function pt(e,t){"function"==typeof e?e(t):null!=e&&(e.current=t)}function ht(e,t,r){const{gl:n,size:a,viewport:i}=o.useThree(),s="number"==typeof e?e:a.width*i.dpr,c="number"==typeof t?t:a.height*i.dpr,l=("number"==typeof e?r:e)||{},{samples:u,...d}=l,m=M.useMemo((()=>{let e;return e=new T.WebGLRenderTarget(s,c,{minFilter:T.LinearFilter,magFilter:T.LinearFilter,encoding:n.outputEncoding,type:T.HalfFloatType,...d}),e.samples=u,e}),[]);return M.useLayoutEffect((()=>{m.setSize(s,c),u&&(m.samples=u)}),[u,m,s,c]),M.useEffect((()=>()=>m.dispose()),[]),m}ft.preload=(e,t=`${mt}/basis/`)=>o.useLoader.preload(l.KTX2Loader,e,(e=>{e.setTranscoderPath(t)})),ft.clear=e=>o.useLoader.clear(l.KTX2Loader,e);const vt=new T.Box3,gt=new T.Vector3,xt=M.forwardRef((({children:e,curve:t},r)=>{const[n]=M.useState((()=>new T.Scene)),[a,i]=M.useState(),s=M.useRef();return M.useEffect((()=>{s.current=new l.Flow(n.children[0]),i(s.current.object3D)}),[e]),M.useEffect((()=>{var e;t&&(null==(e=s.current)||e.updateCurve(0,t))}),[t]),M.useImperativeHandle(r,(()=>({moveAlongCurve:e=>{var t;null==(t=s.current)||t.moveAlongCurve(e)}}))),M.createElement(M.Fragment,null,o.createPortal(e,n),a&&M.createElement("primitive",{object:a}))}));class yt 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 Et=M.forwardRef((({speed:e=1,...t},r)=>{const[n]=M.useState((()=>new yt));return o.useFrame((t=>n&&(n.time=t.clock.getElapsedTime()*e))),M.createElement("primitive",b.default({object:n,ref:r,attach:"material"},t))}));class wt 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 bt=M.forwardRef((({speed:e=1,...t},r)=>{const[n]=M.useState((()=>new wt));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.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 St{constructor({gl:e,resolution:t,width:r=500,height:o=500,minDepthThreshold:a=0,maxDepthThreshold:i=1,depthScale:s=0,depthToBlurRatioBias:c=.25}){this.renderToScreen=!1,this.renderTargetA=new n.WebGLRenderTarget(t,t,{minFilter:n.LinearFilter,magFilter:n.LinearFilter,stencilBuffer:!1,depthBuffer:!1,encoding:e.outputEncoding}),this.renderTargetB=this.renderTargetA.clone(),this.convolutionMaterial=new Mt,this.convolutionMaterial.setTexelSize(1/r,1/o),this.convolutionMaterial.setResolution(new n.Vector2(r,o)),this.scene=new n.Scene,this.camera=new n.Camera,this.convolutionMaterial.uniforms.minDepthThreshold.value=a,this.convolutionMaterial.uniforms.maxDepthThreshold.value=i,this.convolutionMaterial.uniforms.depthScale.value=s,this.convolutionMaterial.uniforms.depthToBlurRatioBias.value=c,this.convolutionMaterial.defines.USE_DEPTH=s>0;const l=new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),u=new Float32Array([0,0,2,0,0,2]),d=new n.BufferGeometry;d.setAttribute("position",new n.BufferAttribute(l,3)),d.setAttribute("uv",new n.BufferAttribute(u,2)),this.screen=new n.Mesh(d,this.convolutionMaterial),this.screen.frustumCulled=!1,this.scene.add(this.screen)}render(e,t,r){const n=this.scene,o=this.camera,a=this.renderTargetA,i=this.renderTargetB;let s=this.convolutionMaterial,c=s.uniforms;c.depthBuffer.value=t.depthTexture;const l=s.kernel;let u,d,m,f=t;for(d=0,m=l.length-1;d<m;++d)u=0==(1&d)?a:i,c.kernel.value=l[d],c.inputBuffer.value=f.texture,e.setRenderTarget(u),e.render(n,o),f=u;c.kernel.value=l[d],c.inputBuffer.value=f.texture,e.setRenderTarget(this.renderToScreen?null:r),e.render(n,o)}}class Tt 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:Tt});const Pt=M.forwardRef((({mixBlur:e=0,mixStrength:t=1,resolution:r=256,blur:a=[0,0],minDepthThreshold:i=.9,maxDepthThreshold:s=1,depthScale:c=0,depthToBlurRatioBias:l=.25,mirror:u=0,distortion:d=1,mixContrast:m=1,distortionMap:f,reflectorOffset:p=0,...h},v)=>{const g=o.useThree((({gl:e})=>e)),x=o.useThree((({camera:e})=>e)),y=o.useThree((({scene:e})=>e)),E=(a=Array.isArray(a)?a:[a,a])[0]+a[1]>0,w=M.useRef(null),[S]=M.useState((()=>new n.Plane)),[T]=M.useState((()=>new n.Vector3)),[P]=M.useState((()=>new n.Vector3)),[R]=M.useState((()=>new n.Vector3)),[_]=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)),[A]=M.useState((()=>new n.Vector3)),[F]=M.useState((()=>new n.Vector4)),[B]=M.useState((()=>new n.Matrix4)),[k]=M.useState((()=>new n.PerspectiveCamera)),U=M.useCallback((()=>{var e;const t=w.current.parent||(null==(e=w.current)?void 0:e.__r3f.parent);if(!t)return;if(P.setFromMatrixPosition(t.matrixWorld),R.setFromMatrixPosition(x.matrixWorld),_.extractRotation(t.matrixWorld),T.set(0,0,1),T.applyMatrix4(_),P.addScaledVector(T,p),z.subVectors(P,R),z.dot(T)>0)return;z.reflect(T).negate(),z.add(P),_.extractRotation(x.matrixWorld),L.set(0,0,-1),L.applyMatrix4(_),L.add(R),A.subVectors(P,L),A.reflect(T).negate(),A.add(P),k.position.copy(z),k.up.set(0,1,0),k.up.applyMatrix4(_),k.up.reflect(T),k.lookAt(A),k.far=x.far,k.updateMatrixWorld(),k.projectionMatrix.copy(x.projectionMatrix),B.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),B.multiply(k.projectionMatrix),B.multiply(k.matrixWorldInverse),B.multiply(t.matrixWorld),S.setFromNormalAndCoplanarPoint(T,P),S.applyMatrix4(k.matrixWorldInverse),D.set(S.normal.x,S.normal.y,S.normal.z,S.constant);const r=k.projectionMatrix;F.x=(Math.sign(D.x)+r.elements[8])/r.elements[0],F.y=(Math.sign(D.y)+r.elements[9])/r.elements[5],F.z=-1,F.w=(1+r.elements[10])/r.elements[14],D.multiplyScalar(2/D.dot(F)),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,O,I]=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 St({gl:g,resolution:r,width:a[0],height:a[1],minDepthThreshold:i,maxDepthThreshold:s,depthScale:c,depthToBlurRatioBias:l}),{mirror:u,textureMatrix:B,mixBlur:e,tDiffuse:p.texture,tDepth:p.depthTexture,tDiffuseBlur:h.texture,hasBlur:E,mixStrength:t,minDepthThreshold:i,maxDepthThreshold:s,depthScale:c,depthToBlurRatioBias:l,distortion:d,distortionMap:f,mixContrast:m,"defines-USE_BLUR":E?"":void 0,"defines-USE_DEPTH":c>0?"":void 0,"defines-USE_DISTORTION":f?"":void 0}]}),[g,a,B,r,u,E,e,t,i,s,c,l,d,f,m]);return o.useFrame((()=>{var e;const t=w.current.parent||(null==(e=w.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),E&&O.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"+I["defines-USE_BLUR"]+I["defines-USE_DEPTH"]+I["defines-USE_DISTORTION"],ref:C.default([w,v])},I,h))}));class Ct 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 Rt=M.forwardRef(((e,t)=>{const[r]=M.useState((()=>new Ct(null)));return M.createElement("primitive",b.default({},e,{object:r,ref:t,attach:"material"}))}));let _t=!1;function Lt(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 Dt=Lt("box"),zt=Lt("circle"),At=Lt("cone"),Ft=Lt("cylinder"),Bt=Lt("sphere"),kt=Lt("plane"),Ut=Lt("tube"),jt=Lt("torus"),Vt=Lt("torusKnot"),Ot=Lt("tetrahedron"),It=Lt("ring"),Wt=Lt("polyhedron"),Nt=Lt("icosahedron"),Gt=Lt("octahedron"),Ht=Lt("dodecahedron"),$t=Lt("extrude"),qt=Lt("lathe"),Xt=1e-5;const Yt=M.forwardRef((function({args:[e=1,t=1,r=1]=[],radius:o=.05,steps:a=1,smoothness:i=4,children:s,...c},l){const u=M.useMemo((()=>function(e,t,r){const o=new n.Shape,a=r-Xt;return o.absarc(Xt,Xt,Xt,-Math.PI/2,-Math.PI,!0),o.absarc(Xt,t-2*a,Xt,Math.PI,Math.PI/2,!0),o.absarc(e-2*a,t-2*a,Xt,Math.PI/2,0,!0),o.absarc(e-2*a,Xt,Xt,0,-Math.PI/2,!0),o}(e,t,o)),[e,t,o]),d=M.useMemo((()=>({depth:r-2*o,bevelEnabled:!0,bevelSegments:2*i,steps:a,bevelSize:o-Xt,bevelThickness:o,curveSegments:i})),[r,o,i]),m=M.useRef();return M.useLayoutEffect((()=>{m.current&&m.current.center()}),[u,d]),M.createElement("mesh",b.default({ref:l},c),M.createElement("extrudeGeometry",{ref:m,args:[u,d]}),s)}));function Zt(){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 Kt=M.forwardRef((function({children:e,...t},r){const n=M.useMemo(Zt,[]);return M.createElement("mesh",b.default({ref:r,geometry:n,frustumCulled:!1},t),e)})),Jt=M.forwardRef((function({children:e,alignTop:t,...r},o){const a=M.useRef(null),i=M.useRef(null);return M.useLayoutEffect((()=>{a.current.position.set(0,0,0),a.current.updateWorldMatrix(!0,!0);const e=(new n.Box3).setFromObject(i.current),r=new n.Vector3,o=new n.Sphere,s=e.max.y-e.min.y;e.getCenter(r),e.getBoundingSphere(o),a.current.position.set(-r.x,-r.y+(t?s/2:0),-r.z)}),[e]),M.createElement("group",b.default({ref:o},r),M.createElement("group",{ref:a},M.createElement("group",{ref:i},e)))})),Qt=e=>e&&e.isOrthographicCamera,er=M.createContext(null);const tr=M.forwardRef((({intensity:e=1,decay:t,decayRate:r=.65,maxYaw:n=.1,maxPitch:a=.1,maxRoll:i=.1,yawFrequency:s=.1,pitchFrequency:c=.1,rollFrequency:u=.1},d)=>{const m=o.useThree((e=>e.camera)),f=o.useThree((e=>e.controls)),p=M.useRef(e),h=M.useRef(m.rotation.clone()),[v]=M.useState((()=>new l.SimplexNoise)),[g]=M.useState((()=>new l.SimplexNoise)),[x]=M.useState((()=>new l.SimplexNoise)),y=()=>{(p.current<0||p.current>1)&&(p.current=p.current<0?0:1)};return M.useImperativeHandle(d,(()=>({getIntensity:()=>p.current,setIntensity:e=>{p.current=e,y()}})),[]),M.useEffect((()=>{if(f){const e=()=>{h.current=m.rotation.clone()};return f.addEventListener("change",e),e(),()=>{f.removeEventListener("change",e)}}}),[m,f]),o.useFrame(((e,o)=>{const l=Math.pow(p.current,2),d=n*l*v.noise(e.clock.elapsedTime*s,1),f=a*l*g.noise(e.clock.elapsedTime*c,1),E=i*l*x.noise(e.clock.elapsedTime*u,1);m.rotation.set(h.current.x+f,h.current.y+d,h.current.z+E),t&&p.current>0&&(p.current-=r*o,y())})),null})),rr=M.forwardRef((({children:e,speed:t=1,rotationIntensity:r=1,floatIntensity:n=1,floatingRange:a=[-.1,.1],...i},s)=>{const c=M.useRef(null),l=M.useRef(1e4*Math.random());return o.useFrame((e=>{var o,i;const s=l.current+e.clock.getElapsedTime();c.current.rotation.x=Math.cos(s/4*t)/8*r,c.current.rotation.y=Math.sin(s/4*t)/8*r,c.current.rotation.z=Math.sin(s/4*t)/20*r;let u=Math.sin(s/4*t)/10;u=T.MathUtils.mapLinear(u,-.1,.1,null!==(o=null==a?void 0:a[0])&&void 0!==o?o:-.1,null!==(i=null==a?void 0:a[1])&&void 0!==i?i:.1),c.current.position.y=u*n})),M.createElement("group",i,M.createElement("group",{ref:C.default([c,s])},e))})),nr={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"};const or=e=>{return(t=e).current&&t.current.isScene?e.current:e;var t};function ar({scene:e,background:t=!1,map:r}){const n=o.useThree((e=>e.scene));return M.useLayoutEffect((()=>{if(r){const o=or(e||n),a=o.background,i=o.environment;return"only"!==t&&(o.environment=r),t&&(o.background=r),()=>{"only"!==t&&(o.environment=i),t&&(o.background=a)}}}),[n,e,r,t]),null}function ir({files:e=["/px.png","/nx.png","/py.png","/ny.png","/pz.png","/nz.png"],path:t="",preset:r,extensions:a}){if(r){if(!(r in nr))throw new Error("Preset must be one of: "+Object.keys(nr).join(", "));e=nr[r],t="https://market-assets.fra1.cdn.digitaloceanspaces.com/market-assets/hdris/"}const i=Array.isArray(e),s=i?n.CubeTextureLoader:l.RGBELoader,c=o.useLoader(s,i?[e]:e,(e=>{e.setPath(t),a&&a(e)})),u=i?c[0]:c;return u.mapping=i?n.CubeReflectionMapping:n.EquirectangularReflectionMapping,u}function sr({background:e=!1,scene:t,...r}){const n=ir(r),a=o.useThree((e=>e.scene));return M.useLayoutEffect((()=>{const r=or(t||a),o=r.background,i=r.environment;return"only"!==e&&(r.environment=n),e&&(r.background=n),()=>{"only"!==e&&(r.environment=i),e&&(r.background=o)}}),[n,e,t,a]),null}function cr({children:e,near:t=1,far:r=1e3,resolution:a=256,frames:i=1,map:s,background:c=!1,scene:l,files:u,path:d,preset:m,extensions:f}){const p=o.useThree((e=>e.gl)),h=o.useThree((e=>e.scene)),v=M.useRef(null),[g]=M.useState((()=>new n.Scene)),x=M.useMemo((()=>{const e=new n.WebGLCubeRenderTarget(a);return e.texture.type=n.HalfFloatType,e}),[a]);M.useLayoutEffect((()=>{1===i&&v.current.update(p,g);const e=or(l||h),t=e.background,r=e.environment;return"only"!==c&&(e.environment=x.texture),c&&(e.background=x.texture),()=>{"only"!==c&&(e.environment=r),c&&(e.background=t)}}),[e,g,x.texture,l,h,c,i,p]);let y=1;return o.useFrame((()=>{(i===1/0||y<i)&&(v.current.update(p,g),y++)})),M.createElement(M.Fragment,null,o.createPortal(M.createElement(M.Fragment,null,e,M.createElement("cubeCamera",{ref:v,args:[t,r,x]}),u||m?M.createElement(sr,{background:!0,files:u,preset:m,path:d,extensions:f}):s?M.createElement(ar,{background:!0,map:s,extensions:f}):null),g))}function lr(e){var t,r,o,a;const i=ir(e),s=e.map||i,c=(l=s)&&l.isCubeTexture;var l;const u=M.useMemo((()=>{var e,t;const r=(null!==(e=c?null==(t=s.image[0])?void 0:t.width:s.image.width)&&void 0!==e?e:1024)/4,n=Math.floor(Math.log2(r)),o=Math.pow(2,n),a=3*Math.max(o,112);return[c?"#define ENVMAP_TYPE_CUBE":"","#define CUBEUV_TEXEL_WIDTH "+1/a,"#define CUBEUV_TEXEL_HEIGHT "+1/(4*o),`#define CUBEUV_MAX_MIP ${n}.0`,""]}),[]),d=M.useMemo((()=>u.join("\n")+"#define GLSLIFY 1\n#define ENVMAP_TYPE_CUBE_UV\nvarying vec3 vWorldPosition;uniform float radius;uniform float height;\n#ifdef ENVMAP_TYPE_CUBE\nuniform samplerCube cubemap;\n#else\nuniform sampler2D cubemap;\n#endif\nfloat diskIntersect(in vec3 ro,in vec3 rd,vec3 c,vec3 n,float r){vec3 o=ro-c;float t=-dot(n,o)/dot(rd,n);vec3 q=o+rd*t;return(dot(q,q)<r*r)? t : 1e6;}float sphereIntersect(in vec3 ro,in vec3 rd,in vec3 ce,float ra){vec3 oc=ro-ce;float b=dot(oc,rd);float c=dot(oc,oc)-ra*ra;float h=b*b-c;if(h<0.0)-1.0;h=sqrt(h);return-b+h;}vec3 project(){vec3 p=normalize(vWorldPosition);vec3 camPos=cameraPosition;camPos.y-=height;float intersection=sphereIntersect(camPos,p,vec3(0.),radius);if(intersection>0.){vec3 h=vec3(0.0,-height,0.0);float intersection2=diskIntersect(camPos,p,h,vec3(0.0,-1.0,0.0),radius);p=(camPos+min(intersection,intersection2)*p)/radius;}else{p=vec3(0.0,1.0,0.0);}return p;}\n#include <common>\n#include <cube_uv_reflection_fragment>\nvoid main(){vec3 projectedWorldPosition=project();\n#ifdef ENVMAP_TYPE_CUBE\nvec3 outcolor=textureCube(cubemap,projectedWorldPosition).rgb;\n#else\nvec3 direction=normalize(projectedWorldPosition);vec2 uv=equirectUv(direction);vec3 outcolor=texture2D(cubemap,uv).rgb;\n#endif\ngl_FragColor=vec4(outcolor,1.0);\n#include <tonemapping_fragment>\n#include <encodings_fragment>\n}"),[u]),m=M.useMemo((()=>({cubemap:{value:null},height:{value:15},radius:{value:60}})),[]),f=M.useRef(null),p=null==(t=e.ground)?void 0:t.height,h=null==(r=e.ground)?void 0:r.radius,v=null!==(o=null==(a=e.ground)?void 0:a.scale)&&void 0!==o?o:1e3;return M.useEffect((()=>{p&&(f.current.uniforms.height.value=p)}),[p]),M.useEffect((()=>{h&&(f.current.uniforms.radius.value=h)}),[h]),M.useEffect((()=>{f.current.uniforms.cubemap.value=s}),[s]),M.createElement(M.Fragment,null,M.createElement(ar,b.default({},e,{map:s})),M.createElement(Nt,{scale:v,args:[1,16]},M.createElement("shaderMaterial",{ref:f,side:n.BackSide,vertexShader:"#define GLSLIFY 1\nvarying vec3 vWorldPosition;void main(){vec4 worldPosition=modelMatrix*vec4(position,1.0);vWorldPosition=worldPosition.xyz;gl_Position=projectionMatrix*modelViewMatrix*vec4(position,1.0);}",fragmentShader:d,uniforms:m})))}function ur(e){return e.ground?M.createElement(lr,e):e.map?M.createElement(ar,e):e.children?M.createElement(cr,e):M.createElement(sr,e)}const dr=M.forwardRef((({scale:e=10,frames:t=1/0,opacity:r=1,width:n=1,height:a=1,blur:i=1,far:s=10,resolution:c=512,smooth:u=!0,color:d="#000000",depthWrite:m=!1,renderOrder:f,...p},h)=>{const v=o.useThree((e=>e.scene)),g=o.useThree((e=>e.gl)),x=M.useRef(null);n*=Array.isArray(e)?e[0]:e||1,a*=Array.isArray(e)?e[1]:e||1;const[y,E,w,S,P,C,R]=M.useMemo((()=>{const e=new T.WebGLRenderTarget(c,c),t=new T.WebGLRenderTarget(c,c);t.texture.generateMipmaps=e.texture.generateMipmaps=!1;const r=new T.PlaneBufferGeometry(n,a).rotateX(Math.PI/2),o=new T.Mesh(r),i=new T.MeshDepthMaterial;i.depthTest=i.depthWrite=!1,i.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 s=new T.ShaderMaterial(l.HorizontalBlurShader),u=new T.ShaderMaterial(l.VerticalBlurShader);return u.depthTest=s.depthTest=!1,[e,r,i,o,s,u,t]}),[c,n,a,e,d]),_=e=>{S.visible=!0,S.material=P,P.uniforms.tDiffuse.value=y.texture,P.uniforms.h.value=1*e/256,g.setRenderTarget(R),g.render(S,x.current),S.material=C,C.uniforms.tDiffuse.value=R.texture,C.uniforms.v.value=1*e/256,g.setRenderTarget(y),g.render(S,x.current),S.visible=!1};let L=0;return o.useFrame((()=>{if(x.current&&(t===1/0||L<t)){const e=v.background;v.background=null;const t=v.overrideMaterial;v.overrideMaterial=w,g.setRenderTarget(y),g.render(v,x.current),v.overrideMaterial=t,_(i),u&&_(.4*i),g.setRenderTarget(null),v.background=e,L++}})),M.createElement("group",b.default({"rotation-x":Math.PI/2},p,{ref:h}),M.createElement("mesh",{renderOrder:f,geometry:E,scale:[1,-1,1],rotation:[-Math.PI/2,0,0]},M.createElement("meshBasicMaterial",{map:y.texture,"map-encoding":g.outputEncoding,transparent:!0,opacity:r,depthWrite:m})),M.createElement("orthographicCamera",{ref:x,args:[-n/2,n/2,a/2,-a/2,0,s]}))})),mr={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 fr=e=>0===e?0:Math.pow(2,10*e-10);const pr=M.forwardRef((({fog:e=!1,renderOrder:t,depthWrite:r=!1,colorStop:o=0,color:a="black",opacity:i=.5,...s},c)=>{const l=M.useMemo((()=>{const e=document.createElement("canvas");e.width=128,e.height=128;const t=e.getContext("2d"),r=t.createRadialGradient(e.width/2,e.height/2,0,e.width/2,e.height/2,e.width/2);return r.addColorStop(o,new n.Color(a).getStyle()),r.addColorStop(1,"rgba(0,0,0,0)"),t.fillStyle=r,t.fillRect(0,0,e.width,e.height),e}),[a,o]);return M.createElement("mesh",b.default({renderOrder:t,ref:c,"rotation-x":-Math.PI/2},s),M.createElement("planeGeometry",null),M.createElement("meshBasicMaterial",{transparent:!0,opacity:i,fog:e,depthWrite:r,side:n.DoubleSide},M.createElement("canvasTexture",{attach:"map",args:[l]})))}));o.extend({MeshReflectorMaterial:Tt});const hr=M.forwardRef((({mixBlur:e=0,mixStrength:t=.5,resolution:r=256,blur:a=[0,0],args:i=[1,1],minDepthThreshold:s=.9,maxDepthThreshold:c=1,depthScale:l=0,depthToBlurRatioBias:u=.25,mirror:d=0,children:m,debug:f=0,distortion:p=1,mixContrast:h=1,distortionMap:v,...g},x)=>{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)),E=o.useThree((({camera:e})=>e)),w=o.useThree((({scene:e})=>e)),S=(a=Array.isArray(a)?a:[a,a])[0]+a[1]>0,T=M.useRef(null),[P]=M.useState((()=>new n.Plane)),[R]=M.useState((()=>new n.Vector3)),[_]=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))),[A]=M.useState((()=>new n.Vector4)),[F]=M.useState((()=>new n.Vector3)),[B]=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(_.setFromMatrixPosition(T.current.matrixWorld),L.setFromMatrixPosition(E.matrixWorld),D.extractRotation(T.current.matrixWorld),R.set(0,0,1),R.applyMatrix4(D),F.subVectors(_,L),F.dot(R)>0)return;F.reflect(R).negate(),F.add(_),D.extractRotation(E.matrixWorld),z.set(0,0,-1),z.applyMatrix4(D),z.add(L),B.subVectors(_,z),B.reflect(R).negate(),B.add(_),j.position.copy(F),j.up.set(0,1,0),j.up.applyMatrix4(D),j.up.reflect(R),j.lookAt(B),j.far=E.far,j.updateMatrixWorld(),j.projectionMatrix.copy(E.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),P.setFromNormalAndCoplanarPoint(R,_),P.applyMatrix4(j.matrixWorldInverse),A.set(P.normal.x,P.normal.y,P.normal.z,P.constant);const e=j.projectionMatrix;k.x=(Math.sign(A.x)+e.elements[8])/e.elements[0],k.y=(Math.sign(A.y)+e.elements[9])/e.elements[5],k.z=-1,k.w=(1+e.elements[10])/e.elements[14],A.multiplyScalar(2/A.dot(k)),e.elements[2]=A.x,e.elements[6]=A.y,e.elements[10]=A.z+1,e.elements[14]=A.w}),[]),[O,I,W,N]=M.useMemo((()=>{const o={minFilter:n.LinearFilter,magFilter:n.LinearFilter,encoding:y.outputEncoding},i=new n.WebGLRenderTarget(r,r,o);i.depthBuffer=!0,i.depthTexture=new n.DepthTexture(r,r),i.depthTexture.format=n.DepthFormat,i.depthTexture.type=n.UnsignedShortType;const m=new n.WebGLRenderTarget(r,r,o);return[i,m,new St({gl:y,resolution:r,width:a[0],height:a[1],minDepthThreshold:s,maxDepthThreshold:c,depthScale:l,depthToBlurRatioBias:u}),{mirror:d,textureMatrix:U,mixBlur:e,tDiffuse:i.texture,tDepth:i.depthTexture,tDiffuseBlur:m.texture,hasBlur:S,mixStrength:t,minDepthThreshold:s,maxDepthThreshold:c,depthScale:l,depthToBlurRatioBias:u,transparent:!0,debug:f,distortion:p,distortionMap:v,mixContrast:h,"defines-USE_BLUR":S?"":void 0,"defines-USE_DEPTH":l>0?"":void 0,"defines-USE_DISTORTION":v?"":void 0}]}),[y,a,U,r,d,S,e,t,s,c,l,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(O),y.state.buffers.depth.setMask(!0),y.autoClear||y.clear(),y.render(w,j),S&&W.render(y,O,I),y.xr.enabled=e,y.shadowMap.autoUpdate=t,T.current.visible=!0,y.setRenderTarget(null)})),M.createElement("mesh",b.default({ref:C.default([T,x])},g),M.createElement("planeBufferGeometry",{args:i}),m?m("meshReflectorMaterial",N):M.createElement("meshReflectorMaterial",N))}));class vr 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 gr=new n.Vector3,xr=M.forwardRef((({opacity:e=1,radiusTop:t,radiusBottom:r,depthBuffer:a,color:i="white",distance:s=5,angle:c=.15,attenuation:l=5,anglePower:u=5,...d},m)=>{const f=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 vr));t=void 0===t?.1:t,r=void 0===r?7*c:r,o.useFrame((()=>{g.uniforms.spotPosition.value.copy(f.current.getWorldPosition(gr)),f.current.lookAt(f.current.parent.target.getWorldPosition(gr))}));const x=M.useMemo((()=>{const e=new n.CylinderGeometry(t,r,s,128,64,!0);return e.applyMatrix4((new n.Matrix4).makeTranslation(0,-s/2,0)),e.applyMatrix4((new n.Matrix4).makeRotationX(-Math.PI/2)),e}),[c,s,t,r]);return M.createElement("spotLight",b.default({ref:m,angle:c,color:i,distance:s},d),M.createElement("mesh",{ref:f,geometry:x,raycast:()=>null},M.createElement("primitive",{object:g,attach:"material","uniforms-opacity-value":e,"uniforms-lightColor-value":i,"uniforms-attenuation-value":l,"uniforms-anglePower-value":u,"uniforms-depth-value":a,"uniforms-cameraNear-value":h.near,"uniforms-cameraFar-value":h.far,"uniforms-resolution-value":a?[p.width*v,p.height*v]:[0,0]})))})),yr=M.forwardRef((({args:e,map:t,toneMapped:r=!1,color:n="white",form:a="rect",intensity:i=1,scale:s=1,target:c,children:l,...u},d)=>{const m=M.useRef(null);return M.useLayoutEffect((()=>{l||u.material||(o.applyProps(m.current.material,{color:n}),m.current.material.color.multiplyScalar(i))}),[n,i,l,u.material]),M.useLayoutEffect((()=>{c&&m.current.lookAt(Array.isArray(c)?new T.Vector3(...c):c)}),[c]),s=Array.isArray(s)&&2===s.length?[s[0],s[1],1]:s,M.createElement("mesh",b.default({ref:C.default([m,d]),scale:s},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}),l||(u.material?null:M.createElement("meshBasicMaterial",{toneMapped:r,map:t,side:T.DoubleSide})))}));function Er(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 wr=M.forwardRef((({inclination:e=.6,azimuth:t=.1,distance:r=1e3,mieCoefficient:o=.005,mieDirectionalG:a=.8,rayleigh:i=.5,turbidity:s=10,sunPosition:c=Er(e,t),...u},d)=>{const m=M.useMemo((()=>(new n.Vector3).setScalar(r)),[r]),[f]=M.useState((()=>new l.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":i,"material-uniforms-sunPosition-value":c,"material-uniforms-turbidity-value":s,scale:m},u))}));class br 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)),Sr=M.forwardRef((({radius:e=100,depth:t=50,count:r=5e3,saturation:a=0,factor:i=4,fade:s=!1,speed:c=1},l)=>{const u=M.useRef(),[d,m,f]=M.useMemo((()=>{const o=[],s=[],c=Array.from({length:r},(()=>(.5+.5*Math.random())*i)),l=new n.Color;let u=e+t;const d=t/r;for(let e=0;e<r;e++)u-=d*Math.random(),o.push(...Mr(u).toArray()),l.setHSL(e/r,a,.9),s.push(l.r,l.g,l.b);return[new Float32Array(o),new Float32Array(s),new Float32Array(c)]}),[r,t,i,e,a]);o.useFrame((e=>u.current&&(u.current.uniforms.time.value=e.clock.getElapsedTime()*c)));const[p]=M.useState((()=>new br));return M.createElement("points",{ref:l},M.createElement("bufferGeometry",null,M.createElement("bufferAttribute",{attach:"attributes-position",args:[d,3]}),M.createElement("bufferAttribute",{attach:"attributes-color",args:[m,3]}),M.createElement("bufferAttribute",{attach:"attributes-size",args:[f,1]})),M.createElement("primitive",{ref:u,object:p,attach:"material",blending:n.AdditiveBlending,"uniforms-fade-value":s,transparent:!0,vertexColors:!0}))}));const Tr=de({time:0,pixelRatio:1},"#define GLSLIFY 1\nuniform float pixelRatio;uniform float time;attribute float size;attribute float speed;attribute float opacity;attribute vec3 noise;attribute vec3 color;varying vec3 vColor;varying float vOpacity;void main(){vec4 modelPosition=modelMatrix*vec4(position,1.0);modelPosition.y+=sin(time*speed+modelPosition.x*noise.x*100.0)*0.2;modelPosition.z+=cos(time*speed+modelPosition.x*noise.y*100.0)*0.2;modelPosition.x+=cos(time*speed+modelPosition.x*noise.z*100.0)*0.2;vec4 viewPosition=viewMatrix*modelPosition;vec4 projectionPostion=projectionMatrix*viewPosition;gl_Position=projectionPostion;gl_PointSize=size*25.*pixelRatio;gl_PointSize*=(1.0/-viewPosition.z);vColor=color;vOpacity=opacity;}","#define GLSLIFY 1\nvarying vec3 vColor;varying float vOpacity;void main(){float distanceToCenter=distance(gl_PointCoord,vec2(0.5));float strength=0.05/distanceToCenter-0.1;gl_FragColor=vec4(vColor,strength*vOpacity);}"),Pr=e=>e&&e.constructor===Float32Array,Cr=e=>e instanceof T.Vector2||e instanceof T.Vector3||e instanceof T.Vector4,Rr=e=>Array.isArray(e)?e:Cr(e)?e.toArray():[e,e,e];function _r(e,t,r){return M.useMemo((()=>{if(void 0!==t){if(Pr(t))return t;if(t instanceof T.Color){const r=Array.from({length:3*e},(()=>(e=>[e.r,e.g,e.b])(t))).flat();return Float32Array.from(r)}if(Cr(t)||Array.isArray(t)){const r=Array.from({length:3*e},(()=>Rr(t))).flat();return Float32Array.from(r)}return Float32Array.from({length:e},(()=>t))}return Float32Array.from({length:e},r)}),[t])}const Lr=M.forwardRef((({noise:e=1,count:t=100,speed:r=1,opacity:n=1,scale:a=1,size:i,color:s,...c},l)=>{M.useMemo((()=>o.extend({SparklesMaterial:Tr})),[]);const u=M.useRef(),d=o.useThree((e=>e.viewport.dpr)),m=M.useMemo((()=>Float32Array.from(Array.from({length:t},(()=>Rr(a).map(T.MathUtils.randFloatSpread))).flat())),[t,a]),f=_r(t,i,Math.random),p=_r(t,n),h=_r(t,r),v=_r(3*t,e),g=_r(void 0===s?3*t:t,Pr(s)?s:new T.Color(s),(()=>1));return o.useFrame((e=>u.current.uniforms.time.value=e.clock.elapsedTime)),M.createElement("points",b.default({key:`particle-${t}-${JSON.stringify(a)}`},c,{ref:l}),M.createElement("bufferGeometry",null,M.createElement("bufferAttribute",{attach:"attributes-position",args:[m,3]}),M.createElement("bufferAttribute",{attach:"attributes-size",args:[f,1]}),M.createElement("bufferAttribute",{attach:"attributes-opacity",args:[p,1]}),M.createElement("bufferAttribute",{attach:"attributes-speed",args:[h,1]}),M.createElement("bufferAttribute",{attach:"attributes-color",args:[g,3]}),M.createElement("bufferAttribute",{attach:"attributes-noise",args:[v,3]})),M.createElement("sparklesMaterial",{ref:u,transparent:!0,pixelRatio:d,depthWrite:!1}))}));const Dr=new T.Matrix4,zr=new T.Matrix4,Ar=[],Fr=new T.Mesh;class Br 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;Fr.geometry=r.geometry;const n=r.matrixWorld;let o=r.userData.instances.indexOf(this.instanceKey);if(!(-1===o||o>r.count)){r.getMatrixAt(o,Dr),zr.multiplyMatrices(n,Dr),Fr.matrixWorld=zr,Fr.raycast(e,Ar);for(let e=0,r=Ar.length;e<r;e++){const r=Ar[e];r.instanceId=o,r.object=this,t.push(r)}Ar.length=0}}}let kr,Ur;const jr=M.createContext(null),Vr=new T.Matrix4,Or=new T.Vector3;new T.Color;const Ir=M.forwardRef((({children:e,range:t,limit:r=1e3,...n},a)=>{const i=M.useRef(null),[s,c]=M.useState([]),[[l,u,d]]=M.useState((()=>[new Float32Array(3*r),Float32Array.from({length:3*r},(()=>1)),Float32Array.from({length:r},(()=>1))]));M.useEffect((()=>{i.current.geometry.attributes.position.needsUpdate=!0})),o.useFrame((()=>{for(i.current.updateMatrix(),i.current.updateMatrixWorld(),Vr.copy(i.current.matrixWorld).invert(),i.current.geometry.drawRange.count=Math.min(r,void 0!==t?t:r,s.length),kr=0;kr<s.length;kr++)Ur=s[kr].current,Ur.getWorldPosition(Or).applyMatrix4(Vr),Or.toArray(l,3*kr),i.current.geometry.attributes.position.needsUpdate=!0,Ur.matrixWorldNeedsUpdate=!0,Ur.color.toArray(u,3*kr),i.current.geometry.attributes.color.needsUpdate=!0,d.set([Ur.size],kr),i.current.geometry.attributes.size.needsUpdate=!0}));const m=M.useMemo((()=>{const e={};for(kr=0;kr<s.length;kr++){var t;Object.assign(e,null==(t=s[kr].current)?void 0:t.__r3f.handlers)}return Object.keys(e).reduce(((e,t)=>({...e,[t]:e=>{var r,n,o;const a=null==(r=s[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,s]),f=M.useMemo((()=>({subscribe:e=>(c((t=>[...t,e])),()=>c((t=>t.filter((t=>t.current!==e.current)))))})),[]);return M.createElement("points",b.default({matrixAutoUpdate:!1,ref:C.default([a,i])},m,n),M.createElement("bufferGeometry",null,M.createElement("bufferAttribute",{attach:"attributes-position",count:l.length/3,array:l,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(jr.Provider,{value:f},e))})),Wr=M.forwardRef((({children:e,...t},r)=>{M.useMemo((()=>o.extend({Position:Br})),[]);const n=M.useRef(),{subscribe:a}=M.useContext(jr);return M.useLayoutEffect((()=>a(n)),[]),M.createElement("position",b.default({ref:C.default([r,n])},t),e)})),Nr=M.forwardRef((({children:e,positions:t,colors:r,sizes:n,stride:a=3,...i},s)=>{const c=M.useRef(null);return o.useFrame((()=>{const e=c.current.geometry.attributes;e.position.needsUpdate=!0,r&&(e.color.needsUpdate=!0),n&&(e.size.needsUpdate=!0)})),M.createElement("points",b.default({ref:C.default([s,c])},i),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)})),Gr=M.forwardRef(((e,t)=>e.positions instanceof Float32Array?M.createElement(Nr,b.default({},e,{ref:t})):M.createElement(Ir,b.default({},e,{ref:t}))));let Hr,$r;const qr=M.createContext(null),Xr=new T.Matrix4,Yr=new T.Matrix4,Zr=new T.Matrix4;new T.Color;const Kr=new T.Vector3,Jr=new T.Quaternion,Qr=new T.Vector3,en=M.forwardRef((({context:e,children:t,...r},n)=>{M.useMemo((()=>o.extend({Position:Br})),[]);const a=M.useRef(),{subscribe:i,getParent:s}=M.useContext(e||qr);return M.useLayoutEffect((()=>i(a)),[]),M.createElement("position",b.default({instance:s(),instanceKey:a,ref:C.default([n,a])},r),t)})),tn=M.forwardRef((({children:e,range:t,limit:r=1e3,frames:n=1/0,...a},i)=>{const[{context:s,instance:c}]=M.useState((()=>{const e=M.createContext(null);return{context:e,instance:M.forwardRef(((t,r)=>M.createElement(en,b.default({context:e},t,{ref:r}))))}})),l=M.useRef(null),[u,d]=M.useState([]),[[m,f]]=M.useState((()=>{const e=new Float32Array(16*r);for(Hr=0;Hr<r;Hr++)Zr.identity().toArray(e,16*Hr);return[e,new Float32Array([...new Array(3*r)].map((()=>1)))]}));M.useEffect((()=>{l.current.instanceMatrix.needsUpdate=!0}));let p=0,h=0;o.useFrame((()=>{if(n===1/0||p<n){for(l.current.updateMatrix(),l.current.updateMatrixWorld(),Xr.copy(l.current.matrixWorld).invert(),h=Math.min(r,void 0!==t?t:r,u.length),l.current.count=h,l.current.instanceMatrix.updateRange.count=16*h,l.current.instanceColor.updateRange.count=3*h,Hr=0;Hr<u.length;Hr++)$r=u[Hr].current,$r.matrixWorld.decompose(Kr,Jr,Qr),Yr.compose(Kr,Jr,Qr).premultiply(Xr),Yr.toArray(m,16*Hr),l.current.instanceMatrix.needsUpdate=!0,$r.color.toArray(f,3*Hr),l.current.instanceColor.needsUpdate=!0;p++}}));const v=M.useMemo((()=>({getParent:()=>l,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:C.default([i,l]),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(s.Provider,{value:v},e(c)):M.createElement(qr.Provider,{value:v},e))}));const rn=M.createContext(null),nn=M.forwardRef(((e,t)=>{M.useMemo((()=>o.extend({SegmentObject:on})),[]);const{limit:r=1e3,lineWidth:n=1,children:a,...i}=e,[s,c]=M.useState([]),[u]=M.useState((()=>new l.Line2)),[d]=M.useState((()=>new l.LineMaterial)),[m]=M.useState((()=>new l.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=>(c((t=>[...t,e])),()=>c((t=>t.filter((t=>t.current!==e.current)))))})),[]);return o.useFrame((()=>{for(let t=0;t<r;t++){var e;const r=null==(e=s[t])?void 0:e.current;r&&(p[6*t+0]=r.start.x,p[6*t+1]=r.start.y,p[6*t+2]=r.start.z,p[6*t+3]=r.end.x,p[6*t+4]=r.end.y,p[6*t+5]=r.end.z,h[6*t+0]=r.color.r,h[6*t+1]=r.color.g,h[6*t+2]=r.color.b,h[6*t+3]=r.color.r,h[6*t+4]=r.color.g,h[6*t+5]=r.color.b)}m.setColors(h),m.setPositions(p),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},i)),M.createElement(rn.Provider,{value:v},a))}));class on{constructor(){this.color=new T.Color("white"),this.start=new T.Vector3(0,0,0),this.end=new T.Vector3(0,0,0)}}const an=e=>e instanceof T.Vector3?e:new T.Vector3(..."number"==typeof e?[e,e,e]:e),sn=M.forwardRef((({color:e,start:t,end:r},n)=>{const o=M.useContext(rn);if(!o)throw"Segment must used inside Segments component.";const a=M.useRef(null);return M.useLayoutEffect((()=>o.subscribe(a)),[]),M.createElement("segmentObject",{ref:C.default([a,n]),color:e,start:an(t),end:an(r)})})),cn=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:C.default([a,n])},r),e)}));const ln=new n.Matrix4,un=new n.Ray,dn=new n.Sphere,mn=new n.Vector3;const fn=M.forwardRef((({children:e,width:t,height:r,renderPriority:n=0,eventPriority:a=0,frames:i=1/0,...s},c)=>{const{size:l,viewport:u}=o.useThree(),d=ht((t||l.width)*u.dpr,(r||l.height)*u.dpr,{samples:8}),[m]=M.useState((()=>new T.Scene)),f=M.useCallback(((e,t,r)=>{var n,o;let a=null==(n=d.texture)?void 0:n.__r3f.parent;for(;a&&!(a instanceof T.Object3D);)a=a.__r3f.parent;if(!a)return!1;r.raycaster.camera||r.events.compute(e,r,null==(o=r.previousRoot)?void 0:o.getState());const[i]=r.raycaster.intersectObject(a);if(!i)return!1;const s=i.uv;t.raycaster.setFromCamera(t.pointer.set(2*s.x-1,2*s.y-1),t.camera)}),[]);return M.useImperativeHandle(c,(()=>d.texture),[d]),M.createElement(M.Fragment,null,o.createPortal(M.createElement(pn,{renderPriority:n,frames:i,fbo:d},e),m,{events:{compute:f,priority:a}}),M.createElement("primitive",b.default({object:d.texture},s)))}));function pn({frames:e,renderPriority:t,children:r,fbo:n}){let a=0;return o.useFrame((t=>{(e===1/0||a<e)&&(t.gl.setRenderTarget(n),t.gl.render(t.scene,t.camera),t.gl.setRenderTarget(null),a++)}),t),M.createElement(M.Fragment,null,r)}const hn=new T.Color;function vn({canvasSize:e,scene:t,index:r,children:n,frames:a,rect:i,track:s}){const c=o.useThree((e=>e.get)),l=o.useThree((e=>e.camera)),u=o.useThree((e=>e.scene)),d=o.useThree((e=>e.setEvents));let m=0;return o.useFrame((r=>{var o,c;(a===1/0||m<=a)&&(i.current=null==(o=s.current)?void 0:o.getBoundingClientRect(),m++);if(i.current){const{left:o,right:a,top:s,bottom:d,width:m,height:f}=i.current,p=d<0||s>e.height||a<0||o>e.width,h=e.height-d,v=m/f;if((c=l)&&c.isOrthographicCamera?l.left===m/-2&&l.right===m/2&&l.top===f/2&&l.bottom===f/-2||(Object.assign(l,{left:m/-2,right:m/2,top:f/2,bottom:f/-2}),l.updateProjectionMatrix()):l.aspect!==v&&(l.aspect=v,l.updateProjectionMatrix()),r.gl.setViewport(o,h,m,f),r.gl.setScissor(o,h,m,f),r.gl.setScissorTest(!0),p)return r.gl.getClearColor(hn),r.gl.setClearColor(hn,r.gl.getClearAlpha()),void r.gl.clear(!0,!0);r.gl.render(n?u:t,l)}}),r),M.useEffect((()=>{const e=c().events.connected;return d({connected:s.current}),()=>d({connected:e})}),[]),M.createElement(M.Fragment,null,n)}exports.AdaptiveDpr=function({pixelated:e}){const t=o.useThree((e=>e.gl)),r=o.useThree((e=>e.internal.active)),n=o.useThree((e=>e.performance.current)),a=o.useThree((e=>e.viewport.initialDpr)),i=o.useThree((e=>e.setDpr));return M.useEffect((()=>{const n=t.domElement;return()=>{r&&i(a),e&&n&&(n.style.imageRendering="auto")}}),[]),M.useEffect((()=>{i(n*a),e&&t.domElement&&(t.domElement.style.imageRendering=1===n?"auto":"pixelated")}),[n]),null},exports.AdaptiveEvents=function(){const e=o.useThree((e=>e.get)),t=o.useThree((e=>e.setEvents)),r=o.useThree((e=>e.performance.current));return M.useEffect((()=>{const r=e().events.enabled;return()=>t({enabled:r})}),[]),M.useEffect((()=>t({enabled:1===r})),[r]),null},exports.ArcballControls=ze,exports.BBAnchor=({anchor:e,...t})=>{const r=M.useRef(null),n=M.useRef(null);return M.useEffect((()=>{var e,t;null!=(e=r.current)&&null!=(t=e.parent)&&t.parent&&(n.current=r.current.parent,r.current.parent.parent.add(r.current))}),[]),o.useFrame((()=>{n.current&&(vt.setFromObject(n.current),vt.getSize(gt),r.current.position.set(n.current.position.x+gt.x*e[0]/2,n.current.position.y+gt.y*e[1]/2,n.current.position.z+gt.z*e[2]/2))})),M.createElement("group",b.default({ref:r},t))},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 i=0;i<r+1;i++)o.setXYZ(e++,a/r-n+(0===a?-t:0),i/r-n,fr(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=Q,exports.Bounds=function({children:e,damping:t=6,fit:r,clip:n,observe:a,margin:i=1.2,eps:s=.01,onFit:c}){const l=M.useRef(null),{camera:u,invalidate:d,size:m,controls:f}=o.useThree(),p=f,h=M.useRef(c);function v(e,t){return Math.abs(e.x-t.x)<s&&Math.abs(e.y-t.y)<s&&Math.abs(e.z-t.z)<s}function g(e,t,r,n){e.x=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=c;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}))),[E]=M.useState((()=>new T.Box3)),w=M.useMemo((()=>{function e(){const e=E.getSize(new T.Vector3),t=E.getCenter(new T.Vector3),r=Math.max(e.x,e.y,e.z),n=Qt(u)?4*r:r/(2*Math.atan(Math.PI*u.fov/360)),o=Qt(u)?4*r:n/u.aspect,a=i*Math.max(n,o);return{box:E,size:e,center:t,distance:a}}return{getSize:e,refresh(t){if((r=t)&&r.isBox3)E.copy(t);else{const e=t||l.current;e.updateWorldMatrix(!0,!0),E.setFromObject(e)}var r;if(E.isEmpty()){const e=u.position.length()||10;E.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),Qt(u)){x.zoom=u.zoom;let e=0,n=0;const o=[new T.Vector3(E.min.x,E.min.y,E.min.z),new T.Vector3(E.min.x,E.max.y,E.min.z),new T.Vector3(E.min.x,E.min.y,E.max.z),new T.Vector3(E.min.x,E.max.y,E.max.z),new T.Vector3(E.max.x,E.max.y,E.max.z),new T.Vector3(E.max.x,E.max.y,E.min.z),new T.Vector3(E.max.x,E.min.y,E.max.z),new T.Vector3(E.max.x,E.min.y,E.min.z)];r.applyMatrix4(u.matrixWorldInverse);for(const t of o)t.applyMatrix4(u.matrixWorldInverse),e=Math.max(e,Math.abs(t.y-r.y)),n=Math.max(n,Math.abs(t.x-r.x));e*=2,n*=2;const a=(u.top-u.bottom)/e,s=(u.right-u.left)/n;y.zoom=Math.min(a,s)/i,t||(u.zoom=y.zoom,u.updateProjectionMatrix())}return t?x.animating=!0:(u.position.copy(y.camera),u.lookAt(y.focus),p&&(p.target.copy(y.focus),p.update())),h.current&&h.current(this.getSize()),d(),this}}}),[E,u,p,i,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++)&&(w.refresh(),r&&w.fit(),n&&w.clip())}),[m,n,r,a,u,p]),o.useFrame(((e,r)=>{if(x.animating){if(g(x.focus,y.focus,t,r),g(x.camera,y.camera,t,r),x.zoom=T.MathUtils.damp(x.zoom,y.zoom,t,r),u.position.copy(x.camera),Qt(u)&&(u.zoom=x.zoom,u.updateProjectionMatrix()),p?(p.target.copy(x.focus),p.update()):u.lookAt(x.focus),d(),Qt(u)&&!(Math.abs(x.zoom-y.zoom)<s))return;if(!Qt(u)&&!v(x.camera,y.camera))return;if(p&&!v(x.focus,y.focus))return;x.animating=!1}})),M.createElement("group",{ref:l},M.createElement(er.Provider,{value:w},e))},exports.Box=Dt,exports.CameraShake=tr,exports.Center=Jt,exports.Circle=zt,exports.Clone=Se,exports.Cloud=function({opacity:e=.5,speed:t=.4,width:r=10,depth:n=1.5,segments:a=20,texture:i="https://rawcdn.githack.com/pmndrs/drei-assets/9225a9f1fbd449d9411125c2f419b843d0308c9f/cloud.png",color:s="#ffffff",depthTest:c=!0,...l}){const u=o.useThree((e=>e.gl)),d=M.useRef(),m=fe(i),f=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=d.current)?void 0:t.children.forEach(((t,r)=>{t.children[0].rotation.z+=f[r].rotation,t.children[0].scale.setScalar(f[r].scale+(1+Math.sin(e.clock.getElapsedTime()/10))/2*r/10)}))})),M.createElement("group",l,M.createElement("group",{position:[0,0,a/2*n],ref:d},f.map((({x:t,y:r,scale:o,density:a},i)=>M.createElement(Q,{key:i,position:[t,r,-i*n]},M.createElement(kt,{scale:o,rotation:[0,0,0]},M.createElement("meshStandardMaterial",{map:m,"map-encoding":u.outputEncoding,transparent:!0,opacity:o/6*a*e,depthTest:c,color:s})))))))},exports.ComputedAttribute=({compute:e,name:t,...r})=>{const[o]=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=At,exports.ContactShadows=dr,exports.CubeCamera=function({children:e,fog:t,frames:r=1/0,resolution:a=256,near:i=.1,far:s=1e3,...c}){const l=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.encoding=f.outputEncoding,e.texture.type=n.HalfFloatType,e}),[a]);let h=0;return o.useFrame((()=>{if(u&&l.current&&(r===1/0||h<r)){l.current.traverse((e=>e.visible=!1));const e=m.fog;m.fog=t||e,u.update(f,m),m.fog=e,l.current.traverse((e=>e.visible=!0)),h++}})),M.createElement("group",c,M.createElement("cubeCamera",{ref:d,args:[i,s,p]}),M.createElement("group",{ref:l},e(p.texture)))},exports.CubicBezierLine=ne,exports.CurveModifier=xt,exports.CycleRaycast=function({onChanged:e,portal:t,preventDefault:r=!0,scroll:n=!0,keyCode:a=9}){const i=M.useRef(0),s=o.useThree((e=>e.setEvents)),c=o.useThree((e=>e.get)),l=o.useThree((e=>e.gl));return M.useEffect((()=>{var o;let u,d=[];const m=c().events.filter,f=null!==(o=null==t?void 0:t.current)&&void 0!==o?o:l.domElement.parentNode,p=()=>f&&e&&e(d,Math.round(i.current)%d.length);s({filter:(e,t)=>{let r=[...e];r.length===d.length&&d.every((e=>r.map((e=>e.object.uuid)).includes(e.object.uuid)))||(i.current=0,d=r,p()),m&&(r=m(r,t));for(let e=0;e<Math.round(i.current)%r.length;e++){const e=r.shift();r=[...r,e]}return r}});const h=e=>{var t,r;i.current=e(i.current),null==(t=c().events.handlers)||t.onPointerCancel(void 0),null==(r=c().events.handlers)||r.onPointerMove(u),p()},v=e=>{(e.keyCode||e.which===a)&&(r&&e.preventDefault(),d.length>1&&h((e=>e+1)))},g=e=>{r&&e.preventDefault();let t=0;e||(e=window.event),e.wheelDelta?t=e.wheelDelta/120:e.detail&&(t=-e.detail/3),d.length>1&&h((e=>Math.abs(e-t)))},x=e=>u=e;return document.addEventListener("pointermove",x,{passive:!0}),n&&document.addEventListener("wheel",g),void 0!==a&&document.addEventListener("keydown",v),()=>{s({filter:m}),void 0!==a&&document.removeEventListener("keydown",v),n&&document.removeEventListener("wheel",g),document.removeEventListener("pointermove",x)}}),[l,c,s,r,n,a]),null},exports.Cylinder=Ft,exports.Detailed=cn,exports.DeviceOrientationControls=Ce,exports.Dodecahedron=Ht,exports.Edges=function({userData:e,children:t,geometry:r,threshold:n=15,color:o="black",...a}){const i=M.useRef(null);return M.useLayoutEffect((()=>{const e=i.current.parent;if(e){const t=r||e.geometry;t===i.current.userData.currentGeom&&n===i.current.userData.currentThreshold||(i.current.userData.currentGeom=t,i.current.userData.currentThreshold=n,i.current.geometry=new T.EdgesGeometry(t,n))}})),M.createElement("lineSegments",b.default({ref:i,raycast:()=>null},a),t||M.createElement("lineBasicMaterial",{color:o}))},exports.Effects=ue,exports.Environment=ur,exports.EnvironmentCube=sr,exports.EnvironmentMap=ar,exports.EnvironmentPortal=cr,exports.Extrude=$t,exports.FirstPersonControls=Be,exports.Float=rr,exports.FlyControls=Re,exports.GizmoHelper=({alignment:e="bottom-right",margin:t=[80,80],renderPriority:r=0,autoClear:a=!0,onUpdate:i,onTarget:s,children:c})=>{const l=o.useThree((({size:e})=>e)),u=o.useThree((({camera:e})=>e)),d=o.useThree((({controls:e})=>e)),m=o.useThree((({gl:e})=>e)),f=o.useThree((({scene:e})=>e)),p=o.useThree((({invalidate:e})=>e)),h=M.useRef(),v=M.useRef(),g=M.useRef(null),[x]=M.useState((()=>new n.Scene)),y=M.useRef(!1),E=M.useRef(0),w=M.useRef(new n.Vector3(0,0,0)),b=M.useCallback((e=>{y.current=!0,(d||s)&&(w.current=(null==d?void 0:d.target)||(null==s?void 0:s())),E.current=u.position.distanceTo(Ge),We.copy(u.quaternion),He.copy(e).multiplyScalar(E.current).add(Ge),Oe.lookAt(He),Ne.copy(Oe.quaternion),p()}),[d,u,s,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(We.angleTo(Ne)<.01)y.current=!1;else{const e=t*Ve;We.rotateTowards(Ne,e),u.position.set(0,0,1).applyQuaternion(We).multiplyScalar(E.current).add(w.current),u.up.set(0,1,0).applyQuaternion(We).normalize(),u.quaternion.copy(We),i?i():d&&d.update(),p()}Ie.copy(u.matrix).invert(),null==(r=v.current)||r.quaternion.setFromRotationMatrix(Ie),a&&(m.autoClear=!1),m.clearDepth(),m.render(x,g.current)}}),r);const S=ke(g),T=M.useMemo((()=>({tweenCamera:b,raycast:S})),[b]),[P,C]=t,R=e.endsWith("-left")?-l.width/2+P:l.width/2-P,_=e.startsWith("top-")?l.height/2-C:-l.height/2+C;return o.createPortal(M.createElement(Ue.Provider,{value:T},M.createElement(Te,{ref:g,position:[0,0,200]}),M.createElement("group",{ref:v,position:[R,_,0]},c)),x)},exports.GizmoViewcube=e=>M.createElement("group",{scale:[60,60,60]},M.createElement(nt,e),et.map(((t,r)=>M.createElement(ot,b.default({key:r,position:t,dimensions:tt[r]},e)))),Je.map(((t,r)=>M.createElement(ot,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:i,labels:s=["X","Y","Z"],labelColor:c="#000",onClick:l,...u})=>{const[d,m,f]=o,{tweenCamera:p,raycast:h}=je(),v={font:n,disabled:r,labelColor:c,raycast:h,onClick:l,axisHeadScale:a,onPointerDown:r?void 0:e=>{p(e.object.position),e.stopPropagation()}};return M.createElement("group",b.default({scale:40},u),M.createElement(at,{color:d,rotation:[0,0,0],scale:i}),M.createElement(at,{color:m,rotation:[0,0,Math.PI/2],scale:i}),M.createElement(at,{color:f,rotation:[0,-Math.PI/2,0],scale:i}),!t&&M.createElement(M.Fragment,null,M.createElement(it,b.default({arcStyle:d,position:[1,0,0],label:s[0]},v)),M.createElement(it,b.default({arcStyle:m,position:[0,1,0],label:s[1]},v)),M.createElement(it,b.default({arcStyle:f,position:[0,0,1],label:s[2]},v)),!e&&M.createElement(M.Fragment,null,M.createElement(it,b.default({arcStyle:d,position:[-1,0,0]},v)),M.createElement(it,b.default({arcStyle:m,position:[0,-1,0]},v)),M.createElement(it,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)),i=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 i=e.length;for(;i--;)a.addColorStop(e[i],t[i]);o.fillStyle=a,o.fillRect(0,0,16,r);const s=new T.Texture(n);return s.needsUpdate=!0,s}),[e]);return M.useEffect((()=>()=>{i.dispose()}),[i]),M.createElement("primitive",b.default({object:i,attach:"map",encoding:a.outputEncoding},n))},exports.Html=W,exports.Icosahedron=Nt,exports.Image=xe,exports.Instance=en,exports.Instances=tn,exports.IsObject=me,exports.Lathe=qt,exports.Lightformer=yr,exports.Line=ee,exports.Loader=function({containerStyles:e,innerStyles:t,barStyles:r,dataStyles:n,dataInterpolation:o=H,initialState:a=(e=>e)}){const{active:i,progress:s}=G(),c=M.useRef(0),l=M.useRef(0),u=M.useRef(null),[d,m]=M.useState(a(i));M.useEffect((()=>{let e;return i!==d&&(e=setTimeout((()=>m(i)),300)),()=>clearTimeout(e)}),[d,i]);const f=M.useCallback((()=>{u.current&&(c.current+=(s-c.current)/2,(c.current>.95*s||100===s)&&(c.current=s),u.current.innerText=o(c.current),c.current<s&&(l.current=requestAnimationFrame(f)))}),[o,s]);return M.useEffect((()=>(f(),()=>cancelAnimationFrame(l.current))),[f]),d?M.createElement("div",{style:{...$.container,opacity:i?1:0,...e}},M.createElement("div",null,M.createElement("div",{style:{...$.inner,...t}},M.createElement("div",{style:{...$.bar,transform:`scaleX(${s/100})`,...r}}),M.createElement("span",{ref:u,style:{...$.data,...n}})))):null},exports.MapControls=_e,exports.Mask=function({id:e=1,children:t,colorWrite:r=!1,depthWrite:n=!1,...o}){const a=M.useMemo((()=>({colorWrite:r,depthWrite:n,stencilWrite:!0,stencilRef:e,stencilFunc:T.AlwaysStencilFunc,stencilFail:T.ReplaceStencilOp,stencilZFail:T.ReplaceStencilOp,stencilZPass:T.ReplaceStencilOp})),[r,n]);return M.createElement("mesh",b.default({renderOrder:-e},o),M.createElement("meshBasicMaterial",a),"function"==typeof t?t(a):t)},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(tn,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=Et,exports.MeshReflectorMaterial=Pt,exports.MeshWobbleMaterial=bt,exports.Octahedron=Gt,exports.OrbitControls=Le,exports.OrthographicCamera=Te,exports.PerspectiveCamera=Pe,exports.Plane=kt,exports.Point=Wr,exports.PointMaterial=Rt,exports.PointMaterialImpl=Ct,exports.PointerLockControls=Fe,exports.Points=Gr,exports.PointsBuffer=Nr,exports.Polyhedron=Wt,exports.PositionalAudio=oe,exports.Preload=function({all:e,scene:t,camera:r}){const a=o.useThree((({gl:e})=>e)),i=o.useThree((({camera:e})=>e)),s=o.useThree((({scene:e})=>e));return M.useLayoutEffect((()=>{const o=[];e&&(t||s).traverse((e=>{!1===e.visible&&(o.push(e),e.visible=!0)})),a.compile(t||s,r||i);const c=new n.WebGLCubeRenderTarget(128);new n.CubeCamera(.01,1e5,c).update(a,t||s),c.dispose(),o.forEach((e=>e.visible=!1))}),[]),null},exports.PresentationControls=function({snap:e,global:t,cursor:r=!0,children:a,speed:i=1,rotation:l=[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((()=>[l[0]+d[0],l[0]+d[1]]),[l[0],d[0],d[1]]),g=M.useMemo((()=>[l[1]+m[0],l[1]+m[1]]),[l[1],m[0],m[1]]),x=M.useMemo((()=>[n.MathUtils.clamp(l[0],...v),n.MathUtils.clamp(l[1],...g),l[2]]),[l[0],l[1],l[2],v,g]),[y,E]=s.useSpring((()=>({scale:1,rotation:x,config:f})));M.useEffect((()=>{E.start({scale:1,rotation:x,config:f})}),[x]),M.useEffect((()=>{t&&r&&(h.domElement.style.cursor="grab")}),[t,r,h.domElement]);const w=c.useGesture({onHover:({last:e})=>{r&&!t&&(h.domElement.style.cursor=e?"auto":"grab")},onDrag:({down:t,delta:[o,a],memo:[s,c]=y.rotation.animation.to||x})=>{r&&(h.domElement.style.cursor=t?"grabbing":"grab"),o=n.MathUtils.clamp(c+o/p.width*Math.PI*i,...g),a=n.MathUtils.clamp(s+a/p.height*Math.PI*i,...v);const l=e&&!t&&"boolean"!=typeof e?e:f;return E.start({scale:t&&a>v[1]/2?u:1,rotation:e&&!t?x:[a,o,0],config:e=>"scale"===e?{...l,friction:3*l.friction}:l}),[a,o]}},{target:t?h.domElement:void 0});return M.createElement(s.a.group,b.default({},null==w?void 0:w(),y),a)},exports.QuadraticBezierLine=re,exports.Reflector=hr,exports.RenderTexture=fn,exports.Ring=It,exports.RoundedBox=Yt,exports.Sampler=({children:e,weight:t,transform:r,instances:o,mesh:a,...i})=>{const s=M.useRef(null),c=M.useRef(null),u=M.useRef(null);return M.useEffect((()=>{var e,t;c.current=null!==(e=null==o?void 0:o.current)&&void 0!==e?e:s.current.children.find((e=>e.hasOwnProperty("instanceMatrix"))),u.current=null!==(t=null==a?void 0:a.current)&&void 0!==t?t:s.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===c.current)return;const e=new l.MeshSurfaceSampler(u.current);t&&e.setWeightAttribute(t),e.build();const o=new n.Vector3,a=new n.Vector3,i=new n.Color,s=new n.Object3D;u.current.updateMatrixWorld(!0);for(let t=0;t<c.current.count;t++)e.sample(o,a,i),"function"==typeof r?r({dummy:s,sampledMesh:u.current,position:o,normal:a,color:i},t):s.position.copy(o),s.updateMatrix(),c.current.setMatrixAt(t,s.matrix);c.current.instanceMatrix.needsUpdate=!0}),[e,null==a?void 0:a.current,null==o?void 0:o.current]),M.createElement("group",b.default({ref:s},i),e)},exports.ScreenQuad=Kt,exports.Scroll=K,exports.ScrollControls=function({eps:e=1e-5,enabled:t=!0,infinite:r,horizontal:n,pages:a=1,distance:i=1,damping:s=4,style:c={},children:l}){const{get:u,setEvents:d,gl:m,size:f,invalidate:p,events:h}=o.useThree(),[v]=M.useState((()=>document.createElement("div"))),[g]=M.useState((()=>document.createElement("div"))),[x]=M.useState((()=>document.createElement("div"))),y=m.domElement.parentNode,E=M.useRef(0),w=M.useMemo((()=>{const t={el:v,eps:e,fill:g,fixed:x,horizontal:n,damping:s,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,s,n,a]);M.useEffect((()=>{v.style.position="absolute",v.style.width="100%",v.style.height="100%",v.style[n?"overflowX":"overflowY"]="auto",v.style[n?"overflowY":"overflowX"]="hidden",v.style.top="0px",v.style.left="0px";for(const e in c)v.style[e]=c[e];x.style.position="sticky",x.style.top="0px",x.style.left="0px",x.style.width="100%",x.style.height="100%",x.style.overflow="hidden",v.appendChild(x),g.style.height=n?"100%":a*i*100+"%",g.style.width=n?a*i*100+"%":"100%",g.style.pointerEvents="none",v.appendChild(g),y.appendChild(v),v[n?"scrollLeft":"scrollTop"]=1;const e=h.connected||m.domElement;requestAnimationFrame((()=>null==h.connect?void 0:h.connect(v)));const t=u().events.compute;return d({compute(e,t){const r=e.clientX-y.offsetLeft,n=e.clientY-y.offsetTop;t.pointer.set(r/t.size.width*2-1,-n/t.size.height*2+1),t.raycaster.setFromCamera(t.pointer,t.camera)}}),()=>{y.removeChild(v),d({compute:t}),null==h.connect||h.connect(e)}}),[a,i,n,v,g,x,y]),M.useEffect((()=>{if(h.connected===v){const e=f[n?"width":"height"],o=v[n?"scrollWidth":"scrollHeight"],a=o-e;let i=0,s=!0,c=!0;const l=()=>{if(t&&!c&&(p(),i=v[n?"scrollLeft":"scrollTop"],E.current=i/a,r)){if(!s)if(i>=a){const e=1-w.offset;v[n?"scrollLeft":"scrollTop"]=1,E.current=w.offset=-e,s=!0}else if(i<=0){const e=1+w.offset;v[n?"scrollLeft":"scrollTop"]=o,E.current=w.offset=e,s=!0}s&&setTimeout((()=>s=!1),40)}};v.addEventListener("scroll",l,{passive:!0}),requestAnimationFrame((()=>c=!1));const u=e=>v.scrollLeft+=e.deltaY/2;return n&&v.addEventListener("wheel",u,{passive:!0}),()=>{v.removeEventListener("scroll",l),n&&v.removeEventListener("wheel",u)}}}),[v,h,f,r,w,p,n,t]);let b=0;return o.useFrame(((t,r)=>{w.offset=T.MathUtils.damp(b=w.offset,E.current,s,r),w.delta=T.MathUtils.damp(w.delta,Math.abs(b-w.offset),s,r),w.delta>e&&p()})),M.createElement(q.Provider,{value:w},l)},exports.Segment=sn,exports.SegmentObject=on,exports.Segments=nn,exports.Select=function({box:e,multiple:t,children:r,onChange:n,border:a="1px solid #55aaff",backgroundColor:i="rgba(75, 160, 255, 0.1)",filter:s=(e=>e),...c}){const{setEvents:u,camera:d,raycaster:m,gl:f,controls:p,size:h,get:v}=o.useThree(),[g,x]=M.useState(!1),[y,E]=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 w=M.useCallback((e=>{e.stopPropagation(),E({object:s([e.object])[0],shift:t&&e.shiftKey})}),[]),S=M.useCallback((e=>!g&&E({})),[g]),P=M.useRef(null);return M.useEffect((()=>{if(!e||!t)return;const r=new l.SelectionBox(d,P.current),n=document.createElement("div");n.style.pointerEvents="none",n.style.border=a,n.style.backgroundColor=i,n.style.position="fixed";const o=new T.Vector2,c=new T.Vector2,m=new T.Vector2,g=v().events.enabled,x=null==p?void 0:p.enabled;let y=!1;function w(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),w(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),c.x=Math.min(o.x,e.clientX),c.y=Math.min(o.y,e.clientY),n.style.left=`${c.x}px`,n.style.top=`${c.y}px`,n.style.width=m.x-c.x+"px",n.style.height=m.y-c.y+"px"}(e),w(e,r.endPoint);const t=r.select().sort((e=>e.uuid)).filter((e=>e.isMesh));R.default(t,M)||(M=t,E({object:s(t)}))}}function C(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",C,{passive:!0}),()=>{document.removeEventListener("pointerdown",b),document.removeEventListener("pointermove",S),document.removeEventListener("pointerup",C)}}),[h,m,d,p,f]),M.createElement("group",b.default({ref:P,onClick:w,onPointerOver:()=>x(!0),onPointerOut:()=>x(!1),onPointerMissed:S},c),M.createElement(J.Provider,{value:y},r))},exports.Shadow=pr,exports.Sky=wr,exports.Sparkles=Lr,exports.Sphere=Bt,exports.SpotLight=xr,exports.Stage=function({children:e,controls:t,shadows:r=!0,adjustCamera:n=!0,environment:a="city",intensity:i=1,preset:s="rembrandt",shadowBias:c=0,contactShadow:l={blur:2,opacity:.5,position:[0,0,0]},...u}){const d=mr[s],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)),l&&M.createElement(dr,b.default({scale:2*v,far:v/2},l)),a&&M.createElement(ur,{preset:a}),M.createElement("ambientLight",{intensity:i/3}),M.createElement("spotLight",{penumbra:1,position:[d.main[0]*v,d.main[1]*v,d.main[2]*v],intensity:2*i,castShadow:r,"shadow-bias":c}),M.createElement("pointLight",{position:[d.fill[0]*v,d.fill[1]*v,d.fill[2]*v],intensity:i}))},exports.Stars=Sr,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),pt(r,t),()=>pt(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 i=o.addEffect((()=>n.begin())),s=o.addAfterEffect((()=>n.end()));return()=>{null==a||a.removeChild(n.dom),i(),s()}}}),[r,n,t,e]),null},exports.Tetrahedron=Ot,exports.Text=ae,exports.Text3D=le,exports.Torus=jt,exports.TorusKnot=Vt,exports.TrackballControls=De,exports.Trail=be,exports.TransformControls=Ae,exports.Tube=Ut,exports.View=({track:e,index:t=1,frames:r=1/0,children:n})=>{const a=M.useRef(null),{size:i,scene:s}=o.useThree(),[c]=M.useState((()=>new T.Scene)),l=M.useCallback(((t,r)=>{if(e.current&&t.target===e.current){const{width:e,height:n,left:o,top:i}=a.current,s=t.clientX-o,c=t.clientY-i;r.pointer.set(s/e*2-1,-c/n*2+1),r.raycaster.setFromCamera(r.pointer,r.camera)}}),[a]),[u,d]=M.useReducer((()=>!0),!1);return M.useEffect((()=>{var t;a.current=null==(t=e.current)?void 0:t.getBoundingClientRect(),d()}),[]),u&&o.createPortal(M.createElement(vn,{canvasSize:i,frames:r,scene:s,track:e,rect:a,index:t},n),c,{events:{compute:l,priority:t},size:{width:a.current.width,height:a.current.height}})},exports.calcPosFromAngles=Er,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(),dn.copy(r.boundingSphere),dn.applyMatrix4(o),!1!==e.ray.intersectsSphere(dn)&&(ln.copy(o).invert(),un.copy(e.ray).applyMatrix4(ln),null!==r.boundingBox&&null===un.intersectBox(r.boundingBox,mn)||t.push({distance:mn.distanceTo(e.ray.origin),point:mn.clone(),object:this})))},exports.shaderMaterial=de,exports.softShadows=e=>{if(!_t){_t=!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)),[i]=M.useState((()=>new n.AnimationMixer(void 0))),s=M.useRef({}),[c]=M.useState((()=>{const t={};return e.forEach((e=>Object.defineProperty(t,e.name,{enumerable:!0,get(){if(a.current)return s.current[e.name]||(s.current[e.name]=i.clipAction(e,a.current))}}))),{ref:a,clips:e,actions:t,names:e.map((e=>e.name)),mixer:i}}));return o.useFrame(((e,t)=>i.update(t))),M.useEffect((()=>{const e=a.current;return()=>{s.current={},Object.values(c.actions).forEach((t=>{e&&i.uncacheAction(t,e)}))}}),[e]),c},exports.useAspect=function(e,t,r=1){const n=o.useThree((e=>e.viewport)),a=t*(n.aspect>e/t?n.width/e:n.height/t);return[e*(n.aspect>e/t?n.width/e:n.height/t)*r,a*r,1]},exports.useBVH=function(e,t){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(er)},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=ke,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=st,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:i}=o.useThree((e=>e.size)),s=e||a*r,c=e||i*r,l=M.useMemo((()=>{const e=new n.DepthTexture(s,c);return e.format=n.DepthFormat,e.type=n.UnsignedShortType,{depthTexture:e}}),[s,c]);let u=0;const d=ht(s,c,l);return o.useFrame((e=>{(t===1/0||u<t)&&(e.gl.setRenderTarget(d),e.gl.render(e.scene,e.camera),e.gl.setRenderTarget(null),u++)})),d.depthTexture},exports.useDetectGPU=e=>m.suspend((()=>g.getGPUTier(e)),["useDetectGPU"]),exports.useEnvironment=ir,exports.useFBO=ht,exports.useFBX=ct,exports.useGLTF=dt,exports.useGizmoContext=je,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))),i=a.onBeforeRender;a.onBeforeRender=()=>r.current=!0;const s=o.addAfterEffect((()=>(r.current!==n.current&&e(n.current=r.current),!0)));return()=>{a.onBeforeRender=i,t(),s()}}}),[]),t},exports.useKTX2=ft,exports.useMask=function(e,t=!1){return{stencilWrite:!0,stencilRef:e,stencilFunc:t?T.NotEqualStencilFunc:T.EqualStencilFunc,stencilFail:T.KeepStencilOp,stencilZFail:T.KeepStencilOp,stencilZPass:T.KeepStencilOp}},exports.useMatcapTexture=function(e=0,t=1024,r){const n=m.suspend((()=>fetch("https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/matcaps.json").then((e=>e.json()))),["matcapList"]),o=n[0],a=M.useMemo((()=>Object.keys(n).length),[]),i=`${M.useMemo((()=>"string"==typeof e?e:"number"==typeof e?n[e]:null),[e])||o}${function(e){switch(e){case 64:return"-64px";case 128:return"-128px";case 256:return"-256px";case 512:return"-512px";default:return""}}(t)}.png`,s=`https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d/${t}/${i}`;return[fe(s,r),s,a]},exports.useNormalTexture=function(e=0,t={},r){const{repeat:o=[1,1],anisotropy:a=1,offset:i=[0,0]}=t,s=m.suspend((()=>fetch("https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/normals/normals.json").then((e=>e.json()))),["normalsList"]),c=M.useMemo((()=>Object.keys(s).length),[]),l=s[0],u=`https://rawcdn.githack.com/pmndrs/drei-assets/7a3104997e1576f83472829815b00880d88b32fb/normals/${s[e]||l}`,d=fe(u,r);return M.useLayoutEffect((()=>{d&&(d.wrapS=d.wrapT=n.RepeatWrapping,d.repeat=new n.Vector2(o[0],o[1]),d.offset=new n.Vector2(i[0],i[1]),d.anisotropy=a)}),[d,a,o,i]),[d,u,c]},exports.useProgress=G,exports.useScroll=X,exports.useSelect=function(){return M.useContext(J)},exports.useTexture=fe,exports.useTrail=we;
package/index.js CHANGED
@@ -53,6 +53,7 @@ export { useAnimations } from './core/useAnimations.js';
53
53
  export { useFBO } from './core/useFBO.js';
54
54
  export { useIntersect } from './core/useIntersect.js';
55
55
  export { useBoxProjectedEnv } from './core/useBoxProjectedEnv.js';
56
+ export { BBAnchor } from './core/BBAnchor.js';
56
57
  export { CurveModifier } from './core/CurveModifier.js';
57
58
  export { MeshDistortMaterial } from './core/MeshDistortMaterial.js';
58
59
  export { MeshWobbleMaterial } from './core/MeshWobbleMaterial.js';
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../core/Billboard.cjs.js"),r=require("../core/QuadraticBezierLine.cjs.js"),s=require("../core/CubicBezierLine.cjs.js"),o=require("../core/Line.cjs.js"),t=require("../core/PositionalAudio.cjs.js"),i=require("../core/Text.cjs.js"),c=require("../core/Text3D.cjs.js"),u=require("../core/Effects.cjs.js"),a=require("../core/GradientTexture.cjs.js"),n=require("../core/Image.cjs.js"),j=require("../core/Edges.cjs.js"),p=require("../core/Trail.cjs.js"),x=require("../core/Sampler.cjs.js"),l=require("../core/ComputedAttribute.cjs.js"),q=require("../core/Clone.cjs.js"),d=require("../core/OrthographicCamera.cjs.js"),m=require("../core/PerspectiveCamera.cjs.js"),C=require("../core/CubeCamera.cjs.js"),h=require("../core/DeviceOrientationControls.cjs.js"),b=require("../core/FlyControls.cjs.js"),S=require("../core/MapControls.cjs.js"),B=require("../core/OrbitControls.cjs.js"),M=require("../core/TrackballControls.cjs.js"),T=require("../core/ArcballControls.cjs.js"),P=require("../core/TransformControls.cjs.js"),f=require("../core/PointerLockControls.cjs.js"),g=require("../core/FirstPersonControls.cjs.js"),v=require("../core/GizmoHelper.cjs.js"),k=require("../core/GizmoViewcube.cjs.js"),E=require("../core/GizmoViewport.cjs.js"),L=require("../core/useCubeTexture.cjs.js"),A=require("../core/useFBX.cjs.js"),D=require("../core/useGLTF.cjs.js"),G=require("../core/useProgress.cjs.js"),F=require("../core/useTexture.cjs.js"),O=require("../core/useKTX2.cjs.js"),w=require("../core/Stats.cjs.js"),z=require("../core/useDepthBuffer.cjs.js"),I=require("../core/useAspect.cjs.js"),R=require("../core/useCamera.cjs.js"),y=require("../core/useDetectGPU.cjs.js"),H=require("../core/useHelper.cjs.js"),V=require("../core/useBVH.cjs.js"),Q=require("../core/useContextBridge.cjs.js"),X=require("../core/useAnimations.cjs.js"),K=require("../core/useFBO.cjs.js"),W=require("../core/useIntersect.cjs.js"),N=require("../core/useBoxProjectedEnv.cjs.js"),U=require("../core/CurveModifier.cjs.js"),_=require("../core/MeshDistortMaterial.cjs.js"),J=require("../core/MeshWobbleMaterial.cjs.js"),Y=require("../core/MeshReflectorMaterial.cjs.js"),Z=require("../core/PointMaterial.cjs.js"),$=require("../core/shaderMaterial.cjs.js"),ee=require("../core/softShadows.cjs.js"),re=require("../core/shapes.cjs.js"),se=require("../core/RoundedBox.cjs.js"),oe=require("../core/ScreenQuad.cjs.js"),te=require("../core/Center.cjs.js"),ie=require("../core/Bounds.cjs.js"),ce=require("../core/CameraShake.cjs.js"),ue=require("../core/Float.cjs.js"),ae=require("../core/Stage.cjs.js"),ne=require("../core/Backdrop.cjs.js"),je=require("../core/Shadow.cjs.js"),pe=require("../core/ContactShadows.cjs.js"),xe=require("../core/Reflector.cjs.js"),le=require("../core/SpotLight.cjs.js"),qe=require("../core/Environment.cjs.js"),de=require("../core/Lightformer.cjs.js"),me=require("../core/Sky.cjs.js"),Ce=require("../core/Stars.cjs.js"),he=require("../core/Cloud.cjs.js"),be=require("../core/Sparkles.cjs.js"),Se=require("../core/useMatcapTexture.cjs.js"),Be=require("../core/useNormalTexture.cjs.js"),Me=require("../core/Points.cjs.js"),Te=require("../core/Instances.cjs.js"),Pe=require("../core/Segments.cjs.js"),fe=require("../core/Detailed.cjs.js"),ge=require("../core/Preload.cjs.js"),ve=require("../core/BakeShadows.cjs.js"),ke=require("../core/meshBounds.cjs.js"),Ee=require("../core/AdaptiveDpr.cjs.js"),Le=require("../core/AdaptiveEvents.cjs.js"),Ae=require("../core/RenderTexture.cjs.js"),De=require("../core/Mask.cjs.js");require("@babel/runtime/helpers/extends"),require("react"),require("@react-three/fiber"),require("react-merge-refs"),require("three"),require("three-stdlib"),require("troika-three-text"),require("suspend-react"),require("meshline"),require("lodash.pick"),require("lodash.omit"),require("zustand"),require("stats.js"),require("../helpers/useEffectfulState.cjs.js"),require("detect-gpu"),require("three-mesh-bvh"),require("../materials/BlurPass.cjs.js"),require("../materials/ConvolutionMaterial.cjs.js"),require("../materials/MeshReflectorMaterial.cjs.js"),require("../helpers/environment-assets.cjs.js"),require("../materials/SpotLightMaterial.cjs.js"),require("../helpers/Position.cjs.js"),require("react-composer"),exports.Billboard=e.Billboard,exports.QuadraticBezierLine=r.QuadraticBezierLine,exports.CubicBezierLine=s.CubicBezierLine,exports.Line=o.Line,exports.PositionalAudio=t.PositionalAudio,exports.Text=i.Text,exports.Text3D=c.Text3D,exports.Effects=u.Effects,exports.isWebGL2Available=u.isWebGL2Available,exports.GradientTexture=a.GradientTexture,exports.Image=n.Image,exports.Edges=j.Edges,exports.Trail=p.Trail,exports.useTrail=p.useTrail,exports.Sampler=x.Sampler,exports.ComputedAttribute=l.ComputedAttribute,exports.Clone=q.Clone,exports.OrthographicCamera=d.OrthographicCamera,exports.PerspectiveCamera=m.PerspectiveCamera,exports.CubeCamera=C.CubeCamera,exports.DeviceOrientationControls=h.DeviceOrientationControls,exports.FlyControls=b.FlyControls,exports.MapControls=S.MapControls,exports.OrbitControls=B.OrbitControls,exports.TrackballControls=M.TrackballControls,exports.ArcballControls=T.ArcballControls,exports.TransformControls=P.TransformControls,exports.PointerLockControls=f.PointerLockControls,exports.FirstPersonControls=g.FirstPersonControls,exports.GizmoHelper=v.GizmoHelper,exports.useGizmoContext=v.useGizmoContext,exports.GizmoViewcube=k.GizmoViewcube,exports.GizmoViewport=E.GizmoViewport,exports.useCubeTexture=L.useCubeTexture,exports.useFBX=A.useFBX,exports.useGLTF=D.useGLTF,exports.useProgress=G.useProgress,exports.IsObject=F.IsObject,exports.useTexture=F.useTexture,exports.useKTX2=O.useKTX2,exports.Stats=w.Stats,exports.useDepthBuffer=z.useDepthBuffer,exports.useAspect=I.useAspect,exports.useCamera=R.useCamera,exports.useDetectGPU=y.useDetectGPU,exports.useHelper=H.useHelper,exports.useBVH=V.useBVH,exports.useContextBridge=Q.useContextBridge,exports.useAnimations=X.useAnimations,exports.useFBO=K.useFBO,exports.useIntersect=W.useIntersect,exports.useBoxProjectedEnv=N.useBoxProjectedEnv,exports.CurveModifier=U.CurveModifier,exports.MeshDistortMaterial=_.MeshDistortMaterial,exports.MeshWobbleMaterial=J.MeshWobbleMaterial,exports.MeshReflectorMaterial=Y.MeshReflectorMaterial,exports.PointMaterial=Z.PointMaterial,exports.PointMaterialImpl=Z.PointMaterialImpl,exports.shaderMaterial=$.shaderMaterial,exports.softShadows=ee.softShadows,exports.Box=re.Box,exports.Circle=re.Circle,exports.Cone=re.Cone,exports.Cylinder=re.Cylinder,exports.Dodecahedron=re.Dodecahedron,exports.Extrude=re.Extrude,exports.Icosahedron=re.Icosahedron,exports.Lathe=re.Lathe,exports.Octahedron=re.Octahedron,exports.Plane=re.Plane,exports.Polyhedron=re.Polyhedron,exports.Ring=re.Ring,exports.Sphere=re.Sphere,exports.Tetrahedron=re.Tetrahedron,exports.Torus=re.Torus,exports.TorusKnot=re.TorusKnot,exports.Tube=re.Tube,exports.RoundedBox=se.RoundedBox,exports.ScreenQuad=oe.ScreenQuad,exports.Center=te.Center,exports.Bounds=ie.Bounds,exports.useBounds=ie.useBounds,exports.CameraShake=ce.CameraShake,exports.Float=ue.Float,exports.Stage=ae.Stage,exports.Backdrop=ne.Backdrop,exports.Shadow=je.Shadow,exports.ContactShadows=pe.ContactShadows,exports.Reflector=xe.Reflector,exports.SpotLight=le.SpotLight,exports.Environment=qe.Environment,exports.EnvironmentCube=qe.EnvironmentCube,exports.EnvironmentMap=qe.EnvironmentMap,exports.EnvironmentPortal=qe.EnvironmentPortal,exports.useEnvironment=qe.useEnvironment,exports.Lightformer=de.Lightformer,exports.Sky=me.Sky,exports.calcPosFromAngles=me.calcPosFromAngles,exports.Stars=Ce.Stars,exports.Cloud=he.Cloud,exports.Sparkles=be.Sparkles,exports.useMatcapTexture=Se.useMatcapTexture,exports.useNormalTexture=Be.useNormalTexture,exports.Point=Me.Point,exports.Points=Me.Points,exports.PointsBuffer=Me.PointsBuffer,exports.Instance=Te.Instance,exports.Instances=Te.Instances,exports.Merged=Te.Merged,exports.Segment=Pe.Segment,exports.SegmentObject=Pe.SegmentObject,exports.Segments=Pe.Segments,exports.Detailed=fe.Detailed,exports.Preload=ge.Preload,exports.BakeShadows=ve.BakeShadows,exports.meshBounds=ke.meshBounds,exports.AdaptiveDpr=Ee.AdaptiveDpr,exports.AdaptiveEvents=Le.AdaptiveEvents,exports.RenderTexture=Ae.RenderTexture,exports.Mask=De.Mask,exports.useMask=De.useMask;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../core/Billboard.cjs.js"),r=require("../core/QuadraticBezierLine.cjs.js"),s=require("../core/CubicBezierLine.cjs.js"),o=require("../core/Line.cjs.js"),t=require("../core/PositionalAudio.cjs.js"),i=require("../core/Text.cjs.js"),c=require("../core/Text3D.cjs.js"),u=require("../core/Effects.cjs.js"),a=require("../core/GradientTexture.cjs.js"),n=require("../core/Image.cjs.js"),j=require("../core/Edges.cjs.js"),p=require("../core/Trail.cjs.js"),x=require("../core/Sampler.cjs.js"),l=require("../core/ComputedAttribute.cjs.js"),q=require("../core/Clone.cjs.js"),d=require("../core/OrthographicCamera.cjs.js"),m=require("../core/PerspectiveCamera.cjs.js"),C=require("../core/CubeCamera.cjs.js"),h=require("../core/DeviceOrientationControls.cjs.js"),B=require("../core/FlyControls.cjs.js"),b=require("../core/MapControls.cjs.js"),S=require("../core/OrbitControls.cjs.js"),M=require("../core/TrackballControls.cjs.js"),T=require("../core/ArcballControls.cjs.js"),P=require("../core/TransformControls.cjs.js"),f=require("../core/PointerLockControls.cjs.js"),g=require("../core/FirstPersonControls.cjs.js"),v=require("../core/GizmoHelper.cjs.js"),k=require("../core/GizmoViewcube.cjs.js"),A=require("../core/GizmoViewport.cjs.js"),E=require("../core/useCubeTexture.cjs.js"),L=require("../core/useFBX.cjs.js"),D=require("../core/useGLTF.cjs.js"),G=require("../core/useProgress.cjs.js"),F=require("../core/useTexture.cjs.js"),O=require("../core/useKTX2.cjs.js"),w=require("../core/Stats.cjs.js"),z=require("../core/useDepthBuffer.cjs.js"),I=require("../core/useAspect.cjs.js"),R=require("../core/useCamera.cjs.js"),y=require("../core/useDetectGPU.cjs.js"),H=require("../core/useHelper.cjs.js"),V=require("../core/useBVH.cjs.js"),Q=require("../core/useContextBridge.cjs.js"),X=require("../core/useAnimations.cjs.js"),K=require("../core/useFBO.cjs.js"),W=require("../core/useIntersect.cjs.js"),N=require("../core/useBoxProjectedEnv.cjs.js"),U=require("../core/BBAnchor.cjs.js"),_=require("../core/CurveModifier.cjs.js"),J=require("../core/MeshDistortMaterial.cjs.js"),Y=require("../core/MeshWobbleMaterial.cjs.js"),Z=require("../core/MeshReflectorMaterial.cjs.js"),$=require("../core/PointMaterial.cjs.js"),ee=require("../core/shaderMaterial.cjs.js"),re=require("../core/softShadows.cjs.js"),se=require("../core/shapes.cjs.js"),oe=require("../core/RoundedBox.cjs.js"),te=require("../core/ScreenQuad.cjs.js"),ie=require("../core/Center.cjs.js"),ce=require("../core/Bounds.cjs.js"),ue=require("../core/CameraShake.cjs.js"),ae=require("../core/Float.cjs.js"),ne=require("../core/Stage.cjs.js"),je=require("../core/Backdrop.cjs.js"),pe=require("../core/Shadow.cjs.js"),xe=require("../core/ContactShadows.cjs.js"),le=require("../core/Reflector.cjs.js"),qe=require("../core/SpotLight.cjs.js"),de=require("../core/Environment.cjs.js"),me=require("../core/Lightformer.cjs.js"),Ce=require("../core/Sky.cjs.js"),he=require("../core/Stars.cjs.js"),Be=require("../core/Cloud.cjs.js"),be=require("../core/Sparkles.cjs.js"),Se=require("../core/useMatcapTexture.cjs.js"),Me=require("../core/useNormalTexture.cjs.js"),Te=require("../core/Points.cjs.js"),Pe=require("../core/Instances.cjs.js"),fe=require("../core/Segments.cjs.js"),ge=require("../core/Detailed.cjs.js"),ve=require("../core/Preload.cjs.js"),ke=require("../core/BakeShadows.cjs.js"),Ae=require("../core/meshBounds.cjs.js"),Ee=require("../core/AdaptiveDpr.cjs.js"),Le=require("../core/AdaptiveEvents.cjs.js"),De=require("../core/RenderTexture.cjs.js"),Ge=require("../core/Mask.cjs.js");require("@babel/runtime/helpers/extends"),require("react"),require("@react-three/fiber"),require("react-merge-refs"),require("three"),require("three-stdlib"),require("troika-three-text"),require("suspend-react"),require("meshline"),require("lodash.pick"),require("lodash.omit"),require("zustand"),require("stats.js"),require("../helpers/useEffectfulState.cjs.js"),require("detect-gpu"),require("three-mesh-bvh"),require("../materials/BlurPass.cjs.js"),require("../materials/ConvolutionMaterial.cjs.js"),require("../materials/MeshReflectorMaterial.cjs.js"),require("../helpers/environment-assets.cjs.js"),require("../materials/SpotLightMaterial.cjs.js"),require("../helpers/Position.cjs.js"),require("react-composer"),exports.Billboard=e.Billboard,exports.QuadraticBezierLine=r.QuadraticBezierLine,exports.CubicBezierLine=s.CubicBezierLine,exports.Line=o.Line,exports.PositionalAudio=t.PositionalAudio,exports.Text=i.Text,exports.Text3D=c.Text3D,exports.Effects=u.Effects,exports.isWebGL2Available=u.isWebGL2Available,exports.GradientTexture=a.GradientTexture,exports.Image=n.Image,exports.Edges=j.Edges,exports.Trail=p.Trail,exports.useTrail=p.useTrail,exports.Sampler=x.Sampler,exports.ComputedAttribute=l.ComputedAttribute,exports.Clone=q.Clone,exports.OrthographicCamera=d.OrthographicCamera,exports.PerspectiveCamera=m.PerspectiveCamera,exports.CubeCamera=C.CubeCamera,exports.DeviceOrientationControls=h.DeviceOrientationControls,exports.FlyControls=B.FlyControls,exports.MapControls=b.MapControls,exports.OrbitControls=S.OrbitControls,exports.TrackballControls=M.TrackballControls,exports.ArcballControls=T.ArcballControls,exports.TransformControls=P.TransformControls,exports.PointerLockControls=f.PointerLockControls,exports.FirstPersonControls=g.FirstPersonControls,exports.GizmoHelper=v.GizmoHelper,exports.useGizmoContext=v.useGizmoContext,exports.GizmoViewcube=k.GizmoViewcube,exports.GizmoViewport=A.GizmoViewport,exports.useCubeTexture=E.useCubeTexture,exports.useFBX=L.useFBX,exports.useGLTF=D.useGLTF,exports.useProgress=G.useProgress,exports.IsObject=F.IsObject,exports.useTexture=F.useTexture,exports.useKTX2=O.useKTX2,exports.Stats=w.Stats,exports.useDepthBuffer=z.useDepthBuffer,exports.useAspect=I.useAspect,exports.useCamera=R.useCamera,exports.useDetectGPU=y.useDetectGPU,exports.useHelper=H.useHelper,exports.useBVH=V.useBVH,exports.useContextBridge=Q.useContextBridge,exports.useAnimations=X.useAnimations,exports.useFBO=K.useFBO,exports.useIntersect=W.useIntersect,exports.useBoxProjectedEnv=N.useBoxProjectedEnv,exports.BBAnchor=U.BBAnchor,exports.CurveModifier=_.CurveModifier,exports.MeshDistortMaterial=J.MeshDistortMaterial,exports.MeshWobbleMaterial=Y.MeshWobbleMaterial,exports.MeshReflectorMaterial=Z.MeshReflectorMaterial,exports.PointMaterial=$.PointMaterial,exports.PointMaterialImpl=$.PointMaterialImpl,exports.shaderMaterial=ee.shaderMaterial,exports.softShadows=re.softShadows,exports.Box=se.Box,exports.Circle=se.Circle,exports.Cone=se.Cone,exports.Cylinder=se.Cylinder,exports.Dodecahedron=se.Dodecahedron,exports.Extrude=se.Extrude,exports.Icosahedron=se.Icosahedron,exports.Lathe=se.Lathe,exports.Octahedron=se.Octahedron,exports.Plane=se.Plane,exports.Polyhedron=se.Polyhedron,exports.Ring=se.Ring,exports.Sphere=se.Sphere,exports.Tetrahedron=se.Tetrahedron,exports.Torus=se.Torus,exports.TorusKnot=se.TorusKnot,exports.Tube=se.Tube,exports.RoundedBox=oe.RoundedBox,exports.ScreenQuad=te.ScreenQuad,exports.Center=ie.Center,exports.Bounds=ce.Bounds,exports.useBounds=ce.useBounds,exports.CameraShake=ue.CameraShake,exports.Float=ae.Float,exports.Stage=ne.Stage,exports.Backdrop=je.Backdrop,exports.Shadow=pe.Shadow,exports.ContactShadows=xe.ContactShadows,exports.Reflector=le.Reflector,exports.SpotLight=qe.SpotLight,exports.Environment=de.Environment,exports.EnvironmentCube=de.EnvironmentCube,exports.EnvironmentMap=de.EnvironmentMap,exports.EnvironmentPortal=de.EnvironmentPortal,exports.useEnvironment=de.useEnvironment,exports.Lightformer=me.Lightformer,exports.Sky=Ce.Sky,exports.calcPosFromAngles=Ce.calcPosFromAngles,exports.Stars=he.Stars,exports.Cloud=Be.Cloud,exports.Sparkles=be.Sparkles,exports.useMatcapTexture=Se.useMatcapTexture,exports.useNormalTexture=Me.useNormalTexture,exports.Point=Te.Point,exports.Points=Te.Points,exports.PointsBuffer=Te.PointsBuffer,exports.Instance=Pe.Instance,exports.Instances=Pe.Instances,exports.Merged=Pe.Merged,exports.Segment=fe.Segment,exports.SegmentObject=fe.SegmentObject,exports.Segments=fe.Segments,exports.Detailed=ge.Detailed,exports.Preload=ve.Preload,exports.BakeShadows=ke.BakeShadows,exports.meshBounds=Ae.meshBounds,exports.AdaptiveDpr=Ee.AdaptiveDpr,exports.AdaptiveEvents=Le.AdaptiveEvents,exports.RenderTexture=De.RenderTexture,exports.Mask=Ge.Mask,exports.useMask=Ge.useMask;
package/native/index.js CHANGED
@@ -46,6 +46,7 @@ export { useAnimations } from '../core/useAnimations.js';
46
46
  export { useFBO } from '../core/useFBO.js';
47
47
  export { useIntersect } from '../core/useIntersect.js';
48
48
  export { useBoxProjectedEnv } from '../core/useBoxProjectedEnv.js';
49
+ export { BBAnchor } from '../core/BBAnchor.js';
49
50
  export { CurveModifier } from '../core/CurveModifier.js';
50
51
  export { MeshDistortMaterial } from '../core/MeshDistortMaterial.js';
51
52
  export { MeshWobbleMaterial } from '../core/MeshWobbleMaterial.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-three/drei",
3
- "version": "9.9.0",
3
+ "version": "9.11.1",
4
4
  "private": false,
5
5
  "description": "useful add-ons for react-three-fiber",
6
6
  "keywords": [
package/web/index.cjs.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./Html.cjs.js"),r=require("./CycleRaycast.cjs.js"),s=require("./useCursor.cjs.js"),o=require("./Loader.cjs.js"),t=require("./ScrollControls.cjs.js"),i=require("./PresentationControls.cjs.js"),c=require("./Select.cjs.js"),u=require("./View.cjs.js"),a=require("../core/Billboard.cjs.js"),n=require("../core/QuadraticBezierLine.cjs.js"),j=require("../core/CubicBezierLine.cjs.js"),p=require("../core/Line.cjs.js"),l=require("../core/PositionalAudio.cjs.js"),x=require("../core/Text.cjs.js"),q=require("../core/Text3D.cjs.js"),d=require("../core/Effects.cjs.js"),C=require("../core/GradientTexture.cjs.js"),m=require("../core/Image.cjs.js"),h=require("../core/Edges.cjs.js"),S=require("../core/Trail.cjs.js"),b=require("../core/Sampler.cjs.js"),P=require("../core/ComputedAttribute.cjs.js"),B=require("../core/Clone.cjs.js"),M=require("../core/OrthographicCamera.cjs.js"),T=require("../core/PerspectiveCamera.cjs.js"),g=require("../core/CubeCamera.cjs.js"),f=require("../core/DeviceOrientationControls.cjs.js"),v=require("../core/FlyControls.cjs.js"),L=require("../core/MapControls.cjs.js"),k=require("../core/OrbitControls.cjs.js"),E=require("../core/TrackballControls.cjs.js"),A=require("../core/ArcballControls.cjs.js"),D=require("../core/TransformControls.cjs.js"),w=require("../core/PointerLockControls.cjs.js"),G=require("../core/FirstPersonControls.cjs.js"),F=require("../core/GizmoHelper.cjs.js"),z=require("../core/GizmoViewcube.cjs.js"),O=require("../core/GizmoViewport.cjs.js"),R=require("../core/useCubeTexture.cjs.js"),y=require("../core/useFBX.cjs.js"),I=require("../core/useGLTF.cjs.js"),H=require("../core/useProgress.cjs.js"),V=require("../core/useTexture.cjs.js"),Q=require("../core/useKTX2.cjs.js"),X=require("../core/Stats.cjs.js"),K=require("../core/useDepthBuffer.cjs.js"),W=require("../core/useAspect.cjs.js"),N=require("../core/useCamera.cjs.js"),U=require("../core/useDetectGPU.cjs.js"),_=require("../core/useHelper.cjs.js"),J=require("../core/useBVH.cjs.js"),Y=require("../core/useContextBridge.cjs.js"),Z=require("../core/useAnimations.cjs.js"),$=require("../core/useFBO.cjs.js"),ee=require("../core/useIntersect.cjs.js"),re=require("../core/useBoxProjectedEnv.cjs.js"),se=require("../core/CurveModifier.cjs.js"),oe=require("../core/MeshDistortMaterial.cjs.js"),te=require("../core/MeshWobbleMaterial.cjs.js"),ie=require("../core/MeshReflectorMaterial.cjs.js"),ce=require("../core/PointMaterial.cjs.js"),ue=require("../core/shaderMaterial.cjs.js"),ae=require("../core/softShadows.cjs.js"),ne=require("../core/shapes.cjs.js"),je=require("../core/RoundedBox.cjs.js"),pe=require("../core/ScreenQuad.cjs.js"),le=require("../core/Center.cjs.js"),xe=require("../core/Bounds.cjs.js"),qe=require("../core/CameraShake.cjs.js"),de=require("../core/Float.cjs.js"),Ce=require("../core/Stage.cjs.js"),me=require("../core/Backdrop.cjs.js"),he=require("../core/Shadow.cjs.js"),Se=require("../core/ContactShadows.cjs.js"),be=require("../core/Reflector.cjs.js"),Pe=require("../core/SpotLight.cjs.js"),Be=require("../core/Environment.cjs.js"),Me=require("../core/Lightformer.cjs.js"),Te=require("../core/Sky.cjs.js"),ge=require("../core/Stars.cjs.js"),fe=require("../core/Cloud.cjs.js"),ve=require("../core/Sparkles.cjs.js"),Le=require("../core/useMatcapTexture.cjs.js"),ke=require("../core/useNormalTexture.cjs.js"),Ee=require("../core/Points.cjs.js"),Ae=require("../core/Instances.cjs.js"),De=require("../core/Segments.cjs.js"),we=require("../core/Detailed.cjs.js"),Ge=require("../core/Preload.cjs.js"),Fe=require("../core/BakeShadows.cjs.js"),ze=require("../core/meshBounds.cjs.js"),Oe=require("../core/AdaptiveDpr.cjs.js"),Re=require("../core/AdaptiveEvents.cjs.js"),ye=require("../core/RenderTexture.cjs.js"),Ie=require("../core/Mask.cjs.js");require("@babel/runtime/helpers/extends"),require("react"),require("react-dom/client"),require("three"),require("@react-three/fiber"),require("zustand"),require("react-merge-refs"),require("@react-spring/three"),require("@use-gesture/react"),require("three-stdlib"),require("zustand/shallow"),require("troika-three-text"),require("suspend-react"),require("meshline"),require("lodash.pick"),require("lodash.omit"),require("stats.js"),require("../helpers/useEffectfulState.cjs.js"),require("detect-gpu"),require("three-mesh-bvh"),require("../materials/BlurPass.cjs.js"),require("../materials/ConvolutionMaterial.cjs.js"),require("../materials/MeshReflectorMaterial.cjs.js"),require("../helpers/environment-assets.cjs.js"),require("../materials/SpotLightMaterial.cjs.js"),require("../helpers/Position.cjs.js"),require("react-composer"),exports.Html=e.Html,exports.CycleRaycast=r.CycleRaycast,exports.useCursor=s.useCursor,exports.Loader=o.Loader,exports.Scroll=t.Scroll,exports.ScrollControls=t.ScrollControls,exports.useScroll=t.useScroll,exports.PresentationControls=i.PresentationControls,exports.Select=c.Select,exports.useSelect=c.useSelect,exports.View=u.View,exports.Billboard=a.Billboard,exports.QuadraticBezierLine=n.QuadraticBezierLine,exports.CubicBezierLine=j.CubicBezierLine,exports.Line=p.Line,exports.PositionalAudio=l.PositionalAudio,exports.Text=x.Text,exports.Text3D=q.Text3D,exports.Effects=d.Effects,exports.isWebGL2Available=d.isWebGL2Available,exports.GradientTexture=C.GradientTexture,exports.Image=m.Image,exports.Edges=h.Edges,exports.Trail=S.Trail,exports.useTrail=S.useTrail,exports.Sampler=b.Sampler,exports.ComputedAttribute=P.ComputedAttribute,exports.Clone=B.Clone,exports.OrthographicCamera=M.OrthographicCamera,exports.PerspectiveCamera=T.PerspectiveCamera,exports.CubeCamera=g.CubeCamera,exports.DeviceOrientationControls=f.DeviceOrientationControls,exports.FlyControls=v.FlyControls,exports.MapControls=L.MapControls,exports.OrbitControls=k.OrbitControls,exports.TrackballControls=E.TrackballControls,exports.ArcballControls=A.ArcballControls,exports.TransformControls=D.TransformControls,exports.PointerLockControls=w.PointerLockControls,exports.FirstPersonControls=G.FirstPersonControls,exports.GizmoHelper=F.GizmoHelper,exports.useGizmoContext=F.useGizmoContext,exports.GizmoViewcube=z.GizmoViewcube,exports.GizmoViewport=O.GizmoViewport,exports.useCubeTexture=R.useCubeTexture,exports.useFBX=y.useFBX,exports.useGLTF=I.useGLTF,exports.useProgress=H.useProgress,exports.IsObject=V.IsObject,exports.useTexture=V.useTexture,exports.useKTX2=Q.useKTX2,exports.Stats=X.Stats,exports.useDepthBuffer=K.useDepthBuffer,exports.useAspect=W.useAspect,exports.useCamera=N.useCamera,exports.useDetectGPU=U.useDetectGPU,exports.useHelper=_.useHelper,exports.useBVH=J.useBVH,exports.useContextBridge=Y.useContextBridge,exports.useAnimations=Z.useAnimations,exports.useFBO=$.useFBO,exports.useIntersect=ee.useIntersect,exports.useBoxProjectedEnv=re.useBoxProjectedEnv,exports.CurveModifier=se.CurveModifier,exports.MeshDistortMaterial=oe.MeshDistortMaterial,exports.MeshWobbleMaterial=te.MeshWobbleMaterial,exports.MeshReflectorMaterial=ie.MeshReflectorMaterial,exports.PointMaterial=ce.PointMaterial,exports.PointMaterialImpl=ce.PointMaterialImpl,exports.shaderMaterial=ue.shaderMaterial,exports.softShadows=ae.softShadows,exports.Box=ne.Box,exports.Circle=ne.Circle,exports.Cone=ne.Cone,exports.Cylinder=ne.Cylinder,exports.Dodecahedron=ne.Dodecahedron,exports.Extrude=ne.Extrude,exports.Icosahedron=ne.Icosahedron,exports.Lathe=ne.Lathe,exports.Octahedron=ne.Octahedron,exports.Plane=ne.Plane,exports.Polyhedron=ne.Polyhedron,exports.Ring=ne.Ring,exports.Sphere=ne.Sphere,exports.Tetrahedron=ne.Tetrahedron,exports.Torus=ne.Torus,exports.TorusKnot=ne.TorusKnot,exports.Tube=ne.Tube,exports.RoundedBox=je.RoundedBox,exports.ScreenQuad=pe.ScreenQuad,exports.Center=le.Center,exports.Bounds=xe.Bounds,exports.useBounds=xe.useBounds,exports.CameraShake=qe.CameraShake,exports.Float=de.Float,exports.Stage=Ce.Stage,exports.Backdrop=me.Backdrop,exports.Shadow=he.Shadow,exports.ContactShadows=Se.ContactShadows,exports.Reflector=be.Reflector,exports.SpotLight=Pe.SpotLight,exports.Environment=Be.Environment,exports.EnvironmentCube=Be.EnvironmentCube,exports.EnvironmentMap=Be.EnvironmentMap,exports.EnvironmentPortal=Be.EnvironmentPortal,exports.useEnvironment=Be.useEnvironment,exports.Lightformer=Me.Lightformer,exports.Sky=Te.Sky,exports.calcPosFromAngles=Te.calcPosFromAngles,exports.Stars=ge.Stars,exports.Cloud=fe.Cloud,exports.Sparkles=ve.Sparkles,exports.useMatcapTexture=Le.useMatcapTexture,exports.useNormalTexture=ke.useNormalTexture,exports.Point=Ee.Point,exports.Points=Ee.Points,exports.PointsBuffer=Ee.PointsBuffer,exports.Instance=Ae.Instance,exports.Instances=Ae.Instances,exports.Merged=Ae.Merged,exports.Segment=De.Segment,exports.SegmentObject=De.SegmentObject,exports.Segments=De.Segments,exports.Detailed=we.Detailed,exports.Preload=Ge.Preload,exports.BakeShadows=Fe.BakeShadows,exports.meshBounds=ze.meshBounds,exports.AdaptiveDpr=Oe.AdaptiveDpr,exports.AdaptiveEvents=Re.AdaptiveEvents,exports.RenderTexture=ye.RenderTexture,exports.Mask=Ie.Mask,exports.useMask=Ie.useMask;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./Html.cjs.js"),r=require("./CycleRaycast.cjs.js"),s=require("./useCursor.cjs.js"),o=require("./Loader.cjs.js"),t=require("./ScrollControls.cjs.js"),i=require("./PresentationControls.cjs.js"),c=require("./Select.cjs.js"),u=require("./View.cjs.js"),a=require("../core/Billboard.cjs.js"),n=require("../core/QuadraticBezierLine.cjs.js"),j=require("../core/CubicBezierLine.cjs.js"),p=require("../core/Line.cjs.js"),l=require("../core/PositionalAudio.cjs.js"),x=require("../core/Text.cjs.js"),q=require("../core/Text3D.cjs.js"),d=require("../core/Effects.cjs.js"),C=require("../core/GradientTexture.cjs.js"),m=require("../core/Image.cjs.js"),h=require("../core/Edges.cjs.js"),S=require("../core/Trail.cjs.js"),B=require("../core/Sampler.cjs.js"),b=require("../core/ComputedAttribute.cjs.js"),P=require("../core/Clone.cjs.js"),M=require("../core/OrthographicCamera.cjs.js"),T=require("../core/PerspectiveCamera.cjs.js"),g=require("../core/CubeCamera.cjs.js"),f=require("../core/DeviceOrientationControls.cjs.js"),v=require("../core/FlyControls.cjs.js"),L=require("../core/MapControls.cjs.js"),k=require("../core/OrbitControls.cjs.js"),A=require("../core/TrackballControls.cjs.js"),E=require("../core/ArcballControls.cjs.js"),D=require("../core/TransformControls.cjs.js"),w=require("../core/PointerLockControls.cjs.js"),G=require("../core/FirstPersonControls.cjs.js"),F=require("../core/GizmoHelper.cjs.js"),z=require("../core/GizmoViewcube.cjs.js"),O=require("../core/GizmoViewport.cjs.js"),R=require("../core/useCubeTexture.cjs.js"),y=require("../core/useFBX.cjs.js"),I=require("../core/useGLTF.cjs.js"),H=require("../core/useProgress.cjs.js"),V=require("../core/useTexture.cjs.js"),Q=require("../core/useKTX2.cjs.js"),X=require("../core/Stats.cjs.js"),K=require("../core/useDepthBuffer.cjs.js"),W=require("../core/useAspect.cjs.js"),N=require("../core/useCamera.cjs.js"),U=require("../core/useDetectGPU.cjs.js"),_=require("../core/useHelper.cjs.js"),J=require("../core/useBVH.cjs.js"),Y=require("../core/useContextBridge.cjs.js"),Z=require("../core/useAnimations.cjs.js"),$=require("../core/useFBO.cjs.js"),ee=require("../core/useIntersect.cjs.js"),re=require("../core/useBoxProjectedEnv.cjs.js"),se=require("../core/BBAnchor.cjs.js"),oe=require("../core/CurveModifier.cjs.js"),te=require("../core/MeshDistortMaterial.cjs.js"),ie=require("../core/MeshWobbleMaterial.cjs.js"),ce=require("../core/MeshReflectorMaterial.cjs.js"),ue=require("../core/PointMaterial.cjs.js"),ae=require("../core/shaderMaterial.cjs.js"),ne=require("../core/softShadows.cjs.js"),je=require("../core/shapes.cjs.js"),pe=require("../core/RoundedBox.cjs.js"),le=require("../core/ScreenQuad.cjs.js"),xe=require("../core/Center.cjs.js"),qe=require("../core/Bounds.cjs.js"),de=require("../core/CameraShake.cjs.js"),Ce=require("../core/Float.cjs.js"),me=require("../core/Stage.cjs.js"),he=require("../core/Backdrop.cjs.js"),Se=require("../core/Shadow.cjs.js"),Be=require("../core/ContactShadows.cjs.js"),be=require("../core/Reflector.cjs.js"),Pe=require("../core/SpotLight.cjs.js"),Me=require("../core/Environment.cjs.js"),Te=require("../core/Lightformer.cjs.js"),ge=require("../core/Sky.cjs.js"),fe=require("../core/Stars.cjs.js"),ve=require("../core/Cloud.cjs.js"),Le=require("../core/Sparkles.cjs.js"),ke=require("../core/useMatcapTexture.cjs.js"),Ae=require("../core/useNormalTexture.cjs.js"),Ee=require("../core/Points.cjs.js"),De=require("../core/Instances.cjs.js"),we=require("../core/Segments.cjs.js"),Ge=require("../core/Detailed.cjs.js"),Fe=require("../core/Preload.cjs.js"),ze=require("../core/BakeShadows.cjs.js"),Oe=require("../core/meshBounds.cjs.js"),Re=require("../core/AdaptiveDpr.cjs.js"),ye=require("../core/AdaptiveEvents.cjs.js"),Ie=require("../core/RenderTexture.cjs.js"),He=require("../core/Mask.cjs.js");require("@babel/runtime/helpers/extends"),require("react"),require("react-dom/client"),require("three"),require("@react-three/fiber"),require("zustand"),require("react-merge-refs"),require("@react-spring/three"),require("@use-gesture/react"),require("three-stdlib"),require("zustand/shallow"),require("troika-three-text"),require("suspend-react"),require("meshline"),require("lodash.pick"),require("lodash.omit"),require("stats.js"),require("../helpers/useEffectfulState.cjs.js"),require("detect-gpu"),require("three-mesh-bvh"),require("../materials/BlurPass.cjs.js"),require("../materials/ConvolutionMaterial.cjs.js"),require("../materials/MeshReflectorMaterial.cjs.js"),require("../helpers/environment-assets.cjs.js"),require("../materials/SpotLightMaterial.cjs.js"),require("../helpers/Position.cjs.js"),require("react-composer"),exports.Html=e.Html,exports.CycleRaycast=r.CycleRaycast,exports.useCursor=s.useCursor,exports.Loader=o.Loader,exports.Scroll=t.Scroll,exports.ScrollControls=t.ScrollControls,exports.useScroll=t.useScroll,exports.PresentationControls=i.PresentationControls,exports.Select=c.Select,exports.useSelect=c.useSelect,exports.View=u.View,exports.Billboard=a.Billboard,exports.QuadraticBezierLine=n.QuadraticBezierLine,exports.CubicBezierLine=j.CubicBezierLine,exports.Line=p.Line,exports.PositionalAudio=l.PositionalAudio,exports.Text=x.Text,exports.Text3D=q.Text3D,exports.Effects=d.Effects,exports.isWebGL2Available=d.isWebGL2Available,exports.GradientTexture=C.GradientTexture,exports.Image=m.Image,exports.Edges=h.Edges,exports.Trail=S.Trail,exports.useTrail=S.useTrail,exports.Sampler=B.Sampler,exports.ComputedAttribute=b.ComputedAttribute,exports.Clone=P.Clone,exports.OrthographicCamera=M.OrthographicCamera,exports.PerspectiveCamera=T.PerspectiveCamera,exports.CubeCamera=g.CubeCamera,exports.DeviceOrientationControls=f.DeviceOrientationControls,exports.FlyControls=v.FlyControls,exports.MapControls=L.MapControls,exports.OrbitControls=k.OrbitControls,exports.TrackballControls=A.TrackballControls,exports.ArcballControls=E.ArcballControls,exports.TransformControls=D.TransformControls,exports.PointerLockControls=w.PointerLockControls,exports.FirstPersonControls=G.FirstPersonControls,exports.GizmoHelper=F.GizmoHelper,exports.useGizmoContext=F.useGizmoContext,exports.GizmoViewcube=z.GizmoViewcube,exports.GizmoViewport=O.GizmoViewport,exports.useCubeTexture=R.useCubeTexture,exports.useFBX=y.useFBX,exports.useGLTF=I.useGLTF,exports.useProgress=H.useProgress,exports.IsObject=V.IsObject,exports.useTexture=V.useTexture,exports.useKTX2=Q.useKTX2,exports.Stats=X.Stats,exports.useDepthBuffer=K.useDepthBuffer,exports.useAspect=W.useAspect,exports.useCamera=N.useCamera,exports.useDetectGPU=U.useDetectGPU,exports.useHelper=_.useHelper,exports.useBVH=J.useBVH,exports.useContextBridge=Y.useContextBridge,exports.useAnimations=Z.useAnimations,exports.useFBO=$.useFBO,exports.useIntersect=ee.useIntersect,exports.useBoxProjectedEnv=re.useBoxProjectedEnv,exports.BBAnchor=se.BBAnchor,exports.CurveModifier=oe.CurveModifier,exports.MeshDistortMaterial=te.MeshDistortMaterial,exports.MeshWobbleMaterial=ie.MeshWobbleMaterial,exports.MeshReflectorMaterial=ce.MeshReflectorMaterial,exports.PointMaterial=ue.PointMaterial,exports.PointMaterialImpl=ue.PointMaterialImpl,exports.shaderMaterial=ae.shaderMaterial,exports.softShadows=ne.softShadows,exports.Box=je.Box,exports.Circle=je.Circle,exports.Cone=je.Cone,exports.Cylinder=je.Cylinder,exports.Dodecahedron=je.Dodecahedron,exports.Extrude=je.Extrude,exports.Icosahedron=je.Icosahedron,exports.Lathe=je.Lathe,exports.Octahedron=je.Octahedron,exports.Plane=je.Plane,exports.Polyhedron=je.Polyhedron,exports.Ring=je.Ring,exports.Sphere=je.Sphere,exports.Tetrahedron=je.Tetrahedron,exports.Torus=je.Torus,exports.TorusKnot=je.TorusKnot,exports.Tube=je.Tube,exports.RoundedBox=pe.RoundedBox,exports.ScreenQuad=le.ScreenQuad,exports.Center=xe.Center,exports.Bounds=qe.Bounds,exports.useBounds=qe.useBounds,exports.CameraShake=de.CameraShake,exports.Float=Ce.Float,exports.Stage=me.Stage,exports.Backdrop=he.Backdrop,exports.Shadow=Se.Shadow,exports.ContactShadows=Be.ContactShadows,exports.Reflector=be.Reflector,exports.SpotLight=Pe.SpotLight,exports.Environment=Me.Environment,exports.EnvironmentCube=Me.EnvironmentCube,exports.EnvironmentMap=Me.EnvironmentMap,exports.EnvironmentPortal=Me.EnvironmentPortal,exports.useEnvironment=Me.useEnvironment,exports.Lightformer=Te.Lightformer,exports.Sky=ge.Sky,exports.calcPosFromAngles=ge.calcPosFromAngles,exports.Stars=fe.Stars,exports.Cloud=ve.Cloud,exports.Sparkles=Le.Sparkles,exports.useMatcapTexture=ke.useMatcapTexture,exports.useNormalTexture=Ae.useNormalTexture,exports.Point=Ee.Point,exports.Points=Ee.Points,exports.PointsBuffer=Ee.PointsBuffer,exports.Instance=De.Instance,exports.Instances=De.Instances,exports.Merged=De.Merged,exports.Segment=we.Segment,exports.SegmentObject=we.SegmentObject,exports.Segments=we.Segments,exports.Detailed=Ge.Detailed,exports.Preload=Fe.Preload,exports.BakeShadows=ze.BakeShadows,exports.meshBounds=Oe.meshBounds,exports.AdaptiveDpr=Re.AdaptiveDpr,exports.AdaptiveEvents=ye.AdaptiveEvents,exports.RenderTexture=Ie.RenderTexture,exports.Mask=He.Mask,exports.useMask=He.useMask;
package/web/index.js CHANGED
@@ -54,6 +54,7 @@ export { useAnimations } from '../core/useAnimations.js';
54
54
  export { useFBO } from '../core/useFBO.js';
55
55
  export { useIntersect } from '../core/useIntersect.js';
56
56
  export { useBoxProjectedEnv } from '../core/useBoxProjectedEnv.js';
57
+ export { BBAnchor } from '../core/BBAnchor.js';
57
58
  export { CurveModifier } from '../core/CurveModifier.js';
58
59
  export { MeshDistortMaterial } from '../core/MeshDistortMaterial.js';
59
60
  export { MeshWobbleMaterial } from '../core/MeshWobbleMaterial.js';