@react-three/drei 9.0.0-beta.4 → 9.0.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.
- package/core/AdaptiveEvents.cjs.js +1 -1
- package/core/AdaptiveEvents.js +8 -3
- package/core/DeviceOrientationControls.d.ts +1 -1
- package/core/FirstPersonControls.cjs.js +1 -1
- package/core/FirstPersonControls.d.ts +4 -2
- package/core/FirstPersonControls.js +7 -2
- package/core/FlyControls.cjs.js +1 -1
- package/core/FlyControls.d.ts +1 -0
- package/core/FlyControls.js +10 -11
- package/core/Line.d.ts +1 -1
- package/core/MapControls.cjs.js +1 -1
- package/core/MapControls.d.ts +2 -1
- package/core/MapControls.js +8 -11
- package/core/PointerLockControls.cjs.js +1 -1
- package/core/PointerLockControls.js +14 -10
- package/core/Points.d.ts +1 -1
- package/core/PositionalAudio.d.ts +1 -1
- package/core/TrackballControls.d.ts +1 -1
- package/core/TransformControls.d.ts +1 -1
- package/core/useCamera.cjs.js +1 -1
- package/core/useCamera.js +2 -2
- package/core/useMatcapTexture.cjs.js +1 -1
- package/core/useProgress.d.ts +1 -1
- package/index.cjs.js +1 -1
- package/package.json +2 -2
- package/web/CycleRaycast.cjs.js +1 -1
- package/web/CycleRaycast.js +23 -20
- package/web/ScrollControls.cjs.js +1 -1
- package/web/ScrollControls.js +14 -10
- package/web/Select.cjs.js +1 -1
- package/web/Select.js +9 -8
package/web/CycleRaycast.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@react-three/fiber");function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@react-three/fiber");function n(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 r=n(e);exports.CycleRaycast=function({onChanged:e,portal:n,preventDefault:o=!0,scroll:l=!0,keyCode:u=9}){const c=r.useRef(0),d=t.useThree((e=>e.setEvents)),i=t.useThree((e=>e.get)),a=t.useThree((e=>e.gl));return r.useEffect((()=>{var t;let r,s=[];const v=i().events.filter,f=null!==(t=null==n?void 0:n.current)&&void 0!==t?t:a.domElement.parentNode,h=()=>f&&e&&e(s,Math.round(c.current)%s.length);d({filter:(e,t)=>{let n=[...e];n.length===s.length&&s.every((e=>n.map((e=>e.object.uuid)).includes(e.object.uuid)))||(c.current=0,s=n,h()),v&&(n=v(n,t));for(let e=0;e<Math.round(c.current)%n.length;e++){const e=n.shift();n=[...n,e]}return n}});const m=e=>{var t,n;c.current=e(c.current),null==(t=i().events.handlers)||t.onPointerCancel(void 0),null==(n=i().events.handlers)||n.onPointerMove(r),h()},p=e=>{(e.keyCode||e.which===u)&&(o&&e.preventDefault(),s.length>1&&m((e=>e+1)))},g=e=>{o&&e.preventDefault();let t=0;e||(e=window.event),e.wheelDelta?t=e.wheelDelta/120:e.detail&&(t=-e.detail/3),s.length>1&&m((e=>Math.abs(e-t)))},b=e=>r=e;return document.addEventListener("pointermove",b,{passive:!0}),l&&document.addEventListener("wheel",g),void 0!==u&&document.addEventListener("keydown",p),()=>{d({filter:v}),void 0!==u&&document.removeEventListener("keydown",p),l&&document.removeEventListener("wheel",g),document.removeEventListener("pointermove",b)}}),[a,i,d,o,l,u]),null};
|
package/web/CycleRaycast.js
CHANGED
|
@@ -9,7 +9,7 @@ function CycleRaycast({
|
|
|
9
9
|
keyCode = 9
|
|
10
10
|
}) {
|
|
11
11
|
const cycle = React.useRef(0);
|
|
12
|
-
const
|
|
12
|
+
const setEvents = useThree(state => state.setEvents);
|
|
13
13
|
const get = useThree(state => state.get);
|
|
14
14
|
const gl = useThree(state => state.gl);
|
|
15
15
|
React.useEffect(() => {
|
|
@@ -17,33 +17,34 @@ function CycleRaycast({
|
|
|
17
17
|
|
|
18
18
|
let hits = [];
|
|
19
19
|
let lastEvent = undefined;
|
|
20
|
-
const prev =
|
|
20
|
+
const prev = get().events.filter;
|
|
21
21
|
const target = (_portal$current = portal == null ? void 0 : portal.current) !== null && _portal$current !== void 0 ? _portal$current : gl.domElement.parentNode; // Render custom status
|
|
22
22
|
|
|
23
23
|
const renderStatus = () => target && onChanged && onChanged(hits, Math.round(cycle.current) % hits.length); // Overwrite the raycasters custom filter (this only exists in r3f)
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
setEvents({
|
|
27
|
+
filter: (intersections, state) => {
|
|
28
|
+
// Reset cycle when the intersections change
|
|
29
|
+
let clone = [...intersections];
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
if (clone.length !== hits.length || !hits.every(hit => clone.map(e => e.object.uuid).includes(hit.object.uuid))) {
|
|
32
|
+
cycle.current = 0;
|
|
33
|
+
hits = clone;
|
|
34
|
+
renderStatus();
|
|
35
|
+
} // Run custom filter if there is one
|
|
35
36
|
|
|
36
37
|
|
|
37
|
-
|
|
38
|
+
if (prev) clone = prev(clone, state); // Cycle through the actual raycast intersects
|
|
38
39
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
return clone;
|
|
45
|
-
}; // Cycle, refresh events and render status
|
|
40
|
+
for (let i = 0; i < Math.round(cycle.current) % clone.length; i++) {
|
|
41
|
+
const first = clone.shift();
|
|
42
|
+
clone = [...clone, first];
|
|
43
|
+
}
|
|
46
44
|
|
|
45
|
+
return clone;
|
|
46
|
+
}
|
|
47
|
+
}); // Cycle, refresh events and render status
|
|
47
48
|
|
|
48
49
|
const refresh = fn => {
|
|
49
50
|
var _get$events$handlers, _get$events$handlers2;
|
|
@@ -82,12 +83,14 @@ function CycleRaycast({
|
|
|
82
83
|
if (keyCode !== undefined) document.addEventListener('keydown', tabEvent);
|
|
83
84
|
return () => {
|
|
84
85
|
// Clean up
|
|
85
|
-
|
|
86
|
+
setEvents({
|
|
87
|
+
filter: prev
|
|
88
|
+
});
|
|
86
89
|
if (keyCode !== undefined) document.removeEventListener('keydown', tabEvent);
|
|
87
90
|
if (scroll) document.removeEventListener('wheel', wheelEvent);
|
|
88
91
|
document.removeEventListener('pointermove', moveEvent);
|
|
89
92
|
};
|
|
90
|
-
}, [gl, get,
|
|
93
|
+
}, [gl, get, setEvents, preventDefault, scroll, keyCode]);
|
|
91
94
|
return null;
|
|
92
95
|
}
|
|
93
96
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),o=require("react-dom/client"),s=require("@react-three/fiber"),n=require("react-merge-refs");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),o=require("react-dom/client"),s=require("@react-three/fiber"),n=require("react-merge-refs");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var a=l(e),c=i(t),f=i(r),u=i(o),d=l(n);const h=f.createContext(null);function p(){return f.useContext(h)}const m=f.forwardRef((({children:e},t)=>{const r=f.useRef(null),o=p(),{width:n,height:l}=s.useThree((e=>e.viewport));return s.useFrame((()=>{r.current.position.x=o.horizontal?-n*(o.pages-1)*o.offset:0,r.current.position.y=o.horizontal?0:l*(o.pages-1)*o.offset})),f.createElement("group",{ref:d.default([t,r])},e)})),v=f.forwardRef((({children:e,style:t,...r},o)=>{const n=p(),l=f.useRef(null),{width:i,height:c}=s.useThree((e=>e.size)),m=f.useContext(s.context),v=f.useMemo((()=>u.createRoot(n.fixed)),[n.fixed]);return s.useFrame((()=>{n.delta>n.eps&&(l.current.style.transform=`translate3d(${n.horizontal?-i*(n.pages-1)*n.offset:0}px,${n.horizontal?0:c*(n.pages-1)*-n.offset}px,0)`)})),v.render(f.createElement("div",a.default({ref:d.default([o,l]),style:{...t,position:"absolute",top:0,left:0,willChange:"transform"}},r),f.createElement(h.Provider,{value:n},f.createElement(s.context.Provider,{value:m},e)))),null})),y=f.forwardRef((({html:e,...t},r)=>{const o=e?v:m;return f.createElement(o,a.default({ref:r},t))}));exports.Scroll=y,exports.ScrollControls=function({eps:e=1e-5,enabled:t=!0,infinite:r,horizontal:o,pages:n=1,distance:l=1,damping:i=4,style:a={},children:u}){const{get:d,setEvents:p,gl:m,size:v,invalidate:y,events:g,raycaster:w}=s.useThree(),[x]=f.useState((()=>document.createElement("div"))),[E]=f.useState((()=>document.createElement("div"))),[b]=f.useState((()=>document.createElement("div"))),z=m.domElement.parentNode,L=f.useRef(0),C=f.useMemo((()=>{const t={el:x,eps:e,fill:E,fixed:b,horizontal:o,damping:i,offset:0,delta:0,scroll:L,pages:n,range(e,t,r=0){const o=e-r,s=o+t+2*r;return this.offset<o?0:this.offset>s?1:(this.offset-o)/(s-o)},curve(e,t,r=0){return Math.sin(this.range(e,t,r)*Math.PI)},visible(e,t,r=0){const o=e-r,s=o+t+2*r;return this.offset>=o&&this.offset<=s}};return t}),[e,i,o,n]);f.useEffect((()=>{x.style.position="absolute",x.style.width="100%",x.style.height="100%",x.style[o?"overflowX":"overflowY"]="auto",x.style[o?"overflowY":"overflowX"]="hidden",x.style.top="0px",x.style.left="0px";for(const e in a)x.style[e]=a[e];b.style.position="sticky",b.style.top="0px",b.style.left="0px",b.style.width="100%",b.style.height="100%",b.style.overflow="hidden",x.appendChild(b),E.style.height=o?"100%":n*l*100+"%",E.style.width=o?n*l*100+"%":"100%",E.style.pointerEvents="none",x.appendChild(E),z.appendChild(x),x[o?"scrollLeft":"scrollTop"]=1;const e=g.connected||m.domElement;requestAnimationFrame((()=>null==g.connect?void 0:g.connect(x)));const t=d().events.compute;return p({compute(e,t){const r=e.clientX-e.target.offsetLeft,o=e.clientX-e.target.offsetLeft;t.pointer.set(r/t.size.width*2-1,-o/t.size.height*2+1),t.raycaster.setFromCamera(t.pointer,t.camera)}}),()=>{z.removeChild(x),p({compute:t}),null==g.connect||g.connect(e)}}),[n,l,o,x,E,b,z]),f.useEffect((()=>{const e=v[o?"width":"height"],s=x[o?"scrollWidth":"scrollHeight"],n=s-e;let l=0,i=!0,a=!0;const c=()=>{if(t&&!a&&(y(),l=x[o?"scrollLeft":"scrollTop"],L.current=l/n,r)){if(!i)if(l>=n){const e=1-C.offset;x[o?"scrollLeft":"scrollTop"]=1,L.current=C.offset=-e,i=!0}else if(l<=0){const e=1+C.offset;x[o?"scrollLeft":"scrollTop"]=s,L.current=C.offset=e,i=!0}i&&setTimeout((()=>i=!1),40)}};x.addEventListener("scroll",c,{passive:!0}),requestAnimationFrame((()=>a=!1));const f=e=>x.scrollLeft+=e.deltaY/2;return o&&x.addEventListener("wheel",f,{passive:!0}),()=>{x.removeEventListener("scroll",c),o&&x.removeEventListener("wheel",f)}}),[x,v,r,C,y,o,t]);let M=0;return s.useFrame(((t,r)=>{C.offset=c.MathUtils.damp(M=C.offset,L.current,i,r),C.delta=c.MathUtils.damp(C.delta,Math.abs(M-C.offset),i,r),C.delta>e&&y()})),f.createElement(h.Provider,{value:C},u)},exports.useScroll=p;
|
package/web/ScrollControls.js
CHANGED
|
@@ -21,6 +21,8 @@ function ScrollControls({
|
|
|
21
21
|
children
|
|
22
22
|
}) {
|
|
23
23
|
const {
|
|
24
|
+
get,
|
|
25
|
+
setEvents,
|
|
24
26
|
gl,
|
|
25
27
|
size,
|
|
26
28
|
invalidate,
|
|
@@ -96,19 +98,21 @@ function ScrollControls({
|
|
|
96
98
|
el[horizontal ? 'scrollLeft' : 'scrollTop'] = 1;
|
|
97
99
|
const oldTarget = events.connected || gl.domElement;
|
|
98
100
|
requestAnimationFrame(() => events.connect == null ? void 0 : events.connect(el));
|
|
99
|
-
const oldCompute =
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
});
|
|
101
|
+
const oldCompute = get().events.compute;
|
|
102
|
+
setEvents({
|
|
103
|
+
compute(event, state) {
|
|
104
|
+
const offsetX = event.clientX - event.target.offsetLeft;
|
|
105
|
+
const offsetY = event.clientX - event.target.offsetLeft;
|
|
106
|
+
state.pointer.set(offsetX / state.size.width * 2 - 1, -(offsetY / state.size.height) * 2 + 1);
|
|
107
|
+
state.raycaster.setFromCamera(state.pointer, state.camera);
|
|
108
|
+
}
|
|
108
109
|
|
|
110
|
+
});
|
|
109
111
|
return () => {
|
|
110
112
|
target.removeChild(el);
|
|
111
|
-
|
|
113
|
+
setEvents({
|
|
114
|
+
compute: oldCompute
|
|
115
|
+
});
|
|
112
116
|
events.connect == null ? void 0 : events.connect(oldTarget);
|
|
113
117
|
};
|
|
114
118
|
}, [pages, distance, horizontal, el, fill, fixed, target]);
|
package/web/Select.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),n=require("three"),r=require("three-stdlib"),o=require("@react-three/fiber"),i=require("zustand/shallow");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
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),n=require("three"),r=require("three-stdlib"),o=require("@react-three/fiber"),i=require("zustand/shallow");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),u=s(t),a=s(n),d=l(i);const f=u.createContext([]);exports.Select=function({box:e,multiple:t,children:n,onChange:i,border:l="1px solid #55aaff",backgroundColor:s="rgba(75, 160, 255, 0.1)",filter:p=(e=>e),...v}){const{setEvents:b,camera:y,raycaster:h,gl:m,controls:x,size:E,get:g}=o.useThree(),[j,w]=u.useState(!1),[C,P]=u.useReducer(((e,{object:t,shift:n})=>void 0===t?[]:Array.isArray(t)?t:n?e.includes(t)?e.filter((e=>e!==t)):[t,...e]:e[0]===t?[]:[t]),[]);u.useEffect((()=>{null==i||i(C)}),[C]);const O=u.useCallback((e=>{e.stopPropagation(),P({object:p([e.object])[0],shift:t&&e.shiftKey})}),[]),M=u.useCallback((e=>!j&&P({})),[j]),k=u.useRef(null);return u.useEffect((()=>{if(!e||!t)return;const n=new r.SelectionBox(y,k.current),o=document.createElement("div");o.style.pointerEvents="none",o.style.border=l,o.style.backgroundColor=s,o.style.position="fixed";const i=new a.Vector2,c=new a.Vector2,u=new a.Vector2,f=g().events.enabled,v=null==x?void 0:x.enabled;let h=!1;function j(e,t){const{offsetX:n,offsetY:r}=e,{width:o,height:i}=E;t.set(n/o*2-1,-r/i*2+1)}function w(e){e.shiftKey&&(!function(e){var t;x&&(x.enabled=!1),b({enabled:!1}),h=!0,null==(t=m.domElement.parentElement)||t.appendChild(o),o.style.left=`${e.clientX}px`,o.style.top=`${e.clientY}px`,o.style.width="0px",o.style.height="0px",i.x=e.clientX,i.y=e.clientY}(e),j(e,n.startPoint))}let C=[];function O(e){if(h){!function(e){u.x=Math.max(i.x,e.clientX),u.y=Math.max(i.y,e.clientY),c.x=Math.min(i.x,e.clientX),c.y=Math.min(i.y,e.clientY),o.style.left=`${c.x}px`,o.style.top=`${c.y}px`,o.style.width=u.x-c.x+"px",o.style.height=u.y-c.y+"px"}(e),j(e,n.endPoint);const t=n.select().sort((e=>e.uuid)).filter((e=>e.isMesh));d.default(t,C)||(C=t,P({object:p(t)}))}}function M(e){var t;h&&h&&(x&&(x.enabled=v),b({enabled:f}),h=!1,null==(t=o.parentElement)||t.removeChild(o))}return document.addEventListener("pointerdown",w,{passive:!0}),document.addEventListener("pointermove",O,{passive:!0,capture:!0}),document.addEventListener("pointerup",M,{passive:!0}),()=>{document.removeEventListener("pointerdown",w),document.removeEventListener("pointermove",O),document.removeEventListener("pointerup",M)}}),[E,h,y,x,m]),u.createElement("group",c.default({ref:k,onClick:O,onPointerOver:()=>w(!0),onPointerOut:()=>w(!1),onPointerMissed:M},v),u.createElement(f.Provider,{value:C},n))},exports.useSelect=function(){return u.useContext(f)};
|
package/web/Select.js
CHANGED
|
@@ -17,6 +17,7 @@ function Select({
|
|
|
17
17
|
...props
|
|
18
18
|
}) {
|
|
19
19
|
const {
|
|
20
|
+
setEvents,
|
|
20
21
|
camera,
|
|
21
22
|
raycaster,
|
|
22
23
|
gl,
|
|
@@ -52,19 +53,15 @@ function Select({
|
|
|
52
53
|
const startPoint = new THREE.Vector2();
|
|
53
54
|
const pointTopLeft = new THREE.Vector2();
|
|
54
55
|
const pointBottomRight = new THREE.Vector2();
|
|
55
|
-
const oldRaycasterEnabled =
|
|
56
|
+
const oldRaycasterEnabled = get().events.enabled;
|
|
56
57
|
const oldControlsEnabled = controls == null ? void 0 : controls.enabled;
|
|
57
58
|
let isDown = false;
|
|
58
59
|
|
|
59
60
|
function prepareRay(event, vec) {
|
|
60
|
-
var _raycaster$computeOff;
|
|
61
|
-
|
|
62
|
-
// https://github.com/pmndrs/react-three-fiber/pull/782
|
|
63
|
-
// Events trigger outside of canvas when moved
|
|
64
61
|
const {
|
|
65
62
|
offsetX,
|
|
66
63
|
offsetY
|
|
67
|
-
} =
|
|
64
|
+
} = event;
|
|
68
65
|
const {
|
|
69
66
|
width,
|
|
70
67
|
height
|
|
@@ -76,7 +73,9 @@ function Select({
|
|
|
76
73
|
var _gl$domElement$parent;
|
|
77
74
|
|
|
78
75
|
if (controls) controls.enabled = false;
|
|
79
|
-
|
|
76
|
+
setEvents({
|
|
77
|
+
enabled: false
|
|
78
|
+
});
|
|
80
79
|
isDown = true;
|
|
81
80
|
(_gl$domElement$parent = gl.domElement.parentElement) == null ? void 0 : _gl$domElement$parent.appendChild(element);
|
|
82
81
|
element.style.left = `${event.clientX}px`;
|
|
@@ -103,7 +102,9 @@ function Select({
|
|
|
103
102
|
var _element$parentElemen;
|
|
104
103
|
|
|
105
104
|
if (controls) controls.enabled = oldControlsEnabled;
|
|
106
|
-
|
|
105
|
+
setEvents({
|
|
106
|
+
enabled: oldRaycasterEnabled
|
|
107
|
+
});
|
|
107
108
|
isDown = false;
|
|
108
109
|
(_element$parentElemen = element.parentElement) == null ? void 0 : _element$parentElemen.removeChild(element);
|
|
109
110
|
}
|