@react-three/drei 10.0.8 → 10.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),n=require("@react-three/fiber"),o=require("camera-controls");function a(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 c=a(e),u=s(r),i=a(o);const l=r.forwardRef(((e,o)=>{r.useMemo((()=>{const e={Box3:t.Box3,MathUtils:{clamp:t.MathUtils.clamp},Matrix4:t.Matrix4,Quaternion:t.Quaternion,Raycaster:t.Raycaster,Sphere:t.Sphere,Spherical:t.Spherical,Vector2:t.Vector2,Vector3:t.Vector3,Vector4:t.Vector4};i.default.install({THREE:e}),n.extend({CameraControlsImpl:i.default})}),[]);const{camera:a,domElement:s,makeDefault:l,onStart:d,onEnd:f,onChange:m,regress:v,...p}=e,E=n.useThree((e=>e.camera)),h=n.useThree((e=>e.gl)),b=n.useThree((e=>e.invalidate)),L=n.useThree((e=>e.events)),g=n.useThree((e=>e.setEvents)),j=n.useThree((e=>e.set)),x=n.useThree((e=>e.get)),T=n.useThree((e=>e.performance)),y=a||E,M=s||L.connected||h.domElement,O=r.useMemo((()=>new i.default(y)),[y]);return n.useFrame(((e,t)=>{O.enabled&&O.update(t)}),-1),r.useEffect((()=>(O.connect(M),()=>{O.disconnect()})),[M,O]),r.useEffect((()=>{const e=e=>{b(),v&&T.regress(),m&&m(e)},t=e=>{d&&d(e)},r=e=>{f&&f(e)};return O.addEventListener("update",e),O.addEventListener("controlstart",t),O.addEventListener("controlend",r),O.addEventListener("control",e),O.addEventListener("transitionstart",e),O.addEventListener("wake",e),()=>{O.removeEventListener("update",e),O.removeEventListener("controlstart",t),O.removeEventListener("controlend",r),O.removeEventListener("control",e),O.removeEventListener("transitionstart",e),O.removeEventListener("wake",e)}}),[O,d,f,b,g,v,m]),r.useEffect((()=>{if(l){const e=x().controls;return j({controls:O}),()=>j({controls:e})}}),[l,O]),u.createElement("primitive",c.default({ref:o,object:O},p))}));Object.defineProperty(exports,"CameraControlsImpl",{enumerable:!0,get:function(){return i.default}}),exports.CameraControls=l;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),n=require("@react-three/fiber"),o=require("camera-controls");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function l(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var s=a(e),u=l(r),c=a(o);const i=r.forwardRef(((e,o)=>{r.useMemo((()=>{const e={Box3:t.Box3,MathUtils:{clamp:t.MathUtils.clamp},Matrix4:t.Matrix4,Quaternion:t.Quaternion,Raycaster:t.Raycaster,Sphere:t.Sphere,Spherical:t.Spherical,Vector2:t.Vector2,Vector3:t.Vector3,Vector4:t.Vector4};c.default.install({THREE:e}),n.extend({CameraControlsImpl:c.default})}),[]);const{camera:a,domElement:l,makeDefault:i,onControlStart:d,onControl:f,onControlEnd:v,onTransitionStart:m,onUpdate:E,onWake:p,onRest:h,onSleep:L,onStart:b,onEnd:C,onChange:T,regress:g,...j}=e,x=n.useThree((e=>e.camera)),y=n.useThree((e=>e.gl)),M=n.useThree((e=>e.invalidate)),O=n.useThree((e=>e.events)),S=n.useThree((e=>e.setEvents)),V=n.useThree((e=>e.set)),k=n.useThree((e=>e.get)),q=n.useThree((e=>e.performance)),w=a||x,R=l||O.connected||y.domElement,P=r.useMemo((()=>new c.default(w)),[w]);return n.useFrame(((e,t)=>{P.enabled&&P.update(t)}),-1),r.useEffect((()=>(P.connect(R),()=>{P.disconnect()})),[R,P]),r.useEffect((()=>{function e(){M(),g&&q.regress()}const t=t=>{e(),null==d||d(t),null==b||b(t)},r=t=>{e(),null==f||f(t),null==T||T(t)},n=e=>{null==v||v(e),null==C||C(e)},o=t=>{e(),null==m||m(t),null==T||T(t)},a=t=>{e(),null==E||E(t),null==T||T(t)},l=t=>{e(),null==p||p(t),null==T||T(t)},s=e=>{null==h||h(e)},u=e=>{null==L||L(e)};return P.addEventListener("controlstart",t),P.addEventListener("control",r),P.addEventListener("controlend",n),P.addEventListener("transitionstart",o),P.addEventListener("update",a),P.addEventListener("wake",l),P.addEventListener("rest",s),P.addEventListener("sleep",u),()=>{P.removeEventListener("controlstart",t),P.removeEventListener("control",r),P.removeEventListener("controlend",n),P.removeEventListener("transitionstart",o),P.removeEventListener("update",a),P.removeEventListener("wake",l),P.removeEventListener("rest",s),P.removeEventListener("sleep",u)}}),[P,M,S,g,q,d,f,v,m,E,p,h,L,T,b,C]),r.useEffect((()=>{if(i){const e=k().controls;return V({controls:P}),()=>V({controls:e})}}),[i,P]),u.createElement("primitive",s.default({ref:o,object:P},j))}));Object.defineProperty(exports,"CameraControlsImpl",{enumerable:!0,get:function(){return c.default}}),exports.CameraControls=i;
@@ -6,6 +6,30 @@ export type CameraControlsProps = Omit<Overwrite<ThreeElement<typeof CameraContr
6
6
  camera?: PerspectiveCamera | OrthographicCamera;
7
7
  domElement?: HTMLElement;
8
8
  makeDefault?: boolean;
9
+ onControlStart?: (e?: {
10
+ type: 'controlstart';
11
+ }) => void;
12
+ onControl?: (e?: {
13
+ type: 'control';
14
+ }) => void;
15
+ onControlEnd?: (e?: {
16
+ type: 'controlend';
17
+ }) => void;
18
+ onTransitionStart?: (e?: {
19
+ type: 'transitionstart';
20
+ }) => void;
21
+ onUpdate?: (e?: {
22
+ type: 'update';
23
+ }) => void;
24
+ onWake?: (e?: {
25
+ type: 'wake';
26
+ }) => void;
27
+ onRest?: (e?: {
28
+ type: 'rest';
29
+ }) => void;
30
+ onSleep?: (e?: {
31
+ type: 'sleep';
32
+ }) => void;
9
33
  onStart?: (e?: {
10
34
  type: 'controlstart';
11
35
  }) => void;
@@ -13,7 +37,7 @@ export type CameraControlsProps = Omit<Overwrite<ThreeElement<typeof CameraContr
13
37
  type: 'controlend';
14
38
  }) => void;
15
39
  onChange?: (e?: {
16
- type: 'update';
40
+ type: string;
17
41
  }) => void;
18
42
  events?: boolean;
19
43
  regress?: boolean;
@@ -36,6 +36,14 @@ const CameraControls = /* @__PURE__ */forwardRef((props, ref) => {
36
36
  camera,
37
37
  domElement,
38
38
  makeDefault,
39
+ onControlStart,
40
+ onControl,
41
+ onControlEnd,
42
+ onTransitionStart,
43
+ onUpdate,
44
+ onWake,
45
+ onRest,
46
+ onSleep,
39
47
  onStart,
40
48
  onEnd,
41
49
  onChange,
@@ -61,32 +69,64 @@ const CameraControls = /* @__PURE__ */forwardRef((props, ref) => {
61
69
  return () => void controls.disconnect();
62
70
  }, [explDomElement, controls]);
63
71
  useEffect(() => {
64
- const callback = e => {
72
+ function invalidateAndRegress() {
65
73
  invalidate();
66
74
  if (regress) performance.regress();
67
- if (onChange) onChange(e);
75
+ }
76
+ const handleControlStart = e => {
77
+ invalidateAndRegress();
78
+ onControlStart == null || onControlStart(e);
79
+ onStart == null || onStart(e); // backwards compatibility
80
+ };
81
+ const handleControl = e => {
82
+ invalidateAndRegress();
83
+ onControl == null || onControl(e);
84
+ onChange == null || onChange(e); // backwards compatibility
85
+ };
86
+ const handleControlEnd = e => {
87
+ onControlEnd == null || onControlEnd(e);
88
+ onEnd == null || onEnd(e); // backwards compatibility
89
+ };
90
+ const handleTransitionStart = e => {
91
+ invalidateAndRegress();
92
+ onTransitionStart == null || onTransitionStart(e);
93
+ onChange == null || onChange(e); // backwards compatibility
94
+ };
95
+ const handleUpdate = e => {
96
+ invalidateAndRegress();
97
+ onUpdate == null || onUpdate(e);
98
+ onChange == null || onChange(e); // backwards compatibility
99
+ };
100
+ const handleWake = e => {
101
+ invalidateAndRegress();
102
+ onWake == null || onWake(e);
103
+ onChange == null || onChange(e); // backwards compatibility
68
104
  };
69
- const onStartCb = e => {
70
- if (onStart) onStart(e);
105
+ const handleRest = e => {
106
+ onRest == null || onRest(e);
71
107
  };
72
- const onEndCb = e => {
73
- if (onEnd) onEnd(e);
108
+ const handleSleep = e => {
109
+ onSleep == null || onSleep(e);
74
110
  };
75
- controls.addEventListener('update', callback);
76
- controls.addEventListener('controlstart', onStartCb);
77
- controls.addEventListener('controlend', onEndCb);
78
- controls.addEventListener('control', callback);
79
- controls.addEventListener('transitionstart', callback);
80
- controls.addEventListener('wake', callback);
111
+ controls.addEventListener('controlstart', handleControlStart);
112
+ controls.addEventListener('control', handleControl);
113
+ controls.addEventListener('controlend', handleControlEnd);
114
+ controls.addEventListener('transitionstart', handleTransitionStart);
115
+ controls.addEventListener('update', handleUpdate);
116
+ controls.addEventListener('wake', handleWake);
117
+ controls.addEventListener('rest', handleRest);
118
+ controls.addEventListener('sleep', handleSleep);
81
119
  return () => {
82
- controls.removeEventListener('update', callback);
83
- controls.removeEventListener('controlstart', onStartCb);
84
- controls.removeEventListener('controlend', onEndCb);
85
- controls.removeEventListener('control', callback);
86
- controls.removeEventListener('transitionstart', callback);
87
- controls.removeEventListener('wake', callback);
120
+ controls.removeEventListener('controlstart', handleControlStart);
121
+ controls.removeEventListener('control', handleControl);
122
+ controls.removeEventListener('controlend', handleControlEnd);
123
+ controls.removeEventListener('transitionstart', handleTransitionStart);
124
+ controls.removeEventListener('update', handleUpdate);
125
+ controls.removeEventListener('wake', handleWake);
126
+ controls.removeEventListener('rest', handleRest);
127
+ controls.removeEventListener('sleep', handleSleep);
88
128
  };
89
- }, [controls, onStart, onEnd, invalidate, setEvents, regress, onChange]);
129
+ }, [controls, invalidate, setEvents, regress, performance, onControlStart, onControl, onControlEnd, onTransitionStart, onUpdate, onWake, onRest, onSleep, onChange, onStart, onEnd]);
90
130
  useEffect(() => {
91
131
  if (makeDefault) {
92
132
  const old = get().controls;
@@ -97,6 +137,7 @@ const CameraControls = /* @__PURE__ */forwardRef((props, ref) => {
97
137
  controls: old
98
138
  });
99
139
  }
140
+ // eslint-disable-next-line react-hooks/exhaustive-deps
100
141
  }, [makeDefault, controls]);
101
142
  return /*#__PURE__*/React.createElement("primitive", _extends({
102
143
  ref: ref,