@react-three/fiber 8.0.0-beta.5 → 8.0.0-beta.8

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.
@@ -5,17 +5,16 @@ export interface Intersection extends THREE.Intersection {
5
5
  eventObject: THREE.Object3D;
6
6
  }
7
7
  export interface IntersectionEvent<TSourceEvent> extends Intersection {
8
+ eventObject: THREE.Object3D;
8
9
  intersections: Intersection[];
9
- stopped: boolean;
10
10
  unprojectedPoint: THREE.Vector3;
11
+ pointer: THREE.Vector2;
12
+ delta: number;
11
13
  ray: THREE.Ray;
12
14
  camera: Camera;
13
15
  stopPropagation: () => void;
14
- sourceEvent: TSourceEvent;
15
16
  nativeEvent: TSourceEvent;
16
- delta: number;
17
- spaceX: number;
18
- spaceY: number;
17
+ stopped: boolean;
19
18
  }
20
19
  export declare type Camera = THREE.OrthographicCamera | THREE.PerspectiveCamera;
21
20
  export declare type ThreeEvent<TEvent> = IntersectionEvent<TEvent>;
@@ -47,8 +46,14 @@ export declare type EventHandlers = {
47
46
  onPointerCancel?: (event: ThreeEvent<PointerEvent>) => void;
48
47
  onWheel?: (event: ThreeEvent<WheelEvent>) => void;
49
48
  };
49
+ export declare type FilterFunction = (items: THREE.Intersection[], state: RootState) => THREE.Intersection[];
50
+ export declare type ComputeFunction = (event: DomEvent, root: RootState, previous?: RootState) => void;
50
51
  export interface EventManager<TTarget> {
51
- connected: TTarget | boolean;
52
+ enabled: boolean;
53
+ priority: number;
54
+ compute?: ComputeFunction;
55
+ filter?: FilterFunction;
56
+ connected?: TTarget;
52
57
  handlers?: Events;
53
58
  connect?: (target: TTarget) => void;
54
59
  disconnect?: () => void;
@@ -1,6 +1,5 @@
1
1
  import * as THREE from 'three';
2
- import * as React from 'react';
3
- import { StateSelector, EqualityChecker, UseBoundStore } from 'zustand';
2
+ import { StateSelector, EqualityChecker } from 'zustand';
4
3
  import { GLTF } from 'three/examples/jsm/loaders/GLTFLoader';
5
4
  import { RootState, RenderCallback } from './store';
6
5
  import { ObjectMap } from './utils';
@@ -11,15 +10,16 @@ export declare type Extensions = (loader: THREE.Loader) => void;
11
10
  export declare type LoaderResult<T> = T extends any[] ? Loader<T[number]> : Loader<T>;
12
11
  export declare type ConditionalType<Child, Parent, Truthy, Falsy> = Child extends Parent ? Truthy : Falsy;
13
12
  export declare type BranchingReturn<T, Parent, Coerced> = ConditionalType<T, Parent, Coerced, T>;
14
- export declare function useStore(): UseBoundStore<RootState, import("zustand").StoreApi<RootState>>;
13
+ declare type noop = (...args: any[]) => any;
14
+ declare type PickFunction<T extends noop> = (...args: Parameters<T>) => ReturnType<T>;
15
+ export declare function useStore(): import("zustand").UseBoundStore<RootState, import("zustand").StoreApi<RootState>>;
15
16
  export declare function useThree<T = RootState>(selector?: StateSelector<RootState, T>, equalityFn?: EqualityChecker<T>): T;
16
- export declare function useInject(state: Partial<RootState>): [React.FC<{
17
- children: React.ReactNode;
18
- }>, UseBoundStore<RootState, import("zustand").StoreApi<RootState>>];
19
17
  export declare function useFrame(callback: RenderCallback, renderPriority?: number): null;
20
18
  export declare function useGraph(object: THREE.Object3D): ObjectMap;
19
+ export declare function useMemoizedFn<T extends noop>(fn?: T): PickFunction<T>;
21
20
  export declare function useLoader<T, U extends string | string[]>(Proto: new () => LoaderResult<T>, input: U, extensions?: Extensions, onProgress?: (event: ProgressEvent<EventTarget>) => void): U extends any[] ? BranchingReturn<T, GLTF, GLTF & ObjectMap>[] : BranchingReturn<T, GLTF, GLTF & ObjectMap>;
22
21
  export declare namespace useLoader {
23
22
  var preload: <T, U extends string | string[]>(Proto: new () => LoaderResult<T>, input: U, extensions?: Extensions | undefined) => undefined;
24
23
  var clear: <T, U extends string | string[]>(Proto: new () => LoaderResult<T>, input: U) => void;
25
24
  }
25
+ export {};
@@ -5,8 +5,8 @@ import { UseBoundStore } from 'zustand';
5
5
  import { Renderer, StoreProps, context, RootState, Size } from './store';
6
6
  import { extend, Root } from './renderer';
7
7
  import { addEffect, addAfterEffect, addTail } from './loop';
8
- import { EventManager } from './events';
9
- import { dispose } from './utils';
8
+ import { EventManager, ComputeFunction } from './events';
9
+ import { dispose, getRootState } from './utils';
10
10
  declare const roots: Map<Element, Root>;
11
11
  declare const invalidate: (state?: RootState | undefined) => void, advance: (timestamp: number, runGlobalEffects?: boolean, state?: RootState | undefined, frame?: THREE.XRFrame | undefined) => void;
12
12
  declare const reconciler: import("react-reconciler").Reconciler<unknown, unknown, unknown, unknown, unknown>, applyProps: typeof import("./utils").applyProps;
@@ -26,9 +26,17 @@ export declare type ReconcilerRoot<TCanvas extends Element> = {
26
26
  unmount: () => void;
27
27
  };
28
28
  declare function createRoot<TCanvas extends Element>(canvas: TCanvas): ReconcilerRoot<TCanvas>;
29
- declare function render<TCanvas extends Element>(element: React.ReactNode, canvas: TCanvas, config?: RenderProps<TCanvas>): UseBoundStore<RootState>;
29
+ declare function render<TCanvas extends Element>(children: React.ReactNode, canvas: TCanvas, config: RenderProps<TCanvas>): UseBoundStore<RootState>;
30
30
  declare function unmountComponentAtNode<TElement extends Element>(canvas: TElement, callback?: (canvas: TElement) => void): void;
31
- declare function createPortal(children: React.ReactNode, container: THREE.Object3D, state?: Partial<RootState>): React.ReactNode;
31
+ export declare type InjectState = Partial<Omit<RootState, 'set' | 'get' | 'setSize' | 'setFrameloop' | 'setDpr' | 'events' | 'invalidate' | 'advance' | 'performance' | 'internal'> & {
32
+ events: {
33
+ enabled?: boolean;
34
+ priority?: number;
35
+ compute?: ComputeFunction;
36
+ connected?: any;
37
+ };
38
+ }>;
39
+ declare function createPortal(children: React.ReactNode, container: THREE.Object3D, state?: InjectState): React.ReactNode;
32
40
  declare const act: any;
33
41
  export * from './hooks';
34
- export { context, render, createRoot, unmountComponentAtNode, createPortal, reconciler, applyProps, dispose, invalidate, advance, extend, addEffect, addAfterEffect, addTail, act, roots as _roots, };
42
+ export { context, render, createRoot, unmountComponentAtNode, createPortal, reconciler, applyProps, dispose, invalidate, advance, extend, addEffect, addAfterEffect, addTail, getRootState, act, roots as _roots, };
@@ -1,7 +1,7 @@
1
1
  import * as THREE from 'three';
2
2
  import * as React from 'react';
3
3
  import * as ReactThreeFiber from '../three-types';
4
- import { GetState, SetState, UseBoundStore } from 'zustand';
4
+ import { GetState, SetState, StoreApi, UseBoundStore } from 'zustand';
5
5
  import { DomEvent, EventManager, PointerCaptureTarget, ThreeEvent } from './events';
6
6
  export interface Intersection extends THREE.Intersection {
7
7
  eventObject: THREE.Object3D;
@@ -23,11 +23,6 @@ export declare type Viewport = Size & {
23
23
  aspect: number;
24
24
  };
25
25
  export declare type Camera = THREE.OrthographicCamera | THREE.PerspectiveCamera;
26
- export declare type Raycaster = THREE.Raycaster & {
27
- enabled: boolean;
28
- filter?: FilterFunction;
29
- computeOffsets?: ComputeOffsetsFunction;
30
- };
31
26
  export declare type RenderCallback = (state: RootState, delta: number, frame?: THREE.XRFrame) => void;
32
27
  export declare type Performance = {
33
28
  current: number;
@@ -55,45 +50,41 @@ export declare type InternalState = {
55
50
  subscribe: (callback: React.MutableRefObject<RenderCallback>, priority?: number) => () => void;
56
51
  };
57
52
  export declare type RootState = {
53
+ set: SetState<RootState>;
54
+ get: GetState<RootState>;
58
55
  gl: THREE.WebGLRenderer;
59
56
  camera: Camera & {
60
57
  manual?: boolean;
61
58
  };
62
- raycaster: Raycaster;
59
+ scene: THREE.Scene;
60
+ raycaster: THREE.Raycaster;
61
+ clock: THREE.Clock;
63
62
  events: EventManager<any>;
64
63
  xr: {
65
64
  connect: () => void;
66
65
  disconnect: () => void;
67
66
  };
68
- scene: THREE.Scene;
69
67
  controls: THREE.EventDispatcher | null;
68
+ pointer: THREE.Vector2;
70
69
  mouse: THREE.Vector2;
71
- clock: THREE.Clock;
72
70
  linear: boolean;
73
71
  flat: boolean;
74
72
  frameloop: 'always' | 'demand' | 'never';
75
73
  performance: Performance;
76
74
  size: Size;
77
75
  viewport: Viewport & {
78
- getCurrentViewport: (camera?: Camera, target?: THREE.Vector3, size?: Size) => Omit<Viewport, 'dpr' | 'initialDpr'>;
76
+ getCurrentViewport: (camera?: Camera, target?: THREE.Vector3 | Parameters<THREE.Vector3['set']>, size?: Size) => Omit<Viewport, 'dpr' | 'initialDpr'>;
79
77
  };
80
- set: SetState<RootState>;
81
- get: GetState<RootState>;
82
78
  invalidate: () => void;
83
79
  advance: (timestamp: number, runGlobalEffects?: boolean) => void;
80
+ setEvents: (events: EventManager<any>) => void;
84
81
  setSize: (width: number, height: number) => void;
85
82
  setDpr: (dpr: Dpr) => void;
86
83
  setFrameloop: (frameloop?: 'always' | 'demand' | 'never') => void;
87
84
  onPointerMissed?: (event: MouseEvent) => void;
85
+ previousRoot?: UseBoundStore<RootState, StoreApi<RootState>>;
88
86
  internal: InternalState;
89
87
  };
90
- export declare type FilterFunction = (items: THREE.Intersection[], state: RootState) => THREE.Intersection[];
91
- export declare type ComputeOffsetsFunction = (event: any, state: RootState) => {
92
- offsetX: number;
93
- offsetY: number;
94
- width?: number;
95
- height?: number;
96
- };
97
88
  export declare type StoreProps = {
98
89
  gl: THREE.WebGLRenderer;
99
90
  size: Size;
@@ -104,12 +95,12 @@ export declare type StoreProps = {
104
95
  frameloop?: 'always' | 'demand' | 'never';
105
96
  performance?: Partial<Omit<Performance, 'regress'>>;
106
97
  dpr?: Dpr;
107
- raycaster?: Partial<Raycaster>;
98
+ raycaster?: Partial<THREE.Raycaster>;
108
99
  camera?: (Camera | Partial<ReactThreeFiber.Object3DNode<THREE.Camera, typeof THREE.Camera> & ReactThreeFiber.Object3DNode<THREE.PerspectiveCamera, typeof THREE.PerspectiveCamera> & ReactThreeFiber.Object3DNode<THREE.OrthographicCamera, typeof THREE.OrthographicCamera>>) & {
109
100
  manual?: boolean;
110
101
  };
111
102
  onPointerMissed?: (event: MouseEvent) => void;
112
103
  };
113
- declare const context: React.Context<UseBoundStore<RootState, import("zustand").StoreApi<RootState>>>;
104
+ declare const context: React.Context<UseBoundStore<RootState, StoreApi<RootState>>>;
114
105
  declare const createStore: (invalidate: (state?: RootState | undefined) => void, advance: (timestamp: number, runGlobalEffects?: boolean | undefined, state?: RootState | undefined, frame?: THREE.XRFrame | undefined) => void) => UseBoundStore<RootState>;
115
106
  export { createStore, context };
@@ -1,6 +1,6 @@
1
1
  import * as THREE from 'three';
2
2
  import { AttachType, Instance, InstanceProps, LocalState } from './renderer';
3
- import { Dpr } from './store';
3
+ import { Dpr, RootState } from './store';
4
4
  export declare const DEFAULT = "__default";
5
5
  export declare type DiffSet = {
6
6
  memoized: {
@@ -21,6 +21,7 @@ export declare type ObjectMap = {
21
21
  };
22
22
  };
23
23
  export declare function calculateDpr(dpr: Dpr): number;
24
+ export declare const getRootState: (obj: THREE.Object3D) => RootState | undefined;
24
25
  export declare function filterKeys<TObj extends {
25
26
  [key: string]: any;
26
27
  }, TOmit extends boolean, TKey extends keyof TObj>(obj: TObj, omit: TOmit, ...keys: TKey[]): TOmit extends true ? Omit<TObj, TKey> : Pick<TObj, TKey>;