@react-three/drei 9.58.0 → 9.58.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-three/drei",
3
- "version": "9.58.0",
3
+ "version": "9.58.2",
4
4
  "private": false,
5
5
  "description": "useful add-ons for react-three-fiber",
6
6
  "keywords": [
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 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),...h}){const{setEvents:v,camera:b,raycaster:y,gl:m,controls:x,size:E,get:g}=o.useThree(),[w,j]=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=>!w&&P({})),[w]),k=u.useRef(null);return u.useEffect((()=>{if(!e||!t)return;const n=new r.SelectionBox(b,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,h=null==x?void 0:x.enabled;let y=!1;function w(e,t){const{offsetX:n,offsetY:r}=e,{width:o,height:i}=E;t.set(n/o*2-1,-r/i*2+1)}function j(e){e.shiftKey&&(!function(e){var t;x&&(x.enabled=!1),v({enabled:!1}),y=!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),w(e,n.startPoint))}let C=[];function O(e){if(y){!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),w(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;y&&y&&(x&&(x.enabled=h),v({enabled:f}),y=!1,null==(t=o.parentElement)||t.removeChild(o))}return document.addEventListener("pointerdown",j,{passive:!0}),document.addEventListener("pointermove",O,{passive:!0,capture:!0}),document.addEventListener("pointerup",M,{passive:!0}),()=>{document.removeEventListener("pointerdown",j),document.removeEventListener("pointermove",O),document.removeEventListener("pointerup",M)}}),[E.width,E.height,y,b,x,m]),u.createElement("group",c.default({ref:k,onClick:O,onPointerOver:()=>j(!0),onPointerOut:()=>j(!1),onPointerMissed:M},h),u.createElement(f.Provider,{value:C},n))},exports.useSelect=function(){return u.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 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,onChangePointerUp:l,border:s="1px solid #55aaff",backgroundColor:p="rgba(75, 160, 255, 0.1)",filter:h=(e=>e),...v}){const[b,y]=c.useState(!1),{setEvents:m,camera:x,raycaster:E,gl:g,controls:w,size:j,get:C}=o.useThree(),[P,O]=c.useState(!1),[M,k]=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((()=>{b?null==i||i(M):null==l||l(M)}),[M,b]);const q=c.useCallback((e=>{e.stopPropagation(),k({object:h([e.object])[0],shift:t&&e.shiftKey})}),[]),L=c.useCallback((e=>!P&&k({})),[P]),S=c.useRef(null);return c.useEffect((()=>{if(!e||!t)return;const n=new r.SelectionBox(x,S.current),o=document.createElement("div");o.style.pointerEvents="none",o.style.border=s,o.style.backgroundColor=p,o.style.position="fixed";const i=new a.Vector2,l=new a.Vector2,u=new a.Vector2,c=C().events.enabled,f=null==w?void 0:w.enabled;let v=!1;function b(e,t){const{offsetX:n,offsetY:r}=e,{width:o,height:i}=j;t.set(n/o*2-1,-r/i*2+1)}function E(e){e.shiftKey&&(!function(e){var t;w&&(w.enabled=!1),m({enabled:!1}),y(v=!0),null==(t=g.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),b(e,n.startPoint))}let P=[];function O(e){if(v){!function(e){u.x=Math.max(i.x,e.clientX),u.y=Math.max(i.y,e.clientY),l.x=Math.min(i.x,e.clientX),l.y=Math.min(i.y,e.clientY),o.style.left=`${l.x}px`,o.style.top=`${l.y}px`,o.style.width=u.x-l.x+"px",o.style.height=u.y-l.y+"px"}(e),b(e,n.endPoint);const t=n.select().sort((e=>e.uuid)).filter((e=>e.isMesh));d.default(t,P)||(P=t,k({object:h(t)}))}}function M(e){var t;v&&v&&(w&&(w.enabled=f),m({enabled:c}),y(v=!1),null==(t=o.parentElement)||t.removeChild(o))}return document.addEventListener("pointerdown",E,{passive:!0}),document.addEventListener("pointermove",O,{passive:!0,capture:!0}),document.addEventListener("pointerup",M,{passive:!0}),()=>{document.removeEventListener("pointerdown",E),document.removeEventListener("pointermove",O),document.removeEventListener("pointerup",M)}}),[j.width,j.height,E,x,w,g]),c.createElement("group",u.default({ref:S,onClick:q,onPointerOver:()=>O(!0),onPointerOut:()=>O(!1),onPointerMissed:L},v),c.createElement(f.Provider,{value:M},n))},exports.useSelect=function(){return c.useContext(f)};
package/web/Select.d.ts CHANGED
@@ -6,8 +6,9 @@ declare type Props = JSX.IntrinsicElements['group'] & {
6
6
  border?: string;
7
7
  backgroundColor?: string;
8
8
  onChange?: (selected: THREE.Object3D[]) => void;
9
+ onChangePointerUp?: (selected: THREE.Object3D[]) => void;
9
10
  filter?: (selected: THREE.Object3D[]) => THREE.Object3D[];
10
11
  };
11
- export declare function Select({ box, multiple, children, onChange, border, backgroundColor, filter: customFilter, ...props }: Props): JSX.Element;
12
+ export declare function Select({ box, multiple, children, onChange, onChangePointerUp, border, backgroundColor, filter: customFilter, ...props }: Props): JSX.Element;
12
13
  export declare function useSelect(): THREE.Object3D<THREE.Event>[];
13
14
  export {};
package/web/Select.js CHANGED
@@ -11,11 +11,13 @@ function Select({
11
11
  multiple,
12
12
  children,
13
13
  onChange,
14
+ onChangePointerUp,
14
15
  border = '1px solid #55aaff',
15
16
  backgroundColor = 'rgba(75, 160, 255, 0.1)',
16
17
  filter: customFilter = item => item,
17
18
  ...props
18
19
  }) {
20
+ const [downed, down] = React.useState(false);
19
21
  const {
20
22
  setEvents,
21
23
  camera,
@@ -32,7 +34,9 @@ function Select({
32
34
  }) => {
33
35
  if (object === undefined) return [];else if (Array.isArray(object)) return object;else if (!shift) return state[0] === object ? [] : [object];else if (state.includes(object)) return state.filter(o => o !== object);else return [object, ...state];
34
36
  }, []);
35
- React.useEffect(() => void (onChange == null ? void 0 : onChange(active)), [active]);
37
+ React.useEffect(() => {
38
+ if (downed) onChange == null ? void 0 : onChange(active);else onChangePointerUp == null ? void 0 : onChangePointerUp(active);
39
+ }, [active, downed]);
36
40
  const onClick = React.useCallback(e => {
37
41
  e.stopPropagation();
38
42
  dispatch({
@@ -76,7 +80,7 @@ function Select({
76
80
  setEvents({
77
81
  enabled: false
78
82
  });
79
- isDown = true;
83
+ down(isDown = true);
80
84
  (_gl$domElement$parent = gl.domElement.parentElement) == null ? void 0 : _gl$domElement$parent.appendChild(element);
81
85
  element.style.left = `${event.clientX}px`;
82
86
  element.style.top = `${event.clientY}px`;
@@ -105,7 +109,7 @@ function Select({
105
109
  setEvents({
106
110
  enabled: oldRaycasterEnabled
107
111
  });
108
- isDown = false;
112
+ down(isDown = false);
109
113
  (_element$parentElemen = element.parentElement) == null ? void 0 : _element$parentElemen.removeChild(element);
110
114
  }
111
115
  }