@react-three/drei 9.56.5 → 9.56.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -362,6 +362,14 @@ type CameraControlsProps = {
362
362
  camera?: PerspectiveCamera | OrthographicCamera
363
363
  /** DOM element to connect to, default to the state's `gl` renderer */
364
364
  domElement?: HTMLElement
365
+ /** Reference this CameraControls instance as state's `controls` */
366
+ makeDefault?: boolean
367
+ /** Events callbacks, see: https://github.com/yomotsu/camera-controls#events */
368
+ onStart?: (e?: { type: 'controlstart' }) => void
369
+ onEnd?: (e?: { type: 'controlend' }) => void
370
+ onChange?: (e?: { type: 'update' }) => void
371
+ /** While "dragging", state's `events` are disabled by default(for performance). You can explicitly disable this optimisation, by setting this prop to true */
372
+ events?: boolean
365
373
  }
366
374
  ```
367
375
 
@@ -476,6 +484,7 @@ Semi-OrbitControls with spring-physics, polar zoom and snap-back, for presentati
476
484
  polar={[0, Math.PI / 2]} // Vertical limits
477
485
  azimuth={[-Infinity, Infinity]} // Horizontal limits
478
486
  config={{ mass: 1, tension: 170, friction: 26 }} // Spring config
487
+ domElement={events.connected} // The DOM element events for this controller will attach to
479
488
  >
480
489
  <mesh />
481
490
  </PresentationControls>
@@ -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 u=a(e),c=s(t),l=s(r),d=a(o);const i=r.forwardRef(((e,t)=>{r.useMemo((()=>{d.default.install({THREE:c}),n.extend({CameraControlsImpl:d.default})}),[]);const{camera:o,domElement:a,onStart:s,onEnd:i,onChange:f,events:m,regress:v,...b}=e,E=n.useThree((e=>e.camera)),p=n.useThree((e=>e.gl)),h=n.useThree((e=>e.invalidate)),j=n.useThree((e=>e.events)),g=n.useThree((e=>e.setEvents)),O=n.useThree((e=>e.performance)),T=o||E,L=a||j.connected||p.domElement,q=r.useMemo((()=>new d.default(T)),[T]);return n.useFrame(((e,t)=>{q.enabled&&q.update(t)}),-1),r.useEffect((()=>(q.connect(L),()=>{q.disconnect()})),[L,q]),l.useEffect((()=>{m&&g({enabled:!0});const e=e=>{h(),v&&O.regress(),f&&f(e)},t=e=>{s&&s(e),m||g({enabled:!1})},r=e=>{i&&i(e),m||g({enabled:!0})};return q.addEventListener("control",e),q.addEventListener("controlstart",t),q.addEventListener("controlend",r),()=>{q.removeEventListener("control",e),q.removeEventListener("controlstart",t),q.removeEventListener("controlend",r)}}),[q,m,s,i,h,g,v,f]),l.createElement("primitive",u.default({ref:t,object:q},b))}));exports.CameraControls=i;
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 s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function a(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var u=s(e),c=a(t),l=a(r),d=s(o);const f=r.forwardRef(((e,t)=>{r.useMemo((()=>{d.default.install({THREE:c}),n.extend({CameraControlsImpl:d.default})}),[]);const{camera:o,domElement:s,makeDefault:a,onStart:f,onEnd:i,onChange:m,events:v,regress:E,...b}=e,p=n.useThree((e=>e.camera)),h=n.useThree((e=>e.gl)),T=n.useThree((e=>e.invalidate)),g=n.useThree((e=>e.events)),j=n.useThree((e=>e.setEvents)),O=n.useThree((e=>e.set)),L=n.useThree((e=>e.get)),q=n.useThree((e=>e.performance)),y=o||p,C=s||g.connected||h.domElement,x=r.useMemo((()=>new d.default(y)),[y]);return n.useFrame(((e,t)=>{x.enabled&&x.update(t)}),-1),r.useEffect((()=>(x.connect(C),()=>{x.disconnect()})),[C,x]),l.useEffect((()=>{v&&j({enabled:!0});const e=e=>{T(),E&&q.regress(),m&&m(e)},t=e=>{f&&f(e),v||j({enabled:!1})},r=e=>{i&&i(e),v||j({enabled:!0})};return x.addEventListener("update",e),x.addEventListener("controlstart",t),x.addEventListener("controlend",r),()=>{x.removeEventListener("update",e),x.removeEventListener("controlstart",t),x.removeEventListener("controlend",r)}}),[x,v,f,i,T,j,E,m]),r.useEffect((()=>{if(a){const e=L().controls;return O({controls:x}),()=>O({controls:e})}}),[a,x]),l.createElement("primitive",u.default({ref:t,object:x},b))}));exports.CameraControls=f;
@@ -5,6 +5,7 @@ import CameraControlsImpl from 'camera-controls';
5
5
  export declare type CameraControlsProps = Omit<ReactThreeFiber.Overwrite<ReactThreeFiber.Node<CameraControlsImpl, typeof CameraControlsImpl>, {
6
6
  camera?: PerspectiveCamera | OrthographicCamera;
7
7
  domElement?: HTMLElement;
8
+ makeDefault?: boolean;
8
9
  onStart?: (e?: {
9
10
  type: 'controlstart';
10
11
  }) => void;
@@ -12,7 +13,7 @@ export declare type CameraControlsProps = Omit<ReactThreeFiber.Overwrite<ReactTh
12
13
  type: 'controlend';
13
14
  }) => void;
14
15
  onChange?: (e?: {
15
- type: 'control';
16
+ type: 'update';
16
17
  }) => void;
17
18
  events?: boolean;
18
19
  regress?: boolean;
@@ -17,6 +17,7 @@ const CameraControls = /*#__PURE__*/forwardRef((props, ref) => {
17
17
  const {
18
18
  camera,
19
19
  domElement,
20
+ makeDefault,
20
21
  onStart,
21
22
  onEnd,
22
23
  onChange,
@@ -29,17 +30,19 @@ const CameraControls = /*#__PURE__*/forwardRef((props, ref) => {
29
30
  const invalidate = useThree(state => state.invalidate);
30
31
  const events = useThree(state => state.events);
31
32
  const setEvents = useThree(state => state.setEvents);
33
+ const set = useThree(state => state.set);
34
+ const get = useThree(state => state.get);
32
35
  const performance = useThree(state => state.performance);
33
36
  const explCamera = camera || defaultCamera;
34
37
  const explDomElement = domElement || events.connected || gl.domElement;
35
- const cameraControls = useMemo(() => new CameraControlsImpl(explCamera), [explCamera]);
38
+ const controls = useMemo(() => new CameraControlsImpl(explCamera), [explCamera]);
36
39
  useFrame((state, delta) => {
37
- if (cameraControls.enabled) cameraControls.update(delta);
40
+ if (controls.enabled) controls.update(delta);
38
41
  }, -1);
39
42
  useEffect(() => {
40
- cameraControls.connect(explDomElement);
41
- return () => void cameraControls.disconnect();
42
- }, [explDomElement, cameraControls]);
43
+ controls.connect(explDomElement);
44
+ return () => void controls.disconnect();
45
+ }, [explDomElement, controls]);
43
46
  React.useEffect(() => {
44
47
  if (enableEvents) {
45
48
  setEvents({
@@ -67,18 +70,29 @@ const CameraControls = /*#__PURE__*/forwardRef((props, ref) => {
67
70
  });
68
71
  };
69
72
 
70
- cameraControls.addEventListener('control', callback);
71
- cameraControls.addEventListener('controlstart', onStartCb);
72
- cameraControls.addEventListener('controlend', onEndCb);
73
+ controls.addEventListener('update', callback);
74
+ controls.addEventListener('controlstart', onStartCb);
75
+ controls.addEventListener('controlend', onEndCb);
73
76
  return () => {
74
- cameraControls.removeEventListener('control', callback);
75
- cameraControls.removeEventListener('controlstart', onStartCb);
76
- cameraControls.removeEventListener('controlend', onEndCb);
77
+ controls.removeEventListener('update', callback);
78
+ controls.removeEventListener('controlstart', onStartCb);
79
+ controls.removeEventListener('controlend', onEndCb);
77
80
  };
78
- }, [cameraControls, enableEvents, onStart, onEnd, invalidate, setEvents, regress, onChange]);
81
+ }, [controls, enableEvents, onStart, onEnd, invalidate, setEvents, regress, onChange]);
82
+ useEffect(() => {
83
+ if (makeDefault) {
84
+ const old = get().controls;
85
+ set({
86
+ controls: controls
87
+ });
88
+ return () => set({
89
+ controls: old
90
+ });
91
+ }
92
+ }, [makeDefault, controls]);
79
93
  return /*#__PURE__*/React.createElement("primitive", _extends({
80
94
  ref: ref,
81
- object: cameraControls
95
+ object: controls
82
96
  }, restProps));
83
97
  });
84
98
 
@@ -11,4 +11,4 @@ export declare type MapControlsProps = ReactThreeFiber.Overwrite<ReactThreeFiber
11
11
  onEnd?: (e?: THREE.Event) => void;
12
12
  domElement?: HTMLElement;
13
13
  }>;
14
- export declare const MapControls: React.ForwardRefExoticComponent<Pick<MapControlsProps, "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" | "reset" | "enabled" | "connect" | "update" | "target" | "onStart" | "keys" | "touches" | "domElement" | "makeDefault" | "minDistance" | "maxDistance" | "minZoom" | "maxZoom" | "minPolarAngle" | "maxPolarAngle" | "minAzimuthAngle" | "maxAzimuthAngle" | "enableDamping" | "dampingFactor" | "enableZoom" | "zoomSpeed" | "enableRotate" | "rotateSpeed" | "enablePan" | "panSpeed" | "screenSpacePanning" | "keyPanSpeed" | "autoRotate" | "autoRotateSpeed" | "reverseOrbit" | "mouseButtons" | "target0" | "position0" | "zoom0" | "_domElementKeyEvents" | "getPolarAngle" | "getAzimuthalAngle" | "setPolarAngle" | "setAzimuthalAngle" | "getDistance" | "listenToKeyEvents" | "saveState" | "onEnd"> & React.RefAttributes<MapControlsImpl>>;
14
+ export declare const MapControls: React.ForwardRefExoticComponent<Pick<MapControlsProps, "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" | "reset" | "enabled" | "connect" | "update" | "target" | "domElement" | "onStart" | "keys" | "touches" | "makeDefault" | "minDistance" | "maxDistance" | "minZoom" | "maxZoom" | "minPolarAngle" | "maxPolarAngle" | "minAzimuthAngle" | "maxAzimuthAngle" | "enableDamping" | "dampingFactor" | "enableZoom" | "zoomSpeed" | "enableRotate" | "rotateSpeed" | "enablePan" | "panSpeed" | "screenSpacePanning" | "keyPanSpeed" | "autoRotate" | "autoRotateSpeed" | "reverseOrbit" | "mouseButtons" | "target0" | "position0" | "zoom0" | "_domElementKeyEvents" | "getPolarAngle" | "getAzimuthalAngle" | "setPolarAngle" | "setAzimuthalAngle" | "getDistance" | "listenToKeyEvents" | "saveState" | "onEnd"> & React.RefAttributes<MapControlsImpl>>;
@@ -12,4 +12,4 @@ export declare type TrackballControlsProps = ReactThreeFiber.Overwrite<ReactThre
12
12
  onStart?: (e?: THREE.Event) => void;
13
13
  onEnd?: (e?: THREE.Event) => void;
14
14
  }>;
15
- export declare const TrackballControls: React.ForwardRefExoticComponent<Pick<TrackballControlsProps, "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" | "screen" | "reset" | "enabled" | "connect" | "update" | "target" | "onStart" | "keys" | "domElement" | "makeDefault" | "minDistance" | "maxDistance" | "zoomSpeed" | "rotateSpeed" | "panSpeed" | "mouseButtons" | "onEnd" | "regress" | "noRotate" | "noZoom" | "noPan" | "staticMoving" | "dynamicDampingFactor" | "cursorZoom" | "handleResize"> & React.RefAttributes<TrackballControlsImpl>>;
15
+ export declare const TrackballControls: React.ForwardRefExoticComponent<Pick<TrackballControlsProps, "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" | "screen" | "reset" | "enabled" | "connect" | "update" | "target" | "domElement" | "onStart" | "keys" | "makeDefault" | "minDistance" | "maxDistance" | "zoomSpeed" | "rotateSpeed" | "panSpeed" | "mouseButtons" | "onEnd" | "regress" | "noRotate" | "noZoom" | "noPan" | "staticMoving" | "dynamicDampingFactor" | "cursorZoom" | "handleResize"> & React.RefAttributes<TrackballControlsImpl>>;
@@ -24,4 +24,4 @@ export declare type TransformControlsProps = ReactThreeFiber.Object3DNode<Transf
24
24
  onObjectChange?: (e?: THREE.Event) => void;
25
25
  makeDefault?: boolean;
26
26
  };
27
- export declare const TransformControls: React.ForwardRefExoticComponent<Pick<TransformControlsProps, "object" | "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" | "onChange" | "onMouseDown" | "onMouseUp" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "camera" | "size" | "space" | "reset" | "enabled" | "connect" | "update" | "setSize" | "axis" | "domElement" | "makeDefault" | "isTransformControls" | "detach" | "getMode" | "setMode" | "setTranslationSnap" | "setRotationSnap" | "setScaleSnap" | "setSpace" | "onObjectChange" | "mode" | "translationSnap" | "rotationSnap" | "scaleSnap" | "showX" | "showY" | "showZ"> & React.RefAttributes<TransformControlsImpl<THREE.Camera>>>;
27
+ export declare const TransformControls: React.ForwardRefExoticComponent<Pick<TransformControlsProps, "object" | "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" | "onChange" | "onMouseDown" | "onMouseUp" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "camera" | "size" | "space" | "reset" | "enabled" | "connect" | "update" | "setSize" | "domElement" | "axis" | "makeDefault" | "isTransformControls" | "detach" | "getMode" | "setMode" | "setTranslationSnap" | "setRotationSnap" | "setScaleSnap" | "setSpace" | "onObjectChange" | "mode" | "translationSnap" | "rotationSnap" | "scaleSnap" | "showX" | "showY" | "showZ"> & React.RefAttributes<TransformControlsImpl<THREE.Camera>>>;