@react-three/drei 7.12.5 → 7.14.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.
@@ -1029,5 +1029,6 @@ Qj+oSHUlEcrBOw8esqMMtxFhcQWKOHTr3oMdkKzwgZt37jeP+oUTsDvU094Bwf/97eXVi8EsvHF7
1029
1029
  wQl6fKAOgP1v0NDzhWOPaonS+Uc7hKGg16rTLeaYbJE71ntakUrVxpDLLO+74hH0G7zHA76zCuL9
1030
1030
  G/zVNxwCv33vQ/bCrec9fuqtw/8HPnCpb7whAMsAAAAASUVORK5CYII=`;
1031
1031
  const img = createImageUrl(blob, 'img/png');
1032
+ var CloudImage = img;
1032
1033
 
1033
- export default img;
1034
+ export { CloudImage as default };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("@react-three/fiber"),t=require("react"),n=require("three-stdlib");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var a=o(e),c=s(t);const u=c.forwardRef((({makeDefault:e,camera:t,regress:o,domElement:s,onChange:u,onStart:i,onEnd:l,...d},f)=>{const b=r.useThree((({invalidate:e})=>e)),m=r.useThree((({camera:e})=>e)),v=r.useThree((({gl:e})=>e)),h=r.useThree((({events:e})=>e)),p=r.useThree((({set:e})=>e)),E=r.useThree((({get:e})=>e)),g=r.useThree((({performance:e})=>e)),j=t||m,O=s||("boolean"!=typeof h.connected?h.connected:v.domElement),T=c.useMemo((()=>new n.ArcballControls(j)),[j]);return r.useFrame((()=>{T.enabled&&T.update()})),c.useEffect((()=>{const e=e=>{b(),o&&g.regress(),u&&u(e)};return T.connect(O),T.addEventListener("change",e),i&&T.addEventListener("start",i),l&&T.addEventListener("end",l),()=>{T.removeEventListener("change",e),i&&T.removeEventListener("start",i),l&&T.removeEventListener("end",l),T.dispose()}}),[O,u,i,l,o,T,b]),c.useEffect((()=>{if(e){const e=E().controls;return p({controls:T}),()=>p({controls:e})}}),[e,T]),c.createElement("primitive",a.default({ref:f,object:T},d))}));exports.ArcballControls=u;
@@ -0,0 +1,15 @@
1
+ import { ReactThreeFiber } from '@react-three/fiber';
2
+ import * as React from 'react';
3
+ import * as THREE from 'three';
4
+ import { ArcballControls as ArcballControlsImpl } from 'three-stdlib';
5
+ export declare type ArcballControlsProps = ReactThreeFiber.Overwrite<ReactThreeFiber.Object3DNode<ArcballControlsImpl, typeof ArcballControlsImpl>, {
6
+ target?: ReactThreeFiber.Vector3;
7
+ camera?: THREE.Camera;
8
+ domElement?: HTMLElement;
9
+ regress?: boolean;
10
+ makeDefault?: boolean;
11
+ onChange?: (e?: THREE.Event) => void;
12
+ onStart?: (e?: THREE.Event) => void;
13
+ onEnd?: (e?: THREE.Event) => void;
14
+ }>;
15
+ export declare const ArcballControls: React.ForwardRefExoticComponent<Pick<ArcballControlsProps, string | number | symbol> & React.RefAttributes<any>>;
@@ -0,0 +1,82 @@
1
+ import _extends from '@babel/runtime/helpers/esm/extends';
2
+ import { useThree, useFrame } from '@react-three/fiber';
3
+ import * as React from 'react';
4
+ import { ArcballControls as ArcballControls$1 } from 'three-stdlib';
5
+
6
+ const ArcballControls = /*#__PURE__*/React.forwardRef(({
7
+ makeDefault,
8
+ camera,
9
+ regress,
10
+ domElement,
11
+ onChange,
12
+ onStart,
13
+ onEnd,
14
+ ...restProps
15
+ }, ref) => {
16
+ const invalidate = useThree(({
17
+ invalidate
18
+ }) => invalidate);
19
+ const defaultCamera = useThree(({
20
+ camera
21
+ }) => camera);
22
+ const gl = useThree(({
23
+ gl
24
+ }) => gl);
25
+ const events = useThree(({
26
+ events
27
+ }) => events);
28
+ const set = useThree(({
29
+ set
30
+ }) => set);
31
+ const get = useThree(({
32
+ get
33
+ }) => get);
34
+ const performance = useThree(({
35
+ performance
36
+ }) => performance);
37
+ const explCamera = camera || defaultCamera;
38
+ const explDomElement = domElement || (typeof events.connected !== 'boolean' ? events.connected : gl.domElement);
39
+ const controls = React.useMemo(() => new ArcballControls$1(explCamera), [explCamera]);
40
+ useFrame(() => {
41
+ if (controls.enabled) controls.update();
42
+ });
43
+ React.useEffect(() => {
44
+ const callback = e => {
45
+ invalidate();
46
+ if (regress) performance.regress();
47
+ if (onChange) onChange(e);
48
+ };
49
+
50
+ controls.connect(explDomElement);
51
+ controls.addEventListener('change', callback);
52
+ if (onStart) controls.addEventListener('start', onStart);
53
+ if (onEnd) controls.addEventListener('end', onEnd);
54
+ return () => {
55
+ controls.removeEventListener('change', callback);
56
+ if (onStart) controls.removeEventListener('start', onStart);
57
+ if (onEnd) controls.removeEventListener('end', onEnd);
58
+ controls.dispose();
59
+ }; // eslint-disable-next-line react-hooks/exhaustive-deps
60
+ }, [explDomElement, onChange, onStart, onEnd, regress, controls, invalidate]);
61
+ React.useEffect(() => {
62
+ if (makeDefault) {
63
+ // @ts-expect-error new in @react-three/fiber@7.0.5
64
+ const old = get().controls; // @ts-expect-error new in @react-three/fiber@7.0.5
65
+
66
+ set({
67
+ controls
68
+ }); // @ts-expect-error new in @react-three/fiber@7.0.5
69
+
70
+ return () => set({
71
+ controls: old
72
+ });
73
+ } // eslint-disable-next-line react-hooks/exhaustive-deps
74
+
75
+ }, [makeDefault, controls]);
76
+ return /*#__PURE__*/React.createElement("primitive", _extends({
77
+ ref: ref,
78
+ object: controls
79
+ }, restProps));
80
+ });
81
+
82
+ export { ArcballControls };
package/core/Cloud.js CHANGED
@@ -2,7 +2,7 @@ import * as React from 'react';
2
2
  import { useFrame } from '@react-three/fiber';
3
3
  import { Billboard } from './Billboard.js';
4
4
  import { useTexture } from './useTexture.js';
5
- import img from '../assets/cloud.base64.js';
5
+ import CloudImage from '../assets/cloud.base64.js';
6
6
 
7
7
  function Cloud({
8
8
  opacity = 0.5,
@@ -14,7 +14,7 @@ function Cloud({
14
14
  ...props
15
15
  }) {
16
16
  const group = React.useRef();
17
- const texture = useTexture(img);
17
+ const texture = useTexture(CloudImage);
18
18
  const clouds = React.useMemo(() => [...new Array(segments)].map((_, index) => ({
19
19
  x: width / 2 - Math.random() * width,
20
20
  y: width / 2 - Math.random() * width,
@@ -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"),u=require("../helpers/Position.cjs.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var i=o(e),l=s(t),f=s(r),d=o(a),m=o(c);let p,y;const x=f.createContext(null),b=new l.Matrix4,g=new l.Matrix4,h=new l.Matrix4,M=new l.Color,v=new l.Vector3,w=new l.Quaternion,j=new l.Vector3,A=f.forwardRef((({context:e,children:t,...r},a)=>{f.useMemo((()=>n.extend({Position:u.Position})),[]);const c=f.useRef(),{subscribe:o}=f.useContext(e||x);return f.useLayoutEffect((()=>o(c)),[]),f.createElement("position",i.default({ref:d.default([a,c])},r),t)})),E=f.forwardRef((({children:e,range:t,limit:r=1e3,frames:a=1/0,...c},u)=>{const[{context:o,instance:s}]=f.useState((()=>{const e=f.createContext(null);return{context:e,instance:f.forwardRef(((t,r)=>f.createElement(A,i.default({context:e},t,{ref:r}))))}})),m=f.useRef(null),[E,O]=f.useState([]),[[q,P]]=f.useState((()=>{const e=new Float32Array(16*r);for(p=0;p<r;p++)h.identity().toArray(e,16*p);return[e,new Float32Array([...new Array(3*r)].map((()=>1)))]}));f.useLayoutEffect((()=>{m.current.count=m.current.instanceMatrix.updateRange.count=m.current.instanceColor.updateRange.count=Math.min(r,void 0!==t?t:r,E.length)}),[E,t]),f.useEffect((()=>{m.current.instanceMatrix.needsUpdate=!0}));let _=0;n.useFrame((e=>{if(a===1/0||_<a){for(m.current.updateMatrix(),m.current.updateMatrixWorld(),b.copy(m.current.matrixWorld).invert(),p=0;p<E.length;p++)y=E[p].current,y.matrixWorld.decompose(v,w,j),g.compose(v,w,j).premultiply(b),g.equals(h.fromArray(q,16*p))||(g.toArray(q,16*p),m.current.instanceMatrix.needsUpdate=!0),y.color.equals(M.fromArray(P,3*p))||(y.color.toArray(P,3*p),m.current.instanceColor.needsUpdate=!0);_++}}));const C=f.useMemo((()=>{const e={};for(p=0;p<E.length;p++){var t;Object.assign(e,null==(t=E[p].current)?void 0:t.__r3f.handlers)}return Object.keys(e).reduce(((e,t)=>({...e,[t]:e=>{var r,n;const a=E[e.instanceId].current;return null==a||null==(r=a.__r3f)||null==(n=r.handlers)?void 0:n[t]({...e,object:a})}})),{})}),[e,E]),R=f.useMemo((()=>({subscribe:e=>(O((t=>[...t,e])),()=>O((t=>t.filter((t=>t.current!==e.current)))))})),[]);return f.createElement("instancedMesh",i.default({matrixAutoUpdate:!1,ref:d.default([u,m]),args:[null,null,0]},C,c),f.createElement("instancedBufferAttribute",{attach:"instanceMatrix",count:q.length/16,array:q,itemSize:16,usage:l.DynamicDrawUsage}),f.createElement("instancedBufferAttribute",{attach:"instanceColor",count:P.length/3,array:P,itemSize:3,usage:l.DynamicDrawUsage}),"function"==typeof e?f.createElement(o.Provider,{value:R},e(s)):f.createElement(x.Provider,{value:R},e))}));exports.Instance=A,exports.Instances=E,exports.Merged=function({meshes:e,children:t,...r}){const n=Array.isArray(e);return f.createElement(m.default,{components:(n?e:Object.values(e)).map((({geometry:e,material:t})=>f.createElement(E,i.default({geometry:e,material:t},r))))},(r=>n?t(...r):t(Object.keys(e).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"),u=require("../helpers/Position.cjs.js");function o(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 s=o(e),l=i(t),f=i(r),d=o(a),m=o(c);let p,y;const x=f.createContext(null),b=new l.Matrix4,g=new l.Matrix4,h=new l.Matrix4,v=new l.Color,M=new l.Vector3,w=new l.Quaternion,j=new l.Vector3,A=f.forwardRef((({context:e,children:t,...r},a)=>{f.useMemo((()=>n.extend({Position:u.Position})),[]);const c=f.useRef(),{subscribe:o}=f.useContext(e||x);return f.useLayoutEffect((()=>o(c)),[]),f.createElement("position",s.default({ref:d.default([a,c])},r),t)})),E=f.forwardRef((({children:e,range:t,limit:r=1e3,frames:a=1/0,...c},u)=>{const[{context:o,instance:i}]=f.useState((()=>{const e=f.createContext(null);return{context:e,instance:f.forwardRef(((t,r)=>f.createElement(A,s.default({context:e},t,{ref:r}))))}})),m=f.useRef(null),[E,O]=f.useState([]),[[q,P]]=f.useState((()=>{const e=new Float32Array(16*r);for(p=0;p<r;p++)h.identity().toArray(e,16*p);return[e,new Float32Array([...new Array(3*r)].map((()=>1)))]}));f.useLayoutEffect((()=>{m.current.count=m.current.instanceMatrix.updateRange.count=m.current.instanceColor.updateRange.count=Math.min(r,void 0!==t?t:r,E.length)}),[E,t]),f.useEffect((()=>{m.current.instanceMatrix.needsUpdate=!0}));let _=0;n.useFrame((e=>{if(a===1/0||_<a){for(m.current.updateMatrix(),m.current.updateMatrixWorld(),b.copy(m.current.matrixWorld).invert(),p=0;p<E.length;p++)y=E[p].current,y.matrixWorld.decompose(M,w,j),g.compose(M,w,j).premultiply(b),g.equals(h.fromArray(q,16*p))||(g.toArray(q,16*p),m.current.instanceMatrix.needsUpdate=!0),y.color.equals(v.fromArray(P,3*p))||(y.color.toArray(P,3*p),m.current.instanceColor.needsUpdate=!0);_++}}));const C=f.useMemo((()=>{const e={};for(p=0;p<E.length;p++){var t;Object.assign(e,null==(t=E[p].current)?void 0:t.__r3f.handlers)}return Object.keys(e).reduce(((e,t)=>({...e,[t]:e=>{var r,n,a;const c=null==(r=E[e.instanceId])?void 0:r.current;return null==c||null==(n=c.__r3f)||null==(a=n.handlers)?void 0:a[t]({...e,object:c})}})),{})}),[e,E]),R=f.useMemo((()=>({subscribe:e=>(O((t=>[...t,e])),()=>O((t=>t.filter((t=>t.current!==e.current)))))})),[]);return f.createElement("instancedMesh",s.default({matrixAutoUpdate:!1,ref:d.default([u,m]),args:[null,null,0]},C,c),f.createElement("instancedBufferAttribute",{attach:"instanceMatrix",count:q.length/16,array:q,itemSize:16,usage:l.DynamicDrawUsage}),f.createElement("instancedBufferAttribute",{attach:"instanceColor",count:P.length/3,array:P,itemSize:3,usage:l.DynamicDrawUsage}),"function"==typeof e?f.createElement(o.Provider,{value:R},e(i)):f.createElement(x.Provider,{value:R},e))}));exports.Instance=A,exports.Instances=E,exports.Merged=function({meshes:e,children:t,...r}){const n=Array.isArray(e);return f.createElement(m.default,{components:(n?e:Object.values(e)).map((({geometry:e,material:t})=>f.createElement(E,s.default({geometry:e,material:t},r))))},(r=>n?t(...r):t(Object.keys(e).reduce(((e,t,n)=>({...e,[t]:r[n]})),{}))))};
package/core/Instances.js CHANGED
@@ -108,9 +108,9 @@ const Instances = /*#__PURE__*/React.forwardRef(({
108
108
 
109
109
  return Object.keys(events).reduce((prev, key) => ({ ...prev,
110
110
  [key]: event => {
111
- var _r3f, _r3f$handlers;
111
+ var _instances$event$inst, _r3f, _r3f$handlers;
112
112
 
113
- const object = instances[event.instanceId].current;
113
+ const object = (_instances$event$inst = instances[event.instanceId]) == null ? void 0 : _instances$event$inst.current;
114
114
  return object == null ? void 0 : (_r3f = object.__r3f) == null ? void 0 : (_r3f$handlers = _r3f.handlers) == null ? void 0 : _r3f$handlers[key]({ ...event,
115
115
  object
116
116
  });
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("@react-three/fiber"),t=require("react"),n=require("three-stdlib");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}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)}var o=s(e),u=a(t);const c=u.forwardRef((({makeDefault:e,camera:t,regress:s,domElement:a,enableDamping:c=!0,onChange:i,onStart:l,onEnd:d,...f},m)=>{const b=r.useThree((({invalidate:e})=>e)),v=r.useThree((({camera:e})=>e)),p=r.useThree((({gl:e})=>e)),h=r.useThree((({set:e})=>e)),E=r.useThree((({get:e})=>e)),g=r.useThree((({performance:e})=>e)),O=t||v,j=a||p.domElement,L=u.useMemo((()=>new n.OrbitControls(O)),[O]);return r.useFrame((()=>{L.enabled&&L.update()})),u.useEffect((()=>{const e=e=>{b(),s&&g.regress(),i&&i(e)};return L.connect(j),L.addEventListener("change",e),l&&L.addEventListener("start",l),d&&L.addEventListener("end",d),()=>{L.removeEventListener("change",e),l&&L.removeEventListener("start",l),d&&L.removeEventListener("end",d),L.dispose()}}),[i,l,d,s,L,b]),u.useEffect((()=>{if(e){const e=E().controls;return h({controls:L}),()=>h({controls:e})}}),[e,L]),u.createElement("primitive",o.default({ref:m,object:L,enableDamping:c},f))}));exports.OrbitControls=c;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var a=o(e),u=s(r);const c=u.forwardRef((({makeDefault:e,camera:r,regress:o,domElement:s,enableDamping:c=!0,onChange:i,onStart:d,onEnd:l,...f},b)=>{const m=t.useThree((({invalidate:e})=>e)),v=t.useThree((({camera:e})=>e)),p=t.useThree((({gl:e})=>e)),h=t.useThree((({events:e})=>e)),E=t.useThree((({set:e})=>e)),g=t.useThree((({get:e})=>e)),O=t.useThree((({performance:e})=>e)),j=r||v,T=s||("boolean"!=typeof h.connected?h.connected:p.domElement),y=u.useMemo((()=>new n.OrbitControls(j)),[j]);return t.useFrame((()=>{y.enabled&&y.update()})),u.useEffect((()=>{const e=e=>{m(),o&&O.regress(),i&&i(e)};return y.connect(T),y.addEventListener("change",e),d&&y.addEventListener("start",d),l&&y.addEventListener("end",l),()=>{y.removeEventListener("change",e),d&&y.removeEventListener("start",d),l&&y.removeEventListener("end",l),y.dispose()}}),[T,i,d,l,o,y,m]),u.useEffect((()=>{if(e){const e=g().controls;return E({controls:y}),()=>E({controls:e})}}),[e,y]),u.createElement("primitive",a.default({ref:b,object:y,enableDamping:c},f))}));exports.OrbitControls=c;
@@ -23,6 +23,9 @@ const OrbitControls = /*#__PURE__*/React.forwardRef(({
23
23
  const gl = useThree(({
24
24
  gl
25
25
  }) => gl);
26
+ const events = useThree(({
27
+ events
28
+ }) => events);
26
29
  const set = useThree(({
27
30
  set
28
31
  }) => set);
@@ -33,7 +36,7 @@ const OrbitControls = /*#__PURE__*/React.forwardRef(({
33
36
  performance
34
37
  }) => performance);
35
38
  const explCamera = camera || defaultCamera;
36
- const explDomElement = domElement || gl.domElement;
39
+ const explDomElement = domElement || (typeof events.connected !== 'boolean' ? events.connected : gl.domElement);
37
40
  const controls = React.useMemo(() => new OrbitControls$1(explCamera), [explCamera]);
38
41
  useFrame(() => {
39
42
  if (controls.enabled) controls.update();
@@ -55,7 +58,7 @@ const OrbitControls = /*#__PURE__*/React.forwardRef(({
55
58
  if (onEnd) controls.removeEventListener('end', onEnd);
56
59
  controls.dispose();
57
60
  }; // eslint-disable-next-line react-hooks/exhaustive-deps
58
- }, [onChange, onStart, onEnd, regress, controls, invalidate]);
61
+ }, [explDomElement, onChange, onStart, onEnd, regress, controls, invalidate]);
59
62
  React.useEffect(() => {
60
63
  if (makeDefault) {
61
64
  // @ts-expect-error new in @react-three/fiber@7.0.5
@@ -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"),u=require("../helpers/Position.cjs.js");function o(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 c=o(e),s=i(t),l=i(r),f=o(a);let d,b;const m=l.createContext(null),p=new s.Matrix4,y=new s.Vector3,g=new s.Color,h=l.forwardRef((({children:e,range:t,limit:r=1e3,...a},u)=>{const o=l.useRef(null),[i,h]=l.useState([]),[[x,j]]=l.useState((()=>[new Float32Array(3*r),new Float32Array([...new Array(3*r)].map((()=>1)))]));l.useLayoutEffect((()=>{o.current.geometry.drawRange.count=Math.min(r,void 0!==t?t:r,i.length)}),[i,t]),l.useEffect((()=>{o.current.geometry.attributes.position.needsUpdate=!0})),n.useFrame((()=>{for(o.current.updateMatrix(),o.current.updateMatrixWorld(),p.copy(o.current.matrixWorld).invert(),d=0;d<i.length;d++)b=i[d].current,b.getWorldPosition(y).applyMatrix4(p),y.x===x[3*d]&&y.y===x[3*d+1]&&y.z===x[3*d+2]||(y.toArray(x,3*d),o.current.geometry.attributes.position.needsUpdate=!0,b.matrixWorldNeedsUpdate=!0),b.color.equals(g.fromArray(j,3*d))||(b.color.toArray(j,3*d),o.current.geometry.attributes.color.needsUpdate=!0)}));const v=l.useMemo((()=>{const e={};for(d=0;d<i.length;d++){var t;Object.assign(e,null==(t=i[d].current)?void 0:t.__r3f.handlers)}return Object.keys(e).reduce(((e,t)=>({...e,[t]:e=>{var r,n;const a=i[e.index].current;return null==a||null==(r=a.__r3f)||null==(n=r.handlers)?void 0:n[t]({...e,object:a})}})),{})}),[e,i]),w=l.useMemo((()=>({subscribe:e=>(h((t=>[...t,e])),()=>h((t=>t.filter((t=>t.current!==e.current)))))})),[]);return l.createElement("points",c.default({matrixAutoUpdate:!1,ref:f.default([u,o])},v,a),l.createElement("bufferGeometry",null,l.createElement("bufferAttribute",{attachObject:["attributes","position"],count:x.length/3,array:x,itemSize:3,usage:s.DynamicDrawUsage}),l.createElement("bufferAttribute",{attachObject:["attributes","color"],count:j.length/3,array:j,itemSize:3,usage:s.DynamicDrawUsage})),l.createElement(m.Provider,{value:w},e))})),x=l.forwardRef((({children:e,...t},r)=>{l.useMemo((()=>n.extend({Position:u.Position})),[]);const a=l.useRef(),{subscribe:o}=l.useContext(m);return l.useLayoutEffect((()=>o(a)),[]),l.createElement("position",c.default({ref:f.default([r,a])},t),e)}));exports.Point=x,exports.Points=h;
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"),u=require("../helpers/Position.cjs.js");function o(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 c=o(e),s=i(t),l=i(r),f=o(a);let d,b;const m=l.createContext(null),p=new s.Matrix4,y=new s.Vector3,g=new s.Color,h=l.forwardRef((({children:e,range:t,limit:r=1e3,...a},u)=>{const o=l.useRef(null),[i,h]=l.useState([]),[[x,j]]=l.useState((()=>[new Float32Array(3*r),new Float32Array([...new Array(3*r)].map((()=>1)))]));l.useLayoutEffect((()=>{o.current.geometry.drawRange.count=Math.min(r,void 0!==t?t:r,i.length)}),[i,t]),l.useEffect((()=>{o.current.geometry.attributes.position.needsUpdate=!0})),n.useFrame((()=>{for(o.current.updateMatrix(),o.current.updateMatrixWorld(),p.copy(o.current.matrixWorld).invert(),d=0;d<i.length;d++)b=i[d].current,b.getWorldPosition(y).applyMatrix4(p),y.x===x[3*d]&&y.y===x[3*d+1]&&y.z===x[3*d+2]||(y.toArray(x,3*d),o.current.geometry.attributes.position.needsUpdate=!0,b.matrixWorldNeedsUpdate=!0),b.color.equals(g.fromArray(j,3*d))||(b.color.toArray(j,3*d),o.current.geometry.attributes.color.needsUpdate=!0)}));const v=l.useMemo((()=>{const e={};for(d=0;d<i.length;d++){var t;Object.assign(e,null==(t=i[d].current)?void 0:t.__r3f.handlers)}return Object.keys(e).reduce(((e,t)=>({...e,[t]:e=>{var r,n,a;const u=null==(r=i[e.index])?void 0:r.current;return null==u||null==(n=u.__r3f)||null==(a=n.handlers)?void 0:a[t]({...e,object:u})}})),{})}),[e,i]),w=l.useMemo((()=>({subscribe:e=>(h((t=>[...t,e])),()=>h((t=>t.filter((t=>t.current!==e.current)))))})),[]);return l.createElement("points",c.default({matrixAutoUpdate:!1,ref:f.default([u,o])},v,a),l.createElement("bufferGeometry",null,l.createElement("bufferAttribute",{attachObject:["attributes","position"],count:x.length/3,array:x,itemSize:3,usage:s.DynamicDrawUsage}),l.createElement("bufferAttribute",{attachObject:["attributes","color"],count:j.length/3,array:j,itemSize:3,usage:s.DynamicDrawUsage})),l.createElement(m.Provider,{value:w},e))})),x=l.forwardRef((({children:e,...t},r)=>{l.useMemo((()=>n.extend({Position:u.Position})),[]);const a=l.useRef(),{subscribe:o}=l.useContext(m);return l.useLayoutEffect((()=>o(a)),[]),l.createElement("position",c.default({ref:f.default([r,a])},t),e)}));exports.Point=x,exports.Points=h;
package/core/Points.js CHANGED
@@ -58,9 +58,9 @@ const Points = /*#__PURE__*/React.forwardRef(({
58
58
 
59
59
  return Object.keys(events).reduce((prev, key) => ({ ...prev,
60
60
  [key]: event => {
61
- var _r3f, _r3f$handlers;
61
+ var _refs$event$index, _r3f, _r3f$handlers;
62
62
 
63
- const object = refs[event.index].current;
63
+ const object = (_refs$event$index = refs[event.index]) == null ? void 0 : _refs$event$index.current;
64
64
  return object == null ? void 0 : (_r3f = object.__r3f) == null ? void 0 : (_r3f$handlers = _r3f.handlers) == null ? void 0 : _r3f$handlers[key]({ ...event,
65
65
  object
66
66
  });
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("@react-three/fiber"),t=require("react"),n=require("three-stdlib");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}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)}var o=s(e),u=a(t);const c=u.forwardRef((({makeDefault:e,camera:t,regress:s,onChange:a,onStart:c,onEnd:i,...l},d)=>{const f=r.useThree((({invalidate:e})=>e)),m=r.useThree((({camera:e})=>e)),b=r.useThree((({gl:e})=>e)),v=r.useThree((({set:e})=>e)),h=r.useThree((({get:e})=>e)),E=r.useThree((({performance:e})=>e)),p=t||m,g=u.useMemo((()=>new n.TrackballControls(p,b.domElement)),[p,b.domElement]);return r.useFrame((()=>{g.enabled&&g.update()})),u.useEffect((()=>{const e=e=>{f(),s&&E.regress(),a&&a(e)};return g.addEventListener("change",e),c&&g.addEventListener("start",c),i&&g.addEventListener("end",i),()=>{g.removeEventListener("change",e),c&&g.removeEventListener("start",c),i&&g.removeEventListener("end",i),g.dispose()}}),[a,c,i,s,g,f]),u.useEffect((()=>{if(e){const e=h().controls;return v({controls:g}),()=>v({controls:e})}}),[e,g]),u.createElement("primitive",o.default({ref:d,object:g},l))}));exports.TrackballControls=c;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("@react-three/fiber"),t=require("react"),n=require("three-stdlib");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var a=o(e),c=s(t);const u=c.forwardRef((({makeDefault:e,camera:t,domElement:o,regress:s,onChange:u,onStart:i,onEnd:l,...d},f)=>{const b=r.useThree((({invalidate:e})=>e)),m=r.useThree((({camera:e})=>e)),v=r.useThree((({gl:e})=>e)),h=r.useThree((({events:e})=>e)),p=r.useThree((({set:e})=>e)),E=r.useThree((({get:e})=>e)),g=r.useThree((({performance:e})=>e)),T=t||m,j=o||("boolean"!=typeof h.connected?h.connected:v.domElement),O=c.useMemo((()=>new n.TrackballControls(T)),[T]);return r.useFrame((()=>{O.enabled&&O.update()})),c.useEffect((()=>{const e=e=>{b(),s&&g.regress(),u&&u(e)};return O.connect(j),O.addEventListener("change",e),i&&O.addEventListener("start",i),l&&O.addEventListener("end",l),()=>{O.removeEventListener("change",e),i&&O.removeEventListener("start",i),l&&O.removeEventListener("end",l),O.dispose()}}),[j,u,i,l,s,O,b]),c.useEffect((()=>{if(e){const e=E().controls;return p({controls:O}),()=>p({controls:e})}}),[e,O]),c.createElement("primitive",a.default({ref:f,object:O},d))}));exports.TrackballControls=u;
@@ -5,10 +5,11 @@ import { TrackballControls as TrackballControlsImpl } from 'three-stdlib';
5
5
  export declare type TrackballControlsProps = ReactThreeFiber.Overwrite<ReactThreeFiber.Object3DNode<TrackballControlsImpl, typeof TrackballControlsImpl>, {
6
6
  target?: ReactThreeFiber.Vector3;
7
7
  camera?: THREE.Camera;
8
+ domElement?: HTMLElement;
8
9
  regress?: boolean;
9
10
  makeDefault?: boolean;
10
11
  onChange?: (e?: THREE.Event) => void;
11
12
  onStart?: (e?: THREE.Event) => void;
12
13
  onEnd?: (e?: THREE.Event) => void;
13
14
  }>;
14
- export declare const TrackballControls: React.ForwardRefExoticComponent<Pick<TrackballControlsProps, "object" | "attach" | "attachArray" | "attachObject" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "onChange" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "camera" | "screen" | "reset" | "enabled" | "target" | "makeDefault" | "update" | "domElement" | "minDistance" | "maxDistance" | "zoomSpeed" | "rotateSpeed" | "panSpeed" | "keys" | "mouseButtons" | "onStart" | "onEnd" | "regress" | "noRotate" | "noZoom" | "noPan" | "staticMoving" | "dynamicDampingFactor"> & React.RefAttributes<TrackballControlsImpl>>;
15
+ export declare const TrackballControls: React.ForwardRefExoticComponent<Pick<TrackballControlsProps, "object" | "attach" | "attachArray" | "attachObject" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "onChange" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "camera" | "screen" | "reset" | "enabled" | "connect" | "target" | "makeDefault" | "update" | "domElement" | "minDistance" | "maxDistance" | "zoomSpeed" | "rotateSpeed" | "panSpeed" | "keys" | "mouseButtons" | "onStart" | "onEnd" | "regress" | "noRotate" | "noZoom" | "noPan" | "staticMoving" | "dynamicDampingFactor"> & React.RefAttributes<TrackballControlsImpl>>;
@@ -6,6 +6,7 @@ import { TrackballControls as TrackballControls$1 } from 'three-stdlib';
6
6
  const TrackballControls = /*#__PURE__*/React.forwardRef(({
7
7
  makeDefault,
8
8
  camera,
9
+ domElement,
9
10
  regress,
10
11
  onChange,
11
12
  onStart,
@@ -21,6 +22,9 @@ const TrackballControls = /*#__PURE__*/React.forwardRef(({
21
22
  const gl = useThree(({
22
23
  gl
23
24
  }) => gl);
25
+ const events = useThree(({
26
+ events
27
+ }) => events);
24
28
  const set = useThree(({
25
29
  set
26
30
  }) => set);
@@ -31,7 +35,8 @@ const TrackballControls = /*#__PURE__*/React.forwardRef(({
31
35
  performance
32
36
  }) => performance);
33
37
  const explCamera = camera || defaultCamera;
34
- const controls = React.useMemo(() => new TrackballControls$1(explCamera, gl.domElement), [explCamera, gl.domElement]);
38
+ const explDomElement = domElement || (typeof events.connected !== 'boolean' ? events.connected : gl.domElement);
39
+ const controls = React.useMemo(() => new TrackballControls$1(explCamera), [explCamera]);
35
40
  useFrame(() => {
36
41
  if (controls.enabled) controls.update();
37
42
  });
@@ -42,6 +47,7 @@ const TrackballControls = /*#__PURE__*/React.forwardRef(({
42
47
  if (onChange) onChange(e);
43
48
  };
44
49
 
50
+ controls.connect(explDomElement);
45
51
  controls.addEventListener('change', callback);
46
52
  if (onStart) controls.addEventListener('start', onStart);
47
53
  if (onEnd) controls.addEventListener('end', onEnd);
@@ -51,7 +57,7 @@ const TrackballControls = /*#__PURE__*/React.forwardRef(({
51
57
  if (onEnd) controls.removeEventListener('end', onEnd);
52
58
  controls.dispose();
53
59
  }; // eslint-disable-next-line react-hooks/exhaustive-deps
54
- }, [onChange, onStart, onEnd, regress, controls, invalidate]);
60
+ }, [explDomElement, onChange, onStart, onEnd, regress, controls, invalidate]);
55
61
  React.useEffect(() => {
56
62
  if (makeDefault) {
57
63
  // @ts-expect-error new in @react-three/fiber@7.0.5
@@ -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"),l=require("react"),u=require("three-stdlib");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function a(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 s=o(e),i=o(t),d=o(r),c=a(l);const v=c.forwardRef((({children:e,onChange:t,onMouseDown:r,onMouseUp:l,onObjectChange:o,...a},v)=>{const f=["enabled","axis","mode","translationSnap","rotationSnap","scaleSnap","space","size","showX","showY","showZ"],{camera:m,...E}=a,h=d.default(E,f),p=i.default(E,f),b=n.useThree((({gl:e})=>e)),L=n.useThree((({camera:e})=>e)),g=n.useThree((({invalidate:e})=>e)),j=m||L,[w]=c.useState((()=>new u.TransformControls(j,b.domElement))),O=c.useRef();return c.useLayoutEffect((()=>{null==w||w.attach(O.current)}),[e,w]),c.useEffect((()=>{const e=e=>{g(),t&&t(e)};return null==w||null==w.addEventListener||w.addEventListener("change",e),r&&(null==w||null==w.addEventListener||w.addEventListener("mouseDown",r)),l&&(null==w||null==w.addEventListener||w.addEventListener("mouseUp",l)),o&&(null==w||null==w.addEventListener||w.addEventListener("objectChange",o)),()=>{null==w||null==w.removeEventListener||w.removeEventListener("change",e),r&&(null==w||null==w.removeEventListener||w.removeEventListener("mouseDown",r)),l&&(null==w||null==w.removeEventListener||w.removeEventListener("mouseUp",l)),o&&(null==w||null==w.removeEventListener||w.removeEventListener("objectChange",o))}}),[t,r,l,o,w,g]),w?c.createElement(c.Fragment,null,c.createElement("primitive",s.default({ref:v,dispose:void 0,object:w},h)),c.createElement("group",s.default({ref:O},p),e)):null}));exports.TransformControls=v;
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"),l=require("react"),u=require("three"),a=require("three-stdlib");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var 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=o(e),c=o(t),d=o(r),v=s(l),f=s(u);const m=v.forwardRef((({children:e,onChange:t,onMouseDown:r,onMouseUp:l,onObjectChange:u,object:o,...s},m)=>{const E=["enabled","axis","mode","translationSnap","rotationSnap","scaleSnap","space","size","showX","showY","showZ"],{camera:h,...b}=s,g=d.default(b,E),p=c.default(b,E),L=n.useThree((e=>e.controls)),j=n.useThree((({gl:e})=>e)),w=n.useThree((({camera:e})=>e)),O=n.useThree((({invalidate:e})=>e)),q=h||w,[y]=v.useState((()=>new a.TransformControls(q,j.domElement))),C=v.useRef();return v.useLayoutEffect((()=>{o?null==y||y.attach(o instanceof f.Object3D?o:o.current):null==y||y.attach(C.current)}),[o,e,y]),v.useEffect((()=>{if(L){const e=e=>L.enabled=!e.value;return y.addEventListener("dragging-changed",e),()=>y.removeEventListener("dragging-changed",e)}}),[y,L]),v.useEffect((()=>{const e=e=>{O(),t&&t(e)};return null==y||null==y.addEventListener||y.addEventListener("change",e),r&&(null==y||null==y.addEventListener||y.addEventListener("mouseDown",r)),l&&(null==y||null==y.addEventListener||y.addEventListener("mouseUp",l)),u&&(null==y||null==y.addEventListener||y.addEventListener("objectChange",u)),()=>{null==y||null==y.removeEventListener||y.removeEventListener("change",e),r&&(null==y||null==y.removeEventListener||y.removeEventListener("mouseDown",r)),l&&(null==y||null==y.removeEventListener||y.removeEventListener("mouseUp",l)),u&&(null==y||null==y.removeEventListener||y.removeEventListener("objectChange",u))}}),[t,r,l,u,y,O]),y?v.createElement(v.Fragment,null,v.createElement("primitive",i.default({ref:m,dispose:void 0,object:y},g)),v.createElement("group",i.default({ref:C},p),e)):null}));exports.TransformControls=m;
@@ -3,6 +3,7 @@ import * as React from 'react';
3
3
  import * as THREE from 'three';
4
4
  import { TransformControls as TransformControlsImpl } from 'three-stdlib';
5
5
  export declare type TransformControlsProps = ReactThreeFiber.Object3DNode<TransformControlsImpl, typeof TransformControlsImpl> & JSX.IntrinsicElements['group'] & {
6
+ object?: THREE.Object3D | React.MutableRefObject<THREE.Object3D>;
6
7
  enabled?: boolean;
7
8
  axis?: string | null;
8
9
  mode?: string;
@@ -21,4 +22,4 @@ export declare type TransformControlsProps = ReactThreeFiber.Object3DNode<Transf
21
22
  onMouseUp?: (e?: THREE.Event) => void;
22
23
  onObjectChange?: (e?: THREE.Event) => void;
23
24
  };
24
- export declare const TransformControls: React.ForwardRefExoticComponent<Pick<TransformControlsProps, "visible" | "attach" | "attachArray" | "attachObject" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "isGroup" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "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" | "enabled" | "setSize" | "update" | "isTransformControls" | "detach" | "getMode" | "setMode" | "setTranslationSnap" | "setRotationSnap" | "setScaleSnap" | "setSpace" | "onObjectChange" | "axis" | "mode" | "translationSnap" | "rotationSnap" | "scaleSnap" | "showX" | "showY" | "showZ"> & React.RefAttributes<TransformControlsImpl<THREE.Camera>>>;
25
+ export declare const TransformControls: React.ForwardRefExoticComponent<Pick<TransformControlsProps, "object" | "visible" | "attach" | "attachArray" | "attachObject" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "isGroup" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "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" | "enabled" | "setSize" | "update" | "isTransformControls" | "detach" | "getMode" | "setMode" | "setTranslationSnap" | "setRotationSnap" | "setScaleSnap" | "setSpace" | "onObjectChange" | "axis" | "mode" | "translationSnap" | "rotationSnap" | "scaleSnap" | "showX" | "showY" | "showZ"> & React.RefAttributes<TransformControlsImpl<THREE.Camera>>>;
@@ -3,6 +3,7 @@ import { useThree } from '@react-three/fiber';
3
3
  import omit from 'lodash.omit';
4
4
  import pick from 'lodash.pick';
5
5
  import * as React from 'react';
6
+ import * as THREE from 'three';
6
7
  import { TransformControls as TransformControls$1 } from 'three-stdlib';
7
8
 
8
9
  const TransformControls = /*#__PURE__*/React.forwardRef(({
@@ -11,6 +12,7 @@ const TransformControls = /*#__PURE__*/React.forwardRef(({
11
12
  onMouseDown,
12
13
  onMouseUp,
13
14
  onObjectChange,
15
+ object,
14
16
  ...props
15
17
  }, ref) => {
16
18
  const transformOnlyPropNames = ['enabled', 'axis', 'mode', 'translationSnap', 'rotationSnap', 'scaleSnap', 'space', 'size', 'showX', 'showY', 'showZ'];
@@ -19,7 +21,9 @@ const TransformControls = /*#__PURE__*/React.forwardRef(({
19
21
  ...rest
20
22
  } = props;
21
23
  const transformProps = pick(rest, transformOnlyPropNames);
22
- const objectProps = omit(rest, transformOnlyPropNames);
24
+ const objectProps = omit(rest, transformOnlyPropNames); // @ts-expect-error new in @react-three/fiber@7.0.5
25
+
26
+ const defaultControls = useThree(state => state.controls);
23
27
  const gl = useThree(({
24
28
  gl
25
29
  }) => gl);
@@ -32,7 +36,17 @@ const TransformControls = /*#__PURE__*/React.forwardRef(({
32
36
  const explCamera = camera || defaultCamera;
33
37
  const [controls] = React.useState(() => new TransformControls$1(explCamera, gl.domElement));
34
38
  const group = React.useRef();
35
- React.useLayoutEffect(() => void (controls == null ? void 0 : controls.attach(group.current)), [children, controls]);
39
+ React.useLayoutEffect(() => {
40
+ if (object) controls == null ? void 0 : controls.attach(object instanceof THREE.Object3D ? object : object.current);else controls == null ? void 0 : controls.attach(group.current);
41
+ }, [object, children, controls]);
42
+ React.useEffect(() => {
43
+ if (defaultControls) {
44
+ const callback = event => defaultControls.enabled = !event.value;
45
+
46
+ controls.addEventListener('dragging-changed', callback);
47
+ return () => controls.removeEventListener('dragging-changed', callback);
48
+ }
49
+ }, [controls, defaultControls]);
36
50
  React.useEffect(() => {
37
51
  const callback = e => {
38
52
  invalidate();
package/core/index.cjs.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./Billboard.cjs.js"),r=require("./Cloud.cjs.js"),s=require("./QuadraticBezierLine.cjs.js"),t=require("./CubicBezierLine.cjs.js"),o=require("./Line.cjs.js"),i=require("./PositionalAudio.cjs.js"),u=require("./Text.cjs.js"),a=require("./Environment.cjs.js"),j=require("./Effects.cjs.js"),c=require("./GradientTexture.cjs.js"),p=require("./OrthographicCamera.cjs.js"),n=require("./PerspectiveCamera.cjs.js"),l=require("./CameraShake.cjs.js"),x=require("./CubeCamera.cjs.js"),q=require("./DeviceOrientationControls.cjs.js"),d=require("./FlyControls.cjs.js"),h=require("./MapControls.cjs.js"),C=require("./OrbitControls.cjs.js"),m=require("./TrackballControls.cjs.js"),b=require("./TransformControls.cjs.js"),S=require("./PointerLockControls.cjs.js"),P=require("./FirstPersonControls.cjs.js"),T=require("./GizmoHelper.cjs.js"),f=require("./GizmoViewcube.cjs.js"),B=require("./GizmoViewport.cjs.js"),M=require("./useCubeTexture.cjs.js"),g=require("./useFBX.cjs.js"),v=require("./useGLTF.cjs.js"),L=require("./useProgress.cjs.js"),G=require("./useTexture.cjs.js"),D=require("./Reflector.cjs.js"),A=require("./Shadow.cjs.js"),w=require("./Stats.cjs.js"),z=require("./Center.cjs.js"),k=require("./DepthBuffer.cjs.js"),F=require("./useAspect.cjs.js"),O=require("./useCamera.cjs.js"),E=require("./useDetectGPU.cjs.js"),y=require("./useHelper.cjs.js"),I=require("./useBVH.cjs.js"),H=require("./useContextBridge.cjs.js"),R=require("./useAnimations.cjs.js"),V=require("./useFBO.cjs.js"),Q=require("./useSimplification.cjs.js"),W=require("./useTessellation.cjs.js"),N=require("./useEdgeSplit.cjs.js"),U=require("./CurveModifier.cjs.js"),X=require("./MeshDistortMaterial.cjs.js"),K=require("./MeshWobbleMaterial.cjs.js"),_=require("./PointMaterial.cjs.js"),J=require("./shaderMaterial.cjs.js"),Y=require("./Sky.cjs.js"),Z=require("./softShadows.cjs.js"),$=require("./Stars.cjs.js"),ee=require("./ContactShadows.cjs.js"),re=require("./SpotLight.cjs.js"),se=require("./shapes.cjs.js"),te=require("./RoundedBox.cjs.js"),oe=require("./ScreenQuad.cjs.js"),ie=require("./useMatcapTexture.cjs.js"),ue=require("./useNormalTexture.cjs.js"),ae=require("./Stage.cjs.js"),je=require("./Points.cjs.js"),ce=require("./Instances.cjs.js"),pe=require("./Detailed.cjs.js"),ne=require("./Preload.cjs.js"),le=require("./BakeShadows.cjs.js"),xe=require("./meshBounds.cjs.js"),qe=require("./AdaptiveDpr.cjs.js"),de=require("./AdaptiveEvents.cjs.js");require("@babel/runtime/helpers/extends"),require("react"),require("@react-three/fiber"),require("react-merge-refs"),require("../assets/cloud.base64.cjs.js"),require("../helpers/base64.cjs.js"),require("blob-polyfill"),require("three"),require("three-stdlib"),require("troika-three-text"),require("use-asset"),require("../helpers/environment-assets.cjs.js"),require("lodash.omit"),require("lodash.pick"),require("zustand"),require("../materials/MeshReflectorMaterial.cjs.js"),require("three/examples/js/libs/stats.min"),require("../helpers/useEffectfulState.cjs.js"),require("detect-gpu"),require("three-mesh-bvh"),require("../materials/SpotLightMaterial.cjs.js"),require("../helpers/matcap-assets.cjs.js"),require("../helpers/normal-assets.cjs.js"),require("../helpers/Position.cjs.js"),require("react-composer"),exports.Billboard=e.Billboard,exports.Cloud=r.Cloud,exports.QuadraticBezierLine=s.QuadraticBezierLine,exports.CubicBezierLine=t.CubicBezierLine,exports.Line=o.Line,exports.PositionalAudio=i.PositionalAudio,exports.Text=u.Text,exports.Environment=a.Environment,exports.Effects=j.Effects,exports.isWebGL2Available=j.isWebGL2Available,exports.GradientTexture=c.GradientTexture,exports.OrthographicCamera=p.OrthographicCamera,exports.PerspectiveCamera=n.PerspectiveCamera,exports.CameraShake=l.CameraShake,exports.CubeCamera=x.CubeCamera,exports.DeviceOrientationControls=q.DeviceOrientationControls,exports.FlyControls=d.FlyControls,exports.MapControls=h.MapControls,exports.OrbitControls=C.OrbitControls,exports.TrackballControls=m.TrackballControls,exports.TransformControls=b.TransformControls,exports.PointerLockControls=S.PointerLockControls,exports.FirstPersonControls=P.FirstPersonControls,exports.GizmoHelper=T.GizmoHelper,exports.useGizmoContext=T.useGizmoContext,exports.GizmoViewcube=f.GizmoViewcube,exports.GizmoViewport=B.GizmoViewport,exports.useCubeTexture=M.useCubeTexture,exports.useFBX=g.useFBX,exports.useGLTF=v.useGLTF,exports.useProgress=L.useProgress,exports.IsObject=G.IsObject,exports.useTexture=G.useTexture,exports.Reflector=D.Reflector,exports.Shadow=A.Shadow,exports.Stats=w.Stats,exports.Center=z.Center,exports.DepthBuffer=k.DepthBuffer,exports.useAspect=F.useAspect,exports.useCamera=O.useCamera,exports.useDetectGPU=E.useDetectGPU,exports.useHelper=y.useHelper,exports.useBVH=I.useBVH,exports.useContextBridge=H.useContextBridge,exports.useAnimations=R.useAnimations,exports.useFBO=V.useFBO,exports.useSimplification=Q.useSimplification,exports.useTessellation=W.useTessellation,exports.useEdgeSplit=N.useEdgeSplit,exports.CurveModifier=U.CurveModifier,exports.MeshDistortMaterial=X.MeshDistortMaterial,exports.MeshWobbleMaterial=K.MeshWobbleMaterial,exports.PointMaterial=_.PointMaterial,exports.PointMaterialImpl=_.PointMaterialImpl,exports.shaderMaterial=J.shaderMaterial,exports.Sky=Y.Sky,exports.calcPosFromAngles=Y.calcPosFromAngles,exports.softShadows=Z.softShadows,exports.Stars=$.Stars,exports.ContactShadows=ee.ContactShadows,exports.SpotLight=re.SpotLight,exports.Box=se.Box,exports.Circle=se.Circle,exports.Cone=se.Cone,exports.Cylinder=se.Cylinder,exports.Dodecahedron=se.Dodecahedron,exports.Extrude=se.Extrude,exports.Icosahedron=se.Icosahedron,exports.Lathe=se.Lathe,exports.Octahedron=se.Octahedron,exports.Parametric=se.Parametric,exports.Plane=se.Plane,exports.Polyhedron=se.Polyhedron,exports.Ring=se.Ring,exports.Sphere=se.Sphere,exports.Tetrahedron=se.Tetrahedron,exports.Torus=se.Torus,exports.TorusKnot=se.TorusKnot,exports.Tube=se.Tube,exports.RoundedBox=te.RoundedBox,exports.ScreenQuad=oe.ScreenQuad,exports.useMatcapTexture=ie.useMatcapTexture,exports.useNormalTexture=ue.useNormalTexture,exports.Stage=ae.Stage,exports.Point=je.Point,exports.Points=je.Points,exports.Instance=ce.Instance,exports.Instances=ce.Instances,exports.Merged=ce.Merged,exports.Detailed=pe.Detailed,exports.Preload=ne.Preload,exports.BakeShadows=le.BakeShadows,exports.meshBounds=xe.meshBounds,exports.AdaptiveDpr=qe.AdaptiveDpr,exports.AdaptiveEvents=de.AdaptiveEvents;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./Billboard.cjs.js"),r=require("./Cloud.cjs.js"),s=require("./QuadraticBezierLine.cjs.js"),t=require("./CubicBezierLine.cjs.js"),o=require("./Line.cjs.js"),i=require("./PositionalAudio.cjs.js"),u=require("./Text.cjs.js"),a=require("./Environment.cjs.js"),c=require("./Effects.cjs.js"),j=require("./GradientTexture.cjs.js"),p=require("./OrthographicCamera.cjs.js"),n=require("./PerspectiveCamera.cjs.js"),l=require("./CameraShake.cjs.js"),x=require("./CubeCamera.cjs.js"),q=require("./DeviceOrientationControls.cjs.js"),d=require("./FlyControls.cjs.js"),C=require("./MapControls.cjs.js"),h=require("./OrbitControls.cjs.js"),m=require("./TrackballControls.cjs.js"),b=require("./ArcballControls.cjs.js"),S=require("./TransformControls.cjs.js"),P=require("./PointerLockControls.cjs.js"),T=require("./FirstPersonControls.cjs.js"),f=require("./GizmoHelper.cjs.js"),B=require("./GizmoViewcube.cjs.js"),M=require("./GizmoViewport.cjs.js"),g=require("./useCubeTexture.cjs.js"),v=require("./useFBX.cjs.js"),L=require("./useGLTF.cjs.js"),A=require("./useProgress.cjs.js"),G=require("./useTexture.cjs.js"),D=require("./Reflector.cjs.js"),w=require("./Shadow.cjs.js"),z=require("./Stats.cjs.js"),k=require("./Center.cjs.js"),F=require("./DepthBuffer.cjs.js"),O=require("./useAspect.cjs.js"),E=require("./useCamera.cjs.js"),y=require("./useDetectGPU.cjs.js"),I=require("./useHelper.cjs.js"),H=require("./useBVH.cjs.js"),R=require("./useContextBridge.cjs.js"),V=require("./useAnimations.cjs.js"),Q=require("./useFBO.cjs.js"),W=require("./useSimplification.cjs.js"),N=require("./useTessellation.cjs.js"),U=require("./useEdgeSplit.cjs.js"),X=require("./CurveModifier.cjs.js"),K=require("./MeshDistortMaterial.cjs.js"),_=require("./MeshWobbleMaterial.cjs.js"),J=require("./PointMaterial.cjs.js"),Y=require("./shaderMaterial.cjs.js"),Z=require("./Sky.cjs.js"),$=require("./softShadows.cjs.js"),ee=require("./Stars.cjs.js"),re=require("./ContactShadows.cjs.js"),se=require("./SpotLight.cjs.js"),te=require("./shapes.cjs.js"),oe=require("./RoundedBox.cjs.js"),ie=require("./ScreenQuad.cjs.js"),ue=require("./useMatcapTexture.cjs.js"),ae=require("./useNormalTexture.cjs.js"),ce=require("./Stage.cjs.js"),je=require("./Points.cjs.js"),pe=require("./Instances.cjs.js"),ne=require("./Detailed.cjs.js"),le=require("./Preload.cjs.js"),xe=require("./BakeShadows.cjs.js"),qe=require("./meshBounds.cjs.js"),de=require("./AdaptiveDpr.cjs.js"),Ce=require("./AdaptiveEvents.cjs.js");require("@babel/runtime/helpers/extends"),require("react"),require("@react-three/fiber"),require("react-merge-refs"),require("../assets/cloud.base64.cjs.js"),require("../helpers/base64.cjs.js"),require("blob-polyfill"),require("three"),require("three-stdlib"),require("troika-three-text"),require("use-asset"),require("../helpers/environment-assets.cjs.js"),require("lodash.omit"),require("lodash.pick"),require("zustand"),require("../materials/MeshReflectorMaterial.cjs.js"),require("three/examples/js/libs/stats.min"),require("../helpers/useEffectfulState.cjs.js"),require("detect-gpu"),require("three-mesh-bvh"),require("../materials/SpotLightMaterial.cjs.js"),require("../helpers/matcap-assets.cjs.js"),require("../helpers/normal-assets.cjs.js"),require("../helpers/Position.cjs.js"),require("react-composer"),exports.Billboard=e.Billboard,exports.Cloud=r.Cloud,exports.QuadraticBezierLine=s.QuadraticBezierLine,exports.CubicBezierLine=t.CubicBezierLine,exports.Line=o.Line,exports.PositionalAudio=i.PositionalAudio,exports.Text=u.Text,exports.Environment=a.Environment,exports.Effects=c.Effects,exports.isWebGL2Available=c.isWebGL2Available,exports.GradientTexture=j.GradientTexture,exports.OrthographicCamera=p.OrthographicCamera,exports.PerspectiveCamera=n.PerspectiveCamera,exports.CameraShake=l.CameraShake,exports.CubeCamera=x.CubeCamera,exports.DeviceOrientationControls=q.DeviceOrientationControls,exports.FlyControls=d.FlyControls,exports.MapControls=C.MapControls,exports.OrbitControls=h.OrbitControls,exports.TrackballControls=m.TrackballControls,exports.ArcballControls=b.ArcballControls,exports.TransformControls=S.TransformControls,exports.PointerLockControls=P.PointerLockControls,exports.FirstPersonControls=T.FirstPersonControls,exports.GizmoHelper=f.GizmoHelper,exports.useGizmoContext=f.useGizmoContext,exports.GizmoViewcube=B.GizmoViewcube,exports.GizmoViewport=M.GizmoViewport,exports.useCubeTexture=g.useCubeTexture,exports.useFBX=v.useFBX,exports.useGLTF=L.useGLTF,exports.useProgress=A.useProgress,exports.IsObject=G.IsObject,exports.useTexture=G.useTexture,exports.Reflector=D.Reflector,exports.Shadow=w.Shadow,exports.Stats=z.Stats,exports.Center=k.Center,exports.DepthBuffer=F.DepthBuffer,exports.useAspect=O.useAspect,exports.useCamera=E.useCamera,exports.useDetectGPU=y.useDetectGPU,exports.useHelper=I.useHelper,exports.useBVH=H.useBVH,exports.useContextBridge=R.useContextBridge,exports.useAnimations=V.useAnimations,exports.useFBO=Q.useFBO,exports.useSimplification=W.useSimplification,exports.useTessellation=N.useTessellation,exports.useEdgeSplit=U.useEdgeSplit,exports.CurveModifier=X.CurveModifier,exports.MeshDistortMaterial=K.MeshDistortMaterial,exports.MeshWobbleMaterial=_.MeshWobbleMaterial,exports.PointMaterial=J.PointMaterial,exports.PointMaterialImpl=J.PointMaterialImpl,exports.shaderMaterial=Y.shaderMaterial,exports.Sky=Z.Sky,exports.calcPosFromAngles=Z.calcPosFromAngles,exports.softShadows=$.softShadows,exports.Stars=ee.Stars,exports.ContactShadows=re.ContactShadows,exports.SpotLight=se.SpotLight,exports.Box=te.Box,exports.Circle=te.Circle,exports.Cone=te.Cone,exports.Cylinder=te.Cylinder,exports.Dodecahedron=te.Dodecahedron,exports.Extrude=te.Extrude,exports.Icosahedron=te.Icosahedron,exports.Lathe=te.Lathe,exports.Octahedron=te.Octahedron,exports.Parametric=te.Parametric,exports.Plane=te.Plane,exports.Polyhedron=te.Polyhedron,exports.Ring=te.Ring,exports.Sphere=te.Sphere,exports.Tetrahedron=te.Tetrahedron,exports.Torus=te.Torus,exports.TorusKnot=te.TorusKnot,exports.Tube=te.Tube,exports.RoundedBox=oe.RoundedBox,exports.ScreenQuad=ie.ScreenQuad,exports.useMatcapTexture=ue.useMatcapTexture,exports.useNormalTexture=ae.useNormalTexture,exports.Stage=ce.Stage,exports.Point=je.Point,exports.Points=je.Points,exports.Instance=pe.Instance,exports.Instances=pe.Instances,exports.Merged=pe.Merged,exports.Detailed=ne.Detailed,exports.Preload=le.Preload,exports.BakeShadows=xe.BakeShadows,exports.meshBounds=qe.meshBounds,exports.AdaptiveDpr=de.AdaptiveDpr,exports.AdaptiveEvents=Ce.AdaptiveEvents;
package/core/index.d.ts CHANGED
@@ -17,6 +17,7 @@ export * from './FlyControls';
17
17
  export * from './MapControls';
18
18
  export * from './OrbitControls';
19
19
  export * from './TrackballControls';
20
+ export * from './ArcballControls';
20
21
  export * from './TransformControls';
21
22
  export * from './PointerLockControls';
22
23
  export * from './FirstPersonControls';
package/core/index.js CHANGED
@@ -17,6 +17,7 @@ export { FlyControls } from './FlyControls.js';
17
17
  export { MapControls } from './MapControls.js';
18
18
  export { OrbitControls } from './OrbitControls.js';
19
19
  export { TrackballControls } from './TrackballControls.js';
20
+ export { ArcballControls } from './ArcballControls.js';
20
21
  export { TransformControls } from './TransformControls.js';
21
22
  export { PointerLockControls } from './PointerLockControls.js';
22
23
  export { FirstPersonControls } from './FirstPersonControls.js';
@@ -1,3 +1,3 @@
1
1
  var distort = "#define GLSLIFY 1\nvec3 mod289(vec3 x){return x-floor(x*(1.0/289.0))*289.0;}vec4 mod289(vec4 x){return x-floor(x*(1.0/289.0))*289.0;}vec4 permute(vec4 x){return mod289(((x*34.0)+1.0)*x);}vec4 taylorInvSqrt(vec4 r){return 1.79284291400159-0.85373472095314*r;}float snoise(vec3 v){const vec2 C=vec2(1.0/6.0,1.0/3.0);const vec4 D=vec4(0.0,0.5,1.0,2.0);vec3 i=floor(v+dot(v,C.yyy));vec3 x0=v-i+dot(i,C.xxx);vec3 g=step(x0.yzx,x0.xyz);vec3 l=1.0-g;vec3 i1=min(g.xyz,l.zxy);vec3 i2=max(g.xyz,l.zxy);vec3 x1=x0-i1+C.xxx;vec3 x2=x0-i2+C.yyy;vec3 x3=x0-D.yyy;i=mod289(i);vec4 p=permute(permute(permute(i.z+vec4(0.0,i1.z,i2.z,1.0))+i.y+vec4(0.0,i1.y,i2.y,1.0))+i.x+vec4(0.0,i1.x,i2.x,1.0));float n_=0.142857142857;vec3 ns=n_*D.wyz-D.xzx;vec4 j=p-49.0*floor(p*ns.z*ns.z);vec4 x_=floor(j*ns.z);vec4 y_=floor(j-7.0*x_);vec4 x=x_*ns.x+ns.yyyy;vec4 y=y_*ns.x+ns.yyyy;vec4 h=1.0-abs(x)-abs(y);vec4 b0=vec4(x.xy,y.xy);vec4 b1=vec4(x.zw,y.zw);vec4 s0=floor(b0)*2.0+1.0;vec4 s1=floor(b1)*2.0+1.0;vec4 sh=-step(h,vec4(0.0));vec4 a0=b0.xzyw+s0.xzyw*sh.xxyy;vec4 a1=b1.xzyw+s1.xzyw*sh.zzww;vec3 p0=vec3(a0.xy,h.x);vec3 p1=vec3(a0.zw,h.y);vec3 p2=vec3(a1.xy,h.z);vec3 p3=vec3(a1.zw,h.w);vec4 norm=taylorInvSqrt(vec4(dot(p0,p0),dot(p1,p1),dot(p2,p2),dot(p3,p3)));p0*=norm.x;p1*=norm.y;p2*=norm.z;p3*=norm.w;vec4 m=max(0.6-vec4(dot(x0,x0),dot(x1,x1),dot(x2,x2),dot(x3,x3)),0.0);m=m*m;return 42.0*dot(m*m,vec4(dot(p0,x0),dot(p1,x1),dot(p2,x2),dot(p3,x3)));}"; // eslint-disable-line
2
2
 
3
- export default distort;
3
+ export { distort as default };
@@ -15,4 +15,4 @@ function useEffectfulState(fn, deps = [], cb) {
15
15
  return state;
16
16
  }
17
17
 
18
- export default useEffectfulState;
18
+ export { useEffectfulState as default };