@react-three/drei 8.4.0 → 9.0.0-beta.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.
Files changed (74) hide show
  1. package/README.md +68 -34
  2. package/core/ArcballControls.js +2 -5
  3. package/core/Billboard.d.ts +2 -2
  4. package/core/Center.d.ts +1 -1
  5. package/core/ContactShadows.d.ts +1 -1
  6. package/core/CubeCamera.cjs.js +1 -1
  7. package/core/CubeCamera.js +1 -1
  8. package/core/Detailed.d.ts +1 -1
  9. package/core/DeviceOrientationControls.d.ts +1 -1
  10. package/core/Edges.cjs.js +1 -0
  11. package/core/Edges.d.ts +8 -0
  12. package/core/Edges.js +35 -0
  13. package/core/Effects.cjs.js +1 -1
  14. package/core/Effects.d.ts +1 -1
  15. package/core/Effects.js +2 -2
  16. package/core/FirstPersonControls.d.ts +1 -1
  17. package/core/FlyControls.d.ts +1 -1
  18. package/core/GizmoViewcube.cjs.js +1 -1
  19. package/core/GizmoViewcube.d.ts +2 -2
  20. package/core/GizmoViewcube.js +1 -1
  21. package/core/GizmoViewport.d.ts +2 -2
  22. package/core/Image.d.ts +1 -1
  23. package/core/Instances.d.ts +2 -2
  24. package/core/Line.d.ts +1 -1
  25. package/core/MapControls.d.ts +1 -1
  26. package/core/MeshDistortMaterial.d.ts +1 -1
  27. package/core/MeshReflectorMaterial.d.ts +1 -1
  28. package/core/MeshWobbleMaterial.d.ts +1 -1
  29. package/core/OrbitControls.d.ts +1 -1
  30. package/core/OrbitControls.js +2 -5
  31. package/core/OrthographicCamera.d.ts +1 -1
  32. package/core/PerspectiveCamera.d.ts +1 -1
  33. package/core/PointerLockControls.d.ts +1 -1
  34. package/core/Points.cjs.js +1 -1
  35. package/core/Points.d.ts +2 -2
  36. package/core/Points.js +6 -6
  37. package/core/PositionalAudio.d.ts +1 -1
  38. package/core/Reflector.d.ts +1 -1
  39. package/core/RoundedBox.d.ts +1 -1
  40. package/core/ScreenQuad.d.ts +1 -1
  41. package/core/Segments.d.ts +1 -1
  42. package/core/Shadow.d.ts +1 -1
  43. package/core/SpotLight.d.ts +1 -1
  44. package/core/Stars.cjs.js +1 -1
  45. package/core/Stars.js +3 -3
  46. package/core/Text.d.ts +1 -1
  47. package/core/TrackballControls.d.ts +1 -1
  48. package/core/TrackballControls.js +2 -5
  49. package/core/TransformControls.d.ts +1 -1
  50. package/core/index.cjs.js +1 -1
  51. package/core/index.d.ts +1 -0
  52. package/core/index.js +1 -0
  53. package/core/shapes.d.ts +17 -17
  54. package/core/useFBX.d.ts +1 -1
  55. package/core/useFBX.js +1 -2
  56. package/core/useGLTF.d.ts +1 -1
  57. package/core/useGLTF.js +1 -2
  58. package/core/useKTX2.d.ts +1 -1
  59. package/core/useKTX2.js +1 -2
  60. package/core/useTexture.d.ts +1 -1
  61. package/core/useTexture.js +1 -2
  62. package/index.cjs.js +1 -1
  63. package/index.js +2 -0
  64. package/native/index.cjs.js +1 -1
  65. package/native/index.js +1 -0
  66. package/package.json +4 -4
  67. package/web/Html.cjs.js +1 -1
  68. package/web/Html.js +6 -4
  69. package/web/Select.cjs.js +1 -0
  70. package/web/Select.d.ts +12 -0
  71. package/web/Select.js +169 -0
  72. package/web/index.cjs.js +1 -1
  73. package/web/index.d.ts +1 -0
  74. package/web/index.js +3 -0
package/native/index.js CHANGED
@@ -7,6 +7,7 @@ export { Text } from '../core/Text.js';
7
7
  export { Effects, isWebGL2Available } from '../core/Effects.js';
8
8
  export { GradientTexture } from '../core/GradientTexture.js';
9
9
  export { Image } from '../core/Image.js';
10
+ export { Edges } from '../core/Edges.js';
10
11
  export { OrthographicCamera } from '../core/OrthographicCamera.js';
11
12
  export { PerspectiveCamera } from '../core/PerspectiveCamera.js';
12
13
  export { CubeCamera } from '../core/CubeCamera.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-three/drei",
3
- "version": "8.4.0",
3
+ "version": "9.0.0-beta.1",
4
4
  "private": false,
5
5
  "description": "useful add-ons for react-three-fiber",
6
6
  "keywords": [
@@ -57,9 +57,9 @@
57
57
  "zustand": "^3.5.13"
58
58
  },
59
59
  "peerDependencies": {
60
- "@react-three/fiber": ">=6.0",
61
- "react": ">=17.0",
62
- "react-dom": ">=17.0",
60
+ "@react-three/fiber": ">=8.0",
61
+ "react": ">=18.0",
62
+ "react-dom": ">=18.0",
63
63
  "three": ">=0.134"
64
64
  },
65
65
  "peerDependenciesMeta": {
package/web/Html.cjs.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("react-dom"),n=require("three"),o=require("@react-three/fiber");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function a(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=s(e),c=a(t),l=a(r);const u=new n.Vector3,d=new n.Vector3,f=new n.Vector3;function m(e,t,r){const n=u.setFromMatrixPosition(e.matrixWorld);n.project(t);const o=r.width/2,s=r.height/2;return[n.x*o+o,-n.y*s+s]}const p=e=>Math.abs(e)<1e-10?0:e;function h(e,t,r=""){let n="matrix3d(";for(let r=0;16!==r;r++)n+=p(t[r]*e.elements[r])+(15!==r?",":")");return r+n}const x=(y=[1,-1,1,1,1,-1,1,1,1,-1,1,1,1,-1,1,1],e=>h(e,y));var y;const v=(e,t)=>{return h(e,[1/(r=t),1/r,1/r,1,-1/r,-1/r,-1/r,-1,1/r,1/r,1/r,1,1,1,1,1],"translate(-50%,-50%)");var r},b=c.forwardRef((({children:e,eps:t=.001,style:r,className:s,prepend:a,center:h,fullscreen:y,portal:b,distanceFactor:g,sprite:M=!1,transform:P=!1,occlude:w,onOcclude:W,zIndexRange:$=[16777271,0],calculatePosition:E=m,as:O="div",wrapperClass:j,pointerEvents:F="auto",...T},C)=>{var R;const z=o.useThree((({gl:e})=>e)),I=o.useThree((({camera:e})=>e)),N=o.useThree((({scene:e})=>e)),q=o.useThree((({size:e})=>e)),_=o.useThree((({raycaster:e})=>e)),[A]=c.useState((()=>document.createElement(O))),V=c.useRef(null),k=c.useRef(0),D=c.useRef([0,0]),L=c.useRef(null),S=c.useRef(null),H=null!==(R=null==b?void 0:b.current)&&void 0!==R?R:z.domElement.parentNode;c.useEffect((()=>{if(V.current){if(N.updateMatrixWorld(),P)A.style.cssText="position:absolute;top:0;left:0;pointer-events:none;overflow:hidden;";else{const e=E(V.current,I,q);A.style.cssText=`position:absolute;top:0;left:0;transform:translate3d(${e[0]}px,${e[1]}px,0);transform-origin:0 0;`}return H&&(a?H.prepend(A):H.appendChild(A)),()=>{H&&H.removeChild(A),l.unmountComponentAtNode(A)}}}),[H,P]),c.useLayoutEffect((()=>{j&&(A.className=j)}),[j]);const Z=c.useMemo((()=>P?{position:"absolute",top:0,left:0,width:q.width,height:q.height,transformStyle:"preserve-3d",pointerEvents:"none"}:{position:"absolute",transform:h?"translate3d(-50%,-50%,0)":"none",...y&&{top:-q.height/2,left:-q.width/2,width:q.width,height:q.height},...r}),[r,h,y,q,P]),B=c.useMemo((()=>({position:"absolute",pointerEvents:F})),[F]);c.useLayoutEffect((()=>{P?l.render(c.createElement("div",{ref:L,style:Z},c.createElement("div",{ref:S,style:B},c.createElement("div",{ref:C,className:s,style:r,children:e}))),A):l.render(c.createElement("div",{ref:C,style:Z,className:s,children:e}),A)}));const G=c.useRef(!0);return o.useFrame((()=>{if(V.current){I.updateMatrixWorld(),V.current.updateWorldMatrix(!0,!1);const e=P?D.current:E(V.current,I,q);if(P||Math.abs(k.current-I.zoom)>t||Math.abs(D.current[0]-e[0])>t||Math.abs(D.current[1]-e[1])>t){const t=function(e,t){const r=u.setFromMatrixPosition(e.matrixWorld),n=d.setFromMatrixPosition(t.matrixWorld),o=r.sub(n),s=t.getWorldDirection(f);return o.angleTo(s)>Math.PI/2}(V.current,I);let r=!1;"boolean"==typeof w?!0===w&&(r=[N]):Array.isArray(w)&&(r=w.map((e=>e.current)));const o=G.current;if(r){const e=function(e,t,r,n){const o=u.setFromMatrixPosition(e.matrixWorld),s=o.clone();s.project(t),r.setFromCamera(s,t);const a=r.intersectObjects(n,!0);if(a.length){const e=a[0].distance;return o.distanceTo(r.ray.origin)<e}return!0}(V.current,I,_,r);G.current=e&&!t}else G.current=!t;if(o!==G.current&&(W?W(!G.current):A.style.display=G.current?"block":"none"),A.style.zIndex=`${function(e,t,r){if(t instanceof n.PerspectiveCamera||t instanceof n.OrthographicCamera){const n=u.setFromMatrixPosition(e.matrixWorld),o=d.setFromMatrixPosition(t.matrixWorld),s=n.distanceTo(o),a=(r[1]-r[0])/(t.far-t.near),i=r[1]-a*t.far;return Math.round(a*s+i)}}(V.current,I,$)}`,P){const[e,t]=[q.width/2,q.height/2],r=I.projectionMatrix.elements[5]*t,{isOrthographicCamera:n,top:o,left:s,bottom:a,right:i}=I,c=x(I.matrixWorldInverse),l=n?`scale(${r})translate(${p(-(i+s)/2)}px,${p((o+a)/2)}px)`:`translateZ(${r}px)`;let u=V.current.matrixWorld;M&&(u=I.matrixWorldInverse.clone().transpose().copyPosition(u).scale(V.current.scale),u.elements[3]=u.elements[7]=u.elements[11]=0,u.elements[15]=1),A.style.width=q.width+"px",A.style.height=q.height+"px",A.style.perspective=n?"":`${r}px`,L.current&&S.current&&(L.current.style.transform=`${l}${c}translate(${e}px,${t}px)`,S.current.style.transform=v(u,1/((g||10)/400)))}else{const t=void 0===g?1:function(e,t){if(t instanceof n.OrthographicCamera)return t.zoom;if(t instanceof n.PerspectiveCamera){const r=u.setFromMatrixPosition(e.matrixWorld),n=d.setFromMatrixPosition(t.matrixWorld),o=t.fov*Math.PI/180,s=r.distanceTo(n);return 1/(2*Math.tan(o/2)*s)}return 1}(V.current,I)*g;A.style.transform=`translate3d(${e[0]}px,${e[1]}px,0) scale(${t})`}D.current=e,k.current=I.zoom}}})),c.createElement("group",i.default({},T,{ref:V}))}));exports.Html=b;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("react-dom"),n=require("three"),o=require("@react-three/fiber");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function a(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=s(e),c=a(t),l=a(r);const u=new n.Vector3,d=new n.Vector3,f=new n.Vector3;function m(e,t,r){const n=u.setFromMatrixPosition(e.matrixWorld);n.project(t);const o=r.width/2,s=r.height/2;return[n.x*o+o,-n.y*s+s]}const p=e=>Math.abs(e)<1e-10?0:e;function h(e,t,r=""){let n="matrix3d(";for(let r=0;16!==r;r++)n+=p(t[r]*e.elements[r])+(15!==r?",":")");return r+n}const x=(y=[1,-1,1,1,1,-1,1,1,1,-1,1,1,1,-1,1,1],e=>h(e,y));var y;const v=(e,t)=>{return h(e,[1/(r=t),1/r,1/r,1,-1/r,-1/r,-1/r,-1,1/r,1/r,1/r,1,1,1,1,1],"translate(-50%,-50%)");var r},b=c.forwardRef((({children:e,eps:t=.001,style:r,className:s,prepend:a,center:h,fullscreen:y,portal:b,distanceFactor:M,sprite:g=!1,transform:P=!1,occlude:w,onOcclude:W,zIndexRange:$=[16777271,0],calculatePosition:E=m,as:O="div",wrapperClass:j,pointerEvents:F="auto",...T},C)=>{var R;const z=o.useThree((({gl:e})=>e)),I=o.useThree((({camera:e})=>e)),q=o.useThree((({scene:e})=>e)),N=o.useThree((({size:e})=>e)),_=o.useThree((({raycaster:e})=>e)),[V]=c.useState((()=>document.createElement(O))),k=c.useMemo((()=>l.createRoot(V)),[V]),A=c.useRef(null),D=c.useRef(0),L=c.useRef([0,0]),S=c.useRef(null),H=c.useRef(null),Z=null!==(R=null==b?void 0:b.current)&&void 0!==R?R:z.domElement.parentNode;c.useEffect((()=>{if(A.current){if(q.updateMatrixWorld(),P)V.style.cssText="position:absolute;top:0;left:0;pointer-events:none;overflow:hidden;";else{const e=E(A.current,I,N);V.style.cssText=`position:absolute;top:0;left:0;transform:translate3d(${e[0]}px,${e[1]}px,0);transform-origin:0 0;`}return Z&&(a?Z.prepend(V):Z.appendChild(V)),()=>{Z&&Z.removeChild(V),k.unmount()}}}),[Z,P]),c.useLayoutEffect((()=>{j&&(V.className=j)}),[j]);const B=c.useMemo((()=>P?{position:"absolute",top:0,left:0,width:N.width,height:N.height,transformStyle:"preserve-3d",pointerEvents:"none"}:{position:"absolute",transform:h?"translate3d(-50%,-50%,0)":"none",...y&&{top:-N.height/2,left:-N.width/2,width:N.width,height:N.height},...r}),[r,h,y,N,P]),G=c.useMemo((()=>({position:"absolute",pointerEvents:F})),[F]);c.useLayoutEffect((()=>{P?k.render(c.createElement("div",{ref:S,style:B},c.createElement("div",{ref:H,style:G},c.createElement("div",{ref:C,className:s,style:r,children:e}))),V):k.render(c.createElement("div",{ref:C,style:B,className:s,children:e}),V)}));const J=c.useRef(!0);return o.useFrame((()=>{if(A.current){I.updateMatrixWorld(),A.current.updateWorldMatrix(!0,!1);const e=P?L.current:E(A.current,I,N);if(P||Math.abs(D.current-I.zoom)>t||Math.abs(L.current[0]-e[0])>t||Math.abs(L.current[1]-e[1])>t){const t=function(e,t){const r=u.setFromMatrixPosition(e.matrixWorld),n=d.setFromMatrixPosition(t.matrixWorld),o=r.sub(n),s=t.getWorldDirection(f);return o.angleTo(s)>Math.PI/2}(A.current,I);let r=!1;"boolean"==typeof w?!0===w&&(r=[q]):Array.isArray(w)&&(r=w.map((e=>e.current)));const o=J.current;if(r){const e=function(e,t,r,n){const o=u.setFromMatrixPosition(e.matrixWorld),s=o.clone();s.project(t),r.setFromCamera(s,t);const a=r.intersectObjects(n,!0);if(a.length){const e=a[0].distance;return o.distanceTo(r.ray.origin)<e}return!0}(A.current,I,_,r);J.current=e&&!t}else J.current=!t;if(o!==J.current&&(W?W(!J.current):V.style.display=J.current?"block":"none"),V.style.zIndex=`${function(e,t,r){if(t instanceof n.PerspectiveCamera||t instanceof n.OrthographicCamera){const n=u.setFromMatrixPosition(e.matrixWorld),o=d.setFromMatrixPosition(t.matrixWorld),s=n.distanceTo(o),a=(r[1]-r[0])/(t.far-t.near),i=r[1]-a*t.far;return Math.round(a*s+i)}}(A.current,I,$)}`,P){const[e,t]=[N.width/2,N.height/2],r=I.projectionMatrix.elements[5]*t,{isOrthographicCamera:n,top:o,left:s,bottom:a,right:i}=I,c=x(I.matrixWorldInverse),l=n?`scale(${r})translate(${p(-(i+s)/2)}px,${p((o+a)/2)}px)`:`translateZ(${r}px)`;let u=A.current.matrixWorld;g&&(u=I.matrixWorldInverse.clone().transpose().copyPosition(u).scale(A.current.scale),u.elements[3]=u.elements[7]=u.elements[11]=0,u.elements[15]=1),V.style.width=N.width+"px",V.style.height=N.height+"px",V.style.perspective=n?"":`${r}px`,S.current&&H.current&&(S.current.style.transform=`${l}${c}translate(${e}px,${t}px)`,H.current.style.transform=v(u,1/((M||10)/400)))}else{const t=void 0===M?1:function(e,t){if(t instanceof n.OrthographicCamera)return t.zoom;if(t instanceof n.PerspectiveCamera){const r=u.setFromMatrixPosition(e.matrixWorld),n=d.setFromMatrixPosition(t.matrixWorld),o=t.fov*Math.PI/180,s=r.distanceTo(n);return 1/(2*Math.tan(o/2)*s)}return 1}(A.current,I)*M;V.style.transform=`translate3d(${e[0]}px,${e[1]}px,0) scale(${t})`}L.current=e,D.current=I.zoom}}})),c.createElement("group",i.default({},T,{ref:A}))}));exports.Html=b;
package/web/Html.js CHANGED
@@ -126,7 +126,9 @@ const Html = /*#__PURE__*/React.forwardRef(({
126
126
  const raycaster = useThree(({
127
127
  raycaster
128
128
  }) => raycaster);
129
- const [el] = React.useState(() => document.createElement(as));
129
+ const [el] = React.useState(() => document.createElement(as)); // @ts-expect-error React 18 types aren't available yet
130
+
131
+ const root = React.useMemo(() => ReactDOM.createRoot(el), [el]);
130
132
  const group = React.useRef(null);
131
133
  const oldZoom = React.useRef(0);
132
134
  const oldPosition = React.useRef([0, 0]);
@@ -150,7 +152,7 @@ const Html = /*#__PURE__*/React.forwardRef(({
150
152
 
151
153
  return () => {
152
154
  if (target) target.removeChild(el);
153
- ReactDOM.unmountComponentAtNode(el);
155
+ root.unmount();
154
156
  };
155
157
  }
156
158
  }, [target, transform]);
@@ -188,7 +190,7 @@ const Html = /*#__PURE__*/React.forwardRef(({
188
190
  }), [pointerEvents]);
189
191
  React.useLayoutEffect(() => {
190
192
  if (transform) {
191
- ReactDOM.render( /*#__PURE__*/React.createElement("div", {
193
+ root.render( /*#__PURE__*/React.createElement("div", {
192
194
  ref: transformOuterRef,
193
195
  style: styles
194
196
  }, /*#__PURE__*/React.createElement("div", {
@@ -201,7 +203,7 @@ const Html = /*#__PURE__*/React.forwardRef(({
201
203
  children: children
202
204
  }))), el);
203
205
  } else {
204
- ReactDOM.render( /*#__PURE__*/React.createElement("div", {
206
+ root.render( /*#__PURE__*/React.createElement("div", {
205
207
  ref: ref,
206
208
  style: styles,
207
209
  className: className,
@@ -0,0 +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)",...p}){const{camera:v,raycaster:b,gl:m,controls:y,size:h,get:x}=o.useThree(),[E,g]=c.useState(!1),[j,w]=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(j)}),[j]);const O=c.useCallback((e=>{e.stopPropagation(),w({object:e.object,shift:t&&e.shiftKey})}),[]),C=c.useCallback((e=>!E&&w({})),[E]),P=c.useRef(null);return c.useEffect((()=>{if(!e||!t)return;const n=new r.SelectionBox(v,P.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=b.enabled,p=null==y?void 0:y.enabled;let E=!1;function g(e,t){var n;const{offsetX:r,offsetY:o}=null!==(n=null==b.computeOffsets?void 0:b.computeOffsets(e,x()))&&void 0!==n?n:e,{width:i,height:l}=h;t.set(r/i*2-1,-o/l*2+1)}function j(e){e.shiftKey&&(!function(e){var t;y&&(y.enabled=!1),b.enabled=!1,E=!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),g(e,n.startPoint))}let O=[];function C(e){if(E){!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),g(e,n.endPoint);const t=n.select().sort((e=>e.uuid)).filter((e=>e.isMesh));d.default(t,O)||(O=t,w({object:t}))}}function M(e){var t;E&&E&&(y&&(y.enabled=p),b.enabled=f,E=!1,null==(t=o.parentElement)||t.removeChild(o))}return document.addEventListener("pointerdown",j,{passive:!0}),document.addEventListener("pointermove",C,{passive:!0,capture:!0}),document.addEventListener("pointerup",M,{passive:!0}),()=>{document.removeEventListener("pointerdown",j),document.removeEventListener("pointermove",C),document.removeEventListener("pointerup",M)}}),[h,b,v,y,m]),c.createElement("group",u.default({ref:P,onClick:O,onPointerOver:()=>g(!0),onPointerOut:()=>g(!1),onPointerMissed:C},p),c.createElement(f.Provider,{value:j},n))},exports.useSelect=function(){return c.useContext(f)};
@@ -0,0 +1,12 @@
1
+ /// <reference types="react" />
2
+ import * as THREE from 'three';
3
+ declare type Props = JSX.IntrinsicElements['group'] & {
4
+ multiple?: boolean;
5
+ box?: boolean;
6
+ border?: string;
7
+ backgroundColor?: string;
8
+ onChange?: (selected: THREE.Object3D[]) => void;
9
+ };
10
+ export declare function Select({ box, multiple, children, onChange, border, backgroundColor, ...props }: Props): JSX.Element;
11
+ export declare function useSelect(): THREE.Object3D<THREE.Event>[];
12
+ export {};
package/web/Select.js ADDED
@@ -0,0 +1,169 @@
1
+ import _extends from '@babel/runtime/helpers/esm/extends';
2
+ import * as React from 'react';
3
+ import * as THREE from 'three';
4
+ import { SelectionBox } from 'three-stdlib';
5
+ import { useThree } from '@react-three/fiber';
6
+ import shallow from 'zustand/shallow';
7
+
8
+ const context = /*#__PURE__*/React.createContext([]);
9
+ function Select({
10
+ box,
11
+ multiple,
12
+ children,
13
+ onChange,
14
+ border = '1px solid #55aaff',
15
+ backgroundColor = 'rgba(75, 160, 255, 0.1)',
16
+ ...props
17
+ }) {
18
+ const {
19
+ camera,
20
+ raycaster,
21
+ gl,
22
+ controls,
23
+ size,
24
+ get
25
+ } = useThree();
26
+ const [hovered, hover] = React.useState(false);
27
+ const [active, dispatch] = React.useReducer((state, {
28
+ object,
29
+ shift
30
+ }) => {
31
+ 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];
32
+ }, []);
33
+ React.useEffect(() => void (onChange == null ? void 0 : onChange(active)), [active]);
34
+ const onClick = React.useCallback(e => {
35
+ e.stopPropagation();
36
+ dispatch({
37
+ object: e.object,
38
+ shift: multiple && e.shiftKey
39
+ });
40
+ }, []);
41
+ const onPointerMissed = React.useCallback(e => !hovered && dispatch({}), [hovered]);
42
+ const ref = React.useRef(null);
43
+ React.useEffect(() => {
44
+ if (!box || !multiple) return;
45
+ const selBox = new SelectionBox(camera, ref.current);
46
+ const element = document.createElement('div');
47
+ element.style.pointerEvents = 'none';
48
+ element.style.border = border;
49
+ element.style.backgroundColor = backgroundColor;
50
+ element.style.position = 'fixed';
51
+ const startPoint = new THREE.Vector2();
52
+ const pointTopLeft = new THREE.Vector2();
53
+ const pointBottomRight = new THREE.Vector2();
54
+ const oldRaycasterEnabled = raycaster.enabled;
55
+ const oldControlsEnabled = controls == null ? void 0 : controls.enabled;
56
+ let isDown = false;
57
+
58
+ function prepareRay(event, vec) {
59
+ var _raycaster$computeOff;
60
+
61
+ // https://github.com/pmndrs/react-three-fiber/pull/782
62
+ // Events trigger outside of canvas when moved
63
+ const {
64
+ offsetX,
65
+ offsetY
66
+ } = (_raycaster$computeOff = raycaster.computeOffsets == null ? void 0 : raycaster.computeOffsets(event, get())) !== null && _raycaster$computeOff !== void 0 ? _raycaster$computeOff : event;
67
+ const {
68
+ width,
69
+ height
70
+ } = size;
71
+ vec.set(offsetX / width * 2 - 1, -(offsetY / height) * 2 + 1);
72
+ }
73
+
74
+ function onSelectStart(event) {
75
+ var _gl$domElement$parent;
76
+
77
+ if (controls) controls.enabled = false;
78
+ raycaster.enabled = false;
79
+ isDown = true;
80
+ (_gl$domElement$parent = gl.domElement.parentElement) == null ? void 0 : _gl$domElement$parent.appendChild(element);
81
+ element.style.left = `${event.clientX}px`;
82
+ element.style.top = `${event.clientY}px`;
83
+ element.style.width = '0px';
84
+ element.style.height = '0px';
85
+ startPoint.x = event.clientX;
86
+ startPoint.y = event.clientY;
87
+ }
88
+
89
+ function onSelectMove(event) {
90
+ pointBottomRight.x = Math.max(startPoint.x, event.clientX);
91
+ pointBottomRight.y = Math.max(startPoint.y, event.clientY);
92
+ pointTopLeft.x = Math.min(startPoint.x, event.clientX);
93
+ pointTopLeft.y = Math.min(startPoint.y, event.clientY);
94
+ element.style.left = `${pointTopLeft.x}px`;
95
+ element.style.top = `${pointTopLeft.y}px`;
96
+ element.style.width = `${pointBottomRight.x - pointTopLeft.x}px`;
97
+ element.style.height = `${pointBottomRight.y - pointTopLeft.y}px`;
98
+ }
99
+
100
+ function onSelectOver() {
101
+ if (isDown) {
102
+ var _element$parentElemen;
103
+
104
+ if (controls) controls.enabled = oldControlsEnabled;
105
+ raycaster.enabled = oldRaycasterEnabled;
106
+ isDown = false;
107
+ (_element$parentElemen = element.parentElement) == null ? void 0 : _element$parentElemen.removeChild(element);
108
+ }
109
+ }
110
+
111
+ function pointerDown(event) {
112
+ if (event.shiftKey) {
113
+ onSelectStart(event);
114
+ prepareRay(event, selBox.startPoint);
115
+ }
116
+ }
117
+
118
+ let previous = [];
119
+
120
+ function pointerMove(event) {
121
+ if (isDown) {
122
+ onSelectMove(event);
123
+ prepareRay(event, selBox.endPoint);
124
+ const allSelected = selBox.select().sort(o => o.uuid).filter(o => o.isMesh);
125
+
126
+ if (!shallow(allSelected, previous)) {
127
+ previous = allSelected;
128
+ dispatch({
129
+ object: allSelected
130
+ });
131
+ }
132
+ }
133
+ }
134
+
135
+ function pointerUp(event) {
136
+ if (isDown) onSelectOver();
137
+ }
138
+
139
+ document.addEventListener('pointerdown', pointerDown, {
140
+ passive: true
141
+ });
142
+ document.addEventListener('pointermove', pointerMove, {
143
+ passive: true,
144
+ capture: true
145
+ });
146
+ document.addEventListener('pointerup', pointerUp, {
147
+ passive: true
148
+ });
149
+ return () => {
150
+ document.removeEventListener('pointerdown', pointerDown);
151
+ document.removeEventListener('pointermove', pointerMove);
152
+ document.removeEventListener('pointerup', pointerUp);
153
+ };
154
+ }, [size, raycaster, camera, controls, gl]);
155
+ return /*#__PURE__*/React.createElement("group", _extends({
156
+ ref: ref,
157
+ onClick: onClick,
158
+ onPointerOver: () => hover(true),
159
+ onPointerOut: () => hover(false),
160
+ onPointerMissed: onPointerMissed
161
+ }, props), /*#__PURE__*/React.createElement(context.Provider, {
162
+ value: active
163
+ }, children));
164
+ }
165
+ function useSelect() {
166
+ return React.useContext(context);
167
+ }
168
+
169
+ export { Select, useSelect };
package/web/index.cjs.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./Html.cjs.js"),r=require("./CycleRaycast.cjs.js"),s=require("./useCursor.cjs.js"),o=require("./Loader.cjs.js"),t=require("./ScrollControls.cjs.js"),i=require("./PresentationControls.cjs.js"),c=require("../core/Billboard.cjs.js"),u=require("../core/QuadraticBezierLine.cjs.js"),a=require("../core/CubicBezierLine.cjs.js"),j=require("../core/Line.cjs.js"),n=require("../core/PositionalAudio.cjs.js"),p=require("../core/Text.cjs.js"),l=require("../core/Effects.cjs.js"),x=require("../core/GradientTexture.cjs.js"),q=require("../core/Image.cjs.js"),d=require("../core/OrthographicCamera.cjs.js"),C=require("../core/PerspectiveCamera.cjs.js"),h=require("../core/CubeCamera.cjs.js"),m=require("../core/DeviceOrientationControls.cjs.js"),S=require("../core/FlyControls.cjs.js"),B=require("../core/MapControls.cjs.js"),b=require("../core/OrbitControls.cjs.js"),P=require("../core/TrackballControls.cjs.js"),M=require("../core/ArcballControls.cjs.js"),f=require("../core/TransformControls.cjs.js"),T=require("../core/PointerLockControls.cjs.js"),g=require("../core/FirstPersonControls.cjs.js"),v=require("../core/GizmoHelper.cjs.js"),L=require("../core/GizmoViewcube.cjs.js"),A=require("../core/GizmoViewport.cjs.js"),G=require("../core/useCubeTexture.cjs.js"),k=require("../core/useFBX.cjs.js"),D=require("../core/useGLTF.cjs.js"),F=require("../core/useProgress.cjs.js"),w=require("../core/useTexture.cjs.js"),z=require("../core/useKTX2.cjs.js"),y=require("../core/Stats.cjs.js"),I=require("../core/useDepthBuffer.cjs.js"),O=require("../core/useAspect.cjs.js"),R=require("../core/useCamera.cjs.js"),E=require("../core/useDetectGPU.cjs.js"),H=require("../core/useHelper.cjs.js"),V=require("../core/useBVH.cjs.js"),Q=require("../core/useContextBridge.cjs.js"),X=require("../core/useAnimations.cjs.js"),K=require("../core/useFBO.cjs.js"),W=require("../core/useIntersect.cjs.js"),N=require("../core/CurveModifier.cjs.js"),U=require("../core/MeshDistortMaterial.cjs.js"),_=require("../core/MeshWobbleMaterial.cjs.js"),J=require("../core/MeshReflectorMaterial.cjs.js"),Y=require("../core/PointMaterial.cjs.js"),Z=require("../core/shaderMaterial.cjs.js"),$=require("../core/softShadows.cjs.js"),ee=require("../core/shapes.cjs.js"),re=require("../core/RoundedBox.cjs.js"),se=require("../core/ScreenQuad.cjs.js"),oe=require("../core/Center.cjs.js"),te=require("../core/Bounds.cjs.js"),ie=require("../core/CameraShake.cjs.js"),ce=require("../core/Float.cjs.js"),ue=require("../core/Stage.cjs.js"),ae=require("../core/Backdrop.cjs.js"),je=require("../core/Shadow.cjs.js"),ne=require("../core/ContactShadows.cjs.js"),pe=require("../core/Reflector.cjs.js"),le=require("../core/SpotLight.cjs.js"),xe=require("../core/Environment.cjs.js"),qe=require("../core/Sky.cjs.js"),de=require("../core/Stars.cjs.js"),Ce=require("../core/Cloud.cjs.js"),he=require("../core/useMatcapTexture.cjs.js"),me=require("../core/useNormalTexture.cjs.js"),Se=require("../core/Points.cjs.js"),Be=require("../core/Instances.cjs.js"),be=require("../core/Segments.cjs.js"),Pe=require("../core/Detailed.cjs.js"),Me=require("../core/Preload.cjs.js"),fe=require("../core/BakeShadows.cjs.js"),Te=require("../core/meshBounds.cjs.js"),ge=require("../core/AdaptiveDpr.cjs.js"),ve=require("../core/AdaptiveEvents.cjs.js");require("@babel/runtime/helpers/extends"),require("react"),require("react-dom"),require("three"),require("@react-three/fiber"),require("zustand"),require("react-merge-refs"),require("@react-spring/three"),require("@use-gesture/react"),require("three-stdlib"),require("troika-three-text"),require("lodash.omit"),require("lodash.pick"),require("three/examples/js/libs/stats.min"),require("../helpers/useEffectfulState.cjs.js"),require("detect-gpu"),require("use-asset"),require("three-mesh-bvh"),require("../materials/BlurPass.cjs.js"),require("../materials/ConvolutionMaterial.cjs.js"),require("../materials/MeshReflectorMaterial.cjs.js"),require("../helpers/environment-assets.cjs.js"),require("../materials/SpotLightMaterial.cjs.js"),require("../helpers/Position.cjs.js"),require("react-composer"),exports.Html=e.Html,exports.CycleRaycast=r.CycleRaycast,exports.useCursor=s.useCursor,exports.Loader=o.Loader,exports.Scroll=t.Scroll,exports.ScrollControls=t.ScrollControls,exports.useScroll=t.useScroll,exports.PresentationControls=i.PresentationControls,exports.Billboard=c.Billboard,exports.QuadraticBezierLine=u.QuadraticBezierLine,exports.CubicBezierLine=a.CubicBezierLine,exports.Line=j.Line,exports.PositionalAudio=n.PositionalAudio,exports.Text=p.Text,exports.Effects=l.Effects,exports.isWebGL2Available=l.isWebGL2Available,exports.GradientTexture=x.GradientTexture,exports.Image=q.Image,exports.OrthographicCamera=d.OrthographicCamera,exports.PerspectiveCamera=C.PerspectiveCamera,exports.CubeCamera=h.CubeCamera,exports.DeviceOrientationControls=m.DeviceOrientationControls,exports.FlyControls=S.FlyControls,exports.MapControls=B.MapControls,exports.OrbitControls=b.OrbitControls,exports.TrackballControls=P.TrackballControls,exports.ArcballControls=M.ArcballControls,exports.TransformControls=f.TransformControls,exports.PointerLockControls=T.PointerLockControls,exports.FirstPersonControls=g.FirstPersonControls,exports.GizmoHelper=v.GizmoHelper,exports.useGizmoContext=v.useGizmoContext,exports.GizmoViewcube=L.GizmoViewcube,exports.GizmoViewport=A.GizmoViewport,exports.useCubeTexture=G.useCubeTexture,exports.useFBX=k.useFBX,exports.useGLTF=D.useGLTF,exports.useProgress=F.useProgress,exports.IsObject=w.IsObject,exports.useTexture=w.useTexture,exports.useKTX2=z.useKTX2,exports.Stats=y.Stats,exports.useDepthBuffer=I.useDepthBuffer,exports.useAspect=O.useAspect,exports.useCamera=R.useCamera,exports.useDetectGPU=E.useDetectGPU,exports.useHelper=H.useHelper,exports.useBVH=V.useBVH,exports.useContextBridge=Q.useContextBridge,exports.useAnimations=X.useAnimations,exports.useFBO=K.useFBO,exports.useIntersect=W.useIntersect,exports.CurveModifier=N.CurveModifier,exports.MeshDistortMaterial=U.MeshDistortMaterial,exports.MeshWobbleMaterial=_.MeshWobbleMaterial,exports.MeshReflectorMaterial=J.MeshReflectorMaterial,exports.PointMaterial=Y.PointMaterial,exports.PointMaterialImpl=Y.PointMaterialImpl,exports.shaderMaterial=Z.shaderMaterial,exports.softShadows=$.softShadows,exports.Box=ee.Box,exports.Circle=ee.Circle,exports.Cone=ee.Cone,exports.Cylinder=ee.Cylinder,exports.Dodecahedron=ee.Dodecahedron,exports.Extrude=ee.Extrude,exports.Icosahedron=ee.Icosahedron,exports.Lathe=ee.Lathe,exports.Octahedron=ee.Octahedron,exports.Plane=ee.Plane,exports.Polyhedron=ee.Polyhedron,exports.Ring=ee.Ring,exports.Sphere=ee.Sphere,exports.Tetrahedron=ee.Tetrahedron,exports.Torus=ee.Torus,exports.TorusKnot=ee.TorusKnot,exports.Tube=ee.Tube,exports.RoundedBox=re.RoundedBox,exports.ScreenQuad=se.ScreenQuad,exports.Center=oe.Center,exports.Bounds=te.Bounds,exports.useBounds=te.useBounds,exports.CameraShake=ie.CameraShake,exports.Float=ce.Float,exports.Stage=ue.Stage,exports.Backdrop=ae.Backdrop,exports.Shadow=je.Shadow,exports.ContactShadows=ne.ContactShadows,exports.Reflector=pe.Reflector,exports.SpotLight=le.SpotLight,exports.Environment=xe.Environment,exports.Sky=qe.Sky,exports.calcPosFromAngles=qe.calcPosFromAngles,exports.Stars=de.Stars,exports.Cloud=Ce.Cloud,exports.useMatcapTexture=he.useMatcapTexture,exports.useNormalTexture=me.useNormalTexture,exports.Point=Se.Point,exports.Points=Se.Points,exports.PointsBuffer=Se.PointsBuffer,exports.Instance=Be.Instance,exports.Instances=Be.Instances,exports.Merged=Be.Merged,exports.Segment=be.Segment,exports.Segments=be.Segments,exports.Detailed=Pe.Detailed,exports.Preload=Me.Preload,exports.BakeShadows=fe.BakeShadows,exports.meshBounds=Te.meshBounds,exports.AdaptiveDpr=ge.AdaptiveDpr,exports.AdaptiveEvents=ve.AdaptiveEvents;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./Html.cjs.js"),r=require("./CycleRaycast.cjs.js"),s=require("./useCursor.cjs.js"),o=require("./Loader.cjs.js"),t=require("./ScrollControls.cjs.js"),i=require("./PresentationControls.cjs.js"),c=require("./Select.cjs.js"),u=require("../core/Billboard.cjs.js"),a=require("../core/QuadraticBezierLine.cjs.js"),j=require("../core/CubicBezierLine.cjs.js"),n=require("../core/Line.cjs.js"),p=require("../core/PositionalAudio.cjs.js"),l=require("../core/Text.cjs.js"),x=require("../core/Effects.cjs.js"),q=require("../core/GradientTexture.cjs.js"),d=require("../core/Image.cjs.js"),C=require("../core/Edges.cjs.js"),h=require("../core/OrthographicCamera.cjs.js"),m=require("../core/PerspectiveCamera.cjs.js"),S=require("../core/CubeCamera.cjs.js"),B=require("../core/DeviceOrientationControls.cjs.js"),b=require("../core/FlyControls.cjs.js"),P=require("../core/MapControls.cjs.js"),M=require("../core/OrbitControls.cjs.js"),f=require("../core/TrackballControls.cjs.js"),T=require("../core/ArcballControls.cjs.js"),g=require("../core/TransformControls.cjs.js"),v=require("../core/PointerLockControls.cjs.js"),L=require("../core/FirstPersonControls.cjs.js"),A=require("../core/GizmoHelper.cjs.js"),G=require("../core/GizmoViewcube.cjs.js"),k=require("../core/GizmoViewport.cjs.js"),D=require("../core/useCubeTexture.cjs.js"),F=require("../core/useFBX.cjs.js"),w=require("../core/useGLTF.cjs.js"),z=require("../core/useProgress.cjs.js"),y=require("../core/useTexture.cjs.js"),I=require("../core/useKTX2.cjs.js"),O=require("../core/Stats.cjs.js"),E=require("../core/useDepthBuffer.cjs.js"),R=require("../core/useAspect.cjs.js"),H=require("../core/useCamera.cjs.js"),V=require("../core/useDetectGPU.cjs.js"),Q=require("../core/useHelper.cjs.js"),X=require("../core/useBVH.cjs.js"),K=require("../core/useContextBridge.cjs.js"),W=require("../core/useAnimations.cjs.js"),N=require("../core/useFBO.cjs.js"),U=require("../core/useIntersect.cjs.js"),_=require("../core/CurveModifier.cjs.js"),J=require("../core/MeshDistortMaterial.cjs.js"),Y=require("../core/MeshWobbleMaterial.cjs.js"),Z=require("../core/MeshReflectorMaterial.cjs.js"),$=require("../core/PointMaterial.cjs.js"),ee=require("../core/shaderMaterial.cjs.js"),re=require("../core/softShadows.cjs.js"),se=require("../core/shapes.cjs.js"),oe=require("../core/RoundedBox.cjs.js"),te=require("../core/ScreenQuad.cjs.js"),ie=require("../core/Center.cjs.js"),ce=require("../core/Bounds.cjs.js"),ue=require("../core/CameraShake.cjs.js"),ae=require("../core/Float.cjs.js"),je=require("../core/Stage.cjs.js"),ne=require("../core/Backdrop.cjs.js"),pe=require("../core/Shadow.cjs.js"),le=require("../core/ContactShadows.cjs.js"),xe=require("../core/Reflector.cjs.js"),qe=require("../core/SpotLight.cjs.js"),de=require("../core/Environment.cjs.js"),Ce=require("../core/Sky.cjs.js"),he=require("../core/Stars.cjs.js"),me=require("../core/Cloud.cjs.js"),Se=require("../core/useMatcapTexture.cjs.js"),Be=require("../core/useNormalTexture.cjs.js"),be=require("../core/Points.cjs.js"),Pe=require("../core/Instances.cjs.js"),Me=require("../core/Segments.cjs.js"),fe=require("../core/Detailed.cjs.js"),Te=require("../core/Preload.cjs.js"),ge=require("../core/BakeShadows.cjs.js"),ve=require("../core/meshBounds.cjs.js"),Le=require("../core/AdaptiveDpr.cjs.js"),Ae=require("../core/AdaptiveEvents.cjs.js");require("@babel/runtime/helpers/extends"),require("react"),require("react-dom"),require("three"),require("@react-three/fiber"),require("zustand"),require("react-merge-refs"),require("@react-spring/three"),require("@use-gesture/react"),require("three-stdlib"),require("zustand/shallow"),require("troika-three-text"),require("lodash.omit"),require("lodash.pick"),require("three/examples/js/libs/stats.min"),require("../helpers/useEffectfulState.cjs.js"),require("detect-gpu"),require("use-asset"),require("three-mesh-bvh"),require("../materials/BlurPass.cjs.js"),require("../materials/ConvolutionMaterial.cjs.js"),require("../materials/MeshReflectorMaterial.cjs.js"),require("../helpers/environment-assets.cjs.js"),require("../materials/SpotLightMaterial.cjs.js"),require("../helpers/Position.cjs.js"),require("react-composer"),exports.Html=e.Html,exports.CycleRaycast=r.CycleRaycast,exports.useCursor=s.useCursor,exports.Loader=o.Loader,exports.Scroll=t.Scroll,exports.ScrollControls=t.ScrollControls,exports.useScroll=t.useScroll,exports.PresentationControls=i.PresentationControls,exports.Select=c.Select,exports.useSelect=c.useSelect,exports.Billboard=u.Billboard,exports.QuadraticBezierLine=a.QuadraticBezierLine,exports.CubicBezierLine=j.CubicBezierLine,exports.Line=n.Line,exports.PositionalAudio=p.PositionalAudio,exports.Text=l.Text,exports.Effects=x.Effects,exports.isWebGL2Available=x.isWebGL2Available,exports.GradientTexture=q.GradientTexture,exports.Image=d.Image,exports.Edges=C.Edges,exports.OrthographicCamera=h.OrthographicCamera,exports.PerspectiveCamera=m.PerspectiveCamera,exports.CubeCamera=S.CubeCamera,exports.DeviceOrientationControls=B.DeviceOrientationControls,exports.FlyControls=b.FlyControls,exports.MapControls=P.MapControls,exports.OrbitControls=M.OrbitControls,exports.TrackballControls=f.TrackballControls,exports.ArcballControls=T.ArcballControls,exports.TransformControls=g.TransformControls,exports.PointerLockControls=v.PointerLockControls,exports.FirstPersonControls=L.FirstPersonControls,exports.GizmoHelper=A.GizmoHelper,exports.useGizmoContext=A.useGizmoContext,exports.GizmoViewcube=G.GizmoViewcube,exports.GizmoViewport=k.GizmoViewport,exports.useCubeTexture=D.useCubeTexture,exports.useFBX=F.useFBX,exports.useGLTF=w.useGLTF,exports.useProgress=z.useProgress,exports.IsObject=y.IsObject,exports.useTexture=y.useTexture,exports.useKTX2=I.useKTX2,exports.Stats=O.Stats,exports.useDepthBuffer=E.useDepthBuffer,exports.useAspect=R.useAspect,exports.useCamera=H.useCamera,exports.useDetectGPU=V.useDetectGPU,exports.useHelper=Q.useHelper,exports.useBVH=X.useBVH,exports.useContextBridge=K.useContextBridge,exports.useAnimations=W.useAnimations,exports.useFBO=N.useFBO,exports.useIntersect=U.useIntersect,exports.CurveModifier=_.CurveModifier,exports.MeshDistortMaterial=J.MeshDistortMaterial,exports.MeshWobbleMaterial=Y.MeshWobbleMaterial,exports.MeshReflectorMaterial=Z.MeshReflectorMaterial,exports.PointMaterial=$.PointMaterial,exports.PointMaterialImpl=$.PointMaterialImpl,exports.shaderMaterial=ee.shaderMaterial,exports.softShadows=re.softShadows,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.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=oe.RoundedBox,exports.ScreenQuad=te.ScreenQuad,exports.Center=ie.Center,exports.Bounds=ce.Bounds,exports.useBounds=ce.useBounds,exports.CameraShake=ue.CameraShake,exports.Float=ae.Float,exports.Stage=je.Stage,exports.Backdrop=ne.Backdrop,exports.Shadow=pe.Shadow,exports.ContactShadows=le.ContactShadows,exports.Reflector=xe.Reflector,exports.SpotLight=qe.SpotLight,exports.Environment=de.Environment,exports.Sky=Ce.Sky,exports.calcPosFromAngles=Ce.calcPosFromAngles,exports.Stars=he.Stars,exports.Cloud=me.Cloud,exports.useMatcapTexture=Se.useMatcapTexture,exports.useNormalTexture=Be.useNormalTexture,exports.Point=be.Point,exports.Points=be.Points,exports.PointsBuffer=be.PointsBuffer,exports.Instance=Pe.Instance,exports.Instances=Pe.Instances,exports.Merged=Pe.Merged,exports.Segment=Me.Segment,exports.Segments=Me.Segments,exports.Detailed=fe.Detailed,exports.Preload=Te.Preload,exports.BakeShadows=ge.BakeShadows,exports.meshBounds=ve.meshBounds,exports.AdaptiveDpr=Le.AdaptiveDpr,exports.AdaptiveEvents=Ae.AdaptiveEvents;
package/web/index.d.ts CHANGED
@@ -4,4 +4,5 @@ export { useCursor } from './useCursor';
4
4
  export { Loader } from './Loader';
5
5
  export * from './ScrollControls';
6
6
  export * from './PresentationControls';
7
+ export * from './Select';
7
8
  export * from '../core';
package/web/index.js CHANGED
@@ -4,6 +4,7 @@ export { useCursor } from './useCursor.js';
4
4
  export { Loader } from './Loader.js';
5
5
  export { Scroll, ScrollControls, useScroll } from './ScrollControls.js';
6
6
  export { PresentationControls } from './PresentationControls.js';
7
+ export { Select, useSelect } from './Select.js';
7
8
  export { Billboard } from '../core/Billboard.js';
8
9
  export { QuadraticBezierLine } from '../core/QuadraticBezierLine.js';
9
10
  export { CubicBezierLine } from '../core/CubicBezierLine.js';
@@ -13,6 +14,7 @@ export { Text } from '../core/Text.js';
13
14
  export { Effects, isWebGL2Available } from '../core/Effects.js';
14
15
  export { GradientTexture } from '../core/GradientTexture.js';
15
16
  export { Image } from '../core/Image.js';
17
+ export { Edges } from '../core/Edges.js';
16
18
  export { OrthographicCamera } from '../core/OrthographicCamera.js';
17
19
  export { PerspectiveCamera } from '../core/PerspectiveCamera.js';
18
20
  export { CubeCamera } from '../core/CubeCamera.js';
@@ -90,6 +92,7 @@ import 'react-merge-refs';
90
92
  import '@react-spring/three';
91
93
  import '@use-gesture/react';
92
94
  import 'three-stdlib';
95
+ import 'zustand/shallow';
93
96
  import 'troika-three-text';
94
97
  import 'lodash.omit';
95
98
  import 'lodash.pick';