@react-three/drei 9.93.0 → 9.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3638,30 +3638,53 @@ integrations into your view.
3638
3638
  > versions of `@react-three/fiber`.
3639
3639
 
3640
3640
  ```tsx
3641
- <View
3642
- /** The tracking element, the view will be cut according to its whereabouts */
3643
- track: React.MutableRefObject<HTMLElement>
3641
+ export type ViewProps = {
3642
+ /** Root element type, default: div */
3643
+ as?: string
3644
+ /** CSS id prop */
3645
+ id?: string
3646
+ /** CSS classname prop */
3647
+ className?: string
3648
+ /** CSS style prop */
3649
+ style?: React.CSSProperties
3650
+ /** If the view is visible or not, default: true */
3651
+ visible?: boolean
3644
3652
  /** Views take over the render loop, optional render index (1 by default) */
3645
3653
  index?: number
3646
- /** If you know your view is always at the same place set this to 1 to avoid needless getBoundingClientRect overhead. The default is Infinity, which is best for css animations */
3654
+ /** If you know your view is always at the same place set this to 1 to avoid needless getBoundingClientRect overhead */
3647
3655
  frames?: number
3648
3656
  /** The scene to render, if you leave this undefined it will render the default scene */
3649
3657
  children?: React.ReactNode
3650
- />
3658
+ /** The tracking element, the view will be cut according to its whereabouts
3659
+ * @deprecated
3660
+ */
3661
+ track: React.MutableRefObject<HTMLElement>
3662
+ }
3663
+
3664
+ export type ViewportProps = { Port: () => React.ReactNode } & React.ForwardRefExoticComponent<
3665
+ ViewProps & React.RefAttributes<HTMLElement | THREE.Group>
3666
+ >
3651
3667
  ```
3652
3668
 
3669
+ You can define as many views as you like, directly mix them into your dom graph, right where you want them to appear. `View` is an unstyled HTML DOM element (by default a div, and it takes the same properties as one). Use `View.Port` inside the canvas to output them. The canvas should ideally fill the entire screen with absolute positioning, underneath HTML or on top of it, as you prefer.
3670
+
3653
3671
  ```jsx
3654
- const container = useRef()
3655
- const tracking = useRef()
3656
3672
  return (
3657
3673
  <main ref={container}>
3658
3674
  <h1>Html content here</h1>
3659
- <div ref={tracking} style={{ width: 200, height: 200 }} />
3675
+ <View style={{ width: 200, height: 200 }}>
3676
+ <mesh geometry={foo} />
3677
+ <OrbitControls />
3678
+ </View>
3679
+ <View className="canvas-view">
3680
+ <mesh geometry={bar} />
3681
+ <CameraControls />
3682
+ </View>
3660
3683
  <Canvas eventSource={container}>
3661
- <View track={tracking}>
3662
- <mesh />
3663
- <OrbitControls />
3664
- </View>
3684
+ <View.Port />
3685
+ </Canvas>
3686
+ </main>
3687
+ )
3665
3688
  ```
3666
3689
 
3667
3690
  #### RenderTexture
@@ -33,27 +33,7 @@ declare class PositionMesh extends THREE.Group {
33
33
  get geometry(): THREE.BufferGeometry | undefined;
34
34
  raycast(raycaster: THREE.Raycaster, intersects: THREE.Intersection[]): void;
35
35
  }
36
- export declare const Instance: React.ForwardRefExoticComponent<Omit<Omit<ReactThreeFiber.ExtendedColors<ReactThreeFiber.Overwrite<Partial<PositionMesh>, ReactThreeFiber.NodeProps<PositionMesh, typeof PositionMesh>>>, ReactThreeFiber.NonFunctionKeys<{
37
- position?: ReactThreeFiber.Vector3 | undefined;
38
- up?: ReactThreeFiber.Vector3 | undefined;
39
- scale?: ReactThreeFiber.Vector3 | undefined;
40
- rotation?: ReactThreeFiber.Euler | undefined;
41
- matrix?: ReactThreeFiber.Matrix4 | undefined;
42
- quaternion?: ReactThreeFiber.Quaternion | undefined;
43
- layers?: ReactThreeFiber.Layers | undefined;
44
- dispose?: (() => void) | null | undefined;
45
- }>> & {
46
- position?: ReactThreeFiber.Vector3 | undefined;
47
- up?: ReactThreeFiber.Vector3 | undefined;
48
- scale?: ReactThreeFiber.Vector3 | undefined;
49
- rotation?: ReactThreeFiber.Euler | undefined;
50
- matrix?: ReactThreeFiber.Matrix4 | undefined;
51
- quaternion?: ReactThreeFiber.Quaternion | undefined;
52
- layers?: ReactThreeFiber.Layers | undefined;
53
- dispose?: (() => void) | null | undefined;
54
- } & import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers & {
55
- context?: React.Context<Api> | undefined;
56
- }, "ref"> & React.RefAttributes<unknown>>;
36
+ export declare const Instance: React.ForwardRefExoticComponent<Omit<InstanceProps, "ref"> & React.RefAttributes<unknown>>;
57
37
  export declare const Instances: ForwardRefComponent<InstancesProps, InstancedMesh>;
58
38
  export interface MergedProps extends InstancesProps {
59
39
  meshes: THREE.Mesh[];
package/core/Instances.js CHANGED
@@ -6,6 +6,9 @@ import mergeRefs from 'react-merge-refs';
6
6
  import Composer from 'react-composer';
7
7
  import { setUpdateRange } from '../helpers/deprecated.js';
8
8
 
9
+ function isFunctionChild(value) {
10
+ return typeof value === 'function';
11
+ }
9
12
  const _instanceLocalMatrix = /* @__PURE__ */new THREE.Matrix4();
10
13
  const _instanceWorldMatrix = /* @__PURE__ */new THREE.Matrix4();
11
14
  const _instanceIntersects = [];
@@ -173,7 +176,7 @@ const Instances = /* @__PURE__ */React.forwardRef(({
173
176
  array: colors,
174
177
  itemSize: 3,
175
178
  usage: THREE.DynamicDrawUsage
176
- }), typeof children === 'function' ? /*#__PURE__*/React.createElement(context.Provider, {
179
+ }), isFunctionChild(children) ? /*#__PURE__*/React.createElement(context.Provider, {
177
180
  value: api
178
181
  }, children(instance)) : /*#__PURE__*/React.createElement(globalContext.Provider, {
179
182
  value: api
package/core/Line.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("three"),n=require("@react-three/fiber"),i=require("three-stdlib");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var a=o(e),c=s(t);const u=c.forwardRef((function({points:e,color:t="black",vertexColors:o,linewidth:s,lineWidth:u,segments:l,dashed:f,...d},m){const h=n.useThree((e=>e.size)),p=c.useMemo((()=>l?new i.LineSegments2:new i.Line2),[l]),[b]=c.useState((()=>new i.LineMaterial)),y=c.useMemo((()=>{const t=l?new i.LineSegmentsGeometry:new i.LineGeometry,n=e.map((e=>{const t=Array.isArray(e);return e instanceof r.Vector3?[e.x,e.y,e.z]:e instanceof r.Vector2?[e.x,e.y,0]:t&&3===e.length?[e[0],e[1],e[2]]:t&&2===e.length?[e[0],e[1],0]:e}));if(t.setPositions(n.flat()),o){const e=o.map((e=>e instanceof r.Color?e.toArray():e));t.setColors(e.flat())}return t}),[e,l,o]);return c.useLayoutEffect((()=>{p.computeLineDistances()}),[e,p]),c.useLayoutEffect((()=>{f?b.defines.USE_DASH="":delete b.defines.USE_DASH,b.needsUpdate=!0}),[f,b]),c.useEffect((()=>()=>y.dispose()),[y]),c.createElement("primitive",a.default({object:p,ref:m},d),c.createElement("primitive",{object:y,attach:"geometry"}),c.createElement("primitive",a.default({object:b,attach:"material",color:t,vertexColors:Boolean(o),resolution:[h.width,h.height],linewidth:null!=s?s:u,dashed:f},d)))}));exports.Line=u;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),n=require("@react-three/fiber"),i=require("three-stdlib");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var a=o(e),c=s(t);const u=c.forwardRef((function({points:e,color:t="black",vertexColors:o,linewidth:s,lineWidth:u,segments:l,dashed:f,...d},m){const h=n.useThree((e=>e.size)),p=c.useMemo((()=>l?new i.LineSegments2:new i.Line2),[l]),[b]=c.useState((()=>new i.LineMaterial)),y=c.useMemo((()=>{const t=l?new i.LineSegmentsGeometry:new i.LineGeometry,n=e.map((e=>{const t=Array.isArray(e);return e instanceof r.Vector3||e instanceof r.Vector4?[e.x,e.y,e.z]:e instanceof r.Vector2?[e.x,e.y,0]:t&&3===e.length?[e[0],e[1],e[2]]:t&&2===e.length?[e[0],e[1],0]:e}));if(t.setPositions(n.flat()),o){const e=o.map((e=>e instanceof r.Color?e.toArray():e));t.setColors(e.flat())}return t}),[e,l,o]);return c.useLayoutEffect((()=>{p.computeLineDistances()}),[e,p]),c.useLayoutEffect((()=>{f?b.defines.USE_DASH="":delete b.defines.USE_DASH,b.needsUpdate=!0}),[f,b]),c.useEffect((()=>()=>y.dispose()),[y]),c.createElement("primitive",a.default({object:p,ref:m},d),c.createElement("primitive",{object:y,attach:"geometry"}),c.createElement("primitive",a.default({object:b,attach:"material",color:t,vertexColors:Boolean(o),resolution:[h.width,h.height],linewidth:null!=s?s:u,dashed:f},d)))}));exports.Line=u;
package/core/Line.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import _extends from '@babel/runtime/helpers/esm/extends';
2
2
  import * as React from 'react';
3
- import { Vector3, Vector2, Color } from 'three';
3
+ import { Vector3, Vector4, Vector2, Color } from 'three';
4
4
  import { useThree } from '@react-three/fiber';
5
5
  import { LineSegments2, Line2, LineMaterial, LineSegmentsGeometry, LineGeometry } from 'three-stdlib';
6
6
 
@@ -21,7 +21,7 @@ const Line = /* @__PURE__ */React.forwardRef(function Line({
21
21
  const geom = segments ? new LineSegmentsGeometry() : new LineGeometry();
22
22
  const pValues = points.map(p => {
23
23
  const isArray = Array.isArray(p);
24
- return p instanceof Vector3 ? [p.x, p.y, p.z] : p instanceof Vector2 ? [p.x, p.y, 0] : isArray && p.length === 3 ? [p[0], p[1], p[2]] : isArray && p.length === 2 ? [p[0], p[1], 0] : p;
24
+ return p instanceof Vector3 || p instanceof Vector4 ? [p.x, p.y, p.z] : p instanceof Vector2 ? [p.x, p.y, 0] : isArray && p.length === 3 ? [p[0], p[1], p[2]] : isArray && p.length === 2 ? [p[0], p[1], 0] : p;
25
25
  });
26
26
  geom.setPositions(pValues.flat());
27
27
  if (vertexColors) {
@@ -25,12 +25,4 @@ export type PortalProps = JSX.IntrinsicElements['shaderMaterial'] & {
25
25
  renderPriority?: number;
26
26
  events?: boolean;
27
27
  };
28
- export declare const MeshPortalMaterial: React.ForwardRefExoticComponent<Omit<ReactThreeFiber.ExtendedColors<ReactThreeFiber.Overwrite<Partial<THREE.ShaderMaterial>, ReactThreeFiber.NodeProps<THREE.ShaderMaterial, [THREE.ShaderMaterialParameters]>>> & {
29
- blend?: number | undefined;
30
- blur?: number | undefined;
31
- resolution?: number | undefined;
32
- worldUnits?: boolean | undefined;
33
- eventPriority?: number | undefined;
34
- renderPriority?: number | undefined;
35
- events?: boolean | undefined;
36
- }, "ref"> & React.RefAttributes<PortalMaterialType>>;
28
+ export declare const MeshPortalMaterial: React.ForwardRefExoticComponent<Omit<PortalProps, "ref"> & React.RefAttributes<PortalMaterialType>>;