@react-three/drei 9.32.12 → 9.33.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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)),f=u||c,[d]=a.useState((()=>new n.DeviceOrientationControls(f)));return a.useEffect((()=>{const e=e=>{s(),i&&i(e)};return null==d||null==d.addEventListener||d.addEventListener("change",e),()=>null==d||null==d.removeEventListener?void 0:d.removeEventListener("change",e)}),[i,d,s]),t.useFrame((()=>null==d?void 0:d.update()),-1),a.useEffect((()=>{const e=d;return null==e||e.connect(),()=>null==e?void 0:e.dispose()}),[d]),d?a.createElement("primitive",o.default({ref:r,object:d},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 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 c=u(e),i=o(r);const l=i.forwardRef(((e,r)=>{const{camera:u,onChange:o,makeDefault:l,...s}=e,a=t.useThree((e=>e.camera)),f=t.useThree((e=>e.invalidate)),d=t.useThree((e=>e.get)),v=t.useThree((e=>e.set)),b=u||a,[h]=i.useState((()=>new n.DeviceOrientationControls(b)));return i.useEffect((()=>{const e=e=>{f(),o&&o(e)};return null==h||null==h.addEventListener||h.addEventListener("change",e),()=>null==h||null==h.removeEventListener?void 0:h.removeEventListener("change",e)}),[o,h,f]),t.useFrame((()=>null==h?void 0:h.update()),-1),i.useEffect((()=>{const e=h;return null==e||e.connect(),()=>null==e?void 0:e.dispose()}),[h]),i.useEffect((()=>{if(l){const e=d().controls;return v({controls:h}),()=>v({controls:e})}}),[l,h]),h?i.createElement("primitive",c.default({ref:r,object:h},s)):null}));exports.DeviceOrientationControls=l;
@@ -5,5 +5,6 @@ import { DeviceOrientationControls as DeviceOrientationControlsImp } from 'three
5
5
  export declare type DeviceOrientationControlsProps = ReactThreeFiber.Object3DNode<DeviceOrientationControlsImp, typeof DeviceOrientationControlsImp> & {
6
6
  camera?: THREE.Camera;
7
7
  onChange?: (e?: THREE.Event) => void;
8
+ makeDefault?: boolean;
8
9
  };
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" | "connect" | "disconnect" | "update" | "deviceOrientation" | "screenOrientation" | "alphaOffset"> & React.RefAttributes<DeviceOrientationControlsImp>>;
10
+ 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" | "connect" | "disconnect" | "update" | "makeDefault" | "deviceOrientation" | "screenOrientation" | "alphaOffset"> & React.RefAttributes<DeviceOrientationControlsImp>>;
@@ -7,10 +7,13 @@ const DeviceOrientationControls = /*#__PURE__*/React.forwardRef((props, ref) =>
7
7
  const {
8
8
  camera,
9
9
  onChange,
10
+ makeDefault,
10
11
  ...rest
11
12
  } = props;
12
13
  const defaultCamera = useThree(state => state.camera);
13
14
  const invalidate = useThree(state => state.invalidate);
15
+ const get = useThree(state => state.get);
16
+ const set = useThree(state => state.set);
14
17
  const explCamera = camera || defaultCamera;
15
18
  const [controls] = React.useState(() => new DeviceOrientationControls$1(explCamera));
16
19
  React.useEffect(() => {
@@ -28,6 +31,17 @@ const DeviceOrientationControls = /*#__PURE__*/React.forwardRef((props, ref) =>
28
31
  current == null ? void 0 : current.connect();
29
32
  return () => current == null ? void 0 : current.dispose();
30
33
  }, [controls]);
34
+ React.useEffect(() => {
35
+ if (makeDefault) {
36
+ const old = get().controls;
37
+ set({
38
+ controls
39
+ });
40
+ return () => set({
41
+ controls: old
42
+ });
43
+ }
44
+ }, [makeDefault, controls]);
31
45
  return controls ? /*#__PURE__*/React.createElement("primitive", _extends({
32
46
  ref: ref,
33
47
  object: controls
@@ -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 s=u(e),c=o(r);const a=c.forwardRef((({domElement:e,...r},u)=>{const o=t.useThree((e=>e.camera)),a=t.useThree((e=>e.gl)),i=t.useThree((e=>e.events)),l=e||i.connected||a.domElement,[f]=c.useState((()=>new n.FirstPersonControls(o,l)));return t.useFrame(((e,r)=>{f.update(r)}),-1),f?c.createElement("primitive",s.default({ref:u,object:f},r)):null}));exports.FirstPersonControls=a;
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 s=u(e),c=o(r);const l=c.forwardRef((({domElement:e,makeDefault:r,...u},o)=>{const l=t.useThree((e=>e.camera)),a=t.useThree((e=>e.gl)),f=t.useThree((e=>e.events)),i=t.useThree((e=>e.get)),d=t.useThree((e=>e.set)),b=e||f.connected||a.domElement,[m]=c.useState((()=>new n.FirstPersonControls(l,b)));return c.useEffect((()=>{if(r){const e=i().controls;return d({controls:m}),()=>d({controls:e})}}),[r,m]),t.useFrame(((e,r)=>{m.update(r)}),-1),m?c.createElement("primitive",s.default({ref:o,object:m},u)):null}));exports.FirstPersonControls=l;
@@ -3,5 +3,6 @@ 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
5
  domElement?: HTMLElement;
6
+ makeDefault?: boolean;
6
7
  };
7
- 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" | "connect" | "update" | "domElement" | "movementSpeed" | "autoForward" | "handleResize" | "lookSpeed" | "lookVertical" | "activeLook" | "heightSpeed" | "heightCoef" | "heightMin" | "heightMax" | "constrainVertical" | "verticalMin" | "verticalMax" | "mouseDragOn"> & React.RefAttributes<FirstPersonControlImpl>>;
8
+ 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" | "connect" | "update" | "domElement" | "makeDefault" | "movementSpeed" | "autoForward" | "handleResize" | "lookSpeed" | "lookVertical" | "activeLook" | "heightSpeed" | "heightCoef" | "heightMin" | "heightMax" | "constrainVertical" | "verticalMin" | "verticalMax" | "mouseDragOn"> & React.RefAttributes<FirstPersonControlImpl>>;
@@ -5,13 +5,27 @@ import { FirstPersonControls as FirstPersonControls$1 } from 'three-stdlib';
5
5
 
6
6
  const FirstPersonControls = /*#__PURE__*/React.forwardRef(({
7
7
  domElement,
8
+ makeDefault,
8
9
  ...props
9
10
  }, ref) => {
10
11
  const camera = useThree(state => state.camera);
11
12
  const gl = useThree(state => state.gl);
12
13
  const events = useThree(state => state.events);
14
+ const get = useThree(state => state.get);
15
+ const set = useThree(state => state.set);
13
16
  const explDomElement = domElement || events.connected || gl.domElement;
14
17
  const [controls] = React.useState(() => new FirstPersonControls$1(camera, explDomElement));
18
+ React.useEffect(() => {
19
+ if (makeDefault) {
20
+ const old = get().controls;
21
+ set({
22
+ controls
23
+ });
24
+ return () => set({
25
+ controls: old
26
+ });
27
+ }
28
+ }, [makeDefault, controls]);
15
29
  useFrame((_, delta) => {
16
30
  controls.update(delta);
17
31
  }, -1);
@@ -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 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 s=u(e),c=o(r);const a=c.forwardRef((({domElement:e,...r},u)=>{const{onChange:o,...a}=r,i=t.useThree((e=>e.invalidate)),l=t.useThree((e=>e.camera)),f=t.useThree((e=>e.gl)),d=t.useThree((e=>e.events)),v=e||d.connected||f.domElement,b=c.useMemo((()=>new n.FlyControls(l)),[l]);return c.useEffect((()=>(b.connect(v),()=>{b.dispose()})),[v,b,i]),c.useEffect((()=>{const e=e=>{i(),o&&o(e)};return null==b.addEventListener||b.addEventListener("change",e),()=>null==b.removeEventListener?void 0:b.removeEventListener("change",e)}),[o,i]),t.useFrame(((e,t)=>b.update(t))),c.createElement("primitive",s.default({ref:u,object:b,args:[l,v]},a))}));exports.FlyControls=a;
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 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 s=u(e),c=o(r);const a=c.forwardRef((({domElement:e,...r},u)=>{const{onChange:o,makeDefault:a,...l}=r,i=t.useThree((e=>e.invalidate)),f=t.useThree((e=>e.camera)),d=t.useThree((e=>e.gl)),v=t.useThree((e=>e.events)),m=t.useThree((e=>e.get)),b=t.useThree((e=>e.set)),h=e||v.connected||d.domElement,p=c.useMemo((()=>new n.FlyControls(f)),[f]);return c.useEffect((()=>(p.connect(h),()=>{p.dispose()})),[h,p,i]),c.useEffect((()=>{const e=e=>{i(),o&&o(e)};return null==p.addEventListener||p.addEventListener("change",e),()=>null==p.removeEventListener?void 0:p.removeEventListener("change",e)}),[o,i]),c.useEffect((()=>{if(a){const e=m().controls;return b({controls:p}),()=>b({controls:e})}}),[a,p]),t.useFrame(((e,t)=>p.update(t))),c.createElement("primitive",s.default({ref:u,object:p,args:[f,h]},l))}));exports.FlyControls=a;
@@ -5,5 +5,6 @@ import { FlyControls as FlyControlsImpl } from 'three-stdlib';
5
5
  export declare type FlyControlsProps = ReactThreeFiber.Object3DNode<FlyControlsImpl, typeof FlyControlsImpl> & {
6
6
  onChange?: (e?: THREE.Event) => void;
7
7
  domElement?: HTMLElement;
8
+ makeDefault?: boolean;
8
9
  };
9
- export declare const FlyControls: React.ForwardRefExoticComponent<Pick<FlyControlsProps, "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 | "connect" | "update" | "domElement" | "movementSpeed" | "rollSpeed" | "dragToLook" | "autoForward"> & React.RefAttributes<FlyControlsImpl>>;
10
+ export declare const FlyControls: React.ForwardRefExoticComponent<Pick<FlyControlsProps, "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 | "connect" | "update" | "domElement" | "makeDefault" | "movementSpeed" | "rollSpeed" | "dragToLook" | "autoForward"> & React.RefAttributes<FlyControlsImpl>>;
@@ -9,12 +9,15 @@ const FlyControls = /*#__PURE__*/React.forwardRef(({
9
9
  }, fref) => {
10
10
  const {
11
11
  onChange,
12
+ makeDefault,
12
13
  ...rest
13
14
  } = props;
14
15
  const invalidate = useThree(state => state.invalidate);
15
16
  const camera = useThree(state => state.camera);
16
17
  const gl = useThree(state => state.gl);
17
18
  const events = useThree(state => state.events);
19
+ const get = useThree(state => state.get);
20
+ const set = useThree(state => state.set);
18
21
  const explDomElement = domElement || events.connected || gl.domElement;
19
22
  const controls = React.useMemo(() => new FlyControls$1(camera), [camera]);
20
23
  React.useEffect(() => {
@@ -30,6 +33,17 @@ const FlyControls = /*#__PURE__*/React.forwardRef(({
30
33
  controls.addEventListener == null ? void 0 : controls.addEventListener('change', callback);
31
34
  return () => controls.removeEventListener == null ? void 0 : controls.removeEventListener('change', callback);
32
35
  }, [onChange, invalidate]);
36
+ React.useEffect(() => {
37
+ if (makeDefault) {
38
+ const old = get().controls;
39
+ set({
40
+ controls
41
+ });
42
+ return () => set({
43
+ controls: old
44
+ });
45
+ }
46
+ }, [makeDefault, controls]);
33
47
  useFrame((_, delta) => controls.update(delta));
34
48
  return /*#__PURE__*/React.createElement("primitive", _extends({
35
49
  ref: fref,
@@ -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"),a=require("react-merge-refs"),c=require("react-composer");function i(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 o=i(e),u=s(t),l=s(r),f=i(a),d=i(c);const m=new u.Matrix4,y=new u.Matrix4,p=[],h=new u.Mesh;class x extends u.Group{constructor(){super(),this.color=new u.Color("white"),this.instance={current:void 0},this.instanceKey={current:void 0}}get geometry(){var e;return null==(e=this.instance.current)?void 0:e.geometry}raycast(e,t){const r=this.instance.current;if(!r)return;if(!r.geometry||!r.material)return;h.geometry=r.geometry;const n=r.matrixWorld;let a=r.userData.instances.indexOf(this.instanceKey);if(!(-1===a||a>r.count)){r.getMatrixAt(a,m),y.multiplyMatrices(n,m),h.matrixWorld=y,h.raycast(e,p);for(let e=0,r=p.length;e<r;e++){const r=p[e];r.instanceId=a,r.object=this,t.push(r)}p.length=0}}}let g,M;const b=l.createContext(null),w=new u.Matrix4,v=new u.Matrix4,A=new u.Matrix4,E=new u.Vector3,j=new u.Quaternion,O=new u.Vector3,P=l.forwardRef((({context:e,children:t,...r},a)=>{l.useMemo((()=>n.extend({PositionMesh:x})),[]);const c=l.useRef(),{subscribe:i,getParent:s}=l.useContext(e||b);return l.useLayoutEffect((()=>i(c)),[]),l.createElement("positionMesh",o.default({instance:s(),instanceKey:c,ref:f.default([a,c])},r),t)})),C=l.forwardRef((({children:e,range:t,limit:r=1e3,frames:a=1/0,...c},i)=>{const[{context:s,instance:d}]=l.useState((()=>{const e=l.createContext(null);return{context:e,instance:l.forwardRef(((t,r)=>l.createElement(P,o.default({context:e},t,{ref:r}))))}})),m=l.useRef(null),[y,p]=l.useState([]),[[h,x]]=l.useState((()=>{const e=new Float32Array(16*r);for(g=0;g<r;g++)A.identity().toArray(e,16*g);return[e,new Float32Array([...new Array(3*r)].map((()=>1)))]}));l.useEffect((()=>{m.current.instanceMatrix.needsUpdate=!0}));let C=0,D=0;n.useFrame((()=>{if(a===1/0||C<a){for(m.current.updateMatrix(),m.current.updateMatrixWorld(),w.copy(m.current.matrixWorld).invert(),D=Math.min(r,void 0!==t?t:r,y.length),m.current.count=D,m.current.instanceMatrix.updateRange.count=16*D,m.current.instanceColor.updateRange.count=3*D,g=0;g<y.length;g++)M=y[g].current,M.matrixWorld.decompose(E,j,O),v.compose(E,j,O).premultiply(w),v.toArray(h,16*g),m.current.instanceMatrix.needsUpdate=!0,M.color.toArray(x,3*g),m.current.instanceColor.needsUpdate=!0;C++}}));const R=l.useMemo((()=>({getParent:()=>m,subscribe:e=>(p((t=>[...t,e])),()=>p((t=>t.filter((t=>t.current!==e.current)))))})),[]);return l.createElement("instancedMesh",o.default({userData:{instances:y},matrixAutoUpdate:!1,ref:f.default([i,m]),args:[null,null,0],raycast:()=>null},c),l.createElement("instancedBufferAttribute",{attach:"instanceMatrix",count:h.length/16,array:h,itemSize:16,usage:u.DynamicDrawUsage}),l.createElement("instancedBufferAttribute",{attach:"instanceColor",count:x.length/3,array:x,itemSize:3,usage:u.DynamicDrawUsage}),"function"==typeof e?l.createElement(s.Provider,{value:R},e(d)):l.createElement(b.Provider,{value:R},e))}));exports.Instance=P,exports.Instances=C,exports.Merged=function({meshes:e,children:t,...r}){const n=Array.isArray(e);if(!n)for(const t of Object.keys(e))e[t].isMesh||delete e[t];return l.createElement(d.default,{components:(n?e:Object.values(e)).map((({geometry:e,material:t})=>l.createElement(C,o.default({key:e.uuid,geometry:e,material:t},r))))},(r=>n?t(...r):t(Object.keys(e).filter((t=>e[t].isMesh)).reduce(((e,t,n)=>({...e,[t]:r[n]})),{}))))};
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"),a=require("react-merge-refs"),c=require("react-composer");function i(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 o=i(e),u=s(t),l=s(r),f=i(a),d=i(c);const m=new u.Matrix4,y=new u.Matrix4,p=[],h=new u.Mesh;class x extends u.Group{constructor(){super(),this.color=new u.Color("white"),this.instance={current:void 0},this.instanceKey={current:void 0}}get geometry(){var e;return null==(e=this.instance.current)?void 0:e.geometry}raycast(e,t){const r=this.instance.current;if(!r)return;if(!r.geometry||!r.material)return;h.geometry=r.geometry;const n=r.matrixWorld,a=r.userData.instances.indexOf(this.instanceKey);if(!(-1===a||a>r.count)){r.getMatrixAt(a,m),y.multiplyMatrices(n,m),h.matrixWorld=y,h.raycast(e,p);for(let e=0,r=p.length;e<r;e++){const r=p[e];r.instanceId=a,r.object=this,t.push(r)}p.length=0}}}const g=l.createContext(null),M=new u.Matrix4,b=new u.Matrix4,w=new u.Matrix4,v=new u.Vector3,E=new u.Quaternion,A=new u.Vector3,j=l.forwardRef((({context:e,children:t,...r},a)=>{l.useMemo((()=>n.extend({PositionMesh:x})),[]);const c=l.useRef(),{subscribe:i,getParent:s}=l.useContext(e||g);return l.useLayoutEffect((()=>i(c)),[]),l.createElement("positionMesh",o.default({instance:s(),instanceKey:c,ref:f.default([a,c])},r),t)})),O=l.forwardRef((({children:e,range:t,limit:r=1e3,frames:a=1/0,...c},i)=>{const[{context:s,instance:d}]=l.useState((()=>{const e=l.createContext(null);return{context:e,instance:l.forwardRef(((t,r)=>l.createElement(j,o.default({context:e},t,{ref:r}))))}})),m=l.useRef(null),[y,p]=l.useState([]),[[h,x]]=l.useState((()=>{const e=new Float32Array(16*r);for(let t=0;t<r;t++)w.identity().toArray(e,16*t);return[e,new Float32Array([...new Array(3*r)].map((()=>1)))]}));l.useEffect((()=>{m.current.instanceMatrix.needsUpdate=!0}));let O=0,P=0;n.useFrame((()=>{if(a===1/0||O<a){m.current.updateMatrix(),m.current.updateMatrixWorld(),M.copy(m.current.matrixWorld).invert(),P=Math.min(r,void 0!==t?t:r,y.length),m.current.count=P,m.current.instanceMatrix.updateRange.count=16*P,m.current.instanceColor.updateRange.count=3*P;for(let e=0;e<y.length;e++){const t=y[e].current;t.matrixWorld.decompose(v,E,A),b.compose(v,E,A).premultiply(M),b.toArray(h,16*e),m.current.instanceMatrix.needsUpdate=!0,t.color.toArray(x,3*e),m.current.instanceColor.needsUpdate=!0}O++}}));const R=l.useMemo((()=>({getParent:()=>m,subscribe:e=>(p((t=>[...t,e])),()=>p((t=>t.filter((t=>t.current!==e.current)))))})),[]);return l.createElement("instancedMesh",o.default({userData:{instances:y},matrixAutoUpdate:!1,ref:f.default([i,m]),args:[null,null,0],raycast:()=>null},c),l.createElement("instancedBufferAttribute",{attach:"instanceMatrix",count:h.length/16,array:h,itemSize:16,usage:u.DynamicDrawUsage}),l.createElement("instancedBufferAttribute",{attach:"instanceColor",count:x.length/3,array:x,itemSize:3,usage:u.DynamicDrawUsage}),"function"==typeof e?l.createElement(s.Provider,{value:R},e(d)):l.createElement(g.Provider,{value:R},e))})),P=l.forwardRef((function({meshes:e,children:t,...r},n){const a=Array.isArray(e);if(!a)for(const t of Object.keys(e))e[t].isMesh||delete e[t];return l.createElement("group",{ref:n},l.createElement(d.default,{components:(a?e:Object.values(e)).map((({geometry:e,material:t})=>l.createElement(O,o.default({key:e.uuid,geometry:e,material:t},r))))},(r=>a?t(...r):t(Object.keys(e).filter((t=>e[t].isMesh)).reduce(((e,t,n)=>({...e,[t]:r[n]})),{})))))}));exports.Instance=j,exports.Instances=O,exports.Merged=P;
@@ -10,13 +10,16 @@ declare global {
10
10
  }
11
11
  declare type Api = {
12
12
  getParent: () => React.MutableRefObject<InstancedMesh>;
13
- subscribe: (ref: any) => void;
13
+ subscribe: <T>(ref: React.MutableRefObject<T>) => void;
14
14
  };
15
- declare type InstancesProps = JSX.IntrinsicElements['instancedMesh'] & {
15
+ export declare type InstancesProps = JSX.IntrinsicElements['instancedMesh'] & {
16
16
  range?: number;
17
17
  limit?: number;
18
18
  frames?: number;
19
19
  };
20
+ export declare type InstanceProps = JSX.IntrinsicElements['positionMesh'] & {
21
+ context?: React.Context<Api>;
22
+ };
20
23
  declare type InstancedMesh = Omit<THREE.InstancedMesh, 'instanceMatrix' | 'instanceColor'> & {
21
24
  instanceMatrix: THREE.InstancedBufferAttribute;
22
25
  instanceColor: THREE.InstancedBufferAttribute;
@@ -29,7 +32,7 @@ declare class PositionMesh extends THREE.Group {
29
32
  get geometry(): THREE.BufferGeometry | undefined;
30
33
  raycast(raycaster: THREE.Raycaster, intersects: THREE.Intersection[]): void;
31
34
  }
32
- declare const Instance: React.ForwardRefExoticComponent<Pick<Omit<ReactThreeFiber.ExtendedColors<ReactThreeFiber.Overwrite<Partial<PositionMesh>, ReactThreeFiber.NodeProps<PositionMesh, typeof PositionMesh>>>, ReactThreeFiber.NonFunctionKeys<{
35
+ export declare const Instance: React.ForwardRefExoticComponent<Pick<Omit<ReactThreeFiber.ExtendedColors<ReactThreeFiber.Overwrite<Partial<PositionMesh>, ReactThreeFiber.NodeProps<PositionMesh, typeof PositionMesh>>>, ReactThreeFiber.NonFunctionKeys<{
33
36
  position?: ReactThreeFiber.Vector3 | undefined;
34
37
  up?: ReactThreeFiber.Vector3 | undefined;
35
38
  scale?: ReactThreeFiber.Vector3 | undefined;
@@ -50,10 +53,10 @@ declare const Instance: React.ForwardRefExoticComponent<Pick<Omit<ReactThreeFibe
50
53
  } & import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers & {
51
54
  context?: React.Context<Api> | undefined;
52
55
  }, "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" | "color" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "geometry" | "context" | "instance" | "instanceKey"> & React.RefAttributes<unknown>>;
53
- declare const Instances: React.ForwardRefExoticComponent<Pick<InstancesProps, "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 | "range" | "material" | "geometry" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "count" | "instanceColor" | "instanceMatrix" | "isInstancedMesh" | "getColorAt" | "getMatrixAt" | "setColorAt" | "setMatrixAt" | "frames" | "limit"> & React.RefAttributes<InstancedMesh>>;
54
- declare function Merged({ meshes, children, ...props }: {
55
- [x: string]: any;
56
- meshes: any;
57
- children: any;
58
- }): JSX.Element;
59
- export { Instances, Instance, Merged };
56
+ export declare const Instances: React.ForwardRefExoticComponent<Pick<InstancesProps, "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 | "range" | "material" | "geometry" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "count" | "instanceColor" | "instanceMatrix" | "isInstancedMesh" | "getColorAt" | "getMatrixAt" | "setColorAt" | "setMatrixAt" | "frames" | "limit"> & React.RefAttributes<InstancedMesh>>;
57
+ export interface MergedProps extends InstancesProps {
58
+ meshes: THREE.Mesh[];
59
+ children: React.ReactNode;
60
+ }
61
+ export declare const Merged: React.ForwardRefExoticComponent<Pick<any, string | number | symbol> & React.RefAttributes<THREE.Group>>;
62
+ export {};
package/core/Instances.js CHANGED
@@ -39,7 +39,7 @@ class PositionMesh extends THREE.Group {
39
39
  if (!parent.geometry || !parent.material) return;
40
40
  _mesh.geometry = parent.geometry;
41
41
  const matrixWorld = parent.matrixWorld;
42
- let instanceId = parent.userData.instances.indexOf(this.instanceKey); // If the instance wasn't found or exceeds the parents draw range, bail out
42
+ const instanceId = parent.userData.instances.indexOf(this.instanceKey); // If the instance wasn't found or exceeds the parents draw range, bail out
43
43
 
44
44
  if (instanceId === -1 || instanceId > parent.count) return; // calculate the world matrix for each instance
45
45
 
@@ -65,7 +65,6 @@ class PositionMesh extends THREE.Group {
65
65
 
66
66
  }
67
67
 
68
- let i, instanceRef;
69
68
  const globalContext = /*@__PURE__*/React.createContext(null);
70
69
  const parentMatrix = /*@__PURE__*/new THREE.Matrix4();
71
70
  const instanceMatrix = /*@__PURE__*/new THREE.Matrix4();
@@ -119,7 +118,7 @@ const Instances = /*#__PURE__*/React.forwardRef(({
119
118
  const [[matrices, colors]] = React.useState(() => {
120
119
  const mArray = new Float32Array(limit * 16);
121
120
 
122
- for (i = 0; i < limit; i++) tempMatrix.identity().toArray(mArray, i * 16);
121
+ for (let i = 0; i < limit; i++) tempMatrix.identity().toArray(mArray, i * 16);
123
122
 
124
123
  return [mArray, new Float32Array([...new Array(limit * 3)].map(() => 1))];
125
124
  });
@@ -139,15 +138,15 @@ const Instances = /*#__PURE__*/React.forwardRef(({
139
138
  parentRef.current.instanceMatrix.updateRange.count = updateRange * 16;
140
139
  parentRef.current.instanceColor.updateRange.count = updateRange * 3;
141
140
 
142
- for (i = 0; i < instances.length; i++) {
143
- instanceRef = instances[i].current; // Multiply the inverse of the InstancedMesh world matrix or else
141
+ for (let i = 0; i < instances.length; i++) {
142
+ const instance = instances[i].current; // Multiply the inverse of the InstancedMesh world matrix or else
144
143
  // Instances will be double-transformed if <Instances> isn't at identity
145
144
 
146
- instanceRef.matrixWorld.decompose(translation, rotation, scale);
145
+ instance.matrixWorld.decompose(translation, rotation, scale);
147
146
  instanceMatrix.compose(translation, rotation, scale).premultiply(parentMatrix);
148
147
  instanceMatrix.toArray(matrices, i * 16);
149
148
  parentRef.current.instanceMatrix.needsUpdate = true;
150
- instanceRef.color.toArray(colors, i * 3);
149
+ instance.color.toArray(colors, i * 3);
151
150
  parentRef.current.instanceColor.needsUpdate = true;
152
151
  }
153
152
 
@@ -187,16 +186,17 @@ const Instances = /*#__PURE__*/React.forwardRef(({
187
186
  value: api
188
187
  }, children));
189
188
  });
190
-
191
- function Merged({
189
+ const Merged = /*#__PURE__*/React.forwardRef(function Merged({
192
190
  meshes,
193
191
  children,
194
192
  ...props
195
- }) {
193
+ }, ref) {
196
194
  const isArray = Array.isArray(meshes); // Filter out meshes from collections, which may contain non-meshes
197
195
 
198
196
  if (!isArray) for (const key of Object.keys(meshes)) if (!meshes[key].isMesh) delete meshes[key];
199
- return /*#__PURE__*/React.createElement(Composer, {
197
+ return /*#__PURE__*/React.createElement("group", {
198
+ ref: ref
199
+ }, /*#__PURE__*/React.createElement(Composer, {
200
200
  components: (isArray ? meshes : Object.values(meshes)).map(({
201
201
  geometry,
202
202
  material
@@ -207,7 +207,7 @@ function Merged({
207
207
  }, props)))
208
208
  }, args => isArray ? children(...args) : children(Object.keys(meshes).filter(key => meshes[key].isMesh).reduce((acc, key, i) => ({ ...acc,
209
209
  [key]: args[i]
210
- }), {})));
211
- }
210
+ }), {}))));
211
+ });
212
212
 
213
213
  export { Instance, Instances, Merged };
@@ -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 c(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var s=o(e),i=c(r);const a=i.forwardRef((({domElement:e,selector:r,onChange:o,onLock:c,onUnlock:a,enabled:u=!0,...d},l)=>{const{camera:f,...h}=d,m=t.useThree((e=>e.get)),v=t.useThree((e=>e.setEvents)),E=t.useThree((e=>e.gl)),b=t.useThree((e=>e.camera)),p=t.useThree((e=>e.invalidate)),k=t.useThree((e=>e.events)),L=f||b,g=e||k.connected||E.domElement,[j]=i.useState((()=>new n.PointerLockControls(L)));return i.useEffect((()=>{if(u){j.connect(g);const e=m().events.compute;return v({compute(e,t){const r=t.size.width/2,n=t.size.height/2;t.pointer.set(r/t.size.width*2-1,-n/t.size.height*2+1),t.raycaster.setFromCamera(t.pointer,t.camera)}}),()=>{j.disconnect(),v({compute:e})}}}),[u,j]),i.useEffect((()=>{const e=e=>{p(),o&&o(e)};j.addEventListener("change",e),c&&j.addEventListener("lock",c),a&&j.addEventListener("unlock",a);const t=()=>j.lock(),n=r?Array.from(document.querySelectorAll(r)):[document];return n.forEach((e=>e&&e.addEventListener("click",t))),()=>{j.removeEventListener("change",e),c&&j.addEventListener("lock",c),a&&j.addEventListener("unlock",a),n.forEach((e=>e?e.removeEventListener("click",t):void 0))}}),[o,c,a,r,j,p]),i.createElement("primitive",s.default({ref:l,object:j},h))}));exports.PointerLockControls=a;
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 c(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var s=o(e),i=c(r);const u=i.forwardRef((({domElement:e,selector:r,onChange:o,onLock:c,onUnlock:u,enabled:a=!0,makeDefault:l,...d},f)=>{const{camera:h,...m}=d,v=t.useThree((e=>e.setEvents)),E=t.useThree((e=>e.gl)),b=t.useThree((e=>e.camera)),p=t.useThree((e=>e.invalidate)),k=t.useThree((e=>e.events)),L=t.useThree((e=>e.get)),g=t.useThree((e=>e.set)),j=h||b,y=e||k.connected||E.domElement,[O]=i.useState((()=>new n.PointerLockControls(j)));return i.useEffect((()=>{if(a){O.connect(y);const e=L().events.compute;return v({compute(e,t){const r=t.size.width/2,n=t.size.height/2;t.pointer.set(r/t.size.width*2-1,-n/t.size.height*2+1),t.raycaster.setFromCamera(t.pointer,t.camera)}}),()=>{O.disconnect(),v({compute:e})}}}),[a,O]),i.useEffect((()=>{const e=e=>{p(),o&&o(e)};O.addEventListener("change",e),c&&O.addEventListener("lock",c),u&&O.addEventListener("unlock",u);const t=()=>O.lock(),n=r?Array.from(document.querySelectorAll(r)):[document];return n.forEach((e=>e&&e.addEventListener("click",t))),()=>{O.removeEventListener("change",e),c&&O.addEventListener("lock",c),u&&O.addEventListener("unlock",u),n.forEach((e=>e?e.removeEventListener("click",t):void 0))}}),[o,c,u,r,O,p]),i.useEffect((()=>{if(l){const e=L().controls;return g({controls:O}),()=>g({controls:e})}}),[l,O]),i.createElement("primitive",s.default({ref:f,object:O},m))}));exports.PointerLockControls=u;
@@ -10,5 +10,6 @@ export declare type PointerLockControlsProps = ReactThreeFiber.Object3DNode<Poin
10
10
  onChange?: (e?: THREE.Event) => void;
11
11
  onLock?: (e?: THREE.Event) => void;
12
12
  onUnlock?: (e?: THREE.Event) => void;
13
+ makeDefault?: boolean;
13
14
  };
14
- export declare const PointerLockControls: React.ForwardRefExoticComponent<Pick<PointerLockControlsProps, "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" | "connect" | "disconnect" | "domElement" | "minPolarAngle" | "maxPolarAngle" | "isLocked" | "getDirection" | "moveForward" | "moveRight" | "lock" | "unlock" | "selector" | "onLock" | "onUnlock"> & React.RefAttributes<PointerLockControlsImpl>>;
15
+ export declare const PointerLockControls: React.ForwardRefExoticComponent<Pick<PointerLockControlsProps, "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" | "connect" | "disconnect" | "domElement" | "makeDefault" | "minPolarAngle" | "maxPolarAngle" | "isLocked" | "getDirection" | "moveForward" | "moveRight" | "lock" | "unlock" | "selector" | "onLock" | "onUnlock"> & React.RefAttributes<PointerLockControlsImpl>>;
@@ -10,18 +10,20 @@ const PointerLockControls = /*#__PURE__*/React.forwardRef(({
10
10
  onLock,
11
11
  onUnlock,
12
12
  enabled = true,
13
+ makeDefault,
13
14
  ...props
14
15
  }, ref) => {
15
16
  const {
16
17
  camera,
17
18
  ...rest
18
19
  } = props;
19
- const get = useThree(state => state.get);
20
20
  const setEvents = useThree(state => state.setEvents);
21
21
  const gl = useThree(state => state.gl);
22
22
  const defaultCamera = useThree(state => state.camera);
23
23
  const invalidate = useThree(state => state.invalidate);
24
24
  const events = useThree(state => state.events);
25
+ const get = useThree(state => state.get);
26
+ const set = useThree(state => state.set);
25
27
  const explCamera = camera || defaultCamera;
26
28
  const explDomElement = domElement || events.connected || gl.domElement;
27
29
  const [controls] = React.useState(() => new PointerLockControls$1(explCamera));
@@ -68,6 +70,17 @@ const PointerLockControls = /*#__PURE__*/React.forwardRef(({
68
70
  elements.forEach(element => element ? element.removeEventListener('click', handler) : undefined);
69
71
  };
70
72
  }, [onChange, onLock, onUnlock, selector, controls, invalidate]);
73
+ React.useEffect(() => {
74
+ if (makeDefault) {
75
+ const old = get().controls;
76
+ set({
77
+ controls
78
+ });
79
+ return () => set({
80
+ controls: old
81
+ });
82
+ }
83
+ }, [makeDefault, controls]);
71
84
  return /*#__PURE__*/React.createElement("primitive", _extends({
72
85
  ref: ref,
73
86
  object: controls
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),n=require("@react-three/fiber"),t=require("lodash.omit"),r=require("lodash.pick"),a=require("react"),u=require("three"),o=require("three-stdlib");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var n=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,r.get?r:{enumerable:!0,get:function(){return e[t]}})}})),n.default=e,Object.freeze(n)}var i=l(e),c=l(t),d=l(r),f=s(a),v=s(u);const m=f.forwardRef((({children:e,domElement:t,onChange:r,onMouseDown:a,onMouseUp:u,onObjectChange:l,object:s,...m},h)=>{const E=["enabled","axis","mode","translationSnap","rotationSnap","scaleSnap","space","size","showX","showY","showZ"],{camera:b,...g}=m,L=d.default(g,E),p=c.default(g,E),j=n.useThree((e=>e.controls)),O=n.useThree((e=>e.gl)),w=n.useThree((e=>e.events)),q=n.useThree((e=>e.camera)),T=n.useThree((e=>e.invalidate)),y=b||q,C=t||w.connected||O.domElement,D=f.useMemo((()=>new o.TransformControls(y,C)),[y,C]),M=f.useRef();return f.useLayoutEffect((()=>(s?D.attach(s instanceof v.Object3D?s:s.current):M.current instanceof v.Object3D&&D.attach(M.current),()=>{D.detach()})),[s,e,D]),f.useEffect((()=>{if(j){const e=e=>j.enabled=!e.value;return D.addEventListener("dragging-changed",e),()=>D.removeEventListener("dragging-changed",e)}}),[D,j]),f.useEffect((()=>{const e=e=>{T(),r&&r(e)};return null==D||null==D.addEventListener||D.addEventListener("change",e),a&&(null==D||null==D.addEventListener||D.addEventListener("mouseDown",a)),u&&(null==D||null==D.addEventListener||D.addEventListener("mouseUp",u)),l&&(null==D||null==D.addEventListener||D.addEventListener("objectChange",l)),()=>{null==D||null==D.removeEventListener||D.removeEventListener("change",e),a&&(null==D||null==D.removeEventListener||D.removeEventListener("mouseDown",a)),u&&(null==D||null==D.removeEventListener||D.removeEventListener("mouseUp",u)),l&&(null==D||null==D.removeEventListener||D.removeEventListener("objectChange",l))}}),[r,a,u,l,D,T]),D?f.createElement(f.Fragment,null,f.createElement("primitive",i.default({ref:h,object:D},L)),f.createElement("group",i.default({ref:M},p),e)):null}));exports.TransformControls=m;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),n=require("lodash.omit"),r=require("lodash.pick"),o=require("react"),u=require("three"),a=require("three-stdlib");function l(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(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var c=l(e),i=l(n),d=l(r),f=s(o),v=s(u);const m=f.forwardRef((({children:e,domElement:n,onChange:r,onMouseDown:o,onMouseUp:u,onObjectChange:l,object:s,makeDefault:m,...h},E)=>{const b=["enabled","axis","mode","translationSnap","rotationSnap","scaleSnap","space","size","showX","showY","showZ"],{camera:g,...L}=h,p=d.default(L,b),j=i.default(L,b),O=t.useThree((e=>e.controls)),w=t.useThree((e=>e.gl)),T=t.useThree((e=>e.events)),q=t.useThree((e=>e.camera)),D=t.useThree((e=>e.invalidate)),y=t.useThree((e=>e.get)),C=t.useThree((e=>e.set)),M=g||q,x=n||T.connected||w.domElement,_=f.useMemo((()=>new a.TransformControls(M,x)),[M,x]),k=f.useRef();return f.useLayoutEffect((()=>(s?_.attach(s instanceof v.Object3D?s:s.current):k.current instanceof v.Object3D&&_.attach(k.current),()=>{_.detach()})),[s,e,_]),f.useEffect((()=>{if(O){const e=e=>O.enabled=!e.value;return _.addEventListener("dragging-changed",e),()=>_.removeEventListener("dragging-changed",e)}}),[_,O]),f.useEffect((()=>{const e=e=>{D(),r&&r(e)};return null==_||null==_.addEventListener||_.addEventListener("change",e),o&&(null==_||null==_.addEventListener||_.addEventListener("mouseDown",o)),u&&(null==_||null==_.addEventListener||_.addEventListener("mouseUp",u)),l&&(null==_||null==_.addEventListener||_.addEventListener("objectChange",l)),()=>{null==_||null==_.removeEventListener||_.removeEventListener("change",e),o&&(null==_||null==_.removeEventListener||_.removeEventListener("mouseDown",o)),u&&(null==_||null==_.removeEventListener||_.removeEventListener("mouseUp",u)),l&&(null==_||null==_.removeEventListener||_.removeEventListener("objectChange",l))}}),[r,o,u,l,_,D]),f.useEffect((()=>{if(m){const e=y().controls;return C({controls:_}),()=>C({controls:e})}}),[m,_]),_?f.createElement(f.Fragment,null,f.createElement("primitive",c.default({ref:E,object:_},p)),f.createElement("group",c.default({ref:k},j),e)):null}));exports.TransformControls=m;
@@ -22,5 +22,6 @@ export declare type TransformControlsProps = ReactThreeFiber.Object3DNode<Transf
22
22
  onMouseDown?: (e?: THREE.Event) => void;
23
23
  onMouseUp?: (e?: THREE.Event) => void;
24
24
  onObjectChange?: (e?: THREE.Event) => void;
25
+ makeDefault?: boolean;
25
26
  };
26
- 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" | "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" | "axis" | "domElement" | "makeDefault" | "isTransformControls" | "detach" | "getMode" | "setMode" | "setTranslationSnap" | "setRotationSnap" | "setScaleSnap" | "setSpace" | "onObjectChange" | "mode" | "translationSnap" | "rotationSnap" | "scaleSnap" | "showX" | "showY" | "showZ"> & React.RefAttributes<TransformControlsImpl<THREE.Camera>>>;
@@ -14,6 +14,7 @@ const TransformControls = /*#__PURE__*/React.forwardRef(({
14
14
  onMouseUp,
15
15
  onObjectChange,
16
16
  object,
17
+ makeDefault,
17
18
  ...props
18
19
  }, ref) => {
19
20
  const transformOnlyPropNames = ['enabled', 'axis', 'mode', 'translationSnap', 'rotationSnap', 'scaleSnap', 'space', 'size', 'showX', 'showY', 'showZ'];
@@ -29,6 +30,8 @@ const TransformControls = /*#__PURE__*/React.forwardRef(({
29
30
  const events = useThree(state => state.events);
30
31
  const defaultCamera = useThree(state => state.camera);
31
32
  const invalidate = useThree(state => state.invalidate);
33
+ const get = useThree(state => state.get);
34
+ const set = useThree(state => state.set);
32
35
  const explCamera = camera || defaultCamera;
33
36
  const explDomElement = domElement || events.connected || gl.domElement;
34
37
  const controls = React.useMemo(() => new TransformControls$1(explCamera, explDomElement), [explCamera, explDomElement]);
@@ -67,6 +70,17 @@ const TransformControls = /*#__PURE__*/React.forwardRef(({
67
70
  if (onObjectChange) controls == null ? void 0 : controls.removeEventListener == null ? void 0 : controls.removeEventListener('objectChange', onObjectChange);
68
71
  };
69
72
  }, [onChange, onMouseDown, onMouseUp, onObjectChange, controls, invalidate]);
73
+ React.useEffect(() => {
74
+ if (makeDefault) {
75
+ const old = get().controls;
76
+ set({
77
+ controls
78
+ });
79
+ return () => set({
80
+ controls: old
81
+ });
82
+ }
83
+ }, [makeDefault, controls]);
70
84
  return controls ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("primitive", _extends({
71
85
  ref: ref,
72
86
  object: controls