@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.
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@react-three/fiber");function r(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 n=r(e);exports.CycleRaycast=function({onChanged:e,portal:r,preventDefault:o=!0,scroll:l=!0,keyCode:u=9}){const c=n.useRef(0),a=t.useThree((e=>e.raycaster)),d=t.useThree((e=>e.get)),i=t.useThree((e=>e.gl));return n.useEffect((()=>{var t;let n,s=[];const v=a.filter,f=null!==(t=null==r?void 0:r.current)&&void 0!==t?t:i.domElement.parentNode,h=()=>f&&e&&e(s,Math.round(c.current)%s.length);a.filter=(e,t)=>{let r=[...e];r.length===s.length&&s.every((e=>r.map((e=>e.object.uuid)).includes(e.object.uuid)))||(c.current=0,s=r,h()),v&&(r=v(r,t));for(let e=0;e<Math.round(c.current)%r.length;e++){const e=r.shift();r=[...r,e]}return r};const m=e=>{var t,r;c.current=e(c.current),null==(t=d().events.handlers)||t.onPointerCancel(void 0),null==(r=d().events.handlers)||r.onPointerMove(n),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)))},y=e=>n=e;return document.addEventListener("pointermove",y,{passive:!0}),l&&document.addEventListener("wheel",g),void 0!==u&&document.addEventListener("keydown",p),()=>{a.filter=v,void 0!==u&&document.removeEventListener("keydown",p),l&&document.removeEventListener("wheel",g),document.removeEventListener("pointermove",y)}}),[i,d,a,o,l,u]),null};
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};
@@ -9,7 +9,7 @@ function CycleRaycast({
9
9
  keyCode = 9
10
10
  }) {
11
11
  const cycle = React.useRef(0);
12
- const raycaster = useThree(state => state.raycaster);
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 = raycaster.filter;
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
- raycaster.filter = (intersections, state) => {
27
- // Reset cycle when the intersections change
28
- let clone = [...intersections];
26
+ setEvents({
27
+ filter: (intersections, state) => {
28
+ // Reset cycle when the intersections change
29
+ let clone = [...intersections];
29
30
 
30
- if (clone.length !== hits.length || !hits.every(hit => clone.map(e => e.object.uuid).includes(hit.object.uuid))) {
31
- cycle.current = 0;
32
- hits = clone;
33
- renderStatus();
34
- } // Run custom filter if there is one
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
- if (prev) clone = prev(clone, state); // Cycle through the actual raycast intersects
38
+ if (prev) clone = prev(clone, state); // Cycle through the actual raycast intersects
38
39
 
39
- for (let i = 0; i < Math.round(cycle.current) % clone.length; i++) {
40
- const first = clone.shift();
41
- clone = [...clone, first];
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
- raycaster.filter = prev;
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, raycaster, preventDefault, scroll, keyCode]);
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 f=l(e),c=i(t),a=i(r),u=i(o),d=l(n);const h=a.createContext(null);function p(){return a.useContext(h)}const m=a.forwardRef((({children:e},t)=>{const r=a.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})),a.createElement("group",{ref:d.default([t,r])},e)})),v=a.forwardRef((({children:e,style:t,...r},o)=>{const n=p(),l=a.useRef(null),{width:i,height:c}=s.useThree((e=>e.size)),m=a.useContext(s.context),v=a.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(a.createElement("div",f.default({ref:d.default([o,l]),style:{...t,position:"absolute",top:0,left:0,willChange:"transform"}},r),a.createElement(h.Provider,{value:n},a.createElement(s.context.Provider,{value:m},e)))),null})),y=a.forwardRef((({html:e,...t},r)=>{const o=e?v:m;return a.createElement(o,f.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:f={},children:u}){const{gl:d,size:p,invalidate:m,events:v,raycaster:y}=s.useThree(),[g]=a.useState((()=>document.createElement("div"))),[x]=a.useState((()=>document.createElement("div"))),[w]=a.useState((()=>document.createElement("div"))),E=d.domElement.parentNode,b=a.useRef(0),L=a.useMemo((()=>({el:g,eps:e,fill:x,fixed:w,horizontal:o,damping:i,offset:0,delta:0,scroll:b,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}})),[e,i,o,n]);a.useEffect((()=>{g.style.position="absolute",g.style.width="100%",g.style.height="100%",g.style[o?"overflowX":"overflowY"]="auto",g.style[o?"overflowY":"overflowX"]="hidden",g.style.top="0px",g.style.left="0px";for(const e in f)g.style[e]=f[e];w.style.position="sticky",w.style.top="0px",w.style.left="0px",w.style.width="100%",w.style.height="100%",w.style.overflow="hidden",g.appendChild(w),x.style.height=o?"100%":n*l*100+"%",x.style.width=o?n*l*100+"%":"100%",x.style.pointerEvents="none",g.appendChild(x),E.appendChild(g),g[o?"scrollLeft":"scrollTop"]=1;const e=v.connected||d.domElement;requestAnimationFrame((()=>null==v.connect?void 0:v.connect(g)));const t=y.computeOffsets;return y.computeOffsets=({clientX:e,clientY:t})=>({offsetX:e-E.offsetLeft,offsetY:t-E.offsetTop}),()=>{E.removeChild(g),y.computeOffsets=t,null==v.connect||v.connect(e)}}),[n,l,o,g,x,w,E]),a.useEffect((()=>{const e=p[o?"width":"height"],s=g[o?"scrollWidth":"scrollHeight"],n=s-e;let l=0,i=!0,f=!0;const c=()=>{if(t&&!f&&(m(),l=g[o?"scrollLeft":"scrollTop"],b.current=l/n,r)){if(!i)if(l>=n){const e=1-L.offset;g[o?"scrollLeft":"scrollTop"]=1,b.current=L.offset=-e,i=!0}else if(l<=0){const e=1+L.offset;g[o?"scrollLeft":"scrollTop"]=s,b.current=L.offset=e,i=!0}i&&setTimeout((()=>i=!1),40)}};g.addEventListener("scroll",c,{passive:!0}),requestAnimationFrame((()=>f=!1));const a=e=>g.scrollLeft+=e.deltaY/2;return o&&g.addEventListener("wheel",a,{passive:!0}),()=>{g.removeEventListener("scroll",c),o&&g.removeEventListener("wheel",a)}}),[g,p,r,L,m,o,t]);let O=0;return s.useFrame(((t,r)=>{L.offset=c.MathUtils.damp(O=L.offset,b.current,i,r),L.delta=c.MathUtils.damp(L.delta,Math.abs(O-L.offset),i,r),L.delta>e&&m()})),a.createElement(h.Provider,{value:L},u)},exports.useScroll=p;
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;
@@ -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 = raycaster.computeOffsets;
100
-
101
- raycaster.computeOffsets = ({
102
- clientX,
103
- clientY
104
- }) => ({
105
- offsetX: clientX - target.offsetLeft,
106
- offsetY: clientY - target.offsetTop
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
- raycaster.computeOffsets = oldCompute;
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 u=l(e),c=s(t),a=s(n),d=l(i);const f=c.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{camera:b,raycaster:m,gl:y,controls:h,size:x,get:E}=o.useThree(),[g,j]=c.useState(!1),[w,O]=c.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]),[]);c.useEffect((()=>{null==i||i(w)}),[w]);const C=c.useCallback((e=>{e.stopPropagation(),O({object:p([e.object])[0],shift:t&&e.shiftKey})}),[]),P=c.useCallback((e=>!g&&O({})),[g]),M=c.useRef(null);return c.useEffect((()=>{if(!e||!t)return;const n=new r.SelectionBox(b,M.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,u=new a.Vector2,c=new a.Vector2,f=m.enabled,v=null==h?void 0:h.enabled;let g=!1;function j(e,t){var n;const{offsetX:r,offsetY:o}=null!==(n=null==m.computeOffsets?void 0:m.computeOffsets(e,E()))&&void 0!==n?n:e,{width:i,height:l}=x;t.set(r/i*2-1,-o/l*2+1)}function w(e){e.shiftKey&&(!function(e){var t;h&&(h.enabled=!1),m.enabled=!1,g=!0,null==(t=y.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 P(e){if(g){!function(e){c.x=Math.max(i.x,e.clientX),c.y=Math.max(i.y,e.clientY),u.x=Math.min(i.x,e.clientX),u.y=Math.min(i.y,e.clientY),o.style.left=`${u.x}px`,o.style.top=`${u.y}px`,o.style.width=c.x-u.x+"px",o.style.height=c.y-u.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,O({object:p(t)}))}}function k(e){var t;g&&g&&(h&&(h.enabled=v),m.enabled=f,g=!1,null==(t=o.parentElement)||t.removeChild(o))}return document.addEventListener("pointerdown",w,{passive:!0}),document.addEventListener("pointermove",P,{passive:!0,capture:!0}),document.addEventListener("pointerup",k,{passive:!0}),()=>{document.removeEventListener("pointerdown",w),document.removeEventListener("pointermove",P),document.removeEventListener("pointerup",k)}}),[x,m,b,h,y]),c.createElement("group",u.default({ref:M,onClick:C,onPointerOver:()=>j(!0),onPointerOut:()=>j(!1),onPointerMissed:P},v),c.createElement(f.Provider,{value:w},n))},exports.useSelect=function(){return c.useContext(f)};
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 = raycaster.enabled;
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
- } = (_raycaster$computeOff = raycaster.computeOffsets == null ? void 0 : raycaster.computeOffsets(event, get())) !== null && _raycaster$computeOff !== void 0 ? _raycaster$computeOff : event;
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
- raycaster.enabled = false;
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
- raycaster.enabled = oldRaycasterEnabled;
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
  }