@react-three/drei 8.18.9 → 9.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/README.md +61 -254
  2. package/core/ArcballControls.cjs.js +1 -1
  3. package/core/ArcballControls.js +26 -17
  4. package/core/Billboard.d.ts +2 -2
  5. package/core/Bounds.cjs.js +1 -1
  6. package/core/Bounds.d.ts +1 -2
  7. package/core/Bounds.js +15 -26
  8. package/core/Center.d.ts +1 -1
  9. package/core/ContactShadows.cjs.js +1 -1
  10. package/core/ContactShadows.d.ts +1 -1
  11. package/core/ContactShadows.js +1 -2
  12. package/core/CubeCamera.cjs.js +1 -1
  13. package/core/CubeCamera.js +7 -7
  14. package/core/Detailed.d.ts +2 -2
  15. package/core/DeviceOrientationControls.cjs.js +1 -1
  16. package/core/DeviceOrientationControls.d.ts +1 -1
  17. package/core/DeviceOrientationControls.js +6 -2
  18. package/core/Effects.cjs.js +1 -1
  19. package/core/Effects.d.ts +2 -2
  20. package/core/Effects.js +2 -2
  21. package/core/Environment.cjs.js +1 -1
  22. package/core/Environment.d.ts +3 -13
  23. package/core/Environment.js +30 -95
  24. package/core/FirstPersonControls.cjs.js +1 -1
  25. package/core/FirstPersonControls.d.ts +1 -1
  26. package/core/FirstPersonControls.js +6 -2
  27. package/core/Float.cjs.js +1 -1
  28. package/core/Float.d.ts +1 -1
  29. package/core/Float.js +4 -5
  30. package/core/FlyControls.d.ts +1 -1
  31. package/core/GizmoHelper.cjs.js +1 -1
  32. package/core/GizmoHelper.d.ts +1 -2
  33. package/core/GizmoHelper.js +41 -31
  34. package/core/GizmoViewcube.cjs.js +1 -1
  35. package/core/GizmoViewcube.d.ts +2 -2
  36. package/core/GizmoViewcube.js +1 -1
  37. package/core/GizmoViewport.d.ts +2 -2
  38. package/core/Image.cjs.js +1 -1
  39. package/core/Image.d.ts +2 -4
  40. package/core/Image.js +1 -6
  41. package/core/Instances.cjs.js +1 -1
  42. package/core/Instances.d.ts +3 -3
  43. package/core/Instances.js +11 -5
  44. package/core/Line.d.ts +1 -1
  45. package/core/MapControls.d.ts +1 -1
  46. package/core/MeshDistortMaterial.d.ts +2 -4
  47. package/core/MeshReflectorMaterial.cjs.js +1 -1
  48. package/core/MeshReflectorMaterial.d.ts +2 -1
  49. package/core/MeshReflectorMaterial.js +3 -1
  50. package/core/MeshWobbleMaterial.d.ts +2 -4
  51. package/core/OrbitControls.cjs.js +1 -1
  52. package/core/OrbitControls.js +32 -22
  53. package/core/OrthographicCamera.d.ts +2 -2
  54. package/core/PerspectiveCamera.d.ts +2 -2
  55. package/core/PointMaterial.cjs.js +1 -1
  56. package/core/PointMaterial.d.ts +7 -3
  57. package/core/PointMaterial.js +32 -14
  58. package/core/PointerLockControls.cjs.js +1 -1
  59. package/core/PointerLockControls.d.ts +1 -2
  60. package/core/PointerLockControls.js +22 -35
  61. package/core/Points.cjs.js +1 -1
  62. package/core/Points.d.ts +3 -3
  63. package/core/Points.js +36 -17
  64. package/core/PositionalAudio.d.ts +2 -2
  65. package/core/Reflector.d.ts +1 -1
  66. package/core/RoundedBox.d.ts +1 -1
  67. package/core/ScreenQuad.d.ts +1 -1
  68. package/core/Segments.d.ts +1 -1
  69. package/core/Shadow.d.ts +2 -2
  70. package/core/SpotLight.d.ts +20 -4
  71. package/core/Stage.cjs.js +1 -1
  72. package/core/Stage.js +2 -1
  73. package/core/Stars.cjs.js +1 -1
  74. package/core/Stars.js +3 -6
  75. package/core/Text.cjs.js +1 -1
  76. package/core/Text.d.ts +2 -3
  77. package/core/Text.js +2 -3
  78. package/core/TrackballControls.cjs.js +1 -1
  79. package/core/TrackballControls.d.ts +1 -1
  80. package/core/TrackballControls.js +6 -11
  81. package/core/TransformControls.cjs.js +1 -1
  82. package/core/TransformControls.d.ts +1 -1
  83. package/core/TransformControls.js +12 -4
  84. package/core/index.cjs.js +1 -1
  85. package/core/index.d.ts +0 -4
  86. package/core/index.js +2 -7
  87. package/core/shapes.d.ts +17 -17
  88. package/core/useFBX.d.ts +1 -1
  89. package/core/useFBX.js +1 -2
  90. package/core/useGLTF.d.ts +1 -1
  91. package/core/useGLTF.js +1 -2
  92. package/core/useHelper.d.ts +1 -3
  93. package/core/useKTX2.d.ts +1 -1
  94. package/core/useKTX2.js +1 -2
  95. package/core/useTexture.d.ts +1 -1
  96. package/core/useTexture.js +1 -2
  97. package/index.cjs.js +1 -1
  98. package/index.js +1 -5
  99. package/materials/ConvolutionMaterial.cjs.js +1 -1
  100. package/materials/ConvolutionMaterial.js +0 -2
  101. package/materials/MeshReflectorMaterial.cjs.js +1 -1
  102. package/materials/MeshReflectorMaterial.d.ts +3 -0
  103. package/materials/MeshReflectorMaterial.js +27 -1
  104. package/materials/SpotLightMaterial.cjs.js +1 -1
  105. package/materials/SpotLightMaterial.js +0 -3
  106. package/native/index.cjs.js +1 -1
  107. package/native/index.js +2 -7
  108. package/package.json +6 -7
  109. package/web/Html.cjs.js +1 -1
  110. package/web/Html.js +6 -4
  111. package/web/Select.js +0 -1
  112. package/web/index.cjs.js +1 -1
  113. package/web/index.js +2 -7
  114. package/core/Clone.cjs.js +0 -1
  115. package/core/Clone.d.ts +0 -11
  116. package/core/Clone.js +0 -89
  117. package/core/Lightformer.cjs.js +0 -1
  118. package/core/Lightformer.d.ts +0 -41
  119. package/core/Lightformer.js +0 -51
  120. package/core/Trail.cjs.js +0 -1
  121. package/core/Trail.d.ts +0 -20
  122. package/core/Trail.js +0 -160
  123. package/core/useBoxProjectedEnv.cjs.js +0 -1
  124. package/core/useBoxProjectedEnv.d.ts +0 -8
  125. package/core/useBoxProjectedEnv.js +0 -98
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var a=o(e),c=s(r);const u=r.forwardRef((({camera:e,makeDefault:o,regress:s,domElement:u,onChange:i,onStart:l,onEnd:f,...d},b)=>{const m=t.useThree((e=>e.invalidate)),v=t.useThree((e=>e.camera)),h=t.useThree((e=>e.gl)),E=t.useThree((e=>e.events)),p=t.useThree((e=>e.set)),g=t.useThree((e=>e.get)),j=t.useThree((e=>e.performance)),O=e||v,T=u||("boolean"!=typeof E.connected?E.connected:h.domElement),y=r.useMemo((()=>new n.ArcballControls(O)),[O]);return t.useFrame((()=>{y.enabled&&y.update()})),r.useEffect((()=>(y.connect(T),()=>{y.dispose()})),[T,s,y,m]),r.useEffect((()=>{const e=e=>{m(),s&&j.regress(),i&&i(e)};return y.addEventListener("change",e),l&&y.addEventListener("start",l),f&&y.addEventListener("end",f),()=>{y.removeEventListener("change",e),l&&y.removeEventListener("start",l),f&&y.removeEventListener("end",f)}}),[i,l,f]),r.useEffect((()=>{if(o){const e=g().controls;return p({controls:y}),()=>p({controls:e})}}),[o,y]),c.createElement("primitive",a.default({ref:b,object:y},d))}));exports.ArcballControls=u;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("@react-three/fiber"),t=require("react"),n=require("three-stdlib");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(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 a=o(e),c=s(t);const u=t.forwardRef((({camera:e,makeDefault:o,regress:s,domElement:u,onChange:i,onStart:l,onEnd:d,...f},b)=>{const m=r.useThree((({invalidate:e})=>e)),v=r.useThree((({camera:e})=>e)),h=r.useThree((({gl:e})=>e)),p=r.useThree((({events:e})=>e)),E=r.useThree((({set:e})=>e)),g=r.useThree((({get:e})=>e)),j=r.useThree((({performance:e})=>e)),O=e||v,T=u||("boolean"!=typeof p.connected?p.connected:h.domElement),y=t.useMemo((()=>new n.ArcballControls(O)),[O]);return r.useFrame((()=>{y.enabled&&y.update()})),t.useEffect((()=>{const e=e=>{m(),s&&j.regress(),i&&i(e)};return y.connect(T),y.addEventListener("change",e),l&&y.addEventListener("start",l),d&&y.addEventListener("end",d),()=>{y.removeEventListener("change",e),l&&y.removeEventListener("start",l),d&&y.removeEventListener("end",d),y.dispose()}}),[T,i,l,d,s,y,m]),t.useEffect((()=>{if(o){const e=g().controls;return E({controls:y}),()=>E({controls:e})}}),[o,y]),c.createElement("primitive",a.default({ref:b,object:y},f))}));exports.ArcballControls=u;
@@ -14,23 +14,33 @@ const ArcballControls = /*#__PURE__*/forwardRef(({
14
14
  onEnd,
15
15
  ...restProps
16
16
  }, ref) => {
17
- const invalidate = useThree(state => state.invalidate);
18
- const defaultCamera = useThree(state => state.camera);
19
- const gl = useThree(state => state.gl);
20
- const events = useThree(state => state.events);
21
- const set = useThree(state => state.set);
22
- const get = useThree(state => state.get);
23
- const performance = useThree(state => state.performance);
17
+ const invalidate = useThree(({
18
+ invalidate
19
+ }) => invalidate);
20
+ const defaultCamera = useThree(({
21
+ camera
22
+ }) => camera);
23
+ const gl = useThree(({
24
+ gl
25
+ }) => gl);
26
+ const events = useThree(({
27
+ events
28
+ }) => events);
29
+ const set = useThree(({
30
+ set
31
+ }) => set);
32
+ const get = useThree(({
33
+ get
34
+ }) => get);
35
+ const performance = useThree(({
36
+ performance
37
+ }) => performance);
24
38
  const explCamera = camera || defaultCamera;
25
39
  const explDomElement = domElement || (typeof events.connected !== 'boolean' ? events.connected : gl.domElement);
26
40
  const controls = useMemo(() => new ArcballControls$1(explCamera), [explCamera]);
27
41
  useFrame(() => {
28
42
  if (controls.enabled) controls.update();
29
43
  });
30
- useEffect(() => {
31
- controls.connect(explDomElement);
32
- return () => void controls.dispose();
33
- }, [explDomElement, regress, controls, invalidate]);
34
44
  useEffect(() => {
35
45
  const callback = e => {
36
46
  invalidate();
@@ -38,6 +48,7 @@ const ArcballControls = /*#__PURE__*/forwardRef(({
38
48
  if (onChange) onChange(e);
39
49
  };
40
50
 
51
+ controls.connect(explDomElement);
41
52
  controls.addEventListener('change', callback);
42
53
  if (onStart) controls.addEventListener('start', onStart);
43
54
  if (onEnd) controls.addEventListener('end', onEnd);
@@ -45,17 +56,15 @@ const ArcballControls = /*#__PURE__*/forwardRef(({
45
56
  controls.removeEventListener('change', callback);
46
57
  if (onStart) controls.removeEventListener('start', onStart);
47
58
  if (onEnd) controls.removeEventListener('end', onEnd);
59
+ controls.dispose();
48
60
  };
49
- }, [onChange, onStart, onEnd]);
61
+ }, [explDomElement, onChange, onStart, onEnd, regress, controls, invalidate]);
50
62
  useEffect(() => {
51
63
  if (makeDefault) {
52
- // @ts-expect-error new in @react-three/fiber@7.0.5
53
- const old = get().controls; // @ts-expect-error new in @react-three/fiber@7.0.5
54
-
64
+ const old = get().controls;
55
65
  set({
56
66
  controls
57
- }); // @ts-expect-error new in @react-three/fiber@7.0.5
58
-
67
+ });
59
68
  return () => set({
60
69
  controls: old
61
70
  });
@@ -1,9 +1,9 @@
1
1
  import * as React from 'react';
2
- import { Mesh } from 'three';
2
+ import { Group } from 'three';
3
3
  export declare type BillboardProps = {
4
4
  follow?: boolean;
5
5
  lockX?: boolean;
6
6
  lockY?: boolean;
7
7
  lockZ?: boolean;
8
8
  } & JSX.IntrinsicElements['group'];
9
- export declare const Billboard: React.ForwardRefExoticComponent<Pick<BillboardProps, "visible" | "attach" | "attachArray" | "attachObject" | "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 | "follow" | "lockX" | "lockY" | "lockZ"> & React.RefAttributes<Mesh<import("three").BufferGeometry, import("three").Material | import("three").Material[]>>>;
9
+ export declare const Billboard: React.ForwardRefExoticComponent<Pick<BillboardProps, "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 | "follow" | "lockX" | "lockY" | "lockZ"> & React.RefAttributes<Group>>;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("three"),r=require("@react-three/fiber");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 o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var a=o(e),n=o(t);const c=e=>e&&e.isOrthographicCamera,i=a.createContext(null);exports.Bounds=function({children:e,damping:t=6,fit:o,clip:s,observe:u,margin:m=1.2,eps:f=.01,onFit:l}){const p=a.useRef(null),{camera:x,invalidate:z,size:d,controls:y}=r.useThree(),h=a.useRef(l);function M(e,t){return Math.abs(e.x-t.x)<f&&Math.abs(e.y-t.y)<f&&Math.abs(e.z-t.z)<f}function g(e,t,r,o){e.x=n.MathUtils.damp(e.x,t.x,r,o),e.y=n.MathUtils.damp(e.y,t.y,r,o),e.z=n.MathUtils.damp(e.z,t.z,r,o)}h.current=l;const[b]=a.useState((()=>({animating:!1,focus:new n.Vector3,camera:new n.Vector3,zoom:1}))),[w]=a.useState((()=>({focus:new n.Vector3,camera:new n.Vector3,zoom:1}))),[v]=a.useState((()=>new n.Box3)),V=a.useMemo((()=>{function e(){const e=v.getSize(new n.Vector3),t=v.getCenter(new n.Vector3),r=Math.max(e.x,e.y,e.z),o=c(x)?4*r:r/(2*Math.atan(Math.PI*x.fov/360)),a=c(x)?4*r:o/x.aspect,i=m*Math.max(o,a);return{box:v,size:e,center:t,distance:i}}return{getSize:e,refresh(t){if((r=t)&&r.isBox3)v.copy(t);else{const e=t||p.current;e.updateWorldMatrix(!0,!0),v.setFromObject(e)}var r;if(v.isEmpty()){const e=x.position.length()||10;v.setFromCenterAndSize(new n.Vector3,new n.Vector3(e,e,e))}if("OrthographicTrackballControls"===(null==y?void 0:y.constructor.name)){const{distance:t}=e(),r=x.position.clone().sub(y.target).normalize().multiplyScalar(t),o=y.target.clone().add(r);x.position.copy(o)}return this},clip(){const{distance:t}=e();return y&&(y.maxDistance=10*t),x.near=t/100,x.far=100*t,x.updateProjectionMatrix(),y&&y.update(),z(),this},fit(){b.camera.copy(x.position),y&&b.focus.copy(y.target);const{center:r,distance:o}=e(),a=r.clone().sub(x.position).normalize().multiplyScalar(o);if(w.camera.copy(r).sub(a),w.focus.copy(r),c(x)){b.zoom=x.zoom;let e=0,o=0;const a=[new n.Vector3(v.min.x,v.min.y,v.min.z),new n.Vector3(v.min.x,v.max.y,v.min.z),new n.Vector3(v.min.x,v.min.y,v.max.z),new n.Vector3(v.min.x,v.max.y,v.max.z),new n.Vector3(v.max.x,v.max.y,v.max.z),new n.Vector3(v.max.x,v.max.y,v.min.z),new n.Vector3(v.max.x,v.min.y,v.max.z),new n.Vector3(v.max.x,v.min.y,v.min.z)];r.applyMatrix4(x.matrixWorldInverse);for(const t of a)t.applyMatrix4(x.matrixWorldInverse),e=Math.max(e,Math.abs(t.y-r.y)),o=Math.max(o,Math.abs(t.x-r.x));e*=2,o*=2;const c=(x.top-x.bottom)/e,i=(x.right-x.left)/o;w.zoom=Math.min(c,i)/m,t||(x.zoom=w.zoom,x.updateProjectionMatrix())}return t?b.animating=!0:(x.position.copy(w.camera),x.lookAt(w.focus),y&&(y.target.copy(w.focus),y.update())),h.current&&h.current(this.getSize()),z(),this}}}),[v,x,y,m,t,z]);a.useLayoutEffect((()=>{if(y){const e=()=>b.animating=!1;return y.addEventListener("start",e),()=>y.removeEventListener("start",e)}}),[y]);const j=a.useRef(0);return a.useEffect((()=>{(u||0==j.current++)&&(V.refresh(),o&&V.fit(),s&&V.clip())}),[d,s,o,u]),r.useFrame(((e,r)=>{if(b.animating){if(g(b.focus,w.focus,t,r),g(b.camera,w.camera,t,r),b.zoom=n.MathUtils.damp(b.zoom,w.zoom,t,r),x.position.copy(b.camera),c(x)&&(x.zoom=b.zoom,x.updateProjectionMatrix()),y?(y.target.copy(b.focus),y.update()):x.lookAt(b.focus),z(),c(x)&&!(Math.abs(b.zoom-w.zoom)<f))return;if(!c(x)&&!M(b.camera,w.camera))return;if(y&&!M(b.focus,w.focus))return;b.animating=!1}})),a.createElement("group",{ref:p},a.createElement(i.Provider,{value:V},e))},exports.useBounds=function(){return a.useContext(i)};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("three"),r=require("@react-three/fiber");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 o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var a=o(e),n=o(t);const c=e=>e&&e.isOrthographicCamera,i=a.createContext(null);exports.Bounds=function({children:e,damping:t=6,fit:o,clip:s,margin:m=1.2,eps:u=.01,onFit:f}){const p=a.useRef(null),l=r.useThree((e=>e.camera)),x=r.useThree((e=>e.controls)),h=r.useThree((e=>e.invalidate)),y=a.useRef(f);function z(e,t){return Math.abs(e.x-t.x)<u&&Math.abs(e.y-t.y)<u&&Math.abs(e.z-t.z)<u}function d(e,t,r,o){e.x=n.MathUtils.damp(e.x,t.x,r,o),e.y=n.MathUtils.damp(e.y,t.y,r,o),e.z=n.MathUtils.damp(e.z,t.z,r,o)}y.current=f;const[M]=a.useState((()=>({animating:!1,focus:new n.Vector3,camera:new n.Vector3,zoom:1}))),[g]=a.useState((()=>({focus:new n.Vector3,camera:new n.Vector3,zoom:1}))),[b]=a.useState((()=>new n.Box3)),w=a.useMemo((()=>{function e(){const e=b.getSize(new n.Vector3),t=b.getCenter(new n.Vector3),r=Math.max(e.x,e.y,e.z),o=c(l)?4*r:r/(2*Math.atan(Math.PI*l.fov/360)),a=c(l)?4*r:o/l.aspect,i=m*Math.max(o,a);return{box:b,size:e,center:t,distance:i}}return{getSize:e,refresh(t){var r;if((r=t)&&r.isObject3D?b.setFromObject(t):(e=>e&&e.isBox3)(t)?b.copy(t):p.current&&b.setFromObject(p.current),b.isEmpty()){const e=l.position.length()||10;b.setFromCenterAndSize(new n.Vector3,new n.Vector3(e,e,e))}if("OrthographicTrackballControls"===(null==x?void 0:x.constructor.name)){const{distance:t}=e(),r=l.position.clone().sub(x.target).normalize().multiplyScalar(t),o=x.target.clone().add(r);l.position.copy(o)}return this},clip(){const{distance:t}=e();return x&&(x.maxDistance=10*t),l.near=t/100,l.far=100*t,l.updateProjectionMatrix(),x&&x.update(),this},fit(){M.camera.copy(l.position),x&&M.focus.copy(x.target);const{center:r,distance:o}=e(),a=r.clone().sub(l.position).normalize().multiplyScalar(o);if(g.camera.copy(r).sub(a),g.focus.copy(r),c(l)){M.zoom=l.zoom;let e=0,o=0;const a=[new n.Vector3(b.min.x,b.min.y,b.min.z),new n.Vector3(b.min.x,b.max.y,b.min.z),new n.Vector3(b.min.x,b.min.y,b.max.z),new n.Vector3(b.min.x,b.max.y,b.max.z),new n.Vector3(b.max.x,b.max.y,b.max.z),new n.Vector3(b.max.x,b.max.y,b.min.z),new n.Vector3(b.max.x,b.min.y,b.max.z),new n.Vector3(b.max.x,b.min.y,b.min.z)];r.applyMatrix4(l.matrixWorldInverse);for(const t of a)t.applyMatrix4(l.matrixWorldInverse),e=Math.max(e,Math.abs(t.y-r.y)),o=Math.max(o,Math.abs(t.x-r.x));e*=2,o*=2;const c=(l.top-l.bottom)/e,i=(l.right-l.left)/o;g.zoom=Math.min(c,i)/m,t||(l.zoom=g.zoom,l.updateProjectionMatrix())}return t?M.animating=!0:(l.position.copy(g.camera),l.lookAt(g.focus),x&&(x.target.copy(g.focus),x.update()),h()),y.current&&y.current(this.getSize()),this}}}),[b,l,x,m,t,h]);return a.useLayoutEffect((()=>{if(w.refresh(),o&&w.fit(),s&&w.clip(),x){const e=()=>M.animating=!1;return x.addEventListener("start",e),()=>x.removeEventListener("start",e)}}),[s,o,x]),r.useFrame(((e,r)=>{if(M.animating){if(d(M.focus,g.focus,t,r),d(M.camera,g.camera,t,r),M.zoom=n.MathUtils.damp(M.zoom,g.zoom,t,r),l.position.copy(M.camera),c(l)&&(l.zoom=M.zoom,l.updateProjectionMatrix()),x?(x.target.copy(M.focus),x.update()):l.lookAt(M.focus),h(),c(l)&&!(Math.abs(M.zoom-g.zoom)<u))return;if(!c(l)&&!z(M.camera,g.camera))return;if(x&&!z(M.focus,g.focus))return;M.animating=!1}})),a.createElement("group",{ref:p},a.createElement(i.Provider,{value:w},e))},exports.useBounds=function(){return a.useContext(i)};
package/core/Bounds.d.ts CHANGED
@@ -16,10 +16,9 @@ export declare type BoundsProps = JSX.IntrinsicElements['group'] & {
16
16
  damping?: number;
17
17
  fit?: boolean;
18
18
  clip?: boolean;
19
- observe?: boolean;
20
19
  margin?: number;
21
20
  eps?: number;
22
21
  onFit?: (data: SizeProps) => void;
23
22
  };
24
- export declare function Bounds({ children, damping, fit, clip, observe, margin, eps, onFit }: BoundsProps): JSX.Element;
23
+ export declare function Bounds({ children, damping, fit, clip, margin, eps, onFit }: BoundsProps): JSX.Element;
25
24
  export declare function useBounds(): BoundsApi;
package/core/Bounds.js CHANGED
@@ -4,6 +4,8 @@ import { useThree, useFrame } from '@react-three/fiber';
4
4
 
5
5
  const isOrthographic = def => def && def.isOrthographicCamera;
6
6
 
7
+ const isObject3D = def => def && def.isObject3D;
8
+
7
9
  const isBox3 = def => def && def.isBox3;
8
10
 
9
11
  const context = /*#__PURE__*/React.createContext(null);
@@ -12,19 +14,15 @@ function Bounds({
12
14
  damping = 6,
13
15
  fit,
14
16
  clip,
15
- observe,
16
17
  margin = 1.2,
17
18
  eps = 0.01,
18
19
  onFit
19
20
  }) {
20
- const ref = React.useRef(null); // @ts-expect-error new in @react-three/fiber@7.0.5
21
-
22
- const {
23
- camera,
24
- invalidate,
25
- size,
26
- controls
27
- } = useThree();
21
+ const ref = React.useRef(null);
22
+ const camera = useThree(state => state.camera); // @ts-expect-error new in @react-three/fiber@7.0.5
23
+
24
+ const controls = useThree(state => state.controls);
25
+ const invalidate = useThree(state => state.invalidate);
28
26
  const onFitRef = React.useRef(onFit);
29
27
  onFitRef.current = onFit;
30
28
 
@@ -70,11 +68,7 @@ function Bounds({
70
68
  getSize,
71
69
 
72
70
  refresh(object) {
73
- if (isBox3(object)) box.copy(object);else {
74
- const target = object || ref.current;
75
- target.updateWorldMatrix(true, true);
76
- box.setFromObject(target);
77
- }
71
+ if (isObject3D(object)) box.setFromObject(object);else if (isBox3(object)) box.copy(object);else if (ref.current) box.setFromObject(ref.current);
78
72
 
79
73
  if (box.isEmpty()) {
80
74
  const max = camera.position.length() || 10;
@@ -103,7 +97,6 @@ function Bounds({
103
97
  camera.far = distance * 100;
104
98
  camera.updateProjectionMatrix();
105
99
  if (controls) controls.update();
106
- invalidate();
107
100
  return this;
108
101
  },
109
102
 
@@ -154,16 +147,21 @@ function Bounds({
154
147
  controls.target.copy(goal.focus);
155
148
  controls.update();
156
149
  }
150
+
151
+ invalidate();
157
152
  }
158
153
 
159
154
  if (onFitRef.current) onFitRef.current(this.getSize());
160
- invalidate();
161
155
  return this;
162
156
  }
163
157
 
164
158
  };
165
159
  }, [box, camera, controls, margin, damping, invalidate]);
166
160
  React.useLayoutEffect(() => {
161
+ api.refresh();
162
+ if (fit) api.fit();
163
+ if (clip) api.clip();
164
+
167
165
  if (controls) {
168
166
  // Try to prevent drag hijacking
169
167
  const callback = () => current.animating = false;
@@ -171,16 +169,7 @@ function Bounds({
171
169
  controls.addEventListener('start', callback);
172
170
  return () => controls.removeEventListener('start', callback);
173
171
  }
174
- }, [controls]); // Scale pointer on window resize
175
-
176
- const count = React.useRef(0);
177
- React.useEffect(() => {
178
- if (observe || count.current++ === 0) {
179
- api.refresh();
180
- if (fit) api.fit();
181
- if (clip) api.clip();
182
- }
183
- }, [size, clip, fit, observe]);
172
+ }, [clip, fit, controls]);
184
173
  useFrame((state, delta) => {
185
174
  if (current.animating) {
186
175
  damp(current.focus, goal.focus, damping, delta);
package/core/Center.d.ts CHANGED
@@ -3,5 +3,5 @@ import * as React from 'react';
3
3
  declare type Props = JSX.IntrinsicElements['group'] & {
4
4
  alignTop?: boolean;
5
5
  };
6
- export declare const Center: React.ForwardRefExoticComponent<Pick<Props, "visible" | "attach" | "attachArray" | "attachObject" | "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 | "alignTop"> & React.RefAttributes<Group>>;
6
+ export declare const Center: React.ForwardRefExoticComponent<Pick<Props, "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 | "alignTop"> & React.RefAttributes<Group>>;
7
7
  export {};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("three"),a=require("@react-three/fiber"),n=require("three-stdlib");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var a=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,a.get?a:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var i=u(e),s=o(r),l=o(t);const c=s.forwardRef((({scale:e,frames:r=1/0,opacity:t=1,width:u=1,height:o=1,blur:c=1,far:d=10,resolution:f=256,smooth:h=!0,...m},p)=>{const g=a.useThree((({scene:e})=>e)),b=a.useThree((({gl:e})=>e)),M=s.useRef(null);u*=Array.isArray(e)?e[0]:e||1,o*=Array.isArray(e)?e[1]:e||1;const[v,y,w,T,x,R,j]=s.useMemo((()=>{const e=new l.WebGLRenderTarget(f,f),r=new l.WebGLRenderTarget(f,f);r.texture.generateMipmaps=e.texture.generateMipmaps=!1;const t=new l.PlaneBufferGeometry(u,o).rotateX(Math.PI/2),a=new l.Mesh(t),i=new l.MeshDepthMaterial;i.depthTest=i.depthWrite=!1,i.onBeforeCompile=e=>e.fragmentShader=e.fragmentShader.replace("1.0 - fragCoordZ ), opacity );","0.0 ), ( 1.0 - fragCoordZ ) * 1.0 );");const s=new l.ShaderMaterial(n.HorizontalBlurShader),c=new l.ShaderMaterial(n.VerticalBlurShader);return c.depthTest=s.depthTest=!1,[e,t,i,a,s,c,r]}),[f,u,o,e]),O=s.useCallback((e=>{T.visible=!0,T.material=x,x.uniforms.tDiffuse.value=v.texture,x.uniforms.h.value=1*e/256,b.setRenderTarget(j),b.render(T,M.current),T.material=R,R.uniforms.tDiffuse.value=j.texture,R.uniforms.v.value=1*e/256,b.setRenderTarget(v),b.render(T,M.current),T.visible=!1}),[]);let P=0;return a.useFrame((()=>{if(M.current&&(r===1/0||P<r)){const e=g.background;g.background=null;const r=g.overrideMaterial;g.overrideMaterial=w,b.setRenderTarget(v),b.render(g,M.current),g.overrideMaterial=r,O(c),h&&O(.4*c),b.setRenderTarget(null),g.background=e,P++}})),s.createElement("group",i.default({"rotation-x":Math.PI/2},m,{ref:p}),s.createElement("mesh",{geometry:y,scale:[1,-1,1],rotation:[-Math.PI/2,0,0]},s.createElement("meshBasicMaterial",{map:v.texture,transparent:!0,opacity:t})),s.createElement("orthographicCamera",{ref:M,args:[-u/2,u/2,o/2,-o/2,0,d]}))}));exports.ContactShadows=c;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("three"),a=require("@react-three/fiber"),n=require("three-stdlib");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var a=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,a.get?a:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var i=u(e),s=o(r),l=o(t);const c=s.forwardRef((({scale:e,frames:r=1/0,opacity:t=1,width:u=1,height:o=1,blur:c=1,far:d=10,resolution:f=256,smooth:h=!0,...m},p)=>{const g=a.useThree((({scene:e})=>e)),b=a.useThree((({gl:e})=>e)),M=s.useRef(null);u*=Array.isArray(e)?e[0]:e||1,o*=Array.isArray(e)?e[1]:e||1;const[v,y,w,T,x,R,j]=s.useMemo((()=>{const e=new l.WebGLRenderTarget(f,f),r=new l.WebGLRenderTarget(f,f);r.texture.generateMipmaps=e.texture.generateMipmaps=!1;const t=new l.PlaneBufferGeometry(u,o).rotateX(Math.PI/2),a=new l.Mesh(t),i=new l.MeshDepthMaterial;i.depthTest=i.depthWrite=!1,i.onBeforeCompile=e=>e.fragmentShader=e.fragmentShader.replace("1.0 - fragCoordZ ), opacity );","0.0 ), ( 1.0 - fragCoordZ ) * 1.0 );");const s=new l.ShaderMaterial(n.HorizontalBlurShader),c=new l.ShaderMaterial(n.VerticalBlurShader);return c.depthTest=s.depthTest=!1,[e,t,i,a,s,c,r]}),[f,u,o,e]),O=s.useCallback((e=>{T.visible=!0,T.material=x,x.uniforms.tDiffuse.value=v.texture,x.uniforms.h.value=1*e/256,b.setRenderTarget(j),b.render(T,M.current),T.material=R,R.uniforms.tDiffuse.value=j.texture,R.uniforms.v.value=1*e/256,b.setRenderTarget(v),b.render(T,M.current),T.visible=!1}),[]);let P=0;return a.useFrame((()=>{if(M.current&&(r===1/0||P<r)){const e=g.background;g.background=null,g.overrideMaterial=w,b.setRenderTarget(v),b.render(g,M.current),g.overrideMaterial=null,O(c),h&&O(.4*c),b.setRenderTarget(null),g.background=e,P++}})),s.createElement("group",i.default({"rotation-x":Math.PI/2},m,{ref:p}),s.createElement("mesh",{geometry:y,scale:[1,-1,1],rotation:[-Math.PI/2,0,0]},s.createElement("meshBasicMaterial",{map:v.texture,transparent:!0,opacity:t})),s.createElement("orthographicCamera",{ref:M,args:[-u/2,u/2,o/2,-o/2,0,d]}))}));exports.ContactShadows=c;
@@ -9,4 +9,4 @@ export declare const ContactShadows: React.ForwardRefExoticComponent<Pick<Omit<i
9
9
  resolution?: number | undefined;
10
10
  frames?: number | undefined;
11
11
  scale?: number | [x: number, y: number] | undefined;
12
- }, "visible" | "attach" | "attachArray" | "attachObject" | "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 | "smooth" | "blur" | "height" | "opacity" | "width" | "resolution" | "far" | "frames"> & React.RefAttributes<unknown>>;
12
+ }, "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 | "smooth" | "blur" | "height" | "opacity" | "width" | "resolution" | "far" | "frames"> & React.RefAttributes<unknown>>;
@@ -60,11 +60,10 @@ const ContactShadows = /*#__PURE__*/React.forwardRef(({
60
60
  if (shadowCamera.current && (frames === Infinity || count < frames)) {
61
61
  const initialBackground = scene.background;
62
62
  scene.background = null;
63
- const initialOverrideMaterial = scene.overrideMaterial;
64
63
  scene.overrideMaterial = depthMaterial;
65
64
  gl.setRenderTarget(renderTarget);
66
65
  gl.render(scene, shadowCamera.current);
67
- scene.overrideMaterial = initialOverrideMaterial;
66
+ scene.overrideMaterial = null;
68
67
  blurShadows(blur);
69
68
  if (smooth) blurShadows(blur * 0.4);
70
69
  gl.setRenderTarget(null);
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three"),r=require("react"),t=require("@react-three/fiber");function u(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var u=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,u.get?u:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var n=u(r);exports.CubeCamera=function({children:r,fog:u,frames:a=1/0,resolution:c=256,near:o=1,far:s=1e3,...f}){const i=n.useRef(),[l,b]=n.useState(),g=t.useThree((({scene:e})=>e)),p=t.useThree((({gl:e})=>e)),d=n.useMemo((()=>{const r=new e.WebGLCubeRenderTarget(c);return r.texture.type=e.HalfFloatType,r}),[c]);let m=0;return t.useFrame((()=>{if(l&&i.current&&(a===1/0||m<a)){i.current.traverse((e=>e.visible=!1));const e=g.fog;g.fog=u||e,l.update(p,g),g.fog=e,i.current.traverse((e=>e.visible=!0)),m++}})),n.createElement("group",f,n.createElement("cubeCamera",{ref:b,args:[o,s,d]}),n.createElement("group",{ref:i},r(d.texture)))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three"),r=require("react"),t=require("@react-three/fiber");function n(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 u=n(r);exports.CubeCamera=function({children:r,fog:n,frames:a=1/0,resolution:i=256,near:c=1,far:o=1e3,...s}){const f=u.useRef(),[l,g]=u.useState(null),b=t.useThree((({scene:e})=>e)),d=t.useThree((({gl:e})=>e)),m=u.useMemo((()=>new e.WebGLCubeRenderTarget(i,{minFilter:e.LinearFilter,magFilter:e.LinearFilter,encoding:d.outputEncoding})),[i]);let p=0;return t.useFrame((()=>{if(l&&f.current&&(a===1/0||p<a)){f.current.traverse((e=>e.visible=!1));const e=b.fog;b.fog=n||e,l.update(d,b),b.fog=e,f.current.traverse((e=>e.visible=!0)),p++}})),u.createElement("group",s,u.createElement("cubeCamera",{ref:g,args:[c,o,m]}),u.createElement("group",{ref:f},r(m.texture)))};
@@ -1,4 +1,4 @@
1
- import { WebGLCubeRenderTarget, HalfFloatType } from 'three';
1
+ import { WebGLCubeRenderTarget, LinearFilter } from 'three';
2
2
  import * as React from 'react';
3
3
  import { useThree, useFrame } from '@react-three/fiber';
4
4
 
@@ -12,18 +12,18 @@ function CubeCamera({
12
12
  ...props
13
13
  }) {
14
14
  const ref = React.useRef();
15
- const [camera, setCamera] = React.useState();
15
+ const [camera, setCamera] = React.useState(null);
16
16
  const scene = useThree(({
17
17
  scene
18
18
  }) => scene);
19
19
  const gl = useThree(({
20
20
  gl
21
21
  }) => gl);
22
- const fbo = React.useMemo(() => {
23
- const fbo = new WebGLCubeRenderTarget(resolution);
24
- fbo.texture.type = HalfFloatType;
25
- return fbo;
26
- }, [resolution]);
22
+ const fbo = React.useMemo(() => new WebGLCubeRenderTarget(resolution, {
23
+ minFilter: LinearFilter,
24
+ magFilter: LinearFilter,
25
+ encoding: gl.outputEncoding
26
+ }), [resolution]);
27
27
  let count = 0;
28
28
  useFrame(() => {
29
29
  if (camera && ref.current && (frames === Infinity || count < frames)) {
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { LOD, Object3D } from 'three';
3
- export declare const Detailed: React.ForwardRefExoticComponent<Pick<Omit<import("@react-three/fiber").Node<LOD, typeof LOD>, import("@react-three/fiber").NonFunctionKeys<{
3
+ export declare const Detailed: React.ForwardRefExoticComponent<Pick<Omit<import("@react-three/fiber").ExtendedColors<import("@react-three/fiber").Overwrite<Partial<LOD>, import("@react-three/fiber").NodeProps<LOD, typeof LOD>>>, import("@react-three/fiber").NonFunctionKeys<{
4
4
  position?: import("@react-three/fiber").Vector3 | undefined;
5
5
  up?: import("@react-three/fiber").Vector3 | undefined;
6
6
  scale?: import("@react-three/fiber").Vector3 | undefined;
@@ -21,4 +21,4 @@ export declare const Detailed: React.ForwardRefExoticComponent<Pick<Omit<import(
21
21
  } & import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers & {
22
22
  children: React.ReactElement<Object3D>[];
23
23
  distances: number[];
24
- }, "visible" | "attach" | "attachArray" | "attachObject" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "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 | "objects" | "update" | "autoUpdate" | "levels" | "isLOD" | "addLevel" | "getCurrentLevel" | "getObjectForDistance" | "distances"> & React.RefAttributes<unknown>>;
24
+ }, "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "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 | "objects" | "update" | "autoUpdate" | "levels" | "isLOD" | "addLevel" | "getCurrentLevel" | "getObjectForDistance" | "distances"> & React.RefAttributes<unknown>>;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var o=u(e),a=i(r);const l=a.forwardRef(((e,r)=>{const{camera:u,onChange:i,...l}=e,c=t.useThree((e=>e.camera)),s=t.useThree((e=>e.invalidate)),d=u||c,[f]=a.useState((()=>new n.DeviceOrientationControls(d)));return a.useEffect((()=>{const e=e=>{s(),i&&i(e)};return null==f||null==f.addEventListener||f.addEventListener("change",e),()=>null==f||null==f.removeEventListener?void 0:f.removeEventListener("change",e)}),[i,f,s]),t.useFrame((()=>null==f?void 0:f.update())),a.useEffect((()=>{const e=f;return null==e||e.connect(),()=>null==e?void 0:e.dispose()}),[f]),f?a.createElement("primitive",o.default({ref:r,dispose:void 0,object:f},l)):null}));exports.DeviceOrientationControls=l;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var o=u(e),a=i(r);const l=a.forwardRef(((e,r)=>{const{camera:u,onChange:i,...l}=e,c=t.useThree((({camera:e})=>e)),s=t.useThree((({invalidate:e})=>e)),d=u||c,[f]=a.useState((()=>new n.DeviceOrientationControls(d)));return a.useEffect((()=>{const e=e=>{s(),i&&i(e)};return null==f||null==f.addEventListener||f.addEventListener("change",e),()=>null==f||null==f.removeEventListener?void 0:f.removeEventListener("change",e)}),[i,f,s]),t.useFrame((()=>null==f?void 0:f.update())),a.useEffect((()=>{const e=f;return null==e||e.connect(),()=>null==e?void 0:e.dispose()}),[f]),f?a.createElement("primitive",o.default({ref:r,dispose:void 0,object:f},l)):null}));exports.DeviceOrientationControls=l;
@@ -6,4 +6,4 @@ export declare type DeviceOrientationControlsProps = ReactThreeFiber.Object3DNod
6
6
  camera?: THREE.Camera;
7
7
  onChange?: (e?: THREE.Event) => void;
8
8
  };
9
- export declare const DeviceOrientationControls: React.ForwardRefExoticComponent<Pick<DeviceOrientationControlsProps, "object" | "attach" | "attachArray" | "attachObject" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "onChange" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "camera" | "enabled" | "update" | "connect" | "disconnect" | "deviceOrientation" | "screenOrientation" | "alphaOffset"> & React.RefAttributes<DeviceOrientationControlsImp>>;
9
+ export declare const DeviceOrientationControls: React.ForwardRefExoticComponent<Pick<DeviceOrientationControlsProps, "object" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "onChange" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "camera" | "enabled" | "update" | "connect" | "disconnect" | "deviceOrientation" | "screenOrientation" | "alphaOffset"> & React.RefAttributes<DeviceOrientationControlsImp>>;
@@ -9,8 +9,12 @@ const DeviceOrientationControls = /*#__PURE__*/React.forwardRef((props, ref) =>
9
9
  onChange,
10
10
  ...rest
11
11
  } = props;
12
- const defaultCamera = useThree(state => state.camera);
13
- const invalidate = useThree(state => state.invalidate);
12
+ const defaultCamera = useThree(({
13
+ camera
14
+ }) => camera);
15
+ const invalidate = useThree(({
16
+ invalidate
17
+ }) => invalidate);
14
18
  const explCamera = camera || defaultCamera;
15
19
  const [controls] = React.useState(() => new DeviceOrientationControls$1(explCamera));
16
20
  React.useEffect(() => {
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("three"),a=require("@react-three/fiber"),s=require("three-stdlib"),n=require("react-merge-refs");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var a=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,a.get?a:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var i=u(e),o=c(r),l=u(n);a.extend({EffectComposer:s.EffectComposer,RenderPass:s.RenderPass,ShaderPass:s.ShaderPass});const d=()=>{try{var e=document.createElement("canvas");return!(!window.WebGL2RenderingContext||!e.getContext("webgl2"))}catch(e){return!1}},f=o.forwardRef((({children:e,multisamping:r=8,renderIndex:n=1,disableGamma:u=!1,disableRenderPass:c=!1,...f},h)=>{const m=o.useRef(),b=a.useThree((({scene:e})=>e)),g=a.useThree((({camera:e})=>e)),p=a.useThree((({gl:e})=>e)),P=a.useThree((({size:e})=>e)),[v]=o.useState((()=>{if(d()&&r>0){const e=new t.WebGLMultisampleRenderTarget(P.width,P.height,{format:t.RGBAFormat,encoding:t.sRGBEncoding});return e.samples=8,e}}));return o.useEffect((()=>{var e,r;null==(e=m.current)||e.setSize(P.width,P.height),null==(r=m.current)||r.setPixelRatio(p.getPixelRatio())}),[p,P]),a.useFrame((()=>{var e;return null==(e=m.current)?void 0:e.render()}),n),o.createElement("effectComposer",i.default({ref:l.default([h,m]),args:[p,v]},f),!c&&o.createElement("renderPass",{attachArray:"passes",args:[b,g]}),!u&&o.createElement("shaderPass",{attachArray:"passes",args:[s.GammaCorrectionShader]}),e)}));exports.Effects=f,exports.isWebGL2Available=d;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("three"),a=require("@react-three/fiber"),s=require("three-stdlib"),n=require("react-merge-refs");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var a=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,a.get?a:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var i=u(e),o=c(r),l=u(n);a.extend({EffectComposer:s.EffectComposer,RenderPass:s.RenderPass,ShaderPass:s.ShaderPass});const d=()=>{try{var e=document.createElement("canvas");return!(!window.WebGL2RenderingContext||!e.getContext("webgl2"))}catch(e){return!1}},f=o.forwardRef((({children:e,multisamping:r=8,renderIndex:n=1,disableGamma:u=!1,disableRenderPass:c=!1,...f},h)=>{const m=o.useRef(),b=a.useThree((({scene:e})=>e)),g=a.useThree((({camera:e})=>e)),p=a.useThree((({gl:e})=>e)),P=a.useThree((({size:e})=>e)),[v]=o.useState((()=>{if(d()&&r>0){const e=new t.WebGLMultisampleRenderTarget(P.width,P.height,{format:t.RGBAFormat,encoding:t.sRGBEncoding});return e.samples=8,e}}));return o.useEffect((()=>{var e,r;null==(e=m.current)||e.setSize(P.width,P.height),null==(r=m.current)||r.setPixelRatio(p.getPixelRatio())}),[p,P]),a.useFrame((()=>{var e;return null==(e=m.current)?void 0:e.render()}),n),o.createElement("effectComposer",i.default({ref:l.default([h,m]),args:[p,v]},f),!c&&o.createElement("renderPass",{attach:"passes",args:[b,g]}),!u&&o.createElement("shaderPass",{attach:"passes",args:[s.GammaCorrectionShader]}),e)}));exports.Effects=f,exports.isWebGL2Available=d;
package/core/Effects.d.ts CHANGED
@@ -11,9 +11,9 @@ declare global {
11
11
  }
12
12
  }
13
13
  export declare const isWebGL2Available: () => boolean;
14
- export declare const Effects: React.ForwardRefExoticComponent<Pick<Omit<Partial<EffectComposer<import("three").WebGLRenderTarget>>, ReactThreeFiber.NonFunctionKeys<ReactThreeFiber.NodeProps<EffectComposer<import("three").WebGLRenderTarget>, typeof EffectComposer>>> & ReactThreeFiber.NodeProps<EffectComposer<import("three").WebGLRenderTarget>, typeof EffectComposer> & {
14
+ export declare const Effects: React.ForwardRefExoticComponent<Pick<ReactThreeFiber.ExtendedColors<ReactThreeFiber.Overwrite<Partial<EffectComposer<import("three").WebGLRenderTarget>>, ReactThreeFiber.NodeProps<EffectComposer<import("three").WebGLRenderTarget>, typeof EffectComposer>>> & {
15
15
  multisamping?: number | undefined;
16
16
  renderIndex?: number | undefined;
17
17
  disableGamma?: boolean | undefined;
18
18
  disableRenderPass?: boolean | undefined;
19
- }, "attach" | "attachArray" | "attachObject" | "args" | "children" | "key" | "onUpdate" | keyof EffectComposer<import("three").WebGLRenderTarget> | "multisamping" | "renderIndex" | "disableGamma" | "disableRenderPass"> & React.RefAttributes<unknown>>;
19
+ }, "attach" | "args" | "children" | "key" | "onUpdate" | keyof EffectComposer<import("three").WebGLRenderTarget> | "multisamping" | "renderIndex" | "disableGamma" | "disableRenderPass"> & React.RefAttributes<unknown>>;
package/core/Effects.js CHANGED
@@ -64,10 +64,10 @@ const Effects = /*#__PURE__*/React.forwardRef(({
64
64
  ref: mergeRefs([ref, composer]),
65
65
  args: [gl, target]
66
66
  }, props), !disableRenderPass && /*#__PURE__*/React.createElement("renderPass", {
67
- attachArray: "passes",
67
+ attach: "passes",
68
68
  args: [scene, camera]
69
69
  }), !disableGamma && /*#__PURE__*/React.createElement("shaderPass", {
70
- attachArray: "passes",
70
+ attach: "passes",
71
71
  args: [GammaCorrectionShader]
72
72
  }), children);
73
73
  });
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),n=require("@react-three/fiber"),r=require("three"),t=require("three-stdlib"),s=require("../helpers/environment-assets.cjs.js");function o(e){if(e&&e.__esModule)return e;var n=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var t=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(n,r,t.get?t:{enumerable:!0,get:function(){return e[r]}})}})),n.default=e,Object.freeze(n)}var u=o(e);const a=e=>{return(n=e).current&&n.current.isScene?e.current:e;var n};function c({scene:e,background:r=!1,map:t}){const s=n.useThree((e=>e.scene));return u.useLayoutEffect((()=>{if(t){const n=a(e||s),o=n.background,u=n.environment;return"only"!==r&&(n.environment=t),r&&(n.background=t),()=>{"only"!==r&&(n.environment=u),r&&(n.background=o)}}}),[e,t]),null}function i({children:e,near:t=1,far:s=1e3,resolution:o=256,frames:i=1,background:l=!1,scene:p,files:f,path:m,preset:b,extensions:d}){const g=n.useThree((e=>e.gl)),y=n.useThree((e=>e.scene)),v=u.useRef(null),[h]=u.useState((()=>new r.Scene)),E=u.useMemo((()=>{const e=new r.WebGLCubeRenderTarget(o);return e.texture.type=r.HalfFloatType,e}),[o]);u.useLayoutEffect((()=>{1===i&&v.current.update(g,h);const e=a(p||y),n=e.background,r=e.environment;return"only"!==l&&(e.environment=E.texture),l&&(e.background=E.texture),()=>{"only"!==l&&(e.environment=r),l&&(e.background=n)}}),[e,p]);let k=1;return n.useFrame((()=>{(i===1/0||k<i)&&(v.current.update(g,h),k++)})),u.createElement(u.Fragment,null,n.createPortal(u.createElement(u.Fragment,null,e,u.createElement("cubeCamera",{ref:v,args:[t,s,E]}),(f||b)&&u.createElement(c,{background:!0,files:f,preset:b,path:m,extensions:d,scene:h})),h))}function l({background:e=!1,files:o=["/px.png","/nx.png","/py.png","/ny.png","/pz.png","/nz.png"],path:c="",preset:i,scene:l,extensions:p}){if(i){if(!(i in s.presetsObj))throw new Error("Preset must be one of: "+Object.keys(s.presetsObj).join(", "));o=s.presetsObj[i],c="https://market-assets.fra1.cdn.digitaloceanspaces.com/market-assets/hdris/"}const f=n.useThree((e=>e.scene)),m=Array.isArray(o),b=m?r.CubeTextureLoader:t.RGBELoader,d=n.useLoader(b,m?[o]:o,(e=>{e.setPath(c),null==e.setDataType||e.setDataType(r.FloatType),p&&p(e)})),g=m?d[0]:d;return g.mapping=r.EquirectangularReflectionMapping,u.useLayoutEffect((()=>{const n=a(l||f),r=n.background,t=n.environment;return"only"!==e&&(n.environment=g),e&&(n.background=g),()=>{"only"!==e&&(n.environment=t),e&&(n.background=r),g.dispose()}}),[g,e,l]),null}exports.Environment=function(e){return e.map?u.createElement(c,e):e.children?u.createElement(i,e):u.createElement(l,e)},exports.EnvironmentCube=l,exports.EnvironmentMap=c,exports.EnvironmentPortal=i;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("@react-three/fiber"),n=require("three"),t=require("three-stdlib"),s=require("../helpers/environment-assets.cjs.js");function a(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var t=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(r,n,t.get?t:{enumerable:!0,get:function(){return e[n]}})}})),r.default=e,Object.freeze(r)}var o=a(e);exports.Environment=function({background:e=!1,files:a=["/px.png","/nx.png","/py.png","/ny.png","/pz.png","/nz.png"],path:i="",preset:u,scene:c,extensions:p}){if(u){if(!(u in s.presetsObj))throw new Error("Preset must be one of: "+Object.keys(s.presetsObj).join(", "));a=s.presetsObj[u],i="https://market-assets.fra1.cdn.digitaloceanspaces.com/market-assets/hdris/"}const b=r.useThree((({scene:e})=>e)),d=Array.isArray(a),f=d?n.CubeTextureLoader:t.RGBELoader,g=r.useLoader(f,d?[a]:a,(e=>{e.setPath(i),null==e.setDataType||e.setDataType(n.FloatType),p&&p(e)})),l=d?g[0]:g;return l.mapping=n.EquirectangularReflectionMapping,o.useLayoutEffect((()=>{const r=c?c.background:b.background,n=c?c.environment:b.environment;return c?(c.environment=l,e&&(c.background=l)):(b.environment=l,e&&(b.background=l)),()=>{c?(c.environment=n,c.background=r):(b.environment=n,b.background=r),l.dispose()}}),[l,e,c]),null};
@@ -1,22 +1,12 @@
1
- import * as React from 'react';
2
1
  import { Scene, Loader } from 'three';
3
2
  import { PresetsType } from '../helpers/environment-assets';
4
3
  declare type Props = {
5
- children?: React.ReactNode;
6
- frames?: number;
7
- near?: number;
8
- far?: number;
9
- resolution?: number;
10
- background?: boolean | 'only';
11
- map?: THREE.Texture;
4
+ background?: boolean;
12
5
  files?: string | string[];
13
6
  path?: string;
14
7
  preset?: PresetsType;
15
- scene?: Scene | React.MutableRefObject<THREE.Scene>;
8
+ scene?: Scene;
16
9
  extensions?: (loader: Loader) => void;
17
10
  };
18
- export declare function Environment(props: Props): JSX.Element;
19
- export declare function EnvironmentMap({ scene, background, map }: Props): null;
20
- export declare function EnvironmentPortal({ children, near, far, resolution, frames, background, scene, files, path, preset, extensions, }: Props): JSX.Element;
21
- export declare function EnvironmentCube({ background, files, path, preset, scene, extensions, }: Props): null;
11
+ export declare function Environment({ background, files, path, preset, scene, extensions, }: Props): null;
22
12
  export {};