@react-three/drei 9.0.0-beta.1 → 9.0.0-beta.4

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 (149) hide show
  1. package/README.md +461 -48
  2. package/core/ArcballControls.cjs.js +1 -1
  3. package/core/ArcballControls.d.ts +8 -8
  4. package/core/ArcballControls.js +19 -30
  5. package/core/Bounds.cjs.js +1 -1
  6. package/core/Bounds.d.ts +2 -1
  7. package/core/Bounds.js +25 -14
  8. package/core/Clone.cjs.js +1 -0
  9. package/core/Clone.d.ts +11 -0
  10. package/core/Clone.js +92 -0
  11. package/core/Cloud.cjs.js +1 -1
  12. package/core/Cloud.d.ts +4 -1
  13. package/core/Cloud.js +7 -3
  14. package/core/ComputedAttribute.cjs.js +1 -0
  15. package/core/ComputedAttribute.d.ts +9 -0
  16. package/core/ComputedAttribute.js +34 -0
  17. package/core/ContactShadows.cjs.js +1 -1
  18. package/core/ContactShadows.d.ts +4 -1
  19. package/core/ContactShadows.js +33 -13
  20. package/core/CubeCamera.cjs.js +1 -1
  21. package/core/CubeCamera.js +6 -7
  22. package/core/CurveModifier.cjs.js +1 -1
  23. package/core/CurveModifier.js +18 -22
  24. package/core/Detailed.d.ts +1 -1
  25. package/core/DeviceOrientationControls.cjs.js +1 -1
  26. package/core/DeviceOrientationControls.js +2 -6
  27. package/core/Effects.cjs.js +1 -1
  28. package/core/Effects.d.ts +3 -2
  29. package/core/Effects.js +2 -2
  30. package/core/Environment.cjs.js +1 -1
  31. package/core/Environment.d.ts +13 -3
  32. package/core/Environment.js +100 -56
  33. package/core/FirstPersonControls.cjs.js +1 -1
  34. package/core/FirstPersonControls.d.ts +1 -1
  35. package/core/FirstPersonControls.js +2 -6
  36. package/core/Float.cjs.js +1 -1
  37. package/core/Float.d.ts +1 -1
  38. package/core/Float.js +5 -4
  39. package/core/GizmoHelper.cjs.js +1 -1
  40. package/core/GizmoHelper.d.ts +2 -1
  41. package/core/GizmoHelper.js +31 -41
  42. package/core/GizmoViewcube.cjs.js +1 -1
  43. package/core/GizmoViewcube.js +1 -1
  44. package/core/GradientTexture.cjs.js +1 -1
  45. package/core/GradientTexture.js +5 -2
  46. package/core/Image.cjs.js +1 -1
  47. package/core/Image.d.ts +6 -4
  48. package/core/Image.js +6 -1
  49. package/core/Instances.cjs.js +1 -1
  50. package/core/Instances.d.ts +2 -2
  51. package/core/Instances.js +5 -11
  52. package/core/Lightformer.cjs.js +1 -0
  53. package/core/Lightformer.d.ts +41 -0
  54. package/core/Lightformer.js +51 -0
  55. package/core/Line.d.ts +1 -1
  56. package/core/MapControls.d.ts +1 -1
  57. package/core/MeshDistortMaterial.d.ts +2 -4
  58. package/core/MeshReflectorMaterial.cjs.js +1 -1
  59. package/core/MeshReflectorMaterial.d.ts +2 -2
  60. package/core/MeshReflectorMaterial.js +7 -7
  61. package/core/MeshWobbleMaterial.d.ts +2 -4
  62. package/core/OrbitControls.cjs.js +1 -1
  63. package/core/OrbitControls.d.ts +10 -10
  64. package/core/OrbitControls.js +14 -26
  65. package/core/OrthographicCamera.d.ts +1 -1
  66. package/core/PerspectiveCamera.d.ts +1 -1
  67. package/core/PointMaterial.cjs.js +1 -1
  68. package/core/PointMaterial.d.ts +5 -8
  69. package/core/PointMaterial.js +16 -34
  70. package/core/PointerLockControls.cjs.js +1 -1
  71. package/core/PointerLockControls.d.ts +3 -1
  72. package/core/PointerLockControls.js +36 -22
  73. package/core/Points.cjs.js +1 -1
  74. package/core/Points.d.ts +3 -3
  75. package/core/Points.js +11 -30
  76. package/core/PositionalAudio.d.ts +1 -1
  77. package/core/Reflector.cjs.js +1 -1
  78. package/core/Reflector.d.ts +1 -1
  79. package/core/Reflector.js +1 -2
  80. package/core/RoundedBox.cjs.js +1 -1
  81. package/core/RoundedBox.d.ts +2 -1
  82. package/core/RoundedBox.js +2 -1
  83. package/core/Sampler.cjs.js +1 -0
  84. package/core/Sampler.d.ts +21 -0
  85. package/core/Sampler.js +65 -0
  86. package/core/Shadow.d.ts +1 -1
  87. package/core/SpotLight.d.ts +20 -4
  88. package/core/Stage.cjs.js +1 -1
  89. package/core/Stage.d.ts +1 -1
  90. package/core/Stage.js +1 -2
  91. package/core/Stars.cjs.js +1 -1
  92. package/core/Stars.js +3 -0
  93. package/core/Stats.cjs.js +1 -1
  94. package/core/Stats.js +2 -2
  95. package/core/Text.cjs.js +1 -1
  96. package/core/Text.d.ts +3 -2
  97. package/core/Text.js +9 -1
  98. package/core/TrackballControls.cjs.js +1 -1
  99. package/core/TrackballControls.js +7 -5
  100. package/core/Trail.cjs.js +1 -0
  101. package/core/Trail.d.ts +21 -0
  102. package/core/Trail.js +160 -0
  103. package/core/TransformControls.cjs.js +1 -1
  104. package/core/TransformControls.d.ts +1 -1
  105. package/core/TransformControls.js +13 -11
  106. package/core/index.cjs.js +1 -1
  107. package/core/index.d.ts +6 -0
  108. package/core/index.js +11 -4
  109. package/core/shaderMaterial.d.ts +1 -1
  110. package/core/useBoxProjectedEnv.cjs.js +1 -0
  111. package/core/useBoxProjectedEnv.d.ts +8 -0
  112. package/core/useBoxProjectedEnv.js +98 -0
  113. package/core/useDetectGPU.cjs.js +1 -1
  114. package/core/useDetectGPU.js +2 -2
  115. package/core/useFBO.cjs.js +1 -1
  116. package/core/useFBO.d.ts +1 -1
  117. package/core/useFBO.js +22 -24
  118. package/core/useHelper.cjs.js +1 -1
  119. package/core/useHelper.d.ts +4 -1
  120. package/core/useHelper.js +16 -6
  121. package/core/useMatcapTexture.cjs.js +1 -1
  122. package/core/useMatcapTexture.js +2 -5
  123. package/core/useNormalTexture.cjs.js +1 -1
  124. package/core/useNormalTexture.js +2 -5
  125. package/helpers/Position.cjs.js +1 -1
  126. package/helpers/Position.js +3 -2
  127. package/helpers/environment-assets.cjs.js +1 -1
  128. package/helpers/environment-assets.js +10 -10
  129. package/index.cjs.js +1 -1
  130. package/index.js +7 -1
  131. package/materials/ConvolutionMaterial.cjs.js +1 -1
  132. package/materials/ConvolutionMaterial.js +2 -0
  133. package/materials/MeshReflectorMaterial.cjs.js +1 -1
  134. package/materials/MeshReflectorMaterial.d.ts +0 -3
  135. package/materials/MeshReflectorMaterial.js +8 -35
  136. package/materials/SpotLightMaterial.cjs.js +1 -1
  137. package/materials/SpotLightMaterial.js +3 -0
  138. package/native/index.cjs.js +1 -1
  139. package/native/index.js +11 -4
  140. package/package.json +8 -7
  141. package/web/Html.cjs.js +1 -1
  142. package/web/Html.js +4 -5
  143. package/web/ScrollControls.cjs.js +1 -1
  144. package/web/ScrollControls.js +6 -5
  145. package/web/Select.cjs.js +1 -1
  146. package/web/Select.d.ts +2 -1
  147. package/web/Select.js +3 -2
  148. package/web/index.cjs.js +1 -1
  149. package/web/index.js +12 -5
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("three-stdlib");function t(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 u=t(e);const n=u.forwardRef((({children:e,curve:t},n)=>{const[c,o]=u.useState(),l=u.useRef(),f=u.useRef();return u.useImperativeHandle(n,(()=>({moveAlongCurve:e=>{var r;null==(r=f.current)||r.moveAlongCurve(e)}}))),u.useEffect((()=>{!f.current&&l.current&&n&&(f.current=new r.Flow(l.current),o(f.current.object3D))}),[e,n]),u.useEffect((()=>{var e;l.current&&t&&(null==(e=f.current)||e.updateCurve(0,t))}),[t]),c?u.createElement("primitive",{object:c}):u.cloneElement(u.Children.only(e),{ref:l})}));exports.CurveModifier=n;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("three"),t=require("@react-three/fiber"),u=require("three-stdlib");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 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 c=n(e),a=n(r);const l=c.forwardRef((({children:e,curve:r},n)=>{const[l]=c.useState((()=>new a.Scene)),[o,i]=c.useState(),f=c.useRef();return c.useEffect((()=>{f.current=new u.Flow(l.children[0]),i(f.current.object3D)}),[e]),c.useEffect((()=>{var e;r&&(null==(e=f.current)||e.updateCurve(0,r))}),[r]),c.useImperativeHandle(n,(()=>({moveAlongCurve:e=>{var r;null==(r=f.current)||r.moveAlongCurve(e)}}))),c.createElement(c.Fragment,null,t.createPortal(e,l),o&&c.createElement("primitive",{object:o}))}));exports.CurveModifier=l;
@@ -1,38 +1,34 @@
1
1
  import * as React from 'react';
2
+ import * as THREE from 'three';
3
+ import { createPortal } from '@react-three/fiber';
2
4
  import { Flow } from 'three-stdlib';
3
5
 
4
6
  const CurveModifier = /*#__PURE__*/React.forwardRef(({
5
7
  children,
6
8
  curve
7
9
  }, ref) => {
8
- const [object3D, setObj] = React.useState();
9
- const original = React.useRef();
10
+ const [scene] = React.useState(() => new THREE.Scene());
11
+ const [obj, set] = React.useState();
10
12
  const modifier = React.useRef();
11
- React.useImperativeHandle(ref, () => ({
12
- moveAlongCurve: val => {
13
- var _modifier$current;
14
-
15
- (_modifier$current = modifier.current) == null ? void 0 : _modifier$current.moveAlongCurve(val);
16
- }
17
- }));
18
13
  React.useEffect(() => {
19
- if (!modifier.current && original.current && ref) {
20
- modifier.current = new Flow(original.current);
21
- setObj(modifier.current.object3D);
22
- }
23
- }, [children, ref]);
14
+ modifier.current = new Flow(scene.children[0]);
15
+ set(modifier.current.object3D);
16
+ }, [children]);
24
17
  React.useEffect(() => {
25
- if (original.current && curve) {
18
+ var _modifier$current;
19
+
20
+ if (curve) (_modifier$current = modifier.current) == null ? void 0 : _modifier$current.updateCurve(0, curve);
21
+ }, [curve]);
22
+ React.useImperativeHandle(ref, () => ({
23
+ moveAlongCurve: val => {
26
24
  var _modifier$current2;
27
25
 
28
- (_modifier$current2 = modifier.current) == null ? void 0 : _modifier$current2.updateCurve(0, curve);
26
+ (_modifier$current2 = modifier.current) == null ? void 0 : _modifier$current2.moveAlongCurve(val);
29
27
  }
30
- }, [curve]);
31
- return object3D ? /*#__PURE__*/React.createElement("primitive", {
32
- object: object3D
33
- }) : /*#__PURE__*/React.cloneElement(React.Children.only(children), {
34
- ref: original
35
- });
28
+ }));
29
+ return /*#__PURE__*/React.createElement(React.Fragment, null, createPortal(children, scene), obj && /*#__PURE__*/React.createElement("primitive", {
30
+ object: obj
31
+ }));
36
32
  });
37
33
 
38
34
  export { CurveModifier };
@@ -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;
@@ -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((({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;
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;
@@ -9,12 +9,8 @@ const DeviceOrientationControls = /*#__PURE__*/React.forwardRef((props, ref) =>
9
9
  onChange,
10
10
  ...rest
11
11
  } = props;
12
- const defaultCamera = useThree(({
13
- camera
14
- }) => camera);
15
- const invalidate = useThree(({
16
- invalidate
17
- }) => invalidate);
12
+ const defaultCamera = useThree(state => state.camera);
13
+ const invalidate = useThree(state => state.invalidate);
18
14
  const explCamera = camera || defaultCamera;
19
15
  const [controls] = React.useState(() => new DeviceOrientationControls$1(explCamera));
20
16
  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",{attach:"passes",args:[b,g]}),!u&&o.createElement("shaderPass",{attach:"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),d=u(n);a.extend({EffectComposer:s.EffectComposer,RenderPass:s.RenderPass,ShaderPass:s.ShaderPass});const l=()=>{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(l()&&r>0){const e=new t.WebGLRenderTarget(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:d.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=l;
package/core/Effects.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import * as React from 'react';
2
+ import { WebGLRenderTarget } from 'three';
2
3
  import { ReactThreeFiber } from '@react-three/fiber';
3
4
  import { EffectComposer, RenderPass, ShaderPass } from 'three-stdlib';
4
5
  declare global {
@@ -11,9 +12,9 @@ declare global {
11
12
  }
12
13
  }
13
14
  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> & {
15
+ export declare const Effects: React.ForwardRefExoticComponent<Pick<ReactThreeFiber.ExtendedColors<ReactThreeFiber.Overwrite<Partial<EffectComposer<WebGLRenderTarget>>, ReactThreeFiber.NodeProps<EffectComposer<WebGLRenderTarget>, typeof EffectComposer>>> & {
15
16
  multisamping?: number | undefined;
16
17
  renderIndex?: number | undefined;
17
18
  disableGamma?: boolean | undefined;
18
19
  disableRenderPass?: boolean | undefined;
19
- }, "attach" | "args" | "children" | "key" | "onUpdate" | keyof EffectComposer<import("three").WebGLRenderTarget> | "multisamping" | "renderIndex" | "disableGamma" | "disableRenderPass"> & React.RefAttributes<unknown>>;
20
+ }, "attach" | "args" | "children" | "key" | "onUpdate" | keyof EffectComposer<WebGLRenderTarget> | "multisamping" | "renderIndex" | "disableGamma" | "disableRenderPass"> & React.RefAttributes<unknown>>;
package/core/Effects.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import _extends from '@babel/runtime/helpers/esm/extends';
2
2
  import * as React from 'react';
3
- import { WebGLMultisampleRenderTarget, RGBAFormat, sRGBEncoding } from 'three';
3
+ import { WebGLRenderTarget, RGBAFormat, sRGBEncoding } from 'three';
4
4
  import { extend, useThree, useFrame } from '@react-three/fiber';
5
5
  import { EffectComposer, RenderPass, ShaderPass, GammaCorrectionShader } from 'three-stdlib';
6
6
  import mergeRefs from 'react-merge-refs';
@@ -41,7 +41,7 @@ const Effects = /*#__PURE__*/React.forwardRef(({
41
41
  }) => size);
42
42
  const [target] = React.useState(() => {
43
43
  if (isWebGL2Available() && multisamping > 0) {
44
- const t = new WebGLMultisampleRenderTarget(size.width, size.height, {
44
+ const t = new WebGLRenderTarget(size.width, size.height, {
45
45
  format: RGBAFormat,
46
46
  encoding: sRGBEncoding
47
47
  });
@@ -1 +1 @@
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("use-asset"),u=require("../helpers/environment-assets.cjs.js");function o(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 a=o(e);exports.Environment=function({background:e=!1,files:o=["/px.png","/nx.png","/py.png","/ny.png","/pz.png","/nz.png"],path:i="",preset:c,scene:d,extensions:p}){if(c){if(!(c in u.presetsObj))throw new Error("Preset must be one of: "+Object.keys(u.presetsObj).join(", "));o=u.presetsObj[c],i="https://rawcdn.githack.com/pmndrs/drei-assets/aa3600359ba664d546d05821bcbca42013587df2/hdri/"}const b=r.useThree((({scene:e})=>e)),f=r.useThree((({gl:e})=>e)),g=Array.isArray(o),l=g?n.CubeTextureLoader:t.RGBELoader,m=r.useLoader(l,g?[o]:o,(e=>{e.setPath(i),p&&p(e)})),h=g?m[0]:m,j=s.useAsset((()=>new Promise((e=>{const r=new n.PMREMGenerator(f),t=function(e,r,n){return n?(r.compileEquirectangularShader(),r.fromCubemap(e).texture):r.fromEquirectangular(e).texture}(h,r,g);r.dispose(),e(t)}))),h);return a.useLayoutEffect((()=>{const r=d?d.background:b.background,n=d?d.environment:b.environment;return d?(d.environment=j,e&&(d.background=j)):(b.environment=j,e&&(b.background=j)),()=>{d?(d.environment=n,d.background=r):(b.environment=n,b.background=r),s.useAsset.clear(h),j.dispose()}}),[j,e,d]),null};
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"),u=require("../helpers/environment-assets.cjs.js");function a(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 o=a(e);const s=e=>{return(n=e).current&&n.current.isScene?e.current:e;var n};function c({scene:e,background:r=!1,map:t}){const u=n.useThree((e=>e.scene));return o.useLayoutEffect((()=>{if(t){const n=s(e||u),a=n.background,o=n.environment;return"only"!==r&&(n.environment=t),r&&(n.background=t),()=>{"only"!==r&&(n.environment=o),r&&(n.background=a)}}}),[e,t]),null}function i({children:e,near:t=1,far:u=1e3,resolution:a=256,frames:i=1,background:l=!1,scene:p,files:f,path:m,preset:b,extensions:g}){const d=n.useThree((e=>e.gl)),y=n.useThree((e=>e.scene)),v=o.useRef(null),[h]=o.useState((()=>new r.Scene)),E=o.useMemo((()=>{const e=new r.WebGLCubeRenderTarget(a);return e.texture.type=r.HalfFloatType,e}),[a]);o.useLayoutEffect((()=>{1===i&&v.current.update(d,h);const e=s(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(d,h),k++)})),o.createElement(o.Fragment,null,n.createPortal(o.createElement(o.Fragment,null,e,o.createElement("cubeCamera",{ref:v,args:[t,u,E]}),(f||b)&&o.createElement(c,{background:!0,files:f,preset:b,path:m,extensions:g,scene:h})),h))}function l({background:e=!1,files:a=["/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 u.presetsObj))throw new Error("Preset must be one of: "+Object.keys(u.presetsObj).join(", "));a=u.presetsObj[i],c="https://market-assets.fra1.cdn.digitaloceanspaces.com/market-assets/hdris/"}const f=n.useThree((e=>e.scene)),m=Array.isArray(a),b=m?r.CubeTextureLoader:t.RGBELoader,g=n.useLoader(b,m?[a]:a,(e=>{e.setPath(c),null==e.setDataType||e.setDataType(r.FloatType),p&&p(e)})),d=m?g[0]:g;return d.mapping=m?r.CubeReflectionMapping:r.EquirectangularReflectionMapping,o.useLayoutEffect((()=>{const n=s(l||f),r=n.background,t=n.environment;return"only"!==e&&(n.environment=d),e&&(n.background=d),()=>{"only"!==e&&(n.environment=t),e&&(n.background=r)}}),[d,e,l]),null}exports.Environment=function(e){return e.map?o.createElement(c,e):e.children?o.createElement(i,e):o.createElement(l,e)},exports.EnvironmentCube=l,exports.EnvironmentMap=c,exports.EnvironmentPortal=i;
@@ -1,12 +1,22 @@
1
+ import * as React from 'react';
1
2
  import { Scene, Loader } from 'three';
2
3
  import { PresetsType } from '../helpers/environment-assets';
3
4
  declare type Props = {
4
- background?: boolean;
5
+ children?: React.ReactNode;
6
+ frames?: number;
7
+ near?: number;
8
+ far?: number;
9
+ resolution?: number;
10
+ background?: boolean | 'only';
11
+ map?: THREE.Texture;
5
12
  files?: string | string[];
6
13
  path?: string;
7
14
  preset?: PresetsType;
8
- scene?: Scene;
15
+ scene?: Scene | React.MutableRefObject<THREE.Scene>;
9
16
  extensions?: (loader: Loader) => void;
10
17
  };
11
- export declare function Environment({ background, files, path, preset, scene, extensions, }: Props): null;
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;
12
22
  export {};
@@ -1,21 +1,93 @@
1
1
  import * as React from 'react';
2
- import { useThree, useLoader } from '@react-three/fiber';
3
- import { PMREMGenerator, CubeTextureLoader } from 'three';
2
+ import { useThree, useFrame, createPortal, useLoader } from '@react-three/fiber';
3
+ import { Scene, WebGLCubeRenderTarget, HalfFloatType, FloatType, CubeReflectionMapping, EquirectangularReflectionMapping, CubeTextureLoader } from 'three';
4
4
  import { RGBELoader } from 'three-stdlib';
5
- import { useAsset } from 'use-asset';
6
5
  import { presetsObj } from '../helpers/environment-assets.js';
7
6
 
8
- function getTexture(texture, gen, isCubeMap) {
9
- if (isCubeMap) {
10
- gen.compileEquirectangularShader();
11
- return gen.fromCubemap(texture).texture;
12
- }
7
+ const CUBEMAP_ROOT = 'https://market-assets.fra1.cdn.digitaloceanspaces.com/market-assets/hdris/';
13
8
 
14
- return gen.fromEquirectangular(texture).texture;
15
- }
9
+ const isRef = obj => obj.current && obj.current.isScene;
16
10
 
17
- const CUBEMAP_ROOT = 'https://rawcdn.githack.com/pmndrs/drei-assets/aa3600359ba664d546d05821bcbca42013587df2';
18
- function Environment({
11
+ const resolveScene = scene => isRef(scene) ? scene.current : scene;
12
+
13
+ function Environment(props) {
14
+ return props.map ? /*#__PURE__*/React.createElement(EnvironmentMap, props) : props.children ? /*#__PURE__*/React.createElement(EnvironmentPortal, props) : /*#__PURE__*/React.createElement(EnvironmentCube, props);
15
+ }
16
+ function EnvironmentMap({
17
+ scene,
18
+ background = false,
19
+ map
20
+ }) {
21
+ const defaultScene = useThree(state => state.scene);
22
+ React.useLayoutEffect(() => {
23
+ if (map) {
24
+ const target = resolveScene(scene || defaultScene);
25
+ const oldbg = target.background;
26
+ const oldenv = target.environment;
27
+ if (background !== 'only') target.environment = map;
28
+ if (background) target.background = map;
29
+ return () => {
30
+ if (background !== 'only') target.environment = oldenv;
31
+ if (background) target.background = oldbg;
32
+ };
33
+ }
34
+ }, [scene, map]);
35
+ return null;
36
+ }
37
+ function EnvironmentPortal({
38
+ children,
39
+ near = 1,
40
+ far = 1000,
41
+ resolution = 256,
42
+ frames = 1,
43
+ background = false,
44
+ scene,
45
+ files,
46
+ path,
47
+ preset = undefined,
48
+ extensions
49
+ }) {
50
+ const gl = useThree(state => state.gl);
51
+ const defaultScene = useThree(state => state.scene);
52
+ const camera = React.useRef(null);
53
+ const [virtualScene] = React.useState(() => new Scene());
54
+ const fbo = React.useMemo(() => {
55
+ const fbo = new WebGLCubeRenderTarget(resolution);
56
+ fbo.texture.type = HalfFloatType;
57
+ return fbo;
58
+ }, [resolution]);
59
+ React.useLayoutEffect(() => {
60
+ if (frames === 1) camera.current.update(gl, virtualScene);
61
+ const target = resolveScene(scene || defaultScene);
62
+ const oldbg = target.background;
63
+ const oldenv = target.environment;
64
+ if (background !== 'only') target.environment = fbo.texture;
65
+ if (background) target.background = fbo.texture;
66
+ return () => {
67
+ if (background !== 'only') target.environment = oldenv;
68
+ if (background) target.background = oldbg;
69
+ };
70
+ }, [children, scene]);
71
+ let count = 1;
72
+ useFrame(() => {
73
+ if (frames === Infinity || count < frames) {
74
+ camera.current.update(gl, virtualScene);
75
+ count++;
76
+ }
77
+ });
78
+ return /*#__PURE__*/React.createElement(React.Fragment, null, createPortal( /*#__PURE__*/React.createElement(React.Fragment, null, children, /*#__PURE__*/React.createElement("cubeCamera", {
79
+ ref: camera,
80
+ args: [near, far, fbo]
81
+ }), (files || preset) && /*#__PURE__*/React.createElement(EnvironmentMap, {
82
+ background: true,
83
+ files: files,
84
+ preset: preset,
85
+ path: path,
86
+ extensions: extensions,
87
+ scene: virtualScene
88
+ })), virtualScene));
89
+ }
90
+ function EnvironmentCube({
19
91
  background = false,
20
92
  files = ['/px.png', '/nx.png', '/py.png', '/ny.png', '/pz.png', '/nz.png'],
21
93
  path = '',
@@ -24,63 +96,35 @@ function Environment({
24
96
  extensions
25
97
  }) {
26
98
  if (preset) {
27
- if (!(preset in presetsObj)) {
28
- throw new Error('Preset must be one of: ' + Object.keys(presetsObj).join(', '));
29
- }
30
-
99
+ if (!(preset in presetsObj)) throw new Error('Preset must be one of: ' + Object.keys(presetsObj).join(', '));
31
100
  files = presetsObj[preset];
32
- path = CUBEMAP_ROOT + '/hdri/';
101
+ path = CUBEMAP_ROOT;
33
102
  }
34
103
 
35
- const defaultScene = useThree(({
36
- scene
37
- }) => scene);
38
- const gl = useThree(({
39
- gl
40
- }) => gl);
104
+ const defaultScene = useThree(state => state.scene);
41
105
  const isCubeMap = Array.isArray(files);
42
106
  const loader = isCubeMap ? CubeTextureLoader : RGBELoader; // @ts-expect-error
43
107
 
44
108
  const loaderResult = useLoader(loader, isCubeMap ? [files] : files, loader => {
45
- loader.setPath(path);
109
+ loader.setPath(path); // @ts-expect-error
110
+
111
+ loader.setDataType == null ? void 0 : loader.setDataType(FloatType);
46
112
  if (extensions) extensions(loader);
47
113
  });
48
- const map = isCubeMap ? loaderResult[0] : loaderResult; // PMREMGenerator takes its sweet time to generate the env-map,
49
- // Let's make this part of suspense, or else it just yields a frame-skip
50
-
51
- const texture = useAsset(() => new Promise(res => {
52
- const gen = new PMREMGenerator(gl);
53
- const texture = getTexture(map, gen, isCubeMap);
54
- gen.dispose();
55
- res(texture);
56
- }), map);
114
+ const texture = isCubeMap ? loaderResult[0] : loaderResult;
115
+ texture.mapping = isCubeMap ? CubeReflectionMapping : EquirectangularReflectionMapping;
57
116
  React.useLayoutEffect(() => {
58
- const oldbg = scene ? scene.background : defaultScene.background;
59
- const oldenv = scene ? scene.environment : defaultScene.environment;
60
-
61
- if (scene) {
62
- scene.environment = texture;
63
- if (background) scene.background = texture;
64
- } else {
65
- defaultScene.environment = texture;
66
- if (background) defaultScene.background = texture;
67
- }
68
-
117
+ const target = resolveScene(scene || defaultScene);
118
+ const oldbg = target.background;
119
+ const oldenv = target.environment;
120
+ if (background !== 'only') target.environment = texture;
121
+ if (background) target.background = texture;
69
122
  return () => {
70
- if (scene) {
71
- scene.environment = oldenv;
72
- scene.background = oldbg;
73
- } else {
74
- defaultScene.environment = oldenv;
75
- defaultScene.background = oldbg;
76
- } // Environment textures are volatile, better dispose and uncache them
77
-
78
-
79
- useAsset.clear(map);
80
- texture.dispose();
123
+ if (background !== 'only') target.environment = oldenv;
124
+ if (background) target.background = oldbg;
81
125
  };
82
126
  }, [texture, background, scene]);
83
127
  return null;
84
128
  }
85
129
 
86
- export { Environment };
130
+ export { Environment, EnvironmentCube, EnvironmentMap, EnvironmentPortal };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=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 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=u(e),i=o(r);const s=i.forwardRef(((e,r)=>{const u=t.useThree((({camera:e})=>e)),o=t.useThree((({gl:e})=>e)),[s]=i.useState((()=>new n.FirstPersonControls(u,o.domElement)));return t.useFrame(((e,r)=>{s.update(r)})),s?i.createElement("primitive",a.default({ref:r,object:s},e)):null}));exports.FirstPersonControls=s;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=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 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=u(e),i=o(r);const s=i.forwardRef(((e,r)=>{const u=t.useThree((e=>e.camera)),o=t.useThree((e=>e.gl)),[s]=i.useState((()=>new n.FirstPersonControls(u,o.domElement)));return t.useFrame(((e,r)=>{s.update(r)})),s?i.createElement("primitive",a.default({ref:r,object:s},e)):null}));exports.FirstPersonControls=s;
@@ -2,4 +2,4 @@ import * as React from 'react';
2
2
  import { Object3DNode } from '@react-three/fiber';
3
3
  import { FirstPersonControls as FirstPersonControlImpl } from 'three-stdlib';
4
4
  export declare type FirstPersonControlsProps = Object3DNode<FirstPersonControlImpl, typeof FirstPersonControlImpl>;
5
- export declare const FirstPersonControls: React.ForwardRefExoticComponent<Pick<FirstPersonControlsProps, "object" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "lookAt" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "enabled" | "update" | "domElement" | "movementSpeed" | "autoForward" | "handleResize" | "lookSpeed" | "lookVertical" | "activeLook" | "heightSpeed" | "heightCoef" | "heightMin" | "heightMax" | "constrainVertical" | "verticalMin" | "verticalMax" | "mouseDragOn"> & React.RefAttributes<FirstPersonControlImpl>>;
5
+ export declare const FirstPersonControls: React.ForwardRefExoticComponent<Pick<FirstPersonControlsProps, "object" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "lookAt" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "enabled" | "update" | "connect" | "domElement" | "movementSpeed" | "autoForward" | "handleResize" | "lookSpeed" | "lookVertical" | "activeLook" | "heightSpeed" | "heightCoef" | "heightMin" | "heightMax" | "constrainVertical" | "verticalMin" | "verticalMax" | "mouseDragOn"> & React.RefAttributes<FirstPersonControlImpl>>;
@@ -4,12 +4,8 @@ import { useThree, useFrame } from '@react-three/fiber';
4
4
  import { FirstPersonControls as FirstPersonControls$1 } from 'three-stdlib';
5
5
 
6
6
  const FirstPersonControls = /*#__PURE__*/React.forwardRef((props, ref) => {
7
- const camera = useThree(({
8
- camera
9
- }) => camera);
10
- const gl = useThree(({
11
- gl
12
- }) => gl);
7
+ const camera = useThree(state => state.camera);
8
+ const gl = useThree(state => state.gl);
13
9
  const [controls] = React.useState(() => new FirstPersonControls$1(camera, gl.domElement));
14
10
  useFrame((_, delta) => {
15
11
  controls.update(delta);
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");function r(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 n=r(e);exports.Float=function({children:e,speed:r=1,rotationIntensity:o=1,floatIntensity:c=1,...u}){const a=n.useRef(null),i=n.useRef(1e4*Math.random());return t.useFrame((e=>{const t=i.current+e.clock.getElapsedTime();a.current.rotation.x=Math.cos(t/4*r)/8*o,a.current.rotation.y=Math.sin(t/4*r)/8*o,a.current.rotation.z=Math.sin(t/4*r)/20*o,a.current.position.y=Math.sin(t/4*r)/10*c})),n.createElement("group",u,n.createElement("group",{ref:a},e))};
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;
package/core/Float.d.ts CHANGED
@@ -5,4 +5,4 @@ export declare type FloatProps = JSX.IntrinsicElements['group'] & {
5
5
  floatIntensity?: number;
6
6
  children?: React.ReactNode;
7
7
  };
8
- export declare function Float({ children, speed, rotationIntensity, floatIntensity, ...props }: FloatProps): JSX.Element;
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>>;
package/core/Float.js CHANGED
@@ -1,13 +1,14 @@
1
1
  import * as React from 'react';
2
2
  import { useFrame } from '@react-three/fiber';
3
+ import mergeRefs from 'react-merge-refs';
3
4
 
4
- function Float({
5
+ const Float = /*#__PURE__*/React.forwardRef(({
5
6
  children,
6
7
  speed = 1,
7
8
  rotationIntensity = 1,
8
9
  floatIntensity = 1,
9
10
  ...props
10
- }) {
11
+ }, forwardRef) => {
11
12
  const ref = React.useRef(null);
12
13
  const offset = React.useRef(Math.random() * 10000);
13
14
  useFrame(state => {
@@ -18,8 +19,8 @@ function Float({
18
19
  ref.current.position.y = Math.sin(t / 4 * speed) / 10 * floatIntensity;
19
20
  });
20
21
  return /*#__PURE__*/React.createElement("group", props, /*#__PURE__*/React.createElement("group", {
21
- ref: ref
22
+ ref: mergeRefs([ref, forwardRef])
22
23
  }, children));
23
- }
24
+ });
24
25
 
25
26
  export { Float };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("@react-three/fiber"),t=require("three"),n=require("./OrthographicCamera.cjs.js"),u=require("./useCamera.cjs.js");function a(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)}require("@babel/runtime/helpers/extends"),require("react-merge-refs");var o=a(e);const c=o.createContext({}),i=2*Math.PI,s=new t.Object3D,l=new t.Matrix4,[p,d]=[new t.Quaternion,new t.Quaternion],f=new t.Vector3,h=new t.Vector3;exports.GizmoHelper=({alignment:e="bottom-right",margin:a=[80,80],renderPriority:m=0,onUpdate:g,onTarget:b,children:y})=>{const v=r.useThree((({size:e})=>e)),w=r.useThree((({camera:e})=>e)),j=r.useThree((({controls:e})=>e)),q=r.useThree((({gl:e})=>e)),x=r.useThree((({scene:e})=>e)),O=r.useThree((({invalidate:e})=>e)),T=o.useRef(),C=o.useRef(),k=o.useRef(null),[P]=o.useState((()=>new t.Scene)),R=o.useRef(!1),z=o.useRef(0),E=o.useRef(new t.Vector3(0,0,0));o.useEffect((()=>(x.background&&(T.current=x.background,x.background=null,P.background=T.current),()=>{T.current&&(x.background=T.current)})),[]);r.useFrame(((e,r)=>{var t;k.current&&C.current&&((e=>{if(!R.current)return;if(p.angleTo(d)<.01)return void(R.current=!1);const r=e*i;p.rotateTowards(d,r),w.position.set(0,0,1).applyQuaternion(p).multiplyScalar(z.current).add(E.current),w.up.set(0,1,0).applyQuaternion(p).normalize(),w.quaternion.copy(p),g?g():j&&j.update(),O()})(r),l.copy(w.matrix).invert(),null==(t=C.current)||t.quaternion.setFromRotationMatrix(l),q.autoClear=!1,q.clearDepth(),q.render(P,k.current))}),m);const M={tweenCamera:e=>{R.current=!0,(j||b)&&(E.current=(null==j?void 0:j.target)||(null==b?void 0:b())),z.current=w.position.distanceTo(f),p.copy(w.quaternion),h.copy(e).multiplyScalar(z.current).add(f),s.lookAt(h),d.copy(s.quaternion),O()},raycast:u.useCamera(k)},[D,Q]=a,S=e.endsWith("-left")?-v.width/2+D:v.width/2-D,_=e.startsWith("top-")?v.height/2-Q:-v.height/2+Q;return r.createPortal(o.createElement(c.Provider,{value:M},o.createElement(n.OrthographicCamera,{ref:k,makeDefault:!1,position:[0,0,200]}),o.createElement("group",{ref:C,position:[S,_,0]},y)),P)},exports.useGizmoContext=()=>o.useContext(c);
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("@react-three/fiber"),t=require("three"),n=require("./OrthographicCamera.cjs.js"),a=require("./useCamera.cjs.js");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 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)}require("@babel/runtime/helpers/extends"),require("react-merge-refs");var o=u(e);const c=o.createContext({}),i=2*Math.PI,s=new t.Object3D,l=new t.Matrix4,[p,d]=[new t.Quaternion,new t.Quaternion],f=new t.Vector3,h=new t.Vector3;exports.GizmoHelper=({alignment:e="bottom-right",margin:u=[80,80],renderPriority:m=0,autoClear:g=!0,onUpdate:b,onTarget:y,children:w})=>{const v=r.useThree((({size:e})=>e)),j=r.useThree((({camera:e})=>e)),q=r.useThree((({controls:e})=>e)),C=r.useThree((({gl:e})=>e)),x=r.useThree((({scene:e})=>e)),O=r.useThree((({invalidate:e})=>e)),T=o.useRef(),k=o.useRef(),P=o.useRef(null),[R]=o.useState((()=>new t.Scene)),M=o.useRef(!1),z=o.useRef(0),E=o.useRef(new t.Vector3(0,0,0)),Q=o.useCallback((e=>{M.current=!0,(q||y)&&(E.current=(null==q?void 0:q.target)||(null==y?void 0:y())),z.current=j.position.distanceTo(f),p.copy(j.quaternion),h.copy(e).multiplyScalar(z.current).add(f),s.lookAt(h),d.copy(s.quaternion),O()}),[q,j,y,O]);o.useEffect((()=>(x.background&&(T.current=x.background,x.background=null,R.background=T.current),()=>{T.current&&(x.background=T.current)})),[]),r.useFrame(((e,r)=>{if(P.current&&k.current){var t;if(M.current)if(p.angleTo(d)<.01)M.current=!1;else{const e=r*i;p.rotateTowards(d,e),j.position.set(0,0,1).applyQuaternion(p).multiplyScalar(z.current).add(E.current),j.up.set(0,1,0).applyQuaternion(p).normalize(),j.quaternion.copy(p),b?b():q&&q.update(),O()}l.copy(j.matrix).invert(),null==(t=k.current)||t.quaternion.setFromRotationMatrix(l),g&&(C.autoClear=!1),C.clearDepth(),C.render(R,P.current)}}),m);const S=a.useCamera(P),_=o.useMemo((()=>({tweenCamera:Q,raycast:S})),[Q]),[D,V]=u,F=e.endsWith("-left")?-v.width/2+D:v.width/2-D,G=e.startsWith("top-")?v.height/2-V:-v.height/2+V;return r.createPortal(o.createElement(c.Provider,{value:_},o.createElement(n.OrthographicCamera,{ref:P,position:[0,0,200]}),o.createElement("group",{ref:k,position:[F,G,0]},w)),R)},exports.useGizmoContext=()=>o.useContext(c);
@@ -8,8 +8,9 @@ export declare type GizmoHelperProps = JSX.IntrinsicElements['group'] & {
8
8
  alignment?: 'top-left' | 'top-right' | 'bottom-right' | 'bottom-left';
9
9
  margin?: [number, number];
10
10
  renderPriority?: number;
11
+ autoClear?: boolean;
11
12
  onUpdate?: () => void;
12
13
  onTarget?: () => Vector3;
13
14
  };
14
- export declare const GizmoHelper: ({ alignment, margin, renderPriority, onUpdate, onTarget, children: GizmoHelperComponent, }: GizmoHelperProps) => any;
15
+ export declare const GizmoHelper: ({ alignment, margin, renderPriority, autoClear, onUpdate, onTarget, children: GizmoHelperComponent, }: GizmoHelperProps) => any;
15
16
  export {};
@@ -19,6 +19,7 @@ const GizmoHelper = ({
19
19
  alignment = 'bottom-right',
20
20
  margin = [80, 80],
21
21
  renderPriority = 0,
22
+ autoClear = true,
22
23
  onUpdate,
23
24
  onTarget,
24
25
  children: GizmoHelperComponent
@@ -49,8 +50,7 @@ const GizmoHelper = ({
49
50
  const animating = React.useRef(false);
50
51
  const radius = React.useRef(0);
51
52
  const focusPoint = React.useRef(new Vector3(0, 0, 0));
52
-
53
- const tweenCamera = direction => {
53
+ const tweenCamera = React.useCallback(direction => {
54
54
  animating.current = true;
55
55
  if (defaultControls || onTarget) focusPoint.current = (defaultControls == null ? void 0 : defaultControls.target) || (onTarget == null ? void 0 : onTarget());
56
56
  radius.current = mainCamera.position.distanceTo(target); // Rotate from current camera orientation
@@ -61,27 +61,7 @@ const GizmoHelper = ({
61
61
  dummy.lookAt(targetPosition);
62
62
  q2.copy(dummy.quaternion);
63
63
  invalidate();
64
- };
65
-
66
- const animateStep = delta => {
67
- if (!animating.current) return;
68
-
69
- if (q1.angleTo(q2) < 0.01) {
70
- animating.current = false;
71
- return;
72
- }
73
-
74
- const step = delta * turnRate; // animate position by doing a slerp and then scaling the position on the unit sphere
75
-
76
- q1.rotateTowards(q2, step); // animate orientation
77
-
78
- mainCamera.position.set(0, 0, 1).applyQuaternion(q1).multiplyScalar(radius.current).add(focusPoint.current);
79
- mainCamera.up.set(0, 1, 0).applyQuaternion(q1).normalize();
80
- mainCamera.quaternion.copy(q1);
81
- if (onUpdate) onUpdate();else if (defaultControls) defaultControls.update();
82
- invalidate();
83
- };
84
-
64
+ }, [defaultControls, mainCamera, onTarget, invalidate]);
85
65
  React.useEffect(() => {
86
66
  if (scene.background) {
87
67
  //Interchange the actual scene background with the virtual scene
@@ -92,33 +72,44 @@ const GizmoHelper = ({
92
72
 
93
73
  return () => {
94
74
  // reset on unmount
95
- if (backgroundRef.current) {
96
- scene.background = backgroundRef.current;
97
- }
75
+ if (backgroundRef.current) scene.background = backgroundRef.current;
98
76
  };
99
77
  }, []);
78
+ useFrame((_, delta) => {
79
+ if (virtualCam.current && gizmoRef.current) {
80
+ var _gizmoRef$current;
100
81
 
101
- const beforeRender = () => {
102
- var _gizmoRef$current;
82
+ // Animate step
83
+ if (animating.current) {
84
+ if (q1.angleTo(q2) < 0.01) {
85
+ animating.current = false;
86
+ } else {
87
+ const step = delta * turnRate; // animate position by doing a slerp and then scaling the position on the unit sphere
103
88
 
104
- // Sync gizmo with main camera orientation
105
- matrix.copy(mainCamera.matrix).invert();
106
- (_gizmoRef$current = gizmoRef.current) == null ? void 0 : _gizmoRef$current.quaternion.setFromRotationMatrix(matrix);
107
- };
89
+ q1.rotateTowards(q2, step); // animate orientation
108
90
 
109
- useFrame((_, delta) => {
110
- if (virtualCam.current && gizmoRef.current) {
111
- animateStep(delta);
112
- beforeRender();
113
- gl.autoClear = false;
91
+ mainCamera.position.set(0, 0, 1).applyQuaternion(q1).multiplyScalar(radius.current).add(focusPoint.current);
92
+ mainCamera.up.set(0, 1, 0).applyQuaternion(q1).normalize();
93
+ mainCamera.quaternion.copy(q1);
94
+ if (onUpdate) onUpdate();else if (defaultControls) defaultControls.update();
95
+ invalidate();
96
+ }
97
+ } // Sync Gizmo with main camera orientation
98
+
99
+
100
+ matrix.copy(mainCamera.matrix).invert();
101
+ (_gizmoRef$current = gizmoRef.current) == null ? void 0 : _gizmoRef$current.quaternion.setFromRotationMatrix(matrix); // Render virtual camera
102
+
103
+ if (autoClear) gl.autoClear = false;
114
104
  gl.clearDepth();
115
105
  gl.render(virtualScene, virtualCam.current);
116
106
  }
117
107
  }, renderPriority);
118
- const gizmoHelperContext = {
108
+ const raycast = useCamera(virtualCam);
109
+ const gizmoHelperContext = React.useMemo(() => ({
119
110
  tweenCamera,
120
- raycast: useCamera(virtualCam)
121
- }; // Position gizmo component within scene
111
+ raycast
112
+ }), [tweenCamera]); // Position gizmo component within scene
122
113
 
123
114
  const [marginX, marginY] = margin;
124
115
  const x = alignment.endsWith('-left') ? -size.width / 2 + marginX : size.width / 2 - marginX;
@@ -127,7 +118,6 @@ const GizmoHelper = ({
127
118
  value: gizmoHelperContext
128
119
  }, /*#__PURE__*/React.createElement(OrthographicCamera, {
129
120
  ref: virtualCam,
130
- makeDefault: false,
131
121
  position: [0, 0, 200]
132
122
  }), /*#__PURE__*/React.createElement("group", {
133
123
  ref: gizmoRef,
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("@react-three/fiber"),o=require("./GizmoHelper.cjs.js"),a=require("three");function n(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 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)}require("./OrthographicCamera.cjs.js"),require("react-merge-refs"),require("./useCamera.cjs.js");var s=n(e),c=i(t);const l="#f0f0f0",m="#999",p="black",u="black",f=["Right","Left","Top","Bottom","Front","Back"],h=e=>new a.Vector3(...e).multiplyScalar(.38),y=[[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(h),d=[.25,.25,.25],g=[[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(h),b=g.map((e=>e.toArray().map((e=>0==e?.5:.25)))),x=({hover:e,index:t,font:o="20px Inter var, Arial, sans-serif",faces:n=f,color:i=l,hoverColor:s=m,textColor:h=p,strokeColor:y=u,opacity:d=1})=>{const g=r.useThree((e=>e.gl)),b=c.useMemo((()=>{const e=document.createElement("canvas");e.width=128,e.height=128;const r=e.getContext("2d");return r.fillStyle=i,r.fillRect(0,0,e.width,e.height),r.strokeStyle=y,r.strokeRect(0,0,e.width,e.height),r.font=o,r.textAlign="center",r.fillStyle=h,r.fillText(n[t].toUpperCase(),64,76),new a.CanvasTexture(e)}),[t,n,o,i,h,y]);return c.createElement("meshLambertMaterial",{map:b,"map-anisotropy":g.capabilities.getMaxAnisotropy()||1,attach:"material",color:e?s:"white",transparent:!0,opacity:d})},C=e=>{const{tweenCamera:t,raycast:r}=o.useGizmoContext(),[a,n]=c.useState(null);return c.createElement("mesh",{raycast:r,onPointerOut:e=>{e.stopPropagation(),n(null)},onPointerMove:e=>{e.stopPropagation(),n(Math.floor(e.faceIndex/2))},onClick:e.onClick||(e=>{e.stopPropagation(),t(e.face.normal)})},[...Array(6)].map(((t,r)=>c.createElement(x,s.default({key:r,index:r,hover:a===r},e)))),c.createElement("boxGeometry",null))},v=({onClick:e,dimensions:t,position:r,hoverColor:a=m})=>{const{tweenCamera:n,raycast:i}=o.useGizmoContext(),[s,l]=c.useState(!1);return c.createElement("mesh",{scale:1.01,position:r,raycast:i,onPointerOver:e=>{e.stopPropagation(),l(!0)},onPointerOut:e=>{e.stopPropagation(),l(!1)},onClick:e||(e=>{e.stopPropagation(),n(r)})},c.createElement("meshBasicMaterial",{color:s?a:"white",transparent:!0,opacity:.6,visible:s}),c.createElement("boxGeometry",{args:t}))};exports.GizmoViewcube=e=>c.createElement("group",{scale:[60,60,60]},c.createElement(C,e),g.map(((t,r)=>c.createElement(v,s.default({key:r,position:t,dimensions:b[r]},e)))),y.map(((t,r)=>c.createElement(v,s.default({key:r,position:t,dimensions:d},e)))),c.createElement("ambientLight",{intensity:.5}),c.createElement("pointLight",{position:[10,10,10],intensity:.5}));
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("@react-three/fiber"),o=require("./GizmoHelper.cjs.js"),a=require("three");function n(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 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)}require("./OrthographicCamera.cjs.js"),require("react-merge-refs"),require("./useCamera.cjs.js");var s=n(e),c=i(t);const l="#f0f0f0",m="#999",p="black",u="black",f=["Right","Left","Top","Bottom","Front","Back"],h=e=>new a.Vector3(...e).multiplyScalar(.38),y=[[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(h),d=[.25,.25,.25],g=[[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(h),b=g.map((e=>e.toArray().map((e=>0==e?.5:.25)))),x=({hover:e,index:t,font:o="20px Inter var, Arial, sans-serif",faces:n=f,color:i=l,hoverColor:s=m,textColor:h=p,strokeColor:y=u,opacity:d=1})=>{const g=r.useThree((e=>e.gl)),b=c.useMemo((()=>{const e=document.createElement("canvas");e.width=128,e.height=128;const r=e.getContext("2d");return r.fillStyle=i,r.fillRect(0,0,e.width,e.height),r.strokeStyle=y,r.strokeRect(0,0,e.width,e.height),r.font=o,r.textAlign="center",r.fillStyle=h,r.fillText(n[t].toUpperCase(),64,76),new a.CanvasTexture(e)}),[t,n,o,i,h,y]);return c.createElement("meshLambertMaterial",{map:b,"map-anisotropy":g.capabilities.getMaxAnisotropy()||1,attach:`material-${t}`,color:e?s:"white",transparent:!0,opacity:d})},C=e=>{const{tweenCamera:t,raycast:r}=o.useGizmoContext(),[a,n]=c.useState(null);return c.createElement("mesh",{raycast:r,onPointerOut:e=>{e.stopPropagation(),n(null)},onPointerMove:e=>{e.stopPropagation(),n(Math.floor(e.faceIndex/2))},onClick:e.onClick||(e=>{e.stopPropagation(),t(e.face.normal)})},[...Array(6)].map(((t,r)=>c.createElement(x,s.default({key:r,index:r,hover:a===r},e)))),c.createElement("boxGeometry",null))},v=({onClick:e,dimensions:t,position:r,hoverColor:a=m})=>{const{tweenCamera:n,raycast:i}=o.useGizmoContext(),[s,l]=c.useState(!1);return c.createElement("mesh",{scale:1.01,position:r,raycast:i,onPointerOver:e=>{e.stopPropagation(),l(!0)},onPointerOut:e=>{e.stopPropagation(),l(!1)},onClick:e||(e=>{e.stopPropagation(),n(r)})},c.createElement("meshBasicMaterial",{color:s?a:"white",transparent:!0,opacity:.6,visible:s}),c.createElement("boxGeometry",{args:t}))};exports.GizmoViewcube=e=>c.createElement("group",{scale:[60,60,60]},c.createElement(C,e),g.map(((t,r)=>c.createElement(v,s.default({key:r,position:t,dimensions:b[r]},e)))),y.map(((t,r)=>c.createElement(v,s.default({key:r,position:t,dimensions:d},e)))),c.createElement("ambientLight",{intensity:.5}),c.createElement("pointLight",{position:[10,10,10],intensity:.5}));